/* La barra superior de Atlas. La MISMA en el mapa y en los documentos.
 *
 * Hoja aparte de `styles.css` y de `ficha.css` porque es lo único que las dos
 * comparten. Antes no compartían nada: el mapa tenía una barra de cuatro zonas
 * y cada página servida por `ficha.js` tenía un `<header class="fh">` con un
 * "‹ Atlas" y un botón. Duplicar 150 líneas en dos hojas que nadie edita al
 * mismo tiempo es la forma segura de que en seis meses sean dos barras
 * distintas, así que vive acá y las dos la enlazan.
 *
 * NO trae los tokens (`--bg`, `--acento`, …): los declaran las dos hojas que la
 * hospedan, y las propiedades personalizadas se resuelven al calcular el valor,
 * no al parsear — el orden de los <link> da igual.
 *
 * La gramática de la barra son CUATRO zonas que se leen de izquierda a derecha
 * como una frase que va de lo que no cambia a lo que cambia todo el tiempo:
 *
 *   IDENTIDAD   quién habla       ·  fija, nunca se opera
 *   ENCUADRE    qué estás mirando ·  DOS MODOS, ver abajo
 *   ACCIÓN      el buscador       ·  lo único que se escribe
 *   ESTADO      pulso y sesión    ·  se consulta, no se opera
 *
 * El encuadre es la zona que cambia según la página, y no es un capricho:
 *
 *   En el MAPA el encuadre se OPERA     → país + ventana de tiempo, controles
 *                                          que mutan lo que se ve.
 *   En un DOCUMENTO el encuadre se DECLARA → las migas, que dicen dónde estás.
 *
 * De ahí sale que la ventana de tiempo no aparezca fuera del mapa. No es una
 * excepción: es que un control sin objeto no es un control. La ventana define
 * sobre qué período se resume cada activo del catastro, y una ficha no tiene
 * catastro que resumir — nunca leyó ese valor.
 *
 * Las zonas se separan por PROXIMIDAD y nada más: 9-12 px adentro de cada
 * grupo contra 26 entre grupos. Sin filetes ni separadores verticales — esta
 * interfaz no tiene una sola línea vertical en ninguna parte. */

/* La clase y no `body > header`. El selector de elemento existía para que las
   filas de familia del panel del catastro —que también son `<header>`— no
   heredaran el alto, el filete y el `z-index: 1000` de la barra. Con una clase
   propia el problema no se puede volver a dar, y además la barra deja de tener
   que ser hija directa de `<body>`.

   `.cabecera` y NO `.barra`: `.barra` ya existe y es el marcador de puentes y
   túneles en el mapa (`styles.css`), un `<span>` absoluto de 18×8 px. Con ese
   nombre las dos cosas se pisaban en las dos direcciones —el encabezado medía
   8 px de alto y cada puente del mapa heredaba `position: sticky` y un filete
   inferior—, y como `styles.css` se carga después, el síntoma aparecía en un
   solo sentido y era invisible en la revisión. Es la misma trampa que ya
   documenta `.ms-barra` unas líneas más abajo. */
.cabecera {
  height: 54px; display: flex; align-items: center; gap: 26px; padding: 0 20px;
  border-bottom: 1px solid var(--line); background: var(--panel);
  /* `sticky` hace dos cosas de una: en un documento la barra acompaña el scroll
     —que es lo que "persistente" quiere decir cuando la página se lee— y en las
     dos páginas sirve de ancla a todo lo que cuelga de ella: el menú Explorar,
     los resultados de búsqueda, la tarjeta del autor y la ventana de tiempo en
     móvil. En el mapa no hay scroll de página, así que ahí es `relative` con
     otro nombre. */
  position: sticky; top: 0;
  /* Pasa POR ENCIMA del mapa. Sus hijos flotantes cuelgan hacia abajo y caen
     sobre él, y los controles del mapa llegan a z-index 700: sin esto quedaban
     tapados por botones que están 500 px más abajo. Queda debajo de la capa de
     acceso (2000), que es un diálogo modal y debe cubrirlo todo. */
  z-index: 1000;
}

/* --- 1 · IDENTIDAD -------------------------------------------------------
   La firma del autor va DENTRO del grupo de la marca, no como un ítem más de
   la barra: es "Atlas, de Rob", no un control. */
.barra-marca { flex: none; display: flex; align-items: center; gap: 9px; }
/* El aspecto lo carga la CLASE, no el tag, y eso importa: en el mapa la marca
   es el `<h1>` de la página —no hay otro título— pero en una ficha el `<h1>` es
   el nombre del activo. Ahí la marca es un `<a>` al mapa. Dos etiquetas, una
   sola apariencia: el tag lleva la semántica y la clase lleva la forma. */
.marca {
  font-size: 15px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase;
  display: inline-flex; align-items: baseline; gap: 11px; flex: none;
  color: var(--ink); text-decoration: none;
}
/* La `s` en acento. Con clase propia y no `.marca span`: el subtítulo también
   es un span hijo de la marca y con el selector de tag se pintaba verde. */
