/* ===========================================================================
   Components — shop-manual language.

   Rules, not boxes. Monospace metadata, not decorative labels. Photographs as
   captioned plates. No shadows, no radii, no hover-lifts: hover inverts or
   changes rule weight, the way ink on paper would.

   Every `img` rule is prefixed `body .elementor` on purpose: Elementor's
   frontend reset `.elementor img{height:auto;border-radius:0;box-shadow:none}`
   ties equal-specificity theme rules and wins on load order, so unprefixed
   rules work locally and silently fail on the live site.

   Every grid declares its own stacking. Elementor stacks columns at 767, but
   a grid inside one HTML widget has to stack itself.
   =========================================================================== */

/* -------------------------------------------------------- proof bar */

body .elementor .sec-proof{
  background-color:var(--ink);
  background-image:var(--drafting),var(--grain);
  background-size:var(--drafting-size),160px 160px;
}
.proof{
  display:grid;
  grid-template-columns:repeat(4,1fr);
  list-style:none;
  margin:0;
  padding:0;
  counter-reset:proof;
  border-top:var(--rule-bold) solid var(--red);
}
.proof-item{
  counter-increment:proof;
  position:relative;
  padding:clamp(1.5rem,1.1rem + 1.2vw,2.25rem) clamp(1.1rem,.7rem + 1.4vw,2rem)
          clamp(1.5rem,1.1rem + 1.2vw,2.25rem) 0;
}
.proof-item + .proof-item{
  border-left:var(--hairline) solid var(--rule-dark-soft);
  padding-left:clamp(1.1rem,.7rem + 1.4vw,2rem);
}
.proof-item::before{
  content:counter(proof,decimal-leading-zero);
  display:block;
  font-family:var(--font-mono);
  font-size:var(--fs-meta);
  font-weight:500;
  letter-spacing:var(--tr-meta);
  color:var(--red-bright);
  margin-bottom:.9rem;
}
.proof-key{
  display:block;
  font-family:var(--font-display);
  font-size:clamp(1.45rem,1.15rem + 1vw,2.1rem);
  font-weight:800;
  text-transform:uppercase;
  letter-spacing:-.01em;
  line-height:.95;
  color:var(--on-ink);
  margin-bottom:.5rem;
}
.proof-val{display:block;font-size:.875rem;line-height:1.55;color:var(--on-ink-2)}
@media (max-width:900px){
  .proof{grid-template-columns:repeat(2,1fr)}
  .proof-item:nth-child(odd){border-left:0;padding-left:0}
  .proof-item:nth-child(n+3){border-top:var(--hairline) solid var(--rule-dark-soft)}
}
@media (max-width:460px){
  .proof{grid-template-columns:1fr}
  .proof-item{border-left:0;padding-left:0}
  .proof-item + .proof-item{border-top:var(--hairline) solid var(--rule-dark-soft);border-left:0;padding-left:0}
}

/* --------------------------------------------------------- services */

.svc-grid{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:clamp(1.5rem,.8rem + 2.2vw,3rem);
}
.svc{display:flex;flex-direction:column}
.svc-plate{
  position:relative;display:block;overflow:hidden;
  aspect-ratio:4/5;background:var(--ink-2);
  margin-bottom:1.1rem;
}
body .elementor .svc-plate img{
  width:100%;height:100%;object-fit:cover;display:block;
  filter:grayscale(.42) contrast(1.06);
  transition:filter .45s var(--ease);
}
.svc:hover .svc-plate img{filter:grayscale(0) contrast(1)}
.svc-idx{
  position:absolute;left:0;bottom:0;z-index:2;
  background:var(--red);color:#fff;
  font-family:var(--font-mono);font-size:.74rem;font-weight:600;
  letter-spacing:.1em;line-height:1;
  padding:.65rem .8rem;
}
.svc-title{
  font-family:var(--font-display);
  font-size:clamp(1.5rem,1.25rem + .9vw,2rem);
  font-weight:800;text-transform:uppercase;letter-spacing:-.01em;line-height:.95;
  margin:0 0 .65rem;
  padding-top:.9rem;
  border-top:var(--rule-heavy) solid var(--ink);
}
.svc-title a{color:var(--text);text-decoration:none}
.svc-title a:hover{color:var(--red)}
.svc-lede{font-size:.94rem;color:var(--text-2);margin:0 0 1.15rem;line-height:1.62}
.svc-list{list-style:none;margin:0 0 1.1rem;padding:0}
.svc-list li{
  font-size:.86rem;color:var(--text-2);line-height:1.4;
  padding:.5rem 0;
  border-top:var(--hairline) solid var(--rule);
}
.svc-more{
  margin-top:auto;
  font-family:var(--font-mono);font-size:var(--fs-meta);font-weight:600;
  letter-spacing:var(--tr-meta);text-transform:uppercase;color:var(--red);
  display:inline-flex;align-items:center;gap:.5rem;
}
.svc-more::after{content:"\2192";transition:transform .2s var(--ease)}
.svc:hover .svc-more::after{transform:translateX(4px)}
@media (max-width:1024px){.svc-grid{grid-template-columns:repeat(2,1fr)}}
@media (max-width:700px){.svc-grid{grid-template-columns:1fr}}

