/* ====================================================================
   Área privada de sitios.

   Hereda los tokens del tema (--pc-*). Si el tema no está activo, los
   respaldos de cada var() mantienen la pantalla legible: el módulo tiene
   que poder abrirse desde un móvil en una torre aunque el tema falle.
   ==================================================================== */

/* --------------------------------------------------------------------- */
/* Cascarón propio                                                        */
/*                                                                        */
/* El módulo no usa el header ni el footer del sitio público: el mega menú */
/* y el pie de cuatro columnas no pintan nada en una herramienta de campo, */
/* y el mapa quiere el alto que ellos se comían. Lo único que queda arriba */
/* es una barra de 52 px con la marca, quién eres y cómo salir.           */
/* --------------------------------------------------------------------- */

body.pec-app {
	margin: 0;
	background: var(--pc-papel-2, #F3F6F7);
	font-family: var(--pc-tipo-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);
	-webkit-text-size-adjust: 100%;
}

.pec-barra {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	height: 52px;
	padding: 0 var(--pc-canal, 20px);
	background: var(--pc-acero-800, #101A22);
	color: var(--pc-papel, #fff);
	position: sticky;
	top: 0;
	z-index: 500; /* por encima de Leaflet, que se sienta en el 400 */
}

.pec-barra__marca {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	color: var(--pc-papel, #fff);
	text-decoration: none;
	font-family: var(--pc-tipo-display, sans-serif);
	font-size: 16px;
	letter-spacing: .01em;
}

.pec-barra__marca svg {
	display: block;
	height: 26px;
	width: auto;
}

.pec-barra__sesion {
	display: inline-flex;
	align-items: center;
	gap: 12px;
	margin: 0;
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	letter-spacing: .06em;
	text-transform: uppercase;
	color: var(--pc-acero-300, #8FA0AD);
}

.pec-barra__sesion a {
	color: var(--pc-hivis, #D8F531);
	text-decoration: none;
}

.pec-barra__sesion a:hover,
.pec-barra__sesion a:focus-visible {
	text-decoration: underline;
}

.pec-envoltura {
	max-width: var(--pc-contenedor, 1220px);
	margin: 0 auto;
	padding: 20px var(--pc-canal, 24px) 40px;
}

.pec-titulo {
	font-family: var(--pc-tipo-display, sans-serif);
	font-size: clamp(26px, 4vw, 38px);
	line-height: 1.1;
	color: var(--pc-tinta, #101820);
	margin: 0 0 4px;
}

.pec-subtitulo {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 13px;
	letter-spacing: .04em;
	text-transform: uppercase;
	color: var(--pc-suave, #5C6874);
	margin: 0 0 24px;
}

/* -------------------------------------------------------------------- */
/* Barra de control                                                      */
/* -------------------------------------------------------------------- */

.pec-controles {
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
	align-items: flex-end;
	margin-bottom: 18px;
}

.pec-campo {
	display: flex;
	flex-direction: column;
	gap: 5px;
	min-width: 220px;
	flex: 1 1 220px;
}

.pec-campo label {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--pc-suave, #5C6874);
}

.pec-campo select,
.pec-campo input {
	font-family: var(--pc-tipo-ui, sans-serif);
	font-size: 15px;
	padding: 11px 12px;
	border: 1px solid var(--pc-borde, #DCE3E7);
	border-radius: var(--pc-radio-sm, 6px);
	background: var(--pc-papel, #fff);
	color: var(--pc-tinta, #101820);
	width: 100%;
}

.pec-campo select:focus,
.pec-campo input:focus {
	outline: 2px solid var(--pc-naranja, #C4400F);
	outline-offset: 1px;
	border-color: transparent;
}

.pec-contador {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 12px;
	color: var(--pc-suave, #5C6874);
	padding-bottom: 12px;
	white-space: nowrap;
}

/* -------------------------------------------------------------------- */
/* Sitio en espera                                                       */
/* -------------------------------------------------------------------- */

/* El rojo del estado, y solo en el borde: el bloque tiene texto largo
   encima y un fondo rojo entero lo haría ilegible y gritón en una pantalla
   que se mira veinte veces al día. El color dice «esto es lo mismo que la
   chincheta roja del mapa». */
.pec-espera {
	border: 1px solid var(--pc-borde, #DCE3E7);
	border-radius: var(--pc-radio, 10px);
	background: var(--pc-papel, #fff);
	padding: 14px 16px;
	margin: 0 0 20px;
}

.pec-espera.es-detenido {
	border-left: 4px solid #B3261E;
	background: #FDF2F1;
}

.pec-espera__error {
	font-size: 13px;
	color: #B3261E;
	margin: 0 0 8px;
}

.pec-espera__titulo {
	display: flex;
	align-items: baseline;
	gap: 10px;
	flex-wrap: wrap;
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	letter-spacing: .08em;
	text-transform: uppercase;
	font-weight: 700;
	color: #B3261E;
	margin: 0 0 6px;
}

.pec-espera__dias {
	font-weight: 400;
	color: var(--pc-suave, #5C6874);
}

.pec-espera__motivo {
	font-size: 15px;
	line-height: 1.4;
	color: var(--pc-tinta, #101820);
	margin: 0 0 4px;
}

.pec-espera__meta,
.pec-espera__opcional {
	font-size: 12px;
	color: var(--pc-suave, #5C6874);
	margin: 0;
}

.pec-espera__abrir,
.pec-espera__historial summary {
	font-size: 13px;
	color: var(--pc-suave, #5C6874);
	cursor: pointer;
}

.pec-espera__abrir {
	font-weight: 600;
	color: var(--pc-tinta, #101820);
}

.pec-espera__forma {
	display: grid;
	gap: 6px;
	margin-top: 10px;
	max-width: 520px;
}

.pec-espera__campo {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	letter-spacing: .06em;
	text-transform: uppercase;
	color: var(--pc-suave, #5C6874);
}

.pec-espera__forma input[type="text"],
.pec-espera__forma input[type="date"] {
	font-family: inherit;
	font-size: 15px;
	padding: 9px 10px;
	border: 1px solid var(--pc-borde, #DCE3E7);
	border-radius: var(--pc-radio-sm, 6px);
	background: var(--pc-papel, #fff);
	width: 100%;
}

.pec-espera__forma button {
	justify-self: start;
	margin-top: 4px;
}

.pec-espera__historial {
	margin-top: 12px;
	border-top: 1px solid var(--pc-papel-3, #E8EDF0);
	padding-top: 10px;
}

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

.pec-espera__lista li {
	display: grid;
	gap: 2px;
	font-size: 13px;
}

.pec-espera__fechas {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	color: var(--pc-suave, #5C6874);
}

.pec-espera__pasado-nota {
	font-size: 12px;
	color: var(--pc-suave, #5C6874);
}

/* -------------------------------------------------------------------- */
/* Mapa y lista                                                          */
/* -------------------------------------------------------------------- */

.pec-tablero {
	display: grid;
	grid-template-columns: minmax(0, 1fr) 320px;
	gap: 18px;
	align-items: start;
}

#pec-mapa {
	/* Sin cabecera pública, el mapa se queda con la pantalla. Se descuentan
	   la barra, el título y los controles. `dvh` en vez de `vh` para que la
	   barra de direcciones del móvil no recorte el mapa al aparecer. */
	height: calc(100dvh - 250px);
	min-height: 400px;
	max-height: 900px;
	border-radius: var(--pc-radio, 10px);
	border: 1px solid var(--pc-borde, #DCE3E7);
	background: var(--pc-papel-2, #F3F6F7);
	z-index: 0; /* el mapa nunca por encima del mega menú del tema */
}

/* ------------------- chinchetas, banderas y leyenda ------------------ */

/* El `divIcon` trae el SVG dentro. Sin fondo ni borde propios: la chincheta
   ya los lleva dibujados, y el cuadro blanco de serie de Leaflet le pondría
   un recuadro alrededor. */
.pec-pin {
	background: none;
	border: 0;
	line-height: 0;
}

/* La bandera con el Site ID y el nombre, como la lámina que el PM manda por
   correo. Fondo blanco y punta hacia la chincheta; el hivis no entra aquí
   porque el fondo es un mapa claro y ahí no se ve —1.2:1— que es la regla
   de siempre del sistema. */
.pec-bandera.leaflet-tooltip {
	font-family: var(--pc-tipo-ui, sans-serif);
	background: var(--pc-papel, #fff);
	color: var(--pc-tinta, #101820);
	border: 1px solid var(--pc-borde, #DCE3E7);
	border-radius: var(--pc-radio-sm, 6px);
	box-shadow: 0 1px 3px rgba(16, 24, 32, .22);
	padding: 3px 7px;
	white-space: nowrap;
	/* Por debajo de los globos y de los controles: la bandera es una
	   etiqueta, no una tarjeta. */
	z-index: 400;
}

.pec-bandera .pec-bandera__id {
	display: block;
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	font-weight: 700;
	letter-spacing: .04em;
	line-height: 1.2;
}

.pec-bandera .pec-bandera__nombre {
	display: block;
	font-size: 11px;
	line-height: 1.3;
	color: var(--pc-suave, #5C6874);
}

/* Lejos, solo el Site ID: los nombres se montan unos sobre otros en el
   encuadre que entra la isla entera, y las etiquetas de Leaflet no se
   esquivan solas. El nombre vuelve al acercarse. */
.pec-mapa--solo-id .pec-bandera__nombre {
	display: none;
}

/* Apagar las banderas conmuta una clase del contenedor y no trescientos
   tooltips: abrirlos y cerrarlos uno a uno congela el navegador medio
   segundo cada vez que alguien toca la casilla. */
.pec-mapa--sin-banderas .pec-bandera.leaflet-tooltip {
	display: none;
}

.pec-mapa-control {
	font-family: var(--pc-tipo-ui, sans-serif);
	font-size: 12px;
	background: var(--pc-papel, #fff);
	border: 1px solid var(--pc-borde, #DCE3E7);
	border-radius: var(--pc-radio-sm, 6px);
	box-shadow: 0 1px 4px rgba(16, 24, 32, .18);
	padding: 6px 9px;
	color: var(--pc-tinta, #101820);
}

.pec-mapa-control__linea {
	display: flex;
	align-items: center;
	gap: 6px;
	cursor: pointer;
	user-select: none;
}

.pec-leyenda {
	display: flex;
	flex-wrap: wrap;
	gap: 4px 12px;
	max-width: 260px;
}

.pec-leyenda__item {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	font-size: 11.5px;
	white-space: nowrap;
}

/* El punto de color del estado: el mismo que la chincheta, la barra del
   reporte y la celda del Excel. Es el único sitio donde el color significa
   algo por sí solo, así que nunca va solo — siempre con su nombre al lado,
   que un daltónico no lee un verde. */
.pec-leyenda__punto,
.pec-lista__punto,
.pec-punto-estado {
	display: inline-block;
	width: 9px;
	height: 9px;
	border-radius: 50%;
	flex: none;
	vertical-align: baseline;
	margin-right: 5px;
	background: var(--pc-suave, #5C6874);
}

.pec-leyenda__punto,
.pec-lista__punto {
	margin-right: 0;
}

/* Chapa de estado de la tabla del reporte, con el color de fondo y blanco
   encima: los cuatro colores del GPC pasan 4.5:1 con blanco, que es la
   condición para usarlos así. */
.pec-chapa-estado {
	display: inline-block;
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 10.5px;
	font-weight: 700;
	letter-spacing: .04em;
	text-transform: uppercase;
	color: #fff;
	background: var(--pc-suave, #5C6874);
	padding: 2px 6px;
	border-radius: 3px;
	white-space: nowrap;
}

/* Los grupos de markercluster vienen verdes, amarillos y naranjas de serie,
   y ahora esos tres colores significan un estado del sitio: un cluster verde
   se lee «cinco sitios en aire» cuando solo quiere decir «cinco sitios».
   Acero, que no significa nada, con la cifra en blanco. */
.marker-cluster,
.marker-cluster div {
	background: var(--pc-acero-600, #21323E) !important;
	color: #fff;
}

.marker-cluster {
	background: rgba(33, 50, 62, .35) !important;
}

.marker-cluster div {
	font-family: var(--pc-tipo-dato, monospace);
	font-weight: 700;
}

/* El crédito de Leaflet y del proveedor de teselas se pide oculto. Los dos
   mapas ya se crean con `attributionControl: false`; esto es el cinturón por
   si una capa futura lo vuelve a insertar. Para devolverlo, borra el bloque. */
.leaflet-control-attribution {
	display: none !important;
}

.pec-aviso {
	font-family: var(--pc-tipo-ui, sans-serif);
	font-size: 14px;
	color: var(--pc-suave, #5C6874);
	background: var(--pc-papel-2, #F3F6F7);
	border: 1px dashed var(--pc-borde, #DCE3E7);
	border-radius: var(--pc-radio-sm, 6px);
	padding: 12px 14px;
	margin-bottom: 12px;
}

.pec-panel {
	border: 1px solid var(--pc-borde, #DCE3E7);
	border-radius: var(--pc-radio, 10px);
	background: var(--pc-papel, #fff);
	max-height: calc(100dvh - 250px);
	min-height: 400px;
	overflow-y: auto;
}

/* La barra de administración de WordPress también ocupa arriba. */
.admin-bar #pec-mapa,
.admin-bar .pec-panel {
	height: calc(100dvh - 282px);
	max-height: calc(100dvh - 282px);
}

.admin-bar .pec-barra {
	top: 32px;
}

.pec-lista {
	list-style: none;
	margin: 0;
	padding: 0;
}

.pec-lista__item + .pec-lista__item {
	border-top: 1px solid var(--pc-borde, #DCE3E7);
}

.pec-lista__boton {
	display: grid;
	gap: 2px;
	width: 100%;
	text-align: left;
	background: none;
	border: 0;
	padding: 12px 14px;
	cursor: pointer;
	font: inherit;
}

.pec-lista__boton:hover,
.pec-lista__boton:focus-visible {
	background: var(--pc-papel-2, #F3F6F7);
}

.pec-lista__nombre {
	font-family: var(--pc-tipo-ui, sans-serif);
	font-weight: 600;
	font-size: 15px;
	color: var(--pc-tinta, #101820);
}

.pec-lista__id,
.pec-lista__estado {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	letter-spacing: .05em;
	text-transform: uppercase;
	color: var(--pc-suave, #5C6874);
}

/* El punto del estado delante del nombre, alineado con él. */
.pec-lista__estado {
	display: flex;
	align-items: center;
	gap: 5px;
}

/* -------------------------------------------------------------------- */
/* Globo del marcador                                                    */
/* -------------------------------------------------------------------- */

.pec-globo {
	font-family: var(--pc-tipo-ui, sans-serif);
}

.pec-globo__foto {
	width: 100%;
	height: 120px;
	object-fit: cover;
	border-radius: var(--pc-radio-sm, 6px);
	margin-bottom: 8px;
	display: block;
}

.pec-globo__titulo {
	font-family: var(--pc-tipo-display, sans-serif);
	font-size: 17px;
	line-height: 1.2;
	margin: 0 0 4px;
	color: var(--pc-tinta, #101820);
}

.pec-globo__id,
.pec-globo__estado {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	letter-spacing: .06em;
	text-transform: uppercase;
	margin: 0 0 2px;
	color: var(--pc-suave, #5C6874);
}

/* El fondo lo pone el estado, en línea: acero mientras no se sepa cuál es.
   Antes era hivis sobre acero —la marca— y ahora es el color del estado con
   blanco encima, el mismo que la chincheta que se acaba de pulsar. */
.pec-globo__estado {
	display: inline-block;
	background: var(--pc-acero-700, #17242E);
	color: #fff;
	font-weight: 700;
	padding: 2px 7px;
	border-radius: 3px;
	margin-bottom: 6px;
}

/* El motivo de la espera, en el globo. Rojo el texto y no el fondo: el globo
   es pequeño y un bloque rojo tapa la tarjeta entera. */
.pec-globo__espera {
	font-size: 13px;
	line-height: 1.35;
	font-weight: 600;
	color: #B3261E;
	margin: 0 0 3px;
}

.pec-globo__dato {
	font-size: 13px;
	line-height: 1.4;
	margin: 0 0 3px;
	color: var(--pc-texto, #2B353E);
}

.pec-globo__coords {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	color: var(--pc-suave, #5C6874);
}

/* El único naranja de la pantalla, y es clicable. */
.pec-globo__boton {
	display: block;
	margin-top: 10px;
	text-align: center;
	background: var(--pc-naranja, #C4400F);
	color: #fff;
	text-decoration: none;
	font-weight: 600;
	font-size: 14px;
	padding: 9px 12px;
	border-radius: var(--pc-radio-sm, 6px);
}

.pec-globo__boton:hover,
.pec-globo__boton:focus-visible {
	background: var(--pc-naranja-hondo, #97300A);
	color: #fff;
}

/* Leaflet trae `.leaflet-container a { color: #0078A8 }` —una clase y un
   elemento— que gana a cualquier clase suelta por especificidad, sin
   importar el orden de los archivos. El resultado era el rótulo azul del
   tema sobre el naranja del botón: 1.7:1 de contraste, ilegible en la
   pantalla de una tablet a pleno sol. Se repite el color con el contenedor
   delante, que es lo mismo que hace Leaflet, en vez de un `!important`. */
.leaflet-container a.pec-globo__boton,
.leaflet-container a.pec-globo__boton:hover,
.leaflet-container a.pec-globo__boton:focus-visible {
	color: #fff;
}

.leaflet-container a.pec-compartir__accion {
	color: var(--pc-acero-700, #17242E);
}

.leaflet-container a.pec-compartir__accion:hover,
.leaflet-container a.pec-compartir__accion:focus-visible {
	color: var(--pc-papel, #fff);
}

/* -------------------------------------------------------------------- */
/* Ficha de sitio                                                        */
/* -------------------------------------------------------------------- */

.pec-ficha__cabecera {
	background: var(--pc-acero-800, #101A22);
	color: var(--pc-papel, #fff);
	border-radius: var(--pc-radio, 10px);
	padding: 24px;
	margin-bottom: 22px;
}

.pec-ficha__cabecera .pec-titulo {
	color: var(--pc-papel, #fff);
}

.pec-ficha__id {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 13px;
	letter-spacing: .08em;
	color: var(--pc-hivis, #D8F531);
	margin: 0 0 8px;
}

.pec-ficha__migas {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 12px;
	color: var(--pc-acero-300, #8FA0AD);
	margin: 0 0 14px;
}

.pec-ficha__migas a {
	color: var(--pc-acero-200, #B9C6D0);
}

.pec-datos {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
	gap: 1px;
	/* Fondo papel, no borde: si la última fila queda a medias, el hueco se ve
	   blanco y no como una banda gris pegada al final de la ficha. Las líneas
	   internas las pone cada celda con su `box-shadow`, que cae dentro del
	   hueco de 1px y no se duplica entre vecinas. */
	background: var(--pc-papel, #fff);
	border: 1px solid var(--pc-borde, #DCE3E7);
	border-radius: var(--pc-radio, 10px);
	overflow: hidden;
	margin-bottom: 24px;
}

/* Cinco columnas fijas en escritorio, solo en la ficha de sitio.
   `auto-fit` reparte según lo que quepa, así que el número de filas dependía
   del ancho de la ventana: a 1100 px salían dos filas y a 900 px, tres. La
   ficha trae como mucho diez datos, así que cinco columnas las dejan en dos
   filas exactas siempre, y nunca en una tercera con una celda suelta.
   Por debajo de 1000 px manda el `auto-fit` de arriba y se apilan solas.
   La ficha de proyecto no lleva esto: su número de datos es variable. */
@media (min-width: 1000px) {
	.pec-datos--ficha {
		grid-template-columns: repeat(5, minmax(0, 1fr));
	}
}

.pec-dato {
	background: var(--pc-papel, #fff);
	box-shadow: 0 0 0 1px var(--pc-borde, #DCE3E7);
	padding: 14px 16px;
}

.pec-dato__etiqueta {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 10px;
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--pc-suave, #5C6874);
	margin: 0 0 4px;
}

.pec-dato__valor {
	font-family: var(--pc-tipo-ui, sans-serif);
	font-size: 15px;
	line-height: 1.35;
	color: var(--pc-tinta, #101820);
	margin: 0;
	overflow-wrap: anywhere;
}

#pec-mini-mapa {
	height: 320px;
	border-radius: var(--pc-radio, 10px);
	border: 1px solid var(--pc-borde, #DCE3E7);
	z-index: 0;
}

/* -------------------------------------------------------------------- */
/* Acceso                                                               */
/* -------------------------------------------------------------------- */

.pec-acceso {
	min-height: 100dvh;
	display: grid;
	place-items: center;
	padding: 40px var(--pc-canal, 24px);
}

.pec-acceso__caja {
	width: 100%;
	max-width: 400px;
	background: var(--pc-papel, #fff);
	border: 1px solid var(--pc-borde, #DCE3E7);
	border-radius: var(--pc-radio, 10px);
	box-shadow: var(--pc-sombra, 0 4px 12px rgba(16, 26, 34, .07));
	padding: 30px;
}

.pec-acceso__caja .pec-campo {
	margin-bottom: 14px;
	min-width: 0;
}

.pec-acceso__error {
	background: #FDECEA;
	border-left: 3px solid var(--pc-rojo, #B3261E);
	color: var(--pc-rojo, #B3261E);
	font-size: 14px;
	padding: 10px 12px;
	border-radius: var(--pc-radio-sm, 6px);
	margin-bottom: 16px;
}

.pec-boton {
	display: block;
	width: 100%;
	background: var(--pc-naranja, #C4400F);
	color: #fff;
	border: 0;
	border-radius: var(--pc-radio-sm, 6px);
	font-family: var(--pc-tipo-ui, sans-serif);
	font-size: 15px;
	font-weight: 600;
	padding: 12px;
	cursor: pointer;
}

.pec-boton:hover,
.pec-boton:focus-visible {
	background: var(--pc-naranja-hondo, #97300A);
}

.pec-acceso__pie {
	font-size: 13px;
	text-align: center;
	margin: 16px 0 0;
}

.pec-acceso__pie a {
	color: var(--pc-suave, #5C6874);
}

/* -------------------------------------------------------------------- */
/* Móvil: el mapa arriba, la lista debajo                                */
/* -------------------------------------------------------------------- */

@media (max-width: 900px) {
	.pec-tablero {
		grid-template-columns: minmax(0, 1fr);
	}

	/* En el celular: mapa arriba, lista debajo. Es como se usa en campo. */
	#pec-mapa,
	.admin-bar #pec-mapa {
		height: 60dvh;
		max-height: none;
		min-height: 320px;
	}

	.pec-panel,
	.admin-bar .pec-panel {
		max-height: none;
		min-height: 0;
		height: auto;
	}

	.admin-bar .pec-barra {
		top: 46px;
	}

	.pec-contador {
		padding-bottom: 0;
		white-space: normal;
	}
}

/* ===================================================================== */
/* Bitácora                                                              */
/* ===================================================================== */

.pec-bitacora {
	margin-top: 36px;
	max-width: 780px;
}

.pec-bitacora__cabecera {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 12px;
	flex-wrap: wrap;
	border-bottom: 2px solid var(--pc-tinta, #101820);
	padding-bottom: 8px;
	margin-bottom: 20px;
}

.pec-seccion__titulo {
	font-family: var(--pc-tipo-display, sans-serif);
	font-size: clamp(20px, 3vw, 26px);
	line-height: 1.1;
	margin: 0;
	color: var(--pc-tinta, #101820);
}

.pec-seccion__contador {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--pc-suave, #5C6874);
	margin: 0;
}

/* ------------------------------ avisos ------------------------------ */

.pec-nota {
	font-size: 14px;
	line-height: 1.45;
	padding: 10px 13px;
	border-radius: var(--pc-radio-sm, 6px);
	border-left: 3px solid;
	margin: 0 0 18px;
}

.pec-nota--bien { background: #E8F5EF; border-color: var(--pc-verde, #0F6B4F); color: #0B513C; }
.pec-nota--ojo  { background: #FFF6E0; border-color: #B7791F;                  color: #6B4A08; }
.pec-nota--mal  { background: #FDECEA; border-color: var(--pc-rojo, #B3261E);  color: #8C1D17; }

/* ----------------------------- formulario --------------------------- */

.pec-form {
	background: var(--pc-papel, #fff);
	border: 1px solid var(--pc-borde, #DCE3E7);
	border-radius: var(--pc-radio, 10px);
	padding: 18px;
	margin-bottom: 26px;
}

.pec-form__fila {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
	gap: 14px;
	margin-bottom: 14px;
}

.pec-form .pec-campo { margin-bottom: 14px; min-width: 0; }
.pec-form__fila .pec-campo { margin-bottom: 0; }

.pec-form textarea {
	font-family: var(--pc-tipo-ui, sans-serif);
	font-size: 15px;
	padding: 11px 12px;
	border: 1px solid var(--pc-borde, #DCE3E7);
	border-radius: var(--pc-radio-sm, 6px);
	background: var(--pc-papel, #fff);
	color: var(--pc-tinta, #101820);
	width: 100%;
	resize: vertical;
}

.pec-form input[type="file"] {
	font-family: var(--pc-tipo-ui, sans-serif);
	font-size: 14px;
	color: var(--pc-texto, #2B353E);
}

.pec-ayuda,
.pec-ayuda-inline {
	font-family: var(--pc-tipo-ui, sans-serif);
	font-size: 12px;
	color: var(--pc-suave, #5C6874);
	font-weight: 400;
	text-transform: none;
	letter-spacing: 0;
}

.pec-boton--auto {
	width: auto;
	padding: 11px 22px;
}

/* ------------------------------ timeline ---------------------------- */

.pec-linea {
	list-style: none;
	margin: 0;
	padding: 0;
	position: relative;
}

/* El hilo vertical que une las acciones. Es lo que hace que se lea como
   una secuencia de trabajo y no como una lista de notas sueltas. */
.pec-linea::before {
	content: "";
	position: absolute;
	left: 5px;
	top: 8px;
	bottom: 8px;
	width: 2px;
	background: var(--pc-borde, #DCE3E7);
}

.pec-linea__item {
	position: relative;
	display: grid;
	grid-template-columns: 12px minmax(0, 1fr);
	gap: 16px;
	padding-bottom: 22px;
}

.pec-linea__item:last-child { padding-bottom: 0; }

.pec-linea__marca {
	width: 12px;
	height: 12px;
	border-radius: 50%;
	background: var(--pc-acero-600, #21323E);
	border: 2px solid var(--pc-papel, #fff);
	margin-top: 5px;
	position: relative;
	z-index: 1;
}

.pec-linea__item:first-child .pec-linea__marca {
	background: var(--pc-naranja, #C4400F);
}

.pec-linea__meta {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	letter-spacing: .06em;
	text-transform: uppercase;
	color: var(--pc-suave, #5C6874);
	margin: 0 0 3px;
	display: flex;
	gap: 10px;
	flex-wrap: wrap;
}

.pec-linea__autor::before { content: "· "; }

/* Varios registros bajo la misma fecha: cuántos son, junto al día. */
.pec-linea__cuantas {
	color: var(--pc-acero-300, #8FA0AD);
}

.pec-linea__cuantas::before { content: "· "; }

/* Registros de una misma jornada. El primero va pegado a la fecha; los
   siguientes se separan con una línea fina, que es suficiente para ver que
   son envíos distintos sin repetir el día tres veces. */
.pec-linea__registro + .pec-linea__registro {
	margin-top: 14px;
	padding-top: 12px;
	border-top: 1px solid var(--pc-papel-3, #E8EDF0);
}

.pec-linea__firma {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	letter-spacing: .06em;
	text-transform: uppercase;
	color: var(--pc-suave, #5C6874);
	margin: 0 0 4px;
	display: flex;
	align-items: center;
	gap: 8px;
	flex-wrap: wrap;
}

/* La firma solo lleva el autor cuando no hay nada más; sin el punto de
   separación, que aquí abre la línea en vez de continuarla. */
.pec-linea__firma .pec-linea__autor::before { content: none; }

/* Subido después del día del trabajo. Naranja no: eso es para acciones.
   Un borde y monoespaciada, como el resto de los metadatos. */
.pec-linea__tarde {
	font-size: 10px;
	letter-spacing: .08em;
	color: var(--pc-suave, #5C6874);
	border: 1px solid var(--pc-borde, #DCE3E7);
	border-radius: 3px;
	padding: 2px 6px;
	cursor: help;
}

.pec-linea__accion {
	font-family: var(--pc-tipo-ui, sans-serif);
	font-size: 16px;
	font-weight: 600;
	line-height: 1.25;
	margin: 0 0 6px;
	color: var(--pc-tinta, #101820);
	display: flex;
	align-items: center;
	gap: 9px;
	flex-wrap: wrap;
}

.pec-linea__fase {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 10px;
	font-weight: 500;
	letter-spacing: .08em;
	text-transform: uppercase;
	background: var(--pc-papel-3, #E8EDF0);
	color: var(--pc-suave, #5C6874);
	padding: 3px 7px;
	border-radius: 3px;
}

.pec-linea__nota {
	font-family: var(--pc-tipo-texto, Georgia, serif);
	font-size: 15px;
	line-height: 1.55;
	color: var(--pc-texto, #2B353E);
}

.pec-linea__nota p { margin: 0 0 8px; }
.pec-linea__nota p:last-child { margin-bottom: 0; }

/* --------------------------- enlace de foto -------------------------- */

/* Las fotos no se pintan en línea: una bitácora larga en un celular con una
   barra de cobertura no debe cargar sesenta imágenes que nadie pidió. */
.pec-linea__fotos {
	display: flex;
	gap: 8px;
	flex-wrap: wrap;
	margin: 10px 0 0;
}

.pec-foto {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	letter-spacing: .05em;
	text-transform: uppercase;
	color: var(--pc-naranja, #C4400F);
	text-decoration: none;
	border: 1px solid currentColor;
	border-radius: var(--pc-radio-sm, 6px);
	padding: 5px 10px;
	line-height: 1;
}

.pec-foto:hover,
.pec-foto:focus-visible {
	background: var(--pc-naranja, #C4400F);
	color: #fff;
}

.pec-foto svg { display: block; }

.pec-vacio-nota {
	font-size: 14px;
	color: var(--pc-suave, #5C6874);
	background: var(--pc-papel-2, #F3F6F7);
	border: 1px dashed var(--pc-borde, #DCE3E7);
	border-radius: var(--pc-radio-sm, 6px);
	padding: 14px;
	margin: 0;
}

/* ------------------------------- visor ------------------------------- */

.pec-visor {
	position: fixed;
	inset: 0;
	z-index: 9999;
	display: flex;
	align-items: center;
	justify-content: center;
	background: rgba(10, 18, 25, .92);
	padding: 20px;
}

.pec-visor[hidden] { display: none; }

.pec-visor__imagen {
	max-width: 100%;
	max-height: calc(100dvh - 110px);
	object-fit: contain;
	border-radius: var(--pc-radio-sm, 6px);
	background: var(--pc-acero-900, #0A1219);
}

.pec-visor__cerrar {
	position: absolute;
	top: 14px;
	right: 14px;
	background: none;
	border: 1px solid var(--pc-acero-300, #8FA0AD);
	color: var(--pc-papel, #fff);
	border-radius: var(--pc-radio-sm, 6px);
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 12px;
	letter-spacing: .08em;
	text-transform: uppercase;
	padding: 8px 13px;
	cursor: pointer;
}

.pec-visor__pie {
	position: absolute;
	bottom: 18px;
	left: 0;
	right: 0;
	text-align: center;
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	letter-spacing: .06em;
	text-transform: uppercase;
	color: var(--pc-acero-300, #8FA0AD);
	margin: 0;
}

/* ===================================================================== */
/* Avance de obra                                                        */
/*                                                                       */
/* El diseño sale de la regla del sistema, no de una decisión nueva: el   */
/* hivis solo se usa sobre acero. Una barra de avance ES eso — relleno    */
/* amarillo sobre pista de acero oscuro — y es además lo que se ve en una */
/* torre al atardecer con la cinta reflectiva puesta.                     */
/*                                                                       */
/* Esquinas a cero y sin sombra a propósito: el acero no tiene esquinas   */
/* redondeadas, y la píldora con sombra suave pertenece a otro producto.  */
/* ===================================================================== */

.pec-avance {
	background: var(--pc-acero-800, #101A22);
	padding: 20px 22px 18px;
	margin-bottom: 22px;
	border-radius: var(--pc-radio, 10px);
}

.pec-avance__encabezado {
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	gap: 16px;
	margin-bottom: 14px;
}

.pec-avance__titulo {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	font-weight: 500;
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--pc-acero-300, #8FA0AD);
	margin: 0 0 2px;
}

.pec-avance__cifra {
	display: flex;
	align-items: baseline;
	gap: 2px;
	margin: 0;
	color: var(--pc-hivis, #D8F531);
	line-height: .85;
}

.pec-avance__numero {
	font-family: var(--pc-tipo-display, sans-serif);
	font-size: clamp(38px, 8vw, 54px);
	font-weight: 700;
	font-stretch: 87%;
	font-variant-numeric: tabular-nums;
	letter-spacing: -.02em;
}

.pec-avance__unidad {
	font-family: var(--pc-tipo-display, sans-serif);
	font-size: 18px;
	font-weight: 600;
	font-stretch: 87%;
}

/* ------------------------------ la barra ----------------------------- */

.pec-barra-obra {
	display: flex;
	gap: 3px;
	height: 18px;
	margin-bottom: 8px;
}

.pec-barra-obra__tramo {
	flex: 1 1 0;
	background: var(--pc-acero-600, #21323E);
	overflow: hidden;
	position: relative;
}

.pec-barra-obra__relleno {
	height: 100%;
	background: var(--pc-hivis, #D8F531);
	transition: width .5s cubic-bezier(.22, .61, .36, 1);
}

@media (prefers-reduced-motion: reduce) {
	.pec-barra-obra__relleno { transition: none; }
}

/* ---------------------- etiquetas bajo la barra ---------------------- */

.pec-fases {
	display: flex;
	gap: 3px;
	list-style: none;
	margin: 0;
	padding: 0;
}

.pec-fases__item {
	flex: 1 1 0;
	min-width: 0;
	display: flex;
	flex-direction: column;
	gap: 1px;
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 10px;
	letter-spacing: .04em;
	color: var(--pc-acero-300, #8FA0AD);
}

.pec-fases__nombre {
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

.pec-fases__cuenta {
	font-variant-numeric: tabular-nums;
	color: var(--pc-acero-200, #B9C6D0);
}

.pec-fases__item.es-completa .pec-fases__cuenta {
	color: var(--pc-hivis, #D8F531);
}

/* ---------------------------- el desglose ---------------------------- */

.pec-detalle {
	margin-top: 16px;
	border-top: 1px solid var(--pc-acero-600, #21323E);
	padding-top: 12px;
}

.pec-detalle__resumen {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	letter-spacing: .06em;
	text-transform: uppercase;
	color: var(--pc-acero-200, #B9C6D0);
	cursor: pointer;
	list-style: none;
	display: inline-flex;
	align-items: center;
	gap: 7px;
}

.pec-detalle__resumen::-webkit-details-marker { display: none; }

.pec-detalle__resumen::before {
	content: "";
	width: 0;
	height: 0;
	border-left: 5px solid currentColor;
	border-top: 4px solid transparent;
	border-bottom: 4px solid transparent;
	transition: transform .15s ease;
}

.pec-detalle[open] .pec-detalle__resumen::before { transform: rotate(90deg); }

@media (prefers-reduced-motion: reduce) {
	.pec-detalle__resumen::before { transition: none; }
}

.pec-detalle__fase {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 10px;
	font-weight: 500;
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--pc-acero-300, #8FA0AD);
	margin: 16px 0 6px;
}

.pec-acciones {
	list-style: none;
	margin: 0;
	padding: 0;
}

.pec-acciones__item {
	display: flex;
	align-items: center;
	gap: 9px;
	flex-wrap: wrap;
	padding: 5px 0;
	font-family: var(--pc-tipo-ui, sans-serif);
	font-size: 13.5px;
	color: var(--pc-acero-200, #B9C6D0);
}

/* La marca es una casilla troquelada, no un check decorativo: en el mundo
   de este sitio lo que certifica que algo se hizo es una placa punzonada. */
.pec-acciones__marca {
	width: 11px;
	height: 11px;
	flex: 0 0 auto;
	border: 1.5px solid var(--pc-acero-500, #334754);
	background: transparent;
}

.pec-acciones__item.es-hecha .pec-acciones__marca {
	background: var(--pc-hivis, #D8F531);
	border-color: var(--pc-hivis, #D8F531);
}

.pec-acciones__item.es-hecha .pec-acciones__nombre {
	color: var(--pc-papel, #fff);
}

.pec-acciones__item.es-opcional { opacity: .62; }

.pec-acciones__nota {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 9.5px;
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--pc-acero-300, #8FA0AD);
	border: 1px solid currentColor;
	padding: 1px 5px;
}

/* ---------------------------- los sectores --------------------------- */

.pec-sectores {
	display: inline-flex;
	gap: 3px;
	margin-left: auto;
}

.pec-sectores__uno {
	width: 17px;
	height: 17px;
	display: grid;
	place-items: center;
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 9.5px;
	font-weight: 500;
	color: var(--pc-acero-300, #8FA0AD);
	border: 1px solid var(--pc-acero-500, #334754);
}

.pec-sectores__uno.es-hecho {
	background: var(--pc-hivis, #D8F531);
	border-color: var(--pc-hivis, #D8F531);
	color: var(--pc-acero-900, #0A1219);
}

.pec-avance .pec-vacio-nota {
	background: transparent;
	border-color: var(--pc-acero-600, #21323E);
	color: var(--pc-acero-300, #8FA0AD);
	margin-top: 14px;
}

/* ------------------- avance compacto en los listados ------------------ */

.pec-mini {
	display: flex;
	align-items: center;
	gap: 7px;
	margin-top: 5px;
}

.pec-mini__pista {
	flex: 1 1 auto;
	height: 4px;
	background: var(--pc-papel-3, #E8EDF0);
	min-width: 40px;
}

/* `display: block` no es decorativo: la pista y el relleno son <span> dentro
   del globo del mapa, y un inline ignora `width` y `height`. Sin esto la
   cifra dice 8 % y la barra se ve vacía. */
.pec-mini__pista { display: block; }

.pec-mini__relleno {
	display: block;
	height: 100%;
	background: var(--pc-acero-600, #21323E);
}

/* Completo es lo único que merece destacarse en una lista larga. */
.pec-mini.es-completa .pec-mini__relleno { background: var(--pc-verde, #0F6B4F); }

.pec-mini__cifra {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 10px;
	font-variant-numeric: tabular-nums;
	color: var(--pc-suave, #5C6874);
	flex: 0 0 auto;
}

@media (max-width: 560px) {
	.pec-fases__item { font-size: 9px; }
	.pec-avance { padding: 16px 16px 14px; }
	.pec-sectores { margin-left: 0; width: 100%; }
}

/* ===================================================================== */
/* Elegir acciones: una entrada es una jornada, no una acción            */
/* ===================================================================== */

.pec-elige {
	border: 1px solid var(--pc-borde, #DCE3E7);
	border-radius: var(--pc-radio-sm, 6px);
	padding: 14px 16px 12px;
	margin: 0 0 14px;
	min-width: 0;
}

.pec-elige__titulo {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--pc-suave, #5C6874);
	padding: 0 6px;
	margin: 0;
}

/* La nota del asterisco y la marca en cada acción. El asterisco dice qué
   mueve el porcentaje, que es lo que pregunta el crew antes de marcar. */
.pec-elige__nota {
	font-size: 12px;
	color: var(--pc-suave, #5C6874);
	margin: 0 0 10px;
}

/* Tinta y no naranja: el naranja de este sitio es de las cosas que se
   pulsan, y un asterisco no se pulsa. */
.pec-elige__marca {
	font-family: var(--pc-tipo-dato, monospace);
	color: var(--pc-tinta, #101820);
}

.pec-elige__fase + .pec-elige__fase {
	margin-top: 12px;
	border-top: 1px solid var(--pc-papel-3, #E8EDF0);
	padding-top: 10px;
}

.pec-elige__etiqueta {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 10px;
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--pc-acero-300, #8FA0AD);
	margin: 0 0 4px;
}

/* Dos columnas en escritorio. «Instalación» son ocho acciones: en una sola
   columna empujan el resto del formulario fuera de pantalla. En el celular
   vuelven a una columna: ahí la fila completa es el área de toque. */
.pec-elige__opciones {
	display: grid;
	grid-template-columns: 1fr;
	column-gap: 18px;
}

@media (min-width: 620px) {
	.pec-elige__opciones {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

/* Fila completa y alta: se marca con el pulgar, con guantes, al sol. */
.pec-elige__opcion {
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 7px 4px;
	font-family: var(--pc-tipo-ui, sans-serif);
	font-size: 14.5px;
	line-height: 1.25;
	color: var(--pc-texto, #2B353E);
	cursor: pointer;
	border-radius: 4px;
	min-height: 40px;
}

.pec-elige__opcion:hover {
	background: var(--pc-papel-2, #F3F6F7);
}

.pec-elige__opcion input {
	width: 19px;
	height: 19px;
	flex: 0 0 auto;
	accent-color: var(--pc-naranja, #C4400F);
	margin: 0;
}

/* Ya registrado. Se deja a la vista y apagado, no se esconde: que la acción
   desaparezca de la lista haría pensar que falta algo. Verla tachada dice
   «esto ya está», que es justo la respuesta. */
.pec-elige__opcion.es-hecha {
	color: var(--pc-acero-300, #8FA0AD);
	cursor: default;
}

.pec-elige__opcion.es-hecha:hover {
	background: none;
}

.pec-elige__hecho,
.pec-elige__parcial {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 10px;
	letter-spacing: .08em;
	text-transform: uppercase;
	padding: 2px 6px;
	white-space: nowrap;
	flex: 0 0 auto;
	margin-left: auto;
}

.pec-elige__hecho {
	background: var(--pc-papel-3, #E8EDF0);
	color: var(--pc-suave, #5C6874);
}

/* Queda trabajo en otros sectores: es un dato, no un cierre. */
.pec-elige__parcial {
	color: var(--pc-naranja, #C4400F);
}

.pec-elige__opcion:has(input:checked) {
	color: var(--pc-tinta, #101820);
	font-weight: 600;
}

.pec-elige__opcion:focus-within {
	outline: 2px solid var(--pc-naranja, #C4400F);
	outline-offset: 1px;
}

/* ------------------------------ sectores ----------------------------- */

.pec-elige--sectores[hidden] { display: none; }

.pec-chips {
	display: flex;
	gap: 8px;
	flex-wrap: wrap;
	margin: 4px 0 8px;
}

.pec-chip {
	position: relative;
	cursor: pointer;
}

.pec-chip input {
	position: absolute;
	opacity: 0;
	width: 100%;
	height: 100%;
	margin: 0;
	cursor: pointer;
}

.pec-chip span {
	display: grid;
	place-items: center;
	width: 46px;
	height: 44px;
	border: 1px solid var(--pc-borde, #DCE3E7);
	border-radius: var(--pc-radio-sm, 6px);
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 15px;
	color: var(--pc-suave, #5C6874);
	background: var(--pc-papel, #fff);
}

.pec-chip input:checked + span {
	background: var(--pc-acero-700, #17242E);
	border-color: var(--pc-acero-700, #17242E);
	color: var(--pc-hivis, #D8F531);
}

.pec-chip input:focus-visible + span {
	outline: 2px solid var(--pc-naranja, #C4400F);
	outline-offset: 2px;
}

/* -------------------- la jornada en el timeline ---------------------- */

.pec-linea__acciones {
	list-style: none;
	margin: 0 0 5px;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 2px;
}

.pec-linea__acciones li {
	font-family: var(--pc-tipo-ui, sans-serif);
	font-size: 15.5px;
	font-weight: 600;
	line-height: 1.3;
	color: var(--pc-tinta, #101820);
	padding-left: 13px;
	position: relative;
}

/* Guion de parte de obra, no viñeta decorativa. */
.pec-linea__acciones li::before {
	content: "";
	position: absolute;
	left: 0;
	top: .62em;
	width: 7px;
	height: 2px;
	background: var(--pc-naranja, #C4400F);
}

.pec-linea__sectores {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	letter-spacing: .05em;
	text-transform: uppercase;
	color: var(--pc-suave, #5C6874);
	margin: 0 0 6px;
}


/* ====================================================================
   EL REPORTE DEL PROYECTO
   ====================================================================

   Sigue la regla del sistema visual: hivis solo sobre acero, naranja solo
   para lo que se pulsa, esquinas a cero. La tabla es la pieza central y
   está pensada para leerse en rejilla — diecisiete columnas de actividad
   con la identificación del sitio siempre a la vista — igual que se lee el
   Excel que sustituye.
   ==================================================================== */

/* -------------------------- la botonera ----------------------------- */

.pec-acciones-reporte {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 10px;
	margin: 0 0 18px;
}

.pec-boton-accion {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 10px 18px;
	border: 2px solid var(--pc-acero-600, #21323E);
	border-radius: 0;
	background: transparent;
	color: var(--pc-acero-700, #17242E);
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 12px;
	font-weight: 700;
	letter-spacing: .06em;
	text-transform: uppercase;
	text-decoration: none;
	cursor: pointer;
	transition: background .14s, color .14s, border-color .14s;
}

.pec-boton-accion:hover,
.pec-boton-accion:focus-visible {
	background: var(--pc-acero-600, #21323E);
	color: var(--pc-papel, #fff);
}

/* Naranja: es la acción que produce el entregable. */
.pec-boton-accion--principal {
	background: var(--pc-naranja, #C4400F);
	border-color: var(--pc-naranja, #C4400F);
	color: var(--pc-papel, #fff);
}

.pec-boton-accion--principal:hover,
.pec-boton-accion--principal:focus-visible {
	background: var(--pc-naranja-hondo, #97300A);
	border-color: var(--pc-naranja-hondo, #97300A);
}

/* Apagado, no escondido: enseña que la función existe y todavía no está
   conectada. Esconderla haría que el PM preguntara si se puede enviar. */
.pec-boton-accion:disabled,
.pec-boton-accion[aria-disabled="true"] {
	opacity: .42;
	cursor: not-allowed;
	background: transparent;
	color: var(--pc-suave, #5C6874);
	border-color: var(--pc-borde, #D6DCE4);
}

.pec-acciones-reporte__nota {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	letter-spacing: .04em;
	color: var(--pc-suave, #5C6874);
}

/* --------------------------- la sección ----------------------------- */

.pec-reporte {
	margin: 28px 0 0;
	background: var(--pc-papel, #fff);
	border: 1px solid var(--pc-borde, #D6DCE4);
}

.pec-reporte__cabecera {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	padding: 16px 20px;
	background: var(--pc-acero-800, #101A22);
	color: var(--pc-papel, #fff);
}

.pec-reporte__titulo {
	font-family: var(--pc-tipo-display, sans-serif);
	font-size: 22px;
	font-weight: 700;
	line-height: 1.1;
	margin: 0;
	color: var(--pc-papel, #fff);
}

.pec-reporte__pie {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	letter-spacing: .04em;
	color: var(--pc-acero-200, #B9C6D0);
	margin: 4px 0 0;
}

.pec-reporte__cerrar {
	flex: none;
	padding: 7px 14px;
	border: 1px solid var(--pc-acero-500, #334754);
	background: transparent;
	color: var(--pc-acero-200, #B9C6D0);
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	letter-spacing: .06em;
	text-transform: uppercase;
	cursor: pointer;
}

.pec-reporte__cerrar:hover,
.pec-reporte__cerrar:focus-visible {
	/* Hivis sobre acero: el único sitio donde el amarillo puede ir. */
	border-color: var(--pc-hivis, #D8F531);
	color: var(--pc-hivis, #D8F531);
}

.pec-reporte__cargando,
.pec-reporte__cuerpo {
	padding: 20px;
}

.pec-reporte__cargando {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 12px;
	letter-spacing: .05em;
	color: var(--pc-suave, #5C6874);
	margin: 0;
}

.pec-reporte__subtitulo {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 12px;
	font-weight: 700;
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--pc-suave, #5C6874);
	margin: 26px 0 10px;
	padding-bottom: 6px;
	border-bottom: 2px solid var(--pc-acero-600, #21323E);
}

.pec-reporte__cifras {
	margin-bottom: 8px;
}

/* --------------------- medidas de los tres bloques ------------------ */

.pec-reporte__columnas {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
	gap: 0 28px;
}

.pec-reporte__medidas {
	list-style: none;
	margin: 0;
	padding: 0;
}

.pec-reporte__medida + .pec-reporte__medida {
	margin-top: 8px;
}

.pec-reporte__medida-linea {
	display: flex;
	justify-content: space-between;
	align-items: baseline;
	gap: 10px;
	margin-bottom: 3px;
}

.pec-reporte__medida-nombre {
	font-size: 13.5px;
	color: var(--pc-tinta, #101820);
}

.pec-reporte__medida-cifra {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 12px;
	font-weight: 700;
	color: var(--pc-acero-700, #17242E);
}

/* Misma barra que el avance de obra: relleno hivis sobre pista de acero,
   esquinas a cero. El acero no tiene esquinas redondeadas. */
.pec-reporte__pista {
	height: 7px;
	background: var(--pc-acero-600, #21323E);
}

.pec-reporte__relleno {
	height: 100%;
	background: var(--pc-hivis, #D8F531);
}

/* ---------------------------- la tabla ------------------------------ */

.pec-reporte__tabla-caja {
	overflow-x: auto;
	border: 1px solid var(--pc-borde, #D6DCE4);
	max-height: 70vh;
}

.pec-reporte__tabla {
	border-collapse: collapse;
	width: max-content;
	min-width: 100%;
	font-size: 12.5px;
}

.pec-reporte__tabla th,
.pec-reporte__tabla td {
	border: 1px solid var(--pc-borde, #D6DCE4);
	padding: 6px 9px;
	text-align: left;
	white-space: nowrap;
}

.pec-reporte__tabla thead th {
	position: sticky;
	top: 0;
	z-index: 3;
	background: var(--pc-acero-600, #21323E);
	color: var(--pc-papel, #fff);
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 10.5px;
	font-weight: 700;
	letter-spacing: .05em;
	text-transform: uppercase;
}

/* La identificación del sitio no se va al hacer scroll lateral: es lo
   mismo que el panel congelado de la hoja de Excel, y por la misma razón
   —diecisiete columnas a la derecha sin saber de qué torre se habla es
   una tabla que no se puede leer. */
.pec-reporte__fijo:nth-child(1),
.pec-reporte__fijo:nth-child(2) {
	position: sticky;
	z-index: 2;
	background: var(--pc-papel, #fff);
}

/* El ancho de la primera columna está fijado, no estimado: el `left` de la
   segunda tiene que coincidir con él al píxel, y un Site ID más largo de lo
   normal las solaparía. Con el ancho clavado, un ID largo se recorta. */
.pec-reporte__fijo:nth-child(1) {
	left: 0;
	width: 96px;
	min-width: 96px;
	max-width: 96px;
	overflow: hidden;
	text-overflow: ellipsis;
}

.pec-reporte__fijo:nth-child(2) {
	left: 96px;
	max-width: 260px;
	overflow: hidden;
	text-overflow: ellipsis;
}

.pec-reporte__tabla thead .pec-reporte__fijo:nth-child(1),
.pec-reporte__tabla thead .pec-reporte__fijo:nth-child(2) {
	z-index: 4;
	background: var(--pc-acero-600, #21323E);
}

.pec-reporte__id {
	font-family: var(--pc-tipo-dato, monospace);
	font-weight: 700;
}

.pec-reporte__celda {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	text-align: center;
	color: var(--pc-suave, #5C6874);
}

/* Hivis muy diluido: aguanta repetirse diecisiete veces por fila sin
   convertir la tabla en un semáforo. */
.pec-reporte__celda--completa {
	background: #EFF8CC;
	color: var(--pc-tinta, #101820);
}

.pec-reporte__celda--parcial {
	background: #FDF0D2;
	color: var(--pc-tinta, #101820);
	font-weight: 700;
}

.pec-reporte__avance { min-width: 120px; }

.pec-reporte__alerta {
	color: var(--pc-naranja, #C4400F);
	font-weight: 700;
}

.pec-reporte__leyenda {
	font-size: 12px;
	color: var(--pc-suave, #5C6874);
	margin: 10px 0 0;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 6px;
}

.pec-marca {
	display: inline-block;
	width: 15px;
	height: 12px;
	border: 1px solid var(--pc-borde, #D6DCE4);
	vertical-align: -1px;
}

.pec-marca--completa  { background: #EFF8CC; }
.pec-marca--parcial   { background: #FDF0D2; }
.pec-marca--pendiente { background: var(--pc-papel, #fff); }

/* ------------------------ bitácora reciente ------------------------- */

.pec-reporte__bitacora {
	list-style: none;
	margin: 0;
	padding: 0;
	max-height: 420px;
	overflow-y: auto;
}

.pec-reporte__jornada {
	display: grid;
	grid-template-columns: 104px 1fr;
	gap: 14px;
	padding: 11px 0;
	border-bottom: 1px solid var(--pc-borde, #D6DCE4);
}

.pec-reporte__jornada-fecha {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 12px;
	font-weight: 700;
	color: var(--pc-acero-700, #17242E);
}

.pec-reporte__jornada-cuerpo p { margin: 0; }

.pec-reporte__jornada-sitio {
	font-weight: 700;
	font-size: 13.5px;
	color: var(--pc-tinta, #101820);
}

.pec-reporte__jornada-acciones {
	font-size: 13px;
	color: var(--pc-tinta, #101820);
	margin-top: 2px !important;
}

.pec-reporte__jornada-meta {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	letter-spacing: .04em;
	text-transform: uppercase;
	color: var(--pc-suave, #5C6874);
	margin-top: 4px !important;
}

.pec-reporte__jornada-notas {
	font-size: 13px;
	color: var(--pc-suave, #5C6874);
	margin-top: 5px !important;
	white-space: pre-line;
}

@media (max-width: 640px) {
	.pec-reporte__jornada {
		grid-template-columns: 1fr;
		gap: 4px;
	}

	/* En móvil la columna fija se come media pantalla: mejor que la tabla
	   se deslice entera y se lea de una pasada. */
	.pec-reporte__fijo:nth-child(1),
	.pec-reporte__fijo:nth-child(2) {
		position: static;
		max-width: none;
	}
}


/* ====================================================================
   COMPARTIR LA UBICACIÓN
   ====================================================================

   Dos acciones de icono, del mismo tamaño en el globo del mapa, y en la
   ficha la de abrir el mapa en naranja: es la que produce el movimiento, y
   la regla del sistema es que el naranja se reserva para lo que lleva a
   alguna parte.

   Son iconos y no rótulos porque comparten fila con datos —las coordenadas
   en la ficha, «Ver sitio» en el globo— y dos cajas de texto en mayúsculas
   pesaban más que el botón que de verdad importa en cada sitio.
   ==================================================================== */

.pec-compartir {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 6px;
	margin: 10px 0 0;
}

.pec-compartir__accion {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex: 1 1 0;
	min-width: 0;
	padding: 7px 10px;
	border: 1px solid var(--pc-acero-600, #21323E);
	border-radius: 0;
	background: transparent;
	color: var(--pc-acero-700, #17242E);
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 11px;
	font-weight: 700;
	letter-spacing: .05em;
	text-transform: uppercase;
	text-align: center;
	text-decoration: none;
	line-height: 1.2;
	cursor: pointer;
	transition: background .14s, color .14s, border-color .14s;
}

.pec-compartir__accion:hover,
.pec-compartir__accion:focus-visible {
	background: var(--pc-acero-600, #21323E);
	color: var(--pc-papel, #fff);
}

/* Confirmación en el propio botón. Verde y no hivis: aquí no hay acero
   detrás que lo sostenga, y el amarillo sobre blanco no se lee. */
.pec-compartir__accion.es-hecho,
.pec-compartir__accion.es-hecho:hover {
	background: var(--pc-verde, #0F6B4F);
	border-color: var(--pc-verde, #0F6B4F);
	color: var(--pc-papel, #fff);
}

/* ---------------------------- solo icono ---------------------------- */

/*
   Cuadrado, no píldora: el vocabulario del módulo es el acero, que no
   tiene esquinas redondeadas. Y cuadrado de 38 px porque lo pulsa un dedo
   con guante —44 px en la ficha, donde sobra sitio—, no un ratón.

   El rótulo no desaparece, cambia de sitio: vive en `title` y
   `aria-label`. Un botón de icono sin ninguno de los dos es un botón mudo
   para quien usa lector de pantalla.
*/
.pec-compartir__accion--icono {
	flex: 0 0 auto;
	/* Propio y no heredado del tema: el borde vale 1 px en el globo y 2 px
	   en la ficha, así que sin esto el enlace y el botón del mismo par salen
	   de distinto tamaño —el `<button>` ya es `border-box` por el navegador
	   y el `<a>` no—. */
	box-sizing: border-box;
	width: 38px;
	height: 38px;
	padding: 0;
}

.pec-compartir__icono {
	width: 19px;
	height: 19px;
	display: block;
	pointer-events: none;
}

/* Los cuatro dibujos vienen en el HTML y aquí se enseña uno. Se hace con
   CSS y no cambiando el SVG desde JavaScript porque entonces el dibujo
   estaría escrito dos veces: en PHP y en el script. */
.pec-compartir__accion--icono .pec-compartir__icono {
	display: none;
}

.pec-compartir__accion--icono .pec-compartir__icono--base {
	display: block;
}

/* Sin Web Share el botón no comparte: copia. Lo dice el dibujo, además del
   rótulo, y lo pone `pec-compartir.js` al cargar. */
.pec-compartir__accion--icono.es-copia .pec-compartir__icono--base {
	display: none;
}

.pec-compartir__accion--icono.es-copia .pec-compartir__icono--copiar {
	display: block;
}

/* Después de `es-copia` a propósito: misma especificidad, así que manda el
   orden. La confirmación tiene que tapar cualquier estado anterior. */
.pec-compartir__accion--icono.es-hecho .pec-compartir__icono {
	display: none;
}

.pec-compartir__accion--icono.es-hecho .pec-compartir__icono--hecho {
	display: block;
}

.pec-compartir__accion--icono.es-error .pec-compartir__icono {
	display: none;
}

.pec-compartir__accion--icono.es-error .pec-compartir__icono--alerta {
	display: block;
}

/* Un fallo no se pinta del verde de «hecho», que es lo que pasaba cuando
   el aviso era solo texto dentro del mismo botón. */
.pec-compartir__accion.es-error,
.pec-compartir__accion.es-error:hover {
	background: var(--pc-rojo, #B3261E);
	border-color: var(--pc-rojo, #B3261E);
	color: var(--pc-papel, #fff);
}

/* -------------------------- en la ficha ----------------------------- */

.pec-compartir--ficha {
	margin: 0 0 14px;
	gap: 8px;
}

.pec-compartir--ficha .pec-compartir__accion {
	/* Aquí no se estiran: en una pantalla ancha dos botones a media página
	   parecen un formulario, no una acción. */
	flex: 0 0 auto;
	padding: 10px 18px;
	font-size: 12px;
	border-width: 2px;
}

.pec-compartir--ficha .pec-compartir__accion--icono {
	width: 44px;
	height: 44px;
	padding: 0;
}

.pec-compartir--ficha .pec-compartir__icono {
	width: 21px;
	height: 21px;
}

.pec-compartir__accion--principal {
	background: var(--pc-naranja, #C4400F);
	border-color: var(--pc-naranja, #C4400F);
	color: var(--pc-papel, #fff);
}

.pec-compartir__accion--principal:hover,
.pec-compartir__accion--principal:focus-visible {
	background: var(--pc-naranja-hondo, #97300A);
	border-color: var(--pc-naranja-hondo, #97300A);
}

.pec-compartir__coords {
	font-family: var(--pc-tipo-dato, monospace);
	font-size: 12px;
	letter-spacing: .03em;
	color: var(--pc-suave, #5C6874);
	margin-left: 2px;
}

/* --------------------- dentro del globo del mapa -------------------- */

/* El globo mide poco más de 240 px: los dos botones se reparten el ancho
   y el rótulo se encoge un punto antes que partirse en dos líneas. */
.pec-globo .pec-compartir {
	margin: 8px 0 0;
}

.pec-globo .pec-compartir__accion {
	font-size: 10px;
	padding: 6px 8px;
	letter-spacing: .04em;
}

.pec-globo .pec-compartir__accion--icono {
	width: 34px;
	height: 34px;
	padding: 0;
}

.pec-globo .pec-compartir__icono {
	width: 17px;
	height: 17px;
}

.pec-globo .pec-globo__boton {
	margin-top: 6px;
}

@media (max-width: 480px) {
	.pec-compartir--ficha .pec-compartir__accion {
		flex: 1 1 auto;
	}

	/* Los de icono no: estirados serían dos barras con un dibujo perdido en
	   el centro. Mantienen su cuadrado y las coordenadas caen debajo. */
	.pec-compartir--ficha .pec-compartir__accion--icono {
		flex: 0 0 auto;
	}

	/* Las coordenadas pasan a su propia línea: en un teléfono empujaban el
	   botón de compartir fuera de la fila. */
	.pec-compartir__coords {
		flex: 1 0 100%;
		margin: 2px 0 0;
	}
}
