@font-face{font-family:"Schibsted Grotesk";src:url(../fonts/schibsted-grotesk-latin-wght-normal.woff2) format("woff2");font-weight:400 900;font-display:swap}
@font-face{font-family:"Onest";src:url(../fonts/onest-latin-wght-normal.woff2) format("woff2");font-weight:100 900;font-display:swap}
@font-face{font-family:"JetBrains Mono";src:url(../fonts/jetbrains-mono-latin-wght-normal.woff2) format("woff2");font-weight:100 800;font-display:swap}

:root{
  --ink:#06181B; --ink-2:#0B2428; --ink-3:#10303A; --line-d:#17383D;
  --teal:#3DD9C0; --teal-deep:#0B6B5E; --amber:#FFB454;
  --paper:#F2F7F5; --paper-2:#E5EEEB; --text-d:#E8F4F1; --muted-d:#93B3B3;
  --text-l:#0A1F22; --muted-l:#46605F; --line-l:#C9DAD6;
  --display:"Schibsted Grotesk",system-ui,sans-serif; --body:"Onest",system-ui,sans-serif; --mono:"JetBrains Mono",ui-monospace,monospace;
  --wrap:1160px;
}
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:84px;-webkit-text-size-adjust:100%}
body{margin:0;font:400 1.0625rem/1.65 var(--body);color:var(--text-l);background:var(--paper);-webkit-font-smoothing:antialiased}
img,svg{max-width:100%;display:block}
a{color:inherit}
h1,h2,h3,h4{font-family:var(--display);line-height:1.1;margin:0;letter-spacing:-.015em}
p{margin:0 0 1em}
ul,ol{margin:0;padding:0;list-style:none}
:focus-visible{outline:3px solid var(--amber);outline-offset:3px;border-radius:4px}
.skip{position:absolute;left:-999px;top:8px;background:var(--amber);color:#000;padding:10px 16px;border-radius:6px;z-index:100}
.skip:focus{left:8px}
.wrap{max-width:var(--wrap);margin:0 auto;padding-inline:clamp(20px,5vw,48px)}

/* secciones */
.section{padding:clamp(64px,9vw,116px) 0}
.dark{background:var(--ink);color:var(--text-d)}
.paper{background:var(--paper)}
.paper2{background:var(--paper-2)}
.sec-head{max-width:720px;margin-bottom:clamp(32px,5vw,56px)}
.sec-head h2{font-size:clamp(1.9rem,3.8vw,2.9rem);font-weight:800}
.sec-head p{margin-top:18px;font-size:1.125rem;color:var(--muted-l)}
.dark .sec-head p{color:var(--muted-d)}

/* botones */
.btn{display:inline-flex;align-items:center;gap:10px;padding:13px 22px;border-radius:10px;font:600 1rem var(--body);text-decoration:none;border:1.5px solid transparent;transition:background .15s,border-color .15s,transform .15s}
.btn-primary{background:var(--teal);color:#042B26}
.btn-primary:hover{background:#6BE8D5}
.btn-ghost{border-color:#2A5A60;color:var(--text-d)}
.btn-ghost:hover{border-color:var(--teal)}
.btn-dark{background:var(--text-l);color:var(--paper)}
.btn-dark:hover{background:#12373B}

/* header */
.site-header{position:sticky;top:0;z-index:50;background:rgba(6,24,27,.88);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--line-d)}
.site-header .wrap{display:flex;align-items:center;justify-content:space-between;height:68px;gap:20px}
.brand img{height:38px;width:auto}
.nav{display:flex;align-items:center;gap:28px}
.nav a{color:var(--muted-d);text-decoration:none;font-weight:500;font-size:.98rem}
.nav a:hover{color:var(--text-d)}
.nav .gh{display:inline-flex;align-items:center;gap:8px;color:var(--text-d);border:1px solid #2A5A60;padding:8px 14px;border-radius:9px}
.nav .gh:hover{border-color:var(--teal)}
.menu-btn{display:none;background:none;border:1px solid #2A5A60;color:var(--text-d);border-radius:9px;padding:8px 12px;font:600 .95rem var(--body);cursor:pointer}

/* hero */
.hero{position:relative;overflow:hidden;padding:clamp(56px,8vw,104px) 0 clamp(64px,9vw,112px)}
.hero::before{content:"";position:absolute;inset:-60px;background:url("../img/hex-pattern.svg") right -80px top -40px/720px auto no-repeat;opacity:.55;-webkit-mask-image:radial-gradient(60% 70% at 85% 25%,#000,transparent 75%);mask-image:radial-gradient(60% 70% at 85% 25%,#000,transparent 75%);pointer-events:none}
.hero .wrap{position:relative;display:grid;grid-template-columns:1.08fr .92fr;gap:clamp(32px,5vw,64px);align-items:center}
.hero h1{font-size:clamp(2.5rem,5.6vw,4.5rem);font-weight:800;letter-spacing:-.025em;line-height:1.02}
.hero .lead{margin-top:24px;font-size:1.2rem;color:var(--muted-d);max-width:540px}
.hero .cta{display:flex;flex-wrap:wrap;gap:14px;margin-top:34px}
.hero .meta{margin-top:30px;font-size:.92rem;color:var(--muted-d)}

/* sesión de ejemplo */
.session{background:var(--ink-2);border:1px solid var(--line-d);border-radius:14px;overflow:hidden;font-family:var(--mono);font-size:.88rem}
.session-bar{display:flex;justify-content:space-between;align-items:center;padding:12px 18px;border-bottom:1px solid var(--line-d);color:var(--muted-d);font-size:.8rem}
.session-bar b{color:var(--teal);font-weight:600}
.session-body{padding:22px 18px 22px}
.prompt{color:var(--text-d);line-height:1.6;min-height:5.2em}
.prompt .caret{animation:blink 1.1s steps(1) infinite;display:inline-block;width:.55em;height:1.05em;background:var(--amber);vertical-align:-.15em;margin-left:2px}
.steps{margin-top:18px;display:grid;gap:10px}
.steps li{display:flex;gap:12px;align-items:center;color:var(--muted-d);transition:color .3s}
.steps li::before{content:"";width:16px;height:16px;border-radius:50%;border:1.5px solid #2A5A60;flex:none;transition:all .3s}
.steps li.done{color:var(--text-d)}
.steps li.done::before{background:var(--teal) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4.5 8.2l2.4 2.4 4.6-5' fill='none' stroke='%23042B26' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/16px no-repeat;border-color:var(--teal)}
.session-foot{padding:12px 18px;border-top:1px solid var(--line-d);color:var(--muted-d);font-size:.78rem}

/* qué es / proceso */
.split{display:grid;grid-template-columns:1fr 1fr;gap:clamp(32px,6vw,80px);align-items:start}
.split .sec-head{margin-bottom:24px}
.prose p{color:var(--muted-l)}
.timeline{position:relative;display:grid;gap:30px}
.timeline::before{content:"";position:absolute;left:19px;top:8px;bottom:8px;width:2px;background:var(--line-l)}
.timeline li{position:relative;padding-left:60px}
.timeline .n{position:absolute;left:0;top:0;width:40px;height:40px;border-radius:50%;background:var(--ink);color:var(--teal);display:grid;place-items:center;font:700 1rem var(--display)}
.timeline h3{font-size:1.25rem;font-weight:700;margin-bottom:4px}
.timeline p{color:var(--muted-l);margin:0}

/* ventajas */
.adv{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(28px,4vw,48px) clamp(24px,4vw,48px)}
.adv h3{font-size:1.3rem;font-weight:700;padding-top:16px;border-top:2px solid var(--teal);margin-bottom:10px}
.adv p{color:var(--muted-d);margin:0}
.care{margin-top:clamp(48px,7vw,80px);padding:clamp(24px,4vw,40px);border-left:4px solid var(--amber);background:var(--ink-2);border-radius:0 12px 12px 0;display:grid;grid-template-columns:.8fr 1.2fr;gap:clamp(24px,4vw,56px)}
.care h3{font-size:1.5rem;font-weight:700}
.care ul{display:grid;gap:12px;color:var(--muted-d)}
.care li{padding-left:22px;position:relative}
.care li::before{content:"";position:absolute;left:0;top:.7em;width:10px;height:2px;background:var(--amber)}
.care strong{color:var(--text-d);font-weight:600}

/* apps */
.deflist{display:grid;grid-template-columns:1fr 1fr;gap:0 clamp(24px,4vw,56px)}
.deflist div{padding:20px 0;border-top:1px solid var(--line-l)}
.deflist dt{font:700 1.15rem var(--display);margin-bottom:4px}
.deflist dd{margin:0;color:var(--muted-l)}
.phases{margin-top:clamp(40px,6vw,72px);display:grid;grid-template-columns:repeat(4,1fr);gap:24px;position:relative}
.phases::before{content:"";position:absolute;left:0;right:0;top:7px;height:2px;background:var(--line-l)}
.phases li{position:relative;padding-top:32px}
.phases li::before{content:"";position:absolute;left:0;top:0;width:16px;height:16px;border-radius:50%;background:var(--paper);border:3px solid var(--teal-deep)}
.phases h3{font-size:1.15rem;font-weight:700;margin-bottom:6px}
.phases p{font-size:.98rem;color:var(--muted-l);margin:0}

/* tablas */
.tbl-wrap{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-size:.98rem}
th{text-align:left;font:600 .88rem var(--body);color:var(--muted-l);padding:0 16px 12px 0;border-bottom:2px solid var(--text-l)}
td{padding:16px 16px 16px 0;border-bottom:1px solid var(--line-l);vertical-align:top}
td:first-child{font:700 1.05rem var(--display);white-space:nowrap}
td small{display:block;color:var(--muted-l);font-size:.85rem;font-weight:400;font-family:var(--body)}
.num{font-variant-numeric:tabular-nums;white-space:nowrap}
.note{margin-top:20px;font-size:.92rem;color:var(--muted-l)}
.paper2 th,.paper2 td{border-color:#C2D4CF}
.picks{margin-top:clamp(40px,6vw,64px)}
.picks h3{font-size:1.4rem;font-weight:700;margin-bottom:18px}
.picks table td:first-child{white-space:normal}

/* ranking */
.tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:28px}
.tabs button{background:none;border:1px solid #2A5A60;color:var(--muted-d);padding:10px 18px;border-radius:999px;font:600 .95rem var(--body);cursor:pointer}
.tabs button[aria-selected=true]{background:var(--teal);border-color:var(--teal);color:#042B26}
.panel h3{font-size:1.3rem;font-weight:700;margin-bottom:6px}
.panel .sub{color:var(--muted-d);font-size:.95rem;margin-bottom:22px;max-width:70ch}
.panel h4{font:700 1.05rem var(--display);margin:34px 0 14px;color:var(--text-d)}
.rows{display:grid;gap:10px}
.row{display:grid;grid-template-columns:28px minmax(180px,1.1fr) 2fr 64px 150px;gap:14px;align-items:center}
.row .rk{font:700 .95rem var(--display);color:var(--muted-d)}
.row .nm{font-weight:600;line-height:1.25}
.row .nm small{display:block;color:var(--muted-d);font-weight:400;font-size:.82rem}
.row .bar{height:12px;background:var(--ink-3);border-radius:6px;overflow:hidden}
.row .bar::after{content:"";display:block;height:100%;width:var(--w);background:var(--teal);border-radius:6px}
.row.top .bar::after{background:var(--amber)}
.row.top .rk{color:var(--amber)}
.row .sc{font:700 1rem var(--display);text-align:right;font-variant-numeric:tabular-nums}
.row .ct{white-space:nowrap;font-size:.88rem;color:var(--muted-d);text-align:right;font-variant-numeric:tabular-nums}
.rows.nocost .row{grid-template-columns:28px minmax(180px,1.1fr) 2fr 64px}
.caveat{margin-top:36px;padding:20px 24px;border:1px solid var(--line-d);border-radius:12px;color:var(--muted-d);font-size:.95rem}
.caveat strong{color:var(--text-d)}
.sources{margin-top:22px;display:flex;flex-wrap:wrap;gap:8px 22px;font-size:.9rem}
.sources a{color:var(--teal);text-underline-offset:3px}

/* ecosistema */
.concepts{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(24px,4vw,48px);margin-bottom:clamp(40px,6vw,72px)}
.concepts h3{font-size:1.2rem;font-weight:700;margin-bottom:8px}
.concepts p{color:var(--muted-l);margin:0}
.eco{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(36px,5vw,64px) clamp(32px,6vw,80px);align-items:start}
.eco h3{font-size:1.3rem;font-weight:700;padding-bottom:12px;border-bottom:2px solid var(--text-l);margin-bottom:6px}
.eco li{padding:12px 0;border-bottom:1px solid var(--line-l);line-height:1.45}
.eco li b{font:700 1rem var(--display);display:block}
.eco li span{color:var(--muted-l);font-size:.95rem}
.eco a{text-decoration-color:var(--teal-deep);text-underline-offset:3px}
.warn{margin-top:clamp(36px,5vw,56px);padding:20px 24px;border-left:4px solid var(--amber);background:var(--paper-2);border-radius:0 10px 10px 0}
.warn p{margin:0;color:var(--text-l)}

/* github */
.gh-card{display:grid;grid-template-columns:auto 1fr auto;gap:clamp(20px,4vw,40px);align-items:center;padding:clamp(24px,4vw,40px);border:1px solid var(--line-d);border-radius:16px;background:var(--ink-2)}
.gh-card img{width:72px;height:72px}
.gh-card h2{font-size:clamp(1.5rem,3vw,2.1rem);font-weight:800}
.gh-card p{margin:8px 0 0;color:var(--muted-d)}

/* faq */
.faq{max-width:820px}
.faq details{border-top:1px solid var(--line-l);padding:20px 0}
.faq details:last-child{border-bottom:1px solid var(--line-l)}
.faq summary{cursor:pointer;font:700 1.15rem var(--display);list-style:none;display:flex;justify-content:space-between;gap:20px}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";font-size:1.5rem;line-height:1;color:var(--teal-deep)}
.faq details[open] summary::after{content:"–"}
.faq details p{margin:14px 0 0;color:var(--muted-l);max-width:68ch}

/* footer */
.site-footer{background:var(--ink);color:var(--muted-d);padding:56px 0 36px;font-size:.95rem}
.foot{display:grid;grid-template-columns:1.4fr 1fr 1fr;gap:40px}
.foot img{height:40px;width:auto;margin-bottom:14px}
.foot h2{font:700 .95rem var(--display);color:var(--text-d);margin-bottom:12px;letter-spacing:0}
.foot ul{display:grid;gap:8px}
.foot a{text-decoration:none}
.foot a:hover{color:var(--text-d);text-decoration:underline}
.legal{margin-top:40px;padding-top:20px;border-top:1px solid var(--line-d);display:flex;flex-wrap:wrap;justify-content:space-between;gap:10px;font-size:.88rem}

/* legal page */
.doc{padding:clamp(48px,7vw,88px) 0}
.doc .wrap{max-width:820px}
.doc h1{font-size:clamp(2rem,4.5vw,3rem);font-weight:800;margin-bottom:10px}
.doc .upd{color:var(--muted-l);margin-bottom:36px}
.doc h2{font-size:1.45rem;font-weight:700;margin:40px 0 12px}
.doc p,.doc li{color:#27403F}
.doc ul{margin:0 0 1em;display:grid;gap:8px}
.doc li{padding-left:20px;position:relative}
.doc li::before{content:"";position:absolute;left:0;top:.8em;width:8px;height:2px;background:var(--teal-deep)}
.doc a{color:var(--teal-deep);text-underline-offset:3px}

/* responsive */
@media (max-width:980px){
  .hero .wrap,.split,.care,.concepts,.eco,.gh-card{grid-template-columns:1fr}
  .adv{grid-template-columns:1fr 1fr}
  .phases{grid-template-columns:1fr 1fr;row-gap:32px}
  .phases::before{display:none}
  .gh-card{justify-items:start}
}
@media (max-width:760px){
  .menu-btn{display:inline-block}
  .nav{position:absolute;left:0;right:0;top:68px;background:var(--ink);border-bottom:1px solid var(--line-d);padding:16px clamp(20px,5vw,48px) 24px;flex-direction:column;align-items:flex-start;gap:16px;display:none}
  .nav.open{display:flex}
  .adv,.deflist,.phases{grid-template-columns:1fr}
  .foot{grid-template-columns:1fr}
  table,thead,tbody,tr,th,td{display:block}
  thead{position:absolute;left:-9999px}
  tr{padding:16px 0;border-bottom:1px solid var(--line-l)}
  td{border:0;padding:3px 0}
  td:first-child{white-space:normal}
  td[data-l]::before{content:attr(data-l) ": ";font-weight:600;color:var(--muted-l);font-size:.85rem}
  td:first-child::before{content:none}
  .row,.rows.nocost .row{grid-template-columns:24px 1fr 56px;grid-template-areas:"rk nm sc" ". bar bar" ". ct ct";row-gap:6px}
  .row .rk{grid-area:rk}.row .nm{grid-area:nm}.row .bar{grid-area:bar}.row .sc{grid-area:sc}.row .ct{grid-area:ct;text-align:left}
}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important;animation:none!important}}

/* ===== animaciones ===== */
@keyframes rise{from{opacity:0;transform:translateY(22px)}to{opacity:1;transform:none}}
@keyframes blink{50%{opacity:0}}
@keyframes drift{from{transform:translate3d(0,0,0)}to{transform:translate3d(-30px,20px,0)}}
@keyframes pop{0%{transform:scale(.5)}60%{transform:scale(1.25)}100%{transform:scale(1)}}
@keyframes sheen{from{background-position:-120% 0}to{background-position:220% 0}}

/* entrada del hero: una sola secuencia al cargar */
.anim .hero .stg{animation:rise .9s cubic-bezier(.2,.7,.2,1) both;animation-delay:var(--d,0s)}
.anim .hero .session{animation:rise 1s cubic-bezier(.2,.7,.2,1) .45s both}
.anim .hero::before{animation:drift 24s ease-in-out infinite alternate}
.steps li.done::before{animation:pop .45s cubic-bezier(.2,.9,.3,1.4)}

/* revelado al hacer scroll */
.anim .rv{opacity:0;transform:translateY(26px);transition:opacity .8s cubic-bezier(.2,.7,.2,1) var(--d,0s),transform .8s cubic-bezier(.2,.7,.2,1) var(--d,0s)}
.anim .rv.in{opacity:1;transform:none}

/* líneas que se dibujan */
.anim .timeline::before{transform:scaleY(0);transform-origin:top;transition:transform 1.5s cubic-bezier(.4,0,.2,1)}
.anim .timeline.in::before{transform:scaleY(1)}
.anim .phases::before{transform:scaleX(0);transform-origin:left;transition:transform 1.4s cubic-bezier(.4,0,.2,1)}
.anim .phases.in::before{transform:scaleX(1)}
.anim .phases li::before{transform:scale(0);transition:transform .5s cubic-bezier(.2,.9,.3,1.4) calc(var(--d,0s) + .2s)}
.anim .phases.in li::before{transform:scale(1)}

/* barras del ranking */
.anim .row .bar::after{transform:scaleX(0);transform-origin:left;transition:transform 1.1s cubic-bezier(.2,.7,.2,1) var(--d,0s)}
.anim .row.in .bar::after{transform:scaleX(1)}
.row .nm,.row .bar::after{transition-property:transform,color,filter}
.row:hover .nm{color:var(--teal)}
.row.top:hover .nm{color:var(--amber)}
.row:hover .bar::after{filter:brightness(1.18)}
.row.top .bar::after{background:linear-gradient(90deg,var(--amber) 0 55%,#FFD79A 70%,var(--amber) 85%) 0 0/220% 100%}
.anim .row.top.in .bar::after{animation:sheen 2.6s ease-in-out 1.2s 1}

/* paneles del ranking al cambiar de pestaña */
.panel:not([hidden]){animation:rise .5s cubic-bezier(.2,.7,.2,1) both}
.tabs button{transition:background .2s,border-color .2s,color .2s,transform .2s}
.tabs button:hover{border-color:var(--teal);color:var(--text-d)}
.tabs button[aria-selected=true]:hover{color:#042B26}
.tabs button:active{transform:scale(.96)}

/* interacciones */
.btn{transition:background .2s,border-color .2s,transform .2s,box-shadow .2s}
.btn:hover{transform:translateY(-2px)}
.btn:active{transform:translateY(0)}
.btn-primary:hover{box-shadow:0 10px 28px rgba(61,217,192,.28)}
.nav a:not(.gh){position:relative;transition:color .2s}
.nav a:not(.gh)::after{content:"";position:absolute;left:0;right:0;bottom:-6px;height:2px;background:var(--teal);transform:scaleX(0);transform-origin:left;transition:transform .3s cubic-bezier(.2,.7,.2,1)}
.nav a:not(.gh):hover::after,.nav a.active::after{transform:scaleX(1)}
.nav a.active{color:var(--text-d)}
.nav .gh{transition:border-color .2s,background .2s}
.nav .gh:hover{background:rgba(61,217,192,.08)}
.site-header{transition:box-shadow .3s,background .3s}
.site-header.scrolled{box-shadow:0 10px 30px rgba(0,0,0,.28);background:rgba(6,24,27,.96)}
.progress{position:fixed;left:0;top:0;height:3px;width:100%;background:var(--teal);transform:scaleX(0);transform-origin:left;z-index:60;pointer-events:none}
.adv h3{transition:border-color .3s}
.adv>div:hover h3{border-color:var(--amber)}
tbody tr{transition:background .2s}
tbody tr:hover{background:rgba(11,107,94,.07)}
.eco li{transition:border-color .2s}
.eco li:hover{border-bottom-color:var(--teal-deep)}
.eco li b a{text-decoration:none;color:inherit;background:linear-gradient(var(--teal-deep),var(--teal-deep)) 0 100%/0 2px no-repeat;border-bottom:1px solid var(--line-l);transition:background-size .3s cubic-bezier(.2,.7,.2,1),color .2s,border-color .2s;padding-bottom:2px}
.eco li b a:hover{background-size:100% 2px;color:var(--teal-deep);border-bottom-color:transparent}
.deflist div{transition:border-color .3s}
.deflist div:hover{border-top-color:var(--teal-deep)}
.gh-card{transition:border-color .3s}
.gh-card:hover{border-color:var(--teal)}
.gh-card img{transition:transform .8s cubic-bezier(.2,.7,.2,1)}
.gh-card:hover img{transform:rotate(60deg)}
.faq summary{transition:color .2s}
.faq summary:hover{color:var(--teal-deep)}
.faq summary::after{transition:transform .3s}
.faq details[open] summary::after{transform:rotate(180deg)}
.faq details[open]>p{animation:rise .4s cubic-bezier(.2,.7,.2,1) both}
.sources a{transition:color .2s}
.brand img{transition:transform .4s cubic-bezier(.2,.7,.2,1)}
.brand:hover img{transform:scale(1.04)}
@media (prefers-reduced-motion:reduce){.progress{display:none}}

.eco.two{grid-template-columns:repeat(2,1fr)}
.skills-by-phase{margin-top:clamp(48px,7vw,88px)}
.skills-by-phase .sub-h{font-size:clamp(1.5rem,2.6vw,2rem);font-weight:800;margin-bottom:4px}
.skills-by-phase .note{max-width:78ch}
.skills-by-phase .eco{margin-top:clamp(28px,4vw,44px)}
@media (max-width:980px){.eco.two{grid-template-columns:1fr}}
