@layer base{html:focus-within{scroll-behavior:smooth}:root{scrollbar-width:thin;--lightningcss-light:initial;--lightningcss-dark: ;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track-piece{background:var(--joh-c-scrollbar-track-bg);border-radius:6px}::-webkit-scrollbar-thumb{background:var(--joh-c-scrollbar-track-bg);border-radius:6px}::-webkit-scrollbar-thumb:active{background:var(--joh-c-text-2)}@media (prefers-reduced-motion:reduce){*,:before,:after{background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important;animation-duration:1ms!important;animation-iteration-count:1!important;animation-delay:-1ms!important}}*,:before,:after{box-sizing:border-box}html,body{font-synthesis:style;text-autospace:normal}html{-webkit-text-size-adjust:100%;font-size:16px;line-height:1.4}html.dark{--lightningcss-light: ;--lightningcss-dark:initial;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}body{width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--joh-font-family-base);color:var(--joh-c-text-1);background-color:var(--joh-c-bg);font-synthesis:style;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;font-size:16px;font-weight:400;overflow-x:hidden}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;font-size:16px;font-weight:400;line-height:24px}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}ol,ul{margin:0;padding:0;list-style:none}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--joh-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{line-height:inherit;color:inherit;border:0;padding:0}button{background-color:#0000;background-image:none;padding:0;font-family:inherit}button:enabled,[role=button]:enabled{cursor:pointer}button:focus{outline:4px auto -webkit-focus-ring-color}button:focus-visible{outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:#0000}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}input[type=search]::-webkit-search-decoration{-webkit-appearance:none;appearance:none}:-webkit-any(input:-ms-placeholder-shown,textarea:-ms-placeholder-shown){color:var(--joh-c-text-3)}:is(input:-ms-placeholder-shown,textarea:-ms-placeholder-shown){color:var(--joh-c-text-3)}:-webkit-any(input:placeholder-shown,textarea:placeholder-shown){color:var(--joh-c-text-3)}:is(input:placeholder-shown,textarea:placeholder-shown){color:var(--joh-c-text-3)}input::-moz-placeholder{color:var(--joh-c-text-3)}textarea::-moz-placeholder{color:var(--joh-c-text-3)}input::placeholder,textarea::placeholder{color:var(--joh-c-text-3)}input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=number]::-webkit-inner-spin-button{height:auto}[type=number]::-webkit-outer-spin-button{height:auto}a:not([class]){-webkit-text-decoration-skip-ink:auto;text-decoration-skip-ink:auto}img:not([src]),img[src=""]{opacity:0}svg:not(:root){overflow:hidden}button,input{overflow:visible}:root{--joh-c-white:#fff;--joh-c-black:#000;--joh-c-primary:#2076df;--joh-c-neutral:var(--joh-c-black);--joh-c-neutral-inverse:var(--joh-c-white)}html.dark{--joh-c-neutral:var(--joh-c-white);--joh-c-neutral-inverse:var(--joh-c-black)}:root{--joh-c-gray-1:#dddde3;--joh-c-gray-2:#e4e4e9;--joh-c-gray-3:#ebebef;--joh-c-gray-soft:#8e96aa24;--joh-c-indigo-1:#2076df;--joh-c-indigo-2:#00a0e9;--joh-c-indigo-3:#5672cd;--joh-c-indigo-soft:#646cff24;--joh-c-purple-1:#6f42c1;--joh-c-purple-2:#7e4cc9;--joh-c-purple-3:#8e5cd9;--joh-c-purple-soft:#9f7aea24;--joh-c-green-1:#18794e;--joh-c-green-2:#299764;--joh-c-green-3:#30a46c;--joh-c-green-soft:#10b98124;--joh-c-yellow-1:#915930;--joh-c-yellow-2:#946300;--joh-c-yellow-3:#9f6a00;--joh-c-yellow-soft:#eab30824;--joh-c-red-1:#b8272c;--joh-c-red-2:#d5393e;--joh-c-red-3:#e0575b;--joh-c-red-soft:#f43f5e24;--joh-c-sponsor:#db2777}html.dark{--joh-c-gray-1:#515c67;--joh-c-gray-2:#414853;--joh-c-gray-3:#32363f;--joh-c-gray-soft:#65758529;--joh-c-indigo-1:#a8b1ff;--joh-c-indigo-2:#5c73e7;--joh-c-indigo-3:#3e63dd;--joh-c-indigo-soft:#646cff29;--joh-c-purple-1:#c8abfa;--joh-c-purple-2:#a879e6;--joh-c-purple-3:#8e5cd9;--joh-c-purple-soft:#9f7aea29;--joh-c-green-1:#3dd68c;--joh-c-green-2:#30a46c;--joh-c-green-3:#298459;--joh-c-green-soft:#10b98129;--joh-c-yellow-1:#f9b44e;--joh-c-yellow-2:#da8b17;--joh-c-yellow-3:#a46a0a;--joh-c-yellow-soft:#eab30829;--joh-c-red-1:#f66f81;--joh-c-red-2:#f14158;--joh-c-red-3:#b62a3c;--joh-c-red-soft:#f43f5e29}:root{--joh-c-bg:#fff;--joh-c-bg-alt:#f6f6f7;--joh-c-bg-soft:#f6f6f7}html.dark{--joh-c-bg:#1b1b1f;--joh-c-bg-alt:#161618;--joh-c-bg-soft:#202127}:root{--joh-c-border:#c2c2c4;--joh-c-divider:#e2e2e3;--joh-c-gutter:#e2e2e3}html.dark{--joh-c-border:#3c3f44;--joh-c-divider:#2e2e32;--joh-c-gutter:#000}:root{--joh-c-text-1:#222;--joh-c-text-2:#222222c7;--joh-c-text-3:#2222228f;--joh-c-text-muted:#999}html.dark{--joh-c-text-1:#fffff5db;--joh-c-text-2:#ebebf599;--joh-c-text-3:#ebebf561;--joh-c-text-muted:#8b8b8b}:root{--joh-c-default-1:var(--joh-c-gray-1);--joh-c-default-2:var(--joh-c-gray-2);--joh-c-default-3:var(--joh-c-gray-3);--joh-c-default-soft:var(--joh-c-gray-soft);--joh-c-brand-1:var(--joh-c-indigo-1);--joh-c-brand-2:var(--joh-c-indigo-2);--joh-c-brand-3:var(--joh-c-indigo-3);--joh-c-brand-soft:var(--joh-c-indigo-soft);--joh-c-brand:var(--joh-c-brand-1);--joh-c-tip-1:var(--joh-c-brand-1);--joh-c-tip-2:var(--joh-c-brand-2);--joh-c-tip-3:var(--joh-c-brand-3);--joh-c-tip-soft:var(--joh-c-brand-soft);--joh-c-note-1:var(--joh-c-brand-1);--joh-c-note-2:var(--joh-c-brand-2);--joh-c-note-3:var(--joh-c-brand-3);--joh-c-note-soft:var(--joh-c-brand-soft);--joh-c-success-1:var(--joh-c-green-1);--joh-c-success-2:var(--joh-c-green-2);--joh-c-success-3:var(--joh-c-green-3);--joh-c-success-soft:var(--joh-c-green-soft);--joh-c-important-1:var(--joh-c-purple-1);--joh-c-important-2:var(--joh-c-purple-2);--joh-c-important-3:var(--joh-c-purple-3);--joh-c-important-soft:var(--joh-c-purple-soft);--joh-c-warning-1:var(--joh-c-yellow-1);--joh-c-warning-2:var(--joh-c-yellow-2);--joh-c-warning-3:var(--joh-c-yellow-3);--joh-c-warning-soft:var(--joh-c-yellow-soft);--joh-c-danger-1:var(--joh-c-red-1);--joh-c-danger-2:var(--joh-c-red-2);--joh-c-danger-3:var(--joh-c-red-3);--joh-c-danger-soft:var(--joh-c-red-soft);--joh-c-caution-1:var(--joh-c-red-1);--joh-c-caution-2:var(--joh-c-red-2);--joh-c-caution-3:var(--joh-c-red-3);--joh-c-caution-soft:var(--joh-c-red-soft);--joh-c-focus-ring:color-mix(in srgb, var(--joh-c-text-1) 12%, transparent)}html.dark{--joh-c-focus-ring:color-mix(in srgb, var(--joh-c-text-1) 18%, transparent)}:root{--joh-c-mark-bg:#00bfff5e}html.dark{--joh-c-mark-bg:#00bfff3d}:root{--joh-font-family-base:"Source Han Sans SC VF", "Source Han Serif SC VF", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--joh-font-family-serif:"Source Han Serif CN VF", "Source Han Serif SC", "思源宋体", "Noto Serif CJK SC", "Noto Serif SC", "Songti SC", "STSong", "SimSun", "NSimSun", "Times New Roman", serif;--joh-font-family-mono:ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-synthesis-weight:auto;font-optical-sizing:auto}:root:where(:lang(zh)){--joh-font-family-base:"Source Han Sans SC VF", "Source Han Serif SC VF", ui-sans-serif, system-ui, "PingFang SC", "Noto Sans CJK SC", "Noto Sans SC", "Heiti SC", "Microsoft YaHei", "DengXian", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--joh-shadow-1:0 1px 2px #0000000a, 0 1px 2px #0000000f;--joh-shadow-2:0 3px 12px #00000012, 0 1px 4px #00000012;--joh-shadow-3:0 12px 32px #0000001a, 0 2px 6px #00000014;--joh-shadow-4:0 14px 44px #0000001f, 0 3px 9px #0000001f;--joh-shadow-5:0 18px 56px #00000029, 0 4px 12px #00000029;--joh-z-index-footer:10;--joh-z-index-header-hero:15;--joh-z-index-local-nav:20;--joh-z-index-nav:30;--joh-z-index-layout-top:40;--joh-z-index-backdrop:50;--joh-z-index-sidebar:60}@media (min-width:960px){:root{--joh-z-index-sidebar:25}}:root{--joh-layout-max-width:982px;--joh-icon-svg-arrow-down:url(data:image/svg+xml,%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20fill%3D%22none%22%20version%3D%221.1%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cg%3E%3Cg%20transform%3D%22matrix\(0%2C-1%2C1%2C0%2C-10.5859375%2C27.914794921875\)%22%3E%3Cpath%20d%3D%22M8.9573517109375%2C20.9574462109375L15.457628710937499%2C27.4573862109375C15.4711487109375%2C27.4708962109375%2C15.4849487109375%2C27.4839362109375%2C15.4990187109375%2C27.4965162109375C15.5130987109375%2C27.5124962109375%2C15.5277687109375%2C27.5281462109375%2C15.5430487109375%2C27.5434162109375C15.9335687109375%2C27.9339362109375%2C16.5667287109375%2C27.9339362109375%2C16.9572787109375%2C27.5433962109375L23.4572287109375%2C21.0430962109375C23.8477287109375%2C20.6525662109375%2C23.8477287109375%2C20.0194192109375%2C23.4572287109375%2C19.6289022109375C23.0667287109375%2C19.2383780109375%2C22.4335287109375%2C19.2383780109375%2C22.042928710937503%2C19.6289212109375L16.2504287109375%2C25.4217862109375L10.3715287109375%2C19.5431982109375C9.9809987109375%2C19.1526915109375%2C9.3478497109375%2C19.1526999109375%2C8.9573327109375%2C19.5432172109375C8.5668082109375%2C19.9337412109375%2C8.5668082109375%2C20.5669062109375%2C8.9573517109375%2C20.9574462109375Z%22%20fill-rule%3D%22evenodd%22%20fill%3D%22%23222222%22%20fill-opacity%3D%221%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E)}html{--joh-search-shell-key-modifier:"Ctrl"}html.mac{--joh-search-shell-key-modifier:"⌘"}:root{--joh-nav-height:64px;--joh-nav-logo-height:42px;--joh-c-nav-overlay-bg:var(--joh-c-bg);--joh-c-hero-heading-bg:#bfbfbf;--joh-c-hero-banner-bg:#222;--joh-c-journal-frontpage-bg:#222;--joh-c-hero-overlay:#0000001a;--joh-hero-gradient-overlay:linear-gradient(to bottom, #0000004d, transparent, #0009);--joh-hero-text-shadow:0 2px 8px #00000040, 0 4px 15px #0000004d;--joh-custom-block-font-size:.9375rem;--joh-custom-block-line-height:1.75;--joh-custom-block-border-radius:12px;--joh-custom-block-border-width:1px;--joh-c-custom-block-bg:color-mix(in srgb, var(--joh-c-bg) 92%, var(--joh-c-text-1) 8%);--joh-c-custom-block-code-bg:#ffffff80;--joh-c-custom-block-tip-bg:color-mix(in srgb, var(--joh-c-bg) 88%, var(--joh-c-success-1) 12%);--joh-c-custom-block-important-bg:color-mix(in srgb, var(--joh-c-bg) 88%, var(--joh-c-important-1) 12%);--joh-c-custom-block-warning-bg:color-mix(in srgb, var(--joh-c-bg) 88%, var(--joh-c-warning-1) 12%);--joh-c-custom-block-caution-bg:color-mix(in srgb, var(--joh-c-bg) 88%, var(--joh-c-caution-1) 12%);--joh-code-line-height:1.7;--joh-code-font-size:.875em;--joh-code-block-padding-top:1.25rem;--joh-code-block-padding-right:1.5rem;--joh-code-block-padding-bottom:1.25rem;--joh-code-block-padding-left:1.5rem;--joh-code-block-margin-block:16px;--joh-code-block-mobile-bleed:24px;--joh-code-block-mobile-item-radius:8px;--joh-code-lang-top:2px;--joh-code-lang-right:8px;--joh-code-lang-font-size:12px;--joh-code-lang-font-weight:500;--joh-code-line-number-width:32px;--joh-header-anchor-symbol:"#";--joh-c-scrollbar-track-bg:#0000001a}html.dark{--joh-c-scrollbar-track-bg:#ffffff1a}:root{--duration-stagger:40ms;--duration-micro:80ms;--duration-quick:.15s;--duration-fast:.25s;--duration-medium:.35s;--duration-slow:.4s;--duration-very-slow:.5s;--duration-search-transition:.5s;--duration-reveal:.4s;--duration-hamburger-morph:.12s;--duration-page-flip:.32s;--duration-medium-zoom:.22s;--distance-micro:4px;--distance-small:6px;--distance-base:8px;--distance-medium:12px;--distance-large:30px;--ease-smooth-out:cubic-bezier(.22, 1, .36, 1);--ease-standard:cubic-bezier(.33, 0, .13, 1);--ease-morph:cubic-bezier(.77, 0, .175, 1);--ease-search-settle:cubic-bezier(.16, 1, .3, 1);--ease-out:cubic-bezier(.23, 1, .32, 1);--ease-linear:linear;--ease-bounce:cubic-bezier(.34, 1.36, .64, 1);--ease-bounce-strong:cubic-bezier(.34, 3.85, .64, 1);--blur-small:2px;--blur-medium:3px;--blur-large:8px;--scale-large:.96;--scale-medium:.97;--scale-small:.98;--scale-tiny:.99;--page-enter-duration:.46s;--page-enter-stagger:82ms;--text-swap-dur:var(--duration-quick);--text-swap-translate-y:var(--distance-base);--text-swap-blur:var(--blur-small);--text-swap-ease:var(--ease-out)}@keyframes page-enter{0%{opacity:0;transform:translate3d(0, var(--distance-medium), 0)}to{opacity:1;transform:translate(0)}}@keyframes pop-up{0%{opacity:0;transform:translateY(var(--distance-medium))}to{opacity:1;transform:translateY(0)}}@keyframes pop-down{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(var(--distance-medium))}}@media (prefers-reduced-motion:no-preference){html[data-page-enter] [data-page-enter-item]:not([data-page-enter-await-layout]),html[data-page-enter] [data-page-enter-item][data-page-enter-await-layout][data-layout-ready],html[data-page-enter] [data-page-enter-content]>:nth-child(-n+20){animation:page-enter var(--page-enter-duration) var(--ease-smooth-out) both;animation-delay:calc(var(--page-enter-stage,0) * var(--page-enter-stagger))}[data-page-enter-content]>:first-child{--page-enter-stage:1}[data-page-enter-content]>:nth-child(2){--page-enter-stage:2}[data-page-enter-content]>:nth-child(3){--page-enter-stage:3}[data-page-enter-content]>:nth-child(4){--page-enter-stage:4}[data-page-enter-content]>:nth-child(5){--page-enter-stage:5}[data-page-enter-content]>:nth-child(6){--page-enter-stage:6}[data-page-enter-content]>:nth-child(7){--page-enter-stage:7}[data-page-enter-content]>:nth-child(8){--page-enter-stage:8}[data-page-enter-content]>:nth-child(9){--page-enter-stage:9}[data-page-enter-content]>:nth-child(10){--page-enter-stage:10}[data-page-enter-content]>:nth-child(11){--page-enter-stage:11}[data-page-enter-content]>:nth-child(12){--page-enter-stage:12}[data-page-enter-content]>:nth-child(13){--page-enter-stage:13}[data-page-enter-content]>:nth-child(14){--page-enter-stage:14}[data-page-enter-content]>:nth-child(15){--page-enter-stage:15}[data-page-enter-content]>:nth-child(16){--page-enter-stage:16}[data-page-enter-content]>:nth-child(17){--page-enter-stage:17}[data-page-enter-content]>:nth-child(18){--page-enter-stage:18}[data-page-enter-content]>:nth-child(19){--page-enter-stage:19}[data-page-enter-content]>:nth-child(20){--page-enter-stage:20}}.t-text-swap{filter:blur();opacity:1;transition:transform var(--text-swap-dur) var(--text-swap-ease), filter var(--text-swap-dur) var(--text-swap-ease), opacity var(--text-swap-dur) var(--text-swap-ease);will-change:transform, filter, opacity;display:inline-block;transform:translateY(0)}.t-text-swap.is-exit{transform:translateY(calc(var(--text-swap-translate-y) * -1));filter:blur(var(--text-swap-blur));opacity:0}.t-text-swap.is-enter-start{transform:translateY(var(--text-swap-translate-y));filter:blur(var(--text-swap-blur));opacity:0;transition:none}.PostTitleTransition{width:-moz-fit-content;width:fit-content;max-width:100%;display:inline-block;position:relative}.Hero .PostTitleTransition{color:var(--joh-c-white)}.PostTitleTransitionOverlay{pointer-events:none;width:100%;height:100%;position:absolute;top:0;bottom:0;left:0;right:0}.PostTitleTransitionGlyph{display:block;position:absolute}.PostTitleTransitionSvg{width:100%;height:100%;display:block;overflow:visible}.PostTitleTransition.is-post-title-transition-active .PostTitleTransitionText{visibility:hidden}.PostTitleTransition.is-post-title-final-target .PostTitleTransitionText{visibility:visible}@keyframes post-title-glyph-old{0%{opacity:1}44.99%{opacity:1}45%,to{opacity:0}}@keyframes post-title-glyph-new{0%{opacity:0}45%{opacity:1}to{opacity:1}}@keyframes post-title-glyph-fade-through{0%{opacity:0}45%,72%{opacity:1}to{opacity:0}}@keyframes post-title-final-enter{0%,70%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){.t-text-swap{transition:none!important}::view-transition-old(root){mix-blend-mode:normal;animation:none!important}::view-transition-new(root){mix-blend-mode:normal;animation:none!important}.PostTitleTransitionOverlay{display:none}}.loading-dots:after{--loading-dots-cycle:2s;content:"...";vertical-align:baseline;text-align:left;width:3ch;animation:dots var(--loading-dots-cycle) infinite;line-height:1;display:inline-block;overflow:hidden}@keyframes dots{0%{clip-path:inset(0 3ch 0 0);opacity:1}25%{clip-path:inset(0 2ch 0 0);opacity:1}50%{clip-path:inset(0 1ch 0 0);opacity:1}70%{clip-path:inset(0);opacity:1}to{clip-path:inset(0);opacity:0}}}@layer layouts{.Layout{--joh-sticky-nav-offset:var(--joh-nav-height);flex-direction:column;min-height:100vh;display:flex}.PageFrame,.PageMain{flex-direction:column;flex:1;min-width:0;display:flex}.Content{width:100%;min-height:calc(100svh - var(--joh-nav-height));flex:1}.Content .container{max-width:var(--joh-layout-max-width);margin:0 auto}.Content .content{min-width:0}@media (min-width:420px){.Content{padding:0 16px}}@media (min-width:720px){.Content{padding:0 32px}}@media (min-width:1280px){.PageFrame.has-aside{width:100%;max-width:calc(var(--joh-layout-max-width) + 64px);grid-template-columns:minmax(0,1fr) 224px;column-gap:32px;margin:0 auto;padding:0 32px;display:grid}.PageFrame.has-aside>.PageMain>.Content{padding-inline-start:0;padding-inline-end:0}}}@layer components{.NavBar{--searchbox-width:48px;--navbar-hidden-translate:-100%;z-index:var(--joh-z-index-nav);width:100%;height:var(--joh-nav-height);white-space:nowrap;will-change:translate;transition:background-color var(--duration-very-slow), translate var(--duration-fast) var(--ease-standard), border-color var(--duration-very-slow);background-color:var(--joh-c-bg);border-bottom:1px solid #0000;position:sticky;top:0;translate:0}@media (min-width:960px){.NavBar{--navbar-hidden-translate:calc(-100% - 8px);margin-top:8px}}.NavBar .wrapper{padding:0 8px}@media (min-width:720px){.NavBar .wrapper{padding:0 32px}}.NavBar .container{max-width:var(--joh-layout-max-width);height:var(--joh-nav-height);justify-content:space-between;margin:0 auto;display:flex}.NavBar .title{height:calc(var(--joh-nav-height) - 1px);transition:background-color var(--duration-very-slow);flex-shrink:0}.NavBar .content{flex-grow:1}.NavBar .content-body{height:var(--joh-nav-height);transition:background-color var(--duration-very-slow);justify-content:flex-end;align-items:center;display:flex}@media (min-width:960px){.NavBar .content-body{background-color:#0000;position:relative}.NavBar .divider-line,.NavBar .divider{background-color:var(--joh-c-gutter)}}@media (max-width:719px){.NavBar .NavBarSocialLink{text-align:center;width:100%;font-size:18px!important;line-height:24px!important;display:inline-block!important}}.NavBar a.NavBarMenuLink.Link{line-height:var(--joh-nav-height);color:var(--joh-c-text-1);transition:color var(--duration-fast);align-items:center;padding:0 12px;font-size:14px;font-weight:400;display:flex}.NavBar .NavBarTitle>.title{height:var(--joh-nav-height);color:var(--joh-c-text-1);transition:opacity var(--duration-fast);border-bottom:1px solid #0000;align-items:center;font-size:20px;font-weight:700;display:flex}@media (max-width:719px){.NavBar .NavBarTitle>.title{display:none}}@media (min-width:960px){.NavBar .NavBarTitle>.title .title{flex-shrink:0}}.NavBar .NavBarTitle>.title .logo{height:var(--joh-nav-logo-height);margin-top:-8px;margin-right:8px}.NavBar .NavBarMenu{display:none}@media (min-width:720px){.NavBar .NavBarMenu{flex-grow:1;padding-left:24px;display:flex}}@media (min-width:960px){.NavBar .NavBarMenu{padding-left:32px}}.NavBar .NavBarSearch{cursor:text}@media (min-width:720px){.NavBar .NavBarSearch{margin-left:8px}}.NavBar .NavBarSearch .SearchShell--compact{box-sizing:border-box;width:var(--searchbox-width);height:55px;color:var(--joh-c-text-1);transition:border-color var(--duration-fast), background-color var(--duration-fast), color var(--duration-fast);background:0 0;border:0;border-radius:8px;justify-content:center;align-items:center;gap:6px;margin:0;padding:0;display:flex;overflow:hidden}.NavBar .NavBarSearch .SearchShell--compact:hover{background:0 0}.NavBar .NavBarSearch .SearchShell--compact:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.NavBar .NavBarSearch .SearchShell--compact:focus:not(:focus-visible){outline:none!important}.NavBar .NavBarSearch .SearchShellIcon{opacity:1;background-color:currentColor;flex-shrink:0;order:2;width:1rem;height:1rem;position:absolute;right:14px}@media (min-width:720px){.NavBar .NavBarSearch .SearchShell--compact{border:solid 2px var(--joh-c-text-1);background-color:var(--joh-c-bg-alt);justify-content:space-between;width:205px;height:35px;padding:0 10px 0 12px}.NavBar .NavBarSearch .SearchShell--compact:hover{background:var(--joh-c-bg-alt)}.NavBar .NavBarSearch .SearchShellBody{flex:1 1 0;order:1;justify-content:flex-start;align-items:center;gap:8px;min-width:0;display:flex}.NavBar .NavBarSearch .SearchShellIcon{margin-left:80px;position:relative;right:0}}@media (max-width:719px){.NavBar .NavBarSearch .SearchShellBody{justify-content:center;align-items:center;width:100%;display:flex}.NavBar .NavBarSearch .SearchShellBody>:not(.SearchShellIcon){display:none}.NavBar .NavBarSearch .SearchShellIcon{right:24px}}.NavBar .NavBarSearch .SearchShellLabel,.NavBar .NavBarSearch .SearchShellInput{text-align:left;white-space:nowrap;width:auto;min-width:0;color:var(--joh-c-text-2);opacity:.9;transition:opacity var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out);flex:0 auto;font-size:13px;font-weight:500;display:none;overflow:hidden}.NavBar .NavBarSearch .SearchShellLabel{pointer-events:none}.NavBar .NavBarSearch .SearchShellInput{pointer-events:none;background:0 0;border:0;padding:0}.NavBar .NavBarSearch .SearchShell--compact:hover .SearchShellIcon,.NavBar .NavBarSearch .SearchShell--compact:hover .SearchShellLabel,.NavBar .NavBarSearch .SearchShell--compact:hover .SearchShellInput{color:var(--joh-c-text-1)}@media (min-width:720px){.NavBar .NavBarSearch .SearchShellLabel,.NavBar .NavBarSearch .SearchShellInput{max-width:calc(100% - 56px);color:var(--joh-c-text-2);display:contents}}.NavBar .NavBarSearch .SearchShellKeys{flex:none;align-items:center;display:none}@media (min-width:720px){.NavBar .NavBarSearch .SearchShellKeys{display:flex}}.NavBar .NavBarSearch .SearchShellKey{border:1px solid var(--joh-c-divider);width:auto;min-width:0;height:22px;color:var(--joh-c-text-2);background-color:var(--joh-c-bg-alt);line-height:22px;font-family:var(--joh-font-family-base);transition:color var(--duration-very-slow), border-color var(--duration-very-slow);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;font-size:12px;font-weight:500;display:block}.NavBar .NavBarSearch .SearchShellKey+.SearchShellKey{border-right:1px solid var(--joh-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.NavBar .NavBarSearch .SearchShellKeyModifier{font-size:0!important}.NavBar .NavBarSearch .SearchShellKeyModifier:after{content:var(--joh-search-shell-key-modifier);letter-spacing:normal;color:var(--joh-c-text-2);font-size:12px}.NavBar .NavBarSearch .SearchShellKeyModifier>*{display:none}@media (max-width:419px){.NavBar .NavBarSearch{margin-left:0}}.NavBar .NavBarSocialLink{cursor:default}.NavBar:not(.top){border-bottom-color:var(--joh-c-gutter)}.NavBar.scrolling-down:not(.open):not(:focus-within){translate:0 var(--navbar-hidden-translate);pointer-events:none}.Layout:has(>.NavBar.scrolling-down:not(.open):not(:focus-within)){--joh-sticky-nav-offset:0px}.NavBar:focus-within{pointer-events:auto;translate:0}@supports (container-type:scroll-state){html{container:page-scroll/scroll-state}@container page-scroll scroll-state((scrolled:block-end) and (scrollable:block-start)){.NavBar{--joh-scroll-direction:block-end}.NavBar:not(.open):not(:focus-within){translate:0 var(--navbar-hidden-translate);pointer-events:none}.Layout:has(>.NavBar:not(.open):not(:focus-within)){--joh-sticky-nav-offset:0px}}@container page-scroll scroll-state(scrolled:block-start){.NavBar{--joh-scroll-direction:block-start}}}@media (prefers-reduced-motion:reduce){.NavBar{transition-property:background-color}}.NavBar.open{background:var(--joh-c-nav-overlay-bg)!important;position:fixed!important;top:0!important}.NavBar.open~.Content{margin-top:var(--joh-nav-height)}.NavBar .NavBarHamburger{width:var(--searchbox-width);height:var(--joh-nav-height);justify-content:center;align-items:center;display:flex}@media (min-width:720px){.NavBar .NavBarHamburger{display:none}}.NavBar .NavBarHamburger .container{width:1.25rem;height:1.25rem;cursor:inherit;flex-direction:column;justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden}.NavBar .NavBarHamburger .container>span{background-color:var(--joh-c-text-2);width:100%;height:2px;transition:translate var(--duration-hamburger-morph) var(--ease-out) var(--duration-hamburger-morph), rotate var(--duration-hamburger-morph) var(--ease-morph), scale var(--duration-hamburger-morph) var(--ease-out) var(--duration-hamburger-morph), background-color var(--duration-fast);border-radius:2px;display:inline-block}.NavBar .NavBarHamburger .container>span:nth-child(2){margin:4px 0}.NavBar .NavBarHamburger.open .container>span{transition:translate var(--duration-hamburger-morph) var(--ease-morph), rotate var(--duration-hamburger-morph) var(--ease-out) var(--duration-hamburger-morph), scale var(--duration-hamburger-morph) var(--ease-morph), background-color var(--duration-fast)}.NavBar .NavBarHamburger.open .container>span:first-child{translate:0 6px;rotate:45deg}.NavBar .NavBarHamburger.open .container>span:nth-child(2){scale:0 1}.NavBar .NavBarHamburger.open .container>span:nth-child(3){translate:0 -6px;rotate:-45deg}.NavBar .NavScreen.open{opacity:1;display:flex}.NavBar .NavScreen{--navscreen-item-exit-dur:.24s;--navscreen-item-enter-dur:.28s;--navscreen-stagger-base:60ms;z-index:var(--joh-z-index-sidebar);top:calc(var(--joh-nav-height) - 1px);height:calc(100vh - var(--joh-nav-height) + 1px);height:calc(100dvh - var(--joh-nav-height) + 1px);padding:0 32px calc(var(--joh-nav-height) + 20vh);background-color:var(--joh-c-nav-overlay-bg);pointer-events:auto;opacity:0;width:100%;transition:display var(--duration-reveal) var(--ease-out), opacity var(--duration-reveal) var(--ease-out), transform var(--duration-reveal) var(--ease-out);transition-behavior:allow-discrete;flex-direction:column;align-items:center;display:none;position:fixed;left:0;right:0;overflow-y:auto}@starting-style{.NavBar .NavScreen{opacity:0;transform:translateY(-8px)}}.NavBar .NavScreen .NavScreenMenu>*,.NavBar .NavScreen .NavScreenClose{opacity:0;filter:blur(var(--blur-small));transition:opacity var(--navscreen-item-exit-dur) var(--ease-out), transform var(--navscreen-item-exit-dur) var(--ease-out), filter var(--navscreen-item-exit-dur) var(--ease-out);transform:translateY(-8px)}.NavBar .NavScreen.open .NavScreenMenu>*,.NavBar .NavScreen.open .NavScreenClose{opacity:1;filter:blur();transition-duration:var(--navscreen-item-enter-dur);transition-delay:calc(var(--navscreen-stagger-base) + var(--navscreen-item-index,0) * var(--duration-stagger));transform:translateY(0)}@starting-style{.NavBar .NavScreen.open .NavScreenMenu>*,.NavBar .NavScreen.open .NavScreenClose{opacity:0;filter:blur(var(--blur-small));transform:translateY(-8px)}}.NavBar .NavScreen>.container,.NavBar .NavScreen .NavScreenMenu{flex-flow:column;justify-content:flex-start;align-items:center;width:100%;max-width:288px;display:flex}:is(.NavBar .NavScreen>.container,.NavBar .NavScreen .NavScreenMenu) .NavScreenMenuLink{color:var(--joh-c-text-1);transition:border-color var(--duration-fast), color var(--duration-fast);padding:12px 0 11px;font-size:14px;font-weight:500;line-height:24px;display:block}:is(.NavBar .NavScreen>.container,.NavBar .NavScreen .NavScreenMenu) .NavScreenMenuGroupLink{color:var(--joh-c-text-1);transition:color var(--duration-fast);margin-left:12px;font-size:14px;font-weight:400;line-height:32px;display:block}.NavBar .NavScreen>.container{gap:12px;margin:auto 0}.NavBar .NavScreen .NavScreenClose{flex-shrink:0;height:44px}@media (max-width:719px){.NavBar .NavBarSearch,.NavBar .NavBarSocialLink,.NavBar .NavBarHamburger:not(.NavScreenClose){transition:color var(--duration-fast), opacity var(--duration-reveal) var(--ease-standard), visibility var(--duration-reveal) var(--ease-standard)}.NavBar.open .NavBarSearch,.NavBar.open .NavBarSocialLink,.NavBar.open .NavBarHamburger:not(.NavScreenClose){opacity:0;visibility:hidden}}@media (min-width:720px){.NavBar .NavScreen{display:none}}html.navscreen-noscroll,html.navscreen-noscroll body{overscroll-behavior:none;overflow:hidden}html.navscreen-noscroll{padding-inline-end:var(--navscreen-scrollbar-width,0px)}@media (prefers-reduced-motion:reduce){.NavBar .NavScreen{transition-property:display,opacity;transition-duration:.12s}.NavBar .NavScreen .NavScreenMenu>*,.NavBar .NavScreen .NavScreenClose{filter:none;transition-duration:.12s;transition-delay:0s;transform:none}.NavBar .NavBarHamburger .container>span,.NavBar .NavBarHamburger.open .container>span{transition-duration:.12s;transition-delay:0s}}body:after{content:"";z-index:25;pointer-events:none;opacity:0;visibility:hidden;-webkit-backdrop-filter:blur()saturate();backdrop-filter:blur()saturate();transition:opacity var(--duration-reveal) var(--ease-out), visibility var(--duration-reveal) var(--ease-out), backdrop-filter var(--duration-quick) var(--ease-out);position:fixed;top:0;bottom:0;left:0;right:0}html.navscreen-open body:after{opacity:1;visibility:visible;-webkit-backdrop-filter:blur(12px)saturate(160%);backdrop-filter:blur(12px)saturate(160%);transition-duration:var(--duration-reveal), var(--duration-reveal), var(--duration-quick)}html[data-search-overlay=active] body:after{opacity:1;visibility:visible;-webkit-backdrop-filter:blur(8px)saturate(140%);backdrop-filter:blur(8px)saturate(140%);transition-duration:var(--duration-quick);transition-delay:0s}html[data-search-overlay=active].is-rendering body:after{-webkit-backdrop-filter:blur()saturate();backdrop-filter:blur()saturate();transition-duration:var(--duration-quick)}@media (prefers-reduced-motion:reduce){body:after{transition-duration:.12s;transition-delay:0s}}@media (prefers-reduced-transparency:reduce){body:after{-webkit-backdrop-filter:none;backdrop-filter:none}}.joh-tag{align-items:baseline;column-gap:.1em;display:inline-flex}.joh-tag:before{content:var(--joh-header-anchor-symbol);color:var(--joh-c-text-muted);-webkit-user-select:none;user-select:none;font-weight:500;text-decoration:none}.TagsList{flex-flow:wrap;justify-content:flex-start;row-gap:8px;margin-top:6px;display:flex}.TagsList a{white-space:nowrap;margin-right:8px;font-size:18px;font-weight:500;line-height:24px}.TagsList .tag-count{color:var(--joh-c-text-muted);font-size:.8rem;display:none}.Footer{z-index:var(--joh-z-index-footer);background-color:var(--joh-c-bg);padding:8px 20px 32px;position:relative}.Footer .container{max-width:var(--joh-layout-max-width);margin:0 auto}.Footer .footer-column:not(:first-child){padding-top:24px}.Footer .footer-tags h3,.Footer .footer-friendlinks h3{color:var(--joh-c-text-muted);cursor:pointer;font-size:.9rem}.Footer .footer-friendlinks .footer-list{margin-top:6px}.Footer .footer-friendlinks .footer-list a{margin-right:8px;font-size:18px;line-height:24px}.Footer .footer-siteinfo-nav a{--padding:16px;padding-right:var(--padding)}.Footer .footer-siteinfo-nav a:after{content:"/";left:calc(var(--padding) / 2);position:relative}.Footer .footer-siteinfo-nav a:first-child{font-weight:700}.Footer .footer-siteinfo-nav a:nth-last-child(2):after,.Footer .footer-siteinfo-nav a:last-child:after{content:""}@media (min-width:640px){.Footer .footer-siteinfo{grid-column-gap:16px;grid-template-columns:repeat(2,1fr)}.Footer .footer-siteinfo-meta{text-align:right;margin-left:auto}}.Footer .footer-siteinfo-meta{color:var(--joh-c-text-muted)}.Footer .footer-contact-link{width:100%;display:inline-block}.Footer .footer-siteinfo-meta,.Footer .footer-contact-link{font-size:1rem}.Footer .footer-siteinfo{grid-row-gap:24px;padding-top:24px;display:grid}.AsideOutline .content{border-left:1px solid var(--joh-c-divider);padding-left:16px;font-size:13px;font-weight:500;position:relative}.AsideOutline .outline-marker{--outline-marker-ease:cubic-bezier(0, 1, .5, 1);z-index:0;opacity:0;background-color:var(--joh-c-text-1);width:2px;height:18px;transition:top var(--duration-fast) var(--outline-marker-ease), background-color var(--duration-very-slow), opacity var(--duration-fast);border-radius:2px;position:absolute;left:-1px}.AsideOutline .outline-title{font-size:14px;font-weight:600;line-height:32px}.AsideOutline .outline-link{color:var(--joh-c-text-2);white-space:nowrap;text-overflow:ellipsis;transition:color var(--duration-very-slow);font-size:14px;font-weight:400;line-height:32px;display:block;overflow:hidden}.AsideOutline .outline-link:hover,.AsideOutline .outline-link.active{color:var(--joh-c-text-1);transition:color var(--duration-fast)}.AsideOutline .DocOutlineItem>li>ul{padding-left:16px;padding-right:16px}.Aside{flex-direction:column;flex-shrink:0;display:flex}.Aside .aside-container{top:calc(var(--joh-sticky-nav-offset) + 32px);width:224px;height:max(0px, calc(100vh - var(--joh-sticky-nav-offset) - 32px));height:max(0px, calc(100dvh - var(--joh-sticky-nav-offset) - 32px));scrollbar-width:none;transition:top var(--duration-fast) var(--ease-standard);padding-top:16px;position:sticky;overflow:hidden auto}.Aside .aside-container::-webkit-scrollbar{display:none}.Aside .content{width:100%;margin:0 auto;position:relative}@media (min-width:1280px){.Aside .content{order:1;margin:0}}@media (max-width:1279px){.Aside{display:none}}:is(.joh-context a[href*="://"],.joh-context a[target=_blank]):not(.no-icon):after{vertical-align:middle;content:"";background-color:currentColor;flex-shrink:0;width:1.25em;height:1.25em;margin-top:-.125em;margin-left:.25em;display:inline-block;-webkit-mask:url(/svg/link.svg) 50%/100% 100% no-repeat;mask:url(/svg/link.svg) 50%/100% 100% no-repeat}.external-link-icon-enabled :is(.joh-context a[href*="://"],.joh-context a[target=_blank]):after{color:currentColor}#nprogress{pointer-events:none}#nprogress .bar{z-index:calc(var(--joh-z-index-nav) + 1);background:var(--joh-c-brand-1);width:100%;height:2px;position:fixed;top:0;left:0}#nprogress .peg{width:100px;height:100%;box-shadow:0 0 10px var(--joh-c-brand-1), 0 0 5px var(--joh-c-brand-1);opacity:1;display:block;position:absolute;right:0;transform:rotate(3deg)translateY(-4px)}}@layer pages{body:before{content:"";top:calc(var(--joh-nav-height) + var(--joh-layout-top-height,0px));z-index:25;opacity:0;pointer-events:none;transform:translate3d(0, calc(-100% * var(--search-overlay-direction,1)), 0);background:var(--joh-c-bg);box-shadow:var(--joh-shadow-1);will-change:transform;position:fixed;bottom:0;left:0;right:0}html[data-search-overlay=active][data-search-overlay-scope=leave-search]{--search-overlay-direction:-1}html[data-search-overlay=active] body:before{opacity:1}html[data-search-overlay=active].is-changing body:before{transition:transform var(--duration-search-transition) var(--ease-search-settle)}html[data-search-overlay=active].is-animating body:before{transform:translate(0)}html[data-search-overlay=active].is-rendering body:before{transform:translate3d(0, calc(100% * var(--search-overlay-direction,1)), 0)}html[data-search-overlay=active].is-changing main.Content{transition:transform var(--duration-search-transition) var(--ease-search-settle);will-change:transform}html[data-search-overlay=active][data-search-overlay-scope=leave-search].is-animating.is-leaving main.Content{transform:translateY(calc(4vh * var(--search-overlay-direction,1)))}html[data-search-overlay=active].is-rendering main.Content,html[data-search-overlay=active]:not(.is-changing) main.Content{transform:translateY(0)}html[data-search-overlay=active][data-search-transition-scope=enter-search] .Footer{opacity:0;filter:blur(var(--blur-small));transform:translateY(20px)}html[data-search-overlay=active][data-search-transition-scope=enter-search].is-changing .Footer{transition:opacity .4s var(--ease-search-settle) .1s, transform .4s var(--ease-search-settle) .1s, filter .4s var(--ease-search-settle) .1s;will-change:opacity, transform, filter}html[data-search-overlay=active][data-search-transition-scope=enter-search].is-rendering .Footer{opacity:1;filter:blur();transform:translateY(0)}@keyframes search-trigger-expand-out{0%{opacity:1}35%,to{opacity:0}}@keyframes search-trigger-settle-in{0%{opacity:0}55%,to{opacity:1}}@keyframes search-trigger-collapse-out{0%{opacity:1}35%,to{opacity:0}}@keyframes search-trigger-return-in{0%{opacity:0}55%,to{opacity:1}}@supports (view-transition-name:none){@media (min-width:720px){html[data-search-transition=active] .NavBarSocialLink{view-transition-name:navbar-social-slot}}@media (max-width:719px){html[data-search-transition=active] .NavBarHamburger{view-transition-name:navbar-hamburger}}html[data-search-transition=active] body:not(.search) .NavBarSearch .SearchShell--compact[data-search-transition-target=site-search-trigger],html[data-search-transition=active] body.search #search .SearchShell--page[data-search-transition-target=site-search-trigger]{view-transition-name:site-search-trigger}@media (max-width:719px){html[data-search-transition=active] .NavBarSearch .SearchShell--compact,html[data-search-transition=active] #search .SearchShell--page{view-transition-name:none!important}}html[data-search-transition=active]::view-transition-group(root){animation:none}html[data-search-transition=active]::view-transition-old(root){animation:none}html[data-search-transition=active]::view-transition-new(root){animation:none}html[data-search-transition=active]::view-transition-group(site-search-trigger){animation-duration:var(--duration-search-transition);animation-timing-function:var(--ease-search-settle);z-index:30}html[data-search-transition=active]::view-transition-group(navbar-social-slot){animation-duration:var(--duration-search-transition);animation-timing-function:var(--ease-search-settle);z-index:19}html[data-search-transition=active]::view-transition-group(navbar-hamburger){animation-duration:var(--duration-reveal);animation-timing-function:var(--ease-search-settle);z-index:31}html[data-search-transition=active][data-search-transition-scope=enter-search]::view-transition-old(site-search-trigger){animation:search-trigger-expand-out var(--duration-search-transition) var(--ease-search-settle) both}html[data-search-transition=active][data-search-transition-scope=enter-search]::view-transition-new(site-search-trigger){animation:search-trigger-settle-in var(--duration-search-transition) var(--ease-search-settle) both}html[data-search-transition=active][data-search-transition-scope=leave-search]::view-transition-old(site-search-trigger){animation:search-trigger-collapse-out var(--duration-search-transition) var(--ease-search-settle) both}html[data-search-transition=active][data-search-transition-scope=leave-search]::view-transition-new(site-search-trigger){animation:search-trigger-return-in var(--duration-search-transition) var(--ease-search-settle) both}@media (prefers-reduced-motion:reduce){html[data-search-transition=active]::view-transition-group(site-search-trigger){animation:none}html[data-search-transition=active][data-search-transition-scope]::view-transition-old(site-search-trigger){animation-duration:.12s;animation-timing-function:var(--ease-out)}html[data-search-transition=active][data-search-transition-scope]::view-transition-new(site-search-trigger){animation-duration:.12s;animation-timing-function:var(--ease-out)}}}@media (max-width:719px){html[data-search-overlay=active] body:before{transform:none}html[data-search-overlay=active].is-changing body:before{transition:opacity var(--duration-search-transition) var(--ease-search-settle)}html[data-search-overlay=active].is-changing main.Content{transition:none}html[data-search-overlay=active][data-search-overlay-scope=leave-search].is-animating.is-leaving main.Content{transform:none}body:not(.search) .NavBar .NavBarSearch{transition:opacity var(--duration-reveal) var(--ease-out)}html[data-search-overlay=active][data-search-transition-scope=enter-search].is-animating body:not(.search) .NavBar .NavBarSearch{opacity:0}}@media (prefers-reduced-motion:reduce){html[data-search-overlay=active] body:before,html[data-search-overlay=active] main.Content,html[data-search-overlay=active] .Footer{transition:none;animation:none;transform:none}}}@layer utilities{.visually-hidden{white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);width:1px;height:1px;position:absolute;overflow:hidden}@media (max-width:719px){.hide-in-mobile{display:none}}@media (max-width:959px){.hide-in-pad{display:none}}}
