/* ═══════════════════════════════════════════════════════════
   Brimedent — hoja de estilos
   Petróleo profundo, crema y mucho aire. Jost para estructura,
   Spectral para la prosa.
   ═══════════════════════════════════════════════════════════ */

:root {
  --petroleo:  #0F5266;
  --profundo:  #0A3B4A;
  --crema:     #E9E7DD;
  --marfil:    #F5F3EC;
  --menta:     #7FC9BC;
  --carbon:    #1A2226;

  --display: "Jost", system-ui, sans-serif;
  --prosa:   "Spectral", Georgia, serif;

  --aire:     clamp(5rem, 11vw, 9.5rem);
  --margen:   clamp(1.5rem, 5vw, 5rem);
  --ancho:    min(1180px, 100% - var(--margen) * 2);
  --borde:    1px solid rgb(233 231 221 / .16);
  --borde-cl: 1px solid rgb(15 82 102 / .16);
  --curva:    cubic-bezier(.22, 1, .36, 1);
}

*, *::before, *::after { box-sizing: border-box; }

/* El fondo vive en <html>, no en <body>. Así, al pasar de una página a
   otra puedo desvanecer el contenido sin que asome el blanco del navegador:
   el petróleo nunca se mueve y el cambio se siente como una recomposición,
   no como un salto. */
html {
  scroll-behavior: smooth;
  -webkit-text-size-adjust: 100%;
  background: #0F5266;
}

/* La entrada es CSS puro: si el JavaScript falla, el contenido aparece igual.
   OJO: en <body> solo se anima la opacidad. Un transform en <body> convierte
   todo position:fixed descendiente en absolute, y el fondo de molares se iría
   desplazando con la página. El movimiento va en <main>, que no lo contiene. */
body { animation: entrarPagina .85s cubic-bezier(.22, 1, .36, 1) both; }
@keyframes entrarPagina { from { opacity: 0; } to { opacity: 1; } }

main { animation: subirPagina .95s cubic-bezier(.22, 1, .36, 1) both; }
@keyframes subirPagina { from { transform: translateY(16px); } to { transform: none; } }

@media (prefers-reduced-motion: reduce) {
  body, main { animation: none; }
}
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
}

body {
  margin: 0;
  background: var(--petroleo);
  color: var(--crema);
  font-family: var(--prosa);
  font-weight: 300;
  font-size: clamp(1rem, .96rem + .2vw, 1.125rem);
  line-height: 1.75;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}

img, svg { display: block; max-width: 100%; }
a { color: inherit; }

.saltar {
  position: absolute; left: -9999px; top: 0; z-index: 100;
  background: var(--crema); color: var(--petroleo);
  padding: .8rem 1.4rem; font-family: var(--display);
}
.saltar:focus { left: 1rem; top: 1rem; }

:focus-visible { outline: 2px solid var(--menta); outline-offset: 3px; }

/* ─── molares de fondo ─────────────────────────────────── */
.fondo {
  position: fixed; inset: 0; z-index: 0;
  pointer-events: none; overflow: hidden;
}
/* Distintas opacidades y desenfoques para que se lean como profundidad
   y no como manchas planas. Nunca deben competir con el texto. */
.molar {
  position: absolute;
  color: var(--crema);
  will-change: transform;
}
.m1 { width: 14vw; left: -3vw;  top:  6vh; opacity: .030; filter: blur(1px); }
.m2 { width:  8vw; right: 9vw;  top: 22vh; opacity: .045; }
.m3 { width: 17vw; left: 64vw;  top: 40vh; opacity: .022; filter: blur(2px); }
.m4 { width:  7vw; left: 15vw;  top: 58vh; opacity: .050; }
.m5 { width: 11vw; right: -2vw; top: 72vh; opacity: .028; filter: blur(1px); }
.m6 { width:  6vw; left: 44vw;  top: 84vh; opacity: .042; }
.m7 { width: 13vw; right: 26vw; top: 52vh; opacity: .020; filter: blur(2px); }

/* Sobre las secciones claras el crema no se ve: ahí los molares van
   en petróleo, con su propia capa dentro de la sección. */
.fondo--claro { position: absolute; inset: 0; overflow: hidden; pointer-events: none; z-index: 0; }
.fondo--claro .molar { color: var(--petroleo); }
.seccion--claro > .envoltura { position: relative; z-index: 1; }

