/* ============ TOKENS ============ */
/* Black / silver / red. --rust and --heartwood keep their original names
   to minimize churn elsewhere in this file, but now carry the red accent
   and the fixed always-dark panel color respectively. */
:root{
  /* Fixed dark scheme — always these values, regardless of browser/OS
     light-dark preference. */
  --ground: #101010;
  --ground-raised: #1B1B1B;
  --ink: #EDEDED;
  --ink-soft: #A6A8AC;
  --line: rgba(237,237,237,0.14);
  --rust: #D62828;
  --rust-deep: #9E1B1B;
  --panel-a: #4C4D4F;
  --panel-b: #2B2C2E;
  --panel-c: #131314;
  --tag-bg: #1B1B1B;
  --focus: #D62828;
  --on-accent: #FFFFFF;      /* text/icons sitting on the red accent */
  --shadow: 0 18px 40px -18px rgba(0,0,0,0.6);
  --radius-s: 4px;
  --radius-m: 10px;
  --chrome-line: linear-gradient(90deg, transparent, rgba(235,236,238,0.05) 8%, rgba(215,217,220,0.55) 30%, rgba(255,255,255,0.95) 50%, rgba(215,217,220,0.55) 70%, rgba(235,236,238,0.05) 92%, transparent);

  /* Always-black panel + light text (used for the Story section). */
  --heartwood: #0B0B0C;
  --deep-ink: #F0F0F0;
  --deep-ink-soft: rgba(240,240,240,0.72);
  --deep-ink-faint: rgba(240,240,240,0.55);
  --deep-ink-cite: rgba(240,240,240,0.6);
  --red-light: #FF6A4D;      /* highlight red for accents on the deep panel */
}

*{box-sizing:border-box;}
html{scroll-behavior:smooth;}
@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto;}
  *{animation-duration:0.001ms !important; animation-iteration-count:1 !important; transition-duration:0.001ms !important; scroll-behavior:auto !important;}
}

body{
  margin:0;
  background:var(--ground);
  color:var(--ink);
  font-family:"Karla", ui-sans-serif, system-ui, sans-serif;
  font-size:17px;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
}

img,svg{max-width:100%;display:block;}

h1,h2,h3,h4{
  font-family:"Fraunces", Georgia, "Times New Roman", serif;
  font-weight:600;
  line-height:1.06;
  text-wrap:balance;
  margin:0;
  color:var(--ink);
}

a{color:inherit;}

.eyebrow{
  font-family:"Space Mono", ui-monospace, "SF Mono", Menlo, monospace;
  font-size:0.72rem;
  letter-spacing:0.14em;
  text-transform:uppercase;
  color:var(--rust);
  font-weight:700;
}

.wrap{
  max-width:1180px;
  margin:0 auto;
  padding:0 clamp(20px, 5vw, 56px);
}

.skip-link{
  position:absolute;
  left:-999px;
  top:0;
  background:var(--ink);
  color:var(--ground);
  padding:12px 18px;
  z-index:200;
  border-radius:0 0 var(--radius-s) 0;
}
.skip-link:focus{left:0;}

:focus-visible{
  outline:2.5px solid var(--focus);
  outline-offset:3px;
}

button, .btn{font-family:inherit;}

/* ============ HEADER ============ */
header{
  position:sticky;
  top:0;
  z-index:100;
  background:
    linear-gradient(rgba(10,8,6,0.6), rgba(10,8,6,0.6)),
    url('images/header-wood-texture.jpg');
  background-size:cover;
  background-position:center;
  border-bottom:1px solid var(--line);
}
.nav-row{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:14px;
  padding:16px clamp(20px, 5vw, 56px);
  max-width:1180px;
  margin:0 auto;
}
.wordmark{
  display:flex;
  align-items:center;
  line-height:1;
  text-decoration:none;
  flex:none;
}
.wordmark img{
  display:block;
  height:80px;
  width:auto;
}
.nav-links{
  display:flex;
  gap:clamp(10px, 1.5vw, 22px);
  list-style:none;
  margin:0;
  padding:0;
}
.nav-links a{
  position:relative;
  text-decoration:none;
  font-weight:600;
  font-size:0.94rem;
  padding:6px 2px;
  white-space:nowrap;
  border-bottom:2px solid transparent;
  transition:color 0.18s ease;
}
/* Saw-cut rollover: a red line saws its way in under the link, left to
   right, with a small blade riding its leading edge. Both pseudo-elements
   are absolutely positioned so hover never changes nav-row width. */
