/* ============================================================
   Gestión de patrimonio y co-inversión
   Paleta material del asunto: caliza, cal, latón mate.
   Tipografía: Fraunces (serif con cuerpo) contra Archivo (grotesca).
   Motivo estructural: el medianil — la página se parte en dos.
   Dos superficies: negro cálido y crema, alternadas por sección.
   ============================================================ */

:root{
  /* neutros cálidos, sesgados hacia el latón: elegidos, no heredados */
  --ground:   #0c0b09;
  --ground-2: #131210;
  --ink:      #ece7dd;   /* hueso, no blanco puro */
  --ink-2:    #8c867a;
  --ink-3:    #565048;
  --hair:     rgba(236,231,221,.13);
  --hair-2:   rgba(236,231,221,.07);
  --brass:    #b89b6a;

  --display: "Fraunces", "Georgia", "Times New Roman", serif;
  --text:    "Archivo", "Helvetica Neue", Arial, sans-serif;

  /* escala tipográfica */
  --t-label: 10.5px;
  --t-small: 13px;
  --t-body:  16px;
  --t-lead:  clamp(17px, 1.35vw, 20px);
  --t-h3:    clamp(22px, 2.5vw, 34px);
  --t-h2:    clamp(31px, 5vw, 70px);
  --t-h1:    clamp(42px, 8.2vw, 132px);

  --gut: clamp(20px, 5.5vw, 104px);
  --ease: cubic-bezier(.16, 1, .3, 1);
}

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

html{ scroll-behavior:smooth; -webkit-text-size-adjust:100%; }

body{
  margin:0;
  background:var(--ground);
  color:var(--ink);
  font-family:var(--text);
  font-size:var(--t-body);
  font-weight:300;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}

::selection{ background:var(--brass); color:var(--ground); }

a{ color:inherit; text-decoration:none; }

/* Fraunces con las astas cargadas y los ejes de capricho a cero:
   peso sin simpatía. */
h1,h2,h3,.ledger li,.step__n{
  font-variation-settings:"SOFT" 0,"WONK" 0;
}
h1,h2,h3{ margin:0; font-weight:500; text-wrap:balance; }
p,dl,dd{ margin:0; }
ul,ol{ margin:0; padding:0; list-style:none; }

:focus-visible{
  outline:1px solid var(--brass);
  outline-offset:4px;
  border-radius:1px;
}

/* textura de impresión, muy contenida */
.grain{
  position:fixed; inset:-50%; z-index:100;
  pointer-events:none; opacity:.03;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  animation:grain 8s steps(6) infinite;
}
@keyframes grain{
  0%,100%{transform:translate(0,0)}  16%{transform:translate(-4%,-3%)}
  33%{transform:translate(3%,-5%)}   50%{transform:translate(-2%,4%)}
  66%{transform:translate(4%,2%)}    83%{transform:translate(-3%,3%)}
}

/* ---------------- layout ---------------- */
.wrap{ max-width:1300px; margin-inline:auto; padding-inline:var(--gut); }
.section{
  padding-block:clamp(84px,13vh,176px);
  border-top:1px solid var(--hair);
  background:var(--ground);
  color:var(--ink);
}
.section--contact{ padding-bottom:clamp(72px,10vh,132px); }

/* Superficie crema: la misma retícula sobre cal en vez de sobre negro.
   Solo se redefinen los tokens; ningún componente sabe en qué fondo vive. */
.section--cream{
  --ground:   #e8e1d3;
  --ground-2: #ded5c3;
  --ink:      #16130f;
  --ink-2:    #4f483d;
  --ink-3:    #736b5d;
  --hair:     rgba(22,19,15,.17);
  --hair-2:   rgba(22,19,15,.09);
  --brass:    #7d5f2b;   /* el latón se oscurece para aguantar sobre cal */
  border-top:none;
}
/* El cambio de superficie ya separa; el filete sobraría. */
.section--cream + .section{ border-top-color:transparent; }

