/* ============================================================
   叶纸投资报告 · Effects — 阴影 / 模糊 / 过渡 / 动画
   v2 「Quiet Ledger」: 中性分层阴影(去品牌色光晕) · 两档过渡
   暗色值由 colors.css 的暗色块覆盖。
   ============================================================ */

:root {
  /* ---- 阴影 (中性, 分层) ---- */
  --shadow-sm:   0 1px 2px rgba(28,21,38,.04), 0 1px 3px rgba(28,21,38,.06);
  --shadow-md:   0 2px 4px rgba(28,21,38,.04), 0 6px 16px rgba(28,21,38,.08);
  --shadow-lg:   0 4px 8px rgba(28,21,38,.05), 0 12px 32px rgba(28,21,38,.10);
  /* 兼容旧引用 (不再新增使用) */
  --shadow-purple: var(--shadow-md);
  --shadow-bull:   var(--shadow-md);

  /* ---- 玻璃拟态 (仅 sticky nav) ---- */
  --glass-bg:   rgba(251,250,252,.8);
  --glass-blur: blur(12px) saturate(1.5);  /* @kind other */

  /* ---- 过渡 ---- */
  --ease:        cubic-bezier(.2,.8,.2,1); /* @kind other */
  --ease-spring: cubic-bezier(.34,1.56,.64,1); /* @kind other; 仅 Mascot */
  --t-fast:  .12s ease;
  --t-base:  .2s  var(--ease);
  --t-slow:  .35s var(--ease);

  /* ---- 焦点环 ---- */
  --ring: 0 0 0 2px var(--surface), 0 0 0 4px var(--pink);
}

/* ---- 共享关键帧 ----
   页面已停止引用 twinkle/orbit/shimmer/pop-in/pulse-glow/bounce 等装饰动画;
   关键帧保留以防旧消费方报错。 ---- */
@keyframes ds-twinkle {
  0%, 100% { opacity: .3; }
  50%      { opacity: .8; }
}
@keyframes ds-bounce {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-4px); }
}
@keyframes ds-float {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-5px); }
}
@keyframes ds-rise {
  from { opacity: 0; transform: translateY(4px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes ds-ring-fill {
  from { stroke-dashoffset: var(--ring-circ, 339); }
}
@keyframes ds-bar-grow {
  from { transform: scaleX(0); }
  to   { transform: scaleX(1); }
}
@keyframes ds-pulse-glow {
  0%, 100% { box-shadow: 0 0 0 0 var(--pink-glow); }
  50%      { box-shadow: 0 0 0 8px transparent; }
}
/* 吉祥物待机:轻微呼吸浮动 (全页唯一常驻动画) */
@keyframes ds-mascot-idle {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-5px); }
}
/* 点击/招呼:摇摆 */
@keyframes ds-wiggle {
  0%, 100% { transform: rotate(0deg); }
  20%      { transform: rotate(-7deg); }
  40%      { transform: rotate(6deg); }
  60%      { transform: rotate(-4deg); }
  80%      { transform: rotate(2deg); }
}
@keyframes ds-blink {
  0%, 92%, 100% { opacity: 0; }
  95%, 97%      { opacity: 1; }
}
@keyframes ds-pop-in {
  0%   { opacity: 0; transform: scale(.92) translateY(6px); }
  100% { opacity: 1; transform: scale(1) translateY(0); }
}
@keyframes ds-slide-in {
  from { opacity: 0; transform: translateX(-12px); }
  to   { opacity: 1; transform: translateX(0); }
}
@keyframes ds-shimmer {
  0%   { background-position: 0% 50%; }
  100% { background-position: 200% 50%; }
}
@keyframes ds-orbit {
  from { transform: rotate(0deg) translateX(var(--orbit-r, 56px)) rotate(0deg); }
  to   { transform: rotate(360deg) translateX(var(--orbit-r, 56px)) rotate(-360deg); }
}
@keyframes ds-pop {
  0%, 100% { transform: scale(1); }
  50%      { transform: scale(1.18); }
}
@keyframes ds-flash {
  0%   { background: var(--neutral-bg); }
  100% { background: transparent; }
}
