.async-form { position: relative; }
.async-form-overlay { position: absolute; inset: 0; z-index: 20; display: flex; align-items: center; justify-content: center; padding: 24px; background: rgba(255,255,255,.88); border-radius: inherit; opacity: 0; visibility: hidden; transition: opacity .2s ease; text-align: center; }
.async-form.is-loading .async-form-overlay,
.async-form.is-success .async-form-overlay,
.async-form.is-error .async-form-overlay { opacity: 1; visibility: visible; }
.async-form-state { color: #17324d; font-size: 16px; font-weight: 600; }
.async-form-spinner { display: none; width: 48px; height: 48px; margin: 0 auto 14px; border: 4px solid #dce6ee; border-top-color: #1677c8; border-radius: 50%; animation: async-form-spin .75s linear infinite; }
.async-form.is-loading .async-form-spinner { display: block; }
.async-form-check { display: none; width: 54px; height: 54px; margin: 0 auto 14px; border-radius: 50%; background: #20a464; color: #fff; font-size: 36px; line-height: 54px; animation: async-form-pop .3s ease-out; }
.async-form.is-success .async-form-check { display: block; }
.async-form.is-error .async-form-state { color: #b42318; }
@keyframes async-form-spin { to { transform: rotate(360deg); } }
@keyframes async-form-pop { from { transform: scale(.65); opacity: 0; } to { transform: scale(1); opacity: 1; } }