.label{
  font-size:var(--t-label); font-weight:500;
  letter-spacing:.26em; text-transform:uppercase;
  color:var(--ink-2);
  margin-bottom:clamp(22px,4vh,44px);
}

.h2{
  font-family:var(--display);
  font-size:var(--t-h2);
  font-weight:500;
  line-height:1.05;
  letter-spacing:-.015em;
  margin-bottom:clamp(44px,7vh,92px);
}
.h2 em{ font-style:italic; color:var(--brass); }

/* ---------------- nav ---------------- */
.nav{
  position:fixed; inset:0 0 auto 0; z-index:50;
  display:flex; align-items:center; justify-content:space-between;
  gap:16px;
  padding:20px var(--gut);
  padding-top:calc(20px + env(safe-area-inset-top, 0px));
  border-bottom:1px solid transparent;
  transition:transform .55s var(--ease), background .45s var(--ease),
             padding .45s var(--ease), border-color .45s var(--ease);
}
.nav.is-stuck{
  background:rgba(12,11,9,.76);
  backdrop-filter:blur(15px);
  -webkit-backdrop-filter:blur(15px);
  border-bottom-color:var(--hair);
  padding-block:13px;
  padding-top:calc(13px + env(safe-area-inset-top, 0px));
}
.nav.is-hidden{ transform:translateY(-101%); }

/* La marca vive arriba a la izquierda. La barra de navegación siempre
   está sobre fondo oscuro —el claim o el velo translúcido al fijarse—,
   así que aquí solo cabe la versión en blanco. */
.nav__brand{ display:block; line-height:0; }
.nav__logo{
  display:block; width:auto;
  height:clamp(21px,2.3vw,28px);
  opacity:.92; transition:opacity .3s;
}
.nav__brand:hover .nav__logo{ opacity:1; }


.nav__links{ display:flex; align-items:center; gap:clamp(16px,2.6vw,36px); }
.nav__links a{ font-size:var(--t-small); color:var(--ink-2); transition:color .3s; }
.nav__links a:hover{ color:var(--ink); }

.nav__cta{
  position:relative; isolation:isolate; overflow:hidden;
  color:var(--ink); border:1px solid var(--hair);
  border-radius:999px; padding:8px 19px;
  transition:color .3s .04s;
}
.nav__cta::before{
  content:""; position:absolute; inset:0; z-index:-1; background:var(--ink);
  transform:translateY(101%); transition:transform .45s var(--ease);
}
.nav__cta:hover{ color:var(--ground); }
.nav__cta:hover::before{ transform:translateY(0); }

@media (max-width:760px){ .nav__links a:not(.nav__cta){ display:none; } }

/* ---------------- hero ---------------- */
.hero{
  /* el claim llena la pantalla, pero deja ver que la página sigue */
  min-height:92svh;
  display:flex; flex-direction:column; justify-content:center;
  padding:clamp(120px,18vh,180px) var(--gut) clamp(76px,11vh,104px);
  position:relative; overflow:hidden;
}
.hero::after{
  content:""; position:absolute; left:50%; top:46%;
  width:min(122vw,1080px); aspect-ratio:1;
  transform:translate(-50%,-50%);
  background:radial-gradient(circle, rgba(184,155,106,.10), transparent 62%);
  pointer-events:none;
  animation:breathe 12s ease-in-out infinite;
}
@keyframes breathe{
  0%,100%{ opacity:.5; transform:translate(-50%,-50%) scale(1); }
  50%    { opacity:1;  transform:translate(-50%,-50%) scale(1.13); }
}
.hero__inner{
  position:relative; z-index:1;
  width:100%; max-width:1300px; margin-inline:auto;
  display:flex; flex-direction:column;
}
.hero__label{ margin-bottom:clamp(20px,3.5vh,34px); }

.hero__claim{
  font-family:var(--display);
  font-size:var(--t-h1);
  font-weight:600;
  line-height:1;
  letter-spacing:-.025em;
  margin-bottom:clamp(30px,4.5vh,50px);
}
.hero__claim em{ font-style:italic; color:var(--brass); }