.nav-links a::after{
  content:"";
  position:absolute;
  left:0;
  bottom:2px;
  width:100%;
  height:2px;
  background:var(--rust);
  transform:scaleX(0);
  transform-origin:left;
  transition:transform 0.42s cubic-bezier(.3,.8,.3,1);
  pointer-events:none;
}
.nav-links a::before{
  content:"";
  position:absolute;
  left:0%;
  bottom:2px;
  width:13px;
  height:13px;
  background-color:var(--rust);
  -webkit-mask-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0gNTAuMCwyLjAgTCA1Ny45LDE3Ljk2IEwgNzIuMzEsNy41IEwgNzEuODgsMjUuMyBMIDg5LjUsMjIuNzMgTCA4MC44NiwzOC4zIEwgOTcuNjUsNDQuMjEgTCA4Mi43Niw1My45OCBMIDk0Ljg4LDY3LjAyIEwgNzcuMTYsNjguNzUgTCA4MS44Myw4NS45MyBMIDY1LjM0LDc5LjIyIEwgNjEuNDksOTYuNjEgTCA1MC4wLDgzLjAgTCAzOC41MSw5Ni42MSBMIDM0LjY2LDc5LjIyIEwgMTguMTcsODUuOTMgTCAyMi44NCw2OC43NSBMIDUuMTIsNjcuMDIgTCAxNy4yNCw1My45OCBMIDIuMzUsNDQuMjEgTCAxOS4xNCwzOC4zIEwgMTAuNSwyMi43MyBMIDI4LjEyLDI1LjMgTCAyNy42OSw3LjUgTCA0Mi4xLDE3Ljk2IFogTSA2MSw1MCBBIDExLDExIDAgMSAwIDM5LDUwIEEgMTEsMTEgMCAxIDAgNjEsNTAgWiIvPjwvc3ZnPg==");
  mask-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0gNTAuMCwyLjAgTCA1Ny45LDE3Ljk2IEwgNzIuMzEsNy41IEwgNzEuODgsMjUuMyBMIDg5LjUsMjIuNzMgTCA4MC44NiwzOC4zIEwgOTcuNjUsNDQuMjEgTCA4Mi43Niw1My45OCBMIDk0Ljg4LDY3LjAyIEwgNzcuMTYsNjguNzUgTCA4MS44Myw4NS45MyBMIDY1LjM0LDc5LjIyIEwgNjEuNDksOTYuNjEgTCA1MC4wLDgzLjAgTCAzOC41MSw5Ni42MSBMIDM0LjY2LDc5LjIyIEwgMTguMTcsODUuOTMgTCAyMi44NCw2OC43NSBMIDUuMTIsNjcuMDIgTCAxNy4yNCw1My45OCBMIDIuMzUsNDQuMjEgTCAxOS4xNCwzOC4zIEwgMTAuNSwyMi43MyBMIDI4LjEyLDI1LjMgTCAyNy42OSw3LjUgTCA0Mi4xLDE3Ljk2IFogTSA2MSw1MCBBIDExLDExIDAgMSAwIDM5LDUwIEEgMTEsMTEgMCAxIDAgNjEsNTAgWiIvPjwvc3ZnPg==");
  -webkit-mask-size:contain;
  mask-size:contain;
  -webkit-mask-repeat:no-repeat;
  mask-repeat:no-repeat;
  -webkit-mask-position:center;
  mask-position:center;
  opacity:0;
  transform:translate(-50%, 45%) rotate(0deg);
  transition:left 0.42s cubic-bezier(.3,.8,.3,1), opacity 0.15s ease;
  pointer-events:none;
}
.nav-links a:hover::after,
.nav-links a:focus-visible::after{
  transform:scaleX(1);
}
.nav-links a:hover::before,
.nav-links a:focus-visible::before{
  left:100%;
  opacity:1;
  animation:blade-travel-spin 0.42s linear;
}
@keyframes blade-travel-spin{
  from{transform:translate(-50%, 45%) rotate(0deg);}
  to{transform:translate(-50%, 45%) rotate(300deg);}
}
@media (prefers-reduced-motion: reduce){
  .nav-links a::after{transition:opacity 0.18s ease; transform:none; opacity:0;}
  .nav-links a:hover::after,
  .nav-links a:focus-visible::after{opacity:1;}
  .nav-links a::before{display:none;}
}
.nav-right{display:flex;align-items:center;gap:12px;}
.nav-social{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:38px;
  height:38px;
  border-radius:3px;
  border:1.5px solid var(--line);
  color:var(--ink);
  flex:none;
  transition:border-color 0.16s ease, color 0.16s ease, transform 0.16s ease;
}
.nav-social:hover{border-color:var(--rust); color:var(--rust); transform:translateY(-2px);}

