    :root {
      /* Neutral near-black. Text is white-alpha, not icy blue-gray.
         Accent is used sparingly — kickers, links, the live dot. */
      --bg: #050506;
      --ink: #ffffff;
      --soft: rgba(255, 255, 255, 0.82);
      --dim: rgba(255, 255, 255, 0.58);
      --faint: rgba(255, 255, 255, 0.4);
      --screen: #0a0a0a;
      --accent: #7eafff;
      --power-on: #5ef2a4;

      --sans: "IBM Plex Sans", "IBM Plex Sans SC", "Noto Sans SC", system-ui, sans-serif;
      --mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace;
      --pixel: "Silkscreen", "JetBrains Mono", ui-monospace, monospace;

      /* Surface scale, matching their --ds-color-bg-surface-* ramp */
      --s1: rgba(255, 255, 255, 0.02);
      --s2: rgba(255, 255, 255, 0.06);
      --line: rgba(255, 255, 255, 0.08);
      --line-strong: rgba(255, 255, 255, 0.2);
      --lift: inset 0 1px 0 rgba(255, 255, 255, 0.12);

      /* Growth progress, 0 → 1, written by the scroll rig */
      --p: 0;
      --page-gutter: clamp(2rem, 6.5vw, 4.5rem);
      --page-max: 86rem;
    }

    * { box-sizing: border-box; margin: 0; padding: 0; }

    html {
      font-size: 118%;
      background: var(--bg);
      /* Always reserve the classic bar so unlocking the intro does not
         shove the layout. overflow-x stays visible here — clip on body. */
      overflow-y: scroll;
      scrollbar-gutter: stable;
      scrollbar-width: thin;
      scrollbar-color: rgba(255, 255, 255, 0.18) transparent;
      /* Keep native scroll instant — programmatic easing is handled in JS.
         CSS smooth + per-frame scrollTo stacks into large lag. */
      scroll-behavior: auto;
    }

    html::-webkit-scrollbar { width: 10px; }
    html::-webkit-scrollbar-track { background: transparent; }
    html::-webkit-scrollbar-thumb {
      background: rgba(255, 255, 255, 0.14);
      border-radius: 999px;
      border: 2px solid transparent;
      background-clip: padding-box;
    }
    html::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.28); background-clip: padding-box; }

    /* Intro must not toggle overflow on <html> — that collapses the classic
       scrollbar and flashes a width jump. Scroll is held in JS instead. */
    html.is-intro { overscroll-behavior: none; }

    body {
      font-family: var(--sans);
      background: var(--bg);
      color: var(--ink);
      /* clip does not force overflow-y:auto the way hidden does, so sticky
         still sticks to the viewport scroller */
      overflow-x: clip;
      -webkit-font-smoothing: antialiased;
    }

    .sr-only {
      position: absolute;
      width: 1px; height: 1px;
      padding: 0; margin: -1px;
      overflow: hidden;
      clip: rect(0 0 0 0);
      white-space: nowrap;
      border: 0;
    }

    .defs { position: absolute; width: 0; height: 0; overflow: hidden; }

    /* ================= signature ================= */

    .sig-ink { fill: currentColor; }

    .sig-nib {
      fill: var(--accent);
      filter: url(#nib-glow);
    }

    html.touch-intro .sig-nib { filter: none; }

    /* Full-bleed curtain that holds the signature before the desk appears */
    .curtain {
      position: fixed;
      inset: 0;
      z-index: 40;
      background: var(--bg);
      pointer-events: none;
      transition: opacity 0.9s ease 0.15s;
    }

    .curtain.is-lifted { opacity: 0; }

    .sig-fly {
      position: fixed;
      left: 50%;
      top: 50%;
      z-index: 41;
      color: #ffffff;
      pointer-events: none;
      transform: translate(-50%, -50%);
      transform-origin: 50% 50%;
      transition: color 0.9s ease;
    }

    .sig-fly svg {
      display: block;
      width: min(74vw, 780px);
      height: auto;
      aspect-ratio: 946 / 430;
      overflow: visible;
    }

    /* The pen travels left to right; both bands share this one timing.
       The driving class sits on <html> so it reaches the mask groups too. */
    html.sig-writing #wipe,
    html.sig-writing #wipe-nib {
      animation: write 2050ms cubic-bezier(0.34, 0.05, 0.5, 0.98) forwards;
    }

    @keyframes write {
      from { transform: translateX(0); }
      to   { transform: translateX(1100px); }
    }

    /* Skipped / reduced motion: the ink is simply already there */
    html.sig-written #wipe {
      animation: none;
      transform: translateX(1100px);
    }

    html.sig-written #wipe-nib { animation: none; opacity: 0; }

    .sig-fly.is-flying {
      color: rgba(168, 174, 186, 0.92);
      will-change: transform, opacity, color;
      transition:
        transform 980ms cubic-bezier(0.72, 0.02, 0.22, 1),
        opacity 360ms ease 640ms,
        color 900ms ease;
    }

    .sig-fly.is-landed { opacity: 0; }

    /* ================= scroll rig ================= */

    /* GROW viewport-heights of travel for the monitor, then 100vh of pin
       before the page slides on as normal flow. */
    .rig { height: 280vh; overflow-anchor: none; }  /* extra hold after grow so first screen can settle */
    html.is-entered .rig { height: 100vh; }

    .pin {
      position: sticky;
      top: 0;
      height: 100vh;
      overflow: hidden;
      z-index: 1;
    }

    /* --- environment behind the glass: it only exists while the
           monitor is still smaller than the viewport --- */

    .env {
      --sky: #000d4d;
      position: absolute;
      inset: 0;
      z-index: 0;
      pointer-events: none;
      background: radial-gradient(
        ellipse farthest-corner at 50% 0%,
        var(--sky) 0%,
        #000105 74%
      );
      transition: background 0.8s ease;
    }

    .nebula {
      position: absolute;
      inset: 0;
      pointer-events: none;
    }

    .nebula canvas {
      position: absolute;
      inset: 0;
      width: 100%;
      height: 100%;
      opacity: 0;
      transition: opacity 0.9s ease;
    }

    .nebula canvas.is-live { opacity: 1; }

    .hue-switch {
      position: absolute;
      left: 1.4rem;
      bottom: 1.4rem;
      z-index: 3;
      display: flex;
      gap: 0.45rem;
      pointer-events: auto;
    }

    .hue-switch button {
      width: 14px;
      height: 14px;
      border-radius: 50%;
      border: 1px solid rgba(255, 255, 255, 0.28);
      padding: 0;
      cursor: pointer;
      background: var(--swatch);
      box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.35);
      opacity: 0.55;
      transition: opacity 0.2s ease, transform 0.2s ease;
    }

    .hue-switch button[aria-pressed="true"] {
      opacity: 1;
      transform: scale(1.18);
      border-color: rgba(255, 255, 255, 0.7);
    }

    .hue-switch button:hover { opacity: 1; }

    .mesh {
      position: absolute;
      inset: 0;
      pointer-events: none;
    }

    .mesh canvas {
      position: absolute;
      inset: 0;
      width: 100%;
      height: 100%;
      background: transparent;
    }

    .mesh--env {
      -webkit-mask-image: radial-gradient(ellipse 82% 82% at 50% 46%, #000 42%, transparent 100%);
      mask-image: radial-gradient(ellipse 82% 82% at 50% 46%, #000 42%, transparent 100%);
    }

    /* ================= the monitor ================= */

    /* Starts as a 16:9 panel and is stretched to the viewport by the rig,
       so the glass still ends up exactly viewport-sized at p = 1 */
    .frame {
      position: absolute;
      left: 0;
      right: 0;
      top: 50%;
      height: 100%;
      z-index: 1;
      transform-origin: 50% 50%;
      transform: translateY(-50%);
      will-change: transform;
    }

    .chassis { position: absolute; inset: 0; }

    /* Cool graphite body; the light reads as coming from above */
    .bezel {
      position: absolute;
      inset: -22px -22px -54px;
      border-radius: 24px;
      background: linear-gradient(180deg, #3e3e41 0%, #2a2a2d 40%, #1b1b1e 75%, #141416 100%);
      box-shadow:
        inset 0 1.5px 0 rgba(255, 255, 255, 0.42),
        inset 1.5px 0 0 rgba(255, 255, 255, 0.13),
        inset -1.5px 0 0 rgba(255, 255, 255, 0.13),
        inset 0 -1.5px 0 rgba(0, 0, 0, 0.55),
        0 46px 90px -24px rgba(0, 0, 0, 0.95);
    }

    /* Power light, bottom right of the chin */
    .led {
      position: absolute;
      right: 40px;
      bottom: 22px;
      width: 7px;
      height: 7px;
      border-radius: 50%;
      background: #27272a;
      box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.5);
      transition: background 0.5s ease, box-shadow 0.5s ease;
    }

    .frame.is-lit .led {
      background: var(--power-on);
      box-shadow: 0 0 10px 2px rgba(94, 242, 164, 0.55);
      animation: led-breathe 3.4s ease-in-out infinite;
    }

    @keyframes led-breathe {
      0%, 100% { box-shadow: 0 0 8px 2px rgba(94, 242, 164, 0.4); opacity: 0.85; }
      50%      { box-shadow: 0 0 14px 3px rgba(94, 242, 164, 0.7); opacity: 1; }
    }

    .stand {
      position: absolute;
      left: 50%;
      top: 100%;
      margin-top: 54px;
      transform: translateX(-50%);
      width: 78px;
    }

    .stand::before,
    .stand::after {
      content: "";
      display: block;
      background: linear-gradient(180deg, #292a2c, #161617);
    }

    /* neck */
    .stand::before { height: 24px; }

    /* base */
    .stand::after {
      width: 176px;
      margin-left: -49px;
      height: 11px;
      border-radius: 0 0 6px 6px;
      box-shadow: 0 16px 30px -10px rgba(0, 0, 0, 0.9);
    }

    /* --- the glass: at p = 1 this is exactly the viewport --- */

    .glass {
      position: absolute;
      inset: 0;
      z-index: 2;
      overflow: hidden;
      /* Opens up as the monitor fills the viewport so the starfield can read through */
      background: rgba(8, 8, 10, calc(1 - var(--p) * 0.62));
      box-shadow:
        inset 0 0 0 1px rgba(0, 0, 0, 0.6),
        inset 0 1.5px 0 rgba(255, 255, 255, 0.12);
      transition: background 0.15s linear;
    }

    /* Light source. Without it the panel is an evenly filled rectangle and
       everything sitting on it looks pasted on rather than lit. */
    .glass::before {
      content: "";
      position: absolute;
      inset: 0;
      z-index: 1;
      pointer-events: none;
      /* The base fill is now a neutral near-black, so the screen reads as
         powered on through this glow rather than through a tinted fill */
      background:
        radial-gradient(ellipse 95% 60% at 50% -12%, rgba(103, 153, 254, 0.17), transparent 66%),
        radial-gradient(ellipse 70% 50% at 84% 112%, rgba(103, 153, 254, 0.07), transparent 70%);
      transition: background 0.6s ease;
    }

    .glass.is-lit::before {
      background:
        radial-gradient(ellipse 98% 64% at 50% -10%, rgba(103, 153, 254, 0.26), transparent 66%),
        radial-gradient(ellipse 70% 50% at 84% 112%, rgba(103, 153, 254, 0.10), transparent 70%);
    }

    /* Inner vignette keeps the dark panel from reading as flat paper */
    .glass::after {
      content: "";
      position: absolute;
      inset: 0;
      z-index: 6;
      pointer-events: none;
      background: radial-gradient(
        ellipse 74% 74% at 50% 42%,
        transparent 45%,
        rgba(0, 0, 0, 0.5) 100%
      );
      /* Must reach exactly 0, otherwise the glass edge leaves a visible
         seam against the page that follows it */
      opacity: calc(0.45 * (1 - var(--p)));
    }

    /* Soft sheen without filter:blur (blur forces a huge paint layer) */
    .sheen {
      position: absolute;
      inset: -20% -10%;
      z-index: 4;
      pointer-events: none;
      background: linear-gradient(
        104deg,
        transparent 28%,
        rgba(255, 255, 255, 0.035) 44%,
        rgba(255, 255, 255, 0.045) 50%,
        rgba(255, 255, 255, 0.035) 56%,
        transparent 72%
      );
      opacity: calc(1 - var(--p));
      animation: sheen-drift 14s ease-in-out infinite;
    }

    @keyframes sheen-drift {
      0%, 100% { transform: translateX(-4%); }
      50%      { transform: translateX(6%); }
    }

    /* Wake-up flicker and scan, played once when the desk lights up */
    .wake {
      position: absolute;
      inset: 0;
      z-index: 5;
      pointer-events: none;
      opacity: 0;
    }

    .wake-flare {
      position: absolute;
      inset: 0;
      background: #e4eaf6;
      opacity: 0;
    }

    .wake-scan {
      position: absolute;
      left: 0;
      right: 0;
      top: 0;
      height: 100%;
      opacity: 0;
    }

    .wake-scan::before {
      content: "";
      position: absolute;
      left: 0;
      right: 0;
      top: -30%;
      height: 24%;
      background: linear-gradient(180deg, transparent, rgba(232, 238, 250, 0.85), transparent);
    }

    .glass.is-lit .wake { opacity: 1; }
    .glass.is-lit .wake-flare { animation: flare 620ms steps(1, end) forwards; }
    .glass.is-lit .wake-scan { animation: scan 920ms cubic-bezier(0.4, 0, 0.3, 1) forwards; }
    .glass.is-lit .wake-idle {
      animation: idle-scan 9.5s ease-in-out 1.4s infinite;
    }

    /* Inside the glass these loops only burn frames */
    html.is-inside .glass {
      background: rgba(8, 8, 10, 0.32);
    }

    html.is-inside .sheen,
    html.is-inside .wake-idle { animation: none; opacity: 0; }
    html.is-inside .frame.is-lit .led { animation: none; }
    html.is-inside .frame { will-change: auto; }

    .wake-idle {
      position: absolute;
      left: 0;
      right: 0;
      top: 0;
      height: 100%;
      opacity: 0;
      pointer-events: none;
    }

    .wake-idle::before {
      content: "";
      position: absolute;
      left: 0;
      right: 0;
      top: -18%;
      height: 18%;
      background: linear-gradient(
        180deg,
        transparent,
        rgba(255, 255, 255, 0.035),
        transparent
      );
    }

    @keyframes idle-scan {
      0%   { transform: translateY(0);    opacity: 0; }
      12%  { opacity: 0.55; }
      88%  { opacity: 0.15; }
      100% { transform: translateY(128%); opacity: 0; }
    }

    @keyframes flare {
      0%, 100% { opacity: 0; }
      8%  { opacity: 0.3; }
      14% { opacity: 0.02; }
      22% { opacity: 0.22; }
      30% { opacity: 0.05; }
      44% { opacity: 0.14; }
      60% { opacity: 0.03; }
    }

    @keyframes scan {
      0%   { opacity: 0;    transform: translateY(0); }
      15%  { opacity: 0.38; }
      85%  { opacity: 0.1; }
      100% { opacity: 0;    transform: translateY(140%); }
    }

    /* ================= inside the glass: first screen ================= */

    .screen {
      --gutter: var(--page-gutter);
      position: relative;
      z-index: 2;
      height: 100%;
      display: flex;
      flex-direction: column;
      /* Content only becomes legible as the monitor approaches full size */
      opacity: calc(0.5 + 0.5 * var(--p));
    }

    /* The room's mesh fades out as we move inside the monitor; the screen
       picks up its own grid so the lower half is not a flat black field */
    .screen::before {
      content: "";
      position: absolute;
      inset: 0;
      z-index: -1;
      pointer-events: none;
      opacity: var(--p);
      background-image:
        linear-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px),
        linear-gradient(90deg, rgba(255, 255, 255, 0.03) 1px, transparent 1px);
      background-size: 64px 64px;
      -webkit-mask-image: radial-gradient(ellipse 88% 78% at 50% 38%, #000 25%, transparent 100%);
      mask-image: radial-gradient(ellipse 88% 78% at 50% 38%, #000 25%, transparent 100%);
    }

    /* Top/bottom HUD chrome — hidden */
    .screen-bar,
    .screen-foot {
      display: none !important;
    }

    .screen-bar,
    .screen-foot {
      flex: none;
      align-items: center;
      gap: 0.75rem;
      margin: 0 auto;
      max-width: var(--page-max);

      box-sizing: border-box;
      font-family: var(--pixel);
      font-size: 0.76rem;
      font-weight: 400;
      letter-spacing: 0.08em;
      color: rgba(255, 255, 255, 0.72);
    }

    /* Vertical rhythm inside the glass is driven by vh, because at p = 1 the
       glass *is* the viewport — on a short laptop screen fixed rem spacing
       pushes the buttons straight through the bottom bar */
    .screen-bar {
      padding-top: clamp(0.85rem, 2.3vh, 1.45rem);
      padding-bottom: clamp(0.55rem, 1.5vh, 0.95rem);
      border-bottom: 1px solid rgba(255, 255, 255, 0.05);
    }

    /* Mirrors the top bar so the tall viewport is framed, not just padded */
    .screen-foot {
      padding-top: clamp(0.55rem, 1.5vh, 0.95rem);
      padding-bottom: clamp(0.85rem, 2.3vh, 1.5rem);
      border-top: 1px solid rgba(255, 255, 255, 0.05);
    }

    .screen-bar .sep,
    .screen-foot .sep { flex: 1; }

    .screen-bar .icon,
    .screen-foot .icon { width: 0.85rem; height: 0.85rem; opacity: 0.85; }

    .hud-clock {
      display: inline-flex;
      align-items: center;
      gap: 0.4rem;
    }

    /* Status dots are software UI, so they carry the accent. The green stays
       on the bezel LED, where it reads as a hardware light. */
    .bar-dot {
      flex: none;
      width: 5px; height: 5px;
      border-radius: 50%;
      background: var(--accent);
      animation: pulse-dot 2.6s ease-in-out infinite;
    }

    @keyframes pulse-dot {
      0%, 100% { box-shadow: 0 0 0 3px rgba(103, 153, 254, 0.12), 0 0 9px rgba(103, 153, 254, 0.7); }
      50%      { box-shadow: 0 0 0 5px rgba(103, 153, 254, 0.04), 0 0 14px rgba(103, 153, 254, 0.95); }
    }

    .cols {
      position: relative;
      flex: 1;
      min-height: 0;
      display: grid;
      grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr);
      align-items: center;
      gap: 3.2rem;
      padding: clamp(1rem, 3.4vh, 2.2rem) var(--gutter);
      max-width: var(--page-max);
      width: 100%;
      margin: 0 auto;
      box-sizing: border-box;
    }

    /* --- left: who I am --- */

    .eyebrow {
      display: flex;
      align-items: center;
      gap: 0.7rem;
      font-family: var(--pixel);
      font-size: 0.84rem;
      font-weight: 700;
      letter-spacing: 0.08em;
      color: var(--accent);
      margin-bottom: clamp(0.8rem, 2.4vh, 1.5rem);
    }

    .icon {
      width: 1em;
      height: 1em;
      flex: none;
      display: block;
      fill: none;
      stroke: currentColor;
      stroke-width: 2;
      stroke-linecap: round;
      stroke-linejoin: round;
    }

    .eyebrow .icon { width: 0.95rem; height: 0.95rem; opacity: 0.9; }

    .eyebrow::before {
      display: none;
    }

    .wordmark-hit {
      display: block;
      width: min(28rem, 100%, 46vh);
      position: relative;
      z-index: 8;
      overflow: visible;
      pointer-events: auto;
      cursor: default;
    }

    .wordmark {
      display: block;
      position: relative;
      width: 100%;
      height: auto;
      aspect-ratio: 946 / 430;
      color: #e6e8ee;
      overflow: visible;
      opacity: 0;
      pointer-events: none;
      transform-origin: 12% 60%;
      transition: color 0.45s ease, filter 0.35s ease;
    }

    .wordmark .sig-ink { fill: #e6e8ee; }

    /* Glow is drop-shadow on the already-painted SVG. Visibility is CSS opacity,
       not animation-fill — Safari can leave `both` stuck at 0%. */
    .wordmark-hit.is-shown .wordmark {
      opacity: 1;
      animation: mark-arrive 520ms cubic-bezier(0.18, 0.02, 0.2, 1);
    }

    .wordmark-hit.is-shown:hover .wordmark,
    .wordmark-hit.is-shown.is-hot .wordmark {
      color: #ffffff;
      filter:
        drop-shadow(0 0 3px #fff)
        drop-shadow(0 0 18px var(--accent));
    }

    .wordmark-hit.is-shown:hover .wordmark .sig-ink,
    .wordmark-hit.is-shown.is-hot .wordmark .sig-ink {
      fill: #fff;
    }

    @keyframes mark-arrive {
      0% { transform: scale(0.86) translateX(-14px); }
      100% { transform: none; }
    }

    .lede {
      position: relative;
      z-index: 4;
      margin-top: clamp(1.1rem, 3.2vh, 2rem);
      max-width: 33rem;
      font-size: clamp(1rem, 1.85vh, 1.14rem);
      line-height: 1.88;
      letter-spacing: 0.01em;
      font-weight: 400;
      color: var(--soft);
      overflow: visible;
    }

    .lede-lead {
      position: relative;
      z-index: 1;
      display: block;
      margin-bottom: 0.55rem;
      font-size: 1.14em;
      font-weight: 500;
      letter-spacing: -0.01em;
      color: #fff;
    }

    /* Long bio only after diving into the glass — keeps the desk monitor compact */
    .lede-more {
      display: block;
      position: relative;
      z-index: 2;
      max-height: 0;
      opacity: 0;
      overflow: hidden;
      transform: translateY(-6px);
      transition:
        max-height 0.55s ease,
        opacity 0.4s ease,
        transform 0.45s ease,
        margin 0.4s ease;
    }

    html.is-inside .lede-more {
      max-height: none;
      opacity: 1;
      transform: none;
      overflow: visible;
    }

    @media (prefers-reduced-motion: reduce) {
      .lede-more {
        transition: none;
      }
    }

    .lede b {
      color: #fff;
      font-weight: 500;
    }

    .tags {
      display: flex;
      flex-wrap: wrap;
      gap: 0.45rem;
      margin-top: clamp(0.9rem, 2.8vh, 1.8rem);
      list-style: none;
    }

    /* Glass chips — hoverable tags */
    .tags li {
      display: inline-flex;
      align-items: center;
      gap: 0.38em;
      position: relative;
      isolation: isolate;
      overflow: hidden;
      font-family: var(--pixel);
      font-size: 0.66rem;
      font-weight: 400;
      letter-spacing: 0.06em;
      color: #fff;
      background: rgba(255, 255, 255, 0.07);
      border: 1px solid rgba(255, 255, 255, 0.26);
      border-radius: 999px;
      padding: 0.38rem 0.8rem;
      box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.22);
      cursor: pointer;
      transition: border-color 0.2s ease, background 0.2s ease, box-shadow 0.2s ease;
    }

    .links {
      display: flex;
      flex-wrap: wrap;
      gap: 0.55rem;
      margin-top: clamp(1.1rem, 3.4vh, 2.2rem);
    }

    /* Glass capsules — one solid primary, the rest a lit rim */
    .pill {
      position: relative;
      isolation: isolate;
      overflow: hidden;
      display: inline-flex;
      align-items: center;
      gap: 0.5rem;
      font-family: var(--sans);
      font-size: 0.96rem;
      font-weight: 500;
      letter-spacing: 0.02em;
      color: #fff;
      text-decoration: none;
      background: rgba(255, 255, 255, 0.08);
      border: 1px solid rgba(255, 255, 255, 0.3);
      border-radius: 999px;
      padding: 0.58rem 1.2rem;
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.32),
        inset 0 -1px 0 rgba(0, 0, 0, 0.35);
      transition:
        color 0.18s ease,
        border-color 0.18s ease,
        background 0.18s ease,
        transform 0.18s ease,
        box-shadow 0.18s ease;
    }

    .pill:hover {
      color: #fff;
      background: color-mix(in srgb, var(--accent) 16%, rgba(255, 255, 255, 0.1));
      border-color: color-mix(in srgb, var(--accent) 55%, #fff);
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.5),
        inset 0 -1px 0 rgba(0, 0, 0, 0.28),
        0 0 22px -6px color-mix(in srgb, var(--accent) 55%, transparent);
      transform: translateY(-1px);
    }

    .pill--primary {
      color: #0a0a0a;
      font-weight: 600;
      background: #fff;
      border-color: #fff;
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 1),
        0 8px 22px -10px rgba(0, 0, 0, 0.65);
    }

    .pill--primary:hover {
      color: #0a0a0a;
      background: #fff;
      border-color: #fff;
      box-shadow:
        inset 0 1px 0 #fff,
        0 0 26px -6px color-mix(in srgb, var(--accent) 50%, transparent),
        0 8px 22px -10px rgba(0, 0, 0, 0.55);
    }

    .pill .icon { width: 1.05rem; height: 1.05rem; position: relative; z-index: 1; }
    .pill .arrow { position: relative; z-index: 1; transition: transform 0.18s ease; }
    .pill:hover .arrow { transform: translateX(2px); }

    .pill::after,
    .tags li::after,
    .posts .tag::after,
    .recent .tag::after {
      content: "";
      position: absolute;
      inset: -30% -50%;
      background: linear-gradient(
        115deg,
        transparent 38%,
        color-mix(in srgb, var(--accent) 55%, #fff) 50%,
        transparent 62%
      );
      opacity: 0;
      transform: translateX(-38%) rotate(8deg);
      transition: transform 0.55s ease, opacity 0.28s ease;
      pointer-events: none;
      mix-blend-mode: overlay;
    }

    .pill:hover::after,
    .tags li:hover::after,
    .posts .tag:hover::after,
    .recent .tag:hover::after {
      opacity: 0.95;
      transform: translateX(38%) rotate(8deg);
    }

    .tags li:hover,
    .posts .tag:hover,
    .recent .tag:hover {
      border-color: color-mix(in srgb, var(--accent) 60%, #fff);
      background: color-mix(in srgb, var(--accent) 18%, rgba(255, 255, 255, 0.08));
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.42),
        0 0 16px -4px color-mix(in srgb, var(--accent) 50%, transparent);
    }

    /* --- right: CI/CD sprite loop --- */

    .col-right {
      align-self: stretch;
      display: flex;
      align-items: center;
      min-height: 0;
    }

    .viz {
      position: relative;
      display: flex;
      flex-direction: column;
      width: 100%;
      height: 100%;
      max-height: 34rem;
      border: 1px solid var(--line);
      border-radius: 14px;
      background: #000;
      box-shadow:
        var(--lift),
        0 0 0 1px rgba(103, 153, 254, 0.08),
        0 24px 50px -28px rgba(0, 0, 0, 0.9);
      overflow: hidden;
    }

    .viz-head {
      position: relative;
      z-index: 2;
      flex: none;
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding: 0.7rem 1rem;
      font-family: var(--pixel);
      font-size: 0.68rem;
      font-weight: 400;
      letter-spacing: 0.08em;
      color: #fff;
      border-bottom: 1px solid rgba(255, 255, 255, 0.06);
      background: #000;
    }

    .viz-head .icon { width: 0.78rem; height: 0.78rem; }
    .viz-live {
      display: inline-flex;
      align-items: center;
      gap: 0.45rem;
      color: var(--accent);
    }

    .viz-body {
      position: relative;
      flex: 1;
      min-height: 0;
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 0.55rem 0.6rem 0.65rem;
      background: #000;
    }

    .viz-stack {
      display: flex;
      flex-direction: column;
      align-items: center;
      width: 100%;
      max-height: 100%;
      min-height: 0;
      gap: 0.5rem;
    }

    .viz-stage {
      position: relative;
      width: 100%;
      aspect-ratio: 1344 / 768;
      max-height: calc(100% - 2rem);
      border-radius: 10px;
      overflow: hidden;
      background: #000;
      flex: 0 1 auto;
    }

    /* Static MyWork still when cicd play fails / stalls (WeChat + desktop) */
    .viz-stage.is-fallback {
      background-color: #050506;
    }

    .viz-stage.is-fallback .viz-video:not(.is-live) {
      opacity: 0;
    }

    .viz-video {
      display: block;
      position: absolute;
      inset: 0;
      width: 100%;
      height: 100%;
      object-fit: contain;
      object-position: center;
      opacity: 0;
      transition: opacity 0.7s ease;
    }

    .viz-caption {
      position: relative;
      flex: none;
      display: block;
      width: 100%;
      height: clamp(1.35rem, 2vw, 1.65rem);
      margin: 0;
      padding: 0 0.5rem 0.15rem;
      text-align: center;
      transform: none;
      pointer-events: none;
      overflow: visible;
    }

    .viz-beat {
      position: absolute;
      inset: 0;
      display: flex;
      align-items: center;
      justify-content: center;
      margin: 0;
      opacity: 0;
      transform: translateY(22px) scale(0.94);
      filter: blur(4px);
      pointer-events: none;
      transition:
        opacity 0.55s cubic-bezier(0.22, 1, 0.36, 1),
        transform 0.6s cubic-bezier(0.22, 1, 0.36, 1),
        filter 0.5s ease;
    }

    .viz-beat.is-on {
      opacity: 1;
      transform: translateY(0) scale(1);
      filter: blur(0);
      z-index: 1;
    }

    .viz-beat.is-leave {
      opacity: 0;
      transform: translateY(-16px) scale(0.97);
      filter: blur(3px);
      z-index: 0;
      transition:
        opacity 0.4s ease,
        transform 0.45s cubic-bezier(0.4, 0, 0.2, 1),
        filter 0.35s ease;
    }

    .viz-beat-copy {
      display: block;
      margin: 0;
      font-family: var(--sans);
      font-size: clamp(0.95rem, 1.4vw, 1.15rem);
      font-weight: 600;
      letter-spacing: -0.028em;
      line-height: 1.2;
      color: rgba(255, 255, 255, 0.94);
    }

    .viz-beat-copy em {
      display: inline-block;
      font-style: italic;
      font-weight: 600;
      color: var(--accent);
      text-shadow: 0 0 22px color-mix(in srgb, var(--accent) 40%, transparent);
      transform-origin: 50% 70%;
    }

    .viz-beat.is-on .viz-beat-copy em {
      animation: viz-em-kick 0.75s cubic-bezier(0.2, 1.35, 0.3, 1) both;
    }

    @keyframes viz-em-kick {
      0% {
        opacity: 0.25;
        transform: translateY(0.35em) scale(0.82) skewX(-6deg);
        filter: none;
        letter-spacing: 0.06em;
      }
      55% {
        opacity: 1;
        transform: translateY(-0.06em) scale(1.08) skewX(0deg);
        filter: blur(0);
        letter-spacing: -0.02em;
      }
      100% {
        opacity: 1;
        transform: translateY(0) scale(1) skewX(0deg);
        filter: blur(0);
        letter-spacing: -0.028em;
      }
    }

    @media (prefers-reduced-motion: reduce) {
      .viz-beat {
        position: static;
        opacity: 1;
        transform: none;
        filter: none;
        transition: none;
      }
      .viz-beat[hidden] {
        display: none !important;
      }
      .viz-beat.is-leave {
        transition: none;
      }
      .viz-beat.is-on .viz-beat-copy em,
      .viz-beat-copy em {
        animation: none;
        text-shadow: none;
        transform: none;
        filter: none;
      }
    }

    .viz-video.is-live { opacity: 1; }

    @media (prefers-reduced-motion: reduce) {
      .viz-video { opacity: 1; }
    }

    /* ================= scroll cue ================= */

    /* Desk landing — first screen after intro */
    .cue {
      position: fixed;
      left: 50%;
      bottom: clamp(1.1rem, 3.4vh, 2rem);
      z-index: 40;
      transform: translateX(-50%);
      display: inline-flex;
      flex-direction: column;
      align-items: center;
      gap: 0.45rem;
      margin: 0;
      padding: 0.35rem 0.8rem;
      border: 0;
      background: transparent;
      font-family: var(--pixel);
      font-size: 0.62rem;
      font-weight: 400;
      letter-spacing: 0.14em;
      color: rgba(255, 255, 255, 0.62);
      pointer-events: none;
      opacity: 0;
      transition: opacity 0.55s ease, color 0.2s ease;
    }

    .cue.is-shown {
      opacity: 1;
      pointer-events: auto;
      cursor: pointer;
    }

    .cue:hover { color: rgba(255, 255, 255, 0.92); }

    .cue .icon {
      width: 0.85rem;
      height: 0.85rem;
      animation: screen-cue-bob 1.8s ease-in-out infinite;
    }

    .cue-rail {
      position: relative;
      width: 1px;
      height: 28px;
      overflow: hidden;
      background: linear-gradient(180deg, rgba(126, 175, 255, 0.55), transparent);
    }

    .cue-rail::after {
      content: "";
      position: absolute;
      left: -1px;
      top: -12px;
      width: 3px;
      height: 10px;
      border-radius: 2px;
      background: var(--accent);
      box-shadow: 0 0 10px rgba(126, 175, 255, 0.75);
      animation: cue 1.9s ease-in-out infinite;
    }

    @keyframes cue {
      0%   { transform: translateY(0);    opacity: 0; }
      30%  { opacity: 1; }
      70%  { opacity: 1; }
      100% { transform: translateY(50px); opacity: 0; }
    }

    /* First-screen hint — pinned to the glass bottom while sticky */
    .screen-cue {
      position: absolute;
      left: 50%;
      bottom: clamp(1rem, 3.2vh, 1.85rem);
      z-index: 12;
      transform: translateX(-50%);
      display: inline-flex;
      flex-direction: column;
      align-items: center;
      gap: 0.45rem;
      padding: 0.35rem 0.8rem;
      border: 0;
      background: transparent;
      color: rgba(255, 255, 255, 0.62);
      font-family: var(--pixel);
      font-size: 0.62rem;
      letter-spacing: 0.14em;
      cursor: pointer;
      opacity: 0;
      pointer-events: none;
      transition: opacity 0.55s ease, color 0.2s ease, transform 0.2s ease;
    }

    .screen-cue.is-shown {
      opacity: 1;
      pointer-events: auto;
    }

    /* Lock to the viewport while the glass *is* the first screen */
    html.is-inside .screen-cue {
      position: fixed;
      bottom: clamp(1.1rem, 3.4vh, 2rem);
      z-index: 40;
    }

    .screen-cue:hover {
      color: rgba(255, 255, 255, 0.92);
    }

    .screen-cue .icon {
      width: 0.85rem;
      height: 0.85rem;
      animation: screen-cue-bob 1.8s ease-in-out infinite;
    }

    .screen-cue-rail {
      position: relative;
      width: 1px;
      height: 28px;
      overflow: hidden;
      background: linear-gradient(180deg, rgba(126, 175, 255, 0.55), transparent);
    }

    .screen-cue-rail::after {
      content: "";
      position: absolute;
      left: -1px;
      top: -12px;
      width: 3px;
      height: 9px;
      border-radius: 2px;
      background: var(--accent);
      animation: cue 1.9s ease-in-out infinite;
    }

    @keyframes screen-cue-bob {
      0%, 100% { transform: translateY(0); opacity: 0.55; }
      50% { transform: translateY(5px); opacity: 1; }
    }

    @media (prefers-reduced-motion: reduce) {
      html { scroll-behavior: auto; }
      .cue .icon,
      .cue-rail::after,
      .screen-cue .icon,
      .screen-cue-rail::after { animation: none; }
      .cue-rail::after,
      .screen-cue-rail::after { top: auto; transform: none; }
    }

    /* ================= the page below ================= */

    .doc {
      position: relative;
      z-index: 2;
      background: transparent;
      overflow: clip;
    }

    .doc-amb {
      position: absolute;
      inset: 0;
      z-index: 0;
      pointer-events: none;
      overflow: hidden;
      opacity: 0.55;
    }

    .doc-amb::before {
      content: "";
      position: absolute;
      inset: 0;
      opacity: 0.22;
      background-image:
        linear-gradient(color-mix(in srgb, var(--accent) 22%, rgba(255,255,255,0.08)) 1px, transparent 1px),
        linear-gradient(90deg, color-mix(in srgb, var(--accent) 18%, rgba(255,255,255,0.07)) 1px, transparent 1px);
      background-size: 48px 48px;
      -webkit-mask-image: radial-gradient(ellipse 92% 80% at 50% 30%, #000 15%, transparent 88%);
      mask-image: radial-gradient(ellipse 92% 80% at 50% 30%, #000 15%, transparent 88%);
      animation: doc-grid-pulse 9s ease-in-out infinite;
    }

    @keyframes doc-grid-pulse {
      0%, 100% { opacity: 0.2; }
      50% { opacity: 0.45; }
    }

    .doc-amb::after {
      content: "";
      position: absolute;
      left: -25%;
      top: -10%;
      width: 35%;
      height: 120%;
      background: linear-gradient(
        108deg,
        transparent 28%,
        color-mix(in srgb, var(--accent) 38%, transparent) 48%,
        transparent 70%
      );
      animation: doc-sweep 11s cubic-bezier(0.4, 0, 0.2, 1) infinite;
      filter: blur(12px);
    }

    @keyframes doc-sweep {
      0%   { transform: translateX(0) skewX(-8deg); opacity: 0.2; }
      30%  { opacity: 0.95; }
      100% { transform: translateX(340%); opacity: 0.15; }
    }

    .doc-beam {
      position: absolute;
      left: 0;
      top: 0;
      width: 100%;
      height: 100%;
      opacity: 0.55;
      animation: doc-beam 14s linear infinite;
    }

    .doc-beam::after {
      content: "";
      position: absolute;
      left: 0;
      top: 0;
      width: 100%;
      height: 1px;
      background: linear-gradient(
        90deg,
        transparent,
        color-mix(in srgb, var(--accent) 70%, #fff),
        transparent
      );
      box-shadow: 0 0 18px 2px color-mix(in srgb, var(--accent) 45%, transparent);
    }

    .doc-beam--b {
      animation-delay: -7s;
      opacity: 0.35;
    }

    .doc-beam--b::after { height: 1px; }

    @keyframes doc-beam {
      0%   { transform: translateY(-2%);  opacity: 0; }
      8%   { opacity: 0.7; }
      92%  { opacity: 0.35; }
      100% { transform: translateY(102%); opacity: 0; }
    }

    .doc-orb {
      display: none;
    }

    .doc-orb--a {
      width: min(28vw, 16rem);
      height: min(28vw, 16rem);
      left: 4%;
      top: 12%;
      background: color-mix(in srgb, var(--accent) 62%, transparent);
      animation: doc-drift-a 16s ease-in-out infinite;
    }

    .doc-orb--b {
      width: min(24vw, 14rem);
      height: min(24vw, 14rem);
      right: 6%;
      top: 42%;
      background: color-mix(in srgb, var(--accent) 48%, #6080d0);
      animation: doc-drift-b 18s ease-in-out infinite;
    }

    .doc-orb--c {
      width: min(30vw, 17rem);
      height: min(30vw, 17rem);
      left: 38%;
      bottom: 8%;
      background: color-mix(in srgb, var(--accent) 40%, rgba(255, 255, 255, 0.25));
      animation: doc-drift-c 20s ease-in-out infinite;
    }

    @keyframes doc-drift-a {
      0%, 100% { transform: translate(0, 0) scale(1); opacity: 0.55; }
      50% { transform: translate(18%, 22%) scale(1.25); opacity: 1; }
    }

    @keyframes doc-drift-b {
      0%, 100% { transform: translate(0, 0) scale(1); opacity: 0.45; }
      50% { transform: translate(-20%, -16%) scale(1.3); opacity: 0.95; }
    }

    @keyframes doc-drift-c {
      0%, 100% { transform: translate(0, 0) scale(1); opacity: 0.4; }
      50% { transform: translate(-14%, -18%) scale(0.85); opacity: 0.9; }
    }

    .doc-dust {
      position: absolute;
      inset: 0;
    }

    .doc-dust i {
      position: absolute;
      width: 2px;
      height: 10px;
      border-radius: 99px;
      background: linear-gradient(
        180deg,
        #fff,
        color-mix(in srgb, var(--accent) 80%, transparent)
      );
      opacity: 0;
      animation: doc-dust 9s linear infinite;
      box-shadow: 0 0 10px 1px color-mix(in srgb, var(--accent) 75%, transparent);
    }

    .doc-dust i:nth-child(1) { left: 8%; top: 20%; animation-delay: 0s; }
    .doc-dust i:nth-child(2) { left: 18%; top: 55%; animation-delay: -1.2s; animation-duration: 7.5s; }
    .doc-dust i:nth-child(3) { left: 28%; top: 12%; animation-delay: -2.4s; animation-duration: 10s; }
    .doc-dust i:nth-child(4) { left: 38%; top: 68%; animation-delay: -0.6s; animation-duration: 8.5s; }
    .doc-dust i:nth-child(5) { left: 48%; top: 30%; animation-delay: -3.6s; animation-duration: 7.2s; }
    .doc-dust i:nth-child(6) { left: 58%; top: 78%; animation-delay: -1.8s; animation-duration: 9.5s; }
    .doc-dust i:nth-child(7) { left: 68%; top: 18%; animation-delay: -4.2s; animation-duration: 8s; }
    .doc-dust i:nth-child(8) { left: 76%; top: 48%; animation-delay: -2.8s; animation-duration: 7s; }
    .doc-dust i:nth-child(9) { left: 84%; top: 72%; animation-delay: -5.2s; animation-duration: 10.5s; }
    .doc-dust i:nth-child(10) { left: 12%; top: 88%; animation-delay: -1s; animation-duration: 8.8s; }
    .doc-dust i:nth-child(11) { left: 92%; top: 28%; animation-delay: -3.4s; animation-duration: 7.8s; }
    .doc-dust i:nth-child(12) { left: 52%; top: 8%; animation-delay: -4.6s; animation-duration: 9.2s; }
    .doc-dust i:nth-child(13) { left: 33%; top: 42%; animation-delay: -1.6s; animation-duration: 7.4s; }
    .doc-dust i:nth-child(14) { left: 63%; top: 58%; animation-delay: -3.8s; animation-duration: 8.2s; }
    .doc-dust i:nth-child(15) { left: 22%; top: 36%; animation-delay: -5.6s; animation-duration: 10.2s; }
    .doc-dust i:nth-child(16) { left: 88%; top: 62%; animation-delay: -2.2s; animation-duration: 6.8s; }

    @keyframes doc-dust {
      0%   { opacity: 0; transform: translate3d(0, 24px, 0) scaleY(0.4); }
      8%   { opacity: 1; }
      70%  { opacity: 0.55; }
      100% { opacity: 0; transform: translate3d(12px, -62vh, 0) scaleY(1.4); }
    }

    .doc-amb::before,
    .doc-amb::after,
    .doc-orb,
    .doc-beam,
    .doc-dust i {
      animation-play-state: paused;
    }

    .doc-amb.is-running::before,
    .doc-amb.is-running::after,
    .doc-amb.is-running .doc-orb,
    .doc-amb.is-running .doc-beam,
    .doc-amb.is-running .doc-dust i {
      animation-play-state: running;
    }

    /* The sweep carries a static blur while it travels — keep it on its own
       layer so the blur rasterizes once instead of every frame. Scoped to
       is-running so the layer is released while the band is off screen. */
    .doc-amb.is-running::after,
    .doc-amb.is-running .doc-beam {
      will-change: transform;
    }

    @media (prefers-reduced-motion: reduce) {
      .doc-orb,
      .doc-amb::before,
      .doc-amb::after,
      .doc-beam { animation: none; }
      .doc-dust i { animation: none; opacity: 0.4; height: 3px; }
      .doc-orb--a,
      .doc-orb--b,
      .doc-orb--c { opacity: 0.55; }
    }

    .band {
      position: relative;
      z-index: 1;
      max-width: var(--page-max);
      margin: 0 auto;
      padding: 6rem var(--page-gutter);
      box-sizing: border-box;
      content-visibility: auto;
      contain-intrinsic-size: auto 720px;
    }

    .band-head {
      display: flex;
      align-items: baseline;
      gap: 1rem;
      margin-bottom: 2.6rem;
    }

    .band-head h2 {
      font-family: var(--sans);
      font-size: clamp(1.2rem, 2.4vw, 1.65rem);
      font-weight: 600;
      letter-spacing: 0.01em;
      color: var(--ink);
    }

    .band-head .rule { flex: 1; height: 1px; background: var(--line); }

    .band-head .count {
      font-family: var(--mono);
      font-size: 0.68rem;
      letter-spacing: 0.14em;
      color: var(--faint);
    }

    .posts { list-style: none; display: grid; }

    .posts li { border-top: 1px solid rgba(255, 255, 255, 0.06); }
    .posts li:last-child { border-bottom: 1px solid rgba(255, 255, 255, 0.06); }

    .posts li.is-lead a { padding-top: 2.15rem; padding-bottom: 2.15rem; }
    .posts li.is-lead h3 {
      font-size: clamp(1.2rem, 2.2vw, 1.55rem);
      letter-spacing: -0.02em;
    }

    .posts a {
      position: relative;
      display: grid;
      grid-template-columns: 6.5rem 1fr auto;
      align-items: baseline;
      gap: 1.4rem;
      padding: 1.6rem 2.9rem 1.6rem 1.1rem;
      text-decoration: none;
      color: var(--ink);
      transition: background 0.22s ease;
    }

    .posts a::after {
      content: "→";
      position: absolute;
      right: 1.1rem;
      top: 50%;
      color: var(--accent);
      font-size: 0.95rem;
      opacity: 0;
      transform: translateY(-50%) translateX(-6px);
      transition: opacity 0.22s ease, transform 0.22s ease;
    }

    .posts a:hover::after { opacity: 1; transform: translateY(-50%) translateX(0); }

    /* Accent rail wipes in from the middle instead of the row sliding
       sideways — the old padding shift nudged every line of text */
    .posts a::before {
      content: "";
      position: absolute;
      left: 0;
      top: 14%;
      bottom: 14%;
      width: 2px;
      border-radius: 2px;
      background: var(--accent);
      transform: scaleY(0);
      transition: transform 0.28s cubic-bezier(0.4, 0, 0.2, 1);
    }

    .posts a:hover {
      background: linear-gradient(90deg, rgba(103, 153, 254, 0.055), rgba(255, 255, 255, 0.012) 55%, transparent);
    }

    .posts a:hover::before { transform: scaleY(1); }

    .posts time {
      font-family: var(--mono);
      font-size: 0.7rem;
      letter-spacing: 0.08em;
      color: var(--faint);
      font-variant-numeric: tabular-nums;
    }

    .posts h3 {
      font-family: var(--sans);
      font-size: 1.06rem;
      font-weight: 500;
      color: var(--ink);
      letter-spacing: 0.01em;
      transition: color 0.2s ease;
    }

    .posts a:hover h3 { color: #fff; }
    .posts p { margin-top: 0.45rem; font-size: 0.9rem; color: var(--dim); line-height: 1.75; }

    .posts .tag {
      display: inline-flex;
      align-items: center;
      gap: 0.32em;
      position: relative;
      isolation: isolate;
      overflow: hidden;
      font-family: var(--pixel);
      font-size: 0.58rem;
      letter-spacing: 0.05em;
      color: #fff;
      background: rgba(255, 255, 255, 0.07);
      border: 1px solid rgba(255, 255, 255, 0.22);
      border-radius: 999px;
      padding: 0.3rem 0.62rem;
      white-space: nowrap;
      box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.18);
      cursor: pointer;
      transition: border-color 0.2s ease, background 0.2s ease, box-shadow 0.2s ease;
    }

    /* ================= showcase: selected work ================= */

    .band-kicker .icon { width: 0.78rem; height: 0.78rem; }

    .band-kicker {
      display: flex;
      align-items: center;
      gap: 0.42rem;
      font-family: var(--pixel);
      font-size: 0.7rem;
      letter-spacing: 0.08em;
      color: var(--accent);
      margin-bottom: 0.85rem;
    }

    .band-head .rule {
      background: var(--line);
    }

    .band-lede {
      max-width: 34rem;
      margin: -1.4rem 0 2.8rem;
      color: var(--soft);
      line-height: 1.8;
      font-size: 0.98rem;
    }

    .band--work { max-width: var(--page-max); }

    /* ================= about + corner buddy ================= */

    .band--about {
      padding-bottom: clamp(7rem, 18vh, 11rem);
    }

    .about-copy {
      max-width: min(36rem, calc(100% - 7rem));
      color: var(--soft);
      font-size: 1.02rem;
      line-height: 1.85;
    }

    .about-copy p {
      margin: 0 0 1.05em;
    }

    .about-copy p:last-child { margin-bottom: 0; }

    .about-copy b { color: var(--ink); font-weight: 600; }

    .about-buddy {
      position: fixed;
      right: clamp(0.35rem, 2.2vw, 1.4rem);
      bottom: clamp(0.2rem, 1.6vh, 1rem);
      z-index: 28;
      width: min(56vw, 340px);
      aspect-ratio: 1;
      pointer-events: none;
      opacity: 0;
      transform: translate3d(12%, 18%, 0) scale(0.88);
      filter: drop-shadow(0 18px 28px rgba(0, 0, 0, 0.45));
      transition:
        opacity 0.48s ease,
        transform 0.55s cubic-bezier(0.22, 1, 0.36, 1);
      will-change: opacity, transform;
    }

    .about-buddy.is-on {
      opacity: 1;
      transform: translate3d(0, 0, 0) scale(1);
    }

    .about-buddy-video,
    .about-buddy-image {
      display: block;
      width: 100%;
      height: 100%;
      object-fit: contain;
      background: transparent;
      -webkit-mask-image: radial-gradient(ellipse 72% 78% at 50% 54%, #000 62%, transparent 100%);
      mask-image: radial-gradient(ellipse 72% 78% at 50% 54%, #000 62%, transparent 100%);
    }

    .about-buddy-video {
      mix-blend-mode: screen;
    }

    /* VP9 alpha is dropped on iOS / Safari / WeChat — use a real-alpha WebP instead */
    .about-buddy-image { display: none; }
    .about-buddy.is-image .about-buddy-video { display: none; }
    .about-buddy.is-image .about-buddy-image { display: block; }

    @media (max-width: 720px) {
      .about-copy { max-width: 100%; }
      .band--about {
        z-index: 2;
        padding-bottom: clamp(7rem, 32vw, 10rem);
      }
      .band--about .band-lede,
      .band--about .about-copy {
        position: relative;
        z-index: 1;
      }
      .about-buddy {
        z-index: 0;
        width: min(58vw, 236px);
        right: 0.1rem;
        bottom: 0;
      }
      .about-buddy.is-on {
        opacity: 0.88;
      }
    }

    @media (prefers-reduced-motion: reduce) {
      .about-buddy {
        transition: opacity 0.2s ease;
        transform: none;
      }
      .about-buddy.is-on { transform: none; }
    }

    .cases {
      list-style: none;
      display: grid;
      gap: 0.95rem;
    }

    .case { position: relative; }

    .case > a,
    .case > .case-shell {
      position: relative;
      display: grid;
      grid-template-columns: minmax(14rem, 0.9fr) minmax(16rem, 1.1fr);
      grid-template-areas: "media copy";
      align-items: stretch;
      gap: 1rem 1.4rem;
      min-height: 18rem;
      padding: 1.15rem 1.15rem 1.35rem;
      border: 1px solid rgba(255, 255, 255, 0.09);
      border-radius: 18px;
      background:
        radial-gradient(ellipse 80% 70% at 18% 30%, color-mix(in srgb, var(--accent) 8%, transparent), transparent 60%),
        rgba(16, 16, 17, 0.55);
      box-shadow:
        var(--lift),
        0 22px 48px -32px rgba(0, 0, 0, 0.9);
      text-decoration: none;
      color: inherit;
      /* keep borders/glows of media cards; clip only inside media widgets */
      overflow: visible;
      backdrop-filter: blur(6px);
      -webkit-backdrop-filter: blur(6px);
    }

    .case > .case-shell {
      /* tooltips on inline marks need to escape the card */
      overflow: visible;
    }

    .case:nth-child(even) > a,
    .case:nth-child(even) > .case-shell {
      grid-template-columns: minmax(16rem, 1.1fr) minmax(14rem, 0.9fr);
      grid-template-areas: "copy media";
    }

    .case > a:hover,
    .case > .case-shell:hover { border-color: rgba(255, 255, 255, 0.2); }

    .case-no {
      position: absolute;
      left: 0.85rem;
      bottom: 0.15rem;
      z-index: 0;
      font-family: var(--sans);
      font-size: clamp(3.4rem, 7vw, 5.4rem);
      font-weight: 700;
      letter-spacing: -0.06em;
      line-height: 0.78;
      color: transparent;
      -webkit-text-stroke: 1.5px rgba(255, 255, 255, 0.1);
      pointer-events: none;
    }

    .case-media {
      grid-area: media;
      position: relative;
      z-index: 1;
      min-height: 0;
      display: flex;
      align-items: stretch;
      justify-content: stretch;
      overflow: visible;
      /* room for 1px borders so they aren't flush-clipped by grid rounding */
      padding: 1px;
    }

    .case-media .sh-demo {
      width: 100%;
      height: auto;
      min-height: 0;
      max-height: none;
      aspect-ratio: 5 / 4;
      display: flex;
      flex-direction: column;
      border-radius: 12px;
    }

    .case-media .sh-chrome {
      flex: none;
      padding: 0.48rem 0.65rem;
      gap: 0.4rem;
    }

    .case-media .sh-chrome-title { font-size: 0.52rem; }
    .case-media .sh-chrome-live { font-size: 0.48rem; }
    .case-media .sh-dots i { width: 5px; height: 5px; }

    .case-media .sh-view {
      flex: 1;
      min-height: 0;
      overflow: hidden;
      position: relative;
    }

    .case-media .sh-body {
      --cam: 0px;
      --sh-row-h: 2.85rem;
      --sh-gap: 0.38rem;
      gap: var(--sh-gap);
      padding: 0.55rem 0.65rem 0.7rem;
      transform: translate3d(0, var(--cam), 0);
      /* camera driven by rAF — no CSS snap between beats */
    }

    .case-media .sh-demo {
      transition: opacity 0.45s ease;
    }

    .case-media .sh-demo.is-cam-fade {
      opacity: 0;
    }

    .case-media .sh-avatar { width: 1.25rem; height: 1.25rem; border-radius: 7px; }
    .case-media .sh-avatar svg { width: 0.7rem; height: 0.7rem; }
    .case-media .sh-prompt {
      padding: 0 0.55rem;
      font-size: 0.72rem;
      line-height: 1.3;
      border-radius: 8px;
    }
    .case-media .sh-tool {
      padding: 0.32rem 0.55rem;
      gap: 0.12rem;
      border-radius: 8px;
    }
    .case-media .sh-tool-head { font-size: 0.5rem; line-height: 1.2; }
    .case-media .sh-tool-cmd { font-size: 0.6rem; line-height: 1.25; }
    .case-media .sh-results {
      padding: 0.45rem 0.4rem 0.4rem;
      gap: 0.35rem;
      border-radius: 10px;
    }
    .case-media .sh-results-head { gap: 0.12rem; }
    .case-media .sh-results-head b { font-size: 0.7rem; }
    .case-media .sh-results-head span { font-size: 0.46rem; }
    .case-media .sh-results-tabs { gap: 0.18rem; }
    .case-media .sh-results-tabs span { font-size: 0.42rem; padding: 0.12rem 0.32rem; }
    .case-media .sh-results-search { height: 1.35rem; font-size: 0.46rem; padding: 0 0.45rem; margin: 0 0 0.1rem; }
    .case-media .sh-results-search svg { width: 0.62rem; height: 0.62rem; }
    .case-media .sh-grid { gap: 0.32rem; }
    .case-media .sh-skill {
      padding: 0.45rem 0.46rem 0.4rem;
      gap: 0.3rem;
      border-radius: 10px;
      min-height: 0;
    }
    .case-media .sh-skill-top { gap: 0.36rem; }
    .case-media .sh-skill-ico { width: 1.5rem; height: 1.5rem; border-radius: 7px; }
    .case-media .sh-skill-ico svg { width: 0.7rem; height: 0.7rem; }
    .case-media .sh-skill-name h4 { font-size: 0.6rem; }
    .case-media .sh-skill-cat { font-size: 0.42rem; }
    .case-media .sh-skill-tag { font-size: 0.4rem; padding: 0.05rem 0.26rem; }
    .case-media .sh-skill > p { font-size: 0.48rem; line-height: 1.35; min-height: 1.3em; }
    .case-media .sh-skill-meta { font-size: 0.4rem; gap: 0.32rem; }
    .case-media .sh-action {
      display: flex;
      flex-direction: column;
      align-items: center;
      width: min(13.8rem, calc(100% - 1.2rem));
      padding: 0.85rem 0.85rem 0.78rem;
      border-radius: 14px;
      gap: 0.42rem;
    }
    .case-media .sh-action-kicker { font-size: 0.44rem; letter-spacing: 0.14em; }
    .case-media .sh-action-ico { width: 2.3rem; height: 2.3rem; margin: 0.08rem 0 0; }
    .case-media .sh-action-ico svg { width: 0.92rem; height: 0.92rem; }
    .case-media .sh-action-copy { gap: 0.14rem; }
    .case-media .sh-action-copy strong { font-size: 0.78rem; }
    .case-media .sh-action-meta { font-size: 0.48rem; }
    .case-media .sh-action-copy span { font-size: 0.48rem; }
    .case-media .sh-action-bar { height: 0.26rem; margin-top: 0.15rem; }

    .case-copy {
      grid-area: copy;
      position: relative;
      z-index: 1;
      display: flex;
      flex-direction: column;
      justify-content: center;
      min-width: 0;
      padding: 0.35rem 0.15rem 1.75rem;
    }

    .case-meta {
      font-family: var(--pixel);
      font-size: 0.52rem;
      letter-spacing: 0.08em;
      color: var(--accent);
      margin-bottom: 0.5rem;
    }

    .case-title {
      display: flex;
      align-items: center;
      gap: 0.5rem;
      margin-bottom: 0.5rem;
    }

    .case-ico {
      flex: none;
      width: 1.55rem;
      height: 1.55rem;
      border-radius: 8px;
      display: grid;
      place-items: center;
      color: #fff;
      background: rgba(255, 255, 255, 0.06);
      border: 1px solid rgba(255, 255, 255, 0.12);
    }

    .case-ico .icon { width: 0.82rem; height: 0.82rem; }

    .case h3 {
      font-family: var(--sans);
      font-size: clamp(0.98rem, 1.5vw, 1.15rem);
      font-weight: 600;
      letter-spacing: 0.01em;
      line-height: 1.35;
    }

    .case p {
      font-size: 0.82rem;
      line-height: 1.65;
      color: var(--soft);
      margin-bottom: 0.8rem;
    }

    .case-shell--harness .case-copy p {
      margin-bottom: 0.55rem;
    }

    .case-shell--harness .case-copy p:last-of-type {
      margin-bottom: 0.85rem;
    }

    .case-shell--harness .case-go {
      margin-bottom: 0.15rem;
    }

    .case p b { color: #fff; font-weight: 500; }

    .case p a {
      color: #fff;
      text-decoration: none;
    }

    .case-go {
      display: inline-flex;
      align-items: center;
      gap: 0.35rem;
      font-size: 0.78rem;
      font-weight: 500;
      color: #fff;
      text-decoration: none;
    }

    .case-go .icon { width: 0.78rem; height: 0.78rem; }

    .case-art {
      width: 100%;
      height: 100%;
      min-height: 16.5rem;
      aspect-ratio: auto;
      max-height: none;
      border-radius: 12px;
      border: 1px solid rgba(255, 255, 255, 0.14);
      background:
        radial-gradient(ellipse 70% 60% at 30% 40%, rgba(126, 175, 255, 0.1), transparent 68%),
        #0b0b0c;
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.06),
        0 0 0 1px rgba(0, 0, 0, 0.4);
      overflow: hidden;
    }

    .viz-p99 {
      position: relative;
      width: 100%;
      height: 100%;
      padding: 1.3rem 1.2rem 1.1rem;
    }

    .viz-p99 svg { width: 100%; height: calc(100% - 1.6rem); display: block; }

    .viz-p99 em {
      position: absolute;
      right: 1.15rem;
      top: 1.1rem;
      font-family: var(--mono);
      font-size: 0.68rem;
      font-style: normal;
      letter-spacing: 0.04em;
      color: var(--faint);
    }

    /* ---- AI Harness case ---- */
    .harness-art {
      position: relative;
      display: flex;
      align-items: center;
      justify-content: center;
      width: 100%;
      height: 100%;
      min-height: 16.5rem;
      aspect-ratio: auto;
      max-height: none;
      margin: 0;
      border-radius: 12px;
      border: 1px solid rgba(255, 255, 255, 0.14);
      background: rgba(255, 255, 255, 0.035);
      overflow: visible;
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.04),
        inset 0 1px 0 rgba(255, 255, 255, 0.07),
        0 0 0 1px rgba(0, 0, 0, 0.4);
      transition:
        border-color 0.28s ease,
        box-shadow 0.28s ease,
        background 0.28s ease;
    }

    .case-shell--harness:hover .harness-art,
    .case-shell--express:hover .harness-art,
    .harness-art:hover,
    .harness-art.is-play {
      border-color: color-mix(in srgb, var(--accent) 50%, rgba(255, 255, 255, 0.22));
      background: rgba(255, 255, 255, 0.05);
      box-shadow:
        inset 0 0 0 1px color-mix(in srgb, var(--accent) 28%, transparent),
        inset 0 1px 0 rgba(255, 255, 255, 0.08),
        0 0 0 1px color-mix(in srgb, var(--accent) 20%, rgba(0, 0, 0, 0.4));
    }

    .harness-art-stage {
      position: relative;
      width: 100%;
      max-height: 100%;
      aspect-ratio: 800 / 776;
    }

    .harness-art-base,
    .harness-art > img {
      display: block;
      width: 100%;
      height: 100%;
      object-fit: contain;
      object-position: center;
      opacity: 0.5;
      transition: opacity 0.45s ease;
    }

    .case-shell--harness:hover .harness-art-base,
    .case-shell--express:hover .harness-art-base,
    .harness-art:hover .harness-art-base,
    .harness-art.is-play .harness-art-base {
      opacity: 0.6;
      transition: opacity 0.25s ease;
    }

    .harness-puff {
      position: absolute;
      z-index: 3;
      display: block;
      width: var(--puff-w, 9%);
      aspect-ratio: 1;
      background: center / contain no-repeat;
      opacity: 0;
      transform: translate(-50%, -15%) scale(0.35) rotate(calc(var(--puff-rot, 0deg) - 10deg));
      filter: drop-shadow(0 0 0 transparent);
      pointer-events: none;
      transition:
        opacity 0.22s ease,
        transform 0.45s cubic-bezier(0.2, 1.2, 0.3, 1),
        filter 0.3s ease;
    }

    .harness-puff--1 {
      left: 6.35%;
      top: 21%;
      --puff-w: 9.8%;
      --puff-rot: -10deg;
      --puff-x: -6px;
      --puff-rise: -72%;
      --puff-peak: -82%;
      --puff-scale: 1.08;
      background-image: url("../assets/harness-puff-1.webp");
      transition-delay: 0ms;
    }

    .harness-puff--2 {
      left: 63.56%;
      top: 42.65%;
      z-index: 1;
      --puff-w: 5.8%;
      --puff-rot: 8deg;
      --puff-x: 4px;
      --puff-rise: -48%;
      --puff-peak: -56%;
      --puff-scale: 1.02;
      background-image: url("../assets/harness-puff-2.webp");
      transition-delay: 70ms;
    }

    .harness-ellipsis {
      position: absolute;
      left: 84.5%;
      top: 43.81%;
      z-index: 2;
      display: block;
      width: 14.5%;
      aspect-ratio: 252 / 166;
      background: center / contain no-repeat url("../assets/harness-ellipsis.webp");
      opacity: 0;
      transform: translate(-50%, 18%) scale(0.35);
      filter: drop-shadow(0 0 0 transparent);
      pointer-events: none;
      transition:
        opacity 0.22s ease,
        transform 0.45s cubic-bezier(0.2, 1.2, 0.3, 1),
        filter 0.3s ease;
    }

    .harness-art:hover .harness-puff,
    .case-shell--harness:hover .harness-puff,
    .harness-art.is-play .harness-puff {
      opacity: 0.6;
      transform: translate(-50%, var(--puff-rise, -72%)) scale(var(--puff-scale, 1.08)) rotate(var(--puff-rot, 0deg));
      filter: drop-shadow(0 0 8px rgba(255, 255, 255, 0.4));
      animation: harness-puff-burst 0.55s cubic-bezier(0.2, 1.25, 0.3, 1) both,
                 harness-puff-float 0.9s ease-in-out 0.5s infinite alternate;
    }

    .harness-art:hover .harness-puff--1,
    .case-shell--harness:hover .harness-puff--1,
    .harness-art.is-play .harness-puff--1 {
      animation-delay: 0s, 0.5s;
    }

    .harness-art:hover .harness-puff--2,
    .case-shell--harness:hover .harness-puff--2,
    .harness-art.is-play .harness-puff--2 {
      animation-delay: 0.08s, 0.58s;
    }

    .harness-art:hover .harness-ellipsis,
    .case-shell--harness:hover .harness-ellipsis,
    .harness-art.is-play .harness-ellipsis {
      opacity: 0.6;
      transform: translate(-50%, -42%) scale(1.06);
      filter: drop-shadow(0 3px 10px rgba(0, 0, 0, 0.4));
      animation: harness-ellipsis-pop 0.55s cubic-bezier(0.2, 1.25, 0.3, 1) 0.48s both,
                 harness-ellipsis-bob 1s ease-in-out 0.95s infinite alternate;
    }

    @keyframes harness-puff-burst {
      0% {
        opacity: 0;
        transform: translate(-50%, -10%) scale(0.3) rotate(calc(var(--puff-rot, 0deg) - 12deg));
      }
      60% {
        opacity: 0.6;
        transform: translate(calc(-50% + var(--puff-x, 0px)), var(--puff-peak, -82%)) scale(calc(var(--puff-scale, 1.08) + 0.08)) rotate(var(--puff-rot, 0deg));
      }
      100% {
        opacity: 0.6;
        transform: translate(-50%, var(--puff-rise, -72%)) scale(var(--puff-scale, 1.08)) rotate(var(--puff-rot, 0deg));
      }
    }

    @keyframes harness-puff-float {
      from {
        translate: 0 0;
        rotate: -2deg;
      }
      to {
        translate: var(--puff-x, 0) -7px;
        rotate: 2deg;
      }
    }

    @keyframes harness-ellipsis-pop {
      0% {
        opacity: 0;
        transform: translate(-50%, 20%) scale(0.3);
      }
      60% {
        opacity: 0.6;
        transform: translate(-50%, -50%) scale(1.12);
      }
      100% {
        opacity: 0.6;
        transform: translate(-50%, -42%) scale(1.06);
      }
    }

    @keyframes harness-ellipsis-bob {
      from {
        translate: 0 0;
      }
      to {
        translate: 2px -6px;
      }
    }

    /* ---- Express / creation case ---- */
    .express-art-stage {
      position: relative;
      width: 100%;
      max-height: 100%;
      aspect-ratio: 800 / 799;
    }

    .express-bubble {
      position: absolute;
      left: 77.8%;
      top: 21.8%;
      z-index: 2;
      display: block;
      width: 42%;
      aspect-ratio: 520 / 422;
      background: center / contain no-repeat url("../assets/express-bubble.webp");
      opacity: 0;
      transform: translate(-50%, 18%) scale(0.35);
      filter: drop-shadow(0 0 0 transparent);
      pointer-events: none;
      transition:
        opacity 0.22s ease,
        transform 0.45s cubic-bezier(0.2, 1.2, 0.3, 1),
        filter 0.3s ease;
    }

    .case-shell--express:hover .express-bubble,
    .harness-art:has(.express-bubble):hover .express-bubble,
    .harness-art.is-play .express-bubble {
      opacity: 0.6;
      transform: translate(-50%, -8%) scale(1.04);
      filter: drop-shadow(0 6px 16px rgba(0, 0, 0, 0.45));
      animation: express-bubble-pop 0.55s cubic-bezier(0.2, 1.25, 0.3, 1) both,
                 express-bubble-bob 1s ease-in-out 0.5s infinite alternate;
    }

    @keyframes express-bubble-pop {
      0% {
        opacity: 0;
        transform: translate(-50%, 22%) scale(0.3);
      }
      60% {
        opacity: 0.6;
        transform: translate(-50%, -14%) scale(1.1);
      }
      100% {
        opacity: 0.6;
        transform: translate(-50%, -8%) scale(1.04);
      }
    }

    @keyframes express-bubble-bob {
      from { translate: 0 0; }
      to { translate: 3px -6px; }
    }

    @media (prefers-reduced-motion: reduce) {
      .harness-art,
      .case-shell--harness:hover .harness-art,
      .harness-art:hover,
      .harness-art.is-play {
        transition: none;
      }
      .harness-puff,
      .harness-ellipsis,
      .express-bubble {
        transition: opacity 0.2s ease;
        transform: translate(-50%, -50%) scale(1);
      }
      .harness-art:hover .harness-puff,
      .case-shell--harness:hover .harness-puff,
      .harness-art.is-play .harness-puff,
      .harness-art:hover .harness-ellipsis,
      .case-shell--harness:hover .harness-ellipsis,
      .harness-art.is-play .harness-ellipsis,
      .case-shell--express:hover .express-bubble,
      .harness-art:has(.express-bubble):hover .express-bubble,
      .harness-art.is-play .express-bubble {
        opacity: 0.6;
        transform: translate(-50%, -50%) scale(1);
        animation: none;
        filter: none;
      }
    }

    .case-copy .harness-mark,
    .recent .harness-mark,
    .lede .harness-mark,
    .about-copy .harness-mark,
    .band--about .band-lede .harness-mark {
      position: relative;
      display: inline-block;
      margin: 0 0.05em;
      padding: 0.05em 0.22em;
      border: 0;
      border-radius: 4px;
      background: rgba(126, 175, 255, 0.14);
      color: #fff;
      font: inherit;
      font-weight: 500;
      letter-spacing: inherit;
      line-height: inherit;
      text-decoration: none;
      cursor: pointer;
      transition: background 0.18s ease, box-shadow 0.18s ease;
      vertical-align: baseline;
    }

    .case-copy .harness-mark:hover,
    .case-copy .harness-mark:focus-visible,
    .case-copy .harness-mark.is-on,
    .recent .harness-mark:hover,
    .recent .harness-mark:focus-visible,
    .recent .harness-mark.is-on,
    .lede .harness-mark:hover,
    .lede .harness-mark:focus-visible,
    .lede .harness-mark.is-on,
    .about-copy .harness-mark:hover,
    .about-copy .harness-mark:focus-visible,
    .about-copy .harness-mark.is-on,
    .band--about .band-lede .harness-mark:hover,
    .band--about .band-lede .harness-mark:focus-visible,
    .band--about .band-lede .harness-mark.is-on {
      background: rgba(126, 175, 255, 0.32);
      box-shadow: 0 0 0 1px rgba(126, 175, 255, 0.35);
      outline: none;
      z-index: 20;
    }

    .lede .harness-mark:hover,
    .lede .harness-mark:focus-visible,
    .lede .harness-mark.is-on {
      z-index: 30;
    }

    .case-copy a.harness-mark {
      text-decoration: none;
    }

    /* Shared bubble pop — text tip or image preview */
    .harness-bubble {
      position: absolute;
      left: 50%;
      bottom: calc(100% + 0.65rem);
      z-index: 40;
      display: grid;
      gap: 0.4rem;
      width: max-content;
      max-width: min(20rem, 78vw);
      padding: 0.5rem 0.6rem;
      border-radius: 10px;
      border: 1px solid rgba(255, 255, 255, 0.12);
      background: rgba(12, 12, 14, 0.97);
      box-shadow:
        0 16px 36px -18px rgba(0, 0, 0, 0.92),
        0 0 0 1px rgba(0, 0, 0, 0.35);
      color: rgba(255, 255, 255, 0.84);
      font-size: 0.72rem;
      font-weight: 400;
      line-height: 1.5;
      letter-spacing: 0.01em;
      text-align: left;
      white-space: normal;
      transform: translateX(-50%) translateY(6px) scale(0.96);
      opacity: 0;
      pointer-events: none;
      transform-origin: 50% 100%;
      transition:
        opacity 0.18s ease,
        transform 0.22s cubic-bezier(0.22, 1, 0.36, 1);
    }

    .harness-bubble::after {
      content: "";
      position: absolute;
      left: 50%;
      top: 100%;
      width: 10px;
      height: 10px;
      margin-left: -5px;
      margin-top: -5px;
      border-right: 1px solid rgba(255, 255, 255, 0.12);
      border-bottom: 1px solid rgba(255, 255, 255, 0.12);
      background: rgba(12, 12, 14, 0.97);
      transform: rotate(45deg);
    }

    .case-copy .harness-mark:hover .harness-bubble,
    .case-copy .harness-mark:focus-visible .harness-bubble,
    .case-copy .harness-mark.is-on .harness-bubble,
    .recent .harness-mark:hover .harness-bubble,
    .recent .harness-mark:focus-visible .harness-bubble,
    .recent .harness-mark.is-on .harness-bubble,
    .lede .harness-mark:hover .harness-bubble,
    .lede .harness-mark:focus-visible .harness-bubble,
    .lede .harness-mark.is-on .harness-bubble,
    .about-copy .harness-mark:hover .harness-bubble,
    .about-copy .harness-mark:focus-visible .harness-bubble,
    .about-copy .harness-mark.is-on .harness-bubble,
    .band--about .band-lede .harness-mark:hover .harness-bubble,
    .band--about .band-lede .harness-mark:focus-visible .harness-bubble,
    .band--about .band-lede .harness-mark.is-on .harness-bubble {
      opacity: 1;
      transform: translateX(-50%) translateY(0) scale(1);
    }

    .harness-bubble-title {
      display: block;
      padding: 0.15rem 0.2rem 0.05rem;
      font-family: var(--sans);
      font-size: 0.78rem;
      font-weight: 500;
      letter-spacing: 0.01em;
      line-height: 1.35;
      color: rgba(255, 255, 255, 0.9);
    }

    .viz-pipe {
      height: 100%;
      display: flex;
      align-items: center;
      justify-content: center;
      gap: 0.45rem;
      padding: 0 1.1rem;
      font-family: var(--pixel);
      font-size: 0.58rem;
      letter-spacing: 0.08em;
      color: var(--dim);
    }

    .viz-pipe span,
    .viz-pipe b {
      padding: 0.45rem 0.65rem;
      border-radius: 8px;
      border: 1px solid rgba(255, 255, 255, 0.1);
      background: rgba(255, 255, 255, 0.04);
    }

    .viz-pipe b {
      color: #fff;
      border-color: color-mix(in srgb, var(--accent) 45%, transparent);
      background: color-mix(in srgb, var(--accent) 14%, rgba(255, 255, 255, 0.04));
    }

    .viz-pipe i {
      width: 1.1rem;
      height: 1px;
      background: rgba(255, 255, 255, 0.18);
    }

    .viz-trace {
      height: 100%;
      display: flex;
      flex-direction: column;
      justify-content: center;
      gap: 0.55rem;
      padding: 1.4rem 1.3rem;
    }

    .viz-trace span {
      display: block;
      height: 0.55rem;
      border-radius: 99px;
      background: rgba(126, 175, 255, 0.22);
    }

    .viz-trace span:nth-child(1) { width: 82%; background: rgba(126, 175, 255, 0.38); }
    .viz-trace span:nth-child(2) { width: 54%; margin-left: 12%; }
    .viz-trace span:nth-child(3) { width: 38%; margin-left: 22%; }
    .viz-trace span:nth-child(4) { width: 28%; margin-left: 18%; background: rgba(126, 175, 255, 0.16); }

    /* ---- SkillHub agent demo: ask → search → hit → install ---- */
    .sh-demo {
      position: relative;
      z-index: 2;
      width: 100%;
      border-radius: 16px;
      border: 1px solid rgba(255, 255, 255, 0.14);
      background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.045), transparent 42%),
        rgba(12, 12, 14, 0.92);
      box-shadow:
        inset 0 0 0 1px rgba(255, 255, 255, 0.04),
        inset 0 1px 0 rgba(255, 255, 255, 0.06),
        0 0 0 1px rgba(0, 0, 0, 0.4);
      overflow: hidden;
    }

    .sh-chrome {
      display: flex;
      align-items: center;
      gap: 0.55rem;
      padding: 0.7rem 0.9rem;
      border-bottom: 1px solid rgba(255, 255, 255, 0.06);
      background: rgba(255, 255, 255, 0.02);
    }

    .sh-dots {
      display: flex;
      gap: 5px;
    }

    .sh-dots i {
      width: 7px;
      height: 7px;
      border-radius: 50%;
      background: rgba(255, 255, 255, 0.14);
    }

    .sh-dots i:nth-child(1) { background: #ff5f57; opacity: 0.75; }
    .sh-dots i:nth-child(2) { background: #febc2e; opacity: 0.75; }
    .sh-dots i:nth-child(3) { background: #28c840; opacity: 0.75; }

    .sh-chrome-title {
      flex: 1;
      font-family: var(--mono);
      font-size: 0.62rem;
      letter-spacing: 0.08em;
      color: rgba(255, 255, 255, 0.45);
    }

    .sh-chrome-live {
      font-family: var(--mono);
      font-size: 0.55rem;
      letter-spacing: 0.1em;
      color: rgba(94, 242, 164, 0.7);
      opacity: 0;
      transition: opacity 0.3s ease;
    }

    .sh-demo.is-searching .sh-chrome-live,
    .sh-demo.is-found .sh-chrome-live,
    .sh-demo.is-installing .sh-chrome-live,
    .sh-demo.is-ready .sh-chrome-live {
      opacity: 1;
    }

    .sh-view {
      position: relative;
      overflow: hidden;
      flex: 1;
      min-height: 0;
    }

    .sh-body {
      --sh-row-h: 3.35rem;
      --sh-gap: 0.45rem;
      display: flex;
      flex-direction: column;
      gap: var(--sh-gap);
      padding: 0.9rem 1.05rem 0.95rem;
    }

    .sh-chat {
      display: flex;
      gap: 0.65rem;
      align-items: center;
      height: var(--sh-row-h);
      min-height: var(--sh-row-h);
      flex: none;
    }

    .sh-avatar {
      flex: none;
      width: 1.7rem;
      height: 1.7rem;
      border-radius: 9px;
      display: grid;
      place-items: center;
      color: #dce8ff;
      background:
        linear-gradient(145deg, rgba(103, 153, 254, 0.35), rgba(103, 153, 254, 0.08));
      border: 1px solid rgba(103, 153, 254, 0.42);
      box-shadow:
        0 0 0 1px rgba(103, 153, 254, 0.08),
        0 0 18px rgba(103, 153, 254, 0.22);
    }

    .sh-avatar svg {
      width: 0.95rem;
      height: 0.95rem;
      display: block;
    }

    .sh-prompt {
      flex: 1;
      height: 100%;
      min-height: 0;
      display: flex;
      align-items: center;
      padding: 0 0.8rem;
      border-radius: 11px;
      border: 1px solid rgba(255, 255, 255, 0.1);
      background: rgba(255, 255, 255, 0.045);
      font-size: 0.86rem;
      line-height: 1.35;
      color: rgba(255, 255, 255, 0.88);
    }

    .sh-prompt .dim { color: rgba(255, 255, 255, 0.38); }
    .sh-prompt b { color: #fff; font-weight: 500; }

    .sh-caret {
      display: inline-block;
      width: 0.08em;
      height: 1em;
      margin-left: 1px;
      vertical-align: -0.12em;
      background: var(--accent);
      animation: sh-blink 1s steps(1) infinite;
    }

    .sh-demo.is-searching .sh-caret,
    .sh-demo.is-found .sh-caret,
    .sh-demo.is-installing .sh-caret,
    .sh-demo.is-ready .sh-caret { display: none; }

    @keyframes sh-blink { 50% { opacity: 0; } }

    .sh-tool {
      display: grid;
      grid-template-rows: auto 1fr auto;
      align-content: center;
      gap: 0.18rem;
      height: var(--sh-row-h);
      min-height: var(--sh-row-h);
      padding: 0.4rem 0.75rem;
      box-sizing: border-box;
      border-radius: 11px;
      border: 1px solid rgba(103, 153, 254, 0.18);
      background: rgba(103, 153, 254, 0.06);
      opacity: 0;
      transform: translateY(8px);
      transition: opacity 0.35s ease, transform 0.35s cubic-bezier(0.22, 1, 0.36, 1);
      flex: none;
    }

    .sh-demo.is-searching .sh-tool,
    .sh-demo.is-found .sh-tool,
    .sh-demo.is-installing .sh-tool,
    .sh-demo.is-ready .sh-tool {
      opacity: 1;
      transform: none;
    }

    .sh-tool-head {
      display: flex;
      align-items: center;
      gap: 0.45rem;
      font-family: var(--mono);
      font-size: 0.58rem;
      letter-spacing: 0.08em;
      color: rgba(103, 153, 254, 0.9);
    }

    .sh-tool-head svg {
      width: 12px;
      height: 12px;
      flex: none;
    }

    .sh-tool-cmd {
      font-family: var(--mono);
      font-size: 0.72rem;
      letter-spacing: 0.02em;
      color: rgba(255, 255, 255, 0.78);
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }

    .sh-tool-bar {
      height: 2px;
      border-radius: 999px;
      background: rgba(255, 255, 255, 0.06);
      overflow: hidden;
      opacity: 0;
      /* reserve bar height so searching on/off doesn't reflow rows */
      flex: none;
    }

    .sh-demo.is-searching .sh-tool-bar { opacity: 1; }

    .sh-tool-bar i {
      display: block;
      height: 100%;
      width: 0;
      border-radius: inherit;
      background: linear-gradient(90deg, transparent, var(--accent), transparent);
      animation: sh-scan 0.9s ease-in-out infinite;
    }

    @keyframes sh-scan {
      0% { width: 0; margin-left: 0; opacity: 0.4; }
      50% { width: 55%; margin-left: 20%; opacity: 1; }
      100% { width: 0; margin-left: 100%; opacity: 0.2; }
    }

    .sh-results {
      display: flex;
      flex-direction: column;
      gap: 0.45rem;
      min-height: 0;
      flex: none;
      padding: 0.55rem 0.5rem 0.5rem;
      border-radius: 12px;
      background: #070708;
      border: 1px solid rgba(255, 255, 255, 0.08);
      opacity: 0;
      transform: translateY(8px);
      transition: opacity 0.4s ease, transform 0.45s cubic-bezier(0.22, 1, 0.36, 1);
    }

    .sh-demo.is-searching .sh-results,
    .sh-demo.is-found .sh-results,
    .sh-demo.is-installing .sh-results,
    .sh-demo.is-ready .sh-results {
      opacity: 1;
      transform: none;
    }

    .sh-results-head {
      display: flex;
      flex-direction: column;
      gap: 0.18rem;
      padding: 0 0.1rem 0.05rem;
    }

    .sh-results-head b {
      font-size: 0.82rem;
      font-weight: 650;
      color: rgba(255, 255, 255, 0.94);
      letter-spacing: 0.01em;
      line-height: 1.2;
    }

    .sh-results-head span {
      font-size: 0.5rem;
      color: rgba(255, 255, 255, 0.36);
      line-height: 1.3;
    }

    .sh-results-tabs {
      display: flex;
      flex-wrap: wrap;
      gap: 0.22rem;
      padding: 0.05rem 0.02rem 0.1rem;
    }

    .sh-results-tabs span {
      font-size: 0.48rem;
      letter-spacing: 0.02em;
      color: rgba(255, 255, 255, 0.4);
      padding: 0.16rem 0.4rem;
      border-radius: 99px;
      background: transparent;
    }

    .sh-results-tabs span.is-on {
      color: rgba(255, 255, 255, 0.9);
      background: rgba(255, 255, 255, 0.09);
    }

    .sh-results-search {
      display: flex;
      align-items: center;
      gap: 0.4rem;
      height: 1.55rem;
      padding: 0 0.55rem;
      border-radius: 99px;
      border: 1px solid rgba(255, 255, 255, 0.08);
      background: rgba(255, 255, 255, 0.04);
      color: rgba(255, 255, 255, 0.32);
      font-size: 0.52rem;
      margin: 0.05rem 0 0.15rem;
    }

    .sh-results-search svg {
      width: 0.7rem;
      height: 0.7rem;
      flex: none;
      opacity: 0.7;
    }

    .sh-demo.is-searching .sh-results-search,
    .sh-demo.is-found .sh-results-search {
      border-color: color-mix(in srgb, var(--accent) 35%, transparent);
      color: rgba(255, 255, 255, 0.55);
    }

    .sh-demo.is-searching .sh-results-search em,
    .sh-demo.is-found .sh-results-search em {
      color: rgba(255, 255, 255, 0.88);
      font-style: normal;
    }

    .sh-grid {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 0.42rem;
    }

    .sh-skill {
      display: flex;
      flex-direction: column;
      gap: 0.38rem;
      min-width: 0;
      padding: 0.58rem 0.58rem 0.5rem;
      border-radius: 12px;
      background: #141416;
      border: 1px solid rgba(255, 255, 255, 0.09);
      box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.035);
      opacity: 0.95;
      transition:
        opacity 0.35s ease,
        border-color 0.3s ease,
        box-shadow 0.3s ease,
        background 0.3s ease;
    }

    .sh-demo.is-searching .sh-skill:not(.is-hit) {
      opacity: 0.88;
    }

    .sh-demo.is-searching .sh-skill.is-hit {
      opacity: 0.5;
    }

    .sh-demo.is-found .sh-skill:not(.is-hit),
    .sh-demo.is-installing .sh-skill:not(.is-hit),
    .sh-demo.is-ready .sh-skill:not(.is-hit) {
      opacity: 0.55;
    }

    .sh-demo.is-found .sh-skill.is-hit,
    .sh-demo.is-installing .sh-skill.is-hit,
    .sh-demo.is-ready .sh-skill.is-hit {
      opacity: 1;
      border-color: color-mix(in srgb, var(--accent) 50%, transparent);
      background: color-mix(in srgb, var(--accent) 9%, #141416);
      box-shadow:
        0 0 0 1px color-mix(in srgb, var(--accent) 16%, transparent),
        0 12px 30px -18px color-mix(in srgb, var(--accent) 55%, transparent);
    }

    .sh-skill-top {
      display: flex;
      align-items: flex-start;
      gap: 0.48rem;
      min-width: 0;
    }

    .sh-skill-ico {
      width: 1.85rem;
      height: 1.85rem;
      border-radius: 9px;
      display: grid;
      place-items: center;
      color: #fff;
      background: linear-gradient(145deg, #6b8cff, #3b6fff);
      border: 0;
      flex: none;
      box-shadow: 0 4px 10px -6px rgba(0, 0, 0, 0.7);
    }

    .sh-skill:nth-child(1) .sh-skill-ico { background: linear-gradient(145deg, #7aa2ff, #3b6fff); }
    .sh-skill:nth-child(2) .sh-skill-ico { background: linear-gradient(145deg, #ff9a5c, #e85d2a); }
    .sh-skill.is-hit .sh-skill-ico { background: linear-gradient(145deg, #6b9bff, #3b6fff); }
    .sh-skill:nth-child(3) .sh-skill-ico { background: linear-gradient(145deg, #6fd3a0, #2faf72); }
    .sh-skill:nth-child(4) .sh-skill-ico { background: linear-gradient(145deg, #c084fc, #7c4dff); }
    .sh-skill:nth-child(5) .sh-skill-ico { background: linear-gradient(145deg, #67e8f9, #0891b2); }
    .sh-skill:nth-child(6) .sh-skill-ico { background: linear-gradient(145deg, #f9a8d4, #db2777); }

    .sh-skill-ico svg {
      width: 0.9rem;
      height: 0.9rem;
      display: block;
    }

    .sh-skill-head {
      min-width: 0;
      flex: 1;
      display: grid;
      gap: 0.2rem;
      padding-top: 0.02rem;
    }

    .sh-skill-name {
      display: flex;
      align-items: center;
      gap: 0.28rem;
      min-width: 0;
    }

    .sh-skill-name h4 {
      margin: 0;
      font-size: 0.7rem;
      font-weight: 650;
      color: rgba(255, 255, 255, 0.95);
      line-height: 1.2;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }

    .sh-skill-name i {
      width: 0.72rem;
      height: 0.72rem;
      border-radius: 50%;
      flex: none;
      background: #3b82f6;
      color: #fff;
      display: grid;
      place-items: center;
      font-style: normal;
    }

    .sh-skill-name i svg {
      width: 0.42rem;
      height: 0.42rem;
      display: block;
    }

    .sh-skill-tags {
      display: flex;
      flex-wrap: wrap;
      align-items: center;
      gap: 0.22rem;
      min-width: 0;
    }

    .sh-skill-cat {
      font-size: 0.48rem;
      color: rgba(255, 255, 255, 0.42);
      letter-spacing: 0.01em;
      white-space: nowrap;
    }

    .sh-skill-tag {
      display: inline-flex;
      align-items: center;
      width: fit-content;
      max-width: 100%;
      padding: 0.08rem 0.34rem;
      border-radius: 99px;
      font-size: 0.44rem;
      font-weight: 500;
      letter-spacing: 0.01em;
      color: rgba(255, 255, 255, 0.55);
      background: rgba(255, 255, 255, 0.06);
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }

    .sh-skill-tag.is-warn {
      color: #f0a020;
      background: rgba(245, 158, 11, 0.12);
      gap: 0.14rem;
    }

    .sh-skill-tag.is-warn svg {
      width: 0.5rem;
      height: 0.5rem;
      flex: none;
    }

    .sh-skill > p {
      margin: 0;
      font-size: 0.54rem;
      line-height: 1.42;
      color: rgba(255, 255, 255, 0.4);
      display: -webkit-box;
      -webkit-line-clamp: 2;
      -webkit-box-orient: vertical;
      overflow: hidden;
      min-height: 1.54em;
    }

    .sh-skill-meta {
      display: flex;
      align-items: center;
      gap: 0.5rem;
      margin-top: auto;
      padding-top: 0.12rem;
      border-top: 1px solid rgba(255, 255, 255, 0.05);
      font-family: var(--mono);
      font-size: 0.45rem;
      color: rgba(255, 255, 255, 0.3);
      white-space: nowrap;
    }

    .sh-skill-meta em {
      font-style: normal;
      display: inline-flex;
      align-items: center;
      gap: 0.16rem;
    }

    .sh-skill-meta em svg {
      width: 0.55rem;
      height: 0.55rem;
      opacity: 0.7;
    }

    .sh-skill-meta b {
      margin-left: auto;
      font-weight: 500;
      color: rgba(255, 255, 255, 0.26);
    }

    .sh-badge {
      font-family: var(--mono);
      font-size: 0.44rem;
      letter-spacing: 0.08em;
      color: color-mix(in srgb, var(--accent) 92%, #fff);
      background: color-mix(in srgb, var(--accent) 18%, transparent);
      border-radius: 99px;
      padding: 0.1rem 0.32rem;
      opacity: 0;
      transform: scale(0.85);
      transition: opacity 0.3s ease 0.15s, transform 0.3s ease 0.15s;
    }

    .sh-demo.is-found .sh-skill.is-hit .sh-badge,
    .sh-demo.is-installing .sh-skill.is-hit .sh-badge,
    .sh-demo.is-ready .sh-skill.is-hit .sh-badge {
      opacity: 1;
      transform: none;
    }

    .sh-action {
      position: absolute;
      left: 50%;
      top: 50%;
      z-index: 5;
      display: flex;
      flex-direction: column;
      align-items: center;
      gap: 0.55rem;
      width: min(16rem, calc(100% - 1.5rem));
      padding: 1.05rem 1.05rem 0.95rem;
      box-sizing: border-box;
      border-radius: 16px;
      border: 1px solid rgba(255, 255, 255, 0.12);
      background:
        radial-gradient(90% 70% at 50% -10%, color-mix(in srgb, var(--accent) 16%, transparent), transparent 60%),
        rgba(18, 18, 22, 0.72);
      backdrop-filter: blur(8px);
      -webkit-backdrop-filter: blur(8px);
      box-shadow:
        0 28px 60px -20px rgba(0, 0, 0, 0.85),
        0 0 0 1px rgba(0, 0, 0, 0.28),
        inset 0 1px 0 rgba(255, 255, 255, 0.1);
      opacity: 0;
      transform: translate(-50%, -46%) scale(0.92);
      margin: 0;
      pointer-events: none;
      visibility: hidden;
      text-align: center;
      transition:
        opacity 0.35s ease,
        transform 0.45s cubic-bezier(0.22, 1, 0.36, 1),
        visibility 0.35s ease,
        border-color 0.35s ease,
        background 0.35s ease;
    }

    .sh-demo.is-installing .sh-action,
    .sh-demo.is-ready .sh-action {
      opacity: 1;
      transform: translate(-50%, -50%) scale(1);
      visibility: visible;
    }

    .sh-demo.is-ready .sh-action {
      border-color: rgba(94, 242, 164, 0.32);
      background:
        radial-gradient(90% 70% at 50% -10%, rgba(94, 242, 164, 0.14), transparent 60%),
        rgba(18, 22, 20, 0.72);
    }

    .sh-demo.is-installing .sh-view::after,
    .sh-demo.is-ready .sh-view::after {
      content: "";
      position: absolute;
      inset: 0;
      z-index: 4;
      pointer-events: none;
      background: rgba(0, 0, 0, 0.38);
    }

    .sh-action-kicker {
      order: 0;
      font-family: var(--mono);
      font-size: 0.5rem;
      letter-spacing: 0.16em;
      text-transform: uppercase;
      color: rgba(255, 255, 255, 0.4);
      width: 100%;
    }

    .sh-demo.is-ready .sh-action-kicker {
      color: rgba(94, 242, 164, 0.8);
    }

    .sh-action-ico {
      order: 1;
      flex: none;
      width: 2.75rem;
      height: 2.75rem;
      border-radius: 50%;
      display: grid;
      place-items: center;
      border: 1.5px solid rgba(255, 255, 255, 0.14);
      color: rgba(255, 255, 255, 0.55);
      background: rgba(255, 255, 255, 0.04);
      margin: 0.15rem 0 0.05rem;
    }

    .sh-demo.is-installing .sh-action-ico {
      border-color: color-mix(in srgb, var(--accent) 60%, transparent);
      color: var(--accent);
      background: color-mix(in srgb, var(--accent) 12%, transparent);
      box-shadow: 0 0 0 5px color-mix(in srgb, var(--accent) 10%, transparent);
      animation: sh-pulse 1.15s ease-in-out infinite;
    }

    .sh-demo.is-ready .sh-action-ico {
      border-color: rgba(94, 242, 164, 0.6);
      color: rgba(94, 242, 164, 0.98);
      background: rgba(94, 242, 164, 0.12);
      box-shadow: 0 0 0 5px rgba(94, 242, 164, 0.08);
      animation: none;
    }

    .sh-action-ico svg {
      width: 1.15rem;
      height: 1.15rem;
      grid-area: 1 / 1;
      transition: opacity 0.25s ease;
    }

    .sh-ico-ok { opacity: 0; }
    .sh-demo.is-ready .sh-ico-busy { opacity: 0; }
    .sh-demo.is-ready .sh-ico-ok { opacity: 1; }

    @keyframes sh-pulse {
      50% { box-shadow: 0 0 0 8px color-mix(in srgb, var(--accent) 5%, transparent); }
    }

    .sh-action-copy {
      order: 2;
      display: flex;
      flex-direction: column;
      align-items: center;
      gap: 0.2rem;
      width: 100%;
      min-width: 0;
    }

    .sh-action-copy strong {
      display: block;
      font-size: 0.92rem;
      font-weight: 650;
      color: #fff;
      letter-spacing: 0.01em;
      line-height: 1.2;
    }

    .sh-action-meta {
      font-size: 0.55rem;
      color: rgba(255, 255, 255, 0.38);
      letter-spacing: 0.02em;
    }

    .sh-action-copy span {
      display: block;
      font-family: var(--mono);
      font-size: 0.55rem;
      letter-spacing: 0.02em;
      color: rgba(255, 255, 255, 0.42);
      max-width: 100%;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }

    .sh-action-copy span[data-ready] { display: none; }
    .sh-demo.is-ready .sh-action-copy span[data-busy] { display: none; }
    .sh-demo.is-ready .sh-action-copy span[data-ready] {
      display: block;
      color: rgba(94, 242, 164, 0.9);
      font-weight: 500;
    }

    .sh-action-bar {
      order: 3;
      width: 100%;
      height: 0.32rem;
      border-radius: 99px;
      background: rgba(255, 255, 255, 0.07);
      overflow: hidden;
      margin-top: 0.25rem;
    }

    .sh-action-bar i {
      display: block;
      height: 100%;
      width: 28%;
      border-radius: inherit;
      background: linear-gradient(90deg, transparent, var(--accent), color-mix(in srgb, var(--accent) 40%, #fff), var(--accent), transparent);
    }

    .sh-demo.is-installing .sh-action-bar i {
      animation: sh-bar 1.1s ease-in-out infinite;
    }

    .sh-demo.is-ready .sh-action-bar {
      background: rgba(94, 242, 164, 0.14);
    }

    .sh-demo.is-ready .sh-action-bar i {
      width: 100%;
      background: rgba(94, 242, 164, 0.8);
      animation: none;
    }

    @keyframes sh-bar {
      0% { transform: translateX(-100%); }
      100% { transform: translateX(360%); }
    }

    @media (prefers-reduced-motion: reduce) {
      .sh-caret,
      .sh-tool-bar i,
      .sh-action-ico,
      .sh-action-bar i { animation: none; }
    }

    /* ================= showcase: recent ================= */

    .recent {
      list-style: none;
      display: grid;
      gap: 0;
      position: relative;
    }

    .recent::before {
      content: "";
      position: absolute;
      left: 0.35rem;
      top: 0.4rem;
      bottom: 0.4rem;
      width: 1px;
      background: linear-gradient(180deg, transparent, rgba(255, 255, 255, 0.12) 12%, rgba(255, 255, 255, 0.12) 88%, transparent);
    }

    .recent li {
      position: relative;
      padding: 1.15rem 0 1.15rem 2rem;
      border-bottom: 1px solid rgba(255, 255, 255, 0.045);
    }

    .recent li:last-child { border-bottom: 0; }

    .recent li::before {
      content: "";
      position: absolute;
      left: 0.1rem;
      top: 1.45rem;
      width: 7px;
      height: 7px;
      border-radius: 50%;
      background: var(--screen);
      border: 1.5px solid rgba(103, 153, 254, 0.55);
      box-shadow: 0 0 0 3px rgba(103, 153, 254, 0.08);
      transition: background 0.25s ease, box-shadow 0.25s ease;
    }

    .recent li:hover::before {
      background: var(--accent);
      box-shadow: 0 0 12px rgba(103, 153, 254, 0.55);
    }

    .recent-row {
      display: grid;
      grid-template-columns: 6.5rem minmax(0, 1fr) auto;
      gap: 1.2rem;
      align-items: baseline;
      text-decoration: none;
      color: inherit;
    }

    .recent time {
      font-family: var(--mono);
      font-size: 0.7rem;
      letter-spacing: 0.08em;
      color: var(--faint);
      font-variant-numeric: tabular-nums;
    }

    .recent h3 {
      font-family: var(--sans);
      font-size: 1.02rem;
      font-weight: 500;
      color: var(--ink);
      letter-spacing: 0.01em;
      transition: color 0.2s ease;
    }

    .recent h3 a {
      color: inherit;
      text-decoration: none;
    }

    .recent li:hover h3,
    .recent h3 a:hover { color: #fff; }

    .recent p {
      margin-top: 0.35rem;
      font-size: 0.88rem;
      color: var(--dim);
      line-height: 1.7;
    }

    .recent .tag {
      display: inline-flex;
      align-items: center;
      gap: 0.32em;
      position: relative;
      isolation: isolate;
      overflow: hidden;
      font-family: var(--pixel);
      font-size: 0.56rem;
      letter-spacing: 0.05em;
      color: #fff;
      border: 1px solid rgba(255, 255, 255, 0.22);
      border-radius: 999px;
      padding: 0.26rem 0.52rem;
      background: rgba(255, 255, 255, 0.07);
      box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.18);
      cursor: pointer;
      transition: border-color 0.2s ease, background 0.2s ease, box-shadow 0.2s ease;
      white-space: nowrap;
    }

    /* Ambient starfield — looping video in the page background */
    .star-bg {
      position: fixed;
      inset: 0;
      z-index: 0;
      pointer-events: none;
      opacity: 0;
      transition: opacity 1.2s ease;
      overflow: hidden;
    }

    .star-bg.is-on { opacity: 1; }

    /* Static poster when loop decode fails after foreground resume (g3.2) */
    .star-bg.is-fallback {
      background-color: #050506;
      background-repeat: no-repeat;
    }

    .star-bg.is-fallback video.is-shown {
      opacity: 0.35;
    }

    .star-bg video {
      position: absolute;
      inset: -6%;
      width: 112%;
      height: 112%;
      object-fit: cover;
      object-position: center 42%;
      opacity: 0;
      /* The handoff keeps both clips alive, so the idle one must not paint.
         Opacity alone is not enough where video composites outside the page
         layer; visibility still lets it buffer and advance currentTime. */
      visibility: hidden;
      filter: none;
      transform: scale(1);
      transform-origin: 62% 36%;
    }

    .star-bg video#starIntro { z-index: 2; }
    .star-bg video#starLoop { z-index: 1; }

    .star-bg video.is-shown { opacity: 0.82; visibility: visible; }

    @media (max-width: 700px) {
      .star-bg video.is-shown { opacity: 0.55; }
    }

    @media (prefers-reduced-motion: reduce) {
      .star-bg.is-on { opacity: 0.7; }
      .star-bg video.is-shown { opacity: 0.35; }
    }

    /* ================= scroll reveal ================= */

    .reveal {
      opacity: 0;
      transform: translateY(14px);
      transition:
        opacity 0.38s cubic-bezier(0.22, 1, 0.36, 1),
        transform 0.38s cubic-bezier(0.22, 1, 0.36, 1);
      transition-delay: var(--d, 0ms);
    }

    .reveal.is-in {
      opacity: 1;
      transform: none;
    }

    @media (prefers-reduced-motion: reduce) {
      .reveal {
        opacity: 1;
        transform: none;
        transition: none;
      }
    }

    /* ================= narrow screens ================= */

    @media (max-width: 900px) {
      html { font-size: 100%; }
      .sig-fly svg { width: min(88vw, 780px); }
      .cols {
        grid-template-columns: minmax(0, 1fr);
        align-content: center;
        align-items: center;
        gap: 0.85rem;
        padding: 0.75rem var(--page-gutter) 1rem;
      }
      .col-right { display: none; }
      .hue-switch { left: 1rem; bottom: 1rem; }
      .wordmark-hit {
        width: min(100%, 13.5rem);
        max-width: 78vw;
      }
      .eyebrow {
        font-size: 0.62rem;
        margin-bottom: 0.55rem;
      }
      .lede {
        margin-top: 0.65rem;
        font-size: 0.92rem;
        line-height: 1.65;
      }
      .lede-lead { margin-bottom: 0; }
      html.is-inside .lede-lead { margin-bottom: 0.45rem; }
      .tags { margin-top: 0.85rem; gap: 0.35rem; }
      .tags li { font-size: 0.58rem; padding: 0.3rem 0.65rem; }
      .links { margin-top: 1.05rem; gap: 0.4rem; }
      .pill { font-size: 0.86rem; padding: 0.48rem 0.95rem; }
      .screen { --gutter: var(--page-gutter); }
      .screen-bar { padding-top: 1.1rem; padding-bottom: 0.8rem; }
      .screen-foot { display: none; }
      .bezel { inset: -10px -10px -28px; border-radius: 16px; }
      .led { right: 20px; bottom: 11px; width: 6px; height: 6px; }
      .stand { margin-top: 28px; width: 48px; }
      .stand::before { height: 14px; }
      .stand::after { width: 108px; margin-left: -30px; height: 8px; }
      .posts a { grid-template-columns: 1fr; gap: 0.35rem; }
      .posts .tag { display: none; }
      .band { padding: 5rem var(--page-gutter); }
      .case > a,
      .case > .case-shell,
      .case:nth-child(even) > a,
      .case:nth-child(even) > .case-shell {
        grid-template-columns: 1fr;
        grid-template-areas: "media" "copy";
        min-height: 0;
        gap: 1rem;
        padding: 1.15rem 1.15rem 1.25rem;
      }
      .case-media { min-height: 0; }
      .case-media .sh-demo {
        width: 100%;
        aspect-ratio: 5 / 4;
        height: auto;
        min-height: 0;
        max-height: 17rem;
      }
      .case-art,
      .harness-art {
        width: 100%;
        min-height: 14rem;
        max-height: none;
        aspect-ratio: auto;
        height: auto;
      }
      .case-copy { padding: 0.15rem 0.1rem 1.55rem; }
      .viz-pipe { flex-wrap: wrap; }
      .recent a { grid-template-columns: 1fr; gap: 0.35rem; }
      .recent .tag { display: none; }
      .viz-beat,
      .viz-beat.is-on,
      .viz-beat.is-leave,
      .viz-beat.is-on .viz-beat-copy em {
        filter: none;
      }
      .doc-orb,
      .doc-amb::after {
        filter: none;
      }
      .case > a,
      .case > .case-shell,
      .sh-action {
        backdrop-filter: none;
        -webkit-backdrop-filter: none;
      }
    }

    @media (prefers-reduced-motion: reduce) {
      .cue-rail::after,
      .screen-cue-rail::after,
      .screen-cue .icon,
      .glass.is-lit .wake-flare,
      .glass.is-lit .wake-scan,
      .glass.is-lit .wake-idle,
      .frame.is-lit .led,
      .bar-dot,
      .sheen,
      .wordmark-hit.is-shown .wordmark,
      .recent li::before { animation: none; }
      .wordmark-hit.is-shown .wordmark { opacity: 1; transform: none; }
      .cue-rail::after,
      .screen-cue-rail::after { top: auto; transform: none; }
      .pill::after,
      .tags li::after,
      .posts .tag::after,
      .recent .tag::after {
        transition: none;
        transform: none;
      }
      .pill:hover::after,
      .tags li:hover::after,
      .posts .tag:hover::after,
      .recent .tag:hover::after { opacity: 0.45; }
      .sig-fly.is-flying { transition: opacity 300ms ease; }
      .viz-video { opacity: 1; }
    }

/* ---- article page (theme) ---- */
body.is-article {
  min-height: 100vh;
}
.article-bar {
  position: sticky;
  top: 0;
  z-index: 20;
  display: flex;
  align-items: center;
  gap: 1rem;
  padding: 1rem var(--page-gutter);
  max-width: var(--page-max);
  margin: 0 auto;
  background: color-mix(in srgb, var(--bg) 86%, transparent);
  backdrop-filter: blur(12px);
}
.article-bar a {
  color: var(--soft);
  text-decoration: none;
  font-family: var(--mono);
  font-size: 0.78rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.article-bar a:hover { color: #fff; }
.article {
  max-width: 42rem;
  margin: 0 auto;
  padding: 3.5rem var(--page-gutter) 6rem;
}
.article-meta {
  font-family: var(--mono);
  font-size: 0.78rem;
  letter-spacing: 0.12em;
  color: var(--dim);
  text-transform: uppercase;
}
.article h1 {
  margin: 0.7rem 0 2rem;
  font-size: clamp(1.8rem, 4vw, 2.6rem);
  font-weight: 600;
  letter-spacing: -0.03em;
  line-height: 1.2;
}
.article-body {
  color: var(--soft);
  font-size: 1.02rem;
  line-height: 1.85;
}
.article-body > *:first-child { margin-top: 0; }
.article-body h2,
.article-body h3 {
  color: #fff;
  margin: 2.2rem 0 0.8rem;
  letter-spacing: -0.02em;
}
.article-body p { margin: 1em 0; }
.article-body a { color: var(--accent); }
.article-body ul,
.article-body ol { padding-left: 1.3rem; margin: 1em 0; }
.article-body li { margin: 0.35em 0; }
.article-body pre,
.article-body code {
  font-family: var(--mono);
  font-size: 0.9em;
}
.article-body pre {
  overflow: auto;
  padding: 1rem 1.1rem;
  background: var(--s2);
  border: 1px solid var(--line);
  border-radius: 8px;
}
.article-body img {
  max-width: 100%;
  height: auto;
}
.article-body blockquote {
  margin: 1.2em 0;
  padding: 0.2em 0 0.2em 1em;
  border-left: 2px solid var(--line-strong);
  color: var(--dim);
}
