/* ============================================================
   ISC — Landing page
   Palette + typography lifted verbatim from the Inspections portal
   ============================================================ */
:root{
  --canvas:#e8edf5; --sunken:#dde4ee;
  --surface:#ffffff; --surface2:#f5f8fc;
  --border:#d3dce8; --border-strong:#b4c1d3;
  --navy:#2b2a3f; --steel:#596a86; --steel-lt:#96a4bb;
  --ink:#2b2a3f; --ink2:#596a86; --ink3:#6b7890; --ink-dis:#9aa6b8;
  --accent:#3d6fb0; --accent-lt:#5b93d6; --accent-hi:#7db4dd;
  --accent-soft:#e1eaf7; --accent-ink:#2f5b93;
  --grad-accent:linear-gradient(135deg,#5b93d6 0%,#3d6fb0 100%);
  --grad-navy:linear-gradient(135deg,#3c3c4b 0%,#2b2a3f 100%);
  --sh1:0 1px 2px rgba(43,42,63,.05), 0 4px 14px rgba(43,42,63,.06);
  --sh2:0 10px 28px rgba(43,42,63,.12);
  --sh3:0 24px 60px rgba(43,42,63,.18);
  --font-head:'Montserrat',sans-serif;
  --font-body:'Poppins',sans-serif;
  --maxw:1200px;
  --nav-h:74px;

  /* --- Sistema ISC (paleta-final-isc.html) -------------------------------
     Superficies navy + familia acero. El acento es el ÚNICO color con croma
     y está reservado a acción, dato activo y agente. */
  --isc-bg:#141320;         /* fondo base */
  --isc-deep:#1b1a28;       /* base del panel elevado */
  --isc-surface:#2B2A3F;    /* navy superficie — tarjetas */
  --isc-raised:#33324A;     /* navy elevado */
  --steel-l:#96A4BB;        /* etiquetas / texto 2º azulado */
  --steel-d:#596A86;        /* apoyo / filetes marcados */
  --sand:#AFAFB4;           /* texto suave */
  --grey:#788291;           /* placeholder / bordes */
  --acc:#5B93D6;            /* acento — solo acción */
  --hair:rgba(150,164,187,.18);
  --hair-strong:rgba(150,164,187,.3);

  /* --- Radios: cuatro, no doce ---------------------------------------- */
  --r-sm:8px;               /* chips y etiquetas */
  --r-md:12px;              /* controles, campos, botones, tiles de icono */
  --r-lg:18px;              /* tarjetas y paneles */
  --r-pill:999px;

  /* --- Elevación en oscuro (1_isc-login-reference.html) ---------------- */
  --e-panel:0 26px 72px rgba(0,0,0,.55);
  --e-acc:0 10px 28px rgba(91,147,214,.32);
  --e-acc-h:0 20px 44px rgba(0,0,0,.55), 0 12px 30px rgba(91,147,214,.4);
}

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
/* La barra es fija y mide 74px: sin este margen, cualquier enlace de ancla
   deja el arranque de la seccion escondido debajo de ella. */
:target,section[id]{scroll-margin-top:calc(var(--nav-h) + 18px)}
body{
  font-family:var(--font-body);
  background:var(--canvas);
  color:var(--ink);
  line-height:1.65;
  /* clip, no hidden: overflow-x:hidden convierte el body en contenedor de
     scroll y rompe position:sticky, que es lo que apila las tarjetas. */
  overflow-x:clip;
  -webkit-font-smoothing:antialiased;
}
h1,h2,h3,h4,.head{font-family:var(--font-head);line-height:1.1;letter-spacing:-.02em;color:var(--navy)}
a{color:inherit;text-decoration:none}
img{max-width:100%;display:block}
section{position:relative}
.wrap{width:100%;max-width:var(--maxw);margin:0 auto;padding:0 clamp(20px,5vw,40px)}
.eyebrow{
  font-family:var(--font-head);font-weight:600;font-size:.78rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--accent);display:inline-flex;align-items:center;gap:9px;
}
.eyebrow::before{content:"";width:26px;height:2px;background:var(--grad-accent);border-radius:2px}
.eyebrow.center{justify-content:center}
.eyebrow.light{color:var(--accent-hi)}

/* ---------- Buttons ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:9px;
  font-family:var(--font-head);font-weight:600;font-size:.94rem;
  padding:14px 26px;border-radius:var(--r-md);cursor:pointer;border:1px solid transparent;
  transition:transform .3s cubic-bezier(.2,.8,.2,1), box-shadow .3s, background .3s, color .3s;
  white-space:nowrap;
}
.btn svg{width:18px;height:18px}
.btn-primary{background:var(--grad-accent);color:#fff;box-shadow:var(--e-acc)}
.btn-primary:hover{filter:brightness(1.06);transform:translateY(-3px);box-shadow:var(--e-acc-h)}
.btn-ghost{background:rgba(255,255,255,.06);color:#fff;border-color:rgba(255,255,255,.22);backdrop-filter:blur(6px)}
.btn-ghost:hover{background:rgba(255,255,255,.14);transform:translateY(-3px)}
.btn-dark{background:var(--grad-navy);color:#fff;box-shadow:var(--sh1)}
.btn-dark:hover{transform:translateY(-3px);box-shadow:var(--sh2)}
.btn-line{background:transparent;color:var(--accent-ink);border-color:var(--border-strong)}
.btn-line:hover{border-color:var(--accent);color:var(--accent);transform:translateY(-3px)}

/* ============================================================
   NAVBAR
   ============================================================ */
/* Arriba del todo la barra es invisible: sin fondo y sin filete, para que el
   hero llegue entero hasta el borde superior. Pasados 30px de scroll aparece el
   azul oscuro del sistema (#182034) y se queda así el resto de la página.
   Lo único que cambia es el fondo: el texto y el logo no se tocan, porque los
   dos estados son oscuros. */
header.nav{
  position:fixed;inset:0 0 auto 0;z-index:100;height:var(--nav-h);
  display:flex;align-items:center;
  background:transparent;border-bottom:1px solid transparent;
  transition:background .35s, border-color .35s;
}
header.nav.scrolled{
  background:rgba(24,32,52,.82);
  backdrop-filter:saturate(160%) blur(14px);-webkit-backdrop-filter:saturate(160%) blur(14px);
  border-bottom-color:var(--hair);
}
.nav .wrap{display:flex;align-items:center;gap:32px;position:relative}
.brand{display:flex;align-items:center;gap:11px;flex-shrink:0}
.brand .logo{
  width:44px;height:44px;border-radius:var(--r-md);display:grid;place-items:center;
  background:var(--grad-navy);box-shadow:var(--sh1);transition:transform .4s;
}
.brand:hover .logo{transform:scale(1.05)}
.brand .logo svg{width:26px;height:auto;fill:#fff}
/* Un solo logo, siempre el blanco: la barra no cambia al hacer scroll, así que
   la variante en tinta ya no existe ni en el HTML ni aquí.
   Los 36px son la altura a la que el antiguo lockup de 44px dibujaba su sigla
   —el 15% inferior de aquel viewBox era la línea de texto—, así que la barra no
   cambia de peso al pasar al monograma recortado. */
.brand .logo-on-dark{height:36px;width:auto;display:block;transition:transform .4s}
.brand:hover .logo-on-dark{transform:scale(1.05)}
.brand .bt{font-family:var(--font-head);font-weight:700;font-size:1.12rem;letter-spacing:.04em;color:#fff;line-height:1;transition:color .35s}
.brand .bs{font-size:.68rem;letter-spacing:.22em;text-transform:uppercase;color:var(--accent-hi);transition:color .35s}
/* Centrado real: fuera del flujo, para que el ancho desigual del logo (77px) y
   de los dos botones (~225px) no desplace la navegación del centro. */
.nav-links{display:flex;align-items:center;gap:28px;position:absolute;left:50%;transform:translateX(-50%)}
.nav-links a{
  font-family:var(--font-head);font-weight:500;font-size:.92rem;color:rgba(255,255,255,.88);
  position:relative;padding:6px 0;transition:color .3s;
}
.nav-links a::after{content:"";position:absolute;left:0;bottom:0;width:0;height:2px;background:var(--grad-accent);border-radius:2px;transition:width .3s}
.nav-links a:hover{color:#fff}
.nav-links a:hover::after{width:100%}
.nav-cta{display:flex;align-items:center;gap:14px;margin-left:auto}
.nav-login{font-family:var(--font-head);font-weight:600;font-size:.92rem;color:#fff;transition:color .3s}
/* En la barra es un botón relleno — mismo fondo que .btn-primary del hero. */
header.nav .nav-login{
  display:inline-flex;align-items:center;justify-content:center;
  padding:10px 20px;border-radius:var(--r-md);
  background:var(--grad-accent);color:#fff;
  box-shadow:var(--e-acc);
  transition:transform .3s cubic-bezier(.2,.8,.2,1), box-shadow .3s, filter .3s;
}
header.nav .nav-login:hover{filter:brightness(1.06);transform:translateY(-2px);box-shadow:var(--e-acc-h)}
/* Contact Us: solo contorno, para que la acción principal siga siendo Login.
   Mismo alto y radio que el de al lado, así los dos alinean. */
.nav-contact{
  display:inline-flex;align-items:center;justify-content:center;
  padding:10px 20px;border-radius:var(--r-md);
  font-family:var(--font-head);font-weight:600;font-size:.92rem;
  background:transparent;color:#fff;border:1px solid rgba(150,164,187,.55);
  transition:transform .3s cubic-bezier(.2,.8,.2,1), color .3s, border-color .3s, background .3s;
}
.nav-contact:hover{transform:translateY(-2px);color:#fff;border-color:var(--steel-l);background:rgba(150,164,187,.1)}
.burger{display:none;background:none;border:0;cursor:pointer;width:42px;height:42px;border-radius:var(--r-md);color:#fff}
.burger svg{width:26px;height:26px}

/* mobile menu */
.mobile-menu{
  position:fixed;inset:0;z-index:99;background:linear-gradient(168deg,#0c0b13,#182034);
  display:flex;flex-direction:column;justify-content:center;gap:6px;padding:0 40px;
  opacity:0;visibility:hidden;transition:opacity .4s, visibility .4s;
}
.mobile-menu.open{opacity:1;visibility:visible}
.mobile-menu a{font-family:var(--font-head);font-weight:600;font-size:1.6rem;color:#fff;padding:14px 0;border-bottom:1px solid rgba(255,255,255,.08)}
.mobile-menu a:hover{color:var(--accent-hi)}
.mobile-menu .mm-cta{margin-top:26px;border:0}

/* ============================================================
   HERO
   ============================================================ */
.hero{
  position:relative;min-height:100vh;display:flex;align-items:center;
  padding:calc(var(--nav-h) + 40px) 0 80px;overflow:hidden;
  background:
    radial-gradient(120% 80% at 85% -10%, rgba(61,111,176,.5) 0%, transparent 55%),
    radial-gradient(90% 70% at 5% 110%, rgba(89,106,134,.4) 0%, transparent 55%),
    linear-gradient(168deg,#0c0b13 0%,#121121 36%,#182034 72%,#223046 100%);
  color:#fff;
}
/* animated aurora blobs */
.aurora{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden}
.blob{position:absolute;border-radius:50%;filter:blur(70px);opacity:.5;mix-blend-mode:screen}
.blob.b1{width:520px;height:520px;top:-140px;right:-80px;background:radial-gradient(circle,#5b93d6,transparent 70%);animation:float1 18s ease-in-out infinite}
.blob.b2{width:440px;height:440px;bottom:-160px;left:-100px;background:radial-gradient(circle,#7db4dd,transparent 70%);animation:float2 22s ease-in-out infinite}
.blob.b3{width:340px;height:340px;top:40%;left:55%;background:radial-gradient(circle,#3d6fb0,transparent 70%);animation:float3 26s ease-in-out infinite}
@keyframes float1{0%,100%{transform:translate(0,0) scale(1)}50%{transform:translate(-50px,60px) scale(1.12)}}
@keyframes float2{0%,100%{transform:translate(0,0) scale(1)}50%{transform:translate(70px,-50px) scale(1.15)}}
@keyframes float3{0%,100%{transform:translate(0,0) scale(1)}50%{transform:translate(-40px,-40px) scale(.9)}}
/* blueprint grid */
.grid-bg{
  position:absolute;inset:-2px;z-index:0;pointer-events:none;opacity:.5;
  background-image:
    linear-gradient(rgba(125,180,221,.10) 1px,transparent 1px),
    linear-gradient(90deg,rgba(125,180,221,.10) 1px,transparent 1px);
  background-size:54px 54px;
  mask-image:radial-gradient(120% 90% at 60% 40%,#000 30%,transparent 78%);
  -webkit-mask-image:radial-gradient(120% 90% at 60% 40%,#000 30%,transparent 78%);
  will-change:transform;
}
.noise{
  position:absolute;inset:0;z-index:1;pointer-events:none;opacity:.045;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}
/* particle constellation canvas */
.particles{position:absolute;inset:0;z-index:1;pointer-events:none}
/* typewriter caret (border glued to end of text) */
.typewrap{display:block;min-height:1.15em}
.typed{display:inline;border-right:4px solid var(--accent-hi);padding-right:7px;animation:blink 1.05s steps(1) infinite}
@keyframes blink{50%{border-color:transparent}}
.hero .wrap{position:relative;z-index:2;display:grid;grid-template-columns:1.15fr .85fr;gap:56px;align-items:center}
/* Una sola píldora de eyebrow para todo el sitio — la del hero es la referencia. */
.hero-eyebrow,.eyebrow-pill{
  display:inline-flex;align-items:center;gap:10px;padding:7px 15px;border-radius:var(--r-pill);
  background:rgba(125,180,221,.12);border:1px solid rgba(125,180,221,.25);
  font-family:var(--font-head);font-weight:600;font-size:.76rem;letter-spacing:.14em;
  text-transform:uppercase;color:var(--accent-hi);
}
.hero-eyebrow .dot,.eyebrow-pill .dot{width:7px;height:7px;border-radius:50%;background:var(--accent-hi);box-shadow:0 0 0 0 rgba(125,180,221,.6);animation:pulse 2.4s infinite}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(125,180,221,.55)}70%{box-shadow:0 0 0 10px rgba(125,180,221,0)}100%{box-shadow:0 0 0 0 rgba(125,180,221,0)}}
.hero h1{
  font-size:clamp(2.3rem,4.9vw,3.95rem);font-weight:700;color:#fff;margin:22px 0 0;
}
/* El mismo azul de las palabras que se escriben en el hero, reutilizado en los
   títulos de sección para que no puedan divergir. */
.hero h1 .accent,.page-hero h1 .accent,.sec-head h2 .accent,.contact-copy h2 .accent{background:linear-gradient(120deg,#7db4dd,#5b93d6);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.hero .line{display:block;overflow:hidden}
.hero .line span{display:block}
.hero .lead{font-size:clamp(1rem,1.5vw,1.16rem);color:rgba(255,255,255,.74);max-width:32em;margin:24px 0 34px}
.hero-actions{display:flex;flex-wrap:wrap;gap:14px}
.hero-trust{margin-top:40px;display:flex;align-items:center;gap:18px;color:rgba(255,255,255,.55);font-size:.82rem}
.hero-trust .stars{color:var(--accent-hi);letter-spacing:2px}
/* hero visual card */
.hero-visual{position:relative}
.blueprint-card{
  position:relative;border-radius:var(--r-lg);padding:26px;overflow:hidden;
  background:linear-gradient(160deg,rgba(34,48,70,.85),rgba(18,17,33,.9));
  border:1px solid rgba(125,180,221,.2);box-shadow:0 30px 70px rgba(0,0,0,.5);
  backdrop-filter:blur(6px);
}
.blueprint-card::before{
  content:"";position:absolute;inset:0;opacity:.4;
  background-image:linear-gradient(rgba(125,180,221,.14) 1px,transparent 1px),linear-gradient(90deg,rgba(125,180,221,.14) 1px,transparent 1px);
  background-size:26px 26px;
}
.bp-head{position:relative;display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}
.bp-head .t{font-family:var(--font-head);font-weight:600;color:#fff;font-size:.98rem}
.bp-head .tag{font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;color:var(--accent-hi);border:1px solid rgba(125,180,221,.3);padding:4px 9px;border-radius:var(--r-sm)}
.bp-svg{position:relative;width:100%;height:auto;display:block}
.bp-stats{position:relative;display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:20px}
.bp-stat{background:rgba(125,180,221,.08);border:1px solid rgba(125,180,221,.16);border-radius:var(--r-md);padding:12px}
.bp-stat .n{font-family:var(--font-head);font-weight:700;font-size:1.3rem;color:#fff}
.bp-stat .l{font-size:.66rem;letter-spacing:.06em;text-transform:uppercase;color:rgba(255,255,255,.5);margin-top:2px}
.hero-badge{
  position:absolute;display:flex;align-items:center;gap:10px;padding:11px 15px;border-radius:var(--r-md);
  background:rgba(255,255,255,.96);box-shadow:var(--sh3);color:var(--navy);
}
.hero-badge svg{width:22px;height:22px;color:var(--accent)}
.hero-badge .bt{font-family:var(--font-head);font-weight:700;font-size:.9rem;line-height:1.1}
.hero-badge .bl{font-size:.68rem;color:var(--steel)}
.hero-badge.hb1{top:-22px;right:-14px;animation:bob 5s ease-in-out infinite}
.hero-badge.hb2{bottom:-20px;left:-18px;animation:bob 5.6s ease-in-out infinite .8s}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-10px)}}
.scroll-cue{position:absolute;left:50%;bottom:26px;transform:translateX(-50%);z-index:3;display:flex;flex-direction:column;align-items:center;gap:8px;color:rgba(255,255,255,.5);font-size:.7rem;letter-spacing:.2em;text-transform:uppercase}
.scroll-cue .mouse{width:22px;height:36px;border:2px solid rgba(255,255,255,.4);border-radius:var(--r-md);position:relative}
.scroll-cue .mouse::after{content:"";position:absolute;left:50%;top:7px;width:3px;height:7px;background:var(--accent-hi);border-radius:2px;transform:translateX(-50%);animation:wheel 1.8s infinite}
@keyframes wheel{0%{opacity:0;transform:translate(-50%,0)}40%{opacity:1}100%{opacity:0;transform:translate(-50%,12px)}}

/* ============================================================
   TRUSTED-BY MARQUEE
   ============================================================ */
.trusted{padding:50px 0;background:linear-gradient(180deg,#151d2e 0%,#101020 100%);border-top:1px solid rgba(125,180,221,.14);border-bottom:1px solid rgba(125,180,221,.08)}
.trusted .lbl{text-align:center;font-family:var(--font-head);font-weight:600;font-size:.8rem;letter-spacing:.14em;text-transform:uppercase;color:var(--steel-lt);margin-bottom:30px}
.marquee{overflow:hidden;-webkit-mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent);mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent)}
.marquee-track{display:flex;align-items:center;gap:64px;width:max-content;animation:scroll-x 36s linear infinite}
.marquee:hover .marquee-track{animation-play-state:paused}
@keyframes scroll-x{to{transform:translateX(-50%)}}
.logo-chip{display:flex;align-items:center;height:44px;flex-shrink:0}
.logo-chip img{height:100%;width:auto;max-width:200px;object-fit:contain;opacity:.68;filter:grayscale(30%);transition:opacity .35s,filter .35s}
.logo-chip:hover img{opacity:1;filter:none}

/* ============================================================
   SECTION SHELL
   ============================================================ */
.sec{padding:clamp(70px,9vw,120px) 0}
.sec-head{max-width:640px;margin-bottom:56px}
.sec-head.center{margin-left:auto;margin-right:auto;text-align:center}
.sec-head h2{font-size:clamp(1.9rem,3.6vw,2.9rem);font-weight:700;margin:16px 0 14px}
.sec-head p{color:var(--ink2);font-size:1.05rem}

/* Services */
.services{background:var(--canvas)}
.svc-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:26px}
.svc-card{
  position:relative;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);
  overflow:hidden;transition:transform .5s cubic-bezier(.2,.8,.2,1),box-shadow .5s,border-color .5s;
  transform-style:preserve-3d;
}
.svc-card:hover{transform:translateY(-8px);box-shadow:var(--sh3);border-color:transparent}
.svc-media{position:relative;height:212px;overflow:hidden;background:var(--grad-navy)}
.svc-media img{width:100%;height:100%;object-fit:cover;transition:transform .8s cubic-bezier(.2,.8,.2,1)}
.svc-card:hover .svc-media img{transform:scale(1.08)}
.svc-media::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(12,11,19,.02) 40%,rgba(12,11,19,.55) 100%)}
.svc-cat{position:absolute;top:14px;left:14px;z-index:2;font-family:var(--font-head);font-weight:600;font-size:.66rem;letter-spacing:.12em;text-transform:uppercase;color:#fff;background:rgba(61,111,176,.9);backdrop-filter:blur(4px);padding:6px 11px;border-radius:var(--r-sm)}
.svc-body{position:relative;padding:26px 28px 28px}
.svc-icon{position:absolute;top:-30px;left:26px;z-index:3;width:58px;height:58px;border-radius:var(--r-md);display:grid;place-items:center;background:var(--grad-navy);color:#fff;box-shadow:var(--sh2);transition:transform .5s,background .5s}
.svc-icon svg{width:28px;height:28px}
.svc-card:hover .svc-icon{background:var(--grad-accent);transform:scale(1.05)}
.svc-card h3{font-size:1.4rem;font-weight:700;margin:16px 0 14px}
.svc-list{list-style:none;display:flex;flex-direction:column;gap:9px;margin-bottom:24px}
.svc-list li{display:flex;align-items:flex-start;gap:10px;color:var(--ink2);font-size:.95rem}
.svc-list li svg{width:18px;height:18px;color:var(--accent);flex-shrink:0;margin-top:3px}
.svc-more{display:inline-flex;align-items:center;gap:7px;font-family:var(--font-head);font-weight:600;font-size:.92rem;color:var(--accent-ink);transition:gap .3s}
.svc-more svg{width:17px;height:17px;transition:transform .3s}
.svc-card:hover .svc-more{gap:12px}
.svc-card:hover .svc-more svg{transform:translateX(3px)}

/* Stats band */
.stats{position:relative;padding:clamp(60px,7vw,90px) 0;overflow:hidden;color:#fff;
  background:
    radial-gradient(90% 120% at 90% 10%, rgba(61,111,176,.5), transparent 60%),
    linear-gradient(135deg,#182034,#0c0b13);
}
.stats .noise{opacity:.05}
.stats .wrap{position:relative;z-index:2}
.stats-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:30px;text-align:center}
.stat .n{font-family:var(--font-head);font-weight:700;font-size:clamp(2.6rem,5vw,3.8rem);color:#fff;line-height:1;background:linear-gradient(120deg,#fff,#7db4dd);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.stat .l{margin-top:12px;font-size:.82rem;letter-spacing:.1em;text-transform:uppercase;color:rgba(255,255,255,.6)}
.stat .divider{display:none}

/* Pillars */
.pillars{background:var(--surface)}
.pill-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.pill{padding:34px 28px;border-radius:var(--r-lg);border:1px solid var(--border);background:var(--surface2);transition:transform .4s,box-shadow .4s,background .4s}
.pill:hover{transform:translateY(-6px);box-shadow:var(--sh2);background:var(--surface)}
.pill-ic{width:54px;height:54px;border-radius:var(--r-md);display:grid;place-items:center;background:var(--grad-accent);color:#fff;box-shadow:var(--e-acc);margin-bottom:20px}
.pill-ic svg{width:26px;height:26px}
.pill h3{font-size:1.24rem;margin-bottom:12px}
.pill p{color:var(--ink2);font-size:.95rem}

/* Testimonials */
.testi{background:var(--canvas);overflow:hidden}
.testi-marquee{overflow:hidden;-webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}
.testi-track{display:flex;gap:24px;width:max-content;animation:scroll-x 40s linear infinite}
.testi-marquee:hover .testi-track{animation-play-state:paused}
.testi-card{width:380px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:30px;box-shadow:var(--sh1)}
.testi-card .stars{color:var(--accent);letter-spacing:2px;font-size:1rem;margin-bottom:14px}
.testi-card .q{font-size:1.05rem;color:var(--ink);font-weight:500;margin-bottom:20px;line-height:1.55}
.testi-card .who{display:flex;align-items:center;gap:12px}
.testi-card .av{width:44px;height:44px;border-radius:50%;background:var(--grad-navy);color:#fff;display:grid;place-items:center;font-family:var(--font-head);font-weight:700}
.testi-card .nm{font-family:var(--font-head);font-weight:600;font-size:.95rem}
.testi-card .rl{font-size:.8rem;color:var(--ink3)}

/* Blog */
.blog{background:var(--surface)}
.blog-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:26px}
.post{border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden;background:var(--surface);transition:transform .4s,box-shadow .4s}
.post:hover{transform:translateY(-6px);box-shadow:var(--sh2)}
.post .thumb{height:180px;position:relative;overflow:hidden;background:var(--grad-navy)}
.post .thumb .g{position:absolute;inset:0;opacity:.5;background-image:linear-gradient(rgba(125,180,221,.16) 1px,transparent 1px),linear-gradient(90deg,rgba(125,180,221,.16) 1px,transparent 1px);background-size:26px 26px}
.post .thumb .ic{position:absolute;inset:0;display:grid;place-items:center;color:rgba(255,255,255,.85)}
.post .thumb .ic svg{width:52px;height:52px}
.post .thumb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform .7s cubic-bezier(.2,.8,.2,1)}
.post:hover .thumb img{transform:scale(1.06)}
.post .thumb .cat{position:absolute;top:14px;left:14px;font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;font-family:var(--font-head);font-weight:600;background:rgba(255,255,255,.92);color:var(--accent-ink);padding:5px 10px;border-radius:var(--r-sm)}
.post .body{padding:24px}
.post .date{font-size:.78rem;color:var(--ink3);margin-bottom:10px}
.post h3{font-size:1.16rem;line-height:1.3;margin-bottom:12px}
.post p{color:var(--ink2);font-size:.92rem;margin-bottom:16px}
.post .more{display:inline-flex;align-items:center;gap:7px;font-family:var(--font-head);font-weight:600;font-size:.9rem;color:var(--accent-ink);transition:gap .3s}
.post:hover .more{gap:11px}
.post .more svg{width:16px;height:16px}

/* Contact / CTA */
.contact{position:relative;overflow:hidden;color:#fff;background:#0b0a12}
.contact-bg{position:absolute;inset:0;z-index:0;background:url("assets/proj-endeavour.webp") center right/cover no-repeat;opacity:.4}
.contact-ov{position:absolute;inset:0;z-index:0;
  background:
    radial-gradient(85% 95% at 12% 15%, rgba(12,11,19,.78), transparent 60%),
    linear-gradient(115deg,rgba(11,10,18,.95) 0%,rgba(18,32,54,.78) 52%,rgba(34,48,70,.5) 100%);
}
.contact .grid-bg{opacity:.28}
.contact .wrap{position:relative;z-index:2;display:grid;grid-template-columns:1fr 1fr;gap:56px;align-items:center;padding-top:clamp(70px,9vw,110px);padding-bottom:clamp(70px,9vw,110px)}
.contact h2{font-size:clamp(2rem,4vw,3.1rem);color:#fff;font-weight:700;margin:18px 0 18px}
.contact .lead{color:rgba(255,255,255,.72);font-size:1.06rem;margin-bottom:30px;max-width:26em}
.contact-feats{display:flex;flex-direction:column;gap:16px}
.cfeat{display:flex;align-items:center;gap:14px}
.cfeat .ic{width:44px;height:44px;border-radius:var(--r-md);display:grid;place-items:center;background:rgba(125,180,221,.14);border:1px solid rgba(125,180,221,.24);color:var(--accent-hi);flex-shrink:0}
.cfeat .ic svg{width:20px;height:20px}
.cfeat .t{font-family:var(--font-head);font-weight:600;color:#fff;font-size:.98rem}
.cfeat .s{font-size:.86rem;color:rgba(255,255,255,.6)}
.form-card{background:rgba(255,255,255,.97);border-radius:var(--r-lg);padding:34px;box-shadow:var(--sh3)}
.form-card h3{font-size:1.35rem;margin-bottom:6px}
.form-card .sub{color:var(--ink2);font-size:.92rem;margin-bottom:22px}
.field{margin-bottom:15px}
.field label{display:block;font-family:var(--font-head);font-weight:600;font-size:.8rem;color:var(--ink2);margin-bottom:6px}
.field input,.field textarea{
  width:100%;font-family:var(--font-body);font-size:.94rem;color:var(--ink);
  padding:12px 14px;border:1px solid var(--border-strong);border-radius:var(--r-md);background:var(--surface);
  transition:border-color .25s,box-shadow .25s;
}
.field input:focus,.field textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(61,111,176,.12)}
.field textarea{resize:vertical;min-height:96px}
.two{display:grid;grid-template-columns:1fr 1fr;gap:15px}
.form-card .btn{width:100%;margin-top:6px}
.form-note{text-align:center;font-size:.78rem;color:var(--ink3);margin-top:14px}
.form-success{display:none;text-align:center;padding:30px 10px}
.form-success svg{width:56px;height:56px;color:var(--accent);margin:0 auto 16px}
.form-success h3{font-size:1.3rem;margin-bottom:8px}
.form-success p{color:var(--ink2);font-size:.94rem}
.form-card.sent form{display:none}
.form-card.sent .form-success{display:block}

/* Footer */
footer.ft{background:#0a0912;color:rgba(255,255,255,.66);padding:64px 0 30px}
.ft-top{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:40px;padding-bottom:44px;border-bottom:1px solid rgba(255,255,255,.09)}
.ft-brand .brandrow{display:flex;align-items:center;gap:11px;margin-bottom:16px}
.ft-brand .logo{width:44px;height:44px;border-radius:var(--r-md);background:var(--grad-navy);display:grid;place-items:center;border:1px solid rgba(255,255,255,.1)}
.ft-brand .logo svg{width:26px;fill:#fff}
.ft-brand .bt{font-family:var(--font-head);font-weight:700;color:#fff;font-size:1.1rem;letter-spacing:.04em}
.ft-brand .bs{font-size:.66rem;letter-spacing:.2em;text-transform:uppercase;color:var(--accent-hi)}
.ft-brand p{font-size:.9rem;max-width:30em;margin-bottom:20px}
.ft-social{display:flex;gap:10px}
.ft-social a{width:38px;height:38px;border-radius:var(--r-md);display:grid;place-items:center;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.09);color:rgba(255,255,255,.7);transition:.3s}
.ft-social a:hover{background:var(--accent);color:#fff;border-color:transparent;transform:translateY(-3px)}
.ft-social a svg{width:18px;height:18px}
.ft-col h4{font-family:var(--font-head);font-weight:600;color:#fff;font-size:.82rem;letter-spacing:.1em;text-transform:uppercase;margin-bottom:18px}
/* Al pasar el mouse cada línea sube 2px por su cuenta; las de al lado no se
   mueven porque el gesto es un transform, que no toca el flujo. */
.ft-col a{display:block;font-size:.92rem;color:rgba(255,255,255,.62);padding:6px 0;transition:color .25s, transform .25s cubic-bezier(.2,.8,.2,1)}
.ft-col a:hover{color:var(--accent-hi);transform:translateY(-2px)}
.ft-bot{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-top:26px;font-size:.84rem;flex-wrap:wrap}
.ft-bot .vora{color:rgba(255,255,255,.5)}
.ft-bot .vora a{color:var(--accent-hi);display:inline-block;transition:transform .25s cubic-bezier(.2,.8,.2,1)}
.ft-bot .vora a:hover{transform:translateY(-2px)}

/* Reveal animation base (GSAP toggles these) */
.reveal{opacity:0;transform:translateY(34px)}
/* Red de seguridad: si las animaciones no se inicializan (CDN caído o error de
   JS), site.js marca el documento y el contenido se muestra sin animar en vez
   de quedarse invisible. */
html.no-anim .reveal{opacity:1;transform:none}
.is-in{opacity:1;transform:none;transition:opacity .8s cubic-bezier(.2,.8,.2,1),transform .8s cubic-bezier(.2,.8,.2,1)}

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media (max-width:960px){
  .hero .wrap{grid-template-columns:1fr;gap:44px}
  .hero-visual{max-width:460px}
  .svc-grid,.svc-cols,.pill-grid,.blog-grid{grid-template-columns:1fr}
  .contact .wrap{grid-template-columns:1fr;gap:40px}
}
@media (max-width:760px){
  .nav-links,.nav-cta .nav-login,.nav-cta .nav-contact{display:none}
  .burger{display:grid;place-items:center;margin-left:auto}
  .nav-cta .btn{display:none}
  .svc-grid,.pill-grid,.blog-grid,.stats-grid{grid-template-columns:1fr}
  .stats-grid{gap:36px}
  .two{grid-template-columns:1fr}
  .ft-top{grid-template-columns:1fr 1fr}
  .ft-brand{grid-column:1/-1}
  .hero-badge{display:none}
}
@media (prefers-reduced-motion:reduce){
  *{animation-duration:.001s !important;animation-iteration-count:1 !important}
  .reveal{opacity:1;transform:none}
}

/* ============================================================
   CENTERED HERO (single column) — home
   ============================================================ */
.hero.center{min-height:94vh}
.hero.center .wrap{display:block;max-width:1180px;text-align:center}
.hero.center .hero-eyebrow{margin-bottom:2px}
/* 24ch deja "Leading the future of" entero en el primer renglón; el <br> manda
   las palabras que se escriben al segundo. */
/* El término del medio lleva una base fija + vw para que escale de forma
   continua. Con 5.2vw a secas, todo lo que bajara de 769px caía al mínimo: un
   tablet recibía la misma tipografía que un móvil. */
.hero.center h1,.isc .page-hero h1{margin:20px auto 0;max-width:24ch;font-size:clamp(2.5rem,1.87rem + 2.7vw,4.3rem)}
/* El corte de renglón lo fija el <br> del HTML; acá solo hay que garantizar que
   el segundo (el más largo, ~118 caracteres) entre completo. */
.hero.center .lead{margin:22px auto 34px;max-width:none;font-size:clamp(1.05rem,1rem + .23vw,1.2rem)}
/* Los tres renglones del hero son cortes fijos pensados para escritorio. Por
   debajo de 1040px no caben y el texto debe fluir solo. */
@media (max-width:1040px){
  .hero.center .lead br{display:none}
  .hero.center .lead{max-width:34em}
}
/* De tablet en adelante el hero necesita bastante más cuerpo: en un iPad Pro
   la curva anterior se quedaba entre 52 y 58px, muy poco para una pantalla de
   ese tamaño. Esta pendiente converge con la de escritorio a 1440px, así que
   el tamaño grande no cambia, y se queda por debajo del punto en el que
   "Leading the future of" se partiría en dos. */
@media (min-width:760px){
  .hero.center h1,.isc .page-hero h1{font-size:clamp(3.1rem,2.6rem + 1.5vw,3.9rem)}
  .hero.center .lead,.isc .page-hero .lead{font-size:clamp(1.08rem,1rem + .18vw,1.14rem)}
  /* El botón nunca escalaba: 15px junto a un titular de 60px se veía diminuto */
  .hero.center .hero-actions .btn,.isc .page-hero .hero-actions .btn{font-size:1rem;padding:15px 30px}
}
/* Desde 800px la pendiente se dispara para llegar al tope a los 960px en vez
   de a los 1440: así un iPad Pro recibe ya el titular grande. Por debajo de
   800 no se puede subir más sin que "Leading the future of" se parta. */
@media (min-width:800px){
  .hero.center h1,.isc .page-hero h1{font-size:clamp(3.4rem,1.1rem + 4.6vw,3.9rem)}
  .hero.center .lead,.isc .page-hero .lead{font-size:clamp(1.1rem,1rem + .25vw,1.18rem)}
  .hero.center .hero-actions .btn,.isc .page-hero .hero-actions .btn{font-size:1rem;padding:15px 30px}
}
.hero.center .hero-actions{justify-content:center}
.hero.center .hero-trust{justify-content:center;margin-top:34px;flex-wrap:wrap}
.hero.center .typed{white-space:nowrap}

/* ============================================================
   PAGE HERO (category subpages)
   ============================================================ */
.page-hero{position:relative;overflow:hidden;color:#fff;
  padding:calc(var(--nav-h) + 68px) 0 clamp(58px,8vw,92px);
  background:
    radial-gradient(120% 80% at 85% -10%,rgba(61,111,176,.5),transparent 55%),
    radial-gradient(90% 70% at 5% 110%,rgba(89,106,134,.4),transparent 55%),
    linear-gradient(168deg,#0c0b13 0%,#121121 36%,#182034 72%,#223046 100%);
}
.page-hero .wrap{position:relative;z-index:2;max-width:880px;text-align:center}
.page-hero .kick{display:inline-flex;align-items:center;gap:9px;padding:7px 15px;border-radius:var(--r-pill);background:rgba(125,180,221,.12);border:1px solid rgba(125,180,221,.25);font-family:var(--font-head);font-weight:600;font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;color:var(--accent-hi)}
.page-hero h1{color:#fff;font-size:clamp(2rem,4.1vw,3.25rem);font-weight:700;margin:22px auto 0;max-width:22ch}
.page-hero .lead{color:rgba(255,255,255,.75);font-size:clamp(1rem,1.4vw,1.14rem);margin:20px auto 30px;max-width:46em}
.page-hero .hero-actions{justify-content:center}

/* ============================================================
   PROJECTS SHOWCASE (alternating rows)
   ============================================================ */
.projects-show{background:var(--canvas)}
.projrow{display:grid;grid-template-columns:1fr 1fr;gap:clamp(30px,4vw,56px);align-items:center;margin-bottom:clamp(40px,5vw,66px)}
.projrow:last-child{margin-bottom:0}
.projmedia{position:relative;border-radius:var(--r-lg);overflow:hidden;box-shadow:var(--sh2);aspect-ratio:4/3;background:var(--grad-navy)}
.projmedia img{width:100%;height:100%;object-fit:cover;transition:transform .8s cubic-bezier(.2,.8,.2,1)}
.projrow:hover .projmedia img{transform:none}
.projnum{position:absolute;top:14px;left:14px;font-family:var(--font-head);font-weight:700;font-size:.7rem;letter-spacing:.1em;color:#fff;background:rgba(61,111,176,.9);padding:6px 11px;border-radius:var(--r-sm);backdrop-filter:blur(4px)}
.projbody .kick{font-family:var(--font-head);font-weight:600;font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}
.projbody h3{font-size:clamp(1.4rem,2.4vw,1.85rem);font-weight:700;margin:10px 0 14px}
.projbody p{color:var(--ink2);font-size:.97rem;margin-bottom:16px}
.projaddr{display:inline-flex;align-items:center;gap:8px;font-family:var(--font-head);font-weight:600;color:var(--accent-ink);font-size:.9rem}
.projaddr svg{width:17px;height:17px;color:var(--accent);flex-shrink:0}
@media(min-width:821px){ .projrow:nth-child(even) .projmedia{order:2} }
@media(max-width:820px){ .projrow{grid-template-columns:1fr;gap:22px} }

/* page-hero photo background (subpages) */
.page-hero .ph-bg{position:absolute;inset:0;z-index:0;background-size:cover;background-position:center;opacity:.42}
.page-hero .ph-ov{position:absolute;inset:0;z-index:0;background:radial-gradient(90% 90% at 50% -10%,rgba(61,111,176,.4),transparent 60%),linear-gradient(180deg,rgba(11,10,18,.82) 0%,rgba(15,22,38,.86) 100%)}
.page-hero .grid-bg{opacity:.3}

/* two-line brand subtitle (Innovative / Structural Consultants) */
.brand .bs{line-height:1.5}
.ft-brand .bs{line-height:1.5}

/* ============================================================
   BLOG ARTICLE
   ============================================================ */
.article-hero{position:relative;overflow:hidden;color:#fff;padding:calc(var(--nav-h) + 54px) 0 44px;
  background:radial-gradient(120% 80% at 80% -10%,rgba(61,111,176,.45),transparent 55%),linear-gradient(168deg,#0c0b13,#121121 40%,#182034 100%);}
.article-hero .wrap{position:relative;z-index:2;max-width:820px}
.backlink{display:inline-flex;align-items:center;gap:7px;font-family:var(--font-head);font-weight:600;font-size:.82rem;color:var(--accent-hi);margin-bottom:22px;transition:gap .3s}
.backlink:hover{gap:11px}
.backlink svg{width:16px;height:16px}
.apill{display:inline-block;font-family:var(--font-head);font-weight:600;font-size:.68rem;letter-spacing:.14em;text-transform:uppercase;color:#fff;background:rgba(61,111,176,.9);padding:6px 12px;border-radius:var(--r-sm)}
.article-hero h1{color:#fff;font-size:clamp(1.9rem,3.8vw,3rem);font-weight:700;margin:18px 0 20px;max-width:20ch}
.ameta{display:flex;flex-wrap:wrap;align-items:center;gap:10px;color:rgba(255,255,255,.62);font-size:.9rem}
.ameta .av{width:34px;height:34px;border-radius:50%;background:var(--grad-accent);display:grid;place-items:center;font-family:var(--font-head);font-weight:700;font-size:.78rem;color:#fff}
.ameta b{color:#fff;font-weight:600}
.ameta .sep{opacity:.4}
.article-media{max-width:940px;margin:-30px auto 0;padding:0 24px;position:relative;z-index:3}
.article-media .m{width:100%;border-radius:var(--r-lg);box-shadow:var(--sh3);aspect-ratio:16/7;object-fit:cover;background:var(--grad-navy);display:block}
.article-media .ph{position:relative;overflow:hidden}
.article-media .ph::after{content:"";position:absolute;inset:0;opacity:.5;background-image:linear-gradient(rgba(125,180,221,.14) 1px,transparent 1px),linear-gradient(90deg,rgba(125,180,221,.14) 1px,transparent 1px);background-size:30px 30px}
.article{max-width:760px;margin:0 auto;padding:clamp(40px,6vw,64px) 24px}
.article .lead{font-size:1.22rem;line-height:1.7;color:var(--ink);font-weight:500;margin-bottom:26px}
.article p{font-size:1.06rem;line-height:1.8;color:var(--ink2);margin-bottom:22px}
.article h2{font-size:clamp(1.4rem,2.4vw,1.8rem);color:var(--navy);margin:40px 0 14px}
.article h3{font-size:1.18rem;color:var(--navy);margin:28px 0 10px}
.article ul,.article ol{margin:0 0 22px 0;padding-left:24px}
.article li{font-size:1.05rem;line-height:1.7;color:var(--ink2);margin-bottom:10px}
.article strong{color:var(--navy)}
.article blockquote{border-left:3px solid var(--accent);background:var(--surface2);padding:16px 22px;margin:28px 0;border-radius:0 12px 12px 0;color:var(--ink);font-size:1.12rem;font-style:italic}
.callout{display:flex;gap:15px;background:var(--accent-soft);border:1px solid #cfe0f4;border-radius:var(--r-md);padding:22px 24px;margin:30px 0}
.callout svg{width:26px;height:26px;color:var(--accent-ink);flex-shrink:0;margin-top:2px}
.callout p{margin:0;color:var(--accent-ink);font-size:1rem;line-height:1.65}
.callout b{color:var(--navy)}
.article-cta{background:var(--canvas);text-align:center;padding:clamp(50px,7vw,82px) 0;border-top:1px solid var(--border)}
.article-cta h2{font-size:clamp(1.6rem,3vw,2.3rem);margin-bottom:14px}
.article-cta p{color:var(--ink2);max-width:40em;margin:0 auto 26px;font-size:1.05rem}

/* Tighter 3-line brand lockup (ISC / Innovative / Structural Consultants) */
.brand > span, .ft-brand .brandrow > span{line-height:1.12}
.brand .bt, .ft-brand .bt{line-height:1.14}
.brand .bs, .ft-brand .bs{line-height:1.2}

/* ============================================================
   SISTEMA ISC
   Deriva de paleta-final-isc.html y 1_isc-login-reference.html.
   Dos reglas gobiernan todo lo de abajo:
     1. El 90% de la pantalla es navy + acero + arena.
     2. El acento (--acc) es el único color con croma y solo aparece
        en acción, dato activo y foco. Nunca decora.
   Todo va bajo .isc: la clase que lleva el <body> de cada página convertida.
   ============================================================ */
body.isc{background:var(--isc-bg);color:var(--sand)}

/* ---- Secciones: un solo fondo en dos niveles tonales ---- */
.isc .sec{background:transparent}
.isc .sec.raised,.isc .stats.raised{
  background:linear-gradient(160deg,var(--isc-deep),var(--isc-bg));
  border-top:1px solid var(--hair);
  border-bottom:1px solid var(--hair);
}
.isc .sec-head h2,.isc h2,.isc h3,.isc h4{color:#fff}
.isc .sec-head h2{text-wrap:balance}
.isc .sec-head p{color:var(--sand);max-width:58ch}
/* Centrado: el bloque ya viene centrado por .sec-head.center, pero el h2 y el
   párrafo llevan tope propio de ancho y necesitan sus márgenes automáticos. */
.isc .sec-head.center h2,.isc .sec-head.center p{margin-left:auto;margin-right:auto}
.isc .eyebrow{color:var(--steel-l)}
.isc .eyebrow::before{background:var(--steel-d)}
.isc .eyebrow.light{color:var(--steel-l)}

/* ---- Banda clara: la comparten Trusted y Stats ----
   Un solo sitio define el fondo, los filetes y cómo se comporta el texto sobre
   claro, así las dos no pueden divergir. El azul del hero no tiene contraste
   sobre #dde2ee, de modo que el acento pasa a la variante de día que ya define
   la paleta (#3D6FB0). */
.isc section.band-light{
  background:#dde2ee;
  border-top:1px solid rgba(31,34,59,.14);
  border-bottom:1px solid rgba(31,34,59,.14);
}
.isc .band-light h2,.isc .band-light h3{color:#1f223b}
.isc .band-light .sec-head p{color:var(--steel-d)}
.isc .band-light .sec-head h2 .accent,
.isc .band-light .contact-copy h2 .accent{
  background:linear-gradient(120deg,#3D6FB0,#2f5b93);
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;
}
.isc .band-light .eyebrow-pill{background:rgba(61,111,176,.1);border-color:rgba(61,111,176,.28);color:#2f5b93}
.isc .band-light .eyebrow-pill .dot{background:#3D6FB0;box-shadow:0 0 0 0 rgba(61,111,176,.6)}

/* ---- Trusted ----
   Los logos de los clientes son blancos sobre transparente, hechos para fondo
   oscuro, así que sobre claro desaparecen. Se resuelven pintando el chip de
   navy y usando el propio archivo como máscara (--l, que pone site.js): la
   imagen queda oculta pero sostiene el ancho, y lo que se ve es el navy
   recortado con la forma exacta del logo.
   La etiqueta sube 12px y esos mismos 12px pasan al hueco con los logos, así
   que la banda mide exactamente lo mismo que antes. */
.isc .trusted{padding:38px 0 50px}
.isc .trusted .lbl{color:#1f223b;margin-bottom:42px}
.isc .logo-chip{
  background:#1f223b;opacity:.72;transition:opacity .35s;
  -webkit-mask:var(--l) center/contain no-repeat;mask:var(--l) center/contain no-repeat;
}
.isc .logo-chip:hover{opacity:1}
.isc .logo-chip img{visibility:hidden}

/* ---- Services: tres columnas sobre el fondo profundo (.band-deep) ----
   overflow:hidden contiene la capa de grano. No se lo pongo a Pillars: ahí
   recortaría las tarjetas sticky. */
/* Sin overflow:hidden. Un ancestro con overflow distinto de visible anula el
   position:sticky de las tarjetas en móvil, y la capa de grano no se desborda
   igualmente: es absolute con inset:0 dentro de la sección. */
.isc .services{overflow:visible}
.isc .band-deep .noise{opacity:.07}
.isc .band-deep .wrap{position:relative;z-index:2}
.svc-cols{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}

/* Las tres tarjetas no son del mismo color: escalonan la familia navy y la
   última tira hacia el azul del fondo. Mismo sistema, sin plano. */
.svccol{
  --c-top:rgba(51,50,74,.74);--c-bot:rgba(20,19,32,.66);
  display:flex;flex-direction:column;overflow:hidden;
  background:linear-gradient(165deg,var(--c-top),var(--c-bot));
  border:1px solid rgba(150,164,187,.2);border-radius:var(--r-lg);
  backdrop-filter:blur(24px) saturate(120%);-webkit-backdrop-filter:blur(24px) saturate(120%);
  box-shadow:var(--e-panel), inset 0 1px 0 rgba(255,255,255,.07);
  transition:transform .4s cubic-bezier(.2,.8,.2,1), border-color .4s, box-shadow .4s;
}
.svccol:nth-child(1){--c-top:rgba(43,42,63,.76)}
.svccol:nth-child(2){--c-top:rgba(51,50,74,.76)}
.svccol:nth-child(3){--c-top:rgba(60,74,100,.72);--c-bot:rgba(24,32,52,.66)}
.svccol:hover{transform:translateY(-5px);border-color:var(--hair-strong);
  box-shadow:var(--e-panel), inset 0 1px 0 rgba(255,255,255,.12)}

/* Altura fija, medida en el sitio en vivo: la foto ocupa 253px de alto pase lo
   que pase con el ancho de la tarjeta. Antes dependía de la proporción y crecía
   con la columna. */
.svccol .media{position:relative;flex:none;height:253px;overflow:hidden;background:var(--isc-surface)}
.svccol .media img{width:100%;height:100%;object-fit:cover;transition:transform .8s cubic-bezier(.2,.8,.2,1)}
.svccol .media::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(180deg,transparent 58%,rgba(18,17,29,.9) 100%)}
.svccol:hover .media img{transform:scale(1.05)}

.svccol .copy{display:flex;flex-direction:column;flex:1;gap:16px;padding:24px 24px 26px}
.svccol h3{margin:0;font-size:1.2rem;letter-spacing:-.01em}
.svccol .svc-list{margin:0;flex:1;gap:11px}
.svccol .svc-list li{font-size:.92rem;color:var(--sand);line-height:1.5}
.svccol .svc-list li svg{color:var(--steel-l);width:16px;height:16px;margin-top:4px}
.svccol .btn{width:100%}
/* ---- Stats: la banda con más carga de la página ----
   Aquí el acento es legítimo: la paleta lo reserva a "dato activo", y esto son
   datos. El resplandor entra por arriba y deja las cifras en la zona de luz.
   Más compacta que antes: menos relleno y menos hueco bajo el encabezado. */
.isc .stats{padding:clamp(46px,5vw,66px) 0}
.isc .stats .noise{display:none}
/* Sin tope de ancho, para que el título quepa en un solo renglón */
.isc .stats .sec-head{max-width:none;margin-bottom:34px}
.isc .stat .n{background:none;-webkit-text-fill-color:#1f223b;color:#1f223b}
.isc .stat.key .n{-webkit-text-fill-color:#3D6FB0;color:#3D6FB0}
.isc .stat .l{color:var(--steel-d);text-transform:none;letter-spacing:.02em;font-size:.9rem}

/* ---- Fondo profundo: lo comparten Services y Pillars ----
   Es el degradado de 1_isc-login-reference. Definido una vez para que las dos
   secciones no puedan separarse. */
.isc section.band-deep{
  background:
    radial-gradient(150% 120% at 96% 24%, rgba(61,111,176,.42) 0%, transparent 55%),
    radial-gradient(130% 120% at 100% 96%, rgba(89,106,134,.38) 0%, transparent 52%),
    linear-gradient(118deg,#0c0b13 0%,#121121 45%,#182034 78%,#223046 100%);
  border-top:1px solid var(--hair);border-bottom:1px solid var(--hair);
}

/* ---- Pillars: las tarjetas se apilan al hacer scroll ----
   Cada una es sticky con un tope 28px mayor que la anterior, así la que sube
   cubre a la de abajo y deja asomando su borde superior. Necesitan ser casi
   opacas (.95) para tapar de verdad; con menos, el apilado se ve sucio. */
/* Todo va bajo .pill-stack: las páginas internas usan .pill dentro de
   .pill-grid con el estilo claro original y no deben tocarse. */
.pill-stack{display:flex;flex-direction:column;gap:26px}
/* Las tres comparten superficie: lo que las separa es el filete, la sombra y el
   propio apilado, no un cambio de color. */
/* Mismo panel que la tarjeta Multi-Unit de Services: idénticos degradado, filete,
   desenfoque y sombra. */
.pill-stack .pill{
  position:sticky;
  display:grid;grid-template-columns:64px 1fr;column-gap:28px;align-items:start;
  padding:34px 36px;min-height:196px;
  background:linear-gradient(165deg,rgba(51,50,74,.76),rgba(20,19,32,.66));
  border:1px solid rgba(150,164,187,.2);border-radius:var(--r-lg);
  backdrop-filter:blur(24px) saturate(120%);-webkit-backdrop-filter:blur(24px) saturate(120%);
  box-shadow:var(--e-panel), inset 0 1px 0 rgba(255,255,255,.07);
  transition:transform .4s cubic-bezier(.2,.8,.2,1), background .4s, border-color .4s, box-shadow .4s;
}
.pill-stack .pill:nth-child(1){top:112px}
.pill-stack .pill:nth-child(2){top:140px}
.pill-stack .pill:nth-child(3){top:168px}
/* El fondo se repite aquí a propósito: sin él gana .pill:hover del bloque
   claro, que lo pinta de blanco. */
.pill-stack .pill:hover{
  background:linear-gradient(165deg,rgba(51,50,74,.76),rgba(20,19,32,.66));
  transform:translateY(-4px);
  border-color:var(--hair-strong);
  box-shadow:var(--e-panel), inset 0 1px 0 rgba(255,255,255,.12);
}
/* Icono en el azul del sistema, con el mismo tratamiento que los iconos de la
   sección de contacto: tile teñido de acento y trazo en accent-hi. Sin giro ni
   escala en el hover — solo sube de intensidad. */
.pill-stack .pill-ic{
  width:64px;height:64px;margin:0;border-radius:var(--r-md);
  display:grid;place-items:center;
  background:rgba(125,180,221,.14);border:1px solid rgba(125,180,221,.28);
  color:var(--accent-hi);box-shadow:none;
  transition:background .4s, border-color .4s, color .4s;
}
.pill-stack .pill-ic svg{width:28px;height:28px}
.pill-stack .pill:hover .pill-ic{background:rgba(125,180,221,.22);border-color:rgba(125,180,221,.5);color:#a8d3f0}
.pill-stack .pill h3{margin:0 0 10px;font-size:1.32rem;letter-spacing:-.01em}
.pill-stack .pill p{color:var(--sand);font-size:.98rem;max-width:62ch}

@media (max-width:700px){
  .pill-stack .pill{grid-template-columns:1fr;row-gap:18px;padding:28px 24px;min-height:0}
  .pill-stack .pill:nth-child(1){top:96px}
  .pill-stack .pill:nth-child(2){top:118px}
  .pill-stack .pill:nth-child(3){top:140px}
}

/* ---- Testimonials: bento sobre banda clara ----
   Fuera el carrusel automático: los cinco testimonios se leen a la vez, que es
   lo que da credibilidad, y nada se mueve solo. El efecto es el tilt 3D que ya
   existía en site.js y estaba sin usar; basta con la clase .tilt. */
/* Cuatro columnas y dos filas: antes eran tres filas y la sección pedía
   demasiado scroll. Los cinco testimonios siguen visibles. */
.isc .testi{padding:clamp(52px,6vw,80px) 0}
.isc .testi .sec-head{margin-bottom:36px}
.testi-bento{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;perspective:1200px}
.tcard{
  display:flex;flex-direction:column;gap:16px;
  padding:22px 24px;border-radius:var(--r-lg);
  background:#fff;border:1px solid rgba(31,34,59,.1);
  box-shadow:0 1px 2px rgba(31,34,59,.05), 0 10px 30px rgba(31,34,59,.07);
  transform-style:preserve-3d;
  transition:transform .45s cubic-bezier(.2,.8,.2,1), box-shadow .45s;
}
.tcard:hover{box-shadow:0 4px 10px rgba(31,34,59,.08), 0 22px 50px rgba(31,34,59,.15)}
.tcard .stars{color:#3D6FB0;letter-spacing:3px;font-size:.9rem}
.tcard .q{color:#1f223b;font-size:.95rem;line-height:1.55;flex:1;margin:0}
.tcard .who{display:flex;align-items:center;gap:12px}
.tcard .av{
  width:42px;height:42px;border-radius:50%;flex-shrink:0;display:grid;place-items:center;
  background:#1f223b;color:#fff;
}
.tcard .av svg{width:20px;height:20px}
.tcard .nm{font-family:var(--font-head);font-weight:600;font-size:.94rem;color:#1f223b}
.tcard .rl{font-size:.82rem;color:var(--steel-d)}

/* La foto ocupa el lugar de la antigua reseña destacada: dos columnas y dos
   filas a la izquierda. Las cuatro reseñas caben en las dos de la derecha, así
   que la sección son dos filas y no tres. */
.testi-photo{
  grid-column:span 2;grid-row:span 2;
  margin:0;overflow:hidden;border-radius:var(--r-lg);
  border:1px solid rgba(31,34,59,.1);
  box-shadow:0 1px 2px rgba(31,34,59,.05), 0 10px 30px rgba(31,34,59,.08);
  transform-style:preserve-3d;
  transition:transform .45s cubic-bezier(.2,.8,.2,1), box-shadow .45s;
}
/* El archivo ya viene recortado a 1.32, prácticamente la proporción de esta
   caja, así que cover apenas recorta y puede ir centrado. */
.testi-photo img{width:100%;height:100%;object-fit:cover;object-position:center}
.testi-photo:hover{box-shadow:0 4px 10px rgba(31,34,59,.08), 0 22px 50px rgba(31,34,59,.15)}

/* Tablet: la foto a la izquierda y dos reseñas al lado. La foto se centra
   verticalmente a su proporción real en vez de estirarse a lo alto de la
   columna: estirada, cover la recortaría a formato retrato y volvería a cortar
   a los de los extremos. Las otras dos reseñas entran cada 20s. */
@media (min-width:701px) and (max-width:1040px){
  .testi-bento{grid-template-columns:1fr 1fr}
  .testi-photo{grid-column:1;grid-row:span 2;align-self:center;aspect-ratio:1352/1024}
  .testi-bento[data-page=0] .tcard:nth-child(n+4){display:none}
  .testi-bento[data-page=1] .tcard:nth-child(-n+3){display:none}
}
/* El cruce entre reseñas: solo opacidad, lenta y con salida y entrada
   simétricas. Antes eran 350ms con ease, y el corte se notaba. */
.testi-bento .tcard{transition:opacity .55s cubic-bezier(.4,0,.2,1)}
.testi-bento.swapping .tcard{opacity:0}

@media (max-width:700px){
  .testi-bento{grid-template-columns:1fr}
  .testi-photo{grid-column:auto;grid-row:auto;align-self:auto;aspect-ratio:3/2}
}
/* ---- Blog ---- */
/* Sin el tope de 640px del encabezado: "Insights from our engineers" ocupa unos
   690px y con el tope se partía en dos renglones. */
.isc .blog .sec-head{max-width:none}
/* Mismo panel que las tarjetas de How We Work. Ojo: aquí NO va
   .isc .blog{background:transparent} — anularía el fondo de .band-deep. */
.isc .post{
  background:linear-gradient(165deg,rgba(51,50,74,.76),rgba(20,19,32,.66));
  border-color:rgba(150,164,187,.2);
  backdrop-filter:blur(24px) saturate(120%);-webkit-backdrop-filter:blur(24px) saturate(120%);
  box-shadow:var(--e-panel), inset 0 1px 0 rgba(255,255,255,.07);
}
.isc .post:hover{transform:translateY(-4px);border-color:var(--hair-strong);
  box-shadow:var(--e-panel), inset 0 1px 0 rgba(255,255,255,.12)}
.isc .post .date{color:var(--steel-l)}
.isc .post p{color:var(--sand)}
.isc .post .more{color:var(--acc)}
.isc .post .thumb .cat{background:rgba(20,19,32,.82);color:var(--steel-l);border:1px solid var(--hair)}

/* ---- Contact: banda clara, como In Their Words ----
   Se van la foto de fondo y su velo oscuro: sobre claro no pintaban nada. */
.isc .contact{color:#1f223b}
.isc .contact .lead{color:var(--steel-d);max-width:46ch}
.isc .cfeat .ic{background:rgba(61,111,176,.1);border:1px solid rgba(61,111,176,.25);color:#3D6FB0}
.isc .cfeat .t{color:#1f223b}
.isc .form-card{
  background:#fff;border:1px solid rgba(31,34,59,.1);
  backdrop-filter:none;-webkit-backdrop-filter:none;
  box-shadow:0 1px 2px rgba(31,34,59,.05), 0 14px 40px rgba(31,34,59,.1);
}
.isc .form-card .sub{color:#1f223b;font-size:1.02rem;line-height:1.5}
.isc .field label{
  font-family:var(--font-head);font-weight:600;font-size:.66rem;
  letter-spacing:.1em;text-transform:uppercase;color:var(--steel-d);
}
.isc .field input,.isc .field textarea{background:#fff;border-color:rgba(31,34,59,.18);color:#1f223b}
.isc .field input::placeholder,.isc .field textarea::placeholder{color:#9aa3b4}
.isc .field input:focus,.isc .field textarea:focus{border-color:#3D6FB0;box-shadow:0 0 0 3px rgba(61,111,176,.16)}
.isc .form-note{color:var(--steel-d)}
.isc .form-success svg{color:#3D6FB0}
.isc .form-success p{color:var(--steel-d)}

/* ---- Modales legales (en las 4 páginas con formulario) ----
   <dialog> nativo: trae foco atrapado, cierre con Escape y backdrop propio. */
.linklike{
  background:none;border:0;padding:0;font:inherit;cursor:pointer;
  color:#2f5b93;text-decoration:underline;
}
.linklike:hover{color:#3D6FB0}
/* margin:auto es lo que centra un <dialog> modal, y el reset global de arriba
   (*{margin:0}) lo estaba anulando: por eso se abría pegado a la izquierda. */
dialog.legal{
  width:min(760px,92vw);max-height:82vh;margin:auto;padding:0;border:0;
  border-radius:var(--r-lg);background:#dde2ee;color:#1f223b;
  box-shadow:0 30px 90px rgba(31,34,59,.35);
}
dialog.legal[open]{display:flex;flex-direction:column}
dialog.legal::backdrop{background:rgba(20,19,32,.62);backdrop-filter:blur(3px)}
.legal-head{
  display:flex;align-items:center;justify-content:space-between;gap:16px;flex:none;
  padding:20px 24px;border-bottom:1px solid rgba(31,34,59,.16);
}
.legal-head h3{
  font-family:var(--font-head);font-weight:700;font-size:1.4rem;
  letter-spacing:-.01em;color:#1f223b;margin:0;
}
/* La equis es un botón del sistema: mismo relleno, radio y sombra que Login. */
.legal-x{
  flex:none;display:grid;place-items:center;cursor:pointer;border:0;
  width:38px;height:38px;border-radius:var(--r-md);
  background:var(--grad-accent);color:#fff;
  font-family:var(--font-head);font-size:.9rem;line-height:1;
  box-shadow:var(--e-acc);
  transition:transform .3s cubic-bezier(.2,.8,.2,1), box-shadow .3s, filter .3s;
}
.legal-x:hover{filter:brightness(1.06);transform:translateY(-2px);box-shadow:var(--e-acc-h)}
.legal-body{padding:22px 24px 28px;overflow-y:auto}
.legal-body .upd{font-size:.82rem;color:var(--steel-d);margin-bottom:18px}
.legal-body h4{font-family:var(--font-head);font-weight:600;font-size:1.06rem;letter-spacing:-.005em;color:#2f5b93;margin:26px 0 10px}
.legal-body h4:first-of-type{margin-top:0}
.legal-body p{font-size:.92rem;line-height:1.65;color:#3d4457;margin:0 0 10px}
.legal-body ul{margin:0 0 12px;padding-left:20px}
.legal-body li{font-size:.92rem;line-height:1.6;color:#3d4457;margin-bottom:6px}
.legal-body a{color:#2f5b93;text-decoration:underline;word-break:break-word}

/* ---- Footer ----
   El mismo degradado del hero, con la cuadrícula técnica encima. A diferencia
   del hero, aquí la cuadrícula no lleva máscara: cubre el fondo entero. Sin
   partículas: ese canvas solo existe en el hero. */
.isc footer.ft{
  position:relative;overflow:hidden;
  border-top:1px solid var(--hair);
  background:
    radial-gradient(120% 80% at 85% -10%, rgba(61,111,176,.5) 0%, transparent 55%),
    radial-gradient(90% 70% at 5% 110%, rgba(89,106,134,.4) 0%, transparent 55%),
    linear-gradient(168deg,#0c0b13 0%,#121121 36%,#182034 72%,#223046 100%);
}
.isc footer.ft .grid-bg{
  opacity:.55;
  mask-image:none;-webkit-mask-image:none;
  will-change:auto;
}
.isc footer.ft .wrap{position:relative;z-index:2}

/* Logo del pie: el mismo archivo blanco del header */
.ft-brand .ft-logo{height:36px;width:auto;display:block}

/* Las tres columnas de enlaces se agrupan a la derecha, ajustadas a su
   contenido; la marca se queda con todo el espacio sobrante a la izquierda. */
.ft-top{grid-template-columns:1fr auto auto auto;gap:40px 56px}
/* Terms y Privacy abren los mismos modales que el formulario, así que son
   botones. Se les da el aspecto exacto de los enlaces vecinos. */
.ft-legal{
  display:block;background:none;border:0;cursor:pointer;
  font-family:var(--font-body);font-size:.92rem;color:rgba(255,255,255,.62);
  padding:6px 0;text-align:left;
  transition:color .25s, transform .25s cubic-bezier(.2,.8,.2,1);
}
.ft-legal:hover{color:var(--accent-hi);transform:translateY(-2px)}
/* El botón hereda display:block de .ft-col a: hay que devolverle el suyo y
   neutralizar el desplazamiento del hover de los enlaces. */
.ft-col .ft-login{
  display:inline-flex;margin-top:16px;
  padding:11px 24px;font-size:.9rem;color:#fff;
}
.ft-col .ft-login:hover{color:#fff;transform:translateY(-2px)}

@media (max-width:760px){
  /* Solo Services y Legal: Support se oculta porque Contact us y Login ya
     están en el menú de la hamburguesa. */
  .ft-top{grid-template-columns:1fr 1fr;gap:32px}
  .ft-top .ft-col:last-child{display:none}
}

/* ---- Botón fantasma en acero ---- */
.isc .btn-ghost{background:transparent;color:var(--steel-l);border-color:var(--hair-strong);backdrop-filter:none}
.isc .btn-ghost:hover{background:rgba(150,164,187,.1);color:#fff}


/* ============================================================
   MÓVIL (hasta 700px)
   ============================================================ */
@media (max-width:700px){

  /* ---- Services: el mismo apilado de How We Work ----
     Valores calcados de .pill-stack en móvil: hueco de 26px y topes que suben
     de 22 en 22, para que los dos apilados de la página se comporten igual. */
  .svc-cols{display:flex;flex-direction:column;gap:26px;grid-template-columns:none}
  .svccol{position:sticky}
  .svccol:nth-child(1){top:96px}
  .svccol:nth-child(2){top:118px}
  .svccol:nth-child(3){top:140px}
  /* Foto más baja para que la tarjeta entera quepa bajo la barra fija */
  .svccol .media{height:190px}
  .svccol .copy{padding:20px 20px 22px;gap:13px}
  .svccol .svc-list{gap:9px}

  /* ---- Our Impact: carrusel horizontal, una cifra a la vez ---- */
  .stats-grid{
    display:flex;grid-template-columns:none;gap:0;
    overflow-x:auto;scroll-snap-type:x mandatory;
    scroll-behavior:smooth;
    scrollbar-width:none;-ms-overflow-style:none;
  }
  .stats-grid::-webkit-scrollbar{display:none}
  .stat{flex:0 0 100%;scroll-snap-align:center}

  /* ---- In Their Words: la foto fija y una reseña cada vez ---- */
  .testi-bento[data-page="0"] .tcard:not(:nth-child(2)),
  .testi-bento[data-page="1"] .tcard:not(:nth-child(3)),
  .testi-bento[data-page="2"] .tcard:not(:nth-child(4)),
  .testi-bento[data-page="3"] .tcard:not(:nth-child(5)){display:none}

  /* ---- Blog: un artículo a la vez, asomando el siguiente ----
     Sin movimiento automático: el trozo visible del siguiente es lo que le
     dice al visitante que puede desplazarse a un lado. */
  .blog-grid{
    display:flex;grid-template-columns:none;gap:14px;
    overflow-x:auto;scroll-snap-type:x mandatory;
    scrollbar-width:none;-ms-overflow-style:none;
  }
  .blog-grid::-webkit-scrollbar{display:none}
  .post{flex:0 0 82%;scroll-snap-align:start}

  /* ---- Contact: fuera los tres puntos de valor ----
     Al ocultarlos, entre la descripción y la tarjeta quedaban el margen
     inferior del párrafo (30px) más el hueco de la retícula (40px). */
  .contact-feats{display:none}
  .isc .contact .lead{margin-bottom:0}
  .isc .contact .wrap{gap:26px}
}

/* ============================================================
   PÁGINAS DE TIPOLOGÍA (single family, multi-unit, hospitality)
   Heredan todo el sistema por la clase .isc del <body>; aquí solo van
   las piezas que el home no tiene.
   ============================================================ */

/* ---- Hero de tipología: el fondo del pie, con la cuadrícula entera ---- */
.isc .page-hero{
  min-height:94vh;display:flex;align-items:center;
  padding:calc(var(--nav-h) + 40px) 0 80px;
  background:
    radial-gradient(120% 80% at 85% -10%, rgba(61,111,176,.5) 0%, transparent 55%),
    radial-gradient(90% 70% at 5% 110%, rgba(89,106,134,.4) 0%, transparent 55%),
    linear-gradient(168deg,#0c0b13 0%,#121121 36%,#182034 72%,#223046 100%);
  border-bottom:1px solid var(--hair);
}
.isc .page-hero .grid-bg{opacity:.55;mask-image:none;-webkit-mask-image:none;will-change:auto}
.isc .page-hero .lead{color:var(--sand);max-width:52ch}

/* ---- Pilares de estas páginas: mismas tarjetas de vidrio del sistema ---- */
.isc .pill-grid{gap:24px}
.isc .pill{
  background:linear-gradient(165deg,rgba(51,50,74,.76),rgba(20,19,32,.66));
  border:1px solid rgba(150,164,187,.2);
  backdrop-filter:blur(24px) saturate(120%);-webkit-backdrop-filter:blur(24px) saturate(120%);
  box-shadow:var(--e-panel), inset 0 1px 0 rgba(255,255,255,.07);
}
.isc .pill:hover{
  background:linear-gradient(165deg,rgba(51,50,74,.76),rgba(20,19,32,.66));
  transform:translateY(-4px);border-color:var(--hair-strong);
  box-shadow:var(--e-panel), inset 0 1px 0 rgba(255,255,255,.12);
}
.isc .pill-ic{
  background:rgba(125,180,221,.14);border:1px solid rgba(125,180,221,.28);
  color:var(--accent-hi);box-shadow:none;
}
.isc .pill p{color:var(--sand)}

/* ---- Proyectos destacados ---- */
.isc .projmedia{box-shadow:var(--e-panel);border:1px solid var(--hair)}
.isc .projbody .kick{color:var(--steel-l)}
/* Titulo de cada proyecto en el degradado azul del sistema */
.isc .projbody h3{background:linear-gradient(120deg,#7db4dd,#5b93d6);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.isc .projbody p{color:var(--sand)}
.isc .projaddr{color:var(--acc)}
.isc .projaddr svg{color:var(--acc)}
.isc .projnum{background:rgba(20,19,32,.82);border:1px solid var(--hair);color:var(--steel-l)}

/* ---- Pilares sobre banda clara ----
   Con el fondo claro, las tarjetas de vidrio oscuras dejarían el h3 en navy
   sobre navy. Pasan a tarjeta blanca, el mismo tratamiento que las reseñas
   del home sobre esta misma banda. */
.isc .band-light .pill{
  background:#fff;border-color:rgba(31,34,59,.1);
  backdrop-filter:none;-webkit-backdrop-filter:none;
  box-shadow:0 1px 2px rgba(31,34,59,.05), 0 10px 30px rgba(31,34,59,.07);
}
.isc .band-light .pill:hover{
  background:#fff;transform:translateY(-4px);border-color:rgba(31,34,59,.16);
  box-shadow:0 4px 10px rgba(31,34,59,.08), 0 22px 50px rgba(31,34,59,.15);
}
.isc .band-light .pill-ic{
  background:rgba(61,111,176,.1);border:1px solid rgba(61,111,176,.25);color:#3D6FB0;
}
.isc .band-light .pill p{color:#3d4457}

/* ---- Featured Work: la imagen se eleva, sin zoom ----
   El fondo lo aporta .band-deep, igual que Engineering Solutions. Un solo
   gesto en el hover: dos a la vez (subir y ampliar) se leen inquietos. */
.isc .projmedia{
  transition:transform .45s cubic-bezier(.2,.8,.2,1), box-shadow .45s, border-color .45s;
}
.isc .projrow:hover .projmedia{
  transform:translateY(-6px);
  border-color:var(--hair-strong);
  box-shadow:var(--e-panel);
}
.isc .projrow:hover .projmedia img{transform:none}

/* ---- Hero con fotografía integrada (páginas de tipología) ----
   La foto no se funde por sí sola: su cielo está en luminancia 197 y el fondo
   del hero entre 12 y 45. Primero se baja el brillo para acercarla al tono del
   fondo y después se disuelve con DOS máscaras encadenadas, una por elemento:
   el contenedor difumina el lado izquierdo y la imagen el borde superior e
   inferior. Encadenarlas evita mask-composite, que aún no es fiable, y sobre
   todo garantiza que cada degradado llegue a cero: con una sola máscara radial
   el borde izquierdo se quedaba al 35% y se veía la línea del recorte. */
.isc .ph-split .ph-media{
  position:absolute;top:0;right:0;bottom:0;z-index:0;pointer-events:none;
  /* El ancho se ata al centro, no a un tope en px. La columna de texto es
     min(46%,560px) dentro de un .wrap de 1200px centrado, así que SIEMPRE
     termina en VW/2 - 8px: en la mitad exacta de la pantalla, sea cual sea la
     resolución. Con calc(50% + 130px) el borde izquierdo de la foto queda
     siempre 130px por delante de ese final, ni más ni menos. Un tope fijo
     (antes min(66%,900px)) no escalaba: pasados los 1364px la foto dejaba de
     crecer y el fundido porcentual se comía una fracción cada vez mayor. */
  width:calc(50% + 130px);
  /* Vuelve a 90deg: inclinar el degradado hace que la esquina superior
     izquierda ya no valga cero y aparece un corte recto justo donde antes se
     difuminaba. La sensacion menos rigida se consigue alargando el degradado
     y anadiendole pasos intermedios, no torciendolo. */
  /* Las paradas van en PÍXELES, no en porcentajes: así el tramo en cero mide
     siempre los mismos 105px del solape con el texto y la banda de fundido
     siempre los mismos 140px, en 1200 igual que en 2560. En porcentajes la
     banda se estiraba con la pantalla y volvía a quedar centrada en el hero.
     Neto: la foto alcanza opacidad plena en VW/2 + 115px.

     Estos 245px son también lo que decide CUÁNTO de la foto se ve, y por eso
     son cortos. El degradado tapa siempre los primeros 245px del encuadre, o
     sea el 29% de la foto en 1440; con los 385px anteriores tapaba el 46% y se
     tragaba al ingeniero de single-family entero. Ensanchar el cajón para
     recuperarlo hace lo contrario de lo que parece: con recorte horizontal ya
     en 0%, más ancho significa más escala, cada píxel de pantalla abarca menos
     foto, y el borde izquierdo se ve MENOS (probado: a +20% el ingeniero
     desaparece y solo queda su mano). La palanca real es acortar el degradado,
     y su único tope es dónde termina el texto. */
  -webkit-mask-image:linear-gradient(90deg,transparent 0,transparent 105px,rgba(0,0,0,.3) 145px,rgba(0,0,0,.65) 185px,rgba(0,0,0,.9) 215px,#000 245px);
  mask-image:linear-gradient(90deg,transparent 0,transparent 105px,rgba(0,0,0,.3) 145px,rgba(0,0,0,.65) 185px,rgba(0,0,0,.9) 215px,#000 245px);
}
.isc .ph-split .ph-media img{
  width:100%;height:100%;object-fit:cover;object-position:58% 50%;
  /* Opacidad plena: el fundido lo hacen las dos máscaras, no la transparencia */
  opacity:1;
  -webkit-mask-image:linear-gradient(180deg,transparent 0%,#000 26%,#000 82%,transparent 100%);
  mask-image:linear-gradient(180deg,transparent 0%,#000 26%,#000 82%,transparent 100%);
}
/* ---- Foto con rótulo de marca (hospitality: SpringHill Suites) ----
   El rótulo del hotel cae en el tercio izquierdo de la toma, justo donde la
   máscara horizontal disuelve la imagen: con el encuadre normal se leía
   "NGHILL SUITES", cortado por el borde del contenedor. object-position no
   basta —el recorte horizontal disponible es de solo 197px y el rótulo
   necesitaba moverse 314px—, así que la foto va recortada por la derecha
   (950px de los 1553 originales, toda la altura). Al quedar más estrecha que
   el contenedor, cover pasa a escalar por ancho: desaparece el recorte lateral
   y el rótulo se corre solo hasta la zona ya opaca de la máscara.
   950 es el punto de equilibrio: por debajo (probado con 740) el rótulo queda
   impecable pero la foto se amplía un 46% y pierde la planta baja entera; por
   encima, el rótulo vuelve a caer dentro del degradado.
   El 18% vertical baja el encuadre hasta dejar el rótulo entre el 27% y el 38%
   de la altura, dentro del tramo opaco de la máscara de la imagen (26%-82%).
   Contrapartida: la marquesina de la entrada queda fuera de cuadro. */
.isc .ph-split .ph-media-sign img{object-position:50% 18%}

/* El texto se queda en la mitad izquierda, alineado a la izquierda */
.isc .ph-split .wrap{max-width:var(--maxw);text-align:left}
/* 46% deja aire entre el final del texto y la zona donde la foto ya pesa */
.isc .ph-split .ph-copy{position:relative;z-index:2;max-width:min(46%,560px)}
.isc .ph-split h1{margin-left:0;margin-right:0;max-width:15ch}
.isc .ph-split .lead{margin-left:0;margin-right:0;max-width:none}
.isc .ph-split .hero-actions{justify-content:flex-start}

@media (max-width:900px){
  /* La foto pasa al fondo completo y se oscurece más, para que el texto siga
     leyéndose encima. */
  .isc .ph-split .ph-media{
    width:100%;left:0;
    -webkit-mask-image:none;mask-image:none;
  }
  .isc .ph-split .ph-media img{
    object-position:60% 42%;
    /* En móvil la foto va detrás del texto, así que sí necesita bajar */
    opacity:.5;
    -webkit-mask-image:linear-gradient(180deg,transparent 0%,#000 22%,#000 78%,transparent 100%);
    mask-image:linear-gradient(180deg,transparent 0%,#000 22%,#000 78%,transparent 100%);
  }
  .isc .ph-split .ph-copy{max-width:none}
  .isc .ph-split h1{max-width:18ch}
}

.isc .ph-split .lead-br-m,.isc .ph-split .lead-br-t{display:none}
/* Los tres renglones son cortes de escritorio; en pantallas estrechas el
   texto tiene que repartirse solo. */
/* El renglon mas largo son 49 caracteres y la columna de texto solo da para
   ellos por encima de 1160px. Por debajo los cortes fijos dejan palabras
   sueltas (en un iPad Pro caben 36-44), asi que se desactivan y el texto se
   reparte solo. */
@media (max-width:1160px){
  .isc .ph-split .lead-br{display:none}
  /* Cortes propios del tramo tablet, donde la columna da para menos texto */
  .isc .ph-split .lead-br-t{display:inline}
}
@media (max-width:900px){
  .isc .ph-split .lead-br-m{display:inline}
  .isc .ph-split .lead{max-width:38em}
}

/* ---- Why Choose Us en móvil: una tarjeta a la vez ----
   Mismo patrón que el blog del home: cada tarjeta ocupa el 82% del ancho, así
   que siempre asoma un trozo de la siguiente y se entiende que hay más a un
   lado. Sin movimiento automático. */
@media (max-width:700px){
  .isc .pill-grid{
    display:flex;grid-template-columns:none;gap:14px;
    overflow-x:auto;scroll-snap-type:x mandatory;
    scrollbar-width:none;-ms-overflow-style:none;
  }
  .isc .pill-grid::-webkit-scrollbar{display:none}
  .isc .pill-grid .pill{flex:0 0 82%;scroll-snap-align:start}
}

/* ---- Featured Work en móvil: cada proyecto es una tarjeta que se apila ----
   Mismos valores que los apilados del home: hueco de 26px y topes que suben de
   22 en 22. La sección no lleva overflow, que es lo que anularía el sticky. */
@media (max-width:700px){
  .isc .proj-stack{display:flex;flex-direction:column;gap:26px}
  .isc .proj-stack .projrow{
    position:sticky;display:block;margin-bottom:0;
    padding:20px 20px 26px;
    background:linear-gradient(165deg,rgba(51,50,74,.76),rgba(20,19,32,.66));
    border:1px solid rgba(150,164,187,.2);border-radius:var(--r-lg);
    backdrop-filter:blur(24px) saturate(120%);-webkit-backdrop-filter:blur(24px) saturate(120%);
    box-shadow:var(--e-panel), inset 0 1px 0 rgba(255,255,255,.07);
  }
  .isc .proj-stack .projrow:nth-child(1){top:96px}
  .isc .proj-stack .projrow:nth-child(2){top:118px}
  .isc .proj-stack .projrow:nth-child(3){top:140px}
  /* La foto dentro de la tarjeta: sin sombra propia, ya la tiene el panel */
  .isc .proj-stack .projmedia{margin-bottom:20px;box-shadow:none}
  .isc .proj-stack .projrow:hover .projmedia{transform:none;box-shadow:none}
  .isc .proj-stack .projbody h3{font-size:1.28rem;margin:0 0 10px}
  .isc .proj-stack .projbody p{font-size:.94rem;margin:0}
  /* La ubicacion iba pegada al parrafo: el margen del p es 0 dentro de la
     tarjeta, asi que el aire lo pone la propia direccion. */
  .isc .proj-stack .projaddr{margin-top:16px}
}

/* Multi-Unit: las fotos son cuadradas y los edificios verticales. Con la
   proporción 4:3 del resto, cover les recortaría un 25% y les cortaría la
   coronación. */
.isc .proj-square .projmedia{aspect-ratio:1/1}

/* Trampa anti-bot del formulario de contacto: fuera de pantalla, no display:none
   (algunos bots ignoran lo que está oculto con display). */
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.form-error{color:#b3261e;font-size:14px;margin:10px 0 0}
.form-card form button[disabled]{opacity:.6;cursor:progress}
