@font-face{font-family:'Libre Caslon Display';font-style:normal;font-weight:400;font-display:swap;src:url('/assets/libre-caslon-display-regular.ttf') format('truetype')}
@font-face{font-family:Manrope;font-style:normal;font-weight:400;font-display:swap;src:url('/assets/manrope-regular.ttf') format('truetype')}
@font-face{font-family:Manrope;font-style:normal;font-weight:500;font-display:swap;src:url('/assets/manrope-medium.ttf') format('truetype')}

:root{color-scheme:dark;--background:#0a0a0a;--sheet:#161616;--back:#101010;--white:#fff;--muted:#b5b5b5;--rule:#343434;--diagram:#222;--vellum:rgba(22,22,22,.96);--display:'Libre Caslon Display',Georgia,serif;--body:Manrope,Arial,sans-serif}
*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:32px;scrollbar-color:var(--rule) var(--background)}
body{margin:0;background:var(--background);color:var(--white);font:400 15px/26px var(--body);-webkit-font-smoothing:antialiased}
::selection{background:var(--white);color:var(--background)}
button,a{-webkit-tap-highlight-color:transparent}
button{font:inherit;color:inherit}
button:disabled{cursor:default}
a{color:inherit;text-decoration:none;text-underline-offset:5px}
a:hover{text-decoration:underline}
button{cursor:pointer}
a:focus-visible,button:focus-visible,[tabindex]:focus-visible{outline:1px solid var(--white);outline-offset:5px}
[hidden]{display:none!important}
h1,h2,h3,p,figure,ul{margin:0}
h1,h2,h3{font-weight:400;overflow-wrap:break-word}
h1{font:400 64px/70px var(--display);letter-spacing:-1px}
h2{font:400 36px/42px var(--display);letter-spacing:-.3px}
.page-shell{max-width:792px;margin-inline:auto;padding:64px 24px 48px}
.text-link{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding-block:12px;margin-block:-12px;font:500 13px/20px var(--body);white-space:nowrap}
.icon{display:block;flex:none}
.unavailable{color:var(--muted);cursor:default}
.unavailable .icon{opacity:.65}
.skip-link{position:fixed;left:24px;top:16px;z-index:20;background:var(--white);color:var(--background);padding:8px 16px;transform:translateY(-150%)}
.skip-link:focus{transform:translateY(0)}
.muted{color:var(--muted)}

.home-intro{margin-top:56px}
.role{margin-top:8px;color:var(--muted)}
.stage-photo{margin-top:32px}
.stage-photo>img{display:block;width:100%;height:auto;aspect-ratio:744/484;object-fit:cover;filter:grayscale(1) contrast(1.05)}
.stage-photo figcaption{margin-top:12px;color:var(--muted);font-size:12px;line-height:20px}
.biography{margin-top:32px}
.intro-text{max-width:650px;font-size:16px;line-height:28px}
.current-practice{margin-top:16px;color:var(--muted)}
.profile-links{display:flex;align-items:center;flex-wrap:wrap;gap:12px 24px;margin-top:20px}
.home-section{margin-top:64px;padding-top:32px;border-top:1px solid var(--rule)}
.tech-stack-list{list-style:none;display:flex;flex-wrap:wrap;gap:28px 32px;padding:0;margin-top:24px}
.tech-stack-list li{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:12px;min-width:64px;max-width:112px;text-align:center;font-size:12px;line-height:20px;overflow-wrap:anywhere}
.tech-icon{display:flex;align-items:center;justify-content:center;width:28px;height:28px;flex-shrink:0}
.tech-badge{border:1px solid currentColor;border-radius:4px;font-size:9px;font-weight:500;line-height:1;letter-spacing:0}
.tech-stack-list img{display:block;object-fit:contain;filter:brightness(0) invert(1)}
.github-activity{padding-bottom:64px}
.activity-summary{margin:16px 0 20px;font-size:13px;line-height:22px;color:var(--muted);font-variant-numeric:tabular-nums}
.contribution-scroll{overflow-x:auto;padding-bottom:12px;direction:rtl}
.contribution-calendar{display:block;width:100%;min-width:680px;height:auto;max-height:140px;direction:ltr}
.contribution-calendar text{fill:var(--muted);font:11px var(--body)}
.contribution-calendar rect,.legend-cell{fill:var(--diagram);background:var(--diagram)}
.contribution-calendar [data-level="1"],.legend-cell[data-level="1"]{fill:var(--rule);background:var(--rule)}
.contribution-calendar [data-level="2"],.legend-cell[data-level="2"]{fill:var(--muted);background:var(--muted)}
.contribution-calendar [data-level="3"],.legend-cell[data-level="3"]{fill:var(--white);fill-opacity:.8;background:var(--white);opacity:.8}
.contribution-calendar [data-level="4"],.legend-cell[data-level="4"]{fill:var(--white);background:var(--white)}
.activity-meta{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;color:var(--muted);font-size:11px;line-height:20px;margin-top:12px}
.activity-legend{display:flex;align-items:center;gap:4px}
.activity-legend>span:first-child{margin-right:4px}
.activity-legend>span:last-child{margin-left:4px}
.legend-cell{width:10px;height:10px;display:block}
.activity-empty{color:var(--muted);font-size:13px;line-height:22px}
.selected-work{margin-top:88px}
.section-heading{display:flex;align-items:center;justify-content:space-between;gap:20px;min-height:44px}
.section-heading>.text-link{flex:none}
.artwork-note{margin-top:16px;color:var(--muted);font-size:12px;line-height:20px}

