:root {
  --fgulem-magenta: #c21b84;
  --fgulem-magenta-soft: #d94da0;
  --fgulem-green: #7faa55;
  --fgulem-green-dark: #2f7a55;
  --fgulem-blue: #5a9fd3;
  --ink: #4f4c55;
  --ink-soft: #6e6a73;
  --line: #e5e7eb;
  --shadow: 0 12px 30px rgba(42, 46, 56, 0.08);
  --radius: 18px;
}

* { box-sizing: border-box; }

body {
  margin: 0;
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  background:
      radial-gradient(circle at top left, rgba(194, 27, 132, 0.10), transparent 24%),
      radial-gradient(circle at top right, rgba(95, 159, 211, 0.12), transparent 22%),
      linear-gradient(180deg, #f7f7f8 0%, #f1f3f5 100%);
  color: var(--ink);
  min-height: 100vh;
}

a { color: inherit; text-decoration: none; }
img { max-width: 100%; display: block; }
input, button, select, textarea { font: inherit; }

.layout {
  min-height: 100vh;
  display: grid;
  grid-template-columns: 260px 1fr;
}

.sidebar {
  background: linear-gradient(180deg, rgba(255,255,255,0.94) 0%, rgba(255,255,255,0.90) 100%);
  border-right: 1px solid rgba(229, 231, 235, 0.9);
  padding: 28px 22px;
  backdrop-filter: blur(8px);
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

.sidebar-footer {
  margin-top: auto;
  padding-top: 24px;
  font-size: 0.7rem;
  color: var(--ink-soft);
  opacity: 0.7;
  letter-spacing: 0.02em;
}

.brand {
  display: flex;
  flex-direction: column;
  gap: 14px;
  margin-bottom: 28px;
}

.brand-logo {
  width: 100%;
  max-width: 170px;
  height: auto;
  display: block;
  margin-bottom: 4px;
}

.brand-title {
  font-size: 1.4rem;
  font-weight: 800;
  letter-spacing: 0.02em;
  color: var(--ink);
  line-height: 1.2;
}

.brand-subtitle {
  color: var(--ink-soft);
  font-size: 0.82rem;
  letter-spacing: 0.01em;
  line-height: 1.4;
  margin: 4px 0 0;
}

.brand-centered { text-align: center; margin-bottom: 32px; }
.brand-logo-login { width: 160px; margin: 0 auto 16px; mix-blend-mode: multiply; }
.brand-title-login { font-size: 1.5rem; letter-spacing: -0.02em; margin: 0 0 6px; }

.nav-section-title {
  font-size: 0.74rem;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: #8a8691;
  margin: 24px 0 10px;
  font-weight: 700;
}

/* Sección plegable de la barra lateral (p. ej. Configuración). Mantiene el mismo
   aspecto que .nav-section-title, pero es un botón con chevron. */
.nav-section {
  margin-top: 28px;
}

.nav-section-toggle {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  width: 100%;
  padding: 0 2px;
  margin: 0 0 10px;
  border: none;
  background: transparent;
  font-family: inherit;
  font-size: 0.74rem;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: #8a8691;
  font-weight: 700;
  cursor: pointer;
  transition: color 0.18s ease;
}

.nav-section-toggle:hover,
.nav-section.is-open .nav-section-toggle {
  color: var(--fgulem-magenta);
}

.nav-section-toggle .nav-chevron {
  flex-shrink: 0;
  transform: rotate(45deg) translateY(-2px);
}

.nav-section.is-open .nav-section-toggle .nav-chevron {
  transform: rotate(-135deg) translateY(-2px);
}

.nav-section:not(.is-open) .nav-section-items {
  display: none;
}

.nav-link {
  display: block;
  padding: 12px 14px;
  margin-bottom: 6px;
  border-radius: 12px;
  color: var(--ink);
  font-weight: 600;
  background: transparent;
  transition: background 0.18s ease, color 0.18s ease, transform 0.18s ease;
}

.nav-link:hover,
.nav-link.active {
  background: rgba(95, 159, 211, 0.10);
  color: var(--fgulem-magenta);
  transform: translateX(2px);
}

.nav-group {
  margin-bottom: 6px;
}

.nav-link-row {
  display: flex;
  align-items: stretch;
  gap: 4px;
}

.nav-link--split {
  flex: 1;
  margin-bottom: 0;
}

.nav-toggle {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  flex-shrink: 0;
  border: none;
  border-radius: 12px;
  background: transparent;
  color: var(--ink-soft);
  cursor: pointer;
  transition: background 0.18s ease, color 0.18s ease;
}

.nav-toggle:hover,
.nav-group.is-open .nav-toggle {
  background: rgba(95, 159, 211, 0.10);
  color: var(--fgulem-magenta);
}

.nav-chevron {
  display: block;
  width: 8px;
  height: 8px;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  transform: rotate(45deg) translateY(-2px);
  transition: transform 0.18s ease;
}

.nav-group.is-open .nav-chevron {
  transform: rotate(-135deg) translateY(-2px);
}

.nav-group:not(.is-open) .nav-submenu {
  display: none;
}

.nav-submenu {
  display: grid;
  gap: 6px;
  margin: 8px 0 0;
}

.nav-sublink {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 12px 10px 28px;
  border-radius: 12px;
  color: var(--ink-soft);
  font-size: 0.9rem;
  font-weight: 600;
  transition: background 0.18s ease, color 0.18s ease;
}

.nav-sublink:hover,
.nav-sublink.active {
  background: rgba(95, 159, 211, 0.08);
  color: var(--ink);
}

.nav-count {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 28px;
  height: 28px;
  padding: 0 8px;
  border-radius: 999px;
  background: rgba(255,255,255,0.82);
  border: 1px solid rgba(229, 231, 235, 0.95);
  color: var(--fgulem-magenta);
  font-size: 0.8rem;
  font-weight: 800;
}

.content {
  padding: 28px 32px 40px;
  min-width: 0;
  max-width: 100%;
}

.topbar {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 20px;
  margin-bottom: 24px;
}

.page-heading h1 {
  margin: 0;
  font-size: 1.8rem;
  color: var(--ink);
  letter-spacing: -0.02em;
}

.page-heading p {
  margin: 6px 0 0;
  color: var(--ink-soft);
  font-size: 0.98rem;
}

.badge {
  display: inline-flex;
  align-items: center;
  padding: 8px 12px;
  border-radius: 999px;
  background: rgba(194, 27, 132, 0.08);
  color: var(--fgulem-magenta);
  font-weight: 700;
  font-size: 0.86rem;
}

.user-pill {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 14px;
  border-radius: 999px;
  background: rgba(255,255,255,0.85);
  border: 1px solid var(--line);
  font-size: 0.88rem;
}

.user-pill-name {
  font-weight: 700;
  color: var(--ink);
}

.user-pill-rol {
  font-size: 0.76rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  padding: 3px 8px;
  border-radius: 999px;
  background: rgba(194, 27, 132, 0.10);
  color: var(--fgulem-magenta);
}

.btn-logout {
  display: inline-flex;
  align-items: center;
  padding: 8px 14px;
  border-radius: 12px;
  border: 1px solid rgba(194, 27, 132, 0.22);
  background: transparent;
  color: var(--fgulem-magenta);
  font-weight: 700;
  font-size: 0.86rem;
  cursor: pointer;
}

.btn-logout:hover { background: rgba(194, 27, 132, 0.07); }

.flash-stack {
  display: grid;
  gap: 10px;
  margin-bottom: 18px;
}

.flash {
  border-radius: 12px;
  padding: 12px 14px;
  font-size: 0.93rem;
  font-weight: 600;
}

.flash-success { background: rgba(31,107,73,0.10); color: #1f6b49; border: 1px solid rgba(31,107,73,0.18); }
.flash-danger { background: rgba(194,27,132,0.08); color: var(--fgulem-magenta); border: 1px solid rgba(194,27,132,0.22); }
.flash-warning { background: rgba(239,159,39,0.13); color: #854f0b; border: 1px solid rgba(239,159,39,0.2); }
.flash-info { background: rgba(95,159,211,0.12); color: #185fa5; border: 1px solid rgba(95,159,211,0.18); }

.card {
  background: rgba(255,255,255,0.94);
  border: 1px solid rgba(229, 231, 235, 0.95);
  border-radius: var(--radius);
  padding: 22px 24px;
  box-shadow: var(--shadow);
  margin-bottom: 18px;
}

.card h2, .card h3 {
  margin-top: 0;
  color: var(--ink);
}

.toolbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  margin-bottom: 16px;
}

.actions {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
}

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 11px 16px;
  border-radius: 12px;
  border: 1px solid transparent;
  text-decoration: none;
  font-weight: 700;
  cursor: pointer;
  transition: transform 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
}

.btn:hover { transform: translateY(-1px); }

.btn-primary {
  background: linear-gradient(135deg, var(--fgulem-magenta) 0%, var(--fgulem-magenta-soft) 100%);
  color: white;
  box-shadow: 0 12px 22px rgba(194, 27, 132, 0.20);
}

.btn-secondary {
  background: rgba(95, 159, 211, 0.10);
  color: var(--ink);
  border-color: rgba(95, 159, 211, 0.20);
}

.btn-secondary.is-active {
  background: rgba(194, 27, 132, 0.10);
  color: var(--fgulem-magenta);
  border-color: rgba(194, 27, 132, 0.18);
}

.btn-block { width: 100%; }

.topbar-access {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  flex-shrink: 0;
}

.topbar--access-only {
  justify-content: flex-end;
  margin-bottom: 16px;
}

.btn-access {
  padding: 7px 14px;
  font-size: 0.8rem;
}

.auth-modal-panel.modal-panel-compact {
  width: min(340px, calc(100vw - 32px));
  max-width: 340px;
  border-radius: 14px;
}

.auth-modal-panel .modal-header-compact {
  padding: 14px 16px 10px;
  align-items: flex-start;
}

.auth-modal-panel .modal-body-compact {
  padding: 8px 16px 16px;
}

.auth-modal-panel .modal-title-compact {
  font-size: 1rem;
  line-height: 1.3;
}

.auth-modal-panel .modal-subtitle-compact {
  margin-top: 2px;
  font-size: 0.78rem;
  line-height: 1.35;
}

.auth-modal-panel .modal-close-compact {
  width: 30px;
  height: 30px;
  font-size: 1.15rem;
}

.auth-modal-form .field {
  margin-bottom: 10px;
}

.auth-modal-form .field label {
  margin-bottom: 4px;
  font-size: 0.78rem;
}

.auth-modal-form input {
  padding: 8px 10px;
  font-size: 0.88rem;
  border-radius: 9px;
}

.auth-modal-actions {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-top: 2px;
}

.auth-modal-actions .btn {
  min-width: 96px;
}

.auth-modal-register-link {
  font-size: 0.74rem;
  font-weight: 600;
  color: var(--ink-soft);
  text-decoration: none;
  white-space: nowrap;
  background: none;
  border: none;
  padding: 0;
  cursor: pointer;
  font-family: inherit;
}

.auth-modal-register-link:hover {
  color: var(--fgulem-magenta);
  text-decoration: underline;
}

.auth-modal-forgot {
  margin-top: 10px;
  text-align: center;
}

.auth-modal-forgot a {
  font-size: 0.78rem;
  font-weight: 600;
  color: var(--ink-soft);
  text-decoration: none;
}

.auth-modal-forgot a:hover {
  color: var(--fgulem-magenta);
  text-decoration: underline;
}

.auth-register-modal-panel {
  width: min(520px, calc(100vw - 24px));
}

.auth-register-modal-panel .modal-body-compact {
  max-height: min(72vh, 720px);
  overflow-y: auto;
}

.auth-register-form--modal {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px 10px;
}

.auth-register-form--modal .field-full {
  grid-column: 1 / -1;
}

.auth-register-actions--modal {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-top: 4px;
}

.page-register-compact .page-heading h1 {
  font-size: 1.2rem;
  margin-bottom: 0;
}

.page-register-compact .page-heading p {
  display: none;
}

.auth-register-shell {
  display: flex;
  justify-content: center;
}

.auth-register-card {
  width: min(480px, 100%);
  padding: 14px 16px 16px;
  border-radius: 14px;
}

.auth-register-top {
  display: flex;
  justify-content: flex-end;
  margin-bottom: 8px;
}

.auth-register-form {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px 10px;
}

.auth-register-form .field-full {
  grid-column: 1 / -1;
}

.auth-register-form .field {
  margin-bottom: 0;
}

.auth-register-form .field label {
  margin-bottom: 3px;
  font-size: 0.76rem;
  font-weight: 600;
}

.auth-register-form input,
.auth-register-form select {
  padding: 7px 9px;
  font-size: 0.86rem;
  border-radius: 8px;
}

.auth-register-form .field-errors {
  margin-top: 4px;
  font-size: 0.74rem;
}

.auth-register-form .field-errors--invalid,
.auth-register-form .field-errors--live.is-visible,
.auth-register-form .field-errors--live:not([hidden]) {
  color: #dc2626;
  font-size: 0.8rem;
  font-weight: 700;
  line-height: 1.35;
  margin-top: 6px;
}

.auth-register-form input.is-invalid,
.auth-register-form input[aria-invalid="true"] {
  border-color: #dc2626 !important;
  box-shadow: 0 0 0 2px rgba(220, 38, 38, 0.14);
}

.auth-register-form input.is-valid {
  border-color: #16a34a;
  box-shadow: 0 0 0 2px rgba(22, 163, 74, 0.12);
}

.document-id-feedback-dialog {
  border: none;
  border-radius: 14px;
  padding: 0;
  max-width: min(92vw, 380px);
  box-shadow: 0 18px 48px rgba(15, 23, 42, 0.22);
}

.document-id-feedback-dialog::backdrop {
  background: rgba(15, 23, 42, 0.45);
}

.document-id-feedback-dialog-inner {
  display: grid;
  gap: 14px;
  padding: 20px 18px 18px;
  text-align: center;
}

.document-id-feedback-dialog-icon {
  width: 44px;
  height: 44px;
  margin: 0 auto;
  border-radius: 999px;
  display: grid;
  place-items: center;
  font-size: 1.35rem;
  font-weight: 800;
}

.document-id-feedback-dialog--invalid .document-id-feedback-dialog-icon {
  background: rgba(220, 38, 38, 0.12);
  color: #dc2626;
}

.document-id-feedback-dialog--valid .document-id-feedback-dialog-icon {
  background: rgba(22, 163, 74, 0.12);
  color: #16a34a;
}

.document-id-feedback-dialog-copy h3 {
  margin: 0 0 6px;
  font-size: 1.02rem;
}

.document-id-feedback-dialog-copy p {
  margin: 0;
  color: var(--ink-soft);
  font-size: 0.86rem;
  line-height: 1.45;
}

.document-id-feedback-dialog--invalid .document-id-feedback-dialog-copy p {
  color: #dc2626;
  font-weight: 600;
}

.auth-register-privacy {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  padding: 8px 10px;
  background: rgba(122, 35, 72, 0.04);
  border: 1px solid rgba(122, 35, 72, 0.12);
  border-radius: 8px;
}

.auth-register-privacy input {
  width: 14px;
  height: 14px;
  margin-top: 2px;
  flex-shrink: 0;
  accent-color: #7a2348;
}

.auth-register-privacy label {
  font-weight: 400;
  font-size: 0.78rem;
  line-height: 1.4;
  margin: 0;
  cursor: pointer;
}

.auth-register-privacy-btn {
  background: none;
  border: none;
  padding: 0;
  color: #7a2348;
  font-weight: 700;
  cursor: pointer;
  text-decoration: underline;
  font-size: inherit;
}

.auth-register-actions {
  grid-column: 1 / -1;
  margin-top: 2px;
}

.field-required {
  color: #dc2626;
  font-weight: 700;
}

.auth-register-privacy-dialog {
  max-width: 640px;
  width: 95%;
  border: none;
  border-radius: 14px;
  padding: 0;
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.18);
}

.auth-register-privacy-dialog-inner {
  padding: 18px 20px;
}

.auth-register-privacy-dialog-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 10px;
  padding-bottom: 10px;
  border-bottom: 1px solid var(--line);
}

.auth-register-privacy-dialog-head h2 {
  margin: 0;
  font-size: 1rem;
  color: #7a2348;
}

.auth-register-privacy-dialog-head button {
  background: none;
  border: none;
  font-size: 1.3rem;
  cursor: pointer;
  color: #888;
  padding: 2px 6px;
  border-radius: 6px;
}

.auth-register-privacy-dialog-body {
  font-size: 0.84rem;
  line-height: 1.6;
  max-height: 50vh;
  overflow-y: auto;
  color: var(--ink);
}

.auth-register-privacy-dialog-foot {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  margin-top: 12px;
  padding-top: 10px;
  border-top: 1px solid var(--line);
}

@media (max-width: 640px) {
  .auth-register-form {
    grid-template-columns: 1fr;
  }
}

.home-intro {
  padding: 18px 20px;
}

.home-benefits-row {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 12px;
}

.page-home-compact .home-intro {
  margin-bottom: 0;
}

.page-home-compact .home-open-section {
  margin-top: 16px;
}

label {
  display: inline-block;
  margin-bottom: 8px;
  color: var(--ink);
  font-weight: 700;
  font-size: 0.95rem;
}

input, select, textarea {
  width: 100%;
  padding: 12px 14px;
  border: 1px solid #d8dce2;
  border-radius: 12px;
  background: white;
  color: var(--ink);
  font-size: 0.97rem;
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

input:focus, select:focus, textarea:focus {
  outline: none;
  border-color: var(--fgulem-blue);
  box-shadow: 0 0 0 4px rgba(95, 159, 211, 0.14);
}

.file-upload {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 10px;
}

.file-upload-input {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.file-upload-trigger {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  cursor: pointer;
  margin: 0;
  user-select: none;
}

.file-upload-trigger:hover {
  transform: translateY(-1px);
}

.file-upload-icon {
  width: 15px;
  height: 15px;
  flex-shrink: 0;
}

.file-upload-name {
  font-size: 0.8rem;
  color: var(--ink-soft);
  min-width: 0;
  flex: 1 1 160px;
  line-height: 1.35;
  word-break: break-word;
}

.file-upload-name.has-file {
  color: var(--ink);
  font-weight: 600;
}

.apply-upload-box .file-upload,
.apply-photo-upload .file-upload {
  margin-top: 4px;
}

.page-candidate-area .file-upload-name {
  font-size: 0.76rem;
  flex-basis: 100%;
}

.page-admin-compact .file-upload-name {
  font-size: 0.76rem;
}

.field { margin-bottom: 18px; }
.muted { color: var(--ink-soft); }
.footer-note { text-align: center; margin-top: 20px; font-size: 0.84rem; color: var(--ink-soft); }

.check-row {
  display: flex;
  align-items: center;
  gap: 10px;
  min-height: 48px;
  padding: 12px 14px;
  border: 1px solid #d8dce2;
  border-radius: 12px;
  background: white;
}

.check-row input[type="checkbox"] {
  width: 18px;
  height: 18px;
  margin: 0;
  flex: 0 0 auto;
}

table {
  width: 100%;
  border-collapse: collapse;
}

th {
  text-align: left;
  font-size: 0.82rem;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: #86828b;
  padding: 14px 12px;
  border-bottom: 1px solid var(--line);
}

td {
  padding: 14px 12px;
  border-bottom: 1px solid #eef0f3;
  color: var(--ink);
  vertical-align: middle;
}

tr:hover td { background: rgba(95, 159, 211, 0.04); }

.estado-badge {
  display: inline-flex;
  align-items: center;
  padding: 4px 10px;
  border-radius: 999px;
  font-size: 0.8rem;
  font-weight: 700;
  white-space: nowrap;
}

.estado-magenta { background: rgba(194,27,132,0.12); color: #a11463; }
.estado-blue { background: rgba(95,159,211,0.14); color: #185fa5; }
.estado-green { background: rgba(99,153,34,0.14); color: #3b6d11; }

.filtros-inline { display: flex; gap: 12px; flex-wrap: wrap; align-items: flex-end; margin-bottom: 0; }
.filtros-inline > div { display: flex; flex-direction: column; gap: 6px; }
.filtros-inline label { font-size: 0.82rem; text-transform: uppercase; letter-spacing: 0.06em; color: #86828b; font-weight: 700; }

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

.stack-sm {
  display: grid;
  gap: 12px;
}

.mini-card {
  padding: 16px 18px;
  border-radius: 16px;
  border: 1px solid rgba(229,231,235,0.95);
  background: rgba(255,255,255,0.8);
}

.modal-shell {
  position: fixed;
  inset: 0;
  display: none;
  align-items: center;
  justify-content: center;
  padding: 26px;
  z-index: 60;
}

.modal-shell.is-open {
  display: flex;
}

.modal-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(36, 40, 48, 0.42);
  backdrop-filter: blur(3px);
}

.modal-panel {
  position: relative;
  width: min(760px, 100%);
  max-height: calc(100vh - 52px);
  overflow: auto;
  border-radius: 22px;
  border: 1px solid rgba(229, 231, 235, 0.95);
  background: rgba(255,255,255,0.98);
  box-shadow: 0 18px 48px rgba(42, 46, 56, 0.18);
}

.modal-panel-wide {
  width: min(980px, 100%);
}

.modal-panel-valoracion {
  width: min(1120px, 100%);
}

.page-admin-compact .modal-panel-valoracion {
  width: min(1120px, calc(100vw - 24px));
}

.modal-header,
.modal-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  padding: 22px 24px;
}

.modal-header {
  border-bottom: 1px solid rgba(229, 231, 235, 0.95);
}

.modal-footer {
  border-top: 1px solid rgba(229, 231, 235, 0.95);
  flex-wrap: wrap;
}

.modal-body {
  padding: 22px 24px;
}

.modal-close {
  width: 42px;
  height: 42px;
  border: 1px solid rgba(229, 231, 235, 0.95);
  border-radius: 12px;
  background: rgba(255,255,255,0.96);
  color: var(--ink);
  font-size: 1.5rem;
  line-height: 1;
  cursor: pointer;
}

.modal-grid-tight {
  margin-bottom: 14px;
}

.modal-documents {
  margin-top: 8px;
}

.modal-document-list {
  display: grid;
  gap: 10px;
}

.modal-document-item {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 14px;
  padding: 14px 16px;
  border: 1px solid rgba(229,231,235,0.95);
  border-radius: 14px;
  background: rgba(248,249,250,0.84);
}

.modal-document-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 10px;
}

.modal-document-review-form {
  margin-top: 12px;
}

.modal-document-review-grid {
  display: grid;
  grid-template-columns: minmax(140px, 180px) 1fr auto;
  gap: 8px;
  align-items: center;
}

@media (max-width: 720px) {
  .modal-document-review-grid {
    grid-template-columns: 1fr;
  }
}

body.modal-open {
  overflow: hidden;
}

/* Admisión compacta */
.admision-toolbar-compact {
  margin-bottom: 8px;
}

.admision-title-compact {
  margin: 0 0 2px;
  font-size: 1.05rem;
}

.admision-table-compact {
  font-size: 0.92rem;
}

.admision-table-compact th,
.admision-table-compact td {
  padding: 8px 10px;
}

.modal-panel-compact {
  width: min(920px, 100%);
  border-radius: 16px;
}

.modal-header-compact,
.modal-footer-compact {
  padding: 12px 16px;
}

.modal-body-compact {
  padding: 12px 16px 16px;
}

.modal-title-compact {
  margin: 0;
  font-size: 1.1rem;
}

.modal-subtitle-compact {
  font-size: 0.85rem;
}

.modal-close-compact {
  width: 34px;
  height: 34px;
  font-size: 1.25rem;
  border-radius: 8px;
}

.admision-resolution-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  margin-bottom: 12px;
  padding-bottom: 10px;
  border-bottom: 1px solid rgba(229, 231, 235, 0.95);
}

.admision-resolution-label {
  font-size: 0.9rem;
  font-weight: 600;
  color: var(--ink);
}

.admision-review-section {
  margin-bottom: 12px;
}

.admision-review-heading {
  margin: 0 0 6px;
  font-size: 0.82rem;
  font-weight: 700;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--muted);
}

.admision-review-empty {
  font-size: 0.88rem;
  padding: 4px 0 6px;
}

.admision-review-row {
  display: grid;
  grid-template-columns: minmax(180px, 1.4fr) auto minmax(160px, 1.2fr);
  gap: 8px 10px;
  align-items: center;
  padding: 8px 10px;
  border: 1px solid rgba(229, 231, 235, 0.95);
  border-radius: 10px;
  background: rgba(248, 249, 250, 0.7);
  margin-bottom: 6px;
}

.admision-review-row.is-readonly {
  background: rgba(240, 253, 244, 0.65);
  border-color: rgba(187, 247, 208, 0.9);
}

.admision-review-main {
  min-width: 0;
}

.admision-review-title {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  align-items: baseline;
  font-size: 0.9rem;
}

.admision-review-title strong {
  font-size: 0.78rem;
  padding: 1px 6px;
  border-radius: 6px;
  background: rgba(229, 231, 235, 0.7);
}

.admision-review-file {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
  margin-top: 2px;
  font-size: 0.82rem;
}

.admision-review-file-list {
  list-style: none;
  margin: 4px 0 0;
  padding: 0;
  display: grid;
  gap: 6px;
}

.admision-review-file-list .admision-review-file {
  margin-top: 0;
  padding: 6px 8px;
  border-radius: 8px;
  border: 1px solid rgba(22, 163, 74, 0.22);
  background: rgba(22, 163, 74, 0.06);
}

.admision-review-row.is-subsanacion-upload .admision-review-file-list .admision-review-file {
  border-color: rgba(59, 130, 246, 0.24);
  background: rgba(59, 130, 246, 0.06);
}

.admision-review-link {
  font-size: 0.82rem;
  font-weight: 600;
}

.admision-review-candidate-notes {
  margin-top: 8px;
  padding: 8px 10px;
  border-radius: 8px;
  border: 1px solid rgba(59, 130, 246, 0.2);
  background: rgba(59, 130, 246, 0.05);
}

.admision-review-candidate-notes-label {
  display: block;
  font-size: 0.72rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: #1d4ed8;
  margin-bottom: 4px;
}

.admision-review-candidate-notes-entry + .admision-review-candidate-notes-entry {
  margin-top: 8px;
  padding-top: 8px;
  border-top: 1px solid rgba(59, 130, 246, 0.14);
}

.admision-review-candidate-notes-file {
  display: block;
  font-size: 0.74rem;
  margin-bottom: 2px;
}

.admision-review-candidate-notes-entry p {
  margin: 0;
  font-size: 0.84rem;
  line-height: 1.45;
  color: #1f2937;
  white-space: pre-wrap;
}

.expediente-doc-notes {
  padding: 6px 8px;
  border-radius: 6px;
  border: 1px solid rgba(59, 130, 246, 0.18);
  background: rgba(59, 130, 246, 0.04);
}

.expediente-doc-notes--secondary {
  margin-top: 6px;
  border-color: rgba(229, 231, 235, 0.95);
  background: rgba(248, 250, 252, 0.9);
}

.expediente-doc-notes-label {
  display: block;
  font-size: 0.68rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: #64748b;
  margin-bottom: 2px;
}

.expediente-doc-notes p {
  margin: 0;
  font-size: 0.82rem;
  line-height: 1.4;
  white-space: pre-wrap;
}

.expediente-doc-groups {
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.expediente-doc-sections {
  display: grid;
  gap: 18px;
}

.expediente-doc-section {
  display: grid;
  gap: 12px;
}

.expediente-doc-section-head {
  display: grid;
  gap: 4px;
}

.expediente-doc-section-title {
  margin: 0;
  font-size: 0.95rem;
  color: var(--ink);
}

.expediente-doc-section-intro {
  margin: 0;
  font-size: 0.8rem;
  line-height: 1.45;
}

.expediente-doc-block-label {
  margin: 2px 0 0;
  padding: 6px 10px;
  border-radius: 8px;
  background: rgba(248, 250, 252, 0.95);
  border: 1px solid rgba(229, 231, 235, 0.95);
  font-size: 0.78rem;
  font-weight: 700;
  color: #7a2348;
}

.expediente-doc-group {
  border: 1px solid rgba(229, 231, 235, 0.95);
  border-radius: 10px;
  background: rgba(255, 255, 255, 0.92);
  overflow: hidden;
}

.expediente-doc-group-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 12px;
  padding: 10px 12px;
  border-bottom: 1px solid rgba(229, 231, 235, 0.85);
  background: rgba(248, 250, 252, 0.95);
}

.expediente-doc-group-kicker {
  display: block;
  font-size: 0.68rem;
  font-weight: 800;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--ink-soft);
  margin-bottom: 3px;
}

.expediente-doc-group-title-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
}

