/* ==========================================================================
   TecnoVolt Instalaciones — hoja de estilo principal
   Paleta extraída del logo. Sin frameworks ni dependencias.
   ========================================================================== */

/* ---------- 1. Tokens ---------- */
:root{
  --azul:#0090F0;
  --azul-deep:#0048C0;
  --azul-soft:#4FB4FF;
  --naranja:#F06000;
  --naranja-lt:#FF7E22;
  --amarillo:#FFC400;
  --negro:#050709;
  --navy:#0B1220;
  --navy-2:#0E1727;
  --linea:rgba(255,255,255,.09);
  --linea-2:rgba(255,255,255,.16);
  --plata:#EFF3F8;
  --gris:#93A1B5;
  --gris-2:#6B7A90;
  --rojo:#FF7A7A;   /* solo para errores de formulario */

  --grad-azul:linear-gradient(135deg,var(--azul) 0%,var(--azul-deep) 100%);
  --grad-fuego:linear-gradient(135deg,var(--amarillo) 0%,var(--naranja) 55%,#D93F00 100%);
  --grad-txt:linear-gradient(100deg,#7FCBFF 0%,var(--azul) 55%,#0B6FD8 100%);

  --r-sm:8px; --r:14px; --r-lg:22px;
  --wrap:1240px;
  --pad:clamp(1.25rem,4vw,2rem);
  --sec-y:clamp(4.5rem,9vw,7.5rem);
  --sombra:0 24px 60px -28px rgba(0,0,0,.85);
  --sombra-azul:0 20px 50px -22px rgba(0,144,240,.55);
  --t:.35s cubic-bezier(.22,.61,.36,1);
  --ff-h:'Barlow Condensed',system-ui,sans-serif;
  --ff-b:'Inter',system-ui,-apple-system,sans-serif;
}

/* ---------- 2. Base ---------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%; scroll-behavior:smooth; scroll-padding-top:100px}
body{
  margin:0; background:var(--negro); color:var(--plata);
  font:400 clamp(15px,.42vw + 14px,17px)/1.7 var(--ff-b);
  -webkit-font-smoothing:antialiased; overflow-x:hidden;
}
img,svg{display:block; max-width:100%}
img{height:auto}
a{color:inherit; text-decoration:none}
ul,ol{margin:0; padding:0; list-style:none}
p{margin:0 0 1em}
p:last-child{margin-bottom:0}
h1,h2,h3,h4{margin:0; font-family:var(--ff-h); font-weight:700; line-height:1.06; letter-spacing:-.01em}
button{font:inherit; color:inherit; background:none; border:0; cursor:pointer}
input,select,textarea{font:inherit; color:inherit}
:focus-visible{outline:2px solid var(--amarillo); outline-offset:3px; border-radius:4px}

.skip-link{
  position:absolute; left:-9999px; top:0; z-index:999;
  background:var(--naranja); color:#fff; padding:.8rem 1.2rem; border-radius:0 0 var(--r-sm) 0;
}
.skip-link:focus{left:0}

/* ---------- 3. Utilidades ---------- */
.wrap{width:min(100% - var(--pad)*2, var(--wrap)); margin-inline:auto}
.sec{padding-block:var(--sec-y); position:relative}
.sec--services{background:var(--navy)}
.sec--why{background:var(--navy)}
.sec--faq{background:var(--navy)}

.grid{display:grid; gap:clamp(1rem,2vw,1.6rem)}
.grid--3{grid-template-columns:repeat(3,1fr)}
.grid--4{grid-template-columns:repeat(4,1fr)}

.ico{width:24px; height:24px; flex:none}
.ico--sm{width:19px; height:19px}
.ico--xs{width:15px; height:15px}

.eyebrow{
  display:inline-flex; align-items:center; gap:.5rem;
  font:600 .78rem/1 var(--ff-b); letter-spacing:.16em; text-transform:uppercase;
  color:var(--naranja-lt); margin-bottom:1.1rem;
}
.eyebrow svg{color:var(--amarillo)}
.eyebrow--light{color:var(--amarillo)}

.h2{font-size:clamp(2.1rem,4.4vw,3.5rem); text-transform:uppercase; letter-spacing:-.005em}
.grad{
  background:var(--grad-txt); -webkit-background-clip:text; background-clip:text;
  color:transparent; -webkit-text-fill-color:transparent;
}
.lead{font-size:1.08em; color:#C6D1DF}
.h2 + .lead,.h2 + p{margin-top:1.2rem}
.note{color:var(--gris-2); font-size:.86rem; font-style:italic}

.sechead{max-width:56ch; margin-bottom:clamp(2.2rem,4vw,3.4rem)}
.sechead--center{margin-inline:auto; text-align:center}
.sechead__sub{color:var(--gris); margin-top:1rem}

/* Botones */
.btn{
  --btn-bg:transparent; --btn-fg:var(--plata); --btn-bd:var(--linea-2);
  display:inline-flex; align-items:center; justify-content:center; gap:.6rem;
  padding:.85rem 1.5rem; border-radius:var(--r-sm);
  background:var(--btn-bg); color:var(--btn-fg); border:1px solid var(--btn-bd);
  font:600 .93rem/1 var(--ff-b); letter-spacing:.02em; text-align:center;
  transition:transform var(--t), box-shadow var(--t), background var(--t), border-color var(--t), color var(--t);
  position:relative; overflow:hidden;
}
.btn svg{transition:transform var(--t)}
.btn:hover{transform:translateY(-2px)}
.btn:hover svg:last-child{transform:translateX(3px)}
.btn--lg{padding:1.05rem 1.9rem; font-size:1rem}
.btn--block{width:100%}
.btn--primary{
  --btn-bg:var(--grad-fuego); --btn-fg:#1A0A00; --btn-bd:transparent;
  box-shadow:0 14px 34px -16px rgba(240,96,0,.9);
}
.btn--primary:hover{box-shadow:0 20px 44px -16px rgba(240,96,0,1)}
.btn--outline{--btn-bd:var(--linea-2); backdrop-filter:blur(6px); background:rgba(255,255,255,.04)}
.btn--outline:hover{--btn-bd:var(--azul); color:#fff; background:rgba(0,144,240,.14)}
.btn--ghost{--btn-bd:transparent; background:rgba(255,255,255,.06)}
.btn--wa{--btn-bg:rgba(37,211,102,.12); --btn-bd:rgba(37,211,102,.4); --btn-fg:#7BE6A6}
.btn--wa:hover{--btn-bg:rgba(37,211,102,.2)}
.btn--link{
  padding:.85rem .2rem; border:0; color:var(--azul-soft);
  border-bottom:1px solid transparent; border-radius:0;
}
.btn--link:hover{border-bottom-color:var(--azul-soft); transform:none}

/* Placeholder de imagen pendiente */
.ph{
  position:relative; aspect-ratio:var(--ratio,16/9); width:100%;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:.5rem;
  background:
    repeating-linear-gradient(-45deg,rgba(255,255,255,.022) 0 12px,transparent 12px 24px),
    var(--navy-2);
  border:1px dashed rgba(255,255,255,.18); border-radius:var(--r);
  color:var(--gris-2); text-align:center; padding:1.5rem; overflow:hidden;
}
.ph__bolt{width:40px; height:40px; fill:rgba(240,96,0,.55); stroke:none}
.ph__name{font:600 .8rem/1.3 var(--ff-b); color:var(--naranja-lt); letter-spacing:.04em}
.ph__alt{font-size:.76rem; max-width:38ch; line-height:1.4}

/* Reveal */
.js .reveal{opacity:0; transform:translateY(26px); transition:opacity .7s ease, transform .7s cubic-bezier(.22,.61,.36,1)}
.js .reveal.in{opacity:1; transform:none}

/* ---------- 4. Topbar ---------- */
.topbar{
  background:var(--negro); border-bottom:1px solid var(--linea);
  font-size:.82rem; color:var(--gris); position:relative; z-index:60;
}
.topbar__in{display:flex; align-items:center; justify-content:space-between; gap:1rem; min-height:44px}
.topbar__data{display:flex; align-items:center; gap:1.6rem; flex-wrap:wrap}
.topbar__data li{display:flex; align-items:center; gap:.45rem}
.topbar__data svg{color:var(--azul)}
.topbar__right{display:flex; align-items:center; gap:1.2rem}
.topbar__mail{display:flex; align-items:center; gap:.45rem; transition:color var(--t)}
.topbar__mail:hover{color:var(--azul-soft)}
.topbar__mail svg{color:var(--azul)}
.social{display:flex; gap:.4rem}
.social a{
  display:grid; place-items:center; width:28px; height:28px; border-radius:6px;
  border:1px solid var(--linea); color:var(--gris); transition:all var(--t);
}
.social a:hover{color:#fff; border-color:var(--azul); background:rgba(0,144,240,.18)}

/* ---------- 5. Cabecera ---------- */
.head{
  position:sticky; top:0; z-index:100;
  background:rgba(5,7,9,.88); backdrop-filter:blur(14px);
  border-bottom:1px solid var(--linea);
  transition:background var(--t), box-shadow var(--t);
}
.head.is-stuck{background:rgba(5,7,9,.97); box-shadow:0 14px 40px -22px #000}
.head__in{display:flex; align-items:center; justify-content:space-between; gap:1.5rem; min-height:82px}
.brand img{width:clamp(160px,17vw,215px); height:auto}

.nav{display:flex; align-items:center}
.nav__list{display:flex; align-items:center; gap:.3rem}
.nav__list > li > a{
  display:block; padding:.65rem .85rem; border-radius:var(--r-sm);
  font:600 .93rem/1 var(--ff-b); color:#D3DCE7; transition:color var(--t), background var(--t);
  position:relative;
}
.nav__list > li > a::after{
  content:''; position:absolute; left:.85rem; right:.85rem; bottom:.35rem; height:2px;
  background:var(--grad-fuego); transform:scaleX(0); transform-origin:left; transition:transform var(--t);
}
.nav__list > li > a:hover{color:#fff}
.nav__list > li > a:hover::after,
.nav__list > li > a[aria-current]::after{transform:scaleX(1)}
.nav__close,.nav__toggle,.nav__cta{display:none}

/* Submenú */
.nav__has-sub{position:relative}
.sub{
  position:absolute; top:calc(100% + 10px); left:-.5rem; width:340px;
  background:linear-gradient(180deg,var(--navy-2),var(--navy));
  border:1px solid var(--linea-2); border-radius:var(--r); padding:.5rem;
  box-shadow:var(--sombra); opacity:0; visibility:hidden; transform:translateY(10px);
  transition:all var(--t);
}
.nav__has-sub:hover .sub,
.nav__has-sub:focus-within .sub{opacity:1; visibility:visible; transform:none}
.sub::before{content:''; position:absolute; top:-12px; left:0; right:0; height:12px}
.sub a{display:flex; align-items:flex-start; gap:.75rem; padding:.6rem .7rem; border-radius:var(--r-sm); transition:background var(--t)}
.sub a:hover{background:rgba(0,144,240,.12)}
.sub a svg{color:var(--azul); margin-top:.15rem}
.sub a span{display:flex; flex-direction:column; gap:.1rem}
.sub a strong{font:600 .9rem/1.3 var(--ff-b); color:#EAF1F8}
.sub a em{font-style:normal; font-size:.78rem; color:var(--gris-2); line-height:1.35}
.sub__all{border-top:1px solid var(--linea); margin-top:.35rem; padding-top:.35rem}
.sub__all a{justify-content:space-between; color:var(--naranja-lt); font:600 .85rem/1 var(--ff-b)}

/* Acciones cabecera */
.head__actions{display:flex; align-items:center; gap:1rem}
.head__phone{display:flex; align-items:center; gap:.6rem}
.head__phone svg{color:var(--naranja); width:30px; height:30px; padding:.1rem}
.head__phone span{display:flex; flex-direction:column; line-height:1.2}
.head__phone em{font-style:normal; font-size:.7rem; letter-spacing:.12em; text-transform:uppercase; color:var(--gris-2)}
.head__phone strong{font:700 1.02rem/1.2 var(--ff-h); letter-spacing:.02em}
.burger{display:none; padding:.5rem; border:1px solid var(--linea-2); border-radius:var(--r-sm)}
.nav-overlay{position:fixed; inset:0; background:rgba(0,0,0,.6); z-index:98; backdrop-filter:blur(2px)}

/* ---------- 6. Hero ---------- */
.hero{position:relative; overflow:hidden; isolation:isolate}
.hero__bg{position:absolute; inset:0; z-index:-1}
.hero__bg img{width:100%; height:100%; object-fit:cover; object-position:60% 40%}
.hero__veil{
  position:absolute; inset:0;
  background:
    linear-gradient(100deg,var(--negro) 8%,rgba(5,7,9,.92) 38%,rgba(5,7,9,.55) 62%,rgba(5,7,9,.75) 100%),
    linear-gradient(180deg,rgba(5,7,9,.9) 0%,transparent 22%,rgba(5,7,9,.95) 100%);
}
.hero__grid{
  position:absolute; inset:0; opacity:.5;
  background-image:
    linear-gradient(rgba(0,144,240,.07) 1px,transparent 1px),
    linear-gradient(90deg,rgba(0,144,240,.07) 1px,transparent 1px);
  background-size:64px 64px;
  mask-image:radial-gradient(120% 90% at 30% 40%,#000 20%,transparent 75%);
}
.hero__in{
  display:grid; grid-template-columns:minmax(0,1.35fr) minmax(0,.65fr);
  gap:clamp(2rem,4vw,4rem); align-items:center;
  padding-block:clamp(4rem,9vw,7.5rem);
}
.hero__title{
  font-size:clamp(2.35rem,6.2vw,5rem); text-transform:uppercase; margin-bottom:1.4rem;
  text-wrap:balance;
}
.hero__sub{max-width:56ch; font-size:1.06em; color:#C6D1DF; margin-bottom:2.2rem}
.hero__acts{display:flex; flex-wrap:wrap; gap:.9rem; margin-bottom:2.4rem}
.hero__badges{display:flex; flex-wrap:wrap; gap:.6rem 1.6rem; padding-top:1.6rem; border-top:1px solid var(--linea)}
.hero__badges li{display:flex; align-items:center; gap:.55rem; font-size:.88rem; color:#B6C3D3}
.hero__badges svg{color:var(--azul)}

.hero__card{
  background:linear-gradient(165deg,rgba(14,23,39,.96),rgba(5,9,16,.96));
  border:1px solid var(--linea-2); border-radius:var(--r-lg);
  padding:clamp(1.5rem,2.4vw,2rem); box-shadow:var(--sombra);
  position:relative; overflow:hidden;
}
.hero__card::before{
  content:''; position:absolute; inset:0 0 auto 0; height:3px; background:var(--grad-fuego);
}
.hero__card-top{display:flex; align-items:center; gap:.9rem; margin-bottom:1rem}
.hero__card-top svg{width:38px; height:38px; fill:var(--naranja); stroke:none; flex:none}
.hero__card-top em{display:block; font-style:normal; font-size:.75rem; letter-spacing:.14em; text-transform:uppercase; color:var(--gris-2)}
.hero__card-top strong{font:700 1.35rem/1.1 var(--ff-h); text-transform:uppercase}
.hero__card-txt{font-size:.92rem; color:var(--gris); margin-bottom:1.3rem}
.hero__card .btn{margin-bottom:.6rem}
.hero__card-foot{
  display:flex; align-items:center; gap:.45rem; justify-content:center;
  margin-top:1rem; padding-top:1rem; border-top:1px solid var(--linea);
  font-size:.78rem; color:var(--gris-2);
}
.hero__card-foot svg{color:var(--azul)}

/* ---------- 7. Franja USP ---------- */
.usps{background:var(--grad-azul); position:relative; overflow:hidden}
.usps::after{
  content:''; position:absolute; inset:0;
  background:linear-gradient(100deg,transparent 55%,rgba(240,96,0,.85) 130%);
}
.usps__in{
  position:relative; z-index:1;
  display:grid; grid-template-columns:repeat(4,1fr); gap:1px;
  background:rgba(255,255,255,.14);
}
.usp{
  display:flex; align-items:center; gap:.9rem; padding:1.5rem clamp(1rem,1.8vw,1.7rem);
  background:linear-gradient(135deg,rgba(0,72,192,.001),rgba(0,0,0,.001));
  backdrop-filter:blur(0px);
}
.usps__in > .usp{background-color:transparent}
.usp svg{color:#fff; opacity:.9; width:30px; height:30px}
.usp strong{display:block; font:700 1.06rem/1.2 var(--ff-h); text-transform:uppercase; color:#fff}
.usp span{font-size:.82rem; color:rgba(255,255,255,.78)}

/* ---------- 8. Servicios ---------- */
.services{margin-top:0}
.scard{
  position:relative; display:flex; flex-direction:column; padding:clamp(1.5rem,2.2vw,1.9rem);
  background:linear-gradient(165deg,var(--navy-2),rgba(5,9,16,.9));
  border:1px solid var(--linea); border-radius:var(--r-lg);
  overflow:hidden; transition:transform var(--t), border-color var(--t), box-shadow var(--t);
}
.scard::before{
  content:''; position:absolute; inset:0 0 auto 0; height:2px;
  background:var(--grad-fuego); transform:scaleX(0); transform-origin:left; transition:transform .45s var(--t);
}
.scard:hover{transform:translateY(-6px); border-color:rgba(0,144,240,.4); box-shadow:var(--sombra-azul)}
.scard:hover::before{transform:scaleX(1)}
.scard__glow{
  position:absolute; top:-60px; right:-60px; width:180px; height:180px; border-radius:50%;
  background:radial-gradient(circle,rgba(0,144,240,.28),transparent 65%);
  opacity:0; transition:opacity var(--t); pointer-events:none;
}
.scard:hover .scard__glow{opacity:1}
.scard__ico{
  display:grid; place-items:center; width:56px; height:56px; margin-bottom:1.2rem;
  border-radius:var(--r); background:rgba(0,144,240,.12); border:1px solid rgba(0,144,240,.28);
  color:var(--azul-soft); transition:all var(--t);
}
.scard:hover .scard__ico{background:var(--grad-fuego); border-color:transparent; color:#150800}
.scard__title{font-size:1.4rem; text-transform:uppercase; margin-bottom:.35rem}
.scard__claim{font-size:.83rem; color:var(--naranja-lt); font-weight:600; margin-bottom:.7rem}
.scard__desc{font-size:.9rem; color:var(--gris); margin-bottom:1.4rem}
.scard__link{
  display:inline-flex; align-self:flex-start; align-items:center; gap:.45rem; margin-top:auto;
  font:600 .85rem/1 var(--ff-b); color:var(--azul-soft); transition:gap var(--t), color var(--t);
}
.scard:hover .scard__link{gap:.75rem; color:var(--amarillo)}
.scard__cover{position:absolute; inset:0}

/* ---------- 9. Sobre nosotros ---------- */
.about{display:grid; grid-template-columns:minmax(0,.95fr) minmax(0,1.05fr); gap:clamp(2rem,5vw,4.5rem); align-items:center}
.about__media{position:relative}
.about__frame{
  border-radius:var(--r-lg); overflow:hidden; border:1px solid var(--linea-2);
  box-shadow:var(--sombra); position:relative;
  clip-path:polygon(0 0,100% 0,100% 88%,88% 100%,0 100%);
}
.about__frame::after{
  content:''; position:absolute; inset:0;
  background:linear-gradient(180deg,transparent 45%,rgba(5,7,9,.55));
}
.about__img{width:100%; aspect-ratio:4/3.2; object-fit:cover}
.about__badge{
  position:absolute; left:-1.2rem; bottom:-1.4rem; display:flex; align-items:center; gap:.85rem;
  background:var(--grad-fuego); color:#170800; padding:1rem 1.5rem 1rem 1.2rem; border-radius:var(--r);
  box-shadow:0 20px 40px -18px rgba(240,96,0,.9); white-space:nowrap;
}
.about__badge svg{width:30px; height:30px; fill:#170800; stroke:none; flex:none}
.about__badge > div{display:flex; flex-direction:column; line-height:1}
.about__badge strong{font:700 1.75rem/1 var(--ff-h)}
.about__badge span{font-size:.72rem; font-weight:600; line-height:1.2; margin-top:.2rem}
.checklist{display:grid; gap:.75rem; margin:1.8rem 0 2rem}
.checklist li{display:flex; align-items:flex-start; gap:.7rem; font-size:.94rem; color:#C6D1DF}
.checklist svg{color:var(--amarillo); margin-top:.25rem; flex:none}
.about__acts{display:flex; flex-wrap:wrap; align-items:center; gap:1.2rem}

/* ---------- 10. Cifras ---------- */
.stats{
  padding-block:clamp(2.5rem,5vw,4rem);
  background:linear-gradient(180deg,var(--navy),var(--negro));
  border-block:1px solid var(--linea);
}
.stat{text-align:center; padding:1rem; border-left:1px solid var(--linea)}
.stat:first-child{border-left:0}
.stat strong{
  display:block; font:700 clamp(2.6rem,5vw,3.8rem)/1 var(--ff-h);
  background:var(--grad-txt); -webkit-background-clip:text; background-clip:text;
  color:transparent; -webkit-text-fill-color:transparent;
}
.stat span{font-size:.85rem; color:var(--gris); letter-spacing:.04em}
.stats__note{text-align:center; margin-top:1.5rem; font-size:.75rem; color:var(--gris-2); font-style:italic}

/* ---------- 11. Por qué ---------- */
.why{display:grid; grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr); gap:clamp(2rem,5vw,4rem); align-items:center}
.why__list{display:grid; gap:1rem; margin-top:2rem}
.wcard{
  display:flex; gap:1.1rem; padding:1.3rem;
  background:rgba(255,255,255,.025); border:1px solid var(--linea);
  border-radius:var(--r); transition:all var(--t);
}
.wcard:hover{border-color:rgba(0,144,240,.35); background:rgba(0,144,240,.06); transform:translateX(5px)}
.wcard__ico{
  display:grid; place-items:center; width:46px; height:46px; flex:none; border-radius:12px;
  background:var(--grad-azul); color:#fff; box-shadow:var(--sombra-azul);
}
.wcard h3{font-size:1.18rem; text-transform:uppercase; margin-bottom:.3rem}
.wcard p{font-size:.89rem; color:var(--gris)}
.why__media{position:relative; border-radius:var(--r-lg); overflow:hidden; border:1px solid var(--linea-2); box-shadow:var(--sombra)}
.why__img{width:100%; aspect-ratio:3/3.4; object-fit:cover}
.why__tag{
  position:absolute; left:1rem; right:1rem; bottom:1rem;
  display:flex; align-items:center; gap:.6rem; padding:.85rem 1.1rem;
  background:rgba(5,9,16,.85); backdrop-filter:blur(10px);
  border:1px solid var(--linea-2); border-radius:var(--r-sm);
  font-size:.85rem; font-weight:500;
}
.why__tag svg{color:var(--amarillo)}

/* ---------- 12. Proceso ---------- */
.steps{display:grid; grid-template-columns:repeat(4,1fr); gap:clamp(1rem,2vw,1.6rem); counter-reset:s}
.step{position:relative; padding:2.2rem 1.4rem 1.6rem; border-top:2px solid var(--linea-2); transition:border-color var(--t)}
.step:hover{border-top-color:var(--naranja)}
.step::before{
  content:''; position:absolute; top:-7px; left:0; width:12px; height:12px; border-radius:50%;
  background:var(--negro); border:2px solid var(--linea-2); transition:all var(--t);
}
.step:hover::before{border-color:var(--naranja); background:var(--naranja); box-shadow:0 0 0 6px rgba(240,96,0,.18)}
.step__num{
  display:block; font:700 3.2rem/1 var(--ff-h); margin-bottom:.6rem;
  color:transparent; -webkit-text-stroke:1.5px rgba(255,255,255,.22); transition:all var(--t);
}
.step:hover .step__num{-webkit-text-stroke-color:var(--naranja)}
.step h3{font-size:1.22rem; text-transform:uppercase; margin-bottom:.5rem}
.step p{font-size:.89rem; color:var(--gris)}

/* ---------- 13. Banda CTA ---------- */
.ctaband{position:relative; overflow:hidden; isolation:isolate; padding-block:clamp(3.5rem,7vw,5.5rem)}
.ctaband__bg{position:absolute; inset:0; z-index:-1}
.ctaband__img{width:100%; height:100%; object-fit:cover}
.ctaband__bg::after{
  content:''; position:absolute; inset:0;
  background:linear-gradient(95deg,rgba(5,7,9,.97) 25%,rgba(0,72,192,.72) 75%,rgba(240,96,0,.5) 115%);
}
.ctaband__in{display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:2rem}
.ctaband__txt{max-width:58ch}
.ctaband__txt p{color:#CBD6E4; margin-top:1rem}
.ctaband__acts{display:flex; flex-wrap:wrap; gap:.9rem}

/* ---------- 14. Zona ---------- */
.zone{display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:clamp(2rem,5vw,4rem); align-items:center}
.zone__list{
  display:grid; grid-template-columns:repeat(auto-fill,minmax(150px,1fr));
  gap:.55rem 1rem; margin:1.8rem 0 1.2rem;
}
.zone__list li{display:flex; align-items:center; gap:.45rem; font-size:.87rem; color:#B6C3D3}
.zone__list svg{color:var(--azul); flex:none}
.zone__more{font-size:.87rem; color:var(--gris-2); margin-bottom:1.5rem}
.zone__media{position:relative; border-radius:var(--r-lg); overflow:hidden; border:1px solid var(--linea-2); box-shadow:var(--sombra)}
.zone__img{width:100%; aspect-ratio:4/3.4; object-fit:cover}
.zone__media::after{
  content:''; position:absolute; inset:0;
  background:linear-gradient(180deg,rgba(5,7,9,.25),rgba(5,7,9,.6));
}
.zone__pin{
  position:absolute; z-index:2; left:1.2rem; bottom:1.2rem;
  display:flex; align-items:center; gap:.7rem; padding:.8rem 1.1rem;
  background:rgba(5,9,16,.85); backdrop-filter:blur(10px);
  border:1px solid var(--linea-2); border-radius:var(--r-sm);
}
.zone__pin svg{color:var(--naranja)}
.zone__pin strong{display:block; font:700 1.1rem/1.1 var(--ff-h); text-transform:uppercase}
.zone__pin em{font-style:normal; font-size:.75rem; color:var(--gris)}

/* ---------- 15. Testimonios ---------- */
.testi{
  position:relative; padding:2.2rem 1.7rem 1.7rem; margin:0;
  background:linear-gradient(165deg,var(--navy-2),rgba(5,9,16,.9));
  border:1px solid var(--linea); border-radius:var(--r-lg);
  transition:transform var(--t), border-color var(--t);
}
.testi:hover{transform:translateY(-5px); border-color:rgba(0,144,240,.35)}
.testi__quote{position:absolute; top:1.2rem; right:1.4rem}
.testi__quote svg{width:38px; height:38px; fill:rgba(0,144,240,.16); stroke:none}
.testi__stars{display:flex; gap:.2rem; margin-bottom:.9rem}
.testi__stars svg{fill:var(--amarillo); stroke:none}
.testi blockquote{margin:0 0 1.4rem}
.testi blockquote p{font-size:.95rem; color:#C6D1DF; line-height:1.65}
.testi figcaption{display:flex; align-items:center; gap:.8rem; padding-top:1.1rem; border-top:1px solid var(--linea)}
/* La inicial del nombre hace de avatar: las opiniones van anonimizadas y no hay foto. */
.testi__avatar{
  display:grid; place-items:center; width:42px; height:42px; border-radius:50%; flex:none;
  background:rgba(0,144,240,.12); border:1px solid rgba(0,144,240,.3); color:var(--azul-soft);
  font:700 1.05rem/1 var(--ff-h);
}
.testi figcaption strong{display:block; font:600 .92rem/1.3 var(--ff-b)}
.testi figcaption em{font-style:normal; font-size:.78rem; color:var(--gris-2)}

/* Tarjeta de la ficha de Google: nota, estrellas y enlace al perfil.
   Va dentro del .sechead de la sección, centrada bajo el título. */
.gcard{
  display:inline-flex; align-items:center; gap:1.1rem; margin-top:1.4rem;
  padding:.85rem 1.4rem; text-decoration:none; color:inherit;
  background:linear-gradient(150deg,var(--navy-2),rgba(5,9,16,.9));
  border:1px solid var(--linea-2); border-radius:var(--r-lg);
  transition:transform var(--t), border-color var(--t), box-shadow var(--t);
}
.gcard:hover{transform:translateY(-3px); border-color:rgba(0,144,240,.4); box-shadow:0 14px 34px rgba(0,0,0,.35)}
.gcard__logo svg{width:30px; height:30px; display:block}
.gcard__datos{display:grid; grid-template-columns:auto auto; gap:0 .6rem; align-items:center; text-align:left}
.gcard__nota{grid-row:span 2; font:700 1.9rem/1 var(--ff-h); color:#fff}
.gcard__stars{display:flex; gap:.15rem}
.gcard__stars svg{fill:var(--amarillo); stroke:none}
.gcard__txt{font-size:.8rem; color:var(--gris)}
.gcard__cta{
  display:inline-flex; align-items:center; gap:.4rem; padding-left:1.1rem;
  border-left:1px solid var(--linea); font:600 .85rem/1 var(--ff-b); color:var(--azul-soft);
}
.gcard:hover .gcard__cta svg{transform:translateX(3px)}
.gcard__cta svg{transition:transform var(--t)}

/* ---------- 16. FAQ ---------- */
.faq{display:grid; grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr); gap:clamp(2rem,5vw,4rem); align-items:start}
.faq__intro p{color:var(--gris); margin-bottom:1.8rem}
.faq__list{display:grid; gap:.7rem}
.faq__item{
  background:rgba(255,255,255,.025); border:1px solid var(--linea);
  border-radius:var(--r); overflow:hidden; transition:border-color var(--t), background var(--t);
}
.faq__item[open]{border-color:rgba(0,144,240,.35); background:rgba(0,144,240,.05)}
.faq__item summary{
  display:flex; align-items:center; justify-content:space-between; gap:1rem;
  padding:1.15rem 1.3rem; cursor:pointer; list-style:none;
  font:600 1rem/1.45 var(--ff-b); color:#E4EBF3;
}
.faq__item summary::-webkit-details-marker{display:none}
.faq__item summary:hover{color:#fff}
.faq__chev{
  display:grid; place-items:center; width:30px; height:30px; flex:none; border-radius:50%;
  border:1px solid var(--linea-2); color:var(--azul-soft); transition:all var(--t);
}
.faq__item[open] .faq__chev{transform:rotate(180deg); background:var(--grad-fuego); border-color:transparent; color:#170800}
.faq__ans{padding:0 1.3rem 1.3rem}
.faq__ans p{font-size:.92rem; color:var(--gris); max-width:70ch}

/* ---------- 17. Contacto y formulario ---------- */
.contact{display:grid; grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr); gap:clamp(2rem,5vw,4rem); align-items:start}
.contact__data{display:grid; gap:1.1rem; margin-top:2rem}
.contact__data li{display:flex; align-items:center; gap:1rem}
.contact__ico{
  display:grid; place-items:center; width:48px; height:48px; flex:none; border-radius:var(--r);
  background:rgba(0,144,240,.1); border:1px solid rgba(0,144,240,.28); color:var(--azul-soft);
}
.contact__data em{display:block; font-style:normal; font-size:.72rem; letter-spacing:.13em; text-transform:uppercase; color:var(--gris-2)}
.contact__data a,.contact__data div > span{font:600 1rem/1.4 var(--ff-b); color:#E4EBF3; transition:color var(--t)}
.contact__data a:hover{color:var(--azul-soft)}

.form{
  padding:clamp(1.5rem,3vw,2.4rem);
  background:linear-gradient(165deg,var(--navy-2),rgba(5,9,16,.92));
  border:1px solid var(--linea-2); border-radius:var(--r-lg); box-shadow:var(--sombra);
}
.form__note{font-size:.78rem; color:var(--gris-2); text-align:center; margin:.9rem 0 0}
.field > span small{font-weight:400; color:var(--gris-2); text-transform:none; letter-spacing:0}
/* Aclaración bajo un campo. Mismo tamaño que .form__error pero en gris: es
   ayuda, no un fallo. El <em> va sin cursiva, como el del error. */
.field__hint{display:block; font-style:normal; font-size:.78rem; color:var(--gris-2); margin-top:.4rem}

/* Errores de validación */
.form__error{display:block; font-style:normal; font-size:.78rem; color:var(--rojo); margin-top:.4rem}
.form__error--top{
  margin:0 0 1.3rem; padding:.75rem 1rem; border-radius:var(--r-sm);
  background:rgba(255,122,122,.09); border:1px solid rgba(255,122,122,.35);
}
.field input:user-invalid,.field textarea:user-invalid{border-color:rgba(255,122,122,.55)}

/* Acuse de recibo tras enviar */
.form--ok{text-align:center}
.form__okico{
  display:grid; place-items:center; width:64px; height:64px; margin:0 auto 1.2rem;
  border-radius:50%; background:rgba(0,144,240,.12);
  border:1px solid rgba(0,144,240,.35); color:var(--azul-soft);
}
.form--ok h3{font-size:1.6rem; text-transform:uppercase; margin-bottom:.8rem}
.form--ok p{font-size:.92rem; color:var(--gris)}
.form--ok a{color:var(--azul-soft); text-decoration:underline}

/* Campo trampa antispam: fuera de pantalla, pero no display:none
   (algunos robots ignoran lo que está oculto de ese modo). */
.trampa{position:absolute; left:-9999px; width:1px; height:1px; overflow:hidden}
.form__row{display:grid; grid-template-columns:1fr 1fr; gap:1rem}
.field{display:block; margin-bottom:1rem}
.field > span{display:block; font:600 .8rem/1 var(--ff-b); color:#B6C3D3; margin-bottom:.5rem; letter-spacing:.03em}
.field input,.field select,.field textarea{
  width:100%; padding:.85rem 1rem; border-radius:var(--r-sm);
  background:rgba(255,255,255,.04); border:1px solid var(--linea-2); color:var(--plata);
  transition:border-color var(--t), background var(--t); font-size:.94rem;
}
.field textarea{resize:vertical; min-height:110px}
.field input::placeholder,.field textarea::placeholder{color:var(--gris-2)}
.field input:focus,.field select:focus,.field textarea:focus{
  outline:none; border-color:var(--azul); background:rgba(0,144,240,.07);
}
.field select{appearance:none; cursor:pointer;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2393A1B5' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='m6 9.5 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right .9rem center; background-size:16px; padding-right:2.6rem;
}
.field select option{background:var(--navy-2); color:var(--plata)}
.check{display:flex; align-items:flex-start; gap:.7rem; margin:.4rem 0 1.4rem; font-size:.84rem; color:var(--gris)}
.check input{
  width:18px; height:18px; margin-top:.15rem; flex:none; cursor:pointer;
  appearance:none; border:1px solid var(--linea-2); border-radius:4px;
  background:rgba(255,255,255,.05); transition:all var(--t); position:relative;
}
.check input:checked{background:var(--grad-fuego); border-color:transparent}
.check input:checked::after{
  content:''; position:absolute; left:5px; top:1px; width:5px; height:10px;
  border:solid #170800; border-width:0 2px 2px 0; transform:rotate(42deg);
}
.check a{color:var(--azul-soft); text-decoration:underline}

.contact__zona{
  margin-top:2rem; padding:1.4rem 1.5rem; border-radius:var(--r);
  background:rgba(0,144,240,.06); border:1px solid rgba(0,144,240,.25);
}
.contact__zona p{font-size:.9rem; color:var(--gris); margin-bottom:1rem}
.contact__zona strong{color:#E4EBF3}

/* ---------- 18. Hero de páginas internas ---------- */
.phero{position:relative; overflow:hidden; isolation:isolate; padding-block:clamp(3.5rem,8vw,6rem)}
.phero__bg{position:absolute; inset:0; z-index:-1; background:var(--navy)}
.phero__img{width:100%; height:100%; object-fit:cover; opacity:.5}
.phero__bg::after{
  content:''; position:absolute; inset:0;
  background:
    linear-gradient(100deg,var(--negro) 15%,rgba(5,7,9,.8) 55%,rgba(0,72,192,.45) 120%),
    linear-gradient(180deg,rgba(5,7,9,.7),rgba(5,7,9,.95));
}
.phero__title{font-size:clamp(2.3rem,5.2vw,4rem); text-transform:uppercase; max-width:20ch; text-wrap:balance}
.phero__sub{margin-top:1.2rem; max-width:62ch; font-size:1.05em; color:#C6D1DF}
.crumbs{margin-bottom:1.4rem}
.crumbs ol{display:flex; flex-wrap:wrap; align-items:center; gap:.5rem; font-size:.82rem; color:var(--gris-2)}
.crumbs li + li::before{content:'/'; margin-right:.5rem; color:var(--gris-2); opacity:.6}
.crumbs a{color:var(--gris); transition:color var(--t)}
.crumbs a:hover{color:var(--azul-soft)}
.crumbs span{color:var(--naranja-lt)}

/* Contenido genérico de páginas internas */
.prose{max-width:72ch}
.prose h2{font-size:clamp(1.7rem,3vw,2.4rem); text-transform:uppercase; margin:2.4rem 0 1rem}
.prose h3{font-size:1.3rem; text-transform:uppercase; margin:1.8rem 0 .7rem}
.prose p,.prose li{color:#C0CBD9}
.prose ul{display:grid; gap:.6rem; margin:1rem 0 1.5rem}
.prose ul li{display:flex; gap:.7rem; align-items:flex-start}
.prose ul li::before{content:''; width:7px; height:7px; margin-top:.62rem; flex:none; border-radius:2px; background:var(--grad-fuego); transform:rotate(45deg)}
.stub{
  display:flex; flex-direction:column; align-items:flex-start; gap:1.2rem;
  padding:clamp(1.8rem,4vw,3rem); border:1px dashed rgba(255,255,255,.2);
  border-radius:var(--r-lg); background:rgba(255,255,255,.02); max-width:70ch;
}
.stub svg{width:44px; height:44px; fill:var(--naranja); stroke:none}
.stub p{color:var(--gris)}

/* ---------- 18.b Listado de servicios ---------- */
.grid--2{grid-template-columns:repeat(2,1fr)}
.lcard{
  position:relative; display:flex; gap:1.2rem; padding:clamp(1.4rem,2.2vw,1.8rem);
  background:linear-gradient(165deg,var(--navy-2),rgba(5,9,16,.9));
  border:1px solid var(--linea); border-radius:var(--r-lg);
  transition:transform var(--t), border-color var(--t), box-shadow var(--t);
}
.lcard:hover{transform:translateY(-5px); border-color:rgba(0,144,240,.4); box-shadow:var(--sombra-azul)}
.lcard__ico{
  display:grid; place-items:center; width:52px; height:52px; flex:none; border-radius:var(--r);
  background:rgba(0,144,240,.12); border:1px solid rgba(0,144,240,.28);
  color:var(--azul-soft); transition:all var(--t);
}
.lcard:hover .lcard__ico{background:var(--grad-fuego); border-color:transparent; color:#150800}
.lcard__title{font-size:1.35rem; text-transform:uppercase; margin-bottom:.3rem}
.lcard__claim{font-size:.82rem; color:var(--naranja-lt); font-weight:600; margin-bottom:.6rem}
.lcard__desc{font-size:.89rem; color:var(--gris); margin-bottom:1rem}
.lcard__link{
  display:inline-flex; align-items:center; gap:.45rem;
  font:600 .85rem/1 var(--ff-b); color:var(--azul-soft); transition:gap var(--t), color var(--t);
}
.lcard:hover .lcard__link{gap:.75rem; color:var(--amarillo)}

/* ---------- 18.c Página de servicio: contenido + barra lateral ---------- */
.split{display:grid; grid-template-columns:minmax(0,1fr) 330px; gap:clamp(2rem,4vw,3.5rem); align-items:start}
.sympt{margin-top:2.2rem}
.sympt__item{display:flex; gap:.9rem; padding:1.2rem; background:rgba(255,255,255,.025); border:1px solid var(--linea); border-radius:var(--r); transition:all var(--t)}
.sympt__item:hover{border-color:rgba(0,144,240,.35); background:rgba(0,144,240,.05)}
.sympt__item svg{color:var(--naranja); margin-top:.3rem; flex:none}
.sympt__item strong{display:block; font:700 1.05rem/1.25 var(--ff-h); text-transform:uppercase; margin-bottom:.3rem; letter-spacing:.01em}
.sympt__item p{font-size:.86rem; color:var(--gris)}

.aside{position:sticky; top:110px; display:grid; gap:1rem}
.aside__box{
  padding:1.6rem; border-radius:var(--r-lg);
  background:linear-gradient(165deg,var(--navy-2),rgba(5,9,16,.92));
  border:1px solid var(--linea-2); box-shadow:var(--sombra);
}
.aside__ico{display:block; margin-bottom:.9rem}
.aside__ico svg{width:34px; height:34px; fill:var(--naranja); stroke:none}
.aside__box h3{font-size:1.3rem; text-transform:uppercase; margin-bottom:.6rem}
.aside__box p{font-size:.87rem; color:var(--gris); margin-bottom:1.2rem}
.aside__box .btn{margin-bottom:.6rem}
.aside__box .btn:last-child{margin-bottom:0}
.aside__box--list ul{display:grid; gap:.15rem}
.aside__box--list a{
  display:flex; align-items:center; gap:.65rem; padding:.6rem .5rem; border-radius:var(--r-sm);
  font-size:.88rem; color:var(--gris); transition:all var(--t);
}
.aside__box--list a:hover{background:rgba(0,144,240,.1); color:#E4EBF3}
.aside__box--list svg{color:var(--azul); flex:none}

/* ---------- 18.d Subtítulo dentro del contenido de página interna ---------- */
.subtit{
  font-size:1.25rem; text-transform:uppercase; margin:2.4rem 0 .4rem;
  position:relative; padding-bottom:.7rem;
}
.subtit::after{content:''; position:absolute; left:0; bottom:0; width:32px; height:2px; background:var(--grad-fuego)}

/* ---------- 18.e Páginas legales ---------- */
.legal{max-width:74ch}
.legal p{color:var(--gris)}
.legal .lead{color:var(--plata)}
.legal .subtit:first-child{margin-top:0}
.legal a{color:var(--azul-soft); text-decoration:underline; text-underline-offset:2px}
.legal a:hover{color:var(--plata)}
.legal strong{color:#E4EBF3}
.legal__datos{display:grid; gap:.7rem; margin:0 0 1.5rem; color:var(--gris)}
.legal__datos li{position:relative; padding-left:1.1rem; font-size:.94rem}
.legal__datos li::before{content:''; position:absolute; left:0; top:.62em; width:5px; height:5px; border-radius:50%; background:var(--azul)}
.legal__fecha{margin-top:2.5rem; padding-top:1.2rem; border-top:1px solid var(--linea); font-size:.82rem; color:var(--gris-2)}

/* ---------- 19. Pie ---------- */
.foot{background:linear-gradient(180deg,var(--navy) 0%,var(--negro) 65%); border-top:1px solid var(--linea); margin-bottom:0}
.foot__grid{
  display:grid; grid-template-columns:1.6fr 1fr 1fr 1.3fr; gap:clamp(1.8rem,3vw,3rem);
  padding-block:clamp(3rem,6vw,4.5rem);
}
.foot__logo{width:210px; margin-bottom:1.2rem}
.foot__claim{font-size:.88rem; color:var(--gris); max-width:42ch; margin-bottom:1.4rem}
.social--foot a{width:34px; height:34px}
.foot__title{
  font-size:1.15rem; text-transform:uppercase; margin-bottom:1.2rem;
  position:relative; padding-bottom:.7rem;
}
.foot__title::after{content:''; position:absolute; left:0; bottom:0; width:32px; height:2px; background:var(--grad-fuego)}
.foot__links{display:grid; gap:.6rem}
.foot__links a{font-size:.88rem; color:var(--gris); transition:color var(--t), padding-left var(--t)}
.foot__links a:hover{color:var(--azul-soft); padding-left:5px}
.foot__contact{display:grid; gap:.9rem}
.foot__contact li{display:flex; gap:.7rem; font-size:.88rem; color:var(--gris)}
.foot__contact svg{color:var(--azul); flex:none; margin-top:.15rem}
.foot__contact a:hover{color:var(--azul-soft)}
.foot__bar{border-top:1px solid var(--linea)}
.foot__bar-in{display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:1rem; padding-block:1.3rem}
.foot__bar p{font-size:.8rem; color:var(--gris-2)}
.foot__legal{display:flex; flex-wrap:wrap; gap:1.3rem; font-size:.8rem}
.foot__legal a{color:var(--gris-2); transition:color var(--t)}
.foot__legal a:hover{color:var(--azul-soft)}

/* ---------- 20. Barra móvil y volver arriba ---------- */
.callbar{display:none}
.totop{
  /* A la izquierda: la esquina derecha la ocupa la mascota de WhatsApp (.wafloat).
     En móvil, donde .wafloat se oculta, vuelve a su sitio de siempre (ver sección 21). */
  position:fixed; left:1.2rem; bottom:1.2rem; z-index:80;
  display:grid; place-items:center; width:46px; height:46px; border-radius:50%;
  background:var(--grad-fuego); color:#170800; box-shadow:0 14px 30px -12px rgba(240,96,0,.9);
  opacity:0; visibility:hidden; transform:translateY(12px) rotate(180deg); transition:all var(--t);
}
.totop.in{opacity:1; visibility:visible; transform:translateY(0) rotate(180deg)}

/* ---------- 20.b Botón flotante de WhatsApp ---------- */
/* Ocupa la esquina inferior derecha; el .totop se aparta a la izquierda. */
.wafloat{
  position:fixed; right:1rem; bottom:1rem; z-index:80;
  width:clamp(140px,14vw,190px); line-height:0;
  filter:drop-shadow(0 18px 28px rgba(0,0,0,.55));
  animation:wa-entra .55s var(--t) 1.2s both;
}
.wafloat img{
  width:100%; height:auto;
  transform-origin:bottom center; transition:transform var(--t);
}
.wafloat:hover img,
.wafloat:focus-visible img{transform:translateY(-6px) scale(1.04)}

@keyframes wa-entra{
  from{opacity:0; transform:translateY(28px) scale(.92)}
  to{opacity:1; transform:none}
}


/* ---------- 21. Trabajos realizados (listado y ficha) ---------- */
/* Única sección que depende de la base de datos. El aviso se usa cuando MySQL
   no responde o cuando todavía no hay obras publicadas. */
.aviso-bd{
  padding:1.6rem 1.8rem; border:1px dashed var(--linea-2); border-radius:var(--r);
  background:rgba(255,255,255,.02); color:var(--gris); text-align:center;
}
.aviso-bd a{color:var(--azul-soft)}

/* Tarjeta del listado */
.pcard{margin:0}
.pcard__link{
  display:flex; flex-direction:column; height:100%; text-decoration:none; color:inherit;
  background:linear-gradient(165deg,var(--navy-2),rgba(5,9,16,.9));
  border:1px solid var(--linea); border-radius:var(--r-lg); overflow:hidden;
  transition:transform var(--t), border-color var(--t), box-shadow var(--t);
}
.pcard__link:hover{transform:translateY(-6px); border-color:rgba(0,144,240,.4); box-shadow:var(--sombra)}
.pcard__media{position:relative; display:block; aspect-ratio:4/3; overflow:hidden; background:var(--negro)}
.pcard__media img{width:100%; height:100%; object-fit:cover; transition:transform .6s var(--t)}
.pcard__link:hover .pcard__media img{transform:scale(1.05)}
.pcard__sinfoto{display:grid; place-items:center; height:100%; color:var(--gris-2)}
.pcard__sinfoto svg{width:44px; height:44px}
.pcard__n{
  position:absolute; right:.8rem; bottom:.8rem; padding:.3rem .6rem;
  background:rgba(5,9,16,.8); backdrop-filter:blur(6px);
  border:1px solid var(--linea-2); border-radius:999px;
  font:600 .72rem/1 var(--ff-b); color:var(--plata);
}
.pcard__body{display:block; padding:1.3rem 1.4rem 1.5rem}
.pcard__zona{display:flex; align-items:center; gap:.4rem; font-size:.78rem; color:var(--naranja-lt); margin-bottom:.5rem}
.pcard__title{font:700 1.25rem/1.25 var(--ff-h); text-transform:uppercase; margin:0 0 .9rem}
.pcard__cta{display:inline-flex; align-items:center; gap:.4rem; font:600 .85rem/1 var(--ff-b); color:var(--azul-soft)}
.pcard__link:hover .pcard__cta svg{transform:translateX(3px)}
.pcard__cta svg{transition:transform var(--t)}

/* Ficha: contenido + barra lateral, igual que las páginas de servicio */
.pgrid{display:grid; grid-template-columns:minmax(0,1fr) 320px; gap:clamp(2rem,4vw,3.5rem); align-items:start}
.pficha__zona{display:flex; align-items:center; gap:.5rem; color:var(--naranja-lt); font-weight:600; margin:0 0 1.2rem}
.pficha__texto p{color:#C6D1DF; line-height:1.75; margin:0 0 1.1rem; font-size:1.02rem}
.pficha__h2{font:700 clamp(1.5rem,3vw,2rem)/1.15 var(--ff-h); text-transform:uppercase; margin:2.6rem 0 1.4rem}

/* Galería: mosaico de cuadrados que abren el visor */
.pgal{display:grid; grid-template-columns:repeat(auto-fill,minmax(180px,1fr)); gap:.8rem}
.pgal__item{
  padding:0; border:1px solid var(--linea); border-radius:var(--r); overflow:hidden;
  background:var(--negro); cursor:zoom-in; aspect-ratio:1;
  transition:border-color var(--t), transform var(--t);
}
.pgal__item:hover{border-color:rgba(0,144,240,.45); transform:translateY(-3px)}
.pgal__item img{width:100%; height:100%; object-fit:cover; display:block}

/* Caja lateral con los CTA */
.pgrid__aside{position:sticky; top:110px}
.pbox{
  padding:1.7rem; background:linear-gradient(160deg,var(--navy-2),rgba(5,9,16,.92));
  border:1px solid var(--linea-2); border-radius:var(--r-lg);
}
.pbox__t{font:700 1.3rem/1.2 var(--ff-h); text-transform:uppercase; margin:0 0 .7rem}
.pbox p{color:var(--gris); font-size:.92rem; margin:0 0 1.2rem}
.pbox .btn{margin-bottom:.6rem}
.pbox__nota{display:flex; align-items:center; gap:.45rem; font-size:.8rem; color:var(--gris-2); margin:.9rem 0 0}

/* Anterior / siguiente */
.pnav{display:grid; grid-template-columns:1fr auto 1fr; gap:1.2rem; align-items:center}
.pnav__a{
  display:block; padding:1rem 1.2rem; text-decoration:none; color:inherit;
  border:1px solid var(--linea); border-radius:var(--r);
  transition:border-color var(--t), background var(--t);
}
.pnav__a:hover{border-color:rgba(0,144,240,.4); background:rgba(255,255,255,.03)}
.pnav__a--next{text-align:right}
.pnav__lbl{display:block; font-size:.74rem; color:var(--gris-2); margin-bottom:.2rem}
.pnav__t{display:block; font:600 .95rem/1.3 var(--ff-b); color:var(--plata)}

/* ---------- 21.b Visor de fotos (lightbox) ---------- */
/* Sin librerías: lo mueve main.js. Se muestra con [hidden] quitado. */
.lbox{
  position:fixed; inset:0; z-index:200; display:grid;
  grid-template-columns:auto 1fr auto; align-items:center; gap:1rem;
  padding:clamp(1rem,4vw,3rem); background:rgba(3,5,8,.94); backdrop-filter:blur(6px);
}
.lbox[hidden]{display:none}
.lbox__fig{margin:0; display:grid; place-items:center; gap:.9rem; min-width:0}
.lbox__img{max-width:100%; max-height:78vh; object-fit:contain; border-radius:var(--r); display:block}
.lbox__pie{font-size:.82rem; color:var(--gris); text-align:center}
.lbox__cerrar,.lbox__nav{
  display:grid; place-items:center; width:48px; height:48px; flex:none;
  background:rgba(255,255,255,.06); border:1px solid var(--linea-2);
  border-radius:50%; color:var(--plata); cursor:pointer; transition:background var(--t)
}
.lbox__cerrar:hover,.lbox__nav:hover{background:rgba(255,255,255,.14)}
.lbox__cerrar{position:absolute; top:1rem; right:1rem; z-index:2}
.lbox__nav--prev svg{transform:rotate(90deg)}
.lbox__nav--next svg{transform:rotate(-90deg)}

/* ---------- 21.c Panel de obras ---------- */
/* Pantalla interna, no indexable. Se apoya en los mismos tokens que la web
   para no mantener una segunda hoja de estilos. */
body.admin{background:var(--negro); color:var(--plata); font-family:var(--ff-b)}
.admin__top{
  display:flex; align-items:center; justify-content:space-between; gap:1rem;
  padding:1rem var(--pad); border-bottom:1px solid var(--linea);
  position:sticky; top:0; background:rgba(5,7,9,.92); backdrop-filter:blur(10px); z-index:10;
}
.admin__logo{font:700 1.2rem/1 var(--ff-h); text-transform:uppercase; text-decoration:none; color:var(--plata)}
.admin__acc{display:flex; gap:1rem; font-size:.85rem}
.admin__acc a{color:var(--gris)}
.admin__acc a:hover{color:var(--azul-soft)}
.admin__main{max-width:820px; margin:0 auto; padding:1.6rem var(--pad) 4rem}
.admin__volver{margin:0 0 1rem}
.admin__volver a{color:var(--gris); text-decoration:none; font-size:.88rem}

.admin__card{
  padding:1.5rem; margin-bottom:1.4rem;
  background:var(--navy-2); border:1px solid var(--linea); border-radius:var(--r-lg);
}
.admin__card--peligro{border-color:rgba(255,122,122,.3)}
.admin__card h1{font:700 1.6rem/1.15 var(--ff-h); text-transform:uppercase; margin:0 0 1.2rem}
.admin__card h2{font:700 1.25rem/1.15 var(--ff-h); text-transform:uppercase; margin:0 0 1rem}
.admin__n{display:inline-block; padding:.1rem .5rem; margin-left:.3rem; border-radius:999px;
  background:rgba(0,144,240,.15); color:var(--azul-soft); font:600 .8rem/1.6 var(--ff-b)}
.admin__vacio{color:var(--gris)}

.admin__form{display:grid; gap:.35rem}
.admin__form label,.admin__lbl{margin-top:.9rem; font:600 .9rem/1.3 var(--ff-b)}
.admin__hint{font-size:.8rem; color:var(--gris-2); margin-bottom:.35rem}
.admin__form input[type=text],.admin__form input[type=password],.admin__form textarea{
  width:100%; padding:.8rem .9rem; font:400 1rem/1.4 var(--ff-b);
  color:var(--plata); background:rgba(255,255,255,.04);
  border:1px solid var(--linea-2); border-radius:var(--r-sm);
}
.admin__form input:focus-visible,.admin__form textarea:focus-visible{outline:2px solid var(--amarillo); outline-offset:2px}
.admin__form textarea{resize:vertical}
.admin__form input[type=file]{
  padding:.8rem; font-size:.9rem; color:var(--gris);
  background:rgba(255,255,255,.03); border:1px dashed var(--linea-2); border-radius:var(--r-sm);
}
.admin__form .btn{margin-top:1.3rem}

/* Fotos ya subidas, con su casilla de quitar */
.admin__fotos{display:grid; grid-template-columns:repeat(auto-fill,minmax(120px,1fr)); gap:.7rem; list-style:none; padding:0; margin:.5rem 0 0}
.admin__fotos label{position:relative; display:block; margin:0; cursor:pointer}
.admin__fotos img{width:100%; aspect-ratio:1; object-fit:cover; border-radius:var(--r-sm); border:1px solid var(--linea); display:block}
.admin__quitar{
  display:flex; align-items:center; gap:.3rem; justify-content:center;
  margin-top:.35rem; font-size:.78rem; color:var(--gris);
}
.admin__portada{
  position:absolute; top:.35rem; left:.35rem; padding:.15rem .45rem;
  background:rgba(5,9,16,.85); border:1px solid var(--linea-2); border-radius:999px;
  font-size:.66rem; color:var(--amarillo);
}

/* Listado de obras del panel */
.admin__lista{list-style:none; padding:0; margin:0; display:grid; gap:.7rem}
.admin__item{
  display:grid; grid-template-columns:64px 1fr auto; gap:.9rem; align-items:center;
  padding:.7rem; background:rgba(255,255,255,.025); border:1px solid var(--linea); border-radius:var(--r);
}
.admin__mini img{width:64px; height:64px; object-fit:cover; border-radius:var(--r-sm); display:block}
.admin__mini--no{display:grid; place-items:center; width:64px; height:64px; border-radius:var(--r-sm);
  background:rgba(255,255,255,.04); font-size:.62rem; color:var(--gris-2); text-align:center}
.admin__datos strong{display:block; font-size:.95rem}
.admin__datos em{font-style:normal; font-size:.8rem; color:var(--gris-2)}
.admin__accs{display:flex; gap:.4rem}
.admin__accs .btn{padding:.45rem .8rem; font-size:.8rem}

.admin__login{max-width:360px; margin:12vh auto; display:grid; gap:.4rem}
.admin__login h1{font:700 1.7rem/1.1 var(--ff-h); text-transform:uppercase; margin:0}
.admin__sub{color:var(--gris); font-size:.9rem; margin:0 0 1rem}
.admin__login label{font:600 .9rem/1.3 var(--ff-b)}
.admin__login input{
  width:100%; padding:.8rem .9rem; font:400 1rem/1.4 var(--ff-b); color:var(--plata);
  background:rgba(255,255,255,.04); border:1px solid var(--linea-2); border-radius:var(--r-sm);
}
.admin__login .btn{margin-top:1rem}
/* ---------- 22. Responsive ---------- */
@media (max-width:1100px){
  .grid--4{grid-template-columns:repeat(2,1fr)}
  .steps{grid-template-columns:repeat(2,1fr)}
  .usps__in{grid-template-columns:repeat(2,1fr)}
  .hero__in{grid-template-columns:1fr; gap:2.5rem}
  .hero__card{max-width:460px}
  .stat:nth-child(3){border-left:0}
}

@media (max-width:980px){
  /* El backdrop-filter del header crearía un contenedor de posicionamiento
     y el panel lateral fijo quedaría anclado a la cabecera en vez de al viewport. */
  .head{backdrop-filter:none; background:rgba(5,7,9,.97)}
  .head.is-stuck{background:var(--negro)}

  /* Menú lateral */
  .head__in{min-height:70px}
  .burger{display:grid; place-items:center}
  .hide-md{display:none}
  .nav{
    position:fixed; inset:0 0 0 auto; width:min(88vw,380px); z-index:99;
    flex-direction:column; align-items:stretch; gap:0;
    background:linear-gradient(180deg,var(--navy-2),var(--negro));
    border-left:1px solid var(--linea-2); padding:1.4rem;
    transform:translateX(105%); transition:transform var(--t);
    overflow-y:auto;
  }
  .nav.is-open{transform:none}
  .nav__close{display:grid; place-items:center; align-self:flex-end; padding:.5rem; margin-bottom:1rem; border:1px solid var(--linea-2); border-radius:var(--r-sm)}
  .nav__list{flex-direction:column; align-items:stretch; gap:.15rem}
  .nav__list > li{border-bottom:1px solid var(--linea); position:relative}
  .nav__list > li > a{padding:.95rem .4rem; font-size:1.05rem}
  .nav__list > li > a::after{display:none}
  .nav__toggle{
    display:grid; place-items:center; position:absolute; right:0; top:.35rem;
    width:42px; height:42px; border-radius:var(--r-sm); color:var(--azul-soft);
    transition:transform var(--t);
  }
  .nav__toggle[aria-expanded="true"]{transform:rotate(180deg)}
  .sub{
    position:static; width:auto; opacity:1; visibility:visible; transform:none;
    box-shadow:none; border:0; background:rgba(0,144,240,.05); border-radius:var(--r-sm);
    display:none; margin-bottom:.6rem;
  }
  .sub.is-open{display:block}
  .nav__has-sub:hover .sub{opacity:1}
  .nav__cta{display:block; margin-top:1.5rem}
  .nav__cta .btn{width:100%}
  .head__phone span{display:none}
  .head__phone svg{width:34px; height:34px}
  .about,.why,.zone,.faq,.contact,.split{grid-template-columns:1fr}
  .aside{position:static}
  .about__media,.why__media,.zone__media{max-width:620px}
  .why__img,.zone__img{aspect-ratio:16/10}
  .ctaband__in{flex-direction:column; align-items:flex-start}
  /* Ficha de trabajo: la barra lateral pasa debajo y deja de ser sticky. */
  .pgrid{grid-template-columns:1fr}
  .pgrid__aside{position:static; max-width:620px}
}

@media (max-width:760px){
  .topbar__in{justify-content:center}
  .topbar__data{gap:.9rem; justify-content:center}
  .topbar__right{display:none}
  .grid--3,.grid--4,.grid--2{grid-template-columns:1fr}
  .steps{grid-template-columns:1fr}
  .topbar__data li:first-child{font-size:.76rem}
  .hide-sm{display:none}
  .stat{border-left:0; border-top:1px solid var(--linea); padding-block:1.4rem}
  .stat:first-child{border-top:0}
  .stats .grid--4{gap:0}
  .foot__grid{grid-template-columns:1fr 1fr}
  .foot__col--brand{grid-column:1 / -1}
  .form__row{grid-template-columns:1fr; gap:0}
  .about__badge{left:0; bottom:-1rem; padding:.9rem 1.1rem}
  .hero__acts .btn{width:100%}
  /* --- PRUEBA (20 ago 2026): mascota también en móvil, en pequeño, a cambio de
     quitar el botón de volver arriba. Pendiente de validar con el cliente.
     Para volver atrás: .totop{left:auto; right:1.2rem; bottom:5.5rem} y .wafloat{display:none} --- */
  .totop{display:none}
  .wafloat{
    display:block; width:96px;
    right:.6rem; bottom:4.6rem;
    filter:drop-shadow(0 10px 16px rgba(0,0,0,.6));
  }

  /* Barra de acción fija */
  .callbar{
    display:grid; grid-template-columns:repeat(3,1fr);
    position:fixed; left:0; right:0; bottom:0; z-index:90;
    background:rgba(5,7,9,.96); backdrop-filter:blur(12px);
    border-top:1px solid var(--linea-2);
    padding-bottom:env(safe-area-inset-bottom);
  }
  .callbar__item{
    display:flex; flex-direction:column; align-items:center; gap:.25rem;
    padding:.7rem .4rem; font:600 .72rem/1 var(--ff-b); color:var(--gris);
    border-left:1px solid var(--linea);
  }
  .callbar__item:first-child{border-left:0}
  .callbar__item--call{color:var(--azul-soft)}
  .callbar__item--wa{color:#7BE6A6}
  .callbar__item--quote{color:var(--naranja-lt)}
  body{padding-bottom:64px}
}

@media (max-width:460px){
  .foot__grid{grid-template-columns:1fr}
  .usps__in{grid-template-columns:1fr}
  /* Galería y navegación entre trabajos, en una sola columna. */
  .pgal{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}
  .pnav{grid-template-columns:1fr; gap:.7rem}
  .pnav__a--next{text-align:left}
  .admin__item{grid-template-columns:52px 1fr; row-gap:.6rem}
  .admin__accs{grid-column:1 / -1}
  .admin__mini img,.admin__mini--no{width:52px; height:52px}
  .lbox{grid-template-columns:1fr; gap:.6rem}
  .lbox__nav{position:absolute; bottom:1.2rem}
  .lbox__nav--prev{left:1.2rem}
  .lbox__nav--next{right:1.2rem}
  /* La tarjeta de Google se apila: el enlace pasa debajo, sin la barra separadora. */
  .gcard{flex-direction:column; gap:.7rem; text-align:center}
  .gcard__cta{padding-left:0; border-left:0; border-top:1px solid var(--linea); padding-top:.7rem; width:100%; justify-content:center}
}

/* ---------- 23. Accesibilidad ---------- */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.01ms !important; animation-iteration-count:1 !important;
    transition-duration:.01ms !important; scroll-behavior:auto !important;
  }
  .js .reveal{opacity:1; transform:none}
}

@media print{
  .topbar,.head,.callbar,.totop,.wafloat,.nav-overlay,.ck{display:none}
  body{background:#fff; color:#000}
}

/* ---------- 24. Aviso de cookies ---------- */
/* Barra inferior, no modal a pantalla completa: la web se puede seguir leyendo
   con el aviso abierto, que es lo que evita el "muro de cookies".
   z-index 100 = por encima de la barra móvil (90) y de la mascota (80): es lo
   único que tiene que estar delante, y solo mientras el visitante decide. */
.ck{
  position:fixed; left:0; right:0; bottom:0; z-index:100;
  background:rgba(11,18,32,.97); border-top:1px solid var(--linea-2);
  box-shadow:0 -20px 50px -20px rgba(0,0,0,.9);
  backdrop-filter:blur(10px);
}
.ck__in{
  display:flex; align-items:center; gap:clamp(1rem,3vw,2.5rem);
  padding-block:1.1rem;
}
.ck__tit{font-size:1.05rem; text-transform:uppercase; margin-bottom:.3rem}
.ck__txt p{font-size:.84rem; color:var(--gris); max-width:78ch}
.ck__txt a{color:var(--azul-soft); text-decoration:underline}
.ck__btns{display:flex; gap:.7rem; flex:none}
/* ⚠️ Los dos botones comparten tamaño, tipografía y peso a propósito: rechazar
   no puede parecer la opción de segunda. Solo cambia el color de fondo. */
.ck__btn{
  padding:.8rem 1.6rem; border-radius:var(--r-sm);
  border:1px solid var(--linea-2); background:rgba(255,255,255,.06); color:var(--plata);
  font:600 .93rem/1 var(--ff-b); letter-spacing:.02em; cursor:pointer;
  transition:background var(--t), border-color var(--t), color var(--t);
}
.ck__btn:hover{border-color:var(--azul); background:rgba(0,144,240,.14); color:#fff}
.ck__btn--si{background:var(--grad-fuego); border-color:transparent; color:#1A0A00}
.ck__btn--si:hover{background:var(--grad-fuego); color:#1A0A00; filter:brightness(1.08)}

/* Enlace del pie para volver a abrirlo: es un <button> porque no navega a
   ningún sitio, pero tiene que verse igual que sus vecinos. */
.foot__ck{
  background:0; border:0; padding:0; cursor:pointer;
  font:inherit; font-size:.8rem; color:var(--gris-2); transition:color var(--t);
}
.foot__ck:hover{color:var(--azul-soft)}

@media (max-width:760px){
  /* Encima de la barra de acción, que es la que llama y abre WhatsApp: taparla
     mientras se decide sobre las cookies sería quitarle al visitante justo lo
     que ha venido a hacer. */
  .ck{bottom:64px}
  .ck__in{flex-direction:column; align-items:stretch; gap:.9rem; padding-block:1rem}
  .ck__btns{display:grid; grid-template-columns:1fr 1fr}
  .ck__txt p{font-size:.8rem}
}