.btn{
  display:inline-flex;
  align-items:center;
  gap:8px;
  padding:12px 22px;
  border-radius:3px;
  border:1.5px solid var(--ink);
  background:var(--ink);
  color:var(--ground);
  font-weight:700;
  font-size:0.92rem;
  text-decoration:none;
  white-space:nowrap;
  cursor:pointer;
  transition:transform 0.16s ease, background 0.16s ease, box-shadow 0.16s ease;
}
.btn:hover{transform:translateY(-2px); box-shadow:var(--shadow);}
.btn-rust{background:var(--rust); border-color:var(--rust); color:var(--on-accent);}
.btn-rust:hover{background:var(--rust-deep); border-color:var(--rust-deep);}
.btn-ghost{
  background:transparent;
  color:var(--ink);
  border:1.5px solid var(--line);
}
.btn-ghost:hover{border-color:var(--ink);}

/* Between the hamburger breakpoint and full width, the phone button no
   longer fits on one line without shrinking; drop it here and keep the
   primary CTA rather than let either button wrap. */
@media (max-width: 1180px) and (min-width: 861px){
  .nav-right .btn-ghost{display:none;}
}
@media (max-width: 1000px) and (min-width: 861px){
  .nav-row{gap:8px;}
  .nav-links{gap:clamp(6px, 1vw, 14px);}
  .nav-right{gap:8px;}
  .btn{padding:12px 16px;}
}

.menu-toggle{
  display:none;
  background:none;
  border:1.5px solid var(--line);
  border-radius:3px;
  width:42px;
  height:38px;
  align-items:center;
  justify-content:center;
  cursor:pointer;
}
.menu-toggle span, .menu-toggle::before, .menu-toggle::after{content:"";display:block;width:20px;height:2px;background:var(--ink);}
.menu-toggle{flex-direction:column;gap:5px;}

.nav-cta-mobile{display:none;}

@media (max-width: 860px){
  header{position:sticky;}
  .nav-row{position:relative; min-height:112px;}
  header .wordmark{
    position:absolute;
    left:50%;
    top:50%;
    transform:translate(-50%, -50%);
    padding:16px 0;
  }
  .nav-links{
    position:absolute;
    inset:100% 0 auto 0;
    flex-direction:column;
    background:var(--ground);
    padding:18px clamp(20px,5vw,56px) 26px;
    border-bottom:1px solid var(--line);
    transform:translateY(-8px);
    opacity:0;
    pointer-events:none;
    transition:opacity 0.18s ease, transform 0.18s ease;
  }
  .nav-links.open{opacity:1;transform:translateY(0);pointer-events:auto;}
  .nav-right{margin-left:auto;}
  .nav-right .btn-ghost{display:none;}
  .nav-right .btn-rust{display:none;}
  .nav-social{
    position:absolute;
    left:clamp(20px, 5vw, 56px);
    top:50%;
    transform:translateY(-50%);
  }
  .menu-toggle{display:flex;}
  .nav-cta-mobile{
    display:block;
    margin-top:14px;
  }
  .nav-cta-mobile .btn{
    width:100%;
    justify-content:center;
  }
}