.expediente-doc-group-code {
  display: inline-flex;
  align-items: center;
  padding: 1px 7px;
  border-radius: 999px;
  font-size: 0.72rem;
  font-weight: 700;
  color: #475569;
  background: rgba(148, 163, 184, 0.16);
}

.expediente-doc-group-table {
  width: 100%;
  font-size: 0.85rem;
}

.expediente-doc-group-table th,
.expediente-doc-group-table td {
  padding: 8px 12px;
}

.expediente-doc-group-empty {
  margin: 0;
  padding: 10px 12px 12px;
  font-size: 0.82rem;
  line-height: 1.45;
}

.status-badge {
  display: inline-flex;
  align-items: center;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 0.74rem;
  font-weight: 600;
}

.status-badge-neutral {
  background: rgba(148, 163, 184, 0.16);
  color: #475569;
}

.status-badge-info {
  background: rgba(59, 130, 246, 0.12);
  color: #1d4ed8;
}

.status-badge-pendiente {
  background: rgba(148, 163, 184, 0.16);
  color: #475569;
}

.status-badge-correcta {
  background: rgba(22, 163, 74, 0.12);
  color: #15803d;
}

.status-badge-subsanacion {
  background: rgba(245, 158, 11, 0.14);
  color: #b45309;
}

.status-badge-rechazada {
  background: rgba(220, 38, 38, 0.12);
  color: #b91c1c;
}

.status-badge-estimada {
  background: rgba(22, 163, 74, 0.12);
  color: #15803d;
}

.status-badge-desestimada {
  background: rgba(220, 38, 38, 0.12);
  color: #b91c1c;
}

.expediente-alegacion-block {
  margin-top: 12px;
  padding: 10px 12px;
  border: 1px solid rgba(59, 130, 246, 0.18);
  border-radius: 10px;
  background: rgba(59, 130, 246, 0.04);
}

.expediente-alegacion-head {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 8px;
}

.admision-review-notes {
  width: 100%;
  padding: 6px 8px;
  border: 1px solid rgba(229, 231, 235, 0.95);
  border-radius: 8px;
  font-size: 0.82rem;
  background: #fff;
}

.admision-review-row.is-readonly .admision-review-notes {
  display: none;
}

.admision-exclusion-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
}

.review-segments {
  display: inline-flex;
  flex-wrap: wrap;
  gap: 4px;
  padding: 2px;
  border-radius: 9px;
  background: rgba(243, 244, 246, 0.95);
  border: 1px solid rgba(229, 231, 235, 0.95);
}

.review-segments.is-locked {
  background: transparent;
  border: none;
  padding: 0;
}

.review-segment {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 28px;
  padding: 0 8px;
  border-radius: 7px;
  font-size: 0.72rem;
  font-weight: 600;
  color: var(--muted);
  cursor: pointer;
  user-select: none;
  white-space: nowrap;
}

.review-segment.is-disabled {
  opacity: 0.42;
  cursor: not-allowed;
  pointer-events: none;
}

.review-segment input {
  position: absolute;
  opacity: 0;
  pointer-events: none;
}

.review-segment.is-active.is-pendiente {
  background: #fff7ed;
  color: #c2410c;
  box-shadow: inset 0 0 0 1px rgba(251, 146, 60, 0.45);
}

.review-segment.is-active.is-correcta {
  background: #ecfdf5;
  color: #047857;
  box-shadow: inset 0 0 0 1px rgba(52, 211, 153, 0.45);
}

.review-segment.is-active.is-subsanacion {
  background: #eff6ff;
  color: #1d4ed8;
  box-shadow: inset 0 0 0 1px rgba(96, 165, 250, 0.45);
}

.review-segment.is-active.is-rechazada {
  background: #fef2f2;
  color: #b91c1c;
  box-shadow: inset 0 0 0 1px rgba(248, 113, 113, 0.45);
}

.review-segments-admission .review-segment {
  min-height: 30px;
  padding: 0 10px;
  font-size: 0.78rem;
}

.exclusion-reasons-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 6px 10px;
}

.exclusion-reason-option {
  display: flex;
  align-items: flex-start;
  gap: 6px;
  font-size: 0.78rem;
  line-height: 1.35;
  cursor: pointer;
}

.exclusion-reason-option input {
  width: 14px;
  height: 14px;
  min-width: 14px;
  flex: 0 0 14px;
  margin: 2px 0 0;
  padding: 0;
}

.exclusion-reason-option.is-auto {
  background: #f8fafc;
  border-color: #cbd5e1;
}

@media (max-width: 860px) {
  .exclusion-reasons-grid {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 860px) {
  .admision-review-row {
    grid-template-columns: 1fr;
  }

  .admision-exclusion-grid {
    grid-template-columns: 1fr;
  }
}

/* Mensajería interna */
.message-thread-list {
  display: grid;
  gap: 10px;
  max-height: 420px;
  overflow: auto;
  margin-bottom: 14px;
}

.message-item {
  padding: 12px 14px;
  border-radius: 12px;
  border: 1px solid rgba(229, 231, 235, 0.95);
  background: rgba(248, 249, 250, 0.85);
}

.message-item-candidate {
  background: rgba(239, 246, 255, 0.9);
  border-color: rgba(147, 197, 253, 0.55);
}

.message-item-manager {
  background: rgba(240, 253, 244, 0.9);
  border-color: rgba(134, 239, 172, 0.55);
}

.message-item-system {
  background: rgba(255, 255, 255, 0.96);
}

.message-item-header {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  align-items: flex-start;
  margin-bottom: 8px;
}

.message-item-labels {
  display: grid;
  gap: 4px;
  min-width: 0;
  flex: 1;
}

.message-item-row {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 6px;
}

.message-item-kicker {
  font-size: 0.72rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--ink-soft);
}

.message-item-sender,
.message-item-subject {
  font-size: 0.88rem;
  color: var(--ink);
}

.message-item-side {
  flex-shrink: 0;
}

.message-read-badge {
  display: inline-flex;
  align-items: center;
  padding: 3px 8px;
  border-radius: 999px;
  font-size: 0.72rem;
  font-weight: 700;
  background: rgba(148, 163, 184, 0.16);
  color: var(--ink-soft);
}

.message-read-badge.is-read {
  background: rgba(34, 197, 94, 0.12);
  color: #166534;
}

.message-read-badge.is-unread {
  background: rgba(194, 27, 132, 0.1);
  color: var(--fgulem-magenta);
}

.message-item.is-unread {
  border-color: rgba(194, 27, 132, 0.22);
  box-shadow: inset 3px 0 0 rgba(194, 27, 132, 0.45);
}

.message-inbox-meta {
  display: grid;
  gap: 2px;
  margin: 4px 0 6px;
  font-size: 0.82rem;
  color: var(--ink-soft);
}

.message-inbox-meta .message-item-kicker {
  margin-right: 4px;
}

.message-item-meta,
.message-inbox-preview {
  font-size: 0.84rem;
  color: var(--muted);
}

.message-item-title {
  margin: 0 0 6px;
  font-size: 0.95rem;
}

.message-item-body {
  white-space: pre-wrap;
  font-size: 0.9rem;
  line-height: 1.45;
}

.message-category-badge {
  font-size: 0.72rem;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--muted);
}

.message-reply-form textarea {
  width: 100%;
  min-height: 88px;
}

.message-inbox-list,
.bulk-announcement-list {
  display: grid;
  gap: 10px;
}

.message-inbox-item,
.bulk-announcement-item {
  display: flex;
  justify-content: space-between;
  gap: 14px;
  align-items: flex-start;
  padding: 14px 16px;
  border: 1px solid rgba(229, 231, 235, 0.95);
  border-radius: 12px;
  background: rgba(255, 255, 255, 0.92);
}

.message-inbox-item.has-unread,
.message-manager-table tr.has-unread {
  background: rgba(255, 247, 237, 0.55);
}

.message-inbox-side {
  display: grid;
  gap: 8px;
  justify-items: end;
  min-width: 120px;
}

.message-manager-table {
  width: 100%;
  font-size: 0.92rem;
}

.phase-confirm-card {
  padding: 12px 14px;
}

.phase-confirm-transition {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: 10px;
  padding: 8px 10px;
  border-radius: 8px;
  border: 1px solid rgba(229, 231, 235, 0.95);
  background: rgba(248, 250, 252, 0.9);
}

.phase-confirm-phase {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 4px 8px;
  font-size: 0.82rem;
}

.phase-confirm-phase-label {
  font-size: 0.68rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--ink-soft);
  width: 100%;
}

.phase-confirm-phase strong {
  font-size: 0.95rem;
  color: var(--ink);
}

.phase-confirm-arrow {
  font-size: 1.1rem;
  font-weight: 700;
  color: var(--fgulem-magenta);
  flex-shrink: 0;
}

.phase-confirm-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
  margin-bottom: 10px;
}

.phase-confirm-notice {
  padding: 8px 10px;
  border-radius: 8px;
  background: rgba(239, 246, 255, 0.7);
  border: 1px solid rgba(147, 197, 253, 0.45);
  margin-bottom: 10px;
  font-size: 0.8rem;
  line-height: 1.4;
}

.phase-confirm-notice-top {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: 4px 10px;
  margin-bottom: 4px;
}

.phase-confirm-notice h3,
.phase-confirm-notice p {
  margin: 0 0 4px;
}

.phase-confirm-notice p:last-child {
  margin-bottom: 0;
}

.phase-confirm-check {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  margin: 0 0 10px;
  padding: 8px 10px;
  border-radius: 8px;
  border: 1px solid #d8dce2;
  background: #fff;
  font-size: 0.82rem;
  font-weight: 400;
  line-height: 1.4;
  cursor: pointer;
}

.phase-confirm-check input[type="checkbox"] {
  width: 16px;
  height: 16px;
  min-width: 16px;
  flex: 0 0 16px;
  margin: 2px 0 0;
  padding: 0;
  border-radius: 4px;
}

.phase-confirm-check--optional {
  border-style: dashed;
  background: rgba(248, 250, 252, 0.95);
}

.phase-confirm-form .actions {
  gap: 8px;
}

.phase-manual-form {
  display: flex;
  flex-direction: column;
  gap: 16px;
}

.phase-manual-layout {
  max-width: 920px;
}

.phase-manual-shell {
  padding: 16px 18px;
}

.phase-manual-intro {
  margin: 0 0 14px;
  font-size: 0.86rem;
  line-height: 1.45;
}

.phase-manual-cards {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
}

@media (max-width: 720px) {
  .phase-manual-cards {
    grid-template-columns: 1fr;
  }
}

.phase-manual-card {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 14px 16px;
  border: 1px solid rgba(229, 231, 235, 0.95);
  border-radius: 12px;
  background: rgba(255, 255, 255, 0.92);
  cursor: pointer;
  transition: border-color 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
}

.phase-manual-card:hover:not(.is-current) {
  border-color: rgba(95, 159, 211, 0.45);
  background: rgba(248, 250, 252, 0.98);
}

.phase-manual-card:has(input:checked) {
  border-color: rgba(95, 159, 211, 0.55);
  box-shadow: 0 0 0 2px rgba(95, 159, 211, 0.12);
  background: rgba(95, 159, 211, 0.06);
}

.phase-manual-card.is-current {
  background: rgba(95, 159, 211, 0.08);
  border-color: rgba(95, 159, 211, 0.28);
  cursor: default;
}

.phase-manual-card input {
  width: auto;
  min-width: 16px;
  margin: 3px 0 0;
  flex: 0 0 auto;
}

.phase-manual-card-body {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
  flex: 1;
}

.phase-manual-card-head {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
}

.phase-manual-card-code {
  font-size: 0.95rem;
  color: var(--ink);
}

.phase-manual-card-title {
  font-size: 0.88rem;
  font-weight: 600;
  color: var(--ink);
  line-height: 1.35;
}

.phase-manual-card-desc {
  margin: 0;
  font-size: 0.8rem;
  line-height: 1.4;
}

.phase-manual-card-dates {
  font-size: 0.76rem;
}

.phase-manual-badge {
  display: inline-flex;
  align-items: center;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--ink-soft);
  background: rgba(229, 231, 235, 0.65);
}

.phase-manual-badge--active {
  color: #166534;
  background: rgba(22, 163, 74, 0.12);
}

.phase-manual-footer {
  display: flex;
  flex-direction: column;
  gap: 12px;
  padding-top: 4px;
  border-top: 1px solid rgba(229, 231, 235, 0.85);
}

.phase-manual-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.phase-manual-option {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 10px 12px;
  border: 1px solid rgba(229, 231, 235, 0.95);
  border-radius: 12px;
  background: rgba(255, 255, 255, 0.82);
  cursor: pointer;
}

.phase-manual-option.is-current {
  background: rgba(95, 159, 211, 0.08);
  border-color: rgba(95, 159, 211, 0.28);
  cursor: default;
}

.phase-manual-option input {
  width: auto;
  margin-top: 3px;
}

.phase-manual-option-body {
  display: grid;
  gap: 2px;
  font-size: 0.86rem;
}

.phase-manual-option-body strong {
  color: var(--ink);
  font-size: 0.92rem;
}

.phase-confirm-intro {
  margin-bottom: 10px;
}

.support-hint {
  margin-bottom: 14px;
}

.support-admin-list {
  display: grid;
  gap: 16px;
}

.support-admin-item {
  padding: 14px 16px;
  border: 1px solid rgba(229, 231, 235, 0.95);
  border-radius: 12px;
  background: rgba(255, 255, 255, 0.92);
}

.support-thread-inline {
  max-height: 280px;
  margin: 10px 0 12px;
}

.bulk-announcement-item.is-sent {
  opacity: 0.92;
}

@media (max-width: 860px) {
  .phase-confirm-grid {
    grid-template-columns: 1fr;
  }
}

.is-hidden {
  display: none !important;
}

