@font-face{font-family:Poppins;font-weight:300;font-style:normal;font-display:swap;src:url(../fonts/Poppins-Light.woff2) format("woff2")}@font-face{font-family:Poppins;font-weight:400;font-style:normal;font-display:swap;src:url(../fonts/Poppins-Regular.woff2) format("woff2")}@font-face{font-family:Poppins;font-weight:700;font-style:normal;font-display:swap;src:url(../fonts/Poppins-Bold.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;src:url(../fonts/JetBrainsMono-Regular.woff2)}:root{--bg: #EDEAE3;--bg-surface: #FFFFFF;--bg-dark: #111111;--border: #111111;--border-dim: rgba(17, 17, 17, .18);--text: #111111;--text-muted: rgb(17 17 17 / .76);--text-on-dark: rgb(255 255 255 / .85);--text-muted-on-dark: rgb(255 255 255 / .6);--accent: #FFE600;--text-shadow: 2px 2px 0 #111111;--text-shadow-white: 2px 2px 0 white;--text-shadow-accent: 2px 2px 0 #FFE600;--shadow: 4px 4px 0 #111111;--shadow-lg: 6px 6px 0 #111111;--shadow-xl: 8px 8px 0 #111111;--shadow-accent: 4px 4px 0 #FFE600;--shadow-accent-lg: 6px 6px 0 #FFE600;--shadow-accent-xl: 8px 8px 0 #FFE600;--font-sans: "Poppins", system-ui, sans-serif;--font-mono: "JetBrains Mono", "Fira Code", monospace;--max-w: 1100px}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:auto}body{font-family:var(--font-sans);font-weight:300;background-color:var(--bg);color:var(--text);min-height:100vh;line-height:1.6}html{font-size:16px}h1{font-size:2.986rem}h2{font-size:2.488rem}h3{font-size:2.074rem}h4{font-size:1.728rem}h5{font-size:1.44rem}h6{font-size:1.2rem}h1,h2,h3,h4,h5,h6{line-height:1.2}p{font-size:1rem;line-height:1.7}small{font-size:.833rem}.text-lg{font-size:1.125rem;line-height:1.6}.text-sm{font-size:.875rem;line-height:1.6}.text-xs{font-size:.75rem;line-height:1.5}.text-2xs{font-size:.6875rem;line-height:1.4}.font-mono{font-family:var(--font-mono)}.btn{display:inline-flex;align-items:center;padding:10px 24px;border-radius:0;font-family:var(--font-mono);font-weight:700;text-decoration:none;text-transform:uppercase;letter-spacing:1px;cursor:pointer;transition:transform .1s,box-shadow .1s;border:2px solid transparent}.btn-primary{background:var(--accent);color:#000;border-color:var(--accent);box-shadow:4px 4px #fff}.btn-primary:hover{transform:translate(-2px,-2px);box-shadow:6px 6px #fff}.btn-outline{background:transparent;color:#fff;border-color:#fff;box-shadow:4px 4px #fff}.btn-outline:hover{transform:translate(-2px,-2px);box-shadow:6px 6px #fff;background:#fff;color:var(--bg-dark)}.btn-ghost{background:transparent;color:var(--text-muted-on-dark);border-color:transparent;box-shadow:none}.btn-ghost:hover{color:var(--accent)}.section{padding:96px 32px;background:var(--bg)}.section:nth-of-type(2n){background:#f5f2ea}.container{max-width:var(--max-w);margin:0 auto}.section-heading{display:inline-block;font-family:var(--font-mono);font-weight:700;color:#000;background:var(--accent);padding:4px 14px;text-transform:uppercase;letter-spacing:3px;margin-bottom:48px}@media (max-width: 768px){.section{padding:64px 20px}}@media (max-width: 768px){h1{font-size:2.074rem}h2{font-size:1.728rem}h3{font-size:1.44rem}h4{font-size:1.2rem}h5{font-size:1.125rem}h6{font-size:1rem}.section-heading{margin-bottom:32px}}@media (max-width: 480px){html{font-size:15px}h1{font-size:1.728rem}h2{font-size:1.44rem}h3{font-size:1.2rem}h4{font-size:1.125rem}h5{font-size:1rem}h6{font-size:.875rem}.text-lg{font-size:1rem}.text-sm{font-size:.8125rem}.text-xs{font-size:.6875rem}.text-2xs{font-size:.625rem}.section-heading{margin-bottom:24px}}.nav{position:fixed;top:0;left:0;right:0;z-index:100;display:flex;align-items:stretch;justify-content:space-between;min-height:56px;padding:0 0 0 32px;background:#111;border-bottom:4px solid var(--accent)}.nav-brand{display:flex;align-items:center;font-family:var(--font-mono);font-weight:700;color:var(--text-on-dark);text-decoration:none}.nav-brand:hover{color:var(--accent)}.nav-links{display:flex;align-self:stretch;border-left:2px solid rgba(255,255,255,.2)}.nav-link{display:flex;align-items:center;padding:0 18px;font-family:var(--font-mono);font-weight:700;color:var(--text-on-dark);text-decoration:none;text-transform:uppercase;letter-spacing:1px;border-right:2px solid rgba(255,255,255,.2);transition:background .1s,color .1s;white-space:nowrap}.nav-link:last-child{border-right:none}.nav-link:hover{background:var(--accent);color:#000}.nav-hamburger{display:none;align-items:center;justify-content:center;align-self:stretch;padding:0 22px;background:none;border:none;border-left:2px solid rgba(255,255,255,.2);color:var(--text-on-dark);font-family:var(--font-mono);line-height:1;cursor:pointer;transition:background .1s,color .1s;flex-shrink:0}.nav-hamburger:hover{background:var(--accent);color:#000}.nav.light{background:var(--bg);border-bottom-color:var(--border)}.nav.light .nav-brand{color:var(--text)}.nav.light .nav-brand:hover{color:var(--accent)}.nav.light .nav-links{border-left-color:var(--border)}.nav.light .nav-link{border-right-color:var(--border);color:var(--text)}.nav.light .nav-link:hover{background:#111;color:var(--accent)}.nav.light .nav-hamburger{border-left-color:var(--border);color:var(--text)}.nav.light .nav-hamburger:hover{background:#111;color:var(--accent)}.blink{color:var(--accent);animation:blink 1.2s step-end infinite}.nav.light .blink{color:var(--text)}@keyframes blink{0%,to{opacity:1}50%{opacity:0}}@media (max-width: 900px){.nav{padding:0 0 0 24px}.nav-hamburger{display:flex}.nav--lh{padding:0 24px 0 0}.nav--lh .nav-hamburger{order:-1;border-left:none;border-right:2px solid rgba(255,255,255,.2)}.nav.light.nav--lh .nav-hamburger{border-right-color:var(--border);border-left:none}.nav-links{position:absolute;top:100%;left:0;right:0;flex-direction:column;background:#111;border-left:none;z-index:99;max-height:0;overflow:hidden;transition:max-height .25s ease;border-bottom:2px solid var(--accent);border-top:2px solid var(--accent)}.nav-links--open{max-height:500px}.nav-link{padding:16px 24px;border-right:none;border-bottom:1px solid rgba(255,255,255,.12);width:100%}.nav-link:last-child{border-bottom:none}.nav--lh .nav-link{justify-content:flex-end;text-align:right}.nav.light .nav-links{background:var(--bg);border-left:none;border-bottom:2px solid var(--border);border-top:2px solid var(--border)}.nav.light .nav-link{border-right:none;border-bottom-color:var(--border-dim)}.nav.light .nav-link:last-child{border-bottom:none}}@media (max-width: 600px){.nav{top:auto;bottom:0;border-bottom:none;border-top:4px solid var(--accent)}.nav.light{border-bottom:none;border-top-color:var(--border)}.nav-links{top:auto;bottom:100%;border-bottom:none;border-top:2px solid var(--accent)}.nav.light .nav-links{border-bottom:none;border-top:2px solid var(--border)}}@media (max-width: 480px){.nav{padding:0 0 0 20px}.nav--lh{padding:0 20px 0 0}.nav-hamburger{padding:0 18px}}.hero{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:100px 32px 60px;position:relative;background-image:url(../images/me.jpg);background-size:cover;background-position:center;background-attachment:fixed}.hero:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:#1111118c;z-index:0}.hero-inner{position:relative;z-index:1;max-width:780px}.hero-greeting{display:inline-block;font-family:var(--font-mono);font-weight:700;color:#000;background:var(--accent);padding:5px 16px;text-transform:uppercase;letter-spacing:3px;margin-bottom:28px}.hero-name{font-size:clamp(54px,9vw,104px);font-weight:700;line-height:1;letter-spacing:-2px;margin-bottom:20px;color:#fff}.hero-role{font-family:var(--font-mono);font-weight:700;color:var(--text-muted-on-dark);text-transform:uppercase;letter-spacing:3px;margin-bottom:24px}.hero-bio{color:var(--text-muted-on-dark);line-height:1.8;margin-bottom:40px}.hero-cta{display:flex;gap:16px;justify-content:center;flex-wrap:wrap}@media (max-width: 768px){.hero{padding:80px 20px 60px;background-attachment:scroll}}@media (max-width: 600px){.hero{padding:24px 20px 100px}}.tag{font-family:var(--font-mono);padding:3px 9px;border-radius:0;background:#1111110f;border:1px solid var(--border-dim);color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.tag-angular{color:#c0143c;border-color:#c0143c4d;background:#c0143c12}.tag-vue{color:#2d8f5e;border-color:#2d8f5e4d;background:#2d8f5e12}.tag-ts{color:#1d6fa4;border-color:#1d6fa44d;background:#1d6fa412}.tag-flutter{color:#0277bd;border-color:#0277bd4d;background:#0277bd12}.tag-node{color:#2e7d32;border-color:#2e7d324d;background:#2e7d3212}.tag-dotnet{color:#6a1b9a;border-color:#6a1b9a4d;background:#6a1b9a12}.tag-php{color:#4527a0;border-color:#4527a04d;background:#4527a012}.tag-python{color:#b07a00;border-color:#b07a004d;background:#b07a0012}.tag-docker{color:#0d47a1;border-color:#0d47a14d;background:#0d47a112}.tag-cpp,.tag-dart{color:#006064;border-color:#0060644d;background:#00606412}.tag-opencv{color:#bf360c;border-color:#bf360c4d;background:#bf360c12}.tag-react{color:#0e7490;border-color:#0e74904d;background:#0e749012}.tag-nextjs{color:#3730a3;border-color:#3730a34d;background:#3730a312}.tag-nestjs{color:#b91c6b;border-color:#b91c6b4d;background:#b91c6b12}.tag-kotlin{color:#6d28d9;border-color:#6d28d94d;background:#6d28d912}.tag-spring{color:#166534;border-color:#1665344d;background:#16653412}.tag-gcp{color:#1558b0;border-color:#1558b04d;background:#1558b012}.tag-csharp{color:#7c2d9e;border-color:#7c2d9e4d;background:#7c2d9e12}.tag-wpf{color:#1565c0;border-color:#1565c04d;background:#1565c012}.tag-express{color:#78350f;border-color:#78350f4d;background:#78350f12}.tag-js{color:#b45309;border-color:#b453094d;background:#b4530912}.tag-aws{color:#c04e00;border-color:#c04e004d;background:#c04e0012}.tag-scss{color:#a0306a;border-color:#a0306a4d;background:#a0306a12}.tag-bootstrap{color:#6f42c1;border-color:#6f42c14d;background:#6f42c112}.tag-strapi{color:#4945ff;border-color:#4945ff4d;background:#4945ff12}.tag-mongodb{color:#00684a;border-color:#00684a4d;background:#00684a12}.tag-postgresql{color:#336791;border-color:#3367914d;background:#33679112}.tag-mysql{color:#00618a;border-color:#00618a4d;background:#00618a12}.tag-java{color:#c0392b;border-color:#c0392b4d;background:#c0392b12}.tag-openai{color:#0f7460;border-color:#0f74604d;background:#0f746012}.tag-figma{color:#a259ff;border-color:#a259ff4d;background:#a259ff12}.tag-jenkins{color:#d33833;border-color:#d338334d;background:#d3383312}.tag-html{color:#c0391e;border-color:#c0391e4d;background:#c0391e12}.tag-css{color:#264de4;border-color:#264de44d;background:#264de412}.tag-git{color:#c4411c;border-color:#c4411c4d;background:#c4411c12}.tag-webpack{color:#1c78c0;border-color:#1c78c04d;background:#1c78c012}.tag-rxjs{color:#b7178c;border-color:#b7178c4d;background:#b7178c12}.tag-swagger{color:#3b8e3e;border-color:#3b8e3e4d;background:#3b8e3e12}.tag-jest{color:#b71c29;border-color:#b71c294d;background:#b71c2912}.tag-jira{color:#0052cc;border-color:#0052cc4d;background:#0052cc12}.tag-cicd{color:#d97706;border-color:#d977064d;background:#d9770612}.tag-microservices{color:#0f766e;border-color:#0f766e4d;background:#0f766e12}.tag-english{color:#1d4ed8;border-color:#1d4ed84d;background:#1d4ed812}.tag-rest{color:#0369a1;border-color:#0369a14d;background:#0369a112}.tag-wcag{color:#005a9c;border-color:#005a9c4d;background:#005a9c12}.tag-agile{color:#4d7c0f;border-color:#4d7c0f4d;background:#4d7c0f12}.tag-devops{color:#9a3412;border-color:#9a34124d;background:#9a341212}.tag-design-patterns{color:#047857;border-color:#0478574d;background:#04785712}.tag-testing{color:#c026d3;border-color:#c026d34d;background:#c026d312}.tag-selected{opacity:1;box-shadow:2px 2px 0 var(--border)}.tag-angular.tag-selected{box-shadow:3px 3px #c0143c;border:1px solid #c0143c}.tag-vue.tag-selected{color:#2d8f5e;box-shadow:3px 3px #2d8f5e;border:1px solid #2d8f5e}.tag-ts.tag-selected{color:#1d6fa4;box-shadow:3px 3px #1d6fa4;border:1px solid #1d6fa4}.tag-flutter.tag-selected{color:#0277bd;box-shadow:3px 3px #0277bd;border:1px solid #0277bd}.tag-node.tag-selected{color:#2e7d32;box-shadow:3px 3px #2e7d32;border:1px solid #2e7d32}.tag-dotnet.tag-selected{color:#6a1b9a;box-shadow:3px 3px #6a1b9a;border:1px solid #6a1b9a}.tag-php.tag-selected{color:#4527a0;box-shadow:3px 3px #4527a0;border:1px solid #4527a0}.tag-python.tag-selected{color:#b07a00;box-shadow:3px 3px #b07a00;border:1px solid #b07a00}.tag-docker.tag-selected{color:#0d47a1;box-shadow:3px 3px #0d47a1;border:1px solid #0d47a1}.tag-cpp.tag-selected,.tag-dart.tag-selected{color:#006064;box-shadow:3px 3px #006064;border:1px solid #006064}.tag-opencv.tag-selected{color:#bf360c;box-shadow:3px 3px #bf360c;border:1px solid #bf360c}.tag-react.tag-selected{color:#0e7490;box-shadow:3px 3px #0e7490;border:1px solid #0e7490}.tag-nextjs.tag-selected{color:#3730a3;box-shadow:3px 3px #3730a3;border:1px solid #3730a3}.tag-nestjs.tag-selected{color:#b91c6b;box-shadow:3px 3px #b91c6b;border:1px solid #b91c6b}.tag-kotlin.tag-selected{color:#6d28d9;box-shadow:3px 3px #6d28d9;border:1px solid #6d28d9}.tag-spring.tag-selected{color:#166534;box-shadow:3px 3px #166534;border:1px solid #166534}.tag-gcp.tag-selected{color:#1558b0;box-shadow:3px 3px #1558b0;border:1px solid #1558b0}.tag-csharp.tag-selected{color:#7c2d9e;box-shadow:3px 3px #7c2d9e;border:1px solid #7c2d9e}.tag-wpf.tag-selected{color:#1565c0;box-shadow:3px 3px #1565c0;border:1px solid #1565c0}.tag-express.tag-selected{color:#78350f;box-shadow:3px 3px #78350f;border:1px solid #78350f}.tag-js.tag-selected{color:#b45309;box-shadow:3px 3px #b45309;border:1px solid #b45309}.tag-aws.tag-selected{color:#c04e00;box-shadow:3px 3px #c04e00;border:1px solid #c04e00}.tag-scss.tag-selected{color:#a0306a;box-shadow:3px 3px #a0306a;border:1px solid #a0306a}.tag-bootstrap.tag-selected{color:#6f42c1;box-shadow:3px 3px #6f42c1;border:1px solid #6f42c1}.tag-strapi.tag-selected{color:#4945ff;box-shadow:3px 3px #4945ff;border:1px solid #4945ff}.tag-mongodb.tag-selected{color:#00684a;box-shadow:3px 3px #00684a;border:1px solid #00684a}.tag-postgresql.tag-selected{color:#336791;box-shadow:3px 3px #336791;border:1px solid #336791}.tag-mysql.tag-selected{color:#00618a;box-shadow:3px 3px #00618a;border:1px solid #00618a}.tag-java.tag-selected{color:#c0392b;box-shadow:3px 3px #c0392b;border:1px solid #c0392b}.tag-openai.tag-selected{color:#0f7460;box-shadow:3px 3px #0f7460;border:1px solid #0f7460}.tag-figma.tag-selected{color:#a259ff;box-shadow:3px 3px #a259ff;border:1px solid #a259ff}.tag-jenkins.tag-selected{color:#d33833;box-shadow:3px 3px #d33833;border:1px solid #d33833}.tag-html.tag-selected{color:#c0391e;box-shadow:3px 3px #c0391e;border:1px solid #c0391e}.tag-css.tag-selected{color:#264de4;box-shadow:3px 3px #264de4;border:1px solid #264de4}.tag-git.tag-selected{color:#c4411c;box-shadow:3px 3px #c4411c;border:1px solid #c4411c}.tag-webpack.tag-selected{color:#1c78c0;box-shadow:3px 3px #1c78c0;border:1px solid #1c78c0}.tag-rxjs.tag-selected{color:#b7178c;box-shadow:3px 3px #b7178c;border:1px solid #b7178c}.tag-swagger.tag-selected{color:#3b8e3e;box-shadow:3px 3px #3b8e3e;border:1px solid #3b8e3e}.tag-jest.tag-selected{color:#b71c29;box-shadow:3px 3px #b71c29;border:1px solid #b71c29}.tag-jira.tag-selected{color:#0052cc;box-shadow:3px 3px #0052cc;border:1px solid #0052cc}.tag-cicd.tag-selected{color:#d97706;box-shadow:3px 3px #d97706;border:1px solid #d97706}.tag-microservices.tag-selected{color:#0f766e;box-shadow:3px 3px #0f766e;border:1px solid #0f766e}.tag-english.tag-selected{color:#1d4ed8;box-shadow:3px 3px #1d4ed8;border:1px solid #1d4ed8}.tag-rest.tag-selected{color:#0369a1;box-shadow:3px 3px #0369a1;border:1px solid #0369a1}.tag-wcag.tag-selected{color:#005a9c;box-shadow:3px 3px #005a9c;border:1px solid #005a9c}.tag-agile.tag-selected{color:#4d7c0f;box-shadow:3px 3px #4d7c0f;border:1px solid #4d7c0f}.tag-devops.tag-selected{color:#9a3412;box-shadow:3px 3px #9a3412;border:1px solid #9a3412}.tag-design-patterns.tag-selected{color:#047857;box-shadow:3px 3px #047857;border:1px solid #047857}.tag-testing.tag-selected{color:#c026d3;box-shadow:3px 3px #c026d3;border:1px solid #c026d3}.skills{display:flex;flex-direction:column;gap:24px}.skill-category{font-family:var(--font-mono);font-weight:700;color:var(--text);text-transform:uppercase;letter-spacing:2px;margin-bottom:10px}.skill-tags{display:flex;flex-wrap:wrap;gap:8px}.about-grid{display:grid;grid-template-columns:1fr 1fr;gap:64px;align-items:start}.about-text p{color:var(--text-muted);line-height:1.8;margin-bottom:16px}.about-text p:last-child{margin-bottom:0}@media (max-width: 768px){.about-grid{grid-template-columns:1fr;gap:40px}}@keyframes lb-overlay-in{0%{opacity:0}to{opacity:1}}@keyframes lb-overlay-out{0%{opacity:1}to{opacity:0}}@keyframes lb-scale-in{0%{opacity:0;transform:scale(.82)}to{opacity:1;transform:scale(1)}}@keyframes lb-scale-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.82)}}@keyframes lb-slide-from-right{0%{opacity:0;transform:translate(56px) scale(.96)}to{opacity:1;transform:translate(0) scale(1)}}@keyframes lb-slide-from-left{0%{opacity:0;transform:translate(-56px) scale(.96)}to{opacity:1;transform:translate(0) scale(1)}}.lightbox-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;background:#111111f2;display:flex;align-items:center;justify-content:center;padding:8px;animation:lb-overlay-in .22s ease both}.lightbox-overlay.closing{animation:lb-overlay-out .22s ease both}.lightbox-content{display:flex;flex-direction:column;align-items:center;max-width:96vw;max-height:94vh;animation:lb-scale-in .22s cubic-bezier(.22,1,.36,1) both}.lightbox-content.closing{animation:lb-scale-out .22s cubic-bezier(.55,0,.45,1) both}.lightbox-img{max-width:100%;max-height:calc(94vh - 72px);object-fit:contain;display:block;border:2px solid var(--border);box-shadow:var(--shadow-lg)}.lightbox-img--next{animation:lb-slide-from-right .26s cubic-bezier(.22,1,.36,1) both}.lightbox-img--prev{animation:lb-slide-from-left .26s cubic-bezier(.22,1,.36,1) both}.lightbox-caption{font-family:var(--font-mono);color:#fff9;text-transform:uppercase;letter-spacing:1px;margin-top:12px}.lightbox-close{position:fixed;top:20px;right:24px;background:var(--accent);border:2px solid var(--border);box-shadow:var(--shadow);font-family:var(--font-mono);font-weight:700;color:var(--text);width:44px;height:44px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:transform .1s,box-shadow .1s}.lightbox-close:hover{transform:translate(-2px,-2px);box-shadow:var(--shadow-lg)}.lightbox-nav{position:fixed;top:50%;transform:translateY(-50%);background:var(--bg-surface);border:2px solid var(--border);box-shadow:var(--shadow);font-family:var(--font-mono);font-weight:700;color:var(--text);width:48px;height:48px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:transform .1s,box-shadow .1s;z-index:10}.lightbox-nav:hover{transform:translateY(-50%) translate(-2px,-2px);box-shadow:var(--shadow-lg)}.lightbox-nav--prev{left:16px}.lightbox-nav--next{right:16px}.lightbox-counter{position:fixed;bottom:20px;left:50%;transform:translate(-50%);font-family:var(--font-mono);font-weight:700;color:#ffffff80;text-transform:uppercase;letter-spacing:2px}.gallery-heading{display:inline-block;font-family:var(--font-mono);font-weight:700;color:#000;background:var(--accent);padding:4px 14px;text-transform:uppercase;letter-spacing:3px;margin-bottom:24px}.gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:40px;padding:12px 8px}.gallery-item{display:flex;flex-direction:column;background:#fff;padding:15px 15px 45px;border:1px solid;box-shadow:4px 4px #111;transition:transform .2s,box-shadow .2s;cursor:pointer;position:relative;text-align:left;-webkit-appearance:none;-moz-appearance:none;appearance:none}.gallery-item:hover{box-shadow:6px 6px #111;z-index:2}.gallery-item img{width:100%;aspect-ratio:1;object-fit:cover;display:block;border:1px solid #707070}.gallery-item-caption{position:absolute;bottom:0;left:0;right:0;padding:10px 10px 12px;font-family:var(--font-mono);color:#555;text-align:center;letter-spacing:.3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gallery--compact .gallery-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:24px;padding:6px 4px}@media (max-width: 768px){.gallery-grid{grid-template-columns:1fr 1fr}}.swipe-gallery{border:2px solid var(--border);box-shadow:var(--shadow);overflow:hidden;margin-top:4px;user-select:none;-webkit-user-select:none}.swipe-gallery__viewport{overflow:hidden;touch-action:pan-y;cursor:grab;aspect-ratio:1}.swipe-gallery__viewport:active{cursor:grabbing}.swipe-gallery__strip{display:flex;height:100%;will-change:transform}.swipe-gallery__frame{flex-shrink:0;height:100%;overflow:hidden}.swipe-gallery__frame img{width:100%;height:100%;object-fit:cover;display:block;pointer-events:none}.swipe-gallery__caption{padding:6px 12px;font-family:var(--font-mono);color:var(--text-muted);border-top:2px solid var(--border);background:var(--bg-surface);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;letter-spacing:.3px}.swipe-gallery__dots{display:flex;justify-content:center;align-items:center;gap:6px;padding:8px 12px;background:var(--bg-surface);border-top:1px solid var(--border-dim)}.swipe-gallery__dot{width:8px;height:8px;background:var(--border-dim);border:2px solid var(--border);padding:0;cursor:pointer;transition:background .1s}.swipe-gallery__dot--active{background:var(--border)}.hobby-card{display:flex;flex-direction:column;align-items:stretch;background:var(--bg-surface);border:2px solid var(--border);box-shadow:var(--shadow);transition:transform .1s,box-shadow .1s;padding:10px}.hobby-card:hover{transform:translate(-3px,-3px);box-shadow:var(--shadow-lg)}.hobby-index{font-family:var(--font-mono);font-weight:700;color:var(--border);letter-spacing:1px}.hobby-body{display:flex;flex-direction:column;gap:14px;padding:18px 22px}.hobby-name{font-family:var(--font-mono);font-weight:700;text-transform:uppercase;letter-spacing:1px;color:var(--text)}.hobby-desc{line-height:1.7;color:var(--text-muted)}.hobby-card--wide .gallery{margin-top:4px}.hobby-section{display:flex;flex-direction:column;gap:18px}.hobby-section__label{display:inline-block;font-family:var(--font-mono);font-weight:700;text-transform:uppercase;letter-spacing:3px;color:#000;background:var(--accent);padding:3px 10px}.hobby-games{display:flex;flex-wrap:wrap;justify-content:space-around;gap:12px}.game-box{display:flex;flex-direction:column;gap:5px}.game-box__case{position:relative;height:300px;border:3px solid var(--border);padding:10px;box-shadow:5px 5px 0 var(--border);transition:transform .1s,box-shadow .1s;background-color:var(--accent);aspect-ratio:1/1.5}@media (hover: hover){.game-box:hover .game-box__case{transform:translate(-3px,-3px);box-shadow:8px 8px 0 var(--border)}}.game-box__case img{width:100%;height:100%;object-fit:cover;display:block}.game-box__title{position:relative;bottom:0;left:0;right:0;background:var(--bg-dark);border-top:2px solid var(--border);padding:3px 5px;font-family:var(--font-mono);font-weight:700;text-transform:uppercase;letter-spacing:1.5px;color:var(--accent);text-align:center}.hobby-albums{display:flex;flex-wrap:wrap;gap:16px;justify-content:space-around;margin-top:4px}.vinyl-card{text-decoration:none;display:block}.vinyl{position:relative;width:245px;overflow:hidden}.vinyl__disc{position:absolute;z-index:5;top:5px;left:5px;width:170px;height:170px;border-radius:50%;background:radial-gradient(circle at 50% 50%,transparent 0px,transparent 6px,var(--accent) 6px,var(--accent) 30px,#111 18px,#1c1c1c 19px,#111 31px,#1c1c1c 32px,#111 46px,#1c1c1c 47px,#111 60px,#1c1c1c 61px,#111 65px);border:1px solid #2a2a2a;transform:translate(0);transition:transform .35s cubic-bezier(.4,0,.2,1)}.vinyl__sleeve{z-index:10;position:relative;width:180px;height:180px;border:2px solid var(--border);overflow:hidden;background:var(--bg-dark);transition:transform .1s,box-shadow .1s}.vinyl__back-sleeve{z-index:1;position:absolute;left:0;top:0;width:160px;height:160px;border:2px solid var(--border);box-shadow:var(--shadow);background:var(--bg-dark);transition:transform .1s,box-shadow .1s}.vinyl__sleeve img{width:100%;height:100%;object-fit:cover;display:block}.vinyl__meta{position:absolute;bottom:0;left:0;right:0;background:#ffe600ed;border-top:2px solid var(--border);padding:4px 8px 5px}.vinyl__title{display:block;font-family:var(--font-mono);font-weight:700;text-transform:uppercase;letter-spacing:.8px;color:var(--border);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.vinyl__artist{display:block;font-family:var(--font-mono);color:#1119;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (hover: hover){.vinyl-card:hover .vinyl__disc{transform:translate(65px)}.vinyl-card:hover .vinyl__sleeve{transform:translate(-2px,-2px)}.vinyl-card:hover .vinyl__back-sleeve{box-shadow:var(--shadow-lg)}}.vinyl-card--revealed .vinyl__disc{transform:translate(65px)}.vinyl-card--revealed .vinyl__sleeve{transform:translate(-2px,-2px);box-shadow:var(--shadow-lg)}.hobby-stacks{display:flex;flex-direction:row;gap:12px;margin-top:4px}.hobby-stack{border:2px solid var(--border);box-shadow:var(--shadow);overflow:hidden;width:100%}.stack-header{display:flex;align-items:center;gap:8px;padding:7px 12px;background:var(--bg-dark);border-bottom:2px solid var(--border)}.stack-header__label{font-family:var(--font-mono);font-weight:700;color:var(--accent);text-transform:uppercase;letter-spacing:2px}.stack-row{display:grid;grid-template-columns:10px auto 1fr;align-items:center;gap:12px;padding:8px 12px;border-bottom:1px solid var(--border-dim);background:var(--bg-surface)}.stack-row:last-child{border-bottom:none}.stack-dot{width:8px;height:8px;border:2px solid var(--border);flex-shrink:0}.stack-dot--running{background:var(--accent);border-color:var(--border)}.stack-dot--experimental{background:var(--bg-surface);border-color:var(--border)}.stack-name{font-family:var(--font-mono);font-weight:700;color:var(--text);white-space:nowrap}.stack-desc{font-family:var(--font-mono);color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (max-width: 900px){.stack-row{grid-template-columns:12px 1fr}.stack-desc{display:none}.hobby-stacks{flex-direction:column}}.hobbies-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;align-items:start}.hobbies-grid .hobby-card--wide{grid-column:1 / -1}@media (max-width: 640px){.hobbies-grid{grid-template-columns:1fr}}.project-card{display:flex;flex-direction:column;background:var(--bg-surface);border:2px solid var(--border);border-radius:0;box-shadow:var(--shadow);transition:transform .1s,box-shadow .1s;max-width:400px;position:relative;overflow:hidden}.project-card.featured{border-color:#111;box-shadow:var(--shadow-accent)}@media (hover: hover){.project-card:hover{transform:translate(-4px,-4px);box-shadow:var(--shadow-xl)}.project-card.featured:hover{transform:translate(-2px,-2px);box-shadow:var(--shadow-accent-lg)}}.project-role{display:inline-block;font-family:var(--font-mono);font-weight:700;color:#000;background:var(--accent);padding:2px 8px;text-transform:uppercase;letter-spacing:1.5px;margin-bottom:6px}.project-img-wrap{width:100%;height:180px;overflow:hidden;border-bottom:2px solid var(--border);flex-shrink:0}.project-img{width:100%;height:100%;object-fit:cover;object-position:center;display:block;transition:transform .35s}.project-img-wrap--logo{background:#f8f7f4;padding:24px 32px}.project-img-wrap--logo .project-img{object-fit:contain}.project-body{padding:20px;display:flex;flex-direction:column;flex:1}.project-year{display:inline-block;font-family:var(--font-mono);font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:1px;margin-bottom:6px}.project-card.featured .project-year{color:#8a6f00}.project-name{font-weight:600;letter-spacing:-.2px;margin-bottom:10px;color:var(--text)}.project-desc{color:var(--text-muted);line-height:1.65;margin-bottom:16px;flex:1}.project-tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.project-links{display:flex;flex-direction:column;margin-top:16px;padding-top:12px;border-top:1px solid var(--border-dim);gap:8px}.project-links-external{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.project-link{display:inline-flex;align-items:center;gap:6px;width:100%;font-family:var(--font-mono);font-weight:700;color:var(--text);text-decoration:none;text-transform:uppercase;letter-spacing:.5px;padding:5px 10px;border:2px solid var(--border);background:var(--bg-surface);box-shadow:2px 2px 0 var(--border);transition:transform .1s,box-shadow .1s}.project-link:hover{transform:translate(-1px,-1px);box-shadow:3px 3px 0 var(--border)}.project-link--download{color:#1558b0;border-color:#1558b0;box-shadow:2px 2px #1558b0}.project-link--download:hover{box-shadow:3px 3px #1558b0}.project-link-icon{display:flex;align-items:center;flex-shrink:0}.project-link--more{display:inline-flex;align-items:center;justify-content:space-between;gap:6px;width:33.333%;margin-left:auto;color:#000;background:var(--accent);padding:6px 14px;border:2px solid var(--border);box-shadow:var(--shadow);letter-spacing:1px;translate:0 0;transition:translate .45s cubic-bezier(.34,1.56,.64,1),transform .1s,box-shadow .1s}.project-link--more:hover{transform:translate(-2px,-2px);box-shadow:var(--shadow-lg)}.project-link--more-lh{translate:-200% 0}.project-in-progress{position:absolute;bottom:0;left:0;right:0;overflow:hidden;border-top:2px solid #111}.project-in-progress+.project-body{padding-bottom:120px}.tape-stripe{height:16px;background-size:34px 34px}.tape-stripe--top{background-image:repeating-linear-gradient(-45deg,#ffe600,#ffe600 10px,#111 10px,#111 24px);animation:tape-stripe-scroll 1.6s linear infinite}.tape-stripe--bottom{background-image:repeating-linear-gradient(45deg,#ffe600,#ffe600 10px,#111 10px,#111 24px);animation:tape-stripe-scroll 1.6s linear infinite}@keyframes tape-stripe-scroll{0%{background-position:0 0}to{background-position:-34px 0}}.tape-center{overflow:hidden;background:#ffe600;border-top:2px solid #111;border-bottom:2px solid #111}.tape-text-track{display:flex;width:200%;animation:tape-text-scroll 10s linear infinite}.tape-text-track span{flex:0 0 25%;font-family:var(--font-mono);font-weight:700;letter-spacing:4px;text-transform:uppercase;color:#111;padding:5px 0;text-align:center;white-space:nowrap}@keyframes tape-text-scroll{0%{transform:translate(0)}to{transform:translate(-50%)}}.tag-filter{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:28px}.tag-filter-btn{cursor:pointer;opacity:.65;transition:opacity .15s,transform .1s,box-shadow .15s}.tag-filter-btn:hover{opacity:1;transform:translate(-1px,-1px);box-shadow:2px 2px 0 var(--border)}.tag-filter-btn--active{opacity:1;box-shadow:3px 3px 0 var(--border);border:1px solid var(--border)}.projects-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:20px}@media (max-width: 768px){.projects-grid{grid-template-columns:1fr;justify-items:center}}.footer-link{display:flex;flex-direction:column;gap:4px;padding:20px;background:#ffffff0d;border:2px solid rgba(255,255,255,.2);border-radius:0;text-decoration:none;box-shadow:4px 4px #ffffff26;transition:transform .1s,box-shadow .1s,background .15s}.footer-link:hover{transform:translate(-2px,-2px);box-shadow:6px 6px #fff3;background:#ffffff17}.footer-link-label{font-weight:600;color:var(--text-on-dark)}.footer-link-sub{font-family:var(--font-mono);color:var(--text-muted-on-dark);text-transform:uppercase;letter-spacing:.5px}.footer{padding:96px 32px 48px;background:var(--bg-dark);border-top:2px solid #333}.footer .section-heading{color:#000;background:var(--accent)}.footer-text{color:var(--text-muted-on-dark);margin-bottom:48px}.footer-links{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin-bottom:64px}.footer-copy{display:block;font-family:var(--font-mono);color:var(--text-muted-on-dark)}.footer-copy--lh{text-align:right}@media (max-width: 768px){.footer{padding:64px 20px 40px}.footer-links{grid-template-columns:1fr 1fr}}@media (max-width: 600px){.footer{padding-bottom:100px}}@media (max-width: 480px){.footer-links{grid-template-columns:1fr}.footer{padding-bottom:180px}}.scroll-nav-btn{position:fixed;left:calc(50% - 24px);width:48px;height:48px;background:var(--accent);color:#000;border:2px solid var(--border);border-radius:0;font-family:var(--font-mono);font-weight:700;line-height:1;cursor:pointer;box-shadow:var(--shadow);display:flex;align-items:center;justify-content:center;z-index:50;pointer-events:none;--hover-x: -2px;translate:0 calc(100% + 48px);opacity:0;transition:translate .25s ease-in,opacity .2s ease-in,transform .1s,box-shadow .1s,bottom .35s ease,left .45s cubic-bezier(.34,1.56,.64,1)}.scroll-nav-btn--up{bottom:90px}.scroll-nav-btn--down,.scroll-nav-btn--up.scroll-nav-btn--solo{bottom:32px}.scroll-nav-btn--lh{box-shadow:-4px 4px #111;--hover-x: 2px}.scroll-nav-btn--visible{translate:0 0;opacity:1;pointer-events:auto;transition:translate .45s cubic-bezier(.34,1.56,.64,1),opacity .25s ease-out,transform .1s,box-shadow .1s,bottom .35s ease,left .45s cubic-bezier(.34,1.56,.64,1)}.scroll-nav-btn--lh{left:32px}.scroll-nav-btn--rh{left:calc(100% - 80px)}.scroll-nav-btn--center.scroll-nav-btn--visible{left:calc(50% - 24px)}.scroll-nav-btn--visible:hover{transform:translate(var(--hover-x),-2px);box-shadow:var(--shadow-lg)}.scroll-nav-btn--lh.scroll-nav-btn--visible:hover{box-shadow:-6px 6px #111}@keyframes bounce-down{0%,to{transform:translateY(0)}50%{transform:translateY(7px)}}.scroll-nav-btn--bounce{animation:bounce-down 1.2s ease-in-out infinite}.scroll-nav-btn--bounce:hover{animation:none;transform:translate(var(--hover-x),-2px)}@media (max-width: 480px){.scroll-nav-btn{width:40px;height:40px;left:calc(50% - 20px)}.scroll-nav-btn--visible{left:calc(100% - 60px)}.scroll-nav-btn--lh.scroll-nav-btn--visible{left:20px}.scroll-nav-btn--center.scroll-nav-btn--visible{left:calc(50% - 20px)}.scroll-nav-btn--up{bottom:78px}.scroll-nav-btn--down,.scroll-nav-btn--up.scroll-nav-btn--solo{bottom:28px}}@media (max-width: 600px){.scroll-nav-btn--up{bottom:138px}.scroll-nav-btn--down,.scroll-nav-btn--up.scroll-nav-btn--solo{bottom:88px}}.project-page{padding:108px 32px 80px;background:var(--bg);min-height:100vh}.back-link{display:inline-flex;align-items:center;background:none;cursor:pointer;margin-bottom:40px;font-family:var(--font-mono);font-weight:700;text-transform:uppercase;letter-spacing:1px;color:var(--text);text-decoration:none;padding:8px 18px;border:2px solid var(--border);box-shadow:var(--shadow);transition:transform .1s,box-shadow .1s}.back-link:hover{transform:translate(-2px,-2px);box-shadow:var(--shadow-lg)}.project-page-hero{width:100%;max-height:460px;overflow:hidden;border:2px solid var(--border);box-shadow:var(--shadow);margin-bottom:40px}.project-page-hero img{width:100%;height:460px;object-fit:cover;object-position:center;display:block}.project-page-header{margin-bottom:48px}.project-page-title{font-size:clamp(32px,5vw,60px);font-weight:700;letter-spacing:-1.5px;line-height:1.05;margin:10px 0 16px;color:var(--text)}.project-page-sections{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:20px;margin-bottom:64px}.project-page-section{padding:24px;background:var(--bg-surface);border:2px solid var(--border);box-shadow:var(--shadow)}.project-page-section-title{display:inline-block;font-family:var(--font-mono);font-weight:700;text-transform:uppercase;letter-spacing:2px;color:#000;background:var(--accent);padding:3px 10px;margin-bottom:14px}.project-page-section p{color:var(--text-muted);line-height:1.75}.project-page-gallery-heading{display:inline-block;font-family:var(--font-mono);font-weight:700;color:#000;background:var(--accent);padding:4px 14px;text-transform:uppercase;letter-spacing:3px;margin-bottom:24px}.project-page .gallery{margin-bottom:56px}.project-page-model3d{margin-bottom:48px;border:2px solid var(--border);box-shadow:var(--shadow-lg);background:var(--bg-surface);overflow:hidden}.project-page-videos{display:flex;flex-direction:column;gap:24px;margin-bottom:56px}.video-embed{position:relative;aspect-ratio:16 / 9;border:2px solid var(--border);box-shadow:var(--shadow-xl);overflow:hidden}.video-embed iframe{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;border:none;padding:8px;background:var(--accent)}.project-page-links{display:flex;flex-wrap:wrap;gap:16px}.btn-outline-dark{display:inline-flex;align-items:center;padding:10px 24px;border-radius:0;font-family:var(--font-mono);font-weight:700;text-decoration:none;text-transform:uppercase;letter-spacing:1px;cursor:pointer;transition:transform .1s,box-shadow .1s;background:transparent;color:var(--text);border:2px solid var(--border);box-shadow:var(--shadow)}.btn-outline-dark:hover{transform:translate(-2px,-2px);box-shadow:var(--shadow-lg);background:var(--text);color:var(--bg)}@media (max-width: 600px){.project-page{padding:24px 20px 120px}}@media (max-width: 768px){.project-page{padding:90px 20px 60px}.project-page-hero img{height:260px}.project-page-sections{grid-template-columns:1fr}}