/* secuencia de carga: se resuelve sola, sin depender del scroll */
/* La máscara del claim debe dejar respirar las colas de g, j, y:
   con .04em el descendente de "gestiona" se cortaba. El margen negativo
   devuelve el espacio que suma el padding, para no mover la retícula. */
.line{ display:block; overflow:hidden; padding-bottom:.2em; }
.line:not(:last-child){ margin-bottom:-.2em; }
.line > span{
  display:block;
  transform:translateY(104%);
  animation:lineUp 1.1s var(--ease) forwards;
}
.line:nth-child(1) > span{ animation-delay:.10s; }
.line:nth-child(2) > span{ animation-delay:.22s; }
@keyframes lineUp{ to{ transform:translateY(0); } }

.hero__desc{ font-size:var(--t-lead); color:var(--ink-2); max-width:38ch; }
.hero__actions{ display:flex; flex-wrap:wrap; gap:12px; margin-top:clamp(28px,4.5vh,44px); }

.btn{
  position:relative; isolation:isolate; overflow:hidden;
  display:inline-block; padding:14px 28px; border-radius:999px;
  background:var(--ink); color:var(--ground);
  font-size:var(--t-small); letter-spacing:.03em;
  border:1px solid transparent;
  transition:color .35s var(--ease);
}
.btn::before{
  content:""; position:absolute; inset:0; z-index:-1; background:var(--brass);
  transform:translateY(100%); transition:transform .5s var(--ease);
}
.btn:hover::before{ transform:translateY(0); }
.btn--ghost{ background:transparent; color:var(--ink); border-color:var(--hair); }
.btn--ghost:hover{ color:var(--ground); }

.hero__cue{
  position:absolute; left:var(--gut); bottom:clamp(24px,4vh,38px);
  display:flex; align-items:center; gap:12px;
  font-size:var(--t-label); font-weight:500;
  letter-spacing:.26em; text-transform:uppercase; color:var(--ink-3);
}
.hero__cueline{ display:block; width:52px; height:1px; background:var(--ink-3); position:relative; overflow:hidden; }
.hero__cueline::after{
  content:""; position:absolute; inset:0; background:var(--brass);
  animation:sweep 2.6s var(--ease) infinite;
}
@keyframes sweep{ 0%{transform:translateX(-100%)} 60%,100%{transform:translateX(100%)} }

/* ---------------- el medianil: motivo estructural ---------------- */
.split{ display:grid; grid-template-columns:1fr 1px 1fr; gap:clamp(26px,5vw,76px); align-items:start; }
.split__spine{ background:var(--hair); align-self:stretch; min-height:200px; }


@media (max-width:820px){
  .split{ grid-template-columns:1fr; gap:44px; }
  .split__spine{ display:none; }
}

/* ---------------- posicionamiento: dos bloques, uno bajo otro -------
   Primero lo que no somos, entero; después lo que sí. Sin comparar
   punto por punto: son dos declaraciones seguidas, no una tabla. */
.stance + .stance{
  margin-top:clamp(52px,8vh,104px);
  padding-top:clamp(44px,6.5vh,84px);
  border-top:1px solid var(--hair);
}
.stance__label{
  font-size:var(--t-label); font-weight:500;
  letter-spacing:.26em; text-transform:uppercase;
  color:var(--ink-3); margin-bottom:clamp(20px,3vh,32px);
}
.stance__label--on{ color:var(--brass); }

/* ---------------- listas de registro ---------------- */
.ledger li{
  font-family:var(--display);
  font-size:var(--t-h3);
  line-height:1.3;
  padding-block:15px;
  border-bottom:1px solid var(--hair-2);
}
.ledger li em{ font-style:italic; color:var(--brass); }

.ledger--struck li{ color:var(--ink-3); }
.ledger--struck li span{ position:relative; }
.ledger--struck li span::after{
  content:""; position:absolute; left:0; top:53%; width:100%; height:1px;
  background:currentColor; transform:scaleX(0); transform-origin:left;
  transition:transform .75s var(--ease) .2s;
}
.ledger--struck li.is-in span::after{ transform:scaleX(1); }