/* ------------------------------------------------------ capability */

.cap-rail{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(1.5rem,1rem + 2vw,3rem)}
.cap-col{min-width:0}
.cap-title{
  font-family:var(--font-mono);
  font-size:var(--fs-meta);font-weight:600;
  letter-spacing:var(--tr-meta);text-transform:uppercase;
  color:var(--on-ink);
  margin:0 0 .25rem;padding-bottom:.9rem;
  border-bottom:var(--rule-heavy) solid var(--red);
}
.cap-list{list-style:none;margin:0;padding:0}
.cap-list li{
  font-size:.95rem;line-height:1.45;color:var(--on-ink-2);
  padding:.72rem 0;
  border-bottom:var(--hairline) solid var(--rule-dark-soft);
}
@media (max-width:900px){.cap-rail{grid-template-columns:1fr}}

/* ----------------------------------------------------------- process */

.steps{
  display:grid;grid-template-columns:repeat(4,1fr);
  gap:0;
  list-style:none;margin:0;padding:0;
  border-top:var(--rule-heavy) solid var(--ink);
}
.step{
  padding:1.6rem clamp(1rem,.6rem + 1.4vw,2rem) 0 0;
  position:relative;
}
.step + .step{
  border-left:var(--hairline) solid var(--rule);
  padding-left:clamp(1rem,.6rem + 1.4vw,2rem);
}
.step-num{
  display:block;
  font-family:var(--font-display);
  font-size:clamp(2.75rem,2rem + 2.4vw,4.25rem);
  font-weight:800;line-height:.8;letter-spacing:-.03em;
  /* Outlined numerals — but fail open: without text-stroke support the
     number would be invisible, so colour it first and only go transparent
     where the stroke will actually draw. */
  color:var(--paper-3);
  margin-bottom:1rem;
}
@supports (-webkit-text-stroke:1px #000){
  .step-num{color:transparent;-webkit-text-stroke:1.5px var(--rule)}
}
.step-title{
  font-family:var(--font-display);
  font-size:clamp(1.2rem,1.05rem + .5vw,1.5rem);
  font-weight:800;text-transform:uppercase;letter-spacing:-.005em;line-height:1;
  margin:0 0 .6rem;
}
.step-text{font-size:.92rem;color:var(--text-2);margin:0;line-height:1.6}
@media (max-width:1024px){
  .steps{grid-template-columns:repeat(2,1fr)}
  .step:nth-child(odd){border-left:0;padding-left:0}
  .step:nth-child(n+3){margin-top:1.6rem;border-top:var(--hairline) solid var(--rule)}
}
@media (max-width:560px){
  .steps{grid-template-columns:1fr}
  .step{border-left:0;padding-left:0}
  .step + .step{border-left:0;padding-left:0;margin-top:1.6rem;
    border-top:var(--hairline) solid var(--rule)}
}

/* --------------------------------------------------------------- why */

.why{
  display:grid;grid-template-columns:repeat(2,1fr);
  gap:0 clamp(1.5rem,1rem + 2.4vw,3.5rem);
  list-style:none;margin:0;padding:0;counter-reset:why;
}
.why-item{
  counter-increment:why;
  padding:1.5rem 0;
  border-top:var(--hairline) solid var(--rule-dark);
}
.why-item:nth-child(-n+2){border-top:var(--rule-heavy) solid var(--red)}
.why-title{
  font-family:var(--font-display);
  font-size:clamp(1.3rem,1.1rem + .7vw,1.7rem);
  font-weight:800;text-transform:uppercase;letter-spacing:-.005em;line-height:1;
  color:var(--on-ink);margin:0 0 .7rem;
}
.why-title::before{
  content:counter(why,decimal-leading-zero);
  font-family:var(--font-mono);font-size:var(--fs-meta);font-weight:500;
  letter-spacing:var(--tr-meta);color:var(--red-bright);
  display:block;margin-bottom:.55rem;
}
.why-text{color:var(--on-ink-2);margin:0;font-size:.95rem;line-height:1.66;max-width:46ch}
@media (max-width:760px){
  .why{grid-template-columns:1fr}
  .why-item:nth-child(2){border-top:var(--hairline) solid var(--rule-dark)}
}

