/* ══════════════════════════════════════════════════════════════
   CANONICAL DESIGN TOKENS — single source of truth
   Every page used to duplicate this palette in its own inline
   <style> (the --ink-4 contrast fix needed SIX file edits because
   of that), and privacidad/accesibilidad/aviso-legal defined no
   variables at all — relying on scattered per-rule fallbacks.
   This block gives every page the full token set from one place.
   The remaining per-page inline :root blocks carry identical values
   and are slated for removal; new token changes belong HERE.
   ══════════════════════════════════════════════════════════════ */
:root{
  --ease-clinical:cubic-bezier(.16,1,.3,1);
  --navy:#0C3868; --navy-2:#0C447C; --navy-3:#185FA5; --navy-footer:#07111F;
  --teal:#007A7A; --teal-2:#00B3B3; --teal-lt:#E2F0F0; --teal-mid:rgba(0,122,122,.12);
  --blue-50:#E6F1FB; --blue-100:#B5D4F4; --blue-200:#85B7EB; --blue-400:#378ADD; --blue-600:#185FA5; --blue-800:#0C447C; --blue-900:#042C53;
  --white:#FFFFFF; --surface:#F7F6F3;
  --border-l:rgba(0,0,0,.06); --border-d:rgba(255,255,255,.1);
  --ink:#111111; --ink-2:#3A3A3A; --ink-3:#6B6B6B; --ink-4:#767676;
  --accent:var(--teal);
  --ff-display:'Fraunces',Georgia,serif;
  --ff-body:'DM Sans',system-ui,sans-serif;
  --ff-mono:'DM Mono','Courier New',monospace;
  --hdr:68px; --max:1380px; --pad:clamp(1.25rem,4vw,3rem);
  --r-xs:4px; --r-sm:6px; --r-md:8px; --r-lg:12px;
  --fs-label:.8125rem; --fs-meta:.9375rem; --fs-body-sm:1rem;
  --fs-body:1.0625rem; --fs-body-lg:1.1875rem;
  --fs-h4:1.375rem; --fs-h3:1.75rem;
  --fs-h2:clamp(2rem,3.2vw,2.5rem); --fs-h1:clamp(2.5rem,4.8vw,3.5rem);
  --fs-hero-title:clamp(1.875rem,2.6vw,2.25rem);
  --rule-l:var(--border-l); --rule-d:var(--border-d);
}

/* core.css — shared design-system rules extracted from page <style> blocks.
   Identical across all pages; pulled out to (a) de-duplicate production CSS
   and (b) keep each page's inline CSS small. Loaded before polish.css. */