/* ─── cabecera ─────────────────────────────────────────── */
.cabecera {
  position: fixed; inset: 0 0 auto; z-index: 50;
  display: flex; align-items: center; justify-content: space-between;
  gap: 1rem;
  padding: 1.1rem var(--margen);
  font-family: var(--display);
  transition: background .5s var(--curva), backdrop-filter .5s var(--curva),
              border-color .5s var(--curva), padding .5s var(--curva);
  border-bottom: 1px solid transparent;
}
.cabecera.pegada {
  background: rgb(10 59 74 / .82);
  backdrop-filter: blur(14px);
  border-bottom-color: rgb(233 231 221 / .12);
  padding-block: .7rem;
}
/* El logo completo, con la molar en su M. Nunca el diente suelto al lado. */
.cabecera__logo {
  display: block; line-height: 0;
  opacity: 0; transition: opacity .6s var(--curva);
}
.cabecera.pegada .cabecera__logo { opacity: 1; }
.cabecera__logo img { width: clamp(132px, 13vw, 168px); height: auto; }

.cabecera__nav { display: flex; align-items: center; gap: clamp(1rem, 2.4vw, 2.2rem); }
.cabecera__nav a {
  text-decoration: none; font-weight: 300;
  font-size: .82rem; letter-spacing: .16em; text-transform: uppercase;
  opacity: .78; transition: opacity .3s;
}
.cabecera__nav a:hover { opacity: 1; }
/* ─── menú de celular ──────────────────────────────────── */
.menu {
  display: none;
  width: 44px; height: 44px; padding: 0;
  background: none; border: 0; cursor: pointer;
  position: relative; z-index: 60;
}
.menu span {
  display: block; position: absolute; left: 11px;
  width: 22px; height: 1.5px; background: var(--crema);
  transition: transform .4s var(--curva), opacity .3s;
}
/* Con el panel abierto la cabecera queda encima del vidrio: sin esto el
   botón se perdería sobre el desenfoque. */
.menu[aria-expanded="true"] span { background: var(--crema); }
.menu span:nth-child(1) { top: 18px; }
.menu span:nth-child(2) { top: 25px; }
.menu[aria-expanded="true"] span:nth-child(1) { transform: translateY(3.5px) rotate(45deg); }
.menu[aria-expanded="true"] span:nth-child(2) { transform: translateY(-3.5px) rotate(-45deg); }

/* Oculto por defecto. Si esto fuera "display: grid" la clase le ganaría al
   atributo [hidden] del navegador y el panel taparía la página entera aunque
   el JavaScript lo diera por cerrado.

   z-index POR DEBAJO de la cabecera (50). El botón tiene z-index 60, pero vive
   dentro de la cabecera, que crea su propio contexto de apilamiento: ese 60
   solo compite con sus hermanos, no con el panel. Si el panel va por encima de
   50, se traga la cabecera entera y con ella el botón de cerrar. */
.panel {
  position: fixed; inset: 0; z-index: 45;
  display: none; place-items: center;
  background: rgb(10 59 74 / .95);
}
.panel[data-abierto] { display: grid; }

/* Vidrio esmerilado donde el navegador lo soporte: se alcanza a ver la página
   detrás, desenfocada. Donde no, queda el fondo casi opaco de arriba. */
@supports (backdrop-filter: blur(4px)) or (-webkit-backdrop-filter: blur(4px)) {
  .panel {
    background: rgb(10 59 74 / .62);
    -webkit-backdrop-filter: blur(26px) saturate(1.25);
    backdrop-filter: blur(26px) saturate(1.25);
  }
}
.panel__nav {
  display: grid; gap: 1.8rem; justify-items: center; text-align: center;
}
.panel__nav a:not(.boton) {
  font-family: var(--display); font-weight: 300;
  font-size: 1.75rem; letter-spacing: .1em; text-transform: uppercase;
  color: var(--crema); text-decoration: none;
}
.panel__nav .boton { margin-top: 1rem; }

