.fade-in { animation: fadeInUp 0.4s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
@keyframes fadeInUp { from { opacity: 0; transform: translateY(15px); } to { opacity: 1; transform: translateY(0); } }
.pop-in { animation: popIn 0.3s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
@keyframes popIn { 0% { opacity: 0; transform: scale(0.95) translateY(10px); } 100% { opacity: 1; transform: scale(1) translateY(0); } }
.no-scrollbar::-webkit-scrollbar { display: none; }
.no-scrollbar { -ms-overflow-style: none; scrollbar-width: none; }
.pb-safe { padding-bottom: env(safe-area-inset-bottom); }

/* SweetAlert2 自定義圓角 */
div:where(.swal2-container) div:where(.swal2-popup) { border-radius: 1.5rem !important; }

@media (max-width: 767px) {
  .mobile-card-table thead { display: none; }
  .mobile-card-table tbody tr { display: block; margin-bottom: 1rem; background: #fff; border: 1px solid #e2e8f0; border-radius: 1.5rem; padding: 1.25rem; box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05), 0 8px 10px -6px rgba(0, 0, 0, 0.01); }
  .mobile-card-table tbody td { display: flex; justify-content: space-between; align-items: center; padding: 0.875rem 0; border-bottom: 1px dashed #f1f5f9; text-align: right; font-size: 0.95rem; }
  .mobile-card-table tbody td:last-child { border-bottom: none; padding-bottom: 0; }
  .mobile-card-table tbody td::before { content: attr(data-label); font-weight: 800; color: #94a3b8; font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.05em; text-align: left; margin-right: 1rem; flex-shrink: 0; }
  .mobile-card-table tbody td.action-cell { flex-direction: column; align-items: stretch; gap: 0.75rem; padding-top: 1.25rem; margin-top: 0.5rem; border-top: 1px solid #e2e8f0; }
  .mobile-card-table tbody td.action-cell::before { display: none; }
  .mobile-card-table tbody td.action-cell div { display: flex; width: 100%; gap: 0.5rem; }
  .mobile-card-table tbody td.action-cell button { flex: 1; padding: 0.6rem 0; }
}