/* ============ WOOD PANEL PLACEHOLDER ============ */
.grain-panel{
  position:relative;
  border-radius:var(--radius-m);
  overflow:hidden;
  background:
    repeating-linear-gradient(100deg,
      rgba(0,0,0,0.14) 0px, rgba(0,0,0,0.14) 1px,
      transparent 1px, transparent 7px),
    repeating-linear-gradient(97deg,
      rgba(255,255,255,0.14) 0px, rgba(255,255,255,0.14) 1px,
      transparent 1px, transparent 13px),
    linear-gradient(115deg,
      var(--panel-c) 0%, var(--panel-b) 10%, var(--panel-a) 21%,
      #E9EAEC 32%, var(--panel-a) 42%, var(--panel-c) 54%,
      var(--panel-b) 66%, #D2D4D7 77%, var(--panel-b) 88%, var(--panel-c) 100%);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,0.1);
}
.grain-panel::after{
  content:"";
  position:absolute;
  inset:0;
  background:linear-gradient(115deg, transparent 28%, rgba(255,255,255,0.24) 45%, rgba(255,255,255,0.4) 50%, rgba(255,255,255,0.24) 55%, transparent 72%),
             radial-gradient(120% 90% at 20% 10%, rgba(255,255,255,0.16), transparent 55%),
             radial-gradient(120% 90% at 90% 100%, rgba(0,0,0,0.28), transparent 60%);
  pointer-events:none;
}
/* Real photos don't get the metal glare/parallax sweep. */
.grain-panel.no-glare::after{
  content:none;
}
.capability-photo{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  object-fit:cover;
  object-position:top;
}
/* Parallax: the glint sweep drifts as the panel moves through the
   viewport, so the metal reads as catching light while scrolling.
   JS sets --parallax per panel; motion is opt-in via this query so
   anyone with reduced-motion set never sees it move. */
@media (prefers-reduced-motion: no-preference){
  .grain-panel::after{
    transform:translate3d(calc(var(--parallax, 0px) * 0.5), var(--parallax, 0px), 0);
    transition:transform 0.2s ease-out;
    will-change:transform;
  }
}
.pending-tag{
  position:absolute;
  top:14px;
  left:14px;
  display:inline-flex;
  align-items:center;
  gap:6px;
  background:var(--tag-bg);
  color:var(--ink-soft);
  font-family:"Space Mono", monospace;
  font-size:0.62rem;
  letter-spacing:0.08em;
  text-transform:uppercase;
  padding:5px 9px 5px 7px;
  border-radius:3px;
  box-shadow:0 6px 14px -6px rgba(0,0,0,0.35);
  z-index:2;
}
.pending-tag::before{
  content:"";
  width:6px;height:6px;border-radius:50%;
  background:var(--rust);
  flex:none;
}
.icon-mark{
  position:relative;
  z-index:2;
  width:46px;height:46px;
  display:flex;align-items:center;justify-content:center;
  color:var(--on-accent);
  opacity:0.92;
}

/* ============ HERO ============ */
.hero{
  padding:clamp(52px, 8vw, 96px) 0 clamp(56px, 7vw, 84px);
  border-bottom:1px solid transparent;
  border-image:var(--chrome-line) 1;
}
.hero-grid{
  display:grid;
  grid-template-columns:1.05fr 0.95fr;
  gap:clamp(28px, 5vw, 64px);
  align-items:center;
}
.hero h1{
  font-size:clamp(2.5rem, 5.4vw, 4.1rem);
  margin-top:14px;
}
.hero h1 em{
  font-style:normal;
  color:var(--rust);
}
.hero p.lede{
  margin-top:20px;
  max-width:46ch;
  font-size:1.12rem;
  color:var(--ink-soft);
}
.hero-ctas{
  display:flex;
  gap:14px;
  flex-wrap:wrap;
  margin-top:32px;
}
.hero-visual{
  aspect-ratio:4/5;
  display:flex;
  align-items:flex-end;
  padding:20px;
}
.hero-stats{
  display:flex;
  gap:clamp(20px, 4vw, 40px);
  margin-top:40px;
  flex-wrap:wrap;
}
.hero-stats .stat b{
  display:block;
  font-family:"Fraunces", serif;
  font-size:1.8rem;
  font-weight:600;
}
.hero-stats .stat span{
  font-family:"Space Mono", monospace;
  font-size:0.68rem;
  letter-spacing:0.08em;
  text-transform:uppercase;
  color:var(--ink-soft);
}

@media (max-width: 860px){
  .hero-grid{grid-template-columns:1fr;}
  .hero-visual{aspect-ratio:16/10;order:-1;}
}

/* ============ SECTION SCAFFOLDING ============ */
section{padding:clamp(52px, 7vw, 92px) 0;}
.section-head{
  display:flex;
  justify-content:space-between;
  align-items:flex-end;
  gap:24px;
  margin-bottom:clamp(30px, 4vw, 48px);
  border-bottom:1px solid transparent;
  border-image:var(--chrome-line) 1;
  padding-bottom:22px;
}
.section-head h2{font-size:clamp(1.9rem, 3.4vw, 2.6rem);margin-top:8px;}
.section-head p{max-width:42ch;color:var(--ink-soft);margin:8px 0 0;}
.kerf{border:none;border-top:1px dashed var(--line);margin:0;}

#services{background:var(--ground-raised);}

.service-grid{
  display:grid;
  grid-template-columns:repeat(3, 1fr);
  gap:1px;
  background:var(--line);
  border:1px solid var(--line);
  border-radius:var(--radius-m);
  overflow:hidden;
}
@media (max-width: 900px){ .service-grid{grid-template-columns:repeat(2, 1fr);} }
@media (max-width: 560px){ .service-grid{grid-template-columns:1fr;} }
.service-card{
  background:var(--ground-raised);
  padding:28px 26px;
  display:flex;
  flex-direction:column;
  gap:14px;
  text-decoration:none;
  transition:background 0.2s ease;
}
.service-card:hover{background:var(--ground);}
.service-card .num{
  font-family:"Space Mono", monospace;
  font-size:0.72rem;
  color:var(--rust);
  letter-spacing:0.05em;
}
.service-card h3{font-size:1.2rem;font-weight:600;}
.service-card p{margin:0;color:var(--ink-soft);font-size:0.96rem;}
.service-card .svc-icon{color:var(--rust);}

.cta-banner{
  margin-top:20px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:20px;
  background:var(--heartwood);
  color:var(--deep-ink);
  text-decoration:none;
  padding:clamp(24px, 3.4vw, 34px) clamp(26px, 4vw, 40px);
  border-radius:var(--radius-m);
  transition:background 0.2s ease;
}
.cta-banner:hover{background:var(--rust-deep);}
.cta-banner .eyebrow{color:var(--red-light);}
.cta-banner h3{color:var(--deep-ink);font-size:1.3rem;}
.cta-banner-arrow{
  flex:none;
  width:46px;height:46px;
  border-radius:50%;
  border:1.5px solid var(--deep-ink-soft);
  display:flex;align-items:center;justify-content:center;
  color:var(--deep-ink);
  transition:transform 0.2s ease, background 0.2s ease;
}
.cta-banner:hover .cta-banner-arrow{transform:translateX(4px);background:rgba(255,255,255,0.08);}

/* ============ GALLERY ============ */
.gallery-grid{
  display:grid;
  grid-template-columns:repeat(auto-fit, minmax(260px, 1fr));
  gap:22px;
}
.gallery-card{
  display:flex;
  flex-direction:column;
  gap:12px;
}
.gallery-card .grain-panel{aspect-ratio:4/3;}
.gallery-meta{display:flex;justify-content:space-between;align-items:baseline;gap:12px;}
.gallery-meta h3{font-size:1.06rem;font-weight:600;}
.gallery-meta .dims{
  font-family:"Space Mono", monospace;
  font-size:0.72rem;
  color:var(--ink-soft);
  white-space:nowrap;
  font-variant-numeric:tabular-nums;
}
.gallery-card .cat{color:var(--ink-soft);font-size:0.9rem;margin:0;}

/* ============ STORY ============ */
#story{
  background:var(--heartwood);
  color:var(--deep-ink);
}
#story h2{color:var(--deep-ink);}
#story .eyebrow{color:var(--red-light);}
.story-grid{
  display:grid;
  grid-template-columns:0.85fr 1.15fr;
  gap:clamp(30px, 5vw, 64px);
  align-items:center;
}
.story-grid .grain-panel{aspect-ratio:3/4;}
blockquote{
  margin:0 0 24px;
  font-family:"Fraunces", serif;
  font-size:clamp(1.4rem, 2.6vw, 1.9rem);
  font-weight:500;
  line-height:1.28;
  text-wrap:balance;
}
blockquote cite{
  display:block;
  margin-top:14px;
  font-family:"Space Mono", monospace;
  font-style:normal;
  font-size:0.72rem;
  letter-spacing:0.06em;
  text-transform:uppercase;
  color:var(--deep-ink-cite);
}
#story p.body-copy{
  color:var(--deep-ink-soft);
  max-width:56ch;
  font-size:1.04rem;
}
.story-fact{color:var(--deep-ink-faint); font-family:"Space Mono", monospace; font-size:0.68rem; letter-spacing:0.06em; text-transform:uppercase; margin-top:22px;}

