:root{--bg: #ede5d7;--surface: #f8f3ea;--ink: #1c1a17;--ink-muted: #655c53;--line: #d9cfbf;--line-strong: #c8bdab;--control: #8a7e70;--accent: #5b3c99;--accent-ink: #472d7d;--accent-wash: #e0d6ea;--accent-on: #f8f3ea;--accent-soft: #c9b6f0;--ink-block: #1c1a17;--on-ink: #f8f3ea;--on-ink-muted: #bdb3a6;--ok: #1f7a48;--linkedin: #0a66c2;--github: #1a7f37;--tubo-edta: #7b5ea7;--tubo-citrato: #4a90d9;--tubo-suero: #c8372d;--tubo-heparina: #2e8b57;--tubo-fluoruro: #8d939b;--font-display: "Bricolage Grotesque", system-ui, sans-serif;--font-body: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--t-display: clamp(2.8rem, 1rem + 4.4vw, 5.1rem);--t-h2: clamp(1.75rem, 1.1rem + 2.6vw, 3rem);--t-h3: clamp(1.3rem, 1.05rem + 1vw, 1.75rem);--t-lead: clamp(1.05rem, .98rem + .35vw, 1.3rem);--t-body: 1.0625rem;--t-small: .9375rem;--t-label: .75rem;--t-figure: clamp(2.75rem, 1.5rem + 4vw, 4rem);--t-figure-sm: clamp(2rem, 1.4rem + 2vw, 2.75rem);--radius: 10px;--radius-pill: 999px;--ease: cubic-bezier(.22, 1, .36, 1);--measure: 62ch;--container: 1200px;--gutter: clamp(1.25rem, .5rem + 3vw, 3rem)}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font-body);font-size:var(--t-body);line-height:1.65;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}img,svg{display:block;max-width:100%}button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}a{color:inherit}h1,h2,h3,p,dl,dd,figure{margin:0}ul,ol{margin:0;padding:0;list-style:none}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:2px}::selection{background:var(--accent);color:var(--accent-on)}.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}@keyframes reveal{0%{opacity:0;transform:translateY(24px)}to{opacity:1;transform:none}}@keyframes reveal-titular{0%{clip-path:inset(0 0 100% 0);transform:translateY(.45em)}to{clip-path:inset(0 0 -.2em 0);transform:none}}@media (prefers-reduced-motion: no-preference){.reveal{animation:reveal .9s var(--ease) both;animation-delay:var(--delay, 0ms)}.reveal.display{animation-name:reveal-titular;animation-duration:1.1s}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}.container{width:100%;max-width:var(--container);margin-inline:auto;padding-inline:var(--gutter)}.page{padding-block:clamp(5.5rem,4rem + 7vw,9.5rem) clamp(3rem,2rem + 5vw,7rem);overflow-x:clip}.cluster{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center}.measure{max-width:var(--measure)}.muted{color:var(--ink-muted)}.accent{color:var(--accent)}.kicker{font-family:var(--font-mono);font-size:var(--t-label);font-weight:500;letter-spacing:.12em;text-transform:uppercase;line-height:1;color:var(--ink-muted)}.display{font-family:var(--font-display);font-size:var(--t-display);font-weight:800;line-height:.93;letter-spacing:-.045em;font-variation-settings:"opsz" 96;max-width:18ch}.display em{display:block;font-style:normal;color:var(--accent)}.h2{font-family:var(--font-display);font-size:var(--t-h2);font-weight:800;line-height:1.02;letter-spacing:-.035em}.h3{font-family:var(--font-display);font-size:var(--t-h3);font-weight:700;line-height:1.2;letter-spacing:-.02em}.lead{font-size:var(--t-lead);line-height:1.55;color:var(--ink-muted);max-width:50ch}.small{font-size:var(--t-small);line-height:1.5}.mono{font-family:var(--font-mono);font-size:var(--t-label);letter-spacing:.06em}.link{text-decoration:underline;text-decoration-color:var(--line-strong);text-decoration-thickness:1px;text-underline-offset:.22em;transition:color .2s var(--ease),text-decoration-color .2s var(--ease)}.link:hover{color:var(--accent);text-decoration-color:var(--accent)}.btn{position:relative;overflow:hidden;isolation:isolate;display:inline-flex;align-items:center;gap:.5rem;padding:.8rem 1.5rem;border-radius:var(--radius-pill);font-size:var(--t-small);font-weight:500;text-decoration:none;white-space:nowrap;transition:transform .35s var(--ease),color .35s var(--ease),border-color .35s var(--ease)}.btn:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;border-radius:inherit;transform:translateY(101%);transition:transform .5s var(--ease)}.btn:hover{transform:translateY(-2px)}.btn:hover:before{transform:none}.btn__arrow{transition:transform .35s var(--ease)}.btn-icon{position:relative;overflow:hidden;isolation:isolate;display:inline-grid;place-items:center;width:50px;height:50px;border:1px solid var(--control);border-radius:50%;color:var(--ink);transition:transform .35s var(--ease),color .35s var(--ease),border-color .35s var(--ease)}.btn-icon svg{width:20px;height:20px}.btn-icon:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;border-radius:inherit;background:var(--red, var(--accent));transform:translateY(101%);transition:transform .5s var(--ease)}.btn-icon:hover{transform:translateY(-2px);border-color:var(--red, var(--accent));color:var(--accent-on)}.red-linkedin{--red: var(--linkedin)}.red-github{--red: var(--github)}.red-mail{--red: var(--accent)}.btn-icon:hover:before{transform:none}.btn:hover .btn__arrow{transform:translate(4px)}.btn--solid{background:var(--ink);color:var(--surface)}.btn--solid:before{background:var(--accent)}.btn--solid:hover{color:var(--accent-on)}.btn--outline{border:1px solid var(--control);color:var(--ink)}.btn--outline:before{background:var(--accent)}.btn--outline:hover{border-color:var(--accent);color:var(--accent-on)}.btn--invert{background:var(--on-ink);color:var(--ink-block)}.btn--invert:before{background:var(--accent-soft)}.btn--invert:hover{color:var(--ink-block)}.block{background:var(--ink-block);color:var(--on-ink);border-radius:calc(var(--radius) + 8px);padding:clamp(2rem,1.25rem + 3.5vw,4.5rem)}.block .kicker,.block .muted{color:var(--on-ink-muted)}.block em{font-style:normal;color:var(--accent-soft)}.block--papel{background:var(--surface);color:var(--ink);box-shadow:0 18px 40px -22px #3c281473}.block--papel .kicker,.block--papel .muted{color:var(--ink-muted)}.figures{display:grid;grid-template-columns:1fr;border-top:1px solid var(--line)}@media (min-width: 640px){.figures{grid-template-columns:repeat(3,1fr)}}.figures--four{grid-template-columns:repeat(2,1fr)}@media (min-width: 900px){.figures--four{grid-template-columns:repeat(4,1fr)}}.figure{padding-block:clamp(1.5rem,1rem + 1.5vw,2.25rem);padding-inline-end:1.5rem;border-bottom:1px solid var(--line)}@media (min-width: 640px){.figure{border-bottom:0}}.figures--four .figure{border-bottom:0}.figure__n{font-family:var(--font-display);font-weight:800;font-size:var(--t-figure);line-height:1;letter-spacing:-.04em;font-variant-numeric:lining-nums tabular-nums}.figure--sm .figure__n{font-size:var(--t-figure-sm);letter-spacing:-.03em}.figure__unit{font-family:var(--font-mono);font-size:var(--t-label);letter-spacing:.12em;text-transform:uppercase;color:var(--ink-muted);margin-inline-start:.5rem;vertical-align:super}.figure__label{display:block;font-family:var(--font-mono);font-size:var(--t-label);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-muted);margin-block-start:.9rem}.figure__cap{margin-block-start:.6rem;max-width:26ch;font-size:var(--t-small);line-height:1.5;color:var(--ink-muted)}.meta{border-top:1px solid var(--line)}.meta__row{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;padding-block:.8rem;border-bottom:1px solid var(--line)}.meta__value{text-align:end;font-size:var(--t-small)}.spec{border-top:1px solid var(--line)}.spec__row{display:grid;gap:.35rem;padding-block:1.1rem;border-bottom:1px solid var(--line)}@media (min-width: 600px){.spec__row{grid-template-columns:170px 1fr;gap:1.5rem}}.rows>*+*{border-top:1px solid var(--line)}.row{display:grid;gap:.75rem;padding-block:clamp(1.5rem,1rem + 1.5vw,2.25rem)}@media (min-width: 900px){.row{grid-template-columns:260px 1fr;gap:2.5rem}.row--wide{grid-template-columns:280px 1fr}.row--narrow{grid-template-columns:48px 1fr;gap:2rem}}.row--baseline{align-items:baseline}.row__body{max-width:64ch;color:var(--ink-muted)}.rule{border:0;border-top:1px solid var(--line);margin:0}.split{display:grid;gap:clamp(1.5rem,1rem + 3vw,3.5rem)}@media (min-width: 900px){.split--hero{grid-template-columns:1.3fr .9fr;align-items:start}.split--text{grid-template-columns:1.35fr 1fr;align-items:start}}.stack-sm>*+*{margin-block-start:1rem}.stack-md>*+*{margin-block-start:1.5rem}.stack-lg>*+*{margin-block-start:clamp(2rem,1.5rem + 2vw,3.5rem)}.section{margin-block-start:clamp(3rem,2rem + 5vw,7rem)}.section--tight{margin-block-start:clamp(2.5rem,2rem + 3vw,4.5rem)}.tags{display:flex;flex-wrap:wrap;gap:.4rem}.tag{font-family:var(--font-mono);font-size:var(--t-label);color:var(--ink-muted);border:1px solid var(--line-strong);border-radius:var(--radius-pill);padding:.3rem .7rem}.nav{position:fixed;inset-block-start:0;inset-inline:0;z-index:100;background:color-mix(in srgb,var(--bg) 82%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}.nav__inner{display:flex;align-items:center;gap:1rem;min-height:60px}@media (min-width: 600px){.nav__inner{min-height:68px}}.nav__brand{flex:1;font-family:var(--font-display);font-weight:700;font-size:1.2rem;letter-spacing:-.03em;text-decoration:none;transition:color .2s var(--ease)}.nav__brand:hover{color:var(--accent)}.nav__links{display:none;align-items:center;gap:.25rem}@media (min-width: 600px){.nav__links{display:flex}}.nav__link{padding:.4rem .7rem;font-size:var(--t-small);font-weight:500;color:var(--ink-muted);text-decoration:none;transition:color .2s var(--ease)}.nav__link:hover{color:var(--ink)}.nav__link[aria-current=page]{color:var(--accent)}.nav__burger{display:inline-flex;padding:.5rem;margin-inline-end:-.5rem}@media (min-width: 600px){.nav__burger{display:none}}.drawer[hidden]{display:none}.drawer{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200}.drawer__scrim{position:absolute;top:0;right:0;bottom:0;left:0;background:#0f0e0d59;animation:fade .2s var(--ease)}@keyframes fade{0%{opacity:0}to{opacity:1}}.drawer__panel{position:absolute;inset-block:0;inset-inline-end:0;width:min(320px,84vw);background:var(--bg);border-inline-start:1px solid var(--line);padding:1rem 1.25rem 2rem;display:flex;flex-direction:column;animation:slide-in .28s var(--ease)}@keyframes slide-in{0%{transform:translate(100%)}to{transform:none}}@media (prefers-reduced-motion: reduce){.drawer__scrim,.drawer__panel{animation:none}}.drawer__close{align-self:flex-end;padding:.5rem;margin-block-end:1rem}.drawer__link{display:block;padding-block:1rem;border-bottom:1px solid var(--line);font-family:var(--font-display);font-weight:700;font-size:1.4rem;letter-spacing:-.02em;text-decoration:none}.drawer__link[aria-current=page]{color:var(--accent)}.footer{border-top:1px solid var(--line);padding-block:clamp(2rem,1.5rem + 2vw,3rem)}.footer__inner{display:flex;flex-wrap:wrap;gap:1.5rem;justify-content:space-between;align-items:baseline}.footer__links{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center}.footer__link{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border:1px solid var(--control);border-radius:var(--radius-pill);font-size:var(--t-small);font-weight:500;color:var(--ink);text-decoration:none;transition:background-color .25s var(--ease),color .25s var(--ease),border-color .25s var(--ease)}.footer__link svg{width:16px;height:16px}.footer__link:hover{background:var(--red, var(--accent));border-color:var(--red, var(--accent));color:var(--accent-on)}.work{display:block;text-decoration:none}.work__row{display:grid;gap:1.25rem;padding-block:clamp(1.75rem,1.25rem + 2vw,3rem);border-top:1px solid var(--line);align-items:center}@media (min-width: 900px){.work__row{grid-template-columns:1fr 1.1fr;gap:3rem}.work__text{order:1}.work__media{order:2}}.work__media{overflow:hidden;border:1px solid var(--line);border-radius:var(--radius)}.work__img{width:100%;aspect-ratio:16 / 10;object-fit:cover;object-position:top;transition:transform 1.2s var(--ease)}.work:hover .work__img{transform:scale(1.04)}.work:hover .work__title{color:var(--accent)}.work:hover .icon--out{transform:translate(3px,-3px);opacity:1}.icon--out.icon--fuerte{opacity:1;color:var(--ink)}.work:hover .icon--out.icon--fuerte{color:var(--accent)}.icon--out{width:.7em;height:.7em;opacity:.35;color:var(--accent);transition:transform .25s var(--ease),opacity .25s var(--ease)}.hero{position:relative}.hero>*{position:relative;z-index:1}.escribe:after{content:"";display:inline-block;width:.07em;height:.8em;margin-inline-start:.05em;vertical-align:-.04em;background:var(--accent)}@media (prefers-reduced-motion: no-preference){.escribe:after{animation:parpadeo 1s steps(1) infinite}}@keyframes parpadeo{50%{opacity:0}}.tiles{display:grid;gap:1.25rem}@media (min-width: 760px){.tiles{grid-template-columns:repeat(2,1fr)}}.tile{display:block;padding:10px;border-radius:var(--radius);background:var(--surface);box-shadow:0 18px 40px -22px #3c281473;text-decoration:none;transition:transform .6s var(--ease)}.tile:hover{transform:translateY(-6px) rotate(-.4deg)}.tile__media{overflow:hidden;border-radius:4px;aspect-ratio:16 / 10}.tile__img{width:100%;height:100%;object-fit:cover;object-position:top;transition:transform 1.4s var(--ease)}.tile:hover .tile__img{transform:scale(1.06)}.tile__label{display:flex;justify-content:space-between;align-items:end;gap:1rem;padding:.9rem .4rem .4rem}.tile__title{font-family:var(--font-display);font-weight:700;font-size:1.45rem;line-height:1.15;letter-spacing:-.02em;margin-block-start:.35rem}.tile__arrow{flex:none;display:grid;place-items:center;width:44px;height:44px;border-radius:50%;background:var(--ink);color:var(--surface);opacity:0;transform:translate(10px,10px) scale(.5);transition:transform .5s var(--ease),opacity .4s var(--ease)}.tile:hover .tile__arrow,.tile:focus-visible .tile__arrow{opacity:1;transform:none}@media (min-width: 900px){.hero.split--hero{align-items:end}}.retrato{position:relative;display:grid;place-items:end center;isolation:isolate}.retrato:before{content:"";position:absolute;top:5%;right:-10%;bottom:20%;left:-10%;z-index:-1;background:radial-gradient(closest-side,rgb(91 60 153 / .16),rgb(91 60 153 / .04) 60%,transparent)}.retrato img{width:min(100%,400px);height:auto;mask-image:linear-gradient(to bottom,#000 80%,transparent);-webkit-mask-image:linear-gradient(to bottom,#000 80%,transparent)}.gradilla{position:relative;display:flex;align-items:end;gap:14px;padding-inline:8px;margin-block-end:1.1rem}.gradilla:after{content:"";position:absolute;inset-inline:0;bottom:16px;height:14px;border-radius:3px;background:var(--line);box-shadow:inset 0 -2px #00000014}.tubo{width:42px;color:var(--ink);text-align:center}.tubo svg{width:42px;height:auto;overflow:visible}@media (prefers-reduced-motion: no-preference){.tubo__tapon{transform-box:fill-box;animation:tapa .6s var(--ease) both;animation-delay:calc(var(--n) * .14s + .4s)}.tubo__liquido{transform-box:fill-box;transform-origin:bottom;animation:llena 1.6s var(--ease) both;animation-delay:calc(var(--n) * .14s + .7s)}}@keyframes tapa{0%{transform:translateY(-14px);opacity:0}}@keyframes llena{0%{transform:scaleY(0)}}.etiqueta{background:var(--surface);border-radius:var(--radius);padding:.6rem 1.35rem 1.1rem;box-shadow:0 1px #0000000a,0 18px 40px -18px #3c281459}.etiqueta .meta{border-top:0}.etiqueta .meta__row{padding-block:.55rem}.etiqueta .ok{color:var(--ok);font-weight:500}.barras{position:relative;height:54px;margin-block-start:1rem;overflow:hidden}.barras svg{width:100%;height:100%;fill:var(--ink)}.laser{position:absolute;inset-block:-6px;inset-inline-start:0;width:2px;opacity:0;background:#ff2a1f;box-shadow:0 0 10px 2px #ff2a1f99}@media (prefers-reduced-motion: no-preference){.laser{opacity:1;animation:escanea 2.8s ease-in-out 1.8s infinite alternate backwards}}@keyframes escanea{0%{inset-inline-start:0}to{inset-inline-start:calc(100% - 2px)}}.etiqueta__codigo{margin-block-start:.5rem;font:.68rem/1 var(--font-mono);letter-spacing:.3em;text-align:center;color:var(--ink-muted)}.chip{display:block;width:30px;height:12px;margin-block-end:1.1rem;border-radius:4px 4px 2px 2px}