.mini-card h3 { margin: 10px 0 8px; }
.mini-card p { margin: 0 0 8px; color: var(--ink-soft); line-height: 1.55; }
.mini-card-link:hover { text-decoration: none; transform: translateY(-1px); }

.kpi-grid {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
}

.kpi-card {
  flex: 1 1 110px;
  max-width: 220px;
  background: rgba(255,255,255,0.94);
  border: 1px solid rgba(229,231,235,0.95);
  border-radius: 16px;
  padding: 16px 18px 14px;
  box-shadow: 0 4px 14px rgba(42,46,56,0.07);
  display: flex;
  flex-direction: column;
  gap: 4px;
  transition: transform 0.15s, box-shadow 0.15s;
  border-top: 3px solid transparent;
}

.page-home .content {
  padding-bottom: 56px;
}

.page-home .page-heading h1 {
  font-size: clamp(1rem, 1.6vw, 1.28rem);
  line-height: 1.3;
  max-width: 44rem;
}

.page-home .page-heading p {
  font-size: 0.82rem;
  line-height: 1.45;
  max-width: 52ch;
}

.home-section {
  margin-bottom: 20px;
}

.home-hero {
  padding: 30px 32px;
  overflow: hidden;
}

.home-hero--compact {
  padding: 20px 22px;
}

.home-hero-grid--compact {
  gap: 14px;
}

.home-hero-copy {
  max-width: 760px;
}

.home-bullet-list--inline {
  margin-top: 22px;
}

.home-section-heading--compact {
  margin-bottom: 12px;
}

.home-section-heading--compact h2 {
  margin-bottom: 0;
  font-size: 1.35rem;
}

.home-open-list {
  display: grid;
  gap: 10px;
}

.home-open-item {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 16px;
  padding: 14px 16px;
  border-radius: 14px;
  border: 1px solid rgba(229, 231, 235, 0.95);
  background: rgba(255, 255, 255, 0.88);
  color: inherit;
  text-decoration: none;
  transition: border-color 0.15s, box-shadow 0.15s;
}

.home-open-item:hover {
  border-color: rgba(95, 159, 211, 0.45);
  box-shadow: 0 8px 20px rgba(15, 23, 42, 0.06);
}

.home-open-item h3 {
  margin: 6px 0 4px;
  font-size: 1rem;
  color: var(--ink);
}

.home-open-item p {
  margin: 0;
  font-size: 0.86rem;
  color: var(--ink-soft);
  line-height: 1.45;
}

.home-open-item-side {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 6px;
  flex-shrink: 0;
}

.home-open-deadline {
  font-size: 0.76rem;
  white-space: nowrap;
}

.home-open-empty {
  margin: 0;
  padding: 18px 0 6px;
}

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

.home-feature-card--compact {
  padding: 16px 18px;
}

.home-feature-card--compact h3 {
  margin: 0 0 6px;
  font-size: 0.98rem;
}

.home-feature-card--compact p {
  margin: 0;
  font-size: 0.86rem;
  line-height: 1.5;
  color: var(--ink-soft);
}

.home-hero-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.15fr) minmax(280px, 0.85fr);
  gap: 20px;
  align-items: stretch;
}

.home-hero-benefits {
  display: grid;
  gap: 12px;
  align-content: start;
}

.home-hero-benefits--compact {
  gap: 8px;
}

.home-benefit-card {
  padding: 16px 18px;
  border-radius: 16px;
  background: linear-gradient(145deg, rgba(255, 255, 255, 0.96) 0%, rgba(248, 249, 250, 0.98) 100%);
  border: 1px solid rgba(229, 231, 235, 0.95);
  box-shadow: 0 10px 24px rgba(15, 23, 42, 0.04);
}

.home-benefit-card--compact {
  padding: 10px 12px;
  border-radius: 12px;
}

.home-benefit-card h3 {
  margin: 0 0 6px;
  font-size: 0.95rem;
  color: var(--ink);
}

.home-benefit-card--compact h3 {
  margin: 0 0 3px;
  font-size: 0.82rem;
}

.home-benefit-card p {
  margin: 0;
  font-size: 0.84rem;
  line-height: 1.5;
  color: var(--ink-soft);
}

.home-benefit-card--compact p {
  font-size: 0.76rem;
  line-height: 1.4;
}

.home-section-lead {
  margin: 6px 0 0;
  font-size: 0.84rem;
  line-height: 1.45;
}

.home-conv-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 14px;
}

.home-conv-grid--compact {
  gap: 10px;
}

.conv-status-groups,
.conv-phase-groups {
  display: grid;
  gap: 18px;
}

.conv-status-group,
.conv-phase-group {
  padding: 14px 16px 16px;
  border-radius: 14px;
  background: linear-gradient(180deg, rgba(248, 249, 250, 0.72) 0%, rgba(255, 255, 255, 0.55) 100%);
  border: 1px solid rgba(229, 231, 235, 0.95);
}

.conv-status-group + .conv-status-group,
.conv-phase-group + .conv-phase-group {
  margin-top: 0;
}

.conv-status-group-head,
.conv-phase-group-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  margin-bottom: 10px;
  padding-bottom: 8px;
  border-bottom: 1px solid rgba(229, 231, 235, 0.95);
}

.conv-status-group-head h3,
.conv-phase-group-title h3 {
  margin: 0;
  font-size: 0.92rem;
  line-height: 1.35;
  color: var(--ink);
}

.conv-status-group-count,
.conv-phase-group-count {
  flex-shrink: 0;
  font-size: 0.76rem;
}

.phase-pill--sm {
  padding: 3px 8px;
  font-size: 0.72rem;
  letter-spacing: 0.06em;
}

.convocatoria-hero-grid--compact {
  grid-template-columns: minmax(0, 1.6fr) minmax(220px, 0.55fr);
}

.convocatoria-summary-card--single {
  align-self: center;
}

.convocatoria-summary-card--single .convocatoria-summary-item--highlight {
  text-align: center;
}

.convocatoria-summary-card--single .convocatoria-summary-item--highlight strong {
  display: block;
  margin-top: 4px;
  font-size: 2rem;
  line-height: 1;
}

.home-conv-card {
  display: flex;
  flex-direction: column;
  gap: 8px;
  min-height: 100%;
  padding: 16px 18px;
  border-radius: 16px;
  border: 1px solid rgba(229, 231, 235, 0.95);
  background: rgba(255, 255, 255, 0.9);
  color: inherit;
  text-decoration: none;
  transition: border-color 0.15s, box-shadow 0.15s, transform 0.15s;
}

.home-conv-card--compact {
  gap: 6px;
  padding: 11px 12px;
  border-radius: 12px;
}

.home-conv-card:hover {
  border-color: rgba(95, 159, 211, 0.45);
  box-shadow: 0 12px 28px rgba(15, 23, 42, 0.08);
  transform: translateY(-1px);
}

.home-conv-card-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 10px;
}

.home-conv-card-head h3 {
  margin: 0;
  flex: 1;
  min-width: 0;
  font-size: 1rem;
  line-height: 1.35;
  color: var(--ink);
}

.home-conv-card--compact .home-conv-card-head h3 {
  font-size: 0.88rem;
  line-height: 1.3;
}

.home-conv-card-plaza {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 8px;
}

.home-conv-card-plaza-name {
  min-width: 0;
  font-size: 0.78rem;
  line-height: 1.35;
  color: var(--ink-soft);
}

.home-conv-card-plaza .enrollment-badge {
  flex-shrink: 0;
}

.home-conv-card-phase {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  padding-top: 6px;
  border-top: 1px solid rgba(229, 231, 235, 0.9);
}

.home-conv-card-phase strong {
  color: var(--fgulem-blue-dark, #185fa5);
  font-size: 0.8rem;
  line-height: 1.3;
}

.phase-pill--card {
  flex-shrink: 0;
}

.home-conv-card-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 10px;
  font-size: 0.72rem;
  line-height: 1.3;
}

.home-conv-card-head .enrollment-badge {
  flex-shrink: 0;
  margin-top: 2px;
}

.home-conv-card-top {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 8px;
}

.home-conv-card h3 {
  margin: 0;
  font-size: 1rem;
  line-height: 1.35;
  color: var(--ink);
}

.home-conv-card-summary {
  margin: 0;
  flex: 1;
  font-size: 0.84rem;
  line-height: 1.5;
  color: var(--ink-soft);
}

.home-conv-card-status {
  display: grid;
  gap: 3px;
  margin-top: auto;
  padding-top: 10px;
  border-top: 1px solid rgba(229, 231, 235, 0.9);
  font-size: 0.8rem;
}

.home-conv-card-status strong {
  color: var(--fgulem-blue-dark, #185fa5);
  font-size: 0.82rem;
}

.home-eyebrow,
.home-section-kicker {
  display: inline-flex;
  align-items: center;
  margin-bottom: 10px;
  font-size: 0.8rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: var(--fgulem-magenta);
}

.home-hero-copy h2,
.home-section-heading h2,
.home-cta h2 {
  margin: 0 0 12px;
  font-size: 2rem;
  line-height: 1.12;
  letter-spacing: -0.03em;
  color: var(--ink);
}

.home-hero--compact .home-hero-copy h2 {
  margin-bottom: 6px;
  font-size: 1.55rem;
}

.home-hero-text,
.home-lead,
.home-cta p {
  margin: 0;
  max-width: 72ch;
  color: var(--ink-soft);
  font-size: 1.02rem;
  line-height: 1.7;
}

.home-hero--compact .home-hero-text {
  font-size: 0.88rem;
  line-height: 1.45;
}

.home-hero-copy .actions {
  margin-top: 24px;
}

.home-hero-actions {
  margin-top: 14px !important;
}

.convocatoria-hero--compact {
  padding: 18px 20px;
}

.convocatoria-hero--compact h2 {
  margin-bottom: 6px;
  font-size: 1.45rem;
}

.convocatoria-hero--compact .convocatoria-hero-text {
  font-size: 0.88rem;
  line-height: 1.45;
}

.home-hero-panel {
  display: grid;
  gap: 14px;
}

.home-highlight {
  padding: 18px 20px;
  border-radius: 18px;
  background: linear-gradient(145deg, rgba(194, 27, 132, 0.08) 0%, rgba(95, 159, 211, 0.10) 100%);
  border: 1px solid rgba(194, 27, 132, 0.10);
}

.home-highlight-label {
  display: inline-flex;
  margin-bottom: 8px;
  font-size: 0.78rem;
  font-weight: 800;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--fgulem-magenta);
}

.home-highlight strong {
  display: block;
  font-size: 1.05rem;
  line-height: 1.5;
}

.home-bullet-list {
  display: grid;
  gap: 10px;
}

.home-bullet-list div {
  position: relative;
  padding: 14px 16px 14px 42px;
  border-radius: 16px;
  background: rgba(255,255,255,0.84);
  border: 1px solid rgba(229, 231, 235, 0.95);
  color: var(--ink);
  line-height: 1.5;
}

.home-bullet-list div::before {
  content: "";
  position: absolute;
  left: 16px;
  top: 18px;
  width: 10px;
  height: 10px;
  border-radius: 999px;
  background: linear-gradient(135deg, var(--fgulem-magenta) 0%, var(--fgulem-blue) 100%);
}

.home-section-heading {
  margin-bottom: 18px;
}

.home-card-grid,
.home-access-grid,
.home-steps-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 16px;
}

.home-feature-card,
.home-access-card,
.home-step-card {
  padding: 20px;
  border-radius: 18px;
  background: rgba(255,255,255,0.82);
  border: 1px solid rgba(229,231,235,0.95);
  box-shadow: 0 10px 22px rgba(42, 46, 56, 0.04);
}

.home-feature-card h3,
.home-access-card h3,
.home-step-card h3 {
  margin: 0 0 10px;
  font-size: 1.05rem;
}

.home-feature-card p,
.home-access-card p,
.home-step-card p {
  margin: 0;
  color: var(--ink-soft);
  line-height: 1.6;
}

.home-feature-index,
.home-step-label {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 42px;
  height: 42px;
  margin-bottom: 14px;
  padding: 0 12px;
  border-radius: 12px;
  background: rgba(95, 159, 211, 0.12);
  color: var(--fgulem-magenta);
  font-weight: 800;
}

.home-step-card {
  position: relative;
}

.home-access-card {
  transition: transform 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease;
}

.home-access-card:hover {
  transform: translateY(-1px);
  border-color: rgba(95, 159, 211, 0.3);
  box-shadow: 0 12px 24px rgba(42, 46, 56, 0.07);
}

.home-access-card.is-muted {
  background: rgba(248,249,250,0.9);
}

.home-access-note {
  display: inline-flex;
  margin-top: 12px;
  color: #8a8691;
  font-size: 0.82rem;
  font-weight: 700;
}

.home-cta {
  background: linear-gradient(180deg, rgba(255,255,255,0.96) 0%, rgba(249,250,251,0.92) 100%);
}

.home-cta-grid {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 20px;
}

.home-data-note {
  padding: 0 8px;
  color: #7a7680;
  font-size: 0.87rem;
  line-height: 1.65;
}

@media (max-width: 1200px) {
  .home-conv-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 1024px) {
  .home-hero-grid,
  .home-benefits-row,
  .home-card-grid,
  .home-access-grid,
  .home-steps-grid,
  .home-candidate-grid,
  .home-conv-grid {
    grid-template-columns: 1fr;
  }

  .home-cta-grid {
    flex-direction: column;
    align-items: flex-start;
  }

  .access-hub {
    min-width: 100%;
  }
}

@media (max-width: 900px) {
  .home-hero {
    padding: 24px;
  }

  .home-conv-card-head {
    flex-direction: column;
    align-items: flex-start;
  }

  .home-conv-card-head .enrollment-badge {
    margin-top: 6px;
  }

  .home-conv-card-plaza {
    flex-direction: column;
    align-items: flex-start;
  }

  .home-conv-card-plaza .enrollment-badge {
    margin-top: 4px;
  }

  .home-open-item {
    flex-direction: column;
  }

  .home-open-item-side {
    align-items: flex-start;
  }

  .home-hero-copy h2,
  .home-section-heading h2,
  .home-cta h2 {
    font-size: 1.65rem;
  }

  .access-module {
    align-items: flex-start;
    flex-direction: column;
  }
}

.convocatoria-hero {
  padding: 28px 30px;
}

.convocatoria-hero-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.45fr) minmax(280px, 0.85fr);
  gap: 22px;
  align-items: start;
}

.convocatoria-hero h2 {
  margin: 0 0 12px;
  font-size: 1.9rem;
  line-height: 1.14;
  letter-spacing: -0.03em;
}

.convocatoria-hero-text {
  margin: 0;
  color: var(--ink-soft);
  font-size: 1rem;
  line-height: 1.7;
}

.convocatoria-hero .actions {
  margin-top: 24px;
}

.convocatoria-summary-card {
  display: grid;
  gap: 12px;
  padding: 18px;
  border-radius: 18px;
  background: linear-gradient(180deg, rgba(255,255,255,0.92) 0%, rgba(248,249,250,0.96) 100%);
  border: 1px solid rgba(229, 231, 235, 0.95);
}

.convocatoria-summary-item {
  padding: 12px 14px;
  border-radius: 14px;
  background: rgba(95, 159, 211, 0.06);
}

.convocatoria-summary-item span {
  display: block;
  margin-bottom: 4px;
  color: #7a7680;
  font-size: 0.8rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
}

.convocatoria-summary-item strong {
  color: var(--ink);
  font-size: 1rem;
}

.convocatoria-meta-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 16px;
}

.convocatoria-meta-card {
  padding: 20px;
  border-radius: 18px;
  background: rgba(255,255,255,0.82);
  border: 1px solid rgba(229,231,235,0.95);
}

.convocatoria-meta-card h3 {
  margin: 0 0 16px;
}

.convocatoria-definition-list {
  display: grid;
  gap: 12px;
  margin: 0;
}

.convocatoria-definition-list div {
  display: grid;
  gap: 4px;
}

.convocatoria-definition-list dt {
  color: #8a8691;
  font-size: 0.8rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.08em;
}

.convocatoria-definition-list dd {
  margin: 0;
  color: var(--ink);
  line-height: 1.5;
}

.convocatoria-section {
  margin-bottom: 20px;
}

.convocatoria-list-block {
  display: grid;
  gap: 14px;
}

.convocatoria-list-item {
  padding: 18px 20px;
  border-radius: 18px;
  border: 1px solid rgba(229,231,235,0.95);
  background: rgba(255,255,255,0.82);
}

.convocatoria-link-card {
  transition: transform 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease;
}

.convocatoria-link-card:hover {
  transform: translateY(-1px);
  box-shadow: 0 12px 24px rgba(42, 46, 56, 0.06);
  border-color: rgba(95, 159, 211, 0.28);
}

.convocatoria-item-topline {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  margin-bottom: 10px;
}

.convocatoria-list-item h3 {
  margin: 0 0 8px;
  font-size: 1.08rem;
}

.convocatoria-list-item p {
  margin: 0;
  color: var(--ink-soft);
  line-height: 1.6;
}

.convocatoria-item-note {
  margin-top: 12px;
  color: #7a7680;
  font-size: 0.88rem;
  font-weight: 600;
}

.convocatoria-meta-inline {
  display: flex;
  flex-wrap: wrap;
  gap: 10px 18px;
  margin-top: 14px;
  color: var(--ink);
  font-size: 0.92rem;
}

.convocatoria-steps-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 16px;
}

.convocatoria-step-card {
  padding: 20px;
  border-radius: 18px;
  background: rgba(255,255,255,0.82);
  border: 1px solid rgba(229,231,235,0.95);
}

.convocatoria-step-card h3 {
  margin: 0 0 10px;
}

.convocatoria-step-card p {
  margin: 0;
  color: var(--ink-soft);
  line-height: 1.6;
}

@media (max-width: 1024px) {
  .convocatoria-hero-grid,
  .convocatoria-meta-grid,
  .convocatoria-steps-grid {
    grid-template-columns: 1fr;
  }
}

/* ── Public convocatoria detail (compact) ─────────────────────────── */
.page-public-detail .card {
  margin-bottom: 12px;
}

.page-public-detail .convocatoria-meta-grid--duo {
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 12px;
}

.page-public-detail .convocatoria-meta-card,
.page-public-detail .convocatoria-detail-block {
  padding: 14px 16px;
  border-radius: 12px;
}

.page-public-detail .convocatoria-meta-card h3,
.page-public-detail .convocatoria-block-title {
  margin: 0 0 12px;
  font-size: 0.95rem;
}

.page-public-detail .convocatoria-definition-list {
  gap: 8px;
}

.page-public-detail .convocatoria-definition-list dt {
  font-size: 0.72rem;
}

.page-public-detail .convocatoria-definition-list dd {
  font-size: 0.9rem;
}

.page-public-detail .convocatoria-definition-list--inline {
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px 14px;
}

.page-public-detail .convocatoria-detail-block {
  background: rgba(255,255,255,0.82);
  border: 1px solid rgba(229,231,235,0.95);
}

.page-public-detail .convocatoria-puesto-general {
  margin-bottom: 12px;
  padding-bottom: 12px;
  border-bottom: 1px solid rgba(229,231,235,0.7);
}

.page-public-detail .convocatoria-puesto-keyfacts {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px;
  margin-bottom: 12px;
}

.page-public-detail .convocatoria-puesto-keyfact {
  padding: 10px 12px;
  border-radius: 10px;
  background: rgba(95, 159, 211, 0.06);
  border: 1px solid rgba(229,231,235,0.8);
}

.page-public-detail .convocatoria-keyfact-label {
  display: block;
  margin-bottom: 4px;
  color: #8a8691;
  font-size: 0.72rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.06em;
}

.page-public-detail .convocatoria-puesto-keyfact strong {
  display: block;
  font-size: 0.92rem;
  line-height: 1.4;
}

.page-public-detail .convocatoria-puesto-funciones h4 {
  margin: 0 0 6px;
  font-size: 0.78rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: #8a8691;
}

.page-public-detail .convocatoria-puesto-funciones p {
  margin: 0 0 8px;
  font-size: 0.9rem;
  line-height: 1.55;
  color: var(--ink-soft);
}

.page-public-detail .convocatoria-puesto-funciones p:last-child {
  margin-bottom: 0;
}

.richtext-toolbar {
  display: flex;
  gap: 6px;
  margin-bottom: 4px;
}

.page-public-detail .convocatoria-puesto-funciones ul {
  margin: 0 0 8px;
  padding-left: 20px;
  font-size: 0.9rem;
  line-height: 1.55;
  color: var(--ink-soft);
}

.page-public-detail .convocatoria-puesto-funciones ul:last-child {
  margin-bottom: 0;
}

.page-public-detail .convocatoria-puesto-funciones li {
  margin-bottom: 3px;
}

.page-public-detail .convocatoria-section--compact {
  margin-bottom: 12px;
  padding: 14px 16px;
}

.page-public-detail .home-section-heading--compact {
  margin-bottom: 10px;
}

.page-public-detail .home-section-heading--compact h2 {
  font-size: 1.2rem;
  margin-bottom: 4px;
}

.page-public-detail .convocatoria-section-lead {
  margin: 4px 0 0;
  font-size: 0.84rem;
  color: var(--ink-soft);
  line-height: 1.45;
}

.page-public-detail .convocatoria-subtitle {
  margin: 0 0 8px;
  font-size: 0.88rem;
  font-weight: 700;
  color: var(--ink);
}

