.loading-spinner{display:flex;justify-content:center;align-items:center}.spinner{border:2px solid #f3f3f3;border-top-color:#4599af;border-radius:50%;animation:spin 1s linear infinite}.spinner-sm .spinner{width:16px;height:16px;border-width:2px}.spinner-md .spinner{width:24px;height:24px;border-width:2px}.spinner-lg .spinner{width:32px;height:32px;border-width:3px}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.message-alert{padding:12px 16px;border-radius:8px;margin-bottom:16px;border:1px solid transparent;animation:slideIn .3s ease-out}.alert-content{display:flex;align-items:center;gap:8px}.alert-icon{flex-shrink:0;font-size:1.1rem}.alert-text{flex:1 1;font-size:.95rem;line-height:1.4}.alert-close{background:none;border:none;padding:4px;cursor:pointer;color:inherit;opacity:.7;transition:opacity .2s;flex-shrink:0}.alert-close:hover{opacity:1}.alert-close i{font-size:1.2rem}.alert-success{background-color:#d4edda;border-color:#c3e6cb;color:#155724}.alert-success .alert-icon{color:#28a745}.alert-error{background-color:#f8d7da;border-color:#f5c6cb;color:#721c24}.alert-error .alert-icon{color:#dc3545}.alert-info{background-color:#d1ecf1;border-color:#bee5eb;color:#0c5460}.alert-info .alert-icon{color:#17a2b8}@keyframes slideIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.contact-form{position:relative}.form-group{margin-bottom:1.5rem}.form-label{display:block;margin-bottom:.5rem;font-weight:500;color:#333;font-size:.95rem}.form-control{width:100%;padding:12px 16px;border:2px solid #e9ecef;border-radius:8px;font-size:1rem;transition:border-color .2s,box-shadow .2s;background-color:#fff}.form-control:focus{outline:none;border-color:#4599af;box-shadow:0 0 0 3px rgba(69,153,175,.1)}.form-control.is-invalid{border-color:#dc3545}.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 3px rgba(220,53,69,.1)}.invalid-feedback{display:block;margin-top:.25rem;font-size:.875rem;color:#dc3545}.submit-button{position:relative;min-width:140px}.submit-button:disabled{opacity:.6;cursor:not-allowed}.button-content{display:flex;align-items:center;justify-content:center;gap:8px}.character-counter{font-size:.75rem;color:#6c757d;text-align:right;margin-top:.25rem}.character-counter.over-limit{color:#dc3545}@media (max-width:768px){.message-alert{padding:10px 12px}.alert-text{font-size:.9rem}.form-control{padding:10px 14px;font-size:.95rem}}