/* WorldRover project page — renderer theme (after renderer-style.css).
   Dark violet, Inter Tight + Space Grotesk, fixed masked grid and glows. */

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

:root{
  --accent:#b7a5ff;
  --accent-2:#7ad6ff;
  --accent-glow:rgba(183,165,255,.25);
  --bg:#05020b;
  --bg-2:#0a0616;
  --card:rgba(255,255,255,.04);
  --card-hover:rgba(255,255,255,.07);
  --text:#f0f0f5;
  --text-2:rgba(255,255,255,.74);
  --dim:rgba(255,255,255,.48);
  --border:rgba(255,255,255,.09);
  --border-accent:rgba(183,165,255,.32);
  --radius:14px;
  --maxw:1180px;
  --font:"Inter Tight",ui-sans-serif,system-ui,-apple-system,"Segoe UI","Noto Sans SC",sans-serif;
  --mono:"Space Grotesk",ui-sans-serif,system-ui,sans-serif;
}

html{scroll-behavior:smooth;scroll-padding-top:28px}
body{font-family:var(--font);color:var(--text);background:var(--bg);line-height:1.7;font-size:16px;
  -webkit-font-smoothing:antialiased;overflow-x:hidden}
img,video{max-width:100%;display:block}
a{color:var(--accent);text-decoration:none}

