html{--mat-sys-background: light-dark(#faf9fd, #121316);--mat-sys-error: light-dark(#ba1a1a, #ffb4ab);--mat-sys-error-container: light-dark(#ffdad6, #93000a);--mat-sys-inverse-on-surface: light-dark(#f2f0f4, #2f3033);--mat-sys-inverse-primary: light-dark(#abc7ff, #005cbb);--mat-sys-inverse-surface: light-dark(#2f3033, #e3e2e6);--mat-sys-on-background: light-dark(#1a1b1f, #e3e2e6);--mat-sys-on-error: light-dark(#ffffff, #690005);--mat-sys-on-error-container: light-dark(#93000a, #ffdad6);--mat-sys-on-primary: light-dark(#ffffff, #002f65);--mat-sys-on-primary-container: light-dark(#00458f, #d7e3ff);--mat-sys-on-primary-fixed: light-dark(#001b3f, #001b3f);--mat-sys-on-primary-fixed-variant: light-dark(#00458f, #00458f);--mat-sys-on-secondary: light-dark(#ffffff, #283041);--mat-sys-on-secondary-container: light-dark(#3e4759, #dae2f9);--mat-sys-on-secondary-fixed: light-dark(#131c2b, #131c2b);--mat-sys-on-secondary-fixed-variant: light-dark(#3e4759, #3e4759);--mat-sys-on-surface: light-dark(#1a1b1f, #e3e2e6);--mat-sys-on-surface-variant: light-dark(#44474e, #e0e2ec);--mat-sys-on-tertiary: light-dark(#ffffff, #0001ac);--mat-sys-on-tertiary-container: light-dark(#0000ef, #e0e0ff);--mat-sys-on-tertiary-fixed: light-dark(#00006e, #00006e);--mat-sys-on-tertiary-fixed-variant: light-dark(#0000ef, #0000ef);--mat-sys-outline: light-dark(#74777f, #8e9099);--mat-sys-outline-variant: light-dark(#c4c6d0, #44474e);--mat-sys-primary: light-dark(#005cbb, #abc7ff);--mat-sys-primary-container: light-dark(#d7e3ff, #00458f);--mat-sys-primary-fixed: light-dark(#d7e3ff, #d7e3ff);--mat-sys-primary-fixed-dim: light-dark(#abc7ff, #abc7ff);--mat-sys-scrim: light-dark(#000000, #000000);--mat-sys-secondary: light-dark(#565e71, #bec6dc);--mat-sys-secondary-container: light-dark(#dae2f9, #3e4759);--mat-sys-secondary-fixed: light-dark(#dae2f9, #dae2f9);--mat-sys-secondary-fixed-dim: light-dark(#bec6dc, #bec6dc);--mat-sys-shadow: light-dark(#000000, #000000);--mat-sys-surface: light-dark(#faf9fd, #121316);--mat-sys-surface-bright: light-dark(#faf9fd, #38393c);--mat-sys-surface-container: light-dark(#efedf0, #1f2022);--mat-sys-surface-container-high: light-dark(#e9e7eb, #292a2c);--mat-sys-surface-container-highest: light-dark(#e3e2e6, #343537);--mat-sys-surface-container-low: light-dark(#f4f3f6, #1a1b1f);--mat-sys-surface-container-lowest: light-dark(#ffffff, #0d0e11);--mat-sys-surface-dim: light-dark(#dbd9dd, #121316);--mat-sys-surface-tint: light-dark(#005cbb, #abc7ff);--mat-sys-surface-variant: light-dark(#e0e2ec, #44474e);--mat-sys-tertiary: light-dark(#343dff, #bec2ff);--mat-sys-tertiary-container: light-dark(#e0e0ff, #0000ef);--mat-sys-tertiary-fixed: light-dark(#e0e0ff, #e0e0ff);--mat-sys-tertiary-fixed-dim: light-dark(#bec2ff, #bec2ff);--mat-sys-neutral-variant20: #2d3038;--mat-sys-neutral10: #1a1b1f;--mat-sys-level0: 0px 0px 0px 0px rgba(0, 0, 0, .2), 0px 0px 0px 0px rgba(0, 0, 0, .14), 0px 0px 0px 0px rgba(0, 0, 0, .12);--mat-sys-level1: 0px 2px 1px -1px rgba(0, 0, 0, .2), 0px 1px 1px 0px rgba(0, 0, 0, .14), 0px 1px 3px 0px rgba(0, 0, 0, .12);--mat-sys-level2: 0px 3px 3px -2px rgba(0, 0, 0, .2), 0px 3px 4px 0px rgba(0, 0, 0, .14), 0px 1px 8px 0px rgba(0, 0, 0, .12);--mat-sys-level3: 0px 3px 5px -1px rgba(0, 0, 0, .2), 0px 6px 10px 0px rgba(0, 0, 0, .14), 0px 1px 18px 0px rgba(0, 0, 0, .12);--mat-sys-level4: 0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12);--mat-sys-level5: 0px 7px 8px -4px rgba(0, 0, 0, .2), 0px 12px 17px 2px rgba(0, 0, 0, .14), 0px 5px 22px 4px rgba(0, 0, 0, .12);--mat-sys-body-large: 400 1rem / 1.5rem Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, Helvetica Neue, Arial, sans-serif;--mat-sys-body-large-font: Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, Helvetica Neue, Arial, sans-serif;--mat-sys-body-large-line-height: 1.5rem;--mat-sys-body-large-size: 1rem;--mat-sys-body-large-tracking: .031rem;--mat-sys-body-large-weight: 400;--mat-sys-body-medium: 400 .875rem / 1.25rem Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, Helvetica Neue, Arial, sans-serif;--mat-sys-body-medium-font: Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, Helvetica Neue, Arial, sans-serif;--mat-sys-body-medium-line-height: 1.25rem;--mat-sys-body-medium-size: .875rem;--mat-sys-body-medium-tracking: .016rem;--mat-sys-body-medium-weight: 400;--mat-sys-body-small: 400 .75rem / 1rem Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, Helvetica Neue, Arial, sans-serif;--mat-sys-body-small-font: Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, Helvetica Neue, Arial, sans-serif;--mat-sys-body-small-line-height: 1rem;--mat-sys-body-small-size: .75rem;--mat-sys-body-small-tracking: .025rem;--mat-sys-body-small-weight: 400;--mat-sys-display-large: 400 3.562rem / 4rem Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, sans-serif;--mat-sys-display-large-font: Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, sans-serif;--mat-sys-display-large-line-height: 4rem;--mat-sys-display-large-size: 3.562rem;--mat-sys-display-large-tracking: -.016rem;--mat-sys-display-large-weight: 400;--mat-sys-display-medium: 400 2.812rem / 3.25rem Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, sans-serif;--mat-sys-display-medium-font: Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, sans-serif;--mat-sys-display-medium-line-height: 3.25rem;--mat-sys-display-medium-size: 2.812rem;--mat-sys-display-medium-tracking: 0;--mat-sys-display-medium-weight: 400;--mat-sys-display-small: 400 2.25rem / 2.75rem Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, sans-serif;--mat-sys-display-small-font: Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, sans-serif;--mat-sys-display-small-line-height: 2.75rem;--mat-sys-display-small-size: 2.25rem;--mat-sys-display-small-tracking: 0;--mat-sys-display-small-weight: 400;--mat-sys-headline-large: 400 2rem / 2.5rem Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, sans-serif;--mat-sys-headline-large-font: Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, sans-serif;--mat-sys-headline-large-line-height: 2.5rem;--mat-sys-headline-large-size: 2rem;--mat-sys-headline-large-tracking: 0;--mat-sys-headline-large-weight: 400;--mat-sys-headline-medium: 400 1.75rem / 2.25rem Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, sans-serif;--mat-sys-headline-medium-font: Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, sans-serif;--mat-sys-headline-medium-line-height: 2.25rem;--mat-sys-headline-medium-size: 1.75rem;--mat-sys-headline-medium-tracking: 0;--mat-sys-headline-medium-weight: 400;--mat-sys-headline-small: 400 1.5rem / 2rem Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, sans-serif;--mat-sys-headline-small-font: Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, sans-serif;--mat-sys-headline-small-line-height: 2rem;--mat-sys-headline-small-size: 1.5rem;--mat-sys-headline-small-tracking: 0;--mat-sys-headline-small-weight: 400;--mat-sys-label-large: 500 .875rem / 1.25rem Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, Helvetica Neue, Arial, sans-serif;--mat-sys-label-large-font: Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, Helvetica Neue, Arial, sans-serif;--mat-sys-label-large-line-height: 1.25rem;--mat-sys-label-large-size: .875rem;--mat-sys-label-large-tracking: .006rem;--mat-sys-label-large-weight: 500;--mat-sys-label-large-weight-prominent: 700;--mat-sys-label-medium: 500 .75rem / 1rem Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, Helvetica Neue, Arial, sans-serif;--mat-sys-label-medium-font: Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, Helvetica Neue, Arial, sans-serif;--mat-sys-label-medium-line-height: 1rem;--mat-sys-label-medium-size: .75rem;--mat-sys-label-medium-tracking: .031rem;--mat-sys-label-medium-weight: 500;--mat-sys-label-medium-weight-prominent: 700;--mat-sys-label-small: 500 .688rem / 1rem Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, Helvetica Neue, Arial, sans-serif;--mat-sys-label-small-font: Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, Helvetica Neue, Arial, sans-serif;--mat-sys-label-small-line-height: 1rem;--mat-sys-label-small-size: .688rem;--mat-sys-label-small-tracking: .031rem;--mat-sys-label-small-weight: 500;--mat-sys-title-large: 400 1.375rem / 1.75rem Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, sans-serif;--mat-sys-title-large-font: Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, sans-serif;--mat-sys-title-large-line-height: 1.75rem;--mat-sys-title-large-size: 1.375rem;--mat-sys-title-large-tracking: 0;--mat-sys-title-large-weight: 400;--mat-sys-title-medium: 500 1rem / 1.5rem Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, Helvetica Neue, Arial, sans-serif;--mat-sys-title-medium-font: Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, Helvetica Neue, Arial, sans-serif;--mat-sys-title-medium-line-height: 1.5rem;--mat-sys-title-medium-size: 1rem;--mat-sys-title-medium-tracking: .009rem;--mat-sys-title-medium-weight: 500;--mat-sys-title-small: 500 .875rem / 1.25rem Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, Helvetica Neue, Arial, sans-serif;--mat-sys-title-small-font: Segoe UI Variable Text, Segoe UI, system-ui, -apple-system, Helvetica Neue, Arial, sans-serif;--mat-sys-title-small-line-height: 1.25rem;--mat-sys-title-small-size: .875rem;--mat-sys-title-small-tracking: .006rem;--mat-sys-title-small-weight: 500;--mat-sys-corner-extra-large: 28px;--mat-sys-corner-extra-large-top: 28px 28px 0 0;--mat-sys-corner-extra-small: 4px;--mat-sys-corner-extra-small-top: 4px 4px 0 0;--mat-sys-corner-full: 9999px;--mat-sys-corner-large: 16px;--mat-sys-corner-large-end: 0 16px 16px 0;--mat-sys-corner-large-start: 16px 0 0 16px;--mat-sys-corner-large-top: 16px 16px 0 0;--mat-sys-corner-medium: 12px;--mat-sys-corner-none: 0;--mat-sys-corner-small: 8px;--mat-sys-dragged-state-layer-opacity: .16;--mat-sys-focus-state-layer-opacity: .12;--mat-sys-hover-state-layer-opacity: .08;--mat-sys-pressed-state-layer-opacity: .12}html[data-theme=dark]{color-scheme:dark}html[data-theme=light]{color-scheme:light}@layer tokens,base,blocks,motion,utilities;@font-face{font-family:Poppins;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/poppins/poppins-latin-400-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Poppins;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/poppins/poppins-latin-ext-400-normal.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Poppins;font-style:normal;font-weight:500;font-display:swap;src:url(/assets/fonts/poppins/poppins-latin-500-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Poppins;font-style:normal;font-weight:500;font-display:swap;src:url(/assets/fonts/poppins/poppins-latin-ext-500-normal.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Poppins;font-style:normal;font-weight:700;font-display:swap;src:url(/assets/fonts/poppins/poppins-latin-700-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Poppins;font-style:normal;font-weight:700;font-display:swap;src:url(/assets/fonts/poppins/poppins-latin-ext-700-normal.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Poppins;font-style:normal;font-weight:800;font-display:swap;src:url(/assets/fonts/poppins/poppins-latin-800-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Poppins;font-style:normal;font-weight:800;font-display:swap;src:url(/assets/fonts/poppins/poppins-latin-ext-800-normal.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@layer base{lpg-root{display:contents}lpg-about-section,lpg-article-block,common-brand-mark,lpg-breadcrumbs,lpg-carousel,lpg-callout,lpg-chip-list,lpg-circuit-field,lpg-code-block,lpg-consent-banner,lpg-contact-list,lpg-cookies-content,lpg-cookies-viewer,lpg-copy-button,lpg-cursor,lpg-cv-card,lpg-cv-document,lpg-cv-main,lpg-cv-page,lpg-cv-role,lpg-cv-sidebar,lpg-disclosure,lpg-figure-block,common-flag,lpg-formula-field,common-github-icon,lpg-grain,lpg-hero-section,lpg-home,lpg-icon,lpg-language-switcher,lpg-media-frame,lpg-media-viewer,lpg-not-found,lpg-not-found-content,lpg-page-header,lpg-pillar-card,lpg-privacy-policy-content,lpg-privacy-policy-viewer,lpg-profile-section,lpg-project-article,lpg-project-card,lpg-project-hero,lpg-project-page,lpg-project-pager,lpg-prose,lpg-modal-shell,lpg-scroll-progress,lpg-section-header,lpg-site-footer,lpg-site-header,lpg-sitemap,lpg-spec-table,lpg-stat-list,lpg-table-of-contents,lpg-tech-band,lpg-tech-icon,lpg-terms-content,lpg-terms-viewer,lpg-thinking-section,lpg-unsupported,lpg-view-breakdown,lpg-view-counter,lpg-work-section{display:contents}lpg-marquee{display:block;min-width:0}}@layer tokens{:root{--surface-0: #0b1017;--surface-1: #111823;--surface-2: #18212e;--surface-3: #1f2a39;--ink: #e8eef6;--ink-muted: #9fb0c3;--ink-faint: #7e91a8;--accent: #4f9bec;--accent-strong: #7fb6f2;--accent-solid: #0a66c2;--accent-solid-hover: #0b74dc;--on-accent: #ffffff;--warning-surface: #3a2c12;--warning-ink: #f2c98b;--info-surface: #10243a;--info-ink: #b9d8f7;--code-surface: #070c12;--code-border: #2b3a4d;--code-comment: #7f93a8;--code-string: #8fd39d;--code-keyword: #6ea8fe;--code-type: #56cdd6;--code-number: #e2ab6d;--code-function: #e6cf85;--code-attribute: #c3a6ef;--line: rgb(255 255 255 / 9%);--line-strong: rgb(255 255 255 / 16%);--scroll-thumb: rgb(255 255 255 / 20%);--scroll-thumb-hover: rgb(255 255 255 / 38%);--shadow-card: 0 1px 2px rgb(0 0 0 / 30%), 0 12px 32px rgb(0 0 0 / 28%);--shadow-media: 0 2px 6px rgb(0 0 0 / 35%), 0 24px 60px rgb(0 0 0 / 45%);--glow: rgb(79 155 236 / 16%);--scrim: rgb(11 16 23 / 82%);--font-sans: "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, "Helvetica Neue", Arial, sans-serif;--font-mono: "Cascadia Code", "Cascadia Mono", Consolas, "SF Mono", ui-monospace, monospace;--step--2: clamp(.6875rem, .67rem + .09vw, .75rem);--step--1: clamp(.8125rem, .79rem + .11vw, .875rem);--step-0: clamp(1rem, .97rem + .2vw, 1.125rem);--step-1: clamp(1.125rem, 1.06rem + .3vw, 1.25rem);--step-2: clamp(1.375rem, 1.24rem + .6vw, 1.75rem);--step-3: clamp(2rem, 1.6rem + 1.6vw, 3rem);--step-4: clamp(2.5rem, 1.8rem + 3.4vw, 5rem);--space-1: .25rem;--space-2: .5rem;--space-3: .75rem;--space-4: 1rem;--space-5: 1.5rem;--space-6: 2rem;--space-7: 3rem;--space-8: 4rem;--space-9: clamp(4.5rem, 3rem + 7vw, 11rem);--shell: 76rem;--measure: 68ch;--gutter: clamp(1.25rem, 4vw, 2.5rem);--radius-sm: 6px;--radius: 12px;--radius-lg: 18px;--ease: cubic-bezier(.22, .61, .36, 1);--duration: .22s;color-scheme:dark}[data-theme=light]{--surface-0: #f5f7fa;--surface-1: #ffffff;--surface-2: #eef2f7;--surface-3: #e3eaf3;--ink: #16202b;--ink-muted: #4d5f72;--ink-faint: #5c6e80;--accent: #0a66c2;--accent-strong: #004182;--accent-solid: #0a66c2;--accent-solid-hover: #004182;--on-accent: #ffffff;--warning-surface: #fdf1de;--warning-ink: #6b4300;--info-surface: #e7f0fa;--info-ink: #0b3f73;--code-surface: #eef2f7;--code-border: #b6c4d4;--code-comment: #5b6773;--code-string: #1a7f37;--code-keyword: #0a58b8;--code-type: #0b6d78;--code-number: #98500e;--code-function: #795600;--code-attribute: #6f42c1;--line: rgb(16 32 48 / 12%);--line-strong: rgb(16 32 48 / 20%);--scroll-thumb: rgb(16 32 48 / 24%);--scroll-thumb-hover: rgb(16 32 48 / 45%);--shadow-card: 0 1px 2px rgb(16 32 48 / 6%), 0 12px 28px rgb(16 32 48 / 8%);--shadow-media: 0 2px 6px rgb(16 32 48 / 8%), 0 24px 50px rgb(16 32 48 / 14%);--glow: rgb(10 102 194 / 10%);--scrim: rgb(245 247 250 / 85%);color-scheme:light}}@layer base{*,*:before,*:after{box-sizing:border-box}:root{scrollbar-width:thin;scrollbar-color:var(--scroll-thumb) transparent}@supports not (scrollbar-width: thin){::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track,::-webkit-scrollbar-corner{background-color:transparent}::-webkit-scrollbar-thumb{border:3px solid transparent;border-radius:999px;background-color:var(--scroll-thumb);background-clip:content-box}::-webkit-scrollbar-thumb:hover{background-color:var(--scroll-thumb-hover)}}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:calc(var(--status-banner-height, 0px) + var(--header-height, 4.5rem) + var(--band-height, 0px) + 2.5rem);scrollbar-gutter:stable}body{margin:0;background-color:var(--surface-0);color:var(--ink);font-family:var(--font-sans);font-size:var(--step-0);line-height:1.65;-webkit-font-smoothing:antialiased;display:flex;flex-direction:column;min-height:100dvh;padding-block-start:var(--status-banner-height, 0px)}.main{flex:1 0 auto;min-width:0}.cv :where(h1,h2,h3){line-height:inherit;letter-spacing:inherit;text-wrap:wrap}.main:has(.message-page){display:grid;align-content:center}h1,h2,h3,h4,p,dl,dd,figure,ul,ol{margin:0}ul,ol{padding:0;list-style:none}h1,h2,h3{line-height:1.15;letter-spacing:-.02em;font-weight:650;text-wrap:balance}h1{line-height:1.05;letter-spacing:-.03em}p{text-wrap:pretty}img,svg{display:block;max-width:100%}a{color:var(--accent);text-decoration-thickness:1px;text-underline-offset:.2em}button{font:inherit;color:inherit;cursor:pointer}summary{cursor:pointer}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:var(--radius-sm)}::selection{background-color:var(--accent-solid);color:var(--on-accent)}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}}@layer blocks{.zoom{display:flex;align-items:center;gap:2px;padding:2px;border:1px solid var(--line-strong);border-radius:999px}.zoom__button{display:inline-flex;align-items:center;justify-content:center;min-width:1.9rem;min-height:1.9rem;padding:.25rem .5rem;border:0;border-radius:999px;background-color:transparent;color:var(--ink-muted);font-size:var(--step-0);line-height:1;transition:background-color .2s var(--ease),color .2s var(--ease)}.zoom__button:hover{background-color:var(--surface-3);color:var(--ink)}.zoom__button--wide{font-size:.75rem;font-weight:650;letter-spacing:.04em;text-transform:uppercase}.zoom__icon{width:1.15em;height:1.15em;fill:none;stroke:currentcolor;stroke-width:2;stroke-linecap:round}.zoom__level{min-width:3.4rem;color:var(--ink-faint);font-family:var(--font-mono);font-size:.75rem;text-align:center;font-variant-numeric:tabular-nums}[data-theme=dark] .theme-toggle__icon--moon,[data-theme=light] .theme-toggle__icon--sun{display:none}.pill{display:inline-flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);border:1px solid var(--line-strong);border-radius:999px;background-color:transparent;color:var(--ink-muted);line-height:1;transition:color var(--duration) var(--ease),border-color var(--duration) var(--ease)}.pill:hover{border-color:var(--accent);color:var(--ink)}.tip{position:relative}.tip:after{content:attr(data-tip);position:absolute;z-index:3;top:calc(100% + var(--space-2));left:50%;translate:-50% 0;width:max-content;max-width:22ch;padding:var(--space-2) var(--space-3);border:1px solid var(--line-strong);border-radius:var(--radius-sm);background-color:var(--surface-1);color:var(--ink);font-size:var(--step--2);font-weight:450;line-height:1.35;text-align:center;opacity:0;pointer-events:none;transition:opacity var(--duration) var(--ease)}.tip:hover:after,.tip:focus-visible:after{opacity:1}.button{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);padding:.75rem 1.35rem;border:1px solid transparent;border-radius:999px;font-size:var(--step--1);font-weight:600;text-decoration:none;white-space:nowrap;transition:background-color var(--duration) var(--ease),border-color var(--duration) var(--ease),color var(--duration) var(--ease),transform var(--duration) var(--ease)}.button:hover{transform:translateY(-1px)}.button:active{transform:translateY(0)}.button--primary{background-color:var(--accent-solid);color:var(--on-accent)}.button--primary:hover{background-color:var(--accent-solid-hover)}.button--ghost{border-color:var(--line-strong);color:var(--ink)}.button--ghost:hover{border-color:var(--accent);color:var(--accent)}.button--block{width:100%}.button__icon{width:1.05rem;height:1.05rem;fill:none;stroke:currentcolor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}.link{display:inline-flex;align-items:center;gap:var(--space-2);font:inherit;padding:0;background:none;border:0;color:var(--accent);font-weight:550;text-decoration:none;border-bottom:1px solid transparent;transition:color var(--duration) var(--ease),border-color var(--duration) var(--ease)}.link:hover{color:var(--accent-strong);border-bottom-color:currentcolor}.link__icon{width:1rem;height:1rem;fill:currentcolor;flex:none}.link lpg-icon{font-size:.8695652174rem}.link--repo,.link--demo{padding:.65rem 1.1rem;border:1px solid var(--line-strong);border-radius:999px;color:var(--ink)}.link--repo:hover,.link--demo:hover{border-color:var(--accent);color:var(--accent)}.link--note{padding:.65rem 1.1rem;border:1px dashed var(--line-strong);border-radius:999px;color:var(--ink-muted);cursor:default}.section{padding-block:var(--space-9)}.section__inner{max-width:var(--shell);margin-inline:auto;padding-inline:var(--gutter)}.section__header{max-width:58ch;margin-bottom:var(--space-8)}.section__eyebrow{margin-bottom:var(--space-3);color:var(--accent);font-size:.75rem;font-weight:600;letter-spacing:.12em;text-transform:uppercase}.section__title{line-height:1.15;font-size:var(--step-3);letter-spacing:-.02em}.section__lede{margin-top:var(--space-4);color:var(--ink-muted);font-size:var(--step-1)}.carousel-slide{flex:0 0 auto;min-width:0;scroll-snap-align:start}.split__word{display:inline-block;overflow:hidden;padding-bottom:.3em;margin-bottom:-.3em;vertical-align:bottom}.split__inner{display:inline-block;will-change:transform}.is-reveal-armed{--reveal-total: calc( var(--reveal-delay, 0ms) + (var(--reveal-index, 0) * var(--reveal-step, 90ms)) );opacity:0;transform:translateY(1.25rem)}.is-reveal-armed[data-reveal=fade]{transform:none}.is-reveal-armed[data-reveal=scale]{transform:scale(.94)}.is-reveal-armed[data-reveal=slide-left]{transform:translate(-2.5rem)}.is-reveal-armed[data-reveal=slide-right]{transform:translate(2.5rem)}.is-reveal-armed[data-reveal=mask]{opacity:1;transform:none;-webkit-mask-image:linear-gradient(90deg,#000 0 60%,transparent 100%);mask-image:linear-gradient(90deg,#000 0 60%,transparent 100%);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:0% 100%;mask-size:0% 100%}.is-reveal-armed.is-revealed{opacity:1;transform:none;transition:opacity .62s var(--ease) var(--reveal-total),transform .62s var(--ease) var(--reveal-total)}.is-reveal-armed[data-reveal=mask].is-revealed{-webkit-mask-size:300% 100%;mask-size:300% 100%;transition:mask-size .78s cubic-bezier(.19,1,.22,1) var(--reveal-total)}.is-reveal-armed .split__inner{transform:translateY(105%)}.is-reveal-armed.is-revealed .split__inner{transform:none;transition:transform .85s cubic-bezier(.19,1,.22,1) var(--delay, 0ms)}.has-cursor{cursor:none}.has-cursor a,.has-cursor button,.has-cursor summary{cursor:none}.has-modal body{overflow:hidden}.has-cursor.has-modal,.has-cursor.is-theme-wiping{cursor:auto}.has-cursor.has-modal a,.has-cursor.has-modal button,.has-cursor.has-modal summary,.has-cursor.is-theme-wiping a,.has-cursor.is-theme-wiping button,.has-cursor.is-theme-wiping summary{cursor:pointer}.tilt-card{padding:var(--space-6);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);transform:perspective(1200px) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg)) translateY(var(--tilt-lift, 0px));transition:transform .4s var(--ease),border-color .4s var(--ease),box-shadow .4s var(--ease)}.tilt-card.is-tilting{border-color:var(--line-strong)}.legal-page{padding-block:var(--space-9)}.legal-page .page-header{max-width:var(--measure);margin-inline:auto}.legal-page .doc{margin-top:var(--space-8)}.doc{max-width:var(--measure);margin-inline:auto}.doc__lede{color:var(--ink-muted);font-size:var(--step-1)}.doc__section{margin-top:var(--space-7)}.doc__heading{font-size:var(--step-1)}.doc__subheading{margin-top:var(--space-6);font-size:var(--step-0, 1rem)}.doc__text{margin-top:var(--space-4);color:var(--ink-muted)}.doc__note{margin-top:var(--space-4);color:var(--ink-faint);font-size:var(--step--1)}.doc__list{margin-top:var(--space-4);display:grid;gap:var(--space-3)}.doc__item{position:relative;padding-inline-start:var(--space-5);color:var(--ink-muted)}.doc__item:before{content:"";position:absolute;inset-inline-start:0;top:.65em;width:.4rem;height:.4rem;border-radius:50%;background-color:var(--accent)}}@layer utilities{.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}[hidden]:not([hidden=until-found]){display:none!important}}@layer motion{@media(prefers-reduced-motion:reduce){[data-magnetic]{transform:none!important}}.is-theme-wiping,.is-theme-wiping *,.is-theme-wiping *:before,.is-theme-wiping *:after{transition:none!important}.is-theme-wiping::view-transition-old(root),.is-theme-wiping::view-transition-new(root){mix-blend-mode:normal}.is-theme-wiping--to-light::view-transition-new(root){animation:theme-wipe-in .52s var(--ease) forwards}.is-theme-wiping--to-light::view-transition-old(root){animation:none;z-index:-1}.is-theme-wiping--to-dark::view-transition-old(root){animation:theme-wipe-out .52s var(--ease) forwards;z-index:1}.is-theme-wiping--to-dark::view-transition-new(root){animation:none;z-index:0}@media(prefers-reduced-motion:reduce){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}}@media(prefers-reduced-motion:no-preference){.site-nav__link.is-current .icon__stroke{animation:icon-draw .62s var(--ease)}}@keyframes theme-wipe-in{0%{clip-path:circle(0 at var(--vt-x, 50%) var(--vt-y, 0))}to{clip-path:circle(var(--vt-r, 100vmax) at var(--vt-x, 50%) var(--vt-y, 0))}}@keyframes theme-wipe-out{0%{clip-path:circle(var(--vt-r, 100vmax) at var(--vt-x, 50%) var(--vt-y, 0))}to{clip-path:circle(0 at var(--vt-x, 50%) var(--vt-y, 0))}}@keyframes icon-draw{0%{stroke-dasharray:1;stroke-dashoffset:1}to{stroke-dasharray:1;stroke-dashoffset:0}}}@media print{.site-header,.site-footer,.skip-link,.consent,.status-banner,.nav-toggle,.theme-toggle,.media__toggle,.scroll-progress,.cursor,.grain,.hero__backdrop{display:none!important}body{padding-block-start:0;background:#fff;color:#000}.project{break-inside:avoid}}.cv-dialog{width:min(96vw,60rem);height:min(92vh,58rem)}.cv-dialog .mat-mdc-dialog-surface{padding:0;overflow:hidden;border:1px solid var(--line-strong);border-radius:var(--radius-lg);background-color:var(--surface-1);box-shadow:0 40px 120px #0000008c}.cv-dialog__backdrop{background-color:#04080db8;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.cv-dialog--wide{width:min(96vw,90rem)}.modal--dialog{display:grid;grid-template-rows:auto 1fr auto;width:100%;height:100%;border:0;border-radius:0;box-shadow:none}@media(width<48rem){.cv-dialog{width:100vw;height:100dvh}.cv-dialog .mat-mdc-dialog-surface{border:0;border-radius:0}}