.folio-sheet h3{font:400 32px/36px var(--display);letter-spacing:-.2px}
.folio-summary{font-size:12px;line-height:20px;color:var(--muted)}
.project-diagram{display:flex;align-items:center;gap:16px;padding:16px;background:var(--diagram)}
.diagram-stage{min-width:0;flex:1}
.diagram-label{font-size:11px;font-weight:500;line-height:16px;letter-spacing:.25px;overflow-wrap:normal}
.diagram-detail{margin-top:8px;font-size:12px;line-height:20px;color:var(--muted)}
.diagram-arrow{display:block;flex:none}
.folio-contribution{font-size:12px;line-height:20px}
.folio-tools{font-size:11px;font-weight:500;line-height:16px;letter-spacing:.25px;color:var(--muted)}
.folio-sheet>.text-link{align-self:flex-start}
.mobile-detail{display:none}

.plain-list{list-style:none;padding:0}
.home-section>.plain-list{margin-top:24px}
.experience-row{display:grid;grid-template-columns:44px minmax(0,1fr);gap:20px;padding-block:20px;border-bottom:1px solid var(--rule)}
.logo-placeholder{display:flex;width:44px;height:44px;align-items:center;justify-content:center;background:var(--diagram);color:var(--muted);font:500 11px/16px var(--body);letter-spacing:.25px;flex:none}
.organization-logo{display:block;width:44px;height:44px;object-fit:contain;filter:grayscale(1)}
.row-copy{min-width:0}
.row-name{font:400 15px/26px var(--body);letter-spacing:0}
.row-provider{margin-top:2px;color:var(--muted);font-size:12px;line-height:20px;overflow-wrap:anywhere}
.experience-description{margin-top:14px;color:var(--muted)}
.credential-row{display:grid;grid-template-columns:44px minmax(0,1fr) 128px;column-gap:20px;align-items:center;padding-block:20px;border-bottom:1px solid var(--rule)}
.verification{display:flex;align-items:center;justify-content:flex-end;height:44px}
.page-intro{margin-top:63px;margin-bottom:48px}
.page-intro>p{margin-top:16px;font-size:16px;line-height:28px;color:var(--muted)}
.full-experience,.full-credentials{border-top:1px solid var(--rule)}
.sample-note{font-size:12px;line-height:20px;color:var(--muted);margin-top:-24px;margin-bottom:24px}

.deployed-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;margin-top:24px}
.deployed-tile{display:flex;flex-direction:column;align-items:stretch;gap:12px;min-width:0;min-height:224px;padding:24px;border:1px solid var(--rule);background:var(--sheet);scroll-margin-top:32px}
.deployed-tile h3{font:400 24px/29px var(--display)}
.deployed-tile h3>a,.deployed-tile h3>span{display:flex;align-items:center;justify-content:space-between;gap:12px}
.tile-role,.tile-tools,.tile-availability{color:var(--muted);font-size:12px;line-height:20px}
.tile-availability{margin-top:auto}
.deployed-featured{grid-column:1/-1;padding:28px}
.deployed-featured h3{font:400 32px/36px var(--display);letter-spacing:-.2px}
.deployed-tile .text-link{align-self:flex-start}