/* ------------------------------------------------------------- tiles */

.tiles{
  display:grid;grid-template-columns:repeat(3,1fr);
  gap:0 clamp(1.5rem,1rem + 2.2vw,3rem);
  list-style:none;margin:0;padding:0;counter-reset:tile;
}
.tile{
  counter-increment:tile;
  padding:1.35rem 0;
  border-top:var(--hairline) solid var(--rule);
}
.tile:nth-child(-n+3){border-top:var(--rule-heavy) solid var(--ink)}
.tile-title{
  font-family:var(--font-display);
  font-size:clamp(1.15rem,1.05rem + .45vw,1.45rem);
  font-weight:800;text-transform:uppercase;letter-spacing:-.005em;line-height:1;
  margin:0 0 .55rem;
}
.tile-title::before{
  content:counter(tile,decimal-leading-zero);
  font-family:var(--font-mono);font-size:var(--fs-meta);font-weight:500;
  letter-spacing:var(--tr-meta);color:var(--red);
  display:block;margin-bottom:.5rem;
}
.tile-text{font-size:.92rem;color:var(--text-2);margin:0;line-height:1.62;max-width:44ch}
@media (max-width:1024px){
  .tiles{grid-template-columns:repeat(2,1fr)}
  .tile:nth-child(3){border-top:var(--hairline) solid var(--rule)}
}
@media (max-width:640px){
  .tiles{grid-template-columns:1fr}
  .tile:nth-child(-n+3){border-top:var(--hairline) solid var(--rule)}
  .tile:first-child{border-top:var(--rule-heavy) solid var(--ink)}
}

/* ------------------------------------------------------------ values */

.vals{
  display:grid;grid-template-columns:repeat(4,1fr);
  gap:0 clamp(1.25rem,.8rem + 2vw,2.5rem);
  list-style:none;margin:0;padding:0;
}
.val{padding:1.35rem 0;border-top:var(--rule-heavy) solid var(--ink)}
.val-title{
  font-family:var(--font-display);
  font-size:clamp(1.1rem,1rem + .4vw,1.35rem);
  font-weight:800;text-transform:uppercase;line-height:1;letter-spacing:-.005em;
  margin:0 0 .5rem;color:var(--text);
}
.val-text{font-size:.9rem;color:var(--text-2);margin:0;line-height:1.6}
@media (max-width:1024px){.vals{grid-template-columns:repeat(2,1fr)}}
@media (max-width:560px){.vals{grid-template-columns:1fr}}

/* ----------------------------------------------------------- gallery */

.gal{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(1.25rem,.8rem + 1.8vw,2.5rem)}
.gal-item{margin:0;display:flex;flex-direction:column}
.gal-plate{overflow:hidden;background:var(--ink-2);aspect-ratio:4/5}
body .elementor .gal-plate img{
  width:100%;height:100%;object-fit:cover;display:block;
  filter:grayscale(.4) contrast(1.05);
  transition:filter .45s var(--ease),transform .7s var(--ease);
}
.gal-item:hover .gal-plate img{filter:grayscale(0) contrast(1);transform:scale(1.03)}
/* Caption BELOW the plate, set like a figure reference — nothing depends on
   hover, which a touch screen does not have. */
.gal-cap{
  display:flex;flex-direction:column;gap:.3rem;
  padding-top:.85rem;margin-top:.85rem;
  border-top:var(--hairline) solid var(--rule);
}
.gal-ref{
  font-family:var(--font-mono);font-size:var(--fs-meta);font-weight:600;
  letter-spacing:var(--tr-meta);text-transform:uppercase;color:var(--red);
}
.gal-title{
  font-family:var(--font-display);
  font-size:clamp(1.15rem,1.05rem + .45vw,1.4rem);
  font-weight:800;text-transform:uppercase;letter-spacing:-.005em;line-height:1;
  color:var(--text);
}
.gal-desc{font-size:.875rem;line-height:1.5;color:var(--text-2)}
@media (max-width:900px){.gal{grid-template-columns:repeat(2,1fr)}}
@media (max-width:520px){.gal{grid-template-columns:1fr}}

