:root{font-family:ui-sans-serif,system-ui,sans-serif;font-size:14px;line-height:1.65;font-weight:400;color:#333;background:#fff}*{box-sizing:border-box}body{margin:0}a{color:#000;text-decoration:underline;text-decoration-color:#999;text-underline-offset:3px}a:hover{text-decoration-color:#000}a:focus-visible,button:focus-visible{outline:2px solid #8050b5;outline-offset:4px}.site-header{max-width:628px;margin:0 auto;padding:48px 24px 0}nav{display:flex;flex-wrap:wrap;gap:24px}nav a{color:#999;text-decoration:none;font-size:14px}nav a[aria-current=page],nav a:hover{color:#000}main{padding:48px 24px 64px}main>*{max-width:580px;margin-left:auto;margin-right:auto}h1,h2,h3,p{font-size:14px;font-weight:400;line-height:1.65;margin:0}h1,h3{color:#000}.name{margin-bottom:32px}.name h1{margin-bottom:4px}.muted{color:#999}.intro>p{margin-bottom:16px}.intro>.contact{margin-top:32px;margin-bottom:0}.work{margin-top:64px}.work>h2{color:#999;margin-bottom:24px}.project{display:block;text-decoration:none;margin:0;padding:24px 0;border-top:1px solid #eee}.project:last-child{border-bottom:1px solid #eee}.project-title{display:flex;align-items:baseline;justify-content:space-between;gap:20px;margin-bottom:8px}.project-title > span{font-size:14px;color:#999;white-space:nowrap}.project p{color:#333}.project-title a{color:#000;text-decoration:none}.project-title a:hover,.project-title a:focus-visible{color:#8050b5;text-decoration:underline;text-decoration-color:currentColor;text-underline-offset:3px}.text-project:hover h3{text-decoration:none}footer{margin-top:64px;display:flex;justify-content:space-between;gap:24px;font-size:14px}footer h2{font-size:14px;color:#999;margin-bottom:8px}footer a{font-size:14px;margin-right:16px}footer p{font-size:14px}@media(max-width:620px){.site-header{padding-top:32px}main{padding-top:40px}.project-title{display:block}.project-title > span{display:block;margin-top:4px}footer{display:block}footer>p{margin-top:24px}}

.work .project-title { margin-bottom: 8px; }

/* Hide native scrollbars while preserving wheel, touch and keyboard scrolling. */
html,body,*{scrollbar-width:none}
*::-webkit-scrollbar{display:none;width:0;height:0}

/* Transparent progressive blur: strength increases toward the viewport edge. */
.viewport-blur{position:fixed;inset:auto 0 0;height:104px;z-index:8;pointer-events:none}
.viewport-blur>span{position:absolute;inset:0;pointer-events:none;-webkit-backdrop-filter:blur(var(--blur));backdrop-filter:blur(var(--blur));-webkit-mask-image:var(--mask);mask-image:var(--mask)}
main{padding-bottom:128px}
@media(max-width:620px){.viewport-blur{height:80px}main{padding-bottom:104px}}

/* Mirror the bottom frost at the top viewport edge. */
.viewport-blur.viewport-blur-top{inset:0 0 auto;transform:rotate(180deg)}

/* Static CRT texture keeps the page readable and leaves interaction untouched. */
.screen-texture{position:fixed;inset:0;z-index:20;pointer-events:none;overflow:hidden}
.screen-texture::before,.screen-texture::after{content:"";position:absolute;inset:0;pointer-events:none}
.screen-texture::before{background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%22180%22%20height%3D%22180%22%3E%3Cfilter%20id%3D%22n%22%3E%3CfeTurbulence%20type%3D%22fractalNoise%22%20baseFrequency%3D%22.85%22%20numOctaves%3D%223%22%20stitchTiles%3D%22stitch%22/%3E%3C/filter%3E%3Crect%20width%3D%22100%25%22%20height%3D%22100%25%22%20opacity%3D%22.45%22%20filter%3D%22url%28%23n%29%22/%3E%3C/svg%3E");background-repeat:repeat;opacity:.085;mix-blend-mode:multiply}
.screen-texture[data-mode="crt"]::after{background:repeating-linear-gradient(to bottom,#0000000d 0 1px,transparent 1px 3px),repeating-linear-gradient(to right,#ff000005 0 1px,#00b80005 1px 2px,#0000ff05 2px 3px);box-shadow:inset 0 0 100px #00000004}
.screen-texture[data-mode="soft"]::before{opacity:.06}
.screen-texture[data-mode="off"]{display:none}
