/*
 * Deadline Fab — the shop drawing.
 *
 * Light layout-paper ground. The photographs are the only dark, hot elements on
 * the page. Every welding site in the category is near-black plus molten orange,
 * which flattens good and bad photography together; this does the opposite.
 */

:root{
  --paper:#E4E7E6;
  --paper-2:#D8DCDB;
  --mill:#2B3138;
  --mill-2:#20252B;
  --blue:#1F4D6B;
  --oxide:#B4472A;
  --oxide-dark:#9c3c23;
  --arc:#E8F1FF;
  --hazard:#E0A32E;

  --display:'Archivo','Archivo Narrow',system-ui,sans-serif;
  --body:'IBM Plex Sans',system-ui,-apple-system,sans-serif;
  --mono:'IBM Plex Mono',ui-monospace,SFMono-Regular,monospace;

  --gutter:clamp(1.25rem,4vw,4rem);
  --rule:rgba(31,77,107,.28);
}

*,*::before,*::after{box-sizing:border-box}
body,h1,h2,h3,h4,p,figure,ul,ol,dl,dd{margin:0;padding:0}
ul,ol{list-style:none}

html{
  -webkit-text-size-adjust:100%;
  scroll-behavior:smooth;
  /* clip, not hidden: hidden makes this a scroll container, so anything parked
     off-screen extends the scrollable area and reads as blank space past the
     footer. clip has no such side effect. */
  overflow-x:hidden;
  overflow-x:clip;
}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

body{
  background:var(--paper);
  color:var(--mill);
  font-family:var(--body);
  font-size:clamp(1rem,.96rem + .2vw,1.0625rem);
  line-height:1.6;
}

body{padding:0}

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

/* The definitions sprite carries width/height="0", but a CSS height:auto beats a
   presentation attribute, so the global rule above was inflating it to the
   150px default for a replaced element with no viewBox. */
.svg-defs{position:absolute!important;width:0!important;height:0!important;overflow:hidden;pointer-events:none}
a{color:var(--blue);text-decoration-thickness:1px;text-underline-offset:3px}

:focus-visible{outline:2px solid var(--blue);outline-offset:3px}
.on-dark :focus-visible,.services :focus-visible,footer :focus-visible{outline-color:var(--arc)}

.skip{
  position:absolute;
  width:1px;height:1px;
  margin:-1px;padding:0;border:0;
  overflow:hidden;
  clip-path:inset(50%);
  white-space:nowrap;
}
.skip:focus{
  position:absolute;
  top:0;left:0;
  width:auto;height:auto;
  margin:0;padding:.75rem 1rem;
  clip-path:none;
  background:var(--mill);color:var(--paper);
  z-index:100;
}

/* ---------- type ---------- */
.display{
  font-family:var(--display);
  font-stretch:76%;
  font-weight:700;
  text-transform:uppercase;
  line-height:.9;
  letter-spacing:-.005em;
}
.mono{font-family:var(--mono);font-size:.75rem;letter-spacing:.1em;text-transform:uppercase}

h1.display{font-size:clamp(2.6rem,1.3rem + 6.2vw,5.5rem);max-width:14ch}
.hero h1.display{font-size:clamp(2.9rem,1.1rem + 8.4vw,6.75rem);max-width:11ch}
h2.display{font-size:clamp(2.25rem,1.4rem + 4vw,4.25rem)}
h3,.card-title,.svc-title{font-family:var(--display);font-stretch:80%;font-weight:600;text-transform:uppercase;font-size:1.25rem;line-height:1.05;letter-spacing:.01em}

/* ---------- shell ---------- */
.wrap{max-width:1440px;margin:0 auto;padding-inline:var(--gutter)}

.sheet{position:relative}
.sheet::before,.sheet::after{content:"";position:absolute;top:0;bottom:0;width:1px;background:var(--rule);display:none}
@media(min-width:1100px){
  .sheet::before,.sheet::after{display:block}
  .sheet::before{left:calc(var(--gutter) - 1.5rem)}
  .sheet::after{right:calc(var(--gutter) - 1.5rem)}
}

/* ---------- header ---------- */
.util{background:var(--mill);color:var(--paper);border-bottom:1px solid rgba(232,241,255,.14)}
.util .wrap{display:flex;justify-content:space-between;align-items:center;gap:1rem;height:34px;overflow:hidden}
.util .mono{font-size:.6875rem;opacity:.72;white-space:nowrap}
.util a{color:var(--arc);text-decoration:none}
.util a:hover{text-decoration:underline}
.util .hide-sm{display:none}
@media(min-width:760px){.util .hide-sm{display:block}}

