:root{--maxw: 880px;--font-title: "EB Garamond", Georgia, "Times New Roman", serif;--font-body: "EB Garamond", Georgia, "Times New Roman", serif;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--bg: #f7f4ef;--surface: #ffffff;--card: #ffffff;--fg: #1f2933;--muted: #6b7280;--accent: #3e6d8e;--accent-warm: #e0883c;--accent-2: #b49ab0;--accent-soft: #eceff2;--border: #e4ded4}@media (prefers-color-scheme: dark){:root{--bg: #14181f;--surface: #1b212b;--card: #1b212b;--fg: #ecebe6;--muted: #9aa0aa;--accent: #6fa0c0;--accent-warm: #e8a05a;--accent-2: #c2a6be;--accent-soft: #232c38;--border: #2a313c}}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--font-body);font-size:19px;line-height:1.65;-webkit-font-smoothing:antialiased;font-variant-numeric:oldstyle-nums proportional-nums;font-variant-ligatures:common-ligatures contextual;text-wrap:pretty}.prose h1,.prose h2,.prose h3,.about h1,.post-list__title,.brand{text-wrap:balance}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}.prose code,.prose pre,.sidebar__meta{font-variant-numeric:lining-nums;font-variant-ligatures:none}::selection{background:color-mix(in srgb,var(--accent) 22%,transparent)}:focus-visible{outline:2px solid color-mix(in srgb,var(--accent) 70%,transparent);outline-offset:3px;border-radius:3px}.content a{text-decoration:none;background-image:linear-gradient(var(--accent),var(--accent));background-repeat:no-repeat;background-position:0 100%;background-size:0% 1.5px;transition:background-size .3s cubic-bezier(.4,.8,.3,1)}.content a:hover{text-decoration:none;background-size:100% 1.5px}a[href^=http]:after{content:"↗";margin-left:.12em;font-size:.78em;vertical-align:.08em;color:var(--muted);font-variant-numeric:normal;font-variant-ligatures:none}:root{--rail: 256px}.layout{position:relative;z-index:1}.sidebar{position:fixed;top:0;left:0;width:var(--rail);height:100vh;z-index:2}.sidebar__inner{display:flex;flex-direction:column;height:100%;padding:48px 32px}.brand{font-family:var(--font-title);font-size:1.6rem;font-weight:600;line-height:1.15;color:var(--fg)}.brand:hover{text-decoration:none}.brand__tagline{margin:12px 0 0;color:var(--muted);font-size:.92rem;line-height:1.55}.nav{display:flex;flex-direction:column;align-items:flex-start;gap:3px;margin:auto 0}.nav__link{position:relative;color:var(--muted);font-size:1.08rem;padding:5px 0;transition:color .3s ease}.nav__link:before{content:"";position:absolute;left:0;bottom:0;width:18px;height:1.5px;background:currentColor;opacity:.3;transform:scaleX(.4);transform-origin:left center;transition:transform .4s cubic-bezier(.4,.8,.3,1),opacity .3s ease,background-color .3s ease}.nav__link:hover{text-decoration:none;color:var(--fg)}.nav__link:hover:before{opacity:.6;transform:scaleX(.66)}.nav__link.is-active{color:var(--accent)}.nav__link.is-active:before{background:var(--accent);opacity:1;transform:scaleX(1.3)}.sidebar__foot{display:flex;flex-direction:column;gap:14px}.sidebar__footrow{display:flex;align-items:center;gap:14px}.sidebar__meta{color:var(--muted);font-size:.82rem}.theme-controls{display:flex;align-items:center;gap:6px}.theme-select select{font:inherit;font-size:.85rem;cursor:pointer;color:var(--muted);background:transparent;border:1px solid var(--border);border-radius:8px;padding:5px 8px}.theme-select select:hover{color:var(--fg)}.theme-btn{font:inherit;line-height:1;cursor:pointer;color:var(--muted);background:transparent;border:1px solid var(--border);border-radius:8px;padding:5px 9px;font-size:1rem}.theme-btn:hover{color:var(--fg);background:var(--accent-soft)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.content{margin-left:var(--rail);min-height:100vh}.content__inner{max-width:var(--maxw);margin:0 auto;padding:64px 40px 96px}.fade-in{animation:fade .22s ease}@keyframes fade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.site-foot{display:none}@media (max-width: 880px){.sidebar{position:sticky;top:0;z-index:5;width:auto;height:auto;transition:background .3s ease,box-shadow .3s ease}.sidebar.is-scrolled{background:color-mix(in srgb,var(--bg) 82%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);box-shadow:0 1px 0 var(--border)}.sidebar__inner{height:auto;display:grid;grid-template-columns:auto 1fr auto;grid-template-areas:"brand statement toggle" "nav nav nav";align-items:baseline;column-gap:14px;padding:14px 24px}.brand{grid-area:brand;font-size:1.35rem}.brand__statement{grid-area:statement;min-width:0}.brand__statement .brand__tagline{margin:0}.sidebar__foot{grid-area:toggle;justify-self:end;align-self:start;margin:0}.sidebar__meta{display:none}.nav{grid-area:nav;margin:12px 0 0;flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:10px 20px}.nav__link{padding:4px 0;font-size:1rem;white-space:nowrap}.site-foot{display:block;text-align:center;color:var(--muted);font-size:.82rem;padding:22px 24px 36px;border-top:1px solid var(--border)}.content{margin-left:0}.content__inner{padding:28px 24px 80px}}.prose h1,.about h1{font-family:var(--font-title);font-size:2rem;margin:0 0 .5em}.prose h2{font-family:var(--font-title);font-size:1.35rem;letter-spacing:.01em;margin:1.7em 0 .7em;padding-bottom:.34em;position:relative}.prose h2:after{content:"";position:absolute;left:0;bottom:0;width:2.2em;height:2px;border-radius:2px;background:var(--accent);opacity:.85}.prose h3{margin:0}.prose code{background:var(--accent-soft);padding:.1em .35em;border-radius:4px;font-family:var(--font-mono);font-size:.82em}.prose blockquote{border-left:3px solid var(--border);margin:1em 0;padding:.2em 0 .2em 1em;color:var(--muted)}.back-link{display:inline-block;margin-bottom:1.2em;font-size:.9rem}.prose pre{background:var(--card);border:1px solid var(--border);border-radius:8px;padding:14px 16px;overflow-x:auto;font-size:.88rem;line-height:1.5}.prose pre code{background:none;padding:0}.prose .hljs{color:var(--fg)}.hljs-comment,.hljs-quote{color:var(--muted);font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-built_in,.hljs-tag,.hljs-name,.hljs-section,.hljs-doctag{color:var(--accent)}.hljs-title,.hljs-title.function_,.hljs-title.class_,.hljs-type,.hljs-attr,.hljs-attribute,.hljs-selector-class,.hljs-selector-id{color:color-mix(in srgb,var(--accent) 78%,var(--fg))}.hljs-string,.hljs-regexp,.hljs-number,.hljs-literal,.hljs-symbol,.hljs-bullet,.hljs-meta,.hljs-template-variable,.hljs-addition{color:var(--accent-warm)}.hljs-deletion{color:var(--muted)}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.prose table{border-collapse:collapse;width:100%;margin:1em 0;font-size:.95rem}.prose th,.prose td{border:1px solid var(--border);padding:6px 12px;text-align:left}.prose th{background:var(--accent-soft)}.prose img{max-width:100%;border-radius:8px}.prose hr{border:none;border-top:1px solid var(--border);margin:2em 0}.callout{border-left:3px solid var(--accent);background:var(--accent-soft);border-radius:0 8px 8px 0;padding:12px 16px;margin:1.2em 0}.callout>:first-child{margin-top:0}.callout>:last-child{margin-bottom:0}.pdf{margin:1.4em 0}.pdf__frame{display:block;width:100%;border:1px solid var(--border);border-radius:8px;background:var(--card)}.pdf__cap{margin-top:6px;font-size:.85rem;color:var(--muted)}.about__head{display:flex;gap:24px;align-items:center;margin-bottom:8px}.about__photo{width:110px;height:110px;border-radius:12px;object-fit:cover;flex-shrink:0;border:1px solid var(--border)}.about__links{display:flex;flex-wrap:wrap;gap:14px;margin:0}.news{list-style:none;padding:0}.news li{display:flex;gap:12px;padding:4px 0}.news__date{color:var(--muted);white-space:nowrap;min-width:76px;font-variant-numeric:tabular-nums lining-nums}.pub-list{list-style:none;padding:0;margin:0}.pub{padding:12px 0;border-bottom:1px solid var(--border)}.pub--highlight{border-left:3px solid var(--accent);padding-left:12px}.pub__title{font-weight:600}.pub__authors,.pub__venue{color:var(--muted);font-size:.95rem}.pub__links{display:flex;gap:12px;margin-top:4px;font-size:.9rem}.project-list{list-style:none;padding:0;margin:0}.project{padding:16px 0;border-bottom:1px solid var(--border)}.project__head{display:flex;justify-content:space-between;align-items:baseline;gap:12px}.project__name{font-weight:600;color:var(--fg)}.project__name:hover{color:var(--accent)}.project-detail__summary{margin-top:0;font-size:1.1rem;color:var(--muted)}.project__year{color:var(--muted);font-size:.9rem;white-space:nowrap}.project__desc{margin:5px 0 0;color:var(--muted)}.project__links{display:flex;gap:12px;margin-top:6px;font-size:.9rem}.tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.tag{background:var(--accent-soft);color:var(--muted);font-size:.75rem;padding:2px 8px;border-radius:999px}.card{border:1px solid var(--border);background:var(--card);border-radius:10px;padding:16px}.card__head{display:flex;justify-content:space-between;align-items:baseline;gap:8px}.card__year{color:var(--muted);font-size:.85rem}.card__links{display:flex;gap:12px;font-size:.9rem;margin-top:8px}.post-list{list-style:none;padding:0;margin:0}.post-list__item{padding:16px 0;border-bottom:1px solid var(--border)}.post-list__title{font-family:var(--font-title);font-size:1.25rem;font-weight:600}.post-list__date{color:var(--muted);font-size:.85rem;margin:2px 0 6px}.post-list__summary{margin:0;color:var(--muted)}.post-meta{color:var(--muted);font-size:.9rem;margin-top:-.4em}.demo-counter{font:inherit;cursor:pointer;border:1px solid var(--border);background:var(--card);color:var(--fg);padding:8px 14px;border-radius:8px}.notfound{text-align:center;padding-top:40px}@media (max-width: 560px){.about__head{flex-direction:column;text-align:center;align-items:center}.about__links{justify-content:center}}.decor-field{position:fixed;top:0;right:0;bottom:0;left:0;z-index:0;pointer-events:none;opacity:.6;filter:blur(16px);background:radial-gradient(52% 46% at 6% 7%,color-mix(in srgb,var(--accent) 46%,transparent),transparent 58%),radial-gradient(36% 42% at 96% 92%,color-mix(in srgb,var(--accent-2) 12%,transparent),transparent 64%)}.decor-wash{position:fixed;inset:0 0 auto 0;height:70vh;pointer-events:none;z-index:0;opacity:.5;filter:blur(30px) saturate(115%);background:radial-gradient(55% 60% at 18% -5%,color-mix(in srgb,var(--accent) 38%,transparent),transparent 70%),radial-gradient(45% 55% at 82% 0%,color-mix(in srgb,var(--accent-warm) 30%,transparent),transparent 70%),radial-gradient(72% 60% at 50% -10%,color-mix(in srgb,var(--accent-2) 34%,transparent),transparent 75%);-webkit-mask-image:linear-gradient(to bottom,#000 0%,transparent 100%);mask-image:linear-gradient(to bottom,#000 0%,transparent 100%)}.decor-grain{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9000;pointer-events:none;opacity:.05;mix-blend-mode:soft-light;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}.decor-cards-soft .card{border-radius:16px;box-shadow:0 6px 22px -14px color-mix(in srgb,var(--accent) 60%,transparent);transition:transform .25s ease,box-shadow .25s ease}.decor-cards-soft .card:hover{transform:translateY(-3px);box-shadow:0 16px 34px -16px color-mix(in srgb,var(--accent) 65%,transparent)}.decor-cards-soft .about__photo{border-radius:18px;box-shadow:0 10px 30px -16px color-mix(in srgb,var(--accent) 60%,transparent)}.decor-cards-soft .callout{border-radius:12px}.decor-cards-flat .card{box-shadow:none}.decor-cards-framed .card{border-radius:2px;border-top:3px solid var(--accent);box-shadow:none}.decor-glow a{transition:text-shadow .2s ease}.decor-glow .content a:hover,.decor-glow .brand:hover{text-shadow:0 0 14px color-mix(in srgb,var(--accent) 45%,transparent)}.decor-glow .nav__link.is-active{text-shadow:0 0 12px color-mix(in srgb,var(--accent) 40%,transparent)}.decor-rules .prose h1{padding-bottom:.25em;border-bottom:2px solid var(--fg)}.decor-rules .prose h2,.decor-rules .pub-year h2{text-transform:uppercase;letter-spacing:.08em;font-size:1.05rem}.decor-rules .post-meta,.decor-rules .post-list__date,.decor-rules .pub__venue{font-family:var(--font-mono);font-size:.78rem;letter-spacing:.04em;text-transform:uppercase}@media (prefers-reduced-motion: reduce){.fade-in{animation:none}.decor-cards-soft .card,.content a,.sidebar,.brand__statement,.brand__tagline,.sidebar__foot{transition:none}}
