.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}footer[data-astro-cid-gcn2mc3v]{background:var(--color-bg);border-top:1px solid var(--color-border);margin-top:var(--spacing-2xl);animation:fadeIn var(--transition-slow) ease-out}.footer-content[data-astro-cid-gcn2mc3v]{max-width:1200px;margin:0 auto;padding:var(--spacing-2xl) var(--spacing-lg);display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:var(--spacing-2xl)}.footer-section[data-astro-cid-gcn2mc3v] h3[data-astro-cid-gcn2mc3v],.footer-section[data-astro-cid-gcn2mc3v] h4[data-astro-cid-gcn2mc3v]{margin-top:0;margin-bottom:var(--spacing-md);font-size:var(--font-size-lg);color:var(--color-text-primary)}.footer-section[data-astro-cid-gcn2mc3v] p[data-astro-cid-gcn2mc3v]{color:var(--color-text-secondary);line-height:var(--line-height-relaxed);font-size:var(--font-size-base);margin:0}.footer-nav[data-astro-cid-gcn2mc3v]{display:flex;flex-direction:column;gap:var(--spacing-xs)}.footer-nav[data-astro-cid-gcn2mc3v] a[data-astro-cid-gcn2mc3v]{color:var(--color-text-secondary);text-decoration:none;font-size:var(--font-size-base);padding:.25rem 0;transition:color var(--transition-fast)}.footer-nav[data-astro-cid-gcn2mc3v] a[data-astro-cid-gcn2mc3v]:hover{color:var(--color-primary)}.footer-bottom[data-astro-cid-gcn2mc3v]{border-top:1px solid var(--color-border);padding:var(--spacing-lg);text-align:center}.footer-bottom[data-astro-cid-gcn2mc3v] p[data-astro-cid-gcn2mc3v]{margin:0;color:var(--color-text-tertiary);font-size:var(--font-size-sm)}@media(max-width:768px){.footer-content[data-astro-cid-gcn2mc3v]{grid-template-columns:1fr;gap:var(--spacing-lg);padding:var(--spacing-lg) var(--spacing-md)}}:root{--color-bg: #ffffff;--color-bg-secondary: #f9fafb;--color-bg-tertiary: #f3f4f6;--color-surface: #ffffff;--color-surface-hover: #f9fafb;--color-border: #e5e7eb;--color-border-hover: #d1d5db;--color-text-primary: #111827;--color-text-secondary: #4b5563;--color-text-tertiary: #6b7280;--color-text-muted: #9ca3af;--color-primary: #3b82f6;--color-primary-hover: #2563eb;--color-primary-light: #dbeafe;--color-primary-dark: #1e40af;--color-accent: #8b5cf6;--color-accent-hover: #7c3aed;--color-accent-light: #ede9fe;--color-success: #10b981;--color-warning: #f59e0b;--color-error: #ef4444;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .06);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 10px 10px -5px rgba(0, 0, 0, .04);--font-size-xs: .75rem;--font-size-sm: .875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-size-3xl: 1.875rem;--font-size-4xl: 2.25rem;--font-size-5xl: 3rem;--line-height-tight: 1.25;--line-height-snug: 1.375;--line-height-normal: 1.5;--line-height-relaxed: 1.625;--line-height-loose: 1.75;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--spacing-xs: .5rem;--spacing-sm: .75rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--spacing-2xl: 3rem;--content-width: 65ch;--wide-content-width: 80ch;--radius-sm: .25rem;--radius-md: .375rem;--radius-lg: .5rem;--radius-xl: .75rem;--radius-2xl: 1rem;--radius-full: 9999px;--transition-fast: .15s cubic-bezier(.4, 0, .2, 1);--transition-base: .2s cubic-bezier(.4, 0, .2, 1);--transition-slow: .3s cubic-bezier(.4, 0, .2, 1)}[data-theme=dark]{--color-bg: #0f0f0f;--color-bg-secondary: #171717;--color-bg-tertiary: #262626;--color-surface: #1a1a1a;--color-surface-hover: #262626;--color-border: #404040;--color-border-hover: #525252;--color-text-primary: #f3f4f6;--color-text-secondary: #d1d5db;--color-text-tertiary: #9ca3af;--color-text-muted: #6b7280;--color-primary: #60a5fa;--color-primary-hover: #93bbfc;--color-primary-light: #1e3a5f;--color-primary-dark: #93bbfc;--color-accent: #a78bfa;--color-accent-hover: #c4b5fd;--color-accent-light: #2e1065;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .4), 0 2px 4px -1px rgba(0, 0, 0, .3);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .4), 0 4px 6px -2px rgba(0, 0, 0, .3);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .4), 0 10px 10px -5px rgba(0, 0, 0, .3)}body{font-family:Inter,system-ui,sans-serif;background:var(--color-bg-secondary);color:var(--color-text-primary);margin:0;min-height:100vh;font-size:var(--font-size-lg);line-height:var(--line-height-relaxed);text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{max-width:900px;margin:0 auto;padding:var(--spacing-xl) var(--spacing-lg);background:transparent;min-height:60vh}@media(min-width:768px){main{padding:var(--spacing-2xl) var(--spacing-xl)}}article{max-width:var(--content-width);margin:0 auto}h1,h2,h3,h4,h5,h6{color:var(--color-text-primary);line-height:var(--line-height-tight);letter-spacing:-.02em}h1{font-family:Montserrat,system-ui,sans-serif;font-weight:var(--font-weight-bold);font-size:var(--font-size-4xl);margin-top:0;margin-bottom:var(--spacing-lg)}h2{font-family:Inter,system-ui,sans-serif;font-weight:var(--font-weight-semibold);font-size:var(--font-size-3xl);margin-top:var(--spacing-2xl);margin-bottom:var(--spacing-md)}h3{font-family:Inter,system-ui,sans-serif;font-weight:var(--font-weight-semibold);font-size:var(--font-size-2xl);margin-top:var(--spacing-xl);margin-bottom:var(--spacing-sm)}h4{font-family:Inter,system-ui,sans-serif;font-weight:var(--font-weight-semibold);font-size:var(--font-size-xl);margin-top:var(--spacing-lg);margin-bottom:var(--spacing-sm)}p{font-size:var(--font-size-lg);line-height:var(--line-height-relaxed);margin-bottom:var(--spacing-lg);color:var(--color-text-secondary)}ul,ol{font-size:var(--font-size-lg);line-height:var(--line-height-relaxed);margin-bottom:var(--spacing-lg);padding-left:var(--spacing-xl)}li{margin-bottom:var(--spacing-xs)}a{color:var(--color-primary);text-decoration:none;font-weight:var(--font-weight-medium);transition:all .2s;text-underline-offset:.2em}a:hover{color:var(--color-primary-hover);text-decoration:underline}code,pre{font-family:Monaco,Menlo,Ubuntu Mono,Consolas,monospace}article p,article li{max-width:var(--content-width)}p+ul,p+ol,ul+p,ol+p{margin-top:var(--spacing-lg)}.post-list{list-style:none;padding:0}.post-list li{margin-bottom:var(--spacing-xl);padding-bottom:var(--spacing-xl);border-bottom:1px solid var(--color-border)}.post-list li:last-child{border-bottom:none}.post-title{font-size:var(--font-size-2xl);font-weight:var(--font-weight-semibold);margin-bottom:var(--spacing-xs);line-height:var(--line-height-tight)}.post-title a{color:var(--color-text-primary);text-decoration:none}.post-title a:hover{color:var(--color-primary);text-decoration:none}.post-meta{font-size:var(--font-size-sm);color:var(--color-text-tertiary);margin-bottom:var(--spacing-sm);font-weight:var(--font-weight-normal)}.post-excerpt{color:var(--color-text-secondary);line-height:var(--line-height-relaxed);font-size:var(--font-size-base);max-width:var(--content-width)}.tags{display:flex;flex-wrap:wrap;gap:var(--spacing-xs);margin-top:var(--spacing-sm)}.tag{background:var(--color-bg-tertiary);padding:.25rem .625rem;border-radius:var(--radius-md);font-size:var(--font-size-sm);color:var(--color-text-secondary);text-decoration:none;transition:all .2s;font-weight:var(--font-weight-medium);border:1px solid transparent}.tag:hover{background:var(--color-primary-light);color:var(--color-primary-dark);text-decoration:none;border-color:var(--color-primary)}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes slideIn{0%{opacity:0;transform:translate(-20px)}to{opacity:1;transform:translate(0)}}main>*{animation:fadeIn var(--transition-slow) ease-out}.card-grid>*,.project-grid>*{animation:fadeIn var(--transition-slow) ease-out;animation-fill-mode:both}.card-grid>*:nth-child(1){animation-delay:0ms}.card-grid>*:nth-child(2){animation-delay:50ms}.card-grid>*:nth-child(3){animation-delay:.1s}.card-grid>*:nth-child(4){animation-delay:.15s}.card-grid>*:nth-child(5){animation-delay:.2s}.card-grid>*:nth-child(6){animation-delay:.25s}html{scroll-behavior:smooth}button,.card,.project-card,.social-link{transition:transform var(--transition-fast)}button:active,.social-link:active{transform:scale(.95)}a:focus-visible,button:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}[data-theme=dark] .astro-code,[data-theme=dark] .astro-code span{color:var(--shiki-dark, inherit)!important;background-color:var(--shiki-dark-bg, inherit)!important}[data-theme=dark] .enhanced-code-block{background:#0f172a}[data-theme=dark] .code-toolbar{background:#0f172a;border-bottom-color:#1e293b}[data-theme=dark] :not(pre)>code{background:var(--color-bg-tertiary);color:var(--color-accent)}@media(prefers-reduced-motion:no-preference){::view-transition-old(root),::view-transition-new(root){animation-duration:.3s;animation-timing-function:cubic-bezier(.4,0,.2,1)}::view-transition-old(main-content){animation:slideOutLeft .3s cubic-bezier(.4,0,.2,1)}::view-transition-new(main-content){animation:slideInRight .3s cubic-bezier(.4,0,.2,1)}[data-transition-direction=back] ::view-transition-old(main-content){animation:slideOutRight .3s cubic-bezier(.4,0,.2,1)}[data-transition-direction=back] ::view-transition-new(main-content){animation:slideInLeft .3s cubic-bezier(.4,0,.2,1)}@keyframes slideOutLeft{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(-20px)}}@keyframes slideInRight{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@keyframes slideOutRight{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(20px)}}@keyframes slideInLeft{0%{opacity:0;transform:translate(-20px)}to{opacity:1;transform:translate(0)}}::view-transition-old(blog-post),::view-transition-new(blog-post){animation-duration:.4s}::view-transition-old(blog-post){animation:fadeSlideOut .4s cubic-bezier(.4,0,.2,1)}::view-transition-new(blog-post){animation:fadeSlideIn .4s cubic-bezier(.4,0,.2,1)}@keyframes fadeSlideOut{0%{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(-10px) scale(.98)}}@keyframes fadeSlideIn{0%{opacity:0;transform:translateY(10px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}::view-transition-old(fade-fast),::view-transition-new(fade-fast){animation-duration:.2s}}@media(prefers-reduced-motion:reduce){::view-transition-old(root),::view-transition-new(root),::view-transition-old(main-content),::view-transition-new(main-content),::view-transition-old(blog-post),::view-transition-new(blog-post){animation:none!important}}
