/* ═══ AI Engine 机器人气泡接管 ═══
   两件事：①隐藏插件自带的全站气泡（容器与 React 照常挂载，只是不可见）
          ②主题右侧悬浮按钮里那个入口：图标满铺 + 科幻动效
   契约见 inc/ai/ai-engine-fab.php 头部注释；只在面板总开关开启时加载 */

/* —— ① 隐藏插件自带气泡 ——
   特异性说明：插件对 .mwai-trigger 的最高一条规则是
   .mwai-foundation-theme.mwai-animation-zoom.mwai-window.mwai-open:not(.mwai-closing) .mwai-trigger
   共 6 个类(0,6,0)；这里 html body + 5 个类 + 重复类补到 (0,9,2) 稳压，
   不靠 !important 堆砌、也不动 DOM 结构（重复类名是纯提权手法，非笔误）。
   隐藏 .mwai-trigger 而非整个容器：窗口(.mwai-window-box)与之同级，必须留着。
   触发器的尺寸插件从不测量（全量检查仅 2 处 getBoundingClientRect，均无关），
   所以隐藏它不影响打开/关闭动画。 */
html body .mwai-chatbot-container .mwai-chat.mwai-window .mwai-trigger.mwai-trigger.mwai-trigger.mwai-trigger.mwai-trigger,
html body .mwai-chatbot-container .mwai-chat.mwai-window .mwai-trigger.mwai-trigger.mwai-trigger.mwai-trigger.mwai-trigger .mwai-icon-text-container {
  display: none !important;
}

/* —— ② 悬浮按钮：图标满铺 ——
   父主题 .float-btn 是 width:40px + padding:7px 0 + font-size:1.4em，
   要让图标占满必须把 padding 归零并给定高度（同权重后置覆盖，无需 !important）；
   不给 overflow:hidden —— 那会连外发光一起裁掉 */
.zibll-ai-engine-fab {
  padding: 0;
  height: 40px;
  min-height: 40px;
  overflow: visible;
  transition: filter 0.3s ease;
  /* 按钮后面还有「返回顶部」（DOM 在后 → 绘制在上），不抬层级的话
     特效环/光点与它重叠的部分会被它的背景盖掉、只剩半圈 */
  z-index: 1;
}

/* 绝对定位而非 flex 子项：父主题 .float-btn 是 flex column + align-items:center，
   百分比高度在 flex 项里容易受 justify/align 影响，绝对定位铺满最稳 */
.zibll-ai-engine-fab .zibll-ai-engine-fab-ic {
  position: absolute;
  inset: 0;
  z-index: 1; /* 压住伪元素特效层：特效走按钮外圈，不糊在图标上 */
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover; /* 满铺；非正方形图按中心裁切（面板有说明） */
  border-radius: inherit; /* 跟随 square(直角)/round(8px) 悬浮按钮风格 */
}

/* emoji 分支（图标跟随插件机器人配置且为 emoji 时） */
.zibll-ai-engine-fab .zibll-ai-engine-fab-emoji {
  font-size: 26px;
  line-height: 40px;
  font-style: normal;
  text-align: center;
}

/* 悬停：整体提亮（放在按钮自身，不与图标的动画 filter 打架） */
.zibll-ai-engine-fab:hover {
  filter: brightness(1.15) saturate(1.1);
}

/* 伪元素公共底座（各档位各自覆盖 inset / 内容） */
.zibll-ai-engine-fab::before,
.zibll-ai-engine-fab::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  pointer-events: none;
}

/* ══════════ 档位一：能量核心（core，默认）══════════
   图标满铺后按钮内部没有作画空间，视觉语言全放到按钮外：
   ①外发光呼吸（按钮自身）②旋转的虚线能量环 ③两枚对向公转的光点 ④图标充能
   ⚠️ 不用 conic-gradient + mask 画扫光：mask-composite 在部分内核上表现不稳，
   实测会退化成一条斜线而不是圆环（已用 chromium 渲染复核）——改虚线描边
   整体旋转，零 mask 依赖，各内核表现一致 */
