.app-frame{max-width:var(--frame-width);border-left:1px solid var(--line);border-right:1px solid var(--line);min-height:100vh;margin:0 auto;position:relative}.app-frame.is-revealing{z-index:950;animation:app-frame-reveal 1s var(--ease-in-out) forwards}@media screen and (width<=600px){.app-frame.is-revealing{animation-name:app-frame-reveal-sm}}.app-frame.is-focusing>:not(.app-navbar){animation:app-frame-focus 1s var(--ease-in-out) both}@keyframes app-frame-focus{0%{filter:blur(16px)}to{filter:blur()}}@keyframes app-frame-reveal{0%{clip-path:inset(calc(50vh - 100px) calc(50% - 240px) calc(100% - 50vh - 100px))}to{clip-path:inset(0 0 calc(100% - 100vh))}}@keyframes app-frame-reveal-sm{0%{clip-path:inset(calc(50vh - 70px) calc(50% - 150px) calc(100% - 50vh - 70px))}to{clip-path:inset(0 0 calc(100% - 100vh))}}.app-section{padding:120px var(--gutter) 112px;border-top:1px solid var(--line);position:relative}.app-section:before,.app-section:after{content:"";background:linear-gradient(var(--subtle), var(--subtle)) center/1px 100% no-repeat, linear-gradient(var(--subtle), var(--subtle)) center/100% 1px no-repeat;width:11px;height:11px;position:absolute;top:-6px}.app-section:before{left:-6px}.app-section:after{right:-6px}@media screen and (width<=900px){.app-section{padding:88px var(--gutter) 80px}}.app-link{color:var(--accent-ink);transition:background-size .35s var(--ease-out);background-image:linear-gradient(currentColor,currentColor);background-position:0 100%;background-repeat:no-repeat;background-size:0 1px;text-decoration:none}.app-link:hover{background-size:100% 1px}.app-label{letter-spacing:.14em;text-transform:uppercase;color:var(--subtle);align-items:center;gap:12px;margin-bottom:14px;font-size:11px;display:flex}.app-label:after{content:"";background:var(--line-2);width:40px;height:1px}.app-bullets{flex-direction:column;gap:16px;max-width:780px;list-style:none;display:flex}.app-bullets li{color:var(--muted);padding-left:28px;font-size:16px;line-height:1.7;position:relative}.app-bullets li:before{content:"›";font-family:var(--font-mono);color:var(--accent-ink);font-weight:600;position:absolute;top:0;left:6px}@media screen and (width<=900px){.app-bullets li{padding-left:24px;font-size:15px}.app-bullets li:before{left:4px}}.app-bullets a{color:var(--accent-ink)}.app-metric{font-family:var(--font-mono);color:var(--text);white-space:nowrap;font-size:.92em}.app-item-link-description{max-width:780px;color:var(--muted);margin-top:28px;font-size:15px;line-height:1.6}.app-button{border:1px solid var(--line-2);height:44px;color:var(--text);font-family:var(--font-mono);cursor:pointer;background:0 0;border-radius:8px;align-items:center;gap:10px;padding:0 16px;font-size:14px;text-decoration:none;transition:border-color .2s,background-color .2s,color .2s;display:inline-flex}.app-button svg{color:var(--subtle);transition:transform .25s var(--ease-out), color .2s ease;flex:none}.app-button:hover{border-color:var(--accent);background:color-mix(in srgb, var(--accent) 8%, transparent)}.app-button:hover svg{color:var(--accent-ink);transform:translate(2px,-2px)}.app-icon-button{border:1px solid var(--line);width:44px;height:44px;color:var(--text);cursor:pointer;background:0 0;border-radius:8px;place-items:center;transition:border-color .2s;display:grid}.app-icon-button:hover{border-color:var(--line-2)}.app-navbar{z-index:20;height:var(--nav-height);border-bottom:1px solid var(--line);background:color-mix(in srgb, var(--bg) 82%, transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);justify-content:space-between;align-items:center;gap:24px;padding:0 20px 0 28px;display:flex;position:sticky;top:0}@media screen and (width<=900px){.app-navbar{padding:0 12px 0 20px}}.app-navbar-brand{min-height:44px;font-family:var(--font-mono);letter-spacing:-.02em;color:var(--text);cursor:pointer;background:0 0;border:0;align-items:center;padding:0;font-size:18px;font-weight:600;display:flex}.app-navbar-brand.is-hidden{visibility:hidden}.app-navbar-brand-bracket{color:var(--accent-ink)}.app-navbar-actions{align-items:center;gap:8px;display:flex}.app-navbar-links{gap:2px;margin-right:8px;list-style:none;display:flex}@media screen and (width<=900px){.app-navbar-links{display:none}}.app-navbar-link{height:40px;color:var(--muted);cursor:pointer;border-radius:6px;align-items:center;gap:8px;padding:0 12px;font-size:13px;text-decoration:none;transition:color .2s;display:inline-flex;position:relative}.app-navbar-link:hover,.app-navbar-link.is-active{color:var(--text)}.app-navbar-link.is-active .app-navbar-link-index{color:var(--accent-ink)}.app-navbar-link-highlight{z-index:-1;background:var(--line);border-radius:6px;position:absolute;inset:0}.app-navbar-link-index{color:var(--subtle);font-size:11px;transition:color .2s}.app-navbar-menu-button{display:none;position:relative}@media screen and (width<=900px){.app-navbar-menu-button{display:grid}}.app-navbar-menu-line{background:currentColor;border-radius:2px;width:18px;height:1.5px;position:absolute;top:21px;left:13px}.app-navbar-progress{background:var(--accent);height:1px;box-shadow:0 0 12px var(--accent);transform-origin:0;position:absolute;bottom:-1px;left:0;right:0}.app-navbar-menu{border:1px solid var(--line);background:color-mix(in srgb, var(--bg) 94%, transparent);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-top:0;flex-direction:column;padding:8px;list-style:none;display:flex;position:absolute;top:calc(100% + 1px);left:-1px;right:-1px}.app-navbar-menu .app-navbar-link{height:52px;padding:0 12px;font-size:15px;display:flex}@media screen and (width>=901px){.app-navbar-menu{display:none}}.app-social{flex-wrap:wrap;display:flex}.app-social-buttons{gap:10px}.app-social-links{gap:0 28px}.app-social-link{min-height:44px;color:var(--text);align-items:center;gap:6px;font-size:14px;text-decoration:none;transition:color .2s;display:inline-flex}.app-social-link svg{color:var(--subtle);transition:transform .25s var(--ease-out), color .2s ease}.app-social-link:hover{color:var(--accent-ink)}.app-social-link:hover svg{color:var(--accent-ink);transform:translate(2px,-2px)}.app-cursor-grid{z-index:-1;background-image:linear-gradient(var(--line-2) 1px, transparent 1px), linear-gradient(90deg, var(--line-2) 1px, transparent 1px);pointer-events:none;background-size:48px 48px;position:fixed;inset:0}.app-cursor-frame{z-index:99998;pointer-events:none;position:fixed;top:0;left:0}.app-cursor-corner{border:0 solid var(--accent);width:9px;height:9px;position:absolute}.app-cursor-corner.is-tl{border-top-width:1.5px;border-left-width:1.5px;top:0;left:0}.app-cursor-corner.is-tr{border-top-width:1.5px;border-right-width:1.5px;top:0;right:0}.app-cursor-corner.is-bl{border-bottom-width:1.5px;border-left-width:1.5px;bottom:0;left:0}.app-cursor-corner.is-br{border-bottom-width:1.5px;border-right-width:1.5px;bottom:0;right:0}.app-cursor-size{font-family:var(--font-mono);white-space:nowrap;color:var(--accent-ink);font-size:10px;position:absolute;top:calc(100% + 6px);right:0}.app-cursor-readout{z-index:99998;font-family:var(--font-mono);letter-spacing:.04em;white-space:pre;color:var(--subtle);pointer-events:none;margin:24px 0 0 18px;font-size:10px;position:fixed;top:0;left:0}.app-cursor-flash{z-index:99997;pointer-events:none;width:0;height:0;position:fixed}.app-cursor-flash .is-horizontal,.app-cursor-flash .is-vertical,.app-cursor-flash .is-box{position:absolute}.app-cursor-flash .is-horizontal{background:linear-gradient(90deg, transparent, var(--accent), transparent);width:180px;height:1px;animation:app-cursor-flash-x .6s var(--ease-out) forwards;top:-.5px;left:-90px}.app-cursor-flash .is-vertical{background:linear-gradient(transparent, var(--accent), transparent);width:1px;height:180px;animation:app-cursor-flash-y .6s var(--ease-out) forwards;top:-90px;left:-.5px}.app-cursor-flash .is-box{border:1px solid var(--accent);width:12px;height:12px;animation:app-cursor-flash-box .55s var(--ease-out) forwards;top:-6px;left:-6px}@keyframes app-cursor-flash-x{0%{opacity:1;transform:scaleX(0)}50%{opacity:1}to{opacity:0;transform:scaleX(1)}}@keyframes app-cursor-flash-y{0%{opacity:1;transform:scaleY(0)}50%{opacity:1}to{opacity:0;transform:scaleY(1)}}@keyframes app-cursor-flash-box{0%{opacity:1;transform:scale(.4)}to{opacity:0;transform:scale(2.4)}}.app-section-heading{margin-bottom:80px}@media screen and (width<=900px){.app-section-heading{margin-bottom:48px}}.app-section-heading-meta{align-items:center;gap:14px;margin-bottom:22px;font-size:13px;display:flex}.app-section-heading-index{color:var(--accent-ink);font-weight:500}.app-section-heading-path,.app-section-heading-count{color:var(--subtle)}.app-section-heading-rule{background:var(--line);transform-origin:0;flex:1;height:1px}.app-section-heading-title{letter-spacing:-.045em;color:var(--text);font-size:64px;font-weight:600;line-height:1}@media screen and (width<=900px){.app-section-heading-title{font-size:44px}}.app-section-heading-word{vertical-align:bottom;padding-bottom:.08em;display:inline-block;overflow:hidden}.app-section-heading-word>span{display:inline-block}.app-tech-stack{margin-top:40px}.app-tech-stack-list{flex-wrap:wrap;align-items:center;gap:8px;list-style:none;display:flex}.app-chip{border:1px solid var(--line);background:var(--panel);height:34px;color:var(--text);transition:border-color .2s ease, transform .25s var(--ease-out);border-radius:6px;align-items:center;gap:8px;padding:0 12px 0 10px;font-size:12.5px;text-decoration:none;display:inline-flex}.app-chip:hover{border-color:var(--accent);transform:translateY(-2px)}.app-chip-icon{place-items:center;width:16px;height:16px;display:grid}.app-chip-icon svg{width:100%;height:100%}.app-timeline{--tl-meta:200px;--tl-rail:56px;--tl-x:calc(var(--tl-meta) + var(--tl-rail) / 2);position:relative}.app-timeline:before{content:"";top:12px;bottom:0;left:calc(var(--tl-x) - .5px);background:linear-gradient(var(--line-2) 85%, transparent);width:1px;position:absolute}@media screen and (width<=900px){.app-timeline{--tl-rail:28px;--tl-x:6.5px}}.app-timeline-progress{top:12px;bottom:0;left:calc(var(--tl-x) - .5px);background:var(--accent);width:1px;box-shadow:0 0 10px var(--accent);transform-origin:top;position:absolute;-webkit-mask-image:linear-gradient(#000 85%,#0000);mask-image:linear-gradient(#000 85%,#0000)}.app-timeline-item{grid-template-columns:var(--tl-meta) var(--tl-rail) minmax(0, 1fr);grid-template-areas:"meta rail content";display:grid}@media screen and (width<=900px){.app-timeline-item{grid-template-columns:var(--tl-rail) minmax(0, 1fr);grid-template-areas:"rail meta""rail content"}}.app-timeline-meta{text-align:right;color:var(--muted);grid-area:meta;padding-top:9px;font-size:13px}@media screen and (width<=900px){.app-timeline-meta{text-align:left;padding:7px 0 10px}}.app-timeline-rail{grid-area:rail;justify-content:center;display:flex}@media screen and (width<=900px){.app-timeline-rail{justify-content:flex-start}}.app-timeline-node{z-index:1;border:2px solid var(--line-2);background:var(--bg);border-radius:50%;width:13px;height:13px;margin-top:11px;transition:border-color .4s;position:relative}.app-timeline-node:after{content:"";border:2px solid var(--accent);opacity:0;border-radius:50%;position:absolute;inset:-2px}.is-active>.app-timeline-rail>.app-timeline-node{border-color:var(--accent)}.is-active>.app-timeline-rail>.app-timeline-node:after{animation:1.2s cubic-bezier(0,0,.2,1) app-timeline-ping}@media screen and (width<=900px){.app-timeline-node{margin-top:9px}}@keyframes app-timeline-ping{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(2.6)}}.app-timeline-content{grid-area:content;min-width:0;padding-bottom:88px}.app-timeline-item:last-child .app-timeline-content{padding-bottom:8px}.app-timeline-content>.app-bullets{margin-top:28px}@media screen and (width<=900px){.app-timeline-content{padding-bottom:64px}}.app-timeline-title{letter-spacing:-.03em;color:var(--text);font-size:30px;font-weight:600;line-height:1.25}@media screen and (width<=900px){.app-timeline-title{font-size:24px}}.app-timeline-at{color:var(--subtle);margin:0 .2em;font-weight:400}.app-timeline-images{flex-wrap:wrap;gap:16px;margin-top:28px;display:flex}.app-timeline-images img{border:1px solid var(--line);object-fit:cover;border-radius:8px}.app-splash-bg{z-index:900;background:var(--bg);position:fixed;inset:0;overflow:hidden}.app-splash-grid{background-image:linear-gradient(var(--grid) 1px, transparent 1px), linear-gradient(90deg, var(--grid) 1px, transparent 1px);opacity:0;background-position:50%;background-size:48px 48px;animation:.8s forwards app-splash-fade-in;position:absolute;inset:0;-webkit-mask-image:radial-gradient(circle,#000 0,#0000 60%);mask-image:radial-gradient(circle,#000 0,#0000 60%)}.app-splash{--bw:240px;--bh:100px;--word-size:88px;--word-scale:.2045;--land-x:-544px;--land-y:calc(31.5px - 50vh);z-index:1000;pointer-events:none;position:fixed;inset:0}@media screen and (width<=600px){.app-splash{--bw:150px;--bh:70px;--word-size:46px}}.app-splash-fade{transition:opacity .3s}.is-exiting .app-splash-fade{opacity:0!important}.app-splash-guide{background:var(--line-2);transition:left 1s var(--ease-in-out), top 1s var(--ease-in-out), background-color 1s ease;position:absolute}.app-splash-guide.is-top,.app-splash-guide.is-bottom{height:1px;left:0;right:0;transform:scaleX(0)}.app-splash-guide.is-left,.app-splash-guide.is-right{width:1px;top:0;bottom:0;transform:scaleY(0)}.app-splash-guide.is-top{top:calc(50% - var(--bh));animation:1s cubic-bezier(.7,0,.2,1) .15s forwards app-splash-draw-x}.app-splash-guide.is-bottom{top:calc(50% + var(--bh));animation:1s cubic-bezier(.7,0,.2,1) .22s forwards app-splash-draw-x}.app-splash-guide.is-left{left:calc(50% - var(--bw));animation:1s cubic-bezier(.7,0,.2,1) .29s forwards app-splash-draw-y}.app-splash-guide.is-right{left:calc(50% + var(--bw));animation:1s cubic-bezier(.7,0,.2,1) .36s forwards app-splash-draw-y}.is-exiting .app-splash-guide{background:var(--line)}.is-exiting .app-splash-guide.is-top{top:calc(var(--nav-height) - 1px)}.is-exiting .app-splash-guide.is-bottom{top:calc(100% + 2px)}.is-exiting .app-splash-guide.is-left{left:calc(50% - var(--frame-width) / 2)}.is-exiting .app-splash-guide.is-right{left:calc(50% + var(--frame-width) / 2 - 1px)}@media screen and (width<=1200px){.is-exiting .app-splash-guide.is-left{left:0}.is-exiting .app-splash-guide.is-right{left:calc(100% - 1px)}}.app-splash-origin{width:28px;height:28px;color:var(--accent);opacity:0;animation:app-splash-origin 1.1s var(--ease-out) forwards;margin:-14px 0 0 -14px;line-height:0;position:absolute;top:50%;left:50%}.app-splash-origin:after{content:"";border:1px solid var(--accent);opacity:0;border-radius:50%;animation:1s cubic-bezier(0,0,.2,1) .1s app-splash-ping;position:absolute;inset:7px}.app-splash-mark{width:11px;height:11px;color:var(--accent);opacity:0;animation:app-splash-pop .5s var(--ease-out) 1s forwards;line-height:0;position:absolute}.app-splash-mark.is-tl{left:calc(50% - var(--bw) - 5px);top:calc(50% - var(--bh) - 5px)}.app-splash-mark.is-tr{left:calc(50% + var(--bw) - 5px);top:calc(50% - var(--bh) - 5px)}.app-splash-mark.is-bl{left:calc(50% - var(--bw) - 5px);top:calc(50% + var(--bh) - 5px)}.app-splash-mark.is-br{left:calc(50% + var(--bw) - 5px);top:calc(50% + var(--bh) - 5px)}.app-splash-ruler{color:var(--subtle);font-size:10px;position:absolute}.app-splash-ruler.is-horizontal{left:calc(50% - var(--bw));top:calc(50% - var(--bh) - 12px);width:calc(var(--bw) * 2);background:repeating-linear-gradient(90deg, var(--line-2) 0 1px, transparent 1px 12px) left bottom/100% 4px no-repeat, repeating-linear-gradient(90deg, var(--muted) 0 1px, transparent 1px 60px) left bottom/100% 8px no-repeat;clip-path:inset(-24px 100% -4px -24px);height:8px;animation:.9s cubic-bezier(.6,0,.3,1) .7s forwards app-splash-rule-x}.app-splash-ruler.is-horizontal span{position:absolute;bottom:12px;transform:translate(-50%)}.app-splash-ruler.is-horizontal .is-start{left:0}.app-splash-ruler.is-horizontal .is-end{left:100%}.app-splash-ruler.is-vertical{left:calc(50% + var(--bw) + 5px);top:calc(50% - var(--bh));width:8px;height:calc(var(--bh) * 2);background:repeating-linear-gradient(180deg, var(--line-2) 0 1px, transparent 1px 12px) left top/4px 100% no-repeat, repeating-linear-gradient(180deg, var(--muted) 0 1px, transparent 1px 50px) left top/8px 100% no-repeat;clip-path:inset(-4px -60px 100% -4px);animation:.9s cubic-bezier(.6,0,.3,1) .85s forwards app-splash-rule-y}.app-splash-ruler.is-vertical span{position:absolute;top:50%;left:16px;transform:translateY(-50%)}.app-splash-coord{top:calc(50% + var(--bh) + 10px);white-space:nowrap;color:var(--subtle);opacity:0;font-size:10px;animation:.5s 1.1s forwards app-splash-fade-in;position:absolute}.app-splash-coord.is-bl{left:calc(50% - var(--bw))}.app-splash-coord.is-br{left:calc(50% + var(--bw));transform:translate(-100%)}.app-splash-word{font-family:var(--font-mono);font-size:var(--word-size);letter-spacing:-.02em;white-space:pre;transform-origin:50%;transition:transform 1s var(--ease-in-out);font-weight:600;line-height:normal;display:grid;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.is-exiting .app-splash-word{transform:translate(calc(-50% + var(--land-x)), calc(-50% + var(--land-y))) scale(var(--word-scale))}.app-splash-word-ghost,.app-splash-word-solid{grid-area:1/1}.app-splash-word-ghost{color:#0000;-webkit-text-stroke:1px var(--line-2);opacity:0;animation:.5s .35s forwards app-splash-fade-in}.is-exiting .app-splash-word-ghost{opacity:0!important}.app-splash-char{color:var(--text)}.app-splash-char.is-scrambling{color:var(--accent)}.app-splash-char.is-locked{animation:.7s ease-out app-splash-lock}.app-splash-bracket{color:var(--accent-ink);opacity:0;display:inline-block}.app-splash-bracket.is-on{opacity:1;animation:app-splash-bracket .6s var(--ease-out)}.app-splash-progress{left:calc(50% - var(--bw));top:calc(50% + var(--bh) + 44px);width:calc(var(--bw) * 2);background:var(--line);opacity:0;height:1px;animation:.5s .6s forwards app-splash-fade-in;position:absolute}.app-splash-progress:before,.app-splash-progress:after{content:"";background:var(--line-2);width:1px;height:9px;position:absolute;top:-4px}.app-splash-progress:before{left:0}.app-splash-progress:after{right:0}.app-splash-progress-fill{background:var(--accent);height:1px;box-shadow:0 0 10px var(--accent);position:absolute;top:0;left:0}.app-splash-progress-label{background:var(--bg);letter-spacing:.06em;color:var(--muted);padding:0 10px;font-size:11px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.app-splash-meta{letter-spacing:.12em;text-transform:uppercase;color:var(--subtle);opacity:0;justify-content:space-between;gap:16px;font-size:11px;animation:.6s .5s forwards app-splash-fade-in;display:flex;position:absolute;bottom:28px;left:32px;right:32px}@media screen and (width<=600px){.app-splash-meta{left:20px;right:20px}}@keyframes app-splash-fade-in{to{opacity:1}}@keyframes app-splash-draw-x{to{transform:scaleX(1)}}@keyframes app-splash-draw-y{to{transform:scaleY(1)}}@keyframes app-splash-origin{0%{opacity:0;transform:scale(.3)rotate(-90deg)}20%,65%{opacity:1;transform:none}to{opacity:0;transform:scale(.5)}}@keyframes app-splash-ping{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(2.4)}}@keyframes app-splash-pop{0%{opacity:0;transform:scale(0)rotate(-90deg)}to{opacity:1;transform:none}}@keyframes app-splash-rule-x{to{clip-path:inset(-24px -24px -4px)}}@keyframes app-splash-rule-y{to{clip-path:inset(-4px -60px -4px -4px)}}@keyframes app-splash-lock{0%{color:var(--accent);text-shadow:0 0 28px var(--accent)}to{color:var(--text);text-shadow:0 0 #0000}}@keyframes app-splash-bracket{0%{opacity:0;text-shadow:0 0 28px var(--accent);transform:scale(2.4)}to{opacity:1;text-shadow:0 0 #0000;transform:none}}.app-scroll-top{z-index:30;border:1px solid var(--line-2);background:color-mix(in srgb, var(--bg) 85%, transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);width:44px;height:44px;color:var(--text);cursor:pointer;border-radius:8px;place-items:center;display:grid;position:fixed;bottom:24px;right:24px}.app-scroll-top svg:not(.app-scroll-top-progress){transition:transform .25s var(--ease-out)}.app-scroll-top:hover svg:not(.app-scroll-top-progress){transform:translateY(-2px)}@media screen and (width<=900px){.app-scroll-top{bottom:16px;right:16px}}.app-scroll-top-progress{width:calc(100% + 2px);height:calc(100% + 2px);position:absolute;inset:-1px;overflow:visible}.app-scroll-top-progress rect{fill:none;stroke:var(--accent);stroke-width:1.5px}.app-section.app-footer{padding:64px var(--gutter) 0;overflow:hidden}@media screen and (width<=900px){.app-section.app-footer{padding:48px var(--gutter) 0}}.app-footer-top{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px 32px;display:flex}.app-footer-description{color:var(--muted);font-size:18px}.app-footer-wordmark{text-align:center;margin-top:64px;padding-bottom:64px;overflow:hidden}.app-footer-wordmark p{font-family:var(--font-mono);letter-spacing:-.05em;color:var(--text);font-size:clamp(36px,7vw,96px);font-weight:600;line-height:1}@media screen and (width<=900px){.app-footer-wordmark{margin-top:48px;padding-bottom:48px}}.app-footer-wordmark-bracket{color:var(--accent-ink)}.app-decoding-letter{display:inline-block;position:relative}.app-decoding-letter.is-scrambling{color:#0000}.app-decoding-letter.is-locked{animation:.7s ease-out app-decoding-lock}.app-decoding-glyph{font-family:var(--font-mono);color:var(--accent);position:absolute;top:0;left:50%;transform:translate(-50%)}@keyframes app-decoding-lock{0%{color:var(--accent-glint);text-shadow:0 0 24px var(--accent)}to{color:var(--accent-ink);text-shadow:0 0 #0000}}.app-typewriter{white-space:pre;align-items:center;gap:2px;line-height:1.6;display:inline-flex}.app-typewriter[dir=rtl]{font-family:var(--font-sans)}.app-typewriter-cursor{background:var(--accent);flex:none;width:.6em;height:1.2em;animation:1s infinite app-typewriter-blink}@keyframes app-typewriter-blink{50%{opacity:0}}.app-graph-traces{fill:none;stroke-linecap:butt;width:100%;height:100%;position:absolute;inset:0}.app-graph-traces-run{animation:.7s forwards app-graph-traces-to-hidden}.app-graph-traces-tree{stroke:var(--line-2);stroke-width:1px;animation:.5s forwards app-graph-traces-dim}.app-graph-traces-edge{animation:linear forwards app-graph-traces-draw}.app-graph-traces-edge.is-backtracked{animation:linear forwards app-graph-traces-draw,linear forwards app-graph-traces-dim}.app-graph-traces-path{stroke:var(--accent);stroke-width:1.5px;animation:linear forwards app-graph-traces-draw}.app-graph-traces-signal{stroke:var(--accent-glint);stroke-width:2.5px;animation:linear forwards app-graph-traces-signal,forwards app-graph-traces-to-hidden}.app-graph-traces-text{opacity:0;font-family:var(--font-mono);stroke:var(--bg);stroke-linejoin:round;paint-order:stroke;animation:.4s forwards app-graph-traces-to-visible}.app-graph-traces-weight{fill:var(--subtle);stroke-width:3px;text-anchor:middle;dominant-baseline:central;font-size:9px}.app-graph-traces-weight.is-on-path{animation:.4s forwards app-graph-traces-to-visible,.2s forwards app-graph-traces-lit}.app-graph-traces-markers{opacity:0;animation:.4s forwards app-graph-traces-to-visible}.app-graph-traces-source{fill:var(--accent)}.app-graph-traces-target{fill:var(--bg);stroke:var(--accent);stroke-width:1.5px;animation:.3s forwards app-graph-traces-arrive}.app-graph-traces-label{fill:var(--subtle);stroke-width:4px;font-size:11px}.app-graph-traces-label.is-result{fill:var(--accent-ink)}@keyframes app-graph-traces-draw{to{stroke-dashoffset:0}}@keyframes app-graph-traces-signal{to{stroke-dashoffset:var(--signal-end)}}@keyframes app-graph-traces-dim{to{opacity:.45}}@keyframes app-graph-traces-arrive{to{fill:var(--accent)}}@keyframes app-graph-traces-lit{to{fill:var(--accent-ink)}}@keyframes app-graph-traces-to-visible{to{opacity:1}}@keyframes app-graph-traces-to-hidden{to{opacity:0}}.app-intro{min-height:calc(100svh - var(--nav-height));padding:112px var(--gutter) 136px;grid-template-columns:minmax(0,7fr) minmax(0,5fr);align-items:center;gap:64px;display:grid;position:relative}@media screen and (width<=900px){.app-intro{min-height:0;padding:56px var(--gutter) 104px;grid-template-columns:minmax(0,1fr);gap:48px}}.app-intro-grid{pointer-events:none;background-image:linear-gradient(var(--grid) 1px, transparent 1px), linear-gradient(90deg, var(--grid) 1px, transparent 1px);background-position:-1px -1px;background-size:48px 48px;position:absolute;inset:0;overflow:hidden;-webkit-mask-image:radial-gradient(75% 85% at 72% 42%,#000 25%,#0000 75%);mask-image:radial-gradient(75% 85% at 72% 42%,#000 25%,#0000 75%)}.app-intro-text{min-width:0;position:relative}.app-intro-hello{height:24px;color:var(--muted);align-items:center;gap:10px;margin-bottom:28px;font-size:15px;display:flex}.app-intro-prompt{color:var(--accent-ink);font-weight:600}.app-intro-name{letter-spacing:-.055em;color:var(--text);margin-bottom:36px;font-size:112px;font-weight:600;line-height:.95}@media screen and (width<=1100px){.app-intro-name{font-size:88px}}@media screen and (width<=900px){.app-intro-name{margin-bottom:28px;font-size:64px}}.app-intro-name-word{vertical-align:bottom;padding:0 .02em .1em 0;display:inline-block;overflow:hidden}.app-intro-name-word>span{display:inline-block}.app-intro-name-accent{color:var(--accent-ink)}.app-intro-description{max-width:34em;color:var(--muted);margin-bottom:32px;font-size:20px;line-height:1.6}@media screen and (width<=900px){.app-intro-description{font-size:17px}}.app-intro-status{border:1px solid var(--line-2);background:var(--panel);min-height:40px;color:var(--text);border-radius:999px;align-items:center;gap:12px;padding:8px 16px 8px 14px;font-size:13px;line-height:1.4;display:inline-flex}.app-intro-status-dot{background:var(--ok);border-radius:50%;flex:none;width:8px;height:8px;position:relative}.app-intro-status-dot:after{content:"";background:var(--ok);border-radius:50%;animation:2.2s cubic-bezier(0,0,.2,1) infinite app-intro-ping;position:absolute;inset:0}@keyframes app-intro-ping{75%,to{opacity:0;transform:scale(2.4)}}.app-intro-social{margin-top:40px}.app-intro-photo{perspective:900px;justify-self:end;width:100%;max-width:420px;margin:0;position:relative}@media screen and (width<=900px){.app-intro-photo{order:-1;justify-self:start;max-width:300px}}.app-intro-photo-dimension{color:var(--subtle);background:linear-gradient(var(--line-2), var(--line-2)) left center/1px 9px no-repeat, linear-gradient(var(--line-2), var(--line-2)) right center/1px 9px no-repeat;align-items:center;gap:10px;margin-bottom:14px;font-size:11px;display:flex;position:relative}.app-intro-photo-dimension:before,.app-intro-photo-dimension:after{content:"";background:var(--line-2);flex:1;height:1px}.app-intro-photo-frame{border:1px solid var(--line-2);background:var(--panel);transform-style:preserve-3d;padding:10px;position:relative}.app-intro-photo-frame:hover img{filter:none;transform:scale(1.03)}.app-intro-photo-clip{overflow:hidden}.app-intro-photo-clip img{aspect-ratio:1;object-fit:cover;filter:grayscale(.2);width:100%;transition:filter .5s ease, transform .8s var(--ease-out)}.app-intro-photo-corner{border:0 solid var(--accent);width:18px;height:18px;position:absolute}.app-intro-photo-corner.is-tl{border-top-width:2px;border-left-width:2px;top:-6px;left:-6px}.app-intro-photo-corner.is-tr{border-top-width:2px;border-right-width:2px;top:-6px;right:-6px}.app-intro-photo-corner.is-bl{border-bottom-width:2px;border-left-width:2px;bottom:-6px;left:-6px}.app-intro-photo-corner.is-br{border-bottom-width:2px;border-right-width:2px;bottom:-6px;right:-6px}.app-intro-photo-caption{color:var(--subtle);justify-content:space-between;padding:12px 2px 0;font-size:12px;display:flex}.app-intro-scroll{left:var(--gutter);letter-spacing:.14em;text-transform:uppercase;color:var(--subtle);align-items:center;gap:12px;font-size:11px;display:flex;position:absolute;bottom:40px}@media screen and (width<=900px){.app-intro-scroll{bottom:32px}}.app-intro-scroll-track{background:var(--line-2);width:56px;height:1px;position:relative;overflow:hidden}.app-intro-scroll-track:after{content:"";background:var(--accent);width:18px;height:1px;animation:1.8s cubic-bezier(.65,0,.35,1) infinite app-intro-scroll;position:absolute;top:0;left:0}@keyframes app-intro-scroll{0%{transform:translate(-18px)}to{transform:translate(56px)}}.app-about-lead{letter-spacing:-.02em;max-width:30em;color:var(--text);font-size:32px;font-weight:500;line-height:1.4}@media screen and (width<=900px){.app-about-lead{font-size:23px}}.app-about-columns{border-top:1px solid var(--line);grid-template-columns:repeat(2,minmax(0,1fr));margin-top:72px;display:grid}.app-about-columns>div{padding:32px 40px 0 0}.app-about-columns>div+div{border-left:1px solid var(--line);padding:32px 0 0 40px}.app-about-columns p{color:var(--muted);font-size:17px;line-height:1.75}@media screen and (width<=900px){.app-about-columns{grid-template-columns:minmax(0,1fr);margin-top:48px}.app-about-columns>div,.app-about-columns>div+div{border-left:0;padding:28px 0 0}}.app-skill-note{color:var(--muted);font-size:17px}.app-external-links{flex-wrap:wrap;gap:10px;margin-top:16px;list-style:none;display:flex}.app-external-links .app-button{height:40px;font-size:13px}.app-project-item{counter-increment:project;border:1px solid var(--line);background:var(--panel);border-radius:12px;transition:border-color .3s;position:relative}.app-project-item:before{content:"";border-radius:inherit;background:radial-gradient(480px circle at var(--mx,50%) var(--my,0%), color-mix(in srgb, var(--accent) 7%, transparent), transparent 70%);opacity:0;pointer-events:none;transition:opacity .4s;position:absolute;inset:0}.app-project-item:hover{border-color:var(--line-2)}.app-project-item:hover:before{opacity:1}.app-project-item:hover .app-project-corner{opacity:1;transform:none}.app-project-item:hover .app-project-shot img{transform:translateY(-4px)}.app-project-corner{z-index:1;border:0 solid var(--accent);opacity:0;pointer-events:none;width:14px;height:14px;transition:opacity .3s ease, transform .4s var(--ease-out);position:absolute}.app-project-corner.is-tl{border-top-width:2px;border-left-width:2px;top:-5px;left:-5px;transform:translate(6px,6px)}.app-project-corner.is-tr{border-top-width:2px;border-right-width:2px;top:-5px;right:-5px;transform:translate(-6px,6px)}.app-project-corner.is-bl{border-bottom-width:2px;border-left-width:2px;bottom:-5px;left:-5px;transform:translate(6px,-6px)}.app-project-corner.is-br{border-bottom-width:2px;border-right-width:2px;bottom:-5px;right:-5px;transform:translate(-6px,-6px)}.app-project-header{border-bottom:1px solid var(--line);align-items:baseline;gap:16px;padding:22px 32px;display:flex;position:relative}@media screen and (width<=900px){.app-project-header{flex-wrap:wrap;gap:6px 12px;padding:18px 20px}}.app-project-index:before{content:counter(project, decimal-leading-zero);color:var(--accent-ink);font-size:13px;font-weight:500}.app-project-title{letter-spacing:-.03em;min-width:0;color:var(--text);flex:1;font-size:28px;font-weight:600;line-height:1.2}@media screen and (width<=900px){.app-project-title{font-size:22px}}.app-project-title-link{color:var(--text);align-items:center;gap:8px;text-decoration:none;transition:color .2s;display:inline-flex}.app-project-title-link svg{color:var(--subtle);transition:transform .25s var(--ease-out), color .2s ease}.app-project-title-link:hover{color:var(--accent-ink)}.app-project-title-link:hover svg{color:var(--accent-ink);transform:translate(2px,-2px)}.app-project-period{color:var(--muted);white-space:nowrap;font-size:13px}@media screen and (width<=900px){.app-project-period{width:100%;padding-left:30px}}.app-project-media{border-bottom:1px solid var(--line);margin:0;padding:48px 32px 22px;position:relative;overflow:hidden}.app-project-media:before{content:"";background-image:linear-gradient(var(--grid) 1px, transparent 1px), linear-gradient(90deg, var(--grid) 1px, transparent 1px);pointer-events:none;background-position:50%;background-size:40px 40px;position:absolute;inset:0;-webkit-mask-image:radial-gradient(70% 80% at 50% 45%,#000 30%,#0000 80%);mask-image:radial-gradient(70% 80% at 50% 45%,#000 30%,#0000 80%)}@media screen and (width<=900px){.app-project-media{padding:28px 16px 16px}}.app-project-shots{justify-content:center;align-items:center;gap:24px;display:flex;position:relative}@media screen and (width<=900px){.app-project-shots{flex-direction:column;gap:16px}.app-project-shots.is-row{flex-direction:row;gap:12px}}.app-project-shot{flex:0 auto;justify-content:center;min-width:0;display:flex}.app-project-shot img{border:1px solid var(--line-2);width:auto;max-width:100%;height:auto;max-height:420px;box-shadow:var(--shadow);transition:transform .5s var(--ease-out);border-radius:8px}@media screen and (width<=900px){.app-project-shot img{max-height:360px}}.app-project-caption{color:var(--subtle);text-align:center;flex-wrap:wrap;justify-content:center;gap:4px 10px;margin-top:22px;font-size:12px;display:flex;position:relative}.app-project-fig:before{content:"fig. " counter(project, decimal-leading-zero) " —"}.app-project-body{grid-template-columns:minmax(0,1.45fr) minmax(0,1fr);gap:48px;padding:32px;display:grid;position:relative}@media screen and (width<=900px){.app-project-body{grid-template-columns:minmax(0,1fr);gap:32px;padding:24px 20px 28px}}.app-project-aside{min-width:0}.app-project-aside>.app-external-links{margin-top:0}.app-project-aside .app-tech-stack{margin-top:32px}.app-project-list{counter-reset:project;flex-direction:column;gap:40px;display:flex}@media screen and (width<=900px){.app-project-list{gap:28px}}.app-contact-grid{grid-template-columns:minmax(0,4fr) minmax(0,7fr);align-items:start;gap:64px;display:grid}@media screen and (width<=900px){.app-contact-grid{grid-template-columns:minmax(0,1fr);gap:40px}}.app-contact-intro{color:var(--muted);font-size:20px;line-height:1.6}@media screen and (width<=900px){.app-contact-intro{font-size:17px}}.app-contact-form{border:1px solid var(--line);background:var(--panel);border-radius:12px}.app-contact-form-header{border-bottom:1px solid var(--line);color:var(--subtle);padding:14px 24px;font-size:12px}.app-contact-form-header span{color:var(--accent-ink);font-weight:500}.app-contact-fields{grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;padding:28px 24px 8px;display:grid}@media screen and (width<=600px){.app-contact-fields{grid-template-columns:minmax(0,1fr)}}.app-contact-field{flex-direction:column;gap:10px;display:flex}.app-contact-field.is-wide{grid-column:1/-1}.app-contact-field label{letter-spacing:.14em;text-transform:uppercase;color:var(--subtle);font-size:11px;transition:color .2s}.app-contact-field:focus-within label{color:var(--accent-ink)}.app-contact-field input,.app-contact-field textarea{border:1px solid var(--line-2);background:var(--bg);width:100%;color:var(--text);border-radius:8px;padding:12px 14px;font-size:15px;transition:border-color .2s,box-shadow .2s}.app-contact-field input::placeholder,.app-contact-field textarea::placeholder{color:var(--subtle)}.app-contact-field input:focus,.app-contact-field textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent);outline:none}.app-contact-field textarea{resize:vertical;min-height:160px}.app-contact-submit{border:1px solid var(--text);background:var(--text);height:48px;color:var(--bg);cursor:pointer;border-radius:8px;align-items:center;gap:12px;margin:20px 24px 24px;padding:0 20px;font-size:14px;font-weight:500;transition:background-color .2s,border-color .2s,color .2s;display:inline-flex}.app-contact-submit svg{transition:transform .25s var(--ease-out)}.app-contact-submit:hover{border-color:var(--accent);background:var(--accent);color:var(--on-accent)}.app-contact-submit:hover svg{transform:translate(3px)}:root{--font-sans:"Geist", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:"Geist Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--ease-out:cubic-bezier(.2, .8, .2, 1);--ease-in-out:cubic-bezier(.76, 0, .24, 1);--frame-width:1200px;--nav-height:64px;--gutter:56px}@media screen and (width<=900px){:root{--gutter:20px}}:root,[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--accent:#ff8a3d;--accent-ink:#ff8a3d;--accent-glint:#ffc59a;--on-accent:#0a0a0b;--bg:#0a0a0b;--panel:#0f0f11;--line:#ffffff14;--line-2:#ffffff29;--text:#ededee;--muted:#a1a1aa;--subtle:#8a8a93;--ok:#3fb950;--grid:#ffffff0d;--shadow:0 24px 60px -28px #000000b3}[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--accent:#ff8a3d;--accent-ink:#c2410c;--accent-glint:#f97316;--on-accent:#0b0b0e;--bg:#fafaf9;--panel:#fff;--line:#0c0c0e17;--line-2:#0c0c0e2e;--text:#0b0b0e;--muted:#52525b;--subtle:#6b6b74;--ok:#1a7f37;--grid:#0c0c0e0e;--shadow:0 24px 60px -32px #0c0c0e47}*,:before,:after{box-sizing:border-box;-webkit-tap-highlight-color:transparent;margin:0;padding:0}html{background-color:var(--bg);-webkit-text-size-adjust:100%;overflow-y:scroll}body{min-height:100vh;color:var(--text);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;overflow-x:clip}::selection{background:var(--accent);color:var(--on-accent)}a{color:inherit}img{max-width:100%;display:block}button,input,textarea{font:inherit;color:inherit}h1,h2,h3{letter-spacing:-.03em}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:8px}.mono{font-family:var(--font-mono)}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){mix-blend-mode:normal;animation:none}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
