/* =========================================================================
   Eli Pacciolla — Portfolio
   Design system: dark "engineering instrument"
   Type: Saira (display) · Inter (body) · Source Code Pro (mono labels)
   ========================================================================= */

/* ---------- Tokens ---------- */
:root{
  --bg:        #0a0b0d;
  --bg-1:      #0e1013;
  --panel:     #14171c;
  --panel-2:   #191d23;
  --line:      rgba(255,255,255,.09);
  --line-2:    rgba(255,255,255,.14);

  --ink:       #f3f4f6;
  --ink-2:     #b7bcc4;
  --ink-3:     #7f858e;
  --ink-4:     #565b63;

  --accent:    #f2913a;   /* Artemis amber */
  --accent-hi: #ffa955;
  --accent-dim:rgba(242,145,58,.14);

  --led-red:   #ff5148;
  --led-grn:   #46d873;
  --led-blu:   #4a9dff;

  --maxw: 1180px;
  --pad: clamp(20px, 5vw, 64px);
  --radius: 14px;
  --radius-sm: 9px;

  --f-disp: "Saira", "Helvetica Neue", Arial, sans-serif;
  --f-body: "Inter", "Helvetica Neue", Arial, sans-serif;
  --f-mono: "Source Code Pro", ui-monospace, "SF Mono", Menlo, monospace;

  --ease: cubic-bezier(.22,.61,.36,1);
}