.zibll-ai-engine-fab.zibll-fab-anim-core {
  animation: zibll-fab-halo 2.8s ease-in-out infinite;
}

.zibll-fab-anim-core::before {
  inset: -5px; /* 环走在按钮外，不被满铺图标遮住 */
  border: 2px dashed var(--theme-color);
  filter: drop-shadow(0 0 5px var(--theme-color));
  opacity: 0.85;
  animation: zibll-fab-spin 7s linear infinite;
}

/* 公转光点：5px 本体留在按钮中心（被图标盖住），用两组 box-shadow
   在 ±28px 造出两枚外侧光点，整体旋转即成对向公转的「电子」 */
.zibll-fab-anim-core::after {
  inset: auto;
  left: 50%;
  top: 50%;
  width: 5px;
  height: 5px;
  margin: -2.5px 0 0 -2.5px;
  border-radius: 50%;
  background: #fff;
  box-shadow:
    28px 0 0 0 var(--theme-color),
    28px 0 7px 2px var(--theme-color),
    -28px 0 0 0 var(--theme-color),
    -28px 0 7px 2px var(--theme-color);
  animation: zibll-fab-orbit 4.2s linear infinite reverse;
}

.zibll-fab-anim-core .zibll-ai-engine-fab-ic {
  animation: zibll-fab-charge-icon 2.8s ease-in-out infinite;
}