.page-public-detail .convocatoria-requisitos-groups {
  display: grid;
  gap: 14px;
}

.page-public-detail .convocatoria-list-block--compact {
  gap: 8px;
}

.page-public-detail .convocatoria-list-item--compact {
  padding: 10px 12px;
  border-radius: 10px;
}

.page-public-detail .convocatoria-list-item--compact h4 {
  margin: 0 0 4px;
  font-size: 0.92rem;
}

.page-public-detail .convocatoria-list-item--compact p {
  font-size: 0.84rem;
  line-height: 1.45;
}

.page-public-detail .convocatoria-item-topline {
  margin-bottom: 6px;
}

.page-public-detail .convocatoria-item-note {
  margin-top: 6px;
  font-size: 0.8rem;
}

.public-document-id-notice {
  margin: 0 0 8px;
  font-size: 0.84rem;
  line-height: 1.5;
}

.public-document-id-notice-list {
  margin: 0 0 12px;
  padding-left: 1.2rem;
  font-size: 0.84rem;
  line-height: 1.5;
}

.public-document-id-notice-list li + li {
  margin-top: 6px;
}

/* ── Publication list · doc-id info button ── */
.pub-doc-info-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  border: 1px solid rgba(37, 99, 235, 0.35);
  background: rgba(37, 99, 235, 0.08);
  color: #1d4ed8;
  font-size: 0.68rem;
  font-weight: 700;
  cursor: pointer;
  vertical-align: middle;
  margin-left: 5px;
  line-height: 1;
  padding: 0;
  transition: background 0.15s;
}

.pub-doc-info-btn:hover {
  background: rgba(37, 99, 235, 0.18);
}

/* ── Publication list · listado badge ── */
.pub-listado-badge {
  display: inline-block;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 0.74rem;
  font-weight: 600;
  white-space: nowrap;
}

.pub-listado-badge--provisional {
  background: rgba(180, 83, 9, 0.1);
  color: #b45309;
}

.pub-listado-badge--definitivo {
  background: rgba(22, 163, 74, 0.1);
  color: #166534;
}

/* ── Publication list · exclusion codes ── */
.pub-exclusion-codes {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
}

.pub-exclusion-chip {
  display: inline-block;
  padding: 1px 7px;
  border-radius: 4px;
  font-size: 0.72rem;
  font-weight: 700;
  background: rgba(220, 38, 38, 0.08);
  color: #991b1b;
  border: 1px solid rgba(220, 38, 38, 0.2);
  letter-spacing: 0.02em;
  white-space: nowrap;
}

.page-public-detail .convocatoria-empty-note {
  margin: 0;
  font-size: 0.84rem;
}

.page-public-detail .convocatoria-steps-grid--compact {
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px;
}

.page-public-detail .convocatoria-step-card--compact {
  padding: 12px 14px;
  border-radius: 10px;
}

.page-public-detail .convocatoria-step-card--compact h4 {
  margin: 0 0 6px;
  font-size: 0.9rem;
}

.page-public-detail .convocatoria-step-card--compact p {
  font-size: 0.82rem;
  line-height: 1.4;
}

.page-public-detail .convocatoria-step-card--compact .home-step-label {
  min-width: 36px;
  height: 32px;
  margin-bottom: 8px;
  font-size: 0.78rem;
}

.page-public-detail .convocatoria-pub-status {
  display: inline-flex;
  align-items: center;
  padding: 4px 10px;
  border-radius: 999px;
  font-size: 0.78rem;
  font-weight: 700;
}

.page-public-detail .convocatoria-pub-status--pendiente {
  background: rgba(0,0,0,0.05);
  color: #6b7280;
}

.page-public-detail .convocatoria-pub-status--en_curso {
  background: rgba(180,83,9,0.1);
  color: #b45309;
}

.page-public-detail .convocatoria-pub-status--disponible {
  background: rgba(22,163,74,0.1);
  color: #166534;
}

.convocatoria-pub-groups {
  display: grid;
  gap: 18px;
}

.convocatoria-pub-group-head {
  margin-bottom: 10px;
}

.convocatoria-pub-group-title {
  margin: 0 0 4px;
  font-size: 1rem;
}

.convocatoria-pub-group-lead {
  margin: 0;
  font-size: 0.84rem;
}

.convocatoria-pub-kind {
  display: inline-flex;
  align-items: center;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 0.72rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.02em;
}

.convocatoria-pub-kind--provisional {
  background: rgba(254, 243, 199, 0.95);
  color: #92400e;
  border: 1px solid rgba(251, 191, 36, 0.45);
}

.convocatoria-pub-kind--definitivo {
  background: rgba(219, 234, 254, 0.95);
  color: #1d4ed8;
  border: 1px solid rgba(147, 197, 253, 0.5);
}

.convocatoria-pub-kind--lg {
  margin-top: 8px;
  padding: 4px 10px;
  font-size: 0.78rem;
}

.tag-phase {
  font-weight: 700;
}

.candidate-pub-groups {
  display: grid;
  gap: 6px;
  margin-top: 6px;
}

.candidate-pub-track {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  width: 100%;
}

.page-candidate-area .candidate-conv-card .candidate-pub-pill {
  font-size: 0.68rem;
  padding: 2px 7px;
  white-space: nowrap;
}

.candidate-pub-group-title {
  font-size: 0.72rem;
  font-weight: 600;
  margin-bottom: 2px;
}

.candidate-pub-pill--provisional {
  background: rgba(254, 243, 199, 0.95);
  color: #92400e;
  border-color: rgba(251, 191, 36, 0.45);
}

.candidate-pub-pill--definitivo,
.candidate-pub-pill--resultado {
  background: rgba(219, 234, 254, 0.9);
  color: #1d4ed8;
  border-color: rgba(147, 197, 253, 0.5);
}

.publication-doc-digits {
  font-size: 0.92rem;
  letter-spacing: 0.08em;
}

.publication-row-is-mine {
  background: rgba(219, 234, 254, 0.35);
}

.publication-own-link {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  text-decoration: none;
  color: inherit;
}

.publication-own-link:hover strong {
  color: #1d4ed8;
}

.publication-own-badge {
  display: inline-flex;
  align-items: center;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 0.68rem;
  font-weight: 700;
  background: rgba(37, 99, 235, 0.12);
  color: #1d4ed8;
  border: 1px solid rgba(147, 197, 253, 0.6);
}

.candidate-pub-pill--informacion {
  background: rgba(236, 253, 245, 0.95);
  color: #047857;
  border-color: rgba(110, 231, 183, 0.5);
}

.page-public-detail .home-cta--compact {
  padding: 16px 18px;
}

.page-public-detail .home-cta--compact h2 {
  font-size: 1.15rem;
}

.page-public-detail .home-cta--compact p {
  font-size: 0.88rem;
}

.conv-preview-banner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  background: #1a1a2e;
  color: #fff;
  padding: 10px 16px;
  margin-bottom: 12px;
  border-radius: 10px;
  font-size: 0.84rem;
  font-weight: 600;
  box-shadow: 0 4px 16px rgba(0,0,0,0.2);
}

.conv-preview-banner__badge {
  background: #f0b429;
  color: #000;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 0.72rem;
  font-weight: 800;
  letter-spacing: 0.05em;
  margin-right: 8px;
}

.conv-preview-banner__hint {
  opacity: 0.65;
  font-weight: 400;
}

.conv-preview-banner__back {
  background: rgba(255,255,255,0.12);
  color: #fff;
  border: 1px solid rgba(255,255,255,0.28);
  padding: 6px 12px;
  border-radius: 8px;
  text-decoration: none;
  font-size: 0.82rem;
  white-space: nowrap;
}

.conv-closed-banner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  background: #2f3b4f;
  color: #fff;
  padding: 10px 16px;
  margin-bottom: 12px;
  border-radius: 10px;
  font-size: 0.84rem;
  font-weight: 600;
  box-shadow: 0 4px 16px rgba(0,0,0,0.12);
}

.conv-closed-banner__badge {
  background: #d9e2ef;
  color: #1f2a37;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 0.72rem;
  font-weight: 800;
  letter-spacing: 0.05em;
  margin-right: 8px;
}

.conv-closed-banner__text {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px;
}

@media (max-width: 900px) {
  .page-public-detail .convocatoria-meta-grid--duo,
  .page-public-detail .convocatoria-puesto-keyfacts,
  .page-public-detail .convocatoria-definition-list--inline {
    grid-template-columns: 1fr;
  }

  .page-public-detail .convocatoria-steps-grid--compact {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 640px) {
  .page-public-detail .convocatoria-steps-grid--compact {
    grid-template-columns: 1fr;
  }
}

.kpi-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 8px 22px rgba(42,46,56,0.13);
}

.kpi-valor {
  font-size: 2rem;
  font-weight: 800;
  line-height: 1;
  letter-spacing: -0.03em;
}

.kpi-label {
  font-size: 0.78rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--ink-soft);
}

.kpi-sub {
  font-size: 0.8rem;
  font-weight: 600;
  margin-top: 2px;
  opacity: 0.75;
}