/* ------------------------------------------------------------- plate */

.plate{margin:0;position:relative}
.plate-img{overflow:hidden;background:var(--ink-2);aspect-ratio:4/5}
body .elementor .plate-img img{
  width:100%;height:100%;object-fit:cover;display:block;
  filter:grayscale(.3) contrast(1.05);
}
.plate-cap{
  display:flex;align-items:baseline;gap:.9rem;
  padding-top:.8rem;margin-top:.8rem;
  border-top:var(--hairline) solid var(--rule);
}
.plate-ref{
  font-family:var(--font-mono);font-size:var(--fs-meta);font-weight:600;
  letter-spacing:var(--tr-meta);text-transform:uppercase;color:var(--red);flex:none;
}
.plate-txt{font-size:.85rem;color:var(--text-2);line-height:1.45}
.plate-note{
  position:absolute;right:0;top:0;z-index:3;
  background:var(--red);color:#fff;
  padding:.9rem 1.1rem;max-width:12rem;
}
.plate-note strong{
  display:block;font-family:var(--font-display);
  font-size:1.35rem;font-weight:800;text-transform:uppercase;
  line-height:.95;letter-spacing:-.01em;
}
.plate-note span{display:block;font-size:.78rem;line-height:1.35;margin-top:.3rem;color:#F6DEDD}
.plate-inset{
  position:absolute;left:0;bottom:4.25rem;z-index:2;
  width:46%;background:var(--paper);
  padding:6px 6px 0;
}
.plate-inset img{display:block;width:100%;aspect-ratio:3/2;object-fit:cover}
.plate-ref-b{display:block;padding:.45rem 0 .5rem}
@media (max-width:1024px){
  .plate{max-width:580px}
  .plate-img{aspect-ratio:4/3}
}
@media (max-width:520px){
  .plate-inset{width:54%;bottom:5rem}
  .plate-note{padding:.7rem .85rem;max-width:9.5rem}
  .plate-note strong{font-size:1.1rem}
}

/* --------------------------------------------------------- hero card */

.hcard{
  background:rgba(14,16,20,.88);
  -webkit-backdrop-filter:blur(2px);
  backdrop-filter:blur(2px);
  border:var(--hairline) solid var(--rule-dark);
  border-top:var(--rule-bold) solid var(--red);
  padding:clamp(1.3rem,1rem + 1.2vw,1.9rem);
}
.hcard-k{
  font-family:var(--font-mono);font-size:var(--fs-meta);font-weight:600;
  letter-spacing:var(--tr-meta);text-transform:uppercase;
  color:var(--on-ink-3);margin:0 0 .8rem;
}
.hcard-tel{
  display:block;
  font-family:var(--font-display);font-weight:800;
  font-size:clamp(2.1rem,1.5rem + 1.9vw,3rem);
  line-height:.9;letter-spacing:-.02em;color:var(--on-ink);text-decoration:none;
  transition:color .18s var(--ease);
}
.hcard-tel:hover{color:var(--red-bright)}
.hcard-note{margin:.8rem 0 1.15rem;font-size:.875rem;line-height:1.5;color:var(--on-ink-2)}
.hcard-rows{display:block;border-top:var(--hairline) solid var(--rule-dark)}
.hcard-row{
  display:grid;grid-template-columns:4.25rem 1fr;gap:.9rem;align-items:baseline;
  padding:.65rem 0;text-decoration:none;
  border-bottom:var(--hairline) solid var(--rule-dark-soft);
}
.hcard-row:last-child{border-bottom:0}
.hcard-row-k{
  font-family:var(--font-mono);font-size:var(--fs-meta);font-weight:500;
  letter-spacing:var(--tr-meta);text-transform:uppercase;color:var(--on-ink-3);
}
.hcard-row-v{font-size:.875rem;color:var(--on-ink);line-height:1.45;word-break:break-word}
a.hcard-row:hover .hcard-row-v{color:var(--red-bright)}
@media (max-width:480px){
  .hcard-row{grid-template-columns:1fr;gap:.15rem}
}

/* ----------------------------------------------------- contact bits */

.ccards{list-style:none;margin:0;padding:0;border-top:var(--rule-heavy) solid var(--ink)}
.ccard{
  display:grid;gap:.25rem;
  padding:1.2rem 0;
  border-bottom:var(--hairline) solid var(--rule);
}
.ccard-k{
  font-family:var(--font-mono);font-size:var(--fs-meta);font-weight:600;
  letter-spacing:var(--tr-meta);text-transform:uppercase;color:var(--text-3);
}
.ccard-v{
  font-family:var(--font-display);
  font-size:clamp(1.6rem,1.3rem + 1.1vw,2.2rem);
  font-weight:800;text-transform:uppercase;line-height:.95;letter-spacing:-.015em;
  color:var(--text);word-break:break-word;text-decoration:none;
}
a.ccard-v:hover{color:var(--red)}
/* Email addresses stay in the body face at sentence case: an address set in
   display caps is both uglier and measurably harder to read back. */
.ccard-v-mail{
  font-family:var(--font-body);text-transform:none;
  font-size:1.02rem;font-weight:600;letter-spacing:0;line-height:1.45;
}
.ccard-note{font-size:.86rem;color:var(--text-2);line-height:1.5;margin-top:.15rem}

.chips{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:0}
.chip{
  font-family:var(--font-mono);font-size:var(--fs-meta);font-weight:500;
  letter-spacing:var(--tr-meta);text-transform:uppercase;color:var(--text-2);
  padding:.7rem 1.1rem .7rem 0;margin-right:1.1rem;
  border-top:var(--hairline) solid var(--rule);
  flex:1 1 auto;min-width:9.5rem;
}

.form-head{display:grid;gap:.45rem}
.form-title{
  font-family:var(--font-display);
  font-size:clamp(1.5rem,1.3rem + .8vw,1.9rem);
  font-weight:800;text-transform:uppercase;line-height:.98;letter-spacing:-.01em;
  color:var(--on-ink);margin:0;
}
.form-note{margin:0;font-size:.9rem;color:var(--on-ink-2);line-height:1.55}

/* ---------------------------------------------------------- CTA band */

body .elementor .sec-cta{
  background-color:var(--ink);
  background-image:var(--drafting),var(--grain);
  background-size:var(--drafting-size),160px 160px;
  color:var(--on-ink);
  padding-block:0;
  border-top:var(--rule-bold) solid var(--red);
}
body .elementor .sec-cta > .elementor-container{padding-inline:0;max-width:none}
body .elementor .sec-cta .elementor-column > .elementor-widget-wrap{padding:0}
body .elementor .sec-cta .elementor-widget:not(:last-child){margin-bottom:0}
.cta-panel{
  display:grid;
  grid-template-columns:1.4fr 1fr;
  gap:clamp(2rem,1rem + 3.5vw,5rem);
  align-items:end;
  width:100%;max-width:var(--container);
  margin-inline:auto;
  padding:clamp(3.25rem,2rem + 4vw,5.5rem) var(--gutter);
}
.cta-head{
  font-family:var(--font-display);
  font-size:var(--fs-h2);font-weight:800;text-transform:uppercase;
  line-height:.88;letter-spacing:-.02em;
  color:var(--on-ink);margin:0 0 1rem;max-width:14ch;
}
.cta-text{margin:0;color:var(--on-ink-2);font-size:var(--fs-lede);max-width:44ch;line-height:1.6}
.cta-act{display:flex;flex-direction:column;align-items:stretch;gap:.6rem}
.cta-act .btn{width:100%}
.cta-note{
  margin:.6rem 0 0;font-family:var(--font-mono);font-size:var(--fs-meta);
  letter-spacing:.08em;text-transform:uppercase;color:var(--on-ink-3);line-height:1.6;
}
.sec-cta .btn-ghost,
.callbar .btn-ghost{color:var(--on-ink);border-color:var(--rule-dark);background:transparent}
.sec-cta .btn-ghost:hover,
.callbar .btn-ghost:hover{background:var(--on-ink);border-color:var(--on-ink);color:var(--ink)}
@media (max-width:860px){
  .cta-panel{grid-template-columns:1fr;gap:2rem;align-items:start}
  .cta-head{max-width:none}
}

/* The contact page's form column: the card is the form widget itself, so the
   column only has to stop its content stretching on very wide screens. */
body .elementor .contact-form > .elementor-widget-wrap{align-content:start}
body .elementor .contact-form .elementor-widget:not(:last-child){margin-bottom:0}

/* The CTA band's copy half. Kept as its own block so the heading and the
   supporting line stay bottom-aligned with the controls beside them. */
.cta-copy{min-width:0;align-self:end}
