*{margin:0;padding:0;box-sizing:border-box}:root{--color-bg-body:#ffffff;--color-bg-article:#ffffff;--color-text-body:#333;--color-header:#db5208;--color-link:#4878b8;--color-link-hover:#3868a5;--color-link-secondary:#708090;--color-link-nav:#3e6494;--color-link-nav-hover:#4e606e;--color-tagline:rgba(51, 51, 51, 0.7);--color-text-secondary:#708090;--color-text-figcaption:#888;--color-text-reldate:#888;--color-text-footer:#868686;--color-bg-blockquote:#f8f8f8;--color-border-blockquote:#f5f5f5;--color-text-blockquote:#333;--color-bg-code-block:#fffbf1;--color-border-code-block:#f7e1c7;--color-bg-code-inline:#f4f4f4;--color-pill-draft-bg:#fcd34d;--color-pill-draft-text:#594000;--color-pill-stealth-bg:#d8b4fe;--color-pill-stealth-text:#3b2d5e;--color-pill-archived-bg:#fca5a5;--color-pill-archived-text:#7f1d1d;--color-link-post:#3367d6;--color-archive-title:red;--color-callout-bg-from:rgba(219, 82, 8, 0.06);--color-callout-text:rgba(0, 0, 0, 0.6);--color-callout-strong:#db5208;--color-border-carbonads:#fafafa;--color-bg-carbonads:hsl(0, 0%, 98%);--color-shadow-carbonads:hsla(0, 0%, 0%, 0.1);--color-bg-carbonads-powered:hsla(203, 11%, 95%, 0.4);--color-stripe-carbonads:hsla(0, 0%, 0%, 0.025);--img-bg:transparent;--img-border-radius:0;--img-padding:0;--hr-filter:none;--color-permalink:#708090;--syn-hll:#ffffcc;--syn-comment:#999988;--syn-err:#a61717;--syn-err-bg:#e3d2d2;--syn-gd:#000000;--syn-gd-bg:#ffdddd;--syn-gr:#aa0000;--syn-gh:#999999;--syn-gi:#000000;--syn-gi-bg:#ddffdd;--syn-go:#888888;--syn-gp:#555555;--syn-gu:#aaaaaa;--syn-gt:#aa0000;--syn-kt:#445588;--syn-m:#009999;--syn-s:#bb8844;--syn-na:#008080;--syn-nb:#999999;--syn-nc:#445588;--syn-no:#008080;--syn-ni:#800080;--syn-ne:#990000;--syn-nf:#990000;--syn-nn:#555555;--syn-nt:#000080;--syn-nv:#008080;--syn-w:#bbbbbb;--syn-sr:#808000;--syn-bp:#999999;--syn-il:#009999}[data-theme=dark]{--color-bg-body:#1a1a2e;--color-bg-article:#1a1a2e;--color-text-body:#d4d4e0;--color-header:#f0923f;--color-link:#6a9fd8;--color-link-hover:#8ab8e8;--color-link-secondary:#8899a8;--color-link-nav:#7aa4cc;--color-link-nav-hover:#a0b8cc;--color-tagline:rgba(212, 212, 224, 0.7);--color-text-secondary:#8899a8;--color-text-figcaption:#8899a8;--color-text-reldate:#8899a8;--color-text-footer:#6a6a80;--color-bg-blockquote:#22223a;--color-border-blockquote:#2e2e4a;--color-text-blockquote:#d4d4e0;--color-bg-code-block:#0f0f23;--color-border-code-block:#2a2a44;--color-bg-code-inline:#2a2a44;--color-pill-draft-bg:#594000;--color-pill-draft-text:#fcd34d;--color-pill-stealth-bg:#3b2d5e;--color-pill-stealth-text:#d8b4fe;--color-pill-archived-bg:#7f1d1d;--color-pill-archived-text:#fca5a5;--color-link-post:#6a9fd8;--color-archive-title:#e06060;--color-callout-bg-from:rgba(232, 115, 31, 0.1);--color-callout-text:rgba(212, 212, 224, 0.6);--color-callout-strong:#e8731f;--color-border-carbonads:transparent;--color-bg-carbonads:transparent;--color-shadow-carbonads:transparent;--color-bg-carbonads-powered:rgba(30, 30, 54, 0.6);--color-stripe-carbonads:hsla(0, 0%, 100%, 0.03);--img-bg:#2e2e4a;--img-border-radius:6px;--img-padding:8px;--hr-filter:invert(1) brightness(0.6);--color-permalink:#8899a8;--syn-hll:#2a2a44;--syn-comment:#6a7080;--syn-err:#e06060;--syn-err-bg:#3a2020;--syn-gd:#e06060;--syn-gd-bg:#3a2020;--syn-gr:#e06060;--syn-gh:#8899a8;--syn-gi:#60c060;--syn-gi-bg:#203a20;--syn-go:#8899a8;--syn-gp:#8899a8;--syn-gu:#8899a8;--syn-gt:#e06060;--syn-kt:#7aa4cc;--syn-m:#40c4c4;--syn-s:#d4a46a;--syn-na:#40b4b4;--syn-nb:#8899a8;--syn-nc:#7aa4cc;--syn-no:#40b4b4;--syn-ni:#b47ab4;--syn-ne:#e06060;--syn-nf:#e09060;--syn-nn:#8899a8;--syn-nt:#6a9fd8;--syn-nv:#40b4b4;--syn-w:#4a4a60;--syn-sr:#c0c060;--syn-bp:#8899a8;--syn-il:#40c4c4}body{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-weight:300;font-size:16px;line-height:24px}@media screen and (min-width:768px){body{font-size:18px;line-height:26px}}strong{font-weight:600}h1{font-family:"Crimson Pro",ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-weight:600;font-size:30px;line-height:50px;margin-top:40px;color:var(--color-header)}h1:first-of-type{margin-top:20px}h2{font-family:"Crimson Pro",ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-weight:300;font-size:26px;line-height:34px;margin-top:10px;padding-top:30px;color:var(--color-header)}h3{font-family:"Crimson Pro",ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-weight:600;font-size:18px;line-height:26px;padding-top:10px;margin-bottom:-6px;color:var(--color-header)}@media screen and (min-width:768px){h3{font-size:20px;line-height:28px}}h4{font-family:"Crimson Pro",ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-weight:600;font-size:16px;line-height:24px;text-align:center;padding-top:10px;margin-bottom:-6px;color:var(--color-header)}@media screen and (min-width:768px){h4{font-size:18px;line-height:26px}}h1,h2,h3,h4,h5,h6{letter-spacing:-.02em}h1 .permalink,h2 .permalink,h3 .permalink,h4 .permalink,h5 .permalink,h6 .permalink{visibility:hidden;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:.75em;color:var(--color-permalink)!important;line-height:22px}h1:hover .permalink,h2:hover .permalink,h3:hover .permalink,h4:hover .permalink,h5:hover .permalink,h6:hover .permalink{visibility:visible}img{border:none;max-width:100%;background:var(--img-bg);border-radius:var(--img-border-radius);padding:var(--img-padding)}img.no-dark-bg{background:0 0;padding:0}iframe{max-width:100%}a{text-decoration:none;font-weight:500}a:link,a:visited{color:var(--color-link)}a:hover{color:var(--color-link-hover)}a.secondary,a.secondary:link,a.secondary:visited{color:var(--color-link-secondary)}span.reldate{color:var(--color-text-reldate)}dl,ol,p,ul{margin:20px 0}ul>li>dl:first-of-type,ul>li>ol:first-of-type,ul>li>p:first-of-type,ul>li>ul:first-of-type{margin:0 0 20px 0}.centered{text-align:center}figcaption{font-size:.75em;color:var(--color-text-figcaption)}img.center{margin:0 auto}.left{float:left;margin-right:20px;margin-bottom:20px}.right{float:right;margin-left:20px;margin-bottom:20px}.avatar{border-radius:999px;box-shadow:0 2px 4px rgba(0,0,0,.4)}@media screen and (max-width:767px){.avatar{width:142px!important}}dd{padding-left:24px}blockquote{padding:10px;margin:20px 0;border:1px solid var(--color-border-blockquote);border-radius:6px;background-color:var(--color-bg-blockquote);font-size:.92em;line-height:1.5;color:var(--color-text-blockquote)}@media screen and (min-width:768px){blockquote{padding:10px 40px}}@media screen and (max-width:767px){blockquote{padding:20px;margin:20px -20px;border:none;border-radius:0}blockquote p:first-of-type{margin-top:0}blockquote p:last-of-type{margin-bottom:0}}blockquote h3{margin-bottom:0}blockquote h3+p{margin-top:.5em}.status-pill{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:600;font-size:11px;line-height:1;padding:3px 8px;margin-left:6px;border-radius:999px;vertical-align:middle;text-transform:uppercase;letter-spacing:.05em}.status-pill.draft{background-color:var(--color-pill-draft-bg);color:var(--color-pill-draft-text)}.status-pill.stealth{background-color:var(--color-pill-stealth-bg);color:var(--color-pill-stealth-text)}.status-pill.archived{background-color:var(--color-pill-archived-bg);color:var(--color-pill-archived-text)}.mobile-only{display:block}@media screen and (min-width:768px){.mobile-only{display:none}}hr{display:block;width:642px/2;height:22px/2;max-width:100%;margin:40px auto;border:0;background-image:url(/asset?u=https%3A%2F%2Fnvie.com%2Fimg%2Fhr%402x.png);background-repeat:no-repeat;background-size:100%;filter:var(--hr-filter)}pre{margin:20px 0;background-color:var(--color-bg-code-block);border:1px solid var(--color-border-code-block);border-radius:3px;padding:0;font-family:Inconsolata,Monaco,Menlo,Consolas,"Courier New",monospace;font-weight:400;overflow-x:scroll}@media screen and (min-width:768px){pre{padding:10px 20px}}code{margin:0;padding:.2em .4em;letter-spacing:-.02em;font-family:Inconsolata,Monaco,Menlo,Consolas,"Courier New",monospace;font-weight:400;border-radius:6px;background-color:var(--color-bg-code-inline)}pre code{padding:0;background-color:transparent;border-radius:0}h2 code{font-size:19px;line-height:27px}@media screen and (min-width:768px){h2 code{font-size:21px;line-height:29px}}body{background-color:var(--color-bg-body)}body.draft:before{content:"Draft: this post will not be included in production builds yet";display:block;position:fixed;top:0;left:0;right:0;padding:6px 0;text-align:center;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:13px;font-weight:600;color:var(--color-pill-draft-text);background:var(--color-pill-draft-bg);z-index:2}body.stealth:before{content:"Stealth: this post is published but unlisted";display:block;position:fixed;top:0;left:0;right:0;padding:6px 0;text-align:center;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:13px;font-weight:600;color:var(--color-pill-stealth-text);background:var(--color-pill-stealth-bg);z-index:2}.site-container{min-height:400px;max-width:802px;margin:0}@media screen and (min-width:1178px){.site-container{margin:0 auto}}.site-header{margin:0;padding:0}@media screen and (min-width:768px){.site-header{padding:20px}}.site-header nav{margin:10px 0 0 0}@media screen and (min-width:768px){.site-header nav{margin:0}}.site-header nav ul{margin:0;text-align:center}@media screen and (min-width:768px){.site-header nav ul{text-align:right}}.site-header nav ul li{display:inline-block;margin:10px;padding:0}.site-header nav ul li a{color:var(--color-link-nav)}.site-header nav ul li a:hover{color:var(--color-link-nav-hover)}.site-header header{padding:20px}@media screen and (min-width:768px){.site-header header{padding:20px 48px}}.site-header header h1{margin-top:0;line-height:40px;font-size:34px;color:var(--color-header);font-weight:300}@media screen and (min-width:768px){.site-header header h1{margin-top:20px}}@media screen and (min-width:768px){.site-header header h1{line-height:48px;font-size:45px}}.site-header header .tagline{margin-top:8px;color:var(--color-tagline);font-weight:300}.site-container article{padding:0 20px;color:var(--color-text-body);background-color:var(--color-bg-article)}@media screen and (min-width:768px){.site-container article{padding:0 64px 24px 64px}}.site-container article ol li,.site-container article ul li{margin-top:5px}.site-container article ol li:first-of-type,.site-container article ul li:first-of-type{margin-top:0}.site-container article ol{list-style-type:none;counter-reset:ol-counter}.site-container article ol li{margin-left:20px}.site-container article ol li:before{content:counter(ol-counter) '.';counter-increment:ol-counter;margin-right:10px;font-size:600}.site-container article ul{list-style-image:none;list-style-position:outside;list-style-type:none}.site-container article ul li{margin-left:30px}.site-container article ul li:before{content:'\2022';display:block;position:relative;max-width:0;max-height:0;left:-20px;top:1px;font-size:19.2px}@media screen and (min-width:768px){.site-container article ul li:before{font-size:21.6px}}.site-container article ul.no-bullets li{margin-left:0}.site-container article ul.no-bullets li:before{content:none}footer{padding:0 20px;text-align:center;color:var(--color-text-footer)}@media screen and (min-width:768px){footer{padding:0 20px 60px 20px}}footer p{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:12px;line-height:18pt;margin-top:20px}body.archive article .year,body.home article .year{text-align:center}body.archive article .post-entry,body.home article .post-entry{clear:both;margin-top:40px}body.archive article .post-entry:first-of-type,body.home article .post-entry:first-of-type{margin-top:10px}body.archive article .post-date,body.home article .post-date{white-space:nowrap;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:12px;line-height:20px;color:var(--color-text-secondary)}@media screen and (min-width:768px){body.archive article .post-date,body.home article .post-date{margin-left:10px}}@media screen and (min-width:768px){body.archive article .post-date,body.home article .post-date{font-size:14px;line-height:22px}}body.archive article .post-entry.unpublished,body.home article .post-entry.unpublished{opacity:.7}body.archive article .post-detail,body.home article .post-detail{display:block}body.archive article .post-entry h2,body.home article .post-entry h2{display:inline;color:var(--color-archive-title)}body.home h2.readmore{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:18px;text-align:center;margin:80px 0}body.post .site-header header{padding-bottom:0}body.post article .post{position:relative;margin-top:20px}body.post article .post:first-of-type{margin-top:0}body.post article .post h2{line-height:38px;position:relative}body.post article .post h2 a{color:var(--color-link-post)}@media screen and (min-width:768px){body.post article .post h2:before{content:'»';position:absolute;color:var(--color-text-secondary);left:-28px;top:28px}}body.post article .post .post-info{font-size:16px;line-height:24px;margin-top:0;color:var(--color-text-secondary)}@media screen and (min-width:768px){body.post article .post .post-info{font-size:18px;line-height:26px}}body.post article .meta{display:inline-flex;align-items:center;gap:10px;margin-top:8px;margin-bottom:-6px;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:16px;line-height:1;color:var(--color-text-secondary)}@media screen and (min-width:768px){body.post article .meta{margin-top:-6px}}body.post article .meta a{font-weight:500;color:var(--color-link)}body.post article .meta img{width:28px;height:28px;border-radius:999px}body.post .callout{display:block;width:100vw;margin:0 0 -16px calc(-50vw + 50%);padding:6px 16px;background:linear-gradient(to bottom,var(--color-callout-bg-from),transparent);font-size:14px;font-style:italic;font-weight:300;text-align:center;text-decoration:none;color:var(--color-callout-text)}@media screen and (max-width:767px){body.post .callout{margin-bottom:0}}body.post .callout strong{color:var(--color-callout-strong)}#carbonads-container{margin:0;padding:0;display:none;position:absolute;width:166px;top:0;right:-206px;border:1px solid var(--color-border-carbonads);border-radius:6px;opacity:.85}@media screen and (min-width:802px){#carbonads-container{display:block}}#carbonads-container #carbonads{--width:130px;--font-size:12px}#carbonads-container #carbonads{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",Helvetica,Arial,sans-serif;display:block;overflow:hidden;margin-bottom:20px;max-width:var(--width);border-radius:4px;text-align:center;box-shadow:0 0 0 1px var(--color-shadow-carbonads);background-color:var(--color-bg-carbonads);font-size:var(--font-size);line-height:1.5}#carbonads-container #carbonads a{color:inherit;text-decoration:none}#carbonads-container #carbonads a:hover{color:inherit}#carbonads-container #carbonads span{position:relative;display:block;overflow:hidden}#carbonads-container .carbon-img{display:block;margin-bottom:8px;max-width:var(--width);line-height:1}#carbonads-container .carbon-img img{display:block;margin:0 auto;max-width:var(--width)!important;width:var(--width);height:auto}#carbonads-container .carbon-text{display:block;padding:0 1em 8px}#carbonads-container .carbon-poweredby{display:block;padding:10px var(--font-size);background:repeating-linear-gradient(-45deg,transparent,transparent 5px,var(--color-stripe-carbonads) 5px,var(--color-stripe-carbonads) 10px) var(--color-bg-carbonads-powered);text-transform:uppercase;letter-spacing:.5px;font-weight:600;font-size:9px;line-height:0}@media only screen and (min-width:320px) and (max-width:802px){#carbonads-container #carbonads{float:none;margin:0 auto;max-width:330px}#carbonads-container #carbonads span{position:relative}#carbonads-container #carbonads>span{max-width:none}#carbonads-container .carbon-img{float:left;margin:0}#carbonads-container .carbon-img img{max-width:150px!important}#carbonads-container .carbon-text{float:left;margin-bottom:0;padding:8px 20px;text-align:left;max-width:calc(100% - 130px - 3em)}#carbonads-container .carbon-poweredby{left:130px;bottom:0;display:block;width:100%}}.hll{background-color:var(--syn-hll)}.c{color:var(--syn-comment);font-style:italic}.err{color:var(--syn-err);background-color:var(--syn-err-bg)}.k{font-weight:700}.o{font-weight:700}.cm{color:var(--syn-comment);font-style:italic}.cp{color:var(--syn-comment);font-weight:700}.c1{color:var(--syn-comment);font-style:italic}.cs{color:var(--syn-comment);font-weight:700;font-style:italic}.gd{color:var(--syn-gd);background-color:var(--syn-gd-bg)}.ge{font-style:italic}.gr{color:var(--syn-gr)}.gh{color:var(--syn-gh)}.gi{color:var(--syn-gi);background-color:var(--syn-gi-bg)}.go{color:var(--syn-go)}.gp{color:var(--syn-gp)}.gs{font-weight:700}.gu{color:var(--syn-gu)}.gt{color:var(--syn-gt)}.kc{font-weight:700}.kd{font-weight:700}.kn{font-weight:700}.kp{font-weight:700}.kr{font-weight:700}.kt{color:var(--syn-kt);font-weight:700}.m{color:var(--syn-m)}.s{color:var(--syn-s)}.na{color:var(--syn-na)}.nb{color:var(--syn-nb)}.nc{color:var(--syn-nc);font-weight:700}.no{color:var(--syn-no)}.ni{color:var(--syn-ni)}.ne{color:var(--syn-ne);font-weight:700}.nf{color:var(--syn-nf);font-weight:700}.nn{color:var(--syn-nn)}.nt{color:var(--syn-nt)}.nv{color:var(--syn-nv)}.ow{font-weight:700}.w{color:var(--syn-w)}.mf{color:var(--syn-m)}.mh{color:var(--syn-m)}.mi{color:var(--syn-m)}.mo{color:var(--syn-m)}.sb{color:var(--syn-s)}.sc{color:var(--syn-s)}.sd{color:var(--syn-s)}.s2{color:var(--syn-s)}.se{color:var(--syn-s)}.sh{color:var(--syn-s)}.si{color:var(--syn-s)}.sx{color:var(--syn-s)}.sr{color:var(--syn-sr)}.s1{color:var(--syn-s)}.ss{color:var(--syn-s)}.bp{color:var(--syn-bp)}.vc{color:var(--syn-nv)}.vg{color:var(--syn-nv)}.vi{color:var(--syn-nv)}.il{color:var(--syn-il)}