@import"https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=Manrope:wght@400;500;600;700&display=swap";pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*!
  Theme: GitHub
  Description: Light theme as seen on github.com
  Author: github.com
  Maintainer: @Hirse
  Updated: 2021-05-15

  Outdated base version: https://github.com/primer/github-syntax-light
  Current colors taken from GitHub's CSS
*/.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#005cc5}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-comment,.hljs-code,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0}:root{--font-body:Manrope,"PingFang SC","Microsoft YaHei",system-ui,sans-serif;--font-mono:"DM Mono",monospace;--text-section:1.25rem;--text-title:1.125rem;--text-body:1rem;--text-label:.8125rem;--text-meta:.75rem;--space-section:72px;font-family:var(--font-body);font-size:16px;line-height:1.75;color:#20231f;background:#f3f1e9;font-synthesis:none;text-rendering:optimizeLegibility;--ink:#20231f;--muted:#6f736c;--line:#cccec6;--paper:#f3f1e9;--acid:#d8ff45}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:88px}body{margin:0;min-width:320px;min-height:100vh}a{color:inherit;text-decoration:none}button{font:inherit}.button{min-height:48px;display:inline-flex;align-items:center;justify-content:center;padding:0 32px;border:1px solid var(--ink);border-radius:4px;font-size:var(--text-label);font-weight:600;letter-spacing:.03em;cursor:pointer;transition:background-color .2s,color .2s,transform .2s}.button:hover{transform:translateY(-2px)}.button:focus-visible{outline:2px solid var(--ink);outline-offset:3px}.primary{background:var(--ink);color:#fff}.primary:hover{background:var(--acid);color:var(--ink)}.section{padding:var(--space-section) 0;border-bottom:1px solid var(--line)}h2{margin:0;font-size:var(--text-section);line-height:1.4;letter-spacing:0;font-weight:600}@media (max-width:850px){:root{--space-section:48px}}@media (max-width:520px){.button{width:100%}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important}}main{max-width:1440px;margin:auto;padding:0 5vw}.nav{position:sticky;top:0;z-index:100;height:88px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);background:#f3f1e9f0;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}.brand{display:flex;align-items:center;gap:11px;font:500 var(--text-label) var(--font-mono)}.brand-mark{width:34px;height:34px;object-fit:contain}.nav-right,.nav-links,.language-switch{display:flex;align-items:center}.nav-right{gap:34px}.nav-links{gap:34px;font-size:var(--text-label);font-weight:600}.nav-links a{transition:opacity .2s}.nav-links a:hover{opacity:.55}.nav-links a[aria-current=page]{text-decoration:underline;text-underline-offset:6px}.language-switch{gap:6px;padding:6px 9px;border:1px solid var(--line);font:500 var(--text-meta) var(--font-mono)}.language-switch button{padding:0;border:0;background:none;color:var(--muted);cursor:pointer}.language-switch button.active{color:var(--ink);font-weight:700}.language-switch button:focus-visible{outline:2px solid var(--ink);outline-offset:3px}.language-switch span{color:var(--line)}.eyebrow,.footer-label{display:block;margin-bottom:8px;color:var(--muted);font:500 var(--text-meta) var(--font-mono);letter-spacing:.08em}footer{min-height:104px;display:flex;align-items:center;justify-content:flex-end}footer p{max-width:100%;text-align:right;font:400 var(--text-body)/1.9 var(--font-mono)}footer p span{color:var(--muted)}footer a{text-decoration:underline;text-underline-offset:3px}footer a:hover{color:var(--ink)}@media (max-width:850px){main{padding:0 22px}footer{align-items:flex-start;justify-content:center}footer p{text-align:left}}@media (max-width:520px){.nav-right,.nav-links{gap:14px}.nav-contact{display:none}}@media (max-width:360px){.brand span{display:none}}.hero{display:grid;grid-template-columns:minmax(0,1fr) 144px;gap:36px;align-items:center;padding:28px 0;border-bottom:1px solid var(--line)}.hero-cat{display:block;width:144px;height:144px;object-fit:contain}.lead{max-width:760px;margin:0;color:#53574f;font-size:clamp(1rem,.9rem + .3vw,1.125rem);line-height:1.8}@media (max-width:850px){.hero{grid-template-columns:minmax(0,1fr) 112px;gap:24px;padding:24px 0}.hero-cat{width:112px;height:112px}}@media (max-width:520px){.hero{grid-template-columns:minmax(0,1fr) 80px;gap:16px;padding:24px 0}.hero-cat{width:80px;height:80px}}.blog.section{padding:32px 0}.blog-row{display:block;padding:28px 0;border-bottom:1px solid var(--line);transition:background-color .15s}.blog-list article:last-child .blog-row{border-bottom:0}.blog-row:hover{background:#ffffff4d}.blog-row:focus-visible{outline:2px solid #526b91;outline-offset:6px}.blog-row time,.blog-article time{color:var(--muted);font:400 var(--text-meta) var(--font-mono);text-transform:uppercase}.blog-row h2{margin:0 0 16px;font-size:clamp(1.25rem,1.1rem + .4vw,1.375rem);line-height:1.5;font-weight:700;overflow-wrap:anywhere}.blog-row p{margin:0;color:var(--muted);overflow-wrap:anywhere}.blog-row time{display:block;margin-top:20px}.blog-empty{color:var(--muted)}.blog-page{min-height:100vh}.blog-index-content{max-width:900px;margin:0 auto}.blog-index-heading{padding:32px 0 0}.blog-index-heading h1{margin:0 0 8px;font-size:1.5rem;font-weight:600;line-height:1.4;letter-spacing:0}.blog-index-heading p{margin:0;color:var(--muted)}.blog-index .blog.section{padding-top:16px;min-height:40vh}.blog-article{max-width:900px;margin:0 auto;padding:24px 0 120px}.blog-back{display:flex;align-items:center;gap:6px;width:fit-content;min-height:44px;margin-bottom:16px;font:500 var(--text-label) var(--font-mono);color:var(--muted)}.blog-back:hover{color:var(--ink)}.blog-back:focus-visible,.blog-to-top:focus-visible{outline:2px solid var(--ink);outline-offset:4px}.blog-to-top{position:fixed;right:max(24px,env(safe-area-inset-right));bottom:calc(24px + env(safe-area-inset-bottom));z-index:90;display:grid;place-items:center;width:46px;height:46px;padding:0;border:1px solid var(--line);border-radius:50%;background:var(--paper);color:var(--ink);box-shadow:0 3px 14px #20231f14;cursor:pointer;transition:background-color .15s,transform .15s}.blog-to-top:hover{background:var(--acid);transform:translateY(-2px)}.blog-to-top:active{transform:translateY(0)}.blog-article>time{display:block;margin:0 0 28px;line-height:1.6}.blog-article h1{margin:0 0 14px;font-size:clamp(2rem,4vw,3rem);line-height:1.25;letter-spacing:-.035em;text-wrap:balance;overflow-wrap:anywhere}.blog-summary{margin:0 0 52px;padding-bottom:36px;border-bottom:1px solid var(--line);color:var(--muted);font-size:1.15rem}.blog-body{font-size:1.05rem;line-height:1.9}.blog-body h2,.blog-body h3,.blog-body h4{margin:1.8em 0 .65em;line-height:1.35}.blog-body p,.blog-body ul,.blog-body ol,.blog-body blockquote{margin:0 0 1.6em}.blog-body blockquote{padding:4px 0 4px 18px;border-left:3px solid #e53625;color:var(--muted)}.blog-body pre{border:1px solid #e0e2e5;white-space:pre;overflow:auto;margin:1.8em 0;padding:18px;border-radius:7px;background:#f1f2f3;color:#343a40;line-height:1.65}.blog-body code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.9em}.blog-body :not(pre)>code{padding:2px 5px;border-radius:4px;background:#e8e6df;color:#b42318}.blog-body a{text-decoration:underline;text-decoration-color:#aaa;text-underline-offset:3px}.blog-body table{display:block;max-width:100%;overflow:auto;border-collapse:collapse}.blog-body th,.blog-body td{border:1px solid var(--line,#ccc);padding:8px 12px}.blog-body img{display:block;max-width:100%;height:auto}.blog-body figure{margin:24px 0}.blog-body figcaption{font-size:14px;color:var(--muted)}.blog-body pre code.hljs{padding:0;background:transparent;color:inherit;font-size:14px;line-height:inherit}@media (max-width:850px){.blog-row{padding:24px 0}.blog-article{padding:16px 0 96px}.blog-to-top{right:max(16px,env(safe-area-inset-right));bottom:calc(16px + env(safe-area-inset-bottom))}}.content-license{margin-top:56px;padding-top:20px;border-top:1px solid var(--line);color:var(--muted);font:400 var(--text-meta)/1.8 var(--font-mono)}.content-license p{margin:0 0 4px;color:inherit}.content-license p:last-child{margin-bottom:0}.content-license a{text-decoration:underline;text-underline-offset:3px;overflow-wrap:anywhere}.content-license a:hover{color:var(--ink)}.contact{display:grid;grid-template-columns:minmax(240px,.7fr) minmax(0,1.3fr);gap:5vw}.contact-intro p{max-width:430px;color:var(--muted);font-size:var(--text-body);line-height:1.75;margin:16px 0 0}.contact-form fieldset{border:0;padding:0;margin:0;min-width:0}.contact-field{display:block;margin-bottom:22px;font-size:var(--text-label)}.contact-field>span{display:block;margin-bottom:9px;font-weight:600}.contact-field>input,.contact-field>textarea{width:100%;font:inherit;font-size:var(--text-body);color:var(--ink);background:#ffffff61;border:1px solid var(--line);border-radius:4px;padding:13px}.contact-field>textarea{resize:vertical;min-height:150px}.contact-field>input:focus,.contact-field>textarea:focus{outline:2px solid var(--ink);outline-offset:2px}.contact-pair{display:grid;grid-template-columns:1fr 1fr;gap:18px}.contact-form button{cursor:pointer}.contact-form fieldset:disabled{opacity:.6}.contact-status{min-height:24px;font-size:var(--text-body);color:#9d3228}.contact-status.success{color:#315536}.contact-hint{margin:0 0 22px;color:var(--muted);font-size:var(--text-meta)}.contact-verification{margin:0 0 24px}.contact-form button:disabled{border-color:#d4d5cd;background:#d4d5cd;color:#83867e;transform:none;cursor:not-allowed}.contact-verification altcha-widget{--altcha-max-width:100%;--altcha-border-width:0;--altcha-padding:0}.contact-verification .altcha-main{background-color:transparent}@media (max-width:850px){.contact{grid-template-columns:1fr;gap:36px}}@media (max-width:520px){.contact-pair{grid-template-columns:1fr;gap:0}}
