:root,:root[data-theme=light]{color-scheme:light;--page-bg:oklch(97% .003 240);--surface:oklch(100% 0 0);--card-bg:oklch(100% 0 0);--chip-bg:oklch(95% .005 100);--avatar-bg:oklch(100% 0 0);--text:oklch(13% .02 100);--muted:oklch(42% .02 100);--faint:oklch(58% .015 100);--line:oklch(25% .015 100);--line-strong:oklch(13% .02 100);--page-border:oklch(25% .015 100);--accent:oklch(60% .22 25);--accent-dark:oklch(50% .2 25);--accent-soft:oklch(95% .04 25);--sand:oklch(62% .14 65);--shadow-base:none;--shadow-raised:none;--shadow-elevated:none;--shadow-avatar:none;--shadow-hover:none;--mono:"JetBrains Mono", ui-monospace, "IBM Plex Mono", Menlo, monospace;--sans:"JetBrains Mono", ui-monospace, Menlo, monospace;--serif:Georgia, "Times New Roman", "Iowan Old Style", serif;--text-xs:.75rem;--text-sm:.85rem;--text-base:.95rem;--text-md:1.125rem;--text-lg:1.3rem;--text-xl:1.6rem;--text-2xl:2.4rem;--text-3xl:3.2rem;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:20px;--sp-6:24px;--sp-7:32px;--sp-8:40px;--sp-9:48px;--sp-10:64px;--ease-out-expo:cubic-bezier(.16, 1, .3, 1);--duration-fast:80ms;--duration-normal:.14s}:root[data-theme=dark]{color-scheme:dark;--page-bg:oklch(12% .01 240);--surface:oklch(15% .01 240);--card-bg:oklch(18% .012 240);--chip-bg:oklch(22% .012 240);--avatar-bg:oklch(15% .01 240);--text:oklch(95% .005 100);--muted:oklch(65% .01 100);--faint:oklch(50% .01 100);--line:oklch(30% .01 240);--line-strong:oklch(45% .012 240);--page-border:oklch(30% .01 240);--accent:oklch(65% .22 25);--accent-dark:oklch(72% .2 25);--accent-soft:oklch(20% .03 25);--sand:oklch(72% .14 65)}@media (prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--page-bg:oklch(12% .01 240);--surface:oklch(15% .01 240);--card-bg:oklch(18% .012 240);--chip-bg:oklch(22% .012 240);--avatar-bg:oklch(15% .01 240);--text:oklch(95% .005 100);--muted:oklch(65% .01 100);--faint:oklch(50% .01 100);--line:oklch(30% .01 240);--line-strong:oklch(45% .012 240);--page-border:oklch(30% .01 240);--accent:oklch(65% .22 25);--accent-dark:oklch(72% .2 25);--accent-soft:oklch(20% .03 25);--sand:oklch(72% .14 65)}}*,:before,:after{box-sizing:border-box}h1,h2,h3,h4,h5,h6{text-wrap:balance;overflow-wrap:break-word}p,.pub-row .periodical,.pub-row .author,.writing-list-body p{text-wrap:pretty;overflow-wrap:break-word}.mini-card,.writing-card,.project-card,.payment-card,.publication-card,.highlight-project-link,.work-entry,.writing-list-entry,.pub-row{overflow-wrap:break-word;min-width:0}html{scroll-behavior:smooth}body{min-height:100vh;color:var(--text);font-family:var(--mono);background:var(--page-bg);margin:0;font-size:.95rem;line-height:1.7}.skip-link{z-index:10;color:var(--surface);background:var(--text);border:1.5px solid var(--line-strong);font-family:var(--mono);font-size:var(--text-xs);transition:transform var(--duration-fast) var(--ease-out-expo);padding:8px 10px;text-decoration:none;position:fixed;top:12px;left:12px;transform:translateY(-180%)}.skip-link:focus{transform:translateY(0)}.page-shell{background:var(--surface);border:1.5px solid var(--page-border);width:min(1320px,100% - 48px);min-height:calc(100vh - 48px);margin:24px auto;position:relative;overflow:hidden}.wrapper{grid-template-columns:300px minmax(0,1fr);min-height:calc(100vh - 48px);display:grid;position:relative}header,section,footer{float:none!important;width:auto!important;max-width:none!important;position:static!important}.profile-panel{min-height:100%;padding:var(--sp-9) var(--sp-10) var(--sp-8);border-right:1.5px solid var(--line);color:var(--muted);background:var(--surface);flex-direction:column;display:flex;position:relative}.profile-avatar{width:110px;height:110px;margin:0 auto var(--sp-7);border:2px solid var(--line-strong);background:var(--avatar-bg);border-radius:50%;display:block;overflow:hidden}.profile-avatar img{object-fit:cover;border-radius:50%;width:100%;height:100%;display:block}header h1{color:var(--text);font-family:var(--serif);letter-spacing:-.03em;margin:0 0 4px;font-size:clamp(2rem,3.5vw,2.8rem);font-weight:700;line-height:1.05}.position-label{color:var(--accent);font-family:var(--mono);font-size:var(--text-xs);letter-spacing:.12em;text-transform:uppercase;font-weight:700;display:block}.profile-blurb{max-width:220px;margin:var(--sp-6) 0;color:var(--muted);font-family:var(--mono);font-size:var(--text-sm);line-height:1.7}.profile-blurb:after{content:"";width:32px;margin-top:var(--sp-5);border-bottom:2px solid var(--accent);display:block}.social-icons{gap:10px;display:grid}.profile-meta{margin:4px 0 var(--sp-6);gap:10px;display:grid}.profile-meta span,.profile-meta a{color:var(--muted);font-size:var(--text-sm);white-space:nowrap;transition:color var(--duration-fast) var(--ease-out-expo);text-underline-offset:2px;align-items:center;gap:8px;text-decoration:underline #0000;display:flex}.profile-meta a:hover{color:var(--text);text-decoration-color:var(--accent)}.profile-meta i,.social-icons i{text-align:center;width:18px;color:var(--text);font-size:.9rem}.profile-meta a:hover i,.social-icons a:hover i{color:var(--accent)}.social-icons a{color:var(--muted);font-size:var(--text-sm);transition:color var(--duration-fast) var(--ease-out-expo);text-underline-offset:2px;align-items:center;gap:8px;text-decoration:underline #0000;display:flex}.social-icons a:hover{color:var(--text);text-decoration-color:var(--accent)}.social-icons i{text-align:center;width:18px;color:var(--text);font-size:.9rem}.social-icons a:hover i{color:var(--accent)}.line-note{color:var(--faint);margin-top:auto}.line-note svg{width:48px;height:72px;margin-bottom:8px;display:block}.line-note path{fill:none;stroke:var(--accent);stroke-width:1.5px;stroke-linecap:round;stroke-dasharray:180;stroke-dashoffset:180px;animation:3.2s forwards drawLine}.line-note span{color:var(--muted);font-size:var(--text-xs);display:block}.line-note small{color:var(--faint);font-size:var(--text-xs)}.content-panel{min-width:0;padding:var(--sp-8) var(--sp-9) var(--sp-7)}.top-nav{padding-bottom:var(--sp-4);border-bottom:1.5px solid var(--line);justify-content:space-between;align-items:center;margin-bottom:36px;display:flex}.top-nav div{gap:clamp(16px,2.5vw,32px);display:flex}.top-nav a:not(.nav-btn){color:var(--muted);font-family:var(--mono);font-size:var(--text-xs);letter-spacing:.06em;text-transform:uppercase;padding:var(--sp-2) 0;transition:color var(--duration-fast), border-color var(--duration-fast);border-bottom:1.5px solid #0000;font-weight:500;text-decoration:none}.top-nav a:not(.nav-btn):hover{color:var(--text);border-bottom-color:var(--text)}.top-nav a:not(.nav-btn).active{color:var(--text);border-bottom-color:var(--accent);font-weight:700}.nav-actions{align-items:center;gap:8px;display:inline-flex}.nav-btn{height:30px;color:var(--muted);border:1.5px solid var(--line-strong);font-family:var(--mono);font-size:var(--text-xs);letter-spacing:.08em;text-transform:uppercase;cursor:pointer;box-sizing:border-box;vertical-align:top;transition:color var(--duration-fast), border-color var(--duration-fast);background:0 0;align-items:center;gap:6px;padding:0 10px;line-height:1;text-decoration:none;display:inline-flex}.nav-btn:hover{color:var(--text);border-color:var(--text)}.intro-hero{gap:var(--sp-8);padding-bottom:var(--sp-7);margin-bottom:var(--sp-6);border-bottom:1.5px solid var(--line);grid-template-columns:auto minmax(400px,1fr);align-items:center;display:grid}.hero-copy{animation:riseIn .42s var(--ease-out-expo) both}.hero-title{max-width:420px;color:var(--text);font-family:var(--serif);letter-spacing:-.03em;margin:0;font-size:clamp(2rem,3.5vw,3rem);font-weight:700;line-height:1.08}.title-rule{width:36px;margin:var(--sp-5) 0 var(--sp-5);border-bottom:2.5px solid var(--accent);display:block}.line-garden{min-height:200px;animation:riseIn .48s 40ms var(--ease-out-expo) both;overflow:visible}.line-garden svg{width:100%;height:auto;display:block}.line-drawing{fill:none;stroke:var(--text);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round;opacity:.7}.line-drawing.accent{stroke:var(--accent)}.line-drawing.guide{stroke:var(--line);stroke-width:1px;stroke-dasharray:3 9;opacity:.4}.line-drawing path{stroke-dasharray:760;stroke-dashoffset:760px;animation:3s cubic-bezier(.42,0,.12,1) forwards drawLine}.feature-list{margin-top:0}.feature-row{gap:var(--sp-4);min-height:68px;padding:var(--sp-4) 0;border-bottom:1.5px solid var(--line);grid-template-columns:40px 120px minmax(0,1fr) 120px;align-items:center;display:grid}.feature-icon{width:40px;height:40px;color:var(--accent);border:1.5px solid var(--line-strong);background:0 0;place-items:center;font-size:1rem;display:grid}.feature-row h2{color:var(--text);font-family:var(--serif);font-size:var(--text-xl);letter-spacing:-.02em;margin:0;font-weight:700;line-height:1.15}.feature-row p{max-width:460px;color:var(--text);font-size:var(--text-base);margin:0;line-height:1.7}.row-action{justify-self:end;align-items:center;gap:var(--sp-2);padding:var(--sp-2) 0;color:var(--accent);font-family:var(--mono);font-size:var(--text-xs);letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;text-underline-offset:2px;transition:gap var(--duration-normal) var(--ease-out-expo);text-decoration:underline;display:inline-flex}.row-action:hover{gap:calc(var(--sp-2) + 4px);color:var(--text)}.compact-row{grid-template-columns:40px 120px minmax(0,1fr) 180px}.interest-list{flex-wrap:wrap;gap:6px;margin:0;display:flex}.interest-list span{min-height:24px;color:var(--text);border:1.5px solid var(--line-strong);font-family:var(--mono);font-size:var(--text-xs);transition:border-color var(--duration-fast);background:0 0;align-items:center;padding:0 10px;display:inline-flex}.interest-list span:hover{border-color:var(--accent);color:var(--accent)}.work-row{grid-template-columns:40px 100px minmax(0,1fr);align-items:stretch}.mini-card-grid{gap:var(--sp-3);grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.mini-card{min-height:120px;color:var(--muted);border:1.5px solid var(--line);background:var(--card-bg);transition:border-color var(--duration-fast);flex-direction:column;padding:16px 36px 14px 16px;text-decoration:none;display:flex;position:relative}.mini-card:hover{border-color:var(--accent)}.mini-card strong{color:var(--text);font-family:var(--serif);font-size:var(--text-base);font-weight:700;line-height:1.35}.mini-card span{color:var(--muted);font-size:var(--text-sm);flex:1;margin-top:4px;line-height:1.55}.mini-card small{color:var(--accent);font-family:var(--mono);font-size:var(--text-xs);align-self:end;margin-top:8px}.mini-card i{color:var(--accent);opacity:0;transition:opacity var(--duration-fast);position:absolute;bottom:14px;right:14px}.mini-card:hover i{opacity:.6}.highlight-row{grid-template-columns:40px 120px minmax(0,1fr);align-items:start}.highlight-card{gap:8px;display:grid}.highlight-project-link{border:1.5px solid var(--line);background:var(--card-bg);transition:border-color var(--duration-fast);gap:6px;padding:14px 16px;text-decoration:none;display:grid}.highlight-project-link:hover{border-color:var(--accent)}.highlight-project-link strong{color:var(--text);font-family:var(--serif);font-size:var(--text-base);font-weight:700;line-height:1.35}.highlight-project-link span{color:var(--muted);font-size:var(--text-sm);line-height:1.55}.highlight-meta{align-items:center;gap:10px;margin-top:2px;display:flex}.project-language{color:var(--faint);font-family:var(--mono);font-size:var(--text-xs);align-items:center;gap:5px;display:inline-flex}.lang-dot{background:var(--accent);border-radius:50%;width:6px;height:6px}.lang-python{background-color:#397dae}.lang-typescript{background-color:#3178c6}.lang-html{background-color:#d77756}.lang-jupyter{background-color:#d99750}.lang-css{background-color:#7c75a3}.lang-javascript{background-color:#c7a845}.lang-agent{background-color:#8b5cf6}.lang-workflow{background-color:#64748b}.project-stars{color:var(--faint);font-family:var(--mono);font-size:var(--text-xs);align-items:center;gap:4px;display:inline-flex}.project-stars svg{fill:currentColor;width:12px;height:12px}.writings-row{grid-template-columns:40px 120px minmax(0,1fr);align-items:start}.writing-cards{gap:var(--sp-2);display:grid}.writing-card{border:1.5px solid var(--line);background:var(--card-bg);transition:border-color var(--duration-fast);gap:5px;padding:12px 14px;text-decoration:none;display:grid}.writing-card:hover{border-color:var(--accent)}.writing-card-title{color:var(--text);font-family:var(--serif);font-size:var(--text-base);font-weight:700;line-height:1.35}.writing-card-teaser{color:var(--muted);font-size:var(--text-sm);line-height:1.55}.writing-card-meta{color:var(--faint);font-family:var(--mono);font-size:var(--text-xs);align-items:center;gap:8px;display:flex}.writing-card-source{min-height:16px;color:var(--accent);border:1px solid var(--line);font-family:var(--mono);font-size:var(--text-xs);align-items:center;padding:0 6px;display:inline-flex}.writing-cta{color:var(--accent);font-family:var(--mono);font-size:var(--text-xs);letter-spacing:.06em;text-transform:uppercase;text-underline-offset:2px;transition:gap var(--duration-normal);justify-self:end;align-items:center;gap:6px;text-decoration:underline;display:inline-flex}.writing-cta:hover{color:var(--text);gap:10px}.page-footer{padding-top:var(--sp-5);border-top:1.5px solid var(--line);margin-top:36px}.page-footer small{color:var(--faint);font-family:var(--mono);font-size:var(--text-xs)}.subpage-content{max-width:680px}.subpage-title{color:var(--text);font-family:var(--serif);letter-spacing:-.03em;margin:0 0 4px;font-size:clamp(2rem,3.5vw,2.8rem);font-weight:700;line-height:1.1}.subpage-lead{color:var(--muted);font-family:var(--mono);font-size:var(--text-base);margin:0 0 32px;line-height:1.65}.section-subtitle{margin:var(--sp-7) 0 var(--sp-3);color:var(--text);font-family:var(--serif);font-size:var(--text-xl);letter-spacing:-.02em;font-weight:700;line-height:1.2}.work-entries{gap:0;display:grid}.work-entry{padding:var(--sp-6) 0;border-bottom:1.5px solid var(--line)}.work-entry:first-child{padding-top:0}.work-entry:last-child{border-bottom:none}.work-entry-header{flex-wrap:wrap;align-items:baseline;gap:10px;margin-bottom:10px;display:flex}.work-entry-header h2{color:var(--text);font-family:var(--serif);font-size:var(--text-xl);margin:0;font-weight:700;line-height:1.2}.work-entry-role{color:var(--accent);font-family:var(--mono);font-size:var(--text-xs);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap}.work-entry p{max-width:580px;color:var(--text);font-size:var(--text-base);margin:0 0 12px;line-height:1.7}.work-entry-tags{flex-wrap:wrap;gap:6px;display:flex}.work-entry-tags span{min-height:20px;color:var(--text);border:1px solid var(--line);font-family:var(--mono);font-size:var(--text-xs);background:0 0;align-items:center;padding:0 8px;display:inline-flex}.writing-list{gap:0;display:grid}.writing-list-entry{border-bottom:1.5px solid var(--line);grid-template-columns:90px minmax(0,1fr);align-items:baseline;gap:16px;padding:16px 0;display:grid}.writing-list-entry:last-child{border-bottom:none}.writing-list-date{flex-direction:column;gap:4px;display:flex}.writing-list-date span:first-child{color:var(--faint);font-family:var(--mono);font-size:var(--text-xs)}.writing-list-body strong{color:var(--text);font-family:var(--serif);font-size:var(--text-base);margin-bottom:4px;font-weight:700;line-height:1.35;display:block}.writing-list-body a{text-decoration:none}.writing-list-body a:hover strong{color:var(--accent);text-underline-offset:2px;text-decoration:underline}.writing-list-body p{color:var(--muted);font-size:var(--text-sm);margin:0;line-height:1.55}.project-grid{gap:var(--sp-3);margin:var(--sp-5) 0 var(--sp-6);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.project-card{background:var(--card-bg);border:1.5px solid var(--line);min-height:140px;transition:border-color var(--duration-fast);padding:16px;position:relative;overflow:hidden}.project-card:hover{border-color:var(--accent)}.project-card.hero-card{background:var(--surface);border-width:2px;grid-column:1/-1;padding:20px}.project-card.hero-card .project-title{font-size:var(--text-lg)}.project-card.hero-card .project-description{font-size:var(--text-base);max-width:600px}.project-header{justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:8px;display:flex}.project-title{color:var(--text);font-family:var(--serif);font-size:var(--text-base);text-underline-offset:2px;transition:text-decoration-color var(--duration-fast);font-weight:700;line-height:1.28;text-decoration:underline #0000}.project-title:hover{text-decoration-color:var(--accent)}.project-description{color:var(--muted);font-size:var(--text-sm);margin:0 0 12px;line-height:1.55}.project-meta{color:var(--faint);font-family:var(--mono);font-size:var(--text-xs);flex-wrap:wrap;align-items:center;gap:10px;display:flex}.cli-snippet{color:var(--text);border:1.5px solid var(--line);background:var(--chip-bg);font-family:var(--mono);font-size:var(--text-xs);white-space:pre-wrap;margin-top:8px;margin-bottom:10px;padding:8px 10px;line-height:1.5;display:block}.publication-list{gap:12px;display:grid}.publication-card{border:1.5px solid var(--line);background:var(--card-bg);grid-template-columns:120px minmax(0,1fr);align-items:start;gap:14px;padding:14px;display:grid}.publication-card img{object-fit:cover;border:1px solid var(--line);width:120px;height:80px}.publication-card a{color:var(--text);font-family:var(--serif);font-size:var(--text-base);text-underline-offset:2px;transition:text-decoration-color var(--duration-fast);font-weight:700;line-height:1.3;text-decoration:underline #0000}.publication-card a:hover{text-decoration-color:var(--accent)}.publication-card p{color:var(--muted);font-size:var(--text-sm);margin:6px 0}.publication-card small{color:var(--faint);font-family:var(--mono);font-size:var(--text-xs)}.contribution-strip{border:1.5px solid var(--line);background:var(--surface);grid-template-columns:170px minmax(0,1fr);align-items:center;gap:14px;margin-top:12px;padding:14px 16px;display:grid}.contribution-strip strong{color:var(--accent);font-family:var(--serif);font-size:var(--text-base)}.contribution-strip span{color:var(--muted);font-size:var(--text-sm);line-height:1.55}[data-page=support]{max-width:820px}.support-section{padding:var(--sp-6) 0;border-top:1.5px solid var(--line)}.support-section:first-of-type{border-top:0;padding-top:0}.support-section-header{max-width:620px;margin-bottom:var(--sp-4);gap:6px;display:grid}.support-kicker,.platform-tag{color:var(--accent);font-family:var(--mono);font-size:var(--text-xs);letter-spacing:.08em;text-transform:uppercase;font-weight:700}.support-section h2,.payment-card h3{color:var(--text);font-family:var(--serif);font-size:var(--text-xl);letter-spacing:-.02em;margin:0;font-weight:700;line-height:1.2}.support-section p,.payment-card p{color:var(--muted);font-size:var(--text-sm);margin:0;line-height:1.7}.payment-grid{gap:var(--sp-3);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.payment-card{gap:var(--sp-4);padding:var(--sp-4);border:1.5px solid var(--line);background:var(--card-bg);align-content:start;display:grid}.payment-card-copy{gap:6px;display:grid}.platform-tag{color:var(--muted);align-items:center;gap:7px;display:inline-flex}.platform-dot{background:var(--accent);border-radius:50%;width:7px;height:7px}.platform-dot.alipay{background:#1677ff}.platform-dot.wechat{background:#07c160}.payment-qr-frame{padding:var(--sp-3);border:1.5px solid var(--line);background:oklch(100% 0 0);place-items:center;margin:0;display:grid}.payment-qr{width:min(100%,260px);height:auto;display:block}.sponsor-panel{gap:var(--sp-4);padding:var(--sp-4);border:1.5px solid var(--line);background:var(--chip-bg);grid-template-columns:minmax(0,1fr) auto;align-items:center;display:grid}.sponsor-panel>div{gap:6px;display:grid}.sponsor-panel strong{color:var(--text);font-family:var(--serif);font-size:var(--text-base);line-height:1.35}.support-action{min-height:40px;color:var(--surface);background:var(--text);border:1.5px solid var(--line-strong);font-family:var(--mono);font-size:var(--text-xs);letter-spacing:.06em;text-transform:uppercase;transition:transform var(--duration-fast) var(--ease-out-expo), color var(--duration-fast);justify-content:center;align-items:center;gap:8px;padding:0 12px;font-weight:700;text-decoration:none;display:inline-flex}.support-action:active{transform:scale(.96)}.support-action.inactive{color:var(--muted);background:0 0}.support-list{gap:var(--sp-2);margin:0;padding:0;list-style:none;display:grid}.support-list li{padding:var(--sp-3) 0;border-top:1px solid var(--line);color:var(--muted);font-size:var(--text-sm);line-height:1.65}.support-list li:first-child{border-top:0}.support-strip{border:1.5px solid var(--line);background:var(--chip-bg);grid-template-columns:170px minmax(0,1fr) auto;align-items:center;gap:14px;margin-top:12px;padding:14px 16px;display:grid}.support-strip strong{color:var(--text);font-family:var(--serif);font-size:var(--text-base)}.support-strip span{color:var(--muted);font-size:var(--text-sm);line-height:1.55}.compact-award-list{gap:0;margin:0;padding:0;list-style:none;display:grid}.compact-award-list li{border-bottom:1px solid var(--line);color:var(--muted);font-size:var(--text-sm);align-items:baseline;gap:8px;padding:10px 0;line-height:1.5;display:flex}.compact-award-list li:last-child{border-bottom:none}.compact-award-list strong{color:var(--accent);font-family:var(--mono);font-size:var(--text-xs);text-transform:uppercase;flex-shrink:0;min-width:72px}.publications ol,.bibliography{margin:0;padding:0;list-style:none}.publications li{margin:0 0 22px}.pub-row{border:1.5px solid var(--line);background:var(--card-bg);grid-template-columns:160px minmax(0,1fr);align-items:start;gap:18px;padding:14px;display:grid!important}.pub-row .abbr,.pub-row .col-sm-9{width:auto!important;max-width:none!important;padding:0!important}.pub-row img.teaser{max-width:160px;width:100%!important;height:auto!important}.pub-row .badge,.badge{color:oklch(100% 0 0);background:var(--text);min-width:44px;min-height:20px;font-family:var(--mono);font-size:var(--text-xs);justify-content:center;align-items:center;padding:0 8px;font-weight:700;display:inline-flex}.pub-row .title a{color:var(--text);font-family:var(--serif);font-size:var(--text-base);text-underline-offset:2px;font-weight:700;line-height:1.4;text-decoration:underline #0000}.pub-row .title a:hover{text-decoration-color:var(--accent)}.pub-row .author,.pub-row .periodical,section li,section p{color:var(--muted)}.pub-row .links a{min-height:22px;color:var(--text);border:1.5px solid var(--line);font-size:var(--text-xs);background:0 0;align-items:center;margin:6px 4px 0 0;padding:0 6px;text-decoration:none;display:inline-flex}.badge-gold{background:var(--sand);color:oklch(100% 0 0)}.badge-silver{background:var(--muted);color:oklch(100% 0 0)}.badge-bronze{color:oklch(100% 0 0);background:oklch(45% .03 60)}a{color:var(--text)}a:hover{color:var(--accent)}a:focus-visible,button:focus-visible,.support-action:focus-visible,.mini-card:focus-visible,.project-card a:focus-visible,.writing-card:focus-visible,.writing-cta:focus-visible,.row-action:focus-visible,.highlight-project-link:focus-visible,.publication-card a:focus-visible,.pub-row .links a:focus-visible{outline:2px solid var(--accent);outline-offset:1px}@keyframes drawLine{to{stroke-dashoffset:0}}@keyframes riseIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.3}}.status-dot{background:var(--accent);border-radius:50%;flex-shrink:0;width:6px;height:6px;animation:2.4s ease-in-out infinite pulse}::selection{color:oklch(100% 0 0);background:var(--text)}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.line-drawing path,.line-note path{stroke-dashoffset:0}}@media (width>=1500px){.page-shell{width:min(1560px,100% - 64px)}.wrapper{grid-template-columns:320px minmax(0,1fr)}.content-panel{padding-left:52px;padding-right:52px}.work-row{grid-template-columns:40px 96px minmax(0,1fr)}.mini-card-grid{gap:16px}}@media (width<=1080px){.page-shell{width:min(100% - 24px,720px);min-height:auto}.wrapper{grid-template-columns:none;min-height:auto;display:block}.profile-panel{width:100%;min-height:auto;padding:var(--sp-7);border-right:0;border-bottom:1.5px solid var(--line);text-align:center;background:var(--surface);display:block}.profile-avatar{width:90px;height:90px;margin:0 auto 14px}header h1{font-size:var(--text-2xl)}.profile-blurb{text-align:center;max-width:none;font-size:var(--text-sm);margin:10px auto 0}.profile-blurb:after{margin:16px auto 0}.social-icons{flex-wrap:wrap;justify-content:center;gap:10px 16px;margin-top:12px;display:flex}.profile-meta{flex-wrap:wrap;justify-content:center;gap:10px 16px;margin:12px auto 0;display:flex}.line-note{justify-content:center;align-items:center;gap:8px;margin-top:14px;display:flex}.line-note svg{width:32px;height:48px}.content-panel{width:100%;padding:var(--sp-6);display:block}.intro-hero,.feature-row,.compact-row,.work-row,.writings-row,.highlight-row{grid-template-columns:1fr}.feature-row{gap:10px}.feature-icon{width:36px;height:36px}.row-action{justify-self:start}.mini-card-grid,.project-grid,.payment-grid,.publication-card,.contribution-strip,.support-strip,.award-list article,.pub-row,.writing-list-entry{grid-template-columns:1fr}.line-garden{min-height:120px}}@media (width<=520px){body{font-size:.9rem}.page-shell{width:calc(100% - 16px);margin:8px auto}.profile-panel{padding:18px 16px}.profile-avatar{width:72px;height:72px}.content-panel{padding:18px 16px 28px}.top-nav{flex-wrap:wrap;align-items:flex-start;gap:10px}.nav-actions{flex-wrap:wrap}.top-nav div{flex-wrap:wrap;gap:10px 16px}.hero-title{font-size:clamp(1.6rem,6vw,2.4rem)}.mini-card-grid{grid-template-columns:1fr}.writing-card{padding:10px 12px}.writing-card-title{font-size:var(--text-sm)}.writing-card-teaser{font-size:var(--text-xs)}.publication-card{grid-template-columns:1fr}.publication-card img{width:100%;height:auto}.sponsor-panel{grid-template-columns:1fr}.support-action{justify-self:start}}[data-page=work] .work-entry{border:1.5px solid var(--line);padding:var(--sp-6) var(--sp-4);margin-bottom:10px}[data-page=work] .work-entry:last-child{margin-bottom:0}[data-page=open-source] .project-card:hover{border-color:var(--accent)}[data-page=writings] .subpage-title{font-style:italic;font-weight:400}[data-page=writings] .writing-list-entry:hover{background:var(--chip-bg)}[data-page=background] .section-subtitle:before{content:"— ";color:var(--accent)}[data-page=background] .section-subtitle:after{content:" —";color:var(--accent)}[data-page=background] .compact-award-list strong{border-bottom:1px solid var(--accent);padding-bottom:1px}