/* ============ PROCESS STRIP ============ */
#process .wrap{
  display:grid;
  grid-template-columns:repeat(4, 1fr);
  gap:0;
  border-top:1px solid transparent;
  border-bottom:1px solid transparent;
  border-image:var(--chrome-line) 1;
}
.step{
  padding:28px 24px;
  border-right:1px solid var(--line);
  position:relative;
}
.step:last-child{border-right:none;}
.step .step-no{
  font-family:"Space Mono", monospace;
  color:var(--rust);
  font-size:0.78rem;
  font-weight:700;
}
.step h3{font-size:1.05rem;margin-top:10px;font-weight:600;}
.step p{margin:8px 0 0;color:var(--ink-soft);font-size:0.9rem;}
@media (max-width: 760px){
  #process .wrap{grid-template-columns:1fr 1fr;}
  .step:nth-child(2){border-right:none;}
}
@media (max-width: 480px){
  #process .wrap{grid-template-columns:1fr;}
  .step{border-right:none;border-bottom:1px solid var(--line);}
}

/* ============ TESTIMONIAL ============ */
#testimonial{background:var(--ground-raised);}
.testimonial-card{
  max-width:800px;
  margin:0 auto;
  text-align:center;
}
.stars{color:var(--rust);letter-spacing:3px;font-size:1.1rem;margin-bottom:18px;}
.testimonial-card blockquote{
  color:var(--ink);
  font-size:clamp(1.3rem, 2.6vw, 1.7rem);
}
.testimonial-card cite{color:var(--ink-soft);}