@keyframes zibll-fab-spin {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

@keyframes zibll-fab-orbit {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

@keyframes zibll-fab-halo {
  0%,
  100% {
    box-shadow: 0 0 6px 0 var(--theme-color);
  }
  50% {
    box-shadow: 0 0 18px 4px var(--theme-color);
  }
}

@keyframes zibll-fab-charge-icon {
  0%,
  100% {
    filter: brightness(1);
  }
  50% {
    filter: brightness(1.25) saturate(1.15);
  }
}

/* ══════════ 档位二：声呐脉冲（sonar）══════════
   两圈同心环错相从按钮后向外扩散并消隐，像主动声呐扫描 */
.zibll-fab-anim-sonar::before,
.zibll-fab-anim-sonar::after {
  border: 2px solid var(--theme-color);
  box-shadow: 0 0 10px var(--theme-color);
  animation: zibll-fab-sonar 2.6s cubic-bezier(0.22, 0.61, 0.36, 1) infinite;
}

.zibll-fab-anim-sonar::after {
  animation-delay: 1.3s;
}

.zibll-fab-anim-sonar .zibll-ai-engine-fab-ic {
  animation: zibll-fab-charge-icon 2.6s ease-in-out infinite;
}

@keyframes zibll-fab-sonar {
  0% {
    transform: scale(1);
    opacity: 0.95;
  }
  55% {
    opacity: 0.35;
  }
  100% {
    transform: scale(1.85);
    opacity: 0;
  }
}

/* 悬停时第二圈提前错相，避免与第一圈同相重叠（1.3s 延迟 vs 1.3s 周期） */
.zibll-fab-anim-sonar:hover::after {
  animation-delay: 0.65s;
}

/* ══════════ 档位三：故障干扰（glitch）══════════
   常态安静，每 4.2s 一次约 0.5s 的赛博故障：整个按钮离散频闪（反相/位移，
   steps 硬切不做插值）+ 图标色差撕裂 + 描边爆闪 + 全息扫描线自上而下跳扫 */
.zibll-ai-engine-fab.zibll-fab-anim-glitch {
  animation: zibll-fab-glitch-btn 4.2s steps(1, end) infinite;
}

.zibll-fab-anim-glitch::before {
  inset: -1px;
  border: 1px solid var(--theme-color);
  box-shadow: 0 0 8px var(--theme-color);
  opacity: 0.25;
  animation: zibll-fab-flicker 4.2s linear infinite;
}

.zibll-fab-anim-glitch::after {
  inset: auto;
  left: 0;
  right: 0;
  top: 0;
  height: 2px;
  border-radius: 0;
  background: var(--theme-color);
  box-shadow: 0 0 9px 1px var(--theme-color);
  opacity: 0;
  animation: zibll-fab-scan 4.2s steps(1, end) infinite;
}

.zibll-fab-anim-glitch .zibll-ai-engine-fab-ic {
  animation: zibll-fab-glitch-icon 4.2s steps(1, end) infinite;
}

@keyframes zibll-fab-glitch-btn {
  0%,
  75%,
  100% {
    filter: none;
    transform: none;
  }
  76% {
    filter: invert(1) hue-rotate(90deg);
    transform: translateX(-3px);
  }
  78% {
    filter: none;
    transform: translateX(3px);
  }
  80% {
    filter: invert(1);
    transform: translateX(-2px);
  }
  82% {
    filter: none;
    transform: translateX(2px);
  }
  84% {
    filter: invert(1) hue-rotate(-60deg);
    transform: translateX(-1px);
  }
  86% {
    filter: none;
    transform: none;
  }
}

@keyframes zibll-fab-glitch-icon {
  0%,
  75%,
  100% {
    filter: none;
  }
  76% {
    filter: drop-shadow(3px 0 var(--theme-color)) drop-shadow(-3px 0 #fff);
  }
  80% {
    filter: drop-shadow(-3px 0 var(--theme-color)) drop-shadow(3px 0 #fff);
  }
  84% {
    filter: drop-shadow(2px 0 #fff) drop-shadow(-2px 0 var(--theme-color));
  }
  86% {
    filter: none;
  }
}

@keyframes zibll-fab-flicker {
  0%,
  75%,
  100% {
    opacity: 0.25;
  }
  77%,
  83%,
  89% {
    opacity: 1;
  }
  86% {
    opacity: 0.1;
  }
}

@keyframes zibll-fab-scan {
  0%,
  74% {
    opacity: 0;
    transform: translateY(0);
  }
  76% {
    opacity: 0.95;
    transform: translateY(9px);
  }
  80% {
    opacity: 0.9;
    transform: translateY(23px);
  }
  84% {
    opacity: 0.9;
    transform: translateY(36px);
  }
  88% {
    opacity: 0.6;
    transform: translateY(16px);
  }
  91%,
  100% {
    opacity: 0;
    transform: translateY(0);
  }
}

/* ══════════ 档位四：无动效（none）══════════
   用 content:none 直接不生成伪元素盒：比 animation:none + opacity:0 干净，
   hover 态也不会漏出残影 */
.zibll-fab-anim-none::before,
.zibll-fab-anim-none::after {
  content: none;
}

.zibll-fab-anim-none .zibll-ai-engine-fab-ic {
  animation: none;
}

/* 悬停：三档统一加速（更「躁动」，强化视觉中心） */
.zibll-ai-engine-fab:hover::before,
.zibll-ai-engine-fab:hover::after {
  animation-duration: 1.2s;
}
.zibll-ai-engine-fab:hover .zibll-ai-engine-fab-ic {
  animation-duration: 4s;
}

/* 聊天窗口已打开：入口被窗口盖住，特效让位（不再抢视觉） */
.zibll-ai-engine-fab.zibll-fab-on {
  animation: none;
}
.zibll-ai-engine-fab.zibll-fab-on::before,
.zibll-ai-engine-fab.zibll-fab-on::after {
  content: none;
}
.zibll-ai-engine-fab.zibll-fab-on .zibll-ai-engine-fab-ic {
  animation: none;
}

/* 无障碍/低端机：跟随系统减少动效设置，静态化 */
@media (prefers-reduced-motion: reduce) {
  .zibll-ai-engine-fab {
    animation: none;
  }
  .zibll-ai-engine-fab::before,
  .zibll-ai-engine-fab::after {
    content: none;
  }
  .zibll-ai-engine-fab .zibll-ai-engine-fab-ic {
    animation: none;
  }
}
