:root{--color-primary:#dc143c;--color-primary-hover:#b91c3c;--color-border:#663399;--color-callout:#1e90ff;--color-text:#232333;--color-text-muted:#737373;--color-text-meta:#999999;--color-background:#ffffff;--color-background-code:#f1f1f1;--color-background-pre:#ececec;--color-background-toc:#ececec;--color-background-draft:#f9f2f4;--color-lab-grid:oklch(88% 0.028 305 / 0.28);--color-primary-dark:#50fa7b;--color-primary-hover-dark:#3dd458;--color-border-dark:#0066ff;--color-text-dark:#ffffff;--color-text-muted-dark:#dddddd;--color-background-dark:#202124;--color-background-code-dark:#3a3a3a;--color-background-pre-dark:#272822;--color-background-toc-dark:#272822;--color-background-draft-dark:#0066ff;--color-night-grid:oklch(56% 0.18 260 / 0.12);--content-max-width:800px;--content-padding:1ch;--border-radius:5px;--font-size-base:15px;--line-height-base:1.6;--line-height-content:1.5}*,*::before,*::after{box-sizing:border-box}html{color:var(--color-text,#232333);font-family:roboto mono,courier new,monospace;font-size:var(--font-size-base,15px);line-height:var(--line-height-base,1.6);scroll-behavior:smooth}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{min-height:100vh;margin:8px;position:relative;isolation:isolate;overflow-x:hidden;background-color:var(--color-background,#ffffff);transition:background-color .2s ease,color .2s ease}body::before{content:"";position:fixed;inset:0;z-index:0;pointer-events:none;background-image:linear-gradient(90deg,var(--color-lab-grid) 1px,transparent 1px),linear-gradient(var(--color-lab-grid) 1px,transparent 1px),radial-gradient(circle at 14% 8%,oklch(94% .06 20/.5),transparent 28rem),radial-gradient(circle at 92% 18%,oklch(90% .05 250/.38),transparent 24rem);background-size:20px 20px,20px 20px,auto,auto;background-repeat:repeat,repeat,no-repeat,no-repeat}*{-webkit-tap-highlight-color:transparent}::selection{background:var(--color-primary,#dc143c);color:#fff}::-moz-selection{background:var(--color-primary,#dc143c);color:#fff}p{font-family:fira sans,-apple-system,BlinkMacSystemFont,segoe ui,sans-serif;line-height:var(--line-height-content,1.5);margin-top:.5em;margin-bottom:.5em}@supports(margin-block:0.5em){p{margin-top:unset;margin-bottom:unset;margin-block:.5em}}hr{border:0;border-top:3px dotted var(--color-border,#663399);margin-top:1em;margin-bottom:1em}@supports(border-block-start:3px dotted var(--color-border,#663399)){hr{border-top:unset;margin-top:unset;margin-bottom:unset;border-block-start:3px dotted var(--color-border,#663399);margin-block:1em}}blockquote{border-left:3px solid var(--color-border,#663399);padding-left:1em;color:var(--color-text-muted,#737373);margin:0;font-style:italic}@supports(border-inline-start:3px solid var(--color-border,#663399)){blockquote{border-left:unset;padding-left:unset;border-inline-start:3px solid var(--color-border,#663399);padding-inline-start:1em}}a{border-bottom:3px solid var(--color-primary,#dc143c);border-block-end:3px solid var(--color-primary,#dc143c);color:inherit;text-decoration:none;transition:background-color .2s ease,color .2s ease}a:hover,a:focus{background-color:var(--color-primary-hover,#b91c3c);color:#fff;outline:2px solid var(--color-primary,#dc143c);outline-offset:2px}a:focus{outline-style:solid}ul{list-style:none;padding-left:2ch;padding-inline-start:2ch}ul li{text-indent:-2ch}ul>li::before{content:'* ';font-weight:700;color:var(--color-primary,#dc143c)}img{border:3px solid var(--color-background-pre,#ececec);max-width:100%;height:auto;max-inline-size:100%;block-size:auto;border-radius:var(--border-radius,5px)}img[alt="Avatar de Simón Herrera"]{box-shadow:0 12px 28px oklch(24% .025 285/.15)}figure{display:inline-block;margin:0;max-width:100%;max-inline-size:100%}figure img{max-height:500px;max-block-size:500px}@media screen and (min-width:37.5em){figure{padding-left:2.5rem;padding-right:2.5rem;padding-inline:2.5rem}}figure h4{font-size:1rem;margin:0;margin-bottom:1em;margin-block-end:1em}figure h4::before{content:'↳ ';color:var(--color-primary,#dc143c)}code{background-color:var(--color-background-code,#f1f1f1);padding:.1em .2em;border-radius:3px;font-size:.9em}pre{background-color:var(--color-background-pre,#ececec);line-height:1.4;overflow-x:auto;padding:1em;border-radius:var(--border-radius,5px);border:1px solid var(--color-border,#663399)}.highlight pre ::selection{background:rgba(255,255,255,.2);color:inherit}pre code{background-color:transparent;color:inherit;font-size:100%;padding:0}.content{position:relative;z-index:1;margin-bottom:4em;margin-left:auto;margin-right:auto;max-width:var(--content-max-width,800px);padding-left:var(--content-padding,1ch);padding-right:var(--content-padding,1ch);margin-block-end:4em;margin-inline:auto;max-inline-size:var(--content-max-width,800px);padding-inline:var(--content-padding,1ch);word-wrap:break-word;overflow-wrap:break-word}header{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-top:1em;margin-bottom:1em;margin-block:1em;line-height:2.5em;gap:1rem}header .main{font-size:1.5rem;font-weight:700}h1,h2,h3,h4,h5,h6{font-size:1.2rem;margin-top:2em;margin-bottom:.5em;margin-block-start:2em;margin-block-end:.5em;line-height:1.2}h1::before{color:var(--color-primary,#dc143c);content:'# '}h2::before{color:var(--color-primary,#dc143c);content:'## '}h3::before{color:var(--color-primary,#dc143c);content:'### '}h4::before{color:var(--color-primary,#dc143c);content:'#### '}h5::before{color:var(--color-primary,#dc143c);content:'##### '}h6::before{color:var(--color-primary,#dc143c);content:'###### '}.meta{color:var(--color-text-meta,#999999);letter-spacing:-.5px;font-size:.9em}.post-container{display:flex;flex-wrap:wrap;gap:1.25rem;align-items:flex-start}@supports(display:grid){.post-container{display:grid;grid-template-columns:1fr}}@media screen and (min-width:60em){.post-container{flex-wrap:nowrap}@supports(display:grid){.post-container{grid-template-columns:1fr auto}}}.post-content{flex:1;min-width:0;min-inline-size:0;overflow-wrap:break-word}.toc{background-color:var(--color-background-toc,#ececec);border-radius:var(--border-radius,5px);color:var(--color-text,#232333);max-width:18.75rem;flex:none;max-inline-size:18.75rem;overflow-y:auto;padding:.75rem;border:1px solid var(--color-border,#663399)}@media screen and (min-width:60em){.toc{position:sticky;top:1.25rem;inset-block-start:1.25rem}}@media screen and (max-width:59.99em){.toc{margin-bottom:1.5rem;margin-block-end:1.5rem;order:-1}}footer{display:flex;align-items:center;border-top:.4rem dotted var(--color-border,#663399);padding-top:2rem;padding-bottom:2rem;margin-top:2rem;border-block-start:.4rem dotted var(--color-border,#663399);padding-block:2rem;margin-block-start:2rem;gap:.5rem;flex-wrap:wrap}.soc{display:flex;align-items:center;border-bottom:none;border-block-end:none;transition:color .2s ease}.soc:hover,.soc:focus{color:#fff;outline:2px solid var(--color-primary,#dc143c);outline-offset:2px}.border{margin-inline:.5rem;border:1px solid var(--color-border,#663399)}.title h1{margin-bottom:0;margin-block-end:0}time{color:var(--color-text-muted,#737373);font-size:.9em}article .title{margin-bottom:1em;margin-block-end:1em}.callout{background-color:var(--color-callout,#1e90ff);color:#fff;padding:1em;border-radius:var(--border-radius,5px);margin-top:1em;margin-bottom:1em;margin-block:1em}.callout p{font-family:ibm plex mono,courier new,monospace;margin:0}.callout a{border-bottom:3px solid #fff;border-block-end:3px solid #ffffff;color:inherit}.callout a:hover,.callout a:focus{background-color:#fff;color:var(--color-callout,#1e90ff)}.callout-alert{color:#721c24;background-color:#f8d7da;border:3px solid #f5c2c7}.callout-tip{color:#055160;background-color:#d1ecf1;border:3px solid #b8daff}.callout-warning{color:#664d03;background-color:#fff3cd;border:3px solid #ffecb5}.callout-custom{color:inherit}.site-description{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:1rem}.tags{display:flex;flex-wrap:wrap;gap:.5rem;list-style:none;padding:0}.tags li::before{content:"🏷 ";margin-inline-start:2rem}.tags a{border-bottom:3px solid var(--color-primary,#dc143c);border-block-end:3px solid var(--color-primary,#dc143c);padding:.25rem .5rem;border-radius:3px;transition:all .2s ease}.tags a:hover,.tags a:focus{color:#fff;background-color:var(--color-primary-hover,#b91c3c)}svg{max-height:1rem;max-width:1rem;max-block-size:1rem;max-inline-size:1rem}.feather{width:1.5rem;height:1.5rem;inline-size:1.5rem;block-size:1.5rem;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;fill:none;display:inline-block;vertical-align:middle}.draft-label{color:var(--color-border,#663399);text-decoration:none;padding:.125rem .25rem;border-radius:4px;margin-left:.375rem;margin-inline-start:.375rem;background-color:var(--color-background-draft,#f9f2f4);font-size:.8em;font-weight:700}.highlight{position:relative;-webkit-overflow-scrolling:touch;border-radius:var(--border-radius,5px);overflow:hidden}.highlight pre code[class*=language-]{-webkit-overflow-scrolling:touch}.highlight pre code[class*=language-]::before{background:#000;border-radius:0 0 .25rem .25rem;color:#fff;font-size:.75rem;font-weight:700;letter-spacing:.025rem;padding:.1rem .5rem;position:absolute;right:1rem;top:0;inset-inline-end:1rem;inset-block-start:0;text-align:right;text-transform:uppercase}.highlight pre code[class*=language-js]::before,.highlight pre code[class=language-javascript]::before{content:"js";background:#f7df1e;color:#000}.highlight pre code[class*=language-ts]::before{content:"ts";background:#3178c6;color:#fff}.highlight pre code[class*=language-py]::before,.highlight pre code[class*=language-python]::before{content:"python";background:#3776ab;color:#fff}.highlight pre code[class*=language-go]::before{content:"go";background:#00add8;color:#fff}.highlight pre code[class*=language-css]::before{content:"css";background:#1572b6;color:#fff}.highlight pre code[class*=language-html]::before{content:"html";background:#e34f26;color:#fff}.highlight pre code[class*=language-json]::before{content:"json";background:#000;color:#fff}.highlight pre code[class*=language-yml]::before,.highlight pre code[class*=language-yaml]::before{content:"yaml";background:#cc1018;color:#fff}.highlight pre code[class*=language-shell]::before,.highlight pre code[class*=language-bash]::before,.highlight pre code[class*=language-sh]::before{content:"shell";background:#4eaa25;color:#fff}.highlight pre code[class*=language-md]::before,.highlight pre code[class*=language-markdown]::before{content:"markdown";background:#083fa1;color:#fff}table{border-spacing:0;border-collapse:collapse;width:100%;margin-top:1rem;margin-bottom:1rem;inline-size:100%;margin-block:1rem;border-radius:var(--border-radius,5px);overflow:hidden;box-shadow:0 1px 3px rgba(0,0,0,.1)}table th{padding:.75rem;border:1px solid var(--color-border,#663399);font-weight:700;background-color:var(--color-background-pre,#ececec);text-align:start}table td{padding:.75rem;border:1px solid var(--color-border,#663399)}table tr:nth-child(even){background-color:var(--color-background-code,#f1f1f1)}nav{display:flex;align-items:center;gap:1rem;flex-wrap:wrap}.nav-toggle{appearance:none;-webkit-appearance:none;-moz-appearance:none;border:none;background:0 0;margin:0;font:inherit;cursor:pointer;padding:.5rem;border-radius:4px;transition:all .2s ease;display:inline-flex;align-items:center;justify-content:center}.nav-toggle{color:var(--color-text,#232333)}.nav-toggle:hover,.nav-toggle:focus{background-color:var(--color-primary,#dc143c);color:#fff;outline:2px solid var(--color-primary,#dc143c);outline-offset:2px}.nav-toggle:focus{outline-style:solid}.search-page{display:grid;gap:1.5rem}.search-intro{margin-block-start:-.5rem}.search-panel{border:1px solid var(--color-border,#663399);border-radius:var(--border-radius,5px);background-color:var(--color-background-pre,#ececec);padding:1rem}.search-label{display:block;font-weight:700;margin-block-end:.5rem}.search-input{inline-size:100%;border:1px solid var(--color-border,#663399);border-radius:4px;background-color:var(--color-background,#ffffff);color:var(--color-text,#232333);font:inherit;padding:.75rem .9rem}.search-input:focus{outline:2px solid var(--color-primary,#dc143c);outline-offset:2px}.search-hint{color:var(--color-text-muted,#737373);font-size:.95em;margin-block:.75rem 0}kbd{border:1px solid var(--color-border,#663399);border-radius:4px;background-color:var(--color-background,#ffffff);font-size:.9em;padding:.1rem .35rem}.search-status{margin-block:1rem 0}.search-status-empty,.search-status-error{color:var(--color-text-muted,#737373)}.search-status-error{color:var(--color-primary,#dc143c)}.search-results{list-style:none;padding:0;margin-block:1rem 0}.search-results li{text-indent:0}.search-results>li::before,.search-tag-list>li::before{content:none}.search-result+.search-result{margin-block-start:1rem}.search-result-card{border:1px solid var(--color-border,#663399);border-radius:var(--border-radius,5px);background-color:var(--color-background,#ffffff);padding:1rem}.search-result-title{margin-block:0 .35rem}.search-result-meta{color:var(--color-text-muted,#737373);font-size:.95em;margin-block:0}.search-result-snippet{margin-block:.75rem 0}.search-tag-list{display:flex;flex-wrap:wrap;gap:.5rem;list-style:none;padding:0;margin-block:.75rem 0}.search-tag-list li{text-indent:0}.search-tag{display:inline-flex;align-items:center;border:1px solid var(--color-primary,#dc143c);border-radius:999px;padding:.15rem .55rem;font-size:.9em}.nav-toggle:active{transform:scale(.95)}@media(max-width:37.4em){.content{padding-left:.5rem;padding-right:.5rem;padding-inline:.5rem}header{flex-direction:column;align-items:flex-start;gap:.5rem}.site-description{flex-direction:column;align-items:flex-start}}@media(hover:none) and (pointer:coarse){html{background-color:var(--color-background,#ffffff)}body{margin:0;padding:8px}body::before{background-image:linear-gradient(90deg,var(--color-lab-grid) 1px,transparent 1px),linear-gradient(var(--color-lab-grid) 1px,transparent 1px);background-size:16px 16px,16px 16px}}@media(prefers-reduced-motion:reduce),(prefers-reduced-data:reduce){body::before{background-image:linear-gradient(90deg,var(--color-lab-grid) 1px,transparent 1px),linear-gradient(var(--color-lab-grid) 1px,transparent 1px)}}