@font-face{font-family:fontSans;src:url(../media/DejaVuSans-s.p.e39888bc.woff2)format("woff2");font-display:swap}@font-face{font-family:fontSans Fallback;src:local(Arial);ascent-override:81.05%;descent-override:20.59%;line-gap-override:0.0%;size-adjust:114.53%}.fontsans_5decb760-module__vzLD0q__className{font-family:fontSans,fontSans Fallback}
@font-face{font-family:fontMono;src:url(../media/CamingoCode_Regular_webfont.p.c466fac7.woff)format("woff");font-display:swap}.fontmono_6893dd3f-module__nsf5JW__className{font-family:fontMono}.fontmono_6893dd3f-module__nsf5JW__variable{--font-mono:"fontMono"}
:root{--color-fg:#121314;--color-bg:#fff;--color-bg-transparent:#ffffffe6;--color-bg-secondary:#f2f2f2;--color-bg-tertiary:#f6f8fa;--theme:#3bf;--theme-bg-secondary:#33bbff80;--theme-bg-tertiary:#e0f5ff}:root .scheme--dark{display:none}@media (prefers-color-scheme:dark){:root{color-scheme:dark;--color-fg:#c9d1d9;--color-bg:#121314;--color-bg-transparent:#121314e6;--color-bg-secondary:#232425;--color-bg-tertiary:#333537;--theme:#08c;--theme-bg-secondary:#0088cc80;--theme-bg-tertiary:#0f2530}:root .shiki,:root .shiki span{color:var(--shiki-dark)!important}}.button{background-color:var(--color-bg);border:1px solid var(--theme-bg-secondary);height:2rem;color:var(--color-fg);text-align:center;vertical-align:top;user-select:none;-webkit-font-smoothing:antialiased;text-overflow:ellipsis;appearance:button;cursor:pointer;border-radius:0;outline:#0000;min-width:5rem;padding:0 1rem;font-size:smaller;font-weight:400;text-decoration:none;position:relative}.button:not(:disabled):hover:after,.button:not(:disabled):active:after{content:"";position:absolute;inset:0}.button:not(:disabled):hover{background-color:var(--color-bg-secondary)}.button:not(:disabled):hover:after{background:var(--color-bg-secondary);opacity:.1}.button:not(:disabled):active{background-color:var(--color-bg-tertiary)}.button:not(:disabled):active:after{background:var(--color-bg-tertiary);opacity:.05}.button--primary{background-color:var(--theme);border-color:var(--theme);color:var(--color-fg)}.button--primary:not(:disabled):hover,.button--primary:not(:disabled):active{background-color:var(--theme-bg-secondary);border-color:var(--theme-bg-secondary);color:var(--color-fg)}.button:disabled{opacity:.9;cursor:not-allowed}.button--borderless{border-color:#0000}.button span[role=button]{white-space:nowrap;margin:0 .25rem;font-weight:600;line-height:1;display:block}.flex{flex-wrap:nowrap;justify-content:center;align-items:center;height:100%;display:flex}.flex--full{inset:0;position:absolute!important}.flex--verticle{flex-direction:column}.flex--grow{flex:1}.flex--shrink{flex:0}.flex--wrap{flex-wrap:wrap}.flex .flex-container{font-size:100%;font:inherit;border:0;margin:0;padding:0}@supports (text-autospace:normal){:root{text-autospace:normal}:root pre,:root code{text-autospace:initial}}html{scroll-behavior:smooth;overscroll-behavior-y:none;background-color:var(--color-bg);color:var(--color-fg);font-family:DejaVu Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif}body{-webkit-font-smoothing:antialiased;color:var(--color-fg);flex-direction:column;min-height:100vh;margin:0;font-size:calc(10px + .33vw);display:flex;overflow-x:hidden}body>article{width:100%;text-shadow:0 0 1ch var(--color-bg);flex:1}h1{margin-bottom:0;font-size:4.5em;font-weight:500}h1 svg{fill:var(--theme)}h2{margin-bottom:0;font-size:2em;font-weight:500}p{font-weight:400;line-height:1.4}p a{font-weight:400}a{text-decoration:none}button{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Noto Sans,Droid Sans,Helvetica Neue,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}span q+span:before{content:" - "}span q+span+cite:before{content:" "}ul{padding-inline-start:0;list-style-type:none}sub{font-weight:300}img{max-width:100%;height:auto;max-height:100%;min-width:unset!important;min-height:unset!important}img[src$=\.svg]{aspect-ratio:unset!important}img[role=favicon]{vertical-align:baseline;width:1cap;height:1cap;margin:0 .2ch 0 0}[role=button]{cursor:pointer;word-break:keep-all;white-space:nowrap}[role=button] svg{fill:currentColor;height:1em}svg[role=note]{vertical-align:sub;height:1em;margin:0 .25ch}svg[role=note]:first-child{margin-left:0}article{overflow-x:visible}article a:not([role=button]){color:var(--color-fg);box-shadow:inset 0 -.4em 0 var(--theme-bg-secondary);transition:box-shadow .2s ease-in-out}article a:not([role=button]):hover{box-shadow:inset 0 -1.1em 0 var(--theme-bg-secondary)}article a:not([role=button]){overflow-wrap:break-word}figure{margin-block-start:0;margin-inline:0}time{display:inline-block}time,small{opacity:.5;font-size:smaller}.sr-only{clip:rect(0,0,0,0);border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.flex-center{justify-content:center;align-items:center;display:flex}header+article[lang=zh]>section:first-of-type~p,header+article[lang=zh]>section:first-of-type~section>p,header+article[lang=zh]>section:first-of-type~section section>p,header+article[lang=zh]>div>section:first-of-type~p,header+article[lang=zh]>div>section:first-of-type~section>p,header+article[lang=zh]>div>section:first-of-type~section section>p{line-height:1.5}header+article[lang=zh]>section:first-of-type~section blockquote p,header+article[lang=zh]>div>section:first-of-type~section blockquote p{line-height:1.4}body>header{border-bottom:1px solid var(--color-bg-secondary);z-index:8888;opacity:0;justify-content:flex-start;height:60px;display:flex;position:fixed;top:0;left:0;right:0}body>header>div{justify-content:flex-start!important}body>header nav{white-space:nowrap;text-overflow:ellipsis;will-change:opacity;min-width:0;margin:auto 1ch;font-size:2rem;font-weight:700;transition:opacity .1s;overflow:hidden}body>header img[role=button]{border-radius:100%;width:2.5rem;height:2.5rem}body>footer{border-top:1px solid var(--color-bg-secondary);width:100%;height:200px;z-index:calc(8888 - 1);font-size:1.2em}body>footer,body>footer a{color:var(--color-fg);opacity:.8}body>footer a{line-height:1;display:flex}body>footer a:hover{opacity:1}body>footer nav{margin-right:50px}body>footer nav ul{flex-direction:column;align-items:flex-start;display:flex}body>footer nav li{justify-content:flex-start;align-items:center;margin:8px 0;display:flex}body>footer nav li span{opacity:.8;line-height:1}body>footer nav li a:not([role=button]){position:relative}body>footer nav li a:not([role=button]):after{content:"";background-color:var(--color-fg);transform-origin:0 100%;height:2px;transition:transform .5s;position:absolute;bottom:0;left:0;right:0;transform:scaleX(0)}body>footer nav li a:not([role=button]):hover:after{transform:scaleX(1)}body>footer nav li a[role=button]{margin-left:1ch}body>footer img[role=button]{border-radius:100%;width:3.5rem;height:3.5rem;margin:10px 0}body>footer aside{flex-direction:column;align-items:flex-end;font-size:12px;display:flex}body>footer aside span{margin:0 .25ch}body>footer a[href*=vercel] svg{margin-right:1px}body>header,body>footer{background-color:var(--color-bg-transparent);box-sizing:border-box;padding:10px 10vw}body>header>div,body>footer>div{padding:0 32px}body>header,body>footer{padding:10px 0}body>article,body>header>div,body>footer>div{max-width:700px;margin:auto}article{box-sizing:border-box}header+article{padding:calc(60px + 2em) 0 8em}header+article div[role=contentinfo]>section:first-of-type{flex:1}header+article section[role=banner] figure img{width:100%}article>section[role=figure]{cursor:pointer;border-radius:1em;margin:1em -1em;padding:1em;transition:all .2s;position:relative}article>section[role=figure] figure,article>section[role=figure] figure :last-child{margin-bottom:0}article>section[role=figure] figure img{object-fit:cover}article>section[role=figure] figure figcaption>*{pointer-events:none;z-index:1;position:relative}article>section[role=figure] figure figcaption>* a{pointer-events:all}article>section[role=figure] figure figcaption>a[role=button]{pointer-events:all;position:absolute;inset:0}article>section[role=figure] h2{margin-top:.2em}div[role=contentinfo]{align-items:center;display:flex}div[role=contentinfo] [role=button]{margin:0 0 0 1ch}div[role=contentinfo]>section{align-items:center;display:flex}div[role=contentinfo]>section[role=note],div[role=contentinfo]>section h2{display:none}div[role=contentinfo]>section [role=button]{background-color:var(--theme-bg-tertiary);color:inherit;border-radius:.25em;align-items:center;padding:0 .5ch 0 .25ch;display:inline-flex}div[role=contentinfo]>section [role=button]:hover{background-color:var(--theme-bg-secondary)}header+article,header+article>div{font-size:calc(14px + .33vw);line-height:1.5;position:relative}header+article>:first-child,header+article>div>:first-child{margin-top:0}header+article>h1+p,header+article>section,header+article>div>h1+p,header+article>div>section{margin-bottom:2.5em}header+article h1,header+article>div h1{margin-bottom:.67em;font-size:2em}header+article h2,header+article>div h2{margin-bottom:.83em;font-size:1.5em}header+article h1,header+article h2,header+article h3,header+article h4,header+article h5,header+article h6,header+article>div h1,header+article>div h2,header+article>div h3,header+article>div h4,header+article>div h5,header+article>div h6{word-wrap:break-word;hyphens:auto;margin-top:0;font-weight:600}header+article h1 a[role=button],header+article h2 a[role=button],header+article h3 a[role=button],header+article h4 a[role=button],header+article h5 a[role=button],header+article h6 a[role=button],header+article>div h1 a[role=button],header+article>div h2 a[role=button],header+article>div h3 a[role=button],header+article>div h4 a[role=button],header+article>div h5 a[role=button],header+article>div h6 a[role=button]{float:left;opacity:0;will-change:opacity;margin-left:-1.25rem;padding-right:.25rem;transition:opacity .2s}header+article h1 a[role=button] svg,header+article h2 a[role=button] svg,header+article h3 a[role=button] svg,header+article h4 a[role=button] svg,header+article h5 a[role=button] svg,header+article h6 a[role=button] svg,header+article>div h1 a[role=button] svg,header+article>div h2 a[role=button] svg,header+article>div h3 a[role=button] svg,header+article>div h4 a[role=button] svg,header+article>div h5 a[role=button] svg,header+article>div h6 a[role=button] svg{vertical-align:middle}header+article h1:hover a[role=button],header+article h2:hover a[role=button],header+article h3:hover a[role=button],header+article h4:hover a[role=button],header+article h5:hover a[role=button],header+article h6:hover a[role=button],header+article>div h1:hover a[role=button],header+article>div h2:hover a[role=button],header+article>div h3:hover a[role=button],header+article>div h4:hover a[role=button],header+article>div h5:hover a[role=button],header+article>div h6:hover a[role=button]{opacity:1}header+article [id],header+article a[name],header+article>div [id],header+article>div a[name]{scroll-margin-top:90px}header+article p,header+article pre,header+article blockquote,header+article figure,header+article ul,header+article ol,header+article table,header+article>div p,header+article>div pre,header+article>div blockquote,header+article>div figure,header+article>div ul,header+article>div ol,header+article>div table{margin:0 0 1em}header+article p:empty,header+article>div p:empty{padding-bottom:1em}header+article p,header+article>div p{font-size:1em}header+article p a svg,header+article>div p a svg{vertical-align:sub;height:1.2em}header+article p del,header+article>div p del{opacity:.5}header+article pre,header+article>div pre{border-radius:.5em;padding:1em;overflow:auto}header+article p code,header+article>div p code{border-radius:.25em;padding:.075em .4em}header+article pre,header+article p code,header+article>div pre,header+article>div p code{background-color:var(--color-bg-tertiary);font-size:smaller}header+article pre,header+article code,header+article>div pre,header+article>div code{font-family:var(--font-mono),monospace}header+article ul,header+article ol,header+article>div ul,header+article>div ol{margin-top:0;padding-left:1.5em}header+article ul,header+article>div ul{list-style-type:disc}header+article ul ul,header+article>div ul ul{margin-bottom:0;list-style-type:circle}header+article ul ul ul,header+article>div ul ul ul{list-style-type:square}header+article ul[role=listbox],header+article>div ul[role=listbox]{padding-left:0;list-style-type:none}header+article input[type=checkbox],header+article>div input[type=checkbox]{pointer-events:none;margin:0 .5ch 0 0}header+article li p,header+article>div li p{margin-block-end:0}header+article figure[role=img],header+article>div figure[role=img]{text-align:center}header+article figure[role=img] figcaption,header+article>div figure[role=img] figcaption{opacity:.5;font-size:smaller}header+article figure[role=img] figcaption>span:not(:last-of-type):after,header+article>div figure[role=img] figcaption>span:not(:last-of-type):after{content:"."}header+article figure[role=img] figcaption>span+span:before,header+article>div figure[role=img] figcaption>span+span:before{content:" "}header+article figure[role=pre] figcaption,header+article>div figure[role=pre] figcaption{display:none}header+article blockquote,header+article>div blockquote{background-color:var(--color-bg-tertiary);border-radius:.5em;padding:1em 1em 1em calc(1em + 1ch);font-size:smaller}header+article blockquote p,header+article>div blockquote p{margin-bottom:.5em}header+article blockquote p:first-of-type,header+article>div blockquote p:first-of-type{position:relative}header+article blockquote p:first-of-type:before,header+article>div blockquote p:first-of-type:before{content:"“";position:absolute;top:0;right:100%}header+article blockquote p:last-of-type,header+article>div blockquote p:last-of-type{margin-bottom:0}header+article blockquote p:last-of-type:after,header+article>div blockquote p:last-of-type:after{content:"”"}header+article blockquote p:first-of-type:before,header+article blockquote p:last-of-type:after,header+article>div blockquote p:first-of-type:before,header+article>div blockquote p:last-of-type:after{font-size:1.2em;font-weight:700;line-height:1}header+article blockquote footer,header+article>div blockquote footer{text-align:right;margin-top:.4em}header+article blockquote footer:before,header+article>div blockquote footer:before{content:" - "}header+article blockquote footer cite:before,header+article>div blockquote footer cite:before{content:", "}header+article blockquote h1~p:first-of-type:before,header+article blockquote h1~p:last-of-type:after,header+article blockquote blockquote~p:first-of-type:before,header+article blockquote blockquote~p:last-of-type:after,header+article>div blockquote h1~p:first-of-type:before,header+article>div blockquote h1~p:last-of-type:after,header+article>div blockquote blockquote~p:first-of-type:before,header+article>div blockquote blockquote~p:last-of-type:after{content:""}header+article blockquote h2,header+article>div blockquote h2{margin-top:1em;margin-bottom:.5em}header+article table,header+article>div table{white-space:nowrap;border-collapse:collapse;border-spacing:0;table-layout:fixed;border:none;width:100%;max-width:100%;display:table}header+article table thead tr,header+article>div table thead tr{z-index:1;background-color:var(--theme-bg-tertiary);position:sticky;top:60px}header+article table tbody tr:nth-child(2n),header+article>div table tbody tr:nth-child(2n){background-color:var(--color-bg-tertiary)}header+article table td,header+article>div table td{padding:.2em .4em;overflow:auto}header+article table th,header+article>div table th{padding:.25em .4em}header+article hr,header+article>div hr{border:none;border-top:1px solid var(--color-fg);border-bottom:1px solid var(--color-fg);color:var(--color-fg);text-align:center;height:1px;margin:2.5em 0;overflow:visible}header+article hr:after,header+article>div hr:after{background:var(--color-bg);content:"§";padding:0 .5ch;display:inline-block;position:relative;top:50%;transform:translateY(-50%)}header+article abbr,header+article>div abbr{letter-spacing:.01em;text-decoration:none}header+article iframe,header+article>div iframe{margin:0 auto 1em;display:block}header+article #tocanchor,header+article #tocmark,header+article #toc,header+article #tocanchor+section,header+article>div #tocanchor,header+article>div #tocmark,header+article>div #toc,header+article>div #tocanchor+section{display:none}header+article .footnotes,header+article>div .footnotes{opacity:.5;margin-top:2.5em;font-size:smaller}header+article .footnotes .data-footnote-backref,header+article>div .footnotes .data-footnote-backref{color:var(--theme);box-shadow:none}header+article sub,header+article sup,header+article>div sub,header+article>div sup{font-size:small;line-height:0}header+article a[data-footnote-ref],header+article>div a[data-footnote-ref]{color:var(--theme)}header+article a[data-footnote-ref],header+article a[data-footnote-ref]:hover,header+article>div a[data-footnote-ref],header+article>div a[data-footnote-ref]:hover{box-shadow:none}header+article a[data-footnote-ref]:hover,header+article>div a[data-footnote-ref]:hover{text-decoration:underline}header+article a[data-footnote-ref]:before,header+article>div a[data-footnote-ref]:before{content:"["}header+article a[data-footnote-ref]:after,header+article>div a[data-footnote-ref]:after{content:"]"}header+article .post-collection,header+article>div .post-collection{background:var(--color-bg-tertiary);border-radius:.5em;margin-bottom:2.5em;padding:1em}header+article .post-collection ul,header+article>div .post-collection ul{margin-bottom:0;padding-left:0;list-style:none}header+article .post-collection ul li:not(.current),header+article>div .post-collection ul li:not(.current){opacity:.5;transition:opacity .2s}header+article .post-collection ul li:not(.current):hover,header+article>div .post-collection ul li:not(.current):hover{opacity:1}.medium-zoom--opened header{opacity:0!important}.medium-zoom--opened .medium-zoom-image--opened,.medium-zoom--opened .medium-zoom-overlay{z-index:9999;max-width:unset;max-height:unset}.shiki{background-color:var(--color-bg-tertiary)!important}@media (min-width:768px){article>section[role=figure] img{display:none}article>section[role=figure]:hover{background-color:var(--color-bg-tertiary)}}@media (max-width:767px){h1{font-size:3.5em}p,a{font-weight:300}body>article{overflow-x:hidden}body>header{display:none}body>header>div,body>footer>div{padding:0 16px}article{padding:1em 1em 4em}article>section[role=figure]{margin:0;padding:.5em 0}article>section[role=figure] figure{background-color:var(--color-bg-tertiary);border-radius:1em;position:relative;overflow:hidden}article>section[role=figure] figure img{filter:blur(1em)brightness(95%)opacity(.8);border-radius:1em;width:100%;height:55vw}article>section[role=figure] figure figcaption{padding:1em}article>section[role=figure] figure figcaption a{box-shadow:none}header+article{padding:2em 1em 4em}header+article table thead tr{top:0}header+article h1,header+article h2,header+article h3,header+article h4,header+article h5,header+article h6{word-break:break-all}}@media (max-width:1419px){header+article div[role=contentinfo]{flex-direction:column;align-items:flex-start}header+article div[role=contentinfo]>section{flex-wrap:wrap;margin-bottom:0!important}header+article div[role=contentinfo]>section:first-of-type{padding-bottom:1ch}header+article div[role=contentinfo]>section:first-of-type time:first-of-type:before{content:"Published at "}header+article div[role=contentinfo]>section [role=button]{margin:0 1ch 1ch 0}}@media (min-width:1420px){body:before{content:"";z-index:-1;background:linear-gradient(180deg,#fff0 0,var(--color-bg)100%),fixed 0 0/20px 20px radial-gradient(var(--theme-bg-secondary)1px,transparent 0),fixed 10px 10px/20px 20px radial-gradient(var(--theme-bg-tertiary)1px,transparent 0);position:fixed;inset:0}article>section[role=figure]:hover{background-color:var(--color-bg-tertiary)}header+article #tocanchor+section,header+article>div #tocanchor+section{float:left;width:calc(50vw - 50%);max-width:24em;height:0;margin-bottom:0;margin-left:100%;display:block;position:sticky;top:90px}header+article #tocanchor+section,header+article #tocanchor+section+section,header+article>div #tocanchor+section,header+article>div #tocanchor+section+section{transition:opacity .35s ease-in}header+article #tocanchor+section ul,header+article>div #tocanchor+section ul{white-space:nowrap;margin:0}header+article #tocanchor+section ul,header+article #tocanchor+section ul ul,header+article>div #tocanchor+section ul,header+article>div #tocanchor+section ul ul{padding:0 1.5rem;list-style-type:none}header+article #tocanchor+section ul a,header+article>div #tocanchor+section ul a{box-shadow:none;text-overflow:ellipsis;user-select:none;opacity:.5;min-width:0;transition:all .2s;display:block;overflow:hidden}header+article #tocanchor+section ul a:hover,header+article>div #tocanchor+section ul a:hover{color:var(--theme);opacity:1}header+article #tocanchor+section ul li.visible a,header+article>div #tocanchor+section ul li.visible a{opacity:.9}header+article #toc,header+article>div #toc{padding-left:.67em}header+article #tocmark,header+article>div #tocmark{pointer-events:none;display:block;position:absolute;overflow:visible}header+article #tocmark path,header+article>div #tocmark path{fill:#0000;stroke:var(--theme);stroke-width:3px;stroke-dasharray:0 0 0 1000;stroke-linecap:round;stroke-linejoin:round;transition:all .2s}header+article section[role=banner] figure,header+article>div section[role=banner] figure{margin-left:calc(-12em - 1ch)}header+article section[role=banner] figure figcaption,header+article>div section[role=banner] figure figcaption{display:none}header+article section[role=banner]~div[role=contentinfo],header+article>div section[role=banner]~div[role=contentinfo]{width:12em;top:calc(60px + 2em);right:100%;bottom:unset;flex-wrap:wrap;justify-content:flex-start;margin:1ch;display:flex;position:absolute}header+article section[role=banner]~div[role=contentinfo]>section,header+article>div section[role=banner]~div[role=contentinfo]>section{border-top:3px solid var(--color-fg);flex-direction:column;flex-basis:100%;align-items:flex-start;margin-bottom:2em;padding:1ch 0 2ch;transition:opacity .35s ease-in;display:flex}header+article section[role=banner]~div[role=contentinfo]>section h2,header+article>div section[role=banner]~div[role=contentinfo]>section h2{margin:.5ch 0;font-size:1em;display:block}header+article section[role=banner]~div[role=contentinfo]>section [role=button],header+article>div section[role=banner]~div[role=contentinfo]>section [role=button]{margin:.5ch 0 0}header+article section[role=banner]~div[role=contentinfo]>section:not(:first-child),header+article>div section[role=banner]~div[role=contentinfo]>section:not(:first-child){opacity:0}}