.marca .acento { color: var(--acento); }
/* Solo la versión enlazada reacciona: en el mapa la marca es un título y un
   título que se ilumina al pasar por encima promete una navegación que no hay. */
a.marca { transition: opacity .12s; }
a.marca:hover { opacity: .74; }
.subtitulo { font-size: 10px; font-weight: 500; letter-spacing: .06em;
  text-transform: none; color: var(--ink-3); }

/* --- 2 · ENCUADRE DECLARADO: las migas -----------------------------------
   La jerarquía del sitio, visible. Existía desde siempre como `BreadcrumbList`
   en el JSON-LD de cuatro páginas —declarada para Google, invisible para las
   personas— y ahora sale del mismo `migas()` que emite ese JSON-LD: las dos
   salidas no pueden divergir porque son la misma lista.

   La raíz de la cadena NO se repite acá: es la marca, que ya está a la
   izquierda y ya es el enlace al mapa. Un "Atlas › Atlas › Chile" es lo que
   pasa cuando las migas se pegan al lado de un logo sin pensarlo.

   `flex: 1 1 auto` con `min-width: 0`: la cadena se come el espacio que dejó la
   ventana de tiempo, y cuando no alcanza el que cede es el ÚLTIMO eslabón —el
   nombre largo del activo— y no los de arriba, que son los que sirven para
   volver. */
.migas { flex: 1 1 auto; min-width: 0; display: flex; align-items: center; gap: 8px;
  font: 500 12.5px "Archivo", sans-serif; color: var(--ink-2); overflow: hidden; }
.migas a { color: var(--ink-2); text-decoration: none; white-space: nowrap;
  border-radius: 4px; transition: color .12s; }
