:root{--font-mono: "Berkeley Mono", "JetBrains Mono", "IBM Plex Mono", ui-monospace, monospace;--color-ink: #201d1d;--color-canvas: #fdfcfc;--color-surface-soft: #f5f3f3;--color-surface-card: #eceaea;--color-surface-dark: #201d1d;--color-surface-dark-elevated: #302c2c;--color-text-charcoal: #201d1d;--color-text-body: #3d3838;--color-text-mute: #6b6464;--color-text-stone: #9e9898;--color-text-ash: #c8c4c4;--color-accent: #007aff;--color-danger: #ff3b30;--color-warning: #ff9f0a;--color-success: #30d158;--space-xxs: 1px;--space-xs: 4px;--space-sm: 8px;--space-md: 12px;--space-lg: 16px;--space-xl: 24px;--space-xxl: 32px;--space-section: 96px;--radius-none: 0;--radius-sm: 4px;--radius-full: 9999px;--container-max: 960px;--nav-height: 56px}.vh-blog-grid{display:flex;flex-direction:column;gap:2px}.vh-blog-card{display:block;padding:16px 20px;border:1px solid rgba(236,228,214,.08);border-radius:var(--radius-sm, 4px);text-decoration:none;transition:border-color .15s,background .15s}.vh-blog-card:hover{border-color:#e8c39a38;background:#e8c39a0a}.vh-blog-card-date{display:block;font-size:12px;color:#ece4d647;margin-bottom:6px}.vh-blog-card-title{font-size:16px;font-weight:600;color:#ece4d6;margin-bottom:6px;line-height:1.35}.vh-blog-card:hover .vh-blog-card-title{color:var(--accent, #e8c39a)}.vh-blog-card-desc{font-size:13px;color:#ece4d67a;line-height:1.55}.vh-blog-empty{font-size:14px;color:#ece4d647;padding:32px 0}.vh-article{max-width:680px}.vh-article-header{margin-bottom:48px;padding-bottom:24px;border-bottom:1px solid rgba(236,228,214,.07)}.vh-article-title{font-size:clamp(24px,4vw,36px);font-weight:700;line-height:1.15;letter-spacing:-.02em;color:#ece4d6;margin-bottom:16px}.vh-article-meta{display:flex;align-items:center;gap:12px;font-size:13px;color:#ece4d659}.vh-lang-pair{margin-left:auto;font-size:12px;color:var(--accent, #e8c39a);text-decoration:none;border:1px solid rgba(232,195,154,.2);border-radius:var(--radius-sm, 4px);padding:4px 10px;transition:border-color .15s,background .15s}.vh-lang-pair:hover{border-color:#e8c39a66;background:#e8c39a0f}.vh-article-body{font-size:15px;line-height:1.8;color:#ece4d6b8}.vh-article-body h2{font-size:20px;font-weight:700;color:#ece4d6;margin-top:40px;margin-bottom:16px;line-height:1.3}.vh-article-body h3{font-size:17px;font-weight:600;color:#ece4d6;margin-top:32px;margin-bottom:12px;line-height:1.35}.vh-article-body p{margin-bottom:20px}.vh-article-body a{color:var(--accent, #e8c39a);text-decoration:underline;text-underline-offset:3px;text-decoration-color:#e8c39a4d;transition:text-decoration-color .15s}.vh-article-body a:hover{text-decoration-color:#e8c39ab3}.vh-article-body strong{color:#ece4d6;font-weight:600}.vh-article-body ul,.vh-article-body ol{margin-bottom:20px;padding-left:24px}.vh-article-body li{margin-bottom:8px}.vh-article-body li::marker{color:var(--accent, #e8c39a)}.vh-article-body blockquote{margin:24px 0;padding:12px 20px;border-left:2px solid rgba(232,195,154,.3);color:#ece4d68c;font-style:italic}.vh-article-body hr{border:none;border-top:1px solid rgba(236,228,214,.07);margin:32px 0}.vh-article-body code{font-family:var(--font-mono, monospace);font-size:.875em;background:#e8c39a14;padding:2px 6px;border-radius:var(--radius-sm, 4px);color:var(--accent, #e8c39a)}.vh-article-body pre{margin:24px 0;background:#e8c39a0a;border:1px solid rgba(232,195,154,.12);border-radius:var(--radius-sm, 4px);padding:14px 18px;overflow-x:auto}.vh-article-body pre code{background:none;padding:0;border-radius:0;font-size:13px;line-height:1.65;color:#ece4d6b8}.vh-article-body table{width:100%;border-collapse:collapse;margin:24px 0;font-size:13px;line-height:1.6}.vh-article-body th{text-align:left;padding:10px 14px;font-weight:600;color:#ece4d6;border-bottom:1px solid rgba(232,195,154,.25);background:#e8c39a0f}.vh-article-body td{padding:10px 14px;color:#ece4d6b8;border-bottom:1px solid rgba(236,228,214,.06)}.vh-article-body tbody tr:hover{background:#e8c39a08}.vh-article-body tbody tr:nth-child(2n){background:#ece4d605}.vh-article-body img{max-width:100%;height:auto;border-radius:var(--radius-sm, 4px);margin:24px 0;border:1px solid rgba(236,228,214,.08)}.vh-blog-preview-link{color:#ece4d6c7;text-decoration:none;transition:color .15s}.vh-blog-preview-link:hover{color:var(--accent, #e8c39a)}.vh-writing-empty{padding:32px 0;font-size:14px;color:#ece4d647}.vh-nav-link--page:before{content:"›";margin-right:4px;color:var(--accent, #e8c39a);opacity:.6}.vh-nav-link--page{color:#ece4d68c!important}.vh-nav-link--page:hover{color:var(--accent, #e8c39a)!important}@media(max-width:768px){.vh-article-header{margin-bottom:32px}.vh-article-body{font-size:14px}.vh-article-body pre{padding:12px}.vh-blog-card{padding:14px 16px}}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-family:var(--font-mono);font-size:16px;-webkit-font-smoothing:antialiased;scroll-behavior:smooth}body{min-height:100vh;overflow-x:hidden}html:not([data-lang=es]) [data-es]{display:none}html[data-lang=es] [data-en]{display:none}::-webkit-scrollbar{width:4px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#e8c39a4d;border-radius:2px}@keyframes vh-grid-drift{to{background-position:64px 64px}}@keyframes vh-fall{0%{transform:translateY(-120%)}to{transform:translateY(120%)}}@keyframes blink{0%,to{opacity:1}50%{opacity:0}}.vh-root{--bg: #0a0908;--ink: #ece4d6;--accent: #e8c39a;--accent2: #ffb380;--grid-col: rgba(236, 228, 214, .04);position:relative;min-height:100vh;background:var(--bg);color:var(--ink);font-family:var(--font-mono, monospace);overflow-x:hidden}.vh-content{position:relative;z-index:1}.vh-bg{position:fixed;inset:0;pointer-events:none;z-index:0;overflow:hidden}.vh-grid{position:absolute;inset:0;background-image:linear-gradient(var(--grid-col) 1px,transparent 1px),linear-gradient(90deg,var(--grid-col) 1px,transparent 1px);background-size:64px 64px;animation:vh-grid-drift 32s linear infinite;mask-image:radial-gradient(ellipse at 50% 0%,black 30%,transparent 70%);-webkit-mask-image:radial-gradient(ellipse at 50% 0%,black 30%,transparent 70%)}.vh-rain{position:absolute;inset:0}.vh-col{position:absolute;top:0;display:flex;flex-direction:column;gap:8px;color:var(--accent);opacity:.11;font-size:12px;line-height:1;will-change:transform;user-select:none;animation:vh-fall var(--col-dur, 20s) linear var(--col-delay, 0s) infinite}.vh-scan{position:absolute;inset:0;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,0,0,.06) 2px,rgba(0,0,0,.06) 3px)}.vh-vignette{position:absolute;inset:0;background:radial-gradient(ellipse at 50% 100%,rgba(0,0,0,.6) 0%,transparent 60%)}.vh-nav{position:sticky;top:0;z-index:100;height:var(--nav-height, 56px);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid rgba(236,228,214,.08);background:#0a0908a6}.vh-nav-inner{max-width:var(--container-max, 960px);margin:0 auto;padding:0 24px;height:100%;display:flex;align-items:center;gap:24px}.vh-mark{font-size:14px;font-weight:700;color:var(--accent);letter-spacing:-.02em;text-decoration:none;flex-shrink:0}.vh-nav-role{font-size:13px;color:#ece4d659;flex-shrink:0}.vh-nav-links{display:flex;gap:20px;margin-left:auto;list-style:none}.vh-nav-link{font-size:13px;color:#ece4d673;text-decoration:none;transition:color .15s}.vh-nav-link:hover{color:var(--ink)}.vh-lang-toggle{display:flex;gap:4px;margin-left:16px}.vh-lang-btn{font-size:11px;font-family:inherit;padding:3px 9px;border-radius:var(--radius-full, 9999px);border:1px solid rgba(236,228,214,.18);background:transparent;color:#ece4d659;cursor:pointer;transition:color .15s,border-color .15s,background .15s}.vh-lang-btn:hover,.vh-lang-btn[data-active]{color:var(--accent);border-color:#e8c39a66;background:#e8c39a0f}.vh-mb-link{display:none;font-size:11px;font-family:inherit;padding:3px 9px;border-radius:var(--radius-full, 9999px);border:1px solid rgba(236,228,214,.18);color:#ece4d659;text-decoration:none;transition:color .15s,border-color .15s,background .15s}.vh-mb-link:hover{color:var(--accent);border-color:#e8c39a66;background:#e8c39a0f}.vh-hero{max-width:var(--container-max, 960px);margin:0 auto;padding:96px 24px 80px}.vh-h1{font-size:clamp(30px,5vw,56px);font-weight:700;line-height:1.06;letter-spacing:-.03em;color:var(--ink);margin-bottom:20px}.vh-h1-accent{background:linear-gradient(135deg,var(--accent),var(--accent2));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.vh-sub{font-size:16px;line-height:1.65;color:#ece4d694;max-width:520px;margin-bottom:48px}.vh-stats{display:grid;grid-template-columns:repeat(4,auto);gap:40px;justify-content:start}.vh-stat-n{font-size:28px;font-weight:700;color:var(--accent);line-height:1}.vh-stat-l{font-size:11px;color:#ece4d659;margin-top:5px;text-transform:uppercase;letter-spacing:.08em}.vh-section{max-width:var(--container-max, 960px);margin:0 auto;padding:80px 24px}.vh-section-head{display:flex;align-items:baseline;gap:12px;margin-bottom:48px;border-bottom:1px solid rgba(236,228,214,.07);padding-bottom:16px}.vh-section-num{font-size:13px;color:#ece4d647}.vh-section-title{font-size:20px;font-weight:700;color:var(--ink)}.vh-about-body{display:flex;flex-direction:column;gap:20px;max-width:680px}.vh-about-p{font-size:15px;line-height:1.75;color:#ece4d6b8}.vh-stack-grid{display:grid;grid-template-columns:1fr 1fr;gap:2px}.vh-stack-row{display:flex;align-items:baseline;gap:12px;padding:10px 12px;border-radius:var(--radius-sm, 4px);border:1px solid transparent;transition:border-color .15s,background .15s}.vh-stack-row:hover{border-color:#e8c39a2e;background:#e8c39a0a}.vh-stack-marker{color:var(--accent);font-size:12px;min-width:28px;flex-shrink:0}.vh-stack-name{font-weight:600;font-size:14px;flex-shrink:0}.vh-stack-note{font-size:13px;color:#ece4d661;flex:1;min-width:0}.vh-stack-tag{font-size:11px;color:#ece4d638;border:1px solid rgba(236,228,214,.1);border-radius:var(--radius-sm, 4px);padding:2px 6px;flex-shrink:0}.vh-proj-list{display:flex;flex-direction:column;gap:2px}.vh-proj{border:1px solid rgba(236,228,214,.08);border-radius:var(--radius-sm, 4px);overflow:hidden;transition:border-color .15s}.vh-proj[open]{border-color:#e8c39a38}.vh-proj-summary{display:flex;align-items:center;gap:14px;padding:16px 20px;cursor:pointer;user-select:none;list-style:none}.vh-proj-summary::-webkit-details-marker{display:none}.vh-proj-toggle{font-size:12px;color:var(--accent);min-width:14px;transition:transform .2s;flex-shrink:0}.vh-proj[open] .vh-proj-toggle{transform:rotate(90deg)}.vh-proj-name{font-weight:600;font-size:15px}.vh-proj-meta{margin-left:auto;display:flex;align-items:center;gap:14px;flex-shrink:0}.vh-proj-year{font-size:13px;color:#ece4d64d}.vh-proj-kind{font-size:12px;color:#ece4d638;border:1px solid rgba(236,228,214,.1);border-radius:var(--radius-full, 9999px);padding:2px 10px}.vh-proj-body{padding:4px 20px 20px 48px}.vh-proj-stack-tags{display:flex;gap:10px;flex-wrap:wrap;padding:0 20px 14px 48px}.vh-proj-stack-tag{font-size:11px;color:var(--accent);opacity:.5}.vh-proj-desc{font-size:14px;color:#ece4d68c;line-height:1.65;margin-bottom:16px}.vh-bullets{list-style:none;display:flex;flex-direction:column;gap:8px;margin-bottom:20px;padding:0}.vh-bullet{font-size:13px;color:#ece4d67a;display:flex;gap:8px}.vh-bullet:before{content:"›";color:var(--accent);flex-shrink:0}.vh-cmd{display:block;font-family:var(--font-mono, monospace);font-size:13px;background:#e8c39a0d;border:1px solid rgba(232,195,154,.14);border-radius:var(--radius-sm, 4px);padding:10px 14px;color:var(--accent);overflow-x:auto;white-space:pre}.vh-skills-grid{display:grid;grid-template-columns:200px 1fr auto;border:1px solid rgba(236,228,214,.08);border-radius:var(--radius-sm, 4px);overflow:hidden}.vh-skill-name,.vh-skill-blurb,.vh-skill-tags{padding:13px 16px;font-size:13px;border-bottom:1px solid rgba(236,228,214,.06)}.vh-skill-name{color:var(--accent);font-weight:500}.vh-skill-blurb{color:#ece4d685;line-height:1.55}.vh-skill-tags{display:flex;gap:6px;flex-wrap:wrap;align-items:center;justify-content:flex-end}.vh-skill-tag{font-size:11px;color:#ece4d647;border:1px solid rgba(236,228,214,.1);border-radius:var(--radius-sm, 4px);padding:2px 6px}.vh-skills-grid>*:nth-last-child(-n+3){border-bottom:none}.vh-writing-list{display:grid;grid-template-columns:90px 1fr 90px 60px;border:1px solid rgba(236,228,214,.08);border-radius:var(--radius-sm, 4px);overflow:hidden}.vh-writing-date,.vh-writing-title,.vh-writing-tag,.vh-writing-mins{padding:14px 16px;font-size:13px;border-bottom:1px solid rgba(236,228,214,.06);display:flex;align-items:center}.vh-writing-date{color:#ece4d647;font-size:12px}.vh-writing-title{color:#ece4d6c7;line-height:1.4}.vh-writing-tag{color:#ece4d647;font-size:11px}.vh-writing-mins{color:#ece4d638;font-size:12px;justify-content:flex-end}.vh-writing-list>*:nth-last-child(-n+4){border-bottom:none}.vh-cta{display:grid;grid-template-columns:1fr 1fr;gap:40px;border:1px solid rgba(236,228,214,.08);border-radius:var(--radius-sm, 4px);padding:40px;background:#ece4d605}.vh-cta-h{font-size:22px;font-weight:700;color:var(--ink);margin-bottom:12px}.vh-cta-p{font-size:14px;color:#ece4d673;line-height:1.65}.vh-contact-links{display:flex;flex-direction:column;gap:14px;justify-content:center}.vh-contact-link{display:flex;align-items:center;gap:10px;font-size:14px;color:#ece4d694;text-decoration:none;transition:color .15s}.vh-contact-link:hover{color:var(--accent)}.vh-contact-label{font-size:12px;color:#ece4d638;min-width:56px}.vh-footer{max-width:var(--container-max, 960px);margin:0 auto;padding:28px 24px;border-top:1px solid rgba(236,228,214,.06);font-size:12px;color:#ece4d62e;display:flex;justify-content:space-between;align-items:center}.caret{display:inline-block;width:.55em;height:1em;background:var(--accent);vertical-align:text-bottom;animation:blink 1s step-end infinite}@media(max-width:768px){.vh-nav-role,.vh-nav-links{display:none}.vh-mb-link{display:inline}.vh-lang-toggle{margin-left:auto}.vh-hero{padding:64px 24px 48px}.vh-section{padding:56px 24px}.vh-stats{grid-template-columns:repeat(2,auto);gap:24px 40px}.vh-stack-grid,.vh-skills-grid{grid-template-columns:1fr}.vh-skills-grid>*:nth-last-child(-n+3){border-bottom:1px solid rgba(236,228,214,.06)}.vh-skills-grid>*:last-child{border-bottom:none}.vh-writing-list{grid-template-columns:80px 1fr}.vh-writing-tag,.vh-writing-mins{display:none}.vh-writing-list>*:nth-last-child(-n+4){border-bottom:1px solid rgba(236,228,214,.06)}.vh-writing-list>*:nth-last-child(-n+2){border-bottom:none}.vh-cta{grid-template-columns:1fr;gap:24px;padding:24px}.vh-proj-meta{display:none}}
