  /* ========================================================================
     全局加载组件 (Loader 全屏遮罩 z1400 + Progress 顶部进度 z1500 + 按钮内联)
     ======================================================================== */
  .yy-loader{ position:fixed; inset:0; z-index:1400; display:flex; align-items:center; justify-content:center;
    background:rgba(250,246,249,.82); -webkit-backdrop-filter:blur(7px); backdrop-filter:blur(7px);
    opacity:1; visibility:visible; transition:opacity .38s ease, visibility .38s ease; }
  .yy-loader.hide{ opacity:0; visibility:hidden; pointer-events:none; }
  .yy-loader .yl-box{ display:flex; flex-direction:column; align-items:center; gap:20px; }
  .yy-loader .yl-ring{ width:74px; height:74px; position:relative; display:flex; align-items:center; justify-content:center; }
  .yy-loader .yl-ring i{ position:absolute; border-radius:50%; border:3px solid transparent; box-sizing:border-box; }
  .yy-loader .yl-ring i.o{ inset:0; border-top-color:#c25e77; border-right-color:#d98a9b; animation:ylSpin 1.05s linear infinite; }
  .yy-loader .yl-ring i.n{ inset:11px; border-bottom-color:#c9a86a; border-left-color:#e0c48f; animation:ylSpin 1.5s linear infinite reverse; }
  .yy-loader .yl-mark{ width:34px; height:34px; border-radius:50%; background:var(--brand-grad); color:#fff;
    font-size:16px; font-weight:800; display:flex; align-items:center; justify-content:center;
    box-shadow:0 6px 16px -6px rgba(194,94,119,.7); animation:ylPulse 1.6s ease-in-out infinite; }
  .yy-loader .yl-text{ display:flex; align-items:center; gap:4px; color:var(--rose-deep); font-size:14px; font-weight:600; letter-spacing:.5px; }
  .yy-loader .yl-msg{ }
  .yy-loader .dots{ display:inline-flex; gap:3px; align-items:flex-end; height:16px; }
  .yy-loader .dots i{ width:4px; height:4px; border-radius:50%; background:var(--rose-deep); animation:ylDot 1.2s ease-in-out infinite; }
  .yy-loader .dots i:nth-child(2){ animation-delay:.18s; }
  .yy-loader .dots i:nth-child(3){ animation-delay:.36s; }
  @keyframes ylSpin{ to{ transform:rotate(360deg); } }
  @keyframes ylPulse{ 0%,100%{ transform:scale(1); } 50%{ transform:scale(1.09); } }
  @keyframes ylDot{ 0%,60%,100%{ opacity:.3; transform:translateY(0); } 30%{ opacity:1; transform:translateY(-5px); } }

  /* 顶部流动进度条 */
  .yy-progress{ position:fixed; top:0; left:0; right:0; height:3px; z-index:1500; opacity:0; transition:opacity .3s ease; pointer-events:none; }
  .yy-progress.on{ opacity:1; }
  .yy-progress i{ display:block; height:100%; width:0; border-radius:0 2px 2px 0;
    background:linear-gradient(90deg,#d98a9b,#c25e77 45%,#c9a86a); box-shadow:0 0 10px rgba(194,94,119,.6);
    transition:width .35s cubic-bezier(.4,0,.2,1); }
  .yy-progress.err i{ background:linear-gradient(90deg,#e08a80,#e0574a); box-shadow:0 0 10px rgba(224,87,74,.6); }

  /* 按钮内联加载态 */
  .btn-loading{ position:relative; pointer-events:none; color:transparent !important; }
  .btn-loading > *{ visibility:hidden; }
  .btn-loading::after{ content:""; position:absolute; top:50%; left:50%; width:16px; height:16px; margin:-8px 0 0 -8px;
    border-radius:50%; border:2px solid rgba(255,255,255,.45); border-top-color:#fff; animation:ylSpin .7s linear infinite; }
  .btn-ghost.btn-loading::after, .pd-btn.btn-loading::after{ border:2px solid rgba(194,94,119,.28); border-top-color:var(--rose-deep); }
