*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}@font-face{font-family:Silkscreen;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/silkscreen-latin.woff2) format("woff2")}:root{color-scheme:dark;--bg: #0d1117;--bg-subtle: #151b23;--header-bg: #010409;--fg: #e6edf3;--fg-muted: #b7bdc8;--border: #30363d;--border-muted: #21262d;--accent: #3fb950;--accent-strong: #56d364;--accent-dim: rgba(63, 185, 80, .15);--fg-subtle: #9198a1;--link: var(--fg);--link-hover: var(--accent);--btn-bg: #212830;--btn-hover: #262c36;--btn-border: #3d444d;--topic-bg: var(--border-muted);--topic-fg: var(--fg-muted);--success: var(--accent);--accent-border: var(--accent);--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif;--font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--font-pixel: "Silkscreen", var(--font-mono);--ease-out: cubic-bezier(.2, .8, .2, 1);--ease-in-out: cubic-bezier(.65, 0, .35, 1);--ease-spring: cubic-bezier(.34, 1.4, .64, 1);--dur-fast: .15s;--dur-base: .25s;--dur-slow: .4s;--dur-slide: .35s;--dur-ui: .18s;--dur-step: 80ms;--dur-draw: .7s;--dur-count: .9s;--dur-drift: 6s;--t-ui: color var(--dur-ui) var(--ease-out), background-color var(--dur-ui) var(--ease-out), border-color var(--dur-ui) var(--ease-out), box-shadow var(--dur-ui) var(--ease-out), opacity var(--dur-ui) var(--ease-out), transform var(--dur-ui) var(--ease-out), outline-color var(--dur-ui) var(--ease-out), text-decoration-color var(--dur-ui) var(--ease-out);--radius: 6px;--content-width: 1012px;--gutter: 16px;--header-h: 64px}html{scroll-behavior:auto;-webkit-text-size-adjust:100%}body{font-family:var(--font-sans);font-size:16px;line-height:1.5;background:var(--bg);color:var(--fg);min-height:100vh;overflow-x:hidden;overflow-wrap:break-word}[id]{scroll-margin-top:calc(var(--header-h) + 16px)}a{color:var(--link);text-decoration-line:underline;text-decoration-color:transparent;text-underline-offset:.2em}a:hover{text-decoration-color:currentColor}a:not([class]){text-decoration-color:#6e7681}a:not([class]):hover{color:var(--link-hover);text-decoration-color:currentColor}:where(a,button,[role=button],summary){outline:2px solid transparent;outline-offset:2px}a:focus-visible,button:focus-visible,[role=button]:focus-visible,summary:focus-visible{outline-color:var(--accent)}img,video{max-width:100%}.icon{display:inline-block;width:16px;height:16px;flex:none;background-color:currentColor;-webkit-mask:var(--icon) center / contain no-repeat;mask:var(--icon) center / contain no-repeat}.site-header{position:sticky;top:0;z-index:50;background:var(--header-bg);border-bottom:1px solid transparent;transition:background-color var(--dur-base) var(--ease-out),border-color var(--dur-base) var(--ease-out),backdrop-filter var(--dur-base) var(--ease-out),-webkit-backdrop-filter var(--dur-base) var(--ease-out)}.site-header.is-scrolled{background:#010409c7;border-bottom-color:var(--border);-webkit-backdrop-filter:saturate(180%) blur(12px);backdrop-filter:saturate(180%) blur(12px)}.site-header__inner{position:relative;max-width:var(--content-width);height:var(--header-h);margin:0 auto;padding:0 var(--gutter);display:flex;align-items:center;justify-content:space-between;gap:16px}.site-header__left{display:flex;align-items:center;gap:12px;flex:1 1 auto;min-width:0}.site-header__logo{display:flex;flex:none;border-radius:var(--radius)}.logo-sprite{display:block;width:32px;height:32px;background:url(/icons/swyrlogo-walk.svg) 0 0 / 200% 100% no-repeat;image-rendering:pixelated}.breadcrumb{flex:1 1 auto;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;direction:rtl;text-align:left;font-size:16px;line-height:24px}.breadcrumb__inner{direction:ltr;unicode-bidi:isolate}.breadcrumb__crumb{color:var(--fg)}.breadcrumb__crumb[aria-current=page],.breadcrumb__current{font-weight:600;color:var(--fg)}.breadcrumb__sep{margin:0 6px;color:var(--fg-muted)}.breadcrumb__live{display:inline-block}.breadcrumb__live.is-empty{display:none}.site-nav__list{position:relative;list-style:none;display:flex;align-items:center;gap:4px}.site-nav__link{display:inline-flex;align-items:center;gap:8px;padding:6px 10px;border-radius:var(--radius);color:var(--fg);font-size:14px;font-weight:500;line-height:20px;white-space:nowrap}.site-nav__link:hover{background:var(--btn-hover);text-decoration-color:transparent}.site-nav__link.is-active{color:var(--fg);background:var(--btn-bg)}.site-nav__indicator{position:absolute;left:0;bottom:-13px;width:1px;height:2px;background:var(--accent);border-radius:2px;transform-origin:0 0;opacity:0;pointer-events:none}.site-nav__icon{flex:none;color:var(--fg-muted)}.site-nav__resume{margin-left:8px;background:var(--btn-bg);border:1px solid var(--btn-border);padding:5px 12px}.site-nav__resume:hover{border-color:var(--accent)}.nav-index{font-family:var(--font-mono);font-size:.8em;font-weight:400;color:var(--fg-subtle)}.nav-toggle{display:none;flex:none;align-items:center;justify-content:center;width:36px;height:36px;color:var(--fg);background:transparent;border:1px solid var(--btn-border);border-radius:var(--radius);cursor:pointer}.nav-toggle:hover{background:var(--btn-hover)}.nav-toggle__bars{position:relative;width:16px;height:12px}.nav-toggle__bars span{position:absolute;left:0;width:16px;height:1.5px;border-radius:1px;background:currentColor;transform-origin:center}.nav-toggle__bars span:nth-child(1){top:0}.nav-toggle__bars span:nth-child(2){top:5.25px}.nav-toggle__bars span:nth-child(3){top:10.5px}.site-header.is-open .nav-toggle__bars span:nth-child(1){transform:translateY(5.25px) rotate(45deg)}.site-header.is-open .nav-toggle__bars span:nth-child(2){opacity:0;transform:scaleX(.2)}.site-header.is-open .nav-toggle__bars span:nth-child(3){transform:translateY(-5.25px) rotate(-45deg)}@media(min-width:768px)and (max-width:900px){.site-nav .nav-index{display:none}.site-nav__link{padding:6px 8px}}@media(max-width:767px){.nav-toggle{display:inline-flex}.site-nav{position:absolute;visibility:hidden;opacity:0;transform:translateY(-8px);pointer-events:none;top:100%;left:0;right:0;padding:8px var(--gutter) 16px;background:var(--header-bg);border-bottom:1px solid var(--border);box-shadow:0 12px 24px #01040999}.site-header.is-open .site-nav{visibility:visible;opacity:1;transform:none;pointer-events:auto}.site-nav__list{flex-direction:column;align-items:stretch;gap:2px}.site-nav__link{display:flex;padding:10px 12px;font-size:16px}.site-nav__indicator{display:none}.site-nav__resume{margin:8px 0 0;justify-content:center}}.landing{max-width:var(--content-width);margin:0 auto;padding:24px var(--gutter) 40px;display:flex;flex-direction:column;gap:24px}.hero{display:grid;grid-template-columns:minmax(0,1fr) 226px;gap:32px;align-items:center;padding:0}.hero__tilt{grid-column:2;grid-row:1;justify-self:center}.hero__logo{display:block;width:220px;height:auto;color:var(--accent);filter:drop-shadow(6px 6px 0 #0f3d1a)}.hero__bot{--cell: 5;display:block;margin-left:-10px;image-rendering:pixelated;cursor:pointer;touch-action:manipulation}.hero__bot[hidden],.hero__logo[hidden]{display:none}.hero__photo{display:block;width:100%;aspect-ratio:4 / 3;height:auto;object-fit:cover;border:1px solid var(--border);border-radius:var(--radius)}.hero__text{grid-column:1;grid-row:1}.hero__eyebrow{font-family:var(--font-pixel);font-size:13px;letter-spacing:.04em;color:var(--fg-muted);margin-bottom:6px}.hero__title{display:flex;flex-direction:column;gap:2px;margin-bottom:12px;font-weight:600;line-height:1.2}.hero__headline{font-family:var(--font-pixel);font-size:30px;font-weight:400;font-synthesis:none;line-height:1.2;letter-spacing:.04em;color:var(--fg)}.hero__subtitle{font-family:var(--font-pixel);font-size:16px;font-weight:400;color:var(--fg-muted)}.hero__description{max-width:56ch;font-size:15px;margin-bottom:12px}.outline-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:5px 16px;font-size:14px;font-weight:500;line-height:20px;color:var(--fg);background:var(--btn-bg);border:1px solid var(--btn-border);border-radius:var(--radius)}.outline-btn:hover{background:var(--btn-hover);border-color:var(--accent);text-decoration-color:transparent}.outline-btn .icon{color:var(--fg-muted)}.contrib{position:relative;padding:12px 16px;border:1px solid var(--border);border-radius:var(--radius)}.contrib__title{font-size:14px;font-weight:400;margin-bottom:8px}.contrib__scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}.contrib__graph{display:block;margin:0 auto}.contrib__bg{opacity:.35}.contrib__graph rect[data-tip]{stroke:#f0f6fc1a;stroke-width:1px}.contrib__legend{display:flex;justify-content:flex-end;align-items:center;gap:4px;margin-top:8px;font-size:12px;color:var(--fg-muted)}.contrib__swatch{width:11px;height:11px;border-radius:2px;outline:1px solid rgba(240,246,252,.06);outline-offset:-1px}.contrib__legend span:first-child{margin-right:2px}.contrib__legend span:last-child{margin-left:2px}.section-block{border:1px solid var(--border);border-radius:var(--radius);padding:16px}.section-heading{display:flex;align-items:baseline;gap:8px;margin:-16px -16px 16px;padding:10px 16px;font-size:16px;font-weight:600;line-height:1.5;background:var(--bg-subtle);border-bottom:1px solid var(--border);border-radius:var(--radius) var(--radius) 0 0}.section-lede{margin-top:-4px;font-size:14px;color:var(--fg-muted)}.section-text+.section-text{margin-top:12px}.section-text a{font-weight:500}.photo-strip{list-style:none;display:flex;gap:8px;margin-top:16px}.photo-strip li{flex:1 1 0;min-width:0}.photo-strip img{display:block;width:100%;height:140px;object-fit:cover;border:1px solid var(--border);border-radius:var(--radius)}.timeline-wrap{position:relative}.timeline{position:relative;list-style:none;padding-left:28px}.timeline:before{content:"";position:absolute;left:7px;top:6px;bottom:6px;width:2px;background:var(--border)}.tl-item{position:relative;isolation:isolate;margin-left:-8px;padding:8px}.tl-item+.tl-item,.tl-note+.tl-item{margin-top:8px}.tl-item:before{content:"";position:absolute;left:-17px;top:23px;width:10px;height:10px;border-radius:50%;background:var(--bg);box-shadow:0 0 0 2px var(--border)}.tl-item:after{content:"";position:absolute;inset:0;z-index:-1;border-radius:var(--radius);background:var(--bg-subtle);opacity:0;pointer-events:none}.tl-item:hover:after{opacity:1}.tl-item>*{position:relative}.tl-item__head{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;margin-bottom:4px}.tl-item__org{display:inline-flex;align-items:center;gap:10px;font-weight:600;color:var(--fg)}.tl-item__head{align-items:center}.org-tile{position:relative;flex:none;display:block;width:40px;height:40px;overflow:hidden;border:1px solid #30363d;border-radius:22%;background:#21262d}.org-tile img{display:block;width:100%;height:100%}.org-tile:after{content:"";position:absolute;inset:0;border-radius:inherit;box-shadow:inset 0 1px #ffffff2e,inset 0 0 0 1px #ffffff0a;pointer-events:none}.tl-item__org:hover .org-tile,.org-tile:hover{transform:translateY(-1px);box-shadow:0 6px 14px #0104098c}@media(max-width:767px){.org-tile{width:32px;height:32px}.tl-item:before{top:19px}}.tl-item:hover .tl-item__org{color:var(--link-hover)}.tl-item__meta{text-decoration:none;font-family:var(--font-mono);font-size:12px;color:var(--fg-muted)}.tl-item__body{max-width:72ch;font-size:15px;color:var(--fg)}.tl-note{position:relative;margin:16px 0 8px;font-size:14px;color:var(--fg-muted)}.tl-note:before{content:"";position:absolute;left:-25px;top:50%;width:14px;height:2px;background:var(--border)}.tl-item.is-active:before{background:var(--accent);box-shadow:0 0 0 2px var(--accent)}.work-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-top:16px}.work-card{position:relative;display:flex;flex-direction:column;color:var(--fg);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius)}.work-card__thumb{flex:none;overflow:hidden;border-bottom:1px solid var(--border);border-radius:0}.work-card__thumb img{display:block;width:100%;height:auto}.work-card__body{flex:1 1 auto;display:flex;flex-direction:column;gap:8px;padding:16px;min-width:0}.work-card__header{display:flex;align-items:center;gap:8px;min-width:0}.work-card__repo-icon{flex:none;color:var(--fg-muted)}.work-card__title{font-size:16px;font-weight:600;color:var(--link);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.work-card__link:after{content:"";position:absolute;inset:0;z-index:1}.work-card:is(:hover,:has(.work-card__link:focus-visible)) .work-card__title{color:var(--link-hover);text-decoration-color:currentColor}.work-card__pill{flex:none;padding:0 7px;font-size:12px;font-weight:500;line-height:18px;color:var(--fg-muted);border:1px solid var(--border);border-radius:2em}.work-card__arrow{margin-left:auto;font-size:12px;color:var(--fg-muted);white-space:nowrap}.work-card__desc{font-size:14px}.work-card__tags{list-style:none;display:flex;flex-wrap:wrap;gap:6px}.work-card__footer{display:flex;align-items:center;flex-wrap:wrap;gap:4px 16px;margin-top:auto;padding-top:4px;font-size:12px;color:var(--fg-muted)}.work-card__lang,.work-card__stars{display:inline-flex;align-items:center;gap:4px}.work-card__lang-dot{width:12px;height:12px;border-radius:50%;border:1px solid rgba(240,246,252,.1)}.work-card__repo-link{position:relative;z-index:2;margin-left:auto;color:var(--fg-muted)}.work-card__repo-link:hover{color:var(--link-hover)}.work-card__tag,.proj-tag{font-family:var(--font-mono);font-size:12px;font-weight:500;line-height:18px;padding:0 10px;border-radius:2em;color:var(--topic-fg);background:var(--topic-bg)}@media(min-width:768px)and (max-width:1000px){.work-cards{grid-template-columns:repeat(2,minmax(0,1fr))}}.work-card__thumb--fit{display:flex;align-items:center;justify-content:center;aspect-ratio:4 / 3;padding:12px;background:#0d1117}.work-card__thumb--fit img{width:auto;max-width:100%;max-height:100%;height:auto;border-radius:4px}.contact-links{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}.hero__links{margin-top:12px}.contrib__count{display:inline-block;font-variant-numeric:tabular-nums;text-align:right}.site-header__progress{display:none;position:absolute;left:0;right:0;bottom:-1px;height:2px;background:#484f58;transform-origin:0 50%;transform:scaleX(0);pointer-events:none}@media(max-width:767px){.hero{grid-template-columns:1fr;gap:16px;padding-top:0}.hero__tilt,.hero__text{grid-column:1}.hero__text{grid-row:2}.hero__headline{font-size:22px}.hero__logo{width:140px}.hero__bot{--cell: 3;margin-left:-6px}.photo-strip{overflow-x:auto;scroll-snap-type:x mandatory;margin-left:-16px;margin-right:-16px;padding:0 16px 4px}.photo-strip li{flex:none;scroll-snap-align:start}.photo-strip img{width:auto;aspect-ratio:4 / 3}.work-cards{grid-template-columns:1fr}}.footer{max-width:var(--content-width);margin:0 auto;padding:24px var(--gutter) 40px;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;font-size:12px;color:var(--fg-muted)}.footer:before{content:"";flex-basis:100%;border-top:1px solid var(--border);margin-bottom:12px}@media(max-width:767px){.landing{padding-bottom:8px}.footer{padding-top:16px;padding-bottom:20px}.footer:before{margin-bottom:8px}}.footer-social{display:flex;gap:16px}.footer-social a{display:inline-flex;color:var(--fg-muted)}.footer-social a:hover{color:var(--link-hover)}.footer-social .icon{width:18px;height:18px}.contrib__tip{position:absolute;left:0;top:0;opacity:0;visibility:hidden;transform:translate(var(--tx, 0),var(--ty, 0)) translate(-50%,-100%) translateY(4px);z-index:5;padding:4px 8px;font-size:12px;line-height:18px;white-space:nowrap;color:var(--fg);background:#3d444d;border-radius:var(--radius);pointer-events:none}.contrib__tip.is-visible{opacity:1;visibility:visible;transform:translate(var(--tx, 0),var(--ty, 0)) translate(-50%,-100%)}.work-card__tag{position:relative}.work-card__tag:after{content:"";position:absolute;inset:0;border-radius:inherit;background:#79c0ff33;opacity:0}.work-card:hover .work-card__tag:after{opacity:1}.contrib__graph rect{transform-box:fill-box;transform-origin:center}.section-text a,.proj-section p a,.breadcrumb a,.page-links__email{display:inline-block;text-decoration:none;background:linear-gradient(currentColor,currentColor) 0 100% / 0 1px no-repeat}.section-text a:hover,.proj-section p a:hover,.breadcrumb a:hover,.page-links__email:hover{text-decoration-color:transparent;background-size:100% 1px}.section-text a[target=_blank]:after,.proj-section p a[target=_blank]:after{content:"↗";display:inline-block;margin-left:2px;font-size:.75em;vertical-align:.15em}.photo-strip img{transform-origin:center}@media(hover:hover)and (min-width:768px){.photo-strip:hover img{opacity:.55}.photo-strip li:hover img{opacity:1;transform:scale(1.03)}}.hero__tilt{--rx: 0deg;--ry: 0deg}.hero__tilt{transform:translateY(var(--py, 0px))}.hero__photo{transform:perspective(800px) rotateX(var(--rx)) rotateY(var(--ry))}:root[data-motion=on].js :is(.contrib,.work-card,.tl-item,.photo-strip li,.contact-links a,.proj-gallery__item,.proj-stage__item,.proj-comp-card,.proj-specs,.proj-widget-list,.proj-cta,.repo-head,.readme-panel,.resume-head,.resume-page):not(.in){opacity:0;transform:translateY(12px)}:root[data-motion=on].js .section-block:not(.in){opacity:0}:root[data-motion=on] .section-block.in{animation-name:reveal-fade}@keyframes reveal-fade{0%{opacity:0}}:root[data-motion=on] .in{animation:reveal var(--dur-slow) var(--ease-out) var(--stagger, 0ms) backwards}@keyframes reveal{0%{opacity:0;transform:translateY(12px)}}:root[data-motion=on].js .contrib:not(.is-drawn) rect{opacity:0}:root[data-motion=on] .contrib.is-drawn rect{animation:cell-in var(--dur-slide) var(--ease-out) calc(var(--d, 0ms) + var(--stagger, 0ms)) backwards}@keyframes cell-in{0%{opacity:0;transform:scale(.3)}}:root[data-motion=on] .contrib__graph:hover rect[fill="#39d353"],:root[data-motion=on] .contrib__graph:hover rect[fill="#26a641"],:root[data-motion=on] .contrib__graph:hover rect[fill="#006d32"]{animation:cell-pulse calc(var(--dur-slow) * 4) var(--ease-in-out) calc(var(--d, 0ms) / 3) infinite}@keyframes cell-pulse{50%{opacity:.6}}:root[data-motion=on] .hero__photo{transition:transform var(--dur-slow) var(--ease-out),opacity var(--dur-slow) var(--ease-out);will-change:transform}:root[data-motion=on] .photo-strip img{transition:opacity var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-out)}:root[data-motion=on] .site-nav__indicator{transition:transform var(--dur-base) var(--ease-out),opacity var(--dur-fast) var(--ease-out)}:root[data-motion=on] .section-text a,:root[data-motion=on] .proj-section p a,:root[data-motion=on] .breadcrumb a,:root[data-motion=on] .page-links__email{transition:var(--t-ui),background-size var(--dur-base) var(--ease-out),font-weight var(--dur-ui) var(--ease-out)}:root[data-motion=on] .site-header__logo:hover .logo-sprite,:root[data-motion=on] .site-header__logo:focus-visible .logo-sprite{animation:invader-walk calc(var(--dur-base) * 2) steps(2,jump-none) 2}@keyframes invader-walk{0%{background-position:0 0}to{background-position:100% 0}}:root[data-motion=on] :where(a,button,[role=button],summary,.outline-btn,.nav-toggle,.site-nav__link,.work-card,.work-card__tag,.breadcrumb__crumb,.tl-item,.proj-stage__item){transition:var(--t-ui)}:root[data-motion=on] .breadcrumb__live{transition:opacity var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-out)}:root[data-motion=on] .breadcrumb__live.is-leaving{opacity:0;transform:translateY(-4px);transition-duration:var(--dur-fast)}:root[data-motion=on] .breadcrumb__live.is-entering{opacity:0;transform:translateY(4px);transition:none}@media(max-width:767px){:root[data-motion=on] .site-nav{transition:opacity var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-out),visibility 0s linear var(--dur-base)}:root[data-motion=on] .site-header.is-open .site-nav{transition:opacity var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-out),visibility 0s}}:root[data-motion=on] .nav-toggle__bars span{transition:transform var(--dur-base) var(--ease-out),opacity var(--dur-fast) var(--ease-out)}:root[data-motion=on] .contrib__tip{transition:opacity var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-out),visibility 0s linear var(--dur-fast)}:root[data-motion=on] .contrib__tip.is-visible{transition:opacity var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-out),visibility 0s}:root[data-motion=on] .work-card__thumb img{transition:transform var(--dur-slow) var(--ease-out),opacity var(--dur-slow) var(--ease-out)}:root[data-motion=on] .work-card:hover .work-card__thumb img{transform:scale(1.04)}:root[data-motion=on] .work-card__tag:after{transition:opacity var(--dur-fast) var(--ease-out)}:root[data-motion=on] .tl-item:before{transition:background-color var(--dur-slow) var(--ease-out),box-shadow var(--dur-slow) var(--ease-out)}:root[data-motion=on] .tl-item:after{transition:opacity var(--dur-base) var(--ease-out)}:root[data-motion=on] .tl-item__org{transition:var(--t-ui),color var(--dur-base) var(--ease-out)}:root[data-motion=on] .org-tile{transition:var(--t-ui),transform var(--dur-fast) var(--ease-spring),box-shadow var(--dur-base) var(--ease-out)}:root[data-motion=on] .footer-social a,:root[data-motion=on] .page-links a{transition:var(--t-ui),transform var(--dur-fast) var(--ease-out),background-size var(--dur-base) var(--ease-out)}:root[data-motion=on] .footer-social a:hover,:root[data-motion=on] .page-links a:hover{transform:translateY(-2px)}:root[data-motion=on].js :is(.hero__photo,.photo-strip img,.work-card__thumb img,.proj-hero-img,.proj-gallery__item img,.proj-gallery__item video,.proj-comp-card img):not([data-loaded]){opacity:0}:root[data-motion=on] .photo-strip img,:root[data-motion=on] .proj-hero-img,:root[data-motion=on] .proj-gallery__item img,:root[data-motion=on] .proj-gallery__item video,:root[data-motion=on] .proj-comp-card img{transition:opacity var(--dur-slow) var(--ease-out),transform var(--dur-base) var(--ease-out)}:root[data-motion=on] .is-arrived>.section-heading,:root[data-motion=on] .is-arrived>.proj-section-heading{animation:reveal-fade var(--dur-slow) var(--ease-out) .1s backwards}:root[data-motion=off]{scroll-behavior:auto}:root[data-motion=off] .hero__photo{transform:none}:root[data-motion=on] .hero__eyebrow,:root[data-motion=on] .hero__subtitle,:root[data-motion=on] .hero__text>.outline-btn{animation:hero-in var(--dur-slow) var(--ease-out) backwards}:root[data-motion=on] .hero__subtitle{animation-delay:calc(var(--dur-step) * 2)}:root[data-motion=on] .hero__text>.outline-btn{animation-delay:calc(var(--dur-step) * 3)}:root[data-motion=on] .hero__headline{animation:hero-in var(--dur-slow) var(--ease-out) var(--dur-step) backwards}:root[data-motion=on] .hero__links a{--stagger: calc(var(--dur-step) * 4)}:root[data-motion=on] .hero__tilt{animation:hero-photo-in var(--dur-slow) var(--ease-out) calc(var(--dur-step) * 5) backwards}@keyframes hero-in{0%{opacity:0;transform:translateY(8px)}}@keyframes hero-photo-in{0%{opacity:0;transform:scale(.96)}}:root[data-motion=on] .site-header__progress{display:block}:root[data-motion=on].js .work-card:not(.in){transform:translateY(16px) scale(.98)}:root[data-motion=on] .work-card.in{animation-name:card-in}@keyframes card-in{0%{opacity:0;transform:translateY(16px) scale(.98)}}:root[data-motion=on] .work-card:hover .work-card__thumb img{animation:thumb-zoom var(--dur-slow) var(--ease-out),ken-burns var(--dur-drift) var(--ease-in-out) var(--dur-slow) infinite alternate}@keyframes thumb-zoom{0%{transform:scale(1)}to{transform:scale(1.04)}}@keyframes ken-burns{0%{transform:scale(1.04)}to{transform:scale(1.08)}}:root[data-motion=on] .work-card.in .work-card__tag{animation:pill-in var(--dur-base) var(--ease-out) calc(var(--stagger, 0ms) + var(--dur-base) + var(--i, 0) * 30ms) backwards}@keyframes pill-in{0%{opacity:0;transform:translateY(4px) scale(.9)}}:root[data-motion=on] .work-card__tag:before{content:"";position:absolute;inset:0;border-radius:inherit;background:#f0f6fc38;opacity:0;pointer-events:none}:root[data-motion=on] .work-card:hover .work-card__tag:before{animation:pill-ripple var(--dur-slow) var(--ease-out) calc(var(--i, 0) * var(--dur-step) / 2)}@keyframes pill-ripple{40%{opacity:1}}:root[data-motion=on] .section-block.in .section-heading .nav-index{animation:index-in var(--dur-slow) var(--ease-out) backwards}:root[data-motion=on] .section-block.in .section-title{animation:reveal-fade var(--dur-slow) var(--ease-out) var(--dur-step) backwards}@keyframes index-in{0%{opacity:0;transform:translate(-12px)}}:root[data-motion=on] .timeline:before{transform-origin:50% 0}:root[data-motion=on] .section-block.in .timeline:before{animation:line-draw var(--dur-draw) var(--ease-out) backwards}@keyframes line-draw{0%{transform:scaleY(0)}}:root[data-motion=on] .tl-item.in .org-tile{animation:tile-pop var(--dur-slow) var(--ease-spring) calc(var(--stagger, 0ms) + var(--dur-base))}@keyframes tile-pop{50%{transform:scale(1.06)}}:root[data-motion=on] .contact-links a:hover .icon,:root[data-motion=on] .footer-social a:hover .icon{animation:icon-wiggle calc(var(--dur-fast) * 2) var(--ease-in-out)}@keyframes icon-wiggle{25%{transform:rotate(-8deg)}75%{transform:rotate(8deg)}}:root[data-motion=on] .section-text a:hover,:root[data-motion=on] .proj-section p a:hover,:root[data-motion=on] .breadcrumb a:hover,:root[data-motion=on] .page-links__email:hover{transform:translateY(-1px)}:root[data-motion=on] .breadcrumb__live .breadcrumb__sep{position:relative}:root[data-motion=on] .breadcrumb__live .breadcrumb__sep:after{content:"/";position:absolute;left:0;top:0;color:var(--accent);opacity:0;animation:sep-flash calc(var(--dur-slow) * 2) var(--ease-out) var(--dur-fast)}@keyframes sep-flash{30%{opacity:1}}.ico{display:inline-block;flex:none;vertical-align:middle;overflow:visible}.outline-btn .icon-svg,.footer-social .icon-svg,.page-links .icon-svg{color:var(--fg-muted)}.footer-social a:hover .icon-svg,.outline-btn:hover .icon-svg{color:inherit}.section-heading__icon{align-self:center;color:var(--fg-subtle)}.section-text__icon{margin-right:8px;vertical-align:-2px;color:var(--fg-subtle)}.hero .outline-btn{font-family:var(--font-pixel);padding:6px 12px}.hero .contact-links{gap:14px;margin-top:16px}.hero__text{padding-left:3px}.tl-item__icon{margin-right:-3px;color:var(--fg-subtle)}.tl-item__date{display:inline-flex;align-items:center;gap:6px;vertical-align:bottom}.tl-item__date-icon{position:relative;top:-.5px}.work-card__tag{display:inline-flex;align-items:center;gap:6px}.work-card__tag-icon{opacity:.8}.work-card__arrow,.work-card__repo-link{display:inline-flex;align-items:center;gap:6px}.work-card__stars{gap:6px}.work-card__star{color:#e3b341}.contrib__title{display:flex;align-items:center;flex-wrap:wrap;gap:0 6px}.contrib__icon{color:var(--fg-subtle)}:root[data-motion=on] :where(.ico){transition:color var(--dur-ui) var(--ease-out),opacity var(--dur-ui) var(--ease-out),transform var(--dur-fast) var(--ease-out)}:root[data-motion=on] .section-block.in>.section-heading .ico--line,:root[data-motion=on] .section-block.in>.section-text .ico--line,:root[data-motion=on] .tl-item.in .ico--line,:root[data-motion=on] .work-card.in .ico--line,:root[data-motion=on] .contrib.in .ico--line,:root[data-motion=on] .resume-head.in .ico--line,:root[data-motion=on] .proj-cta.in .ico--line{animation:px-pop var(--dur-base) var(--ease-out) calc(var(--stagger, 0ms) + var(--dur-base)) backwards}@keyframes px-pop{50%{transform:scale(1.15)}}:root[data-motion=on] .work-card:hover .work-card__arrow .ico{transform:translate(2px,-2px)}:root[data-motion=on] .work-card__repo-link:hover .ico{transform:translateY(-1px)}:root[data-motion=on] .contact-links a:hover .icon-svg,:root[data-motion=on] .footer-social a:hover .icon-svg{animation:icon-wiggle calc(var(--dur-fast) * 2) var(--ease-in-out)}:root{--frame-rest: var(--border);--frame-hover: var(--accent);--hard-shadow-rest: 4px 4px 0 0 #010409;--hard-shadow-hover: 2px 2px 0 0 #0f3d1a}.work-card,.outline-btn,.site-nav__resume{border:1px solid var(--frame-rest);border-radius:0;box-shadow:var(--hard-shadow-rest)}.work-card:is(:hover,:has(.work-card__link:focus-visible)),.outline-btn:is(:hover,:focus-visible),.site-nav__resume:is(:hover,:focus-visible){border-color:var(--frame-hover);box-shadow:var(--hard-shadow-hover)}.outline-btn:is(:hover,:focus-visible) :is(.icon,.icon-svg,.ico),.site-nav__resume:is(:hover,:focus-visible) :is(.icon,.icon-svg,.ico){color:var(--accent-strong)}:root[data-motion=on] .work-card,:root[data-motion=on] .outline-btn,:root[data-motion=on] .site-nav__resume{transition:var(--t-ui),transform var(--dur-fast) steps(2),box-shadow var(--dur-fast) steps(2),border-color var(--dur-fast) steps(2)}:root[data-motion=on] .work-card:is(:hover,:has(.work-card__link:focus-visible)),:root[data-motion=on] .outline-btn:is(:hover,:focus-visible),:root[data-motion=on] .site-nav__resume:is(:hover,:focus-visible){transform:translate(2px,2px)}.footer-flair{flex-basis:100%;display:grid;gap:10px}.footer-march{position:relative;height:16px;overflow:hidden}.footer-march__form{position:absolute;left:0;top:0;display:flex;gap:10px;color:var(--accent);opacity:.7}.footer-march__inv{display:block;width:14px;height:14px}.footer-march__inv svg{display:block;width:14px;height:14px}:root[data-motion=on] .footer-march__form{animation:footer-march 20s steps(40) infinite alternate}:root[data-motion=on] .footer-march__inv{animation:footer-bob 1s steps(1) infinite}:root[data-motion=on] .footer-march__inv:nth-child(2n){animation-delay:-.5s}@keyframes footer-march{to{left:100%;transform:translate(-100%)}}@keyframes footer-bob{50%{transform:translateY(2px)}}.footer-credit{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-family:var(--font-mono);font-size:12px;color:var(--fg-muted)}.footer-credit .ico{vertical-align:middle}.motion-toggle{padding:0 6px;font:inherit;line-height:18px;color:var(--fg-muted);background:none;border:1px solid var(--border);border-radius:4px;cursor:pointer;transition:var(--t-ui)}.motion-toggle:hover,.motion-toggle:focus-visible{color:var(--fg);border-color:var(--fg-muted)}.footer-credit__heart{color:#f85149}.footer-credit__coffee{color:#d29922}.footer-credit__sep{margin:0 4px;color:var(--border)}
