/*
 * gpluo.cn — 鼠标光标 v2(2026-11-07)
 *
 * 素材是站主本机 Windows 动画光标「莉莉概念风64x」:逐帧从 .ani 内的原始 32bpp 位图
 * 直通导出为 PNG 载荷 .cur —— 不经 GIF 量化、不做任何重缩放,所以不会发虚;热点(点击
 * 落点)按每态 alpha 轮廓逐像素实测,不是估的。
 *
 * 动画为什么走 @keyframes 逐帧换 url():浏览器一律不认 .ani,而 GIF/APNG 当 cursor:url
 * 时在所有引擎都只画第一帧(Firefox bug 492237 自 2013 年挂到今、Chrome 同行为)。唯一能
 * 动的办法是让动画本身去换 url 值。cursor 属离散动画属性,必须 step-end —— 不加 step 时
 * 规范规定只在关键帧中点变一次,看起来就是死图。本实现在 Chromium 实测过:4 秒采样换过
 * 全部帧。同样的思路见 ani-cursor(Webamp 出品)。
 *
 * 为什么要 !important:Sakurairo 的 inc/decorate.php 在 wp_head 打印内联光标规则,位置
 * 在本文件之后,同等特异性下它会赢;用 !important 后不再依赖打印顺序,删掉 mu-plugins/
 * gpluo-ui.php 的 kill 也不会打架。
 *
 * 降级:Safari < 26.2 不播动画光标、只显示首帧(仍是清晰静帧);触摸设备经 hover 媒体
 * 查询整段关闭;prefers-reduced-motion 下退化为静帧。
 * 上一版(2026-10-20)用的是 21-28px 的 PNG 残帧,在 192dpi 屏上必糊且动画不像 —— 那批
 * 文件仍留在 mu-plugins/cursors/{light,dark}/,本文件不再引用它们。
 */