.kpi-magenta, .kpi-remesa { border-top-color: #c21b84; }
.kpi-magenta .kpi-valor, .kpi-remesa .kpi-valor { color: #a11463; }
.kpi-blue, .kpi-validado, .kpi-abierta { border-top-color: #5a9fd3; }
.kpi-blue .kpi-valor, .kpi-validado .kpi-valor, .kpi-abierta .kpi-valor { color: #185fa5; }
.kpi-green, .kpi-pagado { border-top-color: #7faa55; }
.kpi-green .kpi-valor, .kpi-pagado .kpi-valor { color: #3b6d11; }

.login-page {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
}

.login-wrap {
  width: min(420px, 100%);
}

.card-login {
  background: rgba(255,255,255,0.96);
  padding: 32px 30px;
}

.empty-state {
  padding: 30px 18px;
  text-align: center;
  color: var(--ink-soft);
}

/* ── Convocatoria shared page header ──────────────────────────────── */
.conv-header {
  background: rgba(255,255,255,0.94);
  border: 1px solid rgba(229,231,235,0.95);
  border-radius: var(--radius);
  padding: 14px 18px 0;
  box-shadow: var(--shadow);
  margin-bottom: 14px;
}

.conv-header-top {
  display: flex;
  align-items: center;
  gap: 12px;
  padding-bottom: 12px;
}

.conv-back {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  border-radius: 10px;
  background: rgba(95,159,211,0.10);
  border: 1px solid rgba(95,159,211,0.22);
  color: var(--ink);
  font-size: 1.15rem;
  flex-shrink: 0;
  text-decoration: none;
  transition: background 0.15s ease, transform 0.15s ease;
}
.conv-back:hover { background: rgba(95,159,211,0.20); transform: translateX(-2px); }

.conv-header-title { flex: 1 1 0; min-width: 0; }

.conv-header-title h2 {
  margin: 0 0 3px;
  font-size: 0.97rem;
  font-weight: 700;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  color: var(--ink);
}

.conv-header-meta {
  font-size: 0.8rem;
  color: var(--ink-soft);
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}

.phase-pill {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 2px 9px;
  border-radius: 999px;
  background: rgba(122,35,72,0.09);
  color: #7a2348;
  font-size: 0.75rem;
  font-weight: 700;
}
.phase-pill::before {
  content: '';
  width: 6px; height: 6px;
  border-radius: 50%;
  background: #7a2348;
  flex-shrink: 0;
}

.conv-header-actions {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-shrink: 0;
  flex-wrap: wrap;
  justify-content: flex-end;
}

.conv-tool-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.conv-tool-btn.is-active {
  border-color: rgba(122,35,72,0.35);
  background: rgba(122,35,72,0.08);
  color: #7a2348;
}

.conv-tool-icon {
  width: 15px;
  height: 15px;
  flex-shrink: 0;
}

.conv-ficha-actions {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  align-items: center;
  margin-top: 12px;
  padding-top: 10px;
  border-top: 1px solid rgba(229,231,235,0.7);
}

.conv-sign-badge {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 6px 12px;
  border-radius: 8px;
  font-size: 0.82rem;
  font-weight: 700;
  white-space: nowrap;
}

.conv-sign-badge--signed {
  background: rgba(22,163,74,0.1);
  color: #166534;
  border: 1px solid rgba(22,163,74,0.25);
}

.conv-sign-badge--pending {
  background: rgba(180,83,9,0.1);
  color: #b45309;
  border: 1px solid rgba(180,83,9,0.25);
}

.ficha-detail-rows {
  display: grid;
  gap: 14px;
  margin-bottom: 14px;
}

.ficha-detail-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
  align-items: stretch;
}

.ficha-detail-row .card {
  margin-bottom: 0;
  height: 100%;
}

.ficha-side-stack {
  display: grid;
  gap: 14px;
  align-content: start;
}

.ficha-side-stack .card {
  margin-bottom: 0;
}

.ficha-checklist-card table {
  font-size: 0.82rem;
}

.ficha-checklist-card .checklist-action {
  white-space: nowrap;
}

@media (max-width: 900px) {
  .ficha-detail-row {
    grid-template-columns: 1fr;
  }
}

.btn-sm {
  padding: 6px 13px;
  font-size: 0.82rem;
  border-radius: 8px;
}

.advance-hint {
  font-size: 0.76rem;
  color: var(--ink-soft);
  max-width: 220px;
  text-align: right;
  line-height: 1.3;
}

.conv-tabs {
  display: flex;
  gap: 0;
  border-top: 1px solid rgba(229,231,235,0.8);
  margin: 0 -18px;
  padding: 0 14px;
  overflow-x: auto;
  scrollbar-width: none;
}
.conv-tabs::-webkit-scrollbar { display: none; }

.conv-tab {
  display: inline-flex;
  align-items: center;
  padding: 9px 12px;
  font-size: 0.83rem;
  font-weight: 600;
  color: var(--ink-soft);
  border-bottom: 2px solid transparent;
  white-space: nowrap;
  text-decoration: none;
  transition: color 0.15s ease, border-color 0.15s ease;
  margin-bottom: -1px;
}
.conv-tab:hover { color: var(--ink); }
.conv-tab.is-active { color: #7a2348; border-bottom-color: #7a2348; }

.conv-tab--dispatch {
  color: #7a0327;
  background: rgba(254, 243, 199, 0.45);
  border-radius: 8px 8px 0 0;
  box-shadow: inset 0 -2px 0 rgba(217, 119, 6, 0.55);
}

.conv-tab--dispatch:hover {
  color: #5c1a1f;
  background: rgba(254, 243, 199, 0.65);
}

.conv-tab--dispatch.is-active {
  color: #7a0327;
  background: rgba(254, 243, 199, 0.55);
  border-bottom-color: #d97706;
  box-shadow: none;
}

.conv-tab--completed:not(.is-active) {
  color: #15803d;
}

.conv-tab--completed:not(.is-active):hover {
  color: #166534;
}

.conv-tab-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 18px;
  height: 18px;
  margin-left: 6px;
  padding: 0 5px;
  border-radius: 999px;
  background: #dc2626;
  color: #fff;
  font-size: 0.68rem;
  font-weight: 700;
  line-height: 1;
}

.conv-operational-alerts {
  display: grid;
  gap: 10px;
  margin-bottom: 14px;
}

.conv-operational-alert-body {
  display: grid;
  gap: 6px;
}

.conv-operational-alert-action {
  justify-self: start;
  margin-top: 2px;
}

.alegaciones-phase-card {
  margin-bottom: 16px;
}

.alegaciones-phase-head {
  display: flex;
  justify-content: space-between;
  gap: 16px;
  align-items: flex-start;
  margin-bottom: 12px;
}

.alegaciones-phase-kicker {
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--ink-soft);
  margin-bottom: 4px;
}

.alegaciones-phase-title {
  margin: 0 0 6px;
  font-size: 1.05rem;
}

.alegaciones-phase-meta {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 6px;
  flex-shrink: 0;
}

.alegaciones-row--resolved {
  opacity: 0.72;
  background: rgba(22, 163, 74, 0.04);
}

.alegaciones-row--resolved .item-main strong,
.alegaciones-row--resolved .item-description {
  color: var(--ink-soft);
}

.alegaciones-row--resolved .btn {
  opacity: 1;
}

.alegaciones-row--pending {
  background: rgba(239, 159, 39, 0.05);
}

.alegaciones-status-badge {
  white-space: nowrap;
}

.config-shell {
  padding: 0;
  overflow: hidden;
}

/* Submenú de configuración — estilo píldora, distinto de conv-tabs */
.config-subnav {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  padding: 10px 14px;
  background: linear-gradient(180deg, #eef1f5 0%, #e8ecf1 100%);
  border-bottom: 1px solid rgba(180, 190, 205, 0.45);
}

.config-subnav-label {
  font-size: 0.68rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: #6b7a8d;
  margin-right: 4px;
  flex-shrink: 0;
}

.config-subnav__item {
  display: inline-flex;
  align-items: center;
  padding: 5px 12px;
  border-radius: 999px;
  font-size: 0.78rem;
  font-weight: 600;
  color: #4a5568;
  text-decoration: none;
  background: rgba(255, 255, 255, 0.92);
  border: 1px solid rgba(180, 190, 205, 0.55);
  transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
}

.config-subnav__item:hover {
  color: #1e3a5f;
  border-color: rgba(95, 159, 211, 0.45);
  box-shadow: 0 1px 4px rgba(30, 58, 95, 0.08);
}

.config-subnav__item.is-active {
  color: #fff;
  background: linear-gradient(135deg, #4a7fb5 0%, #5f9fd3 100%);
  border-color: transparent;
  box-shadow: 0 2px 8px rgba(74, 127, 181, 0.28);
}

.config-panel {
  padding: 12px 16px 14px;
}

.config-panel .toolbar {
  margin-bottom: 10px;
  align-items: flex-start;
}

.config-panel .toolbar h2 {
  margin: 0 0 2px;
  font-size: 1.02rem;
}

.config-panel .toolbar .muted {
  font-size: 0.8rem;
  line-height: 1.35;
}

.config-panel .actions {
  gap: 6px;
}

.config-panel table .actions {
  gap: 4px;
  flex-wrap: nowrap;
}

.config-panel table .actions .btn {
  padding: 4px 9px;
  font-size: 0.74rem;
  border-radius: 6px;
  font-weight: 600;
}

.preset-strip {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  align-items: center;
  margin-bottom: 10px;
  padding: 7px 10px;
  border-radius: 8px;
  background: rgba(248, 249, 250, 0.95);
  border: 1px solid rgba(229, 231, 235, 0.9);
}

.preset-strip-label {
  font-size: 0.7rem;
  font-weight: 700;
  color: var(--ink-soft);
  margin-right: 2px;
}

.btn-chip {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 3px 8px;
  border-radius: 6px;
  font-size: 0.72rem;
  font-weight: 700;
  line-height: 1.2;
  text-decoration: none;
  cursor: pointer;
  border: 1px solid rgba(95, 159, 211, 0.28);
  background: rgba(95, 159, 211, 0.08);
  color: #2c5282;
  transition: background 0.12s ease, border-color 0.12s ease;
}

.btn-chip:hover {
  background: rgba(95, 159, 211, 0.16);
  border-color: rgba(95, 159, 211, 0.4);
  transform: none;
}

.btn-chip--primary {
  border-color: rgba(194, 27, 132, 0.25);
  background: rgba(194, 27, 132, 0.08);
  color: #7a2348;
}

.btn-chip--primary:hover {
  background: rgba(194, 27, 132, 0.14);
}

.btn-xs {
  padding: 4px 9px;
  font-size: 0.74rem;
  border-radius: 6px;
  font-weight: 600;
}

.config-summary-box {
  margin-bottom: 10px;
  padding: 8px 12px;
  background: rgba(153,0,51,0.05);
  border-radius: 8px;
  font-size: 0.84rem;
}

/* ── Guía de configuración de convocatoria ── */
.setup-workflow {
  margin-bottom: 14px;
  padding: 14px 16px;
  border-radius: 12px;
  border: 1px solid rgba(95, 159, 211, 0.28);
  background: linear-gradient(180deg, rgba(95, 159, 211, 0.07) 0%, rgba(255, 255, 255, 0.95) 100%);
}

.setup-workflow--welcome {
  border-color: rgba(194, 27, 132, 0.28);
  background: linear-gradient(180deg, rgba(194, 27, 132, 0.06) 0%, rgba(255, 255, 255, 0.96) 100%);
}

.setup-workflow-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 12px;
  margin-bottom: 12px;
}

.setup-workflow-head h3 {
  margin: 0 0 4px;
  font-size: 0.98rem;
}

.setup-workflow-head p {
  margin: 0;
  font-size: 0.82rem;
  color: var(--ink-soft);
  line-height: 1.45;
}

.setup-steps {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 8px;
}

.setup-step {
  border-radius: 10px;
  padding: 10px 11px;
  background: rgba(255, 255, 255, 0.92);
  border: 1px solid rgba(229, 231, 235, 0.95);
  min-height: 100%;
}

.setup-step.is-current {
  border-color: rgba(194, 27, 132, 0.35);
  box-shadow: 0 0 0 1px rgba(194, 27, 132, 0.12);
}

.setup-step.is-done {
  border-color: rgba(22, 163, 74, 0.25);
  background: rgba(22, 163, 74, 0.04);
}

.setup-step-num {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  border-radius: 999px;
  font-size: 0.72rem;
  font-weight: 800;
  margin-bottom: 6px;
  background: rgba(95, 159, 211, 0.14);
  color: #1e4a72;
}

.setup-step.is-current .setup-step-num {
  background: rgba(194, 27, 132, 0.14);
  color: #7a2348;
}

.setup-step.is-done .setup-step-num {
  background: rgba(22, 163, 74, 0.14);
  color: #166534;
}

.setup-step-title {
  display: block;
  font-size: 0.8rem;
  font-weight: 700;
  margin-bottom: 4px;
  line-height: 1.25;
}

.setup-step-desc {
  display: block;
  font-size: 0.73rem;
  color: var(--ink-soft);
  line-height: 1.35;
  margin-bottom: 8px;
}

.setup-substeps {
  margin: 0;
  padding: 0;
  list-style: none;
  display: grid;
  gap: 4px;
}

.setup-substeps li {
  font-size: 0.72rem;
  display: flex;
  align-items: center;
  gap: 5px;
}

.setup-substeps a {
  color: #2c5282;
  text-decoration: none;
  font-weight: 600;
}

.setup-substeps a:hover { text-decoration: underline; }

.checklist-action {
  white-space: nowrap;
}

@media (max-width: 980px) {
  .setup-steps { grid-template-columns: 1fr 1fr; }
}

@media (max-width: 640px) {
  .setup-steps { grid-template-columns: 1fr; }
}

/* ── Compact stats row ────────────────────────────────────────────── */
.stats-row {
  display: flex;
  gap: 0;
  border: 1px solid rgba(229,231,235,0.95);
  border-radius: 12px;
  overflow: hidden;
  background: rgba(255,255,255,0.94);
  margin-bottom: 12px;
}

.stat-item {
  flex: 1 1 0;
  padding: 12px 10px;
  text-align: center;
  border-right: 1px solid rgba(229,231,235,0.9);
}
.stat-item:last-child { border-right: none; }

.stat-value {
  display: block;
  font-size: 1.5rem;
  font-weight: 800;
  color: var(--ink);
  line-height: 1;
  margin-bottom: 4px;
}

.stat-label {
  font-size: 0.73rem;
  color: var(--ink-soft);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

/* ── Compact key-value layout ─────────────────────────────────────── */
.kv-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
  margin-bottom: 12px;
}

.kv-section {
  background: rgba(248,248,250,0.7);
  border-radius: 10px;
  padding: 11px 13px;
}

.kv-section-title {
  font-size: 0.71rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.09em;
  color: #7a2348;
  margin: 0 0 8px;
}

.kv-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.86rem;
}
.kv-table tr { border-bottom: 1px solid rgba(229,231,235,0.5); }
.kv-table tr:last-child { border-bottom: none; }
.kv-table th {
  width: 44%;
  padding: 5px 8px 5px 0;
  font-weight: 600;
  color: var(--ink-soft);
  text-align: left;
  vertical-align: top;
  white-space: nowrap;
}
.kv-table td { padding: 5px 0; color: var(--ink); }

/* ── Inline alert banner (replaces card for warnings/info in subpages) */
.alert-banner {
  border-radius: 10px;
  padding: 10px 14px;
  font-size: 0.88rem;
  margin-bottom: 12px;
  display: flex;
  align-items: flex-start;
  gap: 10px;
}
.alert-banner-warning { background: rgba(239,159,39,0.10); border: 1px solid rgba(239,159,39,0.22); color: #854f0b; }
.alert-banner-success { background: rgba(22,163,74,0.08); border: 1px solid rgba(22,163,74,0.18); color: #166534; }
.alert-banner-info    { background: rgba(59,130,246,0.08); border: 1px solid rgba(59,130,246,0.18); color: #1d4ed8; }
.alert-banner-danger  { background: rgba(220,38,38,0.08);  border: 1px solid rgba(220,38,38,0.22);  color: #991b1b; }
.alert-banner-icon { font-size: 1.1rem; flex-shrink: 0; margin-top: 1px; }

@media (max-width: 980px) {
  .layout { grid-template-columns: 1fr; }
  .sidebar { border-right: none; border-bottom: 1px solid rgba(229, 231, 235, 0.9); }
  .content { padding: 22px 18px 32px; }
}

@media (max-width: 720px) {
  .topbar,
  .toolbar,
  .access-module-actions {
    flex-direction: column;
    align-items: stretch;
  }

  .card-grid {
    grid-template-columns: 1fr;
  }

  .dashboard-page {
    grid-template-columns: 1fr;
  }

  .dashboard-kpi-row {
    grid-template-columns: 1fr 1fr;
  }

  .agenda-day {
    grid-template-columns: 1fr;
    gap: 8px;
  }
}

/* ── Admin dashboard ── */
.dashboard-page {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
  align-items: start;
}

.dashboard-col {
  display: flex;
  flex-direction: column;
  gap: 14px;
  min-width: 0;
}

.dashboard-kpi-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}

.dashboard-kpi-row .kpi-card {
  flex: none;
  max-width: none;
  min-width: 0;
}

.dashboard-agenda,
.dashboard-panel {
  padding: 14px 18px;
}

.dashboard-card-title {
  font-size: 0.92rem;
}

.dashboard-card-sub {
  font-size: 0.8rem;
  margin-top: 2px;
}

.dashboard-section-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 12px;
  margin-bottom: 14px;
}

.dashboard-section-head--tight {
  margin-bottom: 10px;
}

.dashboard-empty {
  margin-top: 12px;
}

.dashboard-table-wrap {
  overflow-x: auto;
}

.dashboard-conv-link {
  font-weight: 700;
  color: var(--ink);
  font-size: 0.85rem;
}

.dashboard-date-cell {
  font-size: 0.85rem;
  white-space: nowrap;
}

.dashboard-more-link {
  margin-top: 10px;
  text-align: right;
}

.dashboard-more-link a {
  font-size: 0.82rem;
}

.phase-pill--sm {
  font-size: 0.72rem;
}

.pending-item-link {
  font-weight: 700;
  color: var(--ink);
}

.pending-item-conv {
  font-size: 0.8rem;
}

.pending-item-detail {
  font-size: 0.82rem;
  margin: 4px 0 0;
}

.agenda-timeline {
  display: flex;
  flex-direction: column;
  gap: 0;
}

.agenda-day {
  display: grid;
  grid-template-columns: 92px minmax(0, 1fr);
  gap: 14px;
  padding: 12px 0;
  border-top: 1px solid rgba(229,231,235,0.9);
}

.agenda-day:first-child {
  border-top: none;
  padding-top: 0;
}

.agenda-day-marker {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding-top: 4px;
}

.agenda-day-date {
  font-size: 0.88rem;
  font-weight: 800;
  color: var(--ink);
}

.agenda-day-weekday {
  font-size: 0.76rem;
  color: var(--ink-soft);
  text-transform: capitalize;
}

.agenda-day--hoy .agenda-day-date {
  color: #a11463;
}

.agenda-day--vencido .agenda-day-date {
  color: #b45309;
}

.agenda-day-events {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.agenda-event {
  padding: 10px 12px;
  border-radius: 12px;
  border: 1px solid rgba(229,231,235,0.95);
  background: rgba(248,249,250,0.72);
}

.agenda-event--cierre,
.agenda-event--alegaciones {
  border-left: 3px solid #c21b84;
}

.agenda-event--apertura,
.agenda-event--publicacion {
  border-left: 3px solid #185fa5;
}

.agenda-event--avance,
.agenda-event--accion {
  border-left: 3px solid #7a2348;
}

.agenda-event-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  flex-wrap: wrap;
  margin-bottom: 4px;
}

.agenda-event-type {
  font-size: 0.84rem;
  font-weight: 700;
  color: var(--ink);
}

.agenda-event-conv {
  display: block;
  font-size: 0.82rem;
  font-weight: 700;
  color: var(--ink);
  margin-bottom: 2px;
}

.agenda-event-detail {
  font-size: 0.8rem;
  margin: 0;
  line-height: 1.45;
}

.agenda-badge {
  font-size: 0.68rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  padding: 2px 7px;
  border-radius: 999px;
}

.agenda-badge--hoy {
  background: rgba(194,27,132,0.12);
  color: #a11463;
}

.agenda-badge--vencido {
  background: rgba(180,83,9,0.12);
  color: #b45309;
}

.agenda-badge--proximo {
  background: rgba(95,159,211,0.14);
  color: #185fa5;
}

.pending-list {
  list-style: none;
  margin: 12px 0 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.pending-item {
  padding: 10px 12px;
  border-radius: 12px;
  border: 1px solid rgba(229,231,235,0.95);
  background: rgba(255,255,255,0.9);
}

.pending-item--alta {
  border-left: 3px solid #c21b84;
}

.pending-item--media {
  border-left: 3px solid #b45309;
}

/* --- Asistente de candidatura (compacto) --- */
.apply-wizard { display: grid; gap: 10px; }
.apply-wizard .toolbar h2 { font-size: 1.05rem; margin-bottom: 2px; }
.apply-steps {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
}
.apply-step-pill {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px 8px;
  border-radius: 999px;
  font-size: 0.7rem;
  font-weight: 700;
  border: 1px solid rgba(229,231,235,0.95);
  background: #fff;
  color: var(--ink-soft);
}
.apply-step-pill.is-done { background: rgba(22,163,74,0.08); color: #166534; border-color: rgba(22,163,74,0.25); }
.apply-step-pill.is-current { background: rgba(153,0,51,0.08); color: var(--fgulem-magenta); border-color: rgba(153,0,51,0.22); }
.apply-step-pill.is-pending {
  background: rgba(220, 38, 38, 0.08);
  color: #b91c1c;
  border-color: rgba(220, 38, 38, 0.35);
}
.apply-panel {
  padding: 12px 14px;
  border-radius: 10px;
  border: 1px solid rgba(229,231,235,0.95);
  background: rgba(255,255,255,0.9);
}
.apply-panel h3 { margin: 0 0 4px; font-size: 0.92rem; }
.apply-panel p { margin: 0 0 8px; color: var(--ink-soft); font-size: 0.8rem; line-height: 1.4; }
.apply-photo-row {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 10px;
  padding-bottom: 10px;
  border-bottom: 1px solid rgba(229,231,235,0.7);
}
.apply-avatar-sm {
  width: 52px;
  height: 52px;
  border-radius: 8px;
  object-fit: cover;
  border: 1px solid rgba(229,231,235,0.95);
  flex-shrink: 0;
}
.apply-photo-upload label {
  font-size: 0.78rem;
  font-weight: 600;
  display: block;
  margin-bottom: 3px;
}
.apply-photo-upload .file-upload { margin-top: 2px; }
.apply-form-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px 10px;
}
.apply-form-grid .field label { font-size: 0.78rem; margin-bottom: 3px; }
.apply-form-grid .field input,
.apply-form-grid .field select {
  padding: 6px 8px;
  font-size: 0.84rem;
}
.apply-form-grid .field--wide { grid-column: 1 / -1; }
.apply-file-options { display: grid; gap: 6px; margin-top: 6px; }
.apply-file-option {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  padding: 7px 10px;
  border-radius: 8px;
  border: 1px solid rgba(229,231,235,0.95);
  cursor: pointer;
  background: #fff;
  font-size: 0.82rem;
}
.apply-file-option input { width: auto; margin-top: 2px; }
.apply-upload-box {
  margin-top: 8px;
  padding: 8px 10px;
  border-radius: 8px;
  background: rgba(95,159,211,0.06);
  border: 1px solid rgba(95,159,211,0.15);
}
.apply-upload-box label { font-size: 0.78rem; font-weight: 600; display: block; margin-bottom: 4px; }
.apply-summary-list { display: grid; gap: 6px; margin: 0; padding: 0; list-style: none; }
.apply-summary-list li {
  display: flex;
  justify-content: space-between;
  gap: 8px;
  padding: 7px 10px;
  border-radius: 8px;
  border: 1px solid rgba(229,231,235,0.9);
  font-size: 0.8rem;
}
.apply-summary-list li.is-pending {
  border-color: rgba(220, 38, 38, 0.45);
  background: rgba(254, 242, 242, 0.9);
}
.apply-summary-list li.is-pending strong { color: #b91c1c; }
.apply-declaration-box {
  margin-top: 8px;
  padding: 12px 14px;
  border: 1px solid rgba(229, 231, 235, 0.95);
  border-radius: 10px;
  background: rgba(249, 250, 251, 0.95);
  color: var(--ink);
  font-size: 0.78rem;
  line-height: 1.55;
  white-space: pre-wrap;
}
.apply-declaration-accept {
  margin-top: 12px;
  padding: 12px 14px;
  border: 1px solid rgba(153, 0, 51, 0.16);
  border-radius: 10px;
  background: rgba(153, 0, 51, 0.04);
  font-size: 0.8rem;
  line-height: 1.45;
}
.apply-req-badge {
  display: inline-block;
  font-size: 0.68rem;
  font-weight: 700;
  padding: 2px 7px;
  border-radius: 999px;
  background: rgba(0,0,0,0.05);
  margin-bottom: 4px;
}
.apply-req-badge.is-cv { background: rgba(153,0,51,0.08); color: var(--fgulem-magenta); }
.apply-req-badge.is-acceso { background: rgba(59,130,246,0.1); color: #185fa5; }
.apply-req-badge.is-minimo { background: rgba(22,163,74,0.1); color: #166534; }
.apply-req-badge.is-merito { background: rgba(234,179,8,0.15); color: #92400e; }
.apply-file-option.is-recommended {
  border-color: rgba(22,163,74,0.45);
  background: rgba(22,163,74,0.04);
}
.apply-file-reco {
  display: inline-block;
  font-size: 0.66rem;
  font-weight: 700;
  color: #166534;
  margin-left: 4px;
}
.apply-hint {
  padding: 7px 10px;
  border-radius: 8px;
  background: rgba(95,159,211,0.07);
  border: 1px solid rgba(95,159,211,0.18);
  font-size: 0.78rem;
  color: var(--ink-soft);
  margin-bottom: 8px;
  line-height: 1.4;
}
.apply-draft-banner {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 7px 10px;
  border-radius: 8px;
  border: 1px solid rgba(234,179,8,0.35);
  background: rgba(254, 249, 195, 0.55);
  font-size: 0.78rem;
  color: #854d0e;
  margin-bottom: 8px;
  line-height: 1.4;
}
.apply-omit {
  margin-top: 8px;
  padding: 7px 10px;
  border-radius: 8px;
  border: 1px dashed rgba(229,231,235,0.95);
  background: rgba(248,250,252,0.9);
  font-size: 0.78rem;
}
.apply-summary-pending-link {
  display: inline-block;
  margin-top: 2px;
  font-size: 0.72rem;
  font-weight: 700;
  color: #b91c1c;
  text-decoration: underline;
}
.apply-summary-warning {
  padding: 8px 10px;
  border-radius: 8px;
  border: 1px solid rgba(220, 38, 38, 0.35);
  background: rgba(254, 242, 242, 0.95);
  color: #991b1b;
  font-size: 0.8rem;
  line-height: 1.4;
  margin-bottom: 8px;
}
.btn-submit-blocked {
  background: #dc2626 !important;
  border-color: #dc2626 !important;
  opacity: 0.65;
  cursor: not-allowed;
}
.enrollment-badge {
  font-size: 0.68rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  padding: 2px 7px;
  border-radius: 999px;
}
.enrollment-badge--open {
  background: rgba(22,163,74,0.1);
  color: #166534;
}
.enrollment-badge--closed {
  background: rgba(0,0,0,0.06);
  color: var(--ink-soft);
}

.enrollment-badge--finished {
  background: rgba(47, 59, 79, 0.1);
  color: #2f3b4f;
}

.convocatoria-list-status {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px 10px;
  margin: 6px 0 8px;
  font-size: 0.8rem;
  line-height: 1.35;
}

.convocatoria-phase-status {
  color: var(--ink);
  font-weight: 600;
}

.convocatoria-phase-status--primary {
  font-size: 0.82rem;
  color: var(--fgulem-blue-dark, #2c5282);
}

.convocatoria-summary-item--highlight {
  background: linear-gradient(135deg, rgba(95, 159, 211, 0.14) 0%, rgba(95, 159, 211, 0.06) 100%);
  border: 1px solid rgba(95, 159, 211, 0.22);
}

.convocatoria-summary-note {
  margin-top: 6px;
  font-size: 0.78rem;
  line-height: 1.35;
  font-weight: 500;
}

.convocatoria-summary-item .phase-pill--public {
  margin-top: 6px;
  display: inline-flex;
}

.convocatoria-summary-item .text-open {
  color: #166534;
}

.convocatoria-summary-item .text-closed {
  color: var(--ink-soft);
}

.conv-process-status-banner {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 16px 24px;
  margin-bottom: 14px;
  padding: 16px 18px;
  border-radius: 14px;
  border: 1px solid rgba(95, 159, 211, 0.28);
  background: linear-gradient(135deg, rgba(95, 159, 211, 0.12) 0%, rgba(255, 255, 255, 0.96) 100%);
}

.conv-process-status-kicker {
  display: block;
  margin-bottom: 4px;
  font-size: 0.72rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--ink-soft);
}

.conv-process-status-title {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  font-size: 1.05rem;
}

.conv-process-status-detail {
  margin: 6px 0 0;
  font-size: 0.82rem;
  line-height: 1.4;
}

.conv-process-status-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 12px 18px;
  align-items: flex-start;
}

.conv-process-status-meta-item {
  min-width: 120px;
  padding: 10px 12px;
  border-radius: 10px;
  background: rgba(255, 255, 255, 0.88);
  border: 1px solid rgba(229, 231, 235, 0.95);
}

.conv-process-status-meta-item span {
  display: block;
  margin-bottom: 3px;
  font-size: 0.72rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--ink-soft);
}

.conv-process-status-meta-item strong.is-open {
  color: #166534;
}

.conv-process-status-meta-item strong.is-closed {
  color: var(--ink-soft);
}

.conv-enrollment-open {
  color: #166534;
}

.conv-enrollment-closed {
  color: var(--ink-soft);
}

.page-public-detail .convocatoria-step-card.is-active-phase {
  border-color: rgba(95, 159, 211, 0.45);
  background: rgba(95, 159, 211, 0.08);
  box-shadow: 0 0 0 1px rgba(95, 159, 211, 0.12);
}

.convocatoria-step-card-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 4px;
}

.conv-admin-phase-cell strong {
  display: block;
  font-size: 0.84rem;
  line-height: 1.35;
}

.conv-admin-phase-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  margin-top: 4px;
  font-size: 0.76rem;
}

.conv-admin-workflow-label {
  margin-top: 3px;
  font-size: 0.72rem;
}

.admin-conv-list-table td {
  vertical-align: top;
}

.conv-workflow-badge {
  display: inline-flex;
  align-items: center;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 0.72rem;
  font-weight: 700;
  background: rgba(0, 0, 0, 0.05);
  color: var(--ink-soft);
}

.phase-pill--phase {
  background: rgba(95, 159, 211, 0.16);
  color: #185fa5;
}

.conv-header-meta .enrollment-badge {
  font-size: 0.68rem;
}

.convocatoria-updated-at {
  color: var(--ink-soft);
  font-size: 0.76rem;
}

.page-public-list .convocatoria-list-item h3 {
  margin-top: 0;
}

.convocatoria-faq-list {
  display: grid;
  gap: 8px;
}

.convocatoria-faq-item {
  border: 1px solid rgba(229,231,235,0.95);
  border-radius: 10px;
  background: rgba(255,255,255,0.92);
  overflow: hidden;
}

.convocatoria-faq-item summary {
  cursor: pointer;
  padding: 10px 12px;
  font-size: 0.86rem;
  font-weight: 700;
  list-style: none;
}

.convocatoria-faq-item summary::-webkit-details-marker {
  display: none;
}

.convocatoria-faq-answer {
  padding: 0 12px 10px;
  font-size: 0.82rem;
  line-height: 1.45;
  color: var(--ink-soft);
}

.convocatoria-consulta-box {
  padding: 10px 12px;
  border-radius: 10px;
  border: 1px solid rgba(229,231,235,0.95);
  background: rgba(248,250,252,0.9);
}

.convocatoria-consulta-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px 10px;
  margin-bottom: 8px;
}

.convocatoria-consulta-grid .field label,
.convocatoria-consulta-form .field label {
  font-size: 0.78rem;
  margin-bottom: 3px;
}

.convocatoria-consulta-form textarea {
  font-size: 0.84rem;
  min-height: 84px;
}

/* Área personal del candidato (compacta) */
.page-candidate-area .content > .card,
.page-candidate-area .candidate-panel {
  margin-bottom: 10px;
}

.page-candidate-area .page-heading h1 {
  font-size: 1.35rem;
}

.page-candidate-area .page-heading p {
  font-size: 0.86rem;
  margin-top: 2px;
}

.candidate-panel-compact {
  padding: 12px 14px;
}

.candidate-panel-head {
  display: flex;
  justify-content: space-between;
  gap: 10px;
  align-items: flex-start;
  flex-wrap: wrap;
  margin-bottom: 10px;
}

.candidate-panel-user {
  display: flex;
  gap: 10px;
  align-items: center;
}

.candidate-avatar-sm {
  width: 40px;
  height: 40px;
  border-radius: 8px;
  object-fit: cover;
  border: 1px solid rgba(229, 231, 235, 0.9);
}

.candidate-photo-thumb-btn {
  display: inline-flex;
  padding: 0;
  border: none;
  background: transparent;
  border-radius: 10px;
  cursor: zoom-in;
  flex-shrink: 0;
  transition: box-shadow 0.15s, transform 0.15s;
}

.candidate-photo-thumb-btn:hover {
  box-shadow: 0 0 0 2px rgba(95, 159, 211, 0.35);
  transform: translateY(-1px);
}

.candidate-photo-thumb-btn:focus-visible {
  outline: 2px solid rgba(95, 159, 211, 0.65);
  outline-offset: 2px;
}

.candidate-photo-thumb-btn.is-photo-broken {
  cursor: default;
}

.candidate-photo-thumb-btn.is-photo-broken:hover {
  box-shadow: none;
  transform: none;
}

.candidate-photo-thumb {
  display: block;
  border-radius: 10px;
  object-fit: cover;
  border: 1px solid rgba(229, 231, 235, 0.9);
}

/* Avatar de respaldo con iniciales, sustituye a la foto cuando el candidato
   no tiene fotografía o el archivo no está disponible. Reutiliza la clase
   original de tamaño/radio (candidate-photo-thumb, candidate-avatar-sm,
   apply-avatar-sm…) que se le añade dinámicamente vía JS o Jinja, de modo
   que hereda medidas y border-radius sin duplicar CSS. */
.candidate-avatar-fallback {
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(135deg, #7a2348, #a13a68);
  color: #fff;
  font-weight: 700;
  letter-spacing: 0.02em;
  border: 1px solid rgba(229, 231, 235, 0.9);
  flex-shrink: 0;
  user-select: none;
}

.modal-panel-photo {
  width: min(92vw, 520px);
  max-width: 520px;
}

.candidate-photo-lightbox-body {
  display: flex;
  justify-content: center;
  align-items: center;
  padding: 8px 16px 18px;
}

.candidate-photo-lightbox-img {
  display: block;
  max-width: 100%;
  max-height: min(70vh, 640px);
  width: auto;
  height: auto;
  border-radius: 12px;
  object-fit: contain;
  border: 1px solid rgba(229, 231, 235, 0.95);
  background: rgba(248, 249, 250, 0.9);
}

.candidate-photo-lightbox-head {
  border-bottom: 1px solid rgba(229, 231, 235, 0.9);
}

.modal-header-with-photo {
  display: flex;
  gap: 12px;
  align-items: center;
  min-width: 0;
}

.modal-header-with-photo > div:last-child {
  min-width: 0;
}

.item-main-with-photo {
  display: flex;
  align-items: center;
  gap: 10px;
}

.item-main-with-photo .candidate-photo-thumb-btn {
  flex-shrink: 0;
}

.candidate-panel-meta {
  font-size: 0.8rem;
}

.candidate-panel-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

.candidate-kpi-row {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 14px;
  font-size: 0.84rem;
}

.candidate-kpi span {
  font-weight: 700;
  color: var(--ink);
}

.candidate-section-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 8px;
  margin-bottom: 8px;
}

.candidate-link-sm {
  font-size: 0.8rem;
  color: var(--brand);
  text-decoration: none;
}

.candidate-link-sm:hover {
  text-decoration: underline;
}

.candidate-notice-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 8px;
}

.candidate-notice-item {
  display: flex;
  justify-content: space-between;
  gap: 10px;
  align-items: flex-start;
  padding: 8px 10px;
  border-radius: 8px;
  border: 1px solid rgba(229, 231, 235, 0.9);
  background: rgba(248, 250, 252, 0.75);
}

.candidate-notice-item.is-unread {
  border-color: rgba(244, 114, 182, 0.45);
  background: rgba(253, 242, 248, 0.65);
}

.candidate-notice-main {
  min-width: 0;
}

.candidate-notice-main strong {
  font-size: 0.9rem;
}

.candidate-notice-main p {
  margin: 4px 0 0;
  font-size: 0.82rem;
  color: var(--ink-soft);
  line-height: 1.4;
}

.candidate-notice-side {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 4px;
  flex-shrink: 0;
  font-size: 0.78rem;
}

.estado-badge-sm {
  font-size: 0.68rem;
  padding: 2px 6px;
}

.candidate-table-compact {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.84rem;
}

.candidate-table-compact th,
.candidate-table-compact td {
  padding: 6px 8px;
  border-bottom: 1px solid rgba(229, 231, 235, 0.8);
  text-align: left;
  vertical-align: top;
}

.candidate-table-compact th {
  font-size: 0.76rem;
  color: var(--muted);
  font-weight: 600;
}

@media (max-width: 640px) {
  /* Las tablas del área pública/candidato se desplazan en horizontal en vez de desbordar la pantalla. */
  .candidate-table-compact,
  .publication-table,
  .card > table {
    display: block;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }
}

.candidate-empty-compact {
  padding: 12px 8px;
  font-size: 0.86rem;
}

.candidate-expediente-stats {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 8px;
  font-size: 0.82rem;
}

.candidate-expediente-stats strong {
  display: block;
  margin-top: 2px;
  font-size: 0.86rem;
}

.candidate-expediente-stats--compact {
  grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
}

.candidate-subsanacion-upload-list {
  margin: 6px 0 0;
  padding-left: 16px;
  font-size: 0.78rem;
}

.candidate-subsanacion-uploaded-files {
  list-style: none;
  margin: 8px 0 0;
  padding: 0;
  display: grid;
  gap: 6px;
}

.candidate-subsanacion-uploaded-file {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 7px 10px;
  border-radius: 8px;
  border: 1px solid rgba(22, 163, 74, 0.28);
  background: rgba(22, 163, 74, 0.08);
  color: #166534;
  font-size: 0.8rem;
  line-height: 1.35;
}

.candidate-subsanacion-uploaded-file-icon {
  flex: 0 0 auto;
  width: 18px;
  height: 18px;
  border-radius: 999px;
  display: grid;
  place-items: center;
  background: #16a34a;
  color: #fff;
  font-size: 0.68rem;
  font-weight: 700;
}

.candidate-subsanacion-uploaded-file-name {
  word-break: break-word;
}

.candidate-subsanacion-count-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 52px;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 0.72rem;
  font-weight: 700;
  line-height: 1.35;
  white-space: nowrap;
}

.candidate-subsanacion-count-badge--done {
  background: rgba(22, 163, 74, 0.14);
  color: #15803d;
  border: 1px solid rgba(22, 163, 74, 0.28);
}

.candidate-subsanacion-count-badge--pending {
  background: rgba(220, 38, 38, 0.08);
  color: #b91c1c;
  border: 1px solid rgba(220, 38, 38, 0.18);
}

.candidate-subsanacion-progress {
  margin-bottom: 12px;
  padding: 10px 12px;
  border-radius: 10px;
  border: 1px solid rgba(148, 163, 184, 0.35);
  background: rgba(248, 250, 252, 0.9);
}

.candidate-subsanacion-progress.is-active {
  border-color: rgba(22, 163, 74, 0.28);
  background: rgba(22, 163, 74, 0.05);
}

.candidate-subsanacion-progress-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 10px;
  margin-bottom: 8px;
}

.candidate-subsanacion-progress-label {
  font-size: 0.8rem;
  color: var(--ink-soft);
  line-height: 1.4;
}

.candidate-subsanacion-progress.is-active .candidate-subsanacion-progress-label {
  color: #166534;
}

.candidate-subsanacion-progress-bar {
  height: 8px;
  border-radius: 999px;
  background: rgba(148, 163, 184, 0.22);
  overflow: hidden;
}

.candidate-subsanacion-progress-bar span {
  display: block;
  height: 100%;
  border-radius: inherit;
  background: linear-gradient(90deg, #22c55e, #16a34a);
  transition: width 0.25s ease;
}

.candidate-subsanacion-slots {
  display: flex;
  gap: 6px;
  margin-bottom: 8px;
}

.candidate-subsanacion-slot {
  flex: 1 1 0;
  min-width: 0;
  height: 30px;
  border-radius: 8px;
  border: 1px dashed rgba(148, 163, 184, 0.55);
  background: rgba(255, 255, 255, 0.85);
  color: #94a3b8;
  font-size: 0.72rem;
  font-weight: 700;
  display: grid;
  place-items: center;
}

.candidate-subsanacion-slot.is-filled {
  border-style: solid;
  border-color: rgba(22, 163, 74, 0.35);
  background: rgba(22, 163, 74, 0.14);
  color: #15803d;
}

.candidate-subsanacion-success-banner {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  margin-bottom: 12px;
  padding: 10px 12px;
  border-radius: 10px;
  border: 1px solid rgba(22, 163, 74, 0.28);
  background: rgba(22, 163, 74, 0.1);
  color: #166534;
  font-size: 0.82rem;
  line-height: 1.4;
}

.candidate-subsanacion-success-banner-icon {
  flex: 0 0 auto;
  width: 22px;
  height: 22px;
  border-radius: 999px;
  display: grid;
  place-items: center;
  background: #16a34a;
  color: #fff;
  font-size: 0.75rem;
  font-weight: 700;
}

.candidate-subsanacion-doc-empty {
  font-size: 0.8rem;
  line-height: 1.4;
}

.candidate-subsanacion-pending-file {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 8px;
  padding: 8px 10px;
  border-radius: 8px;
  border: 1px solid rgba(22, 163, 74, 0.28);
  background: rgba(22, 163, 74, 0.08);
  color: #166534;
  font-size: 0.8rem;
  line-height: 1.35;
}

.candidate-subsanacion-pending-file.is-hidden {
  display: none;
}

.candidate-subsanacion-pending-file-icon {
  flex: 0 0 auto;
  width: 18px;
  height: 18px;
  border-radius: 999px;
  display: grid;
  place-items: center;
  background: #16a34a;
  color: #fff;
  font-size: 0.68rem;
  font-weight: 700;
}

.candidate-subsanacion-uploaded-file.is-new {
  animation: subsanacion-file-highlight 1.4s ease;
}

@keyframes subsanacion-file-highlight {
  0% {
    box-shadow: 0 0 0 0 rgba(22, 163, 74, 0.45);
    transform: translateY(2px);
  }
  40% {
    box-shadow: 0 0 0 6px rgba(22, 163, 74, 0.12);
    transform: translateY(0);
  }
  100% {
    box-shadow: none;
    transform: translateY(0);
  }
}

[data-subsanacion-modal] .file-upload-name.has-file {
  color: #15803d;
  font-weight: 700;
}

[data-subsanacion-modal] .file-upload {
  padding: 8px 10px;
  border-radius: 10px;
  border: 1px solid rgba(148, 163, 184, 0.35);
  background: rgba(248, 250, 252, 0.9);
}

.candidate-subsanacion-block--uploaded {
  margin-bottom: 12px;
  padding: 10px 12px;
  border-radius: 10px;
  border: 1px solid rgba(22, 163, 74, 0.24);
  background: rgba(22, 163, 74, 0.04);
}

.candidate-doc-row--submitted td {
  background: rgba(22, 163, 74, 0.03);
}

.candidate-doc-row--pending td {
  background: rgba(254, 243, 199, 0.18);
}

.candidate-expediente-note {
  margin-top: 8px;
  font-size: 0.82rem;
  line-height: 1.4;
}

.candidate-req-list {
  margin: 0 0 10px;
  padding-left: 18px;
  font-size: 0.84rem;
}

.candidate-req-list li {
  margin-bottom: 4px;
}

.candidate-subsanacion-block + .candidate-subsanacion-block {
  margin-top: 12px;
}

.candidate-subsanacion-block-title {
  font-size: 0.78rem;
  font-weight: 700;
  color: var(--muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  margin-bottom: 6px;
}

.candidate-subsanacion-badge {
  display: inline-flex;
  align-items: center;
  margin-top: 4px;
  padding: 2px 7px;
  border-radius: 999px;
  font-size: 0.72rem;
  font-weight: 600;
  line-height: 1.3;
}

.candidate-subsanacion-badge--required {
  background: rgba(254, 243, 199, 0.95);
  color: #b45309;
}

.candidate-subsanacion-badge--submitted {
  background: rgba(209, 250, 229, 0.95);
  color: #047857;
}

.candidate-subsanacion-badge--done {
  background: rgba(209, 250, 229, 0.95);
  color: #047857;
}

.candidate-subsanacion-workflow {
  margin-top: 12px;
  padding: 12px 14px;
  border-radius: 10px;
  border: 1px solid rgba(122, 35, 72, 0.16);
  background: rgba(122, 35, 72, 0.04);
}

.candidate-subsanacion-workflow-head {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  align-items: baseline;
  margin-bottom: 6px;
}

.candidate-subsanacion-workflow-intro {
  margin: 0 0 10px;
  font-size: 0.82rem;
  line-height: 1.45;
}

.candidate-subsanacion-checklist {
  list-style: none;
  margin: 0 0 12px;
  padding: 0;
  display: grid;
  gap: 6px;
}

.candidate-subsanacion-checklist li {
  display: grid;
  grid-template-columns: auto 1fr auto;
  gap: 8px;
  align-items: center;
  padding: 7px 9px;
  border-radius: 8px;
  background: #fff;
  border: 1px solid var(--line);
  font-size: 0.8rem;
}

.candidate-subsanacion-checklist li.is-done {
  border-color: rgba(22, 163, 74, 0.28);
  background: rgba(22, 163, 74, 0.05);
}

.candidate-subsanacion-checklist li.is-pending {
  border-color: rgba(220, 38, 38, 0.22);
  background: rgba(220, 38, 38, 0.04);
}

.candidate-subsanacion-checklist-code {
  font-weight: 700;
  color: #7a2348;
}

.candidate-subsanacion-checklist-status {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-weight: 600;
  white-space: nowrap;
}

.candidate-subsanacion-checklist-status-label {
  font-size: 0.78rem;
}

.candidate-subsanacion-checklist li.is-pending .candidate-subsanacion-checklist-status {
  color: #dc2626;
}

.candidate-subsanacion-checklist li.is-done .candidate-subsanacion-checklist-status {
  color: #16a34a;
}

.candidate-subsanacion-finalize-form {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px;
}

.candidate-subsanacion-finalize-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px;
  margin-top: 12px;
}

.candidate-subsanacion-finalize-missing {
  margin: 12px 0 0;
  padding: 0;
  list-style: none;
  display: grid;
  gap: 8px;
}

.candidate-subsanacion-finalize-missing li {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 8px;
  align-items: start;
  font-size: 0.84rem;
}

.candidate-subsanacion-finalize-irreversible {
  margin: 12px 0 0;
  font-size: 0.8rem;
}

.candidate-subsanacion-finalize-hint {
  font-size: 0.78rem;
}

.candidate-subsanacion-closed-note {
  margin-top: 10px;
  padding: 10px 12px;
  border-radius: 8px;
  background: rgba(59, 130, 246, 0.08);
  border: 1px solid rgba(59, 130, 246, 0.18);
}

.candidate-subsanacion-form .candidate-form-row {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
  margin-bottom: 8px;
}

.candidate-subsanacion-form-grid {
  display: grid;
  gap: 10px;
  margin-bottom: 10px;
}

.candidate-subsanacion-form-grid .field-full {
  grid-column: 1 / -1;
}

.candidate-subsanacion-form-grid textarea {
  width: 100%;
  min-height: 72px;
  padding: 8px 10px;
  font-size: 0.86rem;
  border-radius: 8px;
  border: 1px solid var(--line);
  resize: vertical;
}

.candidate-subsanacion-category-value {
  display: inline-flex;
  align-items: center;
  min-height: 32px;
  padding: 6px 10px;
  border-radius: 8px;
  background: rgba(219, 234, 254, 0.55);
  color: #1d4ed8;
  font-size: 0.84rem;
  font-weight: 600;
}

.page-candidate-area .message-thread-list {
  max-height: 280px;
  gap: 6px;
  margin-bottom: 10px;
}

.page-candidate-area .message-item {
  padding: 8px 10px;
  border-radius: 8px;
}

.page-candidate-area .message-item-title {
  font-size: 0.88rem;
  margin: 2px 0 4px;
}

.page-candidate-area .message-item-body {
  font-size: 0.82rem;
  line-height: 1.4;
  white-space: pre-line;
}

.page-candidate-area .message-item-header {
  margin-bottom: 4px;
}

.page-candidate-area .message-item-meta {
  font-size: 0.74rem;
}

.page-candidate-area .message-category-badge {
  font-size: 0.68rem;
  padding: 1px 5px;
}

.page-candidate-area .message-reply-form .field {
  margin-bottom: 8px;
}

.page-candidate-area .message-reply-form textarea {
  min-height: 72px;
  font-size: 0.84rem;
}

@media (max-width: 860px) {
  .candidate-expediente-stats {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .candidate-subsanacion-form .candidate-form-row {
    grid-template-columns: 1fr;
  }

  .candidate-notice-item {
    flex-direction: column;
  }

  .candidate-notice-side {
    align-items: flex-start;
    flex-direction: row;
    flex-wrap: wrap;
  }

  .candidate-conv-card {
    flex-direction: column;
  }

  .candidate-conv-head {
    flex-direction: column;
    align-items: stretch;
  }

  .candidate-conv-actions {
    width: 100%;
    justify-content: flex-start;
  }
}

.candidate-conv-list {
  display: grid;
  gap: 8px;
}

.candidate-conv-card {
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  gap: 10px;
  align-items: stretch;
  padding: 12px 14px;
  border-radius: 10px;
  border: 1px solid rgba(229, 231, 235, 0.9);
  background: rgba(248, 250, 252, 0.7);
}

.candidate-expediente-highlight {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 10px 12px;
  border-radius: 10px;
  border: 1px solid rgba(229, 231, 235, 0.95);
  background: rgba(255, 255, 255, 0.92);
}

.candidate-expediente-highlight--success {
  border-color: rgba(22, 163, 74, 0.28);
  background: rgba(22, 163, 74, 0.07);
}

.candidate-expediente-highlight--danger {
  border-color: rgba(220, 38, 38, 0.28);
  background: rgba(220, 38, 38, 0.06);
}

.candidate-expediente-highlight--warning {
  border-color: rgba(217, 119, 6, 0.32);
  background: rgba(217, 119, 6, 0.08);
}

.candidate-expediente-highlight--info {
  border-color: rgba(37, 99, 235, 0.28);
  background: rgba(37, 99, 235, 0.06);
}

.candidate-expediente-highlight--neutral {
  border-color: rgba(148, 163, 184, 0.35);
  background: rgba(248, 250, 252, 0.95);
}

.candidate-expediente-highlight-kicker {
  display: block;
  font-size: 0.68rem;
  font-weight: 800;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--ink-soft);
}

.candidate-expediente-highlight-title {
  display: block;
  font-size: 1.05rem;
  line-height: 1.25;
  color: var(--ink);
}

.candidate-expediente-highlight-meta {
  font-size: 0.78rem;
  line-height: 1.35;
}

.candidate-expediente-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

.candidate-expediente-chip {
  display: inline-flex;
  align-items: center;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 0.72rem;
  font-weight: 600;
  border: 1px solid transparent;
}

.candidate-expediente-chip--success {
  color: #166534;
  background: rgba(22, 163, 74, 0.12);
  border-color: rgba(22, 163, 74, 0.18);
}

.candidate-expediente-chip--danger {
  color: #991b1b;
  background: rgba(220, 38, 38, 0.1);
  border-color: rgba(220, 38, 38, 0.18);
}

.candidate-expediente-chip--info {
  color: #1d4ed8;
  background: rgba(37, 99, 235, 0.1);
  border-color: rgba(37, 99, 235, 0.18);
}

.candidate-expediente-chip--warning {
  color: #92400e;
  background: rgba(217, 119, 6, 0.12);
  border-color: rgba(217, 119, 6, 0.18);
}

.candidate-expediente-chip--neutral {
  color: var(--ink-soft);
  background: rgba(241, 245, 249, 0.95);
  border-color: rgba(226, 232, 240, 0.95);
}

.candidate-conv-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 12px;
}

.candidate-conv-title-wrap {
  min-width: 0;
  flex: 1 1 auto;
}

.candidate-conv-title-wrap strong {
  font-size: 0.92rem;
}

.candidate-conv-meta {
  margin-top: 2px;
}

.candidate-conv-main {
  min-width: 0;
}

.candidate-conv-main strong {
  font-size: 0.92rem;
}

.candidate-conv-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  flex-shrink: 0;
  justify-content: flex-end;
}

.candidate-pub-links {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-top: 6px;
}

.candidate-pub-pill {
  display: inline-block;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 0.72rem;
  text-decoration: none;
  background: rgba(219, 234, 254, 0.9);
  color: #1d4ed8;
  border: 1px solid rgba(147, 197, 253, 0.5);
}

.candidate-pub-pill.is-muted {
  background: rgba(241, 245, 249, 0.9);
  color: var(--muted);
  border-color: rgba(226, 232, 240, 0.9);
}

.candidate-form-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px 10px;
}

.candidate-form-grid .field-full {
  grid-column: 1 / -1;
}

.candidate-modal-panel .modal-body-compact {
  max-height: min(78vh, 720px);
  overflow: auto;
}

.candidate-modal-form .field label {
  font-size: 0.78rem;
  margin-bottom: 3px;
}

.candidate-modal-form input,
.candidate-modal-form select,
.candidate-modal-form textarea {
  font-size: 0.84rem;
  padding: 6px 8px;
}

.confirmacion-entrevista-panel {
  width: min(520px, calc(100% - 24px));
}

.confirmacion-detail-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 6px;
  margin-bottom: 8px;
}

