:root{--bg: #fafaf8;--bg-alt: #fafaf8;--surface: #fafaf8;--surface-2: #f0f0ec;--border: #d8d9d5;--border-soft: #e6e7e3;--text: #0a0a0a;--text-bright: #0a0a0a;--dim: #41434b;--dimmer: #626671;--muted: #626671;--accent: #3455d1;--accent-dim: #243fa8;--accent-bright: #3455d1;--accent-hover: #243fa8;--accent-2: #243fa8;--accent-soft: rgba(52, 85, 209, .08);--accent-line: rgba(52, 85, 209, .25);--signal-navy: #1c2541;--signal-blue: #3b5bd9;--signal-yellow: #f5c518;--signal-coral: #e9502e;--signal-neon: #dfff00;--cat-outline: #070505;--cat-fur: #161616;--cat-tabby: #c8ba9c;--cat-stripe: #766d66;--cat-white: #ffffff;--cat-eyes: #91cd96;--cat-eyes-tabby: #0a5a1e;--cat-ear: #ec99a3;--chip: #f0f0ec;--chip-text: #41434b;--warning: #b42318;--amber: #986600;--success: #17643b;--prod-badge: #17643b;--prod-badge-muted: #17643b;--sans: "Inter Tight", Arial, sans-serif;--mono: "IBM Plex Mono", monospace;--shadow: none;--lift: none;--glow: none;--hero-glow: none;--hero-glow-hover: none;--flag-tint: var(--surface);--flag-tint-hover: var(--surface);--maxw: 1280px;--r: 0px;--opacity-default: 1;--opacity-hover: 1;--opacity-mobile: 1}[data-theme=dark]{--bg: #101217;--bg-alt: #101217;--surface: #101217;--surface-2: #1b1f28;--border: #343a46;--border-soft: #292e38;--text: #f3f4f0;--text-bright: #f3f4f0;--dim: #b9bdc7;--dimmer: #9da2ae;--muted: #9da2ae;--accent: #a7b8ff;--accent-dim: #c2ceff;--accent-bright: #a7b8ff;--accent-hover: #c2ceff;--accent-2: #c2ceff;--accent-soft: rgba(167, 184, 255, .08);--accent-line: rgba(167, 184, 255, .25);--signal-navy: #1c2541;--signal-blue: #3b5bd9;--signal-yellow: #f5c518;--signal-coral: #e9502e;--signal-neon: #dfff00;--cat-outline: #050608;--cat-fur: #2b2e3a;--cat-tabby: #c8ba9c;--cat-stripe: #766d66;--cat-white: #ffffff;--cat-eyes: #91cd96;--cat-eyes-tabby: #0a5a1e;--cat-ear: #ec99a3;--chip: #1b1f28;--chip-text: #d7dbe3;--warning: #ff746d;--amber: #ffd36b;--success: #69d89a;--prod-badge: #69d89a;--prod-badge-muted: #69d89a;--shadow: none;--lift: none;--glow: none;--flag-tint: var(--surface);--flag-tint-hover: var(--surface)}.project-screenshots{display:grid;gap:12px;margin:20px 0}.project-screenshots.two-col{grid-template-columns:1fr 1fr}.screenshot-wrap{border:1px solid var(--border);overflow:hidden;background:var(--bg-alt);transition:border-color .3s ease-out}.screenshot-trigger{display:block;color:inherit;text-decoration:none;cursor:zoom-in}.screenshot-trigger:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.project:hover .screenshot-wrap{border-color:var(--accent)}.screenshot-wrap img{width:100%;display:block;filter:grayscale(15%);transition:filter .3s ease-out}.screenshot-wrap .project-diagram{width:100%;display:block;background:transparent;vertical-align:top}.screenshot-wrap .project-diagram-dark,[data-theme=dark] .screenshot-wrap .project-diagram-light{display:none}[data-theme=dark] .screenshot-wrap .project-diagram-dark{display:block}.project:hover .screenshot-wrap img{filter:grayscale(0%)}.screenshot-label{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);padding:5px 8px;border-top:1px solid var(--border);background:var(--bg)}html.project-lightbox-open,html.project-lightbox-open body{overflow:hidden}.project-lightbox{width:100vw;height:100vh;max-width:none;max-height:none;margin:0;padding:0;border:none;background:transparent;color:var(--text);overflow:hidden}.project-lightbox::backdrop{background:var(--bg);opacity:.92;backdrop-filter:blur(8px)}.project-lightbox__stage{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:88px 96px 72px;overscroll-behavior:contain;overflow:hidden;-webkit-overflow-scrolling:touch}.project-lightbox__frame{display:flex;align-items:center;justify-content:center;max-width:100%;max-height:100%;width:100%;height:100%}.project-lightbox__image{display:block;max-width:100%;max-height:calc(100vh - 180px);width:auto;height:auto;object-fit:contain;border:1px solid var(--border);background:var(--bg-alt);box-shadow:var(--shadow);touch-action:manipulation}.project-lightbox__toolbar{position:absolute;top:20px;right:20px;z-index:3;display:inline-flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap;max-width:min(calc(100vw - 40px),520px)}.project-lightbox__action,.project-lightbox__nav{border:1px solid var(--border);background:var(--surface);color:var(--text);font:inherit;cursor:pointer;transition:border-color .2s ease-out,background-color .2s ease-out,color .2s ease-out;box-shadow:var(--shadow)}.project-lightbox__action:hover,.project-lightbox__nav:hover{border-color:var(--accent);color:var(--accent-hover)}.project-lightbox__action:focus-visible,.project-lightbox__nav:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.project-lightbox__action{display:inline-flex;align-items:center;gap:8px;padding:10px 14px;text-transform:uppercase;letter-spacing:.08em;font-size:11px;text-decoration:none;border-bottom:none;white-space:nowrap}.project-lightbox__action--mobile{display:none}.project-lightbox__action-mark,.project-lightbox__close-mark{font-size:15px;line-height:1}.project-lightbox__nav{position:absolute;z-index:2;top:50%;transform:translateY(-50%);width:56px;height:56px;display:inline-flex;align-items:center;justify-content:center;font-size:28px;line-height:1}.project-lightbox__nav--prev{left:20px}.project-lightbox__nav--next{right:20px}.project-lightbox__nav[disabled]{opacity:.45;cursor:default}.project-lightbox__meta{position:absolute;left:50%;bottom:20px;transform:translate(-50%);display:inline-flex;align-items:center;gap:10px;max-width:min(90vw,920px);padding:10px 14px;border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:11px;text-transform:uppercase;letter-spacing:.08em;z-index:2;box-shadow:var(--shadow)}.project-lightbox__count{color:var(--accent-hover);white-space:nowrap}.project-lightbox__caption{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-lightbox__action[aria-pressed=true]{border-color:var(--accent);color:var(--accent-hover);background:var(--bg)}.project-lightbox--zoomed .project-lightbox__stage{overflow:auto;align-items:flex-start;justify-content:flex-start;padding-bottom:96px}.project-lightbox--zoomed .project-lightbox__frame{min-width:max-content;min-height:max-content;width:auto;height:auto}.project-lightbox--zoomed .project-lightbox__image{max-width:none;max-height:none;object-fit:initial;touch-action:pan-x pan-y pinch-zoom}@media(max-width:768px){.project-screenshots.two-col{grid-template-columns:1fr}.project-lightbox__stage{padding:84px 18px 82px}.project-lightbox__image{max-height:calc(100vh - 200px)}.project-lightbox__toolbar{top:14px;right:14px;gap:6px;max-width:calc(100vw - 28px)}.project-lightbox__action{padding:9px 12px}.project-lightbox__action--mobile{display:inline-flex}.project-lightbox__nav{top:auto;bottom:78px;transform:none;width:52px;height:52px}.project-lightbox__nav--prev{left:14px}.project-lightbox__nav--next{right:14px}.project-lightbox__meta{left:18px;right:18px;bottom:14px;transform:none;justify-content:space-between}.project-lightbox__caption{max-width:calc(100% - 72px)}.project-lightbox--zoomed .project-lightbox__stage{padding:74px 18px 88px}}*{box-sizing:border-box;margin:0;padding:0}html,body{height:100%;overflow-x:hidden}html{transition:background-color .5s ease,color .5s ease;scroll-behavior:smooth;scroll-padding-top:84px;scrollbar-gutter:stable}html.theme-transitioning body,html.theme-transitioning header.site,html.theme-transitioning nav,html.theme-transitioning .theme-toggle,html.theme-transitioning .menu-toggle,html.theme-transitioning .hero-card,html.theme-transitioning .skill-group,html.theme-transitioning .project-card,html.theme-transitioning .project-misc,html.theme-transitioning .contact-form,html.theme-transitioning .project-detail__panel,html.theme-transitioning .project-lightbox__image,html.theme-transitioning .project-lightbox__close,html.theme-transitioning .project-lightbox__nav,html.theme-transitioning .project-lightbox__meta{transition:background-color .35s ease,color .35s ease,border-color .35s ease,box-shadow .35s ease!important}section[id]{scroll-margin-top:84px}body{font-family:var(--mono);color:var(--text);background:var(--bg);line-height:1.6;font-size:14px;overflow-x:hidden;transition:background-color .3s ease,color .3s ease}.skip-link{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}.skip-link:focus,.skip-link:focus-visible{left:16px;top:16px;width:auto;height:auto;padding:10px 14px;border:1px solid var(--accent);background:var(--bg-alt);color:var(--text);z-index:300}html.nav-open,html.nav-open body{overflow:hidden}@media(min-width:769px){body{font-size:16px}.wrap{padding:0 48px}.hero{padding:100px 0 80px}section{padding:80px 0}.hero h1{font-size:clamp(48px,6vw,72px);margin-bottom:20px}.hero .tagline{font-size:clamp(16px,2.2vw,18px);margin-bottom:28px;max-width:640px}.btn{padding:14px 24px;font-size:14px}.hero-card{padding:36px;margin-top:48px}.hero-card h3{font-size:16px;margin-bottom:20px}.hero-card li{font-size:15px;margin-bottom:12px}h2{font-size:clamp(32px,5vw,44px)}.section-header{margin-bottom:36px}.t-title{font-size:20px}.t-desc{font-size:16px}.t-item li{font-size:15px}.t-meta{font-size:13px}.project{padding:36px}.project h3{font-size:22px;margin-bottom:12px}.project p{font-size:16px;margin-bottom:20px}.project li{font-size:15px;margin-bottom:10px}.tag{font-size:12px;padding:6px 12px}.sub-projects-header{font-size:18px}.contact-info p{font-size:16px}.contact-link{font-size:15px}.contact-form{padding:40px}.form-group label{font-size:14px;margin-bottom:10px}input,textarea{font-size:15px;padding:14px}button[type=submit]{font-size:14px;padding:14px 28px}nav a{font-size:14px;padding:8px 14px}.theme-toggle{font-size:14px;padding:8px 12px}}@media(min-width:1440px){:root{--maxw: 1400px}body{font-size:18px}.wrap{padding:0 64px}.hero{padding:120px 0 100px}section{padding:100px 0}.hero h1{font-size:clamp(56px,5.5vw,80px);margin-bottom:24px}.hero .tagline{font-size:clamp(17px,1.8vw,20px);margin-bottom:32px;max-width:720px}.btn{padding:16px 28px;font-size:15px}.hero-card{padding:40px;margin-top:56px}.hero-card h3{font-size:17px;margin-bottom:24px}.hero-card li{font-size:16px;margin-bottom:14px}h2{font-size:clamp(36px,4.5vw,52px)}.section-header{margin-bottom:44px}.t-title{font-size:22px}.t-desc{font-size:17px}.t-item li{font-size:16px}.t-meta{font-size:14px}.t-item{margin-bottom:48px}.timeline{padding-left:28px}.project{padding:40px}.project h3{font-size:24px;margin-bottom:14px}.project p{font-size:17px;margin-bottom:24px}.project li{font-size:16px;margin-bottom:12px}.tag{font-size:13px;padding:7px 14px}.sub-projects-header{font-size:20px}.sub-projects-grid .project{padding:24px 24px 24px 28px}.sub-projects-grid .project h3{font-size:18px}.sub-projects-grid .project p{font-size:14px}.sub-projects-grid .project .tag{font-size:11px;padding:4px 10px}.contact-info p{font-size:17px}.contact-link{font-size:16px}.contact-form{padding:48px}.contact-grid{gap:64px}.form-group label{font-size:15px;margin-bottom:12px}input,textarea{font-size:16px;padding:16px}button[type=submit]{font-size:15px;padding:16px 32px}nav a{font-size:15px;padding:10px 16px}.nav{height:68px}.brand{font-size:17px}.theme-toggle{font-size:15px;padding:8px 14px}}@media(min-width:769px){body:before{content:"";position:fixed;inset:0;background:repeating-linear-gradient(0deg,rgba(0,0,0,.015) 0px,transparent 1px,transparent 2px,rgba(0,0,0,.015) 3px);pointer-events:none;z-index:200;opacity:.5;will-change:transform}}a{color:var(--accent);text-decoration:none;border-bottom:1px solid transparent;transition:border-color .3s ease-out}a:hover{border-bottom-color:var(--accent)}a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.btn:focus-visible,nav a:focus-visible,.theme-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.wrap{width:100%;max-width:var(--maxw);margin:0 auto;padding:0 40px}header.site{position:sticky;top:0;z-index:100;background:var(--bg-alt);border-bottom:2px solid var(--border);box-shadow:var(--shadow)}.nav{display:flex;align-items:center;justify-content:space-between;height:60px;gap:16px}.brand{font-weight:800;font-size:16px;letter-spacing:-.5px;display:flex;align-items:center;gap:8px}.brand:before{content:">";color:var(--accent);font-weight:700;font-size:18px}.nav-right{display:flex;align-items:center;gap:12px}nav{display:flex;gap:4px}nav a{padding:6px 12px;border:1px solid transparent;font-weight:400;font-size:13px;text-transform:lowercase;transition:background-color .3s ease-out,border-color .3s ease-out,box-shadow .3s ease-out}nav a:hover{background:var(--surface);border-color:var(--accent);border-bottom:1px solid var(--accent);box-shadow:var(--glow)}.theme-toggle{display:inline-flex;align-items:center;padding:6px 10px;border:1px solid var(--border);background:var(--surface);font-size:13px;font-weight:400;gap:6px;cursor:pointer;font-family:var(--mono);color:var(--text);text-transform:lowercase;transition:background-color .3s ease-out,border-color .3s ease-out}.theme-toggle:hover{background:var(--bg);border-color:var(--accent)}.theme-icon{font-size:14px;line-height:1}.menu-toggle{display:none;border:1px solid var(--border);background:var(--surface);padding:6px 8px;cursor:pointer;font-family:var(--mono);font-size:13px;color:var(--text);text-transform:lowercase;transition:background-color .3s ease-out,border-color .3s ease-out,box-shadow .3s ease-out,color .3s ease-out}.menu-toggle:hover{background:var(--bg);border-color:var(--accent);box-shadow:var(--glow)}.hero{padding:80px 0 60px;border-bottom:2px solid var(--border)}.hero h1{font-size:clamp(36px,5vw,56px);font-weight:800;line-height:1.1;margin-bottom:16px;letter-spacing:-1px;word-spacing:-.15em}.hero h1 .devops-white{color:var(--text);font-weight:800;display:inline-block}.hero h1 .accent{color:var(--accent-bright);text-shadow:var(--hero-glow);transition:color .25s ease-out,text-shadow .25s ease-out;display:inline;overflow-wrap:anywhere}.hero h1 .accent.support.is-typing{transition:none}.hero h1 .accent.support:after{content:"█";color:var(--accent-bright);animation:blink 1s step-end infinite;margin-left:4px}@keyframes blink{0%,50%{opacity:1}51%,to{opacity:0}}.hero h1:hover .accent{color:var(--accent-dim);text-shadow:var(--hero-glow-hover)}.hero h1:hover .accent.support:after{color:var(--accent-dim)}.hero h1:hover .accent.support.is-typing{color:var(--accent-bright);text-shadow:var(--hero-glow);transform:none}.hero h1:hover .accent.support.is-typing:after{color:var(--accent-bright)}.hero .tagline{font-size:clamp(14px,2vw,16px);color:var(--text);margin-bottom:24px;max-width:560px;font-weight:400;line-height:1.7;opacity:var(--opacity-default)}.hero .tagline strong{color:var(--text);font-weight:700}.cta{display:flex;flex-wrap:wrap;gap:12px;margin-top:24px}.btn{display:inline-flex;align-items:center;gap:8px;padding:12px 20px;border:2px solid var(--border);background:var(--surface);font-family:var(--mono);font-weight:700;font-size:13px;cursor:pointer;transition:background-color .2s ease-out,border-color .2s ease-out,box-shadow .2s ease-out,transform .2s ease-out,color .2s ease-out;text-transform:uppercase;letter-spacing:.5px}.btn:hover{background:var(--bg);border-color:var(--accent);box-shadow:var(--glow);transform:translateY(-1px)}.btn.primary{background:var(--accent);color:var(--bg);border-color:var(--accent)}.btn.primary:hover{background:var(--accent-dim);border-color:var(--accent-dim);color:var(--bg)}.btn.secondary{background:transparent;border:2px solid var(--border);color:var(--text)}.btn.secondary:hover{background:var(--surface);border-color:var(--accent);color:var(--accent)}.hero-card{border:2px solid var(--border);background:var(--bg-alt);padding:24px;box-shadow:var(--shadow);transition:border-color .25s ease-out,box-shadow .25s ease-out,transform .25s ease-out,background-color .25s ease-out;margin-top:40px}.hero-card:hover{border-color:var(--accent);box-shadow:var(--glow);transform:translateY(-1px)!important;background:var(--surface)}.hero-card:hover h3{color:var(--accent-hover)}.hero-card h3{font-size:14px;font-weight:800;text-transform:uppercase;letter-spacing:.5px;margin-bottom:16px;transition:color .3s ease-out}.hero-card h3:before{content:"$ ";color:var(--accent)}.hero-card ul{list-style:none}.hero-card li{padding-left:24px;position:relative;margin-bottom:10px;color:var(--text);font-size:13px;line-height:1.6;opacity:var(--opacity-default);transition:opacity .3s ease-out}.hero-card li:before{content:"#";position:absolute;left:0;color:var(--accent);font-weight:700}.skills-grid{display:grid;gap:16px}@media(min-width:860px){.skills-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}.skill-group{display:grid;gap:12px;min-width:0;padding:20px;border:2px solid var(--border);background:var(--bg-alt);box-shadow:none;transition:border-color .25s ease-out,box-shadow .25s ease-out,transform .25s ease-out}.skill-group:hover,.skill-group.in-view{border-color:var(--accent);box-shadow:var(--glow);transform:translateY(-1px)}.skill-group:hover h3,.skill-group.in-view h3{color:var(--accent-hover)}.skill-group h3{margin:0;color:var(--text);font-size:14px;font-weight:800;letter-spacing:.05em;text-transform:uppercase}.skill-group h3:before{content:"$ ";color:var(--accent)}.skill-group ul{display:flex;flex-wrap:wrap;align-items:flex-start;align-content:flex-start;gap:8px;list-style:none}.skill-group li{display:inline-flex;align-items:center;width:fit-content;min-height:0;align-self:flex-start;padding:5px 9px;border:1px solid var(--border);color:var(--text);font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;opacity:var(--opacity-default);transition:border-color .25s ease-out,color .25s ease-out,opacity .25s ease-out}.skill-group:hover li,.skill-group.in-view li{border-color:var(--accent);color:var(--accent-bright);opacity:1}section{padding:48px 0;border-bottom:2px solid var(--border)}.section-header{display:flex;align-items:center;gap:12px;margin-bottom:28px}.section-header:before{content:"//";color:var(--accent);font-weight:700;font-size:24px}h2{font-size:clamp(24px,4vw,36px);font-weight:800;letter-spacing:-.5px}.timeline{position:relative;padding-left:24px}.timeline:before{content:"";position:absolute;left:0;top:10px;bottom:8px;width:2px;background:var(--border)}.t-item{position:relative;margin-bottom:40px;transition:opacity .25s ease-out,transform .25s ease-out}.t-item:hover{transform:translateY(-1px)}.t-item:before{content:"";position:absolute;left:-28px;top:6px;width:10px;height:10px;background:var(--accent);box-shadow:var(--glow);clip-path:polygon(50% 0%,100% 50%,50% 100%,0% 50%);transition:background-color .3s ease-out,box-shadow .3s ease-out}.t-item:hover:before{background:var(--accent-bright);box-shadow:0 0 16px #2a5a7a66}.t-desc{color:var(--text);margin-bottom:6px;font-size:14px;opacity:var(--opacity-default);transition:opacity .3s ease-out;padding-left:8px}.t-item li{padding-left:24px;position:relative;margin-bottom:6px;color:var(--text);font-size:13px;opacity:var(--opacity-default);transition:opacity .3s ease-out}.t-item:hover .t-title{color:var(--accent-hover)}.t-item:hover .t-desc,.t-item:hover li{opacity:var(--opacity-hover)}.inline-project-link{appearance:none;border:0;border-radius:0;padding:0;background:transparent;color:var(--accent-hover);font:inherit;font-weight:inherit;text-decoration:underline;text-underline-offset:3px;cursor:pointer}.inline-project-link:hover{color:var(--accent-bright)}.inline-project-link:focus-visible{outline:2px solid var(--accent);outline-offset:2px;color:var(--accent-bright)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.t-header{display:flex;align-items:baseline;gap:12px;margin-bottom:3px;flex-wrap:wrap;min-width:0;flex:1}.t-title{font-size:18px;font-weight:800;letter-spacing:-.2px;transition:color .3s ease-out;white-space:nowrap}.t-meta{color:var(--text);font-size:12px;text-transform:uppercase;letter-spacing:.5px;white-space:nowrap;opacity:var(--opacity-default)}.t-meta:before{content:"[";color:var(--accent)}.t-meta:after{content:"]";color:var(--accent)}.t-toggle{display:inline-flex;align-items:center;gap:8px;margin-top:6px;padding:8px 10px;border:1px solid var(--border);background:var(--bg);color:var(--text);font-family:var(--mono);font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;transition:border-color .2s ease-out,background-color .2s ease-out,color .2s ease-out,box-shadow .2s ease-out,transform .2s ease-out}.t-toggle:before{content:"+";color:var(--accent);font-size:14px;line-height:1}.t-toggle:hover{border-color:var(--accent);background:var(--surface);color:var(--accent-bright);box-shadow:var(--glow);transform:translateY(-1px)}.t-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.t-toggle__label{display:block;line-height:1}.t-item.is-open .t-toggle:before{content:"-"}.t-bullets{margin-top:10px}.t-item ul{list-style:none;margin-top:0;padding-left:16px}.t-item li:before{content:"#";position:absolute;left:0;color:var(--accent);font-weight:700}#education .t-item{margin-bottom:0}.project-note{max-width:760px;margin:-8px 0 38px;color:var(--dim);font-size:15px;line-height:1.7}.projects-root{display:grid;gap:52px}.tags{display:flex;flex-wrap:wrap;gap:7px}.tags .tag{padding:5px 9px}.project-cv-section{display:grid;gap:18px}.project-cv-section__header{display:flex;align-items:baseline;gap:14px;padding-bottom:12px;border-bottom:1px solid var(--border)}.project-cv-section__number{color:var(--accent);font-size:12px;font-weight:700;letter-spacing:.12em}.project-cv-section__header h3{margin:0;color:var(--text-bright);font-size:clamp(17px,2vw,21px);line-height:1.35}.project-flagship{position:relative;display:grid;gap:24px;padding:32px 36px;overflow:hidden;border:1px solid var(--accent-line);border-radius:var(--r);background:var(--flag-tint);transition:border-color .18s ease,background .18s ease,box-shadow .18s ease,transform .18s ease}.project-flagship:before{content:"";position:absolute;inset:0 auto 0 0;width:3px;background:var(--accent)}.project-flagship--media{grid-template-columns:minmax(0,1.05fr) minmax(340px,.95fr);align-items:stretch;gap:38px}.project-flagship:hover{background:var(--flag-tint-hover);box-shadow:var(--lift);transform:translateY(-3px)}.project-flagship__body{display:flex;min-width:0;flex-direction:column;justify-content:center;gap:18px}.project-flagship__header,.project-card__header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.project-flagship__title-row{display:flex;align-items:center;flex-wrap:wrap;gap:14px;min-width:0}.project-flagship__title,.project-card__title,.project-index-row__title{margin:0;color:var(--text-bright);font-weight:700;line-height:1.22}.project-flagship__title{display:inline-flex;align-items:center;gap:10px;font-size:24px}.project-flagship__title:before,.project-card__title:before,.project-index-row__title:before{content:"$ ";color:var(--accent)}.project-flagship__pill{padding:5px 10px;border:1px solid var(--accent-line);border-radius:2px;background:var(--accent-soft);color:var(--accent);font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}.project-flagship__summary{max-width:80ch;margin:0;color:var(--text);font-size:15.5px;line-height:1.65}.project-featured-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px}.project-featured-grid--single .project-card{display:grid;grid-template-columns:minmax(0,.42fr) minmax(0,.58fr)}.project-featured-grid--single .project-card__hero{height:100%;aspect-ratio:auto;border-right:1px solid var(--border);border-bottom:0}.project-featured-grid--three{grid-template-columns:repeat(3,minmax(0,1fr))}.project-card{position:relative;display:flex;min-width:0;flex-direction:column;overflow:hidden;border:1px solid var(--border);border-radius:var(--r);background:var(--surface);transition:border-color .18s ease,background .18s ease,box-shadow .18s ease,transform .18s ease}.project-card:before{content:"";position:absolute;inset:0 auto 0 0;width:2px;background:var(--accent);opacity:0;transition:opacity .18s ease}.project-card:hover,.project-card.in-view{border-color:var(--accent-line);background:var(--surface-2);box-shadow:var(--lift);transform:translateY(-3px)}.project-card:hover:before,.project-card.in-view:before{opacity:1}.project-card__hero{width:100%;margin:0;aspect-ratio:16 / 10;overflow:hidden;border-bottom:1px solid var(--border);background:var(--surface-2)}.project-card__hero--flagship{align-self:stretch;height:100%;min-height:250px;border:1px solid var(--border);border-radius:var(--r)}.project-card__hero img{display:block;width:100%;height:100%;object-fit:cover;object-position:top center;transition:transform .3s ease}.project-card:hover .project-card__hero img{transform:scale(1.03)}.project-card__body{display:flex;flex:1;flex-direction:column;gap:15px;padding:24px 26px 22px}.project-card__heading{display:flex;align-items:baseline;gap:12px;min-width:0}.project-card__meta{display:flex;align-items:flex-end;flex-direction:column;flex-shrink:0;gap:10px}.project-card__title{display:inline-flex;align-items:center;flex-wrap:wrap;gap:9px;font-size:19px}.project-card__favorite{display:inline-flex;align-items:center;justify-content:center;min-width:22px;height:22px;padding:0 6px;border:1px solid var(--accent);background:var(--accent-soft);color:var(--accent-2);font-size:12px;line-height:1}.project-card__status{display:inline-flex;padding:5px 10px;border:1px dashed var(--success);color:var(--success);font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.project-card__summary{max-width:68ch;margin:0;color:var(--dim);font-size:14px;line-height:1.6}.project-card__actions{display:flex;align-items:center;flex-wrap:wrap;gap:12px;margin-top:auto}.project-card__repo,.project-card__expand,.project-index-row__expand{display:inline-flex;align-items:center;gap:7px;border-radius:var(--r);font-family:var(--mono);text-decoration:none;text-transform:uppercase;transition:border-color .15s ease,color .15s ease,background .15s ease,box-shadow .15s ease,transform .15s ease}.project-card__repo{padding:8px 12px;border:1px solid var(--border);background:var(--bg);color:var(--text);font-size:11px;font-weight:700;letter-spacing:.08em}.project-card__repo:after{content:"↗";line-height:1}.project-card__repo:hover{border-color:var(--accent);background:var(--surface);color:var(--accent);box-shadow:var(--lift);transform:translateY(-1px)}.project-card__repo--status,.project-detail__repo--status{border-color:color-mix(in srgb,var(--success) 58%,var(--border));color:var(--success)}.project-card__repo--status:hover,.project-detail__repo--status:hover{border-color:var(--success);color:var(--success)}.project-card__expand,.project-index-row__expand{padding:0;border:0;background:transparent;color:var(--accent);cursor:pointer;font-size:12px;font-weight:700;letter-spacing:.06em}.project-card__expand:hover,.project-index-row__expand:hover{color:var(--accent-2)}.project-card__expand span,.project-index-row__expand span{transition:transform .18s ease}.project-card__expand:hover span,.project-index-row__expand:hover span{transform:translate(4px)}.project-index-group{display:grid;gap:0}.project-index-group__header{display:flex;align-items:baseline;justify-content:space-between;gap:16px;padding-bottom:12px;border-bottom:1px solid var(--border);cursor:pointer;list-style:none}.project-index-group__header::-webkit-details-marker{display:none}.project-index-group__header:focus-visible{outline:2px solid var(--accent);outline-offset:6px}.project-index-group__label{color:var(--accent);font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}.project-index-group__meta{display:inline-flex;align-items:center;gap:12px}.project-index-group__count{color:var(--dimmer);font-size:11px;letter-spacing:.08em;text-transform:uppercase}.project-index-group__toggle{position:relative;width:14px;height:14px;flex:none;color:var(--accent)}.project-index-group__toggle:before,.project-index-group__toggle:after{content:"";position:absolute;top:50%;left:0;width:100%;height:1px;background:currentColor;transform:translateY(-50%);transition:transform .18s ease,opacity .18s ease}.project-index-group__toggle:after{transform:translateY(-50%) rotate(90deg)}.project-index-group[open] .project-index-group__toggle:after{opacity:0;transform:translateY(-50%) rotate(0)}.project-index-group__body{display:grid;gap:0}.project-index-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:16px 24px;padding:20px 14px;border-bottom:1px solid var(--border-soft);border-radius:var(--r);transition:background .15s ease}.project-index-row--media{grid-template-columns:118px minmax(0,1fr) auto}.project-index-row:hover,.project-index-row.in-view{background:var(--surface)}.project-index-row__thumb{width:118px;margin:0;aspect-ratio:16 / 10;overflow:hidden;border:1px solid var(--border);border-radius:var(--r);background:var(--surface-2)}.project-index-row__thumb img{display:block;width:100%;height:100%;object-fit:cover;object-position:top center}.project-index-row__main{min-width:0}.project-index-row__title-line{display:flex;align-items:center;flex-wrap:wrap;gap:12px}.project-index-row__title{display:inline-flex;align-items:center;gap:8px;font-size:16px}.project-index-row__tags{display:flex;flex-wrap:wrap;gap:7px}.project-index-row__tags span{color:var(--dimmer);font-size:10px;letter-spacing:.05em;text-transform:uppercase}.project-index-row__tags span:before{content:".";margin-right:7px;color:var(--border)}.project-index-row__summary{max-width:78ch;margin:7px 0 0;color:var(--dim);font-size:13.5px;line-height:1.6}.project-index-row__actions{display:flex;align-items:center;gap:18px;white-space:nowrap}html.project-detail-open,html.project-detail-open body{overflow:hidden}.project-detail{width:100vw;height:100vh;max-width:none;max-height:none;margin:0;padding:0;border:0;background:transparent;overflow:hidden}.project-detail::backdrop{background:color-mix(in srgb,var(--bg) 56%,rgba(0,0,0,.72));backdrop-filter:blur(7px)}.project-detail__shell{display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:clamp(16px,3vw,40px)}.project-detail__panel{display:flex;flex-direction:column;width:min(1380px,calc(100vw - clamp(32px,6vw,80px)));height:min(92vh,calc(100vh - clamp(32px,6vw,80px)));overflow:hidden;border:1px solid var(--border);border-radius:var(--r);background:var(--bg);box-shadow:var(--shadow)}.project-detail__toolbar{display:flex;align-items:center;justify-content:space-between;flex-shrink:0;gap:16px;padding:14px 20px 14px 28px;border-bottom:1px solid var(--border-soft);background:color-mix(in srgb,var(--bg) 92%,transparent);backdrop-filter:blur(8px)}.project-detail__crumb,.project-detail__eyebrow{color:var(--dimmer);font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}.project-detail__close{display:inline-flex;align-items:center;gap:9px;padding:9px 16px;border:1px solid var(--border);border-radius:var(--r);background:var(--surface);color:var(--text);cursor:pointer;font:inherit;font-size:12px;letter-spacing:.08em;text-transform:uppercase;transition:border-color .15s ease,color .15s ease,background .15s ease}.project-detail__close:hover{border-color:var(--accent);color:var(--accent)}.project-detail__close-mark{font-size:14px;line-height:1}.project-detail__scroll{min-height:0;flex:1;overflow-y:auto;overflow-x:hidden;padding-bottom:60px;scroll-behavior:smooth}.project-detail__scroll::-webkit-scrollbar{width:10px}.project-detail__scroll::-webkit-scrollbar-thumb{border-radius:10px;background:var(--border)}.project-detail__header,.project-detail__sections{width:min(100%,1120px);margin:0 auto;padding-left:clamp(24px,5vw,72px);padding-right:clamp(24px,5vw,72px)}.project-detail__header{display:grid;gap:18px;padding-top:38px;padding-bottom:30px;border-bottom:1px solid var(--border-soft)}.project-detail__topline{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.project-detail__eyebrow{margin:0;color:var(--accent)}.project-detail__eyebrow:before{content:"// "}.project-detail__title{margin:0;color:var(--text-bright);font-size:clamp(34px,5vw,52px);font-weight:800;letter-spacing:-.04em;line-height:1.04}.project-detail__title:before{content:"$ ";color:var(--accent)}.project-detail__summary{width:min(100%,96ch);max-width:none;margin:0;color:var(--text);font-size:17px;line-height:1.6}.project-detail__footer{display:flex;align-items:center;flex-wrap:wrap;gap:24px}.project-detail__actions{display:flex;align-items:center;flex-wrap:wrap;gap:12px}.project-detail__sections{display:grid;gap:30px;padding-top:34px}.project-detail__section{display:grid;gap:16px;padding-top:0}.project-detail__section+.project-detail__section{padding-top:30px;border-top:1px solid var(--border-soft)}.project-detail__section--media+.project-detail__section--text{padding-top:22px}.project-detail__section h4{width:min(100%,96ch);max-width:none;margin:0;color:var(--text-bright);font-size:15px;font-weight:800;letter-spacing:.08em;line-height:1.35;text-transform:uppercase}.project-detail__section h4:before{content:"// ";color:var(--accent)}.project-detail__section p{width:min(100%,96ch);max-width:none;margin:0;color:var(--text);font-size:16px;line-height:1.72}@media(min-width:960px){.project-detail__section--mixed{gap:26px}.project-detail__section--mixed .project-inline-media{margin-top:2px}}.project-inline-media{display:grid;gap:24px;min-width:0;margin-top:12px}.project-inline-media--two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-inline-media--three{grid-template-columns:repeat(3,minmax(0,1fr))}.project-inline-media__figure{min-width:0;margin:0}.project-inline-media__trigger{display:block;border-bottom:0;color:inherit;cursor:zoom-in}.project-inline-media__trigger img{display:block;width:100%;max-width:100%;height:auto;max-height:min(78vh,900px);object-fit:contain;border:1px solid var(--border);border-radius:var(--r);background:var(--surface);transition:border-color .2s ease,transform .2s ease}.project-inline-media__trigger:hover img{border-color:var(--accent-line);transform:scale(1.01)}.project-inline-media__caption{display:block;margin-top:9px;color:var(--dimmer);font-size:12px;letter-spacing:.08em;text-transform:uppercase}.project-inline-media__caption:first-letter{color:var(--accent)}@media(max-width:980px){.project-featured-grid--single .project-card{grid-template-columns:1fr}.project-featured-grid--single .project-card__hero{height:auto;aspect-ratio:16 / 10;border-right:0;border-bottom:1px solid var(--border)}.project-featured-grid--three{grid-template-columns:repeat(2,minmax(0,1fr))}.project-flagship--media{grid-template-columns:1fr}.project-card__hero--flagship{min-height:0;aspect-ratio:16 / 9}}@media(max-width:760px){.projects-root{gap:38px}.project-featured-grid,.project-featured-grid--three,.project-inline-media--two,.project-inline-media--three{grid-template-columns:1fr}.project-flagship{padding:26px 24px}.project-card__body{padding:22px}.project-card__header,.project-flagship__header,.project-index-row,.project-index-row__actions{align-items:flex-start}.project-index-row{grid-template-columns:1fr}.project-index-row__thumb{width:min(220px,100%)}.project-index-row__actions{justify-content:flex-start}.project-detail__shell{padding:0}.project-detail__panel{width:100%;height:100%;border:0;border-radius:0}.project-detail__toolbar{padding:14px 20px}.project-detail__header,.project-detail__sections{padding-left:22px;padding-right:22px}}.contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:start}.contact-info{padding-top:8px}.contact-info p{color:var(--text);font-size:14px;margin-bottom:20px;line-height:1.7;opacity:var(--opacity-default)}.contact-facts{display:grid;gap:10px;margin:0 0 22px;padding:16px;border:1px solid var(--border);background:var(--bg-alt)}.contact-facts div{display:grid;gap:3px}.contact-facts dt{color:var(--accent);font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.contact-facts dd{margin:0;color:var(--text);font-size:13px;line-height:1.5;opacity:var(--opacity-default)}.contact-links{display:flex;flex-direction:column;gap:12px}.contact-link{display:inline-flex;align-items:center;gap:10px;font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;padding:10px 0;border-bottom:1px solid var(--border)!important;transition:border-color .2s ease-out,transform .2s ease-out}.contact-link:hover{border-bottom-color:var(--accent)!important;transform:translate(6px)}.contact-link span{color:var(--accent);font-size:14px}.contact-form{background:var(--bg-alt);border:2px solid var(--border);padding:32px}.form-group{margin-bottom:20px;position:relative}.form-group label,.form-group__label{display:block;margin-bottom:8px;font-weight:800;font-size:13px;text-transform:uppercase;letter-spacing:.5px;color:var(--text)}.form-group label:after,.form-group__label:after{content:":";color:var(--accent)}input,textarea{width:100%;padding:12px;border:2px solid var(--border);background:var(--bg);color:var(--text);font-family:var(--mono);font-size:13px;transition:border-color .3s ease-out,box-shadow .3s ease-out}input:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:var(--glow)}input.error,textarea.error{border-color:var(--warning)}textarea{resize:vertical;min-height:120px}.field-error{display:none;font-size:11px;color:var(--warning);margin-top:4px;font-weight:400}.field-error.show{display:block}.char-count{font-size:11px;color:var(--muted);text-align:right;margin-top:4px;font-weight:400}.char-count.warning{color:var(--amber)}.char-count.error{color:var(--warning)}button[type=submit]{background:var(--accent);color:var(--bg);border:2px solid var(--accent);padding:12px 24px;font-family:var(--mono);font-weight:800;font-size:13px;cursor:pointer;text-transform:uppercase;letter-spacing:.5px;transition:background-color .3s ease-out,border-color .3s ease-out,transform .3s ease-out,box-shadow .3s ease-out;margin-top:8px}button[type=submit]:hover{background:var(--accent-dim);border-color:var(--accent-dim);transform:translateY(-2px);box-shadow:var(--glow)}button[type=submit]:disabled{opacity:.6;cursor:not-allowed;transform:none}button[type=submit]:disabled:hover{background:var(--accent);border-color:var(--accent);transform:none;box-shadow:none}#statusMessage{margin-top:16px;padding:12px;border:2px solid var(--border);display:none;font-size:13px;font-weight:400}#statusMessage.success{border-color:var(--success);background:#2aa1981a;color:var(--success)}#statusMessage.error{border-color:var(--warning);background:#dc322f1a;color:var(--warning)}.loader{display:none;color:var(--muted);margin-top:12px;font-size:13px}footer{padding:40px 0;text-align:center;color:var(--text);font-size:12px;opacity:var(--opacity-default)}footer .links{display:flex;justify-content:center;gap:16px;margin-bottom:16px;flex-wrap:wrap}#skills,#projects,#education,#contact{content-visibility:auto;contain-intrinsic-size:auto 600px}@media(max-width:980px){.contact-grid{grid-template-columns:1fr;gap:32px}.project-detail-grid,.sub-projects-grid{grid-template-columns:1fr}.wrap{padding:0 20px}}@media(max-width:768px){html{scroll-padding-top:72px}section[id]{scroll-margin-top:72px}.nav{grid-template-columns:auto 1fr auto;display:grid}.brand{order:1}.nav-right{order:2;justify-self:end;gap:8px}.menu-toggle{order:3;display:block}.hero .tagline,.skill-group li,.hero-card li,.t-desc,.t-item li,.t-meta,.project p,.project li,.project-detail-grid li,.tag,.sub-projects-header,.contact-info p{opacity:var(--opacity-mobile)}nav{position:fixed;top:60px;left:0;right:0;z-index:110;background:var(--bg-alt);border-bottom:2px solid var(--border);box-shadow:var(--shadow);flex-direction:column;padding:12px 20px;max-height:calc(100svh - 60px);overflow-y:auto;-webkit-overflow-scrolling:touch;transform:translateY(-100%);opacity:0;transition:transform .3s ease-out,opacity .3s ease-out;pointer-events:none}nav.open{transform:translateY(0);opacity:1;pointer-events:auto}nav a{width:100%;padding:12px;text-align:left}.hero{padding:40px 0}.hero h1{font-size:clamp(32px,10vw,44px);letter-spacing:0;word-spacing:normal}.hero h1 .accent{display:block;overflow-wrap:normal;word-break:normal}.hero h1 .accent.support:after{display:none}section{padding:32px 0}.cta{flex-direction:column}.btn{width:100%;justify-content:center}.contact-form{padding:20px}.repo-link,.prod-badge{top:20px;right:20px;font-size:10px;padding:5px 10px}.timeline{padding-left:32px;position:relative}.t-item{padding:12px 0}.t-title{font-size:18px}.t-desc{font-size:14px}.t-item li{font-size:13px}.t-meta{max-width:100%;font-size:12px;line-height:1.5;white-space:normal;overflow-wrap:anywhere}.project h3{font-size:20px}.project p{font-size:14px}.project li{font-size:13px}.hero-card h3{font-size:14px}.hero-card li{font-size:13px}.tag{font-size:11px}.project-card__header{gap:10px}.project-card__meta{gap:8px}.project-card__repo,.project-card__status{padding:6px 10px;font-size:10px}.project-misc__head{gap:10px}.project-card__favorite{min-width:22px;height:22px;padding:0 6px;font-size:11px}.timeline:before{display:block;content:"";position:absolute;left:0;top:18px;bottom:8px;width:2px;background:var(--border)}.t-item:before{display:block;content:"";position:absolute;left:-36px;top:18px;width:10px;height:10px;background:var(--accent);box-shadow:var(--glow);clip-path:polygon(50% 0%,100% 50%,50% 100%,0% 50%);transition:background-color .3s ease-out,box-shadow .3s ease-out}.t-item li:before{display:block}.t-item li{padding-left:24px}.t-toggle{margin-top:8px;padding:8px 10px}.t-title{white-space:normal;word-wrap:break-word}.hero-card{transition:opacity .3s ease-out,border-color .3s ease-out,box-shadow .3s ease-out;margin-top:28px;padding:18px;opacity:1}.project-card{transition:opacity .25s ease-out,border-color .25s ease-out,box-shadow .25s ease-out;opacity:.86}.project-card__title,.project-card__summary,.project-card .tag,.project-card__repo{transition:none}.hero-card.in-view{opacity:1;border-color:var(--border);box-shadow:var(--shadow)}.hero-card.in-view h3{color:var(--text)}.hero-card.in-view li{opacity:var(--opacity-mobile)}.skill-group:hover{border-color:var(--border);box-shadow:none;transform:none}.skill-group:hover h3,.skill-group:hover li{color:var(--text)}.skill-group:hover li{border-color:var(--border)}.skill-group.in-view{border-color:var(--accent);box-shadow:var(--glow);transform:none}.skill-group.in-view h3{color:var(--accent-hover)}.skill-group.in-view li{border-color:var(--accent);color:var(--accent-bright);opacity:1}.btn:active{transform:scale(.98);opacity:.8}.btn:hover{transform:none}.btn:focus:not(:focus-visible){outline:none}nav a:active{background:var(--accent);color:var(--bg)}nav a:focus:not(:focus-visible){outline:none}.theme-toggle:active{transform:scale(.95)}.theme-toggle:focus:not(:focus-visible){outline:none}.contact-link:focus:not(:focus-visible){outline:none}.contact-link:active{background:var(--bg-alt);transform:translate(4px)}.t-item:hover{transform:none}.project-card.in-view{opacity:1;border-color:var(--accent);box-shadow:var(--glow)}.project-card.in-view .project-card__title{color:var(--accent-hover)}.project-card.in-view .tag{border-color:var(--accent);color:var(--accent-bright)}}@media(hover:hover)and (pointer:fine){html.using-keyboard .t-item:focus-within{transform:translateY(-1px)}html.using-keyboard .t-item:focus-within:before{background:var(--accent-bright);box-shadow:0 0 16px #2a5a7a66}html.using-keyboard .t-item:focus-within .t-title{color:var(--accent-hover)}html.using-keyboard .t-item:focus-within .t-desc,html.using-keyboard .t-item:focus-within li{opacity:var(--opacity-hover)}.t-toggle:focus-visible{border-color:var(--accent);background:var(--surface);color:var(--accent-bright);box-shadow:var(--glow);transform:translateY(-1px)}html.using-keyboard .project:focus-within{border-color:var(--accent);box-shadow:var(--glow);transform:translate(4px)}html.using-keyboard .project:focus-within h3{color:var(--accent-hover)}html.using-keyboard .project:focus-within p,html.using-keyboard .project:focus-within li{opacity:var(--opacity-hover)}html.using-keyboard .project:focus-within .tag{border-color:var(--accent);box-shadow:var(--glow);color:var(--accent-bright)}html.using-keyboard .project:focus-within .repo-link{opacity:1;border-color:var(--accent)}html.using-keyboard .project:focus-within .prod-badge{opacity:1;border-color:var(--prod-badge);color:var(--prod-badge);background:var(--surface);transform:translate(2px)}html.using-keyboard .project:focus-within .prod-badge:before{background:var(--prod-badge)}.repo-link:focus-visible{border-color:var(--accent);background:var(--surface);opacity:1;transform:translate(2px)}.project-misc__summary:focus-visible{background:var(--surface);color:var(--accent-bright);box-shadow:inset 0 0 0 1px var(--accent),var(--glow);transform:translateY(-1px)}.project-misc__summary:focus-visible:before{color:var(--accent-hover)}html.using-keyboard .project-card:focus-within{border-color:var(--accent);box-shadow:var(--glow);transform:translateY(-1px)}html.using-keyboard .project-card:focus-within .project-card__title{color:var(--accent-hover)}html.using-keyboard .project-card:focus-within .tag{border-color:var(--accent);box-shadow:none;color:var(--accent-bright)}html.using-keyboard .project-card--favorite:focus-within .project-card__favorite{transform:translateY(-1px);box-shadow:var(--glow);color:var(--accent-hover)}.project-card__repo:focus-visible{color:var(--accent-hover);border-color:var(--accent);background:var(--surface);box-shadow:var(--glow);transform:translateY(-1px)}.project-detail__close:focus-visible{border-color:var(--accent);color:var(--accent-hover);background:var(--surface);box-shadow:var(--glow);transform:translateY(-1px)}html.using-keyboard .project-inline-media__figure:focus-within{border-color:var(--accent);box-shadow:var(--glow);transform:translateY(-1px)}.project-lightbox__close:focus-visible,.project-lightbox__nav:focus-visible{border-color:var(--accent);color:var(--accent-hover);background:var(--surface);box-shadow:var(--glow)}}@media(hover:none),(pointer:coarse){a:hover,a:active{border-bottom-color:transparent}nav a:hover{background:transparent;border-color:transparent;border-bottom-color:transparent;box-shadow:none;color:var(--accent)}.theme-toggle:hover,.menu-toggle:hover{background:var(--surface);border-color:var(--border);box-shadow:none;color:var(--text)}.btn:hover{background:var(--surface);border-color:var(--border);box-shadow:none;transform:none;color:var(--text)}.btn.primary:hover{background:var(--accent);border-color:var(--accent);color:var(--bg);box-shadow:none;transform:none}.btn.secondary:hover{background:transparent;border-color:var(--border);color:var(--text);box-shadow:none;transform:none}.btn:active{box-shadow:var(--shadow)}.project:hover{border-color:var(--border);box-shadow:none;transform:none}.project:hover h3{color:var(--text)}.project:hover p,.project:hover li{opacity:var(--opacity-mobile)}.project:hover .tag{border-color:var(--border);box-shadow:none;color:var(--text)}.project:hover .screenshot-wrap{border-color:var(--border)}.project:hover .screenshot-wrap img{filter:grayscale(15%)}.project:hover .repo-link{opacity:.7;border-color:var(--border);transform:none}.project:hover .prod-badge{opacity:.7;border-color:var(--prod-badge-muted);color:var(--prod-badge-muted);background:var(--bg);transform:none}.project:hover .prod-badge:before{background:var(--prod-badge-muted)}.project-card:hover{border-color:var(--border);box-shadow:none;transform:none}.project-card:hover .project-card__title{color:var(--text)}.project-card:hover .tag{border-color:var(--border);box-shadow:none;color:var(--text)}.project-card:active{border-color:var(--accent);box-shadow:var(--shadow);transform:translateY(-1px)}.project-card:active .project-card__title{color:var(--accent-hover)}.project-card:active .tag{border-color:var(--accent);box-shadow:none;color:var(--accent-bright)}.project-card--favorite .tag{border-color:var(--border);box-shadow:none;color:var(--text)}.project-card--favorite .project-card__favorite{transform:none;box-shadow:inset 0 0 0 1px var(--accent);color:var(--accent-bright)}.project-card__repo:hover{color:var(--text);border-color:var(--border);background:var(--bg);box-shadow:none;transform:none}.project-card__repo:active{color:var(--accent-hover);border-color:var(--accent);background:var(--surface);box-shadow:var(--shadow);transform:scale(.98)}.project-misc__summary:hover{background:transparent;color:var(--text);box-shadow:inset 0 0 0 1px transparent;transform:none}.project-misc__summary:active{background:var(--surface);color:var(--accent-bright);box-shadow:inset 0 0 0 1px var(--accent),var(--shadow);transform:translateY(-1px)}.project-misc__summary:active:before{color:var(--accent-hover)}.repo-link:hover{border-color:var(--border);background:var(--bg);opacity:.7;transform:none}.hero-card:hover{border-color:var(--border);box-shadow:var(--shadow);transform:none!important;background:var(--bg-alt)}.hero-card:hover h3{color:var(--text)}.hero-card:hover li{opacity:var(--opacity-mobile)}.t-item:hover{transform:none}.t-item:hover .t-title{color:var(--text)}.t-item:hover .t-desc,.t-item:hover li{opacity:var(--opacity-mobile)}.t-item:hover:before{background:var(--accent);box-shadow:var(--glow)}.t-toggle:hover{border-color:var(--border);background:var(--bg);color:var(--accent);box-shadow:none;transform:none}.t-toggle:active{border-color:var(--accent);background:var(--surface);color:var(--accent-bright);box-shadow:var(--shadow);transform:scale(.98)}.contact-link:hover{border-bottom-color:var(--border)!important;transform:none}button[type=submit]:hover{background:var(--accent);border-color:var(--accent);transform:none;box-shadow:none}.project-detail__close:hover{border-color:var(--border);color:var(--text);background:var(--bg);box-shadow:var(--shadow);transform:none}.project-detail__close:active,.project-lightbox__close:active,.project-lightbox__nav:active{border-color:var(--accent);color:var(--accent-hover);background:var(--surface);box-shadow:var(--shadow);transform:scale(.98)}.project-lightbox__close:hover,.project-lightbox__nav:hover{border-color:var(--border);color:var(--text)}.project-inline-media__figure:hover{border-color:var(--border);box-shadow:var(--shadow);transform:none}.project-inline-media__figure:active{border-color:var(--accent);box-shadow:var(--shadow);transform:translateY(-1px)}.project-inline-media__trigger:hover img{transform:none}.project-inline-media__trigger:active img{transform:scale(1.01)}.sub-projects-grid .project:hover{border-left-color:var(--border);transform:none}.hero h1:hover .accent{color:var(--accent-bright);text-shadow:var(--hero-glow);transform:none}.hero h1:hover .accent.support:after{color:var(--accent-bright)}nav a,.theme-toggle,.menu-toggle,.btn,.t-toggle,.contact-link,.repo-link,.screenshot-trigger,.project-card__repo,.project-misc__summary,.project-inline-media__trigger,.project-detail__close,.project-lightbox__close,.project-lightbox__nav,button[type=submit]{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation}nav a:focus:not(:focus-visible),.theme-toggle:focus:not(:focus-visible),.menu-toggle:focus:not(:focus-visible),.btn:focus:not(:focus-visible),.t-toggle:focus:not(:focus-visible),.contact-link:focus:not(:focus-visible),.repo-link:focus:not(:focus-visible),.screenshot-trigger:focus:not(:focus-visible),.project-card__repo:focus:not(:focus-visible),.project-misc__summary:focus:not(:focus-visible),.project-inline-media__trigger:focus:not(:focus-visible),.project-detail__close:focus:not(:focus-visible),.project-lightbox__close:focus:not(:focus-visible),.project-lightbox__nav:focus:not(:focus-visible),button[type=submit]:focus:not(:focus-visible){outline:none}}html.touch-ui a:hover,html.touch-ui a:active{border-bottom-color:transparent}html.touch-ui nav a:hover{background:transparent;border-color:transparent;border-bottom-color:transparent;box-shadow:none;color:var(--accent)}html.touch-ui .theme-toggle:hover,html.touch-ui .menu-toggle:hover{background:var(--surface);border-color:var(--border);box-shadow:none;color:var(--text)}html.touch-ui .btn:hover{background:var(--surface);border-color:var(--border);box-shadow:none;transform:none;color:var(--text)}html.touch-ui .btn.primary:hover{background:var(--accent);border-color:var(--accent);color:var(--bg);box-shadow:none;transform:none}html.touch-ui .btn.secondary:hover{background:transparent;border-color:var(--border);color:var(--text);box-shadow:none;transform:none}html.touch-ui .project-card:hover,html.touch-ui .skill-group:hover{border-color:var(--border);box-shadow:none;transform:none}html.touch-ui .skill-group:hover h3{color:var(--text)}html.touch-ui .skill-group:hover li{border-color:var(--border);color:var(--text)}html.touch-ui .project-card:hover .project-card__title{color:var(--text)}html.touch-ui .project-card:hover .tag{border-color:var(--border);box-shadow:none;color:var(--text)}html.touch-ui .project-card--favorite:hover .project-card__favorite{transform:none;box-shadow:inset 0 0 0 1px var(--accent);color:var(--accent-bright)}html.touch-ui .project-card__repo:hover{color:var(--text);border-color:var(--border);background:var(--bg);box-shadow:none;transform:none}html.touch-ui .project-misc__summary:hover{background:transparent;color:var(--text);box-shadow:inset 0 0 0 1px transparent;transform:none}html.touch-ui .project-misc__summary:hover:before{color:var(--accent)}html.touch-ui .hero-card:hover{border-color:var(--border);box-shadow:var(--shadow);transform:none!important;background:var(--bg-alt)}html.touch-ui .hero-card:hover h3{color:var(--text)}html.touch-ui .hero-card:hover li{opacity:var(--opacity-mobile)}html.touch-ui .t-item:hover{transform:none}html.touch-ui .t-item:hover .t-title{color:var(--text)}html.touch-ui .t-item:hover .t-desc,html.touch-ui .t-item:hover li{opacity:var(--opacity-mobile)}html.touch-ui .t-item:hover:before{background:var(--accent);box-shadow:var(--glow)}html.touch-ui .t-toggle:hover{border-color:var(--border);background:var(--bg);color:var(--accent);box-shadow:none;transform:none}html.touch-ui .contact-link:hover{border-bottom-color:var(--border)!important;transform:none}html.touch-ui .project-detail__close:hover{border-color:var(--border);color:var(--text);background:var(--bg);box-shadow:var(--shadow);transform:none}html.touch-ui .project-lightbox__close:hover,html.touch-ui .project-lightbox__nav:hover{border-color:var(--border);color:var(--text)}html.touch-ui .project-inline-media__figure:hover{border-color:var(--border);box-shadow:var(--shadow);transform:none}html.touch-ui .project-inline-media__trigger:hover img{transform:none}@media(max-width:768px){.hero-card,.t-item,.project,nav{transition:opacity .25s ease-out,border-color .25s ease-out,box-shadow .25s ease-out}.hero-card h3,.hero-card li,.t-item:before,.t-title,.t-desc,.t-item li,.project h3,.project p,.project li,.tag,.prod-badge,.repo-link,.screenshot-wrap,.screenshot-wrap img{transition:none}.project{transition:opacity .25s ease-out,box-shadow .25s ease-out,border-color .25s ease-out}.project.in-view,.project.in-view .screenshot-wrap{border-color:var(--accent)}.project.in-view .screenshot-wrap img{filter:grayscale(0%)}.project.in-view{opacity:1;box-shadow:var(--glow)}.project.in-view .tag{border-color:var(--accent);color:var(--accent-bright)}.project.in-view h3{color:var(--accent-hover)}.project.in-view p,.project.in-view li{opacity:1}.project.in-view .prod-badge{opacity:1;border-color:var(--prod-badge);color:var(--prod-badge);background:var(--surface)}.project.in-view .prod-badge:before{background:var(--prod-badge)}.project.in-view .repo-link{opacity:1;border-color:var(--accent)}.sub-projects-grid .project.in-view{border-left-color:var(--accent);box-shadow:none}.t-item{transition:opacity .25s ease-out;opacity:.75}.t-item.in-view{opacity:1}.t-item.in-view:before{background:var(--accent-bright);box-shadow:0 0 16px #2a5a7a99}.t-item.in-view .t-title{color:var(--text)}.t-item.in-view .t-desc,.t-item.in-view li{opacity:1}}@media(min-width:769px){.reveal{opacity:0;transform:translateY(8px);transition:opacity .22s ease-out,transform .22s ease-out}.reveal.in{opacity:1;transform:translateY(0)}.hero-card.reveal.in{transform:none}}@media(max-width:768px){.reveal{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.reveal{opacity:1;transform:none}*{transition:none!important;animation:none!important}}body{background:var(--bg);color:var(--text);font-size:15px;letter-spacing:0}a{color:var(--accent)}.wrap{max-width:var(--maxw);padding:0 32px}header.site{background:color-mix(in srgb,var(--bg) 86%,transparent);border-bottom:1px solid var(--border-soft);box-shadow:none;backdrop-filter:blur(10px)}.nav{height:66px}.brand{color:var(--text-bright);font-size:15px;letter-spacing:0}.brand:before{color:var(--accent)}nav{gap:14px}nav a{padding:4px 0;border:0;color:var(--dim);font-size:14px;font-weight:400}.site-switcher{position:relative;z-index:220}.site-switcher:after{content:"";position:absolute;top:100%;right:0;width:max(100%,132px);height:14px}.site-switcher__button{padding:4px 0;border:0;background:transparent;color:var(--dim);font-family:var(--mono);font-size:14px;font-weight:400;cursor:pointer}.site-switcher__button:hover,.site-switcher.is-open .site-switcher__button{color:var(--accent)}.site-switcher__button:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.site-switcher__menu{position:absolute;top:calc(100% + 12px);right:0;z-index:230;display:grid;min-width:132px;padding:8px;border:1px solid var(--border);border-radius:var(--r);background:var(--surface);box-shadow:var(--shadow);opacity:0;transform:translateY(-6px);pointer-events:none;transition:opacity .18s ease-out,transform .18s ease-out}.site-switcher:hover .site-switcher__menu,.site-switcher:focus-within .site-switcher__menu,.site-switcher.is-open .site-switcher__menu{opacity:1;transform:translateY(0);pointer-events:auto}.site-switcher__menu a{min-height:32px;padding:8px 10px;color:var(--dim);white-space:nowrap}.site-switcher__menu a:hover,.site-switcher__menu a:focus-visible{color:var(--accent)}nav a:hover{border:0;background:transparent;box-shadow:none;color:var(--accent)}nav a[data-active=true],nav a[aria-current=location]{color:var(--accent)}nav a[data-active=true]:after,nav a[aria-current=location]:after{content:"";display:block;height:2px;margin-top:5px;background:currentColor}.theme-toggle,.menu-toggle{border:1px solid var(--border);border-radius:var(--r);background:var(--surface);color:var(--text);box-shadow:none}.theme-toggle:hover,.menu-toggle:hover{border-color:var(--accent);background:var(--surface);box-shadow:none;color:var(--accent)}section{padding:86px 0;border-bottom:0;border-top:1px solid var(--border-soft)}.section-header{margin-bottom:8px}.section-header:before{color:var(--accent);font-size:clamp(30px,4.2vw,46px);line-height:1}h2{color:var(--text-bright);font-size:clamp(30px,4.2vw,46px);line-height:1;letter-spacing:0}.hero{padding:78px 0 70px;border-bottom:0}.hero h1{max-width:1000px;margin:0 0 22px;color:var(--text-bright);font-size:clamp(38px,6.6vw,74px);line-height:1.02;letter-spacing:0;word-spacing:normal}.hero h1 .accent{color:var(--accent)}.hero h1 .accent.support:after{height:.92em;margin-left:6px;color:var(--accent)}.hero .tagline{max-width:60ch;margin:0 0 30px;color:var(--text);font-size:16px}.hero .tagline strong{color:var(--text-bright)}.cta{margin:0 0 46px}.btn{padding:11px 18px;border:1px solid var(--border);border-radius:var(--r);background:transparent;box-shadow:none;color:var(--text);font-size:12px;letter-spacing:.08em}.btn:hover{border-color:var(--accent);background:transparent;box-shadow:none;color:var(--accent)}.btn.primary{border-color:var(--accent);background:var(--accent);color:var(--bg)}[data-theme=light] .btn.primary,[data-theme=light] button[type=submit]{color:#fff}.btn.primary:hover{border-color:var(--accent-2);background:var(--accent-2);color:var(--bg)}.hero-card,.skill-group,.contact-facts,.contact-form{border:1px solid var(--border);border-radius:var(--r);background:var(--surface);box-shadow:none}.hero-card{padding:30px 34px;margin-top:0}.hero-card:hover,.skill-group:hover,.skill-group.in-view{border-color:var(--accent-line);box-shadow:var(--lift);transform:translateY(-2px)}.hero-card h3,.skill-group h3{color:var(--accent);font-size:13px;letter-spacing:.08em}.hero-card li,.skill-group li,.t-desc,.t-item li,.contact-info p,.contact-facts dd{color:var(--dim)}.hero-card li:before,.t-item li:before{color:var(--accent)}.skills-grid{gap:20px;margin-top:30px}.skill-group{padding:24px}.skill-group ul{align-items:flex-start;align-content:flex-start;gap:7px}.skill-group li,.tag{display:inline-flex;align-items:center;align-self:flex-start;width:fit-content;min-height:0;border:0;border-radius:2px;background:var(--chip);color:var(--chip-text);font-size:11px;letter-spacing:.05em}.skill-group--languages ul{gap:8px}.skill-group--languages li{flex:0 1 auto;max-width:100%;white-space:normal;overflow-wrap:anywhere;line-height:1.35;padding:7px 10px}.skill-group:hover li,.skill-group.in-view li,.project-card:hover .tag,.project-card.in-view .tag{border:0;color:var(--chip-text)}.timeline{margin-top:34px;padding-left:30px}.timeline:before{left:4px;width:1px;background:var(--border)}.t-item:before{left:-30px;top:7px;width:9px;height:9px;background:var(--accent);box-shadow:none;transform:rotate(45deg);clip-path:none}.t-title{color:var(--text-bright);font-size:16px;letter-spacing:0;white-space:normal}.t-meta{color:var(--dimmer)}.t-toggle{border:1px solid var(--border);border-radius:var(--r);background:transparent;color:var(--dim);box-shadow:none}.t-toggle:hover{border-color:var(--accent);background:transparent;box-shadow:none;color:var(--accent)}.contact-grid{margin-top:34px}.contact-facts{padding:24px 26px}.contact-facts dt{color:var(--accent)}.contact-link{border-bottom:0!important;border-top:1px solid var(--border-soft);color:var(--accent);letter-spacing:.05em}.contact-link:last-child{border-bottom:1px solid var(--border-soft)!important}.contact-link:after{content:"↗";margin-left:auto}.contact-link:hover{border-bottom-color:var(--border-soft)!important;color:var(--accent-2);transform:none}.contact-form{padding:32px}input,textarea{border:1px solid var(--border);border-radius:var(--r);background:var(--surface)}input:focus,textarea:focus{border-color:var(--accent);box-shadow:none}button[type=submit]{border:1px solid var(--accent);border-radius:var(--r);background:var(--accent);color:var(--bg);box-shadow:none}button[type=submit]:hover{border-color:var(--accent-2);background:var(--accent-2);box-shadow:none;transform:none}footer{border-top:1px solid var(--border-soft);color:var(--dimmer)}@media(max-width:768px){.wrap{padding:0 20px}section{padding:60px 0}.hero{padding:52px 0 58px}nav{background:var(--bg);border-bottom:1px solid var(--border-soft)}.site-switcher,.site-switcher__button{width:100%;text-align:left}.site-switcher__button{padding:12px}.site-switcher__menu{position:static;display:none;width:100%;margin-top:4px;padding:4px 0 4px 12px;border:0;border-left:1px solid var(--border);border-radius:0;background:transparent;box-shadow:none;opacity:0;transform:none}.site-switcher:hover .site-switcher__menu,.site-switcher:focus-within .site-switcher__menu,.site-switcher.is-open .site-switcher__menu{display:grid;opacity:1}nav a[data-active=true],nav a[aria-current=location]{background:var(--surface);color:var(--accent)}nav a[data-active=true]:after,nav a[aria-current=location]:after{width:28px}.brand{max-width:210px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nav-right{min-width:0}.theme-toggle,.menu-toggle{flex-shrink:0;padding-left:9px;padding-right:9px}.hero h1 .accent{display:block}.hero h1,.hero .tagline,.hero-card,.hero-card li,.project-flagship,.project-card,.project-index-row{max-width:100%;overflow-wrap:anywhere}.hero .tagline{max-width:34ch}.hero-card{max-width:38ch}}:root{--maxw: 1280px}html{scroll-padding-top:88px;overflow-x:clip}body{height:auto;min-height:100%;overflow-x:clip;font-family:var(--sans);font-size:17px;line-height:1.48;letter-spacing:0;background:var(--bg)}body:before{display:none}.wrap{max-width:var(--maxw);padding-inline:clamp(20px,4vw,56px)}a,button{-webkit-tap-highlight-color:transparent}a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid var(--accent);outline-offset:3px}header.site{background:var(--bg);border-bottom:1px solid var(--border);backdrop-filter:none}.nav{height:72px}.brand{min-width:0;color:var(--text-bright);font-family:var(--sans);font-size:19px;font-weight:600;letter-spacing:-.03em;white-space:nowrap}.brand:before{display:none}.brand span{color:var(--dimmer);font-weight:400}.nav-right{gap:24px}nav{gap:22px;align-items:center}nav a,.site-switcher__button,.theme-toggle,.menu-toggle{color:var(--text);font-family:var(--mono);font-size:11px;font-weight:500;letter-spacing:.08em;text-transform:uppercase}nav a{padding:8px 0}nav a:hover,nav a[data-active=true],nav a[aria-current=location],.site-switcher__button:hover{color:var(--accent)}nav a[data-active=true]:after,nav a[aria-current=location]:after{height:1px;margin-top:4px}.theme-toggle,.menu-toggle{min-height:44px;padding:10px 12px;border:1px solid var(--border);background:transparent}.theme-toggle:hover,.menu-toggle:hover{border-color:var(--text);color:var(--text)}.site-switcher__menu{border-radius:0;background:var(--bg);box-shadow:none}section{padding:clamp(76px,9vw,124px) 0;border-top:1px solid var(--border);border-bottom:0}main>section:first-child{border-top:0}.section-header{display:block;margin-bottom:clamp(36px,5vw,64px)}.section-header:before{display:none}h2{color:var(--text-bright);font-family:var(--sans);font-size:clamp(48px,6.5vw,88px);font-weight:500;line-height:.96;letter-spacing:-.055em}.hero{padding:0;border:0}.hero-main{display:grid;grid-template-columns:minmax(0,1.18fr) minmax(310px,.82fr);min-height:510px;gap:clamp(40px,7vw,110px);align-items:end;padding-top:clamp(76px,9vw,132px);padding-bottom:54px}.hero-kicker{margin-bottom:clamp(30px,5vw,58px);color:var(--dimmer);font-family:var(--mono);font-size:11px;font-weight:500;letter-spacing:.11em;text-transform:uppercase}.hero h1{max-width:none;margin:0;color:var(--text-bright);font-family:var(--sans);font-size:clamp(66px,8.1vw,118px);font-weight:500;line-height:.89;letter-spacing:-.065em;text-transform:uppercase;word-spacing:normal;overflow-wrap:normal}.hero-intro{padding-bottom:6px}.hero .tagline{max-width:35ch;margin:0 0 34px;color:var(--text);font-family:var(--sans);font-size:clamp(18px,1.8vw,24px);line-height:1.25}.cta{display:flex;gap:10px;margin:0 0 22px}.btn,.btn.primary,.btn.secondary{min-height:44px;justify-content:space-between;gap:18px;padding:12px 16px;border:1px solid var(--text);border-radius:0;box-shadow:none;font-family:var(--mono);font-size:11px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;transform:none}.btn.primary,[data-theme=light] .btn.primary{background:var(--text);color:var(--bg)}.btn.secondary{background:transparent;color:var(--text)}.btn:hover,.btn.primary:hover,.btn.secondary:hover{border-color:var(--accent);background:var(--accent);color:#fff;box-shadow:none;transform:none}.hero-social{display:flex;gap:24px}.hero-social a{color:var(--dimmer);font-family:var(--mono);font-size:11px;font-weight:500;letter-spacing:.07em;text-transform:uppercase;text-decoration:underline;text-underline-offset:4px}.hero-social a:hover{color:var(--accent)}.hero-art{width:100%;margin:0;overflow:hidden;background:var(--bg)}.hero-art img{display:block;width:100%;height:clamp(160px,20vw,260px);object-fit:cover;object-position:center top}.hero-card{display:grid;grid-template-columns:minmax(120px,.7fr) minmax(0,3.3fr);gap:32px;max-width:none;margin:0;padding:48px 0 56px;border:0;border-radius:0;background:transparent;box-shadow:none;transform:none}.hero-card:hover{border:0;background:transparent;box-shadow:none;transform:none!important}.hero-card h3{margin:4px 0 0;color:var(--dimmer);font-family:var(--mono);font-size:11px;font-weight:500;letter-spacing:.1em;text-transform:uppercase}.hero-card h3:before,.hero-card li:before{display:none}.hero-card ul{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(18px,3vw,42px)}.hero-card li{margin:0;padding:0;color:var(--text);font-family:var(--sans);font-size:15px;line-height:1.4;opacity:1}.hero-card li+li{border-left:1px solid var(--border);padding-left:clamp(18px,3vw,42px)}.hero-card:hover li{opacity:1}.skills-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 48px;margin:0;border-top:1px solid var(--text)}.skill-group{display:grid;grid-template-columns:minmax(120px,.45fr) minmax(0,1fr);gap:16px;align-content:start;min-width:0;padding:24px 0 28px;border:0;border-bottom:1px solid var(--border);border-radius:0;background:transparent;box-shadow:none;transform:none}.skill-group:hover,.skill-group.in-view{border-color:var(--border);background:transparent;box-shadow:none;transform:none}.skill-group h3{margin:0;color:var(--text-bright);font-family:var(--sans);font-size:19px;font-weight:500;line-height:1.1;letter-spacing:-.02em;text-transform:none}.skill-group h3:before{display:none}.skill-group ul{display:block;margin:0;color:var(--dim);font-family:var(--sans);font-size:15px;line-height:1.45}.skill-group li,.skill-group:hover li,.skill-group.in-view li{display:inline;width:auto;padding:0;border:0;border-radius:0;background:transparent;color:var(--dim);font-family:var(--sans);font-size:15px;font-weight:400;letter-spacing:0;line-height:1.45;text-transform:none;white-space:normal}.skill-group li:not(:last-child):after{content:", "}.timeline{margin:0;padding:0;border-top:1px solid var(--text)}.timeline:before,.t-item:before{display:none}.t-item{display:grid;grid-template-columns:minmax(230px,.65fr) minmax(0,1.35fr);gap:6px 54px;margin:0;padding:34px 0 38px;border-bottom:1px solid var(--border);transform:none}.t-item:hover{transform:none}.t-header{display:block;grid-row:1 / span 3;margin:0}.t-title{display:block;margin-bottom:12px;color:var(--text-bright);font-family:var(--sans);font-size:clamp(24px,2.3vw,32px);font-weight:500;line-height:1.08;letter-spacing:-.035em;white-space:normal}.t-item:hover .t-title{color:var(--text-bright)}.t-meta,.t-meta:before,.t-meta:after{color:var(--dimmer)}.t-meta{font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:.08em;white-space:normal}.t-meta:before,.t-meta:after{content:none}.t-desc,.t-item li{margin:0;padding:0;color:var(--dim);font-family:var(--sans);font-size:17px;line-height:1.48;opacity:1}.t-item li{padding-left:18px;margin-bottom:10px}.t-item li:before{content:"—";color:var(--accent)}.t-toggle{width:fit-content;min-height:44px;margin:12px 0 0;padding:8px 0;border:0;background:transparent;color:var(--text);font-family:var(--mono);font-size:11px;font-weight:500;letter-spacing:.08em;box-shadow:none;transform:none}.t-toggle:before{color:var(--accent)}.t-toggle:hover{border:0;background:transparent;color:var(--accent);box-shadow:none;transform:none}.t-bullets{grid-column:2;margin:12px 0 0}.t-item ul{padding:0}.project-note{max-width:760px;margin:-20px 0 70px;color:var(--dim);font-size:clamp(18px,1.8vw,23px);line-height:1.35}.projects-root{gap:84px}.project-cv-section{gap:24px}.project-cv-section__header{align-items:baseline;gap:20px;padding-bottom:18px;border-bottom-color:var(--text)}.project-cv-section__number{color:var(--accent);font-family:var(--mono);font-size:11px;font-weight:500;letter-spacing:.08em;white-space:nowrap}.project-cv-section__header h3{color:var(--text-bright);font-family:var(--sans);font-size:clamp(25px,3vw,40px);font-weight:500;line-height:1.05;letter-spacing:-.035em}.project-flagship,.project-card{border:0;border-radius:0;background:transparent;box-shadow:none;transform:none}.project-flagship{grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);gap:clamp(40px,6vw,90px);padding:0 0 70px;border-bottom:1px solid var(--text)}.project-flagship:before,.project-card:before{display:none}.project-flagship:hover,.project-card:hover,.project-card.in-view{border-color:transparent;background:transparent;box-shadow:none;transform:none}.project-flagship__body{justify-content:flex-start;gap:24px;padding-top:8px}.project-flagship__header,.project-card__header{align-items:flex-start;gap:18px}.project-flagship__title-row{align-items:baseline;gap:12px 18px}.project-flagship__title,.project-card__title,.project-index-row__title{display:block;color:var(--text-bright);font-family:var(--sans);font-weight:500;letter-spacing:-.04em;line-height:1.03}.project-flagship__title{font-size:clamp(38px,4.4vw,60px)}.project-card__title{font-size:clamp(26px,2.7vw,38px)}.project-flagship__title:before,.project-card__title:before,.project-index-row__title:before{display:none}.project-flagship__pill,.project-card__status{padding:5px 8px;border:1px solid var(--border);border-radius:0;background:transparent;color:var(--dimmer);font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:.06em}.project-flagship__summary,.project-card__summary{max-width:62ch;color:var(--dim);font-family:var(--sans);font-size:17px;line-height:1.46}.project-featured-grid,.project-featured-grid--three{grid-template-columns:repeat(2,minmax(0,1fr));gap:34px 32px}.project-featured-grid--single{grid-template-columns:1fr}.project-featured-grid--single .project-card{grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);gap:clamp(28px,5vw,70px)}.project-featured-grid--single .project-card__hero{min-height:290px;border:0}.project-card__hero,.project-card__hero--flagship{position:relative;min-height:0;border:0;border-radius:0;background:var(--surface-2)}.project-card__hero--flagship{min-height:330px}.project-motion-ready .project-flagship,.project-motion-ready .project-card{opacity:0;transition:opacity .2s ease-out}.project-motion-ready .project-flagship.in-view,.project-motion-ready .project-card.in-view{opacity:1}.project-card__hero img{position:absolute;inset:0;transition:none}.project-card:hover .project-card__hero img{transform:none}.project-card__body{gap:16px;padding:20px 0 0}.project-featured-grid--single .project-card__body{justify-content:center;padding:0}.project-card__heading{align-items:baseline;gap:14px}.project-card__meta{gap:8px;align-items:flex-end}.project-card__repo,.project-card__expand,.project-index-row__expand{min-height:34px;padding:5px 0;border:0;border-bottom:1px solid var(--border);border-radius:0;background:transparent;color:var(--text);font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:.07em;box-shadow:none;transform:none}.project-card__repo:hover,.project-card__expand:hover,.project-index-row__expand:hover{border-color:var(--accent);background:transparent;color:var(--accent);box-shadow:none;transform:none}.tags{gap:6px 18px}.tags .tag,.project-card:hover .tag,.project-card.in-view .tag{padding:0;border:0;border-radius:0;background:transparent;color:var(--dimmer);font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:.04em;opacity:1;text-transform:uppercase}.tags .tag:before{content:"#";color:var(--accent)}.project-card--text{min-height:330px;padding:28px;border:1px solid var(--text);background:var(--surface-2)}.project-card--text .project-card__body{padding:0}.project-card--text:hover,.project-card--text.in-view{border-color:var(--text);background:var(--surface-2)}.project-index-group{border-top:1px solid var(--text)}.project-index-group--web{margin-top:30px}.project-index-group--web .project-index-group__label{font-size:22px}.project-index-group--web .project-index-group__body>a{justify-self:start;margin:18px 0 8px}.project-index-group__header{padding:22px 0;background:transparent}.project-index-group__label{color:var(--text-bright);font-family:var(--sans);font-size:clamp(25px,3vw,40px);font-weight:500;letter-spacing:-.035em;text-transform:none}.project-index-row{padding:24px 0;border-bottom:1px solid var(--border);background:transparent;transform:none}.project-index-row:hover,.project-index-row.in-view{background:transparent;transform:none}.project-index-row__title{font-size:25px}.project-index-row__summary{color:var(--dim);font-family:var(--sans);font-size:15px;line-height:1.45}.project-detail__panel{border:1px solid var(--text);border-radius:0;background:var(--bg);box-shadow:none}.project-detail__toolbar{border-bottom:1px solid var(--border);background:var(--bg)}.project-detail__title{color:var(--text-bright);font-family:var(--sans);font-size:clamp(36px,5vw,64px);font-weight:500;letter-spacing:-.045em}.project-detail__title:before,.project-detail__section h4:before,.project-detail__eyebrow:before{display:none}.project-detail__summary,.project-detail__section p,.project-detail__section li{color:var(--dim);font-family:var(--sans);font-size:16px;line-height:1.55}.project-detail__section h4{color:var(--text-bright);font-family:var(--sans);font-size:25px;font-weight:500;letter-spacing:-.02em}.contact-grid{grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:clamp(48px,7vw,110px)}#contact{overflow:hidden;padding-top:0}main>:is(#skills,#projects,#education,#contact){content-visibility:visible;contain-intrinsic-size:none}.contact-marquee{height:156px;margin:32px 0 112px}.contact-heading{display:block;margin-bottom:56px}.contact-heading p{margin:0 0 16px;color:var(--dim);font-size:17px}.contact-heading h2{font-size:clamp(44px,5vw,64px);line-height:1;letter-spacing:-.045em}.contact-info p{color:var(--text);font-family:var(--sans);font-size:clamp(19px,1.9vw,24px);line-height:1.3;opacity:1}.contact-facts{gap:0;padding:0;border:0;border-top:1px solid var(--text);background:transparent}.contact-facts div{grid-template-columns:120px 1fr;gap:16px;padding:15px 0;border-bottom:1px solid var(--border)}.contact-facts dt,.form-group label,.form-group__label{color:var(--dimmer);font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:.08em}.contact-facts dd{color:var(--text);font-family:var(--sans);font-size:14px;opacity:1}.contact-link{color:var(--text);font-family:var(--mono);font-size:11px;font-weight:500;letter-spacing:.05em;transform:none}.contact-link:hover{color:var(--accent);transform:none}.contact-form{padding:0 0 0 clamp(24px,3vw,42px);border:0;border-left:1px solid var(--border);background:transparent;box-shadow:none}.form-group label:after,.form-group__label:after{display:none}input,textarea{border:1px solid var(--border);border-radius:0;background:var(--bg);color:var(--text);font-family:var(--sans);font-size:16px}input:focus,textarea:focus{border-color:var(--accent);outline:2px solid var(--accent);outline-offset:2px;box-shadow:none}button[type=submit]{min-height:44px;padding:12px 18px;border:1px solid var(--text);background:var(--text);color:var(--bg);font-family:var(--mono);font-size:11px;font-weight:500;letter-spacing:.08em;box-shadow:none;transform:none}button[type=submit]:hover{border-color:var(--accent);background:var(--accent);color:#fff;box-shadow:none;transform:none}footer{border-top:1px solid var(--border);font-family:var(--mono);font-size:11px;opacity:1;padding-bottom:0}.footer-tetris{display:block;width:100%;height:126px;margin-top:40px}@media(max-width:1080px){.nav-right{gap:10px}nav{gap:14px}.hero-main{grid-template-columns:1fr 1fr;gap:44px}.hero h1{font-size:clamp(58px,8vw,92px)}}@media(max-width:768px){html{scroll-padding-top:72px}.wrap{padding-inline:20px}.brand{font-size:17px}.brand span{display:none}.nav{height:64px}nav{top:64px;gap:0;padding:12px 20px 20px;border-bottom:1px solid var(--text);background:var(--bg);box-shadow:none}nav a{padding:13px 0}.theme-toggle,.menu-toggle{padding:9px}section{padding:70px 0}.section-header{margin-bottom:34px}h2{font-size:clamp(46px,13vw,72px)}.hero{padding:0}.hero-main{display:block;min-height:0;padding-top:60px;padding-bottom:48px}.hero-kicker{margin-bottom:32px;font-size:10px}.hero h1{font-size:clamp(54px,12vw,86px);letter-spacing:-.065em}.hero-intro{margin-top:42px}.hero .tagline{max-width:38ch;margin-bottom:28px;font-size:19px;opacity:1}.cta{flex-direction:row;flex-wrap:wrap}.btn{width:auto;justify-content:space-between}.hero-art img{height:155px}.hero-card{grid-template-columns:1fr;gap:22px;padding:34px 0 46px}.hero-card h3{font-size:10px}.hero-card ul{grid-template-columns:1fr;gap:14px}.hero-card li,.hero-card li+li{padding:0;border:0;font-size:15px;opacity:1}.skills-grid{grid-template-columns:1fr}.skill-group{grid-template-columns:minmax(115px,.42fr) minmax(0,1fr);gap:14px;padding:20px 0}.skill-group h3{font-size:17px}.skill-group li{font-size:14px;opacity:1}.timeline{padding:0}.timeline:before,.t-item:before{display:none}.t-item{grid-template-columns:1fr;gap:14px;padding:26px 0 30px}.t-header{grid-row:auto}.t-title{font-size:27px}.t-desc,.t-item li{font-size:16px;opacity:1}.t-bullets{grid-column:1}.project-note{margin:-8px 0 40px;font-size:18px}.projects-root{gap:60px}.project-flagship,.project-featured-grid--single .project-card{grid-template-columns:1fr;gap:28px}.project-flagship{padding-bottom:52px}.project-flagship__body{gap:18px}.project-flagship__title{font-size:42px}.project-card__hero--flagship{min-height:200px}.project-featured-grid,.project-featured-grid--three{grid-template-columns:1fr;gap:36px}.project-featured-grid--single .project-card__hero{min-height:216px}.project-card__title{font-size:30px}.project-card__header,.project-flagship__header{flex-wrap:wrap}.project-card__meta{flex-direction:row;flex-wrap:wrap;align-items:center}.project-card__body{gap:12px;padding-top:16px}.project-card--text{min-height:0;padding:24px}.project-cv-section__header h3{font-size:28px}.project-index-row__title{font-size:22px}.contact-grid{grid-template-columns:1fr;gap:44px}.contact-form{padding:0;border-left:0}.contact-marquee{height:104px;margin:24px 0 72px}.contact-heading{margin-bottom:40px}.contact-heading h2{font-size:44px}.footer-tetris{height:96px;margin-top:32px}}@media(max-width:400px){.wrap{padding-inline:16px}.hero h1{font-size:12vw}.hero .tagline{font-size:18px}.btn{width:100%}.project-flagship__title{font-size:36px}.contact-facts div{grid-template-columns:100px 1fr}}@media(prefers-reduced-motion:reduce){.reveal,.reveal.in-view{opacity:1;transform:none}nav{transition:none}.project-motion-ready .project-flagship,.project-motion-ready .project-card{opacity:1;transition:none}}body{background-image:linear-gradient(to right,color-mix(in srgb,var(--border) 10%,transparent) 1px,transparent 1px),linear-gradient(to bottom,color-mix(in srgb,var(--border) 10%,transparent) 1px,transparent 1px);background-size:9px 9px}.hero-main{min-height:250px;gap:clamp(34px,6vw,84px);align-items:start;padding-top:24px;padding-bottom:28px;background:transparent}.hero-statement{align-self:start}.hero-kicker{margin-bottom:23px}.hero h1{font-size:clamp(52px,5.1vw,74px);line-height:.89}.hero-line{display:block;overflow:hidden;padding-bottom:.08em;margin-bottom:-.08em}.hero-line>span{display:block;animation:hero-line-in .4s steps(5,end) both}.hero-line:nth-child(2)>span{animation-delay:.06s}.hero-line:nth-child(3)>span{animation-delay:.12s}@keyframes hero-line-in{0%{transform:translateY(110%)}to{transform:translateY(0)}}.hero-intro{border-left:1px solid var(--border);padding-left:clamp(24px,3vw,48px);animation:hero-intro-in .3s ease-out .12s both}@keyframes hero-intro-in{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}.hero .tagline{max-width:40ch;margin-bottom:22px;font-size:clamp(16px,1.25vw,19px);line-height:1.3}.hero-art{position:relative;height:clamp(480px,35vw,860px);background:transparent}.hero-card{padding-top:clamp(32px,4vw,64px)}.hero-art img{position:absolute;inset:0;display:block;width:100%;height:100%}.hero-art img{object-fit:cover;object-position:center top}.hero-art--live img{display:none}#pixel-field,.footer-tetris{image-rendering:pixelated}#pixel-field{position:fixed;inset:0;z-index:0;display:block;width:100%;height:100%;pointer-events:none}main,footer{position:relative;z-index:1}.skills-grid,.timeline{position:relative}.pixel-cat{--cat-cell: 4px;position:absolute;right:0;bottom:100%;display:block;pointer-events:none}.pixel-cat--tabby{--cat-offset: -3s}.pixel-cat__pose{position:absolute;right:0;bottom:0;display:block;width:calc(var(--cat-columns) * var(--cat-cell));height:calc(var(--cat-rows) * var(--cat-cell));opacity:0;shape-rendering:crispEdges;animation:cat-pose 22.5s step-end infinite;animation-delay:calc(var(--cat-pose) * -7.5s + var(--cat-offset, 0s))}@keyframes cat-pose{0%{opacity:1}33.333%{opacity:0}}@media(max-width:768px){.hero-main{display:block;min-height:0;padding-top:48px;padding-bottom:40px}.hero-statement{display:block}.hero h1{font-size:clamp(48px,13.5vw,72px)}.hero-intro{margin-top:36px;border-left:0;padding-left:0}.hero-art{height:clamp(220px,62vw,300px)}body{background-size:6px 6px}.hero-card{padding-top:34px}.pixel-cat{--cat-cell: 3px}}@media(max-width:400px){.hero h1{font-size:13.5vw}}@media(prefers-reduced-motion:reduce){.hero-line>span,.hero-intro{animation:none;transform:none;opacity:1}#pixel-field{display:none}.hero-art--live img{display:block}.pixel-cat__pose{animation:none}.pixel-cat__pose:first-child{opacity:1}}.project-discipline{margin:0;color:var(--dim);font-size:16px}.projects-root{gap:28px}.project-cv-section{gap:14px}.project-flagship,.project-flagship--media,.project-featured-grid--single .project-card{grid-template-columns:220px minmax(0,1fr);gap:28px;align-items:start;padding:0 0 28px;border-bottom:1px solid var(--border)}.project-flagship .project-card__hero,.project-featured-grid--single .project-card__hero{order:-1;min-height:0;aspect-ratio:16 / 10;overflow:hidden}.project-flagship .project-card__hero img,.project-featured-grid--single .project-card__hero img{width:100%;height:100%;object-fit:cover;object-position:center top}.project-flagship__body,.project-card__body,.project-featured-grid--single .project-card__body{gap:10px;padding:0}.project-flagship__title,.project-card__title{font-size:clamp(24px,2.4vw,30px)}.project-flagship__summary,.project-card__summary{max-width:64ch;font-size:16px;line-height:1.5}@media(max-width:768px){.project-flagship,.project-flagship--media,.project-featured-grid--single .project-card{grid-template-columns:minmax(0,1fr);gap:14px;padding-bottom:24px}.project-flagship .project-card__hero,.project-featured-grid--single .project-card__hero{aspect-ratio:2.4 / 1}}