/* fixed masked grid + glows */
.grid-bg{position:fixed;inset:0;pointer-events:none;z-index:0;
  background-image:linear-gradient(rgba(255,255,255,.035) 1px,transparent 1px),
    linear-gradient(90deg,rgba(255,255,255,.035) 1px,transparent 1px);
  background-size:62px 62px;
  -webkit-mask-image:radial-gradient(ellipse at 50% 40%,#000 12%,transparent 72%);
  mask-image:radial-gradient(ellipse at 50% 40%,#000 12%,transparent 72%)}
.glow{position:fixed;z-index:0;pointer-events:none;border-radius:50%;filter:blur(90px);opacity:.5}
.glow.a{width:560px;height:560px;top:-160px;left:-120px;background:radial-gradient(circle,rgba(183,165,255,.35),transparent 70%)}
.glow.b{width:620px;height:620px;top:340px;right:-200px;background:radial-gradient(circle,rgba(122,214,255,.22),transparent 70%)}

/* scroll progress */
.scroll-progress{position:fixed;top:0;left:0;height:2px;width:0;z-index:9999;
  background:linear-gradient(90deg,var(--accent),#d4a5ff)}

.sky{position:fixed;inset:0;z-index:0;pointer-events:none}

.wrap{width:min(92vw,var(--maxw));margin:0 auto;position:relative;z-index:1}

/* ================= side rail ================= */

.side-nav{position:fixed;right:22px;top:50%;transform:translateY(-50%);z-index:900;
  display:flex;flex-direction:column;gap:15px;align-items:flex-end}
.side-nav a{display:flex;align-items:center;gap:10px;color:var(--dim);
  font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;
  transition:color .2s}
.side-nav .lbl{opacity:.55;transition:opacity .2s}
.side-nav .bar{width:16px;height:2px;background:currentColor;transition:width .2s}
.side-nav a:hover{color:var(--text)}
.side-nav a:hover .lbl{opacity:1}
.side-nav a.on{color:var(--accent)}
.side-nav a.on .lbl{opacity:1}
.side-nav a.on .bar{width:30px}

/* wordmark: back to the top. Mixed case and no tracking so it still fits the
   page margin, where the uppercase section labels would not. */
.side-nav .home{margin-bottom:8px;padding-bottom:13px;border-bottom:1px solid var(--border);color:var(--text)}
.side-nav .home .lbl{opacity:1;font-size:12px;font-weight:700;letter-spacing:.02em;text-transform:none}
.side-nav .home:hover{color:var(--accent)}


/* ================= hero ================= */

.article-hero{padding:56px 0 40px;position:relative;z-index:1}
.hero-grid{display:grid;grid-template-columns:1.28fr 1fr;gap:48px;align-items:stretch}
.hero-text{display:flex;flex-direction:column;gap:24px}
.hero-tag{display:inline-block;font-family:var(--mono);font-size:11px;letter-spacing:.22em;
  text-transform:uppercase;color:var(--accent);border:1px solid var(--border-accent);
  border-radius:999px;padding:6px 14px;margin-bottom:22px}
.hero-title{font-size:clamp(40px,6vw,74px);line-height:1.02;letter-spacing:-.03em;font-weight:700}
.grad-accent{background:linear-gradient(120deg,#fff 0%,#e7dcff 40%,var(--accent) 75%,var(--accent-2) 100%);
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.hero-sub{margin-top:2px;color:var(--text-2);font-size:17.5px;max-width:none}
.hero-authors{margin-top:2px;color:var(--text-2);font-size:15px;line-height:1.9}
.hero-authors sup{color:var(--accent);font-size:11.5px}
.hero-affil{margin-top:-16px;color:var(--dim);font-size:13.5px}

/* release links */
.release-links{margin-top:auto;border:1px solid var(--border);border-radius:var(--radius);
  background:var(--card);padding:16px}
.release-links__title{font-family:var(--mono);font-size:12px;letter-spacing:.18em;text-transform:uppercase;
  color:var(--dim);margin-bottom:12px}
.release-links__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}
.release-link{display:flex;align-items:center;justify-content:center;gap:8px;
  border:1px solid var(--border);border-radius:10px;padding:11px 8px;color:var(--text);
  font-size:14px;background:rgba(255,255,255,.02);transition:.2s}
.release-link i{color:var(--accent)}
.release-link:hover{border-color:var(--border-accent);background:rgba(183,165,255,.08);transform:translateY(-2px)}
.release-link--dim{opacity:.45;pointer-events:none}

/* tldr card */
.tldr-card{margin-top:-4px;border:1px solid var(--border-accent);border-radius:var(--radius);
  background:linear-gradient(180deg,rgba(183,165,255,.08),rgba(183,165,255,.02));padding:18px 20px}
.tldr-title{font-family:var(--mono);font-size:13px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--accent);margin-bottom:10px}
.tldr-list{list-style:none;display:flex;flex-direction:column;gap:11px}
.tldr-list li{position:relative;padding-left:22px;color:var(--text-2);font-size:15.5px}
.tldr-list li::before{content:"";position:absolute;left:4px;top:11px;width:7px;height:7px;border-radius:50%;
  background:var(--accent);box-shadow:0 0 10px var(--accent-glow)}
.tldr-list strong{color:var(--text)}

/* hero media */
.hero-media{display:flex;flex-direction:column;gap:14px}
.media-frame{position:relative;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;
  background:#000;box-shadow:0 30px 90px rgba(0,0,0,.5)}
.media-frame img{width:100%}
.media-chip{position:absolute;left:12px;top:12px;font-family:var(--mono);font-size:10px;letter-spacing:.12em;
  text-transform:uppercase;color:#fff;background:rgba(10,6,22,.7);border:1px solid var(--border);
  border-radius:999px;padding:5px 10px;z-index:2}
.media-cap{margin-top:0;color:var(--dim);font-size:12px;text-align:center;font-family:var(--mono);letter-spacing:.04em}

/* ================= section shell ================= */

section.block{padding:70px 0;position:relative;z-index:1}
section.block:last-of-type{padding-bottom:110px}
.eyebrow{font-family:var(--mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--accent)}
h2.title{font-size:clamp(28px,3.6vw,44px);line-height:1.1;letter-spacing:-.02em;font-weight:700;margin-top:12px}
.title-sub{color:var(--text-2);margin-top:14px;max-width:70ch}

/* ================= stats ================= */

.stats-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:14px;margin-top:34px}
.stat-card{border:1px solid var(--border);border-radius:var(--radius);background:var(--card);padding:22px 16px;
  transition:.25s}
.stat-card:hover{background:var(--card-hover);border-color:var(--border-accent);transform:translateY(-3px)}
.stat-card--hi{border-color:var(--border-accent);
  background:linear-gradient(180deg,rgba(183,165,255,.10),rgba(183,165,255,.02))}
.stat-value{font-family:var(--mono);font-size:clamp(24px,2.7vw,34px);font-weight:700;letter-spacing:-.02em;
  background:linear-gradient(120deg,#fff,var(--accent));-webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent}
.stat-label{color:var(--dim);font-size:12px;letter-spacing:.08em;text-transform:uppercase;margin-top:8px}

/* hero stats — five cards inside the narrower left column */
.hero-stats{margin-top:auto;gap:8px}
.hero-stats .stat-card{padding:14px 6px;text-align:center}
.hero-stats .stat-value{font-size:clamp(16px,1.5vw,21px)}
.hero-stats .stat-label{font-size:10.5px;letter-spacing:.06em;margin-top:5px}


/* ================= media tiles ================= */

/* one treatment for every clip: rounded stage, chip label, 16:9 */
.stage{position:relative;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;
  background:#000;transition:.25s}
.stage:hover{border-color:var(--border-accent)}
.stage video{width:100%;aspect-ratio:16/9;object-fit:cover}
.badge{position:absolute;left:14px;top:14px;font-family:var(--mono);font-size:11px;letter-spacing:.12em;
  text-transform:uppercase;color:#fff;background:rgba(10,6,22,.72);border:1px solid var(--border);
  border-radius:999px;padding:6px 12px;z-index:2;pointer-events:none}

.vgrid{display:flex;flex-wrap:wrap;justify-content:center;gap:16px;margin-top:30px}
.vgrid > figure{flex:0 1 calc((100% - 2 * 16px) / 3);min-width:0}
/* Multi-View runs a little narrower than the full column */
.shrink{max-width:80%;margin-inline:auto}
/* two tiles filling their row (Multi-View) */
.vgrid.half > figure{flex-basis:calc((100% - 16px) / 2)}
/* equirectangular panorama keeps its true 2:1 frame */
.stage.pano video{aspect-ratio:2 / 1}
/* two per row, but each tile the same width as a three-column row:
   cap the container at exactly two tiles plus one gap */
.vgrid.two{max-width:calc((100% - 32px) * 2 / 3 + 16px);margin-left:auto;margin-right:auto}
.vgrid.two > figure{flex-basis:calc((100% - 16px) / 2)}

/* generic framed figure (paper figures keep their own captions inside the art) */
.figure{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:var(--card);
  margin-top:24px}
.figure img{width:100%}
.figcap{color:var(--text-2);font-size:13.5px;padding:14px 18px;border-top:1px solid var(--border)}
.figcap b{color:var(--text)}

.duo{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:30px;align-items:start}
.duo .figure{margin-top:0}


/* buffering meter, shown only while a clip is still arriving */
.vid-load{position:absolute;left:0;right:0;bottom:0;z-index:3;pointer-events:none;
  display:flex;align-items:center;gap:8px;padding:0 10px 8px;
  transition:opacity .35s}
.vid-load.is-done{opacity:0}
.vid-load__bar{flex:1;height:2px;background:var(--accent);transform:scaleX(0);
  transform-origin:left center;transition:transform .25s ease-out;
  box-shadow:0 0 8px var(--accent-glow)}
.vid-load__pct{font-family:var(--mono);font-size:10px;letter-spacing:.1em;
  color:var(--accent);min-width:7.5em;text-align:right;white-space:nowrap}
.vid-load::before{content:"";position:absolute;left:0;right:0;bottom:0;height:34px;
  background:linear-gradient(to top,rgba(0,0,0,.55),transparent);z-index:-1}

/* pending clip */
.vid-missing{display:grid;place-items:center;aspect-ratio:16/9;
  background:repeating-linear-gradient(135deg,rgba(255,255,255,.03) 0 12px,rgba(255,255,255,.055) 12px 24px)}
.vid-note{text-align:center}
.vid-note b{display:block;font-family:var(--mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--accent)}
.vid-note span{display:block;margin-top:8px;font-family:var(--mono);font-size:11px;color:var(--dim)}

/* ================= bibtex + footer ================= */

pre{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);padding:20px 22px;
  overflow-x:auto;color:#d8d2ee;font-family:var(--mono);font-size:13px;line-height:1.6;margin-top:20px}
footer{border-top:1px solid var(--border);padding:34px 0;margin-top:40px;position:relative;z-index:1}
footer .wrap{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;color:var(--dim);font-size:13px}

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

.reveal{opacity:0;transform:translateY(22px);transition:.7s}
.reveal.vis{opacity:1;transform:none}

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

/* ================= responsive ================= */

@media(max-width:1320px){.side-nav{display:none}}

@media(max-width:900px){
  .hero-grid{grid-template-columns:1fr}
  .hero-media{position:static}
  .hero-text{display:block}
  .release-links{margin-top:26px}
  .hero-stats{margin-top:16px}
  .stats-grid{grid-template-columns:repeat(2,1fr)}
  .release-links__grid{grid-template-columns:repeat(3,1fr)}
  .side-nav{display:none}
  .vgrid > figure{flex-basis:calc((100% - 16px) / 2)}
  .vgrid.two{max-width:none}
  .shrink{max-width:none}
  .duo{grid-template-columns:1fr}
}

@media(max-width:600px){
  .vgrid > figure,
  .vgrid.two > figure,
  .vgrid.half > figure{flex-basis:100%}
  section.block{padding:52px 0}
}
