.recovery-contact-form{display:grid;gap:1rem;padding:1.5rem;border:1px solid #d6e0e5;border-radius:.5rem;background:#fff}.recovery-field{display:grid;gap:.4rem}.recovery-field label{font-weight:600;color:#0d4d68}.recovery-field label span{font-weight:400}.recovery-field input,.recovery-field textarea{width:100%;padding:.75rem;border:1px solid #b9c8d0;border-radius:.25rem;font:inherit}.recovery-contact-form button{width:max-content;padding:.75rem 1.25rem;border:0;border-radius:.25rem;background:#0d4d68;color:#fff;font-weight:700;cursor:pointer}.recovery-contact-form button:hover{background:#083a51}.recovery-form-status{min-height:1.5rem;margin:0;color:#0d4d68}@media (max-width:768px){.recovery-contact-form{padding:1rem}}

/* Recovery: the "May special" promo banner was removed, so its reserved height is 0.
   The header (top:var(--banner-h,42px)) and main (padding-top:calc(var(--banner-h,42px)+128px))
   both key off this variable, so setting it to 0 seats the header flush at the top and keeps
   the exact 128px content clearance. */
:root{--banner-h:0px}

/* Recovery: desktop nav dropdown (Services / About). On the live React site these panels were
   rendered on hover; the static capture lost them, so site.js rebuilds them and these styles
   present them. */
.recovery-dropdown{position:absolute;top:100%;left:0;min-width:232px;background:#fff;border-radius:.85rem;box-shadow:0 14px 40px rgba(13,77,104,.18);padding:.45rem 0;opacity:0;visibility:hidden;transform:translateY(4px);transition:opacity .16s ease,transform .16s ease,visibility .16s ease;z-index:60}
.recovery-dropdown.recovery-dropdown--right{left:auto;right:0}
.recovery-dropdown.open{opacity:1;visibility:visible;transform:translateY(0)}
.recovery-dropdown a{display:block;padding:.55rem 1.15rem;font-size:.82rem;line-height:1.2;font-weight:600;letter-spacing:.01em;color:#0d4d68;white-space:nowrap;text-decoration:none;text-transform:none}
.recovery-dropdown a:hover,.recovery-dropdown a:focus{background:#f4f7f8;color:#0d4d68}

/* Recovery: blog listing cards. The capture froze the blog index in its loading state (grey
   animate-pulse skeletons) because the article list was fetched from the CMS. These cards restore
   the three published articles as static, crawlable HTML. */
.recovery-blog-card{display:flex;flex-direction:column;background:#fff;border:1px solid #f3f4f6;border-radius:1rem;overflow:hidden;box-shadow:0 1px 3px rgba(13,77,104,.06);text-decoration:none;transition:box-shadow .25s ease,transform .25s ease}
.recovery-blog-card:hover{box-shadow:0 16px 40px rgba(13,77,104,.16);transform:translateY(-4px)}
.recovery-blog-card__img{aspect-ratio:16/9;overflow:hidden;background:#e5e7eb}
.recovery-blog-card__img img{width:100%;height:100%;object-fit:cover;transition:transform .35s ease}
.recovery-blog-card:hover .recovery-blog-card__img img{transform:scale(1.05)}
.recovery-blog-card__body{padding:1.5rem;display:flex;flex-direction:column;gap:.55rem}
.recovery-blog-card__meta{font-size:.72rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#c8981f}
.recovery-blog-card__title{font-family:"Cormorant Garamond",Georgia,serif;font-weight:600;font-size:1.5rem;line-height:1.2;color:#0d4d68;margin:0}
.recovery-blog-card__excerpt{font-size:.9rem;line-height:1.55;color:#4b5563;margin:0}
.recovery-blog-card__more{font-size:.85rem;font-weight:700;color:#0d4d68;margin-top:.25rem}
