:root{--bg: #0a0b0e;--surface: #15161a;--surface-soft: #15161a;--ink: #f1efe7;--ink-soft: #d6d3c7;--muted: #8a8a85;--line: #1f2027;--line-strong: #2d2f38;--accent: #ff7044;--accent-soft: rgba(255, 112, 68, .14);--accent-hover: #ff8a64;--ink-rgb: 241, 239, 231;--accent-rgb: 255, 112, 68;--shadow-card: 0 1px 2px rgba(0, 0, 0, .3), 0 4px 12px rgba(0, 0, 0, .25);--shadow-card-hover: 0 2px 4px rgba(0, 0, 0, .4), 0 12px 28px rgba(0, 0, 0, .35);--sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--display: "Fraunces", "Iowan Old Style", Georgia, serif;--mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--measure: 70ch;--wrap: 1080px;--wrap-text: 720px;--radius: 10px;--radius-lg: 16px;--space-1: .5rem;--space-2: 1rem;--space-3: 1.5rem;--space-4: 2rem;--space-5: 3rem;--space-6: 4.5rem;--space-7: 6rem;color-scheme:dark}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0}img,svg{max-width:100%;height:auto;display:block}button,input{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:3px}html{font-family:var(--sans);font-size:17px;line-height:1.55;color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;scroll-behavior:smooth;font-feature-settings:"cv11","ss01";transition:background-color .22s ease,color .22s ease}body{min-height:100dvh;display:flex;flex-direction:column}a{color:inherit;text-decoration:none}::selection{background:var(--accent);color:var(--bg)}.corner{position:fixed;top:1.25rem;z-index:50;font-family:var(--mono);font-size:.74rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.corner.left{left:1.5rem}.corner.right{right:1.5rem;display:inline-flex;align-items:center;gap:1rem}.corner a{color:var(--muted);transition:color .18s ease}.corner a:hover{color:var(--accent)}.corner a[aria-current=page]{color:var(--ink)}.particles{position:fixed;inset:0;width:100%;height:100%;z-index:0;pointer-events:none}.cardpage,.cardpage__inner{position:relative;z-index:1}.cardpage{flex:1;display:grid;grid-template-columns:minmax(1.5rem,1fr) minmax(0,64rem) minmax(1.5rem,1fr);align-items:center;min-height:100dvh;padding-block:5rem 3rem}.cardpage__inner{grid-column:2;display:grid;grid-template-columns:repeat(12,1fr);grid-template-rows:auto auto auto auto;gap:clamp(1rem,2.5vw,2rem) clamp(1rem,3vw,2.5rem);align-items:end}.idx{grid-column:1 / span 5;grid-row:1;font-family:var(--mono);font-size:.72rem;letter-spacing:.16em;color:var(--muted);text-transform:uppercase;display:flex;align-items:center;gap:.5rem}.idx:before{content:"";width:24px;height:1px;background:var(--accent)}.photo{grid-column:9 / span 4;grid-row:1 / span 2;align-self:start;justify-self:end;width:clamp(120px,16vw,180px);aspect-ratio:4 / 5;border-radius:4px;overflow:hidden;background:var(--surface-soft);border:1px solid var(--line);rotate:1.5deg;box-shadow:0 1px 2px #0f172a0a,0 4px 12px #0f172a0f;transition:rotate .4s ease,translate .4s ease,box-shadow .32s ease}.photo:hover{rotate:0deg;translate:0 -3px;box-shadow:0 2px 4px #0f172a0f,0 16px 32px #0f172a1f}.photo img{width:100%;height:100%;object-fit:cover;filter:contrast(1.04)}.name{grid-column:1 / span 9;grid-row:2;font-family:var(--display);font-weight:400;font-size:clamp(3.5rem,11vw,7.5rem);line-height:.92;letter-spacing:-.04em;margin:0;color:var(--ink);font-variation-settings:"opsz" 144,"SOFT" 100}.name em{font-style:italic;font-variation-settings:"opsz" 144,"SOFT" 100;color:var(--accent)}.tag{grid-column:1 / span 9;grid-row:3;font-size:clamp(1rem,1.4vw,1.125rem);line-height:1.55;color:var(--ink-soft);letter-spacing:-.005em;margin:0;text-wrap:pretty;max-width:48rem;display:flex;flex-direction:column;gap:.35rem}.tag span{display:block}.tag span:last-child{color:var(--muted)}.cluster{grid-column:1 / -1;grid-row:4;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:clamp(1.5rem,3vw,2.5rem);padding-top:clamp(1.5rem,3vw,2.5rem);border-top:1px solid var(--line)}.refs{display:flex;flex-direction:column;gap:.4rem}.refs a{display:inline-flex;align-items:baseline;gap:.85rem;font-size:1.05rem;font-weight:500;letter-spacing:-.01em;color:var(--ink);width:fit-content;position:relative;padding-right:1.4rem;transition:color .18s ease}.refs a .num{font-family:var(--mono);font-size:.74rem;font-weight:400;color:var(--muted);letter-spacing:.04em;width:2.5rem;flex:none}.refs a .arr{position:absolute;right:0;top:50%;transform:translateY(-50%) translate(-4px);opacity:0;color:var(--accent);transition:opacity .22s ease,transform .22s ease}.refs a:hover,.refs a:hover .num{color:var(--accent)}.refs a:hover .arr{opacity:1;transform:translateY(-50%) translate(0)}.refs a .meta{font-family:var(--mono);font-size:.72rem;color:var(--muted);letter-spacing:.04em}.socials{display:flex;flex-direction:column;gap:.45rem;font-family:var(--mono);font-size:.74rem;letter-spacing:.06em;text-align:right;color:var(--muted)}.socials a{color:var(--ink-soft);transition:color .18s ease;position:relative;padding-right:.9rem}.socials a:hover{color:var(--accent)}.socials a:after{content:"↗";position:absolute;right:0;top:0;font-family:var(--sans);opacity:.5;transition:opacity .18s ease,transform .18s ease}.socials a:hover:after{opacity:1;transform:translate(2px,-2px);color:var(--accent)}@media(max-width:720px){.cardpage{padding-block:4.5rem 2rem;align-items:start}.cardpage__inner{grid-template-rows:auto auto auto auto;gap:1.25rem}.photo{grid-column:1 / -1;grid-row:1;width:56px;height:70px;rotate:0deg;justify-self:start}.name{grid-column:1 / -1;grid-row:2;font-size:clamp(3rem,16vw,4.5rem)}.tag{grid-column:1 / -1;grid-row:3}.cluster{grid-column:1 / -1;grid-row:4;grid-template-columns:1fr;gap:1.5rem}.socials{text-align:left}}.inner{flex:1;width:100%;max-width:var(--wrap);margin:0 auto;padding:5rem clamp(1.5rem,4vw,2rem) 4rem}.inner-head{margin-bottom:var(--space-5);padding-bottom:var(--space-3);border-bottom:1px solid var(--line);display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:var(--space-3)}.inner-head h1{font-family:var(--display);font-weight:400;font-size:clamp(2.25rem,5vw,3.25rem);letter-spacing:-.025em;line-height:1;margin:0;font-variation-settings:"opsz" 144}.inner-head .meta{font-family:var(--mono);font-size:.74rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}.inner-motto{margin:.5rem 0 0;font-family:var(--display);font-style:italic;font-size:clamp(1.05rem,1.6vw,1.25rem);color:var(--muted);letter-spacing:-.005em;font-variation-settings:"opsz" 144,"SOFT" 100}.inner-motto em{font-style:italic;color:var(--ink-soft)}.inner-motto em:last-child{color:var(--accent)}.back-link{display:inline-flex;align-items:center;gap:.4rem;font-family:var(--mono);font-size:.74rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-bottom:1rem;transition:color .18s ease}.back-link:hover{color:var(--accent)}.work-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:var(--space-3)}.proj{display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden;color:inherit;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}.proj:hover{transform:translateY(-2px);box-shadow:var(--shadow-card-hover);border-color:var(--line-strong)}.proj-media{aspect-ratio:16 / 10;background:var(--surface-soft);overflow:hidden;border-bottom:1px solid var(--line)}.proj-media img{width:100%;height:100%;object-fit:cover;transition:transform .6s ease}.proj:hover .proj-media img{transform:scale(1.03)}.proj-body{padding:var(--space-3);display:flex;flex-direction:column;gap:.45rem}.proj-meta{display:flex;align-items:center;gap:.6rem;font-family:var(--mono);font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}.proj-meta .cat{color:var(--accent)}.proj-title{font-size:1.125rem;font-weight:600;letter-spacing:-.018em;line-height:1.25;color:var(--ink);margin:0}.pubs{display:flex;flex-direction:column;gap:0}.pub-row{display:grid;grid-template-columns:4rem minmax(0,1fr) auto;align-items:baseline;gap:1rem;padding-block:1.05rem;border-bottom:1px solid var(--line);color:inherit;position:relative;transition:padding-left .22s cubic-bezier(.2,.7,.2,1),color .18s ease}.pub-row:first-of-type{border-top:1px solid var(--line)}.pub-row:before{content:"";position:absolute;left:0;top:0;bottom:0;width:0;background:var(--accent);transition:width .22s cubic-bezier(.2,.7,.2,1)}.pub-row:hover{padding-left:.85rem}.pub-row:hover:before{width:2px}.pub-row:hover .pub-title{color:var(--accent)}.pub-year{font-family:var(--mono);font-size:.78rem;color:var(--muted);letter-spacing:.04em}.pub-title{font-size:1.05rem;font-weight:500;color:var(--ink);letter-spacing:-.012em;line-height:1.4;transition:color .18s ease}.pub-authors{display:block;font-size:.92rem;font-weight:400;color:var(--muted);margin-top:.3rem;line-height:1.5}.pub-authors strong{color:var(--ink-soft);font-weight:500}.pub-legend{margin:var(--space-3) 0 0;font-family:var(--mono);font-size:.74rem;letter-spacing:.04em;color:var(--muted)}.pub-legend .mark{color:var(--accent);margin-right:.25rem}.pub-venue{font-family:var(--mono);font-size:.74rem;letter-spacing:.06em;color:var(--accent);text-transform:uppercase;white-space:nowrap}.pub-venue.is-preprint{color:var(--muted)}@media(max-width:600px){.pub-row{grid-template-columns:4rem 1fr}.pub-venue{grid-column:2;padding-top:.2rem}}.post-meta{display:inline-flex;align-items:center;gap:.6rem;font-family:var(--mono);font-size:.74rem;letter-spacing:.06em;color:var(--muted);margin:0 0 var(--space-2);text-transform:uppercase}.post-meta .post-cat{color:var(--accent)}.post-title{font-family:var(--display);font-weight:400;font-size:clamp(2rem,4vw,2.75rem);letter-spacing:-.025em;line-height:1.05;margin:0 0 var(--space-2)}.post-subtitle{font-size:1.1875rem;color:var(--muted);margin:0}.post-banner{margin:var(--space-4) 0 var(--space-5)}.post-banner img{width:100%;border:1px solid var(--line);border-radius:var(--radius)}.post-foot{margin-top:var(--space-6);padding-top:var(--space-3);border-top:1px solid var(--line)}.prose{max-width:var(--measure);font-size:1.0625rem;line-height:1.75;color:var(--ink-soft);text-wrap:pretty}.prose>*+*{margin-top:1.1em}.prose p{margin:0}.prose p+p{margin-top:1em}.prose h2{font-family:var(--display);font-weight:400;font-size:1.5rem;margin-top:var(--space-5);letter-spacing:-.018em;color:var(--ink)}.prose h3{font-weight:600;font-size:1.075rem;margin-top:var(--space-4);color:var(--ink)}.prose a{color:var(--accent);border-bottom:1px solid color-mix(in srgb,var(--accent) 35%,transparent);transition:border-color .18s ease}.prose a:hover{border-bottom-color:var(--accent)}.prose strong{font-weight:600;color:var(--ink)}.prose em{font-style:italic}.prose blockquote{margin:1.6em 0;padding:.2em 0 .2em 1.1em;border-left:2px solid var(--accent);color:var(--muted);font-style:italic}.prose code{font-family:var(--mono);font-size:.9em;background:var(--surface-soft);border:1px solid var(--line);border-radius:4px;padding:.05em .35em}.prose ul,.prose ol{padding-left:1.3em;margin:0}.prose ul li::marker{color:var(--muted)}.prose ol li::marker{color:var(--muted);font-family:var(--mono)}.prose li+li{margin-top:.4em}.prose img{border-radius:6px;border:1px solid var(--line);margin:0 auto}.prose figure,.prose .gallery-box{margin:2em 0}.prose .gallery{display:grid;grid-template-columns:repeat(2,1fr);gap:.6rem}@media(max-width:540px){.prose .gallery{grid-template-columns:1fr}}.prose .gallery img{margin:0;width:100%;height:100%;object-fit:cover}.prose .gallery-box em,.prose img+em,.prose figure figcaption{display:block;text-align:center;font-family:var(--mono);font-size:.78rem;font-style:normal;color:var(--muted);margin-top:.7rem;letter-spacing:.01em}.reveal{opacity:0;transform:translateY(6px);transition:opacity .5s cubic-bezier(.2,.7,.2,1),transform .5s cubic-bezier(.2,.7,.2,1);transition-delay:var(--reveal-delay, 0ms)}.reveal.is-revealed{opacity:1;transform:translateY(0)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.reveal{opacity:1;transform:none}html{scroll-behavior:auto}}
