:root{--bg: #020202;--fg: #cecdc3;--muted: #575653;--accent: #205ea6;--border: #282726;--text-secondary: #878580;--section-title: #b7b5ac;--ai-generated: #d14d8b}*{margin:0;padding:0;box-sizing:border-box}body{font-family:Geist Mono,monospace;background:var(--bg);color:var(--fg);font-size:15px;line-height:1.7}.skip-link{position:absolute;top:-40px;left:0;background:var(--fg);color:var(--bg);padding:8px 16px;text-decoration:none;font-size:14px;z-index:100;transition:top .2s}.skip-link:focus{top:0}.container{max-width:480px;margin:0 auto;padding:clamp(64px,10vh,120px) clamp(16px,5vw,24px)}.header{margin-bottom:32px}.name{font-size:40px;color:var(--fg);margin-bottom:16px}.bio{color:var(--text-secondary);text-align:justify}.section-title{margin-bottom:16px;color:var(--section-title);font-size:15px;font-weight:500}.projects,.posts{list-style:none;color:var(--text-secondary);margin-bottom:32px;padding-left:2.4ch}.projects li,.posts li{display:flex;align-items:flex-start;margin-bottom:4px}.projects li:before,.posts li:before{content:"•";color:var(--muted);margin-right:1ch}details{display:block}details{flex:1;min-width:0}.project-entry{flex:1;min-width:0}summary{cursor:pointer;display:inline-flex;align-items:baseline;gap:1ch}summary::marker{color:var(--muted)}summary:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:2px}.projects a,.post-link,.back-link,.footer a{color:var(--text-secondary);text-decoration:none;position:relative;transition:color .2s}.projects a:after,.post-link:after,.back-link:after,.footer a:after{content:"";position:absolute;bottom:-2px;left:0;width:0;height:1px;background:var(--fg);transition:width .2s}.projects a:hover,.projects a:focus,.post-link:hover,.post-link:focus,.back-link:hover,.back-link:focus,.footer a:hover,.footer a:focus{color:var(--fg)}.projects a:hover:after,.projects a:focus-visible:after,.post-link:hover:after,.post-link:focus-visible:after,.back-link:hover:after,.back-link:focus-visible:after,.footer a:hover:after,.footer a:focus-visible:after{width:100%}.projects .project--ai-generated:before,.project--ai-generated .ai-generated-label{color:var(--ai-generated)}.ai-generated-label{font-size:12px;font-weight:500;white-space:nowrap}.project-summary{max-height:0;overflow:hidden;color:var(--muted);margin:0 0 0 2ch;font-size:14px;line-height:1.5;opacity:0;transform:translateY(-4px);transition:max-height .2s,margin-top .2s,opacity .2s,transform .2s}.project:hover .project-summary,.project:focus-within .project-summary,details[open]~.project-summary{max-height:3rem;margin-top:4px;opacity:1;transform:translateY(0)}.content{color:var(--text-secondary);margin:8px 0 8px 2ch;font-size:14px;line-height:1.6}.content p{margin-bottom:8px}.content p:last-child{margin-bottom:0}.content a,.content code{color:var(--fg)}.content pre{overflow-x:auto;padding:8px;border:1px solid var(--border)}.empty-state{color:var(--muted);margin:0 0 32px 2.4ch}.post-link{display:inline-flex;align-items:baseline;gap:1ch}.post-link span{overflow-wrap:anywhere}.post-link time{color:var(--muted);font-size:13px;white-space:nowrap}.post-link:focus-visible,.back-link:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:2px}.article-container{max-width:680px;margin:0 auto;padding:clamp(48px,8vh,96px) clamp(16px,5vw,24px)}.back-link{display:inline-block;margin-bottom:40px}.article-header{margin-bottom:40px;padding-bottom:24px;border-bottom:1px solid var(--border)}.article-title{color:var(--fg);font-size:clamp(28px,6vw,38px);line-height:1.25;margin-bottom:12px;overflow-wrap:anywhere}.article-date{color:var(--muted);font-size:14px}.article-content{color:var(--text-secondary);font-size:16px;line-height:1.8}.article-content h2,.article-content h3{color:var(--section-title);line-height:1.4}.article-content h2{font-size:21px;margin:36px 0 12px}.article-content h3{font-size:17px;margin:28px 0 10px}.article-content p,.article-content ul,.article-content ol,.article-content blockquote,.article-content pre{margin-bottom:20px}.article-content p{text-align:justify}.article-content ul,.article-content ol{padding-left:2ch}.article-content blockquote{padding-left:2ch;border-left:2px solid var(--border);color:var(--muted)}.article-content a{color:var(--fg);text-underline-offset:3px}.article-content code{color:var(--fg)}.article-content pre{overflow-x:auto;padding:16px;border:1px solid var(--border)}.article-content img{display:block;max-width:100%;height:auto}.article-image{margin:0 0 20px}.article-image figcaption{margin-top:8px;color:var(--muted);font-size:13px;line-height:1.5;text-align:left}.article-content .image-zoom-trigger{cursor:zoom-in}.article-content .image-zoom-trigger:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.image-lightbox{width:100vw;max-width:none;height:100vh;max-height:none;margin:0;padding:clamp(16px,4vw,48px);border:0;background:#020202f5;overflow:hidden}.image-lightbox[open]{display:flex;align-items:center;justify-content:center}.image-lightbox::backdrop{background:#020202e0}.image-lightbox img{display:block;width:auto;max-width:100%;height:auto;max-height:calc(100vh - clamp(32px,8vw,96px));object-fit:contain;cursor:zoom-out}.image-lightbox-close{position:fixed;z-index:1;top:20px;right:20px;border:0;background:transparent;color:var(--text-secondary);font:inherit;font-size:14px;line-height:1.5;cursor:pointer;transition:color .2s}.image-lightbox-close:hover{color:var(--fg)}.image-lightbox-close:focus-visible{color:var(--fg);outline:2px solid var(--accent);outline-offset:4px}.footer{max-width:480px;margin:0 auto;padding:32px clamp(16px,5vw,24px);display:flex;gap:20px;border-top:1px solid var(--border)}.footer.article-footer{max-width:680px}.footer a:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:2px}::selection{background:#343331;color:var(--fg)}@media(max-width:640px){.name{font-size:32px}}@media print{body{background:#fff;color:#000}.footer{border-top-color:#ccc}}@media(prefers-reduced-motion:reduce){.skip-link,.projects a,.post-link,.back-link,.footer a,.image-lightbox-close,.projects a:after,.post-link:after,.back-link:after,.footer a:after,.project-summary{transition:none}}
