/* Base: reset, tipografía y utilidades globales. Valores idénticos al prototipo. */
*{box-sizing:border-box}
/* Sin rebote elástico mientras la Home 3D está montada (la clase la alterna
   la vista grove): su freno físico corrige el scroll por frame y pelear
   contra el rubber-band desplaza la nav fija y produce bandas/saltos.
   El resto de vistas conserva el comportamiento nativo (pull-to-refresh). */
html.grove-lock{overscroll-behavior-y:none}
body{margin:0;background:var(--paper);color:var(--ink);font-family:'General Sans',system-ui,sans-serif;-webkit-font-smoothing:antialiased;font-size:18px;line-height:1.55;letter-spacing:-.003em}
.app{overflow-x:clip}
img{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
.btn{background:none;border:0;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;letter-spacing:inherit}
.bleed{width:100vw;position:relative;left:50%;margin-left:-50vw}
.wrap{max-width:1360px;margin:0 auto;padding:0 clamp(20px,4vw,56px)}
.cover{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform 1s cubic-bezier(.22,.7,.15,1),filter .8s ease}
.desat{filter:saturate(var(--sat,.62)) contrast(1.04) brightness(1.012)}

/* Reveals: visibles por defecto; animación solo vía animation-timeline (cero JS, jamás contenido oculto). */
.reveal{opacity:1}
@supports (animation-timeline:view()){.reveal{animation:rise 1s linear both;animation-timeline:view();animation-range:entry 4% entry 42%}}
@keyframes rise{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:none}}

/* Escala tipográfica */
.display{font-weight:600;letter-spacing:-.026em;line-height:.99}
.h-hero{font-size:clamp(42px,7.4vw,112px)}
.h1{font-size:clamp(34px,5.6vw,88px)}
.h2{font-size:clamp(24px,2.8vw,42px)}
.lead{font-size:clamp(19px,2.15vw,29px);line-height:1.36;letter-spacing:-.012em;font-weight:400}
.label{font-size:12px;letter-spacing:.2em;text-transform:uppercase;font-weight:500}
.small{font-size:13px}
.muted{color:var(--muted)}
.measure{max-width:34em}

/* Accesibilidad (aporte de producción — sin efecto visual en reposo) */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.skip{position:fixed;top:-100px;left:clamp(20px,4vw,56px);z-index:100;background:var(--paper);color:var(--ink);border:1px solid var(--line);padding:10px 16px;font-size:14px}
.skip:focus{top:12px}
#main:focus{outline:none}
body.menu-open{overflow:hidden}