/* Cada afirmación, su propio bloque: el filete corrido no separaba
   lo suficiente y los puntos se leían como una lista de la compra. */
.ledger--cards{
  display:grid;
  grid-template-columns:repeat(2,1fr);
  gap:clamp(9px,1.1vw,14px);
}
@media (max-width:720px){ .ledger--cards{ grid-template-columns:1fr; } }
.ledger--cards li{
  position:relative;
  display:flex; align-items:center;
  min-height:clamp(92px,9.5vw,138px);
  border:1px solid var(--hair-2);
  padding:clamp(17px,1.9vw,25px) clamp(18px,2vw,28px);
  font-size:clamp(21px,2.4vw,34px);
  transition:border-color .5s var(--ease), background .5s var(--ease);
}

/* Lo que no somos: hundido, sin superficie, y tachado al entrar. */
.ledger--struck.ledger--cards li{ background:transparent; }

/* Lo que sí: superficie propia y el latón marcando el canto. */
.ledger--on li{ background:var(--ground-2); }
.ledger--on li::before{
  content:""; position:absolute; left:-1px; top:-1px; bottom:-1px;
  width:2px; background:var(--brass);
  transform:scaleY(0); transform-origin:top;
  transition:transform .7s var(--ease) .15s;
}
.ledger--on li.is-in::before,
html:not(.js) .ledger--on li::before{ transform:scaleY(1); }
.ledger--on li:hover{ border-color:rgba(184,155,106,.42); }

.ledger--prose{ max-width:72ch; }
.ledger--prose li{
  font-family:var(--text); font-size:var(--t-lead);
  line-height:1.55; color:var(--ink-2);
  padding-block:clamp(18px,2.4vh,26px);
  border-bottom:1px solid var(--hair-2);
}
.ledger--prose li:first-child{ border-top:1px solid var(--hair-2); }

/* La cifra del 50 % nunca se parte de línea. */
.fifty{ color:var(--brass); white-space:nowrap; }

/* ---------------- las tres palancas de rentabilidad ----------------
   Tres columnas sin caja: el número y un filete superior bastan. */
.levers{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(262px,1fr));
  gap:clamp(30px,3.6vw,60px);
}
.lever{
  border-top:1px solid var(--hair);
  padding-top:clamp(20px,2.4vh,28px);
  display:flex; flex-direction:column;
}
.lever__n{
  font-family:var(--display); font-size:var(--t-label);
  letter-spacing:.24em; color:var(--brass);
}
.lever__title{
  font-family:var(--display);
  font-size:clamp(23px,2.5vw,35px);
  line-height:1.1; letter-spacing:-.015em;
  margin:12px 0 16px;
}
.lever__body{ color:var(--ink-2); max-width:44ch; }
.lever__note{
  margin-top:auto; padding-top:clamp(20px,2.6vh,30px);
  font-family:var(--display); font-style:italic;
  font-size:18px; color:var(--brass);
}

/* ---------------- modalidades de entrada ---------------------------
   Tres filas a ancho completo: se leen en orden, de menos a más
   implicación nuestra. */
.modes{ display:grid; }
.mode{
  display:grid;
  grid-template-columns:clamp(52px,6.5vw,104px) 1fr;
  gap:clamp(16px,2.4vw,40px);
  align-items:start;
  padding-block:clamp(30px,4.4vh,54px);
  border-top:1px solid var(--hair);
}
.mode:last-child{ border-bottom:1px solid var(--hair); }
.mode__n{
  font-family:var(--display);
  font-size:clamp(17px,1.9vw,26px);
  line-height:1.2; color:var(--ink-3);
}

.mode__title{
  font-family:var(--display);
  font-size:clamp(24px,3vw,42px);
  line-height:1.06; letter-spacing:-.018em;
  margin-bottom:14px;
}
.mode__lead{ color:var(--ink-2); max-width:58ch; font-size:var(--t-lead); }

