html{scroll-behavior:smooth}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}.skip-link{position:absolute;top:-40px;left:6px;background:var(--accent);color:#fff;padding:8px;text-decoration:none;border-radius:4px;z-index:1000;font-weight:600;transition:top .3s ease}.skip-link:focus{top:6px}#site-navigation:focus{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}html,body{overflow-x:hidden;max-width:100vw;height:100%;min-height:100vh}html,body{overflow-x:hidden;overflow-y:auto}@media (max-width: 768px){*{box-sizing:border-box}html{height:100%;min-height:100vh;min-height:calc(var(--vh, 1vh) * 100);min-height:-webkit-fill-available}body{overflow-x:hidden;overflow-y:auto;max-width:100vw;height:auto;min-height:100vh;min-height:calc(var(--vh, 1vh) * 100);min-height:-webkit-fill-available;position:relative}}:root{--vh: 1vh;--accent: #2337ff;--accent-dark: #000d8a;--accent-light: #e0e7ff;--accent-rgb: 35, 55, 255;--purple: #8b5cf6;--purple-dark: #6d28d9;--purple-light: #ede9fe;--purple-rgb: 139, 92, 246;--green: #10b981;--green-dark: #059669;--green-light: #d1fae5;--green-rgb: 16, 185, 129;--orange: #f59e0b;--orange-dark: #d97706;--orange-light: #fef3c7;--orange-rgb: 245, 158, 11;--black: 15, 18, 25;--gray: 96, 115, 159;--gray-light: 229, 233, 240;--gray-dark: 34, 41, 57;--gray-gradient: rgba(var(--gray-light), 50%), #fff;--box-shadow: 0 2px 6px rgba(var(--gray), 25%), 0 8px 24px rgba(var(--gray), 33%), 0 16px 32px rgba(var(--gray), 33%);--box-shadow-lg: 0 10px 25px rgba(var(--gray), 15%), 0 20px 40px rgba(var(--gray), 20%), 0 30px 60px rgba(var(--gray), 25%);--box-shadow-xl: 0 20px 40px rgba(var(--gray), 10%), 0 40px 80px rgba(var(--gray), 15%), 0 60px 120px rgba(var(--gray), 20%);--bg-primary: #ffffff;--bg-secondary: #f8fafc;--text-primary: rgb(var(--black));--text-secondary: rgb(var(--gray-dark));--border: rgb(var(--gray-light));--border-color: rgb(var(--gray-light));--box-shadow-card: 0 1px 3px rgba(0, 0, 0, .1)}.dark{--accent: #3b82f6;--accent-dark: #1e40af;--accent-light: rgba(59, 130, 246, .2);--accent-rgb: 59, 130, 246;--purple: #a78bfa;--purple-dark: #8b5cf6;--purple-light: rgba(167, 139, 250, .2);--purple-rgb: 167, 139, 250;--green: #34d399;--green-dark: #10b981;--green-light: rgba(52, 211, 153, .2);--green-rgb: 52, 211, 153;--orange: #fbbf24;--orange-dark: #f59e0b;--orange-light: rgba(251, 191, 36, .2);--orange-rgb: 251, 191, 36;--black: 255, 255, 255;--gray: 156, 163, 175;--gray-light: 55, 65, 81;--gray-dark: 209, 213, 219;--gray-gradient: rgba(var(--gray-light), 50%), rgb(17, 24, 39);--box-shadow: 0 2px 6px rgba(0, 0, 0, .3), 0 8px 24px rgba(0, 0, 0, .4), 0 16px 32px rgba(0, 0, 0, .4);--box-shadow-lg: 0 10px 25px rgba(0, 0, 0, .4), 0 20px 40px rgba(0, 0, 0, .5), 0 30px 60px rgba(0, 0, 0, .6);--box-shadow-xl: 0 20px 40px rgba(0, 0, 0, .5), 0 40px 80px rgba(0, 0, 0, .6), 0 60px 120px rgba(0, 0, 0, .7);--bg-primary: rgb(31, 41, 55);--bg-secondary: rgb(17, 24, 39);--text-primary: rgb(var(--black));--text-secondary: rgb(var(--gray));--border: rgb(var(--gray-light));--border-color: rgb(var(--gray-light));--box-shadow-card: 0 1px 3px rgba(0, 0, 0, .3)}.dark{background-color:#111827!important}.dark body{background:linear-gradient(var(--gray-gradient)) no-repeat!important;background-size:100% 600px!important;color:rgb(var(--gray-dark))!important}.dark h1,.dark h2,.dark h3,.dark h4,.dark h5,.dark h6{color:rgb(var(--black))!important}.dark main{background:transparent!important}.dark a{color:var(--accent)!important}.dark code{background-color:rgb(var(--gray-light))!important;color:rgb(var(--black))!important}@font-face{font-family:Atkinson;src:url(/fonts/atkinson-regular.woff) format("woff");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Atkinson;src:url(/fonts/atkinson-bold.woff) format("woff");font-weight:700;font-style:normal;font-display:swap}body{font-family:Atkinson,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;margin:0;padding:0;text-align:left;background:linear-gradient(var(--gray-gradient)) no-repeat;background-size:100% 600px;word-wrap:break-word;overflow-wrap:break-word;color:rgb(var(--gray-dark));font-size:18px;line-height:1.6;font-weight:400;letter-spacing:-.01em;transition:background .3s ease,color .3s ease}.dark body{background:linear-gradient(var(--gray-gradient)) no-repeat;background-size:100% 600px;color:rgb(var(--gray-dark))}main{width:100%;max-width:1400px;margin:60px auto auto;padding:3em 1em}@media (min-width: 1600px){main{max-width:1600px}}h1,h2,h3,h4,h5,h6{margin:0 0 1rem;color:rgb(var(--black));line-height:1.2;font-weight:700;letter-spacing:-.025em;transition:color .3s ease}h1{font-size:clamp(2.5rem,5vw,4rem);font-weight:800;line-height:1.1;letter-spacing:-.04em;margin-bottom:1.5rem}h2{font-size:clamp(2rem,4vw,3rem);font-weight:700;line-height:1.2;letter-spacing:-.03em;margin-bottom:1.25rem}h3{font-size:clamp(1.5rem,3vw,2.25rem);font-weight:600;line-height:1.3;letter-spacing:-.02em;margin-bottom:1rem}.project-article .content h2{border-bottom:3px solid var(--accent)!important;padding:1rem 0!important;margin:3rem 0 2rem!important;font-size:2rem!important;font-weight:700!important;color:var(--accent)!important;text-transform:uppercase!important;letter-spacing:.05em!important;line-height:1.3}.project-article .content h2:first-of-type{margin-top:2rem!important}.project-article .content h3{margin-top:1.5rem!important;margin-bottom:.5rem!important;font-size:1.5rem!important;font-weight:600;line-height:1.4}h4{font-size:clamp(1.25rem,2.5vw,1.75rem);font-weight:600;line-height:1.4;letter-spacing:-.015em;margin-bottom:.875rem}h5{font-size:clamp(1.125rem,2vw,1.5rem);font-weight:500;line-height:1.4;letter-spacing:-.01em;margin-bottom:.75rem}h6{font-size:1rem;font-weight:500;line-height:1.5;text-transform:uppercase;letter-spacing:.05em;margin-bottom:.5rem}strong,b{font-weight:700}.dark strong,.dark b{color:#fff}a{color:var(--accent);transition:color .3s ease}a:hover{color:var(--accent)}p{margin-bottom:1.5rem;line-height:1.7;font-weight:400}.prose p{margin-bottom:1.75rem;line-height:1.75}.space-y-1>*+*{margin-top:.25rem}.space-y-2>*+*{margin-top:.5rem}.space-y-3>*+*{margin-top:.75rem}.space-y-4>*+*{margin-top:1rem}.space-y-6>*+*{margin-top:1.5rem}.space-y-8>*+*{margin-top:2rem}.space-y-12>*+*{margin-top:3rem}.text-xs{font-size:.75rem;line-height:1.5}.text-sm{font-size:.875rem;line-height:1.5}.text-base{font-size:1rem;line-height:1.6}.text-lg{font-size:1.125rem;line-height:1.6}.text-xl{font-size:1.25rem;line-height:1.5}.text-2xl{font-size:1.5rem;line-height:1.4}.text-3xl{font-size:1.875rem;line-height:1.3}.text-4xl{font-size:2.25rem;line-height:1.2}.font-light{font-weight:300}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.text-purple{color:var(--purple)}.text-green{color:var(--green)}.text-orange{color:var(--orange)}.text-blue{color:var(--accent)}.bg-purple{background-color:var(--purple)}.bg-green{background-color:var(--green)}.bg-orange{background-color:var(--orange)}.bg-blue{background-color:var(--accent)}.bg-purple-light{background-color:var(--purple-light)}.bg-green-light{background-color:var(--green-light)}.bg-orange-light{background-color:var(--orange-light)}.bg-blue-light{background-color:var(--accent-light)}.border-purple{border-color:var(--purple)}.border-green{border-color:var(--green)}.border-orange{border-color:var(--orange)}.border-blue{border-color:var(--accent)}.gradient-primary{background:linear-gradient(135deg,var(--accent),var(--purple))}.gradient-data-science{background:linear-gradient(135deg,var(--purple),#c084fc,#a855f7)}.gradient-homelab{background:linear-gradient(135deg,var(--green),#22c55e,#16a34a)}.gradient-projects{background:linear-gradient(135deg,var(--orange),#fbbf24,#f59e0b)}.gradient-rainbow{background:linear-gradient(135deg,var(--accent),var(--purple),var(--green),var(--orange))}.glass{background:#ffffff1a;backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.2)}.glass-dark{background:#0000001a;backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.1)}.scroll-animate{opacity:0;transform:translateY(60px);transition:all .8s cubic-bezier(.4,0,.2,1)}.scroll-animate.animate-in,.no-js .scroll-animate{opacity:1;transform:translateY(0)}.scroll-animate-delay-1{transition-delay:.1s}.scroll-animate-delay-2{transition-delay:.2s}.scroll-animate-delay-3{transition-delay:.3s}.scroll-animate-delay-4{transition-delay:.4s}.btn-enhanced{position:relative;overflow:hidden;transition:all .3s cubic-bezier(.4,0,.2,1)}.btn-enhanced:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);transition:left .5s ease}.btn-enhanced:hover:before{left:100%}.btn-enhanced:active{transform:scale(.98)}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.float{animation:float 3s ease-in-out infinite}@keyframes pulse-glow{0%,to{box-shadow:0 0 5px rgba(var(--accent-rgb),.5)}50%{box-shadow:0 0 20px rgba(var(--accent-rgb),.8),0 0 30px rgba(var(--accent-rgb),.6)}}.pulse-glow{animation:pulse-glow 2s ease-in-out infinite}.particles-bg{position:relative;overflow:hidden}.particles-bg:before{content:"";position:absolute;inset:0;background-image:radial-gradient(circle at 20% 80%,rgba(var(--accent-rgb),.1) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(var(--purple-rgb),.1) 0%,transparent 50%),radial-gradient(circle at 40% 40%,rgba(var(--green-rgb),.1) 0%,transparent 50%);animation:particle-float 20s ease-in-out infinite;pointer-events:none}@keyframes particle-float{0%,to{transform:translateY(0) rotate(0)}33%{transform:translateY(-20px) rotate(120deg)}66%{transform:translateY(10px) rotate(240deg)}}textarea{width:100%;font-size:16px}input{font-size:16px}table{width:100%}img{max-width:100%;height:auto;border-radius:8px}code{padding:2px 5px;background-color:rgb(var(--gray-light));border-radius:2px;transition:background-color .3s ease}pre{padding:1.5em;border-radius:8px}pre>code{all:unset}blockquote{border-left:4px solid var(--accent);padding:0 0 0 20px;margin:0;font-size:1.333em}hr{border:none;border-top:1px solid rgb(var(--gray-light))}@media (max-width: 768px){body{font-size:16px;line-height:1.6}main{padding:1.5rem 1rem;max-width:calc(100% - 1rem)}h1{font-size:clamp(2rem,8vw,3rem);margin-bottom:1rem}h2{font-size:clamp(1.5rem,6vw,2.25rem);margin-bottom:.875rem}h3{font-size:clamp(1.25rem,5vw,1.75rem);margin-bottom:.75rem}p{margin-bottom:1.25rem;line-height:1.6}}@media (max-width: 480px){body{font-size:15px}main{padding:1rem .75rem}h1{font-size:clamp(1.75rem,10vw,2.5rem)}h2{font-size:clamp(1.375rem,8vw,2rem)}}.sr-only{border:0;padding:0;margin:0;position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);clip-path:inset(50%);white-space:nowrap}.diagram-container{position:relative;margin:2rem 0;text-align:center;overflow:hidden;border-radius:8px;background:var(--bg-secondary);padding:1rem;box-shadow:var(--box-shadow)}.homelab-diagram{width:100%;max-width:1400px;height:auto;display:block;margin:0 auto;border-radius:4px;transition:transform .3s ease}.homelab-diagram:hover{transform:scale(1.01)}@media (max-width: 1024px){.homelab-diagram{max-width:100%}}@media (max-width: 768px){.diagram-container{margin:1rem 0;padding:.5rem;overflow-x:auto;-webkit-overflow-scrolling:touch}.homelab-diagram{min-width:800px}}.diagram-container svg text,.diagram-container svg tspan,.diagram-container svg .text,.diagram-container svg [class*=text],.diagram-container svg [fill*=white],.diagram-container svg [fill*="#fff"],.diagram-container svg [fill*=lightgray],.diagram-container svg [fill*=lightgrey]{fill:#1f2937!important;color:#1f2937!important}.dark .diagram-container{background:var(--gray-dark);box-shadow:0 4px 6px #0000004d}.dark .diagram-container svg text,.dark .diagram-container svg tspan,.dark .diagram-container svg .text,.dark .diagram-container svg [class*=text],.dark .diagram-container svg [fill*=white],.dark .diagram-container svg [fill*="#fff"],.dark .diagram-container svg [fill*=lightgray],.dark .diagram-container svg [fill*=lightgrey]{fill:#f9fafb!important;color:#f9fafb!important}a[data-astro-cid-eimmu3lg]{display:inline-block;text-decoration:none}a[data-astro-cid-eimmu3lg].active{font-weight:bolder;text-decoration:underline}.dark-mode-toggle[data-astro-cid-tcsrer47]{background:none;border:none;cursor:pointer;padding:8px;border-radius:6px;color:rgb(var(--gray-dark));transition:all .2s ease;display:flex;align-items:center;justify-content:center}.dark-mode-toggle[data-astro-cid-tcsrer47]:hover{background:rgba(var(--gray-light),.5);color:rgb(var(--black))}.dark-mode-toggle[data-astro-cid-tcsrer47]:focus{outline:2px solid var(--accent);outline-offset:2px}.sun-icon[data-astro-cid-tcsrer47],.moon-icon[data-astro-cid-tcsrer47]{transition:opacity .2s ease}.moon-icon[data-astro-cid-tcsrer47],.dark .sun-icon[data-astro-cid-tcsrer47]{display:none}.dark .moon-icon[data-astro-cid-tcsrer47]{display:block}@media (max-width: 720px){.dark-mode-toggle[data-astro-cid-tcsrer47]{padding:6px}}header[data-astro-cid-3ef6ksr2]{margin:0;padding:0 1em;background:#fff;box-shadow:0 2px 8px rgba(var(--black),5%);transition:background .3s ease,box-shadow .3s ease;position:fixed;top:0;left:0;right:0;z-index:1000;width:100%}.dark header[data-astro-cid-3ef6ksr2]{background:#111827!important;box-shadow:0 2px 8px #0000004d!important}.dark header[data-astro-cid-3ef6ksr2] h2[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2]{color:#fff!important}.dark header[data-astro-cid-3ef6ksr2] nav[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2]{color:#d1d5db!important}.dark header[data-astro-cid-3ef6ksr2] nav[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2].active{color:#fff!important;border-bottom-color:var(--accent)!important}.dark header[data-astro-cid-3ef6ksr2] .social-links[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2]{color:#d1d5db!important}h2[data-astro-cid-3ef6ksr2]{margin:0;font-size:1em}h2[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2],h2[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2].active{text-decoration:none}nav[data-astro-cid-3ef6ksr2]{display:flex;align-items:center;justify-content:space-between;flex-wrap:nowrap;min-height:60px}nav[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2]{padding:1em .5em;color:var(--black);border-bottom:4px solid transparent;text-decoration:none}nav[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2].active{text-decoration:none;border-bottom-color:var(--accent)}.header-controls[data-astro-cid-3ef6ksr2]{display:flex;align-items:center;gap:.5em}.social-links[data-astro-cid-3ef6ksr2],.social-links[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2]{display:flex}@media (max-width: 720px){header[data-astro-cid-3ef6ksr2]{padding:0 .75em}nav[data-astro-cid-3ef6ksr2]{min-height:60px}h2[data-astro-cid-3ef6ksr2]{font-size:.9em;flex-shrink:0}.internal-links[data-astro-cid-3ef6ksr2]{display:flex;gap:.25em;flex-shrink:1;min-width:0}.internal-links[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2]{padding:.75em .25em;font-size:.85em;white-space:nowrap}.header-controls[data-astro-cid-3ef6ksr2]{gap:.25em;flex-shrink:0}.social-links[data-astro-cid-3ef6ksr2]{display:none}}@media (max-width: 480px){header[data-astro-cid-3ef6ksr2]{padding:0 .5em}h2[data-astro-cid-3ef6ksr2]{font-size:.8em}.internal-links[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2]{padding:.5em .15em;font-size:.8em}}.footer[data-astro-cid-sz7xmlte]{background:var(--bg-secondary);border-top:1px solid var(--border);margin-top:2rem;padding:1.5rem 0 .75rem}.footer-content[data-astro-cid-sz7xmlte]{max-width:1200px;margin:0 auto;padding:0 2rem;display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:1rem}.footer-section[data-astro-cid-sz7xmlte] h3[data-astro-cid-sz7xmlte]{font-size:1.125rem;font-weight:600;margin:0 0 .5rem;color:var(--text-primary)}.social-links[data-astro-cid-sz7xmlte]{display:flex;gap:.5rem}.social-links[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;background:var(--bg-primary);color:var(--text-secondary);text-decoration:none;transition:all .2s ease;border:1px solid var(--border)}.social-links[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]:hover{background:var(--accent);color:#fff;transform:translateY(-2px);box-shadow:0 4px 12px rgba(var(--accent-rgb),.3)}.footer-nav[data-astro-cid-sz7xmlte]{display:flex;flex-direction:column;gap:.375rem}.footer-nav[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]{color:var(--text-secondary);text-decoration:none;transition:color .2s ease}.footer-nav[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]:hover{color:var(--accent)}.footer-bottom[data-astro-cid-sz7xmlte]{max-width:1200px;margin:1rem auto 0;padding:1rem 2rem 0;border-top:1px solid var(--border);text-align:center;color:var(--text-secondary);font-size:.875rem}.footer-bottom[data-astro-cid-sz7xmlte] p[data-astro-cid-sz7xmlte]{margin:.125rem 0}.footer-note[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]{color:var(--accent);text-decoration:none}.footer-note[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]:hover{text-decoration:underline}.version-info[data-astro-cid-sz7xmlte]{font-size:.75rem;color:var(--text-tertiary);margin:.25rem 0 0}.version-number[data-astro-cid-sz7xmlte]{font-family:JetBrains Mono,monospace;font-weight:500;color:var(--accent)}.dark .footer[data-astro-cid-sz7xmlte]{background:#111827;border-top-color:#374151}.dark .footer-section[data-astro-cid-sz7xmlte] h3[data-astro-cid-sz7xmlte]{color:#fff}.dark .social-links[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]{background:#1f2937;border-color:#374151;color:#d1d5db}.dark .footer-nav[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]{color:#d1d5db}.dark .footer-bottom[data-astro-cid-sz7xmlte]{border-top-color:#374151;color:#9ca3af}.dark .version-info[data-astro-cid-sz7xmlte]{color:#6b7280}.dark .version-number[data-astro-cid-sz7xmlte]{color:var(--accent)}@media (max-width: 768px){.footer-content[data-astro-cid-sz7xmlte]{grid-template-columns:1fr;gap:1rem;padding:0 1rem}.footer[data-astro-cid-sz7xmlte]{padding:1.25rem 0 .75rem}.footer-bottom[data-astro-cid-sz7xmlte]{padding:1rem 1rem 0}}
