/* ---------------------------------------------------------------------------
   badoc maps — hoja de estilos única.
   Sin framework y sin paso de compilación: se copia y funciona.

   La paleta y la tipografía son las del blog (tema Twenty Fifteen adaptado),
   para que el mapa se lea como una sección más del sitio y no como una
   aplicación pegada al lado. El naranja de la marca queda como acento.

   Sustituye a las 113 líneas de 2011, que tenían anchura fija de 800 px y
   ninguna consulta de medios: en móvil la aplicación era inservible.
--------------------------------------------------------------------------- */

:root {
  /* Grises del blog */
  --texto:        #333;
  --texto-suave:  #707070;
  --linea:        #eaeaea;
  --fondo:        #fff;
  --fondo-suave:  #f7f7f7;

  /* Acento de la marca */
  --acento:       #F2952B;
  --acento-oscuro:#c9741a;

  /* Agua y tierra, heredando el código de color de los marcadores viejos */
  --agua:         #2f6fb5;
  --agua-oscuro:  #1b4a7d;
  --tierra:       #3f9142;
  --tierra-oscuro:#2a6b2c;

  --sombra:       0 1px 3px rgba(0,0,0,.12), 0 4px 12px rgba(0,0,0,.08);
  --radio:        6px;
  --serif:        "Noto Serif", Georgia, "Times New Roman", serif;
  --sans:         "Noto Sans", -apple-system, BlinkMacSystemFont, "Segoe UI",
                  Roboto, Helvetica, Arial, sans-serif;
}

* { box-sizing: border-box; }

html, body {
  margin: 0;
  padding: 0;
  height: 100%;
}

body {
  font: 16px/1.55 var(--sans);
  color: var(--texto);
  background: var(--fondo);
  -webkit-text-size-adjust: 100%;
}

/* --- Estructura: el mapa ocupa todo lo que sobra --------------------------- */

.app {
  display: flex;
  flex-direction: column;
  height: 100%;
  min-height: 100vh;
}

.cabecera {
  display: flex;
  align-items: baseline;
  gap: .75rem;
  padding: .7rem 1rem;
  border-bottom: 1px solid var(--linea);
  background: var(--fondo);
  flex: 0 0 auto;
}

.cabecera h1 {
  font: 700 1.15rem/1.2 var(--serif);
  margin: 0;
}

.cabecera .sub {
  color: var(--texto-suave);
  font-size: .85rem;
}

.cabecera nav {
  margin-left: auto;
  font-size: .9rem;
}

.cabecera nav a {
  color: var(--texto-suave);
  text-decoration: none;
  border-bottom: 1px solid transparent;
}

.cabecera nav a:hover,
.cabecera nav a:focus { color: var(--acento-oscuro); border-bottom-color: var(--acento); }

.lienzo {
  position: relative;
  flex: 1 1 auto;
  min-height: 18rem;
  background: var(--fondo-suave);
}

#mapa, .respaldo { position: absolute; inset: 0; }

/* Sin cromo cuando la pagina va incrustada: o bien porque se ha pedido con
   ?embed=1, o bien porque se ha detectado que estamos dentro de un iframe
   (.dins-iframe la pone un script del <head>). En el lateral del blog, la
   cabecera y el enlace a la gestion solo estorban. */
.incrustado .cabecera,
.dins-iframe .cabecera { display: none; }
.incrustado .linea-temps,
.dins-iframe .linea-temps { padding: .45rem .6rem; }

/* --- Leyenda -------------------------------------------------------------- */

.llegenda {
  position: absolute;
  left: .75rem;
  bottom: .75rem;
  z-index: 3;
  background: rgba(255,255,255,.94);
  border: 1px solid var(--linea);
  border-radius: var(--radio);
  box-shadow: var(--sombra);
  font-size: .85rem;
  max-width: 14rem;
}

.llegenda > summary {
  cursor: pointer;
  padding: .45rem .7rem;
  font-weight: 700;
  list-style: none;
}

.llegenda > summary::-webkit-details-marker { display: none; }
.llegenda > summary::after { content: " ▾"; color: var(--texto-suave); }
.llegenda[open] > summary::after { content: " ▴"; }

.llegenda ul { margin: 0; padding: 0 .7rem .6rem; list-style: none; }
.llegenda li { display: flex; align-items: center; gap: .5rem; padding: .12rem 0; }
.llegenda .n { margin-left: auto; color: var(--texto-suave); font-variant-numeric: tabular-nums; }

