@keyframes fadeIn { from{opacity:0} to{opacity:1} }
@keyframes slideUp { from{transform:translateY(10px);opacity:0} to{transform:translateY(0);opacity:1} }

#loadingPopup { transition: opacity .5s ease, visibility .5s ease; }
#loadingPopup.hidden { opacity:0; visibility:hidden; }

.stat-card { transition: transform .2s ease, box-shadow .2s ease; }
.stat-card:hover { transform: translateY(-2px); box-shadow: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -2px rgba(0,0,0,.05); }

.gradient-bg { background: linear-gradient(135deg,#0ea5e9 0%, #7c3aed 100%); }

.skeleton {
  background: linear-gradient(90deg,#f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size:200% 100%;
  animation: loading 1.5s infinite;
}
@keyframes loading { 0%{background-position:200% 0} 100%{background-position:-200% 0} }

details summary::-webkit-details-marker { display:none; }
details>summary { list-style:none; }
details summary::after { content:'▼'; transition: transform .3s ease; }
details[open] summary::after { transform: rotate(180deg); }

/* Mobile polish */
.break-words { word-break: break-word; overflow-wrap: anywhere; }
@media (max-width: 639px) {
  table { font-size: 14px; }
  th, td { padding-left: 1rem !important; padding-right: 1rem !important; }
}