.mode__meta{
  display:grid; grid-template-columns:repeat(auto-fit,minmax(248px,1fr));
  gap:clamp(16px,2.4vw,44px);
  margin-top:clamp(20px,2.8vh,30px);
}
.mode__meta dt{
  font-size:var(--t-label); font-weight:500;
  letter-spacing:.22em; text-transform:uppercase;
  color:var(--ink-3); margin-bottom:5px;
}
.mode__meta dd{ font-size:15px; max-width:40ch; }

@media (max-width:560px){
  .mode{ grid-template-columns:1fr; gap:10px; }
}

/* ---------------- proceso: la única secuencia de la página ---------- */
.steps{ position:relative; }
.steps__track{
  position:absolute; top:0; bottom:0;
  left:clamp(18px,2.2vw,30px); width:1px;
  background:var(--hair);
}
.steps__fill{
  display:block; width:100%; height:var(--p,0%);
  background:var(--brass);
  transition:height .18s linear;
}
.step{
  display:flex; gap:clamp(22px,3.6vw,58px);
  padding-block:clamp(22px,3.4vh,40px);
  opacity:.4;
  transition:opacity .7s var(--ease);
}
.step.is-in{ opacity:1; }
.step__n{
  flex:0 0 auto;
  width:clamp(37px,4.4vw,61px); aspect-ratio:1;
  border:1px solid var(--hair); border-radius:50%;
  display:grid; place-items:center;
  font-family:var(--display); font-size:clamp(15px,1.6vw,21px);
  background:var(--ground);
  transition:border-color .6s var(--ease), color .6s var(--ease);
}
.step.is-in .step__n{ border-color:var(--brass); color:var(--brass); }
.step h3{
  font-family:var(--display); font-size:var(--t-h3);
  line-height:1.12; margin-bottom:6px;
}
.step p{ color:var(--ink-2); max-width:52ch; }

/* ---------------- por qué ---------------- */
.whys{ display:grid; grid-template-columns:repeat(auto-fit,minmax(232px,1fr)); gap:clamp(26px,3.6vw,52px); }
.why{ border-top:1px solid var(--hair); padding-top:22px; }
.why h3{ font-family:var(--display); font-size:clamp(21px,2.2vw,30px); line-height:1.16; margin-bottom:10px; }
.why p{ color:var(--ink-2); font-size:15px; }

/* ---------------- contacto ---------------- */
.split--people .split__spine{ min-height:150px; }
.person h3{ font-family:var(--display); font-size:clamp(33px,4.2vw,58px); line-height:1; }
.person__role{
  font-size:var(--t-label); font-weight:500;
  letter-spacing:.2em; text-transform:uppercase; color:var(--ink-3);
  margin:13px 0 24px;
}
.person__link{
  display:block; padding-block:11px;
  border-bottom:1px solid var(--hair);
  /* los correos reales son largos: que partan antes que desbordar */
  font-size:clamp(15px,1.5vw,17px);
  overflow-wrap:anywhere;
}
.person__link span{
  display:inline-block;
  transition:transform .45s var(--ease), color .35s;
}
.person__link:hover span{ transform:translateX(12px); color:var(--brass); }

/* Correo único de empresa, bajo los dos socios. */
.mailbox{
  margin-top:clamp(44px,6vw,78px);
  border-top:1px solid var(--hair);
  padding-top:26px; text-align:center;
}
.mailbox__label{
  font-size:var(--t-label); font-weight:500;
  letter-spacing:.2em; text-transform:uppercase; color:var(--ink-3);
  margin-bottom:14px;
}
.mailbox__link{
  display:inline-block;
  font-family:var(--display);
  font-size:clamp(25px,3.4vw,46px); line-height:1.1;
  overflow-wrap:anywhere;
}
.mailbox__link span{
  display:inline-block;
  transition:color .35s, transform .45s var(--ease);
}
.mailbox__link:hover span{ color:var(--brass); transform:translateY(-3px); }