.confirmacion-detail-item {
  padding: 6px 8px;
  border-radius: 8px;
  background: rgba(248, 250, 252, 0.95);
  border: 1px solid rgba(226, 232, 240, 0.9);
}

.confirmacion-detail-label {
  display: block;
  font-size: 0.68rem;
  color: var(--muted);
  margin-bottom: 2px;
  text-transform: uppercase;
  letter-spacing: 0.02em;
}

.confirmacion-detail-item strong {
  font-size: 0.82rem;
  font-weight: 700;
}

.confirmacion-detail-extra {
  font-size: 0.78rem;
  margin-bottom: 6px;
  line-height: 1.35;
}

.confirmacion-detail-extra .confirmacion-detail-label {
  display: inline;
  margin-right: 4px;
  text-transform: none;
  letter-spacing: 0;
  font-size: 0.78rem;
  font-weight: 600;
  color: var(--ink);
}

.confirmacion-hint {
  margin: 0 0 10px;
  padding: 8px 10px;
  font-size: 0.76rem;
  line-height: 1.4;
  border-radius: 8px;
  background: rgba(219, 234, 254, 0.45);
  border: 1px solid rgba(147, 197, 253, 0.35);
}

.confirmacion-field-label {
  display: block;
  font-size: 0.78rem;
  font-weight: 600;
  margin-bottom: 6px;
  color: var(--ink);
}