/* Cada enlace entra escalonado al abrirse el panel. */
.panel[data-abierto] .panel__nav > * {
  animation: entrarMenu .55s var(--curva) both;
}
.panel[data-abierto] .panel__nav > *:nth-child(1) { animation-delay: .06s; }
.panel[data-abierto] .panel__nav > *:nth-child(2) { animation-delay: .12s; }
.panel[data-abierto] .panel__nav > *:nth-child(3) { animation-delay: .18s; }
.panel[data-abierto] .panel__nav > *:nth-child(4) { animation-delay: .26s; }
@keyframes entrarMenu { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: none; } }

body[data-sin-scroll] { overflow: hidden; }

@media (max-width: 720px) {
  /* En celular manda la hamburguesa: el botón de agendar vive dentro del menú. */
  .cabecera__nav { display: none; }
  .menu { display: block; }
}
@media (min-width: 721px) {
  .panel { display: none !important; }
}
@media (prefers-reduced-motion: reduce) {
  .panel[data-abierto] .panel__nav > * { animation: none; }
}

/* ─── botones ──────────────────────────────────────────── */
.boton {
  --fondo: var(--crema);
  --tinta: var(--petroleo);
  display: inline-block;
  background: var(--fondo); color: var(--tinta);
  font-family: var(--display); font-weight: 400;
  font-size: .82rem; letter-spacing: .16em; text-transform: uppercase;
  padding: 1.05rem 2.1rem;
  border: 1px solid var(--fondo); border-radius: 999px;
  text-decoration: none; opacity: 1 !important;
  transition: transform .4s var(--curva), background .4s, color .4s;
}
.boton { position: relative; }
/* El hover levanta el botón 2 px. Sin este colchón invisible, al pasar el
   mouse justo por la orilla el botón se aleja del cursor, pierde el hover,
   vuelve a bajar y entra en un parpadeo sin fin. El ::after extiende el área
   sensible hacia abajo lo suficiente para que eso no ocurra. */
.boton::after { content: ""; position: absolute; inset: -4px -4px -7px; }
.boton:hover { transform: translateY(-2px); }
.boton--linea { --fondo: transparent; --tinta: var(--crema); border-color: rgb(233 231 221 / .38); }
.boton--linea:hover { background: rgb(233 231 221 / .1); }
.boton--chico { padding: .7rem 1.4rem; font-size: .74rem; }

/* ─── portada ──────────────────────────────────────────── */
.portada {
  position: relative; z-index: 1;
  min-height: 100svh;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  text-align: center;
  padding: 7rem var(--margen) 5rem;
  gap: 1.6rem;
}
.portada__logo { width: min(760px, 88vw); }
.portada__logo svg { width: 100%; height: auto; color: var(--crema); overflow: visible; }

/* La muela del logo responde al mouse y al clic. Es decorativa:
   no recibe foco, así que nunca dibuja un recuadro alrededor. */
.diente { cursor: pointer; outline: none; -webkit-tap-highlight-color: transparent; }
@media (hover: none) { .diente { cursor: default; } }

.portada__linea {
  margin: .4rem 0 0;
  font-family: var(--display); font-weight: 200;
  font-size: clamp(1.05rem, .8rem + 1.1vw, 1.7rem);
  letter-spacing: .14em;
  opacity: 0;
}
.portada__sub {
  margin: 0; max-width: 34ch;
  font-size: clamp(.98rem, .93rem + .25vw, 1.15rem);
  line-height: 1.8; opacity: 0;
  color: rgb(233 231 221 / .74);
}
.portada__acciones { display: flex; flex-wrap: wrap; gap: .9rem; justify-content: center; opacity: 0; }

.portada__baja {
  position: absolute; bottom: 2.2rem; left: 50%;
  translate: -50% 0; opacity: 0;
}
.portada__baja span {
  display: block; width: 1px; height: 52px;
  background: linear-gradient(to bottom, rgb(233 231 221 / .5), transparent);
  animation: caer 2.6s var(--curva) infinite;
}
@keyframes caer {
  0%   { transform: scaleY(0); transform-origin: top; }
  45%  { transform: scaleY(1); transform-origin: top; }
  55%  { transform: scaleY(1); transform-origin: bottom; }
  100% { transform: scaleY(0); transform-origin: bottom; }
}

/* ─── secciones ────────────────────────────────────────── */
.seccion { position: relative; z-index: 1; padding: var(--aire) 0; }
.seccion--claro {
  background: var(--marfil);
  color: var(--carbon);
}
.seccion--claro .rotulo { color: rgb(15 82 102 / .92); }
.seccion--claro .rotulo::before { background: rgb(15 82 102 / .55); }