/* ============ CONTACT ============ */
.contact-grid{
  display:grid;
  grid-template-columns:0.9fr 1.1fr;
  gap:clamp(30px, 5vw, 64px);
}
.contact-info dl{
  margin:26px 0 0;
  display:grid;
  gap:16px;
}
.contact-info .row{
  display:flex;
  gap:16px;
  padding:14px 0;
  border-bottom:1px solid var(--line);
}
.contact-info dt{
  font-family:"Space Mono", monospace;
  font-size:0.68rem;
  letter-spacing:0.06em;
  text-transform:uppercase;
  color:var(--ink-soft);
  width:88px;
  flex:none;
  padding-top:2px;
}
.contact-info dd{margin:0;font-weight:600;}
.placeholder-note{
  display:inline-block;
  margin-top:2px;
  font-family:"Space Mono", monospace;
  font-size:0.62rem;
  letter-spacing:0.04em;
  text-transform:uppercase;
  color:var(--rust);
  background:color-mix(in srgb, var(--rust) 12%, transparent);
  padding:2px 6px;
  border-radius:3px;
}

form{
  display:grid;
  gap:16px;
  background:var(--ground-raised);
  padding:clamp(24px, 3vw, 34px);
  border-radius:var(--radius-m);
  border:1px solid var(--line);
}
.field{display:grid;gap:6px;}
.field label{
  font-family:"Space Mono", monospace;
  font-size:0.7rem;
  letter-spacing:0.06em;
  text-transform:uppercase;
  color:var(--ink-soft);
}
.field input, .field select, .field textarea{
  font-family:"Karla", sans-serif;
  font-size:1rem;
  padding:12px 13px;
  border-radius:4px;
  border:1.5px solid var(--line);
  background:var(--ground);
  color:var(--ink);
}
.field input:focus, .field select:focus, .field textarea:focus{
  border-color:var(--rust);
}
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:16px;}
@media (max-width:520px){.two-col{grid-template-columns:1fr;}}
form .btn{justify-self:start;margin-top:4px;}
.form-note{font-size:0.82rem;color:var(--ink-soft);margin:-4px 0 0;}

@media (max-width: 860px){
  .contact-grid, .story-grid{grid-template-columns:1fr;}
  .story-grid .grain-panel{aspect-ratio:16/9;}
}

/* ============ FOOTER ============ */
footer{
  border-top:1px solid transparent;
  border-image:var(--chrome-line) 1;
  padding:36px 0;
}
.footer-row{
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:20px;
  flex-wrap:wrap;
}
.footer-links{display:flex;gap:20px;list-style:none;padding:0;margin:0;flex-wrap:wrap;}
.footer-links a{text-decoration:none;font-size:0.88rem;color:var(--ink-soft);}
.footer-links a:hover{color:var(--ink);}
.footer-fine{
  font-size:0.78rem;
  color:var(--ink-soft);
  margin-top:16px;
}

