@font-face{font-family:Geist;src:url(/fonts/Geist/Geist%5Bwght%5D.woff2) format("woff2-variations");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:Geist;src:url(/fonts/Geist/Geist-Italic%5Bwght%5D.woff2) format("woff2-variations");font-weight:100 900;font-style:italic;font-display:swap}@font-face{font-family:Geist Mono;src:url(/fonts/Geist/GeistMono%5Bwght%5D.woff2) format("woff2-variations");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:Geist Mono;src:url(/fonts/Geist/GeistMono-Italic%5Bwght%5D.woff2) format("woff2-variations");font-weight:100 900;font-style:italic;font-display:swap}html{font-family:Geist,sans-serif;scrollbar-gutter:stable;overflow-y:scroll}:root{--mainFontFamily: "Geist", "Helvetica Neue", "Helvetica", "Arial", sans-serif;--monoFontFamily: "Geist Mono", "Consolas", "Monaco", "Courier New", monospace;--noteMainFontFamily: var(--mainFontFamily);--spacing-xxs: 2px;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 16px;--spacing-lg: 24px;--spacing-xl: 32px;--spacing-xxl: 48px;--spacing-xxxl: 64px;--font-size-xs: .75rem;--font-size-sm: .875rem;--font-size-md: 1rem;--font-size-lg: 1.25rem;--font-size-xl: 1.5rem;--font-size-xxl: 2.25rem;--font-size-xxxl: 3rem;--line-height-tight: 1.2;--line-height-normal: 1.4;--line-height-loose: 1.6;--letter-spacing-tight: -.01em;--letter-spacing-normal: .02em;--content-width-normal: 60ch;--content-width-wide: 65ch;--blogTitleFontSize: var(--font-size-xxxl);--blogTitleLineHeight: var(--line-height-tight);--pageHeadingFontSize: var(--font-size-xxl);--pageHeadingLineHeight: var(--line-height-tight);--noteTitleFontSize: var(--font-size-xxl);--noteTitleLineHeight: var(--line-height-tight);--noteTextFontSize: var(--font-size-lg);--noteTextLineHeight: var(--line-height-normal);--radius-sm: 6px;--radius-md: 10px;--maxWidth: 1500px;--maxWidth-md: 1000px;--maxWidth-sm: 750px;--marginTop: var(--spacing-md);--marginLeft: 3%;--marginRight: 3%;--marginTopCompact: var(--marginTop);--marginLeftCompact: 5%;--marginRightCompact: 5%;--columnSpacing: var(--spacing-lg);--logoTop: calc(-1 * var(--spacing-sm));--displayLogoMarginal: none;--displayLogo: none;--displayLogoCompact: none;--defaultTransition: all .2s ease;--textColor: rgb(240, 240, 240);--textFadedColor: rgba(222, 222, 222, .8);--headingsColor: rgb( 255, 255, 255 );--headingsUnderlineColor: rgba( 255, 255, 255, .12 );--headerUnderlineColor: rgba( 255, 255, 255, .2 );--accentColor: rgb(80, 220, 120);--backgroundColor: #111111;--backgroundTransparentColor: rgba( 32, 32, 32, .8 );--sheetBackgroundColor: rgba( 24, 24, 24, .8 );--sheetBackgroundOpaque: rgb(24, 24, 24);--foregroundColor: rgb( 144, 144, 144 );--thinRuleColor: rgba( 144, 144, 144, .12 );--thinRuleOpaque: rgb(35, 35, 35);--linkColor: rgb( 80, 220, 120 );--linkUnderlineColor: rgba( 80, 220, 120, .4 );--linkColorVisited: rgb( 120, 180, 120 );--linkUnderlineColorVisited: rgba( 120, 180, 120, .4 );--hoverColor: var(--accentColor);--hoverUnderlineColor: var(--accentColor);--hoverSubtleColor: color-mix(in srgb, var(--linkColor) 5%, var(--sheetBackgroundColor));--hoverAccentColor: color-mix(in srgb, var(--linkColor) 15%, var(--sheetBackgroundColor));--boldColor: rgb( 255, 255, 255 );--boldUnderlineColor: var(--headingsUnderlineColor);--buttonBackground: rgb(72, 195, 107);--buttonBackgroundPressed: rgb(35, 58, 41);--tagColor: var(--foregroundColor);--tagUnderlineColor: var(--thinRuleColor);--inputBackgroundColor: #232323;--inputTextColor: var(--textColor);--activeColor: var(--accentColor);--errorColor: rgb( 240, 40, 32);--verifiedColor: rgb( 96, 240, 32);--onSwitchColor: var(--accentColor);--imageBorderColor: #333;--disabledColor: rgb( 87, 86, 85 );--disabledTextColor: rgba(255, 255, 255, .15);--adminColor: rgb( 204, 204, 204);--adminUnderlineColor: rgba( 204, 204, 204, .25);--engineTextColor: var(--foregroundColor);--engineTextUnderlineColor: var(--thinRuleColor);--currentItemBackgroundColor: #333;--windowBackgroundColor: rgb( 45, 44, 43 );--markedTextBackground: #443300;--markedImageBorderColor: #886600;--followButtonBackground: rgba(236,236,236,.16);--followButtonHoverBackground: rgba(255,255,255,.48);--followButtonTextColor: #fff}*,*:before,*:after{box-sizing:border-box}html{font-family:var(--mainFontFamily);font-size:var(--font-size-md);line-height:var(--line-height-normal);scroll-behavior:smooth}body{font-family:var(--mainFontFamily);font-size:var(--font-size-md);line-height:var(--line-height-normal);color:var(--textColor);background-color:var(--backgroundColor);text-rendering:optimizeLegibility;margin:0;padding:0}.wrapper{display:flex;flex-direction:column;min-height:100vh;max-width:var(--maxWidth);margin-inline:auto}.main{flex:1 0 auto;display:flex;flex-direction:column;margin-inline:var(--marginLeft) var(--marginRight)}.content{flex:1 0 auto}.text-xs{font-size:var(--font-size-xs);line-height:var(--line-height-normal)}.text-sm{font-size:var(--font-size-sm);line-height:var(--line-height-normal)}.text-md{font-size:var(--font-size-md);line-height:var(--line-height-normal)}.text-lg{font-size:var(--font-size-lg);line-height:var(--line-height-normal)}.text-xl{font-size:var(--font-size-xl);line-height:var(--line-height-tight)}.text-xxl{font-size:var(--font-size-xxl);line-height:var(--line-height-tight)}.text-xxxl{font-size:var(--font-size-xxxl);line-height:var(--line-height-tight)}.font-black{font-weight:900}.font-bold{font-weight:700}.font-semibold{font-weight:600}.font-normal{font-weight:400}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.text-muted{color:var(--foregroundColor)}.text-faded{color:var(--textFadedColor)}.text-accent{color:var(--accentColor)}h1,h2,h3,h4,h5{max-width:var(--content-width-wide);color:var(--headingsColor)}h1{font-size:var(--font-size-xxxl);line-height:var(--line-height-tight);margin:0 0 var(--spacing-sm)}h2{font-size:var(--font-size-xxl);line-height:var(--line-height-tight);margin-top:var(--spacing-lg);margin-bottom:var(--spacing-sm)}h3{font-size:var(--font-size-xl);line-height:var(--line-height-normal);margin-top:var(--spacing-lg);margin-bottom:var(--spacing-sm)}h4{font-size:var(--font-size-lg);line-height:var(--line-height-normal);margin:0 0 var(--spacing-sm);font-weight:400}p{font-size:var(--font-size-lg);line-height:var(--line-height-normal);margin:var(--spacing-sm) 0;max-width:var(--content-width-normal)}p+p{margin-top:var(--spacing-sm)}.info-box p{margin-bottom:var(--spacing-xs)}a{text-decoration:none;color:var(--linkColor);border-bottom:1px solid var(--linkUnderlineColor);padding-bottom:var(--spacing-xxs);transition:border-color .2s ease,color .2s ease}a:visited{color:var(--linkColorVisited);border-bottom-color:var(--linkUnderlineColorVisited)}a:hover{color:var(--hoverColor);border-bottom-color:var(--hoverUnderlineColor)}.shy-link,.shy-link:visited{text-decoration:none;color:var(--textColor);border-bottom:1px solid var(--headerUnderlineColor);padding-bottom:var(--spacing-xxs);transition:border-color .2s ease,color .2s ease}.shy-link:hover{color:var(--hoverColor);border-bottom-color:var(--hoverUnderlineColor)}ul,ol{margin:var(--spacing-sm) 0;padding-left:var(--spacing-xl);font-size:var(--font-size-lg);line-height:var(--line-height-loose);max-width:var(--content-width-normal)}li{margin-bottom:var(--spacing-xxs)}li>ul,li>ol{padding-left:var(--spacing-lg);margin-top:var(--spacing-sm);margin-bottom:var(--spacing-sm)}label,input,textarea{font-family:inherit;font-size:var(--font-size-sm);line-height:var(--line-height-normal)}.section{padding-top:var(--spacing-lg);padding-bottom:var(--spacing-lg)}f,f1{background-color:#242424;padding:0 4px;border-radius:4px;white-space:normal;overflow-wrap:break-word}f1{color:#6eb96e}f a,f1 a{border-bottom-style:none}.header-area{position:relative;width:100%;padding:var(--marginTop) 0 40px}.page-intro{margin:0;display:flex;flex-direction:column;gap:var(--spacing-xs)}.page-intro>*{margin:0}.page-description{max-width:none;color:var(--foregroundColor)}.has-tooltip{position:relative;cursor:help}.has-tooltip:after{content:attr(data-tooltip);position:absolute;bottom:100%;left:50%;transform:translate(-50%) translateY(calc(-1 * var(--spacing-xs)));max-width:500px;width:max-content;padding:var(--spacing-xs) var(--spacing-sm);background-color:var(--sheetBackgroundOpaque);border:1px solid var(--thinRuleColor);border-radius:var(--radius-sm);color:var(--textColor);font-size:var(--font-size-sm);font-weight:400;text-align:center;opacity:0;visibility:hidden;z-index:10;transition:var(--defaultTransition)}.has-tooltip:hover:after{opacity:1;visibility:visible}.box{background-color:var(--sheetBackgroundColor);border:1px solid var(--thinRuleColor);border-radius:var(--radius-md);padding:var(--spacing-xl);width:100%;position:relative}.box-layout{display:flex;flex-direction:column;gap:var(--spacing-md)}.info-box{color:var(--textColor);background:var(--backgroundTransparentColor);padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-sm);margin-bottom:var(--spacing-md)}.tool-layout{display:flex;flex-direction:column;gap:var(--spacing-xxxl)}.tool-container{display:flex;flex-direction:column;gap:0}.tool-wrapper{max-width:var(--maxWidth-md);display:flex;flex-direction:column;gap:var(--spacing-lg);margin-bottom:0}.tool-footer{display:flex;flex-direction:column;align-items:flex-start;width:100%;padding-top:var(--spacing-lg)}.tool-social{display:flex;align-items:center;margin-bottom:calc(var(--spacing-sm) + 4px)}.tool-meta{font-size:var(--font-size-xs);color:var(--foregroundColor)}.tool-description{border-top:1px solid var(--thinRuleColor);padding-top:var(--spacing-lg)}.lg-width{max-width:var(--maxWidth)}.md-width{max-width:var(--maxWidth-md)}.sm-width{max-width:var(--maxWidth-sm)}.card{background-color:var(--sheetBackgroundColor);border:1px solid var(--thinRuleColor);border-radius:var(--radius-md);width:100%;position:relative;text-decoration:none;color:inherit;padding:var(--spacing-lg);transition:var(--defaultTransition);box-shadow:0 1px 3px #0000000d}.card-description{color:var(--foregroundColor)}.card p:last-child{margin-bottom:0}.card:hover{background-color:var(--backgroundTransparentColor);border:1px solid var(--thinRuleColor);color:inherit}.card:visited{color:inherit}.hero-center{height:calc(90vh - 200px);display:flex;justify-content:center;align-items:center;border:2px dashed var(--thinRuleColor);border-radius:var(--radius-md)}.list{display:grid;grid-template-columns:repeat(auto-fit,minmax(450px,1fr));gap:var(--spacing-lg);max-width:1200px}.mono{font-family:var(--monoFontFamily)}.nowrap{white-space:nowrap;display:inline-block}.no-select{user-select:none}.no-gap{gap:0!important}.no-top-margin{margin-top:0}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.clipboard-popup{position:fixed;transform:translate(-50%) translateY(4px);background-color:var(--backgroundColor);color:var(--textColor);border:1px solid var(--thinRuleColor);padding:var(--spacing-xs) 10px;font-size:var(--font-size-sm);border-radius:var(--radius-sm);pointer-events:none;z-index:1000;opacity:0;animation:fade-float-in-out 1s cubic-bezier(.4,0,.3,1) forwards;white-space:nowrap}.date-separator{display:inline-block;padding:0 .2em}.buttons{display:flex;gap:var(--spacing-md);margin-top:var(--spacing-lg);flex-wrap:nowrap}.buttons-compact{margin-top:var(--spacing-sm)}.button-base{font-size:var(--font-size-md);line-height:var(--line-height-tight);letter-spacing:var(--letter-spacing-normal);background-color:var(--buttonBackground);padding:12px 30px;border-radius:var(--radius-sm);font-weight:700;color:var(--inputTextColor);border:none;cursor:pointer;transition:background-color .2s ease;letter-spacing:.02em;min-width:120px;text-align:center}.button-base:hover{filter:brightness(1.1)}.button-base:active{filter:brightness(.95)}.button-base.stop{background-color:var(--buttonBackgroundPressed)}.button-base.disabled{background-color:var(--disabledColor);cursor:not-allowed;opacity:.7}a.button-link{border-bottom:none;color:var(--inputTextColor)}a.button-link:hover{color:var(--inputTextColor)}.pills{display:grid;grid-template-columns:repeat(auto-fill,minmax(60px,1fr));gap:var(--spacing-xs);margin-top:var(--spacing-xs)}.pill-base{padding:var(--spacing-xs) var(--spacing-xs);background-color:var(--thinRuleColor);border-radius:var(--radius-sm);color:var(--inputTextColor);text-align:center;cursor:pointer;transition:background-color .3s ease,color .3s ease,border-color .3s ease}.pill-base:hover:not(.disabled){background:#50dc7833}.pill-base:active:not(.disabled){background:#50dc784d}.pill-base.disabled{cursor:default;opacity:.4}.pill-base.selected{background-color:#50dc7833;border-color:var(--accessColor);color:var(--textColor);font-weight:500}.input{margin:0;background-color:var(--inputBackgroundColor);color:var(--inputTextColor);border:1px solid var(--thinRuleColor);border-radius:var(--radius-sm);padding:var(--spacing-xs) 0;text-align:center;transition:var(--defaultTransition)}.input:focus{border-color:var(--accentColor);outline:none}input::placeholder{opacity:.6}.site-footer{padding:var(--spacing-xl) 0;color:var(--foregroundColor)}.footer-container{width:100%;margin:0}.site-footer{flex-shrink:0}@keyframes fade-float-in-out{0%{opacity:0;transform:translate(-50%) translateY(4px)}25%{opacity:1;transform:translate(-50%) translateY(0)}75%{opacity:1;transform:translate(-50%) translateY(0)}to{opacity:0;transform:translate(-50%) translateY(-4px)}}@keyframes target-fade{0%{background-color:color-mix(in srgb,var(--accentColor) 20%,transparent)}to{background-color:transparent}}:target{animation:target-fade 2s ease-in-out;scroll-margin-top:var(--spacing-md);border-radius:var(--radius-sm)}@media (max-width: 1023px){h1,h2,h3,h4,h5,h6,p,ul,ol{max-width:100%}.list{grid-template-columns:1fr;gap:var(--spacing-md)}.box{padding:var(--spacing-md)}.main{margin-inline:var(--marginLeftCompact) var(--marginRightCompact);max-width:calc(100% - var(--marginLeftCompact) - var(--marginRightCompact))}.button-base{min-width:100px}.info-box{padding:var(--spacing-xs) var(--spacing-md)}.pills{grid-template-columns:repeat(auto-fill,minmax(60px,1fr))}.card{padding:var(--spacing-md)}.input{width:60px;padding:var(--spacing-xs) var(--spacing-xs)}.has-tooltip:after{left:auto;right:0;transform:translateY(calc(-1 * var(--spacing-xs)));min-width:170px;width:auto}}
