:root{--paper: #FFFFFF;--ink: #0A0A0A;--mute: #6B6B6B;--faint: #9A9A9A;--rule: #E5E5E5;--underline: #C9C9C9;--selection: #EDEDED;--serif: "Newsreader", "Source Serif Pro", Charter, Cambria, Georgia, serif;--measure: 640px;--gutter: clamp(24px, 5vw, 40px)}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0}html{-webkit-text-size-adjust:100%}body{background:var(--paper);color:var(--ink);font-family:var(--serif);font-size:19px;line-height:1.65;font-weight:400;font-variation-settings:"opsz" 18;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:relative}::selection{background:var(--selection);color:var(--ink)}.page{max-width:var(--measure);margin:0 auto;padding:clamp(28px,6vw,72px) var(--gutter) 100px;position:relative;z-index:1}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.top-nav{position:sticky;top:0;z-index:40;background:#ffffffe0;-webkit-backdrop-filter:saturate(160%) blur(10px);backdrop-filter:saturate(160%) blur(10px);border-bottom:1px solid var(--rule)}.top-nav-inner{max-width:960px;margin:0 auto;padding:12px var(--gutter);display:flex;align-items:baseline;justify-content:space-between;gap:24px;flex-wrap:wrap}.top-nav .brand{font-weight:600;font-size:16px;letter-spacing:-.01em;text-decoration:none;color:var(--ink)}.top-nav ul{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:18px}.top-nav .nav-link{font-size:14px;letter-spacing:.04em;color:var(--mute);text-decoration:none;border-bottom:1px solid transparent;padding-bottom:2px;transition:color .15s ease,border-color .15s ease}.top-nav .nav-link:hover{color:var(--ink)}.top-nav .nav-link.active{color:var(--ink);border-bottom-color:var(--ink)}@media (max-width: 640px){.top-nav-inner{gap:8px;padding:10px var(--gutter)}.top-nav ul{gap:12px}.top-nav .brand{font-size:14px}.top-nav .nav-link{font-size:13px}}.page-head{margin-bottom:2.6em}.page-head .dateline{margin-bottom:14px}.page-head h1{margin-bottom:18px}p{margin:0 0 1.1em;hanging-punctuation:first last}p strong{font-weight:600;color:var(--ink)}em{font-style:italic}h1{font-family:var(--serif);font-weight:600;font-size:clamp(34px,5vw,44px);line-height:1.1;letter-spacing:-.015em;margin:0 0 24px;font-variation-settings:"opsz" 60}h2{font-family:var(--serif);font-size:13px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--mute);margin:4em 0 1.4em;padding-top:2.2em;border-top:1px solid var(--rule);font-variation-settings:"opsz" 14}a{color:inherit;text-decoration:underline;text-decoration-color:var(--underline);text-decoration-thickness:1px;text-underline-offset:3px;transition:text-decoration-color .15s ease,text-decoration-thickness .15s ease}a:hover{text-decoration-color:var(--ink);text-decoration-thickness:2px}a:focus-visible,button:focus-visible{outline:2px solid var(--ink);outline-offset:2px;border-radius:2px}.lede{font-size:21px;line-height:1.55;margin:0 0 1.6em;font-variation-settings:"opsz" 24}.dateline{font-size:13px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);margin-bottom:24px;font-variation-settings:"opsz" 14}.dateline .sep{margin:0 8px;opacity:.5}@media print{body{background:#fff;color:#000}a{color:#000;text-decoration:underline}h2{page-break-after:avoid}}.wind-bg{position:fixed;top:0;right:0;bottom:0;left:0;z-index:-1;pointer-events:none}.wind-bg canvas{display:block;width:100%;height:100%}.wind-bg.fallback{background:linear-gradient(180deg,#fff,#f8f8f8,#fff)}.hero{display:flex;flex-direction:column;gap:32px;margin-bottom:2.4em}.hero-photo{display:block;width:100%;max-width:480px;height:auto;margin:0 auto;background:#efefef;border-radius:4px;box-shadow:0 1px 2px #0a0a0a0f,0 8px 24px #0a0a0a1a}.hero-text{width:100%}.hero h1{margin-bottom:16px}@media (max-width: 540px){.hero-photo{max-width:100%}}.hero-callout{font-size:14px;color:var(--mute);font-style:italic;margin:.6em 0 0;display:flex;align-items:center;flex-wrap:wrap;gap:6px}.hero-callout .tag{font-style:normal;font-weight:600;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink);border:1px solid var(--ink);padding:3px 8px;border-radius:2px}.hero-callout .sep{opacity:.5;margin:0 4px}.project{margin-bottom:1.6em}.project .name{font-weight:600;font-style:italic}.project .name a{text-decoration:none;border-bottom:1px solid var(--underline);padding-bottom:1px;transition:border-color .15s ease}.project .name a:hover{border-bottom-color:var(--ink)}.passions-grid{display:grid;grid-template-columns:1fr 1fr;gap:32px 40px}.passion .title{font-style:italic;font-weight:500;display:block;margin-bottom:6px}.passion .body{margin:0;color:var(--ink);font-size:17px;line-height:1.55}@media (max-width: 640px){.passions-grid{grid-template-columns:1fr;gap:24px}}.travels-grid{column-count:3;column-gap:28px;margin:2em -120px 1.4em;perspective:1200px}.travels-grid .polaroid{margin:0 0 28px;break-inside:avoid;display:block;background:#fff;padding:10px 10px 36px;box-shadow:0 1px 2px #0a0a0a0f,0 6px 18px #0a0a0a1f;cursor:pointer;will-change:transform}.travels-grid .polaroid img{width:100%;height:auto;display:block;background:#efefef;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.album-link{font-size:16px;color:var(--mute);margin-top:.6em}.lego-gene{position:fixed;bottom:12px;left:0;width:48px;height:64px;padding:0;margin:0;background:transparent;border:0;cursor:pointer;z-index:50;filter:drop-shadow(0 6px 6px rgba(10,10,10,.18));transform-origin:50% 100%}.lego-gene:focus-visible{outline:2px solid var(--ink);outline-offset:4px;border-radius:4px}.lego-gene svg{display:block}@media (max-width: 540px){.lego-gene{width:40px;height:54px;bottom:8px}.lego-gene svg{width:40px;height:54px}}@media (max-width: 1024px){.travels-grid{margin-left:-40px;margin-right:-40px;column-count:3}}@media (max-width: 960px){.travels-grid{column-count:2;column-gap:20px;margin-left:-20px;margin-right:-20px}.travels-grid .polaroid{margin-bottom:22px;padding:8px 8px 28px}}@media (max-width: 540px){.travels-grid{column-count:1;margin-left:0;margin-right:0;column-gap:0}}.contact-intro{color:var(--mute);font-size:17px;margin:0 0 1.4em}.contact-actions{display:flex;flex-direction:column;gap:12px;align-items:flex-start}.contact-mail{display:inline-block;font-size:clamp(28px,4vw,36px);font-weight:600;font-variation-settings:"opsz" 36;letter-spacing:-.01em;text-decoration:none;border-bottom:1px solid var(--underline);padding-bottom:2px;transition:border-color .15s ease}.contact-mail:hover{border-bottom-color:var(--ink)}.contact-book{display:inline-flex;align-items:center;gap:8px;font-size:17px;font-weight:600;text-decoration:none;color:var(--paper);background:var(--ink);padding:12px 18px;border-radius:2px;border:1px solid var(--ink);transition:background .15s ease,color .15s ease;letter-spacing:.01em}.contact-book:hover{background:var(--paper);color:var(--ink)}.socials{list-style:none;padding:0;margin:0;font-size:18px;line-height:2}.socials li{padding:2px 0}.colophon{margin-top:6em;padding-top:2em;border-top:1px solid var(--rule);font-size:13px;color:var(--faint);font-style:italic;letter-spacing:.02em}.project-cards{display:grid;grid-template-columns:1fr;gap:24px;margin:1em 0 2em}.project-card{border:1px solid var(--rule);padding:22px 24px;background:#fff9;transition:border-color .18s ease,transform .18s ease}.project-card:hover{border-color:var(--ink);transform:translateY(-2px)}.project-card-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:8px}.project-card h3{font-family:var(--serif);font-weight:600;font-size:22px;margin:0;letter-spacing:-.01em}.project-card h3 a{text-decoration:none;border-bottom:1px solid var(--underline);padding-bottom:1px}.project-card h3 a:hover{border-bottom-color:var(--ink)}.status{font-size:11px;text-transform:uppercase;letter-spacing:.12em;padding:3px 8px;border:1px solid var(--ink);color:var(--ink);white-space:nowrap}.status-early{background:transparent}.status-beta,.status-live{background:var(--ink);color:var(--paper)}.status-archived{color:var(--mute);border-color:var(--mute)}.project-card-body{margin:0 0 12px}.service-tagline{margin:0 0 10px;font-family:var(--serif);font-style:italic;color:var(--mute);font-size:15px;letter-spacing:.01em}.service-proof{margin:12px 0 0;padding-top:10px;border-top:1px dashed var(--rule);font-size:14px;color:var(--mute);line-height:1.55}.service-proof-label{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;text-transform:uppercase;letter-spacing:.12em;color:var(--ink)}.track-record{list-style:none;padding:0;margin:.6em 0 1.4em;display:grid;gap:12px}.track-record li{padding-left:14px;border-left:2px solid var(--ink);line-height:1.55}.track-record strong{font-weight:600}.stack{list-style:none;padding:0;margin:0 0 8px;display:flex;flex-wrap:wrap;gap:6px 10px}.stack li{font-size:12px;color:var(--mute);padding:2px 8px;border:1px solid var(--rule);border-radius:999px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.project-card-repo{margin:6px 0 0;font-size:14px}.project-card-repo a{color:var(--mute)}.project-card-repo a:hover{color:var(--ink)}.more-repos{margin-top:1em}.us-map{margin:1.6em -120px 2em;padding:0}.us-map svg{width:100%;height:auto;display:block;background:#fdfcf9;border:1px solid var(--rule);border-radius:4px}.us-map-caption{font-size:14px;color:var(--mute);font-style:italic;text-align:center;margin-top:12px;padding:0 8px}@media (max-width: 1024px){.us-map{margin-left:-40px;margin-right:-40px}}@media (max-width: 800px){.us-map{margin-left:0;margin-right:0}}.career-timeline{list-style:none;padding:0;margin:1.4em 0 2em;border-left:2px solid var(--rule)}.career-item{display:grid;grid-template-columns:180px 1fr;gap:24px;padding:18px 0 18px 22px;margin-left:-1px;border-left:2px solid transparent;transition:border-color .18s ease,background .18s ease;position:relative}.career-item:before{content:"";position:absolute;left:-7px;top:26px;width:10px;height:10px;background:var(--paper);border:2px solid var(--mute);border-radius:50%;transition:background .18s ease,border-color .18s ease}.career-item.is-active:before{background:var(--ink);border-color:var(--ink)}.career-item.is-active{border-left-color:var(--ink);background:#00000005}.career-when{font-size:14px;line-height:1.5}.career-years{display:block;font-weight:600}.career-city{display:block;color:var(--mute);font-style:italic}.career-role{font-weight:600;font-size:17px}.career-org{color:var(--mute);font-size:16px;margin-bottom:4px}.career-note{color:var(--ink);font-size:15px;margin:6px 0 0;font-style:italic}@media (max-width: 640px){.career-item{grid-template-columns:1fr;gap:6px}}.writing-entry{margin:2em 0;padding:0}.writing-kind{font-size:11px;text-transform:uppercase;letter-spacing:.16em;color:var(--mute);margin-bottom:6px}.writing-entry h2{border-top:none;padding-top:0;margin:0 0 6px;font-size:28px;text-transform:none;letter-spacing:-.01em;color:var(--ink);font-weight:600}.writing-entry h2 a{text-decoration:none;border-bottom:1px solid var(--underline);padding-bottom:2px}.writing-entry h2 a:hover{border-bottom-color:var(--ink)}.writing-tagline{font-style:italic;color:var(--mute);font-size:18px;margin:0 0 14px}.platforms{list-style:none;padding:0;margin:12px 0 0;display:flex;flex-wrap:wrap;gap:8px 12px}.platforms li a{font-size:14px;padding:4px 12px;border:1px solid var(--ink);text-decoration:none;transition:background .15s ease,color .15s ease;display:inline-block}.platforms li a:hover{background:var(--ink);color:var(--paper)}.upcoming-block{background:var(--ink);color:var(--paper);padding:24px 28px;margin:1.4em 0 2.4em}.upcoming-block h2{border-top:none;padding-top:0;margin:0 0 16px;color:var(--paper)}.upcoming-block a{color:var(--paper)}.upcoming-block .tag{font-size:11px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;border:1px solid var(--paper);padding:3px 8px;border-radius:2px;display:inline-block;margin-right:10px}.talk-list{list-style:none;padding:0;margin:0}.talk-item{display:grid;grid-template-columns:140px 1fr;gap:20px;padding:18px 0;border-top:1px solid var(--rule)}.talk-item:first-child{border-top:1px solid var(--rule)}.upcoming-block .talk-item{border-top:1px solid rgba(255,255,255,.2)}.upcoming-block .talk-item:first-child{border-top:none;padding-top:0}.talk-when{font-size:15px;font-style:italic;color:var(--mute);line-height:1.5}.upcoming-block .talk-when{color:#ffffffb3}.talk-year{display:inline-block}.talk-body h3{font-family:var(--serif);font-weight:600;font-size:19px;margin:0 0 4px;letter-spacing:-.01em}.talk-body h3 a{text-decoration:none;border-bottom:1px solid var(--underline)}.talk-body h3 a:hover{border-bottom-color:currentColor}.upcoming-block .talk-body h3 a{border-bottom-color:#fff6}.talk-venue{color:var(--mute);font-size:15px;font-style:italic;margin-bottom:6px}.upcoming-block .talk-venue{color:#ffffffbf}.talk-body p{margin:0;font-size:17px;line-height:1.55}@media (max-width: 640px){.talk-item{grid-template-columns:1fr;gap:6px}.upcoming-block{padding:20px}}.hobby-list{list-style:none;padding:0;margin:1em 0}.hobby-list li{padding:10px 0;border-top:1px solid var(--rule);font-size:17px}.hobby-list li:last-child{border-bottom:1px solid var(--rule)}.expertise-section{margin-top:1em}.tenure-banner{display:flex;align-items:center;gap:22px;padding:22px 26px;margin:1em 0 1.8em;background:var(--ink);color:var(--paper);border-radius:4px}.tenure-num{font-family:var(--serif);font-size:clamp(48px,8vw,76px);font-weight:600;letter-spacing:-.03em;line-height:1;font-variation-settings:"opsz" 72}.tenure-label{display:flex;flex-direction:column;gap:4px}.tenure-years{font-size:13px;letter-spacing:.18em;text-transform:uppercase;opacity:.7}.tenure-context{font-size:18px;line-height:1.4}.expertise-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:28px 32px;margin:1em 0 1.8em}.expertise-group{border-top:2px solid var(--ink);padding-top:16px}.expertise-group h3{font-family:var(--serif);font-size:16px;font-weight:600;margin:0 0 12px;letter-spacing:.01em}.expertise-group ul{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}.expertise-group li{font-size:15px;line-height:1.4;color:var(--ink);padding-left:14px;position:relative}.expertise-group li:before{content:"";position:absolute;left:0;top:.55em;width:6px;height:1px;background:var(--ink)}@media (max-width: 800px){.expertise-grid{grid-template-columns:repeat(2,1fr);gap:24px 28px}}@media (max-width: 540px){.expertise-grid{grid-template-columns:1fr;gap:20px}.tenure-banner{flex-direction:column;align-items:flex-start;gap:8px;padding:18px 20px}.tenure-num{font-size:56px}}.event-list{list-style:none;padding:0;margin:1.2em 0 0}.event-item{display:grid;grid-template-columns:160px 1fr;gap:22px;padding:22px 0;border-top:1px solid var(--rule)}.event-item:last-child{border-bottom:1px solid var(--rule)}.event-when{display:flex;flex-direction:column;gap:4px}.event-date{font-weight:600;font-size:15px}.event-org{font-size:12px;color:var(--mute);text-transform:uppercase;letter-spacing:.14em}.event-body h3{font-family:var(--serif);font-weight:600;font-size:19px;margin:0 0 8px;letter-spacing:-.005em}.event-body h3 a{text-decoration:none;border-bottom:1px solid var(--underline)}.event-body h3 a:hover{border-bottom-color:var(--ink)}.event-location{font-weight:400;font-style:italic;color:var(--mute)}.event-tracks{list-style:none;padding:0;margin:0 0 10px;display:flex;flex-wrap:wrap;gap:6px 8px}.event-tracks li{font-size:12px;color:var(--ink);padding:3px 10px;border:1px solid var(--ink);border-radius:999px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.01em}.event-body p{margin:0;font-size:16px;line-height:1.55}@media (max-width: 640px){.event-item{grid-template-columns:1fr;gap:8px}}.career-chart-wrap{margin:1.4em -120px 2em;padding:24px 28px;border:1px solid var(--rule);border-radius:4px;background:#fdfcf9}.career-chart-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:8px}.career-chart-title{font-family:var(--serif);font-weight:600;font-size:18px;margin:0;letter-spacing:-.005em}.career-chart-hint{font-size:13px;color:var(--mute);font-style:italic;margin:0}.career-chart{width:100%;height:auto;display:block;margin:8px 0 12px}.career-bar-group rect{transition:fill .18s ease}.career-bar-group:hover rect{fill:var(--ink)}.career-bar-group:focus-visible rect{stroke:var(--ink);stroke-width:2}.career-chart-legend{display:flex;gap:18px;font-size:12px;color:var(--mute);letter-spacing:.04em;margin-bottom:12px}.career-chart-legend .dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:middle;border:1px solid var(--ink)}.career-chart-legend .dot-nyc{background:var(--ink)}.career-chart-legend .dot-nj{background:var(--mute)}.career-chart-legend .dot-pgh{background:#fff}.career-chart-panel{margin-top:14px;padding:16px 18px;background:var(--paper);border:1px solid var(--rule);border-radius:3px;min-height:90px;display:flex;align-items:center}.chart-panel-empty{margin:0;font-style:italic;color:var(--mute);font-size:14px}.role-detail{display:grid;grid-template-columns:200px 1fr;gap:18px;width:100%;align-items:start}.role-detail-when{display:flex;flex-direction:column;gap:4px;font-size:14px}.role-detail-years{font-weight:600}.role-detail-city{color:var(--mute);font-style:italic}.role-detail-citycode{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink);border:1px solid var(--ink);padding:2px 6px;border-radius:2px;align-self:flex-start;margin-top:4px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.role-detail-role{font-weight:600;font-size:16px;line-height:1.4}.role-detail-org{color:var(--mute);font-size:15px;margin-top:2px}.role-detail-note{margin:8px 0 0;font-style:italic;font-size:14px;color:var(--ink)}@media (max-width: 1024px){.career-chart-wrap{margin-left:-40px;margin-right:-40px}}@media (max-width: 800px){.career-chart-wrap{margin-left:0;margin-right:0;padding:18px 16px}.career-chart-head{flex-direction:column;gap:4px;align-items:flex-start}}@media (max-width: 540px){.role-detail{grid-template-columns:1fr;gap:8px}}