.envoltura { width: var(--ancho); margin-inline: auto; }
.envoltura--angosta { max-width: 820px; }

/* Estos rótulos iban en peso 300 al 55% de opacidad y prácticamente no se
   leían. Peso 500 y más contraste: siguen siendo discretos pero presentes. */
.rotulo {
  display: flex; align-items: center; gap: .9rem;
  margin: 0 0 1.6rem;
  font-family: var(--display); font-weight: 500;
  font-size: .84rem; letter-spacing: .26em; text-transform: uppercase;
  color: rgb(233 231 221 / .88);
}
.rotulo::before { content: ""; width: 34px; height: 1px; background: rgb(233 231 221 / .55); flex: none; }

.titulo {
  margin: 0 0 3.5rem;
  font-family: var(--display); font-weight: 200;
  font-size: clamp(2rem, 1.2rem + 3.4vw, 4rem);
  line-height: 1.12; letter-spacing: -.01em;
}

/* ─── servicios, cada uno con su foto o video ──────────── */
.servicios {
  list-style: none; margin: 0; padding: 0;
  display: grid; gap: clamp(2rem, 3.4vw, 3rem);
  grid-template-columns: repeat(auto-fit, minmax(275px, 1fr));
}
.servicio { display: block; }

/* El marco recorta; lo que crece al pasar el mouse es el contenido. */
.servicio__medio {
  aspect-ratio: 4 / 5;
  overflow: hidden;
  border: var(--borde);
  background: rgb(233 231 221 / .05);
  margin-bottom: 1.5rem;
}
.medio {
  width: 100%; height: 100%;
  display: grid; place-items: center;
  position: relative;
  transition: scale 1.1s var(--curva);
}
.medio::after {
  content: attr(data-falta) " · pendiente";
  font-family: var(--display); font-size: .7rem;
  letter-spacing: .18em; text-transform: uppercase;
  color: rgb(233 231 221 / .32); text-align: center; padding: 0 1rem;
}
.servicio img, .servicio video {
  width: 100%; height: 100%;
  object-fit: cover; display: block;
  transition: scale 1.1s var(--curva);
}
.servicio:hover .medio,
.servicio:hover img,
.servicio:hover video,
.servicio:focus-within img,
.servicio:focus-within video { scale: 1.06; }

.servicio__n {
  font-family: var(--display); font-weight: 300;
  font-size: .72rem; letter-spacing: .24em;
  color: rgb(233 231 221 / .42);
}
.servicio h3 {
  margin: .7rem 0 .6rem;
  font-family: var(--display); font-weight: 300;
  font-size: 1.34rem; letter-spacing: .01em;
}
.servicio p {
  margin: 0; font-size: .97rem; line-height: 1.7;
  color: rgb(233 231 221 / .68); max-width: 40ch;
}

@media (prefers-reduced-motion: reduce) {
  .servicio:hover .medio, .servicio:hover img, .servicio:hover video { scale: 1; }
}

/* ─── razones ──────────────────────────────────────────── */
/* Dos columnas: el texto a la izquierda y la ilustración a la derecha,
   que antes quedaba vacía. */
.porque {
  display: grid; gap: clamp(2.5rem, 5vw, 4.5rem);
  grid-template-columns: minmax(0, 1.25fr) minmax(280px, .95fr);
  align-items: start;
}
@media (max-width: 900px) { .porque { grid-template-columns: 1fr; } }

.razones { display: grid; gap: 3.2rem; }

/* La molar anotada: ilustra literalmente "la diferencia está en el detalle". */
.detalle { position: sticky; top: 8rem; }
.detalle svg { width: 100%; height: auto; overflow: visible; }
.detalle__pieza { color: rgb(15 82 102 / .10); }
.detalle__marcas circle { fill: var(--petroleo); }
.detalle__marcas path { stroke: rgb(15 82 102 / .45); stroke-width: 1; fill: none; }
.detalle__marcas text {
  font-family: var(--display); font-weight: 300;
  font-size: 13px; letter-spacing: .2em; text-transform: uppercase;
  fill: rgb(15 82 102 / .68);
}
.detalle__pie {
  margin: 1.4rem 0 0; text-align: center;
  font-size: .86rem; line-height: 1.7;
  color: rgb(26 34 38 / .5);
}
@media (max-width: 900px) { .detalle { position: static; max-width: 420px; margin-inline: auto; } }
.seccion--claro .titulo { margin-bottom: 3rem; }

