@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0;mix-blend-mode:plus-lighter}to{opacity:1;mix-blend-mode:plus-lighter}}@keyframes astroFadeOut{0%{opacity:1;mix-blend-mode:plus-lighter}to{opacity:0;mix-blend-mode:plus-lighter}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media (prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*),[data-astro-transition-scope]{animation:none!important}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:"Inter Variable", -apple-system, BlinkMacSystemFont, Arial, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, STXihei, sans-serif;--font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--font-mono:"Fira Code Variable", SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace;--color-gray-100:oklch(96.7% .003 264.542);--color-gray-900:oklch(21% .034 264.665);--spacing:.25rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--radius-sm:3px;--radius-md:8px;--ease-out:cubic-bezier(0, 0, .2, 1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-primary:#1a1a1a;--color-accent:#1a1a1a;--color-heading:#111;--width-content:740px;--content-measure:clamp(736px, 72vw, 1120px);--width-container:var(--width-content);--radius-base:4px;--font-display:var(--font-sans);--font-body:var(--font-sans);--font-mono-ui:var(--font-sans);--font-mono-label:"Departure Mono", "Fira Code Variable", SFMono-Regular, Menlo, Monaco, Consolas, monospace;--font-date:var(--font-mono-label);--font-code:"Fira Code Variable", "JetBrains Mono", "Cascadia Code", "SF Mono", SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.top-1{top:var(--spacing)}.top-20{top:calc(var(--spacing) * 20)}.isolate{isolation:isolate}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-full{width:100%;height:100%}.flex-shrink{flex-shrink:1}.grow{flex-grow:1}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.resize{resize:both}.flex-wrap{flex-wrap:wrap}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.rounded{border-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.font-display{font-family:var(--font-display)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-wrap{text-wrap:wrap}.text-\[var\(--color-text-secondary\)\]{color:var(--color-text-secondary)}.uppercase{text-transform:uppercase}.underline{text-decoration-line:underline}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-filter{backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}@media (hover:hover){.hover\:text-primary:hover{color:var(--color-primary)}}}:root{--measure-single:var(--reading-width);--measure-surface:var(--content-width);--ease-out-quint:var(--ease-standard);--ease-out-expo:var(--ease-emphasized);--font-body:var(--font-sans);--font-heading:var(--font-display);--font-mono:var(--font-code);--font-serif:Georgia, Cambria, "Times New Roman", Times, serif;--font-nav:var(--font-heading);--text-caption:11.5px;--text-meta:12.5px;--text-body:16px;--text-subtitle:18px;--text-section-heading:23.2px;--text-nav:13.5px;--text-project-title:16.8px;--text-project-excerpt:13.44px;--text-timeline-title:17.28px;--text-timeline-role:14.72px;--text-timeline-detail:13.76px;--text-timeline-title-secondary:12.8px;--text-sm:14px;--text-reading-meta:var(--text-sm);--text-toc:var(--text-reading-meta);--text-post-date:13px;--text-portfolio-meta:var(--text-caption);--text-h1:35.2px;--text-h2:26.88px;--text-h3:21.44px;--text-h4:17.6px;--text-h1-md:28.8px;--text-h2-md:23.2px;--text-h3-md:18.4px;--text-h4-md:16px;--text-h1-sm:24.8px;--text-h2-sm:20.8px;--text-h3-sm:16.8px;--article-title-size:clamp(29.6px, 4.5vw, 41.92px);--article-title-line-height:1.18;--article-title-gap:var(--space-2,8px);--article-header-gap:clamp(40px, 6vw, 60.8px);--article-header-to-content-gap:clamp(24px, 3.5vw, 36px);--prose-width:var(--reading-width,663px);--prose-body-size:18px;--prose-body-line-height:1.8;--prose-paragraph-gap:24px;--prose-heading-gap-before:clamp(35.2px, 5vw, 52px);--prose-heading-gap-after:13.6px;--prose-heading-line-height:1.25;--prose-accent:oklch(55.52% .223 266);--shadow-color:223deg 5% 80%;--prose-list-marker-width:26px;--prose-list-marker-gap:8px;--prose-list-indent:calc(var(--prose-list-marker-width) + var(--prose-list-marker-gap));--prose-list-item-gap:calc(var(--prose-paragraph-gap) / 2);--prose-list-marker:var(--prose-accent);--prose-block-gap:24px;--prose-media-gap:var(--prose-block-gap,24px);--prose-media-radius:16px;--prose-caption-gap:10px;--prose-media-bg:var(--color-gray-100);--avatar-radius:16px;--avatar-opacity:.96;--avatar-transition:opacity var(--duration-fast) var(--ease-standard), filter var(--duration-fast) var(--ease-standard);--avatar-filter:saturate(.92) contrast(.98);--avatar-background:var(--color-bg-card);--avatar-border-color:var(--color-border);--avatar-shadow:inset 0 0 0 1px var(--color-bg), 0 12px 28px #1111111f}@supports (color:color-mix(in lab, red, red)){:root{--avatar-shadow:inset 0 0 0 1px color-mix(in srgb, var(--color-bg) 40%, transparent), 0 12px 28px color-mix(in srgb, var(--color-heading) 12%, transparent)}}:root{--avatar-media-fit:cover;--avatar-media-position:center;--tweet-card-radius:12px;--tweet-card-border-color:var(--color-border);--tweet-card-background:var(--color-bg-card);--tweet-card-padding:var(--space-4);--tweet-card-gap:var(--space-4);--tweet-card-shadow:.5px 1px 1px hsl(var(--shadow-color) / .333);--tweet-avatar-size:40px;--tweet-icon-color:#3ba9ee;--tweet-action-icon-size:24px;--prose-callout-radius:8px;--prose-callout-padding:16px;--prose-callout-badge-fg:var(--color-bg);--prose-kbd-bg:var(--color-bg-card);--prose-kbd-border:var(--color-border-primary);--prose-kbd-shadow:hsl(var(--shadow-color) / .12);--prose-details-border:var(--color-border);--prose-details-radius:12px;--content-width:740px;--reading-width:663px;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-7:40px;--space-8:48px;--section-gap:clamp(52px, 7vw, 86.4px);--section-gap-major:clamp(64px, 8vw, 100px);--section-heading-gap:clamp(16px, 2.2vw, 23.2px);--section-item-gap:18.4px;--timeline-dot-size:10px;--timeline-line-width:1.5px;--timeline-entry-pad:clamp(9.92px, 1.5vw, 13.6px);--timeline-title-line-box:22.88px;--timeline-group-gap:8px;--metadata-gap:24px;--metadata-label-size:11.52px;--metadata-value-size:12.48px;--card-padding:20px;--card-radius:var(--radius-md,8px);--detail-nav-gap:var(--space-5);--detail-nav-border-color:var(--color-border);--detail-nav-label-size:var(--text-meta);--detail-nav-title-size:var(--text-sm);--filter-gap:var(--space-5);--filter-text-size:var(--text-meta);--filter-active-color:var(--color-heading);--filter-muted-color:var(--color-text-tertiary);--filter-padding-x:2px;--filter-padding-y:6px;--filter-transition:.2s var(--ease-standard);--filter-underline-size:2px;--filter-underline-color:var(--color-heading);--back-to-top-size:40px;--back-to-top-size-sm:36px;--back-to-top-offset:20px;--back-to-top-offset-sm:12px;--back-to-top-icon-size:16px;--utility-control-radius:12px;--utility-control-transition:.18s var(--ease-standard);--duration-fast:.15s;--duration-normal:.3s;--ease-standard:cubic-bezier(.22, 1, .36, 1);--ease-emphasized:cubic-bezier(.16, 1, .3, 1);color-scheme:light;--color-primary:#1a1a1a;--color-accent:#1a1a1a;--color-heading:#111;--color-bg:#fff;--color-bg-card:#f7f7f7;--color-text:#2b2b2b;--color-text-secondary:#595959;--color-text-tertiary:#6b6b6b;--color-border:#e6e6e6;--color-border-primary:#d6d6d6;--color-gray-100:#f0f0f0;--color-gray-900:#111;--color-link:#111;--color-link-hover:#000;--color-code-bg:#f3f3f3;--color-cover-plate:#f0f0f0;--prose-callout-border:oklch(53.19% .212 266/.05);--prose-callout-info-bg:oklch(53.19% .212 266/.05);--prose-callout-info-badge:oklch(61.53% .1675 266);--prose-callout-danger-bg:oklch(44.11% .171 22/.1);--prose-callout-danger-badge:oklch(44.11% .171 22);--prose-callout-warning-bg:oklch(94.22% .039 60);--prose-callout-warning-badge:oklch(70.93% .18 60);--code-snippet-background:oklch(98.08% .008 266);--token-comment:oklch(50.13% .047 266);--token-selector:oklch(55.52% .223 266);--token-symbol:oklch(36.42% .168 266);--token-operator:oklch(50.13% .047 266);--token-keyword:oklch(46.51% .225 266);--token-function:oklch(55.6% .24 352);--token-punctuation:oklch(55.52% .223 266);--code-emphasis:oklch(55.52% .223 266/.05);--code-accent:oklch(55.52% .223 266);--code-foreground:oklch(98.08% .008 266)}:root.dark{color-scheme:dark;--color-primary:#ededed;--color-accent:#ededed;--prose-accent:oklch(61.53% .1675 262.04);--shadow-color:223deg 5% 1%;--color-bg:#111;--color-bg-card:#1a1a1a;--color-text:#c9c9c9;--color-text-secondary:#9a9a9a;--color-text-tertiary:#a3a3a3;--color-border:#2a2a2a;--color-border-primary:#3a3a3a;--prose-callout-border:oklch(64.6% .172 262.04/.07);--prose-callout-info-bg:oklch(64.6% .172 262.04/.07);--prose-callout-info-badge:oklch(64.6% .172 262.04);--prose-callout-danger-bg:oklch(64.51% .204 22/.1);--prose-callout-danger-badge:oklch(60.12% .235 22);--prose-callout-warning-bg:oklch(28.78% .067 60);--prose-callout-warning-badge:oklch(74.12% .181 60);--color-gray-100:#1f1f1f;--color-gray-900:#ededed;--color-heading:#fff;--color-link:#f0f0f0;--color-link-hover:#fff;--color-code-bg:var(--color-gray-100);--color-cover-plate:#f0f0f0;--code-snippet-background:oklch(16.75% .011 262.04);--token-comment:oklch(66.65% .04 262.04);--token-selector:oklch(81.53% .078 262.04);--token-symbol:oklch(61.53% .1675 262.04);--token-operator:oklch(31.24% .075 60);--token-keyword:oklch(71.65% .122 262.04);--token-function:oklch(86.75% .086 352);--token-punctuation:oklch(81.53% .078 262.04);--code-emphasis:oklch(61.53% .1675 262.04/.07);--code-accent:oklch(61.53% .1675 262.04);--code-foreground:oklch(17.8% .012 262.04)}@media (width<=767px){:root{--prose-body-size:16.4px;--prose-paragraph-gap:22.4px}}@font-face{font-family:Departure Mono;src:url(/fonts/DepartureMono-Regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}html,body{font-family:var(--font-body)}input,button,select,textarea{font-family:var(--font-sans)}a{color:var(--color-link);cursor:pointer;text-decoration:none;transition:color .3s}a:hover{color:var(--color-link-hover);text-decoration:none}h1,h2,h3,h4,h5,h6{font-family:var(--font-display);letter-spacing:-.02em;margin-top:0;margin-bottom:.5em;font-weight:600;line-height:1.2}h1{font-size:var(--text-h1)}h2{font-size:var(--text-h2)}h3{font-size:var(--text-h3)}h4{font-size:var(--text-h4)}@media (width<=767px){h1{font-size:var(--text-h1-md)}h2{font-size:var(--text-h2-md)}h3{font-size:var(--text-h3-md)}h4{font-size:var(--text-h4-md)}}@media (width<=480px){h1{font-size:var(--text-h1-sm)}h2{font-size:var(--text-h2-sm)}h3{font-size:var(--text-h3-sm)}}html{scroll-behavior:smooth;-webkit-tap-highlight-color:#0000;font-size:16px}body{color:var(--color-text);background-color:var(--color-bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;letter-spacing:normal;word-spacing:normal;margin:0;font-size:16px;line-height:1.6}a[href],button,[role=button],summary,label[for],input[type=submit],input[type=button],input[type=reset]{cursor:pointer!important}ul{margin:0}:focus-visible{outline:2px solid var(--color-link);outline-offset:2px}@media (prefers-reduced-motion:no-preference){::view-transition-old(root),::view-transition-new(root){animation-duration:.28s;animation-timing-function:var(--ease-out-quint)}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}::view-transition-old(root),::view-transition-new(root){animation:none}}.cta-btn{min-height:44px;font-family:var(--font-mono-ui);letter-spacing:.03em;color:var(--color-text);background:var(--color-bg-card);border:1px solid var(--color-border-primary);border-radius:var(--radius-base);align-items:center;gap:7.2px;padding:8px 17.6px;font-size:12.48px;font-weight:500;text-decoration:none;transition:color .2s,border-color .2s,background .2s,transform .2s;display:inline-flex}.cta-btn svg{width:.85em;height:.85em}.cta-btn:hover{color:var(--color-link);border-color:var(--color-link)}@supports (color:color-mix(in lab, red, red)){.cta-btn:hover{border-color:color-mix(in srgb, var(--color-link) 45%, var(--color-border))}}.cta-btn:hover{transform:translateY(-1px)}.cta-btn:focus-visible{outline:2px solid var(--color-heading);outline-offset:2px}.cta-btn-primary,.cta-btn-primary:hover{color:var(--color-bg);background:var(--color-heading);border-color:var(--color-heading)}.cta-btn-primary:hover{opacity:.88}@media (prefers-reduced-motion:reduce){.cta-btn:hover{transform:none}}.btn-ghost{border:1px solid var(--color-text-tertiary);border-radius:var(--radius-base);min-height:34px;color:var(--color-text);cursor:pointer;background:0 0;align-items:center;gap:4px;padding:5px 10px;font-size:12px;line-height:20px;text-decoration:none;transition:all .2s;display:inline-flex}.btn-ghost:hover{color:var(--color-accent);border-color:var(--color-accent)}.btn-ghost :where(svg,i){flex-shrink:0;width:1em;height:1em}.markdown-body .btn-ghost{color:var(--color-text);text-decoration:none}.markdown-body .btn-ghost:hover{color:var(--color-accent);text-decoration:none}@media (width<=640px){.btn-ghost{min-height:44px;padding-inline:13.6px}}.brand-signature{--brand-signature-rendered-width:min(var(--brand-signature-width,128px), 32vw);width:var(--brand-signature-rendered-width);aspect-ratio:var(--brand-signature-aspect-width,128) / var(--brand-signature-aspect-height,40);color:var(--color-heading);-webkit-mask:var(--brand-signature-src) center / contain no-repeat;-webkit-mask:var(--brand-signature-src) center / contain no-repeat;mask:var(--brand-signature-src) center / contain no-repeat;-webkit-mask:var(--brand-signature-src) center / contain no-repeat;background:currentColor;display:block}.brand-signature--metadata{--brand-signature-rendered-width:min(var(--brand-signature-width,44px), 44px);color:var(--color-heading)}.brand-signature--footer{--brand-signature-rendered-width:clamp(36px, 9vw, var(--brand-signature-width,44px));color:var(--color-text-secondary)}.prose{font-size:var(--prose-body-size);line-height:var(--prose-body-line-height);word-wrap:break-word;color:var(--color-text)}article.prose{max-width:var(--prose-width,var(--content-measure))}.prose p{margin-top:0;margin-bottom:var(--prose-paragraph-gap,24px);line-height:var(--prose-body-line-height)}.prose a{color:var(--color-link);transition:border-color var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);border-bottom:1px solid #0000;text-decoration:none}.prose a:hover,.prose a:focus-visible{border-bottom-color:var(--color-link);text-decoration:none}.prose a[href^=http]:not([href*="ljci.github.io"]):not([href^=\/]):after{content:"";vertical-align:middle;background-color:currentColor;width:11px;height:11px;margin-left:4px;display:inline-block;transform:translateY(-1px);mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 5H5C3.89543 5 3 5.89543 3 7V12C3 13.1046 3.89543 14 5 14H10C11.1046 14 12 13.1046 12 12V8.5'/%3E%3Cpath d='M7.5 9.5L14 3M14 3V7M14 3H10'/%3E%3C/svg%3E");mask-size:contain;mask-repeat:no-repeat}.prose:after{clear:both;content:"";display:block}.prose strong{color:var(--color-heading);font-weight:500}.prose em{color:var(--color-text-tertiary);letter-spacing:-.3px;font-style:italic;font-weight:500}.prose hr{height:1px;margin:var(--prose-block-gap,24px) 0;background:var(--color-border);border:none}.prose h1,.prose h2,.prose h3,.prose h4,.prose h5,.prose h6{margin-top:var(--prose-heading-gap-before);margin-bottom:var(--prose-heading-gap-after);font-weight:600;line-height:var(--prose-heading-line-height);color:var(--color-heading)}.prose h1{font-size:32px}.prose h2{font-size:26px}.prose h3{font-size:20px}.prose h4{font-size:17.6px}.prose ul,.prose ol{margin-bottom:var(--prose-paragraph-gap);padding-left:0;list-style:none}.prose ol{counter-reset:li}.prose li{padding-left:var(--prose-list-indent);margin-bottom:var(--prose-list-item-gap);letter-spacing:.3px;line-height:1.9;position:relative}.prose li:last-child{margin-bottom:0}.prose ul>li:before{content:"";width:var(--prose-list-marker-width);background-color:var(--prose-list-marker);height:20px;position:absolute;top:7px;left:0;mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18.5 12L4.99997 12'/%3E%3Cpath d='M13 18C13 18 19 13.5811 19 12C19 10.4188 13 6 13 6'/%3E%3C/svg%3E");mask-position:100%;mask-size:20px 20px;mask-repeat:no-repeat}.prose ol>li{counter-increment:li}.prose ol>li:before{content:counters(li, ".") ".";width:var(--prose-list-marker-width);text-align:right;white-space:nowrap;color:var(--prose-list-marker);font-weight:500;position:absolute;left:0}.prose li>ul,.prose li>ol{margin-top:var(--prose-list-item-gap);margin-bottom:var(--prose-list-item-gap)}.prose li>p{margin-bottom:var(--prose-list-item-gap)}.prose li>p:last-child{margin-bottom:0}.prose .footnotes ol{counter-reset:none;padding-left:1.5em;list-style-type:decimal}.prose .footnotes li{padding-left:0;list-style:decimal}.prose .footnotes li:before{content:none}.prose img{max-width:100%;height:auto}.prose .prose-figure{width:min(100%, var(--figure-max-width,100%));clear:both;flex-direction:column;align-items:flex-start;margin:20px auto;display:flex}.prose .prose-figure img{object-fit:cover;width:100%;height:auto;margin:0;display:block}.prose .prose-figure.size-small{--figure-max-width:320px}.prose .prose-figure.size-medium{--figure-max-width:560px}.prose .prose-figure.size-large{--figure-max-width:720px}.prose .prose-figure.size-full{--figure-max-width:100%}.prose figcaption{padding-top:var(--prose-caption-gap);color:var(--color-text-tertiary);text-align:left;margin-top:0;font-size:14px;font-weight:500;line-height:1.5}.prose .prose-fullbleed{width:100vw;margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);position:relative;left:50%;right:50%}.prose .prose-fullbleed-inner{max-width:var(--fullbleed-max-width,1000px);width:var(--fullbleed-width-percent,80%);min-width:min(700px,100%);margin:0 auto}@media (width<=850px){.prose .prose-fullbleed{width:100%;margin-left:0;margin-right:0;padding:0;left:0;right:0}.prose .prose-fullbleed-inner{width:100%;min-width:0;max-width:100%}}.prose .prose-video-container{margin:var(--prose-media-gap) auto;isolation:isolate;width:100%;position:relative}.prose .prose-video-glow{will-change:transform;filter:blur(80px)saturate(1.3);z-index:0;pointer-events:none;opacity:0;width:90%;height:90%;transition:opacity .4s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)scale(1.15)}.prose .prose-video-container:has(video:not([paused])) .prose-video-glow,.prose .prose-video-container:hover .prose-video-glow{opacity:.75}.prose .prose-video-frame{aspect-ratio:var(--video-ratio,16 / 9);border:2px solid var(--color-border);border-radius:var(--prose-media-radius);background:var(--prose-media-bg);z-index:1;position:relative;overflow:hidden}.prose .prose-video-frame video{object-fit:cover;cursor:pointer;width:100%;height:100%;display:block}.prose .prose-video-overlay{opacity:0;pointer-events:none;z-index:2;background:linear-gradient(#0000 60%,#0006 100%);flex-direction:column;justify-content:flex-end;width:100%;height:100%;padding:12px;transition:opacity .3s;display:flex;position:absolute;top:0;left:0}.prose .prose-video-container:hover .prose-video-overlay,.prose .prose-video-container:focus-within .prose-video-overlay{opacity:1;pointer-events:auto}.prose .prose-video-controls{-webkit-backdrop-filter:blur(16px)saturate(1.2);color:#fff;background:#0f0f0f73;border:1px solid #ffffff14;border-radius:12px;align-items:center;gap:12px;padding:6px 14px;display:flex}.prose .prose-video-btn{color:inherit;cursor:pointer;transition:background var(--duration-fast) var(--ease-standard), transform .1s ease;background:0 0;border:none;border-radius:8px;justify-content:center;align-items:center;padding:6px;display:flex}.prose .prose-video-btn:hover{background:#ffffff1f}.prose .prose-video-btn:active{transform:scale(.95)}.prose .prose-video-btn svg{fill:currentColor;width:16px;height:16px}.prose .prose-video-track-wrapper{flex:1;align-items:center;gap:10px;display:flex}.prose .prose-video-time{font-size:11px;font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:#ffffffb3;user-select:none}.prose .prose-video-track{cursor:pointer;background:#fff3;border-radius:9999px;flex:1;align-items:center;height:4px;display:flex;position:relative}.prose .prose-video-range{background:#fff;border-radius:9999px;width:0%;height:100%;position:absolute;top:0;left:0}.prose .prose-youtube-container{margin:var(--prose-media-gap) auto;width:100%;position:relative}.prose .prose-youtube-frame{aspect-ratio:16/9;border:2px solid var(--color-border);border-radius:var(--prose-media-radius);background:var(--prose-media-bg);width:100%;position:relative;overflow:hidden}.prose .prose-youtube-frame iframe,.prose .prose-youtube-trigger{border:0;width:100%;height:100%;margin:0;padding:0;display:block}.prose .prose-youtube-trigger{cursor:pointer;appearance:none;background:#000;border-radius:0;outline:none;position:relative}.prose .prose-youtube-trigger img{object-fit:cover;opacity:.85;width:100%;height:100%;transition:opacity var(--duration-normal) var(--ease-standard);border:none;margin:0;display:block}.prose .prose-youtube-trigger:hover img{opacity:1}.prose .prose-youtube-play-button{-webkit-backdrop-filter:blur(12px);color:#fff;width:68px;height:48px;transition:background var(--duration-normal) var(--ease-standard), border-color var(--duration-normal) var(--ease-standard), transform .2s var(--ease-standard);background:#1e1e1e66;border:1px solid #ffffff26;border-radius:12px;justify-content:center;align-items:center;display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.prose .prose-youtube-trigger:hover .prose-youtube-play-button{background:red;border-color:red;transform:translate(-50%,-50%)scale(1.05)}.prose .prose-youtube-play-button svg{width:24px;height:24px}.prose iframe:not(.prose-youtube-frame iframe):not(.prose-youtube-iframe):not([class]){aspect-ratio:16/9;border-radius:var(--prose-media-radius);border:2px solid var(--color-border);width:100%}.prose .prose-callout{margin:calc(var(--prose-block-gap) + 8px) 0 var(--prose-block-gap);padding:var(--prose-callout-padding);border:1px solid var(--prose-callout-border);border-radius:var(--prose-callout-radius);background:var(--prose-callout-bg);color:var(--color-text);position:relative}.prose .prose-callout-icon{border:6px solid var(--color-bg);background:var(--prose-callout-badge-bg);color:var(--prose-callout-badge-fg,var(--color-bg));user-select:none;border-radius:50%;justify-content:center;align-items:center;padding:4px;display:inline-flex;position:absolute;top:-20px;right:-20px}.prose .prose-callout-icon svg{width:20px;height:20px}.prose .prose-callout-label{color:var(--prose-callout-badge-fg,var(--color-bg));background:var(--prose-callout-badge-bg);user-select:none;border-radius:8px;justify-content:center;align-items:center;padding:6px 10px;font-size:14px;font-weight:500;display:inline-flex;position:absolute;top:-16px;right:-8px}.prose .prose-callout-info{--prose-callout-bg:var(--prose-callout-info-bg);--prose-callout-badge-bg:var(--prose-callout-info-badge)}.prose .prose-callout-danger{--prose-callout-bg:var(--prose-callout-danger-bg);--prose-callout-badge-bg:var(--prose-callout-danger-badge)}.prose .prose-callout-warning{--prose-callout-bg:var(--prose-callout-warning-bg);--prose-callout-badge-bg:var(--prose-callout-warning-badge)}.prose .prose-callout-body>:first-child{margin-top:0}.prose .prose-callout-body>:last-child{margin-bottom:0}.prose .prose-callout a:focus-visible{outline-color:var(--color-heading)}.prose table{border-collapse:collapse;width:100%;margin-bottom:1em}.prose th,.prose td{border:1px solid var(--color-border);padding:.5em 1em}.prose th{background:var(--color-gray-100);font-weight:600}.prose .prose-beforeafter{--comparison-radius:12px;--comparison-border-color:var(--color-border);--comparison-divider-width:1px;--comparison-handle-size:32px;--comparison-label-offset:10px;margin:var(--prose-block-gap) auto;width:100%}.prose .prose-beforeafter-frame{--progress:50%;aspect-ratio:var(--ba-ratio,16 / 9);border:2px solid var(--comparison-border-color);border-radius:var(--comparison-radius);background:var(--color-cover-plate,var(--color-bg-card));touch-action:none;user-select:none;cursor:ew-resize;outline:none;position:relative;overflow:hidden}.prose .prose-beforeafter-frame:focus-visible{box-shadow:0 2px 20px -2px var(--color-border-primary)}.prose .prose-beforeafter-img{object-fit:cover;border:0;border-radius:0;width:100%;max-width:none;height:100%;margin:0;position:absolute;inset:0;transform:none}.prose .prose-beforeafter-after{clip-path:inset(0 0 0 var(--progress))}.prose .prose-beforeafter-divider{top:0;bottom:0;left:var(--progress);width:var(--comparison-divider-width);background:oklch(from var(--color-gray-900) l c h / .6);pointer-events:none;position:absolute;transform:translate(-50%)}.prose .prose-beforeafter-handle{top:50%;left:var(--progress);width:var(--comparison-handle-size);height:var(--comparison-handle-size);border:1px solid oklch(from var(--color-gray-900) l c h / 15%);background:oklch(from var(--color-gray-900) l c h / .3);-webkit-backdrop-filter:blur(12px)saturate(1.15);color:var(--color-primary);pointer-events:none;z-index:10;border-radius:12px;justify-content:center;align-items:center;gap:1px;display:flex;position:absolute;transform:translate(-50%,-50%)}.prose .prose-beforeafter-handle svg{width:12px;height:12px}.prose .prose-beforeafter-label{bottom:var(--comparison-label-offset);font-family:var(--font-mono-label,var(--font-code));letter-spacing:.02em;text-transform:uppercase;color:var(--color-text);background:var(--color-bg-card);padding:2px 8px;font-size:11px;position:absolute}@supports (color:color-mix(in lab, red, red)){.prose .prose-beforeafter-label{background:color-mix(in srgb, var(--color-bg-card) 80%, transparent)}}.prose .prose-beforeafter-label{border:1px solid var(--color-border);border-radius:var(--radius-sm,3px);pointer-events:none}.prose .prose-beforeafter-label.is-before{left:var(--comparison-label-offset)}.prose .prose-beforeafter-label.is-after{right:var(--comparison-label-offset)}.prose-tweet{gap:var(--tweet-card-gap,var(--space-4,16px));color:var(--color-text);border-radius:var(--tweet-card-radius,12px);background-color:var(--tweet-card-background,var(--color-bg-card));padding:var(--tweet-card-padding,16px);border:1px solid var(--tweet-card-border-color,var(--color-border));width:100%;box-shadow:var(--tweet-card-shadow,.5px 1px 1px hsl(var(--shadow-color) / .333));margin:var(--prose-block-gap,24px) 0;box-sizing:border-box;flex-direction:column;display:flex}.prose-tweet-header{justify-content:space-between;align-items:center;width:100%;display:flex}.prose-tweet-author{align-items:center;display:flex}.prose-tweet-avatar{height:var(--tweet-avatar-size,40px);width:var(--tweet-avatar-size,40px);border-radius:50%;flex:none;display:flex;overflow:hidden}.prose-tweet .prose-tweet-img{will-change:auto;border:0;max-width:100%;height:auto;margin:0;transition:none;display:block;transform:none}.prose-tweet-avatar .prose-tweet-img{object-fit:cover;width:100%;height:100%}.prose-tweet-name{flex-direction:column;margin-left:1rem;display:flex;border-bottom:none!important;text-decoration:none!important}.prose-tweet-name-text{color:var(--color-heading);font-size:14px;font-weight:600;line-height:1.5}.prose-tweet-screen-name{color:var(--color-text-tertiary);font-size:14px;line-height:initial}.prose-tweet-logo{color:var(--tweet-icon-color,#3ba9ee);transition:color var(--duration-fast) var(--ease-standard);border-bottom:none!important}.prose-tweet-logo:hover{color:#1d9bf0}.prose-tweet-text{white-space:pre-wrap;color:var(--color-text);font-size:16px;line-height:1.5;margin:0!important}.prose-tweet-media{border-radius:var(--tweet-card-radius,12px);margin-top:4px;overflow:hidden}.prose-tweet-media .prose-tweet-img,.prose-tweet-video{border-radius:var(--tweet-card-radius,12px);width:100%;height:auto;display:block}.prose-tweet-footer{justify-content:space-between;align-items:center;gap:var(--space-2,8px);display:flex}.prose-tweet-actions{align-items:center;display:flex}.prose-tweet-action{color:var(--color-text-tertiary);align-items:center;margin-right:1rem;font-size:14px;display:flex;border-bottom:none!important;text-decoration:none!important}.prose-tweet-action svg{width:var(--tweet-action-icon-size,24px);height:var(--tweet-action-icon-size,24px);color:inherit;margin-right:4px}.prose-tweet-action:hover{color:var(--color-heading)}.prose-tweet-date{color:var(--color-text-tertiary);white-space:nowrap;font-size:14px;border-bottom:none!important;text-decoration:none!important}.prose-tweet-date:hover{color:var(--color-heading)}.prose-tweet-media-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:4px;display:grid}.prose-tweet-media-grid-item{border-radius:8px;overflow:hidden}.prose-tweet-media-grid-item .prose-tweet-img{object-fit:cover;width:100%;height:100%}.prose-tweet-quoted{gap:var(--space-4,16px);width:100%;padding:var(--tweet-card-padding,16px);color:var(--color-text);background-color:var(--tweet-card-background,var(--color-bg-card));border:1px solid var(--tweet-card-border-color,var(--color-border));border-radius:var(--tweet-card-radius,12px);box-shadow:var(--tweet-card-shadow,.5px 1px 1px hsl(var(--shadow-color) / .333));box-sizing:border-box;flex-direction:column;display:flex}.prose-tweet-fallback{width:100%;margin:var(--prose-block-gap,24px) 0;padding:var(--tweet-card-padding,16px);color:var(--color-text);background:var(--tweet-card-background,var(--color-bg-card));border:1px solid var(--tweet-card-border-color,var(--color-border));border-radius:var(--tweet-card-radius,12px);box-shadow:var(--tweet-card-shadow,.5px 1px 1px hsl(var(--shadow-color) / .333));font-size:14px}.prose-tweet-fallback p{margin:0}.prose-tweet-fallback a{color:var(--color-link);border-bottom:none;text-decoration:underline}@media (width<=520px){.prose-tweet-footer{flex-direction:column;align-items:flex-start}.prose-tweet-date{white-space:normal}}.prose kbd{min-width:1em;font-family:var(--font-code);text-align:center;color:var(--color-text);background:var(--prose-kbd-bg);border:1px solid var(--prose-kbd-border);border-radius:var(--radius-base,4px);box-shadow:0 1px 0 var(--prose-kbd-shadow);white-space:nowrap;padding:1px 6px;font-size:.8em;line-height:1.6;display:inline-block}.prose details{width:100%;margin:var(--prose-block-gap) 0;padding:0 var(--space-4);color:var(--color-text);background:var(--color-bg-card);border:1px solid var(--prose-details-border);border-radius:var(--prose-details-radius);box-shadow:.5px 1px 1px hsl(var(--shadow-color) / .333);position:relative;overflow:hidden}.prose details[open]{padding-bottom:var(--space-5)}.prose details>summary{margin:0 calc(var(--space-4) * -1);padding:var(--space-4) var(--space-8) var(--space-4) var(--space-4);color:var(--color-heading);cursor:pointer;user-select:none;outline:none;font-weight:500;line-height:1.5;list-style:none;display:block;position:relative}.prose details>summary::marker{content:"";display:none}.prose details>summary::-webkit-details-marker{content:"";display:none}.prose details>summary:before{content:"";top:var(--space-4);width:2px;height:var(--space-5);background:var(--prose-accent);opacity:var(--indicator-opacity,0);box-shadow:var(--indicator-shadow,none);border-radius:16px;transition:opacity .4s ease-in-out,box-shadow .4s ease-in-out;display:inline-block;position:absolute;left:0}.prose details>summary:focus-visible,.prose details[open]>summary{--indicator-opacity:1;--indicator-shadow:0 0px 20px 6px var(--prose-accent)}.prose details>summary:after{content:"";top:var(--space-4);right:var(--space-4);width:var(--space-5);height:var(--space-5);background-color:oklch(from var(--color-gray-900) l c h / .3);border:1px solid oklch(from var(--color-gray-900) l c h / 15%);transition:transform .4s ease-in-out, background-color var(--duration-normal) var(--ease-standard);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23a3a3a3' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 6L12 12M12 12L6 18M12 12L18 18M12 12L6 6'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:12px 12px;border-radius:50%;position:absolute;transform:rotate(225deg)}.prose details[open]>summary:after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23111111' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 6L12 12M12 12L6 18M12 12L18 18M12 12L6 6'/%3E%3C/svg%3E");transform:rotate(0)}:root.dark .prose details[open]>summary:after{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 6L12 12M12 12L6 18M12 12L18 18M12 12L6 6'/%3E%3C/svg%3E")}.prose details>:not(summary){margin-left:0;margin-right:0}.prose details>summary+*{margin-top:0}.prose details>:last-child{margin-bottom:0}@supports selector(::details-content){.prose details::details-content{opacity:0;height:0;transition:height .3s ease-out, opacity .3s ease-out, transform .3s ease-out, content-visibility .3s ease-out allow-discrete;overflow:clip;transform:translateY(16px)}.prose details[open]::details-content{opacity:1;height:auto;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.prose details>summary:before,.prose details>summary:after,.prose details::details-content{transition:none}}.prose .footnotes{color:var(--color-text-secondary);border-top:1px solid var(--color-border);margin-top:32px;padding-top:16px;font-size:12px}.prose .footnotes ol{padding-left:1.5em;list-style-type:decimal}.prose .footnotes li{margin-bottom:.4em;position:relative}.prose .footnotes li:target:before{pointer-events:none;content:"";border:2px solid var(--color-primary);border-radius:6px;position:absolute;inset:-4px -8px -4px -24px}.prose .footnotes li:target{color:var(--color-text)}.prose .footnotes .sr-only{clip:rect(0, 0, 0, 0);border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.prose .footnotes p{margin-bottom:.25em}.prose sup:has(>a[data-footnote-ref]){vertical-align:baseline;position:relative;top:-4px}.prose sup>a[data-footnote-ref]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;background-color:var(--color-gray-100);color:var(--color-text-tertiary);min-width:12px;height:14px;transition:border-color var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);border:1px solid #0000;border-radius:4px;justify-content:center;align-items:center;margin-left:2px;padding:0 3px;font-size:9px;font-weight:400;text-decoration:none;display:inline-flex}.prose sup>a[data-footnote-ref]:before,.prose sup>a[data-footnote-ref]:after{content:none!important}.prose sup>a[data-footnote-ref]:hover,.prose sup>a[data-footnote-ref]:focus-visible{border-color:var(--color-link);color:var(--color-link);text-decoration:none}.prose .data-footnote-backref{color:var(--color-primary);font-family:var(--font-mono);text-decoration:none}.prose .data-footnote-backref:focus-visible,.prose sup>a[data-footnote-ref]:focus-visible{outline-color:var(--color-primary)}.prose-slideshow{gap:var(--space-4,16px);width:100%;margin:var(--prose-block-gap,24px) 0;box-sizing:border-box;flex-direction:column;display:flex}.prose-slideshow-gallery{background:var(--color-bg-card);border-radius:16px;width:100%;position:relative;overflow:hidden}.prose-slideshow-track{gap:16px;height:100%;display:flex}.prose-slideshow-slide{cursor:pointer;background:0 0;border:none;outline:none;min-width:100%;height:100%;padding:0;display:block}.prose-slideshow-slide[data-current=true]{cursor:default}.prose-slideshow-slide img{object-fit:cover;object-position:center;border:2px solid var(--color-border);box-sizing:border-box;border-radius:16px;width:100%;height:auto;display:block;margin:0!important}.prose-slideshow-controls{justify-content:flex-start;align-items:center;gap:12px;width:100%;display:flex}.prose-slideshow-btn{background:var(--color-bg-card);border:1px solid var(--color-border);color:var(--color-text-secondary);cursor:pointer;transition:all var(--duration-fast) var(--ease-standard);width:32px;height:32px;box-shadow:0 1px 3px hsl(var(--shadow-color) / .1);box-sizing:border-box;border-radius:50%;justify-content:center;align-items:center;padding:0;display:flex}.prose-slideshow-btn:hover:not(:disabled){background:var(--color-gray-100);color:var(--color-heading);border-color:var(--color-text-tertiary)}.prose-slideshow-btn:active:not(:disabled){transform:scale(.95)}.prose-slideshow-btn:disabled{opacity:.25;cursor:not-allowed}.prose-slideshow-btn svg{fill:none;stroke:currentColor;stroke-width:2.25px;stroke-linecap:round;stroke-linejoin:round;width:16px;height:16px}.prose-slideshow-indicator-wrapper{align-items:center;padding:1px;display:flex;overflow:hidden}.prose-slideshow-indicator-container{background:oklch(from var(--color-gray-900) l c h / .05);border:1px solid oklch(from var(--color-gray-900) l c h / 6%);-webkit-backdrop-filter:blur(8px);border-radius:12px;align-items:center;gap:8px;width:fit-content;padding:8px 12px;display:flex;position:relative}:root.dark .prose-slideshow-indicator-container{background:oklch(from var(--color-gray-900) l c h / .15);border:1px solid oklch(from var(--color-gray-900) l c h / 10%)}.prose-slideshow-dot{--dot-size:8px;height:var(--dot-size);background-color:var(--color-primary);cursor:pointer;width:var(--dot-size);opacity:.4;box-sizing:border-box;border-radius:12px;transition:all .4s ease-in-out}.prose-slideshow-dot.is-active{width:calc(var(--dot-size) * 3.5);opacity:1;cursor:default}.prose pre{margin:var(--prose-block-gap) 0}.code-block-card{background:var(--code-snippet-background);border:1px solid var(--color-border);width:100%;box-shadow:.5px 1px 1px hsl(var(--shadow-color) / .1);border-radius:12px;margin:24px 0;display:grid;overflow:hidden}@media (width<=767px){.code-block-card{border-left:none;border-right:none;border-radius:0;width:100vw;margin-left:-50vw;margin-right:-50vw;position:relative;left:50%;right:50%}}.code-block-header{z-index:3;background-color:var(--code-snippet-background);border-bottom:1px solid var(--color-border);justify-content:space-between;align-items:center;padding:8px 12px;display:flex}.code-block-title{color:var(--color-text);font-size:14px;font-weight:500;font-family:var(--font-mono);margin-top:0;margin-bottom:0}pre.code-block-pre{--shadow-size:70px;--shadow-color:oklch(from var(--code-snippet-background) l c h / .75);text-align:left;background-color:var(--code-snippet-background);font-family:var(--font-code);scrollbar-width:thin;scrollbar-color:var(--color-border) transparent;border-bottom-right-radius:12px;border-bottom-left-radius:12px;margin:0;padding:8px 0;font-size:14px;line-height:24px;position:relative;overflow-x:auto}pre.code-block-pre::-webkit-scrollbar{height:8px}pre.code-block-pre::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:4px}pre.code-block-pre:before,pre.code-block-pre:after{content:"";width:var(--shadow-size,70px);pointer-events:none;z-index:2;height:100%;position:absolute;top:0}pre.code-block-pre:before{opacity:var(--shadow-opacity-left,0);background:linear-gradient(to right, var(--shadow-color), transparent);left:0}pre.code-block-pre:after{opacity:var(--shadow-opacity-right,0);background:linear-gradient(to left, var(--shadow-color), transparent);right:0}pre.code-block-pre .token.parameter,pre.code-block-pre .token.imports,pre.code-block-pre .token.plain,pre.code-block-pre .token.comment,pre.code-block-pre .token.prolog,pre.code-block-pre .token.doctype,pre.code-block-pre .token.cdata{color:var(--token-comment)}pre.code-block-pre .token.punctuation{color:var(--token-punctuation)}pre.code-block-pre .token.property,pre.code-block-pre .token.tag,pre.code-block-pre .token.boolean,pre.code-block-pre .token.number,pre.code-block-pre .token.constant,pre.code-block-pre .token.symbol,pre.code-block-pre .token.deleted{color:var(--token-symbol)}pre.code-block-pre .token.selector,pre.code-block-pre .token.attr-name,pre.code-block-pre .token.char,pre.code-block-pre .token.builtin,pre.code-block-pre .token.string,pre.code-block-pre .token.inserted{color:var(--token-selector)}pre.code-block-pre .token.operator,pre.code-block-pre .token.entity,pre.code-block-pre .token.url,pre.code-block-pre .language-css .style{color:var(--token-operator)}pre.code-block-pre .token.atrule,pre.code-block-pre .token.attr-value,pre.code-block-pre .token.keyword{color:var(--token-keyword)}pre.code-block-pre .token.function,pre.code-block-pre .token.maybe-class-name,pre.code-block-pre .token.class-name{color:var(--token-function)}pre.code-block-pre .token.regex,pre.code-block-pre .token.important,pre.code-block-pre .token.variable{color:var(--token-operator)}.code-copy-button{-webkit-appearance:none;-webkit-tap-highlight-color:transparent;user-select:none;cursor:pointer;color:var(--color-text-tertiary);background:0 0;border:1px solid #0000;border-radius:8px;outline:none;flex-shrink:0;justify-content:center;align-items:center;width:30px;height:30px;transition:box-shadow .3s,border .2s,border-color .2s,color .3s,background .3s,transform .2s;display:flex}.code-copy-button:hover,.code-copy-button:focus-visible{background-color:var(--code-emphasis);color:var(--color-heading);transform:scale(1.1)}.code-copy-button:active{transform:scale(.95)}.code-copy-button svg{outline:none;width:16px;height:16px}.code-copy-button .code-copy-icon-front,.code-copy-button .code-copy-icon-back{opacity:1;filter:blur();transition:opacity .275s,filter .275s}.code-copy-button.copied .code-copy-icon-front,.code-copy-button.copied .code-copy-icon-back{opacity:0;filter:blur(2px)}.code-copy-button .code-copy-icon-check{stroke-dasharray:25;stroke-dashoffset:25px;transition:stroke-dashoffset .275s}.code-copy-button.copied .code-copy-icon-check{stroke-dashoffset:0}.code-block-line{border-collapse:collapse;box-sizing:border-box;border-left:3px solid #0000;width:100%;padding:0 14px;display:table}.code-block-line.highlight-line{background:var(--code-emphasis);border-left-color:var(--code-accent)}.code-block-line.ins-line{background:#2ea04324;border-left-color:#2ea043b3}.code-block-line.del-line{background:#f8514924;border-left-color:#f85149b3}.code-block-line.diff-line:hover{background-color:currentColor}@supports (color:color-mix(in lab, red, red)){.code-block-line.diff-line:hover{background-color:color-mix(in srgb, currentColor 6%, transparent)}}.code-block-line-no[data-diff-sign]:before{content:attr(data-diff-sign);margin-right:4px;font-weight:600}.ins-line .code-block-line-no{color:#2ea043}@supports (color:color-mix(in lab, red, red)){.ins-line .code-block-line-no{color:color-mix(in srgb, #2ea043 90%, var(--color-text-tertiary))}}.del-line .code-block-line-no{color:#f85149}@supports (color:color-mix(in lab, red, red)){.del-line .code-block-line-no{color:color-mix(in srgb, #f85149 90%, var(--color-text-tertiary))}}.code-block-line:hover{background-color:var(--code-emphasis)}.code-block-line-no{user-select:none;width:45px;color:var(--color-text-tertiary);text-align:right;font-variant-numeric:tabular-nums;padding:0 12px;display:table-cell}.code-block-line-content{vertical-align:middle;width:100%;display:table-cell}.code-block-line a:focus-visible{outline-color:var(--color-heading)}.prose code{font-size:85%;font-family:var(--font-code);background:var(--color-code-bg);border-radius:3px;padding:.2em .4em}code.inline-code,.prose code:not(pre code){font-family:var(--font-code);background-color:var(--code-foreground);color:var(--token-punctuation);word-break:break-word;border:1px solid var(--color-border);box-shadow:.5px 1px 1px hsl(var(--shadow-color) / .1);box-decoration-break:clone;border-radius:8px;padding:2px 6px;font-size:14px;line-height:23.2px;font-weight:400!important}.site-header-fixed{z-index:100;pointer-events:none;justify-content:center;width:100%;display:flex;position:fixed;top:24px;left:0;right:0}.site-header-grid{width:100%;max-width:var(--width-container,740px);pointer-events:none;place-items:start center;display:grid}@media (width<=767px){.site-header-fixed{top:12px}}.dock-nav{pointer-events:auto}.dock-container{border-radius:var(--utility-control-radius);background:var(--color-bg-card);align-items:center;display:flex;position:relative}@supports (color:color-mix(in lab, red, red)){.dock-container{background:color-mix(in srgb, var(--color-bg-card) 52%, transparent)}}.dock-container{border:1.5px solid var(--color-border-primary)}@supports (color:color-mix(in lab, red, red)){.dock-container{border:1.5px solid color-mix(in srgb, var(--color-border-primary) 42%, transparent)}}.dock-container{-webkit-backdrop-filter:blur(12px)saturate(1.15);isolation:isolate;gap:0;padding:6px;transform:translateZ(0);box-shadow:0 4px 20px -2px #00000014}:global(.dark) .dock-container{box-shadow:0 4px 24px -2px #0000004d}@media (width<=767px){.dock-container{background:var(--color-bg-card)}@supports (color:color-mix(in lab, red, red)){.dock-container{background:color-mix(in srgb, var(--color-bg-card) 96%, var(--color-bg))}}.dock-container{-webkit-backdrop-filter:none;transform:none}}.dock-logo{color:var(--color-heading);opacity:.95;align-items:center;padding:0 10px 0 8px;transition:opacity .2s;display:flex}.dock-logo:hover{opacity:1}.dock-divider{background-color:var(--color-border);width:1px;height:18px}@supports (color:color-mix(in lab, red, red)){.dock-divider{background-color:color-mix(in srgb, var(--color-border) 42%, transparent)}}.dock-divider{margin-left:2px;margin-right:2px}.dock-list{align-items:center;gap:0;margin:0;padding:0;list-style:none;display:flex}.dock-item{align-items:center;display:flex;position:relative}.dock-link,.dock-theme-btn{height:28px;color:var(--color-text-secondary);font-family:var(--font-nav);font-size:var(--text-nav);transition:color var(--duration-fast) var(--ease-standard);cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:none;border-radius:8px;outline:none;justify-content:center;align-items:center;padding:4px 12px;font-weight:500;text-decoration:none;display:inline-flex;position:relative}.dock-link:hover,.dock-theme-btn:hover{color:var(--color-heading);text-decoration:none}.dock-link:focus-visible,.dock-theme-btn:focus-visible{color:var(--color-heading);outline:2px solid var(--color-heading);outline-offset:2px}.dock-active{color:var(--color-heading);font-weight:600}.dock-highlight{background-color:var(--color-heading);z-index:-1;pointer-events:none;border-radius:8px;position:absolute;inset:0}.dock-theme-btn{width:32px;height:28px;margin-left:4px;margin-right:2px;padding:0}.dock-theme-icon-shell{justify-content:center;align-items:center;width:16px;height:16px;font-size:13.5px;display:flex;position:relative}.dock-theme-icon{opacity:0;transition:opacity var(--duration-fast) var(--ease-standard), transform var(--duration-fast) var(--ease-standard);place-items:center;display:grid;position:absolute;inset:0;transform:scale(.86)rotate(-8deg)}.dock-theme-icon svg{display:block}.dock-theme-icon-shell[data-theme-mode=light] .dock-theme-icon-moon,.dock-theme-icon-shell[data-theme-mode=dark] .dock-theme-icon-sun{opacity:1;transform:scale(1)rotate(0)}@media (prefers-reduced-motion:reduce){.dock-theme-icon{transition:none;transform:none}}.project-gallery{grid-template-columns:repeat(2,minmax(0,1fr));gap:18.4px;display:grid}.project-card{min-width:0}.project-card-media{aspect-ratio:7/5;background:var(--color-cover-plate);border-radius:24px;width:100%;display:block;overflow:hidden;box-shadow:0 1px 2px #0000000a}.project-card-media img{object-fit:cover;object-position:center;width:100%;height:100%;transition:transform .3s var(--ease-out-expo);display:block}.project-card-media[data-fit=contain] img{object-fit:contain;box-sizing:border-box;padding:clamp(14px,3.5%,22px)}.project-card:hover .project-card-media img{transform:scale(1.05)}.project-card-placeholder{height:100%;color:var(--color-text-tertiary);background-image:radial-gradient(circle,#1111110a,#0000 72%);flex-direction:column;justify-content:center;align-items:center;gap:10px;padding:16px;display:flex}@supports (color:color-mix(in lab, red, red)){.project-card-placeholder{background-image:radial-gradient(circle at center, color-mix(in srgb, var(--color-heading) 4%, transparent), transparent 72%)}}.project-card-placeholder svg{opacity:.55;width:26px;height:26px}.project-card-placeholder-label{max-width:80%;font-family:var(--font-date);font-size:var(--text-meta);letter-spacing:.08em;text-transform:uppercase;text-align:center;color:var(--color-text-tertiary);font-weight:500;line-height:1.4}.project-card-body{flex-direction:column;gap:5.6px;min-height:120px;padding:16.8px 18.4px 0;display:flex}.project-card-title{font-size:var(--text-project-title);color:var(--color-text);text-wrap:balance;margin:0;font-weight:600;line-height:1.4}.project-card-title a{color:inherit;text-decoration:none}.project-card:hover .project-card-title a,.project-card-title a:focus-visible{color:var(--color-heading)}.project-card-metadata{font-family:var(--font-date);font-size:var(--text-meta);letter-spacing:.01em;font-variant-numeric:tabular-nums;color:var(--color-text-secondary);flex-wrap:wrap;align-items:center;margin:0;display:flex}.project-card-metadata>span:not(:first-child):before{content:"·";color:var(--color-text-tertiary);margin:0 7.2px}.project-card-excerpt{-webkit-line-clamp:2;font-size:var(--text-project-excerpt);color:var(--color-text-secondary);-webkit-box-orient:vertical;margin:3.2px 0 0;line-height:1.55;display:-webkit-box;overflow:hidden}@media (width<=720px){.project-gallery{grid-template-columns:1fr}}@media (prefers-reduced-motion:reduce){.project-card-media img{transition-duration:.01ms}.project-card:hover .project-card-media img{transform:none}}.project-filters,.experience-filter-header{margin:0 0 clamp(35.2px,6vw,64px)}.filter-bar{align-items:center;gap:var(--filter-gap);flex-wrap:wrap;display:flex}.filter-tab{padding:var(--filter-padding-y) var(--filter-padding-x);font-family:var(--font-mono-ui);font-size:var(--filter-text-size);letter-spacing:.02em;color:var(--filter-muted-color);cursor:pointer;transition:color var(--filter-transition);-webkit-tap-highlight-color:transparent;background:0 0;border:none;align-items:center;font-weight:500;line-height:1.2;display:inline-flex;position:relative}.filter-tab:hover,.filter-tab[data-active=true]{color:var(--filter-active-color)}.filter-tab:focus-visible{outline:2px solid var(--color-heading);outline-offset:2px;border-radius:var(--radius-sm)}.filter-tab-underline{left:var(--filter-padding-x);right:var(--filter-padding-x);height:var(--filter-underline-size);border-radius:var(--filter-underline-size);background:var(--filter-underline-color);position:absolute;bottom:-2px}@media (width<=640px){.filter-tab{padding-block:14px}}@media (prefers-reduced-motion:reduce){.filter-tab{transition-duration:.01ms}}.experience-timeline{min-width:0}.timeline{--timeline-entry-padding:var(--timeline-entry-pad);--timeline-marker-size:var(--timeline-dot-size);--timeline-title-size:var(--text-timeline-title);--timeline-heading-line-box:var(--timeline-title-line-box);--timeline-role-gap:var(--timeline-group-gap);--timeline-marker-top:calc((var(--timeline-heading-line-box) - var(--timeline-marker-size)) / 2);margin:0;padding:0;list-style:none;position:relative}.timeline-row{padding:var(--timeline-entry-padding) 0;grid-template-columns:12px minmax(0,1fr);gap:0 clamp(14.4px,2vw,21.6px);display:grid}.timeline-marker{position:relative}.timeline-marker:before{content:"";left:calc(var(--timeline-marker-size) / 2 - .75px);top:calc(-1 * var(--timeline-entry-padding));bottom:calc(-1 * var(--timeline-entry-padding));width:var(--timeline-line-width);background:var(--color-border);position:absolute}.timeline-row:first-child .timeline-marker:before{top:calc(var(--timeline-marker-top) + var(--timeline-marker-size) / 2)}.timeline-row:last-child .timeline-marker:before{bottom:calc(100% - var(--timeline-marker-top) - var(--timeline-marker-size) / 2)}.timeline-dot{top:var(--timeline-marker-top);width:var(--timeline-marker-size);height:var(--timeline-marker-size);background:var(--color-heading);border-radius:50%;position:absolute;left:0}.timeline-content{gap:var(--timeline-role-gap) 0;grid-template-columns:1fr;align-items:start;display:grid}.timeline-title{font-family:var(--font-display);font-size:var(--timeline-title-size);letter-spacing:-.005em;color:var(--color-heading);text-wrap:balance;margin:0;font-weight:600;line-height:1.32}.timeline-title-link{max-width:100%;color:inherit;margin:0;text-decoration:none;display:inline-block}a.timeline-title-link:hover .timeline-title{color:var(--color-link)}.timeline-title-secondary{font-size:var(--text-timeline-title-secondary);color:var(--color-text-secondary);font-weight:400}.timeline-roles{flex-direction:column;gap:8.8px;margin:0;padding:0;list-style:none;display:flex}.timeline-role{grid-template-columns:minmax(112px,144px) minmax(0,1fr);gap:4px clamp(12.8px,2vw,21.6px);display:grid}.timeline-role-date{font-family:var(--font-date);font-size:var(--text-caption);letter-spacing:.02em;font-variant-numeric:tabular-nums;color:var(--color-text-tertiary);margin-top:1.6px;line-height:1.45}.timeline-role-title{font-size:var(--text-timeline-role);color:var(--color-text);font-weight:600;line-height:1.4}.timeline-detail{font-size:var(--text-timeline-detail);color:var(--color-text-secondary);grid-column:2;line-height:1.6}.timeline-detail :is(p,ul,ol){margin:4px 0 0}.timeline-detail a{color:var(--color-text);font-weight:600}.experience-timeline-empty{color:var(--color-text-secondary);margin:8px 0 0;font-size:13.44px}@media (width<=640px){.timeline-role{grid-template-columns:1fr}.timeline-detail{grid-column:1}}.post-list{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.post-list-item{position:relative}.post-list-year{padding:var(--space-7,40px) 0 var(--space-5,24px);font-family:var(--font-date);font-size:var(--text-reading-meta);letter-spacing:-1px;color:var(--color-heading);font-variant-numeric:tabular-nums;margin:0;font-weight:560;line-height:1.5;transition:opacity .2s ease-in-out}.post-list-item:first-child .post-list-year{padding-top:0}.post-list-row{padding:var(--space-4,16px);color:inherit;border-bottom:1px solid var(--color-border);grid-template-columns:repeat(6,1fr);align-items:baseline;column-gap:24px;text-decoration:none;transition:border-color .3s ease-in-out,opacity .2s ease-in-out;display:grid}.post-list-item:last-child .post-list-row{border-bottom:none}.post-list-title{min-width:0;font-size:var(--text-reading-meta);color:var(--color-text-tertiary);text-wrap:pretty;grid-column:auto/span 5;font-weight:500;line-height:1.5;transition:color .3s ease-in-out}.post-list-date{white-space:nowrap;font-family:var(--font-date);font-size:var(--text-post-date);letter-spacing:-1px;text-transform:uppercase;font-variant-numeric:tabular-nums;color:var(--color-text-tertiary);grid-column:6;justify-self:end;font-weight:500;transition:color .3s ease-in-out}.post-list-row:hover .post-list-title,.post-list-row:hover .post-list-date,.post-list-row:focus-visible .post-list-title,.post-list-row:focus-visible .post-list-date{color:var(--color-heading)}@media (hover:hover) and (pointer:fine){.post-list:has(.post-list-row:hover) .post-list-year,.post-list:has(.post-list-row:hover) .post-list-row:not(:hover) .post-list-title,.post-list:has(.post-list-row:hover) .post-list-row:not(:hover) .post-list-date{opacity:.5}}@media (prefers-reduced-motion:reduce){.post-list-row,.post-list-title,.post-list-date,.post-list-year{transition-duration:.01ms}}.article-toc-card{--toc-accent:oklch(88.34% .052 266);border:1.5px solid var(--color-border-primary);flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:0;width:fit-content;min-width:150px;max-width:min(300px,100vw - 32px);padding:6px 12px;display:flex;position:relative;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.article-toc-card{border:1.5px solid color-mix(in srgb, var(--color-border-primary) 42%, transparent)}}.article-toc-card{background:var(--color-bg-card);border-radius:12px}@supports (color:color-mix(in lab, red, red)){.article-toc-card{background:color-mix(in srgb, var(--color-bg-card) 52%, transparent)}}.article-toc-card{color:var(--color-heading);-webkit-backdrop-filter:blur(12px)saturate(1.15);user-select:none;cursor:pointer;pointer-events:auto;transition:border-color .2s ease-in-out;box-shadow:0 4px 20px -2px #00000014}:global(.dark) .article-toc-card{box-shadow:0 4px 24px -2px #0000004d}@media (width<=767px){.article-toc-card{background:var(--color-bg-card)}@supports (color:color-mix(in lab, red, red)){.article-toc-card{background:color-mix(in srgb, var(--color-bg-card) 96%, var(--color-bg))}}.article-toc-card{-webkit-backdrop-filter:none}}.article-toc-card[data-expanded=true]{cursor:default;border-radius:16px;width:min(400px,100vw - 32px);max-width:min(400px,100vw - 32px);padding:16px}.article-toc-card:focus-visible{outline:2px solid var(--color-heading);outline-offset:3px}.article-toc-title-row{align-items:flex-start;gap:8px;width:100%;display:flex}.article-toc-progress{flex:none;width:18px;height:18px;margin-top:1px;display:inline-flex}.article-toc-progress svg{width:100%;height:100%;transform:rotate(-90deg)}.article-toc-progress-track,.article-toc-progress-value{fill:none;stroke-width:2px}.article-toc-progress-track{stroke:var(--color-text-tertiary)}@supports (color:color-mix(in lab, red, red)){.article-toc-progress-track{stroke:color-mix(in srgb, var(--color-text-tertiary) 34%, transparent)}}.article-toc-progress-value{stroke:var(--toc-accent);stroke-linecap:round}.article-toc-title{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-family:var(--font-display);font-size:var(--text-toc);color:var(--color-heading);flex:auto;font-weight:600;line-height:1.35;overflow:hidden}.article-toc-card[data-expanded=true] .article-toc-title{white-space:normal}.article-toc-chevron{color:var(--toc-accent);cursor:pointer;flex:none;font-size:14.4px;line-height:1;display:inline-flex}.article-toc-content{width:100%}.article-toc-list{flex-direction:column;align-items:flex-start;gap:4px;width:100%;margin:12px 0 0;padding:0;display:flex}.article-toc-row{align-items:center;width:100%;min-width:0;display:flex}.article-toc-dot{background:var(--toc-accent);border-radius:999px;flex:none;width:4px;height:4px;margin-right:4px}.article-toc-link{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-family:var(--font-display);font-size:var(--text-toc);color:var(--color-text-secondary);outline:none;font-weight:500;line-height:1.35;text-decoration:none;transition:color .3s ease-in-out;overflow:hidden}.article-toc-link:hover,.article-toc-link:focus-visible,.article-toc-link[aria-current=true]{color:var(--color-heading);text-decoration:none}@media (width>=640px){.article-toc-card{max-width:min(400px,100vw - 32px)}}@media (width<=767px){.article-toc-card{max-width:calc(100vw - 24px)}.article-toc-card[data-expanded=true]{width:calc(100vw - 24px);max-width:calc(100vw - 24px)}}@media (prefers-reduced-motion:reduce){.article-toc-card,.article-toc-link{transition:none}}.section-heading{font-family:var(--font-heading);font-size:var(--text-section-heading);letter-spacing:-.01em;color:var(--color-heading);margin-bottom:var(--section-heading-gap);font-weight:600}.tech-stack-section{width:100%}.chat-backdrop{z-index:1000;background:var(--color-bg);position:fixed;inset:0}@supports (color:color-mix(in lab, red, red)){.chat-backdrop{background:color-mix(in srgb, var(--color-bg) 80%, transparent)}}.chat-backdrop{backdrop-filter:blur(8px)}.chat-popup{z-index:1001;outline:none;flex-direction:column;gap:16px;width:600px;max-height:min(600px,85vh);display:flex;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.chat-popup:focus-visible{outline:2px solid var(--color-heading);outline-offset:6px}@media (width<=767px){.chat-popup{flex-direction:column-reverse;gap:12px;width:95%;max-height:90vh}}.chat-card{background:var(--color-bg-card);border-radius:16px;position:relative;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.chat-card{background:color-mix(in srgb, var(--color-bg-card) 84%, transparent)}}.chat-card{border:1px solid var(--color-border-primary)}@supports (color:color-mix(in lab, red, red)){.chat-card{border:1px solid color-mix(in srgb, var(--color-border-primary) 15%, transparent)}}.chat-card{backdrop-filter:blur(6px)saturate(1.15);transition:all .2s ease-in-out;box-shadow:0 20px 40px -15px #00000026}:global(.dark) .chat-card{border-color:#11111126;box-shadow:0 20px 40px -15px #00000080}@supports (color:color-mix(in lab, red, red)){:global(.dark) .chat-card{border-color:color-mix(in srgb, var(--color-heading) 15%, transparent)}}.chat-result-card{flex-direction:column;height:500px;display:flex}.chat-result-body{scrollbar-width:thin;scrollbar-color:var(--color-text-secondary) transparent;flex-direction:column;flex:1;gap:16px;padding:24px;display:flex;overflow-y:auto}@supports (color:color-mix(in lab, red, red)){.chat-result-body{scrollbar-color:color-mix(in srgb, var(--color-text-secondary) 30%, transparent) transparent}}.chat-result-body::-webkit-scrollbar{width:8px}.chat-result-body::-webkit-scrollbar-track{background:0 0}.chat-result-body::-webkit-scrollbar-thumb{background:var(--color-text-secondary)}@supports (color:color-mix(in lab, red, red)){.chat-result-body::-webkit-scrollbar-thumb{background:color-mix(in srgb, var(--color-text-secondary) 30%, transparent)}}.chat-result-body::-webkit-scrollbar-thumb{border-radius:4px}.chat-welcome{color:var(--color-text-secondary);flex-direction:column;gap:16px;display:flex}.chat-welcome p{font-size:var(--text-body);margin:0;line-height:1.6}.chat-welcome-heading{font-family:var(--font-heading);font-size:var(--text-body);color:var(--color-heading);font-weight:600}.chat-suggestions{margin:var(--space-1) 0 0;padding:0;list-style:none}.chat-suggestion{align-items:baseline;gap:var(--space-3);width:100%;padding:var(--space-3) 0;border:none;border-bottom:1px solid var(--color-border);background:0 0;display:flex}@supports (color:color-mix(in lab, red, red)){.chat-suggestion{border-bottom:1px solid color-mix(in srgb, var(--color-border) 60%, transparent)}}.chat-suggestion{text-align:left;cursor:pointer;color:var(--color-text-tertiary);font-size:var(--text-reading-meta);transition:color var(--duration-fast) var(--ease-standard);line-height:1.5}.chat-suggestions li:last-child .chat-suggestion{border-bottom:none}.chat-suggestion-arrow{color:var(--color-text-tertiary);transition:transform var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);flex-shrink:0;transform:translate(0)}.chat-suggestion-text{text-wrap:pretty;min-width:0}.chat-suggestion:hover,.chat-suggestion:focus-visible{color:var(--color-heading);outline:none}.chat-suggestion:hover .chat-suggestion-arrow,.chat-suggestion:focus-visible .chat-suggestion-arrow{color:var(--color-heading);transform:translate(3px)}.chat-suggestion:focus-visible{text-underline-offset:3px;text-decoration:underline}@media (prefers-reduced-motion:reduce){.chat-suggestion-arrow{transition:none}.chat-suggestion:hover .chat-suggestion-arrow,.chat-suggestion:focus-visible .chat-suggestion-arrow{transform:none}}.chat-msg{font-size:var(--text-body);line-height:1.6}.chat-msg.user{color:var(--color-heading);align-self:flex-end;max-width:85%;margin-bottom:4px;font-style:italic}.chat-msg.assistant{color:var(--color-text);border-bottom:1px solid var(--color-border);align-self:flex-start;max-width:100%;margin-bottom:8px}@supports (color:color-mix(in lab, red, red)){.chat-msg.assistant{border-bottom:1px solid color-mix(in srgb, var(--color-border) 40%, transparent)}}.chat-msg.assistant{width:100%;padding-bottom:16px}.chat-msg.assistant:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.chat-markdown>:first-child{margin-top:0}.chat-markdown>:last-child{margin-bottom:0}.chat-markdown p{margin:0 0 .75em}.chat-markdown ul,.chat-markdown ol{margin:0 0 .75em;padding-left:1.25em}.chat-markdown li{margin:.15em 0}.chat-markdown a{color:var(--color-link,var(--color-accent));text-decoration:underline}.chat-markdown strong{color:var(--color-heading);font-weight:650}.chat-markdown code{font-family:var(--font-mono,ui-monospace, monospace);background:var(--color-border);font-size:.875em}@supports (color:color-mix(in lab, red, red)){.chat-markdown code{background:color-mix(in srgb, var(--color-border) 30%, transparent)}}.chat-markdown code{border-radius:4px;padding:.1em .35em}.chat-markdown pre{border-radius:var(--radius-md);background:var(--color-bg);margin:0 0 .75em;padding:12px 14px;overflow-x:auto}@supports (color:color-mix(in lab, red, red)){.chat-markdown pre{background:color-mix(in srgb, var(--color-bg) 60%, #000 12%)}}.chat-markdown pre{border:1px solid var(--color-border)}@supports (color:color-mix(in lab, red, red)){.chat-markdown pre{border:1px solid color-mix(in srgb, var(--color-border) 50%, transparent)}}.chat-markdown pre code{background:0 0;padding:0;font-size:.85em;line-height:1.5}.chat-sources{font-size:var(--text-small,.875rem);margin-top:10px}.chat-sources summary{cursor:pointer;color:var(--color-text-muted,var(--color-text));user-select:none}.chat-sources summary:hover{color:var(--color-heading)}.chat-sources ul{margin:8px 0 0;padding-left:1.1em}.chat-sources li{margin:.2em 0}.chat-sources a{color:var(--color-link,var(--color-accent));text-decoration:underline}.chat-loading{color:var(--color-text-tertiary);font-size:var(--text-meta);align-items:center;gap:6px;padding:8px 0;display:flex}.chat-loading-dots{gap:3px;display:inline-flex}.chat-loading-dots span{background-color:var(--color-text-tertiary);border-radius:50%;width:4px;height:4px;animation:1.4s infinite both chat-loading-pulse}.chat-loading-dots span:nth-child(2){animation-delay:.2s}.chat-loading-dots span:nth-child(3){animation-delay:.4s}@keyframes chat-loading-pulse{0%,to{opacity:.32;transform:scale(.92)}50%{opacity:1;transform:scale(1)}}.chat-input-box{justify-content:space-between;align-items:center;width:100%;height:48px;display:flex}.chat-input-icon{color:var(--color-text-tertiary);flex-shrink:0;justify-content:center;align-items:center;margin-left:16px;display:flex}.chat-input-element{font-size:var(--text-meta);height:100%;color:var(--color-heading);background:0 0;border:none;outline:none;flex:1;padding:0 12px;font-family:inherit;font-weight:400}.chat-input-element::placeholder{color:var(--color-text-secondary);opacity:1}.chat-input-element:disabled{cursor:not-allowed}.chat-send-btn{cursor:pointer;color:var(--color-text-secondary);font-size:var(--text-meta);height:100%;transition:color var(--duration-fast) var(--ease-standard);background:0 0;border:none;outline:none;flex-shrink:0;align-items:center;gap:8px;padding:0 16px;font-weight:500;display:inline-flex}.chat-send-btn:hover,.chat-send-btn:focus-visible{color:var(--color-heading)}.chat-input-box:focus-within{box-shadow:inset 0 0 0 2px var(--color-heading)}.chat-send-btn:focus-visible,.chat-close-btn:focus-visible{outline:2px solid var(--color-heading);outline-offset:2px}.chat-send-btn svg{transform:scaleX(-1)}.chat-close-btn{cursor:pointer;color:var(--color-text-tertiary);z-index:10;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:4px;transition:all .2s;display:flex;position:absolute;top:16px;right:16px}.chat-close-btn:hover{color:var(--color-heading);background:#11111114}@supports (color:color-mix(in lab, red, red)){.chat-close-btn:hover{background:color-mix(in srgb, var(--color-heading) 8%, transparent)}}@media (prefers-reduced-motion:reduce){.chat-loading-dots span,.chat-msg,.chat-input-element,.chat-send-btn{transition:none!important;animation:none!important}}.cmdk-portal{z-index:1100;position:fixed;inset:0}.cmdk-overlay{background:var(--color-bg);position:absolute;inset:0}@supports (color:color-mix(in lab, red, red)){.cmdk-overlay{background:color-mix(in srgb, var(--color-bg) 80%, transparent)}}.cmdk-overlay{-webkit-backdrop-filter:blur(8px)}.cmdk-dialog{border:1px solid var(--color-border-primary);border-radius:16px;width:min(92vw,560px);position:absolute;top:18vh;left:50%}@supports (color:color-mix(in lab, red, red)){.cmdk-dialog{border:1px solid color-mix(in srgb, var(--color-border-primary) 15%, transparent)}}.cmdk-dialog{background:var(--color-bg-card)}@supports (color:color-mix(in lab, red, red)){.cmdk-dialog{background:color-mix(in srgb, var(--color-bg-card) 88%, transparent)}}.cmdk-dialog{-webkit-backdrop-filter:blur(6px)saturate(1.15);overflow:hidden;box-shadow:0 20px 40px -15px #00000026}:global(.dark) .cmdk-dialog{border-color:#11111126;box-shadow:0 20px 40px -15px #00000080}@supports (color:color-mix(in lab, red, red)){:global(.dark) .cmdk-dialog{border-color:color-mix(in srgb, var(--color-heading) 15%, transparent)}}@media (width<=640px){.cmdk-dialog{width:94vw;top:10vh}}.cmdk-input-row{color:var(--color-text-tertiary);border-bottom:1px solid var(--color-border);align-items:center;gap:10px;padding:14px 16px;display:flex}@supports (color:color-mix(in lab, red, red)){.cmdk-input-row{border-bottom:1px solid color-mix(in srgb, var(--color-border) 40%, transparent)}}.cmdk-input{min-width:0;color:var(--color-heading);font-family:var(--font-body);background:0 0;border:none;outline:none;flex:1;font-size:15px;line-height:1.4}.cmdk-input::placeholder{color:var(--color-text-tertiary)}.cmdk-list{overscroll-behavior:contain;max-height:min(52vh,420px);padding:6px;scroll-padding-block:6px;overflow-y:auto}.cmdk-group{margin-bottom:4px}[cmdk-group-heading]{font-family:var(--font-mono-label);letter-spacing:.04em;text-transform:uppercase;color:var(--color-text-tertiary);padding:8px 10px 4px;font-size:11px}.cmdk-item{color:var(--color-text-secondary);cursor:pointer;user-select:none;border-radius:8px;align-items:center;gap:10px;padding:9px 10px;font-size:14px;display:flex}.cmdk-item-icon{color:var(--color-text-tertiary);flex-shrink:0}.cmdk-item-label{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.cmdk-item-detail{font-family:var(--font-mono-label);text-transform:uppercase;letter-spacing:.02em;color:var(--color-text-tertiary);flex-shrink:0;font-size:11px}.cmdk-item[aria-selected=true]{background:#11111117}@supports (color:color-mix(in lab, red, red)){.cmdk-item[aria-selected=true]{background:color-mix(in srgb, var(--color-heading) 9%, transparent)}}.cmdk-item[aria-selected=true],.cmdk-item[aria-selected=true] .cmdk-item-icon{color:var(--color-heading)}.cmdk-empty{text-align:center;color:var(--color-text-tertiary);padding:24px 12px;font-size:14px}.article-layout .article-header,.article-layout article.prose,.article-layout .detail-nav{max-width:var(--prose-width);margin-inline:auto}.article-layout .article-header{margin-bottom:var(--article-header-to-content-gap)}.article-layout .article-hero{justify-content:flex-end;align-items:center;gap:var(--article-title-gap);width:100%;max-width:500px;min-height:clamp(156px,24svh,236px);margin:0 auto var(--article-header-gap);flex-direction:column;display:flex}.blog-post-page .article-hero{min-height:0}.article-layout .article-title{text-align:center;text-wrap:balance;font-family:var(--font-heading);font-size:var(--article-title-size);font-weight:510;line-height:var(--article-title-line-height);letter-spacing:-.022em;font-variation-settings:"opsz" 28;font-optical-sizing:none;color:var(--color-heading);margin:0}.article-layout .article-hero-date{font-family:var(--font-date);font-size:var(--text-meta);letter-spacing:-1px;text-transform:uppercase;white-space:nowrap;color:var(--color-text-tertiary);transition:color var(--duration-normal) var(--ease-standard)}.article-layout .article-hero-date.project-meta{white-space:normal;text-align:center;flex-wrap:wrap;justify-content:center;align-items:baseline;display:inline-flex}.article-layout .article-hero-date .meta-sep{color:var(--color-text-tertiary);margin:0 .5ch}.article-layout .article-hero-date .project-categories{text-transform:none;color:var(--color-text-tertiary)}.article-layout .article-excerpt{margin:0 0 var(--section-item-gap);font-size:var(--text-subtitle);letter-spacing:.15px;color:var(--color-text-secondary);font-weight:400;line-height:1.6}.article-layout .article-cover{object-fit:cover;border-radius:var(--radius-base);width:100%;max-height:330px}@media (width<=1023px){.article-layout .article-cover{max-height:240px}}@media (width<=480px){.article-layout .article-cover{border-radius:calc(var(--radius-base) * .75);max-height:180px}}.article-layout article.prose{margin-top:var(--article-header-to-content-gap);font-size:var(--text-body);letter-spacing:.15px;color:var(--color-text);line-height:1.75}.article-layout article.prose>:first-child{margin-top:0;padding-top:0}.article-layout .prose p{margin:0 0 var(--space-5,24px);font-weight:400;line-height:1.75}.article-layout .prose h2{font-size:var(--text-subtitle);letter-spacing:-.3px;color:var(--color-heading);align-items:center;gap:8px;margin:80px 0 12px;font-weight:560;line-height:1.5;display:flex}.article-layout .prose h2:after{content:"";background-color:var(--color-border);flex:1;height:1px;margin-top:4px}.article-layout .prose h3{font-size:var(--text-body);letter-spacing:-.3px;color:var(--color-heading);margin:0 0 8px;padding-top:40px;font-weight:500;line-height:1.75}.article-layout .prose h4{font-size:var(--text-sm);color:var(--color-heading);margin:32px 0 8px;font-weight:500}.article-layout .prose blockquote{background:0 0;border:none;width:100vw;margin:32px calc(50% - 50vw);padding:32px 0;position:relative}.article-layout .prose blockquote p{text-align:center;width:80%;max-width:1020px;font-family:var(--font-serif,Georgia, serif);color:var(--color-text-secondary);margin:0 auto;font-size:32px;font-style:italic;font-weight:500;line-height:1.6818}@media (width<=1023px){.article-layout .prose blockquote{width:100%;margin-left:0;margin-right:0;padding-top:24px;padding-bottom:24px}.article-layout .prose blockquote p{width:100%;font-size:24px}}.article-layout .prose img:not(.prose-youtube-thumbnail,.prose-beforeafter-img,.prose-tweet-img){object-fit:cover;border:2px solid var(--color-border);will-change:transform;border-radius:16px;width:100%;height:auto;transition:transform .3s ease-in-out;display:block}.article-layout .prose img:not(.prose-youtube-thumbnail,.prose-beforeafter-img,.prose-tweet-img):hover{transform:scale(1.02)}.article-layout .prose img:not(.prose-youtube-thumbnail,.prose-beforeafter-img,.prose-tweet-img):active{transform:scale(.95)}.article-layout .prose img:not(.prose-youtube-thumbnail,.prose-beforeafter-img,.prose-tweet-img),.article-layout .prose .prose-figure{margin-block:24px}.article-layout .prose .prose-figure img{margin-block:0}@media (prefers-reduced-motion:reduce){.article-layout .prose img:not(.prose-youtube-thumbnail,.prose-beforeafter-img,.prose-tweet-img){transition:none}.article-layout .prose img:not(.prose-youtube-thumbnail,.prose-beforeafter-img,.prose-tweet-img):hover,.article-layout .prose img:not(.prose-youtube-thumbnail,.prose-beforeafter-img,.prose-tweet-img):active{transform:none}}@media (width<=1023px){.article-layout .prose h2{margin-top:clamp(32px,5vw,48px)}}:root.theme-switching,:root.theme-switching *,:root.theme-switching :before,:root.theme-switching :after{transition:none!important}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-cyrillic-ext-wght-normal.BOeWTOD4.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-cyrillic-wght-normal.DqGufNeO.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-greek-ext-wght-normal.DlzME5K_.woff2)format("woff2-variations");unicode-range:U+1F??}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-greek-wght-normal.CkhJZR-_.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-vietnamese-wght-normal.CBcvBZtf.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-latin-ext-wght-normal.DO1Apj_S.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-latin-wght-normal.Dx4kXJAl.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Fira Code Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/fira-code-cyrillic-ext-wght-normal.DhYMMuQd.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Fira Code Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/fira-code-cyrillic-wght-normal.Y3u8pIsh.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Fira Code Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/fira-code-greek-ext-wght-normal.wWus70Ix.woff2)format("woff2-variations");unicode-range:U+1F??}@font-face{font-family:Fira Code Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/fira-code-greek-wght-normal.B2SviObF.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Fira Code Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/fira-code-symbols2-wght-normal.CE6EOz_n.woff2)format("woff2-variations");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Fira Code Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/fira-code-latin-ext-wght-normal.Dvfvaomy.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fira Code Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/fira-code-latin-wght-normal.CHoedHDv.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}.astro-route-announcer{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;top:0;left:0;overflow:hidden}footer[data-astro-cid-hymjxmbv]{border-top:1px solid var(--color-border);flex-direction:column;align-items:center;margin-top:40px;padding:17.6px 0 22.4px;display:flex}footer[data-astro-cid-hymjxmbv] .brand-signature{margin-bottom:10px}.footer-line[data-astro-cid-hymjxmbv]{text-align:center;font-family:var(--font-date);letter-spacing:.06em;text-transform:uppercase;color:var(--color-text-tertiary);margin:0;font-size:11.52px;font-weight:500}body{background:var(--color-bg);color:var(--color-text);margin:0;overflow-y:scroll}.outer-padding[data-astro-cid-tnckdnjh]{padding:clamp(25.6px,3vw,37.6px) 29.92px 40px}@media (width<=767px){.outer-padding[data-astro-cid-tnckdnjh]{padding:0}}.container[data-astro-cid-tnckdnjh]{max-width:var(--width-container);z-index:1;width:100%;margin-left:auto;margin-right:auto;position:relative}.main-wrapper[data-astro-cid-tnckdnjh]{z-index:10;background:var(--color-bg);border:none;position:relative}.layout-grid[data-astro-cid-tnckdnjh]{flex-wrap:nowrap;display:flex}.content-col[data-astro-cid-tnckdnjh]{box-sizing:border-box;flex:1 1 0;width:auto;min-width:0;padding:0 40px 40px 24px}@media (width>=1024px){.main-wrapper[data-astro-cid-tnckdnjh]:not(.is-main) .content-col[data-astro-cid-tnckdnjh],.main-wrapper[data-astro-cid-tnckdnjh].is-main:not(.is-article) .content-col[data-astro-cid-tnckdnjh]{max-width:var(--measure-surface,var(--measure-single,760px));margin:0 auto;padding:0 24px 48px}.main-wrapper[data-astro-cid-tnckdnjh].is-main:not(.is-article) .content-measure{max-width:var(--measure-single,704px)}.main-wrapper[data-astro-cid-tnckdnjh].is-article .article-header,.main-wrapper[data-astro-cid-tnckdnjh].is-article .article-cover,.main-wrapper[data-astro-cid-tnckdnjh].is-article .project-links,.main-wrapper[data-astro-cid-tnckdnjh].is-article .prose{max-width:var(--measure-single,672px)}}@media (width<=1023px){.content-col[data-astro-cid-tnckdnjh]{width:100%;padding:24px clamp(20px,6vw,24px) 40px}}.content-col[data-astro-cid-tnckdnjh]{padding-top:100px!important}@media (width<=767px){.content-col[data-astro-cid-tnckdnjh]{padding-top:76px!important}}.skip-link[data-astro-cid-tnckdnjh]{z-index:9999;background:var(--color-bg-card);color:var(--color-link);border:2px solid var(--color-link);border-radius:var(--radius-base);padding:8px 16px;font-size:14px;font-weight:600;text-decoration:none;position:absolute;top:-100%;left:16px}.skip-link[data-astro-cid-tnckdnjh]:focus{top:16px}.back-to-top[data-astro-cid-tnckdnjh]{left:max(var(--back-to-top-offset), calc((100vw - var(--width-container)) / 2));right:auto;bottom:var(--back-to-top-offset);z-index:200;width:var(--back-to-top-size);height:var(--back-to-top-size);color:var(--color-text-secondary);background:color-mix(in srgb, var(--color-bg-card) 52%, transparent);border:1.5px solid color-mix(in srgb, var(--color-border-primary) 42%, transparent);border-radius:var(--utility-control-radius);-webkit-backdrop-filter:blur(12px)saturate(1.15);cursor:pointer;opacity:0;pointer-events:none;transition:opacity var(--utility-control-transition), transform var(--utility-control-transition), color .2s var(--ease-standard), border-color .2s var(--ease-standard);justify-content:center;align-items:center;padding:0;display:flex;position:fixed;transform:translateY(8px);box-shadow:0 4px 20px -2px #00000014}.dark .back-to-top[data-astro-cid-tnckdnjh]{box-shadow:0 4px 24px -2px #0000004d}.back-to-top[data-astro-cid-tnckdnjh].visible{opacity:1;pointer-events:auto;transform:translateY(0)}.back-to-top[data-astro-cid-tnckdnjh]:hover{color:var(--color-heading);border-color:color-mix(in srgb, var(--color-heading) 22%, var(--color-border-primary))}.back-to-top[data-astro-cid-tnckdnjh]:focus-visible{outline:2px solid var(--color-link);outline-offset:2px}.back-to-top-icon[data-astro-cid-tnckdnjh]{width:var(--back-to-top-icon-size);height:var(--back-to-top-icon-size);transition:transform .2s var(--ease-standard)}.back-to-top[data-astro-cid-tnckdnjh]:hover .back-to-top-icon[data-astro-cid-tnckdnjh]{transform:translateY(-2px)}@media (width<=640px){.back-to-top[data-astro-cid-tnckdnjh]{left:var(--back-to-top-offset-sm);bottom:var(--back-to-top-offset-sm);width:var(--back-to-top-size-sm);height:var(--back-to-top-size-sm);background:color-mix(in srgb, var(--color-bg-card) 96%, var(--color-bg));-webkit-backdrop-filter:none}}@media (prefers-reduced-motion:reduce){.back-to-top[data-astro-cid-tnckdnjh],.back-to-top-icon[data-astro-cid-tnckdnjh]{transition:opacity .2s;transform:none!important}}