/* ---------------- footer ---------------- */
.footer{ border-top:1px solid var(--hair); padding-block:clamp(44px,6.5vh,76px) 30px; }
.footer__grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(272px,1fr)); gap:clamp(26px,4.5vw,76px); }
/* El pie vive sobre negro: versión en blanco. */
.footer__logo{ display:block; width:auto; height:clamp(34px,4vw,46px); margin-bottom:18px; }
.footer__mark{ font-size:14px; color:var(--ink-2); max-width:34ch; margin-bottom:4px; }
.footer__desc{ font-size:14px; color:var(--ink-2); max-width:34ch; }
.footer__legal{ font-size:11.5px; line-height:1.75; color:var(--ink-3); max-width:60ch; }
.footer__year{
  text-align:center; margin-top:clamp(36px,5.5vh,64px);
  font-size:var(--t-label); letter-spacing:.2em; color:var(--ink-3);
}

/* ---------------- revelado ----------------
   Sin JS, todo es visible. El velo solo existe cuando el observador
   puede retirarlo, y main.js lo retira igualmente pasados 1,2 s.     */
.js .reveal{ opacity:0; transform:translateY(20px); }
.js .reveal.is-in{
  opacity:1; transform:none;
  transition:opacity .85s var(--ease), transform .85s var(--ease);
  transition-delay:var(--d,0ms);
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{ animation:none !important; transition:none !important; }
  .js .reveal,.step{ opacity:1 !important; transform:none !important; }
  .line > span{ transform:none; }
  .ledger--struck li span::after{ transform:scaleX(1); }
  html{ scroll-behavior:auto; }
}

/* ---------------- sobre nosotros ----------------
   Misma retícula partida que el resto: el marco de la foto ocupa
   la columna corta y el relato la larga. En móvil, la foto va primero. */
.about{
  display:grid;
  grid-template-columns:minmax(240px,38%) 1fr;
  gap:clamp(30px,5vw,84px);
  align-items:start;
}

.about__frame{ margin:0; position:sticky; top:clamp(88px,12vh,124px); }

.about__img{
  display:block; width:100%; aspect-ratio:4/5;
  object-fit:cover;
  object-position:50% 32%;   /* la foto es 2:3; el encuadre 4:5 recorta por abajo */
  border:1px solid var(--hair);
}
.about__caption{
  margin-top:14px;
  font-size:var(--t-label); font-weight:500;
  letter-spacing:.2em; text-transform:uppercase; color:var(--ink-3);
}

.about__text > p:not(.about__claim):not(.about__sign){
  font-size:var(--t-lead); color:var(--ink-2);
  max-width:60ch; margin-bottom:clamp(18px,2.4vh,26px);
}

.about__roles{
  display:grid; gap:20px;
  margin:clamp(30px,4.5vh,46px) 0;
  padding-block:clamp(26px,3.6vh,38px);
  border-top:1px solid var(--hair-2);
  border-bottom:1px solid var(--hair-2);
}
.about__roles dt{
  font-family:var(--display); font-size:var(--t-h3);
  line-height:1.2; margin-bottom:6px;
}
.about__roles dd{ color:var(--ink-2); max-width:56ch; }

.about__claim{
  font-family:var(--display);
  font-size:clamp(24px,2.9vw,40px);
  line-height:1.12; letter-spacing:-.015em;
  color:var(--ink);
}
.about__claim em{ font-style:italic; color:var(--brass); }
/* Cierre de la sección sobre crema: aquí manda la versión en negro. */
.about__sign{ margin-top:clamp(26px,3.6vh,40px); }
.about__logo{ display:block; width:auto; height:clamp(30px,3.4vw,42px); }
.about__sign p{
  margin-top:12px;
  font-size:var(--t-label); font-weight:500;
  letter-spacing:.26em; text-transform:uppercase; color:var(--ink-3);
}

@media (max-width:820px){
  .about{ grid-template-columns:1fr; gap:38px; }
  .about__frame{ position:static; max-width:380px; }
}