@media (hover: hover) and (pointer: fine) {
  @keyframes gpluo-cur-wait {
  0.0% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-00.cur") 2 1, wait; }
  2.326% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-01.cur") 2 1, wait; }
  4.651% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-02.cur") 2 1, wait; }
  6.977% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-03.cur") 2 1, wait; }
  9.302% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-04.cur") 2 1, wait; }
  11.628% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-05.cur") 2 1, wait; }
  13.953% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-06.cur") 2 1, wait; }
  16.279% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-07.cur") 2 1, wait; }
  18.605% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-08.cur") 2 1, wait; }
  20.93% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-09.cur") 2 1, wait; }
  23.256% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-10.cur") 2 1, wait; }
  25.581% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-11.cur") 2 1, wait; }
  27.907% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-12.cur") 2 1, wait; }
  30.233% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-13.cur") 2 1, wait; }
  32.558% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-14.cur") 2 1, wait; }
  34.884% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-15.cur") 2 1, wait; }
  37.209% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-16.cur") 2 1, wait; }
  39.535% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-17.cur") 2 1, wait; }
  41.86% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-18.cur") 2 1, wait; }
  44.186% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-19.cur") 2 1, wait; }
  46.512% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-20.cur") 2 1, wait; }
  48.837% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-21.cur") 2 1, wait; }
  51.163% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-22.cur") 2 1, wait; }
  53.488% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-23.cur") 2 1, wait; }
  55.814% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-24.cur") 2 1, wait; }
  58.14% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-25.cur") 2 1, wait; }
  60.465% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-26.cur") 2 1, wait; }
  62.791% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-27.cur") 2 1, wait; }
  65.116% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-28.cur") 2 1, wait; }
  67.442% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-29.cur") 2 1, wait; }
  69.767% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-30.cur") 2 1, wait; }
  72.093% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-31.cur") 2 1, wait; }
  74.419% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-32.cur") 2 1, wait; }
  76.744% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-33.cur") 2 1, wait; }
  79.07% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-34.cur") 2 1, wait; }
  81.395% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-35.cur") 2 1, wait; }
  83.721% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-36.cur") 2 1, wait; }
  86.047% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-37.cur") 2 1, wait; }
  88.372% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-38.cur") 2 1, wait; }
  90.698% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-39.cur") 2 1, wait; }
  93.023% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-40.cur") 2 1, wait; }
  95.349% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-41.cur") 2 1, wait; }
  97.674% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-42.cur") 2 1, wait; }
  }
  @keyframes gpluo-cur-progress {
  0.0% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-00.cur") 2 1, progress; }
  2.326% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-01.cur") 2 1, progress; }
  4.651% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-02.cur") 2 1, progress; }
  6.977% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-03.cur") 2 1, progress; }
  9.302% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-04.cur") 2 1, progress; }
  11.628% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-05.cur") 2 1, progress; }
  13.953% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-06.cur") 2 1, progress; }
  16.279% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-07.cur") 2 1, progress; }
  18.605% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-08.cur") 2 1, progress; }
  20.93% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-09.cur") 2 1, progress; }
  23.256% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-10.cur") 2 1, progress; }
  25.581% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-11.cur") 2 1, progress; }
  27.907% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-12.cur") 2 1, progress; }
  30.233% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-13.cur") 2 1, progress; }
  32.558% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-14.cur") 2 1, progress; }
  34.884% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-15.cur") 2 1, progress; }
  37.209% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-16.cur") 2 1, progress; }
  39.535% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-17.cur") 2 1, progress; }
  41.86% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-18.cur") 2 1, progress; }
  44.186% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-19.cur") 2 1, progress; }
  46.512% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-20.cur") 2 1, progress; }
  48.837% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-21.cur") 2 1, progress; }
  51.163% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-22.cur") 2 1, progress; }
  53.488% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-23.cur") 2 1, progress; }
  55.814% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-24.cur") 2 1, progress; }
  58.14% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-25.cur") 2 1, progress; }
  60.465% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-26.cur") 2 1, progress; }
  62.791% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-27.cur") 2 1, progress; }
  65.116% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-28.cur") 2 1, progress; }
  67.442% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-29.cur") 2 1, progress; }
  69.767% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-30.cur") 2 1, progress; }
  72.093% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-31.cur") 2 1, progress; }
  74.419% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-32.cur") 2 1, progress; }
  76.744% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-33.cur") 2 1, progress; }
  79.07% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-34.cur") 2 1, progress; }
  81.395% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-35.cur") 2 1, progress; }
  83.721% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-36.cur") 2 1, progress; }
  86.047% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-37.cur") 2 1, progress; }
  88.372% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-38.cur") 2 1, progress; }
  90.698% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-39.cur") 2 1, progress; }
  93.023% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-40.cur") 2 1, progress; }
  95.349% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-41.cur") 2 1, progress; }
  97.674% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-42.cur") 2 1, progress; }
  }
  @keyframes gpluo-cur-not-allowed {
  0.0% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-00.cur") 2 1, not-allowed; }
  3.448% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-01.cur") 2 1, not-allowed; }
  6.897% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-02.cur") 2 1, not-allowed; }
  10.345% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-03.cur") 2 1, not-allowed; }
  13.793% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-04.cur") 2 1, not-allowed; }
  17.241% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-05.cur") 2 1, not-allowed; }
  20.69% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-06.cur") 2 1, not-allowed; }
  24.138% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-07.cur") 2 1, not-allowed; }
  27.586% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-08.cur") 2 1, not-allowed; }
  31.034% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-09.cur") 2 1, not-allowed; }
  34.483% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-10.cur") 2 1, not-allowed; }
  37.931% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-11.cur") 2 1, not-allowed; }
  41.379% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-12.cur") 2 1, not-allowed; }
  44.828% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-13.cur") 2 1, not-allowed; }
  48.276% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-14.cur") 2 1, not-allowed; }
  51.724% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-15.cur") 2 1, not-allowed; }
  55.172% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-16.cur") 2 1, not-allowed; }
  58.621% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-17.cur") 2 1, not-allowed; }
  62.069% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-18.cur") 2 1, not-allowed; }
  65.517% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-19.cur") 2 1, not-allowed; }
  68.966% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-20.cur") 2 1, not-allowed; }
  72.414% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-21.cur") 2 1, not-allowed; }
  75.862% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-22.cur") 2 1, not-allowed; }
  79.31% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-23.cur") 2 1, not-allowed; }
  82.759% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-24.cur") 2 1, not-allowed; }
  86.207% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-25.cur") 2 1, not-allowed; }
  89.655% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-26.cur") 2 1, not-allowed; }
  93.103% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-27.cur") 2 1, not-allowed; }
  96.552% { cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-28.cur") 2 1, not-allowed; }
  }

  /* 常态。!important 的理由见文件头;busy 门控的理由见上一条注释。 */
  html:not(.gpluo-cur-busy) body { cursor: url("/wp-content/mu-plugins/cursors/v2-32/default/frame-00.cur") 2 1, auto !important; }
  html:not(.gpluo-cur-busy) a, .post-title, .entry-title, .cat-title, .site-nav a, .site-header a,
  .ins-search-item, .load-button, .mashiro-profile .content .btn, #changskin,
  .site-footer a, .pagination a, .post-thumbnail, .sns-box a, .post-actions a,
  .comment-reply-link, .reward-row li, #moblieGoTop, #waifu-toggle {
    cursor: url("/wp-content/mu-plugins/cursors/v2-32/pointer/frame-00.cur") 2 1, pointer !important;
  }
  /* 交互控件必须列全:button/input[submit] 有 UA 自带的 cursor:default(自身声明,
     不继承),实测漏一条就露一块系统光标。 */
  html:not(.gpluo-cur-busy) button:not(:disabled), html:not(.gpluo-cur-busy) input[type=submit]:not(:disabled),
  html:not(.gpluo-cur-busy) input[type=button]:not(:disabled), html:not(.gpluo-cur-busy) [role=button]:not([aria-disabled=true]),
  summary, .mashiro-tips, .font-family-controls button {
    cursor: url("/wp-content/mu-plugins/cursors/v2-32/pointer/frame-00.cur") 2 1, pointer !important;
  }
  html:not(.gpluo-cur-busy) input:not([type=submit]):not([type=button]):not([type=image]), textarea, select,
  .entry-content p, .entry-content li, .entry-content div,
  .comment-form, .wp-block-quote p, code, pre {
    cursor: url("/wp-content/mu-plugins/cursors/v2-32/text/frame-00.cur") 16 16, text !important;
  }
  /* 真·不可点 */
  html:not(.gpluo-cur-busy) input:disabled, html:not(.gpluo-cur-busy) textarea:disabled, html:not(.gpluo-cur-busy) select:disabled,
  button:disabled, [aria-disabled="true"], .disabled {
    cursor: url("/wp-content/mu-plugins/cursors/v2-32/not-allowed/frame-00.cur") 2 1, not-allowed !important;
  }
  /* 精确选择:留给需要逐像素选点的界面(取色/裁剪类组件挂这个类) */
  html:not(.gpluo-cur-busy) .cur-crosshair { cursor: url("/wp-content/mu-plugins/cursors/v2-32/crosshair/frame-00.cur") 16 16, crosshair !important; }

  /* PJAX 切页 / 表单提交期间:html 挂 gpluo-cur-busy(+ pjax 或 wait 决定播哪条)。
     这里 cursor 不带 !important —— 它是兜底值(reduced-motion/不播动画的浏览器用),
     动画推进值优先于它;按钮类控件强制 inherit 以吃到 body 的动画值。 */
  html.gpluo-cur-busy body {
    cursor: url("/wp-content/mu-plugins/cursors/v2-32/progress/frame-00.cur") 2 1, progress;
    animation: gpluo-cur-progress 2838ms step-end infinite;
  }
  html.gpluo-cur-busy.gpluo-cur-wait body {
    cursor: url("/wp-content/mu-plugins/cursors/v2-32/wait/frame-00.cur") 2 1, wait;
    animation-name: gpluo-cur-wait; animation-duration: 2838ms;
  }
  html.gpluo-cur-busy :is(button, input[type=submit], input[type=button],
  input[type=image], [role=button]) { cursor: inherit !important; }
}

/* 减弱动效:动画停下来,落到上面不带 !important 的兜底静帧,仍是我们自己的光标 */
@media (prefers-reduced-motion: reduce) {
  html.gpluo-cur-busy body { animation: none; }
}
