├── dist ├── 48x48.png ├── 72x72.png ├── 96x96.png ├── clash.png ├── logo.png ├── loon.png ├── quanx.png ├── stash.png ├── surge.png ├── v2ray.png ├── 144x144.png ├── 168x168.png ├── 192x192.png ├── 256x256.png ├── 512x512.png ├── favicon.ico ├── main.css.gz ├── main.js.gz ├── roboto-bold.eot ├── roboto-bold.woff ├── roboto-light.eot ├── shadowrocket.png ├── roboto-light.woff ├── apple-touch-icon.png ├── 3x_static_iconfont.ttf ├── 3x_static_iconfont.woff ├── jetbrainsmononl-regular.eot ├── jetbrainsmononl-regular.woff ├── registerSW.js ├── manifest.webmanifest ├── manifest.json ├── user-agent.svg ├── index.js ├── index.html ├── sw.js ├── avatar.svg ├── favicon.svg ├── logo.svg ├── node.svg ├── workbox-1bc7d4d5.js └── main.css ├── crontab ├── frontend └── Caddyfile ├── supervisor └── supervisord.conf ├── LICENSE ├── Caddyfile ├── docker-entrypoint.sh ├── Dockerfile ├── .github └── workflows │ ├── sub-store.yml │ └── sub-store-frontend.yml └── README.md /dist/48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/48x48.png -------------------------------------------------------------------------------- /dist/72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/72x72.png -------------------------------------------------------------------------------- /dist/96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/96x96.png -------------------------------------------------------------------------------- /dist/clash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/clash.png -------------------------------------------------------------------------------- /dist/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/logo.png -------------------------------------------------------------------------------- /dist/loon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/loon.png -------------------------------------------------------------------------------- /dist/quanx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/quanx.png -------------------------------------------------------------------------------- /dist/stash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/stash.png -------------------------------------------------------------------------------- /dist/surge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/surge.png -------------------------------------------------------------------------------- /dist/v2ray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/v2ray.png -------------------------------------------------------------------------------- /dist/144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/144x144.png -------------------------------------------------------------------------------- /dist/168x168.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/168x168.png -------------------------------------------------------------------------------- /dist/192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/192x192.png -------------------------------------------------------------------------------- /dist/256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/256x256.png -------------------------------------------------------------------------------- /dist/512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/512x512.png -------------------------------------------------------------------------------- /dist/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/favicon.ico -------------------------------------------------------------------------------- /dist/main.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/main.css.gz -------------------------------------------------------------------------------- /dist/main.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/main.js.gz -------------------------------------------------------------------------------- /dist/roboto-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/roboto-bold.eot -------------------------------------------------------------------------------- /dist/roboto-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/roboto-bold.woff -------------------------------------------------------------------------------- /dist/roboto-light.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/roboto-light.eot -------------------------------------------------------------------------------- /dist/shadowrocket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/shadowrocket.png -------------------------------------------------------------------------------- /dist/roboto-light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/roboto-light.woff -------------------------------------------------------------------------------- /dist/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/apple-touch-icon.png -------------------------------------------------------------------------------- /dist/3x_static_iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/3x_static_iconfont.ttf -------------------------------------------------------------------------------- /dist/3x_static_iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/3x_static_iconfont.woff -------------------------------------------------------------------------------- /dist/jetbrainsmononl-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/jetbrainsmononl-regular.eot -------------------------------------------------------------------------------- /dist/jetbrainsmononl-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaintWe/Sub-Store-Docker/HEAD/dist/jetbrainsmononl-regular.woff -------------------------------------------------------------------------------- /crontab: -------------------------------------------------------------------------------- 1 | 0 */6 * * * /usr/bin/curl http://127.0.0.1/api/sync/artifacts 2 | 0 */12 * * * /usr/bin/curl http://127.0.0.1/api/utils/refresh 3 | -------------------------------------------------------------------------------- /dist/registerSW.js: -------------------------------------------------------------------------------- 1 | if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('/sw.js', { scope: '/' })})} -------------------------------------------------------------------------------- /frontend/Caddyfile: -------------------------------------------------------------------------------- 1 | handle { 2 | root * /git/public 3 | try_files {path} /index.html 4 | file_server 5 | } 6 | -------------------------------------------------------------------------------- /supervisor/supervisord.conf: -------------------------------------------------------------------------------- 1 | [supervisord] 2 | nodaemon=true 3 | 4 | [program:cron] 5 | user=root 6 | command=/usr/bin/supercronic /git/crontab 7 | autostart=true 8 | autorestart=true 9 | 10 | [program:caddy] 11 | command=/usr/sbin/caddy run --config /etc/caddy/Caddyfile 12 | user=root 13 | autostart=true 14 | autorestart=true 15 | 16 | [program:substore] 17 | command=/usr/bin/node /git/sub-store.min.js 18 | autostart=true 19 | autorestart=true 20 | -------------------------------------------------------------------------------- /dist/manifest.webmanifest: -------------------------------------------------------------------------------- 1 | {"name":"Sub Store","short_name":"Sub Store","start_url":"/","display":"standalone","background_color":"#121212","lang":"en","scope":"/","description":"A sub-converter running in a Progressive Web App","theme_color":"#121212","id":"/","icons":[{"src":"144x144.png","sizes":"144x144","type":"image/png"},{"src":"168x168.png","sizes":"168x168","type":"image/png"},{"src":"192x192.png","sizes":"192x192","type":"image/png"},{"src":"256x256.png","sizes":"256x256","type":"image/png"},{"src":"512x512.png","sizes":"512x512","type":"image/png","purpose":"any"}]} 2 | -------------------------------------------------------------------------------- /dist/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Sub Store", 3 | "short_name": "Sub Store", 4 | "description": "A sub-converter running in a Progressive Web App", 5 | "theme_color": "#121212", 6 | "background_color": "#121212", 7 | "id": "/", 8 | "start_url": "/", 9 | "scope": "/", 10 | "display": "standalone", 11 | "icons": [ 12 | { 13 | "src": "144x144.png", 14 | "sizes": "144x144", 15 | "type": "image/png" 16 | }, 17 | { 18 | "src": "168x168.png", 19 | "sizes": "168x168", 20 | "type": "image/png" 21 | }, 22 | { 23 | "src": "192x192.png", 24 | "sizes": "192x192", 25 | "type": "image/png" 26 | }, 27 | { 28 | "src": "256x256.png", 29 | "sizes": "256x256", 30 | "type": "image/png" 31 | }, 32 | { 33 | "src": "512x512.png", 34 | "sizes": "512x512", 35 | "type": "image/png", 36 | "purpose": "any" 37 | } 38 | ] 39 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 SaintWe 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Caddyfile: -------------------------------------------------------------------------------- 1 | :80 { 2 | @api_auth header Authorization "Bearer __Bearer_Token__" 3 | @download_auth query d_token=__Download_Token__ 4 | 5 | encode gzip 6 | 7 | handle /api/* { 8 | handle __api_handle__ { 9 | reverse_proxy localhost:3000 10 | } 11 | handle { 12 | respond "Unauthorized" 401 { 13 | close 14 | } 15 | } 16 | } 17 | 18 | handle /download/* { 19 | handle __download_handle__ { 20 | reverse_proxy localhost:3000 21 | } 22 | handle { 23 | respond "由于开启了 d_token 验证,当前 d_token 不正确或未提供" 401 { 24 | close 25 | } 26 | } 27 | } 28 | 29 | ##____import /git/frontend/Caddyfile 30 | handle { 31 | respond / "Hello, world!" 32 | } 33 | handle_errors { 34 | respond "{err.status_code} {err.status_text}" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | cp /git/Caddyfile /etc/caddy/Caddyfile 6 | 7 | if [ $DOMAIN ]; then 8 | rm -rf /git/public 9 | cp -r /git/dist /git/public 10 | sed -i "s|https://sub.store|${DOMAIN}|g" `grep https://sub.store -rl /git/public` 11 | sed -i "s|##____||g" /etc/caddy/Caddyfile 12 | fi 13 | 14 | if [ $BEARER_TOKEN ]; then 15 | sed -i "s|__api_handle__|@api_auth|g" /etc/caddy/Caddyfile 16 | sed -i "s|__Bearer_Token__|${BEARER_TOKEN}|g" /etc/caddy/Caddyfile 17 | else 18 | sed -i "s|__api_handle__||g" /etc/caddy/Caddyfile 19 | fi 20 | 21 | if [ $D_TOKEN ]; then 22 | sed -i "s|__download_handle__|@download_auth|g" /etc/caddy/Caddyfile 23 | sed -i "s|__Download_Token__|${D_TOKEN}|g" /etc/caddy/Caddyfile 24 | else 25 | sed -i "s|__download_handle__||g" /etc/caddy/Caddyfile 26 | fi 27 | 28 | if [ ! -d "/Sub-Store" ]; then 29 | mkdir /Sub-Store 30 | fi 31 | 32 | if [ ! -f /Sub-Store/root.json ]; then 33 | echo "{}" > /Sub-Store/root.json 34 | fi 35 | 36 | if [ ! -f /Sub-Store/sub-store.json ]; then 37 | echo "{}" > /Sub-Store/sub-store.json 38 | fi 39 | 40 | /usr/bin/supervisord -c /etc/supervisor/supervisord.conf 41 | 42 | exec "$@" 43 | -------------------------------------------------------------------------------- /dist/user-agent.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:latest 2 | 3 | ARG TARGETOS TARGETARCH 4 | 5 | RUN apk add --no-cache nodejs npm tzdata git caddy curl supervisor && \ 6 | rm -fr /var/cache/apk/* && \ 7 | cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ 8 | npm install -g pnpm && \ 9 | git clone https://github.com/sub-store-org/Sub-Store.git /Sub-Store && \ 10 | cd /Sub-Store/backend && \ 11 | pnpm install && \ 12 | pnpm run build && \ 13 | git clone https://github.com/SaintWe/Sub-Store-Docker.git /git && \ 14 | cd /git && \ 15 | cp --parents ./supervisor/supervisord.conf /etc/ && \ 16 | pnpm add express@^4.17.1 && \ 17 | pnpm add body-parser@^1.19.0 && \ 18 | pnpm add request@^2.88.2 && \ 19 | rm -f /etc/caddy/Caddyfile && \ 20 | rm -rf /git/.git && \ 21 | curl -fsSLo /usr/bin/supercronic https://github.com/aptible/supercronic/releases/latest/download/supercronic-${TARGETOS}-${TARGETARCH} && \ 22 | chmod +x /usr/bin/supercronic && \ 23 | cp /Sub-Store/backend/sub-store.min.js /git && \ 24 | rm -rf /Sub-Store && \ 25 | # rm -rf $(pnpm store path) && \ 26 | npm uninstall -g pnpm && \ 27 | apk del git tzdata npm && \ 28 | ln -s /Sub-Store/sub-store.json /git/sub-store.json && \ 29 | ln -s /Sub-Store/root.json /git/root.json 30 | 31 | WORKDIR /git 32 | 33 | ENTRYPOINT ["/bin/sh","/git/docker-entrypoint.sh" ] 34 | -------------------------------------------------------------------------------- /.github/workflows/sub-store.yml: -------------------------------------------------------------------------------- 1 | name: 构建 Sub-Store Docker 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | branches: 7 | - 'main' 8 | paths-ignore: 9 | - 'dist/**' 10 | - 'README.md' 11 | schedule: 12 | - cron: "0 2 */3 * *" 13 | 14 | jobs: 15 | build_backend: 16 | runs-on: ubuntu-latest 17 | 18 | steps: 19 | - name: Check Out 20 | uses: actions/checkout@v3 21 | 22 | - name: Set up QEMU 23 | uses: docker/setup-qemu-action@v2 24 | 25 | # 设置 docker 环境 26 | - name: Set up Docker Buildx 27 | id: buildx 28 | uses: docker/setup-buildx-action@v2 29 | 30 | # docker login 31 | - name: Login to Docker Hub 32 | uses: docker/login-action@v2 33 | with: 34 | username: ${{ secrets.DOCKER_HUB_USERNAME }} 35 | password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} 36 | 37 | # build 并且 push docker 镜像 38 | - name: Build and push 39 | id: docker_build_backend 40 | uses: docker/build-push-action@v3 41 | with: 42 | network: host 43 | platforms: linux/amd64,linux/arm64 44 | context: ./ 45 | file: ./Dockerfile 46 | push: true 47 | tags: ${{ secrets.DOCKER_HUB_USERNAME }}/sub-store:latest 48 | 49 | # 打印 docker 镜像 SHA256 Hash 值 50 | - name: Image digest 51 | run: echo ${{ steps.docker_build_backend.outputs.digest }} 52 | -------------------------------------------------------------------------------- /dist/index.js: -------------------------------------------------------------------------------- 1 | !function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver((e=>{for(const t of e)if("childList"===t.type)for(const e of t.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)})).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerpolicy&&(r.referrerPolicy=e.referrerpolicy),"use-credentials"===e.crossorigin?r.credentials="include":"anonymous"===e.crossorigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();const e={};setTimeout((()=>{(function(r,t,n){if(!t||0===t.length)return r();const o=document.getElementsByTagName("link");return Promise.all(t.map((r=>{if((r=function(e){return"/"+e}(r))in e)return;e[r]=!0;const t=r.endsWith(".css"),i=t?'[rel="stylesheet"]':"";if(n)for(let e=o.length-1;e>=0;e--){const n=o[e];if(n.href===r&&(!t||"stylesheet"===n.rel))return}else if(document.querySelector(`link[href="${r}"]${i}`))return;const s=document.createElement("link");return s.rel=t?"stylesheet":"modulepreload",t||(s.as="script",s.crossOrigin=""),s.href=r,document.head.appendChild(s),t?new Promise(((e,t)=>{s.addEventListener("load",e),s.addEventListener("error",(()=>t(new Error(`Unable to preload CSS for ${r}`))))})):void 0}))).then((()=>r()))})((()=>import("./main.js")),["main.js","main.css"]).then((({initializeApp:e})=>{e()}))}),10); 2 | -------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | Sub Store 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 36 | 37 | 38 | 39 | 40 |
41 | 42 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /.github/workflows/sub-store-frontend.yml: -------------------------------------------------------------------------------- 1 | name: 构建 Sub-Store 前端 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | branches: 7 | - 'main' 8 | paths-ignore: 9 | - 'backend' 10 | - 'README.md' 11 | schedule: 12 | - cron: "0 1 */3 * *" 13 | 14 | jobs: 15 | build: 16 | runs-on: ubuntu-latest 17 | 18 | steps: 19 | - name: Check Out 20 | uses: actions/checkout@v3 21 | 22 | - name: Install Node.js 23 | uses: actions/setup-node@v3 24 | with: 25 | node-version: 18 26 | 27 | - name: Install pnpm 28 | uses: pnpm/action-setup@v2 29 | id: pnpm-install 30 | with: 31 | version: 8 32 | run_install: false 33 | 34 | - name: Install and Build 35 | run: | 36 | cd .. 37 | git clone -b mod https://github.com/SaintWe/Sub-Store-Front-End.git 38 | cd Sub-Store-Front-End 39 | pnpm install 40 | pnpm run build 41 | rm -rf "$GITHUB_WORKSPACE/dist" 42 | cp -r ./dist "$GITHUB_WORKSPACE/" 43 | 44 | - name: Verify Changed files 45 | uses: tj-actions/verify-changed-files@v12 46 | id: verify-changed-files 47 | with: 48 | files: | 49 | dist 50 | 51 | - name: Update dist folder to repository 52 | if: steps.verify-changed-files.outputs.files_changed == 'true' 53 | env: 54 | GITHUB_TOKEN: ${{ secrets.GIT_ACTIONS_TOKEN }} 55 | run: | 56 | git config --global user.email "Action@GitHub.com" 57 | git config --global user.name "GitHub Action" 58 | git add . 59 | git commit -m "GitHub Actions Auto Builder at $(date +'%Y-%m-%d %H:%M:%S')" 60 | git push --quiet "https://$GITHUB_TOKEN@github.com/$GITHUB_REPOSITORY.git" main:main 61 | -------------------------------------------------------------------------------- /dist/sw.js: -------------------------------------------------------------------------------- 1 | if(!self.define){let e,s={};const n=(n,i)=>(n=new URL(n+".js",i).href,s[n]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()})).then((()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e})));self.define=(i,r)=>{const c=e||("document"in self?document.currentScript.src:"")||location.href;if(s[c])return;let d={};const t=e=>n(e,c),b={module:{uri:c},exports:d,require:t};s[c]=Promise.all(i.map((e=>b[e]||t(e)))).then((e=>(r(...e),d)))}}define(["./workbox-1bc7d4d5"],(function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"index.html",revision:"ae6dfd9fc9b0a2e9be88d89b4445b3bd"},{url:"index.js",revision:"c6abaed9bd5d2101c3bbf4c73b75a653"},{url:"main.css",revision:"eebf18b7081e0ce12c11bffaa577ddef"},{url:"main.js",revision:"bbd58305dc062ff9904db0393ae9ac41"},{url:"registerSW.js",revision:"1872c500de691dce40960bb85481de07"},{url:"144x144.png",revision:"da1fc237f28bf24ce23a3882613413c2"},{url:"168x168.png",revision:"e1391dcf388bbba84b9b04812cf0ea47"},{url:"192x192.png",revision:"8d85b04575c35c9f8e1e6bba0ea11b64"},{url:"256x256.png",revision:"bc8ab0651e3debb4e73835a9de05d5ca"},{url:"512x512.png",revision:"b294d15079f018bf82b6fdad29b97718"},{url:"manifest.webmanifest",revision:"f43e812a8d940501bd20a194c0043838"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html"))),e.registerRoute(/.*\.(?:js|css|gz|html|json)/i,new e.CacheFirst({cacheName:"sub-store-js-cache",plugins:[new e.ExpirationPlugin({maxEntries:10,maxAgeSeconds:2592e3}),new e.CacheableResponsePlugin({statuses:[200]})]}),"GET"),e.registerRoute(/.*\.(?:png|svg|ico|woff|ttf|eot)/i,new e.CacheFirst({cacheName:"sub-store-res-cache",plugins:[new e.ExpirationPlugin({maxEntries:10,maxAgeSeconds:31536e3}),new e.CacheableResponsePlugin({statuses:[200]})]}),"GET")})); 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | Sub-Store 4 |
5 |
6 |

Sub-Store Docker

7 |