.site-footer{margin-top:64px}
.back-home{margin-top:0}
.not-found{margin-top:80px}
.not-found>p{margin-top:16px;color:var(--muted)}
.not-found>.text-link{margin-top:32px}

@media(max-width:600px){
  h1{font-size:48px;line-height:54px;letter-spacing:-.6px}
  .page-shell{padding-top:32px}
  .home-intro{margin-top:40px}
  .stage-photo>img{aspect-ratio:342/222}
  .selected-work{margin-top:64px}
  .section-heading{gap:12px}
  .section-heading h2{min-width:0}
  .project-diagram{gap:8px;padding:12px}
  .desktop-detail{display:none}
  .mobile-detail{display:block}
  .experience-row{column-gap:16px}
  .credential-row{grid-template-columns:44px minmax(0,1fr);column-gap:16px;row-gap:2px;align-items:start;padding-block:16px}
  .verification{grid-column:2;justify-content:flex-start}
  .page-intro{margin-top:47px}
  .deployed-grid{grid-template-columns:minmax(0,1fr);gap:16px}
  .deployed-featured{padding:24px}
  .deployed-featured h3{font-size:24px;line-height:29px;letter-spacing:0}
}
@media(max-width:360px){
  .section-heading h2{font-size:32px;line-height:38px}
  .project-diagram{flex-direction:column;align-items:stretch;gap:12px;padding:10px}
  .diagram-stage{display:flex;flex:none;align-items:center;gap:12px}
  .diagram-label{flex:0 0 80px;font-size:11px;letter-spacing:0}
  .diagram-detail{margin-top:0;font-size:12px}
  .diagram-arrow{display:none}
}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}}

/* Category links share the reading-row rhythm; the full row is interactive. */
.community-link{display:flex;align-items:center;justify-content:space-between;gap:20px;padding-block:20px;border-bottom:1px solid var(--rule)}
.community-link .row-copy{flex:1}
.community-link:hover{text-decoration:none}
.community-link:hover .row-name{text-decoration:underline;text-underline-offset:5px}


/* Persistent folio index: quiet navigation around the existing reading column. */
html{scrollbar-gutter:stable}
body:has(dialog[open]){overflow:hidden}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
.content-area{margin-left:220px}
.site-sidebar{position:fixed;inset:0 auto 0 0;width:220px;padding:32px 28px 24px;border-right:1px solid var(--rule);display:flex;flex-direction:column;gap:28px;background:var(--background);z-index:5;overflow-y:auto}
.sidebar-identity{font:400 25px/30px var(--display)}
.sidebar-identity span{display:block;margin-top:8px;color:var(--muted);font:400 12px/20px var(--body)}
.sidebar-links,.sidebar-community{display:flex;flex-direction:column}
.site-sidebar nav a,.navigation-dialog nav a{display:block;padding:8px 0;font-size:13px;line-height:22px;color:var(--muted)}
.site-sidebar nav [aria-current=page],.navigation-dialog nav [aria-current=page]{color:var(--white);text-decoration:underline;text-underline-offset:6px}
.sidebar-community{margin-top:24px;padding-top:24px;border-top:1px solid var(--rule)}
.nav-label{margin-bottom:6px;color:var(--muted);font-size:11px;line-height:20px}
.sidebar-bottom{margin-top:auto;padding-top:32px}
.sidebar-contact>p{font-size:13px;line-height:22px}
.sidebar-socials{display:flex;flex-wrap:wrap;gap:16px;margin-top:12px}
.sidebar-socials:empty{display:none}
.sidebar-colophon{display:flex;flex-direction:column;gap:4px;margin-top:24px;color:var(--muted);font-size:11px;line-height:16px}
.sidebar-contact .sidebar-email{display:block;font-size:11px;line-height:20px;overflow-wrap:anywhere;margin-top:8px;padding-block:8px;min-height:36px}
.sidebar-contact .sidebar-email .icon{display:none}
.navigation-dialog .sidebar-contact{margin-top:28px;padding-top:24px;border-top:1px solid var(--rule)}
.navigation-dialog .sidebar-email{justify-content:flex-start}
@media(min-width:1025px) and (max-height:800px){
  .site-sidebar{padding:24px;gap:20px}
  .site-sidebar nav a{padding-block:6px}
  .site-sidebar .sidebar-community{margin-top:16px;padding-top:16px}
  .site-sidebar .sidebar-bottom{padding-top:8px}
  .site-sidebar .sidebar-contact>p{font-size:12px;line-height:20px}
  .site-sidebar .sidebar-socials{margin-top:8px}
  .site-sidebar .sidebar-colophon{margin-top:16px}
}
.ask-guide{border:0;background:none;text-align:left;white-space:normal;font-size:12px}
.sidebar-email{display:flex;align-items:center;gap:8px;margin-top:16px;color:var(--muted);font-size:12px;line-height:20px;min-height:44px}
.mobile-bar{display:none}
.page-intro,.home-intro{margin-top:8px}

