/* contact.css  –  only contact-page specifics
   --------------------------------------------------------- */

.contact-hero{
  text-align:center;
  padding:clamp(2rem,6vw,3rem) 4vw 1rem;
  max-width:800px; margin:0 auto;
}

.contact-hero h1{
  font-size:clamp(1.8rem,4.5vw,2.5rem);
  margin:0 0 .5rem;
}

.contact-form{
  max-width:840px;
  margin:0 auto;
  padding:clamp(1.5rem,5vw,2.5rem) 4vw 3rem;
}

#quote-form{
  display:grid;
  grid-template-columns:repeat(2,1fr);
  gap:1.25rem 2rem;
}

/* full-width items */
.span-2{ grid-column:1 / -1; }

.field{
  display:flex;
  flex-direction:column;
  gap:.35rem;
}

label{ font-weight:600; color:#283618; }

input, select, textarea{
  font:inherit;
  padding:.6rem .8rem;
  border:1px solid rgba(0,0,0,.25);
  border-radius:8px;
  background:#fafafa;
  transition:border-color .2s;
}
input:focus,
select:focus,
textarea:focus{
  outline:none;
  border-color:#b89759;
}

button{
  align-self:start;
  background:#283618;
  color:#fff;
  padding:.75rem 1.75rem;
  border:none;
  border-radius:8px;
  font-size:1rem;
  font-weight:600;
  cursor:pointer;
  transition:background .25s;
}
button:hover{ background:#4a5d32; }

/* stack on phones */
@media(max-width:600px){
  #quote-form{ grid-template-columns:1fr; }
}

/* ─────  keyframes  ───────────────────────────────────────────── */
@keyframes fadeUp {
  0%   { opacity:0; transform:translateY(20px); }
  100% { opacity:1; transform:translateY(0);    }
}
@keyframes ripple {
  0%   { transform:scale(1);   }
  50%  { transform:scale(1.05);}
  100% { transform:scale(1);   }
}
@keyframes shake {
  0%,100% { transform:translateX(0); }
  25%     { transform:translateX(-6px); }
  75%     { transform:translateX( 6px); }
}

/* ─────  initial hidden state  ───────────────────────────────── */
#quote-form .field,
#quote-form .span-2:not(.field) {      /* catch the full-width btn wrapper */
  opacity:0;
  transform:translateY(20px);
}

/* ─────  revealed state – added by JS  ───────────────────────── */
#quote-form .show {
  animation:fadeUp .6s cubic-bezier(.25,.8,.25,1) forwards;
}

/*  button ripple on :active  */
button:active { animation:ripple .35s ease-out; }

/*  shake on invalid after submit   */
input:invalid.shake,
select:invalid.shake,
textarea:invalid.shake { animation:shake .35s linear; }

.hp,
.hp + input[name="website"]{
  position:absolute !important;
  left:-9999px;
  width:1px; height:1px;
  overflow:hidden;
}
