:root {
  color-scheme: light dark;
  font-family: system-ui, sans-serif;
  line-height: 1.5;
}
body { margin: 0; }
main { max-width: 26rem; margin: 3rem auto; padding: 0 1rem; }
form { display: flex; flex-direction: column; gap: 0.5rem; margin-top: 1rem; }
label { font-weight: 600; margin-top: 0.5rem; }
input { font: inherit; padding: 0.5rem; }
button { font: inherit; padding: 0.6rem; cursor: pointer; }
button.secundario { background: none; border: none; text-decoration: underline; }
.ayuda { margin: 0; font-size: 0.9rem; opacity: 0.8; }
.error { color: #b00020; font-weight: 600; }
@media (prefers-color-scheme: dark) { .error { color: #ff6b81; } }
.qr { display: block; margin: 1rem auto; background: #fff; padding: 0.5rem; }
code { word-break: break-all; }

/* ---------- Muro ---------- */
main:has(.muro) { max-width: 56rem; }
.muro-cabeza { display: flex; justify-content: space-between; align-items: center; gap: 1rem; }
.muro-cabeza form { margin: 0; }
.muro h2 { margin: 2rem 0 0.5rem; font-size: 1.2rem; }
.muro h3 { margin: 1rem 0 0.25rem; font-size: 1rem; }
.nivel-verde { --nivel: #1f9d55; }
.nivel-amarillo { --nivel: #e3a008; }
.nivel-rojo { --nivel: #d64545; }
.nivel-gris { --nivel: #9aa0a6; }
/* El color acompaña al texto del estado; nunca lo sustituye. */
.punto { display: inline-block; width: 0.75em; height: 0.75em; border-radius: 50%; margin-right: 0.5em; background: var(--nivel); }
.banner { border: 1px solid var(--nivel); border-left: 0.5rem solid var(--nivel); border-radius: 0.25rem; padding: 0.75rem 1rem; display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 0.5rem 1.5rem; }
.banner p { margin: 0; }
.banner-texto { font-size: 1.25rem; font-weight: 600; }
.actualizado { margin: 0.5rem 0 0; font-size: 0.9rem; opacity: 0.8; }
.aviso { border-left: 0.25rem solid #d64545; padding: 0.25rem 0.75rem; font-weight: 600; }
.componentes { list-style: none; padding: 0; margin: 0; }
.componente-cabeza { display: flex; justify-content: space-between; align-items: baseline; gap: 1rem; }
.muro .componente-cabeza h2 { margin-bottom: 0; }
.estado { margin: 0; white-space: nowrap; font-weight: 600; }
.leyenda { margin: 0; font-size: 0.9rem; opacity: 0.8; }
.barra { display: flex; gap: 2px; height: 2.25rem; margin-top: 0.5rem; }
@media (max-width: 40rem) { .barra { gap: 1px; } }
.dia { flex: 1; min-width: 0; border-radius: 1px; background: var(--nivel); }
.barra-pie { display: flex; justify-content: space-between; margin: 0.25rem 0 0; font-size: 0.85rem; opacity: 0.8; }
.detalle { display: grid; grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr)); gap: 0.25rem 1.5rem; margin: 0; }
.detalle div { display: flex; justify-content: space-between; gap: 1rem; border-bottom: 1px solid rgb(128 128 128 / 0.3); padding: 0.25rem 0; }
.detalle dd { margin: 0; font-variant-numeric: tabular-nums; font-weight: 600; }
.incidentes { padding-left: 0; list-style: none; }
.incidentes li { margin: 0.25rem 0; }
.tabla { overflow-x: auto; }
.tabla table { border-collapse: collapse; width: 100%; font-size: 0.9rem; }
.tabla th, .tabla td { text-align: left; padding: 0.35rem 0.5rem; border-bottom: 1px solid rgb(128 128 128 / 0.3); white-space: nowrap; }
.tabla td:nth-child(5) { white-space: normal; }

/* ---------- Administración ---------- */
main:has(.admin) { max-width: 40rem; }
.admin section { border-top: 1px solid rgb(128 128 128 / 0.3); margin-top: 1.5rem; }
.admin fieldset { display: flex; flex-direction: column; gap: 0.25rem; }
