Greasy Fork is available in English.

Tieba Remix: 贴吧网页端重塑

新版样式;功能扩展;

// ==UserScript==
// @name         Tieba Remix: 贴吧网页端重塑
// @namespace    https://github.com/WiresawBlade/Tieba-Remix
// @version      0.4.2-beta
// @author       锯条
// @description  新版样式;功能扩展;
// @license      MIT
// @icon         https://gitee.com/WiresawBlade/Tieba-Remix/raw/master/assets/images/main/icon16.png
// @icon64       https://gitee.com/WiresawBlade/Tieba-Remix/raw/master/assets/images/main/icon64.png
// @match        *://tieba.baidu.com
// @match        *://tieba.baidu.com/?*
// @match        *://tieba.baidu.com/p/*
// @match        *://tieba.baidu.com/f?*
// @match        *://jump.bdimg.com/safecheck/*
// @match        *://jump2.bdimg.com/safecheck/*
// @require      https://fastly.jsdelivr.net/npm/vue@3.4.15/dist/vue.global.prod.js
// @require      data:application/javascript,%3Bwindow.Vue%3DVue%3B
// @require      https://fastly.jsdelivr.net/npm/element-plus@2.5.3/dist/index.full.min.js
// @require      https://fastly.jsdelivr.net/npm/marked@9.1.6/lib/marked.umd.min.js
// @resource     element-plus/dist/index.css  https://fastly.jsdelivr.net/npm/element-plus@2.5.3/dist/index.css
// @grant        GM_addStyle
// @grant        GM_deleteValue
// @grant        GM_getResourceText
// @grant        GM_getValue
// @grant        GM_info
// @grant        GM_listValues
// @grant        GM_openInTab
// @grant        GM_setValue
// @run-at       document-start
// ==/UserScript==

(n=>{if(typeof GM_addStyle=="function"){GM_addStyle(n);return}const e=document.createElement("style");e.textContent=n,document.head.append(e)})(` @charset "UTF-8";html[data-v-4b280e9a] {
  padding: 0;
  margin: 0;
  text-align: justify;
}
body[data-v-4b280e9a] {
  padding: 0;
  margin: 0;
  font-family: var(--code-zh);
}
body[no-scrollbar][data-v-4b280e9a] {
  overflow: hidden;
}
div[data-v-4b280e9a],
p[data-v-4b280e9a] {
  margin: 0;
}
select[data-v-4b280e9a] {
  padding: 1px 8px;
  border: 1px solid var(--border-color);
  border-radius: 8px;
  cursor: pointer;
}
option[data-v-4b280e9a] {
  cursor: pointer;
}
option[data-v-4b280e9a]:checked {
  background-color: var(--tieba-theme-color);
  color: var(--default-background);
}
a[data-v-4b280e9a] {
  color: inherit;
  -webkit-text-decoration: none;
  text-decoration: none;
}
.dialogJ[data-v-4b280e9a] {
  position: fixed !important;
  top: 50% !important;
  left: 50% !important;
}
.dialogJ[data-v-4b280e9a] {
  transform: translate(-50%, -50%);
}
@keyframes kf-fade-in-4b280e9a {
0% {
    opacity: 0;
}
100% {
    opacity: 1;
}
}
@keyframes kf-fade-out-4b280e9a {
0% {
    opacity: 1;
}
100% {
    opacity: 0;
}
}
@keyframes kf-dialog-in-4b280e9a {
0% {
    opacity: 0;
    transform: scale(1.2);
}
100% {
    opacity: 1;
    transform: scale(1);
}
}
@keyframes kf-zoom-in-4b280e9a {
0% {
    transform: scale(0.72);
}
100% {
    transform: scale(1);
}
}
@keyframes kf-fade-zoom-in-4b280e9a {
0% {
    opacity: 0;
    transform: scale(0.72);
}
100% {
    opacity: 1;
    transform: scale(1);
}
}
.dialog-wrapper[data-v-4b280e9a] {
  position: fixed;
  z-index: 9999;
  top: 0;
  left: 0;
  display: flex;
  width: 100%;
  height: 100%;
  background-color: transparent;
  animation: kf-fade-in-4b280e9a 0.2s;
}
.dialog-wrapper.darker[data-v-4b280e9a] {
  background-color: rgba(0, 0, 0, 0.72);
}
.blur-effect[data-v-4b280e9a] {
  -webkit-backdrop-filter: blur(24px);
          backdrop-filter: blur(24px);
}
html.dark-theme .blur-effect[data-v-4b280e9a] {
  -webkit-backdrop-filter: blur(24px) brightness(0.8);
          backdrop-filter: blur(24px) brightness(0.8);
}html {
  padding: 0;
  margin: 0;
  text-align: justify;
}
body {
  padding: 0;
  margin: 0;
  font-family: var(--code-zh);
}
body[no-scrollbar] {
  overflow: hidden;
}
div,
p {
  margin: 0;
}
select {
  padding: 1px 8px;
  border: 1px solid var(--border-color);
  border-radius: 8px;
  cursor: pointer;
}
option {
  cursor: pointer;
}
option:checked {
  background-color: var(--tieba-theme-color);
  color: var(--default-background);
}
a {
  color: inherit;
  -webkit-text-decoration: none;
  text-decoration: none;
}
.dialogJ {
  position: fixed !important;
  top: 50% !important;
  left: 50% !important;
}
.dialogJ {
  transform: translate(-50%, -50%);
}
@keyframes kf-fade-in {
0% {
    opacity: 0;
}
100% {
    opacity: 1;
}
}
@keyframes kf-fade-out {
0% {
    opacity: 1;
}
100% {
    opacity: 0;
}
}
@keyframes kf-dialog-in {
0% {
    opacity: 0;
    transform: scale(1.2);
}
100% {
    opacity: 1;
    transform: scale(1);
}
}
@keyframes kf-zoom-in {
0% {
    transform: scale(0.72);
}
100% {
    transform: scale(1);
}
}
@keyframes kf-fade-zoom-in {
0% {
    opacity: 0;
    transform: scale(0.72);
}
100% {
    opacity: 1;
    transform: scale(1);
}
}
.user-button {
  box-sizing: border-box;
  padding: 2px 8px;
  border: none;
  border-radius: 6px;
  background: none;
  background-color: var(--default-background);
  box-shadow: 0 0 0 1px var(--border-color);
  color: var(--default-fore);
  cursor: pointer;
  transition: 0.4s;
}
.theme-style.user-button {
  color: var(--default-background) !important;
}
.theme-style.user-button {
  background-color: var(--tieba-theme-color);
}
.theme-style.user-button:hover {
  background-color: var(--tieba-theme-hover);
}
.theme-style.user-button:active {
  background-color: var(--tieba-theme-active);
}
.unset-background.user-button {
  background-color: transparent;
  background-color: initial;
}
.no-border.user-button {
  box-shadow: none;
}
.no-border-all.user-button {
  box-shadow: none;
}
.no-border-all.user-button:hover, .no-border-all.user-button:focus {
  box-shadow: none;
}
.user-button:hover {
  background-color: var(--default-hover);
}
.user-button:active {
  background-color: var(--default-active);
}
.user-button:focus {
  border-color: var(--tieba-theme-color);
  box-shadow: 0 0 0 2px var(--tieba-theme-color);
}html[data-v-a6de5a03] {
  padding: 0;
  margin: 0;
  text-align: justify;
}
body[data-v-a6de5a03] {
  padding: 0;
  margin: 0;
  font-family: var(--code-zh);
}
body[no-scrollbar][data-v-a6de5a03] {
  overflow: hidden;
}
div[data-v-a6de5a03],
p[data-v-a6de5a03] {
  margin: 0;
}
select[data-v-a6de5a03] {
  padding: 1px 8px;
  border: 1px solid var(--border-color);
  border-radius: 8px;
  cursor: pointer;
}
option[data-v-a6de5a03] {
  cursor: pointer;
}
option[data-v-a6de5a03]:checked {
  background-color: var(--tieba-theme-color);
  color: var(--default-background);
}
a[data-v-a6de5a03] {
  color: inherit;
  -webkit-text-decoration: none;
  text-decoration: none;
}
.dialogJ[data-v-a6de5a03] {
  position: fixed !important;
  top: 50% !important;
  left: 50% !important;
}
.dialogJ[data-v-a6de5a03] {
  transform: translate(-50%, -50%);
}
@keyframes kf-fade-in-a6de5a03 {
0% {
    opacity: 0;
}
100% {
    opacity: 1;
}
}
@keyframes kf-fade-out-a6de5a03 {
0% {
    opacity: 1;
}
100% {
    opacity: 0;
}
}
@keyframes kf-dialog-in-a6de5a03 {
0% {
    opacity: 0;
    transform: scale(1.2);
}
100% {
    opacity: 1;
    transform: scale(1);
}
}
@keyframes kf-zoom-in-a6de5a03 {
0% {
    transform: scale(0.72);
}
100% {
    transform: scale(1);
}
}
@keyframes kf-fade-zoom-in-a6de5a03 {
0% {
    opacity: 0;
    transform: scale(0.72);
}
100% {
    opacity: 1;
    transform: scale(1);
}
}
@keyframes stretch-a6de5a03 {
0% {
    padding: 0 12px;
    opacity: 0;
}
50% {
    opacity: 1;
}
100% {
    padding: 8px 12px;
}
}
.check[data-v-a6de5a03] {
  color: var(--level-green-fore);
}
.warning[data-v-a6de5a03] {
  color: var(--warning-color);
}
.error[data-v-a6de5a03] {
  color: var(--error-color);
}
.toast-container[data-v-a6de5a03] {
  position: fixed;
  z-index: 999;
  bottom: 96px;
  left: 50%;
  display: flex;
  max-height: 60vh;
  align-items: center;
  padding: 8px 12px;
  border: 1px solid var(--border-color);
  border-radius: 16px;
  animation: stretch-a6de5a03 0.4s cubic-bezier(0.18, 0.89, 0.32, 1.6);
  background-color: var(--default-background);
  box-shadow: 0 10px 24px rgba(0, 0, 0, 0.2);
  gap: 6px;
  text-overflow: ellipsis;
  transform: translateX(-50%);
  transition: all ease 0.4s;
}
.toast-container .toast-icon[data-v-a6de5a03] {
  font-size: 18px;
}
.toast-container .toast-content[data-v-a6de5a03] {
  overflow: hidden;
  max-width: 80vw;
  max-height: 60vh;
  padding: 0 6px;
  text-align: left;
  text-overflow: ellipsis;
  white-space: pre-wrap;
}
.toast-container span[data-v-a6de5a03] {
  color: var(--minimal-fore);
  font-size: 12px;
}
.toast-container .toast-controls .close-button[data-v-a6de5a03] {
  padding: 6px;
  color: var(--error-color);
  font-weight: bold;
}
.toast-container .toast-controls .close-button[data-v-a6de5a03]:not(:active):not(:focus) {
  box-shadow: none;
}
.blur-effect[data-v-a6de5a03] {
  background-color: var(--trans-default-background);
  -webkit-backdrop-filter: blur(24px);
          backdrop-filter: blur(24px);
}
html.dark-theme .blur-effect[data-v-a6de5a03] {
  -webkit-backdrop-filter: blur(24px) brightness(0.8);
          backdrop-filter: blur(24px) brightness(0.8);
}html[data-v-8df9d0bc] {
  padding: 0;
  margin: 0;
  text-align: justify;
}
body[data-v-8df9d0bc] {
  padding: 0;
  margin: 0;
  font-family: var(--code-zh);
}
body[no-scrollbar][data-v-8df9d0bc] {
  overflow: hidden;
}
div[data-v-8df9d0bc],
p[data-v-8df9d0bc] {
  margin: 0;
}
select[data-v-8df9d0bc] {
  padding: 1px 8px;
  border: 1px solid var(--border-color);
  border-radius: 8px;
  cursor: pointer;
}
option[data-v-8df9d0bc] {
  cursor: pointer;
}
option[data-v-8df9d0bc]:checked {
  background-color: var(--tieba-theme-color);
  color: var(--default-background);
}
a[data-v-8df9d0bc] {
  color: inherit;
  -webkit-text-decoration: none;
  text-decoration: none;
}
.dialogJ[data-v-8df9d0bc] {
  position: fixed !important;
  top: 50% !important;
  left: 50% !important;
}
.dialogJ[data-v-8df9d0bc] {
  transform: translate(-50%, -50%);
}
.message-box[data-v-8df9d0bc] {
  display: flex;
  overflow: hidden;
  max-width: 60vw;
  max-height: 80vh;
  box-sizing: border-box;
  flex-direction: column;
  border: 1px solid var(--light-border-color);
  border-radius: 16px;
  margin: auto;
  animation: kf-dialog-in 0.4s ease;
  background-color: var(--default-background);
  box-shadow: 0 0 20px rgba(0, 0, 0, 0.3);
  font-size: 16px;
  transition: 0.4s ease;
}
.message-box .message-wrapper[data-v-8df9d0bc] {
  display: flex;
  overflow-x: hidden;
  overflow-y: auto;
  overflow: hidden auto;
  flex-direction: column;
  padding: 16px;
}
.message-box .message-wrapper .title[data-v-8df9d0bc] {
  margin-bottom: 8px;
  color: var(--highlight-fore);
  font-size: 20px;
  font-weight: bold;
}
.message-box .message-controls[data-v-8df9d0bc] {
  display: flex;
  padding: 16px;
  margin-top: auto;
  background-color: var(--deep-background);
  gap: 8px;
}
.message-box .message-controls .message-button[data-v-8df9d0bc] {
  flex-grow: 1;
  padding: 6px 16px;
  font-size: 14px;
}html {
  padding: 0;
  margin: 0;
  text-align: justify;
}
body {
  padding: 0;
  margin: 0;
  font-family: var(--code-zh);
}
body[no-scrollbar] {
  overflow: hidden;
}
div,
p {
  margin: 0;
}
select {
  padding: 1px 8px;
  border: 1px solid var(--border-color);
  border-radius: 8px;
  cursor: pointer;
}
option {
  cursor: pointer;
}
option:checked {
  background-color: var(--tieba-theme-color);
  color: var(--default-background);
}
a {
  color: inherit;
  -webkit-text-decoration: none;
  text-decoration: none;
}
.dialogJ {
  position: fixed !important;
  top: 50% !important;
  left: 50% !important;
}
.dialogJ {
  transform: translate(-50%, -50%);
}
.block-panel {
  display: flex;
  min-width: 30px;
  height: 26px;
  align-items: center;
  justify-content: center;
  padding: 2px 8px;
  border-radius: 24px;
  margin: auto;
  background-color: var(--trans-light-background);
  font-size: 14px;
  text-align: center;
}
.block-panel .icon {
  color: var(--light-fore);
  font-size: 18px;
}
.block-panel .panel-button {
  border: none !important;
}
.block-panel .panel-button {
  width: 30px;
  height: 30px;
  padding: 4px;
  border-radius: 48px;
}
.block-panel.left-align {
  margin-left: 0;
}html[data-v-90c4af2f] {
  padding: 0;
  margin: 0;
  text-align: justify;
}
body[data-v-90c4af2f] {
  padding: 0;
  margin: 0;
  font-family: var(--code-zh);
}
body[no-scrollbar][data-v-90c4af2f] {
  overflow: hidden;
}
div[data-v-90c4af2f],
p[data-v-90c4af2f] {
  margin: 0;
}
select[data-v-90c4af2f] {
  padding: 1px 8px;
  border: 1px solid var(--border-color);
  border-radius: 8px;
  cursor: pointer;
}
option[data-v-90c4af2f] {
  cursor: pointer;
}
option[data-v-90c4af2f]:checked {
  background-color: var(--tieba-theme-color);
  color: var(--default-background);
}
a[data-v-90c4af2f] {
  color: inherit;
  -webkit-text-decoration: none;
  text-decoration: none;
}
.dialogJ[data-v-90c4af2f] {
  position: fixed !important;
  top: 50% !important;
  left: 50% !important;
}
.dialogJ[data-v-90c4af2f] {
  transform: translate(-50%, -50%);
}
@keyframes kf-fade-in-90c4af2f {
0% {
    opacity: 0;
}
100% {
    opacity: 1;
}
}
@keyframes kf-fade-out-90c4af2f {
0% {
    opacity: 1;
}
100% {
    opacity: 0;
}
}
@keyframes kf-dialog-in-90c4af2f {
0% {
    opacity: 0;
    transform: scale(1.2);
}
100% {
    opacity: 1;
    transform: scale(1);
}
}
@keyframes kf-zoom-in-90c4af2f {
0% {
    transform: scale(0.72);
}
100% {
    transform: scale(1);
}
}
@keyframes kf-fade-zoom-in-90c4af2f {
0% {
    opacity: 0;
    transform: scale(0.72);
}
100% {
    opacity: 1;
    transform: scale(1);
}
}
#header-progress[data-v-90c4af2f] {
  position: fixed;
  z-index: 99999;
  top: 0;
  max-width: 100vw;
  height: 4px;
  background-color: var(--tieba-theme-color);
  transition: 0.4s;
}
#header-progress.complete[data-v-90c4af2f] {
  animation: kf-fade-out-90c4af2f 0.6s forwards;
}html[data-v-79fe5854] {
  padding: 0;
  margin: 0;
  text-align: justify;
}
body[data-v-79fe5854] {
  padding: 0;
  margin: 0;
  font-family: var(--code-zh);
}
body[no-scrollbar][data-v-79fe5854] {
  overflow: hidden;
}
div[data-v-79fe5854],
p[data-v-79fe5854] {
  margin: 0;
}
select[data-v-79fe5854] {
  padding: 1px 8px;
  border: 1px solid var(--border-color);
  border-radius: 8px;
  cursor: pointer;
}
option[data-v-79fe5854] {
  cursor: pointer;
}
option[data-v-79fe5854]:checked {
  background-color: var(--tieba-theme-color);
  color: var(--default-background);
}
a[data-v-79fe5854] {
  color: inherit;
  -webkit-text-decoration: none;
  text-decoration: none;
}
.dialogJ[data-v-79fe5854] {
  position: fixed !important;
  top: 50% !important;
  left: 50% !important;
}
.dialogJ[data-v-79fe5854] {
  transform: translate(-50%, -50%);
}
@keyframes kf-fade-in-79fe5854 {
0% {
    opacity: 0;
}
100% {
    opacity: 1;
}
}
@keyframes kf-fade-out-79fe5854 {
0% {
    opacity: 1;
}
100% {
    opacity: 0;
}
}
@keyframes kf-dialog-in-79fe5854 {
0% {
    opacity: 0;
    transform: scale(1.2);
}
100% {
    opacity: 1;
    transform: scale(1);
}
}
@keyframes kf-zoom-in-79fe5854 {
0% {
    transform: scale(0.72);
}
100% {
    transform: scale(1);
}
}
@keyframes kf-fade-zoom-in-79fe5854 {
0% {
    opacity: 0;
    transform: scale(0.72);
}
100% {
    opacity: 1;
    transform: scale(1);
}
}
.images-viewer[data-v-79fe5854] {
  display: flex;
  width: 100%;
  height: 100%;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}
.images-viewer .icon[data-v-79fe5854] {
  color: var(--light-fore);
}
.images-viewer .control-panel[data-v-79fe5854] {
  position: absolute;
  display: flex;
  align-items: center;
  padding: 10px;
  border: 1px solid var(--light-border-color);
  border-radius: 12px;
  background-color: var(--trans-default-background);
  box-shadow: 0 0 32px rgba(0, 0, 0, 0.4);
  gap: 2px;
  -webkit-backdrop-filter: blur(24px);
          backdrop-filter: blur(24px);
}
html.dark-theme .images-viewer .control-panel[data-v-79fe5854] {
  -webkit-backdrop-filter: blur(24px) brightness(0.8);
          backdrop-filter: blur(24px) brightness(0.8);
}
.images-viewer .head-controls[data-v-79fe5854] {
  top: 16px;
  margin-bottom: auto;
}
.images-viewer .head-controls .head-btn[data-v-79fe5854] {
  width: 36px;
  height: 36px;
  border-radius: 12px;
  background-color: transparent;
  background-color: initial;
  box-shadow: none;
}
.images-viewer .head-controls .head-btn[data-v-79fe5854]:hover {
  background-color: var(--default-background);
  color: var(--tieba-theme-color);
}
.images-viewer .head-controls .close[data-v-79fe5854]:hover {
  color: var(--error-color);
}
.images-viewer .head-controls span[data-v-79fe5854] {
  color: var(--minimal-fore);
  font-family: var(--code-monospace);
}
.images-viewer .head-controls .zoom-size[data-v-79fe5854] {
  padding: 10px;
}
.images-viewer .back[data-v-79fe5854],
.images-viewer .forward[data-v-79fe5854] {
  height: 60px;
  box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);
  font-size: large;
}
.images-viewer .back[data-v-79fe5854] {
  left: 32px;
}
.images-viewer .forward[data-v-79fe5854] {
  right: 32px;
}
.images-viewer .back[data-v-79fe5854]:hover,
.images-viewer .forward[data-v-79fe5854]:hover {
  background-color: var(--default-background);
}
.images-viewer .back[data-v-79fe5854]:focus,
.images-viewer .forward[data-v-79fe5854]:focus {
  box-shadow: 0 0 0 2px var(--tieba-theme-color);
}
.images-viewer .image-container[data-v-79fe5854] {
  display: flex;
  width: auto;
  align-items: center;
  justify-content: center;
  margin: auto;
}
.images-viewer .image-container .curr-image[data-v-79fe5854] {
  position: absolute;
  -o-object-fit: contain;
     object-fit: contain;
  transition: all 0.4s ease, left 0s, top 0s;
}
.images-viewer .bottom-controls[data-v-79fe5854] {
  bottom: 16px;
  display: flex;
  margin-top: auto;
  gap: 4px;
}
.images-viewer .bottom-controls .bottom-btn[data-v-79fe5854] {
  overflow: hidden;
  width: 100px;
  height: 75px;
  padding: 0;
  border: none;
  border-radius: 6px;
  background-color: var(--trans-default-background);
  transition: all linear 0.1s;
}
.images-viewer .bottom-controls .bottom-btn .image-list[data-v-79fe5854] {
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
     object-fit: cover;
}
.images-viewer .bottom-controls .bottom-btn.selected[data-v-79fe5854] {
  border: 3px solid var(--tieba-theme-color);
}html[data-v-955dac49] {
  padding: 0;
  margin: 0;
  text-align: justify;
}
body[data-v-955dac49] {
  padding: 0;
  margin: 0;
  font-family: var(--code-zh);
}
body[no-scrollbar][data-v-955dac49] {
  overflow: hidden;
}
div[data-v-955dac49],
p[data-v-955dac49] {
  margin: 0;
}
select[data-v-955dac49] {
  padding: 1px 8px;
  border: 1px solid var(--border-color);
  border-radius: 8px;
  cursor: pointer;
}
option[data-v-955dac49] {
  cursor: pointer;
}
option[data-v-955dac49]:checked {
  background-color: var(--tieba-theme-color);
  color: var(--default-background);
}
a[data-v-955dac49] {
  color: inherit;
  -webkit-text-decoration: none;
  text-decoration: none;
}
.dialogJ[data-v-955dac49] {
  position: fixed !important;
  top: 50% !important;
  left: 50% !important;
}
.dialogJ[data-v-955dac49] {
  transform: translate(-50%, -50%);
}
.post-container .bottom-controls .replies[data-v-955dac49]::before {
  font-family: "Material Symbols", monospace;
  font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 40;
  -webkit-user-select: none;
     -moz-user-select: none;
          user-select: none;
}
a[data-v-955dac49] {
  color: inherit;
  -webkit-text-decoration: none;
  text-decoration: none;
}
p[data-v-955dac49] {
  margin: 0;
}
img[data-v-955dac49]::before {
  display: block;
  width: 100%;
  height: 100%;
  box-sizing: border-box;
  background-color: var(--light-background);
  content: "";
}
.dynamic .img-button[data-v-955dac49] {
  min-width: 30% !important;
  flex: initial !important;
  flex-grow: 1 !important;
}
.post-container[data-v-955dac49] {
  display: flex;
  width: 320px;
  box-sizing: border-box;
  flex-direction: column;
  padding: 16px;
  border-radius: 16px;
  background-color: var(--default-background);
  cursor: pointer;
  gap: 20px;
  text-align: justify;
}
.post-container .forum-btn[data-v-955dac49] {
  border-radius: 24px;
  font-size: 14px;
}
.post-container .forum-btn[data-v-955dac49]:not(:hover):not(:active):not(:focus) {
  background-color: var(--light-background);
  box-shadow: none;
}
.post-container .main-content[data-v-955dac49] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.post-container .main-content .title[data-v-955dac49] {
  margin: 0;
  color: var(--highlight-fore);
  font-weight: bold;
}
.post-container .main-content .content[data-v-955dac49] {
  color: var(--light-fore);
  font-size: 14px;
}
.post-container .img-container[data-v-955dac49] {
  display: flex;
  overflow: hidden;
  flex-wrap: wrap;
  border-radius: 16px;
  gap: 6px;
}
.post-container .img-container .img-button[data-v-955dac49] {
  overflow: hidden;
  min-width: 40%;
  height: 144px;
  flex: 1;
  padding: 0;
  border: none;
  border-radius: 0;
}
.post-container .img-container .img-button .post-img[data-v-955dac49] {
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
     object-fit: cover;
  transition: 0.4s cubic-bezier(0, 0, 0.2, 1);
}
.post-container .img-container .img-button .post-img[data-v-955dac49]:hover {
  scale: 1.2;
}
.post-container .bottom-controls[data-v-955dac49] {
  display: flex;
  align-items: center;
  gap: 12px;
}
.post-container .bottom-controls .author[data-v-955dac49] {
  display: flex;
  align-items: center;
  padding: 0;
  border-radius: 24px;
  background-color: transparent;
  background-color: initial;
}
.post-container .bottom-controls .author .author-portrait[data-v-955dac49] {
  width: 32px;
  height: 32px;
  border-radius: 24px;
  -o-object-fit: cover;
     object-fit: cover;
}
.post-container .bottom-controls .author .author-info[data-v-955dac49] {
  display: flex;
  flex-direction: column;
  padding: 0 10px;
  text-align: left;
}
.post-container .bottom-controls .author .author-info .author-name[data-v-955dac49] {
  font-size: 14px;
  font-weight: bold;
}
.post-container .bottom-controls .author .author-info .post-time[data-v-955dac49] {
  color: var(--minimal-fore);
  font-size: 12px;
}
.post-container .bottom-controls .author[data-v-955dac49]:not(:hover):not(:active):not(:focus) {
  box-shadow: none;
}
.post-container .bottom-controls .replies[data-v-955dac49] {
  display: flex;
  min-width: 16px;
  align-items: center;
  border-radius: 24px;
  margin-left: auto;
  color: var(--light-fore);
  font-family: var(--code-monospace);
  font-size: 13px;
  font-weight: bold;
}
.post-container .bottom-controls .replies[data-v-955dac49]::before {
  margin-right: 6px;
  content: "forum";
  font-size: 16px;
  font-weight: normal;
}.masonry-wrapper[data-v-b2793918] {
  display: flex;
  width: 100%;
  max-width: var(--content-max);
  flex-direction: column;
  align-items: center;
  gap: 12px;
}
.masonry-wrapper .masonry-container[data-v-b2793918] {
  width: 100%;
  margin: auto;
}
@keyframes feeds-in-b2793918 {
0% {
    transform: scale(0.72);
}
100% {
    transform: scale(1);
}
}
.masonry-wrapper .masonry-container .post-elem[data-v-b2793918] {
  animation: feeds-in-b2793918 0.4s cubic-bezier(0.18, 0.89, 0.32, 1.2);
}
.masonry-wrapper .masonry-container .post-elem[data-v-b2793918]:not(:hover):not(:active):not(:focus) {
  box-shadow: none;
}
.masonry-wrapper > .post-elem[data-v-b2793918] {
  position: absolute !important;
  visibility: hidden !important;
}.about-wrapper[data-v-03b57d82] {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 8px;
  margin: auto;
  gap: 12px;
}
.about-wrapper .main-title[data-v-03b57d82] {
  display: flex;
  align-items: center;
  gap: 12px;
}
.about-wrapper .main-title .main-icon[data-v-03b57d82] {
  width: 64px;
  height: 64px;
}
.about-wrapper .main-title .title[data-v-03b57d82] {
  color: var(--highlight-fore);
  font-size: 32px;
  font-style: italic;
  font-weight: bold;
}
.about-wrapper .script-info[data-v-03b57d82] {
  display: flex;
  flex-direction: column;
  align-items: center;
  color: var(--minimal-fore);
  gap: 8px;
}
.about-wrapper .script-info .author-info[data-v-03b57d82] {
  display: flex;
  align-items: baseline;
  gap: 8px;
}
.about-wrapper .about-controls[data-v-03b57d82] {
  display: flex;
  margin-top: 16px;
  gap: 8px;
}
.about-wrapper .about-controls .about-button[data-v-03b57d82] {
  padding: 6px 10px;
  font-size: 14px;
}.update-wrapper[data-v-1ab16850] {
  display: flex;
  max-width: 100%;
  flex-direction: column;
  gap: 8px;
}
.update-wrapper .latest-info[data-v-1ab16850] {
  display: flex;
  align-items: center;
  padding: 2px 8px;
  border-radius: 16px;
  margin: auto;
  margin-bottom: 12px;
  background-color: var(--level-blue-background);
  color: var(--level-blue-fore);
  gap: 6px;
}
.update-wrapper .latest-info.is-latest[data-v-1ab16850] {
  background-color: var(--level-green-background);
  color: var(--level-green-fore);
}
.update-wrapper .title-container[data-v-1ab16850] {
  display: flex;
  align-items: center;
  gap: 10px;
}
.update-wrapper .title-container .title[data-v-1ab16850] {
  font-size: 20px;
  font-weight: bold;
}
.update-wrapper .title-container .is-pre-release[data-v-1ab16850] {
  padding: 2px 8px;
  border-radius: 16px;
  background-color: var(--level-orange-background);
  color: var(--level-orange-fore);
  font-size: 14px;
}
.update-wrapper .main-info[data-v-1ab16850] {
  display: flex;
  align-items: center;
  gap: 8px;
}
.update-wrapper .main-info .avatar[data-v-1ab16850] {
  width: 32px;
  height: 32px;
  border-radius: 32px;
}
.update-wrapper .main-info .release-time[data-v-1ab16850] {
  margin-left: auto;
}
.update-wrapper .update-controls[data-v-1ab16850] {
  display: flex;
  align-items: center;
  margin-top: 8px;
  gap: 8px;
}
.update-wrapper .update-controls .up-button[data-v-1ab16850] {
  padding: 4px 8px;
  border-radius: 10px;
  font-size: 15px;
  font-weight: bold;
}
.update-wrapper .update-controls .up-name[data-v-1ab16850] {
  font-family: var(--code-monospace);
}
.forbidden-wrapper[data-v-1ab16850] {
  display: flex;
  width: 100%;
  height: 100%;
  flex-direction: column;
  align-items: center;
}
.forbidden-wrapper .icon[data-v-1ab16850] {
  font-size: 64px;
}.layout-custom-back[data-v-95670ea2] {
  display: flex;
  width: 100%;
  flex-direction: column;
  gap: 8px;
}
.layout-custom-back .custom-image[data-v-95670ea2] {
  max-width: 100%;
  max-height: 320px;
  border-radius: 8px;
  margin: 0 auto;
}
.layout-custom-back .custom-back-buttons[data-v-95670ea2] {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 6px;
}
.layout-custom-back .adjust-controls[data-v-95670ea2] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.layout-custom-back .adjust-controls .control-set[data-v-95670ea2] {
  display: flex;
  align-items: baseline;
  gap: 6px;
}
.layout-custom-back .adjust-controls .control-set .editor[data-v-95670ea2] {
  width: auto;
  font-family: var(--code-zh);
}.theme-color-component[data-v-01461a8c] {
  display: flex;
  width: 100%;
  flex-direction: column;
  align-items: flex-start;
  gap: 6px;
}
.theme-color-component .title[data-v-01461a8c] {
  margin: 0;
  color: var(--minimal-fore);
  text-align: center;
}
.theme-color-component .picker[data-v-01461a8c] {
  display: flex;
  gap: 6px;
}
.theme-color-component .picker label[data-v-01461a8c] {
  color: var(--minimal-fore);
}
.theme-color-component .reset-button[data-v-01461a8c] {
  margin-left: auto;
}.theme-picker {
  z-index: 9999 !important;
}.toggle-button[data-v-83f67b5d] {
  color: var(--default-fore);
}
.toggle-button .icon[data-v-83f67b5d],
.toggle-button .outline-icon[data-v-83f67b5d] {
  color: var(--minimal-fore);
}
.toggle-button.toggle-on[data-v-83f67b5d] {
  background-color: var(--tieba-theme-color);
  color: var(--default-background);
}.user-textbox {
  box-sizing: border-box;
  padding: 4px;
  border: 2px solid var(--border-color);
  border-radius: 6px;
  background-color: var(--default-background);
  outline: none;
  transition: 0.4s ease;
}
.user-textbox.lodash-style {
  padding: 0;
  border: none;
  border-radius: 0;
  border-bottom: 2px solid var(--border-color);
}
.user-textbox:hover {
  border-color: var(--light-background);
}
.user-textbox:focus {
  border-color: var(--tieba-theme-color);
}html[data-v-08902f07] {
  padding: 0;
  margin: 0;
  text-align: justify;
}
body[data-v-08902f07] {
  padding: 0;
  margin: 0;
  font-family: var(--code-zh);
}
body[no-scrollbar][data-v-08902f07] {
  overflow: hidden;
}
div[data-v-08902f07],
p[data-v-08902f07] {
  margin: 0;
}
select[data-v-08902f07] {
  padding: 1px 8px;
  border: 1px solid var(--border-color);
  border-radius: 8px;
  cursor: pointer;
}
option[data-v-08902f07] {
  cursor: pointer;
}
option[data-v-08902f07]:checked {
  background-color: var(--tieba-theme-color);
  color: var(--default-background);
}
a[data-v-08902f07] {
  color: inherit;
  -webkit-text-decoration: none;
  text-decoration: none;
}
.dialogJ[data-v-08902f07] {
  position: fixed !important;
  top: 50% !important;
  left: 50% !important;
}
.dialogJ[data-v-08902f07] {
  transform: translate(-50%, -50%);
}
@keyframes content-in-08902f07 {
0% {
    opacity: 0;
    transform: translateY(20px);
}
100% {
    opacity: 1;
}
}
.key-button[data-v-08902f07] {
  display: flex;
  overflow: hidden;
  min-width: 80px;
  align-items: center;
  padding: 12px 16px;
  border-radius: 0;
  box-shadow: none;
  font-size: 16px;
  gap: 12px;
  text-align: justify;
  white-space: nowrap;
}
.key-button .icon[data-v-08902f07] {
  font-size: 20px;
  font-variation-settings: "FILL" 0, "wght" 300;
  transition: font-variation-settings 0.2s ease;
}
.key-button .key-info[data-v-08902f07] {
  display: flex;
  width: calc(100% - 32px);
  flex-direction: column;
}
.key-button .key-title[data-v-08902f07],
.key-button .key-desc[data-v-08902f07] {
  overflow: hidden;
  text-overflow: ellipsis;
}
.key-button .key-desc[data-v-08902f07] {
  color: var(--minimal-fore);
  font-size: 14px;
}
.key-button.selected[data-v-08902f07] {
  background-color: var(--tieba-theme-color) !important;
  color: var(--default-background) !important;
}
.key-button.selected[data-v-08902f07] {
  font-weight: bold;
}
.key-button.selected .icon[data-v-08902f07] {
  font-variation-settings: "FILL" 1, "GRAD" 48, "wght" 300;
  font-weight: normal;
}
.key-button.selected .key-desc[data-v-08902f07] {
  color: var(--default-background);
}
.settings-wrapper[data-v-08902f07] {
  display: flex;
  overflow: hidden;
  width: 72%;
  min-width: 720px;
  height: 72%;
  min-height: 400px;
  box-sizing: border-box;
  border: 1px solid var(--light-border-color);
  border-radius: 18px;
  margin: auto;
  animation: kf-dialog-in 0.4s ease;
  background-color: var(--default-background);
  box-shadow: 0 0 24px rgba(0, 0, 0, 0.2);
}
.settings-wrapper .left-container[data-v-08902f07] {
  display: flex;
  width: 30%;
  max-width: 280px;
  flex-direction: column;
}
.settings-wrapper .left-container .search-controls[data-v-08902f07] {
  display: flex;
  flex-direction: column;
  padding: 16px;
  gap: 8px;
}
.settings-wrapper .left-container .search-controls .title[data-v-08902f07] {
  margin-top: 8px;
  font-size: 20px;
  font-weight: bold;
}
.settings-wrapper .left-container .search-controls .search-box[data-v-08902f07] {
  padding: 6px;
  font-size: 14px;
}
.settings-wrapper .left-container .left-panel[data-v-08902f07] {
  display: flex;
  box-sizing: border-box;
  flex-direction: column;
}
.settings-wrapper .middle-container[data-v-08902f07] {
  display: flex;
  width: 20%;
  max-width: 220px;
  flex-direction: column;
  padding: 16px 6px;
  background-color: var(--deep-background);
  gap: 6px;
}
.settings-wrapper .middle-container .sub-key[data-v-08902f07] {
  display: flex;
  padding: 8px 16px;
  border-radius: 12px;
  gap: 4px;
}
.settings-wrapper .middle-container .sub-key .key-title[data-v-08902f07] {
  font-size: 14px;
}
.settings-wrapper .middle-container .sub-key[data-v-08902f07]:not(:hover):not(:active):not(:focus) {
  background-color: transparent;
  background-color: initial;
}
.settings-wrapper .right-container[data-v-08902f07] {
  display: flex;
  overflow: auto;
  width: 50%;
  flex-direction: column;
  flex-grow: 1;
  padding: 16px;
  animation: content-in-08902f07 0.2s cubic-bezier(0, 0, 0.2, 1);
  background-color: var(--default-background);
  gap: 32px;
}
.settings-wrapper .right-container .setting-content[data-v-08902f07] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.settings-wrapper .right-container .setting-content .content-title[data-v-08902f07] {
  color: var(--highlight-fore);
  font-size: 18px;
  font-weight: bold;
}
.settings-wrapper .right-container .setting-content .content-sub-title[data-v-08902f07] {
  color: var(--default-fore);
  font-size: 16px;
  font-weight: bold;
}
.settings-wrapper .right-container .setting-content .content-desc[data-v-08902f07] {
  display: flex;
  flex-direction: column;
  color: var(--light-fore);
  gap: 6px;
}
.settings-wrapper .right-container .setting-content .content-textbox[data-v-08902f07] {
  box-sizing: content-box;
  margin-left: auto;
}
.settings-wrapper .right-container .setting-content .content-textbox.textarea[data-v-08902f07] {
  width: 100%;
  height: 6em;
  resize: none;
}
.settings-wrapper .right-container .setting-content .content-image[data-v-08902f07] {
  max-width: 100%;
  max-height: 320px;
  border-radius: 8px;
  margin: 0 auto;
}
.settings-wrapper .right-container .setting-content .setting-control[data-v-08902f07] {
  display: flex;
}
.settings-wrapper .right-container .setting-content .setting-control .settings-toggle-button[data-v-08902f07] {
  margin-left: auto;
  background: none;
  font-size: 36px;
}
.settings-wrapper .right-container .setting-content .setting-control .settings-toggle-button.toggle-on[data-v-08902f07] {
  color: var(--tieba-theme-color);
}
.settings-wrapper .right-container .setting-content .setting-control .settings-toggle-button.toggle-on[data-v-08902f07]:hover {
  color: var(--tieba-theme-fore);
}
.settings-wrapper .right-container .setting-content .setting-control .icon-component[data-v-08902f07] {
  margin-left: auto;
  font-size: 64px;
  font-variation-settings: "FILL" 1;
}
.settings-wrapper .empty-container[data-v-08902f07] {
  margin: auto;
  color: var(--minimal-fore);
  font-size: 72px;
}html[data-v-c9e404e5] {
  padding: 0;
  margin: 0;
  text-align: justify;
}
body[data-v-c9e404e5] {
  padding: 0;
  margin: 0;
  font-family: var(--code-zh);
}
body[no-scrollbar][data-v-c9e404e5] {
  overflow: hidden;
}
div[data-v-c9e404e5],
p[data-v-c9e404e5] {
  margin: 0;
}
select[data-v-c9e404e5] {
  padding: 1px 8px;
  border: 1px solid var(--border-color);
  border-radius: 8px;
  cursor: pointer;
}
option[data-v-c9e404e5] {
  cursor: pointer;
}
option[data-v-c9e404e5]:checked {
  background-color: var(--tieba-theme-color);
  color: var(--default-background);
}
a[data-v-c9e404e5] {
  color: inherit;
  -webkit-text-decoration: none;
  text-decoration: none;
}
.dialogJ[data-v-c9e404e5] {
  position: fixed !important;
  top: 50% !important;
  left: 50% !important;
}
.dialogJ[data-v-c9e404e5] {
  transform: translate(-50%, -50%);
}
.index-wrapper .grid-container .profile-menu-container .curr-user .user-profile[data-v-c9e404e5] {
  -o-object-fit: contain;
     object-fit: contain;
}
@keyframes kf-fade-in-c9e404e5 {
0% {
    opacity: 0;
}
100% {
    opacity: 1;
}
}
@keyframes kf-fade-out-c9e404e5 {
0% {
    opacity: 1;
}
100% {
    opacity: 0;
}
}
@keyframes kf-dialog-in-c9e404e5 {
0% {
    opacity: 0;
    transform: scale(1.2);
}
100% {
    opacity: 1;
    transform: scale(1);
}
}
@keyframes kf-zoom-in-c9e404e5 {
0% {
    transform: scale(0.72);
}
100% {
    transform: scale(1);
}
}
@keyframes kf-fade-zoom-in-c9e404e5 {
0% {
    opacity: 0;
    transform: scale(0.72);
}
100% {
    opacity: 1;
    transform: scale(1);
}
}
a[data-v-c9e404e5] {
  color: inherit;
  -webkit-text-decoration: none;
  text-decoration: none;
}
.block-wrapper[data-v-c9e404e5] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.block-wrapper .block-controls[data-v-c9e404e5] {
  display: flex;
  align-items: center;
  gap: 8px;
}
.block-wrapper .block-controls .block-title[data-v-c9e404e5] {
  margin: 0;
  font-size: 24px;
  font-weight: bold;
}
.block-wrapper .block-container[data-v-c9e404e5] {
  padding: 8px;
  border-radius: 12px;
  background-color: var(--trans-light-background);
}
body.custom-background .block-wrapper .block-container[data-v-c9e404e5] {
  -webkit-backdrop-filter: blur(24px);
          backdrop-filter: blur(24px);
}
html.dark-theme body.custom-background .block-wrapper .block-container[data-v-c9e404e5] {
  -webkit-backdrop-filter: blur(24px) brightness(0.8);
          backdrop-filter: blur(24px) brightness(0.8);
}
.block-panel[data-v-c9e404e5] {
  display: flex;
  min-width: 30px;
  height: 26px;
  align-items: center;
  justify-content: center;
  padding: 2px 8px;
  border-radius: 24px;
  margin-left: auto;
  background-color: var(--trans-light-background);
  font-size: 14px;
  text-align: center;
}
.block-panel .icon[data-v-c9e404e5] {
  color: var(--light-fore);
  font-size: 18px;
}
.block-panel .panel-btn[data-v-c9e404e5] {
  width: 30px;
  height: 30px;
  padding: 4px;
  border: none;
  border-radius: 48px;
}
.block-panel.left-align[data-v-c9e404e5] {
  margin-left: 0;
}
.index-wrapper[data-v-c9e404e5] {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
}
.index-wrapper .grid-container[data-v-c9e404e5] {
  display: grid;
  max-width: var(--content-max);
  margin: 16px;
  grid-gap: 36px;
  gap: 36px;
  grid-template-rows: repeat(1, 1fr);
}
.index-wrapper .grid-container .head-controls[data-v-c9e404e5] {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 24px;
  margin-top: 24px;
  gap: 24px;
}
.index-wrapper .grid-container .head-controls .main-title[data-v-c9e404e5] {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
}
.index-wrapper .grid-container .head-controls .main-title .main-icon[data-v-c9e404e5] {
  height: 64px;
}
.index-wrapper .grid-container .head-controls .main-title .title[data-v-c9e404e5] {
  font-size: 36px;
  font-style: italic;
  font-weight: bold;
}
.index-wrapper .grid-container .head-controls .search-controls[data-v-c9e404e5] {
  position: relative;
  display: grid;
  width: 100%;
  max-width: 420px;
  justify-content: center;
  grid-template-columns: 1fr 72px;
}
.index-wrapper .grid-container .head-controls .search-controls .search-box[data-v-c9e404e5] {
  width: 100%;
  padding: 8px;
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
  font-size: 16px;
}
.index-wrapper .grid-container .head-controls .search-controls .search-button[data-v-c9e404e5] {
  border: none;
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
  font-size: 16px;
  font-weight: bold;
}
.index-wrapper .grid-container .head-controls .search-controls .search-suggestions[data-v-c9e404e5] {
  position: absolute;
  z-index: 1;
  top: 100%;
  display: flex;
  overflow: hidden;
  width: 100%;
  box-sizing: border-box;
  flex-direction: column;
  border: 1px solid var(--border-color);
  border-radius: 6px;
  margin-top: 4px;
  background-color: var(--default-background);
  box-shadow: 0 0 20px rgba(0, 0, 0, 0.2);
  animation: kf-fade-in-c9e404e5 0.2s;
}
.index-wrapper .grid-container .head-controls .search-controls .search-suggestions .search-elem[data-v-c9e404e5] {
  display: flex;
  overflow: hidden;
  box-sizing: border-box;
  padding: 0;
  padding: 8px;
  border: none;
  border-radius: 0;
  animation: stretch-c9e404e5 0.2s cubic-bezier(0.22, 0.61, 0.36, 1);
  gap: 8px;
  text-align: justify;
}
@keyframes stretch-c9e404e5 {
0% {
    padding: 4px 8px;
}
100% {
    padding: 8px;
}
}
.index-wrapper .grid-container .head-controls .search-controls .search-suggestions .search-elem .sugg-img[data-v-c9e404e5] {
  width: 42px;
  height: 42px;
  border-radius: 8px;
}
.index-wrapper .grid-container .head-controls .search-controls .search-suggestions .search-elem .sugg-content[data-v-c9e404e5] {
  position: relative;
  display: flex;
  width: calc(100% - 42px - 8px);
  flex-direction: column;
  justify-content: center;
  gap: 4px;
}
.index-wrapper .grid-container .head-controls .search-controls .search-suggestions .search-elem .sugg-content .sugg-title[data-v-c9e404e5] {
  overflow: hidden;
  margin: 0;
  font-size: 14px;
  font-weight: bold;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.index-wrapper .grid-container .head-controls .search-controls .search-suggestions .search-elem .sugg-content .sugg-desc[data-v-c9e404e5] {
  overflow: hidden;
  margin: 0;
  color: var(--light-fore);
  font-size: 12px;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.index-wrapper .grid-container .profile-menu-container[data-v-c9e404e5] {
  position: absolute;
  z-index: 1;
}
.index-wrapper .grid-container .profile-menu-container .curr-user[data-v-c9e404e5] {
  position: fixed;
  top: 24px;
  left: 24px;
  overflow: hidden;
  width: 36px;
  height: 36px;
  padding: 0;
  border: 3px solid var(--border-color);
  border-radius: 36px;
}
.index-wrapper .grid-container .profile-menu-container .curr-user .user-profile[data-v-c9e404e5] {
  width: 100%;
}
.index-wrapper .grid-container .profile-menu-container .profile-menu[data-v-c9e404e5] {
  top: 64px;
  left: 24px;
}
.index-wrapper .grid-container .config-menu-container[data-v-c9e404e5] {
  position: absolute;
  z-index: 1;
  display: flex;
}
.index-wrapper .grid-container .config-menu-container .config-menu-btn[data-v-c9e404e5] {
  position: fixed;
  top: 24px;
  right: 24px;
  height: 32px;
  border: none;
  border-radius: 36px;
  background-color: var(--page-background);
  font-size: 24px;
}
.index-wrapper .grid-container .config-menu-container .config-menu-btn[data-v-c9e404e5]:hover {
  background-color: var(--default-background);
}
.index-wrapper .grid-container .config-menu-container .config-menu-btn[data-v-c9e404e5]:active {
  background-color: var(--default-hover);
}
.index-wrapper .grid-container .config-menu-container .config-menu[data-v-c9e404e5] {
  top: 64px;
  right: 24px;
  opacity: 1;
}
.index-wrapper .grid-container .signed-count[data-v-c9e404e5] {
  font-weight: bold;
}
.index-wrapper .grid-container .block-panel.followed[data-v-c9e404e5] {
  margin-left: auto;
}
.index-wrapper .grid-container .followed-container[data-v-c9e404e5] {
  margin-top: -16px;
}
.index-wrapper .grid-container .followed-container .followed-list[data-v-c9e404e5] {
  display: flex;
  flex-wrap: wrap;
  padding: 8px;
  border-radius: 12px;
  background-color: var(--trans-light-background);
  gap: 4px;
}
.index-wrapper .grid-container .followed-container .followed-list .followed-btn[data-v-c9e404e5] {
  display: flex;
  align-items: center;
  padding: 6px 8px;
  border-radius: 12px;
  font-size: 14px;
  gap: 6px;
}
.index-wrapper .grid-container .followed-container .followed-list .followed-btn .signed[data-v-c9e404e5] {
  color: green;
  font-weight: bold;
}
.index-wrapper .grid-container .followed-container .followed-list .followed-btn .forum-level[data-v-c9e404e5] {
  min-width: 24px;
  padding: 0 2px;
  border-radius: 24px;
  font-weight: bold;
  text-align: center;
}
.index-wrapper .grid-container .topic-list[data-v-c9e404e5] {
  display: grid;
  grid-gap: 4px;
  gap: 4px;
  grid-auto-rows: max-content;
  grid-template-columns: repeat(2, 1fr);
}
.index-wrapper .grid-container .topic-list .topic-btn[data-v-c9e404e5] {
  display: flex;
  width: 100%;
  height: 100%;
  align-items: center;
  padding: 12px;
  border-radius: 12px;
  gap: 8px;
}
.index-wrapper .grid-container .topic-list .topic-btn .topic-img[data-v-c9e404e5] {
  width: 72px;
  border-radius: 12px;
}
.index-wrapper .grid-container .topic-list .topic-btn .topic-content[data-v-c9e404e5] {
  display: flex;
  flex-flow: column wrap;
  gap: 4px;
  text-align: justify;
}
.index-wrapper .grid-container .topic-list .topic-btn .topic-content .topic-title[data-v-c9e404e5] {
  display: flex;
  align-items: center;
  gap: 6px;
}
.index-wrapper .grid-container .topic-list .topic-btn .topic-content .topic-title [class^=topic-rank][data-v-c9e404e5] {
  padding: 0 4px;
  border-radius: 4px;
  background-color: orange;
  color: var(--default-background);
  font-weight: bold;
  text-align: center;
}
.index-wrapper .grid-container .topic-list .topic-btn .topic-content .topic-title .topic-name[data-v-c9e404e5] {
  font-size: 16px;
  font-weight: bold;
}
.index-wrapper .grid-container .topic-list .topic-btn .topic-content .topic-desc[data-v-c9e404e5] {
  color: var(--light-fore);
  font-size: 14px;
}
.index-wrapper .masonry-container[data-v-c9e404e5] {
  display: flex;
  width: 100%;
  box-sizing: border-box;
  flex-direction: column;
  align-items: center;
  gap: 8px;
}
.index-wrapper .masonry-container .feeds-container[data-v-c9e404e5] {
  width: 100%;
  margin: auto;
}
@keyframes feeds-in-c9e404e5 {
0% {
    transform: scale(0.72);
}
100% {
    transform: scale(1);
}
}
@keyframes refresh-btn-in-c9e404e5 {
0% {
    padding: 0 18px;
    opacity: 0;
}
100% {
    padding: 8px 18px;
    opacity: 1;
}
}
.index-wrapper .masonry-container .feeds-container .feeds-refresh-btn[data-v-c9e404e5] {
  position: fixed;
  z-index: 1;
  bottom: 24px;
  left: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 8px 18px;
  border-width: 2px;
  border-radius: 16px;
  animation: refresh-btn-in-c9e404e5 0.4s ease;
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.3);
  font-size: 14px;
  font-weight: bold;
  gap: 6px;
  transform: translateX(-50%);
}
.index-wrapper .masonry-container .feeds-container .feeds-refresh-btn .icon[data-v-c9e404e5] {
  font-size: 18px;
}
.index-wrapper .masonry-container .post-elem[data-v-c9e404e5] {
  animation: feeds-in-c9e404e5 0.4s cubic-bezier(0.18, 0.89, 0.32, 1.2);
}
.index-wrapper .masonry-container .post-elem[data-v-c9e404e5]:not(:hover):not(:active):not(:focus) {
  box-shadow: none;
}
.index-wrapper .masonry-container .empty-container .no-feed-content[data-v-c9e404e5] {
  color: var(--minimal-fore);
  font-size: small;
  text-align: center;
}@keyframes slide-in-b3531ddc {
0% {
    opacity: 0;
    transform: translateY(20%);
}
}
#thread-editor[data-v-b3531ddc] {
  bottom: 0;
  left: 50%;
  display: flex;
  width: 100%;
  max-width: var(--content-max);
  max-height: 100vh;
  box-sizing: border-box;
  flex-direction: column;
  align-items: center;
  padding: 24px;
  border-radius: 8px 8px 0 0;
  margin: auto auto 0;
  animation: slide-in-b3531ddc 0.4s ease;
  background-color: var(--default-background);
  gap: 8px;
  transition: 0.4s;
}
#thread-editor #thread-editor-exit[data-v-b3531ddc] {
  margin-left: auto;
  font-size: 18px;
}
#thread-editor #thread-editor-exit[data-v-b3531ddc]:not(:hover):not(:active):not(:focus) {
  box-shadow: none;
}
#thread-editor .title-editor[data-v-b3531ddc] {
  width: 100%;
  flex-grow: 1;
  border-width: 3px;
  background-color: transparent;
  font-size: 24px;
  font-weight: bold;
}
#thread-editor h1[data-v-b3531ddc] {
  margin-right: auto;
}
#thread-editor #thread-editor-slot[data-v-b3531ddc] {
  width: 100%;
  flex-shrink: 2;
}
#thread-editor #thread-editor-toolbar[data-v-b3531ddc] {
  display: flex;
  width: 100%;
  align-items: center;
}
#thread-editor #thread-editor-toolbar #thread-editor-submit[data-v-b3531ddc] {
  padding: 4px 12px;
  margin-left: auto;
  font-size: 16px;
  font-weight: bold;
}html {
  padding: 0;
  margin: 0;
  text-align: justify;
}
body {
  padding: 0;
  margin: 0;
  font-family: var(--code-zh);
}
body[no-scrollbar] {
  overflow: hidden;
}
div,
p {
  margin: 0;
}
select {
  padding: 1px 8px;
  border: 1px solid var(--border-color);
  border-radius: 8px;
  cursor: pointer;
}
option {
  cursor: pointer;
}
option:checked {
  background-color: var(--tieba-theme-color);
  color: var(--default-background);
}
a {
  color: inherit;
  -webkit-text-decoration: none;
  text-decoration: none;
}
.dialogJ {
  position: fixed !important;
  top: 50% !important;
  left: 50% !important;
}
.dialogJ {
  transform: translate(-50%, -50%);
}
#thread-editor .edui-container .edui-toolbar .edui-btn-toolbar .edui-btn .edui-icon::before {
  font-family: "Material Symbols", monospace;
  font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 40;
  -webkit-user-select: none;
     -moz-user-select: none;
          user-select: none;
}
body {
  overflow-x: hidden;
  overflow-y: scroll;
  overflow: hidden scroll;
}
#thread-editor .edui-container {
  width: 100% !important;
}
#thread-editor .edui-container .edui-toolbar {
  height: auto;
  align-items: center;
  background-color: transparent;
}
#thread-editor .edui-container .edui-toolbar .edui-btn-toolbar {
  display: flex;
  background-color: transparent;
  gap: 8px;
}
#thread-editor .edui-container .edui-toolbar .edui-btn-toolbar .edui-btn {
  padding: 1px;
  border-radius: 4px;
  margin-right: 0;
  background: none;
  background-color: var(--light-background);
  box-shadow: 0 0 0 1px var(--border-color);
  cursor: pointer;
  transition: 0.4s;
}
#thread-editor .edui-container .edui-toolbar .edui-btn-toolbar .edui-btn .edui-icon {
  display: flex;
  width: -moz-max-content;
  width: max-content;
  align-items: center;
  padding: 2px 4px;
  background: none;
  gap: 4px;
}
#thread-editor .edui-container .edui-toolbar .edui-btn-toolbar .edui-btn .edui-icon::before {
  font-size: 16px;
}
#thread-editor .edui-container .edui-toolbar .edui-dialog-container .edui-dropdown-menu {
  overflow: hidden;
  width: -moz-max-content;
  width: max-content;
  padding: 0;
  border: 2px solid var(--border-color);
  border-radius: 6px;
  background: none;
}
#thread-editor .edui-container .edui-toolbar .edui-dialog-container .edui-dropdown-menu .edui-popup-body {
  padding: 0;
  border: none;
  background-color: var(--default-background);
}
#thread-editor .edui-container .edui-toolbar .edui-dialog-container .edui-dropdown-menu .edui-popup-caret {
  display: none;
}
#thread-editor .edui-container .edui-editor-body {
  border: none;
  border-radius: 0;
  border-bottom: 3px solid var(--tieba-theme-color);
  transition: 0.4s;
}
#thread-editor .edui-container .edui-editor-body:hover {
  border-color: var(--light-background);
}
#thread-editor .edui-container .edui-editor-body:focus {
  border-color: var(--tieba-theme-color);
}
#thread-editor .edui-container .edui-body-container {
  min-height: 18px !important;
}
#thread-editor .edui-container .edui-body-container {
  max-height: 50vh;
  padding: 0;
  border-radius: 0;
  background-color: transparent;
}
.edui-btn-topic {
  display: none !important;
}
#thread-editor .edui-btn-toolbar .edui-icon.edui-icon-medal::before {
  content: "diamond";
}
#thread-editor .edui-btn-toolbar .edui-icon.edui-icon-medal::after {
  content: "\u7279\u6743";
}
#thread-editor .edui-btn-toolbar .edui-icon.edui-icon-image::before {
  content: "photo";
}
#thread-editor .edui-btn-toolbar .edui-icon.edui-icon-image::after {
  content: "\u63D2\u5165\u56FE\u7247";
}
#thread-editor .edui-btn-toolbar .edui-icon.edui-icon-video::before {
  content: "video_file";
}
#thread-editor .edui-btn-toolbar .edui-icon.edui-icon-video::after {
  content: "\u63D2\u5165\u89C6\u9891";
}
#thread-editor .edui-btn-toolbar .edui-icon.edui-icon-emotion::before {
  content: "face";
}
#thread-editor .edui-btn-toolbar .edui-icon.edui-icon-emotion::after {
  content: "\u63D2\u5165\u8868\u60C5";
}
#thread-editor .edui-btn-toolbar .edui-icon.edui-icon-scrawl::before {
  content: "format_paint";
}
#thread-editor .edui-btn-toolbar .edui-icon.edui-icon-scrawl::after {
  content: "\u6D82\u9E26";
}
#thread-editor .edui-btn-toolbar .edui-icon.edui-icon-topic::before {
  content: "grid_3x3";
}
#thread-editor .edui-btn-toolbar .edui-icon.edui-icon-topic::after {
  content: "\u8BDD\u9898";
}
#thread-editor .edui-btn-toolbar .edui-icon.edui-icon-quick-reply::before {
  content: "rocket_launch";
}
#thread-editor .edui-btn-toolbar .edui-icon.edui-icon-quick-reply::after {
  content: "\u5FEB\u901F\u56DE\u5E16";
}
html {
  padding: 0;
  margin: 0;
  text-align: justify;
}
body {
  padding: 0;
  margin: 0;
  font-family: var(--code-zh);
}
body[no-scrollbar] {
  overflow: hidden;
}
div,
p {
  margin: 0;
}
select {
  padding: 1px 8px;
  border: 1px solid var(--border-color);
  border-radius: 8px;
  cursor: pointer;
}
option {
  cursor: pointer;
}
option:checked {
  background-color: var(--tieba-theme-color);
  color: var(--default-background);
}
a {
  color: inherit;
  -webkit-text-decoration: none;
  text-decoration: none;
}
.dialogJ {
  position: fixed !important;
  top: 50% !important;
  left: 50% !important;
}
.dialogJ {
  transform: translate(-50%, -50%);
}
.edui-popup-body .layer_medal_list li a::before,
.edui-popup-body .layer_btn_list li a::before {
  font-family: "Material Symbols", monospace;
  font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 40;
  -webkit-user-select: none;
     -moz-user-select: none;
          user-select: none;
}
@keyframes kf-fade-in {
0% {
    opacity: 0;
}
100% {
    opacity: 1;
}
}
@keyframes kf-fade-out {
0% {
    opacity: 1;
}
100% {
    opacity: 0;
}
}
@keyframes kf-dialog-in {
0% {
    opacity: 0;
    transform: scale(1.2);
}
100% {
    opacity: 1;
    transform: scale(1);
}
}
@keyframes kf-zoom-in {
0% {
    transform: scale(0.72);
}
100% {
    transform: scale(1);
}
}
@keyframes kf-fade-zoom-in {
0% {
    opacity: 0;
    transform: scale(0.72);
}
100% {
    opacity: 1;
    transform: scale(1);
}
}
.edui-dialog-container .upload_container .next_step, .edui-popup-body .layer_medal_list li a,
.edui-popup-body .layer_btn_list li a {
  box-sizing: border-box;
  padding: 2px 8px;
  border: none;
  border-radius: 6px;
  background: none;
  background-color: var(--default-background);
  box-shadow: 0 0 0 1px var(--border-color);
  color: var(--default-fore);
  cursor: pointer;
  transition: 0.4s;
}
.edui-dialog-container .upload_container .theme-style.next_step, .edui-popup-body .layer_medal_list li a.theme-style,
.edui-popup-body .layer_btn_list li a.theme-style {
  color: var(--default-background) !important;
}
.edui-dialog-container .upload_container .theme-style.next_step, .edui-popup-body .layer_medal_list li a.theme-style,
.edui-popup-body .layer_btn_list li a.theme-style {
  background-color: var(--tieba-theme-color);
}
.edui-dialog-container .upload_container .theme-style.next_step:hover, .edui-popup-body .layer_medal_list li a.theme-style:hover,
.edui-popup-body .layer_btn_list li a.theme-style:hover {
  background-color: var(--tieba-theme-hover);
}
.edui-dialog-container .upload_container .theme-style.next_step:active, .edui-popup-body .layer_medal_list li a.theme-style:active,
.edui-popup-body .layer_btn_list li a.theme-style:active {
  background-color: var(--tieba-theme-active);
}
.edui-dialog-container .upload_container .unset-background.next_step, .edui-popup-body .layer_medal_list li a.unset-background,
.edui-popup-body .layer_btn_list li a.unset-background {
  background-color: transparent;
  background-color: initial;
}
.edui-dialog-container .upload_container .no-border.next_step, .edui-popup-body .layer_medal_list li a.no-border,
.edui-popup-body .layer_btn_list li a.no-border {
  box-shadow: none;
}
.edui-dialog-container .upload_container .no-border-all.next_step, .edui-popup-body .layer_medal_list li a.no-border-all,
.edui-popup-body .layer_btn_list li a.no-border-all {
  box-shadow: none;
}
.edui-dialog-container .upload_container .no-border-all.next_step:hover, .edui-popup-body .layer_medal_list li a.no-border-all:hover,
.edui-popup-body .layer_btn_list li a.no-border-all:hover, .edui-dialog-container .upload_container .no-border-all.next_step:focus, .edui-popup-body .layer_medal_list li a.no-border-all:focus,
.edui-popup-body .layer_btn_list li a.no-border-all:focus {
  box-shadow: none;
}
.edui-dialog-container .upload_container .next_step:hover, .edui-popup-body .layer_medal_list li a:hover,
.edui-popup-body .layer_btn_list li a:hover {
  background-color: var(--default-hover);
}
.edui-dialog-container .upload_container .next_step:active, .edui-popup-body .layer_medal_list li a:active,
.edui-popup-body .layer_btn_list li a:active {
  background-color: var(--default-active);
}
.edui-dialog-container .upload_container .next_step:focus, .edui-popup-body .layer_medal_list li a:focus,
.edui-popup-body .layer_btn_list li a:focus {
  border-color: var(--tieba-theme-color);
  box-shadow: 0 0 0 2px var(--tieba-theme-color);
}
.edui-dialog-container .edui-popup {
  position: static !important;
}
.edui-dialog-container .upload_container {
  padding: 0 20px 20px 0;
}
.edui-dialog-container .upload_container .slide_item_img {
  border-color: var(--tieba-theme-color) !important;
}
.edui-dialog-container .upload_container .slide_item_img {
  overflow: hidden;
}
.edui-dialog-container .upload_container .watermark_options {
  position: static;
  margin-left: 20px;
}
.edui-dialog-container .upload_container .next_step {
  position: static;
  width: -moz-max-content;
  width: max-content;
  height: -moz-max-content;
  height: max-content;
  padding: 4px 8px;
  margin-left: auto;
  line-height: normal;
}
.edui-popup-body {
  position: static;
}
.edui-popup-body .layer_medal_list,
.edui-popup-body .layer_btn_list {
  width: -moz-max-content;
  width: max-content;
  height: -moz-max-content;
  height: max-content;
}
.edui-popup-body .layer_medal_list li,
.edui-popup-body .layer_btn_list li {
  display: flex;
  overflow: hidden;
  align-items: center;
  padding: 0;
  background: none;
}
.edui-popup-body .layer_medal_list li a,
.edui-popup-body .layer_btn_list li a {
  display: flex;
  width: -moz-max-content;
  width: max-content;
  height: -moz-max-content;
  height: max-content;
  align-items: center;
  padding: 4px 8px;
  border-radius: 0;
  box-shadow: none;
  gap: 4px;
}
.edui-popup-body .layer_medal_list li a::before,
.edui-popup-body .layer_btn_list li a::before {
  font-size: 16px;
}
.layer_medal_list li.post_bubble a::before {
  content: "bubble_chart";
}
.layer_medal_list li.post_bubble a::after {
  content: "\u53D1\u5E16\u6C14\u6CE1";
}
.layer_medal_list li.colorful_font a::before {
  content: "format_color_text";
}
.layer_medal_list li.colorful_font a::after {
  content: "\u5F69\u8272\u5B57\u4F53";
}
.layer_btn_list {
  padding: 0 !important;
}
.layer_btn_list li {
  border: none !important;
}
.layer_btn_list li.from_upload a::before {
  content: "upload_file";
}
.layer_btn_list li.from_upload a::after {
  content: "\u4E0A\u4F20\u6587\u4EF6";
}
.layer_btn_list li.from_web a::before {
  content: "web";
}
.layer_btn_list li.from_web a::after {
  content: "\u7F51\u7EDC\u56FE\u7247";
}html {
  padding: 0;
  margin: 0;
  text-align: justify;
}
body {
  padding: 0;
  margin: 0;
  font-family: var(--code-zh);
}
body[no-scrollbar] {
  overflow: hidden;
}
div,
p {
  margin: 0;
}
select {
  padding: 1px 8px;
  border: 1px solid var(--border-color);
  border-radius: 8px;
  cursor: pointer;
}
option {
  cursor: pointer;
}
option:checked {
  background-color: var(--tieba-theme-color);
  color: var(--default-background);
}
a {
  color: inherit;
  -webkit-text-decoration: none;
  text-decoration: none;
}
.dialogJ {
  position: fixed !important;
  top: 50% !important;
  left: 50% !important;
}
.dialogJ {
  transform: translate(-50%, -50%);
}
#thread-editor .emotion_container .ueditor_emotion_tab .s_prev::before,
#thread-editor .emotion_container .ueditor_emotion_tab .s_next::before {
  font-family: "Material Symbols", monospace;
  font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 40;
  -webkit-user-select: none;
     -moz-user-select: none;
          user-select: none;
}
@keyframes kf-fade-in {
0% {
    opacity: 0;
}
100% {
    opacity: 1;
}
}
@keyframes kf-fade-out {
0% {
    opacity: 1;
}
100% {
    opacity: 0;
}
}
@keyframes kf-dialog-in {
0% {
    opacity: 0;
    transform: scale(1.2);
}
100% {
    opacity: 1;
    transform: scale(1);
}
}
@keyframes kf-zoom-in {
0% {
    transform: scale(0.72);
}
100% {
    transform: scale(1);
}
}
@keyframes kf-fade-zoom-in {
0% {
    opacity: 0;
    transform: scale(0.72);
}
100% {
    opacity: 1;
    transform: scale(1);
}
}
#thread-editor .emotion_container .ueditor_emotion_tab .s_prev,
#thread-editor .emotion_container .ueditor_emotion_tab .s_next {
  box-sizing: border-box;
  padding: 2px 8px;
  border: none;
  border-radius: 6px;
  background: none;
  background-color: var(--default-background);
  box-shadow: 0 0 0 1px var(--border-color);
  color: var(--default-fore);
  cursor: pointer;
  transition: 0.4s;
}
#thread-editor .emotion_container .ueditor_emotion_tab .theme-style.s_prev,
#thread-editor .emotion_container .ueditor_emotion_tab .theme-style.s_next {
  color: var(--default-background) !important;
}
#thread-editor .emotion_container .ueditor_emotion_tab .theme-style.s_prev,
#thread-editor .emotion_container .ueditor_emotion_tab .theme-style.s_next {
  background-color: var(--tieba-theme-color);
}
#thread-editor .emotion_container .ueditor_emotion_tab .theme-style.s_prev:hover,
#thread-editor .emotion_container .ueditor_emotion_tab .theme-style.s_next:hover {
  background-color: var(--tieba-theme-hover);
}
#thread-editor .emotion_container .ueditor_emotion_tab .theme-style.s_prev:active,
#thread-editor .emotion_container .ueditor_emotion_tab .theme-style.s_next:active {
  background-color: var(--tieba-theme-active);
}
#thread-editor .emotion_container .ueditor_emotion_tab .unset-background.s_prev,
#thread-editor .emotion_container .ueditor_emotion_tab .unset-background.s_next {
  background-color: transparent;
  background-color: initial;
}
#thread-editor .emotion_container .ueditor_emotion_tab .no-border.s_prev,
#thread-editor .emotion_container .ueditor_emotion_tab .no-border.s_next {
  box-shadow: none;
}
#thread-editor .emotion_container .ueditor_emotion_tab .no-border-all.s_prev,
#thread-editor .emotion_container .ueditor_emotion_tab .no-border-all.s_next {
  box-shadow: none;
}
#thread-editor .emotion_container .ueditor_emotion_tab .no-border-all.s_prev:hover,
#thread-editor .emotion_container .ueditor_emotion_tab .no-border-all.s_next:hover, #thread-editor .emotion_container .ueditor_emotion_tab .no-border-all.s_prev:focus,
#thread-editor .emotion_container .ueditor_emotion_tab .no-border-all.s_next:focus {
  box-shadow: none;
}
#thread-editor .emotion_container .ueditor_emotion_tab .s_prev:hover,
#thread-editor .emotion_container .ueditor_emotion_tab .s_next:hover {
  background-color: var(--default-hover);
}
#thread-editor .emotion_container .ueditor_emotion_tab .s_prev:active,
#thread-editor .emotion_container .ueditor_emotion_tab .s_next:active {
  background-color: var(--default-active);
}
#thread-editor .emotion_container .ueditor_emotion_tab .s_prev:focus,
#thread-editor .emotion_container .ueditor_emotion_tab .s_next:focus {
  border-color: var(--tieba-theme-color);
  box-shadow: 0 0 0 2px var(--tieba-theme-color);
}
#thread-editor .emotion_container .tbui_scroll_panel {
  overflow: hidden;
  border-radius: 4px 4px 0 0;
}
html.dark-theme #thread-editor .emotion_container td, html.dark-theme #thread-editor .emotion_container .emotion_preview {
  filter: brightness(0.8);
}
#thread-editor .emotion_container .emotion_preview {
  border: 1px solid var(--border-color);
  border-radius: 6px;
  box-shadow: 0 0 10px rgba(0, 0, 0, 0.01);
}
html.dark-theme #thread-editor .emotion_container .emotion_preview {
  box-shadow: 0 0 16px rgba(0, 0, 0, 0.2);
}
#thread-editor .emotion_container .ueditor_emotion_tab {
  display: flex;
  align-items: center;
  justify-content: space-evenly;
  border-top: 2px solid var(--border-color);
  background: none;
  background-color: var(--default-background);
  color: var(--default-fore);
}
#thread-editor .emotion_container .ueditor_emotion_tab .s_prev,
#thread-editor .emotion_container .ueditor_emotion_tab .s_next {
  width: -moz-max-content !important;
  width: max-content !important;
  height: -moz-max-content !important;
  height: max-content !important;
}
#thread-editor .emotion_container .ueditor_emotion_tab .s_prev,
#thread-editor .emotion_container .ueditor_emotion_tab .s_next {
  position: static;
  padding: 0 2px;
  background: none;
  box-shadow: none;
}
#thread-editor .emotion_container .ueditor_emotion_tab .s_prev::before,
#thread-editor .emotion_container .ueditor_emotion_tab .s_next::before {
  font-size: 10px;
}
#thread-editor .emotion_container .ueditor_emotion_tab .s_prev::before {
  content: "arrow_back_ios";
}
#thread-editor .emotion_container .ueditor_emotion_tab .s_next::before {
  content: "arrow_forward_ios";
}
#thread-editor .emotion_container .ueditor_emotion_tab .s_tab_con_wrapper {
  position: static;
}
#thread-editor .emotion_container .ueditor_emotion_tab .s_tab_con_wrapper .s_tab_btn {
  border-radius: 4px;
  background: none;
  background-color: var(--default-background);
}
#thread-editor .emotion_container .ueditor_emotion_tab .s_tab_con_wrapper .s_tab_btn .s_tab_btnbg {
  border-radius: 4px;
  background: none;
  transition: 0.4s;
}
#thread-editor .emotion_container .ueditor_emotion_tab .s_tab_con_wrapper .s_hover {
  filter: brightness(1.2);
}
#thread-editor .emotion_container .ueditor_emotion_tab .s_tab_con_wrapper .s_hover .s_tab_btnbg {
  filter: brightness(1.4);
}
#thread-editor .emotion_container .ueditor_emotion_tab .s_tab_con_wrapper .selected {
  background: none;
}
#thread-editor .emotion_container .ueditor_emotion_tab .s_tab_con_wrapper .selected .s_tab_btnbg {
  background-color: var(--tieba-theme-color);
  color: var(--default-background);
  font-weight: bold;
}html[data-v-521b9a21] {
  padding: 0;
  margin: 0;
  text-align: justify;
}
body[data-v-521b9a21] {
  padding: 0;
  margin: 0;
  font-family: var(--code-zh);
}
body[no-scrollbar][data-v-521b9a21] {
  overflow: hidden;
}
div[data-v-521b9a21],
p[data-v-521b9a21] {
  margin: 0;
}
select[data-v-521b9a21] {
  padding: 1px 8px;
  border: 1px solid var(--border-color);
  border-radius: 8px;
  cursor: pointer;
}
option[data-v-521b9a21] {
  cursor: pointer;
}
option[data-v-521b9a21]:checked {
  background-color: var(--tieba-theme-color);
  color: var(--default-background);
}
a[data-v-521b9a21] {
  color: inherit;
  -webkit-text-decoration: none;
  text-decoration: none;
}
.dialogJ[data-v-521b9a21] {
  position: fixed !important;
  top: 50% !important;
  left: 50% !important;
}
.dialogJ[data-v-521b9a21] {
  transform: translate(-50%, -50%);
}
.toggle-panel[data-v-521b9a21] {
  display: flex;
  overflow: hidden;
  max-width: 60vh;
  max-height: 60vh;
  box-sizing: border-box;
  flex-direction: column;
  padding: 12px;
  border: 1px solid var(--light-border-color);
  border-radius: 16px;
  margin: auto;
  animation: kf-dialog-in 0.4s ease;
  background-color: var(--default-background);
  box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
  color: var(--default-fore);
  transition: 0.4s ease;
}
.toggle-panel .toggle-wrapper[data-v-521b9a21] {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 8px;
}
.toggle-panel .toggle-wrapper .toggle-container[data-v-521b9a21] {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
}
.toggle-panel .toggle-wrapper .toggle-container .panel-button[data-v-521b9a21] {
  width: 58px;
  height: 58px;
  border-radius: 12px;
  font-size: 24px;
}
.toggle-panel .toggle-wrapper .toggle-container .panel-button.toggle-off[data-v-521b9a21] {
  color: var(--minimal-fore);
}
.toggle-panel .toggle-wrapper .toggle-container .panel-button.toggle-on[data-v-521b9a21]:focus {
  box-shadow: 0 0 0 1px var(--tieba-theme-color);
}
.toggle-panel .toggle-wrapper .toggle-container .toggle-name[data-v-521b9a21] {
  color: var(--light-fore);
}html[data-v-00bee924] {
  padding: 0;
  margin: 0;
  text-align: justify;
}
body[data-v-00bee924] {
  padding: 0;
  margin: 0;
  font-family: var(--code-zh);
}
body[no-scrollbar][data-v-00bee924] {
  overflow: hidden;
}
div[data-v-00bee924],
p[data-v-00bee924] {
  margin: 0;
}
select[data-v-00bee924] {
  padding: 1px 8px;
  border: 1px solid var(--border-color);
  border-radius: 8px;
  cursor: pointer;
}
option[data-v-00bee924] {
  cursor: pointer;
}
option[data-v-00bee924]:checked {
  background-color: var(--tieba-theme-color);
  color: var(--default-background);
}
a[data-v-00bee924] {
  color: inherit;
  -webkit-text-decoration: none;
  text-decoration: none;
}
.dialogJ[data-v-00bee924] {
  position: fixed !important;
  top: 50% !important;
  left: 50% !important;
}
.dialogJ[data-v-00bee924] {
  transform: translate(-50%, -50%);
}
@keyframes kf-fade-in-00bee924 {
0% {
    opacity: 0;
}
100% {
    opacity: 1;
}
}
@keyframes kf-fade-out-00bee924 {
0% {
    opacity: 1;
}
100% {
    opacity: 0;
}
}
@keyframes kf-dialog-in-00bee924 {
0% {
    opacity: 0;
    transform: scale(1.2);
}
100% {
    opacity: 1;
    transform: scale(1);
}
}
@keyframes kf-zoom-in-00bee924 {
0% {
    transform: scale(0.72);
}
100% {
    transform: scale(1);
}
}
@keyframes kf-fade-zoom-in-00bee924 {
0% {
    opacity: 0;
    transform: scale(0.72);
}
100% {
    opacity: 1;
    transform: scale(1);
}
}
@keyframes stretch-00bee924 {
0% {
    padding: 2px 14px;
}
100% {
    padding: 4px 14px;
}
}
a[data-v-00bee924] {
  color: inherit;
}
.dropdown-menu[data-v-00bee924] {
  position: fixed;
  z-index: 1;
  display: flex;
  overflow: hidden;
  width: -moz-max-content;
  width: max-content;
  min-width: 120px;
  flex-direction: column;
  padding: 4px;
  border: 1px solid var(--border-color);
  border-radius: 8px;
  background-color: var(--default-background);
  box-shadow: 0 0 20px rgba(0, 0, 0, 0.08);
  font-size: 14px;
  animation: kf-fade-in-00bee924 0.1s;
}
.dropdown-menu .menu-item[data-v-00bee924] {
  display: flex;
  width: 100%;
  align-items: center;
  padding: 4px 14px;
  border: none;
  border-radius: 6px;
  animation: stretch-00bee924 0.1s cubic-bezier(0.22, 0.61, 0.36, 1);
  background: none;
  color: var(--default-fore);
  gap: 6px;
  transition: 0.2s;
}
.dropdown-menu .menu-item .menu-title[data-v-00bee924] {
  display: flex;
  width: 100%;
  gap: 12px;
  text-align: justify;
}
.dropdown-menu .menu-item .menu-title .menu-inner[data-v-00bee924] {
  margin-left: auto;
  color: var(--minimal-fore);
}
.dropdown-menu .menu-item[data-v-00bee924]:hover {
  background-color: var(--default-hover);
}
.dropdown-menu .menu-item[data-v-00bee924]:active {
  background-color: var(--default-active);
}
.dropdown-menu .menu-separator[data-v-00bee924] {
  width: calc(100% + 8px);
  height: 1px;
  margin: 6px 0 6px -4px;
  background-color: var(--border-color);
}
.blur-effect[data-v-00bee924] {
  background-color: var(--trans-default-background);
  -webkit-backdrop-filter: blur(24px);
          backdrop-filter: blur(24px);
}
html.dark-theme .blur-effect[data-v-00bee924] {
  -webkit-backdrop-filter: blur(24px) brightness(0.8);
          backdrop-filter: blur(24px) brightness(0.8);
}html[data-v-18e85ac3] {
  padding: 0;
  margin: 0;
  text-align: justify;
}
body[data-v-18e85ac3] {
  padding: 0;
  margin: 0;
  font-family: var(--code-zh);
}
body[no-scrollbar][data-v-18e85ac3] {
  overflow: hidden;
}
div[data-v-18e85ac3],
p[data-v-18e85ac3] {
  margin: 0;
}
select[data-v-18e85ac3] {
  padding: 1px 8px;
  border: 1px solid var(--border-color);
  border-radius: 8px;
  cursor: pointer;
}
option[data-v-18e85ac3] {
  cursor: pointer;
}
option[data-v-18e85ac3]:checked {
  background-color: var(--tieba-theme-color);
  color: var(--default-background);
}
a[data-v-18e85ac3] {
  color: inherit;
  -webkit-text-decoration: none;
  text-decoration: none;
}
.dialogJ[data-v-18e85ac3] {
  position: fixed !important;
  top: 50% !important;
  left: 50% !important;
}
.dialogJ[data-v-18e85ac3] {
  transform: translate(-50%, -50%);
}
@keyframes kf-fade-in-18e85ac3 {
0% {
    opacity: 0;
}
100% {
    opacity: 1;
}
}
@keyframes kf-fade-out-18e85ac3 {
0% {
    opacity: 1;
}
100% {
    opacity: 0;
}
}
@keyframes kf-dialog-in-18e85ac3 {
0% {
    opacity: 0;
    transform: scale(1.2);
}
100% {
    opacity: 1;
    transform: scale(1);
}
}
@keyframes kf-zoom-in-18e85ac3 {
0% {
    transform: scale(0.72);
}
100% {
    transform: scale(1);
}
}
@keyframes kf-fade-zoom-in-18e85ac3 {
0% {
    opacity: 0;
    transform: scale(0.72);
}
100% {
    opacity: 1;
    transform: scale(1);
}
}
#nav-bar[data-v-18e85ac3] {
  position: fixed;
  z-index: 1200;
  top: 0;
  left: 0;
  display: flex;
  width: 100vw;
  height: 48px;
  box-sizing: border-box;
  align-items: center;
  justify-content: space-around;
  padding: 4px;
  border-bottom: 1px solid var(--border-color);
  background-color: var(--trans-page-background);
  -webkit-backdrop-filter: blur(24px);
          backdrop-filter: blur(24px);
  box-shadow: 0 10px 10px rgba(0, 0, 0, 0.01);
}
html.dark-theme #nav-bar[data-v-18e85ac3] {
  -webkit-backdrop-filter: blur(24px) brightness(0.8);
          backdrop-filter: blur(24px) brightness(0.8);
}
html.dark-theme #nav-bar[data-v-18e85ac3] {
  box-shadow: 0 10px 16px rgba(0, 0, 0, 0.2);
}
#nav-bar .nav-button[data-v-18e85ac3]:not(:hover):not(:active):not(:focus) {
  background-color: rgba(0, 0, 0, 0);
}
#nav-bar .left-container .nav-title-container[data-v-18e85ac3] {
  display: flex;
  align-items: center;
  border: none;
  background: none;
  gap: 8px;
  -webkit-text-decoration: underline 3px var(--tieba-theme-color);
          text-decoration: underline 3px var(--tieba-theme-color);
}
#nav-bar .left-container .nav-title-container .nav-icon[data-v-18e85ac3] {
  width: 36px;
}
#nav-bar .left-container .nav-title-container .nav-title[data-v-18e85ac3] {
  color: var(--default-fore);
  font-size: 20px;
  font-style: italic;
  font-weight: bold;
  transition: 0.2s;
}
#nav-bar .left-container .nav-title-container:hover .nav-title[data-v-18e85ac3], #nav-bar .left-container .nav-title-container:active .nav-title[data-v-18e85ac3], #nav-bar .left-container .nav-title-container:focus .nav-title[data-v-18e85ac3] {
  color: var(--highlight-fore);
}
#nav-bar .middle-container[data-v-18e85ac3] {
  display: flex;
  height: 100%;
  justify-content: center;
}
#nav-bar .middle-container .middle-menu-container[data-v-18e85ac3] {
  height: 100%;
  padding: 0 10px;
  border: none;
  background: none;
  color: var(--default-fore);
  font-size: 15px;
  font-weight: bold;
  text-decoration: underline;
  -webkit-text-decoration: underline solid rgba(0, 0, 0, 0);
          text-decoration: underline solid rgba(0, 0, 0, 0);
  text-decoration-thickness: 2px;
  -webkit-text-decoration: underline 2px rgba(0, 0, 0, 0);
          text-decoration: underline 2px rgba(0, 0, 0, 0);
}
#nav-bar .middle-container .middle-menu-container[data-v-18e85ac3]:hover {
  -webkit-text-decoration: underline 2px var(--tieba-theme-color);
          text-decoration: underline 2px var(--tieba-theme-color);
}
#nav-bar .right-container[data-v-18e85ac3] {
  display: flex;
  align-items: center;
  gap: 8px;
}
#nav-bar .right-container .avatar-button[data-v-18e85ac3] {
  width: 32px;
  height: 32px;
  padding: 0;
  border: 4px;
  border-radius: 32px;
}
#nav-bar .right-container .avatar-button .nav-avatar[data-v-18e85ac3] {
  width: 100%;
  border-radius: 24px;
}
#nav-bar .right-container .nav-menu[data-v-18e85ac3] {
  padding: 2px 8px;
  border: none;
  border-radius: 24px;
  color: var(--highlight-fore);
  font-size: 26px;
}
#nav-bar .right-container .nav-menu[data-v-18e85ac3]:not(:active):not(:focus) {
  box-shadow: none;
}
.menu-container:hover > .dropdown-menu[data-v-18e85ac3],
.menu-container:active > .dropdown-menu[data-v-18e85ac3] {
  display: block;
  animation: kf-fade-in-18e85ac3 0.2s;
}
.dropdown-menu[data-v-18e85ac3] {
  z-index: 1201;
  display: none;
  cursor: default;
  font-weight: normal;
  animation: kf-fade-out-18e85ac3 0.2s;
}.shield-container[data-v-bb897aee] {
  display: flex;
  width: 100%;
  flex-direction: column;
  gap: 16px;
}
.shield-container .words-container[data-v-bb897aee] {
  display: flex;
  flex-wrap: wrap;
  padding: 12px;
  border-radius: 12px;
  background-color: var(--trans-light-background);
  gap: 4px;
}
.shield-container .words-container .shield-elem[data-v-bb897aee] {
  display: flex;
  align-items: center;
  padding: 4px 8px;
  border: none;
  border-radius: 8px;
  font-size: 14px;
  gap: 4px;
}
.shield-container .words-container .shield-elem .icon[data-v-bb897aee] {
  color: var(--light-fore);
}
.shield-container .words-container .remove-all[data-v-bb897aee] {
  background-color: #d62929;
  color: var(--default-background);
  font-variation-settings: "FILL" 0;
}
.shield-container .empty-list-container[data-v-bb897aee] {
  color: var(--minimal-fore);
}
.shield-container .shield-controls[data-v-bb897aee] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.shield-container .shield-controls .shield-input[data-v-bb897aee] {
  width: 100%;
  height: auto;
  max-height: 6em;
  box-sizing: border-box;
  padding: 6px;
  font-size: 16px;
  resize: none;
}
.shield-container .shield-controls .submit-controls[data-v-bb897aee] {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 12px;
}
.shield-container .shield-controls .submit-controls label[data-v-bb897aee] {
  margin-left: 4px;
  -webkit-user-select: none;
     -moz-user-select: none;
          user-select: none;
}
.shield-container .shield-controls .submit-controls .regex-check[data-v-bb897aee] {
  margin-right: 8px;
  font-size: 16px;
}
.shield-container .shield-controls .submit-controls .submit-button[data-v-bb897aee] {
  padding: 4px 12px;
  font-size: 14px;
  font-weight: bold;
} `);

(function () {
  'use strict';

  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);
    return value;
  };
  (function(vue, elementPlus, marked2) {
    const cssLoader = (e) => {
      const t = GM_getResourceText(e);
      return GM_addStyle(t), t;
    };
    cssLoader("element-plus/dist/index.css");
    var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
    var freeSelf = typeof self == "object" && self && self.Object === Object && self;
    var root = freeGlobal || freeSelf || Function("return this")();
    var Symbol$1 = root.Symbol;
    var objectProto$g = Object.prototype;
    var hasOwnProperty$d = objectProto$g.hasOwnProperty;
    var nativeObjectToString$1 = objectProto$g.toString;
    var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : void 0;
    function getRawTag(value) {
      var isOwn = hasOwnProperty$d.call(value, symToStringTag$1), tag = value[symToStringTag$1];
      try {
        value[symToStringTag$1] = void 0;
        var unmasked = true;
      } catch (e) {
      }
      var result = nativeObjectToString$1.call(value);
      if (unmasked) {
        if (isOwn) {
          value[symToStringTag$1] = tag;
        } else {
          delete value[symToStringTag$1];
        }
      }
      return result;
    }
    var objectProto$f = Object.prototype;
    var nativeObjectToString = objectProto$f.toString;
    function objectToString(value) {
      return nativeObjectToString.call(value);
    }
    var nullTag = "[object Null]", undefinedTag = "[object Undefined]";
    var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : void 0;
    function baseGetTag(value) {
      if (value == null) {
        return value === void 0 ? undefinedTag : nullTag;
      }
      return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);
    }
    function isObjectLike(value) {
      return value != null && typeof value == "object";
    }
    var symbolTag$1 = "[object Symbol]";
    function isSymbol(value) {
      return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag$1;
    }
    function arrayMap(array, iteratee) {
      var index2 = -1, length = array == null ? 0 : array.length, result = Array(length);
      while (++index2 < length) {
        result[index2] = iteratee(array[index2], index2, array);
      }
      return result;
    }
    var isArray = Array.isArray;
    var INFINITY$3 = 1 / 0;
    var symbolProto$1 = Symbol$1 ? Symbol$1.prototype : void 0, symbolToString = symbolProto$1 ? symbolProto$1.toString : void 0;
    function baseToString(value) {
      if (typeof value == "string") {
        return value;
      }
      if (isArray(value)) {
        return arrayMap(value, baseToString) + "";
      }
      if (isSymbol(value)) {
        return symbolToString ? symbolToString.call(value) : "";
      }
      var result = value + "";
      return result == "0" && 1 / value == -INFINITY$3 ? "-0" : result;
    }
    var reWhitespace = /\s/;
    function trimmedEndIndex(string) {
      var index2 = string.length;
      while (index2-- && reWhitespace.test(string.charAt(index2))) {
      }
      return index2;
    }
    var reTrimStart$1 = /^\s+/;
    function baseTrim(string) {
      return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart$1, "") : string;
    }
    function isObject(value) {
      var type = typeof value;
      return value != null && (type == "object" || type == "function");
    }
    var NAN = 0 / 0;
    var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
    var reIsBinary = /^0b[01]+$/i;
    var reIsOctal = /^0o[0-7]+$/i;
    var freeParseInt = parseInt;
    function toNumber(value) {
      if (typeof value == "number") {
        return value;
      }
      if (isSymbol(value)) {
        return NAN;
      }
      if (isObject(value)) {
        var other = typeof value.valueOf == "function" ? value.valueOf() : value;
        value = isObject(other) ? other + "" : other;
      }
      if (typeof value != "string") {
        return value === 0 ? value : +value;
      }
      value = baseTrim(value);
      var isBinary = reIsBinary.test(value);
      return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
    }
    var INFINITY$2 = 1 / 0, MAX_INTEGER = 17976931348623157e292;
    function toFinite(value) {
      if (!value) {
        return value === 0 ? value : 0;
      }
      value = toNumber(value);
      if (value === INFINITY$2 || value === -INFINITY$2) {
        var sign = value < 0 ? -1 : 1;
        return sign * MAX_INTEGER;
      }
      return value === value ? value : 0;
    }
    function toInteger(value) {
      var result = toFinite(value), remainder = result % 1;
      return result === result ? remainder ? result - remainder : result : 0;
    }
    function identity(value) {
      return value;
    }
    var asyncTag = "[object AsyncFunction]", funcTag$1 = "[object Function]", genTag = "[object GeneratorFunction]", proxyTag = "[object Proxy]";
    function isFunction(value) {
      if (!isObject(value)) {
        return false;
      }
      var tag = baseGetTag(value);
      return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag;
    }
    var coreJsData = root["__core-js_shared__"];
    var maskSrcKey = function() {
      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || "");
      return uid ? "Symbol(src)_1." + uid : "";
    }();
    function isMasked(func) {
      return !!maskSrcKey && maskSrcKey in func;
    }
    var funcProto$2 = Function.prototype;
    var funcToString$2 = funcProto$2.toString;
    function toSource(func) {
      if (func != null) {
        try {
          return funcToString$2.call(func);
        } catch (e) {
        }
        try {
          return func + "";
        } catch (e) {
        }
      }
      return "";
    }
    var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
    var reIsHostCtor = /^\[object .+?Constructor\]$/;
    var funcProto$1 = Function.prototype, objectProto$e = Object.prototype;
    var funcToString$1 = funcProto$1.toString;
    var hasOwnProperty$c = objectProto$e.hasOwnProperty;
    var reIsNative = RegExp(
      "^" + funcToString$1.call(hasOwnProperty$c).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
    );
    function baseIsNative(value) {
      if (!isObject(value) || isMasked(value)) {
        return false;
      }
      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
      return pattern.test(toSource(value));
    }
    function getValue(object, key) {
      return object == null ? void 0 : object[key];
    }
    function getNative(object, key) {
      var value = getValue(object, key);
      return baseIsNative(value) ? value : void 0;
    }
    var WeakMap = getNative(root, "WeakMap");
    var objectCreate = Object.create;
    var baseCreate = /* @__PURE__ */ function() {
      function object() {
      }
      return function(proto) {
        if (!isObject(proto)) {
          return {};
        }
        if (objectCreate) {
          return objectCreate(proto);
        }
        object.prototype = proto;
        var result = new object();
        object.prototype = void 0;
        return result;
      };
    }();
    function apply(func, thisArg, args) {
      switch (args.length) {
        case 0:
          return func.call(thisArg);
        case 1:
          return func.call(thisArg, args[0]);
        case 2:
          return func.call(thisArg, args[0], args[1]);
        case 3:
          return func.call(thisArg, args[0], args[1], args[2]);
      }
      return func.apply(thisArg, args);
    }
    function copyArray(source, array) {
      var index2 = -1, length = source.length;
      array || (array = Array(length));
      while (++index2 < length) {
        array[index2] = source[index2];
      }
      return array;
    }
    var HOT_COUNT = 800, HOT_SPAN = 16;
    var nativeNow = Date.now;
    function shortOut(func) {
      var count = 0, lastCalled = 0;
      return function() {
        var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);
        lastCalled = stamp;
        if (remaining > 0) {
          if (++count >= HOT_COUNT) {
            return arguments[0];
          }
        } else {
          count = 0;
        }
        return func.apply(void 0, arguments);
      };
    }
    function constant(value) {
      return function() {
        return value;
      };
    }
    var defineProperty = function() {
      try {
        var func = getNative(Object, "defineProperty");
        func({}, "", {});
        return func;
      } catch (e) {
      }
    }();
    var baseSetToString = !defineProperty ? identity : function(func, string) {
      return defineProperty(func, "toString", {
        "configurable": true,
        "enumerable": false,
        "value": constant(string),
        "writable": true
      });
    };
    const baseSetToString$1 = baseSetToString;
    var setToString = shortOut(baseSetToString$1);
    function arrayEach(array, iteratee) {
      var index2 = -1, length = array == null ? 0 : array.length;
      while (++index2 < length) {
        if (iteratee(array[index2], index2, array) === false) {
          break;
        }
      }
      return array;
    }
    function baseFindIndex(array, predicate, fromIndex, fromRight) {
      var length = array.length, index2 = fromIndex + (fromRight ? 1 : -1);
      while (fromRight ? index2-- : ++index2 < length) {
        if (predicate(array[index2], index2, array)) {
          return index2;
        }
      }
      return -1;
    }
    function baseIsNaN(value) {
      return value !== value;
    }
    function strictIndexOf(array, value, fromIndex) {
      var index2 = fromIndex - 1, length = array.length;
      while (++index2 < length) {
        if (array[index2] === value) {
          return index2;
        }
      }
      return -1;
    }
    function baseIndexOf(array, value, fromIndex) {
      return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex);
    }
    var MAX_SAFE_INTEGER$2 = 9007199254740991;
    var reIsUint = /^(?:0|[1-9]\d*)$/;
    function isIndex(value, length) {
      var type = typeof value;
      length = length == null ? MAX_SAFE_INTEGER$2 : length;
      return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);
    }
    function baseAssignValue(object, key, value) {
      if (key == "__proto__" && defineProperty) {
        defineProperty(object, key, {
          "configurable": true,
          "enumerable": true,
          "value": value,
          "writable": true
        });
      } else {
        object[key] = value;
      }
    }
    function eq(value, other) {
      return value === other || value !== value && other !== other;
    }
    var objectProto$d = Object.prototype;
    var hasOwnProperty$b = objectProto$d.hasOwnProperty;
    function assignValue(object, key, value) {
      var objValue = object[key];
      if (!(hasOwnProperty$b.call(object, key) && eq(objValue, value)) || value === void 0 && !(key in object)) {
        baseAssignValue(object, key, value);
      }
    }
    function copyObject(source, props, object, customizer) {
      var isNew = !object;
      object || (object = {});
      var index2 = -1, length = props.length;
      while (++index2 < length) {
        var key = props[index2];
        var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0;
        if (newValue === void 0) {
          newValue = source[key];
        }
        if (isNew) {
          baseAssignValue(object, key, newValue);
        } else {
          assignValue(object, key, newValue);
        }
      }
      return object;
    }
    var nativeMax$5 = Math.max;
    function overRest(func, start, transform) {
      start = nativeMax$5(start === void 0 ? func.length - 1 : start, 0);
      return function() {
        var args = arguments, index2 = -1, length = nativeMax$5(args.length - start, 0), array = Array(length);
        while (++index2 < length) {
          array[index2] = args[start + index2];
        }
        index2 = -1;
        var otherArgs = Array(start + 1);
        while (++index2 < start) {
          otherArgs[index2] = args[index2];
        }
        otherArgs[start] = transform(array);
        return apply(func, this, otherArgs);
      };
    }
    function baseRest(func, start) {
      return setToString(overRest(func, start, identity), func + "");
    }
    var MAX_SAFE_INTEGER$1 = 9007199254740991;
    function isLength(value) {
      return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1;
    }
    function isArrayLike(value) {
      return value != null && isLength(value.length) && !isFunction(value);
    }
    function isIterateeCall(value, index2, object) {
      if (!isObject(object)) {
        return false;
      }
      var type = typeof index2;
      if (type == "number" ? isArrayLike(object) && isIndex(index2, object.length) : type == "string" && index2 in object) {
        return eq(object[index2], value);
      }
      return false;
    }
    function createAssigner(assigner) {
      return baseRest(function(object, sources) {
        var index2 = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0;
        customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : void 0;
        if (guard && isIterateeCall(sources[0], sources[1], guard)) {
          customizer = length < 3 ? void 0 : customizer;
          length = 1;
        }
        object = Object(object);
        while (++index2 < length) {
          var source = sources[index2];
          if (source) {
            assigner(object, source, index2, customizer);
          }
        }
        return object;
      });
    }
    var objectProto$c = Object.prototype;
    function isPrototype(value) {
      var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto$c;
      return value === proto;
    }
    function baseTimes(n, iteratee) {
      var index2 = -1, result = Array(n);
      while (++index2 < n) {
        result[index2] = iteratee(index2);
      }
      return result;
    }
    var argsTag$2 = "[object Arguments]";
    function baseIsArguments(value) {
      return isObjectLike(value) && baseGetTag(value) == argsTag$2;
    }
    var objectProto$b = Object.prototype;
    var hasOwnProperty$a = objectProto$b.hasOwnProperty;
    var propertyIsEnumerable$1 = objectProto$b.propertyIsEnumerable;
    var isArguments = baseIsArguments(/* @__PURE__ */ function() {
      return arguments;
    }()) ? baseIsArguments : function(value) {
      return isObjectLike(value) && hasOwnProperty$a.call(value, "callee") && !propertyIsEnumerable$1.call(value, "callee");
    };
    function stubFalse() {
      return false;
    }
    var freeExports$2 = typeof exports == "object" && exports && !exports.nodeType && exports;
    var freeModule$2 = freeExports$2 && typeof module == "object" && module && !module.nodeType && module;
    var moduleExports$2 = freeModule$2 && freeModule$2.exports === freeExports$2;
    var Buffer$1 = moduleExports$2 ? root.Buffer : void 0;
    var nativeIsBuffer = Buffer$1 ? Buffer$1.isBuffer : void 0;
    var isBuffer = nativeIsBuffer || stubFalse;
    var argsTag$1 = "[object Arguments]", arrayTag$1 = "[object Array]", boolTag$1 = "[object Boolean]", dateTag$1 = "[object Date]", errorTag$1 = "[object Error]", funcTag = "[object Function]", mapTag$2 = "[object Map]", numberTag$1 = "[object Number]", objectTag$3 = "[object Object]", regexpTag$2 = "[object RegExp]", setTag$2 = "[object Set]", stringTag$2 = "[object String]", weakMapTag$1 = "[object WeakMap]";
    var arrayBufferTag$1 = "[object ArrayBuffer]", dataViewTag$2 = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]";
    var typedArrayTags = {};
    typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
    typedArrayTags[argsTag$1] = typedArrayTags[arrayTag$1] = typedArrayTags[arrayBufferTag$1] = typedArrayTags[boolTag$1] = typedArrayTags[dataViewTag$2] = typedArrayTags[dateTag$1] = typedArrayTags[errorTag$1] = typedArrayTags[funcTag] = typedArrayTags[mapTag$2] = typedArrayTags[numberTag$1] = typedArrayTags[objectTag$3] = typedArrayTags[regexpTag$2] = typedArrayTags[setTag$2] = typedArrayTags[stringTag$2] = typedArrayTags[weakMapTag$1] = false;
    function baseIsTypedArray(value) {
      return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
    }
    function baseUnary(func) {
      return function(value) {
        return func(value);
      };
    }
    var freeExports$1 = typeof exports == "object" && exports && !exports.nodeType && exports;
    var freeModule$1 = freeExports$1 && typeof module == "object" && module && !module.nodeType && module;
    var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1;
    var freeProcess = moduleExports$1 && freeGlobal.process;
    var nodeUtil = function() {
      try {
        var types = freeModule$1 && freeModule$1.require && freeModule$1.require("util").types;
        if (types) {
          return types;
        }
        return freeProcess && freeProcess.binding && freeProcess.binding("util");
      } catch (e) {
      }
    }();
    var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
    var objectProto$a = Object.prototype;
    var hasOwnProperty$9 = objectProto$a.hasOwnProperty;
    function arrayLikeKeys(value, inherited) {
      var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length;
      for (var key in value) {
        if ((inherited || hasOwnProperty$9.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.
        (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
        isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
        isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
        isIndex(key, length)))) {
          result.push(key);
        }
      }
      return result;
    }
    function overArg(func, transform) {
      return function(arg) {
        return func(transform(arg));
      };
    }
    var nativeKeys = overArg(Object.keys, Object);
    var objectProto$9 = Object.prototype;
    var hasOwnProperty$8 = objectProto$9.hasOwnProperty;
    function baseKeys(object) {
      if (!isPrototype(object)) {
        return nativeKeys(object);
      }
      var result = [];
      for (var key in Object(object)) {
        if (hasOwnProperty$8.call(object, key) && key != "constructor") {
          result.push(key);
        }
      }
      return result;
    }
    function keys(object) {
      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
    }
    var objectProto$8 = Object.prototype;
    var hasOwnProperty$7 = objectProto$8.hasOwnProperty;
    var assign = createAssigner(function(object, source) {
      if (isPrototype(source) || isArrayLike(source)) {
        copyObject(source, keys(source), object);
        return;
      }
      for (var key in source) {
        if (hasOwnProperty$7.call(source, key)) {
          assignValue(object, key, source[key]);
        }
      }
    });
    const assign$1 = assign;
    function nativeKeysIn(object) {
      var result = [];
      if (object != null) {
        for (var key in Object(object)) {
          result.push(key);
        }
      }
      return result;
    }
    var objectProto$7 = Object.prototype;
    var hasOwnProperty$6 = objectProto$7.hasOwnProperty;
    function baseKeysIn(object) {
      if (!isObject(object)) {
        return nativeKeysIn(object);
      }
      var isProto = isPrototype(object), result = [];
      for (var key in object) {
        if (!(key == "constructor" && (isProto || !hasOwnProperty$6.call(object, key)))) {
          result.push(key);
        }
      }
      return result;
    }
    function keysIn(object) {
      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
    }
    var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/;
    function isKey(value, object) {
      if (isArray(value)) {
        return false;
      }
      var type = typeof value;
      if (type == "number" || type == "symbol" || type == "boolean" || value == null || isSymbol(value)) {
        return true;
      }
      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);
    }
    var nativeCreate = getNative(Object, "create");
    function hashClear() {
      this.__data__ = nativeCreate ? nativeCreate(null) : {};
      this.size = 0;
    }
    function hashDelete(key) {
      var result = this.has(key) && delete this.__data__[key];
      this.size -= result ? 1 : 0;
      return result;
    }
    var HASH_UNDEFINED$2 = "__lodash_hash_undefined__";
    var objectProto$6 = Object.prototype;
    var hasOwnProperty$5 = objectProto$6.hasOwnProperty;
    function hashGet(key) {
      var data = this.__data__;
      if (nativeCreate) {
        var result = data[key];
        return result === HASH_UNDEFINED$2 ? void 0 : result;
      }
      return hasOwnProperty$5.call(data, key) ? data[key] : void 0;
    }
    var objectProto$5 = Object.prototype;
    var hasOwnProperty$4 = objectProto$5.hasOwnProperty;
    function hashHas(key) {
      var data = this.__data__;
      return nativeCreate ? data[key] !== void 0 : hasOwnProperty$4.call(data, key);
    }
    var HASH_UNDEFINED$1 = "__lodash_hash_undefined__";
    function hashSet(key, value) {
      var data = this.__data__;
      this.size += this.has(key) ? 0 : 1;
      data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED$1 : value;
      return this;
    }
    function Hash(entries) {
      var index2 = -1, length = entries == null ? 0 : entries.length;
      this.clear();
      while (++index2 < length) {
        var entry = entries[index2];
        this.set(entry[0], entry[1]);
      }
    }
    Hash.prototype.clear = hashClear;
    Hash.prototype["delete"] = hashDelete;
    Hash.prototype.get = hashGet;
    Hash.prototype.has = hashHas;
    Hash.prototype.set = hashSet;
    function listCacheClear() {
      this.__data__ = [];
      this.size = 0;
    }
    function assocIndexOf(array, key) {
      var length = array.length;
      while (length--) {
        if (eq(array[length][0], key)) {
          return length;
        }
      }
      return -1;
    }
    var arrayProto$2 = Array.prototype;
    var splice$1 = arrayProto$2.splice;
    function listCacheDelete(key) {
      var data = this.__data__, index2 = assocIndexOf(data, key);
      if (index2 < 0) {
        return false;
      }
      var lastIndex = data.length - 1;
      if (index2 == lastIndex) {
        data.pop();
      } else {
        splice$1.call(data, index2, 1);
      }
      --this.size;
      return true;
    }
    function listCacheGet(key) {
      var data = this.__data__, index2 = assocIndexOf(data, key);
      return index2 < 0 ? void 0 : data[index2][1];
    }
    function listCacheHas(key) {
      return assocIndexOf(this.__data__, key) > -1;
    }
    function listCacheSet(key, value) {
      var data = this.__data__, index2 = assocIndexOf(data, key);
      if (index2 < 0) {
        ++this.size;
        data.push([key, value]);
      } else {
        data[index2][1] = value;
      }
      return this;
    }
    function ListCache(entries) {
      var index2 = -1, length = entries == null ? 0 : entries.length;
      this.clear();
      while (++index2 < length) {
        var entry = entries[index2];
        this.set(entry[0], entry[1]);
      }
    }
    ListCache.prototype.clear = listCacheClear;
    ListCache.prototype["delete"] = listCacheDelete;
    ListCache.prototype.get = listCacheGet;
    ListCache.prototype.has = listCacheHas;
    ListCache.prototype.set = listCacheSet;
    var Map = getNative(root, "Map");
    function mapCacheClear() {
      this.size = 0;
      this.__data__ = {
        "hash": new Hash(),
        "map": new (Map || ListCache)(),
        "string": new Hash()
      };
    }
    function isKeyable(value) {
      var type = typeof value;
      return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null;
    }
    function getMapData(map2, key) {
      var data = map2.__data__;
      return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
    }
    function mapCacheDelete(key) {
      var result = getMapData(this, key)["delete"](key);
      this.size -= result ? 1 : 0;
      return result;
    }
    function mapCacheGet(key) {
      return getMapData(this, key).get(key);
    }
    function mapCacheHas(key) {
      return getMapData(this, key).has(key);
    }
    function mapCacheSet(key, value) {
      var data = getMapData(this, key), size = data.size;
      data.set(key, value);
      this.size += data.size == size ? 0 : 1;
      return this;
    }
    function MapCache(entries) {
      var index2 = -1, length = entries == null ? 0 : entries.length;
      this.clear();
      while (++index2 < length) {
        var entry = entries[index2];
        this.set(entry[0], entry[1]);
      }
    }
    MapCache.prototype.clear = mapCacheClear;
    MapCache.prototype["delete"] = mapCacheDelete;
    MapCache.prototype.get = mapCacheGet;
    MapCache.prototype.has = mapCacheHas;
    MapCache.prototype.set = mapCacheSet;
    var FUNC_ERROR_TEXT$3 = "Expected a function";
    function memoize(func, resolver) {
      if (typeof func != "function" || resolver != null && typeof resolver != "function") {
        throw new TypeError(FUNC_ERROR_TEXT$3);
      }
      var memoized = function() {
        var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache;
        if (cache.has(key)) {
          return cache.get(key);
        }
        var result = func.apply(this, args);
        memoized.cache = cache.set(key, result) || cache;
        return result;
      };
      memoized.cache = new (memoize.Cache || MapCache)();
      return memoized;
    }
    memoize.Cache = MapCache;
    var MAX_MEMOIZE_SIZE = 500;
    function memoizeCapped(func) {
      var result = memoize(func, function(key) {
        if (cache.size === MAX_MEMOIZE_SIZE) {
          cache.clear();
        }
        return key;
      });
      var cache = result.cache;
      return result;
    }
    var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
    var reEscapeChar = /\\(\\)?/g;
    var stringToPath = memoizeCapped(function(string) {
      var result = [];
      if (string.charCodeAt(0) === 46) {
        result.push("");
      }
      string.replace(rePropName, function(match, number, quote, subString) {
        result.push(quote ? subString.replace(reEscapeChar, "$1") : number || match);
      });
      return result;
    });
    function toString(value) {
      return value == null ? "" : baseToString(value);
    }
    function castPath(value, object) {
      if (isArray(value)) {
        return value;
      }
      return isKey(value, object) ? [value] : stringToPath(toString(value));
    }
    var INFINITY$1 = 1 / 0;
    function toKey(value) {
      if (typeof value == "string" || isSymbol(value)) {
        return value;
      }
      var result = value + "";
      return result == "0" && 1 / value == -INFINITY$1 ? "-0" : result;
    }
    function baseGet(object, path) {
      path = castPath(path, object);
      var index2 = 0, length = path.length;
      while (object != null && index2 < length) {
        object = object[toKey(path[index2++])];
      }
      return index2 && index2 == length ? object : void 0;
    }
    function get(object, path, defaultValue) {
      var result = object == null ? void 0 : baseGet(object, path);
      return result === void 0 ? defaultValue : result;
    }
    function arrayPush(array, values2) {
      var index2 = -1, length = values2.length, offset = array.length;
      while (++index2 < length) {
        array[offset + index2] = values2[index2];
      }
      return array;
    }
    var spreadableSymbol = Symbol$1 ? Symbol$1.isConcatSpreadable : void 0;
    function isFlattenable(value) {
      return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]);
    }
    function baseFlatten(array, depth, predicate, isStrict, result) {
      var index2 = -1, length = array.length;
      predicate || (predicate = isFlattenable);
      result || (result = []);
      while (++index2 < length) {
        var value = array[index2];
        if (depth > 0 && predicate(value)) {
          if (depth > 1) {
            baseFlatten(value, depth - 1, predicate, isStrict, result);
          } else {
            arrayPush(result, value);
          }
        } else if (!isStrict) {
          result[result.length] = value;
        }
      }
      return result;
    }
    var getPrototype = overArg(Object.getPrototypeOf, Object);
    var objectTag$2 = "[object Object]";
    var funcProto = Function.prototype, objectProto$4 = Object.prototype;
    var funcToString = funcProto.toString;
    var hasOwnProperty$3 = objectProto$4.hasOwnProperty;
    var objectCtorString = funcToString.call(Object);
    function isPlainObject(value) {
      if (!isObjectLike(value) || baseGetTag(value) != objectTag$2) {
        return false;
      }
      var proto = getPrototype(value);
      if (proto === null) {
        return true;
      }
      var Ctor = hasOwnProperty$3.call(proto, "constructor") && proto.constructor;
      return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;
    }
    var FUNC_ERROR_TEXT$2 = "Expected a function";
    function before(n, func) {
      var result;
      if (typeof func != "function") {
        throw new TypeError(FUNC_ERROR_TEXT$2);
      }
      n = toInteger(n);
      return function() {
        if (--n > 0) {
          result = func.apply(this, arguments);
        }
        if (n <= 1) {
          func = void 0;
        }
        return result;
      };
    }
    function baseSlice(array, start, end) {
      var index2 = -1, length = array.length;
      if (start < 0) {
        start = -start > length ? 0 : length + start;
      }
      end = end > length ? length : end;
      if (end < 0) {
        end += length;
      }
      length = start > end ? 0 : end - start >>> 0;
      start >>>= 0;
      var result = Array(length);
      while (++index2 < length) {
        result[index2] = array[index2 + start];
      }
      return result;
    }
    function castSlice(array, start, end) {
      var length = array.length;
      end = end === void 0 ? length : end;
      return !start && end >= length ? array : baseSlice(array, start, end);
    }
    var rsAstralRange$2 = "\\ud800-\\udfff", rsComboMarksRange$3 = "\\u0300-\\u036f", reComboHalfMarksRange$3 = "\\ufe20-\\ufe2f", rsComboSymbolsRange$3 = "\\u20d0-\\u20ff", rsComboRange$3 = rsComboMarksRange$3 + reComboHalfMarksRange$3 + rsComboSymbolsRange$3, rsVarRange$2 = "\\ufe0e\\ufe0f";
    var rsZWJ$2 = "\\u200d";
    var reHasUnicode = RegExp("[" + rsZWJ$2 + rsAstralRange$2 + rsComboRange$3 + rsVarRange$2 + "]");
    function hasUnicode(string) {
      return reHasUnicode.test(string);
    }
    function asciiToArray(string) {
      return string.split("");
    }
    var rsAstralRange$1 = "\\ud800-\\udfff", rsComboMarksRange$2 = "\\u0300-\\u036f", reComboHalfMarksRange$2 = "\\ufe20-\\ufe2f", rsComboSymbolsRange$2 = "\\u20d0-\\u20ff", rsComboRange$2 = rsComboMarksRange$2 + reComboHalfMarksRange$2 + rsComboSymbolsRange$2, rsVarRange$1 = "\\ufe0e\\ufe0f";
    var rsAstral = "[" + rsAstralRange$1 + "]", rsCombo$2 = "[" + rsComboRange$2 + "]", rsFitz$1 = "\\ud83c[\\udffb-\\udfff]", rsModifier$1 = "(?:" + rsCombo$2 + "|" + rsFitz$1 + ")", rsNonAstral$1 = "[^" + rsAstralRange$1 + "]", rsRegional$1 = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair$1 = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsZWJ$1 = "\\u200d";
    var reOptMod$1 = rsModifier$1 + "?", rsOptVar$1 = "[" + rsVarRange$1 + "]?", rsOptJoin$1 = "(?:" + rsZWJ$1 + "(?:" + [rsNonAstral$1, rsRegional$1, rsSurrPair$1].join("|") + ")" + rsOptVar$1 + reOptMod$1 + ")*", rsSeq$1 = rsOptVar$1 + reOptMod$1 + rsOptJoin$1, rsSymbol = "(?:" + [rsNonAstral$1 + rsCombo$2 + "?", rsCombo$2, rsRegional$1, rsSurrPair$1, rsAstral].join("|") + ")";
    var reUnicode = RegExp(rsFitz$1 + "(?=" + rsFitz$1 + ")|" + rsSymbol + rsSeq$1, "g");
    function unicodeToArray(string) {
      return string.match(reUnicode) || [];
    }
    function stringToArray(string) {
      return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string);
    }
    function arrayReduce(array, iteratee, accumulator, initAccum) {
      var index2 = -1, length = array == null ? 0 : array.length;
      if (initAccum && length) {
        accumulator = array[++index2];
      }
      while (++index2 < length) {
        accumulator = iteratee(accumulator, array[index2], index2, array);
      }
      return accumulator;
    }
    function basePropertyOf(object) {
      return function(key) {
        return object == null ? void 0 : object[key];
      };
    }
    var deburredLetters = {
      // Latin-1 Supplement block.
      "À": "A",
      "Á": "A",
      "Â": "A",
      "Ã": "A",
      "Ä": "A",
      "Å": "A",
      "à": "a",
      "á": "a",
      "â": "a",
      "ã": "a",
      "ä": "a",
      "å": "a",
      "Ç": "C",
      "ç": "c",
      "Ð": "D",
      "ð": "d",
      "È": "E",
      "É": "E",
      "Ê": "E",
      "Ë": "E",
      "è": "e",
      "é": "e",
      "ê": "e",
      "ë": "e",
      "Ì": "I",
      "Í": "I",
      "Î": "I",
      "Ï": "I",
      "ì": "i",
      "í": "i",
      "î": "i",
      "ï": "i",
      "Ñ": "N",
      "ñ": "n",
      "Ò": "O",
      "Ó": "O",
      "Ô": "O",
      "Õ": "O",
      "Ö": "O",
      "Ø": "O",
      "ò": "o",
      "ó": "o",
      "ô": "o",
      "õ": "o",
      "ö": "o",
      "ø": "o",
      "Ù": "U",
      "Ú": "U",
      "Û": "U",
      "Ü": "U",
      "ù": "u",
      "ú": "u",
      "û": "u",
      "ü": "u",
      "Ý": "Y",
      "ý": "y",
      "ÿ": "y",
      "Æ": "Ae",
      "æ": "ae",
      "Þ": "Th",
      "þ": "th",
      "ß": "ss",
      // Latin Extended-A block.
      "Ā": "A",
      "Ă": "A",
      "Ą": "A",
      "ā": "a",
      "ă": "a",
      "ą": "a",
      "Ć": "C",
      "Ĉ": "C",
      "Ċ": "C",
      "Č": "C",
      "ć": "c",
      "ĉ": "c",
      "ċ": "c",
      "č": "c",
      "Ď": "D",
      "Đ": "D",
      "ď": "d",
      "đ": "d",
      "Ē": "E",
      "Ĕ": "E",
      "Ė": "E",
      "Ę": "E",
      "Ě": "E",
      "ē": "e",
      "ĕ": "e",
      "ė": "e",
      "ę": "e",
      "ě": "e",
      "Ĝ": "G",
      "Ğ": "G",
      "Ġ": "G",
      "Ģ": "G",
      "ĝ": "g",
      "ğ": "g",
      "ġ": "g",
      "ģ": "g",
      "Ĥ": "H",
      "Ħ": "H",
      "ĥ": "h",
      "ħ": "h",
      "Ĩ": "I",
      "Ī": "I",
      "Ĭ": "I",
      "Į": "I",
      "İ": "I",
      "ĩ": "i",
      "ī": "i",
      "ĭ": "i",
      "į": "i",
      "ı": "i",
      "Ĵ": "J",
      "ĵ": "j",
      "Ķ": "K",
      "ķ": "k",
      "ĸ": "k",
      "Ĺ": "L",
      "Ļ": "L",
      "Ľ": "L",
      "Ŀ": "L",
      "Ł": "L",
      "ĺ": "l",
      "ļ": "l",
      "ľ": "l",
      "ŀ": "l",
      "ł": "l",
      "Ń": "N",
      "Ņ": "N",
      "Ň": "N",
      "Ŋ": "N",
      "ń": "n",
      "ņ": "n",
      "ň": "n",
      "ŋ": "n",
      "Ō": "O",
      "Ŏ": "O",
      "Ő": "O",
      "ō": "o",
      "ŏ": "o",
      "ő": "o",
      "Ŕ": "R",
      "Ŗ": "R",
      "Ř": "R",
      "ŕ": "r",
      "ŗ": "r",
      "ř": "r",
      "Ś": "S",
      "Ŝ": "S",
      "Ş": "S",
      "Š": "S",
      "ś": "s",
      "ŝ": "s",
      "ş": "s",
      "š": "s",
      "Ţ": "T",
      "Ť": "T",
      "Ŧ": "T",
      "ţ": "t",
      "ť": "t",
      "ŧ": "t",
      "Ũ": "U",
      "Ū": "U",
      "Ŭ": "U",
      "Ů": "U",
      "Ű": "U",
      "Ų": "U",
      "ũ": "u",
      "ū": "u",
      "ŭ": "u",
      "ů": "u",
      "ű": "u",
      "ų": "u",
      "Ŵ": "W",
      "ŵ": "w",
      "Ŷ": "Y",
      "ŷ": "y",
      "Ÿ": "Y",
      "Ź": "Z",
      "Ż": "Z",
      "Ž": "Z",
      "ź": "z",
      "ż": "z",
      "ž": "z",
      "IJ": "IJ",
      "ij": "ij",
      "Œ": "Oe",
      "œ": "oe",
      "ʼn": "'n",
      "ſ": "s"
    };
    var deburrLetter = basePropertyOf(deburredLetters);
    const deburrLetter$1 = deburrLetter;
    var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
    var rsComboMarksRange$1 = "\\u0300-\\u036f", reComboHalfMarksRange$1 = "\\ufe20-\\ufe2f", rsComboSymbolsRange$1 = "\\u20d0-\\u20ff", rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1;
    var rsCombo$1 = "[" + rsComboRange$1 + "]";
    var reComboMark = RegExp(rsCombo$1, "g");
    function deburr(string) {
      string = toString(string);
      return string && string.replace(reLatin, deburrLetter$1).replace(reComboMark, "");
    }
    var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
    function asciiWords(string) {
      return string.match(reAsciiWord) || [];
    }
    var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;
    function hasUnicodeWord(string) {
      return reHasUnicodeWord.test(string);
    }
    var rsAstralRange = "\\ud800-\\udfff", rsComboMarksRange = "\\u0300-\\u036f", reComboHalfMarksRange = "\\ufe20-\\ufe2f", rsComboSymbolsRange = "\\u20d0-\\u20ff", rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsDingbatRange = "\\u2700-\\u27bf", rsLowerRange = "a-z\\xdf-\\xf6\\xf8-\\xff", rsMathOpRange = "\\xac\\xb1\\xd7\\xf7", rsNonCharRange = "\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf", rsPunctuationRange = "\\u2000-\\u206f", rsSpaceRange = " \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000", rsUpperRange = "A-Z\\xc0-\\xd6\\xd8-\\xde", rsVarRange = "\\ufe0e\\ufe0f", rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;
    var rsApos$1 = "['’]", rsBreak = "[" + rsBreakRange + "]", rsCombo = "[" + rsComboRange + "]", rsDigits = "\\d+", rsDingbat = "[" + rsDingbatRange + "]", rsLower = "[" + rsLowerRange + "]", rsMisc = "[^" + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + "]", rsFitz = "\\ud83c[\\udffb-\\udfff]", rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")", rsNonAstral = "[^" + rsAstralRange + "]", rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsUpper = "[" + rsUpperRange + "]", rsZWJ = "\\u200d";
    var rsMiscLower = "(?:" + rsLower + "|" + rsMisc + ")", rsMiscUpper = "(?:" + rsUpper + "|" + rsMisc + ")", rsOptContrLower = "(?:" + rsApos$1 + "(?:d|ll|m|re|s|t|ve))?", rsOptContrUpper = "(?:" + rsApos$1 + "(?:D|LL|M|RE|S|T|VE))?", reOptMod = rsModifier + "?", rsOptVar = "[" + rsVarRange + "]?", rsOptJoin = "(?:" + rsZWJ + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*", rsOrdLower = "\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])", rsOrdUpper = "\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])", rsSeq = rsOptVar + reOptMod + rsOptJoin, rsEmoji = "(?:" + [rsDingbat, rsRegional, rsSurrPair].join("|") + ")" + rsSeq;
    var reUnicodeWord = RegExp([
      rsUpper + "?" + rsLower + "+" + rsOptContrLower + "(?=" + [rsBreak, rsUpper, "$"].join("|") + ")",
      rsMiscUpper + "+" + rsOptContrUpper + "(?=" + [rsBreak, rsUpper + rsMiscLower, "$"].join("|") + ")",
      rsUpper + "?" + rsMiscLower + "+" + rsOptContrLower,
      rsUpper + "+" + rsOptContrUpper,
      rsOrdUpper,
      rsOrdLower,
      rsDigits,
      rsEmoji
    ].join("|"), "g");
    function unicodeWords(string) {
      return string.match(reUnicodeWord) || [];
    }
    function words(string, pattern, guard) {
      string = toString(string);
      pattern = guard ? void 0 : pattern;
      if (pattern === void 0) {
        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
      }
      return string.match(pattern) || [];
    }
    var rsApos = "['’]";
    var reApos = RegExp(rsApos, "g");
    function createCompounder(callback) {
      return function(string) {
        return arrayReduce(words(deburr(string).replace(reApos, "")), callback, "");
      };
    }
    var nativeIsFinite = root.isFinite, nativeMin$1 = Math.min;
    function createRound(methodName) {
      var func = Math[methodName];
      return function(number, precision) {
        number = toNumber(number);
        precision = precision == null ? 0 : nativeMin$1(toInteger(precision), 292);
        if (precision && nativeIsFinite(number)) {
          var pair = (toString(number) + "e").split("e"), value = func(pair[0] + "e" + (+pair[1] + precision));
          pair = (toString(value) + "e").split("e");
          return +(pair[0] + "e" + (+pair[1] - precision));
        }
        return func(number);
      };
    }
    var nativeCeil = Math.ceil, nativeMax$4 = Math.max;
    function chunk(array, size, guard) {
      if (guard ? isIterateeCall(array, size, guard) : size === void 0) {
        size = 1;
      } else {
        size = nativeMax$4(toInteger(size), 0);
      }
      var length = array == null ? 0 : array.length;
      if (!length || size < 1) {
        return [];
      }
      var index2 = 0, resIndex = 0, result = Array(nativeCeil(length / size));
      while (index2 < length) {
        result[resIndex++] = baseSlice(array, index2, index2 += size);
      }
      return result;
    }
    function baseClamp(number, lower, upper) {
      if (number === number) {
        if (upper !== void 0) {
          number = number <= upper ? number : upper;
        }
        if (lower !== void 0) {
          number = number >= lower ? number : lower;
        }
      }
      return number;
    }
    function stackClear() {
      this.__data__ = new ListCache();
      this.size = 0;
    }
    function stackDelete(key) {
      var data = this.__data__, result = data["delete"](key);
      this.size = data.size;
      return result;
    }
    function stackGet(key) {
      return this.__data__.get(key);
    }
    function stackHas(key) {
      return this.__data__.has(key);
    }
    var LARGE_ARRAY_SIZE = 200;
    function stackSet(key, value) {
      var data = this.__data__;
      if (data instanceof ListCache) {
        var pairs = data.__data__;
        if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) {
          pairs.push([key, value]);
          this.size = ++data.size;
          return this;
        }
        data = this.__data__ = new MapCache(pairs);
      }
      data.set(key, value);
      this.size = data.size;
      return this;
    }
    function Stack(entries) {
      var data = this.__data__ = new ListCache(entries);
      this.size = data.size;
    }
    Stack.prototype.clear = stackClear;
    Stack.prototype["delete"] = stackDelete;
    Stack.prototype.get = stackGet;
    Stack.prototype.has = stackHas;
    Stack.prototype.set = stackSet;
    var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports;
    var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module;
    var moduleExports = freeModule && freeModule.exports === freeExports;
    var Buffer2 = moduleExports ? root.Buffer : void 0, allocUnsafe = Buffer2 ? Buffer2.allocUnsafe : void 0;
    function cloneBuffer(buffer, isDeep) {
      if (isDeep) {
        return buffer.slice();
      }
      var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
      buffer.copy(result);
      return result;
    }
    function arrayFilter(array, predicate) {
      var index2 = -1, length = array == null ? 0 : array.length, resIndex = 0, result = [];
      while (++index2 < length) {
        var value = array[index2];
        if (predicate(value, index2, array)) {
          result[resIndex++] = value;
        }
      }
      return result;
    }
    function stubArray() {
      return [];
    }
    var objectProto$3 = Object.prototype;
    var propertyIsEnumerable = objectProto$3.propertyIsEnumerable;
    var nativeGetSymbols = Object.getOwnPropertySymbols;
    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
      if (object == null) {
        return [];
      }
      object = Object(object);
      return arrayFilter(nativeGetSymbols(object), function(symbol) {
        return propertyIsEnumerable.call(object, symbol);
      });
    };
    const getSymbols$1 = getSymbols;
    function baseGetAllKeys(object, keysFunc, symbolsFunc) {
      var result = keysFunc(object);
      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
    }
    function getAllKeys(object) {
      return baseGetAllKeys(object, keys, getSymbols$1);
    }
    var DataView = getNative(root, "DataView");
    var Promise$1 = getNative(root, "Promise");
    var Set$1 = getNative(root, "Set");
    var mapTag$1 = "[object Map]", objectTag$1 = "[object Object]", promiseTag = "[object Promise]", setTag$1 = "[object Set]", weakMapTag = "[object WeakMap]";
    var dataViewTag$1 = "[object DataView]";
    var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map), promiseCtorString = toSource(Promise$1), setCtorString = toSource(Set$1), weakMapCtorString = toSource(WeakMap);
    var getTag = baseGetTag;
    if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag$1 || Map && getTag(new Map()) != mapTag$1 || Promise$1 && getTag(Promise$1.resolve()) != promiseTag || Set$1 && getTag(new Set$1()) != setTag$1 || WeakMap && getTag(new WeakMap()) != weakMapTag) {
      getTag = function(value) {
        var result = baseGetTag(value), Ctor = result == objectTag$1 ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : "";
        if (ctorString) {
          switch (ctorString) {
            case dataViewCtorString:
              return dataViewTag$1;
            case mapCtorString:
              return mapTag$1;
            case promiseCtorString:
              return promiseTag;
            case setCtorString:
              return setTag$1;
            case weakMapCtorString:
              return weakMapTag;
          }
        }
        return result;
      };
    }
    const getTag$1 = getTag;
    var Uint8Array2 = root.Uint8Array;
    const Uint8Array$1 = Uint8Array2;
    function cloneArrayBuffer(arrayBuffer) {
      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
      new Uint8Array$1(result).set(new Uint8Array$1(arrayBuffer));
      return result;
    }
    function cloneTypedArray(typedArray, isDeep) {
      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
    }
    function initCloneObject(object) {
      return typeof object.constructor == "function" && !isPrototype(object) ? baseCreate(getPrototype(object)) : {};
    }
    var HASH_UNDEFINED = "__lodash_hash_undefined__";
    function setCacheAdd(value) {
      this.__data__.set(value, HASH_UNDEFINED);
      return this;
    }
    function setCacheHas(value) {
      return this.__data__.has(value);
    }
    function SetCache(values2) {
      var index2 = -1, length = values2 == null ? 0 : values2.length;
      this.__data__ = new MapCache();
      while (++index2 < length) {
        this.add(values2[index2]);
      }
    }
    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
    SetCache.prototype.has = setCacheHas;
    function arraySome(array, predicate) {
      var index2 = -1, length = array == null ? 0 : array.length;
      while (++index2 < length) {
        if (predicate(array[index2], index2, array)) {
          return true;
        }
      }
      return false;
    }
    function cacheHas(cache, key) {
      return cache.has(key);
    }
    var COMPARE_PARTIAL_FLAG$5 = 1, COMPARE_UNORDERED_FLAG$3 = 2;
    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
      var isPartial = bitmask & COMPARE_PARTIAL_FLAG$5, arrLength = array.length, othLength = other.length;
      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
        return false;
      }
      var arrStacked = stack.get(array);
      var othStacked = stack.get(other);
      if (arrStacked && othStacked) {
        return arrStacked == other && othStacked == array;
      }
      var index2 = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG$3 ? new SetCache() : void 0;
      stack.set(array, other);
      stack.set(other, array);
      while (++index2 < arrLength) {
        var arrValue = array[index2], othValue = other[index2];
        if (customizer) {
          var compared = isPartial ? customizer(othValue, arrValue, index2, other, array, stack) : customizer(arrValue, othValue, index2, array, other, stack);
        }
        if (compared !== void 0) {
          if (compared) {
            continue;
          }
          result = false;
          break;
        }
        if (seen) {
          if (!arraySome(other, function(othValue2, othIndex) {
            if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) {
              return seen.push(othIndex);
            }
          })) {
            result = false;
            break;
          }
        } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
          result = false;
          break;
        }
      }
      stack["delete"](array);
      stack["delete"](other);
      return result;
    }
    function mapToArray(map2) {
      var index2 = -1, result = Array(map2.size);
      map2.forEach(function(value, key) {
        result[++index2] = [key, value];
      });
      return result;
    }
    function setToArray(set) {
      var index2 = -1, result = Array(set.size);
      set.forEach(function(value) {
        result[++index2] = value;
      });
      return result;
    }
    var COMPARE_PARTIAL_FLAG$4 = 1, COMPARE_UNORDERED_FLAG$2 = 2;
    var boolTag = "[object Boolean]", dateTag = "[object Date]", errorTag = "[object Error]", mapTag = "[object Map]", numberTag = "[object Number]", regexpTag$1 = "[object RegExp]", setTag = "[object Set]", stringTag$1 = "[object String]", symbolTag = "[object Symbol]";
    var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]";
    var symbolProto = Symbol$1 ? Symbol$1.prototype : void 0, symbolValueOf = symbolProto ? symbolProto.valueOf : void 0;
    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
      switch (tag) {
        case dataViewTag:
          if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {
            return false;
          }
          object = object.buffer;
          other = other.buffer;
        case arrayBufferTag:
          if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array$1(object), new Uint8Array$1(other))) {
            return false;
          }
          return true;
        case boolTag:
        case dateTag:
        case numberTag:
          return eq(+object, +other);
        case errorTag:
          return object.name == other.name && object.message == other.message;
        case regexpTag$1:
        case stringTag$1:
          return object == other + "";
        case mapTag:
          var convert = mapToArray;
        case setTag:
          var isPartial = bitmask & COMPARE_PARTIAL_FLAG$4;
          convert || (convert = setToArray);
          if (object.size != other.size && !isPartial) {
            return false;
          }
          var stacked = stack.get(object);
          if (stacked) {
            return stacked == other;
          }
          bitmask |= COMPARE_UNORDERED_FLAG$2;
          stack.set(object, other);
          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
          stack["delete"](object);
          return result;
        case symbolTag:
          if (symbolValueOf) {
            return symbolValueOf.call(object) == symbolValueOf.call(other);
          }
      }
      return false;
    }
    var COMPARE_PARTIAL_FLAG$3 = 1;
    var objectProto$2 = Object.prototype;
    var hasOwnProperty$2 = objectProto$2.hasOwnProperty;
    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
      var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length;
      if (objLength != othLength && !isPartial) {
        return false;
      }
      var index2 = objLength;
      while (index2--) {
        var key = objProps[index2];
        if (!(isPartial ? key in other : hasOwnProperty$2.call(other, key))) {
          return false;
        }
      }
      var objStacked = stack.get(object);
      var othStacked = stack.get(other);
      if (objStacked && othStacked) {
        return objStacked == other && othStacked == object;
      }
      var result = true;
      stack.set(object, other);
      stack.set(other, object);
      var skipCtor = isPartial;
      while (++index2 < objLength) {
        key = objProps[index2];
        var objValue = object[key], othValue = other[key];
        if (customizer) {
          var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);
        }
        if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {
          result = false;
          break;
        }
        skipCtor || (skipCtor = key == "constructor");
      }
      if (result && !skipCtor) {
        var objCtor = object.constructor, othCtor = other.constructor;
        if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) {
          result = false;
        }
      }
      stack["delete"](object);
      stack["delete"](other);
      return result;
    }
    var COMPARE_PARTIAL_FLAG$2 = 1;
    var argsTag = "[object Arguments]", arrayTag = "[object Array]", objectTag = "[object Object]";
    var objectProto$1 = Object.prototype;
    var hasOwnProperty$1 = objectProto$1.hasOwnProperty;
    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
      var objIsArr = isArray(object), othIsArr = isArray(other), objTag = objIsArr ? arrayTag : getTag$1(object), othTag = othIsArr ? arrayTag : getTag$1(other);
      objTag = objTag == argsTag ? objectTag : objTag;
      othTag = othTag == argsTag ? objectTag : othTag;
      var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag;
      if (isSameTag && isBuffer(object)) {
        if (!isBuffer(other)) {
          return false;
        }
        objIsArr = true;
        objIsObj = false;
      }
      if (isSameTag && !objIsObj) {
        stack || (stack = new Stack());
        return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
      }
      if (!(bitmask & COMPARE_PARTIAL_FLAG$2)) {
        var objIsWrapped = objIsObj && hasOwnProperty$1.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty$1.call(other, "__wrapped__");
        if (objIsWrapped || othIsWrapped) {
          var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other;
          stack || (stack = new Stack());
          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
        }
      }
      if (!isSameTag) {
        return false;
      }
      stack || (stack = new Stack());
      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
    }
    function baseIsEqual(value, other, bitmask, customizer, stack) {
      if (value === other) {
        return true;
      }
      if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) {
        return value !== value && other !== other;
      }
      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
    }
    var COMPARE_PARTIAL_FLAG$1 = 1, COMPARE_UNORDERED_FLAG$1 = 2;
    function baseIsMatch(object, source, matchData, customizer) {
      var index2 = matchData.length, length = index2, noCustomizer = !customizer;
      if (object == null) {
        return !length;
      }
      object = Object(object);
      while (index2--) {
        var data = matchData[index2];
        if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) {
          return false;
        }
      }
      while (++index2 < length) {
        data = matchData[index2];
        var key = data[0], objValue = object[key], srcValue = data[1];
        if (noCustomizer && data[2]) {
          if (objValue === void 0 && !(key in object)) {
            return false;
          }
        } else {
          var stack = new Stack();
          if (customizer) {
            var result = customizer(objValue, srcValue, key, object, source, stack);
          }
          if (!(result === void 0 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$1 | COMPARE_UNORDERED_FLAG$1, customizer, stack) : result)) {
            return false;
          }
        }
      }
      return true;
    }
    function isStrictComparable(value) {
      return value === value && !isObject(value);
    }
    function getMatchData(object) {
      var result = keys(object), length = result.length;
      while (length--) {
        var key = result[length], value = object[key];
        result[length] = [key, value, isStrictComparable(value)];
      }
      return result;
    }
    function matchesStrictComparable(key, srcValue) {
      return function(object) {
        if (object == null) {
          return false;
        }
        return object[key] === srcValue && (srcValue !== void 0 || key in Object(object));
      };
    }
    function baseMatches(source) {
      var matchData = getMatchData(source);
      if (matchData.length == 1 && matchData[0][2]) {
        return matchesStrictComparable(matchData[0][0], matchData[0][1]);
      }
      return function(object) {
        return object === source || baseIsMatch(object, source, matchData);
      };
    }
    function baseHasIn(object, key) {
      return object != null && key in Object(object);
    }
    function hasPath(object, path, hasFunc) {
      path = castPath(path, object);
      var index2 = -1, length = path.length, result = false;
      while (++index2 < length) {
        var key = toKey(path[index2]);
        if (!(result = object != null && hasFunc(object, key))) {
          break;
        }
        object = object[key];
      }
      if (result || ++index2 != length) {
        return result;
      }
      length = object == null ? 0 : object.length;
      return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object));
    }
    function hasIn(object, path) {
      return object != null && hasPath(object, path, baseHasIn);
    }
    var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2;
    function baseMatchesProperty(path, srcValue) {
      if (isKey(path) && isStrictComparable(srcValue)) {
        return matchesStrictComparable(toKey(path), srcValue);
      }
      return function(object) {
        var objValue = get(object, path);
        return objValue === void 0 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
      };
    }
    function baseProperty(key) {
      return function(object) {
        return object == null ? void 0 : object[key];
      };
    }
    function basePropertyDeep(path) {
      return function(object) {
        return baseGet(object, path);
      };
    }
    function property(path) {
      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
    }
    function baseIteratee(value) {
      if (typeof value == "function") {
        return value;
      }
      if (value == null) {
        return identity;
      }
      if (typeof value == "object") {
        return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value);
      }
      return property(value);
    }
    function createBaseFor(fromRight) {
      return function(object, iteratee, keysFunc) {
        var index2 = -1, iterable = Object(object), props = keysFunc(object), length = props.length;
        while (length--) {
          var key = props[fromRight ? length : ++index2];
          if (iteratee(iterable[key], key, iterable) === false) {
            break;
          }
        }
        return object;
      };
    }
    var baseFor = createBaseFor();
    function baseForOwn(object, iteratee) {
      return object && baseFor(object, iteratee, keys);
    }
    function createBaseEach(eachFunc, fromRight) {
      return function(collection, iteratee) {
        if (collection == null) {
          return collection;
        }
        if (!isArrayLike(collection)) {
          return eachFunc(collection, iteratee);
        }
        var length = collection.length, index2 = fromRight ? length : -1, iterable = Object(collection);
        while (fromRight ? index2-- : ++index2 < length) {
          if (iteratee(iterable[index2], index2, iterable) === false) {
            break;
          }
        }
        return collection;
      };
    }
    var baseEach = createBaseEach(baseForOwn);
    const baseEach$1 = baseEach;
    var now = function() {
      return root.Date.now();
    };
    var FUNC_ERROR_TEXT$1 = "Expected a function";
    var nativeMax$3 = Math.max, nativeMin = Math.min;
    function debounce(func, wait, options) {
      var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true;
      if (typeof func != "function") {
        throw new TypeError(FUNC_ERROR_TEXT$1);
      }
      wait = toNumber(wait) || 0;
      if (isObject(options)) {
        leading = !!options.leading;
        maxing = "maxWait" in options;
        maxWait = maxing ? nativeMax$3(toNumber(options.maxWait) || 0, wait) : maxWait;
        trailing = "trailing" in options ? !!options.trailing : trailing;
      }
      function invokeFunc(time) {
        var args = lastArgs, thisArg = lastThis;
        lastArgs = lastThis = void 0;
        lastInvokeTime = time;
        result = func.apply(thisArg, args);
        return result;
      }
      function leadingEdge(time) {
        lastInvokeTime = time;
        timerId = setTimeout(timerExpired, wait);
        return leading ? invokeFunc(time) : result;
      }
      function remainingWait(time) {
        var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall;
        return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
      }
      function shouldInvoke(time) {
        var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime;
        return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
      }
      function timerExpired() {
        var time = now();
        if (shouldInvoke(time)) {
          return trailingEdge(time);
        }
        timerId = setTimeout(timerExpired, remainingWait(time));
      }
      function trailingEdge(time) {
        timerId = void 0;
        if (trailing && lastArgs) {
          return invokeFunc(time);
        }
        lastArgs = lastThis = void 0;
        return result;
      }
      function cancel() {
        if (timerId !== void 0) {
          clearTimeout(timerId);
        }
        lastInvokeTime = 0;
        lastArgs = lastCallTime = lastThis = timerId = void 0;
      }
      function flush() {
        return timerId === void 0 ? result : trailingEdge(now());
      }
      function debounced() {
        var time = now(), isInvoking = shouldInvoke(time);
        lastArgs = arguments;
        lastThis = this;
        lastCallTime = time;
        if (isInvoking) {
          if (timerId === void 0) {
            return leadingEdge(lastCallTime);
          }
          if (maxing) {
            clearTimeout(timerId);
            timerId = setTimeout(timerExpired, wait);
            return invokeFunc(lastCallTime);
          }
        }
        if (timerId === void 0) {
          timerId = setTimeout(timerExpired, wait);
        }
        return result;
      }
      debounced.cancel = cancel;
      debounced.flush = flush;
      return debounced;
    }
    function defaultTo(value, defaultValue) {
      return value == null || value !== value ? defaultValue : value;
    }
    var objectProto = Object.prototype;
    var hasOwnProperty = objectProto.hasOwnProperty;
    var defaults = baseRest(function(object, sources) {
      object = Object(object);
      var index2 = -1;
      var length = sources.length;
      var guard = length > 2 ? sources[2] : void 0;
      if (guard && isIterateeCall(sources[0], sources[1], guard)) {
        length = 1;
      }
      while (++index2 < length) {
        var source = sources[index2];
        var props = keysIn(source);
        var propsIndex = -1;
        var propsLength = props.length;
        while (++propsIndex < propsLength) {
          var key = props[propsIndex];
          var value = object[key];
          if (value === void 0 || eq(value, objectProto[key]) && !hasOwnProperty.call(object, key)) {
            object[key] = source[key];
          }
        }
      }
      return object;
    });
    function assignMergeValue(object, key, value) {
      if (value !== void 0 && !eq(object[key], value) || value === void 0 && !(key in object)) {
        baseAssignValue(object, key, value);
      }
    }
    function isArrayLikeObject(value) {
      return isObjectLike(value) && isArrayLike(value);
    }
    function safeGet(object, key) {
      if (key === "constructor" && typeof object[key] === "function") {
        return;
      }
      if (key == "__proto__") {
        return;
      }
      return object[key];
    }
    function toPlainObject(value) {
      return copyObject(value, keysIn(value));
    }
    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
      var objValue = safeGet(object, key), srcValue = safeGet(source, key), stacked = stack.get(srcValue);
      if (stacked) {
        assignMergeValue(object, key, stacked);
        return;
      }
      var newValue = customizer ? customizer(objValue, srcValue, key + "", object, source, stack) : void 0;
      var isCommon = newValue === void 0;
      if (isCommon) {
        var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue);
        newValue = srcValue;
        if (isArr || isBuff || isTyped) {
          if (isArray(objValue)) {
            newValue = objValue;
          } else if (isArrayLikeObject(objValue)) {
            newValue = copyArray(objValue);
          } else if (isBuff) {
            isCommon = false;
            newValue = cloneBuffer(srcValue, true);
          } else if (isTyped) {
            isCommon = false;
            newValue = cloneTypedArray(srcValue, true);
          } else {
            newValue = [];
          }
        } else if (isPlainObject(srcValue) || isArguments(srcValue)) {
          newValue = objValue;
          if (isArguments(objValue)) {
            newValue = toPlainObject(objValue);
          } else if (!isObject(objValue) || isFunction(objValue)) {
            newValue = initCloneObject(srcValue);
          }
        } else {
          isCommon = false;
        }
      }
      if (isCommon) {
        stack.set(srcValue, newValue);
        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
        stack["delete"](srcValue);
      }
      assignMergeValue(object, key, newValue);
    }
    function baseMerge(object, source, srcIndex, customizer, stack) {
      if (object === source) {
        return;
      }
      baseFor(source, function(srcValue, key) {
        stack || (stack = new Stack());
        if (isObject(srcValue)) {
          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
        } else {
          var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + "", object, source, stack) : void 0;
          if (newValue === void 0) {
            newValue = srcValue;
          }
          assignMergeValue(object, key, newValue);
        }
      }, keysIn);
    }
    function castFunction(value) {
      return typeof value == "function" ? value : identity;
    }
    function forEach(collection, iteratee) {
      var func = isArray(collection) ? arrayEach : baseEach$1;
      return func(collection, castFunction(iteratee));
    }
    function baseFilter(collection, predicate) {
      var result = [];
      baseEach$1(collection, function(value, index2, collection2) {
        if (predicate(value, index2, collection2)) {
          result.push(value);
        }
      });
      return result;
    }
    function filter(collection, predicate) {
      var func = isArray(collection) ? arrayFilter : baseFilter;
      return func(collection, baseIteratee(predicate));
    }
    function createFind(findIndexFunc) {
      return function(collection, predicate, fromIndex) {
        var iterable = Object(collection);
        if (!isArrayLike(collection)) {
          var iteratee = baseIteratee(predicate);
          collection = keys(collection);
          predicate = function(key) {
            return iteratee(iterable[key], key, iterable);
          };
        }
        var index2 = findIndexFunc(collection, predicate, fromIndex);
        return index2 > -1 ? iterable[iteratee ? collection[index2] : index2] : void 0;
      };
    }
    var nativeMax$2 = Math.max;
    function findIndex(array, predicate, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index2 = fromIndex == null ? 0 : toInteger(fromIndex);
      if (index2 < 0) {
        index2 = nativeMax$2(length + index2, 0);
      }
      return baseFindIndex(array, baseIteratee(predicate), index2);
    }
    var find = createFind(findIndex);
    const find$1 = find;
    function baseFindKey(collection, predicate, eachFunc) {
      var result;
      eachFunc(collection, function(value, key, collection2) {
        if (predicate(value, key, collection2)) {
          result = key;
          return false;
        }
      });
      return result;
    }
    function findKey(object, predicate) {
      return baseFindKey(object, baseIteratee(predicate), baseForOwn);
    }
    function baseMap(collection, iteratee) {
      var index2 = -1, result = isArrayLike(collection) ? Array(collection.length) : [];
      baseEach$1(collection, function(value, key, collection2) {
        result[++index2] = iteratee(value, key, collection2);
      });
      return result;
    }
    function map(collection, iteratee) {
      var func = isArray(collection) ? arrayMap : baseMap;
      return func(collection, baseIteratee(iteratee));
    }
    var INFINITY = 1 / 0;
    function flatMapDeep(collection, iteratee) {
      return baseFlatten(map(collection, iteratee), INFINITY);
    }
    function forOwn(object, iteratee) {
      return object && baseForOwn(object, castFunction(iteratee));
    }
    var stringTag = "[object String]";
    function isString(value) {
      return typeof value == "string" || !isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag;
    }
    function baseValues(object, props) {
      return arrayMap(props, function(key) {
        return object[key];
      });
    }
    function values(object) {
      return object == null ? [] : baseValues(object, keys(object));
    }
    var nativeMax$1 = Math.max;
    function includes(collection, value, fromIndex, guard) {
      collection = isArrayLike(collection) ? collection : values(collection);
      fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0;
      var length = collection.length;
      if (fromIndex < 0) {
        fromIndex = nativeMax$1(length + fromIndex, 0);
      }
      return isString(collection) ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 : !!length && baseIndexOf(collection, value, fromIndex) > -1;
    }
    var nativeMax = Math.max;
    function indexOf(array, value, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index2 = fromIndex == null ? 0 : toInteger(fromIndex);
      if (index2 < 0) {
        index2 = nativeMax(length + index2, 0);
      }
      return baseIndexOf(array, value, index2);
    }
    var regexpTag = "[object RegExp]";
    function baseIsRegExp(value) {
      return isObjectLike(value) && baseGetTag(value) == regexpTag;
    }
    var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp;
    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;
    var arrayProto$1 = Array.prototype;
    var nativeJoin = arrayProto$1.join;
    function join(array, separator) {
      return array == null ? "" : nativeJoin.call(array, separator);
    }
    var kebabCase = createCompounder(function(result, word, index2) {
      return result + (index2 ? "-" : "") + word.toLowerCase();
    });
    var merge = createAssigner(function(object, source, srcIndex) {
      baseMerge(object, source, srcIndex);
    });
    function once(func) {
      return before(2, func);
    }
    var MAX_SAFE_INTEGER = 9007199254740991;
    var nativeFloor = Math.floor;
    function baseRepeat(string, n) {
      var result = "";
      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {
        return result;
      }
      do {
        if (n % 2) {
          result += string;
        }
        n = nativeFloor(n / 2);
        if (n) {
          string += string;
        }
      } while (n);
      return result;
    }
    function baseIndexOfWith(array, value, fromIndex, comparator) {
      var index2 = fromIndex - 1, length = array.length;
      while (++index2 < length) {
        if (comparator(array[index2], value)) {
          return index2;
        }
      }
      return -1;
    }
    var arrayProto = Array.prototype;
    var splice = arrayProto.splice;
    function basePullAll(array, values2, iteratee, comparator) {
      var indexOf2 = comparator ? baseIndexOfWith : baseIndexOf, index2 = -1, length = values2.length, seen = array;
      if (array === values2) {
        values2 = copyArray(values2);
      }
      if (iteratee) {
        seen = arrayMap(array, baseUnary(iteratee));
      }
      while (++index2 < length) {
        var fromIndex = 0, value = values2[index2], computed = iteratee ? iteratee(value) : value;
        while ((fromIndex = indexOf2(seen, computed, fromIndex, comparator)) > -1) {
          if (seen !== array) {
            splice.call(seen, fromIndex, 1);
          }
          splice.call(array, fromIndex, 1);
        }
      }
      return array;
    }
    function pullAll(array, values2) {
      return array && array.length && values2 && values2.length ? basePullAll(array, values2) : array;
    }
    var pull = baseRest(pullAll);
    const pull$1 = pull;
    function repeat(string, n, guard) {
      if (guard ? isIterateeCall(string, n, guard) : n === void 0) {
        n = 1;
      } else {
        n = toInteger(n);
      }
      return baseRepeat(toString(string), n);
    }
    var round = createRound("round");
    function baseSome(collection, predicate) {
      var result;
      baseEach$1(collection, function(value, index2, collection2) {
        result = predicate(value, index2, collection2);
        return !result;
      });
      return !!result;
    }
    function some(collection, predicate, guard) {
      var func = isArray(collection) ? arraySome : baseSome;
      if (guard && isIterateeCall(collection, predicate, guard)) {
        predicate = void 0;
      }
      return func(collection, baseIteratee(predicate));
    }
    var MAX_ARRAY_LENGTH = 4294967295;
    function split(string, separator, limit) {
      if (limit && typeof limit != "number" && isIterateeCall(string, separator, limit)) {
        separator = limit = void 0;
      }
      limit = limit === void 0 ? MAX_ARRAY_LENGTH : limit >>> 0;
      if (!limit) {
        return [];
      }
      string = toString(string);
      if (string && (typeof separator == "string" || separator != null && !isRegExp(separator))) {
        separator = baseToString(separator);
        if (!separator && hasUnicode(string)) {
          return castSlice(stringToArray(string), 0, limit);
        }
      }
      return string.split(separator, limit);
    }
    function startsWith(string, target, position) {
      string = toString(string);
      position = position == null ? 0 : baseClamp(toInteger(position), 0, string.length);
      target = baseToString(target);
      return string.slice(position, position + target.length) == target;
    }
    function take(array, n, guard) {
      if (!(array && array.length)) {
        return [];
      }
      n = guard || n === void 0 ? 1 : toInteger(n);
      return baseSlice(array, 0, n < 0 ? 0 : n);
    }
    var FUNC_ERROR_TEXT = "Expected a function";
    function throttle(func, wait, options) {
      var leading = true, trailing = true;
      if (typeof func != "function") {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      if (isObject(options)) {
        leading = "leading" in options ? !!options.leading : leading;
        trailing = "trailing" in options ? !!options.trailing : trailing;
      }
      return debounce(func, wait, {
        "leading": leading,
        "maxWait": wait,
        "trailing": trailing
      });
    }
    function charsStartIndex(strSymbols, chrSymbols) {
      var index2 = -1, length = strSymbols.length;
      while (++index2 < length && baseIndexOf(chrSymbols, strSymbols[index2], 0) > -1) {
      }
      return index2;
    }
    var reTrimStart = /^\s+/;
    function trimStart(string, chars, guard) {
      string = toString(string);
      if (string && (guard || chars === void 0)) {
        return string.replace(reTrimStart, "");
      }
      if (!string || !(chars = baseToString(chars))) {
        return string;
      }
      var strSymbols = stringToArray(string), start = charsStartIndex(strSymbols, stringToArray(chars));
      return castSlice(strSymbols, start).join("");
    }
    function baseZipObject(props, values2, assignFunc) {
      var index2 = -1, length = props.length, valsLength = values2.length, result = {};
      while (++index2 < length) {
        var value = index2 < valsLength ? values2[index2] : void 0;
        assignFunc(result, props[index2], value);
      }
      return result;
    }
    function zipObject(props, values2) {
      return baseZipObject(props || [], values2 || [], assignValue);
    }
    var _GM_addStyle = /* @__PURE__ */ (() => typeof GM_addStyle != "undefined" ? GM_addStyle : void 0)();
    var _GM_deleteValue = /* @__PURE__ */ (() => typeof GM_deleteValue != "undefined" ? GM_deleteValue : void 0)();
    var _GM_getValue = /* @__PURE__ */ (() => typeof GM_getValue != "undefined" ? GM_getValue : void 0)();
    var _GM_info = /* @__PURE__ */ (() => typeof GM_info != "undefined" ? GM_info : void 0)();
    var _GM_listValues = /* @__PURE__ */ (() => typeof GM_listValues != "undefined" ? GM_listValues : void 0)();
    var _GM_openInTab = /* @__PURE__ */ (() => typeof GM_openInTab != "undefined" ? GM_openInTab : void 0)();
    var _GM_setValue = /* @__PURE__ */ (() => typeof GM_setValue != "undefined" ? GM_setValue : void 0)();
    const _sfc_main$l = /* @__PURE__ */ vue.defineComponent({
      __name: "dialog-wrapper",
      props: {
        dialog: {},
        childProps: {},
        blurEffect: { type: Boolean },
        forced: { type: Boolean, default: false },
        darker: { type: Boolean, default: true }
      },
      emits: ["RequestClose"],
      setup(__props, { emit: __emit }) {
        const props = __props;
        const emit = __emit;
        vue.onMounted(() => {
          const dialog = vue.createApp(props.dialog, props.childProps);
          dialog.mount(".dialog-wrapper");
        });
        function onClick(e) {
          if (!includes(e.target.classList, "dialog-toggle"))
            return;
          if (!props.forced) {
            emit("RequestClose");
            unloadDialog();
          }
        }
        return (_ctx, _cache) => {
          return vue.openBlock(), vue.createElementBlock("div", {
            class: vue.normalizeClass(["dialog-wrapper dialog-toggle", { "blur-effect": props.blurEffect, "darker": props.darker }]),
            onClick
          }, null, 2);
        };
      }
    });
    const _export_sfc = (sfc, props) => {
      const target = sfc.__vccOpts || sfc;
      for (const [key, val] of props) {
        target[key] = val;
      }
      return target;
    };
    const dialogWrapperVue = /* @__PURE__ */ _export_sfc(_sfc_main$l, [["__scopeId", "data-v-4b280e9a"]]);
    const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
      __name: "user-button",
      props: {
        isAnchor: { type: Boolean },
        shadowBorder: { type: Boolean },
        unsetBackground: { type: Boolean },
        themeStyle: { type: Boolean },
        noBorder: { type: [Boolean, String] }
      },
      setup(__props) {
        const props = __props;
        return (_ctx, _cache) => {
          return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.isAnchor ? "a" : "button"), {
            class: vue.normalizeClass(["user-button", { "shadow-border": props.shadowBorder, "unset-background": props.unsetBackground, "theme-style": props.themeStyle, "no-border": props.noBorder, "no-border-all": props.noBorder === "all" }]),
            type: "button"
          }, {
            default: vue.withCtx(() => [
              vue.renderSlot(_ctx.$slots, "default")
            ]),
            _: 3
          }, 8, ["class"]);
        };
      }
    });
    const _withScopeId$9 = (n) => (vue.pushScopeId("data-v-a6de5a03"), n = n(), vue.popScopeId(), n);
    const _hoisted_1$f = /* @__PURE__ */ _withScopeId$9(() => /* @__PURE__ */ vue.createElementVNode("span", null, "|", -1));
    const _hoisted_2$e = { class: "toast-controls" };
    const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
      __name: "toast",
      props: {
        message: {},
        duration: { default: 6e3 },
        icon: {},
        type: {},
        blurEffect: { type: Boolean }
      },
      setup(__props) {
        const props = __props;
        const toastContainer = vue.ref();
        function chooseIcon() {
          if (props.icon) {
            return props.icon;
          } else {
            if (props.type) {
              switch (props.type) {
                case "basic":
                  return void 0;
                case "check":
                  return "check";
                case "warning":
                  return "warning";
                case "error":
                  return "error";
                default:
                  return void 0;
              }
            }
          }
        }
        return (_ctx, _cache) => {
          return vue.openBlock(), vue.createElementBlock("div", {
            ref_key: "toastContainer",
            ref: toastContainer,
            class: vue.normalizeClass(["toast-container", { "blur-effect": props.blurEffect }])
          }, [
            chooseIcon() ? (vue.openBlock(), vue.createElementBlock("div", {
              key: 0,
              class: vue.normalizeClass(["toast-icon icon", props.type])
            }, vue.toDisplayString(chooseIcon()), 3)) : vue.createCommentVNode("", true),
            vue.createElementVNode("div", {
              class: vue.normalizeClass(["toast-content", props.type])
            }, vue.toDisplayString(props.message), 3),
            _hoisted_1$f,
            vue.createElementVNode("div", _hoisted_2$e, [
              vue.createVNode(_sfc_main$k, {
                class: "close-button icon",
                "shadow-border": true,
                onClick: vue.unref(passToNextToast)
              }, {
                default: vue.withCtx(() => [
                  vue.createTextVNode("close")
                ]),
                _: 1
              }, 8, ["onClick"])
            ])
          ], 2);
        };
      }
    });
    const toastVue = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["__scopeId", "data-v-a6de5a03"]]);
    class Queue {
      constructor(items) {
        __publicField(this, "items", []);
        if (items)
          this.items = items;
      }
      /** 队首 */
      peek() {
        return this.items[0] ? this.items[0] : void 0;
      }
      /** 队列长度 */
      length() {
        return this.items.length;
      }
      /** 入队 */
      enqueue(...elements) {
        this.items.push(...elements);
      }
      /** 出队 */
      dequeue() {
        return this.items.shift();
      }
      /** 队列是否为空 */
      isEmpty() {
        return this.items.length === 0;
      }
      /** 清空队列 */
      clear() {
        this.items = [];
      }
    }
    let publicToastInstance;
    let isToasting = false;
    const toastsQueue = new Queue();
    function toast(props) {
      toastsQueue.enqueue([props, -1]);
      const interval = setInterval(() => {
        if (!isToasting) {
          const peek = toastsQueue.peek();
          if (peek)
            renderToast(peek[0]);
          clearInterval(interval);
        }
      }, 100);
    }
    function renderToast(toastProps) {
      isToasting = true;
      publicToastInstance = vue.createApp(toastVue, toastProps);
      if (!document.getElementById(
        "t-wrapper"
        /* toast-wrapper */
      )) {
        document.body.insertBefore(templateCreate("div", {
          "id": "t-wrapper"
        }), document.body.firstChild);
      }
      const vm = publicToastInstance.mount("#t-wrapper");
      const peek = toastsQueue.peek();
      if (!peek)
        return;
      peek[1] = setTimeout(() => {
        publicToastInstance.unmount();
        toastsQueue.dequeue();
        isToasting = false;
      }, toastProps.duration ? toastProps.duration : 6e3);
      return vm;
    }
    function passToNextToast() {
      publicToastInstance.unmount();
      const peek = toastsQueue.peek();
      if (peek) {
        clearTimeout(peek[1]);
      }
      toastsQueue.dequeue();
      isToasting = false;
      const next = toastsQueue.peek();
      if (next) {
        setTimeout(() => {
          renderToast(next[0]);
        }, 10);
      }
    }
    async function requestInstance(api) {
      try {
        const response = await api;
        if (response.ok) {
          return await response.json();
        }
      } catch (error) {
        toast({
          message: errorMessage(error),
          type: "error",
          duration: 6e3
        });
      }
    }
    const modules = [];
    function AllModules() {
      return modules;
    }
    function errorMessage(error) {
      const errBody = error.stack ? error.stack : error.message;
      return `${_GM_info.script.name} ${_GM_info.script.version}
${errBody}`;
    }
    function spawnOffsetTS(year = 0, month = 0, day = 0, hours = 0, minutes = 0, seconds = 0) {
      const now2 = /* @__PURE__ */ new Date();
      const offset = new Date(
        now2.getFullYear() + year,
        now2.getMonth() + month,
        now2.getDate() + day,
        now2.getHours() + hours,
        now2.getMinutes() + minutes,
        now2.getSeconds() + seconds,
        0
      );
      return offset.getTime();
    }
    function requestBody(body) {
      let reqBody = "";
      forOwn(body, (value, key) => {
        if (!value)
          value = "";
        reqBody += `${key}=${value}&`;
      });
      return reqBody.slice(0, -1);
    }
    function waitUtil(condition, timeout = 1e4, interval = 100) {
      return new Promise((resolve, reject) => {
        const start = Date.now();
        const intervalId = setInterval(() => {
          if (condition()) {
            clearInterval(intervalId);
            resolve();
          } else if (Date.now() - start > timeout) {
            clearInterval(intervalId);
            reject(new Error("Timeout"));
            console.warn("[waitUtil] 等待超时,该函数未在指定时间内得到期望值:", condition);
            console.trace("发生错误的调用者:");
          }
        }, interval);
      });
    }
    function isRealObject(obj) {
      return obj && typeof obj === "object" && !Array.isArray(obj);
    }
    function outputFile(filename, content) {
      const blob = new Blob([content], { type: "text/plain" });
      const url = URL.createObjectURL(blob);
      const link = document.createElement("a");
      link.href = url;
      link.download = filename;
      link.click();
      URL.revokeObjectURL(url);
    }
    async function selectLocalFile(mode = "text") {
      return new Promise((resolve, reject) => {
        const input = document.createElement("input");
        input.type = "file";
        input.addEventListener("change", function() {
          if (!input.files)
            return;
          const file = input.files[0];
          const reader = new FileReader();
          reader.addEventListener("loadend", function() {
            const base64String = reader.result;
            resolve(base64String);
          });
          reader.addEventListener("error", function() {
            reject(new Error());
          });
          switch (mode) {
            case "text": {
              reader.readAsText(file);
              break;
            }
            case "base64": {
              reader.readAsDataURL(file);
              break;
            }
          }
        });
        input.click();
      });
    }
    const fadeInElems = [];
    const fadeInClass = "fade-in-elem";
    function DOMS(...args) {
      const single = args[0] === true;
      const selector = single ? args[1] : args[0];
      switch (args.length) {
        case 1:
          return document.querySelectorAll(selector);
        case 2:
          if (single)
            return document.querySelector(selector);
          if (args[1] instanceof Element) {
            return args[1].querySelectorAll(selector);
          }
          return document.querySelectorAll(selector);
        case 3:
          if (single) {
            if (args[2] instanceof Element)
              return args[2].querySelector(selector);
            return document.querySelector(selector);
          }
          return args[2].querySelectorAll(selector);
        case 4:
          return args[3].querySelector(selector);
      }
    }
    function afterHead(callbackfn) {
      callbackfn();
    }
    function mergeNodeAttrs(node, attrs) {
      forOwn(attrs, (value, key) => {
        if (value !== node.getAttribute(key)) {
          if (isRealObject(value)) {
            node.setAttribute(key, JSON.stringify(attrs[key]));
          } else {
            node.setAttribute(key, attrs[key]);
          }
        }
      });
    }
    function templateCreate(tag, attrs, children = [], doc) {
      const DOC = doc ? doc : document;
      const elem = DOC.createElement(tag);
      if (attrs) {
        mergeNodeAttrs(elem, attrs);
      }
      if (typeof children === "string") {
        elem.appendChild(document.createTextNode(children));
      } else {
        forEach(children, (child) => {
          elem.appendChild(child);
        });
      }
      return elem;
    }
    function findParentByClass(elem, parentClassName) {
      var _a;
      while (((_a = elem.parentElement) == null ? void 0 : _a.className.indexOf(parentClassName)) === -1) {
        elem = elem.parentElement;
      }
      return elem.parentElement;
    }
    function fadeInLoad(selector) {
      DOMS(selector).forEach((elem) => {
        elem.classList.add(fadeInClass);
        elem.addEventListener("animationend", () => {
          elem.style.opacity = "1";
          elem.classList.remove(fadeInClass);
        });
      });
    }
    const defaultStyle = document.createElement("style");
    defaultStyle.id = "default-stylesheet";
    afterHead(() => {
      document.head.appendChild(defaultStyle);
    });
    function parseMultiCSS(cssObject) {
      return flatMapDeep(cssObject, (value, key) => {
        if (isPlainObject(value)) {
          return [
            `${key} {`,
            ...flatMapDeep(value, (v, k) => `${k}: ${v};`),
            "}",
            ""
          ];
        } else {
          return `${key} {${value}}`;
        }
      }).join("\n");
    }
    function parseCSSRule(cssRule) {
      let css = "";
      forOwn(cssRule, (value, key) => {
        css += `${kebabCase(key)}:${value};`;
      });
      return css;
    }
    function injectCSSList(css) {
      const cssElem = document.createElement("style");
      cssElem.textContent = css;
      afterHead(() => {
        document.head.appendChild(cssElem);
      });
      return cssElem;
    }
    function injectCSSRule(selector, cssRule) {
      if (selector === "")
        return;
      if (cssRule.length === 0)
        return;
      if (!defaultStyle.sheet)
        return;
      const css = `${selector}{${parseCSSRule(cssRule)}}`;
      return defaultStyle.sheet.insertRule(css);
    }
    function removeCSSRule(index2) {
      if (!defaultStyle.sheet)
        return;
      defaultStyle.sheet.deleteRule(index2);
    }
    function assignCSSRule(el, cssRule) {
      assign$1(el.style, cssRule);
    }
    let publicDialogInstance;
    const dialogQueue = new Queue();
    function renderComponent(root2, container, rootProps) {
      const app = vue.createApp(root2, rootProps);
      app.mount(container);
      return app;
    }
    const scrollbarWidth = once(function() {
      const temp = templateCreate("div");
      assignCSSRule(temp, {
        width: "100px",
        height: "100px",
        overflow: "scroll",
        position: "absolute",
        top: "-9999px"
      });
      document.body.appendChild(temp);
      const scrollbarWidth2 = temp.offsetWidth - temp.clientWidth;
      document.body.removeChild(temp);
      return scrollbarWidth2;
    });
    function renderPage(root2, rootProps) {
      if (document.getElementsByTagName("body").length === 0) {
        document.documentElement.appendChild(templateCreate("body"));
      }
      removeDefault();
      const page = templateCreate("div", {
        id: "remixed-page"
      });
      document.body.insertBefore(page, document.body.firstChild);
      document.body.appendChild(templateCreate("div", {
        "id": "carousel_wrap"
      }));
      injectCSSRule("#spage-tbshare-container, .tbui_aside_float_bar", {
        display: "none !important"
      });
      return renderComponent(root2, page, rootProps);
    }
    async function renderDialog(dialog, dialogProps, wrapperProps) {
      const dialogWrapper = document.getElementById("dialog-wrapper");
      if (!dialogWrapper) {
        document.body.insertBefore(templateCreate("div", {
          "id": "dialog-wrapper"
        }), document.body.firstChild);
      }
      document.body.setAttribute("no-scrollbar", "");
      document.body.style.paddingRight = `${scrollbarWidth()}px`;
      if (dialogWrapper == null ? void 0 : dialogWrapper.hasChildNodes()) {
        dialogQueue.enqueue([dialog, dialogProps, wrapperProps]);
        return new Promise((resolve) => {
          const peek = dialogQueue.peek();
          const interval = setInterval(() => {
            if (dialogQueue.peek() !== peek) {
              clearInterval(interval);
              resolve("");
            }
          });
        });
      } else {
        publicDialogInstance = vue.createApp(dialogWrapperVue, {
          dialog,
          childProps: dialogProps,
          ...wrapperProps
        });
        const vm = publicDialogInstance.mount("#dialog-wrapper");
        return vm;
      }
    }
    function unloadDialog() {
      document.body.removeAttribute("no-scrollbar");
      document.body.style.paddingRight = "";
      if (publicDialogInstance)
        publicDialogInstance.unmount();
      const next = dialogQueue.dequeue();
      if (next) {
        renderDialog(next[0], next[1], next[2]);
      }
    }
    function removeDefault() {
      forEach(document.head.children, (el) => {
        if (el && el.tagName.toUpperCase() === "LINK" && includes(el.getAttribute("href"), "static-common/style")) {
          el.remove();
        }
        if (el && el.tagName.toUpperCase() === "SCRIPT" && includes(el.getAttribute("src"), "static-common/lib")) {
          el.remove();
        }
      });
      forEach(document.body.children, (el) => {
        if (el && el.tagName.toUpperCase() === "STYLE") {
          el.remove();
        }
        if (el && el.tagName.toUpperCase() === "SCRIPT") {
          el.remove();
        }
        if (el && el.tagName.toUpperCase() === "IFRAME") {
          el.remove();
        }
        if (el && includes(el.className, "translatorExtension")) {
          el.remove();
        }
        if (el && includes(el.className, "dialogJ")) {
          el.remove();
        }
      });
    }
    const _hoisted_1$e = { class: "message-box remove-default" };
    const _hoisted_2$d = {
      key: 0,
      class: "title"
    };
    const _hoisted_3$c = {
      key: 0,
      class: "message-controls"
    };
    const _hoisted_4$b = {
      key: 1,
      class: "message-controls"
    };
    const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
      __name: "message-box",
      props: {
        title: {},
        message: {},
        type: { default: "basic" },
        embedded: { type: Boolean },
        buttons: {}
      },
      emits: ["positive", "cancel", "negative"],
      setup(__props, { emit: __emit }) {
        const props = __props;
        const messageWrapper = vue.ref();
        const messageContent = vue.ref();
        const emit = __emit;
        vue.onMounted(function() {
          if (props.embedded) {
            if (messageContent.value) {
              if (props.message) {
                messageContent.value.innerHTML = props.message;
              }
            }
          }
        });
        function defaultClose(event) {
          event();
          emitAndClose("positive");
        }
        function emitAndClose(emitName) {
          emit(emitName, emitName);
          setMessageInbox(emitName);
          unloadDialog();
        }
        return (_ctx, _cache) => {
          return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$e, [
            vue.createElementVNode("div", {
              ref_key: "messageWrapper",
              ref: messageWrapper,
              class: "message-wrapper"
            }, [
              props.title ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$d, vue.toDisplayString(props.title), 1)) : vue.createCommentVNode("", true),
              props.message ? (vue.openBlock(), vue.createElementBlock("div", {
                key: 1,
                ref_key: "messageContent",
                ref: messageContent,
                class: "message markdown"
              }, vue.toDisplayString(props.message), 513)) : vue.createCommentVNode("", true),
              vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
            ], 512),
            !props.buttons || props.buttons.length === 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$c, [
              vue.createVNode(_sfc_main$k, {
                class: "message-button",
                "shadow-border": true,
                "theme-style": true,
                onClick: _cache[0] || (_cache[0] = ($event) => emitAndClose("positive"))
              }, {
                default: vue.withCtx(() => [
                  vue.createTextVNode(" 确定")
                ]),
                _: 1
              }),
              props.type === "OkCancel" ? (vue.openBlock(), vue.createBlock(_sfc_main$k, {
                key: 0,
                class: "message-button",
                "shadow-border": true,
                onClick: _cache[1] || (_cache[1] = ($event) => emitAndClose("cancel"))
              }, {
                default: vue.withCtx(() => [
                  vue.createTextVNode("取消")
                ]),
                _: 1
              })) : vue.createCommentVNode("", true),
              props.type === "forceTrueFalse" ? (vue.openBlock(), vue.createBlock(_sfc_main$k, {
                key: 1,
                class: "message-button",
                "shadow-border": true,
                onClick: _cache[2] || (_cache[2] = ($event) => emitAndClose("cancel"))
              }, {
                default: vue.withCtx(() => [
                  vue.createTextVNode("拒绝")
                ]),
                _: 1
              })) : vue.createCommentVNode("", true)
            ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$b, [
              (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(props.buttons, (button, index2) => {
                return vue.openBlock(), vue.createBlock(_sfc_main$k, {
                  class: "message-button",
                  "shadow-border": "",
                  "theme-style": index2 == 0,
                  onClick: ($event) => defaultClose(button.event)
                }, {
                  default: vue.withCtx(() => [
                    vue.createTextVNode(vue.toDisplayString(button.title), 1)
                  ]),
                  _: 2
                }, 1032, ["theme-style", "onClick"]);
              }), 256))
            ]))
          ]);
        };
      }
    });
    const messageBoxVue = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["__scopeId", "data-v-8df9d0bc"]]);
    let messageInbox;
    function messageBox(messageBoxProps) {
      renderDialog(messageBoxVue, {
        message: messageBoxProps.message,
        title: messageBoxProps.title,
        type: messageBoxProps.type,
        embedded: messageBoxProps.embedded,
        buttons: messageBoxProps.buttons
      }, {
        forced: messageBoxProps.type === "forceTrueFalse"
      });
      return new Promise((resolve) => {
        const interval = setInterval(() => {
          const inbox = getMessageInbox();
          if (inbox) {
            clearInterval(interval);
            resolve(inbox);
          }
        }, 10);
      });
    }
    function getMessageInbox() {
      const inbox = messageInbox;
      messageInbox = void 0;
      return inbox;
    }
    function setMessageInbox(value) {
      messageInbox = value;
    }
    function hexToRGBA(hex) {
      const hexValue = startsWith(hex, "#") ? trimStart(hex, "#") : hex;
      const tokenConverter = hexValue.length <= 4 ? (chunk2) => parseInt(repeat(chunk2[0], 2), 16) : (chunk2) => parseInt(join(chunk2, ""), 16);
      const chunkSize = hexValue.length <= 4 ? 1 : 2;
      const chunks = chunk(hexValue, chunkSize);
      return {
        r: tokenConverter(chunks[0]),
        g: tokenConverter(chunks[1]),
        b: tokenConverter(chunks[2]),
        a: chunks.length === 4 ? tokenConverter(chunks[3]) : 1
      };
    }
    function rgbaToHSLA(rgba) {
      const normalizedR = rgba.r / 255;
      const normalizedG = rgba.g / 255;
      const normalizedB = rgba.b / 255;
      const minValue = Math.min(normalizedR, normalizedG, normalizedB);
      const maxValue = Math.max(normalizedR, normalizedG, normalizedB);
      const lightness = (maxValue + minValue) / 2;
      let saturation;
      if (lightness <= 0.5) {
        saturation = (maxValue - minValue) / (maxValue + minValue);
      } else {
        saturation = (maxValue - minValue) / (2 - maxValue - minValue);
      }
      let hue;
      if (maxValue === minValue) {
        hue = 0;
      } else if (maxValue === normalizedR) {
        hue = (normalizedG - normalizedB) / (maxValue - minValue);
      } else if (maxValue === normalizedG) {
        hue = 2 + (normalizedB - normalizedR) / (maxValue - minValue);
      } else {
        hue = 4 + (normalizedR - normalizedG) / (maxValue - minValue);
      }
      hue *= 60;
      if (hue < 0) {
        hue += 360;
      }
      return {
        h: round(hue, 2),
        s: `${round(saturation * 100)}%`,
        l: `${round(lightness * 100)}%`,
        a: rgba.a
      };
    }
    const paletteCSS = ':root {\n  --img-tieba-icon: url("https://gitee.com/WiresawBlade/Tieba-Remix/raw/master/assets/images/main/icon.png");\n}\n\n.dark-theme {\n  --default-background: rgb(32, 32, 32);\n  --default-hover: rgb(42, 42, 42);\n  --default-active: rgb(54, 54, 54);\n  --page-background: rgb(26, 26, 26);\n  --trans-page-background: rgba(26, 26, 26, 0.8);\n  --trans-default-background: rgba(32, 32, 32, 0.8);\n  --deep-background: rgb(26, 26, 26);\n  --trans-deep-background: rgba(20, 20, 20, 0.6);\n  --light-background: rgb(60, 60, 60);\n  --trans-light-background: rgba(60, 60, 60, 0.6);\n  --very-light-background: rgb(60, 60, 60);\n  --elem-color: rgb(26, 26, 26);\n  --default-fore: rgb(230, 230, 230);\n  --light-fore: rgb(200, 200, 200);\n  --minimal-fore: rgb(144, 144, 144);\n  --highlight-fore: rgb(255, 255, 255);\n  --border-color: rgba(96, 96, 96, 0.6);\n  --light-border-color: rgba(96, 96, 96, 0.2);\n  --tieba-theme-color: rgb(113, 97, 193);\n  --trans-tieba-theme-color: rgba(113, 97, 193, 0.6);\n  --tieba-theme-hover: rgb(149, 128, 254);\n  --tieba-theme-active: rgb(172, 156, 253);\n  --tieba-theme-background: rgba(113, 97, 193, 0.2);\n  --tieba-theme-fore: rgb(150, 128, 255);\n  --level-green-background: rgba(96, 153, 59, 0.1);\n  --level-green-fore: rgb(133, 206, 84);\n  --level-blue-background: rgba(0, 165, 227, 0.1);\n  --level-blue-fore: rgb(0, 169, 255);\n  --level-yellow-background: rgba(229, 193, 90, 0.1);\n  --level-yellow-fore: rgb(242, 205, 96);\n  --level-orange-background: rgba(204, 122, 0, 0.1);\n  --level-orange-fore: rgb(255, 170, 0);\n  --check-color: color.adjust(green, $lightness: 10%);\n  --error-color: color.adjust(red, $lightness: 16%);\n  --warning-color: color.adjust(orange, $blackness: 10%);\n  color-scheme: dark;\n}\n\n.light-theme {\n  --default-background: rgb(255, 255, 255);\n  --default-hover: rgb(240, 240, 240);\n  --default-active: rgb(224, 224, 224);\n  --page-background: rgb(245, 245, 245);\n  --trans-page-background: rgba(245, 245, 245, 0.8);\n  --trans-default-background: rgba(255, 255, 255, 0.8);\n  --deep-background: rgb(228, 228, 228);\n  --trans-deep-background: rgba(200, 200, 200, 0.6);\n  --light-background: rgb(235, 235, 235);\n  --trans-light-background: rgba(228, 228, 228, 0.6);\n  --very-light-background: rgb(245, 245, 245);\n  --elem-color: rgb(240, 240, 240);\n  --default-fore: rgb(16, 16, 16);\n  --light-fore: rgb(64, 64, 64);\n  --minimal-fore: rgb(92, 92, 92);\n  --highlight-fore: rgb(0, 0, 0);\n  --border-color: rgba(210, 210, 210, 0.6);\n  --light-border-color: rgba(210, 210, 210, 0.2);\n  --tieba-theme-color: rgb(97, 78, 194);\n  --trans-tieba-theme-color: rgba(97, 78, 194, 0.6);\n  --tieba-theme-hover: rgb(119, 105, 194);\n  --tieba-theme-active: rgb(150, 134, 232);\n  --tieba-theme-background: rgba(97, 78, 194, 0.2);\n  --tieba-theme-fore: rgb(58, 46, 116);\n  --level-green-background: rgba(84, 130, 53, 0.1);\n  --level-green-fore: rgb(51, 78, 32);\n  --level-blue-background: rgba(0, 153, 213, 0.1);\n  --level-blue-fore: rgb(0, 81, 111);\n  --level-yellow-background: rgba(164, 139, 63, 0.1);\n  --level-yellow-fore: rgb(124, 105, 46);\n  --level-orange-background: rgba(255, 153, 0, 0.1);\n  --level-orange-fore: rgb(178, 104, 0);\n  --check-color: color.adjust(green, $lightness: 10%);\n  --error-color: color.adjust(red, $lightness: 16%);\n  --warning-color: color.adjust(orange, $blackness: 10%);\n  color-scheme: "light";\n}';
    const mainCSS = "html {\n  padding: 0;\n  margin: 0;\n  text-align: justify;\n}\n\nbody {\n  padding: 0;\n  margin: 0;\n  font-family: var(--code-zh);\n}\nbody[no-scrollbar] {\n  overflow: hidden;\n}\n\ndiv,\np {\n  margin: 0;\n}\n\nselect {\n  padding: 1px 8px;\n  border: 1px solid var(--border-color);\n  border-radius: 8px;\n  cursor: pointer;\n}\n\noption {\n  cursor: pointer;\n}\n\noption:checked {\n  background-color: var(--tieba-theme-color);\n  color: var(--default-background);\n}\n\na {\n  color: inherit;\n  -webkit-text-decoration: none;\n  text-decoration: none;\n}\n\n.dialogJ {\n  position: fixed !important;\n  top: 50% !important;\n  left: 50% !important;\n}\n\n.dialogJ {\n  transform: translate(-50%, -50%);\n}";
    const utilCSS = 'html {\n  padding: 0;\n  margin: 0;\n  text-align: justify;\n}\n\nbody {\n  padding: 0;\n  margin: 0;\n  font-family: var(--code-zh);\n}\nbody[no-scrollbar] {\n  overflow: hidden;\n}\n\ndiv,\np {\n  margin: 0;\n}\n\nselect {\n  padding: 1px 8px;\n  border: 1px solid var(--border-color);\n  border-radius: 8px;\n  cursor: pointer;\n}\n\noption {\n  cursor: pointer;\n}\n\noption:checked {\n  background-color: var(--tieba-theme-color);\n  color: var(--default-background);\n}\n\na {\n  color: inherit;\n  -webkit-text-decoration: none;\n  text-decoration: none;\n}\n\n.dialogJ {\n  position: fixed !important;\n  top: 50% !important;\n  left: 50% !important;\n}\n\n.dialogJ {\n  transform: translate(-50%, -50%);\n}\n\n.icon,\n.outline-icon {\n  font-family: "Material Symbols", monospace;\n  font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 40;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n\n.filled-icon {\n  font-family: "Material Symbols", monospace;\n  font-variation-settings: "FILL" 1, "wght" 400, "GRAD" 0, "opsz" 40;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n\n.markdown {\n  font-family: sans-serif;\n}\n.markdown code {\n  padding: 2px 6px;\n  border-radius: 8px;\n  background-color: var(--light-border-color);\n  font-family: var(--code-monospace);\n  word-wrap: break-word;\n}\n.markdown a {\n  color: var(--tieba-theme-fore);\n}\n.markdown a:hover {\n  -webkit-text-decoration: underline;\n  text-decoration: underline;\n}\n.markdown h2 {\n  margin: 20px 0 8px;\n  font-size: 24px;\n}\n.markdown h3 {\n  margin: 16px 0 6px;\n}\n.markdown ul {\n  margin: 6px 0;\n}\n.markdown li {\n  margin: 6px 0 6px 22px;\n  list-style: disc;\n}\n.markdown li::marker {\n  color: var(--minimal-fore);\n}\n.markdown blockquote {\n  margin: 20px 16px;\n  color: var(--minimal-fore);\n}\n\n.settings-toggle-button {\n  border: none !important;\n  background-color: transparent !important;\n  background-color: initial !important;\n}\n\n.settings-toggle-button {\n  border-radius: 36px;\n}\n\n.settings-toggle-button.toggle-off {\n  color: var(--minimal-fore);\n  font-variation-settings: "FILL" 0;\n}\n\n.settings-toggle-button.toggle-off::after {\n  content: "toggle_off";\n}\n\n.settings-toggle-button.toggle-on::after {\n  content: "toggle_on";\n}\n\n.settings-toggle-button.toggle-on {\n  color: var(--tieba-theme-color);\n  font-variation-settings: "FILL" 1;\n}\n\n.settings-toggle-button.toggle-off:hover {\n  color: var(--default-hover);\n}\n\n.settings-toggle-button.toggle-off:active {\n  color: var(--default-active);\n}\n\n.settings-toggle-button.toggle-on:hover {\n  color: var(tieba-theme-hover);\n}\n\n.settings-toggle-button.toggle-on:active {\n  color: var(--tieba-theme-active);\n}\n\n.level-green {\n  background-color: var(--level-green-background) !important;\n  color: var(--level-green-fore) !important;\n}\n\n.level-blue {\n  background-color: var(--level-blue-background) !important;\n  color: var(--level-blue-fore) !important;\n}\n\n.level-yellow {\n  background-color: var(--level-yellow-background) !important;\n  color: var(--level-yellow-fore) !important;\n}\n\n.level-orange {\n  background-color: var(--level-orange-background) !important;\n  color: var(--level-orange-fore) !important;\n}\n\n.remove-default {\n  font-size: 16px;\n  line-height: normal;\n  line-height: initial;\n}\n.remove-default .content {\n  min-height: 0;\n  min-height: initial;\n  background: transparent none repeat 0 0 / auto auto padding-box border-box scroll;\n  background: initial;\n}\n.remove-default code {\n  display: inline;\n  display: initial;\n  width: auto;\n  width: initial;\n  height: auto;\n  height: initial;\n}\n.remove-default .content,\n.remove-default .foot {\n  width: auto;\n  width: initial;\n}\n.remove-default button {\n  color: inherit;\n}\n\nbody.custom-background .blur-if-custom-background {\n  -webkit-backdrop-filter: blur(24px);\n          backdrop-filter: blur(24px);\n}\nhtml.dark-theme body.custom-background .blur-if-custom-background {\n  -webkit-backdrop-filter: blur(24px) brightness(0.8);\n          backdrop-filter: blur(24px) brightness(0.8);\n}';
    const materialSymbolsCSS = '/* stylelint-disable font-family-no-missing-generic-family-keyword */\r\n/* https: //fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,200..400,0..1,-50..100 */\r\n\r\n/* fallback */\r\n@font-face {\r\n    font-family: "Material Symbols";\r\n    font-style: normal;\r\n    font-weight: 200 400;\r\n    src: url("https://fonts.gstatic.com/s/materialsymbolsoutlined/v110/kJEhBvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oFsI.woff2") format("woff2");\r\n}\r\n\r\n.material-symbols-outlined {\r\n    display: inline-block;\r\n    direction: ltr;\r\n    font-family: "Material Symbols";\r\n    font-size: 24px;\r\n    -webkit-font-smoothing: antialiased;\r\n    font-style: normal;\r\n    font-weight: normal;\r\n    letter-spacing: normal;\r\n    line-height: 1;\r\n    text-transform: none;\r\n    white-space: nowrap;\r\n    word-wrap: normal;\r\n}\r\n';
    const tiebaCSS = '@charset "UTF-8";\nhtml {\n  padding: 0;\n  margin: 0;\n  text-align: justify;\n}\n\nbody {\n  padding: 0;\n  margin: 0;\n  font-family: var(--code-zh);\n}\nbody[no-scrollbar] {\n  overflow: hidden;\n}\n\ndiv,\np {\n  margin: 0;\n}\n\nselect {\n  padding: 1px 8px;\n  border: 1px solid var(--border-color);\n  border-radius: 8px;\n  cursor: pointer;\n}\n\noption {\n  cursor: pointer;\n}\n\noption:checked {\n  background-color: var(--tieba-theme-color);\n  color: var(--default-background);\n}\n\na {\n  color: inherit;\n  -webkit-text-decoration: none;\n  text-decoration: none;\n}\n\n.dialogJ {\n  position: fixed !important;\n  top: 50% !important;\n  left: 50% !important;\n}\n\n.dialogJ {\n  transform: translate(-50%, -50%);\n}\n\n.tbui_aside_float_bar li a {\n  font-family: "Material Symbols", monospace;\n  font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 40;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n\n/* 动画 */\n/* 淡入动画 */\n@keyframes animation-fade-in {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 1;\n  }\n}\n.fade-in-elem {\n  animation: animation-fade-in ease 0.3s forwards;\n}\n\n#com_userbar {\n  display: none;\n}\n\n/* 功能按钮 */\n.tbui_aside_float_bar {\n  border: none !important;\n  background: none !important;\n}\n\n.tbui_aside_float_bar li {\n  width: 40px;\n  height: 40px;\n  border-radius: 24px;\n  margin: 8px 0;\n  background-color: var(--light-background);\n}\n\n.tbui_aside_float_bar li:hover {\n  background-color: var(--default-hover);\n}\n\n.tbui_aside_float_bar li:active {\n  background-color: var(--default-active);\n}\n\n.tbui_aside_float_bar li a {\n  width: 40px !important;\n  height: 40px !important;\n  background: none !important;\n}\n\n.tbui_aside_float_bar li a {\n  border-radius: 24px;\n}\n\n.tbui_aside_float_bar a {\n  width: 40px !important;\n  height: 40px !important;\n}\n\n.tbui_aside_float_bar a {\n  /* 功能按钮 svg 容器 */\n  color: var(--minimal-fore);\n  font-size: 24px;\n  line-height: 40px;\n  text-align: center;\n  /* background-size: 20px;\n  background-repeat: no-repeat;\n  background-position: center;\n  filter: drop-shadow(var(--minimal-fore) 0 -9999px);\n  transform: translateY(9999px); */\n}\n\n/* .tbui_aside_float_bar a:hover {\n    color: var(--default-background);\n    filter: drop-shadow(var(--default-fore) 0 -9999px);\n} */\n.tbui_aside_float_bar .tbui_fbar_auxiliaryCare a {\n  height: 40px !important;\n  background: none !important;\n}\n.tbui_aside_float_bar .tbui_fbar_auxiliaryCare a {\n  /* 无障碍模式 */\n}\n\n.tbui_fbar_auxiliaryCare a::after {\n  content: "accessibility_new";\n  /* background-image: var(--svg-accessibility); */\n}\n\n.tbui_fbar_top a::after {\n  /* 回到顶部 */\n  /* color: var(--tieba-theme-fore); */\n  content: "arrow_upward";\n  /* background-image: var(--svg-arrow-up);\n  filter: drop-shadow(var(--tieba-theme-fore) 0 -9999px); */\n}\n\n/* .tbui_aside_float_bar .tbui_fbar_top a {\n    background-color: var(--tieba-theme-background) !important;\n} */\n/* .tbui_fbar_top a:hover::after {\n    color: var(--default-background);\n} */\n.tbui_fbar_post a::after {\n  /* 回贴 */\n  /* color: var(--default-background); */\n  content: "chat";\n  font-size: 22px;\n  /* vertical-align: bottom; */\n  /* background-image: var(--svg-message);\n  filter: drop-shadow(var(--default-background) 0 -9999px); */\n}\n\n/* .tbui_aside_float_bar .tbui_fbar_post a,\n.tbui_aside_float_bar .tbui_fbar_post a:hover {\n    background-color: var(--tieba-theme-color) !important;\n} */\n.tbui_fbar_feedback a::after {\n  /* 反馈 */\n  content: "report";\n  font-size: 26px;\n  /* background-image: var(--svg-infomation-outline);\n  background-size: 24px; */\n}\n\n.tbui_aside_float_bar li.tbui_fbar_feedback a {\n  background: none !important;\n}\n\n.tbui_aside_float_bar li.tbui_fbar_feedback a {\n  /* 部分吧反馈 */\n}\n\n.tbui_aside_float_bar .tbui_fbar_feedback a,\n.tbui_aside_float_bar .tbui_fbar_feedback a:hover {\n  background: none !important;\n}\n\n.tbui_aside_float_bar .tbui_fbar_down,\n.tbui_aside_float_bar .tbui_fbar_props,\n.tbui_aside_float_bar .tbui_fbar_tsukkomi,\n.tbui_aside_float_bar .tbui_fbar_share,\n.tbui_aside_float_bar .tbui_fbar_favor,\n.tbui_aside_float_bar .tbui_fbar_refresh {\n  display: none;\n}\n\n/* 图片缩放控件 */\n.p_tools a {\n  padding: 0 10px;\n  background: none;\n  vertical-align: bottom;\n}\n\n.p_tools span {\n  /* 分隔线 */\n  display: none;\n}\n\n.p_tools .p_putup::before,\n.p_tools .tb_icon_ypic::before,\n.p_tools .tb_icon_turnleft::before,\n.p_tools .tb_icon_turnright::before {\n  margin-right: 4px;\n  font-family: "Material Symbols", system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif;\n  font-size: 14px;\n  vertical-align: bottom;\n}\n\n.p_tools .p_putup::before {\n  /* 收起 */\n  content: "zoom_out";\n}\n\n.p_tools .tb_icon_ypic::before {\n  /* 查看大图 */\n  content: "zoom_out_map";\n}\n\n.p_tools .tb_icon_turnleft::before {\n  /* 左转 */\n  content: "turn_left";\n}\n\n.p_tools .tb_icon_turnright::before {\n  /* 右转 */\n  content: "turn_right";\n}';
    const homeCSS = '@charset "UTF-8";\nbody {\n  background-color: var(--page-background);\n  color: var(--default-fore);\n}\n\n/* 导航栏 */\n.head_inner {\n  /* 导航栏额头 */\n  background-color: var(--default-background);\n}\n\n.u_menu_item a {\n  /* 顶部超链接 */\n  color: var(--default-fore);\n}\n\n.head_inner .search_logo {\n  left: 72px;\n  width: 60px;\n  height: 60px;\n  /* logo */\n  background-image: var(--img-tieba-icon);\n}\n\n.search_top {\n  border: none;\n}\n\n.search_nav a:link,\n.search_nav a:hover,\n.search_nav a:visited {\n  /* 导航栏超链接 */\n  color: var(--default-fore);\n}\n\n.u_menu_item a:hover,\n.u_menu_item a:visited {\n  color: var(--default-fore);\n}\n\n/* 搜索 */\n.search_main {\n  padding-bottom: 96px;\n}\n\n.search_bright .search_inp_border {\n  /* 搜索框 */\n  border-color: var(--border-color);\n  border-bottom-left-radius: 8px;\n  border-top-left-radius: 8px;\n  color: var(--default-fore);\n}\n\n.search_bright .search_inp_border:focus {\n  border-color: var(--tieba-theme-color);\n}\n\n.search_bright .search_btn {\n  border-color: var(--trans-tieba-theme-color);\n  /* 搜索相关按钮 */\n  border-radius: 8px;\n  background-color: var(--tieba-theme-background);\n  color: var(--tieba-theme-fore);\n}\n\n.search_bright .search_btn_enter_ba {\n  /* “进入贴吧”按钮 */\n  background-color: var(--tieba-theme-color);\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n  color: var(--default-background);\n}\n\n.search_bright .search_btn:visited {\n  color: var(--tieba-theme-fore);\n}\n\n.search_bright .search_btn_enter_ba:visited {\n  background-color: var(--tieba-theme-color);\n  color: var(--default-background);\n}\n\n.search_bright .search_btn:hover {\n  /* 搜索相关 hover */\n  border-color: var(--trans-tieba-theme-color);\n  background-color: var(--tieba-theme-background);\n  box-shadow: 0 0 0 2px var(--trans-tieba-theme-color);\n}\n\n.search_bright .search_btn_enter_ba:hover {\n  background-color: var(--tieba-theme-color);\n  color: var(--default-background);\n}\n\n.suggestion {\n  /* 搜索推荐 */\n  border-color: var(--border-color);\n  border-radius: 0 0 16px 16px;\n  background-color: var(--elem-color);\n  box-shadow: 0 10px 20px rgba(0, 0, 0, 0.3);\n  color: var(--default-fore);\n}\n\n.suggestion .break_tip {\n  background-color: var(--default-background);\n}\n\n.suggestion .highlight {\n  /* 高亮文本 */\n  color: var(--tieba-theme-color);\n}\n\n.suggestion .operation_title {\n  /* 热议文字 */\n  color: var(--default-fore);\n}\n\n.suggestion .forum_image {\n  /* 推荐图标 */\n  border-radius: 8px;\n}\n\n.suggestion .forum_name {\n  /* 推荐标题 */\n  color: var(--highlight-fore);\n}\n\n.suggestion .on {\n  /* 搜索推荐:选中 */\n  background-color: var(--light-background);\n}\n\n/* 首页横幅 */\n.page-container .top-sec {\n  display: none;\n}\n\n/* 内容 */\n.page-container .content-sec {\n  background: none;\n}\n\n/* 左侧悬停 */\n.page-container .left-sec {\n  border-radius: 24px;\n  border-top: none;\n  background: none;\n  background-color: var(--elem-color);\n}\n\n.f-d-w {\n  border-radius: 24px;\n  /* 左侧悬停 2 */\n  background-color: var(--elem-color);\n}\n\n.f-d-w .f-d-item {\n  background: none;\n}\n\n.aggregate_entrance_wrap {\n  /* 专题 */\n  display: none;\n}\n\n.u-f-t .gap {\n  border: none;\n  /* “贴吧分类”分隔符 */\n  background: none;\n}\n\n.f-d-w .all {\n  /* “查看全部”按钮 */\n  background: none;\n}\n\n.forum_rcmd {\n  /* 热门吧卡片 */\n  border: 0;\n  border-radius: 24px;\n  background-color: var(--elem-color);\n}\n\n.region_bright .region_header {\n  /* “我在贴吧”标题 */\n  color: var(--default-fore);\n}\n\n.page-container .left-sec .region_bright {\n  border-radius: 24px;\n}\n\n.my_tieba_mod .media_left,\n.my_tieba_mod .media-left {\n  /* 头像边框 */\n  border: none;\n}\n\n.media_left img,\n.media-left img {\n  /* 头像 */\n  border-radius: 16px;\n}\n\n#nameValue {\n  /* 我的用户名 */\n  color: var(--default-fore);\n}\n\n#j_tcharge_dialog {\n  /* “获取”超链接 */\n  color: var(--default-fore);\n}\n\n#onekey_sign .onekey_btn,\n#onekey_sign a.onekey_btn {\n  /* 签到按钮 */\n  border-radius: 8px;\n  margin-right: -5px;\n  background: none;\n  background-color: var(--tieba-theme-color);\n  color: var(--elem-color);\n  text-align: center;\n}\n\n#onekey_sign .onekey_btn::after {\n  content: "一键签到";\n}\n\n#onekey_sign a.signed_btn .icon_signed {\n  /* 已签到标记 */\n  margin-top: 2px;\n  background: var(--svg-checkmark);\n  background-repeat: no-repeat;\n  background-size: 20px;\n  filter: drop-shadow(var(--elem-color) 0 9999px);\n  transform: translateY(-9999px);\n}\n\n#onekey_sign .onekey_btn:hover {\n  box-shadow: 0 0 10px var(--tieba-theme-color);\n}\n\n.u-f-w {\n  /* 进吧 div */\n  padding-bottom: 20px;\n}\n\n.left-cont-fixed {\n  /* 进吧 div 固定 */\n  position: relative;\n  bottom: 0;\n}\n\n.u-f-w .sign,\n.u-f-w .unsign,\n.always-forum-item .sign,\n.always-forum-item .unsign {\n  /* 进吧按钮 */\n  border-radius: 8px;\n  background: none;\n  background-color: var(--light-background);\n  color: var(--default-fore);\n}\n\n.u-f-w .sign,\n.always-forum-item .sign {\n  /* 已签到 */\n  background-color: var(--tieba-theme-background);\n  color: var(--tieba-theme-fore);\n}\n\n.u-f-w .sign,\n.u-f-w .unsign {\n  margin-bottom: 8px;\n}\n\n.u-f-w .sign:hover,\n.u-f-w .unsign:hover,\n.always-forum-item .sign:hover,\n.always-forum-item .unsign:hover {\n  background: none;\n  background-color: var(--tieba-theme-color);\n  box-shadow: 0 0 10px var(--tieba-theme-color);\n  color: var(--elem-color);\n  -webkit-text-decoration: none;\n  text-decoration: none;\n}\n\n.u-f-w .more {\n  /* “查看更多”按钮 */\n  border: none;\n  border-radius: 8px;\n  background: none;\n  background-color: var(--elem-color);\n  box-shadow: none;\n  color: var(--default-fore);\n}\n\n.more-txt {\n  /* “查看更多”按钮文字 */\n  color: var(--default-fore);\n}\n\n.u-f-w .more-hover {\n  width: 188px;\n  margin: auto;\n  background-color: var(--tieba-theme-color);\n  box-shadow: 0 0 10px var(--tieba-theme-color);\n  color: var(--elem-color);\n}\n\n.u-f-w .more-hover .more-txt,\n.u-f-w .more:hover .more-txt {\n  margin-left: 60px;\n  color: var(--elem-color);\n}\n\n.always-forum-title {\n  /* 展开标题 */\n  border: none;\n  margin-top: 10px;\n}\n\n#alwayforum-wraper {\n  /* 关注吧展开 */\n  background-color: var(--elem-color);\n}\n\n.pop-up-frame {\n  /* 展开页面 */\n  border: none;\n  border-radius: 24px;\n  background-color: var(--elem-color);\n  border-bottom-left-radius: 0;\n  box-shadow: none;\n}\n\n.always-forum-close {\n  /* 展开叉号 */\n  display: none;\n}\n\n.always-forum-item .addnewforumbtn {\n  /* “添加爱逛的吧”按钮 */\n  width: 110px;\n  padding-left: 0;\n  border-radius: 8px;\n  background: none;\n  background-color: var(--tieba-theme-background);\n  color: var(--tieba-theme-fore);\n  font-size: 20px;\n  text-align: center;\n}\n\n.always-forum-item .addnewforumbtn::after {\n  content: "+";\n}\n\n.always-forum-item .addnewforumbtn:hover {\n  background-color: var(--tieba-theme-color);\n  box-shadow: 0 0 10px var(--tieba-theme-color);\n  color: var(--elem-color);\n}\n\n.tbui_scroll_panel .tbui_scroll_button {\n  /* 展开滚动条 */\n  width: 6px;\n  border: none;\n  border-radius: 24px;\n  background-color: var(--very-light-background);\n}\n\n.tbui_scroll_panel .tbui_scroll_bar {\n  width: 6px;\n  /* 滚动条背景 */\n  background: none;\n}\n\n.forum_rcmd .class_title > div {\n  /* 热门吧 icon */\n  color: var(--default-fore);\n}\n\n.rcmd_forum_item .forum_name {\n  /* 热门吧标题 */\n  color: var(--default-fore);\n}\n\n.rcmd_forum_item .rcmd_forum_logo {\n  /* 热门吧图片 */\n  border: none;\n  border-radius: 16px;\n  background: none;\n}\n\n/* 动态 */\n.page-container .r-left-sec,\n.sub_nav_wrap,\n.title-tag-wraper,\n.thread-name-wraper,\n.n_reply {\n  width: 780px;\n}\n\n.n_txt {\n  /* 动态正文 */\n  width: 720px;\n  color: var(--light-fore);\n}\n\n.sub_nav_wrap {\n  /* 动态切换 */\n  background: none;\n  background-color: var(--default-background);\n  box-shadow: none;\n}\n\n.sub_nav_list a.cur {\n  /* 当前标签 */\n  border: none;\n  color: var(--tieba-theme-color);\n}\n\n.sub_nav_list .nav_hover {\n  width: 56px !important;\n}\n\n.sub_nav_list .nav_hover {\n  /* 标签色块 */\n  border-bottom: 3px solid var(--tieba-theme-color);\n}\n\n.sub_nav_list li.sub_nav_line {\n  /* 标签分隔符 */\n  background: none;\n}\n\n/* 右侧悬停 */\n.page-container .r-right-sec {\n  display: none;\n}\n\n.item_hd {\n  /* “贴吧热议榜”标题 */\n  border: none;\n  border-radius: 24px;\n  background-color: var(--default-background);\n  color: var(--default-fore);\n}\n\n.item_hd .title {\n  color: var(--default-fore);\n}\n\n.topic_list .topic_item .topic_flag_hot {\n  /* 热点数字编号 */\n  border-radius: 4px;\n}\n\n.item .item_hd {\n  /* 公告板标题 */\n  border: none;\n  background-color: var(--default-background);\n  color: var(--default-fore);\n}\n\n.item .item_hd .title {\n  color: var(--default-fore);\n}\n\n.notice-wrap-fixed {\n  /* 公告板悬停 */\n  background-color: var(--default-color);\n  border-bottom-left-radius: 24px;\n  border-bottom-right-radius: 24px;\n}\n\n.notice,\n.notice img {\n  /* 公告板图片 */\n  border-radius: 24px;\n}\n\n/* 动态内容 */\n.new_list .title {\n  /* 贴子标题 */\n  color: var(--tieba-theme-color);\n}\n\n.new_list .title:hover {\n  color: var(--tieba-theme-color);\n  -webkit-text-decoration: underline;\n  text-decoration: underline;\n}\n\n.title-tag-wraper a {\n  /* 动态贴吧名 */\n  padding: 4px 10px;\n  border-radius: 24px;\n  background-color: var(--light-background);\n  color: var(--light-fore);\n  font-size: 12px;\n}\n\n.title-tag-wraper a:hover {\n  color: var(--light-fore);\n  -webkit-text-decoration: none;\n  text-decoration: none;\n}\n\n.list-post-num {\n  /* 贴子回复数 */\n  top: 0;\n  padding: 4px 10px;\n  border: none;\n  border-radius: 16px;\n  background-color: var(--tieba-theme-background);\n  color: var(--tieba-theme-fore);\n}\n\n.list-triangle-border,\n.list-triangle-body {\n  /* 贴子回复数三角 */\n  display: none;\n}\n\n.new_list .post_author {\n  /* 作者 */\n  padding: 0;\n  margin-bottom: 24px;\n  background: none;\n  color: var(--default-fore);\n  -webkit-text-decoration: none;\n  text-decoration: none;\n}\n\n.new_list .time {\n  /* 时间 */\n  padding: 0;\n  background: none;\n}\n\n.topic-tag {\n  /* 动态话题 */\n  display: none;\n}\n\n.n_img img {\n  /* 动态图片 */\n  border: none;\n  border-radius: 16px;\n  cursor: pointer;\n}\n\n.n_img li {\n  border-radius: 16px;\n}\n\n.n_img li .feed_highlight {\n  /* 图片放大 */\n  background: none;\n  cursor: pointer;\n}\n\n.media_box {\n  /* 图片控件 */\n  border: none;\n  border-radius: 16px;\n  background-color: var(--light-background);\n}\n\n.media_box img {\n  border-radius: 16px;\n  cursor: pointer;\n}\n\n.ui_btn {\n  /* “进入贴子”按钮 */\n  border: none;\n  border-radius: 24px;\n  background: none;\n  background-color: var(--tieba-theme-color);\n  color: var(--default-background);\n}\n\n.ui_btn:hover {\n  -webkit-text-decoration: none !important;\n  text-decoration: none !important;\n}\n\n.ui_btn:hover {\n  background: none;\n  background-color: var(--tieba-theme-color);\n  box-shadow: 0 0 10px var(--tieba-theme-color);\n  color: var(--default-background);\n}\n\n.btn_more {\n  /* 更多按钮 */\n  width: 200px;\n  height: auto;\n  height: initial;\n  border-radius: 24px;\n  background: none;\n  background-color: var(--tieba-theme-background);\n}\n\n.btn_more:hover,\n.data_error_bar a:hover,\n.btn_more a:hover {\n  background: none !important;\n  background-color: var(--tieba-theme-color) !important;\n  color: var(--default-background) !important;\n}\n\n.data_error_bar a,\n.btn_more a {\n  border: none;\n  color: var(--tieba-theme-fore);\n}\n\n/* 页脚 */\n.bottom-bg {\n  background: none;\n}\n\n.footer {\n  border-top: 1px solid var(--light-background);\n  background-color: var(--light-background);\n}\n\n/* 无关内容 */\n.f-d-w,\n.left-cont-wraper .ufw-gap {\n  display: none;\n}\n\n/* 底部加载 gif */\n#data_loading img {\n  display: none;\n}';
    const threadCSS$1 = '@charset "UTF-8";\n.d_name a:hover,\n#container .content a.at:hover {\n  -webkit-text-decoration: none;\n  text-decoration: none;\n}\n\n.l_reply_num {\n  color: inherit !important;\n}\n\n.l_reply_num {\n  /* 回帖信息 */\n}\n\n#j_navtab_game,\n.nav_list .more-config-navtab {\n  /* 游戏 tab */\n  display: none;\n}\n\n#j_navtab_wanle {\n  /* 玩乐 tab */\n  display: none;\n}\n\n.nav_wrap_add_border {\n  border: none;\n}\n\n#head {\n  /* 背景 */\n  background: none;\n  background-color: transparent;\n}\n\n/* 内容 */\n#container .content {\n  border-radius: 24px;\n  background: transparent none repeat 0 0 / auto auto padding-box border-box scroll;\n  background: initial;\n}\n\n.card_top_wrap {\n  background: none !important;\n  background-color: var(--elem-color) !important;\n}\n\n.card_top_wrap {\n  border-radius: 24px 24px 0 0;\n}\n\n.card_top_theme2 {\n  border: none;\n  margin-right: 0;\n}\n\n/* 去除无关内容 */\n#novel-ranking .novel-ranking-frs-body,\n.novel-award-aside {\n  /* 小说人气榜相关 */\n  display: none;\n}\n\n/* 吧图标 */\n.card_head,\n.plat_head_theme2 .plat_picbox {\n  top: -32px !important;\n  width: 64px !important;\n  height: 64px !important;\n  padding: 0 !important;\n  padding: initial !important;\n  border: 4px solid var(--border-color) !important;\n  border-radius: 24px !important;\n  background: none !important;\n}\n.card_head,\n.plat_head_theme2 .plat_picbox {\n  overflow: hidden;\n}\n\n.card_head_img,\n.plat_head_theme2 .plat_picbox img {\n  width: 64px !important;\n  height: 64px !important;\n}\n\n/* 吧名 */\n.card_title,\n.plat_title_h3 {\n  margin: 5px 20px 0;\n}\n\n.card_top_theme2 .card_title_fname,\n.plat_title_h3,\n.plat_title_h3:hover,\n.plat_title_h3:visited {\n  color: var(--highlight-fore);\n}\n\n.islike_focus {\n  margin-top: 4px !important;\n}\n\n.islike_focus {\n  /* 关注吧按钮 */\n  border-radius: 24px;\n  background: none;\n  background-color: var(--tieba-theme-color);\n  color: var(--elem-color);\n  font-size: 14px;\n  line-height: 28px;\n  text-align: center;\n}\n\n.islike_focus::after {\n  content: "关注";\n}\n\n.cancel_focus {\n  /* 取关吧按钮 */\n  width: 72px;\n  border: 2px solid var(--trans-tieba-theme-color);\n  border-radius: 24px;\n  background: none;\n  background-color: var(--tieba-theme-background);\n  color: var(--tieba-theme-fore);\n  font-size: 14px;\n  line-height: 28px;\n  text-align: center;\n}\n\n.cancel_focus::after {\n  content: "已关注";\n}\n\n.card_top_right {\n  /* 签到按钮 container */\n  margin-top: 20px;\n}\n\n.sign_box_bright {\n  width: 140px !important;\n  height: 40px !important;\n}\n\n.sign_box_bright {\n  /* 签到按钮 */\n  border: 2px solid var(--trans-tieba-theme-color);\n  border-radius: 24px;\n  background: none;\n  background-color: var(--tieba-theme-color);\n  color: var(--default-background);\n  font-size: 18px;\n  line-height: 40px;\n  text-align: center;\n}\n\n.sign_btn_bright::before {\n  color: var(--elem-color);\n  content: "签到";\n}\n\n.sign_box_bright_signed {\n  /* 签到按钮:已签到 */\n  background-color: var(--tieba-theme-background);\n  text-align: inherit;\n}\n\n.sign_today_date,\n.sign_month_lack_days {\n  /* 签到日期等 */\n  display: none;\n}\n\n.sign_keep_span {\n  width: 140px !important;\n}\n\n.sign_keep_span {\n  height: 40px;\n}\n\n.sign_keep_span,\n.sign_mod_bright .sign_keep_span {\n  /* 已签到按钮文本 */\n  margin: 0;\n  margin: initial;\n  color: var(--tieba-theme-fore);\n  font-size: 12px;\n  text-align: center;\n}\n\n.sign_box_bright_signed::before {\n  content: none !important;\n}\n\n.sign_mod_bright .sign_keep_span::before {\n  content: "已签到 | ";\n}\n\n.jump_input_bright {\n  padding: 0 10px;\n  /* 跳页文本框 */\n  border-color: var(--border-color);\n  border-radius: 16px;\n}\n\n/* 标题 */\n.left_section {\n  background: none;\n}\n\n.core_title_wrap_bright {\n  /* 标题栏 */\n  border-color: var(--border-color);\n  -webkit-backdrop-filter: blur(24px);\n          backdrop-filter: blur(24px);\n  background-color: var(--trans-default-background);\n}\n\n.core_title_theme_bright,\n.core_title_absolute_bright .core_title_theme_bright {\n  /* 部分吧标题栏 */\n  border-color: var(--border-color);\n  background: none;\n}\n\n.left_section .core_title_absolute_bright {\n  -webkit-backdrop-filter: blur(24px);\n          backdrop-filter: blur(24px);\n  background-color: var(--trans-default-background);\n}\n\n.core_title_txt {\n  /* 标题文字 */\n  margin-left: 24px;\n  background: none;\n}\n\n.tittle_fill_dom.filled {\n  background-color: var(--default-background);\n}\n\n.core_title h1 {\n  /* 部分吧标题 */\n  margin-left: 0;\n  color: var(--highlight-fore);\n}\n\n.nav_wrap {\n  background-image: none !important;\n}\n\n.nav_wrap {\n  border-color: var(--border-color);\n  background-color: var(--light-background);\n  /* 导航 */\n}\n\n.nav_list a.nav_icon,\n.nav_list .tbnav_arrow {\n  /* 部分吧导航栏 */\n  padding-left: 22px;\n  background: transparent none repeat 0 0 / auto auto padding-box border-box scroll;\n  background: initial;\n}\n\n.nav_wrap,\n.nav_list .space,\n.nav_list .focus,\n.nav_list li:hover,\n.nav_list li:hover .tbnav_tab_inner,\n.nav_list .focus .tbnav_tab_inner {\n  background: transparent none repeat 0 0 / auto auto padding-box border-box scroll;\n  background: initial;\n}\n\n.nav_list a {\n  color: var(--default-fore);\n}\n\nspan.tP {\n  color: var(--highlight-fore) !important;\n}\n\nspan.tP {\n  /* 强调字 */\n}\n\n.thread_theme_5 {\n  /* 跳页 */\n  width: auto;\n  width: initial;\n  border-color: var(--border-color);\n  border-right: none;\n  border-left: none;\n  background-color: var(--light-background);\n}\n\n.btn_sub,\n.btn-sub,\n.btn-sub-b,\n.core_title_btns li a,\n.p_favthr_main {\n  border: none;\n  border-radius: 8px;\n  /* 部分按钮 */\n  background: none;\n  background-color: var(--tieba-theme-background);\n  color: var(--tieba-theme-fore);\n}\n\n.btn_sub:hover,\n.btn-sub:hover,\n.btn-sub-b:hover,\n.btn_sub:active,\n.btn-sub:active,\n.btn-sub-b:active,\n.btn_sub:focus,\n.btn-sub:focus,\n.btn-sub-b:focus {\n  background-color: var(--tieba-theme-color);\n  color: var(--default-background);\n}\n\n.l_lzonly:hover,\n.p_favthr_main:hover {\n  background-color: var(--tieba-theme-color) !important;\n  color: var(--default-background) !important;\n}\n\n.l_lzonly:hover,\n.p_favthr_main:hover {\n  /* 部分吧按钮 hover */\n}\n\n#quick_reply {\n  /* 回复按钮 */\n  display: none;\n}\n\n.d_lzonly_bdaside,\n.p_favthr_main p,\n.j_quick_reply,\n.j_lzl_p a {\n  /* 部分吧按钮字体 */\n  color: inherit;\n}\n\n.j_quick_reply {\n  /* 部分吧额头 */\n  padding-left: 0;\n  padding-left: initial;\n}\n\n.l_post_bright {\n  width: auto;\n  width: initial;\n  border-color: var(--border-color);\n  /* 左侧用户信息 */\n  background: none;\n}\n\n.p_author_face {\n  background: none !important;\n}\n\n.p_author_face {\n  border: none;\n  /* 层主头像边框 */\n}\n\n.icon_relative img {\n  /* 层主头像 */\n  border-radius: 16px;\n}\n\n.d_name .p_author_name {\n  /* 层主名 */\n  color: var(--tieba-theme-fore);\n}\n\n.novel-level-icon {\n  /* 小说等级图标 */\n  display: none;\n}\n\n.d_badge_bright,\n.user_level .badge {\n  /* 等级头衔 */\n  border: 1px solid var(--border-color);\n  border-radius: 24px;\n  background-color: var(--light-background);\n}\n\n.user_level .badge_name {\n  /* 等级头衔文本 */\n  color: inherit;\n}\n\n.d_badge_bright .d_badge_title {\n  padding-left: 4px;\n  color: var(--default-fore);\n}\n\n.d_badge_bright .d_badge_lv,\n.user_level .badge_index {\n  background-image: none !important;\n}\n\n.d_badge_bright .d_badge_lv,\n.user_level .badge_index {\n  /* 等级图标 */\n  background-color: var(--tieba-theme-background);\n  color: var(--tieba-theme-fore);\n}\n\n.d_badge_lv,\n.user_level .badge_index {\n  top: auto !important;\n  top: initial !important;\n  left: 60px !important;\n  width: auto !important;\n  width: initial !important;\n  height: 8px !important;\n  padding: 0 4px !important;\n  margin: 12px 4px !important;\n  font-family: inherit !important;\n  line-height: 2px !important;\n}\n\n.d_badge_lv,\n.user_level .badge_index {\n  border-radius: 16px;\n  font-size: 14px;\n  font-style: italic;\n}\n\n.d_badge_icon1 .d_badge_lv,\n.tieba-lvl-green {\n  background-color: var(--level-green-background) !important;\n  color: var(--level-green-fore) !important;\n}\n\n.d_badge_icon1 .d_badge_lv,\n.tieba-lvl-green {\n  /* 绿牌 */\n}\n\n.d_badge_icon2 .d_badge_lv,\n.d_badge_icon2_1 .d_badge_lv,\n.d_badge_icon2_2 .d_badge_lv,\n.tieba-lvl-blue {\n  background-color: var(--level-blue-background) !important;\n  color: var(--level-blue-fore) !important;\n}\n\n.d_badge_icon2 .d_badge_lv,\n.d_badge_icon2_1 .d_badge_lv,\n.d_badge_icon2_2 .d_badge_lv,\n.tieba-lvl-blue {\n  /* 蓝牌 */\n}\n\n.d_badge_icon3 .d_badge_lv,\n.d_badge_icon3_1 .d_badge_lv,\n.d_badge_icon3_2 .d_badge_lv,\n.tieba-lvl-yellow {\n  background-color: var(--level-yellow-background) !important;\n  color: var(--level-yellow-fore) !important;\n}\n\n.d_badge_icon3 .d_badge_lv,\n.d_badge_icon3_1 .d_badge_lv,\n.d_badge_icon3_2 .d_badge_lv,\n.tieba-lvl-yellow {\n  /* 黄牌 */\n}\n\n.d_badge_icon4 .d_badge_lv,\n.d_badge_icon4_1 .d_badge_lv,\n.d_badge_icon4_2 .d_badge_lv,\n.tieba-lvl-orange {\n  background-color: var(--level-orange-background) !important;\n  color: var(--level-orange-fore) !important;\n}\n\n.d_badge_icon4 .d_badge_lv,\n.d_badge_icon4_1 .d_badge_lv,\n.d_badge_icon4_2 .d_badge_lv,\n.tieba-lvl-orange {\n  /* 橙牌 */\n}\n\n.d_badge_bawu1 .d_badge_lv,\n.d_badge_bawu2 .d_badge_lv {\n  text-indent: inherit !important;\n}\n\n.d_badge_bawu1 .d_badge_lv,\n.d_badge_bawu2 .d_badge_lv {\n  /* 吧务 */\n}\n\n.d_author .d_pb_icons {\n  /* 印记 */\n  display: none;\n}\n\n.icon_book_link_icon {\n  /* 查看我的印记 */\n  display: none;\n}\n\n.region_bright {\n  /* 右侧信息 */\n  border: none;\n  margin-top: 12px;\n  background: none;\n  background-color: var(--elem-color);\n}\n\n.region_bright .region_title {\n  color: var(--default-fore) !important;\n}\n\n#celebrity {\n  display: none;\n}\n\n.balv_mod .media_left,\n.balv_mod .media-left {\n  /* 我的头像 */\n  border: none;\n}\n\n.right_section .tieba_notice {\n  /* 右侧反馈 */\n  background: none;\n}\n\n.topic_list_box {\n  /* 右侧贴吧热议榜 */\n  display: none;\n  background-color: var(--default-background);\n}\n\n.pb_content {\n  /* 容器:右侧剩余部分 */\n  border: none;\n  background: none;\n  background-color: var(--elem-color);\n}\n\n.notice-icon,\n.right_section .tieba_notice {\n  padding-left: 0 !important;\n  padding-left: initial !important;\n  background: none !important;\n}\n\n.notice-icon,\n.right_section .tieba_notice {\n  /* 右侧反馈 */\n}\n\n.tieba_notice li {\n  background: none;\n}\n\n/* 正文 */\n.p_content {\n  border: none;\n  background-color: var(--default-background);\n}\n\n.forbid-speech-banner {\n  /* 楼主屏蔽 */\n  border-top: none;\n}\n\n.BDE_Image {\n  /* 正文图片 */\n  border-radius: 24px;\n}\n\n.BDE_Image:first-child {\n  margin-top: 8px;\n}\n\n.share_btn_wrapper {\n  /* 分享控件 */\n  display: none;\n}\n\n.post-tail-wrap .icon-jubao {\n  /* 楼层举报 */\n  display: none;\n}\n\n.post-tail-wrap .icon-jubao::after {\n  content: "举报";\n}\n\n.post-tail-wrap .tail-info {\n  /* 楼层超链接 */\n  color: var(--minimal-fore);\n}\n\n.j_jb_ele .tail-info {\n  color: var(--tieba-theme-fore) !important;\n}\n\n.j_jb_ele .tail-info {\n  /* 举报超链接 */\n}\n\n.complaint {\n  color: var(--tieba-theme-fore) !important;\n}\n\n.complaint {\n  /* 部分吧楼层举报 */\n  padding-right: 4px;\n  background: none;\n}\n\n.complaint::after {\n  content: "举报";\n}\n\n.post-tail-wrap .question-image:hover::before {\n  /* IP属地说明 */\n  border-color: var(--border-color);\n  border-radius: 8px;\n  background-color: var(--light-background);\n  color: var(--default-fore);\n}\n\n.post_bubble_top,\n.post_bubble_bottom {\n  /* 特殊气泡 */\n  display: none;\n}\n\n.post_bubble_middle {\n  background: none !important;\n}\n\n.post_bubble_middle {\n  width: auto;\n  width: initial;\n  padding: 0;\n  padding: initial;\n}\n\n.save_face_bg_2 {\n  /* 会员右上角标记 */\n  display: none;\n}\n\n.replace_div .replace_tip {\n  /* 展开图片 */\n  border-color: var(--border-color);\n  background-color: var(--elem-color);\n}\n\n.achievement_medal_section {\n  /* 成就徽章 */\n  display: none;\n}\n\n.l_post_bright .d_post_content_main .d_sign_split {\n  /* 签名档分割线 */\n  border-bottom: 1px solid var(--border-color);\n}\n\n/* 回复 */\n.d_post_content_main {\n  background-color: var(--default-background) !important;\n}\n\n.lzl_p_p {\n  /* 回复头像边框 */\n  border: none;\n}\n\n.lzl_p_p img {\n  /* 回复头像 */\n  border-radius: 8px;\n}\n\n.core_reply_wrapper {\n  border: 1px solid var(--border-color) !important;\n  border-radius: 16px !important;\n  margin-bottom: 16px !important;\n  background: none !important;\n  background-color: var(--very-light-background) !important;\n  color: var(--default-fore) !important;\n}\n\n.core_reply_wrapper {\n  /* 回复 */\n  /* border-top-right-radius: 0 !important; */\n}\n\n.core_reply_content li {\n  border-top: 0;\n  border-top: initial;\n}\n\n.core_reply_content li.first_no_border {\n  margin-top: 6px;\n}\n\n.lzl_content_main {\n  /* 回复文字 */\n  color: var(--default-fore);\n}\n\n.l_post_bright .core_reply_wrapper .core_reply_border_top,\n.core_reply_border_bottom,\n.l_post_bright .core_reply_wrapper .core_reply_content {\n  border: none;\n  background: none;\n}\n\n.lzl_link_fold {\n  display: none !important;\n  border: 1px solid var(--border-color) !important;\n  border-bottom: none !important;\n  background-color: var(--very-light-background) !important;\n}\n\n.lzl_link_fold {\n  /* 收起回复 */\n  border-radius: 8px 8px 0 0;\n  color: var(--tieba-theme-fore);\n}\n\n.core_reply div.hideLzl {\n  /* 加载回复 */\n  background: none;\n  background-color: var(--very-light-background);\n}\n\n.core_reply_wrapper .loading_reply {\n  /* 加载动画 */\n  display: none;\n}\n\n.lzl_cnt .lzl_s_r {\n  /* 回复超链接 */\n  color: var(--tieba-theme-fore);\n}\n\n.lzl_li_pager_s .lzl_more,\n.lzl_more span {\n  /* 还有x条回复 */\n  color: var(--light-fore);\n}\n\n.j_lzl_m {\n  /* 点击查看 */\n  color: var(--tieba-theme-fore);\n}\n\n.lzl_cnt .lzl_time {\n  color: var(--minimal-fore);\n}\n\n.lzl_jb_in,\n.user-jubao-button {\n  /* 楼中楼举报 */\n  background: none;\n  color: var(--tieba-theme-fore);\n}\n\n.lzl_jb_in::after,\n.user-jubao-button::after {\n  content: "举报";\n}\n\n.lzl_cnt .lzl_content_main {\n  display: block;\n}\n\n/* .core_reply .hideLzl {\n    opacity: 0;\n    height: 0;\n}\n\n.core_reply div:not(.hideLzl) {\n    opacity: 1;\n    height: unset;\n} */\n/* 贴子内容超链接 */\n.d_post_content a,\n.lzl_cnt .lzl_content_main a:not(.at) {\n  margin: auto 2px;\n  color: var(--tieba-theme-fore);\n  /* text-decoration: underline 1.2px; */\n  transition: 0.4s;\n}\n\n/* .d_post_content a:hover,\n.d_post_content a:focus,\n.lzl_cnt .lzl_content_main a:not(.at):hover,\n.lzl_cnt .lzl_content_main a:not(.at):focus {\n    background-color: var(--trans-light-background);\n    text-decoration: none;\n} */\n.pager_theme_5 a,\n.pager_theme_5 span,\n.jump_btn_bright {\n  /* 跳页按钮 */\n  border-color: var(--default-background);\n  border-radius: 8px;\n  background: none;\n  background-color: var(--default-background);\n  color: var(--minimal-fore);\n}\n\n.pager_theme_5 a:hover,\n.jump_btn_bright:hover {\n  border-color: var(--tieba-theme-color);\n  background-color: var(--tieba-theme-color);\n  color: var(--default-background);\n}\n\n/* 底部 */\n.thread_theme_7 {\n  /* 顶栏 */\n  width: auto;\n  width: initial;\n  border-color: var(--border-color);\n  background-color: var(--light-background);\n}\n\n#pb-footer-header {\n  background-color: var(--default-background);\n}\n\n#tb_rich_poster_container {\n  /* 内容 */\n  width: auto;\n  width: initial;\n  border-radius: 24px;\n  background-color: var(--default-background);\n}\n\n.poster_head_text a.cur {\n  color: var(--highlight-fore) !important;\n}\n\n.edui-editor-body {\n  border-color: var(--border-color) !important;\n}\n\n.edui-editor-body {\n  /* 文本框 */\n  border-radius: 16px;\n  background: none;\n}\n\n.edui-container .edui-editor-body.body-container-focus,\n.edui-container .edui-editor-body.body-container-focus .edui-body-container {\n  border-color: var(--tieba-theme-color) !important;\n}\n\n.old_style_wrapper {\n  border-color: var(--border-color);\n  border-radius: 24px;\n  background-color: var(--elem-color);\n}\n\n.edui-editor-body .edui-body-container {\n  width: auto !important;\n  width: initial !important;\n}\n\n.edui-editor-body .edui-body-container {\n  /* 全部文本框 */\n  border-radius: 16px;\n  background: var(--default-background);\n}\n\n.edui-toolbar .edui-btn-toolbar,\n.edui-container .edui-toolbar {\n  margin-top: 4px;\n  /* 工具栏 */\n  background-color: var(--elem-color);\n}\n\n.pb_footer {\n  width: auto;\n  width: initial;\n  border: none;\n  border-color: var(--border-color);\n  background: none;\n}\n\n.save-to-quick-reply-btn {\n  /* “保存至快速回贴”按钮 */\n  border-color: var(--border-color);\n  background: none;\n  background-color: var(--light-background);\n  color: inherit;\n}\n\n.save-to-quick-reply-btn span {\n  color: var(--tieba-theme-fore);\n}\n\n.footer {\n  display: none;\n}\n\n.skin_normal .wrap2 {\n  background: none;\n  background-color: var(--page-background);\n}\n\n#lcsas-container {\n  display: none;\n}\n\n/* TODO: 隐藏用户3天 */\n.user-hide-post-down,\n.user-hide-post-up {\n  background-color: var(--light-fore);\n  background-position: center;\n  background-repeat: no-repeat;\n  background-size: 16px;\n  -webkit-mask: var(--svg-arrow-down-circle);\n          mask: var(--svg-arrow-down-circle);\n  /* filter: drop-shadow(var(--minimal-fore) 0 -9999px);\n  transform: translateY(9999px); */\n  opacity: 0;\n}\n\n/* 选择搜索 */\n#selectsearch-icon {\n  display: none;\n}\n\n/* TODO: 用户卡片 */\n.ui_card_wrap {\n  background: none;\n}\n\n.ui_card_content {\n  border-color: var(--border-color);\n  border-radius: 16px;\n  background: none;\n  box-shadow: 0 0 20px rgba(0, 0, 0, 0.2);\n}\n\n.card_userinfo_wrap {\n  background: none;\n  background-color: var(--default-background);\n}\n\n.card_userinfo_left .userinfo_head {\n  /* 头像边框 */\n  background: none;\n}\n\n.j_avatar img {\n  width: 92px;\n  height: 92px;\n  border: 4px solid var(--border-color);\n  border-radius: 24px;\n  -webkit-backdrop-filter: blur(24px);\n          backdrop-filter: blur(24px);\n}\n\n.card_userinfo_middle .userinfo_sex {\n  background: none;\n}\n\n.userinfo_sex_male::after {\n  content: "♂";\n}\n\n.userinfo_sex_female::after {\n  content: "♀";\n}\n\n.ui_card_wrap .ui_white_down,\n.ui_card_wrap .ui_white_up {\n  /* 三角 */\n  display: none;\n}\n\n.card_userinfo_guide {\n  /* 右上角 */\n  display: none;\n}\n\n.user_card_loading {\n  /* 加载 */\n  background-color: var(--default-background);\n}\n\n.user_card_loading img {\n  display: none;\n}\n\n/* TODO: 第三方内容吧适配 */\n/* 由第三方提供的吧 */\n/* 进吧导航 */\n.plat_head_theme2,\n.plat_header {\n  border: none;\n  background-color: transparent;\n  background-color: initial;\n}';
    const forumCSS = '@charset "UTF-8";\nhtml {\n  padding: 0;\n  margin: 0;\n  text-align: justify;\n}\n\nbody {\n  padding: 0;\n  margin: 0;\n  font-family: var(--code-zh);\n}\nbody[no-scrollbar] {\n  overflow: hidden;\n}\n\ndiv,\np {\n  margin: 0;\n}\n\nselect {\n  padding: 1px 8px;\n  border: 1px solid var(--border-color);\n  border-radius: 8px;\n  cursor: pointer;\n}\n\noption {\n  cursor: pointer;\n}\n\noption:checked {\n  background-color: var(--tieba-theme-color);\n  color: var(--default-background);\n}\n\na {\n  color: inherit;\n  -webkit-text-decoration: none;\n  text-decoration: none;\n}\n\n.dialogJ {\n  position: fixed !important;\n  top: 50% !important;\n  left: 50% !important;\n}\n\n.dialogJ {\n  transform: translate(-50%, -50%);\n}\n\n.search_internal_btn::after, .icon_author::after, .icon_replyer::after {\n  font-family: "Material Symbols", monospace;\n  font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 40;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n\n.threadlist_title a,\n.threadlist_title a:hover,\n.threadlist_title a:visited {\n  color: var(--tieba-theme-fore) !important;\n}\n\n.u_menu_item a {\n  color: inherit !important;\n}\n\n.u_menu_item a {\n  /* 顶部菜单 */\n}\n\n.card_banner,\n.plat_recom_carousel {\n  display: none !important;\n}\n\n.card_banner,\n.plat_recom_carousel {\n  /* 大卡 */\n}\n\n.search_main {\n  /* 固定搜索栏 */\n  padding-bottom: 0;\n  padding-bottom: initial;\n}\n\n.search_bright {\n  margin-bottom: 36px;\n}\n\n.search_bright .search_logo_fixed {\n  /* 固定搜索栏 icon */\n  width: 36px;\n  height: 36px;\n  margin-left: 56px;\n  background-color: rgba(0, 0, 0, 0);\n  background-image: var(--img-tieba-icon);\n  background-repeat: no-repeat;\n}\n\n.search_main_fixed {\n  border-color: var(--border-color);\n  -webkit-backdrop-filter: blur(24px);\n          backdrop-filter: blur(24px);\n  background-color: var(--trans-default-background);\n  box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);\n}\n\n.card_top_theme {\n  border: none !important;\n}\n\n#content {\n  /* 容器 */\n  width: 982px;\n}\n\n.card_top_theme .card_top {\n  padding-left: 120px !important;\n}\n\n.card_top_theme .card_top {\n  /* 吧标题容器 */\n}\n\n.card_title_fname {\n  color: var(--tieba-theme-fore) !important;\n}\n\n.card_title_fname {\n  /* 吧标题 */\n  font-weight: bold;\n}\n\n.card_slogan {\n  color: var(--light-fore) !important;\n}\n\n.card_slogan {\n  /* 吧 slogan */\n}\n\n.islike_focus {\n  background-color: var(--tieba-theme-color) !important;\n  background-image: none !important;\n}\n\n.islike_focus {\n  /* 关注吧按钮 */\n}\n\n.cancel_focus {\n  background: none !important;\n  background-color: var(--tieba-theme-background) !important;\n}\n\n.cancel_focus {\n  /* 取关吧按钮 */\n}\n\n.sign_box_bright,\n.sign_box_bright_hover {\n  background: none !important;\n  background-color: var(--tieba-theme-color) !important;\n}\n\n.sign_box_bright,\n.sign_box_bright_hover {\n  /* 签到按钮 */\n}\n\n.sign_box_bright_signed,\n.sign_box_bright_noclass_hover {\n  background: none !important;\n  background-color: var(--tieba-theme-background) !important;\n}\n\n.sign_box_bright_signed,\n.sign_box_bright_noclass_hover {\n  /* 签到按钮:已签到 */\n}\n\n.sign_mod_bright .sign_keep_span {\n  margin: 0 !important;\n  margin: initial !important;\n  text-align: center !important;\n}\n\n.forum_content {\n  border-color: var(--border-color) !important;\n  border-right: none !important;\n  background: none !important;\n  background-color: var(--elem-color) !important;\n}\n\n.forum_content {\n  /* 容器 */\n}\n\n.nav_wrap {\n  border-color: var(--border-color) !important;\n}\n\n.nav_wrap {\n  /* tab */\n}\n\n.nav_list li.focus {\n  background: none !important;\n}\n\n.nav_list li.focus {\n  /* 焦点 tab */\n}\n\n.nav_list a {\n  color: inherit !important;\n}\n\n.j_tabnav_tab:hover {\n  background: none;\n}\n\n.nav_list a:hover,\n.nav_list a:focus {\n  background-color: var(--elem-color) !important;\n}\n\n.nav_list a:hover,\n.nav_list a:focus {\n  /* tab hover */\n}\n\n.search_internal_input {\n  height: 24px !important;\n  border-color: var(--border-color) !important;\n  color: var(--default-fore) !important;\n}\n\n.search_internal_input {\n  /* 吧内搜索 */\n  border-radius: 8px 0 0 8px;\n}\n\n.search_internal_btn {\n  height: 26px !important;\n  background-color: var(--tieba-theme-color) !important;\n  background-image: none !important;\n  vertical-align: middle !important;\n}\n\n.search_internal_btn {\n  /* 吧内搜索按钮 */\n  border-radius: 0 8px 8px 0;\n  /* background-image: var(--svg-search) !important;\n  background-size: 16px !important;\n  background-repeat: no-repeat !important;\n  background-position: center !important; */\n}\n\n.search_internal_btn::after {\n  color: var(--default-background);\n  content: "search";\n  font-size: 18px;\n  font-weight: bold;\n  line-height: 26px;\n  text-align: center;\n}\n\n.aside_region {\n  border-bottom: none !important;\n}\n\n.aside_region {\n  /* 右侧内容 */\n}\n\n.aside_region .region_header {\n  color: var(--default-fore) !important;\n}\n\n.my_tieba .media_left,\n.my_tieba .media-left {\n  border: none !important;\n}\n\n.my_tieba .media_left,\n.my_tieba .media-left {\n  /* 我的头像 */\n}\n\n.my_current_forum .badge {\n  border: 1px solid var(--border-color) !important;\n  background-color: var(--light-background) !important;\n  color: var(--default-fore) !important;\n}\n\n.my_current_forum .badge {\n  /* 我的等级 */\n}\n\n.my_current_forum .badge_name {\n  color: var(--default-fore) !important;\n}\n\n.media_top img,\n.media-top img {\n  /* 右侧图片 */\n  border-radius: 16px;\n}\n\n.aside_media_horizontal a,\n.aside-media-horizontal a {\n  color: var(--tieba-theme-fore) !important;\n}\n\n.aside_media_horizontal a,\n.aside-media-horizontal a {\n  /* 右侧超链接 */\n}\n\n.threadlist_bright li.thread_top_list_folder,\n.threadlist_bright li.thread_top_list_folder:hover {\n  background-color: var(--very-light-background) !important;\n}\n\n.threadlist_bright li.thread_top_list_folder,\n.threadlist_bright li.thread_top_list_folder:hover {\n  /* 置顶贴 */\n}\n\n.threadlist_bright > li {\n  border: none !important;\n  background-color: var(--default-background) !important;\n}\n\n.threadlist_bright > li {\n  /* 贴子 */\n}\n\n.threadlist_bright > li:hover {\n  background-color: var(--trans-light-background) !important;\n}\n\n.j_th_tit {\n  /* 帖子标题 */\n  color: var(--tieba-theme-fore);\n  font-weight: bold;\n}\n\n.threadlist_bright .threadlist_abs_onlyline,\n.threadlist_bright .threadlist_abs {\n  color: var(--default-fore) !important;\n}\n\n.threadlist_bright .threadlist_abs_onlyline,\n.threadlist_bright .threadlist_abs {\n  /* 帖子摘要 */\n}\n\n/* 隐藏未加载完成的图片 */\n.vpic_wrap img:not([style]) {\n  opacity: 0;\n}\n\n.threadlist_bright .threadlist_media li {\n  border-radius: 8px !important;\n}\n\n.threadlist_bright .threadlist_media li {\n  /* 贴子图片 hover */\n}\n\n.threadlist_media li:hover .threadlist_pic_highlight {\n  display: none !important;\n}\n\n.threadlist_media li:hover .threadlist_pic_highlight {\n  border-radius: 8px;\n}\n\n.vpic_wrap img {\n  border-radius: 8px;\n}\n\n.threadlist_bright .media_disp {\n  border: none !important;\n  background: none !important;\n}\n\n.threadlist_bright .threadlist_video {\n  /* 视频预览 */\n  border-radius: 8px;\n}\n\n.threadlist_rep_num {\n  height: auto !important;\n  height: initial !important;\n  background: none !important;\n  background-color: var(--tieba-theme-background) !important;\n}\n\n.threadlist_rep_num {\n  /* 回贴数 */\n  border-radius: 24px;\n  color: var(--tieba-theme-fore);\n  font-weight: bold;\n}\n\n.pagination-default .pagination-item {\n  border: none !important;\n  background-color: var(--light-background) !important;\n  color: var(--light-fore) !important;\n}\n\n.pagination-default .pagination-item {\n  border-radius: 8px;\n  /* 跳页按钮 */\n}\n\n.pagination-default .pagination-current {\n  border: none !important;\n  background-color: var(--tieba-theme-color) !important;\n  color: var(--default-background) !important;\n}\n\n.pagination-default .pagination-current {\n  /* 跳页按钮:当前 */\n}\n\n.pagination-default .pagination-item:not(.pagination-current):hover {\n  border: none !important;\n  background-color: var(--trans-light-background) !important;\n}\n\n.pagination-default .pagination-item:not(.pagination-current):hover {\n  /* 跳页按钮:hover */\n}\n\n/* 底部 */\n#tb_rich_poster_container {\n  width: 982px !important;\n  background-color: var(--very-light-background) !important;\n}\n#tb_rich_poster_container {\n  border-radius: 0 0 24px 24px;\n  margin-left: -1px;\n}\n\n.tb_rich_poster .poster_body .editor_textfield {\n  border-color: var(--border-color) !important;\n  background-color: var(--default-background) !important;\n  color: var(--default-fore) !important;\n}\n\n.tb_rich_poster .poster_body .editor_textfield {\n  border-radius: 8px;\n  /* 标题文本框 */\n}\n\n.tb_rich_poster .poster_body .editor_textfield:focus {\n  border-color: var(--tieba-theme-color) !important;\n}\n\n.old_style_wrapper {\n  border-color: var(--border-color) !important;\n  background-color: var(--elem-color) !important;\n}\n\n.old_style_wrapper {\n  /* 编辑器容器 */\n}\n\n.old_style_wrapper .edui-editor-body {\n  background: none !important;\n}\n\n.edui-container .edui-toolbar {\n  background: none !important;\n}\n\n.edui-container .edui-toolbar {\n  /* 编辑器工具栏 */\n}\n\n.edui-editor-body .edui-body-container {\n  border-color: var(--border-color) !important;\n  background-color: var(--default-background) !important;\n}\n\n.edui-editor-body .edui-body-container {\n  /* 编辑器 */\n}\n\n.frs_content_footer_pagelet {\n  background: none !important;\n}\n\n.footer {\n  display: none !important;\n}\n\n.icon_author {\n  background-image: none !important;\n}\n\n.icon_author {\n  /* 用户图标 */\n}\n\n.icon_author::after {\n  content: "person";\n  font-style: normal;\n}\n\n.icon_replyer {\n  background-image: none !important;\n}\n\n.icon_replyer {\n  /* 回贴图标 */\n}\n\n.icon_replyer::after {\n  content: "comment";\n  font-style: normal;\n}';
    const errorCSS = '@charset "UTF-8";\n/* 搜索栏 */\n.search-form {\n  background-color: var(--default-background);\n}\n\n.search-form p {\n  display: none;\n}\n\n.page404 {\n  background-color: var(--default-background);\n}\n\n.main-title {\n  color: var(--default-fore);\n}\n\n.main-title a {\n  color: var(--tieba-theme-fore);\n}\n\n.app_download_box {\n  display: none;\n}\n\n#error_404_iframe {\n  display: none;\n}';
    const darkVarsCSS = "html.dark{color-scheme:dark;--el-color-primary:#409eff;--el-color-primary-light-3:#3375b9;--el-color-primary-light-5:#2a598a;--el-color-primary-light-7:#213d5b;--el-color-primary-light-8:#1d3043;--el-color-primary-light-9:#18222c;--el-color-primary-dark-2:#66b1ff;--el-color-success:#67c23a;--el-color-success-light-3:#4e8e2f;--el-color-success-light-5:#3e6b27;--el-color-success-light-7:#2d481f;--el-color-success-light-8:#25371c;--el-color-success-light-9:#1c2518;--el-color-success-dark-2:#85ce61;--el-color-warning:#e6a23c;--el-color-warning-light-3:#a77730;--el-color-warning-light-5:#7d5b28;--el-color-warning-light-7:#533f20;--el-color-warning-light-8:#3e301c;--el-color-warning-light-9:#292218;--el-color-warning-dark-2:#ebb563;--el-color-danger:#f56c6c;--el-color-danger-light-3:#b25252;--el-color-danger-light-5:#854040;--el-color-danger-light-7:#582e2e;--el-color-danger-light-8:#412626;--el-color-danger-light-9:#2b1d1d;--el-color-danger-dark-2:#f78989;--el-color-error:#f56c6c;--el-color-error-light-3:#b25252;--el-color-error-light-5:#854040;--el-color-error-light-7:#582e2e;--el-color-error-light-8:#412626;--el-color-error-light-9:#2b1d1d;--el-color-error-dark-2:#f78989;--el-color-info:#909399;--el-color-info-light-3:#6b6d71;--el-color-info-light-5:#525457;--el-color-info-light-7:#393a3c;--el-color-info-light-8:#2d2d2f;--el-color-info-light-9:#202121;--el-color-info-dark-2:#a6a9ad;--el-box-shadow:0px 12px 32px 4px rgba(0, 0, 0, 0.36),0px 8px 20px rgba(0, 0, 0, 0.72);--el-box-shadow-light:0px 0px 12px rgba(0, 0, 0, 0.72);--el-box-shadow-lighter:0px 0px 6px rgba(0, 0, 0, 0.72);--el-box-shadow-dark:0px 16px 48px 16px rgba(0, 0, 0, 0.72),0px 12px 32px #000000,0px 8px 16px -8px #000000;--el-bg-color-page:#0a0a0a;--el-bg-color:#141414;--el-bg-color-overlay:#1d1e1f;--el-text-color-primary:#E5EAF3;--el-text-color-regular:#CFD3DC;--el-text-color-secondary:#A3A6AD;--el-text-color-placeholder:#8D9095;--el-text-color-disabled:#6C6E72;--el-border-color-darker:#636466;--el-border-color-dark:#58585B;--el-border-color:#4C4D4F;--el-border-color-light:#414243;--el-border-color-lighter:#363637;--el-border-color-extra-light:#2B2B2C;--el-fill-color-darker:#424243;--el-fill-color-dark:#39393A;--el-fill-color:#303030;--el-fill-color-light:#262727;--el-fill-color-lighter:#1D1D1D;--el-fill-color-extra-light:#191919;--el-fill-color-blank:transparent;--el-mask-color:rgba(0, 0, 0, 0.8);--el-mask-color-extra-light:rgba(0, 0, 0, 0.3)}html.dark .el-button{--el-button-disabled-text-color:rgba(255, 255, 255, 0.5)}html.dark .el-card{--el-card-bg-color:var(--el-bg-color-overlay)}html.dark .el-empty{--el-empty-fill-color-0:var(--el-color-black);--el-empty-fill-color-1:#4b4b52;--el-empty-fill-color-2:#36383d;--el-empty-fill-color-3:#1e1e20;--el-empty-fill-color-4:#262629;--el-empty-fill-color-5:#202124;--el-empty-fill-color-6:#212224;--el-empty-fill-color-7:#1b1c1f;--el-empty-fill-color-8:#1c1d1f;--el-empty-fill-color-9:#18181a}";
    const themePlusCSS = "body {\n  --el-color-primary: var(--tieba-theme-color) !important;\n}";
    const darkPrefers = matchMedia("(prefers-color-scheme: dark)");
    const dynCSSRules = {
      customBackground: () => {
        var _a;
        return findIndex(Array.from(((_a = defaultStyle.sheet) == null ? void 0 : _a.cssRules) ?? { length: 0 }), (rule) => rule.selectorText === "body.custom-background");
      }
    };
    function loadBaseCSS() {
      _GM_addStyle(paletteCSS);
      _GM_addStyle(mainCSS);
      _GM_addStyle(utilCSS);
      _GM_addStyle(materialSymbolsCSS);
    }
    async function loadDynamicCSS() {
      const theme = themeColor.get();
      const darkRGBA = hexToRGBA(theme.dark);
      const lightRGBA = hexToRGBA(theme.light);
      const darkHSLA = rgbaToHSLA(darkRGBA);
      const lightHSLA = rgbaToHSLA(lightRGBA);
      const dynCSS = parseMultiCSS({
        ":root": {
          "--content-max": wideScreen.get().noLimit ? "100vw" : `${wideScreen.get().maxPX}px`,
          "--code-zh": `${join(userFonts.get(), ",")}`,
          "--code-monospace": `${join(monospaceFonts.get(), ",")}`
        },
        "html.dark-theme": {
          "--tieba-theme-color": theme.dark,
          "--trans-tieba-theme-color": `rgb(${darkRGBA.r} ${darkRGBA.g} ${darkRGBA.b} / 80%)`,
          "--tieba-theme-hover": `hsl(${darkHSLA.h}deg ${parseInt(darkHSLA.s) + 40}% ${parseInt(darkHSLA.l) + 10}%)`,
          "--tieba-theme-active": `hsl(${darkHSLA.h}deg ${parseInt(darkHSLA.s) + 50}% ${parseInt(darkHSLA.l) + 20}%)`,
          "--tieba-theme-background": `rgb(${darkRGBA.r} ${darkRGBA.g} ${darkRGBA.b} / 24%)`,
          "--tieba-theme-fore": `hsl(${darkHSLA.h}deg 100% 75%)`
        },
        "html.light-theme": {
          "--tieba-theme-color": theme.light,
          "--trans-tieba-theme-color": `rgb(${lightRGBA.r} ${lightRGBA.g} ${lightRGBA.b} / 80%)`,
          "--tieba-theme-hover": `hsl(${lightHSLA.h}deg ${parseInt(lightHSLA.s) - 40}% ${parseInt(lightHSLA.l) - 10}%)`,
          "--tieba-theme-active": `hsl(${lightHSLA.h}deg ${parseInt(lightHSLA.s) - 50}% ${parseInt(lightHSLA.l) - 20}%)`,
          "--tieba-theme-background": `rgb(${lightRGBA.r} ${lightRGBA.g} ${lightRGBA.b} / 24%)`,
          "--tieba-theme-fore": `hsl(${lightHSLA.h}deg 60% 32%)`
        }
      });
      _GM_addStyle(dynCSS);
    }
    async function loadTiebaCSS() {
      _GM_addStyle(tiebaCSS);
      _GM_addStyle(homeCSS);
      _GM_addStyle(errorCSS);
      _GM_addStyle(threadCSS$1);
      switch (currentPageType()) {
        case "forum":
          _GM_addStyle(forumCSS);
          break;
      }
      document.head.appendChild(templateCreate("link", {
        type: "image/icon",
        rel: "shortcut icon",
        href: getResource("/assets/images/main/favicon32.ico")
      }));
    }
    async function loadExtensionCSS() {
      _GM_addStyle(themePlusCSS);
      _GM_addStyle(darkVarsCSS);
    }
    async function setCustomBackground() {
      afterHead(function() {
        if (dynCSSRules.customBackground() !== -1) {
          removeCSSRule(dynCSSRules.customBackground());
        }
        injectCSSRule("body.custom-background", {
          backgroundImage: `url('${customBackground.get()}') !important`,
          backgroundRepeat: "no-repeat !important",
          backgroundAttachment: "fixed !important",
          backgroundSize: "cover !important"
        }) ?? -1;
        waitUtil(() => document.body !== null, void 0, 4).then(function() {
          if (customBackground.get()) {
            document.body.classList.add("custom-background");
          } else {
            document.body.classList.remove("custom-background");
          }
        });
      });
    }
    const MainTitle = "Tieba Remix";
    const Owner = "WiresawBlade";
    const RepoName = "Tieba-Remix";
    const GithubRepo = "https://github.com/WiresawBlade/Tieba-Remix";
    const GiteeRepo = "https://gitee.com/WiresawBlade/Tieba-Remix/";
    const BaiduPassport = "https://passport.baidu.com/";
    const REMIXED = "\n██████╗ ███████╗███╗   ███╗██╗██╗  ██╗███████╗██████╗ \n██╔══██╗██╔════╝████╗ ████║██║╚██╗██╔╝██╔════╝██╔══██╗\n██████╔╝█████╗  ██╔████╔██║██║ ╚███╔╝ █████╗  ██║  ██║\n██╔══██╗██╔══╝  ██║╚██╔╝██║██║ ██╔██╗ ██╔══╝  ██║  ██║\n██║  ██║███████╗██║ ╚═╝ ██║██║██╔╝ ██╗███████╗██████╔╝\n╚═╝  ╚═╝╚══════╝╚═╝     ╚═╝╚═╝╚═╝  ╚═╝╚══════╝╚═════╝ \n";
    class UserKey {
      constructor(key, defaultValue, listeners) {
        __publicField(this, "key");
        __publicField(this, "defaultValue");
        __publicField(this, "listeners");
        this.key = key;
        this.defaultValue = defaultValue;
        this.listeners = {
          getter: (listeners == null ? void 0 : listeners.getter) ? [listeners.getter] : [],
          setter: (listeners == null ? void 0 : listeners.setter) ? [listeners.setter] : []
        };
      }
      dispatchEvent(event, value) {
        forEach(this.listeners[event], (listener) => listener(value));
      }
      get() {
        let value = _GM_getValue(this.key, this.defaultValue);
        if (isRealObject(value) && keys(value).length < keys(this.defaultValue).length) {
          value = merge(this.defaultValue, value);
        }
        this.dispatchEvent("getter", value);
        return value;
      }
      set(value) {
        _GM_setValue(this.key, value);
        this.dispatchEvent("setter", value);
      }
      remove() {
        _GM_deleteValue(this.key);
      }
      merge(value) {
        if (isRealObject(value)) {
          const merged = { ...this.get(), ...value };
          this.set(merged);
          this.dispatchEvent("setter", merged);
        }
      }
      mergeDeeply(value) {
        if (isRealObject(value)) {
          const merged = merge(this.get(), value);
          this.set(merged);
          this.dispatchEvent("setter", merged);
        }
      }
    }
    class UserKeyTS extends UserKey {
      constructor(key, defaultValue, invalidfn, listeners) {
        super(key, defaultValue, listeners);
        __publicField(this, "defaultInvalid", () => spawnOffsetTS(0, 0, 0, 12));
        this.defaultInvalid = invalidfn ? invalidfn : this.defaultInvalid;
      }
      get() {
        let value = getUserValueTS(this.key, this.defaultValue);
        if (isRealObject(value) && keys(value).length < keys(this.defaultValue).length) {
          value = merge(this.defaultValue, value);
        }
        this.dispatchEvent("getter", value);
        return value;
      }
      /**
       * 设置时间敏感的用户 key
       * @param value 需要设置的值
       * @param invalidTime 失效时间,默认为函数执行 12 小时后
       */
      set(value, invalidTime) {
        setUserValueTS(this.key, value, invalidTime ? invalidTime : this.defaultInvalid());
        this.dispatchEvent("setter", value);
      }
      merge(value, invalidTime) {
        if (isRealObject(value)) {
          const merged = { ...this.get(), ...value };
          this.set(merged, invalidTime ? invalidTime : this.defaultInvalid());
          this.dispatchEvent("setter", merged);
        }
      }
      mergeDeeply(value, invalidTime) {
        if (isRealObject(value)) {
          const merged = merge(this.get(), value);
          this.set(merged, invalidTime ? invalidTime : this.defaultInvalid());
          this.dispatchEvent("setter", merged);
        }
      }
    }
    const disabledModules = new UserKey("disabledModules", []);
    const perfProfile = new UserKey("perfProfile", "performance");
    const unreadFeeds = new UserKeyTS("unreadFeeds", []);
    const experimental = new UserKey("experimental", {});
    const latestRelease = new UserKeyTS("latestRelease", void 0);
    const updateConfig = new UserKey("updateConfig", {
      time: "6h",
      notify: true
    });
    const showUpdateToday = new UserKeyTS("showUpdateToday", true, () => (/* @__PURE__ */ new Date()).setHours(0, 0, 0, 0) + 24 * 60 * 60 * 1e3);
    const ignoredTag = new UserKey("ignoredTag", "");
    const themeType = new UserKey(
      "themeType",
      "auto",
      {
        setter(value) {
          setTheme(value);
        }
      }
    );
    const compactLayout = new UserKey("compactLayout", false);
    const wideScreen = new UserKey("wideScreen", {
      maxPX: 1080,
      noLimit: false
    });
    const themeColor = new UserKey("themeColor", {
      light: "#614ec2",
      dark: "#7161c1"
    });
    const customBackground = new UserKey(
      "customBackground",
      null,
      {
        setter() {
          setCustomBackground();
        }
      }
    );
    const pageExtension = new UserKey("pageExtension", {
      index: true,
      thread: true
    });
    const userFonts = new UserKey("userFonts", []);
    const monospaceFonts = new UserKey("monospaceFonts", [
      "Consolas",
      "JetBrains Mono",
      "Fira Code",
      "Menlo",
      "monospace"
    ]);
    function getUserValueTS(key, def) {
      try {
        const valueTS = _GM_getValue(key, {
          value: def,
          invalidTime: 0
        });
        const timeStamp = Date.now();
        if (valueTS.invalidTime >= timeStamp) {
          return valueTS.value;
        } else {
          return def;
        }
      } catch (error) {
        return def;
      }
    }
    function setUserValueTS(key, value, invalidTime) {
      try {
        if (invalidTime) {
          _GM_setValue(key, {
            value,
            invalidTime
          });
        } else {
          _GM_setValue(key, value);
        }
      } catch (error) {
        console.warn("setUserValueTS", error);
      }
    }
    marked2.marked.setOptions({});
    function currentPageType() {
      if (location.hostname.toLowerCase() !== "tieba.baidu.com")
        return "unhandled";
      const pathname = location.pathname.toLocaleLowerCase();
      if (includes(["/", "/index.html"], pathname))
        return "index";
      if (/\/p\/\d+/.test(pathname))
        return "thread";
      if (pathname === "/f")
        return "forum";
      if (pathname === "/home/main")
        return "user";
      return "unhandled";
    }
    async function getLatestReleaseFromGitee(owner = Owner, repo = RepoName, forceUpdate = false) {
      if (latestRelease.get() && !forceUpdate) {
        return latestRelease.get();
      } else {
        const TTL = function() {
          switch (updateConfig.get().time) {
            case "1h":
              return 1;
            case "3h":
              return 3;
            case "6h":
              return 6;
            case "never":
              return -1;
          }
        }();
        if (TTL < 0)
          return;
        const response = await fetch(`https://gitee.com/api/v5/repos/${owner}/${repo}/releases/latest/`);
        if (response.ok) {
          const result = await response.json();
          latestRelease.set(result, spawnOffsetTS(0, 0, 0, TTL));
          return result;
        } else {
          return void 0;
        }
      }
    }
    function checkUpdateAndNotify(showLatest = false) {
      if (updateConfig.get().time === "never")
        return;
      if (!updateConfig.get().notify)
        return;
      if (!showUpdateToday.get())
        return;
      if (_GM_info.script.version === "developer-only")
        return;
      getLatestReleaseFromGitee().then((latestRelease2) => {
        if (latestRelease2 && latestRelease2.tag_name.slice(1) !== _GM_info.script.version) {
          if (ignoredTag.get() === latestRelease2.tag_name)
            return;
          messageBox({
            title: latestRelease2.name,
            message: marked2.marked(latestRelease2.body),
            embedded: true,
            type: "OkCancel",
            buttons: [
              {
                title: "安装",
                event() {
                  installFromRelease(latestRelease2);
                }
              },
              {
                title: "今日不再提醒",
                event() {
                  showUpdateToday.set(false);
                }
              },
              {
                title: "跳过该版本",
                event() {
                  ignoredTag.set(latestRelease2.tag_name);
                }
              }
            ]
          });
        } else {
          if (showLatest)
            messageBox({
              title: "检查更新",
              message: "当前已是最新版本",
              type: "OkCancel"
            });
        }
      });
    }
    function installFromRelease(release) {
      function notFound() {
        toast({
          message: "安装失败:未找到可用的资源",
          type: "error",
          duration: 6e3,
          blurEffect: true
        });
      }
      if (!release.assets || release.assets.length <= 0) {
        notFound();
        return;
      }
      const asset = function() {
        for (const asset2 of release.assets) {
          if (asset2.name && asset2.name.endsWith(".user.js")) {
            return asset2.browser_download_url;
          }
        }
      }();
      if (asset) {
        _GM_openInTab(asset, {
          active: true
        });
      } else {
        notFound();
        return;
      }
    }
    function getResource(path) {
      return `${GiteeRepo}/raw/beta/${path}`;
    }
    function setTheme(theme) {
      switch (theme) {
        case "dark":
          darkTheme();
          break;
        case "light":
          lightTheme();
          break;
        case "auto":
        default:
          darkPrefers.matches ? darkTheme() : lightTheme();
          break;
      }
      function lightTheme() {
        document.documentElement.classList.add("light-theme");
        document.documentElement.classList.remove("dark-theme");
        document.documentElement.classList.remove("dark");
      }
      function darkTheme() {
        document.documentElement.classList.add("dark-theme");
        document.documentElement.classList.remove("light-theme");
        document.documentElement.classList.add("dark");
      }
    }
    function backupUserConfigs() {
      const excluded = ["unreadFeeds", "latestRelease", "showUpdateToday"];
      const userKeys = filter(_GM_listValues(), (key) => !includes(excluded, key));
      const userValues = map(userKeys, (key) => {
        return _GM_getValue(key);
      });
      const configs = zipObject(userKeys, userValues);
      outputFile(`tieba-remix-backup@${(/* @__PURE__ */ new Date()).getTime()}.json`, JSON.stringify(configs));
    }
    async function restoreUserConfigs() {
      const backupData = JSON.parse(await selectLocalFile());
      forEach(Object.entries(backupData), ([key, value]) => {
        _GM_setValue(key, value);
      });
    }
    class TbObserver {
      constructor(selector, options, initEvent) {
        __publicField(this, "selector");
        __publicField(this, "options");
        __publicField(this, "initEvent");
        __publicField(this, "events", []);
        this.selector = selector;
        this.options = options;
        this.initEvent = initEvent;
      }
      observe() {
        const eventFuncs = () => {
          this.events.forEach((func) => {
            func();
          });
        };
        if (typeof this.initEvent === "undefined") {
          eventFuncs();
        } else {
          window.addEventListener(this.initEvent, eventFuncs);
        }
        const observer = new MutationObserver(eventFuncs);
        const obsElem = DOMS(this.selector)[0];
        if (obsElem !== void 0)
          observer.observe(obsElem, this.options);
      }
      addEvent(...events) {
        forEach(events, (event) => {
          if (this.events.includes(event))
            return;
          if (typeof this.initEvent === "undefined") {
            event();
          } else {
            window.addEventListener(this.initEvent, event);
          }
          this.events.push(event);
        });
      }
    }
    const remixedObservers = Object.freeze({
      /** 楼层监控 */
      postsObserver: new TbObserver("#j_p_postlist", { childList: true }),
      /** 楼中楼监控 */
      commentsObserver: new TbObserver("#j_p_postlist", { childList: true, subtree: true }),
      /** 首页动态监控 */
      newListObserver: new TbObserver("#new_list", { childList: true }),
      /** 进吧页面贴子监控 */
      threadListObserver: new TbObserver("#pagelet_frs-list\\/pagelet\\/thread", { attributes: true }, "load")
    });
    const tiebaAPI = {
      /** 首页推荐 */
      feedlist: () => fetch(`/f/index/feedlist?${requestBody({
      "is_new": 1,
      "tag_id": "like"
    })}`),
      /** 用户头像 */
      URL_profile: (portrait) => `https://gss0.baidu.com/7Ls0a8Sm2Q5IlBGlnYG/sys/portrait/item/${portrait}`,
      /** 当前登录用户信息 */
      userInfo: (serverTime) => fetch(`/f/user/json_userinfo?${requestBody({
      "_": serverTime
    })}`),
      /** 用户主页 */
      URL_userHome: (portrait) => `/home/main?id=${portrait}&fr=index`,
      /** 搜索建议 */
      suggestions: (query, encoding = "UTF-8", serverTime) => fetch(`/suggestion?${requestBody({
      "query": query,
      "ie": encoding,
      "_": serverTime
    })}`),
      /** 贴吧热议 */
      topicList: () => fetch("/hottopic/browse/topicList"),
      /** 吧跳转 */
      URL_forum: (keywords, encoding = "utf-8") => `/f?ie=${encoding}&kw=${keywords}`,
      /** 未读消息 */
      unreadMessages: (serverTime) => fetch(`/im/pcmsg/query/getAllUnread?${requestBody({
      "_": serverTime
    })}`),
      /** 收藏更新 */
      favUpdateNum: () => fetch("/sysmsg/userpost/queryStoreUpdateNum"),
      /** 获取 tbs */
      tbs: () => fetch("/dc/common/tbs"),
      /** imgtbs */
      imgtbs: () => fetch("/dc/common/imgtbs"),
      /** 获取已关注的吧 */
      followedForums: () => fetch("/mo/q/newmoindex"),
      /** 更详细的用户信息 */
      userInfoAll: (un, encoding = "UTF-8") => fetch(`/home/get/panel?${requestBody({
      "ie": encoding,
      "un": un
    })}`),
      /** 关注吧 */
      followForum: (tbs, forumId, forumName) => fetch(`/mo/q/favolike?${requestBody({
      "itb_tbs": tbs,
      "fid": forumId,
      "kw": forumName
    })}`),
      /** 取消关注吧 */
      unfollowForum: (tbs, forumName) => fetch(`/mo/q/delmylike?${requestBody({
      "itb_tbs": tbs,
      "forum_name": forumName
    })}`),
      /** 通过 `uid` 查找用户 */
      getUserFromUID: (uid) => fetch(`/im/pcmsg/query/getUserInfo?${requestBody({
      "chatUid": uid
    })}`),
      /** 一键签到(Web 端) */
      oneKeySign: () => fetch("/tbmall/onekeySignin1"),
      /** 热门动态 */
      hotFeeds: (un, pn, encoding = "utf-8", serverTime) => fetch(`/mo/q/newmoindex?${requestBody({
      "un": un,
      "pn": pn,
      "ie": encoding,
      "_": serverTime
    })}`),
      /** 获取当前页所有楼中楼数据 */
      totalComments: (timeStamp, tid, fid, pn, lzOnly = false) => fetch(`/p/totalComment?${requestBody({
      "t": timeStamp,
      "tid": tid,
      "fid": fid,
      "pn": pn,
      "see_lz": Number(lzOnly)
    })}`),
      /** 获取热门话题相关贴 */
      topicRelatedThreads: (topicName, page, lastId, topicId, sortType = 1) => fetch(`/hottopic/browse/getTopicRelateThread?${requestBody({
      "topic_name": topicName,
      "page_no": page,
      "last_id": lastId,
      "topic_id": topicId,
      "sort_type": sortType
    })}`),
      /** 将贴子添加到收藏 */
      addFavoritePost: (tbs, tid, fid, encoding = "utf-8") => fetch("/i/submit/open_storethread", {
        method: "POST",
        body: JSON.stringify({ tbs, tid, fid, encoding })
      }),
      forumSignInfo: (forumName, encoding = "utf-8") => fetch(`/sign/info?${requestBody({
      "kw": forumName,
      "ie": encoding
    })}`),
      forumLoadMonth: (forumName, encoding = "utf-8") => fetch(`/sign/loadmonth?${requestBody({
      "kw": forumName,
      "ie": encoding
    })}`),
      addFloor: (tbs, forum, forumId, threadId, content, floorNum, richText, ev = "comment", __type__ = "reply") => fetch("/f/commit/post/add", {
        method: "POST",
        body: JSON.stringify({
          "ie": "utf-8",
          "kw": forum,
          "fid": forumId,
          "tid": threadId,
          "floor_num": floorNum,
          "rich_text": Number(richText),
          "tbs": tbs,
          "content": content,
          "basilisk": 1,
          "nick_name": PageData.user.user_nickname,
          "ev": ev,
          "biz[po]": PageData.user.portrait.split("?")[0],
          "__type__": __type__,
          "geetest_success": 0
        })
      })
    };
    function parsePostFromElement(elem) {
      const titleTagWrapperAnch = DOMS(".title-tag-wraper a", "a", elem)[0];
      const threadNameWrapper = elem.getElementsByClassName("thread-name-wraper")[0];
      const threadNameWrapperAnch = threadNameWrapper.getElementsByTagName("a")[0];
      const listPostNum = DOMS(".list-post-num em", threadNameWrapper)[0];
      const imgs = DOMS("img:not(.nicknameEmoji)", "img", elem);
      const nReply = elem.getElementsByClassName("n_reply")[0];
      const nReplyAnch = nReply.getElementsByTagName("a")[0];
      const imgArray = [];
      if (imgs.length > 0) {
        forEach(imgs, (img) => {
          imgArray.push({
            thumb: img.src,
            original: defaultTo(img.getAttribute("original"), "")
          });
        });
      }
      return {
        id: defaultTo(elem.getAttribute("data-thread-id"), ""),
        forum: {
          id: defaultTo(elem.getAttribute("data-forum-id"), ""),
          name: titleTagWrapperAnch.title,
          href: titleTagWrapperAnch.href
        },
        author: {
          portrait: split(nReplyAnch.href, /(\?id=)|&/)[2],
          name: transEmojiFromDOMString(nReplyAnch.innerHTML),
          href: nReplyAnch.href
        },
        time: defaultTo(elem.getElementsByClassName("time")[0].textContent, ""),
        title: threadNameWrapperAnch.title,
        content: defaultTo(elem.getElementsByClassName("n_txt")[0].textContent, ""),
        replies: defaultTo(listPostNum.getAttribute("data-num"), 0),
        images: imgArray
      };
    }
    function parsePostsFromString(responseString, callbackfn) {
      const feedList = [];
      const dom = new DOMParser().parseFromString(responseString, "text/html");
      const threads = dom.getElementsByClassName("j_feed_li");
      const undesired = "home-place-item";
      forEach(threads, (thread2) => {
        if (thread2.classList.contains(undesired))
          return;
        const post = parsePostFromElement(thread2);
        if (callbackfn)
          callbackfn(post);
        feedList.push(post);
      });
      return feedList;
    }
    function transEmojiFromDOMString(str) {
      const indexRegex = new RegExp("(?<=nickemoji\\/).*?(?=.png)", "gi");
      if (!str.match(indexRegex))
        return str;
      const emojis = [
        "º",
        "◎",
        "▫",
        "◆",
        "♤",
        "♀",
        "♂",
        "ლ",
        "♬",
        "☞",
        "☜",
        "✆",
        "☎",
        "♋",
        "Ω",
        "℃",
        "℉",
        "😄",
        "😍",
        "😘",
        "😚",
        "😜",
        "😳",
        "😁",
        "😞",
        "😢",
        "😂",
        "😫",
        "😨",
        "😱",
        "😡",
        "😷",
        "😲",
        "😈",
        "🐷",
        "🐶",
        "🐑",
        "🐵",
        "🐨",
        "🐴",
        "🐼",
        "🐯",
        "🍪",
        "🍺",
        "🍦",
        "🍭",
        "🍗",
        "🍼",
        "🔯",
        "🍒",
        "👀",
        "🐭",
        "😇",
        "😺",
        "😻",
        "🙀",
        "😿",
        "😹",
        "😾",
        "👹",
        "👺",
        "🌞",
        "🌝",
        "🌚",
        "🌜",
        "🌛",
        "👦",
        "👧",
        "🎎",
        "🌸",
        "🍀",
        "🌹",
        "🌻",
        "🌺",
        "🍁",
        "🌿",
        "🍄",
        "🌵",
        "🌴",
        "🌳",
        "🌰",
        "🌱",
        "🌼",
        "🌐",
        "🌙",
        "🌋",
        "🌌",
        "⛅",
        "⚡",
        "☔",
        "⛄",
        "🌀",
        "🌈",
        "🌊",
        "🔥",
        "✨",
        "🌟",
        "💥",
        "💫",
        "💢",
        "💦",
        "💧",
        "💤",
        "💨",
        "🎀",
        "🌂",
        "💄",
        "💕",
        "💖",
        "💞",
        "💘",
        "💌",
        "💋",
        "💝",
        "🎒",
        "🎓",
        "🎏",
        "🎃",
        "👻",
        "🎅",
        "🎄",
        "🎁",
        "🙈",
        "🐒",
        "💯",
        "👯",
        "💍"
      ];
      const transformed = [
        "1-1.png",
        "1-2.png",
        "1-4.png",
        "1-5.png",
        "1-6.png",
        "1-7.png",
        "1-8.png",
        "1-9.png",
        "1-10.png",
        "1-11.png",
        "1-12.png",
        "1-13.png",
        "1-14.png",
        "1-15.png",
        "1-16.png",
        "1-17.png",
        "1-18.png",
        "1-19.png",
        "1-20.png",
        "1-21.png",
        "1-22.png",
        "1-23.png",
        "1-24.png",
        "1-25.png",
        "1-26.png",
        "1-27.png",
        "1-28.png",
        "1-29.png",
        "1-30.png",
        "1-31.png",
        "1-32.png",
        "1-33.png",
        "1-34.png",
        "1-35.png",
        "2-1.png",
        "2-2.png",
        "2-3.png",
        "2-4.png",
        "2-5.png",
        "2-6.png",
        "2-7.png",
        "2-8.png",
        "2-9.png",
        "2-10.png",
        "2-11.png",
        "2-12.png",
        "2-13.png",
        "2-14.png",
        "2-15.png",
        "2-16.png",
        "2-17.png",
        "2-18.png",
        "2-19.png",
        "2-20.png",
        "2-21.png",
        "2-22.png",
        "2-23.png",
        "2-24.png",
        "2-25.png",
        "2-26.png",
        "2-27.png",
        "2-28.png",
        "2-29.png",
        "2-30.png",
        "2-31.png",
        "2-32.png",
        "2-33.png",
        "2-34.png",
        "2-35.png",
        "3-1.png",
        "3-2.png",
        "3-3.png",
        "3-4.png",
        "3-5.png",
        "3-6.png",
        "3-7.png",
        "3-8.png",
        "3-9.png",
        "3-10.png",
        "3-11.png",
        "3-12.png",
        "3-13.png",
        "3-14.png",
        "3-15.png",
        "3-16.png",
        "3-17.png",
        "3-18.png",
        "3-19.png",
        "3-20.png",
        "3-21.png",
        "3-22.png",
        "3-23.png",
        "3-24.png",
        "3-25.png",
        "3-26.png",
        "3-27.png",
        "3-28.png",
        "3-29.png",
        "3-30.png",
        "3-31.png",
        "3-32.png",
        "3-33.png",
        "3-34.png",
        "3-35.png",
        "4-1.png",
        "4-2.png",
        "4-3.png",
        "4-4.png",
        "4-5.png",
        "4-6.png",
        "4-7.png",
        "4-8.png",
        "4-9.png",
        "4-10.png",
        "4-11.png",
        "4-12.png",
        "4-13.png",
        "4-14.png",
        "4-15.png",
        "4-16.png",
        "4-17.png",
        "4-18.png",
        "4-19.png",
        "4-20.png",
        "4-21.png",
        "4-22.png",
        "4-23.png"
      ];
      const arrIndex = str.match(indexRegex);
      arrIndex == null ? void 0 : arrIndex.forEach((index2) => {
        const emoji = emojis[transformed.indexOf(`${index2}.png`)];
        const arrInner = split(str, RegExp(
          `<img[^>]*?${index2}.png(?:[^>]*?)*>`,
          "g"
        ));
        str = join(arrInner, decodeURIComponent(emoji));
      });
      return str;
    }
    function levelToClass(level) {
      if (level < 0)
        return;
      if (level >= 1 && level <= 3)
        return "green";
      if (level >= 4 && level <= 9)
        return "blue";
      if (level >= 9 && level <= 15)
        return "yellow";
      if (level >= 16)
        return "orange";
    }
    const _sfc_main$h = {};
    const _hoisted_1$d = { class: "block-panel blur-if-custom-background" };
    function _sfc_render(_ctx, _cache) {
      return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$d, [
        vue.renderSlot(_ctx.$slots, "default")
      ]);
    }
    const BlockPanel = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["render", _sfc_render]]);
    /**
     * Flex Masonry
     * @author @WiresawBlade
     * @version 1.0
     * @license MIT
     */
    class FlexMasonry {
      constructor(options) {
        __publicField(this, "container");
        __publicField(this, "items");
        __publicField(this, "columnContainers", []);
        __publicField(this, "columnWidth");
        __publicField(this, "gap");
        __publicField(this, "options");
        __publicField(this, "containerSelector");
        __publicField(this, "itemsSelector");
        __publicField(this, "columnSelector", ".masonry-column");
        __publicField(this, "columnsHeight", []);
        __publicField(this, "fragment");
        /** 当前布局的列数 */
        __publicField(this, "columns");
        options = parseOptions(options);
        this.container = (() => {
          if (typeof options.container === "string") {
            this.containerSelector = options.container;
            const _container = document.querySelector(options.container);
            if (_container) {
              return _container;
            } else {
              throw new Error("Can't find container element.");
            }
          } else {
            return options.container;
          }
        })();
        if (options.items) {
          this.items = (() => {
            if (typeof options.items === "string") {
              this.itemsSelector = options.items;
              const _items = document.querySelectorAll(options.items);
              if (_items) {
                return Array.from(_items);
              } else {
                return [];
              }
            } else {
              return options.items;
            }
          })().map((el) => {
            el.style.visibility = "hidden";
            return { element: el, cachedHeight: el.clientHeight };
          });
        } else {
          this.items = [];
        }
        this.columnWidth = options.columnWidth;
        if (options.gap) {
          if (Array.isArray(options.gap)) {
            this.gap = options.gap;
          } else {
            this.gap = [options.gap, options.gap];
          }
        } else {
          this.gap = [0, 0];
        }
        this.columns = 0;
        this.options = options;
        this.initStyle();
        if (options.autoExec)
          this.exec();
      }
      initStyle() {
        this.container.style.display = "flex";
        this.container.style.alignItems = "flex-start";
        this.container.style.justifyContent = "center";
        this.container.style.gap = `${this.gap[0]}px`;
      }
      /** 执行布局 */
      exec() {
        this.calcColumns();
        const originalPosition = window.scrollY || window.pageYOffset;
        this.calc();
        this.layout();
        if (this.options.fixScrollOffset)
          window.scrollTo(0, originalPosition);
      }
      /** 仅计算布局 */
      calc() {
        this.columnsHeight = Array(this.calcColumns()).fill(0);
        const fragment = document.createDocumentFragment();
        const _col = this.container.querySelectorAll(this.columnSelector);
        _col.forEach((col) => {
          col.remove();
        });
        this.columnContainers.length = 0;
        for (let i = 0; i < this.columns; i++) {
          this.columnContainers.push(
            fragment.appendChild(createNewElement("div", {
              class: this.columnSelector.substring(1)
            }))
          );
        }
        this.columnContainers.forEach((ccontainer) => {
          ccontainer.style.display = "flex";
          ccontainer.style.flexDirection = "column";
          ccontainer.style.gap = `${this.gap[1]}px`;
        });
        this.items.forEach((el) => {
          this._appendElement(el);
        });
        this.fragment = fragment;
      }
      /**
       * 仅应用布局
       * 
       * 调用该函数前需要已经至少计算过一次布局
       */
      layout() {
        if (this.fragment) {
          this.container.appendChild(this.fragment);
        } else {
          throw Error("Never conducted layout calculations before. You should use exec() or calc() first.");
        }
      }
      removeUnusedColumns() {
        const _col = this.container.querySelectorAll(this.columnSelector);
        _col.forEach((col) => {
          if (col.children.length === 0)
            col.remove();
        });
      }
      /** 
       * 清空布局中的所有 `items`
       *  
       * 该操作并不会将元素从文档中移除
       */
      clear() {
        this.items.length = 0;
      }
      /** 仅计算当前需要的列数 */
      calcColumns() {
        this.columns = Math.ceil((this.container.clientWidth - this.columnWidth) / (this.columnWidth + this.gap[0]));
        return this.columns;
      }
      /**
       * 向布局中加入元素
       * @param el 要添加的元素
       */
      appendElement(...elems) {
        const masonryElements = elems.map((el) => {
          return {
            element: el,
            cachedHeight: el.clientHeight
          };
        });
        this._appendElement(...masonryElements);
        this.items.push(...masonryElements);
      }
      _appendElement(...elems) {
        elems.forEach((el) => {
          const minIndex = this.columnsHeight.indexOf(Math.min(...this.columnsHeight));
          this.columnsHeight[minIndex] += el.cachedHeight;
          this.columnContainers[minIndex].appendChild(el.element);
          el.element.style.visibility = "visible";
        });
      }
      /**
       * 在原有子项的基础上追加子项
       * @param newItems 要添加的新元素,接受 CSS选择器
       * @param interval 插入每个元素间的时间间隔
       */
      append(newItems, interval) {
        const appended = (() => {
          if (newItems) {
            if (typeof newItems === "string") {
              const _items = document.querySelectorAll(newItems);
              return Array.from(_items);
            } else {
              return newItems;
            }
          } else {
            if (this.itemsSelector) {
              const _items = Array.from(document.querySelectorAll(this.itemsSelector));
              const appendCount = _items.length - this.items.length;
              if (appendCount > 0) {
                const _appended = _items.slice(-appendCount);
                return _appended;
              }
            }
          }
        })();
        if (appended) {
          if (!interval || interval <= 0) {
            appended.forEach((el) => {
              this.appendElement(el);
            });
          } else {
            appended.forEach((el, index2) => {
              setTimeout(() => {
                this.appendElement(el);
              }, interval * index2);
            });
          }
        }
      }
      refreshContainer() {
        if (this.containerSelector) {
          const newContainer = document.querySelector(this.containerSelector);
          if (newContainer) {
            this.container = newContainer;
          }
        }
      }
    }
    function parseOptions(options) {
      options.gap = options.gap || 0;
      options.autoExec = options.autoExec === void 0 ? true : options.autoExec;
      options.fixScrollOffset = options.fixScrollOffset === void 0 ? false : options.fixScrollOffset;
      return options;
    }
    function createNewElement(tag, attrs) {
      const el = document.createElement(tag);
      for (const key in attrs) {
        el.setAttribute(key, attrs[key]);
      }
      return el;
    }
    const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
      __name: "header-progress",
      props: {
        calc: { type: Function }
      },
      setup(__props) {
        const props = __props;
        const headerProgress2 = vue.ref();
        const valueRef = vue.ref(0);
        vue.onMounted(function() {
          if (headerProgress2.value) {
            requestAnimationFrame(function() {
              calcValue();
            });
          }
        });
        function calcValue() {
          valueRef.value = props.calc();
          console.log(valueRef.value);
          if (valueRef.value < 100)
            requestAnimationFrame(calcValue);
        }
        return (_ctx, _cache) => {
          return vue.openBlock(), vue.createElementBlock("div", {
            ref_key: "headerProgress",
            ref: headerProgress2,
            id: "header-progress",
            class: vue.normalizeClass({ "complete": valueRef.value >= 100 }),
            style: vue.normalizeStyle(`width: ${valueRef.value}vw;`)
          }, null, 6);
        };
      }
    });
    const HeaderProgress = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["__scopeId", "data-v-90c4af2f"]]);
    function renderJSX(jsxel, parent) {
      const vnode = vue.createVNode(jsxel);
      vnode.props && (vnode.props.once = true);
      vue.render(vnode, parent);
      return {
        el: parent.firstChild,
        vnode
      };
    }
    function insertJSX(jsxel, parent, position) {
      const tempContainer = templateCreate("div");
      const vnode = renderJSX(jsxel, parent.appendChild(tempContainer));
      forEach(tempContainer.children, (el) => {
        parent.insertBefore(el, position);
      });
      tempContainer.remove();
      return vnode;
    }
    function appendJSX(jsxel, parent) {
      const tempContainer = templateCreate("div");
      const vnode = renderJSX(jsxel, parent.appendChild(tempContainer));
      forEach(tempContainer.children, (el) => {
        parent.appendChild(el);
      });
      tempContainer.remove();
      return vnode;
    }
    function headerProgress(props, delay = 2e3, timeout = 1e4) {
      const progressBar = vue.createVNode(HeaderProgress, {
        "calc": props.calc
      }, null);
      const rendered = insertJSX(progressBar, document.body, document.body.firstChild);
      const timeoutTimer = setTimeout(() => {
        rendered.el.remove();
      }, timeout);
      waitUtil(() => rendered.el.style.width === "100vw", timeout).then(function() {
        setTimeout(() => {
          rendered.el.remove();
          clearTimeout(timeoutTimer);
        }, delay);
      });
      return rendered;
    }
    function bindFloatMessage(target, message, delay = 500) {
      if (DOMS(".float-message").length <= 0) {
        appendJSX(vue.createVNode("div", {
          "class": "float-message"
        }, [vue.createVNode("div", {
          "class": "float-content"
        }, [message])]), document.body);
      }
      const floatMessage = DOMS(".float-message", "div")[0];
      let timeout = -1;
      target.addEventListener("mouseenter", function() {
        if (timeout >= 0)
          clearTimeout(timeout);
      });
      target.addEventListener("mouseleave", function() {
        if (timeout >= 0)
          clearTimeout(timeout);
        floatMessage.style.display = "none";
      });
      target.addEventListener("mousemove", function(e) {
        if (timeout >= 0)
          clearTimeout(timeout);
        timeout = setTimeout(() => {
          const x = e.clientX + 10;
          const y = e.clientY + 10;
          floatMessage.style.left = `${x}px`;
          floatMessage.style.top = `${y}px`;
          floatMessage.style.display = "block";
        }, delay);
      });
    }
    const _withScopeId$8 = (n) => (vue.pushScopeId("data-v-79fe5854"), n = n(), vue.popScopeId(), n);
    const _hoisted_1$c = { class: "image-container dialog-toggle" };
    const _hoisted_2$c = ["src"];
    const _hoisted_3$b = { class: "control-panel head-controls" };
    const _hoisted_4$a = { class: "zoom-size" };
    const _hoisted_5$9 = /* @__PURE__ */ _withScopeId$8(() => /* @__PURE__ */ vue.createElementVNode("span", null, "|", -1));
    const _hoisted_6$7 = /* @__PURE__ */ _withScopeId$8(() => /* @__PURE__ */ vue.createElementVNode("span", null, "|", -1));
    const _hoisted_7$6 = { class: "control-panel bottom-controls" };
    const _hoisted_8$6 = ["src", "onClick"];
    const minSize = 0.2;
    const maxSize = 4;
    const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
      __name: "images-viewer",
      props: {
        content: {},
        defaultIndex: { default: 0 }
      },
      emits: ["RequestClose"],
      setup(__props, { emit: __emit }) {
        const props = __props;
        const imageArray = [];
        if (typeof props.content === "string") {
          imageArray.push(props.content);
        } else if (Array.isArray(props.content)) {
          imageArray.push(...props.content);
        } else {
          map(props.content.images, (value) => {
            imageArray.push(value.original);
          });
        }
        const emit = __emit;
        const imageViewer = vue.ref();
        const currImage = vue.ref();
        const curr = vue.ref(props.defaultIndex);
        const scale = vue.ref(1);
        const deg = vue.ref(0);
        vue.onMounted(() => {
          var _a;
          let offsetX = 0, offsetY = 0;
          (_a = currImage.value) == null ? void 0 : _a.addEventListener("mousedown", (e) => {
            if (!currImage.value)
              return;
            e.preventDefault();
            offsetX = e.clientX - currImage.value.offsetLeft;
            offsetY = e.clientY - currImage.value.offsetTop;
            document.addEventListener("mousemove", moveHandler);
          });
          document.addEventListener("mouseup", (e) => {
            e.preventDefault();
            document.removeEventListener("mousemove", moveHandler);
          });
          function moveHandler(e) {
            if (!currImage.value)
              return;
            currImage.value.style.left = `${e.clientX - offsetX}px`;
            currImage.value.style.top = `${e.clientY - offsetY}px`;
          }
        });
        function unload() {
          emit("RequestClose");
          unloadDialog();
        }
        function changeCurr(newIndex) {
          curr.value = newIndex;
          transformDefault();
        }
        function listBack() {
          if (curr.value > 0)
            changeCurr(--curr.value);
        }
        function listForward() {
          if (curr.value < imageArray.length - 1)
            changeCurr(++curr.value);
        }
        function transformImage() {
          if (currImage.value) {
            currImage.value.style.transform = `scale(${scale.value}) rotate(${deg.value}deg)`;
          }
        }
        function transformDefault() {
          scale.value = 1;
          deg.value = 0;
          transformImage();
        }
        function zoomImage(delta) {
          scale.value += delta;
          scale.value < minSize ? scale.value = minSize : scale.value > maxSize ? scale.value = maxSize : true;
          transformImage();
        }
        function rotateImage(delta) {
          deg.value += delta;
          deg.value % 360 ? true : deg.value = 0;
          transformImage();
        }
        function imageWheel(event) {
          event.preventDefault();
          zoomImage(-event.deltaY / 1e3);
        }
        return (_ctx, _cache) => {
          return vue.openBlock(), vue.createElementBlock("div", {
            ref_key: "imageViewer",
            ref: imageViewer,
            class: "images-viewer dialog-toggle",
            onWheel: imageWheel
          }, [
            vue.createElementVNode("div", _hoisted_1$c, [
              vue.createElementVNode("img", {
                ref_key: "currImage",
                ref: currImage,
                class: "curr-image",
                src: imageArray[curr.value],
                alt: ""
              }, null, 8, _hoisted_2$c)
            ]),
            vue.createElementVNode("div", _hoisted_3$b, [
              vue.createVNode(_sfc_main$k, {
                class: "zoom-in head-btn icon",
                title: "缩小",
                onClick: _cache[0] || (_cache[0] = ($event) => zoomImage(0.5))
              }, {
                default: vue.withCtx(() => [
                  vue.createTextVNode(" zoom_in ")
                ]),
                _: 1
              }),
              vue.createVNode(_sfc_main$k, {
                class: "zoom-out head-btn icon",
                title: "放大",
                onClick: _cache[1] || (_cache[1] = ($event) => zoomImage(-0.5))
              }, {
                default: vue.withCtx(() => [
                  vue.createTextVNode(" zoom_out ")
                ]),
                _: 1
              }),
              vue.createElementVNode("span", _hoisted_4$a, vue.toDisplayString(vue.unref(round)(scale.value * 100) + "%"), 1),
              _hoisted_5$9,
              vue.createVNode(_sfc_main$k, {
                class: "turn-left head-btn icon",
                title: "逆时针旋转",
                onClick: _cache[2] || (_cache[2] = ($event) => rotateImage(-90))
              }, {
                default: vue.withCtx(() => [
                  vue.createTextVNode(" undo ")
                ]),
                _: 1
              }),
              vue.createVNode(_sfc_main$k, {
                class: "turn-right head-btn icon",
                title: "顺时针旋转",
                onClick: _cache[3] || (_cache[3] = ($event) => rotateImage(90))
              }, {
                default: vue.withCtx(() => [
                  vue.createTextVNode(" redo ")
                ]),
                _: 1
              }),
              _hoisted_6$7,
              vue.createVNode(_sfc_main$k, {
                class: "close head-btn icon",
                title: "关闭",
                onClick: unload
              }, {
                default: vue.withCtx(() => [
                  vue.createTextVNode(" close ")
                ]),
                _: 1
              })
            ]),
            imageArray.length > 1 ? (vue.openBlock(), vue.createBlock(_sfc_main$k, {
              key: 0,
              class: "control-panel back icon",
              title: "上一张",
              onClick: listBack
            }, {
              default: vue.withCtx(() => [
                vue.createTextVNode(" chevron_left ")
              ]),
              _: 1
            })) : vue.createCommentVNode("", true),
            imageArray.length > 1 ? (vue.openBlock(), vue.createBlock(_sfc_main$k, {
              key: 1,
              class: "control-panel forward icon",
              title: "下一张",
              onClick: listForward
            }, {
              default: vue.withCtx(() => [
                vue.createTextVNode(" chevron_right ")
              ]),
              _: 1
            })) : vue.createCommentVNode("", true),
            vue.createElementVNode("div", _hoisted_7$6, [
              (vue.openBlock(), vue.createElementBlock(vue.Fragment, null, vue.renderList(imageArray, (image, index2) => {
                return vue.createVNode(_sfc_main$k, {
                  class: vue.normalizeClass(["bottom-btn", { "selected": index2 === curr.value }]),
                  "no-border": "all"
                }, {
                  default: vue.withCtx(() => [
                    vue.createElementVNode("img", {
                      class: "image-list",
                      src: image,
                      alt: "",
                      onClick: ($event) => changeCurr(index2)
                    }, null, 8, _hoisted_8$6)
                  ]),
                  _: 2
                }, 1032, ["class"]);
              }), 64))
            ])
          ], 544);
        };
      }
    });
    const ImagesViewer = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["__scopeId", "data-v-79fe5854"]]);
    const _hoisted_1$b = { class: "main-content" };
    const _hoisted_2$b = { class: "title" };
    const _hoisted_3$a = {
      key: 0,
      class: "content"
    };
    const _hoisted_4$9 = {
      key: 0,
      class: "img-container"
    };
    const _hoisted_5$8 = ["src"];
    const _hoisted_6$6 = { class: "bottom-controls" };
    const _hoisted_7$5 = ["src"];
    const _hoisted_8$5 = { class: "author-info" };
    const _hoisted_9$5 = { class: "author-name" };
    const _hoisted_10$5 = { class: "post-time" };
    const _hoisted_11$4 = { class: "replies" };
    const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
      __name: "post-container",
      props: {
        post: {},
        lazyLoad: { type: Boolean, default: false },
        dynamic: { type: Boolean, default: false }
      },
      emits: ["ClickImage", "AssetsLoaded"],
      setup(__props, { emit: __emit }) {
        const props = __props;
        const emit = __emit;
        const postContainer = vue.ref();
        const isIntersecting = vue.ref(!props.lazyLoad);
        const loadedAssets = vue.ref(0);
        vue.onMounted(() => {
          if (!postContainer.value)
            return;
          if (props.post.images.length === 0) {
            emit("AssetsLoaded", postContainer.value);
          }
          if (!props.lazyLoad)
            return;
          const iObs = new IntersectionObserver((entries) => {
            entries.forEach((entry) => {
              if (entry.isIntersecting) {
                isIntersecting.value = true;
                iObs.disconnect();
              }
            });
          });
          iObs.observe(postContainer.value.$el);
        });
        function showImage(e, index2) {
          e.preventDefault();
          emit("ClickImage", (() => {
            const output = [];
            map(props.post.images, (value) => {
              output.push(value.original);
            });
            return output;
          })(), index2);
        }
        function addLoadedPost() {
          loadedAssets.value += 1;
          if (loadedAssets.value === props.post.images.length) {
            emit("AssetsLoaded", postContainer.value);
          }
        }
        return (_ctx, _cache) => {
          return vue.openBlock(), vue.createBlock(_sfc_main$k, {
            ref_key: "postContainer",
            ref: postContainer,
            "is-anchor": true,
            class: vue.normalizeClass(["post-container", { "dynamic": props.dynamic, "assets-loaded": loadedAssets.value === props.post.images.length }]),
            href: "/p/" + props.post.id,
            target: "_blank"
          }, {
            default: vue.withCtx(() => [
              vue.createElementVNode("div", null, [
                vue.createVNode(_sfc_main$k, {
                  "is-anchor": true,
                  class: "forum-btn",
                  "shadow-border": true,
                  href: props.post.forum.href,
                  target: "_blank"
                }, {
                  default: vue.withCtx(() => [
                    vue.createTextVNode(vue.toDisplayString(props.post.forum.name + " 吧"), 1)
                  ]),
                  _: 1
                }, 8, ["href"])
              ]),
              vue.createElementVNode("div", _hoisted_1$b, [
                vue.createElementVNode("p", _hoisted_2$b, vue.toDisplayString(props.post.title), 1),
                props.post.content && props.post.content !== " " ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_3$a, vue.toDisplayString(props.post.content), 1)) : vue.createCommentVNode("", true)
              ]),
              props.post.images.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$9, [
                (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(props.post.images, (image, index2) => {
                  return vue.openBlock(), vue.createBlock(_sfc_main$k, {
                    class: "img-button",
                    onClick: ($event) => showImage($event, index2),
                    "no-border": "all"
                  }, {
                    default: vue.withCtx(() => [
                      vue.createElementVNode("img", {
                        class: "post-img",
                        src: isIntersecting.value ? image.original : "",
                        onLoad: addLoadedPost
                      }, null, 40, _hoisted_5$8)
                    ]),
                    _: 2
                  }, 1032, ["onClick"]);
                }), 256))
              ])) : vue.createCommentVNode("", true),
              vue.createElementVNode("div", _hoisted_6$6, [
                vue.createVNode(_sfc_main$k, {
                  class: "author",
                  "is-anchor": true,
                  href: props.post.author.href,
                  target: "_blank",
                  "shadow-border": true
                }, {
                  default: vue.withCtx(() => [
                    vue.createElementVNode("img", {
                      class: "author-portrait",
                      src: isIntersecting.value ? vue.unref(tiebaAPI).URL_profile(props.post.author.portrait) : ""
                    }, null, 8, _hoisted_7$5),
                    vue.createElementVNode("div", _hoisted_8$5, [
                      vue.createElementVNode("div", _hoisted_9$5, vue.toDisplayString(props.post.author.name), 1),
                      vue.createElementVNode("div", _hoisted_10$5, vue.toDisplayString(props.post.time), 1)
                    ])
                  ]),
                  _: 1
                }, 8, ["href"]),
                vue.createElementVNode("div", _hoisted_11$4, vue.toDisplayString(props.post.replies), 1)
              ])
            ]),
            _: 1
          }, 8, ["href", "class"]);
        };
      }
    });
    const PostContainer = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__scopeId", "data-v-955dac49"]]);
    const maxFeeds = 1e3;
    const nextFeedsMargin = 320;
    const unreadTTL = 2;
    const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
      __name: "feeds-masonry",
      props: {
        initFeeds: { default: Array },
        showProgress: { type: Boolean, default: false }
      },
      setup(__props) {
        const props = __props;
        const feeds = vue.ref([]);
        const masonryWrapper = vue.ref();
        const masonryContainer = vue.ref();
        const hasMoreFeeds = vue.ref(true);
        let currentLoadedFeeds = [];
        let isFetchingFeeds = false;
        const debAddFeeds = debounce(addFeeds, 1e3, { leading: true });
        let flexMasonry;
        window.addEventListener("resize", throttle(function() {
          if (flexMasonry.columns !== flexMasonry.calcColumns())
            flexMasonry.exec();
        }, 100), { passive: true });
        vue.onMounted(() => {
          if (!masonryWrapper.value)
            return;
          if (!masonryContainer.value)
            return;
          debAddFeeds(props.initFeeds);
          renderMasonry();
          window.addEventListener("scroll", () => {
            if (isFetchingFeeds)
              return;
            const scrollHeight = document.documentElement.scrollHeight;
            const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
            const clientHeight = document.documentElement.clientHeight;
            if (scrollTop + clientHeight >= scrollHeight - nextFeedsMargin) {
              if (feeds.value.length < maxFeeds) {
                debAddFeeds();
              }
            }
          });
        });
        vue.watch(hasMoreFeeds, (newVal) => {
          if (!newVal) {
            toast({
              message: "没有更多推送了",
              type: "warning"
            });
          }
        });
        async function addFeeds(newFeeds) {
          if (!newFeeds)
            newFeeds = [];
          if (isFetchingFeeds)
            return;
          isFetchingFeeds = true;
          if (newFeeds.length <= 0) {
            const response = await requestInstance(tiebaAPI.feedlist());
            if (response) {
              newFeeds = parsePostsFromString(response.data.html);
              hasMoreFeeds.value = Boolean(response.data.has_more);
              if (props.showProgress) {
                headerProgress({ calc: () => currentLoadedFeeds.length / response.data.total * 100 });
              }
            }
          }
          feeds.value.push(...newFeeds);
          const interval = setInterval(() => {
            if (!newFeeds)
              return;
            if (currentLoadedFeeds.length >= newFeeds.length) {
              renderMasonry().then(function() {
                unreadFeeds.set(newFeeds ? newFeeds : [], spawnOffsetTS(0, 0, 0, unreadTTL));
                currentLoadedFeeds.length = 0;
                clearInterval(interval);
                isFetchingFeeds = false;
              });
            }
          }, 10);
        }
        async function renderMasonry() {
          await vue.nextTick(() => {
            if (!masonryContainer.value)
              return;
            if (!flexMasonry) {
              flexMasonry = new FlexMasonry({
                container: masonryContainer.value,
                // items: ".post-elem.assets-loaded",
                columnWidth: 320,
                gap: 12,
                fixScrollOffset: true
              });
            } else {
              flexMasonry.append(".masonry-wrapper > .post-elem.assets-loaded", 60);
            }
          });
        }
        function addToLoaded(payload) {
          currentLoadedFeeds.push(payload.$el);
        }
        function showImages(images, index2) {
          renderDialog(ImagesViewer, {
            content: images,
            defaultIndex: index2
          });
        }
        function refresh() {
          if (!isFetchingFeeds) {
            feeds.value.length = 0;
            flexMasonry.clear();
            debAddFeeds();
          }
        }
        function refreshAndMove() {
          var _a;
          window.scrollTo({ top: (_a = masonryContainer.value) == null ? void 0 : _a.offsetTop, behavior: "smooth" });
          refresh();
        }
        return (_ctx, _cache) => {
          return vue.openBlock(), vue.createElementBlock("div", {
            ref_key: "masonryWrapper",
            ref: masonryWrapper,
            class: "masonry-wrapper"
          }, [
            feeds.value.length > 0 || vue.unref(isFetchingFeeds) ? (vue.openBlock(), vue.createBlock(BlockPanel, { key: 0 }, {
              default: vue.withCtx(() => [
                vue.createVNode(_sfc_main$k, {
                  class: "panel-button icon refresh",
                  "unset-background": "",
                  onClick: refreshAndMove,
                  "no-border": ""
                }, {
                  default: vue.withCtx(() => [
                    vue.createTextVNode("refresh ")
                  ]),
                  _: 1
                }),
                vue.createVNode(_sfc_main$k, {
                  class: "panel-button icon settings",
                  "unset-background": "",
                  "no-border": ""
                }, {
                  default: vue.withCtx(() => [
                    vue.createTextVNode("settings")
                  ]),
                  _: 1
                })
              ]),
              _: 1
            })) : vue.createCommentVNode("", true),
            vue.createElementVNode("div", {
              ref_key: "masonryContainer",
              ref: masonryContainer,
              class: "masonry-container"
            }, null, 512),
            (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(feeds.value, (post) => {
              return vue.openBlock(), vue.createBlock(PostContainer, {
                key: post.id,
                post,
                class: "post-elem",
                dynamic: "",
                "shadow-border": "",
                onClickImage: showImages,
                onAssetsLoaded: addToLoaded
              }, null, 8, ["post"]);
            }), 128))
          ], 512);
        };
      }
    });
    const FeedsMasonry = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-b2793918"]]);
    const _withScopeId$7 = (n) => (vue.pushScopeId("data-v-03b57d82"), n = n(), vue.popScopeId(), n);
    const _hoisted_1$a = { class: "about-wrapper" };
    const _hoisted_2$a = { class: "main-title" };
    const _hoisted_3$9 = ["src"];
    const _hoisted_4$8 = { class: "title" };
    const _hoisted_5$7 = { class: "script-info" };
    const _hoisted_6$5 = { class: "author-info" };
    const _hoisted_7$4 = { class: "version" };
    const _hoisted_8$4 = { class: "author" };
    const _hoisted_9$4 = { class: "about-desc" };
    const _hoisted_10$4 = { class: "line" };
    const _hoisted_11$3 = { class: "about-controls" };
    const _hoisted_12$3 = /* @__PURE__ */ _withScopeId$7(() => /* @__PURE__ */ vue.createElementVNode("div", { class: "about-desc" }, null, -1));
    const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
      __name: "about.detail",
      emits: ["changeView"],
      setup(__props, { emit: __emit }) {
        const scriptInfo = _GM_info;
        const emit = __emit;
        return (_ctx, _cache) => {
          return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$a, [
            vue.createElementVNode("div", _hoisted_2$a, [
              vue.createElementVNode("img", {
                src: vue.unref(getResource)("/assets/images/main/icon.png"),
                alt: "icon",
                class: "main-icon"
              }, null, 8, _hoisted_3$9),
              vue.createElementVNode("div", _hoisted_4$8, vue.toDisplayString(vue.unref(MainTitle)), 1)
            ]),
            vue.createElementVNode("div", _hoisted_5$7, [
              vue.createElementVNode("div", _hoisted_6$5, [
                vue.createElementVNode("div", _hoisted_7$4, vue.toDisplayString(vue.unref(scriptInfo).script.version), 1),
                vue.createElementVNode("div", _hoisted_8$4, "@" + vue.toDisplayString(vue.unref(scriptInfo).script.author), 1)
              ]),
              vue.createElementVNode("div", _hoisted_9$4, [
                (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(`本开源项目使用 MIT 协议`.split("\n"), (line) => {
                  return vue.openBlock(), vue.createElementBlock("div", _hoisted_10$4, vue.toDisplayString(line), 1);
                }), 256))
              ])
            ]),
            vue.createElementVNode("div", _hoisted_11$3, [
              vue.createVNode(_sfc_main$k, {
                class: "about-button github",
                "is-anchor": true,
                href: vue.unref(GithubRepo),
                "shadow-border": true,
                target: "_balnk"
              }, {
                default: vue.withCtx(() => [
                  vue.createTextVNode("开放源代码 ")
                ]),
                _: 1
              }, 8, ["href"]),
              vue.createVNode(_sfc_main$k, {
                class: "about-button update",
                "shadow-border": true,
                onClick: _cache[0] || (_cache[0] = ($event) => emit("changeView", "about", "update"))
              }, {
                default: vue.withCtx(() => [
                  vue.createTextVNode(" 检查更新 ")
                ]),
                _: 1
              })
            ]),
            _hoisted_12$3
          ]);
        };
      }
    });
    const AboutDetail = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-03b57d82"]]);
    const _withScopeId$6 = (n) => (vue.pushScopeId("data-v-1ab16850"), n = n(), vue.popScopeId(), n);
    const _hoisted_1$9 = {
      key: 0,
      class: "update-wrapper"
    };
    const _hoisted_2$9 = { class: "icon" };
    const _hoisted_3$8 = { class: "content" };
    const _hoisted_4$7 = { class: "title-container" };
    const _hoisted_5$6 = { class: "title" };
    const _hoisted_6$4 = {
      key: 0,
      class: "is-pre-release"
    };
    const _hoisted_7$3 = { class: "main-info" };
    const _hoisted_8$3 = ["src"];
    const _hoisted_9$3 = { class: "owner" };
    const _hoisted_10$3 = ["innerHTML"];
    const _hoisted_11$2 = { class: "update-controls" };
    const _hoisted_12$2 = {
      key: 1,
      class: "forbidden-wrapper"
    };
    const _hoisted_13$2 = /* @__PURE__ */ _withScopeId$6(() => /* @__PURE__ */ vue.createElementVNode("div", { class: "icon" }, "warning", -1));
    const _hoisted_14$2 = /* @__PURE__ */ _withScopeId$6(() => /* @__PURE__ */ vue.createElementVNode("div", { class: "forbidden-text" }, "请求过于频繁,请稍后重试", -1));
    const _hoisted_15$2 = [
      _hoisted_13$2,
      _hoisted_14$2
    ];
    const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
      __name: "about.update",
      setup(__props) {
        const release = vue.ref();
        const forbidden = vue.ref(false);
        const isLatest = vue.ref();
        const scriptInfo = _GM_info;
        marked2.marked.setOptions({});
        vue.onMounted(async () => {
          const latest = await getLatestReleaseFromGitee();
          if (latest) {
            forbidden.value = false;
            release.value = latest;
            isLatest.value = `v${scriptInfo.script.version}` >= release.value.tag_name;
          } else {
            forbidden.value = true;
          }
        });
        return (_ctx, _cache) => {
          var _a, _b, _c, _d, _e, _f, _g, _h;
          return !forbidden.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$9, [
            isLatest.value !== void 0 ? (vue.openBlock(), vue.createElementBlock("div", {
              key: 0,
              class: vue.normalizeClass(["latest-info", { "is-latest": isLatest.value }])
            }, [
              vue.createElementVNode("div", _hoisted_2$9, vue.toDisplayString(isLatest.value ? "check" : "warning"), 1),
              vue.createElementVNode("div", _hoisted_3$8, vue.toDisplayString(isLatest.value ? "当前是最新版本" : "检测到新版本"), 1)
            ], 2)) : vue.createCommentVNode("", true),
            vue.createElementVNode("div", _hoisted_4$7, [
              vue.createElementVNode("div", _hoisted_5$6, vue.toDisplayString((_a = release.value) == null ? void 0 : _a.name), 1),
              ((_b = release.value) == null ? void 0 : _b.prerelease) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$4, "预览版")) : vue.createCommentVNode("", true)
            ]),
            vue.createElementVNode("div", _hoisted_7$3, [
              ((_c = release.value) == null ? void 0 : _c.author.avatar_url) ? (vue.openBlock(), vue.createElementBlock("img", {
                key: 0,
                src: (_d = release.value) == null ? void 0 : _d.author.avatar_url,
                alt: "",
                class: "avatar"
              }, null, 8, _hoisted_8$3)) : vue.createCommentVNode("", true),
              vue.createElementVNode("div", _hoisted_9$3, vue.toDisplayString((_e = release.value) == null ? void 0 : _e.author.name), 1)
            ]),
            vue.createElementVNode("div", {
              class: "release-body markdown",
              innerHTML: ((_f = release.value) == null ? void 0 : _f.body) ? vue.unref(marked2.marked)((_g = release.value) == null ? void 0 : _g.body) : ""
            }, null, 8, _hoisted_10$3),
            vue.createElementVNode("div", _hoisted_11$2, [
              vue.createVNode(_sfc_main$k, {
                class: "up-button download-button",
                "shadow-border": "",
                "theme-style": "",
                "is-anchor": "",
                href: (_h = release.value) == null ? void 0 : _h.assets[0].browser_download_url
              }, {
                default: vue.withCtx(() => [
                  vue.createTextVNode("安装更新 ")
                ]),
                _: 1
              }, 8, ["href"])
            ])
          ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_12$2, _hoisted_15$2));
        };
      }
    });
    const AboutUpdate = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-1ab16850"]]);
    const _hoisted_1$8 = { class: "layout-custom-back" };
    const _hoisted_2$8 = ["src"];
    const _hoisted_3$7 = { class: "custom-back-buttons" };
    const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
      __name: "layout.custom-back",
      setup(__props) {
        const imageData = vue.ref(customBackground.get());
        const alphaValue = vue.ref("100");
        const imageAlphaInput = vue.ref();
        vue.watch(imageData, (newValue) => {
          customBackground.set(newValue);
        });
        vue.watch(alphaValue, (newValue) => {
          var _a;
          const inputElement = (_a = imageAlphaInput.value) == null ? void 0 : _a.$el;
          if (newValue === "" || +newValue < 0)
            alphaValue.value = "0", inputElement.value = "0";
          if (+newValue > 100)
            alphaValue.value = "100", inputElement.value = "100";
        });
        vue.onMounted(async function() {
          imageData.value = customBackground.get();
        });
        async function clearImage() {
          imageData.value = null;
        }
        async function selectImageFile() {
          imageData.value = await selectLocalFile("base64");
        }
        return (_ctx, _cache) => {
          return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$8, [
            vue.withDirectives(vue.createElementVNode("img", {
              class: "custom-image",
              src: imageData.value ?? "",
              title: "自定义背景",
              alt: "自定义背景",
              style: vue.normalizeStyle(`opacity: ${+alphaValue.value / 100}`)
            }, null, 12, _hoisted_2$8), [
              [vue.vShow, imageData.value]
            ]),
            vue.createElementVNode("div", _hoisted_3$7, [
              vue.createVNode(_sfc_main$k, { onClick: clearImage }, {
                default: vue.withCtx(() => [
                  vue.createTextVNode("清除")
                ]),
                _: 1
              }),
              vue.createVNode(_sfc_main$k, { onClick: selectImageFile }, {
                default: vue.withCtx(() => [
                  vue.createTextVNode("上传图片")
                ]),
                _: 1
              })
            ])
          ]);
        };
      }
    });
    const LayoutCustomBack = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-95670ea2"]]);
    var zhCn = {
      name: "zh-cn",
      el: {
        colorpicker: {
          confirm: "确定",
          clear: "清空"
        },
        datepicker: {
          now: "此刻",
          today: "今天",
          cancel: "取消",
          clear: "清空",
          confirm: "确定",
          selectDate: "选择日期",
          selectTime: "选择时间",
          startDate: "开始日期",
          startTime: "开始时间",
          endDate: "结束日期",
          endTime: "结束时间",
          prevYear: "前一年",
          nextYear: "后一年",
          prevMonth: "上个月",
          nextMonth: "下个月",
          year: "年",
          month1: "1 月",
          month2: "2 月",
          month3: "3 月",
          month4: "4 月",
          month5: "5 月",
          month6: "6 月",
          month7: "7 月",
          month8: "8 月",
          month9: "9 月",
          month10: "10 月",
          month11: "11 月",
          month12: "12 月",
          weeks: {
            sun: "日",
            mon: "一",
            tue: "二",
            wed: "三",
            thu: "四",
            fri: "五",
            sat: "六"
          },
          months: {
            jan: "一月",
            feb: "二月",
            mar: "三月",
            apr: "四月",
            may: "五月",
            jun: "六月",
            jul: "七月",
            aug: "八月",
            sep: "九月",
            oct: "十月",
            nov: "十一月",
            dec: "十二月"
          }
        },
        select: {
          loading: "加载中",
          noMatch: "无匹配数据",
          noData: "无数据",
          placeholder: "请选择"
        },
        cascader: {
          noMatch: "无匹配数据",
          loading: "加载中",
          placeholder: "请选择",
          noData: "暂无数据"
        },
        pagination: {
          goto: "前往",
          pagesize: "条/页",
          total: "共 {total} 条",
          pageClassifier: "页",
          page: "页",
          prev: "上一页",
          next: "下一页",
          currentPage: "第 {pager} 页",
          prevPages: "向前 {pager} 页",
          nextPages: "向后 {pager} 页",
          deprecationWarning: "你使用了一些已被废弃的用法,请参考 el-pagination 的官方文档"
        },
        messagebox: {
          title: "提示",
          confirm: "确定",
          cancel: "取消",
          error: "输入的数据不合法!"
        },
        upload: {
          deleteTip: "按 delete 键可删除",
          delete: "删除",
          preview: "查看图片",
          continue: "继续上传"
        },
        table: {
          emptyText: "暂无数据",
          confirmFilter: "筛选",
          resetFilter: "重置",
          clearFilter: "全部",
          sumText: "合计"
        },
        tour: {
          next: "下一步",
          previous: "上一步",
          finish: "结束导览"
        },
        tree: {
          emptyText: "暂无数据"
        },
        transfer: {
          noMatch: "无匹配数据",
          noData: "无数据",
          titles: ["列表 1", "列表 2"],
          filterPlaceholder: "请输入搜索内容",
          noCheckedFormat: "共 {total} 项",
          hasCheckedFormat: "已选 {checked}/{total} 项"
        },
        image: {
          error: "加载失败"
        },
        pageHeader: {
          title: "返回"
        },
        popconfirm: {
          confirmButtonText: "确定",
          cancelButtonText: "取消"
        }
      }
    };
    const _withScopeId$5 = (n) => (vue.pushScopeId("data-v-01461a8c"), n = n(), vue.popScopeId(), n);
    const _hoisted_1$7 = { class: "theme-color-component" };
    const _hoisted_2$7 = { class: "picker" };
    const _hoisted_3$6 = /* @__PURE__ */ _withScopeId$5(() => /* @__PURE__ */ vue.createElementVNode("label", { for: "light-theme" }, "浅色主题", -1));
    const _hoisted_4$6 = { class: "picker" };
    const _hoisted_5$5 = /* @__PURE__ */ _withScopeId$5(() => /* @__PURE__ */ vue.createElementVNode("label", { for: "dark-theme" }, "深色主题", -1));
    const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
      __name: "theme.color",
      setup(__props) {
        const lightTheme = vue.ref(themeColor.get().light);
        const darkTheme = vue.ref(themeColor.get().dark);
        function changeThemeColor() {
          themeColor.set({
            dark: darkTheme.value,
            light: lightTheme.value
          });
        }
        function resetThemeColor() {
          themeColor.remove();
          lightTheme.value = themeColor.get().light;
          darkTheme.value = themeColor.get().dark;
        }
        return (_ctx, _cache) => {
          return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [
            vue.createVNode(vue.unref(elementPlus.ElConfigProvider), { locale: vue.unref(zhCn) }, {
              default: vue.withCtx(() => [
                vue.createElementVNode("div", _hoisted_2$7, [
                  vue.createVNode(vue.unref(elementPlus.ElColorPicker), {
                    modelValue: lightTheme.value,
                    "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => lightTheme.value = $event),
                    id: "light-theme",
                    "popper-class": "theme-picker",
                    size: "small",
                    onChange: changeThemeColor
                  }, null, 8, ["modelValue"]),
                  _hoisted_3$6
                ]),
                vue.createElementVNode("div", _hoisted_4$6, [
                  vue.createVNode(vue.unref(elementPlus.ElColorPicker), {
                    modelValue: darkTheme.value,
                    "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => darkTheme.value = $event),
                    id: "dark-theme",
                    "popper-class": "theme-picker",
                    size: "small",
                    onChange: changeThemeColor
                  }, null, 8, ["modelValue"]),
                  _hoisted_5$5
                ]),
                vue.createVNode(_sfc_main$k, {
                  class: "reset-button",
                  onClick: resetThemeColor
                }, {
                  default: vue.withCtx(() => [
                    vue.createTextVNode("重置")
                  ]),
                  _: 1
                })
              ]),
              _: 1
            }, 8, ["locale"])
          ]);
        };
      }
    });
    const ThemeColor = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-01461a8c"]]);
    const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
      __name: "toggle-button",
      props: {
        defaultValue: { type: Boolean },
        iconType: { type: Boolean },
        event: { type: Function }
      },
      setup(__props) {
        const props = __props;
        const toggleButton = vue.ref();
        const currentValue = vue.ref(props.defaultValue);
        function toggleValue() {
          currentValue.value = !currentValue.value;
          props.event && props.event(currentValue.value);
        }
        return (_ctx, _cache) => {
          return vue.openBlock(), vue.createBlock(_sfc_main$k, {
            ref_key: "toggleButton",
            ref: toggleButton,
            class: vue.normalizeClass(["toggle-button", { "toggle-on": currentValue.value, "toggle-off": !currentValue.value, "filled-icon": _ctx.iconType && currentValue.value, "outline-icon": _ctx.iconType && !currentValue.value }]),
            onClick: toggleValue,
            value: currentValue.value
          }, {
            default: vue.withCtx(() => [
              vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
            ]),
            _: 3
          }, 8, ["class", "value"]);
        };
      }
    });
    const ToggleButton = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-83f67b5d"]]);
    const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
      __name: "user-textbox",
      props: {
        modelValue: { default: "" },
        mutiLines: { type: Boolean },
        lodashStyle: { type: Boolean, default: false }
      },
      emits: ["update:modelValue"],
      setup(__props) {
        const props = __props;
        return (_ctx, _cache) => {
          return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(props.mutiLines ? "textarea" : "input"), {
            class: vue.normalizeClass(["user-textbox", { "lodash-style": props.lodashStyle }]),
            type: "text",
            value: _ctx.modelValue,
            onInput: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("update:modelValue", $event.target.value)),
            autocomplete: "off"
          }, null, 40, ["class", "value"]);
        };
      }
    });
    const _withScopeId$4 = (n) => (vue.pushScopeId("data-v-08902f07"), n = n(), vue.popScopeId(), n);
    const _hoisted_1$6 = {
      class: "settings-wrapper remove-default"
    };
    const _hoisted_2$6 = {
      class: "left-container"
    };
    const _hoisted_3$5 = {
      class: "search-controls"
    };
    const _hoisted_4$5 = /* @__PURE__ */ _withScopeId$4(() => /* @__PURE__ */ vue.createElementVNode("div", {
      class: "title"
    }, "设置", -1));
    const _hoisted_5$4 = {
      class: "left-panel"
    };
    const _hoisted_6$3 = {
      class: "icon"
    };
    const _hoisted_7$2 = {
      class: "key-info"
    };
    const _hoisted_8$2 = {
      class: "key-title"
    };
    const _hoisted_9$2 = {
      class: "key-desc"
    };
    const _hoisted_10$2 = {
      class: "middle-container"
    };
    const _hoisted_11$1 = {
      class: "key-title"
    };
    const _hoisted_12$1 = {
      key: 0,
      class: "right-container"
    };
    const _hoisted_13$1 = {
      class: "setting-content"
    };
    const _hoisted_14$1 = {
      key: 0,
      class: "content-title"
    };
    const _hoisted_15$1 = {
      key: 1,
      class: "content-desc"
    };
    const _hoisted_16$1 = {
      class: "line"
    };
    const _hoisted_17$1 = {
      class: "setting-control"
    };
    const _hoisted_18$1 = {
      key: 1,
      class: "icon-component icon"
    };
    const _hoisted_19$1 = ["onChange"];
    const _hoisted_20$1 = ["value", "selected"];
    const _hoisted_21$1 = {
      key: 4,
      class: "content-sub-title"
    };
    const _hoisted_22$1 = {
      key: 5,
      class: "content-desc"
    };
    const _hoisted_23$1 = {
      class: "line"
    };
    const _hoisted_24$1 = ["src", "alt", "title", "onLoad"];
    const _hoisted_25$1 = {
      key: 1,
      class: "empty-container filled-icon"
    };
    const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
      __name: "settings",
      setup(__props) {
        const disabledModulesRef = vue.ref(disabledModules.get());
        vue.ref(experimental.get());
        const updateConfigRef = vue.ref(updateConfig.get());
        const searchText = vue.ref("");
        const settings = {
          "visibility": {
            name: "显示",
            icon: "visibility",
            description: "主题、显示设置",
            sub: {
              "theme": {
                name: "主题",
                content: {
                  "switch-theme": {
                    title: "主题偏好设置",
                    description: `在自动模式下,将根据当前系统设置自动选择合适的主题。你也可以手动应用某一种主题。`,
                    widgets: [{
                      type: "select",
                      content: {
                        "自动": "auto",
                        "深色": "dark",
                        "浅色": "light"
                      },
                      init() {
                        return themeType.get();
                      },
                      event(e) {
                        const newValue = e.target.value;
                        themeType.set(newValue);
                      }
                    }]
                  },
                  "color": {
                    title: "主题颜色",
                    description: `自定义主题色。由于存在深浅两种主题,需要设置两种主题色。`,
                    widgets: [{
                      type: "component",
                      component: vue.markRaw(ThemeColor)
                    }]
                  }
                }
              },
              "layout": {
                name: "页面布局",
                content: {
                  "compact-layout": {
                    title: "紧凑布局",
                    description: `在尽量保证视觉观感的请款下,针对部分页面应用更加紧凑的布局,以提高信息密度。当前会受到影响的页面有:新版看贴页面。`,
                    widgets: [{
                      type: "toggle",
                      init() {
                        return compactLayout.get();
                      },
                      event() {
                        compactLayout.set(!compactLayout.get());
                        document.body.toggleAttribute("compact-layout");
                        return compactLayout.get();
                      }
                    }]
                  },
                  "custom-background": {
                    title: "自定义背景图",
                    description: `上传图片作为页面背景图`,
                    widgets: [{
                      type: "component",
                      component: vue.markRaw(LayoutCustomBack)
                    }]
                  },
                  "wide-screen-title": {
                    title: "宽屏设置",
                    description: `针对宽屏设备进行配置`,
                    widgets: [{
                      type: "subTitle",
                      content: "强制拉伸画幅"
                    }, {
                      type: "desc",
                      content: `对于宽屏设备,不一定需要页面内容宽度始终等于屏幕宽度。如果你想应用强制宽屏,可以开启此项。`
                    }, {
                      type: "toggle",
                      init() {
                        return wideScreen.get().noLimit;
                      },
                      event() {
                        const value = wideScreen.get().noLimit;
                        wideScreen.merge({
                          noLimit: !value
                        });
                        return !value;
                      }
                    }, {
                      type: "subTitle",
                      content: "最大宽度"
                    }, {
                      type: "desc",
                      content: `配置页面元素跟随屏幕拉伸的最大宽度,若开启了 “强制拉伸画幅” 则此项失效`
                    }, {
                      type: "textbox",
                      placeHolder: "输入最大宽度像素值",
                      init() {
                        return String(wideScreen.get().maxPX);
                      },
                      event(e) {
                        const newValue = e.target.value;
                        if (!isNaN(+newValue)) {
                          wideScreen.merge({
                            maxPX: +newValue
                          });
                        }
                      }
                    }]
                  }
                }
              },
              "page-extension": {
                name: "页面扩展",
                content: {
                  "index": {
                    title: "新版主页",
                    description: `新版主页旨在提供纯粹的浏览体验,它通过 Vue 构建。
                            在新版主页上我们目前会更激进地测试一些新功能,包括尚未被广泛使用的新 Web API,以及自构建的 JavaScript 库。`,
                    widgets: [{
                      type: "toggle",
                      init() {
                        return pageExtension.get().index;
                      },
                      event() {
                        pageExtension.merge({
                          index: !pageExtension.get().index
                        });
                        return pageExtension.get().index;
                      }
                    }]
                  },
                  "thread": {
                    title: "新版看帖页面",
                    description: `新版看帖页面使用了全新的 UI 界面,并试图改进屏幕空间利用率。`,
                    widgets: [{
                      type: "toggle",
                      init() {
                        return pageExtension.get().thread;
                      },
                      event() {
                        pageExtension.merge({
                          thread: !pageExtension.get().thread
                        });
                        return pageExtension.get().thread;
                      }
                    }]
                  }
                }
              },
              "fonts": {
                name: "字体",
                content: {
                  "code-zh": {
                    title: "主要字体组合",
                    description: `应用在贴吧绝大多数场景的字体组合。`,
                    widgets: [{
                      type: "textarea",
                      placeHolder: "写入字体名,以换行分隔。若需要中英文混排,需将英文字体写在中文字体之前。",
                      init() {
                        return join(userFonts.get(), "\n");
                      },
                      event(e) {
                        userFonts.set(split(e.target.value, "\n"));
                        return join(userFonts.get(), "\n");
                      }
                    }]
                  },
                  "code-monospace": {
                    title: "等宽字体组合",
                    description: `应用在数据显示等场景的等宽字体组合。`,
                    widgets: [{
                      type: "textarea",
                      placeHolder: "写入字体名,以换行分隔。建议在此处写入等宽字体。",
                      init() {
                        return join(monospaceFonts.get(), "\n");
                      },
                      event(e) {
                        monospaceFonts.set(split(e.target.value, "\n"));
                        return join(monospaceFonts.get(), "\n");
                      }
                    }]
                  }
                }
              }
            }
          },
          "modules": {
            name: "模块",
            icon: "deployed_code",
            description: "用户模块管理及部署",
            sub: AllModules().reduce((accu, curr, index2) => {
              function toSubSettingKey(module2) {
                return {
                  name: module2.name,
                  description: module2.brief,
                  content: {
                    "module-info": {
                      title: module2.name,
                      description: `${module2.id} ${module2.version}
                                ${module2.description}`,
                      widgets: [{
                        type: "toggle",
                        init() {
                          return includes(disabledModulesRef.value, module2.id) ? false : true;
                        },
                        event() {
                          if (includes(disabledModulesRef.value, module2.id)) {
                            pull$1(disabledModulesRef.value, module2.id);
                            disabledModules.set([...new Set(disabledModulesRef.value)]);
                            return true;
                          } else {
                            disabledModulesRef.value.push(module2.id);
                            disabledModules.set([...new Set(disabledModulesRef.value)]);
                            return false;
                          }
                        }
                      }]
                    },
                    ...module2.settings
                  }
                };
              }
              if (index2 === 1) {
                const accuObject = toSubSettingKey(accu);
                accu = {};
                accu[accuObject.name] = accuObject;
              }
              accu[curr.name] = toSubSettingKey(curr);
              return accu;
            })
          },
          "enhanced": {
            name: "高级",
            icon: "labs",
            description: "提前测试一些尚不稳定的新功能",
            sub: {
              "experimental": {
                name: "实验性功能",
                content: {
                  "title": {
                    title: "实验室",
                    description: `本版块列举了一些实验性功能,这些功能正处于开发阶段,它们当中的大部分都是默认关闭的。
                            这些功能可能会产生已知、未知的错误或性能问题,如果这些问题能被更及时全面地反馈,将有助于整个项目的发展。
                            需要注意的是,这些特性并不保证会保留到后续版本中。`,
                    widgets: [{
                      type: "icon",
                      content: "lab_research"
                    }]
                  }
                }
                /* as KeyMapped<ReturnType<typeof experimental.get>, SettingContent> */
              },
              "backup-recover": {
                name: "备份与恢复",
                content: {
                  "data-backup": {
                    title: "数据备份",
                    description: `备份脚本所有自定义配置`,
                    widgets: [{
                      type: "button",
                      content: "备份",
                      event() {
                        backupUserConfigs();
                      }
                    }]
                  },
                  "recover-backup": {
                    title: "数据恢复",
                    description: `从备份文件中恢复脚本所有自定义配置`,
                    widgets: [{
                      type: "button",
                      content: "恢复",
                      event() {
                        restoreUserConfigs();
                      }
                    }]
                  }
                }
              },
              "factory-reset": {
                name: "重置所有配置",
                content: {
                  "title": {
                    title: "重置所有配置",
                    description: `如果你需要将脚本的一切配置恢复默认,请使用此功能。`
                  },
                  "reset": {
                    widgets: [{
                      type: "button",
                      content: "重置",
                      event() {
                        if (confirm("该操作是不可逆的,请做最后一次确认")) {
                          forEach(_GM_listValues(), (key) => {
                            _GM_deleteValue(key);
                          });
                          location.reload();
                        }
                      }
                    }]
                  }
                }
              }
            }
          },
          "about": {
            name: "关于",
            icon: "person",
            description: "开发信息与检查更新",
            sub: {
              "update": {
                name: "检查更新",
                content: {
                  "update-time": {
                    title: "检查更新设置",
                    description: `发行信息追踪频率`,
                    widgets: [{
                      type: "select",
                      content: {
                        "1 小时": "1h",
                        "3 小时": "3h",
                        "6 小时": "6h",
                        "从不": "never"
                      },
                      init() {
                        return updateConfig.get().time;
                      },
                      event(e) {
                        const newValue = e.target.value;
                        updateConfig.merge({
                          time: newValue
                        });
                      }
                    }]
                  },
                  "update-notify": {
                    description: `启用一个对话框提示用户更新。该对话框可以立即安装更新,也可以推迟更新操作。`,
                    widgets: [{
                      type: "toggle",
                      init() {
                        return updateConfigRef.value.notify;
                      },
                      event() {
                        const newValue = !updateConfig.get().notify;
                        updateConfigRef.value.notify = newValue;
                        updateConfig.merge({
                          notify: newValue
                        });
                      }
                    }]
                  },
                  "update-component": {
                    widgets: [{
                      type: "component",
                      component: vue.markRaw(AboutUpdate)
                    }]
                  }
                }
              },
              "about": {
                name: "关于项目",
                content: {
                  "about-component": {
                    widgets: [{
                      type: "component",
                      component: vue.markRaw(AboutDetail)
                    }]
                  }
                }
              }
            }
          }
        };
        const selectedKey = vue.ref();
        const selectedSubKey = vue.ref();
        function selectMainKey(key) {
          selectedKey.value = key;
          selectedSubKey.value = void 0;
        }
        function selectSubKey(key) {
          selectedSubKey.value = key;
        }
        function changeView(key, sub) {
          selectedKey.value = settings[key];
          selectedSubKey.value = settings[key].sub[sub];
        }
        function clearSelections() {
          selectedKey.value = void 0;
          selectedSubKey.value = void 0;
        }
        function searchKey() {
          if (searchText.value.length <= 0) {
            clearSelections();
            return;
          }
          if (!find$1(settings, (mainKey) => {
            if (find$1(mainKey.sub, (subKey) => {
              if (subKey.name.toLowerCase().includes(searchText.value.toLowerCase())) {
                selectedKey.value = mainKey;
                selectedSubKey.value = subKey;
                return true;
              } else {
                return false;
              }
            }))
              return true;
            else
              return false;
          }))
            clearSelections();
        }
        const debSearchKey = debounce(searchKey, 500);
        return (_ctx, _cache) => {
          var _a, _b, _c;
          return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$6, [vue.createElementVNode("div", _hoisted_2$6, [vue.createElementVNode("div", _hoisted_3$5, [_hoisted_4$5, vue.createVNode(_sfc_main$7, {
            modelValue: searchText.value,
            "onUpdate:modelValue": [_cache[0] || (_cache[0] = ($event) => searchText.value = $event), vue.unref(debSearchKey)],
            class: "search-box",
            placeholder: "输入需要搜索的设置"
          }, null, 8, ["modelValue", "onUpdate:modelValue"])]), vue.createElementVNode("div", _hoisted_5$4, [(vue.openBlock(), vue.createElementBlock(vue.Fragment, null, vue.renderList(settings, (setting) => {
            var _a2;
            return vue.createVNode(_sfc_main$k, {
              class: vue.normalizeClass(["key-button main-key", {
                "selected": ((_a2 = selectedKey.value) == null ? void 0 : _a2.name) === setting.name
              }]),
              onClick: ($event) => selectMainKey(setting),
              "no-border": ""
            }, {
              default: vue.withCtx(() => [vue.createElementVNode("div", _hoisted_6$3, vue.toDisplayString(setting.icon), 1), vue.createElementVNode("div", _hoisted_7$2, [vue.createElementVNode("div", _hoisted_8$2, vue.toDisplayString(setting.name), 1), vue.createElementVNode("div", _hoisted_9$2, vue.toDisplayString(setting.description), 1)])]),
              _: 2
            }, 1032, ["class", "onClick"]);
          }), 64))])]), vue.createElementVNode("div", _hoisted_10$2, [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList((_a = selectedKey.value) == null ? void 0 : _a.sub, (setting) => {
            var _a2;
            return vue.openBlock(), vue.createBlock(_sfc_main$k, {
              class: vue.normalizeClass(["key-button sub-key", {
                "selected": ((_a2 = selectedSubKey.value) == null ? void 0 : _a2.name) === setting.name
              }]),
              onClick: ($event) => selectSubKey(setting),
              "no-border": ""
            }, {
              default: vue.withCtx(() => [vue.createElementVNode("div", _hoisted_11$1, vue.toDisplayString(setting.name), 1)]),
              _: 2
            }, 1032, ["class", "onClick"]);
          }), 256))]), ((_b = selectedSubKey.value) == null ? void 0 : _b.name) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_12$1, [((_c = selectedSubKey.value) == null ? void 0 : _c.name) ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, {
            key: 0
          }, vue.renderList(selectedSubKey.value.content, (content) => {
            return vue.openBlock(), vue.createElementBlock("div", _hoisted_13$1, [(content == null ? void 0 : content.title) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_14$1, vue.toDisplayString(content == null ? void 0 : content.title), 1)) : vue.createCommentVNode("", true), (content == null ? void 0 : content.description) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_15$1, [(content == null ? void 0 : content.description) ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, {
              key: 0
            }, vue.renderList(content.description.split("\n"), (line) => {
              return vue.openBlock(), vue.createElementBlock("div", _hoisted_16$1, vue.toDisplayString(line), 1);
            }), 256)) : vue.createCommentVNode("", true)])) : vue.createCommentVNode("", true), (content == null ? void 0 : content.widgets) ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, {
              key: 2
            }, vue.renderList(content.widgets, (widget) => {
              var _a2;
              return vue.openBlock(), vue.createElementBlock("div", _hoisted_17$1, [widget.type === "toggle" ? (vue.openBlock(), vue.createBlock(ToggleButton, {
                key: 0,
                class: "settings-toggle-button icon",
                "default-value": widget.init ? widget.init() : void 0,
                onClick: widget.event,
                "icon-type": "",
                "no-border": "all"
              }, null, 8, ["default-value", "onClick"])) : vue.createCommentVNode("", true), widget.type === "icon" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_18$1, vue.toDisplayString(widget.content), 1)) : vue.createCommentVNode("", true), widget.type === "button" ? (vue.openBlock(), vue.createBlock(_sfc_main$k, {
                key: 2,
                onClick: widget.event,
                "shadow-border": ""
              }, {
                default: vue.withCtx(() => [vue.createTextVNode(vue.toDisplayString(widget.content), 1)]),
                _: 2
              }, 1032, ["onClick"])) : vue.createCommentVNode("", true), widget.type === "select" && vue.unref(isRealObject)(widget.content) ? (vue.openBlock(), vue.createElementBlock("select", {
                key: 3,
                onChange: widget.event
              }, [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(widget.content, (value, key) => {
                return vue.openBlock(), vue.createElementBlock("option", {
                  value,
                  selected: widget.init && value === widget.init()
                }, vue.toDisplayString(key), 9, _hoisted_20$1);
              }), 256))], 40, _hoisted_19$1)) : vue.createCommentVNode("", true), widget.type === "subTitle" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_21$1, vue.toDisplayString(widget.content), 1)) : vue.createCommentVNode("", true), widget.type === "desc" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_22$1, [widget.content ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, {
                key: 0
              }, vue.renderList(widget.content.split("\n"), (line) => {
                return vue.openBlock(), vue.createElementBlock("div", _hoisted_23$1, vue.toDisplayString(line), 1);
              }), 256)) : vue.createCommentVNode("", true)])) : vue.createCommentVNode("", true), vue.unref(includes)(["textbox", "textarea"], widget.type) ? (vue.openBlock(), vue.createBlock(_sfc_main$7, {
                key: 6,
                class: vue.normalizeClass(["content-textbox", {
                  "textarea": widget.type === "textarea"
                }]),
                value: widget.init ? widget.init() : "",
                "muti-lines": widget.type === "textarea",
                placeholder: widget.placeHolder,
                onChange: widget.event
              }, null, 8, ["class", "value", "muti-lines", "placeholder", "onChange"])) : vue.createCommentVNode("", true), widget.type === "image" ? (vue.openBlock(), vue.createElementBlock("img", {
                key: 7,
                class: "content-image",
                src: (_a2 = widget.content) == null ? void 0 : _a2.toString(),
                alt: widget.altContent,
                title: widget.altContent,
                onLoad: widget.init
              }, null, 40, _hoisted_24$1)) : vue.createCommentVNode("", true), widget.component ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(widget == null ? void 0 : widget.component), {
                key: 8,
                onChangeView: changeView
              }, null, 32)) : vue.createCommentVNode("", true)]);
            }), 256)) : vue.createCommentVNode("", true)]);
          }), 256)) : vue.createCommentVNode("", true)])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_25$1, "settings"))]);
        };
      }
    });
    const Settings = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-08902f07"]]);
    const _withScopeId$3 = (n) => (vue.pushScopeId("data-v-c9e404e5"), n = n(), vue.popScopeId(), n);
    const _hoisted_1$5 = { class: "index-wrapper" };
    const _hoisted_2$5 = { class: "grid-container" };
    const _hoisted_3$4 = { class: "head-controls" };
    const _hoisted_4$4 = { class: "search-controls" };
    const _hoisted_5$3 = { class: "search-suggestions" };
    const _hoisted_6$2 = ["src"];
    const _hoisted_7$1 = { class: "sugg-content" };
    const _hoisted_8$1 = { class: "sugg-title" };
    const _hoisted_9$1 = { class: "sugg-desc" };
    const _hoisted_10$1 = {
      key: 0,
      class: "block-wrapper followed-container"
    };
    const _hoisted_11 = { class: "block-controls followed" };
    const _hoisted_12 = /* @__PURE__ */ _withScopeId$3(() => /* @__PURE__ */ vue.createElementVNode("p", { class: "block-title" }, "关注的吧", -1));
    const _hoisted_13 = { class: "block-container followed-list" };
    const _hoisted_14 = {
      key: 0,
      class: "icon signed"
    };
    const _hoisted_15 = { class: "forum-title" };
    const _hoisted_16 = {
      key: 1,
      class: "block-wrapper topic-container"
    };
    const _hoisted_17 = { class: "block-controls topics" };
    const _hoisted_18 = /* @__PURE__ */ _withScopeId$3(() => /* @__PURE__ */ vue.createElementVNode("p", { class: "block-title" }, "贴吧热议", -1));
    const _hoisted_19 = { class: "block-container topic-list" };
    const _hoisted_20 = ["src"];
    const _hoisted_21 = { class: "topic-content" };
    const _hoisted_22 = { class: "topic-title" };
    const _hoisted_23 = { class: "topic-name" };
    const _hoisted_24 = { class: "topic-desc" };
    const _hoisted_25 = /* @__PURE__ */ _withScopeId$3(() => /* @__PURE__ */ vue.createElementVNode("div", { id: "carousel_wrap" }, null, -1));
    const _hoisted_26 = {
      key: 0,
      class: "empty-container"
    };
    const _hoisted_27 = /* @__PURE__ */ _withScopeId$3(() => /* @__PURE__ */ vue.createElementVNode("p", { class: "no-feed-content" }, "没有更多了", -1));
    const _hoisted_28 = [
      _hoisted_27
    ];
    const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
      __name: "index",
      setup(__props) {
        const initFeeds = vue.ref([]);
        const userInfo = vue.ref();
        const followed = vue.ref();
        const masonryContainer = vue.ref();
        const feedsContainer = vue.ref();
        const searchText = vue.ref("");
        const suggToggle = vue.ref(false);
        const suggestions = vue.ref([]);
        vue.ref(false);
        const configMenu = vue.ref();
        vue.ref(false);
        const profileMenu = vue.ref();
        const topicList = vue.ref([]);
        const feedsIntersecting = vue.ref(false);
        let signedForums = 0;
        initFeeds.value = unreadFeeds.get();
        vue.onMounted(async () => {
          init().then(() => {
            if (masonryContainer.value) {
              const iObs = new IntersectionObserver((entries) => {
                if (entries[0].isIntersecting) {
                  feedsIntersecting.value = true;
                } else {
                  feedsIntersecting.value = false;
                }
              });
              iObs.observe(masonryContainer.value);
            }
          });
        });
        window.addEventListener("focusin", (ev) => toggleSuggControls(ev));
        window.addEventListener("mousedown", (ev) => toggleSuggControls(ev));
        async function init() {
          userInfo.value = await (async () => {
            try {
              const userInfoResp = await (await tiebaAPI.userInfo()).json();
              if (userInfoResp) {
                return userInfoResp.data;
              }
            } catch (error) {
              toast({
                message: errorMessage(error),
                type: "error",
                duration: 6e3
              });
            }
          })();
          configMenu.value = [
            {
              title: "设置",
              click() {
                renderDialog(Settings);
              }
            },
            "separator",
            {
              title: "源代码 (GitHub)",
              href: GithubRepo
            },
            {
              title: "源代码 (Gitee)",
              href: GiteeRepo
            }
          ];
          profileMenu.value = [
            {
              title: "登录",
              icon: "login",
              href: BaiduPassport
            }
          ];
          if (userInfo.value) {
            profileMenu.value = [
              {
                title: "我的收藏",
                icon: "star"
              },
              "separator",
              {
                title: "主页",
                icon: "home",
                href: tiebaAPI.URL_userHome(userInfo.value.user_portrait)
              },
              {
                title: "修改",
                icon: "settings"
              },
              "separator",
              {
                title: "退出登录",
                icon: "logout"
              }
            ];
          }
          if (userInfo.value) {
            getFollowedInstance();
          }
          requestInstance(tiebaAPI.topicList()).then((response) => {
            if (response) {
              topicList.value.push(...response.data.bang_topic.topic_list);
            }
          });
          if (!feedsContainer.value)
            return;
        }
        function toggleSuggControls(e) {
          const el = e.target;
          const pt = findParentByClass(el, "search-controls");
          if (pt) {
            suggToggle.value = true;
          } else {
            suggToggle.value = false;
          }
        }
        async function loadSuggestions(query) {
          const response = await tiebaAPI.suggestions(query);
          if (response.ok) {
            response.json().then((value) => {
              if (!query || query === "") {
                const topicList2 = value.hottopic_list.search_data;
                if (topicList2)
                  suggestions.value = map(topicList2, (topic) => ({
                    image: topic.topic_pic,
                    title: topic.topic_name,
                    desc: topic.topic_desc,
                    href: topic.topic_url
                  }));
              } else {
                const matchList = value.query_match.search_data;
                if (matchList)
                  suggestions.value = map(matchList, (match) => ({
                    image: match.fpic,
                    title: match.fname,
                    desc: match.forum_desc,
                    href: tiebaAPI.URL_forum(match.fname)
                  }));
              }
            });
          }
        }
        function searchBoxFocus() {
          if (suggestions.value.length <= 0) {
            loadSuggestions().then(() => {
              suggToggle.value = true;
            });
          } else {
            suggToggle.value = true;
          }
        }
        function searchTextChange() {
          loadSuggestions(searchText.value);
        }
        const searchMatch = debounce(searchTextChange, 500);
        function getFollowedInstance() {
          requestInstance(tiebaAPI.followedForums()).then((response) => {
            if (response) {
              signedForums = 0;
              followed.value = response.data;
              forEach(followed.value.like_forum, (forum) => {
                if (forum.is_sign === 1)
                  signedForums++;
              });
              followed.value.like_forum.sort((a, b) => parseInt(b.user_exp) - parseInt(a.user_exp));
            }
          });
        }
        async function oneKeySignInstance() {
          messageBox({
            title: "一键签到",
            message: "需要注意,Web端签到获取到的经验远少于移动端,建议使用其他设备进行签到。",
            type: "OkCancel"
          }).then((tag) => {
            if (tag === "positive") {
              requestInstance(tiebaAPI.oneKeySign()).then((response) => {
                toast({
                  message: `本次共签到成功 ${response.data.signedForumAmount} 个吧,未签到 ${response.data.unsignedForumAmount} 个吧,签到失败 ${response.data.signedForumAmountFail} 个吧,共获得 ${response.data.gradeNoVip} 经验。`,
                  type: "check",
                  blurEffect: true
                });
                getFollowedInstance();
              });
            }
          });
        }
        return (_ctx, _cache) => {
          return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [
            vue.createElementVNode("div", _hoisted_2$5, [
              vue.createElementVNode("div", _hoisted_3$4, [
                vue.createElementVNode("div", _hoisted_4$4, [
                  vue.createVNode(_sfc_main$7, {
                    modelValue: searchText.value,
                    "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchText.value = $event),
                    class: "search-box",
                    placeholder: "搜索 贴吧",
                    autocomplete: "none",
                    onFocus: searchBoxFocus,
                    onInput: vue.unref(searchMatch)
                  }, null, 8, ["modelValue", "onInput"]),
                  vue.createVNode(_sfc_main$k, {
                    class: "search-button",
                    "theme-style": true,
                    "no-border": ""
                  }, {
                    default: vue.withCtx(() => [
                      vue.createTextVNode("搜索")
                    ]),
                    _: 1
                  }),
                  vue.withDirectives(vue.createElementVNode("div", _hoisted_5$3, [
                    (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(suggestions.value, (sugg) => {
                      return vue.openBlock(), vue.createBlock(_sfc_main$k, {
                        "is-anchor": true,
                        class: "search-elem",
                        href: sugg.href,
                        target: "_blank",
                        "no-border": ""
                      }, {
                        default: vue.withCtx(() => [
                          vue.createElementVNode("img", {
                            class: "sugg-img",
                            src: sugg.image,
                            alt: ""
                          }, null, 8, _hoisted_6$2),
                          vue.createElementVNode("div", _hoisted_7$1, [
                            vue.createElementVNode("p", _hoisted_8$1, vue.toDisplayString(sugg.title), 1),
                            vue.createElementVNode("p", _hoisted_9$1, vue.toDisplayString(sugg.desc), 1)
                          ])
                        ]),
                        _: 2
                      }, 1032, ["href"]);
                    }), 256))
                  ], 512), [
                    [vue.vShow, suggToggle.value && suggestions.value.length > 0]
                  ])
                ])
              ]),
              followed.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_10$1, [
                vue.createElementVNode("div", _hoisted_11, [
                  _hoisted_12,
                  vue.createVNode(BlockPanel, { class: "signed-count left-align" }, {
                    default: vue.withCtx(() => {
                      var _a;
                      return [
                        vue.createTextVNode(vue.toDisplayString(vue.unref(signedForums)) + " / " + vue.toDisplayString((_a = followed.value) == null ? void 0 : _a.like_forum.length), 1)
                      ];
                    }),
                    _: 1
                  }),
                  vue.createVNode(BlockPanel, { class: "followed" }, {
                    default: vue.withCtx(() => [
                      vue.createVNode(_sfc_main$k, {
                        class: "panel-btn icon sign-btn",
                        onClick: oneKeySignInstance,
                        "unset-background": "",
                        "no-border": ""
                      }, {
                        default: vue.withCtx(() => [
                          vue.createTextVNode(" task_alt")
                        ]),
                        _: 1
                      }),
                      vue.createVNode(_sfc_main$k, {
                        class: "panel-btn icon settings",
                        "unset-background": "",
                        "no-border": ""
                      }, {
                        default: vue.withCtx(() => [
                          vue.createTextVNode("settings")
                        ]),
                        _: 1
                      })
                    ]),
                    _: 1
                  })
                ]),
                vue.createElementVNode("div", _hoisted_13, [
                  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(followed.value.like_forum, (forum) => {
                    return vue.openBlock(), vue.createBlock(_sfc_main$k, {
                      "is-anchor": true,
                      class: "followed-btn",
                      "shadow-border": true,
                      href: vue.unref(tiebaAPI).URL_forum(forum.forum_name),
                      target: "_blank",
                      "no-border": ""
                    }, {
                      default: vue.withCtx(() => [
                        forum.is_sign === 1 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_14, "check")) : vue.createCommentVNode("", true),
                        vue.createElementVNode("div", _hoisted_15, vue.toDisplayString(forum.forum_name), 1),
                        vue.createElementVNode("div", {
                          class: vue.normalizeClass(["forum-level", "level-" + vue.unref(levelToClass)(forum.user_level)])
                        }, vue.toDisplayString(forum.user_level), 3)
                      ]),
                      _: 2
                    }, 1032, ["href"]);
                  }), 256))
                ])
              ])) : vue.createCommentVNode("", true),
              topicList.value.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_16, [
                vue.createElementVNode("div", _hoisted_17, [
                  _hoisted_18,
                  vue.createVNode(BlockPanel, { class: "topics" }, {
                    default: vue.withCtx(() => [
                      vue.createVNode(_sfc_main$k, {
                        class: "panel-btn icon switch",
                        "unset-background": true,
                        "no-border": ""
                      }, {
                        default: vue.withCtx(() => [
                          vue.createTextVNode("tune")
                        ]),
                        _: 1
                      }),
                      vue.createVNode(_sfc_main$k, {
                        class: "panel-btn icon more",
                        "unset-background": true,
                        "no-border": ""
                      }, {
                        default: vue.withCtx(() => [
                          vue.createTextVNode("more_horiz")
                        ]),
                        _: 1
                      }),
                      vue.createVNode(_sfc_main$k, {
                        class: "panel-btn icon settings",
                        "unset-background": true,
                        "no-border": ""
                      }, {
                        default: vue.withCtx(() => [
                          vue.createTextVNode("settings")
                        ]),
                        _: 1
                      })
                    ]),
                    _: 1
                  })
                ]),
                vue.createElementVNode("div", _hoisted_19, [
                  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(take)(topicList.value, 10), (topic) => {
                    return vue.openBlock(), vue.createBlock(_sfc_main$k, {
                      "is-anchor": true,
                      class: "topic-btn",
                      "shadow-border": true,
                      href: topic.topic_url,
                      target: "_blank"
                    }, {
                      default: vue.withCtx(() => [
                        vue.createElementVNode("img", {
                          class: "topic-img",
                          src: topic.topic_pic
                        }, null, 8, _hoisted_20),
                        vue.createElementVNode("div", _hoisted_21, [
                          vue.createElementVNode("div", _hoisted_22, [
                            vue.createElementVNode("div", {
                              class: vue.normalizeClass("topic-rank-" + topic.idx_num)
                            }, vue.toDisplayString(topic.idx_num), 3),
                            vue.createElementVNode("div", _hoisted_23, vue.toDisplayString(topic.topic_name), 1)
                          ]),
                          vue.createElementVNode("div", _hoisted_24, vue.toDisplayString(topic.topic_desc), 1)
                        ])
                      ]),
                      _: 2
                    }, 1032, ["href"]);
                  }), 256))
                ])
              ])) : vue.createCommentVNode("", true),
              _hoisted_25
            ]),
            vue.createElementVNode("div", {
              ref_key: "masonryContainer",
              ref: masonryContainer,
              class: "masonry-container"
            }, [
              vue.createVNode(FeedsMasonry, {
                "init-feeds": initFeeds.value,
                "show-progress": ""
              }, null, 8, ["init-feeds"]),
              initFeeds.value.length === 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_26, _hoisted_28)) : vue.createCommentVNode("", true)
            ], 512)
          ]);
        };
      }
    });
    const indexVue = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-c9e404e5"]]);
    async function index$g() {
      if (currentPageType() !== "index")
        return;
      if (!pageExtension.get().index)
        return;
      const bodyMask = _GM_addStyle(parseMultiCSS({
        "body": {
          display: "none"
        }
      }));
      await waitUtil(() => DOMS(true, ".wrap1") !== null, void 0, 4);
      renderPage(indexVue);
      DOMS(true, ".wrap1").remove();
      bodyMask.remove();
    }
    const _hoisted_1$4 = { id: "thread-editor" };
    const _hoisted_2$4 = { id: "thread-editor-toolbar" };
    const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
      __name: "thread-editor",
      props: {
        ueditor: {},
        type: { default: "thread" }
      },
      setup(__props) {
        const props = __props;
        const editorSlot = vue.ref();
        const originParent = vue.ref();
        vue.onMounted(async function() {
          var _a;
          if (!editorSlot.value)
            return;
          originParent.value = props.ueditor.parentElement;
          editorSlot.value.appendChild(props.ueditor);
          await waitUtil(() => DOMS(".edui-editor-body").length > 0);
          const toolbar = DOMS(".edui-toolbar")[0];
          const editorBody = DOMS(".edui-editor-body")[0];
          if (toolbar.compareDocumentPosition(editorBody) & Node.DOCUMENT_POSITION_FOLLOWING) {
            (_a = toolbar.parentNode) == null ? void 0 : _a.insertBefore(editorBody, toolbar);
          }
          DOMS("#ueditor_replace")[0].focus();
        });
        vue.onUnmounted(async function() {
          unload();
        });
        function submit() {
          DOMS(".j_submit", "a")[0].click();
          unload();
        }
        function unload() {
          if (!originParent.value)
            return;
          if (!editorSlot.value)
            return;
          originParent.value.appendChild(DOMS(".edui-container")[0]);
          unloadDialog();
        }
        return (_ctx, _cache) => {
          return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [
            vue.createVNode(_sfc_main$k, {
              id: "thread-editor-exit",
              class: "icon",
              "shadow-border": "",
              onClick: unload
            }, {
              default: vue.withCtx(() => [
                vue.createTextVNode("close ")
              ]),
              _: 1
            }),
            _ctx.type === "thread" ? (vue.openBlock(), vue.createBlock(_sfc_main$7, {
              key: 0,
              class: "title-editor",
              placeholder: "输入标题",
              "lodash-style": ""
            })) : vue.createCommentVNode("", true),
            vue.createElementVNode("div", {
              ref_key: "editorSlot",
              ref: editorSlot,
              id: "thread-editor-slot"
            }, null, 512),
            vue.createElementVNode("div", _hoisted_2$4, [
              vue.createVNode(_sfc_main$k, {
                id: "thread-editor-submit",
                "shadow-border": "",
                "theme-style": "",
                onClick: submit
              }, {
                default: vue.withCtx(() => [
                  vue.createTextVNode("发表")
                ]),
                _: 1
              })
            ])
          ]);
        };
      }
    });
    const ThreadEditor = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-b3531ddc"]]);
    const _withScopeId$2 = (n) => (vue.pushScopeId("data-v-521b9a21"), n = n(), vue.popScopeId(), n);
    const _hoisted_1$3 = {
      id: "toggle-panel",
      class: "toggle-panel"
    };
    const _hoisted_2$3 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ vue.createElementVNode("div", { class: "panel-info" }, [
      /* @__PURE__ */ vue.createElementVNode("div", { class: "panel-title" }),
      /* @__PURE__ */ vue.createElementVNode("div", { class: "panel-desc" })
    ], -1));
    const _hoisted_3$3 = { class: "toggle-wrapper" };
    const _hoisted_4$3 = { class: "toggle-container" };
    const _hoisted_5$2 = { class: "toggle-name" };
    const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
      __name: "toggle-panel",
      props: {
        toggles: {}
      },
      setup(__props) {
        const props = __props;
        return (_ctx, _cache) => {
          return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$3, [
            _hoisted_2$3,
            vue.createElementVNode("div", _hoisted_3$3, [
              (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(props.toggles, (toggle) => {
                return vue.openBlock(), vue.createElementBlock("div", _hoisted_4$3, [
                  vue.createVNode(ToggleButton, {
                    class: "panel-button",
                    "default-value": toggle.defaultValue,
                    "icon-type": "",
                    "shadow-border": "",
                    onClick: toggle.event
                  }, {
                    default: vue.withCtx(() => [
                      vue.createTextVNode(vue.toDisplayString(toggle.icon), 1)
                    ]),
                    _: 2
                  }, 1032, ["default-value", "onClick"]),
                  vue.createElementVNode("div", _hoisted_5$2, vue.toDisplayString(toggle.name), 1)
                ]);
              }), 256))
            ])
          ]);
        };
      }
    });
    const togglePanelVue = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-521b9a21"]]);
    class TiebaComponent {
      constructor(selector, type, parent) {
        __publicField(this, "selector");
        __publicField(this, "type");
        __publicField(this, "parent");
        this.selector = selector;
        this.type = type;
        this.parent = parent;
      }
      get() {
        if (!this.parent)
          return DOMS(this.selector, this.type)[0];
        else
          return DOMS(this.selector, this.type, this.parent)[0];
      }
    }
    const floatButtonMap = {
      "auxiliary": "tbui_fbar_auxiliaryCare",
      "down": "tbui_fbar_down",
      "post": "tbui_fbar_post",
      "props": "tbui_fbar_props",
      "tsukkomi": "tbui_fbar_tsukkomi",
      "share": "tbui_fbar_share",
      "favor": "tbui_fbar_favor",
      "feedback": "tbui_fbar_feedback",
      "top": "tbui_fbar_top",
      "other": "*"
    };
    class FloatBar extends TiebaComponent {
      /**
       * 获取当前页面的 float buttons
       * @returns FloatBarButton[]
       */
      buttons() {
        if (!this.get())
          return [];
        return Array.from(DOMS(".tbui_aside_fbar_button", "li", floatBar.get())).map((el) => ({
          el,
          type: function() {
            for (let i = 0; i < el.classList.length; i++) {
              const cls = el.classList[i];
              if (!cls.includes("tbui_fbar_"))
                continue;
              const key = findKey(floatButtonMap, (value) => value === cls);
              if (key) {
                return key;
              }
            }
            return "other";
          }()
        }));
      }
      add(type, event, className, icon, index2 = 0) {
        const anchor = templateCreate("a", {
          href: "javascript:;"
        });
        const el = templateCreate("li", {
          class: "tbui_aside_fbar_button"
        }, [anchor]);
        el.addEventListener("click", event);
        if (type !== "other") {
          el.classList.add(floatButtonMap[type]);
        }
        if (className)
          el.classList.add(className);
        floatBar.get().insertBefore(el, floatBar.get().children[index2]);
        setFloatButtonIcon(anchor, icon);
        return {
          el,
          type
        };
        function setFloatButtonIcon(el2, icon2) {
          el2.classList.add("icon");
          el2.classList.add("tbui_aside_fbar_button");
          el2.innerHTML = icon2 ? icon2 : "";
        }
      }
      remove(param) {
        switch (typeof param) {
          case "string": {
            const el = DOMS(param, "li", floatBar.get())[0];
            el.remove();
            break;
          }
          case "number": {
            const el = floatBar.get().children[param];
            el.remove();
            break;
          }
        }
      }
    }
    const floatBar = new FloatBar(".tbui_aside_float_bar", "ul");
    const compactCSS = "body[compact-layout] #j_p_postlist {\n  gap: 0;\n}\nbody[compact-layout] .core_reply_content li.first_no_border {\n  margin-top: -4px;\n}";
    function threadParser() {
      const postWrappers = DOMS(".l_post", "div");
      const contents = DOMS(".d_post_content", "div");
      const dAuthors = DOMS(".d_author", "div");
      const avatars = DOMS(".p_author_face", "a");
      const nameAnchors = DOMS(".p_author_name", "a");
      const levels = DOMS(".d_badge_lv", "div");
      const badgeTitles = DOMS(".d_badge_title", "div");
      const replyButtons = DOMS(".lzl_link_unfold", "a");
      const locations = map(DOMS(".post-tail-wrap span:first-child, .ip-location", "span"), (el) => el.innerText);
      const platforms = map(DOMS(".tail-info a, .p_tail_wap", "a"), (el) => el.innerText);
      const floors = map(DOMS(".j_jb_ele + .tail-info + .tail-info, .p_tail li:first-child span", "span"), (el) => el.innerText);
      const times = map(DOMS(".post-tail-wrap span:nth-last-child(2), .p_tail li:last-child span", "span"), (el) => el.innerText);
      const threadContents = [];
      for (let i = 0; i < contents.length; i++) {
        contents[i].classList.add("floor-content");
        avatars[i].classList.add("floor-avatar");
        nameAnchors[i].classList.add("floor-name");
        threadContents.push({
          post: contents[i],
          replyButton: replyButtons[i],
          dataField: defaults(postWrappers[i].getAttribute("data-field"), ""),
          isLouzhu: DOMS(".louzhubiaoshi_wrap", dAuthors[i]).length > 0,
          profile: {
            avatar: avatars[i],
            nameAnchor: nameAnchors[i],
            level: parseInt(levels[i].innerText),
            badgeTitle: badgeTitles[i].innerText
          },
          tail: {
            location: locations[i],
            platform: platforms[i],
            floor: floors[i],
            time: times[i]
          }
        });
      }
      const thread2 = {
        displayWrapper: DOMS(true, ".wrap2", "div"),
        title: PageData.thread.title,
        reply: parseInt(DOMS(true, ".l_reply_num span:nth-child(1)", "span").innerText),
        pages: PageData.pager.total_page,
        lzOnlyButton: DOMS(true, "#lzonly_cntn", "a"),
        favorButton: DOMS(true, ".j_favor", "a"),
        cotents: threadContents,
        forum: {
          info: {
            name: PageData.forum.forum_name
            // followersDisplay: DOMS(true, ".card_menNum", "span").innerText,
            // postsDisplay: DOMS(true, ".card_infoNum", "span").innerText,
          },
          components: {
            nameAnchor: DOMS(true, ".card_title_fname", "a"),
            iconContainer: DOMS(true, ".card_head a, .plat_picbox", "a"),
            followButton: DOMS(true, ".card_head .focus_btn", "a"),
            signButton: DOMS(true, ".j_sign_box", "a")
          }
        },
        pager: {
          listPager: DOMS(true, ".pb_list_pager", "li"),
          jumper: {
            textbox: DOMS(true, ".jump_input_bright", "input"),
            submitButton: DOMS(true, ".jump_btn_bright", "button")
          }
        }
      };
      return thread2;
    }
    const threadCSS = 'html {\n  padding: 0;\n  margin: 0;\n  text-align: justify;\n}\n\nbody {\n  padding: 0;\n  margin: 0;\n  font-family: var(--code-zh);\n}\nbody[no-scrollbar] {\n  overflow: hidden;\n}\n\ndiv,\np {\n  margin: 0;\n}\n\nselect {\n  padding: 1px 8px;\n  border: 1px solid var(--border-color);\n  border-radius: 8px;\n  cursor: pointer;\n}\n\noption {\n  cursor: pointer;\n}\n\noption:checked {\n  background-color: var(--tieba-theme-color);\n  color: var(--default-background);\n}\n\na {\n  color: inherit;\n  -webkit-text-decoration: none;\n  text-decoration: none;\n}\n\n.dialogJ {\n  position: fixed !important;\n  top: 50% !important;\n  left: 50% !important;\n}\n\n.dialogJ {\n  transform: translate(-50%, -50%);\n}\n\n.lzl_cnt .at, .lzl_cnt .lzl_content_main a, .content-wrapper .author-container .floor-name {\n  color: var(--tieba-theme-fore);\n  transition: 0.4s;\n}\n\n.d_post_content a,\n.lzl_cnt .lzl_content_main a:not(.at) {\n  color: var(--tieba-theme-fore);\n  text-decoration: underline;\n  -webkit-text-decoration: underline solid currentColor;\n          text-decoration: underline solid currentColor;\n  text-decoration-thickness: 1.2px;\n  -webkit-text-decoration: underline 1.2px;\n          text-decoration: underline 1.2px;\n  transition: 0.4s;\n}\n\n.lzl_cnt .at:hover, .lzl_cnt .lzl_content_main a:hover, .content-wrapper .author-container .floor-name:hover,\n.d_post_content a:hover {\n  background-color: var(--default-hover);\n}\n\n.d_post_content a:hover,\n.lzl_cnt .lzl_content_main a:hover:not(.at) {\n  text-decoration: underline;\n  -webkit-text-decoration: underline solid rgba(0, 0, 0, 0);\n          text-decoration: underline solid rgba(0, 0, 0, 0);\n  text-decoration-thickness: 1.2px;\n  -webkit-text-decoration: underline 1.2px rgba(0, 0, 0, 0);\n          text-decoration: underline 1.2px rgba(0, 0, 0, 0);\n}\n\n.lzl_cnt .at:active, .lzl_cnt .lzl_content_main a:active, .content-wrapper .author-container .floor-name:active,\n.d_post_content a:active {\n  background-color: var(--default-active);\n}\n\n.lzl_p_p img, .content-wrapper .author-container .floor-avatar img {\n  -o-object-fit: contain;\n     object-fit: contain;\n}\n\n@keyframes kf-fade-in {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 1;\n  }\n}\n@keyframes kf-fade-out {\n  0% {\n    opacity: 1;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@keyframes kf-dialog-in {\n  0% {\n    opacity: 0;\n    transform: scale(1.2);\n  }\n  100% {\n    opacity: 1;\n    transform: scale(1);\n  }\n}\n@keyframes kf-zoom-in {\n  0% {\n    transform: scale(0.72);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n@keyframes kf-fade-zoom-in {\n  0% {\n    opacity: 0;\n    transform: scale(0.72);\n  }\n  100% {\n    opacity: 1;\n    transform: scale(1);\n  }\n}\nbody {\n  background-color: var(--page-background);\n  overflow-x: hidden;\n}\n\nbody.special_conf_skin {\n  background: var(--page-background);\n}\n\n.wrap1 {\n  background: none !important;\n  background-color: transparent !important;\n}\n.wrap1 .wrap2 {\n  background: none !important;\n  background-color: transparent !important;\n}\n\n.head_inner {\n  display: none;\n}\n\n#container {\n  width: 100%;\n  max-width: 100%;\n  max-width: var(--content-max);\n  box-sizing: border-box;\n  margin-top: 120px;\n}\n#container .content {\n  width: 100%;\n}\n#container .content .pb_content {\n  position: relative;\n  width: 100%;\n  border-top: 6px solid var(--tieba-theme-color);\n  background-color: var(--default-background);\n  box-shadow: 0 12px 80px -32px rgba(0, 0, 0, 0.4);\n}\n#container .content .pb_content::before {\n  position: absolute;\n  top: -30px;\n  right: 0;\n  left: 0;\n  width: 100%;\n  height: 24px;\n  background: linear-gradient(to top, var(--tieba-theme-color), transparent);\n  content: "";\n  opacity: 0.2;\n}\n#container .tittle_fill_dom {\n  display: none;\n}\n\n.card_top_wrap,\n.nav_wrap,\n.p_thread {\n  display: none;\n}\n\n.core_title_wrap_bright {\n  display: none !important;\n}\n\n.lzl_cnt .at {\n  padding: 2px 0;\n  color: var(--default-fore);\n  font-size: 14px;\n  font-weight: bold;\n}\n.lzl_cnt .lzl_content_main img {\n  vertical-align: text-bottom;\n}\n\n#j_p_postlist {\n  display: flex;\n  box-sizing: border-box;\n  flex-direction: column;\n  padding: 24px;\n  gap: 16px;\n}\n#j_p_postlist .save_face_bg {\n  display: none;\n}\n#j_p_postlist .l_post_bright {\n  border: none;\n}\n#j_p_postlist .l_post_bright .d_post_content_main {\n  background-color: transparent !important;\n  background-color: initial !important;\n}\n#j_p_postlist .l_post_bright .d_post_content_main {\n  width: 100%;\n  padding: 0;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .p_content {\n  min-height: 0;\n  min-height: initial;\n  padding: 0;\n  margin-bottom: -42px;\n  background-color: transparent;\n  background-color: initial;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .p_content .shield-tip {\n  background: none;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .p_content .d_post_content {\n  background-color: transparent !important;\n  background-color: initial !important;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .p_content .d_post_content {\n  padding: 0;\n  font-size: 16px;\n  grid-area: content;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .p_content .replace_div {\n  width: auto !important;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .p_content .BDE_Smiley {\n  width: 24px;\n  height: 24px;\n  vertical-align: text-bottom;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .p_content .BDE_Image {\n  display: flex;\n  width: auto;\n  max-height: 540px;\n  border-radius: 12px;\n  margin: 6px auto;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply {\n  margin-right: 0;\n  margin-right: initial;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_tail {\n  margin-top: 0;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper {\n  border: none !important;\n  background-color: transparent !important;\n  background-color: initial !important;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper {\n  width: 100%;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content {\n  padding: 0 0 0 36px;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content .lzl_single_post {\n  animation: kf-fade-in 0.4s;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content .lzl_single_post:not(.first_no_border) {\n  padding-top: 0;\n  margin-top: 0;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content .edui-container {\n  width: auto !important;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content .edui-container {\n  max-height: 64px;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content .edui-container .edui-editor-body {\n  height: -moz-max-content !important;\n  height: max-content !important;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content .edui-container .edui-editor-body {\n  overflow: hidden;\n  max-height: 72px;\n  padding: 6px;\n  border-radius: 6px;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content .edui-container .edui-editor-body .edui-body-container {\n  min-height: 16px !important;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content .edui-container .edui-editor-body .edui-body-container {\n  max-height: 64px;\n  padding-left: 0;\n  border-radius: 6px;\n  font-size: 14px;\n  overflow-y: auto;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content .lzl_panel_wrapper {\n  width: 100%;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content .lzl_panel_wrapper .lzl_panel_submit {\n  background: none;\n}\n\n.main-wrapper {\n  display: flex;\n  max-width: 80%;\n  flex-direction: column;\n  padding: 8px;\n  margin: auto;\n  margin-top: 48px;\n}\n@media (min-width: 1200px) {\n  .main-wrapper {\n    max-width: 60%;\n  }\n}\n\n.left_section {\n  width: 100%;\n}\n\n.right_section {\n  display: none;\n}\n\n.title-wrapper {\n  display: flex;\n  box-sizing: border-box;\n  align-items: flex-end;\n  justify-content: space-between;\n  margin: 36px 0;\n  gap: 8px;\n}\n.shrink-view .title-wrapper {\n  padding: 0 24px;\n}\n.title-wrapper .thread-title {\n  max-width: 40%;\n  font-size: 32px;\n  line-height: 36px;\n  text-align: left;\n  -webkit-text-decoration: underline 3px var(--tieba-theme-color);\n          text-decoration: underline 3px var(--tieba-theme-color);\n}\n.title-wrapper .forum-container {\n  display: flex;\n  overflow: hidden;\n  width: -moz-max-content;\n  width: max-content;\n  height: -moz-max-content;\n  height: max-content;\n  align-items: center;\n  border-radius: 8px;\n  background-color: var(--trans-light-background);\n  gap: 8px;\n}\nbody.custom-background .title-wrapper .forum-container {\n  -webkit-backdrop-filter: blur(24px);\n          backdrop-filter: blur(24px);\n}\nhtml.dark-theme body.custom-background .title-wrapper .forum-container {\n  -webkit-backdrop-filter: blur(24px) brightness(0.8);\n          backdrop-filter: blur(24px) brightness(0.8);\n}\n.title-wrapper .forum-container:last-child {\n  padding-right: 8px;\n}\n.title-wrapper .forum-container .forum-icon {\n  width: 36px;\n  height: 36px;\n}\n.title-wrapper .forum-container .forum-name {\n  color: var(--highlight-fore);\n  font-size: 14px;\n  font-weight: bold;\n}\n.title-wrapper .forum-container .forum-info {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n}\n.title-wrapper .forum-container .forum-info .forum-members {\n  display: flex;\n  gap: 8px;\n}\n.title-wrapper .forum-container .button-container {\n  display: flex;\n  align-items: center;\n}\n.title-wrapper .forum-container .button-container .forum-button {\n  padding: 0 4px;\n  background-color: transparent;\n  color: var(--tieba-theme-color);\n  font-size: 16px;\n  font-weight: bold;\n}\n.title-wrapper .forum-container .button-container .forum-button:not(:hover):not(:active):not(:focus) {\n  box-shadow: none;\n}\n\n.forum-mask-wrapper {\n  position: relative;\n  z-index: -1;\n  display: flex;\n  justify-content: center;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n@keyframes mask-fade-in {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 0.1;\n  }\n}\n.forum-mask-wrapper .forum-mask {\n  position: absolute;\n  top: -320px;\n  width: 480px;\n  height: 480px;\n  border-radius: 480px;\n  animation: mask-fade-in 1s ease-in-out;\n  filter: blur(60px);\n  opacity: 0.1;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n\n.content-wrapper {\n  display: flex;\n  width: 100%;\n  flex-direction: column;\n  gap: 16px;\n}\n.content-wrapper .author-container {\n  display: grid;\n  margin-bottom: 8px;\n  grid-gap: 6px;\n  gap: 6px;\n  grid-template: "avatar name" auto "avatar tags" auto/36px 1fr;\n}\n.content-wrapper .author-container .floor-avatar {\n  width: -moz-max-content !important;\n  width: max-content !important;\n  height: -moz-max-content !important;\n  height: max-content !important;\n  padding: 0 !important;\n}\n.content-wrapper .author-container .floor-avatar {\n  overflow: hidden;\n  grid-area: avatar;\n}\n.content-wrapper .author-container .floor-avatar img {\n  width: 36px;\n  height: 36px;\n  border-radius: 8px;\n}\n.content-wrapper .author-container .floor-name {\n  width: -moz-fit-content;\n  width: fit-content;\n  color: var(--highlight-fore);\n  font-size: 14px;\n  font-weight: bold;\n  grid-area: name;\n}\n.content-wrapper .author-container .badge-container {\n  display: flex;\n  margin-top: -4px;\n  gap: 4px;\n  grid-area: tags;\n}\n.content-wrapper .author-container .badge-container .floor-badge {\n  display: flex;\n  width: -moz-fit-content;\n  width: fit-content;\n  padding: 0 6px;\n  border-radius: 6px;\n  background-color: var(--trans-light-background);\n  color: var(--light-fore);\n  gap: 6px;\n}\n.content-wrapper .author-container .badge-container .floor-badge .badge-level {\n  font-weight: bold;\n}\n.content-wrapper .floor-wrapper {\n  display: grid;\n  grid-template: "avatar name" auto "avatar tags" auto "content content" 1fr "footer footer" auto "comments comments" auto/36px 1fr;\n}\n.content-wrapper .floor-wrapper .floor-avatar {\n  width: -moz-max-content !important;\n  width: max-content !important;\n  height: -moz-max-content !important;\n  height: max-content !important;\n  padding: 0 !important;\n}\n.content-wrapper .floor-wrapper .floor-avatar {\n  overflow: hidden;\n  grid-area: avatar;\n}\n.content-wrapper .floor-wrapper .floor-avatar img {\n  width: 36px;\n  border-radius: 8px;\n}\n.content-wrapper .floor-wrapper .floor-name {\n  width: -moz-fit-content;\n  width: fit-content;\n  margin: 0 8px 4px;\n  font-size: 14px;\n  grid-area: name;\n}\n.content-wrapper .floor-wrapper .floor-badge {\n  display: flex;\n  width: -moz-fit-content;\n  width: fit-content;\n  padding: 0 6px;\n  border-radius: 6px;\n  margin: 0 8px 8px;\n  background-color: var(--trans-light-background);\n  color: var(--light-fore);\n  gap: 6px;\n  grid-area: tags;\n}\n.content-wrapper .floor-wrapper .floor-badge .badge-level {\n  font-weight: bold;\n}\n.content-wrapper .floor-wrapper .floor-content {\n  padding: 8px 0;\n  font-size: 16px;\n  grid-area: content;\n}\n.content-wrapper .floor-wrapper .floor-content .BDE_Smiley {\n  width: 24px;\n  height: 24px;\n  vertical-align: sub;\n}\n.content-wrapper .floor-wrapper .floor-info {\n  display: flex;\n  justify-content: flex-end;\n  color: var(--light-fore);\n  gap: 12px;\n  grid-area: footer;\n}\n.content-wrapper .floor-wrapper .floor-comments {\n  width: 100%;\n  grid-area: comments;\n}\n.content-wrapper .floor-wrapper .floor-comments .core_reply_wrapper {\n  width: 100%;\n}\n\n#ueditor_replace {\n  overflow: hidden;\n}\n\n#thread-jsx-components {\n  position: absolute;\n  display: flex;\n  width: 100%;\n  max-width: var(--content-max);\n  box-sizing: border-box;\n  flex-direction: column;\n  padding: 8px 24px 16px;\n  background-color: var(--default-background);\n  gap: 12px;\n}\n#thread-jsx-components .dummy-button {\n  width: 100%;\n  padding: 6px 0 0;\n  border: none;\n  border-radius: 0;\n  border-bottom: 3px solid var(--border-color);\n  background-color: transparent;\n  box-shadow: none;\n  color: var(--minimal-fore);\n  cursor: text;\n  font-size: 16px;\n  text-align: justify;\n}\n#thread-jsx-components .dummy-button:hover {\n  border-color: var(--light-background);\n}\n#thread-jsx-components .dummy-button:focus {\n  border-color: var(--tieba-theme-color);\n}\n\n.pb_footer {\n  display: none;\n}\n\n.svelte-zmnt4x {\n  display: none;\n}\n\n.wrap2 {\n  padding-bottom: 0 !important;\n}\n\n.head_ad_pop {\n  display: none !important;\n}\n\n.plat_head,\n.star_nav_wrap {\n  display: none;\n}';
    async function thread() {
      if (!pageExtension.get().thread)
        return;
      if (currentPageType() !== "thread")
        return;
      injectCSSList(threadCSS);
      injectCSSList(compactCSS);
      await waitUtil(() => document.body !== void 0).then(function() {
        if (compactLayout.get()) {
          document.body.toggleAttribute("compact-layout");
        }
      });
      waitUtil(() => floatBar.get() !== void 0).then(function() {
        floatBar.add("other", function() {
          renderDialog(togglePanelVue, {
            toggles: [{
              icon: "favorite",
              name: "收藏",
              defaultValue: function() {
                return DOMS(".j_favor, #j_favthread .p_favthr_main")[0].innerText === "收藏" ? false : true;
              }(),
              event() {
                DOMS(".j_favor, #j_favthread .p_favthr_main")[0].click();
              }
            }, {
              icon: "face_6",
              name: "只看楼主",
              defaultValue: function() {
                return DOMS("#lzonly_cntn")[0].innerText === "只看楼主" ? false : true;
              }(),
              event() {
                DOMS("#lzonly_cntn")[0].click();
              }
            }, {
              icon: "compare_arrows",
              name: "紧凑布局",
              defaultValue: (() => compactLayout.get())(),
              event() {
                document.body.toggleAttribute("compact-layout");
                compactLayout.set(!compactLayout.get());
              }
            }]
          });
        }, "module-settings", "menu");
        document.body.insertBefore(templateCreate("div", {
          class: "vue-module-control",
          style: "display: none;"
        }), document.body.firstChild);
      });
      const content = DOMS(".content", "div")[0];
      DOMS("#pb_content", "div")[0];
      const postList = DOMS("#j_p_postlist")[0];
      createContents();
      async function createContents() {
        var _a;
        const threadList = (await waitUtil(() => DOMS("#j_p_postlist").length > 0).then(() => DOMS("#j_p_postlist")))[0];
        threadList.classList.add("content-wrapper");
        let thread2 = threadParser();
        const forumIconLink = thread2.forum.components.iconContainer.children[0].src;
        insertJSX(vue.createVNode("div", {
          "id": "title-wrapper",
          "class": "title-wrapper"
        }, [vue.createVNode("h3", {
          "class": "thread-title"
        }, [PageData.thread.title]), vue.createVNode("div", {
          "class": "forum-container"
        }, [vue.createVNode("img", {
          "class": "forum-icon",
          "src": forumIconLink,
          "alt": ""
        }, null), vue.createVNode("a", {
          "class": "forum-name",
          "href": `/f?kw=${PageData.forum.name_url}`,
          "target": "_blank"
        }, [PageData.forum.forum_name, vue.createTextVNode(" 吧")]), vue.createVNode("div", {
          "class": "button-container"
        }, [vue.createVNode(_sfc_main$k, {
          "class": "icon forum-button add-forum-button",
          "shadow-border": true
        }, {
          default: () => [PageData.user.is_like ? "check" : "add"]
        })])])]), DOMS(".content")[0], DOMS("#pb_content")[0]);
        bindFloatMessage(DOMS(".forum-container")[0], `关注 ${PageData.forum.member_count},帖子 ${PageData.forum.post_num}`);
        DOMS(".add-forum-button", "button")[0].addEventListener("click", function() {
          DOMS("#j_head_focus_btn", "button")[0].click();
        });
        (_a = DOMS(".sign-in-button", "button")[0]) == null ? void 0 : _a.addEventListener("click", function() {
          DOMS(".j_signbtn", "button")[0].click();
        });
        remixedObservers.postsObserver.addEvent(function() {
          if (DOMS(".d_author").length === 0)
            return;
          thread2 = threadParser();
          forEach(DOMS(".d_post_content_main", "div", threadList), (floor, i) => {
            const authorContainer = createAuthorContainer(i);
            floor.insertBefore(authorContainer, floor.firstChild);
          });
          forEach(DOMS(".d_author"), (el) => el.remove());
        });
        function createAuthorContainer(index2) {
          const authorContainer = templateCreate("div", {
            class: "author-container"
          });
          thread2.cotents[index2].profile.nameAnchor.classList.add("anchor");
          authorContainer.appendChild(thread2.cotents[index2].profile.avatar);
          authorContainer.appendChild(thread2.cotents[index2].profile.nameAnchor);
          const badgeContainer = appendJSX(vue.createVNode("div", {
            "class": "badge-container"
          }, null), authorContainer);
          appendJSX(vue.createVNode("div", {
            "class": `floor-badge level-${levelToClass(thread2.cotents[index2].profile.level)}`
          }, [vue.createVNode("div", {
            "class": "badge-level"
          }, [thread2.cotents[index2].profile.level]), vue.createVNode("div", {
            "class": "badge-title"
          }, [thread2.cotents[index2].profile.badgeTitle])]), badgeContainer.el);
          if (thread2.cotents[index2].isLouzhu)
            appendJSX(vue.createVNode("div", {
              "class": "floor-badge"
            }, [vue.createTextVNode("楼主")]), badgeContainer.el);
          return authorContainer;
        }
        const avatarObserver = new IntersectionObserver(function(entries, observer) {
          forEach(entries, function(entry) {
            if (entry.isIntersecting) {
              const avatar = entry.target.children[0];
              const lazyLink = avatar.getAttribute("data-tb-lazyload");
              if (avatar.src !== lazyLink) {
                if (lazyLink)
                  avatar.src = lazyLink;
                else
                  observer.unobserve(entry.target);
              } else {
                observer.unobserve(entry.target);
              }
            }
          });
        }, {
          root: null,
          rootMargin: "0px",
          threshold: 0.5
        });
        forEach(thread2.cotents, (content2) => {
          avatarObserver.observe(content2.profile.avatar);
        });
        remixedObservers.commentsObserver.addEvent(() => {
          forEach(DOMS(".lzl_cnt"), (el) => {
            forEach(el.childNodes, (node) => {
              if (node)
                node.nodeType === 3 ? node.remove() : void 0;
            });
          });
        });
      }
      const currPage = vue.ref(PageData.pager.cur_page);
      const createPager = () => vue.createVNode(elementPlus.ElConfigProvider, {
        "locale": zhCn
      }, {
        default: () => [vue.createVNode(elementPlus.ElPagination, {
          "current-page": currPage.value,
          "onUpdate:current-page": ($event) => currPage.value = $event,
          "background": true,
          "page-size": 1,
          "pager-count": 11,
          "total": PageData.pager.total_page,
          "defaultCurrentPage": PageData.pager.cur_page,
          "layout": "prev, pager, next, jumper, ->",
          "style": "margin-bottom: 6px;"
        }, null)]
      });
      vue.watch(currPage, (newValue) => {
        const search = new URLSearchParams(location.search);
        search.set("pn", newValue.toString());
        location.href = `${location.pathname}?${search.toString()}`;
      });
      insertJSX(createPager(), postList, postList.firstChild);
      createTextbox();
      async function createTextbox() {
        await waitUtil(() => floatBar.get() !== void 0);
        await waitUtil(() => DOMS("#ueditor_replace").length > 0);
        if (!some(floatBar.buttons(), {
          type: "post"
        })) {
          floatBar.add("post", showEditor, void 0, void 0, 2);
        }
        const postButton = find$1(floatBar.buttons(), (button) => {
          return button.type === "post";
        });
        postButton == null ? void 0 : postButton.el.addEventListener("click", showEditor);
        appendJSX(vue.createVNode("div", {
          "id": "thread-jsx-components"
        }, [createPager(), vue.createVNode(_sfc_main$k, {
          "class": "dummy-button",
          "noBorder": true,
          "onClick": showEditor
        }, {
          default: () => [vue.createTextVNode("回复帖子")]
        })]), content);
        function showEditor() {
          const ueditor = function() {
            if (DOMS(".edui-container").length > 0)
              return DOMS(".edui-container")[0];
            return DOMS("#ueditor_replace")[0];
          }();
          renderDialog(ThreadEditor, {
            ueditor,
            type: "reply"
          }, {
            forced: true,
            blurEffect: false,
            darker: true
          });
        }
      }
    }
    function parseUserModules(glob, callbackfn) {
      const modules2 = [];
      const moduleList = glob;
      const info = {
        length: Object.keys(moduleList).length,
        current: {
          runnable: false,
          url: ""
        }
      };
      for (const key in moduleList) {
        moduleList[key]().then(
          (value) => {
            const m = value.default;
            info.current.url = key;
            const runnable = (() => {
              if (m.switch === true || m.switch === void 0) {
                if (indexOf(disabledModules.get(), m.id) !== -1) {
                  return false;
                }
                if (m.scope === true) {
                  return true;
                }
                if (Array.isArray(m.scope)) {
                  for (let i = 0; i < m.scope.length; i++) {
                    const scope = m.scope[i];
                    if (currentPageType() === scope) {
                      return true;
                    }
                  }
                }
                if ({}.toString.call(m.scope) === "[object RegExp]") {
                  if (m.scope.test(location.href)) {
                    return true;
                  }
                }
              }
              return false;
            })();
            info.current.runnable = runnable;
            const runModule = {
              "immediately": () => {
                m.entry();
              },
              "afterHead": () => {
                afterHead(() => {
                  m.entry();
                });
              },
              "DOMLoaded": () => {
                document.addEventListener("DOMContentLoaded", () => {
                  m.entry();
                });
              },
              "loaded": () => {
                window.addEventListener("load", () => {
                  m.entry();
                });
              }
            };
            m.runnable = runnable;
            if (runnable) {
              runModule[m.runAt]();
            }
            modules2.push(m);
            if (callbackfn)
              callbackfn(info, m);
          }
        );
      }
      return modules2;
    }
    setTheme(themeType.get());
    darkPrefers.addEventListener("change", () => setTheme(themeType.get()));
    loadBaseCSS();
    Promise.all([
      loadDynamicCSS(),
      loadTiebaCSS(),
      loadExtensionCSS(),
      index$g(),
      thread(),
      async function loadUserModules() {
        parseUserModules(
          /* @__PURE__ */ Object.assign({ "./modules/easy-jump/index.ts": () => Promise.resolve().then(() => index$f), "./modules/no-login/index.ts": () => Promise.resolve().then(() => index$d), "./modules/notrans-emojis/index.ts": () => Promise.resolve().then(() => index$b), "./modules/portal/index.ts": () => Promise.resolve().then(() => index$9), "./modules/remixed-theme/index.ts": () => Promise.resolve().then(() => index$7), "./modules/remixed-toolkit/index.ts": () => Promise.resolve().then(() => index$5), "./modules/shield/index.ts": () => Promise.resolve().then(() => index$3), "./modules/tieba-tags/index.ts": () => Promise.resolve().then(() => index$1) }),
          (_, module2) => {
            AllModules().push(module2);
          }
        );
      }(),
      async function observing() {
        document.addEventListener("DOMContentLoaded", function() {
          if (currentPageType() === "thread") {
            remixedObservers.postsObserver.observe();
            remixedObservers.commentsObserver.observe();
          }
          if (currentPageType() === "index") {
            remixedObservers.newListObserver.observe();
          }
          if (currentPageType() === "forum") {
            remixedObservers.threadListObserver.observe();
          }
        });
      }()
    ]);
    window.addEventListener("load", function() {
      checkUpdateAndNotify();
    });
    waitUtil(() => document.body !== null).then(function() {
      if (wideScreen.get().noLimit) {
        document.body.classList.add("shrink-view");
      } else {
        const shrinkListener = throttle(function() {
          if (window.innerWidth <= wideScreen.get().maxPX) {
            document.body.classList.add("shrink-view");
          } else {
            document.body.classList.remove("shrink-view");
          }
        }, 200);
        shrinkListener();
        window.addEventListener("resize", shrinkListener);
      }
    });
    if (perfProfile.get() === "performance") {
      if (currentPageType() === "thread") {
        waitUtil(() => typeof datalazyload !== "undefined").then(function() {
          datalazyload.userConfig.diff = 9999;
        });
      }
    }
    console.info(REMIXED);
    const index$e = {
      id: "easy-jump",
      name: "直链跳转",
      author: "锯条",
      version: "1.0.2",
      brief: "链接跳转避免二次确认",
      description: `自动跳转至分享链接的原始地址,不再进行中转(不处理被严重警告的链接)`,
      scope: /jump2?.bdimg.com\/safecheck\//,
      runAt: "immediately",
      entry: main$6
    };
    function main$6() {
      afterHead(function() {
        injectCSSRule("html", {
          backgroundColor: "var(--page-background)"
        });
        injectCSSRule("body", {
          display: "none"
        });
      });
      waitUtil(() => DOMS(".link").length > 0).then(function() {
        const link = DOMS(".link")[0].innerText;
        location.href = link;
      });
    }
    const index$f = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
      __proto__: null,
      default: index$e
    }, Symbol.toStringTag, { value: "Module" }));
    const index$c = {
      id: "nologin-tieba",
      name: "免登录浏览",
      author: "锯条",
      version: "1.0",
      brief: "免登录浏览贴吧",
      description: `始终伪装为已登录状态,让免登录浏览和已登录基本一致`,
      scope: ["thread"],
      runAt: "DOMLoaded",
      entry: main$5
    };
    function main$5() {
      if (PageData.user.is_login)
        return;
      PageData.user.is_login = 1;
    }
    const index$d = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
      __proto__: null,
      default: index$c
    }, Symbol.toStringTag, { value: "Module" }));
    const index$a = {
      id: "notrans-emojis",
      name: "别动我的 emoji😠",
      author: "锯条",
      version: "1.0",
      brief: "拒绝替换我的 emoji",
      description: "原版贴吧会将部分emoji表情替换为旧版,该模块会让这些emoji重新跟随系统样式",
      scope: true,
      runAt: "afterHead",
      entry: main$4
    };
    function main$4() {
      const indexRegExp = new RegExp("(?<=nickemoji\\/).*?(?=.png)", "gi");
      const emojis = [
        "º",
        "◎",
        "▫",
        "◆",
        "♤",
        "♀",
        "♂",
        "ლ",
        "♬",
        "☞",
        "☜",
        "✆",
        "☎",
        "♋",
        "Ω",
        "℃",
        "℉",
        "😄",
        "😍",
        "😘",
        "😚",
        "😜",
        "😳",
        "😁",
        "😞",
        "😢",
        "😂",
        "😫",
        "😨",
        "😱",
        "😡",
        "😷",
        "😲",
        "😈",
        "🐷",
        "🐶",
        "🐑",
        "🐵",
        "🐨",
        "🐴",
        "🐼",
        "🐯",
        "🍪",
        "🍺",
        "🍦",
        "🍭",
        "🍗",
        "🍼",
        "🔯",
        "🍒",
        "👀",
        "🐭",
        "😇",
        "😺",
        "😻",
        "🙀",
        "😿",
        "😹",
        "😾",
        "👹",
        "👺",
        "🌞",
        "🌝",
        "🌚",
        "🌜",
        "🌛",
        "👦",
        "👧",
        "🎎",
        "🌸",
        "🍀",
        "🌹",
        "🌻",
        "🌺",
        "🍁",
        "🌿",
        "🍄",
        "🌵",
        "🌴",
        "🌳",
        "🌰",
        "🌱",
        "🌼",
        "🌐",
        "🌙",
        "🌋",
        "🌌",
        "⛅",
        "⚡",
        "☔",
        "⛄",
        "🌀",
        "🌈",
        "🌊",
        "🔥",
        "✨",
        "🌟",
        "💥",
        "💫",
        "💢",
        "💦",
        "💧",
        "💤",
        "💨",
        "🎀",
        "🌂",
        "💄",
        "💕",
        "💖",
        "💞",
        "💘",
        "💌",
        "💋",
        "💝",
        "🎒",
        "🎓",
        "🎏",
        "🎃",
        "👻",
        "🎅",
        "🎄",
        "🎁",
        "🙈",
        "🐒",
        "💯",
        "👯",
        "💍"
      ];
      const transformed = [
        "1-1.png",
        "1-2.png",
        "1-4.png",
        "1-5.png",
        "1-6.png",
        "1-7.png",
        "1-8.png",
        "1-9.png",
        "1-10.png",
        "1-11.png",
        "1-12.png",
        "1-13.png",
        "1-14.png",
        "1-15.png",
        "1-16.png",
        "1-17.png",
        "1-18.png",
        "1-19.png",
        "1-20.png",
        "1-21.png",
        "1-22.png",
        "1-23.png",
        "1-24.png",
        "1-25.png",
        "1-26.png",
        "1-27.png",
        "1-28.png",
        "1-29.png",
        "1-30.png",
        "1-31.png",
        "1-32.png",
        "1-33.png",
        "1-34.png",
        "1-35.png",
        "2-1.png",
        "2-2.png",
        "2-3.png",
        "2-4.png",
        "2-5.png",
        "2-6.png",
        "2-7.png",
        "2-8.png",
        "2-9.png",
        "2-10.png",
        "2-11.png",
        "2-12.png",
        "2-13.png",
        "2-14.png",
        "2-15.png",
        "2-16.png",
        "2-17.png",
        "2-18.png",
        "2-19.png",
        "2-20.png",
        "2-21.png",
        "2-22.png",
        "2-23.png",
        "2-24.png",
        "2-25.png",
        "2-26.png",
        "2-27.png",
        "2-28.png",
        "2-29.png",
        "2-30.png",
        "2-31.png",
        "2-32.png",
        "2-33.png",
        "2-34.png",
        "2-35.png",
        "3-1.png",
        "3-2.png",
        "3-3.png",
        "3-4.png",
        "3-5.png",
        "3-6.png",
        "3-7.png",
        "3-8.png",
        "3-9.png",
        "3-10.png",
        "3-11.png",
        "3-12.png",
        "3-13.png",
        "3-14.png",
        "3-15.png",
        "3-16.png",
        "3-17.png",
        "3-18.png",
        "3-19.png",
        "3-20.png",
        "3-21.png",
        "3-22.png",
        "3-23.png",
        "3-24.png",
        "3-25.png",
        "3-26.png",
        "3-27.png",
        "3-28.png",
        "3-29.png",
        "3-30.png",
        "3-31.png",
        "3-32.png",
        "3-33.png",
        "3-34.png",
        "3-35.png",
        "4-1.png",
        "4-2.png",
        "4-3.png",
        "4-4.png",
        "4-5.png",
        "4-6.png",
        "4-7.png",
        "4-8.png",
        "4-9.png",
        "4-10.png",
        "4-11.png",
        "4-12.png",
        "4-13.png",
        "4-14.png",
        "4-15.png",
        "4-16.png",
        "4-17.png",
        "4-18.png",
        "4-19.png",
        "4-20.png",
        "4-21.png",
        "4-22.png",
        "4-23.png"
      ];
      remixedObservers.commentsObserver.addEvent(() => {
        try {
          forEach(DOMS(`
                .p_author_name:has(.nicknameEmoji),
                .at:has(.nicknameEmoji),
                .lzl_content_main:has(.nicknameEmoji)
            `), (el) => {
            updateEmojis(el);
          });
        } catch (error) {
          forEach(DOMS(".p_author_name, .at, .lzl_content_main"), (el) => {
            if (includes(el.classList, "nicknameEmoji")) {
              updateEmojis(el);
            }
          });
        }
      });
      remixedObservers.newListObserver.addEvent(() => {
        try {
          forEach(DOMS(`
                .new_list .post_author:has(.nicknameEmoji),
                .userinfo_username:has(.nicknameEmoji)
            `), (el) => {
            updateEmojis(el);
          });
        } catch (error) {
          forEach(DOMS(".newlist .post_author, .userinfo_username"), (el) => {
            if (includes(el.classList, "nicknameEmoji")) {
              updateEmojis(el);
            }
          });
        }
      });
      remixedObservers.threadListObserver.addEvent(() => {
        try {
          forEach(DOMS(".threadlist_author a:has(.nicknameEmoji)"), (el) => {
            updateEmojis(el);
          });
        } catch (error) {
          forEach(DOMS(".threadlist_author a"), (el) => {
            if (includes(el.classList, "nicknameEmoji")) {
              updateEmojis(el);
            }
          });
        }
      });
      function updateEmojis(elem) {
        const arrIndex = elem.innerHTML.match(indexRegExp);
        arrIndex == null ? void 0 : arrIndex.forEach((index2) => {
          const emoji = emojis[transformed.indexOf(`${index2}.png`)];
          const arrInner = elem.innerHTML.split(RegExp(
            `<img[^>]*?${index2}.png(?:[^>]*?)*>`,
            "g"
          ));
          elem.innerHTML = arrInner.join(decodeURIComponent(emoji));
        });
      }
    }
    const index$b = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
      __proto__: null,
      default: index$a
    }, Symbol.toStringTag, { value: "Module" }));
    const index$8 = {
      id: "portal",
      name: "传送门",
      author: "锯条",
      version: "1.1",
      brief: "为贴子中的b站番号添加跳转链接",
      description: `该模块可以识别贴子中的 av/BV 号并将其转换为超链接`,
      scope: ["thread"],
      runAt: "immediately",
      entry: main$3
    };
    function main$3() {
      const LINKED_CLASS = "linked";
      const avRegExp = new RegExp("(?<!:\\/\\/www.bilibili.com\\/video\\/)av[1-9]\\d*", "gi");
      const BVRegExp = new RegExp("(?<!:\\/\\/www.bilibili.com\\/video\\/)BV[A-Za-z0-9]{10}", "g");
      document.addEventListener("DOMContentLoaded", () => {
        remixedObservers.commentsObserver.addEvent(biliEnhanced);
      });
      function biliEnhanced() {
        addBiliLinks(".d_post_content");
        addBiliLinks(".lzl_cnt .lzl_content_main");
        function addBiliLinks(selector) {
          forEach(DOMS(selector), (elem) => {
            var _a, _b, _c, _d;
            if (elem.classList.contains(LINKED_CLASS))
              return;
            elem.classList.add(LINKED_CLASS);
            if (((_a = elem.textContent) == null ? void 0 : _a.toLowerCase().indexOf("av")) !== -1) {
              const avs = (_b = elem.textContent) == null ? void 0 : _b.match(avRegExp);
              bindingLinks(avs, true);
            }
            if (((_c = elem.textContent) == null ? void 0 : _c.indexOf("BV")) !== -1) {
              const BVs = (_d = elem.textContent) == null ? void 0 : _d.match(BVRegExp);
              bindingLinks(BVs);
            }
            function bindingLinks(array, lowerCase = false) {
              if (!array)
                return;
              const hadHyperLink = [];
              forEach(array, (videoID) => {
                if (hadHyperLink.indexOf(videoID) === -1) {
                  hadHyperLink.push(videoID);
                  const htmlArray = elem.innerHTML.split(
                    RegExp(`(?<!://www.bilibili.com/video/)${videoID}`, "g")
                  );
                  if (lowerCase)
                    videoID = videoID.toLowerCase();
                  const linkedID = `<a href='https://www.bilibili.com/video/${videoID}/'>${videoID}</a>`;
                  elem.innerHTML = htmlArray.join(linkedID);
                }
              });
            }
          });
        }
      }
    }
    const index$9 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
      __proto__: null,
      default: index$8
    }, Symbol.toStringTag, { value: "Module" }));
    const userButtonCSS = "html {\n  padding: 0;\n  margin: 0;\n  text-align: justify;\n}\n\nbody {\n  padding: 0;\n  margin: 0;\n  font-family: var(--code-zh);\n}\nbody[no-scrollbar] {\n  overflow: hidden;\n}\n\ndiv,\np {\n  margin: 0;\n}\n\nselect {\n  padding: 1px 8px;\n  border: 1px solid var(--border-color);\n  border-radius: 8px;\n  cursor: pointer;\n}\n\noption {\n  cursor: pointer;\n}\n\noption:checked {\n  background-color: var(--tieba-theme-color);\n  color: var(--default-background);\n}\n\na {\n  color: inherit;\n  -webkit-text-decoration: none;\n  text-decoration: none;\n}\n\n.dialogJ {\n  position: fixed !important;\n  top: 50% !important;\n  left: 50% !important;\n}\n\n.dialogJ {\n  transform: translate(-50%, -50%);\n}\n\n@keyframes kf-fade-in {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 1;\n  }\n}\n@keyframes kf-fade-out {\n  0% {\n    opacity: 1;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@keyframes kf-dialog-in {\n  0% {\n    opacity: 0;\n    transform: scale(1.2);\n  }\n  100% {\n    opacity: 1;\n    transform: scale(1);\n  }\n}\n@keyframes kf-zoom-in {\n  0% {\n    transform: scale(0.72);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n@keyframes kf-fade-zoom-in {\n  0% {\n    opacity: 0;\n    transform: scale(0.72);\n  }\n  100% {\n    opacity: 1;\n    transform: scale(1);\n  }\n}";
    const floatBarCSS = 'html {\n  padding: 0;\n  margin: 0;\n  text-align: justify;\n}\n\nbody {\n  padding: 0;\n  margin: 0;\n  font-family: var(--code-zh);\n}\nbody[no-scrollbar] {\n  overflow: hidden;\n}\n\ndiv,\np {\n  margin: 0;\n}\n\nselect {\n  padding: 1px 8px;\n  border: 1px solid var(--border-color);\n  border-radius: 8px;\n  cursor: pointer;\n}\n\noption {\n  cursor: pointer;\n}\n\noption:checked {\n  background-color: var(--tieba-theme-color);\n  color: var(--default-background);\n}\n\na {\n  color: inherit;\n  -webkit-text-decoration: none;\n  text-decoration: none;\n}\n\n.dialogJ {\n  position: fixed !important;\n  top: 50% !important;\n  left: 50% !important;\n}\n\n.dialogJ {\n  transform: translate(-50%, -50%);\n}\n\n.tbui_aside_float_bar {\n  background-color: var(--very-light-background) !important;\n}\n\n.tbui_aside_float_bar {\n  bottom: 20px;\n  left: calc(50% + var(--content-max) / 2 + 20px);\n  display: flex;\n  overflow: hidden;\n  width: -moz-max-content;\n  width: max-content;\n  flex-direction: column;\n  border-radius: 8px;\n  margin-left: 0;\n  gap: 4px;\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.01);\n}\nhtml.dark-theme .tbui_aside_float_bar {\n  box-shadow: 0 0 16px rgba(0, 0, 0, 0.2);\n}\n.shrink-view .tbui_aside_float_bar {\n  bottom: 0;\n  left: calc(100% - 40px);\n}\n.tbui_aside_float_bar .tbui_aside_fbar_button {\n  margin: 0 !important;\n}\n.tbui_aside_float_bar .tbui_aside_fbar_button {\n  border-radius: 0;\n  background-color: var(--default-background);\n  transition: 0.4s;\n}\n.tbui_aside_float_bar .tbui_aside_fbar_button a {\n  border-radius: 0;\n}\n.tbui_aside_float_bar .tbui_aside_fbar_button a:hover {\n  color: var(--tieba-theme-color);\n}\n.tbui_aside_float_bar .tbui_aside_fbar_button a:active {\n  color: var(--tieba-theme-fore);\n}\n.tbui_aside_float_bar .tbui_aside_fbar_button[style*="visibility: hidden"] {\n  margin-top: -4px !important;\n}\n.tbui_aside_float_bar .tbui_aside_fbar_button[style*="visibility: hidden"] {\n  height: 0;\n}';
    const floatMessageCSS = "html {\n  padding: 0;\n  margin: 0;\n  text-align: justify;\n}\n\nbody {\n  padding: 0;\n  margin: 0;\n  font-family: var(--code-zh);\n}\nbody[no-scrollbar] {\n  overflow: hidden;\n}\n\ndiv,\np {\n  margin: 0;\n}\n\nselect {\n  padding: 1px 8px;\n  border: 1px solid var(--border-color);\n  border-radius: 8px;\n  cursor: pointer;\n}\n\noption {\n  cursor: pointer;\n}\n\noption:checked {\n  background-color: var(--tieba-theme-color);\n  color: var(--default-background);\n}\n\na {\n  color: inherit;\n  -webkit-text-decoration: none;\n  text-decoration: none;\n}\n\n.dialogJ {\n  position: fixed !important;\n  top: 50% !important;\n  left: 50% !important;\n}\n\n.dialogJ {\n  transform: translate(-50%, -50%);\n}\n\n@keyframes kf-fade-in {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 1;\n  }\n}\n@keyframes kf-fade-out {\n  0% {\n    opacity: 1;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@keyframes kf-dialog-in {\n  0% {\n    opacity: 0;\n    transform: scale(1.2);\n  }\n  100% {\n    opacity: 1;\n    transform: scale(1);\n  }\n}\n@keyframes kf-zoom-in {\n  0% {\n    transform: scale(0.72);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n@keyframes kf-fade-zoom-in {\n  0% {\n    opacity: 0;\n    transform: scale(0.72);\n  }\n  100% {\n    opacity: 1;\n    transform: scale(1);\n  }\n}\n.float-message {\n  position: fixed;\n  z-index: 99999;\n  display: none;\n  overflow: hidden;\n  box-sizing: border-box;\n  padding: 4px 6px;\n  border: 1px solid var(--border-color);\n  border-radius: 6px;\n  background-color: var(--default-background);\n  font-size: 14px;\n  transition: 0.3s;\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.01);\n  animation: kf-fade-in 0.3s;\n}\nhtml.dark-theme .float-message {\n  box-shadow: 0 0 16px rgba(0, 0, 0, 0.2);\n}\n.float-message .float-content {\n  display: flex;\n  overflow: auto;\n}";
    const _hoisted_1$2 = {
      key: 0,
      class: "menu-separator"
    };
    const _hoisted_2$2 = {
      key: 0,
      class: "icon"
    };
    const _hoisted_3$2 = { class: "menu-title" };
    const _hoisted_4$2 = {
      key: 0,
      class: "menu-inner"
    };
    const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
      __name: "dropdown-menu",
      props: {
        menuItems: {},
        blurEffect: { type: Boolean }
      },
      emits: ["RequestClose"],
      setup(__props, { emit: __emit }) {
        const props = __props;
        const emit = __emit;
        vue.onMounted(() => {
          setTimeout(() => {
            window.addEventListener("click", () => {
              setTimeout(() => {
                emit("RequestClose");
              }, 100);
            });
            window.addEventListener("focusin", (ev) => {
              if (!findParentByClass(ev.target, "dropdown-menu")) {
                emit("RequestClose");
              }
            });
          }, 100);
        });
        return (_ctx, _cache) => {
          return vue.openBlock(), vue.createElementBlock("div", {
            class: vue.normalizeClass(["dropdown-menu", _ctx.blurEffect ? "blur-effect" : ""])
          }, [
            (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(props.menuItems, (menuItem) => {
              return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
                typeof menuItem === "string" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$2)) : (vue.openBlock(), vue.createBlock(_sfc_main$k, {
                  key: 1,
                  class: "menu-item",
                  "is-anchor": menuItem.href !== void 0,
                  href: menuItem.href ? menuItem.href : "javascript:;",
                  onClick: menuItem.click,
                  target: menuItem.href ? "_blank" : "",
                  "no-border": ""
                }, {
                  default: vue.withCtx(() => [
                    menuItem.icon ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$2, vue.toDisplayString(menuItem.icon), 1)) : vue.createCommentVNode("", true),
                    vue.createElementVNode("div", _hoisted_3$2, [
                      vue.createTextVNode(vue.toDisplayString(menuItem.title) + " ", 1),
                      menuItem.innerText ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$2, vue.toDisplayString(menuItem.innerText), 1)) : vue.createCommentVNode("", true)
                    ])
                  ]),
                  _: 2
                }, 1032, ["is-anchor", "href", "onClick", "target"]))
              ], 64);
            }), 256))
          ], 2);
        };
      }
    });
    const DropdownMenu = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-00bee924"]]);
    const _withScopeId$1 = (n) => (vue.pushScopeId("data-v-18e85ac3"), n = n(), vue.popScopeId(), n);
    const _hoisted_1$1 = {
      id: "nav-bar",
      class: "nav-bar"
    };
    const _hoisted_2$1 = { class: "left-container" };
    const _hoisted_3$1 = ["src"];
    const _hoisted_4$1 = /* @__PURE__ */ _withScopeId$1(() => /* @__PURE__ */ vue.createElementVNode("p", { class: "nav-title" }, "贴吧", -1));
    const _hoisted_5$1 = { class: "right-container" };
    const _hoisted_6$1 = { class: "middle-container" };
    const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
      __name: "nav-bar",
      setup(__props) {
        const navAvatar = vue.ref();
        const userPortrait = vue.ref("");
        const middleMenu = vue.ref({});
        const userMenu = vue.ref([]);
        const extendMenu = vue.ref([]);
        init();
        vue.onMounted(async function() {
          {
            waitUtil(() => userPortrait.value !== "").then(function() {
              if (navAvatar.value !== void 0)
                navAvatar.value.src = tiebaAPI.URL_profile(userPortrait.value);
            });
          }
        });
        async function init() {
          await waitUtil(() => PageData !== void 0).then(() => {
            userPortrait.value = PageData.user.portrait;
            loadNavMenuContent();
          });
        }
        async function login() {
          const loginButton = DOMS(".u_login");
          const directLoginButton = DOMS("#TANGRAM__PSP_24__submit");
          if (directLoginButton.length > 0) {
            const confirmDirect = await messageBox({
              title: "快速登录",
              message: "检测到快速登录入口,是否尝试直接登录?",
              type: "OkCancel"
            });
            if (confirmDirect === "positive") {
              directLoginButton[0].click();
            } else {
              regularLogin();
            }
          } else {
            regularLogin();
          }
          function regularLogin() {
            loginButton.length > 0 ? DOMS("a", loginButton[0])[0].click() : cannotLogin();
          }
          function cannotLogin() {
            toast({ message: "未检测到可用的登录入口,请刷新重试", type: "warning" });
          }
        }
        function loadNavMenuContent() {
          middleMenu.value = {
            "消息": [
              {
                title: "查看私信",
                href: "/im/pcmsg"
              },
              {
                title: "查看回复",
                href: `/i/sys/jump?u=${userPortrait.value}&type=replyme`
              },
              {
                title: "查看 @",
                href: `/i/sys/jump?u=${userPortrait.value}&type=atme`
              },
              "separator",
              {
                title: "查看好友申请",
                href: `/i/sys/jump?u=${userPortrait.value}&type=friendapply`
              },
              {
                title: "查看新粉丝",
                href: `/i/sys/jump?u=${userPortrait.value}&type=fans`
              },
              "separator",
              {
                title: "我的收藏",
                href: `/i/sys/jump?u=${userPortrait.value}&type=storethread`
              },
              {
                title: "我的通知",
                href: "/sysmsg/index?type=notity"
              }
            ],
            "更多": [
              {
                title: "账号设置",
                href: "//passport.baidu.com/?center&tpl=tb&aid=6&default_tab=3#3,0"
              },
              {
                title: "贴吧设置",
                href: `/home/profile?un=${PageData.user.name_url}`
              },
              "separator",
              {
                title: "服务中心",
                href: "//tieba.baidu.com/pmc"
              },
              {
                title: "问题反馈",
                href: "//tieba.baidu.com/hermes/feedback"
              }
            ]
          };
          userMenu.value = [
            {
              title: "我的贴吧",
              href: `/home/main?id=${userPortrait.value}&fr=userbar`
            },
            {
              title: "我的收藏",
              href: `/i/sys/jump?un=${PageData.user.user_name}${PageData.user.name_url}&type=storethread&st_mod=userbar&fr=tb0_pb`
            }
          ];
          PageData.user.is_login ? userMenu.value.push("separator", {
            title: "退出登录",
            click() {
              DOMS("a", "a", DOMS(".u_logout")[0])[0].click();
            }
          }) : userMenu.value.push("separator", {
            title: "登录",
            click() {
              login();
            }
          });
          extendMenu.value = [
            {
              title: "脚本设置",
              click() {
                renderDialog(Settings);
              }
            },
            {
              title: "检查更新",
              click() {
                checkUpdateAndNotify(true);
              }
            },
            "separator",
            {
              title: "源代码仓库",
              innerText: "GitHub",
              href: GithubRepo
            },
            {
              title: "源代码仓库",
              innerText: "Gitee",
              href: GiteeRepo
            },
            {
              title: "切换至 GreasyFork",
              href: "https://greasyfork.org/zh-CN/scripts/460113"
            }
          ];
        }
        return (_ctx, _cache) => {
          return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$1, [
            vue.createElementVNode("div", _hoisted_2$1, [
              vue.createVNode(_sfc_main$k, {
                class: "nav-button nav-title-container",
                "is-anchor": "",
                href: "/",
                "no-border": ""
              }, {
                default: vue.withCtx(() => [
                  vue.createElementVNode("img", {
                    src: vue.unref(getResource)("/assets/images/main/icon64.png"),
                    alt: "",
                    class: "nav-icon"
                  }, null, 8, _hoisted_3$1),
                  _hoisted_4$1
                ]),
                _: 1
              })
            ]),
            vue.createElementVNode("div", _hoisted_5$1, [
              vue.createElementVNode("div", _hoisted_6$1, [
                (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(middleMenu.value, (menu, key) => {
                  return vue.openBlock(), vue.createBlock(_sfc_main$k, {
                    class: "menu-container middle-menu-container",
                    "no-border": ""
                  }, {
                    default: vue.withCtx(() => [
                      vue.createTextVNode(vue.toDisplayString(key) + " ", 1),
                      vue.createVNode(DropdownMenu, { "menu-items": menu }, null, 8, ["menu-items"])
                    ]),
                    _: 2
                  }, 1024);
                }), 256))
              ]),
              vue.createVNode(_sfc_main$k, {
                class: "nav-button menu-container avatar-button",
                "shadow-border": ""
              }, {
                default: vue.withCtx(() => [
                  vue.createElementVNode("img", {
                    ref_key: "navAvatar",
                    ref: navAvatar,
                    class: "nav-avatar"
                  }, null, 512),
                  vue.createVNode(DropdownMenu, {
                    "menu-items": userMenu.value
                  }, null, 8, ["menu-items"])
                ]),
                _: 1
              }),
              vue.createVNode(_sfc_main$k, {
                class: "nav-button menu-container nav-menu icon",
                "shadow-border": "",
                "no-border": ""
              }, {
                default: vue.withCtx(() => [
                  vue.createTextVNode(" menu "),
                  vue.createVNode(DropdownMenu, {
                    "menu-items": extendMenu.value,
                    style: { "font-family": "initial" }
                  }, null, 8, ["menu-items"])
                ]),
                _: 1
              })
            ])
          ]);
        };
      }
    });
    const navBarVue = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-18e85ac3"]]);
    const navBarCSS = "#com_userbar {\n  display: none;\n}";
    function _navBar() {
      injectCSSList(navBarCSS);
      waitUtil(() => DOMS("#com_userbar").length > 0).then(function() {
        const elder = DOMS("#com_userbar")[0];
        const navWrapper = vue.createVNode("div", {
          "id": "nav-wrapper",
          "class": "nav-wrapper"
        }, null);
        insertJSX(navWrapper, document.body, elder);
        renderComponent(navBarVue, DOMS("#nav-wrapper")[0]);
      });
    }
    _navBar();
    const index$6 = {
      id: "remixed-theme",
      name: "Tieba Remix 主题",
      author: "锯条",
      version: "0.3",
      brief: "更现代的主题样式",
      description: `包含新的样式、昼夜主题及其自动切换等功能`,
      scope: true,
      runAt: "immediately",
      entry: main$2
    };
    const themeSheets = [];
    function main$2() {
      themeSheets.push(injectCSSList(userButtonCSS));
      themeSheets.push(injectCSSList(floatBarCSS));
      themeSheets.push(injectCSSList(floatMessageCSS));
      fadeInElems.push(".tbui_aside_float_bar .svg-container");
      fadeInElems.push(".d_badge_bright .d_badge_lv, .user_level .badge_index");
      fadeInElems.forEach((selector) => {
        injectCSSRule(selector, {
          opacity: "0"
        });
      });
      setCustomBackground();
      document.addEventListener("DOMContentLoaded", () => {
        DOMS(".post-tail-wrap .icon-jubao").forEach((elem) => {
          elem.removeAttribute("src");
          elem.after("举报");
        });
        remixedObservers.postsObserver.addEvent(() => {
          DOMS(".d_badge_lv").forEach((elem) => {
            if (elem.textContent === "") {
              let parent = elem;
              while (!parent.classList.contains("l_badge")) {
                if (parent.parentElement)
                  parent = parent.parentElement;
              }
              parent.style.display = "none";
            }
          });
        });
      });
      window.addEventListener("load", () => {
        fadeInLoad(".tbui_aside_float_bar .svg-container");
        remixedObservers.postsObserver.addEvent(() => {
          const lvlClassHead = "tieba-lvl-";
          const lvlGreen = `${lvlClassHead}green`;
          const lvlBlue = `${lvlClassHead}blue`;
          const lvlYellow = `${lvlClassHead}yellow`;
          const lvlOrange = `${lvlClassHead}orange`;
          DOMS(
            ".d_badge_bawu1 .d_badge_lv, .d_badge_bawu2 .d_badge_lv, .badge_index"
          ).forEach((elem) => {
            if (elem.className.indexOf(lvlClassHead) !== -1)
              return;
            const lvl = parseInt(defaults(elem.textContent, "0"));
            if (lvl >= 1 && lvl <= 3) {
              elem.classList.add(lvlGreen);
            } else if (lvl >= 4 && lvl <= 9) {
              elem.classList.add(lvlBlue);
            } else if (lvl >= 10 && lvl <= 15) {
              elem.classList.add(lvlYellow);
            } else if (lvl >= 16) {
              elem.classList.add(lvlOrange);
            }
          });
          fadeInLoad(".d_badge_bright .d_badge_lv, .user_level .badge_index");
        });
        themeSheets.forEach((sheet) => {
          document.head.appendChild(sheet);
        });
      });
    }
    const index$7 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
      __proto__: null,
      default: index$6
    }, Symbol.toStringTag, { value: "Module" }));
    const index$4 = {
      id: "remixed-toolkit",
      name: "实用工具库",
      author: "锯条",
      version: "1.0",
      brief: "优化原版贴吧体验的一组功能",
      description: "这是一个轻量级的工具库,包含了诸如自动展开长图等实用功能。",
      scope: true,
      runAt: "immediately",
      settings: {
        "auto-expand": {
          title: "自动展开长图",
          description: `该功能会自动将帖子中所有的长图片自动展开,无需手动操作`,
          widgets: [{
            type: "toggle",
            init: () => toolkitRef.value["auto-expand"],
            event() {
              toolkitRef.value["auto-expand"] = !toolkitRef.value["auto-expand"];
              toolkitToogles.set(toolkitRef.value);
            }
          }]
        }
      },
      entry: function() {
        for (const key in toolkitFeatures) {
          const k = key;
          if (toolkitRef.value[k])
            toolkitFeatures[k]();
        }
      }
    };
    const toolkitFeatures = {
      /**
       * 自动展开长图
       */
      "auto-expand"() {
        remixedObservers.postsObserver.addEvent(() => {
          forEach(DOMS(".replace_tip"), (el) => {
            el.click();
          });
        });
      }
    };
    const toolkitToogles = new UserKey("toolkitToogles", {
      "auto-expand": true
    });
    const toolkitRef = vue.ref(toolkitToogles.get());
    const index$5 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
      __proto__: null,
      default: index$4
    }, Symbol.toStringTag, { value: "Module" }));
    const shieldList = new UserKey("shieldList", []);
    const _withScopeId = (n) => (vue.pushScopeId("data-v-bb897aee"), n = n(), vue.popScopeId(), n);
    const _hoisted_1 = { class: "shield-container" };
    const _hoisted_2 = {
      key: 0,
      class: "words-container"
    };
    const _hoisted_3 = { class: "icon" };
    const _hoisted_4 = {
      key: 1,
      class: "empty-list-container"
    };
    const _hoisted_5 = { class: "shield-controls" };
    const _hoisted_6 = { class: "submit-controls" };
    const _hoisted_7 = { class: "regex-check" };
    const _hoisted_8 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ vue.createElementVNode("label", { for: "use-regex" }, "正则表达式", -1));
    const _hoisted_9 = { class: "user-scope" };
    const _hoisted_10 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ vue.createElementVNode("label", { for: "user-scope" }, "屏蔽用户名", -1));
    const _sfc_main = /* @__PURE__ */ vue.defineComponent({
      __name: "module.shield",
      setup(__props) {
        const shieldListRef = vue.ref(shieldList.get());
        const inputRule = vue.ref("");
        const useRegex = vue.ref(false);
        const scope = vue.ref("posts");
        function inputKeyPress(e) {
          if (e.key === "Enter") {
            e.preventDefault();
            updateShieldList();
          }
        }
        function removeAll() {
          shieldListRef.value.length = 0;
          shieldList.remove();
        }
        function updateShieldList() {
          if (inputRule.value.length <= 0)
            return;
          const sh = {
            rule: inputRule.value,
            type: useRegex.value ? "regex" : "string",
            scope: scope.value,
            switch: true
          };
          shieldListRef.value.push(sh);
          inputRule.value = "";
          shieldList.set(shieldListRef.value);
        }
        return (_ctx, _cache) => {
          return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
            shieldListRef.value.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2, [
              (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(shieldListRef.value, (sh) => {
                return vue.openBlock(), vue.createBlock(_sfc_main$k, {
                  class: vue.normalizeClass(["shield-elem", { "content-scope": sh.scope === "posts", "user-scope": sh.scope === "users" }])
                }, {
                  default: vue.withCtx(() => [
                    vue.createElementVNode("div", _hoisted_3, vue.toDisplayString(sh.scope === "posts" ? "chat" : "account_circle"), 1),
                    vue.createTextVNode(" " + vue.toDisplayString(sh.rule), 1)
                  ]),
                  _: 2
                }, 1032, ["class"]);
              }), 256)),
              vue.createVNode(_sfc_main$k, {
                class: "remove-all shield-elem icon",
                onClick: removeAll
              }, {
                default: vue.withCtx(() => [
                  vue.createTextVNode("delete")
                ]),
                _: 1
              })
            ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_4, "当前没有记录屏蔽规则")),
            vue.createElementVNode("div", _hoisted_5, [
              vue.createVNode(_sfc_main$7, {
                modelValue: inputRule.value,
                "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => inputRule.value = $event),
                "muti-lines": true,
                class: "shield-input",
                placeholder: "输入屏蔽规则",
                onKeypress: inputKeyPress
              }, null, 8, ["modelValue"]),
              vue.createElementVNode("div", _hoisted_6, [
                vue.createElementVNode("div", _hoisted_7, [
                  vue.withDirectives(vue.createElementVNode("input", {
                    "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => useRegex.value = $event),
                    id: "use-regex",
                    type: "checkbox"
                  }, null, 512), [
                    [vue.vModelCheckbox, useRegex.value]
                  ]),
                  _hoisted_8
                ]),
                vue.createElementVNode("div", _hoisted_9, [
                  vue.withDirectives(vue.createElementVNode("input", {
                    "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => scope.value = $event),
                    id: "user-scope",
                    type: "checkbox"
                  }, null, 512), [
                    [vue.vModelCheckbox, scope.value]
                  ]),
                  _hoisted_10
                ]),
                vue.createVNode(_sfc_main$k, {
                  class: "submit-button",
                  "shadow-border": true,
                  "theme-style": true,
                  onClick: updateShieldList
                }, {
                  default: vue.withCtx(() => [
                    vue.createTextVNode("确定 ")
                  ]),
                  _: 1
                })
              ])
            ])
          ]);
        };
      }
    });
    const moduleShieldVue = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-bb897aee"]]);
    const index$2 = {
      id: "shield",
      name: "贴吧屏蔽",
      author: "锯条",
      version: "1.2",
      brief: "眼不见为净",
      description: `用户自定义屏蔽规则,符合规则的贴子和楼层将不会显示在首页、看贴页面和进吧页面。支持正则匹配`,
      scope: true,
      runAt: "immediately",
      settings: {
        "shield-controls": {
          title: "管理屏蔽规则",
          description: `这些屏蔽规则将会在首页(旧版)、看贴页面生效,会自动隐藏所有符合匹配规则的贴子和楼层。`,
          widgets: [{
            type: "component",
            component: vue.markRaw(moduleShieldVue)
          }]
        }
      },
      entry: main$1
    };
    function matchShield(obj, str) {
      if (obj.ignoreCase === void 0)
        obj.ignoreCase = true;
      if (obj.type === "string") {
        if (obj.ignoreCase) {
          obj.rule = obj.rule.toLowerCase();
          str = str.toLowerCase();
        }
        if (str.indexOf(obj.rule) !== -1) {
          return true;
        }
      }
      if (obj.type === "regex") {
        let regex;
        if (obj.ignoreCase) {
          regex = new RegExp(obj.rule, "i");
        } else {
          regex = new RegExp(obj.rule);
        }
        if (regex.test(str)) {
          return true;
        }
      }
      return false;
    }
    function shieldElementsBySelector(observer, parentSelector, subSelector) {
      observer.addEvent(() => {
        DOMS(parentSelector).forEach((elem) => {
          var _a;
          let isMatch = false;
          const content = (_a = elem.querySelector(subSelector)) == null ? void 0 : _a.textContent;
          if (content === null || content === void 0)
            return;
          for (const sh of shieldList.get()) {
            if (matchShield(sh, content)) {
              isMatch = true;
              break;
            }
          }
          if (isMatch) {
            elem.style.display = "none";
          }
        });
      });
    }
    function main$1() {
      shieldElementsBySelector(remixedObservers.postsObserver, ".l_post_bright", ".d_post_content");
      shieldElementsBySelector(remixedObservers.newListObserver, ".new_list li", ".n_txt");
      shieldElementsBySelector(remixedObservers.postsObserver, ".l_post_bright", ".d_name a");
      shieldElementsBySelector(remixedObservers.commentsObserver, ".lzl_single_post", ".lzl_cnt .j_user_card");
      shieldElementsBySelector(remixedObservers.threadListObserver, ".j_feed_li", ".post_author");
    }
    const index$3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
      __proto__: null,
      default: index$2
    }, Symbol.toStringTag, { value: "Module" }));
    const tagCSS = ':root {\r\n    --myself-theme-background: rgba(25, 110, 153, 0.2);\r\n    --myself-theme-fore: rgb(16, 73, 101);\r\n    --cengzhu-theme-background: rgba(255, 89, 107, 0.2);\r\n    --cengzhu-theme-fore: rgb(178, 62, 90);\r\n}\r\n\r\n@media (prefers-color-scheme: dark) {\r\n    :root {\r\n        --myself-theme-background: rgba(34, 135, 204, 0.2);\r\n        --myself-theme-fore: rgb(40, 160, 242);\r\n        --cengzhu-theme-background: rgba(204, 71, 103, 0.2);\r\n        --cengzhu-theme-fore: rgb(255, 89, 118);\r\n    }\r\n}\r\n\r\n.tag-elem {\r\n    display: inline-block;\r\n}\r\n\r\n.tag-elem::after {\r\n    padding: 2px 6px;\r\n    border-radius: 4px;\r\n    margin: 0 4px;\r\n    background-color: var(--trans-light-background);\r\n    color: var(--light-fore);\r\n    font-size: 12px;\r\n    font-weight: normal;\r\n}\r\n\r\n.tieba-tags-me::after {\r\n    /* background-color: var(--myself-theme-background);\r\n    color: var(--myself-theme-fore); */\r\n    content: "我";\r\n}\r\n\r\n.tieba-tags-lz::after {\r\n    /* background-color: var(--tieba-theme-background);\r\n    color: var(--tieba-theme-fore); */\r\n    content: "楼主";\r\n}\r\n\r\n.tieba-tags-cz::after {\r\n    /* background-color: var(--cengzhu-theme-background);\r\n    color: var(--cengzhu-theme-fore); */\r\n    content: "层主";\r\n}\r\n';
    const index = {
      id: "tieba-tags",
      name: "楼中楼标签",
      author: "锯条",
      version: "2.0.1",
      brief: "优化楼中楼浏览体验",
      description: `为楼中楼的楼主、层主等用户添加特殊标签`,
      scope: ["thread"],
      runAt: "loaded",
      entry: main
    };
    function main() {
      const TAGGED = "is-tagged";
      const TB_TAG = "tag-elem";
      const MY_TAG = "tieba-tags-me";
      const LZ_TAG = "tieba-tags-lz";
      const CZ_TAG = "tieba-tags-cz";
      const louzhu = PageData.thread.author;
      const myPortrait = PageData.user.portrait;
      const myUserName = PageData.user.user_name;
      let louzhuPortrait = getLouzhuPortrait(document);
      injectCSSList(tagCSS);
      (async () => {
        if (!louzhuPortrait) {
          const response = await fetch(location.href.split("?")[0], {
            mode: "cors",
            credentials: "include"
          });
          if (response.ok) {
            await response.text().then((value) => {
              const fpDOC = new DOMParser().parseFromString(value, "text/html");
              louzhuPortrait = getLouzhuPortrait(fpDOC);
            });
          }
        }
      })().then(() => {
        remixedObservers.commentsObserver.addEvent(createTagsAll);
      });
      function getLouzhuPortrait(doc) {
        const j_tags = doc.getElementsByClassName("j_louzhubiaoshi");
        if (j_tags.length > 0) {
          const targetFloor = findParentByClass(j_tags[0], "l_post_bright");
          if (targetFloor) {
            const dataAttr = targetFloor.getAttribute("data-field");
            if (dataAttr !== null) {
              const dataField = JSON.parse(dataAttr);
              return split(dataField.author.portrait, "?")[0];
            }
          }
        }
        return void 0;
      }
      function createTagsAll() {
        forEach(DOMS(".lzl_cnt .at"), (elem) => {
          if (elem.classList.contains(TAGGED))
            return;
          elem.classList.add(TAGGED);
          let isLouzhu = false;
          let isMe = false;
          const username = elem.getAttribute("username");
          if (userClassify(myUserName, myPortrait)) {
            isMe = true;
            addTag(elem, MY_TAG);
          }
          if (!isMe) {
            if (userClassify(louzhu, louzhuPortrait)) {
              isLouzhu = true;
              addTag(elem, LZ_TAG);
            }
          }
          if (!isMe && !isLouzhu) {
            const floor = findParentByClass(elem, "l_post_bright");
            if (floor !== null) {
              const cengzhuCard = floor.getElementsByClassName("p_author_name")[0];
              const cengzhu = cengzhuCard.textContent;
              if (cengzhu) {
                if (elem.textContent === cengzhu) {
                  addTag(elem, CZ_TAG);
                }
              }
            }
          }
          function userClassify(un, portrait) {
            if (username === un && un !== "") {
              return true;
            } else if (indexOf(["", " "], username) !== -1) {
              const targetPortrait = elem.getAttribute("portrait");
              if (targetPortrait !== null && portrait) {
                if (targetPortrait === portrait) {
                  return true;
                }
              } else {
                return dataClassify();
              }
            } else if (username === null) {
              return dataClassify();
            }
            return false;
            function dataClassify() {
              const dataAttr = elem.getAttribute("data-field");
              if (dataAttr !== null) {
                const dataField = JSON.parse(dataAttr.replace(/'/g, '"'));
                if (portrait) {
                  if (dataField.id === portrait) {
                    return true;
                  }
                } else {
                  if (dataField.un === un) {
                    return true;
                  }
                }
              }
              return false;
            }
          }
        });
        function addTag(elem, className) {
          elem.appendChild(
            templateCreate("div", {
              class: `${TB_TAG} ${className}`
            })
          );
        }
      }
    }
    const index$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
      __proto__: null,
      default: index
    }, Symbol.toStringTag, { value: "Module" }));
  })(Vue, ElementPlus, marked);

})();