:root{--color-bg:#fff;--color-bg-secondary:#f5f5f5;--color-text:#1a1a1a;--color-text-secondary:#666;--color-primary:#06c;--color-primary-hover:#0052a3;--color-border:#e0e0e0;--color-text-muted:#999;--font-sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,sans-serif;--font-mono:"Fira Code","JetBrains Mono",Consolas,Monaco,monospace;--font-size-xs:0.75rem;--font-size-sm:0.875rem;--font-size-base:1rem;--font-size-lg:1.25rem;--font-size-xl:1.5rem;--font-size-2xl:2rem;--spacing-xs:0.25rem;--spacing-sm:0.5rem;--spacing-md:1rem;--spacing-lg:1.5rem;--spacing-xl:2rem;--spacing-2xl:3rem;--max-width:1200px;--content-width:768px;--transition-fast:150ms ease;--transition-normal:300ms ease;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--shadow-sm:0 1px 2px rgb(0 0 0/5%);--shadow-md:0 4px 6px rgba(0,0,0,.1);--shadow-lg:0 10px 15px rgba(0,0,0,.15)}@media(prefers-color-scheme:dark){:root{--color-bg:#1a1a1a;--color-bg-secondary:#2a2a2a;--color-text:#f0f0f0;--color-text-secondary:#a0a0a0;--color-primary:#66b3ff;--color-primary-hover:#9cf;--color-border:#404040;--color-text-muted:#777}}.post-header{background-color:var(--palette-background-dimmed);padding:76px 12px 36px;text-align:center}.post-header--has-cover{padding-bottom:164px}.post-header__tags{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}.post-header__tags a{color:var(--palette-link)}.post-header__title{font-weight:700;margin-bottom:12px}.post__cover{margin:-112px auto 0;padding:0 12px;width:clamp(0px,1140px,100%)}.post__cover img{aspect-ratio:16/9;border:5px solid var(--palette-background);border-radius:16px;display:block;height:auto;-o-object-fit:cover;object-fit:cover;width:100%}.post__meta{padding:24px 12px 0}.post__body,.post__meta{margin:0 auto;width:clamp(0px,880px,100%)}.post__body{font-size:1rem;line-height:1.625rem;padding:48px 12px 12px;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;word-wrap:break-word}.post__body h1{font-size:2.0275rem;font-weight:700;line-height:3.04125rem;margin-bottom:1em}.post__body h2{font-size:1.801875rem;font-weight:700;line-height:2.7028125rem;margin-bottom:.8em}.post__body h3{font-size:1.601875rem;font-weight:700;line-height:2.4028125rem;margin-bottom:.6em}.post__body h4{font-size:1.42375rem;font-weight:700;line-height:2.135625rem;margin-bottom:.4em}.post__body h5{font-size:1.265625rem;font-weight:700;line-height:1.8984375rem;margin-bottom:.2em}.post__body h6{font-size:1.125rem;font-weight:700;line-height:1.6875rem;margin-bottom:0}.post__body p{font-size:1rem;line-height:1.625rem;margin-bottom:.65em}.post__body ol,.post__body ul{margin-bottom:1em}.post__body img,.post__body video{height:auto;max-width:100%}.post__body iframe{height:auto;width:100%}.post__body b,.post__body strong{font-weight:600}.post__body small{font-size:90%}.post__body sub{bottom:-.25em}.post__body sup{top:-.5em}.post__body a{color:var(--palette-link)}@media(any-hover:hover)and (any-pointer:fine){.post__body a:hover{color:var(--palette-highlight)}}.post__body figure{margin-bottom:1em}.post__body code{background-color:var(--palette-background-dimmed);border-radius:4px;font-family:Fira Code,monospace;font-size:90%;overflow-x:auto}html:not([data-theme=dark]) .post__body code[data-theme*=" "],html:not([data-theme=dark]) .post__body code[data-theme*=" "] span{background-color:var(--shiki-light-bg);color:var(--shiki-light)}html[data-theme=dark] .post__body code[data-theme*=" "],html[data-theme=dark] .post__body code[data-theme*=" "] span{background-color:var(--shiki-dark-bg);color:var(--shiki-dark)}html[data-theme=sepia] .post__body code[data-theme*=" "],html[data-theme=sepia] .post__body code[data-theme*=" "] span{background-color:var(--shiki-sepia-bg);color:var(--shiki-sepia)}.post__body pre code{background-color:inherit;display:block}.post__body hr{background-color:var(--palette-sub);border:0;border-bottom:1px solid var(--palette-sub-opacity);height:.25em;margin:24px 0}.post__body ol{list-style:decimal;margin-left:1.5em}.post__body ul{list-style:disc;margin-left:1.5em}.post__body blockquote{border-left:.25em solid var(--palette-sub-opacity);margin:0 0 1em;padding:.5em 1em}.post__body blockquote p:last-child{margin-bottom:0}.post__body table{border:1px solid var(--palette-sub-opacity);border-collapse:collapse;border-spacing:0;margin-bottom:1em;width:100%}.post__body table td,.post__body table th{border:1px solid var(--palette-sub-opacity);padding:.5em 1em}.post__body table th{background-color:var(--palette-sub-opacity);font-weight:700}.post__body figure.image-block figcaption{font-size:.79rem;line-height:1.027rem;margin-top:.2em;text-align:center}.post__body .table{overflow-x:auto}.post__body .iframe-container{aspect-ratio:var(--aspect-w,16)/var(--aspect-h,9);margin-bottom:1em;position:relative;width:100%}.post__body .iframe-container iframe{height:100%;left:0;position:absolute;top:0;width:100%}.post-related-posts{margin:0 auto;padding-bottom:32px;width:clamp(0px,880px,100%)}.post-related-posts__more,.post-related-posts__text,.post-related-posts__title{text-align:center}.post-related-posts__title{font-weight:700;margin-bottom:16px}.post-related-posts__title a{text-decoration:underline}.post-related-posts__text{margin-bottom:24px}.post-related-posts__more i{display:inline-block;transition:transform .15s ease-in-out}@media(any-hover:hover)and (any-pointer:fine){.post-related-posts__more a:hover i{transform:translateX(4px)}}pre{background-color:var(--palette-background-dimmed);border-radius:8px;font-size:.875rem;line-height:1.6;margin:24px 0;overflow-x:auto;padding:24px;position:relative}pre code{background:none;font-size:inherit;padding:0}.copy-code{background-color:var(--palette-background);border:1px solid var(--palette-grayscale-300);border-radius:4px;cursor:pointer;font-size:.75rem;opacity:0;padding:4px 8px;position:absolute;right:8px;top:8px;transition:opacity .15s}pre:hover .copy-code{opacity:1}.copy-code:hover{background-color:var(--palette-background-transparent);border-color:var(--palette-grayscale-300);color:var(--palette-text)}:not(pre)>code{background-color:var(--palette-background-dimmed);border-radius:4px;font-size:.875em;padding:.15em .4em}.athl,.hljs{--syntax-bg:#fff;--syntax-fg:#24292e;--syntax-comment:#6a737d;--syntax-string:#032f62;--syntax-keyword:#d73a49;--syntax-function:#6f42c1;--syntax-type:#005cc5;--syntax-constant:#005cc5;--syntax-variable:#e36209;--syntax-operator:#d73a49;--syntax-punctuation:#24292e;--syntax-property:#005cc5;--syntax-tag:#22863a;--syntax-attribute:#6f42c1;--syntax-number:#005cc5;--syntax-boolean:#005cc5;--syntax-error:#cb2431;--syntax-diff-plus:#22863a;--syntax-diff-minus:#cb2431;--syntax-diff-delta:#6f42c1}html[data-theme=dark] .athl,html[data-theme=dark] .hljs{--syntax-bg:#1a1b26;--syntax-fg:#a9b1d6;--syntax-comment:#565f89;--syntax-string:#9ece6a;--syntax-keyword:#bb9af7;--syntax-function:#7aa2f7;--syntax-type:#2ac3de;--syntax-constant:#ff9e64;--syntax-variable:#c0caf5;--syntax-operator:#89ddff;--syntax-punctuation:#a9b1d6;--syntax-property:#73daca;--syntax-tag:#f7768e;--syntax-attribute:#bb9af7;--syntax-number:#ff9e64;--syntax-boolean:#ff9e64;--syntax-error:#f7768e;--syntax-diff-plus:#9ece6a;--syntax-diff-minus:#f7768e;--syntax-diff-delta:#e0af68}html[data-theme=sepia] .athl,html[data-theme=sepia] .hljs{--syntax-bg:#fdf6e3;--syntax-fg:#657b83;--syntax-comment:#93a1a1;--syntax-string:#2aa198;--syntax-keyword:#859900;--syntax-function:#268bd2;--syntax-type:#b58900;--syntax-constant:#cb4b16;--syntax-variable:#cb4b16;--syntax-operator:#657b83;--syntax-punctuation:#657b83;--syntax-property:#268bd2;--syntax-tag:#268bd2;--syntax-attribute:#b58900;--syntax-number:#d33682;--syntax-boolean:#cb4b16;--syntax-error:#dc322f;--syntax-diff-plus:#859900;--syntax-diff-minus:#dc322f;--syntax-diff-delta:#b58900}.athl,.hljs{background-color:var(--syntax-bg);color:var(--syntax-fg)}.hljs .comment,.hljs .comment-documentation,.hljs .comment-error,.hljs .comment-hint,.hljs .comment-note,.hljs .comment-todo,.hljs .comment-warning{color:var(--syntax-comment);font-style:italic}.hljs .character,.hljs .character-special,.hljs .string,.hljs .string-documentation,.hljs .string-escape,.hljs .string-plain-css,.hljs .string-regexp,.hljs .string-special,.hljs .string-special-path,.hljs .string-special-symbol,.hljs .string-special-symbol-ruby,.hljs .string-special-url,.hljs .string-special-url-html{color:var(--syntax-string)}.hljs .keyword,.hljs .keyword-conditional,.hljs .keyword-conditional-ternary,.hljs .keyword-coroutine,.hljs .keyword-debug,.hljs .keyword-directive,.hljs .keyword-directive-css,.hljs .keyword-directive-define,.hljs .keyword-exception,.hljs .keyword-export,.hljs .keyword-function,.hljs .keyword-import,.hljs .keyword-import-c,.hljs .keyword-import-cpp,.hljs .keyword-modifier,.hljs .keyword-operator,.hljs .keyword-repeat,.hljs .keyword-return,.hljs .keyword-type{color:var(--syntax-keyword);font-weight:600}.hljs .function,.hljs .function-builtin,.hljs .function-builtin-bash,.hljs .function-call,.hljs .function-macro,.hljs .function-method,.hljs .function-method-call,.hljs .function-method-call-php,.hljs .function-method-php{color:var(--syntax-function)}.hljs .constructor,.hljs .constructor-lua,.hljs .constructor-python,.hljs .type,.hljs .type-builtin,.hljs .type-css,.hljs .type-definition,.hljs .type-tag-css{color:var(--syntax-type)}.hljs .constant,.hljs .constant-builtin,.hljs .constant-java,.hljs .constant-macro{color:var(--syntax-constant)}.hljs .variable,.hljs .variable-builtin,.hljs .variable-member,.hljs .variable-parameter,.hljs .variable-parameter-bash,.hljs .variable-parameter-builtin{color:var(--syntax-variable)}.hljs .operator{color:var(--syntax-operator)}.hljs .punctuation-bracket,.hljs .punctuation-delimiter,.hljs .punctuation-delimiter-regex,.hljs .punctuation-special{color:var(--syntax-punctuation)}.hljs .property,.hljs .property-class-css,.hljs .property-css,.hljs .property-id-css,.hljs .property-json,.hljs .property-scss,.hljs .property-toml,.hljs .property-yaml{color:var(--syntax-property)}.hljs .tag,.hljs .tag-attribute,.hljs .tag-builtin,.hljs .tag-delimiter{color:var(--syntax-tag)}.hljs .attribute,.hljs .attribute-builtin{color:var(--syntax-attribute)}.hljs .number,.hljs .number-css,.hljs .number-float{color:var(--syntax-number)}.hljs .boolean{color:var(--syntax-boolean)}.hljs .error{color:var(--syntax-error)}.hljs .diff-plus{color:var(--syntax-diff-plus)}.hljs .diff-minus{color:var(--syntax-diff-minus)}.hljs .diff-delta{color:var(--syntax-diff-delta)}.hljs .label,.hljs .label-yaml{color:var(--syntax-property)}.hljs .import,.hljs .module,.hljs .module-builtin,.hljs .namespace{color:var(--syntax-type)}.hljs .markup,.hljs .markup-environment,.hljs .markup-environment-name{color:var(--syntax-fg)}.hljs .markup-heading,.hljs .markup-heading-1,.hljs .markup-heading-2,.hljs .markup-heading-3,.hljs .markup-heading-4,.hljs .markup-heading-5,.hljs .markup-heading-6{color:var(--syntax-keyword);font-weight:600}.hljs .markup-italic{font-style:italic}.hljs .markup-strong{font-weight:700}.hljs .markup-strikethrough{text-decoration:line-through}.hljs .markup-underline{text-decoration:underline}.hljs .markup-link,.hljs .markup-link-label,.hljs .markup-link-label-html,.hljs .markup-link-url,.hljs .markup-raw,.hljs .markup-raw-block{color:var(--syntax-string)}.hljs .markup-quote{color:var(--syntax-comment);font-style:italic}.hljs .markup-list,.hljs .markup-list-checked,.hljs .markup-list-unchecked{color:var(--syntax-punctuation)}.hljs .markup-math{color:var(--syntax-number)}.prev-next-post{background-color:var(--palette-selection);display:flex;flex-wrap:wrap;justify-content:space-between;margin:48px auto;overflow:hidden;width:clamp(0px,880px,100%)}@media screen and ((min-width:720px)){.prev-next-post{border-radius:8px}}.prev-next-post-post{align-items:flex-end;background-color:#000;color:#fff;display:flex;flex-direction:column;flex-grow:1;flex-wrap:wrap;justify-content:center;margin-left:auto;overflow:hidden;position:relative;text-align:right;width:100%}.prev-next-post-post:hover{color:#fff}.prev-next-post-post--previous{align-items:flex-start;margin-left:0;text-align:left}.prev-next-post-post__meta{background:linear-gradient(-90deg,rgba(0,0,0,.8),rgba(0,0,0,.2) 80%);padding:24px 16px;position:relative;width:100%}.prev-next-post-post--previous .prev-next-post-post__meta{background:linear-gradient(90deg,rgba(0,0,0,.8),rgba(0,0,0,.2) 80%)}.prev-next-post-post__label{align-items:center;display:flex;flex-direction:row-reverse}.prev-next-post-post__label i{margin-left:4px}.prev-next-post-post--previous .prev-next-post-post__label{flex-direction:row}.prev-next-post-post--previous .prev-next-post-post__label i{margin-left:0;margin-right:4px}.prev-next-post-post__title{display:block;font-weight:700;margin-top:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.prev-next-post-post__cover{height:100%;left:0;-o-object-fit:cover;object-fit:cover;opacity:.25;pointer-events:none;position:absolute;top:0;transition:transform .15s ease-in-out;width:100%}@media(any-hover:hover)and (any-pointer:fine){.prev-next-post-post:hover .prev-next-post-post__cover{transform:scale(1.15)}}.prev-next-post-post__cover img{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}@media screen and ((min-width:720px)){.prev-next-post-post{width:50%}}.post-comment{border-bottom:2px solid var(--palette-main);border-top:2px solid var(--palette-main)}.comment-list,.comments{padding:0 12px}.comment-list{list-style:none;margin:24px auto;width:clamp(0px,880px,100%)}.comment-list>ul{list-style:none;padding-left:52px}.comment-list__empty{color:var(--palette-comment-text);padding:24px;text-align:center}.comment-list__error{background:rgba(220,53,69,.1);border-radius:8px;color:#dc3545;padding:12px;text-align:center}.comment-bubble{display:flex;list-style:none;padding:12px 0}.comment-bubble--author{flex-direction:row-reverse}.comment-bubble--border{border-top:1px solid var(--palette-main)}.comment-bubble__avatar{border-radius:50%;flex-shrink:0;height:40px;margin-right:12px;margin-top:12px;overflow:hidden;width:40px}.comment-bubble--author .comment-bubble__avatar{margin-left:12px;margin-right:0}.comment-bubble__avatar img{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.comment-bubble__content{display:flex;flex-wrap:wrap;max-width:100%;min-width:0;padding:12px 0}.comment-bubble--author .comment-bubble__content{flex-direction:row-reverse}.comment-bubble__footer,.comment-bubble__name{width:100%}.comment-bubble--author .comment-bubble__footer,.comment-bubble--author .comment-bubble__name{text-align:right}.comment-bubble__name{font-size:.875rem}.comment-bubble__name a,.comment-bubble__name span{color:var(--palette-text);font-weight:600;text-decoration:none}.comment-bubble__name a:hover{text-decoration:underline}.comment-bubble__text{background-color:var(--palette-comment-2);border-radius:8px;margin-top:4px;max-width:100%;padding:8px 12px;position:relative;transform-origin:top left;white-space:pre-wrap;word-break:break-all}.comment-bubble__text:after{border-width:0;border-bottom:0 solid var(--palette-comment-2);border-left:20px solid var(--palette-comment-2);border-radius:50%;border-right:20px solid var(--palette-comment-2);border-top:0 solid var(--palette-comment-2);box-sizing:content-box;content:"";height:25px;position:absolute;width:17.5px;clip:rect(0,41px,15px,28px);display:block;left:-37.4px;top:5px;z-index:1}.comment-bubble--author .comment-bubble__text{background-color:var(--palette-comment)}.comment-bubble--author .comment-bubble__text:after{left:auto;right:-37.3px;clip:rect(0,28px,10px,19px);border-color:var(--palette-comment)}.comment-bubble__footer{align-items:center;display:flex;gap:8px;margin-top:4px}.comment-bubble__date,.comment-bubble__reply-btn{color:var(--palette-comment-text)}.comment-bubble__reply-btn{background:none;border:none;cursor:pointer;flex-shrink:0;padding:0}.comment-bubble__reply-btn:hover{color:var(--palette-theme);text-decoration:underline}.comment-content__image,.comment-content__video{height:auto;max-width:100%}.comment-content__code{background-color:var(--palette-background-dimmed);border-radius:4px;font-family:Fira Code,monospace;font-size:90%;overflow-x:auto;padding:.2em .4em}.comment-content p:not(:last-child),.comment-content__code:not(:last-child),.comment-content__image:not(:last-child),.comment-content__video:not(:last-child){margin-bottom:.65em}.comment-content a{color:var(--palette-link)}.comment-form{display:flex;margin:24px auto;padding:0 12px;width:clamp(0px,880px,100%)}.comment-form__avatar{flex-shrink:0;margin:12px 12px 0 0}.comment-form__avatar img{border-radius:50%;height:40px;width:40px}.comment-form__form{background-color:var(--palette-comment-2);border-radius:8px;display:flex;flex-direction:column;margin-top:24px;padding:12px;position:relative;width:100%}.comment-form__form:after{border-width:0;border-bottom:0 solid var(--palette-comment-2);border-left:20px solid var(--palette-comment-2);border-radius:50%;border-right:20px solid var(--palette-comment-2);border-top:0 solid var(--palette-comment-2);box-sizing:content-box;content:"";height:25px;position:absolute;width:17.5px;clip:rect(0,41px,15px,28px);display:block;left:-37.4px;top:5px;z-index:1}.comment-form__replying{align-items:center;background:rgba(241,113,140,.15);border-radius:4px;display:flex;gap:8px;margin-bottom:12px;padding:8px 12px}.comment-form__cancel{background:none;border:none;color:#dc3545;cursor:pointer;margin-left:auto}.comment-form__cancel:hover{text-decoration:underline}.comment-form__input{background:var(--palette-background);border:1px solid var(--palette-main);border-radius:8px;color:var(--palette-text);margin-bottom:8px;padding:8px 16px;width:100%}.comment-form__input:focus{border-color:var(--palette-theme);box-shadow:0 0 0 3px rgba(241,113,140,.2);outline:none}.comment-form__input::-moz-placeholder{color:var(--palette-comment-text)}.comment-form__input::placeholder{color:var(--palette-comment-text)}.comment-form__textarea{background:var(--palette-background);border:1px solid var(--palette-main);border-radius:8px;color:var(--palette-text);height:7em;padding:8px 16px;resize:vertical;transition:border-color .2s,box-shadow .2s;width:100%}.comment-form__textarea:focus{border-color:var(--palette-theme);box-shadow:0 0 0 3px rgba(241,113,140,.2);outline:none}.comment-form__textarea::-moz-placeholder{color:var(--palette-comment-text)}.comment-form__textarea::placeholder{color:var(--palette-comment-text)}.comment-form__buttons{margin-top:24px;text-align:right}.comment-form__submit{align-items:center;background-color:var(--palette-theme);border:none;border-radius:50%;color:var(--palette-comment-2);cursor:pointer;display:inline-flex;justify-content:center;padding:8px;transition:background-color .3s cubic-bezier(.4,0,.2,1)}.comment-form__submit:disabled{background-color:var(--palette-comment);cursor:not-allowed}.comment-form__submit svg{height:24px;width:24px}.comment-form__error{color:#dc3545;font-size:.875rem;margin-top:8px}.post-grid{display:grid;gap:.75em;grid-template-columns:repeat(auto-fill,minmax(360px,1fr))}.post-grid__more{margin-top:12px;text-align:center}.post-grid__more a>i,.post-grid__more button>i{margin-left:4px}.post-card{display:flex;flex-direction:column;padding:16px 20px;transition:transform .15s ease-in-out}@media(any-hover:hover)and (any-pointer:fine){.post-card:hover{transform:translateY(-5px)}}.post-card__image{border-radius:4px;flex-shrink:0;height:0;margin-bottom:12px;overflow:hidden;padding-bottom:56.25%;position:relative}.post-card__image,.post-card__image img{transition:transform .15s ease-in-out;width:100%}.post-card__image img{display:block;height:100%;left:0;-o-object-fit:cover;object-fit:cover;position:absolute;top:0}@media(any-hover:hover)and (any-pointer:fine){.post-card:hover .post-card__image img{transform:scale(1.15)}}.post-card__header{display:flex;flex-direction:column;flex-grow:1}.post-card__title{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;font-weight:700;overflow:hidden}.post-card__description{margin-bottom:12px;max-height:4.33265625rem;overflow:hidden;position:relative}.post-card__description:after{background-image:linear-gradient(45deg,var(--palette-background-transparent),var(--palette-background) 90%);bottom:0;content:"";height:1.44421875rem;pointer-events:none;position:absolute;right:0;width:30%}.post-card__time{display:block;margin-top:auto;text-align:right}.post-card__tags{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}.related-posts{border-top:1px solid var(--palette-grayscale-200);margin-top:2em;padding-top:1.5em}.related-posts__title{font-size:1.5em;font-weight:700;margin:0 0 1.5em}