/* These are actual selectable sheets; only the title bands of the rear sheets show. */
.folio{min-height:0;margin-top:28px}
.folio-tabs{display:block;position:relative;height:168px;margin:0}
.folio-tabs button:nth-child(n){position:absolute;display:flex;align-items:center;justify-content:space-between;gap:16px;width:calc(100% - 36px);min-height:64px;padding:14px 24px;border:1px solid var(--rule);background:var(--back);color:var(--muted);font:400 26px/34px var(--display);text-align:left}
.folio-tabs button::before{content:none}
.folio-tabs button[data-sheet-order="0"]{top:0;left:36px;z-index:0}
.folio-tabs button[data-sheet-order="1"]{top:52px;left:18px;z-index:1;width:calc(100% - 18px)}
.folio-tabs button[data-sheet-order="2"]{top:104px;left:0;z-index:2;width:100%;border-bottom-color:transparent;color:var(--white);background:var(--sheet)}
.folio-tabs button:hover{color:var(--white)}
.folio-tabs button:focus-visible{z-index:3}
.sheet-action{display:flex;align-items:center;gap:8px;font:400 11px/20px var(--body);white-space:nowrap}
.folio-sheets{margin:0;padding:0;min-height:0}
.folio-sheets::before,.folio-sheets::after{content:none}
.folio-sheet{position:relative;display:flex;flex-direction:column;gap:16px;min-height:0;padding:0 24px 24px;background:var(--sheet);border:1px solid var(--rule);border-top:0}

.gallery-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:32px 24px}
.gallery-item{min-width:0}
.gallery-photo{position:relative;display:block;width:100%;padding:0;border:0;background:var(--diagram);overflow:hidden;text-align:left}
.gallery-photo>img{display:block;width:100%;height:auto;aspect-ratio:4/3;object-fit:cover;filter:grayscale(1)}
.gallery-enlarge{display:inline-flex;align-items:center;gap:6px;position:absolute;bottom:12px;right:12px;padding:4px 8px;background:var(--background);color:var(--white);font-size:11px;line-height:20px}
.gallery-photo:hover .gallery-enlarge{text-decoration:underline}
.gallery-empty{display:flex;align-items:center;justify-content:center;aspect-ratio:4/3;border:1px solid var(--rule);color:var(--muted);font-size:12px}
.gallery-item figcaption{margin-top:12px}