.confirmacion-radio-list {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.confirmacion-radio-option {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  margin: 0;
  padding: 8px 10px;
  border: 1px solid rgba(226, 232, 240, 0.95);
  border-radius: 10px;
  cursor: pointer;
  font-size: 0.8rem;
  line-height: 1.35;
  transition: border-color 0.15s ease, background 0.15s ease;
}

.confirmacion-radio-option:hover {
  border-color: rgba(153, 0, 51, 0.22);
  background: rgba(153, 0, 51, 0.02);
}

.confirmacion-radio-option:has(input:checked) {
  border-color: rgba(153, 0, 51, 0.38);
  background: rgba(153, 0, 51, 0.05);
}

.confirmacion-radio-option input[type="radio"] {
  margin: 3px 0 0;
  flex: 0 0 auto;
  width: 14px;
  height: 14px;
}

.confirmacion-radio-option span {
  flex: 1 1 auto;
}

.confirmacion-priority-banner {
  display: flex;
  gap: 10px;
  align-items: flex-start;
  margin-bottom: 10px;
  padding: 8px 10px;
  border-radius: 10px;
  background: rgba(254, 243, 199, 0.75);
  border: 1px solid rgba(251, 191, 36, 0.45);
  font-size: 0.78rem;
  line-height: 1.4;
}

.confirmacion-priority-banner-icon {
  flex: 0 0 auto;
  width: 22px;
  height: 22px;
  border-radius: 999px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-weight: 800;
  font-size: 0.82rem;
  color: #92400e;
  background: rgba(251, 191, 36, 0.35);
}

.confirmacion-dashboard-banner {
  margin-bottom: 10px;
}

.modal-shell--priority .modal-panel {
  box-shadow: 0 18px 48px rgba(15, 23, 42, 0.22);
}

@media (max-width: 520px) {
  .confirmacion-detail-grid {
    grid-template-columns: 1fr;
  }
}

.candidate-files-upload {
  margin-bottom: 10px;
  padding-bottom: 10px;
  border-bottom: 1px solid rgba(229, 231, 235, 0.8);
}

.candidate-files-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  justify-content: flex-end;
}

.candidate-files-actions form {
  display: inline;
}

.page-candidate-area .field-errors {
  margin-top: 4px;
  color: #a11463;
  font-size: 0.78rem;
  font-weight: 600;
}

@media (max-width: 860px) {
  .candidate-form-grid {
    grid-template-columns: 1fr;
  }
}

/* Panel de gestión interna (compacto) */
.page-admin-compact .content {
  padding: 16px 20px 28px;
}

.page-admin-compact .topbar {
  margin-bottom: 12px;
  gap: 12px;
}

.page-admin-compact .page-heading h1 {
  font-size: 1.25rem;
  font-weight: 700;
}

.page-admin-compact .page-heading p {
  font-size: 0.82rem;
  margin-top: 2px;
  line-height: 1.35;
}

.page-admin-compact .card {
  padding: 12px 14px;
  margin-bottom: 10px;
  border-radius: 12px;
}

.page-admin-compact .card > h2,
.page-admin-compact .card .toolbar h2 {
  font-size: 0.92rem;
  margin: 0 0 2px;
}

.page-admin-compact .toolbar {
  margin-bottom: 8px;
  gap: 8px;
}

.page-admin-compact .admin-section-head {
  margin-bottom: 8px;
}

.page-admin-compact .admin-section-head strong,
.page-admin-compact .admin-section-head h2 {
  font-size: 0.9rem;
  display: block;
  margin: 0 0 2px;
}

.page-admin-compact .admin-section-head .muted {
  font-size: 0.76rem;
  line-height: 1.3;
}

.page-admin-compact table {
  font-size: 0.84rem;
}

.page-admin-compact th {
  padding: 6px 8px;
  font-size: 0.68rem;
}

.page-admin-compact td {
  padding: 7px 8px;
}

.page-admin-compact .item-main strong {
  font-size: 0.84rem;
  font-weight: 600;
}

.page-admin-compact .item-description {
  font-size: 0.74rem;
  color: var(--ink-soft);
  margin-top: 1px;
  line-height: 1.25;
}

.page-admin-compact .stats-row {
  margin-bottom: 8px;
  border-radius: 10px;
}

.page-admin-compact .stat-item {
  padding: 8px 6px;
}

.page-admin-compact .stat-value {
  font-size: 1.15rem;
  margin-bottom: 2px;
}

.page-admin-compact .stat-label {
  font-size: 0.66rem;
}

.page-admin-compact .conv-header {
  padding: 10px 12px 0;
  margin-bottom: 10px;
  border-radius: 12px;
}

.page-admin-compact .conv-header-top {
  padding-bottom: 8px;
  gap: 8px;
}

.page-admin-compact .conv-header-title h2 {
  font-size: 0.9rem;
}

.page-admin-compact .conv-header-meta {
  font-size: 0.74rem;
  gap: 6px;
}

.page-admin-compact .conv-back {
  width: 30px;
  height: 30px;
  font-size: 1rem;
  border-radius: 8px;
}

.page-admin-compact .phase-pill {
  font-size: 0.68rem;
  padding: 1px 7px;
}

.page-admin-compact .conv-tabs {
  margin: 0 -12px;
  padding: 0 10px;
}

.page-admin-compact .conv-tab {
  padding: 7px 10px;
  font-size: 0.78rem;
}

.page-admin-compact .alert-banner {
  padding: 7px 10px;
  font-size: 0.8rem;
  margin-bottom: 8px;
  border-radius: 8px;
  gap: 8px;
  line-height: 1.35;
}

.page-admin-compact .alert-banner-icon {
  font-size: 0.95rem;
}

.page-admin-compact .empty-state {
  padding: 16px 12px;
  font-size: 0.84rem;
}

.page-admin-compact .support-admin-list {
  gap: 8px;
}

.page-admin-compact .support-admin-item {
  padding: 10px 12px;
  border-radius: 10px;
}

.page-admin-compact .support-admin-item h3,
.page-admin-compact .support-admin-header h3 {
  font-size: 0.88rem;
  margin: 0 0 2px;
}

.page-admin-compact .support-admin-header {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 8px;
  margin-bottom: 4px;
}

.page-admin-compact .support-thread-inline {
  max-height: 200px;
  margin: 6px 0 8px;
}

.page-admin-compact .message-item {
  padding: 8px 10px;
  border-radius: 8px;
}

.page-admin-compact .message-item-body {
  font-size: 0.82rem;
  line-height: 1.4;
}

.page-admin-compact .message-item-header {
  margin-bottom: 4px;
}

.page-admin-compact .message-item-meta {
  font-size: 0.72rem;
}

.page-admin-compact .message-reply-form .field {
  margin-bottom: 8px;
}

.page-admin-compact .message-reply-form textarea {
  min-height: 64px;
  padding: 8px 10px;
  font-size: 0.84rem;
}

.page-admin-compact .bulk-announcement-list {
  gap: 6px;
}

.page-admin-compact .bulk-announcement-item {
  padding: 10px 12px;
  border-radius: 10px;
  gap: 8px;
}

.page-admin-compact .bulk-announcement-item h3 {
  font-size: 0.88rem;
  margin: 0 0 2px;
}

.page-admin-compact .bulk-announcement-item p {
  margin: 4px 0 0;
  font-size: 0.82rem;
  line-height: 1.35;
}

.page-admin-compact .message-manager-table {
  font-size: 0.84rem;
}

.page-admin-compact .badge {
  padding: 3px 8px;
  font-size: 0.72rem;
}

.page-admin-compact .estado-badge {
  padding: 2px 7px;
  font-size: 0.72rem;
}

.page-admin-compact .btn:not(.btn-sm):not(.btn-logout) {
  padding: 7px 12px;
  font-size: 0.82rem;
  border-radius: 8px;
}

.page-admin-compact .actions {
  gap: 6px;
}

.page-admin-compact .field {
  margin-bottom: 10px;
}

.page-admin-compact label,
.page-admin-compact .form-label {
  font-size: 0.82rem;
  margin-bottom: 4px;
}

.page-admin-compact input,
.page-admin-compact select,
.page-admin-compact textarea,
.page-admin-compact .form-control {
  padding: 7px 10px;
  font-size: 0.84rem;
  border-radius: 8px;
}

.page-admin-compact .form-help {
  font-size: 0.74rem;
  margin-top: 3px;
}

.page-admin-compact .modal-shell {
  padding: 14px;
}

.page-admin-compact .modal-panel {
  border-radius: 14px;
  width: min(720px, 100%);
}

.page-admin-compact .modal-panel-wide {
  width: min(860px, 100%);
}

.page-admin-compact .modal-header,
.page-admin-compact .modal-footer {
  padding: 10px 14px;
}

.page-admin-compact .modal-body {
  padding: 10px 14px 12px;
}

.page-admin-compact .modal-header h2 {
  font-size: 0.95rem;
  margin-bottom: 2px;
}

.page-admin-compact .modal-close {
  width: 32px;
  height: 32px;
  font-size: 1.2rem;
  border-radius: 8px;
}

.page-admin-compact .mini-card {
  padding: 10px 12px;
  border-radius: 10px;
}

.page-admin-compact .mini-card h3 {
  font-size: 0.82rem;
  margin: 0 0 4px;
}

.page-admin-compact .mini-card p {
  font-size: 0.8rem;
  margin: 0 0 4px;
}

.page-admin-compact .card-grid,
.page-admin-compact .modal-grid-tight {
  gap: 8px;
}

.page-admin-compact .check-row {
  min-height: 36px;
  padding: 6px 10px;
  border-radius: 8px;
}

.page-admin-compact .mini-checklist textarea {
  min-height: 52px;
  margin-top: 4px;
  margin-bottom: 6px;
}

.page-admin-compact .flash {
  padding: 8px 12px;
  font-size: 0.84rem;
  margin-bottom: 8px;
}

.page-admin-compact .admin-baremo-card {
  padding: 10px 12px !important;
}

.page-admin-compact .baremo-summary-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));
  gap: 6px;
  margin-top: 6px;
}

.page-admin-compact .baremo-stat {
  background: rgba(153, 0, 51, 0.05);
  border-radius: 6px;
  padding: 6px 8px;
  font-size: 0.76rem;
}

.page-admin-compact .baremo-stat strong {
  display: block;
  font-size: 0.9rem;
  margin-bottom: 1px;
}

.page-admin-compact .baremo-scores-row {
  font-size: 0.76rem;
}

.page-admin-compact .score-chip {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  background: rgba(0, 0, 0, 0.06);
  border-radius: 4px;
  padding: 1px 5px;
  margin: 1px;
  font-size: 0.72rem;
}

.page-admin-compact .score-chip.over-max {
  background: rgba(200, 0, 0, 0.15);
  color: #900;
}

.page-admin-compact .dashboard-page {
  gap: 10px;
}

.page-admin-compact .kpi-card {
  padding: 10px 12px;
  border-radius: 12px;
}

.page-admin-compact .kv-section {
  padding: 8px 10px;
}

.page-admin-compact .kv-table {
  font-size: 0.8rem;
}

.page-admin-compact .kv-table th,
.page-admin-compact .kv-table td {
  padding: 3px 0;
}

.alert-banner-compact {
  padding: 8px 12px;
  margin-bottom: 10px;
  font-size: 0.84rem;
}

.baremo-inline-summary {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: 0 0 12px;
}

.baremo-inline-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  background: rgba(153, 0, 51, 0.06);
  border-radius: 6px;
  padding: 4px 8px;
  font-size: 0.76rem;
}

.valoracion-review-section {
  margin-bottom: 12px;
}

/* ── Grouped flat valoracion layout ── */
.val-group {
  border: 1px solid var(--line);
  border-radius: 10px;
  overflow: hidden;
  margin-bottom: 10px;
}

.val-group-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 10px;
  padding: 9px 12px;
  background: rgba(153, 0, 51, 0.04);
  border-bottom: 1px solid var(--line);
}

.val-group-title {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  font-size: 0.84rem;
}

.val-group-code {
  font-weight: 700;
  color: rgba(153, 0, 51, 0.85);
  font-size: 0.82rem;
  letter-spacing: 0.02em;
}

.val-group-name {
  font-weight: 600;
}

.val-group-desc {
  font-size: 0.75rem;
  width: 100%;
  margin-top: 2px;
}

.val-group-total {
  display: flex;
  align-items: center;
  gap: 5px;
  font-size: 0.82rem;
  white-space: nowrap;
  flex-shrink: 0;
}

.val-group-total strong {
  font-size: 1rem;
  color: #16a34a;
}

.val-leaf-row,
.val-standalone-row {
  padding: 10px 12px;
  border-bottom: 1px solid rgba(229, 231, 235, 0.6);
}

.val-leaf-row:last-child,
.val-standalone-row {
  border-bottom: none;
}

.val-standalone-row {
  border: 1px solid var(--line);
  border-radius: 10px;
  margin-bottom: 10px;
}

.val-leaf-header {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  margin-bottom: 8px;
  font-size: 0.82rem;
}

.val-leaf-code {
  font-weight: 600;
  font-size: 0.78rem;
  color: #555;
  background: rgba(0, 0, 0, 0.05);
  padding: 2px 6px;
  border-radius: 4px;
}

.val-leaf-name {
  font-weight: 500;
}

.val-leaf-desc {
  font-size: 0.74rem;
  width: 100%;
  margin-top: 1px;
}

.val-doc-list {
  list-style: none;
  margin: 0 0 8px;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

.val-doc-list li {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 0.78rem;
  padding: 3px 8px;
  background: rgba(37, 99, 235, 0.06);
  border-radius: 5px;
}

.val-no-doc {
  font-size: 0.76rem;
  margin-bottom: 8px;
}

.val-sin-doc-warning {
  font-size: 0.78rem;
  font-weight: 600;
  color: #991b1b;
  background: rgba(220, 38, 38, 0.08);
  border: 1px solid rgba(220, 38, 38, 0.25);
  border-radius: 6px;
  padding: 5px 9px;
  margin-bottom: 8px;
}

.val-leaf-row--sin-doc {
  background: rgba(220, 38, 38, 0.03);
}

.val-alegacion-box {
  margin-bottom: 8px;
  padding: 7px 10px;
  background: rgba(37, 99, 235, 0.05);
  border: 1px solid rgba(37, 99, 235, 0.2);
  border-radius: 6px;
}

.val-alegacion-head {
  font-size: 0.76rem;
  font-weight: 700;
  color: #1d4ed8;
  text-transform: capitalize;
}

.val-alegacion-text {
  font-size: 0.8rem;
  margin-top: 4px;
  line-height: 1.45;
}

.val-alegacion-hint {
  font-size: 0.72rem;
  margin-top: 5px;
}

.val-alegacion-box--estimada {
  background: rgba(22, 163, 74, 0.06);
  border-color: rgba(22, 163, 74, 0.3);
}

.val-alegacion-box--desestimada {
  background: rgba(220, 38, 38, 0.05);
  border-color: rgba(220, 38, 38, 0.25);
}

.val-alegacion-status {
  display: inline-block;
  margin-left: 6px;
  padding: 1px 7px;
  border-radius: 999px;
  font-size: 0.68rem;
  font-weight: 600;
  text-transform: none;
}

.val-alegacion-status--pendiente {
  background: rgba(180, 83, 9, 0.14);
  color: #b45309;
}

.val-alegacion-status--estimada {
  background: rgba(22, 163, 74, 0.14);
  color: #166534;
}

.val-alegacion-status--desestimada {
  background: rgba(220, 38, 38, 0.12);
  color: #991b1b;
}

.val-alegacion-resolucion {
  margin-top: 8px;
  padding-top: 8px;
  border-top: 1px dashed rgba(0, 0, 0, 0.12);
}

.val-alegacion-resolucion-label {
  display: block;
  font-size: 0.74rem;
  font-weight: 700;
  margin-bottom: 4px;
}

.val-alegacion-select {
  width: 100%;
  font-size: 0.82rem;
  padding: 5px 8px;
  border: 1px solid var(--line);
  border-radius: 6px;
}

.val-alegacion-respuesta {
  width: 100%;
  margin-top: 6px;
  font-size: 0.82rem;
  padding: 6px 8px;
  border: 1px solid var(--line);
  border-radius: 6px;
  resize: vertical;
}

.valoracion-score-input--sin-doc {
  border-color: rgba(220, 38, 38, 0.5) !important;
  background: rgba(220, 38, 38, 0.05);
  color: #991b1b;
  font-weight: 600;
}

/* ── Variantes semánticas de badge (verde/ámbar/rojo) ── */
.badge-success { background: rgba(22, 163, 74, 0.12); color: #166534; }
.badge-warning { background: rgba(239, 159, 39, 0.16); color: #854f0b; }
.badge-danger  { background: rgba(220, 38, 38, 0.12); color: #991b1b; }

/* ── Nota de corte en el listado de valoración ── */
.val-corte-badge {
  margin-top: 3px;
  padding: 2px 7px;
  font-size: 0.68rem;
  font-weight: 700;
}

.val-row--corte-ok td {
  background: rgba(22, 163, 74, 0.05);
}

.val-row--corte-ok td:first-child {
  box-shadow: inset 3px 0 0 #16a34a;
}

.val-row--corte-ko td {
  background: rgba(220, 38, 38, 0.035);
}

/* ── Barra de acciones (ordenar / confirmar valoraciones) ── */
.valoracion-actions-bar {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 12px;
  flex-wrap: wrap;
  margin-top: 14px;
  padding-top: 14px;
  border-top: 1px solid var(--line);
}

.valoracion-actions-confirm {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 4px;
  text-align: right;
}

/* ── Aviso de puntuación máxima superada al puntuar ── */
.val-over-max-warning {
  font-size: 0.74rem;
  font-weight: 600;
  color: #991b1b;
  background: rgba(220, 38, 38, 0.08);
  border: 1px solid rgba(220, 38, 38, 0.25);
  border-radius: 6px;
  padding: 4px 8px;
  margin: 4px 0 2px;
}

.valoracion-score-input.is-over-max {
  border-color: rgba(220, 38, 38, 0.6) !important;
  background: rgba(220, 38, 38, 0.06);
  color: #991b1b;
  font-weight: 700;
}

/* ── Candidate valoración & alegaciones ── */
.candidate-valoracion-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: 10px;
}

.candidate-valoracion-group-head {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 10px;
  background: rgba(153, 0, 51, 0.05);
  border-radius: 8px;
  font-size: 0.85rem;
  font-weight: 600;
}

.candidate-valoracion-group-head .candidate-valoracion-score {
  margin-left: auto;
  color: #16a34a;
}

.candidate-valoracion-row {
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 10px 12px;
}

.candidate-valoracion-row--child {
  margin-left: 12px;
  border-left: 3px solid rgba(153, 0, 51, 0.2);
}

.candidate-valoracion-row-main {
  display: flex;
  align-items: center;
  gap: 8px;
}

.candidate-valoracion-row-title {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
}

.candidate-valoracion-code {
  font-weight: 700;
  font-size: 0.78rem;
  color: rgba(153, 0, 51, 0.85);
}

.candidate-valoracion-name {
  font-size: 0.85rem;
}

.candidate-valoracion-score {
  margin-left: auto;
  font-weight: 700;
  font-size: 0.88rem;
  white-space: nowrap;
}

.candidate-valoracion-notes {
  font-size: 0.8rem;
  color: var(--ink-soft, #555);
  margin-top: 6px;
  line-height: 1.45;
}

.candidate-valoracion-docs {
  margin-top: 7px;
}

.candidate-valoracion-docs-label {
  display: block;
  font-size: 0.74rem;
  font-weight: 700;
  color: rgba(153, 0, 51, 0.85);
  margin-bottom: 3px;
}

.candidate-valoracion-docs-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 3px;
  font-size: 0.8rem;
}

.candidate-valoracion-docs-list a {
  color: var(--fgulem-magenta, #900);
  text-decoration: underline;
}

.candidate-valoracion-notes--warning {
  color: #991b1b;
}

.candidate-valoracion-alegacion {
  margin-top: 8px;
  padding: 8px 10px;
  background: rgba(37, 99, 235, 0.04);
  border: 1px solid rgba(37, 99, 235, 0.15);
  border-radius: 8px;
}

.candidate-valoracion-alegacion-text {
  font-size: 0.82rem;
  margin-top: 4px;
  line-height: 1.45;
}

.candidate-valoracion-alegacion-docs {
  list-style: none;
  margin: 6px 0 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  font-size: 0.78rem;
}

.candidate-valoracion-alegacion-response {
  font-size: 0.82rem;
  margin-top: 6px;
  padding-top: 6px;
  border-top: 1px dashed rgba(0, 0, 0, 0.12);
}

.candidate-valoracion-row-actions {
  margin-top: 8px;
}

.candidate-alegacion-badge {
  display: inline-block;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 0.72rem;
  font-weight: 600;
}

.candidate-alegacion-badge--pendiente {
  background: rgba(180, 83, 9, 0.12);
  color: #b45309;
}

.candidate-alegacion-badge--estimada {
  background: rgba(22, 163, 74, 0.12);
  color: #166534;
}

.candidate-alegacion-badge--desestimada {
  background: rgba(220, 38, 38, 0.1);
  color: #991b1b;
}

.val-leaf-scoring {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  flex-wrap: wrap;
}

.val-score-field {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-shrink: 0;
}

.val-notes-row {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
  flex: 1;
  min-width: 200px;
}

.val-notes-row textarea {
  width: 100%;
  font-size: 0.78rem;
  padding: 5px 8px;
  min-height: 36px;
  resize: vertical;
}

.valoracion-modal-summary {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin-bottom: 10px;
  font-size: 0.84rem;
}

.valoracion-review-row {
  display: grid;
  grid-template-columns: minmax(0, 1.4fr) 120px minmax(0, 1fr);
  gap: 8px 10px;
  align-items: start;
  padding: 8px 0;
  border-bottom: 1px solid var(--line);
}

.valoracion-review-row:last-child {
  border-bottom: none;
}

.valoracion-review-title {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  font-size: 0.84rem;
}

.valoracion-review-desc {
  font-size: 0.76rem;
  margin-top: 2px;
}

.valoracion-review-score {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 4px;
}

.valoracion-score-input {
  width: 72px;
  text-align: right;
  padding: 4px 6px;
  font-size: 0.84rem;
}

.valoracion-review-max {
  font-size: 0.76rem;
  color: #888;
  white-space: nowrap;
}

.valoracion-review-notes {
  width: 100%;
  padding: 4px 8px;
  font-size: 0.8rem;
}

.valoracion-resolution-grid {
  display: grid;
  grid-template-columns: 100px minmax(0, 1fr);
  gap: 10px;
  margin: 10px 0;
}

.valoracion-resolution-grid input,
.valoracion-resolution-grid select {
  width: 100%;
  max-width: none;
}

.valoracion-tabs-nav {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: 0 0 12px;
  padding-bottom: 8px;
  border-bottom: 1px solid var(--line);
}

.valoracion-tab-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
  color: inherit;
  padding: 6px 10px;
  font-size: 0.78rem;
  cursor: pointer;
  transition: border-color 0.15s ease, background 0.15s ease;
}

.valoracion-tab-btn:hover {
  border-color: rgba(153, 0, 51, 0.35);
}

.valoracion-tab-btn.is-active {
  border-color: rgba(153, 0, 51, 0.55);
  background: rgba(153, 0, 51, 0.06);
  font-weight: 600;
}

.valoracion-tab-code {
  font-weight: 600;
}

.valoracion-tab-score {
  color: #16a34a;
  font-size: 0.74rem;
}

.valoracion-tab-doc-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  border-radius: 999px;
  background: rgba(37, 99, 235, 0.12);
  color: #1d4ed8;
  font-size: 0.68rem;
  font-weight: 600;
}

.valoracion-tabs-panels {
  min-height: 280px;
}

.valoracion-tab-panel.is-hidden {
  display: none;
}

.valoracion-tab-panel-header {
  margin-bottom: 12px;
}

.valoracion-tab-subheading {
  margin: 0 0 8px;
  font-size: 0.8rem;
  font-weight: 600;
}

.valoracion-doc-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 8px;
}

.valoracion-doc-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 8px 10px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(248, 250, 252, 0.9);
}

