/* A full-screen cover opens into the existing research page. */
@font-face{font-family:'Source Serif 4';src:url('assets/fonts/source-serif-4-bold.woff2') format('woff2');font-style:normal;font-weight:700;font-display:swap}
.research-hero{position:relative;isolation:isolate;display:grid;place-items:center;height:100vh;height:100svh;overflow:hidden;background:#090f18;color:#fff}
.hero-photograph,.hero-shade{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.hero-photograph{object-fit:cover;object-position:50% 75%;transform:translateY(var(--hero-shift,0px)) scale(var(--hero-scale,1));will-change:transform}
.hero-shade{background:linear-gradient(180deg,rgba(5,10,18,.22),rgba(5,10,18,.48) 48%,rgba(5,10,18,.64));z-index:1}
.hero-heading{position:relative;z-index:2;width:min(1200px,calc(100% - 96px));text-align:center;opacity:var(--hero-opacity,1);transform:translateY(var(--hero-title-shift,0px));will-change:transform,opacity}
.research-hero h1{margin:0;font:700 clamp(42px,5.5vw,80px)/1.08 'Source Serif 4',Georgia,serif;letter-spacing:-.025em;text-shadow:0 2px 28px rgba(0,0,0,.35);text-wrap:balance}
.research-hero h1 span{display:block}
.hero-title-statement{max-width:24ch;margin:.3em auto 0;font-size:.76em;line-height:1.14;letter-spacing:-.015em}
.hero-partners{position:absolute;z-index:2;left:50%;bottom:calc(clamp(28px,5vh,48px) + env(safe-area-inset-bottom,0px));transform:translateX(-50%);width:min(800px,calc(100% - 80px));margin:0;padding:0;opacity:var(--hero-opacity,1);will-change:opacity}
.hero-partner-logos{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.4fr) minmax(0,1fr);gap:clamp(24px,4vw,56px);align-items:center}
.hero-partner-mark{display:flex;align-items:center;justify-content:center;width:100%;height:64px;min-width:0;transform:scale(.7);transform-origin:center}
.hero-partner-mark img,.hero-partner-mark svg{display:block;width:200px;max-width:100%;height:auto;max-height:64px;object-fit:contain;object-position:center}
/* AgiBot's main strokes sit below the image center; align its visual weight. */
.hero-partner-mark--agibot img{width:250px;max-width:90%;transform:translateY(-7px)}
.hero-partner-names{margin:20px 0 0;text-align:center;font:400 13px/1.5 var(--sans);letter-spacing:.025em;color:rgba(255,255,255,.88);white-space:nowrap;text-shadow:0 2px 16px rgba(0,0,0,.5)}
#project-content{scroll-margin-top:0;padding-top:42px;padding-bottom:18px}
html.hero-transition{scroll-behavior:auto}
.title-video-shell{min-height:0;overflow:hidden}
.title-video-frame{border-radius:12px}
.plot-guide{stroke:var(--accent);stroke-width:1;stroke-dasharray:3 5;opacity:0;pointer-events:none}
.plot-guide.is-visible{opacity:.45}
.scaling-mark.is-linked .point-halo{opacity:.16}
.point-dot{transition:r .18s}
.scaling-mark.is-selected .point-dot,.scaling-mark.is-linked .point-dot,.scaling-mark:focus-visible .point-dot{r:6}
.chart-motion-pending .result-bar{transform-box:view-box;transform-origin:0 225px;transform:scaleY(0)}
.chart-motion-pending .comparison-mark .error-bar,.chart-motion-pending .bar-value{opacity:0}
.chart-motion-pending .plot-series{clip-path:inset(0 100% 0 0)}
.chart-motion-in .result-bar{transform-box:view-box;transform-origin:0 225px;animation:bar-enter .85s cubic-bezier(.22,1,.36,1) both;animation-delay:calc(var(--mark-index,0)*55ms)}
.chart-motion-in .comparison-mark .error-bar,.chart-motion-in .bar-value{animation:mark-enter .3s ease both;animation-delay:calc(.55s + var(--mark-index,0)*55ms)}
.chart-motion-in .plot-series{animation:series-enter 1.2s cubic-bezier(.25,.65,.3,1) both}
@keyframes bar-enter{from{transform:scaleY(0)}to{transform:scaleY(1)}}
@keyframes mark-enter{from{opacity:0}to{opacity:1}}
@keyframes series-enter{from{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0 0 0)}}
[data-content-reveal=pending]{opacity:0;transform:translateY(18px)}
.content-reveal-in{animation:content-enter 1.25s ease-in-out both;animation-delay:var(--content-reveal-delay,0ms)}
@keyframes content-enter{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}
@media print{.research-hero{height:auto;min-height:0;background:white;color:var(--ink);padding:40px 0}.hero-photograph,.hero-shade{display:none}.hero-heading{opacity:1;transform:none}.research-hero h1{text-shadow:none;font-size:36px}.hero-partners{position:relative;left:auto;bottom:auto;transform:none;opacity:1;margin:36px auto 0}.hero-partner-mark{filter:invert(1)}.hero-partner-names{color:var(--ink);text-shadow:none}.content-reveal-in,[data-content-reveal=pending]{animation:none;opacity:1;transform:none}}
@media(max-width:600px){.hero-photograph{object-position:50% 72%}.hero-heading{width:calc(100% - 40px)}.research-hero h1{font-size:clamp(32px,8.8vw,48px);line-height:1.1;letter-spacing:-.02em}.hero-title-statement{margin-top:.55em;font-size:.78em;line-height:1.2}.hero-partners{width:calc(100% - 32px);bottom:calc(28px + env(safe-area-inset-bottom,0px))}.hero-partner-logos{gap:12px}.hero-partner-mark{height:44px}.hero-partner-mark img,.hero-partner-mark svg{max-height:44px}.hero-partner-names{margin-top:16px;font-size:clamp(10px,3vw,12px);letter-spacing:.015em}#project-content{padding-top:28px;padding-bottom:14px}.title-video-frame{border-radius:8px}}
@media(max-width:600px){.hero-partner-mark--agibot img{transform:translateY(-3px)}}
@media(max-height:500px) and (orientation:landscape){.hero-heading{width:calc(100% - 64px)}.research-hero h1{font-size:clamp(30px,7vh,42px)}.hero-partners{width:min(560px,calc(100% - 64px));bottom:16px}.hero-partner-mark{height:34px}.hero-partner-mark img,.hero-partner-mark svg{width:150px;max-height:34px}.hero-partner-names{margin-top:12px;font-size:11px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.hero-photograph,.hero-heading{transform:none;will-change:auto}.hero-heading,.hero-partners{opacity:1;will-change:auto}.chart-motion-pending .result-bar{transform:none}.chart-motion-pending .comparison-mark .error-bar,.chart-motion-pending .bar-value{opacity:1}.chart-motion-pending .plot-series{clip-path:none}.content-reveal-in,[data-content-reveal=pending]{animation:none;opacity:1;transform:none}}
/* Retrieval ablation: a deliberate reveal, with values readable throughout. */
@media(prefers-reduced-motion:no-preference){
  html.has-ablation-motion .ablation-chart:not([data-ablation-motion]) .ablation-row i,
  .ablation-chart[data-ablation-motion=pending] .ablation-row i{transform:scaleX(0);transform-origin:left}
  .ablation-chart[data-ablation-motion=played] .ablation-row i{transform-origin:left;animation:ablation-grow 1.8s cubic-bezier(.16,.7,.2,1) both}
  .ablation-chart[data-ablation-motion=played] .ablation-row:nth-child(2) i{animation-delay:.2s}
}
@keyframes ablation-grow{from{transform:scaleX(0)}to{transform:scaleX(1)}}