.migas a:hover { color: var(--acento); }
.migas .sep { color: var(--ink-3); font-size: 12px; flex: none; }
/* Dónde estás parado: el único eslabón que no es enlace, en tinta plena. */
.migas .aqui { color: var(--ink); font-weight: 600; min-width: 0;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* El rombo de la familia, el mismo del mapa y de la leyenda. Es lo que ata la
   miga a la capa que le corresponde allá: la minería en naranja acá es lo mismo
   que el naranja de allá, y sin él la cadena sería texto plano que podría
   hablar de cualquier cosa.

   Nombre propio, como `.ms-barra` y `.ms-hueca`: `.rombo` a secas es el
   marcador del mapa y es `position: absolute`. Acá no se nota porque una ficha
   no carga `styles.css`, y esa es justamente la razón para no dejarlo — el día
   que la barra llegue a una página que sí la cargue, el rombo se va a la
   esquina y nadie va a saber por qué. */
.migas .miga-rombo { width: 7px; height: 7px; flex: none; transform: rotate(45deg);
  border-radius: 1px; margin-right: 3px; display: inline-block; }
/* Puentes y túneles se dibujan como en la leyenda: un guion, no un rombo. */
.migas .miga-rombo.ms-barra { width: 11px; height: 4px; border-radius: 1px; transform: none; }
.migas .miga-rombo.ms-hueca { background: transparent !important; border: 1.5px solid currentColor; }

/* --- 4 · ESTADO ----------------------------------------------------------
   Contra el borde derecho, que es donde vive el estado en cualquier panel de
   instrumentos. Adentro va de lo del sistema a lo de la persona.

   `.barra-estado` y no `.estado`: `.estado` ya existe en `ficha.css` y es el
   bloque de clima y sismo del activo —una columna con filete de acento a la
   izquierda—. Con el nombre a secas, y como `ficha.css` se carga después, la
   zona de la barra se volvía una columna de 75 px con un filete verde adentro
   de un encabezado de 54. Va con el prefijo de las otras dos zonas
   (`.barra-marca`, `.barra-encuadre`), que es donde debió estar siempre. */
.barra-estado { font-size: 12px; color: var(--ink-2); margin-left: auto; display: flex; gap: 14px;
  align-items: center; white-space: nowrap; }

/* Sin sesión, "Entrar" vive acá, a la vista y al final de todo: es la llamada a
   la acción y no se esconde en un menú. Con sesión, la cuenta pasa al menú
   Explorar y acá no queda nada. */
.cuenta { display: flex; align-items: center; }
.entrar {
  background: transparent; color: var(--acento); border: 1px solid var(--acento);
  border-radius: 5px; padding: 6px 14px; font: 600 12px "Archivo", sans-serif; cursor: pointer;
  text-decoration: none; display: inline-flex; align-items: center;
}
.entrar:hover { background: rgba(53,208,165,0.12); }

/* --- 3-ter · El chip de cuenta -------------------------------------------
   Avatar y @usuario contra el borde derecho. Antes acá no había nada con
   sesión abierta —la cuenta vivía adentro del menú Explorar— y esa era
   exactamente la queja: la pantalla donde se decide qué correos llegan estaba
   a dos clics y sin peso visual.

   Reusa `.ms-item` para los enlaces del panel: es el mismo tipo de ítem en el
   mismo tipo de desplegable, y tener dos aspectos para lo mismo en la misma
   barra es cómo empiezan a divergir. */
.chip-cuenta { position: relative; flex: none; }
/* El relleno es SIMÉTRICO por defecto: sin @usuario adentro no hay nada que
   compensar y el chip tiene que ser un círculo. Con el relleno asimétrico de
   siempre quedaba una píldora coja de 42×34 con la cara pegada a la izquierda,
   que en hover se leía como un interruptor y no como una persona. */
.chip-cuenta > summary {
  display: flex; align-items: center; gap: 8px; cursor: pointer; list-style: none;
  height: 34px; padding: 3px; border-radius: 999px;
  border: 1px solid var(--line); background: var(--bg);
  transition: border-color .12s;
}
/* El aire de la derecha aparece solo cuando hay texto que separar del borde. */
.chip-cuenta.con-arroba > summary { padding-right: 11px; }
.chip-cuenta > summary::-webkit-details-marker { display: none; }
.chip-cuenta > summary:hover, .chip-cuenta[open] > summary { border-color: var(--acento); }
/* El avatar es el mismo elemento con foto o con iniciales, así que las dos
   variantes comparten tamaño y forma: si no, el chip cambia de ancho el día
   que alguien sube una foto. */
.ch-av {
  width: 26px; height: 26px; border-radius: 999px; flex: none; object-fit: cover;
  display: flex; align-items: center; justify-content: center;
  font: 700 10.5px "Archivo", sans-serif; color: #08110d;
  background: linear-gradient(140deg, var(--acento), #7fd8f0);
}
.ch-anon { background: var(--panel-2); color: var(--ink-2); border: 1px solid var(--line); }
.ch-anon svg { width: 15px; height: 15px; }
.ch-arroba { font: 500 12px "IBM Plex Mono", monospace; color: var(--ink-2); }
.chip-cuenta[open] .ch-arroba { color: var(--ink); }
.ch-caja {
  position: absolute; right: 0; top: calc(100% + 7px); z-index: 1000; width: 262px;
  background: var(--panel-2); border: 1px solid var(--line); border-radius: 11px;
  padding: 8px; box-shadow: 0 10px 30px rgba(0,0,0,.5);
}
.ch-id { display: flex; gap: 10px; align-items: center; padding: 6px 8px 12px;
  border-bottom: 1px solid var(--line); margin-bottom: 7px; }
.ch-id > div { min-width: 0; }
.ch-id b { display: block; font-size: 13px; color: var(--ink); }
/* `> div >` y no `.ch-id span` a secas: el avatar TAMBIÉN es un <span> adentro
   de `.ch-id`, así que la regla suelta le cambiaba el `display: flex` por
   `block` y la fuente por mono de 11 px. El resultado era la inicial saliéndose
   del círculo, arriba y a la izquierda, en toda cuenta sin foto. */
.ch-id > div > span {
  display: block; font: 400 11px "IBM Plex Mono", monospace; color: var(--ink-3);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

@media (max-width: 720px) {
  /* En 375 px el arroba y "Explorar" no caben juntos. Se va el arroba y queda
     la cara, que es lo que hace de ancla. */
  .ch-arroba { display: none; }
  .chip-cuenta.con-arroba > summary { padding-right: 3px; }
}

/* --- 3-bis · El índice del sitio -----------------------------------------
   El panel no es una lista de enlaces: son tres grupos —la persona, el sitio y
   el ranking— y el último es el catastro visto de otra forma, familia por
   familia, con el mismo rombo de color que usa el mapa. */
.menu-sitio { position: relative; flex: none; }
/* `>`: el ranking, adentro del panel, es otro <details> con su propio summary
   y no tiene que heredar el cuerpo del botón de la barra. */
.menu-sitio > summary {
  display: flex; align-items: center; gap: 7px; cursor: pointer; list-style: none;
  height: 34px; padding: 0 11px; border-radius: 8px;
  border: 1px solid var(--line); background: var(--bg); color: var(--ink-2);
  font: 500 12px "Archivo", sans-serif; white-space: nowrap; transition: color .12s, border-color .12s;
}
.menu-sitio > summary::-webkit-details-marker { display: none; }
.menu-sitio > summary svg { width: 16px; height: 16px; flex: none; }
.menu-sitio > summary:hover, .menu-sitio[open] > summary { border-color: var(--acento); color: var(--ink); }
.menu-sitio[open] > summary svg { color: var(--acento); }
/* Sesión abierta: se enciende el SÍMBOLO, no un punto al lado. Un punto es la
   convención de "hay algo nuevo que mirar", y acá no hay nada que mirar: solo
   dice que la sesión existe, cosa que el propio menú ya dice al abrirse.
   Va después de la regla de `[open]` para que abrir el menú no lo apague. */
.menu-sitio.con-sesion > summary svg { color: var(--acento); }
/* Anclado a la DERECHA del botón, que vive contra el borde derecho de la barra:
   el panel cuelga hacia adentro y nunca se sale de la pantalla. */
.ms-caja {
  position: absolute; right: 0; top: calc(100% + 7px); z-index: 1000; width: 356px;
  background: var(--panel-2); border: 1px solid var(--line); border-radius: 11px;
  padding: 8px; box-shadow: 0 10px 30px rgba(0,0,0,.5);
  animation: aparece .18s ease-out;
}
.ms-grupo + .ms-grupo { border-top: 1px solid var(--line); margin-top: 6px; padding-top: 6px; }
/* Cada ítem: su símbolo enmarcado en un cuadrado —la misma gramática del botón
   de Explorar y de los controles del mapa— y el nombre a la derecha. Nada más:
   sin descripción, la página explica qué es al llegar. */
.ms-item {
  display: flex; align-items: center; gap: 10px; padding: 5px 7px; border-radius: 7px;
  color: var(--ink); text-decoration: none; font: 600 13px "Archivo", sans-serif;
}
.ms-item:hover { background: rgba(255,255,255,.06); }
.ms-ico {
  display: flex; align-items: center; justify-content: center; flex: none;
  width: 28px; height: 28px; border-radius: 7px;
  border: 1px solid var(--line); background: var(--bg); color: var(--ink-2);
  transition: color .12s, border-color .12s;
}
.ms-ico svg { width: 14px; height: 14px; }
.ms-item:hover .ms-ico { color: var(--acento); border-color: var(--acento); }
.ms-item.salir { color: var(--ink-2); }
/* Dónde estás, dicho por el menú. Es la otra mitad de la jerarquía: las migas
   dicen la posición vertical —de qué cuelga esta página— y esto dice la
   horizontal, cuál de las puertas del índice es la que ya cruzaste. Sin esto,
   el menú de una página se ve idéntico al de cualquier otra. */
.ms-item[aria-current="page"] { color: var(--acento); background: rgba(53,208,165,.08); }
.ms-item[aria-current="page"] .ms-ico { color: var(--acento); border-color: var(--acento); }
/* Y lo mismo una familia del ranking, que también es un destino del índice. */
.ms-fam a[aria-current="page"] { color: var(--acento); background: rgba(53,208,165,.08); }
/* Un <button> nativo trae borde biselado, fondo gris y ancho de su texto. Esto
   estaba escrito como `.ms-cuenta button`, amarrado al GRUPO que lo contenía;
   cuando "Cerrar sesión" se mudó al chip de la cuenta (05-09-2026) se quedó sin
   reset y volvió a salir con el cromo del sistema operativo adentro de un menú
   oscuro, a 139 px en una caja de 244. Va en el ÍTEM, que es de quien es la
   regla: un `.ms-item` se ve igual sea <a> o <button> y esté donde esté. */
button.ms-item { width: 100%; text-align: left; background: none; border: 0; cursor: pointer;
  font: 600 13px "Archivo", sans-serif; }
.ms-grupo[hidden] { display: none; }
/* El ranking, plegado: un details adentro del details. La flecha gira al abrir. */
.ms-rk > summary { list-style: none; cursor: pointer; }
.ms-rk > summary::-webkit-details-marker { display: none; }
.ms-rk > summary::after {
  content: "›"; margin-left: auto; padding-right: 4px; color: var(--ink-3); font-size: 15px; line-height: 1;
  transform: rotate(90deg); transition: transform .15s;
}
.ms-rk[open] > summary::after { transform: rotate(-90deg); }
.ms-todos { display: block; padding: 6px 9px 4px; font: 500 12px "Archivo", sans-serif; color: var(--acento); text-decoration: none; }
.ms-todos:hover { text-decoration: underline; }
.ms-fam { list-style: none; display: grid; grid-template-columns: 1fr 1fr; gap: 1px 6px; padding: 4px 0 2px 4px; }
.ms-fam a {
  display: flex; align-items: center; gap: 9px; padding: 6px 9px; border-radius: 6px;
  color: var(--ink-2); text-decoration: none; font-size: 12.5px; white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis; transition: color .12s;
}
.ms-fam a:hover { background: rgba(255,255,255,.06); color: var(--ink); }
.ms-fam i { width: 9px; height: 9px; border-radius: 2px; transform: rotate(45deg); flex: none; }
/* La barra (puente, túnel) se dibuja como en la leyenda: un guion, no un rombo.
   Con nombre propio: `.barra` y `.hueca` a secas son el marcador del mapa, que
   es absoluto, y con esas clases el guion se iba a la esquina del panel. */
.ms-fam i.ms-barra { width: 12px; height: 4px; border-radius: 1px; transform: none; }
.ms-fam i.ms-hueca { background: transparent !important; border: 1.5px solid currentColor; }

/* La usan el panel del menú y —en el mapa— el cartel de novedad del stream.
   Vive acá porque acá está el primero de los dos y esta hoja la cargan las dos
   páginas; `styles.css` la hereda. */
@keyframes aparece { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .ms-caja { animation: none; } }

/* Anchos medianos: lo primero que cede es la letra chica —el subtítulo de la
   marca—, que es rótulo y no dato. El corte es el mismo 1180 en que el panel
   lateral del mapa se angosta. */
@media (max-width: 1180px) {
  .subtitulo { display: none; }
}

/* --- Teléfono ------------------------------------------------------------
   La barra tiene que caber en una fila y no apilarse nunca: es 54 px de alto
   fijo y debajo hay un mapa a pantalla completa o un documento que se lee.

   Las migas se recortan al PADRE INMEDIATO y nada más. Eso conserva el gesto
   que la ficha ya tenía —volver con un toque arriba a la izquierda, donde
   estaba el "‹ Atlas"— y agrega la marca, que va a la raíz. Dos destinos donde
   antes había uno, sin una fila nueva. */
@media (max-width: 860px) {
  .cabecera { gap: 12px; padding: 0 14px; }
  .barra-estado { gap: 10px; }
  /* El índice queda como hamburguesa: el rótulo se va y queda el símbolo, que
     es lo que se toca. El panel cae BAJO la barra, arriba y no abajo, porque el
     bottom-sheet del catastro ya ocupa el borde inferior y dos cosas que se
     despliegan desde el mismo borde se pisan. */
  .menu-sitio > summary { width: 34px; padding: 0; justify-content: center; }
  .menu-sitio > summary svg { width: 18px; height: 18px; }
  .ms-txt { display: none; }
  /* `static` para que la caja se ancle a la BARRA y no al botón: así cruza la
     pantalla de lado a lado en vez de colgar de 34 px. */
  .menu-sitio { position: static; }
  .ms-caja { left: 12px; right: 12px; width: auto; top: calc(100% + 8px); max-height: 70vh; overflow-y: auto; }
  .ms-fam a { font-size: 14px; padding: 8px 9px; }
  .ms-item { font-size: 14px; padding: 7px 7px; }
  .ms-ico { width: 32px; height: 32px; } .ms-ico svg { width: 16px; height: 16px; }
  .entrar { padding: 6px 11px; }
  /* De la cadena queda UN eslabón: el padre inmediato. En 375 px —un iPhone—
     una cadena de cuatro no cabe, y recortarla con elipsis la dejaría ilegible
     en vez de corta. El JSON-LD sigue completo: se recorta lo que se DIBUJA, no
     lo que se declara.

     El que queda es el PADRE y no la página actual, que es lo que se recorta
     por su cuenta si uno se descuida. La página actual ya está dicha en el h1,
     dos líneas más abajo y en cuerpo 23; repetirla en la barra gasta el único
     eslabón que cabe para no decir nada nuevo. El padre, en cambio, es la
     única forma de subir un nivel — y queda arriba a la izquierda, que es
     donde estaba el "‹ Atlas" que esta barra reemplaza.

     Cuando NO hay padre —una página que cuelga directo de la raíz, como
     Fuentes— no hay nada que ocultar y se queda la actual: el `~` solo alcanza
     a lo que viene DESPUÉS de un padre que exista. */
  .migas .paso:not(.padre) { display: none; }
  .migas .padre ~ .sep, .migas .padre ~ .aqui { display: none; }
  .migas { gap: 6px; }
}

/* --- La línea de estado del correo ----------------------------------------
   Vive acá por la misma razón que la barra: desde el 04-09-2026 es literalmente
   el mismo elemento en las dos familias de páginas —al pie de la pestaña de
   seguimiento del mapa, y al pie de /seguimiento—, y las dos hojas que la
   hospedan cargan esta.

   Fue un <details> con un formulario adentro hasta esa fecha. Ahora es un enlace
   y nada más: el mapa mira, la lista revisa, la cuenta decide. El texto lo
   escribe el servidor (`estadoDeAvisos` en logica.js), así que las dos
   superficies dicen lo mismo sin tener que acordarse de nada.

   **Dos líneas y no una** (Rob, 04-09-2026): en una sola, "sismo 5,0 y aviso
   oficial" decía el estado sin decir de QUÉ era el estado, y se leía como una
   clave. El rótulo nombra la cosa —y la nombra igual que el <h2> de /cuenta, que
   es adonde lleva—, y la frase de abajo la completa. De paso el bloque pasa de
   36 a 48 px de alto, que es un objetivo táctil decente para lo que ahora es el
   único elemento tocable del pie. */
.pref-aviso {
  display: flex; align-items: center; gap: 9px;
  margin: 14px 0 8px; padding: 9px 12px;
  background: var(--panel-2); border: 1px solid var(--line); border-radius: 9px;
  text-decoration: none;
}
.pref-aviso:hover { border-color: var(--ink-3); }
/* La banda "sin cuenta" es el mismo componente en un <button>: mismo lugar,
   misma forma, distinto contenido. El reset es porque un botón no hereda ni la
   fuente ni la alineación, y sin `width` se encogería al ancho de su texto. */
button.pref-aviso { width: 100%; font: inherit; text-align: left; cursor: pointer; }
/* Sin cuenta no llega nada, así que el punto se queda hueco: es la misma regla
   de siempre —verde solo si algo te llega— y acá nunca se cumple. */
.pref-aviso.sin-cuenta .pa-rotulo { color: var(--ink); }
.pref-aviso.sin-cuenta:hover .pa-rotulo { color: var(--acento); }
.pref-aviso:hover .pa-rotulo { color: var(--acento); }
/* La columna de texto es la que se encoge: el punto y la acción son de ancho
   fijo, así que `min-width: 0` acá es lo que deja funcionar a la elipsis. */
.pa-col { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.pa-rotulo { font-size: 12.5px; font-weight: 500; color: var(--ink-2); }
/* El punto es el estado de un vistazo: verde si algo te llega —CUALQUIERA de las
   tres clases—, hueco si no llega nada. Es el mismo recurso del punto de
   conexión del header. */
.pa-punto { width: 7px; height: 7px; border-radius: 50%; flex: none;
  background: var(--ink-3); }
.pref-aviso.on .pa-punto { background: var(--acento); }
.pa-resumen { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  font-size: 11.5px; color: var(--ink-3); }
.pa-abrir { margin-left: auto; flex: none; color: var(--acento); font-size: 11.5px; }

/* --- Reportar: el gesto y la hoja ------------------------------------------
   Van acá y no en `styles.css` ni en `ficha.css` por lo mismo que la barra: es
   literalmente el mismo elemento en el mapa y en un documento, y duplicarlo en
   dos hojas es la forma segura de que en seis meses sean dos formularios.

   La hoja es un `<dialog>` anclado a la página y NO un formulario dentro del
   globo de Leaflet. Con tres controles y un textarea, un globo en 375 px queda
   inusable — y móvil es restricción de primera clase, no un ajuste posterior.

   **La estética no se inventa acá.** Atlas ya tiene una: panel de instrumentos
   casi negro, jerarquía por rótulo micro en versalitas, hairlines en vez de
   cajas, y UNA sola nota de color que se reserva para lo que se puede accionar.
   Una hoja con su propio gusto se habría leído como un formulario de otro sitio
   pegado encima del mapa. Así que esto reusa las mismas piezas: el rótulo de
   `.bloque h3`, el estado seleccionado de `[aria-current]`, los tokens de
   siempre. Lo único nuevo es la profundidad, porque es lo único que la hoja
   tiene que decir y el resto de la interfaz no: esto está POR ENCIMA. */
.rp-gesto {
  display: inline-flex; align-items: center; gap: 5px;
  margin-top: 6px; padding: 4px 9px;
  background: transparent; border: 1px solid var(--line); border-radius: 999px;
  color: var(--ink-3); font: 500 11px "Archivo", sans-serif; cursor: pointer;
  transition: color .15s ease, border-color .15s ease;
}
.rp-gesto:hover { color: var(--acento); border-color: var(--acento); }
.rp-gesto:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; }
.rp-gesto svg { flex: none; opacity: .85; }
/* Al pie de la columna de la ficha: separado del último bloque y alineado a la
   izquierda con el resto de la columna, sin caja propia — es una salida, no una
   sección más de la página. */
.rp-linea { margin: 2px 0 4px; }

.rp-hoja {
  border: 0; padding: 0; background: transparent;
  color: var(--ink); max-width: 100%; max-height: 100%;
  /* `margin: auto` es lo que centra un <dialog> abierto con showModal(), y las
     dos hojas que hospedan esto abren con `* { margin: 0 }` — o sea que el
     centrado por defecto del navegador llega pisado y la hoja se va a la
     esquina superior izquierda. Hay que declararlo. */
  margin: auto;
}
/* El fondo no se apaga a secas: se desenfoca. Detrás hay un mapa o una ficha
   llena de cifras, y dejarlas legibles pero fuera de foco es lo que dice "esto
   sigue ahí, vuelves en un segundo" en vez de "cambiaste de pantalla". */
.rp-hoja::backdrop {
  background: rgba(6, 8, 10, .66);
  backdrop-filter: blur(3px);
  animation: rp-fundido .18s ease-out;
}
.rp-caja {
  width: min(452px, calc(100vw - 24px));
  max-height: calc(100vh - 48px); overflow-y: auto;
  padding: 20px 20px 18px;
  border: 1px solid var(--line); border-radius: 14px;
  background: var(--panel); font-family: "Archivo", sans-serif;
  /* Sombra larga y difusa, más una hairline clara arriba: es lo que separa un
     panel elevado de un panel más del fondo. Sin la línea de arriba, sobre un
     fondo casi negro la caja se lee plana por mucha sombra que tenga. */
  box-shadow: 0 24px 64px rgba(0, 0, 0, .6), 0 2px 8px rgba(0, 0, 0, .4),
    inset 0 1px 0 rgba(255, 255, 255, .045);
  animation: rp-sube .2s cubic-bezier(.2, .8, .3, 1);
}
@keyframes rp-fundido { from { opacity: 0; } }
@keyframes rp-sube { from { opacity: 0; transform: translateY(10px) scale(.985); } }

/* La cabecera con la MISMA gramática que el encabezado de una ficha: el rótulo
   chico dice de qué clase de cosa se habla, y debajo va el nombre propio. Al
   revés —"Reportar algo" grande y el activo en gris abajo— el título hablaba de
   nosotros y no del objeto, que es de lo que la persona quiere hablar. */
.rp-cab { margin-bottom: 16px; padding-bottom: 12px; border-bottom: 1px solid var(--line); }
.rp-tit {
  font-size: 11px; letter-spacing: .14em; text-transform: uppercase;
  color: var(--ink-3); font-weight: 600;
}
.rp-obj {
  margin-top: 3px;
  font: 700 19px "Archivo", sans-serif; line-height: 1.2; letter-spacing: -.01em;
  color: var(--ink);
}

.rp-campo { display: block; border: 0; margin-bottom: 16px; }
/* El rótulo de campo es el mismo de `.bloque h3` en la ficha, literal. */
.rp-campo legend, .rp-rot {
  display: block; margin-bottom: 8px;
  font: 600 11px "Archivo", sans-serif; letter-spacing: .08em; text-transform: uppercase;
  color: var(--ink-2);
}
.rp-rot i { font-style: normal; text-transform: none; letter-spacing: 0; color: var(--ink-3); }

/* Las partes van en fichas y no en una columna de casillas del navegador. Dos
   motivos y los dos pesan: la casilla nativa es el único control de toda esta
   interfaz que no se parece al resto del producto —que en todas partes elige
   con fichas: los componentes, las pestañas de la historia—, y en un teléfono
   una casilla de 13 px es un blanco que se falla. La ficha mide 30 y pico. */
.rp-partes { display: flex; flex-wrap: wrap; gap: 6px; }
.rp-op {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 7px 11px 7px 9px; border-radius: 999px;
  border: 1px solid var(--line); background: var(--panel-2);
  color: var(--ink-2); font-size: 13px; line-height: 1.25; cursor: pointer;
  transition: color .15s ease, border-color .15s ease, background-color .15s ease;
}
/* La casilla real se queda: es la que hace que esto sea un formulario y no un
   dibujo. Se esconde a la vista pero NO del teclado ni del lector de pantalla. */
.rp-op input {
  position: absolute; width: 1px; height: 1px;
  opacity: 0; margin: 0; pointer-events: none;
}
/* El punto que se llena, que es el idiomatismo que el producto ya usa para
   decir "esto está encendido" (ver `.punto` del panel y `.pa-punto`). */
.rp-op span::before {
  content: ""; display: inline-block; vertical-align: -1px;
  width: 7px; height: 7px; margin-right: 7px; border-radius: 50%;
  border: 1px solid var(--ink-3); background: transparent;
  transition: background-color .15s ease, border-color .15s ease;
}
.rp-op:hover { color: var(--ink); border-color: var(--ink-3); }
/* `.on` la pone el JS y `:has()` cubre lo mismo por CSS. Son dos caminos al
   mismo estado a propósito: si `:has()` faltara, una ficha marcada se vería
   idéntica a una sin marcar, que es la peor forma de fallar en un formulario. */
.rp-op.on, .rp-op:has(:checked) {
  color: var(--acento); border-color: var(--acento);
  background: rgba(53, 208, 165, .08);
}
.rp-op.on span::before, .rp-op:has(:checked) span::before {
  background: var(--acento); border-color: var(--acento);
}
.rp-op:has(:focus-visible) { outline: 2px solid var(--acento); outline-offset: 2px; }

/* 16px o iOS Safari hace auto-zoom al enfocar y no lo revierte. Vale para los
   tres, no solo para el textarea. */
.rp-sel, .rp-texto, .rp-input {
  width: 100%; padding: 10px 12px;
  background: var(--bg); color: var(--ink);
  border: 1px solid var(--line); border-radius: 9px;
  font: 400 16px "Archivo", sans-serif;
  transition: border-color .15s ease;
}
.rp-sel:hover, .rp-texto:hover, .rp-input:hover { border-color: var(--ink-3); }
.rp-texto { resize: vertical; min-height: 88px; line-height: 1.5; }
.rp-sel::placeholder, .rp-texto::placeholder, .rp-input::placeholder { color: var(--ink-3); }
.rp-sel:focus, .rp-texto:focus, .rp-input:focus {
  outline: none; border-color: var(--acento);
  box-shadow: 0 0 0 3px rgba(53, 208, 165, .16);
}
/* La cuenta de caracteres, en mono como toda cifra del producto. Existe para no
   tener que retar a nadie: el mínimo se ve venir en vez de aparecer como error
   después de apretar Enviar. */
.rp-cuenta {
  display: block; margin-top: 6px; text-align: right;
  font: 400 11px "IBM Plex Mono", ui-monospace, monospace; color: var(--ink-3);
}
.rp-cuenta.listo { color: var(--acento); }

.rp-error {
  margin-bottom: 12px; padding: 9px 11px;
  border-left: 2px solid var(--critica); border-radius: 0 6px 6px 0;
  background: rgba(255, 77, 77, .07);
  color: var(--critica); font-size: 13px;
}
.rp-cargando { padding: 40px 24px; color: var(--ink-3); text-align: center; font-size: 13px; }

.rp-pie {
  display: flex; justify-content: flex-end; gap: 8px;
  list-style: none; margin: 0; padding: 0;
}
.rp-pri, .rp-sec {
  padding: 10px 18px; border-radius: 9px; cursor: pointer;
  font: 600 14px "Archivo", sans-serif;
  transition: background-color .15s ease, color .15s ease, border-color .15s ease, transform .1s ease;
}
.rp-pri { background: var(--acento); color: #06231c; border: 1px solid var(--acento); }
/* El hover del primario no existía, y sobre un mentol saturado no basta con
   oscurecer: se aclara y se levanta un pelo, que es lo que hace que el cambio se
   vea en una pantalla de faena a pleno sol. */
.rp-pri:hover:not(:disabled) {
  background: #4ee7bc; border-color: #4ee7bc;
  box-shadow: 0 4px 14px rgba(53, 208, 165, .28);
  transform: translateY(-1px);
}
.rp-pri:active:not(:disabled) { transform: translateY(0); box-shadow: none; }
.rp-pri:disabled { opacity: .5; cursor: default; }
.rp-sec { background: transparent; color: var(--ink-3); border: 1px solid var(--line); }
.rp-sec:hover { color: var(--ink); border-color: var(--ink-3); background: var(--panel-2); }
.rp-pri:focus-visible, .rp-sec:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; }

/* El acuse: una sola línea y el punto encendido. No lleva ilustración ni signo
   de éxito gigante — lo que pasó es que se guardó un mensaje, no que se ganó
   algo, y el tamaño del festejo tiene que ser del tamaño del hecho. */
.rp-listo .rp-obj { font-size: 15px; font-weight: 400; color: var(--ink-2); line-height: 1.5; }

@media (max-width: 860px) {
  /* En teléfono la hoja se pega abajo: es donde llega el pulgar, y es la misma
     gramática del bottom-sheet que ya usa el panel del mapa. */
  .rp-hoja { margin: auto auto 0; }
  .rp-caja {
    width: 100vw; border-radius: 16px 16px 0 0; border-bottom: 0;
    /* El relleno de abajo pasa a ser del pie, que es quien queda fijo. */
    padding-bottom: 0;
    animation-name: rp-sube-abajo;
  }
  /* El tirador: no se arrastra, pero es lo que dice de dónde salió esta hoja y
     por dónde se va. Una hoja pegada abajo sin él se lee como una pantalla que
     apareció sola. */
  .rp-caja::before {
    content: ""; display: block; width: 36px; height: 4px; margin: -6px auto 14px;
    border-radius: 2px; background: var(--line);
  }
  /* El pie queda fijo al fondo para que Enviar esté siempre bajo el pulgar, y
     con FONDO PROPIO: sin él, el campo del correo se leía por debajo de los
     botones al hacer scroll, que es peor que no tenerlo fijo. Los márgenes
     negativos son para que ese fondo llegue hasta los bordes de la caja y no
     deje dos franjas transparentes a los lados. */
  .rp-pie {
    position: sticky; bottom: 0; z-index: 1;
    margin: 14px -20px 0;
    padding: 12px 20px max(18px, env(safe-area-inset-bottom));
    background: var(--panel); border-top: 1px solid var(--line);
  }
}
@keyframes rp-sube-abajo { from { opacity: 0; transform: translateY(24px); } }

/* Quien pidió menos movimiento no pierde la hoja, pierde el viaje. */
@media (prefers-reduced-motion: reduce) {
  .rp-caja, .rp-hoja::backdrop { animation: none; }
  .rp-gesto, .rp-op, .rp-pri, .rp-sec, .rp-sel, .rp-texto, .rp-input { transition: none; }
  .rp-pri:hover:not(:disabled) { transform: none; }
}
