@font-face {font-family:'IBM Plex Mono';src:url('/assets/fonts/ibm-plex-mono-regular.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap;}
#build-page:not([data-ready='true']) {visibility:hidden;}
html[data-restoring-build] .hero-scroll,html[data-restoring-build] .site-header,html[data-restoring-build] .skip-link,html[data-restoring-build] #build-page:not([data-ready='true']) {visibility:hidden;}
/* The current single-screen layout applies on the first paint, before fonts
   or JS are ready. The old scroll layout must not load or shift underneath it. */
html,body {overflow:hidden;}
html .portfolio-body {display:none;}
html .hero-stage {height:100dvh;min-height:0;}
.build-page.swallow-end {display:block;padding:0;text-align:left;overflow:hidden;}
.build-frame {--build-row-gap:14px;width:100%;max-width:var(--site-max);height:100dvh;margin:auto;padding:0 var(--gutter);display:grid;grid-template-rows:96px minmax(0,1fr) 142px 70px;gap:var(--build-row-gap);}
.build-header {display:flex;align-items:center;justify-content:space-between;gap:20px;}
.build-home {display:flex;align-items:center;min-height:44px;padding:0;border:0;background:none;cursor:pointer;}
.build-home img {width:128px;height:auto;}
.build-layout {position:relative;display:grid;grid-template-columns:208px minmax(0,1fr) 122px;gap:22px;min-height:0;}
.build-layout::after {content:'';position:absolute;left:0;right:0;bottom:calc(var(--build-row-gap)*-.5);height:1px;background:color-mix(in srgb,var(--ink) 24%,transparent);pointer-events:none;}
.build-index {position:relative;display:grid;grid-template-rows:minmax(0,1fr) 20px;min-height:0;}
.build-index::after {content:'';position:absolute;top:0;bottom:calc(var(--build-row-gap)*-.5);right:0;width:1px;background:color-mix(in srgb,var(--ink) 24%,transparent);pointer-events:none;}
.build-index-help {margin:0;font:9px 'JetBrains Mono',monospace;opacity:.56;letter-spacing:.045em;}
.build-index-help {align-self:end;}
.build-curve {position:relative;min-height:0;touch-action:pan-x;cursor:grab;isolation:isolate;}
.build-curve {--build-rail-sage:#a7bdab;--build-rail-offset:18px;--build-rail-buffer:24px;}
.build-rail-guide,.build-rail-weave {position:absolute;inset:0;display:block;width:100%;height:100%;pointer-events:none;}
.build-rail-weave {left:calc(-1*var(--build-rail-buffer));right:auto;width:calc(100% + var(--build-rail-buffer));transform:translateX(calc(-1*var(--build-rail-offset)));}
.build-rail-guide path {fill:none;stroke:var(--ink);stroke-width:1;opacity:.18;}
.build-choice {--card-height:clamp(38px,calc((100dvh - 350px)/10.4),68px);position:absolute;top:0;left:0;width:114px;height:var(--card-height);padding:4px;border:1px solid color-mix(in srgb,var(--ink) 23%,transparent);border-radius:2px;background:#111512;cursor:pointer;text-align:left;display:grid;grid-template-rows:minmax(0,1fr) 14px;gap:3px;will-change:transform;}
.build-choice img {width:100%;height:100%;min-height:0;object-fit:cover;opacity:.64;filter:saturate(.7);transition:opacity 160ms,filter 160ms;}
.build-choice[data-build='who-am-i'] img {object-fit:contain;}
.build-card-name {display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:9px 'JetBrains Mono',monospace;line-height:14px;}
.build-choice[aria-selected='true'] {border-color:var(--ink);background:#22271f;}
.build-choice[aria-selected='true']::after {content:'›';position:absolute;left:calc(100% + 7px);top:50%;transform:translateY(-50%);font:18px 'JetBrains Mono',monospace;}
.build-choice[aria-selected='true'] img,.build-choice:hover img {opacity:1;filter:saturate(1);}
.build-choice:focus-visible,.build-other-card:focus-visible {outline-offset:3px;}
.build-copy {--project-frame-outset:12px;--project-frame-clearance:clamp(0px,calc((100vw - 700px)*.25),40px);min-width:0;min-height:0;display:flex;flex-direction:column;padding:6px 0 0;}
.build-copy h2 {margin:0 0 12px;font:500 clamp(23px,2.8vw,36px) 'JetBrains Mono',monospace;letter-spacing:-.065em;line-height:1.1;}
.build-copy h2:focus {outline:none;}
.build-intro {margin:0 0 8px;font:400 14px 'JetBrains Mono',monospace;line-height:1.55;}
.build-description {margin:0;font:400 11px 'JetBrains Mono',monospace;line-height:1.7;opacity:.7;max-width:56ch;}
.build-project-links {display:flex;flex-wrap:wrap;gap:12px;margin:12px 0 0;font:11px 'JetBrains Mono',monospace;line-height:1.6;}
.build-project-links a {min-height:28px;display:flex;align-items:center;gap:7px;text-decoration:underline;text-underline-offset:4px;}
.build-page .ui-icon {width:11px;height:11px;flex-shrink:0;}
.build-char {white-space:pre-wrap;}
.build-typed {overflow-wrap:anywhere;}
.build-presentation {display:flex;flex-direction:column;flex:1;min-height:0;margin:18px 0 0;}
.build-art {flex:1;min-height:0;position:relative;display:flex;justify-content:center;align-items:center;overflow:hidden;background:#101410;border:1px solid color-mix(in srgb,var(--ink) 18%,transparent);}
.build-cover-link {position:relative;display:flex;width:100%;height:100%;min-height:0;align-items:center;justify-content:center;}
.build-cover-reflection {position:absolute;inset:0;display:block;width:100%;height:100%;pointer-events:none;z-index:1;}
.build-cover-link>img {width:100%;height:100%;min-height:0;object-fit:contain;transition:filter 180ms;}
.build-cover-link:focus-visible {outline-offset:-3px;}
.build-cover-hint {position:absolute;bottom:14px;right:14px;z-index:2;display:flex;gap:16px;align-items:center;padding:9px 12px;background:var(--bg);border:1px solid color-mix(in srgb,var(--ink) 40%,transparent);font:11px 'IBM Plex Mono',monospace;transition:background 220ms,color 220ms,border-color 220ms;}
.build-page:not([data-project='who-am-i']) .build-art {--cover-shadow:0 0 0 2px var(--brand-ink),12px 14px 0 2px color-mix(in srgb,var(--brand-ink) 38%,var(--bg)),20px 24px 28px #0008;border:1px solid color-mix(in srgb,var(--brand-ink) 38%,var(--bg));transition:transform 260ms cubic-bezier(.22,.8,.25,1),box-shadow 260ms,border-color 260ms;transform-origin:center top;}
.build-art:has(.build-cover-link:focus-visible) {transform:translateY(-3px) scale(1.08);border-color:var(--brand-ink);box-shadow:var(--cover-shadow);}
.build-cover-link:focus-visible>img {filter:saturate(1.04);}
.build-cover-link:focus-visible .build-cover-hint {background:#030504;color:var(--brand-ink);border-color:var(--brand-ink);}
@media(hover:hover) and (pointer:fine) {
  .build-art:has(.build-cover-link:hover) {transform:translateY(-3px) scale(1.08);border-color:var(--brand-ink);box-shadow:var(--cover-shadow);}
  .build-cover-link:hover>img {filter:saturate(1.04);}
  .build-cover-link:hover .build-cover-hint {background:#030504;color:var(--brand-ink);border-color:var(--brand-ink);}
}
@media(prefers-reduced-motion:reduce) {
  .build-cover-reflection {display:none;}
  .build-page .build-art:has(.build-cover-link) {transform:none;}
}
.build-art[data-project='jerb'] {background:radial-gradient(ellipse at center,#171c18,#0b0d0c);}
.build-art[data-project='jerb'] .build-cover-link>img {padding:20px;}
.build-art[data-project='anytinsystems'] {background:#edf0d6;}
.build-art[data-project='anytinsystems'] .build-cover-link>img {padding:28px;}
.build-eye-lane {position:relative;min-height:0;pointer-events:none;}
.build-eye-housing {position:absolute;width:120%;top:16px;right:0;}
#build-eye {display:block;width:100%;height:auto;aspect-ratio:1.15;}
#build-eye-readout {margin:6px 0 0;font:8px 'JetBrains Mono',monospace;opacity:.45;text-align:center;white-space:nowrap;}
.build-eye-caption {margin:5px 0 0;font:7px 'JetBrains Mono',monospace;opacity:.35;text-align:center;}
#build-rays {position:fixed;inset:0;width:100%;height:100%;z-index:3;pointer-events:none;color:var(--portrait-ink);overflow:visible;}
#build-rays line {fill:none;stroke:currentColor;stroke-width:1;stroke-dasharray:3 5;opacity:.58;}
#build-rays #build-scan-ray {stroke-dasharray:2 3;opacity:.75;}
#build-rays text {font:8px 'JetBrains Mono',monospace;fill:currentColor;opacity:.8;paint-order:stroke;stroke:var(--bg);stroke-width:3px;stroke-linejoin:round;}
#build-scan-marker {fill:none;stroke:currentColor;stroke-width:1;}
.build-other {min-height:0;display:grid;grid-template-rows:20px minmax(0,1fr);gap:10px;padding-top:8px;}
.build-other-heading {display:flex;align-items:center;justify-content:space-between;gap:20px;}
.build-other-heading h3,.build-other-heading span {margin:0;font:9px 'JetBrains Mono',monospace;font-weight:400;letter-spacing:.04em;opacity:.6;}
.build-other-cards {display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:12px;min-height:0;}
.build-other-card {min-width:0;min-height:0;padding:0;border:0;background:none;display:grid;grid-template-rows:minmax(0,1fr) 19px;gap:6px;text-align:left;cursor:pointer;}
.build-other-card img {width:100%;height:100%;min-height:0;object-fit:cover;border:1px solid color-mix(in srgb,var(--ink) 16%,transparent);opacity:.55;filter:saturate(.55);transition:opacity 180ms,filter 180ms,border-color 180ms;}
.build-other-card:hover img,.build-other-card[aria-pressed='true'] img {opacity:1;filter:saturate(1);border-color:var(--ink);}
.build-other-card .build-card-name {font-size:10px;}
.build-footer {display:flex;align-items:center;justify-content:space-between;gap:20px;border-top:1px solid color-mix(in srgb,var(--ink) 15%,transparent);}
.build-footer nav {width:100%;display:flex;align-items:center;justify-content:space-between;gap:18px;font:11px 'JetBrains Mono',monospace;}
.build-footer a {min-height:44px;display:flex;align-items:center;gap:8px;}
.build-footer a::before {content:'//';opacity:.4;}
.build-footer a:hover {text-decoration:underline;text-underline-offset:5px;}
.build-footer .ui-icon {width:14px;height:14px;flex:0 0 14px;opacity:.8;}
.build-footer .ui-icon-mail {--icon:url('/assets/icons/envelope.svg');}
.build-footer .ui-icon-linkedin {--icon:url('/assets/icons/linkedin.svg');}
.build-footer .ui-icon-github {--icon:url('/assets/icons/github.svg');}
.build-footer a:hover .ui-icon,.build-footer a:focus-visible .ui-icon {opacity:1;}

.build-about-panel {width:100%;height:100%;display:block;padding:0;overflow:hidden;}
.build-photo-matrix {width:100%;height:100%;min-height:0;display:flex;flex-direction:column;justify-content:center;}
.build-photo-matrix figcaption {flex:none;margin:0 0 8px;font:10px 'JetBrains Mono',monospace;line-height:1.5;}
.build-photo-matrix[data-activities-ready] figcaption {padding-left:max(0px,calc((100cqw - var(--activity-frame-width,0px) - var(--activity-frame-rail,0px) - var(--activity-frame-gap,8px))/2));}
.build-photo-matrix[data-activities-ready] .activities-gallery {flex:none;grid-template-columns:var(--activity-frame-width,0px) var(--activity-frame-rail,0px);grid-template-rows:minmax(0,1fr);height:var(--activity-frame-height,0px);gap:var(--activity-frame-gap,8px);}




@media(max-height:820px) and (min-width:701px) {
  .build-frame {--build-row-gap:8px;grid-template-rows:76px minmax(0,1fr) 104px 50px;}
  .build-layout {grid-template-columns:180px minmax(0,1fr) 100px;gap:18px;}
  .build-choice {width:100px;--card-height:clamp(30px,calc((100dvh - 280px)/10.8),49px);grid-template-rows:minmax(0,1fr) 11px;gap:1px;padding:3px;}
  .build-card-name {font-size:8px;line-height:11px;}
  .build-copy h2 {font-size:25px;margin-bottom:8px;}.build-intro {font-size:12px;margin-bottom:5px;}.build-description {font-size:10px;line-height:1.55;}.build-project-links {margin-top:5px;font-size:10px;}.build-presentation {margin-top:8px;}
}
@media(max-width:1000px) {.build-layout {grid-template-columns:180px minmax(0,1fr) 90px;gap:16px;}.build-choice {width:98px;}.build-description {font-size:10px;}.build-other-cards {gap:9px;}}
@media(max-width:700px) {
  .build-curve {--build-rail-offset:6px;}
  .build-frame {--build-row-gap:10px;padding:0 16px;grid-template-rows:68px minmax(0,1fr) 122px 54px;}
  .build-home img {width:106px;}
  .build-layout {grid-template-columns:108px minmax(0,1fr) 48px;gap:9px;}
  .build-index {grid-template-rows:minmax(0,1fr) 14px;}
  .build-index-help {font-size:6px;letter-spacing:0;}
  .build-choice {width:66px;--card-height:clamp(32px,calc((100dvh - 275px)/11),54px);padding:2px;grid-template-rows:minmax(0,1fr) 10px;gap:2px;}
  .build-card-name {font-size:6px;line-height:10px;}.build-choice[aria-selected='true']::after {left:calc(100% + 3px);font-size:13px;}
  .build-copy {padding-top:0;}.build-copy h2 {font-size:21px;line-height:1.12;margin-bottom:10px;letter-spacing:-.07em;}
  .build-intro {font-size:11px;line-height:1.5;}.build-description {font-size:9px;line-height:1.65;}.build-project-links {font-size:8px;margin-top:7px;gap:6px;}.build-project-links a {min-height:25px;}
  .build-presentation {margin-top:10px;}.build-media-footer {min-height:32px;gap:4px;font-size:7px;}.build-slide-controls {gap:1px;}.build-media-footer button {min-width:23px;padding:0 2px;}
  #build-eye-readout {font-size:5px;letter-spacing:-.06em;}.build-eye-caption {font-size:4px;}
  #build-rays text {font-size:6px;}#build-rays line {stroke-width:.75;opacity:.5;}
  .build-other {grid-template-rows:13px minmax(0,1fr);gap:5px;padding-top:0;}.build-other-heading h3,.build-other-heading span {font-size:7px;}
  .build-other-cards {grid-template-columns:repeat(3,minmax(0,1fr));grid-template-rows:repeat(2,minmax(0,1fr));gap:6px 10px;}
  .build-other-card {grid-template-rows:minmax(0,1fr) 11px;gap:3px;}.build-other-card .build-card-name {font-size:7px;line-height:11px;}
  .build-footer nav {font-size:9px;gap:10px;}.build-footer a {gap:4px;}.build-footer a::before {display:none;}
  .build-photo-matrix figcaption {font-size:8px;}
}
@media(max-width:380px) {.build-frame {padding:0 10px;}.build-layout {grid-template-columns:95px minmax(0,1fr) 38px;gap:7px;}.build-choice {width:57px;}.build-copy h2 {font-size:18px;}.build-description {font-size:8px;}.build-intro {font-size:10px;}}
@media(max-height:660px) and (max-width:700px) {.build-frame {--build-row-gap:6px;grid-template-rows:52px minmax(0,1fr) 96px 42px;}.build-choice {--card-height:28px;grid-template-rows:minmax(0,1fr) 8px;gap:0;}.build-card-name {font-size:5px;line-height:8px;}.build-copy h2 {font-size:17px;margin-bottom:6px;}.build-intro {font-size:9px;}.build-description {font-size:7px;line-height:1.4;}.build-presentation {margin-top:5px;}.build-project-links {margin-top:3px;font-size:7px;}}
@media(prefers-reduced-motion:reduce) {.build-page * {scroll-behavior:auto!important;transition:none!important;}.build-eye-housing,.build-choice {will-change:auto;}}

.build-about-copy {position:relative;flex:none;margin-inline-end:clamp(0px,calc((100vw - 700px)*.25),40px);font:400 13px/1.65 'IBM Plex Mono',monospace;letter-spacing:0;}
.build-code-frame {
  --frame-rule:color-mix(in srgb,var(--ink) 30%,transparent);
  --frame-corner:color-mix(in srgb,var(--ink) 72%,transparent);
  position:absolute;inset:-10px -12px;border:1px solid var(--frame-rule);pointer-events:none;
  background:
    linear-gradient(var(--frame-corner),var(--frame-corner)) left top/10px 1px no-repeat,
    linear-gradient(var(--frame-corner),var(--frame-corner)) left top/1px 10px no-repeat,
    linear-gradient(var(--frame-corner),var(--frame-corner)) right top/10px 1px no-repeat,
    linear-gradient(var(--frame-corner),var(--frame-corner)) right top/1px 10px no-repeat,
    linear-gradient(var(--frame-corner),var(--frame-corner)) left bottom/10px 1px no-repeat,
    linear-gradient(var(--frame-corner),var(--frame-corner)) left bottom/1px 10px no-repeat,
    linear-gradient(var(--frame-corner),var(--frame-corner)) right bottom/10px 1px no-repeat,
    linear-gradient(var(--frame-corner),var(--frame-corner)) right bottom/1px 10px no-repeat,
    repeating-linear-gradient(90deg,var(--frame-rule) 0 1px,transparent 1px 40px) 20px top/calc(100% - 40px) 3px no-repeat,
    repeating-linear-gradient(90deg,var(--frame-rule) 0 1px,transparent 1px 40px) 20px bottom/calc(100% - 40px) 3px no-repeat,
    repeating-linear-gradient(var(--frame-rule) 0 1px,transparent 1px 24px) left 20px/3px calc(100% - 40px) no-repeat,
    repeating-linear-gradient(var(--frame-rule) 0 1px,transparent 1px 24px) right 20px/3px calc(100% - 40px) no-repeat;
}
.build-about-copy section+section {margin-top:18px;}
.build-about-copy h3 {margin:0 0 7px;font:inherit;}
.build-about-copy h3:focus {outline:none;}
.build-about-copy p {margin:0;max-width:63ch;opacity:.8;}
.build-stack-list {margin:0;padding-left:14px;display:grid;gap:3px;}
.build-stack-list>div {display:grid;grid-template-columns:78px minmax(0,1fr);gap:10px;}
.build-stack-list dt {opacity:.55;}
.build-stack-list dt::after {content:':';}
.build-stack-list dd {margin:0;min-width:0;color:#a7bdab;opacity:.95;}
.build-art[data-project='who-am-i'] {border:0;background:transparent;}
.build-page[data-project='who-am-i'] .build-presentation {margin-top:24px;}
.build-photo-matrix {max-width:none;justify-content:flex-start;}
.build-photo-matrix figcaption {font-family:'IBM Plex Mono',monospace;}
.build-photo-matrix[data-activities-ready] figcaption {padding-left:0;}
.build-photo-matrix[data-activities-ready] .activities-gallery {margin-inline:0;padding-left:var(--activity-frame-offset,0px);}
.build-photo-matrix[data-code-activity]:not([data-code-activity='']) .activities-gallery {grid-template-columns:var(--activity-frame-companion,0px) var(--activity-frame-width,0px) var(--activity-frame-rail,0px);}
.activity-code {position:relative;min-width:0;min-height:0;height:100%;}
.activity-code canvas {display:block;width:100%;height:100%;object-fit:contain;image-rendering:pixelated;}
@media(max-width:700px) {
  .build-about-copy {font-size:10px;line-height:1.55;}
  .build-code-frame {inset:-7px -4px;}
  .build-about-copy section+section {margin-top:12px;}
  .build-stack-list {padding-left:0;gap:3px;}
  .build-stack-list>div {grid-template-columns:49px minmax(0,1fr);gap:5px;}
  .build-page[data-project='who-am-i'] .build-presentation {margin-top:14px;}
}
@media(max-height:700px) {
  .build-about-copy {font-size:11px;line-height:1.5;}
  .build-about-copy section+section {margin-top:10px;}
  .build-page[data-project='who-am-i'] .build-presentation {margin-top:12px;}
}
@media(max-height:700px) and (max-width:700px) {.build-about-copy {font-size:9px;}}

.build-project-copy {position:relative;flex:none;margin-inline-end:var(--project-frame-clearance);font:400 13px/1.65 'IBM Plex Mono',monospace;}
.build-project-copy h2 {margin:0 0 13px;font:400 18px/1.4 'IBM Plex Mono',monospace;letter-spacing:-.025em;overflow-wrap:anywhere;}
.build-project-copy h2::before {content:'// ';opacity:.55;}
.build-project-facts {display:grid;gap:9px;margin:0;}
.build-project-facts>div {display:grid;grid-template-columns:60px minmax(0,1fr);gap:12px;}
.build-project-facts dt {opacity:.5;white-space:nowrap;}
.build-project-facts dt::after {content:':';}
.build-project-facts dd {margin:0;min-width:0;opacity:.85;}
.build-project-facts #build-role {color:#a7bdab;}
.build-project-facts .build-project-links {margin:0;gap:5px;font:inherit;}
.build-project-facts .build-project-links a {min-height:24px;overflow-wrap:anywhere;}
.build-project-url {padding-top:8px;border-top:1px solid color-mix(in srgb,var(--ink) 15%,transparent);}
.build-url-pending {opacity:.55;}
/* A slightly taller landscape cover than the reference's 16:9 preview.
   It can still shrink when a short viewport needs room for the project facts. */
.build-page:not([data-project='who-am-i']) .build-presentation {flex:0 1 auto;aspect-ratio:8/5;margin-top:28px;margin-inline:calc(-1*var(--project-frame-outset)) calc(var(--project-frame-clearance) - var(--project-frame-outset));}
@media(max-height:820px) and (min-width:701px) {
  .build-project-copy {font-size:11px;line-height:1.55;}
  .build-project-copy h2 {font-size:16px;margin-bottom:8px;}
  .build-project-facts {gap:6px;}
  .build-page:not([data-project='who-am-i']) .build-presentation {margin-top:23px;}
}
@media(max-width:700px) {
  .build-copy {--project-frame-outset:4px;}
  .build-project-copy {font-size:10px;line-height:1.5;}
  .build-project-copy h2 {font-size:14px;margin-bottom:8px;}
  .build-project-facts {gap:7px;}
  .build-project-facts>div {grid-template-columns:1fr;gap:1px;}
  .build-project-facts dt {font-size:8px;}
  .build-project-url {padding-top:5px;}
  .build-cover-hint {bottom:7px;right:7px;padding:6px 8px;font-size:8px;gap:8px;}
  .build-page:not([data-project='who-am-i']) .build-presentation {margin-top:18px;}
}
