/* =====================================================================
   Shared styling for project / case-study pages.
   LAYER 1 of the system: IDENTITY (tokens, nav, type, buttons, footer).
   The HERO is a swappable media slot (.hero-media holds an <img>, <video>,
   <iframe>, <canvas>, or an abstract placeholder). CONTENT MODULES below
   (.block, .dives, .gallery, .videowrap, .figure) are opt-in per page, so
   every page shares one identity but composes whatever content it has.
   ===================================================================== */
:root{
  --bg:#000; --fg:#fff;
  --muted:rgba(255,255,255,.55);
  --faint:rgba(255,255,255,.32);
  --line:rgba(255,255,255,.12);
  --card:rgba(255,255,255,.035);
  --card-hi:rgba(255,255,255,.06);
  --accent:#ff6a00;
  --accent2:#19d3ff;
  --maxw:1040px;
  --ease:cubic-bezier(.22,.61,.36,1);
}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth; scroll-padding-top:84px; -webkit-text-size-adjust:100%}
body{
  background:var(--bg); color:var(--fg);
  font-family:"Helvetica Neue","Inter",-apple-system,BlinkMacSystemFont,Arial,sans-serif;
  line-height:1.6; -webkit-font-smoothing:antialiased; overflow-x:hidden;
}
a{color:inherit; text-decoration:none}
::selection{background:var(--accent); color:#000}
img{display:block; max-width:100%}
.wrap{max-width:var(--maxw); margin:0 auto; padding:0 28px}
.accent{color:var(--accent)}

/* ---------- nav (shared identity) ---------- */
nav{
  position:fixed; top:0; left:0; right:0; z-index:50;
  display:flex; align-items:center; justify-content:space-between;
  padding:18px 28px; transition:background .35s var(--ease), border-color .35s;
  border-bottom:1px solid transparent;
}
nav.scrolled{ background:rgba(0,0,0,.6); backdrop-filter:blur(14px); border-bottom:1px solid var(--line) }
.brand{display:flex; align-items:center; gap:11px; font-weight:800; letter-spacing:.02em; font-size:15px}
.brand img{width:26px; height:26px; object-fit:contain}
.navlinks{display:flex; align-items:center; gap:30px; font-size:13px; letter-spacing:.04em}
.navlinks a{color:var(--muted); transition:color .2s}
.navlinks a:hover{color:var(--fg)}
.btn{
  display:inline-flex; align-items:center; gap:8px; font-size:13px; font-weight:700; letter-spacing:.03em;
  padding:10px 18px; border-radius:999px; border:1px solid var(--line); transition:.22s var(--ease); cursor:pointer;
}
.btn:hover{border-color:var(--fg); transform:translateY(-1px)}
.btn-solid{background:var(--fg); color:#000; border-color:var(--fg)}
.btn-solid:hover{background:var(--accent); border-color:var(--accent); color:#000}

/* ---------- hero (text column + swappable media slot) ---------- */
.phero{position:relative; padding:140px 0 40px; overflow:hidden}
.phero::after{
  content:""; position:absolute; inset:0; z-index:-1; opacity:.55;
  background:
    radial-gradient(680px circle at 82% 6%, rgba(255,106,0,.16), transparent 60%),
    linear-gradient(to right, rgba(255,255,255,.04) 1px, transparent 1px) 0 0/64px 64px,
    linear-gradient(to bottom, rgba(255,255,255,.04) 1px, transparent 1px) 0 0/64px 64px;
  -webkit-mask-image:radial-gradient(circle at 70% 18%, #000, transparent 82%);
          mask-image:radial-gradient(circle at 70% 18%, #000, transparent 82%);
}
.phero .grid{display:grid; grid-template-columns:1fr 0.85fr; gap:48px; align-items:center}
.phero.solo .grid{grid-template-columns:1fr}          /* text-only hero */
.back{display:inline-flex; gap:8px; font-size:13px; letter-spacing:.04em; color:var(--muted); margin-bottom:24px; transition:.2s}
.back:hover{color:var(--fg); gap:12px}
.eyebrow{font-size:12px; letter-spacing:.26em; text-transform:uppercase; color:var(--faint); display:inline-flex; align-items:center; gap:10px; flex-wrap:wrap}
.eyebrow .win{color:var(--accent); font-weight:700; letter-spacing:.05em}
.phero h1{font-weight:800; letter-spacing:-.03em; line-height:.95; text-transform:uppercase; font-size:clamp(38px,7vw,78px); margin:16px 0 0}
.phero .lede{margin-top:20px; max-width:60ch; font-size:clamp(16px,1.9vw,19px); color:rgba(255,255,255,.82); line-height:1.55}
.tags{display:flex; flex-wrap:wrap; gap:8px; margin-top:24px}
.tag{font-size:12px; letter-spacing:.02em; color:var(--muted); border:1px solid var(--line); border-radius:6px; padding:5px 10px}
.actions{display:flex; flex-wrap:wrap; gap:12px; margin-top:28px}
.statusline{margin-top:26px; display:inline-flex; align-items:center; gap:10px; font-size:13px; color:var(--muted); border:1px solid var(--line); border-radius:999px; padding:8px 16px}
.statusline .dot{width:8px; height:8px; border-radius:50%; background:var(--accent)}

/* ---------- HERO MEDIA SLOT — variant-agnostic frame ---------- */
/* Holds whatever the page has: <img>, <video>, <iframe> (3D/youtube), <canvas>,
   or an .abstract fallback. The frame styling is identical across media types. */
.hero-media{
  position:relative; border:1px solid var(--line); border-radius:16px; overflow:hidden;
  aspect-ratio:4/3; background:#0a0a0a;
}
.hero-media > img,
.hero-media > video,
.hero-media > iframe,
.hero-media > canvas{position:absolute; inset:0; width:100%; height:100%; object-fit:cover; border:0; display:block}
.hero-media .abstract{
  position:absolute; inset:0;
  background:
    radial-gradient(120% 120% at 72% 18%, rgba(255,106,0,.30), transparent 55%),
    radial-gradient(90% 90% at 20% 90%, rgba(25,211,255,.14), transparent 60%),
    repeating-linear-gradient(45deg, rgba(255,255,255,.045) 0 2px, transparent 2px 13px), #0b0b0b;
  display:flex; align-items:center; justify-content:center;
}
.hero-media .abstract .mark{font-size:12px; letter-spacing:.3em; text-transform:uppercase; color:var(--faint); border:1px solid var(--line); padding:9px 16px; border-radius:999px}
.hero-media .cap{position:absolute; left:14px; bottom:12px; font-size:11px; letter-spacing:.18em; text-transform:uppercase; color:var(--faint)}

/* ---------- facts strip ---------- */
.facts{display:grid; grid-template-columns:repeat(4,1fr); gap:1px; background:var(--line); border:1px solid var(--line); border-radius:12px; overflow:hidden; margin:56px 0}
.facts div{background:#000; padding:18px 20px}
.facts dt{font-size:11px; letter-spacing:.18em; text-transform:uppercase; color:var(--faint); margin-bottom:6px}
.facts dd{font-size:14px; color:#fff; font-weight:500; line-height:1.45}

/* ---------- CONTENT MODULES (opt-in per page) ---------- */
.block{margin:46px 0}
.block h2{font-size:clamp(22px,3.2vw,32px); font-weight:800; letter-spacing:-.02em; text-transform:uppercase; margin-bottom:18px}
.block h2::before{content:""; display:inline-block; width:22px; height:2px; background:var(--accent); vertical-align:middle; margin-right:14px}
.block p{color:rgba(255,255,255,.78); font-size:clamp(15px,1.7vw,17px); max-width:74ch; margin-bottom:14px}
.block ul{list-style:none; max-width:74ch}
.block ul li{color:rgba(255,255,255,.78); font-size:16px; padding:8px 0 8px 22px; position:relative}
.block ul li::before{content:"›"; position:absolute; left:0; color:var(--accent); font-weight:800}
code{font-family:"SF Mono",ui-monospace,Menlo,Consolas,monospace; font-size:.88em; background:rgba(255,255,255,.07); border:1px solid var(--line); border-radius:5px; padding:1px 6px; color:#fff; white-space:nowrap}
.dive code{font-size:.84em; padding:1px 5px}

.dives{display:grid; grid-template-columns:repeat(2,1fr); gap:16px; margin-top:8px}
.dive{border:1px solid var(--line); border-radius:14px; background:var(--card); padding:22px; transition:.25s var(--ease)}
.dive:hover{border-color:rgba(255,106,0,.5); background:var(--card-hi); transform:translateY(-3px)}
.dive h3{font-size:16px; font-weight:700; margin-bottom:10px}
.dive p{font-size:14.5px; color:var(--muted); margin:0; line-height:1.55}

/* media gallery (images) */
.gallery{display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:14px}
.gallery figure{border:1px solid var(--line); border-radius:12px; overflow:hidden; background:#0a0a0a; aspect-ratio:4/3; position:relative}
.gallery figure img{position:absolute; inset:0; width:100%; height:100%; object-fit:cover}

/* responsive video / embed (youtube, vimeo, iframe demos) */
.videowrap{position:relative; border:1px solid var(--line); border-radius:14px; overflow:hidden; aspect-ratio:16/9; background:#0a0a0a}
.videowrap iframe, .videowrap video{position:absolute; inset:0; width:100%; height:100%; border:0}

/* generic figure (diagram, single image, screenshot) */
.figure{border:1px solid var(--line); border-radius:14px; overflow:hidden; background:#0a0a0a}
.figure img{width:100%; display:block}
.figure figcaption{padding:12px 16px; font-size:13px; color:var(--muted); border-top:1px solid var(--line)}

.soon{
  margin:52px 0; border:1px dashed var(--line); border-radius:14px; padding:24px 26px;
  color:var(--muted); font-size:15px; background:linear-gradient(110deg, rgba(255,106,0,.05), transparent 60%);
}
.soon a{color:var(--accent); border-bottom:1px solid transparent; transition:.2s}
.soon a:hover{border-color:var(--accent)}

footer{border-top:1px solid var(--line); padding:30px 0; color:var(--faint); font-size:13px; display:flex; justify-content:space-between; flex-wrap:wrap; gap:12px}

/* ---------- reveal ---------- */
.reveal{opacity:0; transform:translateY(24px); transition:opacity .7s var(--ease), transform .7s var(--ease)}
.reveal.in{opacity:1; transform:none}

@media (max-width:820px){
  .navlinks a:not(.btn){display:none}
  .phero .grid{grid-template-columns:1fr; gap:34px}
  .hero-media{order:-1}
  .facts{grid-template-columns:1fr 1fr}
  .dives{grid-template-columns:1fr}
}
@media (prefers-reduced-motion:reduce){
  *{animation:none !important}
  .reveal{opacity:1; transform:none; transition:none}
  html{scroll-behavior:auto}
}