8 | 9 | 项目修改于: 10 | 11 | 特别感谢:[@dompling](https://github.com/dompling) 12 | 13 | # 请注意,该镜像的前端部分已替换为 [SaintWe/Sub-Store-Front-End](https://github.com/SaintWe/Sub-Store-Front-End),若有疑请避免使用 14 | 15 | **重新构建了 [Cloudflare Workers 版的 Sub-Store](https://github.com/SaintWe/Sub-Store-Workers) 已实现基于 http authorization bearer 身份认证,前端部分已适配** 16 | 17 | **该 Docker 仍然使用 ,仅在 Caddy 上实现了与 逻辑相同的身份认证** 18 | 19 | ## Docker-compose 部署 20 | 21 | ``` sh 22 | # 使用前端 23 | docker run -d --name substore --restart always -v $(pwd)/data:/Sub-Store -p 6080:80 -e BEARER_TOKEN=替换 -e D_TOKEN=替换 -e DOMAIN=替换 -e TZ=Asia/Shanghai saintwe/sub-store:latest 24 | 25 | # 不使用前端 26 | docker run -d --name substore --restart always -v $(pwd)/data:/Sub-Store -p 6080:80 -e BEARER_TOKEN=替换 -e D_TOKEN=替换 -e TZ=Asia/Shanghai saintwe/sub-store:latest 27 | ``` 28 | 29 | ``` yml 30 | version: '3' 31 | 32 | # 该镜像含前端 33 | services: 34 | substore: 35 | image: saintwe/sub-store:latest 36 | container_name: substore 37 | restart: always 38 | ports: 39 | - "6080:80" 40 | volumes: 41 | - ./data:/Sub-Store 42 | environment: 43 | - TZ=Asia/Shanghai 44 | 45 | # 设置后端的身份认证,随机生成大小写字母+数字填入即可,在公网环境下请务必使用 46 | # - BEARER_TOKEN= 47 | 48 | # 设置后端提取或预览节点的认证,随机生成大小写字母+数字填入即可,在公网环境下请务必使用 49 | # - D_TOKEN= 50 | 51 | # 如需使用前端请取消注释,用于修改默认的后端地址 52 | # 仅推荐您在内网环境下使用镜像自带的前端 53 | # - DOMAIN=http://youdomain 54 | ``` 55 | 56 | 将上面内容调整后放到服务器 `docker-compose.yml` 中 57 | 58 | **仅推荐您在内网环境下使用镜像自带的前端,公网下可使用下述 2 个由我构建的前端,或您自行构建** 59 | 60 | - **Vercel**: 61 | - **Cloudflare Pages**: 62 | - [关于前端的更多使用细节](https://github.com/SaintWe/Sub-Store-Workers#%E5%89%8D%E7%AB%AF) 63 | 64 | 一切准备就绪后在 `docker-compose.yml` 同目录执行 65 | 66 | ``` 67 | # 守护启动 68 | docker compose up -d 69 | 70 | # 打印日志 71 | docker compose logs 72 | 73 | # 更新镜像 74 | docker compose pull 75 | 76 | # 停止容器 77 | docker compose stop 78 | 79 | # 重启容器 80 | docker compose restart 81 | 82 | # 停止并删除容器 83 | docker compose down 84 | ``` 85 | 86 | ## 结束语 87 | 88 | - 感谢 [@dompling](https://github.com/dompling) 89 | - 感谢 [@Peng-YM](https://github.com/Peng-YM) 大佬的无私奉献将代码开源 90 | -------------------------------------------------------------------------------- /dist/avatar.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 7 | 9 | 11 | 13 | 15 | 17 | 19 | 21 | 23 | 25 | 27 | 29 | 31 | 33 | 35 | 37 | 39 | 40 | -------------------------------------------------------------------------------- /dist/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | logo 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 24 | 25 | -------------------------------------------------------------------------------- /dist/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | logo 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 24 | 25 | -------------------------------------------------------------------------------- /dist/node.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /dist/workbox-1bc7d4d5.js: -------------------------------------------------------------------------------- 1 | define(["exports"],(function(t){"use strict";try{self["workbox:core:7.0.0"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}try{self["workbox:routing:7.0.0"]&&_()}catch(t){}const n=t=>t&&"object"==typeof t?t:{handle:t};class i{constructor(t,e,s="GET"){this.handler=n(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=n(t)}}class r extends i{constructor(t,e,s){super((({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)}),e,s)}}class a{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",(t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)}))}addCacheListener(){self.addEventListener("message",(t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map((e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})})));t.waitUntil(s),t.ports&&t.ports[0]&&s.then((()=>t.ports[0].postMessage(!0)))}}))}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let a=r&&r.handler;const o=t.method;if(!a&&this.i.has(o)&&(a=this.i.get(o)),!a)return;let c;try{c=a.handle({url:s,request:t,event:e,params:i})}catch(t){c=Promise.reject(t)}const h=r&&r.catchHandler;return c instanceof Promise&&(this.o||h)&&(c=c.catch((async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n}))),c}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const a=r.match({url:t,sameOrigin:e,request:s,event:n});if(a)return i=a,(Array.isArray(i)&&0===i.length||a.constructor===Object&&0===Object.keys(a).length||"boolean"==typeof a)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,n(t))}setCatchHandler(t){this.o=n(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let o;const c=()=>(o||(o=new a,o.addFetchListener(),o.addCacheListener()),o);function h(t,e,n){let a;if("string"==typeof t){const s=new URL(t,location.href);a=new i((({url:t})=>t.href===s.href),e,n)}else if(t instanceof RegExp)a=new r(t,e,n);else if("function"==typeof t)a=new i(t,e,n);else{if(!(t instanceof i))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});a=t}return c().registerRoute(a),a}const u={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},l=t=>[u.prefix,t,u.suffix].filter((t=>t&&t.length>0)).join("-"),f=t=>t||l(u.precache),w=t=>t||l(u.runtime);function d(t){t.then((()=>{}))}const p=new Set;function y(){return y=Object.assign?Object.assign.bind():function(t){for(var e=1;ee.some((e=>t instanceof e));let m,R;const v=new WeakMap,b=new WeakMap,q=new WeakMap,D=new WeakMap,U=new WeakMap;let x={get(t,e,s){if(t instanceof IDBTransaction){if("done"===e)return b.get(t);if("objectStoreNames"===e)return t.objectStoreNames||q.get(t);if("store"===e)return s.objectStoreNames[1]?void 0:s.objectStore(s.objectStoreNames[0])}return C(t[e])},set:(t,e,s)=>(t[e]=s,!0),has:(t,e)=>t instanceof IDBTransaction&&("done"===e||"store"===e)||e in t};function L(t){return t!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(R||(R=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(t)?function(...e){return t.apply(E(this),e),C(v.get(this))}:function(...e){return C(t.apply(E(this),e))}:function(e,...s){const n=t.call(E(this),e,...s);return q.set(n,e.sort?e.sort():[e]),C(n)}}function I(t){return"function"==typeof t?L(t):(t instanceof IDBTransaction&&function(t){if(b.has(t))return;const e=new Promise(((e,s)=>{const n=()=>{t.removeEventListener("complete",i),t.removeEventListener("error",r),t.removeEventListener("abort",r)},i=()=>{e(),n()},r=()=>{s(t.error||new DOMException("AbortError","AbortError")),n()};t.addEventListener("complete",i),t.addEventListener("error",r),t.addEventListener("abort",r)}));b.set(t,e)}(t),g(t,m||(m=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction]))?new Proxy(t,x):t)}function C(t){if(t instanceof IDBRequest)return function(t){const e=new Promise(((e,s)=>{const n=()=>{t.removeEventListener("success",i),t.removeEventListener("error",r)},i=()=>{e(C(t.result)),n()},r=()=>{s(t.error),n()};t.addEventListener("success",i),t.addEventListener("error",r)}));return e.then((e=>{e instanceof IDBCursor&&v.set(e,t)})).catch((()=>{})),U.set(e,t),e}(t);if(D.has(t))return D.get(t);const e=I(t);return e!==t&&(D.set(t,e),U.set(e,t)),e}const E=t=>U.get(t);const O=["get","getKey","getAll","getAllKeys","count"],N=["put","add","delete","clear"],B=new Map;function k(t,e){if(!(t instanceof IDBDatabase)||e in t||"string"!=typeof e)return;if(B.get(e))return B.get(e);const s=e.replace(/FromIndex$/,""),n=e!==s,i=N.includes(s);if(!(s in(n?IDBIndex:IDBObjectStore).prototype)||!i&&!O.includes(s))return;const r=async function(t,...e){const r=this.transaction(t,i?"readwrite":"readonly");let a=r.store;return n&&(a=a.index(e.shift())),(await Promise.all([a[s](...e),i&&r.done]))[0]};return B.set(e,r),r}x=(t=>y({},t,{get:(e,s,n)=>k(e,s)||t.get(e,s,n),has:(e,s)=>!!k(e,s)||t.has(e,s)}))(x);try{self["workbox:expiration:7.0.0"]&&_()}catch(t){}const M="cache-entries",T=t=>{const e=new URL(t,location.href);return e.hash="",e.href};class j{constructor(t){this.h=null,this.u=t}l(t){const e=t.createObjectStore(M,{keyPath:"id"});e.createIndex("cacheName","cacheName",{unique:!1}),e.createIndex("timestamp","timestamp",{unique:!1})}p(t){this.l(t),this.u&&function(t,{blocked:e}={}){const s=indexedDB.deleteDatabase(t);e&&s.addEventListener("blocked",(t=>e(t.oldVersion,t))),C(s).then((()=>{}))}(this.u)}async setTimestamp(t,e){const s={url:t=T(t),timestamp:e,cacheName:this.u,id:this.g(t)},n=(await this.getDb()).transaction(M,"readwrite",{durability:"relaxed"});await n.store.put(s),await n.done}async getTimestamp(t){const e=await this.getDb(),s=await e.get(M,this.g(t));return null==s?void 0:s.timestamp}async expireEntries(t,e){const s=await this.getDb();let n=await s.transaction(M).store.index("timestamp").openCursor(null,"prev");const i=[];let r=0;for(;n;){const s=n.value;s.cacheName===this.u&&(t&&s.timestamp=e?i.push(n.value):r++),n=await n.continue()}const a=[];for(const t of i)await s.delete(M,t.id),a.push(t.url);return a}g(t){return this.u+"|"+T(t)}async getDb(){return this.h||(this.h=await function(t,e,{blocked:s,upgrade:n,blocking:i,terminated:r}={}){const a=indexedDB.open(t,e),o=C(a);return n&&a.addEventListener("upgradeneeded",(t=>{n(C(a.result),t.oldVersion,t.newVersion,C(a.transaction),t)})),s&&a.addEventListener("blocked",(t=>s(t.oldVersion,t.newVersion,t))),o.then((t=>{r&&t.addEventListener("close",(()=>r())),i&&t.addEventListener("versionchange",(t=>i(t.oldVersion,t.newVersion,t)))})).catch((()=>{})),o}("workbox-expiration",1,{upgrade:this.p.bind(this)})),this.h}}class P{constructor(t,e={}){this.m=!1,this.R=!1,this.v=e.maxEntries,this.q=e.maxAgeSeconds,this.D=e.matchOptions,this.u=t,this.U=new j(t)}async expireEntries(){if(this.m)return void(this.R=!0);this.m=!0;const t=this.q?Date.now()-1e3*this.q:0,e=await this.U.expireEntries(t,this.v),s=await self.caches.open(this.u);for(const t of e)await s.delete(t,this.D);this.m=!1,this.R&&(this.R=!1,d(this.expireEntries()))}async updateTimestamp(t){await this.U.setTimestamp(t,Date.now())}async isURLExpired(t){if(this.q){const e=await this.U.getTimestamp(t),s=Date.now()-1e3*this.q;return void 0===e||et.headers.get(e)===this.L[e]))),e}}function S(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class K{constructor(){this.promise=new Promise(((t,e)=>{this.resolve=t,this.reject=e}))}}try{self["workbox:strategies:7.0.0"]&&_()}catch(t){}function A(t){return"string"==typeof t?new Request(t):t}class F{constructor(t,e){this.I={},Object.assign(this,e),this.event=e.event,this.C=t,this.O=new K,this.N=[],this.B=[...t.plugins],this.k=new Map;for(const t of this.B)this.k.set(t,{});this.event.waitUntil(this.O.promise)}async fetch(t){const{event:e}=this;let n=A(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.C.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=A(t);let s;const{cacheName:n,matchOptions:i}=this.C,r=await this.getCacheKey(e,"read"),a=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,a);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=A(t);var i;await(i=0,new Promise((t=>setTimeout(t,i))));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(a=r.url,new URL(String(a),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var a;const o=await this.M(e);if(!o)return!1;const{cacheName:c,matchOptions:h}=this.C,u=await self.caches.open(c),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=S(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),a=await t.keys(e,r);for(const e of a)if(i===S(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?o.clone():o)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of p)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:c,oldResponse:f,newResponse:o.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.I[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=A(await t({mode:e,request:n,event:this.event,params:this.params}));this.I[s]=n}return this.I[s]}hasCallback(t){for(const e of this.C.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.C.plugins)if("function"==typeof e[t]){const s=this.k.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.N.push(t),t}async doneWaiting(){let t;for(;t=this.N.shift();)await t}destroy(){this.O.resolve(null)}async M(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class H{constructor(t={}){this.cacheName=w(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new F(this,{event:e,request:s,params:n}),r=this.T(i,s,e);return[r,this.j(r,i,s,e)]}async T(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this.P(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async j(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}function $(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:7.0.0"]&&_()}catch(t){}function G(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class V{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class J{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.W.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.W=t}}let Q,z;async function X(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},a=e?e(r):r,o=function(){if(void 0===Q){const t=new Response("");if("body"in t)try{new Response(t.body),Q=!0}catch(t){Q=!1}Q=!1}return Q}()?i.body:await i.blob();return new Response(o,a)}class Y extends H{constructor(t={}){t.cacheName=f(t.cacheName),super(t),this.S=!1!==t.fallbackToNetwork,this.plugins.push(Y.copyRedirectedCacheableResponsesPlugin)}async P(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.K(t,e):await this.A(t,e))}async A(t,e){let n;const i=e.params||{};if(!this.S)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,a=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&a&&"no-cors"!==t.mode&&(this.F(),await e.cachePut(t,n.clone()))}return n}async K(t,e){this.F();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}F(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==Y.copyRedirectedCacheableResponsesPlugin&&(n===Y.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(Y.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}Y.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},Y.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await X(t):t};class Z{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.H=new Map,this.$=new Map,this.G=new Map,this.C=new Y({cacheName:f(t),plugins:[...e,new J({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.C}precache(t){this.addToCacheList(t),this.V||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.V=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=G(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.H.has(i)&&this.H.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.H.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.G.has(t)&&this.G.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.G.set(t,n.integrity)}if(this.H.set(i,t),this.$.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return $(t,(async()=>{const e=new V;this.strategy.plugins.push(e);for(const[e,s]of this.H){const n=this.G.get(s),i=this.$.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}}))}activate(t){return $(t,(async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.H.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}}))}getURLsToCacheKeys(){return this.H}getCachedURLs(){return[...this.H.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.H.get(e.href)}getIntegrityForCacheKey(t){return this.G.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}const tt=()=>(z||(z=new Z),z);class et extends i{constructor(t,e){super((({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const a=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some((t=>t.test(s)))&&t.searchParams.delete(s);return t}(r,e);if(yield a.href,s&&a.pathname.endsWith("/")){const t=new URL(a.href);t.pathname+=s,yield t.href}if(n){const t=new URL(a.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}}),t.strategy)}}t.CacheFirst=class extends H{async P(t,e){let n,i=await e.cacheMatch(t);if(!i)try{i=await e.fetchAndCachePut(t)}catch(t){t instanceof Error&&(n=t)}if(!i)throw new s("no-response",{url:t.url,error:n});return i}},t.CacheableResponsePlugin=class{constructor(t){this.cacheWillUpdate=async({response:t})=>this.J.isResponseCacheable(t)?t:null,this.J=new W(t)}},t.ExpirationPlugin=class{constructor(t={}){this.cachedResponseWillBeUsed=async({event:t,request:e,cacheName:s,cachedResponse:n})=>{if(!n)return null;const i=this.X(n),r=this.Y(s);d(r.expireEntries());const a=r.updateTimestamp(e.url);if(t)try{t.waitUntil(a)}catch(t){}return i?n:null},this.cacheDidUpdate=async({cacheName:t,request:e})=>{const s=this.Y(t);await s.updateTimestamp(e.url),await s.expireEntries()},this.Z=t,this.q=t.maxAgeSeconds,this.tt=new Map,t.purgeOnQuotaError&&function(t){p.add(t)}((()=>this.deleteCacheAndMetadata()))}Y(t){if(t===w())throw new s("expire-custom-caches-only");let e=this.tt.get(t);return e||(e=new P(t,this.Z),this.tt.set(t,e)),e}X(t){if(!this.q)return!0;const e=this.et(t);if(null===e)return!0;return e>=Date.now()-1e3*this.q}et(t){if(!t.headers.has("date"))return null;const e=t.headers.get("date"),s=new Date(e).getTime();return isNaN(s)?null:s}async deleteCacheAndMetadata(){for(const[t,e]of this.tt)await self.caches.delete(t),await e.delete();this.tt=new Map}},t.NavigationRoute=class extends i{constructor(t,{allowlist:e=[/./],denylist:s=[]}={}){super((t=>this.st(t)),t),this.nt=e,this.it=s}st({url:t,request:e}){if(e&&"navigate"!==e.mode)return!1;const s=t.pathname+t.search;for(const t of this.it)if(t.test(s))return!1;return!!this.nt.some((t=>t.test(s)))}},t.cleanupOutdatedCaches=function(){self.addEventListener("activate",(t=>{const e=f();t.waitUntil((async(t,e="-precache-")=>{const s=(await self.caches.keys()).filter((s=>s.includes(e)&&s.includes(self.registration.scope)&&s!==t));return await Promise.all(s.map((t=>self.caches.delete(t)))),s})(e).then((t=>{})))}))},t.clientsClaim=function(){self.addEventListener("activate",(()=>self.clients.claim()))},t.createHandlerBoundToURL=function(t){return tt().createHandlerBoundToURL(t)},t.precacheAndRoute=function(t,e){!function(t){tt().precache(t)}(t),function(t){const e=tt();h(new et(e,t))}(e)},t.registerRoute=h})); 2 | -------------------------------------------------------------------------------- /dist/main.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";@font-face{font-family:My Roboto;font-style:normal;font-weight:400;src:url(/roboto-light.eot);src:url(/roboto-light.eot?#iefix) format("embedded-opentype"),url(/roboto-light.woff) format("woff")}@font-face{font-family:My Roboto;font-style:normal;font-weight:700;src:url(/roboto-bold.eot);src:url(/roboto-bold.eot?#iefix) format("embedded-opentype"),url(/roboto-bold.woff) format("woff")}@font-face{font-family:JB;src:url(/jetbrainsmononl-regular.eot);src:url(/jetbrainsmononl-regular.eot?#iefix) format("embedded-opentype"),url(/jetbrainsmononl-regular.woff) format("woff")}@font-face{font-family:nutui-iconfont;src:url(/3x_static_iconfont.ttf) format("woff2"),url(/3x_static_iconfont.woff) format("woff"),url(/3x_static_iconfont.ttf) format("truetype")}.nutui-iconfont{font-family:nutui-iconfont!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{outline:none;-webkit-tap-highlight-color:transparent;min-height:100%!important}a{color:inherit;text-decoration:none}textarea,input,button{font-family:inherit;color:inherit}ul,ol{list-style:none;padding-inline-start:0}table{border-collapse:collapse;border-spacing:0}img{pointer-events:none}.nut-collapse-item .collapse-item.collapse-item{background-color:var(--card-color)}.nut-collapse-item .collapse-item.collapse-item:after{border-color:var(--divider-color)}.nut-collapse-item .collapse-wrapper{background-color:var(--card-color)}.tab-panel-wrapper{position:fixed;top:50%;left:50%;transform:translate(-50%) translateY(-50%);z-index:1100;max-height:72vh;max-width:80vw;width:80vw;border-radius:8px;overflow:hidden;padding-bottom:24px}.nut-button{margin-right:10px}.sticky-title-wrapperse{position:sticky;display:block;z-index:1;top:0;font-size:16px;font-weight:700;line-height:2}.nut-icon-issue:before{content:"\e6b1"}.nut-icon-ask:before{content:"\e670"}.nut-icon-setting:before{content:"\e681"}.nut-icon-left:before{content:"\e6c9"}.nut-icon-rect-left:before{content:"\e6c9"}.nut-icon-right:before{content:"\e6cb";color:#666}.nut-icon-rect-right:before{content:"\e6cb";color:var(--lowest-text-color)}.nut-icon-arrow-right2:before{content:"\e6a9"}.nut-icon-arrow-right:before{content:"\e6a3"}.nut-icon-link:before{content:"\e67c"}.nut-icon-refresh2:before{content:"\e682"}.nut-icon-refresh:before{content:"\e690"}.nut-icon-close-little:before{content:"\e6aa"}.nut-icon-close:before{content:"\e674"}.nut-icon-mask-close:before{content:"\e6cd"}.nut-icon-circle-close:before{content:"\e699"}.nut-icon-checked:before{content:"\e601"}.nut-icon-checklist:before{content:"\e6c8"}.nut-icon-check-disabled:before{content:"\e6c7"}.nut-icon-check-normal:before{content:"\e6c5"}.nut-icon-check-checked:before{content:"\e6c6"}.nut-icon-loading:before{content:"\e6c4"}.nut-icon-loading1:before{content:"\e614"}.nut-icon{display:inline-block;position:relative;width:20px;height:20px;line-height:20px;text-align:right;--animate-duration: 1s;--animate-delay: 0s}.nut-icon:before{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.nut-icon__img{width:20px;height:20px;object-fit:contain}.nut-icon-loading,.nut-icon-loading1{display:inline-block;animation:rotation 1s infinite linear}.nut-icon-am-infinite{-webkit-animation-iteration-count:infinite;-webkit-animation-direction:alternate;animation-iteration-count:infinite;animation-direction:alternate}.nut-icon-am-jump{-webkit-animation-name:nutJumpOne;-webkit-animation-duration:var(--animate-duration);-webkit-animation-timing-function:ease;-webkit-animation-delay:var(--animate-delay);animation-name:nutJumpOne;animation-duration:var(--animate-duration);animation-timing-function:ease;animation-delay:var(--animate-delay)}.nut-icon-am-jump.nut-icon-am-infinite{-webkit-animation-name:nutJump;animation-name:nutJump}.nut-icon-am-rotate{-webkit-animation-name:rotation;-webkit-animation-duration:var(--animate-duration);-webkit-animation-timing-function:linear;-webkit-animation-delay:var(--animate-delay);animation-name:rotation;animation-duration:var(--animate-duration);animation-timing-function:linear;animation-delay:var(--animate-delay)}.nut-icon-am-rotate.nut-icon-am-infinite{-webkit-animation-direction:normal;animation-direction:normal}.nut-icon-am-blink{-webkit-animation-name:nutBlink;-webkit-animation-duration:var(--animate-duration);-webkit-animation-timing-function:ease-in-out;-webkit-animation-delay:var(--animate-delay);animation-name:nutBlink;animation-duration:var(--animate-duration);animation-timing-function:linear;animation-delay:var(--animate-delay)}.nut-icon-am-breathe{-webkit-animation-name:nutBreathe;-webkit-animation-duration:var(--animate-duration);-webkit-animation-timing-function:ease-in-out;-webkit-animation-delay:var(--animate-delay);animation-name:nutBreathe;animation-duration:var(--animate-duration);animation-timing-function:ease-in-out;animation-delay:var(--animate-delay)}.nut-icon-am-flash{-webkit-animation-name:nutFlash;-webkit-animation-duration:var(--animate-duration);-webkit-animation-timing-function:ease-in-out;-webkit-animation-delay:var(--animate-delay);animation-name:nutFlash;animation-duration:var(--animate-duration);animation-timing-function:ease-in-out;animation-delay:var(--animate-delay)}.nut-icon-am-bounce{-webkit-animation-name:nutBounce;-webkit-animation-duration:var(--animate-duration);-webkit-animation-timing-function:ease-in-out;-webkit-animation-delay:var(--animate-delay);animation-name:nutBounce;animation-duration:var(--animate-duration);animation-timing-function:ease-in-out;animation-delay:var(--animate-delay)}.nut-icon-am-bounce.nut-icon-am-infinite{-webkit-animation-direction:normal;animation-direction:normal}.nut-icon-am-shake{-webkit-animation-name:nutShake;-webkit-animation-duration:var(--animate-duration);-webkit-animation-timing-function:ease-in-out;-webkit-animation-delay:var(--animate-delay);animation-name:nutShake;animation-duration:var(--animate-duration);animation-timing-function:ease-in-out;animation-delay:var(--animate-delay)}.nut-switch{background:var(--switch-active-background-color)}.tab-panel-wrapper{background-color:var(--popup-color);color:var(--primary-text-color)}.tab-panel-wrapper .auto-tab-panel .nut-tabs__titles{border-bottom:1px solid var(--divider-color)}.tab-panel-wrapper .auto-tab-panel .nut-tabpane{background-color:inherit;color:inherit}.sticky-title-wrapper{margin-top:var(--safe-area-side);color:var(--comment-text-color)}.nut-popup{user-select:none}@media screen and (min-width: 560px){.nut-popup .nut-picker-roller{transition:transform .3s 0s!important}}.nut-popup .nut-cascader__bar{color:var(--primary-text-color);background-color:var(--popup-color)}.nut-popup .nut-cascader.nut-tabs{background-color:var(--popup-color)}.nut-popup .nut-cascader.nut-tabs .nut-tabs__titles,.nut-popup .nut-cascader.nut-tabs .nut-tabs__content{background:var(--popup-color)}.nut-popup .nut-cascader.nut-tabs .nut-tabs__content .nut-tabpane{background-color:var(--popup-color);margin-bottom:60px}.nut-popup .nut-picker__bar,.nut-popup .nut-picker__column{background-color:var(--popup-color)}.nut-popup .nut-picker__column{cursor:grab}.nut-popup .nut-picker-roller-mask{background-image:linear-gradient(180deg,var(--picker-mask-far-color),var(--picker-mask-near-color)),linear-gradient(0deg,var(--picker-mask-far-color),var(--picker-mask-near-color))}img.auto-reverse{filter:brightness(var(--img-brightness))}.auto-dialog{background-color:var(--dialog-color)!important}.auto-dialog>.nut-dialog>.nut-dialog__content{max-height:unset}.auto-dialog>.nut-dialog>.nut-dialog__header{color:var(--primary-text-color);font-weight:700}.nut-cascader__popup .nut-form-item,.nut-cascader__popup .nut-textarea,.nut-cascader-pane .nut-form-item,.nut-cascader-pane .nut-textarea,.nut-cell-group__warp .nut-form-item,.nut-cell-group__warp .nut-textarea{background:var(--card-color)}.nut-cascader__popup .nut-form-item .nut-form-item__label,.nut-cascader__popup .nut-textarea .nut-form-item__label,.nut-cascader-pane .nut-form-item .nut-form-item__label,.nut-cascader-pane .nut-textarea .nut-form-item__label,.nut-cell-group__warp .nut-form-item .nut-form-item__label,.nut-cell-group__warp .nut-textarea .nut-form-item__label{color:var(--comment-text-color)}.nut-cascader__popup .nut-form-item:after,.nut-cascader__popup .nut-textarea:after,.nut-cascader-pane .nut-form-item:after,.nut-cascader-pane .nut-textarea:after,.nut-cell-group__warp .nut-form-item:after,.nut-cell-group__warp .nut-textarea:after{border-color:var(--divider-color)}.input-text,.nut-input-readonly,.nut-input,.nut-input-text{color:var(--second-text-color)!important}:-moz-placeholder{color:var(--comment-text-color)}::-moz-placeholder{color:var(--comment-text-color)}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--comment-text-color)}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:var(--comment-text-color)!important}html{-webkit-tap-highlight-color:transparent}.nut-theme-dark .nut-actionsheet-panel .nut-actionsheet-cancel{border-top:1px solid #1b1b1b}.nut-theme-dark .nut-actionsheet-panel .nut-actionsheet-title{border-bottom:1px solid #1b1b1b}.nut-theme-dark .nut-actionsheet-panel .nut-actionsheet-cancel,.nut-theme-dark .nut-actionsheet-panel .nut-actionsheet-item,.nut-theme-dark .nut-actionsheet-panel .nut-actionsheet-title{background:#131313;color:#fff}.nut-actionsheet-panel{display:block}.nut-actionsheet-panel .nut-actionsheet-title{display:block;padding:10px;margin:0;text-align:center;background-color:#fff;border-bottom:1px solid #f6f6f6;font-size:14px;color:var(--primary-text-color)}.nut-actionsheet-panel .nut-actionsheet-modal .nut-actionsheet-title,.nut-actionsheet-panel .nut-actionsheet-modal .nut-actionsheet-sub-title{padding:5px 0}.nut-actionsheet-panel .nut-actionsheet-modal .nut-actionsheet-sub-title{display:block;font-size:12px;color:var(--primary-text-color);margin-inline-start:0px}.nut-actionsheet-panel .nut-actionsheet-menu{display:block;list-style:none;padding:0;margin:0}.nut-actionsheet-panel .nut-actionsheet-cancel,.nut-actionsheet-panel .nut-actionsheet-item{display:block;padding:11px;line-height:28px;font-weight:700;font-size:18px;color:#000000a6;text-align:center;background-color:#fff;border-bottom:1px solid rgba(0,0,0,.1);cursor:pointer}.nut-actionsheet-panel .desc{font-weight:400;font-size:16px;color:#00000073;cursor:default}.nut-actionsheet-panel .subdesc{display:block;line-height:18px;font-weight:400;font-size:12px;color:#00000073}.nut-actionsheet-panel .nut-actionsheet-item-disabled{color:#00000040!important;cursor:not-allowed}.nut-actionsheet-panel .nut-actionsheet-item-loading{cursor:default}.nut-actionsheet-panel .nut-actionsheet-cancel{margin-top:5px;border-top:none}.nut-avatar{background-size:100% 100%;background-repeat:no-repeat;background-position:center center;display:inline-block;position:relative;flex:0 0 auto;text-align:center}.nut-avatar img{width:100%;height:100%}.nut-avatar .icon{background-size:100% 100%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.nut-avatar .nut-icon__img{width:100%;height:100%}.nut-avatar .text{display:inline-block;width:100%;height:100%;text-align:center;overflow:hidden}.nut-avatar-large{width:60px;height:60px;line-height:60px}.nut-avatar-small{width:32px;height:32px;line-height:32px}.nut-avatar-normal{width:40px;height:40px;line-height:40px}.nut-avatar-round{border-radius:50%;overflow:hidden}.nut-avatar-square{border-radius:5px}.nut-theme-dark .nut-badge.show{background:#131313;color:#fff}.nut-badge{position:relative;display:inline-block}.nut-badge .slot-icons{position:absolute;background:linear-gradient(135deg,var(--primary-color) 0%,var(--primary-color-end) 100%);top:-20%;right:-20%;padding:0 5px;text-align:center;border-radius:14px;z-index:1}.nut-badge .sup{position:absolute;background:linear-gradient(135deg,var(--primary-color) 0%,var(--primary-color-end) 100%);padding:0 5px;text-align:center;line-height:16px;border:none;border-radius:14px;font-size:10px;font-weight:400;color:#fff}.nut-badge .nut-badge__content{transform:translateY(-50%) translate(100%)}.nut-badge .is-dot{width:7px;height:7px;border-radius:7px;padding:0}.nut-badge .is-bubble{border-bottom-left-radius:0}.nut-button{position:relative;display:inline-block;width:auto;flex-shrink:0;height:44px;box-sizing:border-box;margin:0;padding:0;line-height:36px;font-size:16px;text-align:center;cursor:pointer;transition:opacity .2s;appearance:none;user-select:none;touch-action:manipulation;vertical-align:bottom;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-tap-highlight-color:transparent}.nut-button .text{margin-left:5px}.nut-button:before{position:absolute;top:50%;left:50%;width:100%;height:100%;background-color:#000;border:inherit;border-color:#000;border-radius:inherit;transform:translate(-50%,-50%);opacity:0;content:" "}.nut-button:after{border:none}.nut-button:active:before{opacity:.1}.nut-button__warp{height:100%;width:100%;display:flex;align-items:center;justify-content:center}.nut-button--loading:before,.nut-button--disabled:before{display:none}.nut-button--default{color:var(--second-text-color);background:#fff;border:1px solid var(--lowest-text-color)}.nut-button--primary{color:#fff;background:linear-gradient(135deg,var(--primary-color) 0%,var(--primary-color-end) 100%);border:1px solid transparent}.nut-button--info{color:#fff;background:linear-gradient(315deg,rgb(73,143,242) 0%,rgb(73,101,242) 100%);border:1px solid transparent}.nut-button--success{color:#fff;background:#0ed57d;border:1px solid transparent}.nut-button--danger{color:#fff;background:#f52f3e;border:1px solid transparent}.nut-button--warning{color:#fff;background:#ff9c00;border:1px solid transparent}.nut-button--plain{background:transparent}.nut-button--plain.nut-button--primary{color:var(--primary-color);border-color:var(--primary-color)}.nut-button--plain.nut-button--info{color:#496af2;border-color:#496af2}.nut-button--plain.nut-button--success{color:#0ed57d;border-color:#0ed57d}.nut-button--plain.nut-button--danger{color:#f52f3e;border-color:#f52f3e}.nut-button--plain.nut-button--warning{color:#ff9c00;border-color:#ff9c00}.nut-button--large{width:100%;height:48px;line-height:46px;font-size:16px}.nut-button--normal{padding:0 22px;font-size:16px}.nut-button--small{height:32px;line-height:26px;padding:0 16px;font-size:14px}.nut-button--small.nut-button--round{border-radius:25px}.nut-button--mini{height:24px;line-height:1.2;padding:0 12px;font-size:12px}.nut-button--block{display:block;width:100%}.nut-button--disabled{cursor:not-allowed;opacity:.68}.nut-button--loading{cursor:default;opacity:.9}.nut-button--round{border-radius:25px}.nut-button--square{border-radius:0}.nut-theme-dark .nut-cascader__bar{background:#1b1b1b;color:#fff}.nut-theme-dark .nut-tabs__titles{background:#141414!important}.nut-theme-dark .nut-cascader-item{color:var(--comment-text-color)}.nut-cascader{width:100%;font-size:14px;line-height:22px}.nut-cascader .nut-tabpane{padding:0}.nut-cascader .nut-tabs__titles-item{flex:initial;min-width:auto;padding:0 10px;white-space:nowrap}.nut-cascader .nut-tabs__titles{padding:0 10px;background:#fff}.nut-cascader__bar{display:flex;justify-content:center;align-items:center;padding:24px 20px 17px;text-align:center;font-weight:700;line-height:20px;color:var(--primary-text-color);font-size:18px}.nut-cascader-pane{display:block;padding:10px 0 0;margin:0;width:100%;height:342px;overflow-y:auto;-webkit-overflow-scrolling:touch}.nut-cascader-item{display:flex;align-items:center;padding:14px 20px;margin:0;cursor:pointer;font-size:14px;color:var(--primary-text-color)}.nut-cascader-item__title{flex:1}.nut-cascader-item__icon-check{margin-left:10px;visibility:hidden}.nut-cascader-item__icon-loading{margin-left:10px}.nut-cascader-item.active:not(.disabled){color:var(--primary-color)}.nut-cascader-item.active .nut-cascader-item__icon-check{visibility:visible;color:var(--primary-color)}.nut-cascader-item.disabled{opacity:.6;cursor:not-allowed}.nut-theme-dark .nut-cell{background:#1b1b1b;color:#fff;box-shadow:none}.nut-cell{position:relative;display:flex;width:100%;line-height:22px;padding:14px 16px;background:var(--card-color);border-radius:var(--item-card-radios);box-shadow:0 1px 7px #edeef1;font-size:14px;color:var(--second-text-color);margin:10px 0;box-sizing:border-box}.nut-cell--center{align-items:center}.nut-cell--large{font-size:16px;padding:16px;line-height:24px}.nut-cell--large .nut-cell__title-desc{font-size:12px;line-height:18px}.nut-cell--large .nut-cell__icon{margin:0 8px 0 0}.nut-cell--large .nut-cell__icon .nut-icon{width:24px;height:24px;line-height:24px}.nut-cell--large .nut-cell__icon .nutui-iconfont{font-size:24px}.nut-cell--large .nut-cell__link.nut-icon{height:24px;line-height:24px}.nut-cell:last-child:after{border:0!important}.nut-cell:after{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;right:0;bottom:0;left:16px;transform:scaleY(.5)}.nut-cell:active:before{opacity:.1}.nut-cell--clickable{cursor:pointer}.nut-cell--clickable:before{position:absolute;top:50%;left:50%;width:100%;height:100%;background-color:#000;border:inherit;border-color:#000;border-radius:inherit;transform:translate(-50%,-50%);opacity:0;content:" "}.nut-cell__icon{display:flex;flex-direction:row;margin:0 4px 0 0}.nut-cell__icon .nut-icon{width:22px;height:22px;line-height:22px}.nut-cell__icon .nutui-iconfont{font-size:22px}.nut-cell__title{display:flex;flex-direction:column;flex:1}.nut-cell__title-desc{line-height:18px;font-size:12px;color:#00000073}.nut-cell__value{display:inline-block;text-align:right;flex:1;font-size:14px;color:#00000040}.nut-cell__value--alone{color:var(--second-text-color)}.nut-cell__link.nut-icon{color:#00000073;margin:0 0 0 4px;width:initial;min-width:1em;height:22px;line-height:22px;font-size:16px}.nut-cell-group{display:block}.nut-cell-group__title{display:inherit;padding:18px 16px 8px;color:var(--comment-text-color);font-size:16px;font-weight:600;line-height:24px;margin:0}.nut-cell-group__desc{display:inherit;padding:0 16px;color:var(--lowest-text-color);font-size:12px;line-height:16px;margin:2px 0 0}.nut-cell-group__warp{display:inherit;border-radius:var(--item-card-radios);overflow:hidden;background-color:var(--card-color);margin:10px 0}.nut-cell-group__warp .nut-cell{margin:0;box-shadow:none;border-radius:0}.nut-cell-group .nut-cell:after{border-bottom:2px solid var(--divider-color)}.nut-theme-dark .nut-checkbox__label{color:#fff}.nut-theme-dark .nut-checkbox__label--disabled{color:var(--lowest-text-color)}.nut-theme-dark .nut-checkbox__button{background:#131313;color:#fff}.nut-theme-dark .nut-checkbox__button--disabled{color:var(--lowest-text-color);border:1px solid var(--lowest-text-color)}.nut-checkbox{display:flex;align-items:center}.nut-checkbox--reverse{flex-direction:row-reverse}.nut-checkbox--reverse .nut-checkbox__label{margin-right:8px;margin-left:0}.nut-checkbox__button{display:inline-flex;align-items:center;padding:5px 18px;font-size:12px;background:#f6f7f9;border-radius:15px;color:var(--second-text-color);box-sizing:border-box;border:1px solid #f6f7f9}.nut-checkbox__button--active{background:rgba(var(--primary-color),.05);color:var(--primary-color);border:1px solid var(--primary-color)}.nut-checkbox__button--disabled{color:var(--lowest-text-color);border:none}.nut-checkbox__label{flex:1;margin-left:8px;font-size:16px;color:var(--second-text-color)}.nut-checkbox__label--disabled{color:var(--lowest-text-color)}.nut-checkbox__icon{color:var(--primary-color);font-size:20px;transition-duration:.3s;transition-property:color,border-color,background-color}.nut-checkbox__icon--unchecked{color:var(--lowest-text-color);font-size:20px}.nut-checkbox__icon--indeterminate{color:var(--primary-color);font-size:20px}.nut-checkbox__icon--disable{color:#f5f5f5;font-size:20px}.nut-theme-dark .nut-collapse-item .collapse-item{background:#131313;color:#fff;box-shadow:none}.nut-theme-dark .nut-collapse-item .collapse-wrapper .collapse-content,.nut-theme-dark .nut-collapse-item .collapse-wrapper .collapse-extraRender{background:#131313;color:#fff}.nut-theme-dark .nut-collapse-item .collapse-extraWrapper .collapse-extraRender{background:#131313}.nut-collapse-item{position:relative}.nut-collapse-item .collapse-item:after{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;right:16px;bottom:0;left:16px;border-bottom:1px solid #ebedf0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.nut-collapse-item .collapse-item .collapse-title-value{display:inline-block}.nut-collapse-item .collapse-item .collapse-title-value .collapse-title-icon{top:2px}.nut-collapse-item .collapse-item{position:relative;display:block;width:100%;overflow:hidden;padding:14px 16px;color:var(--second-text-color);font-size:14px;line-height:24px;background-color:#fff;box-sizing:border-box}.nut-collapse-item .collapse-item .collapse-icon{display:block;position:absolute;top:50%;right:16px;color:var(--comment-text-color);transition:transform .3s}.nut-collapse-item .collapse-item .col-expanded{transform:rotate(-180deg)}.nut-collapse-item .collapse-item .subTitle{position:absolute;top:50%;right:42px;margin-top:-12px;color:var(--comment-text-color)}.nut-collapse-item .collapse-item .titleIconRight{vertical-align:middle;margin:0 0 0 10px}.nut-collapse-item .collapse-item .titleIconLeft{vertical-align:middle;margin:0 10px 0 0}.nut-collapse-item .collapse-wrapper,.nut-collapse-item .collapse-extraWrapper{display:block;position:relative;height:0;overflow:hidden;transition:height .3s ease-in-out}.nut-collapse-item .collapse-wrapper .collapse-content,.nut-collapse-item .collapse-wrapper .collapse-extraRender,.nut-collapse-item .collapse-extraWrapper .collapse-content,.nut-collapse-item .collapse-extraWrapper .collapse-extraRender{display:block;padding:12px 16px;color:var(--comment-text-color);font-size:14px;line-height:2;background-color:var(--card-color)}.nut-collapse-item .collapse-wrapper .empty,.nut-collapse-item .collapse-extraWrapper .empty{padding:0 16px}.nut-collapse-item .collapse-extraWrapper{height:auto}.nut-collapse-item .collapse-extraWrapper .collapse-extraRender{word-wrap:break-word;word-break:break-all;overflow:hidden}.nut-collapse-item .open-style{will-change:height;height:auto}.nut-collapse-item .close-style{will-change:auto}.nut-collapse-item .nut-collapse-item-disabled{color:var(--lowest-text-color);cursor:not-allowed;pointer-events:none}.nut-collapse-item .nut-collapse-item-disabled .collapse-icon{color:var(--lowest-text-color)}.nut-collapse-item .titleIconLeft{float:left}.nut-collapse-item .titleIconLeft .collapse-item{padding:10px 16px 10px 50px}.nut-collapse-item .titleIconLeft .collapse-item .collapse-icon{left:20px}.nut-collapse-item .titleIconLeft .collapse-item .subTitle{right:16px}.nut-collapse-item .titleIconRight{float:right}.nut-collapse-item .collapse-icon-title{display:inline-block}.nut-dialog{display:flex;flex-direction:column;align-items:center;width:296px;min-height:156px;padding:28px 24px 16px;box-sizing:border-box}.nut-dialog__header{display:block;text-align:center;height:20px;font-size:16px;color:#262626;font-weight:400;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nut-dialog__content{width:100%;overflow:auto;flex:1;margin:20px 0;max-height:268px;line-height:16px;font-size:12px;color:var(--comment-text-color);word-wrap:break-word;word-break:break-all;white-space:pre-wrap}.nut-dialog__footer{display:flex;align-items:center;width:100%;justify-content:space-around}.nut-dialog__footer.vertical{flex-direction:column}.nut-dialog__footer.vertical .nut-button{min-width:100%;margin:0}.nut-dialog__footer.vertical .nut-button.nut-dialog__footer-cancel{border:0}.nut-dialog__footer.vertical .nut-button.nut-dialog__footer-ok{margin-top:10px}.nut-dialog__footer .nut-button{min-width:100px;overflow:hidden}.nut-dialog__footer-cancel{margin-right:20px}.nut-dialog__footer-ok{max-width:128px}.nut-divider{display:flex;align-items:center;font-size:16px;color:#000000d9;margin:16px 0}.nut-divider:before,.nut-divider:after{content:"";border:1px solid rgba(0,0,0,.1);border-width:1px 0 0;height:1px;flex:1}.nut-divider.nut-divider-center:before,.nut-divider.nut-divider-left:before,.nut-divider.nut-divider-right:before{margin-right:10px}.nut-divider.nut-divider-center:after,.nut-divider.nut-divider-left:after,.nut-divider.nut-divider-right:after{margin-left:10px}.nut-divider.nut-divider-left:before{max-width:10%}.nut-divider.nut-divider-right:after{max-width:10%}.nut-divider.nut-divider-dashed:before,.nut-divider.nut-divider-dashed:after{border-style:dashed}.nut-divider.nut-divider-hairline:before,.nut-divider.nut-divider-hairline:after{transform:scaleY(.5)}.nut-divider.nut-divider-vertical{position:relative;top:2px;display:inline-block;height:12px;border-left:1px solid rgba(0,0,0,.06);margin:0 8px}.nut-drag{position:fixed;display:inline-block;z-index:9997!important;width:fit-content;height:fit-content}.nut-drag .nut-fixednav{position:relative!important}.nut-taro-drag{display:inline-block;z-index:9997!important;width:fit-content;height:fit-content}.nut-ellipsis{display:flex}.nut-ellipsis .nut-ellipsis-text{cursor:hand;color:#3460fa;display:inline}.nut-ellipsis .nut-ellipsis-wordbreak{word-break:break-all}.nut-ellipsis-copy{position:absolute;top:-999999px}.nut-theme-dark .nut-empty{background:#131313}.nut-empty{box-sizing:border-box;display:flex;align-items:center;flex-direction:column;justify-content:center;padding:32px 0}.nut-empty-image{width:170px;height:170px}.nut-empty-image .img{width:100%;height:100%}.nut-empty-image img,.nut-empty-image image{width:100%;height:100%}.nut-empty-description{margin-top:4px;padding:0 40px;color:#666;font-size:14px;line-height:20px}.nut-fixednav{position:fixed;z-index:201;display:inline-block;height:50px;right:0}.nut-fixednav.active .nut-icon{transform:rotate(180deg)}.nut-fixednav.active .nut-fixednav__list{transform:translate(0)!important}.nut-fixednav.active.left .nut-icon{transform:rotate(0)!important}.nut-fixednav__btn{box-sizing:border-box;position:absolute;right:0;z-index:202;width:80px;padding-left:12px;height:100%;background:linear-gradient(135deg,var(--primary-color) 0%,var(--primary-color-end) 100%);border-radius:45px 0 0 45px;box-shadow:0 2px 4px #0003;display:flex;align-items:center;justify-content:center}.nut-fixednav__btn>.text{width:24px;line-height:13px;font-size:10px;color:#fff;flex-shrink:0}.nut-fixednav__btn .nut-icon{margin-right:5px;transform:rotate(0);transition:all .3s}.nut-fixednav__list{position:absolute;right:0;transform:translate(100%);transition:all .5s;box-sizing:border-box;margin:0;z-index:201;flex-shrink:0;height:100%;background:#fff;display:flex;justify-content:space-between;border-radius:25px 0 0 25px;box-shadow:2px 2px 8px #0003;padding:0 80px 0 20px}.nut-fixednav__list-item{box-sizing:border-box;padding:0;margin:0;position:relative;flex:1;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;min-width:50px;flex-shrink:0}.nut-fixednav__list-item.active>.span{color:var(--primary-color)}.nut-fixednav__list-item>img{width:20px;height:20px;margin-bottom:2px}.nut-fixednav__list-item>.span{font-size:10px;color:#000}.nut-fixednav__list-item>.b{position:absolute;right:0;top:1px;height:14px;line-height:14px;font-size:10px;padding:0 3px;color:#fff;background:var(--primary-color);border-radius:7px;text-align:center;min-width:12px}.nut-fixednav.left{right:auto;left:0}.nut-fixednav.left .nut-fixednav__btn{flex-direction:row-reverse;right:auto;left:0;border-radius:0 45px 45px 0}.nut-fixednav.left .nut-fixednav__btn .nut-icon{transform:rotate(180deg)}.nut-fixednav.left .nut-fixednav__list{transform:translate(-100%);right:auto;border-radius:0 25px 25px 0;padding-left:80px;padding-right:20px}.nut-theme-dark .nut-form-item__body__slots .nut-input-text{color:#fff}.nut-form-item{display:flex}.nut-form-item:before{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;right:16px;bottom:0;left:16px;transform:scaleX(0)}.nut-form-item.error.line:before{border-bottom:1px solid #fa2c19;transform:scaleX(1);transition:transform .2s cubic-bezier(0,0,.2,1) 0ms}.nut-form-item__label{font-size:14px;font-weight:400;width:90px;margin-right:10px;flex:none!important;display:inline-block!important;word-wrap:break-word;text-align:left}.nut-form-item__label.required:before{content:"*";color:#fa2c19;margin-right:4px}.nut-form-item__body{flex:1;display:flex!important;flex-direction:column}.nut-form-item__body__slots{text-align:left}.nut-form-item__body__slots .nut-input-text{font-size:14px;text-align:right;color:#000;width:100%;outline:0 none;border:0;text-decoration:none;background:transparent;padding:0;margin:0}.nut-form-item__body__slots .nut-range-container{min-height:24px}.nut-form-item__body__slots .nut-textarea{padding:0!important}.nut-form-item__body__slots .nut-textarea .nut-textarea__textarea{text-align:right}.nut-form-item__body__tips{text-align:right;font-size:12px;color:#fa2c19}.nut-theme-dark .nut-input{background:#131313}.nut-theme-dark .nut-input-label,.nut-theme-dark .nut-input .input-text,.nut-theme-dark .nut-input__text--readonly{color:#fff}input,textarea{font:inherit}.nut-input{position:relative;width:100%;padding:14px 16px;display:flex;line-height:22px;background:#fff;font-size:14px;box-sizing:border-box}.nut-input.center{align-items:center}.nut-input.nut-input-border{border-bottom:1px solid var(--divider-color)}.nut-input .input-text::placeholder{color:#00000040}.nut-input .input-text,.nut-input__text--readonly{width:90%;padding:0;line-height:inherit;text-align:left;outline:0 none;border:0;text-decoration:none;background:transparent;resize:none}.nut-input-label{width:80px;overflow:hidden;margin-right:6px;text-align:left;color:#000000a6}.nut-input-value{flex:1;vertical-align:middle}.nut-input-inner{position:relative;display:flex;align-items:center}.nut-input-box{position:relative;width:100%}.nut-input-disabled-mask{position:absolute;width:100%;height:100%;top:0;left:0;z-index:2}.nut-input-error-message{color:#fa2c19;font-size:12px}.nut-input-word-limit{display:flex;justify-content:flex-end;margin-top:4px;color:gray;font-size:12px}.nut-input-left-icon,.nut-input-right-icon{display:flex;align-items:center;font-size:0}.nut-input-clear,.nut-input-right-icon{margin-left:4px}.nut-input-left-icon{margin-right:4px}.nut-input-clear-box{height:100%}.nut-input-clear-box .nut-input-clear{vertical-align:-2px}.nut-input-clear{width:16px;height:16px;color:#c8c9cc;cursor:pointer}.nut-input .nut-button{margin-left:10px}.nut-input.nut-input-required:before{position:absolute;left:14px;color:#fa2c19;content:"*"}.nut-input-disabled{color:var(--lowest-text-color)!important}.nut-input-disabled input:disabled{background:none;color:var(--lowest-text-color);cursor:not-allowed;opacity:1;-webkit-text-fill-color:var(--lowest-text-color)}.nut-input-readonly input{color:#000000d9}.nut-input-error,.nut-input-error::placeholder{color:#fa2c19;-webkit-text-fill-color:#fa2c19}.nut-theme-dark .nut-menu .nut-menu__bar{background-color:#131313}.nut-theme-dark .nut-menu .nut-menu__bar .nut-menu__item{color:#fff}.nut-menu.scroll-fixed{position:fixed;top:0;z-index:1000;width:100%}.nut-menu .nut-menu__bar{position:relative;display:flex;line-height:48px;background-color:#fff;box-shadow:0 2px 12px #5959591f}.nut-menu .nut-menu__bar.opened{z-index:2001}.nut-menu .nut-menu__bar .nut-menu__item{flex:1;text-align:center;font-size:15px;color:#000000d9;min-width:0}.nut-menu .nut-menu__bar .nut-menu__item.active{color:var(--primary-color)}.nut-menu .nut-menu__bar .nut-menu__item.disabled{color:#969799}.nut-menu .nut-menu__bar .nut-menu__item .nut-menu__title-icon{transition:all .2s linear}.nut-menu .nut-menu__bar .nut-menu__item .nut-menu__title{display:flex;align-items:center;justify-content:center;max-width:100%}.nut-menu .nut-menu__bar .nut-menu__item .nut-menu__title .nut-menu__title-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;padding-left:8px;padding-right:8px}.nut-menu .nut-menu__bar .nut-menu__item .nut-menu__title.active .nut-menu__title-icon{transform:rotate(180deg)}.nut-theme-dark .nut-menu-item__content .nut-menu-item__option{color:#fff}.nut-menu-item .active{font-weight:500;color:var(--primary-color)!important}.nut-menu-item__content{padding:12px 24px;max-height:214px;display:flex;flex-wrap:wrap}.nut-menu-item__content.nut-menu-item__overflow{overflow-y:auto}.nut-menu-item__content .nut-menu-item__option{color:var(--primary-text-color);font-size:14px;padding-top:12px;padding-bottom:12px;display:flex;align-items:center}.nut-menu-item__content .nut-menu-item__option i{margin-right:6px}.nut-menu__pop{transition:all 0 ease 0;transform:none}.placeholder-element{position:fixed;top:-48px;left:0;right:0;z-index:2001;background-color:transparent}.placeholder-element.up{bottom:-48px}.nut-theme-dark .nut-navbar{background:#131313;color:#fff}.nut-theme-dark .nut-navbar .title{color:#fff}.nut-navbar{position:relative;display:flex;align-items:center;height:46px;box-sizing:border-box;padding:0;background:#fff;box-shadow:0 1px 7px #edeef1;font-size:14px;color:var(--second-text-color);margin-bottom:20px;overflow:hidden}.nut-navbar:active:before{opacity:.1}.nut-navbar--border{border-bottom:1px solid #eee}.nut-navbar--fixed{position:fixed;top:0;left:0;width:100%}.nut-navbar--placeholder{display:inline-block;width:100%}.nut-navbar--safe-area-inset-top{padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}.nut-navbar--fixed.nut-navbar--safe-area-inset-top{height:calc(46px + constant(safe-area-inset-top));height:calc(46px + env(safe-area-inset-top))}.nut-navbar--clickable:before{position:absolute;content:" ";top:50%;left:50%;width:100%;height:100%;background-color:#000;border:inherit;border-color:#000;border-radius:inherit;transform:translate(-50%,-50%);opacity:0}.nut-navbar .nutui-iconfont .nut-icon-left{text-align:left}.nut-navbar__title{min-width:53%;margin:0 auto;text-align:center;display:flex;justify-content:center}.nut-navbar__title .title{min-width:100px;font-size:18px;font-weight:600;color:#000000d9;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden}.nut-navbar__title.icon .icon{margin:0 0 0 13px}.nut-navbar__title .nut-icon{display:inline}.nut-navbar__title-desc{font-size:12px}.nut-navbar__title .text__title{display:inline-block}.nut-navbar__title .nut-tabs__titles{background:#fff}.nut-navbar__title .nut-tabpane{display:none}.nut-navbar__title ::-webkit-scrollbar{display:none}.nut-navbar__left{font-size:14px;color:#00000040;display:flex;align-items:center;cursor:pointer;padding:0 16px}.nut-navbar__right{font-size:14px;color:#00000040;display:flex;align-items:center;padding:0 16px;cursor:pointer}.nut-navbar__right .rightIcon,.nut-navbar__right .leftIcon{margin-left:16px}.popup-top{display:flex;position:fixed;top:0;left:0;width:100%;overflow-y:auto;z-index:9999}.popup-bottom{position:fixed;bottom:0;left:0;width:100%;overflow-y:auto;z-index:9999}.nut-fade-enter-active,.nut-fade-leave-active{transition:opacity 1s}.nut-fade-enter-from,.nut-fade-leave-to{opacity:0}.nut-notify{display:block;width:100%;box-sizing:border-box;padding:12px 0;color:#fffe;font-size:12px;white-space:pre-wrap;text-align:center;word-wrap:break-word;height:auto;line-height:1.5}.nut-notify--base{background:linear-gradient(135deg,var(--primary-color) 0%,var(--primary-color-end) 100%)}.nut-notify--primary{background:linear-gradient(315deg,var(--primary-color) 0%,var(--primary-color-end) 100%)}.nut-notify--success{background:var(--succeed-color)}.nut-notify--danger{background:var(--danger-color)}.nut-notify--warning{background:#ff9c00}.nut-notify view{width:100%;text-align:center}.overlay-fade-enter-active,.overlay-fade-leave-active{transition-property:opacity;transition-timing-function:ease}.overlay-fade-enter-from,.overlay-fade-leave-to{opacity:0}.nut-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7)}.nut-overflow-hidden{overflow:hidden!important}.nut-theme-dark .nut-picker__title,.nut-theme-dark .nut-picker-roller-item,.nut-theme-dark .nut-picker-roller-item-tile{color:#fff}.nut-theme-dark .nut-picker-roller-mask{background-image:linear-gradient(180deg,rgba(27,27,27,.9),rgba(27,27,27,.4)),linear-gradient(0deg,rgba(27,27,27,.9),rgba(27,27,27,.4));background-repeat:no-repeat;background-position:top,bottom;background-size:100% 108px;z-index:1}.nut-theme-dark .nut-picker-content,.nut-theme-dark .nut-picker-item{color:#fff}.nut-picker__bar{position:relative;height:56px;display:block;text-align:center;line-height:56px}.nut-picker__left{position:absolute;left:0;top:0;cursor:pointer;padding:0 16px;display:flex;align-items:center;justify-content:center;min-width:50px;height:100%;color:var(--comment-text-color);font-size:16px}.nut-picker__right{position:absolute;right:0;top:0;cursor:pointer;padding:0 16px;display:flex;align-items:center;justify-content:center;min-width:50px;height:100%;color:var(--primary-color);font-size:16px}.nut-picker__column{display:flex;position:relative;height:252px}.nut-picker__column:before{content:"";position:absolute;top:108px;height:34px;width:100%;border:1px solid var(--divider-color);border-left:0;border-right:0}.nut-picker__columnitem{width:0;flex-grow:1;height:100%}.nut-picker__title{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center;color:var(--primary-text-color);font-size:18px;font-weight:700}.nut-picker__wrapper{display:block}.nut-picker__item{display:flex;justify-content:center;align-items:center;height:35px}.nut-picker__list{position:relative;display:block;width:100%;height:252px;overflow:hidden;text-align:center;-webkit-overflow-scrolling:touch}.nut-picker-roller{display:block;position:absolute;top:108px;width:100%;height:36px;z-index:1;transform-style:preserve-3d}.nut-picker-roller-item{display:block;backface-visibility:hidden;-moz-backface-visibility:hidden;-webkit-backface-visibility:hidden;position:absolute;top:0;width:100%;height:36px;line-height:36px;color:var(--second-text-color);font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nut-picker-roller-item-hidden{visibility:hidden;opacity:0}.nut-picker-roller-item-tile{display:block;width:100%;height:36px;line-height:36px;color:var(--second-text-color);font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nut-picker-roller-item-tarotile{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;color:var(--second-text-color);font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nut-picker-roller-mask{position:absolute;width:100%;display:block;height:100%;background-image:linear-gradient(180deg,rgba(255,255,255,.9),rgba(255,255,255,.4)),linear-gradient(0deg,rgba(255,255,255,.9),rgba(255,255,255,.4));background-repeat:no-repeat;background-position:top,bottom;background-size:100% 108px;z-index:1}.nut-picker-content{display:block;position:absolute;top:108px;width:100%;height:36px;color:var(--primary-color);z-index:2;overflow:hidden;border-left:0;border-right:0}.nut-picker-list-panel{display:block;transform-style:preserve-3d}.nut-picker-item{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:36px;line-height:36px;text-align:center;font-size:16px;color:var(--primary-text-color)}.nut-popover{position:absolute;display:inline-block;word-break:normal}.nut-popover-arrow{position:absolute;width:0;height:0;border:8px solid transparent}.nut-popover-arrow-top{bottom:0;border-top-color:#fff;border-bottom-width:0;margin-bottom:-8px}.nut-popover-arrow-bottom{top:0;border-bottom-color:#fff;border-top-width:0;margin-top:-8px}.nut-popover-arrow-bottom.nut-popover-arrow--bottom{left:50%;transform:translate(-50%)}.nut-popover-arrow-bottom.nut-popover-arrow--bottom-start{left:16px;transform:translate(0)}.nut-popover-arrow-bottom.nut-popover-arrow--bottom-end{right:16px;transform:translate(0)}.nut-popover-arrow-left{right:0;border-left-color:#fff;border-right-width:0;margin-right:-8px}.nut-popover-arrow-left.nut-popover-arrow--left{top:50%;transform:translateY(-50%)}.nut-popover-arrow-left.nut-popover-arrow--left-start{top:16px;transform:translateY(0)}.nut-popover-arrow-left.nut-popover-arrow--left-end{bottom:16px;transform:translateY(0)}.nut-popover-arrow-right{left:0;border-right-color:#fff;border-left-width:0;margin-left:-8px}.nut-popover-arrow-right.nut-popover-arrow--right{top:50%;transform:translateY(-50%)}.nut-popover-arrow-right.nut-popover-arrow--right-start{top:16px;transform:translateY(0)}.nut-popover-arrow-right.nut-popover-arrow--right-end{bottom:16px;transform:translateY(0)}.nut-popover-content{position:absolute;z-index:9999;background:#fff;border-radius:5px;font-size:14px;font-family:PingFangSC;font-weight:400;color:#333;box-shadow:0 2px 12px #3232331f;opacity:1;transition:opacity .15s,transform .15s;max-height:initial;overflow-y:initial}.nut-popover-content-group{display:block;height:100%;width:100%}.nut-popover-content .nut-popover-menu-item{display:block;padding:8px;border-bottom:1px solid rgb(229,229,229)}.nut-popover-content .nut-popover-menu-item:first-child{margin-top:15px}.nut-popover-content .nut-popover-menu-item:last-child{margin-bottom:2px;border-bottom:none}.nut-popover-content .nut-popover-menu-item .nut-popover-item-img{vertical-align:top}.nut-popover-content .nut-popover-menu-item .nut-popover-menu-item-name{width:100%;word-break:keep-all}.nut-popover-content .nut-popover-menu-item.nut-popover-menu-disabled{color:#9a9b9d;cursor:not-allowed}.nut-popover-content .nut-popover-menu-item.nut-popover-menu-taroitem{display:flex}.nut-popover-content--top .nut-popover-arrow--top{left:50%;transform:translate(-50%)}.nut-popover-content--top-end{right:0}.nut-popover-content--top-end .nut-popover-arrow--top-end{right:16px;transform:translate(0)}.nut-popover-content--top-start{left:0}.nut-popover-content--top-start .nut-popover-arrow--top-start{left:16px;transform:translate(0)}.nut-popover-content--bottom-end{right:0}.nut-popover-content--left-end{bottom:0}.nut-popover-content--left-start{top:0}.nut-popover-content--right-end{bottom:0}.nut-popover-content--right-start{top:0}.nut-popover--dark .nut-popover-content{background:rgb(75,76,77);color:#fff}.nut-popover--dark .nut-popover-content--bottom .nut-popover-arrow,.nut-popover--dark .nut-popover-content--bottom-start .nut-popover-arrow,.nut-popover--dark .nut-popover-content--bottom-end .nut-popover-arrow{border-bottom-color:#4b4c4d}.nut-popover--dark .nut-popover-content--top .nut-popover-arrow,.nut-popover--dark .nut-popover-content--top-start .nut-popover-arrow,.nut-popover--dark .nut-popover-content--top-end .nut-popover-arrow{border-top-color:#4b4c4d}.nut-popover--dark .nut-popover-content--left .nut-popover-arrow,.nut-popover--dark .nut-popover-content--left-start .nut-popover-arrow,.nut-popover--dark .nut-popover-content--left-end .nut-popover-arrow{border-left-color:#4b4c4d}.nut-popover--dark .nut-popover-content--right .nut-popover-arrow,.nut-popover--dark .nut-popover-content--right-start .nut-popover-arrow,.nut-popover--dark .nut-popover-content--right-end .nut-popover-arrow{border-right-color:#4b4c4d}.nut-popover-enter-from,.nut-popover-leave-active{transform:scale(.8);opacity:0}.nut-popover-enter-active{transition-timing-function:ease-out}.nut-popover-leave-active{transition-timing-function:ease-in}.nut-popover-content-bg{position:fixed;height:100%;width:100%;top:0;left:0;background:transparent;z-index:1999}.nut-popover-wrapper{display:inline-block}.nut-theme-dark .nut-popup{background:#1b1b1b}.nut-theme-dark .nut-popup__close-icon{color:#fff}.popup-slide-center-enter-active,.popup-slide-center-leave-active{transition-property:opacity;transition-timing-function:ease}.popup-slide-center-enter-from,.popup-slide-center-leave-to{opacity:0}.popup-slide-top-enter-from,.popup-slide-top-leave-active{transform:translateY(-100%)}.popup-slide-right-enter-from,.popup-slide-right-leave-active{transform:translate(100%)}.popup-slide-bottom-enter-from,.popup-slide-bottom-leave-active{transform:translateY(100%)}.popup-slide-left-enter-from,.popup-slide-left-leave-active{transform:translate(-100%)}.popup-center{top:50%;left:50%;transform:translate(-50%,-50%)}.popup-center.round{border-radius:8px}.popup-bottom{bottom:0;left:0;width:100%}.popup-bottom.round{border-radius:8px 8px 0 0}.popup-bottom--safebottom{padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.popup-right{top:0;right:0}.popup-right.round{border-radius:8px 0 0 8px}.popup-left{top:0;left:0}.popup-left.round{border-radius:0 8px 8px 0}.popup-top{top:0;left:0;width:100%}.popup-top.round{border-radius:0 0 8px 8px}.nut-popup{position:fixed;max-height:100%;overflow-y:auto;background-color:#fff;-webkit-overflow-scrolling:touch}.nut-popup__close-icon{position:absolute!important;z-index:1;color:#969799;font-size:18px;cursor:pointer;width:30px;height:30px;line-height:30px;text-align:center}.nut-popup__close-icon:active{opacity:.7}.nut-popup__close-icon--top-left{top:16px;left:16px}.nut-popup__close-icon--top-right{top:16px;right:16px}.nut-popup__close-icon--bottom-left{bottom:16px;left:16px}.nut-popup__close-icon--bottom-right{right:16px;bottom:16px}.nut-theme-dark .nut-radio__label{color:#fff}.nut-theme-dark .nut-radio__label--disabled{color:var(--lowest-text-color)}.nut-theme-dark .nut-radio__button{background:#131313;color:#fff}.nut-theme-dark .nut-radio__button--disabled{color:var(--lowest-text-color);border:1px solid var(--lowest-text-color)}.nut-radio{display:flex;align-items:center;flex-shrink:0}.nut-radio:last-child{margin-bottom:0!important;margin-right:0!important}.nut-radio--reverse .nut-radio__label{margin-right:8px;margin-left:0}.nut-radio__button{display:inline-flex;align-items:center;padding:5px 18px;font-size:12px;background:#f6f7f9;border-radius:15px;color:var(--second-text-color);box-sizing:border-box;border:1px solid #f6f7f9}.nut-radio__button--active{background:rgba(var(--primary-color),.05);color:var(--primary-color);border:1px solid var(--primary-color)}.nut-radio__button--disabled{color:var(--lowest-text-color);border:none}.nut-radio__label{flex:1;margin-left:8px;font-size:14px;color:var(--second-text-color)}.nut-radio__label--disabled{color:var(--lowest-text-color)}.nut-radio__icon{color:var(--primary-color);transition-duration:.3s;transition-property:color,border-color,background-color;font-size:20px}.nut-radio__icon--unchecked{color:var(--lowest-text-color)}.nut-radio__icon--disable{color:#f5f5f5}.nut-radiogroup{display:inline-block}.nut-radiogroup .nut-radio{margin-bottom:5px}.nut-radiogroup--horizontal .nut-radio{display:inline-flex;margin-right:10px}.nut-radiogroup--horizontal .nut-radio--round .nut-radio__label{margin:0 6px}.nut-sticky--stickyed{position:sticky}.nut-sticky--fixed{position:fixed}.nut-swipe{position:relative;display:block;transition:all .3s cubic-bezier(.19,1,.22,1)}.nut-swipe__left,.nut-swipe__right{position:absolute;top:0;height:100%}.nut-swipe__left{left:0;transform:translate3d(-100%,0,0)}.nut-swipe__right{right:0;transform:translate3d(100%,0,0)}.nut-swipe__content{display:inherit}.nut-switch{cursor:pointer;display:inline-flex;align-items:center;background-color:var(--primary-color);border-radius:27px;background-size:100% 100%;background-repeat:no-repeat;background-position:center center;flex:0 0 auto}.nut-switch.switch-close{background-color:var(--switch-close-background-color)}.nut-switch.switch-close .close-line{background:#f0f0f0;border-radius:2px}.nut-switch .switch-button{display:flex;align-items:center;justify-content:center;border-radius:50%;background:#fff;transition:transform .3s}.nut-switch .switch-button .nut-switch-label{color:#fff;font-size:12px}.nut-switch .switch-button .nut-switch-label.open{transform:translate(-22px)}.nut-switch .switch-button .nut-switch-label.close{transform:translate(22px)}.nut-switch.nut-switch-disable{opacity:.6}.nut-switch.nut-switch-base{min-width:50px;height:27px;line-height:27px;overflow:hidden}.nut-switch.nut-switch-base .switch-button{height:23px;width:23px;transform:translate(2px)}.nut-switch.nut-switch-base.switch-open .switch-button{transform:translate(25px)}.nut-switch.nut-switch-base.switch-close .close-line{width:8px;height:2px}.nut-theme-dark .nut-tabbar{background:#131313}.nut-tabbar{border:0px;box-shadow:none;border-bottom:none;border-top:1px solid var(--divider-color);width:100%;display:flex;align-items:center;box-sizing:content-box;background:#fff;height:50px}.nut-tabbar:last-child{border-right:0}.nut-tabbar-bottom{position:fixed;bottom:0;left:0;z-index:888}.nut-tabbar-safebottom{padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.nut-theme-dark .nut-tabbar-item__icon--unactive{color:var(--comment-text-color)}.nut-tabbar-item{flex:1;text-align:center;text-decoration:none;color:var(--primary-color);height:100%;display:flex;justify-content:center;align-items:center}.nut-tabbar-item__icon--unactive{color:#000000a6}.nut-tabbar-item_icon-box{padding:0;display:flex;flex-direction:column;align-items:center;position:relative}.nut-tabbar-item_icon-box_tips{position:absolute;background:var(--primary-color);border:1px solid #fff;border-radius:7px;text-align:center;top:-3px;right:initial;left:calc(50% + 4px);box-shadow:0 0 0 1px #fff;font-size:12px;color:#fff;z-index:1}.nut-tabbar-item_icon-box_dot{position:absolute;width:7px;height:7px;border-radius:7px;padding:0;background:var(--primary-color);text-align:center;font-size:12px;font-weight:400;color:#fff;top:0;right:0;transform:translate(50%,-3px)}.nut-tabbar-item_icon-box_num{line-height:1;font-size:12px;color:#fff;padding:1px 2px 2px 3px}.nut-tabbar-item_icon-box_nums{line-height:1;font-size:12px;color:#fff;padding:2px 1px 2px 2px}.nut-tabbar-item_icon-box_icon{display:block;background-size:100% 100%;background-position:center center}.nut-tabbar-item_icon-box_icon img{width:20px;height:20px}.nut-tabbar-item_icon-box_nav-word{font-size:12px;line-height:18px;margin-top:2px;display:block}.nut-tabbar-item_icon-box_big-word{font-size:16px;line-height:1}.nut-theme-dark .nut-table__main{color:#fff;background-color:#1b1b1b}.nut-theme-dark .nut-table__main--striped .nut-table__main__head__tr{background-color:#141414}.nut-theme-dark .nut-table__main--striped .nut-table__main__body__tr:nth-child(odd){background-color:var(--comment-text-color)}.nut-theme-dark .nut-table__main--striped .nut-table__main__body__tr:nth-child(even){background-color:#141414}.nut-theme-dark .nut-table__summary,.nut-theme-dark .nut-table__nodata{color:#fff;background-color:#131313}.nut-table{display:flex;width:100%;flex-direction:column;font-size:14px}.nut-table__main{display:table;width:100%;border-collapse:collapse;overflow-x:hidden}.nut-table__main--striped .nut-table__main__head__tr{background-color:#f3f3f3}.nut-table__main--striped .nut-table__main__body__tr:nth-child(odd){background-color:#fff}.nut-table__main--striped .nut-table__main__body__tr:nth-child(even){background-color:#f3f3f3}.nut-table__main__head__tr,.nut-table__main__body__tr{display:table-row}.nut-table__main__head__tr__th,.nut-table__main__body__tr__th,.nut-table__main__head__tr__td,.nut-table__main__body__tr__td{display:table-cell;padding:10px}.nut-table__main__head__tr__td__nodata,.nut-table__main__body__tr__td__nodata{display:flex;height:50px;align-items:center;justify-content:center}.nut-table__main__head__tr--border,.nut-table__main__body__tr--border{border:1px solid #ececec}.nut-table__main__head__tr--alignleft,.nut-table__main__head__tr--align,.nut-table__main__body__tr--alignleft,.nut-table__main__body__tr--align{text-align:left}.nut-table__main__head__tr--aligncenter,.nut-table__main__body__tr--aligncenter{text-align:center}.nut-table__main__head__tr--alignright,.nut-table__main__body__tr--alignright{text-align:right}.nut-table__main__head{display:table-header-group}.nut-table__main__body{display:table-row-group}.nut-table__summary{display:flex;align-items:center;height:30px;padding:10px}.nut-table__nodata{display:flex;align-items:center;justify-content:center;height:30px;padding:10px}.nut-theme-dark .nut-tabpane{background:#1b1b1b}.nut-tabpane{width:100%;flex-shrink:0;display:block;background-color:#fff;padding:12px 16px;box-sizing:border-box;overflow:auto;height:100%;word-break:break-all}.nut-tabpane.inactive{overflow:visible;height:0}.nut-theme-dark .nut-tabs__titles{background:#141414}.nut-theme-dark .nut-tabs__titles-item{color:var(--comment-text-color)}.nut-theme-dark .nut-tabs__titles-item.active{color:#fff}.nut-theme-dark .nut-tabs.vertical .nut-tabs__titles-item.active{background-color:#1b1b1b}.nut-tabs{display:flex;overflow:hidden}.nut-tabs.horizontal{flex-direction:column}.nut-tabs.vertical{flex-direction:row;width:100%}.nut-tabs.vertical .nut-tabs__titles{flex-direction:column;height:100%;padding:10px 0!important;width:100px;flex-shrink:0}.nut-tabs.vertical .nut-tabs__titles .nut-tabs__list{width:100%;display:flex;flex-direction:column;flex-shrink:0}.nut-tabs.vertical .nut-tabs__titles.scrollable{overflow-x:hidden;overflow-y:auto}.nut-tabs.vertical .nut-tabs__titles.scrollable .nut-tabs__titles-item{padding:0 10px 0 15px}.nut-tabs.vertical .nut-tabs__titles.scroll-vertical{overflow-y:scroll;height:auto}.nut-tabs.vertical .nut-tabs__titles.scroll-vertical .nut-tabs__titles-placeholder{height:22px}.nut-tabs.vertical .nut-tabs__titles-item{height:40px;flex:none}.nut-tabs.vertical .nut-tabs__titles-item__smile{transition:width .3s ease}.nut-tabs.vertical .nut-tabs__titles-item__line{bottom:none;transform:translateY(-50%);transition:height .3s ease;width:0;height:0}.nut-tabs.vertical .nut-tabs__titles-item.active{background-color:#fff}.nut-tabs.vertical .nut-tabs__titles-item.active .nut-tabs__titles-item__line{left:10px;width:3px;background:linear-gradient(180deg,var(--primary-color) 0%,rgba(var(--primary-color),.15) 100%);height:14px}.nut-tabs.vertical .nut-tabs__titles-item.active .nut-tabs__titles-item__smile{right:-2px;bottom:2px;left:auto;width:3px;transform:rotate(320deg);height:14px}.nut-tabs.vertical .nut-tabs__content{flex:1;flex-direction:column}.nut-tabs.vertical .nut-tabs__content .nut-tabpane{height:100%}.nut-tabs__titles{height:50px;padding:0 10px;display:flex;user-select:none;background:var(--popup-color);border-radius:0;flex-shrink:0}.nut-tabs__titles .nut-tabs__list{width:100%;height:50px;display:flex;flex-shrink:0}.nut-tabs__titles.large .nut-tabs__titles-item{font-size:18px}.nut-tabs__titles.normal .nut-tabs__titles-item{font-size:16px}.nut-tabs__titles.small .nut-tabs__titles-item{font-size:14px}.nut-tabs__titles::-webkit-scrollbar{display:none;width:0;background:transparent}.nut-tabs__titles.smile .nut-tabs__titles-item.active .nut-tabs__titles-item__smile{width:20px;height:8px}.nut-tabs__titles.scrollable{overflow-x:auto;overflow-y:hidden}.nut-tabs__titles.scrollable .nut-tabs__titles-item{width:auto}.nut-tabs__titles-item{position:relative;font-size:16px;flex:1 0 auto;min-width:50px;width:0;display:flex;align-items:center;justify-content:center;color:var(--comment-text-color)}.nut-tabs__titles-item__text{text-align:center}.nut-tabs__titles-item__text.ellipsis{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nut-tabs__titles-item__smile,.nut-tabs__titles-item__line{position:absolute;transition:width .3s ease;width:0;height:0;content:" ";bottom:15%;left:50%;transform:translate(-50%);overflow:hidden;border-radius:0;opacity:1}.nut-tabs__titles-item__smile .nut-icon{position:absolute;font-size:12px;width:100%;height:100%;color:var(--primary-color)}.nut-tabs__titles-item.disabled{color:var(--lowest-text-color)}.nut-tabs__titles-item.active{font-weight:600;color:var(--primary-text-color)}.nut-tabs__titles-item.active .nut-tabs__titles-item__line{content:" ";width:14px;height:3px;background:var(--primary-color)}.nut-tabs__content{display:flex;box-sizing:border-box}.tabs-scrollview{white-space:nowrap}.nut-tabs__titles-item.nut-tabs__titles-placeholder{width:auto;min-width:10px}.nut-tabs__titles-item .taro{height:46px;line-height:46px}.nut-tag{padding:0 4px;display:inline-flex;align-items:center;font-size:12px;border-radius:4px;height:auto}.nut-tag--default{color:var(--comment-text-color);background:var(--divider-color);border:1px solid transparent}.nut-tag--default.nut-tag--plain{color:var(--divider-color);border:1px solid var(--divider-color)}.nut-tag--primary{color:var(--comment-text-color);background:#3460fa;border:1px solid transparent}.nut-tag--primary.nut-tag--plain{color:#3460fa;border:1px solid #3460fa}.nut-tag--success{color:var(--comment-text-color);background:#4fc08d;border:1px solid transparent}.nut-tag--success.nut-tag--plain{color:#4fc08d;border:1px solid #4fc08d}.nut-tag--danger{color:var(--comment-text-color);background:linear-gradient(135deg,rgb(242,20,12) 0%,rgb(232,34,14) 69.8395009973%,rgb(242,77,12) 100%);border:1px solid transparent}.nut-tag--danger.nut-tag--plain{color:#df3526;border:1px solid #df3526}.nut-tag--warning{color:var(--comment-text-color);background:#f3812e;border:1px solid transparent}.nut-tag--warning.nut-tag--plain{color:#f3812e;border:1px solid #f3812e}.nut-tag--round{border-radius:8px}.nut-tag--mark{border-radius:0 12px 12px 0}.nut-tag--close{margin-left:4px;cursor:pointer}.nut-theme-dark .nut-textarea{background:#131313}.nut-theme-dark .nut-textarea__textarea{color:#fff}.nut-textarea{position:relative;width:100%;box-sizing:border-box;display:flex;background:#fff;font-size:14px;padding:10px 25px}.nut-textarea--disabled .nut-textarea__textarea,.nut-textarea--disabled .nut-textarea____limit{cursor:not-allowed;color:var(--lowest-text-color)!important}.nut-textarea__limit{position:absolute;right:15px;bottom:12px;font-size:14px;color:var(--second-text-color)}.nut-textarea__textarea{outline:none;display:block;box-sizing:border-box;width:100%;min-width:0;margin:0;padding:0;font-size:14px;color:var(--second-text-color);text-align:left;background-color:transparent;border:none;resize:none;line-height:20px}.nut-textarea__ali{line-height:17px}.nut-textarea .cpoyText{position:absolute;top:-999999px;left:-999999px}@keyframes rotation{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}.nut-toast{position:fixed;left:0;bottom:150px;width:100%;text-align:center;pointer-events:none;z-index:9999;font-family:PingFang SC,Microsoft YaHei,Helvetica,Hiragino Sans GB,SimSun,sans-serif}.nut-toast-small .nut-toast-inner{font-size:12px}.nut-toast-large .nut-toast-inner{font-size:16px}.nut-toast-cover{display:flex;align-items:center;justify-content:center;pointer-events:auto;height:100%;background:rgba(0,0,0,0)}.nut-toast-inner{display:inline-block;font-size:14px;min-width:120px;max-width:65%;text-align:center;padding:12px 20px;word-break:break-all;background:rgba(0,0,0,.65);border-radius:4px;color:#fff}.nut-toast-text{display:block;font-size:14px;line-height:22px}.nut-toast-text:empty{margin-bottom:-8px}.nut-toast-title{font-size:18px;line-height:28px}.nut-toast-title+.nut-toast-text{margin-top:6px}.nut-toast-title:empty{margin-bottom:-8px}.nut-toast-has-icon .nut-toast-icon-wrapper{width:100%;display:flex;align-items:center;justify-content:center;margin-bottom:8px}.nut-toast-center{top:50%;transform:translateY(-50%)}.nut-toast-loading .nut-toast-inner{display:inline-flex;flex-direction:column;justify-content:center;align-items:center}.nut-toast-loading .nut-toast-icon-wrapper{animation:rotation 2s linear infinite}.nut-toast-loading .nut-toast-icon-no-animation{animation:none}.toast-fade-enter-active,.toast-fade-leave-active{transition:opacity .3s}.toast-fade-enter-from,.toast-fade-leave-to{opacity:0}.tab-bar-wrapper[data-v-70e5617e]{z-index:101}.tab-bar-wrapper .tabbar[data-v-70e5617e]{padding-top:8px;padding-bottom:var(--63baed97);box-shadow:none;backdrop-filter:blur(var(--tab-bar-blur));-webkit-backdrop-filter:blur(var(--tab-bar-blur));background:var(--tab-bar-color)}.tab-bar-wrapper[data-v-70e5617e] .tabbar-item.nut-tabbar-item__icon--unactive{color:var(--lowest-text-color)}.tab-bar-wrapper[data-v-70e5617e] .tabbar-item>.nut-tabbar-item_icon-box>.nut-tabbar-item_icon-box_nav-word{margin-top:8px;font-weight:600}.app-layout-wrapper[data-v-95e959fe]{flex:1;padding:56px 0 var(--486aa350) 0;overflow:auto}.my-page-wrapper[data-v-8b5b0969]{min-height:100%;padding:var(--safe-area-side);display:flex;flex-direction:column;justify-content:space-between;align-items:center}.my-page-wrapper .profile-block[data-v-8b5b0969]{width:100%}.my-page-wrapper .profile-block .config-card[data-v-8b5b0969]{margin-top:20px;width:100%;padding:12px;border-radius:var(--item-card-radios);color:var(--second-text-color);background:var(--card-color)}.my-page-wrapper .profile-block .config-card .title-wrapper[data-v-8b5b0969]{display:flex;justify-content:space-between;align-items:center}.my-page-wrapper .profile-block .config-card h1[data-v-8b5b0969]{font-size:14px;padding:8px 0;margin-bottom:8px}.my-page-wrapper .profile-block .config-card .config-input-wrapper .input.nut-input-disabled[data-v-8b5b0969] input:disabled{-webkit-text-fill-color:var(--lowest-text-color)}.my-page-wrapper .profile-block .config-card .config-input-wrapper .input[data-v-8b5b0969]{background:transparent;padding:16px;color:var(--second-text-color)}.my-page-wrapper .profile-block .config-card .config-input-wrapper .input[data-v-8b5b0969] img{width:16px;height:16px;margin-right:6px;opacity:.2;filter:brightness(var(--img-brightness))}.my-page-wrapper .profile-block .config-card .config-input-wrapper .input[data-v-8b5b0969]:not(:first-child){margin-top:8px}.my-page-wrapper .profile-block .config-card .config-btn-wrapper[data-v-8b5b0969]{display:flex;justify-content:flex-end}.my-page-wrapper .profile-block .config-card .config-btn-wrapper .cancel-btn[data-v-8b5b0969]{background:transparent}.my-page-wrapper .profile-block .config-card .config-btn-wrapper .save-btn[data-v-8b5b0969]{margin-left:8px}.my-page-wrapper .profile-block .info[data-v-8b5b0969]{width:100%;display:flex;justify-content:space-between;align-items:center;padding:24px 0}.my-page-wrapper .profile-block .info .avatar-wrapper[data-v-8b5b0969]{display:flex;align-items:center;max-width:64%}.my-page-wrapper .profile-block .info .avatar-wrapper .avatar-normal[data-v-8b5b0969] img{width:72%}.my-page-wrapper .profile-block .info .avatar-wrapper .name[data-v-8b5b0969]{margin-left:12px;font-size:18px;font-weight:700;max-width:64%;display:flex;flex-direction:column}.my-page-wrapper .profile-block .info .avatar-wrapper .name p.title[data-v-8b5b0969]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--primary-text-color)}.my-page-wrapper .profile-block .info .avatar-wrapper .name .des[data-v-8b5b0969]{margin-top:6px;font-size:12px;font-weight:400;display:flex;flex-direction:column;color:var(--comment-text-color)}.my-page-wrapper .profile-block .info .actions[data-v-8b5b0969]{margin-left:12px;display:flex;flex-direction:column}.my-page-wrapper .profile-block .info .actions svg[data-v-8b5b0969]{margin-right:4px}.my-page-wrapper .profile-block .info .actions .upload-btn[data-v-8b5b0969],.my-page-wrapper .profile-block .info .actions .download-btn[data-v-8b5b0969]{padding:0 12px;width:116px}.my-page-wrapper .profile-block .info .actions .upload-btn[data-v-8b5b0969]{background:transparent}.my-page-wrapper .profile-block .info .actions .download-btn[data-v-8b5b0969]{margin-top:12px}.my-page-wrapper .profile-block .change-themes[data-v-8b5b0969]{box-shadow:none;font-weight:700}.my-page-wrapper .env-block[data-v-8b5b0969]{display:flex;flex-direction:column;justify-content:center;align-items:center;font-size:12px;color:var(--lowest-text-color)}.my-page-wrapper .env-block img[data-v-8b5b0969]{opacity:.4;width:54px;height:54px}.nut-icon[data-v-8b5b0969]{color:var(--lowest-text-color)}.wrapper[data-v-7dcab5db]{width:100%;height:100%;display:flex;justify-content:center;align-items:center;flex-direction:column}.wrapper h3[data-v-7dcab5db]{padding-bottom:24px}.preview-list[data-v-f978cdde]{flex:1;margin:0;padding:0;display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:100%}.preview-list>li[data-v-f978cdde]{width:100%;display:flex;align-items:center;justify-content:space-between}.preview-list>li[data-v-f978cdde]:not(:last-child){border-bottom:1px solid var(--divider-color)}.preview-list>li .infos[data-v-f978cdde]{flex:1;padding:12px 0;display:flex;align-items:center;gap:4px}.preview-list>li .infos div[data-v-f978cdde]{width:32px;aspect-ratio:1}.preview-list>li .infos p[data-v-f978cdde]{font-size:14px;color:var(--second-text-color)}.preview-list>li .actions[data-v-f978cdde]{flex-shrink:0;flex-grow:0;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:16px;font-size:20px}.preview-list>li .actions>button[data-v-f978cdde]{background-color:transparent;border:none;padding:0}.type-tag[data-v-07238b17]{color:var(--primary-color)!important;border:1px solid var(--primary-color)!important;background:transparent!important;margin-right:4px}.node-name[data-v-07238b17]{font-size:14px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}.info-ul[data-v-07238b17]{margin:0;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:12px}.info-ul li[data-v-07238b17]:first-child{margin-bottom:20px}.info-ul li[data-v-07238b17]:not(:first-child){margin-bottom:8px;color:var(--comment-text-color)}.input-wrapper[data-v-07238b17]{display:flex;align-items:center}.input-wrapper>view.nut-textarea[data-v-07238b17]{background:transparent;padding:8px 12px;color:var(--second-text-color);border-color:var(--lowest-text-color)}.input-wrapper>view.nut-textarea[data-v-07238b17] textarea{color:inherit}.qrcode[data-v-07238b17]{width:92px;height:92px;margin:0 auto;opacity:.8}.type-tag[data-v-1563744b]{padding:1px 4px;line-height:1;margin-right:3px;color:var(--compare-tag-text-color);background:var(--compare-tag-background-color)}.item-true[data-v-1563744b]{color:var(--primary-color)}.item-false[data-v-1563744b]{width:8px;height:1px;border-radius:2px;background:var(--lowest-text-color)}.name-wrapper[data-v-1563744b]{display:flex;flex-direction:column}.compare-table-body[data-v-1563744b]{width:100%}.compare-table-body .processed-tr[data-v-1563744b]{padding-top:20px;padding-bottom:0}.compare-table-body .original-tr[data-v-1563744b]{padding-top:10px;padding-bottom:20px;border-bottom:1px solid var(--divider-color)}.compare-table-row[data-v-1563744b]{padding:0 var(--safe-area-side)}.compare-table-head[data-v-1563744b]{padding:10px var(--safe-area-side)}.compare-table-head[data-v-1563744b],.compare-table-row[data-v-1563744b]{margin:0;display:grid;grid-template-columns:46% 1fr 1fr 1fr 1fr}.compare-table-head li[data-v-1563744b],.compare-table-head td[data-v-1563744b],.compare-table-row li[data-v-1563744b],.compare-table-row td[data-v-1563744b]{display:flex;justify-content:center;align-items:center}.compare-table-head li[data-v-1563744b]:first-child,.compare-table-head td[data-v-1563744b]:first-child,.compare-table-row li[data-v-1563744b]:first-child,.compare-table-row td[data-v-1563744b]:first-child{justify-content:start}.compare-table-head[data-v-1563744b]{position:sticky;z-index:7;top:114px;border-bottom:1px solid var(--divider-color);font-weight:700;background:var(--background-color);color:var(--comment-text-color)}.compare-table-head.filter-table-head[data-v-1563744b]{top:84px}.processed-item[data-v-1563744b],.original-item[data-v-1563744b]{display:flex;align-items:center}.processed-item[data-v-1563744b]:before,.original-item[data-v-1563744b]:before{content:"";display:block;width:6px;height:6px;border-radius:50%;margin-right:10px;background:var(--primary-color)}.indicator[data-v-1563744b]{margin-right:24px}.processed-item[data-v-1563744b]:before{background:var(--third-color)}.block-wrapper[data-v-1563744b]{position:relative;background:var(--compare-item-background-color)}.block-wrapper .compare-title[data-v-1563744b]{padding:0 var(--safe-area-side);z-index:9;margin-top:0;top:56px;background:var(--background-color)}.block-wrapper .compare-des[data-v-1563744b]{padding:6px var(--safe-area-side);z-index:8;display:flex;position:sticky;top:84px;background:var(--background-color);color:var(--comment-text-color)}.compare-page-body[data-v-1563744b]{font-size:12px;background:inherit;color:var(--comment-text-color)}.compare-page-header[data-v-1563744b]{padding:var(--safe-area-side);position:sticky;top:0;z-index:19;display:flex;justify-content:space-between;align-items:center;height:56px;border-bottom:1px solid;color:var(--primary-text-color);background:var(--background-color);border-color:var(--divider-color)}.compare-page-header h1[data-v-1563744b]{display:flex;align-items:center;font-size:20px;line-height:1;font-weight:500}.compare-page-header h1>svg[data-v-1563744b]{margin-right:6px;width:20px;height:20px}.compare-page-header h1 span[data-v-1563744b]{margin-left:8px;font-size:14px;color:var(--second-text-color)}.compare-page-header h1 span>svg[data-v-1563744b]{margin-right:4px;color:var(--comment-text-color)}.compare-page-header button[data-v-1563744b]{background:none;border:none;font-size:20px;padding:8px;color:var(--lowest-text-color)}.compare-page-wrapper[data-v-1563744b]{width:100vw;height:100vh;z-index:1000;overflow:auto;-webkit-overflow-scrolling:touch;background:var(--background-color)}.divider[data-v-1563744b],.divider[data-v-1563744b]:before,.divider[data-v-1563744b]:after{color:var(--lowest-text-color);border-color:var(--lowest-text-color)}.sub-item-customer-icon[data-v-5b936846] img{opacity:.8;filter:brightness(var(--img-brightness))}.sub-item-wrapper[data-v-5b936846]{line-height:1.4;margin-left:auto;margin-right:auto;border-radius:var(--item-card-radios);display:flex;background:var(--card-color)}.sub-item-wrapper[data-v-5b936846] .nut-avatar{flex-shrink:0;width:56px;height:56px;margin-right:20px;border-radius:12px}.sub-item-wrapper[data-v-5b936846] .nut-avatar img{object-fit:contain;border-radius:10px}.sub-item-wrapper>.sub-item-content[data-v-5b936846]{flex:1;line-height:1.6}.sub-item-wrapper>.sub-item-content .sub-item-title-wrapper[data-v-5b936846]{display:flex;justify-content:space-between;align-items:center}.sub-item-wrapper>.sub-item-content .sub-item-title-wrapper .sub-item-title[data-v-5b936846]{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;word-wrap:break-word;word-break:break-all;overflow:hidden;font-size:16px;color:var(--primary-text-color)}.sub-item-wrapper>.sub-item-content .sub-item-title-wrapper .copy-sub-link[data-v-5b936846],.sub-item-wrapper>.sub-item-content .sub-item-title-wrapper .refresh-sub-flow[data-v-5b936846]{background-color:transparent;border:none;padding:0 8px;cursor:pointer;display:inline-flex;justify-content:center;align-items:center}.sub-item-wrapper>.sub-item-content .sub-item-title-wrapper .copy-sub-link svg[data-v-5b936846],.sub-item-wrapper>.sub-item-content .sub-item-title-wrapper .refresh-sub-flow svg[data-v-5b936846]{width:16px;height:16px;color:var(--lowest-text-color)}.sub-item-wrapper>.sub-item-content .sub-item-title-wrapper button[data-v-5b936846]{white-space:nowrap}.sub-item-wrapper>.sub-item-content .sub-item-title-wrapper div[data-v-5b936846]{display:flex;align-items:center}.sub-item-wrapper>.sub-item-content .sub-item-detail[data-v-5b936846]{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;word-wrap:break-word;word-break:break-all;overflow:hidden;margin-top:4px;font-size:12px;color:var(--comment-text-color)}.sub-item-wrapper>.sub-item-content .sub-item-detail span[data-v-5b936846]{display:block;line-height:1.8}.sub-item-wrapper>.sub-item-content .sub-item-detail-isSimple[data-v-5b936846]{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;word-wrap:break-word;word-break:break-all;overflow:hidden;font-size:12px;max-width:80%;color:var(--comment-text-color)}.sub-item-swipe[data-v-5b936846] .nut-swipe__left .sub-item-swipe-btn-wrapper{padding-left:24px}.sub-item-swipe[data-v-5b936846] .nut-swipe__right,.sub-item-swipe[data-v-5b936846] .nut-swipe__left{display:flex;justify-content:space-around;align-items:center}.sub-item-swipe[data-v-5b936846] .nut-swipe__right .sub-item-swipe-btn-wrapper,.sub-item-swipe[data-v-5b936846] .nut-swipe__left .sub-item-swipe-btn-wrapper{padding-left:14px}.sub-item-swipe[data-v-5b936846] .nut-swipe__right .sub-item-swipe-btn-wrapper:last-child,.sub-item-swipe[data-v-5b936846] .nut-swipe__left .sub-item-swipe-btn-wrapper:last-child{padding-right:14px}.sub-item-swipe[data-v-5b936846] .nut-swipe__right .sub-item-swipe-btn-wrapper .sub-item-swipe-btn,.sub-item-swipe[data-v-5b936846] .nut-swipe__left .sub-item-swipe-btn-wrapper .sub-item-swipe-btn{border-radius:50%;height:46px;width:44px}.desc-about[data-v-5b936846]{display:block;padding:100px 30px 350px;color:var(--comment-text-color);font-size:12px;line-height:20px;margin-top:8px;margin-bottom:20px;text-align:left}.desc-about span[data-v-5b936846]{display:inline-block;padding:6px 0 0}.desc-title a[data-v-5b936846],.desc-about a[data-v-5b936846]{color:var(--primary-color)}.subs-list-wrapper[data-v-5b936846]{margin-bottom:36px;position:relative}.sub-img-wrappers[data-v-5b936846]{display:flex;align-items:center}.drag-btn-wrapper{position:relative;z-index:999}.drag-btn-wrapper .drag-btn{width:48px;height:48px;border-radius:50%;background-image:linear-gradient(to bottom right,var(--primary-color),var(--primary-color-end));box-shadow:0 4px 8px #0003;display:flex;justify-content:center;align-items:center}.drag-btn-wrapper .drag-btn.refresh{background:var(--second-color);margin-bottom:12px}.drag-btn-wrapper .drag-btn>svg{width:20px;height:20px;color:#fffb}.add-sub-popup{background-color:var(--popup-color)}.add-sub-popup .add-sub-panel-title{width:100%;text-align:center;font-size:16px;color:var(--comment-text-color)}.add-sub-popup .add-sub-panel-list{padding:16px 0;font-size:16px;font-weight:700;display:flex;width:100%;color:var(--second-text-color)}.add-sub-popup .add-sub-panel-list>li{width:50%;display:flex;justify-content:center}.add-sub-popup .add-sub-panel-list>li .router-link{width:100%;display:flex;flex-direction:column;align-items:center;justify-content:space-between}.add-sub-popup .add-sub-panel-list>li .router-link>svg{width:44px;height:44px;color:var(--primary-color);margin-bottom:12px}.no-data-wrapper{width:100%;height:100%;display:flex;align-items:center;justify-content:center;flex-direction:column}.no-data-wrapper h3{font-size:18px;margin-bottom:12px;color:var(--primary-text-color)}.no-data-wrapper p{font-size:14px;color:var(--comment-text-color)}.no-data-wrapper a{font-size:14px;margin-top:24px;color:var(--comment-text-color)}.no-data-wrapper a span{margin-right:4px}.list-title{padding-left:8px;font-weight:700}.sticky-title-wrappers{margin-top:var(--safe-area-side);color:var(--comment-text-color)}.desc-about{display:block;padding:100px 30px 50px;color:var(--comment-text-color);font-size:12px;line-height:20px;margin-top:8px;margin-bottom:20px;text-align:left}.desc-about span{display:inline-block;padding:6px 0 0}.desc-title a,.desc-about a{color:var(--primary-color)}.draggable-item{margin-top:12px;margin-bottom:12px}.drag-handler{padding-left:16px;color:var(--lowest-text-color)}.chosensub{box-shadow:0 0 10px var(--primary-color);border-radius:var(--item-card-radios);overflow:hidden}.subs-list-wrapper{width:calc(100% - 1.5rem);margin-left:auto;margin-right:auto}.des-label[data-v-343abf3b]{font-size:12px;margin-bottom:8px;color:var(--comment-text-color)}.nut-radiogroup[data-v-343abf3b]{width:100%;display:grid;grid-template-columns:1fr 1fr 1fr}.checkbox-group[data-v-6b2b1e3c]{display:grid;grid-template-columns:1fr 1fr}.checkbox-group view[data-v-6b2b1e3c]{margin-bottom:16px}.checkbox-group view[data-v-6b2b1e3c] .nut-checkbox__label{font-size:14px;color:var(--second-text-color)}.des-label[data-v-00c9a948]{font-size:12px;margin-bottom:8px;color:var(--comment-text-color)}.des-label[data-v-00c9a948]:not(:first-child){margin-top:16px}.nut-radiogroup[data-v-00c9a948]{width:100%;display:grid;grid-template-columns:1fr 1fr}.tag-wrapper[data-v-00c9a948]{margin-bottom:12px;max-width:100%}.tag-wrapper .tag-item[data-v-00c9a948]{max-width:100%;margin-right:8px;margin-bottom:8px}.tag-wrapper .tag-item span[data-v-00c9a948]{max-width:95%;display:-webkit-box;white-space:normal!important;overflow:hidden;text-overflow:ellipsis;word-wrap:break-word;-webkit-line-clamp:3;-webkit-box-orient:vertical}.input-wrapper[data-v-00c9a948]{display:flex;align-items:center}.input-wrapper>view.nut-input[data-v-00c9a948]{background:transparent;padding:8px 12px;margin-right:16px}.input-wrapper>svg[data-v-00c9a948]{width:20px;height:20px;color:var(--primary-color);flex:1;padding-right:12px}.des-label[data-v-d6c5e2e7]{font-size:12px;margin-bottom:8px;color:var(--comment-text-color)}.des-label[data-v-d6c5e2e7]:not(:first-child){margin-top:16px}.nut-radiogroup[data-v-d6c5e2e7]{width:100%;display:grid;grid-template-columns:1fr 1fr}.input-wrapper[data-v-d6c5e2e7]{display:flex;align-items:center}.input-wrapper>view.nut-input[data-v-d6c5e2e7]{background:transparent;padding:8px 12px;margin-right:16px;border-bottom:1px solid var(--lowest-text-color);color:var(--second-text-color)}.des-label[data-v-6b422b47]{font-size:12px;margin-bottom:8px;color:var(--comment-text-color)}.des-label[data-v-6b422b47]:not(:first-child){margin-top:16px}.nut-radiogroup[data-v-6b422b47]{width:100%;display:grid;grid-template-columns:1fr 1fr}.input-wrapper[data-v-6b422b47]{display:flex;align-items:center}.input-wrapper>view.nut-textarea[data-v-6b422b47]{background:transparent;padding:8px 12px;border-bottom:1px solid;color:var(--second-text-color);border-color:var(--lowest-text-color)}.input-wrapper>view.nut-textarea[data-v-6b422b47] textarea{color:inherit}.open-editor-btn[data-v-6b422b47]{border:1px solid var(--primary-color);background:transparent;margin:20px 0 12px;padding:8px 0;text-align:center;width:100%;border-radius:var(--item-card-radios);color:var(--primary-color);font-weight:700}.open-editor-btn svg[data-v-6b422b47]{margin-right:8px}.editor-page-header[data-v-6b422b47]{padding:var(--safe-area-side);top:0;display:flex;align-items:center;height:56px}.editor-page-header button[data-v-6b422b47]{background:none;border:none;font-size:20px;padding:8px;color:var(--danger-color);cursor:pointer}.editor-page-header button.toggle-plaintext-mode[data-v-6b422b47]{margin-left:auto}.add-action-btn[data-v-7e50fb3e]{font-size:14px;width:100%;height:44px;border-radius:var(--item-card-radios);color:var(--primary-color);border:1px dashed var(--primary-color);background:none;display:flex;align-items:center;justify-content:center;margin-top:12px}.add-action-btn span[data-v-7e50fb3e]{display:inline-flex;align-items:center}.add-action-btn span svg[data-v-7e50fb3e]{margin-right:6px;width:16px;height:16px}.qa-info[data-v-7e50fb3e]{padding:8px 12px}.list-group-item[data-v-7e50fb3e]{display:flex;flex-direction:column;box-shadow:none}.list-group-item .list-group-item-title[data-v-7e50fb3e]{display:flex;justify-content:space-between;padding-bottom:12px;margin-bottom:12px;color:var(--comment-text-color);border-bottom:1px solid var(--divider-color)}.list-group-item .list-group-item-title .left[data-v-7e50fb3e]{font-size:12px;font-weight:700}.list-group-item .list-group-item-title .left span[data-v-7e50fb3e]{margin-right:6px}.list-group-item .list-group-item-title .left svg[data-v-7e50fb3e]{color:var(--unimportant-icon-color)}.list-group-item .list-group-item-title .right[data-v-7e50fb3e]{display:flex}.list-group-item .list-group-item-title .right .preview-switch[data-v-7e50fb3e]{display:flex;align-items:center;margin-right:12px}.list-group-item .list-group-item-title .right .preview-switch span[data-v-7e50fb3e]{margin-right:8px;font-weight:400;font-size:12px}.list-group-item .list-group-item-title .right .preview-switch .my-switch[data-v-7e50fb3e]{height:22px;width:45px;min-width:40px}.list-group-item .list-group-item-title .right .preview-switch .my-switch[data-v-7e50fb3e] .switch-button{width:18px;height:18px}.list-group-item .list-group-item-title .right .delete[data-v-7e50fb3e]{padding:0 24px;color:var(--danger-color)}.list-group-item .list-group-item-title .right .drag-handler[data-v-7e50fb3e]{padding-left:16px;color:var(--lowest-text-color);cursor:move;cursor:grab;cursor:-moz-grab;cursor:-webkit-grab}.list-group-item .list-group-item-title .right .drag-handler[data-v-7e50fb3e]:active{cursor:grabbing;cursor:-moz-grabbing;cursor:-webkit-grabbing}.list-group-itemsa[data-v-7e50fb3e]{display:flex;flex-direction:column;box-shadow:none}.list-group-itemsa .list-group-item-titlesa[data-v-7e50fb3e]{color:var(--comment-text-color);border-bottom:1px solid var(--divider-color);padding:1px 0 12px 12px}.list-group-itemsa .list-group-item-titlesa span[data-v-7e50fb3e]{margin-right:6px}.list-group-itemsa .list-group-item-titlesa svg[data-v-7e50fb3e]{color:var(--unimportant-icon-color)}.actions-title-wrapper[data-v-7e50fb3e]{display:flex;justify-content:space-between}.actions-title-wrapper button[data-v-7e50fb3e]{background:none;border:none;font-weight:400;font-size:12px;padding:0;color:var(--comment-text-color)}.actions-title-wrapper button svg[data-v-7e50fb3e]{margin-right:4px}.flip-list-move[data-v-7e50fb3e]{transition:transform .5s}.no-move[data-v-7e50fb3e]{transition:transform 0s}.light-mode .ghost[data-v-7e50fb3e]{background:#c8ebfb!important}.dark-mode .ghost[data-v-7e50fb3e]{background:#202f3c!important}.chosen[data-v-7e50fb3e]{border:solid 1px var(--primary-color)!important;opacity:.92!important}.list-group[data-v-7e50fb3e]{min-height:20px}.list-group-item li[data-v-7e50fb3e]{cursor:pointer}.custom-button[data-v-7e50fb3e]{background-color:var(--divider-color);color:var(--second-text-color);padding:9px 15px;border-radius:18px;border:none;font-weight:400}.horizontal-button-container[data-v-7e50fb3e]{display:grid;grid-template-columns:repeat(auto-fit,minmax(85px,1fr));gap:15px;background-color:var(--card-color);margin:10px;border-radius:15px}.options-label[data-v-301922b0]{font-size:12px;margin-bottom:16px;color:var(--comment-text-color)}.radio-wrapper.options-radio[data-v-301922b0]{justify-content:start}.radio-wrapper.options-radio .nut-radiogroup[data-v-301922b0]{width:100%;display:grid;grid-template-columns:1fr 1fr 1fr}.radio-wrapper[data-v-301922b0]{display:flex;justify-content:end}.page-wrapper[data-v-c7faa030]{padding:0 var(--safe-area-side) calc(var(--030cb400) + 63px) var(--safe-area-side)}.page-wrapper[data-v-c7faa030] .nut-cell-group__warp{border-radius:var(--item-card-radios)}.radio-wrapper[data-v-c7faa030]{display:flex;justify-content:end}.radio-wrapper[data-v-c7faa030] .nut-radio__button.false{background:var(--divider-color);border-color:transparent;color:var(--second-text-color)}.form-block-wrapper[data-v-c7faa030]{position:relative}.bottom-btn-wrapper[data-v-c7faa030]{position:fixed;display:flex;justify-content:space-between;bottom:0;width:100%;padding:8px var(--safe-area-side) calc(var(--030cb400) + 8px) var(--safe-area-side);z-index:20;background:var(--background-color);border-top:1px solid var(--divider-color)}.bottom-btn-wrapper .btn[data-v-c7faa030]{border-radius:8px;padding:4px 12px;font-size:14px;display:flex;justify-content:center;align-items:center}.bottom-btn-wrapper .btn svg[data-v-c7faa030]{margin-right:4px}.bottom-btn-wrapper .compare-btn[data-v-c7faa030]{background:transparent;width:36%}.bottom-btn-wrapper .submit-btn[data-v-c7faa030]{width:62%}.include-subs-wrapper[data-v-c7faa030]{flex-direction:column}.include-subs-wrapper[data-v-c7faa030] .nut-form-item__label{width:100%;margin-bottom:12px}.include-subs-wrapper .subs-checkbox-wrapper[data-v-c7faa030]{flex-direction:row-reverse}.include-subs-wrapper .subs-checkbox-wrapper .subs-checkbox[data-v-c7faa030]{justify-content:space-between;margin-left:16px;padding:16px 0 0}.include-subs-wrapper .subs-checkbox-wrapper .subs-checkbox[data-v-c7faa030]:not(:last-child){padding:16px 0;border-bottom:1px solid;border-color:var(--divider-color)}.include-subs-wrapper .subs-checkbox-wrapper .subs-checkbox .sub-img-wrapper[data-v-c7faa030]{max-width:100%;display:flex;align-items:center;font-size:14px;color:var(--second-text-color)}.include-subs-wrapper .subs-checkbox-wrapper .subs-checkbox .sub-img-wrapper span[data-v-c7faa030]{max-width:56vw;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;word-wrap:break-word;word-break:break-all;overflow:hidden}.include-subs-wrapper .subs-checkbox-wrapper .subs-checkbox .sub-img-wrapper .sub-item-customer-icon[data-v-c7faa030]{margin-right:12px}.include-subs-wrapper .subs-checkbox-wrapper .subs-checkbox .sub-img-wrapper .sub-item-customer-icon[data-v-c7faa030] img{object-fit:contain}.include-subs-wrapper .subs-checkbox-wrapper .subs-checkbox .sub-img-wrapper .sub-item-customer-icon[data-v-c7faa030] img:not(.nut-icon__img){filter:brightness(var(--img-brightness))}.sub-item-customer-icon[data-v-43d3ec16] img{filter:brightness(var(--img-brightness))}.sub-item-wrapper[data-v-43d3ec16]{line-height:1.6;margin-left:auto;margin-right:auto;border-radius:var(--item-card-radios);display:flex;flex-direction:row;justify-content:flex-end;background:var(--card-color)}.sub-item-wrapper[data-v-43d3ec16] .nut-avatar{flex-shrink:0;width:56px;height:56px;margin-right:20px;border-radius:12px}.sub-item-wrapper[data-v-43d3ec16] .nut-avatar img{object-fit:contain;border-radius:10px}.sub-item-wrapper .sub-item-content[data-v-43d3ec16]{flex:1}.sub-item-wrapper .sub-item-content .sub-item-title-wrapper[data-v-43d3ec16]{display:flex;justify-content:space-between;align-items:center}.sub-item-wrapper .sub-item-content .sub-item-title-wrapper .sub-item-title[data-v-43d3ec16]{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;word-wrap:break-word;word-break:break-all;overflow:hidden;font-size:16px;color:var(--primary-text-color)}.sub-item-wrapper .sub-item-content .sub-item-detail[data-v-43d3ec16]{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;word-wrap:break-word;word-break:break-all;font-size:12px;color:var(--comment-text-color)}.sub-item-wrapper .sub-item-content .sub-item-detail .second-line-wrapper[data-v-43d3ec16]{width:100%;display:flex;align-items:center;justify-content:space-between}.sub-item-wrapper .sub-item-content .sub-item-detail .second-line-wrapper .task-switch[data-v-43d3ec16]{flex:1;display:flex;align-items:center;flex-direction:row;justify-content:flex-end}.sub-item-wrapper .sub-item-content .sub-item-detail .second-line-wrapper .task-switch span[data-v-43d3ec16]{margin-right:8px;font-weight:400;color:var(--comment-text-color)}.sub-item-wrapper .sub-item-content .sub-item-detail .second-line-wrapper .task-switch .my-switch[data-v-43d3ec16]{height:22px;width:45px;min-width:40px}.sub-item-wrapper .sub-item-content .sub-item-detail .second-line-wrapper .task-switch .my-switch[data-v-43d3ec16] .switch-button{width:18px;height:18px}.sub-item-wrapper .sub-item-content .sub-item-detail p[data-v-43d3ec16]{display:block;line-height:1.8}.sub-item-swipe[data-v-43d3ec16] .nut-swipe__left .sub-item-swipe-btn-wrapper{padding-left:24px}.sub-item-swipe[data-v-43d3ec16] .nut-swipe__right,.sub-item-swipe[data-v-43d3ec16] .nut-swipe__left{display:flex;justify-content:space-around;align-items:center}.sub-item-swipe[data-v-43d3ec16] .nut-swipe__right .sub-item-swipe-btn-wrapper,.sub-item-swipe[data-v-43d3ec16] .nut-swipe__left .sub-item-swipe-btn-wrapper{padding-left:14px}.sub-item-swipe[data-v-43d3ec16] .nut-swipe__right .sub-item-swipe-btn-wrapper:last-child,.sub-item-swipe[data-v-43d3ec16] .nut-swipe__left .sub-item-swipe-btn-wrapper:last-child{padding-right:14px}.sub-item-swipe[data-v-43d3ec16] .nut-swipe__right .sub-item-swipe-btn-wrapper .sub-item-swipe-btn,.sub-item-swipe[data-v-43d3ec16] .nut-swipe__left .sub-item-swipe-btn-wrapper .sub-item-swipe-btn{border-radius:50%;height:46px;width:44px}.copy-sub-link[data-v-43d3ec16]{background-color:transparent;border:none;padding:0 12px;cursor:pointer;display:inline-flex;justify-content:center;align-items:center;margin-left:12px}.copy-sub-link svg[data-v-43d3ec16]{width:16px;height:16px;color:var(--lowest-text-color)}.sub-img-wrappers[data-v-43d3ec16]{display:flex;align-items:center}.artifact-panel .nut-dialog{width:83vw}.artifact-panel .nut-dialog .nut-dialog__content{max-height:72vh!important}.artifact-panel .nut-dialog .nut-dialog__content .nut-form .nut-cell-group__warp{background:transparent}.artifact-panel .nut-dialog .nut-dialog__content .nut-form .nut-cell-group__warp .nut-cell:after{border-color:transparent}.artifact-panel .nut-dialog .nut-dialog__content .nut-form .nut-cell-group__warp .nut-form-item{padding-left:8px;padding-right:8px;background:inherit;flex-direction:column}.artifact-panel .nut-dialog .nut-dialog__content .nut-form .nut-cell-group__warp .nut-form-item .nut-input{padding:8px;border-color:var(--divider-color)}.artifact-panel .nut-dialog .nut-dialog__content .nut-form .nut-cell-group__warp .nut-form-item .artifact-radio-group{display:grid;grid-template-columns:1fr 1fr}.artifact-panel .nut-dialog .nut-dialog__content .nut-form .nut-cell-group__warp .nut-form-item .artifact-radio-group .nut-radio{margin:20px 0 0}.nut-input-text{color:var(--divider-color)}.readonly{border-color:var(--divider-color)}.sync-title[data-v-794a3bb3]{display:flex;justify-content:space-between}.sync-title .actions-wrapper[data-v-794a3bb3]{margin-right:16px}.sync-title .actions-wrapper .btn[data-v-794a3bb3]:not(:last-child){margin-right:8px}.upload-all-btn[data-v-794a3bb3],.preview-btn[data-v-794a3bb3]{color:var(--comment-text-color)!important;border:none;background:none;width:44px}.upload-all-btn[data-v-794a3bb3] view,.preview-btn[data-v-794a3bb3] view{display:flex;justify-content:center;align-items:center}.upload-all-btn svg[data-v-794a3bb3],.preview-btn svg[data-v-794a3bb3]{width:20px;height:20px}.draggable-itemsync[data-v-794a3bb3]{margin-top:4px;margin-bottom:12px}.page-wrapper[data-v-c2692870]{min-height:100%;padding:0 var(--safe-area-side);flex-direction:column;align-items:center}.page-wrapper .cell-item[data-v-c2692870]{box-shadow:none;background:var(--card-color);border-radius:var(--item-card-radios);font-weight:700;display:flex;align-items:center}.page-wrapper .cell-item[data-v-c2692870] .nut-cell__value{font-weight:400;color:var(--lowest-text-color)}.page-wrapper .cell-group[data-v-c2692870]{width:100%}.page-wrapper .cell-group[data-v-c2692870] .nut-cell-group__warp{border-radius:var(--item-card-radios);overflow:hidden}.desc-title[data-v-c2692870]{padding:0 10px;color:var(--comment-text-color);font-size:12px;margin-top:8px;margin-bottom:20px;text-align:left}.desc-about[data-v-c2692870]{padding:100px 5px 320px;color:var(--comment-text-color);font-size:12px;margin-top:8px;margin-bottom:20px;text-align:left}.desc-about span[data-v-c2692870]{display:inline-block;padding:6px 0 0}.desc-title a[data-v-c2692870],.desc-about a[data-v-c2692870]{color:var(--primary-color)}.env-block[data-v-c2692870]{position:absolute;bottom:60px;left:0;width:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;font-size:12px;color:var(--lowest-text-color);opacity:.3}.More-title[data-v-c2692870]{border-radius:var(--item-card-radios);padding:0 13px;color:var(--comment-text-color);font-size:14px;line-height:16px;margin-top:16px;text-align:left;font-weight:700}.More-title[data-v-c2692870]:not(:first-child){margin-top:36px}.profile-block[data-v-c2692870]{width:100%}.profile-block .config-card[data-v-c2692870]{margin-top:10px;width:100%;padding:15px;border-radius:var(--item-card-radios);color:var(--second-text-color);background:var(--card-color)}.profile-block .config-card .title-wrapper[data-v-c2692870]{display:flex;justify-content:space-between;align-items:center}.profile-block .config-card h1[data-v-c2692870]{font-size:14px;padding:8px 0;margin-bottom:8px}.profile-block .config-card .config-input-wrapper .input.nut-input-disabled[data-v-c2692870] input:disabled{-webkit-text-fill-color:var(--lowest-text-color)}.profile-block .config-card .config-input-wrapper .input[data-v-c2692870]{background:transparent;padding:5px;color:var(--second-text-color)}.profile-block .config-card .config-input-wrapper .input[data-v-c2692870] img{width:16px;height:16px;margin-right:6px;opacity:.2;filter:brightness(var(--img-brightness))}.profile-block .config-card .config-input-wrapper .input[data-v-c2692870]:not(:first-child){margin-top:8px}.profile-block .config-card .config-btn-wrapper[data-v-c2692870]{margin-top:-9px;display:flex;justify-content:flex-end}.profile-block .config-card .config-btn-wrapper .cancel-btn[data-v-c2692870]{margin-left:8px;background:transparent}.profile-block .config-card .config-btn-wrapper .save-btn[data-v-c2692870]{margin-left:8px}.profile-block .info[data-v-c2692870]{width:100%;display:flex;justify-content:space-between;align-items:center;padding:24px 0}.profile-block .info .avatar-wrapper[data-v-c2692870]{display:flex;align-items:center;max-width:64%}.profile-block .info .avatar-wrapper .avatar-normal[data-v-c2692870] img{width:72%}.profile-block .info .avatar-wrapper .name[data-v-c2692870]{margin-left:12px;font-size:18px;font-weight:700;max-width:64%;display:flex;flex-direction:column}.profile-block .info .avatar-wrapper .name p.title[data-v-c2692870]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--primary-text-color)}.profile-block .info .avatar-wrapper .name .des[data-v-c2692870]{margin-top:6px;font-size:12px;font-weight:400;display:flex;flex-direction:column;color:var(--comment-text-color)}.profile-block .info .actions[data-v-c2692870]{margin-left:12px;display:flex;flex-direction:column}.profile-block .info .actions svg[data-v-c2692870]{margin-right:4px}.profile-block .info .actions .upload-btn[data-v-c2692870],.profile-block .info .actions .download-btn[data-v-c2692870]{padding:0 12px;width:116px}.profile-block .info .actions .upload-btn[data-v-c2692870]{background:transparent}.profile-block .info .actions .download-btn[data-v-c2692870]{margin-top:12px}.profile-block .change-themes[data-v-c2692870]{box-shadow:none;font-weight:700}.hostapi-comment[data-v-c2692870]{font-size:12px;color:var(--comment-text-color);margin-top:8px}.cell-item[data-v-85c4d4d9]{box-shadow:none;background:var(--card-color);border-radius:var(--item-card-radios);font-weight:700;display:flex;align-items:center}.cell-item[data-v-85c4d4d9] .nut-cell__value{font-weight:400;color:var(--primary-color)}.cell-item .bclass[data-v-85c4d4d9]{margin-left:10px;color:var(--comment-text-color);font-size:12px;font-weight:100}.page-wrapper[data-v-85c4d4d9]{min-height:100%}.page-wrapper .block-title[data-v-85c4d4d9]{color:var(--comment-text-color);font-size:18px;font-weight:700;margin-bottom:10px;margin-left:30px}.page-wrapper .block-content[data-v-85c4d4d9]{display:flex;flex-direction:column;gap:1px;margin:0 var(--safe-area-side);border-radius:var(--item-card-radios);overflow:hidden}.page-wrapper .about-wrapper[data-v-85c4d4d9]{margin-top:16px}.page-wrapper .about-wrapper .project-block[data-v-85c4d4d9]{padding:var(--safe-area-side);background:var(--card-color);display:flex;justify-content:space-between}.page-wrapper .about-wrapper .project-block>p[data-v-85c4d4d9]{display:flex;align-items:center;gap:1px;font-size:12px;color:var(--comment-text-color)}.page-wrapper .about-wrapper .project-block>p span[data-v-85c4d4d9]:first-child{font-size:14px;color:var(--primary-text-color)}.page-wrapper .about-wrapper .project-block>a[data-v-85c4d4d9]{color:var(--primary-color);font-size:12px;text-decoration:none}.page-wrapper .changelog-wrapper[data-v-85c4d4d9]{margin-top:44px;padding-bottom:36px}.page-wrapper .changelog-wrapper .changelog-title[data-v-85c4d4d9]{font-size:16px;font-weight:400}.page-wrapper .changelog-wrapper .changelog-content[data-v-85c4d4d9]{font-size:12px;padding-bottom:12px}.page-wrapper[data-v-9f06efd9]{min-height:100%;padding:16px var(--safe-area-side);color:var(--second-text-color)}.page-wrapper .cell[data-v-9f06efd9]{box-shadow:none;font-weight:700}.page-wrapper .cell .backend-icon[data-v-9f06efd9]{opacity:.64;height:48px;aspect-ratio:1}.page-wrapper .cell .backend-title[data-v-9f06efd9]{margin-left:12px;font-size:16px}.page-wrapper .cell .backend-version[data-v-9f06efd9]{font-size:14px;color:var(--comment-text-color);margin-left:auto}.page-wrapper .api-list-item[data-v-9f06efd9]{width:100%;display:flex;justify-content:space-between;align-items:center}.page-wrapper .api-list-item .api-item-left[data-v-9f06efd9]{display:flex;flex-direction:column;gap:4px}.page-wrapper .api-list-item .api-item-left[data-v-9f06efd9] .nut-tag{background:transparent!important;height:20px}.page-wrapper .api-list-item .api-item-left>h2[data-v-9f06efd9]{display:flex;align-items:center;gap:8px;font-size:16px;line-height:20px;font-weight:700;color:var(--second-text-color)}.page-wrapper .api-list-item .api-item-left>p[data-v-9f06efd9]{font-size:12px;color:var(--comment-text-color)}.page-wrapper .api-list-item .api-item-right[data-v-9f06efd9]{font-size:20px;color:var(--comment-text-color)}.page-wrapper .add-api-wrapper[data-v-9f06efd9]{margin-top:8px;background:var(--card-color);padding:16px;border-radius:12px;display:flex;align-items:center;gap:16px}.page-wrapper .add-api-wrapper .add-form-wrapper[data-v-9f06efd9]{flex:1}.page-wrapper .add-api-wrapper .add-form-wrapper .input[data-v-9f06efd9]{background:transparent;padding:8px;color:var(--second-text-color);font-size:14px}.page-wrapper .add-api-wrapper .add-form-wrapper .input[data-v-9f06efd9] img{width:16px;height:16px;margin-right:6px;opacity:.2;filter:brightness(var(--img-brightness))}.page-wrapper .add-api-wrapper .add-form-wrapper .input[data-v-9f06efd9]:not(:first-child){margin-top:8px}.page-wrapper .add-api-wrapper .save-btn[data-v-9f06efd9]{width:5%;flex-shrink:0;flex-grow:0;font-size:18px}.page-wrapper .desc-text[data-v-9f06efd9]{padding:0 16px;font-size:12px;color:var(--comment-text-color)}.page-wrapper .desc-text>a[data-v-9f06efd9]{color:var(--primary-color)}*,*:before,*:after{box-sizing:border-box}body,h1,h2,h3,h4,p,figure,blockquote,dl,dd{margin:0}ul[role=list],ol[role=list]{list-style:none}html:focus-within{scroll-behavior:smooth}body{min-height:100vh;text-rendering:optimizeSpeed;line-height:1.5}a:not([class]){text-decoration-skip-ink:auto}img,picture{max-width:100%;display:block}input,button,textarea,select{font:inherit}@media (prefers-reduced-motion:reduce){html:focus-within{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}.nav-bar-wrapper{position:fixed;width:100%;top:0;height:var(--5126dd39);z-index:20}.nav-bar-wrapper nav .nut-navbar{height:var(--5126dd39);top:0;box-shadow:none;backdrop-filter:blur(var(--nav-bar-blur));-webkit-backdrop-filter:blur(var(--nav-bar-blur));background:var(--nav-bar-color);border-bottom:var(--divider-color) solid 1px}.nav-bar-wrapper nav .nut-navbar .nut-navbar__title{min-width:53%;margin:0 auto;position:relative;left:-7px;text-align:center;display:flex;justify-content:center;align-items:center}.nav-bar-wrapper nav .nut-navbar .nut-navbar__title .title{min-width:20px;font-size:18px;font-weight:600;color:var(--primary-text-color);display:nowrap;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden}.nav-bar-wrapper nav .nut-navbar .nut-navbar__title .nutui-iconfont{margin-left:5px}.nav-bar-wrapper nav .nut-navbar .navBar-right-icon{padding:15px 4px 15px 10px;color:var(--icon-nav-bar-right)}.nav-bar-wrapper nav .nut-navbar .fa-lg{position:absolute;right:15px;top:50%;transform:translateY(-50%)}.nav-bar-wrapper nav .nut-navbar .fa-toggle{position:absolute;right:58px;top:50%;transform:translateY(-50%)}.nav-bar-lang-switch-popup>.nut-cell-group{width:100%;background-color:var(--popup-color)}.nav-bar-lang-switch-popup>.nut-cell-group>.nut-cell-group__title{color:var(--comment-text-color)}.nav-bar-lang-switch-popup>.nut-cell-group>.nut-cell-group__warp{background-color:var(--popup-color)}.nav-bar-lang-switch-popup>.nut-cell-group>.nut-cell-group__warp>.nut-cell{background-color:var(--popup-color)}.nav-bar-lang-switch-popup>.nut-cell-group>.nut-cell-group__warp>.nut-cell:after{border-color:var(--divider-color)}.nav-bar-lang-switch-popup>.nut-cell-group>.nut-cell-group__warp>.nut-cell:not(.selected){color:var(--primary-text-color)}.nav-bar-lang-switch-popup>.nut-cell-group .selected.nut-cell{color:var(--primary-color);font-weight:700;display:flex;align-items:center;flex-direction:row-reverse}.icon-back:before{color:var(--primary-text-color);content:"\e6c9"}.icon-null:before{content:"\2003"}#app{font-family:Roboto,nutui-iconfont,Noto Sans,Arial,PingFang SC,Source Han Sans SC,Source Han Sans CN,Microsoft YaHei,ST Heiti,SimHei,sans-serif;display:flex;flex-direction:column;position:absolute;height:100%;width:100%;background:var(--background-color);overflow:hidden;overflow-y:auto}#app .page-body{flex:1;display:flex;flex-direction:column;overflow:auto} 2 | --------------------------------------------------------------------------------