.punto {
  width: .7rem; height: .7rem;
  border-radius: 50%;
  flex: 0 0 auto;
}
.punto.agua   { background: var(--agua);   border: 1px solid var(--agua-oscuro); }
.punto.tierra { background: var(--tierra); border: 1px solid var(--tierra-oscuro); }
.punto.ultimo { background: var(--acento); border: 1px solid var(--acento-oscuro); }

/* --- Ficha del punto ------------------------------------------------------ */

.ficha {
  font: 14px/1.5 var(--sans);
  color: var(--texto);
  max-width: 17rem;
}

.ficha .data {
  font: 700 .8rem/1.3 var(--sans);
  color: var(--texto-suave);
  text-transform: uppercase;
  letter-spacing: .03em;
  margin-bottom: .15rem;
}

.ficha .comentari { margin: 0 0 .4rem; }
.ficha .comentari:empty::before { content: "Sense comentari"; color: var(--texto-suave); font-style: italic; }

.ficha .coord {
  font-size: .78rem;
  color: var(--texto-suave);
  font-variant-numeric: tabular-nums;
}

.ficha .etiquetes { margin-top: .4rem; display: flex; gap: .35rem; flex-wrap: wrap; }

.etiqueta {
  font-size: .7rem;
  text-transform: uppercase;
  letter-spacing: .04em;
  padding: .1rem .4rem;
  border-radius: 3px;
  border: 1px solid var(--linea);
  color: var(--texto-suave);
  background: var(--fondo-suave);
}
.etiqueta.agua   { border-color: var(--agua);   color: var(--agua-oscuro); background: #eef4fb; }
.etiqueta.tierra { border-color: var(--tierra); color: var(--tierra-oscuro); background: #eef7ee; }

/* --- Línea de tiempo ------------------------------------------------------ */

.linea-temps {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: .7rem;
  padding: .6rem 1rem;
  border-top: 1px solid var(--linea);
  background: var(--fondo);
}

.reproduir {
  flex: 0 0 auto;
  width: 2.2rem; height: 2.2rem;
  border: 1px solid var(--linea);
  border-radius: 50%;
  background: var(--fondo);
  color: var(--texto);
  font-size: .95rem;
  cursor: pointer;
  line-height: 1;
}
.reproduir:hover { border-color: var(--acento); color: var(--acento-oscuro); }
.reproduir:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; }

.linea-temps input[type=range] {
  flex: 1 1 auto;
  min-width: 6rem;
  accent-color: var(--acento);
}

.linea-temps .estat {
  flex: 0 0 auto;
  font-size: .8rem;
  color: var(--texto-suave);
  font-variant-numeric: tabular-nums;
  min-width: 11rem;
  text-align: right;
}

/* --- Avisos --------------------------------------------------------------- */

.avis {
  position: absolute;
  z-index: 4;
  top: .75rem; left: .75rem; right: .75rem;
  margin: 0 auto;
  max-width: 34rem;
  background: #fff8f0;
  border: 1px solid var(--acento);
  border-left-width: 3px;
  border-radius: var(--radio);
  padding: .6rem .8rem;
  font-size: .85rem;
  box-shadow: var(--sombra);
}
.avis strong { display: block; }
.avis code { background: var(--linea); padding: .05em .3em; border-radius: 3px; font-size: .95em; }

/* --- Respaldo sin Google Maps --------------------------------------------- */

.respaldo { display: block; }
.respaldo svg { width: 100%; height: 100%; display: block; }
.respaldo .mar    { fill: #eaf1f7; }
.respaldo .traca  { fill: none; stroke: #c0392b; stroke-opacity: .55; stroke-width: 1.2; }
.respaldo circle  { cursor: pointer; }
.respaldo .fitxa-flotant {
  position: absolute;
  background: var(--fondo);
  border: 1px solid var(--linea);
  border-radius: var(--radio);
  box-shadow: var(--sombra);
  padding: .6rem .7rem;
  pointer-events: none;
  z-index: 3;
}

/* --- Móvil ---------------------------------------------------------------- */

@media (max-width: 34rem) {
  .cabecera { flex-wrap: wrap; gap: .3rem .6rem; padding: .6rem .8rem; }
  .cabecera .sub { flex-basis: 100%; }
  .linea-temps { flex-wrap: wrap; padding: .5rem .8rem; }
  .linea-temps .estat { min-width: 0; flex-basis: 100%; text-align: left; order: 3; }
  .llegenda { max-width: 11rem; font-size: .8rem; }
}

/* ===========================================================================
   Zona de gestión
   La app vieja tenía anchura fija de 800 px, tablas a 12 px y fondos naranja
   pálido con texto negro. Aquí: contenedor fluido, 16 px, y tabla que se
   convierte en tarjetas en móvil.
   =========================================================================== */

body.gestio,
body.centrat { height: auto; min-height: 100%; background: var(--fondo); }

/* --- Barra superior ------------------------------------------------------- */

.barra {
  display: flex;
  align-items: center;
  gap: 1rem;
  flex-wrap: wrap;
  padding: .7rem 1.2rem;
  border-bottom: 1px solid var(--linea);
  position: sticky;
  top: 0;
  background: rgba(255,255,255,.97);
  z-index: 10;
}

.barra .marca {
  font: 700 1.05rem/1.2 var(--serif);
  color: var(--texto);
  text-decoration: none;
}

.barra nav { display: flex; gap: .2rem; flex-wrap: wrap; }

.barra nav a {
  color: var(--texto-suave);
  text-decoration: none;
  padding: .3rem .6rem;
  border-radius: 4px;
  font-size: .92rem;
}
.barra nav a:hover { background: var(--fondo-suave); color: var(--texto); }
.barra nav a.actiu { color: var(--texto); font-weight: 700; box-shadow: inset 0 -2px 0 var(--acento); }
.barra nav a:focus-visible { outline: 2px solid var(--acento); outline-offset: 1px; }

.barra .sortir { margin-left: auto; }

/* --- Contenido ------------------------------------------------------------ */

.contingut {
  max-width: 72rem;
  margin: 0 auto;
  padding: 1.4rem 1.2rem 4rem;
}

.contingut h1 { font: 700 1.5rem/1.25 var(--serif); margin: 0 0 1.2rem; }
.contingut h2 { font: 700 1.05rem/1.3 var(--serif); margin: 2rem 0 .6rem; }

/* --- Botones -------------------------------------------------------------- */

.boto {
  font: 400 .95rem/1 var(--sans);
  padding: .5rem .9rem;
  border-radius: 4px;
  border: 1px solid var(--linea);
  background: var(--fondo);
  color: var(--texto);
  cursor: pointer;
}
.boto:hover { border-color: var(--texto-suave); }
.boto:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; }

.boto.primari {
  background: var(--acento);
  border-color: var(--acento-oscuro);
  color: #fff;
  font-weight: 700;
}
.boto.primari:hover { background: var(--acento-oscuro); }

.boto.discret { color: var(--texto-suave); font-size: .88rem; padding: .35rem .7rem; }
.boto.perill { color: #a3231b; border-color: #e2b8b4; }
.boto.perill:hover { background: #fdf3f2; border-color: #a3231b; }

/* --- Mensajes ------------------------------------------------------------- */

.missatge {
  padding: .6rem .9rem;
  border-radius: var(--radio);
  border: 1px solid var(--linea);
  border-left-width: 3px;
  margin: 0 0 1.2rem;
  font-size: .95rem;
}
.missatge.ok    { background: #f1f8f1; border-left-color: var(--tierra); }
.missatge.error { background: #fdf3f2; border-left-color: #c0392b; }

/* --- Fichas de datos ------------------------------------------------------ */

.fitxes {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr));
  gap: .8rem;
}

.fitxa-dada {
  border: 1px solid var(--linea);
  border-radius: var(--radio);
  padding: .9rem 1rem;
  background: var(--fondo-suave);
}
.fitxa-dada .xifra {
  display: block;
  font: 700 1.6rem/1.1 var(--serif);
  font-variant-numeric: tabular-nums;
}
.fitxa-dada .etiqueta-dada {
  display: block;
  font-size: .82rem;
  color: var(--texto-suave);
  margin-top: .15rem;
}

/* --- Lista simple --------------------------------------------------------- */

.llista-simple { list-style: none; margin: 0; padding: 0; max-width: 32rem; }
.llista-simple li {
  display: flex;
  gap: .6rem;
  padding: .4rem 0;
  border-bottom: 1px solid var(--linea);
}
.llista-simple .n { margin-left: auto; color: var(--texto-suave); font-variant-numeric: tabular-nums; }

/* --- Tablas --------------------------------------------------------------- */

/* Nunca debe hacer que la página entera se desplace en horizontal. */
.taula-envoltant { overflow-x: auto; border: 1px solid var(--linea); border-radius: var(--radio); }

table { border-collapse: collapse; width: 100%; font-size: .95rem; }
thead th {
  text-align: left;
  font-size: .78rem;
  text-transform: uppercase;
  letter-spacing: .04em;
  color: var(--texto-suave);
  padding: .55rem .7rem;
  background: var(--fondo-suave);
  border-bottom: 1px solid var(--linea);
  white-space: nowrap;
}
tbody td { padding: .55rem .7rem; border-bottom: 1px solid var(--linea); vertical-align: top; }
tbody tr:last-child td { border-bottom: 0; }
tbody tr:hover { background: #fcfcfc; }

.nowrap { white-space: nowrap; }
.xifres { font-variant-numeric: tabular-nums; font-size: .85rem; color: var(--texto-suave); }

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

body.centrat { display: flex; align-items: center; justify-content: center; padding: 2rem 1rem; }

.acces {
  width: 100%;
  max-width: 20rem;
  text-align: center;
}
.acces h1 { font: 700 1.4rem/1.2 var(--serif); margin: 0 0 .2rem; }
.acces form { margin: 1.4rem 0 1rem; text-align: left; }
.acces label {
  display: block;
  font-size: .85rem;
  color: var(--texto-suave);
  margin-bottom: .25rem;
}
.acces input[type=password] {
  width: 100%;
  font: 400 1rem/1 var(--sans);
  padding: .55rem .7rem;
  border: 1px solid var(--linea);
  border-radius: 4px;
  margin-bottom: .8rem;
}
.acces input[type=password]:focus {
  outline: 2px solid var(--acento);
  outline-offset: 1px;
  border-color: var(--acento);
}
.acces .boto { width: 100%; }
.acces .ajuda { font-size: .85rem; color: var(--texto-suave); }
.acces .ajuda a { color: var(--texto-suave); }

.ajuda { font-size: .88rem; color: var(--texto-suave); }

/* --- Móvil: la tabla pasa a tarjetas -------------------------------------- */

@media (max-width: 40rem) {
  .barra { padding: .6rem .8rem; gap: .5rem; }
  .barra .sortir { margin-left: 0; }
  .contingut { padding: 1rem .8rem 3rem; }

  .taula-envoltant { border: 0; overflow: visible; }
  table, thead, tbody, tr, td { display: block; width: 100%; }
  thead { display: none; }
  tbody tr {
    border: 1px solid var(--linea);
    border-radius: var(--radio);
    margin-bottom: .7rem;
    padding: .5rem .2rem;
  }
  tbody td { border-bottom: 0; padding: .25rem .7rem; }
  tbody td:empty { display: none; }
}

/* --- Listado: cabecera de sección, filtros y paginación ------------------- */

.capcalera-seccio {
  display: flex;
  align-items: baseline;
  gap: 1rem;
  flex-wrap: wrap;
  margin-bottom: 1rem;
}
.capcalera-seccio h1 { margin: 0; }
.capcalera-seccio .exportar { margin-left: auto; display: flex; gap: .4rem; }

.filtres {
  display: flex;
  flex-wrap: wrap;
  gap: .7rem 1rem;
  align-items: flex-end;
  padding: .9rem 1rem;
  border: 1px solid var(--linea);
  border-radius: var(--radio);
  background: var(--fondo-suave);
  margin-bottom: 1rem;
}
.filtres .camp { display: flex; flex-direction: column; gap: .2rem; }
.filtres .camp.cerca { flex: 1 1 14rem; min-width: 10rem; }
.filtres .camp.accions { flex-direction: row; gap: .4rem; align-items: center; }
.filtres label { font-size: .78rem; color: var(--texto-suave); }
.filtres input[type=search],
.filtres select {
  font: 400 .95rem/1 var(--sans);
  padding: .42rem .55rem;
  border: 1px solid var(--linea);
  border-radius: 4px;
  background: var(--fondo);
  color: var(--texto);
}
.filtres input[type=search] { width: 100%; }
.filtres input:focus, .filtres select:focus {
  outline: 2px solid var(--acento);
  outline-offset: 1px;
}

.resum { color: var(--texto-suave); font-size: .92rem; margin: 0 0 .8rem; }

table.llistat thead a {
  color: var(--texto-suave);
  text-decoration: none;
  white-space: nowrap;
}
table.llistat thead a:hover { color: var(--texto); }
table.llistat thead a.ordenada { color: var(--texto); }
table.llistat .comentari-cel { min-width: 14rem; }
table.llistat .buit { color: var(--texto-suave); font-style: italic; }
table.llistat .accions-cel a { margin-right: .5rem; font-size: .88rem; }
table.llistat .accions-cel a.perill { color: #a3231b; }

.nomes-lectors {
  position: absolute;
  width: 1px; height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}

.paginacio {
  display: flex;
  gap: .25rem;
  flex-wrap: wrap;
  align-items: center;
  margin: 1.2rem 0;
  font-size: .92rem;
}
.paginacio a, .paginacio span {
  padding: .35rem .6rem;
  border: 1px solid var(--linea);
  border-radius: 4px;
  text-decoration: none;
  color: var(--texto);
  min-width: 2.2rem;
  text-align: center;
}
.paginacio a:hover { border-color: var(--texto-suave); }
.paginacio .actual { background: var(--acento); border-color: var(--acento-oscuro); color: #fff; font-weight: 700; }
.paginacio .inactiu, .paginacio .buit { color: var(--texto-suave); border-color: transparent; }

@media (max-width: 40rem) {
  .capcalera-seccio .exportar { margin-left: 0; }
  .filtres { padding: .7rem .8rem; }
  .filtres .camp { flex: 1 1 8rem; }
  /* En tarjetas, prefijar cada celda con su etiqueta */
  table.llistat tbody td::before {
    content: attr(data-etiqueta);
    display: block;
    font-size: .7rem;
    text-transform: uppercase;
    letter-spacing: .04em;
    color: var(--texto-suave);
  }
}

/* --- Formularios ---------------------------------------------------------- */

.formulari { max-width: 46rem; }

.formulari .fila {
  display: flex;
  flex-wrap: wrap;
  gap: .8rem 1.2rem;
  align-items: flex-start;
  margin-bottom: 1rem;
}

.formulari .camp { display: flex; flex-direction: column; gap: .25rem; min-width: 0; }
.formulari .fila > .camp { flex: 1 1 12rem; }
.formulari .camp.estret { flex: 0 1 6rem; }

.formulari label {
  font-size: .82rem;
  color: var(--texto-suave);
  font-weight: 700;
}

.formulari input[type=text],
.formulari input[type=date],
.formulari select {
  font: 400 1rem/1.2 var(--sans);
  padding: .5rem .6rem;
  border: 1px solid var(--linea);
  border-radius: 4px;
  background: var(--fondo);
  color: var(--texto);
  width: 100%;
  min-width: 0;
}
.formulari input:focus, .formulari select:focus {
  outline: 2px solid var(--acento);
  outline-offset: 1px;
  border-color: var(--acento);
}
.formulari input:disabled, .formulari select:disabled { background: var(--fondo-suave); color: var(--texto-suave); }

.formulari .camp.amb-error input,
.formulari .camp.amb-error select { border-color: #c0392b; }

.error-camp { font-size: .82rem; color: #a3231b; }
.ajuda-camp { font-size: .78rem; color: var(--texto-suave); }
.valor-fix { margin: .35rem 0 0; }

.coordenades {
  border: 1px solid var(--linea);
  border-radius: var(--radio);
  padding: .9rem 1rem 1rem;
  margin: 0 0 1.2rem;
}
.coordenades legend {
  font: 700 .82rem/1 var(--sans);
  color: var(--texto-suave);
  padding: 0 .35rem;
}

.tria-mode { display: flex; gap: 1.2rem; margin-bottom: .9rem; font-size: .92rem; }
.tria-mode label { display: flex; align-items: center; gap: .35rem; font-weight: 400; color: var(--texto); cursor: pointer; }
.tria-mode input[type=radio] { accent-color: var(--acento); }

.fila.dms { align-items: flex-end; gap: .5rem; }
.etiqueta-dms {
  flex: 0 0 5rem;
  font-size: .82rem;
  font-weight: 700;
  color: var(--texto-suave);
  padding-bottom: .55rem;
}
.posicio-actual { margin: .2rem 0 0; }

.accions-formulari {
  display: flex;
  gap: .6rem;
  align-items: center;
  margin-top: 1.4rem;
  flex-wrap: wrap;
}

/* --- Ficha de un punto ---------------------------------------------------- */

.resum-punt {
  border: 1px solid var(--linea);
  border-radius: var(--radio);
  padding: .3rem 1rem;
  max-width: 46rem;
  margin-bottom: 1.4rem;
}
.resum-punt dl { margin: 0; }
.resum-punt dt {
  font-size: .74rem;
  text-transform: uppercase;
  letter-spacing: .04em;
  color: var(--texto-suave);
  margin-top: .7rem;
}
.resum-punt dd { margin: .1rem 0 .7rem; }
.resum-punt .buit { color: var(--texto-suave); font-style: italic; }

.mapa-incrustat {
  border: 1px solid var(--linea);
  border-radius: var(--radio);
  overflow: hidden;
  height: 26rem;
  max-width: 60rem;
}
.mapa-incrustat iframe { width: 100%; height: 100%; border: 0; display: block; }

@media (max-width: 40rem) {
  .fila.dms { gap: .4rem; }
  .etiqueta-dms { flex-basis: 100%; padding-bottom: 0; }
  .formulari .camp.estret { flex: 1 1 4rem; }
  .mapa-incrustat { height: 18rem; }
}
