:root[data-bs-theme=light],[data-bs-theme=light] ::backdrop{--sl-color-white: hsl(224, 10%, 10%);--sl-color-gray-1: hsl(224, 14%, 16%);--sl-color-gray-2: hsl(224, 10%, 23%);--sl-color-gray-3: hsl(224, 7%, 36%);--sl-color-gray-4: hsl(224, 6%, 56%);--sl-color-gray-5: hsl(224, 6%, 77%);--sl-color-gray-6: hsl(224, 20%, 94%);--sl-color-gray-7: hsl(224, 19%, 97%);--sl-color-black: hsl(0, 0%, 100%)}:root,::backdrop{--sl-color-white: hsl(0, 0%, 100%);--sl-color-gray-1: hsl(224, 20%, 94%);--sl-color-gray-2: hsl(224, 6%, 77%);--sl-color-gray-3: hsl(224, 6%, 56%);--sl-color-gray-4: hsl(224, 7%, 36%);--sl-color-gray-5: hsl(224, 10%, 23%);--sl-color-gray-6: hsl(224, 14%, 16%);--sl-color-black: hsl(224, 10%, 10%);--sl-hue-orange: 41;--sl-color-orange-low: hsl(var(--sl-hue-orange), 39%, 22%);--sl-color-orange: hsl(var(--sl-hue-orange), 82%, 63%);--sl-color-orange-high: hsl(var(--sl-hue-orange), 82%, 87%);--sl-hue-green: 101;--sl-color-green-low: hsl(var(--sl-hue-green), 39%, 22%);--sl-color-green: hsl(var(--sl-hue-green), 82%, 63%);--sl-color-green-high: hsl(var(--sl-hue-green), 82%, 80%);--sl-hue-blue: 234;--sl-color-blue-low: hsl(var(--sl-hue-blue), 54%, 20%);--sl-color-blue: hsl(var(--sl-hue-blue), 100%, 60%);--sl-color-blue-high: hsl(var(--sl-hue-blue), 100%, 87%);--sl-hue-purple: 281;--sl-color-purple-low: hsl(var(--sl-hue-purple), 39%, 22%);--sl-color-purple: hsl(var(--sl-hue-purple), 82%, 63%);--sl-color-purple-high: hsl(var(--sl-hue-purple), 82%, 89%);--sl-hue-red: 339;--sl-color-red-low: hsl(var(--sl-hue-red), 39%, 22%);--sl-color-red: hsl(var(--sl-hue-red), 82%, 63%);--sl-color-red-high: hsl(var(--sl-hue-red), 82%, 87%);--sl-color-accent-low: hsl(224, 54%, 20%);--sl-color-accent: hsl(224, 100%, 60%);--sl-color-accent-high: hsl(224, 100%, 85%);--sl-color-text: var(--sl-color-gray-2);--sl-color-text-accent: var(--sl-color-accent-high);--sl-color-text-invert: var(--sl-color-accent-low);--sl-color-bg: var(--sl-color-black);--sl-color-bg-nav: var(--sl-color-gray-6);--sl-color-bg-sidebar: var(--sl-color-gray-6);--sl-color-bg-inline-code: var(--sl-color-gray-5);--sl-color-hairline-light: var(--sl-color-gray-5);--sl-color-hairline: var(--sl-color-gray-6);--sl-color-hairline-shade: var(--sl-color-black);--sl-color-backdrop-overlay: hsla(223, 13%, 10%, 0.66);--sl-shadow-sm: 0px 1px 1px hsla(0, 0%, 0%, 0.12), 0px 2px 1px hsla(0, 0%, 0%, 0.24);--sl-shadow-md: 0px 8px 4px hsla(0, 0%, 0%, 0.08), 0px 5px 2px hsla(0, 0%, 0%, 0.08), 0px 3px 2px hsla(0, 0%, 0%, 0.12), 0px 1px 1px hsla(0, 0%, 0%, 0.15);--sl-shadow-lg: 0px 25px 7px hsla(0, 0%, 0%, 0.03), 0px 16px 6px hsla(0, 0%, 0%, 0.1), 0px 9px 5px hsla(223, 13%, 10%, 0.33), 0px 4px 4px hsla(0, 0%, 0%, 0.75), 0px 4px 2px hsla(0, 0%, 0%, 0.25);--sl-text-xs: 0.8125rem;--sl-text-sm: 0.875rem;--sl-text-base: 1rem;--sl-text-lg: 1.125rem;--sl-text-xl: 1.25rem;--sl-text-2xl: 1.5rem;--sl-text-3xl: 1.8125rem;--sl-text-4xl: 2.1875rem;--sl-text-5xl: 2.625rem;--sl-text-6xl: 4rem;--sl-text-body: var(--sl-text-base);--sl-text-body-sm: var(--sl-text-xs);--sl-text-code: var(--sl-text-sm);--sl-text-code-sm: var(--sl-text-xs);--sl-text-h1: var(--sl-text-4xl);--sl-text-h2: var(--sl-text-3xl);--sl-text-h3: var(--sl-text-2xl);--sl-text-h4: var(--sl-text-xl);--sl-text-h5: var(--sl-text-lg);--sl-line-height: 1.8;--sl-line-height-headings: 1.2;--sl-font-system: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--sl-font-system-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--__sl-font: var(--sl-font, ""), var(--sl-font-system);--__sl-font-mono: var(--sl-font-mono, ""), var(--sl-font-system-mono);--sl-nav-height: 3.5rem;--sl-nav-pad-x: 1rem;--sl-nav-pad-y: 0.75rem;--sl-mobile-toc-height: 3rem;--sl-sidebar-width: 18.75rem;--sl-sidebar-pad-x: 1rem;--sl-content-width: 45rem;--sl-content-pad-x: 1rem;--sl-menu-button-size: 2rem;--sl-nav-gap: var(--sl-content-pad-x);--sl-outline-offset-inside: -0.1875rem;--sl-z-index-toc: 4;--sl-z-index-menu: 5;--sl-z-index-navbar: 10;--sl-z-index-skiplink: 20}:root{--purple-hsl: 255, 60%, 60%;--overlay-blurple: hsla(var(--purple-hsl), 0.2)}:root{--ec-brdRad: 0px;--ec-brdWd: 1px;--ec-brdCol: color-mix(in srgb, var(--sl-color-gray-5), transparent 25%);--ec-codeFontFml: var(--__sl-font-mono);--ec-codeFontSize: var(--sl-text-code);--ec-codeFontWg: 400;--ec-codeLineHt: var(--sl-line-height);--ec-codePadBlk: 0.75rem;--ec-codePadInl: 1rem;--ec-codeBg: #011627;--ec-codeFg: #d6deeb;--ec-codeSelBg: #1d3b53;--ec-uiFontFml: var(--__sl-font);--ec-uiFontSize: 0.9rem;--ec-uiFontWg: 400;--ec-uiLineHt: 1.65;--ec-uiPadBlk: 0.25rem;--ec-uiPadInl: 1rem;--ec-uiSelBg: #234d708c;--ec-uiSelFg: #ffffff;--ec-focusBrd: #122d42;--ec-sbThumbCol: #ffffff17;--ec-sbThumbHoverCol: #ffffff49;--ec-tm-lineMarkerAccentMarg: 0rem;--ec-tm-lineMarkerAccentWd: 0.15rem;--ec-tm-lineDiffIndMargLeft: 0.25rem;--ec-tm-inlMarkerBrdWd: 1.5px;--ec-tm-inlMarkerBrdRad: 0.2rem;--ec-tm-inlMarkerPad: 0.15rem;--ec-tm-insDiffIndContent: "+";--ec-tm-delDiffIndContent: "-";--ec-tm-markBg: #ffffff17;--ec-tm-markBrdCol: #ffffff40;--ec-tm-insBg: #1e571599;--ec-tm-insBrdCol: #487f3bd0;--ec-tm-insDiffIndCol: #79b169d0;--ec-tm-delBg: #862d2799;--ec-tm-delBrdCol: #b4554bd0;--ec-tm-delDiffIndCol: #ed8779d0;--ec-frm-shdCol: #011627;--ec-frm-frameBoxShdCssVal: none;--ec-frm-edActTabBg: var(--sl-color-gray-6);--ec-frm-edActTabFg: var(--sl-color-text);--ec-frm-edActTabBrdCol: transparent;--ec-frm-edActTabIndHt: 1px;--ec-frm-edActTabIndTopCol: var(--sl-color-accent-high);--ec-frm-edActTabIndBtmCol: transparent;--ec-frm-edTabsMargInlStart: 0;--ec-frm-edTabsMargBlkStart: 0;--ec-frm-edTabBrdRad: 0px;--ec-frm-edTabBarBg: var(--sl-color-black);--ec-frm-edTabBarBrdCol: color-mix(in srgb, var(--sl-color-gray-5), transparent 25%);--ec-frm-edTabBarBrdBtmCol: color-mix(in srgb, var(--sl-color-gray-5), transparent 25%);--ec-frm-edBg: var(--sl-color-gray-6);--ec-frm-trmTtbDotsFg: color-mix(in srgb, var(--sl-color-gray-5), transparent 25%);--ec-frm-trmTtbDotsOpa: 0.75;--ec-frm-trmTtbBg: var(--sl-color-black);--ec-frm-trmTtbFg: var(--sl-color-text);--ec-frm-trmTtbBrdBtmCol: color-mix(in srgb, var(--sl-color-gray-5), transparent 25%);--ec-frm-trmBg: var(--sl-color-gray-6);--ec-frm-inlBtnFg: var(--sl-color-text);--ec-frm-inlBtnBg: var(--sl-color-text);--ec-frm-inlBtnBgIdleOpa: 0;--ec-frm-inlBtnBgHoverOrFocusOpa: 0.2;--ec-frm-inlBtnBgActOpa: 0.3;--ec-frm-inlBtnBrd: var(--sl-color-text);--ec-frm-inlBtnBrdOpa: 0.4;--ec-frm-tooltipSuccessBg: #158744;--ec-frm-tooltipSuccessFg: white}:root,[data-bs-theme=light]{--bs-blue: hsl(234, 100%, 60%);--bs-indigo: #6610f2;--bs-purple: hsl(281, 82%, 63%);--bs-pink: #d63384;--bs-red: hsl(339, 82%, 63%);--bs-orange: #fd7e14;--bs-yellow: hsl(41, 82%, 63%);--bs-green: hsl(101, 82%, 63%);--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: hsl(234, 100%, 60%);--bs-secondary: #6c757d;--bs-success: hsl(101, 82%, 63%);--bs-info: hsl(234, 100%, 60%);--bs-warning: hsl(41, 82%, 63%);--bs-danger: hsl(339, 82%, 63%);--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 51, 71, 255;--bs-secondary-rgb: 108, 117, 125;--bs-success-rgb: 132, 238, 83;--bs-info-rgb: 51, 71, 255;--bs-warning-rgb: 238, 189, 83;--bs-danger-rgb: 238, 83, 137;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-primary-text-emphasis: rgb(20.4, 28.56, 102);--bs-secondary-text-emphasis: rgb(43.2, 46.8, 50);--bs-success-text-emphasis: rgb(52.91284, 95.2068, 33.3132);--bs-info-text-emphasis: rgb(20.4, 28.56, 102);--bs-warning-text-emphasis: rgb(95.2068, 75.60716, 33.3132);--bs-danger-text-emphasis: rgb(95.2068, 33.3132, 54.97596);--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: rgb(214.2, 218.28, 255);--bs-secondary-bg-subtle: rgb(225.6, 227.4, 229);--bs-success-bg-subtle: rgb(230.45642, 251.6034, 220.6566);--bs-info-bg-subtle: rgb(214.2, 218.28, 255);--bs-warning-bg-subtle: rgb(251.6034, 241.80358, 220.6566);--bs-danger-bg-subtle: rgb(251.6034, 220.6566, 231.48798);--bs-light-bg-subtle: rgb(251.5, 252, 252.5);--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: rgb(173.4, 181.56, 255);--bs-secondary-border-subtle: rgb(196.2, 199.8, 203);--bs-success-border-subtle: rgb(205.91284, 248.2068, 186.3132);--bs-info-border-subtle: rgb(173.4, 181.56, 255);--bs-warning-border-subtle: rgb(248.2068, 228.60716, 186.3132);--bs-danger-border-subtle: rgb(248.2068, 186.3132, 207.97596);--bs-light-border-subtle: #e9ecef;--bs-dark-border-subtle: #adb5bd;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-font-sans-serif: "Jost", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #1d2d35;--bs-body-color-rgb: 29, 45, 53;--bs-body-bg: #fff;--bs-body-bg-rgb: 255, 255, 255;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0, 0, 0;--bs-secondary-color: rgba(29, 45, 53, 0.75);--bs-secondary-color-rgb: 29, 45, 53;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233, 236, 239;--bs-tertiary-color: rgba(29, 45, 53, 0.5);--bs-tertiary-color-rgb: 29, 45, 53;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248, 249, 250;--bs-heading-color: inherit;--bs-link-color: hsl(234, 100%, 60%);--bs-link-color-rgb: 51, 71, 255;--bs-link-decoration: none;--bs-link-hover-color: rgb(40.8, 57.12, 204);--bs-link-hover-color-rgb: 41, 57, 204;--bs-link-hover-decoration: underline;--bs-code-color: #d63384;--bs-highlight-color: #1d2d35;--bs-highlight-bg: rgb(251.6034, 241.80358, 220.6566);--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0, 0, 0, 0.175);--bs-border-radius: 0.375rem;--bs-border-radius-sm: 0.25rem;--bs-border-radius-lg: 0.5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width: 0.25rem;--bs-focus-ring-opacity: 0.25;--bs-focus-ring-color: rgba(51, 71.4, 255, 0.25);--bs-form-valid-color: hsl(101, 82%, 63%);--bs-form-valid-border-color: hsl(101, 82%, 63%);--bs-form-invalid-color: hsl(339, 82%, 63%);--bs-form-invalid-border-color: hsl(339, 82%, 63%)}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color: hsl(224, 6%, 77%);--bs-body-color-rgb: 193, 195, 200;--bs-body-bg: hsl(224, 10%, 10%);--bs-body-bg-rgb: 23, 24, 28;--bs-emphasis-color: #fff;--bs-emphasis-color-rgb: 255, 255, 255;--bs-secondary-color: rgba(192.831, 194.7078, 199.869, 0.75);--bs-secondary-color-rgb: 193, 195, 200;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52, 58, 64;--bs-tertiary-color: rgba(192.831, 194.7078, 199.869, 0.5);--bs-tertiary-color-rgb: 193, 195, 200;--bs-tertiary-bg: rgb(42.5, 47.5, 52.5);--bs-tertiary-bg-rgb: 43, 48, 53;--bs-primary-text-emphasis: rgb(132.6, 144.84, 255);--bs-secondary-text-emphasis: rgb(166.8, 172.2, 177);--bs-success-text-emphasis: rgb(181.36926, 244.8102, 151.9698);--bs-info-text-emphasis: rgb(132.6, 144.84, 255);--bs-warning-text-emphasis: rgb(244.8102, 215.41074, 151.9698);--bs-danger-text-emphasis: rgb(244.8102, 151.9698, 184.46394);--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: rgb(10.2, 14.28, 51);--bs-secondary-bg-subtle: rgb(21.6, 23.4, 25);--bs-success-bg-subtle: rgb(26.45642, 47.6034, 16.6566);--bs-info-bg-subtle: rgb(10.2, 14.28, 51);--bs-warning-bg-subtle: rgb(47.6034, 37.80358, 16.6566);--bs-danger-bg-subtle: rgb(47.6034, 16.6566, 27.48798);--bs-light-bg-subtle: hsl(224, 14%, 16%);--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: rgb(30.6, 42.84, 153);--bs-secondary-border-subtle: rgb(64.8, 70.2, 75);--bs-success-border-subtle: rgb(79.36926, 142.8102, 49.9698);--bs-info-border-subtle: rgb(30.6, 42.84, 153);--bs-warning-border-subtle: rgb(142.8102, 113.41074, 49.9698);--bs-danger-border-subtle: rgb(142.8102, 49.9698, 82.46394);--bs-light-border-subtle: hsl(224, 10%, 23%);--bs-dark-border-subtle: #343a40;--bs-heading-color: hsl(0, 0%, 100%);--bs-link-color: hsl(224, 100%, 85%);--bs-link-hover-color: rgb(193.8, 210.12, 255);--bs-link-color-rgb: 179, 199, 255;--bs-link-hover-color-rgb: 194, 210, 255;--bs-code-color: rgb(230.4, 132.6, 181.2);--bs-highlight-color: hsl(224, 6%, 77%);--bs-highlight-bg: rgb(95.2068, 75.60716, 33.3132);--bs-border-color: #495057;--bs-border-color-translucent: rgba(255, 255, 255, 0.15);--bs-form-valid-color: rgb(181.36926, 244.8102, 151.9698);--bs-form-valid-border-color: rgb(181.36926, 244.8102, 151.9698);--bs-form-invalid-color: rgb(244.8102, 151.9698, 184.46394);--bs-form-invalid-border-color: rgb(244.8102, 151.9698, 184.46394)}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:700;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + 0.6vw)}@media(min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){h4,.h4{font-size:1.5rem}}p{margin-top:0;margin-bottom:1rem}ol,ul{padding-left:2rem}ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;color:var(--bs-highlight-color);background-color:var(--bs-highlight-bg)}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:none}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb);text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:0.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button{cursor:pointer;filter:grayscale(1)}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}summary{display:list-item;cursor:pointer}[hidden]{display:none !important}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.img-fluid{max-width:100%;height:auto}.figure{display:inline-block}.container-fluid,.container-lg{--bs-gutter-x: 3rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-right:auto;margin-left:auto}@media(min-width: 992px){.container-lg{max-width:960px}}@media(min-width: 1200px){.container-lg{max-width:1240px}}@media(min-width: 1400px){.container-lg{max-width:1320px}}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.table,table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: var(--bs-emphasis-color);--bs-table-bg: var(--bs-body-bg);--bs-table-border-color: var(--bs-border-color);--bs-table-accent-bg: transparent;--bs-table-striped-color: var(--bs-emphasis-color);--bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05);--bs-table-active-color: var(--bs-emphasis-color);--bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1);--bs-table-hover-color: var(--bs-emphasis-color);--bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*,table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody,table>tbody{vertical-align:inherit}.table>thead,table>thead{vertical-align:bottom}[data-bs-theme=dark] table{--bs-table-color: #fff;--bs-table-bg: #212529;--bs-table-border-color: rgb(77.4, 80.6, 83.8);--bs-table-striped-bg: rgb(44.1, 47.9, 51.7);--bs-table-striped-color: #fff;--bs-table-active-bg: rgb(55.2, 58.8, 62.4);--bs-table-active-color: #fff;--bs-table-hover-bg: rgb(49.65, 53.35, 57.05);--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}li input[type=checkbox]{--bs-form-check-bg: var(--bs-body-bg);flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-print-color-adjust:exact;print-color-adjust:exact}li input[type=checkbox]{border-radius:.25em}li input[type=radio][type=checkbox]{border-radius:50%}li input[type=checkbox]:active{filter:brightness(90%)}li input[type=checkbox]:focus{border-color:hsl(234,100%,80%);outline:0;box-shadow:0 0 0 .25rem rgba(51,71.4,255,.25)}li input[type=checkbox]:checked{background-color:rgb(51,71.4,255);border-color:rgb(51,71.4,255)}li input:checked[type=checkbox]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}li input[type=checkbox]:checked[type=radio]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}li input[type=checkbox]:indeterminate{background-color:rgb(51,71.4,255);border-color:rgb(51,71.4,255);--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}li input[type=checkbox]:disabled{pointer-events:none;filter:none;opacity:.5}.nav{--bs-nav-link-padding-x: 1rem;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-link-color);--bs-nav-link-hover-color: var(--bs-link-hover-color);--bs-nav-link-disabled-color: var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);text-decoration:none;background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(-1*var(--bs-border-width))}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}@keyframes progress-bar-stripes{0%{background-position-x:var(--bs-progress-height)}}:root,[data-bs-theme=light]{--bs-btn-close-filter: }[data-bs-theme=dark]{--bs-btn-close-filter: invert(1) grayscale(100%) brightness(200%)}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: 0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}:root,[data-bs-theme=light]{--bs-carousel-indicator-active-bg: #fff;--bs-carousel-caption-color: #fff;--bs-carousel-control-icon-filter: }[data-bs-theme=dark]{--bs-carousel-indicator-active-bg: #000;--bs-carousel-caption-color: #000;--bs-carousel-control-icon-filter: invert(1) grayscale(100)}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.show{opacity:.5}@keyframes placeholder-glow{50%{opacity:.2}}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}@font-face{font-family:Jost;font-style:normal;font-weight:400;font-display:swap;src:local("Jost Regular Regular"),local("Jost-Regular"),local("Jost* Book"),local("Jost-Book"),url("fonts/vendor/jost/jost-v4-latin-regular.woff2") format("woff2"),url("fonts/vendor/jost/jost-v4-latin-regular.woff") format("woff")}@font-face{font-family:Jost;font-style:normal;font-weight:500;font-display:swap;src:local("Jost Regular Medium"),local("JostRoman-Medium"),local("Jost* Medium"),local("Jost-Medium"),url("fonts/vendor/jost/jost-v4-latin-500.woff2") format("woff2"),url("fonts/vendor/jost/jost-v4-latin-500.woff") format("woff")}@font-face{font-family:Jost;font-style:normal;font-weight:700;font-display:swap;src:local("Jost Regular Bold"),local("JostRoman-Bold"),local("Jost* Bold"),local("Jost-Bold"),url("fonts/vendor/jost/jost-v4-latin-700.woff2") format("woff2"),url("fonts/vendor/jost/jost-v4-latin-700.woff") format("woff")}@font-face{font-family:Jost;font-style:italic;font-weight:400;font-display:swap;src:local("Jost Italic Italic"),local("Jost-Italic"),local("Jost* BookItalic"),local("Jost-BookItalic"),url("fonts/vendor/jost/jost-v4-latin-italic.woff2") format("woff2"),url("fonts/vendor/jost/jost-v4-latin-italic.woff") format("woff")}@font-face{font-family:Jost;font-style:italic;font-weight:500;font-display:swap;src:local("Jost Italic Medium Italic"),local("JostItalic-Medium"),local("Jost* Medium Italic"),local("Jost-MediumItalic"),url("fonts/vendor/jost/jost-v4-latin-500italic.woff2") format("woff2"),url("fonts/vendor/jost/jost-v4-latin-500italic.woff") format("woff")}@font-face{font-family:Jost;font-style:italic;font-weight:700;font-display:swap;src:local("Jost Italic Bold Italic"),local("JostItalic-Bold"),local("Jost* Bold Italic"),local("Jost-BoldItalic"),url("fonts/vendor/jost/jost-v4-latin-700italic.woff2") format("woff2"),url("fonts/vendor/jost/jost-v4-latin-700italic.woff") format("woff")}h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:2rem;margin-bottom:1rem}@media(min-width: 768px){body{font-size:1.125rem}h1,.h1,h2,h3,h4,.h2,.h3,.h4{margin-bottom:1.125rem}}a:hover,a:focus{text-decoration:underline}.section{padding-top:5rem;padding-bottom:5rem}body.section{padding-top:0;padding-bottom:0}@media(min-width: 992px){}@media(min-width: 992px){}#TableOfContents ul{padding-left:0;list-style:none}.modal-backdrop{background-color:#fff}.modal-backdrop.show{opacity:.7}@media(min-width: 768px){.modal-backdrop.show{opacity:0}}li input[type=checkbox]{margin:.25rem;border:1px solid #ced4da}li input[type=checkbox]:disabled{pointer-events:none;filter:none;opacity:1}li input[type=checkbox]:checked{background-color:#5d2f86;border-color:#5d2f86}[data-bs-theme=dark] li input[type=checkbox]{border:1px solid #6c757d}[data-bs-theme=dark] li input[type=checkbox]:checked{background-color:hsl(224,100%,85%);border-color:hsl(224,100%,85%);--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%231d2d35' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}hr{border-color:gray}[data-bs-theme=dark] hr{border-color:var(--sl-color-gray-3)}.highlight>.chroma{border:1px solid color-mix(in srgb, var(--sl-color-gray-5), transparent 25%)}.bg{background-color:var(--sl-color-gray-7)}.chroma{background-color:var(--sl-color-gray-7)}.chroma .err{color:inherit}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:rgba(0,0,0,.1019607843)}.chroma .hl{border-inline-start:.15rem solid rgba(0,0,0,.3333333333);margin-left:-1rem;margin-right:-1rem;padding-left:1rem;padding-right:1rem}.chroma .hl .ln{margin-left:-0.15rem}.chroma .lnt{white-space:pre;-webkit-user-select:none;-moz-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em 0 .4em;color:#7f7f7f}.chroma .ln{white-space:pre;-webkit-user-select:none;-moz-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em 0 .4em;color:#7f7f7f}.chroma .line{display:flex}.chroma .k{color:#000;font-weight:bold}.chroma .kc{color:#000;font-weight:bold}.chroma .kd{color:#000;font-weight:bold}.chroma .kn{color:#000;font-weight:bold}.chroma .kp{color:#000;font-weight:bold}.chroma .kr{color:#000;font-weight:bold}.chroma .kt{color:#458;font-weight:bold}.chroma .na{color:teal}.chroma .nb{color:#0086b3}.chroma .bp{color:#999}.chroma .nc{color:#458;font-weight:bold}.chroma .no{color:teal}.chroma .nd{color:#3c5d5d;font-weight:bold}.chroma .ni{color:purple}.chroma .ne{color:#900;font-weight:bold}.chroma .nf{color:#900;font-weight:bold}.chroma .nl{color:#900;font-weight:bold}.chroma .nn{color:#555}.chroma .nt{color:navy}.chroma .nv{color:teal}.chroma .vc{color:teal}.chroma .vg{color:teal}.chroma .vi{color:teal}.chroma .s{color:#d14}.chroma .sa{color:#d14}.chroma .sb{color:#d14}.chroma .sc{color:#d14}.chroma .dl{color:#d14}.chroma .sd{color:#d14}.chroma .s2{color:#d14}.chroma .se{color:#d14}.chroma .sh{color:#d14}.chroma .si{color:#d14}.chroma .sx{color:#d14}.chroma .sr{color:#009926}.chroma .s1{color:#d14}.chroma .ss{color:#990073}.chroma .m{color:#099}.chroma .mb{color:#099}.chroma .mf{color:#099}.chroma .mh{color:#099}.chroma .mi{color:#099}.chroma .il{color:#099}.chroma .mo{color:#099}.chroma .o{color:#000;font-weight:bold}.chroma .ow{color:#000;font-weight:bold}.chroma .c{color:#998;font-style:italic}.chroma .ch{color:#998;font-style:italic}.chroma .cm{color:#998;font-style:italic}.chroma .c1{color:#998;font-style:italic}.chroma .cs{color:#999;font-weight:bold;font-style:italic}.chroma .cp{color:#999;font-weight:bold;font-style:italic}.chroma .cpf{color:#999;font-weight:bold;font-style:italic}.chroma .gd{color:#000;background-color:#fdd}.chroma .ge{color:inherit;font-style:italic}.chroma .gr{color:#a00}.chroma .gh{color:#999}.chroma .gi{color:#000;background-color:#dfd}.chroma .go{color:#888}.chroma .gp{color:#555}.chroma .gs{font-weight:bold}.chroma .gu{color:#aaa}.chroma .gt{color:#a00}.chroma .gl{text-decoration:underline}.chroma .w{color:#bbb}[data-bs-theme=dark] .highlight>.chroma{border:1px solid color-mix(in srgb, var(--sl-color-gray-5), transparent 25%)}[data-bs-theme=dark] .bg{color:#c9d1d9;background-color:var(--sl-color-gray-6)}[data-bs-theme=dark] .chroma{color:#c9d1d9;background-color:var(--sl-color-gray-6)}[data-bs-theme=dark] .chroma .err{color:inherit}[data-bs-theme=dark] .chroma .lnlinks{outline:none;text-decoration:none;color:inherit}[data-bs-theme=dark] .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}[data-bs-theme=dark] .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}[data-bs-theme=dark] .chroma .hl{background-color:hsla(0,0%,100%,.0901960784)}[data-bs-theme=dark] .chroma .hl{border-inline-start:.15rem solid hsla(0,0%,100%,.2509803922);margin-left:-1rem;margin-right:-1rem;padding-left:1rem;padding-right:1rem}[data-bs-theme=dark] .chroma .hl .ln{margin-left:-0.15rem}[data-bs-theme=dark] .chroma .lnt{white-space:pre;-webkit-user-select:none;-moz-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em 0 .4em;color:#64686c}[data-bs-theme=dark] .chroma .ln{white-space:pre;-webkit-user-select:none;-moz-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em 0 .4em;color:#6e7681}[data-bs-theme=dark] .chroma .line{display:flex}[data-bs-theme=dark] .chroma .k{color:#ff7b72}[data-bs-theme=dark] .chroma .kc{color:#79c0ff}[data-bs-theme=dark] .chroma .kd{color:#ff7b72}[data-bs-theme=dark] .chroma .kn{color:#ff7b72}[data-bs-theme=dark] .chroma .kp{color:#79c0ff}[data-bs-theme=dark] .chroma .kr{color:#ff7b72}[data-bs-theme=dark] .chroma .kt{color:#ff7b72}[data-bs-theme=dark] .chroma .na{color:#d2a8ff}[data-bs-theme=dark] .chroma .nc{color:#f0883e;font-weight:bold}[data-bs-theme=dark] .chroma .no{color:#79c0ff;font-weight:bold}[data-bs-theme=dark] .chroma .nd{color:#d2a8ff;font-weight:bold}[data-bs-theme=dark] .chroma .ni{color:#ffa657}[data-bs-theme=dark] .chroma .ne{color:#f0883e;font-weight:bold}[data-bs-theme=dark] .chroma .nf{color:#d2a8ff;font-weight:bold}[data-bs-theme=dark] .chroma .nl{color:#79c0ff;font-weight:bold}[data-bs-theme=dark] .chroma .nn{color:#ff7b72}[data-bs-theme=dark] .chroma .py{color:#79c0ff}[data-bs-theme=dark] .chroma .nt{color:#7ee787}[data-bs-theme=dark] .chroma .nv{color:#79c0ff}[data-bs-theme=dark] .chroma .l{color:#a5d6ff}[data-bs-theme=dark] .chroma .ld{color:#79c0ff}[data-bs-theme=dark] .chroma .s{color:#a5d6ff}[data-bs-theme=dark] .chroma .sa{color:#79c0ff}[data-bs-theme=dark] .chroma .sb{color:#a5d6ff}[data-bs-theme=dark] .chroma .sc{color:#a5d6ff}[data-bs-theme=dark] .chroma .dl{color:#79c0ff}[data-bs-theme=dark] .chroma .sd{color:#a5d6ff}[data-bs-theme=dark] .chroma .s2{color:#a5d6ff}[data-bs-theme=dark] .chroma .se{color:#79c0ff}[data-bs-theme=dark] .chroma .sh{color:#79c0ff}[data-bs-theme=dark] .chroma .si{color:#a5d6ff}[data-bs-theme=dark] .chroma .sx{color:#a5d6ff}[data-bs-theme=dark] .chroma .sr{color:#79c0ff}[data-bs-theme=dark] .chroma .s1{color:#a5d6ff}[data-bs-theme=dark] .chroma .ss{color:#a5d6ff}[data-bs-theme=dark] .chroma .m{color:#a5d6ff}[data-bs-theme=dark] .chroma .mb{color:#a5d6ff}[data-bs-theme=dark] .chroma .mf{color:#a5d6ff}[data-bs-theme=dark] .chroma .mh{color:#a5d6ff}[data-bs-theme=dark] .chroma .mi{color:#a5d6ff}[data-bs-theme=dark] .chroma .il{color:#a5d6ff}[data-bs-theme=dark] .chroma .mo{color:#a5d6ff}[data-bs-theme=dark] .chroma .o{color:inherit;font-weight:bold}[data-bs-theme=dark] .chroma .ow{color:#ff7b72;font-weight:bold}[data-bs-theme=dark] .chroma .c{color:#8b949e;font-style:italic}[data-bs-theme=dark] .chroma .ch{color:#8b949e;font-style:italic}[data-bs-theme=dark] .chroma .cm{color:#8b949e;font-style:italic}[data-bs-theme=dark] .chroma .c1{color:#8b949e;font-style:italic}[data-bs-theme=dark] .chroma .cs{color:#8b949e;font-weight:bold;font-style:italic}[data-bs-theme=dark] .chroma .cp{color:#8b949e;font-weight:bold;font-style:italic}[data-bs-theme=dark] .chroma .cpf{color:#8b949e;font-weight:bold;font-style:italic}[data-bs-theme=dark] .chroma .gd{color:#ffa198;background-color:#490202}[data-bs-theme=dark] .chroma .ge{font-style:italic}[data-bs-theme=dark] .chroma .gr{color:#ffa198}[data-bs-theme=dark] .chroma .gh{color:#79c0ff;font-weight:bold}[data-bs-theme=dark] .chroma .gi{color:#56d364;background-color:#0f5323}[data-bs-theme=dark] .chroma .go{color:#8b949e}[data-bs-theme=dark] .chroma .gp{color:#8b949e}[data-bs-theme=dark] .chroma .gs{font-weight:bold}[data-bs-theme=dark] .chroma .gu{color:#79c0ff}[data-bs-theme=dark] .chroma .gt{color:#ff7b72}[data-bs-theme=dark] .chroma .gl{text-decoration:underline}[data-bs-theme=dark] .chroma .w{color:#6e7681}[data-bs-theme=dark] h1,[data-bs-theme=dark] .h1,[data-bs-theme=dark] h2,[data-bs-theme=dark] .h2,[data-bs-theme=dark] h3,[data-bs-theme=dark] .h3,[data-bs-theme=dark] h4,[data-bs-theme=dark] .h4{color:#fff}[data-bs-theme=dark] body{background:hsl(224,10%,10%);color:hsl(224,6%,77%)}[data-bs-theme=dark] a{color:hsl(224,100%,85%)}[data-bs-theme=dark] blockquote{border-left:3px solid hsl(224,14%,16%)}[data-bs-theme=dark] .footer{border-top:1px solid hsl(224,14%,16%)}[data-bs-theme=dark] .copy-status::after{content:"Copy";display:block;color:hsl(224,6%,77%)}[data-bs-theme=dark] .copy-status:hover::after{content:"Copy";display:block;color:hsl(224,100%,85%)}[data-bs-theme=dark] .copy-status:focus::after,[data-bs-theme=dark] .copy-status:active::after{content:"Copied";display:block;color:hsl(224,100%,85%)}[data-bs-theme=dark] .page-link{color:hsl(224,100%,85%);background-color:rgba(0,0,0,0);border:var(--bs-border-width) solid hsl(224,14%,16%)}[data-bs-theme=dark] .page-link:hover{color:hsl(224,10%,10%);background-color:hsl(224,6%,77%);border-color:hsl(224,6%,77%)}[data-bs-theme=dark] .page-link:focus{color:hsl(224,10%,10%);background-color:hsl(224,6%,77%)}[data-bs-theme=dark] .page-item.active .page-link{color:hsl(224,10%,10%);background-color:hsl(224,100%,85%);border-color:hsl(224,100%,85%)}[data-bs-theme=dark] .page-item.disabled .page-link{color:var(--bs-secondary-color);background-color:hsl(224,14%,16%);border-color:hsl(224,14%,16%)}[data-bs-theme=dark] details{border:1px solid hsl(224,14%,16%)}[data-bs-theme=dark] summary:hover{background:hsl(224,14%,16%)}[data-bs-theme=dark] details[open]>summary{border-bottom:1px solid hsl(224,14%,16%)}[data-bs-theme=dark] details summary::after{content:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='rgba%28222, 226, 230, 0.75%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 14l6-6-6-6'/%3e%3c/svg%3e")}[data-bs-theme=dark] table th{color:#fff}[data-bs-theme=dark] table,[data-bs-theme=dark] [data-bs-theme=dark] table{--bs-table-color: inherit;--bs-table-bg: $body-bg-dark;background:hsl(224,10%,10%);border-color:hsl(224,14%,16%)}body:has(.basicLightbox--visible){overflow:hidden}.clipboard{position:relative;float:right}.btn-clipboard{transition:opacity .25s ease-in-out;opacity:0;position:absolute;right:.5rem;top:.5rem;line-height:1;padding:.3125rem .3125rem .1875rem;background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}@media(max-width: 767.98px){.btn-clipboard{position:absolute;right:-0.5rem;top:.5rem}}.btn-clipboard::after{width:22px;height:22px;display:inline-block;content:"";-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='icon icon-tabler icon-tabler-copy' width='22' height='22' viewBox='0 0 24 24' stroke-width='1' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z'%3E%3C/path%3E%3Cpath d='M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2'%3E%3C/path%3E%3C/svg%3E") no-repeat 50% 50%;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='icon icon-tabler icon-tabler-copy' width='22' height='22' viewBox='0 0 24 24' stroke-width='1' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z'%3E%3C/path%3E%3Cpath d='M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2'%3E%3C/path%3E%3C/svg%3E") no-repeat 50% 50%;-webkit-mask-size:cover;mask-size:cover;background-color:#495057}.btn-clipboard:hover{border-color:rgba(0,0,0,0)}.btn-clipboard:hover::after{width:22px;height:22px;display:inline-block;content:"";-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='icon icon-tabler icon-tabler-copy' width='22' height='22' viewBox='0 0 24 24' stroke-width='1' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z'%3E%3C/path%3E%3Cpath d='M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2'%3E%3C/path%3E%3C/svg%3E") no-repeat 50% 50%;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='icon icon-tabler icon-tabler-copy' width='22' height='22' viewBox='0 0 24 24' stroke-width='1' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z'%3E%3C/path%3E%3Cpath d='M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2'%3E%3C/path%3E%3C/svg%3E") no-repeat 50% 50%;-webkit-mask-size:cover;mask-size:cover;background-color:#212529}.btn-clipboard:focus,.btn-clipboard:active{border-color:rgba(0,0,0,0) !important}.btn-clipboard:focus::after,.btn-clipboard:active::after{width:22px;height:22px;display:inline-block;content:"";-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22' viewBox='0 0 24 24' stroke-width='1.25' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M5 12l5 5l10 -10'%3E%3C/path%3E%3C/svg%3E") no-repeat 50% 50%;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22' viewBox='0 0 24 24' stroke-width='1.25' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M5 12l5 5l10 -10'%3E%3C/path%3E%3C/svg%3E") no-repeat 50% 50%;-webkit-mask-size:cover;mask-size:cover;background-color:#212529}[data-bs-theme=dark] .btn-clipboard{background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}[data-bs-theme=dark] .btn-clipboard::after{background-color:#ced4da}[data-bs-theme=dark] .btn-clipboard:hover{border-color:rgba(0,0,0,0)}[data-bs-theme=dark] .btn-clipboard:hover::after{background-color:#e9ecef}[data-bs-theme=dark] .btn-clipboard:focus,[data-bs-theme=dark] .btn-clipboard:active{border-color:rgba(0,0,0,0)}[data-bs-theme=dark] .btn-clipboard:focus::after,[data-bs-theme=dark] .btn-clipboard:active::after{background-color:#e9ecef}.highlight{position:relative}@media(min-width: 768px){.highlight:hover .btn-clipboard{opacity:1}}.expressive-code{font-family:var(--ec-uiFontFml);font-size:var(--ec-uiFontSize);line-height:var(--ec-uiLineHt);-moz-text-size-adjust:none;text-size-adjust:none;-webkit-text-size-adjust:none;margin:1.5rem 0}.expressive-code *:not(path){all:revert;box-sizing:border-box}.expressive-code pre{display:flex;margin:0;padding:0;border:var(--ec-brdWd) solid var(--ec-brdCol);border-radius:calc(var(--ec-brdRad) + var(--ec-brdWd));background:var(--ec-codeBg)}.expressive-code pre:focus-visible{outline:3px solid var(--ec-focusBrd);outline-offset:-3px}.expressive-code pre>code{all:unset;display:block;flex:1 0 100%;padding:var(--ec-codePadBlk) 0;color:var(--ec-codeFg);font-family:var(--ec-codeFontFml);font-size:var(--ec-codeFontSize);line-height:var(--ec-codeLineHt)}.expressive-code pre{overflow-x:auto}.expressive-code pre::-webkit-scrollbar,.expressive-code pre::-webkit-scrollbar-track{background-color:inherit;border-radius:calc(var(--ec-brdRad) + var(--ec-brdWd));border-top-left-radius:0;border-top-right-radius:0}.expressive-code pre::-webkit-scrollbar-thumb{background-color:var(--ec-sbThumbCol);border:4px solid rgba(0,0,0,0);background-clip:content-box;border-radius:10px}.expressive-code pre::-webkit-scrollbar-thumb:hover{background-color:var(--ec-sbThumbHoverCol)}.expressive-code .frame{all:unset;position:relative;display:block;--header-border-radius: calc(var(--ec-brdRad) + var(--ec-brdWd));--tab-border-radius: calc(var(--ec-frm-edTabBrdRad) + var(--ec-brdWd));--button-spacing: 0.4rem;--code-background: var(--ec-frm-edBg);border-radius:var(--header-border-radius);box-shadow:var(--ec-frm-frameBoxShdCssVal)}.expressive-code .frame .header{display:none;z-index:1;position:relative;border-radius:var(--header-border-radius) var(--header-border-radius) 0 0}.expressive-code .frame.is-terminal pre,.expressive-code .frame.is-terminal code{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.expressive-code .frame .title:empty:before{content:" "}.expressive-code .frame.is-terminal{--button-spacing: calc(1.9rem + var(--ec-brdWd) + 2 * var(--ec-uiPadBlk));--code-background: var(--ec-frm-trmBg)}.expressive-code .frame.is-terminal .header{display:flex;align-items:center;justify-content:center;padding-block:var(--ec-uiPadBlk);padding-block-end:calc(var(--ec-uiPadBlk) + var(--ec-brdWd));position:relative;font-weight:500;letter-spacing:.025ch;color:var(--ec-frm-trmTtbFg);background:var(--ec-frm-trmTtbBg);border:var(--ec-brdWd) solid var(--ec-brdCol);border-bottom:none}.expressive-code .frame.is-terminal .header::before{content:"";position:absolute;pointer-events:none;left:var(--ec-uiPadInl);width:2.1rem;height:.56rem;line-height:0;background-color:var(--ec-frm-trmTtbDotsFg);opacity:var(--ec-frm-trmTtbDotsOpa);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 60 16' preserveAspectRatio='xMidYMid meet'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3Ccircle cx='30' cy='8' r='8'/%3E%3Ccircle cx='52' cy='8' r='8'/%3E%3C/svg%3E");-webkit-mask-repeat:no-repeat;mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 60 16' preserveAspectRatio='xMidYMid meet'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3Ccircle cx='30' cy='8' r='8'/%3E%3Ccircle cx='52' cy='8' r='8'/%3E%3C/svg%3E");mask-repeat:no-repeat}.expressive-code .frame.is-terminal .header::after{content:"";position:absolute;pointer-events:none;inset:0;border-bottom:var(--ec-brdWd) solid var(--ec-frm-trmTtbBrdBtmCol)}.expressive-code .frame pre{background:var(--code-background)}.expressive-code .copy{display:flex;gap:.25rem;flex-direction:row;position:absolute;inset-block-start:calc(var(--ec-brdWd) + var(--button-spacing));inset-inline-end:calc(var(--ec-brdWd) + var(--ec-uiPadInl)/2);direction:ltr;unicode-bidi:isolate}.expressive-code .copy button{position:relative;align-self:flex-end;margin:0;padding:0;border:none;border-radius:.2rem;z-index:1;cursor:pointer;transition-property:opacity,background,border-color;transition-duration:.2s;transition-timing-function:cubic-bezier(0.25, 0.46, 0.45, 0.94);width:2.5rem;height:2.5rem;background:var(--code-background);opacity:.75}.expressive-code .copy button div{position:absolute;inset:0;border-radius:inherit;background:var(--ec-frm-inlBtnBg);opacity:var(--ec-frm-inlBtnBgIdleOpa);transition-property:inherit;transition-duration:inherit;transition-timing-function:inherit}.expressive-code .copy button::before{content:"";position:absolute;pointer-events:none;inset:0;border-radius:inherit;border:var(--ec-brdWd) solid var(--ec-frm-inlBtnBrd);opacity:var(--ec-frm-inlBtnBrdOpa)}.expressive-code .copy button::after{content:"";position:absolute;pointer-events:none;inset:0;background-color:var(--ec-frm-inlBtnFg);-webkit-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='1.75'%3E%3Cpath d='M3 19a2 2 0 0 1-1-2V2a2 2 0 0 1 1-1h13a2 2 0 0 1 2 1'/%3E%3Crect x='6' y='5' width='16' height='18' rx='1.5' ry='1.5'/%3E%3C/svg%3E");-webkit-mask-repeat:no-repeat;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='1.75'%3E%3Cpath d='M3 19a2 2 0 0 1-1-2V2a2 2 0 0 1 1-1h13a2 2 0 0 1 2 1'/%3E%3Crect x='6' y='5' width='16' height='18' rx='1.5' ry='1.5'/%3E%3C/svg%3E");mask-repeat:no-repeat;margin:.475rem;line-height:0}.expressive-code .copy button:focus::after,.expressive-code .copy button:active::after{display:inline-block;content:"";-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22' viewBox='0 0 24 24' stroke-width='1.25' stroke='black' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M5 12l5 5l10 -10'%3E%3C/path%3E%3C/svg%3E") no-repeat 50% 50%;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22' viewBox='0 0 24 24' stroke-width='1.25' stroke='black' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M5 12l5 5l10 -10'%3E%3C/path%3E%3C/svg%3E") no-repeat 50% 50%;-webkit-mask-size:cover;mask-size:cover;margin:.2375rem}.expressive-code .copy button:hover,.expressive-code .copy button:focus:focus-visible{opacity:1}.expressive-code .copy button:hover div,.expressive-code .copy button:focus:focus-visible div{opacity:var(--ec-frm-inlBtnBgHoverOrFocusOpa)}.expressive-code .copy button:active{opacity:1}.expressive-code .copy button:active div{opacity:var(--ec-frm-inlBtnBgActOpa)}@media(hover: hover){.expressive-code .copy button{opacity:0;width:2rem;height:2rem}.expressive-code .frame:hover .copy button:not(:hover),.expressive-code .frame:focus-within :focus-visible~.copy button:not(:hover){opacity:.75}}:root{--ec-brdRad: 0px;--ec-brdWd: 1px;--ec-brdCol: color-mix(in srgb, var(--sl-color-gray-5), transparent 25%);--ec-codeFontFml: var(--__sl-font-mono);--ec-codeFontSize: var(--sl-text-code);--ec-codeFontWg: 400;--ec-codeLineHt: var(--sl-line-height);--ec-codePadBlk: 0;--ec-codePadInl: 1rem;--ec-codeBg: #011627;--ec-codeFg: #d6deeb;--ec-codeSelBg: #1d3b53;--ec-uiFontFml: var(--__sl-font);--ec-uiFontSize: 0.9rem;--ec-uiFontWg: 400;--ec-uiLineHt: 1.65;--ec-uiPadBlk: 0.25rem;--ec-uiPadInl: 1rem;--ec-uiSelBg: #234d708c;--ec-uiSelFg: #ffffff;--ec-focusBrd: #122d42;--ec-sbThumbCol: #ffffff17;--ec-sbThumbHoverCol: #ffffff49;--ec-tm-lineMarkerAccentMarg: 0rem;--ec-tm-lineMarkerAccentWd: 0.15rem;--ec-tm-lineDiffIndMargLeft: 0.25rem;--ec-tm-inlMarkerBrdWd: 1.5px;--ec-tm-inlMarkerBrdRad: 0.2rem;--ec-tm-inlMarkerPad: 0.15rem;--ec-tm-insDiffIndContent: "+";--ec-tm-delDiffIndContent: "-";--ec-tm-markBg: #ffffff17;--ec-tm-markBrdCol: #ffffff40;--ec-tm-insBg: #1e571599;--ec-tm-insBrdCol: #487f3bd0;--ec-tm-insDiffIndCol: #79b169d0;--ec-tm-delBg: #862d2799;--ec-tm-delBrdCol: #b4554bd0;--ec-tm-delDiffIndCol: #ed8779d0;--ec-frm-shdCol: #011627;--ec-frm-frameBoxShdCssVal: none;--ec-frm-edActTabBg: var(--sl-color-gray-6);--ec-frm-edActTabFg: var(--sl-color-text);--ec-frm-edActTabBrdCol: transparent;--ec-frm-edActTabIndHt: 1px;--ec-frm-edActTabIndTopCol: var(--sl-color-accent-high);--ec-frm-edActTabIndBtmCol: transparent;--ec-frm-edTabsMargInlStart: 0;--ec-frm-edTabsMargBlkStart: 0;--ec-frm-edTabBrdRad: 0px;--ec-frm-edTabBarBg: var(--sl-color-black);--ec-frm-edTabBarBrdCol: color-mix(in srgb, var(--sl-color-gray-5), transparent 25%);--ec-frm-edTabBarBrdBtmCol: color-mix(in srgb, var(--sl-color-gray-5), transparent 25%);--ec-frm-edBg: var(--sl-color-gray-6);--ec-frm-trmTtbDotsFg: color-mix(in srgb, var(--sl-color-gray-5), transparent 25%);--ec-frm-trmTtbDotsOpa: 0.75;--ec-frm-trmTtbBg: var(--sl-color-black);--ec-frm-trmTtbFg: var(--sl-color-text);--ec-frm-trmTtbBrdBtmCol: color-mix(in srgb, var(--sl-color-gray-5), transparent 25%);--ec-frm-trmBg: var(--sl-color-gray-6);--ec-frm-inlBtnFg: var(--sl-color-text);--ec-frm-inlBtnBg: var(--sl-color-text);--ec-frm-inlBtnBgIdleOpa: 0;--ec-frm-inlBtnBgHoverOrFocusOpa: 0.2;--ec-frm-inlBtnBgActOpa: 0.3;--ec-frm-inlBtnBrd: var(--sl-color-text);--ec-frm-inlBtnBrdOpa: 0.4;--ec-frm-tooltipSuccessBg: #158744;--ec-frm-tooltipSuccessFg: white}@media(prefers-color-scheme: light){:root:not([data-bs-theme=dark]){--ec-codeBg: #fbfbfb;--ec-codeFg: #403f53;--ec-codeSelBg: #e0e0e0;--ec-uiSelBg: #d3e8f8;--ec-uiSelFg: #403f53;--ec-focusBrd: #93a1a1;--ec-sbThumbCol: #0000001a;--ec-sbThumbHoverCol: #0000005c;--ec-tm-markBg: #0000001a;--ec-tm-markBrdCol: #00000055;--ec-tm-insBg: #8ec77d99;--ec-tm-insDiffIndCol: #336a28d0;--ec-tm-delBg: #ff9c8e99;--ec-tm-delDiffIndCol: #9d4138d0;--ec-frm-shdCol: #d9d9d9;--ec-frm-edActTabBg: var(--sl-color-gray-7);--ec-frm-edActTabIndTopCol: #5d2f86;--ec-frm-edTabBarBg: var(--sl-color-gray-6);--ec-frm-edBg: var(--sl-color-gray-7);--ec-frm-trmTtbBg: var(--sl-color-gray-6);--ec-frm-trmBg: var(--sl-color-gray-7);--ec-frm-tooltipSuccessBg: #078662}}:root[data-bs-theme=light] .expressive-code,.expressive-code[data-bs-theme=light]{--ec-codeBg: #fbfbfb;--ec-codeFg: #403f53;--ec-codeSelBg: #e0e0e0;--ec-uiSelBg: #d3e8f8;--ec-uiSelFg: #403f53;--ec-focusBrd: #93a1a1;--ec-sbThumbCol: #0000001a;--ec-sbThumbHoverCol: #0000005c;--ec-tm-markBg: #0000001a;--ec-tm-markBrdCol: #00000055;--ec-tm-insBg: #8ec77d99;--ec-tm-insDiffIndCol: #336a28d0;--ec-tm-delBg: #ff9c8e99;--ec-tm-delDiffIndCol: #9d4138d0;--ec-frm-shdCol: #d9d9d9;--ec-frm-edActTabBg: var(--sl-color-gray-7);--ec-frm-edActTabIndTopCol: #5d2f86;--ec-frm-edTabBarBg: var(--sl-color-gray-6);--ec-frm-edBg: var(--sl-color-gray-7);--ec-frm-trmTtbBg: var(--sl-color-gray-6);--ec-frm-trmBg: var(--sl-color-gray-7);--ec-frm-tooltipSuccessBg: #078662}pre,code,kbd{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:.875rem}code:not(:where(.not-content *)){background-color:var(--sl-color-gray-6);margin-block:-0.125rem;padding:.125rem .375rem;color:inherit}[data-bs-theme=dark] code:not(:where(.not-content *)){background-color:var(--sl-color-gray-5)}.highlight>pre{padding:.875rem 1rem}.highlight div{padding:0}blockquote{margin-bottom:1rem;font-size:1.25rem;border-left:3px solid #dee2e6;padding-left:1rem}details{display:block;position:relative;border:1px solid #e9ecef;border-radius:.25rem;padding:.5rem 1rem 0;margin:.5rem 0}summary{list-style:none;display:inline-block;width:calc(100% + 2rem);margin:-0.5rem -1rem 0;padding:.5rem 1rem}summary::-webkit-details-marker{display:none}summary:hover{background:#f8f9fa}details summary::after{display:inline-block;content:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='rgba%2829, 45, 53, 0.75%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 14l6-6-6-6'/%3e%3c/svg%3e");transition:transform .35s ease;transform-origin:center center;position:absolute;right:1rem}details[open]>summary::after{transform:rotate(90deg)}details[open]{padding:.5rem 1rem}details[open]>summary{border-bottom:1px solid #dee2e6;margin-bottom:.5rem}details h2,details .h2,details h3,details .h3,details h4,details .h4{margin:1rem 0 .5rem}details p:last-child{margin-bottom:0}details ul,details ol{margin-bottom:0}details pre{margin:0 0 1rem}img{max-width:100%;height:auto}img[data-sizes=auto]{display:block}img{font-size:0}figcaption{font-size:1rem;margin-top:.5rem;font-style:italic}.blur-up{filter:blur(5px);transition:filter 400ms}.blur-up.lazyloaded{filter:unset}.mermaid{margin:1.5rem 0;padding:1.5rem}.mermaid svg{height:auto}table{margin:3rem 0}.footer{border-top:1px solid #e9ecef;padding-top:1.125rem;padding-bottom:1.125rem}.footer ul{margin-bottom:0}.footer li{font-size:.875rem;margin-bottom:0}@media(min-width: 768px){.footer li{font-size:1rem}}.modal-backdrop,.offcanvas-backdrop{visibility:hidden;background:hsla(224,10%,10%,.5);opacity:0}[data-bs-theme=dark] .modal-backdrop,[data-bs-theme=dark] .offcanvas-backdrop{visibility:hidden;background:hsla(224,10%,10%,.5);opacity:0}.modal-backdrop.show,.offcanvas-backdrop.show{visibility:visible;opacity:1;backdrop-filter:blur(8px)}.showing,.hiding{transition:none;display:none}h1:hover a,.h1:hover a,h2:hover a,.h2:hover a,h3:hover a,.h3:hover a,h4:hover a,.h4:hover a{visibility:visible;text-decoration:none}p.meta{margin-top:.5rem;font-size:1rem}.page-link:hover{text-decoration:none}ul li{margin:.25rem 0}.related-posts{margin-top:4rem}.page-item:first-child,.page-item:last-child,.page-item.disabled{display:none}.page-item a{margin-left:.5rem;margin-right:.5rem;padding-left:.875rem;padding-right:.875rem}:root,:root[data-bs-theme=light]{--gh-code-bg: #f6f8fa;--gh-code-fg: #1f2328;--gh-code-inline-bg: rgba(175, 184, 193, 0.2);--gh-btn-bg: #ffffff;--gh-btn-border: #d0d7de;--gh-btn-fg: #656d76;--gh-btn-hover-bg: #f3f4f6;--gh-btn-hover-fg: #1f2328;--gh-btn-success: #1a7f37;--gh-btn-error: #b42318;--gh-syn-comment: #6e7781;--gh-syn-keyword: #cf222e;--gh-syn-string: #0a3069;--gh-syn-operator: #0550ae}:root[data-bs-theme=dark]{--gh-code-bg: #161b22;--gh-code-fg: #e6edf3;--gh-code-inline-bg: rgba(110, 118, 129, 0.4);--gh-btn-bg: #21262d;--gh-btn-border: #30363d;--gh-btn-fg: #b0bdc9;--gh-btn-hover-bg: #30363d;--gh-btn-hover-fg: #edf3f8;--gh-btn-success: #85d3a4;--gh-btn-error: #f0a59d;--gh-syn-comment: #8b949e;--gh-syn-keyword: #ff7b72;--gh-syn-string: #a5d6ff;--gh-syn-operator: #79c0ff}.expressive-code .frame{border:none !important;box-shadow:none !important;background:rgba(0,0,0,0) !important}.expressive-code .header,.expressive-code .frame .header,.expressive-code .copy,.expressive-code .frame .copy{display:none !important}pre,div.highlight pre,.expressive-code pre{position:relative !important;background-color:var(--gh-code-bg) !important;color:var(--gh-code-fg) !important;border:none !important;outline:none !important;box-shadow:none !important;border-radius:6px !important;padding:16px !important;padding-right:48px !important;font-size:13.5px !important;line-height:1.6 !important;margin:1rem 0 !important;font-family:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace !important;white-space:pre-wrap !important;word-break:break-word !important;overflow-wrap:anywhere !important;overflow-x:hidden !important}pre code,div.highlight pre code,.expressive-code pre code{background-color:rgba(0,0,0,0) !important;color:inherit !important;padding:0 !important;border:none !important;white-space:pre-wrap !important;word-break:break-word !important;overflow-wrap:anywhere !important}.highlight,div.highlight,figure.highlight,.expressive-code{position:relative !important;border:none !important;box-shadow:none !important;background:rgba(0,0,0,0) !important;margin:1rem 0 !important}.gh-copy-btn,.expressive-code .copy button,.btn-copy{position:absolute !important;top:8px !important;right:8px !important;z-index:30 !important;display:inline-flex !important;align-items:center !important;justify-content:center !important;width:28px !important;height:28px !important;background:rgba(0,0,0,0) !important;border:none !important;box-shadow:none !important;color:var(--gh-btn-fg) !important;cursor:pointer !important;opacity:1 !important;transition:all .18s ease !important}.gh-copy-btn:hover,.gh-copy-btn:focus-visible,.expressive-code .copy button:hover,.expressive-code .copy button:focus-visible,.btn-copy:hover,.btn-copy:focus-visible{opacity:1 !important;color:var(--gh-btn-hover-fg) !important;background:rgba(0,0,0,0) !important;border:none !important}.gh-copy-btn.copied,.expressive-code .copy button.copied,.btn-copy.copied{color:var(--gh-btn-success) !important;border:none !important;opacity:1 !important}.gh-copy-btn.copy-failed,.expressive-code .copy button.copy-failed,.btn-copy.copy-failed{color:var(--gh-btn-error) !important}.gh-copy-btn:focus-visible,.expressive-code .copy button:focus-visible,.btn-copy:focus-visible{outline:2px solid var(--accent) !important;outline-offset:2px}.gh-copy-btn svg,.expressive-code .copy button svg,.btn-copy svg{display:block !important;width:18px !important;height:18px !important}.gh-copy-btn svg,.gh-copy-btn svg path,.expressive-code .copy button svg,.expressive-code .copy button svg path,.btn-copy svg,.btn-copy svg path{fill:currentColor !important}.gh-copy-btn.copied+.copy-status{color:var(--gh-btn-success)}.gh-copy-btn.copy-failed+.copy-status{color:var(--gh-btn-error)}code:not(pre code){font-family:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace !important;font-size:85% !important;background-color:var(--gh-code-inline-bg) !important;color:var(--gh-code-fg) !important;padding:.2em .4em !important;margin:0 2px !important;border-radius:6px !important;white-space:break-spaces !important}:root{--paper: #fcfaf8;--ink: #26251e;--muted: #68665f;--line: #e3dfd8;--accent: #4d729c;--surface: #f3f0eb;--heading-font: "Noto Serif CJK SC", "Source Han Serif SC", "Songti SC", SimSun, Georgia, serif;--body-font: "Inter", "Noto Sans CJK SC", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif}:root[data-bs-theme=dark]{--paper: #15171a;--ink: #e9eded;--muted: #b0b7be;--line: #3a4148;--accent: #a7c9e8;--surface: #22282f}.personal-site{margin:0;background:var(--paper);color:var(--ink);font-family:var(--body-font);font-size:16px;line-height:1.75;-webkit-font-smoothing:antialiased}.personal-site *,.personal-site *::before,.personal-site *::after{box-sizing:border-box}.personal-site [hidden]{display:none !important}.personal-site a{color:inherit;text-decoration:none}.personal-site button,.personal-site input,.personal-site summary{font:inherit}.personal-site button{color:inherit}.personal-site button,.personal-site summary,.personal-site a{-webkit-tap-highlight-color:rgba(0,0,0,0)}.personal-site button{cursor:pointer}.personal-site a:focus-visible,.personal-site button:focus-visible,.personal-site summary:focus-visible,.personal-site input:focus-visible{outline:2px solid var(--accent);outline-offset:5px}.personal-site h1,.personal-site .h1,.personal-site h2,.personal-site .h2,.personal-site h3,.personal-site .h3,.personal-site h4,.personal-site .h4{color:inherit;font-family:var(--heading-font);letter-spacing:-0.035em;font-weight:700;line-height:1.38;margin:0;overflow-wrap:anywhere}.personal-site h1,.personal-site .h1{font-size:clamp(36px,4.2vw,60px)}.personal-site h2,.personal-site .h2{font-size:36px}.personal-site h3,.personal-site .h3{font-size:23px}.personal-site p{margin:0 0 1em}.personal-site svg{display:inline-block}.personal-site main:focus{outline:none}.personal-site main{min-height:62vh}.personal-site ::-moz-selection{color:var(--ink);background:rgba(168,195,222,.4)}.personal-site ::selection{color:var(--ink);background:rgba(168,195,222,.4)}.personal-site .shell{width:min(1180px,100% - 96px);margin-inline:auto}.personal-site .skip-link{position:fixed;z-index:100;top:-100px;left:20px;padding:12px 20px;background:var(--ink);color:var(--paper)}.personal-site .skip-link:focus{top:12px}.personal-site .eyebrow{font-family:var(--body-font);font-size:11px;letter-spacing:.16em;color:var(--muted);font-weight:500;line-height:1.5;margin:0 0 18px}.personal-site .wordmark{font:700 32px/1 Georgia,serif;letter-spacing:-1.3px;white-space:nowrap}.personal-site .wordmark span{color:var(--accent)}.personal-site .site-header{position:sticky;top:0;z-index:50;background:color-mix(in srgb, var(--paper) 94%, transparent);backdrop-filter:blur(16px)}.personal-site .site-header-inner{height:78px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);position:relative}.personal-site .desktop-nav{display:flex;gap:42px;position:absolute;left:50%;transform:translateX(-50%);height:100%;align-items:center}.personal-site .desktop-nav a{font-size:14px;padding:25px 4px;position:relative}.personal-site .desktop-nav a::after{content:"";position:absolute;height:2px;background:var(--accent);left:4px;right:4px;bottom:16px;transform:scaleX(0);transition:transform 180ms ease}.personal-site .desktop-nav a:hover::after,.personal-site .desktop-nav a[aria-current]::after{transform:scaleX(1)}.personal-site .header-tools{display:flex;gap:6px;align-items:center}.personal-site .icon-button{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;padding:10px;background:rgba(0,0,0,0);border:0;border-radius:4px;transition:color 180ms,background 180ms;font-size:26px;line-height:1}.personal-site .icon-button:hover{color:var(--accent);background:var(--surface)}.personal-site .icon-button svg{width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:1.5}.personal-site .mobile-nav{display:none;position:static;margin:0;border:0;padding:0;background:none;box-shadow:none;flex:0 0 44px;width:44px}.personal-site .mobile-nav summary{margin:0;border:0;background:none;box-shadow:none}.personal-site .mobile-nav summary::after{display:none}.personal-site .mobile-only{display:none}.personal-site .button{display:inline-flex;align-items:center;justify-content:space-between;gap:30px;min-height:48px;padding:11px 25px;border:1px solid rgba(0,0,0,0);border-radius:5px;font-size:14px;transition:transform 180ms,background 180ms,border-color 180ms}.personal-site .button:hover{transform:translateY(-2px)}.personal-site .button:active{transform:translateY(0)}.personal-site .button-dark{background:var(--ink);color:var(--paper)}.personal-site .button-dark:hover{background:var(--accent);color:var(--paper)}.personal-site .button-outline{border-color:#929b9c;background:color-mix(in srgb, var(--paper) 60%, transparent)}.personal-site .button-outline:hover{border-color:var(--accent);background:var(--surface)}.personal-site .text-link{display:inline-flex;align-items:center;gap:22px;min-height:44px;padding-block:8px;font-size:14px;background:none;border:none}.personal-site .text-link span{transition:transform 180ms}.personal-site .text-link:hover{color:var(--accent)}.personal-site .text-link:hover span{transform:translate(3px, -3px)}.personal-site .hero-actions{display:flex;justify-content:center;gap:16px;flex-wrap:wrap}.personal-site .home-intro{position:relative;isolation:isolate;overflow:clip;padding:78px 0 25px;background:linear-gradient(180deg, color-mix(in srgb, var(--paper) 85%, #fff), var(--paper))}.personal-site .hero-copy{text-align:center;position:relative;z-index:2}.personal-site .hero-copy .eyebrow{letter-spacing:.25em;margin-bottom:24px}.personal-site .hero-copy h1,.personal-site .hero-copy .h1{font-size:clamp(40px,5.5vw,74px);letter-spacing:-0.06em;line-height:1.4}.personal-site .hero-description{margin:22px 0 30px;font-size:17px;color:var(--muted);line-height:1.85}.personal-site .hero-wave{position:absolute;z-index:-1;top:280px;bottom:0;left:-6%;width:112%;background:url("/images/blue-wave.svg") center bottom/100% 100% no-repeat;opacity:.95}.personal-site .hero-wave::after{content:"";position:absolute;inset:0;background:url("/images/blue-wave.svg") center bottom/100% 100% no-repeat;transform:scaleX(-1) translateY(40px);opacity:.38}.personal-site .home-intro[data-motion=running] .hero-wave{animation:wave-drift 19s ease-in-out infinite alternate}.personal-site .home-intro[data-motion=paused] .hero-wave{animation:wave-drift 19s ease-in-out infinite alternate paused}.personal-site .showcase{margin:70px auto 0;max-width:940px;position:relative}.personal-site .showcase-heading{display:flex;justify-content:center;align-items:center;margin-bottom:21px}.personal-site .showcase-heading h2,.personal-site .showcase-heading .h2{font-size:30px}.personal-site .showcase-heading .eyebrow{display:none}.personal-site .project-tabs{display:flex;width:-moz-fit-content;width:fit-content;margin:0 auto 26px;gap:8px}.personal-site .project-tabs button{background:rgba(0,0,0,0);border:none;border-bottom:1px solid var(--line);padding:11px 21px;min-height:44px;font-size:13px;color:var(--muted);transition:color 180ms,border-color 180ms}.personal-site .project-tabs button[aria-selected=true]{color:var(--accent);border-bottom:2px solid var(--accent)}.personal-site .project-tabs button:hover{color:var(--ink)}.personal-site .showcase-stage{height:440px;position:relative}.personal-site .showcase-panel{width:100%;height:100%}.personal-site .showcase-panel[data-switching]{will-change:opacity,transform}.personal-site .showcase-visual{display:flex;align-items:center;justify-content:center;height:365px}.personal-site .showcase-caption{display:flex;justify-content:space-between;align-items:center;margin:21px 0 0;font-size:13px}.personal-site .showcase-caption strong{font-weight:500;margin-right:18px}.personal-site .showcase-caption span{color:var(--muted)}.personal-site .showcase-disclaimer{font-size:10px;text-align:right;color:var(--muted);margin:0}.personal-site .app-preview{width:min(760px,100%);height:350px;border-radius:12px;background:#1f252a;color:#e7eced;box-shadow:0 22px 55px rgba(43,62,84,.1882352941),0 2px 4px rgba(17,17,17,.1333333333);overflow:hidden;border:1px solid #596269;text-align:left}.personal-site .window-bar{height:40px;padding:0 15px;border-bottom:1px solid hsla(0,0%,100%,.0745098039);color:#bdc4c9;display:flex;align-items:center;justify-content:space-between;font:11px/1 var(--body-font)}.personal-site .window-dots{display:flex;gap:6px}.personal-site .window-dots i{width:7px;height:7px;border-radius:50%;background:#ec8b7a}.personal-site .window-dots i:nth-child(2){background:#e3bc73}.personal-site .window-dots i:nth-child(3){background:#89ad91}.personal-site .app-body{display:grid;grid-template-columns:175px 1fr;height:calc(100% - 40px)}.personal-site .app-rail{padding:20px 16px;border-right:1px solid hsla(0,0%,100%,.0784313725);display:flex;flex-direction:column;gap:12px;font-size:10px;color:#919da8;position:relative}.personal-site .app-rail .rail-active{background:rgba(83,125,166,.3137254902);color:#c3d8ec;border-radius:4px;padding:6px 9px;margin-left:-3px}.personal-site .app-rail .rail-bottom{margin-top:auto;font-size:9px}.personal-site .app-logo{font:700 30px/1 Georgia,serif;color:#dee6f0}.personal-site .app-logo span{color:#88abd0}.personal-site .translation{padding:14px 20px 18px;display:grid;grid-template-columns:1fr 1fr;gap:12px}.personal-site .language-line{grid-column:1/-1;display:flex;justify-content:center;gap:36px;color:#a4b2c2;font-size:10px;align-items:center;height:23px}.personal-site .translation-text{border:1px solid hsla(0,0%,100%,.0784313725);border-radius:6px;padding:20px 17px;background:#252d34;position:relative;min-width:0}.personal-site .translation-text small,.personal-site .translation-text .small{display:block;font-size:9px;color:#8c9ba9;margin-bottom:26px}.personal-site .translation-text p{font:22px/1.65 Georgia,var(--heading-font);margin:0;letter-spacing:-0.02em}.personal-site .translation-text.translated{background:#293541}.personal-site .translation-text .preview-symbol{position:absolute;bottom:13px;right:16px;color:#93b3d4}.personal-site .hardware-preview{width:100%;max-width:620px;height:340px;position:relative;display:grid;place-items:center}.personal-site .chip-board{width:160px;height:240px;border:10px solid #36433e;background:#243c34;box-shadow:20px 25px 35px rgba(28,51,51,.1803921569);border-radius:7px;transform:rotate(-20deg);position:relative}.personal-site .chip-board::before,.personal-site .chip-board::after{content:"";position:absolute;top:30px;bottom:30px;width:12px;background:repeating-linear-gradient(#c7bb83 0 4px, #151c1b 4px 10px)}.personal-site .chip-board::before{left:-14px}.personal-site .chip-board::after{right:-14px}.personal-site .chip-antenna{height:44px;width:70px;margin:6px auto;border:3px solid #b6a576;border-bottom:0;background:repeating-linear-gradient(90deg, transparent 0 12px, #ae9e70 12px 15px)}.personal-site .chip-core{background:linear-gradient(135deg, #d2d3ca, #7e8c89);color:#35423e;margin:12px auto 0;width:106px;height:107px;text-align:center;padding-top:21px;font-size:19px;letter-spacing:2px}.personal-site .chip-core small,.personal-site .chip-core .small{display:block;font-size:4px;margin-top:9px;letter-spacing:1px}.personal-site .chip-port{position:absolute;width:43px;height:22px;border:4px solid #bfc7c6;background:#252d2b;bottom:-19px;left:calc(50% - 21px);border-radius:3px}.personal-site .chip-led{position:absolute;width:5px;height:5px;background:#8fcac0;bottom:22px;left:20px;border-radius:50%;box-shadow:0 0 10px #8fcac0}.personal-site .hardware-note{position:absolute;bottom:3px;color:var(--muted);font-size:11px;letter-spacing:.15em}.personal-site .terminal-preview{width:min(700px,100%);height:325px;background:#202c2c;border:1px solid #697a75;border-radius:9px;box-shadow:0 22px 55px rgba(34,58,58,.1490196078);overflow:hidden;color:#d7e7df;text-align:left}.personal-site .terminal-body{padding:29px 35px;font:14px/1.8 ui-monospace,SFMono-Regular,Consolas,monospace}.personal-site .terminal-body p{margin:0 0 14px}.personal-site .terminal-body small,.personal-site .terminal-body .small{display:block;color:#a5bdb0;font-size:10px;margin-top:30px}.personal-site .terminal-dim,.personal-site .terminal-comment{color:#92a79d}.personal-site .terminal-blue{color:#a7d4e4}.personal-site .terminal-rule{height:1px;background:hsla(0,0%,100%,.1019607843);margin:20px 0}.personal-site .terminal-cursor{display:inline-block;width:6px;height:16px;background:#a7d4e4;vertical-align:middle;margin-left:8px}.personal-site .home-section{margin-top:76px;scroll-margin-top:110px}.personal-site .section-heading{display:flex;align-items:flex-end;justify-content:space-between;border-top:1px solid var(--line);padding-top:24px;margin-bottom:25px}.personal-site .section-heading .eyebrow{margin-bottom:9px}.personal-site .section-heading h2,.personal-site .section-heading .h2{font-size:34px}.personal-site .project-grid{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:275px 275px;gap:18px}.personal-site .project-grid[data-filtered=true]{grid-template-rows:auto;grid-auto-rows:275px}.personal-site .project-grid[data-filtered=true] .project-card{grid-row:auto}.personal-site .project-card{position:relative;overflow:hidden;border-radius:9px;display:block;isolation:isolate;transition:transform 280ms,box-shadow 280ms;color:#27322e}.personal-site .project-card:active{transform:translateY(0) scale(0.997)}.personal-site .project-card.vanishtrans{grid-row:span 2;background:linear-gradient(145deg, #d7ddf0, #e9e5ee 60%, #b3c1d6)}.personal-site .project-card.vanishtrans::before{content:"";position:absolute;inset:0;background:url("/images/blue-wave.svg") center bottom/auto 70% no-repeat;opacity:.8;z-index:-1}.personal-site .project-card.vanishtrans .project-card-visual{width:610px;height:330px;position:absolute;top:260px;left:100px;transform:rotate(-7deg)}.personal-site .project-card.vanishtrans .project-card-visual .app-preview{height:300px}.personal-site .project-card.vanishtrans .project-card-visual .app-body{grid-template-columns:130px 1fr}.personal-site .project-card.vanishtrans .project-card-visual .app-rail{padding:15px}.personal-site .project-card.vanishtrans .project-card-visual .translation{padding:10px}.personal-site .project-card.vanishtrans .project-card-visual .translation-text p{font-size:19px}.personal-site .project-card.esp32-lab{background:linear-gradient(115deg, #e4e9de, #d1ded9)}.personal-site .project-card.esp32-lab .project-card-visual{position:absolute;right:-45px;top:0;width:310px;height:100%}.personal-site .project-card.esp32-lab .hardware-preview{height:100%}.personal-site .project-card.esp32-lab .chip-board{scale:.72}.personal-site .project-card.esp32-lab .hardware-note{display:none}.personal-site .project-card.ai-chat{background:linear-gradient(125deg, #202e2c, #1b2729);color:#e7eee6}.personal-site .project-card.ai-chat .project-kind{color:#b4c2bc}.personal-site .project-card.ai-chat .project-card-copy p{color:#b4c2bc}.personal-site .project-card.ai-chat .project-card-visual{position:absolute;top:48px;left:290px;width:340px}.personal-site .project-card.ai-chat .terminal-preview{height:230px}.personal-site .project-card.ai-chat .terminal-body{padding:19px;font-size:11px}.personal-site .project-card.ai-chat .terminal-body small,.personal-site .project-card.ai-chat .terminal-body .small{margin-top:10px}.personal-site .project-card.ai-chat .visual-caption{color:#a6bab2}.personal-site .project-card-copy{position:relative;z-index:2;padding:30px;width:58%}.personal-site .project-card-copy .project-kind{display:block;font-size:10px;color:#566661;letter-spacing:.04em;margin-bottom:17px}.personal-site .project-card-copy h3,.personal-site .project-card-copy .h3{font-size:30px;letter-spacing:-0.025em;white-space:nowrap;margin-bottom:12px}.personal-site .project-card-copy p{font-size:13px;color:#566661;max-width:230px;line-height:1.9}.personal-site .project-card.vanishtrans .project-card-copy{width:85%;padding:35px}.personal-site .project-card.vanishtrans .project-card-copy h3,.personal-site .project-card.vanishtrans .project-card-copy .h3{font-size:39px}.personal-site .project-card.vanishtrans .project-card-copy p{max-width:300px}.personal-site .project-card-visual{transition:translate 280ms;pointer-events:none}.personal-site .round-arrow{display:inline-flex;align-items:center;justify-content:center;width:39px;height:39px;border:1px solid currentColor;border-radius:50%;margin-top:7px;transition:transform 280ms,background 280ms,color 280ms;font:22px/1 var(--body-font)}.personal-site .visual-caption{position:absolute;z-index:3;right:14px;bottom:10px;font-size:9px;color:#4d5b60}.personal-site .post-row{display:grid;grid-template-columns:105px minmax(0, 1fr) 100px 22px;align-items:center;gap:24px;padding:25px 8px;border-top:1px solid var(--line);position:relative}.personal-site .post-row time{color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums}.personal-site .post-row h3,.personal-site .post-row .h3{font-size:19px;line-height:1.6;margin:0 0 4px}.personal-site .post-row h3 a::after,.personal-site .post-row .h3 a::after{content:"";position:absolute;inset:0}.personal-site .post-row p{font-size:12px;color:var(--muted);margin:0;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.personal-site .post-row:hover h3,.personal-site .post-row:hover .h3{color:var(--accent)}.personal-site .post-row:hover .row-arrow{transform:translate(3px, -3px)}.personal-site .post-row:last-child{border-bottom:1px solid var(--line)}.personal-site .post-category{font-size:11px;color:var(--muted);justify-self:start;padding:3px 0}.personal-site .row-arrow{font-size:19px;transition:transform 180ms}.personal-site .home-about{display:grid;grid-template-columns:1.1fr 1fr;gap:70px;border-top:1px solid var(--line);padding-top:38px}.personal-site .home-about h2,.personal-site .home-about .h2{font-size:37px;margin-bottom:21px}.personal-site .home-about p:not(.eyebrow){color:var(--muted);font-size:14px;line-height:1.95}.personal-site .about-values{display:flex;gap:42px;padding-top:25px;margin-top:10px;font-size:13px;color:var(--muted)}.personal-site .site-footer{margin-top:85px;border-top:1px solid var(--line);padding:28px 0 22px}.personal-site .site-footer .wordmark{font-size:27px}.personal-site .footer-top{display:flex;align-items:center;gap:24px}.personal-site .footer-top p{font-size:12px;color:var(--muted);margin:0;padding-left:24px;border-left:1px solid var(--line)}.personal-site .footer-top>.text-link{margin-left:auto;font-size:12px}.personal-site .footer-bottom{display:flex;align-items:center;justify-content:space-between;margin-top:21px;color:var(--muted)}.personal-site .footer-bottom small,.personal-site .footer-bottom .small{font-size:10px}.personal-site .footer-bottom nav{display:flex;gap:22px;font-size:11px}.personal-site .footer-bottom nav a{min-height:44px;display:flex;align-items:center}.personal-site .footer-bottom nav a:hover{color:var(--accent)}.personal-site .page-space{padding-top:68px}.personal-site .page-heading{margin-bottom:50px}.personal-site .page-heading h1,.personal-site .page-heading .h1{margin:0 0 20px;font-size:48px}.personal-site .page-heading>p:not(.eyebrow){font-size:16px;color:var(--muted);line-height:1.9}.personal-site .page-heading.centered{text-align:center;padding:30px 0 15px}.personal-site .filter-bar{display:flex;align-items:center;gap:24px;border-bottom:1px solid var(--line);margin-bottom:30px;min-height:50px}.personal-site .filter-bar .eyebrow{margin:0 18px 0 0;font-size:9px}.personal-site .filter-bar button{border:0;border-bottom:2px solid rgba(0,0,0,0);padding:13px 5px;min-height:48px;color:var(--muted);background:none;font-size:13px;white-space:nowrap}.personal-site .filter-bar button[aria-pressed=true]{border-bottom-color:var(--accent);color:var(--ink)}.personal-site .filter-bar a{font-size:12px;margin-left:auto;white-space:nowrap;min-height:44px;display:flex;align-items:center}.personal-site .filter-bar{max-width:100%;overflow-x:auto}.personal-site .filter-bar>*{flex-shrink:0}.personal-site .page-note{margin-top:65px;padding:35px 0;border-top:1px solid var(--line)}.personal-site .page-note h2,.personal-site .page-note .h2{font-size:30px;margin-bottom:15px}.personal-site .page-note p{color:var(--muted);font-size:14px}.personal-site .breadcrumbs{display:flex;flex-wrap:wrap;gap:12px;color:var(--muted);font-size:12px;margin-bottom:35px}.personal-site .breadcrumbs a:hover{color:var(--accent)}.personal-site .project-heading{max-width:760px;margin-bottom:38px}.personal-site .project-heading h1,.personal-site .project-heading .h1{font-size:66px;margin-bottom:18px}.personal-site .project-heading>p:not(.eyebrow){color:var(--muted);font-size:18px}.personal-site .project-links{display:flex;gap:32px}.personal-site .project-cover{margin:0;padding:60px;border-radius:10px;position:relative;background:#dce3ec}.personal-site .project-cover>div{display:flex;justify-content:center;min-height:350px}.personal-site .project-cover figcaption{position:absolute;right:20px;bottom:10px;font-size:10px;color:#586771}.personal-site .project-cover.esp32-lab{background:#e0e6db}.personal-site .project-cover.ai-chat{background:#d5e1df}.personal-site .project-cover{overflow:clip}.personal-site .project-facts{display:grid;grid-template-columns:1fr 2fr 1.5fr;gap:25px;border-bottom:1px solid var(--line);padding:28px 0;margin-bottom:48px}.personal-site .project-facts span{display:block;color:var(--muted);font-size:11px;margin-bottom:8px}.personal-site .project-facts strong{font-size:13px;font-weight:400}.personal-site .project-prose{max-width:760px;margin-inline:auto}.personal-site .inline-search{display:flex;align-items:center;text-align:left;width:min(400px,100%);gap:14px;border-bottom:1px solid #8b9495;padding:12px 3px;margin:30px auto 0;font-size:13px;color:var(--muted)}.personal-site .inline-search kbd{margin-left:auto;color:inherit;background:rgba(0,0,0,0);font-size:10px;border:1px solid var(--line);padding:2px 5px}.personal-site .blog-list .post-row{padding-block:30px}.personal-site .blog-list .post-row h3,.personal-site .blog-list .post-row .h3{font-size:23px;margin-bottom:9px}.personal-site .blog-list .post-row p{font-size:13px}.personal-site .list-count{margin-top:28px;color:var(--muted);font-size:11px;text-align:right}.personal-site .reading-layout{display:grid;grid-template-columns:minmax(0, 760px) minmax(150px, 220px);gap:65px;max-width:1050px;margin-inline:auto}.personal-site .reading-article{min-width:0}.personal-site .article-heading{margin-bottom:37px;border-bottom:1px solid var(--line);padding-bottom:28px}.personal-site .article-heading h1,.personal-site .article-heading .h1{font-size:40px;line-height:1.5;margin-bottom:19px}.personal-site .article-description{color:var(--muted);font-size:16px;line-height:1.9}.personal-site .article-meta{display:flex;gap:18px;flex-wrap:wrap;font-size:10px;color:var(--muted);margin-top:25px}.personal-site .prose{font-size:17px;line-height:1.95;color:var(--ink);overflow-wrap:anywhere}.personal-site .prose h2,.personal-site .prose .h2{font-size:29px;margin:1.8em 0 .7em}.personal-site .prose h3,.personal-site .prose .h3{font-size:23px;margin:1.5em 0 .6em}.personal-site .prose h4,.personal-site .prose .h4{font-size:19px;margin:1.4em 0 .6em}.personal-site .prose p{margin-bottom:1.2em}.personal-site .prose a{color:var(--accent);text-decoration:underline;text-underline-offset:4px}.personal-site .prose img{max-width:100%;height:auto;border-radius:5px}.personal-site .prose figure{max-width:100%;margin:25px 0}.personal-site .prose table{display:block;max-width:100%;overflow-x:auto;font-size:14px;margin:25px 0;border-collapse:collapse}.personal-site .prose th,.personal-site .prose td{padding:10px 13px;border-bottom:1px solid var(--line)}.personal-site .prose th{font-weight:500}.personal-site .prose blockquote{border-left:2px solid var(--accent);margin:30px 0;padding:2px 20px;color:var(--muted);background:none}.personal-site .prose blockquote p:last-child{margin:0}.personal-site .prose ul,.personal-site .prose ol{padding-left:1.4em;margin:1em 0 1.5em}.personal-site .prose li{margin-block:.4em}.personal-site .prose hr{margin:35px 0;border-color:var(--line);opacity:1}.personal-site .prose pre{max-width:100%}.personal-site .prose .mermaid{padding:20px !important;overflow-x:auto !important}.personal-site .prose .mermaid svg{max-width:100%;height:auto}.personal-site .prose :is(h2,.h2,h3,.h3,h4,.h4),.personal-site .archive-year{scroll-margin-top:110px}.personal-site .desktop-toc{align-self:start;position:sticky;top:120px;font-size:11px;line-height:1.8;max-height:calc(100vh - 155px);overflow:auto;border-left:1px solid var(--line);padding-left:20px}.personal-site .desktop-toc .eyebrow{font-size:9px}.personal-site .desktop-toc ul{list-style:none;padding-left:0;margin:15px 0}.personal-site .desktop-toc ul ul{padding-left:12px;margin:8px 0}.personal-site .desktop-toc a{display:block;color:var(--muted);padding:5px 0}.personal-site .desktop-toc a[aria-current],.personal-site .desktop-toc a:hover{color:var(--accent)}.personal-site .mobile-toc{display:none}.personal-site .article-tags{display:flex;gap:16px;flex-wrap:wrap;margin:35px 0;font-size:12px;color:var(--accent)}.personal-site .article-pagination{display:flex;gap:30px;justify-content:space-between;border-top:1px solid var(--line);margin-top:45px;padding-top:22px;font-size:13px}.personal-site .article-pagination a{max-width:48%;min-height:44px}.personal-site .article-pagination small,.personal-site .article-pagination .small{display:block;font-size:10px;color:var(--muted);margin-bottom:9px}.personal-site .article-pagination a:last-child{margin-left:auto;text-align:right}.personal-site .related-posts{margin-top:50px;border-top:1px solid var(--line);padding-top:30px}.personal-site .related-posts h2,.personal-site .related-posts .h2{font-size:27px;margin-bottom:20px}.personal-site .related-posts>a{display:flex;justify-content:space-between;gap:20px;padding:17px 0;border-top:1px solid var(--line);font-size:14px}.personal-site .related-posts>a:hover{color:var(--accent)}.personal-site .empty-state{text-align:center;padding:25px 20px 45px}.personal-site .empty-state h2,.personal-site .empty-state .h2{font-size:30px;margin-bottom:18px}.personal-site .empty-state>p{color:var(--muted);font-size:15px;margin-bottom:28px}.personal-site .document-art{width:110px;height:145px;margin:0 auto 45px;border:1px solid #9eafb7;border-radius:2px 2px 26px 2px;transform:rotate(10deg);background:linear-gradient(135deg, var(--paper), var(--surface));padding-top:35px;box-shadow:-13px 17px 0 rgba(120,156,187,.0901960784)}.personal-site .document-art span{display:block;width:58px;height:1px;background:#93a5af;margin:13px auto}.personal-site .document-art span:last-child{width:35px;margin-left:25px}.personal-site .taxonomy-grid{display:grid;grid-template-columns:repeat(3, 1fr);gap:25px}.personal-site .taxonomy-grid>a{border-top:1px solid var(--line);padding:25px 0}.personal-site .taxonomy-grid>a h2,.personal-site .taxonomy-grid>a .h2{font-size:25px;margin-bottom:14px}.personal-site .taxonomy-grid>a p,.personal-site .taxonomy-grid>a span{font-size:12px;color:var(--muted)}.personal-site .taxonomy-grid>a:hover h2,.personal-site .taxonomy-grid>a:hover .h2{color:var(--accent)}.personal-site .about-hero{display:grid;grid-template-columns:1fr 1fr;gap:80px;align-items:center}.personal-site .about-hero h1,.personal-site .about-hero .h1{font-size:64px;margin:20px 0 30px}.personal-site .about-hero h1 span,.personal-site .about-hero .h1 span{color:var(--accent)}.personal-site .about-hero p:not(.eyebrow){color:var(--muted);line-height:2}.personal-site .about-text{max-width:820px;margin-top:70px}.personal-site .exploration{border-top:1px solid var(--line);margin-top:70px;padding-top:30px}.personal-site .exploration>div{display:grid;grid-template-columns:repeat(3, 1fr);gap:35px;margin-top:30px}.personal-site .exploration article{border-right:1px solid var(--line);padding-right:30px}.personal-site .exploration article:last-child{border:none}.personal-site .exploration article span{font-size:11px;color:var(--accent)}.personal-site .exploration article h3,.personal-site .exploration article .h3{font-size:23px;margin:12px 0}.personal-site .exploration article p{font-size:14px;color:var(--muted)}.personal-site .archive-years{display:flex;flex-wrap:wrap;gap:30px;border-top:1px solid var(--line);padding-top:20px;margin-bottom:45px}.personal-site .archive-years a{min-height:44px;display:inline-flex;gap:9px;align-items:center;font-size:14px}.personal-site .archive-years a small,.personal-site .archive-years a .small{color:var(--muted);font-size:10px}.personal-site .archive-year{display:grid;grid-template-columns:130px minmax(0, 1fr);gap:40px;margin-bottom:45px}.personal-site .archive-year h2,.personal-site .archive-year .h2{font-size:35px}.personal-site .archive-year>div>small,.personal-site .archive-year>div>.small{color:var(--muted);font-size:11px}.personal-site .archive-year .post-row{grid-template-columns:85px minmax(0, 1fr) 20px}.personal-site .archive-year .post-row .post-category{display:none}.personal-site .error-page{text-align:center;padding-top:70px}.personal-site .error-page>h1,.personal-site .error-page>.h1{font-size:37px;margin-bottom:20px}.personal-site .error-page>p:not(.error-number){color:var(--muted);font-size:14px}.personal-site .error-number{font:140px/1.1 Georgia,serif;letter-spacing:-0.08em;margin-bottom:18px;color:var(--accent)}.personal-site .error-suggestions{margin:65px auto 0;max-width:700px;text-align:left}.personal-site .error-suggestions h2,.personal-site .error-suggestions .h2{font-size:22px;margin-bottom:22px}.personal-site .error-suggestions a{display:block;border-top:1px solid var(--line);padding:16px 0;font-size:13px}.personal-site .search-dialog{width:min(700px,100% - 40px);max-height:min(80vh,800px);padding:22px 30px;margin:12vh auto auto;border:1px solid var(--line);border-radius:9px;background:var(--paper);color:var(--ink);box-shadow:0 25px 80px rgba(0,0,0,.2)}.personal-site .search-dialog::backdrop{background:rgba(28,37,40,.4);backdrop-filter:blur(4px)}.personal-site .search-dialog-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.personal-site .search-dialog-top .eyebrow{margin:0}.personal-site .search-label{display:block;font-size:12px;margin-bottom:12px;color:var(--muted)}.personal-site .search-input-wrap{display:flex;gap:12px;align-items:center;border-bottom:1px solid var(--accent);padding:0 0 6px}.personal-site .search-input-wrap>span{font-size:25px}.personal-site .search-input-wrap input{min-width:0;width:100%;padding:10px 0;border:none;background:none;color:var(--ink);font-size:15px}.personal-site .search-input-wrap input::-webkit-search-cancel-button{display:none}.personal-site .search-input-wrap button{border:none;background:rgba(0,0,0,0);font-size:24px;width:44px;height:44px;flex-shrink:0}.personal-site .search-status{margin:20px 0;color:var(--muted);font-size:12px}.personal-site .search-results{min-height:100px}.personal-site .search-results h3,.personal-site .search-results .h3{font-family:var(--body-font);font-size:10px;letter-spacing:.12em;margin:24px 0 10px;color:var(--muted)}.personal-site .search-results a{display:block;padding:15px 13px;margin-inline:-13px;border-top:1px solid var(--line);font-size:15px;border-radius:4px}.personal-site .search-results a p{font-size:11px;color:var(--muted);margin:6px 0 0}.personal-site .search-results a:hover,.personal-site .search-results a[data-selected]{background:var(--surface)}.personal-site .search-results mark,.personal-site .search-results .mark{background:rgba(134,175,211,.2078431373);color:inherit;padding:0}.personal-site .search-help{display:flex;justify-content:space-between;color:var(--muted);font-size:10px;border-top:1px solid var(--line);padding-top:18px;margin-top:20px}.personal-site .search-page{max-width:850px}.personal-site .search-error-links{display:flex;gap:25px}.personal-site .filter-empty{padding:50px 0;color:var(--muted)}.personal-site [data-reveal]{opacity:1}.personal-site [data-reveal=pending],.personal-site [data-reveal=visible]{opacity:1;transform:none}.personal-site .copy-status{font-size:11px;color:var(--muted)}.personal-site .mermaid-status{font-size:12px;color:var(--muted)}@keyframes wave-drift{from{transform:translate3d(-10px, 0, 0) scale(1.01)}to{transform:translate3d(10px, 10px, 0) scale(1.025)}}@keyframes panel-in{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}@keyframes hero-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion: no-preference){.personal-site .hero-enter{animation:hero-in 550ms cubic-bezier(0.22, 1, 0.36, 1) both}.personal-site .hero-enter:nth-child(2){animation-delay:65ms}.personal-site .hero-enter:nth-child(3){animation-delay:130ms}.personal-site .hero-enter:nth-child(4){animation-delay:195ms}}@media(max-width: 1100px){.personal-site .shell{width:calc(100% - 64px)}.personal-site .project-card-copy{width:64%;padding:24px}.personal-site .project-card-copy h3,.personal-site .project-card-copy .h3{font-size:26px}.personal-site .project-card-copy p{font-size:12px}.personal-site .project-card.esp32-lab .project-card-visual{right:-100px}.personal-site .project-card.ai-chat .project-card-visual{left:240px}.personal-site .reading-layout{gap:35px;grid-template-columns:minmax(0, 1fr) 170px}.personal-site .home-about{gap:40px}.personal-site .about-hero{gap:40px}.personal-site .about-hero h1,.personal-site .about-hero .h1{font-size:56px}}@media(max-width: 767px){.personal-site{font-size:15px}.personal-site .shell{width:calc(100% - 40px)}.personal-site .site-header-inner{height:64px}.personal-site .wordmark{font-size:28px}.personal-site .desktop-nav,.personal-site .github-link,.personal-site .desktop-only{display:none}.personal-site .mobile-only{display:block}.personal-site .header-tools{gap:0;margin-right:-8px}.personal-site .icon-button{width:44px}.personal-site .mobile-nav{display:block}.personal-site .mobile-nav summary{width:44px;height:44px;padding:14px 10px;list-style:none;cursor:pointer}.personal-site .mobile-nav summary::-webkit-details-marker{display:none}.personal-site .mobile-nav summary span{width:20px;height:1px;background:currentColor;display:block;margin:5px 0;transition:transform 180ms}.personal-site .mobile-nav[open] summary span:first-child{transform:translateY(3px) rotate(45deg)}.personal-site .mobile-nav[open] summary span:last-child{transform:translateY(-3px) rotate(-45deg)}.personal-site .mobile-nav nav{position:absolute;top:64px;left:-20px;right:-20px;padding:18px 30px 27px;border-bottom:1px solid var(--line);box-shadow:0 20px 25px rgba(32,47,56,.062745098);background:var(--paper)}.personal-site .mobile-nav nav a{display:flex;justify-content:space-between;align-items:center;padding:12px 2px;min-height:48px;border-bottom:1px solid var(--line);font-size:15px}.personal-site .mobile-nav nav a[aria-current]{color:var(--accent);border-left:2px solid var(--accent);padding-left:12px}.personal-site .home-intro{padding-top:52px}.personal-site .hero-copy .eyebrow{font-size:9px;margin-bottom:23px}.personal-site .hero-copy h1,.personal-site .hero-copy .h1{font-size:clamp(37px,10vw,54px);line-height:1.4}.personal-site .hero-copy h1 span,.personal-site .hero-copy .h1 span{display:block}.personal-site .hero-description{font-size:14px;margin:23px 0 25px;line-height:1.95}.personal-site .hero-actions{gap:10px}.personal-site .button{padding:10px 19px;gap:21px;font-size:12px;min-height:46px}.personal-site .hero-wave{top:290px;left:-50%;width:200%;opacity:.7}.personal-site .showcase{margin-top:55px}.personal-site .showcase-heading h2,.personal-site .showcase-heading .h2{font-size:23px}.personal-site .project-tabs{width:100%;justify-content:center;gap:1px;margin-bottom:20px}.personal-site .project-tabs button{padding:10px 13px;font-size:11px;flex:1}.personal-site .showcase-stage{height:290px}.personal-site .showcase-visual{height:225px}.personal-site .app-preview{height:220px;border-radius:7px}.personal-site .window-bar{height:29px;padding-inline:10px;font-size:8px}.personal-site .window-dots{gap:4px}.personal-site .window-dots i{width:5px;height:5px}.personal-site .app-body{grid-template-columns:78px minmax(0, 1fr);height:calc(100% - 29px)}.personal-site .app-rail{padding:12px 8px;font-size:6px;gap:10px}.personal-site .app-rail .rail-bottom{font-size:5px}.personal-site .app-rail .rail-active{padding:4px}.personal-site .app-logo{font-size:21px}.personal-site .translation{gap:6px;padding:8px;grid-template-columns:1fr;grid-template-rows:15px 1fr 1fr}.personal-site .language-line{font-size:6px;gap:20px;height:auto}.personal-site .translation-text{padding:8px 11px}.personal-site .translation-text small,.personal-site .translation-text .small{font-size:6px;margin:0 0 5px}.personal-site .translation-text p{font-size:12px}.personal-site .translation-text p br{display:none}.personal-site .translation-text .preview-symbol{font-size:8px;bottom:8px;right:8px}.personal-site .showcase-caption{margin-top:10px;font-size:10px}.personal-site .showcase-caption strong{margin-right:6px}.personal-site .showcase-caption>div>span{display:block;font-size:8px;margin-top:4px}.personal-site .showcase-caption .text-link{font-size:10px;gap:10px}.personal-site .showcase-disclaimer{font-size:8px;text-align:center;margin-top:5px}.personal-site .showcase-visual .hardware-preview{height:220px}.personal-site .showcase-visual .hardware-preview .chip-board{scale:.68}.personal-site .showcase-visual .hardware-preview .hardware-note{font-size:8px;bottom:-2px}.personal-site .showcase-visual .terminal-preview{height:220px}.personal-site .showcase-visual .terminal-preview .terminal-body{padding:19px;font-size:10px}.personal-site .showcase-visual .terminal-preview .terminal-body p{margin-bottom:10px}.personal-site .showcase-visual .terminal-preview .terminal-body small,.personal-site .showcase-visual .terminal-preview .terminal-body .small{margin-top:10px;font-size:8px}.personal-site .showcase-visual .terminal-preview .terminal-rule{margin-block:12px}.personal-site .home-section{margin-top:45px}.personal-site .section-heading{align-items:center;padding-top:21px;margin-bottom:20px}.personal-site .section-heading .eyebrow{font-size:9px}.personal-site .section-heading h2,.personal-site .section-heading .h2{font-size:26px}.personal-site .section-heading>.text-link{font-size:10px;gap:9px;white-space:nowrap}.personal-site .project-grid{grid-template-columns:minmax(0, 1fr);grid-template-rows:auto;gap:15px}.personal-site .project-card{height:235px}.personal-site .project-card.vanishtrans{grid-row:auto;height:390px}.personal-site .project-card.vanishtrans .project-card-copy{padding:26px}.personal-site .project-card.vanishtrans .project-card-copy h3,.personal-site .project-card.vanishtrans .project-card-copy .h3{font-size:34px}.personal-site .project-card.vanishtrans .project-card-copy p{max-width:250px}.personal-site .project-card.vanishtrans .project-card-visual{width:380px;height:220px;top:225px;left:70px}.personal-site .project-card.vanishtrans .project-card-visual .app-preview{height:220px}.personal-site .project-card.vanishtrans .project-card-visual .app-body{grid-template-columns:90px 1fr}.personal-site .project-card.vanishtrans .project-card-visual .app-rail{padding:12px}.personal-site .project-card.vanishtrans .project-card-visual .translation-text p{font-size:12px}.personal-site .project-card-copy{width:63%;padding:25px}.personal-site .project-card-copy .project-kind{font-size:9px;margin-bottom:12px}.personal-site .project-card-copy h3,.personal-site .project-card-copy .h3{font-size:27px}.personal-site .project-card-copy p{font-size:11px}.personal-site .project-card.esp32-lab .project-card-visual{right:-110px}.personal-site .project-card.ai-chat .project-card-visual{left:210px;top:40px;width:300px}.personal-site .project-card.ai-chat .project-card-visual .terminal-preview{height:200px}.personal-site .project-card.ai-chat .project-card-visual .terminal-body{padding:16px;font-size:9px}.personal-site .round-arrow{width:34px;height:34px;font-size:19px;margin-top:2px}.personal-site .visual-caption{font-size:8px}.personal-site .post-row{grid-template-columns:minmax(0, 1fr) 18px;gap:7px;padding:20px 0}.personal-site .post-row time{grid-column:1;grid-row:1;font-size:9px}.personal-site .post-row>div{grid-column:1;grid-row:2}.personal-site .post-row h3,.personal-site .post-row .h3{font-size:17px;margin:0 0 6px}.personal-site .post-row p{font-size:11px}.personal-site .post-row .post-category{display:none}.personal-site .post-row .row-arrow{grid-column:2;grid-row:1/3;font-size:17px}.personal-site .home-about{grid-template-columns:minmax(0, 1fr);gap:30px;padding-top:25px}.personal-site .home-about h2,.personal-site .home-about .h2{font-size:31px}.personal-site .home-about p:not(.eyebrow){font-size:13px}.personal-site .about-values{padding-top:10px;gap:35px}.personal-site .site-footer{margin-top:50px;padding-top:22px}.personal-site .footer-top{gap:15px}.personal-site .footer-top p{border:none;padding-left:0;font-size:10px}.personal-site .footer-top>.text-link{font-size:10px;gap:9px}.personal-site .footer-bottom{flex-direction:column-reverse;align-items:flex-start;gap:17px;margin-top:10px}.personal-site .footer-bottom nav{width:100%;justify-content:space-between;gap:10px;font-size:10px}.personal-site .footer-bottom small,.personal-site .footer-bottom .small{font-size:8px}.personal-site .page-space{padding-top:40px}.personal-site .page-heading{margin-bottom:30px}.personal-site .page-heading h1,.personal-site .page-heading .h1{font-size:33px;margin-bottom:17px}.personal-site .page-heading>p:not(.eyebrow){font-size:13px}.personal-site .page-heading.centered{padding:10px 0}.personal-site .filter-bar{gap:20px;overflow-x:auto;margin-bottom:20px}.personal-site .filter-bar .eyebrow{display:none}.personal-site .filter-bar button{font-size:12px}.personal-site .filter-bar a{font-size:10px;margin-left:0}.personal-site .page-note{margin-top:40px;padding-top:25px}.personal-site .page-note h2,.personal-site .page-note .h2{font-size:26px}.personal-site .page-note p{font-size:13px}.personal-site .project-heading h1,.personal-site .project-heading .h1{font-size:43px}.personal-site .project-heading>p:not(.eyebrow){font-size:14px}.personal-site .project-links{gap:25px}.personal-site .project-cover{padding:22px 12px 35px;border-radius:7px}.personal-site .project-cover>div{min-height:220px}.personal-site .project-cover .app-preview{height:220px}.personal-site .project-cover .hardware-preview{height:220px}.personal-site .project-cover .hardware-preview .chip-board{scale:.73}.personal-site .project-cover .hardware-preview .hardware-note{display:none}.personal-site .project-cover .terminal-preview{height:220px}.personal-site .project-cover .terminal-preview .terminal-body{padding:20px;font-size:10px}.personal-site .project-cover .terminal-preview .terminal-body small,.personal-site .project-cover .terminal-preview .terminal-body .small{font-size:9px;margin-top:12px}.personal-site .project-cover figcaption{font-size:8px;right:12px}.personal-site .project-facts{grid-template-columns:1fr;gap:17px;padding:24px 0;margin-bottom:35px}.personal-site .project-facts>div{display:grid;grid-template-columns:100px minmax(0, 1fr);gap:10px}.personal-site .project-facts span{margin:0;font-size:10px}.personal-site .project-facts strong{font-size:11px}.personal-site .blog-list .post-row{padding-block:24px}.personal-site .blog-list .post-row h3,.personal-site .blog-list .post-row .h3{font-size:20px}.personal-site .blog-list .post-row p{font-size:12px}.personal-site .reading-layout{display:block}.personal-site .article-heading h1,.personal-site .article-heading .h1{font-size:30px}.personal-site .article-description{font-size:14px}.personal-site .article-meta{font-size:9px;gap:12px}.personal-site .desktop-toc{display:none}.personal-site .mobile-toc{display:block;margin-bottom:30px;border-block:1px solid var(--line)}.personal-site .mobile-toc summary{padding:12px 3px;cursor:pointer;font-size:13px}.personal-site .mobile-toc nav{font-size:12px;padding:10px 0}.personal-site .mobile-toc nav ul{margin:5px 0;list-style:none;padding-left:16px}.personal-site .mobile-toc nav li{margin-block:8px}.personal-site .mobile-toc nav a{color:var(--muted)}.personal-site .prose{font-size:15px;line-height:1.95}.personal-site .prose h2,.personal-site .prose .h2{font-size:25px}.personal-site .prose h3,.personal-site .prose .h3{font-size:20px}.personal-site .prose h4,.personal-site .prose .h4{font-size:17px}.personal-site .prose table{font-size:12px}.personal-site .article-pagination{gap:20px;font-size:11px}.personal-site .taxonomy-grid{grid-template-columns:repeat(2, minmax(0, 1fr));gap:20px}.personal-site .taxonomy-grid>a h2,.personal-site .taxonomy-grid>a .h2{font-size:21px}.personal-site .empty-state{padding:15px 0 20px}.personal-site .empty-state h2,.personal-site .empty-state .h2{font-size:27px}.personal-site .empty-state>p{font-size:13px}.personal-site .about-hero{grid-template-columns:minmax(0, 1fr);gap:30px}.personal-site .about-hero h1,.personal-site .about-hero .h1{font-size:48px;margin-top:12px}.personal-site .about-hero p:not(.eyebrow){font-size:14px}.personal-site .about-text{margin-top:35px}.personal-site .exploration{margin-top:40px}.personal-site .exploration>h2,.personal-site .exploration>.h2{font-size:28px}.personal-site .exploration>div{grid-template-columns:1fr;gap:20px;margin-top:20px}.personal-site .exploration article{border:none;border-top:1px solid var(--line);padding:20px 0 0}.personal-site .exploration article:last-child{border-top:1px solid var(--line)}.personal-site .exploration article h3,.personal-site .exploration article .h3{font-size:23px}.personal-site .archive-year{grid-template-columns:minmax(0, 1fr);gap:15px;margin-bottom:35px}.personal-site .archive-year>div:first-child{display:flex;gap:20px;align-items:center}.personal-site .archive-year .post-row{grid-template-columns:minmax(0, 1fr) 20px}.personal-site .archive-year h2,.personal-site .archive-year .h2{font-size:30px}.personal-site .error-page>h1,.personal-site .error-page>.h1{font-size:28px}.personal-site .error-page>p:not(.error-number){font-size:12px}.personal-site .error-number{font-size:110px}.personal-site .error-suggestions{margin-top:45px}.personal-site .search-dialog{width:calc(100% - 20px);max-height:85dvh;margin-top:5dvh;padding:15px 20px}.personal-site .search-input-wrap input{font-size:13px}.personal-site .search-help{font-size:9px}.personal-site .search-results a{font-size:14px}.personal-site .search-page .search-widget{margin-top:10px}}@media(max-width: 374px){.personal-site .hero-actions .button{padding-inline:16px;gap:15px}.personal-site .project-tabs button{padding-inline:7px}.personal-site .section-heading h2,.personal-site .section-heading .h2{font-size:24px}.personal-site .project-card-copy{padding:22px}}@media(prefers-reduced-motion: reduce){.personal-site *,.personal-site *::before,.personal-site *::after{animation:none !important;transition:none !important;scroll-behavior:auto !important}.personal-site [data-reveal]{opacity:1 !important;transform:none !important}}:root{--wave-silver: #f6faff;--wave-haze: #d9e6f0;--wave-back: #a5c4dd;--wave-blue: #76a4cb;--wave-deep: #4b82b1;--wave-thread: #6b99bf;--ease-out-soft: cubic-bezier(.22,1,.36,1)}:root[data-bs-theme=dark]{--wave-silver: #7295b4;--wave-haze: #243e54;--wave-back: #34566f;--wave-blue: #416f92;--wave-deep: #2c5275;--wave-thread: #91b2ca}.personal-site .header-sentinel{position:absolute;top:0;left:0;width:1px;height:1px;pointer-events:none}.personal-site .site-header{transition:background 240ms ease,box-shadow 240ms ease}.personal-site[data-scrolled=true] .site-header{background:color-mix(in srgb, var(--paper) 97%, transparent);box-shadow:0 5px 24px rgba(35,55,73,.031372549)}.personal-site .desktop-nav a::after{transform-origin:left center;transition:transform 240ms var(--ease-out-soft)}.personal-site .desktop-nav a{transition:color 160ms}.personal-site .desktop-nav a:hover{color:var(--accent)}.personal-site .icon-button{transition:color 180ms,background 180ms,transform 180ms}.personal-site .icon-button:active{transform:scale(0.94)}.personal-site .home-intro{padding-top:70px;background:var(--paper)}.personal-site .hero-copy h1,.personal-site .hero-copy .h1{font-weight:600;letter-spacing:-0.045em;line-height:1.32;text-wrap:balance}.personal-site .hero-description{text-wrap:pretty;margin-top:24px}.personal-site .hero-copy .eyebrow{font-size:10px;letter-spacing:.26em;color:var(--accent);opacity:.85}.personal-site .hero-wave{top:245px;bottom:-38px;left:-4%;width:108%;opacity:1;background:none;pointer-events:none;-webkit-mask-image:linear-gradient(transparent, #000 12%, #000 82%, transparent);mask-image:linear-gradient(transparent, #000 12%, #000 82%, transparent);contain:layout style}.personal-site .hero-wave::after{display:none}.personal-site .hero-wave::before{content:"";position:absolute;inset:0;background:radial-gradient(ellipse at 7% 45%, rgba(138, 184, 223, 0.0823529412), transparent 38%),radial-gradient(ellipse at 96% 60%, rgba(124, 173, 219, 0.0941176471), transparent 35%)}.personal-site .wave-scene{display:block;width:100%;height:100%;overflow:visible}.personal-site .wave-ribbon{opacity:.93}.personal-site .home-intro[data-motion=running] .hero-wave{animation:wave-luminance 16s ease-in-out infinite alternate}.personal-site .home-intro[data-motion=paused] .hero-wave{animation:wave-luminance 16s ease-in-out infinite alternate paused}.personal-site .showcase{margin-top:59px}.personal-site .showcase-heading h2,.personal-site .showcase-heading .h2{font-size:29px;font-weight:600;letter-spacing:-0.03em}.personal-site .project-tabs{position:relative;isolation:isolate}.personal-site .project-tabs button{transition:color 180ms ease;padding-block:12px}.personal-site .project-tabs[data-enhanced=true]::after{content:"";position:absolute;bottom:0;left:0;height:2px;width:var(--tab-width);background:var(--accent);transform:translateX(var(--tab-left));transition:transform 300ms var(--ease-out-soft),width 300ms var(--ease-out-soft);pointer-events:none}.personal-site .project-tabs[data-enhanced=true] button[aria-selected=true]{border-bottom:1px solid var(--line)}.personal-site .showcase-stage{display:grid}.personal-site .showcase-panel{grid-area:1/1;min-width:0}.personal-site .showcase-visual>:is(.app-preview,.terminal-preview){box-shadow:0 28px 65px rgba(35,63,82,.1568627451),0 3px 11px rgba(35,63,82,.0784313725)}.personal-site .showcase-disclaimer{letter-spacing:.03em}.personal-site .button{transition:transform 180ms var(--ease-out-soft),background 180ms,box-shadow 180ms,border-color 180ms}.personal-site .button:active{transform:translateY(0) scale(0.98)}.personal-site .button span{transition:transform 200ms var(--ease-out-soft)}.personal-site .button-dark{box-shadow:0 4px 12px rgba(23,44,58,.0431372549)}.personal-site .project-card{transition:transform 320ms var(--ease-out-soft),box-shadow 320ms var(--ease-out-soft)}.personal-site .project-card-visual{transition:translate 420ms var(--ease-out-soft)}.personal-site .round-arrow{transition:transform 240ms var(--ease-out-soft),background 240ms,color 240ms}.personal-site .project-card:focus-visible{box-shadow:0 15px 35px rgba(41,71,98,.0941176471)}.personal-site .section-heading h2,.personal-site .section-heading .h2{text-wrap:balance}.personal-site .post-row h3 a,.personal-site .post-row .h3 a{transition:color 180ms ease}.personal-site .search-dialog[open]{animation:search-arrive 220ms var(--ease-out-soft) both}@media(hover: hover)and (pointer: fine){.personal-site .project-card:hover{transform:translateY(-4px);box-shadow:0 19px 40px rgba(41,71,98,.0980392157)}.personal-site .project-card:hover .project-card-visual{translate:0 -6px}.personal-site .project-card:hover .round-arrow{background:#2d4659;color:#fff;transform:translate(2px, -2px)}.personal-site .button:hover{box-shadow:0 7px 17px rgba(41,71,98,.0862745098)}.personal-site .button:hover span{transform:translate(2px, -2px)}.personal-site .icon-button:hover svg{transform:translateY(-1px)}}@media(max-width: 767px){.personal-site .home-intro{padding-top:50px}.personal-site .hero-copy .eyebrow{font-size:9px}.personal-site .hero-copy h1,.personal-site .hero-copy .h1{line-height:1.38;letter-spacing:-0.04em}.personal-site .hero-wave{top:310px;left:-60%;width:220%;bottom:-22px;opacity:.82}.personal-site .wave-fibers{display:none}.personal-site .showcase{margin-top:51px}.personal-site .showcase-heading h2,.personal-site .showcase-heading .h2{font-size:23px}.personal-site .mobile-nav summary{position:relative}.personal-site .mobile-nav summary span{position:absolute;left:12px;top:16px;margin:0;transform-origin:center;transition:transform 220ms var(--ease-out-soft),opacity 180ms}.personal-site .mobile-nav summary span:last-child{top:24px}.personal-site .mobile-nav[open]:not([data-closing]) summary span:first-child{transform:translateY(4px) rotate(45deg)}.personal-site .mobile-nav[open]:not([data-closing]) summary span:last-child{transform:translateY(-4px) rotate(-45deg)}.personal-site .mobile-nav[data-closing] summary span{transform:none}.personal-site .mobile-nav nav{padding-top:12px;box-shadow:0 20px 30px rgba(24,46,59,.0705882353)}.personal-site .mobile-nav nav a{padding-block:14px;min-height:52px}.personal-site .mobile-nav nav a span{font-size:15px;opacity:.72}.personal-site .search-dialog::backdrop{backdrop-filter:blur(2px)}}@media(prefers-reduced-motion: no-preference){.personal-site .hero-enter{animation-duration:620ms;animation-timing-function:var(--ease-out-soft)}}@keyframes wave-luminance{from{opacity:.88}to{opacity:1}}@keyframes search-arrive{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:translateY(0)}}@media(hover: none),(pointer: coarse){.personal-site .button:hover{transform:none}.personal-site .button:active{transform:scale(0.98)}}@media(prefers-reduced-motion: reduce){.personal-site *,.personal-site *::before,.personal-site *::after{animation:none !important;transition:none !important}}.personal-site .hero-wave{top:275px}.personal-site .wave-scene{position:absolute;inset:0;opacity:.18}.personal-site .wave-texture{position:absolute;inset:7% -2% 0;background:url("/images/hero-waves-v2.webp") center/100% 100% no-repeat;transform-origin:50% 75%}.personal-site .wave-texture-main{opacity:.86}.personal-site .wave-texture-light{opacity:.2;-webkit-mask-image:linear-gradient(90deg, transparent 45%, #000 85%);mask-image:linear-gradient(90deg, transparent 45%, #000 85%)}.personal-site .home-intro[data-motion=running] .wave-texture-main{animation:wave-silk 22s ease-in-out infinite alternate}.personal-site .home-intro[data-motion=paused] .wave-texture-main{animation:wave-silk 22s ease-in-out infinite alternate paused}.personal-site .home-intro[data-motion=running] .wave-texture-light{animation:wave-sheen 27s ease-in-out infinite alternate}.personal-site .home-intro[data-motion=paused] .wave-texture-light{animation:wave-sheen 27s ease-in-out infinite alternate paused}:root[data-bs-theme=dark] .personal-site .wave-texture{filter:brightness(0.72) saturate(0.7);opacity:.38}:root[data-bs-theme=dark] .personal-site .wave-texture-light{opacity:.1}@keyframes wave-silk{from{transform:translate3d(-8px, 4px, 0) scale(1.025, 1.01) skewX(-1deg)}to{transform:translate3d(9px, -7px, 0) scale(1.01, 1.035) skewX(1.2deg)}}@keyframes wave-sheen{from{transform:translate3d(7px, -4px, 0) scale(1.025, 1.015) skewX(0.8deg)}to{transform:translate3d(-11px, 9px, 0) scale(1.015, 1.035) skewX(-1deg)}}@media(max-width: 767px){.personal-site .hero-wave{top:285px;left:-49%;width:198%}.personal-site .wave-texture{inset:17% -8% -2%}.personal-site .wave-texture-main{opacity:.78}.personal-site .wave-texture-light{display:none}.personal-site .wave-scene{opacity:.1}}:root{--duration-fast: 160ms;--duration-ui: 280ms;--duration-scene: 520ms;--ease-studio: cubic-bezier(.22,1,.36,1);--scene-stroke: #637b7b;--scene-fill: #e6ece8;--scene-blue: #a5bfd3}:root[data-bs-theme=dark]{--scene-stroke: #9cbbb9;--scene-fill: #2c393d;--scene-blue: #466d87}@view-transition{navigation:auto}::view-transition-group(root){animation-duration:160ms}::view-transition-old(root){animation:studio-leave 120ms ease-out both}::view-transition-new(root){animation:studio-arrive 180ms ease-out both}::view-transition-group(project-surface){animation-duration:420ms;animation-timing-function:var(--ease-studio);overflow:clip;border-radius:10px}::view-transition-old(project-surface),::view-transition-new(project-surface){width:100%;height:100%;-o-object-fit:cover;object-fit:cover;-o-object-position:center;object-position:center;mix-blend-mode:normal;animation-duration:280ms}::view-transition-group(site-navigation){animation-duration:160ms}@keyframes studio-leave{to{opacity:0}}@keyframes studio-arrive{from{opacity:0}}.personal-site .site-header{view-transition-name:site-navigation}.personal-site .home-intro{padding-top:60px}.personal-site .hero-copy h1,.personal-site .hero-copy .h1{font-size:clamp(40px,5.3vw,72px)}.personal-site .hero-copy .eyebrow{margin-bottom:22px}.personal-site .hero-description{margin-block:23px 27px}.personal-site .hero-actions .button{border-radius:3px}.personal-site .showcase{max-width:1040px;margin-top:50px}.personal-site .showcase-heading{margin-bottom:13px}.personal-site .showcase-heading h2,.personal-site .showcase-heading .h2{font-size:27px;letter-spacing:-0.035em}.personal-site .project-tabs{margin-bottom:18px;gap:14px}.personal-site .project-tabs button{font-size:12px;padding:9px 25px}.personal-site .showcase-stage{height:490px}.personal-site .showcase-visual{position:relative;height:377px;padding:10px 20px;isolation:isolate}.personal-site .showcase-visual>.app-preview{width:min(760px,100%);height:335px}.personal-site .showcase-visual>.terminal-preview{width:min(700px,100%);height:330px}.personal-site .visual-guide{position:absolute;inset:0;z-index:-1;pointer-events:none}.personal-site .visual-guide>span{position:absolute;top:3px;left:0;color:var(--accent);opacity:.7;font:9px/1.5 ui-monospace,monospace;letter-spacing:.13em}.personal-site .visual-guide>i{position:absolute;width:16px;height:16px;border-color:color-mix(in srgb, var(--accent) 40%, transparent);border-style:solid;border-width:0}.personal-site .visual-guide>i:nth-of-type(1){top:25px;left:0;border-top-width:1px;border-left-width:1px}.personal-site .visual-guide>i:nth-of-type(2){top:25px;right:0;border-top-width:1px;border-right-width:1px}.personal-site .visual-guide>i:nth-of-type(3){bottom:8px;left:0;border-bottom-width:1px;border-left-width:1px}.personal-site .visual-guide>i:nth-of-type(4){bottom:8px;right:0;border-bottom-width:1px;border-right-width:1px}.personal-site .process-strip{display:flex;align-items:center;justify-content:center;gap:26px;padding:14px 0 13px;color:var(--muted);font-size:11px}.personal-site .process-strip>span{display:inline-flex;gap:10px;align-items:center;white-space:nowrap}.personal-site .process-strip i{font:9px/1 ui-monospace,monospace;color:var(--accent);font-style:normal}.personal-site .process-strip b{font-size:14px;font-weight:400;opacity:.4}.personal-site .showcase-caption{border-top:1px solid color-mix(in srgb, var(--accent) 24%, transparent);margin:0 20px;padding-top:5px}.personal-site .showcase-caption strong{font-weight:600}.personal-site .showcase-caption .text-link{min-height:42px}.personal-site .showcase-footnote{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-inline:20px;min-height:44px}.personal-site .showcase-disclaimer{text-align:left;font-size:9px;margin:0}.personal-site .replay-assembly{flex-shrink:0;display:inline-flex;align-items:center;gap:7px;min-height:44px;border:0;padding:0 2px;color:var(--muted);background:none;font-size:10px}.personal-site .replay-assembly span{font-size:18px}.personal-site .replay-assembly:hover{color:var(--accent)}.personal-site .replay-assembly:active{opacity:.65}.personal-site .circuit-map{position:absolute;inset:0;width:100%;height:100%;overflow:visible}.personal-site .circuit-traces{stroke:#789791;stroke-width:1;fill:none;opacity:.65}.personal-site .circuit-labels{fill:#6c8984;font:9px ui-monospace,monospace;letter-spacing:2px}.personal-site .hardware-note{bottom:0}.personal-site .showcase-visual .chip-board{box-shadow:14px 22px 35px rgba(36,76,61,.1450980392)}.personal-site .project-card{border-radius:6px}.personal-site .project-card.vanishtrans{background:linear-gradient(145deg, #e4e9f0, #d1ddec 65%, #b6c9dd)}.personal-site .project-card.vanishtrans::before{opacity:.5}.personal-site .project-card.esp32-lab{background:linear-gradient(120deg, #e8ece4, #d5e3db)}.personal-site .project-card-copy h3,.personal-site .project-card-copy .h3{font-weight:600}.personal-site .project-card.vanishtrans .project-card-copy h3,.personal-site .project-card.vanishtrans .project-card-copy .h3{font-size:43px}.personal-site .project-card-copy .project-kind{letter-spacing:.06em}.personal-site .project-card.esp32-lab .circuit-labels{display:none}.personal-site .project-card.ai-chat .terminal-comment{white-space:nowrap}.personal-site .home-section{margin-top:88px}.personal-site .section-heading{padding-top:26px;margin-bottom:28px}.personal-site .section-heading h2,.personal-site .section-heading .h2{font-weight:600}.personal-site .post-row{transition:background var(--duration-ui),padding var(--duration-ui)}.personal-site .post-row:focus-within{background:var(--surface)}.personal-site .home-about{gap:40px;align-items:center;padding-top:50px}.personal-site .home-about h2,.personal-site .home-about .h2{font-weight:600}.personal-site .desk-scene{position:relative;min-width:0;width:100%;color:var(--scene-stroke)}.personal-site .desk-scene>svg{width:100%;height:auto;display:block;overflow:visible;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}.personal-site .desk-haze{fill:var(--scene-fill);opacity:.36;filter:blur(30px)}.personal-site .scene-window{stroke:var(--scene-stroke);stroke-width:1;opacity:.5}.personal-site .scene-window>path:first-child{fill:color-mix(in srgb, var(--scene-blue) 12%, transparent)}.personal-site .scene-cloud{opacity:.45}.personal-site .scene-sun{fill:#d9c8a0;stroke:none;opacity:.75}.personal-site .scene-hill{fill:var(--scene-fill);stroke:none;opacity:.8}.personal-site .scene-lamp{stroke:var(--scene-stroke)}.personal-site .scene-lamp>path:nth-child(2),.personal-site .scene-lamp>path:nth-child(3){fill:var(--scene-fill)}.personal-site .lamp-light{stroke:none;fill:#dbcfa3;opacity:.1}.personal-site .scene-computer{stroke:var(--scene-stroke)}.personal-site .computer-back{fill:var(--scene-fill)}.personal-site .computer-screen{fill:var(--paper)}.personal-site .scene-code{stroke:var(--accent);opacity:.8}.personal-site .screen-accent{fill:var(--scene-blue);stroke:none;opacity:.65}.personal-site .scene-plant{stroke:var(--scene-stroke)}.personal-site .plant-leaf{fill:#8fa69a;stroke-width:1}.personal-site .plant-pot{fill:var(--scene-fill)}.personal-site .scene-book{stroke:var(--scene-stroke);stroke-width:1}.personal-site .book-fill{fill:var(--scene-fill)}.personal-site .book-mark{fill:#a9bbc8;stroke:none}.personal-site .scene-cup{stroke:var(--scene-stroke);stroke-width:1.2}.personal-site .cup-fill{fill:var(--paper)}.personal-site .cup-steam{opacity:.4}.personal-site .scene-lines{stroke:var(--scene-stroke);stroke-width:1;opacity:.3}.personal-site .scene-scribble{opacity:.6}.personal-site .scene-caption{display:block;text-align:center;font-family:var(--heading-font);font-size:15px;color:var(--muted);margin-top:-10px}.personal-site .scene-caption small,.personal-site .scene-caption .small{display:block;font:8px/1.5 var(--body-font);letter-spacing:.08em;margin-top:9px;opacity:.75}.personal-site .about-hero{align-items:center}.personal-site .about-hero .desk-scene{margin-block:-20px}.personal-site .project-detail .project-cover{padding:55px 60px 60px}.personal-site .project-detail>.process-strip{border-bottom:1px solid var(--line);padding-block:22px}.personal-site .project-cover.vanishtrans{background:linear-gradient(145deg, #e4e9f0, #d1ddec 65%, #b6c9dd)}.personal-site .project-cover.esp32-lab{background:linear-gradient(120deg, #e8ece4, #d5e3db)}.personal-site .project-cover.ai-chat{background:#cbdcd7}.personal-site .project-heading h1,.personal-site .project-heading .h1{font-weight:600}.personal-site .project-facts{margin-top:0;padding-top:28px}.personal-site .page-heading h1,.personal-site .page-heading .h1,.personal-site .article-heading h1,.personal-site .article-heading .h1{font-weight:600;text-wrap:pretty}.personal-site .prose h2,.personal-site .prose .h2{font-weight:600}.personal-site .prose a{text-underline-offset:.22em;transition:color var(--duration-fast)}.personal-site .filter-bar button{transition:color var(--duration-fast),border-color var(--duration-fast)}.personal-site .filter-bar button:active{opacity:.65}.personal-site .site-footer{position:relative;isolation:isolate;margin-top:110px;border:0;padding:58px 0 25px;background:color-mix(in srgb, var(--scene-fill) 38%, var(--paper))}.personal-site .footer-landscape{position:absolute;z-index:-1;left:0;right:0;top:-76px;height:90px;overflow:hidden;pointer-events:none}.personal-site .footer-landscape svg{display:block;width:100%;height:100%}.personal-site .footer-landscape path:first-child{fill:color-mix(in srgb, var(--scene-fill) 38%, var(--paper))}.personal-site .footer-landscape path:last-child{fill:none;stroke:var(--line);stroke-width:.7;opacity:.55}.personal-site .footer-top{position:relative;padding-right:110px;padding-bottom:26px;align-items:flex-end}.personal-site .footer-top p{border:0;padding:0}.personal-site .footer-top .eyebrow{margin-bottom:13px;font-size:9px;letter-spacing:.18em}.personal-site .footer-top .footer-signoff{font:600 29px/1.5 var(--heading-font);letter-spacing:-0.035em;color:var(--ink)}.personal-site .footer-top>.text-link{font-size:12px;margin-bottom:2px;gap:22px}.personal-site .footer-sprout{position:absolute;width:80px;right:0;bottom:25px;opacity:.55}.personal-site .footer-sprout svg{width:100%;stroke:var(--scene-stroke);stroke-width:1}.personal-site .footer-bottom{border-top:1px solid var(--line);padding-top:18px;margin-top:0}.personal-site .footer-name{font:700 17px/1 Georgia,serif;letter-spacing:-0.5px;margin-right:12px;color:var(--ink)}@media(hover: hover)and (pointer: fine){.personal-site .post-row:hover{padding-inline:14px;background:color-mix(in srgb, var(--surface) 65%, transparent)}.personal-site .project-card:hover .translation-text.translated{border-color:rgba(164,194,223,.3960784314)}.personal-site .project-card:hover .chip-led{box-shadow:0 0 15px #8fcac0}}@media(max-width: 1100px){.personal-site .footer-top .footer-signoff{font-size:26px}}@media(max-width: 767px){.personal-site .home-intro{padding-top:44px}.personal-site .hero-copy h1,.personal-site .hero-copy .h1{font-size:clamp(38px,10vw,54px)}.personal-site .hero-description{margin-block:20px 24px}.personal-site .showcase{margin-top:42px}.personal-site .showcase-heading h2,.personal-site .showcase-heading .h2{font-size:22px}.personal-site .project-tabs{gap:0;margin-bottom:16px}.personal-site .project-tabs button{padding:10px 7px;font-size:10px}.personal-site .showcase-stage{height:330px}.personal-site .showcase-visual{height:236px;padding:8px 0}.personal-site .showcase-visual>.app-preview{height:220px}.personal-site .showcase-visual>.terminal-preview{height:220px}.personal-site .visual-guide{display:none}.personal-site .process-strip{padding-block:10px;gap:12px;font-size:9px}.personal-site .process-strip>span{gap:5px}.personal-site .process-strip i{font-size:7px}.personal-site .process-strip b{font-size:11px}.personal-site .showcase-caption{margin-inline:0;padding-top:3px}.personal-site .showcase-footnote{padding-inline:0;gap:5px;align-items:center}.personal-site .showcase-disclaimer{font-size:9px;margin-top:0;text-align:left}.personal-site .replay-assembly{font-size:8px;gap:3px}.personal-site .replay-assembly span{font-size:16px}.personal-site .home-section{margin-top:56px}.personal-site .project-card.vanishtrans .project-card-copy h3,.personal-site .project-card.vanishtrans .project-card-copy .h3{font-size:35px}.personal-site .section-heading{padding-top:21px;margin-bottom:22px}.personal-site .home-about{padding-top:30px;gap:10px}.personal-site .desk-scene{margin-inline:-12px;width:calc(100% + 24px)}.personal-site .desk-haze{filter:none;opacity:.13}.personal-site .scene-caption{font-size:13px;margin-top:-7px}.personal-site .scene-caption small,.personal-site .scene-caption .small{font-size:9px}.personal-site .about-hero .desk-scene{margin-block:-5px 0}.personal-site .project-detail .project-cover{padding:22px 12px 35px}.personal-site .project-detail>.process-strip{padding-block:18px}.personal-site .project-facts{padding-top:23px}.personal-site .site-footer{margin-top:88px;padding-top:32px}.personal-site .footer-top{padding:0 64px 24px 0;display:block}.personal-site .footer-top .eyebrow{margin-bottom:9px;font-size:8px}.personal-site .footer-top .footer-signoff{font-size:23px}.personal-site .footer-top>.text-link{margin-top:11px;font-size:10px}.personal-site .footer-sprout{width:58px;bottom:33px}.personal-site .footer-bottom{padding-top:12px;gap:12px}.personal-site .footer-name{font-size:16px;margin-right:8px}.personal-site .footer-bottom small,.personal-site .footer-bottom .small{font-size:10px}.personal-site .footer-bottom nav{font-size:12px}.personal-site .visual-caption{font-size:9px}}@media(max-width: 374px){.personal-site .process-strip{gap:8px;font-size:8px}.personal-site .showcase-disclaimer{max-width:190px}.personal-site .footer-top .footer-signoff{font-size:21px}}@media(prefers-reduced-motion: reduce){@view-transition{navigation:none}::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none !important}}::view-transition-group(project-art),::view-transition-group(project-title){animation-duration:420ms;animation-timing-function:var(--ease-studio)}::view-transition-group(project-surface){z-index:1}::view-transition-group(project-title){z-index:3}::view-transition-group(site-navigation){z-index:5}::view-transition-group-children(project-surface){overflow:clip;border-radius:inherit}::view-transition-old(project-art),::view-transition-new(project-art){width:100%;height:100%;-o-object-fit:contain;object-fit:contain;-o-object-position:center;object-position:center;mix-blend-mode:normal;animation-duration:220ms}::view-transition-old(project-title),::view-transition-new(project-title){height:100%;-o-object-fit:contain;object-fit:contain;-o-object-position:left center;object-position:left center;mix-blend-mode:normal;animation-duration:180ms}.personal-site .selection-copy{display:inline-block;position:relative;isolation:isolate}.personal-site .selection-copy>span{position:relative}.personal-site .selection-mark{display:block;position:absolute;inset:-1px -3px;border-radius:2px;background:rgba(125,173,219,.2588235294);transform-origin:left center;z-index:-1}.personal-site .selection-shortcut{position:absolute;bottom:16px;left:17px;color:#94adc3;font:8px/1.5 ui-monospace,monospace;letter-spacing:.08em}.personal-site .flow-float{border-color:rgba(140,175,209,.3019607843);box-shadow:0 7px 16px rgba(16,28,38,.2);align-self:center;min-height:80%;border-radius:8px;transform-origin:left center}.personal-site .flow-float::before{content:"";position:absolute;top:45%;left:-5px;width:8px;height:8px;background:#293541;border-left:1px solid rgba(140,175,209,.3019607843);border-bottom:1px solid rgba(140,175,209,.3019607843);rotate:45deg}.personal-site .float-dot{display:inline-block;width:4px;height:4px;background:#9ab8d5;border-radius:50%;vertical-align:1px;margin-right:3px}.personal-site .signal-packets{stroke:#9ec4cd;fill:none;stroke-width:2.5;stroke-linecap:round}.personal-site .signal-packets path{opacity:0}.personal-site .device-display{stroke:#6c908b;stroke-width:1;fill:none}.personal-site .device-display text{fill:#a5c8ca;stroke:none;font:6px ui-monospace,monospace;letter-spacing:.6px}.personal-site .display-frame{fill:#263b3b}.personal-site .display-light{fill:#578385;opacity:.75;stroke:none}.personal-site .display-wave{stroke:#d6eae0;stroke-width:1.7}.personal-site .display-base{opacity:.65}.personal-site .terminal-body{padding-block:22px}.personal-site .terminal-input{display:inline-block;vertical-align:bottom}.personal-site .terminal-body .terminal-rule{margin-block:15px}.personal-site .request-dots{display:inline-flex;gap:4px;margin-left:10px;vertical-align:middle}.personal-site .request-dots i{width:3px;height:3px;border-radius:50%;background:#a7d4e4;opacity:.25}.personal-site .terminal-output{display:grid;grid-template-columns:75px minmax(0, 1fr);gap:10px;align-items:start;padding-top:3px;font-size:12px}.personal-site .terminal-output>span{font-size:10px;padding-top:2px}.personal-site .terminal-output p{color:#c7d8ce;font:16px/1.7 var(--heading-font);margin:0}.personal-site .terminal-output p br{display:none}.personal-site .terminal-body small,.personal-site .terminal-body .small{margin-top:15px;font-size:9px}.personal-site .project-card.ai-chat .terminal-body{padding:19px;font-size:10px}.personal-site .project-card.ai-chat .terminal-body .terminal-rule{margin-block:12px}.personal-site .project-card.ai-chat .terminal-body small,.personal-site .project-card.ai-chat .terminal-body .small{font-size:7px;margin-top:14px}.personal-site .project-card.ai-chat .terminal-output{grid-template-columns:1fr;gap:4px}.personal-site .project-card.ai-chat .terminal-output>span{font-size:8px}.personal-site .project-card.ai-chat .terminal-output p{font-size:12px}.personal-site .project-card.esp32-lab .device-display{opacity:.85}.personal-site .wave-texture-main{translate:var(--wave-x, 0px) var(--wave-y, 0px)}.personal-site .wave-texture-light{translate:calc(var(--wave-x, 0px)*-0.45) calc(var(--wave-y, 0px)*-0.6)}.personal-site .wave-scene{translate:calc(var(--wave-x, 0px)*.3) calc(var(--wave-y, 0px)*.3)}.personal-site .home-intro[data-motion] .wave-texture-main{animation-duration:24s;animation-delay:-5s}.personal-site .home-intro[data-motion] .wave-texture-light{animation-duration:31s;animation-delay:-13s}.personal-site .desktop-nav[data-enhanced=true] a::after{display:none}.personal-site .desktop-nav[data-enhanced=true]::after{content:"";position:absolute;left:0;bottom:16px;width:var(--nav-width, 0px);height:2px;background:var(--accent);opacity:var(--nav-opacity, 0);transform:translateX(var(--nav-left, 0px));transition:width 280ms var(--ease-studio),transform 280ms var(--ease-studio),opacity 120ms;pointer-events:none}.personal-site .project-tabs[data-enhanced=true]::before{content:"";position:absolute;left:0;bottom:4px;width:var(--tab-width, 0px);height:calc(100% - 8px);transform:translateX(var(--tab-left, 0px));background:color-mix(in srgb, var(--accent) 7%, transparent);border-radius:2px;z-index:-1;transition:transform 280ms var(--ease-studio),width 280ms var(--ease-studio)}.personal-site .button:active{scale:.975;transition-duration:80ms}.personal-site .text-link:active{opacity:.7}.personal-site .project-card:active .round-arrow{transform:translate(1px, -1px) scale(0.94)}.personal-site .mobile-toc summary{min-height:48px}.personal-site .mobile-toc>nav{box-sizing:border-box}.personal-site .article-heading h1,.personal-site .article-heading .h1{text-wrap:pretty;line-height:1.5;word-break:normal;overflow-wrap:anywhere}.personal-site .reading-article{min-width:0}.personal-site .prose{max-width:72ch;line-height:1.95}.personal-site .prose h2[id],.personal-site .prose [id].h2,.personal-site .prose h3[id],.personal-site .prose [id].h3,.personal-site .prose h4[id],.personal-site .prose [id].h4{scroll-margin-top:105px}.personal-site .copy-status{position:absolute;top:11px;right:53px;max-width:min(250px,100% - 65px);font:11px/1.5 var(--body-font);padding:4px 7px;border-radius:3px;background:var(--gh-code-bg);color:var(--gh-code-fg);white-space:normal;pointer-events:none}.personal-site .copy-status:empty{display:none}.personal-site .gh-copy-btn{min-width:36px;min-height:36px}.personal-site .header-tools{min-width:144px}.personal-site .showcase-stage{contain:layout}.personal-site .scene-board{stroke:var(--scene-stroke);stroke-width:1}.personal-site .scene-board .scene-board-fill{fill:var(--scene-fill)}.personal-site .scene-board .scene-board-core{fill:var(--scene-blue)}.personal-site .project-heading .project-progress{font:12px/1.9 var(--body-font);color:var(--muted);margin-top:-6px}@media(prefers-reduced-motion: no-preference){.personal-site .hero-copy .hero-enter{animation-duration:600ms}.personal-site .showcase-heading{animation:hero-in 560ms var(--ease-studio) 180ms backwards}.personal-site .project-tabs{animation:hero-in 560ms var(--ease-studio) 240ms backwards}}@media(max-width: 767px){.personal-site .translation-text .selection-shortcut{bottom:6px;left:auto;right:9px;font-size:5px}.personal-site .translation-text small,.personal-site .translation-text .small{margin-bottom:5px}.personal-site .flow-float{min-height:100%;align-self:stretch;border-radius:5px}.personal-site .flow-float::before{top:-4px;left:22px;width:6px;height:6px;rotate:135deg}.personal-site .float-dot{width:3px;height:3px;vertical-align:0}.personal-site .terminal-output{grid-template-columns:1fr;gap:4px}.personal-site .terminal-output>span{font-size:8px}.personal-site .terminal-output p{font-size:12px}.personal-site .showcase-visual .terminal-preview .terminal-body{padding:15px 19px}.personal-site .showcase-visual .terminal-preview .terminal-body p{margin-bottom:7px}.personal-site .showcase-visual .terminal-preview .terminal-body small,.personal-site .showcase-visual .terminal-preview .terminal-body .small{font-size:7px;margin-top:10px}.personal-site .showcase-visual .terminal-preview .terminal-body .terminal-rule{margin-block:9px}.personal-site .project-cover .terminal-preview .terminal-body{padding:16px 18px}.personal-site .project-cover .terminal-preview .terminal-body small,.personal-site .project-cover .terminal-preview .terminal-body .small{font-size:8px;margin-top:12px}.personal-site .project-card.ai-chat .terminal-body{padding:15px}.personal-site .project-card.ai-chat .terminal-body .terminal-output p{font-size:11px}.personal-site .article-heading h1,.personal-site .article-heading .h1{line-height:1.55}.personal-site .prose h2[id],.personal-site .prose [id].h2,.personal-site .prose h3[id],.personal-site .prose [id].h3,.personal-site .prose h4[id],.personal-site .prose [id].h4{scroll-margin-top:88px}.personal-site .header-tools{min-width:132px}.personal-site .gh-copy-btn{min-width:40px;min-height:40px}}@media(prefers-reduced-motion: reduce){.personal-site .wave-texture,.personal-site .wave-scene{translate:0 0}}.personal-site .hero-wave-scroll{position:absolute;inset:0;z-index:-1;pointer-events:none;opacity:var(--scroll-wave-alpha, 1)}.personal-site .hero-scroll-heading,.personal-site .hero-scroll-support{display:flow-root}.personal-site .hero-scroll-heading,.personal-site .hero-scroll-support,.personal-site .showcase,.personal-site [data-hero-entry]{opacity:var(--scroll-alpha, 1);translate:0 var(--scroll-shift, 0px)}.personal-site [data-scroll-inactive]{pointer-events:none}.personal-site .hero-copy .hero-description{animation-delay:130ms}.personal-site .hero-copy .hero-actions{animation-delay:195ms}@media(prefers-reduced-motion: reduce){.personal-site :is(.hero-scroll-heading,.hero-scroll-support,.showcase,.hero-wave-scroll,[data-hero-entry]){opacity:1 !important;translate:0 0 !important}}.personal-site.is-home [data-home-reveal]{--reveal-distance: 30px}.personal-site.is-home [data-home-reveal=heading]{--reveal-distance: 20px}html[data-home-reveal=boot] .personal-site.is-home [data-home-reveal],.personal-site.is-home [data-home-reveal][data-reveal=pending]{opacity:0;translate:0 var(--reveal-distance)}.personal-site.is-home [data-home-reveal]:focus-within{opacity:1 !important;translate:0 0 !important}@media(prefers-reduced-motion: reduce){.personal-site.is-home [data-home-reveal]{opacity:1 !important;translate:0 0 !important}}:root[data-bs-theme=dark]{--bs-body-bg: var(--paper);--bs-body-color: var(--ink);--bs-heading-color: var(--ink);--bs-emphasis-color: var(--ink);--bs-secondary-color: var(--muted);--bs-border-color: var(--line);--bs-tertiary-bg: var(--surface);--bs-link-color: var(--accent);--scene-stroke: #a2b2ba;--scene-fill: #252b30;--scene-blue: #57778e;--footer-surface: #1a1d21;--wave-silver: #648eaf;--wave-haze: #1f2d3a;--wave-back: #29465d;--wave-blue: #3f769f;--wave-deep: #223c53;--wave-thread: #82b5df}:root[data-bs-theme=dark] body.personal-site{background:var(--paper);color:var(--ink)}:root[data-bs-theme=dark] .personal-site .desktop-nav a{color:#bdc5cc}:root[data-bs-theme=dark] .personal-site .desktop-nav a:hover,:root[data-bs-theme=dark] .personal-site .desktop-nav a[aria-current]{color:var(--accent)}:root[data-bs-theme=dark] .personal-site .header-tools .icon-button{color:#d0d7dc}:root[data-bs-theme=dark] .personal-site .header-tools .icon-button:hover{color:var(--accent)}:root[data-bs-theme=dark] .personal-site .hero-description{color:#bdc5cd}:root[data-bs-theme=dark] .personal-site .button-outline{border-color:#778b9c;background:color-mix(in srgb, var(--paper) 86%, transparent)}:root[data-bs-theme=dark] .personal-site .mobile-nav nav,:root[data-bs-theme=dark] .personal-site .search-dialog{background:#1d2228;border-color:#4c5965}:root[data-bs-theme=dark] .personal-site .search-results a[data-selected]{background:#293844;outline:1px solid #6988a0}:root[data-bs-theme=dark] .personal-site .mobile-toc{background:#1c2026}:root[data-bs-theme=dark] .personal-site .wave-texture-main{filter:brightness(0.58) contrast(1.5) saturate(1.15);opacity:.24;-webkit-mask-image:linear-gradient(180deg, transparent 10%, #000 35%, #000 72%, transparent 96%);mask-image:linear-gradient(180deg, transparent 10%, #000 35%, #000 72%, transparent 96%)}:root[data-bs-theme=dark] .personal-site .wave-texture-light{filter:brightness(0.52) contrast(1.4) saturate(1.3);opacity:.06}:root[data-bs-theme=dark] .personal-site .wave-scene{opacity:.4}:root[data-bs-theme=dark] .personal-site .hero-wave::before{background:radial-gradient(ellipse at 5% 62%, rgba(60, 120, 163, 0.0823529412), transparent 30%),radial-gradient(ellipse at 96% 60%, rgba(73, 134, 176, 0.0823529412), transparent 29%)}:root[data-bs-theme=dark] .personal-site .project-card,:root[data-bs-theme=dark] .personal-site .project-cover{color:var(--ink);box-shadow:inset 0 0 0 1px var(--card-edge, #46525d)}:root[data-bs-theme=dark] .personal-site .project-card.vanishtrans,:root[data-bs-theme=dark] .personal-site .project-cover.vanishtrans{--card-muted: #bdcddd;--card-edge: #465f73;background:linear-gradient(145deg, #1e2d3d, #263d51 65%, #223443)}:root[data-bs-theme=dark] .personal-site .project-card.esp32-lab,:root[data-bs-theme=dark] .personal-site .project-cover.esp32-lab{--card-muted: #c2d3c9;--card-edge: #4f6d60;background:linear-gradient(120deg, #1c2d29, #2b4039)}:root[data-bs-theme=dark] .personal-site .project-card.ai-chat,:root[data-bs-theme=dark] .personal-site .project-cover.ai-chat{--card-muted: #bdcdd2;--card-edge: #4c626c;background:linear-gradient(125deg, #202b30, #26353b)}:root[data-bs-theme=dark] .personal-site .project-card.vanishtrans::before{opacity:.11;filter:brightness(0.55) saturate(1.1)}:root[data-bs-theme=dark] .personal-site .project-card .project-kind,:root[data-bs-theme=dark] .personal-site .project-card-copy p,:root[data-bs-theme=dark] .personal-site .project-card .visual-caption,:root[data-bs-theme=dark] .personal-site .project-cover figcaption{color:var(--card-muted, var(--muted))}:root[data-bs-theme=dark] .personal-site .project-card .visual-caption{background:color-mix(in srgb, var(--paper) 88%, transparent);padding:2px 5px;border-radius:2px}:root[data-bs-theme=dark] .personal-site .project-card .round-arrow{color:#d9e5eb}:root[data-bs-theme=dark] .personal-site .app-preview{background:#20282f;border-color:#64798a;color:#e8eff3;box-shadow:0 20px 52px rgba(0,0,0,.3333333333),0 0 0 1px rgba(167,201,232,.1019607843)}:root[data-bs-theme=dark] .personal-site .showcase-visual>.app-preview,:root[data-bs-theme=dark] .personal-site .showcase-visual>.terminal-preview{box-shadow:0 24px 58px rgba(0,0,0,.4),0 0 0 1px rgba(167,201,232,.1019607843)}:root[data-bs-theme=dark] .personal-site .window-bar{background:#26313a;color:#bac6d0;border-color:#53616c}:root[data-bs-theme=dark] .personal-site .app-rail{color:#b4c1cc}:root[data-bs-theme=dark] .personal-site .app-rail .rail-active{background:#334b60;color:#d7e7f4}:root[data-bs-theme=dark] .personal-site .translation-text{background:#2b3843;border-color:#536b7c}:root[data-bs-theme=dark] .personal-site .translation-text small,:root[data-bs-theme=dark] .personal-site .translation-text .small{color:#b6c4d0}:root[data-bs-theme=dark] .personal-site .selection-shortcut{color:#bfd0de}:root[data-bs-theme=dark] .personal-site .translation-text.translated{background:#a8c2d4;color:#183246;border-color:#7797af}:root[data-bs-theme=dark] .personal-site .translation-text.translated small,:root[data-bs-theme=dark] .personal-site .translation-text.translated .small{color:#254456}:root[data-bs-theme=dark] .personal-site .translation-text.translated .preview-symbol{color:#284c65}:root[data-bs-theme=dark] .personal-site .translation-text.translated .float-dot{background:#3c647e}:root[data-bs-theme=dark] .personal-site .flow-float::before{background:#a8c2d4;border-color:#7797af}:root[data-bs-theme=dark] .personal-site .hardware-note{color:#c2d3c9}:root[data-bs-theme=dark] .personal-site .chip-board{border-color:#50635d}:root[data-bs-theme=dark] .personal-site .chip-core{background:linear-gradient(135deg, #d7ddd5, #b2beb8);color:#26312e}:root[data-bs-theme=dark] .personal-site .circuit-labels{fill:#b0c6bb}:root[data-bs-theme=dark] .personal-site .circuit-traces{stroke:#7e9b8d}:root[data-bs-theme=dark] .personal-site .device-display text{fill:#e4f0eb}:root[data-bs-theme=dark] .personal-site .display-light{fill:#3f605e;opacity:1}:root[data-bs-theme=dark] .personal-site .display-wave{stroke:#c0e1d2}:root[data-bs-theme=dark] .personal-site .terminal-preview{background:#1d292e;color:#e2eceb;border-color:#63777c}:root[data-bs-theme=dark] .personal-site .terminal-dim,:root[data-bs-theme=dark] .personal-site .terminal-comment,:root[data-bs-theme=dark] .personal-site .terminal-body small,:root[data-bs-theme=dark] .personal-site .terminal-body .small{color:#b0c4c4}:root[data-bs-theme=dark] .personal-site .terminal-blue{color:#b4d8e7}:root[data-bs-theme=dark] .personal-site .terminal-output p{color:#d1e4dc}:root[data-bs-theme=dark] .personal-site .scene-computer,:root[data-bs-theme=dark] .personal-site .scene-lamp,:root[data-bs-theme=dark] .personal-site .scene-plant{stroke:#b4c4cb}:root[data-bs-theme=dark] .personal-site .desk-haze{opacity:.22}:root[data-bs-theme=dark] .personal-site .plant-leaf{fill:#819b8c}:root[data-bs-theme=dark] .personal-site .scene-sun{fill:#c8b38a}:root[data-bs-theme=dark] .personal-site .site-footer{background:var(--footer-surface)}:root[data-bs-theme=dark] .personal-site .footer-landscape path:first-child{fill:var(--footer-surface)}@media(hover: hover)and (pointer: fine){:root[data-bs-theme=dark] .personal-site .project-card:hover{box-shadow:inset 0 0 0 1px var(--card-edge),0 19px 40px rgba(0,0,0,.2)}}@media(max-width: 767px){:root[data-bs-theme=dark] .personal-site .wave-scene{opacity:.26}:root[data-bs-theme=dark] .personal-site .wave-texture-main{opacity:.21}:root[data-bs-theme=dark] .personal-site .desk-haze{opacity:.12}}:root{--radius-panel: 6px;--radius-control: 999px;--space-section: clamp(72px, 8vw, 120px)}.personal-site .home-intro{padding-top:clamp(56px,7vw,96px);padding-bottom:32px}.personal-site .hero-copy h1,.personal-site .hero-copy .h1{font-size:clamp(40px,5.3vw,72px);font-weight:500;letter-spacing:-0.025em}.personal-site .hero-description{margin-block:28px 32px;color:#504f49}.personal-site .hero-actions .button{border-radius:var(--radius-control);padding-inline:28px}.personal-site .button-dark{position:relative;isolation:isolate;overflow:hidden}.personal-site .button-dark::before{content:"";position:absolute;inset:-60%;z-index:-1;border-radius:50%;background:var(--accent);transform:translateY(100%);transition:transform 360ms var(--ease-studio)}.personal-site .button-dark:hover{background:var(--ink)}.personal-site .button-dark:focus-visible::before{transform:translateY(0)}.personal-site .button-outline{border-color:#979696}.personal-site .icon-button{border-radius:50%}.personal-site .showcase{margin-top:clamp(56px,6vw,80px)}.personal-site .showcase-visual{perspective:1400px}.personal-site .showcase-visual>:is(.app-preview,.terminal-preview){transform:rotateX(var(--preview-tilt, 0deg));transform-origin:center bottom}.personal-site .project-tabs button{font-size:13px}.personal-site .project-tabs[data-enhanced=true]::before{border-radius:var(--radius-control)}.personal-site .home-section{margin-top:var(--space-section)}.personal-site .section-heading{padding-top:32px;margin-bottom:36px}.personal-site .section-heading h2,.personal-site .section-heading .h2{font-size:clamp(28px,3.1vw,38px);letter-spacing:-0.025em}.personal-site .project-grid{grid-template-rows:auto;grid-auto-rows:auto;gap:24px}.personal-site .project-card{height:420px;border:1px solid rgba(0,0,0,0);border-radius:var(--radius-panel);color:var(--ink);transition:transform 320ms var(--ease-studio),border-color 320ms,box-shadow 320ms}.personal-site .project-grid:not([data-filtered=true])>.project-card.vanishtrans{grid-column:1/-1;grid-row:auto;height:440px}.personal-site .project-card.vanishtrans,.personal-site .project-cover.vanishtrans{background:linear-gradient(125deg, #efebe3, #e7eaf0)}.personal-site .project-card.vanishtrans::before{opacity:.22}.personal-site .project-card.esp32-lab,.personal-site .project-cover.esp32-lab{background:linear-gradient(135deg, #f0eee7, #e5ece5)}.personal-site .project-card.ai-chat,.personal-site .project-cover.ai-chat{background:linear-gradient(135deg, #f4eee8, #eae8e3);color:var(--ink)}.personal-site .project-card-copy,.personal-site .project-card.vanishtrans .project-card-copy{width:100%;padding:32px}.personal-site .project-card-copy h3,.personal-site .project-card-copy .h3{font-size:30px;white-space:normal;padding-right:42px}.personal-site .project-card-copy p{max-width:31ch;font-size:14px}.personal-site .project-card-copy .project-kind,.personal-site .project-card.ai-chat .project-kind,.personal-site .project-card.ai-chat .project-card-copy p{color:#5f645f}.personal-site .project-card.vanishtrans .project-card-copy{width:40%;padding:44px}.personal-site .project-card.vanishtrans .project-card-copy h3,.personal-site .project-card.vanishtrans .project-card-copy .h3{font-size:clamp(32px,3vw,43px);padding-right:0}.personal-site .project-card.vanishtrans .project-card-visual{left:43%;top:80px;width:660px;height:330px;transform:perspective(1200px) rotateY(-5deg) rotateZ(-2deg)}.personal-site .project-card.esp32-lab .project-card-visual{top:160px;right:-18px;width:310px;height:270px}.personal-site .project-card.ai-chat .project-card-visual{left:30%;top:210px;width:390px;transform:perspective(1200px) rotateY(-4deg)}.personal-site .project-card .round-arrow{position:absolute;right:30px;top:30px;margin:0}.personal-site .project-card.vanishtrans .round-arrow{position:static;margin-top:12px}.personal-site .project-card .visual-caption,.personal-site .project-card.ai-chat .visual-caption{color:#5f645f;background:color-mix(in srgb, var(--paper) 94%, transparent);padding:2px 6px;border-radius:3px;font-size:11px;line-height:1.5}.personal-site .project-grid[data-filtered=true]{grid-auto-rows:auto}.personal-site .project-grid[data-filtered=true] .project-card.vanishtrans{height:420px}.personal-site .project-grid[data-filtered=true] .project-card.vanishtrans .project-card-copy{width:100%;padding:32px}.personal-site .project-grid[data-filtered=true] .project-card.vanishtrans .project-card-visual{top:225px;left:20%;width:520px}.personal-site .project-grid[data-filtered=true] .project-card.vanishtrans .round-arrow{position:absolute;right:30px;top:30px;margin:0}.personal-site .page-space{padding-top:clamp(48px,6vw,88px)}.personal-site .page-heading{margin-bottom:48px}.personal-site .page-heading h1,.personal-site .page-heading .h1,.personal-site .project-heading h1,.personal-site .project-heading .h1,.personal-site .article-heading h1,.personal-site .article-heading .h1{letter-spacing:-0.025em}.personal-site .project-cover{border-radius:var(--radius-panel)}.personal-site .project-heading{max-width:820px}.personal-site .post-row{padding-block:27px}.personal-site .post-row h3,.personal-site .post-row .h3{line-height:1.55}.personal-site .post-row p,.personal-site .blog-list .post-row p{font-size:14px;line-height:1.85}.personal-site .blog-list .post-row{padding-block:34px}.personal-site .article-heading{margin-bottom:36px}.personal-site .article-meta{font-size:12px;line-height:1.8}.personal-site .prose{font-size:17px;line-height:1.95;letter-spacing:0}.personal-site .prose h2,.personal-site .prose .h2,.personal-site .prose h3,.personal-site .prose .h3,.personal-site .prose h4,.personal-site .prose .h4{letter-spacing:-0.015em}.personal-site .prose p{margin-bottom:1.5em}.personal-site .prose img,.personal-site .search-dialog{border-radius:var(--radius-panel)}.personal-site .desktop-toc{font-size:12px}.personal-site .site-footer{margin-top:var(--space-section)}@media(hover: hover)and (pointer: fine){.personal-site .button-dark:hover::before{transform:translateY(0)}.personal-site .project-card:hover{transform:translateY(-3px);border-color:#c8ccc8;box-shadow:0 14px 32px rgba(38,37,30,.0470588235)}}@media(max-width: 1100px)and (min-width: 768px){.personal-site .project-card.vanishtrans .project-card-copy{padding:32px;width:43%}.personal-site .project-card.vanishtrans .project-card-visual{left:46%}}@media(max-width: 767px),(pointer: coarse){.personal-site .showcase-visual>:is(.app-preview,.terminal-preview){transform:none}.personal-site .project-card.vanishtrans .project-card-visual,.personal-site .project-card.ai-chat .project-card-visual{transform:none}}@media(max-width: 767px){.personal-site .home-intro{padding-top:48px;padding-bottom:12px}.personal-site .hero-copy h1,.personal-site .hero-copy .h1{font-size:clamp(38px,10vw,54px)}.personal-site .hero-description{font-size:15px;margin-block:24px 28px}.personal-site .hero-actions .button{padding-inline:21px}.personal-site .showcase{margin-top:48px}.personal-site .project-tabs button{font-size:11px}.personal-site .home-section{margin-top:64px}.personal-site .section-heading{padding-top:24px;margin-bottom:24px;gap:12px}.personal-site .section-heading h2,.personal-site .section-heading .h2{font-size:clamp(24px,6.7vw,30px)}.personal-site .project-grid{gap:18px}.personal-site .project-card,.personal-site .project-grid[data-filtered=true] .project-card.vanishtrans{height:390px}.personal-site .project-grid:not([data-filtered=true])>.project-card.vanishtrans{grid-column:auto;height:420px}.personal-site .project-card-copy,.personal-site .project-card.vanishtrans .project-card-copy,.personal-site .project-grid[data-filtered=true] .project-card.vanishtrans .project-card-copy{width:100%;padding:26px}.personal-site .project-card-copy h3,.personal-site .project-card-copy .h3{font-size:28px}.personal-site .project-card-copy p{font-size:13px;max-width:28ch}.personal-site .project-card.vanishtrans .project-card-copy h3,.personal-site .project-card.vanishtrans .project-card-copy .h3{font-size:30px;padding-right:38px}.personal-site .project-card .project-card-copy .round-arrow{position:absolute;right:23px;top:23px;margin:0}.personal-site .project-card.vanishtrans .project-card-visual,.personal-site .project-grid[data-filtered=true] .project-card.vanishtrans .project-card-visual{top:220px;left:40px;width:420px;height:220px}.personal-site .project-card.esp32-lab .project-card-visual{top:145px;right:-30px;height:260px}.personal-site .project-card.ai-chat .project-card-visual{left:70px;top:205px;width:340px}.personal-site .page-space{padding-top:42px}.personal-site .page-heading{margin-bottom:32px}.personal-site .post-row p,.personal-site .blog-list .post-row p{font-size:13px}.personal-site .article-heading{margin-bottom:28px}.personal-site .article-meta{font-size:11px}.personal-site .prose{font-size:16px;line-height:1.95}.personal-site .blog-list .post-row{padding-block:27px}}@media(prefers-reduced-motion: reduce){.personal-site .showcase-visual>:is(.app-preview,.terminal-preview),.personal-site .project-card.vanishtrans .project-card-visual,.personal-site .project-card.ai-chat .project-card-visual{transform:none}}