:root{--bg:#e8e8e8;--text:#1a1a1a;--text-2:#555;--text-3:#666;--text-4:#888;--text-5:#aaa;--text-strong:#333;--text-highlight:#222;--text-hover:#333;--surface:#ffffff80;--surface-hover:#ffffffb3;--overlay:#e8e8e8cc;--border:#00000014;--border-hover:#0003;--border-med:#ccc;--border-dim:#d5d5d5;--border-faint:#ddd;--grid-line:#0000000f;--scan-color:#00000008;--glow-color:rgba(0,0,0,.015);--shadow:#00000014;--shine-start:#ffffffb3;--shine-mid:#ffffff4d;--vignette:#ffffff40;--icon-color:#0003;--icon-hover:#00000080;--arrow-color:#0000001f;--dot-color:#0000000f;--dot-hover:#0006;--dot-glow:#00000026;--secret-bg:#ffffffe6;--terminal-bg:#fff9;--terminal-border:#0000001f;--terminal-text:#1a1a1a;--terminal-prompt:#2d7d46;--terminal-path:#1a6bb5;--terminal-input-bg:#0000;--terminal-output:#333;--terminal-error:#c0392b;--terminal-accent:#2d7d46;--terminal-scrollbar:#00000026;--terminal-selection:#2d7d4633}[data-theme=dark]{--bg:#111;--text:#fff;--text-2:#999;--text-3:#777;--text-4:#666;--text-5:#444;--text-strong:#ccc;--text-highlight:#e0e0e0;--text-hover:#ddd;--surface:#ffffff08;--surface-hover:#ffffff0f;--overlay:#111111b3;--border:#ffffff14;--border-hover:#ffffff2e;--border-med:#333;--border-dim:#2a2a2a;--border-faint:#1a1a1a;--grid-line:hsla(0,0%,100%,.045);--scan-color:#ffffff0f;--glow-color:hsla(0,0%,100%,.025);--shadow:#0000004d;--shine-start:#ffffff0f;--shine-mid:#ffffff03;--vignette:#00000073;--icon-color:#ffffff40;--icon-hover:#fff9;--arrow-color:#ffffff26;--dot-color:#ffffff0f;--dot-hover:#ffffff80;--dot-glow:#fff3;--secret-bg:#0f0f0ff2;--terminal-bg:#141414bf;--terminal-border:#ffffff1a;--terminal-text:#d4d4d4;--terminal-prompt:#6ec87a;--terminal-path:#5ba8e8;--terminal-input-bg:#0000;--terminal-output:#b0b0b0;--terminal-error:#e74c3c;--terminal-accent:#6ec87a;--terminal-scrollbar:#ffffff1f;--terminal-selection:#6ec87a26}*,:after,:before{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#e8e8e8;background:var(--bg);color:#1a1a1a;color:var(--text);font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;overflow-x:hidden;transition:background-color .4s ease,color .4s ease}::-webkit-scrollbar{width:5px}::-webkit-scrollbar-track{background:#e8e8e8;background:var(--bg)}::-webkit-scrollbar-thumb{background:#ccc;background:var(--border-med);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#888;background:var(--text-4)}a{color:inherit;text-decoration:none}code{font-family:Space Mono,monospace}.cursor-glow{background:radial-gradient(circle,var(--glow-color) 0,#0000 50%);border-radius:50%;height:350px;pointer-events:none;position:fixed;transform:translate(-50%,-50%);transition:opacity .3s;width:350px;z-index:9999}.navbar{align-items:center;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);background:var(--overlay);border-bottom:1px solid var(--border);display:flex;justify-content:space-between;left:0;padding:1.5rem 3rem;position:fixed;right:0;top:0;transition:background-color .4s ease,border-color .4s ease;z-index:100}.nav-logo{color:var(--text);font-family:Space Mono,monospace;font-size:1.4rem;font-weight:700;letter-spacing:.05em}.nav-right{align-items:center;display:flex;gap:2rem}.theme-toggle{background:#0000;border:1px solid var(--border);border-radius:4px;color:var(--text-4);cursor:pointer;font-family:Space Mono,monospace;font-size:.72rem;letter-spacing:.1em;padding:.4rem .8rem;text-transform:uppercase;transition:all .3s ease;white-space:nowrap}.theme-toggle:hover{border-color:var(--border-hover);color:var(--text)}.nav-logo-button{background:#0000;border:0;cursor:pointer}.projects-page{background:var(--bg);color:var(--text);min-height:100vh;overflow-x:hidden;position:relative;transition:background-color .4s ease,color .4s ease}.projects-grid-bg{background-image:linear-gradient(var(--grid-line) 1px,#0000 1px),linear-gradient(90deg,var(--grid-line) 1px,#0000 1px);background-size:60px 60px;inset:0;pointer-events:none;position:fixed}.projects-grid-bg:after{background:radial-gradient(ellipse at center,#0000 35%,var(--vignette) 100%);content:"";inset:0;position:absolute}.projects-main{margin:0 auto;padding:8.5rem 0 5rem;position:relative;width:min(1180px,92vw);z-index:2}.directory-back-button{background:var(--surface);border:1px solid var(--border);border-radius:999px;color:var(--text-4);cursor:pointer;font-family:Space Mono,monospace;font-size:1.1rem;height:34px;line-height:1;margin-bottom:1.5rem;transition:all .25s ease;width:34px}.directory-back-button:hover{background:var(--surface-hover);border-color:var(--border-hover);color:var(--text);transform:translateX(-2px)}.project-path,.projects-kicker{color:var(--terminal-path);font-family:Space Mono,monospace;letter-spacing:.08em}.projects-kicker{font-size:.85rem;margin-bottom:.8rem}.projects-title{font-family:Space Mono,monospace;font-size:clamp(3rem,9vw,6rem);letter-spacing:.08em;line-height:1;margin-bottom:1.2rem}.projects-intro{color:var(--text-2);font-size:1rem;line-height:1.8;max-width:760px}.projects-intro code{color:var(--terminal-accent)}.projects-home-button{background:#0000;border:0;color:var(--text-4);cursor:pointer;font-family:Space Mono,monospace;font-size:.72rem;letter-spacing:.08em;transition:color .25s ease}.projects-home-button:hover{color:var(--text)}.projects-list{grid-gap:1.5rem;display:grid;gap:1.5rem;grid-template-columns:1fr;margin-top:3rem}.project-card{grid-gap:2rem;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);background:var(--terminal-bg);border:1px solid var(--border);border-radius:22px;box-shadow:0 18px 60px var(--shadow);display:grid;gap:2rem;grid-template-columns:minmax(280px,.9fr) minmax(0,1.1fr);padding:1.2rem}.project-card-text-only{grid-template-columns:1fr}.project-card-text-only .project-copy{padding:1rem}.project-media,.project-model{background:radial-gradient(circle at 50% 45%,var(--surface-hover),#0000 55%),var(--surface);border:1px solid var(--border);border-radius:18px;min-height:280px;overflow:hidden}.project-media img{display:block;height:100%;min-height:280px;object-fit:cover;width:100%}.project-logo{align-items:center;background:radial-gradient(circle at 50% 45%,var(--surface-hover),#0000 55%),var(--surface);border:1px solid var(--border);border-radius:18px;display:flex;justify-content:center;min-height:220px;overflow:hidden;padding:2rem}.project-logo img{display:block;max-height:150px;max-width:min(260px,80%);object-fit:contain}.project-logo-hobby{padding:0}.project-logo-hobby img{height:100%;max-height:none;max-width:none;object-fit:cover;width:100%}.project-gallery{overflow:hidden;position:relative}.project-gallery-track{display:flex;height:100%;justify-content:flex-start;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:thin}.project-gallery-track img{flex:0 0 100%;scroll-snap-align:start}.gallery-arrow{background:var(--terminal-bg);border:1px solid var(--border);border-radius:50%;color:var(--text);cursor:pointer;font-size:1.5rem;height:2.5rem;line-height:1;position:absolute;top:50%;transform:translateY(-50%);width:2.5rem;z-index:1}.gallery-arrow:hover{background:var(--surface-hover)}.gallery-arrow-left{left:.75rem}.gallery-arrow-right{right:.75rem}.project-copy{display:flex;flex-direction:column;justify-content:center;padding:1rem 1rem 1rem 0}.project-path{font-size:.7rem;margin-bottom:.8rem}.project-copy h2{font-family:Space Mono,monospace;font-size:clamp(1.45rem,3vw,2rem);letter-spacing:.04em;margin-bottom:.8rem}.project-copy p{color:var(--text-2);line-height:1.75;max-width:620px}.project-description{line-clamp:2;-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.project-description-expanded{display:block;overflow:visible}.project-more-button{background:#0000;border:0;color:var(--terminal-accent);cursor:pointer;font-family:Space Mono,monospace;font-size:.76rem;letter-spacing:.06em;margin-top:.75rem;padding:0;width:fit-content}.project-more-button:hover{color:var(--text)}.project-tags{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1.4rem}.project-tags span{background:var(--surface);border:1px solid var(--border);border-radius:999px;color:var(--text-3);font-family:Space Mono,monospace;font-size:.72rem;padding:.38rem .75rem}.project-link{border:1px solid var(--terminal-accent);border-radius:8px;color:var(--terminal-accent);font-family:Space Mono,monospace;font-size:.8rem;padding:.65rem 1rem;transition:all .25s ease;width:fit-content}.project-link:hover{background:var(--terminal-accent);color:var(--bg)}.project-links{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:1.5rem}.stl-viewer{height:100%;min-height:280px;position:relative;width:100%}.stl-viewer-status{backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);background:var(--overlay);border:1px solid var(--border);border-radius:999px;bottom:1rem;color:var(--text-4);font-family:Space Mono,monospace;font-size:.66rem;left:50%;letter-spacing:.05em;max-width:calc(100% - 2rem);padding:.45rem .75rem;position:absolute;text-align:center;transform:translateX(-50%);width:max-content}.hero{background:var(--bg);height:100vh;overflow:hidden;position:relative;transition:background-color .4s ease}.hero:before{background-image:linear-gradient(var(--grid-line) 1px,#0000 1px),linear-gradient(90deg,var(--grid-line) 1px,#0000 1px);background-size:60px 60px;inset:0;z-index:1}.hero:after,.hero:before{content:"";pointer-events:none;position:absolute}.hero:after{animation:scanline 6s linear infinite;background:linear-gradient(90deg,#0000,var(--scan-color),#0000);height:2px;left:0;right:0;top:-100%;z-index:2}@keyframes scanline{0%{top:-2px}to{top:100%}}.hero-vignette{background:radial-gradient(ellipse at center,#0000 40%,var(--vignette) 100%);inset:0;pointer-events:none;position:absolute;z-index:3}.hero-canvas{inset:0;position:absolute;z-index:2}.hero-content{align-items:flex-start;display:flex;flex-direction:column;left:clamp(2rem,8vw,7rem);position:absolute;top:50%;transform:translateY(-50%);width:min(800px,43vw);z-index:10}.hero-greeting{animation:fadeInUp .4s ease forwards;animation-delay:.3s;color:var(--text-4);font-size:1rem;letter-spacing:.15em;margin-bottom:.75rem;opacity:0;text-transform:uppercase}.hero-greeting,.hero-name{font-family:Space Mono,monospace}.hero-name{color:var(--text);font-size:clamp(3rem,8vw,5.5rem);font-weight:700;letter-spacing:.08em;line-height:1.1;min-height:1.2em}.cursor-blink{animation:blink 1s step-end infinite;color:var(--text-4)}@keyframes blink{50%{opacity:0}}.hero-tagline{animation:fadeInUp .8s ease forwards;animation-delay:1.6s;color:var(--text-3);font-family:Inter,sans-serif;font-size:1.1rem;letter-spacing:.05em;margin-top:1rem;opacity:0}.mobile-quick-actions{display:none}.hero-terminal{animation:fadeInUp .8s ease forwards;animation-delay:2s;margin-top:1.5rem;opacity:0;width:100%}.terminal{backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--terminal-border);border-radius:12px;box-shadow:0 8px 32px #0000001f,0 2px 8px #0000000f,inset 0 0 0 .5px var(--terminal-border);color:var(--terminal-text);cursor:text;font-family:Space Mono,monospace;font-size:.78rem;line-height:1.6;overflow:hidden;transition:background-color .4s ease,border-color .4s ease,box-shadow .4s ease;width:100%}.terminal,.terminal-titlebar{background:var(--terminal-bg)}.terminal-titlebar{align-items:center;border-bottom:1px solid var(--terminal-border);display:flex;justify-content:space-between;padding:.6rem 1rem;-webkit-user-select:none;user-select:none}.terminal-dots{display:flex;gap:6px;width:60px}.terminal-dots-spacer{width:60px}.terminal-dot{border-radius:50%;height:10px;transition:opacity .3s;width:10px}.terminal-dot-red{background:#ff5f56}.terminal-dot-yellow{background:#ffbd2e}.terminal-dot-green{background:#27c93f}.terminal-title{color:var(--text-4);font-size:.7rem;letter-spacing:.05em;text-align:center}.terminal-body{max-height:38vh;overflow-y:auto;padding:.8rem 1rem;scroll-behavior:smooth}.terminal-body::-webkit-scrollbar{width:4px}.terminal-body::-webkit-scrollbar-track{background:#0000}.terminal-body::-webkit-scrollbar-thumb{background:var(--terminal-scrollbar);border-radius:2px}.terminal-line{animation:termFadeIn .15s ease;margin-bottom:2px}@keyframes termFadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.terminal-line pre{font-family:Space Mono,monospace;font-size:.78rem;line-height:1.6;margin:0;white-space:pre-wrap;word-break:break-word}.terminal-line-output pre{color:var(--terminal-output)}.terminal-line-error pre{color:var(--terminal-error)}.terminal-line-accent pre{color:var(--terminal-accent)}.terminal-line-ascii pre{color:var(--terminal-text);font-size:.72rem;line-height:1.35;opacity:.85}.terminal-line-filelist{display:flex;flex-wrap:wrap;gap:.4rem 1.2rem;padding:.3rem 0 .3rem .2rem}.terminal-file{color:var(--terminal-output);font-family:Space Mono,monospace;font-size:.78rem}.terminal-file-dir{color:var(--terminal-path);font-weight:600}.terminal-prompt-user{color:var(--terminal-prompt);font-weight:700}.terminal-prompt-at{color:var(--terminal-text);opacity:.5}.terminal-prompt-host{color:var(--terminal-prompt);font-weight:700}.terminal-prompt-separator{color:var(--terminal-text);opacity:.5}.terminal-prompt-path{color:var(--terminal-path);font-weight:600}.terminal-prompt-dollar{margin:0 .4rem 0 .15rem;opacity:.5}.terminal-prompt-cmd,.terminal-prompt-dollar{color:var(--terminal-text)}.terminal-input-line{align-items:center;display:flex;margin-top:2px}.terminal-input{background:var(--terminal-input-bg);border:none;caret-color:var(--terminal-accent);color:var(--terminal-text);flex:1 1;font-family:Space Mono,monospace;font-size:.78rem;line-height:1.6;outline:none;padding:0}.terminal-input::selection{background:var(--terminal-selection)}.terminal-input:disabled{opacity:.5}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@media (max-width:900px){.navbar{padding:1.2rem 1.5rem}.hero-content{left:50%;transform:translate(-50%,-50%);width:94vw}.terminal-body{max-height:30vh}.project-card{grid-template-columns:1fr}.project-copy{padding:.2rem}}@media (max-width:700px){.cursor-glow{display:none}.hero{height:auto;min-height:100svh;overflow-y:auto}.hero:before{background-size:42px 42px}.hero-canvas{height:52svh;opacity:.78}.hero-content{justify-content:center;left:auto;margin:0 auto;min-height:100svh;padding:7rem 0 2rem;position:relative;top:auto;transform:none;width:min(100% - 2rem,520px)}.hero-greeting{font-size:.78rem}.hero-tagline{font-size:.98rem;line-height:1.5}.mobile-quick-actions{grid-gap:.75rem;animation:fadeInUp .8s ease forwards;animation-delay:1.9s;display:grid;gap:.75rem;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:1.6rem;opacity:0;width:100%}.mobile-quick-actions button{backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);background:var(--terminal-bg);border:1px solid var(--terminal-border);border-radius:12px;color:var(--terminal-text);font-family:Space Mono,monospace;font-size:.78rem;letter-spacing:.05em;min-height:48px}.mobile-quick-actions button:active{background:var(--surface-hover);border-color:var(--border-hover);transform:translateY(1px)}.hero-terminal{margin-top:1rem}}@media (max-width:600px){.navbar{padding:1rem}.theme-toggle{font-size:.65rem;padding:.35rem .6rem}.hero-content{width:96vw}.hero-name{font-size:clamp(2.7rem,17vw,4rem)}.hero-terminal{display:none}.terminal{border-radius:8px;font-size:.7rem}.terminal-body{max-height:25vh;padding:.6rem .7rem}.terminal-file,.terminal-input,.terminal-line pre{font-size:.7rem}.terminal-line-ascii pre{font-size:.6rem}.projects-main{padding:6.5rem 0 3rem;width:94vw}.projects-title{font-size:clamp(2.4rem,14vw,3.4rem)}.projects-intro{font-size:.92rem}.project-card{border-radius:16px;gap:1rem;padding:.8rem}.project-logo,.project-media,.project-media img,.project-model,.stl-viewer{min-height:230px}}@media (max-width:420px){.mobile-quick-actions{grid-template-columns:1fr}.projects-home-button{display:none}.project-logo,.project-media,.project-media img,.project-model,.stl-viewer{min-height:190px}.fileviewer-overlay{padding:.75rem}.fileviewer-body{padding:1.25rem}}.fileviewer-overlay{align-items:center;animation:fadeIn .3s ease;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);background:#00000080;display:flex;inset:0;justify-content:center;padding:2rem;position:fixed;z-index:1000}.fileviewer{animation:fileviewerSlideIn .35s cubic-bezier(.16,1,.3,1);background:var(--bg);border:1px solid var(--border);border-radius:16px;box-shadow:0 24px 80px #00000040,0 8px 24px #00000026;display:flex;flex-direction:column;max-height:85vh;overflow:hidden;width:min(680px,100%)}@keyframes fileviewerSlideIn{0%{opacity:0;transform:translateY(30px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}.fileviewer-titlebar{align-items:center;background:var(--surface);border-bottom:1px solid var(--border);display:flex;flex-shrink:0;justify-content:space-between;padding:1rem 1.5rem}.fileviewer-titlebar-left{align-items:center;display:flex;gap:.6rem}.fileviewer-icon{font-size:1.1rem}.fileviewer-filename{color:var(--text);font-family:Space Mono,monospace;font-size:.82rem;font-weight:600;letter-spacing:.04em}.fileviewer-close{align-items:center;background:#0000;border:1px solid var(--border);border-radius:8px;color:var(--text-4);cursor:pointer;display:flex;font-size:.85rem;height:32px;justify-content:center;transition:all .2s ease;width:32px}.fileviewer-close:hover{background:var(--surface-hover);border-color:var(--border-hover);color:var(--text)}.fileviewer-body{flex:1 1;overflow-y:auto;padding:2rem 2.5rem}.fileviewer-body::-webkit-scrollbar{width:4px}.fileviewer-body::-webkit-scrollbar-thumb{background:var(--border-med);border-radius:2px}.fileviewer-section{margin-bottom:1.5rem}.fileviewer-heading{color:var(--text);font-family:Space Mono,monospace;font-size:1.2rem;font-weight:700;letter-spacing:.04em;margin-bottom:.6rem}.fileviewer-divider{background:var(--terminal-accent);border-radius:1px;height:2px;margin-bottom:1.5rem;width:40px}.fileviewer-text{color:var(--text-2);font-family:Inter,sans-serif;font-size:1rem;line-height:1.8;white-space:pre-line}.fileviewer-tags{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.5rem}.fileviewer-tag{background:var(--surface);border:1px solid var(--border);border-radius:6px;color:var(--text-3);font-family:Space Mono,monospace;font-size:.78rem;padding:.4rem .85rem;transition:all .2s ease}.fileviewer-tag:hover{border-color:var(--terminal-accent);color:var(--text)}.fileviewer-links{display:flex;flex-direction:column;gap:.75rem;margin-top:1.5rem}.fileviewer-link{align-items:center;background:var(--surface);border:1px solid var(--border);border-radius:10px;display:flex;gap:1rem;padding:1rem 1.2rem;text-decoration:none;transition:all .25s ease}.fileviewer-link:hover{background:var(--surface-hover);border-color:var(--terminal-accent);transform:translateX(4px)}.fileviewer-link-label{color:var(--terminal-accent);font-family:Space Mono,monospace;font-size:.75rem;font-weight:700;letter-spacing:.08em;min-width:70px;text-transform:uppercase}.fileviewer-link-value{color:var(--text-2);flex:1 1;font-family:Inter,sans-serif;font-size:.9rem}.fileviewer-link-arrow{color:var(--text-4);font-size:.9rem;transition:transform .2s ease}.fileviewer-link:hover .fileviewer-link-arrow{color:var(--terminal-accent);transform:translate(2px,-2px)}.fileviewer-project-link{border:1px solid var(--terminal-accent);border-radius:8px;color:var(--terminal-accent);display:inline-block;font-family:Space Mono,monospace;font-size:.82rem;letter-spacing:.06em;margin-top:1.5rem;padding:.7rem 1.3rem;text-decoration:none;transition:all .25s ease}.fileviewer-project-link:hover{background:var(--terminal-accent);color:var(--bg)}.fileviewer-footer{border-top:1px solid var(--border);flex-shrink:0;padding:.8rem 1.5rem;text-align:center}.fileviewer-footer-hint{color:var(--text-5);font-family:Space Mono,monospace;font-size:.68rem;letter-spacing:.08em}@media (max-width:600px){.fileviewer-overlay{padding:1rem}.fileviewer-body{padding:1.5rem}.fileviewer-heading{font-size:1rem}.fileviewer-link{align-items:flex-start;flex-direction:column;gap:.3rem}}
/*# sourceMappingURL=main.1d6a1dcc.css.map*/