


@keyframes dl-shake {
  0%, 100% { transform: translateX(0); }
  20% { transform: translateX(-5px); }
  40% { transform: translateX(5px); }
  60% { transform: translateX(-3px); }
  80% { transform: translateX(2px); }
}
@keyframes dl-pop {
  0% { opacity: 0.4; transform: translateY(4px); }
  55% { opacity: 1; transform: translateY(-2px); }
  100% { opacity: 1; transform: translateY(0); }
}
@keyframes dl-badge-pop {
  0% { transform: translateY(-2px); opacity: 0.5; }
  60% { transform: translateY(1px); opacity: 1; }
  100% { transform: translateY(0); opacity: 1; }
}
@keyframes dl-pulse-border {
  0%, 100% { box-shadow: 0 0 0 0 rgba(196, 120, 138, 0.35); }
  50% { box-shadow: 0 0 0 4px rgba(196, 120, 138, 0.12); }
}
@keyframes dl-row-in {
  from { opacity: 0; transform: translateY(-10px); background-color: rgba(214, 160, 176, 0.22); }
  to { opacity: 1; transform: translateY(0); background-color: transparent; }
}
@keyframes dl-slide-down {
  from { opacity: 0; transform: translateY(-8px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes dl-slide-up {
  from { opacity: 0; transform: translateY(10px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes dl-toast-in {
  from { opacity: 0; transform: translateX(18px); }
  to { opacity: 1; transform: translateX(0); }
}
@keyframes dl-toast-bar {
  from { transform: scaleX(1); }
  to { transform: scaleX(0); }
}
@keyframes dl-modal-in {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes dl-mask-in {
  from { opacity: 0; }
  to { opacity: 1; }
}
@keyframes dl-spin {
  to { transform: rotate(360deg); }
}
@keyframes dl-dot-bounce {
  0%, 80%, 100% { opacity: 0.25; transform: translateY(0); }
  40% { opacity: 1; transform: translateY(-3px); }
}
@keyframes dl-breath {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.45; }
}
@keyframes dl-bar-grow {
  from { transform: scaleX(0); }
  to { transform: scaleX(1); }
}
@keyframes dl-confetti-fall {
  0% { transform: translateY(0) rotate(0deg); opacity: 1; }
  100% { transform: translateY(70vh) rotate(540deg); opacity: 0; }
}
@keyframes dl-side-group-in {
  from { opacity: 0; transform: translateX(-6px); }
  to { opacity: 1; transform: translateX(0); }
}
@keyframes dl-notify-open {
  from { opacity: 0; transform: translateY(-6px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes dl-skel {
  0% { background-position: 100% 0; }
  100% { background-position: -100% 0; }
}
@keyframes dl-ok-flash {
  0% { background-color: rgba(52, 199, 89, 0.22); }
  100% { background-color: transparent; }
}
@keyframes dl-ripple-click {
  0% { transform: scale(0); opacity: 0.35; }
  100% { transform: scale(2.4); opacity: 0; }
}

.dl-shake { animation: dl-shake 0.42s var(--dl-ease, ease) both; }
.dl-pop { animation: dl-pop 0.45s var(--dl-ease-spring, cubic-bezier(0.34, 1.56, 0.64, 1)) both; }
.dl-badge-pop { animation: dl-badge-pop 0.4s var(--dl-ease-spring, cubic-bezier(0.34, 1.56, 0.64, 1)) both; }
.dl-pulse-border { animation: dl-pulse-border 1.2s var(--dl-ease, ease) infinite; }
.dl-row-insert { animation: dl-row-in 0.7s var(--dl-ease-silk, ease) both; }
.dl-ok-flash { animation: dl-ok-flash 1.2s var(--dl-ease-silk, ease) both; }
.dl-spin-once { animation: dl-spin 0.55s var(--dl-ease, ease) 1; }
.dl-breath { animation: dl-breath 1.8s ease-in-out infinite; }
.dl-soft-float { animation: dl-soft-float 4.5s ease-in-out infinite; }

.dl-enter-stagger > *:nth-child(9) { animation-delay: 0.58s; }
.dl-enter-stagger > *:nth-child(10) { animation-delay: 0.64s; }
.dl-enter-stagger > *:nth-child(11) { animation-delay: 0.7s; }
.dl-enter-stagger > *:nth-child(12) { animation-delay: 0.76s; }

.admin-toast {
   
  position: fixed !important;
  top: 80px;
  right: 30px;
  z-index: 10050;
  max-width: min(360px, calc(100vw - 48px));
  animation: dl-toast-in 0.32s var(--dl-ease-out, ease) both !important;
  overflow: hidden;
}
.dl-toast-stack {
  position: fixed;
  top: 72px;
  right: 24px;
  z-index: 10050;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 10px;
  max-width: min(380px, calc(100vw - 40px));
  pointer-events: none;
}
.dl-toast-stack .admin-toast {
  position: relative !important;
  top: auto !important;
  right: auto !important;
  left: auto !important;
  pointer-events: auto;
}
.admin-toast::after {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 2px;
  background: rgba(196, 120, 138, 0.55);
  transform-origin: left center;
  animation: dl-toast-bar 2.6s linear forwards;
}
.admin-toast.admin-toast--error {
  animation: dl-toast-in 0.28s var(--dl-ease-out, ease) both, dl-shake 0.42s var(--dl-ease, ease) 0.05s both !important;
}

.admin-modal-mask:not([hidden]) {
  animation: dl-mask-in 0.22s var(--dl-ease, ease) both;
}
.admin-modal-mask:not([hidden]) .admin-modal,
.recharge-modal-mask.is-visible .recharge-modal {
  animation: dl-modal-in 0.32s var(--dl-ease-silk, ease) both;
}

.notify-dropdown:not([hidden]) {
  animation: dl-notify-open 0.28s var(--dl-ease-out, ease) both;
  transform-origin: top right;
}
.notify-dropdown:not([hidden]) .notify-item {
  animation: dl-cascade 0.45s var(--dl-ease-silk, ease) both;
}
.notify-dropdown:not([hidden]) .notify-item:nth-child(1) { animation-delay: 0.04s; }
.notify-dropdown:not([hidden]) .notify-item:nth-child(2) { animation-delay: 0.08s; }
.notify-dropdown:not([hidden]) .notify-item:nth-child(3) { animation-delay: 0.12s; }
.notify-dropdown:not([hidden]) .notify-item:nth-child(4) { animation-delay: 0.16s; }
.notify-dropdown:not([hidden]) .notify-item:nth-child(5) { animation-delay: 0.2s; }
.notify-badge:not([hidden]) {
  animation: dl-badge-pop 0.4s var(--dl-ease-spring, cubic-bezier(0.34, 1.56, 0.64, 1)) both;
}
.notify-bell-btn.has-unread .notify-bell-icon {
  animation: dl-soft-float 2.8s ease-in-out infinite;
}

.side-menu-group.active {
  animation: dl-side-group-in 0.45s var(--dl-ease-silk, ease) both;
}
.side-menu-group.active .side-menu-item {
  animation: dl-cascade 0.55s var(--dl-ease-silk, ease) both;
}
.side-menu-group.active .side-menu-item:nth-child(2) { animation-delay: 0.04s; }
.side-menu-group.active .side-menu-item:nth-child(3) { animation-delay: 0.08s; }
.side-menu-group.active .side-menu-item:nth-child(4) { animation-delay: 0.12s; }
.side-menu-group.active .side-menu-item:nth-child(5) { animation-delay: 0.16s; }
.side-menu-group.active .side-menu-item:nth-child(6) { animation-delay: 0.2s; }

button:focus-visible,
a:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible {
  outline: none;
  box-shadow: var(--dl-shadow-focus, 0 0 0 4px rgba(214, 160, 176, 0.22));
  transition: box-shadow 0.18s ease;
}

.dl-skeleton {
  border-radius: 10px;
  background: linear-gradient(90deg,
    rgba(214, 160, 176, 0.08) 0%,
    rgba(255, 255, 255, 0.45) 45%,
    rgba(214, 160, 176, 0.08) 90%);
  background-size: 200% 100%;
  animation: dl-skel 1.2s ease-in-out infinite;
  min-height: 14px;
}
.dl-skeleton-block { height: 72px; margin-bottom: 10px; }
.dl-skeleton-line { height: 12px; margin-bottom: 8px; width: 100%; }
.dl-skeleton-line.w60 { width: 60%; }
.dl-skeleton-line.w40 { width: 40%; }

.admin-empty.dl-empty-soft,
.data-track-empty.dl-empty-soft,
.ov-empty.dl-empty-soft,
.chat-empty.dl-empty-soft {
  animation: dl-soft-float 5s ease-in-out infinite;
}

.dl-scroll-fade {
  mask-image: linear-gradient(to bottom, transparent 0, #000 12px, #000 calc(100% - 12px), transparent 100%);
  -webkit-mask-image: linear-gradient(to bottom, transparent 0, #000 12px, #000 calc(100% - 12px), transparent 100%);
}

.dl-progress-hud {
  position: fixed;
  left: 50%;
  bottom: 28px;
  transform: translateX(-50%);
  z-index: 12000;
  min-width: 280px;
  max-width: 420px;
  padding: 14px 16px 12px;
  border-radius: 14px;
  background: rgba(255, 252, 253, 0.94);
  border: 1px solid rgba(214, 160, 176, 0.35);
  box-shadow: 0 12px 36px rgba(160, 100, 120, 0.16);
  color: #2e2934;
  animation: dl-slide-up 0.28s ease both;
}
.dl-progress-hud-title {
  font-size: 13px;
  font-weight: 600;
  margin: 0 0 10px;
}
.dl-progress-steps {
  display: flex;
  gap: 6px;
  margin-bottom: 8px;
}
.dl-progress-step {
  flex: 1;
  height: 4px;
  border-radius: 999px;
  background: rgba(214, 160, 176, 0.18);
  overflow: hidden;
  position: relative;
}
.dl-progress-step.is-done {
  background: rgba(196, 120, 138, 0.75);
}
.dl-progress-step.is-active::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, rgba(196, 120, 138, 0.2), rgba(196, 120, 138, 0.9));
  background-size: 200% 100%;
  animation: dl-shimmer 1.1s linear infinite;
}
.dl-progress-hud-sub {
  margin: 0;
  font-size: 12px;
  color: #524a54;
}

.dl-confetti-layer {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 13000;
  overflow: hidden;
}
.dl-confetti-piece {
  position: absolute;
  top: -8px;
  width: 6px;
  height: 10px;
  border-radius: 1px;
  animation: dl-confetti-fall 0.85s ease forwards;
}

.dl-input-ok {
  border-color: rgba(52, 199, 89, 0.65) !important;
  box-shadow: 0 0 0 3px rgba(52, 199, 89, 0.15) !important;
  transition: border-color 0.25s ease, box-shadow 0.25s ease;
}

.dl-metric-bar {
  height: 6px;
  border-radius: 999px;
  background: rgba(214, 160, 176, 0.15);
  overflow: hidden;
  margin-top: 6px;
}
.dl-metric-bar > i {
  display: block;
  height: 100%;
  width: var(--dl-bar, 0%);
  border-radius: inherit;
  background: linear-gradient(90deg, #d4a0ac, #c4788a);
  transform-origin: left center;
  animation: dl-bar-grow 0.7s ease both;
}

.dl-result-cascade > * {
  animation: dl-cascade 0.65s var(--dl-ease-silk, ease) both;
}
.dl-result-cascade > *:nth-child(1) { animation-delay: 0.04s; }
.dl-result-cascade > *:nth-child(2) { animation-delay: 0.1s; }
.dl-result-cascade > *:nth-child(3) { animation-delay: 0.16s; }
.dl-result-cascade > *:nth-child(4) { animation-delay: 0.22s; }
.dl-result-cascade > *:nth-child(5) { animation-delay: 0.28s; }
.dl-result-cascade > *:nth-child(6) { animation-delay: 0.34s; }

.mall-card.is-selected,
.recharge-plan.is-on {
  box-shadow: 0 0 0 2px rgba(196, 120, 138, 0.45), 0 12px 32px rgba(22, 28, 48, 0.08) !important;
  transition: box-shadow 0.28s cubic-bezier(0.34, 1.56, 0.64, 1), transform 0.28s ease;
}
#contentBody .mall-card {
  transition: transform 0.28s ease, box-shadow 0.28s ease, border-color 0.28s ease;
}
#contentBody .mall-card:hover {
  transform: translateY(-3px);
}

.dt-badge {
  transition: background-color 0.3s ease, color 0.3s ease, box-shadow 0.3s ease;
}
.data-track-item.is-expiring .dt-badge,
.dt-badge.is-expiring {
  animation: dl-breath 1.6s ease-in-out infinite;
}
.dt-metric-val.dl-flash-metric {
  animation: dl-pop 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) both;
  color: var(--dl-accent, #c4788a);
}

.my-ord-pending,
.my-ord-done,
.my-ord-ex {
  transition: background-color 0.3s ease, color 0.3s ease;
}
.my-ord-status.dl-status-swap {
  animation: dl-badge-pop 0.45s cubic-bezier(0.34, 1.56, 0.64, 1) both;
}

.ao-grid.dl-enter-stagger .ao-card {
  animation: dl-cascade 0.92s var(--dl-ease-silk, ease) both;
}
.ao-value.dl-todo-pop {
  animation: dl-pop 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) both;
  color: #c45656;
}
.ao-card {
  position: relative;
  overflow: hidden;
  transition: transform 0.28s ease, box-shadow 0.28s ease;
}
.ao-card:hover {
  transform: translateY(-2px);
}
.ao-card .dl-click-ripple {
  position: absolute;
  width: 12px;
  height: 12px;
  margin: -6px 0 0 -6px;
  border-radius: 50%;
  background: rgba(196, 120, 138, 0.35);
  pointer-events: none;
  animation: dl-ripple-click 0.55s ease forwards;
}

.admin-row.selected {
  transition: background-color 0.25s ease;
  box-shadow: inset 3px 0 0 var(--dl-accent, #c4788a);
}
.admin-online-badge.is-on {
  animation: dl-state-pulse 2.4s ease infinite;
}

.ord-status-flash {
  animation: dl-ok-flash 1.1s ease both;
}

.chat-thread-item.has-new {
  animation: dl-row-in 0.55s ease both;
}
.chat-unread {
  animation: dl-badge-pop 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) both;
}
.chat-bubble {
  animation: dl-slide-up 0.32s ease both;
}
.chat-sending-dots {
  display: inline-flex;
  gap: 3px;
  align-items: center;
  height: 14px;
}
.chat-sending-dots i {
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: #524a54;
  animation: dl-dot-bounce 1s ease-in-out infinite;
}
.chat-sending-dots i:nth-child(2) { animation-delay: 0.15s; }
.chat-sending-dots i:nth-child(3) { animation-delay: 0.3s; }

.announce-card .announce-body {
  overflow: hidden;
  transition: max-height 0.35s ease, opacity 0.28s ease;
}
.announce-card.is-collapsed .announce-body {
  max-height: 0 !important;
  opacity: 0;
}
.announce-card.is-open .announce-body {
  opacity: 1;
}
.announce-card.is-read {
  opacity: 0.72;
  transition: opacity 0.35s ease;
}

body.role-vip .user-role {
  background-image: linear-gradient(100deg, transparent 30%, rgba(255, 214, 102, 0.35) 50%, transparent 70%);
  background-size: 200% 100%;
  animation: dl-shimmer 4.5s linear infinite;
}

.vl-cover img,
.va-cover img {
  transition: transform 0.35s ease;
}
.vl-item:hover .vl-cover img,
.va-list-item:hover .va-cover img {
  transform: scale(1.04);
}

.user-balance .dl-bal-num {
  display: inline-block;
  min-width: 0.6em;
  transition: transform 0.35s ease, opacity 0.35s ease;
}
.user-balance.dl-odometer .dl-bal-num {
  animation: dl-pop 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) both;
}

.btn.is-saved-ok::after {
  content: " ✓";
  color: #34c759;
  font-weight: 700;
}

@media (prefers-reduced-motion: reduce) {
  .dl-shake, .dl-pop, .dl-badge-pop, .dl-pulse-border, .dl-row-insert,
  .dl-ok-flash, .dl-spin-once, .dl-breath, .dl-soft-float,
  .admin-toast, .admin-toast::after, .admin-toast.admin-toast--error,
  .admin-modal-mask:not([hidden]), .admin-modal-mask:not([hidden]) .admin-modal,
  .recharge-modal-mask.is-visible .recharge-modal,
  .notify-dropdown:not([hidden]), .notify-dropdown:not([hidden]) .notify-item,
  .notify-badge:not([hidden]), .notify-bell-btn.has-unread .notify-bell-icon,
  .side-menu-group.active, .side-menu-group.active .side-menu-item,
  .dl-skeleton, .admin-empty.dl-empty-soft, .data-track-empty.dl-empty-soft,
  .ov-empty.dl-empty-soft, .chat-empty.dl-empty-soft,
  .dl-progress-hud, .dl-confetti-piece, .dl-metric-bar > i,
  .dl-result-cascade > *, .ao-grid.dl-enter-stagger .ao-card,
  .ao-value.dl-todo-pop, .ao-card .dl-click-ripple,
  .admin-online-badge.is-on, .chat-thread-item.has-new, .chat-unread,
  .chat-bubble, .chat-sending-dots i, .dt-badge.is-expiring,
  body.role-vip .user-role, .vl-item:hover .vl-cover img,
  .va-list-item:hover .va-cover img, .user-balance.dl-odometer .dl-bal-num,
  .ws-state-dot.is-open, .ws-state-dot.is-pending,
  .notify-bell-btn.is-ringing .notify-bell-icon {
    animation: none !important;
    transition: none !important;
  }
  .dl-progress-step.is-active::after { animation: none !important; }
}

 
.ux-onboard-bar {
  position: fixed; top: 0; left: 0; right: 0; z-index: 10000;
  display: flex; align-items: center; justify-content: center; gap: 14px;
  padding: 9px 16px;
  font-size: 13px; color: var(--dl-color-ink);
  background: linear-gradient(90deg, rgba(91, 95, 199, 0.16), rgba(138, 111, 216, 0.14));
  -webkit-backdrop-filter: blur(10px) saturate(1.2);
  backdrop-filter: blur(10px) saturate(1.2);
  border-bottom: 1px solid rgba(91, 95, 199, 0.25);
  animation: uxFadeIn 0.4s var(--ux-ease-out) backwards;
}
.ux-onboard-bar .btn { padding: 3px 12px; font-size: 12px; }