.valoracion-doc-main {
  display: grid;
  gap: 2px;
  font-size: 0.8rem;
}

.valoracion-doc-count,
.valoracion-doc-empty {
  margin-top: 8px;
  font-size: 0.76rem;
}

.valoracion-tab-scoring {
  margin: 14px 0;
  padding-top: 12px;
  border-top: 1px solid var(--line);
}

.valoracion-tab-score-field label {
  display: block;
  margin-bottom: 6px;
  font-size: 0.8rem;
  font-weight: 600;
}

.valoracion-score-row {
  display: flex;
  align-items: center;
  gap: 6px;
}

.valoracion-tab-notes {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
}

.valoracion-tab-notes textarea {
  width: 100%;
  min-height: 72px;
  font-size: 0.8rem;
}

.comms-compact-card {
  padding: 0;
  overflow: hidden;
}

.comms-compact-section {
  padding: 12px 14px;
  border-bottom: 1px solid var(--line);
}

.comms-compact-section:last-child {
  border-bottom: none;
}

.comms-compact-heading {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 8px;
  flex-wrap: wrap;
  margin-bottom: 8px;
  font-size: 0.88rem;
}

.comms-compact-heading .muted {
  font-size: 0.76rem;
}

.comms-message-snippet {
  font-size: 0.8rem;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.comms-reply-row.is-hidden {
  display: none;
}

.comms-reply-row td {
  background: rgba(0, 0, 0, 0.02);
  padding-top: 8px !important;
  padding-bottom: 10px !important;
}

.comms-thread-compact .message-item {
  padding: 6px 8px;
  margin-bottom: 4px;
}

.comms-thread-compact .message-item-header-compact {
  display: flex;
  gap: 8px;
  align-items: center;
  margin-bottom: 2px;
  font-size: 0.76rem;
}

.comms-reply-form-compact textarea {
  font-size: 0.84rem;
}

.comms-empty-state {
  padding: 12px 0;
  font-size: 0.84rem;
}

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

@media (max-width: 760px) {
  .valoracion-review-row {
    grid-template-columns: 1fr;
  }

  .valoracion-review-score {
    justify-content: flex-start;
  }

  .valoracion-resolution-grid {
    grid-template-columns: 1fr;
  }

  .valoracion-tab-notes {
    grid-template-columns: 1fr;
  }

  .val-notes-row {
    grid-template-columns: 1fr;
  }

  .val-leaf-scoring {
    flex-direction: column;
    gap: 8px;
  }
}

/* ── Proceso selectivo: barra de progreso (stepper) ────────────────── */
.conv-stepper {
  display: flex;
  align-items: flex-start;
  overflow-x: auto;
  padding: 6px 0 20px;
  margin-bottom: 22px;
  border-bottom: 1px solid rgba(229, 231, 235, 0.7);
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
  gap: 0;
}
.conv-stepper::-webkit-scrollbar { display: none; }

.conv-stepper-step {
  display: flex;
  flex-direction: column;
  align-items: center;
  flex: 1 1 0;
  min-width: 78px;
  padding: 0 4px;
  text-align: center;
  cursor: default;
}

.conv-stepper-dot {
  width: 30px;
  height: 30px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 0.76rem;
  font-weight: 700;
  margin-bottom: 7px;
  border: 2px solid #d1d5db;
  background: #f9fafb;
  color: #9ca3af;
  flex-shrink: 0;
  transition: background 0.15s, border-color 0.15s, box-shadow 0.15s;
}

.conv-stepper-step--done .conv-stepper-dot {
  background: #16a34a;
  border-color: #16a34a;
  color: #fff;
  font-size: 0.88rem;
}

.conv-stepper-step--active .conv-stepper-dot {
  background: var(--accent, #5f9fd3);
  border-color: var(--accent, #5f9fd3);
  color: #fff;
  box-shadow: 0 0 0 4px rgba(95, 159, 211, 0.2);
}

.conv-stepper-code {
  font-size: 0.68rem;
  font-weight: 800;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: #9ca3af;
  line-height: 1.2;
}
.conv-stepper-step--done .conv-stepper-code { color: #16a34a; }
.conv-stepper-step--active .conv-stepper-code { color: var(--accent, #5f9fd3); }

.conv-stepper-name {
  font-size: 0.66rem;
  color: #9ca3af;
  line-height: 1.25;
  max-width: 100%;
  margin-top: 3px;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.conv-stepper-step--active .conv-stepper-name {
  color: var(--ink-soft);
}

.conv-stepper-line {
  flex: 1;
  height: 2px;
  background: #e5e7eb;
  align-self: flex-start;
  margin-top: 14px;
  margin-bottom: 0;
  min-width: 14px;
}
.conv-stepper-line.is-done {
  background: #16a34a;
}

/* ── Menú de acceso a secciones (portal público) ────────────────────── */
.conv-nav {
  position: sticky;
  top: 0;
  z-index: 30;
  margin: 0 0 18px;
  max-width: 100%;
  min-width: 0;
  overflow: hidden;
  background: rgba(255, 255, 255, 0.97);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border: 1px solid rgba(229, 231, 235, 0.9);
  border-radius: 12px;
  box-shadow: 0 4px 14px rgba(15, 23, 42, 0.06);
}

.conv-nav-inner {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  padding: 7px 10px;
  max-width: 100%;
  min-width: 0;
}

.conv-nav-link {
  flex: 0 1 auto;
  padding: 7px 13px;
  border-radius: 8px;
  font-size: 0.82rem;
  font-weight: 600;
  color: var(--ink-soft, #4b5563);
  text-decoration: none;
  white-space: nowrap;
  transition: background 0.15s ease, color 0.15s ease;
}

.page-public-detail .conv-stepper {
  max-width: 100%;
  min-width: 0;
}

.conv-nav-link:hover {
  background: rgba(153, 0, 51, 0.08);
  color: var(--fgulem-magenta, #900);
}

.conv-nav-link:focus-visible {
  outline: 2px solid var(--fgulem-magenta, #900);
  outline-offset: 2px;
}

/* Compensa la barra fija al saltar a un ancla */
#info-proceso, #detalle, #requisitos, #baremo, #comision,
#fases, #publicaciones, #documentacion, #ayuda, #presentacion {
  scroll-margin-top: 78px;
}

/* ── Hero buttons compactos ─────────────────────────────────────────── */
.conv-hero-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 18px;
}

/* ── Información general: 3 columnas ───────────────────────────────── */
.page-public-detail .convocatoria-meta-card--flat {
  background: rgba(255,255,255,0.82);
  border: 1px solid rgba(229,231,235,0.95);
  border-radius: 12px;
  padding: 14px 16px;
  margin-bottom: 12px;
}
.page-public-detail .convocatoria-meta-card--flat h3 {
  margin: 0 0 12px;
  font-size: 0.95rem;
}
.page-public-detail .convocatoria-definition-list--3col {
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px 14px;
}

/* ── Requisitos en tarjetas tipo grid ──────────────────────────────── */
.conv-req-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
}

.conv-req-card {
  padding: 10px 13px;
  border-radius: 10px;
  border: 1px solid rgba(229, 231, 235, 0.9);
  background: rgba(255,255,255,0.85);
}

.convocatoria-pub-card {
  display: flex;
  flex-direction: column;
}

.convocatoria-pub-card-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  flex-wrap: wrap;
  margin-top: auto;
  padding-top: 8px;
}

.convocatoria-pub-card-foot .convocatoria-pub-meta {
  font-size: 0.78rem;
}

.conv-req-card-head {
  display: flex;
  align-items: center;
  gap: 7px;
  margin-bottom: 6px;
  flex-wrap: wrap;
}

.conv-req-card h4 {
  margin: 0 0 4px;
  font-size: 0.9rem;
  line-height: 1.3;
}

.conv-req-card p {
  margin: 0;
  font-size: 0.82rem;
  color: var(--ink-soft);
  line-height: 1.4;
}

.conv-req-badge {
  font-size: 0.68rem;
  font-weight: 700;
  padding: 2px 7px;
  border-radius: 999px;
  letter-spacing: 0.04em;
}
.conv-req-badge--req {
  background: rgba(22, 163, 74, 0.1);
  color: #166534;
}
.conv-req-badge--opt {
  background: rgba(0,0,0,0.05);
  color: #6b7280;
}

/* ── Baremo agrupado por bloque ─────────────────────────────────────── */
.baremo-group {
  margin-bottom: 16px;
}
.baremo-group:last-child {
  margin-bottom: 0;
}
.baremo-group-label {
  margin: 0 0 8px;
  font-size: 0.78rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.09em;
  color: var(--ink-soft);
  padding-bottom: 5px;
  border-bottom: 1px solid rgba(229,231,235,0.7);
}
.baremo-group-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
}
.conv-baremo-card {
  padding: 10px 13px;
  border-radius: 10px;
  border: 1px solid rgba(229, 231, 235, 0.9);
  background: rgba(255,255,255,0.85);
}
.conv-baremo-card-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 6px;
  margin-bottom: 5px;
  flex-wrap: wrap;
}
.conv-baremo-pts {
  font-size: 0.72rem;
  font-weight: 700;
  color: #2563eb;
  background: rgba(37,99,235,0.08);
  padding: 2px 7px;
  border-radius: 999px;
}
.conv-baremo-card h4 {
  margin: 0 0 4px;
  font-size: 0.88rem;
  line-height: 1.3;
}
.conv-baremo-card p {
  margin: 0;
  font-size: 0.8rem;
  color: var(--ink-soft);
  line-height: 1.4;
}

/* ── Responsive ─────────────────────────────────────────────────────── */
@media (max-width: 768px) {
  .conv-stepper-step { width: 60px; }
  .conv-stepper-name { max-width: 56px; font-size: 0.6rem; }
  .conv-nav-link {
    padding: 6px 10px;
    font-size: 0.78rem;
  }
  .conv-req-grid { grid-template-columns: 1fr; }
  .baremo-group-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .page-public-detail .convocatoria-definition-list--3col {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
@media (max-width: 500px) {
  .baremo-group-grid { grid-template-columns: 1fr; }
  .page-public-detail .convocatoria-definition-list--3col {
    grid-template-columns: 1fr;
  }
  .conv-stepper { padding-bottom: 14px; margin-bottom: 16px; }
}

/* ── Navegación móvil: la barra lateral se convierte en un panel deslizante ── */
.mobile-topbar { display: none; }
.sidebar-backdrop { display: none; }

@media (max-width: 860px) {
  .layout {
    grid-template-columns: 1fr;
  }

  .mobile-topbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 12px 18px;
    background: rgba(255, 255, 255, 0.96);
    border-bottom: 1px solid var(--line);
    position: sticky;
    top: 0;
    z-index: 45;
  }

  .mobile-topbar-brand {
    display: flex;
    align-items: center;
    gap: 10px;
    min-width: 0;
  }

  .mobile-topbar-logo {
    width: 36px;
    height: 36px;
    object-fit: contain;
    flex-shrink: 0;
  }

  .mobile-topbar-title {
    font-weight: 800;
    font-size: 1.05rem;
    color: var(--ink);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  .mobile-nav-toggle {
    flex-shrink: 0;
    width: 42px;
    height: 42px;
    border-radius: 12px;
    border: 1px solid var(--line);
    background: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    padding: 0;
  }

  .mobile-nav-toggle-bars,
  .mobile-nav-toggle-bars::before,
  .mobile-nav-toggle-bars::after {
    content: "";
    display: block;
    width: 20px;
    height: 2px;
    border-radius: 2px;
    background: var(--ink);
  }

  .mobile-nav-toggle-bars {
    position: relative;
  }

  .mobile-nav-toggle-bars::before {
    position: absolute;
    top: -6px;
    left: 0;
  }

  .mobile-nav-toggle-bars::after {
    position: absolute;
    top: 6px;
    left: 0;
  }

  .sidebar {
    position: fixed;
    top: 0;
    bottom: 0;
    left: 0;
    width: 82%;
    max-width: 300px;
    z-index: 60;
    transform: translateX(-100%);
    transition: transform 0.25s ease;
    overflow-y: auto;
    box-shadow: 12px 0 30px rgba(15, 23, 42, 0.16);
  }

  .sidebar.is-nav-open {
    transform: translateX(0);
  }

  .sidebar-backdrop {
    position: fixed;
    inset: 0;
    background: rgba(15, 23, 42, 0.45);
    z-index: 55;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.2s ease;
  }

  .sidebar-backdrop.is-nav-open {
    display: block;
    opacity: 1;
    pointer-events: auto;
  }

  .content {
    padding: 18px 16px 32px;
  }

  .topbar {
    flex-wrap: wrap;
  }

  .page-heading h1 {
    font-size: 1.35rem;
  }

  body.mobile-nav-locked {
    overflow: hidden;
  }
}

.cv-highlight-card {
  border: 1px solid rgba(194, 27, 132, 0.25);
  background: linear-gradient(135deg, rgba(194, 27, 132, 0.06), rgba(194, 27, 132, 0.015));
}

.cv-highlight-icon {
  font-size: 1.6rem;
  line-height: 1;
}

.global-ranking-total.global-ranking-total--pass {
  color: var(--fgulem-green-dark);
}

.global-ranking-total.global-ranking-total--fail {
  color: #b91c1c;
}

/* ── Catálogo de servicios (admin) ──────────────────────────────
   Ficha plegable por servicio: la página mostraba todos los formularios
   abiertos a la vez y crecía sin control con cada servicio nuevo. */
.servicio-nuevo {
  background: #fff;
  border: 1px solid rgba(229, 231, 235, 0.95);
  border-radius: 12px;
  margin-bottom: 14px;
}

.servicio-nuevo-summary,
.servicio-summary {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px 16px;
  cursor: pointer;
  list-style: none;
  font-size: 0.86rem;
}

.servicio-nuevo-summary::-webkit-details-marker,
.servicio-summary::-webkit-details-marker {
  display: none;
}

.servicio-chevron {
  flex-shrink: 0;
  width: 7px;
  height: 7px;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  color: var(--ink-soft);
  transform: rotate(-45deg);
  transition: transform 0.18s ease;
}

details[open] > .servicio-nuevo-summary .servicio-chevron,
details[open] > .servicio-summary .servicio-chevron {
  transform: rotate(45deg);
}

.servicio-nuevo-summary:hover,
.servicio-summary:hover {
  background: rgba(95, 159, 211, 0.05);
}

.servicios-card {
  padding: 0;
}

.servicios-head {
  padding: 14px 16px 10px;
  border-bottom: 1px solid rgba(229, 231, 235, 0.9);
}

.servicios-head h2 {
  margin: 0 0 2px;
  font-size: 1rem;
}

.servicios-count {
  font-weight: 400;
  font-size: 0.85rem;
}

.servicios-intro {
  margin: 0;
  font-size: 0.78rem;
  line-height: 1.45;
}

.servicios-lista {
  display: flex;
  flex-direction: column;
}

.servicio-item {
  border-bottom: 1px solid rgba(229, 231, 235, 0.8);
}

.servicio-item:last-child {
  border-bottom: none;
}

.servicio-item.is-inactivo .servicio-nombre {
  color: var(--ink-soft);
}

.servicio-nombre {
  font-weight: 600;
  flex-shrink: 0;
}

/* Resumen del convenio en una sola línea: si no cabe, se recorta. */
.servicio-convenio {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 0.76rem;
}

.servicio-form {
  padding: 4px 16px 16px;
}

.servicio-form-grid {
  display: grid;
  grid-template-columns: minmax(200px, 1fr) 1.4fr 1.4fr;
  gap: 12px;
  align-items: start;
}

.servicio-form-actions {
  display: flex;
  gap: 8px;
  margin-top: 10px;
}

@media (max-width: 900px) {
  .servicio-form-grid {
    grid-template-columns: 1fr;
  }
  .servicio-convenio {
    display: none;
  }
}

.servicio-eliminar {
  color: #b91c1c;
  border-color: rgba(220, 38, 38, 0.35);
  margin-left: auto;
}

.servicio-eliminar:hover {
  background: rgba(220, 38, 38, 0.08);
  border-color: rgba(220, 38, 38, 0.55);
}

.servicio-uso {
  margin-left: auto;
  font-size: 0.74rem;
  align-self: center;
}

/* ── Cierre de la admisión (pestaña Admisión) ── */
.admision-cierre {
  padding: 12px 16px;
  margin-bottom: 10px;
  border-left: 3px solid #a11463;
}
.admision-cierre-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
}
.admision-cierre-head .muted {
  font-size: 0.82rem;
  line-height: 1.5;
  margin-top: 3px;
  max-width: 640px;
}
/* Un botón deshabilitado que parece pulsable induce a error. */
.admision-cierre .btn[disabled] {
  opacity: 0.45;
  cursor: not-allowed;
  filter: grayscale(0.4);
}