/* per-project accent overrides (set on <body class="proj-xxx">) */
body.proj-artemis { --accent:#f2913a; --accent-hi:#ffa955; --accent-dim:rgba(242,145,58,.14); }
body.proj-filtra  { --accent:#ef6a3d; --accent-hi:#ff8a5f; --accent-dim:rgba(239,106,61,.14); }
body.proj-catena  { --accent:#e0433f; --accent-hi:#ff6b67; --accent-dim:rgba(224,67,63,.14); }
body.proj-specimen{ --accent:#38d66b; --accent-hi:#5cf08c; --accent-dim:rgba(56,214,107,.14); }

/* ---------- Reset-ish ---------- */
*{ box-sizing:border-box; }
html{ scroll-behavior:smooth; -webkit-text-size-adjust:100%; }
@media (prefers-reduced-motion: reduce){ html{ scroll-behavior:auto; } }
body{
  margin:0;
  background:var(--bg);
  color:var(--ink);
  font-family:var(--f-body);
  font-size:17px;
  line-height:1.65;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
  overflow-x:hidden;
}
img{ max-width:100%; display:block; }
a{ color:inherit; text-decoration:none; }
button{ font-family:inherit; }
::selection{ background:var(--accent); color:#0a0b0d; }

/* subtle page grain + dot grid */
body::before{
  content:""; position:fixed; inset:0; z-index:0; pointer-events:none;
  background-image:radial-gradient(rgba(255,255,255,.028) 1px, transparent 1px);
  background-size:44px 44px;
  mask-image:radial-gradient(ellipse at 50% 0%, #000 0%, transparent 75%);
  opacity:.6;
}

/* ---------- Layout helpers ---------- */
.wrap{ width:100%; max-width:var(--maxw); margin-inline:auto; padding-inline:var(--pad); position:relative; z-index:1; }
.section{ padding-block:clamp(72px,11vw,150px); position:relative; z-index:1; }
.section--tight{ padding-block:clamp(48px,7vw,90px); }
.divider{ height:1px; background:var(--line); border:0; margin:0; }

/* kicker (mono eyebrow) */
.kicker{
  font-family:var(--f-mono); font-size:12.5px; letter-spacing:.22em; text-transform:uppercase;
  color:var(--ink-3); display:flex; align-items:center; gap:12px; margin:0 0 22px;
}
.kicker .idx{ color:var(--accent); }
.kicker::after{ content:""; height:1px; flex:1; background:var(--line); max-width:120px; }
.kicker--center{ justify-content:center; }
.kicker--center::after{ display:none; }

/* headings */
h1,h2,h3,h4{ font-family:var(--f-disp); font-weight:600; line-height:1.04; letter-spacing:-.01em; margin:0; }
.h-xl{ font-size:clamp(38px,7vw,84px); font-weight:700; letter-spacing:-.02em; }
.h-lg{ font-size:clamp(30px,4.6vw,56px); font-weight:600; }
.h-md{ font-size:clamp(23px,3vw,34px); }
.lede{ font-size:clamp(18px,2.2vw,22px); line-height:1.55; color:var(--ink-2); max-width:60ch; }
p{ margin:0 0 1.1em; }
p:last-child{ margin-bottom:0; }
.muted{ color:var(--ink-2); }
.faint{ color:var(--ink-3); }

/* ---------- Buttons ---------- */
.btn{
  --bh:52px;
  display:inline-flex; align-items:center; gap:11px; height:var(--bh); padding:0 24px;
  border-radius:100px; font-family:var(--f-mono); font-size:13.5px; letter-spacing:.12em; text-transform:uppercase;
  border:1px solid var(--line-2); color:var(--ink); background:rgba(255,255,255,.02);
  cursor:pointer; transition:all .35s var(--ease); white-space:nowrap;
}
.btn:hover{ border-color:var(--accent); color:var(--accent-hi); transform:translateY(-2px); }
.btn .arw{ transition:transform .35s var(--ease); }
.btn:hover .arw{ transform:translateX(4px); }
.btn--solid{ background:var(--accent); color:#0a0b0d; border-color:var(--accent); font-weight:600; }
.btn--solid:hover{ background:var(--accent-hi); border-color:var(--accent-hi); color:#0a0b0d; box-shadow:0 12px 34px -12px var(--accent); }
.btn--sm{ --bh:42px; padding:0 18px; font-size:12px; }

/* ---------- Top nav ---------- */
.nav{
  position:fixed; top:0; left:0; right:0; z-index:60;
  display:flex; align-items:center; justify-content:space-between;
  padding:16px var(--pad); transition:background .4s var(--ease), border-color .4s var(--ease), padding .4s var(--ease);
  border-bottom:1px solid transparent;
}
.nav.scrolled{
  background:rgba(10,11,13,.72); backdrop-filter:blur(16px) saturate(140%);
  -webkit-backdrop-filter:blur(16px) saturate(140%); border-bottom-color:var(--line);
  padding-top:12px; padding-bottom:12px;
}
.brand{ display:flex; align-items:center; gap:11px; font-family:var(--f-disp); font-weight:700; letter-spacing:.02em; font-size:18px; }
.brand .dot{ width:9px; height:9px; border-radius:2px; background:var(--accent); box-shadow:0 0 12px var(--accent); }
.brand small{ display:block; font-family:var(--f-mono); font-weight:400; font-size:10px; letter-spacing:.2em; color:var(--ink-3); text-transform:uppercase; margin-top:-2px; }
.nav-links{ display:flex; align-items:center; gap:6px; }
.nav-links a{
  font-family:var(--f-mono); font-size:12.5px; letter-spacing:.12em; text-transform:uppercase; color:var(--ink-2);
  padding:10px 14px; border-radius:8px; transition:color .25s, background .25s;
}
.nav-links a:hover{ color:var(--ink); background:rgba(255,255,255,.05); }
.nav-links a.res{ color:var(--accent); border:1px solid var(--line-2); margin-left:8px; }
.nav-links a.res:hover{ border-color:var(--accent); background:var(--accent-dim); }
.nav-toggle{ display:none; }

@media (max-width:760px){
  .nav-links{
    position:fixed; inset:0 0 0 auto; width:min(80vw,320px); flex-direction:column; align-items:stretch; justify-content:center; gap:10px;
    background:rgba(12,14,17,.97); backdrop-filter:blur(20px); padding:80px 28px; transform:translateX(100%); transition:transform .45s var(--ease);
    border-left:1px solid var(--line);
  }
  .nav-links.open{ transform:translateX(0); }
  .nav-links a{ font-size:15px; padding:14px 12px; }
  .nav-toggle{
    display:flex; flex-direction:column; gap:5px; width:44px; height:44px; align-items:center; justify-content:center;
    background:none; border:1px solid var(--line-2); border-radius:9px; cursor:pointer; z-index:61;
  }
  .nav-toggle span{ width:20px; height:2px; background:var(--ink); transition:.3s var(--ease); }
  .nav-toggle.open span:nth-child(1){ transform:translateY(7px) rotate(45deg); }
  .nav-toggle.open span:nth-child(2){ opacity:0; }
  .nav-toggle.open span:nth-child(3){ transform:translateY(-7px) rotate(-45deg); }
}

/* ---------- Hero (home takeover) ---------- */
.hero{ position:relative; min-height:100svh; display:flex; align-items:center; overflow:hidden; }
.hero-media{ position:absolute; inset:0; z-index:0; }
.hero-media img{ width:100%; height:100%; object-fit:cover; object-position:52% 46%; }
.hero-media::after{
  content:""; position:absolute; inset:0;
  background:
    linear-gradient(90deg, rgba(7,8,10,.9) 0%, rgba(7,8,10,.62) 30%, rgba(7,8,10,.12) 54%, transparent 68%),
    radial-gradient(120% 90% at 62% 42%, transparent 34%, rgba(10,11,13,.5) 74%, var(--bg) 100%),
    linear-gradient(180deg, rgba(10,11,13,.5) 0%, transparent 26%, transparent 60%, var(--bg) 100%);
}
.hero h1, .hero .sub, .hero-tagline, .hero-eyebrow{ text-shadow:0 2px 24px rgba(0,0,0,.55); }
.hero-inner{ position:relative; z-index:2; width:100%; }
.hero-eyebrow{
  font-family:var(--f-mono); font-size:13px; letter-spacing:.32em; text-transform:uppercase; color:var(--ink-2);
  display:flex; align-items:center; gap:14px; margin-bottom:26px;
}
.hero-eyebrow .leds{ display:inline-flex; gap:6px; }
.hero-eyebrow .leds i{ width:8px; height:8px; border-radius:50%; display:block; }
.led-r{ background:var(--led-red); box-shadow:0 0 8px var(--led-red); }
.led-g{ background:var(--led-grn); box-shadow:0 0 8px var(--led-grn); }
.led-b{ background:var(--led-blu); box-shadow:0 0 8px var(--led-blu); }
.hero h1{
  font-family:var(--f-disp); font-weight:700; text-transform:uppercase;
  font-size:clamp(52px,12vw,158px); line-height:.92; letter-spacing:.01em; margin:0;
}
.hero h1 .sub{ display:block; font-size:clamp(15px,2.4vw,26px); letter-spacing:.4em; font-weight:500; color:var(--ink-2); margin-top:18px; text-transform:uppercase; }
.hero-tagline{ margin:30px 0 38px; max-width:44ch; font-size:clamp(16px,2vw,20px); color:var(--ink-2); }
.hero-cta{ display:flex; gap:14px; flex-wrap:wrap; align-items:center; }
.hero-readout{
  position:absolute; left:var(--pad); bottom:30px; z-index:2;
  font-family:var(--f-mono); font-size:12px; letter-spacing:.06em; color:var(--ink-3);
}
.hero-readout b{ color:var(--accent); font-weight:400; }
.scroll-cue{
  position:absolute; left:50%; bottom:26px; transform:translateX(-50%); z-index:2;
  font-family:var(--f-mono); font-size:10.5px; letter-spacing:.3em; text-transform:uppercase; color:var(--ink-3);
  display:flex; flex-direction:column; align-items:center; gap:8px;
}
.scroll-cue .bar{ width:1px; height:38px; background:linear-gradient(var(--accent),transparent); animation:cue 1.9s var(--ease) infinite; transform-origin:top; }
@keyframes cue{ 0%{transform:scaleY(0);opacity:0} 40%{transform:scaleY(1);opacity:1} 100%{transform:scaleY(1) translateY(38px);opacity:0} }
@media (max-width:760px){ .hero-readout, .scroll-cue{ display:none; } }

/* ---------- Intro / positioning ---------- */
.intro-grid{ display:grid; grid-template-columns:1fr; gap:44px; }
@media (min-width:900px){ .intro-grid{ grid-template-columns:.9fr 1.1fr; gap:64px; align-items:start; } }
.stat-row{ display:flex; flex-wrap:wrap; gap:14px; margin-top:34px; }
.stat{ border:1px solid var(--line); border-radius:var(--radius-sm); padding:16px 20px; background:var(--panel); flex:1 1 140px; }
.stat b{ display:block; font-family:var(--f-disp); font-size:30px; font-weight:700; line-height:1; }
.stat span{ font-family:var(--f-mono); font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:var(--ink-3); }

/* discipline chips */
.chips{ display:flex; flex-wrap:wrap; gap:9px; margin-top:8px; }
.chip{
  font-family:var(--f-mono); font-size:12px; letter-spacing:.06em; color:var(--ink-2);
  border:1px solid var(--line); border-radius:100px; padding:7px 14px; background:var(--panel);
  transition:border-color .3s, color .3s;
}
.chip:hover{ border-color:var(--accent); color:var(--accent-hi); }
.chip .d{ color:var(--accent); margin-right:8px; }

/* ---------- Work index / project cards ---------- */
.work-list{ display:grid; grid-template-columns:1fr; gap:20px; }
.pcard{
  position:relative; display:grid; grid-template-columns:1fr; overflow:hidden;
  border:1px solid var(--line); border-radius:var(--radius); background:var(--panel);
  transition:border-color .4s var(--ease), transform .4s var(--ease), box-shadow .4s var(--ease);
  isolation:isolate;
}
@media (min-width:820px){
  .pcard{ grid-template-columns:1.15fr 1fr; align-items:stretch; }
  .pcard--flip .pcard-media{ order:2; }
}
.pcard:hover{ border-color:color-mix(in srgb, var(--pc,var(--accent)) 60%, var(--line)); transform:translateY(-4px); box-shadow:0 30px 60px -34px rgba(0,0,0,.9); }
.pcard-media{ position:relative; overflow:hidden; min-height:280px; background:#000; }
.pcard-media img{ width:100%; height:100%; object-fit:cover; transition:transform .8s var(--ease); }
.pcard:hover .pcard-media img{ transform:scale(1.05); }
.pcard-media::after{ content:""; position:absolute; inset:0; background:linear-gradient(90deg,transparent 60%, var(--panel) 100%); opacity:0; transition:opacity .4s; }
@media (min-width:820px){ .pcard-media::after{ opacity:.5; } }
.pcard-body{ padding:clamp(26px,3.4vw,44px); display:flex; flex-direction:column; justify-content:center; gap:14px; }
.pcard-tag{ font-family:var(--f-mono); font-size:11.5px; letter-spacing:.18em; text-transform:uppercase; color:var(--pc,var(--accent)); }
.pcard h3{ font-size:clamp(26px,3.4vw,40px); font-weight:700; text-transform:uppercase; letter-spacing:.005em; }
.pcard h3 .yr{ font-family:var(--f-mono); font-size:13px; color:var(--ink-3); letter-spacing:.1em; margin-left:10px; -webkit-text-fill-color:var(--ink-3); }
.pcard p{ color:var(--ink-2); font-size:15.5px; max-width:46ch; }
.pcard-meta{ display:flex; flex-wrap:wrap; gap:8px; margin-top:2px; }
.pcard-meta span{ font-family:var(--f-mono); font-size:11px; letter-spacing:.05em; color:var(--ink-3); border:1px solid var(--line); border-radius:100px; padding:5px 11px; }
.pcard-go{ display:inline-flex; align-items:center; gap:10px; font-family:var(--f-mono); font-size:12.5px; letter-spacing:.14em; text-transform:uppercase; color:var(--ink); margin-top:8px; }
.pcard-go .arw{ color:var(--pc,var(--accent)); transition:transform .35s var(--ease); }
.pcard:hover .pcard-go .arw{ transform:translateX(6px); }
.pcard .stretch{ position:absolute; inset:0; z-index:3; }
.pcard--art{ --pc:#f2913a; } .pcard--fil{ --pc:#ef6a3d; } .pcard--cat{ --pc:#e0433f; } .pcard--spe{ --pc:#38d66b; }

/* ---------- Case-study (project pages) ---------- */
.case-hero{ position:relative; min-height:88svh; display:flex; align-items:flex-end; overflow:hidden; }
.case-hero .hero-media img{ object-position:center; }
.case-hero .hero-media::after{
  content:""; position:absolute; inset:0;
  background:linear-gradient(180deg, rgba(10,11,13,.6) 0%, transparent 34%, transparent 50%, var(--bg) 100%);
}
.case-hero-inner{ position:relative; z-index:2; padding-bottom:clamp(40px,6vw,80px); }
.case-hero h1{ font-family:var(--f-disp); font-weight:700; text-transform:uppercase; font-size:clamp(44px,10vw,128px); line-height:.9; }
.case-hero .subline{ font-size:clamp(15px,2.2vw,22px); letter-spacing:.36em; text-transform:uppercase; color:var(--accent-hi); font-family:var(--f-mono); margin-top:16px; }
.backlink{ display:inline-flex; align-items:center; gap:9px; font-family:var(--f-mono); font-size:12px; letter-spacing:.14em; text-transform:uppercase; color:var(--ink-2); margin-bottom:22px; }
.backlink:hover{ color:var(--accent-hi); }
.backlink .arw{ transition:transform .3s var(--ease); }
.backlink:hover .arw{ transform:translateX(-4px); }

/* meta strip */
.meta-strip{ display:grid; grid-template-columns:repeat(2,1fr); gap:1px; background:var(--line); border:1px solid var(--line); border-radius:var(--radius); overflow:hidden; }
@media (min-width:720px){ .meta-strip{ grid-template-columns:repeat(4,1fr); } }
.meta-strip .m{ background:var(--panel); padding:20px 22px; }
.meta-strip .m span{ font-family:var(--f-mono); font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:var(--ink-3); display:block; margin-bottom:7px; }
.meta-strip .m b{ font-weight:500; font-size:15px; color:var(--ink); font-family:var(--f-body); }

/* two-column prose block */
.split{ display:grid; grid-template-columns:1fr; gap:40px; align-items:center; }
@media (min-width:880px){ .split{ grid-template-columns:1fr 1fr; gap:clamp(40px,5vw,80px); } .split--wide-l{ grid-template-columns:1.25fr 1fr; } .split--wide-r{ grid-template-columns:1fr 1.25fr; } }
.split .media{ border-radius:var(--radius); overflow:hidden; border:1px solid var(--line); background:#000; }
.split .media img{ width:100%; }
.prose h3{ font-size:clamp(24px,3vw,36px); margin-bottom:18px; }
.prose p{ color:var(--ink-2); }
.prose .kicker{ margin-bottom:16px; }

/* wide feature media (breaks past content width for impact) */
.media-wide{ margin:0 auto; max-width:1600px; padding-inline:clamp(0px,3vw,44px); }
.media-wide img{ width:100%; display:block; border-radius:var(--radius); border:1px solid var(--line); background:#000; }
.media-wide figcaption{ margin-top:16px; }

/* image with overlaid text (fills empty negative space in a render) */
.overlay-fig{ position:relative; margin:0 auto; max-width:1560px; padding-inline:clamp(0px,3vw,44px); }
.overlay-fig .of-img{ width:100%; display:block; border-radius:var(--radius); border:1px solid var(--line); }
.overlay-text .kicker{ margin-bottom:14px; }
.overlay-text h2{ margin-bottom:16px; }
.overlay-text p{ color:var(--ink-2); margin:0; }
@media(min-width:860px){
  .overlay-text{ position:absolute; top:7%; right:calc(clamp(0px,3vw,44px) + 2.5%); width:41%; max-width:540px;
    padding:30px 32px; border-radius:var(--radius);
    background:radial-gradient(150% 150% at 88% 12%, rgba(6,7,9,.93) 0%, rgba(6,7,9,.74) 48%, rgba(6,7,9,.2) 82%, transparent 100%);
    text-shadow:0 2px 18px rgba(0,0,0,.5); }
  .overlay-text h2{ font-size:clamp(24px,2.6vw,34px); }
}
@media(max-width:859px){ .overlay-text{ margin-top:22px; padding-inline:var(--pad); } }

/* two-column prose */
.prose-cols{ display:grid; grid-template-columns:1fr; gap:20px 52px; margin-top:36px; }
@media(min-width:820px){ .prose-cols{ grid-template-columns:1fr 1fr; } }
.prose-cols p{ color:var(--ink-2); margin:0; }

/* figure caption */
figure{ margin:0; }
figcaption{ font-family:var(--f-mono); font-size:12px; letter-spacing:.04em; color:var(--ink-3); margin-top:12px; padding-left:14px; border-left:2px solid var(--accent); }

/* spec grid */
.spec-grid{ display:grid; grid-template-columns:repeat(2,1fr); gap:1px; background:var(--line); border:1px solid var(--line); border-radius:var(--radius); overflow:hidden; }
@media (min-width:640px){ .spec-grid{ grid-template-columns:repeat(3,1fr); } }
.spec{ background:var(--panel); padding:24px 22px; transition:background .3s; }
.spec:hover{ background:var(--panel-2); }
.spec .n{ font-family:var(--f-mono); font-size:11px; color:var(--accent); letter-spacing:.1em; }
.spec h4{ font-family:var(--f-body); font-weight:600; font-size:16px; margin:10px 0 4px; }
.spec p{ font-size:13.5px; color:var(--ink-3); margin:0; line-height:1.5; }

/* feature list w/ mono bullets */
.flist{ list-style:none; margin:0; padding:0; display:grid; gap:2px; }
.flist li{ display:grid; grid-template-columns:auto 1fr; gap:16px; padding:16px 0; border-bottom:1px solid var(--line); }
.flist li:last-child{ border-bottom:0; }
.flist .k{ font-family:var(--f-mono); font-size:12px; color:var(--accent); letter-spacing:.08em; padding-top:3px; white-space:nowrap; }
.flist .v{ color:var(--ink-2); font-size:15.5px; }
.flist .v b{ color:var(--ink); font-weight:600; }

/* pull quote */
.pull{ border-left:3px solid var(--accent); padding:6px 0 6px 28px; font-family:var(--f-disp); font-weight:500; font-size:clamp(22px,3.2vw,34px); line-height:1.28; color:var(--ink); letter-spacing:-.01em; }

/* interactive annotated diagram */
.diagram{ position:relative; border-radius:var(--radius); overflow:hidden; border:1px solid var(--line); background:#060708; }
.diagram img{ width:100%; display:block; }
.hotspot{ position:absolute; width:26px; height:26px; transform:translate(-50%,-50%); z-index:3; }
.hotspot .pin{
  position:absolute; inset:0; border-radius:50%; border:1.5px solid var(--accent); background:var(--accent-dim);
  cursor:pointer; appearance:none; -webkit-appearance:none; padding:0; font:inherit; color:inherit;
}
.hotspot .pin:focus-visible{ outline:2px solid var(--accent-hi); outline-offset:3px; }
.hotspot .pin::before{ content:""; position:absolute; inset:0; border-radius:50%; border:1px solid var(--accent); animation:ping 2.4s var(--ease) infinite; }
.hotspot .pin::after{ content:""; position:absolute; top:50%; left:50%; width:6px; height:6px; border-radius:50%; background:var(--accent); transform:translate(-50%,-50%); }
@keyframes ping{ 0%{transform:scale(1);opacity:.7} 70%,100%{transform:scale(2.4);opacity:0} }
.hotspot .label{
  position:absolute; left:50%; bottom:calc(100% + 12px); transform:translateX(-50%) translateY(6px);
  background:rgba(14,16,19,.96); border:1px solid var(--accent); color:var(--ink);
  font-family:var(--f-mono); font-size:11.5px; letter-spacing:.05em; padding:8px 12px; border-radius:8px; white-space:nowrap;
  opacity:0; pointer-events:none; transition:opacity .3s, transform .3s var(--ease);
}
.hotspot:hover .label, .hotspot:focus-within .label{ opacity:1; transform:translateX(-50%) translateY(0); }
.hotspot .label span{ color:var(--accent); }
@media (max-width:640px){ .hotspot .label{ font-size:10px; padding:6px 9px; } }

/* filtra materials diagram */
.fdiagram{ display:grid; grid-template-columns:1fr; gap:36px; align-items:center; border:1px solid var(--line); border-radius:var(--radius); background:var(--bg-1);
  background-image:radial-gradient(rgba(255,255,255,.03) 1px, transparent 1px); background-size:26px 26px; padding:clamp(28px,4vw,52px); }
@media(min-width:820px){ .fdiagram{ grid-template-columns:.85fr 1.15fr; gap:52px; } }
.fdiag-img{ position:relative; display:block; width:min(300px,78%); margin:0 auto; }
.fdiag-img img{ width:100%; display:block; position:relative; z-index:1; filter:drop-shadow(0 24px 46px rgba(0,0,0,.7)); }
.fmark{ position:absolute; z-index:3; width:27px; height:27px; transform:translate(-50%,-50%); border-radius:50%;
  border:1.5px solid var(--accent); background:color-mix(in srgb, var(--accent) 18%, transparent); color:var(--accent-hi);
  font-family:var(--f-mono); font-size:12px; display:flex; align-items:center; justify-content:center; }
.flegend{ list-style:none; margin:0; padding:0; display:grid; gap:2px; }
.flegend li{ display:grid; grid-template-columns:auto 1fr; gap:18px; padding:18px 0; border-bottom:1px solid var(--line); }
.flegend li:last-child{ border-bottom:0; }
.flegend .num{ font-family:var(--f-mono); font-size:13px; color:var(--accent); padding-top:2px; }
.flegend b{ display:block; font-size:16.5px; margin-bottom:4px; }
.flegend p{ margin:0; font-size:14px; color:var(--ink-3); line-height:1.55; }

/* gallery */
.gallery{ display:grid; grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); gap:16px; }
.gallery figure{ border-radius:var(--radius); overflow:hidden; border:1px solid var(--line); background:#000; }
.gallery img{ width:100%; height:100%; object-fit:cover; aspect-ratio:4/3; transition:transform .7s var(--ease); }
.gallery figure:hover img{ transform:scale(1.06); }
.gallery .tall img{ aspect-ratio:3/4; }
.gallery .wide{ grid-column:span 2; }
@media (max-width:560px){ .gallery .wide{ grid-column:span 1; } }

/* next-project footer link */
.nextp{ display:block; border-top:1px solid var(--line); }
.nextp a{ display:flex; align-items:center; justify-content:space-between; gap:20px; padding:clamp(40px,7vw,90px) var(--pad); max-width:var(--maxw); margin-inline:auto; transition:background .4s; flex-wrap:wrap; }
.nextp a:hover{ background:var(--panel); }
.nextp .lab{ font-family:var(--f-mono); font-size:12px; letter-spacing:.2em; text-transform:uppercase; color:var(--ink-3); }
.nextp .nm{ font-family:var(--f-disp); font-weight:700; text-transform:uppercase; font-size:clamp(30px,6vw,68px); line-height:1; }
.nextp .arw{ color:var(--accent); font-size:clamp(30px,5vw,54px); transition:transform .4s var(--ease); }
.nextp a:hover .arw{ transform:translateX(10px); }

/* ---------- Footer / contact ---------- */
.foot{ border-top:1px solid var(--line); background:var(--bg-1); position:relative; z-index:1; }
.foot-main{ padding-block:clamp(64px,9vw,120px); }
.foot h2{ font-size:clamp(34px,6vw,72px); font-weight:700; letter-spacing:-.02em; line-height:1; }
.foot-mail{ display:inline-flex; align-items:center; gap:14px; font-family:var(--f-disp); font-weight:600; font-size:clamp(20px,3.2vw,34px); margin-top:26px; color:var(--ink); border-bottom:1px solid var(--line-2); padding-bottom:8px; transition:color .3s, border-color .3s; }
.foot-mail:hover{ color:var(--accent-hi); border-color:var(--accent); }
.foot-links{ display:flex; flex-wrap:wrap; gap:12px; margin-top:40px; }
.foot-row{ display:flex; flex-wrap:wrap; justify-content:space-between; gap:20px; align-items:center; padding-block:26px; border-top:1px solid var(--line); font-family:var(--f-mono); font-size:12px; letter-spacing:.06em; color:var(--ink-3); }
.foot-row .leds{ display:inline-flex; gap:6px; vertical-align:middle; margin-left:10px; }
.foot-row .leds i{ width:7px; height:7px; border-radius:50%; display:inline-block; }

/* ---------- Reveal animations ---------- */
/* Gated behind .js so content is fully visible if JavaScript never runs. */
.js .reveal{ opacity:0; transform:translateY(26px); transition:opacity .9s var(--ease), transform .9s var(--ease); }
.reveal.in{ opacity:1; transform:none; }
.reveal.d1{ transition-delay:.08s; } .reveal.d2{ transition-delay:.16s; } .reveal.d3{ transition-delay:.24s; } .reveal.d4{ transition-delay:.32s; }
@media (prefers-reduced-motion: reduce){ .reveal{ opacity:1 !important; transform:none !important; } .scroll-cue,.hotspot .pin::before{ animation:none; } }

/* capabilities grid (about) */
.cap-grid{ display:grid; grid-template-columns:1fr; gap:1px; background:var(--line); border:1px solid var(--line); border-radius:var(--radius); overflow:hidden; }
@media (min-width:640px){ .cap-grid{ grid-template-columns:repeat(2,1fr); } }
@media (min-width:980px){ .cap-grid{ grid-template-columns:repeat(3,1fr); } }
.cap{ background:var(--panel); padding:clamp(24px,2.6vw,34px); transition:background .3s; }
.cap:hover{ background:var(--panel-2); }
.cap h3{ font-size:20px; margin-bottom:16px; padding-bottom:14px; border-bottom:1px solid var(--line); }
.cap ul{ list-style:none; margin:0; padding:0; display:grid; gap:9px; }
.cap li{ position:relative; padding-left:20px; color:var(--ink-2); font-size:14.5px; line-height:1.5; }
.cap li::before{ content:""; position:absolute; left:0; top:9px; width:6px; height:6px; border-radius:1px; background:var(--accent); }

/* utility */
.mt-s{ margin-top:18px; } .mt-m{ margin-top:34px; } .mt-l{ margin-top:56px; }
.center{ text-align:center; } .maxw-720{ max-width:720px; } .mx-auto{ margin-inline:auto; }
.eyebrow-lg{ font-family:var(--f-mono); font-size:13px; letter-spacing:.24em; text-transform:uppercase; color:var(--accent); }
