/* Shared bits for the three contact options' estimate forms (errors, honeypot, busy button). */
.hp { position: absolute !important; left: -9999px !important; width: 1px; height: 1px; overflow: hidden; }
.ferr { margin: .45rem 0 0; font-size: .84rem; font-weight: 600; line-height: 1.35; color: var(--red-deep); display: flex; gap: .45rem; align-items: flex-start; }
.ferr:empty { display: none; }
.ferr::before { content: "!"; flex: none; display: grid; place-items: center; width: 17px; height: 17px; margin-top: 1px; border-radius: 50%; background: var(--red); color: #fff; font: 800 .7rem/1 var(--f-sans); }
.ferr--form { margin-top: 1rem; padding: .8rem 1rem; border-radius: 12px; background: var(--red-soft); }
.ferr--form a { text-decoration: underline; white-space: nowrap; }
.on-dark .ferr { color: #ff7a75; }
.has-err input, .has-err select, .has-err textarea { border-color: var(--red) !important; box-shadow: 0 0 0 4px rgba(225, 6, 0, .1) !important; }
.shake { animation: fshake .5s var(--e-out); }
@keyframes fshake { 20% { transform: translateX(-7px); } 40% { transform: translateX(6px); } 60% { transform: translateX(-4px); } 80% { transform: translateX(2px); } }
button.is-busy { pointer-events: none; opacity: .85; }
button.is-busy::after { content: ""; width: 16px; height: 16px; border-radius: 50%; border: 2px solid currentColor; border-right-color: transparent; animation: fspin .7s linear infinite; }
@keyframes fspin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .shake { animation: none; } }