.opp-link{
  color:#006666!important;
  font-weight:600!important;
  border-bottom:1.5px solid rgba(0,102,102,.4)!important;
}
.opp-link:hover{
  color:#004d4d!important;
  border-bottom-color:rgba(0,77,77,.6)!important;
}
.milestone-num{
  color:#E8B84B!important;
  -webkit-text-fill-color:#E8B84B!important;
  position:relative;
}
.milestone-label{
  color:rgba(232,184,75,.75)!important;
}
.paths-section .btn-text,.hero .btn-text,.contact-bg .btn-text,.team-bg .btn-text,
.partner-bg .btn-text,.focus-bg .btn-text,section[id] .btn-text:not(.on-dark)
{color: rgba(0,200,200,.9) !important;border-bottom-color: rgba(0,179,179,.3) !important;}
.paths-section .btn-text:hover,.hero .btn-text:hover,.contact-bg .btn-text:hover,
.team-bg .btn-text:hover,.partner-bg .btn-text:hover,.focus-bg .btn-text:hover
{color: #00e0e0 !important;border-bottom-color: rgba(0,224,224,.5) !important;}
.story-typographic-journal::after{content:'';position:absolute;bottom:0;left:0;width:28px;height:1.5px;background:var(--teal-2,#00B3B3);}
.hero h1,.hero h2,.hero h3,.hero .display,.hero .display-xl,.hero .display-lg,.hero .display-md,.hero .display-sm,
.contact-bg h1,.contact-bg h2,.contact-bg h3,.contact-bg .display,.contact-bg .display-lg,.contact-bg .display-md,.contact-bg .display-xl,
.team-bg h1,.team-bg h2,.team-bg h3,.team-bg .display,
.partner-bg h1,.partner-bg h2,.partner-bg h3,.partner-bg .display,
.paths-section h2,.paths-section .display,
.focus-bg h2,.focus-bg .display,
.blog-hero h1,.blog-hero h2,.blog-hero .display
{color:#fff!important;}
.contact-bg p,.contact-bg .sec-head p,.team-bg p,.partner-bg p,.paths-section p,.focus-bg p,.blog-hero p,.hero .hero-desc
{color:rgba(255,255,255,.8)!important;}
.hero-cred,.team-role,.team-bio,.team-line-tag,.cinfo-label,.hstat-label,.footer-col ul a,.footer-col address
{color:rgba(255,255,255,.72)!important;}
.cinfo-value{color:rgba(255,255,255,.9)!important;}
.lines-bg h2,.lines-bg .display,.trials-bg h2,.trials-bg .display,.pipeline-bg h2,.pipeline-bg .display,.projects-bg h2,.projects-bg .display,.cap-bg h2,.cap-bg .display,.partners-strip h2,.partners-strip .display
{color:var(--ink,#1A1A1A)!important;}
.lines-bg p,.lines-bg .sec-head p,.trials-bg p,.trials-bg .sec-head p,.pipeline-bg p,.projects-bg p,.cap-bg p
{color:var(--text-on-light-2,#404040)!important;}
.lines-bg .eyebrow,.lines-bg .label,.trials-bg .label,.trials-bg .eyebrow,.pipeline-bg .label,.projects-bg .label
{color:var(--accent,#009999)!important;}
.hstat-num,.stat-num,.hstrip-num,.pstat-num,.blog-hero-stat-n
{color:#fff!important;-webkit-text-fill-color:#fff!important;background:none!important;-webkit-background-clip:unset!important;background-clip:unset!important;}
.hstat-num sub{color:#009999!important;-webkit-text-fill-color:#009999!important;}
.hstat-label{color:rgba(255,255,255,.72)!important;}
/* .hdr-logo-img's full definition (size, filter, opacity:.96,
   transition) lives in polish.css. This file used to also force
   opacity:.9 here via !important, silently winning over polish.css's
   intended .96 regardless of which file loaded last — a small but
   real visual mismatch (the logo was rendering dimmer than designed).
   Removed; the onerror="this.style.opacity='.3'" fallback on the
   <img> tag itself (broken-image-load handling) is unaffected since
   inline style attributes always win on specificity anyway. */
/* The old .affil-section / .affil-logo-item / .affil-img-main /
   .affil-img-inibic / .affil-ph / .affil-ph-main block that used to
   live here was the pre-redesign affiliations strip — confirmed zero
   usage anywhere in current markup, removed. The canonical
   .affil-section/.affil-card system (added this session, shared
   sitewide) is defined once, further down this file. */
/* Header sits flush at top by default — the announcement bar only
   exists on the homepage (.latest-bar), which opts into its own
   offset via the rules right below this comment in index.html. */
body{padding-top:68px;}
.hdr{top:0;}
.wrap,.container{max-width:1280px;}
.hero-inner{gap:3rem;}
.skip-link{position:absolute;left:-9999px;top:0;z-index:1000;background:var(--navy-2);color:#fff;padding:.75rem 1.25rem;font-size:.875rem;font-weight:500;border-radius:0 0 6px 0;}
.skip-link:focus{left:0;}
.hdr{position:fixed;left:0;right:0;height:68px;background:var(--navy-2);border-bottom:1px solid rgba(255,255,255,.1);z-index:900;}
.hdr.scrolled{height:68px;}
/* .hdr-right is defined once, in polish.css, for the live .hdr-main
   header structure — this used to also define it here with a
   slightly different gap (.875rem vs polish.css's 1rem), a leftover
   from the pre-redesign flat header system. Removed. */
.lt-btn{padding:.3rem .65rem;font-family:var(--ff-mono,'DM Mono',monospace);font-size:var(--fs-label);font-weight:500;letter-spacing:.08em;text-transform:uppercase;color:rgba(255,255,255,.7);background:transparent;border:none;cursor:pointer;transition:color .15s,background .15s;line-height:1;border-radius:calc(var(--r-sm) - 2px);}
.lt-btn--active,.lt-btn[aria-pressed="true"]{color:var(--navy-2)!important;background:#fff!important;}
.mob-toggle{display:none;width:38px;height:38px;background:rgba(255,255,255,.1);border:none;border-radius:var(--r-sm);cursor:pointer;flex-direction:column;align-items:center;justify-content:center;gap:5px;padding:0;}
.mob-toggle span{display:block;width:16px;height:1.5px;background:#fff;transition:all .25s;}
.mob-overlay{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:1050;opacity:0;pointer-events:none;transition:opacity .25s;}
.mob-overlay.open{opacity:1;pointer-events:auto;}
.mob-drawer{position:fixed;top:0;right:-100%;bottom:0;width:min(320px,86vw);background:linear-gradient(180deg,var(--navy-2,#0C447C),var(--navy,#0C3868));z-index:1100;transition:right .32s var(--ease-clinical);display:flex;flex-direction:column;padding-top:84px;overflow-y:auto;box-shadow:-12px 0 40px rgba(7,17,31,.35);}
.mob-drawer.open{right:0;}
.mob-drawer-nav{padding:1.5rem 1.25rem;display:flex;flex-direction:column;gap:.125rem;}
.mob-drawer-nav a{position:relative;display:block;padding:.875rem 1rem .875rem 1.125rem;font-family:var(--ff-body,'DM Sans',sans-serif);font-size:1rem;font-weight:500;letter-spacing:.005em;color:rgba(255,255,255,.82);text-decoration:none;border-radius:10px;transition:background .18s,color .18s,padding-left .18s;}
.mob-drawer-nav a:hover{background:rgba(255,255,255,.08);color:#fff;padding-left:1.375rem;}
.mob-drawer-nav a.current{background:rgba(255,255,255,.12);color:#fff;}
.mob-drawer-nav a.current::before{content:'';position:absolute;left:0;top:.875rem;bottom:.875rem;width:3px;border-radius:2px;background:var(--teal-2,#00B3B3);}
.mob-lang{display:flex;align-items:center;gap:.5rem;padding:1.25rem;border-top:1px solid rgba(255,255,255,.12);margin-top:auto;}
.mob-lang .lt-btn{flex:1;padding:.6rem 0;text-align:center;border:1px solid rgba(255,255,255,.18);}
.mob-lang .lt-btn.lt-btn--active{border-color:#fff;}
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box;}
html{scroll-behavior:smooth;font-size:16px;}
.reveal.in{opacity:1;transform:none;}
html[data-lang="es"] [lang="es"]{display:inline !important;}
html[data-lang="es"] [lang="es"].blk{display:block !important;}
html[data-lang="es"] [lang="en"]{display:none !important;}
html[data-lang="en"] [lang="en"]{display:inline;}
html[data-lang="en"] [lang="en"].blk{display:block;}
html[data-lang="en"] [lang="es"]{display:none;}
.rl-card, .research-line-card, [class*="line-card"] {
  padding: 2rem !important;
}
.btn, .btn-primary, .btn-sec, .cta-btn, [class*="btn-"]:not(.lt-btn):not(.mob-toggle) {
  border-radius: 2px !important;
}
a[style*="border-radius:8px"], button[style*="border-radius:8px"],
a[style*="border-radius: 8px"], button[style*="border-radius: 8px"] {
  border-radius: 2px !important;
}
a[style*="border-radius:6px"], a[style*="border-radius:7px"],
a[style*="border-radius:9px"], button[style*="border-radius:6px"] {
  border-radius: 2px !important;
}
.site-footer::before{content:'';position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(0,122,122,.25),transparent);}
.footer-grid{max-width:1440px;margin:0 auto;padding:0 clamp(1.25rem,4vw,3rem);display:grid;grid-template-columns:1.4fr 1fr 1fr;gap:3rem;}
@media(max-width:860px){
  .footer-grid{grid-template-columns:1fr 1fr;}
  .footer-col-brand{grid-column:1/-1;}
}
@media(max-width:540px){
  .footer-grid{grid-template-columns:1fr;}
  .footer-bottom-bar{flex-direction:column;align-items:flex-start;}
}
.footer-logo-img{height:36px;width:auto;display:block;filter:brightness(0) invert(1);opacity:.82;margin-bottom:1rem;}
.footer-tagline{font-family:var(--ff-mono,'DM Mono',monospace);font-size:var(--fs-label);letter-spacing:.12em;text-transform:uppercase;color:rgba(255,255,255,.28);line-height:1.8;max-width:220px;}
.footer-nav-label{font-family:var(--ff-mono,'DM Mono',monospace);font-size:var(--fs-label);letter-spacing:.14em;text-transform:uppercase;color:rgba(255,255,255,.22);margin-bottom:.875rem;}
.footer-col-nav nav{display:flex;flex-direction:column;gap:.5rem;}
.footer-col-nav nav a{font-size:.8125rem;color:rgba(255,255,255,.42);text-decoration:none;transition:color .15s;}
.footer-col-nav nav a:hover{color:rgba(255,255,255,.82);}
.footer-address{font-size:.8rem;color:rgba(255,255,255,.32);line-height:1.75;font-style:normal;}
.footer-address strong{display:block;color:rgba(255,255,255,.52);font-weight:500;margin-bottom:.25rem;}
.footer-copy{font-size:var(--fs-label);color:rgba(255,255,255,.45);line-height:1.5;}
.footer-certs{display:flex;align-items:center;gap:1.5rem;}
.footer-certs span{font-family:var(--ff-mono,'DM Mono',monospace);font-size:var(--fs-label);letter-spacing:.12em;text-transform:uppercase;color:rgba(255,255,255,.45);}
.pub-strip-nav {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: 1.5rem;
}
.psn-btn {
  width: 36px; height: 36px;
  border-radius: 50%;
  background: rgba(255,255,255,.04);
  border: 1px solid rgba(255,255,255,.1);
  display: flex; align-items: center; justify-content: center;
  cursor: pointer;
  color: rgba(255,255,255,.4);
  transition: background .15s, color .15s, border-color .15s;
}
.psn-btn:hover { background: rgba(255,255,255,.08); color: #fff; border-color: rgba(255,255,255,.2); }
.psn-nav-group { display: flex; align-items: center; gap: .5rem; }
.psn-count { font-family: var(--ff-mono,'DM Mono',monospace); font-size: .55rem; letter-spacing: .1em; color: rgba(255,255,255,.25); }
/* ══ AFFILIATIONS & PARTNERSHIPS — canonical, shared sitewide ══ */
.affil-section{
  background:var(--surface,#F7F6F3);
  border-top:1px solid var(--border-l,rgba(0,0,0,.06));
  padding:4rem 0;
}
.affil-section-header{
  margin-bottom:2.5rem;
}
.affil-section-eyebrow{
  font-family:var(--ff-mono,'DM Mono',monospace);
  font-size:var(--fs-label,.8125rem);
  letter-spacing:.14em;text-transform:uppercase;
  color:var(--teal,#007A7A);
  display:block;margin-bottom:.625rem;
}
.affil-section-sub{
  font-size:.9375rem;color:var(--ink-3,#6B6B6B);
  line-height:1.65;max-width:44rem;margin:0;
}
.affil-grid{
  display:grid;
  grid-template-columns:repeat(5,1fr);
  gap:1rem;
}
@media(max-width:1024px){.affil-grid{grid-template-columns:repeat(3,1fr);}}
@media(max-width:640px){.affil-grid{grid-template-columns:1fr 1fr;}}
@media(max-width:420px){.affil-grid{grid-template-columns:1fr;}}

.affil-card{
  background:#fff;
  border:1px solid var(--border-l,rgba(0,0,0,.06));
  border-radius:var(--r-lg,12px);
  padding:1.5rem 1.25rem 1.25rem;
  display:flex;flex-direction:column;gap:1rem;
  text-decoration:none;color:inherit;
  transition:box-shadow .2s var(--ease-clinical),border-color .2s;
}
a.affil-card:hover{
  box-shadow:0 4px 20px rgba(12,56,104,.08);
  border-color:rgba(0,122,122,.25);
}
.affil-card-logo{
  height:48px;display:flex;align-items:center;
}
.affil-card-logo img{
  max-height:44px;width:auto;max-width:100%;
  display:block;object-fit:contain;
  filter:none;opacity:1;
}
.affil-card-name{
  font-family:var(--ff-body,'DM Sans',sans-serif);
  font-size:.875rem;font-weight:600;
  color:var(--navy,#0C3868);line-height:1.3;
}
.affil-card-desc{
  font-size:.8125rem;color:var(--ink-3,#6B6B6B);
  line-height:1.55;margin:0;
}
.affil-card--placeholder{
  background:transparent;
  border:1.5px dashed rgba(12,56,104,.18);
  border-radius:var(--r-lg,12px);
  padding:1.5rem 1.25rem 1.25rem;
  display:flex;flex-direction:column;gap:1rem;
  cursor:default;
}
.affil-card-logo--ph{
  height:48px;display:flex;align-items:center;
  color:rgba(12,56,104,.25);
}
.affil-card-logo--ph svg{width:40px;height:40px;}
.affil-card-name--ph{
  font-family:var(--ff-body,'DM Sans',sans-serif);
  font-size:.875rem;font-weight:600;
  color:rgba(12,56,104,.3);
}
.affil-card-desc--ph{
  font-size:.8125rem;color:rgba(107,107,107,.5);
  line-height:1.55;margin:0;
}

.hero { position: relative; }
.hero::after {
  content: '';
  position: absolute;
  top: -20%; right: -10%;
  width: 60vw; height: 60vw;
  max-width: 700px; max-height: 700px;
  background: radial-gradient(ellipse at center, rgba(0,122,122,.08) 0%, transparent 70%);
  pointer-events: none;
  z-index: 0;
}
.section-warm {
  background: #f7f6f3;
}
.section-dark {
  background: var(--navy-footer);
}
.line-card {
  transition: background .18s, box-shadow .18s, transform .18s;
}
.line-card:hover {
  background: rgba(0,122,122,.04) !important;
  transform: translateY(-1px);
  box-shadow: 0 4px 20px rgba(0,0,0,.06);
}
.path-card {
  background: rgba(255,255,255,.015) !important;
  transition: background .2s, border-color .2s;
}
.path-card:hover {
  background: rgba(0,122,122,.04) !important;
  border-color: rgba(0,122,122,.2) !important;
}
.api-skeleton{background:linear-gradient(90deg,var(--surface) 25%,var(--white) 37%,var(--surface) 63%);background-size:400% 100%;animation:skeletonShimmer 1.4s ease infinite;border-radius:4px;}
.api-skeleton-dark{background:linear-gradient(90deg,rgba(255,255,255,.06) 25%,rgba(255,255,255,.12) 37%,rgba(255,255,255,.06) 63%);background-size:400% 100%;animation:skeletonShimmer 1.4s ease infinite;border-radius:4px;}
@keyframes skeletonShimmer{
  0%{background-position:100% 50%;}
  100%{background-position:0 50%;}
}
