:root{--bg:#050505;--fg:#f2f1ec;--muted:#92918c;--line:#292927;--panel:#0a0b0c}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--fg);font-family:"IBM Plex Sans Condensed","Arial Narrow",Arial,sans-serif;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}.shell{width:min(1500px,calc(100% - 48px));margin:auto}header{display:grid;grid-template-columns:1fr auto;align-items:center;padding:22px 0;border-bottom:1px solid var(--line)}.brand,nav,.mono,.eyebrow,.section-num,.meta,.exp-year,.exp-role,.chips{font-family:"IBM Plex Mono",monospace}.brand{font-size:11px;letter-spacing:.12em;text-transform:uppercase}nav{display:flex;gap:24px}nav a{font-size:10px;letter-spacing:.11em;text-transform:uppercase;color:var(--muted)}nav a:hover{color:var(--fg)}
.hero{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(310px,.7fr);gap:clamp(40px,7vw,110px);padding:70px 0 82px;align-items:end}.eyebrow,.section-num{font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}.hero h1{margin:22px 0 30px;font-size:clamp(66px,9vw,136px);line-height:.82;letter-spacing:-.06em;font-weight:300}.hero-copy{max-width:760px;font-size:clamp(24px,2.4vw,38px);line-height:1.15;color:#d6d4ce;margin:0}.meta{display:flex;gap:28px;margin-top:38px;font-size:9px;line-height:1.7;letter-spacing:.08em;color:var(--muted);text-transform:uppercase}.portrait{margin:0;position:relative;background:#020304;border:1px solid var(--line);overflow:hidden;aspect-ratio:1}.portrait img{width:100%;height:100%;display:block;object-fit:cover;filter:grayscale(1) contrast(1.2)}.portrait canvas{position:absolute;inset:0;width:100%;height:100%;display:block;opacity:0;transition:opacity .3s ease}.portrait.ascii-ready canvas{opacity:1}.portrait.ascii-ready img{opacity:0}.portrait::after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(to bottom,transparent 0,transparent 3px,rgba(5,5,5,.07) 3px,rgba(5,5,5,.07) 4px);pointer-events:none}.portrait figcaption{position:absolute;left:14px;bottom:12px;z-index:2;font:9px/1.4 "IBM Plex Mono",monospace;letter-spacing:.1em;text-transform:uppercase;color:#f2f1ec;background:rgba(5,5,5,.82);padding:5px 7px}
.section{display:grid;grid-template-columns:150px minmax(0,1fr);gap:48px;padding:78px 0;border-top:1px solid var(--line)}.section-num{position:sticky;top:28px;align-self:start}.section h2{margin:0;max-width:1050px;font-size:clamp(42px,5.8vw,84px);font-weight:300;line-height:.92;letter-spacing:-.048em}.intro-grid{display:grid;grid-template-columns:1.15fr .85fr;gap:60px;margin-top:42px}.intro-grid p{margin:0;color:#c8c7c1;font-size:18px;line-height:1.52}.principles{display:grid;grid-template-columns:repeat(3,1fr);gap:0;margin-top:52px;border-top:1px solid var(--line)}.principle{padding:18px 26px 0 0}.principle+.principle{border-left:1px solid var(--line);padding-left:26px}.principle b{display:block;font-size:18px;font-weight:400;margin-bottom:8px}.principle span{color:var(--muted);font-size:14px;line-height:1.45}
.capabilities{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 54px;margin-top:42px}.capability{border-top:1px solid var(--line);padding:18px 0 30px}.capability h3{font-size:21px;font-weight:400;margin:0 0 8px}.capability p{margin:0;color:var(--muted);font-size:15px;line-height:1.5;max-width:580px}
.experience{margin-top:42px;border-top:1px solid var(--line)}.exp{display:grid;grid-template-columns:130px minmax(190px,.7fr) minmax(0,1.3fr);gap:30px;padding:21px 0;border-bottom:1px solid var(--line);align-items:start}.exp-year,.exp-role{font-size:9px;letter-spacing:.09em;text-transform:uppercase;color:var(--muted)}.exp strong{display:block;font-size:19px;font-weight:400;margin-bottom:4px}.exp-role{color:#d2d1cc;margin-top:5px}.exp p{margin:0;color:var(--muted);font-size:14px;line-height:1.48}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:38px}.chips span{border:1px solid var(--line);padding:10px 12px;font-size:9px;letter-spacing:.07em;text-transform:uppercase;color:#c9c8c2}footer{display:flex;justify-content:space-between;border-top:1px solid var(--line);padding:18px 0 30px;font:9px/1.5 "IBM Plex Mono",monospace;color:var(--muted);letter-spacing:.08em;text-transform:uppercase}.reveal{opacity:0;transform:translateY(24px);transition:opacity .65s ease,transform .8s cubic-bezier(.16,1,.3,1)}.reveal.in{opacity:1;transform:none}
@media(max-width:900px){.shell{width:min(100% - 28px,1500px)}header{align-items:start}nav{gap:13px}.hero{grid-template-columns:1fr;padding:48px 0 58px}.portrait{width:min(100%,520px)}.section{grid-template-columns:1fr;gap:22px;padding:58px 0}.section-num{position:static}.intro-grid,.principles,.capabilities{grid-template-columns:1fr}.principles{gap:0}.principle{padding:16px 0}.principle+.principle{border-left:0;border-top:1px solid var(--line);padding-left:0}.exp{grid-template-columns:90px 1fr}.exp p{grid-column:2}.meta{flex-wrap:wrap}}@media(max-width:560px){.shell{width:calc(100% - 24px)}header{grid-template-columns:1fr}nav{margin-top:18px;justify-content:space-between}.hero h1{font-size:clamp(58px,20vw,88px)}.hero-copy{font-size:23px}.exp{grid-template-columns:1fr;gap:7px}.exp p{grid-column:auto}footer{gap:20px}}
.portrait{background:#000;border-color:#4a4a47}
.portrait.ascii-ready img{opacity:0}
.portrait canvas{filter:grayscale(1) contrast(1.42) brightness(1.14);mix-blend-mode:normal}
.portrait.ascii-ready canvas{opacity:1}
.portrait::after{opacity:.22}
.portrait canvas.ascii-reference{z-index:1;opacity:1;filter:none;mix-blend-mode:normal}
.portrait img{opacity:0;visibility:hidden}
.portrait::before{content:"";position:absolute;inset:0;z-index:1;background:radial-gradient(circle at 52% 43%,rgba(255,255,255,.035),transparent 58%);pointer-events:none}
.portrait>canvas:not(.ascii-reference):not(.ascii-color){display:none}
.portrait canvas.ascii-reference{display:none}
.portrait canvas.ascii-color{z-index:2;opacity:1;filter:saturate(1.12) contrast(1.08);mix-blend-mode:normal}
.portrait figcaption{z-index:3}
.portrait img{opacity:1;visibility:visible;filter:none;object-fit:cover}.portrait canvas{display:none!important}.portrait.ascii-ready img{opacity:1}.portrait::after{background:repeating-linear-gradient(to bottom,transparent 0,transparent 5px,rgba(8,168,220,.055) 5px,rgba(8,168,220,.055) 6px);opacity:.48}.portrait::before{background:linear-gradient(135deg,transparent 0 68%,rgba(8,168,220,.09) 100%)}
.portrait .portrait-signal{position:absolute;inset:-1%;z-index:0;overflow:hidden;transform-origin:52% 58%;animation:portrait-head-motion 11s cubic-bezier(.45,0,.2,1) infinite}
.portrait .portrait-signal::after{content:"";position:absolute;inset:0;z-index:2;pointer-events:none;background:radial-gradient(circle,rgba(5,5,5,.42) 0 1.2px,transparent 1.35px);background-size:6px 6px;mix-blend-mode:multiply;opacity:.72}
.portrait .portrait-base{position:relative;z-index:0;animation:portrait-signal-drift 5.8s steps(1,end) infinite}
.portrait .portrait-glitch{position:absolute;inset:0;z-index:1;pointer-events:none;opacity:0;will-change:transform,clip-path,opacity}
.portrait .portrait-glitch-cyan{mix-blend-mode:screen;filter:sepia(1) saturate(9) hue-rotate(142deg) contrast(1.85);animation:portrait-glitch-cyan 4.6s steps(1,end) infinite}
.portrait .portrait-glitch-light{mix-blend-mode:lighten;filter:contrast(2.2) brightness(1.18);animation:portrait-glitch-light 5.7s steps(1,end) .7s infinite}
.portrait .signal-tear{position:absolute;left:0;right:0;top:42%;z-index:2;height:3px;background:#08a8dc;box-shadow:0 -5px 0 rgba(242,241,236,.28),0 0 18px rgba(8,168,220,.95);opacity:0;pointer-events:none;animation:portrait-tear 4.2s steps(1,end) .9s infinite}
.portrait .portrait-mouth{position:absolute;inset:0;z-index:2;clip-path:inset(65.5% 31% 22% 34%);transform-origin:52% 70%;pointer-events:none;animation:portrait-mouth-shift 6.3s steps(1,end) 1.4s infinite}
.portrait::after{z-index:2;animation:portrait-scanline 4.9s steps(1,end) infinite}
/* Deliberately coarse, near-monochrome signal portrait. */
.portrait .portrait-base,
.portrait .portrait-mouth{filter:grayscale(1) sepia(.08) contrast(1.48) brightness(.72) blur(1.7px);image-rendering:pixelated}
.portrait .portrait-signal::after{background:radial-gradient(circle,rgba(5,5,5,.82) 0 2.15px,transparent 2.45px);background-size:10px 10px;mix-blend-mode:multiply;opacity:.92}
.portrait .portrait-glitch-cyan{filter:grayscale(1) contrast(1.75) brightness(.78);mix-blend-mode:screen}
.portrait .portrait-glitch-light{filter:grayscale(1) contrast(2) brightness(.94)}
.portrait::before{background:linear-gradient(135deg,transparent 0 76%,rgba(8,168,220,.035) 100%)}
@keyframes portrait-signal-drift{0%,55%,68%,100%{transform:none;filter:none}57%{transform:translateX(-5px) skewX(-1.8deg) scaleX(1.018);filter:contrast(1.25)}59%{transform:translateX(7px) skewX(1.2deg) scaleY(.992)}61%{transform:translateX(-2px) skewX(-.7deg) scaleX(1.03)}64%{transform:translateX(3px);filter:contrast(1.12)}}
@keyframes portrait-head-motion{0%,100%{transform:translate(0,0) rotate(0) scale(1.012)}25%{transform:translate(-.55%,.25%) rotate(-.28deg) scale(1.018)}50%{transform:translate(.48%,-.2%) rotate(.24deg) scale(1.015)}75%{transform:translate(-.22%,.32%) rotate(-.12deg) scale(1.02)}}
@keyframes portrait-mouth-shift{0%,48%,62%,100%{transform:none;filter:none;opacity:1}50%{transform:translateX(5px) scaleY(.72) skewX(-4deg);filter:contrast(1.7)}53%{transform:translateX(-4px) scaleY(1.2) scaleX(1.04);filter:contrast(1.35)}57%{transform:translateY(3px) scaleY(.55);filter:brightness(.76) contrast(2)}59%{transform:translateX(2px) scaleY(1.08);opacity:.72}}
@keyframes portrait-glitch-cyan{0%,60%,72%,100%{opacity:0;clip-path:inset(0)}62%{opacity:.32;clip-path:inset(8% 0 72% 0);transform:translateX(20px) skewX(-5deg) scaleX(1.04)}64%{opacity:.24;clip-path:inset(35% 0 42% 0);transform:translateX(-17px) skewX(3deg)}66%{opacity:.3;clip-path:inset(62% 0 20% 0);transform:translateX(13px) scaleX(1.06)}69%{opacity:.2;clip-path:inset(78% 0 8% 0);transform:translateX(-9px)}}
@keyframes portrait-glitch-light{0%,70%,82%,100%{opacity:0;clip-path:inset(0)}72%{opacity:.7;clip-path:inset(18% 0 63% 0);transform:translateX(-22px) scaleX(1.05)}74%{opacity:.8;clip-path:inset(47% 0 32% 0);transform:translateX(17px) skewX(-4deg)}77%{opacity:.56;clip-path:inset(69% 0 12% 0);transform:translateX(-14px) scaleX(1.08)}79%{opacity:.46;clip-path:inset(4% 0 88% 0);transform:translateX(9px)}}
@keyframes portrait-tear{0%,54%,68%,100%{opacity:0;transform:translateY(0) scaleX(.1)}56%{opacity:1;transform:translateY(-82px) scaleX(1)}59%{opacity:.58;transform:translateY(96px) scaleX(.82)}62%{opacity:.92;transform:translateY(18px) scaleX(.48)}65%{opacity:.4;transform:translateY(-28px) scaleX(.7)}}
@keyframes portrait-scanline{0%,72%,84%,100%{transform:none;opacity:.48}74%{transform:translateY(7px);opacity:.9}77%{transform:translateY(-5px);opacity:.24}80%{transform:translateY(3px);opacity:.76}}
@media(prefers-reduced-motion:reduce){.portrait .portrait-signal,.portrait .portrait-base,.portrait .portrait-glitch,.portrait .portrait-mouth,.portrait .signal-tear,.portrait::after{animation:none}.portrait .portrait-glitch,.portrait .portrait-mouth,.portrait .signal-tear{display:none}}

/* Neutral, deliberately coarse portrait treatment. */
.portrait .portrait-base,
.portrait .portrait-mouth{
  filter:grayscale(1) contrast(1.7) brightness(.72) blur(2.2px);
  image-rendering:pixelated;
}
.portrait .portrait-glitch-cyan,
.portrait .portrait-glitch-light{
  filter:grayscale(1) contrast(2) brightness(.82);
  mix-blend-mode:screen;
}
.portrait .portrait-signal::after{
  background:radial-gradient(circle,rgba(0,0,0,.9) 0 3px,transparent 3.3px);
  background-size:14px 14px;
  mix-blend-mode:multiply;
  opacity:.94;
}
.portrait::after{
  background:repeating-linear-gradient(to bottom,transparent 0,transparent 7px,rgba(255,255,255,.055) 7px,rgba(255,255,255,.055) 9px);
  opacity:.38;
}
.portrait::before{background:linear-gradient(135deg,transparent 0 76%,rgba(255,255,255,.035) 100%)}
.portrait .signal-tear{background:#d8d8d2;box-shadow:0 -5px 0 rgba(255,255,255,.18),0 0 14px rgba(255,255,255,.35)}

/* Stark black-and-white line portrait. */
.portrait,
.portrait .portrait-signal{background:#000!important}
.portrait .portrait-signal{
  filter:grayscale(1) brightness(1.22) contrast(.94)!important;
}
.portrait .portrait-base{
  animation:none!important;
  filter:grayscale(1) contrast(2.85) brightness(.82)!important;
  mix-blend-mode:normal!important;
  opacity:1!important;
}
.portrait .portrait-glitch,
.portrait .portrait-mouth,
.portrait .signal-tear{display:none!important}
.portrait .portrait-signal::after{
  background:repeating-linear-gradient(90deg,transparent 0 3px,#000 3px 7px)!important;
  background-size:auto!important;
  mix-blend-mode:multiply!important;
  opacity:.84!important;
}
.portrait::before{background:none!important}
.portrait::after{
  background:repeating-linear-gradient(to bottom,transparent 0 8px,rgba(255,255,255,.035) 8px 9px)!important;
  opacity:.24!important;
  animation:none!important;
}

/* Additional monochrome transmission artifacts. */
.portrait .portrait-glitch{
  display:block!important;
  filter:grayscale(1) contrast(2.4) brightness(1.08)!important;
  mix-blend-mode:screen!important;
}
.portrait .portrait-mouth{display:none!important}
.portrait .signal-tear{
  display:block!important;
  background:#d4d4cf!important;
  box-shadow:0 -6px 0 rgba(255,255,255,.2),0 0 16px rgba(255,255,255,.28)!important;
}
.portrait .portrait-signal::before{
  content:"";
  position:absolute;
  inset:0;
  z-index:6;
  pointer-events:none;
  background:
    linear-gradient(90deg,transparent 0 12%,rgba(210,210,205,.28) 12% 34%,transparent 34%) 0 18%/100% 3px no-repeat,
    linear-gradient(90deg,transparent 0 46%,rgba(235,235,230,.2) 46% 81%,transparent 81%) 0 57%/100% 5px no-repeat,
    linear-gradient(90deg,rgba(205,205,200,.18) 0 17%,transparent 17% 72%,rgba(235,235,230,.2) 72% 100%) 0 82%/100% 2px no-repeat;
  mix-blend-mode:screen;
  opacity:.35;
  animation:portrait-block-noise 5.4s steps(1,end) infinite;
}
@keyframes portrait-block-noise{
  0%,16%,21%,52%,57%,84%,89%,100%{transform:none;opacity:.16}
  18%{transform:translateX(13px) skewX(-3deg);opacity:.72}
  19%{transform:translateX(-8px);opacity:.38}
  54%{transform:translateX(-16px) scaleX(1.08);opacity:.66}
  55%{transform:translateX(7px);opacity:.3}
  86%{transform:translateY(-9px) skewX(4deg);opacity:.58}
  87%{transform:translateY(5px);opacity:.24}
}
.portrait figcaption{display:none}

/* 16-bit portrait experiment. Restore with "Signal Scan Portrait" asset. */
.portrait.pixel-portrait,.portrait.pixel-portrait .portrait-signal{background:#03070c!important}
.portrait.pixel-portrait .portrait-signal{filter:none!important;animation:pixel-idle 7s steps(1,end) infinite}
.portrait.pixel-portrait .portrait-base{filter:none!important;image-rendering:pixelated;object-fit:cover}
.portrait.pixel-portrait .portrait-glitch,.portrait.pixel-portrait .portrait-mouth,.portrait.pixel-portrait .signal-tear{display:none!important}
.portrait.pixel-portrait .portrait-signal::before{content:"";position:absolute;inset:0;z-index:4;pointer-events:none;background:linear-gradient(90deg,transparent 0 68%,rgba(58,199,232,.11) 68% 69%,transparent 69%) 0 0/100% 100%;mix-blend-mode:screen;opacity:.45;animation:none}
.portrait.pixel-portrait .portrait-signal::after{background:repeating-linear-gradient(to bottom,transparent 0 7px,rgba(82,190,218,.045) 7px 8px)!important;background-size:auto!important;mix-blend-mode:screen!important;opacity:.52!important}
.portrait.pixel-portrait::before{background:linear-gradient(135deg,transparent 0 76%,rgba(56,198,232,.07) 100%)!important}
.portrait.pixel-portrait::after{background:repeating-linear-gradient(to bottom,transparent 0 7px,rgba(255,255,255,.025) 7px 8px)!important;opacity:.35!important}
@keyframes pixel-idle{0%,46%,51%,78%,83%,100%{transform:none}48%{transform:translateX(-2px)}49%{transform:translateX(2px)}80%{transform:translateY(1px)}}
@media(prefers-reduced-motion:reduce){.portrait.pixel-portrait .portrait-signal{animation:none}}

/* Stepped 8-bit expression loop */
.portrait.pixel-portrait .portrait-signal{background:#03070c url("../../scott-wolfe-8bit-portrait-v1.png") center/cover no-repeat!important;transform-origin:50% 65%;transition:transform .5s steps(4,end)}
.portrait.pixel-portrait .portrait-expression{position:absolute;inset:0;width:100%;height:100%;display:block!important;visibility:visible!important;object-fit:cover;filter:none!important;image-rendering:pixelated;opacity:0!important;z-index:1;transition:none!important;animation:none!important;will-change:opacity}
.portrait.pixel-portrait .portrait-expression.is-active{opacity:1!important;z-index:2}
.portrait.pixel-portrait .portrait-signal.pose-left{transform:translate(-3%,1%) rotate(-1.15deg) scale(1.035)}
.portrait.pixel-portrait .portrait-signal.pose-right{transform:translate(3%,-.7%) rotate(1.1deg) scale(1.035)}
.portrait.pixel-portrait .portrait-signal.pose-down{transform:translate(0,2%) scale(1.02)}
.portrait.pixel-portrait .portrait-light{position:absolute;inset:0;z-index:3;pointer-events:none;opacity:.5;background:linear-gradient(105deg,rgba(4,7,12,.34) 18%,transparent 42%,rgba(225,238,239,.2) 49%,transparent 61%,rgba(4,7,12,.26) 82%);-webkit-mask-image:radial-gradient(ellipse 41% 55% at 58% 43%,#000 38%,transparent 78%);mask-image:radial-gradient(ellipse 41% 55% at 58% 43%,#000 38%,transparent 78%);mix-blend-mode:soft-light;transform:translateX(-6%);animation:portrait-shading 7.4s steps(7,end) infinite;will-change:transform,opacity}
.portrait.pixel-portrait .portrait-signal.pose-left .portrait-light{animation-duration:6.4s;opacity:.62}
.portrait.pixel-portrait .portrait-signal.pose-right .portrait-light{animation-direction:reverse;opacity:.58}
@keyframes portrait-shading{0%,100%{transform:translateX(-8%);opacity:.38}22%{transform:translateX(-3%);opacity:.58}48%{transform:translateX(3%);opacity:.44}72%{transform:translateX(8%);opacity:.64}88%{transform:translateX(1%);opacity:.48}}
@media(prefers-reduced-motion:reduce){.portrait.pixel-portrait .portrait-signal{transition:none;transform:none!important}.portrait.pixel-portrait .portrait-expression{opacity:0!important}.portrait.pixel-portrait .expression-neutral{opacity:1!important}.portrait.pixel-portrait .portrait-light{animation:none;opacity:.4;transform:none}}

/* ASCII Signal Portrait — current experiment. The prior animated treatment is
   archived in assets/portraits/pixel-signal-portrait/. */
.portrait.ascii-portrait,
.portrait.ascii-portrait .portrait-signal{background:#000!important}
.portrait.ascii-portrait{border:0!important;outline:0!important}
.portrait.ascii-portrait .portrait-signal{inset:0;filter:none!important;animation:ascii-breathe 10s cubic-bezier(.45,0,.25,1) infinite;transform-origin:52% 62%}
.portrait.ascii-portrait .ascii-head-motion{position:absolute;inset:0;z-index:1;transform-origin:52% 62%;transition:transform .62s steps(6,end),filter .62s steps(6,end);will-change:transform,filter}
.portrait.ascii-portrait .portrait-base{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:grayscale(1) contrast(1.08)!important;animation:ascii-signal-shift 8.6s steps(1,end) infinite!important;transform:scale(1.012);will-change:transform,filter}
.portrait.ascii-portrait .ascii-eyelid{position:absolute;top:46.8%;z-index:2;width:10.4%;height:5.1%;border-radius:50%;background:#050607;opacity:0;transform:scaleY(.08);transform-origin:center;pointer-events:none}
.portrait.ascii-portrait .ascii-eyelid::after{content:"";position:absolute;left:10%;right:10%;top:52%;height:2px;background:repeating-linear-gradient(90deg,rgba(226,234,235,.9) 0 3px,transparent 3px 6px);opacity:.82}
.portrait.ascii-portrait .ascii-eyelid-left{left:34.1%;transform:rotate(-2deg) scaleY(.08)}
.portrait.ascii-portrait .ascii-eyelid-right{left:55.3%;transform:rotate(2deg) scaleY(.08)}
.portrait.ascii-portrait .portrait-signal.is-blinking .ascii-eyelid{opacity:1;animation:ascii-natural-blink-angled 168ms steps(2,end) both}
.portrait.ascii-portrait .portrait-signal.pose-left .ascii-head-motion{transform:translate(-4.2%,.7%) rotate(-1.35deg) skewY(-.35deg) scale(1.035,1.02);filter:brightness(.92) contrast(1.05)}
.portrait.ascii-portrait .portrait-signal.pose-right .ascii-head-motion{transform:translate(4.3%,-.4%) rotate(1.4deg) skewY(.35deg) scale(1.035,1.02);filter:brightness(1.06) contrast(1.03)}
.portrait.ascii-portrait .portrait-signal.pose-down .ascii-head-motion{transform:translate(0,1.7%) scale(1.015);filter:brightness(.97)}
.portrait.ascii-portrait .portrait-signal::before{content:"";position:absolute;inset:0;z-index:3;pointer-events:none;background:repeating-linear-gradient(to bottom,transparent 0 6px,rgba(255,255,255,.025) 6px 7px);mix-blend-mode:screen;opacity:.42;animation:ascii-scan 7s linear infinite}
.portrait.ascii-portrait .portrait-signal::after{content:"";position:absolute;inset:0;z-index:4;pointer-events:none;background:linear-gradient(90deg,transparent 0 68%,rgba(52,200,234,.08) 74%,transparent 84%);mix-blend-mode:screen;opacity:.38;animation:ascii-edge-pulse 6.4s steps(5,end) infinite}
.portrait.ascii-portrait .ascii-sweep{position:absolute;inset:0;z-index:5;pointer-events:none;background:linear-gradient(to bottom,transparent 0 37%,rgba(238,246,247,.08) 38%,rgba(49,201,234,.12) 39%,transparent 41% 100%);mix-blend-mode:screen;opacity:0;animation:ascii-sweep 9.2s steps(1,end) infinite}
.portrait.ascii-portrait::before{background:radial-gradient(ellipse at 52% 44%,rgba(255,255,255,.025),transparent 58%)!important}
.portrait.ascii-portrait::after{background:repeating-linear-gradient(to bottom,transparent 0 7px,rgba(255,255,255,.022) 7px 8px)!important;opacity:.3!important}
@keyframes ascii-breathe{0%,100%{transform:translate(0,0) scale(1)}45%{transform:translate(.35%,-.25%) scale(1.006)}72%{transform:translate(-.3%,.15%) scale(1.003)}}
@keyframes ascii-signal-shift{0%,54%,64%,100%{transform:scale(1.012);filter:grayscale(1) contrast(1.08)}56%{transform:translateX(-5px) scale(1.018) skewX(-.45deg);filter:grayscale(1) contrast(1.22)}58%{transform:translateX(7px) scale(1.012);filter:grayscale(1) contrast(1.14)}60%{transform:translateX(-2px) scale(1.02)}62%{transform:translateX(3px) scale(1.013)}}
@keyframes ascii-scan{to{background-position:0 56px}}
@keyframes ascii-edge-pulse{0%,100%{opacity:.26}35%{opacity:.5}38%{opacity:.2}71%{opacity:.42}}
@keyframes ascii-sweep{0%,72%,100%{opacity:0;transform:translateY(-28%)}73%{opacity:.7;transform:translateY(-28%)}77%{opacity:.42;transform:translateY(70%)}78%{opacity:0;transform:translateY(70%)}}
.portrait.ascii-portrait .ascii-eyelid-left{--lid-rotate:-2deg}.portrait.ascii-portrait .ascii-eyelid-right{--lid-rotate:2deg}
@keyframes ascii-natural-blink-angled{0%{transform:rotate(var(--lid-rotate)) scaleY(.08)}42%,72%{transform:rotate(var(--lid-rotate)) scaleY(1)}100%{transform:rotate(var(--lid-rotate)) scaleY(.08)}}
@media(prefers-reduced-motion:reduce){.portrait.ascii-portrait .portrait-signal,.portrait.ascii-portrait .portrait-base,.portrait.ascii-portrait .portrait-signal::before,.portrait.ascii-portrait .portrait-signal::after,.portrait.ascii-portrait .ascii-sweep{animation:none!important;transform:none!important}.portrait.ascii-portrait .ascii-head-motion{transition:none!important;transform:none!important}.portrait.ascii-portrait .ascii-eyelid{display:none}}

/* Match the site's full primary display-title scale. */
.hero h1{font-size:clamp(66px,9.2vw,136px)!important;line-height:.82!important;letter-spacing:-.06em!important}
@media(max-width:900px){.hero h1{font-size:clamp(46px,13vw,80px)!important}}

/* Refined ASCII portrait behavior */
.portrait.ascii-portrait .ascii-head-motion{z-index:2}
.portrait.ascii-portrait .ascii-eyelid{top:44.2%;z-index:9;width:9.5%;height:3.1%;border-radius:48%;background:rgba(1,2,3,.94);box-shadow:0 0 8px rgba(0,0,0,.5)}
.portrait.ascii-portrait .ascii-eyelid-left{left:34.4%;--lid-rotate:-2deg}.portrait.ascii-portrait .ascii-eyelid-right{left:55.6%;--lid-rotate:2deg}
.portrait.ascii-portrait .ascii-eyelid::after{left:12%;right:12%;top:48%;height:1px;opacity:.55}
.portrait.ascii-portrait .portrait-signal.is-blinking .ascii-eyelid{animation:ascii-soft-blink 320ms ease-in-out both}
@keyframes ascii-soft-blink{0%,100%{opacity:0;transform:rotate(var(--lid-rotate)) scaleY(.12)}26%,74%{opacity:.94;transform:rotate(var(--lid-rotate)) scaleY(.82)}}
.portrait.ascii-portrait .facial-hair-softener{position:absolute;left:38%;top:57%;width:28%;height:27%;z-index:4;pointer-events:none;background:radial-gradient(ellipse at 50% 26%,rgba(0,0,0,.3),rgba(0,0,0,.5) 54%,transparent 78%);mix-blend-mode:multiply;opacity:.58;filter:blur(2px)}
.portrait.ascii-portrait .portrait-underlay{position:absolute;inset:0;z-index:1;width:100%;height:100%;object-fit:cover;filter:grayscale(1) contrast(1.02)!important;opacity:.74}
.portrait.ascii-portrait .ascii-head-motion{clip-path:none;transform-origin:52% 62%;transform-style:flat;transition:transform 1.15s cubic-bezier(.2,.75,.25,1),filter 1.15s ease}
.portrait.ascii-portrait .portrait-signal.pose-left .ascii-head-motion{transform:translateX(-.55%);filter:brightness(.985) contrast(1.015)}
.portrait.ascii-portrait .portrait-signal.pose-right .ascii-head-motion{transform:translateX(.55%);filter:brightness(1.01) contrast(1.01)}
.portrait.ascii-portrait .portrait-signal.pose-down .ascii-head-motion{transform:translateY(.25%)}
.portrait.ascii-portrait .ascii-rain{display:block!important;position:absolute;inset:0;width:100%;height:100%;z-index:7;opacity:.62;mix-blend-mode:screen;pointer-events:none}
.portrait.ascii-portrait .ascii-sweep{opacity:.16;animation-duration:13s}
@media(prefers-reduced-motion:reduce){.portrait.ascii-portrait .ascii-rain{display:none!important}}

/* Lower-density live ASCII portrait. */
.portrait.ascii-portrait .portrait-underlay,
.portrait.ascii-portrait .portrait-base{opacity:0!important;visibility:hidden!important}
.portrait.ascii-portrait canvas.ascii-reference{display:block!important;position:absolute;inset:0;z-index:3;width:100%;height:100%;opacity:1!important;filter:none;mix-blend-mode:normal}
.portrait.ascii-portrait .ascii-head-motion{z-index:5;transform:none!important;filter:none!important;transition:none!important}
.portrait.ascii-portrait .ascii-eyelid{top:39.8%;width:11.2%;height:2.7%;z-index:9;background:rgba(2,3,4,.96);box-shadow:none}
.portrait.ascii-portrait .ascii-eyelid-left{left:31.1%;--lid-rotate:-1deg}
.portrait.ascii-portrait .ascii-eyelid-right{left:57.4%;--lid-rotate:1deg}
.portrait.ascii-portrait .ascii-eyelid::after{background:repeating-linear-gradient(90deg,rgba(225,235,235,.8) 0 5px,transparent 5px 10px);opacity:.6}
.portrait.ascii-portrait .portrait-signal.is-blinking .ascii-eyelid{animation:ascii-human-blink 440ms cubic-bezier(.35,0,.25,1) both}
@keyframes ascii-human-blink{0%,100%{opacity:0;transform:rotate(var(--lid-rotate)) scaleY(.08)}24%{opacity:.9;transform:rotate(var(--lid-rotate)) scaleY(.72)}38%,68%{opacity:.96;transform:rotate(var(--lid-rotate)) scaleY(1)}84%{opacity:.55;transform:rotate(var(--lid-rotate)) scaleY(.4)}}

/* Reset after the coarse-canvas experiment: preserve the authored portrait. */
.portrait.ascii-portrait.portrait-reset .portrait-signal{inset:0;animation:none!important;transform:none!important;filter:none!important;background:#000!important}
.portrait.ascii-portrait.portrait-reset .portrait-base{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:1!important;visibility:visible!important;filter:none!important;transform:none!important;animation:none!important}
.portrait.ascii-portrait.portrait-reset canvas,.portrait.ascii-portrait.portrait-reset .ascii-sweep,.portrait.ascii-portrait.portrait-reset .ascii-eyelid{display:none!important}
.portrait-hud{position:absolute;inset:0;z-index:4;pointer-events:none;background:radial-gradient(circle at 50% 46%,transparent 0 43%,rgba(0,0,0,.08) 70%,rgba(0,0,0,.3) 100%)}.portrait-hud::before{content:"";position:absolute;left:6%;right:6%;height:1px;top:14%;background:linear-gradient(90deg,transparent,rgba(69,205,231,.65),transparent);box-shadow:0 0 10px rgba(69,205,231,.2);opacity:.34;animation:hud-scan 8s cubic-bezier(.4,0,.2,1) infinite}.hud-corner{position:absolute;width:30px;height:30px;border-color:rgba(88,210,232,.68);border-style:solid}.hud-tl{left:15px;top:15px;border-width:1px 0 0 1px}.hud-tr{right:15px;top:15px;border-width:1px 1px 0 0}.hud-bl{left:15px;bottom:15px;border-width:0 0 1px 1px}.hud-br{right:15px;bottom:15px;border-width:0 1px 1px 0}.hud-status,.hud-coordinates{position:absolute;font:6px/1.45 "IBM Plex Mono",monospace;letter-spacing:.08em;color:rgba(111,211,229,.68)}.hud-status{top:18px;left:54px}.hud-coordinates{right:20px;bottom:20px;text-align:right}.portrait-reset figcaption{z-index:6}@keyframes hud-scan{0%,12%{transform:translateY(0);opacity:0}18%{opacity:.34}72%{transform:translateY(270px);opacity:.28}78%,100%{transform:translateY(270px);opacity:0}}@media(prefers-reduced-motion:reduce){.portrait-hud::before{animation:none;opacity:.18}}

/* Monochrome pixel portrait: preserve the saved frame animation, simplify the art direction. */
.portrait.pixel-portrait{border:1px solid #292b2b;background:#020303}
.portrait.pixel-portrait .portrait-signal{background:#020303!important}
.portrait.pixel-portrait .portrait-expression{filter:grayscale(1) contrast(1.16) brightness(.88)!important;mix-blend-mode:normal;image-rendering:pixelated}
.portrait.pixel-portrait .portrait-light{opacity:.2;background:linear-gradient(110deg,rgba(0,0,0,.24),transparent 42%,rgba(255,255,255,.1) 53%,transparent 66%);mix-blend-mode:soft-light;animation:none;transform:none}
.portrait.pixel-portrait .portrait-signal::before{background:linear-gradient(90deg,transparent 0 78%,rgba(255,255,255,.035) 78% 78.5%,transparent 78.5%);opacity:.42}
.portrait.pixel-portrait .portrait-signal::after{background:repeating-linear-gradient(to bottom,transparent 0 8px,rgba(255,255,255,.018) 8px 9px)!important;opacity:.3!important}
.portrait.pixel-portrait::before{background:radial-gradient(ellipse at 52% 46%,transparent 25%,rgba(0,0,0,.14) 72%,rgba(0,0,0,.35) 100%)!important}
.portrait.pixel-portrait::after{background:none!important;opacity:0!important}

/* Editorial pass: reduce the game-art surface while retaining every authored frame. */
.portrait.pixel-portrait{border-color:#202323;background:#050606}
.portrait.pixel-portrait .portrait-signal{inset:1.5%;background:#050606!important}
.portrait.pixel-portrait .portrait-expression{filter:grayscale(1) contrast(1.34) brightness(.7)!important;image-rendering:auto;opacity:0!important}
.portrait.pixel-portrait .portrait-expression.is-active{opacity:.9!important}
.portrait.pixel-portrait .portrait-light{display:none}
.portrait.pixel-portrait .portrait-signal::before{background:linear-gradient(90deg,rgba(5,6,6,.22),transparent 38%,rgba(255,255,255,.018) 62%,rgba(5,6,6,.3));opacity:1}
.portrait.pixel-portrait .portrait-signal::after{background:none!important;opacity:0!important}
.portrait.pixel-portrait::before{background:linear-gradient(to bottom,rgba(5,6,6,.08),transparent 24% 74%,rgba(5,6,6,.38))!important}

/* Quiet ASCII surface: typography reads through the portrait without becoming visual noise. */
.portrait.pixel-portrait::after{content:"..:://++==**##@@  .:-=+*#@  ..//::++==  @#*+=-:.  01..10  ::++//  ##**==  ..:://++==**##@@  .:-=+*#@  10..01  //::++==  @#*+=-:.  ..:://++==**##@@  01..10  .:-=+*#@  //::++==  @#*+=-:.  ..:://++==**##@@  .:-=+*#@  10..01  ::++//  ##**==  ..:://++==**##@@  01..10  .:-=+*#@  //::++==  @#*+=-:.  ..:://++==**##@@  .:-=+*#@  10..01  ::++//  ##**==  ..:://++==**##@@  01..10  .:-=+*#@  //::++==  @#*+=-:.  ..:://++==**##@@  .:-=+*#@  10..01  ::++//  ##**==  ..:://++==**##@@  01..10  .:-=+*#@  //::++==  @#*+=-:.  ..:://++==**##@@  .:-=+*#@  10..01"!important;position:absolute;inset:2.5%;z-index:4;display:block;overflow:hidden;background:none!important;color:rgba(224,229,228,.42);font:6px/1.14 "IBM Plex Mono",monospace;letter-spacing:.11em;word-spacing:.2em;word-break:break-all;white-space:normal;mix-blend-mode:screen;opacity:.52!important;pointer-events:none;-webkit-mask-image:radial-gradient(ellipse 48% 62% at 52% 45%,#000 12%,rgba(0,0,0,.72) 56%,transparent 88%);mask-image:radial-gradient(ellipse 48% 62% at 52% 45%,#000 12%,rgba(0,0,0,.72) 56%,transparent 88%)}

/* Image-driven binary portrait, matching the reference while retaining the frame loop. */
.portrait.pixel-portrait::after{content:none!important;display:none!important}
.portrait.pixel-portrait .portrait-expression.is-active{opacity:.12!important}
.portrait.pixel-portrait canvas.portrait-ascii{position:absolute;inset:0;z-index:5;display:block!important;width:100%;height:100%;opacity:1!important;filter:brightness(1.18) contrast(1.2);mix-blend-mode:normal;pointer-events:none}

/* Final generated ASCII artwork: render directly so the retired facial-hair pixels cannot reappear. */
.portrait.pixel-portrait.ascii-generated-portrait .portrait-expression{filter:none!important;image-rendering:auto;opacity:0!important;object-fit:cover}
.portrait.pixel-portrait.ascii-generated-portrait .portrait-expression.is-active{opacity:1!important}
.portrait.pixel-portrait.ascii-generated-portrait .portrait-signal::before,.portrait.pixel-portrait.ascii-generated-portrait .portrait-signal::after{content:none!important;display:none!important}

/* Calmer hero scale: keeps the headline subordinate to the combined composition. */
.hero h1{font-size:clamp(58px,7.2vw,112px)!important;max-width:11ch;line-height:.84!important}
@media(max-width:900px){.hero h1{font-size:clamp(44px,11vw,72px)!important}}

/* Final headline reduction requested after visual review. */
.hero h1{font-size:clamp(52px,6.2vw,96px)!important;line-height:.87!important}
@media(max-width:900px){.hero h1{font-size:clamp(40px,9.5vw,64px)!important}}

.hero .portrait{border:0}

/* Browser-independent ASCII frames: identical raster output in Safari and Chromium. */
.portrait.raster-ascii-portrait .portrait-expression{filter:none!important;image-rendering:auto;opacity:0!important}
.portrait.raster-ascii-portrait .portrait-expression.is-active{opacity:1!important}
.portrait.raster-ascii-portrait .portrait-signal::before,.portrait.raster-ascii-portrait .portrait-signal::after{content:none!important;display:none!important}
.safari-browser .portrait.raster-ascii-portrait .portrait-expression{filter:brightness(1.13) contrast(1.025)!important}
