.contact-form{max-width:480px;font-family:var(--font-mono);flex-direction:column;gap:22px;margin-top:32px;display:flex}.contact-form .cf-field{flex-direction:column;gap:6px;display:flex}.contact-form label{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2);font-size:11px}.contact-form input,.contact-form textarea{font-family:var(--font-mono);color:var(--ink);background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--r-sm);outline:none;width:100%;padding:11px 12px;font-size:14px;transition:border-color .18s,box-shadow .18s}.contact-form textarea{resize:vertical;min-height:120px;line-height:1.5}.contact-form input::placeholder,.contact-form textarea::placeholder{color:var(--muted)}.contact-form input:focus,.contact-form textarea:focus{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.contact-form .cf-send{font-family:var(--font-mono);letter-spacing:.04em;color:var(--bg);background:var(--accent);border:1px solid var(--accent);border-radius:var(--r-sm);cursor:pointer;align-self:flex-start;padding:10px 20px;font-size:13px;transition:opacity .18s,background .18s}.contact-form .cf-send:hover:not(:disabled){opacity:.88}.contact-form .cf-send:disabled{color:var(--muted);background:var(--bg-elev);border-color:var(--line);cursor:default}.contact-form .cf-feedback{font-family:var(--font-mono);margin:0;font-size:13px}.contact-form .cf-feedback.is-ok{color:var(--accent)}.contact-form .cf-feedback.is-error{color:var(--accent-2)}.contact-form .cf-or{font-family:var(--font-mono);color:var(--muted);margin:0;font-size:13px}.contact-form .honeypot{width:1px;height:1px;position:absolute;left:-10000px;overflow:hidden}
.portrait{float:right;cursor:pointer;width:130px;height:130px;animation:fadeIn .8s var(--ease-out) .15s both;-webkit-tap-highlight-color:transparent;margin:6px 0 26px 24px;position:relative}.portrait:focus-visible{outline:1px solid var(--accent);outline-offset:4px}.portrait-frame{border:1px solid var(--line);background:var(--bg-elev);transition:transform .35s var(--ease-out);position:absolute;inset:0;overflow:hidden}.portrait.fun .portrait-frame{transform:rotate(-2deg)scale(1.02)}.portrait-img{object-fit:cover;width:100%;height:100%;transition:opacity .35s var(--ease-out);position:absolute;inset:0}.portrait-default{object-position:50% 18%;opacity:1;filter:saturate(.85)contrast(1.05)}.portrait-fun{object-position:50% 28%;opacity:0}.portrait.fun .portrait-default{opacity:0}.portrait.fun .portrait-fun{opacity:1}.portrait-scan{pointer-events:none;mix-blend-mode:multiply;background:repeating-linear-gradient(0deg,#0000000f 0 1px,#0000 1px 3px);position:absolute;inset:0}.portrait-corner{border-color:var(--accent);opacity:.9;border-style:solid;width:8px;height:8px;position:absolute}.portrait-corner.tl{border-width:1px 0 0 1px;top:0;left:0}.portrait-corner.tr{border-width:1px 1px 0 0;top:0;right:0}.portrait-corner.bl{border-width:0 0 1px 1px;bottom:0;left:0}.portrait-corner.br{border-width:0 1px 1px 0;bottom:0;right:0}.portrait-caption{font-family:var(--font-mono);color:var(--muted);letter-spacing:.1em;text-transform:uppercase;transition:color .2s var(--ease-out);justify-content:space-between;font-size:10px;display:flex;position:absolute;bottom:-18px;left:0;right:0}.portrait.fun .portrait-caption{color:var(--accent)}.portrait-hint{animation:breathe 2s var(--ease-out) infinite}.portrait-hint.seen{opacity:.4;animation:none}@media (max-width:480px){.portrait{width:110px;height:110px;margin-left:16px}}@media (max-width:600px){.portrait{width:96px;height:96px;margin:4px 0 22px 16px}.hero{padding-bottom:56px}.hero-meta{margin-bottom:14px}.hero-name{font-size:26px}}.hero{padding-bottom:80px;scroll-margin-top:80px}.hero-meta{color:var(--muted);flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:18px;font-size:13px;display:flex}.hero-prompt{color:var(--accent)}.dotsep{color:var(--muted-2)}.clock{font-variant-numeric:tabular-nums}.hero-name{font-family:var(--font-mono);color:var(--ink);letter-spacing:-.02em;align-items:baseline;margin:0 0 14px;font-size:32px;font-weight:500;line-height:1.2;display:inline-flex}.hero-name .dot{color:var(--accent);display:inline}.hero-name .dot.show:before{content:"."}.caret-blink{color:var(--accent);margin-left:2px;animation:1.1s steps(2,end) infinite blink;display:inline-block}.caret-blink.done{color:var(--muted-2)}.hero-bio{color:var(--ink-2);margin:0;font-size:15px}.hero-aside{color:var(--muted);margin:14px 0 0;font-size:15px}.hero-socials{flex-wrap:wrap;gap:18px;margin-top:28px;font-size:13px;display:flex}.ulink{color:var(--muted);display:inline-block;position:relative}.ulink:after{content:"";transform-origin:100%;height:1px;transition:transform .45s var(--ease-out);background:currentColor;position:absolute;bottom:-2px;left:0;right:0;transform:scaleX(0)}.ulink:hover:after{transform-origin:0;transform:scaleX(1)}.project-inline{color:var(--ink)}.contact-mail{color:var(--accent)}.section-h{font-family:var(--font-mono);color:var(--ink);align-items:center;gap:8px;margin:0 0 18px;font-size:14px;font-weight:500;display:flex}.section-h .slashes{color:var(--muted)}.now{padding-bottom:80px}.now-live{color:var(--accent);align-items:center;gap:6px;margin-left:6px;font-size:11px;display:inline-flex}.now-pulse{background:var(--accent);border-radius:999px;width:6px;height:6px;animation:1.8s infinite pulse}.now-grid{grid-template-columns:150px 1fr;gap:10px 16px;margin:0;display:grid}.now-grid dt{color:var(--muted);font-size:14px}.now-grid dd{color:var(--ink);cursor:default;margin:0;font-size:14px}.projects{padding-bottom:80px;scroll-margin-top:80px}.proj-list{margin:0;padding:0;list-style:none}.proj-row{border-bottom:1px solid var(--line-soft);transition:padding-left .3s var(--ease-out);padding:12px 0;display:block;position:relative}.proj-row:hover{padding-left:12px}.proj-arrow{color:var(--accent);opacity:0;transition:all .3s var(--ease-out);font-size:14px;position:absolute;top:13px;left:0;transform:translate(-8px)}.proj-row:hover .proj-arrow{opacity:1;transform:translate(0)}.proj-head{grid-template-columns:1fr auto;align-items:baseline;gap:24px;display:grid}.proj-name{color:var(--ink);font-size:15px}.proj-tag{color:var(--muted);margin-left:12px;font-size:14px}.proj-year{color:var(--muted-2);white-space:nowrap;align-items:baseline;gap:8px;font-size:13px;display:inline-flex}.proj-archived{color:var(--muted);border:1px solid var(--line);letter-spacing:.05em;padding:1px 6px;font-size:11px}.proj-row.archived{cursor:default}.proj-row.archived:hover{padding-left:0}.proj-row.archived .proj-arrow{display:none}.proj-row.archived .proj-name{color:var(--muted)}.proj-row.archived .proj-tag{color:var(--muted-2)}.proj-stack{opacity:0;max-height:0;transition:max-height .4s var(--ease-out), opacity .25s var(--ease-out), margin-top .3s var(--ease-out);flex-wrap:wrap;gap:6px;margin-top:0;display:flex;overflow:hidden}.proj-row:hover .proj-stack{opacity:1;max-height:60px;margin-top:8px}.proj-stack .chip{color:var(--muted);border:1px solid var(--line);opacity:0;transition:opacity .3s var(--ease-out), transform .3s var(--ease-out);padding:2px 7px;font-size:11px;transform:translateY(4px)}.proj-row:hover .proj-stack .chip{opacity:1;transform:translateY(0)}.writing{padding-bottom:80px;scroll-margin-top:80px}.post-list{margin:0;padding:0;list-style:none}.post-row{border-bottom:1px solid var(--line-soft);transition:padding-left .3s var(--ease-out);grid-template-columns:80px 1fr;align-items:baseline;gap:16px;padding:12px 0;display:grid;position:relative}.post-row:hover{padding-left:12px}.post-arrow{color:var(--accent);opacity:0;transition:all .3s var(--ease-out);font-size:14px;position:absolute;left:0;transform:translate(-8px)}.post-row:hover .post-arrow{opacity:1;transform:translate(0)}.post-date{color:var(--muted-2);white-space:nowrap;font-size:13px}.post-title{color:var(--ink);font-size:15px}.contact{padding-bottom:80px;scroll-margin-top:80px}.contact-text{color:var(--ink-2);margin:0;font-size:15px}.reveal{opacity:0;transform:translateY(var(--ry,12px));filter:blur(var(--rb,0px));transition:opacity .7s var(--ease-out), transform .7s var(--ease-out), filter .7s var(--ease-out);will-change:opacity, transform, filter}.reveal.shown{opacity:1;filter:blur();transform:translateY(0)}