dialog{color:var(--white);background:var(--background);border:1px solid var(--rule);padding:24px;max-height:calc(100dvh - 40px)}
dialog::backdrop{background:var(--background);opacity:.8}
.dialog-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;padding-bottom:20px;border-bottom:1px solid var(--rule)}
.dialog-heading>.text-link{flex:none;border:0;background:none;gap:12px}
.navigation-dialog{width:min(380px,calc(100% - 32px));margin:16px auto 16px 16px}
.navigation-dialog .sidebar-links{margin-top:20px}
.navigation-dialog .ask-guide{margin-top:24px}
.gallery-dialog{width:min(1081px,calc(100% - 40px));margin:auto}
.gallery-full{display:block;margin-top:20px;width:100%;height:auto;max-height:calc(100dvh - 170px);object-fit:contain;filter:grayscale(1)}
.chat-launcher{position:fixed;right:24px;bottom:24px;z-index:6;display:inline-flex;align-items:center;gap:16px;min-height:44px;padding:12px 16px;border:1px solid var(--rule);background:var(--background);font:500 12px/20px var(--body)}
.chat-launcher:hover{text-decoration:underline;text-underline-offset:5px}
.chat-dialog{inset:auto 24px 24px auto;margin:0;width:420px;padding:24px}
.chat-dialog[open]{display:flex;flex-direction:column;height:min(650px,calc(100dvh - 48px))}
.chat-title{font:400 26px/32px var(--display)}
.chat-dialog .dialog-heading{gap:12px;flex:none}
.chat-messages{flex:1;min-height:100px;overflow-y:auto;padding:20px 4px 20px 0;overscroll-behavior:contain;scrollbar-gutter:stable}
.chat-message{font-size:13px;line-height:23px;overflow-wrap:anywhere}
.chat-message+.chat-message{margin-top:24px;padding-top:20px;border-top:1px solid var(--rule)}
.message-author{font-size:11px;line-height:20px;color:var(--muted);margin-bottom:6px}
.visitor-message{padding-left:20px}
.chat-answer-links{display:flex;flex-direction:column;align-items:flex-start;gap:12px;margin-top:16px}
.chat-answer-links .text-link{font-size:12px;white-space:normal}
.chat-suggestions{display:flex;flex-direction:column;border-top:1px solid var(--rule);padding-top:12px;flex:none}
.chat-suggestions button{display:flex;align-items:center;justify-content:space-between;gap:16px;text-align:left;padding:6px 0;min-height:32px;border:0;background:none;color:var(--muted);font-size:12px;line-height:20px}
.chat-suggestions button:hover{color:var(--white);text-decoration:underline;text-underline-offset:4px}
.chat-form{margin-top:16px;flex:none}
.chat-form label{display:block;font-size:12px;line-height:20px;margin-bottom:8px}
.chat-compose{display:flex;border:1px solid var(--rule)}
.chat-compose:focus-within{border-color:var(--white)}
.chat-compose input{min-width:0;width:100%;padding:12px;border:0;background:none;color:var(--white);font:400 13px/20px var(--body);border-radius:0}
.chat-compose input::placeholder{color:var(--muted)}
.chat-compose input:focus-visible{outline:1px solid var(--white);outline-offset:-3px}
.chat-send{flex:none;width:44px;display:flex;align-items:center;justify-content:center;border:0;background:none}
.chat-send:disabled{opacity:.35}
.chat-note{margin-top:6px;color:var(--muted);font-size:11px;line-height:20px}
@media(max-width:1024px){
  .site-sidebar{display:none}
  .content-area{margin-left:0}
  .mobile-bar{display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:5;padding:20px 24px;border-bottom:1px solid var(--rule);background:var(--background);font:500 13px/20px var(--body)}
  .mobile-bar button{border:0;background:none;gap:12px}
  .page-shell{padding-top:40px}
  .home-intro,.page-intro{margin-top:0}
  .chat-launcher{right:16px;bottom:16px}
}
@media(max-width:600px){
  .gallery-grid{grid-template-columns:minmax(0,1fr);gap:28px}
  .folio-tabs button:nth-child(n){padding:14px 16px;font-size:24px;line-height:34px}
  .folio-tabs button[data-sheet-order="0"]{left:24px;width:calc(100% - 24px)}
  .folio-tabs button[data-sheet-order="1"]{left:12px;width:calc(100% - 12px)}
  .folio-tabs button[data-sheet-order="2"]{width:100%}
  .folio-sheet{padding:0 16px 20px}
  .sheet-action{font-size:11px;gap:6px}
  .chat-dialog{inset:auto 12px 12px;margin:0;width:calc(100% - 24px);padding:20px}
  .chat-dialog[open]{height:min(680px,calc(100dvh - 24px));max-height:calc(100dvh - 24px)}
  .chat-title{font-size:24px;line-height:28px}
  .chat-compose input{font-size:16px}
  .chat-dialog .dialog-heading{padding-bottom:14px}
  .chat-suggestions{padding-top:8px}
  .chat-form{margin-top:12px}
  .chat-messages{padding-top:16px}
  .gallery-dialog{width:calc(100% - 24px);padding:16px}
}
@media(max-width:360px){
  .folio-tabs button:nth-child(n){font-size:24px}
  .sheet-action{font-size:0}
  .chat-dialog{padding:16px}
}

/* The editor allows zero to three featured sheets. */
.folio[data-sheet-count="1"] .folio-tabs{height:64px}
.folio[data-sheet-count="2"] .folio-tabs{height:116px}
.folio[data-sheet-count="1"] button[data-sheet-order="0"]{left:0;width:100%}
.folio[data-sheet-count="2"] button[data-sheet-order="0"]{left:18px;width:calc(100% - 18px)}
.folio-tabs button[aria-selected="true"]{left:0;width:100%;border-bottom-color:transparent;color:var(--white);background:var(--sheet)}