/* misión y visión */
.proposito {
  margin-top: clamp(3.5rem, 7vw, 5.5rem);
  padding-top: clamp(3rem, 6vw, 4.5rem);
  border-top: var(--borde-cl);
  display: grid; gap: 2.8rem;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
}
.proposito__col h3 {
  margin: 0 0 1rem;
  font-family: var(--display); font-weight: 400;
  font-size: .76rem; letter-spacing: .28em; text-transform: uppercase;
  color: rgb(15 82 102 / .7);
}
.proposito__col p { margin: 0; color: rgb(26 34 38 / .78); }
.razon { display: grid; gap: .6rem; }
.razon h3 {
  margin: 0;
  font-family: var(--display); font-weight: 300;
  font-size: clamp(1.3rem, 1.05rem + .9vw, 1.9rem);
  line-height: 1.3;
}
.razon p { margin: 0; max-width: 56ch; color: rgb(26 34 38 / .74); }

/* ─── agenda ───────────────────────────────────────────── */
.agenda__nota {
  margin: -2.4rem 0 2.6rem;
  color: rgb(233 231 221 / .7);
  text-wrap: balance;
}
/* De ~700px para arriba cabe entera: no se parte en dos renglones. */
@media (min-width: 700px) { .agenda__nota { white-space: nowrap; font-size: .98rem; } }
.agenda__caja {
  min-height: 480px;
  border: var(--borde); border-radius: 4px;
  background: rgb(233 231 221 / .04);
  display: grid; place-items: center;
  overflow: hidden;
}
.agenda__respaldo { text-align: center; display: grid; gap: 1.6rem; padding: 2.4rem; justify-items: center; }
.agenda__respaldo p { margin: 0; color: rgb(233 231 221 / .68); font-size: .98rem; line-height: 1.9; }
.agenda__botones { display: flex; flex-wrap: wrap; gap: .8rem; justify-content: center; }


/* ─── enlace al final de "Por qué Brimedent" ───────────── */
.masinfo { margin: 3rem 0 0; }
.masinfo a {
  font-family: var(--display); font-weight: 300;
  font-size: .8rem; letter-spacing: .18em; text-transform: uppercase;
  color: rgb(15 82 102 / .8); text-decoration: none;
  border-bottom: 1px solid rgb(15 82 102 / .3); padding-bottom: 3px;
  transition: color .3s, border-color .3s;
}
.masinfo a:hover { color: var(--petroleo); border-bottom-color: var(--petroleo); }

/* ─── página Nosotros ──────────────────────────────────── */
.cabecera--fija .cabecera__logo { opacity: 1; }

.entrada {
  position: relative; z-index: 1;
  min-height: 70svh;
  display: flex; align-items: center;
  padding: 10rem var(--margen) var(--aire);
}
.titulo--grande { font-size: clamp(2.4rem, 1.4rem + 4.4vw, 5rem); margin-bottom: 2.2rem; }
.entrada__sub {
  margin: 0; max-width: 48ch;
  font-size: clamp(1.02rem, .96rem + .3vw, 1.2rem);
  color: rgb(233 231 221 / .72);
}

.credo { display: grid; grid-template-columns: auto 1fr; gap: clamp(1.6rem, 4vw, 3.4rem); }
.credo__n {
  margin: .5rem 0 0;
  font-family: var(--display); font-weight: 200;
  font-size: clamp(2rem, 1.4rem + 2vw, 3.2rem);
  line-height: 1; opacity: .28;
}
.credo__titulo {
  margin: 0 0 1.4rem;
  font-family: var(--display); font-weight: 300;
  font-size: .78rem; letter-spacing: .3em; text-transform: uppercase;
  opacity: .6;
}
.credo__texto {
  margin: 0 0 1.6rem;
  font-family: var(--display); font-weight: 200;
  font-size: clamp(1.25rem, 1rem + 1.2vw, 1.95rem);
  line-height: 1.5;
}
.credo__apoyo { margin: 0; max-width: 58ch; opacity: .74; }
@media (max-width: 620px) { .credo { grid-template-columns: 1fr; gap: .8rem; } }

