.banner.onload-content-fade-up .content{-moz-transition:none;-webkit-transition:none;-ms-transition:none;transition:none}body.is-preload .banner.onload-content-fade-up .content{-moz-transform:none;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}.banner.onload-content-fade-down .content{-moz-transition:none;-webkit-transition:none;-ms-transition:none;transition:none}body.is-preload .banner.onload-content-fade-down .content{-moz-transform:none;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}.banner.onload-content-fade-left .content{-moz-transition:none;-webkit-transition:none;-ms-transition:none;transition:none}body.is-preload .banner.onload-content-fade-left .content{-moz-transform:none;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}.banner.onload-content-fade-right .content{-moz-transition:none;-webkit-transition:none;-ms-transition:none;transition:none}body.is-preload .banner.onload-content-fade-right .content{-moz-transform:none;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}.banner.onload-content-fade-in .content{-moz-transition:none;-webkit-transition:none;-ms-transition:none;transition:none}body.is-preload .banner.onload-content-fade-in .content{-moz-transform:none;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}.banner.onload-image-fade-up .image,.banner.onload-image-fade-up .image img{-moz-transition:none;-webkit-transition:none;-ms-transition:none;transition:none}body.is-preload .banner.onload-image-fade-up .image{-moz-transform:none;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}body.is-preload .banner.onload-image-fade-up .image img{opacity:1}.banner.onload-image-fade-down .image,.banner.onload-image-fade-down .image img{-moz-transition:none;-webkit-transition:none;-ms-transition:none;transition:none}body.is-preload .banner.onload-image-fade-down .image{-moz-transform:none;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}body.is-preload .banner.onload-image-fade-down .image img{opacity:1}.banner.onload-image-fade-left .image,.banner.onload-image-fade-left .image img{-moz-transition:none;-webkit-transition:none;-ms-transition:none;transition:none}body.is-preload .banner.onload-image-fade-left .image{-moz-transform:none;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}body.is-preload .banner.onload-image-fade-left .image img{opacity:1}.banner.onload-image-fade-right .image,.banner.onload-image-fade-right .image img{-moz-transition:none;-webkit-transition:none;-ms-transition:none;transition:none}body.is-preload .banner.onload-image-fade-right .image{-moz-transform:none;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}body.is-preload .banner.onload-image-fade-right .image img{opacity:1}.banner.onload-image-fade-in .image img{-moz-transition:none;-webkit-transition:none;-ms-transition:none;transition:none}body.is-preload .banner.onload-image-fade-in .image img{opacity:1}.banner.onscroll-content-fade-up .content{-moz-transition:none;-webkit-transition:none;-ms-transition:none;transition:none}.banner.onscroll-content-fade-up.is-inactive .content{-moz-transform:none;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}.banner.onscroll-content-fade-down .content{-moz-transition:none;-webkit-transition:none;-ms-transition:none;transition:none}.banner.onscroll-content-fade-down.is-inactive .content{-moz-transform:none;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}.banner.onscroll-content-fade-left .content{-moz-transition:none;-webkit-transition:none;-ms-transition:none;transition:none}.banner.onscroll-content-fade-left.is-inactive .content{-moz-transform:none;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}.banner.onscroll-content-fade-right .content{-moz-transition:none;-webkit-transition:none;-ms-transition:none;transition:none}.banner.onscroll-content-fade-right.is-inactive .content{-moz-transform:none;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}.banner.onscroll-content-fade-in .content{-moz-transition:none;-webkit-transition:none;-ms-transition:none;transition:none}.banner.onscroll-content-fade-in.is-inactive .content{-moz-transform:none;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}.banner.onscroll-image-fade-up .image,.banner.onscroll-image-fade-up .image img{-moz-transition:none;-webkit-transition:none;-ms-transition:none;transition:none}.banner.onscroll-image-fade-up.is-inactive .image{-moz-transform:none;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}.banner.onscroll-image-fade-up.is-inactive .image img{opacity:1}.banner.onscroll-image-fade-down .image,.banner.onscroll-image-fade-down .image img{-moz-transition:none;-webkit-transition:none;-ms-transition:none;transition:none}.banner.onscroll-image-fade-down.is-inactive .image{-moz-transform:none;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}.banner.onscroll-image-fade-down.is-inactive .image img{opacity:1}.banner.onscroll-image-fade-left .image,.banner.onscroll-image-fade-left .image img{-moz-transition:none;-webkit-transition:none;-ms-transition:none;transition:none}.banner.onscroll-image-fade-left.is-inactive .image{-moz-transform:none;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}.banner.onscroll-image-fade-left.is-inactive .image img{opacity:1}.banner.onscroll-image-fade-right .image,.banner.onscroll-image-fade-right .image img{-moz-transition:none;-webkit-transition:none;-ms-transition:none;transition:none}.banner.onscroll-image-fade-right.is-inactive .image{-moz-transform:none;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}.banner.onscroll-image-fade-right.is-inactive .image img{opacity:1}.banner.onscroll-image-fade-in .image img{-moz-transition:none;-webkit-transition:none;-ms-transition:none;transition:none}.banner.onscroll-image-fade-in.is-inactive .image img{opacity:1}:root{--bg-main: #1F1F1F;--bg-card: #1F1F1F;--bg-panel: #181818;--text-main: #CCCCCC;--text-muted: #858585;--syntax-keyword: #569CD6;--syntax-control: #C586C0;--syntax-string: #CE9178;--syntax-function: #DCDCAA;--syntax-variable: #9CDCFE;--syntax-comment: #6A9955;--syntax-class: #4EC9B0;--text-accent: var(--syntax-keyword);--text-string: var(--syntax-string);--text-class: var(--syntax-class);--accent-primary: #0078D4;--border-color: #2B2D31;--border-light: #333333;--font-mono: "Menlo", "Monaco", "Consolas", "Courier New", monospace;--header-height: 80px;--grid-gap: 1px}*,*:before,*:after{box-sizing:border-box}html,body{font-family:var(--font-mono);background-color:var(--border-color);color:var(--text-main);margin:0;padding:0;font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;overflow-x:hidden}body:before{content:" ";display:block;position:fixed;inset:0;pointer-events:none;z-index:9999;background:linear-gradient(#12101000 50%,#00000008 50%),radial-gradient(circle at center,transparent 75%,rgba(0,0,0,.2) 100%);background-size:100% 4px,100% 100%}h1,h2,h3,h4,h5,h6{font-family:var(--font-mono);font-weight:500;margin:0;line-height:1.2;text-transform:none;letter-spacing:0}.dud{color:var(--text-class);opacity:.7}h1{font-size:3rem;font-weight:700}h2{font-size:1.5rem;color:var(--text-muted)}a{color:inherit;text-decoration:none;cursor:pointer}p{margin:0 0 1rem}.kwd{color:var(--syntax-keyword)}.ctl{color:var(--syntax-control)}.str{color:var(--syntax-string)}.fn{color:var(--syntax-function)}.var{color:var(--syntax-variable)}.cls{color:var(--syntax-class)}.com{color:var(--syntax-comment)}.text-accent{color:var(--text-accent)}.text-muted{color:var(--text-muted)}.uppercase{text-transform:uppercase}.grid-container{display:grid;grid-template-columns:repeat(12,1fr);gap:var(--grid-gap);background-color:var(--border-color);width:100%;max-width:1080px;margin:0 auto;min-height:100vh}.grid-cell{background-color:var(--bg-main);padding:2rem;position:relative;background-image:linear-gradient(90deg,transparent 95%,rgba(255,255,255,.01) 95%);background-size:20px 100%}.btn{display:inline-flex;align-items:center;gap:.5rem;padding:.75rem 1.5rem;border:1px solid var(--accent-primary);border-radius:2px;background:#0078d41a;color:var(--text-main);font-family:var(--font-mono);font-size:.9rem;text-transform:none;transition:all .2s ease}.btn:hover{background:var(--accent-primary);color:#fff;border-color:var(--accent-primary)}.btn-arrow:after{content:"→";transition:transform .2s}.btn:hover .btn-arrow:after{transform:translate(4px)}.hero-cell{grid-column:span 12;min-height:80vh;display:flex;flex-direction:column;justify-content:center;padding:4rem}.hero-title{font-size:4vw;max-width:80%;margin-bottom:30px}.hero-meta{display:flex;gap:2rem;color:var(--text-muted);font-size:.8rem}.meta-item{display:flex;flex-direction:column;gap:.25rem}.meta-label{color:var(--text-accent);font-size:.7rem}.project-card{grid-column:span 6;min-height:400px;display:flex;flex-direction:column;justify-content:space-between}.project-wrapper{display:contents}.project-wrapper>.project-card:last-child:nth-child(odd){grid-column:span 12}.project-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:2rem}.project-index{font-family:var(--font-mono);color:var(--text-accent);font-size:.9rem}.project-image{width:100%;height:200px;background-color:#2a2a2a;margin-bottom:1.5rem;overflow:hidden;border:1px solid var(--border-light)}.project-image img{width:100%;height:100%;object-fit:cover;opacity:.8;transition:opacity .3s ease}.project-card:hover .project-image img{opacity:1}.footer-cell{grid-column:span 12;padding:4rem;display:flex;justify-content:space-between;align-items:center}@media(max-width:768px){.grid-container{display:flex;flex-direction:column}.hero-cell{padding:2rem}.hero-title{font-size:2.5rem;max-width:100%;word-break:break-word}.footer-cell{padding:2rem;flex-direction:column;gap:2rem;text-align:center}.project-card{min-height:auto}}.nav-root[data-astro-cid-3ef6ksr2]{width:100%;background:var(--bg-main);padding:0 1rem;border-bottom:1px solid var(--border-color);position:sticky;top:0;z-index:999}.site-nav[data-astro-cid-3ef6ksr2]{display:flex;align-items:center;justify-content:space-between;max-width:100%;height:var(--header-height)}.logo[data-astro-cid-3ef6ksr2] h2[data-astro-cid-3ef6ksr2]{margin:0;font-size:1.5rem;font-family:var(--font-mono);text-transform:uppercase;letter-spacing:-.02em}.logo[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2]{text-decoration:none;color:var(--text-main)}.nav-links[data-astro-cid-3ef6ksr2]{list-style:none;display:flex;gap:2rem;margin:0;padding:0}.nav-links[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2]{text-decoration:none;color:var(--text-muted);font-size:1rem;text-transform:uppercase;font-family:var(--font-mono);transition:color .2s}.nav-links[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2]:hover,.nav-links[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2].active{color:var(--text-accent)}.burger[data-astro-cid-3ef6ksr2]{display:none;flex-direction:column;justify-content:center;width:30px;height:30px;gap:5px;color:var(--text-main);cursor:pointer;padding:0}.burger[data-astro-cid-3ef6ksr2] .line[data-astro-cid-3ef6ksr2]{width:100%;height:2px;background:currentColor;border-radius:0}@media(max-width:768px){.burger[data-astro-cid-3ef6ksr2]{display:flex}.nav-links[data-astro-cid-3ef6ksr2]{position:fixed;top:var(--header-height);right:0;width:100%;height:calc(100vh - var(--header-height));background:var(--bg-main);flex-direction:column;align-items:center;justify-content:center;padding:2rem;gap:2rem;transform:translate(100%);transition:transform .3s ease;border-left:1px solid var(--border-color);z-index:998}.nav-links[data-astro-cid-3ef6ksr2].nav-open{transform:translate(0)}.burger[data-astro-cid-3ef6ksr2].toggle .line1[data-astro-cid-3ef6ksr2]{transform:translateY(7px) rotate(45deg)}.burger[data-astro-cid-3ef6ksr2].toggle .line2[data-astro-cid-3ef6ksr2]{opacity:0}.burger[data-astro-cid-3ef6ksr2].toggle .line3[data-astro-cid-3ef6ksr2]{transform:translateY(-7px) rotate(-45deg)}}.footer-root[data-astro-cid-sz7xmlte]{background:var(--bg-main);color:var(--text-muted);padding:4rem 2rem;border-top:1px solid var(--border-color);font-family:var(--font-mono)}.footer-content[data-astro-cid-sz7xmlte]{max-width:100%;margin:0 auto}.footer-top[data-astro-cid-sz7xmlte]{display:flex;flex-direction:column;align-items:center;text-align:center;gap:3rem;padding-bottom:2rem;border-bottom:1px solid var(--border-color);margin-bottom:2rem}.footer-brand[data-astro-cid-sz7xmlte]{max-width:600px;text-align:center}.footer-brand[data-astro-cid-sz7xmlte] h3[data-astro-cid-sz7xmlte]{color:var(--text-main);font-size:1rem;margin-bottom:1rem;letter-spacing:-.02em}.footer-brand[data-astro-cid-sz7xmlte] p[data-astro-cid-sz7xmlte]{color:var(--text-muted);font-size:.9rem;line-height:1.5}.footer-social[data-astro-cid-sz7xmlte] h3[data-astro-cid-sz7xmlte]{color:var(--text-main);font-size:1rem;margin-bottom:1rem;letter-spacing:-.02em}.social-links[data-astro-cid-sz7xmlte]{display:flex;justify-content:center;gap:1.5rem}.icon-link[data-astro-cid-sz7xmlte]{color:var(--text-muted);font-size:1.2rem;transition:color .3s ease}.icon-link[data-astro-cid-sz7xmlte]:hover{color:var(--text-accent)}.footer-bottom[data-astro-cid-sz7xmlte]{text-align:center;color:var(--text-muted);font-size:.8rem;text-transform:uppercase}@media(max-width:768px){.footer-top[data-astro-cid-sz7xmlte]{gap:2rem}}
