:root{--bg: oklch(97% .01 88);--bg-raised: oklch(95% .01 88);--surface: oklch(100% 0 88);--ink: oklch(25% .02 88);--ink-soft: oklch(50% .02 88);--ink-muted: oklch(50% .01 88);--ink-faint: oklch(67% .02 88);--rule: oklch(77% .02 88 / .4);--mono-ink: oklch(70% .02 88);--accent: oklch(21% .01 88);--accent-warm: oklch(65% .1 88);--chip-bg: transparent;--chip-bg-on: oklch(21% .01 88);--chip-ink: oklch(34% .01 88);--chip-ink-on: oklch(98% .01 88);--chip-rule: oklch(82% .02 88);--chip-rule-on: oklch(21% .01 88);--chip-disabled-ink: oklch(82% .02 88);--chip-disabled-rule:oklch(93% .02 88);--font-serif: "Fraunces", Georgia, "Times New Roman", serif;--font-sans: "Fraunces", Georgia, "Times New Roman", serif;--font-mono: "Figtree", system-ui, -apple-system, "Segoe UI", sans-serif;--measure: 56rem;--gutter: clamp(1.25rem, 1rem + 2vw, 2.5rem);--t-fast: .12s ease;--t-base: .2s ease}*{box-sizing:border-box}html,body{margin:0}html{-webkit-text-size-adjust:100%;scrollbar-gutter:stable}body{background-color:var(--bg);color:var(--ink);font-family:var(--font-sans);font-size:18px;line-height:1.55;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}::selection{background:var(--ink);color:var(--bg)}a{color:inherit;text-decoration:none}.page{max-width:var(--measure);margin-inline:auto;padding:clamp(2rem,1rem + 4vw,4rem) var(--gutter) 6rem}.intro{padding-bottom:.75rem}.portrait{display:block;width:clamp(72px,6vw + 48px,96px);height:clamp(72px,6vw + 48px,96px);border-radius:50%;object-fit:cover;margin:0 0 .85rem;box-shadow:0 0 0 1px var(--rule)}.name{font-family:var(--font-serif);font-style:italic;font-weight:500;font-size:clamp(3rem,1.6rem + 4vw,4.8rem);line-height:1.05;letter-spacing:-.02em;margin:0 0 .35rem}.tagline{font-family:var(--font-serif);font-weight:600;font-size:1.4rem;letter-spacing:-.01em;color:var(--ink);margin:0}.about{font-family:var(--font-serif);font-size:18px;font-variation-settings:"wght" 360;line-height:1.45;color:var(--ink-soft);margin:.9rem 0 0;text-wrap:pretty}.about a{border-bottom:1px solid var(--rule)}.about a:hover{border-bottom-color:var(--ink);color:var(--ink)}.links{display:flex;gap:1rem;flex-wrap:wrap;font-family:var(--font-mono);font-weight:600;font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;list-style:none;margin:0 0 1rem;padding:0}.links a{color:var(--ink-soft);border-bottom:1px solid var(--rule);padding-bottom:2px;transition:color var(--t-fast),border-color var(--t-fast)}.links a:hover{color:var(--ink);border-bottom-color:var(--ink)}.filters{margin-top:0;padding:.25rem 0}.filter-row{display:grid;grid-template-columns:4.5rem 1fr;gap:.6rem;align-items:baseline;padding:.15rem 0}.filter-label{font-family:var(--font-mono);font-weight:600;font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;color:var(--mono-ink);margin:0}.chips{display:flex;flex-wrap:wrap;gap:.35rem .4rem;list-style:none;margin:0;padding:0}.chip{appearance:none;-webkit-appearance:none;background:none;font:inherit;font-family:var(--font-mono);font-weight:600;font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;color:var(--mono-ink);border:1px solid var(--rule);border-radius:999px;padding:.1rem .45rem .15rem;cursor:pointer;white-space:nowrap;transition:color var(--t-fast),border-color var(--t-fast),background var(--t-fast)}.chip:hover:not(:disabled):not([aria-pressed=true]){color:var(--ink);border-color:var(--ink)}.chip[aria-pressed=true]{color:var(--bg);background:var(--ink);border-color:var(--ink)}.chip:disabled{color:var(--chip-disabled-ink);border-color:var(--chip-disabled-rule);cursor:not-allowed}.chip:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.time-toggle{display:flex;align-items:baseline;flex-wrap:wrap;gap:.55rem}.time-option{appearance:none;background:none;border:none;font:inherit;font-family:var(--font-mono);font-weight:600;font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;color:var(--mono-ink);cursor:pointer;padding:0 0 2px;border-bottom:1px solid transparent;transition:color var(--t-fast),border-color var(--t-fast)}.time-option:hover{color:var(--ink)}.time-option[aria-checked=true]{color:var(--ink);border-bottom-color:var(--ink)}.time-option:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.time-sep{font-family:var(--font-mono);font-weight:600;font-size:.66rem;color:var(--mono-ink)}.catalog{margin-top:1rem}.catalog-section{margin:2.5rem 0}.catalog-section[hidden]{display:none}.section-heading{font-family:var(--font-mono);font-weight:600;font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;color:var(--mono-ink);margin:0 0 1rem;padding-bottom:.55rem;border-bottom:1px solid var(--rule)}.role-list,.project-list,.flat-list{list-style:none;margin:0;padding:0}.role-block{padding:1.25rem 0 .75rem}.role-block[hidden],.role-header[hidden]{display:none}.role-title-line{display:grid;grid-template-columns:1fr auto;align-items:baseline;gap:1rem;margin-bottom:.15rem}.role-title{font-family:var(--font-serif);font-weight:600;font-size:1.4rem;letter-spacing:-.01em;margin:0;color:var(--ink)}.copy-btn{appearance:none;background:none;border:0;padding:.15rem;margin-left:.4rem;color:var(--mono-ink);cursor:pointer;vertical-align:.18em;display:inline-flex;align-items:center;position:relative;transition:color var(--t-fast)}.copy-btn:hover{color:var(--ink)}.copy-btn:focus-visible{outline:2px solid var(--ink);outline-offset:2px;border-radius:3px}.copy-feedback{position:absolute;left:calc(100% + .4rem);top:50%;transform:translateY(-50%);font-family:var(--font-mono);font-weight:600;font-size:.6rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ink);white-space:nowrap;opacity:0;transition:opacity var(--t-fast);pointer-events:none}.copy-btn.is-copied .copy-feedback,.copy-btn.is-failed .copy-feedback{opacity:1}.copy-btn.is-failed .copy-feedback,.copy-btn.is-over{color:var(--accent-warm)}.role-meta{font-family:var(--font-mono);font-weight:600;font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;color:var(--mono-ink);margin:0 0 .55rem}.role-meta .sep{color:var(--mono-ink);margin:0 .4em}.role-prose{font-family:var(--font-serif);font-size:18px;font-variation-settings:"wght" 360;line-height:1.45;color:var(--ink-soft);margin:0 0 .6rem;text-wrap:pretty}.role-prose p{margin:0 0 .6rem}.role-prose p:last-child{margin-bottom:0}.project-list{margin-top:.6rem;padding-left:1.25rem;border-left:1px solid var(--rule)}.project-row{padding:.85rem 0 .4rem}.project-row[hidden]{display:none}.project-title-line{display:grid;grid-template-columns:1fr auto;align-items:baseline;gap:1rem;margin-bottom:.1rem}.project-title{font-family:var(--font-serif);font-style:italic;font-weight:500;font-size:1.05rem;letter-spacing:-.005em;margin:0;color:var(--ink)}.project-blurb{font-family:var(--font-serif);font-size:16.5px;font-variation-settings:"wght" 360;line-height:1.5;color:var(--ink-soft);margin:0 0 .5rem;text-wrap:pretty}.project-blurb p{margin:0 0 .5rem}.project-blurb p:last-child{margin-bottom:0}.project-blurb a{border-bottom:1px solid var(--rule)}.project-blurb a:hover{border-bottom-color:var(--ink);color:var(--ink)}.flat-row{padding:1.1rem 0}.flat-row[hidden]{display:none}.flat-title-line{display:grid;grid-template-columns:1fr auto;align-items:baseline;gap:1rem;margin-bottom:.15rem}.flat-title{font-family:var(--font-serif);font-weight:500;font-size:1.15rem;letter-spacing:-.005em;margin:0;color:var(--ink)}.flat-meta{font-family:var(--font-mono);font-weight:600;font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;color:var(--mono-ink);margin:0 0 .5rem}.flat-meta .sep{color:var(--mono-ink);margin:0 .4em}.flat-meta a{border-bottom:1px solid var(--rule);transition:color var(--t-fast),border-color var(--t-fast)}.flat-meta a:hover{color:var(--ink);border-bottom-color:var(--ink)}.flat-blurb{font-family:var(--font-serif);font-size:18px;font-variation-settings:"wght" 360;line-height:1.45;color:var(--ink-soft);margin:0 0 .6rem;text-wrap:pretty}.flat-blurb p{margin:0 0 .6rem}.flat-blurb p:last-child{margin-bottom:0}.flat-blurb a{border-bottom:1px solid var(--rule)}.flat-blurb a:hover{border-bottom-color:var(--ink);color:var(--ink)}.year{font-family:var(--font-mono);font-weight:600;font-size:.66rem;color:var(--mono-ink);letter-spacing:.08em;text-transform:uppercase;white-space:nowrap}.row-tags{display:flex;flex-wrap:wrap;gap:.3rem;list-style:none;margin:0;padding:0}.row-tag{appearance:none;background:none;font:inherit;font-family:var(--font-mono);font-weight:600;font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;color:var(--mono-ink);padding:.1rem .45rem .15rem;border:1px solid var(--rule);border-radius:999px;cursor:pointer;transition:color var(--t-fast),border-color var(--t-fast),background var(--t-fast)}.row-tag:hover{color:var(--ink);border-color:var(--ink)}.row-tag[aria-pressed=true]{color:var(--bg);background:var(--ink);border-color:var(--ink)}.row-tag:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.empty{padding:2rem 0;font-family:var(--font-serif);font-style:italic;color:var(--mono-ink);border-top:1px solid var(--rule);border-bottom:1px solid var(--rule)}.empty[hidden]{display:none}.contact{margin-top:4rem;padding:2rem 0 0;border-top:1px solid var(--rule);display:grid;grid-template-columns:1fr auto;gap:1rem;align-items:baseline}.contact h2{font-family:var(--font-serif);font-weight:500;font-size:1.6rem;letter-spacing:-.01em;margin:0 0 .2rem}.contact p{margin:0;color:var(--ink-soft);font-family:var(--font-serif);font-size:1rem}.contact .email{font-family:var(--font-mono);font-weight:600;font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ink);border-bottom:1px solid var(--ink);padding-bottom:2px}footer.foot{margin-top:4rem;font-family:var(--font-mono);font-weight:600;font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;color:var(--mono-ink);display:flex;justify-content:space-between;gap:1rem}@media(max-width:640px){.filter-row{grid-template-columns:1fr;gap:.4rem}.filter-label{padding-top:0}.contact{grid-template-columns:1fr}.project-list{padding-left:.75rem}}@media(prefers-reduced-motion:reduce){*{transition:none!important}}@supports (view-transition-name: none){::view-transition-old(root),::view-transition-new(root){animation-duration:.18s;animation-timing-function:ease}}