/* El remate: primero entra "Somos", después el slogan. */
.cierre { display: grid; gap: 1.2rem; justify-items: center; text-align: center; }
.cierre__somos {
  margin: 0; font-family: var(--display); font-weight: 500;
  font-size: clamp(1rem, .9rem + .4vw, 1.25rem);
  letter-spacing: .3em; text-transform: uppercase;
  color: rgb(15 82 102 / .85);
}
.cierre__linea {
  margin: 0; font-family: var(--display); font-weight: 200;
  font-size: clamp(1.4rem, 1rem + 1.6vw, 2.4rem); letter-spacing: .1em;
}
.cierre__acciones {
  margin-top: 1rem;
  display: flex; flex-wrap: wrap; gap: .9rem; justify-content: center;
}
.boton--oscuro { --fondo: var(--petroleo); --tinta: var(--marfil); }
.boton--linea-oscura { --fondo: transparent; --tinta: var(--petroleo); border-color: rgb(15 82 102 / .35); }
.boton--linea-oscura:hover { background: rgb(15 82 102 / .07); }

/* ─── pie: ahora también es la sección de contacto ─────── */
.pie {
  position: relative; z-index: 1;
  background: var(--profundo);
  padding: clamp(3.5rem, 7vw, 5.5rem) 0 0;
}
.pie__caja {
  display: grid; gap: clamp(2.6rem, 6vw, 5rem);
  grid-template-columns: minmax(240px, 1fr) minmax(300px, 1.5fr);
  align-items: start;
}
@media (max-width: 860px) { .pie__caja { grid-template-columns: 1fr; } }

.pie__marca { display: grid; justify-items: start; gap: 1.1rem; }
.pie__logo { display: block; }
.pie__logo img { width: 200px; opacity: .92; transition: opacity .3s; }
.pie__logo:hover img { opacity: 1; }
.pie__linea {
  margin: 0; font-family: var(--display); font-weight: 200;
  font-size: .92rem; letter-spacing: .14em; color: rgb(233 231 221 / .62);
}

.pie__datos {
  display: grid; gap: 2.2rem;
  grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
}
.pie__col h3 {
  margin: 0 0 .85rem;
  font-family: var(--display); font-weight: 400;
  font-size: .7rem; letter-spacing: .26em; text-transform: uppercase;
  color: rgb(233 231 221 / .45);
}
.pie__col p {
  margin: 0;
  font-size: .95rem; line-height: 1.95;
  color: rgb(233 231 221 / .82);
}
.pie__col a {
  text-decoration: none;
  border-bottom: 1px solid rgb(233 231 221 / .22);
  padding-bottom: 1px;
  transition: border-color .3s, color .3s;
}
.pie__col a:hover { border-bottom-color: rgb(233 231 221 / .7); }

/* ─── redes sociales ───────────────────────────────────── */
.redes { list-style: none; margin: .5rem 0 0; padding: 0; display: flex; gap: .8rem; }
.redes a {
  display: grid; place-items: center;
  width: 40px; height: 40px;
  border: 1px solid rgb(233 231 221 / .22);
  border-radius: 50%;
  transition: border-color .35s var(--curva), background .35s var(--curva), transform .35s var(--curva);
}
.redes a:hover { border-color: rgb(233 231 221 / .55); background: rgb(233 231 221 / .07); transform: translateY(-2px); }

/* Cuentas todavía sin crear: el ícono se ve, pero no promete un destino. */
.redes a[aria-disabled] { opacity: .4; cursor: default; }
.redes a[aria-disabled]:hover { border-color: rgb(233 231 221 / .22); background: none; transform: none; }
.redes svg {
  width: 18px; height: 18px;
  fill: none; stroke: var(--crema); stroke-width: 1.5;
  stroke-linecap: round; stroke-linejoin: round; opacity: .8;
}
.redes .lleno { fill: var(--crema); stroke: none; }

.pie__base {
  margin-top: clamp(2.6rem, 5vw, 4rem);
  padding: 1.6rem 0 1.8rem;
  border-top: 1px solid rgb(233 231 221 / .1);
}
.pie__legal { margin: 0; font-size: .78rem; color: rgb(233 231 221 / .38); }

/* ─── revelado al hacer scroll ─────────────────────────── */
.reveal { opacity: 0; }
