bilibili 页面净化大师

净化 B站/哔哩哔哩 页面,支持「精简功能、播放器净化、过滤视频、过滤评论、全站黑白名单」,提供 300+ 功能,定制自己的 B 站

// ==UserScript==
// @name         bilibili 页面净化大师
// @namespace    http://tampermonkey.net/
// @version      4.0.9
// @author       festoney8
// @description  净化 B站/哔哩哔哩 页面,支持「精简功能、播放器净化、过滤视频、过滤评论、全站黑白名单」,提供 300+ 功能,定制自己的 B 站
// @license      MIT
// @icon         https://www.bilibili.com/favicon.ico
// @homepage     https://github.com/festoney8/bilibili-cleaner
// @supportURL   https://github.com/festoney8/bilibili-cleaner
// @match        *://*.bilibili.com/*
// @exclude      *://message.bilibili.com/pages/nav/header_sync
// @exclude      *://message.bilibili.com/pages/nav/index_new_pc_sync
// @exclude      *://data.bilibili.com/*
// @exclude      *://cm.bilibili.com/*
// @exclude      *://link.bilibili.com/*
// @exclude      *://passport.bilibili.com/*
// @exclude      *://api.bilibili.com/*
// @exclude      *://api.*.bilibili.com/*
// @exclude      *://*.chat.bilibili.com/*
// @exclude      *://member.bilibili.com/*
// @exclude      *://www.bilibili.com/correspond/*
// @exclude      *://live.bilibili.com/p/html/*
// @exclude      *://live.bilibili.com/live-room-play-game-together
// @exclude      *://www.bilibili.com/blackboard/comment-detail.html*
// @exclude      *://www.bilibili.com/blackboard/newplayer.html*
// @require      https://registry.npmmirror.com/vue/3.5.11/files/dist/vue.global.prod.js
// @grant        GM_getValue
// @grant        GM_registerMenuCommand
// @grant        GM_setValue
// @grant        unsafeWindow
// @run-at       document-start
// ==/UserScript==

(function (e$1) {
  'use strict';

  function _interopNamespaceDefault(e) {
    const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
    if (e) {
      for (const k in e) {
        if (k !== 'default') {
          const d = Object.getOwnPropertyDescriptor(e, k);
          Object.defineProperty(n, k, d.get ? d : {
            enumerable: true,
            get: () => e[k]
          });
        }
      }
    }
    n.default = e;
    return Object.freeze(n);
  }

  const e$1__namespace = /*#__PURE__*/_interopNamespaceDefault(e$1);

  var __defProp = Object.defineProperty;
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
  var _GM_getValue = /* @__PURE__ */ (() => typeof GM_getValue != "undefined" ? GM_getValue : void 0)();
  var _GM_registerMenuCommand = /* @__PURE__ */ (() => typeof GM_registerMenuCommand != "undefined" ? GM_registerMenuCommand : void 0)();
  var _GM_setValue = /* @__PURE__ */ (() => typeof GM_setValue != "undefined" ? GM_setValue : void 0)();
  var _unsafeWindow = /* @__PURE__ */ (() => typeof unsafeWindow != "undefined" ? unsafeWindow : void 0)();
  var isVue2 = false;
  /*!
   * pinia v2.2.4
   * (c) 2024 Eduardo San Martin Morote
   * @license MIT
   */
  let activePinia;
  const setActivePinia = (pinia) => activePinia = pinia;
  const piniaSymbol = (
    /* istanbul ignore next */
    Symbol()
  );
  function isPlainObject(o2) {
    return o2 && typeof o2 === "object" && Object.prototype.toString.call(o2) === "[object Object]" && typeof o2.toJSON !== "function";
  }
  var MutationType;
  (function(MutationType2) {
    MutationType2["direct"] = "direct";
    MutationType2["patchObject"] = "patch object";
    MutationType2["patchFunction"] = "patch function";
  })(MutationType || (MutationType = {}));
  function createPinia() {
    const scope = e$1.effectScope(true);
    const state = scope.run(() => e$1.ref({}));
    let _p = [];
    let toBeInstalled = [];
    const pinia = e$1.markRaw({
      install(app) {
        setActivePinia(pinia);
        {
          pinia._a = app;
          app.provide(piniaSymbol, pinia);
          app.config.globalProperties.$pinia = pinia;
          toBeInstalled.forEach((plugin) => _p.push(plugin));
          toBeInstalled = [];
        }
      },
      use(plugin) {
        if (!this._a && !isVue2) {
          toBeInstalled.push(plugin);
        } else {
          _p.push(plugin);
        }
        return this;
      },
      _p,
      // it's actually undefined here
      // @ts-expect-error
      _a: null,
      _e: scope,
      _s: /* @__PURE__ */ new Map(),
      state
    });
    return pinia;
  }
  const noop$1 = () => {
  };
  function addSubscription(subscriptions, callback, detached, onCleanup = noop$1) {
    subscriptions.push(callback);
    const removeSubscription = () => {
      const idx = subscriptions.indexOf(callback);
      if (idx > -1) {
        subscriptions.splice(idx, 1);
        onCleanup();
      }
    };
    if (!detached && e$1.getCurrentScope()) {
      e$1.onScopeDispose(removeSubscription);
    }
    return removeSubscription;
  }
  function triggerSubscriptions(subscriptions, ...args) {
    subscriptions.slice().forEach((callback) => {
      callback(...args);
    });
  }
  const fallbackRunWithContext = (fn2) => fn2();
  const ACTION_MARKER = Symbol();
  const ACTION_NAME = Symbol();
  function mergeReactiveObjects(target, patchToApply) {
    if (target instanceof Map && patchToApply instanceof Map) {
      patchToApply.forEach((value, key) => target.set(key, value));
    } else if (target instanceof Set && patchToApply instanceof Set) {
      patchToApply.forEach(target.add, target);
    }
    for (const key in patchToApply) {
      if (!patchToApply.hasOwnProperty(key))
        continue;
      const subPatch = patchToApply[key];
      const targetValue = target[key];
      if (isPlainObject(targetValue) && isPlainObject(subPatch) && target.hasOwnProperty(key) && !e$1.isRef(subPatch) && !e$1.isReactive(subPatch)) {
        target[key] = mergeReactiveObjects(targetValue, subPatch);
      } else {
        target[key] = subPatch;
      }
    }
    return target;
  }
  const skipHydrateSymbol = (
    /* istanbul ignore next */
    Symbol()
  );
  function shouldHydrate(obj) {
    return !isPlainObject(obj) || !obj.hasOwnProperty(skipHydrateSymbol);
  }
  const { assign } = Object;
  function isComputed(o2) {
    return !!(e$1.isRef(o2) && o2.effect);
  }
  function createOptionsStore(id, options, pinia, hot) {
    const { state, actions, getters } = options;
    const initialState = pinia.state.value[id];
    let store;
    function setup() {
      if (!initialState && true) {
        {
          pinia.state.value[id] = state ? state() : {};
        }
      }
      const localState = e$1.toRefs(pinia.state.value[id]);
      return assign(localState, actions, Object.keys(getters || {}).reduce((computedGetters, name) => {
        computedGetters[name] = e$1.markRaw(e$1.computed(() => {
          setActivePinia(pinia);
          const store2 = pinia._s.get(id);
          return getters[name].call(store2, store2);
        }));
        return computedGetters;
      }, {}));
    }
    store = createSetupStore(id, setup, options, pinia, hot, true);
    return store;
  }
  function createSetupStore($id, setup, options = {}, pinia, hot, isOptionsStore) {
    let scope;
    const optionsForPlugin = assign({ actions: {} }, options);
    const $subscribeOptions = { deep: true };
    let isListening;
    let isSyncListening;
    let subscriptions = [];
    let actionSubscriptions = [];
    let debuggerEvents;
    const initialState = pinia.state.value[$id];
    if (!isOptionsStore && !initialState && true) {
      {
        pinia.state.value[$id] = {};
      }
    }
    e$1.ref({});
    let activeListener;
    function $patch(partialStateOrMutator) {
      let subscriptionMutation;
      isListening = isSyncListening = false;
      if (typeof partialStateOrMutator === "function") {
        partialStateOrMutator(pinia.state.value[$id]);
        subscriptionMutation = {
          type: MutationType.patchFunction,
          storeId: $id,
          events: debuggerEvents
        };
      } else {
        mergeReactiveObjects(pinia.state.value[$id], partialStateOrMutator);
        subscriptionMutation = {
          type: MutationType.patchObject,
          payload: partialStateOrMutator,
          storeId: $id,
          events: debuggerEvents
        };
      }
      const myListenerId = activeListener = Symbol();
      e$1.nextTick().then(() => {
        if (activeListener === myListenerId) {
          isListening = true;
        }
      });
      isSyncListening = true;
      triggerSubscriptions(subscriptions, subscriptionMutation, pinia.state.value[$id]);
    }
    const $reset = isOptionsStore ? function $reset2() {
      const { state } = options;
      const newState = state ? state() : {};
      this.$patch(($state) => {
        assign($state, newState);
      });
    } : (
      /* istanbul ignore next */
      noop$1
    );
    function $dispose() {
      scope.stop();
      subscriptions = [];
      actionSubscriptions = [];
      pinia._s.delete($id);
    }
    const action = (fn2, name = "") => {
      if (ACTION_MARKER in fn2) {
        fn2[ACTION_NAME] = name;
        return fn2;
      }
      const wrappedAction = function() {
        setActivePinia(pinia);
        const args = Array.from(arguments);
        const afterCallbackList = [];
        const onErrorCallbackList = [];
        function after(callback) {
          afterCallbackList.push(callback);
        }
        function onError(callback) {
          onErrorCallbackList.push(callback);
        }
        triggerSubscriptions(actionSubscriptions, {
          args,
          name: wrappedAction[ACTION_NAME],
          store,
          after,
          onError
        });
        let ret;
        try {
          ret = fn2.apply(this && this.$id === $id ? this : store, args);
        } catch (error2) {
          triggerSubscriptions(onErrorCallbackList, error2);
          throw error2;
        }
        if (ret instanceof Promise) {
          return ret.then((value) => {
            triggerSubscriptions(afterCallbackList, value);
            return value;
          }).catch((error2) => {
            triggerSubscriptions(onErrorCallbackList, error2);
            return Promise.reject(error2);
          });
        }
        triggerSubscriptions(afterCallbackList, ret);
        return ret;
      };
      wrappedAction[ACTION_MARKER] = true;
      wrappedAction[ACTION_NAME] = name;
      return wrappedAction;
    };
    const partialStore = {
      _p: pinia,
      // _s: scope,
      $id,
      $onAction: addSubscription.bind(null, actionSubscriptions),
      $patch,
      $reset,
      $subscribe(callback, options2 = {}) {
        const removeSubscription = addSubscription(subscriptions, callback, options2.detached, () => stopWatcher());
        const stopWatcher = scope.run(() => e$1.watch(() => pinia.state.value[$id], (state) => {
          if (options2.flush === "sync" ? isSyncListening : isListening) {
            callback({
              storeId: $id,
              type: MutationType.direct,
              events: debuggerEvents
            }, state);
          }
        }, assign({}, $subscribeOptions, options2)));
        return removeSubscription;
      },
      $dispose
    };
    const store = e$1.reactive(partialStore);
    pinia._s.set($id, store);
    const runWithContext = pinia._a && pinia._a.runWithContext || fallbackRunWithContext;
    const setupStore = runWithContext(() => pinia._e.run(() => (scope = e$1.effectScope()).run(() => setup({ action }))));
    for (const key in setupStore) {
      const prop = setupStore[key];
      if (e$1.isRef(prop) && !isComputed(prop) || e$1.isReactive(prop)) {
        if (!isOptionsStore) {
          if (initialState && shouldHydrate(prop)) {
            if (e$1.isRef(prop)) {
              prop.value = initialState[key];
            } else {
              mergeReactiveObjects(prop, initialState[key]);
            }
          }
          {
            pinia.state.value[$id][key] = prop;
          }
        }
      } else if (typeof prop === "function") {
        const actionValue = action(prop, key);
        {
          setupStore[key] = actionValue;
        }
        optionsForPlugin.actions[key] = prop;
      } else ;
    }
    {
      assign(store, setupStore);
      assign(e$1.toRaw(store), setupStore);
    }
    Object.defineProperty(store, "$state", {
      get: () => pinia.state.value[$id],
      set: (state) => {
        $patch(($state) => {
          assign($state, state);
        });
      }
    });
    pinia._p.forEach((extender) => {
      {
        assign(store, scope.run(() => extender({
          store,
          app: pinia._a,
          pinia,
          options: optionsForPlugin
        })));
      }
    });
    if (initialState && isOptionsStore && options.hydrate) {
      options.hydrate(store.$state, initialState);
    }
    isListening = true;
    isSyncListening = true;
    return store;
  }
  // @__NO_SIDE_EFFECTS__
  function defineStore(idOrOptions, setup, setupOptions) {
    let id;
    let options;
    const isSetupStore = typeof setup === "function";
    if (typeof idOrOptions === "string") {
      id = idOrOptions;
      options = isSetupStore ? setupOptions : setup;
    } else {
      options = idOrOptions;
      id = idOrOptions.id;
    }
    function useStore(pinia, hot) {
      const hasContext = e$1.hasInjectionContext();
      pinia = // in test mode, ignore the argument provided as we can always retrieve a
      // pinia instance with getActivePinia()
      pinia || (hasContext ? e$1.inject(piniaSymbol, null) : null);
      if (pinia)
        setActivePinia(pinia);
      pinia = activePinia;
      if (!pinia._s.has(id)) {
        if (isSetupStore) {
          createSetupStore(id, setup, options, pinia);
        } else {
          createOptionsStore(id, options, pinia);
        }
      }
      const store = pinia._s.get(id);
      return store;
    }
    useStore.$id = id;
    return useStore;
  }
  function d$2(u2, e2, r2) {
    let i2 = e$1.ref(r2 == null ? void 0 : r2.value), f2 = e$1.computed(() => u2.value !== void 0);
    return [e$1.computed(() => f2.value ? u2.value : i2.value), function(t2) {
      return f2.value || (i2.value = t2), e2 == null ? void 0 : e2(t2);
    }];
  }
  var r$2;
  let n$3 = Symbol("headlessui.useid"), o$4 = 0;
  const i$4 = (r$2 = e$1__namespace.useId) != null ? r$2 : function() {
    return e$1__namespace.inject(n$3, () => `${++o$4}`)();
  };
  function o$3(e2) {
    var l2;
    if (e2 == null || e2.value == null) return null;
    let n2 = (l2 = e2.value.$el) != null ? l2 : e2.value;
    return n2 instanceof Node ? n2 : null;
  }
  function u$5(r2, n2, ...a2) {
    if (r2 in n2) {
      let e2 = n2[r2];
      return typeof e2 == "function" ? e2(...a2) : e2;
    }
    let t2 = new Error(`Tried to handle "${r2}" but there is no handler defined. Only defined handlers are: ${Object.keys(n2).map((e2) => `"${e2}"`).join(", ")}.`);
    throw Error.captureStackTrace && Error.captureStackTrace(t2, u$5), t2;
  }
  var i$3 = Object.defineProperty;
  var d$1 = (t2, e2, r2) => e2 in t2 ? i$3(t2, e2, { enumerable: true, configurable: true, writable: true, value: r2 }) : t2[e2] = r2;
  var n$2 = (t2, e2, r2) => (d$1(t2, typeof e2 != "symbol" ? e2 + "" : e2, r2), r2);
  let s$1 = class s {
    constructor() {
      n$2(this, "current", this.detect());
      n$2(this, "currentId", 0);
    }
    set(e2) {
      this.current !== e2 && (this.currentId = 0, this.current = e2);
    }
    reset() {
      this.set(this.detect());
    }
    nextId() {
      return ++this.currentId;
    }
    get isServer() {
      return this.current === "server";
    }
    get isClient() {
      return this.current === "client";
    }
    detect() {
      return typeof window == "undefined" || typeof document == "undefined" ? "server" : "client";
    }
  };
  let c$2 = new s$1();
  function i$2(r2) {
    if (c$2.isServer) return null;
    if (r2 instanceof Node) return r2.ownerDocument;
    if (r2 != null && r2.hasOwnProperty("value")) {
      let n2 = o$3(r2);
      if (n2) return n2.ownerDocument;
    }
    return document;
  }
  let c$1 = ["[contentEditable=true]", "[tabindex]", "a[href]", "area[href]", "button:not([disabled])", "iframe", "input:not([disabled])", "select:not([disabled])", "textarea:not([disabled])"].map((e2) => `${e2}:not([tabindex='-1'])`).join(",");
  var N$2 = ((n2) => (n2[n2.First = 1] = "First", n2[n2.Previous = 2] = "Previous", n2[n2.Next = 4] = "Next", n2[n2.Last = 8] = "Last", n2[n2.WrapAround = 16] = "WrapAround", n2[n2.NoScroll = 32] = "NoScroll", n2))(N$2 || {}), T$2 = ((o2) => (o2[o2.Error = 0] = "Error", o2[o2.Overflow = 1] = "Overflow", o2[o2.Success = 2] = "Success", o2[o2.Underflow = 3] = "Underflow", o2))(T$2 || {}), F = ((t2) => (t2[t2.Previous = -1] = "Previous", t2[t2.Next = 1] = "Next", t2))(F || {});
  var h = ((t2) => (t2[t2.Strict = 0] = "Strict", t2[t2.Loose = 1] = "Loose", t2))(h || {});
  function w$3(e2, r2 = 0) {
    var t2;
    return e2 === ((t2 = i$2(e2)) == null ? void 0 : t2.body) ? false : u$5(r2, { [0]() {
      return e2.matches(c$1);
    }, [1]() {
      let l2 = e2;
      for (; l2 !== null; ) {
        if (l2.matches(c$1)) return true;
        l2 = l2.parentElement;
      }
      return false;
    } });
  }
  var y$1 = ((t2) => (t2[t2.Keyboard = 0] = "Keyboard", t2[t2.Mouse = 1] = "Mouse", t2))(y$1 || {});
  typeof window != "undefined" && typeof document != "undefined" && (document.addEventListener("keydown", (e2) => {
    e2.metaKey || e2.altKey || e2.ctrlKey || (document.documentElement.dataset.headlessuiFocusVisible = "");
  }, true), document.addEventListener("click", (e2) => {
    e2.detail === 1 ? delete document.documentElement.dataset.headlessuiFocusVisible : e2.detail === 0 && (document.documentElement.dataset.headlessuiFocusVisible = "");
  }, true));
  function O$1(e2, r2 = (t2) => t2) {
    return e2.slice().sort((t2, l2) => {
      let o2 = r2(t2), i2 = r2(l2);
      if (o2 === null || i2 === null) return 0;
      let n2 = o2.compareDocumentPosition(i2);
      return n2 & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : n2 & Node.DOCUMENT_POSITION_PRECEDING ? 1 : 0;
    });
  }
  function t$1() {
    return /iPhone/gi.test(window.navigator.platform) || /Mac/gi.test(window.navigator.platform) && window.navigator.maxTouchPoints > 0;
  }
  function i$1() {
    return /Android/gi.test(window.navigator.userAgent);
  }
  function n$1() {
    return t$1() || i$1();
  }
  function u$4(e2, t2, n2) {
    c$2.isServer || e$1.watchEffect((o2) => {
      document.addEventListener(e2, t2, n2), o2(() => document.removeEventListener(e2, t2, n2));
    });
  }
  function w$2(e2, n2, t2) {
    c$2.isServer || e$1.watchEffect((o2) => {
      window.addEventListener(e2, n2, t2), o2(() => window.removeEventListener(e2, n2, t2));
    });
  }
  function w$1(f2, m, l2 = e$1.computed(() => true)) {
    function a2(e2, r2) {
      if (!l2.value || e2.defaultPrevented) return;
      let t2 = r2(e2);
      if (t2 === null || !t2.getRootNode().contains(t2)) return;
      let c2 = function o2(n2) {
        return typeof n2 == "function" ? o2(n2()) : Array.isArray(n2) || n2 instanceof Set ? n2 : [n2];
      }(f2);
      for (let o2 of c2) {
        if (o2 === null) continue;
        let n2 = o2 instanceof HTMLElement ? o2 : o$3(o2);
        if (n2 != null && n2.contains(t2) || e2.composed && e2.composedPath().includes(n2)) return;
      }
      return !w$3(t2, h.Loose) && t2.tabIndex !== -1 && e2.preventDefault(), m(e2, t2);
    }
    let u2 = e$1.ref(null);
    u$4("pointerdown", (e2) => {
      var r2, t2;
      l2.value && (u2.value = ((t2 = (r2 = e2.composedPath) == null ? void 0 : r2.call(e2)) == null ? void 0 : t2[0]) || e2.target);
    }, true), u$4("mousedown", (e2) => {
      var r2, t2;
      l2.value && (u2.value = ((t2 = (r2 = e2.composedPath) == null ? void 0 : r2.call(e2)) == null ? void 0 : t2[0]) || e2.target);
    }, true), u$4("click", (e2) => {
      n$1() || u2.value && (a2(e2, () => u2.value), u2.value = null);
    }, true), u$4("touchend", (e2) => a2(e2, () => e2.target instanceof HTMLElement ? e2.target : null), true), w$2("blur", (e2) => a2(e2, () => window.document.activeElement instanceof HTMLIFrameElement ? window.document.activeElement : null), true);
  }
  function r$1(t2, e2) {
    if (t2) return t2;
    let n2 = e2 != null ? e2 : "button";
    if (typeof n2 == "string" && n2.toLowerCase() === "button") return "button";
  }
  function s2(t2, e2) {
    let n2 = e$1.ref(r$1(t2.value.type, t2.value.as));
    return e$1.onMounted(() => {
      n2.value = r$1(t2.value.type, t2.value.as);
    }), e$1.watchEffect(() => {
      var u2;
      n2.value || o$3(e2) && o$3(e2) instanceof HTMLButtonElement && !((u2 = o$3(e2)) != null && u2.hasAttribute("type")) && (n2.value = "button");
    }), n2;
  }
  function r(e2) {
    return [e2.screenX, e2.screenY];
  }
  function u$3() {
    let e2 = e$1.ref([-1, -1]);
    return { wasMoved(n2) {
      let t2 = r(n2);
      return e2.value[0] === t2[0] && e2.value[1] === t2[1] ? false : (e2.value = t2, true);
    }, update(n2) {
      e2.value = r(n2);
    } };
  }
  var N$1 = ((o2) => (o2[o2.None = 0] = "None", o2[o2.RenderStrategy = 1] = "RenderStrategy", o2[o2.Static = 2] = "Static", o2))(N$1 || {}), S = ((e2) => (e2[e2.Unmount = 0] = "Unmount", e2[e2.Hidden = 1] = "Hidden", e2))(S || {});
  function A$1({ visible: r2 = true, features: t2 = 0, ourProps: e2, theirProps: o2, ...i2 }) {
    var a2;
    let n2 = j(o2, e2), l2 = Object.assign(i2, { props: n2 });
    if (r2 || t2 & 2 && n2.static) return y(l2);
    if (t2 & 1) {
      let d2 = (a2 = n2.unmount) == null || a2 ? 0 : 1;
      return u$5(d2, { [0]() {
        return null;
      }, [1]() {
        return y({ ...i2, props: { ...n2, hidden: true, style: { display: "none" } } });
      } });
    }
    return y(l2);
  }
  function y({ props: r2, attrs: t2, slots: e2, slot: o2, name: i2 }) {
    var m, h2;
    let { as: n2, ...l2 } = T$1(r2, ["unmount", "static"]), a2 = (m = e2.default) == null ? void 0 : m.call(e2, o2), d2 = {};
    if (o2) {
      let u2 = false, c2 = [];
      for (let [p2, f2] of Object.entries(o2)) typeof f2 == "boolean" && (u2 = true), f2 === true && c2.push(p2);
      u2 && (d2["data-headlessui-state"] = c2.join(" "));
    }
    if (n2 === "template") {
      if (a2 = b(a2 != null ? a2 : []), Object.keys(l2).length > 0 || Object.keys(t2).length > 0) {
        let [u2, ...c2] = a2 != null ? a2 : [];
        if (!v(u2) || c2.length > 0) throw new Error(['Passing props on "template"!', "", `The current component <${i2} /> is rendering a "template".`, "However we need to passthrough the following props:", Object.keys(l2).concat(Object.keys(t2)).map((s3) => s3.trim()).filter((s3, g2, R) => R.indexOf(s3) === g2).sort((s3, g2) => s3.localeCompare(g2)).map((s3) => `  - ${s3}`).join(`
`), "", "You can apply a few solutions:", ['Add an `as="..."` prop, to ensure that we render an actual element instead of a "template".', "Render a single element as the child so that we can forward the props onto that element."].map((s3) => `  - ${s3}`).join(`
`)].join(`
`));
        let p2 = j((h2 = u2.props) != null ? h2 : {}, l2, d2), f2 = e$1.cloneVNode(u2, p2, true);
        for (let s3 in p2) s3.startsWith("on") && (f2.props || (f2.props = {}), f2.props[s3] = p2[s3]);
        return f2;
      }
      return Array.isArray(a2) && a2.length === 1 ? a2[0] : a2;
    }
    return e$1.h(n2, Object.assign({}, l2, d2), { default: () => a2 });
  }
  function b(r2) {
    return r2.flatMap((t2) => t2.type === e$1.Fragment ? b(t2.children) : [t2]);
  }
  function j(...r2) {
    if (r2.length === 0) return {};
    if (r2.length === 1) return r2[0];
    let t2 = {}, e2 = {};
    for (let i2 of r2) for (let n2 in i2) n2.startsWith("on") && typeof i2[n2] == "function" ? (e2[n2] != null || (e2[n2] = []), e2[n2].push(i2[n2])) : t2[n2] = i2[n2];
    if (t2.disabled || t2["aria-disabled"]) return Object.assign(t2, Object.fromEntries(Object.keys(e2).map((i2) => [i2, void 0])));
    for (let i2 in e2) Object.assign(t2, { [i2](n2, ...l2) {
      let a2 = e2[i2];
      for (let d2 of a2) {
        if (n2 instanceof Event && n2.defaultPrevented) return;
        d2(n2, ...l2);
      }
    } });
    return t2;
  }
  function E$1(r2) {
    let t2 = Object.assign({}, r2);
    for (let e2 in t2) t2[e2] === void 0 && delete t2[e2];
    return t2;
  }
  function T$1(r2, t2 = []) {
    let e2 = Object.assign({}, r2);
    for (let o2 of t2) o2 in e2 && delete e2[o2];
    return e2;
  }
  function v(r2) {
    return r2 == null ? false : typeof r2.type == "string" || typeof r2.type == "object" || typeof r2.type == "function";
  }
  var u$2 = ((e2) => (e2[e2.None = 1] = "None", e2[e2.Focusable = 2] = "Focusable", e2[e2.Hidden = 4] = "Hidden", e2))(u$2 || {});
  let f$2 = e$1.defineComponent({ name: "Hidden", props: { as: { type: [Object, String], default: "div" }, features: { type: Number, default: 1 } }, setup(t2, { slots: n2, attrs: i2 }) {
    return () => {
      var r2;
      let { features: e2, ...d2 } = t2, o2 = { "aria-hidden": (e2 & 2) === 2 ? true : (r2 = d2["aria-hidden"]) != null ? r2 : void 0, hidden: (e2 & 4) === 4 ? true : void 0, style: { position: "fixed", top: 1, left: 1, width: 1, height: 0, padding: 0, margin: -1, overflow: "hidden", clip: "rect(0, 0, 0, 0)", whiteSpace: "nowrap", borderWidth: "0", ...(e2 & 4) === 4 && (e2 & 2) !== 2 && { display: "none" } } };
      return A$1({ ourProps: o2, theirProps: d2, slot: {}, attrs: i2, slots: n2, name: "Hidden" });
    };
  } });
  let n = Symbol("Context");
  var i = ((e2) => (e2[e2.Open = 1] = "Open", e2[e2.Closed = 2] = "Closed", e2[e2.Closing = 4] = "Closing", e2[e2.Opening = 8] = "Opening", e2))(i || {});
  function l() {
    return e$1.inject(n, null);
  }
  function t(o2) {
    e$1.provide(n, o2);
  }
  var o$2 = ((r2) => (r2.Space = " ", r2.Enter = "Enter", r2.Escape = "Escape", r2.Backspace = "Backspace", r2.Delete = "Delete", r2.ArrowLeft = "ArrowLeft", r2.ArrowUp = "ArrowUp", r2.ArrowRight = "ArrowRight", r2.ArrowDown = "ArrowDown", r2.Home = "Home", r2.End = "End", r2.PageUp = "PageUp", r2.PageDown = "PageDown", r2.Tab = "Tab", r2))(o$2 || {});
  function u$1(l2) {
    throw new Error("Unexpected object: " + l2);
  }
  var c = ((i2) => (i2[i2.First = 0] = "First", i2[i2.Previous = 1] = "Previous", i2[i2.Next = 2] = "Next", i2[i2.Last = 3] = "Last", i2[i2.Specific = 4] = "Specific", i2[i2.Nothing = 5] = "Nothing", i2))(c || {});
  function f$1(l2, n2) {
    let t2 = n2.resolveItems();
    if (t2.length <= 0) return null;
    let r2 = n2.resolveActiveIndex(), s3 = r2 != null ? r2 : -1;
    switch (l2.focus) {
      case 0: {
        for (let e2 = 0; e2 < t2.length; ++e2) if (!n2.resolveDisabled(t2[e2], e2, t2)) return e2;
        return r2;
      }
      case 1: {
        s3 === -1 && (s3 = t2.length);
        for (let e2 = s3 - 1; e2 >= 0; --e2) if (!n2.resolveDisabled(t2[e2], e2, t2)) return e2;
        return r2;
      }
      case 2: {
        for (let e2 = s3 + 1; e2 < t2.length; ++e2) if (!n2.resolveDisabled(t2[e2], e2, t2)) return e2;
        return r2;
      }
      case 3: {
        for (let e2 = t2.length - 1; e2 >= 0; --e2) if (!n2.resolveDisabled(t2[e2], e2, t2)) return e2;
        return r2;
      }
      case 4: {
        for (let e2 = 0; e2 < t2.length; ++e2) if (n2.resolveId(t2[e2], e2, t2) === l2.id) return e2;
        return r2;
      }
      case 5:
        return null;
      default:
        u$1(l2);
    }
  }
  function e(i2 = {}, s3 = null, t2 = []) {
    for (let [r2, n2] of Object.entries(i2)) o$1(t2, f(s3, r2), n2);
    return t2;
  }
  function f(i2, s3) {
    return i2 ? i2 + "[" + s3 + "]" : s3;
  }
  function o$1(i2, s3, t2) {
    if (Array.isArray(t2)) for (let [r2, n2] of t2.entries()) o$1(i2, f(s3, r2.toString()), n2);
    else t2 instanceof Date ? i2.push([s3, t2.toISOString()]) : typeof t2 == "boolean" ? i2.push([s3, t2 ? "1" : "0"]) : typeof t2 == "string" ? i2.push([s3, t2]) : typeof t2 == "number" ? i2.push([s3, `${t2}`]) : t2 == null ? i2.push([s3, ""]) : e(t2, s3, i2);
  }
  function p$1(i2) {
    var t2, r2;
    let s3 = (t2 = i2 == null ? void 0 : i2.form) != null ? t2 : i2.closest("form");
    if (s3) {
      for (let n2 of s3.elements) if (n2 !== i2 && (n2.tagName === "INPUT" && n2.type === "submit" || n2.tagName === "BUTTON" && n2.type === "submit" || n2.nodeName === "INPUT" && n2.type === "image")) {
        n2.click();
        return;
      }
      (r2 = s3.requestSubmit) == null || r2.call(s3);
    }
  }
  let u = Symbol("DescriptionContext");
  function w() {
    let t2 = e$1.inject(u, null);
    if (t2 === null) throw new Error("Missing parent");
    return t2;
  }
  function k$1({ slot: t2 = e$1.ref({}), name: o2 = "Description", props: s3 = {} } = {}) {
    let e2 = e$1.ref([]);
    function r2(n2) {
      return e2.value.push(n2), () => {
        let i2 = e2.value.indexOf(n2);
        i2 !== -1 && e2.value.splice(i2, 1);
      };
    }
    return e$1.provide(u, { register: r2, slot: t2, name: o2, props: s3 }), e$1.computed(() => e2.value.length > 0 ? e2.value.join(" ") : void 0);
  }
  e$1.defineComponent({ name: "Description", props: { as: { type: [Object, String], default: "p" }, id: { type: String, default: null } }, setup(t2, { attrs: o2, slots: s3 }) {
    var n2;
    let e2 = (n2 = t2.id) != null ? n2 : `headlessui-description-${i$4()}`, r2 = w();
    return e$1.onMounted(() => e$1.onUnmounted(r2.register(e2))), () => {
      let { name: i2 = "Description", slot: l2 = e$1.ref({}), props: d2 = {} } = r2, { ...c2 } = t2, f2 = { ...Object.entries(d2).reduce((a2, [g2, m]) => Object.assign(a2, { [g2]: e$1.unref(m) }), {}), id: e2 };
      return A$1({ ourProps: f2, theirProps: c2, slot: l2.value, attrs: o2, slots: s3, name: i2 });
    };
  } });
  var $$1 = ((o2) => (o2[o2.Open = 0] = "Open", o2[o2.Closed = 1] = "Closed", o2))($$1 || {});
  let T = Symbol("DisclosureContext");
  function O(t2) {
    let r2 = e$1.inject(T, null);
    if (r2 === null) {
      let o2 = new Error(`<${t2} /> is missing a parent <Disclosure /> component.`);
      throw Error.captureStackTrace && Error.captureStackTrace(o2, O), o2;
    }
    return r2;
  }
  let k = Symbol("DisclosurePanelContext");
  function U() {
    return e$1.inject(k, null);
  }
  let N = e$1.defineComponent({ name: "Disclosure", props: { as: { type: [Object, String], default: "template" }, defaultOpen: { type: [Boolean], default: false } }, setup(t$12, { slots: r2, attrs: o2 }) {
    let s3 = e$1.ref(t$12.defaultOpen ? 0 : 1), e2 = e$1.ref(null), i$12 = e$1.ref(null), n2 = { buttonId: e$1.ref(`headlessui-disclosure-button-${i$4()}`), panelId: e$1.ref(`headlessui-disclosure-panel-${i$4()}`), disclosureState: s3, panel: e2, button: i$12, toggleDisclosure() {
      s3.value = u$5(s3.value, { [0]: 1, [1]: 0 });
    }, closeDisclosure() {
      s3.value !== 1 && (s3.value = 1);
    }, close(l2) {
      n2.closeDisclosure();
      let a2 = (() => l2 ? l2 instanceof HTMLElement ? l2 : l2.value instanceof HTMLElement ? o$3(l2) : o$3(n2.button) : o$3(n2.button))();
      a2 == null || a2.focus();
    } };
    return e$1.provide(T, n2), t(e$1.computed(() => u$5(s3.value, { [0]: i.Open, [1]: i.Closed }))), () => {
      let { defaultOpen: l2, ...a2 } = t$12, c2 = { open: s3.value === 0, close: n2.close };
      return A$1({ theirProps: a2, ourProps: {}, slot: c2, slots: r2, attrs: o2, name: "Disclosure" });
    };
  } }), Q = e$1.defineComponent({ name: "DisclosureButton", props: { as: { type: [Object, String], default: "button" }, disabled: { type: [Boolean], default: false }, id: { type: String, default: null } }, setup(t2, { attrs: r2, slots: o2, expose: s$12 }) {
    let e2 = O("DisclosureButton"), i2 = U(), n2 = e$1.computed(() => i2 === null ? false : i2.value === e2.panelId.value);
    e$1.onMounted(() => {
      n2.value || t2.id !== null && (e2.buttonId.value = t2.id);
    }), e$1.onUnmounted(() => {
      n2.value || (e2.buttonId.value = null);
    });
    let l2 = e$1.ref(null);
    s$12({ el: l2, $el: l2 }), n2.value || e$1.watchEffect(() => {
      e2.button.value = l2.value;
    });
    let a2 = s2(e$1.computed(() => ({ as: t2.as, type: r2.type })), l2);
    function c2() {
      var u2;
      t2.disabled || (n2.value ? (e2.toggleDisclosure(), (u2 = o$3(e2.button)) == null || u2.focus()) : e2.toggleDisclosure());
    }
    function D(u2) {
      var S2;
      if (!t2.disabled) if (n2.value) switch (u2.key) {
        case o$2.Space:
        case o$2.Enter:
          u2.preventDefault(), u2.stopPropagation(), e2.toggleDisclosure(), (S2 = o$3(e2.button)) == null || S2.focus();
          break;
      }
      else switch (u2.key) {
        case o$2.Space:
        case o$2.Enter:
          u2.preventDefault(), u2.stopPropagation(), e2.toggleDisclosure();
          break;
      }
    }
    function v2(u2) {
      switch (u2.key) {
        case o$2.Space:
          u2.preventDefault();
          break;
      }
    }
    return () => {
      var C2;
      let u2 = { open: e2.disclosureState.value === 0 }, { id: S2, ...K2 } = t2, M = n2.value ? { ref: l2, type: a2.value, onClick: c2, onKeydown: D } : { id: (C2 = e2.buttonId.value) != null ? C2 : S2, ref: l2, type: a2.value, "aria-expanded": e2.disclosureState.value === 0, "aria-controls": e2.disclosureState.value === 0 || o$3(e2.panel) ? e2.panelId.value : void 0, disabled: t2.disabled ? true : void 0, onClick: c2, onKeydown: D, onKeyup: v2 };
      return A$1({ ourProps: M, theirProps: K2, slot: u2, attrs: r2, slots: o2, name: "DisclosureButton" });
    };
  } }), V = e$1.defineComponent({ name: "DisclosurePanel", props: { as: { type: [Object, String], default: "div" }, static: { type: Boolean, default: false }, unmount: { type: Boolean, default: true }, id: { type: String, default: null } }, setup(t2, { attrs: r2, slots: o2, expose: s3 }) {
    let e2 = O("DisclosurePanel");
    e$1.onMounted(() => {
      t2.id !== null && (e2.panelId.value = t2.id);
    }), e$1.onUnmounted(() => {
      e2.panelId.value = null;
    }), s3({ el: e2.panel, $el: e2.panel }), e$1.provide(k, e2.panelId);
    let i$12 = l(), n2 = e$1.computed(() => i$12 !== null ? (i$12.value & i.Open) === i.Open : e2.disclosureState.value === 0);
    return () => {
      var v2;
      let l2 = { open: e2.disclosureState.value === 0, close: e2.close }, { id: a2, ...c2 } = t2, D = { id: (v2 = e2.panelId.value) != null ? v2 : a2, ref: e2.panel };
      return A$1({ ourProps: D, theirProps: c2, slot: l2, attrs: r2, slots: o2, features: N$1.RenderStrategy | N$1.Static, visible: n2.value, name: "DisclosurePanel" });
    };
  } });
  let a$1 = /([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g;
  function o(e2) {
    var r2, i2;
    let n2 = (r2 = e2.innerText) != null ? r2 : "", t2 = e2.cloneNode(true);
    if (!(t2 instanceof HTMLElement)) return n2;
    let u2 = false;
    for (let f2 of t2.querySelectorAll('[hidden],[aria-hidden],[role="img"]')) f2.remove(), u2 = true;
    let l2 = u2 ? (i2 = t2.innerText) != null ? i2 : "" : n2;
    return a$1.test(l2) && (l2 = l2.replace(a$1, "")), l2;
  }
  function g(e2) {
    let n2 = e2.getAttribute("aria-label");
    if (typeof n2 == "string") return n2.trim();
    let t2 = e2.getAttribute("aria-labelledby");
    if (t2) {
      let u2 = t2.split(" ").map((l2) => {
        let r2 = document.getElementById(l2);
        if (r2) {
          let i2 = r2.getAttribute("aria-label");
          return typeof i2 == "string" ? i2.trim() : o(r2).trim();
        }
        return null;
      }).filter(Boolean);
      if (u2.length > 0) return u2.join(", ");
    }
    return o(e2).trim();
  }
  function p(a2) {
    let t2 = e$1.ref(""), r2 = e$1.ref("");
    return () => {
      let e2 = o$3(a2);
      if (!e2) return "";
      let l2 = e2.innerText;
      if (t2.value === l2) return r2.value;
      let u2 = g(e2).trim().toLowerCase();
      return t2.value = l2, r2.value = u2, u2;
    };
  }
  function pe(o2, b2) {
    return o2 === b2;
  }
  var ce = ((r2) => (r2[r2.Open = 0] = "Open", r2[r2.Closed = 1] = "Closed", r2))(ce || {}), ve = ((r2) => (r2[r2.Single = 0] = "Single", r2[r2.Multi = 1] = "Multi", r2))(ve || {}), be = ((r2) => (r2[r2.Pointer = 0] = "Pointer", r2[r2.Other = 1] = "Other", r2))(be || {});
  function me(o2) {
    requestAnimationFrame(() => requestAnimationFrame(o2));
  }
  let $ = Symbol("ListboxContext");
  function A(o2) {
    let b2 = e$1.inject($, null);
    if (b2 === null) {
      let r2 = new Error(`<${o2} /> is missing a parent <Listbox /> component.`);
      throw Error.captureStackTrace && Error.captureStackTrace(r2, A), r2;
    }
    return b2;
  }
  let Ie = e$1.defineComponent({ name: "Listbox", emits: { "update:modelValue": (o2) => true }, props: { as: { type: [Object, String], default: "template" }, disabled: { type: [Boolean], default: false }, by: { type: [String, Function], default: () => pe }, horizontal: { type: [Boolean], default: false }, modelValue: { type: [Object, String, Number, Boolean], default: void 0 }, defaultValue: { type: [Object, String, Number, Boolean], default: void 0 }, form: { type: String, optional: true }, name: { type: String, optional: true }, multiple: { type: [Boolean], default: false } }, inheritAttrs: false, setup(o2, { slots: b2, attrs: r2, emit: w2 }) {
    let n2 = e$1.ref(1), e$12 = e$1.ref(null), f2 = e$1.ref(null), v2 = e$1.ref(null), s3 = e$1.ref([]), m = e$1.ref(""), p2 = e$1.ref(null), a2 = e$1.ref(1);
    function u2(t2 = (i2) => i2) {
      let i2 = p2.value !== null ? s3.value[p2.value] : null, l2 = O$1(t2(s3.value.slice()), (O2) => o$3(O2.dataRef.domRef)), d2 = i2 ? l2.indexOf(i2) : null;
      return d2 === -1 && (d2 = null), { options: l2, activeOptionIndex: d2 };
    }
    let D = e$1.computed(() => o2.multiple ? 1 : 0), [y2, L] = d$2(e$1.computed(() => o2.modelValue), (t2) => w2("update:modelValue", t2), e$1.computed(() => o2.defaultValue)), M = e$1.computed(() => y2.value === void 0 ? u$5(D.value, { [1]: [], [0]: void 0 }) : y2.value), k2 = { listboxState: n2, value: M, mode: D, compare(t2, i2) {
      if (typeof o2.by == "string") {
        let l2 = o2.by;
        return (t2 == null ? void 0 : t2[l2]) === (i2 == null ? void 0 : i2[l2]);
      }
      return o2.by(t2, i2);
    }, orientation: e$1.computed(() => o2.horizontal ? "horizontal" : "vertical"), labelRef: e$12, buttonRef: f2, optionsRef: v2, disabled: e$1.computed(() => o2.disabled), options: s3, searchQuery: m, activeOptionIndex: p2, activationTrigger: a2, closeListbox() {
      o2.disabled || n2.value !== 1 && (n2.value = 1, p2.value = null);
    }, openListbox() {
      o2.disabled || n2.value !== 0 && (n2.value = 0);
    }, goToOption(t2, i2, l2) {
      if (o2.disabled || n2.value === 1) return;
      let d2 = u2(), O2 = f$1(t2 === c.Specific ? { focus: c.Specific, id: i2 } : { focus: t2 }, { resolveItems: () => d2.options, resolveActiveIndex: () => d2.activeOptionIndex, resolveId: (h2) => h2.id, resolveDisabled: (h2) => h2.dataRef.disabled });
      m.value = "", p2.value = O2, a2.value = l2 != null ? l2 : 1, s3.value = d2.options;
    }, search(t2) {
      if (o2.disabled || n2.value === 1) return;
      let l2 = m.value !== "" ? 0 : 1;
      m.value += t2.toLowerCase();
      let O2 = (p2.value !== null ? s3.value.slice(p2.value + l2).concat(s3.value.slice(0, p2.value + l2)) : s3.value).find((I) => I.dataRef.textValue.startsWith(m.value) && !I.dataRef.disabled), h2 = O2 ? s3.value.indexOf(O2) : -1;
      h2 === -1 || h2 === p2.value || (p2.value = h2, a2.value = 1);
    }, clearSearch() {
      o2.disabled || n2.value !== 1 && m.value !== "" && (m.value = "");
    }, registerOption(t2, i2) {
      let l2 = u2((d2) => [...d2, { id: t2, dataRef: i2 }]);
      s3.value = l2.options, p2.value = l2.activeOptionIndex;
    }, unregisterOption(t2) {
      let i2 = u2((l2) => {
        let d2 = l2.findIndex((O2) => O2.id === t2);
        return d2 !== -1 && l2.splice(d2, 1), l2;
      });
      s3.value = i2.options, p2.value = i2.activeOptionIndex, a2.value = 1;
    }, theirOnChange(t2) {
      o2.disabled || L(t2);
    }, select(t2) {
      o2.disabled || L(u$5(D.value, { [0]: () => t2, [1]: () => {
        let i2 = e$1.toRaw(k2.value.value).slice(), l2 = e$1.toRaw(t2), d2 = i2.findIndex((O2) => k2.compare(l2, e$1.toRaw(O2)));
        return d2 === -1 ? i2.push(l2) : i2.splice(d2, 1), i2;
      } }));
    } };
    w$1([f2, v2], (t2, i2) => {
      var l2;
      k2.closeListbox(), w$3(i2, h.Loose) || (t2.preventDefault(), (l2 = o$3(f2)) == null || l2.focus());
    }, e$1.computed(() => n2.value === 0)), e$1.provide($, k2), t(e$1.computed(() => u$5(n2.value, { [0]: i.Open, [1]: i.Closed })));
    let C2 = e$1.computed(() => {
      var t2;
      return (t2 = o$3(f2)) == null ? void 0 : t2.closest("form");
    });
    return e$1.onMounted(() => {
      e$1.watch([C2], () => {
        if (!C2.value || o2.defaultValue === void 0) return;
        function t2() {
          k2.theirOnChange(o2.defaultValue);
        }
        return C2.value.addEventListener("reset", t2), () => {
          var i2;
          (i2 = C2.value) == null || i2.removeEventListener("reset", t2);
        };
      }, { immediate: true });
    }), () => {
      let { name: t2, modelValue: i2, disabled: l2, form: d2, ...O2 } = o2, h2 = { open: n2.value === 0, disabled: l2, value: M.value };
      return e$1.h(e$1.Fragment, [...t2 != null && M.value != null ? e({ [t2]: M.value }).map(([I, Q2]) => e$1.h(f$2, E$1({ features: u$2.Hidden, key: I, as: "input", type: "hidden", hidden: true, readOnly: true, form: d2, disabled: l2, name: I, value: Q2 }))) : [], A$1({ ourProps: {}, theirProps: { ...r2, ...T$1(O2, ["defaultValue", "onUpdate:modelValue", "horizontal", "multiple", "by"]) }, slot: h2, slots: b2, attrs: r2, name: "Listbox" })]);
    };
  } });
  e$1.defineComponent({ name: "ListboxLabel", props: { as: { type: [Object, String], default: "label" }, id: { type: String, default: null } }, setup(o2, { attrs: b2, slots: r2 }) {
    var f2;
    let w2 = (f2 = o2.id) != null ? f2 : `headlessui-listbox-label-${i$4()}`, n2 = A("ListboxLabel");
    function e2() {
      var v2;
      (v2 = o$3(n2.buttonRef)) == null || v2.focus({ preventScroll: true });
    }
    return () => {
      let v2 = { open: n2.listboxState.value === 0, disabled: n2.disabled.value }, { ...s3 } = o2, m = { id: w2, ref: n2.labelRef, onClick: e2 };
      return A$1({ ourProps: m, theirProps: s3, slot: v2, attrs: b2, slots: r2, name: "ListboxLabel" });
    };
  } });
  let je = e$1.defineComponent({ name: "ListboxButton", props: { as: { type: [Object, String], default: "button" }, id: { type: String, default: null } }, setup(o2, { attrs: b2, slots: r2, expose: w2 }) {
    var p2;
    let n2 = (p2 = o2.id) != null ? p2 : `headlessui-listbox-button-${i$4()}`, e2 = A("ListboxButton");
    w2({ el: e2.buttonRef, $el: e2.buttonRef });
    function f2(a2) {
      switch (a2.key) {
        case o$2.Space:
        case o$2.Enter:
        case o$2.ArrowDown:
          a2.preventDefault(), e2.openListbox(), e$1.nextTick(() => {
            var u2;
            (u2 = o$3(e2.optionsRef)) == null || u2.focus({ preventScroll: true }), e2.value.value || e2.goToOption(c.First);
          });
          break;
        case o$2.ArrowUp:
          a2.preventDefault(), e2.openListbox(), e$1.nextTick(() => {
            var u2;
            (u2 = o$3(e2.optionsRef)) == null || u2.focus({ preventScroll: true }), e2.value.value || e2.goToOption(c.Last);
          });
          break;
      }
    }
    function v2(a2) {
      switch (a2.key) {
        case o$2.Space:
          a2.preventDefault();
          break;
      }
    }
    function s$12(a2) {
      e2.disabled.value || (e2.listboxState.value === 0 ? (e2.closeListbox(), e$1.nextTick(() => {
        var u2;
        return (u2 = o$3(e2.buttonRef)) == null ? void 0 : u2.focus({ preventScroll: true });
      })) : (a2.preventDefault(), e2.openListbox(), me(() => {
        var u2;
        return (u2 = o$3(e2.optionsRef)) == null ? void 0 : u2.focus({ preventScroll: true });
      })));
    }
    let m = s2(e$1.computed(() => ({ as: o2.as, type: b2.type })), e2.buttonRef);
    return () => {
      var y2, L;
      let a2 = { open: e2.listboxState.value === 0, disabled: e2.disabled.value, value: e2.value.value }, { ...u2 } = o2, D = { ref: e2.buttonRef, id: n2, type: m.value, "aria-haspopup": "listbox", "aria-controls": (y2 = o$3(e2.optionsRef)) == null ? void 0 : y2.id, "aria-expanded": e2.listboxState.value === 0, "aria-labelledby": e2.labelRef.value ? [(L = o$3(e2.labelRef)) == null ? void 0 : L.id, n2].join(" ") : void 0, disabled: e2.disabled.value === true ? true : void 0, onKeydown: f2, onKeyup: v2, onClick: s$12 };
      return A$1({ ourProps: D, theirProps: u2, slot: a2, attrs: b2, slots: r2, name: "ListboxButton" });
    };
  } }), Ae = e$1.defineComponent({ name: "ListboxOptions", props: { as: { type: [Object, String], default: "ul" }, static: { type: Boolean, default: false }, unmount: { type: Boolean, default: true }, id: { type: String, default: null } }, setup(o2, { attrs: b2, slots: r2, expose: w2 }) {
    var p2;
    let n2 = (p2 = o2.id) != null ? p2 : `headlessui-listbox-options-${i$4()}`, e2 = A("ListboxOptions"), f2 = e$1.ref(null);
    w2({ el: e2.optionsRef, $el: e2.optionsRef });
    function v2(a2) {
      switch (f2.value && clearTimeout(f2.value), a2.key) {
        case o$2.Space:
          if (e2.searchQuery.value !== "") return a2.preventDefault(), a2.stopPropagation(), e2.search(a2.key);
        case o$2.Enter:
          if (a2.preventDefault(), a2.stopPropagation(), e2.activeOptionIndex.value !== null) {
            let u2 = e2.options.value[e2.activeOptionIndex.value];
            e2.select(u2.dataRef.value);
          }
          e2.mode.value === 0 && (e2.closeListbox(), e$1.nextTick(() => {
            var u2;
            return (u2 = o$3(e2.buttonRef)) == null ? void 0 : u2.focus({ preventScroll: true });
          }));
          break;
        case u$5(e2.orientation.value, { vertical: o$2.ArrowDown, horizontal: o$2.ArrowRight }):
          return a2.preventDefault(), a2.stopPropagation(), e2.goToOption(c.Next);
        case u$5(e2.orientation.value, { vertical: o$2.ArrowUp, horizontal: o$2.ArrowLeft }):
          return a2.preventDefault(), a2.stopPropagation(), e2.goToOption(c.Previous);
        case o$2.Home:
        case o$2.PageUp:
          return a2.preventDefault(), a2.stopPropagation(), e2.goToOption(c.First);
        case o$2.End:
        case o$2.PageDown:
          return a2.preventDefault(), a2.stopPropagation(), e2.goToOption(c.Last);
        case o$2.Escape:
          a2.preventDefault(), a2.stopPropagation(), e2.closeListbox(), e$1.nextTick(() => {
            var u2;
            return (u2 = o$3(e2.buttonRef)) == null ? void 0 : u2.focus({ preventScroll: true });
          });
          break;
        case o$2.Tab:
          a2.preventDefault(), a2.stopPropagation();
          break;
        default:
          a2.key.length === 1 && (e2.search(a2.key), f2.value = setTimeout(() => e2.clearSearch(), 350));
          break;
      }
    }
    let s3 = l(), m = e$1.computed(() => s3 !== null ? (s3.value & i.Open) === i.Open : e2.listboxState.value === 0);
    return () => {
      var y2, L;
      let a2 = { open: e2.listboxState.value === 0 }, { ...u2 } = o2, D = { "aria-activedescendant": e2.activeOptionIndex.value === null || (y2 = e2.options.value[e2.activeOptionIndex.value]) == null ? void 0 : y2.id, "aria-multiselectable": e2.mode.value === 1 ? true : void 0, "aria-labelledby": (L = o$3(e2.buttonRef)) == null ? void 0 : L.id, "aria-orientation": e2.orientation.value, id: n2, onKeydown: v2, role: "listbox", tabIndex: 0, ref: e2.optionsRef };
      return A$1({ ourProps: D, theirProps: u2, slot: a2, attrs: b2, slots: r2, features: N$1.RenderStrategy | N$1.Static, visible: m.value, name: "ListboxOptions" });
    };
  } }), Fe = e$1.defineComponent({ name: "ListboxOption", props: { as: { type: [Object, String], default: "li" }, value: { type: [Object, String, Number, Boolean] }, disabled: { type: Boolean, default: false }, id: { type: String, default: null } }, setup(o2, { slots: b2, attrs: r2, expose: w2 }) {
    var C2;
    let n2 = (C2 = o2.id) != null ? C2 : `headlessui-listbox-option-${i$4()}`, e2 = A("ListboxOption"), f2 = e$1.ref(null);
    w2({ el: f2, $el: f2 });
    let v2 = e$1.computed(() => e2.activeOptionIndex.value !== null ? e2.options.value[e2.activeOptionIndex.value].id === n2 : false), s3 = e$1.computed(() => u$5(e2.mode.value, { [0]: () => e2.compare(e$1.toRaw(e2.value.value), e$1.toRaw(o2.value)), [1]: () => e$1.toRaw(e2.value.value).some((t2) => e2.compare(e$1.toRaw(t2), e$1.toRaw(o2.value))) })), m = e$1.computed(() => u$5(e2.mode.value, { [1]: () => {
      var i2;
      let t2 = e$1.toRaw(e2.value.value);
      return ((i2 = e2.options.value.find((l2) => t2.some((d2) => e2.compare(e$1.toRaw(d2), e$1.toRaw(l2.dataRef.value))))) == null ? void 0 : i2.id) === n2;
    }, [0]: () => s3.value })), p$12 = p(f2), a2 = e$1.computed(() => ({ disabled: o2.disabled, value: o2.value, get textValue() {
      return p$12();
    }, domRef: f2 }));
    e$1.onMounted(() => e2.registerOption(n2, a2)), e$1.onUnmounted(() => e2.unregisterOption(n2)), e$1.onMounted(() => {
      e$1.watch([e2.listboxState, s3], () => {
        e2.listboxState.value === 0 && s3.value && u$5(e2.mode.value, { [1]: () => {
          m.value && e2.goToOption(c.Specific, n2);
        }, [0]: () => {
          e2.goToOption(c.Specific, n2);
        } });
      }, { immediate: true });
    }), e$1.watchEffect(() => {
      e2.listboxState.value === 0 && v2.value && e2.activationTrigger.value !== 0 && e$1.nextTick(() => {
        var t2, i2;
        return (i2 = (t2 = o$3(f2)) == null ? void 0 : t2.scrollIntoView) == null ? void 0 : i2.call(t2, { block: "nearest" });
      });
    });
    function u2(t2) {
      if (o2.disabled) return t2.preventDefault();
      e2.select(o2.value), e2.mode.value === 0 && (e2.closeListbox(), e$1.nextTick(() => {
        var i2;
        return (i2 = o$3(e2.buttonRef)) == null ? void 0 : i2.focus({ preventScroll: true });
      }));
    }
    function D() {
      if (o2.disabled) return e2.goToOption(c.Nothing);
      e2.goToOption(c.Specific, n2);
    }
    let y2 = u$3();
    function L(t2) {
      y2.update(t2);
    }
    function M(t2) {
      y2.wasMoved(t2) && (o2.disabled || v2.value || e2.goToOption(c.Specific, n2, 0));
    }
    function k2(t2) {
      y2.wasMoved(t2) && (o2.disabled || v2.value && e2.goToOption(c.Nothing));
    }
    return () => {
      let { disabled: t2 } = o2, i2 = { active: v2.value, selected: s3.value, disabled: t2 }, { value: l2, disabled: d2, ...O2 } = o2, h2 = { id: n2, ref: f2, role: "option", tabIndex: t2 === true ? void 0 : -1, "aria-disabled": t2 === true ? true : void 0, "aria-selected": s3.value, disabled: void 0, onClick: u2, onFocus: D, onPointerenter: L, onMouseenter: L, onPointermove: M, onMousemove: M, onPointerleave: k2, onMouseleave: k2 };
      return A$1({ ourProps: h2, theirProps: O2, slot: i2, attrs: r2, slots: b2, name: "ListboxOption" });
    };
  } });
  let a = Symbol("LabelContext");
  function d() {
    let t2 = e$1.inject(a, null);
    if (t2 === null) {
      let n2 = new Error("You used a <Label /> component, but it is not inside a parent.");
      throw Error.captureStackTrace && Error.captureStackTrace(n2, d), n2;
    }
    return t2;
  }
  function E({ slot: t2 = {}, name: n2 = "Label", props: i2 = {} } = {}) {
    let e2 = e$1.ref([]);
    function o2(r2) {
      return e2.value.push(r2), () => {
        let l2 = e2.value.indexOf(r2);
        l2 !== -1 && e2.value.splice(l2, 1);
      };
    }
    return e$1.provide(a, { register: o2, slot: t2, name: n2, props: i2 }), e$1.computed(() => e2.value.length > 0 ? e2.value.join(" ") : void 0);
  }
  let K = e$1.defineComponent({ name: "Label", props: { as: { type: [Object, String], default: "label" }, passive: { type: [Boolean], default: false }, id: { type: String, default: null } }, setup(t2, { slots: n2, attrs: i2 }) {
    var r2;
    let e2 = (r2 = t2.id) != null ? r2 : `headlessui-label-${i$4()}`, o2 = d();
    return e$1.onMounted(() => e$1.onUnmounted(o2.register(e2))), () => {
      let { name: l2 = "Label", slot: p2 = {}, props: c2 = {} } = o2, { passive: f2, ...s3 } = t2, u2 = { ...Object.entries(c2).reduce((b2, [g2, m]) => Object.assign(b2, { [g2]: e$1.unref(m) }), {}), id: e2 };
      return f2 && (delete u2.onClick, delete u2.htmlFor, delete s3.onClick), A$1({ ourProps: u2, theirProps: s3, slot: p2, attrs: i2, slots: n2, name: l2 });
    };
  } });
  let C = Symbol("GroupContext"), oe = e$1.defineComponent({ name: "SwitchGroup", props: { as: { type: [Object, String], default: "template" } }, setup(l2, { slots: c2, attrs: i2 }) {
    let r2 = e$1.ref(null), f2 = E({ name: "SwitchLabel", props: { htmlFor: e$1.computed(() => {
      var t2;
      return (t2 = r2.value) == null ? void 0 : t2.id;
    }), onClick(t2) {
      r2.value && (t2.currentTarget.tagName === "LABEL" && t2.preventDefault(), r2.value.click(), r2.value.focus({ preventScroll: true }));
    } } }), p2 = k$1({ name: "SwitchDescription" });
    return e$1.provide(C, { switchRef: r2, labelledby: f2, describedby: p2 }), () => A$1({ theirProps: l2, ourProps: {}, slot: {}, slots: c2, attrs: i2, name: "SwitchGroup" });
  } }), ue = e$1.defineComponent({ name: "Switch", emits: { "update:modelValue": (l2) => true }, props: { as: { type: [Object, String], default: "button" }, modelValue: { type: Boolean, default: void 0 }, defaultChecked: { type: Boolean, optional: true }, form: { type: String, optional: true }, name: { type: String, optional: true }, value: { type: String, optional: true }, id: { type: String, default: null }, disabled: { type: Boolean, default: false }, tabIndex: { type: Number, default: 0 } }, inheritAttrs: false, setup(l2, { emit: c2, attrs: i2, slots: r2, expose: f2 }) {
    var h2;
    let p2 = (h2 = l2.id) != null ? h2 : `headlessui-switch-${i$4()}`, n2 = e$1.inject(C, null), [t2, s$12] = d$2(e$1.computed(() => l2.modelValue), (e2) => c2("update:modelValue", e2), e$1.computed(() => l2.defaultChecked));
    function m() {
      s$12(!t2.value);
    }
    let E2 = e$1.ref(null), o2 = n2 === null ? E2 : n2.switchRef, L = s2(e$1.computed(() => ({ as: l2.as, type: i2.type })), o2);
    f2({ el: o2, $el: o2 });
    function D(e2) {
      e2.preventDefault(), m();
    }
    function R(e2) {
      e2.key === o$2.Space ? (e2.preventDefault(), m()) : e2.key === o$2.Enter && p$1(e2.currentTarget);
    }
    function x(e2) {
      e2.preventDefault();
    }
    let d2 = e$1.computed(() => {
      var e2, a2;
      return (a2 = (e2 = o$3(o2)) == null ? void 0 : e2.closest) == null ? void 0 : a2.call(e2, "form");
    });
    return e$1.onMounted(() => {
      e$1.watch([d2], () => {
        if (!d2.value || l2.defaultChecked === void 0) return;
        function e2() {
          s$12(l2.defaultChecked);
        }
        return d2.value.addEventListener("reset", e2), () => {
          var a2;
          (a2 = d2.value) == null || a2.removeEventListener("reset", e2);
        };
      }, { immediate: true });
    }), () => {
      let { name: e2, value: a2, form: K2, tabIndex: y2, ...b2 } = l2, T2 = { checked: t2.value }, B = { id: p2, ref: o2, role: "switch", type: L.value, tabIndex: y2 === -1 ? 0 : y2, "aria-checked": t2.value, "aria-labelledby": n2 == null ? void 0 : n2.labelledby.value, "aria-describedby": n2 == null ? void 0 : n2.describedby.value, onClick: D, onKeyup: R, onKeypress: x };
      return e$1.h(e$1.Fragment, [e2 != null && t2.value != null ? e$1.h(f$2, E$1({ features: u$2.Hidden, as: "input", type: "checkbox", hidden: true, readOnly: true, checked: t2.value, form: K2, disabled: b2.disabled, name: e2, value: a2 })) : null, A$1({ ourProps: B, theirProps: { ...i2, ...T$1(b2, ["modelValue", "defaultChecked"]) }, slot: T2, attrs: i2, slots: r2, name: "Switch" })]);
    };
  } }), de = K;
  function render$2(_ctx, _cache) {
    return e$1.openBlock(), e$1.createElementBlock("svg", {
      xmlns: "http://www.w3.org/2000/svg",
      viewBox: "0 0 20 20",
      fill: "currentColor",
      "aria-hidden": "true",
      "data-slot": "icon"
    }, [
      e$1.createElementVNode("path", {
        "fill-rule": "evenodd",
        d: "M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z",
        "clip-rule": "evenodd"
      })
    ]);
  }
  function render$1(_ctx, _cache) {
    return e$1.openBlock(), e$1.createElementBlock("svg", {
      xmlns: "http://www.w3.org/2000/svg",
      viewBox: "0 0 20 20",
      fill: "currentColor",
      "aria-hidden": "true",
      "data-slot": "icon"
    }, [
      e$1.createElementVNode("path", {
        "fill-rule": "evenodd",
        d: "M10.53 3.47a.75.75 0 0 0-1.06 0L6.22 6.72a.75.75 0 0 0 1.06 1.06L10 5.06l2.72 2.72a.75.75 0 1 0 1.06-1.06l-3.25-3.25Zm-4.31 9.81 3.25 3.25a.75.75 0 0 0 1.06 0l3.25-3.25a.75.75 0 1 0-1.06-1.06L10 14.94l-2.72-2.72a.75.75 0 0 0-1.06 1.06Z",
        "clip-rule": "evenodd"
      })
    ]);
  }
  function render(_ctx, _cache) {
    return e$1.openBlock(), e$1.createElementBlock("svg", {
      xmlns: "http://www.w3.org/2000/svg",
      viewBox: "0 0 20 20",
      fill: "currentColor",
      "aria-hidden": "true",
      "data-slot": "icon"
    }, [
      e$1.createElementVNode("path", {
        "fill-rule": "evenodd",
        d: "M9.47 6.47a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 1 1-1.06 1.06L10 8.06l-3.72 3.72a.75.75 0 0 1-1.06-1.06l4.25-4.25Z",
        "clip-rule": "evenodd"
      })
    ]);
  }
  const _hoisted_1$9 = { class: "mx-auto w-full bg-white p-1.5" };
  const _sfc_main$e = /* @__PURE__ */ e$1.defineComponent({
    __name: "DisclosureComp",
    props: {
      title: {},
      isFold: { type: Boolean },
      isSpecial: { type: Boolean }
    },
    setup(__props) {
      return (_ctx, _cache) => {
        return e$1.openBlock(), e$1.createElementBlock("div", _hoisted_1$9, [
          e$1.createVNode(e$1.unref(N), {
            "default-open": !_ctx.isFold
          }, {
            default: e$1.withCtx(({ open }) => [
              e$1.createVNode(e$1.unref(Q), {
                class: e$1.normalizeClass(["flex w-full justify-between rounded-lg px-4 py-1.5 text-left font-bold outline-none", {
                  "bg-blue-100/60 text-blue-900 hover:bg-blue-100": !_ctx.isSpecial,
                  "bg-purple-100/60 text-purple-900 hover:bg-purple-100": _ctx.isSpecial
                }])
              }, {
                default: e$1.withCtx(() => [
                  e$1.createElementVNode("span", null, e$1.toDisplayString(_ctx.title || "Disclosure Title"), 1),
                  e$1.createVNode(e$1.unref(render), {
                    class: e$1.normalizeClass([{
                      "rotate-180": open,
                      "rotate-90": !open,
                      "text-blue-500": !_ctx.isSpecial,
                      "text-purple-500": _ctx.isSpecial
                    }, "h-6 w-6"])
                  }, null, 8, ["class"])
                ]),
                _: 2
              }, 1032, ["class"]),
              e$1.createVNode(e$1.unref(V), {
                unmount: false,
                class: "pl-3 pr-2 pt-2 text-gray-500"
              }, {
                default: e$1.withCtx(() => [
                  e$1.renderSlot(_ctx.$slots, "default")
                ]),
                _: 3
              })
            ]),
            _: 3
          }, 8, ["default-open"])
        ]);
      };
    }
  });
  const BiliCleanerStorage = {
    get: (key, defaultValue) => {
      return _GM_getValue(`BILICLEANER_${key}`, defaultValue);
    },
    set: (key, value) => {
      _GM_setValue(`BILICLEANER_${key}`, value);
    }
  };
  const settings = {
    enableDebugRules: !!BiliCleanerStorage.get("debug-rules"),
    enableDebugFilter: !!BiliCleanerStorage.get("debug-filters"),
    filterSign: "bili-cleaner-filtered"
    // 标记视频过滤器检测过的视频
  };
  const startTime = performance.now();
  let lastTime = startTime;
  let currTime = startTime;
  const wrapper = (loggingFunc, isEnable) => {
    if (isEnable) {
      return (...innerArgs) => {
        currTime = performance.now();
        const during = (currTime - lastTime).toFixed(1);
        loggingFunc(`[bili-cleaner] ${during} / ${currTime.toFixed(0)} ms |`, ...innerArgs);
        lastTime = currTime;
      };
    }
    return (..._args) => {
    };
  };
  const log = wrapper(console.log, true);
  const error = wrapper(console.error, true);
  const debugFilter = wrapper(console.log, settings.enableDebugFilter);
  const bvidPattern = /(BV[1-9A-HJ-NP-Za-km-z]+)/;
  const matchBvid = (s3) => {
    var _a;
    return ((_a = bvidPattern.exec(s3)) == null ? void 0 : _a[1]) ?? null;
  };
  const avidbvidPattern = /(av\d+|BV[1-9A-HJ-NP-Za-km-z]+)/;
  const matchAvidBvid = (s3) => {
    var _a;
    return ((_a = avidbvidPattern.exec(s3)) == null ? void 0 : _a[1]) ?? null;
  };
  const convertTimeToSec = (timeStr) => {
    timeStr = timeStr.trim();
    if (/^\d+:\d\d:\d\d$/.test(timeStr)) {
      const parts = timeStr.split(":");
      return parseInt(parts[0]) * 3600 + parseInt(parts[1]) * 60 + parseInt(parts[2]);
    }
    if (/^\d\d:\d\d$/.test(timeStr)) {
      const parts = timeStr.split(":");
      return parseInt(parts[0]) * 60 + parseInt(parts[1]);
    }
    return Infinity;
  };
  const convertDateToDays = (dateStr) => {
    if (dateStr.includes("小时前")) {
      return 0;
    }
    dateStr = dateStr.replace("·", "").trim();
    if (/^\d{1,2}-\d{1,2}$/.test(dateStr)) {
      const [month, day] = dateStr.split("-").map(Number);
      let target = new Date((/* @__PURE__ */ new Date()).getFullYear(), month - 1, day).getTime();
      const today = (/* @__PURE__ */ new Date()).getTime();
      if (target > today) {
        target = new Date((/* @__PURE__ */ new Date()).getFullYear() - 1, month - 1, day).getTime();
      }
      return (today - target) / 864e5;
    }
    if (/^\d{4}-\d{1,2}-\d{1,2}$/.test(dateStr)) {
      const [year, month, day] = dateStr.split("-").map(Number);
      const target = new Date(year, month - 1, day).getTime();
      const today = (/* @__PURE__ */ new Date()).getTime();
      return (today - target) / 864e5;
    }
    return 0;
  };
  const calcQuality = (ratio) => {
    const A2 = -9.881;
    const B = 0.6463;
    const C2 = 0.3829;
    const D = 168.6;
    const ans2 = (A2 - D) / (1 + Math.pow(ratio / C2, B)) + D;
    return ans2 > 0 ? ans2 : 0;
  };
  const hideEle = (ele) => {
    ele.style.setProperty("display", "none", "important");
  };
  const showEle = (ele) => {
    if (ele.style.display === "none") {
      ele.style.removeProperty("display");
    }
  };
  const isEleHide = (ele) => {
    return ele.style.display === "none";
  };
  const waitForEle = async (watchEle, selector, isTargetNode) => {
    if (!selector) {
      return null;
    }
    let ele = watchEle.querySelector(selector);
    if (ele) {
      return ele;
    }
    return await new Promise((resolve) => {
      const observer = new MutationObserver((mutationList) => {
        mutationList.forEach((mutation) => {
          if (mutation.addedNodes) {
            mutation.addedNodes.forEach((node) => {
              if (node instanceof HTMLElement && isTargetNode(node)) {
                observer.disconnect();
                ele = watchEle.querySelector(selector);
                resolve(ele);
              }
            });
          }
        });
      });
      observer.observe(watchEle, { childList: true, subtree: true });
    });
  };
  const orderedUniq = (arr) => {
    return Array.from(new Set(arr));
  };
  function tryOnScopeDispose(fn2) {
    if (e$1.getCurrentScope()) {
      e$1.onScopeDispose(fn2);
      return true;
    }
    return false;
  }
  function toValue(r2) {
    return typeof r2 === "function" ? r2() : e$1.unref(r2);
  }
  const isClient = typeof window !== "undefined" && typeof document !== "undefined";
  typeof WorkerGlobalScope !== "undefined" && globalThis instanceof WorkerGlobalScope;
  const notNullish = (val) => val != null;
  const toString = Object.prototype.toString;
  const isObject = (val) => toString.call(val) === "[object Object]";
  const noop = () => {
  };
  function createFilterWrapper(filter, fn2) {
    function wrapper2(...args) {
      return new Promise((resolve, reject) => {
        Promise.resolve(filter(() => fn2.apply(this, args), { fn: fn2, thisArg: this, args })).then(resolve).catch(reject);
      });
    }
    return wrapper2;
  }
  const bypassFilter = (invoke2) => {
    return invoke2();
  };
  function throttleFilter(...args) {
    let lastExec = 0;
    let timer;
    let isLeading = true;
    let lastRejector = noop;
    let lastValue;
    let ms;
    let trailing;
    let leading;
    let rejectOnCancel;
    if (!e$1.isRef(args[0]) && typeof args[0] === "object")
      ({ delay: ms, trailing = true, leading = true, rejectOnCancel = false } = args[0]);
    else
      [ms, trailing = true, leading = true, rejectOnCancel = false] = args;
    const clear = () => {
      if (timer) {
        clearTimeout(timer);
        timer = void 0;
        lastRejector();
        lastRejector = noop;
      }
    };
    const filter = (_invoke) => {
      const duration = toValue(ms);
      const elapsed = Date.now() - lastExec;
      const invoke2 = () => {
        return lastValue = _invoke();
      };
      clear();
      if (duration <= 0) {
        lastExec = Date.now();
        return invoke2();
      }
      if (elapsed > duration && (leading || !isLeading)) {
        lastExec = Date.now();
        invoke2();
      } else if (trailing) {
        lastValue = new Promise((resolve, reject) => {
          lastRejector = rejectOnCancel ? reject : resolve;
          timer = setTimeout(() => {
            lastExec = Date.now();
            isLeading = true;
            resolve(invoke2());
            clear();
          }, Math.max(0, duration - elapsed));
        });
      }
      if (!leading && !timer)
        timer = setTimeout(() => isLeading = true, duration);
      isLeading = false;
      return lastValue;
    };
    return filter;
  }
  function pausableFilter(extendFilter = bypassFilter) {
    const isActive = e$1.ref(true);
    function pause() {
      isActive.value = false;
    }
    function resume() {
      isActive.value = true;
    }
    const eventFilter = (...args) => {
      if (isActive.value)
        extendFilter(...args);
    };
    return { isActive: e$1.readonly(isActive), pause, resume, eventFilter };
  }
  function getLifeCycleTarget(target) {
    return e$1.getCurrentInstance();
  }
  function watchWithFilter(source, cb, options = {}) {
    const {
      eventFilter = bypassFilter,
      ...watchOptions
    } = options;
    return e$1.watch(
      source,
      createFilterWrapper(
        eventFilter,
        cb
      ),
      watchOptions
    );
  }
  function watchPausable(source, cb, options = {}) {
    const {
      eventFilter: filter,
      ...watchOptions
    } = options;
    const { eventFilter, pause, resume, isActive } = pausableFilter(filter);
    const stop = watchWithFilter(
      source,
      cb,
      {
        ...watchOptions,
        eventFilter
      }
    );
    return { stop, pause, resume, isActive };
  }
  function toRefs(objectRef, options = {}) {
    if (!e$1.isRef(objectRef))
      return e$1.toRefs(objectRef);
    const result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};
    for (const key in objectRef.value) {
      result[key] = e$1.customRef(() => ({
        get() {
          return objectRef.value[key];
        },
        set(v2) {
          var _a;
          const replaceRef = (_a = toValue(options.replaceRef)) != null ? _a : true;
          if (replaceRef) {
            if (Array.isArray(objectRef.value)) {
              const copy = [...objectRef.value];
              copy[key] = v2;
              objectRef.value = copy;
            } else {
              const newObject = { ...objectRef.value, [key]: v2 };
              Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));
              objectRef.value = newObject;
            }
          } else {
            objectRef.value[key] = v2;
          }
        }
      }));
    }
    return result;
  }
  function tryOnMounted(fn2, sync = true, target) {
    const instance = getLifeCycleTarget();
    if (instance)
      e$1.onMounted(fn2, target);
    else if (sync)
      fn2();
    else
      e$1.nextTick(fn2);
  }
  function watchThrottled(source, cb, options = {}) {
    const {
      throttle = 0,
      trailing = true,
      leading = true,
      ...watchOptions
    } = options;
    return watchWithFilter(
      source,
      cb,
      {
        ...watchOptions,
        eventFilter: throttleFilter(throttle, trailing, leading)
      }
    );
  }
  const defaultWindow = isClient ? window : void 0;
  function unrefElement(elRef) {
    var _a;
    const plain = toValue(elRef);
    return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;
  }
  function useEventListener(...args) {
    let target;
    let events2;
    let listeners;
    let options;
    if (typeof args[0] === "string" || Array.isArray(args[0])) {
      [events2, listeners, options] = args;
      target = defaultWindow;
    } else {
      [target, events2, listeners, options] = args;
    }
    if (!target)
      return noop;
    if (!Array.isArray(events2))
      events2 = [events2];
    if (!Array.isArray(listeners))
      listeners = [listeners];
    const cleanups = [];
    const cleanup = () => {
      cleanups.forEach((fn2) => fn2());
      cleanups.length = 0;
    };
    const register = (el, event, listener, options2) => {
      el.addEventListener(event, listener, options2);
      return () => el.removeEventListener(event, listener, options2);
    };
    const stopWatch = e$1.watch(
      () => [unrefElement(target), toValue(options)],
      ([el, options2]) => {
        cleanup();
        if (!el)
          return;
        const optionsClone = isObject(options2) ? { ...options2 } : options2;
        cleanups.push(
          ...events2.flatMap((event) => {
            return listeners.map((listener) => register(el, event, listener, optionsClone));
          })
        );
      },
      { immediate: true, flush: "post" }
    );
    const stop = () => {
      stopWatch();
      cleanup();
    };
    tryOnScopeDispose(stop);
    return stop;
  }
  function useMounted() {
    const isMounted = e$1.ref(false);
    const instance = e$1.getCurrentInstance();
    if (instance) {
      e$1.onMounted(() => {
        isMounted.value = true;
      }, instance);
    }
    return isMounted;
  }
  function useSupported(callback) {
    const isMounted = useMounted();
    return e$1.computed(() => {
      isMounted.value;
      return Boolean(callback());
    });
  }
  function useMutationObserver(target, callback, options = {}) {
    const { window: window2 = defaultWindow, ...mutationOptions } = options;
    let observer;
    const isSupported = useSupported(() => window2 && "MutationObserver" in window2);
    const cleanup = () => {
      if (observer) {
        observer.disconnect();
        observer = void 0;
      }
    };
    const targets = e$1.computed(() => {
      const value = toValue(target);
      const items = (Array.isArray(value) ? value : [value]).map(unrefElement).filter(notNullish);
      return new Set(items);
    });
    const stopWatch = e$1.watch(
      () => targets.value,
      (targets2) => {
        cleanup();
        if (isSupported.value && targets2.size) {
          observer = new MutationObserver(callback);
          targets2.forEach((el) => observer.observe(el, mutationOptions));
        }
      },
      { immediate: true, flush: "post" }
    );
    const takeRecords = () => {
      return observer == null ? void 0 : observer.takeRecords();
    };
    const stop = () => {
      stopWatch();
      cleanup();
    };
    tryOnScopeDispose(stop);
    return {
      isSupported,
      stop,
      takeRecords
    };
  }
  function useMediaQuery(query, options = {}) {
    const { window: window2 = defaultWindow } = options;
    const isSupported = useSupported(() => window2 && "matchMedia" in window2 && typeof window2.matchMedia === "function");
    let mediaQuery;
    const matches = e$1.ref(false);
    const handler = (event) => {
      matches.value = event.matches;
    };
    const cleanup = () => {
      if (!mediaQuery)
        return;
      if ("removeEventListener" in mediaQuery)
        mediaQuery.removeEventListener("change", handler);
      else
        mediaQuery.removeListener(handler);
    };
    const stopWatch = e$1.watchEffect(() => {
      if (!isSupported.value)
        return;
      cleanup();
      mediaQuery = window2.matchMedia(toValue(query));
      if ("addEventListener" in mediaQuery)
        mediaQuery.addEventListener("change", handler);
      else
        mediaQuery.addListener(handler);
      matches.value = mediaQuery.matches;
    });
    tryOnScopeDispose(() => {
      stopWatch();
      cleanup();
      mediaQuery = void 0;
    });
    return matches;
  }
  const _global = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
  const globalKey = "__vueuse_ssr_handlers__";
  const handlers = /* @__PURE__ */ getHandlers();
  function getHandlers() {
    if (!(globalKey in _global))
      _global[globalKey] = _global[globalKey] || {};
    return _global[globalKey];
  }
  function getSSRHandler(key, fallback) {
    return handlers[key] || fallback;
  }
  function guessSerializerType(rawInit) {
    return rawInit == null ? "any" : rawInit instanceof Set ? "set" : rawInit instanceof Map ? "map" : rawInit instanceof Date ? "date" : typeof rawInit === "boolean" ? "boolean" : typeof rawInit === "string" ? "string" : typeof rawInit === "object" ? "object" : !Number.isNaN(rawInit) ? "number" : "any";
  }
  const StorageSerializers = {
    boolean: {
      read: (v2) => v2 === "true",
      write: (v2) => String(v2)
    },
    object: {
      read: (v2) => JSON.parse(v2),
      write: (v2) => JSON.stringify(v2)
    },
    number: {
      read: (v2) => Number.parseFloat(v2),
      write: (v2) => String(v2)
    },
    any: {
      read: (v2) => v2,
      write: (v2) => String(v2)
    },
    string: {
      read: (v2) => v2,
      write: (v2) => String(v2)
    },
    map: {
      read: (v2) => new Map(JSON.parse(v2)),
      write: (v2) => JSON.stringify(Array.from(v2.entries()))
    },
    set: {
      read: (v2) => new Set(JSON.parse(v2)),
      write: (v2) => JSON.stringify(Array.from(v2))
    },
    date: {
      read: (v2) => new Date(v2),
      write: (v2) => v2.toISOString()
    }
  };
  const customStorageEventName = "vueuse-storage";
  function useStorage(key, defaults2, storage, options = {}) {
    var _a;
    const {
      flush = "pre",
      deep = true,
      listenToStorageChanges = true,
      writeDefaults = true,
      mergeDefaults = false,
      shallow,
      window: window2 = defaultWindow,
      eventFilter,
      onError = (e2) => {
        console.error(e2);
      },
      initOnMounted
    } = options;
    const data = (shallow ? e$1.shallowRef : e$1.ref)(typeof defaults2 === "function" ? defaults2() : defaults2);
    if (!storage) {
      try {
        storage = getSSRHandler("getDefaultStorage", () => {
          var _a2;
          return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;
        })();
      } catch (e2) {
        onError(e2);
      }
    }
    if (!storage)
      return data;
    const rawInit = toValue(defaults2);
    const type = guessSerializerType(rawInit);
    const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];
    const { pause: pauseWatch, resume: resumeWatch } = watchPausable(
      data,
      () => write(data.value),
      { flush, deep, eventFilter }
    );
    if (window2 && listenToStorageChanges) {
      tryOnMounted(() => {
        if (storage instanceof Storage)
          useEventListener(window2, "storage", update);
        else
          useEventListener(window2, customStorageEventName, updateFromCustomEvent);
        if (initOnMounted)
          update();
      });
    }
    if (!initOnMounted)
      update();
    function dispatchWriteEvent(oldValue, newValue) {
      if (window2) {
        const payload = {
          key,
          oldValue,
          newValue,
          storageArea: storage
        };
        window2.dispatchEvent(storage instanceof Storage ? new StorageEvent("storage", payload) : new CustomEvent(customStorageEventName, {
          detail: payload
        }));
      }
    }
    function write(v2) {
      try {
        const oldValue = storage.getItem(key);
        if (v2 == null) {
          dispatchWriteEvent(oldValue, null);
          storage.removeItem(key);
        } else {
          const serialized = serializer.write(v2);
          if (oldValue !== serialized) {
            storage.setItem(key, serialized);
            dispatchWriteEvent(oldValue, serialized);
          }
        }
      } catch (e2) {
        onError(e2);
      }
    }
    function read(event) {
      const rawValue = event ? event.newValue : storage.getItem(key);
      if (rawValue == null) {
        if (writeDefaults && rawInit != null)
          storage.setItem(key, serializer.write(rawInit));
        return rawInit;
      } else if (!event && mergeDefaults) {
        const value = serializer.read(rawValue);
        if (typeof mergeDefaults === "function")
          return mergeDefaults(value, rawInit);
        else if (type === "object" && !Array.isArray(value))
          return { ...rawInit, ...value };
        return value;
      } else if (typeof rawValue !== "string") {
        return rawValue;
      } else {
        return serializer.read(rawValue);
      }
    }
    function update(event) {
      if (event && event.storageArea !== storage)
        return;
      if (event && event.key == null) {
        data.value = rawInit;
        return;
      }
      if (event && event.key !== key)
        return;
      pauseWatch();
      try {
        if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))
          data.value = read(event);
      } catch (e2) {
        onError(e2);
      } finally {
        if (event)
          e$1.nextTick(resumeWatch);
        else
          resumeWatch();
      }
    }
    function updateFromCustomEvent(event) {
      update(event.detail);
    }
    return data;
  }
  function useDraggable(target, options = {}) {
    var _a, _b;
    const {
      pointerTypes,
      preventDefault: preventDefault2,
      stopPropagation,
      exact,
      onMove,
      onEnd,
      onStart,
      initialValue,
      axis = "both",
      draggingElement = defaultWindow,
      containerElement,
      handle: draggingHandle = target,
      buttons = [0]
    } = options;
    const position = e$1.ref(
      (_a = toValue(initialValue)) != null ? _a : { x: 0, y: 0 }
    );
    const pressedDelta = e$1.ref();
    const filterEvent = (e2) => {
      if (pointerTypes)
        return pointerTypes.includes(e2.pointerType);
      return true;
    };
    const handleEvent = (e2) => {
      if (toValue(preventDefault2))
        e2.preventDefault();
      if (toValue(stopPropagation))
        e2.stopPropagation();
    };
    const start = (e2) => {
      var _a2;
      if (!toValue(buttons).includes(e2.button))
        return;
      if (toValue(options.disabled) || !filterEvent(e2))
        return;
      if (toValue(exact) && e2.target !== toValue(target))
        return;
      const container = toValue(containerElement);
      const containerRect = (_a2 = container == null ? void 0 : container.getBoundingClientRect) == null ? void 0 : _a2.call(container);
      const targetRect = toValue(target).getBoundingClientRect();
      const pos = {
        x: e2.clientX - (container ? targetRect.left - containerRect.left + container.scrollLeft : targetRect.left),
        y: e2.clientY - (container ? targetRect.top - containerRect.top + container.scrollTop : targetRect.top)
      };
      if ((onStart == null ? void 0 : onStart(pos, e2)) === false)
        return;
      pressedDelta.value = pos;
      handleEvent(e2);
    };
    const move = (e2) => {
      if (toValue(options.disabled) || !filterEvent(e2))
        return;
      if (!pressedDelta.value)
        return;
      const container = toValue(containerElement);
      const targetRect = toValue(target).getBoundingClientRect();
      let { x, y: y2 } = position.value;
      if (axis === "x" || axis === "both") {
        x = e2.clientX - pressedDelta.value.x;
        if (container)
          x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width);
      }
      if (axis === "y" || axis === "both") {
        y2 = e2.clientY - pressedDelta.value.y;
        if (container)
          y2 = Math.min(Math.max(0, y2), container.scrollHeight - targetRect.height);
      }
      position.value = {
        x,
        y: y2
      };
      onMove == null ? void 0 : onMove(position.value, e2);
      handleEvent(e2);
    };
    const end = (e2) => {
      if (toValue(options.disabled) || !filterEvent(e2))
        return;
      if (!pressedDelta.value)
        return;
      pressedDelta.value = void 0;
      onEnd == null ? void 0 : onEnd(position.value, e2);
      handleEvent(e2);
    };
    if (isClient) {
      const config = { capture: (_b = options.capture) != null ? _b : true };
      useEventListener(draggingHandle, "pointerdown", start, config);
      useEventListener(draggingElement, "pointermove", move, config);
      useEventListener(draggingElement, "pointerup", end, config);
    }
    return {
      ...toRefs(position),
      position,
      isDragging: e$1.computed(() => !!pressedDelta.value),
      style: e$1.computed(
        () => `left:${position.value.x}px;top:${position.value.y}px;`
      )
    };
  }
  function useResizeObserver(target, callback, options = {}) {
    const { window: window2 = defaultWindow, ...observerOptions } = options;
    let observer;
    const isSupported = useSupported(() => window2 && "ResizeObserver" in window2);
    const cleanup = () => {
      if (observer) {
        observer.disconnect();
        observer = void 0;
      }
    };
    const targets = e$1.computed(() => {
      const _targets = toValue(target);
      return Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];
    });
    const stopWatch = e$1.watch(
      targets,
      (els) => {
        cleanup();
        if (isSupported.value && window2) {
          observer = new ResizeObserver(callback);
          for (const _el of els) {
            if (_el)
              observer.observe(_el, observerOptions);
          }
        }
      },
      { immediate: true, flush: "post" }
    );
    const stop = () => {
      cleanup();
      stopWatch();
    };
    tryOnScopeDispose(stop);
    return {
      isSupported,
      stop
    };
  }
  function useElementBounding(target, options = {}) {
    const {
      reset = true,
      windowResize = true,
      windowScroll = true,
      immediate = true,
      updateTiming = "sync"
    } = options;
    const height = e$1.ref(0);
    const bottom = e$1.ref(0);
    const left = e$1.ref(0);
    const right = e$1.ref(0);
    const top = e$1.ref(0);
    const width = e$1.ref(0);
    const x = e$1.ref(0);
    const y2 = e$1.ref(0);
    function recalculate() {
      const el = unrefElement(target);
      if (!el) {
        if (reset) {
          height.value = 0;
          bottom.value = 0;
          left.value = 0;
          right.value = 0;
          top.value = 0;
          width.value = 0;
          x.value = 0;
          y2.value = 0;
        }
        return;
      }
      const rect = el.getBoundingClientRect();
      height.value = rect.height;
      bottom.value = rect.bottom;
      left.value = rect.left;
      right.value = rect.right;
      top.value = rect.top;
      width.value = rect.width;
      x.value = rect.x;
      y2.value = rect.y;
    }
    function update() {
      if (updateTiming === "sync")
        recalculate();
      else if (updateTiming === "next-frame")
        requestAnimationFrame(() => recalculate());
    }
    useResizeObserver(target, update);
    e$1.watch(() => unrefElement(target), (ele) => !ele && update());
    useMutationObserver(target, update, {
      attributeFilter: ["style", "class"]
    });
    if (windowScroll)
      useEventListener("scroll", update, { capture: true, passive: true });
    if (windowResize)
      useEventListener("resize", update, { passive: true });
    tryOnMounted(() => {
      if (immediate)
        update();
    });
    return {
      height,
      bottom,
      left,
      right,
      top,
      width,
      x,
      y: y2,
      update
    };
  }
  const DefaultMagicKeysAliasMap = {
    ctrl: "control",
    command: "meta",
    cmd: "meta",
    option: "alt",
    up: "arrowup",
    down: "arrowdown",
    left: "arrowleft",
    right: "arrowright"
  };
  function useMagicKeys(options = {}) {
    const {
      reactive: useReactive = false,
      target = defaultWindow,
      aliasMap = DefaultMagicKeysAliasMap,
      passive = true,
      onEventFired = noop
    } = options;
    const current = e$1.reactive(/* @__PURE__ */ new Set());
    const obj = {
      toJSON() {
        return {};
      },
      current
    };
    const refs = useReactive ? e$1.reactive(obj) : obj;
    const metaDeps = /* @__PURE__ */ new Set();
    const usedKeys = /* @__PURE__ */ new Set();
    function setRefs(key, value) {
      if (key in refs) {
        if (useReactive)
          refs[key] = value;
        else
          refs[key].value = value;
      }
    }
    function reset() {
      current.clear();
      for (const key of usedKeys)
        setRefs(key, false);
    }
    function updateRefs(e2, value) {
      var _a, _b;
      const key = (_a = e2.key) == null ? void 0 : _a.toLowerCase();
      const code = (_b = e2.code) == null ? void 0 : _b.toLowerCase();
      const values = [code, key].filter(Boolean);
      if (key) {
        if (value)
          current.add(key);
        else
          current.delete(key);
      }
      for (const key2 of values) {
        usedKeys.add(key2);
        setRefs(key2, value);
      }
      if (key === "meta" && !value) {
        metaDeps.forEach((key2) => {
          current.delete(key2);
          setRefs(key2, false);
        });
        metaDeps.clear();
      } else if (typeof e2.getModifierState === "function" && e2.getModifierState("Meta") && value) {
        [...current, ...values].forEach((key2) => metaDeps.add(key2));
      }
    }
    useEventListener(target, "keydown", (e2) => {
      updateRefs(e2, true);
      return onEventFired(e2);
    }, { passive });
    useEventListener(target, "keyup", (e2) => {
      updateRefs(e2, false);
      return onEventFired(e2);
    }, { passive });
    useEventListener("blur", reset, { passive: true });
    useEventListener("focus", reset, { passive: true });
    const proxy = new Proxy(
      refs,
      {
        get(target2, prop, rec) {
          if (typeof prop !== "string")
            return Reflect.get(target2, prop, rec);
          prop = prop.toLowerCase();
          if (prop in aliasMap)
            prop = aliasMap[prop];
          if (!(prop in refs)) {
            if (/[+_-]/.test(prop)) {
              const keys2 = prop.split(/[+_-]/g).map((i2) => i2.trim());
              refs[prop] = e$1.computed(() => keys2.every((key) => toValue(proxy[key])));
            } else {
              refs[prop] = e$1.ref(false);
            }
          }
          const r2 = Reflect.get(target2, prop, rec);
          return useReactive ? toValue(r2) : r2;
        }
      }
    );
    return proxy;
  }
  function useWindowSize(options = {}) {
    const {
      window: window2 = defaultWindow,
      initialWidth = Number.POSITIVE_INFINITY,
      initialHeight = Number.POSITIVE_INFINITY,
      listenOrientation = true,
      includeScrollbar = true,
      type = "inner"
    } = options;
    const width = e$1.ref(initialWidth);
    const height = e$1.ref(initialHeight);
    const update = () => {
      if (window2) {
        if (type === "outer") {
          width.value = window2.outerWidth;
          height.value = window2.outerHeight;
        } else if (includeScrollbar) {
          width.value = window2.innerWidth;
          height.value = window2.innerHeight;
        } else {
          width.value = window2.document.documentElement.clientWidth;
          height.value = window2.document.documentElement.clientHeight;
        }
      }
    };
    update();
    tryOnMounted(update);
    useEventListener("resize", update, { passive: true });
    if (listenOrientation) {
      const matches = useMediaQuery("(orientation: portrait)");
      e$1.watch(matches, () => update());
    }
    return { width, height };
  }
  const _hoisted_1$8 = { class: "text-xl font-black text-white" };
  const _hoisted_2$6 = { class: "no-scrollbar flex min-h-[calc(100%-2.5rem)] flex-1 flex-col p-2" };
  const _sfc_main$d = /* @__PURE__ */ e$1.defineComponent({
    __name: "PanelComp",
    props: {
      title: {},
      widthPercent: {},
      heightPercent: {},
      minWidth: {},
      minHeight: {}
    },
    emits: ["close"],
    setup(__props, { emit: __emit }) {
      const emit = __emit;
      const props = __props;
      const panel = e$1.ref(null);
      const bar = e$1.ref(null);
      const windowSize = useWindowSize({ includeScrollbar: false });
      const { width, height } = useElementBounding(bar, { windowScroll: false });
      const maxPos = e$1.computed(() => {
        return {
          x: windowSize.width.value - width.value,
          y: windowSize.height.value - height.value
        };
      });
      let rAF = 0;
      const { style } = useDraggable(panel, {
        initialValue: {
          x: windowSize.width.value / 2 - Math.max(windowSize.width.value * props.widthPercent / 100, props.minWidth) / 2,
          y: windowSize.height.value / 2 - Math.max(windowSize.height.value * props.heightPercent / 100, props.minHeight) / 2
        },
        handle: e$1.computed(() => bar.value),
        preventDefault: true,
        // 限制拖拽范围
        onMove: (pos) => {
          cancelAnimationFrame(rAF);
          rAF = requestAnimationFrame(() => {
            if (pos.x < 0) {
              pos.x = 0;
            }
            if (pos.y < 0) {
              pos.y = 0;
            }
            if (pos.x > maxPos.value.x) {
              pos.x = maxPos.value.x;
            }
            if (pos.y > maxPos.value.y) {
              pos.y = maxPos.value.y;
            }
          });
        }
      });
      const panelStyle = e$1.computed(() => {
        return {
          width: props.widthPercent + "vw",
          height: props.heightPercent + "vh",
          minWidth: props.minWidth + "px",
          minHeight: props.minHeight + "px"
        };
      });
      return (_ctx, _cache) => {
        return e$1.openBlock(), e$1.createElementBlock("div", {
          ref_key: "panel",
          ref: panel,
          style: e$1.normalizeStyle([panelStyle.value, e$1.unref(style)]),
          class: "no-scrollbar fixed z-[10000000] select-none overflow-auto overscroll-none rounded-xl bg-white shadow-lg will-change-[top,left]"
        }, [
          e$1.createElementVNode("div", {
            ref_key: "bar",
            ref: bar,
            class: "sticky top-0 z-10 w-full cursor-move bg-[#00AEEC] py-1.5 text-center"
          }, [
            e$1.createElementVNode("div", _hoisted_1$8, e$1.toDisplayString(_ctx.title), 1),
            e$1.createElementVNode("i", {
              class: "absolute right-0 top-0 m-1 cursor-pointer text-white hover:rounded-full hover:bg-white hover:bg-opacity-40",
              onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
            }, _cache[1] || (_cache[1] = [
              e$1.createElementVNode("svg", {
                xmlns: "http://www.w3.org/2000/svg",
                fill: "none",
                viewBox: "0 0 24 24",
                "stroke-width": "2.5",
                stroke: "currentColor",
                class: "size-8"
              }, [
                e$1.createElementVNode("path", {
                  "stroke-linecap": "round",
                  "stroke-linejoin": "round",
                  d: "M6 18 18 6M6 6l12 12"
                })
              ], -1)
            ]))
          ], 512),
          e$1.createElementVNode("div", _hoisted_2$6, [
            e$1.renderSlot(_ctx.$slots, "default")
          ])
        ], 4);
      };
    }
  });
  const _hoisted_1$7 = {
    key: 0,
    class: "mb-1.5"
  };
  const _hoisted_2$5 = { class: "text-sm leading-6 text-orange-900" };
  const _sfc_main$c = /* @__PURE__ */ e$1.defineComponent({
    __name: "DescriptionComp",
    props: {
      description: {}
    },
    setup(__props) {
      return (_ctx, _cache) => {
        var _a;
        return ((_a = _ctx.description) == null ? void 0 : _a.length) ? (e$1.openBlock(), e$1.createElementBlock("div", _hoisted_1$7, [
          e$1.createElementVNode("div", _hoisted_2$5, [
            (e$1.openBlock(true), e$1.createElementBlock(e$1.Fragment, null, e$1.renderList(_ctx.description, (line, index) => {
              return e$1.openBlock(), e$1.createElementBlock("div", { key: index }, [
                e$1.createElementVNode("p", null, [
                  _cache[0] || (_cache[0] = e$1.createElementVNode("span", { class: "mr-1" }, "•", -1)),
                  e$1.createTextVNode(e$1.toDisplayString(line), 1)
                ])
              ]);
            }), 128))
          ])
        ])) : e$1.createCommentVNode("", true);
      };
    }
  });
  const _hoisted_1$6 = { class: "flex w-full py-1 hover:bg-blue-50 hover:bg-opacity-50" };
  const _hoisted_2$4 = { class: "ml-2 self-center text-black" };
  const _hoisted_3$2 = { class: "mx-2 mb-2 flex flex-1 flex-col p-1 text-black" };
  const _hoisted_4$1 = { class: "mt-4 flex justify-around" };
  const _sfc_main$b = /* @__PURE__ */ e$1.defineComponent({
    __name: "EditorComp",
    props: {
      type: {},
      id: {},
      name: {},
      description: {},
      editorTitle: {},
      editorDescription: {},
      saveFn: { type: Function }
    },
    setup(__props) {
      const item = __props;
      const panel = e$1.ref(null);
      const isEditorShow = e$1.ref(false);
      const saveSuccess = e$1.ref(false);
      const editorData = e$1.ref("");
      const updateData = () => {
        const val = BiliCleanerStorage.get(item.id, []).join("\n");
        editorData.value = val ? val + "\n" : val;
      };
      const saveData = () => {
        try {
          const data = editorData.value.split("\n").filter((v2) => v2.trim() !== "");
          BiliCleanerStorage.set(item.id, orderedUniq(data));
          saveSuccess.value = true;
          item.saveFn();
          setTimeout(() => {
            saveSuccess.value = false;
          }, 1500);
        } catch (err) {
          error(`EditorComp ${item.id} saveData error`, err);
        }
      };
      return (_ctx, _cache) => {
        var _a;
        return e$1.openBlock(), e$1.createElementBlock(e$1.Fragment, null, [
          e$1.createElementVNode("label", _hoisted_1$6, [
            e$1.createElementVNode("button", {
              type: "button",
              class: "inline-flex justify-center rounded-md border border-transparent bg-white px-2 py-1 text-sm text-blue-900 outline-none ring-1 ring-gray-300 hover:ring-blue-500 focus:outline-none focus-visible:ring-1 focus-visible:ring-gray-500 focus-visible:ring-offset-1",
              onClick: _cache[0] || (_cache[0] = () => {
                isEditorShow.value = true;
                updateData();
              })
            }, " 编辑 "),
            e$1.createElementVNode("span", _hoisted_2$4, e$1.toDisplayString(_ctx.name), 1)
          ]),
          ((_a = _ctx.description) == null ? void 0 : _a.length) ? (e$1.openBlock(), e$1.createBlock(_sfc_main$c, {
            key: 0,
            class: "pl-9",
            description: _ctx.description
          }, null, 8, ["description"])) : e$1.createCommentVNode("", true),
          isEditorShow.value ? (e$1.openBlock(), e$1.createBlock(_sfc_main$d, e$1.mergeProps({
            key: 1,
            ref_key: "panel",
            ref: panel
          }, {
            title: _ctx.editorTitle,
            widthPercent: 28,
            heightPercent: 85,
            minWidth: 360,
            minHeight: 600
          }, {
            onClose: _cache[4] || (_cache[4] = ($event) => isEditorShow.value = false)
          }), {
            default: e$1.withCtx(() => {
              var _a2;
              return [
                e$1.createElementVNode("div", _hoisted_3$2, [
                  ((_a2 = _ctx.editorDescription) == null ? void 0 : _a2.length) ? (e$1.openBlock(), e$1.createBlock(_sfc_main$c, {
                    key: 0,
                    class: "mb-3",
                    description: _ctx.editorDescription
                  }, null, 8, ["description"])) : e$1.createCommentVNode("", true),
                  e$1.withDirectives(e$1.createElementVNode("textarea", {
                    "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => editorData.value = $event),
                    onKeydown: _cache[2] || (_cache[2] = e$1.withModifiers(() => {
                    }, ["stop"])),
                    class: "flex-1 resize-none overscroll-none rounded-md border-2 border-gray-300 p-2 text-[15px] outline-none focus:border-gray-400",
                    style: { "scrollbar-width": "thin", "scrollbar-color": "#999 #00000000" },
                    spellcheck: "false",
                    placeholder: "请输入内容..."
                  }, null, 544), [
                    [e$1.vModelText, editorData.value]
                  ]),
                  e$1.createElementVNode("div", _hoisted_4$1, [
                    e$1.createElementVNode("button", {
                      class: e$1.normalizeClass(["w-24 self-center rounded-md border-2 border-gray-300 bg-white py-0.5 text-center text-lg hover:border-blue-400 hover:bg-blue-50", saveSuccess.value ? "border-green-400 bg-green-50 hover:border-green-400 hover:bg-green-50" : ""]),
                      onClick: saveData
                    }, " 保存 ", 2),
                    e$1.createElementVNode("button", {
                      class: "w-24 self-center rounded-md border-2 border-gray-300 bg-white py-0.5 text-center text-lg hover:border-red-300 hover:bg-red-50",
                      onClick: _cache[3] || (_cache[3] = ($event) => isEditorShow.value = false)
                    }, " 关闭 ")
                  ])
                ])
              ];
            }),
            _: 1
          }, 16)) : e$1.createCommentVNode("", true)
        ], 64);
      };
    }
  });
  const _hoisted_1$5 = { class: "flex items-center justify-between py-1" };
  const _hoisted_2$3 = { class: "text-black" };
  const _hoisted_3$1 = { class: "relative w-2/5" };
  const _hoisted_4 = { class: "block truncate text-gray-800" };
  const _hoisted_5 = { class: "pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2" };
  const _hoisted_6 = {
    key: 0,
    class: "absolute inset-y-0 left-0 flex items-center pl-3 text-purple-600"
  };
  const _sfc_main$a = /* @__PURE__ */ e$1.defineComponent({
    __name: "ListComp",
    props: {
      type: {},
      id: {},
      name: {},
      description: {},
      defaultValue: {},
      disableValue: {},
      options: {}
    },
    setup(__props) {
      const item = __props;
      const options = item.options;
      const currValue = BiliCleanerStorage.get(item.id, item.defaultValue);
      const currOption = options.find((v2) => v2.id === currValue);
      const selectedOption = e$1.ref(currOption ?? options[0]);
      e$1.watch(selectedOption, (newSelected) => {
        try {
          for (const option of options) {
            if (option.id === newSelected.id && newSelected.id !== item.disableValue) {
              document.documentElement.setAttribute(option.id, "");
            } else {
              document.documentElement.removeAttribute(option.id);
            }
          }
          BiliCleanerStorage.set(item.id, newSelected.id);
        } catch (err) {
          error(`ListComp ${item.id} error`, err);
        }
      });
      return (_ctx, _cache) => {
        var _a;
        return e$1.openBlock(), e$1.createElementBlock(e$1.Fragment, null, [
          e$1.createElementVNode("div", _hoisted_1$5, [
            e$1.createElementVNode("div", _hoisted_2$3, e$1.toDisplayString(_ctx.name), 1),
            e$1.createVNode(e$1.unref(Ie), {
              modelValue: selectedOption.value,
              "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => selectedOption.value = $event)
            }, {
              default: e$1.withCtx(() => [
                e$1.createElementVNode("div", _hoisted_3$1, [
                  e$1.createVNode(e$1.unref(je), { class: "relative w-full cursor-pointer rounded-lg bg-white px-3 py-1.5 text-left ring-1 ring-gray-300 focus:outline-none focus-visible:border-indigo-500 focus-visible:ring-1 focus-visible:ring-gray-500 focus-visible:ring-white/75 sm:text-sm" }, {
                    default: e$1.withCtx(() => [
                      e$1.createElementVNode("span", _hoisted_4, e$1.toDisplayString(selectedOption.value.name), 1),
                      e$1.createElementVNode("span", _hoisted_5, [
                        e$1.createVNode(e$1.unref(render$1), {
                          class: "h-5 w-5 text-gray-400",
                          "aria-hidden": "true"
                        })
                      ])
                    ]),
                    _: 1
                  }),
                  e$1.createVNode(e$1.Transition, {
                    "leave-active-class": "transition duration-100 ease-in",
                    "leave-from-class": "opacity-100",
                    "leave-to-class": "opacity-0"
                  }, {
                    default: e$1.withCtx(() => [
                      e$1.createVNode(e$1.unref(Ae), { class: "absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 shadow-lg ring-1 ring-black/5 focus:outline-none sm:text-sm" }, {
                        default: e$1.withCtx(() => [
                          (e$1.openBlock(true), e$1.createElementBlock(e$1.Fragment, null, e$1.renderList(e$1.unref(options), (option, index) => {
                            return e$1.openBlock(), e$1.createBlock(e$1.unref(Fe), {
                              key: index,
                              value: option,
                              as: "template"
                            }, {
                              default: e$1.withCtx(({ active, selected }) => [
                                e$1.createElementVNode("li", {
                                  class: e$1.normalizeClass([
                                    active ? "bg-purple-100 text-black" : "text-gray-900",
                                    "relative cursor-default py-2 pl-10 pr-4 transition-colors duration-200"
                                  ])
                                }, [
                                  e$1.createElementVNode("span", {
                                    class: e$1.normalizeClass([selected ? "font-medium" : "font-normal", "block truncate"])
                                  }, e$1.toDisplayString(option.name), 3),
                                  selected ? (e$1.openBlock(), e$1.createElementBlock("span", _hoisted_6, [
                                    e$1.createVNode(e$1.unref(render$2), {
                                      class: "h-5 w-5",
                                      "aria-hidden": "true"
                                    })
                                  ])) : e$1.createCommentVNode("", true)
                                ], 2)
                              ]),
                              _: 2
                            }, 1032, ["value"]);
                          }), 128))
                        ]),
                        _: 1
                      })
                    ]),
                    _: 1
                  })
                ])
              ]),
              _: 1
            }, 8, ["modelValue"])
          ]),
          ((_a = _ctx.description) == null ? void 0 : _a.length) ? (e$1.openBlock(), e$1.createBlock(_sfc_main$c, {
            key: 0,
            class: "pl-1",
            description: _ctx.description
          }, null, 8, ["description"])) : e$1.createCommentVNode("", true)
        ], 64);
      };
    }
  });
  const _hoisted_1$4 = { class: "my-1 flex items-center py-1 text-black" };
  const _hoisted_2$2 = ["step"];
  const _hoisted_3 = {
    key: 0,
    class: "ml-2"
  };
  const _sfc_main$9 = /* @__PURE__ */ e$1.defineComponent({
    __name: "NumberComp",
    props: {
      type: {},
      id: {},
      name: {},
      description: {},
      minValue: {},
      maxValue: {},
      step: {},
      defaultValue: {},
      disableValue: {},
      addonText: {},
      noStyle: { type: Boolean },
      attrName: {},
      fn: { type: Function }
    },
    setup(__props) {
      const item = __props;
      const currValue = e$1.ref(BiliCleanerStorage.get(item.id, item.defaultValue));
      watchThrottled(
        currValue,
        (newValue, oldValue) => {
          var _a;
          try {
            if (newValue > item.maxValue) {
              currValue.value = item.maxValue;
            }
            if (newValue < item.minValue) {
              currValue.value = item.minValue;
            }
            if (oldValue === item.disableValue) {
              if (!item.noStyle) {
                document.documentElement.setAttribute(item.attrName ?? item.id, "");
              }
            }
            if (newValue === item.disableValue) {
              if (!item.noStyle) {
                document.documentElement.removeAttribute(item.attrName ?? item.id);
              }
            } else if (currValue.value !== oldValue) {
              (_a = item.fn(currValue.value)) == null ? void 0 : _a.then().catch((err) => {
                throw err;
              });
            }
            BiliCleanerStorage.set(item.id, currValue.value);
          } catch (err) {
            error(`NumberComp ${item.id} error`, err);
          }
        },
        { throttle: 50 }
      );
      return (_ctx, _cache) => {
        var _a;
        return e$1.openBlock(), e$1.createElementBlock(e$1.Fragment, null, [
          e$1.createElementVNode("div", _hoisted_1$4, [
            e$1.createElementVNode("div", null, e$1.toDisplayString(_ctx.name), 1),
            e$1.withDirectives(e$1.createElementVNode("input", {
              type: "number",
              step: _ctx.step,
              "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => currValue.value = $event),
              onKeydown: _cache[1] || (_cache[1] = e$1.withModifiers(() => {
              }, ["stop"])),
              class: "ml-auto block w-1/5 rounded-lg border border-gray-300 bg-white px-2.5 py-1.5 text-sm outline-none invalid:border-red-500 focus:border-gray-500 focus:invalid:border-red-500"
            }, null, 40, _hoisted_2$2), [
              [e$1.vModelText, currValue.value]
            ]),
            _ctx.addonText ? (e$1.openBlock(), e$1.createElementBlock("div", _hoisted_3, e$1.toDisplayString(_ctx.addonText), 1)) : e$1.createCommentVNode("", true)
          ]),
          ((_a = _ctx.description) == null ? void 0 : _a.length) ? (e$1.openBlock(), e$1.createBlock(_sfc_main$c, {
            key: 0,
            class: "pl-1",
            description: _ctx.description
          }, null, 8, ["description"])) : e$1.createCommentVNode("", true)
        ], 64);
      };
    }
  });
  const _hoisted_1$3 = { class: "mb-0.5 mt-1 flex items-center py-1 text-black" };
  const _sfc_main$8 = /* @__PURE__ */ e$1.defineComponent({
    __name: "StringComp",
    props: {
      type: {},
      id: {},
      name: {},
      description: {},
      defaultValue: {},
      disableValue: {},
      noStyle: { type: Boolean },
      attrName: {},
      fn: { type: Function }
    },
    setup(__props) {
      const item = __props;
      const currValue = e$1.ref(BiliCleanerStorage.get(item.id, item.defaultValue));
      watchThrottled(
        currValue,
        (newValue, oldValue) => {
          var _a;
          try {
            if (oldValue === item.disableValue) {
              if (!item.noStyle) {
                document.documentElement.setAttribute(item.attrName ?? item.id, "");
              }
            }
            if (newValue === item.disableValue) {
              if (!item.noStyle) {
                document.documentElement.removeAttribute(item.attrName ?? item.id);
              }
            } else if (currValue.value !== oldValue) {
              (_a = item.fn(currValue.value)) == null ? void 0 : _a.then().catch((err) => {
                throw err;
              });
            }
            BiliCleanerStorage.set(item.id, currValue.value);
          } catch (err) {
            error(`StringComp ${item.id} error`, err);
          }
        },
        { throttle: 50 }
      );
      return (_ctx, _cache) => {
        var _a;
        return e$1.openBlock(), e$1.createElementBlock(e$1.Fragment, null, [
          e$1.createElementVNode("div", _hoisted_1$3, [
            e$1.createElementVNode("div", null, e$1.toDisplayString(_ctx.name), 1),
            e$1.withDirectives(e$1.createElementVNode("input", {
              type: "text",
              "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => currValue.value = $event),
              onKeydown: _cache[1] || (_cache[1] = e$1.withModifiers(() => {
              }, ["stop"])),
              class: "ml-4 block flex-1 rounded-md border border-gray-300 bg-white p-1.5 text-sm outline-none invalid:border-red-500 focus:border-gray-500 focus:invalid:border-red-500"
            }, null, 544), [
              [e$1.vModelText, currValue.value]
            ])
          ]),
          ((_a = _ctx.description) == null ? void 0 : _a.length) ? (e$1.openBlock(), e$1.createBlock(_sfc_main$c, {
            key: 0,
            description: _ctx.description
          }, null, 8, ["description"])) : e$1.createCommentVNode("", true)
        ], 64);
      };
    }
  });
  const _hoisted_1$2 = { class: "flex items-center" };
  const _hoisted_2$1 = { class: "ml-2 flex-1" };
  const _sfc_main$7 = /* @__PURE__ */ e$1.defineComponent({
    __name: "SwitchComp",
    props: {
      type: {},
      id: {},
      name: {},
      description: {},
      defaultEnable: { type: Boolean },
      noStyle: { type: Boolean },
      attrName: {},
      enableFn: { type: Function },
      disableFn: { type: Function },
      enableFnRunAt: {}
    },
    setup(__props) {
      const item = __props;
      const enabled = e$1.ref(BiliCleanerStorage.get(item.id, item.defaultEnable));
      e$1.watch(enabled, () => {
        var _a, _b;
        try {
          if (enabled.value) {
            if (!item.noStyle) {
              document.documentElement.setAttribute(item.attrName ?? item.id, "");
            }
            if (item.enableFn) {
              (_a = item.enableFn()) == null ? void 0 : _a.then().catch();
            }
            BiliCleanerStorage.set(item.id, true);
          } else {
            if (!item.noStyle) {
              document.documentElement.removeAttribute(item.attrName ?? item.id);
            }
            if (item.disableFn) {
              (_b = item.disableFn()) == null ? void 0 : _b.then().catch((err) => {
                throw err;
              });
            }
            BiliCleanerStorage.set(item.id, false);
          }
        } catch (err) {
          error(`SwitchComp ${item.id} error`, err);
        }
      });
      return (_ctx, _cache) => {
        var _a;
        return e$1.openBlock(), e$1.createElementBlock(e$1.Fragment, null, [
          e$1.createVNode(e$1.unref(oe), { class: "m-0.5 h-fit w-full rounded-lg py-1 hover:bg-blue-50 hover:bg-opacity-50" }, {
            default: e$1.withCtx(() => [
              e$1.createElementVNode("div", _hoisted_1$2, [
                e$1.createVNode(e$1.unref(de), { class: "flex flex-1 flex-row text-black" }, {
                  default: e$1.withCtx(() => [
                    e$1.createVNode(e$1.unref(ue), {
                      modelValue: enabled.value,
                      "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => enabled.value = $event),
                      class: e$1.normalizeClass([enabled.value ? "bg-[#00AEEC]" : "bg-gray-200", "relative inline-flex h-6 w-11 items-center rounded-full outline-none transition-colors"])
                    }, {
                      default: e$1.withCtx(() => [
                        e$1.createElementVNode("span", {
                          class: e$1.normalizeClass([enabled.value ? "translate-x-6" : "translate-x-1", "inline-block h-4 w-4 transform rounded-full bg-white transition-transform"])
                        }, null, 2)
                      ]),
                      _: 1
                    }, 8, ["modelValue", "class"]),
                    e$1.createElementVNode("p", _hoisted_2$1, e$1.toDisplayString(_ctx.name), 1)
                  ]),
                  _: 1
                })
              ])
            ]),
            _: 1
          }),
          ((_a = _ctx.description) == null ? void 0 : _a.length) ? (e$1.openBlock(), e$1.createBlock(_sfc_main$c, {
            key: 0,
            class: "pl-9",
            description: _ctx.description
          }, null, 8, ["description"])) : e$1.createCommentVNode("", true)
        ], 64);
      };
    }
  });
  const href = location.href;
  const host = location.host;
  const pathname = location.pathname;
  const currPage = () => {
    if (href.startsWith("https://www.bilibili.com") && ["/index.html", "/"].includes(pathname)) {
      return "homepage";
    }
    if (href.includes("bilibili.com/video/")) {
      return "video";
    }
    if (href.includes("bilibili.com/v/popular/")) {
      return "popular";
    }
    if (host === "search.bilibili.com") {
      return "search";
    }
    if (host === "t.bilibili.com" || href.includes("bilibili.com/opus/") || href.includes("bilibili.com/v/topic/detail")) {
      return "dynamic";
    }
    if (host === "live.bilibili.com") {
      return "live";
    }
    if (href.includes("bilibili.com/bangumi/play/")) {
      return "bangumi";
    }
    if (href.includes("bilibili.com/list/")) {
      return "playlist";
    }
    if (host === "space.bilibili.com") {
      return "space";
    }
    if (host === "message.bilibili.com") {
      return "message";
    }
    if (!href.includes("bilibili.com/v/popular/") && href.includes("bilibili.com/v/")) {
      return "channel";
    }
    if (href.includes("www.bilibili.com/festival/")) {
      return "festival";
    }
    if (href.includes("bilibili.com/watchlater")) {
      return "watchlater";
    }
    return "";
  };
  const ans = currPage();
  const isPageHomepage = () => ans === "homepage";
  const isPageVideo = () => ans === "video";
  const isPagePopular = () => ans === "popular";
  const isPageSearch = () => ans === "search";
  const isPageDynamic = () => ans === "dynamic";
  const isPageLive = () => ans === "live";
  const isPageBangumi = () => ans === "bangumi";
  const isPagePlaylist = () => ans === "playlist";
  const isPageChannel = () => ans === "channel";
  const isPageSpace = () => ans === "space";
  const isPageWatchlater = () => ans === "watchlater";
  const _FetchHook = class _FetchHook {
    constructor() {
      // 根据input和init对input进行预处理
      __publicField(this, "preFnArr", []);
      // 根据input,init,resp做返回resp前的后处理, 如克隆resp
      __publicField(this, "postFnArr", []);
      try {
        this.hook();
      } catch (err) {
        error("hook fetch error", err);
      }
    }
    static getInstance() {
      if (!_FetchHook.instance) {
        _FetchHook.instance = new _FetchHook();
      }
      return _FetchHook.instance;
    }
    addPreFn(fn2) {
      this.preFnArr.push(fn2);
    }
    addPostFn(fn2) {
      this.postFnArr.push(fn2);
    }
    hook() {
      const origFetch = _unsafeWindow.fetch;
      _unsafeWindow.fetch = async (input, init) => {
        try {
          this.preFnArr.forEach((fn2) => {
            input = fn2(input, init);
          });
        } catch {
          return origFetch(input, init);
        }
        let resp = await origFetch(input, init);
        const origResp = resp.clone();
        try {
          for (const fn2 of this.postFnArr) {
            const ans2 = await fn2(input, init, resp);
            if (ans2) {
              resp = ans2;
            }
          }
        } catch (err) {
          error("fetch hook postFnArr", err);
          return origResp;
        }
        return resp;
      };
    }
  };
  __publicField(_FetchHook, "instance");
  let FetchHook = _FetchHook;
  const fetchHook = FetchHook.getInstance();
  const _Shadow = class _Shadow {
    constructor() {
      /**
       * 记录全部shadowRoot节点
       * key: tagName, value: ShadowRoot Set
       */
      __publicField(this, "shadowStore", /* @__PURE__ */ new Map());
      /**
       * 记录需注入的样式
       * key: tagName, value: css+className set
       */
      __publicField(this, "cssStore", /* @__PURE__ */ new Map());
      /**
       * ShadowRoot内的MutationObserver
       * key: tagName, value: MutationObserver set
       */
      __publicField(this, "observerStore", /* @__PURE__ */ new Map());
      try {
        if (isPageVideo() || isPageBangumi() || isPageSpace() || isPageDynamic() || isPagePlaylist()) {
          this.hook();
        }
      } catch (err) {
        error("hook shadow failed", err);
      }
    }
    static getInstance() {
      if (!_Shadow.instance) {
        _Shadow.instance = new _Shadow();
      }
      return _Shadow.instance;
    }
    /**
     * hook attachShadow,创建shadowRoot时注入自定义样式,启用自定义监听
     * 重载ShadowRoot.innerHTML,被调用时注入自定义样式
     */
    hook() {
      const self2 = this;
      const origAttachShadow = Element.prototype.attachShadow;
      Element.prototype.attachShadow = function(init) {
        const shadowRoot = origAttachShadow.call(this, init);
        const tag = this.tagName;
        const styles = self2.cssStore.get(tag);
        styles == null ? void 0 : styles.forEach((v2) => {
          const style = document.createElement("style");
          style.textContent = v2.css;
          style.setAttribute("bili-cleaner-css", v2.className);
          shadowRoot.appendChild(style);
        });
        if (self2.shadowStore.has(tag)) {
          self2.shadowStore.get(tag).add(shadowRoot);
        } else {
          self2.shadowStore.set(tag, /* @__PURE__ */ new Set([shadowRoot]));
        }
        if (self2.observerStore.has(tag)) {
          for (const [observer, config] of self2.observerStore.get(tag)) {
            observer.observe(shadowRoot, config);
          }
        }
        return shadowRoot;
      };
      const origShadowInnerHTML = Object.getOwnPropertyDescriptor(ShadowRoot.prototype, "innerHTML");
      Object.defineProperty(ShadowRoot.prototype, "innerHTML", {
        get() {
          return origShadowInnerHTML.get.call(this);
        },
        set(value) {
          const tagName = this.host.tagName;
          if (tagName && self2.cssStore.has(tagName)) {
            const shadowStyles = self2.cssStore.get(tagName);
            shadowStyles == null ? void 0 : shadowStyles.forEach((v2) => {
              value += `<style bili-cleaner-css="${v2.className}">${v2.css}</style>`;
            });
          }
          origShadowInnerHTML.set.call(this, value);
        }
      });
    }
    /**
     * 新增需要在shadowDOM内注入的样式
     * @param tag tagName
     * @param className css类名
     * @param css 样式
     */
    addShadowStyle(tag, className, css2) {
      tag = tag.toUpperCase();
      const curr = this.cssStore.get(tag);
      if (curr) {
        curr.add({ className, css: css2 });
      } else {
        this.cssStore.set(tag, /* @__PURE__ */ new Set([{ className, css: css2 }]));
      }
      if (this.shadowStore.size) {
        const nodes = this.shadowStore.get(tag);
        nodes == null ? void 0 : nodes.forEach((node) => {
          const style = document.createElement("style");
          style.textContent = css2;
          style.setAttribute("bili-cleaner-css", className);
          node.appendChild(style);
        });
      }
    }
    /**
     * 移除需要在shadowDOM内注入的样式
     * @param tag tagName
     * @param className css类名
     */
    removeShadowStyle(tag, className) {
      tag = tag.toUpperCase();
      const curr = this.cssStore.get(tag);
      if (curr) {
        for (const value of curr) {
          if (value.className === className) {
            curr.delete(value);
            break;
          }
        }
      }
      if (this.shadowStore.size) {
        const nodes = this.shadowStore.get(tag);
        nodes == null ? void 0 : nodes.forEach((node) => {
          node.querySelectorAll(`style[bili-cleaner-css="${className}"]`).forEach((v2) => v2.remove());
        });
      }
    }
    /**
     * 新增shadowRoot内MutationObserver
     * @param tag tagName
     * @param observer MutationObserver
     * @param config Observer配置
     */
    addShadowObserver(tag, observer, config) {
      tag = tag.toUpperCase();
      const curr = this.observerStore.get(tag);
      if (curr) {
        curr.add([observer, config]);
      } else {
        this.observerStore.set(tag, /* @__PURE__ */ new Set([[observer, config]]));
      }
      if (this.shadowStore.size) {
        const nodes = this.shadowStore.get(tag);
        nodes == null ? void 0 : nodes.forEach((node) => {
          observer.observe(node, config);
        });
      }
    }
  };
  /**
   * 单例
   */
  __publicField(_Shadow, "instance");
  let Shadow = _Shadow;
  const ShadowInstance = Shadow.getInstance();
  const coreCheck = async (elements, sign = true, blackPairs, whitePairs) => {
    let blackCnt = 0;
    try {
      for (const el of elements) {
        const blackTasks = [];
        blackPairs.forEach((pair) => {
          blackTasks.push(pair[0].check(el, pair[1]));
        });
        await Promise.all(blackTasks).then(() => {
          showEle(el);
        }).catch(() => {
          const whiteTasks = [];
          whitePairs == null ? void 0 : whitePairs.forEach((pair) => {
            whiteTasks.push(pair[0].check(el, pair[1]));
          });
          if (whiteTasks.length) {
            Promise.all(whiteTasks).then(() => {
              hideEle(el);
              blackCnt++;
            }).catch(() => {
              showEle(el);
            });
          } else {
            hideEle(el);
            blackCnt++;
          }
        });
        if (sign) {
          el.setAttribute(settings.filterSign, "");
        }
      }
    } catch (err) {
      error("coreCheck error", err);
    }
    return blackCnt;
  };
  class BooleanFilter {
    constructor() {
      __publicField(this, "isEnable", false);
    }
    enable() {
      this.isEnable = true;
    }
    disable() {
      this.isEnable = false;
    }
    check(el, selectorFn) {
      return new Promise((resolve, reject) => {
        if (this.isEnable && selectorFn(el) === true) {
          reject();
          return;
        }
        resolve();
      });
    }
  }
  class KeywordFilter {
    constructor() {
      __publicField(this, "isEnable", false);
      __publicField(this, "keywordSet", /* @__PURE__ */ new Set());
      __publicField(this, "mergedRegExp", []);
    }
    enable() {
      this.isEnable = true;
    }
    disable() {
      this.isEnable = false;
    }
    /** 将关键词或正则列表合并为正则 */
    buildRegExp() {
      this.mergedRegExp = [];
      const validNormalParts = [];
      const validBackrefParts = [];
      for (let word of this.keywordSet) {
        word = word.trim();
        if (word === "" || word === "//") {
          continue;
        }
        if (word.startsWith("/") && word.endsWith("/")) {
          word = word.slice(1, -1);
        } else {
          word = word.replace(/[*+?^${}().|[\]\\]/g, "\\$&");
        }
        try {
          new RegExp(word, "iu");
          if (/\\\d|\\k</.test(word.replaceAll("\\\\", ""))) {
            validBackrefParts.push(word);
          } else {
            validNormalParts.push(word);
          }
        } catch {
        }
      }
      try {
        if (validNormalParts.length) {
          this.mergedRegExp.push(new RegExp(validNormalParts.join("|"), "iu"));
        }
        for (const regex of validBackrefParts) {
          this.mergedRegExp.push(new RegExp(regex, "iu"));
        }
      } catch (err) {
        error("keyword filter build RegExp error", err);
      }
    }
    addParam(value) {
      value = value.trim();
      value && this.keywordSet.add(value);
      this.buildRegExp();
    }
    setParam(value) {
      this.keywordSet = new Set(value.map((v2) => v2.trim()).filter((v2) => v2));
      this.buildRegExp();
    }
    check(el, selectorFn) {
      return new Promise((resolve, reject) => {
        if (this.isEnable) {
          let value = selectorFn(el);
          if (typeof value === "string") {
            value = value.trim();
            for (const regex of this.mergedRegExp) {
              if (regex.test(value)) {
                reject();
                return;
              }
            }
          }
        }
        resolve();
      });
    }
  }
  class NumberMinFilter {
    constructor() {
      __publicField(this, "isEnable", false);
      __publicField(this, "threshold", 0);
    }
    enable() {
      this.isEnable = true;
    }
    disable() {
      this.isEnable = false;
    }
    setParam(value) {
      this.threshold = value;
    }
    check(el, selectorFn) {
      return new Promise((resolve, reject) => {
        if (this.isEnable) {
          const value = selectorFn(el);
          if (typeof value === "number" && value < this.threshold) {
            reject();
            return;
          }
        }
        resolve();
      });
    }
  }
  class StringFilter {
    constructor() {
      __publicField(this, "isEnable", false);
      __publicField(this, "strSet", /* @__PURE__ */ new Set());
    }
    enable() {
      this.isEnable = true;
    }
    disable() {
      this.isEnable = false;
    }
    addParam(value) {
      value = value.trim();
      value && this.strSet.add(value);
    }
    setParam(value) {
      this.strSet = new Set(value.map((v2) => v2.trim()).filter((v2) => v2));
    }
    check(el, selectorFn) {
      return new Promise((resolve, reject) => {
        if (this.isEnable) {
          const value = selectorFn(el);
          if (typeof value === "string" && this.strSet.has(value.trim())) {
            reject();
            return;
          }
        }
        resolve();
      });
    }
  }
  class CommentUsernameFilter extends StringFilter {
  }
  class CommentContentFilter extends KeywordFilter {
  }
  class CommentLevelFilter extends NumberMinFilter {
  }
  class CommentBotFilter extends StringFilter {
  }
  class CommentCallBotFilter extends StringFilter {
  }
  class CommentCallUserFilter extends KeywordFilter {
  }
  class CommentCallUserOnlyFilter extends BooleanFilter {
  }
  class CommentIsUpFilter extends BooleanFilter {
  }
  class CommentIsPinFilter extends BooleanFilter {
  }
  class CommentIsNoteFilter extends BooleanFilter {
  }
  class CommentIsLinkFilter extends BooleanFilter {
  }
  const GM_KEYS$9 = {
    black: {
      username: {
        statusKey: "dynamic-comment-username-filter-status",
        valueKey: "global-comment-username-filter-value"
      },
      content: {
        statusKey: "dynamic-comment-content-filter-status",
        valueKey: "global-comment-content-filter-value"
      },
      level: {
        statusKey: "dynamic-comment-level-filter-status",
        valueKey: "global-comment-level-filter-value"
      },
      bot: {
        statusKey: "dynamic-comment-bot-filter-status"
      },
      callBot: {
        statusKey: "dynamic-comment-call-bot-filter-status"
      },
      callUser: {
        statusKey: "dynamic-comment-call-user-filter-status"
      },
      callUserOnly: {
        statusKey: "dynamic-comment-call-user-only-filter-status"
      },
      isAD: {
        statusKey: "dynamic-comment-ad-filter-status"
      }
    },
    white: {
      root: {
        statusKey: "dynamic-comment-root-whitelist-status"
      },
      sub: {
        statusKey: "dynamic-comment-sub-whitelist-status"
      },
      isUp: {
        statusKey: "dynamic-comment-uploader-whitelist-status"
      },
      isPin: {
        statusKey: "dynamic-comment-pinned-whitelist-status"
      },
      isNote: {
        statusKey: "dynamic-comment-note-whitelist-status"
      },
      isLink: {
        statusKey: "dynamic-comment-link-whitelist-status"
      }
    }
  };
  const selectorFns$9 = {
    root: {
      username: (comment) => {
        var _a, _b, _c;
        return (_c = (_b = (_a = comment.__data) == null ? void 0 : _a.member) == null ? void 0 : _b.uname) == null ? void 0 : _c.trim();
      },
      content: (comment) => {
        var _a, _b, _c;
        return (_c = (_b = (_a = comment.__data) == null ? void 0 : _a.content) == null ? void 0 : _b.message) == null ? void 0 : _c.replace(/@[^@\s]+/g, " ").trim();
      },
      callUser: (comment) => {
        var _a, _b, _c;
        return (_c = (_b = (_a = comment.__data) == null ? void 0 : _a.content) == null ? void 0 : _b.members[0]) == null ? void 0 : _c.uname;
      },
      callUserOnly: (comment) => {
        var _a, _b, _c;
        return ((_c = (_b = (_a = comment.__data) == null ? void 0 : _a.content) == null ? void 0 : _b.message) == null ? void 0 : _c.replace(/@[^@\s]+/g, " ").trim()) === "";
      },
      level: (comment) => {
        var _a, _b, _c;
        return (_c = (_b = (_a = comment.__data) == null ? void 0 : _a.member) == null ? void 0 : _b.level_info) == null ? void 0 : _c.current_level;
      },
      isUp: (comment) => {
        var _a;
        const mid = (_a = comment.__data) == null ? void 0 : _a.mid;
        const upMid = comment.__upMid;
        return typeof mid === "number" && mid === upMid;
      },
      isPin: (comment) => {
        var _a, _b;
        return !!((_b = (_a = comment.__data) == null ? void 0 : _a.reply_control) == null ? void 0 : _b.is_up_top);
      },
      isNote: (comment) => {
        var _a, _b;
        return !!((_b = (_a = comment.__data) == null ? void 0 : _a.reply_control) == null ? void 0 : _b.is_note_v2);
      },
      isLink: (comment) => {
        var _a, _b, _c, _d;
        const jump_url = (_b = (_a = comment.__data) == null ? void 0 : _a.content) == null ? void 0 : _b.jump_url;
        if (jump_url) {
          for (const k2 of Object.keys(jump_url)) {
            if (!((_d = (_c = jump_url[k2]) == null ? void 0 : _c.pc_url) == null ? void 0 : _d.includes("search.bilibili.com"))) {
              return true;
            }
          }
        }
        return false;
      }
    },
    sub: {
      username: (comment) => {
        var _a, _b, _c;
        return (_c = (_b = (_a = comment.__data) == null ? void 0 : _a.member) == null ? void 0 : _b.uname) == null ? void 0 : _c.trim();
      },
      content: (comment) => {
        var _a, _b, _c, _d, _e;
        return (_e = (_d = (_c = (_b = (_a = comment.__data) == null ? void 0 : _a.content) == null ? void 0 : _b.message) == null ? void 0 : _c.trim()) == null ? void 0 : _d.replace(/^回复\s?@[^@\s]+\s?:/, "")) == null ? void 0 : _e.replace(/@[^@\s]+/g, " ").trim();
      },
      callUser: (comment) => {
        var _a, _b, _c, _d, _e, _f;
        return (_f = (_e = (_d = (_c = (_b = (_a = comment.__data) == null ? void 0 : _a.content) == null ? void 0 : _b.message) == null ? void 0 : _c.trim()) == null ? void 0 : _d.replace(/^回复\s?@[^@\s]+\s?:/, "")) == null ? void 0 : _e.match(/@[^@\s]+/)) == null ? void 0 : _f[0].replace("@", "").trim();
      },
      callUserOnly: (comment) => {
        var _a, _b, _c, _d, _e;
        return ((_e = (_d = (_c = (_b = (_a = comment.__data) == null ? void 0 : _a.content) == null ? void 0 : _b.message) == null ? void 0 : _c.trim()) == null ? void 0 : _d.replace(/^回复\s?@[^@\s]+\s?:/, "")) == null ? void 0 : _e.replace(/@[^@\s]+/g, " ").trim()) === "";
      },
      level: (comment) => {
        var _a, _b, _c;
        return (_c = (_b = (_a = comment.__data) == null ? void 0 : _a.member) == null ? void 0 : _b.level_info) == null ? void 0 : _c.current_level;
      },
      isUp: (comment) => {
        var _a;
        const mid = (_a = comment.__data) == null ? void 0 : _a.mid;
        const upMid = comment.__upMid;
        return typeof mid === "number" && mid === upMid;
      },
      isLink: (comment) => {
        var _a, _b, _c, _d;
        const urls = (_b = (_a = comment.__data) == null ? void 0 : _a.content) == null ? void 0 : _b.jump_url;
        if (urls) {
          for (const k2 of Object.keys(urls)) {
            if (!((_d = (_c = urls[k2]) == null ? void 0 : _c.pc_url) == null ? void 0 : _d.includes("search.bilibili.com"))) {
              return true;
            }
          }
        }
        return false;
      }
    }
  };
  let isRootWhite$2 = false;
  let isSubWhite$2 = false;
  class CommentFilterDynamic {
    constructor() {
      __publicField(this, "target");
      // 黑名单
      __publicField(this, "commentUsernameFilter", new CommentUsernameFilter());
      __publicField(this, "commentContentFilter", new CommentContentFilter());
      __publicField(this, "commentLevelFilter", new CommentLevelFilter());
      __publicField(this, "commentBotFilter", new CommentBotFilter());
      __publicField(this, "commentCallBotFilter", new CommentCallBotFilter());
      __publicField(this, "commentCallUserFilter", new CommentCallUserFilter());
      __publicField(this, "commentCallUserOnlyFilter", new CommentCallUserOnlyFilter());
      // 白名单
      __publicField(this, "commentIsUpFilter", new CommentIsUpFilter());
      __publicField(this, "commentIsPinFilter", new CommentIsPinFilter());
      __publicField(this, "commentIsNoteFilter", new CommentIsNoteFilter());
      __publicField(this, "commentIsLinkFilter", new CommentIsLinkFilter());
    }
    init() {
      const bots = [
        // 8455326 @机器工具人
        // 234978716 @有趣的程序员
        // 1141159409 @AI视频小助理
        // 437175450 @AI视频小助理总结一下 (误伤)
        // 1692825065 @AI笔记侠
        // 690155730 @AI视频助手
        // 689670224 @哔哩哔理点赞姬
        // 3494380876859618 @课代表猫
        // 1168527940 @AI课代表呀
        // 439438614 @木几萌Moe
        // 1358327273 @星崽丨StarZai
        // 3546376048741135 @AI沈阳美食家
        // 1835753760 @AI识片酱 // 听歌识曲,免除过滤
        // 9868463 @AI头脑风暴
        // 358243654 @GPT_5
        // 393788832 @Juice_AI
        // 91394217 @AI全文总结
        // 473018527 @AI视频总结
        // 3546639035795567 @AI总结视频
        // 605801219 @AI工具集
        "机器工具人",
        "有趣的程序员",
        "AI视频小助理",
        "AI视频小助理总结一下",
        "AI笔记侠",
        "AI视频助手",
        "哔哩哔理点赞姬",
        "课代表猫",
        "AI课代表呀",
        "木几萌Moe",
        "星崽丨StarZai",
        "AI沈阳美食家",
        "AI头脑风暴",
        "GPT_5",
        "Juice_AI",
        "AI全文总结",
        "AI视频总结",
        "AI总结视频",
        "AI工具集"
      ];
      this.commentUsernameFilter.setParam(BiliCleanerStorage.get(GM_KEYS$9.black.username.valueKey, []));
      this.commentContentFilter.setParam(BiliCleanerStorage.get(GM_KEYS$9.black.content.valueKey, []));
      this.commentLevelFilter.setParam(BiliCleanerStorage.get(GM_KEYS$9.black.level.valueKey, 0));
      this.commentBotFilter.setParam(bots);
      this.commentCallBotFilter.setParam(bots);
      this.commentCallUserFilter.setParam([`/./`]);
    }
    /**
     * 检测一级评论
     * @param mode full全量,incr增量
     * @returns
     */
    async checkRoot(mode) {
      const timer = performance.now();
      let revertAll = false;
      if (!(this.commentUsernameFilter.isEnable || this.commentContentFilter.isEnable || this.commentLevelFilter.isEnable || this.commentBotFilter.isEnable || this.commentCallBotFilter.isEnable || this.commentCallUserFilter.isEnable || this.commentCallUserOnlyFilter.isEnable)) {
        revertAll = true;
      }
      let rootComments = [];
      if (ShadowInstance.shadowStore.has("BILI-COMMENT-THREAD-RENDERER")) {
        rootComments = Array.from(ShadowInstance.shadowStore.get("BILI-COMMENT-THREAD-RENDERER")).map(
          (v2) => v2.host
        );
        if (mode === "incr") {
          rootComments = rootComments.filter((v2) => !v2.hasAttribute(settings.filterSign));
        }
      }
      if (!rootComments.length) {
        return;
      }
      if (settings.enableDebugFilter) {
        rootComments.forEach((v2) => {
          debugFilter(
            [
              `CommentFilterDynamic rootComments`,
              `username: ${selectorFns$9.root.username(v2)}`,
              `content: ${selectorFns$9.root.content(v2)}`,
              `callUser: ${selectorFns$9.root.callUser(v2)}`,
              `callUserOnly: ${selectorFns$9.root.callUserOnly(v2)}`,
              `level: ${selectorFns$9.root.level(v2)}`,
              `isUp: ${selectorFns$9.root.isUp(v2)}`,
              `isPin: ${selectorFns$9.root.isPin(v2)}`,
              `isNote: ${selectorFns$9.root.isNote(v2)}`,
              `isLink: ${selectorFns$9.root.isLink(v2)}`
            ].join("\n")
          );
        });
      }
      if (isRootWhite$2 || revertAll) {
        rootComments.forEach((el) => showEle(el));
        return;
      }
      const blackPairs = [];
      this.commentUsernameFilter.isEnable && blackPairs.push([this.commentUsernameFilter, selectorFns$9.root.username]);
      this.commentContentFilter.isEnable && blackPairs.push([this.commentContentFilter, selectorFns$9.root.content]);
      this.commentLevelFilter.isEnable && blackPairs.push([this.commentLevelFilter, selectorFns$9.root.level]);
      this.commentBotFilter.isEnable && blackPairs.push([this.commentBotFilter, selectorFns$9.root.username]);
      this.commentCallBotFilter.isEnable && blackPairs.push([this.commentCallBotFilter, selectorFns$9.root.callUser]);
      this.commentCallUserFilter.isEnable && blackPairs.push([this.commentCallUserFilter, selectorFns$9.root.callUser]);
      this.commentCallUserOnlyFilter.isEnable && blackPairs.push([this.commentCallUserOnlyFilter, selectorFns$9.root.callUserOnly]);
      const whitePairs = [];
      this.commentIsUpFilter.isEnable && whitePairs.push([this.commentIsUpFilter, selectorFns$9.root.isUp]);
      this.commentIsPinFilter.isEnable && whitePairs.push([this.commentIsPinFilter, selectorFns$9.root.isPin]);
      this.commentIsNoteFilter.isEnable && whitePairs.push([this.commentIsNoteFilter, selectorFns$9.root.isNote]);
      this.commentIsLinkFilter.isEnable && whitePairs.push([this.commentIsLinkFilter, selectorFns$9.root.isLink]);
      const rootBlackCnt = await coreCheck(rootComments, true, blackPairs, whitePairs);
      const time = (performance.now() - timer).toFixed(1);
      debugFilter(
        `CommentFilterDynamic hide ${rootBlackCnt} in ${rootComments.length} root comments, mode=${mode}, time=${time}`
      );
    }
    /**
     * 检测二级评论
     * @param mode full全量,incr增量
     * @returns
     */
    async checkSub(mode) {
      const timer = performance.now();
      let revertAll = false;
      if (!(this.commentUsernameFilter.isEnable || this.commentContentFilter.isEnable || this.commentLevelFilter.isEnable || this.commentBotFilter.isEnable || this.commentCallBotFilter.isEnable || this.commentCallUserFilter.isEnable || this.commentCallUserOnlyFilter.isEnable)) {
        revertAll = true;
      }
      let subComments = [];
      if (ShadowInstance.shadowStore.has("BILI-COMMENT-REPLY-RENDERER")) {
        subComments = Array.from(ShadowInstance.shadowStore.get("BILI-COMMENT-REPLY-RENDERER")).map(
          (v2) => v2.host
        );
        if (mode === "incr") {
          subComments = subComments.filter((v2) => !v2.hasAttribute(settings.filterSign));
        }
      }
      if (!subComments.length) {
        return;
      }
      if (settings.enableDebugFilter) {
        subComments.forEach((v2) => {
          debugFilter(
            [
              `CommentFilterDynamic subComments`,
              `username: ${selectorFns$9.sub.username(v2)}`,
              `content: ${selectorFns$9.sub.content(v2)}`,
              `callUser: ${selectorFns$9.sub.callUser(v2)}`,
              `callUserOnly: ${selectorFns$9.sub.callUserOnly(v2)}`,
              `level: ${selectorFns$9.sub.level(v2)}`,
              `isUp: ${selectorFns$9.sub.isUp(v2)}`,
              `isLink: ${selectorFns$9.sub.isLink(v2)}`
            ].join("\n")
          );
        });
      }
      if (isSubWhite$2 || revertAll) {
        subComments.forEach((el) => showEle(el));
        return;
      }
      const blackPairs = [];
      this.commentUsernameFilter.isEnable && blackPairs.push([this.commentUsernameFilter, selectorFns$9.sub.username]);
      this.commentContentFilter.isEnable && blackPairs.push([this.commentContentFilter, selectorFns$9.sub.content]);
      this.commentLevelFilter.isEnable && blackPairs.push([this.commentLevelFilter, selectorFns$9.sub.level]);
      this.commentBotFilter.isEnable && blackPairs.push([this.commentBotFilter, selectorFns$9.sub.username]);
      this.commentCallBotFilter.isEnable && blackPairs.push([this.commentCallBotFilter, selectorFns$9.sub.callUser]);
      this.commentCallUserFilter.isEnable && blackPairs.push([this.commentCallUserFilter, selectorFns$9.sub.callUser]);
      this.commentCallUserOnlyFilter.isEnable && blackPairs.push([this.commentCallUserOnlyFilter, selectorFns$9.sub.callUserOnly]);
      const whitePairs = [];
      this.commentIsUpFilter.isEnable && whitePairs.push([this.commentIsUpFilter, selectorFns$9.sub.isUp]);
      this.commentIsLinkFilter.isEnable && whitePairs.push([this.commentIsLinkFilter, selectorFns$9.sub.isLink]);
      const subBlackCnt = await coreCheck(subComments, false, blackPairs, whitePairs);
      const time = (performance.now() - timer).toFixed(1);
      debugFilter(
        `CommentFilterDynamic hide ${subBlackCnt} in ${subComments.length} sub comments, mode=${mode}, time=${time}`
      );
    }
    check(mode) {
      this.checkRoot(mode).then().catch((err) => {
        error("checkRoot failed", err);
      });
      this.checkSub(mode).then().catch((err) => {
        error("checkSub failed", err);
      });
    }
    /**
     * 监听一级/二级评论container
     * 使用同一Observer监视所有二级评论上级节点,所有变化只触发一次回调
     */
    observe() {
      ShadowInstance.addShadowObserver(
        "BILI-COMMENTS",
        new MutationObserver(() => {
          this.checkRoot("incr").then().catch();
        }),
        {
          subtree: true,
          childList: true
        }
      );
      ShadowInstance.addShadowObserver(
        "BILI-COMMENT-REPLIES-RENDERER",
        new MutationObserver(() => {
          this.checkSub("full").then().catch();
        }),
        {
          subtree: true,
          childList: true
        }
      );
    }
  }
  const mainFilter$9 = new CommentFilterDynamic();
  const commentFilterDynamicEntry = async () => {
    mainFilter$9.init();
    mainFilter$9.observe();
  };
  const commentFilterDynamicGroups = [
    {
      name: "评论用户过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$9.black.username.statusKey,
          name: "启用 评论用户过滤 (右键单击用户名)",
          noStyle: true,
          enableFn: () => {
            mainFilter$9.commentUsernameFilter.enable();
            mainFilter$9.check("full");
          },
          disableFn: () => {
            mainFilter$9.commentUsernameFilter.disable();
            mainFilter$9.check("full");
          }
        },
        {
          type: "editor",
          id: GM_KEYS$9.black.username.valueKey,
          name: "编辑 评论用户黑名单",
          description: ["本黑名单与UP主黑名单互不影响", "右键屏蔽的用户会出现在首行"],
          editorTitle: "评论区 用户黑名单",
          editorDescription: ["每行一个用户名,保存时自动去重"],
          saveFn: async () => {
            mainFilter$9.commentUsernameFilter.setParam(
              BiliCleanerStorage.get(GM_KEYS$9.black.username.valueKey, [])
            );
            mainFilter$9.check("full");
          }
        }
      ]
    },
    {
      name: "评论内容过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$9.black.content.statusKey,
          name: "启用 评论关键词过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$9.commentContentFilter.enable();
            mainFilter$9.check("full");
          },
          disableFn: () => {
            mainFilter$9.commentContentFilter.disable();
            mainFilter$9.check("full");
          }
        },
        {
          type: "editor",
          id: GM_KEYS$9.black.content.valueKey,
          name: "编辑 评论关键词黑名单",
          editorTitle: "评论关键词 黑名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter$9.commentContentFilter.setParam(BiliCleanerStorage.get(GM_KEYS$9.black.content.valueKey, []));
            mainFilter$9.check("full");
          }
        }
      ]
    },
    {
      name: "按类型过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$9.black.callBot.statusKey,
          name: "过滤 召唤AI的评论",
          noStyle: true,
          enableFn: () => {
            mainFilter$9.commentCallBotFilter.enable();
            mainFilter$9.check("full");
          },
          disableFn: () => {
            mainFilter$9.commentCallBotFilter.disable();
            mainFilter$9.check("full");
          }
        },
        {
          type: "switch",
          id: GM_KEYS$9.black.bot.statusKey,
          name: "过滤 AI发布的评论",
          noStyle: true,
          enableFn: () => {
            mainFilter$9.commentBotFilter.enable();
            mainFilter$9.check("full");
          },
          disableFn: () => {
            mainFilter$9.commentBotFilter.disable();
            mainFilter$9.check("full");
          }
        },
        {
          type: "switch",
          id: GM_KEYS$9.black.isAD.statusKey,
          name: "过滤 带货评论 (实验功能)",
          noStyle: true,
          enableFn: () => {
            fetchHook.addPostFn(
              async (input, init, resp) => {
                var _a, _b, _c, _d, _e;
                if (!resp) {
                  return;
                }
                if (typeof input === "string" && ((_a = init == null ? void 0 : init.method) == null ? void 0 : _a.toUpperCase()) === "GET" && input.includes("api.bilibili.com/x/v2/reply/wbi/main")) {
                  try {
                    const respData = await resp.clone().json();
                    const msg = (_e = (_d = (_c = (_b = respData == null ? void 0 : respData.data) == null ? void 0 : _b.top) == null ? void 0 : _c.upper) == null ? void 0 : _d.content) == null ? void 0 : _e.message;
                    if (msg && /b23\.tv\/mall-|领券|gaoneng\.bilibili\.com/.test(msg)) {
                      respData.data.top = null;
                      respData.data.top_replies = null;
                      return new Response(JSON.stringify(respData), {
                        status: resp.status,
                        statusText: resp.statusText,
                        headers: resp.headers
                      });
                    }
                  } catch {
                    return resp;
                  }
                  return resp;
                }
              }
            );
          }
        },
        {
          type: "switch",
          id: GM_KEYS$9.black.callUserOnly.statusKey,
          name: "过滤 只含 @其他用户 的评论",
          noStyle: true,
          enableFn: () => {
            mainFilter$9.commentCallUserOnlyFilter.enable();
            mainFilter$9.check("full");
          },
          disableFn: () => {
            mainFilter$9.commentCallUserOnlyFilter.disable();
            mainFilter$9.check("full");
          }
        },
        {
          type: "switch",
          id: GM_KEYS$9.black.callUser.statusKey,
          name: "过滤 包含 @其他用户 的评论",
          noStyle: true,
          enableFn: () => {
            mainFilter$9.commentCallUserFilter.enable();
            mainFilter$9.check("full");
          },
          disableFn: () => {
            mainFilter$9.commentCallUserFilter.disable();
            mainFilter$9.check("full");
          }
        }
      ]
    },
    {
      name: "等级过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$9.black.level.statusKey,
          name: "启用 用户等级过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$9.commentLevelFilter.enable();
            mainFilter$9.check("full");
          },
          disableFn: () => {
            mainFilter$9.commentLevelFilter.disable();
            mainFilter$9.check("full");
          }
        },
        {
          type: "number",
          id: GM_KEYS$9.black.level.valueKey,
          name: "设定最低等级 (0~6)",
          minValue: 0,
          maxValue: 6,
          step: 1,
          defaultValue: 0,
          disableValue: 0,
          fn: (value) => {
            mainFilter$9.commentLevelFilter.setParam(value);
            mainFilter$9.check("full");
          }
        }
      ]
    },
    {
      name: "白名单 免过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$9.white.root.statusKey,
          name: "一级评论(主评论) 免过滤",
          noStyle: true,
          enableFn: () => {
            isRootWhite$2 = true;
            mainFilter$9.check("full");
          },
          disableFn: () => {
            isRootWhite$2 = false;
            mainFilter$9.check("full");
          }
        },
        {
          type: "switch",
          id: GM_KEYS$9.white.sub.statusKey,
          name: "二级评论(回复) 免过滤",
          noStyle: true,
          enableFn: () => {
            isSubWhite$2 = true;
            mainFilter$9.check("full");
          },
          disableFn: () => {
            isSubWhite$2 = false;
            mainFilter$9.check("full");
          }
        },
        {
          type: "switch",
          id: GM_KEYS$9.white.isUp.statusKey,
          name: "UP主的评论 免过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$9.commentIsUpFilter.enable();
            mainFilter$9.check("full");
          },
          disableFn: () => {
            mainFilter$9.commentIsUpFilter.disable();
            mainFilter$9.check("full");
          }
        },
        {
          type: "switch",
          id: GM_KEYS$9.white.isPin.statusKey,
          name: "置顶评论 免过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$9.commentIsPinFilter.enable();
            mainFilter$9.check("full");
          },
          disableFn: () => {
            mainFilter$9.commentIsPinFilter.disable();
            mainFilter$9.check("full");
          }
        },
        {
          type: "switch",
          id: GM_KEYS$9.white.isNote.statusKey,
          name: "笔记/图片评论 免过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$9.commentIsNoteFilter.enable();
            mainFilter$9.check("full");
          },
          disableFn: () => {
            mainFilter$9.commentIsNoteFilter.disable();
            mainFilter$9.check("full");
          }
        },
        {
          type: "switch",
          id: GM_KEYS$9.white.isLink.statusKey,
          name: "含超链接的评论 免过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$9.commentIsLinkFilter.enable();
            mainFilter$9.check("full");
          },
          disableFn: () => {
            mainFilter$9.commentIsLinkFilter.disable();
            mainFilter$9.check("full");
          }
        }
      ]
    }
  ];
  const commentFilterDynamicHandler = (target) => {
    var _a, _b;
    if (!isPageDynamic()) {
      return [];
    }
    const menus = [];
    if (((_a = target.parentElement) == null ? void 0 : _a.id) === "user-name" || target.classList.contains("user-name") || target.classList.contains("sub-user-name")) {
      const username = (_b = target.textContent) == null ? void 0 : _b.trim();
      if (username && mainFilter$9.commentUsernameFilter.isEnable) {
        menus.push({
          name: `屏蔽用户:${username}`,
          fn: async () => {
            try {
              mainFilter$9.commentUsernameFilter.addParam(username);
              mainFilter$9.check("full");
              const arr = BiliCleanerStorage.get(GM_KEYS$9.black.username.valueKey, []);
              arr.unshift(username);
              BiliCleanerStorage.set(GM_KEYS$9.black.username.valueKey, orderedUniq(arr));
            } catch (err) {
              error(`commentFilterDynamicHandler add username ${username} failed`, err);
            }
          }
        });
      }
    }
    return menus;
  };
  const GM_KEYS$8 = {
    black: {
      username: {
        statusKey: "dynamic-comment-username-filter-status",
        valueKey: "global-comment-username-filter-value"
      },
      content: {
        statusKey: "dynamic-comment-content-filter-status",
        valueKey: "global-comment-content-filter-value"
      },
      level: {
        statusKey: "dynamic-comment-level-filter-status",
        valueKey: "global-comment-level-filter-value"
      },
      bot: {
        statusKey: "dynamic-comment-bot-filter-status"
      },
      callBot: {
        statusKey: "dynamic-comment-call-bot-filter-status"
      },
      callUser: {
        statusKey: "dynamic-comment-call-user-filter-status"
      },
      callUserOnly: {
        statusKey: "dynamic-comment-call-user-only-filter-status"
      },
      isAD: {
        statusKey: "dynamic-comment-ad-filter-status"
      }
    },
    white: {
      root: {
        statusKey: "dynamic-comment-root-whitelist-status"
      },
      sub: {
        statusKey: "dynamic-comment-sub-whitelist-status"
      },
      isUp: {
        statusKey: "dynamic-comment-uploader-whitelist-status"
      },
      isPin: {
        statusKey: "dynamic-comment-pinned-whitelist-status"
      },
      isNote: {
        statusKey: "dynamic-comment-note-whitelist-status"
      },
      isLink: {
        statusKey: "dynamic-comment-link-whitelist-status"
      }
    }
  };
  const selectorFns$8 = {
    root: {
      username: (comment) => {
        var _a, _b;
        return (_b = (_a = comment.querySelector(".root-reply-container .user-name")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim();
      },
      content: (comment) => {
        var _a, _b;
        return (_b = (_a = comment.querySelector(".root-reply-container .reply-content")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim().replace(/@[^@\s]+/g, " ").trim();
      },
      callUser: (comment) => {
        var _a, _b;
        return (_b = (_a = comment.querySelector(".root-reply-container .reply-content .jump-link.user")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.replace("@", "").trim();
      },
      callUserOnly: (comment) => {
        var _a, _b;
        return ((_b = (_a = comment.querySelector(".root-reply-container .reply-content")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.replace(/@[^@\s]+/g, " ").trim()) === "";
      },
      level: (comment) => {
        var _a, _b;
        const c2 = (_a = comment.querySelector(".root-reply-container .user-level")) == null ? void 0 : _a.className;
        const lv = (_b = c2 == null ? void 0 : c2.match(/level-([1-6])/)) == null ? void 0 : _b[1];
        return lv ? parseInt(lv) : void 0;
      },
      isUp: (comment) => {
        return !!comment.querySelector(".root-reply-container .up-icon");
      },
      isPin: (comment) => {
        return !!comment.querySelector(".root-reply-container .top-icon");
      },
      isNote: (comment) => {
        return !!comment.querySelector(".root-reply-container .note-prefix");
      },
      isLink: (comment) => {
        return !!comment.querySelector(".root-reply-container .jump-link:is(.normal, .video)");
      }
    },
    sub: {
      username: (comment) => {
        var _a, _b;
        return (_b = (_a = comment.querySelector(".sub-user-name")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim();
      },
      content: (comment) => {
        var _a, _b, _c, _d;
        return (_d = (_c = (_b = (_a = comment.querySelector(".reply-content")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim()) == null ? void 0 : _c.replace(/^回复\s?@[^@\s]+\s?:/, "")) == null ? void 0 : _d.replace(/@[^@\s]+/g, " ").trim();
      },
      callUser: (comment) => {
        var _a, _b, _c, _d, _e;
        return (_e = (_d = (_c = (_b = (_a = comment.querySelector(".reply-content")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim()) == null ? void 0 : _c.replace(/^回复\s?@[^@\s]+\s?:/, "")) == null ? void 0 : _d.match(/@[^@\s]+/)) == null ? void 0 : _e[0].replace("@", "").trim();
      },
      callUserOnly: (comment) => {
        var _a, _b, _c, _d;
        return ((_d = (_c = (_b = (_a = comment.querySelector(".reply-content")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim()) == null ? void 0 : _c.replace(/^回复\s?@[^@\s]+\s?:/, "")) == null ? void 0 : _d.replace(/@[^@\s]+/g, " ").trim()) === "";
      },
      level: (comment) => {
        var _a, _b;
        const c2 = (_a = comment.querySelector(".sub-user-level")) == null ? void 0 : _a.className;
        const lv = (_b = c2 == null ? void 0 : c2.match(/level-([1-6])/)) == null ? void 0 : _b[1];
        return lv ? parseInt(lv) : void 0;
      },
      isUp: (comment) => {
        return !!comment.querySelector(".sub-up-icon");
      },
      isLink: (comment) => {
        return !!comment.querySelector(".sub-reply-content .jump-link:is(.normal, .video)");
      }
    }
  };
  let isRootWhite$1 = false;
  let isSubWhite$1 = false;
  class CommentFilterSpace {
    constructor() {
      __publicField(this, "target");
      // 黑名单
      __publicField(this, "commentUsernameFilter", new CommentUsernameFilter());
      __publicField(this, "commentContentFilter", new CommentContentFilter());
      __publicField(this, "commentLevelFilter", new CommentLevelFilter());
      __publicField(this, "commentBotFilter", new CommentBotFilter());
      __publicField(this, "commentCallBotFilter", new CommentCallBotFilter());
      __publicField(this, "commentCallUserFilter", new CommentCallUserFilter());
      __publicField(this, "commentCallUserOnlyFilter", new CommentCallUserOnlyFilter());
      // 白名单
      __publicField(this, "commentIsUpFilter", new CommentIsUpFilter());
      __publicField(this, "commentIsPinFilter", new CommentIsPinFilter());
      __publicField(this, "commentIsNoteFilter", new CommentIsNoteFilter());
      __publicField(this, "commentIsLinkFilter", new CommentIsLinkFilter());
    }
    init() {
      const bots = [
        // 8455326 @机器工具人
        // 234978716 @有趣的程序员
        // 1141159409 @AI视频小助理
        // 437175450 @AI视频小助理总结一下 (误伤)
        // 1692825065 @AI笔记侠
        // 690155730 @AI视频助手
        // 689670224 @哔哩哔理点赞姬
        // 3494380876859618 @课代表猫
        // 1168527940 @AI课代表呀
        // 439438614 @木几萌Moe
        // 1358327273 @星崽丨StarZai
        // 3546376048741135 @AI沈阳美食家
        // 1835753760 @AI识片酱 // 听歌识曲,免除过滤
        // 9868463 @AI头脑风暴
        // 358243654 @GPT_5
        // 393788832 @Juice_AI
        // 91394217 @AI全文总结
        // 473018527 @AI视频总结
        // 3546639035795567 @AI总结视频
        // 605801219 @AI工具集
        "机器工具人",
        "有趣的程序员",
        "AI视频小助理",
        "AI视频小助理总结一下",
        "AI笔记侠",
        "AI视频助手",
        "哔哩哔理点赞姬",
        "课代表猫",
        "AI课代表呀",
        "木几萌Moe",
        "星崽丨StarZai",
        "AI沈阳美食家",
        "AI头脑风暴",
        "GPT_5",
        "Juice_AI",
        "AI全文总结",
        "AI视频总结",
        "AI总结视频",
        "AI工具集"
      ];
      this.commentUsernameFilter.setParam(BiliCleanerStorage.get(GM_KEYS$8.black.username.valueKey, []));
      this.commentContentFilter.setParam(BiliCleanerStorage.get(GM_KEYS$8.black.content.valueKey, []));
      this.commentLevelFilter.setParam(BiliCleanerStorage.get(GM_KEYS$8.black.level.valueKey, 0));
      this.commentBotFilter.setParam(bots);
      this.commentCallBotFilter.setParam(bots);
      this.commentCallUserFilter.setParam([`/./`]);
    }
    async check(mode) {
      if (location.host === "space.bilibili.com" && !location.pathname.includes("/dynamic")) {
        return;
      }
      if (!this.target) {
        return;
      }
      let revertAll = false;
      const timer = performance.now();
      if (!(this.commentUsernameFilter.isEnable || this.commentContentFilter.isEnable || this.commentLevelFilter.isEnable || this.commentBotFilter.isEnable || this.commentCallBotFilter.isEnable || this.commentCallUserFilter.isEnable || this.commentCallUserOnlyFilter.isEnable)) {
        revertAll = true;
      }
      const rootSelector = `.reply-item` + (mode === "incr" ? `:not([${settings.filterSign}])` : "");
      const subSelector = `.sub-reply-item` + (mode === "incr" ? `:not([${settings.filterSign}])` : "");
      const rootComments = Array.from(this.target.querySelectorAll(rootSelector));
      const subComments = Array.from(this.target.querySelectorAll(subSelector));
      if (settings.enableDebugFilter) {
        rootComments.forEach((v2) => {
          debugFilter(
            [
              `CommentFilterSpace rootComments`,
              `username: ${selectorFns$8.root.username(v2)}`,
              `content: ${selectorFns$8.root.content(v2)}`,
              `callUser: ${selectorFns$8.root.callUser(v2)}`,
              `callUserOnly: ${selectorFns$8.root.callUserOnly(v2)}`,
              `level: ${selectorFns$8.root.level(v2)}`,
              `isUp: ${selectorFns$8.root.isUp(v2)}`,
              `isPin: ${selectorFns$8.root.isPin(v2)}`,
              `isNote: ${selectorFns$8.root.isNote(v2)}`,
              `isLink: ${selectorFns$8.root.isLink(v2)}`
            ].join("\n")
          );
        });
        subComments.forEach((v2) => {
          debugFilter(
            [
              `CommentFilterSpace subComments`,
              `username: ${selectorFns$8.sub.username(v2)}`,
              `content: ${selectorFns$8.sub.content(v2)}`,
              `callUser: ${selectorFns$8.sub.callUser(v2)}`,
              `callUserOnly: ${selectorFns$8.sub.callUserOnly(v2)}`,
              `level: ${selectorFns$8.sub.level(v2)}`,
              `isUp: ${selectorFns$8.sub.isUp(v2)}`,
              `isLink: ${selectorFns$8.sub.isLink(v2)}`
            ].join("\n")
          );
        });
      }
      if (!rootComments.length && !subComments.length) {
        return;
      }
      if (isRootWhite$1 || revertAll) {
        rootComments.forEach((el) => showEle(el));
      }
      if (isSubWhite$1 || revertAll) {
        subComments.forEach((el) => showEle(el));
      }
      if (revertAll) {
        return;
      }
      let rootBlackCnt = 0;
      let subBlackCnt = 0;
      if (!isRootWhite$1 && rootComments.length) {
        const blackPairs = [];
        this.commentUsernameFilter.isEnable && blackPairs.push([this.commentUsernameFilter, selectorFns$8.root.username]);
        this.commentContentFilter.isEnable && blackPairs.push([this.commentContentFilter, selectorFns$8.root.content]);
        this.commentLevelFilter.isEnable && blackPairs.push([this.commentLevelFilter, selectorFns$8.root.level]);
        this.commentBotFilter.isEnable && blackPairs.push([this.commentBotFilter, selectorFns$8.root.username]);
        this.commentCallBotFilter.isEnable && blackPairs.push([this.commentCallBotFilter, selectorFns$8.root.callUser]);
        this.commentCallUserFilter.isEnable && blackPairs.push([this.commentCallUserFilter, selectorFns$8.root.callUser]);
        this.commentCallUserOnlyFilter.isEnable && blackPairs.push([this.commentCallUserOnlyFilter, selectorFns$8.root.callUserOnly]);
        const whitePairs = [];
        this.commentIsUpFilter.isEnable && whitePairs.push([this.commentIsUpFilter, selectorFns$8.root.isUp]);
        this.commentIsPinFilter.isEnable && whitePairs.push([this.commentIsPinFilter, selectorFns$8.root.isPin]);
        this.commentIsNoteFilter.isEnable && whitePairs.push([this.commentIsNoteFilter, selectorFns$8.root.isNote]);
        this.commentIsLinkFilter.isEnable && whitePairs.push([this.commentIsLinkFilter, selectorFns$8.root.isLink]);
        rootBlackCnt = await coreCheck(rootComments, true, blackPairs, whitePairs);
      }
      if (!isSubWhite$1 && subComments.length) {
        const blackPairs = [];
        this.commentUsernameFilter.isEnable && blackPairs.push([this.commentUsernameFilter, selectorFns$8.sub.username]);
        this.commentContentFilter.isEnable && blackPairs.push([this.commentContentFilter, selectorFns$8.sub.content]);
        this.commentLevelFilter.isEnable && blackPairs.push([this.commentLevelFilter, selectorFns$8.sub.level]);
        this.commentBotFilter.isEnable && blackPairs.push([this.commentBotFilter, selectorFns$8.sub.username]);
        this.commentCallBotFilter.isEnable && blackPairs.push([this.commentCallBotFilter, selectorFns$8.sub.callUser]);
        this.commentCallUserFilter.isEnable && blackPairs.push([this.commentCallUserFilter, selectorFns$8.sub.callUser]);
        this.commentCallUserOnlyFilter.isEnable && blackPairs.push([this.commentCallUserOnlyFilter, selectorFns$8.sub.callUserOnly]);
        const whitePairs = [];
        this.commentIsUpFilter.isEnable && whitePairs.push([this.commentIsUpFilter, selectorFns$8.sub.isUp]);
        this.commentIsLinkFilter.isEnable && whitePairs.push([this.commentIsLinkFilter, selectorFns$8.sub.isLink]);
        subBlackCnt = await coreCheck(subComments, true, blackPairs, whitePairs);
      }
      const time = (performance.now() - timer).toFixed(1);
      debugFilter(
        `CommentFilterSpace hide ${rootBlackCnt} in ${rootComments.length} root, ${subBlackCnt} in ${subComments.length} sub, mode=${mode}, time=${time}`
      );
    }
    checkFull() {
      this.check("full").then().catch((err) => {
        error("CommentFilterSpace check full error", err);
      });
    }
    checkIncr() {
      this.check("incr").then().catch((err) => {
        error("CommentFilterSpace check incr error", err);
      });
    }
    observe() {
      waitForEle(document, "#app", (node) => {
        return node.id === "app";
      }).then((ele) => {
        if (ele) {
          debugFilter("CommentFilterSpace target appear");
          this.target = ele;
          this.checkFull();
          const commentObserver = new MutationObserver(() => {
            this.checkIncr();
          });
          commentObserver.observe(this.target, { childList: true, subtree: true });
        }
      });
    }
  }
  const mainFilter$8 = new CommentFilterSpace();
  const commentFilterSpaceEntry = async () => {
    mainFilter$8.init();
    mainFilter$8.observe();
  };
  const commentFilterSpaceGroups = [
    {
      name: "评论用户过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$8.black.username.statusKey,
          name: "启用 评论用户过滤 (右键单击用户名)",
          noStyle: true,
          enableFn: () => {
            mainFilter$8.commentUsernameFilter.enable();
            mainFilter$8.checkFull();
          },
          disableFn: () => {
            mainFilter$8.commentUsernameFilter.disable();
            mainFilter$8.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$8.black.username.valueKey,
          name: "编辑 评论用户黑名单",
          description: ["本黑名单与UP主黑名单互不影响", "右键屏蔽的用户会出现在首行"],
          editorTitle: "评论区 用户黑名单",
          editorDescription: ["每行一个用户名,保存时自动去重"],
          saveFn: async () => {
            mainFilter$8.commentUsernameFilter.setParam(
              BiliCleanerStorage.get(GM_KEYS$8.black.username.valueKey, [])
            );
            mainFilter$8.checkFull();
          }
        }
      ]
    },
    {
      name: "评论内容过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$8.black.content.statusKey,
          name: "启用 评论关键词过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$8.commentContentFilter.enable();
            mainFilter$8.checkFull();
          },
          disableFn: () => {
            mainFilter$8.commentContentFilter.disable();
            mainFilter$8.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$8.black.content.valueKey,
          name: "编辑 评论关键词黑名单",
          editorTitle: "评论关键词 黑名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter$8.commentContentFilter.setParam(BiliCleanerStorage.get(GM_KEYS$8.black.content.valueKey, []));
            mainFilter$8.checkFull();
          }
        }
      ]
    },
    {
      name: "按类型过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$8.black.callBot.statusKey,
          name: "过滤 召唤AI的评论",
          noStyle: true,
          enableFn: () => {
            mainFilter$8.commentCallBotFilter.enable();
            mainFilter$8.checkFull();
          },
          disableFn: () => {
            mainFilter$8.commentCallBotFilter.disable();
            mainFilter$8.checkFull();
          }
        },
        {
          type: "switch",
          id: GM_KEYS$8.black.bot.statusKey,
          name: "过滤 AI发布的评论",
          noStyle: true,
          enableFn: () => {
            mainFilter$8.commentBotFilter.enable();
            mainFilter$8.checkFull();
          },
          disableFn: () => {
            mainFilter$8.commentBotFilter.disable();
            mainFilter$8.checkFull();
          }
        },
        {
          type: "switch",
          id: GM_KEYS$8.black.isAD.statusKey,
          name: "过滤 带货评论 (实验功能)",
          noStyle: true,
          enableFn: () => {
            fetchHook.addPostFn(
              async (input, init, resp) => {
                var _a, _b, _c, _d, _e;
                if (!resp) {
                  return;
                }
                if (typeof input === "string" && ((_a = init == null ? void 0 : init.method) == null ? void 0 : _a.toUpperCase()) === "GET" && input.includes("api.bilibili.com/x/v2/reply/wbi/main")) {
                  try {
                    const respData = await resp.clone().json();
                    const msg = (_e = (_d = (_c = (_b = respData == null ? void 0 : respData.data) == null ? void 0 : _b.top) == null ? void 0 : _c.upper) == null ? void 0 : _d.content) == null ? void 0 : _e.message;
                    if (msg && /b23\.tv\/mall-|领券|gaoneng\.bilibili\.com/.test(msg)) {
                      respData.data.top = null;
                      respData.data.top_replies = null;
                      return new Response(JSON.stringify(respData), {
                        status: resp.status,
                        statusText: resp.statusText,
                        headers: resp.headers
                      });
                    }
                  } catch {
                    return resp;
                  }
                  return resp;
                }
              }
            );
          }
        },
        {
          type: "switch",
          id: GM_KEYS$8.black.callUserOnly.statusKey,
          name: "过滤 只含 @其他用户 的评论",
          noStyle: true,
          enableFn: () => {
            mainFilter$8.commentCallUserOnlyFilter.enable();
            mainFilter$8.checkFull();
          },
          disableFn: () => {
            mainFilter$8.commentCallUserOnlyFilter.disable();
            mainFilter$8.checkFull();
          }
        },
        {
          type: "switch",
          id: GM_KEYS$8.black.callUser.statusKey,
          name: "过滤 包含 @其他用户 的评论",
          noStyle: true,
          enableFn: () => {
            mainFilter$8.commentCallUserFilter.enable();
            mainFilter$8.checkFull();
          },
          disableFn: () => {
            mainFilter$8.commentCallUserFilter.disable();
            mainFilter$8.checkFull();
          }
        }
      ]
    },
    {
      name: "等级过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$8.black.level.statusKey,
          name: "启用 用户等级过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$8.commentLevelFilter.enable();
            mainFilter$8.checkFull();
          },
          disableFn: () => {
            mainFilter$8.commentLevelFilter.disable();
            mainFilter$8.checkFull();
          }
        },
        {
          type: "number",
          id: GM_KEYS$8.black.level.valueKey,
          name: "设定最低等级 (0~6)",
          minValue: 0,
          maxValue: 6,
          step: 1,
          defaultValue: 0,
          disableValue: 0,
          fn: (value) => {
            mainFilter$8.commentLevelFilter.setParam(value);
            mainFilter$8.checkFull();
          }
        }
      ]
    },
    {
      name: "白名单 免过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$8.white.root.statusKey,
          name: "一级评论(主评论) 免过滤",
          noStyle: true,
          enableFn: () => {
            isRootWhite$1 = true;
            mainFilter$8.checkFull();
          },
          disableFn: () => {
            isRootWhite$1 = false;
            mainFilter$8.checkFull();
          }
        },
        {
          type: "switch",
          id: GM_KEYS$8.white.sub.statusKey,
          name: "二级评论(回复) 免过滤",
          noStyle: true,
          enableFn: () => {
            isSubWhite$1 = true;
            mainFilter$8.checkFull();
          },
          disableFn: () => {
            isSubWhite$1 = false;
            mainFilter$8.checkFull();
          }
        },
        {
          type: "switch",
          id: GM_KEYS$8.white.isUp.statusKey,
          name: "UP主的评论 免过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$8.commentIsUpFilter.enable();
            mainFilter$8.checkFull();
          },
          disableFn: () => {
            mainFilter$8.commentIsUpFilter.disable();
            mainFilter$8.checkFull();
          }
        },
        {
          type: "switch",
          id: GM_KEYS$8.white.isPin.statusKey,
          name: "置顶评论 免过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$8.commentIsPinFilter.enable();
            mainFilter$8.checkFull();
          },
          disableFn: () => {
            mainFilter$8.commentIsPinFilter.disable();
            mainFilter$8.checkFull();
          }
        },
        {
          type: "switch",
          id: GM_KEYS$8.white.isNote.statusKey,
          name: "笔记/图片评论 免过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$8.commentIsNoteFilter.enable();
            mainFilter$8.checkFull();
          },
          disableFn: () => {
            mainFilter$8.commentIsNoteFilter.disable();
            mainFilter$8.checkFull();
          }
        },
        {
          type: "switch",
          id: GM_KEYS$8.white.isLink.statusKey,
          name: "含超链接的评论 免过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$8.commentIsLinkFilter.enable();
            mainFilter$8.checkFull();
          },
          disableFn: () => {
            mainFilter$8.commentIsLinkFilter.disable();
            mainFilter$8.checkFull();
          }
        }
      ]
    }
  ];
  const commentFilterSpaceHandler = (target) => {
    var _a, _b;
    if (!isPageSpace()) {
      return [];
    }
    const menus = [];
    if (((_a = target.parentElement) == null ? void 0 : _a.id) === "user-name" || target.classList.contains("user-name") || target.classList.contains("sub-user-name")) {
      const username = (_b = target.textContent) == null ? void 0 : _b.trim();
      if (username && mainFilter$8.commentUsernameFilter.isEnable) {
        menus.push({
          name: `屏蔽用户:${username}`,
          fn: async () => {
            try {
              mainFilter$8.commentUsernameFilter.addParam(username);
              mainFilter$8.checkFull();
              const arr = BiliCleanerStorage.get(GM_KEYS$8.black.username.valueKey, []);
              arr.unshift(username);
              BiliCleanerStorage.set(GM_KEYS$8.black.username.valueKey, orderedUniq(arr));
            } catch (err) {
              error(`commentFilterSpaceHandler add username ${username} failed`, err);
            }
          }
        });
      }
    }
    return menus;
  };
  const GM_KEYS$7 = {
    black: {
      username: {
        statusKey: "video-comment-username-filter-status",
        valueKey: "global-comment-username-filter-value"
      },
      content: {
        statusKey: "video-comment-content-filter-status",
        valueKey: "global-comment-content-filter-value"
      },
      level: {
        statusKey: "video-comment-level-filter-status",
        valueKey: "global-comment-level-filter-value"
      },
      bot: {
        statusKey: "video-comment-bot-filter-status"
      },
      callBot: {
        statusKey: "video-comment-call-bot-filter-status"
      },
      callUser: {
        statusKey: "video-comment-call-user-filter-status"
      },
      callUserOnly: {
        statusKey: "video-comment-call-user-only-filter-status"
      },
      isAD: {
        statusKey: "video-comment-ad-filter-status"
      }
    },
    white: {
      root: {
        statusKey: "video-comment-root-whitelist-status"
      },
      sub: {
        statusKey: "video-comment-sub-whitelist-status"
      },
      isUp: {
        statusKey: "video-comment-uploader-whitelist-status"
      },
      isPin: {
        statusKey: "video-comment-pinned-whitelist-status"
      },
      isNote: {
        statusKey: "video-comment-note-whitelist-status"
      },
      isLink: {
        statusKey: "video-comment-link-whitelist-status"
      }
    }
  };
  const selectorFns$7 = {
    // 测试视频:
    // https://b23.tv/av810872
    // https://b23.tv/av1855797296
    // https://b23.tv/av1706101190
    // https://b23.tv/av1705573085
    // https://b23.tv/av1350214762
    // https://b23.tv/av113195607985861
    root: {
      username: (comment) => {
        var _a, _b, _c;
        return (_c = (_b = (_a = comment.__data) == null ? void 0 : _a.member) == null ? void 0 : _b.uname) == null ? void 0 : _c.trim();
      },
      content: (comment) => {
        var _a, _b, _c;
        return (_c = (_b = (_a = comment.__data) == null ? void 0 : _a.content) == null ? void 0 : _b.message) == null ? void 0 : _c.replace(/@[^@\s]+/g, " ").trim();
      },
      callUser: (comment) => {
        var _a, _b, _c;
        return (_c = (_b = (_a = comment.__data) == null ? void 0 : _a.content) == null ? void 0 : _b.members[0]) == null ? void 0 : _c.uname;
      },
      callUserOnly: (comment) => {
        var _a, _b, _c;
        return ((_c = (_b = (_a = comment.__data) == null ? void 0 : _a.content) == null ? void 0 : _b.message) == null ? void 0 : _c.replace(/@[^@\s]+/g, " ").trim()) === "";
      },
      level: (comment) => {
        var _a, _b, _c;
        return (_c = (_b = (_a = comment.__data) == null ? void 0 : _a.member) == null ? void 0 : _b.level_info) == null ? void 0 : _c.current_level;
      },
      isUp: (comment) => {
        var _a;
        const mid = (_a = comment.__data) == null ? void 0 : _a.mid;
        const upMid = comment.__upMid;
        return typeof mid === "number" && mid === upMid;
      },
      isPin: (comment) => {
        var _a, _b;
        return !!((_b = (_a = comment.__data) == null ? void 0 : _a.reply_control) == null ? void 0 : _b.is_up_top);
      },
      isNote: (comment) => {
        var _a, _b;
        return !!((_b = (_a = comment.__data) == null ? void 0 : _a.reply_control) == null ? void 0 : _b.is_note_v2);
      },
      isLink: (comment) => {
        var _a, _b, _c, _d;
        const jump_url = (_b = (_a = comment.__data) == null ? void 0 : _a.content) == null ? void 0 : _b.jump_url;
        if (jump_url) {
          for (const k2 of Object.keys(jump_url)) {
            if (!((_d = (_c = jump_url[k2]) == null ? void 0 : _c.pc_url) == null ? void 0 : _d.includes("search.bilibili.com"))) {
              return true;
            }
          }
        }
        return false;
      }
    },
    sub: {
      username: (comment) => {
        var _a, _b, _c;
        return (_c = (_b = (_a = comment.__data) == null ? void 0 : _a.member) == null ? void 0 : _b.uname) == null ? void 0 : _c.trim();
      },
      content: (comment) => {
        var _a, _b, _c, _d, _e;
        return (_e = (_d = (_c = (_b = (_a = comment.__data) == null ? void 0 : _a.content) == null ? void 0 : _b.message) == null ? void 0 : _c.trim()) == null ? void 0 : _d.replace(/^回复\s?@[^@\s]+\s?:/, "")) == null ? void 0 : _e.replace(/@[^@\s]+/g, " ").trim();
      },
      callUser: (comment) => {
        var _a, _b, _c, _d, _e, _f;
        return (_f = (_e = (_d = (_c = (_b = (_a = comment.__data) == null ? void 0 : _a.content) == null ? void 0 : _b.message) == null ? void 0 : _c.trim()) == null ? void 0 : _d.replace(/^回复\s?@[^@\s]+\s?:/, "")) == null ? void 0 : _e.match(/@[^@\s]+/)) == null ? void 0 : _f[0].replace("@", "").trim();
      },
      callUserOnly: (comment) => {
        var _a, _b, _c, _d, _e;
        return ((_e = (_d = (_c = (_b = (_a = comment.__data) == null ? void 0 : _a.content) == null ? void 0 : _b.message) == null ? void 0 : _c.trim()) == null ? void 0 : _d.replace(/^回复\s?@[^@\s]+\s?:/, "")) == null ? void 0 : _e.replace(/@[^@\s]+/g, " ").trim()) === "";
      },
      level: (comment) => {
        var _a, _b, _c;
        return (_c = (_b = (_a = comment.__data) == null ? void 0 : _a.member) == null ? void 0 : _b.level_info) == null ? void 0 : _c.current_level;
      },
      isUp: (comment) => {
        var _a;
        const mid = (_a = comment.__data) == null ? void 0 : _a.mid;
        const upMid = comment.__upMid;
        return typeof mid === "number" && mid === upMid;
      },
      isLink: (comment) => {
        var _a, _b, _c, _d;
        const urls = (_b = (_a = comment.__data) == null ? void 0 : _a.content) == null ? void 0 : _b.jump_url;
        if (urls) {
          for (const k2 of Object.keys(urls)) {
            if (!((_d = (_c = urls[k2]) == null ? void 0 : _c.pc_url) == null ? void 0 : _d.includes("search.bilibili.com"))) {
              return true;
            }
          }
        }
        return false;
      }
    }
  };
  let isRootWhite = false;
  let isSubWhite = false;
  class CommentFilterVideo {
    constructor() {
      __publicField(this, "target");
      // 黑名单
      __publicField(this, "commentUsernameFilter", new CommentUsernameFilter());
      __publicField(this, "commentContentFilter", new CommentContentFilter());
      __publicField(this, "commentLevelFilter", new CommentLevelFilter());
      __publicField(this, "commentBotFilter", new CommentBotFilter());
      __publicField(this, "commentCallBotFilter", new CommentCallBotFilter());
      __publicField(this, "commentCallUserFilter", new CommentCallUserFilter());
      __publicField(this, "commentCallUserOnlyFilter", new CommentCallUserOnlyFilter());
      // 白名单
      __publicField(this, "commentIsUpFilter", new CommentIsUpFilter());
      __publicField(this, "commentIsPinFilter", new CommentIsPinFilter());
      __publicField(this, "commentIsNoteFilter", new CommentIsNoteFilter());
      __publicField(this, "commentIsLinkFilter", new CommentIsLinkFilter());
    }
    init() {
      const bots = [
        // 8455326 @机器工具人
        // 234978716 @有趣的程序员
        // 1141159409 @AI视频小助理
        // 437175450 @AI视频小助理总结一下 (误伤)
        // 1692825065 @AI笔记侠
        // 690155730 @AI视频助手
        // 689670224 @哔哩哔理点赞姬
        // 3494380876859618 @课代表猫
        // 1168527940 @AI课代表呀
        // 439438614 @木几萌Moe
        // 1358327273 @星崽丨StarZai
        // 3546376048741135 @AI沈阳美食家
        // 1835753760 @AI识片酱 // 听歌识曲,免除过滤
        // 9868463 @AI头脑风暴
        // 358243654 @GPT_5
        // 393788832 @Juice_AI
        // 91394217 @AI全文总结
        // 473018527 @AI视频总结
        // 3546639035795567 @AI总结视频
        // 605801219 @AI工具集
        "机器工具人",
        "有趣的程序员",
        "AI视频小助理",
        "AI视频小助理总结一下",
        "AI笔记侠",
        "AI视频助手",
        "哔哩哔理点赞姬",
        "课代表猫",
        "AI课代表呀",
        "木几萌Moe",
        "星崽丨StarZai",
        "AI沈阳美食家",
        "AI头脑风暴",
        "GPT_5",
        "Juice_AI",
        "AI全文总结",
        "AI视频总结",
        "AI总结视频",
        "AI工具集"
      ];
      this.commentUsernameFilter.setParam(BiliCleanerStorage.get(GM_KEYS$7.black.username.valueKey, []));
      this.commentContentFilter.setParam(BiliCleanerStorage.get(GM_KEYS$7.black.content.valueKey, []));
      this.commentLevelFilter.setParam(BiliCleanerStorage.get(GM_KEYS$7.black.level.valueKey, 0));
      this.commentBotFilter.setParam(bots);
      this.commentCallBotFilter.setParam(bots);
      this.commentCallUserFilter.setParam([`/./`]);
    }
    /**
     * 检测一级评论
     * @param mode full全量,incr增量
     * @returns
     */
    async checkRoot(mode) {
      const timer = performance.now();
      let revertAll = false;
      if (!(this.commentUsernameFilter.isEnable || this.commentContentFilter.isEnable || this.commentLevelFilter.isEnable || this.commentBotFilter.isEnable || this.commentCallBotFilter.isEnable || this.commentCallUserFilter.isEnable || this.commentCallUserOnlyFilter.isEnable)) {
        revertAll = true;
      }
      let rootComments = [];
      if (ShadowInstance.shadowStore.has("BILI-COMMENT-THREAD-RENDERER")) {
        rootComments = Array.from(ShadowInstance.shadowStore.get("BILI-COMMENT-THREAD-RENDERER")).map(
          (v2) => v2.host
        );
        if (mode === "incr") {
          rootComments = rootComments.filter((v2) => !v2.hasAttribute(settings.filterSign));
        }
      }
      if (!rootComments.length) {
        return;
      }
      if (settings.enableDebugFilter) {
        rootComments.forEach((v2) => {
          debugFilter(
            [
              `CommentFilterVideo rootComments`,
              `username: ${selectorFns$7.root.username(v2)}`,
              `content: ${selectorFns$7.root.content(v2)}`,
              `callUser: ${selectorFns$7.root.callUser(v2)}`,
              `callUserOnly: ${selectorFns$7.root.callUserOnly(v2)}`,
              `level: ${selectorFns$7.root.level(v2)}`,
              `isUp: ${selectorFns$7.root.isUp(v2)}`,
              `isPin: ${selectorFns$7.root.isPin(v2)}`,
              `isNote: ${selectorFns$7.root.isNote(v2)}`,
              `isLink: ${selectorFns$7.root.isLink(v2)}`
            ].join("\n")
          );
        });
      }
      if (isRootWhite || revertAll) {
        rootComments.forEach((el) => showEle(el));
        return;
      }
      const blackPairs = [];
      this.commentUsernameFilter.isEnable && blackPairs.push([this.commentUsernameFilter, selectorFns$7.root.username]);
      this.commentContentFilter.isEnable && blackPairs.push([this.commentContentFilter, selectorFns$7.root.content]);
      this.commentLevelFilter.isEnable && blackPairs.push([this.commentLevelFilter, selectorFns$7.root.level]);
      this.commentBotFilter.isEnable && blackPairs.push([this.commentBotFilter, selectorFns$7.root.username]);
      this.commentCallBotFilter.isEnable && blackPairs.push([this.commentCallBotFilter, selectorFns$7.root.callUser]);
      this.commentCallUserFilter.isEnable && blackPairs.push([this.commentCallUserFilter, selectorFns$7.root.callUser]);
      this.commentCallUserOnlyFilter.isEnable && blackPairs.push([this.commentCallUserOnlyFilter, selectorFns$7.root.callUserOnly]);
      const whitePairs = [];
      this.commentIsUpFilter.isEnable && whitePairs.push([this.commentIsUpFilter, selectorFns$7.root.isUp]);
      this.commentIsPinFilter.isEnable && whitePairs.push([this.commentIsPinFilter, selectorFns$7.root.isPin]);
      this.commentIsNoteFilter.isEnable && whitePairs.push([this.commentIsNoteFilter, selectorFns$7.root.isNote]);
      this.commentIsLinkFilter.isEnable && whitePairs.push([this.commentIsLinkFilter, selectorFns$7.root.isLink]);
      const rootBlackCnt = await coreCheck(rootComments, true, blackPairs, whitePairs);
      const time = (performance.now() - timer).toFixed(1);
      debugFilter(
        `CommentFilterVideo hide ${rootBlackCnt} in ${rootComments.length} root comments, mode=${mode}, time=${time}`
      );
    }
    /**
     * 检测二级评论
     * @param mode full全量,incr增量
     * @returns
     */
    async checkSub(mode) {
      const timer = performance.now();
      let revertAll = false;
      if (!(this.commentUsernameFilter.isEnable || this.commentContentFilter.isEnable || this.commentLevelFilter.isEnable || this.commentBotFilter.isEnable || this.commentCallBotFilter.isEnable || this.commentCallUserFilter.isEnable || this.commentCallUserOnlyFilter.isEnable)) {
        revertAll = true;
      }
      let subComments = [];
      if (ShadowInstance.shadowStore.has("BILI-COMMENT-REPLY-RENDERER")) {
        subComments = Array.from(ShadowInstance.shadowStore.get("BILI-COMMENT-REPLY-RENDERER")).map(
          (v2) => v2.host
        );
        if (mode === "incr") {
          subComments = subComments.filter((v2) => !v2.hasAttribute(settings.filterSign));
        }
      }
      if (!subComments.length) {
        return;
      }
      if (settings.enableDebugFilter) {
        subComments.forEach((v2) => {
          debugFilter(
            [
              `CommentFilterVideo subComments`,
              `username: ${selectorFns$7.sub.username(v2)}`,
              `content: ${selectorFns$7.sub.content(v2)}`,
              `callUser: ${selectorFns$7.sub.callUser(v2)}`,
              `callUserOnly: ${selectorFns$7.sub.callUserOnly(v2)}`,
              `level: ${selectorFns$7.sub.level(v2)}`,
              `isUp: ${selectorFns$7.sub.isUp(v2)}`,
              `isLink: ${selectorFns$7.sub.isLink(v2)}`
            ].join("\n")
          );
        });
      }
      if (isSubWhite || revertAll) {
        subComments.forEach((el) => showEle(el));
        return;
      }
      const blackPairs = [];
      this.commentUsernameFilter.isEnable && blackPairs.push([this.commentUsernameFilter, selectorFns$7.sub.username]);
      this.commentContentFilter.isEnable && blackPairs.push([this.commentContentFilter, selectorFns$7.sub.content]);
      this.commentLevelFilter.isEnable && blackPairs.push([this.commentLevelFilter, selectorFns$7.sub.level]);
      this.commentBotFilter.isEnable && blackPairs.push([this.commentBotFilter, selectorFns$7.sub.username]);
      this.commentCallBotFilter.isEnable && blackPairs.push([this.commentCallBotFilter, selectorFns$7.sub.callUser]);
      this.commentCallUserFilter.isEnable && blackPairs.push([this.commentCallUserFilter, selectorFns$7.sub.callUser]);
      this.commentCallUserOnlyFilter.isEnable && blackPairs.push([this.commentCallUserOnlyFilter, selectorFns$7.sub.callUserOnly]);
      const whitePairs = [];
      this.commentIsUpFilter.isEnable && whitePairs.push([this.commentIsUpFilter, selectorFns$7.sub.isUp]);
      this.commentIsLinkFilter.isEnable && whitePairs.push([this.commentIsLinkFilter, selectorFns$7.sub.isLink]);
      const subBlackCnt = await coreCheck(subComments, false, blackPairs, whitePairs);
      const time = (performance.now() - timer).toFixed(1);
      debugFilter(
        `CommentFilterVideo hide ${subBlackCnt} in ${subComments.length} sub comments, mode=${mode}, time=${time}`
      );
    }
    check(mode) {
      this.checkRoot(mode).then().catch((err) => {
        error(`CommentFilterVideo checkRoot mode=${mode} error`, err);
      });
      this.checkSub(mode).then().catch((err) => {
        error(`CommentFilterVideo checkSub mode=${mode} error`, err);
      });
    }
    /**
     * 监听一级/二级评论container
     * 使用同一Observer监视所有二级评论上级节点,所有变化只触发一次回调
     */
    observe() {
      ShadowInstance.addShadowObserver(
        "BILI-COMMENTS",
        new MutationObserver(() => {
          this.checkRoot("incr").then().catch();
        }),
        {
          subtree: true,
          childList: true
        }
      );
      ShadowInstance.addShadowObserver(
        "BILI-COMMENT-REPLIES-RENDERER",
        new MutationObserver(() => {
          this.checkSub("full").then().catch();
        }),
        {
          subtree: true,
          childList: true
        }
      );
    }
  }
  const mainFilter$7 = new CommentFilterVideo();
  const commentFilterVideoEntry = async () => {
    mainFilter$7.init();
    mainFilter$7.observe();
  };
  const commentFilterVideoGroups = [
    {
      name: "评论用户过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$7.black.username.statusKey,
          name: "启用 评论用户过滤 (右键单击用户名)",
          noStyle: true,
          enableFn: () => {
            mainFilter$7.commentUsernameFilter.enable();
            mainFilter$7.check("full");
          },
          disableFn: () => {
            mainFilter$7.commentUsernameFilter.disable();
            mainFilter$7.check("full");
          }
        },
        {
          type: "editor",
          id: GM_KEYS$7.black.username.valueKey,
          name: "编辑 评论用户黑名单",
          description: ["本黑名单与UP主黑名单互不影响", "右键屏蔽的用户会出现在首行"],
          editorTitle: "评论区 用户黑名单",
          editorDescription: ["每行一个用户名,保存时自动去重"],
          saveFn: async () => {
            mainFilter$7.commentUsernameFilter.setParam(
              BiliCleanerStorage.get(GM_KEYS$7.black.username.valueKey, [])
            );
            mainFilter$7.check("full");
          }
        }
      ]
    },
    {
      name: "评论内容过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$7.black.content.statusKey,
          name: "启用 评论关键词过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$7.commentContentFilter.enable();
            mainFilter$7.check("full");
          },
          disableFn: () => {
            mainFilter$7.commentContentFilter.disable();
            mainFilter$7.check("full");
          }
        },
        {
          type: "editor",
          id: GM_KEYS$7.black.content.valueKey,
          name: "编辑 评论关键词黑名单",
          editorTitle: "评论关键词 黑名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter$7.commentContentFilter.setParam(BiliCleanerStorage.get(GM_KEYS$7.black.content.valueKey, []));
            mainFilter$7.check("full");
          }
        }
      ]
    },
    {
      name: "按类型过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$7.black.callBot.statusKey,
          name: "过滤 召唤AI的评论",
          noStyle: true,
          enableFn: () => {
            mainFilter$7.commentCallBotFilter.enable();
            mainFilter$7.check("full");
          },
          disableFn: () => {
            mainFilter$7.commentCallBotFilter.disable();
            mainFilter$7.check("full");
          }
        },
        {
          type: "switch",
          id: GM_KEYS$7.black.bot.statusKey,
          name: "过滤 AI发布的评论",
          noStyle: true,
          enableFn: () => {
            mainFilter$7.commentBotFilter.enable();
            mainFilter$7.check("full");
          },
          disableFn: () => {
            mainFilter$7.commentBotFilter.disable();
            mainFilter$7.check("full");
          }
        },
        {
          type: "switch",
          id: GM_KEYS$7.black.isAD.statusKey,
          name: "过滤 带货评论 (实验功能)",
          noStyle: true,
          enableFn: () => {
            fetchHook.addPostFn(
              async (input, init, resp) => {
                var _a, _b, _c, _d, _e;
                if (!resp) {
                  return;
                }
                if (typeof input === "string" && ((_a = init == null ? void 0 : init.method) == null ? void 0 : _a.toUpperCase()) === "GET" && input.includes("api.bilibili.com/x/v2/reply/wbi/main")) {
                  try {
                    const respData = await resp.clone().json();
                    const msg = (_e = (_d = (_c = (_b = respData == null ? void 0 : respData.data) == null ? void 0 : _b.top) == null ? void 0 : _c.upper) == null ? void 0 : _d.content) == null ? void 0 : _e.message;
                    if (msg && /b23\.tv\/mall-|领券|gaoneng\.bilibili\.com/.test(msg)) {
                      respData.data.top = null;
                      respData.data.top_replies = null;
                      return new Response(JSON.stringify(respData), {
                        status: resp.status,
                        statusText: resp.statusText,
                        headers: resp.headers
                      });
                    }
                  } catch {
                    return resp;
                  }
                  return resp;
                }
              }
            );
          }
        },
        {
          type: "switch",
          id: GM_KEYS$7.black.callUserOnly.statusKey,
          name: "过滤 只含 @其他用户 的评论",
          noStyle: true,
          enableFn: () => {
            mainFilter$7.commentCallUserOnlyFilter.enable();
            mainFilter$7.check("full");
          },
          disableFn: () => {
            mainFilter$7.commentCallUserOnlyFilter.disable();
            mainFilter$7.check("full");
          }
        },
        {
          type: "switch",
          id: GM_KEYS$7.black.callUser.statusKey,
          name: "过滤 包含 @其他用户 的评论",
          noStyle: true,
          enableFn: () => {
            mainFilter$7.commentCallUserFilter.enable();
            mainFilter$7.check("full");
          },
          disableFn: () => {
            mainFilter$7.commentCallUserFilter.disable();
            mainFilter$7.check("full");
          }
        }
      ]
    },
    {
      name: "等级过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$7.black.level.statusKey,
          name: "启用 用户等级过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$7.commentLevelFilter.enable();
            mainFilter$7.check("full");
          },
          disableFn: () => {
            mainFilter$7.commentLevelFilter.disable();
            mainFilter$7.check("full");
          }
        },
        {
          type: "number",
          id: GM_KEYS$7.black.level.valueKey,
          name: "设定最低等级 (0~6)",
          minValue: 0,
          maxValue: 6,
          step: 1,
          defaultValue: 0,
          disableValue: 0,
          fn: (value) => {
            mainFilter$7.commentLevelFilter.setParam(value);
            mainFilter$7.check("full");
          }
        }
      ]
    },
    {
      name: "白名单 免过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$7.white.root.statusKey,
          name: "一级评论(主评论) 免过滤",
          noStyle: true,
          enableFn: () => {
            isRootWhite = true;
            mainFilter$7.check("full");
          },
          disableFn: () => {
            isRootWhite = false;
            mainFilter$7.check("full");
          }
        },
        {
          type: "switch",
          id: GM_KEYS$7.white.sub.statusKey,
          name: "二级评论(回复) 免过滤",
          noStyle: true,
          enableFn: () => {
            isSubWhite = true;
            mainFilter$7.check("full");
          },
          disableFn: () => {
            isSubWhite = false;
            mainFilter$7.check("full");
          }
        },
        {
          type: "switch",
          id: GM_KEYS$7.white.isUp.statusKey,
          name: "UP主的评论 免过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$7.commentIsUpFilter.enable();
            mainFilter$7.check("full");
          },
          disableFn: () => {
            mainFilter$7.commentIsUpFilter.disable();
            mainFilter$7.check("full");
          }
        },
        {
          type: "switch",
          id: GM_KEYS$7.white.isPin.statusKey,
          name: "置顶评论 免过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$7.commentIsPinFilter.enable();
            mainFilter$7.check("full");
          },
          disableFn: () => {
            mainFilter$7.commentIsPinFilter.disable();
            mainFilter$7.check("full");
          }
        },
        {
          type: "switch",
          id: GM_KEYS$7.white.isNote.statusKey,
          name: "笔记/图片评论 免过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$7.commentIsNoteFilter.enable();
            mainFilter$7.check("full");
          },
          disableFn: () => {
            mainFilter$7.commentIsNoteFilter.disable();
            mainFilter$7.check("full");
          }
        },
        {
          type: "switch",
          id: GM_KEYS$7.white.isLink.statusKey,
          name: "含超链接的评论 免过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$7.commentIsLinkFilter.enable();
            mainFilter$7.check("full");
          },
          disableFn: () => {
            mainFilter$7.commentIsLinkFilter.disable();
            mainFilter$7.check("full");
          }
        }
      ]
    }
  ];
  const commentFilterVideoHandler = (target) => {
    var _a, _b;
    if (!(isPageVideo() || isPagePlaylist() || isPageBangumi())) {
      return [];
    }
    const menus = [];
    if (((_a = target.parentElement) == null ? void 0 : _a.id) === "user-name" || target.classList.contains("user-name") || target.classList.contains("sub-user-name")) {
      const username = (_b = target.textContent) == null ? void 0 : _b.trim();
      if (username && mainFilter$7.commentUsernameFilter.isEnable) {
        menus.push({
          name: `屏蔽用户:${username}`,
          fn: async () => {
            try {
              mainFilter$7.commentUsernameFilter.addParam(username);
              mainFilter$7.check("full");
              const arr = BiliCleanerStorage.get(GM_KEYS$7.black.username.valueKey, []);
              arr.unshift(username);
              BiliCleanerStorage.set(GM_KEYS$7.black.username.valueKey, orderedUniq(arr));
            } catch (err) {
              error(`commentFilterVideoHandler add username ${username} failed`, err);
            }
          }
        });
      }
    }
    return menus;
  };
  class DynUploaderFilter extends StringFilter {
  }
  class DynDurationFilter extends NumberMinFilter {
  }
  class DynVideoTitleFilter extends KeywordFilter {
  }
  class DynContentFilter extends KeywordFilter {
  }
  const GM_KEYS$6 = {
    black: {
      uploader: {
        statusKey: "dyn-uploader-filter-status",
        valueKey: "dyn-uploader-filter-value"
      },
      duration: {
        statusKey: "dyn-duration-filter-status",
        valueKey: "global-duration-filter-value"
      },
      title: {
        statusKey: "dyn-title-keyword-filter-status",
        valueKey: "global-title-keyword-filter-value"
      },
      content: {
        statusKey: "dyn-content-keyword-filter-status",
        valueKey: "global-content-keyword-filter-value"
      }
    }
  };
  let isAllDyn = true;
  const selectorFns$6 = {
    uploader: (dyn) => {
      var _a, _b;
      if (!isAllDyn) {
        return void 0;
      }
      return (_b = (_a = dyn.querySelector(".bili-dyn-title__text")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim();
    },
    duration: (dyn) => {
      var _a, _b;
      const time = (_b = (_a = dyn.querySelector(".bili-dyn-card-video__cover-shadow .duration-time")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim();
      return time ? convertTimeToSec(time) : void 0;
    },
    title: (dyn) => {
      var _a, _b;
      return (_b = (_a = dyn.querySelector(".bili-dyn-card-video__title")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim();
    },
    content: (dyn) => {
      return Array.from(
        dyn.querySelectorAll(
          ".bili-dyn-content :is(.dyn-card-opus__title, .bili-rich-text__content > span:not(.bili-rich-text-module.at))"
        )
      ).map((v2) => {
        var _a;
        return (_a = v2 == null ? void 0 : v2.textContent) == null ? void 0 : _a.trim();
      }).filter((v2) => v2 == null ? void 0 : v2.trim()).join(" ");
    }
  };
  class DynamicFilterDynamic {
    constructor() {
      __publicField(this, "target");
      // 黑名单
      __publicField(this, "dynUploaderFilter", new DynUploaderFilter());
      __publicField(this, "dynDurationFilter", new DynDurationFilter());
      __publicField(this, "dynVideoTitleFilter", new DynVideoTitleFilter());
      __publicField(this, "dynContentFilter", new DynContentFilter());
    }
    init() {
      this.dynUploaderFilter.setParam(BiliCleanerStorage.get(GM_KEYS$6.black.uploader.valueKey, []));
      this.dynDurationFilter.setParam(BiliCleanerStorage.get(GM_KEYS$6.black.duration.valueKey, 0));
      this.dynVideoTitleFilter.setParam(BiliCleanerStorage.get(GM_KEYS$6.black.title.valueKey, []));
      this.dynContentFilter.setParam(BiliCleanerStorage.get(GM_KEYS$6.black.content.valueKey, []));
    }
    async check(mode) {
      if (!this.target) {
        return;
      }
      let revertAll = false;
      if (!(this.dynUploaderFilter.isEnable || this.dynDurationFilter.isEnable || this.dynVideoTitleFilter.isEnable || this.dynContentFilter.isEnable)) {
        revertAll = true;
      }
      const timer = performance.now();
      isAllDyn = !!this.target.querySelector(".bili-dyn-list-tabs");
      let selector = `.bili-dyn-list__item`;
      if (mode === "incr") {
        selector += `:not([${settings.filterSign}])`;
      }
      const dyns = Array.from(this.target.querySelectorAll(selector));
      if (!dyns.length) {
        return;
      }
      if (revertAll) {
        dyns.forEach((v2) => showEle(v2));
        return;
      }
      if (settings.enableDebugFilter) {
        dyns.forEach((v2) => {
          debugFilter(
            [
              `DynamicFilterDynamic`,
              `uploader: ${selectorFns$6.uploader(v2)}`,
              `title: ${selectorFns$6.title(v2)}`,
              `duration: ${selectorFns$6.duration(v2)}`,
              `content: ${selectorFns$6.content(v2)}`
            ].join("\n")
          );
        });
      }
      const blackPairs = [];
      this.dynUploaderFilter.isEnable && blackPairs.push([this.dynUploaderFilter, selectorFns$6.uploader]);
      this.dynDurationFilter.isEnable && blackPairs.push([this.dynDurationFilter, selectorFns$6.duration]);
      this.dynVideoTitleFilter.isEnable && blackPairs.push([this.dynVideoTitleFilter, selectorFns$6.title]);
      this.dynContentFilter.isEnable && blackPairs.push([this.dynContentFilter, selectorFns$6.content]);
      const blackCnt = await coreCheck(dyns, true, blackPairs, []);
      const time = (performance.now() - timer).toFixed(1);
      debugFilter(`DynamicFilterDynamic hide ${blackCnt} in ${dyns.length} dyns, mode=${mode}, time=${time}`);
    }
    checkFull() {
      this.check("full").then().catch((err) => {
        error("DynamicFilterDynamic check full error", err);
      });
    }
    checkIncr() {
      this.check("incr").then().catch((err) => {
        error("DynamicFilterDynamic check incr error", err);
      });
    }
    observe() {
      waitForEle(
        document,
        ".bili-dyn-home--member",
        (node) => node.className === "bili-dyn-home--member"
      ).then((ele) => {
        if (!ele) {
          return;
        }
        debugFilter("DynamicFilterDynamic target appear");
        this.target = ele;
        this.checkFull();
        new MutationObserver(() => {
          this.checkIncr();
        }).observe(this.target, { childList: true, subtree: true });
      });
    }
  }
  const mainFilter$6 = new DynamicFilterDynamic();
  const dynamicFilterDynamicEntry = async () => {
    mainFilter$6.init();
    mainFilter$6.observe();
  };
  const dynamicFilterDynamicGroups = [
    {
      name: "动态发布人过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$6.black.uploader.statusKey,
          name: "启用 动态发布人过滤 (右键单击用户名)",
          noStyle: true,
          enableFn: () => {
            mainFilter$6.dynUploaderFilter.enable();
            mainFilter$6.checkFull();
          },
          disableFn: () => {
            mainFilter$6.dynUploaderFilter.disable();
            mainFilter$6.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$6.black.uploader.valueKey,
          name: "编辑 动态发布用户黑名单",
          editorTitle: "动态发布用户 黑名单",
          description: ["右键屏蔽的用户会出现在首行"],
          editorDescription: ["一行一个用户名,保存时自动去重"],
          saveFn: async () => {
            mainFilter$6.dynUploaderFilter.setParam(BiliCleanerStorage.get(GM_KEYS$6.black.uploader.valueKey, []));
            mainFilter$6.checkFull();
          }
        }
      ]
    },
    {
      name: "动态内视频时长过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$6.black.duration.statusKey,
          name: "启用 时长过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$6.dynDurationFilter.enable();
            mainFilter$6.checkFull();
          },
          disableFn: () => {
            mainFilter$6.dynDurationFilter.disable();
            mainFilter$6.checkFull();
          }
        },
        {
          type: "number",
          id: GM_KEYS$6.black.duration.valueKey,
          name: "设定最低时长(0~300s)",
          minValue: 0,
          maxValue: 300,
          step: 1,
          defaultValue: 60,
          disableValue: 0,
          addonText: "秒",
          fn: (value) => {
            mainFilter$6.dynDurationFilter.setParam(value);
            mainFilter$6.checkFull();
          }
        }
      ]
    },
    {
      name: "动态内视频标题过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$6.black.title.statusKey,
          name: "启用 标题关键词过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$6.dynVideoTitleFilter.enable();
            mainFilter$6.checkFull();
          },
          disableFn: () => {
            mainFilter$6.dynVideoTitleFilter.disable();
            mainFilter$6.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$6.black.title.valueKey,
          name: "编辑 标题关键词黑名单",
          editorTitle: "标题关键词 黑名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter$6.dynVideoTitleFilter.setParam(BiliCleanerStorage.get(GM_KEYS$6.black.title.valueKey, []));
            mainFilter$6.checkFull();
          }
        }
      ]
    },
    {
      name: "动态内容过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$6.black.content.statusKey,
          name: "启用 动态内容关键词过滤",
          description: ["包含被转发动态内容", "不含动态内视频信息"],
          noStyle: true,
          enableFn: () => {
            mainFilter$6.dynContentFilter.enable();
            mainFilter$6.checkFull();
          },
          disableFn: () => {
            mainFilter$6.dynContentFilter.disable();
            mainFilter$6.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$6.black.content.valueKey,
          name: "编辑 动态内容关键词黑名单",
          editorTitle: "动态内容关键词 黑名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter$6.dynContentFilter.setParam(BiliCleanerStorage.get(GM_KEYS$6.black.content.valueKey, []));
            mainFilter$6.checkFull();
          }
        }
      ]
    }
  ];
  const dynamicFilterDynamicHandler = (target) => {
    var _a;
    if (!isPageDynamic()) {
      return [];
    }
    const menus = [];
    if (target.classList.contains("bili-dyn-title__text")) {
      const uploader = (_a = target.textContent) == null ? void 0 : _a.trim();
      if (uploader && mainFilter$6.dynUploaderFilter.isEnable) {
        menus.push({
          name: `隐藏用户动态:${uploader}`,
          fn: async () => {
            try {
              mainFilter$6.dynUploaderFilter.addParam(uploader);
              mainFilter$6.checkFull();
              const arr = BiliCleanerStorage.get(GM_KEYS$6.black.uploader.valueKey, []);
              arr.unshift(uploader);
              BiliCleanerStorage.set(GM_KEYS$6.black.uploader.valueKey, orderedUniq(arr));
            } catch (err) {
              error(`dynamicFilterDynamicHandler add uploader ${uploader} failed`, err);
            }
          }
        });
      }
    }
    return menus;
  };
  class NumberMaxFilter {
    constructor() {
      __publicField(this, "isEnable", false);
      __publicField(this, "threshold", 0);
    }
    enable() {
      this.isEnable = true;
    }
    disable() {
      this.isEnable = false;
    }
    setParam(value) {
      this.threshold = value;
    }
    check(el, selectorFn) {
      return new Promise((resolve, reject) => {
        if (this.isEnable) {
          const value = selectorFn(el);
          if (typeof value === "number" && value > this.threshold) {
            reject();
            return;
          }
        }
        resolve();
      });
    }
  }
  class VideoBvidFilter extends StringFilter {
  }
  class VideoDimensionFilter extends BooleanFilter {
  }
  class VideoDurationFilter extends NumberMinFilter {
  }
  class VideoQualityFilter extends NumberMinFilter {
  }
  class VideoTitleFilter extends KeywordFilter {
  }
  class VideoPubdateFilter extends NumberMaxFilter {
  }
  class VideoUploaderFilter extends StringFilter {
  }
  class VideoUploaderKeywordFilter extends KeywordFilter {
  }
  class VideoViewsFilter extends NumberMinFilter {
  }
  class VideoUploaderWhiteFilter extends StringFilter {
  }
  class VideoTitleWhiteFilter extends KeywordFilter {
  }
  class VideoIsFollowWhiteFilter extends BooleanFilter {
  }
  const GM_KEYS$5 = {
    black: {
      duration: {
        statusKey: "channel-duration-filter-status",
        valueKey: "global-duration-filter-value"
      },
      uploader: {
        statusKey: "channel-uploader-filter-status",
        valueKey: "global-uploader-filter-value"
      },
      uploaderKeyword: {
        statusKey: "channel-uploader-keyword-filter-status",
        valueKey: "global-uploader-keyword-filter-value"
      },
      bvid: {
        statusKey: "channel-bvid-filter-status",
        valueKey: "global-bvid-filter-value"
      },
      pubdate: {
        statusKey: "channel-pubdate-filter-status",
        valueKey: "global-pubdate-filter-value"
      },
      title: {
        statusKey: "channel-title-keyword-filter-status",
        valueKey: "global-title-keyword-filter-value"
      }
    },
    white: {
      uploader: {
        statusKey: "channel-uploader-whitelist-filter-status",
        valueKey: "global-uploader-whitelist-filter-value"
      },
      title: {
        statusKey: "channel-title-keyword-whitelist-filter-status",
        valueKey: "global-title-keyword-whitelist-filter-value"
      }
    }
  };
  const selectorFns$5 = {
    duration: (video) => {
      var _a, _b;
      const duration = (_b = (_a = video.querySelector(".bili-video-card__stats__duration")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim();
      return (duration && convertTimeToSec(duration)) ?? void 0;
    },
    title: (video) => {
      var _a, _b;
      return (_b = (_a = video.querySelector(".bili-video-card__info--tit a")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim();
    },
    pubdate: (video) => {
      var _a, _b;
      const pubdate = (_b = (_a = video.querySelector(".bili-video-card__info--date")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim();
      return pubdate && convertDateToDays(pubdate);
    },
    bvid: (video) => {
      var _a, _b;
      const href2 = ((_a = video.querySelector(".bili-video-card__info--tit a")) == null ? void 0 : _a.getAttribute("href")) || ((_b = video.querySelector(".bili-video-card__image--link")) == null ? void 0 : _b.getAttribute("href"));
      return (href2 && matchBvid(href2)) ?? void 0;
    },
    uploader: (video) => {
      var _a, _b;
      return (_b = (_a = video.querySelector(".bili-video-card__info--author")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim();
    }
  };
  class VideoFilterChannel {
    constructor() {
      __publicField(this, "target");
      // 黑名单
      __publicField(this, "videoBvidFilter", new VideoBvidFilter());
      __publicField(this, "videoDurationFilter", new VideoDurationFilter());
      __publicField(this, "videoTitleFilter", new VideoTitleFilter());
      __publicField(this, "videoPubdateFilter", new VideoPubdateFilter());
      __publicField(this, "videoUploaderFilter", new VideoUploaderFilter());
      __publicField(this, "videoUploaderKeywordFilter", new VideoUploaderKeywordFilter());
      // 白名单
      __publicField(this, "videoUploaderWhiteFilter", new VideoUploaderWhiteFilter());
      __publicField(this, "videoTitleWhiteFilter", new VideoTitleWhiteFilter());
    }
    init() {
      this.videoBvidFilter.setParam(BiliCleanerStorage.get(GM_KEYS$5.black.bvid.valueKey, []));
      this.videoDurationFilter.setParam(BiliCleanerStorage.get(GM_KEYS$5.black.duration.valueKey, 0));
      this.videoTitleFilter.setParam(BiliCleanerStorage.get(GM_KEYS$5.black.title.valueKey, []));
      this.videoPubdateFilter.setParam(BiliCleanerStorage.get(GM_KEYS$5.black.pubdate.valueKey, 0));
      this.videoUploaderFilter.setParam(BiliCleanerStorage.get(GM_KEYS$5.black.uploader.valueKey, []));
      this.videoUploaderKeywordFilter.setParam(BiliCleanerStorage.get(GM_KEYS$5.black.uploaderKeyword.valueKey, []));
      this.videoUploaderWhiteFilter.setParam(BiliCleanerStorage.get(GM_KEYS$5.white.uploader.valueKey, []));
      this.videoTitleWhiteFilter.setParam(BiliCleanerStorage.get(GM_KEYS$5.white.title.valueKey, []));
    }
    async check(mode) {
      if (!this.target) {
        return;
      }
      let revertAll = false;
      if (!(this.videoBvidFilter.isEnable || this.videoDurationFilter.isEnable || this.videoTitleFilter.isEnable || this.videoUploaderFilter.isEnable || this.videoUploaderKeywordFilter.isEnable || this.videoPubdateFilter.isEnable)) {
        revertAll = true;
      }
      const timer = performance.now();
      let selector = `.bili-video-card[data-report*='.']`;
      if (mode === "incr") {
        selector += `:not([${settings.filterSign}])`;
      }
      const videos = Array.from(this.target.querySelectorAll(selector));
      if (!videos.length) {
        return;
      }
      if (revertAll) {
        videos.forEach((v2) => showEle(v2));
        return;
      }
      if (settings.enableDebugFilter) {
        videos.forEach((v2) => {
          debugFilter(
            [
              `VideoFilterChannel`,
              `bvid: ${selectorFns$5.bvid(v2)}`,
              `duration: ${selectorFns$5.duration(v2)}`,
              `title: ${selectorFns$5.title(v2)}`,
              `uploader: ${selectorFns$5.uploader(v2)}`,
              `pubdate: ${selectorFns$5.pubdate(v2)}`
            ].join("\n")
          );
        });
      }
      const blackPairs = [];
      this.videoBvidFilter.isEnable && blackPairs.push([this.videoBvidFilter, selectorFns$5.bvid]);
      this.videoDurationFilter.isEnable && blackPairs.push([this.videoDurationFilter, selectorFns$5.duration]);
      this.videoTitleFilter.isEnable && blackPairs.push([this.videoTitleFilter, selectorFns$5.title]);
      this.videoPubdateFilter.isEnable && blackPairs.push([this.videoPubdateFilter, selectorFns$5.pubdate]);
      this.videoUploaderFilter.isEnable && blackPairs.push([this.videoUploaderFilter, selectorFns$5.uploader]);
      this.videoUploaderKeywordFilter.isEnable && blackPairs.push([this.videoUploaderKeywordFilter, selectorFns$5.uploader]);
      const whitePairs = [];
      this.videoUploaderWhiteFilter.isEnable && whitePairs.push([this.videoUploaderWhiteFilter, selectorFns$5.uploader]);
      this.videoTitleWhiteFilter.isEnable && whitePairs.push([this.videoTitleWhiteFilter, selectorFns$5.title]);
      const blackCnt = await coreCheck(videos, true, blackPairs, whitePairs);
      const time = (performance.now() - timer).toFixed(1);
      debugFilter(`VideoFilterChannel hide ${blackCnt} in ${videos.length} videos, mode=${mode}, time=${time}`);
    }
    checkFull() {
      this.check("full").then().catch((err) => {
        error("VideoFilterChannel check full error", err);
      });
    }
    checkIncr() {
      this.check("incr").then().catch((err) => {
        error("VideoFilterChannel check incr error", err);
      });
    }
    observe() {
      waitForEle(document, "main", (node) => {
        return node.tagName === "MAIN";
      }).then((ele) => {
        if (!ele) {
          return;
        }
        debugFilter("VideoFilterChannel target appear");
        this.target = ele;
        this.checkFull();
        new MutationObserver(() => {
          this.checkIncr();
        }).observe(this.target, { childList: true, subtree: true });
      });
    }
  }
  const mainFilter$5 = new VideoFilterChannel();
  const videoFilterChannelEntry = async () => {
    mainFilter$5.init();
    mainFilter$5.observe();
  };
  const videoFilterChannelGroups = [
    {
      name: "时长过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$5.black.duration.statusKey,
          name: "启用 时长过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$5.videoDurationFilter.enable();
            mainFilter$5.checkFull();
          },
          disableFn: () => {
            mainFilter$5.videoDurationFilter.disable();
            mainFilter$5.checkFull();
          }
        },
        {
          type: "number",
          id: GM_KEYS$5.black.duration.valueKey,
          name: "设定最低时长(0~300s)",
          noStyle: true,
          minValue: 0,
          step: 1,
          maxValue: 300,
          defaultValue: 60,
          disableValue: 0,
          addonText: "秒",
          fn: (value) => {
            mainFilter$5.videoDurationFilter.setParam(value);
            mainFilter$5.checkFull();
          }
        }
      ]
    },
    {
      name: "UP主过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$5.black.uploader.statusKey,
          name: "启用 UP主过滤 (右键单击UP主)",
          defaultEnable: true,
          noStyle: true,
          enableFn: () => {
            mainFilter$5.videoUploaderFilter.enable();
            mainFilter$5.checkFull();
          },
          disableFn: () => {
            mainFilter$5.videoUploaderFilter.disable();
            mainFilter$5.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$5.black.uploader.valueKey,
          name: "编辑 UP主黑名单",
          description: ["右键屏蔽的UP主会出现在首行"],
          editorTitle: "UP主 黑名单",
          editorDescription: ["每行一个UP主昵称,保存时自动去重"],
          saveFn: async () => {
            mainFilter$5.videoUploaderFilter.setParam(BiliCleanerStorage.get(GM_KEYS$5.black.uploader.valueKey, []));
            mainFilter$5.checkFull();
          }
        },
        {
          type: "switch",
          id: GM_KEYS$5.black.uploaderKeyword.statusKey,
          name: "启用 UP主昵称关键词过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$5.videoUploaderKeywordFilter.enable();
            mainFilter$5.checkFull();
          },
          disableFn: () => {
            mainFilter$5.videoUploaderKeywordFilter.disable();
            mainFilter$5.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$5.black.uploaderKeyword.valueKey,
          name: "编辑 UP主昵称关键词黑名单",
          editorTitle: "UP主昵称关键词 黑名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter$5.videoUploaderKeywordFilter.setParam(
              BiliCleanerStorage.get(GM_KEYS$5.black.uploaderKeyword.valueKey, [])
            );
            mainFilter$5.checkFull();
          }
        }
      ]
    },
    {
      name: "标题关键词过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$5.black.title.statusKey,
          name: "启用 标题关键词过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$5.videoTitleFilter.enable();
            mainFilter$5.checkFull();
          },
          disableFn: () => {
            mainFilter$5.videoTitleFilter.disable();
            mainFilter$5.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$5.black.title.valueKey,
          name: "编辑 标题关键词黑名单",
          editorTitle: "标题关键词 黑名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter$5.videoTitleFilter.setParam(BiliCleanerStorage.get(GM_KEYS$5.black.title.valueKey, []));
            mainFilter$5.checkFull();
          }
        }
      ]
    },
    {
      name: "BV号过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$5.black.bvid.statusKey,
          name: "启用 BV号过滤 (右键单击标题)",
          noStyle: true,
          enableFn: () => {
            mainFilter$5.videoBvidFilter.enable();
            mainFilter$5.checkFull();
          },
          disableFn: () => {
            mainFilter$5.videoBvidFilter.disable();
            mainFilter$5.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$5.black.bvid.valueKey,
          name: "编辑 BV号黑名单",
          description: ["右键屏蔽的BV号会出现在首行"],
          editorTitle: "BV号 黑名单",
          editorDescription: ["每行一个BV号,保存时自动去重"],
          saveFn: async () => {
            mainFilter$5.videoBvidFilter.setParam(BiliCleanerStorage.get(GM_KEYS$5.black.bvid.valueKey, []));
            mainFilter$5.checkFull();
          }
        }
      ]
    },
    {
      name: "发布日期过滤",
      fold: true,
      items: [
        {
          type: "switch",
          id: GM_KEYS$5.black.pubdate.statusKey,
          name: "启用 发布日期过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$5.videoPubdateFilter.enable();
            mainFilter$5.checkFull();
          },
          disableFn: () => {
            mainFilter$5.videoPubdateFilter.disable();
            mainFilter$5.checkFull();
          }
        },
        {
          type: "number",
          id: GM_KEYS$5.black.pubdate.valueKey,
          name: "视频发布日 距今不超过",
          noStyle: true,
          minValue: 0,
          maxValue: 500,
          step: 1,
          defaultValue: 60,
          disableValue: 0,
          addonText: "天",
          fn: (value) => {
            mainFilter$5.videoPubdateFilter.setParam(value);
            mainFilter$5.checkFull();
          }
        }
      ]
    },
    {
      name: "白名单 免过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$5.white.uploader.statusKey,
          name: "启用 UP主白名单",
          defaultEnable: true,
          noStyle: true,
          enableFn: () => {
            mainFilter$5.videoUploaderWhiteFilter.enable();
            mainFilter$5.checkFull();
          },
          disableFn: () => {
            mainFilter$5.videoUploaderWhiteFilter.disable();
            mainFilter$5.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$5.white.uploader.valueKey,
          name: "编辑 UP主白名单",
          editorTitle: "UP主 白名单",
          editorDescription: ["每行一个UP主昵称,保存时自动去重"],
          saveFn: async () => {
            mainFilter$5.videoUploaderWhiteFilter.setParam(
              BiliCleanerStorage.get(GM_KEYS$5.white.uploader.valueKey, [])
            );
            mainFilter$5.checkFull();
          }
        },
        {
          type: "switch",
          id: GM_KEYS$5.white.title.statusKey,
          name: "启用 标题关键词白名单",
          noStyle: true,
          enableFn: () => {
            mainFilter$5.videoTitleWhiteFilter.enable();
            mainFilter$5.checkFull();
          },
          disableFn: () => {
            mainFilter$5.videoTitleWhiteFilter.disable();
            mainFilter$5.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$5.white.title.valueKey,
          name: "编辑 标题关键词白名单",
          editorTitle: "标题关键词 白名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter$5.videoTitleWhiteFilter.setParam(BiliCleanerStorage.get(GM_KEYS$5.white.title.valueKey, []));
            mainFilter$5.checkFull();
          }
        }
      ]
    }
  ];
  const videoFilterChannelHandler = (target) => {
    var _a, _b, _c, _d, _e, _f, _g;
    if (!isPageChannel()) {
      return [];
    }
    const menus = [];
    if (target.closest(".bili-video-card__info--owner")) {
      const uploader = (_c = (_b = (_a = target.closest(".bili-video-card__info--owner")) == null ? void 0 : _a.querySelector(".bili-video-card__info--author")) == null ? void 0 : _b.textContent) == null ? void 0 : _c.trim();
      const url = (_d = target.closest(".bili-video-card__info--owner")) == null ? void 0 : _d.href.trim();
      const spaceUrl = (_e = url == null ? void 0 : url.match(/space\.bilibili\.com\/\d+/)) == null ? void 0 : _e[0];
      if (uploader) {
        if (mainFilter$5.videoUploaderFilter.isEnable) {
          menus.push({
            name: `屏蔽UP主:${uploader}`,
            fn: async () => {
              try {
                mainFilter$5.videoUploaderFilter.addParam(uploader);
                mainFilter$5.checkFull();
                const arr = BiliCleanerStorage.get(GM_KEYS$5.black.uploader.valueKey, []);
                arr.unshift(uploader);
                BiliCleanerStorage.set(GM_KEYS$5.black.uploader.valueKey, orderedUniq(arr));
              } catch (err) {
                error(`videoFilterChannelHandler add uploader ${uploader} failed`, err);
              }
            }
          });
        }
        if (mainFilter$5.videoUploaderWhiteFilter.isEnable) {
          menus.push({
            name: `将UP主加入白名单`,
            fn: async () => {
              try {
                mainFilter$5.videoUploaderWhiteFilter.addParam(uploader);
                mainFilter$5.checkFull();
                const arr = BiliCleanerStorage.get(GM_KEYS$5.white.uploader.valueKey, []);
                arr.unshift(uploader);
                BiliCleanerStorage.set(GM_KEYS$5.white.uploader.valueKey, orderedUniq(arr));
              } catch (err) {
                error(`videoFilterChannelHandler add white uploader ${uploader} failed`, err);
              }
            }
          });
        }
      }
      if (spaceUrl && (mainFilter$5.videoUploaderFilter.isEnable || mainFilter$5.videoUploaderWhiteFilter.isEnable)) {
        menus.push({
          name: `复制主页链接`,
          fn: async () => {
            navigator.clipboard.writeText(`https://${spaceUrl}`).then().catch();
          }
        });
      }
    }
    if (target instanceof HTMLAnchorElement && target.closest(".bili-video-card__info--tit")) {
      const url = (_g = (_f = target.closest(".bili-video-card__info--tit")) == null ? void 0 : _f.querySelector("a")) == null ? void 0 : _g.href;
      if (url && mainFilter$5.videoBvidFilter.isEnable) {
        const bvid = matchBvid(url);
        if (bvid) {
          menus.push({
            name: `屏蔽视频 ${bvid}`,
            fn: async () => {
              try {
                mainFilter$5.videoBvidFilter.addParam(bvid);
                mainFilter$5.checkFull();
                const arr = BiliCleanerStorage.get(GM_KEYS$5.black.bvid.valueKey, []);
                arr.unshift(bvid);
                BiliCleanerStorage.set(GM_KEYS$5.black.bvid.valueKey, orderedUniq(arr));
              } catch (err) {
                error(`videoFilterChannelHandler add bvid ${bvid} failed`, err);
              }
            }
          });
          menus.push({
            name: "复制视频链接",
            fn: async () => {
              navigator.clipboard.writeText(`https://www.bilibili.com/video/${bvid}`).then().catch();
            }
          });
        }
      }
    }
    return menus;
  };
  const GM_KEYS$4 = {
    black: {
      duration: {
        statusKey: "homepage-duration-filter-status",
        valueKey: "global-duration-filter-value"
      },
      views: {
        statusKey: "homepage-views-filter-status",
        valueKey: "global-views-filter-value"
      },
      uploader: {
        statusKey: "homepage-uploader-filter-status",
        valueKey: "global-uploader-filter-value"
      },
      uploaderKeyword: {
        statusKey: "homepage-uploader-keyword-filter-status",
        valueKey: "global-uploader-keyword-filter-value"
      },
      bvid: {
        statusKey: "homepage-bvid-filter-status",
        valueKey: "global-bvid-filter-value"
      },
      pubdate: {
        statusKey: "homepage-pubdate-filter-status",
        valueKey: "global-pubdate-filter-value"
      },
      title: {
        statusKey: "homepage-title-keyword-filter-status",
        valueKey: "global-title-keyword-filter-value"
      }
    },
    white: {
      uploader: {
        statusKey: "homepage-uploader-whitelist-filter-status",
        valueKey: "global-uploader-whitelist-filter-value"
      },
      title: {
        statusKey: "homepage-title-keyword-whitelist-filter-status",
        valueKey: "global-title-keyword-whitelist-filter-value"
      },
      isFollow: {
        statusKey: "homepage-following-whitelist-filter-status"
      }
    }
  };
  const selectorFns$4 = {
    duration: (video) => {
      var _a, _b;
      const duration = (_b = (_a = video.querySelector(".bili-video-card__stats__duration")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim();
      return duration && convertTimeToSec(duration);
    },
    views: (video) => {
      var _a, _b;
      const text = (_b = (_a = video.querySelector(".bili-video-card__stats--text")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim();
      if (text) {
        if (/\d+(?:\.\d+)?万/.test(text)) {
          return parseFloat(text.replace("万", "")) * 1e4;
        }
        if (/^\d+$/.test(text)) {
          return parseFloat(text);
        }
      }
      return void 0;
    },
    title: (video) => {
      var _a, _b;
      return (_b = (_a = video.querySelector(".bili-video-card__info--tit a")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim();
    },
    pubdate: (video) => {
      var _a, _b;
      const pubdate = (_b = (_a = video.querySelector(".bili-video-card__info--date")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim();
      return pubdate && convertDateToDays(pubdate);
    },
    bvid: (video) => {
      var _a, _b;
      const href2 = ((_a = video.querySelector(".bili-video-card__info--tit a")) == null ? void 0 : _a.getAttribute("href")) || ((_b = video.querySelector(".bili-video-card__image--link")) == null ? void 0 : _b.getAttribute("href"));
      return (href2 && matchBvid(href2)) ?? void 0;
    },
    uploader: (video) => {
      var _a, _b;
      return (_b = (_a = video.querySelector(".bili-video-card__info--author")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim();
    },
    isFollow: (video) => {
      var _a, _b;
      return ((_b = (_a = video.querySelector(".bili-video-card__info--icon-text")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim()) === "已关注";
    }
  };
  class VideoFilterHomepage {
    constructor() {
      __publicField(this, "target");
      // 黑名单
      __publicField(this, "videoBvidFilter", new VideoBvidFilter());
      __publicField(this, "videoDurationFilter", new VideoDurationFilter());
      __publicField(this, "videoViewsFilter", new VideoViewsFilter());
      __publicField(this, "videoTitleFilter", new VideoTitleFilter());
      __publicField(this, "videoPubdateFilter", new VideoPubdateFilter());
      __publicField(this, "videoUploaderFilter", new VideoUploaderFilter());
      __publicField(this, "videoUploaderKeywordFilter", new VideoUploaderKeywordFilter());
      // 白名单
      __publicField(this, "videoUploaderWhiteFilter", new VideoUploaderWhiteFilter());
      __publicField(this, "videoTitleWhiteFilter", new VideoTitleWhiteFilter());
      __publicField(this, "videoIsFollowWhiteFilter", new VideoIsFollowWhiteFilter());
    }
    init() {
      this.videoBvidFilter.setParam(BiliCleanerStorage.get(GM_KEYS$4.black.bvid.valueKey, []));
      this.videoDurationFilter.setParam(BiliCleanerStorage.get(GM_KEYS$4.black.duration.valueKey, 0));
      this.videoViewsFilter.setParam(BiliCleanerStorage.get(GM_KEYS$4.black.views.valueKey, 0));
      this.videoTitleFilter.setParam(BiliCleanerStorage.get(GM_KEYS$4.black.title.valueKey, []));
      this.videoPubdateFilter.setParam(BiliCleanerStorage.get(GM_KEYS$4.black.pubdate.valueKey, 0));
      this.videoUploaderFilter.setParam(BiliCleanerStorage.get(GM_KEYS$4.black.uploader.valueKey, []));
      this.videoUploaderKeywordFilter.setParam(BiliCleanerStorage.get(GM_KEYS$4.black.uploaderKeyword.valueKey, []));
      this.videoUploaderWhiteFilter.setParam(BiliCleanerStorage.get(GM_KEYS$4.white.uploader.valueKey, []));
      this.videoTitleWhiteFilter.setParam(BiliCleanerStorage.get(GM_KEYS$4.white.title.valueKey, []));
    }
    async check(mode) {
      if (!this.target) {
        return;
      }
      let revertAll = false;
      if (!(this.videoBvidFilter.isEnable || this.videoDurationFilter.isEnable || this.videoViewsFilter.isEnable || this.videoTitleFilter.isEnable || this.videoUploaderFilter.isEnable || this.videoUploaderKeywordFilter.isEnable || this.videoPubdateFilter.isEnable)) {
        revertAll = true;
      }
      const timer = performance.now();
      let selector = `:scope > :is(.feed-card, .bili-video-card.is-rcmd)`;
      if (mode === "incr") {
        selector += `:not([${settings.filterSign}])`;
      }
      const videos = Array.from(this.target.querySelectorAll(selector));
      if (!videos.length) {
        return;
      }
      if (revertAll) {
        videos.forEach((v2) => showEle(v2));
        return;
      }
      if (settings.enableDebugFilter) {
        videos.forEach((v2) => {
          debugFilter(
            [
              `VideoFilterHomepage`,
              `bvid: ${selectorFns$4.bvid(v2)}`,
              `duration: ${selectorFns$4.duration(v2)}`,
              `views: ${selectorFns$4.views(v2)}`,
              `title: ${selectorFns$4.title(v2)}`,
              `uploader: ${selectorFns$4.uploader(v2)}`,
              `pubdate: ${selectorFns$4.pubdate(v2)}`,
              `isFollow: ${selectorFns$4.isFollow(v2)}`
            ].join("\n")
          );
        });
      }
      const blackPairs = [];
      this.videoBvidFilter.isEnable && blackPairs.push([this.videoBvidFilter, selectorFns$4.bvid]);
      this.videoDurationFilter.isEnable && blackPairs.push([this.videoDurationFilter, selectorFns$4.duration]);
      this.videoViewsFilter.isEnable && blackPairs.push([this.videoViewsFilter, selectorFns$4.views]);
      this.videoTitleFilter.isEnable && blackPairs.push([this.videoTitleFilter, selectorFns$4.title]);
      this.videoPubdateFilter.isEnable && blackPairs.push([this.videoPubdateFilter, selectorFns$4.pubdate]);
      this.videoUploaderFilter.isEnable && blackPairs.push([this.videoUploaderFilter, selectorFns$4.uploader]);
      this.videoUploaderKeywordFilter.isEnable && blackPairs.push([this.videoUploaderKeywordFilter, selectorFns$4.uploader]);
      const whitePairs = [];
      this.videoUploaderWhiteFilter.isEnable && whitePairs.push([this.videoUploaderWhiteFilter, selectorFns$4.uploader]);
      this.videoTitleWhiteFilter.isEnable && whitePairs.push([this.videoTitleWhiteFilter, selectorFns$4.title]);
      this.videoIsFollowWhiteFilter.isEnable && whitePairs.push([this.videoIsFollowWhiteFilter, selectorFns$4.isFollow]);
      const blackCnt = await coreCheck(videos, true, blackPairs, whitePairs);
      const time = (performance.now() - timer).toFixed(1);
      debugFilter(`VideoFilterHomepage hide ${blackCnt} in ${videos.length} videos, mode=${mode}, time=${time}`);
    }
    checkFull() {
      this.check("full").then().catch((err) => {
        error("VideoFilterHomepage check full error", err);
      });
    }
    checkIncr() {
      this.check("incr").then().catch((err) => {
        error("VideoFilterHomepage check incr error", err);
      });
    }
    observe() {
      waitForEle(document, ".container", (node) => {
        return node.classList.contains("container");
      }).then((ele) => {
        if (!ele) {
          return;
        }
        debugFilter("VideoFilterHomepage target appear");
        this.target = ele;
        this.checkFull();
        new MutationObserver(() => {
          this.checkIncr();
        }).observe(this.target, { childList: true });
      });
    }
  }
  const mainFilter$4 = new VideoFilterHomepage();
  const videoFilterHomepageEntry = async () => {
    mainFilter$4.init();
    mainFilter$4.observe();
  };
  const videoFilterHomepageGroups = [
    {
      name: "时长过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$4.black.duration.statusKey,
          name: "启用 时长过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$4.videoDurationFilter.enable();
            mainFilter$4.checkFull();
          },
          disableFn: () => {
            mainFilter$4.videoDurationFilter.disable();
            mainFilter$4.checkFull();
          }
        },
        {
          type: "number",
          id: GM_KEYS$4.black.duration.valueKey,
          name: "设定最低时长(0~300s)",
          noStyle: true,
          minValue: 0,
          maxValue: 300,
          step: 1,
          defaultValue: 60,
          disableValue: 0,
          addonText: "秒",
          fn: (value) => {
            mainFilter$4.videoDurationFilter.setParam(value);
            mainFilter$4.checkFull();
          }
        }
      ]
    },
    {
      name: "UP主过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$4.black.uploader.statusKey,
          name: "启用 UP主过滤 (右键单击UP主)",
          defaultEnable: true,
          noStyle: true,
          enableFn: () => {
            mainFilter$4.videoUploaderFilter.enable();
            mainFilter$4.checkFull();
          },
          disableFn: () => {
            mainFilter$4.videoUploaderFilter.disable();
            mainFilter$4.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$4.black.uploader.valueKey,
          name: "编辑 UP主黑名单",
          description: ["右键屏蔽的UP主会出现在首行"],
          editorTitle: "UP主 黑名单",
          editorDescription: ["每行一个UP主昵称,保存时自动去重"],
          saveFn: async () => {
            mainFilter$4.videoUploaderFilter.setParam(BiliCleanerStorage.get(GM_KEYS$4.black.uploader.valueKey, []));
            mainFilter$4.checkFull();
          }
        },
        {
          type: "switch",
          id: GM_KEYS$4.black.uploaderKeyword.statusKey,
          name: "启用 UP主昵称关键词过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$4.videoUploaderKeywordFilter.enable();
            mainFilter$4.checkFull();
          },
          disableFn: () => {
            mainFilter$4.videoUploaderKeywordFilter.disable();
            mainFilter$4.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$4.black.uploaderKeyword.valueKey,
          name: "编辑 UP主昵称关键词黑名单",
          editorTitle: "UP主昵称关键词 黑名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter$4.videoUploaderKeywordFilter.setParam(
              BiliCleanerStorage.get(GM_KEYS$4.black.uploaderKeyword.valueKey, [])
            );
            mainFilter$4.checkFull();
          }
        }
      ]
    },
    {
      name: "标题关键词过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$4.black.title.statusKey,
          name: "启用 标题关键词过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$4.videoTitleFilter.enable();
            mainFilter$4.checkFull();
          },
          disableFn: () => {
            mainFilter$4.videoTitleFilter.disable();
            mainFilter$4.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$4.black.title.valueKey,
          name: "编辑 标题关键词黑名单",
          editorTitle: "标题关键词 黑名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter$4.videoTitleFilter.setParam(BiliCleanerStorage.get(GM_KEYS$4.black.title.valueKey, []));
            mainFilter$4.checkFull();
          }
        }
      ]
    },
    {
      name: "BV号过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$4.black.bvid.statusKey,
          name: "启用 BV号过滤 (右键单击标题)",
          noStyle: true,
          enableFn: () => {
            mainFilter$4.videoBvidFilter.enable();
            mainFilter$4.checkFull();
          },
          disableFn: () => {
            mainFilter$4.videoBvidFilter.disable();
            mainFilter$4.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$4.black.bvid.valueKey,
          name: "编辑 BV号黑名单",
          description: ["右键屏蔽的BV号会出现在首行"],
          editorTitle: "BV号 黑名单",
          editorDescription: ["每行一个BV号,保存时自动去重"],
          saveFn: async () => {
            mainFilter$4.videoBvidFilter.setParam(BiliCleanerStorage.get(GM_KEYS$4.black.bvid.valueKey, []));
            mainFilter$4.checkFull();
          }
        }
      ]
    },
    {
      name: "发布日期过滤",
      fold: true,
      items: [
        {
          type: "switch",
          id: GM_KEYS$4.black.pubdate.statusKey,
          name: "启用 发布日期过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$4.videoPubdateFilter.enable();
            mainFilter$4.checkFull();
          },
          disableFn: () => {
            mainFilter$4.videoPubdateFilter.disable();
            mainFilter$4.checkFull();
          }
        },
        {
          type: "number",
          id: GM_KEYS$4.black.pubdate.valueKey,
          name: "视频发布日 距今不超过",
          noStyle: true,
          minValue: 0,
          maxValue: 500,
          step: 1,
          defaultValue: 60,
          disableValue: 0,
          addonText: "天",
          fn: (value) => {
            mainFilter$4.videoPubdateFilter.setParam(value);
            mainFilter$4.checkFull();
          }
        }
      ]
    },
    {
      name: "播放量过滤",
      fold: true,
      items: [
        {
          type: "switch",
          id: GM_KEYS$4.black.views.statusKey,
          name: "启用 播放量过滤",
          description: ["不推荐启用", "会导致刚发布的优质视频被过滤"],
          noStyle: true,
          enableFn: () => {
            mainFilter$4.videoViewsFilter.enable();
            mainFilter$4.checkFull();
          },
          disableFn: () => {
            mainFilter$4.videoViewsFilter.disable();
            mainFilter$4.checkFull();
          }
        },
        {
          type: "number",
          id: GM_KEYS$4.black.views.valueKey,
          name: "设定最低播放量(0~10万)",
          noStyle: true,
          minValue: 0,
          maxValue: 1e5,
          step: 1,
          defaultValue: 0,
          disableValue: 0,
          addonText: "次",
          fn: (value) => {
            mainFilter$4.videoViewsFilter.setParam(value);
            mainFilter$4.checkFull();
          }
        }
      ]
    },
    {
      name: "白名单 免过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$4.white.isFollow.statusKey,
          name: "标有 [已关注] 的视频免过滤",
          defaultEnable: true,
          noStyle: true,
          enableFn: () => {
            mainFilter$4.videoIsFollowWhiteFilter.enable();
            mainFilter$4.checkFull();
          },
          disableFn: () => {
            mainFilter$4.videoIsFollowWhiteFilter.disable();
            mainFilter$4.checkFull();
          }
        },
        {
          type: "switch",
          id: GM_KEYS$4.white.uploader.statusKey,
          name: "启用 UP主白名单",
          defaultEnable: true,
          noStyle: true,
          enableFn: () => {
            mainFilter$4.videoUploaderWhiteFilter.enable();
            mainFilter$4.checkFull();
          },
          disableFn: () => {
            mainFilter$4.videoUploaderWhiteFilter.disable();
            mainFilter$4.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$4.white.uploader.valueKey,
          name: "编辑 UP主白名单",
          editorTitle: "UP主 白名单",
          editorDescription: ["每行一个UP主昵称,保存时自动去重"],
          saveFn: async () => {
            mainFilter$4.videoUploaderWhiteFilter.setParam(
              BiliCleanerStorage.get(GM_KEYS$4.white.uploader.valueKey, [])
            );
            mainFilter$4.checkFull();
          }
        },
        {
          type: "switch",
          id: GM_KEYS$4.white.title.statusKey,
          name: "启用 标题关键词白名单",
          noStyle: true,
          enableFn: () => {
            mainFilter$4.videoTitleWhiteFilter.enable();
            mainFilter$4.checkFull();
          },
          disableFn: () => {
            mainFilter$4.videoTitleWhiteFilter.disable();
            mainFilter$4.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$4.white.title.valueKey,
          name: "编辑 标题关键词白名单",
          editorTitle: "标题关键词 白名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter$4.videoTitleWhiteFilter.setParam(BiliCleanerStorage.get(GM_KEYS$4.white.title.valueKey, []));
            mainFilter$4.checkFull();
          }
        }
      ]
    }
  ];
  const videoFilterHomepageHandler = (target) => {
    var _a, _b, _c, _d, _e, _f, _g;
    if (!isPageHomepage()) {
      return [];
    }
    const menus = [];
    if (target.closest(".bili-video-card__info--owner")) {
      const uploader = (_c = (_b = (_a = target.closest(".bili-video-card__info--owner")) == null ? void 0 : _a.querySelector(".bili-video-card__info--author")) == null ? void 0 : _b.textContent) == null ? void 0 : _c.trim();
      const url = (_d = target.closest(".bili-video-card__info--owner")) == null ? void 0 : _d.href.trim();
      const spaceUrl = (_e = url == null ? void 0 : url.match(/space\.bilibili\.com\/\d+/)) == null ? void 0 : _e[0];
      if (uploader) {
        if (mainFilter$4.videoUploaderFilter.isEnable) {
          menus.push({
            name: `屏蔽UP主:${uploader}`,
            fn: async () => {
              try {
                mainFilter$4.videoUploaderFilter.addParam(uploader);
                mainFilter$4.checkFull();
                const arr = BiliCleanerStorage.get(GM_KEYS$4.black.uploader.valueKey, []);
                arr.unshift(uploader);
                BiliCleanerStorage.set(GM_KEYS$4.black.uploader.valueKey, orderedUniq(arr));
              } catch (err) {
                error(`videoFilterHomepageHandler add uploader ${uploader} failed`, err);
              }
            }
          });
        }
        if (mainFilter$4.videoUploaderWhiteFilter.isEnable) {
          menus.push({
            name: `将UP主加入白名单`,
            fn: async () => {
              try {
                mainFilter$4.videoUploaderWhiteFilter.addParam(uploader);
                mainFilter$4.checkFull();
                const arr = BiliCleanerStorage.get(GM_KEYS$4.white.uploader.valueKey, []);
                arr.unshift(uploader);
                BiliCleanerStorage.set(GM_KEYS$4.white.uploader.valueKey, orderedUniq(arr));
              } catch (err) {
                error(`videoFilterHomepageHandler add white uploader ${uploader} failed`, err);
              }
            }
          });
        }
      }
      if (spaceUrl && (mainFilter$4.videoUploaderFilter.isEnable || mainFilter$4.videoUploaderWhiteFilter.isEnable)) {
        menus.push({
          name: `复制主页链接`,
          fn: () => navigator.clipboard.writeText(`https://${spaceUrl}`).then().catch()
        });
      }
    }
    if (target instanceof HTMLAnchorElement && target.closest(".bili-video-card__info--tit")) {
      const url = (_g = (_f = target.closest(".bili-video-card__info--tit")) == null ? void 0 : _f.querySelector("a")) == null ? void 0 : _g.href;
      if (url && mainFilter$4.videoBvidFilter.isEnable) {
        const bvid = matchBvid(url);
        if (bvid) {
          menus.push({
            name: `屏蔽视频 ${bvid}`,
            fn: async () => {
              try {
                mainFilter$4.videoBvidFilter.addParam(bvid);
                mainFilter$4.checkFull();
                const arr = BiliCleanerStorage.get(GM_KEYS$4.black.bvid.valueKey, []);
                arr.unshift(bvid);
                BiliCleanerStorage.set(GM_KEYS$4.black.bvid.valueKey, orderedUniq(arr));
              } catch (err) {
                error(`videoFilterHomepageHandler add bvid ${bvid} failed`, err);
              }
            }
          });
          menus.push({
            name: "复制视频链接",
            fn: () => navigator.clipboard.writeText(`https://www.bilibili.com/video/${bvid}`).then().catch()
          });
        }
      }
    }
    return menus;
  };
  const GM_KEYS$3 = {
    black: {
      duration: {
        statusKey: "popular-duration-filter-status",
        valueKey: "global-duration-filter-value"
      },
      uploader: {
        statusKey: "popular-uploader-filter-status",
        valueKey: "global-uploader-filter-value"
      },
      uploaderKeyword: {
        statusKey: "popular-uploader-keyword-filter-status",
        valueKey: "global-uploader-keyword-filter-value"
      },
      bvid: {
        statusKey: "popular-bvid-filter-status",
        valueKey: "global-bvid-filter-value"
      },
      title: {
        statusKey: "popular-title-keyword-filter-status",
        valueKey: "global-title-keyword-filter-value"
      },
      quality: {
        statusKey: "popular-quality-filter-status",
        valueKey: "global-quality-filter-value"
      },
      dimension: {
        statusKey: "popular-dimension-filter-status"
      }
    },
    white: {
      uploader: {
        statusKey: "popular-uploader-whitelist-filter-status",
        valueKey: "global-uploader-whitelist-filter-value"
      },
      title: {
        statusKey: "popular-title-keyword-whitelist-filter-status",
        valueKey: "global-title-keyword-whitelist-filter-value"
      }
    }
  };
  const getVideoData = (video) => {
    var _a, _b, _c, _d;
    let videoData;
    if (!video.classList.contains("rank-item")) {
      return (_a = video.__vue__) == null ? void 0 : _a.videoData;
    }
    const rank = video.getAttribute("data-rank");
    if (rank && parseInt(rank) > 0) {
      videoData = (_d = (_c = (_b = video.closest(".rank-list-wrap")) == null ? void 0 : _b.__vue__) == null ? void 0 : _c.list) == null ? void 0 : _d[parseInt(rank) - 1];
    }
    return videoData;
  };
  const selectorFns$3 = {
    title: (video) => {
      var _a;
      return (_a = getVideoData(video)) == null ? void 0 : _a.title;
    },
    bvid: (video) => {
      var _a;
      return (_a = getVideoData(video)) == null ? void 0 : _a.bvid;
    },
    uploader: (video) => {
      var _a, _b;
      return (_b = (_a = getVideoData(video)) == null ? void 0 : _a.owner) == null ? void 0 : _b.name;
    },
    duration: (video) => {
      var _a;
      return (_a = getVideoData(video)) == null ? void 0 : _a.duration;
    },
    quality: (video) => {
      var _a;
      const stat = (_a = getVideoData(video)) == null ? void 0 : _a.stat;
      if (stat && typeof stat.coin === "number" && typeof stat.like === "number") {
        return calcQuality(stat.coin / stat.like);
      }
      return void 0;
    },
    // true竖屏, false横屏
    dimension: (video) => {
      var _a;
      const dimension = (_a = getVideoData(video)) == null ? void 0 : _a.dimension;
      if (dimension && typeof dimension.height === "number" && typeof dimension.width === "number") {
        return (dimension == null ? void 0 : dimension.height) > (dimension == null ? void 0 : dimension.width);
      }
      return void 0;
    }
  };
  class VideoFilterPopular {
    constructor() {
      __publicField(this, "target");
      // 黑名单
      __publicField(this, "videoBvidFilter", new VideoBvidFilter());
      __publicField(this, "videoDurationFilter", new VideoDurationFilter());
      __publicField(this, "videoTitleFilter", new VideoTitleFilter());
      __publicField(this, "videoPubdateFilter", new VideoPubdateFilter());
      __publicField(this, "videoUploaderFilter", new VideoUploaderFilter());
      __publicField(this, "videoUploaderKeywordFilter", new VideoUploaderKeywordFilter());
      __publicField(this, "videoQualityFilter", new VideoQualityFilter());
      __publicField(this, "videoDimensionFilter", new VideoDimensionFilter());
      // 白名单
      __publicField(this, "videoUploaderWhiteFilter", new VideoUploaderWhiteFilter());
      __publicField(this, "videoTitleWhiteFilter", new VideoTitleWhiteFilter());
    }
    init() {
      this.videoBvidFilter.setParam(BiliCleanerStorage.get(GM_KEYS$3.black.bvid.valueKey, []));
      this.videoDurationFilter.setParam(BiliCleanerStorage.get(GM_KEYS$3.black.duration.valueKey, 0));
      this.videoTitleFilter.setParam(BiliCleanerStorage.get(GM_KEYS$3.black.title.valueKey, []));
      this.videoUploaderFilter.setParam(BiliCleanerStorage.get(GM_KEYS$3.black.uploader.valueKey, []));
      this.videoUploaderKeywordFilter.setParam(BiliCleanerStorage.get(GM_KEYS$3.black.uploaderKeyword.valueKey, []));
      this.videoQualityFilter.setParam(BiliCleanerStorage.get(GM_KEYS$3.black.quality.valueKey, 0));
      this.videoUploaderWhiteFilter.setParam(BiliCleanerStorage.get(GM_KEYS$3.white.uploader.valueKey, []));
      this.videoTitleWhiteFilter.setParam(BiliCleanerStorage.get(GM_KEYS$3.white.title.valueKey, []));
    }
    async check(mode) {
      if (!this.target) {
        return;
      }
      let revertAll = false;
      if (!(this.videoBvidFilter.isEnable || this.videoDurationFilter.isEnable || this.videoTitleFilter.isEnable || this.videoUploaderFilter.isEnable || this.videoUploaderKeywordFilter.isEnable || this.videoDimensionFilter.isEnable || this.videoQualityFilter.isEnable)) {
        revertAll = true;
      }
      const timer = performance.now();
      const selector = `.card-list .video-card, .video-list .video-card, .rank-list .rank-item`;
      const videos = Array.from(this.target.querySelectorAll(selector));
      if (!videos.length) {
        return;
      }
      if (revertAll) {
        videos.forEach((v2) => showEle(v2));
        return;
      }
      if (settings.enableDebugFilter) {
        videos.forEach((v2) => {
          debugFilter(
            [
              `VideoFilterPopular`,
              `bvid: ${selectorFns$3.bvid(v2)}`,
              `duration: ${selectorFns$3.duration(v2)}`,
              `title: ${selectorFns$3.title(v2)}`,
              `uploader: ${selectorFns$3.uploader(v2)}`,
              `quality: ${selectorFns$3.quality(v2)}`
            ].join("\n")
          );
        });
      }
      const blackPairs = [];
      this.videoBvidFilter.isEnable && blackPairs.push([this.videoBvidFilter, selectorFns$3.bvid]);
      this.videoDurationFilter.isEnable && blackPairs.push([this.videoDurationFilter, selectorFns$3.duration]);
      this.videoTitleFilter.isEnable && blackPairs.push([this.videoTitleFilter, selectorFns$3.title]);
      this.videoUploaderFilter.isEnable && blackPairs.push([this.videoUploaderFilter, selectorFns$3.uploader]);
      this.videoUploaderKeywordFilter.isEnable && blackPairs.push([this.videoUploaderKeywordFilter, selectorFns$3.uploader]);
      this.videoDimensionFilter.isEnable && blackPairs.push([this.videoDimensionFilter, selectorFns$3.dimension]);
      this.videoQualityFilter.isEnable && blackPairs.push([this.videoQualityFilter, selectorFns$3.quality]);
      const whitePairs = [];
      this.videoUploaderWhiteFilter.isEnable && whitePairs.push([this.videoUploaderWhiteFilter, selectorFns$3.uploader]);
      this.videoTitleWhiteFilter.isEnable && whitePairs.push([this.videoTitleWhiteFilter, selectorFns$3.title]);
      const blackCnt = await coreCheck(videos, true, blackPairs, whitePairs);
      const time = (performance.now() - timer).toFixed(1);
      debugFilter(`VideoFilterPopular hide ${blackCnt} in ${videos.length} videos, mode=${mode}, time=${time}`);
    }
    checkFull() {
      this.check("full").then().catch((err) => {
        error("VideoFilterPopular check full error", err);
      });
    }
    // checkIncr() {
    //     this.check('incr')
    //         .then()
    //         .catch((err) => {
    //             error('VideoFilterPopular check incr error', err)
    //         })
    // }
    observe() {
      waitForEle(document, "#app", (node) => {
        return node.id === "app";
      }).then((ele) => {
        if (!ele) {
          return;
        }
        debugFilter("VideoFilterPopular target appear");
        this.target = ele;
        this.checkFull();
        new MutationObserver(() => {
          this.checkFull();
        }).observe(this.target, { childList: true, subtree: true });
      });
    }
  }
  const mainFilter$3 = new VideoFilterPopular();
  const videoFilterPopularEntry = async () => {
    mainFilter$3.init();
    mainFilter$3.observe();
  };
  const videoFilterPopularGroups = [
    {
      name: "时长过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$3.black.duration.statusKey,
          name: "启用 时长过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$3.videoDurationFilter.enable();
            mainFilter$3.checkFull();
          },
          disableFn: () => {
            mainFilter$3.videoDurationFilter.disable();
            mainFilter$3.checkFull();
          }
        },
        {
          type: "number",
          id: GM_KEYS$3.black.duration.valueKey,
          name: "设定最低时长(0~300s)",
          noStyle: true,
          minValue: 0,
          maxValue: 300,
          step: 1,
          defaultValue: 60,
          disableValue: 0,
          addonText: "秒",
          fn: (value) => {
            mainFilter$3.videoDurationFilter.setParam(value);
            mainFilter$3.checkFull();
          }
        }
      ]
    },
    {
      name: "UP主过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$3.black.uploader.statusKey,
          name: "启用 UP主过滤 (右键单击UP主)",
          defaultEnable: true,
          noStyle: true,
          enableFn: () => {
            mainFilter$3.videoUploaderFilter.enable();
            mainFilter$3.checkFull();
          },
          disableFn: () => {
            mainFilter$3.videoUploaderFilter.disable();
            mainFilter$3.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$3.black.uploader.valueKey,
          name: "编辑 UP主黑名单",
          description: ["右键屏蔽的UP主会出现在首行"],
          editorTitle: "UP主 黑名单",
          editorDescription: ["每行一个UP主昵称,保存时自动去重"],
          saveFn: async () => {
            mainFilter$3.videoUploaderFilter.setParam(BiliCleanerStorage.get(GM_KEYS$3.black.uploader.valueKey, []));
            mainFilter$3.checkFull();
          }
        },
        {
          type: "switch",
          id: GM_KEYS$3.black.uploaderKeyword.statusKey,
          name: "启用 UP主昵称关键词过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$3.videoUploaderKeywordFilter.enable();
            mainFilter$3.checkFull();
          },
          disableFn: () => {
            mainFilter$3.videoUploaderKeywordFilter.disable();
            mainFilter$3.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$3.black.uploaderKeyword.valueKey,
          name: "编辑 UP主昵称关键词黑名单",
          editorTitle: "UP主昵称关键词 黑名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter$3.videoUploaderKeywordFilter.setParam(
              BiliCleanerStorage.get(GM_KEYS$3.black.uploaderKeyword.valueKey, [])
            );
            mainFilter$3.checkFull();
          }
        }
      ]
    },
    {
      name: "视频质量过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$3.black.dimension.statusKey,
          name: "启用 竖屏视频过滤",
          defaultEnable: true,
          noStyle: true,
          enableFn: () => {
            mainFilter$3.videoDimensionFilter.enable();
            mainFilter$3.checkFull();
          },
          disableFn: () => {
            mainFilter$3.videoDimensionFilter.disable();
            mainFilter$3.checkFull();
          }
        },
        {
          type: "switch",
          id: GM_KEYS$3.black.quality.statusKey,
          name: "启用 劣质视频过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$3.videoQualityFilter.enable();
            mainFilter$3.checkFull();
          },
          disableFn: () => {
            mainFilter$3.videoQualityFilter.disable();
            mainFilter$3.checkFull();
          }
        },
        {
          type: "number",
          id: GM_KEYS$3.black.quality.valueKey,
          name: "劣质视频过滤百分比 (0~80%)",
          noStyle: true,
          minValue: 0,
          maxValue: 80,
          step: 0.1,
          defaultValue: 25,
          disableValue: 0,
          addonText: "%",
          fn: (value) => {
            mainFilter$3.videoQualityFilter.setParam(value);
            mainFilter$3.checkFull();
          }
        }
      ]
    },
    {
      name: "标题关键词过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$3.black.title.statusKey,
          name: "启用 标题关键词过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$3.videoTitleFilter.enable();
            mainFilter$3.checkFull();
          },
          disableFn: () => {
            mainFilter$3.videoTitleFilter.disable();
            mainFilter$3.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$3.black.title.valueKey,
          name: "编辑 标题关键词黑名单",
          editorTitle: "标题关键词 黑名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter$3.videoTitleFilter.setParam(BiliCleanerStorage.get(GM_KEYS$3.black.title.valueKey, []));
            mainFilter$3.checkFull();
          }
        }
      ]
    },
    {
      name: "BV号过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$3.black.bvid.statusKey,
          name: "启用 BV号过滤 (右键单击标题)",
          noStyle: true,
          enableFn: () => {
            mainFilter$3.videoBvidFilter.enable();
            mainFilter$3.checkFull();
          },
          disableFn: () => {
            mainFilter$3.videoBvidFilter.disable();
            mainFilter$3.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$3.black.bvid.valueKey,
          name: "编辑 BV号黑名单",
          description: ["右键屏蔽的BV号会出现在首行"],
          editorTitle: "BV号 黑名单",
          editorDescription: ["每行一个BV号,保存时自动去重"],
          saveFn: async () => {
            mainFilter$3.videoBvidFilter.setParam(BiliCleanerStorage.get(GM_KEYS$3.black.bvid.valueKey, []));
            mainFilter$3.checkFull();
          }
        }
      ]
    },
    {
      name: "白名单 免过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$3.white.uploader.statusKey,
          name: "启用 UP主白名单",
          defaultEnable: true,
          noStyle: true,
          enableFn: () => {
            mainFilter$3.videoUploaderWhiteFilter.enable();
            mainFilter$3.checkFull();
          },
          disableFn: () => {
            mainFilter$3.videoUploaderWhiteFilter.disable();
            mainFilter$3.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$3.white.uploader.valueKey,
          name: "编辑 UP主白名单",
          editorTitle: "UP主 白名单",
          editorDescription: ["每行一个UP主昵称,保存时自动去重"],
          saveFn: async () => {
            mainFilter$3.videoUploaderWhiteFilter.setParam(
              BiliCleanerStorage.get(GM_KEYS$3.white.uploader.valueKey, [])
            );
            mainFilter$3.checkFull();
          }
        },
        {
          type: "switch",
          id: GM_KEYS$3.white.title.statusKey,
          name: "启用 标题关键词白名单",
          noStyle: true,
          enableFn: () => {
            mainFilter$3.videoTitleWhiteFilter.enable();
            mainFilter$3.checkFull();
          },
          disableFn: () => {
            mainFilter$3.videoTitleWhiteFilter.disable();
            mainFilter$3.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$3.white.title.valueKey,
          name: "编辑 标题关键词白名单",
          editorTitle: "标题关键词 白名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter$3.videoTitleWhiteFilter.setParam(BiliCleanerStorage.get(GM_KEYS$3.white.title.valueKey, []));
            mainFilter$3.checkFull();
          }
        }
      ]
    }
  ];
  const videoFilterPopularHandler = (target) => {
    var _a, _b, _c, _d;
    if (!isPagePopular()) {
      return [];
    }
    const menus = [];
    if (target.closest(".up-name")) {
      const uploader = (_a = target.textContent) == null ? void 0 : _a.trim();
      if (uploader) {
        if (mainFilter$3.videoUploaderFilter.isEnable) {
          menus.push({
            name: `屏蔽UP主:${uploader}`,
            fn: async () => {
              try {
                mainFilter$3.videoUploaderFilter.addParam(uploader);
                mainFilter$3.checkFull();
                const arr = BiliCleanerStorage.get(GM_KEYS$3.black.uploader.valueKey, []);
                arr.unshift(uploader);
                BiliCleanerStorage.set(GM_KEYS$3.black.uploader.valueKey, orderedUniq(arr));
              } catch (err) {
                error(`videoFilterPopularHandler add uploader ${uploader} failed`, err);
              }
            }
          });
        }
        if (mainFilter$3.videoUploaderWhiteFilter.isEnable) {
          menus.push({
            name: `将UP主加入白名单`,
            fn: async () => {
              try {
                mainFilter$3.videoUploaderWhiteFilter.addParam(uploader);
                mainFilter$3.checkFull();
                const arr = BiliCleanerStorage.get(GM_KEYS$3.white.uploader.valueKey, []);
                arr.unshift(uploader);
                BiliCleanerStorage.set(GM_KEYS$3.white.uploader.valueKey, orderedUniq(arr));
              } catch (err) {
                error(`videoFilterPopularHandler add white uploader ${uploader} failed`, err);
              }
            }
          });
        }
      }
    }
    if (target.classList.contains("title") && target.closest(".info a") || target.classList.contains("video-name") || target.classList.contains("lazy-image")) {
      let url = target.getAttribute("href") || ((_b = target.parentElement) == null ? void 0 : _b.getAttribute("href"));
      if (!url) {
        url = (_d = (_c = target.closest(".video-card")) == null ? void 0 : _c.querySelector(".video-card__content > a")) == null ? void 0 : _d.getAttribute("href");
      }
      if (url && mainFilter$3.videoBvidFilter.isEnable) {
        const bvid = matchBvid(url);
        if (bvid) {
          menus.push({
            name: `屏蔽视频 ${bvid}`,
            fn: async () => {
              try {
                mainFilter$3.videoBvidFilter.addParam(bvid);
                mainFilter$3.checkFull();
                const arr = BiliCleanerStorage.get(GM_KEYS$3.black.bvid.valueKey, []);
                arr.unshift(bvid);
                BiliCleanerStorage.set(GM_KEYS$3.black.bvid.valueKey, orderedUniq(arr));
              } catch (err) {
                error(`videoFilterPopularHandler add bvid ${bvid} failed`, err);
              }
            }
          });
          menus.push({
            name: "复制视频链接",
            fn: () => navigator.clipboard.writeText(`https://www.bilibili.com/video/${bvid}`).then().catch()
          });
        }
      }
    }
    return menus;
  };
  const GM_KEYS$2 = {
    black: {
      duration: {
        statusKey: "search-duration-filter-status",
        valueKey: "global-duration-filter-value"
      },
      uploader: {
        statusKey: "search-uploader-filter-status",
        valueKey: "global-uploader-filter-value"
      },
      uploaderKeyword: {
        statusKey: "search-uploader-keyword-filter-status",
        valueKey: "global-uploader-keyword-filter-value"
      },
      bvid: {
        statusKey: "search-bvid-filter-status",
        valueKey: "global-bvid-filter-value"
      },
      title: {
        statusKey: "search-title-keyword-filter-status",
        valueKey: "global-title-keyword-filter-value"
      }
    },
    white: {
      uploader: {
        statusKey: "search-uploader-whitelist-filter-status",
        valueKey: "global-uploader-whitelist-filter-value"
      },
      title: {
        statusKey: "search-title-keyword-whitelist-filter-status",
        valueKey: "global-title-keyword-whitelist-filter-value"
      }
    }
  };
  const selectorFns$2 = {
    duration: (video) => {
      var _a, _b;
      const duration = (_b = (_a = video.querySelector(".bili-video-card__stats__duration")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim();
      return (duration && convertTimeToSec(duration)) ?? void 0;
    },
    title: (video) => {
      var _a, _b;
      return (_b = (_a = video.querySelector(".bili-video-card__info--tit")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim();
    },
    bvid: (video) => {
      var _a, _b;
      const href2 = ((_a = video.querySelector(".bili-video-card__wrap > a")) == null ? void 0 : _a.getAttribute("href")) || ((_b = video.querySelector(".bili-video-card__info--right > a")) == null ? void 0 : _b.getAttribute("href"));
      return (href2 && matchBvid(href2)) ?? void 0;
    },
    uploader: (video) => {
      var _a, _b;
      return (_b = (_a = video.querySelector(".bili-video-card__info--author")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim();
    }
  };
  class VideoFilterSearch {
    constructor() {
      __publicField(this, "target");
      // 黑名单
      __publicField(this, "videoBvidFilter", new VideoBvidFilter());
      __publicField(this, "videoDurationFilter", new VideoDurationFilter());
      __publicField(this, "videoTitleFilter", new VideoTitleFilter());
      __publicField(this, "videoUploaderFilter", new VideoUploaderFilter());
      __publicField(this, "videoUploaderKeywordFilter", new VideoUploaderKeywordFilter());
      // 白名单
      __publicField(this, "videoUploaderWhiteFilter", new VideoUploaderWhiteFilter());
      __publicField(this, "videoTitleWhiteFilter", new VideoTitleWhiteFilter());
    }
    init() {
      this.videoBvidFilter.setParam(BiliCleanerStorage.get(GM_KEYS$2.black.bvid.valueKey, []));
      this.videoDurationFilter.setParam(BiliCleanerStorage.get(GM_KEYS$2.black.duration.valueKey, 0));
      this.videoTitleFilter.setParam(BiliCleanerStorage.get(GM_KEYS$2.black.title.valueKey, []));
      this.videoUploaderFilter.setParam(BiliCleanerStorage.get(GM_KEYS$2.black.uploader.valueKey, []));
      this.videoUploaderKeywordFilter.setParam(BiliCleanerStorage.get(GM_KEYS$2.black.uploaderKeyword.valueKey, []));
      this.videoUploaderWhiteFilter.setParam(BiliCleanerStorage.get(GM_KEYS$2.white.uploader.valueKey, []));
      this.videoTitleWhiteFilter.setParam(BiliCleanerStorage.get(GM_KEYS$2.white.title.valueKey, []));
    }
    async check(mode) {
      if (!this.target) {
        return;
      }
      let revertAll = false;
      if (!(this.videoBvidFilter.isEnable || this.videoDurationFilter.isEnable || this.videoTitleFilter.isEnable || this.videoUploaderFilter.isEnable || this.videoUploaderKeywordFilter.isEnable)) {
        revertAll = true;
      }
      const timer = performance.now();
      const selector = `:where(.video.search-all-list, .search-page-video) .video-list > div`;
      decodeURIComponent(new URL(location.href).searchParams.get("keyword") ?? "").toLowerCase();
      const videos = Array.from(this.target.querySelectorAll(selector));
      if (!videos.length) {
        return;
      }
      if (revertAll) {
        videos.forEach((v2) => showEle(v2));
        return;
      }
      if (settings.enableDebugFilter) {
        videos.forEach((v2) => {
          debugFilter(
            [
              `VideoFilterSearch`,
              `bvid: ${selectorFns$2.bvid(v2)}`,
              `duration: ${selectorFns$2.duration(v2)}`,
              `title: ${selectorFns$2.title(v2)}`,
              `uploader: ${selectorFns$2.uploader(v2)}`
            ].join("\n")
          );
        });
      }
      const blackPairs = [];
      this.videoBvidFilter.isEnable && blackPairs.push([this.videoBvidFilter, selectorFns$2.bvid]);
      this.videoDurationFilter.isEnable && blackPairs.push([this.videoDurationFilter, selectorFns$2.duration]);
      this.videoTitleFilter.isEnable && blackPairs.push([this.videoTitleFilter, selectorFns$2.title]);
      this.videoUploaderFilter.isEnable && blackPairs.push([this.videoUploaderFilter, selectorFns$2.uploader]);
      this.videoUploaderKeywordFilter.isEnable && blackPairs.push([this.videoUploaderKeywordFilter, selectorFns$2.uploader]);
      const whitePairs = [];
      this.videoUploaderWhiteFilter.isEnable && whitePairs.push([this.videoUploaderWhiteFilter, selectorFns$2.uploader]);
      this.videoTitleWhiteFilter.isEnable && whitePairs.push([this.videoTitleWhiteFilter, selectorFns$2.title]);
      const blackCnt = await coreCheck(videos, false, blackPairs, whitePairs);
      const time = (performance.now() - timer).toFixed(1);
      debugFilter(`VideoFilterSearch hide ${blackCnt} in ${videos.length} videos, mode=${mode}, time=${time}`);
    }
    checkFull() {
      this.check("full").then().catch((err) => {
        error("VideoFilterSearch check full error", err);
      });
    }
    // checkIncr() {
    //     this.check('incr')
    //         .then()
    //         .catch((err) => {
    //             error('VideoFilterSearch check incr error', err)
    //         })
    // }
    observe() {
      waitForEle(document, ".search-layout", (node) => {
        return node.className.includes("search-layout");
      }).then((ele) => {
        if (!ele) {
          return;
        }
        debugFilter("VideoFilterSearch target appear");
        this.target = ele;
        this.checkFull();
        new MutationObserver(() => {
          this.checkFull();
        }).observe(this.target, { childList: true, subtree: true });
      });
    }
  }
  const mainFilter$2 = new VideoFilterSearch();
  const videoFilterSearchEntry = async () => {
    mainFilter$2.init();
    mainFilter$2.observe();
  };
  const videoFilterSearchGroups = [
    {
      name: "时长过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$2.black.duration.statusKey,
          name: "启用 时长过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$2.videoDurationFilter.enable();
            mainFilter$2.checkFull();
          },
          disableFn: () => {
            mainFilter$2.videoDurationFilter.disable();
            mainFilter$2.checkFull();
          }
        },
        {
          type: "number",
          id: GM_KEYS$2.black.duration.valueKey,
          name: "设定最低时长(0~300s)",
          noStyle: true,
          minValue: 0,
          maxValue: 300,
          step: 1,
          defaultValue: 60,
          disableValue: 0,
          addonText: "秒",
          fn: (value) => {
            mainFilter$2.videoDurationFilter.setParam(value);
            mainFilter$2.checkFull();
          }
        }
      ]
    },
    {
      name: "UP主过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$2.black.uploader.statusKey,
          name: "启用 UP主过滤 (右键单击UP主)",
          defaultEnable: true,
          noStyle: true,
          enableFn: () => {
            mainFilter$2.videoUploaderFilter.enable();
            mainFilter$2.checkFull();
          },
          disableFn: () => {
            mainFilter$2.videoUploaderFilter.disable();
            mainFilter$2.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$2.black.uploader.valueKey,
          name: "编辑 UP主黑名单",
          description: ["右键屏蔽的UP主会出现在首行"],
          editorTitle: "UP主 黑名单",
          editorDescription: ["每行一个UP主昵称,保存时自动去重"],
          saveFn: async () => {
            mainFilter$2.videoUploaderFilter.setParam(BiliCleanerStorage.get(GM_KEYS$2.black.uploader.valueKey, []));
            mainFilter$2.checkFull();
          }
        },
        {
          type: "switch",
          id: GM_KEYS$2.black.uploaderKeyword.statusKey,
          name: "启用 UP主昵称关键词过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$2.videoUploaderKeywordFilter.enable();
            mainFilter$2.checkFull();
          },
          disableFn: () => {
            mainFilter$2.videoUploaderKeywordFilter.disable();
            mainFilter$2.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$2.black.uploaderKeyword.valueKey,
          name: "编辑 UP主昵称关键词黑名单",
          editorTitle: "UP主昵称关键词 黑名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter$2.videoUploaderKeywordFilter.setParam(
              BiliCleanerStorage.get(GM_KEYS$2.black.uploaderKeyword.valueKey, [])
            );
            mainFilter$2.checkFull();
          }
        }
      ]
    },
    {
      name: "标题关键词过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$2.black.title.statusKey,
          name: "启用 标题关键词过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$2.videoTitleFilter.enable();
            mainFilter$2.checkFull();
          },
          disableFn: () => {
            mainFilter$2.videoTitleFilter.disable();
            mainFilter$2.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$2.black.title.valueKey,
          name: "编辑 标题关键词黑名单",
          editorTitle: "标题关键词 黑名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter$2.videoTitleFilter.setParam(BiliCleanerStorage.get(GM_KEYS$2.black.title.valueKey, []));
            mainFilter$2.checkFull();
          }
        }
      ]
    },
    {
      name: "BV号过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$2.black.bvid.statusKey,
          name: "启用 BV号过滤 (右键单击标题)",
          noStyle: true,
          enableFn: () => {
            mainFilter$2.videoBvidFilter.enable();
            mainFilter$2.checkFull();
          },
          disableFn: () => {
            mainFilter$2.videoBvidFilter.disable();
            mainFilter$2.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$2.black.bvid.valueKey,
          name: "编辑 BV号黑名单",
          description: ["右键屏蔽的BV号会出现在首行"],
          editorTitle: "BV号 黑名单",
          editorDescription: ["每行一个BV号,保存时自动去重"],
          saveFn: async () => {
            mainFilter$2.videoBvidFilter.setParam(BiliCleanerStorage.get(GM_KEYS$2.black.bvid.valueKey, []));
            mainFilter$2.checkFull();
          }
        }
      ]
    },
    {
      name: "白名单 免过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$2.white.uploader.statusKey,
          name: "启用 UP主白名单",
          defaultEnable: true,
          noStyle: true,
          enableFn: () => {
            mainFilter$2.videoUploaderWhiteFilter.enable();
            mainFilter$2.checkFull();
          },
          disableFn: () => {
            mainFilter$2.videoUploaderWhiteFilter.disable();
            mainFilter$2.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$2.white.uploader.valueKey,
          name: "编辑 UP主白名单",
          editorTitle: "UP主 白名单",
          editorDescription: ["每行一个UP主昵称,保存时自动去重"],
          saveFn: async () => {
            mainFilter$2.videoUploaderWhiteFilter.setParam(
              BiliCleanerStorage.get(GM_KEYS$2.white.uploader.valueKey, [])
            );
            mainFilter$2.checkFull();
          }
        },
        {
          type: "switch",
          id: GM_KEYS$2.white.title.statusKey,
          name: "启用 标题关键词白名单",
          noStyle: true,
          enableFn: () => {
            mainFilter$2.videoTitleWhiteFilter.enable();
            mainFilter$2.checkFull();
          },
          disableFn: () => {
            mainFilter$2.videoTitleWhiteFilter.disable();
            mainFilter$2.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$2.white.title.valueKey,
          name: "编辑 标题关键词白名单",
          editorTitle: "标题关键词 白名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter$2.videoTitleWhiteFilter.setParam(BiliCleanerStorage.get(GM_KEYS$2.white.title.valueKey, []));
            mainFilter$2.checkFull();
          }
        }
      ]
    }
  ];
  const videoFilterSearchHandler = (target) => {
    var _a, _b, _c, _d, _e, _f;
    if (!isPageSearch()) {
      return [];
    }
    const menus = [];
    if (target.closest(".bili-video-card__info--owner")) {
      const uploader = (_c = (_b = (_a = target.closest(".bili-video-card__info--owner")) == null ? void 0 : _a.querySelector(".bili-video-card__info--author")) == null ? void 0 : _b.textContent) == null ? void 0 : _c.trim();
      const url = (_d = target.closest(".bili-video-card__info--owner")) == null ? void 0 : _d.href.trim();
      const spaceUrl = (_e = url == null ? void 0 : url.match(/space\.bilibili\.com\/\d+/)) == null ? void 0 : _e[0];
      if (uploader) {
        if (mainFilter$2.videoUploaderFilter.isEnable) {
          menus.push({
            name: `屏蔽UP主:${uploader}`,
            fn: async () => {
              try {
                mainFilter$2.videoUploaderFilter.addParam(uploader);
                mainFilter$2.checkFull();
                const arr = BiliCleanerStorage.get(GM_KEYS$2.black.uploader.valueKey, []);
                arr.unshift(uploader);
                BiliCleanerStorage.set(GM_KEYS$2.black.uploader.valueKey, orderedUniq(arr));
              } catch (err) {
                error(`videoFilterSearchHandler add uploader ${uploader} failed`, err);
              }
            }
          });
        }
        if (mainFilter$2.videoUploaderWhiteFilter.isEnable) {
          menus.push({
            name: `将UP主加入白名单`,
            fn: async () => {
              try {
                mainFilter$2.videoUploaderWhiteFilter.addParam(uploader);
                mainFilter$2.checkFull();
                const arr = BiliCleanerStorage.get(GM_KEYS$2.white.uploader.valueKey, []);
                arr.unshift(uploader);
                BiliCleanerStorage.set(GM_KEYS$2.white.uploader.valueKey, orderedUniq(arr));
              } catch (err) {
                error(`videoFilterSearchHandler add white uploader ${uploader} failed`, err);
              }
            }
          });
        }
      }
      if (spaceUrl && (mainFilter$2.videoUploaderFilter.isEnable || mainFilter$2.videoUploaderWhiteFilter.isEnable)) {
        menus.push({
          name: `复制主页链接`,
          fn: () => navigator.clipboard.writeText(`https://${spaceUrl}`)
        });
      }
    }
    if (target.classList.contains("bili-video-card__info--tit")) {
      const url = (_f = target.parentNode) == null ? void 0 : _f.href;
      if (url && mainFilter$2.videoBvidFilter.isEnable) {
        const bvid = matchBvid(url);
        if (bvid) {
          menus.push({
            name: `屏蔽视频 ${bvid}`,
            fn: async () => {
              try {
                mainFilter$2.videoBvidFilter.addParam(bvid);
                mainFilter$2.checkFull();
                const arr = BiliCleanerStorage.get(GM_KEYS$2.black.bvid.valueKey, []);
                arr.unshift(bvid);
                BiliCleanerStorage.set(GM_KEYS$2.black.bvid.valueKey, orderedUniq(arr));
              } catch (err) {
                error(`videoFilterSearchHandler add bvid ${bvid} failed`, err);
              }
            }
          });
          menus.push({
            name: "复制视频链接",
            fn: () => navigator.clipboard.writeText(`https://www.bilibili.com/video/${bvid}`).then().catch()
          });
        }
      }
    }
    return menus;
  };
  const GM_KEYS$1 = {
    black: {
      duration: {
        statusKey: "space-duration-filter-status",
        valueKey: "global-duration-filter-value"
      },
      bvid: {
        statusKey: "space-bvid-filter-status",
        valueKey: "global-bvid-filter-value"
      },
      title: {
        statusKey: "space-title-keyword-filter-status",
        valueKey: "global-title-keyword-filter-value"
      }
    },
    white: {
      title: {
        statusKey: "space-title-keyword-whitelist-filter-status",
        valueKey: "global-title-keyword-whitelist-filter-value"
      }
    }
  };
  const selectorFns$1 = {
    duration: (video) => {
      var _a, _b;
      const duration = (_b = (_a = video.querySelector("span.length")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim();
      return (duration && convertTimeToSec(duration)) ?? void 0;
    },
    title: (video) => {
      var _a, _b;
      return (_b = (_a = video.querySelector("a.title")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim();
    },
    bvid: (video) => {
      var _a, _b;
      const href2 = (_b = (_a = video.querySelector("a.title")) == null ? void 0 : _a.getAttribute("href")) == null ? void 0 : _b.trim();
      return (href2 && matchBvid(href2)) ?? void 0;
    }
  };
  class VideoFilterSpace {
    constructor() {
      __publicField(this, "target");
      // 黑名单
      __publicField(this, "videoBvidFilter", new VideoBvidFilter());
      __publicField(this, "videoDurationFilter", new VideoDurationFilter());
      __publicField(this, "videoTitleFilter", new VideoTitleFilter());
      // 白名单
      __publicField(this, "videoTitleWhiteFilter", new VideoTitleWhiteFilter());
    }
    init() {
      this.videoBvidFilter.setParam(BiliCleanerStorage.get(GM_KEYS$1.black.bvid.valueKey, []));
      this.videoDurationFilter.setParam(BiliCleanerStorage.get(GM_KEYS$1.black.duration.valueKey, 0));
      this.videoTitleFilter.setParam(BiliCleanerStorage.get(GM_KEYS$1.black.title.valueKey, []));
      this.videoTitleWhiteFilter.setParam(BiliCleanerStorage.get(GM_KEYS$1.white.title.valueKey, []));
    }
    async check(mode) {
      if (!this.target) {
        return;
      }
      let revertAll = false;
      if (!(this.videoBvidFilter.isEnable || this.videoDurationFilter.isEnable || this.videoTitleFilter.isEnable)) {
        revertAll = true;
      }
      const timer = performance.now();
      let selector;
      if (/^\/\d+$/.test(location.pathname)) {
        selector = `#page-index .small-item`;
      }
      if (/^\/\d+\/video$/.test(location.pathname)) {
        selector = `#submit-video :is(.small-item,.list-item)`;
      }
      if (/^\/\d+\/channel\/(collectiondetail|seriesdetail)/.test(location.pathname)) {
        selector = `:is(#page-collection-detail,#page-series-detail) li.small-item`;
      }
      if (!selector) {
        return;
      }
      const videos = Array.from(this.target.querySelectorAll(selector));
      if (!videos.length) {
        return;
      }
      if (revertAll) {
        videos.forEach((v2) => showEle(v2));
        return;
      }
      if (settings.enableDebugFilter) {
        videos.forEach((v2) => {
          debugFilter(
            [
              `VideoFilterSpace`,
              `bvid: ${selectorFns$1.bvid(v2)}`,
              `duration: ${selectorFns$1.duration(v2)}`,
              `title: ${selectorFns$1.title(v2)}`
            ].join("\n")
          );
        });
      }
      const blackPairs = [];
      this.videoBvidFilter.isEnable && blackPairs.push([this.videoBvidFilter, selectorFns$1.bvid]);
      this.videoDurationFilter.isEnable && blackPairs.push([this.videoDurationFilter, selectorFns$1.duration]);
      this.videoTitleFilter.isEnable && blackPairs.push([this.videoTitleFilter, selectorFns$1.title]);
      const whitePairs = [];
      this.videoTitleWhiteFilter.isEnable && whitePairs.push([this.videoTitleWhiteFilter, selectorFns$1.title]);
      const blackCnt = await coreCheck(videos, false, blackPairs, whitePairs);
      const time = (performance.now() - timer).toFixed(1);
      debugFilter(`VideoFilterSpace hide ${blackCnt} in ${videos.length} videos, mode=${mode}, time=${time}`);
    }
    checkFull() {
      this.check("full").then().catch((err) => {
        error("VideoFilterSpace check full error", err);
      });
    }
    // checkIncr() {
    //     this.check('incr')
    //         .then()
    //         .catch((err) => {
    //             error('VideoFilterSpace check incr error', err)
    //         })
    // }
    observe() {
      waitForEle(document, "#app", (node) => {
        return node.id === "app";
      }).then((ele) => {
        if (!ele) {
          return;
        }
        debugFilter("VideoFilterSpace target appear");
        this.target = ele;
        this.checkFull();
        new MutationObserver(() => {
          this.checkFull();
        }).observe(this.target, { childList: true, subtree: true });
      });
    }
  }
  const mainFilter$1 = new VideoFilterSpace();
  const videoFilterSpaceEntry = async () => {
    mainFilter$1.init();
    mainFilter$1.observe();
  };
  const videoFilterSpaceGroups = [
    {
      name: "时长过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$1.black.duration.statusKey,
          name: "启用 时长过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$1.videoDurationFilter.enable();
            mainFilter$1.checkFull();
          },
          disableFn: () => {
            mainFilter$1.videoDurationFilter.disable();
            mainFilter$1.checkFull();
          }
        },
        {
          type: "number",
          id: GM_KEYS$1.black.duration.valueKey,
          name: "设定最低时长(0~300s)",
          noStyle: true,
          minValue: 0,
          maxValue: 300,
          step: 1,
          defaultValue: 60,
          disableValue: 0,
          addonText: "秒",
          fn: (value) => {
            mainFilter$1.videoDurationFilter.setParam(value);
            mainFilter$1.checkFull();
          }
        }
      ]
    },
    {
      name: "标题关键词过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$1.black.title.statusKey,
          name: "启用 标题关键词过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter$1.videoTitleFilter.enable();
            mainFilter$1.checkFull();
          },
          disableFn: () => {
            mainFilter$1.videoTitleFilter.disable();
            mainFilter$1.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$1.black.title.valueKey,
          name: "编辑 标题关键词黑名单",
          editorTitle: "标题关键词 黑名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter$1.videoTitleFilter.setParam(BiliCleanerStorage.get(GM_KEYS$1.black.title.valueKey, []));
            mainFilter$1.checkFull();
          }
        }
      ]
    },
    // {
    //     name: 'BV号过滤',
    //     items: [
    //         {
    //             type: 'switch',
    //             id: GM_KEYS.black.bvid.statusKey,
    //             name: '启用 BV号过滤 (右键单击标题)',
    //             noStyle: true,
    //             enableFn: () => {
    //                 mainFilter.videoBvidFilter.enable()
    //                 mainFilter.checkFull()
    //             },
    //             disableFn: () => {
    //                 mainFilter.videoBvidFilter.disable()
    //                 mainFilter.checkFull()
    //             },
    //         },
    //         {
    //             type: 'editor',
    //             id: GM_KEYS.black.bvid.valueKey,
    //             name: '编辑 BV号黑名单',
    //             description: ['右键屏蔽的BV号会出现在首行'],
    //             editorTitle: 'BV号 黑名单',
    //             editorDescription: ['每行一个BV号,保存时自动去重'],
    //             saveFn: async () => {
    //                 mainFilter.videoBvidFilter.setParam(BiliCleanerStorage.get(GM_KEYS.black.bvid.valueKey, []))
    //                 mainFilter.checkFull()
    //             },
    //         },
    //     ],
    // },
    {
      name: "白名单 免过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS$1.white.title.statusKey,
          name: "启用 标题关键词白名单",
          noStyle: true,
          enableFn: () => {
            mainFilter$1.videoTitleWhiteFilter.enable();
            mainFilter$1.checkFull();
          },
          disableFn: () => {
            mainFilter$1.videoTitleWhiteFilter.disable();
            mainFilter$1.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS$1.white.title.valueKey,
          name: "编辑 标题关键词白名单",
          editorTitle: "标题关键词 白名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter$1.videoTitleWhiteFilter.setParam(BiliCleanerStorage.get(GM_KEYS$1.white.title.valueKey, []));
            mainFilter$1.checkFull();
          }
        }
      ]
    }
  ];
  const GM_KEYS = {
    black: {
      duration: {
        statusKey: "video-duration-filter-status",
        valueKey: "global-duration-filter-value"
      },
      uploader: {
        statusKey: "video-uploader-filter-status",
        valueKey: "global-uploader-filter-value"
      },
      uploaderKeyword: {
        statusKey: "video-uploader-keyword-filter-status",
        valueKey: "global-uploader-keyword-filter-value"
      },
      bvid: {
        statusKey: "video-bvid-filter-status",
        valueKey: "global-bvid-filter-value"
      },
      title: {
        statusKey: "video-title-keyword-filter-status",
        valueKey: "global-title-keyword-filter-value"
      },
      related: {
        statusKey: "video-related-filter-status"
      }
    },
    white: {
      uploader: {
        statusKey: "video-uploader-whitelist-filter-status",
        valueKey: "global-uploader-whitelist-filter-value"
      },
      title: {
        statusKey: "video-title-keyword-whitelist-filter-status",
        valueKey: "global-title-keyword-whitelist-filter-value"
      }
    }
  };
  const selectorFns = {
    duration: (video) => {
      var _a;
      const duration = (_a = video.querySelector(".pic-box span.duration")) == null ? void 0 : _a.textContent;
      return duration ? convertTimeToSec(duration) : void 0;
    },
    title: (video) => {
      var _a, _b;
      return (_b = (_a = video.querySelector(".info > a p")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim();
    },
    bvid: (video) => {
      var _a, _b;
      const href2 = ((_a = video.querySelector(".info > a")) == null ? void 0 : _a.getAttribute("href")) || ((_b = video.querySelector(".pic-box .framepreview-box > a")) == null ? void 0 : _b.getAttribute("href"));
      return (href2 && matchBvid(href2)) ?? void 0;
    },
    uploader: (video) => {
      var _a, _b;
      return (_b = (_a = video.querySelector(".info > .upname .name")) == null ? void 0 : _a.textContent) == null ? void 0 : _b.trim();
    }
  };
  let enableRelatedCheck = false;
  class VideoFilterVideo {
    constructor() {
      __publicField(this, "target");
      // 黑名单
      __publicField(this, "videoBvidFilter", new VideoBvidFilter());
      __publicField(this, "videoDurationFilter", new VideoDurationFilter());
      __publicField(this, "videoTitleFilter", new VideoTitleFilter());
      __publicField(this, "videoUploaderFilter", new VideoUploaderFilter());
      __publicField(this, "videoUploaderKeywordFilter", new VideoUploaderKeywordFilter());
      // 白名单
      __publicField(this, "videoUploaderWhiteFilter", new VideoUploaderWhiteFilter());
      __publicField(this, "videoTitleWhiteFilter", new VideoTitleWhiteFilter());
    }
    init() {
      this.videoBvidFilter.setParam(BiliCleanerStorage.get(GM_KEYS.black.bvid.valueKey, []));
      this.videoDurationFilter.setParam(BiliCleanerStorage.get(GM_KEYS.black.duration.valueKey, 0));
      this.videoTitleFilter.setParam(BiliCleanerStorage.get(GM_KEYS.black.title.valueKey, []));
      this.videoUploaderFilter.setParam(BiliCleanerStorage.get(GM_KEYS.black.uploader.valueKey, []));
      this.videoUploaderKeywordFilter.setParam(BiliCleanerStorage.get(GM_KEYS.black.uploaderKeyword.valueKey, []));
      this.videoUploaderWhiteFilter.setParam(BiliCleanerStorage.get(GM_KEYS.white.uploader.valueKey, []));
      this.videoTitleWhiteFilter.setParam(BiliCleanerStorage.get(GM_KEYS.white.title.valueKey, []));
    }
    async check(mode) {
      var _a, _b;
      if (!this.target) {
        return;
      }
      let revertAll = false;
      if (!(this.videoBvidFilter.isEnable || this.videoDurationFilter.isEnable || this.videoTitleFilter.isEnable || this.videoUploaderFilter.isEnable || this.videoUploaderKeywordFilter.isEnable)) {
        revertAll = true;
      }
      const timer = performance.now();
      const selector = `.next-play :is(.video-page-card-small, .video-page-operator-card-small),
            .rec-list :is(.video-page-card-small, .video-page-operator-card-small), .recommend-video-card`;
      const videos = Array.from(this.target.querySelectorAll(selector));
      if (!videos.length) {
        return;
      }
      if (revertAll) {
        videos.forEach((v2) => showEle(v2));
        return;
      }
      if (settings.enableDebugFilter) {
        videos.forEach((v2) => {
          debugFilter(
            [
              `VideoFilterVideo`,
              `bvid: ${selectorFns.bvid(v2)}`,
              `duration: ${selectorFns.duration(v2)}`,
              `title: ${selectorFns.title(v2)}`,
              `uploader: ${selectorFns.uploader(v2)}`
            ].join("\n")
          );
        });
      }
      const blackPairs = [];
      this.videoBvidFilter.isEnable && blackPairs.push([this.videoBvidFilter, selectorFns.bvid]);
      this.videoDurationFilter.isEnable && blackPairs.push([this.videoDurationFilter, selectorFns.duration]);
      this.videoTitleFilter.isEnable && blackPairs.push([this.videoTitleFilter, selectorFns.title]);
      this.videoUploaderFilter.isEnable && blackPairs.push([this.videoUploaderFilter, selectorFns.uploader]);
      this.videoUploaderKeywordFilter.isEnable && blackPairs.push([this.videoUploaderKeywordFilter, selectorFns.uploader]);
      const whitePairs = [];
      this.videoUploaderWhiteFilter.isEnable && whitePairs.push([this.videoUploaderWhiteFilter, selectorFns.uploader]);
      this.videoTitleWhiteFilter.isEnable && whitePairs.push([this.videoTitleWhiteFilter, selectorFns.title]);
      const blackCnt = await coreCheck(videos, false, blackPairs, whitePairs);
      if (enableRelatedCheck && blackCnt) {
        const blackBvids = /* @__PURE__ */ new Set();
        for (const video of videos) {
          if (isEleHide(video)) {
            const url = (_a = video.querySelector(".info > a")) == null ? void 0 : _a.getAttribute("href");
            if (url) {
              const bvid = matchBvid(url);
              bvid && blackBvids.add(bvid);
            }
          }
        }
        const rel = (_b = _unsafeWindow.__INITIAL_STATE__) == null ? void 0 : _b.related;
        if ((rel == null ? void 0 : rel.length) && blackBvids.size) {
          _unsafeWindow.__INITIAL_STATE__.related = rel.filter((v2) => !(v2.bvid && blackBvids.has(v2.bvid)));
        }
      }
      const time = (performance.now() - timer).toFixed(1);
      debugFilter(`VideoFilterVideo hide ${blackCnt} in ${videos.length} videos, mode=${mode}, time=${time}`);
    }
    checkFull() {
      this.check("full").then().catch((err) => {
        error("VideoFilterVideo check full error", err);
      });
    }
    // checkIncr() {
    //     this.check('incr')
    //         .then()
    //         .catch((err) => {
    //             error('VideoFilterVideo check incr error', err)
    //         })
    // }
    observe() {
      waitForEle(
        document,
        "#reco_list, .recommend-list-v1, .recommend-list-container",
        (node) => {
          return node.id === "reco_list" || ["recommend-list-v1", "recommend-list-container"].includes(node.className);
        }
      ).then((ele) => {
        if (!ele) {
          return;
        }
        debugFilter("VideoFilterVideo target appear");
        this.target = ele;
        this.checkFull();
        new MutationObserver(() => {
          this.checkFull();
        }).observe(this.target, { childList: true, subtree: true });
      });
    }
  }
  const mainFilter = new VideoFilterVideo();
  const videoFilterVideoEntry = async () => {
    mainFilter.init();
    mainFilter.observe();
  };
  const videoFilterVideoGroups = [
    {
      name: "时长过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS.black.duration.statusKey,
          name: "启用 时长过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter.videoDurationFilter.enable();
            mainFilter.checkFull();
          },
          disableFn: () => {
            mainFilter.videoDurationFilter.disable();
            mainFilter.checkFull();
          }
        },
        {
          type: "number",
          id: GM_KEYS.black.duration.valueKey,
          name: "设定最低时长(0~300s)",
          noStyle: true,
          minValue: 0,
          maxValue: 300,
          step: 1,
          defaultValue: 60,
          disableValue: 0,
          addonText: "秒",
          fn: (value) => {
            mainFilter.videoDurationFilter.setParam(value);
            mainFilter.checkFull();
          }
        }
      ]
    },
    {
      name: "UP主过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS.black.uploader.statusKey,
          name: "启用 UP主过滤 (右键单击UP主)",
          defaultEnable: true,
          noStyle: true,
          enableFn: () => {
            mainFilter.videoUploaderFilter.enable();
            mainFilter.checkFull();
          },
          disableFn: () => {
            mainFilter.videoUploaderFilter.disable();
            mainFilter.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS.black.uploader.valueKey,
          name: "编辑 UP主黑名单",
          description: ["右键屏蔽的UP主会出现在首行"],
          editorTitle: "UP主 黑名单",
          editorDescription: ["每行一个UP主昵称,保存时自动去重"],
          saveFn: async () => {
            mainFilter.videoUploaderFilter.setParam(BiliCleanerStorage.get(GM_KEYS.black.uploader.valueKey, []));
            mainFilter.checkFull();
          }
        },
        {
          type: "switch",
          id: GM_KEYS.black.uploaderKeyword.statusKey,
          name: "启用 UP主昵称关键词过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter.videoUploaderKeywordFilter.enable();
            mainFilter.checkFull();
          },
          disableFn: () => {
            mainFilter.videoUploaderKeywordFilter.disable();
            mainFilter.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS.black.uploaderKeyword.valueKey,
          name: "编辑 UP主昵称关键词黑名单",
          editorTitle: "UP主昵称关键词 黑名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter.videoUploaderKeywordFilter.setParam(
              BiliCleanerStorage.get(GM_KEYS.black.uploaderKeyword.valueKey, [])
            );
            mainFilter.checkFull();
          }
        }
      ]
    },
    {
      name: "标题关键词过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS.black.title.statusKey,
          name: "启用 标题关键词过滤",
          noStyle: true,
          enableFn: () => {
            mainFilter.videoTitleFilter.enable();
            mainFilter.checkFull();
          },
          disableFn: () => {
            mainFilter.videoTitleFilter.disable();
            mainFilter.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS.black.title.valueKey,
          name: "编辑 标题关键词黑名单",
          editorTitle: "标题关键词 黑名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter.videoTitleFilter.setParam(BiliCleanerStorage.get(GM_KEYS.black.title.valueKey, []));
            mainFilter.checkFull();
          }
        }
      ]
    },
    {
      name: "BV号过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS.black.bvid.statusKey,
          name: "启用 BV号过滤 (右键单击标题)",
          noStyle: true,
          enableFn: () => {
            mainFilter.videoBvidFilter.enable();
            mainFilter.checkFull();
          },
          disableFn: () => {
            mainFilter.videoBvidFilter.disable();
            mainFilter.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS.black.bvid.valueKey,
          name: "编辑 BV号黑名单",
          description: ["右键屏蔽的BV号会出现在首行"],
          editorTitle: "BV号 黑名单",
          editorDescription: ["每行一个BV号,保存时自动去重"],
          saveFn: async () => {
            mainFilter.videoBvidFilter.setParam(BiliCleanerStorage.get(GM_KEYS.black.bvid.valueKey, []));
            mainFilter.checkFull();
          }
        }
      ]
    },
    {
      name: "其他过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS.black.related.statusKey,
          name: "启用 相关视频数据过滤 (实验功能)",
          description: [
            '过滤当前视频的"相关视频"缓存数据',
            "自动替换接下来播放、播放结束相关视频",
            "启用后,变动其他过滤功能需刷新页面"
          ],
          noStyle: true,
          enableFn: () => {
            enableRelatedCheck = true;
            mainFilter.checkFull();
          },
          disableFn: () => {
            enableRelatedCheck = false;
            mainFilter.checkFull();
          }
        }
      ]
    },
    {
      name: "白名单 免过滤",
      items: [
        {
          type: "switch",
          id: GM_KEYS.white.uploader.statusKey,
          name: "启用 UP主白名单",
          defaultEnable: true,
          noStyle: true,
          enableFn: () => {
            mainFilter.videoUploaderWhiteFilter.enable();
            mainFilter.checkFull();
          },
          disableFn: () => {
            mainFilter.videoUploaderWhiteFilter.disable();
            mainFilter.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS.white.uploader.valueKey,
          name: "编辑 UP主白名单",
          editorTitle: "UP主 白名单",
          editorDescription: ["每行一个UP主昵称,保存时自动去重"],
          saveFn: async () => {
            mainFilter.videoUploaderWhiteFilter.setParam(
              BiliCleanerStorage.get(GM_KEYS.white.uploader.valueKey, [])
            );
            mainFilter.checkFull();
          }
        },
        {
          type: "switch",
          id: GM_KEYS.white.title.statusKey,
          name: "启用 标题关键词白名单",
          noStyle: true,
          enableFn: () => {
            mainFilter.videoTitleWhiteFilter.enable();
            mainFilter.checkFull();
          },
          disableFn: () => {
            mainFilter.videoTitleWhiteFilter.disable();
            mainFilter.checkFull();
          }
        },
        {
          type: "editor",
          id: GM_KEYS.white.title.valueKey,
          name: "编辑 标题关键词白名单",
          editorTitle: "标题关键词 白名单",
          editorDescription: [
            "每行一个关键词或正则,不区分大小写",
            "请勿使用过于激进的关键词或正则",
            "正则默认 iu 模式,无需 flag,语法:/abc|\\d+/"
          ],
          saveFn: async () => {
            mainFilter.videoTitleWhiteFilter.setParam(BiliCleanerStorage.get(GM_KEYS.white.title.valueKey, []));
            mainFilter.checkFull();
          }
        }
      ]
    }
  ];
  const videoFilterVideoHandler = (target) => {
    var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
    if (!(isPageVideo() || isPagePlaylist() || isPageBangumi())) {
      return [];
    }
    const menus = [];
    if (target.classList.contains("name") || target.classList.contains("up-name") || ((_a = target.parentElement) == null ? void 0 : _a.classList.contains("up-name")) || target.closest(".staff-info")) {
      const uploader = ((_d = (_c = (_b = target.closest(".staff-info")) == null ? void 0 : _b.querySelector(".staff-name")) == null ? void 0 : _c.textContent) == null ? void 0 : _d.trim()) || ((_e = target.textContent) == null ? void 0 : _e.trim()) || ((_g = (_f = target.parentElement) == null ? void 0 : _f.textContent) == null ? void 0 : _g.trim());
      const url = (_i = (_h = target.closest(".upname")) == null ? void 0 : _h.querySelector(":scope a")) == null ? void 0 : _i.getAttribute("href");
      const spaceUrl = (_j = url == null ? void 0 : url.match(/space\.bilibili\.com\/\d+/)) == null ? void 0 : _j[0];
      if (uploader) {
        if (mainFilter.videoUploaderFilter.isEnable) {
          menus.push({
            name: `屏蔽UP主:${uploader}`,
            fn: async () => {
              try {
                mainFilter.videoUploaderFilter.addParam(uploader);
                mainFilter.checkFull();
                const arr = BiliCleanerStorage.get(GM_KEYS.black.uploader.valueKey, []);
                arr.unshift(uploader);
                BiliCleanerStorage.set(GM_KEYS.black.uploader.valueKey, orderedUniq(arr));
              } catch (err) {
                error(`videoFilterVideoHandler add uploader ${uploader} failed`, err);
              }
            }
          });
        }
        if (mainFilter.videoUploaderWhiteFilter.isEnable) {
          menus.push({
            name: `将UP主加入白名单`,
            fn: async () => {
              try {
                mainFilter.videoUploaderWhiteFilter.addParam(uploader);
                mainFilter.checkFull();
                const arr = BiliCleanerStorage.get(GM_KEYS.white.uploader.valueKey, []);
                arr.unshift(uploader);
                BiliCleanerStorage.set(GM_KEYS.white.uploader.valueKey, orderedUniq(arr));
              } catch (err) {
                error(`videoFilterVideoHandler add white uploader ${uploader} failed`, err);
              }
            }
          });
        }
      }
      if (spaceUrl && (mainFilter.videoUploaderFilter.isEnable || mainFilter.videoUploaderWhiteFilter.isEnable)) {
        menus.push({
          name: `复制主页链接`,
          fn: () => navigator.clipboard.writeText(`https://${spaceUrl}`)
        });
      }
    }
    if (target.classList.contains("title")) {
      const url = (_k = target.parentElement) == null ? void 0 : _k.getAttribute("href");
      if (url && mainFilter.videoBvidFilter.isEnable) {
        const bvid = matchBvid(url);
        if (bvid) {
          menus.push({
            name: `屏蔽视频 ${bvid}`,
            fn: async () => {
              try {
                mainFilter.videoBvidFilter.addParam(bvid);
                mainFilter.checkFull();
                const arr = BiliCleanerStorage.get(GM_KEYS.black.bvid.valueKey, []);
                arr.unshift(bvid);
                BiliCleanerStorage.set(GM_KEYS.black.bvid.valueKey, orderedUniq(arr));
              } catch (err) {
                error(`videoFilterVideoHandler add bvid ${bvid} failed`, err);
              }
            }
          });
          menus.push({
            name: "复制视频链接",
            fn: () => navigator.clipboard.writeText(`https://www.bilibili.com/video/${bvid}`).then().catch()
          });
        }
      }
    }
    return menus;
  };
  const videoFilters = [
    // 视频过滤
    {
      name: "首页 视频过滤",
      groups: videoFilterHomepageGroups,
      entry: videoFilterHomepageEntry,
      checkFn: isPageHomepage
    },
    {
      name: "播放页 视频过滤",
      groups: videoFilterVideoGroups,
      entry: videoFilterVideoEntry,
      checkFn: () => isPageVideo() || isPagePlaylist()
    },
    {
      name: "热门页 视频过滤",
      groups: videoFilterPopularGroups,
      entry: videoFilterPopularEntry,
      checkFn: isPagePopular
    },
    {
      name: "分区页 视频过滤",
      groups: videoFilterChannelGroups,
      entry: videoFilterChannelEntry,
      checkFn: isPageChannel
    },
    {
      name: "搜索页 视频过滤",
      groups: videoFilterSearchGroups,
      entry: videoFilterSearchEntry,
      checkFn: isPageSearch
    },
    {
      name: "空间页 视频过滤",
      groups: videoFilterSpaceGroups,
      entry: videoFilterSpaceEntry,
      checkFn: isPageSpace
    }
  ];
  const commentFilters = [
    {
      name: "视频页/番剧页 视频评论过滤",
      groups: commentFilterVideoGroups,
      entry: commentFilterVideoEntry,
      checkFn: () => isPageVideo() || isPageBangumi() || isPagePlaylist()
    },
    {
      name: "动态页 动态评论过滤",
      groups: commentFilterDynamicGroups,
      entry: commentFilterDynamicEntry,
      checkFn: () => isPageDynamic()
    },
    {
      name: "空间页 动态评论过滤",
      groups: commentFilterSpaceGroups,
      entry: commentFilterSpaceEntry,
      checkFn: () => isPageSpace()
    }
  ];
  const dynamicFilters = [
    {
      name: "动态页 动态过滤",
      groups: dynamicFilterDynamicGroups,
      entry: dynamicFilterDynamicEntry,
      checkFn: isPageDynamic
    }
  ];
  const loadFilters = () => {
    const filters = [...videoFilters, ...commentFilters, ...dynamicFilters];
    for (const filter of filters) {
      if (filter.checkFn()) {
        try {
          filter.entry();
          for (const group of filter.groups) {
            for (const item of group.items) {
              switch (item.type) {
                case "switch":
                  loadSwitchItem$1(item);
                  break;
                case "number":
                  loadNumberItem$1(item);
                  break;
              }
            }
          }
        } catch (err) {
          error(`loadFilters filter ${filter.name} error`, err);
        }
      }
    }
  };
  const loadSwitchItem$1 = (item) => {
    var _a;
    const enable = BiliCleanerStorage.get(item.id, item.defaultEnable);
    if (enable) {
      if (item.enableFn) {
        if (item.enableFnRunAt === "document-end" && document.readyState === "loading") {
          document.addEventListener("DOMContentLoaded", () => {
            var _a2;
            (_a2 = item.enableFn()) == null ? void 0 : _a2.then().catch();
          });
        } else {
          (_a = item.enableFn()) == null ? void 0 : _a.then().catch();
        }
      }
    }
  };
  const loadNumberItem$1 = (item) => {
    var _a;
    const value = BiliCleanerStorage.get(item.id, item.defaultValue);
    if (value !== item.disableValue) {
      (_a = item.fn(value)) == null ? void 0 : _a.then().catch();
    }
  };
  const filterContextMenuHandlers = [
    videoFilterVideoHandler,
    videoFilterSearchHandler,
    videoFilterChannelHandler,
    videoFilterPopularHandler,
    videoFilterHomepageHandler,
    dynamicFilterDynamicHandler,
    commentFilterVideoHandler,
    commentFilterDynamicHandler,
    commentFilterSpaceHandler
  ];
  const useRulePanelStore = /* @__PURE__ */ defineStore("RulePanel", () => {
    const isShow = e$1.ref(false);
    const show = () => {
      isShow.value = true;
    };
    const hide = () => {
      isShow.value = false;
    };
    return { isShow, show, hide };
  });
  const useVideoFilterPanelStore = /* @__PURE__ */ defineStore("VideoFilterPanel", () => {
    const isShow = e$1.ref(false);
    const show = () => {
      isShow.value = true;
    };
    const hide = () => {
      isShow.value = false;
    };
    return { isShow, show, hide };
  });
  const useCommentFilterPanelStore = /* @__PURE__ */ defineStore("CommentFilterPanel", () => {
    const isShow = e$1.ref(false);
    const show = () => {
      isShow.value = true;
    };
    const hide = () => {
      isShow.value = false;
    };
    return { isShow, show, hide };
  });
  const useDynamicFilterPanelStore = /* @__PURE__ */ defineStore("DynamicFilterPanel", () => {
    const isShow = e$1.ref(false);
    const show = () => {
      isShow.value = true;
    };
    const hide = () => {
      isShow.value = false;
    };
    return { isShow, show, hide };
  });
  const useSideBtnStore = /* @__PURE__ */ defineStore("SideBtn", () => {
    const isShow = useStorage("bili-cleaner-side-btn-show", false, localStorage);
    const show = () => {
      isShow.value = true;
    };
    const hide = () => {
      isShow.value = false;
    };
    return { isShow, show, hide };
  });
  const _sfc_main$6 = /* @__PURE__ */ e$1.defineComponent({
    __name: "CommentFilterPanelView",
    setup(__props) {
      const store = useCommentFilterPanelStore();
      let currPageGroups = [];
      for (const commentFilter of commentFilters) {
        if (commentFilter.checkFn()) {
          currPageGroups = [...currPageGroups, ...commentFilter.groups];
        }
      }
      return (_ctx, _cache) => {
        return e$1.withDirectives((e$1.openBlock(), e$1.createBlock(_sfc_main$d, e$1.mergeProps({
          title: "评论过滤",
          widthPercent: 28,
          heightPercent: 85,
          minWidth: 360,
          minHeight: 600
        }, {
          onClose: e$1.unref(store).hide
        }), {
          default: e$1.withCtx(() => [
            (e$1.openBlock(true), e$1.createElementBlock(e$1.Fragment, null, e$1.renderList(e$1.unref(currPageGroups), (group, index) => {
              return e$1.openBlock(), e$1.createElementBlock("div", { key: index }, [
                e$1.createVNode(_sfc_main$e, e$1.mergeProps({ ref_for: true }, { title: group.name, isFold: group.fold }), {
                  default: e$1.withCtx(() => [
                    (e$1.openBlock(true), e$1.createElementBlock(e$1.Fragment, null, e$1.renderList(group.items, (item, innerIndex) => {
                      return e$1.openBlock(), e$1.createElementBlock("div", { key: innerIndex }, [
                        item.type === "switch" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$7, e$1.mergeProps({
                          key: 0,
                          ref_for: true
                        }, item), null, 16)) : item.type === "number" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$9, e$1.mergeProps({
                          key: 1,
                          ref_for: true
                        }, item), null, 16)) : item.type === "string" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$8, e$1.mergeProps({
                          key: 2,
                          ref_for: true
                        }, item), null, 16)) : item.type === "editor" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$b, e$1.mergeProps({
                          key: 3,
                          ref_for: true
                        }, item), null, 16)) : item.type === "list" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$a, e$1.mergeProps({
                          key: 4,
                          ref_for: true
                        }, item), null, 16)) : e$1.createCommentVNode("", true)
                      ]);
                    }), 128))
                  ]),
                  _: 2
                }, 1040)
              ]);
            }), 128))
          ]),
          _: 1
        }, 16, ["onClose"])), [
          [e$1.vShow, e$1.unref(store).isShow]
        ]);
      };
    }
  });
  const _hoisted_1$1 = ["onClick"];
  const _hoisted_2 = { key: 0 };
  const _sfc_main$5 = /* @__PURE__ */ e$1.defineComponent({
    __name: "ContextMenuView",
    setup(__props) {
      const show = e$1.ref(false);
      const pos = e$1.reactive({
        left: -9999,
        top: -9999
      });
      const menuList = e$1.ref([]);
      useEventListener(window, "contextmenu", (e2) => {
        var _a;
        if (e2.target instanceof HTMLElement) {
          const target = (_a = e2.composedPath()) == null ? void 0 : _a[0];
          if (!target.closest(".bilibili-app-recommend-root")) {
            handleTarget(target);
          }
        }
        if (menuList.value.length) {
          e2.preventDefault();
          show.value = true;
          if (show.value) {
            pos.left = e2.x;
            pos.top = e2.y;
          }
          useEventListener(window, "wheel", () => {
            show.value = false;
          });
          useEventListener(document, "click", () => {
            show.value = false;
          });
        }
      });
      const handleTarget = (target) => {
        menuList.value = [];
        for (const handler of filterContextMenuHandlers) {
          try {
            menuList.value = menuList.value.concat(handler(target));
          } catch (err) {
            error("ContextMenuVuew handleTarget failed", err);
          }
        }
      };
      return (_ctx, _cache) => {
        return show.value ? (e$1.openBlock(), e$1.createElementBlock("div", {
          key: 0,
          class: "fixed z-50 block cursor-pointer overflow-hidden rounded-md bg-white text-[15px] text-black shadow-lg shadow-black/20",
          style: e$1.normalizeStyle({ left: pos.left + "px", top: pos.top + "px" })
        }, [
          (e$1.openBlock(true), e$1.createElementBlock(e$1.Fragment, null, e$1.renderList(menuList.value, (menu2, index) => {
            return e$1.openBlock(), e$1.createElementBlock("div", { key: index }, [
              e$1.createElementVNode("div", {
                onClick: ($event) => {
                  var _a;
                  return (_a = menu2.fn()) == null ? void 0 : _a.then().catch();
                },
                class: "px-2.5 py-1 hover:bg-[#00aeec] hover:text-white"
              }, [
                _cache[0] || (_cache[0] = e$1.createElementVNode("span", { class: "mr-0.5" }, "◎", -1)),
                e$1.createTextVNode(" " + e$1.toDisplayString(menu2.name), 1)
              ], 8, _hoisted_1$1),
              index < menuList.value.length - 1 ? (e$1.openBlock(), e$1.createElementBlock("hr", _hoisted_2)) : e$1.createCommentVNode("", true)
            ]);
          }), 128))
        ], 4)) : e$1.createCommentVNode("", true);
      };
    }
  });
  const _sfc_main$4 = /* @__PURE__ */ e$1.defineComponent({
    __name: "DynamicFilterPanelView",
    setup(__props) {
      const store = useDynamicFilterPanelStore();
      let currPageGroups = [];
      for (const dynamicFilter of dynamicFilters) {
        if (dynamicFilter.checkFn()) {
          currPageGroups = [...currPageGroups, ...dynamicFilter.groups];
        }
      }
      return (_ctx, _cache) => {
        return e$1.withDirectives((e$1.openBlock(), e$1.createBlock(_sfc_main$d, e$1.mergeProps({
          title: "动态过滤",
          widthPercent: 28,
          heightPercent: 85,
          minWidth: 360,
          minHeight: 600
        }, {
          onClose: e$1.unref(store).hide
        }), {
          default: e$1.withCtx(() => [
            (e$1.openBlock(true), e$1.createElementBlock(e$1.Fragment, null, e$1.renderList(e$1.unref(currPageGroups), (group, index) => {
              return e$1.openBlock(), e$1.createElementBlock("div", { key: index }, [
                e$1.createVNode(_sfc_main$e, e$1.mergeProps({ ref_for: true }, { title: group.name, isFold: group.fold }), {
                  default: e$1.withCtx(() => [
                    (e$1.openBlock(true), e$1.createElementBlock(e$1.Fragment, null, e$1.renderList(group.items, (item, innerIndex) => {
                      return e$1.openBlock(), e$1.createElementBlock("div", { key: innerIndex }, [
                        item.type === "switch" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$7, e$1.mergeProps({
                          key: 0,
                          ref_for: true
                        }, item), null, 16)) : item.type === "number" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$9, e$1.mergeProps({
                          key: 1,
                          ref_for: true
                        }, item), null, 16)) : item.type === "string" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$8, e$1.mergeProps({
                          key: 2,
                          ref_for: true
                        }, item), null, 16)) : item.type === "editor" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$b, e$1.mergeProps({
                          key: 3,
                          ref_for: true
                        }, item), null, 16)) : item.type === "list" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$a, e$1.mergeProps({
                          key: 4,
                          ref_for: true
                        }, item), null, 16)) : e$1.createCommentVNode("", true)
                      ]);
                    }), 128))
                  ]),
                  _: 2
                }, 1040)
              ]);
            }), 128))
          ]),
          _: 1
        }, 16, ["onClose"])), [
          [e$1.vShow, e$1.unref(store).isShow]
        ]);
      };
    }
  });
  const bangumiBasicItems = [
    {
      type: "switch",
      id: "video-page-simple-share",
      name: "净化分享功能",
      defaultEnable: true,
      description: ["点击分享按钮时,复制纯净链接"],
      enableFn: async () => {
        let counter = 0;
        const id = setInterval(() => {
          counter++;
          const shareBtn = document.getElementById("share-container-id");
          if (shareBtn) {
            clearInterval(id);
            shareBtn.addEventListener("click", () => {
              var _a, _b;
              const mainTitle = (_a = document.querySelector("[class^='mediainfo_mediaTitle']")) == null ? void 0 : _a.textContent;
              const subTitle = (_b = document.getElementById("player-title")) == null ? void 0 : _b.textContent;
              const shareText = `《${mainTitle}》${subTitle} 
https://www.bilibili.com${location.pathname}`;
              navigator.clipboard.writeText(shareText).then().catch();
            });
          } else if (counter > 50) {
            clearInterval(id);
          }
        }, 200);
      },
      enableFnRunAt: "document-end"
    },
    {
      type: "switch",
      id: "video-page-hide-fixed-header",
      name: "顶栏 滚动页面后 不再吸附顶部"
    }
  ];
  const bangumiDanmakuItems = [
    {
      type: "string",
      id: "video-page-danmaku-font-family",
      name: "弹幕字体",
      description: ["遵循 CSS font-family 语法,留空为禁用", "确保本地已安装该字体,检查家族名是否正确"],
      defaultValue: "PingFang SC,HarmonyOS_Regular,Helvetica Neue,Microsoft YaHei,sans-serif",
      disableValue: "",
      fn: (value) => {
        document.documentElement.style.setProperty(
          "--video-page-danmaku-font-family",
          value.trim().replace(/;$/, "")
        );
      }
    },
    {
      type: "string",
      id: "video-page-danmaku-font-weight",
      name: "弹幕字重",
      description: ["遵循 CSS font-weight 语法,留空为禁用", "确保本地字体支持该字重"],
      defaultValue: "",
      disableValue: "",
      fn: (value) => {
        document.documentElement.style.setProperty(
          "--video-page-danmaku-font-weight",
          value.trim().replace(/;$/, "")
        );
      }
    }
  ];
  const bangumiDanmakuControlItems = [
    {
      type: "switch",
      id: "video-page-hide-bpx-player-video-info-online",
      name: "隐藏 同时在看人数"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-video-info-dm",
      name: "隐藏 装填弹幕数量"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-dm-switch",
      name: "隐藏 弹幕开关"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-dm-setting",
      name: "隐藏 弹幕显示设置"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-video-btn-dm",
      name: "隐藏 弹幕样式"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-dm-input",
      name: "隐藏 占位文字",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-dm-hint",
      name: "隐藏 弹幕礼仪",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-dm-btn-send",
      name: "隐藏 发送按钮"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-sending-area",
      name: "非全屏下 关闭弹幕栏",
      description: ["字母 D 是弹幕开关快捷键"]
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-video-inputbar",
      name: "全屏下 关闭弹幕输入框"
    }
  ];
  const bangumiMiniPlayerItems = [
    {
      type: "switch",
      id: "video-page-hide-bpx-player-mini-mode-process",
      name: "隐藏底边进度",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-mini-mode-danmaku",
      name: "隐藏弹幕"
    },
    {
      type: "switch",
      id: "video-page-bpx-player-mini-mode-wheel-adjust",
      name: "滚轮调节大小",
      enableFn: async () => {
        try {
          const zoom = useStorage("bili-cleaner-mini-player-zoom", 1, localStorage);
          document.documentElement.style.setProperty("--mini-player-zoom", zoom.value + "");
          let cnt = 0;
          const interval = setInterval(() => {
            const player = document.querySelector(".bpx-player-container");
            if (player) {
              clearInterval(interval);
              let flag = false;
              player.addEventListener("mouseenter", () => {
                if (player.getAttribute("data-screen") === "mini") {
                  flag = true;
                }
              });
              player.addEventListener("mouseleave", () => {
                flag = false;
              });
              player.addEventListener("wheel", (e2) => {
                if (flag) {
                  e2.stopPropagation();
                  e2.preventDefault();
                  const scaleSpeed = 5;
                  let newZoom = zoom.value - Math.sign(e2.deltaY) * scaleSpeed / 100;
                  newZoom = newZoom < 0.5 ? 0.5 : newZoom;
                  newZoom = newZoom > 3 ? 3 : newZoom;
                  if (newZoom !== zoom.value) {
                    zoom.value = newZoom;
                    document.documentElement.style.setProperty("--mini-player-zoom", newZoom + "");
                  }
                }
              });
            } else {
              cnt++;
              if (cnt > 20) {
                clearInterval(interval);
              }
            }
          }, 500);
        } catch (err) {
          error("adjust mini player size error", err);
        }
      },
      enableFnRunAt: "document-end"
    },
    {
      type: "switch",
      id: "video-page-bpx-player-mini-mode-position-record",
      name: "记录小窗位置",
      enableFn: async () => {
        const pos = useStorage("bili-cleaner-mini-player-pos", { tx: 0, ty: 0 }, localStorage);
        document.documentElement.style.setProperty("--mini-player-translate-x", pos.value.tx + "px");
        document.documentElement.style.setProperty("--mini-player-translate-y", pos.value.ty + "px");
        waitForEle(document.body, `#bilibili-player [class^="bpx-player-video"]`, (node) => {
          return node.className.startsWith("bpx-player-video");
        }).then(() => {
          const player = document.querySelector(".bpx-player-container");
          if (player) {
            player.addEventListener("mouseup", () => {
              if (player.getAttribute("data-screen") === "mini") {
                const rect = player.getBoundingClientRect();
                pos.value.tx = 84 - (document.documentElement.clientWidth - rect.right);
                pos.value.ty = 48 - (document.documentElement.clientHeight - rect.bottom);
              }
            });
          }
        });
      },
      enableFnRunAt: "document-end"
    }
  ];
  const bangumiPlayerItems = [
    {
      type: "switch",
      id: "video-page-hide-bpx-player-top-left-title",
      name: "隐藏 全屏下 播放器内标题"
    },
    {
      type: "switch",
      id: "bangumi-page-hide-bpx-player-top-follow",
      name: "隐藏 追番/追剧按钮 ★",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-top-issue",
      name: "隐藏 反馈按钮",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-state-wrap",
      name: "隐藏 视频暂停时大Logo"
    },
    {
      type: "switch",
      id: "bangumi-page-hide-bpx-player-record-item-wrap",
      name: "隐藏 视频内封审核号(非内嵌) ★",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-dialog-wrap",
      name: "隐藏 弹幕悬停 点赞/复制/举报"
    },
    {
      type: "switch",
      id: "video-page-bpx-player-bili-high-icon",
      name: "隐藏 高赞弹幕前点赞按钮"
    },
    {
      type: "switch",
      id: "video-page-bpx-player-bili-dm-vip-white",
      name: "彩色渐变弹幕 变成白色"
    }
  ];
  const bangumiPlayerControlItems = [
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-prev",
      name: "隐藏 上一个视频"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-play",
      name: "隐藏 播放/暂停"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-next",
      name: "隐藏 下一个视频"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-flac",
      name: "隐藏 Hi-Res无损"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-quality",
      name: "隐藏 清晰度"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-eplist",
      name: "隐藏 选集"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-playbackrate",
      name: "隐藏 倍速"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-subtitle",
      name: "隐藏 字幕"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-volume",
      name: "隐藏 音量"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-setting",
      name: "隐藏 视频设置"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-pip",
      name: "隐藏 画中画",
      description: ["Chrome / Edge 浏览器可用", "Firefox 可在浏览器设置中关闭"]
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-wide",
      name: "隐藏 宽屏"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-web",
      name: "隐藏 网页全屏"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-full",
      name: "隐藏 全屏"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-pbp-pin",
      name: "隐藏 高能进度条 图钉按钮"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-shadow-progress-area",
      name: "隐藏 底边mini视频进度",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-show-bpx-player-pbp",
      name: "控制栏收起时 显示高能进度条"
    }
  ];
  let webScroll$1 = false;
  let fullScroll$1 = false;
  const fn$1 = (event) => event.stopImmediatePropagation();
  const disableTuneVolume$1 = () => {
    if (!webScroll$1 && !fullScroll$1) {
      window.addEventListener("mousewheel", fn$1, { capture: true });
      window.addEventListener("DOMMouseScroll", fn$1, { capture: true });
    }
  };
  const enableTuneVolume$1 = () => {
    if (!(webScroll$1 && fullScroll$1)) {
      window.removeEventListener("mousewheel", fn$1, { capture: true });
      window.removeEventListener("DOMMouseScroll", fn$1, { capture: true });
    }
  };
  const bangumiPlayerLayoutItems = [
    {
      type: "switch",
      id: "default-widescreen",
      name: "默认宽屏播放 刷新生效",
      noStyle: true,
      enableFn: () => {
        var _a, _b, _c, _d, _e, _f, _g;
        let origNextData = _unsafeWindow.__NEXT_DATA__;
        if ((_g = (_f = (_e = (_d = (_c = (_b = (_a = origNextData == null ? void 0 : origNextData.props) == null ? void 0 : _a.pageProps) == null ? void 0 : _b.dehydratedState) == null ? void 0 : _c.queries) == null ? void 0 : _d[1]) == null ? void 0 : _e.state) == null ? void 0 : _f.data) == null ? void 0 : _g.show) {
          origNextData.props.pageProps.dehydratedState.queries[1].state.data.show.wide_screen = 1;
        }
        Object.defineProperty(_unsafeWindow, "__NEXT_DATA__", {
          get() {
            return origNextData;
          },
          set(value) {
            var _a2, _b2, _c2, _d2, _e2, _f2, _g2;
            if ((_g2 = (_f2 = (_e2 = (_d2 = (_c2 = (_b2 = (_a2 = value.props) == null ? void 0 : _a2.pageProps) == null ? void 0 : _b2.dehydratedState) == null ? void 0 : _c2.queries) == null ? void 0 : _d2[1]) == null ? void 0 : _e2.state) == null ? void 0 : _f2.data) == null ? void 0 : _g2.show) {
              value.props.pageProps.dehydratedState.queries[1].state.data.show.wide_screen = 1;
            }
            origNextData = value;
          }
        });
      }
    },
    {
      type: "switch",
      id: "webscreen-scrollable",
      name: "网页全屏时 页面可滚动",
      description: ["播放器内滚轮调节音量失效"],
      enableFn: async () => {
        disableTuneVolume$1();
        webScroll$1 = true;
        waitForEle(document.body, ".bpx-player-ctrl-web", (node) => {
          return node.className.includes("bpx-player-ctrl-web");
        }).then((webBtn) => {
          if (webBtn) {
            webBtn.addEventListener("click", () => {
              if (webBtn.classList.contains("bpx-state-entered")) {
                window.scrollTo(0, 0);
              }
            });
          }
        });
      },
      disableFn: () => {
        enableTuneVolume$1();
        webScroll$1 = false;
      },
      enableFnRunAt: "document-end"
    },
    {
      type: "switch",
      id: "fullscreen-scrollable",
      name: "全屏时 页面可滚动 (实验功能)",
      description: ["播放器内滚轮调节音量失效", "点击全屏按钮生效,双击全屏无效"],
      enableFn: async () => {
        disableTuneVolume$1();
        fullScroll$1 = true;
        let cnt = 0;
        const id = setInterval(() => {
          var _a;
          const webBtn = document.body.querySelector(".bpx-player-ctrl-btn.bpx-player-ctrl-web");
          const fullBtn = document.body.querySelector(".bpx-player-ctrl-btn.bpx-player-ctrl-full");
          if (webBtn && fullBtn) {
            clearInterval(id);
            const isFullScreen = () => {
              if (document.fullscreenElement) {
                return "ele";
              } else if (window.innerWidth === screen.width && window.innerHeight === screen.height) {
                return "f11";
              } else {
                return "not";
              }
            };
            const isWebScreen = () => {
              return webBtn.classList.contains("bpx-state-entered");
            };
            const newFullBtn = fullBtn.cloneNode(true);
            newFullBtn.addEventListener("click", () => {
              switch (isFullScreen()) {
                case "ele":
                  if (isWebScreen()) {
                    webBtn.click();
                  } else {
                    document.exitFullscreen().then().catch();
                  }
                  break;
                case "f11":
                  webBtn.click();
                  break;
                case "not":
                  document.documentElement.requestFullscreen().then().catch();
                  if (!isWebScreen()) {
                    webBtn.click();
                  }
                  window.scrollTo(0, 0);
                  break;
              }
            });
            (_a = fullBtn.parentElement) == null ? void 0 : _a.replaceChild(newFullBtn, fullBtn);
          } else {
            cnt++;
            cnt > 50 && clearInterval(id);
          }
        }, 200);
      },
      disableFn: () => {
        enableTuneVolume$1();
        fullScroll$1 = false;
      },
      enableFnRunAt: "document-end"
    },
    {
      type: "number",
      id: "normalscreen-width",
      name: "普通播放 视频宽度调节(-1禁用)",
      minValue: -1,
      maxValue: 100,
      step: 0.1,
      defaultValue: -1,
      disableValue: -1,
      addonText: "vw",
      fn: (value) => {
        document.documentElement.style.setProperty("--normalscreen-width", `${value}vw`);
      }
    }
  ];
  const bangumiRightItems = [
    {
      type: "switch",
      id: "bangumi-page-hide-right-container-section-height",
      name: "隐藏 大会员按钮 ★",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-right-container-danmaku",
      name: "隐藏 弹幕列表"
    },
    {
      type: "switch",
      id: "bangumi-page-hide-eplist-badge",
      name: "隐藏 视频列表 会员/限免标记 ★"
    },
    {
      type: "switch",
      id: "bangumi-page-hide-recommend",
      name: "隐藏 相关作品推荐 ★"
    }
  ];
  const bangumiSidebarItems = [
    {
      type: "switch",
      id: "bangumi-page-hide-sidenav-issue",
      name: "隐藏 新版反馈 ★",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-sidenav-mini",
      name: "隐藏 小窗播放开关"
    },
    {
      type: "switch",
      id: "video-page-hide-sidenav-customer-service",
      name: "隐藏 客服",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-sidenav-back-to-top",
      name: "隐藏 回顶部"
    }
  ];
  const bangumiToolbarItems = [
    {
      type: "switch",
      id: "video-page-coin-disable-auto-like",
      name: "投币时不自动点赞",
      noStyle: true,
      enableFn: async () => {
        const disableAutoLike = () => {
          let counter = 0;
          const timer = setInterval(() => {
            const checkbox = document.querySelector(
              '.main-container [class^="dialogcoin_like_checkbox"] input'
            );
            if (checkbox) {
              checkbox.checked && checkbox.click();
              clearInterval(timer);
            } else {
              counter++;
              if (counter > 100) {
                clearInterval(timer);
              }
            }
          }, 20);
        };
        const coinBtn = document.querySelector("#ogv_weslie_tool_coin_info");
        if (coinBtn) {
          coinBtn.addEventListener("click", disableAutoLike);
        } else {
          document.addEventListener("DOMContentLoaded", () => {
            const coinBtn2 = document.querySelector("#ogv_weslie_tool_coin_info");
            coinBtn2 == null ? void 0 : coinBtn2.addEventListener("click", disableAutoLike);
          });
        }
      }
    },
    {
      type: "switch",
      id: "video-page-hide-video-share-popover",
      name: "隐藏 分享按钮弹出菜单",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "bangumi-page-hide-watch-together",
      name: "隐藏 一起看 ★",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "bangumi-page-hide-toolbar",
      name: "隐藏 整个工具栏(赞币转) ★"
    },
    {
      type: "switch",
      id: "bangumi-page-hide-media-info",
      name: "隐藏 作品介绍 ★"
    },
    {
      type: "switch",
      id: "bangumi-page-simple-media-info",
      name: "精简 作品介绍 ★",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "bangumi-page-hide-sponsor-module",
      name: "隐藏 承包榜 ★"
    }
  ];
  const bangumiGroups = [
    {
      name: "基本功能",
      fold: true,
      items: bangumiBasicItems
    },
    {
      name: "播放设定",
      fold: true,
      items: bangumiPlayerLayoutItems
    },
    {
      name: "播放器(标★是番剧页独有项)",
      fold: true,
      items: bangumiPlayerItems
    },
    {
      name: "播放控制栏",
      fold: true,
      items: bangumiPlayerControlItems
    },
    {
      name: "弹幕栏",
      fold: true,
      items: bangumiDanmakuControlItems
    },
    {
      name: "弹幕样式",
      fold: true,
      items: bangumiDanmakuItems
    },
    {
      name: "视频下方 工具栏/作品信息",
      fold: true,
      items: bangumiToolbarItems
    },
    {
      name: "右栏 作品选集/其他推荐",
      fold: true,
      items: bangumiRightItems
    },
    {
      name: "小窗播放器",
      fold: true,
      items: bangumiMiniPlayerItems
    },
    {
      name: "页面右下角 小按钮",
      fold: true,
      items: bangumiSidebarItems
    }
  ];
  const channelBasicItems = [
    {
      type: "switch",
      id: "homepage-hide-banner",
      name: "隐藏 横幅banner",
      description: ["同步生效:首页、分区页、热门页"]
    },
    {
      type: "switch",
      id: "channel-hide-subarea",
      name: "隐藏 全站分区栏"
    },
    {
      type: "switch",
      id: "channel-hide-carousel",
      name: "隐藏 大图轮播"
    },
    {
      type: "switch",
      id: "channel-hide-sticky-subchannel",
      name: "隐藏 滚动页面时 顶部吸附分区栏"
    },
    {
      type: "switch",
      id: "channel-hide-sticky-header",
      name: "隐藏 滚动页面时 顶部吸附顶栏"
    },
    {
      type: "number",
      id: "channel-layout-padding",
      name: "修改 页面两侧边距 (-1禁用)",
      minValue: -1,
      maxValue: 500,
      step: 1,
      defaultValue: -1,
      disableValue: -1,
      addonText: "px",
      fn: (value) => {
        document.documentElement.style.setProperty("--channel-layout-padding", `${value}px`);
      }
    }
  ];
  const channelRcmdItems = [
    {
      type: "switch",
      id: "channel-hide-high-energy-topic",
      name: "隐藏 前方高能右侧 话题精选"
    },
    {
      type: "switch",
      id: "channel-hide-high-energy",
      name: "隐藏 前方高能栏目"
    },
    {
      type: "switch",
      id: "channel-hide-rank-list",
      name: "隐藏 视频栏目右侧 热门列表"
    },
    {
      type: "switch",
      id: "channel-hide-ad-banner",
      name: "隐藏 广告banner",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "channel-hide-video-info-date",
      name: "隐藏 发布时间"
    },
    {
      type: "switch",
      id: "channel-hide-danmaku-count",
      name: "隐藏 弹幕数",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "channel-hide-bili-watch-later",
      name: "隐藏 稍后再看按钮"
    },
    {
      type: "switch",
      id: "channel-feed-card-body-grid-gap",
      name: "优化 近期投稿栏目 视频行距",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "channel-increase-rcmd-list-font-size",
      name: "增大 视频信息字号"
    }
  ];
  const channelSidebarItems = [
    {
      type: "switch",
      id: "channel-hide-feedback",
      name: "隐藏 新版反馈",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "channel-hide-top-btn",
      name: "隐藏 回顶部"
    }
  ];
  const channelGroups = [
    {
      name: "分区页 基础功能",
      items: channelBasicItems
    },
    {
      name: "视频列表",
      items: channelRcmdItems
    },
    {
      name: "页面右下角 小按钮",
      items: channelSidebarItems
    }
  ];
  const commentBasicItems = [
    {
      type: "switch",
      id: "video-page-hide-reply-notice",
      name: "隐藏 活动通知",
      defaultEnable: true,
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-comments-header-renderer",
          "video-page-hide-reply-notice",
          `#notice {display: none !important;}`
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-comments-header-renderer", "video-page-hide-reply-notice");
      }
    },
    {
      type: "switch",
      id: "video-page-hide-main-reply-box",
      name: "隐藏 评论编辑器",
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-comments-header-renderer",
          "video-page-hide-main-reply-box",
          `#commentbox bili-comment-box {display: none !important;}
                    #navbar {margin-bottom: 0 !important;}`
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-comments-header-renderer", "video-page-hide-main-reply-box");
      }
    },
    {
      type: "switch",
      id: "video-page-hide-reply-box-textarea-placeholder",
      name: "隐藏 评论编辑器内占位文字",
      description: ["同时会隐藏回复评论时的文字提示"],
      defaultEnable: true,
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-comment-textarea",
          "video-page-hide-reply-box-textarea-placeholder",
          `textarea:not([placeholder^="回复"])::placeholder {color: transparent !important; user-select: none;}`
        );
        ShadowInstance.addShadowStyle(
          "bili-comment-rich-textarea",
          "video-page-hide-reply-box-textarea-placeholder",
          `.brt-placeholder {display: none !important;}`
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-comment-textarea", "video-page-hide-reply-box-textarea-placeholder");
        ShadowInstance.removeShadowStyle("bili-comment-rich-textarea", "video-page-hide-reply-box-textarea-placeholder");
      }
    },
    {
      type: "switch",
      id: "video-page-hide-fixed-reply-box",
      name: "隐藏 页面底部 吸附评论框",
      defaultEnable: true,
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-comments-header-renderer",
          "video-page-hide-fixed-reply-box",
          `.bili-comments-bottom-fixed-wrapper {display: none !important;}`
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-comments-header-renderer", "video-page-hide-fixed-reply-box");
      }
    },
    {
      type: "switch",
      id: "video-page-hide-top-vote-card",
      name: "隐藏 投票栏 (红方/蓝方)",
      defaultEnable: true,
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-comments-header-renderer",
          "video-page-hide-top-vote-card",
          `#vote {display: none !important;}`
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-comments-header-renderer", "video-page-hide-top-vote-card");
      }
    },
    {
      type: "switch",
      id: "video-page-hide-comment-user-card",
      name: "隐藏 用户卡片",
      description: ["鼠标放在用户名上时不显示卡片"],
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-user-profile",
          "video-page-hide-comment-user-card",
          `#wrap {display: none !important;}`
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-user-profile", "video-page-hide-comment-user-card");
      }
    },
    {
      type: "switch",
      id: "video-page-hide-reply-decorate",
      name: "隐藏 评论右侧装饰",
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-comment-renderer",
          "video-page-hide-reply-decorate",
          `#ornament {display: none !important;}`
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-comment-renderer", "video-page-hide-reply-decorate");
      }
    },
    {
      type: "switch",
      id: "video-page-hide-fan-badge",
      name: "隐藏 粉丝牌",
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-comment-user-medal",
          "video-page-hide-fan-badge",
          `#fans {display: none !important;}`
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-comment-user-medal", "video-page-hide-fan-badge");
      }
    },
    {
      type: "switch",
      id: "video-page-hide-contractor-box",
      name: "隐藏 老粉、原始粉丝Tag",
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-comment-user-medal",
          "video-page-hide-contractor-box",
          `#contractor {display: none !important;}`
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-comment-user-medal", "video-page-hide-contractor-box");
      }
    },
    {
      type: "switch",
      id: "video-page-hide-user-level",
      name: "隐藏 用户等级",
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-comment-user-info",
          "video-page-hide-user-level",
          `#user-level {display: none !important;}
                #user-name {margin-right: 5px;}`
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-comment-user-info", "video-page-hide-user-level");
      }
    },
    {
      type: "switch",
      id: "video-page-hide-bili-avatar-pendent-dom",
      name: "隐藏 用户头像饰品",
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-avatar",
          "video-page-hide-bili-avatar-pendent-dom",
          `picture:has(img[src*="/bfs/garb/"]) {display: none !important;}
                .layer-res[style*="bfs/garb/"] {display: none !important;}
                .layer.center[style^="width: 66px"] {display: none !important;}
                /* 统一头像大小 */
                .layer.center {width: 48px !important; height: 48px !important;}
                `
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-avatar", "video-page-hide-bili-avatar-pendent-dom");
      }
    },
    {
      type: "switch",
      id: "video-page-hide-bili-avatar-nft-icon",
      name: "隐藏 用户头像徽章",
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-avatar",
          "video-page-hide-bili-avatar-nft-icon",
          `.layer:not(.center) {display: none !important;}`
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-avatar", "video-page-hide-bili-avatar-nft-icon");
      }
    },
    {
      type: "switch",
      id: "video-page-hide-vote-info",
      name: "隐藏 用户投票 (红方/蓝方)",
      defaultEnable: true,
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-comment-renderer",
          "video-page-hide-vote-info",
          `bili-comment-vote-option {display: none !important;}`
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-comment-renderer", "video-page-hide-vote-info");
      }
    },
    {
      type: "switch",
      id: "video-page-hide-reply-tag-list",
      name: "隐藏 评论内容下Tag",
      description: ["如:热评、UP主觉得很赞"],
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-comment-renderer",
          "video-page-hide-reply-tag-list",
          `#tags {display: none !important;}`
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-comment-renderer", "video-page-hide-reply-tag-list");
      }
    },
    {
      type: "switch",
      id: "video-page-hide-note-prefix",
      name: "隐藏 笔记评论前的小Logo",
      defaultEnable: true,
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-comment-renderer",
          "video-page-hide-note-prefix",
          `#note {display: none !important;}`
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-comment-renderer", "video-page-hide-note-prefix");
      }
    },
    {
      type: "switch",
      id: "video-page-hide-jump-link-search-word",
      name: "禁用 评论内容搜索关键词高亮",
      defaultEnable: true,
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-rich-text",
          "video-page-hide-jump-link-search-word",
          `#contents a[href*="search.bilibili.com"] {color: inherit !important;}
                #contents a[href*="search.bilibili.com"]:hover {color: #008AC5 !important;}
                #contents a[href*="search.bilibili.com"] img {display: none !important;}
                `
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-rich-text", "video-page-hide-jump-link-search-word");
      }
    },
    {
      type: "switch",
      id: "video-page-hide-reply-content-user-highlight",
      name: "禁用 评论中的@高亮",
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-rich-text",
          "video-page-hide-reply-content-user-highlight",
          `#contents a[href*="space.bilibili.com"] {color: inherit !important;}
                #contents a[href*="space.bilibili.com"]:hover {color: #008AC5 !important;}
                `
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-rich-text", "video-page-hide-reply-content-user-highlight");
      }
    },
    {
      type: "switch",
      id: "video-page-hide-reply-dislike-reply-btn",
      name: "隐藏 踩/回复 只在hover时显示",
      defaultEnable: true,
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-comment-renderer",
          // 一级评论
          "video-page-hide-root-reply-dislike-reply-btn",
          `#body {
                    --bili-comment-hover-more-display: 0 !important;
                }
                #body:hover {
                    --bili-comment-hover-more-display: 1 !important;
                }`
        );
        ShadowInstance.addShadowStyle(
          "bili-comment-reply-renderer",
          // 二级评论
          "video-page-hide-sub-reply-dislike-reply-btn",
          `
                #body {
                    --bili-comment-hover-more-display: 0 !important;
                }
                #body:hover {
                    --bili-comment-hover-more-display: 1 !important;
                }`
        );
        ShadowInstance.addShadowStyle(
          "bili-comment-action-buttons-renderer",
          "video-page-hide-root-reply-dislike-reply-btn",
          `#dislike button, #reply button, #more button {
                    display: block !important;
                    opacity: var(--bili-comment-action-buttons-more-display);
                    transition: opacity 0.2s 0.3s;
                }`
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-comment-renderer", "video-page-hide-root-reply-dislike-reply-btn");
        ShadowInstance.removeShadowStyle(
          "bili-comment-action-buttons-renderer",
          "video-page-hide-root-reply-dislike-reply-btn"
        );
      }
    },
    {
      type: "switch",
      id: "video-page-hide-emoji-large",
      name: "隐藏 大表情",
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-rich-text",
          "video-page-hide-emoji-large",
          `#contents img:is(.emoji-large, [style^="width:50px"]) {display: none !important;}`
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-rich-text", "video-page-hide-emoji-large");
      }
    },
    {
      type: "switch",
      id: "video-page-hide-emoji-large-zoom",
      name: "大表情变成小表情",
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-rich-text",
          "video-page-hide-emoji-large-zoom",
          `#contents img:is(.emoji-large, [style^="width:50px"]) {zoom: 0.5 !important;}`
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-rich-text", "video-page-hide-emoji-large-zoom");
      }
    },
    {
      type: "switch",
      id: "video-page-reply-user-name-color-pink",
      name: "用户名 全部大会员色",
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-comment-user-info",
          "video-page-reply-user-name-color-pink",
          `#user-name {color: #FB7299 !important;}
                #user-name a {color: #FB7299 !important;}`
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-comment-user-info", "video-page-reply-user-name-color-pink");
      }
    },
    {
      type: "switch",
      id: "video-page-reply-user-name-color-default",
      name: "用户名 全部恢复默认色",
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-comment-user-info",
          "video-page-reply-user-name-color-default",
          `#user-name {color: #61666d !important;}
                #user-name a {color: #61666d !important;}`
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-comment-user-info", "video-page-reply-user-name-color-default");
      }
    },
    {
      type: "switch",
      id: "video-page-reply-view-image-optimize",
      name: "笔记图片 查看大图优化",
      defaultEnable: true,
      enableFn: () => {
        ShadowInstance.addShadowStyle(
          "bili-photoswipe",
          "video-page-reply-view-image-optimize",
          `#wrap:has(#thumb:empty) :is(#prev, #next) {display: none !important;}
                #prev, #next {zoom: 1.3;}
                #thumb {display: none !important;}`
        );
      },
      disableFn: () => {
        ShadowInstance.removeShadowStyle("bili-photoswipe", "video-page-reply-view-image-optimize");
      }
    },
    {
      type: "switch",
      id: "video-page-hide-comment",
      name: "隐藏 视频评论区 (播放页/番剧页)"
    },
    {
      type: "switch",
      id: "dynamic-page-hide-all-comment",
      name: "隐藏 动态评论区 (动态页/空间页)"
    }
  ];
  const commentGroups = [
    {
      name: "全站通用 - 评论区",
      fold: true,
      items: commentBasicItems
    }
  ];
  const _URLCleaner = class _URLCleaner {
    constructor() {
      __publicField(this, "origReplaceState", _unsafeWindow.history.replaceState);
      __publicField(this, "origPushState", _unsafeWindow.history.pushState);
      // URL清理函数
      __publicField(this, "cleanFnArr", []);
      try {
        this.hijack();
      } catch (err) {
        error("init URLCleaner error", err);
      }
    }
    static getInstance() {
      if (!_URLCleaner.instance) {
        _URLCleaner.instance = new _URLCleaner();
      }
      return _URLCleaner.instance;
    }
    hijack() {
      _unsafeWindow.history.replaceState = (data, unused, url) => {
        try {
          if (typeof url === "string") {
            if (!url.startsWith(location.origin) && !url.startsWith(location.hostname)) {
              url = `${location.origin}${url.startsWith("/") ? "" : "/"}${url}`;
            }
            const cleanURL = this.cleanFnArr.reduce((curr, fn2) => fn2(curr), url);
            if (location.href.endsWith(cleanURL)) {
              return;
            }
            return this.origReplaceState.apply(_unsafeWindow.history, [data, unused, cleanURL]);
          }
          return this.origReplaceState.apply(_unsafeWindow.history, [data, unused, url]);
        } catch (err) {
          error("URLCleaner replaceState error", err);
          return this.origReplaceState.apply(_unsafeWindow.history, [data, unused, url]);
        }
      };
      _unsafeWindow.history.pushState = (data, unused, url) => {
        try {
          if (typeof url === "string") {
            if (!url.startsWith(location.origin) && !url.startsWith(location.hostname)) {
              url = `${location.origin}${url.startsWith("/") ? "" : "/"}${url}`;
            }
            const cleanURL = this.cleanFnArr.reduce((curr, fn2) => fn2(curr), url);
            if (location.href.endsWith(cleanURL)) {
              return;
            }
            return this.origPushState.apply(_unsafeWindow.history, [data, unused, cleanURL]);
          }
          return this.origPushState.apply(_unsafeWindow.history, [data, unused, url]);
        } catch (err) {
          error("URLCleaner pushState error", err);
          return this.origReplaceState.apply(_unsafeWindow.history, [data, unused, url]);
        }
      };
    }
    clean() {
      try {
        const cleanURL = this.cleanFnArr.reduce((curr, fn2) => fn2(curr), location.href);
        if (location.href !== cleanURL) {
          this.origReplaceState.apply(_unsafeWindow.history, [null, "", cleanURL]);
        }
      } catch (err) {
        error("init URLCleaner error", err);
      }
    }
  };
  __publicField(_URLCleaner, "instance");
  let URLCleaner = _URLCleaner;
  const URLCleanerInstance = URLCleaner.getInstance();
  const commonBasicItems = [
    {
      type: "switch",
      id: "border-radius",
      name: "页面直角化,去除圆角",
      // 根据当前页面选定attribute name
      attrName: (() => {
        if (isPageDynamic()) {
          return "border-radius-dynamic";
        }
        if (isPageLive()) {
          return "border-radius-live";
        }
        if (isPageSearch()) {
          return "border-radius-search";
        }
        if (isPageVideo() || isPagePlaylist()) {
          return "border-radius-video";
        }
        if (isPageBangumi()) {
          return "border-radius-bangumi";
        }
        if (isPageHomepage()) {
          return "border-radius-homepage";
        }
        if (isPagePopular()) {
          return "border-radius-popular";
        }
        if (isPageChannel()) {
          return "border-radius-channel";
        }
        return void 0;
      })()
    },
    {
      type: "switch",
      id: "beauty-scrollbar",
      name: "美化页面滚动条",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "url-cleaner",
      name: "URL参数净化",
      description: ["给 UP 充电时若报错,尝试关闭本功能并刷新"],
      defaultEnable: true,
      noStyle: true,
      /**
       * URL净化,移除query string中的跟踪参数/无用参数
       * 净化掉vd_source参数会导致充电窗口载入失败
       */
      enableFn: async () => {
        const cleanParams = (url) => {
          try {
            if (url.match(/live\.bilibili\.com\/(p\/html|activity|blackboard)/)) {
              return url;
            }
            const keysToRemove = /* @__PURE__ */ new Set([
              "from_source",
              "spm_id_from",
              "search_source",
              "vd_source",
              "unique_k",
              "is_story_h5",
              "from_spmid",
              "share_plat",
              "share_medium",
              "share_from",
              "share_source",
              "share_tag",
              "up_id",
              "timestamp",
              "mid",
              "live_from",
              "launch_id",
              "session_id",
              "share_session_id",
              "broadcast_type",
              "is_room_feed",
              "spmid",
              "plat_id",
              "goto",
              "report_flow_data",
              "trackid",
              "live_form",
              "track_id",
              "from",
              "visit_id",
              "extra_jump_from"
            ]);
            if (isPageSearch()) {
              keysToRemove.add("vt");
            }
            if (isPageLive()) {
              keysToRemove.add("bbid");
              keysToRemove.add("ts");
              keysToRemove.add("hotRank");
              keysToRemove.add("popular_rank");
            }
            const urlObj = new URL(url);
            const params = new URLSearchParams(urlObj.search);
            const temp = [];
            for (const k2 of params.keys()) {
              keysToRemove.has(k2) && temp.push(k2);
            }
            for (const k2 of temp) {
              params.delete(k2);
            }
            params.get("p") === "1" && params.delete("p");
            urlObj.search = params.toString().replace(/\/$/, "");
            return urlObj.toString();
          } catch (err) {
            return url;
          }
        };
        URLCleanerInstance.cleanFnArr.push(cleanParams);
        URLCleanerInstance.clean();
      }
    },
    {
      type: "switch",
      id: "hide-footer",
      name: "隐藏 页底footer"
    },
    {
      type: "switch",
      id: "hide-footer",
      name: "修复字体 (实验功能)",
      defaultEnable: true,
      // 根据当前页面选定attribute name
      attrName: (() => {
        if (isPageLive()) {
          return "font-patch-live";
        }
        if (isPageDynamic()) {
          return "font-patch-dynamic";
        }
        if (isPagePopular()) {
          return "font-patch-popular";
        }
        if (isPageWatchlater()) {
          return "font-patch-watchlater";
        }
        if (isPageSpace()) {
          return "font-patch-space";
        }
        return void 0;
      })(),
      description: ["让全站字体与首页字体一致", "生效页面:动态、直播、热门、稍后再看"]
    }
  ];
  const commonHeaderCenterItems = [
    {
      type: "switch",
      id: "common-hide-nav-search-rcmd",
      name: "隐藏 推荐搜索"
    },
    {
      type: "switch",
      id: "common-hide-nav-search-history",
      name: "隐藏 搜索历史"
    },
    {
      type: "switch",
      id: "common-hide-nav-search-trending",
      name: "隐藏 bilibili热搜"
    },
    {
      type: "switch",
      id: "common-nav-search-middle-justify",
      name: "修复 搜索框居中"
    }
  ];
  const commonHeaderLeftItems = [
    {
      type: "switch",
      id: "common-hide-nav-homepage-logo",
      name: "隐藏 主站Logo"
    },
    {
      type: "switch",
      id: "common-hide-nav-homepage",
      name: "隐藏 首页"
    },
    {
      type: "switch",
      id: "common-hide-nav-anime",
      name: "隐藏 番剧"
    },
    {
      type: "switch",
      id: "common-hide-nav-live",
      name: "隐藏 直播"
    },
    {
      type: "switch",
      id: "common-hide-nav-game",
      name: "隐藏 游戏中心"
    },
    {
      type: "switch",
      id: "common-hide-nav-vipshop",
      name: "隐藏 会员购"
    },
    {
      type: "switch",
      id: "common-hide-nav-manga",
      name: "隐藏 漫画"
    },
    {
      type: "switch",
      id: "common-hide-nav-match",
      name: "隐藏 赛事"
    },
    {
      type: "switch",
      id: "common-hide-nav-bdu",
      name: "隐藏 百大评选"
    },
    {
      type: "switch",
      id: "common-hide-nav-bml",
      name: "隐藏 BML"
    },
    {
      type: "switch",
      id: "common-hide-nav-download-app",
      name: "隐藏 下载客户端",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "common-hide-nav-blackboard",
      name: "隐藏 所有官方活动/活动直播"
    },
    {
      type: "switch",
      id: "common-hide-nav-channel-panel-popover",
      name: "隐藏 首页弹出框"
    },
    {
      type: "switch",
      id: "common-hide-nav-anime-popover",
      name: "隐藏 番剧弹出框"
    },
    {
      type: "switch",
      id: "common-hide-nav-live-popover",
      name: "隐藏 直播弹出框"
    },
    {
      type: "switch",
      id: "common-hide-nav-game-popover",
      name: "隐藏 游戏中心弹出框"
    },
    {
      type: "switch",
      id: "common-hide-nav-manga-popover",
      name: "隐藏 漫画弹出框"
    }
  ];
  const commonHeaderRightItems = [
    {
      type: "switch",
      id: "common-hide-nav-avatar",
      name: "隐藏 头像"
    },
    {
      type: "switch",
      id: "common-hide-nav-vip",
      name: "隐藏 大会员",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "common-hide-nav-message",
      name: "隐藏 消息"
    },
    {
      type: "switch",
      id: "common-hide-nav-message-red-num",
      name: "隐藏 消息小红点"
    },
    {
      type: "switch",
      id: "common-hide-nav-dynamic",
      name: "隐藏 动态"
    },
    {
      type: "switch",
      id: "common-hide-nav-dynamic-red-num",
      name: "隐藏 动态小红点"
    },
    {
      type: "switch",
      id: "common-hide-nav-favorite",
      name: "隐藏 收藏"
    },
    {
      type: "switch",
      id: "common-nav-favorite-select-watchlater",
      name: "收藏弹出框 自动选中稍后再看",
      noStyle: true,
      enableFn: async () => {
        if (!CSS.supports("selector(:has(*))")) {
          return;
        }
        let cnt = 0;
        const id = setInterval(() => {
          const ele = document.querySelector(
            `.right-entry .v-popover-wrap:has(.right-entry__outside[href$="/favlist"]),
                        .nav-user-center .user-con .item:has(.mini-favorite)`
          );
          if (ele) {
            clearInterval(id);
            ele.addEventListener("mouseenter", () => {
              let innerCnt = 0;
              const watchLaterId = setInterval(() => {
                const watchlater = document.querySelector(
                  `:is(.favorite-panel-popover, .vp-container .tabs-panel) .tab-item:nth-child(2)`
                );
                if (watchlater) {
                  watchlater.click();
                  clearInterval(watchLaterId);
                } else {
                  innerCnt++;
                  innerCnt > 250 && clearInterval(watchLaterId);
                }
              }, 20);
            });
          } else {
            cnt++;
            cnt > 100 && clearInterval(id);
          }
        }, 200);
      },
      enableFnRunAt: "document-end"
    },
    {
      type: "switch",
      id: "common-hide-nav-history",
      name: "隐藏 历史"
    },
    {
      type: "switch",
      id: "common-hide-nav-member",
      name: "隐藏 创作中心"
    },
    {
      type: "switch",
      id: "common-hide-nav-upload",
      name: "隐藏 投稿"
    }
  ];
  const commonHeaderWidthItems = [
    {
      type: "number",
      id: "common-header-bar-padding-left",
      name: "左边界距离(-1禁用)",
      minValue: -1,
      maxValue: 2e3,
      step: 1,
      defaultValue: -1,
      disableValue: -1,
      addonText: "px",
      fn: (value) => {
        document.documentElement.style.setProperty("--common-header-bar-padding-left", `${value}px`);
      }
    },
    {
      type: "number",
      id: "common-header-bar-search-width",
      name: "搜索框宽度(-1禁用)",
      minValue: -1,
      maxValue: 2e3,
      step: 1,
      defaultValue: -1,
      disableValue: -1,
      addonText: "px",
      fn: (value) => {
        document.documentElement.style.setProperty("--common-header-bar-search-width", `${value}px`);
      }
    },
    {
      type: "number",
      id: "common-header-bar-padding-right",
      name: "右边界距离(-1禁用)",
      minValue: -1,
      maxValue: 2e3,
      step: 1,
      defaultValue: -1,
      disableValue: -1,
      addonText: "px",
      fn: (value) => {
        document.documentElement.style.setProperty("--common-header-bar-padding-right", `${value}px`);
      }
    }
  ];
  const commonGroups = [
    {
      name: "全站通用 - 基本功能",
      fold: true,
      items: commonBasicItems
    },
    {
      name: "全站通用 - 顶栏 左侧",
      fold: true,
      items: commonHeaderLeftItems
    },
    {
      name: "全站通用 - 顶栏 搜索框",
      fold: true,
      items: commonHeaderCenterItems
    },
    {
      name: "全站通用 - 顶栏 右侧",
      fold: true,
      items: commonHeaderRightItems
    },
    {
      name: "全站通用 - 顶栏 数值设定",
      fold: true,
      items: commonHeaderWidthItems
    }
  ];
  const debugBasicItems = [
    {
      type: "switch",
      id: "debug-rules",
      name: "Debug Rules"
    },
    {
      type: "switch",
      id: "debug-filters",
      name: "Debug Filters",
      description: ["严重影响过滤性能"]
    }
  ];
  const debugGroups = [
    {
      name: "日志输出",
      fold: true,
      items: debugBasicItems
    }
  ];
  const dynamicBasicItems = [
    {
      type: "switch",
      id: "hide-dynamic-page-fixed-header",
      name: "顶栏 不再吸附顶部"
    },
    {
      type: "switch",
      id: "exchange-dynamic-page-left-right-aside",
      name: "交换 左栏与右栏位置"
    }
  ];
  const dynamicCenterDynItems = [
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-avatar-pendent",
      name: "隐藏 头像框"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-avatar-icon",
      name: "隐藏 头像徽章"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-ornament",
      name: "隐藏 动态右侧饰品"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-dispute",
      name: "隐藏 警告notice",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-watchlater",
      name: "隐藏 稍后再看按钮"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-official-topic",
      name: "隐藏 官方话题Tag"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-text-topic",
      name: "禁用 普通话题#Tag#高亮"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-item-interaction",
      name: "隐藏 动态精选互动 XXX赞了/XXX回复"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-card-reserve",
      name: "隐藏 视频预约/直播预约动态"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-card-goods",
      name: "隐藏 带货动态"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-lottery",
      name: "隐藏 抽奖动态 (含转发)"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-forward",
      name: "隐藏 转发的动态"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-vote",
      name: "隐藏 投票动态"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-live",
      name: "隐藏 直播通知动态"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-blocked",
      name: "隐藏 被block的充电动态"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-charge-video",
      name: "隐藏 全部充电视频 (含已充电)"
    },
    {
      type: "switch",
      id: "dynamic-page-unfold-dynamic",
      name: "自动展开 相同UP主被折叠的动态",
      noStyle: true,
      enableFn: async () => {
        const unfold = () => {
          const dynFoldNodes = document.querySelectorAll("main .bili-dyn-list__item .bili-dyn-item-fold");
          if (dynFoldNodes.length) {
            dynFoldNodes.forEach((e2) => {
              e2 instanceof HTMLDivElement && e2.click();
            });
          }
        };
        setInterval(unfold, 500);
      }
    }
  ];
  const dynamicCenterTopItems = [
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-publishing",
      name: "隐藏 动态发布框",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "dynamic-page-up-list-dual-line-mode",
      name: "双行显示 UP 主列表"
    },
    {
      type: "switch",
      id: "dynamic-page-up-list-checked-item-opacity",
      name: "淡化 UP 主列表 已查看项"
    },
    {
      type: "switch",
      id: "dynamic-page-up-list-checked-item-hide",
      name: "隐藏 UP 主列表 已查看项"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-list-tabs",
      name: "隐藏 动态分类Tab bar"
    }
  ];
  const dynamicLayoutItems = [
    {
      type: "number",
      id: "dynamic-list-width",
      name: "动态列表 中栏宽度 (0禁用)",
      minValue: 0,
      maxValue: 100,
      step: 1,
      defaultValue: 0,
      disableValue: 0,
      addonText: "vw",
      fn: (value) => {
        document.documentElement.style.setProperty("--dynamic-list-width", value + "vw");
      }
    },
    {
      type: "number",
      id: "dynamic-detail-width",
      name: "动态详情 中栏宽度 (0禁用)",
      minValue: 0,
      maxValue: 100,
      step: 1,
      defaultValue: 0,
      disableValue: 0,
      addonText: "vw",
      fn: (value) => {
        document.documentElement.style.setProperty("--dynamic-detail-width", value + "vw");
      }
    }
  ];
  const dynamicLeftItems = [
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-my-info",
      name: "隐藏 个人信息框"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-live-users__item__living",
      name: "隐藏 直播中Logo"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-aside-left",
      name: "隐藏 整个左栏"
    }
  ];
  const dynamicRightItems = [
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-banner",
      name: "隐藏 社区中心",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-ads",
      name: "隐藏 广告",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-topic-box",
      name: "隐藏 话题列表"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-aside-right",
      name: "隐藏 整个右栏"
    }
  ];
  const dynamicSidebar = [
    {
      type: "switch",
      id: "hide-dynamic-page-sidebar-old-version",
      name: "隐藏 回到旧版",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "hide-dynamic-page-sidebar-back-to-top",
      name: "隐藏 回顶部"
    }
  ];
  const dynamicGroups = [
    {
      name: "基本功能",
      fold: true,
      items: dynamicBasicItems
    },
    {
      name: "左栏 个人信息/正在直播",
      fold: true,
      items: dynamicLeftItems
    },
    {
      name: "右栏 热门话题",
      fold: true,
      items: dynamicRightItems
    },
    {
      name: "中栏 顶部功能",
      fold: true,
      items: dynamicCenterTopItems
    },
    {
      name: "中栏 动态列表",
      fold: true,
      items: dynamicCenterDynItems
    },
    {
      name: "动态宽度调节",
      fold: true,
      items: dynamicLayoutItems
    },
    {
      name: "页面右下角 小按钮",
      fold: true,
      items: dynamicSidebar
    }
  ];
  const homepageBasicItems = [
    {
      type: "switch",
      id: "homepage-hide-banner",
      name: "隐藏 横幅banner",
      description: ["同步生效:首页、分区页、热门页"]
    },
    {
      type: "switch",
      id: "homepage-hide-recommend-swipe",
      name: "隐藏 大图活动轮播",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "homepage-hide-subarea",
      name: "隐藏 整个分区栏"
    },
    {
      type: "switch",
      id: "homepage-hide-sticky-header",
      name: "隐藏 滚动页面时 顶部吸附顶栏"
    },
    {
      type: "switch",
      id: "homepage-hide-sticky-subarea",
      name: "隐藏 滚动页面时 顶部吸附分区栏",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "homepage-hide-adblock-tips",
      name: "隐藏 顶部adblock提示",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "homepage-revert-channel-dynamic-icon",
      name: "恢复 原始动态按钮"
    }
  ];
  const homepageLayoutItems = [
    {
      type: "list",
      id: "homepage-layout",
      name: "修改 视频列表列数",
      description: ["未启用时,B 站自动判断列数"],
      defaultValue: "homepage-layout-disable",
      disableValue: "homepage-layout-disable",
      options: [
        {
          id: "homepage-layout-disable",
          name: "未启用"
        },
        {
          id: "homepage-layout-4-column",
          name: "4 列布局"
        },
        {
          id: "homepage-layout-5-column",
          name: "5 列布局"
        },
        {
          id: "homepage-layout-6-column",
          name: "6 列布局"
        }
      ]
    },
    {
      type: "number",
      id: "homepage-layout-padding",
      name: "修改 页面两侧边距 (-1禁用)",
      minValue: -1,
      maxValue: 500,
      step: 1,
      defaultValue: -1,
      disableValue: -1,
      addonText: "px",
      fn: (value) => {
        document.documentElement.style.setProperty("--homepage-layout-padding", `${value}px`);
      }
    }
  ];
  const homepagePluginItems = [
    {
      type: "switch",
      id: "homepage-hide-up-info-icon-bilibili-app-recommend",
      name: "隐藏 视频tag"
    },
    {
      type: "switch",
      id: "homepage-hide-danmaku-count-bilibili-app-recommend",
      name: "隐藏 弹幕数"
    },
    {
      type: "switch",
      id: "homepage-hide-agree-count-bilibili-app-recommend",
      name: "隐藏 点赞数"
    }
  ];
  const homepageRcmdItems = [
    {
      type: "switch",
      id: "homepage-increase-rcmd-list-font-size",
      name: "增大 视频信息字号"
    },
    {
      type: "switch",
      id: "homepage-move-no-interest",
      name: "移动 负反馈按钮 恢复标题宽度",
      description: ["负反馈报文可能被其他插件阻断而失效", "可 F12 检查负反馈时有无报错"]
    },
    {
      type: "switch",
      id: "homepage-hide-no-interest",
      name: "隐藏 负反馈按钮 恢复标题宽度"
    },
    {
      type: "switch",
      id: "homepage-hide-up-info-icon",
      name: "隐藏 视频tag (已关注/1万点赞)"
    },
    {
      type: "switch",
      id: "homepage-hide-video-info-date",
      name: "隐藏 发布时间"
    },
    {
      type: "switch",
      id: "homepage-hide-danmaku-count",
      name: "隐藏 弹幕数",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "homepage-hide-bili-watch-later-tip",
      name: "隐藏 稍后再看提示语"
    },
    {
      type: "switch",
      id: "homepage-hide-bili-watch-later",
      name: "隐藏 稍后再看按钮"
    },
    {
      type: "switch",
      id: "homepage-hide-inline-player-danmaku",
      name: "隐藏 视频预览中的弹幕"
    },
    {
      type: "switch",
      id: "homepage-hide-ad-card",
      name: "隐藏 广告",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "homepage-hide-live-card-recommend",
      name: "隐藏 直播间推荐",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "homepage-simple-sub-area-card-recommend",
      name: "简化 分区视频推荐",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "homepage-hide-sub-area-card-recommend",
      name: "隐藏 分区视频推荐"
    },
    {
      type: "switch",
      id: "homepage-hide-skeleton-animation",
      name: "关闭 视频载入 骨架动效"
    },
    {
      type: "switch",
      id: "homepage-hide-skeleton-before-anchor",
      name: "隐藏 加载锚点之前的骨架",
      defaultEnable: true,
      description: ["推荐,会让视频列表加载更早一些"]
    },
    {
      type: "switch",
      id: "homepage-hide-skeleton",
      name: "隐藏 全部加载骨架"
    },
    {
      type: "switch",
      id: "homepage-increase-rcmd-load-size",
      name: "增大 视频载入 视频数量 (实验功能)",
      enableFn: () => {
        fetchHook.addPreFn((input, init) => {
          var _a;
          if (typeof input === "string" && input.includes("api.bilibili.com") && input.includes("feed/rcmd") && ((_a = init == null ? void 0 : init.method) == null ? void 0 : _a.toUpperCase()) === "GET") {
            input = input.replace("&ps=12&", "&ps=24&");
          }
          return input;
        });
      }
    },
    {
      type: "switch",
      id: "homepage-rcmd-video-preload",
      name: "启用 视频列表预加载 (不稳定功能)",
      description: ["会默认隐藏分区视频", '建议开启 "增大视频载入数量"', "若影响视频载入或造成卡顿,请关闭本功能"],
      enableFn: async () => {
        let cnt = 0;
        const id = setInterval(() => {
          const anchor = document.querySelector(".load-more-anchor");
          if (anchor) {
            clearInterval(id);
            let lastScrollTop = 0;
            let isPreload = false;
            window.addEventListener("scroll", function() {
              const scrollTop = window.scrollY || document.documentElement.scrollTop;
              if (scrollTop > lastScrollTop) {
                const gap = innerHeight - anchor.getBoundingClientRect().top;
                if (gap > -innerHeight * 0.75 && !isPreload) {
                  anchor.classList.add("preload");
                  isPreload = true;
                } else {
                  isPreload && anchor.classList.remove("preload");
                  isPreload = false;
                }
              } else {
                isPreload && anchor.classList.remove("preload");
                isPreload = false;
              }
              lastScrollTop = scrollTop;
            });
          }
          if (++cnt > 80) {
            clearInterval(id);
          }
        }, 250);
      },
      enableFnRunAt: "document-end"
    }
  ];
  const homepageSidebarItems = [
    {
      type: "switch",
      id: "homepage-hide-desktop-download-tip",
      name: "隐藏 下载桌面端弹窗",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "homepage-hide-trial-feed-wrap",
      name: "隐藏 下滑浏览推荐提示",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "homepage-hide-feed-roll-btn",
      name: "隐藏 换一换"
    },
    {
      type: "switch",
      id: "homepage-hide-watchlater-pip-button",
      name: "隐藏 稍后再看"
    },
    {
      type: "switch",
      id: "homepage-hide-adcard-button",
      defaultEnable: true,
      name: "隐藏 广告"
    },
    {
      type: "switch",
      id: "homepage-hide-flexible-roll-btn-text",
      name: "隐藏 刷新按钮 文字提示"
    },
    {
      type: "switch",
      id: "homepage-hide-flexible-roll-btn",
      name: "隐藏 刷新按钮"
    },
    {
      type: "switch",
      id: "homepage-hide-feedback",
      name: "隐藏 客服和反馈",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "homepage-hide-top-btn",
      name: "隐藏 回顶部"
    }
  ];
  const homepageGroups = [
    {
      name: "基本功能",
      items: homepageBasicItems
    },
    {
      name: "页面布局",
      items: homepageLayoutItems
    },
    {
      name: "视频列表",
      items: homepageRcmdItems
    },
    {
      name: "页面侧栏 小组件",
      items: homepageSidebarItems
    },
    {
      name: "适配插件 bilibili-app-recommend",
      fold: true,
      items: homepagePluginItems
    }
  ];
  const liveBasicItems = [
    {
      type: "switch",
      id: "live-page-sidebar-vm",
      name: "隐藏 页面右侧按钮 实验室/关注",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "live-page-default-skin",
      name: "禁用 播放器皮肤"
    },
    {
      type: "switch",
      id: "live-page-remove-wallpaper",
      name: "禁用 直播背景"
    },
    {
      type: "switch",
      id: "activity-live-auto-jump",
      name: "活动直播页 自动跳转普通直播 (实验功能)",
      noStyle: true,
      enableFn: async () => {
        let cnt = 0;
        const id = setInterval(() => {
          if (document.querySelector(".rendererRoot, #main.live-activity-full-main, #internationalHeader")) {
            if (!location.href.includes("/blanc/")) {
              window.location.href = location.href.replace("live.bilibili.com/", "live.bilibili.com/blanc/");
              clearInterval(id);
            }
          }
          cnt++;
          cnt > 50 && clearInterval(id);
        }, 200);
      },
      enableFnRunAt: "document-end"
    },
    {
      type: "switch",
      id: "auto-best-quality",
      name: "自动切换最高画质 (不稳定功能)",
      noStyle: true,
      enableFn: async () => {
        const qualityFn = () => {
          var _a;
          const player = ((_a = _unsafeWindow.EmbedPlayer) == null ? void 0 : _a.instance) || _unsafeWindow.livePlayer;
          if (player) {
            try {
              const info = player == null ? void 0 : player.getPlayerInfo();
              const arr = player == null ? void 0 : player.getPlayerInfo().qualityCandidates;
              if (info && arr && arr.length) {
                let maxQn = 0;
                arr.forEach((v2) => {
                  if (v2.qn && parseInt(v2.qn) > maxQn) {
                    maxQn = parseInt(v2.qn);
                  }
                });
                if (maxQn && info.quality && maxQn > parseInt(info.quality)) {
                  player.switchQuality(`${maxQn}`);
                }
              }
            } catch (err) {
              error("auto-best-quality error", err);
            }
          }
        };
        setTimeout(qualityFn, 2e3);
        setTimeout(qualityFn, 4e3);
        setTimeout(qualityFn, 6e3);
        setTimeout(qualityFn, 8e3);
      },
      enableFnRunAt: "document-end"
    }
  ];
  const liveBelowItems = [
    {
      type: "switch",
      id: "live-page-flip-view",
      name: "隐藏 活动海报",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "live-page-room-info-ctnr",
      name: "隐藏 直播间推荐/直播间介绍"
    },
    {
      type: "switch",
      id: "live-page-room-feed",
      name: "隐藏 主播动态"
    },
    {
      type: "switch",
      id: "live-page-announcement-cntr",
      name: "隐藏 主播公告"
    },
    {
      type: "switch",
      id: "live-page-sections-vm",
      name: "隐藏 直播下方全部内容"
    }
  ];
  const liveHeaderCenterItems = [
    {
      type: "switch",
      id: "live-page-nav-search-rcmd",
      name: "隐藏 推荐搜索"
    },
    {
      type: "switch",
      id: "live-page-nav-search-history",
      name: "隐藏 搜索历史"
    },
    {
      type: "switch",
      id: "live-page-nav-search-trending",
      name: "隐藏 bilibili热搜"
    },
    {
      type: "switch",
      id: "live-page-header-search-block",
      name: "隐藏 搜索框"
    }
  ];
  const liveHeaderLeftItems = [
    {
      type: "switch",
      id: "live-page-header-entry-logo",
      name: "隐藏 直播LOGO"
    },
    {
      type: "switch",
      id: "live-page-header-entry-title",
      name: "隐藏 首页"
    },
    {
      type: "switch",
      id: "live-page-header-live",
      name: "隐藏 直播"
    },
    {
      type: "switch",
      id: "live-page-header-net-game",
      name: "隐藏 网游"
    },
    {
      type: "switch",
      id: "live-page-header-mobile-game",
      name: "隐藏 手游"
    },
    {
      type: "switch",
      id: "live-page-header-standalone-game",
      name: "隐藏 单机游戏"
    },
    {
      type: "switch",
      id: "live-page-header-standalone-vtuber",
      name: "隐藏 虚拟主播"
    },
    {
      type: "switch",
      id: "live-page-header-standalone-entertainment",
      name: "隐藏 娱乐"
    },
    {
      type: "switch",
      id: "live-page-header-standalone-radio",
      name: "隐藏 电台"
    },
    {
      type: "switch",
      id: "live-page-header-standalone-match",
      name: "隐藏 赛事"
    },
    {
      type: "switch",
      id: "live-page-header-standalone-chatroom",
      name: "隐藏 聊天室"
    },
    {
      type: "switch",
      id: "live-page-header-standalone-living",
      name: "隐藏 生活"
    },
    {
      type: "switch",
      id: "live-page-header-standalone-knowledge",
      name: "隐藏 知识"
    },
    {
      type: "switch",
      id: "live-page-header-standalone-helpmeplay",
      name: "隐藏 帮我玩"
    },
    {
      type: "switch",
      id: "live-page-header-standalone-interact",
      name: "隐藏 互动玩法"
    },
    {
      type: "switch",
      id: "live-page-header-standalone-shopping",
      name: "隐藏 购物"
    },
    {
      type: "switch",
      id: "live-page-header-showmore-link",
      name: "隐藏 更多",
      defaultEnable: true
    }
  ];
  const liveHeaderRightItems = [
    {
      type: "switch",
      id: "live-page-header-avatar",
      name: "隐藏 头像"
    },
    {
      type: "switch",
      id: "live-page-header-follow-panel",
      name: "隐藏 关注"
    },
    {
      type: "switch",
      id: "live-page-header-recharge",
      name: "隐藏 购买电池"
    },
    {
      type: "switch",
      id: "live-page-header-bili-download-panel",
      name: "隐藏 下载客户端",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "live-page-header-go-live",
      name: "隐藏 我要开播",
      defaultEnable: true
    }
  ];
  const liveInfoItems = [
    {
      type: "switch",
      id: "live-page-head-info-avatar-pendant",
      name: "隐藏 头像饰品"
    },
    {
      type: "switch",
      id: "live-page-head-info-vm-upper-row-follow-ctnr",
      name: "隐藏 粉丝团"
    },
    {
      type: "switch",
      id: "live-page-head-info-vm-upper-row-visited",
      name: "隐藏 xx人看过"
    },
    {
      type: "switch",
      id: "live-page-head-info-vm-upper-row-popular",
      name: "隐藏 人气"
    },
    {
      type: "switch",
      id: "live-page-head-info-vm-upper-row-like",
      name: "隐藏 点赞"
    },
    {
      type: "switch",
      id: "live-page-head-info-vm-upper-row-report",
      name: "隐藏 举报",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "live-page-head-info-vm-upper-row-share",
      name: "隐藏 分享",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "live-page-head-info-vm-lower-row-hot-rank",
      name: "隐藏 人气榜",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "live-page-head-info-vm-lower-row-gift-planet-entry",
      name: "隐藏 礼物"
    },
    {
      type: "switch",
      id: "live-page-head-info-vm-lower-row-activity-gather-entry",
      name: "隐藏 活动",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "live-page-head-info-vm",
      name: "隐藏 整个信息栏"
    }
  ];
  const livePlayerItems = [
    {
      type: "switch",
      id: "live-page-head-web-player-icon-feedback",
      name: "隐藏 反馈按钮",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "live-page-head-web-player-shop-popover-vm",
      name: "隐藏 购物小橙车提示",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "live-page-head-web-player-awesome-pk-vm",
      name: "隐藏 直播PK特效"
    },
    {
      type: "switch",
      id: "live-page-web-player-watermark",
      name: "隐藏 直播水印",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "live-page-head-web-player-announcement-wrapper",
      name: "隐藏 滚动礼物通告"
    },
    {
      type: "switch",
      id: "live-page-head-web-player-game-id",
      name: "隐藏 幻星互动游戏",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "live-page-head-web-player-research-container",
      name: "隐藏 直播卡顿打分",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "live-page-head-web-player-live-lottery",
      name: "隐藏 天选时刻"
    },
    {
      type: "switch",
      id: "live-page-combo-danmaku",
      name: "隐藏 播放器顶部变动计数弹幕"
    },
    {
      type: "switch",
      id: "live-page-clean-all-danmaku-small-emoji",
      name: "隐藏 弹幕中的小表情"
    },
    {
      type: "switch",
      id: "live-page-clean-all-danmaku-big-emoji",
      name: "隐藏 弹幕中的大表情"
    },
    {
      type: "switch",
      id: "live-page-gift-control-vm",
      name: "隐藏 礼物栏"
    },
    {
      type: "switch",
      id: "live-page-fullscreen-danmaku-vm",
      name: "全屏下 隐藏弹幕发送框"
    }
  ];
  const liveRightItems = [
    {
      type: "switch",
      id: "live-page-rank-list-vm-fold",
      name: "折叠 排行榜/大航海",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "live-page-rank-list-vm",
      name: "隐藏 排行榜/大航海"
    },
    {
      type: "switch",
      id: "live-page-compact-danmaku",
      name: "使弹幕列表紧凑",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "live-page-convention-msg",
      name: "隐藏 系统提示",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "live-page-rank-icon",
      name: "隐藏 用户排名"
    },
    {
      type: "switch",
      id: "live-page-title-label",
      name: "隐藏 头衔装扮"
    },
    {
      type: "switch",
      id: "live-page-wealth-medal-ctnr",
      name: "隐藏 用户等级",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "live-page-group-medal-ctnr",
      name: "隐藏 团体勋章"
    },
    {
      type: "switch",
      id: "live-page-fans-medal-item-ctnr",
      name: "隐藏 粉丝牌"
    },
    {
      type: "switch",
      id: "live-page-chat-item-background-color",
      name: "隐藏 弹幕高亮底色"
    },
    {
      type: "switch",
      id: "live-page-gift-item",
      name: "隐藏 礼物弹幕"
    },
    {
      type: "switch",
      id: "live-page-chat-item-top3-notice",
      name: "隐藏 高能用户提示"
    },
    {
      type: "switch",
      id: "live-page-brush-prompt",
      name: "隐藏 底部滚动提示",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "live-page-combo-card-countdown",
      name: "隐藏 互动框 (倒计时互动)",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "live-page-combo-card",
      name: "隐藏 互动框 (他们都在说)",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "live-page-service-card-container",
      name: "隐藏 互动框 (找TA玩)",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "live-page-vote-card",
      name: "隐藏 互动框 投票",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "live-page-control-panel-icon-row",
      name: "隐藏 发送框 功能按钮"
    },
    {
      type: "switch",
      id: "live-page-chat-input-ctnr-medal-section",
      name: "隐藏 发送框 粉丝勋章"
    },
    {
      type: "switch",
      id: "live-page-chat-input-ctnr-send-btn",
      name: "隐藏 发送框 发送按钮 (回车发送)"
    },
    {
      type: "switch",
      id: "live-page-chat-input-ctnr",
      name: "隐藏 发送框"
    },
    {
      type: "switch",
      id: "live-page-chat-control-panel",
      name: "隐藏 弹幕栏底部全部功能"
    }
  ];
  const liveGroups = [
    {
      name: "基本功能",
      fold: true,
      items: liveBasicItems
    },
    {
      name: "直播信息栏",
      fold: true,
      items: liveInfoItems
    },
    {
      name: "播放器",
      fold: true,
      items: livePlayerItems
    },
    {
      name: "右栏 弹幕列表",
      fold: true,
      items: liveRightItems
    },
    {
      name: "下方页面 主播动态/直播公告",
      fold: true,
      items: liveBelowItems
    },
    {
      name: "顶栏 左侧",
      fold: true,
      items: liveHeaderLeftItems
    },
    {
      name: "顶栏 搜索框",
      fold: true,
      items: liveHeaderCenterItems
    },
    {
      name: "顶栏 右侧",
      fold: true,
      items: liveHeaderRightItems
    }
  ];
  const popularBasicItems = [
    {
      type: "switch",
      id: "homepage-hide-banner",
      name: "隐藏 横幅banner",
      description: ["同步生效:首页、分区页、热门页"]
    },
    {
      type: "switch",
      id: "homepage-hide-sticky-header",
      name: "隐藏 滚动页面时 顶部吸附顶栏"
    },
    {
      type: "switch",
      id: "popular-hide-tips",
      name: "隐藏 tips",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "popular-hide-watchlater",
      name: "隐藏 稍后再看按钮"
    },
    {
      type: "switch",
      id: "popular-hide-danmaku-count",
      name: "隐藏 弹幕数"
    }
  ];
  const popularLayoutItems = [
    {
      type: "list",
      id: "popular-layout",
      name: "强制修改视频列数",
      defaultValue: "popular-layout-2-column",
      disableValue: "popular-layout-disable",
      description: [
        "默认隐藏视频简介、标签",
        "对 综合热门/每周必看/入站必刷/排行榜 生效",
        '使用 5 列或 6 列布局时,建议开启 "隐藏 弹幕数"'
      ],
      options: [
        {
          id: "popular-layout-2-column",
          name: "未启用"
        },
        {
          id: "popular-layout-4-column",
          name: "4 列布局"
        },
        {
          id: "popular-layout-5-column",
          name: "5 列布局"
        },
        {
          id: "popular-layout-6-column",
          name: "6 列布局"
        }
      ]
    }
  ];
  const popularOtherItems = [
    {
      type: "switch",
      id: "popular-hot-hide-tag",
      name: "隐藏 综合热门 视频tag"
    },
    {
      type: "switch",
      id: "popular-weekly-hide-hint",
      name: "隐藏 每周必看 一句话简介"
    },
    {
      type: "switch",
      id: "popular-history-hide-hint",
      name: "隐藏 入站必刷 一句话简介"
    }
  ];
  const popularGroups = [
    {
      name: "基本功能",
      items: popularBasicItems
    },
    {
      name: "页面强制布局",
      items: popularLayoutItems
    },
    {
      name: "其他功能",
      items: popularOtherItems,
      fold: true
    }
  ];
  const searchBasicItems = [
    {
      type: "switch",
      id: "hide-search-page-search-sticky-header",
      name: "顶栏 滚动页面后 不再吸附顶部"
    },
    {
      type: "switch",
      id: "hide-search-page-ad",
      name: "隐藏 搜索结果中的广告",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "hide-search-page-bangumi-pgc-list",
      name: "隐藏 搜索结果顶部 版权作品"
    },
    {
      type: "switch",
      id: "hide-search-page-activity-game-list",
      name: "隐藏 搜索结果顶部 游戏、热搜话题"
    },
    {
      type: "switch",
      id: "hide-search-page-live-room-result",
      name: "隐藏 搜索结果中的直播"
    },
    {
      type: "switch",
      id: "hide-search-page-danmaku-count",
      name: "隐藏 弹幕数量",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "hide-search-page-date",
      name: "隐藏 视频日期"
    },
    {
      type: "switch",
      id: "hide-search-page-bili-watch-later",
      name: "隐藏 稍后再看按钮"
    }
  ];
  const searchSidebarItems = [
    {
      type: "switch",
      id: "hide-search-page-customer-service",
      name: "隐藏 客服",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "hide-search-page-btn-to-top",
      name: "隐藏 回顶部"
    }
  ];
  const searchGroups = [
    {
      name: "基本功能",
      items: searchBasicItems
    },
    {
      name: "页面右下角 小按钮",
      items: searchSidebarItems
    }
  ];
  const spaceBasicItems = [
    {
      type: "switch",
      id: "space-page-redirect-to-video",
      name: "打开用户主页 自动跳转到投稿",
      noStyle: true,
      enableFn: () => {
        var _a;
        if (/\/\d+\/?($|\?)/.test(location.pathname)) {
          const userid = (_a = location.pathname.match(/\d+/)) == null ? void 0 : _a[0];
          if (userid) {
            location.href = `https://space.bilibili.com/${userid}/video`;
          }
        }
      }
    }
  ];
  const spaceDynamicItems = [
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-avatar-pendent",
      name: "隐藏 头像框"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-avatar-icon",
      name: "隐藏 头像徽章"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-ornament",
      name: "隐藏 动态右侧饰品"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-dispute",
      name: "隐藏 警告notice"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-watchlater",
      name: "隐藏 稍后再看按钮"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-official-topic",
      name: "隐藏 官方话题Tag"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-text-topic",
      name: "禁用 普通话题#Tag#高亮"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-item-interaction",
      name: "隐藏 动态精选互动 XXX赞了/XXX回复"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-card-reserve",
      name: "隐藏 视频预约/直播预约动态"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-card-goods",
      name: "隐藏 带货动态"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-lottery",
      name: "隐藏 抽奖动态(含转发)"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-forward",
      name: "隐藏 转发的动态"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-vote",
      name: "隐藏 投票动态"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-live",
      name: "隐藏 直播通知动态"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-blocked",
      name: "隐藏 被block的充电动态"
    },
    {
      type: "switch",
      id: "hide-dynamic-page-bili-dyn-charge-video",
      name: "隐藏 全部充电视频(含已充电)"
    }
  ];
  const spaceGroups = [
    {
      name: "基本功能",
      items: spaceBasicItems
    },
    {
      name: "动态列表",
      items: spaceDynamicItems
    }
  ];
  const videoBasicItems = [
    {
      type: "switch",
      id: "video-page-bv2av",
      name: "BV号转AV号",
      noStyle: true,
      enableFn: async () => {
        const bv2av = (url) => {
          const XOR_CODE = 23442827791579n;
          const MASK_CODE = 2251799813685247n;
          const BASE = 58n;
          const data = "FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf";
          const dec = (bvid) => {
            const bvidArr = Array.from(bvid);
            [bvidArr[3], bvidArr[9]] = [bvidArr[9], bvidArr[3]];
            [bvidArr[4], bvidArr[7]] = [bvidArr[7], bvidArr[4]];
            bvidArr.splice(0, 3);
            const tmp = bvidArr.reduce((pre, bvidChar) => pre * BASE + BigInt(data.indexOf(bvidChar)), 0n);
            return Number(tmp & MASK_CODE ^ XOR_CODE);
          };
          try {
            if (url.includes("bilibili.com/video/BV")) {
              const bvid = matchBvid(url);
              if (bvid) {
                const urlObj = new URL(url);
                const params = new URLSearchParams(urlObj.search);
                let partNum = "";
                if (params.has("p")) {
                  partNum += `?p=${params.get("p")}`;
                }
                const aid = dec(bvid);
                if (partNum || urlObj.hash) {
                  return `https://www.bilibili.com/video/av${aid}/${partNum}${urlObj.hash}`;
                }
                return `https://www.bilibili.com/video/av${aid}`;
              }
            }
            return url;
          } catch (err) {
            return url;
          }
        };
        URLCleanerInstance.cleanFnArr.push(bv2av);
        URLCleanerInstance.clean();
      }
    },
    {
      type: "switch",
      id: "video-page-simple-share",
      name: "净化分享功能",
      description: ["点击分享按钮时,复制纯净链接"],
      // 净化分享按钮写入剪贴板内容
      enableFn: async () => {
        let counter = 0;
        const id = setInterval(() => {
          counter++;
          const shareBtn = document.getElementById("share-btn-outer");
          if (shareBtn) {
            shareBtn.addEventListener("click", () => {
              var _a;
              let title = (_a = document.querySelector(
                ".video-info-title .video-title, #viewbox_report > h1, .video-title-href"
              )) == null ? void 0 : _a.textContent;
              if (title && !title.match(/^[(【[《「<{〔〖〈『].*|.*[)】]》」>}〕〗〉』]$/)) {
                title = `【${title}】`;
              }
              const avbv = matchAvidBvid(location.href);
              let shareText = title ? `${title} 
https://www.bilibili.com/video/${avbv}` : `https://www.bilibili.com/video/${avbv}`;
              const urlObj = new URL(location.href);
              const params = new URLSearchParams(urlObj.search);
              if (params.has("p")) {
                shareText += `?p=${params.get("p")}`;
              }
              navigator.clipboard.writeText(shareText).then().catch();
            });
            clearInterval(id);
          } else if (counter > 50) {
            clearInterval(id);
          }
        }, 200);
      },
      enableFnRunAt: "document-end"
    },
    {
      type: "switch",
      id: "video-page-hide-fixed-header",
      name: "顶栏 滚动页面后 不再吸附顶部"
    }
  ];
  const videoDanmakuItems = [
    {
      type: "string",
      id: "video-page-danmaku-font-family",
      name: "弹幕字体",
      description: ["遵循 CSS font-family 语法,留空为禁用", "确保本地已安装该字体,检查家族名是否正确"],
      defaultValue: "PingFang SC,HarmonyOS_Regular,Helvetica Neue,Microsoft YaHei,sans-serif",
      disableValue: "",
      fn: (value) => {
        document.documentElement.style.setProperty(
          "--video-page-danmaku-font-family",
          value.trim().replace(/;$/, "")
        );
      }
    },
    {
      type: "string",
      id: "video-page-danmaku-font-weight",
      name: "弹幕字重",
      description: ["遵循 CSS font-weight 语法,留空为禁用", "确保本地字体支持该字重"],
      defaultValue: "",
      disableValue: "",
      fn: (value) => {
        document.documentElement.style.setProperty(
          "--video-page-danmaku-font-weight",
          value.trim().replace(/;$/, "")
        );
      }
    }
  ];
  const videoDanmakuControlItems = [
    {
      type: "switch",
      id: "video-page-hide-bpx-player-video-info-online",
      name: "隐藏 同时在看人数"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-video-info-dm",
      name: "隐藏 装填弹幕数量"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-dm-switch",
      name: "隐藏 弹幕开关"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-dm-setting",
      name: "隐藏 弹幕显示设置"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-video-btn-dm",
      name: "隐藏 弹幕样式"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-dm-input",
      name: "隐藏 占位文字",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-dm-hint",
      name: "隐藏 弹幕礼仪",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-dm-btn-send",
      name: "隐藏 发送按钮"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-postpanel",
      name: "隐藏 智能弹幕/广告弹幕"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-sending-area",
      name: "非全屏下 关闭弹幕栏",
      description: ["字母 D 是弹幕开关快捷键"]
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-video-inputbar",
      name: "全屏下 关闭弹幕输入框"
    }
  ];
  const videoInfoItems = [
    {
      type: "switch",
      id: "video-page-unfold-video-info-title",
      name: "展开 多行视频标题"
    },
    {
      type: "switch",
      id: "video-page-hide-video-info-danmaku-count",
      name: "隐藏 弹幕数"
    },
    {
      type: "switch",
      id: "video-page-hide-video-info-pubdate",
      name: "隐藏 发布日期"
    },
    {
      type: "switch",
      id: "video-page-hide-video-info-copyright",
      name: "隐藏 版权声明"
    },
    {
      type: "switch",
      id: "video-page-hide-video-info-honor",
      name: "隐藏 视频荣誉 (排行榜/每周必看)"
    },
    {
      type: "switch",
      id: "video-page-hide-video-info-argue",
      name: "隐藏 温馨提示 (饮酒/危险/AI生成)",
      defaultEnable: true
    }
  ];
  const videoMiniPlayerItems = [
    {
      type: "switch",
      id: "video-page-hide-bpx-player-mini-mode-process",
      name: "隐藏底边进度",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-mini-mode-danmaku",
      name: "隐藏弹幕"
    },
    {
      type: "switch",
      id: "video-page-bpx-player-mini-mode-wheel-adjust",
      name: "滚轮调节大小",
      enableFn: async () => {
        try {
          const zoom = useStorage("bili-cleaner-mini-player-zoom", 1, localStorage);
          document.documentElement.style.setProperty("--mini-player-zoom", zoom.value + "");
          let cnt = 0;
          const interval = setInterval(() => {
            const player = document.querySelector(".bpx-player-container");
            if (player) {
              clearInterval(interval);
              let flag = false;
              player.addEventListener("mouseenter", () => {
                if (player.getAttribute("data-screen") === "mini") {
                  flag = true;
                }
              });
              player.addEventListener("mouseleave", () => {
                flag = false;
              });
              player.addEventListener("wheel", (e2) => {
                if (flag) {
                  e2.stopPropagation();
                  e2.preventDefault();
                  const scaleSpeed = 5;
                  let newZoom = zoom.value - Math.sign(e2.deltaY) * scaleSpeed / 100;
                  newZoom = newZoom < 0.5 ? 0.5 : newZoom;
                  newZoom = newZoom > 3 ? 3 : newZoom;
                  if (newZoom !== zoom.value) {
                    zoom.value = newZoom;
                    document.documentElement.style.setProperty("--mini-player-zoom", newZoom + "");
                  }
                }
              });
            } else {
              cnt++;
              if (cnt > 20) {
                clearInterval(interval);
              }
            }
          }, 500);
        } catch (err) {
          error("adjust mini player size error", err);
        }
      },
      enableFnRunAt: "document-end"
    },
    {
      type: "switch",
      id: "video-page-bpx-player-mini-mode-position-record",
      name: "记录小窗位置",
      enableFn: async () => {
        const pos = useStorage("bili-cleaner-mini-player-pos", { tx: 0, ty: 0 }, localStorage);
        document.documentElement.style.setProperty("--mini-player-translate-x", pos.value.tx + "px");
        document.documentElement.style.setProperty("--mini-player-translate-y", pos.value.ty + "px");
        waitForEle(document, "#bilibili-player .bpx-player-container", (node) => {
          return node.className.startsWith("bpx-player-container");
        }).then((player) => {
          if (player) {
            player.addEventListener("mouseup", () => {
              if (player.getAttribute("data-screen") === "mini") {
                const rect = player.getBoundingClientRect();
                pos.value.tx = 84 - (document.documentElement.clientWidth - rect.right);
                pos.value.ty = 48 - (document.documentElement.clientHeight - rect.bottom);
              }
            });
          }
        });
      },
      enableFnRunAt: "document-end"
    }
  ];
  const videoPlayerItems = [
    {
      type: "switch",
      id: "video-page-hide-bpx-player-bili-guide-all",
      name: "隐藏 一键三连"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-bili-vote",
      name: "隐藏 投票"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-bili-qoe-feedback",
      name: "隐藏 播放效果调查",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-bili-score",
      name: "隐藏 评分"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-bili-score-sum",
      name: "隐藏 评分总结"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-bili-clock",
      name: "隐藏 打卡"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-bili-cmtime",
      name: "隐藏 心动"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-bili-cmd-shrink",
      name: "隐藏 迷你弹窗"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-bili-reserve",
      name: "隐藏 视频预告"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-bili-link",
      name: "隐藏 视频链接 (稍后再看)"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-cmd-dm-wrap",
      name: "隐藏 播放器内所有弹窗 (强制)"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-top-left-title",
      name: "隐藏 全屏下 播放器内标题"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-top-left-music",
      name: "隐藏 视频音乐链接"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-top-left-follow",
      name: "隐藏 左上角 关注UP主",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-top-issue",
      name: "隐藏 右上角 反馈按钮",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-state-wrap",
      name: "隐藏 视频暂停时大Logo"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ending-related",
      name: "隐藏 播放结束后视频推荐"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-dialog-wrap",
      name: "隐藏 弹幕悬停点赞/复制/举报"
    },
    {
      type: "switch",
      id: "video-page-bpx-player-bili-high-icon",
      name: "隐藏 高赞弹幕前点赞按钮"
    },
    {
      type: "switch",
      id: "video-page-bpx-player-bili-dm-vip-white",
      name: "彩色渐变弹幕 变成白色"
    }
  ];
  const videoPlayerControlItems = [
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-prev",
      name: "隐藏 上一个视频"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-play",
      name: "隐藏 播放/暂停"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-next",
      name: "隐藏 下一个视频"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-viewpoint",
      name: "隐藏 章节列表"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-flac",
      name: "隐藏 Hi-Res无损"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-quality",
      name: "隐藏 清晰度"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-eplist",
      name: "隐藏 选集"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-playbackrate",
      name: "隐藏 倍速"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-subtitle",
      name: "隐藏 字幕"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-volume",
      name: "隐藏 音量"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-setting",
      name: "隐藏 视频设置"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-pip",
      name: "隐藏 画中画",
      description: ["Chrome / Edge 浏览器可用", "Firefox 可在浏览器设置中关闭"]
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-wide",
      name: "隐藏 宽屏"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-web",
      name: "隐藏 网页全屏"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-ctrl-full",
      name: "隐藏 全屏"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-pbp-pin",
      name: "隐藏 高能进度条 图钉按钮"
    },
    {
      type: "switch",
      id: "video-page-hide-bpx-player-shadow-progress-area",
      name: "隐藏 底边mini视频进度",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-show-bpx-player-pbp",
      name: "控制栏收起时 显示高能进度条"
    }
  ];
  const _WideScreenManager = class _WideScreenManager {
    constructor() {
      __publicField(this, "wideScreenLock", false);
      if (isPageVideo() || isPagePlaylist()) {
        let _isWide = _unsafeWindow.isWide;
        Object.defineProperty(_unsafeWindow, "isWide", {
          get: () => _isWide,
          set: (value) => {
            var _a, _b;
            _isWide = value || this.wideScreenLock;
            if (_isWide) {
              (_a = document.documentElement) == null ? void 0 : _a.setAttribute("player-is-wide", "");
            } else {
              (_b = document.documentElement) == null ? void 0 : _b.removeAttribute("player-is-wide");
            }
          }
        });
      }
    }
    static getInstance() {
      if (!_WideScreenManager.instance) {
        _WideScreenManager.instance = new _WideScreenManager();
      }
      return _WideScreenManager.instance;
    }
    lock() {
      this.wideScreenLock = true;
    }
    unlock() {
      this.wideScreenLock = false;
    }
  };
  __publicField(_WideScreenManager, "instance");
  let WideScreenManager = _WideScreenManager;
  const wideScreenManager = WideScreenManager.getInstance();
  let webScroll = false;
  let fullScroll = false;
  const fn = (event) => event.stopImmediatePropagation();
  const disableTuneVolume = () => {
    if (!webScroll && !fullScroll) {
      window.addEventListener("mousewheel", fn, { capture: true });
      window.addEventListener("DOMMouseScroll", fn, { capture: true });
    }
  };
  const enableTuneVolume = () => {
    if (!(webScroll && fullScroll)) {
      window.removeEventListener("mousewheel", fn, { capture: true });
      window.removeEventListener("DOMMouseScroll", fn, { capture: true });
    }
  };
  const videoPlayerLayoutItems = [
    {
      type: "switch",
      id: "default-widescreen",
      name: "默认宽屏播放 刷新生效",
      enableFn: async () => {
        _unsafeWindow.isWide = true;
        wideScreenManager.lock();
        const listener = () => {
          window.scrollTo(0, 64);
          waitForEle(document.body, ".bpx-player-ctrl-wide", (node) => {
            return node.className.includes("bpx-player-ctrl-wide");
          }).then((wideBtn) => {
            if (wideBtn) {
              wideBtn.click();
              wideScreenManager.unlock();
            }
          });
        };
        document.readyState !== "loading" ? listener() : document.addEventListener("DOMContentLoaded", listener);
      }
    },
    {
      type: "switch",
      id: "webscreen-scrollable",
      name: "网页全屏时 页面可滚动",
      description: ["播放器内滚轮调节音量失效"],
      enableFn: async () => {
        disableTuneVolume();
        webScroll = true;
        waitForEle(document.body, ".bpx-player-ctrl-web", (node) => {
          return node.className.includes("bpx-player-ctrl-web");
        }).then((webBtn) => {
          if (webBtn) {
            webBtn.addEventListener("click", () => {
              if (webBtn.classList.contains("bpx-state-entered")) {
                window.scrollTo(0, 0);
              }
            });
          }
        });
      },
      disableFn: () => {
        enableTuneVolume();
        webScroll = false;
      },
      enableFnRunAt: "document-end"
    },
    {
      type: "switch",
      id: "fullscreen-scrollable",
      name: "全屏时 页面可滚动 (实验功能)",
      description: ["播放器内滚轮调节音量失效", "点击全屏按钮时生效,双击全屏无效"],
      enableFn: async () => {
        disableTuneVolume();
        fullScroll = true;
        let cnt = 0;
        const id = setInterval(() => {
          var _a;
          const webBtn = document.body.querySelector(".bpx-player-ctrl-btn.bpx-player-ctrl-web");
          const fullBtn = document.body.querySelector(".bpx-player-ctrl-btn.bpx-player-ctrl-full");
          if (webBtn && fullBtn) {
            clearInterval(id);
            const isFullScreen = () => {
              if (document.fullscreenElement) {
                return "ele";
              } else if (window.innerWidth === screen.width && window.innerHeight === screen.height) {
                return "f11";
              } else {
                return "not";
              }
            };
            const isWebScreen = () => {
              return webBtn.classList.contains("bpx-state-entered");
            };
            const newFullBtn = fullBtn.cloneNode(true);
            newFullBtn.addEventListener("click", () => {
              switch (isFullScreen()) {
                case "ele":
                  if (isWebScreen()) {
                    webBtn.click();
                  } else {
                    document.exitFullscreen().then().catch();
                  }
                  break;
                case "f11":
                  webBtn.click();
                  break;
                case "not":
                  document.documentElement.requestFullscreen().then().catch();
                  if (!isWebScreen()) {
                    webBtn.click();
                  }
                  window.scrollTo(0, 0);
                  break;
              }
            });
            (_a = fullBtn.parentElement) == null ? void 0 : _a.replaceChild(newFullBtn, fullBtn);
          } else {
            cnt++;
            cnt > 50 && clearInterval(id);
          }
        }, 200);
      },
      disableFn: () => {
        enableTuneVolume();
        fullScroll = false;
      },
      enableFnRunAt: "document-end"
    },
    {
      type: "switch",
      id: "video-page-exchange-player-position",
      name: "播放器和视频信息 交换位置"
    },
    {
      type: "number",
      id: "normalscreen-width",
      name: "普通播放 视频宽度调节(-1禁用)",
      minValue: -1,
      maxValue: 100,
      step: 0.1,
      defaultValue: -1,
      disableValue: -1,
      addonText: "vw",
      fn: (value) => {
        document.documentElement.style.setProperty("--normalscreen-width", `${value}vw`);
      }
    }
  ];
  const videoRightItems = [
    {
      type: "switch",
      id: "video-page-right-container-sticky-optimize",
      name: "优化 右栏底部吸附"
    },
    {
      type: "switch",
      id: "video-page-right-container-sticky-disable",
      name: "禁用 右栏底部吸附"
    },
    {
      type: "switch",
      id: "video-page-hide-right-container-ad",
      name: "隐藏 广告",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-right-container-video-page-game-card-small",
      name: "隐藏 游戏推荐"
    },
    {
      type: "switch",
      id: "video-page-hide-right-container-danmaku",
      name: "隐藏 弹幕列表"
    },
    {
      type: "switch",
      id: "video-page-hide-right-container-reco-list-next-play-next-button",
      name: "隐藏 自动连播开关"
    },
    {
      type: "switch",
      id: "video-page-hide-right-container-reco-list-next-play",
      name: "隐藏 接下来播放"
    },
    {
      type: "switch",
      id: "video-page-hide-right-container-section-next-btn",
      name: "隐藏 视频合集 自动连播开关"
    },
    {
      type: "switch",
      id: "video-page-hide-right-container-section-height",
      name: "优化 视频合集列表高度",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-right-container-section-play-num",
      name: "隐藏 视频合集 播放量"
    },
    {
      type: "switch",
      id: "video-page-hide-right-container-section-abstract",
      name: "隐藏 视频合集 简介",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-right-container-section-subscribe",
      name: "隐藏 视频合集 订阅合集"
    },
    {
      type: "switch",
      id: "video-page-hide-right-container-multi-page-add-counter",
      name: "恢复 分P视频 编号",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-right-container-set-info-bottom",
      name: "相关视频 视频信息置底",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-right-container-duration",
      name: "隐藏 相关视频 视频时长"
    },
    {
      type: "switch",
      id: "video-page-hide-right-container-reco-list-watch-later-video",
      name: "隐藏 相关视频 稍后再看按钮"
    },
    {
      type: "switch",
      id: "video-page-hide-right-container-reco-list-rec-list-info-up",
      name: "隐藏 相关视频 UP主"
    },
    {
      type: "switch",
      id: "video-page-hide-right-container-reco-list-rec-list-info-plays",
      name: "隐藏 相关视频 播放和弹幕"
    },
    {
      type: "switch",
      id: "video-page-hide-right-container-reco-list-rec-list",
      name: "隐藏 全部相关视频"
    },
    {
      type: "switch",
      id: "video-page-hide-right-container-right-bottom-banner",
      name: "隐藏 活动banner",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-right-container-live",
      name: "隐藏 直播间推荐",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-right-container",
      name: "隐藏 整个右栏 (宽屏模式不适用)"
    }
  ];
  const videoSidebarItems = [
    {
      type: "switch",
      id: "video-page-hide-sidenav-right-container-live",
      name: "隐藏 小窗播放开关"
    },
    {
      type: "switch",
      id: "video-page-hide-sidenav-customer-service",
      name: "隐藏 客服",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-sidenav-back-to-top",
      name: "隐藏 回顶部"
    }
  ];
  const videoSubtitleItems = [
    {
      type: "string",
      id: "video-page-subtitle-font-color",
      name: "字幕颜色",
      description: ["遵循 CSS color 语法,留空为禁用"],
      defaultValue: "",
      disableValue: "",
      fn: (value) => {
        document.documentElement.style.setProperty(
          "--video-page-subtitle-font-color",
          value.trim().replace(/;$/, "")
        );
      }
    },
    {
      type: "string",
      id: "video-page-subtitle-font-family",
      name: "字幕字体",
      description: ["遵循 CSS font-family 语法,留空为禁用", "确保本地已安装该字体,检查家族名是否正确"],
      defaultValue: "PingFang SC,HarmonyOS_Regular,Helvetica Neue,Microsoft YaHei,sans-serif",
      disableValue: "",
      fn: (value) => {
        document.documentElement.style.setProperty(
          "--video-page-subtitle-font-family",
          value.trim().replace(/;$/, "")
        );
      }
    },
    {
      type: "string",
      id: "video-page-subtitle-font-weight",
      name: "字幕字重",
      description: ["遵循 CSS font-weight 语法,留空为禁用", "确保本地字体支持该字重"],
      defaultValue: "",
      disableValue: "",
      fn: (value) => {
        document.documentElement.style.setProperty(
          "--video-page-subtitle-font-weight",
          value.trim().replace(/;$/, "")
        );
      }
    },
    {
      type: "string",
      id: "video-page-subtitle-text-stroke-color",
      name: "描边颜色",
      description: ["遵循 CSS color 语法,留空为禁用", '官方字幕设定需选择 "无描边"'],
      defaultValue: "",
      disableValue: "",
      fn: (value) => {
        document.documentElement.style.setProperty(
          "--video-page-subtitle-text-stroke-color",
          value.trim().replace(/;$/, "")
        );
      }
    },
    {
      type: "number",
      id: "video-page-subtitle-text-stroke-width",
      name: "描边宽度 (0为禁用)",
      minValue: 0,
      maxValue: 10,
      step: 0.01,
      defaultValue: 3.5,
      disableValue: 0,
      addonText: "px",
      fn: (value) => {
        document.documentElement.style.setProperty("--video-page-subtitle-text-stroke-width", `${value}px`);
      }
    }
  ];
  const videoToolbarItems = [
    {
      type: "switch",
      id: "video-page-coin-disable-auto-like",
      name: "投币时不自动点赞",
      noStyle: true,
      enableFn: async () => {
        const disableAutoLike = () => {
          let counter = 0;
          const timer = setInterval(() => {
            const checkbox = document.querySelector(
              "body > .bili-dialog-m .bili-dialog-bomb .like-checkbox input"
            );
            if (checkbox) {
              checkbox.checked && checkbox.click();
              clearInterval(timer);
            } else {
              counter++;
              if (counter > 100) {
                clearInterval(timer);
              }
            }
          }, 20);
        };
        const coinBtn = document.querySelector(
          "#arc_toolbar_report .video-coin.video-toolbar-left-item"
        );
        if (coinBtn) {
          coinBtn.addEventListener("click", disableAutoLike);
        } else {
          document.addEventListener("DOMContentLoaded", () => {
            const coinBtn2 = document.querySelector(
              "#arc_toolbar_report .video-coin.video-toolbar-left-item"
            );
            coinBtn2 == null ? void 0 : coinBtn2.addEventListener("click", disableAutoLike);
          });
        }
      }
    },
    {
      type: "switch",
      id: "video-page-hide-video-share-popover",
      name: "隐藏 分享按钮弹出菜单",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-triple-oldfan-entry",
      name: "隐藏 成为老粉按钮"
    },
    {
      type: "switch",
      id: "video-page-hide-below-info-video-ai-assistant",
      name: "隐藏 官方AI总结"
    },
    {
      type: "switch",
      id: "video-page-hide-below-info-video-note",
      name: "隐藏 记笔记"
    },
    {
      type: "switch",
      id: "video-page-hide-below-info-video-report-menu",
      name: "隐藏 举报/笔记/稍后再看"
    },
    {
      type: "switch",
      id: "video-page-unfold-below-info-desc",
      name: "展开 视频简介",
      description: ["自动隐藏 [展开/收起] 按钮"]
    },
    {
      type: "switch",
      id: "video-page-hide-below-info-desc",
      name: "隐藏 视频简介"
    },
    {
      type: "switch",
      id: "video-page-hide-below-info-tag",
      name: "隐藏 标签列表"
    },
    {
      type: "switch",
      id: "video-page-hide-below-activity-vote",
      name: "隐藏 活动宣传",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-below-bannerAd",
      name: "隐藏 广告banner",
      defaultEnable: true
    }
  ];
  const videoUpInfoItems = [
    {
      type: "switch",
      id: "video-page-hide-up-sendmsg",
      name: "隐藏 发消息",
      defaultEnable: true
    },
    {
      type: "switch",
      id: "video-page-hide-up-description",
      name: "隐藏 UP主简介"
    },
    {
      type: "switch",
      id: "video-page-hide-up-charge",
      name: "隐藏 充电"
    },
    {
      type: "switch",
      id: "video-page-hide-up-bili-avatar-pendent-dom",
      name: "隐藏 UP主头像外饰品"
    },
    {
      type: "switch",
      id: "video-page-hide-up-bili-avatar-icon",
      name: "隐藏 UP主头像icon"
    },
    {
      type: "switch",
      id: "video-page-hide-up-membersinfo-normal-header",
      name: "隐藏 创作团队header",
      defaultEnable: true
    }
  ];
  const videoGroups = [
    {
      name: "基本功能",
      fold: true,
      items: videoBasicItems
    },
    {
      name: "播放设定",
      fold: true,
      items: videoPlayerLayoutItems
    },
    {
      name: "视频信息",
      fold: true,
      items: videoInfoItems
    },
    {
      name: "播放器",
      fold: true,
      items: videoPlayerItems
    },
    {
      name: "播放控制栏",
      fold: true,
      items: videoPlayerControlItems
    },
    {
      name: "弹幕控制栏",
      fold: true,
      items: videoDanmakuControlItems
    },
    {
      name: "弹幕样式",
      fold: true,
      items: videoDanmakuItems
    },
    {
      name: "字幕样式",
      fold: true,
      items: videoSubtitleItems
    },
    {
      name: "视频下方信息",
      fold: true,
      items: videoToolbarItems
    },
    {
      name: "右侧 UP主信息",
      fold: true,
      items: videoUpInfoItems
    },
    {
      name: "右侧 视频栏",
      fold: true,
      items: videoRightItems
    },
    {
      name: "小窗播放器",
      fold: true,
      items: videoMiniPlayerItems
    },
    {
      name: "页面右下角 小按钮",
      fold: true,
      items: videoSidebarItems
    }
  ];
  const watchlaterBasicItems = [
    {
      type: "list",
      id: "watchlater-layout",
      name: "修改 视频列表列数",
      description: ["未启用时,B 站自动判断列数"],
      defaultValue: "watchlater-layout-disable",
      disableValue: "watchlater-layout-disable",
      options: [
        {
          id: "watchlater-layout-disable",
          name: "未启用"
        },
        {
          id: "watchlater-layout-4-column",
          name: "4 列布局"
        },
        {
          id: "watchlater-layout-5-column",
          name: "5 列布局"
        }
      ]
    },
    {
      type: "switch",
      id: "watchlater-increase-font-size",
      name: "增大 视频信息字号"
    },
    {
      type: "switch",
      id: "watchlater-hide-feedback",
      name: "隐藏 新版反馈按钮"
    }
  ];
  const watchlaterGroups = [
    {
      name: "基本功能",
      items: watchlaterBasicItems
    }
  ];
  const bangumiStyle = '@charset "UTF-8";html[video-page-simple-share] #share-container-id [class^=Share_boxBottom]{display:none!important}html[video-page-simple-share] #share-container-id [class^=Share_boxTop]{padding:15px!important}html[video-page-simple-share] #share-container-id [class^=Share_boxTopRight]{display:none!important}html[video-page-simple-share] #share-container-id [class^=Share_boxTopLeft]{padding:0!important}html[video-page-hide-fixed-header] .fixed-header .bili-header__bar{position:relative!important}html[video-page-danmaku-font-family] .bili-danmaku-x-dm{--fontFamily: var(--video-page-danmaku-font-family) !important}html[video-page-danmaku-font-weight] .bili-danmaku-x-dm{--fontWeight: var(--video-page-danmaku-font-weight) !important}html[video-page-hide-bpx-player-video-info-online] .bpx-player-video-info-online,html[video-page-hide-bpx-player-video-info-online] .bpx-player-video-info-divide,html[video-page-hide-bpx-player-video-info-dm] .bpx-player-video-info-dm,html[video-page-hide-bpx-player-video-info-dm] .bpx-player-video-info-divide,html[video-page-hide-bpx-player-dm-switch] .bpx-player-dm-switch,html[video-page-hide-bpx-player-dm-setting] .bpx-player-dm-setting,html[video-page-hide-bpx-player-video-btn-dm] .bpx-player-video-btn-dm{display:none!important}html[video-page-hide-bpx-player-dm-input] .bpx-player-dm-input::-moz-placeholder{color:transparent!important}html[video-page-hide-bpx-player-dm-input] .bpx-player-dm-input::placeholder{color:transparent!important}html[video-page-hide-bpx-player-dm-hint] .bpx-player-dm-hint,html[video-page-hide-bpx-player-dm-btn-send] .bpx-player-dm-btn-send,html[video-page-hide-bpx-player-sending-area] .bpx-player-sending-area{display:none!important}html[video-page-hide-bpx-player-sending-area] #bilibili-player-wrap[class^=video_playerNormal]{height:calc(var(--video-width) * .5625)}html[video-page-hide-bpx-player-sending-area] #bilibili-player-wrap[class^=video_playerWide]{height:calc(var(--containerWidth) * .5625)}html[video-page-hide-bpx-player-video-inputbar] .bpx-player-container[data-screen=full] .bpx-player-control-bottom-center .bpx-player-video-inputbar,html[video-page-hide-bpx-player-video-inputbar] .bpx-player-container[data-screen=web] .bpx-player-control-bottom-center .bpx-player-video-inputbar{display:none!important}html[video-page-hide-bpx-player-video-inputbar] .bpx-player-container[data-screen=full] .bpx-player-control-bottom-center,html[video-page-hide-bpx-player-video-inputbar] .bpx-player-container[data-screen=web] .bpx-player-control-bottom-center{padding:0 15px!important}html[video-page-hide-bpx-player-video-inputbar] .bpx-player-container[data-screen=full] .bpx-player-control-bottom-left,html[video-page-hide-bpx-player-video-inputbar] .bpx-player-container[data-screen=web] .bpx-player-control-bottom-left{min-width:unset!important}html[video-page-hide-bpx-player-video-inputbar] .bpx-player-container[data-screen=full] .bpx-player-ctrl-viewpoint,html[video-page-hide-bpx-player-video-inputbar] .bpx-player-container[data-screen=web] .bpx-player-ctrl-viewpoint{width:-moz-fit-content!important;width:fit-content!important}html[video-page-hide-bpx-player-mini-mode-process] .bpx-player-container[data-screen=mini]:not(:hover) .bpx-player-mini-progress{display:none}html[video-page-hide-bpx-player-mini-mode-danmaku] .bpx-player-container[data-screen=mini] .bpx-player-row-dm-wrap{visibility:hidden!important}html[video-page-bpx-player-mini-mode-wheel-adjust] .bpx-player-container[data-screen=mini]{height:calc(225px * var(--mini-player-zoom, 1))!important;width:calc(400px * var(--mini-player-zoom, 1))!important}html[video-page-bpx-player-mini-mode-wheel-adjust] .bpx-player-container[data-revision="1"][data-screen=mini],html[video-page-bpx-player-mini-mode-wheel-adjust] .bpx-player-container[data-revision="2"][data-screen=mini]{height:calc(180px * var(--mini-player-zoom, 1))!important;width:calc(320px * var(--mini-player-zoom, 1))!important}@media screen and (width >= 1681px){html[video-page-bpx-player-mini-mode-wheel-adjust] .bpx-player-container[data-revision="1"][data-screen=mini],html[video-page-bpx-player-mini-mode-wheel-adjust] .bpx-player-container[data-revision="2"][data-screen=mini]{height:calc(203px * var(--mini-player-zoom, 1))!important;width:calc(360px * var(--mini-player-zoom, 1))!important}}html[video-page-bpx-player-mini-mode-position-record] .bpx-player-container[data-screen=mini]{transform:translate(var(--mini-player-translate-x)) translateY(var(--mini-player-translate-y))}html[video-page-hide-bpx-player-top-left-title] .bpx-player-top-title,html[video-page-hide-bpx-player-top-left-title] .bpx-player-top-mask,html[bangumi-page-hide-bpx-player-top-follow] .bpx-player-top-follow,html[video-page-hide-bpx-player-top-issue] .bpx-player-top-issue,html[video-page-hide-bpx-player-state-wrap] .bpx-player-state-wrap,html[bangumi-page-hide-bpx-player-record-item-wrap] .bpx-player-record-item-wrap,html[video-page-hide-bpx-player-dialog-wrap] .bpx-player-dialog-wrap,html[video-page-bpx-player-bili-high-icon] .bili-high-icon,html[video-page-bpx-player-bili-high-icon] .bili-danmaku-x-high-icon{display:none!important}html[video-page-bpx-player-bili-dm-vip-white] .bili-dm>.bili-dm-vip,html[video-page-bpx-player-bili-dm-vip-white] .bili-danmaku-x-dm-vip{background:unset!important;background-size:unset!important;text-shadow:1px 0 1px #000,0 1px 1px #000,0 -1px 1px #000,-1px 0 1px #000!important;-webkit-text-stroke:none!important;-moz-text-stroke:none!important;-ms-text-stroke:none!important}html[video-page-hide-bpx-player-ctrl-prev] .bpx-player-ctrl-prev,html[video-page-hide-bpx-player-ctrl-play] .bpx-player-ctrl-play,html[video-page-hide-bpx-player-ctrl-next] .bpx-player-ctrl-next,html[video-page-hide-bpx-player-ctrl-flac] .bpx-player-ctrl-flac,html[video-page-hide-bpx-player-ctrl-quality] .bpx-player-ctrl-quality,html[video-page-hide-bpx-player-ctrl-eplist] .bpx-player-ctrl-eplist,html[video-page-hide-bpx-player-ctrl-playbackrate] .bpx-player-ctrl-playbackrate,html[video-page-hide-bpx-player-ctrl-subtitle] .bpx-player-ctrl-subtitle,html[video-page-hide-bpx-player-ctrl-volume] .bpx-player-ctrl-volume,html[video-page-hide-bpx-player-ctrl-setting] .bpx-player-ctrl-setting,html[video-page-hide-bpx-player-ctrl-pip] .bpx-player-ctrl-pip,html[video-page-hide-bpx-player-ctrl-wide] .bpx-player-ctrl-wide,html[video-page-hide-bpx-player-ctrl-web] .bpx-player-ctrl-web,html[video-page-hide-bpx-player-ctrl-full] .bpx-player-ctrl-full,html[video-page-hide-bpx-player-pbp-pin] .bpx-player-pbp-pin,html[video-page-hide-bpx-player-shadow-progress-area] .bpx-player-shadow-progress-area{display:none!important}html[video-page-hide-bpx-player-shadow-progress-area] .bpx-player-pbp:not(.show){bottom:0!important}html[video-page-show-bpx-player-pbp] .bpx-player-pbp:not(.show){opacity:1!important}html[webscreen-scrollable] body:has(#bilibili-player-wrap[class*=video_playerFullScreen]){overflow:auto!important;position:relative!important}html[webscreen-scrollable] body:has(#bilibili-player-wrap[class*=video_playerFullScreen]) #bilibili-player-wrap{position:absolute!important;width:100vw!important;height:100vh!important}html[webscreen-scrollable] body:has(#bilibili-player-wrap[class*=video_playerFullScreen]) .main-container{position:static!important;margin:0 auto!important;padding-top:calc(100vh + 15px)!important}html[webscreen-scrollable] body:has(#bilibili-player-wrap[class*=video_playerFullScreen])::-webkit-scrollbar{display:none!important}@supports (-moz-appearance: none){html[webscreen-scrollable]:has(#bilibili-player-wrap[class*=video_playerFullScreen]),html[webscreen-scrollable] body:has(#bilibili-player-wrap[class*=video_playerFullScreen]){scrollbar-width:none!important}}html[fullscreen-scrollable] body:has(#bilibili-player-wrap[class*=video_playerFullScreen]){overflow:auto!important;position:relative!important}html[fullscreen-scrollable] body:has(#bilibili-player-wrap[class*=video_playerFullScreen]) .home-container{background-color:#fff}html[fullscreen-scrollable] body:has(#bilibili-player-wrap[class*=video_playerFullScreen]) #bilibili-player-wrap{position:absolute!important;width:100vw!important;height:100vh!important}html[fullscreen-scrollable] body:has(#bilibili-player-wrap[class*=video_playerFullScreen]) .main-container{position:static!important;margin:0 auto!important;padding-top:calc(100vh + 15px)!important}html[fullscreen-scrollable] body:has(#bilibili-player-wrap[class*=video_playerFullScreen])::-webkit-scrollbar{display:none!important}@supports (-moz-appearance: none){html[fullscreen-scrollable]:has(#bilibili-player-wrap[class*=video_playerFullScreen]),html[fullscreen-scrollable] body:has(#bilibili-player-wrap[class*=video_playerFullScreen]){scrollbar-width:none!important}}html[normalscreen-width] .home-container:not(.wide){--video-width: var(--normalscreen-width)}html[bangumi-page-hide-right-container-section-height] .plp-r [class^=vipPaybar_],html[bangumi-page-hide-right-container-section-height] .plp-r [class^=paybar_],html[video-page-hide-right-container-danmaku] #danmukuBox{display:none!important}html[bangumi-page-hide-eplist-badge] [class^=eplist_ep_list_wrapper] [class^=imageListItem_badge]:not([style*="#00C0FF"]){display:none!important}html[bangumi-page-hide-eplist-badge] [class^=eplist_ep_list_wrapper] [class^=numberListItem_badge]:not([style*="#00C0FF"]){display:none!important}html[bangumi-page-hide-recommend] .plp-r [class^=recommend_wrap],html[bangumi-page-hide-sidenav-issue] [class*=navTools_navMenu] [title=新版反馈],html[video-page-hide-sidenav-mini] [class*=navTools_navMenu] [title*=迷你播放器],html[video-page-hide-sidenav-customer-service] [class*=navTools_navMenu] [title=帮助反馈],html[video-page-hide-sidenav-back-to-top] [class*=navTools_navMenu] [title=返回顶部],html[video-page-hide-video-share-popover] #share-container-id [class^=Share_share]{display:none!important}html[bangumi-page-hide-watch-together] .toolbar span:has(>#watch_together_tab){display:none!important}html[bangumi-page-hide-toolbar] .player-left-components .toolbar,html[bangumi-page-hide-media-info] [class^=mediainfo_mediaInfo],html[bangumi-page-simple-media-info] [class^=mediainfo_btnHome],html[bangumi-page-simple-media-info] [class^=upinfo_upInfoCard]{display:none!important}html[bangumi-page-simple-media-info] [class^=mediainfo_score]{font-size:25px!important}html[bangumi-page-simple-media-info] [class^=mediainfo_mediaDesc]:has(+[class^=mediainfo_media_desc_section]){visibility:hidden!important;height:0!important;margin-bottom:8px!important}html[bangumi-page-simple-media-info] [class^=mediainfo_media_desc_section]{height:60px!important}html[bangumi-page-hide-sponsor-module] #sponsor_module{display:none!important}';
  const channelStyle = 'html[homepage-hide-banner] .bili-header__banner{min-height:unset!important;height:64px!important;background:var(--bg1)!important}html[homepage-hide-banner] .bili-header__banner>*{display:none!important}html[homepage-hide-banner] .bili-header__bar{box-shadow:0 2px 4px #00000014!important}html[homepage-hide-banner] html{background-color:var(--bg1)}html[homepage-hide-banner] .bili-header .right-entry__outside .right-entry-icon,html[homepage-hide-banner] .bili-header .left-entry .entry-title,html[homepage-hide-banner] .bili-header .left-entry .download-entry,html[homepage-hide-banner] .bili-header .left-entry .default-entry,html[homepage-hide-banner] .bili-header .left-entry .loc-entry{color:var(--text1, #18191c)!important}html[homepage-hide-banner] .bili-header .left-entry .entry-title .zhuzhan-icon{color:#00aeec!important}html[homepage-hide-banner] .bili-header .right-entry__outside .right-entry-text{color:var(--text2, #61666d)!important}html[homepage-hide-banner] #biliMainHeader{min-height:unset!important}html[homepage-hide-banner] .v-popover.is-top{padding-top:5px;padding-bottom:unset!important;bottom:unset!important}@media (width >= 2200px){html[homepage-hide-banner] .v-popover.is-top{top:32px}}@media (width >= 1701px) and (width <= 2199.9px){html[homepage-hide-banner] .v-popover.is-top{top:32px}}@media (width >= 1367px) and (width <= 1700.9px){html[homepage-hide-banner] .v-popover.is-top{top:28px}}@media (width >= 1100px) and (width <= 1366.9px){html[homepage-hide-banner] .v-popover.is-top{top:28px}}@media (width <= 1099.9px){html[homepage-hide-banner] .v-popover.is-top{top:24px}}html[channel-hide-subarea] #i_cecream .bili-header__channel,html[channel-hide-carousel] .channel-swiper,html[channel-hide-carousel] .channel-swiper-client,html[channel-hide-sticky-subchannel] .fixed-header-nav-sticky{display:none!important}html[channel-hide-sticky-subchannel] .fixed-wrapper-shown{box-shadow:unset!important}html[channel-hide-sticky-header] .bili-header__bar.slide-down{display:none!important}html[channel-layout-padding] .go-back-btn,html[channel-layout-padding] .channel-layout,html[channel-layout-padding] .channel-outer-nav{padding:0 var(--channel-layout-padding)!important}html[channel-hide-high-energy-topic] .bili-grid:has([data-report="high_energy.content"]){grid-template-columns:unset!important;margin-top:0!important;margin-bottom:20px!important}html[channel-hide-high-energy-topic] .bili-grid:has([data-report="high_energy.content"]) aside[data-report="topic.card"]{display:none!important}html[channel-hide-high-energy-topic] .bili-grid:has([data-report="high_energy.content"]) .video-card-list,html[channel-hide-high-energy-topic] .video-double-full{min-height:unset!important}@media (width <= 1099.9px){html[channel-hide-high-energy-topic] .bili-grid:has([data-report="high_energy.content"]) .video-card-list .video-card-body{grid-column:span 4;grid-template-columns:repeat(4,1fr);overflow:hidden;grid-template-rows:1fr auto;grid-auto-rows:0}html[channel-hide-high-energy-topic] .bili-grid:has([data-report="high_energy.content"]) .video-card-list .video-card-body>*:nth-of-type(n+7){display:unset!important}}@media (width >= 1100px) and (width <= 1366.9px){html[channel-hide-high-energy-topic] .bili-grid:has([data-report="high_energy.content"]) .video-card-list .video-card-body{grid-column:span 5;grid-template-columns:repeat(5,1fr);overflow:hidden;grid-template-rows:1fr auto;grid-auto-rows:0}html[channel-hide-high-energy-topic] .bili-grid:has([data-report="high_energy.content"]) .video-card-list .video-card-body>*:nth-of-type(n+9){display:unset!important}}@media (width >= 1367px) and (width <= 1700.9px){html[channel-hide-high-energy-topic] .bili-grid:has([data-report="high_energy.content"]) .video-card-list .video-card-body{grid-column:span 5;grid-template-columns:repeat(5,1fr);overflow:hidden;grid-template-rows:1fr auto;grid-auto-rows:0}html[channel-hide-high-energy-topic] .bili-grid:has([data-report="high_energy.content"]) .video-card-list .video-card-body>*:nth-of-type(n+9){display:unset!important}}@media (width >= 1701px) and (width <= 2199.9px){html[channel-hide-high-energy-topic] .bili-grid:has([data-report="high_energy.content"]) .video-card-list .video-card-body{grid-column:span 6;grid-template-columns:repeat(6,1fr);overflow:hidden;grid-template-rows:1fr auto;grid-auto-rows:0}html[channel-hide-high-energy-topic] .bili-grid:has([data-report="high_energy.content"]) .video-card-list .video-card-body>*:nth-of-type(n+11){display:unset!important}}@media (width >= 2200px){html[channel-hide-high-energy-topic] .bili-grid:has([data-report="high_energy.content"]) .video-card-list .video-card-body{grid-column:span 6;grid-template-columns:repeat(6,1fr);overflow:hidden;grid-template-rows:1fr auto;grid-auto-rows:0}html[channel-hide-high-energy-topic] .bili-grid:has([data-report="high_energy.content"]) .video-card-list .video-card-body>*:nth-of-type(n+13){display:unset!important}}html[channel-hide-high-energy] .bili-grid:has([data-report="high_energy.content"]){display:none!important}html[channel-hide-rank-list] .bili-grid:has(.rank-list){grid-template-columns:unset!important;margin-top:0!important;margin-bottom:20px!important}html[channel-hide-rank-list] .bili-grid:has(.rank-list) aside{display:none!important}html[channel-hide-rank-list] .bili-grid.sub-dynamic:has(.rank-list),html[channel-hide-rank-list] .bili-grid:has(.rank-list) .video-card-list{min-height:unset!important}@media (width <= 1099.9px){html[channel-hide-rank-list] .bili-grid:has(.rank-list) .video-card-list .video-card-body{grid-column:span 4;grid-template-columns:repeat(4,1fr);overflow:hidden;grid-template-rows:1fr auto;grid-auto-rows:0}html[channel-hide-rank-list] .bili-grid:has(.rank-list) .video-card-list .video-card-body>*:nth-of-type(n+7){display:unset!important}}@media (width >= 1100px) and (width <= 1366.9px){html[channel-hide-rank-list] .bili-grid:has(.rank-list) .video-card-list .video-card-body{grid-column:span 5;grid-template-columns:repeat(5,1fr);overflow:hidden;grid-template-rows:1fr auto;grid-auto-rows:0}html[channel-hide-rank-list] .bili-grid:has(.rank-list) .video-card-list .video-card-body>*:nth-of-type(n+9){display:unset!important}}@media (width >= 1367px) and (width <= 1700.9px){html[channel-hide-rank-list] .bili-grid:has(.rank-list) .video-card-list .video-card-body{grid-column:span 5;grid-template-columns:repeat(5,1fr);overflow:hidden;grid-template-rows:1fr auto;grid-auto-rows:0}html[channel-hide-rank-list] .bili-grid:has(.rank-list) .video-card-list .video-card-body>*:nth-of-type(n+9){display:unset!important}}@media (width >= 1701px) and (width <= 2199.9px){html[channel-hide-rank-list] .bili-grid:has(.rank-list) .video-card-list .video-card-body{grid-column:span 6;grid-template-columns:repeat(6,1fr);overflow:hidden;grid-template-rows:1fr auto;grid-auto-rows:0}html[channel-hide-rank-list] .bili-grid:has(.rank-list) .video-card-list .video-card-body>*:nth-of-type(n+11){display:unset!important}}@media (width >= 2200px){html[channel-hide-rank-list] .bili-grid:has(.rank-list) .video-card-list .video-card-body{grid-column:span 6;grid-template-columns:repeat(6,1fr);overflow:hidden;grid-template-rows:1fr auto;grid-auto-rows:0}html[channel-hide-rank-list] .bili-grid:has(.rank-list) .video-card-list .video-card-body>*:nth-of-type(n+13){display:unset!important}}html[channel-hide-ad-banner] .eva-banner{display:none!important}html[channel-hide-ad-banner] .bili-grid{margin-bottom:20px!important}html[channel-hide-video-info-date] .bili-video-card__info--date{display:none!important}html[channel-hide-danmaku-count] .bili-video-card__stats--item:nth-child(2){visibility:hidden}html[channel-hide-bili-watch-later] .bili-watch-later{display:none!important}html[channel-feed-card-body-grid-gap] .feed-card-body{grid-gap:20px 12px!important}html[channel-increase-rcmd-list-font-size] .bili-video-card .bili-video-card__info--tit,html[channel-increase-rcmd-list-font-size] .bili-live-card .bili-live-card__info--tit,html[channel-increase-rcmd-list-font-size] .single-card.floor-card .title{font-size:16px!important}html[channel-increase-rcmd-list-font-size] .bili-video-card .bili-video-card__info--bottom,html[channel-increase-rcmd-list-font-size] .floor-card .sub-title.sub-title,html[channel-increase-rcmd-list-font-size] .bili-video-card__stats,html[channel-increase-rcmd-list-font-size] .bili-video-card__stats .bili-video-card__stats--left,html[channel-increase-rcmd-list-font-size] .bili-video-card__stats .bili-video-card__stats--right{font-size:14px!important}html[channel-hide-feedback] .palette-button-wrap .feedback,html[channel-hide-top-btn] .palette-button-wrap .top-btn-wrap{display:none!important}';
  const commentStyle = "html[video-page-hide-reply-notice] .reply-header .reply-notice{display:none!important}html[video-page-hide-main-reply-box] .main-reply-box{height:0!important;visibility:hidden!important}html[video-page-hide-main-reply-box] .comment-container .reply-list{margin-top:-20px!important}html[video-page-hide-reply-box-textarea-placeholder] .main-reply-box .reply-box-textarea::-moz-placeholder{color:transparent!important;-moz-user-select:none;-webkit-user-select:none;user-select:none}html[video-page-hide-reply-box-textarea-placeholder] .main-reply-box .reply-box-textarea::placeholder{color:transparent!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}html[video-page-hide-reply-box-textarea-placeholder] .fixed-reply-box .reply-box-textarea::-moz-placeholder{color:transparent!important;-moz-user-select:none;-webkit-user-select:none;user-select:none}html[video-page-hide-reply-box-textarea-placeholder] .fixed-reply-box .reply-box-textarea::placeholder{color:transparent!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}html[video-page-hide-fixed-reply-box] .fixed-reply-box,html[video-page-hide-top-vote-card] .top-vote-card,html[video-page-hide-comment-user-card] .user-card,html[video-page-hide-reply-decorate] .reply-decorate,html[video-page-hide-fan-badge] .fan-badge,html[video-page-hide-contractor-box] .contractor-box,html[video-page-hide-user-level] .user-level,html[video-page-hide-user-level] .sub-user-level,html[video-page-hide-bili-avatar-pendent-dom] .root-reply-avatar .bili-avatar-pendent-dom{display:none!important}html[video-page-hide-bili-avatar-pendent-dom] .comment-container .root-reply-avatar .bili-avatar{width:48px!important;height:48px!important}html[video-page-hide-bili-avatar-nft-icon] .bili-avatar-nft-icon,html[video-page-hide-bili-avatar-nft-icon] .comment-container .bili-avatar-icon,html[video-page-hide-vote-info] .vote-info,html[video-page-hide-reply-tag-list] .reply-tag-list,html[video-page-hide-note-prefix] .note-prefix{display:none!important}html[video-page-hide-jump-link-search-word] .reply-content .jump-link.search-word{color:inherit!important}html[video-page-hide-jump-link-search-word] .comment-container .reply-content .jump-link.search-word:hover{color:#008ac5!important}html[video-page-hide-jump-link-search-word] .comment-container .reply-content .icon.search-word{display:none!important}html[video-page-hide-reply-content-user-highlight] .sub-reply-container .reply-content .jump-link.user{color:inherit!important}html[video-page-hide-reply-content-user-highlight] .comment-container .sub-reply-container .reply-content .jump-link.user:hover{color:#40c5f1!important}@keyframes appear{0%{opacity:0}to{opacity:1}}html[video-page-hide-reply-dislike-reply-btn] .reply-item:not(:has(i.disliked)) :is(.reply-btn,.reply-dislike){opacity:0}html[video-page-hide-reply-dislike-reply-btn] .reply-item:hover :is(.reply-btn,.reply-dislike){animation:appear;animation-duration:.2s;animation-delay:.3s;animation-fill-mode:forwards}html[video-page-hide-reply-dislike-reply-btn] .sub-reply-item:not(:has(i.disliked)) :is(.sub-reply-btn,.sub-reply-dislike){opacity:0}html[video-page-hide-reply-dislike-reply-btn] .sub-reply-item:hover :is(.sub-reply-btn,.sub-reply-dislike){animation:appear;animation-duration:.2s;animation-delay:.3s;animation-fill-mode:forwards}html[video-page-hide-emoji-large] .emoji-large{display:none!important}html[video-page-hide-emoji-large-zoom] .emoji-large{zoom:.5}html[video-page-reply-user-name-color-pink] .reply-item .user-name,html[video-page-reply-user-name-color-pink] .comment-container .reply-item .sub-user-name{color:#fb7299!important}html[video-page-reply-user-name-color-default] .reply-item .user-name,html[video-page-reply-user-name-color-default] .comment-container .reply-item .sub-user-name{color:#61666d!important}html[video-page-reply-view-image-optimize] .reply-view-image .last-image,html[video-page-reply-view-image-optimize] .reply-view-image .next-image{zoom:1.4}html[video-page-reply-view-image-optimize] .reply-view-image:has(.preview-item-box:only-child) .last-image{display:none!important}html[video-page-reply-view-image-optimize] .reply-view-image:has(.preview-item-box:only-child) .next-image{display:none!important}html[video-page-reply-view-image-optimize] .reply-view-image .preview-list{display:none!important}html[video-page-hide-comment] #commentapp bili-comments,html[video-page-hide-comment] #comment-module{display:none!important}html[dynamic-page-hide-all-comment] .bili-comment-container,html[dynamic-page-hide-all-comment] .comment-wrap bili-comments{display:none!important}html[dynamic-page-hide-all-comment] .bili-opus-view{border-radius:6px!important}html[dynamic-page-hide-all-comment] .opus-detail{margin-bottom:10px!important;min-height:unset!important}html[dynamic-page-hide-all-comment] #app .content .dyn-tabs{display:none!important}html[dynamic-page-hide-all-comment] #app .content .card{padding-bottom:30px!important}";
  const commonStyle = 'html[border-radius-dynamic] #nav-searchform,html[border-radius-dynamic] .nav-search-content,html[border-radius-dynamic] .header-upload-entry,html[border-radius-dynamic] .v-popover-content,html[border-radius-dynamic] .van-popover,html[border-radius-dynamic] .v-popover-wrap,html[border-radius-dynamic] .v-popover,html[border-radius-dynamic] .topic-panel,html[border-radius-dynamic] .bili-header .header-upload-entry,html[border-radius-dynamic] .bili-dyn-up-list,html[border-radius-dynamic] .bili-dyn-publishing,html[border-radius-dynamic] .bili-dyn-publishing__action,html[border-radius-dynamic] .bili-dyn-sidebar *,html[border-radius-dynamic] .bili-dyn-up-list__window,html[border-radius-dynamic] .bili-dyn-live-users,html[border-radius-dynamic] .bili-dyn-topic-box,html[border-radius-dynamic] .bili-dyn-list-notification,html[border-radius-dynamic] .bili-dyn-item,html[border-radius-dynamic] .bili-dyn-banner,html[border-radius-dynamic] .bili-dyn-banner__img,html[border-radius-dynamic] .bili-dyn-my-info,html[border-radius-dynamic] .bili-dyn-card-video,html[border-radius-dynamic] .bili-dyn-list-tabs,html[border-radius-dynamic] .bili-album__preview__picture__gif,html[border-radius-dynamic] .bili-album__preview__picture__img{border-radius:3px!important}html[border-radius-dynamic] .bili-dyn-card-video__cover__mask,html[border-radius-dynamic] .bili-dyn-card-video__cover{border-radius:3px 0 0 3px!important}html[border-radius-dynamic] .bili-dyn-card-video__body{border-radius:0 3px 3px 0!important}html[border-radius-live] .live-player-ctnr.minimal,html[border-radius-live] .card-box .card-list .card-item,html[border-radius-live] .room-info-cntr,html[border-radius-live] #nav-searchform,html[border-radius-live] #player-ctnr,html[border-radius-live] .nav-search-content,html[border-radius-live] .header-upload-entry,html[border-radius-live] .v-popover-content,html[border-radius-live] .van-popover,html[border-radius-live] .v-popover-wrap,html[border-radius-live] .v-popover,html[border-radius-live] .aside-area,html[border-radius-live] .lower-row .right-ctnr *,html[border-radius-live] .panel-main-ctnr,html[border-radius-live] .startlive-btn,html[border-radius-live] .flip-view,html[border-radius-live] .content-wrapper,html[border-radius-live] .chat-input-ctnr,html[border-radius-live] .announcement-cntr,html[border-radius-live] .bl-button--primary{border-radius:3px!important}html[border-radius-live] #rank-list-vm,html[border-radius-live] .head-info-section{border-radius:3px 3px 0 0!important}html[border-radius-live] .gift-control-section{border-radius:0 0 3px 3px!important}html[border-radius-live] .follow-ctnr .right-part{border-radius:0 3px 3px 0!important}html[border-radius-live] .chat-control-panel{border-radius:0 0 3px 3px!important}html[border-radius-live] .follow-ctnr .left-part,html[border-radius-live] #rank-list-ctnr-box.bgStyle{border-radius:3px 0 0 3px!important}html[border-radius-search] #nav-searchform,html[border-radius-search] .nav-search-content,html[border-radius-search] .v-popover-content,html[border-radius-search] .van-popover,html[border-radius-search] .v-popover-wrap,html[border-radius-search] .v-popover,html[border-radius-search] .search-sticky-header *,html[border-radius-search] .vui_button,html[border-radius-search] .header-upload-entry,html[border-radius-search] .search-input-wrap *,html[border-radius-search] .search-input-container .search-input-wrap,html[border-radius-search] .bili-video-card__cover{border-radius:3px!important}html[border-radius-video] #nav-searchform,html[border-radius-video] .nav-search-content,html[border-radius-video] .v-popover-content,html[border-radius-video] .van-popover,html[border-radius-video] .v-popover,html[border-radius-video] .pic-box,html[border-radius-video] .action-list-container,html[border-radius-video] .actionlist-item-inner .main .cover,html[border-radius-video] .recommend-video-card .card-box .pic-box,html[border-radius-video] .recommend-video-card .card-box .pic-box .rcmd-cover .rcmd-cover-img .b-img__inner img,html[border-radius-video] .actionlist-item-inner .main .cover .cover-img .b-img__inner img,html[border-radius-video] .card-box .pic-box .pic,html[border-radius-video] .bui-collapse-header,html[border-radius-video] .base-video-sections-v1,html[border-radius-video] .bili-header .search-panel,html[border-radius-video] .bili-header .header-upload-entry,html[border-radius-video] .bpx-player-container .bpx-player-sending-bar .bpx-player-video-inputbar,html[border-radius-video] .video-tag-container .tag-panel .tag-link,html[border-radius-video] .video-tag-container .tag-panel .show-more-btn,html[border-radius-video] .vcd .cover img,html[border-radius-video] .vcd *,html[border-radius-video] .upinfo-btn-panel *,html[border-radius-video] .fixed-sidenav-storage div,html[border-radius-video] .fixed-sidenav-storage a,html[border-radius-video] .reply-box-textarea,html[border-radius-video] .reply-box-send,html[border-radius-video] .reply-box-send:after{border-radius:3px!important}html[border-radius-video] .bpx-player-container .bpx-player-sending-bar .bpx-player-video-inputbar .bpx-player-dm-btn-send,html[border-radius-video] .bpx-player-container .bpx-player-sending-bar .bpx-player-video-inputbar-wrap{border-radius:0 3px 3px 0!important}html[border-radius-video] .bpx-player-dm-btn-send .bui-button{border-radius:3px 0 0 3px!important}html[border-radius-bangumi] a[class^=mediainfo_mediaCover],html[border-radius-bangumi] a[class^=mediainfo_btnHome],html[border-radius-bangumi] [class^=follow_btnFollow],html[border-radius-bangumi] [class^=vipPaybar_textWrap__QARKv],html[border-radius-bangumi] [class^=eplist_ep_list_wrapper],html[border-radius-bangumi] [class^=RecommendItem_cover],html[border-radius-bangumi] [class^=imageListItem_wrap] [class^=imageListItem_coverWrap],html[border-radius-bangumi] [class^=navTools_navMenu]>*,html[border-radius-bangumi] [class^=navTools_item],html[border-radius-bangumi] #nav-searchform,html[border-radius-bangumi] .nav-search-content,html[border-radius-bangumi] .v-popover-content,html[border-radius-bangumi] .van-popover,html[border-radius-bangumi] .v-popover,html[border-radius-bangumi] .pic-box,html[border-radius-bangumi] .card-box .pic-box .pic,html[border-radius-bangumi] .bui-collapse-header,html[border-radius-bangumi] .base-video-sections-v1,html[border-radius-bangumi] .bili-header .search-panel,html[border-radius-bangumi] .bili-header .header-upload-entry,html[border-radius-bangumi] .bpx-player-container .bpx-player-sending-bar .bpx-player-video-inputbar,html[border-radius-bangumi] .video-tag-container .tag-panel .tag-link,html[border-radius-bangumi] .video-tag-container .tag-panel .show-more-btn,html[border-radius-bangumi] .vcd .cover img,html[border-radius-bangumi] .vcd *,html[border-radius-bangumi] .upinfo-btn-panel *,html[border-radius-bangumi] .fixed-sidenav-storage div,html[border-radius-bangumi] .reply-box-textarea,html[border-radius-bangumi] .reply-box-send,html[border-radius-bangumi] .reply-box-send:after{border-radius:3px!important}html[border-radius-bangumi] .bpx-player-container .bpx-player-sending-bar .bpx-player-video-inputbar .bpx-player-dm-btn-send,html[border-radius-bangumi] .bpx-player-container .bpx-player-sending-bar .bpx-player-video-inputbar-wrap{border-radius:0 3px 3px 0!important}html[border-radius-bangumi] .bpx-player-dm-btn-send .bui-button{border-radius:3px 0 0 3px!important}html[border-radius-homepage] #nav-searchform,html[border-radius-homepage] .nav-search-content,html[border-radius-homepage] .history-item,html[border-radius-homepage] .header-upload-entry,html[border-radius-homepage] .bili-header .search-panel,html[border-radius-homepage] .bili-header .header-upload-entry,html[border-radius-homepage] .bili-header__channel .channel-link,html[border-radius-homepage] .channel-entry-more__link,html[border-radius-homepage] .header-channel-fixed-right-item,html[border-radius-homepage] .recommended-swipe-body,html[border-radius-homepage] .bili-video-card .bili-video-card__cover,html[border-radius-homepage] .bili-video-card .bili-video-card__image,html[border-radius-homepage] .bili-video-card .bili-video-card__info--icon-text,html[border-radius-homepage] .bili-live-card,html[border-radius-homepage] .floor-card,html[border-radius-homepage] .floor-card .badge,html[border-radius-homepage] .single-card.floor-card .floor-card-inner,html[border-radius-homepage] .single-card.floor-card .cover-container,html[border-radius-homepage] .primary-btn,html[border-radius-homepage] .flexible-roll-btn,html[border-radius-homepage] .palette-button-wrap .flexible-roll-btn-inner,html[border-radius-homepage] .palette-button-wrap .storage-box,html[border-radius-homepage] .palette-button-wrap,html[border-radius-homepage] .v-popover-content{border-radius:3px!important}html[border-radius-homepage] .bili-video-card__stats{border-bottom-left-radius:3px!important;border-bottom-right-radius:3px!important}html[border-radius-homepage] .floor-card .layer{display:none!important}html[border-radius-homepage] .single-card.floor-card{border:none!important}html[border-radius-popular] #nav-searchform,html[border-radius-popular] .nav-search-content,html[border-radius-popular] .v-popover-content,html[border-radius-popular] .van-popover,html[border-radius-popular] .v-popover,html[border-radius-popular] .bili-header .search-panel,html[border-radius-popular] .bili-header .header-upload-entry,html[border-radius-popular] .upinfo-btn-panel *,html[border-radius-popular] .rank-list .rank-item>.content>.img,html[border-radius-popular] .card-list .video-card .video-card__content,html[border-radius-popular] .video-list .video-card .video-card__content,html[border-radius-popular] .fixed-sidenav-storage div,html[border-radius-popular] .fixed-sidenav-storage a{border-radius:3px!important}html[border-radius-channel] #nav-searchform,html[border-radius-channel] .nav-search-content,html[border-radius-channel] .history-item,html[border-radius-channel] .header-upload-entry,html[border-radius-channel] .bili-header .search-panel,html[border-radius-channel] .bili-header .header-upload-entry,html[border-radius-channel] .bili-header__channel .channel-link,html[border-radius-channel] .channel-entry-more__link,html[border-radius-channel] .header-channel-fixed-right-item,html[border-radius-channel] .recommended-swipe-body,html[border-radius-channel] .bili-video-card .bili-video-card__cover,html[border-radius-channel] .bili-video-card .bili-video-card__image,html[border-radius-channel] .bili-video-card .bili-video-card__info--icon-text,html[border-radius-channel] .bili-live-card,html[border-radius-channel] .floor-card,html[border-radius-channel] .floor-card .badge,html[border-radius-channel] .single-card.floor-card .floor-card-inner,html[border-radius-channel] .single-card.floor-card .cover-container,html[border-radius-channel] .primary-btn,html[border-radius-channel] .flexible-roll-btn,html[border-radius-channel] .palette-button-wrap .flexible-roll-btn-inner,html[border-radius-channel] .palette-button-wrap .storage-box,html[border-radius-channel] .palette-button-wrap,html[border-radius-channel] .v-popover-content{border-radius:3px!important}html[border-radius-channel] .bili-video-card__stats{border-bottom-left-radius:3px!important;border-bottom-right-radius:3px!important}html[border-radius-channel] .floor-card .layer{display:none!important}html[border-radius-channel] .single-card.floor-card{border:none!important}html[beauty-scrollbar] ::-webkit-scrollbar{width:8px!important;height:8px!important;background:transparent!important}html[beauty-scrollbar] ::-webkit-scrollbar:hover{background:#80808066!important}html[beauty-scrollbar] ::-webkit-scrollbar-thumb{border:1px solid rgba(255,255,255,.4)!important;background-color:#0006!important;z-index:2147483647;border-radius:8px!important;background-clip:content-box!important}html[beauty-scrollbar] ::-webkit-scrollbar-thumb:hover{background-color:#000c!important}html[beauty-scrollbar] ::-webkit-scrollbar-thumb:active{background-color:#0009!important}@supports (-moz-appearance: none){html[beauty-scrollbar],html[beauty-scrollbar] *{scrollbar-color:#cdcdcd transparent!important;scrollbar-width:thin}}html[hide-footer] .footer.bili-footer,html[hide-footer] .international-footer,html[hide-footer] #biliMainFooter,html[hide-footer] .biliMainFooterWrapper,html[hide-footer] .link-footer-ctnr{display:none!important}html[font-patch-live] body,html[font-patch-live] .gift-item,html[font-patch-live] .feed-card,html[font-patch-live] .bb-comment,html[font-patch-live] .comment-bilibili-fold{font-family:PingFang SC,HarmonyOS_Regular,Helvetica Neue,Microsoft YaHei,sans-serif!important;font-weight:400}html[font-patch-dynamic] .reply-item .root-reply-container .content-warp .user-info .user-name{font-family:PingFang SC,HarmonyOS_Medium,Helvetica Neue,Microsoft YaHei,sans-serif!important;font-weight:500!important;font-size:14px!important}html[font-patch-dynamic] body{font-family:PingFang SC,HarmonyOS_Regular,Helvetica Neue,Microsoft YaHei,sans-serif!important;font-weight:400}html[font-patch-popular] #internationalHeader,html[font-patch-popular] .international-header,html[font-patch-popular] .suggest-wrap,html[font-patch-popular] .van-popover{font-family:PingFang SC,HarmonyOS_Regular,Helvetica Neue,Microsoft YaHei,sans-serif!important;font-weight:400!important}html[font-patch-popular] #app,html[font-patch-popular] .video-card .video-name{font-family:PingFang SC,HarmonyOS_Medium,Helvetica Neue,Microsoft YaHei,sans-serif!important;font-weight:500!important}html[font-patch-watchlater] body,html[font-patch-space] body,html[font-patch-space] .h .h-sign,html[font-patch-space] .reply-item .root-reply-container .content-warp .user-info .user-name,html[font-patch-space] .bili-comment.browser-pc *{font-family:PingFang SC,HarmonyOS_Regular,Helvetica Neue,Microsoft YaHei,sans-serif!important;font-weight:400}html[font-patch-space] body,html[font-patch-space] .n .n-text{font-size:14px}html[font-patch-space] #page-index .channel .channel-item .small-item,html[font-patch-space] #page-video .page-head__left .be-tab-item,html[font-patch-space] .n .n-data .n-data-k,html[font-patch-space] .n .n-data .n-data-v{font-size:13px}html[common-hide-nav-search-rcmd] #nav-searchform .nav-search-input::-moz-placeholder{color:transparent}html[common-hide-nav-search-rcmd] #nav-searchform .nav-search-input::placeholder{color:transparent}html[common-hide-nav-search-rcmd] #nav-searchform .nav-search-input{-webkit-user-select:none;-moz-user-select:none;user-select:none}html[common-hide-nav-search-rcmd] #internationalHeader #nav_searchform input::-moz-placeholder{color:transparent}html[common-hide-nav-search-rcmd] #internationalHeader #nav_searchform input::placeholder{color:transparent}html[common-hide-nav-search-rcmd] #internationalHeader #nav_searchform input{-webkit-user-select:none;-moz-user-select:none;user-select:none}html[common-hide-nav-search-history] .search-panel .history{display:none}html[common-hide-nav-search-history] #internationalHeader .nav-search-box .history{display:none!important}html[common-hide-nav-search-trending] .search-panel .trending{display:none}html[common-hide-nav-search-trending] #internationalHeader .nav-search-box .trending{display:none!important}html[common-nav-search-middle-justify] .center-search__bar{margin:0 auto!important}html[common-hide-nav-homepage-logo] .bili-header__bar .left-entry li:has(>a[href="//www.bilibili.com"]) .left-entry__title>svg{display:none!important}html[common-hide-nav-homepage-logo] .bili-header__bar .left-entry .zhuzhan-icon{display:none!important}html[common-hide-nav-homepage-logo] #internationalHeader li.nav-link-item:has(>span>a[href="//www.bilibili.com"],>span>a[href="www.bilibili.com/"]) .navbar_logo{display:none!important}html[common-hide-nav-homepage-logo] #biliMainHeader .left-entry .v-popover-wrap a[href="https://www.bilibili.com/"]>svg{display:none!important}html[common-hide-nav-homepage-logo] [class^=BiliHeaderV3_leftEntryTitle__]>svg{display:none!important}html[common-hide-nav-homepage] .bili-header__bar .left-entry .mini-header__title{display:none!important}html[common-hide-nav-homepage] .bili-header__bar .left-entry .zhuzhan-icon+span{display:none!important}html[common-hide-nav-homepage] #internationalHeader li.nav-link-item:has(>span>a[href="//www.bilibili.com"]) :not(svg){color:transparent;-webkit-user-select:none;-moz-user-select:none;user-select:none}html[common-hide-nav-homepage] #internationalHeader li.nav-link-item:has(>span>a[href="//www.bilibili.com"]) .navbar_pullup{display:none!important}html[common-hide-nav-homepage] #biliMainHeader .left-entry .v-popover-wrap a[href="https://www.bilibili.com/"] .mini-header__title{display:none!important}html[common-hide-nav-homepage] #biliMainHeader .bili-header .left-entry__title .mini-header__logo{margin-right:0!important}html[common-hide-nav-homepage] [class^=BiliHeaderV3_leftEntryTitle__]>div{display:none!important}html[common-hide-nav-anime] .bili-header__bar .left-entry li:has(.default-entry[href="//www.bilibili.com/anime/"]){display:none!important}html[common-hide-nav-anime] #internationalHeader li.nav-link-item:has(>a[href*="bilibili.com/anime"]){display:none!important}html[common-hide-nav-anime] #biliMainHeader .left-entry .v-popover-wrap:has(>a[href*="bilibili.com/anime"]){display:none!important}html[common-hide-nav-anime] [class^=BiliHeaderV3_leftEntry__] li:has(a[href*="bilibili.com/anime"]){display:none!important}html[common-hide-nav-live] .bili-header__bar .left-entry li:has(.default-entry[href="//live.bilibili.com"],.default-entry[href="//live.bilibili.com/"]){display:none!important}html[common-hide-nav-live] #internationalHeader li.nav-link-item:has(>span>a[href*="live.bilibili.com"]){display:none!important}html[common-hide-nav-live] #biliMainHeader .left-entry .v-popover-wrap:has(>a[href*="live.bilibili.com"]){display:none!important}html[common-hide-nav-live] [class^=BiliHeaderV3_leftEntry__] li:has(a[href*="live.bilibili.com"]){display:none!important}html[common-hide-nav-game] .bili-header__bar .left-entry li:has(.default-entry[href^="//game.bilibili.com"]){display:none!important}html[common-hide-nav-game] #internationalHeader li.nav-link-item:has(>span>a[href*="game.bilibili.com"]){display:none!important}html[common-hide-nav-game] #biliMainHeader .left-entry .v-popover-wrap:has(>a[href*="game.bilibili.com"]){display:none!important}html[common-hide-nav-game] [class^=BiliHeaderV3_leftEntry__] li:has(a[href*="game.bilibili.com"]){display:none!important}html[common-hide-nav-vipshop] .bili-header__bar .left-entry li:has(.default-entry[href^="//show.bilibili.com"]){display:none!important}html[common-hide-nav-vipshop] #internationalHeader li.nav-link-item:has(>a[href*="show.bilibili.com"]){display:none!important}html[common-hide-nav-vipshop] #biliMainHeader .left-entry .v-popover-wrap:has(>a[href*="show.bilibili.com"]){display:none!important}html[common-hide-nav-vipshop] [class^=BiliHeaderV3_leftEntry__] li:has(a[href*="show.bilibili.com"]){display:none!important}html[common-hide-nav-manga] .bili-header__bar .left-entry li:has(.default-entry[href^="//manga.bilibili.com"]){display:none!important}html[common-hide-nav-manga] #internationalHeader li.nav-link-item:has(>span>a[href*="manga.bilibili.com"]){display:none!important}html[common-hide-nav-manga] #biliMainHeader .left-entry .v-popover-wrap:has(>a[href*="manga.bilibili.com"]){display:none!important}html[common-hide-nav-manga] [class^=BiliHeaderV3_leftEntry__] li:has(a[href*="manga.bilibili.com"]){display:none!important}html[common-hide-nav-match] .bili-header__bar .left-entry li:has(.default-entry[href^="//www.bilibili.com/match/"],.default-entry[href^="//www.bilibili.com/v/game/match/"]){display:none!important}html[common-hide-nav-match] #internationalHeader li.nav-link-item:has(>a[href*="bilibili.com/match/"]){display:none!important}html[common-hide-nav-match] #biliMainHeader .left-entry .v-popover-wrap:has(>a[href*="bilibili.com/match/"]){display:none!important}html[common-hide-nav-match] [class^=BiliHeaderV3_leftEntry__] li:has(a[href*="www.bilibili.com/v/game/match"]){display:none!important}html[common-hide-nav-bdu] .bili-header__bar .left-entry li:has(>div>a[href*="bilibili.com/BPU20"]){display:none!important}html[common-hide-nav-bml] .bili-header__bar .left-entry li:has(>div>a[href*="bml.bilibili.com"]){display:none!important}html[common-hide-nav-bml] #internationalHeader li.nav-link-item:has(a[href*="bml.bilibili.com"]){display:none!important}html[common-hide-nav-download-app] .bili-header__bar .left-entry li:has(a[href="//app.bilibili.com"]){display:none!important}html[common-hide-nav-download-app] #internationalHeader li.nav-link-item:has(a[href*="app.bilibili.com"]){display:none!important}html[common-hide-nav-download-app] #biliMainHeader .left-entry .v-popover-wrap:has(>a[href*="app.bilibili.com"]){display:none!important}html[common-hide-nav-blackboard] .bili-header__bar .left-entry .v-popover-wrap.left-loc-entry{display:none!important}html[common-hide-nav-blackboard] .bili-header__bar .left-entry li:has(>a[href*="bilibili.com/blackboard"]){display:none!important}html[common-hide-nav-blackboard] .bili-header__bar .left-entry li:has(>div>a[href*="bilibili.com/blackboard"]){display:none!important}html[common-hide-nav-blackboard] .bili-header__bar .left-entry li:has(>a[href*="bilibili.com/video/"]){display:none!important}html[common-hide-nav-blackboard] .bili-header__bar .left-entry li:has(>div>a[href*="bilibili.com/video/"]){display:none!important}html[common-hide-nav-blackboard] #internationalHeader .nav-link-item:has(.loc-mc-box,span>a[href*="bilibili.com/blackboard"]){display:none!important}html[common-hide-nav-blackboard] #internationalHeader .nav-link-item:has(.loc-mc-box,span>a[href*="www.bilibili.com/bangumi/play/ss"]){display:none!important}html[common-hide-nav-channel-panel-popover] .bili-header .left-entry .bili-header-channel-panel,html[common-hide-nav-channel-panel-popover] .bili-header .left-entry .mini-header__title .mini-header__arrow{display:none!important}html[common-hide-nav-anime-popover] .bili-header__bar .left-entry .default-entry[href*="//www.bilibili.com/anime/"]+.v-popover{display:none!important}html[common-hide-nav-live-popover] .bili-header__bar .left-entry :is(.default-entry[href*="//live.bilibili.com"])+.v-popover{display:none!important}html[common-hide-nav-game-popover] .bili-header__bar .left-entry .default-entry[href*="//game.bilibili.com"]+.v-popover{display:none!important}html[common-hide-nav-manga-popover] .bili-header__bar .left-entry .default-entry[href*="//manga.bilibili.com"]+.v-popover{display:none!important}html[common-hide-nav-avatar] .right-entry .v-popover-wrap.header-avatar-wrap{display:none!important}html[common-hide-nav-avatar] #internationalHeader .nav-user-center .item:has(.mini-avatar){display:none!important}html[common-hide-nav-vip] .right-entry .vip-wrap:has([href*="//account.bilibili.com/big"]){display:none!important}html[common-hide-nav-vip] #internationalHeader .nav-user-center .item:has(.mini-vip){display:none!important}html[common-hide-nav-message] .right-entry .v-popover-wrap:has([href*="//message.bilibili.com"],[data-idx=message]){display:none!important}html[common-hide-nav-message] #internationalHeader .nav-user-center .item:has(.nav-item-message){display:none!important}html[common-hide-nav-message-red-num] .right-entry .v-popover-wrap:has([href*="//message.bilibili.com"],[data-idx=message]) :is(.red-num--message,.red-point--message){display:none!important}html[common-hide-nav-message-red-num] #internationalHeader .nav-user-center .nav-item-message .num{display:none!important}html[common-hide-nav-dynamic] .right-entry .v-popover-wrap:has([href*="//t.bilibili.com"],[data-idx=dynamic]){display:none!important}html[common-hide-nav-dynamic] #internationalHeader .nav-user-center .item:has(.nav-item-dynamic){display:none!important}html[common-hide-nav-dynamic-red-num] .right-entry .v-popover-wrap:has([href*="//t.bilibili.com"],[data-idx=dynamic]) .red-num--dynamic{display:none!important}html[common-hide-nav-dynamic-red-num] #internationalHeader .nav-user-center .nav-item-dynamic .num{display:none!important}html[common-hide-nav-favorite] .right-entry .v-popover-wrap:has(.right-entry__outside[href$="/favlist"]){display:none!important}html[common-hide-nav-favorite] #internationalHeader .nav-user-center .item:has(.mini-favorite){display:none!important}html[common-hide-nav-history] .right-entry .v-popover-wrap:has([href*="www.bilibili.com/account/history"],[data-idx=history]){display:none!important}html[common-hide-nav-history] #internationalHeader .nav-user-center .item:has(.mini-history){display:none!important}html[common-hide-nav-member] .right-entry .right-entry-item:has(a[href*="//member.bilibili.com/platform/home"],[data-idx=creation]){display:none!important}html[common-hide-nav-member] #internationalHeader .nav-user-center .item:has(a[href*="member.bilibili.com/platform/home"]){display:none!important}html[common-hide-nav-upload] .right-entry .right-entry-item.right-entry-item--upload{visibility:hidden!important}html[common-hide-nav-upload] #internationalHeader .nav-user-center>div:has(.mini-upload){visibility:hidden!important}html[common-hide-nav-upload] [class^=BiliHeaderV3_headerUploadEntry]{visibility:hidden!important}html[common-header-bar-padding-left] .bili-header .bili-header__bar,html[common-header-bar-padding-left] .mini-header__content,html[common-header-bar-padding-left] [class^=BiliHeaderV3_biliHeaderBar___]{padding-left:var(--common-header-bar-padding-left)!important}html[common-header-bar-search-width] .bili-header .center-search-container .center-search__bar,html[common-header-bar-search-width] .bili-header-m .nav-search-box,html[common-header-bar-search-width] .international-header .nav-search-box{width:var(--common-header-bar-search-width)!important;max-width:var(--common-header-bar-search-width)!important;min-width:0!important}html[common-header-bar-search-width] .center-search__bar{margin:0 auto}html[common-header-bar-padding-right] .bili-header .bili-header__bar,html[common-header-bar-padding-right] .mini-header__content,html[common-header-bar-padding-right] [class^=BiliHeaderV3_biliHeaderBar___]{padding-right:var(--common-header-bar-padding-right)!important}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.a.woff2) format("woff2");unicode-range:U+9aa2-ffe5}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.b.woff2) format("woff2");unicode-range:U+8983-9aa0}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.c.woff2) format("woff2");unicode-range:U+78f2-897b}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.d.woff2) format("woff2");unicode-range:U+646d-78d9}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.e.woff2) format("woff2");unicode-range:U+30e0-6445}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.f.woff2) format("woff2");unicode-range:U+101-30df}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.g.woff2) format("woff2");unicode-range:U+9aa8,U+9ab8,U+9ad3,U+9ad8,U+9b03,U+9b3c,U+9b41-9b42,U+9b44,U+9b4f,U+9b54,U+9c7c,U+9c81,U+9c8d,U+9c9c,U+9ca4,U+9cb8,U+9cc3,U+9cd6,U+9cde,U+9e1f,U+9e21,U+9e23,U+9e25-9e26,U+9e2d,U+9e2f,U+9e33,U+9e35,U+9e3d,U+9e3f,U+9e43,U+9e45,U+9e4a,U+9e4f,U+9e64,U+9e70,U+9e7f,U+9e93,U+9ea6,U+9ebb,U+9ec4,U+9ecd-9ece,U+9ed1,U+9ed4,U+9ed8,U+9f0e,U+9f13,U+9f20,U+9f3b,U+9f50,U+9f7f,U+9f84,U+9f8b,U+9f99-9f9a,U+9f9f,U+ff01,U+ff08-ff09,U+ff0c,U+ff1a-ff1b,U+ff1f}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.h.woff2) format("woff2");unicode-range:U+975b,U+975e,U+9760-9762,U+9769,U+9773-9774,U+9776,U+978b,U+978d,U+9798,U+97a0,U+97ad,U+97e6-97e7,U+97e9,U+97ed,U+97f3,U+97f5-97f6,U+9875-9877,U+9879-987b,U+987d-987f,U+9881-9882,U+9884-9888,U+988a,U+9890-9891,U+9893,U+9896-9898,U+989c-989d,U+98a0,U+98a4,U+98a7,U+98ce,U+98d8,U+98de-98df,U+9910,U+9965,U+996d-9972,U+9975-9976,U+997a,U+997c,U+997f,U+9981,U+9985-9986,U+9988,U+998b,U+998f,U+9992,U+9996,U+9999,U+9a6c-9a71,U+9a73-9a74,U+9a76,U+9a79,U+9a7b-9a7c,U+9a7e,U+9a82,U+9a84,U+9a86-9a87,U+9a8b-9a8c,U+9a8f,U+9a91,U+9a97,U+9a9a,U+9aa1,U+9aa4}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.i.woff2) format("woff2");unicode-range:U+9570,U+9576,U+957f,U+95e8,U+95ea,U+95ed-95f0,U+95f2,U+95f4,U+95f7-95fb,U+95fd,U+9600-9602,U+9605,U+9609,U+960e,U+9610-9611,U+9614,U+961c,U+961f,U+962e,U+9632-9636,U+963b,U+963f-9640,U+9644-9648,U+964b-964d,U+9650,U+9655,U+965b,U+9661-9662,U+9664,U+9668-966a,U+9675-9677,U+9685-9686,U+968b,U+968f-9690,U+9694,U+9698-9699,U+969c,U+96a7,U+96b6,U+96be,U+96c0-96c1,U+96c4-96c7,U+96cc-96cd,U+96cf,U+96d5,U+96e8,U+96ea,U+96f6-96f7,U+96f9,U+96fe,U+9700,U+9704,U+9707,U+9709,U+970d,U+9713,U+9716,U+971c,U+971e,U+9732,U+9738-9739,U+9752,U+9756,U+9759}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.j.woff2) format("woff2");unicode-range:U+9179,U+917f,U+9187,U+9189,U+918b,U+918d,U+9190,U+9192,U+919a-919b,U+91ba,U+91c7,U+91c9-91ca,U+91cc-91cf,U+91d1,U+91dc,U+9274,U+93d6,U+9488-9489,U+948e,U+9492-9493,U+9497,U+9499,U+949d-94a3,U+94a5-94a9,U+94ae,U+94b1,U+94b3,U+94b5,U+94bb,U+94be,U+94c0-94c3,U+94c5-94c6,U+94dc-94dd,U+94e1,U+94e3,U+94ec-94ed,U+94f0-94f2,U+94f6,U+94f8,U+94fa,U+94fe,U+9500-9501,U+9504-9505,U+9508,U+950b-950c,U+9510-9511,U+9517,U+9519-951a,U+9521,U+9523-9526,U+9528,U+952d-9530,U+9539,U+953b,U+9540-9541,U+9547,U+954a,U+954d,U+9550-9551,U+955c,U+9563,U+956d}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.k.woff2) format("woff2");unicode-range:U+9001-9003,U+9005-9006,U+9009-900a,U+900d,U+900f-9012,U+9014,U+9017,U+901a-901b,U+901d-9022,U+902e,U+9038,U+903b-903c,U+903e,U+9041-9042,U+9044,U+9047,U+904d,U+904f-9053,U+9057,U+905b,U+9062-9063,U+9065,U+9068,U+906d-906e,U+9075,U+907d,U+907f-9080,U+9082-9083,U+908b,U+9091,U+9093,U+9099,U+90a2-90a3,U+90a6,U+90aa,U+90ae-90af,U+90b1,U+90b5,U+90b8-90b9,U+90bb,U+90c1,U+90ca,U+90ce,U+90d1,U+90dd,U+90e1,U+90e7-90e8,U+90ed,U+90f4,U+90f8,U+90fd,U+9102,U+9119,U+9149,U+914b-914d,U+9152,U+9157,U+915a,U+915d-915e,U+9161,U+9163,U+9165,U+916a,U+916c,U+916e,U+9171,U+9175-9178}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.l.woff2) format("woff2");unicode-range:U+8e44,U+8e47-8e48,U+8e4a-8e4b,U+8e51,U+8e59,U+8e66,U+8e6c-8e6d,U+8e6f,U+8e72,U+8e74,U+8e76,U+8e7f,U+8e81,U+8e87,U+8e8f,U+8eab-8eac,U+8eaf,U+8eb2,U+8eba,U+8f66-8f69,U+8f6c,U+8f6e-8f72,U+8f74,U+8f7b,U+8f7d,U+8f7f,U+8f83-8f8a,U+8f8d-8f8e,U+8f90-8f91,U+8f93,U+8f95-8f99,U+8f9b-8f9c,U+8f9e-8f9f,U+8fa3,U+8fa8-8fa9,U+8fab,U+8fb0-8fb1,U+8fb9,U+8fbd-8fbe,U+8fc1-8fc2,U+8fc4-8fc5,U+8fc7-8fc8,U+8fce,U+8fd0-8fd1,U+8fd3-8fd5,U+8fd8-8fd9,U+8fdb-8fdf,U+8fe2,U+8fe6,U+8fe8,U+8fea-8feb,U+8fed,U+8ff0,U+8ff3,U+8ff7-8ff9,U+8ffd,U+9000}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.m.woff2) format("woff2");unicode-range:U+8d24-8d31,U+8d34-8d35,U+8d37-8d3f,U+8d41-8d45,U+8d48,U+8d4a-8d4c,U+8d4e-8d50,U+8d54,U+8d56,U+8d58,U+8d5a-8d5b,U+8d5d-8d5e,U+8d60-8d64,U+8d66-8d67,U+8d6b,U+8d70,U+8d74-8d77,U+8d81,U+8d85,U+8d8a-8d8b,U+8d9f,U+8da3,U+8db3-8db4,U+8db8,U+8dbe-8dbf,U+8dc3-8dc4,U+8dcb-8dcc,U+8dd1,U+8dd7,U+8ddb,U+8ddd,U+8ddf,U+8de4,U+8de8,U+8dea,U+8def,U+8df3,U+8df5,U+8df7,U+8dfa-8dfb,U+8e09-8e0a,U+8e0c,U+8e0f,U+8e1d-8e1e,U+8e22,U+8e29-8e2a,U+8e2e,U+8e31,U+8e35,U+8e39,U+8e42}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.n.woff2) format("woff2");unicode-range:U+8bc9-8bcd,U+8bcf,U+8bd1,U+8bd3,U+8bd5,U+8bd7-8bd8,U+8bda-8bdb,U+8bdd-8bde,U+8be0-8be9,U+8beb-8bf5,U+8bf7-8bf8,U+8bfa-8bfb,U+8bfd-8c01,U+8c03-8c06,U+8c08,U+8c0a-8c0b,U+8c0d-8c13,U+8c15,U+8c17,U+8c19-8c1c,U+8c22-8c24,U+8c26-8c2a,U+8c2c-8c2d,U+8c30-8c35,U+8c37,U+8c41,U+8c46,U+8c4c,U+8c61-8c62,U+8c6a-8c6b,U+8c79-8c7a,U+8c82,U+8c89,U+8c8c,U+8d1d-8d1f,U+8d21-8d23}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.o.woff2) format("woff2");unicode-range:U+889c,U+88a4,U+88ab,U+88ad,U+88b1,U+88c1-88c2,U+88c5-88c6,U+88c9,U+88d4-88d5,U+88d8-88d9,U+88df,U+88e3-88e4,U+88e8,U+88f1,U+88f3-88f4,U+88f8-88f9,U+88fe,U+8902,U+8910,U+8912-8913,U+891a-891b,U+8921,U+8925,U+892a-892b,U+8934,U+8936,U+8941,U+8944,U+895e-895f,U+8966,U+897f,U+8981,U+8986,U+89c1-89c2,U+89c4-89c6,U+89c8-89cb,U+89ce,U+89d0-89d2,U+89e3,U+89e5-89e6,U+8a00,U+8a07,U+8a79,U+8a89-8a8a,U+8a93,U+8b66,U+8b6c,U+8ba1-8bab,U+8bad-8bb0,U+8bb2-8bb3,U+8bb6-8bba,U+8bbc-8bc1,U+8bc4-8bc6,U+8bc8}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.p.woff2) format("woff2");unicode-range:U+8695,U+869c,U+86a3-86a4,U+86a7,U+86aa,U+86af,U+86b1,U+86c0,U+86c6-86c7,U+86ca-86cb,U+86d0,U+86d4,U+86d9,U+86db,U+86df,U+86e4,U+86ee,U+86f0,U+86f9,U+86fe,U+8700,U+8702-8703,U+8708-8709,U+870d,U+8712-8713,U+8715,U+8717-8718,U+871a,U+871c,U+8721,U+8725,U+8734,U+8737,U+873b,U+873f,U+8747,U+8749,U+874c,U+874e,U+8757,U+8759,U+8760,U+8763,U+8774,U+8776,U+877c,U+8782-8783,U+8785,U+878d,U+8793,U+879f,U+87af,U+87b3,U+87ba,U+87c6,U+87ca,U+87d1-87d2,U+87e0,U+87e5,U+87f9,U+87fe,U+8815,U+8822,U+8839,U+8840,U+8845,U+884c-884d,U+8854,U+8857,U+8859,U+8861,U+8863,U+8865,U+8868,U+886b-886c,U+8870,U+8877,U+887d-887f,U+8881-8882,U+8884-8885,U+8888,U+888b,U+888d,U+8892,U+8896}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.q.woff2) format("woff2");unicode-range:U+83dc-83dd,U+83e0,U+83e9,U+83f1-83f2,U+8403-8404,U+840b-840e,U+841d,U+8424-8428,U+843d,U+8451,U+8457,U+8459,U+845b,U+8461,U+8463,U+8469,U+846b-846c,U+8471,U+8475,U+847a,U+8482,U+848b,U+8499,U+849c,U+84b2,U+84b8,U+84bf,U+84c4,U+84c9,U+84d1,U+84d6,U+84dd,U+84df,U+84e6,U+84ec,U+8511,U+8513,U+8517,U+851a,U+851f,U+8521,U+852b-852c,U+8537,U+853b-853d,U+8549-854a,U+8559,U+8574,U+857e,U+8584,U+8587,U+858f,U+859b,U+85aa,U+85af-85b0,U+85c9,U+85cf-85d0,U+85d3,U+85d5,U+85e4,U+85e9,U+85fb,U+8611,U+8638,U+864e-8651,U+8654,U+865a,U+865e,U+866b-866c,U+8671,U+8679,U+867d-867e,U+8680-8682,U+868a,U+868c-868d,U+8693}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.r.woff2) format("woff2");unicode-range:U+8273,U+827a,U+827e,U+8282,U+828a-828b,U+828d,U+8292,U+8299,U+829c-829d,U+82a5-82a6,U+82a9,U+82ab-82ad,U+82af,U+82b1,U+82b3,U+82b7-82b9,U+82bd,U+82c7,U+82cd,U+82cf,U+82d1,U+82d3-82d4,U+82d7,U+82db,U+82de-82df,U+82e3,U+82e5-82e6,U+82eb,U+82ef,U+82f1,U+82f9,U+82fb,U+8301-8305,U+8309,U+830e,U+8314,U+8317,U+8327-8328,U+832b-832c,U+832f,U+8335-8336,U+8338-8339,U+8340,U+8346-8347,U+8349,U+834f-8352,U+8354,U+835a,U+835c,U+8361,U+8363-8364,U+8367,U+836b,U+836f,U+8377,U+837c,U+8386,U+8389,U+838e,U+8393,U+839e,U+83a0,U+83ab,U+83b1-83b4,U+83b7,U+83b9-83ba,U+83bd,U+83c1,U+83c5,U+83c7,U+83ca,U+83cc,U+83cf}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.s.woff2) format("woff2");unicode-range:U+80de,U+80e1,U+80e7,U+80ea-80eb,U+80ed,U+80ef-80f0,U+80f3-80f4,U+80f6,U+80f8,U+80fa,U+80fd,U+8102,U+8106,U+8109-810a,U+810d,U+810f-8111,U+8113-8114,U+8116,U+8118,U+811a,U+812f,U+8131,U+8138,U+813e,U+8146,U+814a-814c,U+8150-8151,U+8154-8155,U+8165,U+816e,U+8170,U+8174,U+8179-817c,U+817e-8180,U+818a,U+818f,U+8198,U+819b-819d,U+81a8,U+81b3,U+81ba-81bb,U+81c0,U+81c2-81c3,U+81c6,U+81ca,U+81e3,U+81ea,U+81ec-81ed,U+81f3-81f4,U+81fb-81fc,U+81fe,U+8200,U+8205-8206,U+820c-820d,U+8210,U+8212,U+8214,U+821c,U+821e-821f,U+822a-822c,U+8230-8231,U+8235-8239,U+8247,U+8258,U+826f-8270,U+8272}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.t.woff2) format("woff2");unicode-range:U+7f72,U+7f81,U+7f8a,U+7f8c,U+7f8e,U+7f94,U+7f9a,U+7f9e,U+7fa1,U+7fa4,U+7fb2,U+7fb8-7fb9,U+7fbd,U+7fc1,U+7fc5,U+7fcc,U+7fce,U+7fd4-7fd5,U+7fd8,U+7fdf-7fe1,U+7fe6,U+7fe9,U+7ff0-7ff1,U+7ff3,U+7ffb-7ffc,U+8000-8001,U+8003,U+8005,U+800c-800d,U+8010,U+8012,U+8015,U+8017-8019,U+8027,U+802a,U+8033,U+8036-8038,U+803b,U+803d,U+803f,U+8042,U+8046,U+804a-804c,U+8052,U+8054,U+8058,U+805a,U+806a,U+807f,U+8083-8084,U+8086-8087,U+8089,U+808b-808c,U+8096,U+8098,U+809a-809b,U+809d,U+80a0-80a2,U+80a4-80a5,U+80a9-80aa,U+80ae-80af,U+80b2,U+80b4,U+80ba,U+80be-80c1,U+80c3-80c4,U+80c6,U+80cc,U+80ce,U+80d6,U+80da-80dc}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.u.woff2) format("woff2");unicode-range:U+7eb5-7eba,U+7ebd,U+7ebf,U+7ec2-7eca,U+7ecd-7ed5,U+7ed8-7edf,U+7ee1-7ee3,U+7ee5-7ee7,U+7ee9-7eeb,U+7eed,U+7eef-7ef0,U+7ef3-7ef8,U+7efc-7efd,U+7eff-7f00,U+7f04-7f09,U+7f0e-7f0f,U+7f13-7f16,U+7f18,U+7f1a,U+7f1c-7f1d,U+7f1f-7f22,U+7f24-7f26,U+7f28-7f2a,U+7f2d-7f2e,U+7f30,U+7f34,U+7f38,U+7f3a,U+7f42,U+7f50-7f51,U+7f54-7f55,U+7f57,U+7f5a,U+7f61-7f62,U+7f69-7f6a,U+7f6e}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.v.woff2) format("woff2");unicode-range:U+7b4c,U+7b4f-7b52,U+7b54,U+7b56,U+7b5b,U+7b5d,U+7b75,U+7b77,U+7b79,U+7b7e,U+7b80,U+7b8d,U+7b94-7b95,U+7b97,U+7ba1,U+7ba9-7bab,U+7bad,U+7bb1,U+7bb8,U+7bc6-7bc7,U+7bd1,U+7bd3,U+7bd9,U+7bdd,U+7be1,U+7bee,U+7bf1,U+7bf7,U+7bfe,U+7c07,U+7c0c,U+7c27,U+7c2a,U+7c38,U+7c3f,U+7c41,U+7c4d,U+7c73,U+7c7b,U+7c7d,U+7c89,U+7c92,U+7c95,U+7c97-7c98,U+7c9f,U+7ca4-7ca5,U+7caa,U+7cae,U+7cb1,U+7cb3,U+7cb9,U+7cbc-7cbe,U+7cc5,U+7cca,U+7cd5-7cd7,U+7cd9,U+7cdc,U+7cdf-7ce0,U+7cef,U+7cfb,U+7d0a,U+7d20,U+7d22,U+7d27,U+7d2b,U+7d2f,U+7d6e,U+7e41,U+7e82,U+7ea0-7ea4,U+7ea6-7ea8,U+7eaa-7ead,U+7eaf-7eb3}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.w.woff2) format("woff2");unicode-range:U+7981,U+7984-7985,U+798f,U+79b9,U+79bb,U+79bd-79be,U+79c0-79c1,U+79c3,U+79c6,U+79c9,U+79cb,U+79cd,U+79d1-79d2,U+79d8,U+79df,U+79e3-79e4,U+79e6-79e7,U+79e9,U+79ef-79f0,U+79f8,U+79fb,U+79fd,U+7a00,U+7a0b,U+7a0d-7a0e,U+7a14,U+7a17,U+7a1a,U+7a20,U+7a33,U+7a37,U+7a39,U+7a3b-7a3d,U+7a3f,U+7a46,U+7a51,U+7a57,U+7a74,U+7a76-7a77,U+7a79-7a7a,U+7a7f,U+7a81,U+7a83-7a84,U+7a88,U+7a8d,U+7a91-7a92,U+7a95-7a98,U+7a9c-7a9d,U+7a9f,U+7aa5-7aa6,U+7abf,U+7acb,U+7ad6,U+7ad9,U+7ade-7ae0,U+7ae3,U+7ae5-7ae6,U+7aed,U+7aef,U+7af9,U+7afd,U+7aff,U+7b03,U+7b06,U+7b08,U+7b0b,U+7b11,U+7b14,U+7b19,U+7b1b,U+7b20,U+7b26,U+7b28,U+7b2c,U+7b3a,U+7b3c,U+7b49,U+7b4b}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.x.woff2) format("woff2");unicode-range:U+77aa,U+77ac,U+77b0,U+77b3,U+77b5,U+77bb,U+77bf,U+77d7,U+77db-77dc,U+77e2-77e3,U+77e5,U+77e9,U+77eb,U+77ed-77ee,U+77f3,U+77fd-77ff,U+7801-7802,U+780c-780d,U+7812,U+7814,U+7816,U+781a,U+781d,U+7823,U+7825,U+7827,U+7830,U+7834,U+7837-7838,U+783a,U+783e,U+7840,U+7845,U+784c,U+7852,U+7855,U+785d,U+786b-786c,U+786e,U+787c,U+7887,U+7889,U+788c-788e,U+7891,U+7897-7898,U+789c,U+789f,U+78a5,U+78a7,U+78b0-78b1,U+78b3-78b4,U+78be,U+78c1,U+78c5,U+78ca-78cb,U+78d0,U+78d5,U+78e8,U+78ec,U+78f7,U+78fa,U+7901,U+7934,U+793a,U+793c,U+793e,U+7940-7941,U+7948,U+7956-7957,U+795a-795b,U+795d-7960,U+7965,U+7968,U+796d,U+796f,U+7977-7978,U+797a,U+7980}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.y.woff2) format("woff2");unicode-range:U+761f,U+7624,U+7626,U+7629-762b,U+7634-7635,U+7638,U+763e,U+764c,U+7656,U+765e,U+7663,U+766b,U+7678,U+767b,U+767d-767e,U+7682,U+7684,U+7686-7688,U+768b,U+768e,U+7691,U+7693,U+7696,U+7699,U+76ae,U+76b1,U+76b4,U+76bf,U+76c2,U+76c5-76c6,U+76c8,U+76ca,U+76ce-76d2,U+76d4,U+76d6-76d8,U+76db,U+76df,U+76ee-76ef,U+76f2,U+76f4,U+76f8-76f9,U+76fc,U+76fe,U+7701,U+7708-7709,U+770b,U+771f-7720,U+7726,U+7728-7729,U+772f,U+7736-7738,U+773a,U+773c,U+7740-7741,U+7750-7751,U+775a-775b,U+7761,U+7763,U+7765-7766,U+7768,U+776b-776c,U+7779,U+777d,U+777f,U+7784-7785,U+778c,U+778e,U+7791-7792,U+779f-77a0,U+77a5,U+77a7,U+77a9}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.z.woff2) format("woff2");unicode-range:U+7435-7436,U+743c,U+7455,U+7459-745a,U+745c,U+745e-745f,U+7470,U+7476,U+7480,U+7483,U+7487,U+749c,U+749e,U+74a7-74a8,U+74dc,U+74e2-74e4,U+74e6,U+74ee,U+74f6-74f7,U+7504,U+7518,U+751a,U+751c,U+751f,U+7525,U+7528-7529,U+752b-752d,U+7530-7533,U+7535,U+7537-7538,U+753b,U+7545,U+754c,U+754f,U+7554,U+7559,U+755c,U+7565-7566,U+756a,U+7574,U+7578,U+7583,U+7586,U+758f,U+7591,U+7597,U+7599-759a,U+759f,U+75a1,U+75a4-75a5,U+75ab,U+75ae-75b2,U+75b4-75b5,U+75b9,U+75bc-75be,U+75c5,U+75c7-75ca,U+75cd,U+75d2,U+75d4-75d5,U+75d8,U+75db,U+75de,U+75e2-75e3,U+75e8,U+75ea,U+75f0,U+75f4,U+75f9,U+7600-7601}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.aa.woff2) format("woff2");unicode-range:U+725f,U+7261-7262,U+7267,U+7269,U+7272,U+7275,U+7279-727a,U+7280-7281,U+7284,U+728a,U+7292,U+729f,U+72ac,U+72af,U+72b6-72b9,U+72c1-72c2,U+72c4,U+72c8,U+72ce,U+72d0,U+72d2,U+72d7,U+72d9,U+72de,U+72e0-72e1,U+72e9,U+72ec-72f2,U+72f7-72f8,U+72fc,U+730a,U+730e,U+7316,U+731b-731d,U+7322,U+7325,U+7329-732c,U+732e,U+7334,U+733e-733f,U+7350,U+7357,U+7360,U+736d,U+7384,U+7387,U+7389,U+738b,U+7396,U+739b,U+73a9,U+73ab,U+73af-73b0,U+73b2,U+73b7,U+73ba-73bb,U+73c0,U+73c8,U+73ca,U+73cd,U+73d0-73d1,U+73d9,U+73e0,U+73ed,U+7403,U+7405-7406,U+7409-740a,U+740f-7410,U+741a,U+7422,U+7425,U+742a,U+7433-7434}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ab.woff2) format("woff2");unicode-range:U+706d,U+706f-7070,U+7075-7076,U+7078,U+707c,U+707e-707f,U+7089-708a,U+708e,U+7092,U+7094-7096,U+7099,U+70ab-70af,U+70b1,U+70b3,U+70b8-70b9,U+70bc-70bd,U+70c1-70c3,U+70c8,U+70ca,U+70d8-70d9,U+70db,U+70df,U+70e4,U+70e6-70e7,U+70e9,U+70eb-70ed,U+70ef,U+70f7,U+70f9,U+70fd,U+7109-710a,U+7115,U+7119-711a,U+7126,U+7130-7131,U+7136,U+714c,U+714e,U+715e,U+7164,U+7166-7168,U+716e,U+7172-7173,U+717d,U+7184,U+718a,U+718f,U+7194,U+7198-7199,U+719f-71a0,U+71a8,U+71ac,U+71b9,U+71c3,U+71ce,U+71d5,U+71e5,U+7206,U+722a,U+722c,U+7231,U+7235-7239,U+723d,U+7247-7248,U+724c-724d,U+7252,U+7259,U+725b}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ac.woff2) format("woff2");unicode-range:U+6df7,U+6df9,U+6dfb,U+6e05,U+6e0a,U+6e0d-6e0e,U+6e10,U+6e14,U+6e17,U+6e1a,U+6e1d,U+6e20-6e21,U+6e23-6e25,U+6e29,U+6e2d,U+6e2f,U+6e32,U+6e34,U+6e38,U+6e3a,U+6e43,U+6e4d,U+6e56,U+6e58,U+6e5b,U+6e6e,U+6e7e-6e7f,U+6e83,U+6e85,U+6e89,U+6e90,U+6e9c,U+6ea2,U+6ea5,U+6eaa,U+6eaf,U+6eb6,U+6eba,U+6ec1,U+6ec7,U+6ecb,U+6ed1,U+6ed3-6ed5,U+6eda,U+6ede,U+6ee1,U+6ee4-6ee6,U+6ee8-6ee9,U+6ef4,U+6f02,U+6f06,U+6f09,U+6f0f,U+6f13-6f15,U+6f20,U+6f29-6f2b,U+6f31,U+6f33,U+6f3e,U+6f46-6f47,U+6f4d,U+6f58,U+6f5c,U+6f5e,U+6f62,U+6f66,U+6f6d-6f6e,U+6f84,U+6f88-6f89,U+6f8e,U+6f9c,U+6fa1,U+6fb3,U+6fb9,U+6fc0,U+6fd1-6fd2,U+6fe1,U+7011,U+701a,U+7023,U+704c,U+706b}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ad.woff2) format("woff2");unicode-range:U+6ccc,U+6cd3,U+6cd5,U+6cdb,U+6cde,U+6ce1-6ce3,U+6ce5,U+6ce8,U+6cea-6ceb,U+6cef-6cf1,U+6cf3,U+6cf5,U+6cfb-6cfe,U+6d01,U+6d0b,U+6d12,U+6d17,U+6d1b,U+6d1e,U+6d25,U+6d27,U+6d2a,U+6d31-6d32,U+6d3b-6d3e,U+6d41,U+6d43,U+6d45-6d47,U+6d4a-6d4b,U+6d4e-6d4f,U+6d51,U+6d53,U+6d59-6d5a,U+6d63,U+6d66,U+6d69-6d6a,U+6d6e,U+6d74,U+6d77-6d78,U+6d82,U+6d85,U+6d88-6d89,U+6d8c,U+6d8e,U+6d93,U+6d95,U+6d9b,U+6d9d,U+6d9f-6da1,U+6da3-6da4,U+6da6-6daa,U+6dae-6daf,U+6db2,U+6db5,U+6db8,U+6dc0,U+6dc4-6dc7,U+6dcb-6dcc,U+6dd1,U+6dd6,U+6dd8-6dd9,U+6de1,U+6de4,U+6deb-6dec,U+6dee,U+6df1,U+6df3}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ae.woff2) format("woff2");unicode-range:U+6b92,U+6b96,U+6b9a,U+6ba1,U+6bb4-6bb5,U+6bb7,U+6bbf,U+6bc1,U+6bc5,U+6bcb,U+6bcd,U+6bcf,U+6bd2,U+6bd4-6bd7,U+6bd9,U+6bdb,U+6be1,U+6beb,U+6bef,U+6c05,U+6c0f,U+6c11,U+6c13-6c14,U+6c16,U+6c1b,U+6c1f,U+6c22,U+6c24,U+6c26-6c28,U+6c2e-6c30,U+6c32,U+6c34,U+6c38,U+6c3d,U+6c40-6c42,U+6c47,U+6c49,U+6c50,U+6c55,U+6c57,U+6c5b,U+6c5d-6c61,U+6c64,U+6c68-6c6a,U+6c70,U+6c72,U+6c76,U+6c79,U+6c7d-6c7e,U+6c81-6c83,U+6c86,U+6c88-6c89,U+6c8c,U+6c8f-6c90,U+6c93,U+6c99,U+6c9b,U+6c9f,U+6ca1,U+6ca4-6ca7,U+6caa-6cab,U+6cae,U+6cb3,U+6cb8-6cb9,U+6cbb-6cbf,U+6cc4-6cc5,U+6cc9-6cca}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.af.woff2) format("woff2");unicode-range:U+68ad,U+68af-68b0,U+68b3,U+68b5,U+68c0,U+68c2,U+68c9,U+68cb,U+68cd,U+68d2,U+68d5,U+68d8,U+68da,U+68e0,U+68ee,U+68f1,U+68f5,U+68fa,U+6905,U+690d-690e,U+6912,U+692d,U+6930,U+693d,U+693f,U+6942,U+6954,U+6957,U+695a,U+695e,U+6963,U+696b,U+6977-6978,U+697c,U+6982,U+6984,U+6986,U+6994,U+699c,U+69a8,U+69ad,U+69b4,U+69b7,U+69bb,U+69c1,U+69cc,U+69d0,U+69db,U+69fd,U+69ff,U+6a0a,U+6a1f,U+6a21,U+6a2a,U+6a31,U+6a35,U+6a3d,U+6a44,U+6a47,U+6a58-6a59,U+6a61,U+6a71,U+6a80,U+6a84,U+6a8e,U+6a90,U+6aac,U+6b20-6b23,U+6b27,U+6b32,U+6b3a,U+6b3e,U+6b47,U+6b49,U+6b4c,U+6b62-6b67,U+6b6a,U+6b79,U+6b7b-6b7c,U+6b81,U+6b83-6b84,U+6b86-6b87,U+6b89-6b8b}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ag.woff2) format("woff2");unicode-range:U+6756,U+675c,U+675e-6761,U+6765,U+6768,U+676d,U+676f-6770,U+6773,U+6775,U+6777,U+677c,U+677e-677f,U+6781,U+6784,U+6787,U+6789,U+6790,U+6795,U+6797,U+679a,U+679c-679d,U+67a2-67a3,U+67aa-67ab,U+67ad,U+67af-67b0,U+67b6-67b7,U+67c4,U+67cf-67d4,U+67d9-67da,U+67dc,U+67de,U+67e0,U+67e5,U+67e9,U+67ec,U+67ef,U+67f1,U+67f3-67f4,U+67ff-6800,U+6805,U+6807-6808,U+680b,U+680f,U+6811,U+6813,U+6816-6817,U+6821,U+6829-682a,U+6837-6839,U+683c-683d,U+6840,U+6842-6843,U+6845-6846,U+6848,U+684c,U+6850-6851,U+6853-6854,U+6863,U+6865,U+6868-6869,U+6874,U+6876,U+6881,U+6885-6886,U+6893,U+6897,U+68a2,U+68a6-68a8}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ah.woff2) format("woff2");unicode-range:U+65f7,U+65fa,U+6602,U+6606,U+660a,U+660c,U+660e-660f,U+6613-6614,U+6619,U+661d,U+661f-6620,U+6625,U+6627-6628,U+662d,U+662f,U+6631,U+6635,U+663c,U+663e,U+6643,U+664b-664c,U+664f,U+6652-6653,U+6655-6657,U+665a,U+6664,U+6666,U+6668,U+666e-6670,U+6674,U+6676-6677,U+667a,U+667e,U+6682,U+6684,U+6687,U+668c,U+6691,U+6696-6697,U+669d,U+66a7,U+66ae,U+66b4,U+66d9,U+66dc-66dd,U+66e6,U+66f0,U+66f2-66f4,U+66f9,U+66fc,U+66fe-6700,U+6708-6709,U+670b,U+670d,U+6714-6715,U+6717,U+671b,U+671d,U+671f,U+6726,U+6728,U+672a-672d,U+672f,U+6731,U+6734-6735,U+673a,U+673d,U+6740,U+6742-6743,U+6746,U+6748-6749,U+674e-6751}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ai.woff2) format("woff2");unicode-range:U+6467,U+6469,U+6478-6479,U+6482,U+6485,U+6487,U+6491-6492,U+6495,U+649e,U+64a4,U+64a9,U+64ac-64ae,U+64b0,U+64b5,U+64b8,U+64ba,U+64bc,U+64c2,U+64c5,U+64cd-64ce,U+64d2,U+64d8,U+64de,U+64e2,U+64e6,U+6500,U+6512,U+6518,U+6525,U+652b,U+652f,U+6536,U+6538-6539,U+653b,U+653e-653f,U+6545,U+6548,U+654c,U+654f,U+6551,U+6555-6556,U+6559,U+655b,U+655d-655e,U+6562-6563,U+6566,U+656c,U+6570,U+6572,U+6574,U+6577,U+6587,U+658b-658c,U+6590-6591,U+6593,U+6597,U+6599,U+659c,U+659f,U+65a1,U+65a4-65a5,U+65a7,U+65a9,U+65ab,U+65ad,U+65af-65b0,U+65b9,U+65bd,U+65c1,U+65c4-65c5,U+65cb-65cc,U+65cf,U+65d7,U+65e0,U+65e2,U+65e5-65e9,U+65ec-65ed,U+65f1,U+65f6}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.aj.woff2) format("woff2");unicode-range:U+6323-6325,U+6328,U+632a-632b,U+632f,U+6332,U+633a,U+633d,U+6342,U+6345-6346,U+6349,U+634b-6350,U+6355,U+635e-635f,U+6361-6363,U+6367,U+636e,U+6371,U+6376-6377,U+637a-637b,U+6380,U+6382,U+6387-6389,U+638c,U+638f-6390,U+6392,U+6396,U+6398,U+63a0,U+63a2-63a3,U+63a5,U+63a7-63aa,U+63ac,U+63b0,U+63b3-63b4,U+63b7-63b8,U+63ba,U+63c4,U+63c9,U+63cd,U+63cf-63d0,U+63d2,U+63d6,U+63e1,U+63e3,U+63e9-63ea,U+63ed,U+63f4,U+63f6,U+63fd,U+6400-6402,U+6405,U+640f-6410,U+6413-6414,U+641c,U+641e,U+6421,U+642a,U+642c-642d,U+643a,U+643d,U+6441,U+6444,U+6446-6448,U+644a,U+6452,U+6454,U+6458,U+645e}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ak.woff2) format("woff2");unicode-range:U+6258,U+625b,U+6263,U+6266-6267,U+6269-6270,U+6273,U+6276,U+6279,U+627c,U+627e-6280,U+6284,U+6289-628a,U+6291-6293,U+6295-6298,U+629a-629b,U+62a0-62a2,U+62a4-62a5,U+62a8,U+62ab-62ac,U+62b1,U+62b5,U+62b9,U+62bc-62bd,U+62bf,U+62c2,U+62c4-62ca,U+62cc-62ce,U+62d0,U+62d2-62d4,U+62d6-62d9,U+62db-62dc,U+62df,U+62e2-62e3,U+62e5-62e9,U+62ec-62ed,U+62ef,U+62f1,U+62f3-62f4,U+62f7,U+62fc-62ff,U+6301-6302,U+6307,U+6309,U+630e,U+6311,U+6316,U+631a-631b,U+631d-6321}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.al.woff2) format("woff2");unicode-range:U+60cb,U+60d1,U+60d5,U+60d8,U+60da,U+60dc,U+60df-60e0,U+60e6-60e9,U+60eb-60f0,U+60f3-60f4,U+60f6,U+60f9-60fa,U+6101,U+6108-6109,U+610e-610f,U+6115,U+611a,U+611f-6120,U+6123-6124,U+6127,U+612b,U+613f,U+6148,U+614a,U+614c,U+614e,U+6151,U+6155,U+6162,U+6167-6168,U+6170,U+6175,U+6177,U+618b,U+618e,U+6194,U+61a7-61a9,U+61ac,U+61be,U+61c2,U+61c8,U+61ca,U+61d1-61d2,U+61d4,U+61e6,U+61f5,U+61ff,U+6208,U+620a,U+620c-6212,U+6216,U+6218,U+621a-621b,U+621f,U+622a,U+622c,U+622e,U+6233-6234,U+6237,U+623e-6241,U+6247-6249,U+624b,U+624d-624e,U+6251-6254}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.am.woff2) format("woff2");unicode-range:U+5fcc-5fcd,U+5fcf-5fd2,U+5fd6-5fd9,U+5fdd,U+5fe0-5fe1,U+5fe4,U+5fe7,U+5fea-5feb,U+5ff1,U+5ff5,U+5ffb,U+5ffd-6002,U+6005-6006,U+600d-600f,U+6012,U+6014-6016,U+6019,U+601c-601d,U+6020-6021,U+6025-6028,U+602a,U+602f,U+6035,U+603b-603c,U+6041,U+6043,U+604b,U+604d,U+6050,U+6052,U+6055,U+6059-605a,U+6062-6064,U+6068-606d,U+606f-6070,U+6073,U+6076,U+6078-607c,U+607f,U+6084,U+6089,U+608c-608d,U+6094,U+6096,U+609a,U+609f-60a0,U+60a3,U+60a6,U+60a8,U+60ac,U+60af,U+60b1-60b2,U+60b4,U+60b8,U+60bb-60bc,U+60c5-60c6,U+60ca}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.an.woff2) format("woff2");unicode-range:U+5e7f,U+5e84,U+5e86-5e87,U+5e8a,U+5e8f-5e90,U+5e93-5e97,U+5e99-5e9a,U+5e9c,U+5e9e-5e9f,U+5ea6-5ea7,U+5ead,U+5eb5-5eb8,U+5ec9-5eca,U+5ed1,U+5ed3,U+5ed6,U+5ef6-5ef7,U+5efa,U+5f00,U+5f02-5f04,U+5f08,U+5f0a-5f0b,U+5f0f,U+5f11,U+5f13,U+5f15,U+5f17-5f18,U+5f1b,U+5f1f-5f20,U+5f25-5f27,U+5f29,U+5f2f,U+5f31,U+5f39-5f3a,U+5f52-5f53,U+5f55,U+5f57,U+5f5d,U+5f62,U+5f64,U+5f66,U+5f69-5f6a,U+5f6c-5f6d,U+5f70-5f71,U+5f77,U+5f79,U+5f7b-5f7c,U+5f80-5f81,U+5f84-5f85,U+5f87-5f8b,U+5f90,U+5f92,U+5f95,U+5f97-5f98,U+5fa1,U+5fa8,U+5faa,U+5fad-5fae,U+5fb5,U+5fb7,U+5fbc-5fbd,U+5fc3,U+5fc5-5fc6}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ao.woff2) format("woff2");unicode-range:U+5c7f,U+5c81-5c82,U+5c8c,U+5c94,U+5c96-5c97,U+5c9a-5c9b,U+5ca9,U+5cad,U+5cb3,U+5cb8,U+5cbf,U+5ccb,U+5cd9,U+5ce1,U+5ce5-5ce6,U+5ce8,U+5cea,U+5ced,U+5cf0,U+5cfb,U+5d02,U+5d07,U+5d0e,U+5d14,U+5d16,U+5d1b,U+5d24,U+5d29,U+5d2d,U+5d34,U+5d3d,U+5d4c,U+5d58,U+5d6c,U+5d82,U+5d99,U+5dc5,U+5dcd,U+5ddd-5dde,U+5de1-5de2,U+5de5-5de9,U+5deb,U+5dee,U+5df1-5df4,U+5df7,U+5dfe,U+5e01-5e03,U+5e05-5e06,U+5e08,U+5e0c,U+5e10-5e11,U+5e15-5e16,U+5e18,U+5e1a-5e1d,U+5e26-5e27,U+5e2d-5e2e,U+5e37-5e38,U+5e3c-5e3d,U+5e42,U+5e44-5e45,U+5e4c,U+5e54-5e55,U+5e61-5e62,U+5e72-5e74,U+5e76,U+5e78,U+5e7a-5e7d}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ap.woff2) format("woff2");unicode-range:U+5b85,U+5b87-5b89,U+5b8b-5b8c,U+5b8f,U+5b95,U+5b97-5b9e,U+5ba0-5ba4,U+5ba6,U+5baa-5bab,U+5bb0,U+5bb3-5bb6,U+5bb9,U+5bbd-5bbf,U+5bc2,U+5bc4-5bc7,U+5bcc,U+5bd0,U+5bd2-5bd3,U+5bdd-5bdf,U+5be1,U+5be4-5be5,U+5be8,U+5bf0,U+5bf8-5bfc,U+5bff,U+5c01,U+5c04,U+5c06,U+5c09-5c0a,U+5c0f,U+5c11,U+5c14,U+5c16,U+5c18,U+5c1a,U+5c1d,U+5c24,U+5c27,U+5c2c,U+5c31,U+5c34,U+5c38-5c3a,U+5c3c-5c42,U+5c45,U+5c48-5c4b,U+5c4e-5c51,U+5c55,U+5c5e,U+5c60-5c61,U+5c65,U+5c6f,U+5c71,U+5c79}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.aq.woff2) format("woff2");unicode-range:U+5996,U+5999,U+599e,U+59a5,U+59a8-59aa,U+59ae,U+59b2,U+59b9,U+59bb,U+59be,U+59c6,U+59cb,U+59d0-59d1,U+59d3-59d4,U+59d7-59d8,U+59da,U+59dc-59dd,U+59e3,U+59e5,U+59e8,U+59ec,U+59f9,U+59fb,U+59ff,U+5a01,U+5a03-5a04,U+5a06-5a07,U+5a11,U+5a13,U+5a18,U+5a1c,U+5a1f-5a20,U+5a25,U+5a29,U+5a31-5a32,U+5a34,U+5a36,U+5a3c,U+5a40,U+5a46,U+5a49-5a4a,U+5a5a,U+5a62,U+5a6a,U+5a74,U+5a76-5a77,U+5a7f,U+5a92,U+5a9a-5a9b,U+5ab2-5ab3,U+5ac1-5ac2,U+5ac9,U+5acc,U+5ad4,U+5ad6,U+5ae1,U+5ae3,U+5ae6,U+5ae9,U+5b09,U+5b34,U+5b37,U+5b40,U+5b50,U+5b54-5b55,U+5b57-5b59,U+5b5c-5b5d,U+5b5f,U+5b63-5b64,U+5b66,U+5b69-5b6a,U+5b6c,U+5b70-5b71,U+5b75,U+5b7a,U+5b7d,U+5b81,U+5b83}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ar.woff2) format("woff2");unicode-range:U+57ce,U+57d4,U+57df-57e0,U+57f9-57fa,U+5800,U+5802,U+5806,U+5811,U+5815,U+5821,U+5824,U+582a,U+5830,U+5835,U+584c,U+5851,U+5854,U+5858,U+585e,U+586b,U+587e,U+5883,U+5885,U+5892-5893,U+5899,U+589e-589f,U+58a8-58a9,U+58c1,U+58d1,U+58d5,U+58e4,U+58eb-58ec,U+58ee,U+58f0,U+58f3,U+58f6,U+58f9,U+5904,U+5907,U+590d,U+590f,U+5915-5916,U+5919-591a,U+591c,U+591f,U+5927,U+5929-592b,U+592d-592f,U+5931,U+5934,U+5937-593a,U+5942,U+5944,U+5947-5949,U+594b,U+594e-594f,U+5951,U+5954-5957,U+595a,U+5960,U+5962,U+5965,U+5973-5974,U+5976,U+5978-5979,U+597d,U+5981-5984,U+5986-5988,U+598a,U+598d,U+5992-5993}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.as.woff2) format("woff2");unicode-range:U+561b,U+561e-561f,U+5624,U+562d,U+5631-5632,U+5634,U+5636,U+5639,U+563b,U+563f,U+564c,U+564e,U+5654,U+5657,U+5659,U+565c,U+5662,U+5664,U+5668-566c,U+5676,U+567c,U+5685,U+568e-568f,U+5693,U+56a3,U+56b7,U+56bc,U+56ca,U+56d4,U+56da-56db,U+56de,U+56e0,U+56e2,U+56e4,U+56ed,U+56f0-56f1,U+56f4,U+56f9-56fa,U+56fd-56ff,U+5703,U+5706,U+5708-5709,U+571f,U+5723,U+5728,U+572d,U+5730,U+573a,U+573e,U+5740,U+5747,U+574a,U+574d-5751,U+5757,U+575a-575b,U+575d-5761,U+5764,U+5766,U+5768,U+576a,U+576f,U+5773,U+5777,U+5782-5784,U+578b,U+5792,U+579b,U+57a0,U+57a2-57a3,U+57a6,U+57ab,U+57ae,U+57c2-57c3,U+57cb}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.at.woff2) format("woff2");unicode-range:U+54e5-54ea,U+54ed-54ee,U+54f2,U+54fa,U+54fc-54fd,U+5501,U+5506-5507,U+5509,U+550f-5510,U+5514,U+5520,U+5522,U+5524,U+5527,U+552c,U+552e-5531,U+5533,U+553e-553f,U+5543-5544,U+5546,U+554a,U+5550,U+5555-5556,U+555c,U+5561,U+5564-5567,U+556a,U+556c,U+556e,U+5575,U+5577-5578,U+557b-557c,U+557e,U+5580,U+5582-5584,U+5587,U+5589-558b,U+558f,U+5591,U+5594,U+5598-5599,U+559c-559d,U+559f,U+55a7,U+55b3,U+55b7,U+55bb,U+55bd,U+55c5,U+55d1-55d4,U+55d6,U+55dc-55dd,U+55df,U+55e1,U+55e3-55e6,U+55e8,U+55eb-55ec,U+55ef,U+55f7,U+55fd,U+5600-5601,U+5608-5609,U+560e,U+5618}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.au.woff2) format("woff2");unicode-range:U+5411,U+5413,U+5415,U+5417,U+541b,U+541d-5420,U+5426-5429,U+542b-542f,U+5431,U+5434-5435,U+5438-5439,U+543b-543c,U+543e,U+5440,U+5443,U+5446,U+5448,U+544a,U+5450,U+5453,U+5455,U+5457-5458,U+545b-545c,U+5462,U+5464,U+5466,U+5468,U+5471-5473,U+5475,U+5478,U+547b-547d,U+5480,U+5482,U+5484,U+5486,U+548b-548c,U+548e-5490,U+5492,U+5494-5496,U+5499-549b,U+54a4,U+54a6-54ad,U+54af,U+54b1,U+54b3,U+54b8,U+54bb,U+54bd,U+54bf-54c2,U+54c4,U+54c6-54c9,U+54cd-54ce,U+54d0-54d2,U+54d5,U+54d7,U+54da,U+54dd,U+54df}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.av.woff2) format("woff2");unicode-range:U+5348-534a,U+534e-534f,U+5351-5353,U+5355-5357,U+535a,U+535c,U+535e-5362,U+5364,U+5366-5367,U+536b,U+536f-5371,U+5373-5375,U+5377-5378,U+537f,U+5382,U+5384-5386,U+5389,U+538b-538c,U+5395,U+5398,U+539a,U+539f,U+53a2,U+53a5-53a6,U+53a8-53a9,U+53ae,U+53bb,U+53bf,U+53c1-53c2,U+53c8-53cd,U+53d1,U+53d4,U+53d6-53d9,U+53db,U+53df-53e0,U+53e3-53e6,U+53e8-53f3,U+53f6-53f9,U+53fc-53fd,U+5401,U+5403-5404,U+5408-540a,U+540c-5410}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.aw.woff2) format("woff2");unicode-range:U+5207,U+520a,U+520d-520e,U+5211-5212,U+5217-521b,U+521d,U+5220,U+5224,U+5228-5229,U+522b,U+522d-522e,U+5230,U+5236-523b,U+523d,U+5241-5243,U+524a,U+524c-524d,U+5250-5251,U+5254,U+5256,U+525c,U+5265,U+5267,U+5269-526a,U+526f,U+5272,U+527d,U+527f,U+5288,U+529b,U+529d-52a1,U+52a3,U+52a8-52ab,U+52ad,U+52b1-52b3,U+52be-52bf,U+52c3,U+52c7,U+52c9,U+52cb,U+52d0,U+52d2,U+52d8,U+52df,U+52e4,U+52fa,U+52fe-5300,U+5305-5306,U+5308,U+530d,U+5310,U+5315-5317,U+5319,U+531d,U+5320-5321,U+5323,U+532a,U+532e,U+5339-533b,U+533e-533f,U+5341,U+5343,U+5347}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ax.woff2) format("woff2");unicode-range:U+50cf,U+50d6,U+50da,U+50e7,U+50ee,U+50f3,U+50f5,U+50fb,U+5106,U+510b,U+5112,U+5121,U+513f-5141,U+5143-5146,U+5148-5149,U+514b,U+514d,U+5151,U+5154,U+515a,U+515c,U+5162,U+5165,U+5168,U+516b-516e,U+5170-5171,U+5173-5179,U+517b-517d,U+5180,U+5185,U+5188-5189,U+518c-518d,U+5192,U+5195,U+5197,U+5199,U+519b-519c,U+51a0,U+51a2,U+51a4-51a5,U+51ac,U+51af-51b0,U+51b2-51b3,U+51b5-51b7,U+51bb,U+51bd,U+51c0,U+51c4,U+51c6,U+51c9,U+51cb-51cc,U+51cf,U+51d1,U+51db,U+51dd,U+51e0-51e1,U+51e4,U+51ed,U+51ef-51f0,U+51f3,U+51f6,U+51f8-51fb,U+51fd,U+51ff-5201,U+5203,U+5206}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ay.woff2) format("woff2");unicode-range:U+4f60,U+4f63,U+4f65,U+4f69,U+4f6c,U+4f6f-4f70,U+4f73-4f74,U+4f7b-4f7c,U+4f7f,U+4f83-4f84,U+4f88,U+4f8b,U+4f8d,U+4f97,U+4f9b,U+4f9d,U+4fa0,U+4fa3,U+4fa5-4faa,U+4fac,U+4fae-4faf,U+4fb5,U+4fbf,U+4fc3-4fc5,U+4fca,U+4fce-4fd1,U+4fd7-4fd8,U+4fda,U+4fdd-4fde,U+4fe1,U+4fe6,U+4fe8-4fe9,U+4fed-4fef,U+4ff1,U+4ff8,U+4ffa,U+4ffe,U+500c-500d,U+500f,U+5012,U+5014,U+5018-501a,U+501c,U+501f,U+5021,U+5026,U+5028-502a,U+502d,U+503a,U+503c,U+503e,U+5043,U+5047-5048,U+504c,U+504e-504f,U+5055,U+505a,U+505c,U+5065,U+5076-5077,U+507b,U+507f-5080,U+5085,U+5088,U+508d,U+50a3,U+50a5,U+50a8,U+50ac,U+50b2,U+50bb}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.az.woff2) format("woff2");unicode-range:U+4e94-4e95,U+4e98,U+4e9a-4e9b,U+4e9f,U+4ea1-4ea2,U+4ea4-4ea9,U+4eab-4eae,U+4eb2,U+4eb5,U+4eba,U+4ebf-4ec1,U+4ec3-4ec7,U+4eca-4ecb,U+4ecd-4ece,U+4ed1,U+4ed3-4ed9,U+4ede-4edf,U+4ee3-4ee5,U+4ee8,U+4eea,U+4eec,U+4ef0,U+4ef2,U+4ef5-4ef7,U+4efb,U+4efd,U+4eff,U+4f01,U+4f0a,U+4f0d-4f11,U+4f17-4f1a,U+4f1e-4f20,U+4f22,U+4f24-4f26,U+4f2a-4f2b,U+4f2f-4f30,U+4f34,U+4f36,U+4f38,U+4f3a,U+4f3c-4f3d,U+4f43,U+4f46,U+4f4d-4f51,U+4f53,U+4f55,U+4f58-4f59,U+4f5b-4f5e}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.a0.woff2) format("woff2");unicode-range:U+d7,U+e0-e1,U+e8-ea,U+ec-ed,U+f2-f3,U+f7,U+f9-fa,U+fc,U+2014,U+2018-2019,U+201c-201d,U+3001-3002,U+300a-300b,U+3010-3011,U+4e00-4e01,U+4e03,U+4e07-4e0b,U+4e0d-4e0e,U+4e10-4e11,U+4e13-4e14,U+4e16,U+4e18-4e1e,U+4e22,U+4e24-4e25,U+4e27,U+4e2a-4e2b,U+4e2d,U+4e30,U+4e32,U+4e34,U+4e38-4e3b,U+4e3d-4e3e,U+4e43,U+4e45,U+4e48-4e49,U+4e4b-4e50,U+4e52-4e54,U+4e56,U+4e58-4e59,U+4e5c-4e61,U+4e66,U+4e70-4e71,U+4e73,U+4e7e,U+4e86,U+4e88-4e89,U+4e8b-4e8c,U+4e8e-4e8f,U+4e91-4e93}@font-face{font-family:HarmonyOS_Regular;font-style:normal;font-weight:400;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.a1.woff2) format("woff2");unicode-range:U+21-7e,U+a4,U+a7-a8,U+b0-b1,U+b7}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.a.woff2) format("woff2");unicode-range:U+9aa2-ffe5}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.b.woff2) format("woff2");unicode-range:U+8983-9aa0}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.c.woff2) format("woff2");unicode-range:U+78f2-897b}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.d.woff2) format("woff2");unicode-range:U+646d-78d9}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.e.woff2) format("woff2");unicode-range:U+30e0-6445}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.f.woff2) format("woff2");unicode-range:U+101-30df}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.g.woff2) format("woff2");unicode-range:U+9aa8,U+9ab8,U+9ad3,U+9ad8,U+9b03,U+9b3c,U+9b41-9b42,U+9b44,U+9b4f,U+9b54,U+9c7c,U+9c81,U+9c8d,U+9c9c,U+9ca4,U+9cb8,U+9cc3,U+9cd6,U+9cde,U+9e1f,U+9e21,U+9e23,U+9e25-9e26,U+9e2d,U+9e2f,U+9e33,U+9e35,U+9e3d,U+9e3f,U+9e43,U+9e45,U+9e4a,U+9e4f,U+9e64,U+9e70,U+9e7f,U+9e93,U+9ea6,U+9ebb,U+9ec4,U+9ecd-9ece,U+9ed1,U+9ed4,U+9ed8,U+9f0e,U+9f13,U+9f20,U+9f3b,U+9f50,U+9f7f,U+9f84,U+9f8b,U+9f99-9f9a,U+9f9f,U+ff01,U+ff08-ff09,U+ff0c,U+ff1a-ff1b,U+ff1f}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.h.woff2) format("woff2");unicode-range:U+975b,U+975e,U+9760-9762,U+9769,U+9773-9774,U+9776,U+978b,U+978d,U+9798,U+97a0,U+97ad,U+97e6-97e7,U+97e9,U+97ed,U+97f3,U+97f5-97f6,U+9875-9877,U+9879-987b,U+987d-987f,U+9881-9882,U+9884-9888,U+988a,U+9890-9891,U+9893,U+9896-9898,U+989c-989d,U+98a0,U+98a4,U+98a7,U+98ce,U+98d8,U+98de-98df,U+9910,U+9965,U+996d-9972,U+9975-9976,U+997a,U+997c,U+997f,U+9981,U+9985-9986,U+9988,U+998b,U+998f,U+9992,U+9996,U+9999,U+9a6c-9a71,U+9a73-9a74,U+9a76,U+9a79,U+9a7b-9a7c,U+9a7e,U+9a82,U+9a84,U+9a86-9a87,U+9a8b-9a8c,U+9a8f,U+9a91,U+9a97,U+9a9a,U+9aa1,U+9aa4}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.i.woff2) format("woff2");unicode-range:U+9570,U+9576,U+957f,U+95e8,U+95ea,U+95ed-95f0,U+95f2,U+95f4,U+95f7-95fb,U+95fd,U+9600-9602,U+9605,U+9609,U+960e,U+9610-9611,U+9614,U+961c,U+961f,U+962e,U+9632-9636,U+963b,U+963f-9640,U+9644-9648,U+964b-964d,U+9650,U+9655,U+965b,U+9661-9662,U+9664,U+9668-966a,U+9675-9677,U+9685-9686,U+968b,U+968f-9690,U+9694,U+9698-9699,U+969c,U+96a7,U+96b6,U+96be,U+96c0-96c1,U+96c4-96c7,U+96cc-96cd,U+96cf,U+96d5,U+96e8,U+96ea,U+96f6-96f7,U+96f9,U+96fe,U+9700,U+9704,U+9707,U+9709,U+970d,U+9713,U+9716,U+971c,U+971e,U+9732,U+9738-9739,U+9752,U+9756,U+9759}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.j.woff2) format("woff2");unicode-range:U+9179,U+917f,U+9187,U+9189,U+918b,U+918d,U+9190,U+9192,U+919a-919b,U+91ba,U+91c7,U+91c9-91ca,U+91cc-91cf,U+91d1,U+91dc,U+9274,U+93d6,U+9488-9489,U+948e,U+9492-9493,U+9497,U+9499,U+949d-94a3,U+94a5-94a9,U+94ae,U+94b1,U+94b3,U+94b5,U+94bb,U+94be,U+94c0-94c3,U+94c5-94c6,U+94dc-94dd,U+94e1,U+94e3,U+94ec-94ed,U+94f0-94f2,U+94f6,U+94f8,U+94fa,U+94fe,U+9500-9501,U+9504-9505,U+9508,U+950b-950c,U+9510-9511,U+9517,U+9519-951a,U+9521,U+9523-9526,U+9528,U+952d-9530,U+9539,U+953b,U+9540-9541,U+9547,U+954a,U+954d,U+9550-9551,U+955c,U+9563,U+956d}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.k.woff2) format("woff2");unicode-range:U+9001-9003,U+9005-9006,U+9009-900a,U+900d,U+900f-9012,U+9014,U+9017,U+901a-901b,U+901d-9022,U+902e,U+9038,U+903b-903c,U+903e,U+9041-9042,U+9044,U+9047,U+904d,U+904f-9053,U+9057,U+905b,U+9062-9063,U+9065,U+9068,U+906d-906e,U+9075,U+907d,U+907f-9080,U+9082-9083,U+908b,U+9091,U+9093,U+9099,U+90a2-90a3,U+90a6,U+90aa,U+90ae-90af,U+90b1,U+90b5,U+90b8-90b9,U+90bb,U+90c1,U+90ca,U+90ce,U+90d1,U+90dd,U+90e1,U+90e7-90e8,U+90ed,U+90f4,U+90f8,U+90fd,U+9102,U+9119,U+9149,U+914b-914d,U+9152,U+9157,U+915a,U+915d-915e,U+9161,U+9163,U+9165,U+916a,U+916c,U+916e,U+9171,U+9175-9178}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.l.woff2) format("woff2");unicode-range:U+8e44,U+8e47-8e48,U+8e4a-8e4b,U+8e51,U+8e59,U+8e66,U+8e6c-8e6d,U+8e6f,U+8e72,U+8e74,U+8e76,U+8e7f,U+8e81,U+8e87,U+8e8f,U+8eab-8eac,U+8eaf,U+8eb2,U+8eba,U+8f66-8f69,U+8f6c,U+8f6e-8f72,U+8f74,U+8f7b,U+8f7d,U+8f7f,U+8f83-8f8a,U+8f8d-8f8e,U+8f90-8f91,U+8f93,U+8f95-8f99,U+8f9b-8f9c,U+8f9e-8f9f,U+8fa3,U+8fa8-8fa9,U+8fab,U+8fb0-8fb1,U+8fb9,U+8fbd-8fbe,U+8fc1-8fc2,U+8fc4-8fc5,U+8fc7-8fc8,U+8fce,U+8fd0-8fd1,U+8fd3-8fd5,U+8fd8-8fd9,U+8fdb-8fdf,U+8fe2,U+8fe6,U+8fe8,U+8fea-8feb,U+8fed,U+8ff0,U+8ff3,U+8ff7-8ff9,U+8ffd,U+9000}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.m.woff2) format("woff2");unicode-range:U+8d24-8d31,U+8d34-8d35,U+8d37-8d3f,U+8d41-8d45,U+8d48,U+8d4a-8d4c,U+8d4e-8d50,U+8d54,U+8d56,U+8d58,U+8d5a-8d5b,U+8d5d-8d5e,U+8d60-8d64,U+8d66-8d67,U+8d6b,U+8d70,U+8d74-8d77,U+8d81,U+8d85,U+8d8a-8d8b,U+8d9f,U+8da3,U+8db3-8db4,U+8db8,U+8dbe-8dbf,U+8dc3-8dc4,U+8dcb-8dcc,U+8dd1,U+8dd7,U+8ddb,U+8ddd,U+8ddf,U+8de4,U+8de8,U+8dea,U+8def,U+8df3,U+8df5,U+8df7,U+8dfa-8dfb,U+8e09-8e0a,U+8e0c,U+8e0f,U+8e1d-8e1e,U+8e22,U+8e29-8e2a,U+8e2e,U+8e31,U+8e35,U+8e39,U+8e42}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.n.woff2) format("woff2");unicode-range:U+8bc9-8bcd,U+8bcf,U+8bd1,U+8bd3,U+8bd5,U+8bd7-8bd8,U+8bda-8bdb,U+8bdd-8bde,U+8be0-8be9,U+8beb-8bf5,U+8bf7-8bf8,U+8bfa-8bfb,U+8bfd-8c01,U+8c03-8c06,U+8c08,U+8c0a-8c0b,U+8c0d-8c13,U+8c15,U+8c17,U+8c19-8c1c,U+8c22-8c24,U+8c26-8c2a,U+8c2c-8c2d,U+8c30-8c35,U+8c37,U+8c41,U+8c46,U+8c4c,U+8c61-8c62,U+8c6a-8c6b,U+8c79-8c7a,U+8c82,U+8c89,U+8c8c,U+8d1d-8d1f,U+8d21-8d23}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.o.woff2) format("woff2");unicode-range:U+889c,U+88a4,U+88ab,U+88ad,U+88b1,U+88c1-88c2,U+88c5-88c6,U+88c9,U+88d4-88d5,U+88d8-88d9,U+88df,U+88e3-88e4,U+88e8,U+88f1,U+88f3-88f4,U+88f8-88f9,U+88fe,U+8902,U+8910,U+8912-8913,U+891a-891b,U+8921,U+8925,U+892a-892b,U+8934,U+8936,U+8941,U+8944,U+895e-895f,U+8966,U+897f,U+8981,U+8986,U+89c1-89c2,U+89c4-89c6,U+89c8-89cb,U+89ce,U+89d0-89d2,U+89e3,U+89e5-89e6,U+8a00,U+8a07,U+8a79,U+8a89-8a8a,U+8a93,U+8b66,U+8b6c,U+8ba1-8bab,U+8bad-8bb0,U+8bb2-8bb3,U+8bb6-8bba,U+8bbc-8bc1,U+8bc4-8bc6,U+8bc8}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.p.woff2) format("woff2");unicode-range:U+8695,U+869c,U+86a3-86a4,U+86a7,U+86aa,U+86af,U+86b1,U+86c0,U+86c6-86c7,U+86ca-86cb,U+86d0,U+86d4,U+86d9,U+86db,U+86df,U+86e4,U+86ee,U+86f0,U+86f9,U+86fe,U+8700,U+8702-8703,U+8708-8709,U+870d,U+8712-8713,U+8715,U+8717-8718,U+871a,U+871c,U+8721,U+8725,U+8734,U+8737,U+873b,U+873f,U+8747,U+8749,U+874c,U+874e,U+8757,U+8759,U+8760,U+8763,U+8774,U+8776,U+877c,U+8782-8783,U+8785,U+878d,U+8793,U+879f,U+87af,U+87b3,U+87ba,U+87c6,U+87ca,U+87d1-87d2,U+87e0,U+87e5,U+87f9,U+87fe,U+8815,U+8822,U+8839,U+8840,U+8845,U+884c-884d,U+8854,U+8857,U+8859,U+8861,U+8863,U+8865,U+8868,U+886b-886c,U+8870,U+8877,U+887d-887f,U+8881-8882,U+8884-8885,U+8888,U+888b,U+888d,U+8892,U+8896}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.q.woff2) format("woff2");unicode-range:U+83dc-83dd,U+83e0,U+83e9,U+83f1-83f2,U+8403-8404,U+840b-840e,U+841d,U+8424-8428,U+843d,U+8451,U+8457,U+8459,U+845b,U+8461,U+8463,U+8469,U+846b-846c,U+8471,U+8475,U+847a,U+8482,U+848b,U+8499,U+849c,U+84b2,U+84b8,U+84bf,U+84c4,U+84c9,U+84d1,U+84d6,U+84dd,U+84df,U+84e6,U+84ec,U+8511,U+8513,U+8517,U+851a,U+851f,U+8521,U+852b-852c,U+8537,U+853b-853d,U+8549-854a,U+8559,U+8574,U+857e,U+8584,U+8587,U+858f,U+859b,U+85aa,U+85af-85b0,U+85c9,U+85cf-85d0,U+85d3,U+85d5,U+85e4,U+85e9,U+85fb,U+8611,U+8638,U+864e-8651,U+8654,U+865a,U+865e,U+866b-866c,U+8671,U+8679,U+867d-867e,U+8680-8682,U+868a,U+868c-868d,U+8693}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.r.woff2) format("woff2");unicode-range:U+8273,U+827a,U+827e,U+8282,U+828a-828b,U+828d,U+8292,U+8299,U+829c-829d,U+82a5-82a6,U+82a9,U+82ab-82ad,U+82af,U+82b1,U+82b3,U+82b7-82b9,U+82bd,U+82c7,U+82cd,U+82cf,U+82d1,U+82d3-82d4,U+82d7,U+82db,U+82de-82df,U+82e3,U+82e5-82e6,U+82eb,U+82ef,U+82f1,U+82f9,U+82fb,U+8301-8305,U+8309,U+830e,U+8314,U+8317,U+8327-8328,U+832b-832c,U+832f,U+8335-8336,U+8338-8339,U+8340,U+8346-8347,U+8349,U+834f-8352,U+8354,U+835a,U+835c,U+8361,U+8363-8364,U+8367,U+836b,U+836f,U+8377,U+837c,U+8386,U+8389,U+838e,U+8393,U+839e,U+83a0,U+83ab,U+83b1-83b4,U+83b7,U+83b9-83ba,U+83bd,U+83c1,U+83c5,U+83c7,U+83ca,U+83cc,U+83cf}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.s.woff2) format("woff2");unicode-range:U+80de,U+80e1,U+80e7,U+80ea-80eb,U+80ed,U+80ef-80f0,U+80f3-80f4,U+80f6,U+80f8,U+80fa,U+80fd,U+8102,U+8106,U+8109-810a,U+810d,U+810f-8111,U+8113-8114,U+8116,U+8118,U+811a,U+812f,U+8131,U+8138,U+813e,U+8146,U+814a-814c,U+8150-8151,U+8154-8155,U+8165,U+816e,U+8170,U+8174,U+8179-817c,U+817e-8180,U+818a,U+818f,U+8198,U+819b-819d,U+81a8,U+81b3,U+81ba-81bb,U+81c0,U+81c2-81c3,U+81c6,U+81ca,U+81e3,U+81ea,U+81ec-81ed,U+81f3-81f4,U+81fb-81fc,U+81fe,U+8200,U+8205-8206,U+820c-820d,U+8210,U+8212,U+8214,U+821c,U+821e-821f,U+822a-822c,U+8230-8231,U+8235-8239,U+8247,U+8258,U+826f-8270,U+8272}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.t.woff2) format("woff2");unicode-range:U+7f72,U+7f81,U+7f8a,U+7f8c,U+7f8e,U+7f94,U+7f9a,U+7f9e,U+7fa1,U+7fa4,U+7fb2,U+7fb8-7fb9,U+7fbd,U+7fc1,U+7fc5,U+7fcc,U+7fce,U+7fd4-7fd5,U+7fd8,U+7fdf-7fe1,U+7fe6,U+7fe9,U+7ff0-7ff1,U+7ff3,U+7ffb-7ffc,U+8000-8001,U+8003,U+8005,U+800c-800d,U+8010,U+8012,U+8015,U+8017-8019,U+8027,U+802a,U+8033,U+8036-8038,U+803b,U+803d,U+803f,U+8042,U+8046,U+804a-804c,U+8052,U+8054,U+8058,U+805a,U+806a,U+807f,U+8083-8084,U+8086-8087,U+8089,U+808b-808c,U+8096,U+8098,U+809a-809b,U+809d,U+80a0-80a2,U+80a4-80a5,U+80a9-80aa,U+80ae-80af,U+80b2,U+80b4,U+80ba,U+80be-80c1,U+80c3-80c4,U+80c6,U+80cc,U+80ce,U+80d6,U+80da-80dc}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.u.woff2) format("woff2");unicode-range:U+7eb5-7eba,U+7ebd,U+7ebf,U+7ec2-7eca,U+7ecd-7ed5,U+7ed8-7edf,U+7ee1-7ee3,U+7ee5-7ee7,U+7ee9-7eeb,U+7eed,U+7eef-7ef0,U+7ef3-7ef8,U+7efc-7efd,U+7eff-7f00,U+7f04-7f09,U+7f0e-7f0f,U+7f13-7f16,U+7f18,U+7f1a,U+7f1c-7f1d,U+7f1f-7f22,U+7f24-7f26,U+7f28-7f2a,U+7f2d-7f2e,U+7f30,U+7f34,U+7f38,U+7f3a,U+7f42,U+7f50-7f51,U+7f54-7f55,U+7f57,U+7f5a,U+7f61-7f62,U+7f69-7f6a,U+7f6e}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.v.woff2) format("woff2");unicode-range:U+7b4c,U+7b4f-7b52,U+7b54,U+7b56,U+7b5b,U+7b5d,U+7b75,U+7b77,U+7b79,U+7b7e,U+7b80,U+7b8d,U+7b94-7b95,U+7b97,U+7ba1,U+7ba9-7bab,U+7bad,U+7bb1,U+7bb8,U+7bc6-7bc7,U+7bd1,U+7bd3,U+7bd9,U+7bdd,U+7be1,U+7bee,U+7bf1,U+7bf7,U+7bfe,U+7c07,U+7c0c,U+7c27,U+7c2a,U+7c38,U+7c3f,U+7c41,U+7c4d,U+7c73,U+7c7b,U+7c7d,U+7c89,U+7c92,U+7c95,U+7c97-7c98,U+7c9f,U+7ca4-7ca5,U+7caa,U+7cae,U+7cb1,U+7cb3,U+7cb9,U+7cbc-7cbe,U+7cc5,U+7cca,U+7cd5-7cd7,U+7cd9,U+7cdc,U+7cdf-7ce0,U+7cef,U+7cfb,U+7d0a,U+7d20,U+7d22,U+7d27,U+7d2b,U+7d2f,U+7d6e,U+7e41,U+7e82,U+7ea0-7ea4,U+7ea6-7ea8,U+7eaa-7ead,U+7eaf-7eb3}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.w.woff2) format("woff2");unicode-range:U+7981,U+7984-7985,U+798f,U+79b9,U+79bb,U+79bd-79be,U+79c0-79c1,U+79c3,U+79c6,U+79c9,U+79cb,U+79cd,U+79d1-79d2,U+79d8,U+79df,U+79e3-79e4,U+79e6-79e7,U+79e9,U+79ef-79f0,U+79f8,U+79fb,U+79fd,U+7a00,U+7a0b,U+7a0d-7a0e,U+7a14,U+7a17,U+7a1a,U+7a20,U+7a33,U+7a37,U+7a39,U+7a3b-7a3d,U+7a3f,U+7a46,U+7a51,U+7a57,U+7a74,U+7a76-7a77,U+7a79-7a7a,U+7a7f,U+7a81,U+7a83-7a84,U+7a88,U+7a8d,U+7a91-7a92,U+7a95-7a98,U+7a9c-7a9d,U+7a9f,U+7aa5-7aa6,U+7abf,U+7acb,U+7ad6,U+7ad9,U+7ade-7ae0,U+7ae3,U+7ae5-7ae6,U+7aed,U+7aef,U+7af9,U+7afd,U+7aff,U+7b03,U+7b06,U+7b08,U+7b0b,U+7b11,U+7b14,U+7b19,U+7b1b,U+7b20,U+7b26,U+7b28,U+7b2c,U+7b3a,U+7b3c,U+7b49,U+7b4b}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.x.woff2) format("woff2");unicode-range:U+77aa,U+77ac,U+77b0,U+77b3,U+77b5,U+77bb,U+77bf,U+77d7,U+77db-77dc,U+77e2-77e3,U+77e5,U+77e9,U+77eb,U+77ed-77ee,U+77f3,U+77fd-77ff,U+7801-7802,U+780c-780d,U+7812,U+7814,U+7816,U+781a,U+781d,U+7823,U+7825,U+7827,U+7830,U+7834,U+7837-7838,U+783a,U+783e,U+7840,U+7845,U+784c,U+7852,U+7855,U+785d,U+786b-786c,U+786e,U+787c,U+7887,U+7889,U+788c-788e,U+7891,U+7897-7898,U+789c,U+789f,U+78a5,U+78a7,U+78b0-78b1,U+78b3-78b4,U+78be,U+78c1,U+78c5,U+78ca-78cb,U+78d0,U+78d5,U+78e8,U+78ec,U+78f7,U+78fa,U+7901,U+7934,U+793a,U+793c,U+793e,U+7940-7941,U+7948,U+7956-7957,U+795a-795b,U+795d-7960,U+7965,U+7968,U+796d,U+796f,U+7977-7978,U+797a,U+7980}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.y.woff2) format("woff2");unicode-range:U+761f,U+7624,U+7626,U+7629-762b,U+7634-7635,U+7638,U+763e,U+764c,U+7656,U+765e,U+7663,U+766b,U+7678,U+767b,U+767d-767e,U+7682,U+7684,U+7686-7688,U+768b,U+768e,U+7691,U+7693,U+7696,U+7699,U+76ae,U+76b1,U+76b4,U+76bf,U+76c2,U+76c5-76c6,U+76c8,U+76ca,U+76ce-76d2,U+76d4,U+76d6-76d8,U+76db,U+76df,U+76ee-76ef,U+76f2,U+76f4,U+76f8-76f9,U+76fc,U+76fe,U+7701,U+7708-7709,U+770b,U+771f-7720,U+7726,U+7728-7729,U+772f,U+7736-7738,U+773a,U+773c,U+7740-7741,U+7750-7751,U+775a-775b,U+7761,U+7763,U+7765-7766,U+7768,U+776b-776c,U+7779,U+777d,U+777f,U+7784-7785,U+778c,U+778e,U+7791-7792,U+779f-77a0,U+77a5,U+77a7,U+77a9}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.z.woff2) format("woff2");unicode-range:U+7435-7436,U+743c,U+7455,U+7459-745a,U+745c,U+745e-745f,U+7470,U+7476,U+7480,U+7483,U+7487,U+749c,U+749e,U+74a7-74a8,U+74dc,U+74e2-74e4,U+74e6,U+74ee,U+74f6-74f7,U+7504,U+7518,U+751a,U+751c,U+751f,U+7525,U+7528-7529,U+752b-752d,U+7530-7533,U+7535,U+7537-7538,U+753b,U+7545,U+754c,U+754f,U+7554,U+7559,U+755c,U+7565-7566,U+756a,U+7574,U+7578,U+7583,U+7586,U+758f,U+7591,U+7597,U+7599-759a,U+759f,U+75a1,U+75a4-75a5,U+75ab,U+75ae-75b2,U+75b4-75b5,U+75b9,U+75bc-75be,U+75c5,U+75c7-75ca,U+75cd,U+75d2,U+75d4-75d5,U+75d8,U+75db,U+75de,U+75e2-75e3,U+75e8,U+75ea,U+75f0,U+75f4,U+75f9,U+7600-7601}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.aa.woff2) format("woff2");unicode-range:U+725f,U+7261-7262,U+7267,U+7269,U+7272,U+7275,U+7279-727a,U+7280-7281,U+7284,U+728a,U+7292,U+729f,U+72ac,U+72af,U+72b6-72b9,U+72c1-72c2,U+72c4,U+72c8,U+72ce,U+72d0,U+72d2,U+72d7,U+72d9,U+72de,U+72e0-72e1,U+72e9,U+72ec-72f2,U+72f7-72f8,U+72fc,U+730a,U+730e,U+7316,U+731b-731d,U+7322,U+7325,U+7329-732c,U+732e,U+7334,U+733e-733f,U+7350,U+7357,U+7360,U+736d,U+7384,U+7387,U+7389,U+738b,U+7396,U+739b,U+73a9,U+73ab,U+73af-73b0,U+73b2,U+73b7,U+73ba-73bb,U+73c0,U+73c8,U+73ca,U+73cd,U+73d0-73d1,U+73d9,U+73e0,U+73ed,U+7403,U+7405-7406,U+7409-740a,U+740f-7410,U+741a,U+7422,U+7425,U+742a,U+7433-7434}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.ab.woff2) format("woff2");unicode-range:U+706d,U+706f-7070,U+7075-7076,U+7078,U+707c,U+707e-707f,U+7089-708a,U+708e,U+7092,U+7094-7096,U+7099,U+70ab-70af,U+70b1,U+70b3,U+70b8-70b9,U+70bc-70bd,U+70c1-70c3,U+70c8,U+70ca,U+70d8-70d9,U+70db,U+70df,U+70e4,U+70e6-70e7,U+70e9,U+70eb-70ed,U+70ef,U+70f7,U+70f9,U+70fd,U+7109-710a,U+7115,U+7119-711a,U+7126,U+7130-7131,U+7136,U+714c,U+714e,U+715e,U+7164,U+7166-7168,U+716e,U+7172-7173,U+717d,U+7184,U+718a,U+718f,U+7194,U+7198-7199,U+719f-71a0,U+71a8,U+71ac,U+71b9,U+71c3,U+71ce,U+71d5,U+71e5,U+7206,U+722a,U+722c,U+7231,U+7235-7239,U+723d,U+7247-7248,U+724c-724d,U+7252,U+7259,U+725b}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.ac.woff2) format("woff2");unicode-range:U+6df7,U+6df9,U+6dfb,U+6e05,U+6e0a,U+6e0d-6e0e,U+6e10,U+6e14,U+6e17,U+6e1a,U+6e1d,U+6e20-6e21,U+6e23-6e25,U+6e29,U+6e2d,U+6e2f,U+6e32,U+6e34,U+6e38,U+6e3a,U+6e43,U+6e4d,U+6e56,U+6e58,U+6e5b,U+6e6e,U+6e7e-6e7f,U+6e83,U+6e85,U+6e89,U+6e90,U+6e9c,U+6ea2,U+6ea5,U+6eaa,U+6eaf,U+6eb6,U+6eba,U+6ec1,U+6ec7,U+6ecb,U+6ed1,U+6ed3-6ed5,U+6eda,U+6ede,U+6ee1,U+6ee4-6ee6,U+6ee8-6ee9,U+6ef4,U+6f02,U+6f06,U+6f09,U+6f0f,U+6f13-6f15,U+6f20,U+6f29-6f2b,U+6f31,U+6f33,U+6f3e,U+6f46-6f47,U+6f4d,U+6f58,U+6f5c,U+6f5e,U+6f62,U+6f66,U+6f6d-6f6e,U+6f84,U+6f88-6f89,U+6f8e,U+6f9c,U+6fa1,U+6fb3,U+6fb9,U+6fc0,U+6fd1-6fd2,U+6fe1,U+7011,U+701a,U+7023,U+704c,U+706b}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.ad.woff2) format("woff2");unicode-range:U+6ccc,U+6cd3,U+6cd5,U+6cdb,U+6cde,U+6ce1-6ce3,U+6ce5,U+6ce8,U+6cea-6ceb,U+6cef-6cf1,U+6cf3,U+6cf5,U+6cfb-6cfe,U+6d01,U+6d0b,U+6d12,U+6d17,U+6d1b,U+6d1e,U+6d25,U+6d27,U+6d2a,U+6d31-6d32,U+6d3b-6d3e,U+6d41,U+6d43,U+6d45-6d47,U+6d4a-6d4b,U+6d4e-6d4f,U+6d51,U+6d53,U+6d59-6d5a,U+6d63,U+6d66,U+6d69-6d6a,U+6d6e,U+6d74,U+6d77-6d78,U+6d82,U+6d85,U+6d88-6d89,U+6d8c,U+6d8e,U+6d93,U+6d95,U+6d9b,U+6d9d,U+6d9f-6da1,U+6da3-6da4,U+6da6-6daa,U+6dae-6daf,U+6db2,U+6db5,U+6db8,U+6dc0,U+6dc4-6dc7,U+6dcb-6dcc,U+6dd1,U+6dd6,U+6dd8-6dd9,U+6de1,U+6de4,U+6deb-6dec,U+6dee,U+6df1,U+6df3}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.ae.woff2) format("woff2");unicode-range:U+6b92,U+6b96,U+6b9a,U+6ba1,U+6bb4-6bb5,U+6bb7,U+6bbf,U+6bc1,U+6bc5,U+6bcb,U+6bcd,U+6bcf,U+6bd2,U+6bd4-6bd7,U+6bd9,U+6bdb,U+6be1,U+6beb,U+6bef,U+6c05,U+6c0f,U+6c11,U+6c13-6c14,U+6c16,U+6c1b,U+6c1f,U+6c22,U+6c24,U+6c26-6c28,U+6c2e-6c30,U+6c32,U+6c34,U+6c38,U+6c3d,U+6c40-6c42,U+6c47,U+6c49,U+6c50,U+6c55,U+6c57,U+6c5b,U+6c5d-6c61,U+6c64,U+6c68-6c6a,U+6c70,U+6c72,U+6c76,U+6c79,U+6c7d-6c7e,U+6c81-6c83,U+6c86,U+6c88-6c89,U+6c8c,U+6c8f-6c90,U+6c93,U+6c99,U+6c9b,U+6c9f,U+6ca1,U+6ca4-6ca7,U+6caa-6cab,U+6cae,U+6cb3,U+6cb8-6cb9,U+6cbb-6cbf,U+6cc4-6cc5,U+6cc9-6cca}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.af.woff2) format("woff2");unicode-range:U+68ad,U+68af-68b0,U+68b3,U+68b5,U+68c0,U+68c2,U+68c9,U+68cb,U+68cd,U+68d2,U+68d5,U+68d8,U+68da,U+68e0,U+68ee,U+68f1,U+68f5,U+68fa,U+6905,U+690d-690e,U+6912,U+692d,U+6930,U+693d,U+693f,U+6942,U+6954,U+6957,U+695a,U+695e,U+6963,U+696b,U+6977-6978,U+697c,U+6982,U+6984,U+6986,U+6994,U+699c,U+69a8,U+69ad,U+69b4,U+69b7,U+69bb,U+69c1,U+69cc,U+69d0,U+69db,U+69fd,U+69ff,U+6a0a,U+6a1f,U+6a21,U+6a2a,U+6a31,U+6a35,U+6a3d,U+6a44,U+6a47,U+6a58-6a59,U+6a61,U+6a71,U+6a80,U+6a84,U+6a8e,U+6a90,U+6aac,U+6b20-6b23,U+6b27,U+6b32,U+6b3a,U+6b3e,U+6b47,U+6b49,U+6b4c,U+6b62-6b67,U+6b6a,U+6b79,U+6b7b-6b7c,U+6b81,U+6b83-6b84,U+6b86-6b87,U+6b89-6b8b}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.ag.woff2) format("woff2");unicode-range:U+6756,U+675c,U+675e-6761,U+6765,U+6768,U+676d,U+676f-6770,U+6773,U+6775,U+6777,U+677c,U+677e-677f,U+6781,U+6784,U+6787,U+6789,U+6790,U+6795,U+6797,U+679a,U+679c-679d,U+67a2-67a3,U+67aa-67ab,U+67ad,U+67af-67b0,U+67b6-67b7,U+67c4,U+67cf-67d4,U+67d9-67da,U+67dc,U+67de,U+67e0,U+67e5,U+67e9,U+67ec,U+67ef,U+67f1,U+67f3-67f4,U+67ff-6800,U+6805,U+6807-6808,U+680b,U+680f,U+6811,U+6813,U+6816-6817,U+6821,U+6829-682a,U+6837-6839,U+683c-683d,U+6840,U+6842-6843,U+6845-6846,U+6848,U+684c,U+6850-6851,U+6853-6854,U+6863,U+6865,U+6868-6869,U+6874,U+6876,U+6881,U+6885-6886,U+6893,U+6897,U+68a2,U+68a6-68a8}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.ah.woff2) format("woff2");unicode-range:U+65f7,U+65fa,U+6602,U+6606,U+660a,U+660c,U+660e-660f,U+6613-6614,U+6619,U+661d,U+661f-6620,U+6625,U+6627-6628,U+662d,U+662f,U+6631,U+6635,U+663c,U+663e,U+6643,U+664b-664c,U+664f,U+6652-6653,U+6655-6657,U+665a,U+6664,U+6666,U+6668,U+666e-6670,U+6674,U+6676-6677,U+667a,U+667e,U+6682,U+6684,U+6687,U+668c,U+6691,U+6696-6697,U+669d,U+66a7,U+66ae,U+66b4,U+66d9,U+66dc-66dd,U+66e6,U+66f0,U+66f2-66f4,U+66f9,U+66fc,U+66fe-6700,U+6708-6709,U+670b,U+670d,U+6714-6715,U+6717,U+671b,U+671d,U+671f,U+6726,U+6728,U+672a-672d,U+672f,U+6731,U+6734-6735,U+673a,U+673d,U+6740,U+6742-6743,U+6746,U+6748-6749,U+674e-6751}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.ai.woff2) format("woff2");unicode-range:U+6467,U+6469,U+6478-6479,U+6482,U+6485,U+6487,U+6491-6492,U+6495,U+649e,U+64a4,U+64a9,U+64ac-64ae,U+64b0,U+64b5,U+64b8,U+64ba,U+64bc,U+64c2,U+64c5,U+64cd-64ce,U+64d2,U+64d8,U+64de,U+64e2,U+64e6,U+6500,U+6512,U+6518,U+6525,U+652b,U+652f,U+6536,U+6538-6539,U+653b,U+653e-653f,U+6545,U+6548,U+654c,U+654f,U+6551,U+6555-6556,U+6559,U+655b,U+655d-655e,U+6562-6563,U+6566,U+656c,U+6570,U+6572,U+6574,U+6577,U+6587,U+658b-658c,U+6590-6591,U+6593,U+6597,U+6599,U+659c,U+659f,U+65a1,U+65a4-65a5,U+65a7,U+65a9,U+65ab,U+65ad,U+65af-65b0,U+65b9,U+65bd,U+65c1,U+65c4-65c5,U+65cb-65cc,U+65cf,U+65d7,U+65e0,U+65e2,U+65e5-65e9,U+65ec-65ed,U+65f1,U+65f6}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.aj.woff2) format("woff2");unicode-range:U+6323-6325,U+6328,U+632a-632b,U+632f,U+6332,U+633a,U+633d,U+6342,U+6345-6346,U+6349,U+634b-6350,U+6355,U+635e-635f,U+6361-6363,U+6367,U+636e,U+6371,U+6376-6377,U+637a-637b,U+6380,U+6382,U+6387-6389,U+638c,U+638f-6390,U+6392,U+6396,U+6398,U+63a0,U+63a2-63a3,U+63a5,U+63a7-63aa,U+63ac,U+63b0,U+63b3-63b4,U+63b7-63b8,U+63ba,U+63c4,U+63c9,U+63cd,U+63cf-63d0,U+63d2,U+63d6,U+63e1,U+63e3,U+63e9-63ea,U+63ed,U+63f4,U+63f6,U+63fd,U+6400-6402,U+6405,U+640f-6410,U+6413-6414,U+641c,U+641e,U+6421,U+642a,U+642c-642d,U+643a,U+643d,U+6441,U+6444,U+6446-6448,U+644a,U+6452,U+6454,U+6458,U+645e}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.ak.woff2) format("woff2");unicode-range:U+6258,U+625b,U+6263,U+6266-6267,U+6269-6270,U+6273,U+6276,U+6279,U+627c,U+627e-6280,U+6284,U+6289-628a,U+6291-6293,U+6295-6298,U+629a-629b,U+62a0-62a2,U+62a4-62a5,U+62a8,U+62ab-62ac,U+62b1,U+62b5,U+62b9,U+62bc-62bd,U+62bf,U+62c2,U+62c4-62ca,U+62cc-62ce,U+62d0,U+62d2-62d4,U+62d6-62d9,U+62db-62dc,U+62df,U+62e2-62e3,U+62e5-62e9,U+62ec-62ed,U+62ef,U+62f1,U+62f3-62f4,U+62f7,U+62fc-62ff,U+6301-6302,U+6307,U+6309,U+630e,U+6311,U+6316,U+631a-631b,U+631d-6321}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.al.woff2) format("woff2");unicode-range:U+60cb,U+60d1,U+60d5,U+60d8,U+60da,U+60dc,U+60df-60e0,U+60e6-60e9,U+60eb-60f0,U+60f3-60f4,U+60f6,U+60f9-60fa,U+6101,U+6108-6109,U+610e-610f,U+6115,U+611a,U+611f-6120,U+6123-6124,U+6127,U+612b,U+613f,U+6148,U+614a,U+614c,U+614e,U+6151,U+6155,U+6162,U+6167-6168,U+6170,U+6175,U+6177,U+618b,U+618e,U+6194,U+61a7-61a9,U+61ac,U+61be,U+61c2,U+61c8,U+61ca,U+61d1-61d2,U+61d4,U+61e6,U+61f5,U+61ff,U+6208,U+620a,U+620c-6212,U+6216,U+6218,U+621a-621b,U+621f,U+622a,U+622c,U+622e,U+6233-6234,U+6237,U+623e-6241,U+6247-6249,U+624b,U+624d-624e,U+6251-6254}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.am.woff2) format("woff2");unicode-range:U+5fcc-5fcd,U+5fcf-5fd2,U+5fd6-5fd9,U+5fdd,U+5fe0-5fe1,U+5fe4,U+5fe7,U+5fea-5feb,U+5ff1,U+5ff5,U+5ffb,U+5ffd-6002,U+6005-6006,U+600d-600f,U+6012,U+6014-6016,U+6019,U+601c-601d,U+6020-6021,U+6025-6028,U+602a,U+602f,U+6035,U+603b-603c,U+6041,U+6043,U+604b,U+604d,U+6050,U+6052,U+6055,U+6059-605a,U+6062-6064,U+6068-606d,U+606f-6070,U+6073,U+6076,U+6078-607c,U+607f,U+6084,U+6089,U+608c-608d,U+6094,U+6096,U+609a,U+609f-60a0,U+60a3,U+60a6,U+60a8,U+60ac,U+60af,U+60b1-60b2,U+60b4,U+60b8,U+60bb-60bc,U+60c5-60c6,U+60ca}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.an.woff2) format("woff2");unicode-range:U+5e7f,U+5e84,U+5e86-5e87,U+5e8a,U+5e8f-5e90,U+5e93-5e97,U+5e99-5e9a,U+5e9c,U+5e9e-5e9f,U+5ea6-5ea7,U+5ead,U+5eb5-5eb8,U+5ec9-5eca,U+5ed1,U+5ed3,U+5ed6,U+5ef6-5ef7,U+5efa,U+5f00,U+5f02-5f04,U+5f08,U+5f0a-5f0b,U+5f0f,U+5f11,U+5f13,U+5f15,U+5f17-5f18,U+5f1b,U+5f1f-5f20,U+5f25-5f27,U+5f29,U+5f2f,U+5f31,U+5f39-5f3a,U+5f52-5f53,U+5f55,U+5f57,U+5f5d,U+5f62,U+5f64,U+5f66,U+5f69-5f6a,U+5f6c-5f6d,U+5f70-5f71,U+5f77,U+5f79,U+5f7b-5f7c,U+5f80-5f81,U+5f84-5f85,U+5f87-5f8b,U+5f90,U+5f92,U+5f95,U+5f97-5f98,U+5fa1,U+5fa8,U+5faa,U+5fad-5fae,U+5fb5,U+5fb7,U+5fbc-5fbd,U+5fc3,U+5fc5-5fc6}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.ao.woff2) format("woff2");unicode-range:U+5c7f,U+5c81-5c82,U+5c8c,U+5c94,U+5c96-5c97,U+5c9a-5c9b,U+5ca9,U+5cad,U+5cb3,U+5cb8,U+5cbf,U+5ccb,U+5cd9,U+5ce1,U+5ce5-5ce6,U+5ce8,U+5cea,U+5ced,U+5cf0,U+5cfb,U+5d02,U+5d07,U+5d0e,U+5d14,U+5d16,U+5d1b,U+5d24,U+5d29,U+5d2d,U+5d34,U+5d3d,U+5d4c,U+5d58,U+5d6c,U+5d82,U+5d99,U+5dc5,U+5dcd,U+5ddd-5dde,U+5de1-5de2,U+5de5-5de9,U+5deb,U+5dee,U+5df1-5df4,U+5df7,U+5dfe,U+5e01-5e03,U+5e05-5e06,U+5e08,U+5e0c,U+5e10-5e11,U+5e15-5e16,U+5e18,U+5e1a-5e1d,U+5e26-5e27,U+5e2d-5e2e,U+5e37-5e38,U+5e3c-5e3d,U+5e42,U+5e44-5e45,U+5e4c,U+5e54-5e55,U+5e61-5e62,U+5e72-5e74,U+5e76,U+5e78,U+5e7a-5e7d}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.ap.woff2) format("woff2");unicode-range:U+5b85,U+5b87-5b89,U+5b8b-5b8c,U+5b8f,U+5b95,U+5b97-5b9e,U+5ba0-5ba4,U+5ba6,U+5baa-5bab,U+5bb0,U+5bb3-5bb6,U+5bb9,U+5bbd-5bbf,U+5bc2,U+5bc4-5bc7,U+5bcc,U+5bd0,U+5bd2-5bd3,U+5bdd-5bdf,U+5be1,U+5be4-5be5,U+5be8,U+5bf0,U+5bf8-5bfc,U+5bff,U+5c01,U+5c04,U+5c06,U+5c09-5c0a,U+5c0f,U+5c11,U+5c14,U+5c16,U+5c18,U+5c1a,U+5c1d,U+5c24,U+5c27,U+5c2c,U+5c31,U+5c34,U+5c38-5c3a,U+5c3c-5c42,U+5c45,U+5c48-5c4b,U+5c4e-5c51,U+5c55,U+5c5e,U+5c60-5c61,U+5c65,U+5c6f,U+5c71,U+5c79}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.aq.woff2) format("woff2");unicode-range:U+5996,U+5999,U+599e,U+59a5,U+59a8-59aa,U+59ae,U+59b2,U+59b9,U+59bb,U+59be,U+59c6,U+59cb,U+59d0-59d1,U+59d3-59d4,U+59d7-59d8,U+59da,U+59dc-59dd,U+59e3,U+59e5,U+59e8,U+59ec,U+59f9,U+59fb,U+59ff,U+5a01,U+5a03-5a04,U+5a06-5a07,U+5a11,U+5a13,U+5a18,U+5a1c,U+5a1f-5a20,U+5a25,U+5a29,U+5a31-5a32,U+5a34,U+5a36,U+5a3c,U+5a40,U+5a46,U+5a49-5a4a,U+5a5a,U+5a62,U+5a6a,U+5a74,U+5a76-5a77,U+5a7f,U+5a92,U+5a9a-5a9b,U+5ab2-5ab3,U+5ac1-5ac2,U+5ac9,U+5acc,U+5ad4,U+5ad6,U+5ae1,U+5ae3,U+5ae6,U+5ae9,U+5b09,U+5b34,U+5b37,U+5b40,U+5b50,U+5b54-5b55,U+5b57-5b59,U+5b5c-5b5d,U+5b5f,U+5b63-5b64,U+5b66,U+5b69-5b6a,U+5b6c,U+5b70-5b71,U+5b75,U+5b7a,U+5b7d,U+5b81,U+5b83}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.ar.woff2) format("woff2");unicode-range:U+57ce,U+57d4,U+57df-57e0,U+57f9-57fa,U+5800,U+5802,U+5806,U+5811,U+5815,U+5821,U+5824,U+582a,U+5830,U+5835,U+584c,U+5851,U+5854,U+5858,U+585e,U+586b,U+587e,U+5883,U+5885,U+5892-5893,U+5899,U+589e-589f,U+58a8-58a9,U+58c1,U+58d1,U+58d5,U+58e4,U+58eb-58ec,U+58ee,U+58f0,U+58f3,U+58f6,U+58f9,U+5904,U+5907,U+590d,U+590f,U+5915-5916,U+5919-591a,U+591c,U+591f,U+5927,U+5929-592b,U+592d-592f,U+5931,U+5934,U+5937-593a,U+5942,U+5944,U+5947-5949,U+594b,U+594e-594f,U+5951,U+5954-5957,U+595a,U+5960,U+5962,U+5965,U+5973-5974,U+5976,U+5978-5979,U+597d,U+5981-5984,U+5986-5988,U+598a,U+598d,U+5992-5993}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.as.woff2) format("woff2");unicode-range:U+561b,U+561e-561f,U+5624,U+562d,U+5631-5632,U+5634,U+5636,U+5639,U+563b,U+563f,U+564c,U+564e,U+5654,U+5657,U+5659,U+565c,U+5662,U+5664,U+5668-566c,U+5676,U+567c,U+5685,U+568e-568f,U+5693,U+56a3,U+56b7,U+56bc,U+56ca,U+56d4,U+56da-56db,U+56de,U+56e0,U+56e2,U+56e4,U+56ed,U+56f0-56f1,U+56f4,U+56f9-56fa,U+56fd-56ff,U+5703,U+5706,U+5708-5709,U+571f,U+5723,U+5728,U+572d,U+5730,U+573a,U+573e,U+5740,U+5747,U+574a,U+574d-5751,U+5757,U+575a-575b,U+575d-5761,U+5764,U+5766,U+5768,U+576a,U+576f,U+5773,U+5777,U+5782-5784,U+578b,U+5792,U+579b,U+57a0,U+57a2-57a3,U+57a6,U+57ab,U+57ae,U+57c2-57c3,U+57cb}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.at.woff2) format("woff2");unicode-range:U+54e5-54ea,U+54ed-54ee,U+54f2,U+54fa,U+54fc-54fd,U+5501,U+5506-5507,U+5509,U+550f-5510,U+5514,U+5520,U+5522,U+5524,U+5527,U+552c,U+552e-5531,U+5533,U+553e-553f,U+5543-5544,U+5546,U+554a,U+5550,U+5555-5556,U+555c,U+5561,U+5564-5567,U+556a,U+556c,U+556e,U+5575,U+5577-5578,U+557b-557c,U+557e,U+5580,U+5582-5584,U+5587,U+5589-558b,U+558f,U+5591,U+5594,U+5598-5599,U+559c-559d,U+559f,U+55a7,U+55b3,U+55b7,U+55bb,U+55bd,U+55c5,U+55d1-55d4,U+55d6,U+55dc-55dd,U+55df,U+55e1,U+55e3-55e6,U+55e8,U+55eb-55ec,U+55ef,U+55f7,U+55fd,U+5600-5601,U+5608-5609,U+560e,U+5618}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.au.woff2) format("woff2");unicode-range:U+5411,U+5413,U+5415,U+5417,U+541b,U+541d-5420,U+5426-5429,U+542b-542f,U+5431,U+5434-5435,U+5438-5439,U+543b-543c,U+543e,U+5440,U+5443,U+5446,U+5448,U+544a,U+5450,U+5453,U+5455,U+5457-5458,U+545b-545c,U+5462,U+5464,U+5466,U+5468,U+5471-5473,U+5475,U+5478,U+547b-547d,U+5480,U+5482,U+5484,U+5486,U+548b-548c,U+548e-5490,U+5492,U+5494-5496,U+5499-549b,U+54a4,U+54a6-54ad,U+54af,U+54b1,U+54b3,U+54b8,U+54bb,U+54bd,U+54bf-54c2,U+54c4,U+54c6-54c9,U+54cd-54ce,U+54d0-54d2,U+54d5,U+54d7,U+54da,U+54dd,U+54df}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.av.woff2) format("woff2");unicode-range:U+5348-534a,U+534e-534f,U+5351-5353,U+5355-5357,U+535a,U+535c,U+535e-5362,U+5364,U+5366-5367,U+536b,U+536f-5371,U+5373-5375,U+5377-5378,U+537f,U+5382,U+5384-5386,U+5389,U+538b-538c,U+5395,U+5398,U+539a,U+539f,U+53a2,U+53a5-53a6,U+53a8-53a9,U+53ae,U+53bb,U+53bf,U+53c1-53c2,U+53c8-53cd,U+53d1,U+53d4,U+53d6-53d9,U+53db,U+53df-53e0,U+53e3-53e6,U+53e8-53f3,U+53f6-53f9,U+53fc-53fd,U+5401,U+5403-5404,U+5408-540a,U+540c-5410}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.aw.woff2) format("woff2");unicode-range:U+5207,U+520a,U+520d-520e,U+5211-5212,U+5217-521b,U+521d,U+5220,U+5224,U+5228-5229,U+522b,U+522d-522e,U+5230,U+5236-523b,U+523d,U+5241-5243,U+524a,U+524c-524d,U+5250-5251,U+5254,U+5256,U+525c,U+5265,U+5267,U+5269-526a,U+526f,U+5272,U+527d,U+527f,U+5288,U+529b,U+529d-52a1,U+52a3,U+52a8-52ab,U+52ad,U+52b1-52b3,U+52be-52bf,U+52c3,U+52c7,U+52c9,U+52cb,U+52d0,U+52d2,U+52d8,U+52df,U+52e4,U+52fa,U+52fe-5300,U+5305-5306,U+5308,U+530d,U+5310,U+5315-5317,U+5319,U+531d,U+5320-5321,U+5323,U+532a,U+532e,U+5339-533b,U+533e-533f,U+5341,U+5343,U+5347}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.ax.woff2) format("woff2");unicode-range:U+50cf,U+50d6,U+50da,U+50e7,U+50ee,U+50f3,U+50f5,U+50fb,U+5106,U+510b,U+5112,U+5121,U+513f-5141,U+5143-5146,U+5148-5149,U+514b,U+514d,U+5151,U+5154,U+515a,U+515c,U+5162,U+5165,U+5168,U+516b-516e,U+5170-5171,U+5173-5179,U+517b-517d,U+5180,U+5185,U+5188-5189,U+518c-518d,U+5192,U+5195,U+5197,U+5199,U+519b-519c,U+51a0,U+51a2,U+51a4-51a5,U+51ac,U+51af-51b0,U+51b2-51b3,U+51b5-51b7,U+51bb,U+51bd,U+51c0,U+51c4,U+51c6,U+51c9,U+51cb-51cc,U+51cf,U+51d1,U+51db,U+51dd,U+51e0-51e1,U+51e4,U+51ed,U+51ef-51f0,U+51f3,U+51f6,U+51f8-51fb,U+51fd,U+51ff-5201,U+5203,U+5206}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.ay.woff2) format("woff2");unicode-range:U+4f60,U+4f63,U+4f65,U+4f69,U+4f6c,U+4f6f-4f70,U+4f73-4f74,U+4f7b-4f7c,U+4f7f,U+4f83-4f84,U+4f88,U+4f8b,U+4f8d,U+4f97,U+4f9b,U+4f9d,U+4fa0,U+4fa3,U+4fa5-4faa,U+4fac,U+4fae-4faf,U+4fb5,U+4fbf,U+4fc3-4fc5,U+4fca,U+4fce-4fd1,U+4fd7-4fd8,U+4fda,U+4fdd-4fde,U+4fe1,U+4fe6,U+4fe8-4fe9,U+4fed-4fef,U+4ff1,U+4ff8,U+4ffa,U+4ffe,U+500c-500d,U+500f,U+5012,U+5014,U+5018-501a,U+501c,U+501f,U+5021,U+5026,U+5028-502a,U+502d,U+503a,U+503c,U+503e,U+5043,U+5047-5048,U+504c,U+504e-504f,U+5055,U+505a,U+505c,U+5065,U+5076-5077,U+507b,U+507f-5080,U+5085,U+5088,U+508d,U+50a3,U+50a5,U+50a8,U+50ac,U+50b2,U+50bb}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.az.woff2) format("woff2");unicode-range:U+4e94-4e95,U+4e98,U+4e9a-4e9b,U+4e9f,U+4ea1-4ea2,U+4ea4-4ea9,U+4eab-4eae,U+4eb2,U+4eb5,U+4eba,U+4ebf-4ec1,U+4ec3-4ec7,U+4eca-4ecb,U+4ecd-4ece,U+4ed1,U+4ed3-4ed9,U+4ede-4edf,U+4ee3-4ee5,U+4ee8,U+4eea,U+4eec,U+4ef0,U+4ef2,U+4ef5-4ef7,U+4efb,U+4efd,U+4eff,U+4f01,U+4f0a,U+4f0d-4f11,U+4f17-4f1a,U+4f1e-4f20,U+4f22,U+4f24-4f26,U+4f2a-4f2b,U+4f2f-4f30,U+4f34,U+4f36,U+4f38,U+4f3a,U+4f3c-4f3d,U+4f43,U+4f46,U+4f4d-4f51,U+4f53,U+4f55,U+4f58-4f59,U+4f5b-4f5e}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.a0.woff2) format("woff2");unicode-range:U+d7,U+e0-e1,U+e8-ea,U+ec-ed,U+f2-f3,U+f7,U+f9-fa,U+fc,U+2014,U+2018-2019,U+201c-201d,U+3001-3002,U+300a-300b,U+3010-3011,U+4e00-4e01,U+4e03,U+4e07-4e0b,U+4e0d-4e0e,U+4e10-4e11,U+4e13-4e14,U+4e16,U+4e18-4e1e,U+4e22,U+4e24-4e25,U+4e27,U+4e2a-4e2b,U+4e2d,U+4e30,U+4e32,U+4e34,U+4e38-4e3b,U+4e3d-4e3e,U+4e43,U+4e45,U+4e48-4e49,U+4e4b-4e50,U+4e52-4e54,U+4e56,U+4e58-4e59,U+4e5c-4e61,U+4e66,U+4e70-4e71,U+4e73,U+4e7e,U+4e86,U+4e88-4e89,U+4e8b-4e8c,U+4e8e-4e8f,U+4e91-4e93}@font-face{font-family:HarmonyOS_Medium;font-style:normal;font-weight:500;font-display:swap;src:url(//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Medium.a1.woff2) format("woff2");unicode-range:U+21-7e,U+a4,U+a7-a8,U+b0-b1,U+b7}';
  const dynamicStyle = "html[hide-dynamic-page-fixed-header] .fixed-header .bili-header__bar{position:relative!important}html[hide-dynamic-page-fixed-header] aside.right section.sticky{top:15px!important}html[exchange-dynamic-page-left-right-aside] aside.left{order:3;margin-right:0!important}html[exchange-dynamic-page-left-right-aside] main{order:2}html[exchange-dynamic-page-left-right-aside] aside.right{order:1;margin-right:12px!important}html[exchange-dynamic-page-left-right-aside] .bili-dyn-sidebar{order:4}html[hide-dynamic-page-bili-dyn-avatar-pendent] .b-avatar__layer.center{width:48px!important;height:48px!important}html[hide-dynamic-page-bili-dyn-avatar-pendent] .b-avatar__layers .b-avatar__layer.center:nth-child(2) picture{display:none!important}html[hide-dynamic-page-bili-dyn-avatar-pendent] .b-avatar__layers:has(.b-avatar__layer__res[style^=background]){display:none!important}html[hide-dynamic-page-bili-dyn-avatar-icon] .b-avatar__layers .b-avatar__layer:last-child:not(.center){display:none!important}html[hide-dynamic-page-bili-dyn-ornament] .bili-dyn-ornament,html[hide-dynamic-page-bili-dyn-ornament] .bili-dyn-item__ornament,html[hide-dynamic-page-bili-dyn-dispute] .bili-dyn-content__dispute,html[hide-dynamic-page-bili-dyn-watchlater] .bili-dyn-card-video__mark,html[hide-dynamic-page-bili-dyn-official-topic] .bili-dyn-content__orig__topic,html[hide-dynamic-page-bili-dyn-official-topic] .bili-dyn-content__forw__topic{display:none!important}html[hide-dynamic-page-bili-dyn-text-topic] .bili-rich-text-topic{color:inherit!important}html[hide-dynamic-page-bili-dyn-text-topic] .bili-rich-text-topic:hover{color:var(--brand_blue)!important}html[hide-dynamic-page-bili-dyn-item-interaction] .bili-dyn-item__interaction{display:none!important}html[hide-dynamic-page-bili-dyn-card-reserve] .bili-dyn-list__item:has(.bili-dyn-card-reserve){display:none!important}html[hide-dynamic-page-bili-dyn-card-goods] .bili-dyn-list__item:has(.bili-dyn-card-goods),html[hide-dynamic-page-bili-dyn-card-goods] .bili-dyn-list__item:has(.bili-rich-text-module.goods),html[hide-dynamic-page-bili-dyn-card-goods] .bili-dyn-list__item:has([data-type=goods]){visibility:hidden!important;height:0!important;margin:0!important}html[hide-dynamic-page-bili-dyn-lottery] .bili-dyn-list__item:has([data-type=lottery]){display:none!important}html[hide-dynamic-page-bili-dyn-forward] .bili-dyn-list__item:has(.bili-dyn-content__orig.reference){display:none!important}html[hide-dynamic-page-bili-dyn-vote] .bili-dyn-list__item:has(.bili-dyn-card-vote){display:none!important}html[hide-dynamic-page-bili-dyn-live] .bili-dyn-list__item:has(.bili-dyn-card-live){display:none!important}html[hide-dynamic-page-bili-dyn-blocked] .bili-dyn-list__item:has(.dyn-blocked-mask){display:none!important}html[hide-dynamic-page-bili-dyn-charge-video] .bili-dyn-list__item:has(.bili-dyn-card-video__badge [src*=qcRJ6sJU91]){display:none!important}html[hide-dynamic-page-bili-dyn-publishing] .bili-dyn-publishing{display:none!important}html[hide-dynamic-page-bili-dyn-publishing] main section:nth-child(1){margin-bottom:0!important}html[dynamic-page-up-list-dual-line-mode] .bili-dyn-up-list__content{display:grid!important;grid-auto-flow:column!important;grid-template-rows:auto auto!important}html[dynamic-page-up-list-dual-line-mode] .bili-dyn-up-list__content .shim{display:none!important}html[dynamic-page-up-list-dual-line-mode] .bili-dyn-up-list__item{height:auto!important}html[dynamic-page-up-list-dual-line-mode] .bili-dyn-up-list__window{padding:10px!important}html[dynamic-page-up-list-dual-line-mode] .bili-dyn-up-list__nav__btn{zoom:1.4;transition:background-color .1s linear}html[dynamic-page-up-list-dual-line-mode] .bili-dyn-up-list__nav__btn:hover{background-color:#00aeec!important;color:#fff!important}html[dynamic-page-up-list-checked-item-opacity] .bili-dyn-up-list__item:not(.active):has(.bili-dyn-up-list__item__face .bili-dyn-up-list__item__face__img:only-child){transition:opacity .2s ease-out;opacity:.25}html[dynamic-page-up-list-checked-item-opacity] .bili-dyn-up-list__item:hover{transition:opacity .1s linear!important;opacity:1!important}@keyframes disappear{0%{opacity:1;width:68px;margin-right:6px}99%{opacity:0;width:0;margin-right:0}to{opacity:0;width:0;margin-right:0;display:none}}html[dynamic-page-up-list-checked-item-hide] .bili-dyn-up-list__item:not(.active):has(.bili-dyn-up-list__item__face .bili-dyn-up-list__item__face__img:only-child){animation:disappear;animation-duration:.5s;animation-delay:1s;animation-fill-mode:forwards}@supports (-moz-appearance: none){html[dynamic-page-up-list-checked-item-hide] .bili-dyn-up-list__item:not(.active):has(.bili-dyn-up-list__item__face .bili-dyn-up-list__item__face__img:only-child){display:none}}html[hide-dynamic-page-bili-dyn-list-tabs] .bili-dyn-list-tabs{display:none!important}html[hide-dynamic-page-bili-dyn-my-info] aside.left section{display:none!important}html[hide-dynamic-page-bili-dyn-my-info] .bili-dyn-live-users{top:15px!important}html[hide-dynamic-page-bili-dyn-live-users__item__living] .bili-dyn-live-users__item__living{display:none!important}html[hide-dynamic-page-aside-left] aside.left{display:none!important}html[hide-dynamic-page-bili-dyn-banner] .bili-dyn-banner{display:none!important}html[hide-dynamic-page-bili-dyn-ads] section:has(.bili-dyn-ads){display:none!important}html[hide-dynamic-page-bili-dyn-ads] aside.right section{margin-bottom:0!important}html[hide-dynamic-page-bili-dyn-ads] aside.right section.sticky{top:72px}html[hide-dynamic-page-bili-dyn-topic-box] .bili-dyn-topic-box,html[hide-dynamic-page-bili-dyn-topic-box] .topic-panel{display:none!important}html[hide-dynamic-page-aside-right] aside.right{display:none!important}html[dynamic-list-width] main{width:var(--dynamic-list-width)!important}html[dynamic-list-width] .bili-album__watch__content img{max-height:80vh!important}html[dynamic-detail-width] .opus-detail{width:var(--dynamic-detail-width)!important}html[dynamic-detail-width] .opus-detail .right-sidebar-wrap{margin-left:calc(var(--dynamic-detail-width) + 10px)!important}html[dynamic-detail-width] .content:has(.card .bili-dyn-item){width:var(--dynamic-detail-width)!important}html[hide-dynamic-page-sidebar-old-version] .bili-dyn-sidebar .bili-dyn-sidebar__btn:first-child{visibility:hidden!important}html[hide-dynamic-page-sidebar-old-version] .opus-detail .side-toolbar__bottom .side-toolbar__btn:not(.backtop){display:none!important}html[hide-dynamic-page-sidebar-back-to-top] .bili-dyn-sidebar .bili-dyn-sidebar__btn:last-child{visibility:hidden!important}";
  const homepageStyle = `html[homepage-hide-banner] .bili-header__banner{min-height:unset!important;height:64px!important;background:var(--bg1, white)!important}html[homepage-hide-banner] .bili-header__banner>*{display:none!important}html[homepage-hide-banner] .bili-header__bar,html[homepage-hide-banner] .bili-feed4 .bili-header .slide-down{box-shadow:0 2px 4px #00000014!important}html[homepage-hide-banner] .bili-header .right-entry__outside .right-entry-icon,html[homepage-hide-banner] .bili-header .left-entry .entry-title,html[homepage-hide-banner] .bili-header .left-entry .download-entry,html[homepage-hide-banner] .bili-header .left-entry .default-entry,html[homepage-hide-banner] .bili-header .left-entry .loc-entry{color:var(--text1, #18191c)!important}html[homepage-hide-banner] .bili-header .left-entry .entry-title .zhuzhan-icon{color:#00aeec!important}html[homepage-hide-banner] .bili-header .right-entry__outside .right-entry-text{color:var(--text2, #61666d)!important}html[homepage-hide-banner] .bili-feed4 .bili-header .slide-down{animation:headerSlideDown .3s linear forwards!important}html[homepage-hide-banner] .v-popover.is-top{padding-top:5px;padding-bottom:unset!important;bottom:unset!important}@media (width >= 2200px){html[homepage-hide-banner] .v-popover.is-top{top:32px}}@media (width >= 1701px) and (width <= 2199.9px){html[homepage-hide-banner] .v-popover.is-top{top:32px}}@media (width >= 1367px) and (width <= 1700.9px){html[homepage-hide-banner] .v-popover.is-top{top:28px}}@media (width >= 1100px) and (width <= 1366.9px){html[homepage-hide-banner] .v-popover.is-top{top:28px}}@media (width <= 1099.9px){html[homepage-hide-banner] .v-popover.is-top{top:24px}}html[homepage-hide-recommend-swipe] .recommended-swipe{display:none!important}html[homepage-hide-recommend-swipe] .recommended-container_floor-aside .container>*:nth-of-type(5){margin-top:0!important}html[homepage-hide-recommend-swipe] .recommended-container_floor-aside .container>*:nth-of-type(6){margin-top:0!important}html[homepage-hide-recommend-swipe] .recommended-container_floor-aside .container>*:nth-of-type(7){margin-top:0!important}html[homepage-hide-recommend-swipe] .recommended-container_floor-aside .container>*:nth-of-type(n+8){margin-top:0!important}html[homepage-hide-recommend-swipe] .recommended-container_floor-aside .container .feed-card:nth-of-type(n+9){display:inherit!important}html[homepage-hide-recommend-swipe] .recommended-container_floor-aside .container.is-version8>*:nth-of-type(n+13){margin-top:0!important}html[homepage-hide-recommend-swipe] .recommended-container_floor-aside .container .feed-card:nth-of-type(n+12){display:inherit!important}html[homepage-hide-recommend-swipe] .recommended-container_floor-aside .container .floor-single-card:first-of-type{margin-top:0!important}@media (width <= 1099.9px){html[homepage-hide-recommend-swipe] .bili-header .bili-header__channel{height:84px!important}}@media (width >= 1100px) and (width <= 1366.9px){html[homepage-hide-recommend-swipe] .bili-header .bili-header__channel{height:84px!important}}@media (width >= 1367px) and (width <= 1700.9px){html[homepage-hide-recommend-swipe] .bili-header .bili-header__channel{height:94px!important}}@media (width >= 1701px) and (width <= 2199.9px){html[homepage-hide-recommend-swipe] .bili-header .bili-header__channel{height:104px!important}}@media (width >= 2200px){html[homepage-hide-recommend-swipe] .bili-header .bili-header__channel{height:114px!important}}html[homepage-hide-subarea] #i_cecream .bili-header__channel .channel-icons,html[homepage-hide-subarea] #i_cecream .bili-header__channel .right-channel-container{display:none!important}html[homepage-hide-subarea] #i_cecream .bili-header__channel{height:0!important}html[homepage-hide-subarea] #i_cecream main.bili-feed4-layout:not(:has(.bilibili-app-recommend-root)){margin-top:20px!important}html[homepage-hide-sticky-header] .bili-header .left-entry__title svg{display:none!important}html[homepage-hide-sticky-header] #i_cecream .bili-feed4 .bili-header .slide-down{box-shadow:unset!important}html[homepage-hide-sticky-header] #nav-searchform.is-actived:before,html[homepage-hide-sticky-header] #nav-searchform.is-exper:before,html[homepage-hide-sticky-header] #nav-searchform.is-exper:hover:before,html[homepage-hide-sticky-header] #nav-searchform.is-focus:before,html[homepage-hide-sticky-header] .bili-header .slide-down{background:unset!important}html[homepage-hide-sticky-header] .bili-header .slide-down{position:absolute!important;top:0;animation:unset!important;box-shadow:unset!important}html[homepage-hide-sticky-header] .bili-header .slide-down .left-entry{margin-right:30px!important}html[homepage-hide-sticky-header] .bili-header .slide-down .left-entry .default-entry,html[homepage-hide-sticky-header] .bili-header .slide-down .left-entry .download-entry,html[homepage-hide-sticky-header] .bili-header .slide-down .left-entry .entry-title,html[homepage-hide-sticky-header] .bili-header .slide-down .left-entry .entry-title .zhuzhan-icon,html[homepage-hide-sticky-header] .bili-header .slide-down .left-entry .loc-entry,html[homepage-hide-sticky-header] .bili-header .slide-down .left-entry .loc-mc-box__text,html[homepage-hide-sticky-header] .bili-header .slide-down .left-entry .mini-header__title,html[homepage-hide-sticky-header] .bili-header .slide-down .right-entry .right-entry__outside .right-entry-icon,html[homepage-hide-sticky-header] .bili-header .slide-down .right-entry .right-entry__outside .right-entry-text{color:#fff!important}html[homepage-hide-sticky-header] .bili-header .slide-down .download-entry,html[homepage-hide-sticky-header] .bili-header .slide-down .loc-entry{display:unset!important}html[homepage-hide-sticky-header] .bili-header .slide-down .center-search-container,html[homepage-hide-sticky-header] .bili-header .slide-down .center-search-container .center-search__bar{margin:0 auto!important}html[homepage-hide-sticky-header] #nav-searchform{background:#f1f2f3}html[homepage-hide-sticky-header] #nav-searchform:hover{background-color:var(--bg1)!important;opacity:1}html[homepage-hide-sticky-header] #nav-searchform.is-focus{border:1px solid var(--line_regular)!important;border-bottom:none!important;background:var(--bg1)!important}html[homepage-hide-sticky-header] #nav-searchform.is-actived.is-exper4-actived,html[homepage-hide-sticky-header] #nav-searchform.is-focus.is-exper4-actived{border-bottom:unset!important}html[homepage-hide-sticky-header] #i_cecream .header-channel{top:0!important}html[homepage-hide-sticky-subarea] #i_cecream .header-channel{display:none!important}html[homepage-hide-sticky-subarea] .bili-feed4 .bili-header .slide-down{animation:headerSlideDown .3s linear forwards!important}html[homepage-hide-sticky-subarea] #i_cecream .bili-header__bar:not(.slide-down){transition:background-color .2s linear}html[homepage-hide-adblock-tips] .adblock-tips{display:none!important}html[homepage-revert-channel-dynamic-icon] .bili-header__channel .channel-icons .icon-bg__dynamic picture{display:none!important}html[homepage-revert-channel-dynamic-icon] .bili-header__channel .channel-icons .icon-bg__dynamic svg{display:none!important}html[homepage-revert-channel-dynamic-icon] .bili-header__channel .channel-icons .icon-bg__dynamic:after{content:"";width:25px;height:25px;background-image:url('data:image/svg+xml,<svg width="22" height="23" viewBox="0 0 22 23" fill="none" xmlns="http://www.w3.org/2000/svg" class="icon-bg--icon" data-v-674f5b07=""> <path d="M6.41659 15.625C3.88528 15.625 1.83325 13.7782 1.83325 11.5H10.9999C10.9999 13.7782 8.94789 15.625 6.41659 15.625Z" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> <path d="M15.125 16.0827C15.125 18.614 13.2782 20.666 11 20.666L11 11.4993C13.2782 11.4993 15.125 13.5514 15.125 16.0827Z" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> <path d="M6.875 6.91667C6.875 9.44797 8.72183 11.5 11 11.5L11 2.33333C8.72182 2.33333 6.875 4.38536 6.875 6.91667Z" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> <path d="M15.5833 7.375C13.052 7.375 11 9.22183 11 11.5H20.1667C20.1667 9.22183 18.1146 7.375 15.5833 7.375Z" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg>');background-size:contain;background-repeat:no-repeat;background-position:center}html[homepage-layout-4-column] #i_cecream .recommended-container_floor-aside .container{grid-template-columns:repeat(4,1fr)!important}html[homepage-layout-5-column] #i_cecream .recommended-container_floor-aside .container{grid-template-columns:repeat(5,1fr)!important}html[homepage-layout-6-column] #i_cecream .recommended-container_floor-aside .container{grid-template-columns:repeat(6,1fr)!important}html[homepage-layout-padding] .bili-feed4-layout,html[homepage-layout-padding] .bili-feed4 .bili-header .bili-header__channel{padding:0 var(--homepage-layout-padding, initial)!important;width:100%!important}html[homepage-hide-up-info-icon-bilibili-app-recommend] .bilibili-app-recommend-root .bili-video-card__info--owner+span{display:none}html[homepage-hide-danmaku-count-bilibili-app-recommend] .bilibili-app-recommend-root .bili-video-card:has(use) .bili-video-card__stats--item:has([href="#widget-video-danmaku"]){display:none!important}html[homepage-hide-agree-count-bilibili-app-recommend] .bilibili-app-recommend-root .bili-video-card:has(use) .bili-video-card__stats--item:has([href="#widget-agree"]){display:none!important}html[homepage-increase-rcmd-list-font-size] main .bili-video-card .bili-video-card__info--tit,html[homepage-increase-rcmd-list-font-size] main .bili-live-card .bili-live-card__info--tit,html[homepage-increase-rcmd-list-font-size] main .single-card.floor-card .title{font-size:16px!important}html[homepage-increase-rcmd-list-font-size] main .bili-video-card .bili-video-card__info--bottom,html[homepage-increase-rcmd-list-font-size] main .floor-card .sub-title.sub-title{font-size:14px!important}html[homepage-increase-rcmd-list-font-size] main .bili-video-card__stats,html[homepage-increase-rcmd-list-font-size] main .bili-video-card__stats .bili-video-card__stats--left,html[homepage-increase-rcmd-list-font-size] main .bili-video-card__stats .bili-video-card__stats--right{font-size:14px!important}html[homepage-move-no-interest] main .bili-video-card__info--no-interest{top:unset!important;bottom:0!important}html[homepage-move-no-interest] main .bili-video-card__info--bottom{padding-right:20px!important}html[homepage-move-no-interest] main .bili-video-card.enable-no-interest,html[homepage-move-no-interest] main .bili-live-card.enable-no-interest{--title-padding-right: 0}html[homepage-hide-no-interest] main .bili-video-card.enable-no-interest,html[homepage-hide-no-interest] main .bili-live-card.enable-no-interest{--title-padding-right: 0}html[homepage-hide-no-interest] main .bili-video-card__info--no-interest,html[homepage-hide-no-interest] main .bili-live-card__info--no-interest{display:none!important}html[homepage-hide-up-info-icon] main .bili-video-card .bili-video-card__info--icon-text{width:17px;height:17px;color:transparent!important;background-color:unset!important;border-radius:unset!important;margin:0 2px 0 0!important;font-size:0!important;line-height:unset!important;padding:unset!important;-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}html[homepage-hide-up-info-icon] main .bili-video-card .bili-video-card__info--icon-text:before{content:"";display:inline-block;width:100%;height:100%;background-image:url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" class="bili-video-card__info--owner__up"><!--[--><path d="M6.15 8.24805C6.5642 8.24805 6.9 8.58383 6.9 8.99805L6.9 12.7741C6.9 13.5881 7.55988 14.248 8.3739 14.248C9.18791 14.248 9.8478 13.5881 9.8478 12.7741L9.8478 8.99805C9.8478 8.58383 10.1836 8.24805 10.5978 8.24805C11.012 8.24805 11.3478 8.58383 11.3478 8.99805L11.3478 12.7741C11.3478 14.41655 10.01635 15.748 8.3739 15.748C6.73146 15.748 5.4 14.41655 5.4 12.7741L5.4 8.99805C5.4 8.58383 5.73578 8.24805 6.15 8.24805z" fill="rgb(148, 153, 160)"></path><path d="M12.6522 8.99805C12.6522 8.58383 12.98795 8.24805 13.4022 8.24805L15.725 8.24805C17.31285 8.24805 18.6 9.53522 18.6 11.123C18.6 12.71085 17.31285 13.998 15.725 13.998L14.1522 13.998L14.1522 14.998C14.1522 15.4122 13.8164 15.748 13.4022 15.748C12.98795 15.748 12.6522 15.4122 12.6522 14.998L12.6522 8.99805zM14.1522 12.498L15.725 12.498C16.4844 12.498 17.1 11.8824 17.1 11.123C17.1 10.36365 16.4844 9.74804 15.725 9.74804L14.1522 9.74804L14.1522 12.498z" fill="rgb(148, 153, 160)"></path><path d="M12 4.99805C9.48178 4.99805 7.283 5.12616 5.73089 5.25202C4.65221 5.33949 3.81611 6.16352 3.72 7.23254C3.60607 8.4998 3.5 10.171 3.5 11.998C3.5 13.8251 3.60607 15.4963 3.72 16.76355C3.81611 17.83255 4.65221 18.6566 5.73089 18.7441C7.283 18.8699 9.48178 18.998 12 18.998C14.5185 18.998 16.7174 18.8699 18.2696 18.74405C19.3481 18.65655 20.184 17.8328 20.2801 16.76405C20.394 15.4973 20.5 13.82645 20.5 11.998C20.5 10.16965 20.394 8.49877 20.2801 7.23205C20.184 6.1633 19.3481 5.33952 18.2696 5.25205C16.7174 5.12618 14.5185 4.99805 12 4.99805zM5.60965 3.75693C7.19232 3.62859 9.43258 3.49805 12 3.49805C14.5677 3.49805 16.8081 3.62861 18.3908 3.75696C20.1881 3.90272 21.6118 5.29278 21.7741 7.09773C21.8909 8.3969 22 10.11405 22 11.998C22 13.88205 21.8909 15.5992 21.7741 16.8984C21.6118 18.7033 20.1881 20.09335 18.3908 20.23915C16.8081 20.3675 14.5677 20.498 12 20.498C9.43258 20.498 7.19232 20.3675 5.60965 20.2392C3.81206 20.0934 2.38831 18.70295 2.22603 16.8979C2.10918 15.5982 2 13.8808 2 11.998C2 10.1153 2.10918 8.39787 2.22603 7.09823C2.38831 5.29312 3.81206 3.90269 5.60965 3.75693z" fill="rgb(148, 153, 160)"></path><!--]--></svg>');background-size:contain;background-repeat:no-repeat;background-position:center}html[homepage-hide-video-info-date] main .bili-video-card__info--date{display:none!important}html[homepage-hide-danmaku-count] main .bili-video-card__stats--item:nth-child(2){display:none!important}html[homepage-hide-bili-watch-later-tip] main .bili-watch-later__tip--lab{display:none!important}html[homepage-hide-bili-watch-later] main .bili-watch-later{display:none!important}html[homepage-hide-inline-player-danmaku] main .bpx-player-row-dm-wrap,html[homepage-hide-inline-player-danmaku] main .bpx-player-cmd-dm-wrap{display:none!important}html[homepage-hide-ad-card] main :is(.feed-card,.bili-video-card):has(.bili-video-card__info--ad,[href*="cm.bilibili.com"],.bili-video-card__info--creative-ad){display:none!important}html[homepage-hide-ad-card] main :is(.feed-card,.bili-video-card):not(:has(.bili-video-card__wrap,.bili-video-card__skeleton)){display:none!important}html[homepage-hide-ad-card] main .recommended-container_floor-aside .container>*:nth-of-type(5){margin-top:0!important}html[homepage-hide-ad-card] main .recommended-container_floor-aside .container>*:nth-of-type(6){margin-top:0!important}html[homepage-hide-ad-card] main .recommended-container_floor-aside .container>*:nth-of-type(7){margin-top:0!important}html[homepage-hide-ad-card] main .recommended-container_floor-aside .container>*:nth-of-type(n+8){margin-top:0!important}html[homepage-hide-ad-card] main .recommended-container_floor-aside .container .feed-card:nth-of-type(n+9){display:inherit!important}html[homepage-hide-ad-card] main .recommended-container_floor-aside .container.is-version8>*:nth-of-type(n+13){margin-top:0!important}html[homepage-hide-ad-card] main .recommended-container_floor-aside .container .feed-card:nth-of-type(n+12){display:inherit!important}html[homepage-hide-ad-card] main .recommended-container_floor-aside .container .floor-single-card:first-of-type{margin-top:0!important}html[homepage-hide-live-card-recommend] main .bili-live-card,html[homepage-hide-live-card-recommend] main .floor-single-card:has(use[*|href$="#channel-live"]){display:none!important}html[homepage-simple-sub-area-card-recommend] main .floor-single-card .layer{display:none!important}html[homepage-simple-sub-area-card-recommend] main .floor-single-card .floor-card{box-shadow:unset!important;border:none!important}html[homepage-simple-sub-area-card-recommend] main .single-card.floor-card .floor-card-inner:hover{background:none!important}html[homepage-hide-sub-area-card-recommend] main .floor-single-card:not(:has(.skeleton,.skeleton-item)){display:none!important}html[homepage-hide-skeleton-animation] main .bili-video-card .loading_animation .bili-video-card__skeleton--light,html[homepage-hide-skeleton-animation] main .bili-video-card .loading_animation .bili-video-card__skeleton--text,html[homepage-hide-skeleton-animation] main .bili-video-card .loading_animation .bili-video-card__skeleton--face,html[homepage-hide-skeleton-animation] main .bili-video-card .loading_animation .bili-video-card__skeleton--cover{animation:none!important}html[homepage-hide-skeleton-animation] main .skeleton .skeleton-item{animation:none!important}html[homepage-hide-skeleton-animation] main .floor-skeleton .skeleton-item{animation:none!important}html[homepage-hide-skeleton-before-anchor] main .bili-video-card:not(.is-rcmd):has(~.load-more-anchor){display:none!important}html[homepage-hide-skeleton] main .load-more-anchor{visibility:hidden}html[homepage-hide-skeleton] main .bili-video-card:not(.is-rcmd),html[homepage-hide-skeleton] main .floor-single-card:has(.skeleton,.skeleton-item){display:none}html[homepage-increase-rcmd-load-size] main .container.is-version8>.floor-single-card:has(.skeleton,.skeleton-item,.floor-skeleton){display:none}html[homepage-rcmd-video-preload] main .bili-video-card:not(.is-rcmd):has(~.load-more-anchor){display:none!important}html[homepage-rcmd-video-preload] main .floor-single-card:not(:has(.skeleton,.skeleton-item)){display:none!important}html[homepage-rcmd-video-preload] main .load-more-anchor.preload{position:fixed;top:-100px;left:-100px;opacity:0}html[homepage-hide-desktop-download-tip] .desktop-download-tip,html[homepage-hide-trial-feed-wrap] .trial-feed-wrap,html[homepage-hide-feed-roll-btn] .feed-roll-btn,html[homepage-hide-watchlater-pip-button] .watchlater-pip-button,html[homepage-hide-adcard-button] .adcard,html[homepage-hide-adcard-button] .palette-button-wrap .adcard-content,html[homepage-hide-flexible-roll-btn-text] .palette-button-wrap .flexible-roll-btn .btn-text,html[homepage-hide-flexible-roll-btn] .palette-button-wrap .flexible-roll-btn,html[homepage-hide-feedback] .palette-button-wrap .storage-box,html[homepage-hide-top-btn] .palette-button-wrap .top-btn-wrap{display:none!important}`;
  const liveStyle = '@charset "UTF-8";html[live-page-sidebar-vm] #sidebar-vm{display:none!important}html[live-page-default-skin] #head-info-vm{background-image:unset!important;background-color:#fff}html[live-page-default-skin] .live-title .text{color:#61666d!important}html[live-page-default-skin] .header-info-ctnr .rows-ctnr .upper-row .room-owner-username{color:var(--text1, #18191c)!important}html[live-page-default-skin] #head-info-vm .live-skin-coloration-area .live-skin-normal-a-text{color:unset!important}html[live-page-default-skin] #head-info-vm .live-skin-coloration-area .live-skin-main-text{color:#61666d!important;fill:#61666d!important}html[live-page-default-skin] #gift-control-vm{background-image:unset!important}html[live-page-default-skin] #rank-list-vm,html[live-page-default-skin] #rank-list-ctnr-box{background-image:unset!important;background-color:#efefef}html[live-page-default-skin] #rank-list-ctnr-box *:not(.fans-medal-content),html[live-page-default-skin] #rank-list-ctnr-box .tabs .pilot .hasOne .text-style,html[live-page-default-skin] #rank-list-ctnr-box .tabs .pilot .hasNot .text-style,html[live-page-default-skin] #rank-list-ctnr-box .live-skin-coloration-area .live-skin-main-text,html[live-page-default-skin] #rank-list-ctnr-box .guard-skin .nameBox a{color:#000!important}html[live-page-default-skin] #chat-control-panel-vm .live-skin-coloration-area .live-skin-main-text{color:#c9ccd0!important;fill:#c9ccd0!important}html[live-page-default-skin] #chat-control-panel-vm{background-image:unset!important;background-color:#f6f7f8}html[live-page-default-skin] #chat-control-panel-vm .bl-button--primary{background-color:#23ade5}html[live-page-default-skin] #chat-control-panel-vm .icon-left-part svg>path{fill:#c9ccd0}html[live-page-default-skin] #chat-control-panel-vm .icon-left-part>div:hover svg>path{fill:#00aeec}html[live-page-remove-wallpaper] .room-bg{background-image:unset!important}html[live-page-remove-wallpaper] #player-ctnr{box-shadow:0 0 12px #0003;border-radius:12px}html[live-page-remove-wallpaper] #aside-area-vm{box-shadow:0 0 12px #0003}html[live-page-flip-view] .flip-view,html[live-page-room-info-ctnr] #sections-vm .room-info-ctnr,html[live-page-room-feed] #sections-vm .room-feed,html[live-page-announcement-cntr] #sections-vm .room-detail-box,html[live-page-sections-vm] #sections-vm{display:none!important}html[live-page-nav-search-rcmd] #nav-searchform input::-moz-placeholder{visibility:hidden;opacity:0!important}html[live-page-nav-search-rcmd] #nav-searchform input::placeholder{visibility:hidden;opacity:0!important}html[live-page-nav-search-history] #nav-searchform .history,html[live-page-nav-search-trending] #nav-searchform .trending,html[live-page-header-search-block] #nav-searchform,html[live-page-header-entry-logo] #main-ctnr a.entry_logo[href="//live.bilibili.com"]{display:none!important}html[live-page-header-entry-logo] .link-navbar-more .search-bar-ctnr{margin:0 auto!important}html[live-page-header-entry-logo] .pre-hold-nav-logo,html[live-page-header-entry-title] #main-ctnr a.entry-title[href="//www.bilibili.com"]{display:none!important}html[live-page-header-entry-title] .link-navbar-more .search-bar-ctnr{margin:0 auto!important}html[live-page-header-entry-title] #prehold-nav-vm .nav-item:has(a[href="//www.bilibili.com"]){display:none!important}html[live-page-header-live] #main-ctnr .dp-table-cell a[name=live]{display:none!important}html[live-page-header-live] .link-navbar-more .search-bar-ctnr{margin:0 auto!important}html[live-page-header-live] #prehold-nav-vm .nav-item:has(a[href="//live.bilibili.com"]){display:none!important}html[live-page-header-net-game] #main-ctnr .dp-table-cell a[name=网游]{display:none!important}html[live-page-header-net-game] .link-navbar-more .search-bar-ctnr{margin:0 auto!important}html[live-page-header-net-game] #prehold-nav-vm .nav-item:has(a[href*="parentAreaId=2"]){display:none!important}html[live-page-header-mobile-game] #main-ctnr .dp-table-cell a[name=手游]{display:none!important}html[live-page-header-mobile-game] .link-navbar-more .search-bar-ctnr{margin:0 auto!important}html[live-page-header-mobile-game] #prehold-nav-vm .nav-item:has(a[href*="parentAreaId=3"]){display:none!important}html[live-page-header-standalone-game] #main-ctnr .dp-table-cell a[name=单机游戏]{display:none!important}html[live-page-header-standalone-game] .link-navbar-more .search-bar-ctnr{margin:0 auto!important}html[live-page-header-standalone-game] #prehold-nav-vm .nav-item:has(a[href*="parentAreaId=6"]){display:none!important}html[live-page-header-standalone-vtuber] #main-ctnr .dp-table-cell a[name=虚拟主播]{display:none!important}html[live-page-header-standalone-vtuber] .link-navbar-more .search-bar-ctnr{margin:0 auto!important}html[live-page-header-standalone-vtuber] #prehold-nav-vm .nav-item:has(a[href*="parentAreaId=9"]){display:none!important}html[live-page-header-standalone-entertainment] #main-ctnr .dp-table-cell a[name=娱乐]{display:none!important}html[live-page-header-standalone-entertainment] .link-navbar-more .search-bar-ctnr{margin:0 auto!important}html[live-page-header-standalone-entertainment] #prehold-nav-vm .nav-item:has(a[href*="parentAreaId=1&"]){display:none!important}html[live-page-header-standalone-radio] #main-ctnr .dp-table-cell a[name=电台]{display:none!important}html[live-page-header-standalone-radio] .link-navbar-more .search-bar-ctnr{margin:0 auto!important}html[live-page-header-standalone-radio] #prehold-nav-vm .nav-item:has(a[href*="parentAreaId=5"]){display:none!important}html[live-page-header-standalone-match] #main-ctnr .dp-table-cell a[name=赛事]{display:none!important}html[live-page-header-standalone-match] .link-navbar-more .search-bar-ctnr{margin:0 auto!important}html[live-page-header-standalone-match] #prehold-nav-vm .nav-item:has(a[href*="parentAreaId=13"]){display:none!important}html[live-page-header-standalone-chatroom] #main-ctnr .dp-table-cell a[name=聊天室]{display:none!important}html[live-page-header-standalone-chatroom] .link-navbar-more .search-bar-ctnr{margin:0 auto!important}html[live-page-header-standalone-chatroom] #prehold-nav-vm .nav-item:has(a[href*="parentAreaId=14"]){display:none!important}html[live-page-header-standalone-living] #main-ctnr .dp-table-cell a[name=生活]{display:none!important}html[live-page-header-standalone-living] .link-navbar-more .search-bar-ctnr{margin:0 auto!important}html[live-page-header-standalone-living] #prehold-nav-vm .nav-item:has(a[href*="parentAreaId=10"]){display:none!important}html[live-page-header-standalone-knowledge] #main-ctnr .dp-table-cell a[name=知识]{display:none!important}html[live-page-header-standalone-knowledge] .link-navbar-more .search-bar-ctnr{margin:0 auto!important}html[live-page-header-standalone-knowledge] #prehold-nav-vm .nav-item:has(a[href*="parentAreaId=11"]){display:none!important}html[live-page-header-standalone-helpmeplay] #main-ctnr .dp-table-cell a[name=帮我玩]{display:none!important}html[live-page-header-standalone-helpmeplay] .link-navbar-more .search-bar-ctnr{margin:0 auto!important}html[live-page-header-standalone-helpmeplay] #prehold-nav-vm .nav-item:has(a[href*="parentAreaId=301"]){display:none!important}html[live-page-header-standalone-interact] #main-ctnr .dp-table-cell a[name=互动玩法]{display:none!important}html[live-page-header-standalone-interact] .link-navbar-more .search-bar-ctnr{margin:0 auto!important}html[live-page-header-standalone-interact] #prehold-nav-vm .nav-item:has(a[href*="parentAreaId=15"]){display:none!important}html[live-page-header-standalone-shopping] #main-ctnr .dp-table-cell a[name=购物]{display:none!important}html[live-page-header-standalone-shopping] .link-navbar-more .search-bar-ctnr{margin:0 auto!important}html[live-page-header-standalone-shopping] #prehold-nav-vm .nav-item:has(a[href*="parentAreaId=300"]){display:none!important}html[live-page-header-showmore-link] #main-ctnr .showmore-link{display:none!important}html[live-page-header-showmore-link] .link-navbar-more .search-bar-ctnr{margin:0 auto!important}html[live-page-header-showmore-link] #prehold-nav-vm .nav-item:last-child{display:none!important}html[live-page-header-avatar] #right-part .user-panel{display:none!important}html[live-page-header-follow-panel] #right-part .shortcut-item:has(.follow-panel-set){display:none}html[live-page-header-recharge] #right-part .shortcut-item:has(.item-icon-recharge){display:none}html[live-page-header-bili-download-panel] #right-part .shortcut-item:has(.bili-download-panel){visibility:hidden}html[live-page-header-go-live] #right-part .shortcut-item:has(.download-panel-ctnr){visibility:hidden}html[live-page-head-info-avatar-pendant] .blive-avatar :is(.blive-avatar-pendant,.blive-avatar-icons){display:none!important}html[live-page-head-info-vm-upper-row-follow-ctnr] #head-info-vm .upper-row .follow-ctnr{display:none!important}html[live-page-head-info-vm-upper-row-visited] #head-info-vm .upper-row .right-ctnr div:has(.watched-icon){display:none!important}html[live-page-head-info-vm-upper-row-popular] #head-info-vm .upper-row .right-ctnr div:has(.icon-popular),html[live-page-head-info-vm-upper-row-popular] #LiveRoomHotrankEntries{display:none!important}html[live-page-head-info-vm-upper-row-like] #head-info-vm .upper-row .right-ctnr div:has(.like-icon){display:none!important}html[live-page-head-info-vm-upper-row-report] #head-info-vm .upper-row .right-ctnr div:has(.icon-report,[src*="img/report"]){display:none!important}html[live-page-head-info-vm-upper-row-share] #head-info-vm .upper-row .right-ctnr div:has(.icon-share,[src*="img/share"]){display:none!important}html[live-page-head-info-vm-upper-row-share] #head-info-vm .header-info-ctnr .rows-ctnr .upper-row .more,html[live-page-head-info-vm-lower-row-hot-rank] #head-info-vm .lower-row .right-ctnr .popular-and-hot-rank,html[live-page-head-info-vm-lower-row-gift-planet-entry] #head-info-vm .lower-row .right-ctnr .gift-planet-entry,html[live-page-head-info-vm-lower-row-activity-gather-entry] #head-info-vm .lower-row .right-ctnr .activity-gather-entry,html[live-page-head-info-vm] #head-info-vm{display:none!important}html[live-page-head-info-vm] #room-background-vm{min-height:calc(100vh - 64px)!important}html[live-page-head-info-vm] #player-ctnr{border-top-left-radius:12px;border-top-right-radius:12px;overflow:hidden}html[live-page-head-web-player-icon-feedback] .web-player-icon-feedback,html[live-page-head-web-player-shop-popover-vm] #shop-popover-vm,html[live-page-head-web-player-awesome-pk-vm] #pk-vm,html[live-page-head-web-player-awesome-pk-vm] #awesome-pk-vm,html[live-page-head-web-player-awesome-pk-vm] #universal-pk-vm,html[live-page-web-player-watermark] .web-player-icon-roomStatus,html[live-page-web-player-watermark] .blur-edges-ctnr{display:none!important}html[live-page-web-player-watermark] .web-player-module-area-mask{-webkit-backdrop-filter:none!important;backdrop-filter:none!important}html[live-page-head-web-player-announcement-wrapper] #live-player .announcement-wrapper,html[live-page-head-web-player-game-id] #game-id,html[live-page-head-web-player-research-container] .research-container,html[live-page-head-web-player-live-lottery] #anchor-guest-box-id{display:none!important}html[live-page-combo-danmaku] .danmaku-item-container>div.combo{display:none!important}html[live-page-combo-danmaku] .bilibili-combo-danmaku-container,html[live-page-clean-all-danmaku-small-emoji] .danmaku-item-container .bili-dm .bili-dm-emoji,html[live-page-clean-all-danmaku-big-emoji] .danmaku-item-container .bili-dm img[style*="width:45px"],html[live-page-gift-control-vm] #gift-control-vm{display:none!important}html[live-page-gift-control-vm] #player-ctnr{border-bottom-left-radius:12px;border-bottom-right-radius:12px;overflow:hidden}html[live-page-fullscreen-danmaku-vm] #fullscreen-danmaku-vm{display:none!important}html[live-page-rank-list-vm-fold] #rank-list-vm{max-height:32px;transition:max-height .3s linear;overflow:hidden}html[live-page-rank-list-vm-fold] .player-full-win #rank-list-vm{border-radius:0}html[live-page-rank-list-vm-fold] #rank-list-vm:hover{max-height:178px;overflow:unset}html[live-page-rank-list-vm-fold] body:not(.hide-aside-area.player-full-win) #aside-area-vm{display:flex;flex-direction:column}html[live-page-rank-list-vm-fold] .chat-history-panel{flex:1}html[live-page-rank-list-vm-fold] .chat-history-panel .danmaku-at-prompt{bottom:160px}html[live-page-rank-list-vm] #rank-list-vm{display:none!important}html[live-page-rank-list-vm] body:not(.hide-aside-area.player-full-win) #aside-area-vm{display:flex;flex-direction:column}html[live-page-rank-list-vm] .chat-history-panel{flex:1}html[live-page-rank-list-vm] .chat-history-panel .danmaku-at-prompt{bottom:160px}html[live-page-compact-danmaku] .chat-history-panel .chat-history-list .chat-item.danmaku-item.chat-colorful-bubble{margin:2px 0!important}html[live-page-compact-danmaku] .chat-history-panel .chat-history-list .chat-item{padding:3px 5px!important;font-size:15px!important}html[live-page-compact-danmaku] .chat-history-panel .chat-history-list .chat-item.danmaku-item .user-name,html[live-page-compact-danmaku] .chat-history-panel .chat-history-list .chat-item.danmaku-item .reply-uname,html[live-page-compact-danmaku] .chat-history-panel .chat-history-list .chat-item.danmaku-item .reply-uname .common-nickname-wrapper{font-size:15px!important}html[live-page-convention-msg] .convention-msg.border-box,html[live-page-convention-msg] .new-video-pk-item-dm,html[live-page-rank-icon] .chat-item .rank-icon,html[live-page-title-label] .chat-item .title-label,html[live-page-wealth-medal-ctnr] .chat-item .wealth-medal-ctnr,html[live-page-group-medal-ctnr] .chat-item .group-medal-ctnr,html[live-page-fans-medal-item-ctnr] .chat-item .fans-medal-item-ctnr{display:none!important}html[live-page-chat-item-background-color] .chat-item{background-color:unset!important;border-image-source:unset!important}html[live-page-gift-item] .chat-item.gift-item,html[live-page-gift-item] .chat-item.common-danmuku-msg,html[live-page-chat-item-top3-notice] .chat-item.top3-notice,html[live-page-brush-prompt] #brush-prompt{display:none!important}html[live-page-brush-prompt] .chat-history-panel .chat-history-list.with-brush-prompt{height:100%!important}html[live-page-combo-card-countdown] #combo-card:has(.countDownBtn){display:none!important}html[live-page-combo-card-countdown] .chat-history-panel{padding-bottom:0!important}html[live-page-combo-card] #combo-card:has(.combo-tips){display:none!important}html[live-page-service-card-container] .play-together-service-card-container,html[live-page-vote-card] .vote-card,html[live-page-control-panel-icon-row] .control-panel-icon-row{display:none!important}html[live-page-control-panel-icon-row] #chat-control-panel-vm{height:115px;min-height:unset!important}html[live-page-control-panel-icon-row] body:not(.hide-aside-area.player-full-win) #aside-area-vm{display:flex;flex-direction:column}html[live-page-control-panel-icon-row] .chat-history-panel{flex:1}html[live-page-control-panel-icon-row] .chat-history-panel .danmaku-at-prompt{bottom:100px}html[live-page-chat-input-ctnr-medal-section] .medal-section{display:none!important}html[live-page-chat-input-ctnr-medal-section] .chat-input-new{padding:10px 5px!important}html[live-page-chat-input-ctnr-send-btn] .bottom-actions{display:none!important}html[live-page-chat-input-ctnr-send-btn] #chat-control-panel-vm{height:-moz-fit-content!important;height:fit-content!important;min-height:unset!important}html[live-page-chat-input-ctnr-send-btn] body:not(.hide-aside-area.player-full-win) #aside-area-vm{display:flex;flex-direction:column}html[live-page-chat-input-ctnr-send-btn] .chat-history-panel{flex:1}html[live-page-chat-input-ctnr-send-btn] .chat-history-panel .danmaku-at-prompt{bottom:120px}html[live-page-chat-input-ctnr] .chat-input-ctnr,html[live-page-chat-input-ctnr] .bottom-actions{display:none!important}html[live-page-chat-input-ctnr] #chat-control-panel-vm{height:-moz-fit-content!important;height:fit-content!important;min-height:unset!important}html[live-page-chat-input-ctnr] body:not(.hide-aside-area.player-full-win) #aside-area-vm{display:flex;flex-direction:column}html[live-page-chat-input-ctnr] .chat-history-panel{flex:1}html[live-page-chat-input-ctnr] .chat-history-panel .danmaku-at-prompt{bottom:70px}html[live-page-chat-control-panel] #chat-control-panel-vm{display:none!important;min-height:unset!important}html[live-page-chat-control-panel] body:not(.hide-aside-area.player-full-win) #aside-area-vm{display:flex;flex-direction:column}html[live-page-chat-control-panel] .chat-history-panel{flex:1}html[live-page-chat-control-panel] .chat-history-panel .danmaku-at-prompt{bottom:20px!important}';
  const popularStyle = "html[homepage-hide-banner] .header-banner__inner,html[homepage-hide-banner] .bili-header__banner{display:none!important}html[homepage-hide-banner] .bili-header .bili-header__bar:not(.slide-down){position:relative!important;box-shadow:0 2px 4px #00000014}html[homepage-hide-banner] .bili-header__channel{margin-top:5px!important}html[homepage-hide-banner] .bili-header .right-entry__outside .right-entry-icon,html[homepage-hide-banner] .bili-header .left-entry .entry-title,html[homepage-hide-banner] .bili-header .left-entry .download-entry,html[homepage-hide-banner] .bili-header .left-entry .default-entry,html[homepage-hide-banner] .bili-header .left-entry .loc-entry{color:var(--text1, #18191c)!important}html[homepage-hide-banner] .bili-header .left-entry .entry-title .zhuzhan-icon{color:#00aeec!important}html[homepage-hide-banner] .bili-header .right-entry__outside .right-entry-text{color:var(--text2, #61666d)!important}html[homepage-hide-banner] #i_cecream .bili-header__bar.slide-down{transition:background-color .3s ease-out,box-shadow .3s ease-out!important}html[homepage-hide-banner] #i_cecream .bili-header__bar:not(.slide-down){transition:background-color .3s ease-out!important}html[homepage-hide-banner] #biliMainHeader{min-height:unset!important}html[homepage-hide-banner] #internationalHeader .bili-banner{display:none}html[homepage-hide-banner] .mini-header__content{box-shadow:0 2px 4px #00000014}html[homepage-hide-banner] .bili-icon_dingdao_zhuzhan:before{color:#00aeec}html[homepage-hide-banner] .mini-header__content .nav-link .nav-link-ul .nav-link-item .link{color:#000;text-shadow:unset}html[homepage-hide-banner] .mini-header__content .nav-search-box{border:1px solid #e3e5e7}html[homepage-hide-banner] #nav_searchform{background-color:#f2f3f4!important}html[homepage-hide-banner] .bili-header-m .nav-search .nav-search-btn,html[homepage-hide-banner] .international-header .nav-search .nav-search-btn{background-color:#f2f3f4}html[homepage-hide-banner] .mini-header__content .nav-user-center .user-con .item .name{color:#000;text-shadow:unset}html[homepage-hide-sticky-header] .bili-header .left-entry__title svg{display:none!important}html[homepage-hide-sticky-header] #i_cecream .bili-feed4 .bili-header .slide-down{box-shadow:unset!important}html[homepage-hide-sticky-header] #nav-searchform.is-actived:before,html[homepage-hide-sticky-header] #nav-searchform.is-exper:before,html[homepage-hide-sticky-header] #nav-searchform.is-exper:hover:before,html[homepage-hide-sticky-header] #nav-searchform.is-focus:before,html[homepage-hide-sticky-header] .bili-header .slide-down{background:unset!important}html[homepage-hide-sticky-header] .bili-header .slide-down{position:absolute!important;top:0;animation:unset!important;box-shadow:unset!important}html[homepage-hide-sticky-header] .bili-header .slide-down .left-entry{margin-right:30px!important}html[homepage-hide-sticky-header] .bili-header .slide-down .left-entry .default-entry,html[homepage-hide-sticky-header] .bili-header .slide-down .left-entry .download-entry,html[homepage-hide-sticky-header] .bili-header .slide-down .left-entry .entry-title,html[homepage-hide-sticky-header] .bili-header .slide-down .left-entry .entry-title .zhuzhan-icon,html[homepage-hide-sticky-header] .bili-header .slide-down .left-entry .loc-entry,html[homepage-hide-sticky-header] .bili-header .slide-down .left-entry .loc-mc-box__text,html[homepage-hide-sticky-header] .bili-header .slide-down .left-entry .mini-header__title,html[homepage-hide-sticky-header] .bili-header .slide-down .right-entry .right-entry__outside .right-entry-icon,html[homepage-hide-sticky-header] .bili-header .slide-down .right-entry .right-entry__outside .right-entry-text{color:#fff!important}html[homepage-hide-sticky-header] .bili-header .slide-down .download-entry,html[homepage-hide-sticky-header] .bili-header .slide-down .loc-entry{display:unset!important}html[homepage-hide-sticky-header] .bili-header .slide-down .center-search-container,html[homepage-hide-sticky-header] .bili-header .slide-down .center-search-container .center-search__bar{margin:0 auto!important}html[homepage-hide-sticky-header] #nav-searchform{background:#f1f2f3}html[homepage-hide-sticky-header] #nav-searchform:hover{background-color:var(--bg1)!important;opacity:1}html[homepage-hide-sticky-header] #nav-searchform.is-focus{border:1px solid var(--line_regular)!important;border-bottom:none!important;background:var(--bg1)!important}html[homepage-hide-sticky-header] #nav-searchform.is-actived.is-exper4-actived,html[homepage-hide-sticky-header] #nav-searchform.is-focus.is-exper4-actived{border-bottom:unset!important}html[popular-hide-tips] .popular-list .popular-tips,html[popular-hide-tips] .rank-container .rank-tips,html[popular-hide-tips] .history-list .history-tips{display:none!important}html[popular-hide-tips] .rank-container .rank-tab-wrap{margin-bottom:0!important;padding:10px 0!important}html[popular-hide-watchlater] .rank-container .rank-item .van-watchlater,html[popular-hide-watchlater] .history-list .video-card .van-watchlater,html[popular-hide-watchlater] .history-list .video-card .watch-later,html[popular-hide-watchlater] .weekly-list .video-card .van-watchlater,html[popular-hide-watchlater] .weekly-list .video-card .watch-later,html[popular-hide-watchlater] .popular-list .video-card .van-watchlater,html[popular-hide-watchlater] .popular-list .video-card .watch-later{display:none!important}html[popular-hide-danmaku-count] .popular-list .video-stat .like-text,html[popular-hide-danmaku-count] .weekly-list .video-stat .like-text,html[popular-hide-danmaku-count] .history-list .video-stat .like-text,html[popular-hide-danmaku-count] .rank-list .rank-item .detail-state .data-box:nth-child(2){display:none!important}html[popular-hide-danmaku-count] .rank-list .rank-item .detail-state .data-box:nth-child(1){margin:0!important}html[popular-hide-danmaku-count] .video-card .video-stat .play-text{margin-right:0!important}html[popular-layout-2-column] .cm-module{display:none!important}html[popular-layout-2-column] .video-list,html[popular-layout-2-column] .popular-list .card-list,html[popular-layout-2-column] .history-list .card-list{display:grid!important;grid-template-columns:auto auto}html[popular-layout-2-column] .popular-list .card-list .video-card,html[popular-layout-2-column] .video-list .video-card,html[popular-layout-2-column] .history-list .card-list .video-card{width:unset!important}html[popular-layout-4-column] .cm-module{display:none!important}@media (width >= 1300px) and (width <= 1399.9px){html[popular-layout-4-column] .popular-container{max-width:1180px!important}}@media (width <= 1139.9px){html[popular-layout-4-column] .popular-container{max-width:1020px!important}}html[popular-layout-4-column] .rank-container .rank-tab-wrap{margin-bottom:0!important;padding:10px 0!important}html[popular-layout-4-column] .nav-tabs{height:70px!important}html[popular-layout-4-column] .popular-list{padding:10px 0 0!important}html[popular-layout-4-column] .video-list{margin-top:15px!important}html[popular-layout-4-column] .popular-list .popular-tips,html[popular-layout-4-column] .rank-container .rank-tips,html[popular-layout-4-column] .history-list .history-tips,html[popular-layout-4-column] .weekly-list .weekly-hint,html[popular-layout-4-column] .history-list .history-hint{display:none!important}html[popular-layout-4-column] .card-list,html[popular-layout-4-column] .video-list{width:100%!important;display:grid!important;grid-gap:20px!important;grid-column:span 4!important;grid-template-columns:repeat(4,minmax(0,1fr))!important}html[popular-layout-4-column] .card-list .video-card,html[popular-layout-4-column] .video-list .video-card{display:unset!important;width:unset!important;height:unset!important;margin-right:unset!important;margin-bottom:unset!important}html[popular-layout-4-column] .card-list .video-card .video-card__content,html[popular-layout-4-column] .video-list .video-card .video-card__content{background:none;width:unset!important;height:unset!important;margin:0!important;border-radius:6px!important;overflow:hidden!important}html[popular-layout-4-column] .card-list .video-card .video-card__info,html[popular-layout-4-column] .video-list .video-card .video-card__info{margin-top:8px!important;font-size:14px;padding:0!important}html[popular-layout-4-column] .card-list .video-card .video-card__info .rcmd-tag,html[popular-layout-4-column] .video-list .video-card .video-card__info .rcmd-tag{display:none!important}html[popular-layout-4-column] .card-list .video-card .video-card__info .video-name,html[popular-layout-4-column] .video-list .video-card .video-card__info .video-name{font-weight:400!important;margin-bottom:8px!important;font-size:15px!important;line-height:22px!important;height:44px!important;overflow:hidden!important}html[popular-layout-4-column] .card-list .video-card .video-card__info .up-name,html[popular-layout-4-column] .video-list .video-card .video-card__info .up-name{margin:unset!important;font-size:14px!important;text-wrap:nowrap!important}html[popular-layout-4-column] .card-list .video-card .video-card__info>div,html[popular-layout-4-column] .video-list .video-card .video-card__info>div{display:flex!important;justify-content:space-between!important}html[popular-layout-4-column] .card-list .video-card .video-card__info .video-stat .play-text,html[popular-layout-4-column] .video-list .video-card .video-card__info .video-stat .play-text,html[popular-layout-4-column] .card-list .video-card .video-card__info .video-stat .like-text,html[popular-layout-4-column] .video-list .video-card .video-card__info .video-stat .like-text{text-wrap:nowrap!important}html[popular-layout-4-column] .rank-list{width:100%!important;display:grid!important;grid-gap:20px!important;grid-column:span 4!important;grid-template-columns:repeat(4,minmax(0,1fr))!important}html[popular-layout-4-column] .rank-list .rank-item{display:unset!important;width:unset!important;height:unset!important;margin-right:unset!important;margin-bottom:unset!important}html[popular-layout-4-column] .rank-list .rank-item>.content{display:unset!important;padding:unset!important}html[popular-layout-4-column] .rank-list .rank-item>.content>.img{background:none;width:unset!important;height:unset!important;margin:0!important;border-radius:6px!important;overflow:hidden!important}html[popular-layout-4-column] .rank-list .rank-item>.content>.img .num{font-size:18px;zoom:1.2}html[popular-layout-4-column] .rank-list .rank-item>.content>.info{margin-top:8px!important;margin-left:unset!important;padding:0!important;font-size:14px;height:unset!important}html[popular-layout-4-column] .rank-list .rank-item>.content>.info .title{height:44px!important;line-height:22px!important;font-weight:500!important;font-size:15px!important;overflow:hidden!important}html[popular-layout-4-column] .rank-list .rank-item>.content>.info .detail{display:flex!important;justify-content:space-between!important;align-items:center!important;margin-top:8px!important}html[popular-layout-4-column] .rank-list .rank-item>.content>.info .detail>a .up-name{margin:unset!important;font-size:14px;text-wrap:nowrap!important}html[popular-layout-4-column] .rank-list .rank-item>.content>.info .detail>.detail-state .data-box{line-height:unset!important;margin:0 12px 0 0;text-wrap:nowrap!important}html[popular-layout-4-column] .rank-list .rank-item>.content>.info .detail>.detail-state .data-box:nth-child(2){margin:0!important}html[popular-layout-4-column] .rank-list .rank-item>.content .more-data{display:none!important}html[popular-layout-5-column] .cm-module{display:none!important}@media (width >= 1300px) and (width <= 1399.9px){html[popular-layout-5-column] .popular-container{max-width:1180px!important}}@media (width <= 1139.9px){html[popular-layout-5-column] .popular-container{max-width:1020px!important}}html[popular-layout-5-column] .rank-container .rank-tab-wrap{margin-bottom:0!important;padding:10px 0!important}html[popular-layout-5-column] .nav-tabs{height:70px!important}html[popular-layout-5-column] .popular-list{padding:10px 0 0!important}html[popular-layout-5-column] .video-list{margin-top:15px!important}html[popular-layout-5-column] .popular-list .popular-tips,html[popular-layout-5-column] .rank-container .rank-tips,html[popular-layout-5-column] .history-list .history-tips,html[popular-layout-5-column] .weekly-list .weekly-hint,html[popular-layout-5-column] .history-list .history-hint{display:none!important}html[popular-layout-5-column] .card-list,html[popular-layout-5-column] .video-list{width:100%!important;display:grid!important;grid-gap:20px!important;grid-column:span 5!important;grid-template-columns:repeat(5,minmax(0,1fr))!important}html[popular-layout-5-column] .card-list .video-card,html[popular-layout-5-column] .video-list .video-card{display:unset!important;width:unset!important;height:unset!important;margin-right:unset!important;margin-bottom:unset!important}html[popular-layout-5-column] .card-list .video-card .video-card__content,html[popular-layout-5-column] .video-list .video-card .video-card__content{background:none;width:unset!important;height:unset!important;margin:0!important;border-radius:6px!important;overflow:hidden!important}html[popular-layout-5-column] .card-list .video-card .video-card__info,html[popular-layout-5-column] .video-list .video-card .video-card__info{margin-top:8px!important;font-size:14px;padding:0!important}html[popular-layout-5-column] .card-list .video-card .video-card__info .rcmd-tag,html[popular-layout-5-column] .video-list .video-card .video-card__info .rcmd-tag{display:none!important}html[popular-layout-5-column] .card-list .video-card .video-card__info .video-name,html[popular-layout-5-column] .video-list .video-card .video-card__info .video-name{font-weight:400!important;margin-bottom:8px!important;font-size:15px!important;line-height:22px!important;height:44px!important;overflow:hidden!important}html[popular-layout-5-column] .card-list .video-card .video-card__info .up-name,html[popular-layout-5-column] .video-list .video-card .video-card__info .up-name{margin:unset!important;font-size:14px!important;text-wrap:nowrap!important}html[popular-layout-5-column] .card-list .video-card .video-card__info>div,html[popular-layout-5-column] .video-list .video-card .video-card__info>div{display:flex!important;justify-content:space-between!important}html[popular-layout-5-column] .card-list .video-card .video-card__info .video-stat .play-text,html[popular-layout-5-column] .video-list .video-card .video-card__info .video-stat .play-text,html[popular-layout-5-column] .card-list .video-card .video-card__info .video-stat .like-text,html[popular-layout-5-column] .video-list .video-card .video-card__info .video-stat .like-text{text-wrap:nowrap!important}html[popular-layout-5-column] .rank-list{width:100%!important;display:grid!important;grid-gap:20px!important;grid-column:span 5!important;grid-template-columns:repeat(5,minmax(0,1fr))!important}html[popular-layout-5-column] .rank-list .rank-item{display:unset!important;width:unset!important;height:unset!important;margin-right:unset!important;margin-bottom:unset!important}html[popular-layout-5-column] .rank-list .rank-item>.content{display:unset!important;padding:unset!important}html[popular-layout-5-column] .rank-list .rank-item>.content>.img{background:none;width:unset!important;height:unset!important;margin:0!important;border-radius:6px!important;overflow:hidden!important}html[popular-layout-5-column] .rank-list .rank-item>.content>.img .num{font-size:18px;zoom:1.2}html[popular-layout-5-column] .rank-list .rank-item>.content>.info{margin-top:8px!important;margin-left:unset!important;padding:0!important;font-size:14px;height:unset!important}html[popular-layout-5-column] .rank-list .rank-item>.content>.info .title{height:44px!important;line-height:22px!important;font-weight:500!important;font-size:15px!important;overflow:hidden!important}html[popular-layout-5-column] .rank-list .rank-item>.content>.info .detail{display:flex!important;justify-content:space-between!important;align-items:center!important;margin-top:8px!important}html[popular-layout-5-column] .rank-list .rank-item>.content>.info .detail>a .up-name{margin:unset!important;font-size:14px;text-wrap:nowrap!important}html[popular-layout-5-column] .rank-list .rank-item>.content>.info .detail>.detail-state .data-box{line-height:unset!important;margin:0 12px 0 0;text-wrap:nowrap!important}html[popular-layout-5-column] .rank-list .rank-item>.content>.info .detail>.detail-state .data-box:nth-child(2){margin:0!important}html[popular-layout-5-column] .rank-list .rank-item>.content .more-data{display:none!important}html[popular-layout-6-column] .cm-module{display:none!important}@media (width >= 1300px) and (width <= 1399.9px){html[popular-layout-6-column] .popular-container{max-width:1180px!important}}@media (width <= 1139.9px){html[popular-layout-6-column] .popular-container{max-width:1020px!important}}html[popular-layout-6-column] .rank-container .rank-tab-wrap{margin-bottom:0!important;padding:10px 0!important}html[popular-layout-6-column] .nav-tabs{height:70px!important}html[popular-layout-6-column] .popular-list{padding:10px 0 0!important}html[popular-layout-6-column] .video-list{margin-top:15px!important}html[popular-layout-6-column] .popular-list .popular-tips,html[popular-layout-6-column] .rank-container .rank-tips,html[popular-layout-6-column] .history-list .history-tips,html[popular-layout-6-column] .weekly-list .weekly-hint,html[popular-layout-6-column] .history-list .history-hint{display:none!important}html[popular-layout-6-column] .card-list,html[popular-layout-6-column] .video-list{width:100%!important;display:grid!important;grid-gap:20px!important;grid-column:span 6!important;grid-template-columns:repeat(6,minmax(0,1fr))!important}html[popular-layout-6-column] .card-list .video-card,html[popular-layout-6-column] .video-list .video-card{display:unset!important;width:unset!important;height:unset!important;margin-right:unset!important;margin-bottom:unset!important}html[popular-layout-6-column] .card-list .video-card .video-card__content,html[popular-layout-6-column] .video-list .video-card .video-card__content{background:none;width:unset!important;height:unset!important;margin:0!important;border-radius:6px!important;overflow:hidden!important}html[popular-layout-6-column] .card-list .video-card .video-card__info,html[popular-layout-6-column] .video-list .video-card .video-card__info{margin-top:8px!important;font-size:14px;padding:0!important}html[popular-layout-6-column] .card-list .video-card .video-card__info .rcmd-tag,html[popular-layout-6-column] .video-list .video-card .video-card__info .rcmd-tag{display:none!important}html[popular-layout-6-column] .card-list .video-card .video-card__info .video-name,html[popular-layout-6-column] .video-list .video-card .video-card__info .video-name{font-weight:400!important;margin-bottom:8px!important;font-size:15px!important;line-height:22px!important;height:44px!important;overflow:hidden!important}html[popular-layout-6-column] .card-list .video-card .video-card__info .up-name,html[popular-layout-6-column] .video-list .video-card .video-card__info .up-name{margin:unset!important;font-size:14px!important;text-wrap:nowrap!important}html[popular-layout-6-column] .card-list .video-card .video-card__info>div,html[popular-layout-6-column] .video-list .video-card .video-card__info>div{display:flex!important;justify-content:space-between!important}html[popular-layout-6-column] .card-list .video-card .video-card__info .video-stat .play-text,html[popular-layout-6-column] .video-list .video-card .video-card__info .video-stat .play-text,html[popular-layout-6-column] .card-list .video-card .video-card__info .video-stat .like-text,html[popular-layout-6-column] .video-list .video-card .video-card__info .video-stat .like-text{text-wrap:nowrap!important}html[popular-layout-6-column] .rank-list{width:100%!important;display:grid!important;grid-gap:20px!important;grid-column:span 6!important;grid-template-columns:repeat(6,minmax(0,1fr))!important}html[popular-layout-6-column] .rank-list .rank-item{display:unset!important;width:unset!important;height:unset!important;margin-right:unset!important;margin-bottom:unset!important}html[popular-layout-6-column] .rank-list .rank-item>.content{display:unset!important;padding:unset!important}html[popular-layout-6-column] .rank-list .rank-item>.content>.img{background:none;width:unset!important;height:unset!important;margin:0!important;border-radius:6px!important;overflow:hidden!important}html[popular-layout-6-column] .rank-list .rank-item>.content>.img .num{font-size:18px;zoom:1.1}html[popular-layout-6-column] .rank-list .rank-item>.content>.info{margin-top:8px!important;margin-left:unset!important;padding:0!important;font-size:14px;height:unset!important}html[popular-layout-6-column] .rank-list .rank-item>.content>.info .title{height:44px!important;line-height:22px!important;font-weight:500!important;font-size:15px!important;overflow:hidden!important}html[popular-layout-6-column] .rank-list .rank-item>.content>.info .detail{display:flex!important;justify-content:space-between!important;align-items:center!important;margin-top:8px!important}html[popular-layout-6-column] .rank-list .rank-item>.content>.info .detail>a .up-name{margin:unset!important;font-size:14px;text-wrap:nowrap!important}html[popular-layout-6-column] .rank-list .rank-item>.content>.info .detail>.detail-state .data-box{line-height:unset!important;margin:0 12px 0 0;text-wrap:nowrap!important}html[popular-layout-6-column] .rank-list .rank-item>.content>.info .detail>.detail-state .data-box:nth-child(2){margin:0!important}html[popular-layout-6-column] .rank-list .rank-item>.content .more-data{display:none!important}html[popular-hot-hide-tag] .popular-list .rcmd-tag,html[popular-weekly-hide-hint] .weekly-list .weekly-hint,html[popular-history-hide-hint] .history-list .history-hint{display:none!important}";
  const searchStyle = 'html[hide-search-page-search-sticky-header] .search-sticky-header{display:none!important}html[hide-search-page-ad] .video-list.row>div:has([href*="cm.bilibili.com"],.bili-video-card__info--ad,.bili-video-card__info--ad-creative){display:none!important}html[hide-search-page-bangumi-pgc-list] .bangumi-pgc-list,html[hide-search-page-activity-game-list] .activity-game-list{display:none!important}html[hide-search-page-live-room-result] .video-list>div:has([href*="live.bilibili.com"]){display:none!important}html[hide-search-page-danmaku-count] .bili-video-card .bili-video-card__stats--left .bili-video-card__stats--item:nth-child(2){display:none!important}html[hide-search-page-date] .bili-video-card .bili-video-card__info--date,html[hide-search-page-bili-watch-later] .bili-video-card .bili-watch-later{display:none!important}html[hide-search-page-customer-service] .side-buttons div:has(>a[href*=customer-service]){display:none!important}html[hide-search-page-btn-to-top] .side-buttons .btn-to-top-wrap{display:none!important}';
  const spaceStyle = "html[hide-dynamic-page-bili-dyn-avatar-pendent] .b-avatar__layer.center{width:48px!important;height:48px!important}html[hide-dynamic-page-bili-dyn-avatar-pendent] .b-avatar__layers .b-avatar__layer.center:nth-child(2) picture{display:none!important}html[hide-dynamic-page-bili-dyn-avatar-pendent] .b-avatar__layers:has(.b-avatar__layer__res[style^=background]){display:none!important}html[hide-dynamic-page-bili-dyn-avatar-icon] .b-avatar__layers .b-avatar__layer:last-child:not(.center){display:none!important}html[hide-dynamic-page-bili-dyn-ornament] .bili-dyn-ornament,html[hide-dynamic-page-bili-dyn-ornament] .bili-dyn-item__ornament,html[hide-dynamic-page-bili-dyn-dispute] .bili-dyn-content__dispute,html[hide-dynamic-page-bili-dyn-watchlater] .bili-dyn-card-video__mark,html[hide-dynamic-page-bili-dyn-official-topic] .bili-dyn-content__orig__topic,html[hide-dynamic-page-bili-dyn-official-topic] .bili-dyn-content__forw__topic{display:none!important}html[hide-dynamic-page-bili-dyn-text-topic] .bili-rich-text-topic{color:inherit!important}html[hide-dynamic-page-bili-dyn-text-topic] .bili-rich-text-topic:hover{color:var(--brand_blue)!important}html[hide-dynamic-page-bili-dyn-item-interaction] .bili-dyn-item__interaction{display:none!important}html[hide-dynamic-page-bili-dyn-card-reserve] .bili-dyn-list__item:has(.bili-dyn-card-reserve){display:none!important}html[hide-dynamic-page-bili-dyn-card-goods] .bili-dyn-list__item:has(.bili-dyn-card-goods),html[hide-dynamic-page-bili-dyn-card-goods] .bili-dyn-list__item:has(.bili-rich-text-module.goods),html[hide-dynamic-page-bili-dyn-card-goods] .bili-dyn-list__item:has([data-type=goods]){visibility:hidden!important;height:0!important;margin:0!important}html[hide-dynamic-page-bili-dyn-lottery] .bili-dyn-list__item:has([data-type=lottery]){display:none!important}html[hide-dynamic-page-bili-dyn-forward] .bili-dyn-list__item:has(.bili-dyn-content__orig.reference){display:none!important}html[hide-dynamic-page-bili-dyn-vote] .bili-dyn-list__item:has(.bili-dyn-card-vote){display:none!important}html[hide-dynamic-page-bili-dyn-live] .bili-dyn-list__item:has(.bili-dyn-card-live){display:none!important}html[hide-dynamic-page-bili-dyn-blocked] .bili-dyn-list__item:has(.dyn-blocked-mask){display:none!important}html[hide-dynamic-page-bili-dyn-charge-video] .bili-dyn-list__item:has(.bili-dyn-card-video__badge [src*=qcRJ6sJU91]){display:none!important}";
  const videoStyle = '@charset "UTF-8";html[video-page-simple-share] .video-share-popover .video-share-dropdown .dropdown-bottom{display:none!important}html[video-page-simple-share] .video-share-popover .video-share-dropdown .dropdown-top{padding:15px!important}html[video-page-simple-share] .video-share-popover .video-share-dropdown .dropdown-top .dropdown-top-right{display:none!important}html[video-page-simple-share] .video-share-popover .video-share-dropdown .dropdown-top .dropdown-top-left{padding-right:0!important}html[video-page-hide-fixed-header] .fixed-header .bili-header__bar{position:relative!important}html[video-page-danmaku-font-family] .bili-danmaku-x-dm{--fontFamily: var(--video-page-danmaku-font-family) !important}html[video-page-danmaku-font-weight] .bili-danmaku-x-dm{--fontWeight: var(--video-page-danmaku-font-weight) !important}html[video-page-hide-bpx-player-video-info-online] .bpx-player-video-info-online,html[video-page-hide-bpx-player-video-info-online] .bpx-player-video-info-divide,html[video-page-hide-bpx-player-video-info-dm] .bpx-player-video-info-dm,html[video-page-hide-bpx-player-video-info-dm] .bpx-player-video-info-divide,html[video-page-hide-bpx-player-dm-switch] .bpx-player-dm-switch,html[video-page-hide-bpx-player-dm-setting] .bpx-player-dm-setting,html[video-page-hide-bpx-player-video-btn-dm] .bpx-player-video-btn-dm{display:none!important}html[video-page-hide-bpx-player-dm-input] .bpx-player-dm-input::-moz-placeholder{color:transparent!important}html[video-page-hide-bpx-player-dm-input] .bpx-player-dm-input::placeholder{color:transparent!important}html[video-page-hide-bpx-player-dm-hint] .bpx-player-dm-hint,html[video-page-hide-bpx-player-dm-btn-send] .bpx-player-dm-btn-send,html[video-page-hide-bpx-player-postpanel] .bpx-player-postpanel-sug,html[video-page-hide-bpx-player-postpanel] .bpx-player-postpanel-carousel,html[video-page-hide-bpx-player-postpanel] .bpx-player-postpanel-popup,html[video-page-hide-bpx-player-sending-area] .bpx-player-sending-area,html[video-page-hide-bpx-player-sending-area] #bilibili-player-placeholder-bottom{display:none!important}html[video-page-hide-bpx-player-sending-area] #playerWrap:has(.bpx-player-container:not([data-screen=web],[data-screen=full])){height:unset!important;aspect-ratio:16/9}html[video-page-hide-bpx-player-sending-area] #playerWrap:has(.bpx-player-container:not([data-screen=web],[data-screen=full])) #bilibili-player{height:unset!important;aspect-ratio:16/9}html[video-page-hide-bpx-player-sending-area] .page-main-content:has(.festival-video-player) .video-player-box{height:-moz-fit-content!important;height:fit-content!important}html[video-page-hide-bpx-player-sending-area] .festival-video-player{height:-moz-fit-content!important;height:fit-content!important}html[video-page-hide-bpx-player-sending-area] .festival-video-player #bilibili-player:not(.mode-webscreen){height:calc(100% - 46px)!important}html[video-page-hide-bpx-player-video-inputbar] .bpx-player-container[data-screen=full] .bpx-player-control-bottom-center .bpx-player-video-inputbar,html[video-page-hide-bpx-player-video-inputbar] .bpx-player-container[data-screen=web] .bpx-player-control-bottom-center .bpx-player-video-inputbar{display:none!important}html[video-page-hide-bpx-player-video-inputbar] .bpx-player-container[data-screen=full] .bpx-player-control-bottom-center,html[video-page-hide-bpx-player-video-inputbar] .bpx-player-container[data-screen=web] .bpx-player-control-bottom-center{padding:0 15px!important}html[video-page-hide-bpx-player-video-inputbar] .bpx-player-container[data-screen=full] .bpx-player-control-bottom-left,html[video-page-hide-bpx-player-video-inputbar] .bpx-player-container[data-screen=web] .bpx-player-control-bottom-left{min-width:unset!important}html[video-page-hide-bpx-player-video-inputbar] .bpx-player-container[data-screen=full] .bpx-player-ctrl-viewpoint,html[video-page-hide-bpx-player-video-inputbar] .bpx-player-container[data-screen=web] .bpx-player-ctrl-viewpoint{width:-moz-fit-content!important;width:fit-content!important}html[video-page-unfold-video-info-title] .video-info-container:has(.show-more){height:-moz-fit-content!important;height:fit-content!important;margin-bottom:12px}html[video-page-unfold-video-info-title] .video-info-container .video-info-title-inner-overflow .video-title{margin-right:unset!important;text-wrap:wrap!important}html[video-page-unfold-video-info-title] .video-info-container .video-info-title-inner .video-title .video-title-href{text-wrap:wrap!important}html[video-page-unfold-video-info-title] .video-info-container .show-more,html[video-page-hide-video-info-danmaku-count] .video-info-detail .dm,html[video-page-hide-video-info-danmaku-count] .video-info-meta .dm,html[video-page-hide-video-info-pubdate] .video-info-detail .pubdate-ip,html[video-page-hide-video-info-pubdate] .video-info-meta .pubdate-ip,html[video-page-hide-video-info-copyright] .video-info-detail .copyright,html[video-page-hide-video-info-copyright] .video-info-meta .copyright,html[video-page-hide-video-info-honor] .video-info-detail .honor-rank,html[video-page-hide-video-info-honor] .video-info-detail .honor-weekly,html[video-page-hide-video-info-honor] .video-info-detail .honor-history,html[video-page-hide-video-info-honor] .video-info-meta .honor-rank,html[video-page-hide-video-info-honor] .video-info-meta .honor-weekly,html[video-page-hide-video-info-honor] .video-info-meta .honor-history,html[video-page-hide-video-info-argue] .video-info-detail .argue,html[video-page-hide-video-info-argue] .video-info-detail .video-argue,html[video-page-hide-video-info-argue] .video-info-meta .argue,html[video-page-hide-video-info-argue] .video-info-meta .video-argue{display:none!important}html[video-page-hide-bpx-player-mini-mode-process] .bpx-player-container[data-screen=mini]:not(:hover) .bpx-player-mini-progress{display:none}html[video-page-hide-bpx-player-mini-mode-danmaku] .bpx-player-container[data-screen=mini] .bpx-player-row-dm-wrap{visibility:hidden!important}html[video-page-bpx-player-mini-mode-wheel-adjust] .bpx-player-container[data-screen=mini]{height:calc(225px * var(--mini-player-zoom, 1))!important;width:calc(400px * var(--mini-player-zoom, 1))!important}html[video-page-bpx-player-mini-mode-wheel-adjust] .bpx-player-container[data-revision="1"][data-screen=mini],html[video-page-bpx-player-mini-mode-wheel-adjust] .bpx-player-container[data-revision="2"][data-screen=mini]{height:calc(180px * var(--mini-player-zoom, 1))!important;width:calc(320px * var(--mini-player-zoom, 1))!important}@media screen and (width >= 1681px){html[video-page-bpx-player-mini-mode-wheel-adjust] .bpx-player-container[data-revision="1"][data-screen=mini],html[video-page-bpx-player-mini-mode-wheel-adjust] .bpx-player-container[data-revision="2"][data-screen=mini]{height:calc(203px * var(--mini-player-zoom, 1))!important;width:calc(360px * var(--mini-player-zoom, 1))!important}}html[video-page-bpx-player-mini-mode-position-record] .bpx-player-container[data-screen=mini]{transform:translate(var(--mini-player-translate-x, 1)) translateY(var(--mini-player-translate-y, 1))}html[video-page-hide-bpx-player-bili-guide-all] .bili-follow-to-electric,html[video-page-hide-bpx-player-bili-guide-all] .bili-guide,html[video-page-hide-bpx-player-bili-guide-all] .bili-guide-all,html[video-page-hide-bpx-player-bili-guide-all] .bili-guide-animate,html[video-page-hide-bpx-player-bili-guide-all] .bili-guide-cyc,html[video-page-hide-bpx-player-bili-guide-all] .bili-guide-electric,html[video-page-hide-bpx-player-bili-guide-all] .bili-guide-follow,html[video-page-hide-bpx-player-bili-guide-all] .bili-guide-followed,html[video-page-hide-bpx-player-bili-guide-all] .bili-danmaku-x-guide,html[video-page-hide-bpx-player-bili-guide-all] .bili-danmaku-x-guide-all,html[video-page-hide-bpx-player-bili-guide-all] .bili-danmaku-x-guide-follow,html[video-page-hide-bpx-player-bili-guide-all] .bili-danmaku-x-guide-gray,html[video-page-hide-bpx-player-bili-vote] .bili-vote,html[video-page-hide-bpx-player-bili-vote] .bili-danmaku-x-vote,html[video-page-hide-bpx-player-bili-qoe-feedback] .bpx-player-qoeFeedback,html[video-page-hide-bpx-player-bili-qoe-feedback] .bili-qoeFeedback,html[video-page-hide-bpx-player-bili-qoe-feedback] .bili-qoeFeedback-score,html[video-page-hide-bpx-player-bili-qoe-feedback] .bili-qoeFeedback-vote,html[video-page-hide-bpx-player-bili-score] .bili-score,html[video-page-hide-bpx-player-bili-score] .bili-danmaku-x-score,html[video-page-hide-bpx-player-bili-score] .bili-danmaku-x-superRating,html[video-page-hide-bpx-player-bili-score-sum] .bili-scoreSum,html[video-page-hide-bpx-player-bili-score-sum] .bili-danmaku-x-scoreSum,html[video-page-hide-bpx-player-bili-clock] .bili-clock,html[video-page-hide-bpx-player-bili-clock] .bili-danmaku-x-clock,html[video-page-hide-bpx-player-bili-cmtime] .bili-cmtime,html[video-page-hide-bpx-player-bili-cmtime] .bili-danmaku-x-cmtime,html[video-page-hide-bpx-player-bili-cmd-shrink] .bili-cmd-shrink,html[video-page-hide-bpx-player-bili-cmd-shrink] .bili-danmaku-x-cmd-shrink,html[video-page-hide-bpx-player-bili-reserve] .bili-reserve,html[video-page-hide-bpx-player-bili-reserve] .bili-danmaku-x-reserve,html[video-page-hide-bpx-player-bili-link] .bili-link,html[video-page-hide-bpx-player-bili-link] .bili-danmaku-x-link,html[video-page-hide-bpx-player-cmd-dm-wrap] .bpx-player-cmd-dm-wrap,html[video-page-hide-bpx-player-top-left-title] .bpx-player-top-title,html[video-page-hide-bpx-player-top-left-title] .bpx-player-top-left-title,html[video-page-hide-bpx-player-top-left-title] .bpx-player-top-mask,html[video-page-hide-bpx-player-top-left-music] .bpx-player-top-left-music,html[video-page-hide-bpx-player-top-left-follow] .bpx-player-top-left-follow,html[video-page-hide-bpx-player-top-issue] .bpx-player-top-issue,html[video-page-hide-bpx-player-state-wrap] .bpx-player-state-wrap,html[video-page-hide-bpx-player-ending-related] .bpx-player-ending-related{display:none!important}html[video-page-hide-bpx-player-ending-related] .bpx-player-ending-content{display:flex!important;align-items:center!important}html[video-page-hide-bpx-player-dialog-wrap] .bpx-player-dialog-wrap,html[video-page-bpx-player-bili-high-icon] .bili-dm .bili-high-icon,html[video-page-bpx-player-bili-high-icon] .bili-danmaku-x-high-icon{display:none!important}html[video-page-bpx-player-bili-dm-vip-white] .bili-dm>.bili-dm-vip,html[video-page-bpx-player-bili-dm-vip-white] .bili-danmaku-x-dm-vip{background:unset!important;background-image:unset!important;background-size:unset!important;text-shadow:1px 0 1px #000,0 1px 1px #000,0 -1px 1px #000,-1px 0 1px #000!important;-webkit-text-stroke:none!important;-moz-text-stroke:none!important;-ms-text-stroke:none!important}html[video-page-subtitle-font-color] .bpx-player-subtitle-panel-text{color:var(--video-page-subtitle-font-color)!important}html[video-page-subtitle-font-family] .bpx-player-subtitle-panel-text{font-family:var(--video-page-subtitle-font-family)!important}html[video-page-subtitle-font-weight] .bpx-player-subtitle-panel-text{font-weight:var(--video-page-subtitle-font-weight)!important}html[video-page-subtitle-text-stroke-color] .bpx-player-subtitle-panel-text{background:unset!important;background-color:var(--video-page-subtitle-text-stroke-color)!important;-webkit-background-clip:text!important;background-clip:text!important}html[video-page-subtitle-text-stroke-width] .bpx-player-container:where([data-screen=normal],[data-screen=wide]) .bpx-player-subtitle-panel-text{-webkit-text-stroke:calc(.6 * var(--video-page-subtitle-text-stroke-width)) transparent!important;-moz-text-stroke:calc(.6 * var(--video-page-subtitle-text-stroke-width)) transparent!important;-ms-text-stroke:calc(.6 * var(--video-page-subtitle-text-stroke-width)) transparent!important}html[video-page-subtitle-text-stroke-width] .bpx-player-container:where([data-screen=web],[data-screen=full]) .bpx-player-subtitle-panel-text{-webkit-text-stroke:var(--video-page-subtitle-text-stroke-width) transparent!important;-moz-text-stroke:var(--video-page-subtitle-text-stroke-width) transparent!important;-ms-text-stroke:var(--video-page-subtitle-text-stroke-width) transparent!important}html[video-page-hide-bpx-player-ctrl-prev] .bpx-player-ctrl-prev,html[video-page-hide-bpx-player-ctrl-play] .bpx-player-ctrl-play,html[video-page-hide-bpx-player-ctrl-next] .bpx-player-ctrl-next,html[video-page-hide-bpx-player-ctrl-viewpoint] .bpx-player-ctrl-viewpoint,html[video-page-hide-bpx-player-ctrl-flac] .bpx-player-ctrl-flac,html[video-page-hide-bpx-player-ctrl-quality] .bpx-player-ctrl-quality,html[video-page-hide-bpx-player-ctrl-eplist] .bpx-player-ctrl-eplist,html[video-page-hide-bpx-player-ctrl-playbackrate] .bpx-player-ctrl-playbackrate,html[video-page-hide-bpx-player-ctrl-subtitle] .bpx-player-ctrl-subtitle,html[video-page-hide-bpx-player-ctrl-volume] .bpx-player-ctrl-volume,html[video-page-hide-bpx-player-ctrl-setting] .bpx-player-ctrl-setting,html[video-page-hide-bpx-player-ctrl-pip] .bpx-player-ctrl-pip,html[video-page-hide-bpx-player-ctrl-wide] .bpx-player-ctrl-wide,html[video-page-hide-bpx-player-ctrl-web] .bpx-player-ctrl-web,html[video-page-hide-bpx-player-ctrl-full] .bpx-player-ctrl-full,html[video-page-hide-bpx-player-pbp-pin] .bpx-player-pbp-pin,html[video-page-hide-bpx-player-shadow-progress-area] .bpx-player-shadow-progress-area{display:none!important}html[video-page-hide-bpx-player-shadow-progress-area] .bpx-player-pbp:not(.show){bottom:0!important}html[video-page-show-bpx-player-pbp] .bpx-player-pbp:not(.show){opacity:1!important}html[default-widescreen][player-is-wide] #playerWrap:has(.bpx-player-container[data-screen=mini]){width:-moz-fit-content;width:fit-content}html[webscreen-scrollable] .webscreen-fix{position:unset;top:unset;left:unset;margin:unset;padding:unset;width:unset;height:unset}html[webscreen-scrollable] .webscreen-fix #biliMainHeader{display:none}html[webscreen-scrollable] .webscreen-fix #mirror-vdcon{box-sizing:content-box;position:relative}html[webscreen-scrollable] .webscreen-fix #danmukuBox{margin-top:0!important}html[webscreen-scrollable] .webscreen-fix :is(.left-container,.playlist-container--left){position:static!important;padding-top:100vh}html[webscreen-scrollable] .webscreen-fix :is(.left-container,.playlist-container--left) .video-info-container{height:-moz-fit-content;height:fit-content}html[webscreen-scrollable] .webscreen-fix :is(.left-container,.playlist-container--left) #bilibili-player.mode-webscreen{position:static;border-radius:unset;z-index:unset;left:unset;top:unset;width:100%;height:100%}html[webscreen-scrollable] .webscreen-fix :is(.left-container,.playlist-container--left) #playerWrap{position:absolute;left:0;right:0;top:0;height:100vh;width:100vw;padding-right:0}html[webscreen-scrollable] .webscreen-fix :is(.right-container,.playlist-container--right){padding-top:100vh}html[webscreen-scrollable] .webscreen-fix .float-nav-exp .nav-menu .item.mini,html[webscreen-scrollable] .webscreen-fix .fixed-sidenav-storage .mini-player-window{display:none!important}html[webscreen-scrollable] .webscreen-fix .bili-dialog-m{z-index:100000!important}html[webscreen-scrollable] .webscreen-fix::-webkit-scrollbar{display:none!important}@supports (-moz-appearance: none){html[webscreen-scrollable]:has(.webscreen-fix){scrollbar-width:none!important}}html[fullscreen-scrollable] .webscreen-fix{position:unset;top:unset;left:unset;margin:unset;padding:unset;width:unset;height:unset}html[fullscreen-scrollable] .webscreen-fix #biliMainHeader{display:none}html[fullscreen-scrollable] .webscreen-fix #mirror-vdcon{box-sizing:content-box;position:relative}html[fullscreen-scrollable] .webscreen-fix #danmukuBox{margin-top:0!important}html[fullscreen-scrollable] .webscreen-fix :is(.left-container,.playlist-container--left){position:static!important;padding-top:100vh}html[fullscreen-scrollable] .webscreen-fix :is(.left-container,.playlist-container--left) .video-info-container{height:-moz-fit-content;height:fit-content}html[fullscreen-scrollable] .webscreen-fix :is(.left-container,.playlist-container--left) #bilibili-player.mode-webscreen{position:static;border-radius:unset;z-index:unset;left:unset;top:unset;width:100%;height:100%}html[fullscreen-scrollable] .webscreen-fix :is(.left-container,.playlist-container--left) #playerWrap{position:absolute;left:0;right:0;top:0;height:100vh;width:100vw;padding-right:0}html[fullscreen-scrollable] .webscreen-fix :is(.right-container,.playlist-container--right){padding-top:100vh}html[fullscreen-scrollable] .webscreen-fix .float-nav-exp .nav-menu .item.mini,html[fullscreen-scrollable] .webscreen-fix .fixed-sidenav-storage .mini-player-window{display:none!important}html[fullscreen-scrollable] .webscreen-fix .bili-dialog-m{z-index:100000!important}html[fullscreen-scrollable] .webscreen-fix::-webkit-scrollbar{display:none!important}@supports (-moz-appearance: none){html[fullscreen-scrollable]:has(.webscreen-fix){scrollbar-width:none!important}}html[video-page-exchange-player-position] body:not(.webscreen-fix) :is(.left-container,.playlist-container--left){display:flex!important;flex-direction:column!important;padding-top:30px!important}html[video-page-exchange-player-position] body:not(.webscreen-fix) :is(.left-container,.playlist-container--left)>*{order:1}html[video-page-exchange-player-position] body:not(.webscreen-fix) #playerWrap{order:0!important;z-index:1}html[video-page-exchange-player-position] body:not(.webscreen-fix) .video-info-container{height:auto!important;padding-top:16px!important;margin-bottom:0!important}html[video-page-exchange-player-position][player-is-wide] body:not(.webscreen-fix) .up-panel-container{position:relative!important;margin-top:calc(max(min(96.23vw - 359.514px,2010px),923px)*.5625 + 81px)}html[video-page-exchange-player-position][player-is-wide] body:not(.webscreen-fix) #danmukuBox{margin-top:0!important}html[normalscreen-width]:not([player-is-wide]):has(#bilibili-player [data-screen=normal],#bilibili-player .bpx-player-container:not([data-screen])) #playerWrap{height:-moz-fit-content!important;height:fit-content!important}html[normalscreen-width]:not([player-is-wide]):has(#bilibili-player [data-screen=normal],#bilibili-player .bpx-player-container:not([data-screen])) #playerWrap #bilibili-player-placeholder-top{width:min(100vw - 400px,var(--normalscreen-width))!important;aspect-ratio:16/9!important}html[normalscreen-width]:not([player-is-wide]):has(#bilibili-player [data-screen=normal],#bilibili-player .bpx-player-container:not([data-screen])) #playerWrap #bilibili-player{width:min(100vw - 400px,var(--normalscreen-width))!important;height:-moz-fit-content;height:fit-content}html[normalscreen-width]:not([player-is-wide]):has(#bilibili-player [data-screen=normal],#bilibili-player .bpx-player-container:not([data-screen])) #playerWrap #bilibili-player .bpx-player-video-area{width:min(100vw - 400px,var(--normalscreen-width))!important;aspect-ratio:16/9!important}html[normalscreen-width]:not([player-is-wide]):has(#bilibili-player [data-screen=normal],#bilibili-player .bpx-player-container:not([data-screen])) .left-container,html[normalscreen-width]:not([player-is-wide]):has(#bilibili-player [data-screen=normal],#bilibili-player .bpx-player-container:not([data-screen])) .playlist-container--left{width:min(100vw - 400px,var(--normalscreen-width))!important}html[normalscreen-width]:has(#bilibili-player :is([data-screen=web],[data-screen=full])) .left-container,html[normalscreen-width]:has(#bilibili-player :is([data-screen=web],[data-screen=full])) .playlist-container--left{width:min(100vw - 400px,var(--normalscreen-width))!important}html[normalscreen-width]:not([player-is-wide]):has(#bilibili-player [data-screen=mini]) .left-container,html[normalscreen-width]:not([player-is-wide]):has(#bilibili-player [data-screen=mini]) .playlist-container--left{width:min(100vw - 400px,var(--normalscreen-width))!important}html[normalscreen-width]:not([player-is-wide]):has(#bilibili-player [data-screen=mini]) #playerWrap{width:min(100vw - 400px,var(--normalscreen-width))!important;height:-moz-fit-content!important;height:fit-content!important;display:flex!important}html[normalscreen-width]:not([player-is-wide]):has(#bilibili-player [data-screen=mini]) #playerWrap #bilibili-player-placeholder{position:static;width:min(100vw - 400px,var(--normalscreen-width))!important;height:-moz-fit-content!important;height:fit-content!important}html[normalscreen-width]:not([player-is-wide]):has(#bilibili-player [data-screen=mini]) #playerWrap #bilibili-player-placeholder #bilibili-player-placeholder-top{width:min(100vw - 400px,var(--normalscreen-width))!important;aspect-ratio:16/9!important}html[normalscreen-width]:not([player-is-wide]):has(#bilibili-player [data-screen=mini]) #playerWrap #bilibili-player{width:min(100vw - 400px,var(--normalscreen-width))!important;height:-moz-fit-content!important;height:fit-content!important}html[normalscreen-width][player-is-wide]:has(#bilibili-player [data-screen=mini]) #bilibili-player{background-color:#000!important}html[video-page-right-container-sticky-optimize] .right-container{display:flex!important}html[video-page-right-container-sticky-optimize] .right-container .right-container-inner{width:100%!important;position:sticky!important;top:unset!important;align-self:flex-end!important;min-height:calc(100vh - 64px)!important;max-width:100%!important;padding-bottom:0!important}html[video-page-right-container-sticky-optimize] body:has(.mini-player-window.on) .right-container .right-container-inner{min-height:calc(100vh - 304px)!important;bottom:240px!important}html[video-page-right-container-sticky-optimize] body:has(.mini-player-window:not(.on)) .right-container .right-container-inner{min-height:calc(100vh - 74px)!important;bottom:10px!important}html[video-page-right-container-sticky-disable] .right-container .right-container-inner{position:static!important}html[video-page-hide-right-container-ad] .right-container #slide_ad,html[video-page-hide-right-container-ad] .right-container .ad-report.video-card-ad-small,html[video-page-hide-right-container-ad] .right-container .video-page-special-card-small{display:none!important}html[video-page-hide-right-container-ad] .right-container #reco_list,html[video-page-hide-right-container-ad] .right-container .recommend-list-v1{margin-top:0!important}html[video-page-hide-right-container-video-page-game-card-small] .right-container .video-page-game-card-small{display:none!important}html[video-page-hide-right-container-danmaku] #danmukuBox{visibility:hidden!important;height:0!important;margin-bottom:0!important}html[video-page-hide-right-container-reco-list-next-play-next-button] .right-container .next-play .next-button,html[video-page-hide-right-container-reco-list-next-play-next-button] .right-container .next-play .continuous-btn,html[video-page-hide-right-container-reco-list-next-play] .right-container .next-play{display:none!important}html[video-page-hide-right-container-reco-list-next-play] .right-container .rec-list{margin-top:0!important}html[video-page-hide-right-container-section-height] .video-sections-content-list,html[video-page-hide-right-container-section-height] .video-pod__body{height:-moz-fit-content!important;height:fit-content!important;max-height:340px!important}html[video-page-hide-right-container-section-next-btn] .base-video-sections-v1 .next-button{display:none!important}html[video-page-hide-right-container-section-next-btn] .video-sections-head_first-line .first-line-left{max-width:100%!important}html[video-page-hide-right-container-section-next-btn] .video-sections-head_first-line .first-line-title{max-width:unset!important}html[video-page-hide-right-container-section-next-btn] .video-sections-head_first-line .first-line-right,html[video-page-hide-right-container-section-next-btn] .video-pod__header .auto-play,html[video-page-hide-right-container-section-play-num] .base-video-sections-v1 .play-num,html[video-page-hide-right-container-section-play-num] .video-sections-head_second-line .play-num,html[video-page-hide-right-container-section-play-num] .video-pod__header .total-view,html[video-page-hide-right-container-section-abstract] .base-video-sections-v1 .abstract,html[video-page-hide-right-container-section-abstract] .base-video-sections-v1 .second-line_left img,html[video-page-hide-right-container-section-abstract] .video-sections-head_second-line .abstract,html[video-page-hide-right-container-section-abstract] .video-sections-head_second-line .second-line_left img,html[video-page-hide-right-container-section-abstract] .video-pod__header .pod-description-reference,html[video-page-hide-right-container-section-subscribe] .base-video-sections-v1 .second-line_right,html[video-page-hide-right-container-section-subscribe] .video-sections-head_second-line .second-line_right,html[video-page-hide-right-container-section-subscribe] .video-pod__header .subscribe-btn{display:none!important}html[video-page-hide-right-container-multi-page-add-counter] .video-pod__list.multip.list{counter-reset:section-counter}html[video-page-hide-right-container-multi-page-add-counter] .video-pod__list.multip.list .video-pod__item:before{counter-increment:section-counter;content:"P" counter(section-counter);font-size:15px;margin-right:10px;transition:color .2s}html[video-page-hide-right-container-multi-page-add-counter] .video-pod__list.multip.list .video-pod__item.active:before,html[video-page-hide-right-container-multi-page-add-counter] .video-pod__list.multip.list .video-pod__item:hover:before{color:var(--brand_blue)}html[video-page-right-container-set-info-bottom] :is(.video-page-card-small,.video-page-operator-card-small) .card-box .info{display:flex!important;flex-direction:column!important}html[video-page-right-container-set-info-bottom] :is(.video-page-card-small,.video-page-operator-card-small) .card-box .info .upname{margin-top:auto!important}html[video-page-hide-right-container-duration] .right-container .card-box .duration,html[video-page-hide-right-container-duration] .recommend-list-container .duration,html[video-page-hide-right-container-reco-list-watch-later-video] .right-container .watch-later-video,html[video-page-hide-right-container-reco-list-watch-later-video] .recommend-list-container .watch-later-video{display:none!important}html[video-page-hide-right-container-reco-list-rec-list-info-up] .right-container .info{display:flex;flex-direction:column;justify-content:space-between}html[video-page-hide-right-container-reco-list-rec-list-info-up] .right-container .info .upname{visibility:hidden!important}html[video-page-hide-right-container-reco-list-rec-list-info-up] .recommend-list-container .info{display:flex;flex-direction:column;justify-content:space-between}html[video-page-hide-right-container-reco-list-rec-list-info-up] .recommend-list-container .info .upname{display:none!important}html[video-page-hide-right-container-reco-list-rec-list-info-plays] .right-container .info{display:flex;flex-direction:column;justify-content:space-between}html[video-page-hide-right-container-reco-list-rec-list-info-plays] .right-container .info .playinfo,html[video-page-hide-right-container-reco-list-rec-list-info-plays] .recommend-list-container .info .playinfo{display:none!important}html[video-page-hide-right-container-reco-list-rec-list-info-plays] .recommend-list-container .info{display:flex;flex-direction:column;justify-content:space-between}html[video-page-hide-right-container-reco-list-rec-list] .right-container .rec-list,html[video-page-hide-right-container-reco-list-rec-list] .right-container .rec-footer,html[video-page-hide-right-container-reco-list-rec-list] .playlist-container--right .recommend-list-container,html[video-page-hide-right-container-right-bottom-banner] #right-bottom-banner,html[video-page-hide-right-container-right-bottom-banner] .right-container .right-bottom-banner{display:none!important}html[video-page-hide-right-container-right-bottom-banner] body:has(.mini-player-window.on) .video-container-v1 .right-container .right-container-inner{padding-bottom:240px}html[video-page-hide-right-container-right-bottom-banner] body:has(.mini-player-window:not(.on)) .video-container-v1 .right-container .right-container-inner{padding-bottom:10px}html[video-page-hide-right-container-live] .right-container .pop-live-small-mode{display:none!important}html[video-page-hide-right-container-live] body:has(.mini-player-window.on) .video-container-v1 .right-container .right-container-inner{padding-bottom:240px}html[video-page-hide-right-container-live] body:has(.mini-player-window:not(.on)) .video-container-v1 .right-container .right-container-inner{padding-bottom:10px}html[video-page-hide-right-container]:not([player-is-wide]) .right-container{display:none!important}html[video-page-hide-sidenav-right-container-live] .fixed-sidenav-storage .mini-player-window,html[video-page-hide-sidenav-right-container-live] .float-nav-exp .nav-menu .item.mini,html[video-page-hide-sidenav-customer-service] .fixed-sidenav-storage .customer-service{display:none!important}html[video-page-hide-sidenav-customer-service] .float-nav-exp .nav-menu a:has(>.item.help){display:none!important}html[video-page-hide-sidenav-back-to-top] .fixed-sidenav-storage .back-to-top,html[video-page-hide-sidenav-back-to-top] .float-nav-exp .nav-menu .item.backup,html[video-page-hide-video-share-popover] .video-share-popover,html[video-page-hide-triple-oldfan-entry] .triple-oldfan-entry,html[video-page-hide-below-info-video-ai-assistant] .video-toolbar-right .video-ai-assistant,html[video-page-hide-below-info-video-note] .video-toolbar-right .video-note,html[video-page-hide-below-info-video-report-menu] .video-toolbar-right .video-tool-more{display:none!important}html[video-page-unfold-below-info-desc] #v_desc,html[video-page-unfold-below-info-desc] .video-desc-container{margin-bottom:0!important}html[video-page-unfold-below-info-desc] #v_desc .basic-desc-info,html[video-page-unfold-below-info-desc] .video-desc-container .basic-desc-info{height:auto!important}html[video-page-unfold-below-info-desc] #v_desc .toggle-btn,html[video-page-unfold-below-info-desc] .video-desc-container .toggle-btn,html[video-page-hide-below-info-desc] #v_desc,html[video-page-hide-below-info-desc] .video-desc-container{display:none!important}html[video-page-hide-below-info-tag] #v_tag,html[video-page-hide-below-info-tag] .video-tag-container{visibility:hidden!important;height:0!important;margin:0 0 10px!important}html[video-page-hide-below-activity-vote] #activity_vote,html[video-page-hide-below-activity-vote] .activity-m-v1,html[video-page-hide-below-bannerAd] #bannerAd,html[video-page-hide-below-bannerAd] .left-container .left-banner,html[video-page-hide-up-sendmsg] .up-detail .send-msg,html[video-page-hide-up-description] .up-detail .up-description,html[video-page-hide-up-charge] .upinfo-btn-panel .new-charge-btn,html[video-page-hide-up-charge] .upinfo-btn-panel .old-charge-btn,html[video-page-hide-up-bili-avatar-pendent-dom] .up-info-container .bili-avatar-pendent-dom{display:none!important}html[video-page-hide-up-bili-avatar-pendent-dom] .up-avatar-wrap{width:48px!important;height:48px!important}html[video-page-hide-up-bili-avatar-pendent-dom] .up-avatar-wrap .up-avatar{background-color:transparent!important}html[video-page-hide-up-bili-avatar-pendent-dom] .up-avatar-wrap .bili-avatar{width:48px!important;height:48px!important;transform:unset!important}html[video-page-hide-up-bili-avatar-icon] .up-info-container .bili-avatar-icon,html[video-page-hide-up-bili-avatar-icon] .up-info-container .bili-avatar-nft-icon,html[video-page-hide-up-membersinfo-normal-header] .membersinfo-normal .header{display:none!important}';
  const watchlaterStyle = "html[watchlater-layout-4-column] .watchlater-list-container:not(.watchlater-list-container--list){grid-template-columns:repeat(4,1fr)!important;gap:25px 16px!important}html[watchlater-layout-5-column] .watchlater-list-container:not(.watchlater-list-container--list){grid-template-columns:repeat(5,1fr)!important;gap:25px 16px!important}html[watchlater-increase-font-size] .bili-video-card{--bili-video-card-title-padding-right: 0;--bili-video-card-title-font-size: 16px;--bili-video-card-subtitle-font-size: 14px}html[watchlater-increase-font-size] .bili-cover-card__stat{--bili-cover-card-stat-font-size: 14px}html[watchlater-increase-font-size] .bili-cover-card__progress{--bili-cover-card-progress-height: 3.5px}html[watchlater-hide-feedback] .feed_back{display:none!important}";
  const rules = [
    {
      name: "homepage",
      groups: homepageGroups,
      style: homepageStyle,
      checkFn: isPageHomepage
    },
    {
      name: "video",
      groups: videoGroups,
      style: videoStyle,
      checkFn: () => isPageVideo() || isPagePlaylist()
    },
    {
      name: "bangumi",
      groups: bangumiGroups,
      style: bangumiStyle,
      checkFn: isPageBangumi
    },
    {
      name: "dynamic",
      groups: dynamicGroups,
      style: dynamicStyle,
      checkFn: isPageDynamic
    },
    {
      name: "live",
      groups: liveGroups,
      style: liveStyle,
      checkFn: isPageLive
    },
    {
      name: "popular",
      groups: popularGroups,
      style: popularStyle,
      checkFn: isPagePopular
    },
    {
      name: "channel",
      groups: channelGroups,
      style: channelStyle,
      checkFn: isPageChannel
    },
    {
      name: "space",
      groups: spaceGroups,
      style: spaceStyle,
      checkFn: isPageSpace
    },
    {
      name: "search",
      groups: searchGroups,
      style: searchStyle,
      checkFn: isPageSearch
    },
    {
      name: "watchlater",
      groups: watchlaterGroups,
      style: watchlaterStyle,
      checkFn: isPageWatchlater
    },
    {
      name: "comment",
      groups: commentGroups,
      style: commentStyle,
      isSpecial: true,
      checkFn: () => isPageVideo() || isPageBangumi() || isPageDynamic() || isPageSpace() || isPagePlaylist()
    },
    {
      name: "common",
      groups: commonGroups,
      style: commonStyle,
      isSpecial: true,
      checkFn: () => true
    },
    {
      name: "debug",
      groups: debugGroups,
      style: void 0,
      checkFn: isPageSpace
    }
  ];
  const loadRules = () => {
    for (const rule of rules) {
      if (rule.checkFn()) {
        for (const group of rule.groups) {
          for (const item of group.items) {
            try {
              switch (item.type) {
                case "switch":
                  loadSwitchItem(item);
                  break;
                case "number":
                  loadNumberItem(item);
                  break;
                case "list":
                  loadListItem(item);
                  break;
                case "string":
                  loadStringItem(item);
                  break;
              }
            } catch (err) {
              error(`loadRules load item failed, id=${item.id}, name=${item.name}, type=${item.type}`, err);
            }
          }
        }
      }
    }
  };
  const loadStyles = () => {
    var _a;
    for (const rule of rules) {
      if (rule.checkFn() && rule.style) {
        try {
          const style = document.createElement("style");
          style.className = `bili-cleaner-css ${rule.name}`;
          style.textContent = rule.style;
          (_a = document.documentElement) == null ? void 0 : _a.appendChild(style);
        } catch (err) {
          error(`loadStyles error, name=${rule.name}`, err);
        }
      }
    }
  };
  const loadSwitchItem = (item) => {
    var _a;
    const enable = BiliCleanerStorage.get(item.id, item.defaultEnable);
    if (enable) {
      if (!item.noStyle) {
        document.documentElement.setAttribute(item.attrName ?? item.id, "");
      }
      if (item.enableFn) {
        if (item.enableFnRunAt === "document-end" && document.readyState === "loading") {
          document.addEventListener("DOMContentLoaded", () => {
            var _a2;
            (_a2 = item.enableFn()) == null ? void 0 : _a2.then().catch();
          });
        } else {
          (_a = item.enableFn()) == null ? void 0 : _a.then().catch();
        }
      }
    }
  };
  const loadNumberItem = (item) => {
    var _a;
    const value = BiliCleanerStorage.get(item.id, item.defaultValue);
    if (value !== item.disableValue) {
      if (!item.noStyle) {
        document.documentElement.setAttribute(item.attrName ?? item.id, "");
      }
      (_a = item.fn(value)) == null ? void 0 : _a.then().catch();
    }
  };
  const loadStringItem = (item) => {
    var _a;
    const value = BiliCleanerStorage.get(item.id, item.defaultValue);
    if (value !== item.disableValue) {
      if (!item.noStyle) {
        document.documentElement.setAttribute(item.attrName ?? item.id, "");
      }
      (_a = item.fn(value)) == null ? void 0 : _a.then().catch();
    }
  };
  const loadListItem = (item) => {
    const value = BiliCleanerStorage.get(item.id, item.defaultValue);
    if (value !== item.disableValue) {
      document.documentElement.setAttribute(value, "");
    }
  };
  const loadRulesHotKey = () => {
    try {
      const availableItemIds = /* @__PURE__ */ new Set();
      for (const rule of rules) {
        if (!rule.checkFn()) {
          continue;
        }
        for (const group of rule.groups) {
          for (const item of group.items) {
            switch (item.type) {
              case "switch":
                if (!item.enableFn) {
                  availableItemIds.add(item.id);
                }
                break;
              case "number":
              case "string":
                availableItemIds.add(item.id);
                break;
              case "list":
                item.options.forEach((v2) => {
                  availableItemIds.add(v2.id);
                });
                break;
            }
          }
        }
      }
      let isOn = false;
      const disableSign = "_bili_cleaner_disable_";
      const toggle = () => {
        if (!isOn) {
          const attrs = [];
          for (const attr of document.documentElement.attributes) {
            if (availableItemIds.has(attr.name)) {
              attrs.push(attr.name);
            }
          }
          for (const attr of attrs) {
            document.documentElement.removeAttribute(attr);
            document.documentElement.setAttribute(disableSign + attr, "");
          }
        } else {
          const attrs = [];
          for (const attr of document.documentElement.attributes) {
            if (attr.name.includes(disableSign)) {
              attrs.push(attr.name);
            }
          }
          for (const attr of attrs) {
            document.documentElement.removeAttribute(attr);
            document.documentElement.setAttribute(attr.replace(disableSign, ""), "");
          }
        }
        isOn = !isOn;
      };
      useMagicKeys({
        passive: false,
        onEventFired(e2) {
          if (e2.type === "keydown" && e2.altKey && e2.key.toLocaleLowerCase() === "b") {
            e2.preventDefault();
            toggle();
          }
        }
      });
    } catch (err) {
      error(`loadRulesHotKey error`, err);
    }
  };
  const _sfc_main$3 = /* @__PURE__ */ e$1.defineComponent({
    __name: "RulePanelView",
    setup(__props) {
      const store = useRulePanelStore();
      const currRules = [];
      for (const rule of rules) {
        if (rule.checkFn()) {
          currRules.push(rule);
        }
      }
      return (_ctx, _cache) => {
        return e$1.withDirectives((e$1.openBlock(), e$1.createBlock(_sfc_main$d, e$1.mergeProps({ title: "bilibili 页面净化大师", widthPercent: 28, heightPercent: 85, minWidth: 360, minHeight: 600 }, {
          onClose: e$1.unref(store).hide
        }), {
          default: e$1.withCtx(() => [
            (e$1.openBlock(), e$1.createElementBlock(e$1.Fragment, null, e$1.renderList(currRules, (rule, i2) => {
              return e$1.createElementVNode("div", { key: i2 }, [
                (e$1.openBlock(true), e$1.createElementBlock(e$1.Fragment, null, e$1.renderList(rule.groups, (group, j2) => {
                  return e$1.openBlock(), e$1.createElementBlock("div", { key: j2 }, [
                    e$1.createVNode(_sfc_main$e, e$1.mergeProps({ ref_for: true }, { title: group.name, isFold: group.fold, isSpecial: rule.isSpecial }), {
                      default: e$1.withCtx(() => [
                        (e$1.openBlock(true), e$1.createElementBlock(e$1.Fragment, null, e$1.renderList(group.items, (item, innerIndex) => {
                          return e$1.openBlock(), e$1.createElementBlock("div", { key: innerIndex }, [
                            item.type === "switch" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$7, e$1.mergeProps({
                              key: 0,
                              ref_for: true
                            }, item), null, 16)) : item.type === "number" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$9, e$1.mergeProps({
                              key: 1,
                              ref_for: true
                            }, item), null, 16)) : item.type === "string" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$8, e$1.mergeProps({
                              key: 2,
                              ref_for: true
                            }, item), null, 16)) : item.type === "editor" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$b, e$1.mergeProps({
                              key: 3,
                              ref_for: true
                            }, item), null, 16)) : item.type === "list" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$a, e$1.mergeProps({
                              key: 4,
                              ref_for: true
                            }, item), null, 16)) : e$1.createCommentVNode("", true)
                          ]);
                        }), 128))
                      ]),
                      _: 2
                    }, 1040)
                  ]);
                }), 128))
              ]);
            }), 64))
          ]),
          _: 1
        }, 16, ["onClose"])), [
          [e$1.vShow, e$1.unref(store).isShow]
        ]);
      };
    }
  });
  const _sfc_main$2 = /* @__PURE__ */ e$1.defineComponent({
    __name: "SideBtnView",
    setup(__props) {
      const ruleStore = useRulePanelStore();
      const videoStore = useVideoFilterPanelStore();
      const commentStore = useCommentFilterPanelStore();
      const dynamicStore = useDynamicFilterPanelStore();
      const sideBtnStore = useSideBtnStore();
      const target = e$1.ref(null);
      const { width, height } = useElementBounding(target, { windowScroll: false });
      const btnPos = useStorage("bili-cleaner-side-btn-pos", { right: 10, bottom: 180 }, localStorage);
      const isDragging = e$1.ref(false);
      const windowSize = useWindowSize({ includeScrollbar: false });
      const maxPos = e$1.computed(() => {
        return {
          x: windowSize.width.value - width.value,
          y: windowSize.height.value - height.value
        };
      });
      let rAF = 0;
      useDraggable(target, {
        initialValue: {
          x: windowSize.width.value - btnPos.value.right,
          y: windowSize.height.value - btnPos.value.bottom
        },
        preventDefault: true,
        handle: e$1.computed(() => target.value),
        onMove: (pos) => {
          isDragging.value = true;
          btnPos.value.right = maxPos.value.x - pos.x;
          btnPos.value.bottom = maxPos.value.y - pos.y;
          cancelAnimationFrame(rAF);
          rAF = requestAnimationFrame(() => {
            if (btnPos.value.right < 0) {
              btnPos.value.right = 0;
            }
            if (btnPos.value.bottom < 0) {
              btnPos.value.bottom = 0;
            }
            if (btnPos.value.bottom > maxPos.value.y) {
              btnPos.value.bottom = maxPos.value.y;
            }
            if (btnPos.value.right > maxPos.value.x) {
              btnPos.value.right = maxPos.value.x;
            }
          });
        },
        onEnd: () => {
          setTimeout(() => {
            isDragging.value = false;
          }, 50);
        }
      });
      return (_ctx, _cache) => {
        return e$1.unref(sideBtnStore).isShow ? (e$1.openBlock(), e$1.createElementBlock("div", {
          key: 0,
          style: e$1.normalizeStyle({ right: e$1.unref(btnPos).right + "px", bottom: e$1.unref(btnPos).bottom + "px" }),
          class: e$1.normalizeClass(["group fixed flex flex-col justify-end text-black text-opacity-50 will-change-[right,bottom] hover:text-opacity-100", {
            "z-[100]": !e$1.unref(isPageLive)(),
            "z-[1000]": e$1.unref(isPageLive)()
          }])
        }, [
          e$1.unref(isPageDynamic)() ? (e$1.openBlock(), e$1.createElementBlock("div", {
            key: 0,
            class: "mt-1 hidden h-10 w-10 cursor-pointer items-center justify-center rounded-lg border border-gray-200 bg-white transition-colors hover:border-none hover:bg-[#00AEEC] hover:text-white group-hover:flex",
            onClick: _cache[0] || (_cache[0] = ($event) => e$1.unref(dynamicStore).isShow ? e$1.unref(dynamicStore).hide() : e$1.unref(dynamicStore).show())
          }, _cache[4] || (_cache[4] = [
            e$1.createElementVNode("div", null, [
              e$1.createElementVNode("p", { class: "select-none text-center text-[13px] leading-4" }, "动态"),
              e$1.createElementVNode("p", { class: "select-none text-center text-[13px] leading-4" }, "过滤")
            ], -1)
          ]))) : e$1.createCommentVNode("", true),
          e$1.unref(isPageVideo)() || e$1.unref(isPageBangumi)() || e$1.unref(isPagePlaylist)() || e$1.unref(isPageDynamic)() || e$1.unref(isPageSpace)() ? (e$1.openBlock(), e$1.createElementBlock("div", {
            key: 1,
            class: "mt-1 hidden h-10 w-10 cursor-pointer items-center justify-center rounded-lg border border-gray-200 bg-white transition-colors hover:border-none hover:bg-[#00AEEC] hover:text-white group-hover:flex",
            onClick: _cache[1] || (_cache[1] = ($event) => e$1.unref(commentStore).isShow ? e$1.unref(commentStore).hide() : e$1.unref(commentStore).show())
          }, _cache[5] || (_cache[5] = [
            e$1.createElementVNode("div", null, [
              e$1.createElementVNode("p", { class: "select-none text-center text-[13px] leading-4" }, "评论"),
              e$1.createElementVNode("p", { class: "select-none text-center text-[13px] leading-4" }, "过滤")
            ], -1)
          ]))) : e$1.createCommentVNode("", true),
          e$1.unref(isPageVideo)() || e$1.unref(isPageChannel)() || e$1.unref(isPageHomepage)() || e$1.unref(isPagePlaylist)() || e$1.unref(isPageSearch)() || e$1.unref(isPagePopular)() ? (e$1.openBlock(), e$1.createElementBlock("div", {
            key: 2,
            class: "mt-1 hidden h-10 w-10 cursor-pointer items-center justify-center rounded-lg border border-gray-200 bg-white transition-colors hover:border-none hover:bg-[#00AEEC] hover:text-white group-hover:flex",
            onClick: _cache[2] || (_cache[2] = ($event) => e$1.unref(videoStore).isShow ? e$1.unref(videoStore).hide() : e$1.unref(videoStore).show())
          }, _cache[6] || (_cache[6] = [
            e$1.createElementVNode("div", null, [
              e$1.createElementVNode("p", { class: "select-none text-center text-[13px] leading-4" }, "视频"),
              e$1.createElementVNode("p", { class: "select-none text-center text-[13px] leading-4" }, "过滤")
            ], -1)
          ]))) : e$1.createCommentVNode("", true),
          e$1.createElementVNode("div", {
            ref_key: "target",
            ref: target,
            class: "mt-1 flex h-10 w-10 cursor-pointer items-center justify-center rounded-lg border border-gray-200 bg-white transition-colors hover:border-none hover:bg-[#00AEEC] hover:text-white",
            onClick: _cache[3] || (_cache[3] = ($event) => !isDragging.value && (e$1.unref(ruleStore).isShow ? e$1.unref(ruleStore).hide() : e$1.unref(ruleStore).show()))
          }, _cache[7] || (_cache[7] = [
            e$1.createElementVNode("div", null, [
              e$1.createElementVNode("p", { class: "select-none text-center text-[13px] leading-4" }, "页面"),
              e$1.createElementVNode("p", { class: "select-none text-center text-[13px] leading-4" }, "净化")
            ], -1)
          ]), 512)
        ], 6)) : e$1.createCommentVNode("", true);
      };
    }
  });
  const _sfc_main$1 = /* @__PURE__ */ e$1.defineComponent({
    __name: "VideoFilterPanelView",
    setup(__props) {
      const store = useVideoFilterPanelStore();
      let currPageGroups = [];
      for (const videoFilter of videoFilters) {
        if (videoFilter.checkFn()) {
          currPageGroups = [...currPageGroups, ...videoFilter.groups];
        }
      }
      return (_ctx, _cache) => {
        return e$1.withDirectives((e$1.openBlock(), e$1.createBlock(_sfc_main$d, e$1.mergeProps({
          title: "视频过滤",
          widthPercent: 28,
          heightPercent: 85,
          minWidth: 360,
          minHeight: 600
        }, {
          onClose: e$1.unref(store).hide
        }), {
          default: e$1.withCtx(() => [
            (e$1.openBlock(true), e$1.createElementBlock(e$1.Fragment, null, e$1.renderList(e$1.unref(currPageGroups), (group, index) => {
              return e$1.openBlock(), e$1.createElementBlock("div", { key: index }, [
                e$1.createVNode(_sfc_main$e, e$1.mergeProps({ ref_for: true }, { title: group.name, isFold: group.fold }), {
                  default: e$1.withCtx(() => [
                    (e$1.openBlock(true), e$1.createElementBlock(e$1.Fragment, null, e$1.renderList(group.items, (item, innerIndex) => {
                      return e$1.openBlock(), e$1.createElementBlock("div", { key: innerIndex }, [
                        item.type === "switch" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$7, e$1.mergeProps({
                          key: 0,
                          ref_for: true
                        }, item), null, 16)) : item.type === "number" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$9, e$1.mergeProps({
                          key: 1,
                          ref_for: true
                        }, item), null, 16)) : item.type === "string" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$8, e$1.mergeProps({
                          key: 2,
                          ref_for: true
                        }, item), null, 16)) : item.type === "editor" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$b, e$1.mergeProps({
                          key: 3,
                          ref_for: true
                        }, item), null, 16)) : item.type === "list" ? (e$1.openBlock(), e$1.createBlock(_sfc_main$a, e$1.mergeProps({
                          key: 4,
                          ref_for: true
                        }, item), null, 16)) : e$1.createCommentVNode("", true)
                      ]);
                    }), 128))
                  ]),
                  _: 2
                }, 1040)
              ]);
            }), 128))
          ]),
          _: 1
        }, 16, ["onClose"])), [
          [e$1.vShow, e$1.unref(store).isShow]
        ]);
      };
    }
  });
  const _hoisted_1 = { class: "text-base" };
  const _sfc_main = /* @__PURE__ */ e$1.defineComponent({
    __name: "App",
    setup(__props) {
      return (_ctx, _cache) => {
        return e$1.openBlock(), e$1.createElementBlock("div", _hoisted_1, [
          e$1.createVNode(_sfc_main$3),
          e$1.createVNode(_sfc_main$1),
          e$1.createVNode(_sfc_main$6),
          e$1.createVNode(_sfc_main$4),
          e$1.createVNode(_sfc_main$5),
          e$1.createVNode(_sfc_main$2)
        ]);
      };
    }
  });
  const waitForHead = () => {
    return new Promise((resolve) => {
      if (document.head) {
        resolve();
      }
      const observer = new MutationObserver(() => {
        if (document.head) {
          observer.disconnect();
          resolve();
        }
      });
      observer.observe(document, { childList: true, subtree: true });
    });
  };
  const waitForBody = () => {
    return new Promise((resolve) => {
      if (document.body) {
        resolve();
      }
      const observer = new MutationObserver(() => {
        if (document.body) {
          observer.disconnect();
          resolve();
        }
      });
      observer.observe(document, { childList: true, subtree: true });
    });
  };
  const loadModules = () => {
    waitForHead().then(() => {
      loadStyles();
      log("loadStyles done");
    });
    loadRules();
    loadRulesHotKey();
    log("loadRules done");
    loadFilters();
    log("loadFilters done");
  };
  const css = '*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}:host{font-family:PingFang SC,HarmonyOS_Regular,Helvetica Neue,Microsoft YaHei,sans-serif!important}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-y-0{top:0;bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.z-10{z-index:10}.z-50{z-index:50}.z-\\[10000000\\]{z-index:10000000}.z-\\[1000\\]{z-index:1000}.z-\\[100\\]{z-index:100}.m-0\\.5{margin:2px}.m-1{margin:4px}.mx-2{margin-left:8px;margin-right:8px}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:4px;margin-bottom:4px}.mb-0\\.5{margin-bottom:2px}.mb-1\\.5{margin-bottom:6px}.mb-2{margin-bottom:8px}.mb-3{margin-bottom:12px}.ml-2{margin-left:8px}.ml-4{margin-left:16px}.ml-auto{margin-left:auto}.mr-0\\.5{margin-right:2px}.mr-1{margin-right:4px}.mt-1{margin-top:4px}.mt-4{margin-top:16px}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.contents{display:contents}.list-item{display:list-item}.hidden{display:none}.size-8{width:32px;height:32px}.h-10{height:40px}.h-4{height:16px}.h-5{height:20px}.h-6{height:24px}.h-fit{height:-moz-fit-content;height:fit-content}.max-h-60{max-height:240px}.min-h-\\[calc\\(100\\%-2\\.5rem\\)\\]{min-height:calc(100% - 40px)}.w-1\\/5{width:20%}.w-10{width:40px}.w-11{width:44px}.w-2\\/5{width:40%}.w-24{width:96px}.w-4{width:16px}.w-5{width:20px}.w-6{width:24px}.w-full{width:100%}.flex-1{flex:1 1 0%}.translate-x-1{--tw-translate-x: 4px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-6{--tw-translate-x: 24px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-default{cursor:default}.cursor-move{cursor:move}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overscroll-none{overscroll-behavior:none}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:8px}.rounded-md{border-radius:6px}.rounded-xl{border-radius:12px}.border{border-width:1px}.border-2{border-width:2px}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.border-green-400{--tw-border-opacity: 1;border-color:rgb(74 222 128 / var(--tw-border-opacity))}.border-transparent{border-color:transparent}.bg-\\[\\#00AEEC\\]{--tw-bg-opacity: 1;background-color:rgb(0 174 236 / var(--tw-bg-opacity))}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity))}.bg-blue-100\\/60{background-color:#dbeafe99}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity))}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity))}.bg-purple-100\\/60{background-color:#f3e8ff99}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.p-1{padding:4px}.p-1\\.5{padding:6px}.p-2{padding:8px}.px-2{padding-left:8px;padding-right:8px}.px-2\\.5{padding-left:10px;padding-right:10px}.px-3{padding-left:12px;padding-right:12px}.px-4{padding-left:16px;padding-right:16px}.py-0\\.5{padding-top:2px;padding-bottom:2px}.py-1{padding-top:4px;padding-bottom:4px}.py-1\\.5{padding-top:6px;padding-bottom:6px}.py-2{padding-top:8px;padding-bottom:8px}.pl-1{padding-left:4px}.pl-10{padding-left:40px}.pl-3{padding-left:12px}.pl-9{padding-left:36px}.pr-2{padding-right:8px}.pr-4{padding-right:16px}.pt-2{padding-top:8px}.text-left{text-align:left}.text-center{text-align:center}.text-\\[13px\\]{font-size:13px}.text-\\[15px\\]{font-size:15px}.text-base{font-size:16px;line-height:24px}.text-lg{font-size:18px;line-height:28px}.text-sm{font-size:14px;line-height:20px}.text-xl{font-size:20px;line-height:28px}.font-black{font-weight:900}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.leading-4{line-height:16px}.leading-6{line-height:24px}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity))}.text-blue-900{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-orange-900{--tw-text-opacity: 1;color:rgb(124 45 18 / var(--tw-text-opacity))}.text-purple-500{--tw-text-opacity: 1;color:rgb(168 85 247 / var(--tw-text-opacity))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity))}.text-purple-900{--tw-text-opacity: 1;color:rgb(88 28 135 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.text-opacity-50{--tw-text-opacity: .5}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-black\\/20{--tw-shadow-color: rgb(0 0 0 / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-black\\/5{--tw-ring-color: rgb(0 0 0 / .05)}.ring-gray-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.will-change-\\[right\\,bottom\\]{will-change:right,bottom}.will-change-\\[top\\,left\\]{will-change:top,left}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.invalid\\:border-red-500:invalid{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity))}.hover\\:rounded-full:hover{border-radius:9999px}.hover\\:border-none:hover{border-style:none}.hover\\:border-blue-400:hover{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity))}.hover\\:border-green-400:hover{--tw-border-opacity: 1;border-color:rgb(74 222 128 / var(--tw-border-opacity))}.hover\\:border-red-300:hover{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity))}.hover\\:bg-\\[\\#00AEEC\\]:hover,.hover\\:bg-\\[\\#00aeec\\]:hover{--tw-bg-opacity: 1;background-color:rgb(0 174 236 / var(--tw-bg-opacity))}.hover\\:bg-blue-100:hover{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity))}.hover\\:bg-blue-50:hover{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity))}.hover\\:bg-green-50:hover{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity))}.hover\\:bg-purple-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity))}.hover\\:bg-red-50:hover{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity))}.hover\\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.hover\\:bg-opacity-40:hover{--tw-bg-opacity: .4}.hover\\:bg-opacity-50:hover{--tw-bg-opacity: .5}.hover\\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.hover\\:text-opacity-100:hover{--tw-text-opacity: 1}.hover\\:ring-blue-500:hover{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity))}.focus\\:border-gray-400:focus{--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity))}.focus\\:border-gray-500:focus{--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:invalid\\:border-red-500:invalid:focus{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity))}.focus-visible\\:border-indigo-500:focus-visible{--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity))}.focus-visible\\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\\:ring-gray-500:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(107 114 128 / var(--tw-ring-opacity))}.focus-visible\\:ring-white\\/75:focus-visible{--tw-ring-color: rgb(255 255 255 / .75)}.focus-visible\\:ring-offset-1:focus-visible{--tw-ring-offset-width: 1px}.group:hover .group-hover\\:flex{display:flex}@media (min-width: 640px){.sm\\:text-sm{font-size:14px;line-height:20px}}';
  const main = () => {
    const wrap = document.createElement("div");
    wrap.id = "bili-cleaner";
    const root = wrap.attachShadow({ mode: "open" });
    const style = document.createElement("style");
    style.textContent = css;
    root.appendChild(style);
    waitForBody().then(() => document.body.appendChild(wrap));
    const app = e$1.createApp(_sfc_main);
    app.config.errorHandler = (err, vm, info) => {
      error("Vue:", err);
      error("Component:", vm);
      error("Info:", info);
    };
    const pinia = createPinia();
    app.use(pinia);
    app.mount(
      (() => {
        const node = document.createElement("div");
        root.appendChild(node);
        return node;
      })()
    );
  };
  const menu = () => {
    const ruleStore = useRulePanelStore();
    const videoStore = useVideoFilterPanelStore();
    const commentStore = useCommentFilterPanelStore();
    const dynamicStore = useDynamicFilterPanelStore();
    const sideBtnStore = useSideBtnStore();
    _GM_registerMenuCommand("✅ 页面净化优化", () => {
      ruleStore.isShow ? ruleStore.hide() : ruleStore.show();
    });
    if (isPageHomepage() || isPageVideo() || isPagePlaylist() || isPagePopular() || isPageChannel() || isPageSearch() || isPageSpace()) {
      _GM_registerMenuCommand("✅ 视频过滤设置", () => {
        videoStore.isShow ? videoStore.hide() : videoStore.show();
      });
    } else {
      _GM_registerMenuCommand("🚫 视频过滤设置", () => {
        alert("[bilibili-cleaner] 本页面不支持视频过滤");
      });
    }
    if (isPageVideo() || isPageBangumi() || isPageDynamic() || isPageSpace() || isPagePlaylist()) {
      _GM_registerMenuCommand("✅ 评论过滤设置", () => {
        commentStore.isShow ? commentStore.hide() : commentStore.show();
      });
    } else {
      _GM_registerMenuCommand("🚫 评论过滤设置", () => {
        alert("[bilibili-cleaner] 本页面不支持评论过滤");
      });
    }
    if (isPageDynamic()) {
      _GM_registerMenuCommand("✅ 动态过滤设置", () => {
        dynamicStore.isShow ? dynamicStore.hide() : dynamicStore.show();
      });
    } else {
      _GM_registerMenuCommand("🚫 动态过滤设置", () => {
        alert("[bilibili-cleaner] 本页面不支持动态过滤");
      });
    }
    _GM_registerMenuCommand("⚡ 快捷按钮开关", () => {
      sideBtnStore.isShow ? sideBtnStore.hide() : sideBtnStore.show();
    });
  };
  try {
    log(`script start, mode: ${"production"}, url: ${location.href}`);
    loadModules();
    main();
    menu();
    log(`script end`);
  } catch (err) {
    error("main.ts error", err);
  }

})(Vue);