/* Shared public-site finish. Loaded after the original page styles. */
:root {
  --serif:'Fraunces',Georgia,serif;
  --sans:'IBM Plex Sans',system-ui,sans-serif;
  --mono:'IBM Plex Mono',ui-monospace,monospace;
}
*,*::before,*::after { box-sizing:border-box; }
html { font-size:16px; }
body { margin:0; background:var(--paper); color:var(--ink); font-family:var(--sans); line-height:1.7; }
body::selection { background:#cce4dc; }
a { color:inherit; }
button,input { font:inherit; }
a,button,summary { -webkit-tap-highlight-color:#cce4dc; }
:where(a,button,input,summary,[tabindex]):focus-visible { outline:3px solid #25806c !important; outline-offset:4px; border-radius:3px; }
main:focus { outline:none; }
.skip-link { z-index:200; }
.wrap,.topbar-inner { width:100%; max-width:1180px; margin:0 auto; padding-left:2.5rem; padding-right:2.5rem; }
.topbar { position:relative; background:var(--paper); border:0; padding:0; }
.topbar-inner { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; min-height:100px; gap:.5rem 2rem; border-bottom:1px solid var(--rule); }
.topbar .wordmark { display:inline-flex; align-items:center; min-height:44px; font:400 1rem/1.5 var(--sans); letter-spacing:-.025em; color:var(--ink-3); text-decoration:none; white-space:nowrap; }
.topbar .wordmark b { font-weight:600; color:var(--ink); }
.topbar .wordmark>span { margin:0 .45rem; color:var(--ink-3); }
.topbar .topnav { position:static; inset:auto; display:flex; flex-wrap:wrap; align-items:center; justify-content:flex-start; width:auto; margin-left:auto; gap:1.6rem; padding:0; border:0; background:transparent; backdrop-filter:none; }
.topbar .topnav a { display:inline-flex; align-items:center; min-height:44px; padding:0; color:var(--ink-2); font:400 .9375rem/1.5 var(--sans); letter-spacing:0; text-transform:none; text-decoration:none; }
.topbar .topnav a:last-child { color:var(--accent); }
.topbar .topnav a:hover,.topbar .topnav a[aria-current] { text-decoration:underline; text-underline-offset:.45em; text-decoration-thickness:1px; }
.site-footer { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:1rem 2rem; width:100%; padding:2rem 0; border-top:1px solid var(--rule); color:var(--ink-3); font:400 .875rem/1.6 var(--sans); text-align:left; }
.site-footer span,.site-footer a { font:inherit; letter-spacing:0; }
.site-footer>div { display:flex; gap:1.5rem; }
.site-footer a { display:inline-flex; align-items:center; min-height:44px; color:var(--ink-3); text-decoration:none; }
.site-footer a:hover { color:var(--accent); text-decoration:underline; text-underline-offset:.3em; }
.eyebrow,.project-label,.note-row .k,.portfolio-projects .kicker,.portfolio-projects .stamp { font-size:.8125rem; }
.off-clock img { aspect-ratio:4/5; }
.featured-project:first-child { background:var(--ink); border-color:var(--ink); }
.featured-project:first-child :is(h3,h3 a) { color:#f8fafb; }
.featured-project:first-child :is(p,.project-bottom,.project-label) { color:#c0d0d3; }
.featured-project:first-child :is(.project-label>span:last-child,h3 a>span,.project-bottom a) { color:#a3d8c8; }
.featured-project:first-child .project-bottom { border-color:#486068; }
.featured-project:first-child :is(a:hover,a:focus-visible) { color:#d0f0e5; }
.background-details[open]>summary .details-meta span,.project-history details[open]>summary .details-meta span { display:inline-block; transform:rotate(45deg); }
.project-index { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); margin-top:2.5rem; border-top:1px solid var(--rule-2); border-bottom:1px solid var(--rule-2); }
.project-index a { display:flex; align-items:center; justify-content:space-between; gap:1rem; padding:1.15rem 1.3rem; font-size:.9375rem; color:var(--ink-2); text-decoration:none; }
.project-index a:first-child { padding-left:0; }
.project-index a+a { border-left:1px solid var(--rule); }
.project-index span { font:400 .8125rem var(--mono); color:var(--accent); }
.project-index a:hover { color:var(--accent); background:var(--accent-soft); }
.portfolio-projects .metric dt,.portfolio-projects .grid2 .k,.portfolio-projects .stack { font-size:.8125rem; letter-spacing:.03em; }
.portfolio-projects .p-body>p { font-size:1rem; }
.portfolio-projects .p { scroll-margin-top:1.5rem; }
.resume-actions { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:.75rem; margin-top:2rem; margin-bottom:1.5rem; }
.resume-actions>span { font:400 2rem/1.2 var(--serif); letter-spacing:-.03em; }
.resume-actions>div { display:flex; flex-wrap:wrap; gap:.75rem; }
.resume-actions button,.resume-actions a { display:inline-flex; align-items:center; justify-content:center; min-height:44px; padding:.6rem 1rem; border:1px solid var(--rule-2); border-radius:6px; background:transparent; color:var(--ink-2); font-size:.875rem; text-decoration:none; cursor:pointer; }
.resume-actions a { background:var(--ink); border-color:var(--ink); color:#fff; }
.resume-actions button:hover { border-color:var(--accent); color:var(--accent); }
.resume-actions a:hover { background:var(--accent); }
.portfolio-resume .page { border-radius:10px; border-color:var(--rule); box-shadow:0 8px 30px #182c3206; }
.portfolio-resume .skills-table th { text-align:left; vertical-align:top; font-weight:600; color:var(--ink); padding:.18rem .9rem .18rem 0; width:155px; }
.portfolio-resume .skills-table td { font-weight:400; white-space:normal; }
.portfolio-resume .skills-table th { font-size:.9rem; }
@media screen { .portfolio-resume :is(.contact-line,.job-date,h2,h2 .label) { font-size:.8125rem; } }
.portfolio-resume>.wrap:last-of-type { margin-top:3rem; }
.portfolio-notes main { padding:4.5rem 0; }
.portfolio-notes main>.wrap { max-width:960px; }
.portfolio-notes .note-id { font-size:.8125rem; letter-spacing:.06em; }
.portfolio-notes h1 { font:400 clamp(2.5rem,4.7vw,4.2rem)/1.08 var(--serif); letter-spacing:-.045em; max-width:17ch; margin:1.2rem 0 1.7rem; }
.portfolio-notes .standfirst { font-size:1.125rem; line-height:1.8; max-width:64ch; }
.article-context { color:var(--ink-3); font-size:.875rem; line-height:1.7; margin-top:1.5rem; max-width:78ch; }
.portfolio-notes .fmt { font-size:.8125rem; letter-spacing:0; margin-top:1.3rem; }
.article-index { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:0 1.5rem; margin:2.5rem 0 3rem; border-top:1px solid var(--rule-2); border-bottom:1px solid var(--rule-2); }
.article-index a { display:flex; align-items:center; gap:.9rem; min-height:54px; padding:.65rem 0; color:var(--ink-2); font-size:.9375rem; text-decoration:none; }
.article-index span { color:var(--accent); font:400 .8125rem var(--mono); }
.article-index a:hover { text-decoration:underline; text-underline-offset:.3em; color:var(--accent); }
.portfolio-notes article.ticket { background:#fff; border:1px solid var(--rule); border-radius:10px; padding:2rem; margin:0 0 1.5rem; scroll-margin-top:1.5rem; }
.portfolio-notes article.ticket h2 { display:flex; align-items:baseline; gap:.9rem; font:400 1.65rem/1.3 var(--serif); letter-spacing:-.025em; margin:0 0 1.5rem; }
.portfolio-notes article.ticket h2 span { font-size:.8125rem; color:var(--accent); margin:0; }
.portfolio-notes .row { grid-template-columns:8.5rem minmax(0,1fr); gap:.4rem 1.4rem; margin-bottom:1.2rem; }
.portfolio-notes .row:last-child { margin-bottom:0; }
.portfolio-notes .row .k { font-size:.75rem; letter-spacing:.025em; padding-top:.3rem; }
.portfolio-notes .row p { font-size:1rem; }
.portfolio-notes .row.rule p { padding:.75rem 1rem; border-radius:6px; }
.portfolio-notes .method { padding:1.6rem 0 0; margin-top:2.5rem; border-color:var(--rule); }
.portfolio-notes .method .k { font-size:.8125rem; letter-spacing:.04em; }
.portfolio-notes .method p { font-size:1.4rem; line-height:1.5; }
.portfolio-itinera { --bg:var(--paper); --surface:#fff; --surface-hover:#eff5f2; --text-primary:var(--ink); --text-secondary:var(--ink-2); --text-muted:var(--ink-3); --border:var(--rule); --border-accent:#9fbeb3; --accent-2:#605277; --accent-3:var(--accent); overflow-x:visible; }
.portfolio-itinera main { max-width:1180px; padding:4.5rem 2.5rem 2rem; }
.portfolio-itinera h1 { font:400 clamp(3rem,6vw,5.5rem)/1.05 var(--serif); letter-spacing:-.05em; margin:0 0 1.5rem; }
.explorer-subtitle { display:block; font-size:.43em; line-height:1.4; letter-spacing:-.025em; margin-top:.35em; color:var(--ink-2); }
.portfolio-itinera .lede { font-size:1.125rem; max-width:58ch; margin-bottom:1rem; }
.project-context { font-size:.9375rem; color:var(--ink-3); max-width:78ch; margin-bottom:1.5rem; }
.project-context a { color:var(--accent); text-underline-offset:.2em; }
.portfolio-itinera .tag { font-size:.8125rem; border-radius:5px; }
.portfolio-itinera .tags { margin-bottom:2.5rem; }
.portfolio-itinera .explorer,.portfolio-itinera .tooltip { --accent:#a3d8c8; --accent-3:#a3d8c8; --text-primary:#f0f4f8; --text-secondary:#bccbd3; --text-muted:#a3b5c0; --surface:#101a24; --surface-hover:#21323c; --border:#354651; --border-accent:#70978c; background:#0d151d; color:var(--text-primary); }
.portfolio-itinera .explorer { border-radius:12px; box-shadow:0 12px 32px #182c320b; }
.figure-tabs { gap:.4rem; }
.figure-tab,.btn-ghost { min-height:44px; font-size:.8125rem; }
.figure-tab.active { background:#243e3c; border-color:#70978c; color:#b6e7d8; }
.searchbox input { min-height:44px; font-size:.875rem; }
.search-result { min-height:44px; font-size:.875rem; }
.search-result .r-role { font-size:.75rem; }
.explorer :focus-visible { outline-color:#a3d8c8 !important; outline-offset:2px; }
.legend { font-size:.75rem; }
.legend .hint { font-size:.75rem; }
.zoom-controls button { width:44px; height:44px; }
.status-line,.demo-banner { font-size:.8125rem; }
.panel[hidden] { display:none; }
.panel { width:320px; }
.panel h3 { font-family:var(--serif); font-size:1.4rem; font-weight:400; padding-right:1.7rem; margin-top:.3rem; }
.panel h3:focus { outline:none; }
.panel-close { width:44px; height:44px; padding:0; top:.25rem; right:.25rem; font-size:1.25rem; color:#bccbd3; }
.panel .p-role,.panel .p-sub,.panel .p-dates,.p-conn .c-rel { font-size:.75rem; }
.panel .p-expand { min-height:44px; font-size:.8125rem; }
.p-conn { min-height:44px; font-size:.875rem; padding:.5rem; }
.portfolio-itinera .hint-line { font-size:.875rem; margin:1rem 0 2rem; }
.data-credit { font-size:.8125rem; color:var(--ink-3); margin-top:1rem; }
.data-credit a { text-underline-offset:.2em; }
.portfolio-itinera section { padding:2.5rem 0; margin:0; border-top:1px solid var(--rule); }
.portfolio-itinera section h2 { font:400 2rem/1.2 var(--serif); letter-spacing:-.025em; }
.portfolio-itinera .prose { font-size:1rem; max-width:76ch; }
.portfolio-itinera .prose a { text-decoration:underline; text-underline-offset:.2em; }
.network-state { position:absolute; inset:45% 2rem auto; z-index:2; text-align:center; color:#bccbd3; font-size:1rem; }
.network-state[hidden] { display:none; }
.explorer .link-label { display:none; }
.explorer button:disabled,.explorer input:disabled { opacity:.45; cursor:default; }
.portfolio-itinera .card p { font-size:.9375rem; }
.portfolio-itinera .card code { font-size:.8125rem; }
.portfolio-itinera .cards-3 { grid-template-columns:repeat(3,minmax(0,1fr)); }
.error-main { padding-top:5rem; padding-bottom:5rem; min-height:calc(100vh - 214px); }
.error-main h1 { font:400 clamp(3.5rem,8vw,6rem)/1.05 var(--serif); letter-spacing:-.055em; margin:0 0 2rem; }
.error-main h1 em { color:var(--accent); font-style:normal; }
.error-main>p:not(.eyebrow) { max-width:40ch; font-size:1.125rem; color:var(--ink-2); }
.error-links { display:flex; flex-wrap:wrap; gap:2rem; margin-top:2rem; }
@media(max-width:960px) {
  .wrap,.topbar-inner { padding-left:1.5rem; padding-right:1.5rem; }
  .topbar .topnav { gap:1.2rem; }
  .portfolio-itinera main { padding-left:1.5rem; padding-right:1.5rem; }
  .portfolio-itinera .cards-3 { grid-template-columns:1fr; }
}
@media(max-width:700px) {
  .topbar-inner { min-height:0; padding-top:1rem; padding-bottom:.75rem; gap:.4rem; }
  .topbar .wordmark { font-size:.9375rem; }
  .topbar .topnav { width:100%; margin-left:0; gap:1.35rem; }
  .site-footer { align-items:flex-start; gap:.3rem 1rem; padding:1.5rem 0; }
  .site-footer>div { width:100%; }
  .project-index { grid-template-columns:1fr; margin-top:2rem; }
  .project-index a,.project-index a:first-child { padding:.9rem 0; }
  .project-index a+a { border-left:0; border-top:1px solid var(--rule); }
  .resume-actions { align-items:flex-start; gap:1.2rem; }
  .portfolio-resume .page { margin:0 1.5rem; border-radius:8px; padding:1.5rem; width:auto; }
  .portfolio-notes main { padding:3rem 0; }
  .article-index { grid-template-columns:repeat(2,minmax(0,1fr)); gap:0 1rem; margin:2rem 0; }
  .article-index a { gap:.5rem; font-size:.875rem; }
  .portfolio-notes article.ticket { padding:1.5rem; }
  .portfolio-notes article.ticket h2 { font-size:1.45rem; }
  .portfolio-notes .row { grid-template-columns:1fr; gap:.4rem; margin-bottom:1.4rem; }
  .portfolio-notes .row .k { font-size:.8125rem; }
  .portfolio-itinera main { padding-top:3rem; }
  .portfolio-itinera h1 { font-size:3.5rem; }
  .explorer-subtitle { font-size:.45em; max-width:16ch; }
  .explorer-bar { padding:1rem; }
  .figure-tabs { width:100%; display:grid; grid-template-columns:1fr 1fr; }
  .figure-tab { font-size:.75rem; padding:.5rem; }
  .searchbox { flex:1; min-width:0; }
  .searchbox input { width:100%; }
  .legend { top:.75rem; left:.75rem; padding:.55rem .7rem; font-size:.6875rem; line-height:1.7; }
  .legend .hint { display:none; }
  #network { height:580px; }
  .panel { top:.75rem; right:.75rem; bottom:.75rem; max-width:calc(100% - 1.5rem); }
  .portfolio-itinera section { padding:2rem 0; }
  .error-main { padding-top:3rem; padding-bottom:3rem; }
}
@media(max-width:360px) {
  .wrap,.topbar-inner { padding-left:1.1rem; padding-right:1.1rem; }
  .topbar .wordmark { font-size:.875rem; }
  .topbar .topnav { justify-content:space-between; gap:.6rem; }
  .topbar .topnav a { font-size:.875rem; }
  .portfolio-itinera main { padding-left:1.1rem; padding-right:1.1rem; }
  .portfolio-notes article.ticket { padding:1.15rem; }
  .portfolio-resume .page { margin:0 1.1rem; padding:1.1rem; }
  .article-index a { font-size:.8125rem; }
}
@media(prefers-reduced-motion:reduce) { *,*::before,*::after { scroll-behavior:auto !important; transition:none !important; animation:none !important; } }
@media print {
  @page { size:Letter; margin:.55in; }
  .topbar,.site-footer,.resume-actions,.skip-link { display:none !important; }
  .portfolio-resume .page { width:auto; max-width:none; margin:0; border:0; border-radius:0; box-shadow:none; padding:0; }
  .portfolio-resume { background:#fff; }
  .portfolio-resume { font-size:10pt; line-height:1.4; }
  .portfolio-resume h1 { font-size:24pt; }
  .portfolio-resume h2 { font-size:9pt; margin:1.2rem 0 .55rem; }
  .portfolio-resume :is(.contact-line,.job-date,h2 .label) { font-size:9pt; line-height:1.5; }
  .portfolio-resume :is(.skills-table td,.skills-table th) { font-size:9.5pt; }
  .portfolio-resume .job { margin-bottom:.75rem; }
}