/* ============ SUBPAGE HEADER (CNC / Merchandise) ============ */
.page-hero{
  padding:clamp(52px, 8vw, 96px) 0 clamp(40px, 6vw, 64px);
  border-bottom:1px solid transparent;
  border-image:var(--chrome-line) 1;
}
.page-hero .eyebrow{margin-bottom:14px;}
.page-hero h1{font-size:clamp(2.2rem, 4.6vw, 3.4rem);}
.page-hero p.lede{margin-top:18px;max-width:58ch;font-size:1.1rem;color:var(--ink-soft);}
.page-hero .hero-ctas{margin-top:28px;}

/* ============ NOTICE BANNER ============ */
.notice-banner{
  background:color-mix(in srgb, var(--rust) 10%, var(--ground-raised));
  border:1px solid color-mix(in srgb, var(--rust) 30%, transparent);
  border-radius:var(--radius-m);
  padding:16px 20px;
  font-size:0.92rem;
  color:var(--ink-soft);
  display:flex;
  gap:10px;
  align-items:flex-start;
}
.notice-banner strong{color:var(--ink);}

/* ============ CAPABILITY ROWS (CNC page) ============ */
.capability{
  padding:clamp(44px, 6vw, 76px) 0;
  border-bottom:1px solid transparent;
  border-image:var(--chrome-line) 1;
}
.capability.capability-last{border-bottom:none; border-image:none;}
.capability .wrap{
  display:grid;
  grid-template-columns:0.9fr 1.1fr;
  gap:clamp(30px, 5vw, 64px);
  align-items:center;
}
.capability .grain-panel{aspect-ratio:4/3;}
.capability .grain-panel.tall{aspect-ratio:3/4;}
.capability .wrap.flip{grid-template-columns:1.1fr 0.9fr;}
.capability .wrap.flip .grain-panel{order:2;}
.capability .wrap.flip .capability-copy{order:1;}
.capability .num-tag{
  font-family:"Space Mono", monospace;
  color:var(--rust);
  font-size:0.78rem;
  letter-spacing:0.06em;
  text-transform:uppercase;
}
.capability h3{font-size:clamp(1.5rem, 2.6vw, 2rem); margin-top:10px;}
.capability p.desc{color:var(--ink-soft); margin-top:14px; max-width:52ch; font-size:1.02rem;}
.spec-list{margin-top:22px; display:grid; gap:10px;}
.spec-list .row{display:flex; gap:14px; align-items:baseline;}
.spec-list dt{
  font-family:"Space Mono", monospace;
  font-size:0.66rem;
  letter-spacing:0.05em;
  text-transform:uppercase;
  color:var(--ink-soft);
  width:128px;
  flex:none;
}
.spec-list dd{margin:0; font-weight:600; font-size:0.94rem;}
@media (max-width: 860px){
  .capability .wrap, .capability .wrap.flip{grid-template-columns:1fr;}
  .capability .grain-panel{aspect-ratio:16/9;}
  .capability .grain-panel.tall{aspect-ratio:3/4;}
  .capability .wrap.flip .grain-panel, .capability .wrap.flip .capability-copy{order:0;}
}

/* ============ MERCH GRID (Merchandise page) ============ */
.merch-grid{
  display:grid;
  grid-template-columns:repeat(auto-fit, minmax(240px, 1fr));
  gap:26px;
}
.merch-card{display:flex; flex-direction:column; gap:12px;}
.merch-card .grain-panel{aspect-ratio:1/1;}
.merch-meta{display:flex; justify-content:space-between; align-items:baseline; gap:10px;}
.merch-meta h3{font-size:1.05rem; font-weight:600;}
.merch-price{
  font-family:"Space Mono", monospace;
  font-size:0.8rem;
  color:var(--ink-soft);
  white-space:nowrap;
  font-variant-numeric:tabular-nums;
}
.merch-card p.desc{color:var(--ink-soft); font-size:0.92rem; margin:0;}
.merch-card .btn{margin-top:2px; align-self:flex-start;}

/* ============ REVEAL ANIMATION ============ */
/* Visible by default (no-JS / JS-failure safe). Only hidden-then-revealed
   when the "js" class below is present, which is added synchronously
   in <head> and backed by a hard timeout fallback in the closing script. */
.reveal{opacity:1;transform:none;}
html.js .reveal{
  opacity:0;
  transform:translateY(18px);
  transition:opacity 0.6s ease, transform 0.6s ease;
}
html.js .reveal.in{opacity:1;transform:translateY(0);}
@media (prefers-reduced-motion: reduce){
  html.js .reveal{opacity:1;transform:none;transition:none;}
}
