@keyframes shimmer { 0%, 100% { opacity: .6; } 50% { opacity: 1; } }
@keyframes fadeUp { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: none; } }
@keyframes pulse { 50% { opacity: .5; } }

#skeleton .sk-block { height: 120px; margin: 12px; background: var(--border); border-radius: 16px; animation: shimmer 1.2s infinite; }
#skeleton .sk-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; padding: 12px; }
#skeleton .sk-card { height: 100px; background: var(--border); border-radius: 14px; animation: shimmer 1.2s infinite; }

.list-card { animation: fadeUp .35s ease-out; }
.btn-cta:active { transform: scale(.97); }
.type-card:active, .tpl-card:active { transform: scale(.98); }

body.has-contact-footer .em-entry-btn {
  bottom: calc(var(--bottom-chrome-h) + 14px + var(--safe-area-bottom)); z-index: 95;
}
body.has-contact-footer .zw-root .zw-fab {
  bottom: calc(var(--bottom-chrome-h) + 14px + var(--safe-area-bottom)); right: 12px; z-index: 94;
}