.masthead{position:sticky;top:0;z-index:50;background:rgba(228,231,230,.9);backdrop-filter:saturate(1.4) blur(8px);border-bottom:1px solid var(--rule)}
.masthead .wrap{display:flex;align-items:center;justify-content:space-between;gap:1.5rem;padding-block:.85rem}

.logo{display:flex;align-items:center;gap:.7rem;text-decoration:none;color:var(--mill)}
.logo--img img{max-height:52px;width:auto}
.logo .plate{
  width:38px;height:38px;flex:none;border:1.5px solid var(--mill);
  display:grid;place-items:center;position:relative;
  font-family:var(--display);font-stretch:70%;font-weight:800;font-size:1.0625rem;letter-spacing:.02em;
}
.logo .plate::after{content:"";position:absolute;top:-1.5px;right:-1.5px;border-top:9px solid var(--paper);border-left:9px solid transparent}
.logo .name{font-family:var(--display);font-stretch:74%;font-weight:700;text-transform:uppercase;font-size:1.0625rem;line-height:.95;letter-spacing:.01em}
.logo .name small{display:block;font-family:var(--mono);font-size:.5625rem;font-weight:400;letter-spacing:.18em;opacity:.6;margin-top:.2rem;text-transform:none}

nav.main{display:none;gap:1.75rem;align-items:center}
@media(min-width:900px){nav.main{display:flex}}
nav.main ul{display:flex;gap:1.75rem}
nav.main a{font-family:var(--mono);font-size:.75rem;letter-spacing:.12em;text-transform:uppercase;color:var(--mill);text-decoration:none;padding-block:.4rem;position:relative;display:inline-block}
nav.main a::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1.5px;background:var(--oxide);transform:scaleX(0);transform-origin:left;transition:transform .22s ease}
nav.main a:hover::after,nav.main .current-menu-item > a::after{transform:scaleX(1)}

