@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/fonts/inter-var.woff2) format("woff2-variations")}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/fonts/jetbrains-mono-var.woff2) format("woff2-variations")}@font-face{font-family:Playfair Display Variable;font-style:normal;font-display:swap;font-weight:400 900;src:url(/fonts/playfair-var.woff2) format("woff2-variations")}@font-face{font-family:Playfair Display Variable;font-style:italic;font-display:swap;font-weight:400 900;src:url(/fonts/playfair-var-italic.woff2) format("woff2-variations")}:root{color-scheme:dark;--bg-canvas: #000000;--bg-card: rgba(18, 18, 22, .75);--bg-card-hover: rgba(28, 28, 35, .9);--bg-inset: rgba(10, 10, 14, .85);--text-strong: #ffffff;--text-body: rgba(255, 255, 255, .82);--text-muted: rgba(255, 255, 255, .6);--text-faint: rgba(255, 255, 255, .4);--border-strong: rgba(255, 255, 255, .18);--border-muted: rgba(255, 255, 255, .08);--accent: #ffffff;--accent-strong: rgba(255, 255, 255, .85);--success: #4ade80;--danger: #f87171;--btn-filled-bg: #ffffff;--btn-filled-bg-hover: #e5e5e5;--btn-filled-text: #000000;--btn-neutral-bg: rgba(255, 255, 255, .1);--btn-neutral-bg-hover: rgba(255, 255, 255, .18);--ink: rgba(255, 255, 255, .35);--ink-faint: rgba(255, 255, 255, .15);--font-sans: "Inter Variable", Inter, ui-sans-serif, system-ui, "Segoe UI Variable Display", -apple-system, "Segoe UI", Roboto, sans-serif;--font-display: "Playfair Display Variable", Georgia, "Times New Roman", serif;--font-mono: "JetBrains Mono Variable", ui-monospace, "JetBrains Mono", Menlo, Consolas, monospace;--fs-xs: .75rem;--fs-sm: .8125rem;--fs-md: .875rem;--fs-lg: 1rem;--fs-xl: 1.125rem;--fs-2xl: 1.25rem;--fs-3xl: 1.875rem;--space-1: .375rem;--space-2: .5rem;--space-3: .75rem;--space-4: 1rem;--space-5: 1.25rem;--space-6: 2.5rem;--space-7: 3rem;--space-8: 4rem;--radius-card: 12px;--radius-pill: 9999px;--duration: .15s;--ease-out: cubic-bezier(.16, 1, .3, 1)}html.light-mode{--bg-canvas: oklch(98.5% 0 0);--bg-card: #ffffff;--bg-card-hover: oklab(98.5% 0 0);--bg-inset: oklch(95.5% 0 0);--text-strong: oklch(14.5% 0 0);--text-body: oklab(14.5% 0 0 / .75);--text-muted: oklab(14.5% 0 0 / .6);--text-faint: oklab(14.5% 0 0 / .45);--border-strong: oklch(87% 0 0);--border-muted: oklch(92.2% 0 0);--accent: oklch(14.5% 0 0);--accent-strong: rgb(0 0 0 / .75);--success: oklch(52.7% .154 150.069);--danger: oklch(57.7% .245 27.325);--btn-filled-bg: rgb(0 0 0 / .9);--btn-filled-bg-hover: #000000;--btn-filled-text: rgb(255 255 255 / .92);--btn-neutral-bg: rgb(0 0 0 / .08);--btn-neutral-bg-hover: rgb(0 0 0 / .14);--ink: oklab(14.5% 0 0 / .42);--ink-faint: oklab(14.5% 0 0 / .2)}.rough-divider{position:relative;width:100%;height:1px;margin:var(--space-7) 0;background-color:var(--border-muted)}.rough-divider:before{content:"";position:absolute;inset:-1px 0 0;border-top:1.5px solid var(--ink);pointer-events:none}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}body{font-family:var(--font-sans);font-weight:400;font-size:var(--fs-lg);line-height:1.6;color:var(--text-body);background-color:transparent;min-height:100vh;overflow-x:hidden}h1,h2,h3,h4{font-family:var(--font-display);font-weight:550;color:var(--text-strong);line-height:1.12;letter-spacing:-.015em;text-wrap:balance}h1{font-size:clamp(2rem,5vw,2.75rem)}h2{font-size:clamp(1.5rem,3.5vw,1.875rem)}h3{font-size:var(--fs-xl);font-family:var(--font-sans);font-weight:600}p{margin-bottom:var(--space-4)}p:last-child{margin-bottom:0}a{color:inherit;text-decoration:none;transition:color var(--duration) var(--ease-out),opacity var(--duration) var(--ease-out)}a:hover{color:var(--text-strong)}img{max-width:100%;height:auto;display:block}strong{color:var(--text-strong);font-weight:550}code,kbd,samp,pre{font-family:var(--font-mono)}::selection{background:var(--text-strong);color:var(--bg-canvas)}:focus-visible{outline:2px solid var(--text-strong);outline-offset:2px;border-radius:2px}.skip-link{position:absolute;top:-100%;left:var(--space-4);background:var(--btn-filled-bg);color:var(--btn-filled-text);padding:var(--space-2) var(--space-4);border-radius:var(--radius-pill);z-index:10000;font-weight:550;font-size:var(--fs-md)}.skip-link:focus{top:var(--space-4)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.text-accent{color:var(--accent)}.container{width:100%;max-width:1240px;margin:0 auto;padding:0 var(--space-5)}@media(min-width:1440px){.container{max-width:1280px;padding:0 var(--space-6)}}.container--narrow{max-width:880px;margin:0 auto}.container--wide{max-width:1360px;margin:0 auto}.section{padding:var(--space-8) 0}.section__label{font-family:var(--font-mono);font-size:var(--fs-xs);font-weight:500;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;display:flex;align-items:center;gap:var(--space-3);margin-bottom:var(--space-4)}.section__title{margin-bottom:var(--space-5)}.section__description{font-size:var(--fs-lg);color:var(--text-muted);max-width:60ch;margin-bottom:var(--space-6)}.section__header-row{display:flex;justify-content:space-between;align-items:flex-end;gap:var(--space-4);margin-bottom:var(--space-6)}.grid{display:grid;gap:var(--space-4)}.grid--2{grid-template-columns:repeat(2,1fr)}.grid--3{grid-template-columns:repeat(3,1fr)}.grid--4{grid-template-columns:repeat(4,1fr)}@media(max-width:1024px){.grid--4{grid-template-columns:repeat(2,1fr)}}@media(max-width:768px){.grid--3,.grid--2{grid-template-columns:1fr}}@media(max-width:640px){.grid--4{grid-template-columns:1fr}}.btn{position:relative;white-space:nowrap;cursor:pointer;min-height:2.25rem;font-family:var(--font-mono);letter-spacing:.05em;text-transform:uppercase;border:none;border-radius:var(--radius-pill);justify-content:center;align-items:center;gap:var(--space-2);padding-inline:var(--space-4);font-size:var(--fs-sm);font-weight:500;display:inline-flex;text-decoration:none;transition:background-color var(--duration) var(--ease-out),color var(--duration) var(--ease-out),transform var(--duration) var(--ease-out);-webkit-tap-highlight-color:transparent}.btn:before{content:"";border-radius:inherit;border:1.5px solid var(--ink);pointer-events:none;position:absolute;inset:0}.btn:hover{transform:translateY(-1px)}.btn:active{transform:scale(.97)}.btn--filled{background-color:var(--btn-filled-bg);color:var(--btn-filled-text)!important}.btn--filled:before{border-color:color-mix(in oklab,var(--btn-filled-text) 55%,transparent)}.btn--filled:hover{background-color:var(--btn-filled-bg-hover);color:var(--btn-filled-text)!important}.btn--neutral{background-color:var(--btn-neutral-bg);color:var(--text-strong)!important}.btn--neutral:before{border-color:var(--ink-faint)}.btn--neutral:hover{background-color:var(--btn-neutral-bg-hover);color:var(--text-strong)!important}.btn--outline{background:transparent;color:var(--text-strong)!important}.btn--outline:before{border-color:var(--ink)}.btn--outline:hover{background-color:var(--btn-neutral-bg);color:var(--text-strong)!important}.btn--ghost{background:transparent;color:var(--text-muted);padding-inline:var(--space-2)}.btn--ghost:before{border-color:transparent;filter:none}.btn--ghost:hover{color:var(--text-strong)!important}.btn[disabled],.btn.loading{opacity:.5;pointer-events:none}.tag{display:inline-block;font-family:var(--font-mono);font-size:var(--fs-xs);font-weight:400;color:var(--text-muted);background:var(--btn-neutral-bg);padding:.125rem .625rem;border-radius:var(--radius-pill);white-space:nowrap}.tag--accent{color:var(--accent);background:transparent;border:1px solid var(--ink-faint)}.card{background:color-mix(in oklab,var(--bg-card) 90%,transparent);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid var(--border-muted);border-radius:var(--radius-card);padding:var(--space-5);box-shadow:0 4px 24px -12px #00000080;transition:background-color var(--duration) var(--ease-out),border-color var(--duration) var(--ease-out),box-shadow var(--duration) var(--ease-out),transform var(--duration) var(--ease-out)}a.card{color:inherit;text-decoration:none;display:flex;flex-direction:column}a.card:hover{background:color-mix(in oklab,var(--bg-card-hover) 95%,transparent);border-color:var(--border-strong);box-shadow:0 8px 32px -12px #000c;transform:translateY(-2px)}a.card:hover .card-title-link{color:var(--accent)}.prose{font-size:var(--fs-lg);line-height:1.75;color:var(--text-body)}.prose h2{margin-top:var(--space-7);margin-bottom:var(--space-4);font-size:var(--fs-2xl)}.prose h3{margin-top:var(--space-6);margin-bottom:var(--space-3);font-size:var(--fs-xl)}.prose p{margin-bottom:var(--space-5)}.prose a{color:var(--text-strong);text-decoration:underline;text-decoration-color:var(--ink);text-underline-offset:3px}.prose a:hover{text-decoration-color:currentColor}.prose strong{color:var(--text-strong);font-weight:600}.prose code{font-size:.85em;background:var(--btn-neutral-bg);padding:.15em .4em;border-radius:6px;color:var(--text-strong)}.prose pre{background:var(--bg-inset);border:1px solid var(--border-muted);border-radius:var(--radius-card);padding:var(--space-5);overflow-x:auto;margin:var(--space-6) 0;font-size:var(--fs-md);line-height:1.7}.prose pre code{background:none;padding:0;font-size:inherit}.prose ul,.prose ol{margin-bottom:var(--space-5);padding-left:var(--space-5)}.prose li{margin-bottom:var(--space-2)}.prose blockquote{border-left:2px solid var(--accent);padding-left:var(--space-5);margin:var(--space-6) 0;font-style:normal;color:var(--text-muted)}.prose img{border-radius:var(--radius-card);margin:var(--space-6) 0}.prose hr{border:none;border-top:1px solid var(--border-muted);margin:var(--space-7) 0}.form-group{margin-bottom:var(--space-5)}.form-label{display:block;font-family:var(--font-mono);font-size:var(--fs-xs);font-weight:500;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);margin-bottom:var(--space-2)}.form-input,.form-select,.form-textarea{width:100%;font-family:var(--font-sans);font-size:var(--fs-md);color:var(--text-strong);background:var(--btn-neutral-bg);border:1px solid var(--border-muted);border-radius:var(--radius-pill);padding:.625rem 1rem;transition:border-color var(--duration) var(--ease-out),background-color var(--duration) var(--ease-out);appearance:none}.form-textarea{border-radius:var(--radius-card);resize:vertical;min-height:120px}.form-input:focus,.form-select:focus,.form-textarea:focus{outline:none;border-color:var(--text-muted)}.form-input::placeholder,.form-textarea::placeholder{color:var(--text-faint)}.form-select{background-image:linear-gradient(45deg,transparent 50%,var(--text-muted) 50%),linear-gradient(135deg,var(--text-muted) 50%,transparent 50%);background-position:calc(100% - 18px) 55%,calc(100% - 13px) 55%;background-size:5px 5px;background-repeat:no-repeat;padding-right:2.25rem}select.form-input option{background:var(--bg-card);color:var(--text-strong)}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--bg-canvas)}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:var(--radius-pill)}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.animate-on-scroll{opacity:0;transform:translateY(16px);transition:opacity .5s var(--ease-out),transform .5s var(--ease-out)}.animate-on-scroll.visible{opacity:1;transform:translateY(0)}.animate-in{opacity:0;animation:fadeInUp .6s var(--ease-out) forwards}.animate-delay-1{animation-delay:.08s}.animate-delay-2{animation-delay:.16s}.animate-delay-3{animation-delay:.24s}.animate-delay-4{animation-delay:.32s}.animate-delay-5{animation-delay:.4s}@keyframes fadeInUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition-duration:.01ms!important;scroll-behavior:auto!important}.animate-on-scroll,.animate-in{opacity:1;transform:none}}@media(max-width:768px){.section{padding:var(--space-7) 0}.container{padding:0 var(--space-4)}.section__header-row{flex-direction:column;align-items:flex-start;gap:var(--space-3)}}.card,[class*=-card],.skill-group,.cert-slide,.contact-form-card,.contact-info-card,.project-card,.service-card,.about-stats-card{backdrop-filter:blur(16px)!important;-webkit-backdrop-filter:blur(16px)!important;box-shadow:0 8px 32px -12px #0006}.header[data-astro-cid-3ef6ksr2]{position:fixed;top:0;left:0;right:0;z-index:1000;background:color-mix(in oklab,var(--bg-canvas) 85%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--border-muted)}.header[data-astro-cid-3ef6ksr2].menu-open{bottom:0}.header__nav[data-astro-cid-3ef6ksr2]{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);height:64px;position:relative;z-index:1003}.header__brand[data-astro-cid-3ef6ksr2]{text-decoration:none;display:inline-flex;align-items:baseline}.header__brand-mark[data-astro-cid-3ef6ksr2]{font-family:var(--font-mono);font-size:var(--fs-md);font-weight:600;letter-spacing:-.01em;color:var(--text-strong)}.header__links[data-astro-cid-3ef6ksr2]{display:flex;list-style:none;gap:var(--space-3)}.header__link[data-astro-cid-3ef6ksr2]{font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.06em;color:var(--text-muted);text-decoration:none;padding:.375rem .5rem;transition:color var(--duration) var(--ease-out)}.header__link[data-astro-cid-3ef6ksr2]:hover,.header__link--active[data-astro-cid-3ef6ksr2]{color:var(--text-strong)}.header__actions[data-astro-cid-3ef6ksr2]{display:flex;align-items:center;gap:var(--space-2)}.header__theme-btn[data-astro-cid-3ef6ksr2]{position:relative;width:34px;height:34px;border-radius:50%;background:transparent;border:none;color:var(--text-muted);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:color var(--duration) var(--ease-out),background-color var(--duration) var(--ease-out)}.header__theme-btn[data-astro-cid-3ef6ksr2]:before{content:"";position:absolute;inset:0;border-radius:50%;border:1.5px solid var(--ink-faint);pointer-events:none}.header__theme-btn[data-astro-cid-3ef6ksr2]:hover{color:var(--text-strong);background:var(--btn-neutral-bg)}.header__rss-btn[data-astro-cid-3ef6ksr2]{min-height:2.125rem;padding-inline:var(--space-3);font-size:.72rem}.header__github-btn[data-astro-cid-3ef6ksr2]{min-height:2.125rem;padding-inline:var(--space-4);font-size:.72rem}.header__hamburger[data-astro-cid-3ef6ksr2]{display:none;flex-direction:column;justify-content:center;gap:5px;width:36px;height:36px;padding:6px;background:none;border:none;border-radius:var(--radius-pill);cursor:pointer;z-index:1002}.header__hamburger[data-astro-cid-3ef6ksr2] span[data-astro-cid-3ef6ksr2]{display:block;width:100%;height:1.5px;background:var(--text-strong);border-radius:2px;transition:transform var(--duration) var(--ease-out),opacity var(--duration) var(--ease-out)}.header__hamburger[data-astro-cid-3ef6ksr2].active span[data-astro-cid-3ef6ksr2]:nth-child(1){transform:translateY(6.5px) rotate(45deg)}.header__hamburger[data-astro-cid-3ef6ksr2].active span[data-astro-cid-3ef6ksr2]:nth-child(2){opacity:0}.header__hamburger[data-astro-cid-3ef6ksr2].active span[data-astro-cid-3ef6ksr2]:nth-child(3){transform:translateY(-6.5px) rotate(-45deg)}.header__mobile-overlay[data-astro-cid-3ef6ksr2]{position:fixed;inset:0;background:color-mix(in oklab,var(--bg-canvas) 98%,transparent);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);display:flex;align-items:center;justify-content:center;opacity:0;visibility:hidden;transition:opacity var(--duration) var(--ease-out),visibility var(--duration);z-index:1001}.header__mobile-overlay[data-astro-cid-3ef6ksr2].active{opacity:1;visibility:visible}.header__mobile-links[data-astro-cid-3ef6ksr2]{list-style:none;text-align:center;display:flex;flex-direction:column;gap:var(--space-3);padding:var(--space-4)}.header__mobile-link[data-astro-cid-3ef6ksr2]{display:block;font-family:var(--font-mono);font-size:var(--fs-xl);font-weight:500;color:var(--text-muted);text-decoration:none;padding:.5rem 1rem;transition:color var(--duration) var(--ease-out)}.header__mobile-link[data-astro-cid-3ef6ksr2]:hover,.header__mobile-link--active[data-astro-cid-3ef6ksr2]{color:var(--text-strong)}.header__mobile-actions[data-astro-cid-3ef6ksr2]{display:flex;flex-direction:column;gap:var(--space-2);margin-top:var(--space-4)}@media(max-width:960px){.header__links[data-astro-cid-3ef6ksr2],.header__rss-btn[data-astro-cid-3ef6ksr2],.header__github-btn[data-astro-cid-3ef6ksr2]{display:none}.header__hamburger[data-astro-cid-3ef6ksr2]{display:flex}}.footer[data-astro-cid-sz7xmlte]{position:relative;padding:var(--space-6) 0 var(--space-7);margin-top:var(--space-8)}.footer[data-astro-cid-sz7xmlte]:before{content:"";position:absolute;top:0;left:0;right:0;border-top:1.5px solid var(--ink);pointer-events:none}.footer__inner[data-astro-cid-sz7xmlte]{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);flex-wrap:wrap}.footer__copyright[data-astro-cid-sz7xmlte]{font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.08em;color:var(--text-faint);margin:0}.footer__nav[data-astro-cid-sz7xmlte]{display:flex;align-items:center;gap:var(--space-5);flex-wrap:wrap}.footer__link[data-astro-cid-sz7xmlte]{font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.08em;color:var(--text-muted);text-decoration:none;transition:color var(--duration) var(--ease-out)}.footer__link[data-astro-cid-sz7xmlte]:hover{color:var(--text-strong)}@media(max-width:640px){.footer__inner[data-astro-cid-sz7xmlte]{flex-direction:column;align-items:flex-start;gap:var(--space-3)}.footer__nav[data-astro-cid-sz7xmlte]{gap:var(--space-4)}}