.btn{
  display:inline-block;font-family:var(--mono);font-size:.75rem;letter-spacing:.12em;text-transform:uppercase;
  padding:.7rem 1.15rem;text-decoration:none;border:1.5px solid transparent;cursor:pointer;
  transition:background .18s ease,color .18s ease,border-color .18s ease;
}
.btn-primary{background:var(--oxide);color:#fff;border-color:var(--oxide)}
.btn-primary:hover{background:var(--oxide-dark);border-color:var(--oxide-dark)}
.btn-ghost{border-color:var(--mill);color:var(--mill)}
.btn-ghost:hover{background:var(--mill);color:var(--paper)}
.on-dark .btn-ghost{border-color:rgba(232,241,255,.5);color:var(--arc)}
.on-dark .btn-ghost:hover{background:var(--arc);color:var(--mill)}
.btn-solid{background:#fff;color:var(--oxide);border-color:#fff}
.btn-solid:hover{background:var(--mill);color:#fff;border-color:var(--mill)}

/* ---------- hero ---------- */
.hero{padding-block:clamp(3rem,7vw,6rem) clamp(3rem,6vw,5.5rem)}
.hero-grid{display:grid;gap:clamp(2rem,4vw,3.5rem)}
@media(min-width:1000px){.hero-grid{grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);align-items:center}}

.eyebrow{display:flex;flex-wrap:wrap;gap:.35rem .9rem;color:var(--blue);margin-bottom:1.5rem}
.eyebrow span{position:relative;padding-left:.9rem}
.eyebrow span::before{content:"";position:absolute;left:0;top:.45em;width:5px;height:5px;background:var(--oxide)}
.eyebrow span:first-child{padding-left:0}
.eyebrow span:first-child::before{display:none}

h1 em{font-style:normal;color:var(--oxide)}
.lede{max-width:46ch;margin-top:1.6rem;font-size:clamp(1.0625rem,1rem + .35vw,1.25rem);color:#3c444d}
.hero-cta{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:2.25rem}

.plate-panel{background:var(--mill);position:relative;aspect-ratio:5/4;overflow:hidden;border:1px solid var(--mill)}
@media(max-width:999px){.plate-panel{aspect-ratio:4/3}}
.plate-panel svg{position:absolute;inset:0;width:100%;height:100%}
.plate-tag{position:absolute;left:1rem;bottom:1rem;z-index:2;color:var(--arc);opacity:.8;font-size:.625rem}

/* ---------- section furniture ---------- */
/* Vertical rhythm is keyed to the class, not the element. article and section
   are both used for top-level blocks, and tying padding to one of them left
   every page template with none. */
/* These wrappers are namespaced because WordPress body_class() emits bare
   "page", "archive", "single" and friends onto <body>. An unprefixed .page rule
   therefore also matched the body element, putting the section padding outside
   the header and footer entirely. */
section,.df-page,.df-service,.df-project,.df-archive{padding-block:clamp(3.5rem,7vw,7rem)}

/* Content pages are not full-bleed sections: they open directly under the
   sticky masthead, so a section-sized gap above the title reads as a mistake.
   The bottom is the opposite case — it meets the dark footer and a form needs
   real room below its submit button, or the page looks truncated. */
.df-page,.df-service{
  padding-top:clamp(2rem,3.5vw,3.25rem);
  padding-bottom:clamp(5rem,10vw,10rem);
}
.sec-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:1.5rem 2rem;margin-bottom:clamp(2rem,4vw,3.25rem)}
.sec-label{color:var(--blue);margin-bottom:1.1rem;display:block}
.weld-rule{display:block;margin-top:1.4rem;width:190px;max-width:60%;height:26px}
.services .sec-label{color:var(--hazard)}

/* ---------- project grid ---------- */
.work,.df-archive,.process,.related{border-top:1px solid var(--rule)}
.grid-work{display:grid;gap:1px;background:var(--rule);border:1px solid var(--rule)}
@media(min-width:640px){.grid-work{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1040px){.grid-work{grid-template-columns:repeat(3,1fr)}}

.card{background:var(--paper);position:relative;display:block;text-decoration:none;color:inherit;transition:background .2s ease}
.card:hover,.card:focus-visible{background:var(--paper-2)}
.frame{position:relative;display:block;aspect-ratio:4/3;background:linear-gradient(148deg,#343b43 0%,#272d34 42%,#191d22 100%);overflow:hidden}
.frame img{width:100%;height:100%;object-fit:cover}
.frame .ticks{position:absolute;inset:0;width:100%;height:100%}
.frame .ph{position:absolute;inset:0;display:grid;place-content:center;text-align:center;color:rgba(232,241,255,.42)}
.frame .ph .mono{font-size:.625rem}

.leader{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.leader .lead-line{stroke:var(--hazard);stroke-width:1.25;fill:none;stroke-dasharray:200;stroke-dashoffset:200;transition:stroke-dashoffset .38s cubic-bezier(.4,0,.2,1)}
.leader .lead-txt{fill:var(--hazard);font-family:var(--mono);font-size:9px;letter-spacing:.09em;opacity:0;transition:opacity .3s ease .12s}
.leader .lead-dot{fill:var(--hazard);opacity:0;transition:opacity .3s ease .12s}
.card:hover .lead-line,.card:focus-visible .lead-line{stroke-dashoffset:0}
.card:hover .lead-txt,.card:focus-visible .lead-txt,
.card:hover .lead-dot,.card:focus-visible .lead-dot{opacity:1}

.card-body{padding:1.15rem 1.25rem 1.4rem;display:flex;flex-direction:column;gap:.55rem}
.card-body .spec{color:var(--blue);font-size:.6875rem}
.card-body .card-title{font-size:1.125rem}
.card-body .place{font-size:.875rem;color:#5a636c}

/* ---------- filters ---------- */
.filters{display:flex;flex-direction:column;gap:1rem;margin-bottom:2rem}
.filters__group{display:flex;flex-wrap:wrap;align-items:center;gap:.45rem}
.filters__label{color:#6d767f;margin-right:.5rem;min-width:72px}
.chip{
  font-family:var(--mono);font-size:.6875rem;letter-spacing:.08em;text-transform:uppercase;
  border:1px solid var(--rule);padding:.4rem .7rem;color:var(--blue);text-decoration:none;
  transition:background .18s ease,color .18s ease,border-color .18s ease;
}
.chip:hover,.chip.is-on{background:var(--blue);border-color:var(--blue);color:#fff}
.chip--clear{color:var(--oxide);border-color:var(--oxide)}
.chip--clear:hover{background:var(--oxide);border-color:var(--oxide)}

/* ---------- services ---------- */
.services{background:var(--mill);color:var(--paper)}
.services .lede{color:rgba(232,241,255,.72)}
.services h1,.services h2{color:var(--paper)}
.grid-svc{display:grid;gap:1px;background:rgba(232,241,255,.16);border:1px solid rgba(232,241,255,.16)}
@media(min-width:620px){.grid-svc{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1040px){.grid-svc{grid-template-columns:repeat(3,1fr)}}
.svc{background:var(--mill);padding:1.75rem 1.5rem 2rem;display:flex;flex-direction:column;gap:.7rem;min-height:190px;text-decoration:none;color:inherit;transition:background .2s ease}
.svc:hover{background:var(--mill-2)}
.svc .proc{color:var(--hazard);font-size:.625rem}
.svc .svc-title{color:var(--paper)}
.svc .svc-body{font-size:.9375rem;color:rgba(232,241,255,.66);margin-top:auto}

/* ---------- process ---------- */
.rev-strip{border:1px solid var(--rule);display:grid}
@media(min-width:820px){.rev-strip{grid-template-columns:repeat(4,1fr)}}
.rev{padding:1.5rem 1.4rem 1.75rem;border-bottom:1px solid var(--rule);display:flex;flex-direction:column;gap:.65rem}
.rev:last-child{border-bottom:0}
@media(min-width:820px){
  .rev{border-bottom:0;border-right:1px solid var(--rule)}
  .rev:last-child{border-right:0}
}
.rev .no{font-family:var(--mono);font-size:.6875rem;letter-spacing:.14em;color:var(--oxide)}
.rev p{font-size:.9375rem;color:#4b545d}

/* ---------- area ---------- */
.area{background:var(--paper-2);border-top:1px solid var(--rule);border-bottom:1px solid var(--rule)}
.area-grid{display:grid;gap:clamp(2rem,4vw,3.5rem);align-items:center}
@media(min-width:900px){.area-grid{grid-template-columns:1fr 1fr}}
.radius{width:100%;height:auto;max-width:460px;margin-inline:auto}
.towns{display:flex;flex-wrap:wrap;gap:.4rem .5rem;margin-top:1.75rem}
.towns a{display:block;font-family:var(--mono);font-size:.6875rem;letter-spacing:.08em;text-transform:uppercase;border:1px solid var(--rule);padding:.35rem .6rem;color:var(--blue);text-decoration:none}
.towns a:hover{background:var(--blue);color:#fff;border-color:var(--blue)}

/* ---------- cta ---------- */
.cta-band{background:var(--oxide);color:#fff;border:0}
.cta-band .wrap{display:grid;gap:2rem;align-items:center}
@media(min-width:900px){.cta-band .wrap{grid-template-columns:1.3fr 1fr}}
.cta-band h2{font-size:clamp(2rem,1.2rem + 3.6vw,3.75rem)}
.cta-band p{color:rgba(255,255,255,.86);max-width:44ch;margin-top:1.1rem}
.cta-band .sec-label{color:rgba(255,255,255,.75)}
.cta-band__btn{margin-top:1.9rem}
.cta-list{display:flex;flex-direction:column;gap:.55rem}
.cta-list li{font-family:var(--mono);font-size:.75rem;letter-spacing:.09em;text-transform:uppercase;padding-left:1.4rem;position:relative;color:rgba(255,255,255,.92)}
.cta-list li::before{content:"";position:absolute;left:0;top:.42em;width:8px;height:8px;border:1.5px solid rgba(255,255,255,.9)}

/* ---------- single project ---------- */
.df-project__lead{position:relative;background:var(--mill)}
.df-project__lead img{width:100%;max-height:78vh;object-fit:cover}
.df-project__callout{position:absolute;left:1.25rem;bottom:1.25rem;color:var(--arc);background:rgba(43,49,56,.72);padding:.45rem .7rem;font-size:.625rem;backdrop-filter:blur(4px)}
.df-project__head{padding-block:clamp(2.5rem,5vw,4rem) 1.5rem}

.specblock{display:grid;grid-template-columns:repeat(2,1fr);border:1px solid var(--rule);margin-bottom:clamp(2rem,4vw,3rem)}
@media(min-width:700px){.specblock{grid-template-columns:repeat(3,1fr)}}
@media(min-width:1100px){.specblock{grid-template-columns:repeat(6,1fr)}}
.specblock > div{padding:.85rem .95rem;border-right:1px solid var(--rule);border-bottom:1px solid var(--rule)}
.specblock dt{font-size:.5625rem;letter-spacing:.16em;color:#6d767f}
.specblock dd{font-size:.8125rem;letter-spacing:.04em;margin-top:.3rem}

.df-project__body,.prose{max-width:70ch;font-size:1.0625rem}
.df-project__body p,.prose p{margin-bottom:1.2em}
.df-project__body h2,.prose h2{font-family:var(--display);font-stretch:80%;text-transform:uppercase;font-size:1.75rem;margin:2em 0 .6em;line-height:1.05}
.df-project__body h3,.prose h3{margin:1.8em 0 .5em}
.df-project__body ul,.prose ul{list-style:disc;padding-left:1.3em;margin-bottom:1.2em}
.df-project__body li,.prose li{margin-bottom:.4em}
.prose blockquote{border-left:3px solid var(--oxide);padding-left:1.2rem;margin:1.6em 0;color:#4b545d}

.df-project__gallery{display:grid;gap:1px;background:var(--rule);border:1px solid var(--rule);margin-top:clamp(2rem,4vw,3rem)}
@media(min-width:700px){.df-project__gallery{grid-template-columns:repeat(2,1fr)}}
.df-project__gallery img{width:100%;aspect-ratio:4/3;object-fit:cover}

/* ---------- pagination ---------- */
.pagination{margin-top:2.5rem;display:flex;justify-content:center}
.pagination .nav-links{display:flex;gap:.4rem;flex-wrap:wrap}
.pagination .page-numbers{
  font-family:var(--mono);font-size:.75rem;letter-spacing:.08em;
  border:1px solid var(--rule);padding:.5rem .8rem;text-decoration:none;color:var(--blue);
}
.pagination .page-numbers.current,.pagination .page-numbers:hover{background:var(--blue);color:#fff;border-color:var(--blue)}

.empty{color:#6d767f;font-family:var(--mono);font-size:.8125rem;letter-spacing:.08em;text-transform:uppercase;padding:3rem 0}

/* ---------- footer ---------- */
footer{background:var(--mill);color:var(--paper)}
footer .wrap{padding-block:clamp(2.5rem,5vw,4rem)}
.f-top{display:grid;gap:2.25rem;padding-bottom:2.5rem;border-bottom:1px solid rgba(232,241,255,.18)}
@media(min-width:760px){.f-top{grid-template-columns:1.4fr 1fr 1fr}}
.f-top h4{font-family:var(--mono);font-size:.6875rem;letter-spacing:.14em;text-transform:uppercase;color:var(--hazard);font-weight:500;margin-bottom:1rem}
.f-top ul{display:flex;flex-direction:column;gap:.5rem}
.f-top li{font-size:.9375rem}
.f-top a{color:var(--paper);text-decoration:none;font-size:.9375rem}
.f-top a:hover{color:var(--hazard)}
.f-top p{color:rgba(232,241,255,.66);font-size:.9375rem;max-width:38ch}

.titleblock{margin-top:2.5rem;border:1px solid rgba(232,241,255,.3);display:grid;grid-template-columns:repeat(2,1fr)}
@media(min-width:720px){.titleblock{grid-template-columns:repeat(3,1fr)}}
@media(min-width:1040px){.titleblock{grid-template-columns:repeat(6,1fr)}}
.tb{padding:.85rem .95rem;border-right:1px solid rgba(232,241,255,.3);border-bottom:1px solid rgba(232,241,255,.3)}
.tb:nth-child(2n){border-right:0}
@media(min-width:720px){
  .tb,.tb:nth-child(2n){border-right:1px solid rgba(232,241,255,.3)}
  .tb:nth-child(3n){border-right:0}
}
@media(min-width:1040px){
  .tb:nth-child(3n){border-right:1px solid rgba(232,241,255,.3)}
  .tb:nth-child(6n){border-right:0}
  .tb{border-bottom:0}
}
.tb .k{font-family:var(--mono);font-size:.5625rem;letter-spacing:.16em;text-transform:uppercase;color:rgba(232,241,255,.5)}
.tb .v{font-family:var(--mono);font-size:.8125rem;letter-spacing:.05em;color:var(--paper);margin-top:.3rem}

.legal{margin-top:1.75rem;display:flex;flex-wrap:wrap;gap:.5rem 1.5rem;justify-content:space-between;color:rgba(232,241,255,.5);font-size:.6875rem}

/* ---------- motion ---------- */
.reveal .draw{stroke-dasharray:var(--len,300);stroke-dashoffset:var(--len,300);transition:stroke-dashoffset 1.1s cubic-bezier(.33,1,.68,1)}
.reveal.in .draw{stroke-dashoffset:0}

@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}
  .reveal .draw{stroke-dashoffset:0!important}
  .leader .lead-line{stroke-dashoffset:0}
}

/* Portal inherits the ground but drops the sheet rules. */
.is-portal .gfj-portal{background:var(--paper)}
