// ==UserScript== // @name DoubanFlix - 在豆瓣页面获取添加资源链接(网盘,磁力,在线),支持电影,游戏,音乐,书籍 // @namespace http://tampermonkey.net/ // @version 1.1.5 // @description 在豆瓣页面获取添加资源链接(网盘,磁力,在线),支持电影,游戏,音乐,书籍 // @updatenote 1. 添加对百度,天翼,夸克,B站链接的有效性识别 // @author Moz // @match https://movie.douban.com/subject/* // @match https://www.douban.com/game/* // @match https://music.douban.com/subject/* // @match https://book.douban.com/subject/* // @grant GM_xmlhttpRequest // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @connect scriptcat.org // @connect lanzoum.com // @connect baidu.com // @connect weiyun.com // @connect aliyundrive.com // @connect cloud.189.cn // @connect 123pan.com // @connect quark.cn // @connect xunlei.com // @connect cowtransfer.com // @connect wenshushu.cn // @connect 115cdn.com // @connect bilibili.com // @license MIT // @icon https://cdn.zerror.cc/images/%E8%B1%86%E7%93%A3%E7%BD%91.png // ==/UserScript== // 注入CSS样式 (function() { const style = document.createElement('style'); style.textContent = `.auth-switch[data-v-d47a81a4]{display:flex;justify-content:center;margin-bottom:16px}.switch-container[data-v-d47a81a4]{position:relative;display:flex;background:#f8f9fa;border-radius:8px;padding:4px;width:200px;height:30px}.switch-input[data-v-d47a81a4]{position:absolute;opacity:0;pointer-events:none}.switch-label[data-v-d47a81a4]{flex:1;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:500;color:#666;cursor:pointer;transition:color .3s ease;z-index:2;position:relative}.switch-input:checked+.switch-label[data-v-d47a81a4]{color:#007bff}.slider[data-v-d47a81a4]{position:absolute;top:4px;left:0;width:46%;height:calc(100% - 8px);background:#fff;border-radius:6px;box-shadow:0 2px 4px #0000001a;transition:left .3s ease;z-index:1}.switch-label[data-v-d47a81a4]:hover{color:#007bff}.switch-input:checked+.switch-label[data-v-d47a81a4]{color:#007bff;font-weight:600}@media (max-width: 480px){.switch-container[data-v-d47a81a4]{width:180px;height:36px}.switch-label[data-v-d47a81a4]{font-size:13px}}.toast-container[data-v-52e28bd4]{position:fixed;top:20px;left:50%;transform:translate(-50%);z-index:10000;pointer-events:none}.toast[data-v-52e28bd4]{background:#fff;border-radius:8px;padding:12px 16px;margin-bottom:10px;box-shadow:0 4px 12px #00000026;display:flex;align-items:center;justify-content:space-between;min-width:300px;max-width:500px;pointer-events:auto;cursor:pointer;animation:slideDown-52e28bd4 .3s ease-out;transition:all .3s ease}.toast[data-v-52e28bd4]:hover{transform:translateY(-2px);box-shadow:0 6px 16px #0003}.error-toast[data-v-52e28bd4]{background:#fff5f5}.error-toast span[data-v-52e28bd4]{color:#721c24}.success-toast[data-v-52e28bd4]{background:#f0fff4}.success-toast span[data-v-52e28bd4]{color:#155724}.toast-close[data-v-52e28bd4]{background:none;border:none;font-size:18px;font-weight:700;color:#999;cursor:pointer;margin-left:12px;padding:0;line-height:1}.toast-close[data-v-52e28bd4]:hover{color:#666}@keyframes slideDown-52e28bd4{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}.auth-container[data-v-09cfbe3d]{padding:16px}.user-info[data-v-09cfbe3d]{text-align:center}.user-header[data-v-09cfbe3d]{display:flex;align-items:center;margin-bottom:16px;padding:12px;background:#f8f9fa;border-radius:8px;position:relative}.user-avatar[data-v-09cfbe3d]{width:40px;height:40px;border-radius:50%;background:#007bff;color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:16px;margin-right:12px}.user-details[data-v-09cfbe3d]{flex:1;text-align:left}.user-display-name[data-v-09cfbe3d]{font-size:14px;font-weight:500;color:#333;margin-bottom:2px}.user-email[data-v-09cfbe3d]{font-size:12px;color:#666;margin-bottom:2px}.user-status[data-v-09cfbe3d]{font-size:12px;color:#28a745}.user-stats[data-v-09cfbe3d]{margin-top:8px;display:flex;gap:16px}.stat-item[data-v-09cfbe3d]{display:flex;align-items:center;font-size:12px}.stat-icon[data-v-09cfbe3d]{width:16px;height:16px;display:flex;align-items:center;justify-content:center;color:#4caf50}.stat-icon.down-icon[data-v-09cfbe3d]{color:#868686;transform:rotate(180deg)}.stat-icon svg[data-v-09cfbe3d]{width:100%;height:100%}.stat-label[data-v-09cfbe3d]{color:#666;font-weight:500}.stat-value[data-v-09cfbe3d]{color:#333;font-weight:600;background:#f8f9f0;border-radius:12px;min-width:20px;text-align:center}.edit-nickname-btn[data-v-09cfbe3d]{position:absolute;top:12px;right:12px;padding:4px 8px;background:#e3f2fd;color:#1976d2;border:none;border-radius:4px;cursor:pointer;font-size:11px;transition:all .2s}.edit-nickname-btn[data-v-09cfbe3d]:hover{background:#e8f5ff}.nickname-edit-form[data-v-09cfbe3d]{margin-bottom:16px;padding:12px;background:#fff;border:1px solid #dee2e6;border-radius:8px}.nickname-edit-form .form-group[data-v-09cfbe3d]{flex-direction:column;align-items:flex-start;gap:4px}.nickname-edit-form .form-group label[data-v-09cfbe3d]{text-align:left;min-width:auto;margin-bottom:2px}.nickname-hint[data-v-09cfbe3d]{font-size:11px;color:#666;margin-top:4px}.nickname-actions[data-v-09cfbe3d]{display:flex;gap:8px;margin-top:12px}.save-nickname-btn[data-v-09cfbe3d]{padding:6px 12px;background:#beecc859;color:#2e8339;border:none;border-radius:4px;cursor:pointer;font-size:12px;transition:background-color .2s}.save-nickname-btn[data-v-09cfbe3d]:hover:not(:disabled){background:#cef3d6}.save-nickname-btn[data-v-09cfbe3d]:disabled{background:#cef3d6;cursor:not-allowed}.cancel-nickname-btn[data-v-09cfbe3d]{padding:6px 12px;background:#f1f1f1;color:#828282;border:none;border-radius:4px;cursor:pointer;font-size:12px;transition:background-color .2s}.cancel-nickname-btn[data-v-09cfbe3d]:hover{background:#e4e4e4}.sign-out-btn[data-v-09cfbe3d]{width:100%;padding:8px 16px;background:#ffe4e6;color:#f33;border:none;border-radius:4px;cursor:pointer;font-size:13px;transition:background-color .2s}.sign-out-btn[data-v-09cfbe3d]:hover{background:#ffedef}.auth-forms[data-v-09cfbe3d]{width:100%}.auth-form[data-v-09cfbe3d]{display:flex;flex-direction:column;gap:12px}.form-group[data-v-09cfbe3d]{display:flex;align-items:center;gap:6px}.form-group label[data-v-09cfbe3d]{font-size:12px;color:#333;margin-bottom:0;font-weight:500;white-space:nowrap;min-width:50px;text-align:right}.auth-form[data-mode=login] .form-group[data-v-09cfbe3d]{display:flex;flex-direction:column;align-items:flex-start;gap:4px}.auth-form[data-mode=login] .form-group label[data-v-09cfbe3d]{text-align:left;min-width:auto;margin-bottom:2px}.auth-form[data-mode=login] .input-wrapper[data-v-09cfbe3d]{width:100%;border:1px solid #ddd;border-radius:8px;transition:border-color .2s}.auth-form[data-mode=login] .input-wrapper[data-v-09cfbe3d]:focus-within{border-color:none;box-shadow:none}.auth-form[data-mode=login] .form-input[data-v-09cfbe3d]{width:95%;margin:8px;padding:0;border:none;border-radius:0;font-size:13px;background:transparent;outline:none}.auth-form[data-mode=login] .form-input[data-v-09cfbe3d]:focus{border-color:none;box-shadow:none}.form-input[data-v-09cfbe3d]{padding:8px 12px;border:1px solid #ddd;border-radius:8px;font-size:13px;transition:border-color .2s}.form-input[data-v-09cfbe3d]:focus{outline:none}.auth-submit-btn[data-v-09cfbe3d]{padding:10px 16px;background:#e9f4ff;color:#00a2ef;border:1px solid #bfe2ff;border-radius:8px;cursor:pointer;font-size:13px;font-weight:500;transition:background-color .2s;margin-top:8px}.auth-submit-btn[data-v-09cfbe3d]:hover:not(:disabled){background:#cce5ff}.auth-submit-btn[data-v-09cfbe3d]:disabled{background:#c4e0fe;cursor:not-allowed}.forgot-password-link[data-v-09cfbe3d]{text-align:center;margin-top:15px}.link-btn[data-v-09cfbe3d]{background:none;border:none;color:#007bff;cursor:pointer;text-decoration:underline;font-size:14px;padding:0}.link-btn[data-v-09cfbe3d]:hover{color:#0056b3}.link-btn[data-v-09cfbe3d]:disabled{color:#6c757d;cursor:not-allowed;text-decoration:none}.back-button[data-v-09cfbe3d]{margin-bottom:20px}.back-btn[data-v-09cfbe3d]{background:none;border:none;color:#6c757d;cursor:pointer;font-size:14px;padding:8px 0;display:flex;align-items:center;gap:5px}.back-btn[data-v-09cfbe3d]:hover{color:#495057}.form-title[data-v-09cfbe3d]{font-size:24px;font-weight:700;text-align:center;margin-bottom:10px;color:#333}.form-description[data-v-09cfbe3d]{font-size:14px;color:#6c757d;text-align:center;margin-bottom:25px;line-height:1.5}.proof-progress[data-v-09cfbe3d]{margin:20px 0}.progress-text[data-v-09cfbe3d]{font-size:14px;color:#6c757d;text-align:center;margin-bottom:10px}.progress-bar[data-v-09cfbe3d]{width:100%;height:8px;background-color:#e9ecef;border-radius:4px;overflow:hidden}.progress-fill[data-v-09cfbe3d]{height:100%;background:linear-gradient(90deg,#007bff,#0056b3);transition:width .3s ease;border-radius:4px}.resend-code[data-v-09cfbe3d]{text-align:center;margin-top:15px}.error-message[data-v-09cfbe3d]{padding:8px 12px;background:#f8d7da;color:#721c24;border:1px solid #f5c6cb;border-radius:4px;font-size:12px;margin-top:12px}.success-message[data-v-09cfbe3d]{padding:8px 12px;background:#d4edda;color:#155724;border:1px solid #c3e6cb;border-radius:4px;font-size:12px;margin-top:12px}.initializing-container[data-v-09cfbe3d]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;text-align:center}.initializing-container .loading-spinner[data-v-09cfbe3d]{width:32px;height:32px;border:3px solid #f3f3f3;border-top:3px solid #007bff;border-radius:50%;animation:spin-09cfbe3d 1s linear infinite;margin-bottom:16px}.initializing-container p[data-v-09cfbe3d]{color:#6c757d;font-size:14px;margin:0}@keyframes spin-09cfbe3d{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.custom-select[data-v-3b2cba4f]{position:relative;width:100%;font-size:14px}.select-trigger[data-v-3b2cba4f]{display:flex;align-items:center;justify-content:space-between;padding:4px 8px;border:1px solid #ddd;border-radius:8px;background-color:#fff;cursor:pointer;transition:all .2s ease;color:#333}.select-trigger[data-v-3b2cba4f]:focus{outline:none}.selected-text[data-v-3b2cba4f]{flex:1;text-align:left;color:#333}.arrow[data-v-3b2cba4f]{width:16px!important;height:16px!important;transition:transform .2s ease;color:#666!important;background:none!important;background-image:none!important;border:none!important;transform-origin:center!important;display:inline-block!important}.arrow-up[data-v-3b2cba4f]{transform:rotate(180deg);padding-left:0}.select-dropdown[data-v-3b2cba4f]{position:absolute;top:110%;left:0;right:0;background:#fff;border:1px solid #ddd;border-radius:6px;box-shadow:0 4px 6px #0000001a;z-index:1000;max-height:400px;overflow-y:auto}.select-option[data-v-3b2cba4f]{padding:4px 12px;cursor:pointer;transition:all .2s ease;color:#666;background-color:#fff;border-radius:6px;margin:2px}.select-option[data-v-3b2cba4f]:hover{background-color:#f5f5f5!important;color:#333!important}.select-option.selected[data-v-3b2cba4f]{background-color:#e3f2fd;color:#1976d2;font-weight:500}.select-option.selected[data-v-3b2cba4f]:hover{background-color:#bbdefb!important;color:#1565c0!important}@media (prefers-color-scheme: dark){.select-trigger[data-v-3b2cba4f]{background-color:#2d3748;border-color:#4a5568;color:#e2e8f0}.selected-text[data-v-3b2cba4f]{color:#e2e8f0}.arrow[data-v-3b2cba4f]{color:#a0aec0}.select-dropdown[data-v-3b2cba4f]{border-radius:4px;background-color:#2d3748;border-color:#4a5568}.select-option[data-v-3b2cba4f]{color:#a0a0a0;background-color:#2d3748}.select-option[data-v-3b2cba4f]:hover{background-color:#718096!important;color:#f7fafc!important}.select-option.selected[data-v-3b2cba4f]{background-color:#2b6cb0;color:#90cdf4}.select-option.selected[data-v-3b2cba4f]:hover{background-color:#2c5282!important;color:#bee3f8!important}}.loading-container[data-v-da15572b]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:30px 20px;text-align:center}.spinner[data-v-da15572b]{width:32px;height:32px;border:3px solid #e0e0e0;border-top:3px solid #00a1d6;border-radius:50%;animation:spin-da15572b 1s linear infinite;margin-bottom:12px}.loading-text[data-v-da15572b]{color:#666;font-size:14px;font-weight:500}.loading-container.small .spinner[data-v-da15572b]{width:20px;height:20px;border-width:2px;margin-bottom:8px}.loading-container.small .loading-text[data-v-da15572b]{font-size:12px}.loading-container.large .spinner[data-v-da15572b]{width:48px;height:48px;border-width:4px;margin-bottom:16px}.loading-container.large .loading-text[data-v-da15572b]{font-size:16px}@keyframes spin-da15572b{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (max-width: 480px){.loading-container[data-v-da15572b]{padding:20px 15px}.spinner[data-v-da15572b]{width:28px;height:28px;border-width:2px}.loading-text[data-v-da15572b]{font-size:13px}}.link-item.skeleton[data-v-115afd35]{background:#f8f9fa;border:1px solid #e9ecef;border-radius:8px;padding:16px;margin-bottom:12px}.skeleton-element[data-v-115afd35]{background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200% 100%;animation:skeleton-loading-115afd35 1.5s infinite;border-radius:4px}@keyframes skeleton-loading-115afd35{0%{background-position:200% 0}to{background-position:-200% 0}}.link-header[data-v-115afd35]{display:flex;align-items:center;gap:12px;margin-bottom:12px}.platform-badge[data-v-115afd35]{display:flex;align-items:center;gap:6px}.skeleton-icon[data-v-115afd35]{width:20px;height:20px;border-radius:50%}.link-meta[data-v-115afd35]{display:flex;flex-direction:column;gap:6px}.skeleton-language[data-v-115afd35]{width:40px;height:16px}.feature-tags[data-v-115afd35]{display:flex;gap:6px}.skeleton-tag[data-v-115afd35]{width:30px;height:14px}.link-title-row[data-v-115afd35]{display:flex;align-items:center;justify-content:space-between}.skeleton-title[data-v-115afd35]{width:70%;height:20px}.skeleton-arrow[data-v-115afd35]{width:16px;height:16px;border-radius:2px}.ios-checkbox[data-v-150f8c13]{--checkbox-size: 28px;--checkbox-color: #3b82f6;--checkbox-bg: #dbeafe;--checkbox-border: #93c5fd;position:relative;display:inline-flex;align-items:center;justify-content:flex-start;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;vertical-align:middle}.ios-checkbox input[data-v-150f8c13]{display:none}.checkbox-wrapper[data-v-150f8c13]{position:relative;width:var(--checkbox-size);height:var(--checkbox-size);border-radius:8px;flex-shrink:0;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.checkbox-bg[data-v-150f8c13]{position:absolute;top:0;left:0;right:0;bottom:0;border-radius:8px;border:1px solid #d5d5d5;background:#fff;transition:all .2s ease}.checkbox-icon[data-v-150f8c13]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) scale(0);width:16px;height:16px;color:#fff;transition:all .2s ease}.check-path[data-v-150f8c13]{stroke-dasharray:40;stroke-dashoffset:40;transition:stroke-dashoffset .3s ease .1s}.checkbox-label[data-v-150f8c13]{font-size:14px;color:#374151;font-weight:500;line-height:28px;height:28px;display:flex;align-items:center}.ios-checkbox input:checked+.checkbox-wrapper .checkbox-bg[data-v-150f8c13]{background:var(--checkbox-color);border-color:var(--checkbox-color)}.ios-checkbox input:checked+.checkbox-wrapper .checkbox-icon[data-v-150f8c13]{transform:translate(-50%,-50%) scale(1)}.ios-checkbox input:checked+.checkbox-wrapper .check-path[data-v-150f8c13]{stroke-dashoffset:0}.ios-checkbox:hover .checkbox-wrapper[data-v-150f8c13]{transform:scale(1.05)}.ios-checkbox:active .checkbox-wrapper[data-v-150f8c13]{transform:scale(.95)}.ios-checkbox input:focus+.checkbox-wrapper .checkbox-bg[data-v-150f8c13]{box-shadow:0 0 0 4px var(--checkbox-bg)}.ios-checkbox.blue[data-v-150f8c13]{--checkbox-color: #3b82f6;--checkbox-bg: #dbeafe;--checkbox-border: #93c5fd}.ios-checkbox.green[data-v-150f8c13]{--checkbox-color: #10b981;--checkbox-bg: #d1fae5;--checkbox-border: #6ee7b7}.ios-checkbox.purple[data-v-150f8c13]{--checkbox-color: #8b5cf6;--checkbox-bg: #ede9fe;--checkbox-border: #c4b5fd}.ios-checkbox.red[data-v-150f8c13]{--checkbox-color: #ef4444;--checkbox-bg: #fee2e2;--checkbox-border: #fca5a5}@keyframes bounce-150f8c13{0%,to{transform:scale(1)}50%{transform:scale(1.1)}}.ios-checkbox input:checked+.checkbox-wrapper[data-v-150f8c13]{animation:bounce-150f8c13 .3s cubic-bezier(.4,0,.2,1)}.copy-item[data-v-aaaa00e5]{position:relative;display:inline-block;cursor:pointer;color:#007bff;text-decoration:none;transition:all .4s cubic-bezier(.23,1,.32,1);word-break:break-all}.copy-item[data-v-aaaa00e5]:hover{text-decoration:underline;background-color:transparent}.tooltip[data-v-aaaa00e5]{position:absolute;top:-35px;left:50%;transform:translate(-50%);padding:6px 12px;background:#333333d1;color:#fff;border-radius:4px;font-size:12px;white-space:nowrap;opacity:0;visibility:hidden;pointer-events:none;transition:all .3s ease;z-index:1000}.tooltip[data-v-aaaa00e5]:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);border:5px solid transparent;border-top-color:#333333d1}.copy-item:hover .tooltip[data-v-aaaa00e5]{opacity:1;visibility:visible;top:-40px}.extract-code[data-v-aaaa00e5]{position:relative;display:inline-block;background:#f8f9fa;padding:2px 6px;border-radius:3px;font-family:monospace;color:#e83e8c;cursor:pointer;transition:all .3s ease}.extract-code[data-v-aaaa00e5]:hover{background:#e9ecef}.extract-code:hover .tooltip[data-v-aaaa00e5]{opacity:1;visibility:visible;top:-40px}.link-manager[data-v-6389179c]{max-width:1000px;margin:0 auto}.link-stats[data-v-6389179c]{display:flex;gap:20px;margin-bottom:20px;padding:15px;background:#f5f5f5;border-radius:8px}.stat-item[data-v-6389179c]{display:flex;flex-direction:column;align-items:center}.stat-label[data-v-6389179c]{font-size:12px;color:#666;margin-bottom:4px}.stat-value[data-v-6389179c]{font-size:18px;font-weight:700;color:#333}.add-link-section[data-v-6389179c]{margin-bottom:20px;display:flex;align-items:center;gap:10px}.add-link-btn[data-v-6389179c]{padding:10px 20px;background:#007bff;color:#fff;border:none;border-radius:6px;cursor:pointer;font-size:14px}.add-link-btn[data-v-6389179c]:hover:not(:disabled){background:#0056b3}.add-link-btn[data-v-6389179c]:disabled{background:#ccc;cursor:not-allowed}.auth-hint[data-v-6389179c]{color:#666;font-size:12px}.add-form[data-v-6389179c]{background:#f9f9f9;padding:20px;border-radius:8px;margin-bottom:20px}.add-form h4[data-v-6389179c]{margin:0 0 15px;color:#333}.form-row[data-v-6389179c]{display:flex;gap:15px}.form-group[data-v-6389179c]{flex:1;display:flex;align-items:center;gap:10px;margin-bottom:24px}.form-group label[data-v-6389179c]{margin-bottom:0;font-weight:540;color:#333;font-size:13px;white-space:nowrap;min-width:80px;text-align:right}.checkbox-group[data-v-6389179c]{display:flex;flex-wrap:wrap;gap:15px}.form-group input[data-v-6389179c],.form-group select[data-v-6389179c]{width:95%;padding:8px 12px;border:1px solid #ddd;border-radius:4px;font-size:14px}.form-group select[data-v-6389179c]:focus{outline:none}.input-wrapper[data-v-6389179c]{width:100%;border:1px solid #ddd;border-radius:6px}.input-wrapper input[data-v-6389179c]{width:95%;border:none;outline:none;font-size:14px;background:transparent}.form-actions[data-v-6389179c]{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.form-actions button[data-v-6389179c]{font-weight:300;padding:10px 20px;border:none;border-radius:8px;cursor:pointer;font-size:14px}.form-actions button[type=submit][data-v-6389179c]{background:#beecc859;color:#2e8339}.form-actions button[type=submit][data-v-6389179c]:hover:not(:disabled){background:#beecc870}.form-actions button[type=submit][data-v-6389179c]:disabled{background:#b1efbf;cursor:not-allowed}.form-actions button[type=button][data-v-6389179c]{background:#f1f1f1;color:#828282}.form-actions button[type=button][data-v-6389179c]:hover{background:#ececec}.filter-bar[data-v-6389179c]{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:20px;border-radius:6px}.filter-controls[data-v-6389179c]{display:flex;gap:10px}.filter-bar .custom-select[data-v-6389179c]{width:auto;min-width:100px}.add-link-btn-compact[data-v-6389179c]{width:32px;height:32px;background:#e6f3ff;color:#007bff;border:none;border-radius:4px;cursor:pointer;font-size:18px;font-weight:700;display:flex;align-items:center;justify-content:center;transition:all .2s ease;flex-shrink:0;line-height:1;padding:0}.add-link-btn-compact[data-v-6389179c]:hover:not(:disabled){background:#dae9f7;transform:scale(1)}.add-link-btn-compact[data-v-6389179c]:disabled{color:#b2b2b2;background:#f5f4f4;cursor:not-allowed;transform:none}.filter-bar select[data-v-6389179c]{padding:6px 10px;border:1px solid #ddd;border-radius:4px;font-size:13px}.links-list[data-v-6389179c]{display:flex;flex-direction:column;gap:15px}.link-item[data-v-6389179c]{background:#fff;border:1px solid rgba(239,239,239,1);border-radius:8px;padding:15px;box-shadow:0 2px 12px #0000000d;transition:box-shadow .3s ease;cursor:pointer}.link-header[data-v-6389179c]{display:flex;align-items:center;gap:10px;margin-bottom:10px}.link-type-badge[data-v-6389179c]{padding:4px 8px;border-radius:4px;font-size:12px;font-weight:700;color:#fff}.link-type-badge.netdisk[data-v-6389179c]{background:#28a745}.link-type-badge.bt[data-v-6389179c]{background:#dc3545}.link-type-badge.online[data-v-6389179c]{background:#007bff}.platform-badge[data-v-6389179c]{padding:4px;background:#fff;color:#fff;border-radius:4px;font-size:12px;display:flex;align-items:center;justify-content:center;border:1px solid #e9ecef}.platform-icon[data-v-6389179c]{width:16px;height:16px;object-fit:contain}.link-meta[data-v-6389179c]{display:flex;justify-content:space-between;align-items:center;width:100%}.file-size[data-v-6389179c]{padding:2px 5px;border-radius:3px;font-size:10px;background:#e3f2fd!important;color:#1976d2!important;font-weight:500}.feature-tags[data-v-6389179c]{display:flex;gap:3px;flex-wrap:wrap;margin-left:auto}.feature-tag[data-v-6389179c]{padding:2px 5px;background:#007bff;color:#fff;border-radius:3px;font-size:10px;font-weight:700}.feature-tag.feature-4k[data-v-6389179c]{border:1px solid #eff524;background:#f6ff00;color:#232323}.feature-tag.feature-hdr[data-v-6389179c]{background:#ffe55a;color:#232323}.feature-tag.feature-dolby[data-v-6389179c]{background:#eaeaea;color:#121212;font-weight:300}.feature-tag.feature-subtitle[data-v-6389179c]{background:#cee2e8;color:#036;font-weight:300}.feature-tag.feature-flac[data-v-6389179c]{background:#ededed;color:#383838;font-weight:500}.feature-tag.feature-wav[data-v-6389179c]{background:#ffe3b3;color:#ce7f0d;font-weight:500}.link-content[data-v-6389179c]{margin-bottom:15px}.link-title-row[data-v-6389179c]{display:flex;align-items:center;justify-content:space-between;padding:5px 0;margin-bottom:8px;border-radius:4px;transition:background-color .2s ease}.link-title[data-v-6389179c]{font-weight:500;color:#333;flex:1;overflow:hidden;position:relative;padding-right:10px;min-width:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.4;max-height:2.8em;word-break:break-all;overflow-wrap:break-word}.link-title.expanded[data-v-6389179c]{display:block;-webkit-line-clamp:unset;max-height:none;white-space:normal;padding-right:10px;word-break:break-all;overflow-wrap:break-word}.link-title[data-v-6389179c]:after{content:"";position:absolute;top:0;right:0;width:100px;height:100%;background:linear-gradient(to right,transparent,#ffffff 85%);pointer-events:none;transition:opacity .3s ease}.link-title.expanded[data-v-6389179c]:after{opacity:0}.expand-arrow[data-v-6389179c]{display:flex;align-items:center;justify-content:center;width:24px;height:24px;color:#666;transition:transform .3s ease,color .2s ease}.expand-arrow[data-v-6389179c]:hover{color:#333}.expand-arrow.expanded[data-v-6389179c]{transform:rotate(180deg)}.link-details[data-v-6389179c]{margin-top:10px;animation:slideDown-6389179c .3s ease forwards}.link-status[data-v-6389179c]{display:flex;align-items:center;gap:8px;margin-bottom:12px;padding:8px 12px;background:#f8f9fa;border-radius:6px;border-left:3px solid #dee2e6}.status-label[data-v-6389179c]{font-size:13px;color:#666;font-weight:500}.status-badge[data-v-6389179c]{font-size:13px;font-weight:500;padding:2px 8px;border-radius:12px;background:#0000000d}.status-badge.success[data-v-6389179c]{background:#52c41a1a;border:1px solid rgba(82,196,26,.2)}.status-badge.warning[data-v-6389179c]{background:#faad141a;border:1px solid rgba(250,173,20,.2)}.status-badge.error[data-v-6389179c]{background:#ff4d4f1a;border:1px solid rgba(255,77,79,.2)}.status-badge.loading[data-v-6389179c]{background:#1890ff1a;border:1px solid rgba(24,144,255,.2)}.status-badge.partial[data-v-6389179c]{background:#fa8c161a;border:1px solid rgba(250,140,22,.2)}@keyframes slideDown-6389179c{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.link-url[data-v-6389179c]{display:flex;align-items:center;gap:8px;margin-bottom:5px;cursor:pointer}.link-url a[data-v-6389179c]{color:#007bff;text-decoration:none;flex:1;word-break:break-all}.link-url span[data-v-6389179c]:hover{text-decoration:none;background-color:transparent}.link-url[data-v-6389179c]:before{content:"";background-position:center;background-size:100% 100%;background-repeat:no-repeat;box-sizing:border-box;width:0;height:0;margin:0;flex-shrink:0;display:none}.link-url.one-pan-tip-success[data-v-6389179c]:before,.link-url.one-pan-tip-error[data-v-6389179c]:before,.link-url.one-pan-tip-partial[data-v-6389179c]:before,.link-url.one-pan-tip-other[data-v-6389179c]:before,.link-url.one-pan-tip-lock[data-v-6389179c]:before{width:1em;height:1em;margin:0 1px;display:inline-block}.link-url.one-pan-tip-success[data-v-6389179c]:before{content:"";background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAACrUlEQVR4Xt2Yu2sUQRzHV/BFxNzMXhEQkRAEJbd763+gnYIWVjYitrYBC8FaSzttFBs7LQQLMdnZ3SSKWFhoYWFvOl+IoImJ5283Znf2O7PPmz3QL3zIcff9PZidnUcs63/V4Nm07QTskhvaC8PAvuoIfu7Y0tQh9E1EjmD3qIn1YWiP6G8xESHsNYw3qtlodv9wmavFa+Kt9keu35vDvGNpGPAnWKgtruDrmL+V3IBvYfKxoSkwEPYZrFVPI2uXt6JJahAn4texbKW6bmoHJ+xdwNqFooBNTNAlWF8rmlMPMLBzoorm5h9ae5WgSSHYXewnFb3K5t/AuoQlo6aYTRLvEhU7BW1nt7EnGi32CI0GebVThz5/0fye4C1rRo1W9w00GkGw93KdOZ/3FI+E7E1UNcxtoDn7Dus4Pj+LvlyMzxYydwdvIzW1khXY1syidaDGAGSnEc+3T2sMKiG/QWvOYTrKqL9JUFNvpX5Soa+A71mAYJc1hhx0EPSlGhTDP6En8QX8jeyLlYyUxlvARhroBPyKxgDwO1KtRPR9rjk3YEvoqfn4ZDbTYFoqzmsMeQoWQGr487aHp0uCLCVPBW5g/0iD531+BA1FSDVT0ZwL8LuGjy+FpsLHXCI0FFK14VqtHl+Gz0QuWXJxQFMRFc0p/gaciqzdmOwDmkrRzLm2j08GcyZCUyXSyLnPe7z145OQ+0nlrarGOnhNpkEJg5fTNvaUKL73oXlSxIOC/eSEAZPi6FNrH/aiyMRcaYIn2GPsQSs3ZCcxuDOEvYX1S0Ur8DUliWHiuyvWrSU34hcxmUF+Y73GMj3n6BSS33bGEe3698dt8MSL/iheiDG3EVGDt+LbDBYtg+brz+PiYB9zdSa6B96kwmvEN+LX3xGN/+/xNTmfvbb2YMw/rz8ZKxg+Um5CmgAAAABJRU5ErkJggg==)}.link-url.one-pan-tip-error[data-v-6389179c]{text-decoration:line-through}.link-url.one-pan-tip-error[data-v-6389179c]:before{content:"";background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAACm0lEQVR4Xu2Xv47TQBDGfSf+iGQdCSS4gpKr4I6TvQl0lLwEb0HFS9BQ09JR8wQ0UNDQIihAoCsgdhJfOHF3ZsaSrfG36/U6cVIgPumnKPbM7Hh2Z70Ogv/aotI4fJPqcDrXYT4fE/S7oN+ZDpczrb4u9PAx+mxEeRDspFH4jgbO0w7kD0b5/L66hfF6URqpV10TQrii9HCXMPbK4oA4yHqoFzhGJ2XjQWQG7YdEhz9xPC9lR4OIpu4CA/ZJEodfcNxWYZBNQQ//FsduVP9ryk1+GFzHHAzNYvUaHTcNdzvmURPd3UWnPvCZgUQPn2E+lWgnf48OSKKv3ilsPRtDVsO1D/4eO6rmcsRBWGcT00ZyAoPRa+o72kjm++qmtK+Ehg1cSJ+m5DApujZFGxM1lT6Fklh9NA3tnE+wEvX7WFm6lmIMG5ltOunGDA1dcKWkPyfL17FSSce40reQT+dYqE0rnyLkf2qmXxYfJ9K/EJ+n0MgHrFyp1GtNmWCcVStWkD+ESml1ijbe3BvdkLFWTmxpW7BBc7e2gXH4KTM0asPsPnVW/++3CUukfxnkBxq5wEqV3YdrjhsCfV1I30LTSD1CoyYwqdRc6F6bMPJnUl+rldDQhjl99s0TK5d6TOs0Gj6VPpXanowbRNq3bZ74hjhtiU/GO9K+0uJguIfGElmt1Jy+Jqppben8T6WdVXz8sDhVcHL0Xv2G111wTP4QxusSzMNQroPL6LQF/M79tHZeWpw3Aq87HN+pZIUNtysL3TGpUvRhcozB+oKTyu8GV3BMb/FHKQZdF+f5vouyw4FuaXVvaIl8wPhri7aK53z8xcE8+YzxetfJ0bXb9OTLtr3pnF/g8egJzdsuxtiajg+CPTrk7dvfKf+Q/gIqVFE2PCWqFwAAAABJRU5ErkJggg==)}.link-url.one-pan-tip-partial[data-v-6389179c]:before{content:"";background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAHhlWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAADYAAAAAQAAANgAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAADCgAwAEAAAAAQAAADAAAAAAVrtQ3wAAAAlwSFlzAAAhOAAAITgBRZYxYAAABb9JREFUaAXtWd9vG0UQ3t3z2aljN0nlNKVSlLaEuCEQUfIACIQET5UQBSRStS8IIfHGW976lH8g/wBIiCd+KEhAEVKfICCkgsBUBBwnURuIUpGmTohaO45j+27Z75xDe3t79jnEiIic5NzM7OzMN3t7ezMTQg6vwxX4f6+AsZ/hT05OskzmzjEWT/XFjFR/pCM1aMZS/TEz1W10puJHzJRx5cpbOzMzM3y//NJ/amhsbMz8ZbHwICE0TWySJpzHG9qktEQYWSCELzw6lLyVyWSqDfWbDO45AADPLm4/adu1ZwgnsSZ+9MOU7DAW+XZk6Mh3ew2k5QA457Sz8+FzFrWe45wk9chak1JKCgY3vtramrtBKW1pe7UUwMjISHRpufqKZZPh1iCG0zYYnTszEPk0m81Wws0QGzesYk/PWFepWrzMbX4iYA5nhK5Qg85zxldNmxf6+uwCdNfWWLLKaJLa9AFu8bM24f1CrPVNGb0TNxMfbG5m7gX48Yi1RjwagnHAV7be5NxOqGMCR41S9v3ROLuez2eL/nG/pLd3JHG/ZD8l7D0hXuaIqiHsFePRznfCBNH0GMW2Wfuz/JrY+8dURwYjuXg0+X7x/uxcqZQP/diha1XXl44mTv1s80q3eJd6vbZ5tMarp88+dGI2n89b3jEvx7ysl8MLiz2v2zaMGV9uFxc/Clql8fFxI5ZMp/ED7bVc5zAXNmBLHYfPpeXay8Cgjsl8w8F4fPjxGrEuyBNAR5nxcbGY+1WVuzwAf/7F7Ou7e10c+3TlxRdG35ueng5czURi+JGKbb3q2nDvEWJcLZVyP7m8eteuDJRwzq9tlC8J0nPGY7VKxdwPqiGZv7ViDYmVe9qViXOxa3Hp7h9WZWPDlan3SmX9rhk7bot5p+UxTvnJx0ZP/bi6umrLcpcO3EL4SKnnPPZ8uZj7xp0cdDcs//dBJ1PnwzZ8yHJgABZZJtPaALD6zhdW1hSnTYeZvOYRtYGp+6A12TSwAJMsc2ltAE5uo6QHOCqDXljX2H7c4QO+PLYElnq+5ZE6jDYAJzHz6nKc815R+7hdX0pKIZJFzeULACmxk1VKyjhFwn6kpGl7JuELPj0GRKbrYPMIiTjhlGtq6sMeNSVGeqCotZ31+RRpuoNN8ewLoGr4TxDkNsq8trM6nzpsvgCMqj8AJGZtR6w40PnUYfMFYDN/AG5WqfhoK6vzqcPmC6CtqNpg3BcAs4lvuyCfb8V3jRnbqr5OpurIvM6nDpsvAMv0B4BiRDbejD7e3bWEMtHVAw2Zy4e563zqsPmKCdMihR3FAyopIfpNEQeyt29f306l0m8Xy3QMSokOnoEscIJmgNrkpCoGtrIi9D2BiYlLmwStD+lCGSixocj19YVCuTg/gx/oUJMkJW6JFo18CUwONlkmaG09EE2mXyIWPyfp8q5Oc+rf+hqj5Ly3VZ3w4DPojUph4TMJk0P6nkBdgYvGk+eiqGE9kiZMmIosyMSuL2VxfZic6doA0DETz8bzKqAAR3Ef5FSWuxWZ2HqX8UN1FlRWyvNAw0e92JdGBBYHkyRySW1FhurH7OijwtAZV1HcGQrwWmUjK8m05F4qMtcQjSRFHUz6XB53ZkS+Xvl9VnuIaJ8AJqHdJx+FkKGh1ZEYfhZ0Oy7YVptmwAAsQf4CA0CvEu0+daJtW8+jAFflMn/h/OhNOR0GDZmso9KwCduqHBga9U2VF8U7HS2NeDJ9UV0VaKG4b1QfY89fvTY7CF2Ab9SRwMprwYtWY6kwP92oX9owADhHY+vmcu0NXW8IBThq2L2Wmnhhy9XCed0CocU4OBB5t1mftGkACOK/3FoMFcDfQRzU5i4CwNX+9jrJnRkwP2m2bepo6n9DPwF3El7sA/sPDjcI3A/sv5jkINxADuQ/+dRAwKNvg9YHugcowN0aFpUUihHk80iJhZ62UauzeSg7XIHDFWi8An8B0+Xbcz5Btc4AAAAASUVORK5CYII=)}.link-url.one-pan-tip-other[data-v-6389179c]:before{content:"";background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAAD5UlEQVR4Xr2YT2jTUBzHMxR0wmDaNXndxIk6EA9TEPQo/rns5MHtJjK2JrHrhhcRBP/cRHYTFMXDQBAVdhVBBGEHDx48iHhQEQ8DFYS5Jenabd3i71eX9uXbpE3S6gce697vb977vT+JoiTAVZSOwlhPr2WIT+v5jLt8UbgONdsUboH+rk5k3JUJ4Vq6pv8a6+lC+7Zjm+nhNQrKCcRpnLxjimfor2VKo+kBJyBg3MY+LFN7i/4TUcrVB8BgPJW2ITbo/zX+zdOJemhTzHf3Y6xIcB1xraBTbpv9s4uGuh/tZGxTm+JpRPta0x6iTUPcEWVL0NQVc/y06mHUb8b8yO7OyqgG+LQN7T3qhxKUFDl4hXpxoQfuDJpmx1BfoG4dQUPv6OkjqNcKgaOXTZ1CvSo0KnUGPA2o1w7KE/DwlCzXNeopTlbVMKliTt2HemFY+b7UgpHZ40ykhTt1YBvKg1jJ+WdnjZJFnbq6sgxtBnUQ2tnH3Mn6qee2wf165hzaIBj3u9G7oypc1NUzsrBETyLZBkL71rxsw1sI12d9catzaCtjG+pdeKhCVYjOSk32Jzojr3i6/MQoXzZSx2V/KEdw1Lz+DrmTz0LZKAh55aLMgxbSm1ry6m2Uy1immJFzcAwxrfwe7+6XO6nNoiEi6a6jzIPq72otkPYU5TK8WOQcVnkRYK1YRuogGiaBpvub55OOLhPlSFmaBd7nfB1B9ZIEOgOveT65flEeBOl+lQfItwtHddIISuqDHID3R9QJgnTv+RILWxFJKMu3EboGobwRli4uhyZGv8toEBXfGUtXbpQ3g2xyvsTkqawUXUJa9WHr4oYvMfkymLT4HVO7VHWqa09QHgWyfe1LDK85aBAFKvDBJTNznlshmzmK8ihUzlY5D37FkjtorifR6H9QkHLgJBWX3vvkxHhfQ6N/jW3uOuQbHFP8PfhxOt3RvdvBtinuTWUrjfZJ7I8CXp2qpw+/rciCJBttzV77gbJG8HuAHLtuVeNG6w4pkW6hzPKFVF/VjusjBhiXVvgtnwJ1zskKcUeNjyK6viy4Qff2ECy6RDYcLQ/MPlSxDRSyqbNyLG6hNxs335VCZf5qg3qtUtTFCYxDF8ufqOeDFB6gEX+/QL2k0JQ/Rv+Ry4a/e6Fx5fuXod1B3TiQn3X0G7tc6PXtOTqpJGjypyTx6MtQtHdHJ7tzEPcpr0UeKcQZ1057XwqD2ubG/JGSneajzDK1cfp7nabrJZ8g+Pblb9pnjBcLXv7NvpHFaTx1S6PpAYyTmOERZQs5LmGgqI0TohKYRr9thQLdD6sbuVW+1xriHSV1DH004w9PygmOZFyzWwAAAABJRU5ErkJggg==)}.link-url.one-pan-tip-lock[data-v-6389179c]:before{content:"";background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAABwUlEQVR4Xu1XvUoDQRA+0EoMub+oJBpv9wQLFSzsbASfwc4nsLMwcffERPEJbH0BQXwG2zQWEmttRIuA2Ch2Ohs4vMzueUncjRDug6/Zmdnvy85m99aycuQYIzi0XnWr9RU8/i/wKLv3aPTlUY4IY4S94HzjcEK+KptR0yH8HNcbgVNlm1g8iy5hj3ge7cCiom1OwC5LwcGcHTTs4kK04YcNyZxDDs/wXNoAe+qzR5DwZ5wTA1q4i83hHD0o7U33CIVHmUIu4afJGmhpC+f8GSBykRQpl5tTOEcF8QOMrhr8/d/jycUewvE0uJRfGTUGAm3YYy1BWL07HE9Dkda24zowpr+VRuCFx93NaoIujTpYry/Asj8ke2yE8/sVrJsJ6O2HNJFmwgW+hnUzMZix7oX8ChygxrQxdATMED4r5aTQqLFChXlSLWE3OE9Fo8Ysa2dCruUM56lo1Jgd8HVc61L2hvNUNGpM0LK2JuM6OOmvcTyNxo1B7m1c5y81FXE1c2MCubH++PPk8sXFL8XVHIEx+PztvhX5Ex7/jSMxNgyHMgbnUQdPpJs2iRaxbib85VpB/YzXQz880f8dnyPHuOIbV69cHR4KWOMAAAAASUVORK5CYII=)}.extract-code-container[data-v-6389179c]{display:flex;background:#fff;align-items:center;gap:8px;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;font-size:12px}.extract-code-container code[data-v-6389179c]{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;cursor:pointer;background:#eaeaea;padding:2px 6px;border-radius:6px;color:#3d3d3d}.extract-code-container code[data-v-6389179c]:hover{background:#e6e6e6}.copy-btn[data-v-6389179c]{background:none;border:none;cursor:pointer;font-size:14px;padding:2px 4px;border-radius:3px}.copy-btn[data-v-6389179c]:hover{background:#f8f9fa}.link-actions[data-v-6389179c]{display:flex;justify-content:space-between;align-items:center;margin-top:10px;margin-bottom:10px}.vote-section[data-v-6389179c]{display:flex;align-items:center;gap:10px}.vote-btn[data-v-6389179c]{background:transparent;border:none;padding:5px 10px;border-radius:6px;cursor:pointer;font-size:12px;display:flex;align-items:center;gap:4px}.vote-icon[data-v-6389179c]{width:12px;height:12px}.vote-icon.down-icon[data-v-6389179c]{transform:rotate(180deg)}.vote-btn[data-v-6389179c]:hover:not(:disabled){background:#e9ecef}.vote-btn[data-v-6389179c]:disabled{opacity:.6;cursor:not-allowed}.vote-btn.active.up[data-v-6389179c]{color:#155724}.vote-btn.active.down[data-v-6389179c]{color:#721c24}.vote-btn.pending[data-v-6389179c]{opacity:.7;position:relative}.pending-indicator[data-v-6389179c]{font-size:10px;margin-left:2px;animation:pulse-6389179c 1.5s ease-in-out infinite}@keyframes pulse-6389179c{0%,to{opacity:1}50%{opacity:.5}}.action-buttons[data-v-6389179c]{display:flex;gap:8px}.action-buttons button[data-v-6389179c]{padding:4px 8px;border:none;border-radius:6px;cursor:pointer;font-size:12px}.edit-btn[data-v-6389179c]{background:#ffc107;color:#212529}.edit-btn[data-v-6389179c]:hover{background:#e0a800}.modify-btn[data-v-6389179c]{width:48px;height:28px;background:#d4ecef66;color:#22899b}.modify-btn[data-v-6389179c]:hover{background:#d4ecef80}.delete-btn[data-v-6389179c]{width:48px;height:28px;background:#ffccd052;color:#e62e2e}.delete-btn[data-v-6389179c]:hover{background:#ffccd060}.delete-confirmation[data-v-6389179c]{text-align:center;padding:20px 0}.warning-icon[data-v-6389179c]{font-size:48px;margin-bottom:16px}.delete-confirmation p[data-v-6389179c]{margin:8px 0;font-size:16px}.warning-text[data-v-6389179c]{color:#dc3545;font-size:14px;font-weight:500}.delete-confirm-btn[data-v-6389179c]{background:#f8d7da!important;color:#dc3545!important;border:1px solid #f5c6cb!important;padding:8px 16px;border-radius:4px;cursor:pointer;margin-right:8px;font-weight:500}.delete-confirm-btn[data-v-6389179c]:hover:not(:disabled){background:#f8d7dad2!important;border:1px solid #f5c6cb!important}.delete-confirm-btn[data-v-6389179c]:disabled{background:#6c757d;cursor:not-allowed}.report-btn[data-v-6389179c]{width:48px;height:28px;background:#f4f4f4;color:#495057}.report-btn[data-v-6389179c]:hover{color:#495057;background:#ededed}.link-footer[data-v-6389179c]{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:#666;border-top:1px solid #f0f0f0;padding-top:10px}.footer-left[data-v-6389179c]{display:flex;align-items:center;gap:8px}.footer-right[data-v-6389179c]{display:flex;align-items:center;gap:12px}.original-link[data-v-6389179c]{color:#007bff;text-decoration:none;font-size:12px}.original-link[data-v-6389179c]:hover{background-color:transparent}.report-count[data-v-6389179c]{color:#dc3545;font-weight:700}.empty-state[data-v-6389179c]{text-align:center;padding:40px;color:#666}.loading[data-v-6389179c]{text-align:center;padding:20px;color:#666}.error-message[data-v-6389179c]{background:#f8d7da;color:#721c24;padding:10px 15px;border-radius:4px;margin:10px 0;border:1px solid #f5c6cb}.success-message[data-v-6389179c]{background:#d4edda;color:#155724;padding:10px 15px;border-radius:4px;margin:10px 0;border:1px solid #c3e6cb}@media (max-width: 768px){.link-manager[data-v-6389179c]{padding:10px}.form-row[data-v-6389179c]{flex-direction:column;gap:10px}.filter-bar[data-v-6389179c]{flex-direction:column;gap:8px}.link-header[data-v-6389179c]{flex-wrap:wrap}.link-meta[data-v-6389179c]{margin-left:0;margin-top:5px}.link-actions[data-v-6389179c]{flex-direction:column;gap:10px;align-items:flex-start}}.modal-overlay[data-v-6389179c]{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;display:flex;justify-content:center;align-items:center;z-index:1000}.modal-content[data-v-6389179c]{background:#fff;border-radius:16px;width:90%;max-width:600px;max-height:90vh;box-shadow:0 4px 20px #00000026}.modal-header[data-v-6389179c]{display:flex;justify-content:space-between;align-items:center;padding:20px;border-bottom:1px solid #eee;margin-bottom:20px}.modal-header h4[data-v-6389179c]{margin-left:10px;margin-bottom:0;color:#333;font-size:18px}.close-btn[data-v-6389179c]{background:#f5f5f5;border:none;font-size:24px;cursor:pointer;color:#999;padding:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:8px}.close-btn[data-v-6389179c]:hover{background:#f5f5f5;color:#333}.modal-body[data-v-6389179c]{padding:0 20px 20px}.vote-section[data-v-6389179c]{width:100%}.input-wrapper textarea[data-v-6389179c]{width:100%;border:none;outline:none;font-size:14px;font-family:inherit;resize:vertical;min-height:80px;background:transparent}.input-wrapper[data-v-6389179c]:has(textarea):focus-within{border-color:#007bff;box-shadow:0 0 0 2px #007bff40}.input-wrapper textarea[data-v-6389179c]::placeholder{color:#999}.pagination[data-v-6389179c]{display:flex;justify-content:center;align-items:center;gap:15px;margin-top:10px;padding:10px;background:#fff;border-radius:8px}.pagination-btn[data-v-6389179c]{box-shadow:#00000008 4px 4px 20px;padding:8px 16px;border:1px solid rgb(242,242,242);background:#fff;color:#333;border-radius:9999px;cursor:pointer;font-size:14px;transition:all .2s}.pagination-btn[data-v-6389179c]:hover:not(:disabled){background:#b3d8ff;color:#007bff;border-color:#b3d8ff}.pagination-btn[data-v-6389179c]:disabled{background:#f5f5f5;color:#999;cursor:not-allowed;border-color:#ddd}.pagination-info[data-v-6389179c]{font-size:14px;color:#666;font-weight:500}.login-prompt[data-v-6389179c]{display:flex;justify-content:center;align-items:center;min-height:300px;padding:40px 20px;background:linear-gradient(135deg,#f8f9fa,#e9ecef);border-radius:12px;border:2px dashed #dee2e6;margin:20px 0}.login-prompt-content[data-v-6389179c]{text-align:center;max-width:400px}.login-icon[data-v-6389179c]{margin-bottom:20px;color:#6c757d;opacity:.8}.login-prompt h3[data-v-6389179c]{font-size:24px;font-weight:600;color:#495057;margin-bottom:12px;line-height:1.3}.login-prompt p[data-v-6389179c]{font-size:16px;color:#6c757d;margin-bottom:24px;line-height:1.5}.login-btn[data-v-6389179c]{border:1px solid rgb(242,242,242);background:#fff;color:#767676;border:none;padding:12px 32px;border-radius:25px;font-size:16px;font-weight:500;cursor:pointer;transition:all .3s ease;box-shadow:#00000008 4px 4px 20px}.login-btn[data-v-6389179c]:hover{transform:translateY(-2px);box-shadow:#0000000f 4px 4px 20px}.login-btn[data-v-6389179c]:active{transform:translateY(0);box-shadow:0 2px 10px #007bff4d}.content-wrapper[data-v-92e3c6bc]{padding:16px}.movie-info[data-v-92e3c6bc]{margin-bottom:16px;padding:12px;background:#f8f9fa;border-radius:6px;border-left:4px solid #00a1d6}.movie-title[data-v-92e3c6bc]{margin:0 0 8px;font-size:16px;font-weight:600;color:#333;line-height:1.3}.movie-meta[data-v-92e3c6bc]{display:flex;gap:12px;align-items:center}.movie-meta .year[data-v-92e3c6bc]{background:#6c757d;color:#fff;padding:2px 6px;border-radius:3px;font-size:12px;font-weight:500}.movie-meta .rating[data-v-92e3c6bc]{color:#ff6b35;font-weight:600;font-size:13px}.navigation-bar[data-v-92e3c6bc]{display:flex;border-bottom:1px solid #e0e0e0;margin-bottom:16px}.nav-btn[data-v-92e3c6bc]{flex:1;padding:12px 16px;border:none;background:none;cursor:pointer;font-size:14px;font-weight:500;color:#666;transition:all .2s;border-bottom:1px solid transparent}.nav-btn.active[data-v-92e3c6bc]{color:#00a1d6;border-bottom-color:#00a1d6}.tab-content[data-v-92e3c6bc]{min-height:200px}.tab-panel[data-v-92e3c6bc]{padding-top:16px 0}.tab-panel h4[data-v-92e3c6bc]{margin:0 0 12px;color:#333;font-size:16px;font-weight:600}.tab-panel p[data-v-92e3c6bc]{margin:0;color:#666;line-height:1.5}.sub-nav[data-v-92e3c6bc]{display:flex;gap:4px;margin-bottom:12px;padding:4px;background:#e9ecef;border-radius:6px}.sub-tab[data-v-92e3c6bc]{flex:1;padding:6px 8px;border:none;background:transparent;color:#666;font-size:12px;border-radius:4px;cursor:pointer;transition:all .2s;text-align:center}.sub-tab[data-v-92e3c6bc]:hover{background:#dee2e6;color:#495057}.sub-tab.active[data-v-92e3c6bc]{background:#007bff;color:#fff;font-weight:500}.sub-content[data-v-92e3c6bc]{margin-top:8px}.sub-tab-content[data-v-92e3c6bc]{padding:8px 0}.sub-tab-content p[data-v-92e3c6bc]{margin:4px 0;color:#666;font-size:12px}.no-subject[data-v-92e3c6bc]{text-align:center;padding:40px 20px;color:#666}.no-subject p[data-v-92e3c6bc]{margin:8px 0;line-height:1.5}.no-subject .hint[data-v-92e3c6bc]{font-size:12px;color:#999;font-style:italic}.hint-list[data-v-92e3c6bc]{color:#666;font-size:13px;margin:4px 0 0 16px;padding:0}.hint-list li[data-v-92e3c6bc]{margin:2px 0}.debug-panel[data-v-dba5723e]{position:fixed;top:20px;right:20px;width:400px;max-height:80vh;background:#fff;border:2px solid #007bff;border-radius:8px;box-shadow:0 4px 20px #0000004d;z-index:10000;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;overflow-y:auto}.debug-header[data-v-dba5723e]{background:#007bff;color:#fff;padding:10px 15px;display:flex;justify-content:space-between;align-items:center}.debug-header h3[data-v-dba5723e]{margin:0;font-size:16px}.close-btn[data-v-dba5723e]{background:none;border:none;color:#fff;font-size:20px;cursor:pointer;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.debug-content[data-v-dba5723e]{padding:15px}.debug-section[data-v-dba5723e]{margin-bottom:20px;padding-bottom:15px;border-bottom:1px solid #eee}.debug-section[data-v-dba5723e]:last-child{border-bottom:none;margin-bottom:0}.debug-section h4[data-v-dba5723e]{margin:0 0 10px;color:#333;font-size:14px}.debug-section h5[data-v-dba5723e]{margin:10px 0 5px;color:#666;font-size:12px}.status-item[data-v-dba5723e]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;font-size:12px}.label[data-v-dba5723e]{font-weight:700;color:#555}.value[data-v-dba5723e]{color:#333;max-width:200px;word-break:break-all}.token[data-v-dba5723e]{font-family:monospace;font-size:10px}.status[data-v-dba5723e]{padding:2px 6px;border-radius:3px;font-size:11px;font-weight:700}.status.success[data-v-dba5723e]{background:#d4edda;color:#155724}.status.error[data-v-dba5723e]{background:#f8d7da;color:#721c24}.button-group[data-v-dba5723e]{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}.debug-btn[data-v-dba5723e]{padding:6px 12px;border:1px solid #007bff;background:#fff;color:#007bff;border-radius:4px;cursor:pointer;font-size:11px;transition:all .2s}.debug-btn[data-v-dba5723e]:hover{background:#007bff;color:#fff}.debug-btn.danger[data-v-dba5723e]{border-color:#dc3545;color:#dc3545}.debug-btn.danger[data-v-dba5723e]:hover{background:#dc3545;color:#fff}.test-result[data-v-dba5723e]{background:#f8f9fa;border:1px solid #dee2e6;border-radius:4px;padding:10px;margin-top:10px}.test-result pre[data-v-dba5723e]{margin:0;font-size:10px;white-space:pre-wrap;word-break:break-word}.headers-preview[data-v-dba5723e]{background:#f8f9fa;border:1px solid #dee2e6;border-radius:4px;padding:10px}.headers-preview code[data-v-dba5723e]{font-size:10px;white-space:pre-wrap;word-break:break-word}.update-notification-overlay[data-v-8ddffaa9]{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:10000;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.update-notification[data-v-8ddffaa9]{background:#fff;border-radius:12px;box-shadow:0 20px 40px #00000026;width:90%;max-width:480px;max-height:90vh;overflow-y:auto;animation:slideIn-8ddffaa9 .3s ease-out}@keyframes slideIn-8ddffaa9{0%{opacity:0;transform:scale(.9) translateY(-20px)}to{opacity:1;transform:scale(1) translateY(0)}}.notification-header[data-v-8ddffaa9]{display:flex;align-items:flex-start;padding:24px 24px 16px;border-bottom:1px solid #f0f0f0;position:relative}.header-icon[data-v-8ddffaa9]{flex-shrink:0;width:40px;height:40px;background:#e8f5e8;border-radius:50%;display:flex;align-items:center;justify-content:center;margin-right:16px}.header-content[data-v-8ddffaa9]{flex:1}.notification-title[data-v-8ddffaa9]{font-size:18px;font-weight:600;color:#333;margin:0 0 4px}.notification-subtitle[data-v-8ddffaa9]{font-size:14px;color:#666;margin:0}.close-btn[data-v-8ddffaa9]{position:absolute;top:20px;right:20px;width:32px;height:32px;border:none;background:#f5f5f5;border-radius:8px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:#666;transition:all .2s ease}.close-btn[data-v-8ddffaa9]:hover{background:#e0e0e0;color:#333}.version-info[data-v-8ddffaa9]{padding:16px 24px;background:#f8f9fa;margin:16px 24px 0;border-radius:8px}.version-row[data-v-8ddffaa9]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.version-row[data-v-8ddffaa9]:last-child{margin-bottom:0}.version-label[data-v-8ddffaa9]{font-size:14px;color:#666;font-weight:500}.version-current[data-v-8ddffaa9]{font-size:14px;color:#666;font-family:monospace;background:#e9ecef;padding:2px 8px;border-radius:4px}.version-latest[data-v-8ddffaa9]{font-size:14px;color:#4caf50;font-family:monospace;font-weight:600;background:#e8f5e8;padding:2px 8px;border-radius:4px}.update-description[data-v-8ddffaa9]{padding:16px 24px}.description-title[data-v-8ddffaa9]{font-size:16px;font-weight:600;color:#333;margin:0 0 12px;display:flex;align-items:center;gap:8px}.description-title[data-v-8ddffaa9]:before{content:"";width:4px;height:16px;background:#4caf50;border-radius:2px}.description-content[data-v-8ddffaa9]{font-size:14px;color:#555;line-height:1.6;margin:0;max-height:120px;overflow-y:auto;padding:12px;background:#f8f9fa;border-radius:6px}.notification-actions[data-v-8ddffaa9]{padding:16px 24px 24px}.skip-option[data-v-8ddffaa9]{margin-bottom:16px}.skip-checkbox[data-v-8ddffaa9]{display:flex;align-items:center;cursor:pointer;font-size:14px;color:#666}.skip-checkbox input[type=checkbox][data-v-8ddffaa9]{display:none}.checkmark[data-v-8ddffaa9]{width:16px;height:16px;border:2px solid #ddd;border-radius:3px;margin-right:8px;position:relative;transition:all .2s ease}.skip-checkbox input[type=checkbox]:checked+.checkmark[data-v-8ddffaa9]{background:#4caf50;border-color:#4caf50}.skip-checkbox input[type=checkbox]:checked+.checkmark[data-v-8ddffaa9]:after{content:"";position:absolute;left:4px;top:1px;width:4px;height:8px;border:solid white;border-width:0 2px 2px 0;transform:rotate(45deg)}.skip-text[data-v-8ddffaa9]{-webkit-user-select:none;user-select:none}.action-buttons[data-v-8ddffaa9]{display:flex;gap:12px;justify-content:flex-end}.btn[data-v-8ddffaa9]{padding:10px 20px;border:none;border-radius:6px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;gap:8px;min-width:100px;justify-content:center}.btn[data-v-8ddffaa9]:disabled{cursor:not-allowed;opacity:.6}.btn-secondary[data-v-8ddffaa9]{background:#f5f5f5;color:#666}.btn-secondary[data-v-8ddffaa9]:hover:not(:disabled){background:#e0e0e0;color:#333}.btn-primary[data-v-8ddffaa9]{background:#4caf50;color:#fff}.btn-primary[data-v-8ddffaa9]:hover:not(:disabled){background:#45a049}.loading-spinner[data-v-8ddffaa9]{width:14px;height:14px;border:2px solid rgba(255,255,255,.3);border-top:2px solid white;border-radius:50%;animation:spin-8ddffaa9 1s linear infinite}@keyframes spin-8ddffaa9{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.update-note[data-v-8ddffaa9]{padding:16px 24px 24px;border-top:1px solid #f0f0f0;margin-top:16px}.note-text[data-v-8ddffaa9]{font-size:12px;color:#666;margin:0;display:flex;align-items:center;gap:6px;line-height:1.4}@media (max-width: 480px){.update-notification[data-v-8ddffaa9]{width:95%;margin:20px}.notification-header[data-v-8ddffaa9]{padding:20px 20px 16px}.version-info[data-v-8ddffaa9],.update-description[data-v-8ddffaa9],.notification-actions[data-v-8ddffaa9],.update-note[data-v-8ddffaa9]{padding-left:20px;padding-right:20px}.action-buttons[data-v-8ddffaa9]{flex-direction:column}.btn[data-v-8ddffaa9]{width:100%}}@media (prefers-color-scheme: dark){.update-notification[data-v-8ddffaa9]{background:#2d3748;color:#e2e8f0}.notification-header[data-v-8ddffaa9]{border-bottom-color:#4a5568}.notification-title[data-v-8ddffaa9]{color:#e2e8f0}.notification-subtitle[data-v-8ddffaa9]{color:#a0aec0}.close-btn[data-v-8ddffaa9]{background:#4a5568;color:#a0aec0}.close-btn[data-v-8ddffaa9]:hover{background:#718096;color:#e2e8f0}.version-info[data-v-8ddffaa9]{background:#4a5568}.version-current[data-v-8ddffaa9]{background:#718096;color:#e2e8f0}.version-latest[data-v-8ddffaa9]{background:#2f855a;color:#c6f6d5}.update-description p[data-v-8ddffaa9]{color:#cbd5e0}.description-title[data-v-8ddffaa9]{color:#e2e8f0}.description-content[data-v-8ddffaa9]{color:#cbd5e0;background:#4a5568}.skip-checkbox[data-v-8ddffaa9]{color:#a0aec0}.checkmark[data-v-8ddffaa9]{border-color:#718096}.btn-secondary[data-v-8ddffaa9]{background:#4a5568;color:#a0aec0}.btn-secondary[data-v-8ddffaa9]:hover:not(:disabled){background:#718096;color:#e2e8f0}.update-note[data-v-8ddffaa9]{border-top-color:#4a5568}.note-text[data-v-8ddffaa9]{color:#a0aec0}}.custom-window[data-v-00eb2652]{position:relative;width:100%;max-width:350px;min-height:200px;background:#fff;border:1px solid rgba(239,239,239,1);border-radius:16px;box-shadow:0 2px 12px #0000000d;margin-bottom:15px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.window-header[data-v-00eb2652]{color:#545454;padding:6px 12px;border-radius:0 0 8px 8px;display:flex;justify-content:space-between;align-items:center;-webkit-user-select:none;user-select:none}.window-title[data-v-00eb2652]{font-weight:300;font-size:12px}.close-btn[data-v-00eb2652]{background:none;border:none;color:#fff;font-size:16px;cursor:pointer;padding:0;width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:background-color .2s}.close-btn[data-v-00eb2652]:hover{background-color:#fff3}.window-content[data-v-00eb2652]{padding:0}#douban-trigger-btn:hover{background:#005a1a!important;transform:translateY(-1px);box-shadow:0 2px 8px #00772280}#douban-custom-window{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}#douban-custom-window ::-webkit-scrollbar{width:6px}#douban-custom-window ::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}#douban-custom-window ::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}#douban-custom-window ::-webkit-scrollbar-thumb:hover{background:#a8a8a8}@keyframes fadeIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}@keyframes slideIn{0%{transform:translateY(-20px);opacity:0}to{transform:translateY(0);opacity:1}}.custom-window{animation:fadeIn .3s ease-out}.window-content>*{animation:slideIn .4s ease-out}@media (max-width: 480px){.custom-window{width:90vw!important;left:5vw!important}.stats-grid{grid-template-columns:1fr!important}.action-section{flex-direction:column}.action-btn{width:100%}}@media (prefers-color-scheme: dark){.custom-window{background:#2d3748;border-color:#4a5568;color:#e2e8f0}.window-content h3,.window-content h4{color:#e2e8f0}.window-content p{color:#cbd5e0}.feature-section li,.info-section{background:#4a5568;color:#cbd5e0}.info-item strong{color:#e2e8f0}}select option{color:#666;background-color:#fff;padding:8px 12px;border-radius:6px;margin:2px 0;transition:background-color .2s ease}select option:hover{background-color:#f5f5f5}select{border-radius:6px;padding:8px 12px}@media (prefers-color-scheme: dark){select option{color:#a0a0a0;background-color:#2d3748}select option:hover{background-color:#718096;color:#f7fafc}} `; document.head.appendChild(style); })(); (function(){"use strict";(function(){"use strict";/** * @vue/shared v3.5.18 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT **//*! #__NO_SIDE_EFFECTS__ */function mo(e){const t=Object.create(null);for(const s of e.split(","))t[s]=1;return s=>s in t}const ue={},Kt=[],lt=()=>{},Xr=()=>!1,Ps=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),go=e=>e.startsWith("onUpdate:"),Fe=Object.assign,vo=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},el=Object.prototype.hasOwnProperty,oe=(e,t)=>el.call(e,t),H=Array.isArray,Wt=e=>us(e)==="[object Map]",Ds=e=>us(e)==="[object Set]",Xo=e=>us(e)==="[object Date]",J=e=>typeof e=="function",ge=e=>typeof e=="string",it=e=>typeof e=="symbol",fe=e=>e!==null&&typeof e=="object",en=e=>(fe(e)||J(e))&&J(e.then)&&J(e.catch),tn=Object.prototype.toString,us=e=>tn.call(e),tl=e=>us(e).slice(8,-1),sn=e=>us(e)==="[object Object]",_o=e=>ge(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,cs=mo(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Is=e=>{const t=Object.create(null);return s=>t[s]||(t[s]=e(s))},sl=/-(\w)/g,Tt=Is(e=>e.replace(sl,(t,s)=>s?s.toUpperCase():"")),ol=/\B([A-Z])/g,Pt=Is(e=>e.replace(ol,"-$1").toLowerCase()),on=Is(e=>e.charAt(0).toUpperCase()+e.slice(1)),yo=Is(e=>e?`on${on(e)}`:""),St=(e,t)=>!Object.is(e,t),Fs=(e,...t)=>{for(let s=0;s{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:o,value:s})},bo=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let nn;const Os=()=>nn||(nn=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Jt(e){if(H(e)){const t={};for(let s=0;s{if(s){const o=s.split(rl);o.length>1&&(t[o[0].trim()]=o[1].trim())}}),t}function _e(e){let t="";if(ge(e))t=e;else if(H(e))for(let s=0;sRs(s,t))}const an=e=>!!(e&&e.__v_isRef===!0),G=e=>ge(e)?e:e==null?"":H(e)||fe(e)&&(e.toString===tn||!J(e.toString))?an(e)?G(e.value):JSON.stringify(e,un,2):String(e),un=(e,t)=>an(t)?un(e,t.value):Wt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[o,n],r)=>(s[ko(o,r)+" =>"]=n,s),{})}:Ds(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>ko(s))}:it(t)?ko(t):fe(t)&&!H(t)&&!sn(t)?String(t):t,ko=(e,t="")=>{var s;return it(e)?`Symbol(${(s=e.description)!=null?s:t})`:e};/** * @vue/reactivity v3.5.18 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT **/let Ne;class cl{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=Ne,!t&&Ne&&(this.index=(Ne.scopes||(Ne.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,s;if(this.scopes)for(t=0,s=this.scopes.length;t0&&--this._on===0&&(Ne=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let s,o;for(s=0,o=this.effects.length;s0)return;if(fs){let t=fs;for(fs=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;ds;){let t=ds;for(ds=void 0;t;){const s=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(o){e||(e=o)}t=s}}if(e)throw e}function pn(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function hn(e){let t,s=e.depsTail,o=s;for(;o;){const n=o.prevDep;o.version===-1?(o===s&&(s=n),Eo(o),fl(o)):t=o,o.dep.activeLink=o.prevActiveLink,o.prevActiveLink=void 0,o=n}e.deps=t,e.depsTail=s}function So(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(mn(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function mn(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===ps)||(e.globalVersion=ps,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!So(e))))return;e.flags|=2;const t=e.dep,s=de,o=st;de=e,st=!0;try{pn(e);const n=e.fn(e._value);(t.version===0||St(n,e._value))&&(e.flags|=128,e._value=n,t.version++)}catch(n){throw t.version++,n}finally{de=s,st=o,hn(e),e.flags&=-3}}function Eo(e,t=!1){const{dep:s,prevSub:o,nextSub:n}=e;if(o&&(o.nextSub=n,e.prevSub=void 0),n&&(n.prevSub=o,e.nextSub=void 0),s.subs===e&&(s.subs=o,!o&&s.computed)){s.computed.flags&=-5;for(let r=s.computed.deps;r;r=r.nextDep)Eo(r,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function fl(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}let st=!0;const gn=[];function at(){gn.push(st),st=!1}function ut(){const e=gn.pop();st=e===void 0?!0:e}function vn(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=de;de=void 0;try{t()}finally{de=s}}}let ps=0;class pl{constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Ao{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!de||!st||de===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==de)s=this.activeLink=new pl(de,this),de.deps?(s.prevDep=de.depsTail,de.depsTail.nextDep=s,de.depsTail=s):de.deps=de.depsTail=s,_n(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const o=s.nextDep;o.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=o),s.prevDep=de.depsTail,s.nextDep=void 0,de.depsTail.nextDep=s,de.depsTail=s,de.deps===s&&(de.deps=o)}return s}trigger(t){this.version++,ps++,this.notify(t)}notify(t){Co();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{To()}}}function _n(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let o=t.deps;o;o=o.nextDep)_n(o)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const Vo=new WeakMap,Dt=Symbol(""),Mo=Symbol(""),hs=Symbol("");function Ae(e,t,s){if(st&&de){let o=Vo.get(e);o||Vo.set(e,o=new Map);let n=o.get(s);n||(o.set(s,n=new Ao),n.map=o,n.key=s),n.track()}}function ht(e,t,s,o,n,r){const l=Vo.get(e);if(!l){ps++;return}const i=u=>{u&&u.trigger()};if(Co(),t==="clear")l.forEach(i);else{const u=H(e),p=u&&_o(s);if(u&&s==="length"){const c=Number(o);l.forEach((v,x)=>{(x==="length"||x===hs||!it(x)&&x>=c)&&i(v)})}else switch((s!==void 0||l.has(void 0))&&i(l.get(s)),p&&i(l.get(hs)),t){case"add":u?p&&i(l.get("length")):(i(l.get(Dt)),Wt(e)&&i(l.get(Mo)));break;case"delete":u||(i(l.get(Dt)),Wt(e)&&i(l.get(Mo)));break;case"set":Wt(e)&&i(l.get(Dt));break}}To()}function Qt(e){const t=ee(e);return t===e?t:(Ae(t,"iterate",hs),Qe(e)?t:t.map(Se))}function js(e){return Ae(e=ee(e),"iterate",hs),e}const hl={__proto__:null,[Symbol.iterator](){return Lo(this,Symbol.iterator,Se)},concat(...e){return Qt(this).concat(...e.map(t=>H(t)?Qt(t):t))},entries(){return Lo(this,"entries",e=>(e[1]=Se(e[1]),e))},every(e,t){return mt(this,"every",e,t,void 0,arguments)},filter(e,t){return mt(this,"filter",e,t,s=>s.map(Se),arguments)},find(e,t){return mt(this,"find",e,t,Se,arguments)},findIndex(e,t){return mt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return mt(this,"findLast",e,t,Se,arguments)},findLastIndex(e,t){return mt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return mt(this,"forEach",e,t,void 0,arguments)},includes(...e){return $o(this,"includes",e)},indexOf(...e){return $o(this,"indexOf",e)},join(e){return Qt(this).join(e)},lastIndexOf(...e){return $o(this,"lastIndexOf",e)},map(e,t){return mt(this,"map",e,t,void 0,arguments)},pop(){return ms(this,"pop")},push(...e){return ms(this,"push",e)},reduce(e,...t){return yn(this,"reduce",e,t)},reduceRight(e,...t){return yn(this,"reduceRight",e,t)},shift(){return ms(this,"shift")},some(e,t){return mt(this,"some",e,t,void 0,arguments)},splice(...e){return ms(this,"splice",e)},toReversed(){return Qt(this).toReversed()},toSorted(e){return Qt(this).toSorted(e)},toSpliced(...e){return Qt(this).toSpliced(...e)},unshift(...e){return ms(this,"unshift",e)},values(){return Lo(this,"values",Se)}};function Lo(e,t,s){const o=js(e),n=o[t]();return o!==e&&!Qe(e)&&(n._next=n.next,n.next=()=>{const r=n._next();return r.value&&(r.value=s(r.value)),r}),n}const ml=Array.prototype;function mt(e,t,s,o,n,r){const l=js(e),i=l!==e&&!Qe(e),u=l[t];if(u!==ml[t]){const v=u.apply(e,r);return i?Se(v):v}let p=s;l!==e&&(i?p=function(v,x){return s.call(this,Se(v),x,e)}:s.length>2&&(p=function(v,x){return s.call(this,v,x,e)}));const c=u.call(l,p,o);return i&&n?n(c):c}function yn(e,t,s,o){const n=js(e);let r=s;return n!==e&&(Qe(e)?s.length>3&&(r=function(l,i,u){return s.call(this,l,i,u,e)}):r=function(l,i,u){return s.call(this,l,Se(i),u,e)}),n[t](r,...o)}function $o(e,t,s){const o=ee(e);Ae(o,"iterate",hs);const n=o[t](...s);return(n===-1||n===!1)&&Po(s[0])?(s[0]=ee(s[0]),o[t](...s)):n}function ms(e,t,s=[]){at(),Co();const o=ee(e)[t].apply(e,s);return To(),ut(),o}const gl=mo("__proto__,__v_isRef,__isVue"),wn=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(it));function vl(e){it(e)||(e=String(e));const t=ee(this);return Ae(t,"has",e),t.hasOwnProperty(e)}class bn{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,o){if(s==="__v_skip")return t.__v_skip;const n=this._isReadonly,r=this._isShallow;if(s==="__v_isReactive")return!n;if(s==="__v_isReadonly")return n;if(s==="__v_isShallow")return r;if(s==="__v_raw")return o===(n?r?En:Sn:r?Tn:Cn).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(o)?t:void 0;const l=H(t);if(!n){let u;if(l&&(u=hl[s]))return u;if(s==="hasOwnProperty")return vl}const i=Reflect.get(t,s,Ee(t)?t:o);return(it(s)?wn.has(s):gl(s))||(n||Ae(t,"get",s),r)?i:Ee(i)?l&&_o(s)?i:i.value:fe(i)?n?An(i):It(i):i}}class kn extends bn{constructor(t=!1){super(!1,t)}set(t,s,o,n){let r=t[s];if(!this._isShallow){const u=Et(r);if(!Qe(o)&&!Et(o)&&(r=ee(r),o=ee(o)),!H(t)&&Ee(r)&&!Ee(o))return u?!1:(r.value=o,!0)}const l=H(t)&&_o(s)?Number(s)e,Bs=e=>Reflect.getPrototypeOf(e);function kl(e,t,s){return function(...o){const n=this.__v_raw,r=ee(n),l=Wt(r),i=e==="entries"||e===Symbol.iterator&&l,u=e==="keys"&&l,p=n[e](...o),c=s?Uo:t?Hs:Se;return!t&&Ae(r,"iterate",u?Mo:Dt),{next(){const{value:v,done:x}=p.next();return x?{value:v,done:x}:{value:i?[c(v[0]),c(v[1])]:c(v),done:x}},[Symbol.iterator](){return this}}}}function Ns(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function xl(e,t){const s={get(n){const r=this.__v_raw,l=ee(r),i=ee(n);e||(St(n,i)&&Ae(l,"get",n),Ae(l,"get",i));const{has:u}=Bs(l),p=t?Uo:e?Hs:Se;if(u.call(l,n))return p(r.get(n));if(u.call(l,i))return p(r.get(i));r!==l&&r.get(n)},get size(){const n=this.__v_raw;return!e&&Ae(ee(n),"iterate",Dt),Reflect.get(n,"size",n)},has(n){const r=this.__v_raw,l=ee(r),i=ee(n);return e||(St(n,i)&&Ae(l,"has",n),Ae(l,"has",i)),n===i?r.has(n):r.has(n)||r.has(i)},forEach(n,r){const l=this,i=l.__v_raw,u=ee(i),p=t?Uo:e?Hs:Se;return!e&&Ae(u,"iterate",Dt),i.forEach((c,v)=>n.call(r,p(c),p(v),l))}};return Fe(s,e?{add:Ns("add"),set:Ns("set"),delete:Ns("delete"),clear:Ns("clear")}:{add(n){!t&&!Qe(n)&&!Et(n)&&(n=ee(n));const r=ee(this);return Bs(r).has.call(r,n)||(r.add(n),ht(r,"add",n,n)),this},set(n,r){!t&&!Qe(r)&&!Et(r)&&(r=ee(r));const l=ee(this),{has:i,get:u}=Bs(l);let p=i.call(l,n);p||(n=ee(n),p=i.call(l,n));const c=u.call(l,n);return l.set(n,r),p?St(r,c)&&ht(l,"set",n,r):ht(l,"add",n,r),this},delete(n){const r=ee(this),{has:l,get:i}=Bs(r);let u=l.call(r,n);u||(n=ee(n),u=l.call(r,n)),i&&i.call(r,n);const p=r.delete(n);return u&&ht(r,"delete",n,void 0),p},clear(){const n=ee(this),r=n.size!==0,l=n.clear();return r&&ht(n,"clear",void 0,void 0),l}}),["keys","values","entries",Symbol.iterator].forEach(n=>{s[n]=kl(n,e,t)}),s}function zs(e,t){const s=xl(e,t);return(o,n,r)=>n==="__v_isReactive"?!e:n==="__v_isReadonly"?e:n==="__v_raw"?o:Reflect.get(oe(s,n)&&n in o?s:o,n,r)}const Cl={get:zs(!1,!1)},Tl={get:zs(!1,!0)},Sl={get:zs(!0,!1)},El={get:zs(!0,!0)},Cn=new WeakMap,Tn=new WeakMap,Sn=new WeakMap,En=new WeakMap;function Al(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Vl(e){return e.__v_skip||!Object.isExtensible(e)?0:Al(tl(e))}function It(e){return Et(e)?e:qs(e,!1,_l,Cl,Cn)}function Ml(e){return qs(e,!1,wl,Tl,Tn)}function An(e){return qs(e,!0,yl,Sl,Sn)}function r1(e){return qs(e,!0,bl,El,En)}function qs(e,t,s,o,n){if(!fe(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const r=Vl(e);if(r===0)return e;const l=n.get(e);if(l)return l;const i=new Proxy(e,r===2?o:s);return n.set(e,i),i}function Zt(e){return Et(e)?Zt(e.__v_raw):!!(e&&e.__v_isReactive)}function Et(e){return!!(e&&e.__v_isReadonly)}function Qe(e){return!!(e&&e.__v_isShallow)}function Po(e){return e?!!e.__v_raw:!1}function ee(e){const t=e&&e.__v_raw;return t?ee(t):e}function Ll(e){return!oe(e,"__v_skip")&&Object.isExtensible(e)&&wo(e,"__v_skip",!0),e}const Se=e=>fe(e)?It(e):e,Hs=e=>fe(e)?An(e):e;function Ee(e){return e?e.__v_isRef===!0:!1}function I(e){return $l(e,!1)}function $l(e,t){return Ee(e)?e:new Ul(e,t)}class Ul{constructor(t,s){this.dep=new Ao,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:ee(t),this._value=s?t:Se(t),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(t){const s=this._rawValue,o=this.__v_isShallow||Qe(t)||Et(t);t=o?t:ee(t),St(t,s)&&(this._rawValue=t,this._value=o?t:Se(t),this.dep.trigger())}}function Pl(e){return Ee(e)?e.value:e}const Dl={get:(e,t,s)=>t==="__v_raw"?e:Pl(Reflect.get(e,t,s)),set:(e,t,s,o)=>{const n=e[t];return Ee(n)&&!Ee(s)?(n.value=s,!0):Reflect.set(e,t,s,o)}};function Vn(e){return Zt(e)?e:new Proxy(e,Dl)}class Il{constructor(t,s,o){this.fn=t,this.setter=s,this._value=void 0,this.dep=new Ao(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=ps-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=o}notify(){if(this.flags|=16,!(this.flags&8)&&de!==this)return fn(this,!0),!0}get value(){const t=this.dep.track();return mn(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Fl(e,t,s=!1){let o,n;return J(e)?o=e:(o=e.get,n=e.set),new Il(o,n,s)}const Gs={},Ks=new WeakMap;let Ft;function Ol(e,t=!1,s=Ft){if(s){let o=Ks.get(s);o||Ks.set(s,o=[]),o.push(e)}}function Rl(e,t,s=ue){const{immediate:o,deep:n,once:r,scheduler:l,augmentJob:i,call:u}=s,p=F=>n?F:Qe(F)||n===!1||n===0?gt(F,1):gt(F);let c,v,x,y,C=!1,R=!1;if(Ee(e)?(v=()=>e.value,C=Qe(e)):Zt(e)?(v=()=>p(e),C=!0):H(e)?(R=!0,C=e.some(F=>Zt(F)||Qe(F)),v=()=>e.map(F=>{if(Ee(F))return F.value;if(Zt(F))return p(F);if(J(F))return u?u(F,2):F()})):J(e)?t?v=u?()=>u(e,2):e:v=()=>{if(x){at();try{x()}finally{ut()}}const F=Ft;Ft=c;try{return u?u(e,3,[y]):e(y)}finally{Ft=F}}:v=lt,t&&n){const F=v,ae=n===!0?1/0:n;v=()=>gt(F(),ae)}const U=dl(),w=()=>{c.stop(),U&&U.active&&vo(U.effects,c)};if(r&&t){const F=t;t=(...ae)=>{F(...ae),w()}}let b=R?new Array(e.length).fill(Gs):Gs;const Q=F=>{if(!(!(c.flags&1)||!c.dirty&&!F))if(t){const ae=c.run();if(n||C||(R?ae.some((ze,Le)=>St(ze,b[Le])):St(ae,b))){x&&x();const ze=Ft;Ft=c;try{const Le=[ae,b===Gs?void 0:R&&b[0]===Gs?[]:b,y];b=ae,u?u(t,3,Le):t(...Le)}finally{Ft=ze}}}else c.run()};return i&&i(Q),c=new cn(v),c.scheduler=l?()=>l(Q,!1):Q,y=F=>Ol(F,!1,c),x=c.onStop=()=>{const F=Ks.get(c);if(F){if(u)u(F,4);else for(const ae of F)ae();Ks.delete(c)}},t?o?Q(!0):b=c.run():l?l(Q.bind(null,!0),!0):c.run(),w.pause=c.pause.bind(c),w.resume=c.resume.bind(c),w.stop=w,w}function gt(e,t=1/0,s){if(t<=0||!fe(e)||e.__v_skip||(s=s||new Set,s.has(e)))return e;if(s.add(e),t--,Ee(e))gt(e.value,t,s);else if(H(e))for(let o=0;o{gt(o,t,s)});else if(sn(e)){for(const o in e)gt(e[o],t,s);for(const o of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,o)&>(e[o],t,s)}return e}/** * @vue/runtime-core v3.5.18 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT **/const gs=[];let Do=!1;function l1(e,...t){if(Do)return;Do=!0,at();const s=gs.length?gs[gs.length-1].component:null,o=s&&s.appContext.config.warnHandler,n=jl();if(o)Yt(o,s,11,[e+t.map(r=>{var l,i;return(i=(l=r.toString)==null?void 0:l.call(r))!=null?i:JSON.stringify(r)}).join(""),s&&s.proxy,n.map(({vnode:r})=>`at <${br(s,r.type)}>`).join(` `),n]);else{const r=[`[Vue warn]: ${e}`,...t];n.length&&r.push(` `,...Bl(n)),console.warn(...r)}ut(),Do=!1}function jl(){let e=gs[gs.length-1];if(!e)return[];const t=[];for(;e;){const s=t[0];s&&s.vnode===e?s.recurseCount++:t.push({vnode:e,recurseCount:0});const o=e.component&&e.component.parent;e=o&&o.vnode}return t}function Bl(e){const t=[];return e.forEach((s,o)=>{t.push(...o===0?[]:[` `],...Nl(s))}),t}function Nl({vnode:e,recurseCount:t}){const s=t>0?`... (${t} recursive calls)`:"",o=e.component?e.component.parent==null:!1,n=` at <${br(e.component,e.type,o)}`,r=">"+s;return e.props?[n,...zl(e.props),r]:[n+r]}function zl(e){const t=[],s=Object.keys(e);return s.slice(0,3).forEach(o=>{t.push(...Mn(o,e[o]))}),s.length>3&&t.push(" ..."),t}function Mn(e,t,s){return ge(t)?(t=JSON.stringify(t),s?t:[`${e}=${t}`]):typeof t=="number"||typeof t=="boolean"||t==null?s?t:[`${e}=${t}`]:Ee(t)?(t=Mn(e,ee(t.value),!0),s?t:[`${e}=Ref<`,t,">"]):J(t)?[`${e}=fn${t.name?`<${t.name}>`:""}`]:(t=ee(t),s?t:[`${e}=`,t])}function Yt(e,t,s,o){try{return o?e(...o):e()}catch(n){Ws(n,t,s)}}function ct(e,t,s,o){if(J(e)){const n=Yt(e,t,s,o);return n&&en(n)&&n.catch(r=>{Ws(r,t,s)}),n}if(H(e)){const n=[];for(let r=0;r>>1,n=Oe[o],r=vs(n);r=vs(s)?Oe.push(e):Oe.splice(Hl(t),0,e),e.flags|=1,Un()}}function Un(){Js||(Js=Ln.then(In))}function Gl(e){H(e)?Xt.push(...e):At&&e.id===-1?At.splice(es+1,0,e):e.flags&1||(Xt.push(e),e.flags|=1),Un()}function Pn(e,t,s=dt+1){for(;svs(s)-vs(o));if(Xt.length=0,At){At.push(...t);return}for(At=t,es=0;ese.id==null?e.flags&2?-1:1/0:e.id;function In(e){try{for(dt=0;dt{o._d&&fr(-1);const r=Qs(t);let l;try{l=e(...n)}finally{Qs(r),o._d&&fr(1)}return l};return o._n=!0,o._c=!0,o._d=!0,o}function ne(e,t){if(Ze===null)return e;const s=lo(Ze),o=e.dirs||(e.dirs=[]);for(let n=0;ne.__isTeleport;function Fo(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Fo(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function On(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function _s(e,t,s,o,n=!1){if(H(e)){e.forEach((C,R)=>_s(C,t&&(H(t)?t[R]:t),s,o,n));return}if(ys(o)&&!n){o.shapeFlag&512&&o.type.__asyncResolved&&o.component.subTree.component&&_s(e,t,s,o.component.subTree);return}const r=o.shapeFlag&4?lo(o.component):o.el,l=n?null:r,{i,r:u}=e,p=t&&t.r,c=i.refs===ue?i.refs={}:i.refs,v=i.setupState,x=ee(v),y=v===ue?()=>!1:C=>oe(x,C);if(p!=null&&p!==u&&(ge(p)?(c[p]=null,y(p)&&(v[p]=null)):Ee(p)&&(p.value=null)),J(u))Yt(u,i,12,[l,c]);else{const C=ge(u),R=Ee(u);if(C||R){const U=()=>{if(e.f){const w=C?y(u)?v[u]:c[u]:u.value;n?H(w)&&vo(w,r):H(w)?w.includes(r)||w.push(r):C?(c[u]=[r],y(u)&&(v[u]=c[u])):(u.value=[r],e.k&&(c[e.k]=u.value))}else C?(c[u]=l,y(u)&&(v[u]=l)):R&&(u.value=l,e.k&&(c[e.k]=l))};l?(U.id=-1,qe(U,s)):U()}}}Os().requestIdleCallback,Os().cancelIdleCallback;const ys=e=>!!e.type.__asyncLoader,Rn=e=>e.type.__isKeepAlive;function Ql(e,t){jn(e,"a",t)}function Zl(e,t){jn(e,"da",t)}function jn(e,t,s=je){const o=e.__wdc||(e.__wdc=()=>{let n=s;for(;n;){if(n.isDeactivated)return;n=n.parent}return e()});if(Zs(t,o,s),s){let n=s.parent;for(;n&&n.parent;)Rn(n.parent.vnode)&&Yl(o,t,s,n),n=n.parent}}function Yl(e,t,s,o){const n=Zs(t,e,o,!0);ws(()=>{vo(o[t],n)},s)}function Zs(e,t,s=je,o=!1){if(s){const n=s[e]||(s[e]=[]),r=t.__weh||(t.__weh=(...l)=>{at();const i=Es(s),u=ct(t,s,e,l);return i(),ut(),u});return o?n.unshift(r):n.push(r),r}}const vt=e=>(t,s=je)=>{(!As||e==="sp")&&Zs(e,(...o)=>t(...o),s)},Xl=vt("bm"),ts=vt("m"),ei=vt("bu"),ti=vt("u"),si=vt("bum"),ws=vt("um"),oi=vt("sp"),ni=vt("rtg"),ri=vt("rtc");function li(e,t=je){Zs("ec",e,t)}const ii=Symbol.for("v-ndc");function Ys(e,t,s,o){let n;const r=s,l=H(e);if(l||ge(e)){const i=l&&Zt(e);let u=!1,p=!1;i&&(u=!Qe(e),p=Et(e),e=js(e)),n=new Array(e.length);for(let c=0,v=e.length;ct(i,u,void 0,r));else{const i=Object.keys(e);n=new Array(i.length);for(let u=0,p=i.length;ue?_r(e)?lo(e):Oo(e.parent):null,bs=Fe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Oo(e.parent),$root:e=>Oo(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>qn(e),$forceUpdate:e=>e.f||(e.f=()=>{Io(e.update)}),$nextTick:e=>e.n||(e.n=$n.bind(e.proxy)),$watch:e=>Vi.bind(e)}),Ro=(e,t)=>e!==ue&&!e.__isScriptSetup&&oe(e,t),ai={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:o,data:n,props:r,accessCache:l,type:i,appContext:u}=e;let p;if(t[0]!=="$"){const y=l[t];if(y!==void 0)switch(y){case 1:return o[t];case 2:return n[t];case 4:return s[t];case 3:return r[t]}else{if(Ro(o,t))return l[t]=1,o[t];if(n!==ue&&oe(n,t))return l[t]=2,n[t];if((p=e.propsOptions[0])&&oe(p,t))return l[t]=3,r[t];if(s!==ue&&oe(s,t))return l[t]=4,s[t];jo&&(l[t]=0)}}const c=bs[t];let v,x;if(c)return t==="$attrs"&&Ae(e.attrs,"get",""),c(e);if((v=i.__cssModules)&&(v=v[t]))return v;if(s!==ue&&oe(s,t))return l[t]=4,s[t];if(x=u.config.globalProperties,oe(x,t))return x[t]},set({_:e},t,s){const{data:o,setupState:n,ctx:r}=e;return Ro(n,t)?(n[t]=s,!0):o!==ue&&oe(o,t)?(o[t]=s,!0):oe(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(r[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:o,appContext:n,propsOptions:r}},l){let i;return!!s[l]||e!==ue&&oe(e,l)||Ro(t,l)||(i=r[0])&&oe(i,l)||oe(o,l)||oe(bs,l)||oe(n.config.globalProperties,l)},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:oe(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function Bn(e){return H(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let jo=!0;function ui(e){const t=qn(e),s=e.proxy,o=e.ctx;jo=!1,t.beforeCreate&&Nn(t.beforeCreate,e,"bc");const{data:n,computed:r,methods:l,watch:i,provide:u,inject:p,created:c,beforeMount:v,mounted:x,beforeUpdate:y,updated:C,activated:R,deactivated:U,beforeDestroy:w,beforeUnmount:b,destroyed:Q,unmounted:F,render:ae,renderTracked:ze,renderTriggered:Le,errorCaptured:$e,serverPrefetch:We,expose:me,inheritAttrs:Ce,components:$t,directives:ot,filters:N}=t;if(p&&ci(p,o,null),l)for(const le in l){const te=l[le];J(te)&&(o[le]=te.bind(s))}if(n){const le=n.call(s,s);fe(le)&&(e.data=It(le))}if(jo=!0,r)for(const le in r){const te=r[le],wt=J(te)?te.bind(s,s):J(te.get)?te.get.bind(s,s):lt,Ut=!J(te)&&J(te.set)?te.set.bind(s):lt,bt=Ve({get:wt,set:Ut});Object.defineProperty(o,le,{enumerable:!0,configurable:!0,get:()=>bt.value,set:Je=>bt.value=Je})}if(i)for(const le in i)zn(i[le],o,s,le);if(u){const le=J(u)?u.call(s):u;Reflect.ownKeys(le).forEach(te=>{gi(te,le[te])})}c&&Nn(c,e,"c");function O(le,te){H(te)?te.forEach(wt=>le(wt.bind(s))):te&&le(te.bind(s))}if(O(Xl,v),O(ts,x),O(ei,y),O(ti,C),O(Ql,R),O(Zl,U),O(li,$e),O(ri,ze),O(ni,Le),O(si,b),O(ws,F),O(oi,We),H(me))if(me.length){const le=e.exposed||(e.exposed={});me.forEach(te=>{Object.defineProperty(le,te,{get:()=>s[te],set:wt=>s[te]=wt,enumerable:!0})})}else e.exposed||(e.exposed={});ae&&e.render===lt&&(e.render=ae),Ce!=null&&(e.inheritAttrs=Ce),$t&&(e.components=$t),ot&&(e.directives=ot),We&&On(e)}function ci(e,t,s=lt){H(e)&&(e=Bo(e));for(const o in e){const n=e[o];let r;fe(n)?"default"in n?r=eo(n.from||o,n.default,!0):r=eo(n.from||o):r=eo(n),Ee(r)?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>r.value,set:l=>r.value=l}):t[o]=r}}function Nn(e,t,s){ct(H(e)?e.map(o=>o.bind(t.proxy)):e.bind(t.proxy),t,s)}function zn(e,t,s,o){let n=o.includes(".")?ir(s,o):()=>s[o];if(ge(e)){const r=t[e];J(r)&&Ye(n,r)}else if(J(e))Ye(n,e.bind(s));else if(fe(e))if(H(e))e.forEach(r=>zn(r,t,s,o));else{const r=J(e.handler)?e.handler.bind(s):t[e.handler];J(r)&&Ye(n,r,e)}}function qn(e){const t=e.type,{mixins:s,extends:o}=t,{mixins:n,optionsCache:r,config:{optionMergeStrategies:l}}=e.appContext,i=r.get(t);let u;return i?u=i:!n.length&&!s&&!o?u=t:(u={},n.length&&n.forEach(p=>Xs(u,p,l,!0)),Xs(u,t,l)),fe(t)&&r.set(t,u),u}function Xs(e,t,s,o=!1){const{mixins:n,extends:r}=t;r&&Xs(e,r,s,!0),n&&n.forEach(l=>Xs(e,l,s,!0));for(const l in t)if(!(o&&l==="expose")){const i=di[l]||s&&s[l];e[l]=i?i(e[l],t[l]):t[l]}return e}const di={data:Hn,props:Gn,emits:Gn,methods:ks,computed:ks,beforeCreate:Re,created:Re,beforeMount:Re,mounted:Re,beforeUpdate:Re,updated:Re,beforeDestroy:Re,beforeUnmount:Re,destroyed:Re,unmounted:Re,activated:Re,deactivated:Re,errorCaptured:Re,serverPrefetch:Re,components:ks,directives:ks,watch:pi,provide:Hn,inject:fi};function Hn(e,t){return t?e?function(){return Fe(J(e)?e.call(this,this):e,J(t)?t.call(this,this):t)}:t:e}function fi(e,t){return ks(Bo(e),Bo(t))}function Bo(e){if(H(e)){const t={};for(let s=0;s1)return s&&J(t)?t.call(o&&o.proxy):t}}const Wn={},Jn=()=>Object.create(Wn),Qn=e=>Object.getPrototypeOf(e)===Wn;function vi(e,t,s,o=!1){const n={},r=Jn();e.propsDefaults=Object.create(null),Zn(e,t,n,r);for(const l in e.propsOptions[0])l in n||(n[l]=void 0);s?e.props=o?n:Ml(n):e.type.props?e.props=n:e.props=r,e.attrs=r}function _i(e,t,s,o){const{props:n,attrs:r,vnode:{patchFlag:l}}=e,i=ee(n),[u]=e.propsOptions;let p=!1;if((o||l>0)&&!(l&16)){if(l&8){const c=e.vnode.dynamicProps;for(let v=0;v{u=!0;const[x,y]=Yn(v,t,!0);Fe(l,x),y&&i.push(...y)};!s&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}if(!r&&!u)return fe(e)&&o.set(e,Kt),Kt;if(H(r))for(let c=0;ce==="_"||e==="__"||e==="_ctx"||e==="$stable",qo=e=>H(e)?e.map(ft):[ft(e)],wi=(e,t,s)=>{if(t._n)return t;const o=Kl((...n)=>qo(t(...n)),s);return o._c=!1,o},er=(e,t,s)=>{const o=e._ctx;for(const n in e){if(zo(n))continue;const r=e[n];if(J(r))t[n]=wi(n,r,o);else if(r!=null){const l=qo(r);t[n]=()=>l}}},tr=(e,t)=>{const s=qo(t);e.slots.default=()=>s},sr=(e,t,s)=>{for(const o in t)(s||!zo(o))&&(e[o]=t[o])},bi=(e,t,s)=>{const o=e.slots=Jn();if(e.vnode.shapeFlag&32){const n=t.__;n&&wo(o,"__",n,!0);const r=t._;r?(sr(o,t,s),s&&wo(o,"_",r,!0)):er(t,o)}else t&&tr(e,t)},ki=(e,t,s)=>{const{vnode:o,slots:n}=e;let r=!0,l=ue;if(o.shapeFlag&32){const i=t._;i?s&&i===1?r=!1:sr(n,t,s):(r=!t.$stable,er(t,n)),l=t}else t&&(tr(e,t),l={default:1});if(r)for(const i in n)!zo(i)&&l[i]==null&&delete n[i]},qe=Ii;function xi(e){return Ci(e)}function Ci(e,t){const s=Os();s.__VUE__=!0;const{insert:o,remove:n,patchProp:r,createElement:l,createText:i,createComment:u,setText:p,setElementText:c,parentNode:v,nextSibling:x,setScopeId:y=lt,insertStaticContent:C}=e,R=(f,m,_,E=null,T=null,S=null,P=void 0,$=null,L=!!m.dynamicChildren)=>{if(f===m)return;f&&!Ss(f,m)&&(E=kt(f),Je(f,T,S,!0),f=null),m.patchFlag===-2&&(L=!1,m.dynamicChildren=null);const{type:A,ref:z,shapeFlag:D}=m;switch(A){case so:U(f,m,_,E);break;case Vt:w(f,m,_,E);break;case oo:f==null&&b(m,_,E,P);break;case ve:$t(f,m,_,E,T,S,P,$,L);break;default:D&1?ae(f,m,_,E,T,S,P,$,L):D&6?ot(f,m,_,E,T,S,P,$,L):(D&64||D&128)&&A.process(f,m,_,E,T,S,P,$,L,Ht)}z!=null&&T?_s(z,f&&f.ref,S,m||f,!m):z==null&&f&&f.ref!=null&&_s(f.ref,null,S,f,!0)},U=(f,m,_,E)=>{if(f==null)o(m.el=i(m.children),_,E);else{const T=m.el=f.el;m.children!==f.children&&p(T,m.children)}},w=(f,m,_,E)=>{f==null?o(m.el=u(m.children||""),_,E):m.el=f.el},b=(f,m,_,E)=>{[f.el,f.anchor]=C(f.children,m,_,E,f.el,f.anchor)},Q=({el:f,anchor:m},_,E)=>{let T;for(;f&&f!==m;)T=x(f),o(f,_,E),f=T;o(m,_,E)},F=({el:f,anchor:m})=>{let _;for(;f&&f!==m;)_=x(f),n(f),f=_;n(m)},ae=(f,m,_,E,T,S,P,$,L)=>{m.type==="svg"?P="svg":m.type==="math"&&(P="mathml"),f==null?ze(m,_,E,T,S,P,$,L):We(f,m,T,S,P,$,L)},ze=(f,m,_,E,T,S,P,$)=>{let L,A;const{props:z,shapeFlag:D,transition:B,dirs:K}=f;if(L=f.el=l(f.type,S,z&&z.is,z),D&8?c(L,f.children):D&16&&$e(f.children,L,null,E,T,Ho(f,S),P,$),K&&Ot(f,null,E,"created"),Le(L,f,f.scopeId,P,E),z){for(const ie in z)ie!=="value"&&!cs(ie)&&r(L,ie,null,z[ie],S,E);"value"in z&&r(L,"value",null,z.value,S),(A=z.onVnodeBeforeMount)&&pt(A,E,f)}K&&Ot(f,null,E,"beforeMount");const Y=Ti(T,B);Y&&B.beforeEnter(L),o(L,m,_),((A=z&&z.onVnodeMounted)||Y||K)&&qe(()=>{A&&pt(A,E,f),Y&&B.enter(L),K&&Ot(f,null,E,"mounted")},T)},Le=(f,m,_,E,T)=>{if(_&&y(f,_),E)for(let S=0;S{for(let A=L;A{const $=m.el=f.el;let{patchFlag:L,dynamicChildren:A,dirs:z}=m;L|=f.patchFlag&16;const D=f.props||ue,B=m.props||ue;let K;if(_&&Rt(_,!1),(K=B.onVnodeBeforeUpdate)&&pt(K,_,m,f),z&&Ot(m,f,_,"beforeUpdate"),_&&Rt(_,!0),(D.innerHTML&&B.innerHTML==null||D.textContent&&B.textContent==null)&&c($,""),A?me(f.dynamicChildren,A,$,_,E,Ho(m,T),S):P||te(f,m,$,null,_,E,Ho(m,T),S,!1),L>0){if(L&16)Ce($,D,B,_,T);else if(L&2&&D.class!==B.class&&r($,"class",null,B.class,T),L&4&&r($,"style",D.style,B.style,T),L&8){const Y=m.dynamicProps;for(let ie=0;ie{K&&pt(K,_,m,f),z&&Ot(m,f,_,"updated")},E)},me=(f,m,_,E,T,S,P)=>{for(let $=0;${if(m!==_){if(m!==ue)for(const S in m)!cs(S)&&!(S in _)&&r(f,S,m[S],null,T,E);for(const S in _){if(cs(S))continue;const P=_[S],$=m[S];P!==$&&S!=="value"&&r(f,S,$,P,T,E)}"value"in _&&r(f,"value",m.value,_.value,T)}},$t=(f,m,_,E,T,S,P,$,L)=>{const A=m.el=f?f.el:i(""),z=m.anchor=f?f.anchor:i("");let{patchFlag:D,dynamicChildren:B,slotScopeIds:K}=m;K&&($=$?$.concat(K):K),f==null?(o(A,_,E),o(z,_,E),$e(m.children||[],_,z,T,S,P,$,L)):D>0&&D&64&&B&&f.dynamicChildren?(me(f.dynamicChildren,B,_,T,S,P,$),(m.key!=null||T&&m===T.subTree)&&or(f,m,!0)):te(f,m,_,z,T,S,P,$,L)},ot=(f,m,_,E,T,S,P,$,L)=>{m.slotScopeIds=$,f==null?m.shapeFlag&512?T.ctx.activate(m,_,E,P,L):N(m,_,E,T,S,P,L):k(f,m,L)},N=(f,m,_,E,T,S,P)=>{const $=f.component=zi(f,E,T);if(Rn(f)&&($.ctx.renderer=Ht),Hi($,!1,P),$.asyncDep){if(T&&T.registerDep($,O,P),!f.el){const L=$.subTree=Z(Vt);w(null,L,m,_),f.placeholder=L.el}}else O($,f,m,_,T,S,P)},k=(f,m,_)=>{const E=m.component=f.component;if(Pi(f,m,_))if(E.asyncDep&&!E.asyncResolved){le(E,m,_);return}else E.next=m,E.update();else m.el=f.el,E.vnode=m},O=(f,m,_,E,T,S,P)=>{const $=()=>{if(f.isMounted){let{next:D,bu:B,u:K,parent:Y,vnode:ie}=f;{const Ie=nr(f);if(Ie){D&&(D.el=ie.el,le(f,D,P)),Ie.asyncDep.then(()=>{f.isUnmounted||$()});return}}let se=D,Ue;Rt(f,!1),D?(D.el=ie.el,le(f,D,P)):D=ie,B&&Fs(B),(Ue=D.props&&D.props.onVnodeBeforeUpdate)&&pt(Ue,Y,D,ie),Rt(f,!0);const Pe=ur(f),De=f.subTree;f.subTree=Pe,R(De,Pe,v(De.el),kt(De),f,T,S),D.el=Pe.el,se===null&&Di(f,Pe.el),K&&qe(K,T),(Ue=D.props&&D.props.onVnodeUpdated)&&qe(()=>pt(Ue,Y,D,ie),T)}else{let D;const{el:B,props:K}=m,{bm:Y,m:ie,parent:se,root:Ue,type:Pe}=f,De=ys(m);Rt(f,!1),Y&&Fs(Y),!De&&(D=K&&K.onVnodeBeforeMount)&&pt(D,se,m),Rt(f,!0);{Ue.ce&&Ue.ce._def.shadowRoot!==!1&&Ue.ce._injectChildStyle(Pe);const Ie=f.subTree=ur(f);R(null,Ie,_,E,f,T,S),m.el=Ie.el}if(ie&&qe(ie,T),!De&&(D=K&&K.onVnodeMounted)){const Ie=m;qe(()=>pt(D,se,Ie),T)}(m.shapeFlag&256||se&&ys(se.vnode)&&se.vnode.shapeFlag&256)&&f.a&&qe(f.a,T),f.isMounted=!0,m=_=E=null}};f.scope.on();const L=f.effect=new cn($);f.scope.off();const A=f.update=L.run.bind(L),z=f.job=L.runIfDirty.bind(L);z.i=f,z.id=f.uid,L.scheduler=()=>Io(z),Rt(f,!0),A()},le=(f,m,_)=>{m.component=f;const E=f.vnode.props;f.vnode=m,f.next=null,_i(f,m.props,E,_),ki(f,m.children,_),at(),Pn(f),ut()},te=(f,m,_,E,T,S,P,$,L=!1)=>{const A=f&&f.children,z=f?f.shapeFlag:0,D=m.children,{patchFlag:B,shapeFlag:K}=m;if(B>0){if(B&128){Ut(A,D,_,E,T,S,P,$,L);return}else if(B&256){wt(A,D,_,E,T,S,P,$,L);return}}K&8?(z&16&&nt(A,T,S),D!==A&&c(_,D)):z&16?K&16?Ut(A,D,_,E,T,S,P,$,L):nt(A,T,S,!0):(z&8&&c(_,""),K&16&&$e(D,_,E,T,S,P,$,L))},wt=(f,m,_,E,T,S,P,$,L)=>{f=f||Kt,m=m||Kt;const A=f.length,z=m.length,D=Math.min(A,z);let B;for(B=0;Bz?nt(f,T,S,!0,!1,D):$e(m,_,E,T,S,P,$,L,D)},Ut=(f,m,_,E,T,S,P,$,L)=>{let A=0;const z=m.length;let D=f.length-1,B=z-1;for(;A<=D&&A<=B;){const K=f[A],Y=m[A]=L?Mt(m[A]):ft(m[A]);if(Ss(K,Y))R(K,Y,_,null,T,S,P,$,L);else break;A++}for(;A<=D&&A<=B;){const K=f[D],Y=m[B]=L?Mt(m[B]):ft(m[B]);if(Ss(K,Y))R(K,Y,_,null,T,S,P,$,L);else break;D--,B--}if(A>D){if(A<=B){const K=B+1,Y=KB)for(;A<=D;)Je(f[A],T,S,!0),A++;else{const K=A,Y=A,ie=new Map;for(A=Y;A<=B;A++){const Be=m[A]=L?Mt(m[A]):ft(m[A]);Be.key!=null&&ie.set(Be.key,A)}let se,Ue=0;const Pe=B-Y+1;let De=!1,Ie=0;const Gt=new Array(Pe);for(A=0;A=Pe){Je(Be,T,S,!0);continue}let tt;if(Be.key!=null)tt=ie.get(Be.key);else for(se=Y;se<=B;se++)if(Gt[se-Y]===0&&Ss(Be,m[se])){tt=se;break}tt===void 0?Je(Be,T,S,!0):(Gt[tt-Y]=A+1,tt>=Ie?Ie=tt:De=!0,R(Be,m[tt],_,null,T,S,P,$,L),Ue++)}const $s=De?Si(Gt):Kt;for(se=$s.length-1,A=Pe-1;A>=0;A--){const Be=Y+A,tt=m[Be],Us=m[Be+1],ho=Be+1{const{el:S,type:P,transition:$,children:L,shapeFlag:A}=f;if(A&6){bt(f.component.subTree,m,_,E);return}if(A&128){f.suspense.move(m,_,E);return}if(A&64){P.move(f,m,_,Ht);return}if(P===ve){o(S,m,_);for(let D=0;D$.enter(S),T);else{const{leave:D,delayLeave:B,afterLeave:K}=$,Y=()=>{f.ctx.isUnmounted?n(S):o(S,m,_)},ie=()=>{D(S,()=>{Y(),K&&K()})};B?B(S,Y,ie):ie()}else o(S,m,_)},Je=(f,m,_,E=!1,T=!1)=>{const{type:S,props:P,ref:$,children:L,dynamicChildren:A,shapeFlag:z,patchFlag:D,dirs:B,cacheIndex:K}=f;if(D===-2&&(T=!1),$!=null&&(at(),_s($,null,_,f,!0),ut()),K!=null&&(m.renderCache[K]=void 0),z&256){m.ctx.deactivate(f);return}const Y=z&1&&B,ie=!ys(f);let se;if(ie&&(se=P&&P.onVnodeBeforeUnmount)&&pt(se,m,f),z&6)as(f.component,_,E);else{if(z&128){f.suspense.unmount(_,E);return}Y&&Ot(f,null,m,"beforeUnmount"),z&64?f.type.remove(f,m,_,Ht,E):A&&!A.hasOnce&&(S!==ve||D>0&&D&64)?nt(A,m,_,!1,!0):(S===ve&&D&384||!T&&z&16)&&nt(L,m,_),E&&ls(f)}(ie&&(se=P&&P.onVnodeUnmounted)||Y)&&qe(()=>{se&&pt(se,m,f),Y&&Ot(f,null,m,"unmounted")},_)},ls=f=>{const{type:m,el:_,anchor:E,transition:T}=f;if(m===ve){is(_,E);return}if(m===oo){F(f);return}const S=()=>{n(_),T&&!T.persisted&&T.afterLeave&&T.afterLeave()};if(f.shapeFlag&1&&T&&!T.persisted){const{leave:P,delayLeave:$}=T,L=()=>P(_,S);$?$(f.el,S,L):L()}else S()},is=(f,m)=>{let _;for(;f!==m;)_=x(f),n(f),f=_;n(m)},as=(f,m,_)=>{const{bum:E,scope:T,job:S,subTree:P,um:$,m:L,a:A,parent:z,slots:{__:D}}=f;rr(L),rr(A),E&&Fs(E),z&&H(D)&&D.forEach(B=>{z.renderCache[B]=void 0}),T.stop(),S&&(S.flags|=8,Je(P,f,m,_)),$&&qe($,m),qe(()=>{f.isUnmounted=!0},m),m&&m.pendingBranch&&!m.isUnmounted&&f.asyncDep&&!f.asyncResolved&&f.suspenseId===m.pendingId&&(m.deps--,m.deps===0&&m.resolve())},nt=(f,m,_,E=!1,T=!1,S=0)=>{for(let P=S;P{if(f.shapeFlag&6)return kt(f.component.subTree);if(f.shapeFlag&128)return f.suspense.next();const m=x(f.anchor||f.el),_=m&&m[Wl];return _?x(_):m};let be=!1;const qt=(f,m,_)=>{f==null?m._vnode&&Je(m._vnode,null,null,!0):R(m._vnode||null,f,m,null,null,null,_),m._vnode=f,be||(be=!0,Pn(),Dn(),be=!1)},Ht={p:R,um:Je,m:bt,r:ls,mt:N,mc:$e,pc:te,pbc:me,n:kt,o:e};return{render:qt,hydrate:void 0,createApp:mi(qt)}}function Ho({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:s}function Rt({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Ti(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function or(e,t,s=!1){const o=e.children,n=t.children;if(H(o)&&H(n))for(let r=0;r>1,e[s[i]]0&&(t[o]=s[r-1]),s[r]=o)}}for(r=s.length,l=s[r-1];r-- >0;)s[r]=l,l=t[l];return s}function nr(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:nr(t)}function rr(e){if(e)for(let t=0;teo(Ei);function Ye(e,t,s){return lr(e,t,s)}function lr(e,t,s=ue){const{immediate:o,deep:n,flush:r,once:l}=s,i=Fe({},s),u=t&&o||!t&&r!=="post";let p;if(As){if(r==="sync"){const y=Ai();p=y.__watcherHandles||(y.__watcherHandles=[])}else if(!u){const y=()=>{};return y.stop=lt,y.resume=lt,y.pause=lt,y}}const c=je;i.call=(y,C,R)=>ct(y,c,C,R);let v=!1;r==="post"?i.scheduler=y=>{qe(y,c&&c.suspense)}:r!=="sync"&&(v=!0,i.scheduler=(y,C)=>{C?y():Io(y)}),i.augmentJob=y=>{t&&(y.flags|=4),v&&(y.flags|=2,c&&(y.id=c.uid,y.i=c))};const x=Rl(e,t,i);return As&&(p?p.push(x):u&&x()),x}function Vi(e,t,s){const o=this.proxy,n=ge(e)?e.includes(".")?ir(o,e):()=>o[e]:e.bind(o,o);let r;J(t)?r=t:(r=t.handler,s=t);const l=Es(this),i=lr(n,r.bind(o),s);return l(),i}function ir(e,t){const s=t.split(".");return()=>{let o=e;for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Tt(t)}Modifiers`]||e[`${Pt(t)}Modifiers`];function Li(e,t,...s){if(e.isUnmounted)return;const o=e.vnode.props||ue;let n=s;const r=t.startsWith("update:"),l=r&&Mi(o,t.slice(7));l&&(l.trim&&(n=s.map(c=>ge(c)?c.trim():c)),l.number&&(n=s.map(bo)));let i,u=o[i=yo(t)]||o[i=yo(Tt(t))];!u&&r&&(u=o[i=yo(Pt(t))]),u&&ct(u,e,6,n);const p=o[i+"Once"];if(p){if(!e.emitted)e.emitted={};else if(e.emitted[i])return;e.emitted[i]=!0,ct(p,e,6,n)}}function ar(e,t,s=!1){const o=t.emitsCache,n=o.get(e);if(n!==void 0)return n;const r=e.emits;let l={},i=!1;if(!J(e)){const u=p=>{const c=ar(p,t,!0);c&&(i=!0,Fe(l,c))};!s&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}return!r&&!i?(fe(e)&&o.set(e,null),null):(H(r)?r.forEach(u=>l[u]=null):Fe(l,r),fe(e)&&o.set(e,l),l)}function to(e,t){return!e||!Ps(t)?!1:(t=t.slice(2).replace(/Once$/,""),oe(e,t[0].toLowerCase()+t.slice(1))||oe(e,Pt(t))||oe(e,t))}function i1(){}function ur(e){const{type:t,vnode:s,proxy:o,withProxy:n,propsOptions:[r],slots:l,attrs:i,emit:u,render:p,renderCache:c,props:v,data:x,setupState:y,ctx:C,inheritAttrs:R}=e,U=Qs(e);let w,b;try{if(s.shapeFlag&4){const F=n||o,ae=F;w=ft(p.call(ae,F,c,v,y,x,C)),b=i}else{const F=t;w=ft(F.length>1?F(v,{attrs:i,slots:l,emit:u}):F(v,null)),b=t.props?i:$i(i)}}catch(F){xs.length=0,Ws(F,e,1),w=Z(Vt)}let Q=w;if(b&&R!==!1){const F=Object.keys(b),{shapeFlag:ae}=Q;F.length&&ae&7&&(r&&F.some(go)&&(b=Ui(b,r)),Q=os(Q,b,!1,!0))}return s.dirs&&(Q=os(Q,null,!1,!0),Q.dirs=Q.dirs?Q.dirs.concat(s.dirs):s.dirs),s.transition&&Fo(Q,s.transition),w=Q,Qs(U),w}const $i=e=>{let t;for(const s in e)(s==="class"||s==="style"||Ps(s))&&((t||(t={}))[s]=e[s]);return t},Ui=(e,t)=>{const s={};for(const o in e)(!go(o)||!(o.slice(9)in t))&&(s[o]=e[o]);return s};function Pi(e,t,s){const{props:o,children:n,component:r}=e,{props:l,children:i,patchFlag:u}=t,p=r.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&u>=0){if(u&1024)return!0;if(u&16)return o?cr(o,l,p):!!l;if(u&8){const c=t.dynamicProps;for(let v=0;ve.__isSuspense;function Ii(e,t){t&&t.pendingBranch?H(e)?t.effects.push(...e):t.effects.push(e):Gl(e)}const ve=Symbol.for("v-fgt"),so=Symbol.for("v-txt"),Vt=Symbol.for("v-cmt"),oo=Symbol.for("v-stc"),xs=[];let He=null;function V(e=!1){xs.push(He=e?null:[])}function Fi(){xs.pop(),He=xs[xs.length-1]||null}let Cs=1;function fr(e,t=!1){Cs+=e,e<0&&He&&t&&(He.hasOnce=!0)}function pr(e){return e.dynamicChildren=Cs>0?He||Kt:null,Fi(),Cs>0&&He&&He.push(e),e}function M(e,t,s,o,n,r){return pr(a(e,t,s,o,n,r,!0))}function Ts(e,t,s,o,n){return pr(Z(e,t,s,o,n,!0))}function hr(e){return e?e.__v_isVNode===!0:!1}function Ss(e,t){return e.type===t.type&&e.key===t.key}const mr=({key:e})=>e??null,no=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?ge(e)||Ee(e)||J(e)?{i:Ze,r:e,k:t,f:!!s}:e:null);function a(e,t=null,s=null,o=0,n=null,r=e===ve?0:1,l=!1,i=!1){const u={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&mr(t),ref:t&&no(t),scopeId:Fn,slotScopeIds:null,children:s,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:r,patchFlag:o,dynamicProps:n,dynamicChildren:null,appContext:null,ctx:Ze};return i?(Go(u,s),r&128&&e.normalize(u)):s&&(u.shapeFlag|=ge(s)?8:16),Cs>0&&!l&&He&&(u.patchFlag>0||r&6)&&u.patchFlag!==32&&He.push(u),u}const Z=Oi;function Oi(e,t=null,s=null,o=0,n=null,r=!1){if((!e||e===ii)&&(e=Vt),hr(e)){const i=os(e,t,!0);return s&&Go(i,s),Cs>0&&!r&&He&&(i.shapeFlag&6?He[He.indexOf(e)]=i:He.push(i)),i.patchFlag=-2,i}if(Yi(e)&&(e=e.__vccOpts),t){t=Ri(t);let{class:i,style:u}=t;i&&!ge(i)&&(t.class=_e(i)),fe(u)&&(Po(u)&&!H(u)&&(u=Fe({},u)),t.style=Jt(u))}const l=ge(e)?1:dr(e)?128:Jl(e)?64:fe(e)?4:J(e)?2:0;return a(e,t,s,o,n,l,r,!0)}function Ri(e){return e?Po(e)||Qn(e)?Fe({},e):e:null}function os(e,t,s=!1,o=!1){const{props:n,ref:r,patchFlag:l,children:i,transition:u}=e,p=t?ji(n||{},t):n,c={__v_isVNode:!0,__v_skip:!0,type:e.type,props:p,key:p&&mr(p),ref:t&&t.ref?s&&r?H(r)?r.concat(no(t)):[r,no(t)]:no(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ve?l===-1?16:l|16:l,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:u,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&os(e.ssContent),ssFallback:e.ssFallback&&os(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return u&&o&&Fo(c,u.clone(c)),c}function ns(e=" ",t=0){return Z(so,null,e,t)}function gr(e,t){const s=Z(oo,null,e);return s.staticCount=t,s}function j(e="",t=!1){return t?(V(),Ts(Vt,null,e)):Z(Vt,null,e)}function ft(e){return e==null||typeof e=="boolean"?Z(Vt):H(e)?Z(ve,null,e.slice()):hr(e)?Mt(e):Z(so,null,String(e))}function Mt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:os(e)}function Go(e,t){let s=0;const{shapeFlag:o}=e;if(t==null)t=null;else if(H(t))s=16;else if(typeof t=="object")if(o&65){const n=t.default;n&&(n._c&&(n._d=!1),Go(e,n()),n._c&&(n._d=!0));return}else{s=32;const n=t._;!n&&!Qn(t)?t._ctx=Ze:n===3&&Ze&&(Ze.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else J(t)?(t={default:t,_ctx:Ze},s=32):(t=String(t),o&64?(s=16,t=[ns(t)]):s=8);e.children=t,e.shapeFlag|=s}function ji(...e){const t={};for(let s=0;sje||Ze;let ro,Ko;{const e=Os(),t=(s,o)=>{let n;return(n=e[s])||(n=e[s]=[]),n.push(o),r=>{n.length>1?n.forEach(l=>l(r)):n[0](r)}};ro=t("__VUE_INSTANCE_SETTERS__",s=>je=s),Ko=t("__VUE_SSR_SETTERS__",s=>As=s)}const Es=e=>{const t=je;return ro(e),e.scope.on(),()=>{e.scope.off(),ro(t)}},vr=()=>{je&&je.scope.off(),ro(null)};function _r(e){return e.vnode.shapeFlag&4}let As=!1;function Hi(e,t=!1,s=!1){t&&Ko(t);const{props:o,children:n}=e.vnode,r=_r(e);vi(e,o,r,t),bi(e,n,s||t);const l=r?Gi(e,t):void 0;return t&&Ko(!1),l}function Gi(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,ai);const{setup:o}=s;if(o){at();const n=e.setupContext=o.length>1?Wi(e):null,r=Es(e),l=Yt(o,e,0,[e.props,n]),i=en(l);if(ut(),r(),(i||e.sp)&&!ys(e)&&On(e),i){if(l.then(vr,vr),t)return l.then(u=>{yr(e,u)}).catch(u=>{Ws(u,e,0)});e.asyncDep=l}else yr(e,l)}else wr(e)}function yr(e,t,s){J(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:fe(t)&&(e.setupState=Vn(t)),wr(e)}function wr(e,t,s){const o=e.type;e.render||(e.render=o.render||lt);{const n=Es(e);at();try{ui(e)}finally{ut(),n()}}}const Ki={get(e,t){return Ae(e,"get",""),e[t]}};function Wi(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,Ki),slots:e.slots,emit:e.emit,expose:t}}function lo(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Vn(Ll(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in bs)return bs[s](e)},has(t,s){return s in t||s in bs}})):e.proxy}const Ji=/(?:^|[-_])(\w)/g,Qi=e=>e.replace(Ji,t=>t.toUpperCase()).replace(/[-_]/g,"");function Zi(e,t=!0){return J(e)?e.displayName||e.name:e.name||t&&e.__name}function br(e,t,s=!1){let o=Zi(t);if(!o&&t.__file){const n=t.__file.match(/([^/\\]+)\.\w+$/);n&&(o=n[1])}if(!o&&e&&e.parent){const n=r=>{for(const l in r)if(r[l]===t)return l};o=n(e.components||e.parent.type.components)||n(e.appContext.components)}return o?Qi(o):s?"App":"Anonymous"}function Yi(e){return J(e)&&"__vccOpts"in e}const Ve=(e,t)=>Fl(e,t,As),Xi="3.5.18";/** * @vue/runtime-dom v3.5.18 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT **/let Wo;const kr=typeof window<"u"&&window.trustedTypes;if(kr)try{Wo=kr.createPolicy("vue",{createHTML:e=>e})}catch{}const xr=Wo?e=>Wo.createHTML(e):e=>e,ea="http://www.w3.org/2000/svg",ta="http://www.w3.org/1998/Math/MathML",_t=typeof document<"u"?document:null,Cr=_t&&_t.createElement("template"),sa={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,o)=>{const n=t==="svg"?_t.createElementNS(ea,e):t==="mathml"?_t.createElementNS(ta,e):s?_t.createElement(e,{is:s}):_t.createElement(e);return e==="select"&&o&&o.multiple!=null&&n.setAttribute("multiple",o.multiple),n},createText:e=>_t.createTextNode(e),createComment:e=>_t.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>_t.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,o,n,r){const l=s?s.previousSibling:t.lastChild;if(n&&(n===r||n.nextSibling))for(;t.insertBefore(n.cloneNode(!0),s),!(n===r||!(n=n.nextSibling)););else{Cr.innerHTML=xr(o==="svg"?`${e}`:o==="mathml"?`${e}`:e);const i=Cr.content;if(o==="svg"||o==="mathml"){const u=i.firstChild;for(;u.firstChild;)i.appendChild(u.firstChild);i.removeChild(u)}t.insertBefore(i,s)}return[l?l.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},oa=Symbol("_vtc");function na(e,t,s){const o=e[oa];o&&(t=(t?[t,...o]:[...o]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const io=Symbol("_vod"),Tr=Symbol("_vsh"),ao={beforeMount(e,{value:t},{transition:s}){e[io]=e.style.display==="none"?"":e.style.display,s&&t?s.beforeEnter(e):Vs(e,t)},mounted(e,{value:t},{transition:s}){s&&t&&s.enter(e)},updated(e,{value:t,oldValue:s},{transition:o}){!t!=!s&&(o?t?(o.beforeEnter(e),Vs(e,!0),o.enter(e)):o.leave(e,()=>{Vs(e,!1)}):Vs(e,t))},beforeUnmount(e,{value:t}){Vs(e,t)}};function Vs(e,t){e.style.display=t?e[io]:"none",e[Tr]=!t}const ra=Symbol(""),la=/(^|;)\s*display\s*:/;function ia(e,t,s){const o=e.style,n=ge(s);let r=!1;if(s&&!n){if(t)if(ge(t))for(const l of t.split(";")){const i=l.slice(0,l.indexOf(":")).trim();s[i]==null&&uo(o,i,"")}else for(const l in t)s[l]==null&&uo(o,l,"");for(const l in s)l==="display"&&(r=!0),uo(o,l,s[l])}else if(n){if(t!==s){const l=o[ra];l&&(s+=";"+l),o.cssText=s,r=la.test(s)}}else t&&e.removeAttribute("style");io in e&&(e[io]=r?o.display:"",e[Tr]&&(o.display="none"))}const Sr=/\s*!important$/;function uo(e,t,s){if(H(s))s.forEach(o=>uo(e,t,o));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const o=aa(e,t);Sr.test(s)?e.setProperty(Pt(o),s.replace(Sr,""),"important"):e[o]=s}}const Er=["Webkit","Moz","ms"],Jo={};function aa(e,t){const s=Jo[t];if(s)return s;let o=Tt(t);if(o!=="filter"&&o in e)return Jo[t]=o;o=on(o);for(let n=0;nQo||(fa.then(()=>Qo=0),Qo=Date.now());function ha(e,t){const s=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=s.attached)return;ct(ma(o,s.value),t,5,[o])};return s.value=e,s.attached=pa(),s}function ma(e,t){if(H(t)){const s=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{s.call(e),e._stopped=!0},t.map(o=>n=>!n._stopped&&o&&o(n))}else return t}const Ur=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,ga=(e,t,s,o,n,r)=>{const l=n==="svg";t==="class"?na(e,o,l):t==="style"?ia(e,s,o):Ps(t)?go(t)||ca(e,t,s,o,r):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):va(e,t,o,l))?(Mr(e,t,o),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Vr(e,t,o,l,r,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!ge(o))?Mr(e,Tt(t),o,r,t):(t==="true-value"?e._trueValue=o:t==="false-value"&&(e._falseValue=o),Vr(e,t,o,l))};function va(e,t,s,o){if(o)return!!(t==="innerHTML"||t==="textContent"||t in e&&Ur(t)&&J(s));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const n=e.tagName;if(n==="IMG"||n==="VIDEO"||n==="CANVAS"||n==="SOURCE")return!1}return Ur(t)&&ge(s)?!1:t in e}const co=e=>{const t=e.props["onUpdate:modelValue"]||!1;return H(t)?s=>Fs(t,s):t};function _a(e){e.target.composing=!0}function Pr(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const rs=Symbol("_assign"),pe={created(e,{modifiers:{lazy:t,trim:s,number:o}},n){e[rs]=co(n);const r=o||n.props&&n.props.type==="number";jt(e,t?"change":"input",l=>{if(l.target.composing)return;let i=e.value;s&&(i=i.trim()),r&&(i=bo(i)),e[rs](i)}),s&&jt(e,"change",()=>{e.value=e.value.trim()}),t||(jt(e,"compositionstart",_a),jt(e,"compositionend",Pr),jt(e,"change",Pr))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:o,trim:n,number:r}},l){if(e[rs]=co(l),e.composing)return;const i=(r||e.type==="number")&&!/^0\d/.test(e.value)?bo(e.value):e.value,u=t??"";i!==u&&(document.activeElement===e&&e.type!=="range"&&(o&&t===s||n&&e.value.trim()===u)||(e.value=u))}},ya={deep:!0,created(e,t,s){e[rs]=co(s),jt(e,"change",()=>{const o=e._modelValue,n=wa(e),r=e.checked,l=e[rs];if(H(o)){const i=ln(o,n),u=i!==-1;if(r&&!u)l(o.concat(n));else if(!r&&u){const p=[...o];p.splice(i,1),l(p)}}else if(Ds(o)){const i=new Set(o);r?i.add(n):i.delete(n),l(i)}else l(Ir(e,r))})},mounted:Dr,beforeUpdate(e,t,s){e[rs]=co(s),Dr(e,t,s)}};function Dr(e,{value:t,oldValue:s},o){e._modelValue=t;let n;if(H(t))n=ln(t,o.props.value)>-1;else if(Ds(t))n=t.has(o.props.value);else{if(t===s)return;n=Rs(t,Ir(e,!0))}e.checked!==n&&(e.checked=n)}function wa(e){return"_value"in e?e._value:e.value}function Ir(e,t){const s=t?"_trueValue":"_falseValue";return s in e?e[s]:t}const ba=["ctrl","shift","alt","meta"],ka={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>ba.some(s=>e[`${s}Key`]&&!t.includes(s))},Ge=(e,t)=>{const s=e._withMods||(e._withMods={}),o=t.join(".");return s[o]||(s[o]=(n,...r)=>{for(let l=0;l{const t=Ca().createApp(...e),{mount:s}=t;return t.mount=o=>{const n=Ea(o);if(!n)return;const r=t._component;!J(r)&&!r.render&&!r.template&&(r.template=n.innerHTML),n.nodeType===1&&(n.textContent="");const l=s(n,!1,Sa(n));return n instanceof Element&&(n.removeAttribute("v-cloak"),n.setAttribute("data-v-app","")),l},t};function Sa(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Ea(e){return ge(e)?document.querySelector(e):e}const ye={setToken(e){try{typeof GM_setValue<"u"&&GM_setValue("auth_token",e)}catch(t){console.warn("GM_setValue失败,使用localStorage:",t)}try{localStorage.setItem("auth_token",e)}catch(t){console.error("localStorage保存失败:",t)}},getToken(){let e=null;try{if(typeof GM_getValue<"u"&&(e=GM_getValue("auth_token",null),e))return e}catch(t){console.warn("GM_getValue失败,尝试localStorage:",t)}try{return e=localStorage.getItem("auth_token"),e}catch(t){return console.error("localStorage读取失败:",t),null}},removeToken(){try{typeof GM_deleteValue<"u"&&GM_deleteValue("auth_token")}catch(e){console.warn("GM_deleteValue失败:",e)}try{localStorage.removeItem("auth_token")}catch(e){console.error("localStorage删除失败:",e)}},setUser(e){const t=JSON.stringify(e);try{typeof GM_setValue<"u"&&GM_setValue("user_info",t)}catch(s){console.warn("GM_setValue保存用户信息失败,使用localStorage:",s)}try{localStorage.setItem("user_info",t)}catch(s){console.error("localStorage保存用户信息失败:",s)}},getUser(){let e=null;try{if(typeof GM_getValue<"u"&&(e=GM_getValue("user_info",null),e))return JSON.parse(e)}catch(t){console.warn("GM_getValue读取用户信息失败,尝试localStorage:",t)}try{return e=localStorage.getItem("user_info"),e?JSON.parse(e):null}catch(t){return console.error("localStorage读取用户信息失败:",t),null}},removeUser(){try{typeof GM_deleteValue<"u"&&GM_deleteValue("user_info")}catch(e){console.warn("GM_deleteValue删除用户信息失败:",e)}try{localStorage.removeItem("user_info")}catch(e){console.error("localStorage删除用户信息失败:",e)}},setApiState(e){try{const t=JSON.stringify(e);typeof GM_setValue<"u"?GM_setValue("api_state",t):localStorage.setItem("doubanflix_api_state",t)}catch(t){console.warn("保存API状态失败:",t);try{localStorage.setItem("doubanflix_api_state",JSON.stringify(e))}catch(s){console.error("localStorage保存API状态也失败:",s)}}},getApiState(){try{let e=null;return typeof GM_getValue<"u"?e=GM_getValue("api_state",null):e=localStorage.getItem("doubanflix_api_state"),e?JSON.parse(e):null}catch(e){console.warn("获取API状态失败:",e);try{const t=localStorage.getItem("doubanflix_api_state");return t?JSON.parse(t):null}catch(t){return console.error("localStorage获取API状态也失败:",t),null}}},removeApiState(){try{typeof GM_deleteValue<"u"?GM_deleteValue("api_state"):localStorage.removeItem("doubanflix_api_state")}catch(e){console.warn("清除API状态失败:",e);try{localStorage.removeItem("doubanflix_api_state")}catch(t){console.error("localStorage清除API状态也失败:",t)}}}},Aa="https://das.doubanflix.com/api",Va="https://api.doubanflix.com/api",Ma=1e4,La=1e3,fo=2*60*60*1e3;class $a{constructor(){this.primaryURL=Aa,this.fallbackURL=Va,this.timeout=Ma,this.resetTimer=null,this.initializeFromStorage()}initializeFromStorage(){const t=ye.getApiState();if(t){if(this.isUsingFallback=t.isUsingFallback||!1,this.currentURL=this.isUsingFallback?this.fallbackURL:this.primaryURL,this.isUsingFallback&&t.switchTime){const s=new Date(t.switchTime).getTime(),n=Date.now()-s;if(n{console.log("定时器触发,自动切换回主接口"),this.forceResetToPrimary()},r)}else console.log("切换时间已过,自动重置到主接口"),this.forceResetToPrimary()}}else this.currentURL=this.primaryURL,this.isUsingFallback=!1}saveApiState(){const t={isUsingFallback:this.isUsingFallback,switchTime:this.isUsingFallback?new Date().toISOString():null};ye.setApiState(t)}switchToFallback(){this.isUsingFallback||(console.warn("主要API接口无法访问,切换到备用接口:",this.fallbackURL),this.currentURL=this.fallbackURL,this.isUsingFallback=!0,this.saveApiState(),this.startAutoResetTimer())}resetToPrimary(){this.isUsingFallback&&(console.log("重置到主要API接口:",this.primaryURL),this.currentURL=this.primaryURL,this.isUsingFallback=!1,ye.removeApiState(),this.clearAutoResetTimer())}startAutoResetTimer(){this.clearAutoResetTimer(),console.log(`将在 ${fo/1e3/60} 分钟后自动尝试切换回主接口`),this.resetTimer=setTimeout(()=>{console.log("定时器触发,自动切换回主接口"),this.forceResetToPrimary()},fo)}clearAutoResetTimer(){this.resetTimer&&(clearTimeout(this.resetTimer),this.resetTimer=null)}forceResetToPrimary(){console.log("强制重置到主要API接口:",this.primaryURL),this.currentURL=this.primaryURL,this.isUsingFallback=!1,ye.removeApiState(),this.clearAutoResetTimer()}isNetworkError(t){return t.name==="AbortError"||t.name==="TypeError"||t.message.includes("Failed to fetch")||t.message.includes("Network request failed")||t.message.includes("请求超时")}addAuthHeaders(t={}){const s=ye.getToken();return s&&(t.Authorization=`Bearer ${s}`),{"Content-Type":"application/json",...t}}async handleResponse(t){if(!t.ok){const s=await t.json().catch(()=>({}));switch(t.status){case 401:return ye.getToken()?(ye.removeToken(),{success:!1,error:"登录已过期,请重新登录",status:401,isAuthError:!0}):{success:!1,error:"请先登录",status:401,isAuthError:!0};case 403:throw new Error("没有权限访问该资源");case 404:return{success:!1,error:"NOT_FOUND",status:404,message:"请求的资源不存在"};case 500:throw new Error("服务器内部错误");default:throw new Error(s.message||"请求失败")}}return t.json()}async request(t,s={}){const o=async n=>{const r=`${n}${t}`,l={headers:this.addAuthHeaders(s.headers),...s},i=new AbortController,u=setTimeout(()=>i.abort(),this.timeout);try{const p=await fetch(r,{...l,signal:i.signal});return clearTimeout(u),await this.handleResponse(p)}catch(p){throw clearTimeout(u),p.name==="AbortError"?new Error("请求超时,请检查网络连接"):p}};try{return await o(this.currentURL)}catch(n){if(this.isNetworkError(n)&&!this.isUsingFallback){console.warn("主要接口请求失败,尝试备用接口:",n.message),await new Promise(r=>setTimeout(r,La));try{return this.switchToFallback(),await o(this.currentURL)}catch(r){throw console.error("备用接口也无法访问:",r.message),n}}throw n}}async get(t,s={}){const o=new URLSearchParams(s).toString(),n=o?`${t}?${o}`:t;return this.request(n,{method:"GET"})}async post(t,s={}){return this.request(t,{method:"POST",body:JSON.stringify(s)})}async put(t,s={}){return this.request(t,{method:"PUT",body:JSON.stringify(s)})}async delete(t){return this.request(t,{method:"DELETE"})}}const re=new $a,Ke={getChallenge(){return re.get("/auth/challenge")},register(e){return re.post("/auth/register",e)},login(e){return re.post("/auth/login",e)},verifyEmail(e){return re.post("/auth/verify-email",e)},resendVerificationCode(e){return re.post("/auth/resend-code",e)},getUserInfo(){return re.get("/user/profile")},getCurrentUser(){return re.get("/user/profile")},logout(){return re.post("/auth/logout")},forgotPassword(e){return re.post("/auth/forgot-password",e)},resetPassword(e){return re.post("/auth/reset-password",e)}},yt={getSubjectLinks(e,t="movies",s={}){return re.get(`/subjects/${t}/${e}/links`,s)},getMovieLinks(e,t={}){return re.get(`/movie/${e}/links`,t)},addSubjectLink(e,t="movies",s){return re.post(`/subjects/${t}/${e}/links`,s)},addMovieLink(e,t){return re.post(`/movies/${e}/links`,t)},updateSubjectLink(e,t,s="movies",o){return re.put(`/subjects/${s}/${e}/links/${t}`,o)},updateMovieLink(e,t){return re.put(`/movies/links/${e}`,t)},deleteSubjectLink(e,t,s="movies"){return re.delete(`/subjects/${s}/${e}/links/${t}`)},deleteMovieLink(e,t){return re.delete(`/movies/${e}/links/${t}`)},voteLink(e,t,s="movie"){return re.post(`/links/${e}/vote`,{vote_type:t,link_type:s})},removeVote(e,t,s="movie"){return re.post(`/links/${e}/vote`,{vote_type:t,link_type:s})},getLinkVoteStatus(e,t="movie"){return re.get(`/links/${e}/vote-status`,{link_type:t})},getUserVote(e,t="movie"){return re.get(`/links/${e}/vote-status`,{link_type:t})},reportLink(e){return re.post("/reports",e)}},Ua={getUserProfile(e){return re.get("/user/profile/")},getUserLinks(e={}){return re.get("/user/links",e)},getUserLinksByCategory(){return re.get("/user/links/category")},updateUserName(e){return re.put("/user/name",e)},getAllUsers(){return re.get("/admin/users")},banUser(e,t){return re.put(`/admin/users/${e}/ban`,{reason:t})},unbanUser(e){return re.put(`/admin/users/${e}/unban`)}};async function Pa(e){const t=new TextEncoder().encode(e),s=await crypto.subtle.digest("SHA-256",t);return Array.from(new Uint8Array(s)).map(r=>r.toString(16).padStart(2,"0")).join("")}function Da(e,t){return e.startsWith("0".repeat(t))}async function po(e,t,s=null){let o=0;const n=Date.now();for(;;){const r=e+o.toString(),l=await Pa(r);if(Da(l,t)){const u=Date.now()-n;return console.log(`工作量证明完成: nonce=${o}, 耗时=${u}ms, hash=${l}`),{challenge:e,nonce:o.toString(),hash:l}}o++,o%1e3===0&&(s&&s(o),await new Promise(i=>setTimeout(i,1)))}}const xe=I(null),Lt=I(null),we=I(!1),ce=I(""),Zo=I(!1),Ia=Ve(()=>!!xe.value&&!!Lt.value),Fa=Ve(()=>{var e;return((e=xe.value)==null?void 0:e.email)||""}),Oa=Ve(()=>{var e;return((e=xe.value)==null?void 0:e.id)||""}),X={user:xe,token:Lt,loading:we,error:ce,initialized:Zo,isAuthenticated:Ia,userEmail:Fa,userId:Oa,async initAuth(){if(!Zo.value)try{we.value=!0;const e=ye.getToken(),t=ye.getUser();if(e){Lt.value=e,t&&(xe.value=t,console.log("使用本地存储的用户信息:",t));try{const s=await Ke.getCurrentUser();s&&s.data?(xe.value=s.data,ye.setUser(s.data)):s&&(xe.value=s,ye.setUser(s)),ce.value=""}catch(s){console.error("获取用户信息失败:",s),s.status===401?(ye.removeToken(),ye.removeUser(),Lt.value=null,xe.value=null,console.log("Token已过期,已清除登录状态")):(console.warn("网络或其他错误,保留登录状态:",s.message||s),!t&&e&&console.warn("首次网络失败且无本地用户信息,保持token但清空用户状态"))}}}catch(e){console.error("初始化认证失败:",e)}finally{we.value=!1,Zo.value=!0}},async signIn(e,t){try{we.value=!0,ce.value="";const s=await Ke.login({email:e,password:t});return Lt.value=s.data.token,xe.value=s.data.user,ye.setToken(s.data.token),ye.setUser(s.data.user),{success:!0,user:s.data.user}}catch(s){return console.error("登录错误:",s),ce.value=s.message||"登录过程中发生错误",{success:!1,error:ce.value}}finally{we.value=!1}},async signUp(e,t,s={}){try{we.value=!0,ce.value="";const o=await Ke.register({email:e,password:t,...s});return Lt.value=o.token,xe.value=o.user,ye.setToken(o.token),{success:!0,data:o}}catch(o){return console.error("注册错误:",o),ce.value=o.message||"注册过程中发生错误",{success:!1,error:ce.value}}finally{we.value=!1}},async signUpWithProof(e,t){try{we.value=!0,ce.value="";const s=await Ke.getChallenge();if(!s.success)throw new Error(s.error||"获取挑战失败");const{challenge:o,difficulty:n}=s.data,r=await po(o,n,t),l={username:e.username,email:e.email,password:e.password,proof_of_work:{challenge:o,nonce:r.nonce,hash:r.hash}},i=await Ke.register(l);return i.success?{success:!0,data:i.data}:{success:!1,error:i.error}}catch(s){return console.error("注册失败:",s),ce.value=s.message||"注册失败",{success:!1,error:ce.value}}finally{we.value=!1}},async verifyEmail(e,t){try{we.value=!0,ce.value="";const s={email:e,code:t},o=await Ke.verifyEmail(s);return o.success?{success:!0,data:o.data}:{success:!1,error:o.error}}catch(s){return console.error("邮箱验证失败:",s),ce.value=s.message||"验证失败",{success:!1,error:ce.value}}finally{we.value=!1}},async resendVerificationCode(e,t=()=>{}){try{we.value=!0,ce.value="";const s=await Ke.getChallenge();if(!s.success)throw new Error(s.error||"获取挑战失败");const{challenge:o,difficulty:n}=s.data,r=await po(o,n,t),l={email:e,challenge:o,solution:r.nonce},i=await Ke.resendVerificationCode(l);return i.success?{success:!0,data:i.data}:{success:!1,error:i.error}}catch(s){return console.error("重发验证码失败:",s),ce.value=s.message||"发送失败",{success:!1,error:ce.value}}finally{we.value=!1}},async forgotPassword(e,t){try{we.value=!0,ce.value="";const s=await Ke.getChallenge();if(!s.success)throw new Error(s.error||"获取挑战失败");const{challenge:o,difficulty:n}=s.data,r=await po(o,n,t),l={email:e,proof_of_work:{challenge:o,nonce:r.nonce,hash:r.hash}},i=await Ke.forgotPassword(l);return i.success?{success:!0,data:i.data}:{success:!1,error:i.message||i.error}}catch(s){return console.error("忘记密码失败:",s),ce.value=s.message||"发送失败",{success:!1,error:ce.value}}finally{we.value=!1}},async resetPassword(e,t,s){try{we.value=!0,ce.value="";const o=await Ke.resetPassword({email:e,code:t,password:s});return o.success?{success:!0,data:o.data}:{success:!1,error:o.message||o.error}}catch(o){return console.error("重置密码失败:",o),ce.value=o.message||"重置失败",{success:!1,error:ce.value}}finally{we.value=!1}},async signOut(){try{return we.value=!0,ce.value="",ye.removeToken(),ye.removeUser(),Lt.value=null,xe.value=null,{success:!0}}catch(e){return console.error("登出错误:",e),ce.value="登出过程中发生错误",ye.removeToken(),ye.removeUser(),Lt.value=null,xe.value=null,{success:!1,error:ce.value}}finally{we.value=!1}},clearError(){ce.value=""},hasPermission(e){return!!xe.value},getDisplayName(){var e;return xe.value?((e=xe.value.user_metadata)==null?void 0:e.full_name)||xe.value.email||"用户":"未登录"},getAvatarUrl(){var e;return xe.value&&((e=xe.value.user_metadata)==null?void 0:e.avatar_url)||null}},Xe=(e,t)=>{const s=e.__vccOpts||e;for(const[o,n]of t)s[o]=n;return s},Ra={class:"auth-switch"},ja={class:"switch-container"},Ba=["checked"],Na=["checked"],za=Xe({__name:"AuthSwitch",props:{modelValue:{type:String,default:"login"}},emits:["update:modelValue"],setup(e,{emit:t}){const s=e,o=Ve(()=>s.modelValue==="login"?"2%":"52%");return(n,r)=>(V(),M("div",Ra,[a("div",ja,[a("input",{id:"login",type:"radio",name:"authMode",value:"login",checked:e.modelValue==="login",onChange:r[0]||(r[0]=l=>n.$emit("update:modelValue","login")),class:"switch-input"},null,40,Ba),r[2]||(r[2]=a("label",{for:"login",class:"switch-label"},"登录",-1)),a("input",{id:"register",type:"radio",name:"authMode",value:"register",checked:e.modelValue==="register",onChange:r[1]||(r[1]=l=>n.$emit("update:modelValue","register")),class:"switch-input"},null,40,Na),r[3]||(r[3]=a("label",{for:"register",class:"switch-label"},"注册",-1)),a("div",{class:"slider",style:Jt({left:o.value})},null,4)])]))}},[["__scopeId","data-v-d47a81a4"]]),qa={class:"toast-container"},Or=Xe({__name:"ToastContainer",props:{errorMessage:{type:String,default:""},successMessage:{type:String,default:""},duration:{type:Number,default:3e3},autoClose:{type:Boolean,default:!0}},emits:["clear-error","clear-success"],setup(e,{emit:t}){const s=e,o=t;let n=null,r=null;const l=()=>{n&&(clearTimeout(n),n=null),o("clear-error")},i=()=>{r&&(clearTimeout(r),r=null),o("clear-success")};return Ye(()=>s.errorMessage,u=>{u&&s.autoClose&&(n&&clearTimeout(n),n=setTimeout(()=>{l()},s.duration))}),Ye(()=>s.successMessage,u=>{u&&s.autoClose&&(r&&clearTimeout(r),r=setTimeout(()=>{i()},s.duration))}),ws(()=>{n&&clearTimeout(n),r&&clearTimeout(r)}),(u,p)=>(V(),M("div",qa,[e.errorMessage?(V(),M("div",{key:0,class:"toast error-toast",onClick:l},[a("span",null,G(e.errorMessage),1),p[0]||(p[0]=a("button",{class:"toast-close"},"×",-1))])):j("",!0),e.successMessage?(V(),M("div",{key:1,class:"toast success-toast",onClick:i},[a("span",null,G(e.successMessage),1),p[1]||(p[1]=a("button",{class:"toast-close"},"×",-1))])):j("",!0)]))}},[["__scopeId","data-v-52e28bd4"]]),Ha={class:"auth-container"},Ga={key:0,class:"initializing-container"},Ka={key:1,class:"user-info"},Wa={class:"user-header"},Ja={class:"user-details"},Qa={class:"user-display-name"},Za={key:0,class:"user-email"},Ya={class:"user-stats"},Xa={class:"stat-item"},eu={class:"stat-value"},tu={class:"stat-item"},su={class:"stat-value"},ou={key:0,class:"nickname-edit-form"},nu={class:"form-group"},ru={class:"nickname-actions"},lu=["disabled"],iu={key:2,class:"auth-forms"},au={key:1,class:"back-button"},uu={class:"form-group"},cu={class:"input-wrapper"},du={class:"form-group"},fu={class:"input-wrapper"},pu=["disabled"],hu={class:"forgot-password-link"},mu={class:"form-group"},gu={class:"form-group"},vu={class:"form-group"},_u={class:"form-group"},yu={key:0,class:"proof-progress"},wu={class:"progress-bar"},bu=["disabled"],ku={class:"form-description"},xu={class:"form-group"},Cu=["readonly"],Tu={class:"form-group"},Su=["disabled"],Eu={class:"resend-code"},Au=["disabled"],Vu={class:"form-group"},Mu={key:0,class:"proof-progress"},Lu={class:"progress-bar"},$u=["disabled"],Uu={class:"form-group"},Pu={class:"form-group"},Du={class:"form-group"},Iu={class:"form-group"},Fu=["disabled"],Ou=Xe({__name:"AuthComponent",setup(e){const t=I(null),s=I(null),o=I("login"),n=I(!1);I(""),I("");const r=I(!1),l=I(!0),i=I(""),u=I(""),p=I({email:"",password:""});ws(()=>{stopWatching&&stopWatching()});const c=I({email:"",password:"",confirmPassword:"",username:""}),v=I({email:"",code:""}),x=I({email:""}),y=I({email:"",code:"",password:"",confirmPassword:""}),C=I(!1),R=I(0),U=I(""),w=I({username:""});ts(async()=>{try{await X.initAuth(),t.value=X.user.value,t.value&&await Q();const N=Ye(()=>X.user.value,k=>{t.value=k,k?Q():s.value=null},{immediate:!1})}finally{l.value=!1}});const b=()=>{i.value="",u.value=""},Q=async()=>{if(t.value)try{const N=await Ke.getCurrentUser();N?(s.value=N,console.log("用户资料数据:",N)):console.error("获取用户数据失败")}catch(N){console.error("加载用户资料异常:",N)}},F=()=>{var N;r.value=!r.value,r.value&&(w.value.username=((N=t.value)==null?void 0:N.username)||""),b()},ae=async()=>{var N,k;if(t.value){b(),n.value=!0;try{const O=w.value.username.trim();if(!O){i.value="用户名不能为空";return}if(O.length<2||O.length>10){i.value="用户名长度必须在2-10个字符之间";return}const le=await Ua.updateUserName({username:O});if(le.success){const te={...t.value,...le.data};t.value=te,X.user.value=te,u.value=le.message||"用户名更新成功!",r.value=!1,await Q()}else i.value=le.message||"更新用户名失败"}catch(O){console.error("更新用户名错误:",O),(k=(N=O.response)==null?void 0:N.data)!=null&&k.message?i.value=O.response.data.message:i.value="更新用户名失败,请稍后重试"}finally{n.value=!1}}},ze=async()=>{b(),n.value=!0;try{const N=await X.signIn(p.value.email,p.value.password);N.success?(t.value=N.user,u.value="登录成功!",p.value={email:"",password:""},await Q()):i.value=N.error||"登录失败,请检查邮箱和密码"}catch(N){i.value="登录过程中发生错误",console.error("登录错误:",N)}finally{n.value=!1}},Le=async()=>{if(b(),c.value.password!==c.value.confirmPassword){i.value="两次输入的密码不一致";return}n.value=!0;try{const N=await X.signUpWithProof(c.value,k=>{C.value=!0,R.value=k});C.value=!1,R.value=0,N.success?(U.value=c.value.email,v.value.email=c.value.email,o.value="verify-email",u.value="注册成功!请查收邮件并验证邮箱",c.value={email:"",password:"",confirmPassword:"",username:""}):i.value=N.error||"注册失败,请稍后重试"}catch(N){C.value=!1,R.value=0,i.value="注册过程中发生错误",console.error("注册错误:",N)}finally{n.value=!1}},$e=async()=>{b(),n.value=!0;try{const N=await X.verifyEmail(v.value.email,v.value.code);N.success?(u.value="邮箱验证成功!请登录",o.value="login",v.value={email:"",code:""},U.value=""):i.value=N.error||"验证失败,请重试"}catch(N){i.value="验证过程中发生错误",console.error("验证错误:",N)}finally{n.value=!1}},We=async()=>{b(),n.value=!0;try{const N=v.value.email||U.value,k=await X.resendVerificationCode(N,O=>{console.log("重发验证码进度:",O)});k.success?u.value="验证码已重新发送,请查收邮件":i.value=k.error||"发送失败,请重试"}catch(N){i.value="发送过程中发生错误",console.error("重发验证码错误:",N)}finally{n.value=!1}},me=async()=>{b(),n.value=!0;try{const N=await X.forgotPassword(x.value.email,k=>{C.value=!0,R.value=k});C.value=!1,R.value=0,N.success?(y.value.email=x.value.email,o.value="reset-password",u.value="重置码已发送,请查收邮件",x.value={email:""}):i.value=N.error||"发送失败,请重试"}catch(N){C.value=!1,R.value=0,i.value="发送过程中发生错误",console.error("忘记密码错误:",N)}finally{n.value=!1}},Ce=async()=>{if(b(),y.value.password!==y.value.confirmPassword){i.value="两次输入的密码不一致";return}n.value=!0;try{const N=await X.resetPassword(y.value.email,y.value.code,y.value.password);N.success?(u.value="密码重置成功!请使用新密码登录",o.value="login",y.value={email:"",code:"",password:"",confirmPassword:""}):i.value=N.error||"重置失败,请重试"}catch(N){i.value="重置过程中发生错误",console.error("重置密码错误:",N)}finally{n.value=!1}},$t=()=>{o.value="login",b()},ot=()=>{X.signOut(),u.value="已成功登出",t.value=null,s.value=null};return(N,k)=>(V(),M("div",Ha,[l.value?(V(),M("div",Ga,k[18]||(k[18]=[a("div",{class:"loading-spinner"},null,-1),a("p",null,"加载中...",-1)]))):t.value?(V(),M("div",Ka,[a("div",Wa,[a("div",Ja,[a("div",Qa,G(t.value.username||t.value.email),1),t.value.username?(V(),M("div",Za,G(t.value.email),1)):j("",!0),a("div",Ya,[a("span",Xa,[k[19]||(k[19]=a("span",{class:"stat-icon"},[a("svg",{viewBox:"0 0 100 100",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M15 75 Q15 80 20 80 L80 80 Q85 80 85 75 Q85 70 80 65 L55 25 Q52 20 50 20 Q48 20 45 25 L20 65 Q15 70 15 75 Z",fill:"currentColor",stroke:"currentColor","stroke-width":"2","stroke-linejoin":"round"})])],-1)),a("span",eu,G(s.value&&s.value.data&&s.value.data.total_likes||0),1)]),a("span",tu,[k[20]||(k[20]=a("span",{class:"stat-icon down-icon"},[a("svg",{viewBox:"0 0 100 100",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M15 75 Q15 80 20 80 L80 80 Q85 80 85 75 Q85 70 80 65 L55 25 Q52 20 50 20 Q48 20 45 25 L20 65 Q15 70 15 75 Z",fill:"currentColor",stroke:"currentColor","stroke-width":"2","stroke-linejoin":"round"})])],-1)),a("span",su,G(s.value&&s.value.data&&s.value.data.total_dislikes||0),1)])])]),a("button",{onClick:F,class:"edit-nickname-btn"},G(r.value?"取消":"编辑用户名"),1)]),r.value?(V(),M("div",ou,[a("div",nu,[k[21]||(k[21]=a("label",null,"用户名",-1)),ne(a("input",{"onUpdate:modelValue":k[0]||(k[0]=O=>w.value.username=O),type:"text",placeholder:"请输入用户名",class:"form-input",maxlength:"10"},null,512),[[pe,w.value.username]]),k[22]||(k[22]=a("div",{class:"nickname-hint"},"用户名长度为2-10个字符",-1))]),a("div",ru,[a("button",{onClick:ae,disabled:n.value,class:"save-nickname-btn"},G(n.value?"保存中...":"保存"),9,lu),a("button",{onClick:F,class:"cancel-nickname-btn"}," 取消 ")])])):j("",!0),a("button",{onClick:ot,class:"sign-out-btn"}," 退出登录 ")])):(V(),M("div",iu,[["verify-email","forgot-password","reset-password"].includes(o.value)?j("",!0):(V(),Ts(za,{key:0,modelValue:o.value,"onUpdate:modelValue":k[1]||(k[1]=O=>o.value=O)},null,8,["modelValue"])),["verify-email","forgot-password","reset-password"].includes(o.value)?(V(),M("div",au,[a("button",{onClick:$t,class:"back-btn"}," ← 返回登录 ")])):j("",!0),o.value==="login"?(V(),M("form",{key:2,onSubmit:Ge(ze,["prevent"]),class:"auth-form","data-mode":"login"},[a("div",uu,[k[23]||(k[23]=a("label",null,"邮箱",-1)),a("div",cu,[ne(a("input",{"onUpdate:modelValue":k[2]||(k[2]=O=>p.value.email=O),type:"email",required:"",placeholder:"请输入邮箱",class:"form-input"},null,512),[[pe,p.value.email]])])]),a("div",du,[k[24]||(k[24]=a("label",null,"密码",-1)),a("div",fu,[ne(a("input",{"onUpdate:modelValue":k[3]||(k[3]=O=>p.value.password=O),type:"password",required:"",placeholder:"请输入密码",class:"form-input"},null,512),[[pe,p.value.password]])])]),a("button",{type:"submit",disabled:n.value,class:"auth-submit-btn"},G(n.value?"登录中...":"登录"),9,pu),a("div",hu,[a("button",{type:"button",onClick:k[4]||(k[4]=O=>o.value="forgot-password"),class:"link-btn"}," 忘记密码? ")])],32)):j("",!0),o.value==="register"?(V(),M("form",{key:3,onSubmit:Ge(Le,["prevent"]),class:"auth-form","data-mode":"register"},[a("div",mu,[k[25]||(k[25]=a("label",null,"用户名",-1)),ne(a("input",{"onUpdate:modelValue":k[5]||(k[5]=O=>c.value.username=O),type:"text",required:"",placeholder:"3-10个字符",class:"form-input",minlength:"3",maxlength:"10"},null,512),[[pe,c.value.username]])]),a("div",gu,[k[26]||(k[26]=a("label",null,"邮箱",-1)),ne(a("input",{"onUpdate:modelValue":k[6]||(k[6]=O=>c.value.email=O),type:"email",required:"",placeholder:"请输入邮箱",class:"form-input"},null,512),[[pe,c.value.email]])]),a("div",vu,[k[27]||(k[27]=a("label",null,"密码",-1)),ne(a("input",{"onUpdate:modelValue":k[7]||(k[7]=O=>c.value.password=O),type:"password",required:"",placeholder:"至少6位",class:"form-input",minlength:"6"},null,512),[[pe,c.value.password]])]),a("div",_u,[k[28]||(k[28]=a("label",null,"确认密码",-1)),ne(a("input",{"onUpdate:modelValue":k[8]||(k[8]=O=>c.value.confirmPassword=O),type:"password",required:"",placeholder:"请再次输入密码",class:"form-input"},null,512),[[pe,c.value.confirmPassword]])]),C.value?(V(),M("div",yu,[k[29]||(k[29]=a("div",{class:"progress-text"},"正在计算工作量证明...",-1)),a("div",wu,[a("div",{class:"progress-fill",style:Jt({width:Math.min(R.value/1e3,100)+"%"})},null,4)])])):j("",!0),a("button",{type:"submit",disabled:n.value||C.value,class:"auth-submit-btn"},G(C.value?"计算中...":n.value?"注册中...":"注册"),9,bu)],32)):j("",!0),o.value==="verify-email"?(V(),M("form",{key:4,onSubmit:Ge($e,["prevent"]),class:"auth-form"},[k[32]||(k[32]=a("div",{class:"form-title"},"邮箱验证",-1)),a("div",ku," 我们已向 "+G(U.value||v.value.email)+" 发送了验证码,请查收邮件并输入验证码。 ",1),a("div",xu,[k[30]||(k[30]=a("label",null,"邮箱",-1)),ne(a("input",{"onUpdate:modelValue":k[9]||(k[9]=O=>v.value.email=O),type:"email",required:"",placeholder:"请输入邮箱",class:"form-input",readonly:!!U.value},null,8,Cu),[[pe,v.value.email]])]),a("div",Tu,[k[31]||(k[31]=a("label",null,"验证码",-1)),ne(a("input",{"onUpdate:modelValue":k[10]||(k[10]=O=>v.value.code=O),type:"text",required:"",placeholder:"请输入6位验证码",class:"form-input",maxlength:"6"},null,512),[[pe,v.value.code]])]),a("button",{type:"submit",disabled:n.value,class:"auth-submit-btn"},G(n.value?"验证中...":"验证邮箱"),9,Su),a("div",Eu,[a("button",{type:"button",onClick:We,disabled:n.value,class:"link-btn"}," 重新发送验证码 ",8,Au)])],32)):j("",!0),o.value==="forgot-password"?(V(),M("form",{key:5,onSubmit:Ge(me,["prevent"]),class:"auth-form"},[k[35]||(k[35]=a("div",{class:"form-title"},"忘记密码",-1)),k[36]||(k[36]=a("div",{class:"form-description"}," 请输入您的邮箱地址,我们将向您发送重置密码的验证码。 ",-1)),a("div",Vu,[k[33]||(k[33]=a("label",null,"邮箱",-1)),ne(a("input",{"onUpdate:modelValue":k[11]||(k[11]=O=>x.value.email=O),type:"email",required:"",placeholder:"请输入注册时使用的邮箱",class:"form-input"},null,512),[[pe,x.value.email]])]),C.value?(V(),M("div",Mu,[k[34]||(k[34]=a("div",{class:"progress-text"},"正在计算工作量证明...",-1)),a("div",Lu,[a("div",{class:"progress-fill",style:Jt({width:Math.min(R.value/1e3,100)+"%"})},null,4)])])):j("",!0),a("button",{type:"submit",disabled:n.value||C.value,class:"auth-submit-btn"},G(C.value?"计算中...":n.value?"发送中...":"发送重置码"),9,$u)],32)):j("",!0),o.value==="reset-password"?(V(),M("form",{key:6,onSubmit:Ge(Ce,["prevent"]),class:"auth-form"},[k[41]||(k[41]=a("div",{class:"form-title"},"重置密码",-1)),k[42]||(k[42]=a("div",{class:"form-description"}," 请输入您收到的验证码和新密码。 ",-1)),a("div",Uu,[k[37]||(k[37]=a("label",null,"邮箱",-1)),ne(a("input",{"onUpdate:modelValue":k[12]||(k[12]=O=>y.value.email=O),type:"email",required:"",placeholder:"请输入邮箱",class:"form-input",readonly:""},null,512),[[pe,y.value.email]])]),a("div",Pu,[k[38]||(k[38]=a("label",null,"验证码",-1)),ne(a("input",{"onUpdate:modelValue":k[13]||(k[13]=O=>y.value.code=O),type:"text",required:"",placeholder:"请输入6位验证码",class:"form-input",maxlength:"6"},null,512),[[pe,y.value.code]])]),a("div",Du,[k[39]||(k[39]=a("label",null,"新密码",-1)),ne(a("input",{"onUpdate:modelValue":k[14]||(k[14]=O=>y.value.password=O),type:"password",required:"",placeholder:"请输入新密码(至少6位)",class:"form-input",minlength:"6"},null,512),[[pe,y.value.password]])]),a("div",Iu,[k[40]||(k[40]=a("label",null,"确认新密码",-1)),ne(a("input",{"onUpdate:modelValue":k[15]||(k[15]=O=>y.value.confirmPassword=O),type:"password",required:"",placeholder:"请再次输入新密码",class:"form-input"},null,512),[[pe,y.value.confirmPassword]])]),a("button",{type:"submit",disabled:n.value,class:"auth-submit-btn"},G(n.value?"重置中...":"重置密码"),9,Fu)],32)):j("",!0)])),Z(Or,{"error-message":i.value,"success-message":u.value,duration:3e3,"auto-close":!0,onClearError:k[16]||(k[16]=O=>i.value=""),onClearSuccess:k[17]||(k[17]=O=>u.value="")},null,8,["error-message","success-message"])]))}},[["__scopeId","data-v-09cfbe3d"]]);class Bt{static async getLinks(t,s={}){try{const o={},{linkType:n,platform:r,page:l=1,limit:i=5,sortBy:u="created_at",sortOrder:p="desc",category:c="movies"}=s;l&&(o.page=l),i&&(o.limit=i),u&&(o.sort_by=u),p&&(o.sort_order=p),n&&(o.type=n==="bt"?"magnet":n),r&&(o.platform=r);const v=await yt.getSubjectLinks(t,c,o);if(!v.success)throw v.error==="NOT_FOUND"||v.status===404?(console.log("电影不存在,返回空结果"),new Error("电影不存在")):(console.error("获取链接失败:",v.error),new Error(`获取链接失败: ${v.error}`));const x=v.data||{};let y=x.links||[];const C=x.pagination||{};Array.isArray(y)||(console.warn("API返回的links不是数组格式:",y),y=[]);const R=y.map(U=>({...U,up_votes:U.likes_count||0,down_votes:U.dislikes_count||0,score:(U.likes_count||0)-(U.dislikes_count||0),user_vote_type:U.user_vote_type==="like"?"up":U.user_vote_type==="dislike"?"down":U.user_vote_type||"",user_display_name:U.username||"匿名用户"}));return{success:!0,data:R,pagination:C,count:R.length,total:C.total||0}}catch(o){return console.error("获取链接服务错误:",o),{success:!1,error:o.message||"获取链接失败",data:[],pagination:{page:1,limit:5,total:0,pages:0},count:0,total:0}}}static async addLink(t){try{const{subjectId:s,movieId:o,category:n="movies",linkType:r,platform:l,url:i,extractCode:u,title:p,quality:c,size:v,original_url:x,has_4k:y,has_hdr:C,has_dolby_atmos:R,has_subtitles:U,is_flac:w,is_wav:b}=t,Q=s||o;if(!Q||!r||!i)throw new Error("缺少必填字段:subjectId, linkType, url");if(!["netdisk","bt","online"].includes(r))throw new Error("无效的链接类型");if(u&&u.length>10)throw new Error("提取码长度不能超过10个字符");const F=await Ke.getChallenge();if(!F.success)throw new Error("获取工作量证明挑战失败");const{challenge:ae,difficulty:ze}=F.data,Le=await po(ae,ze),$e={title:p||"",url:i.trim(),type:r==="bt"?"magnet":r,password:u||"",quality:c||"",size:v||"",original_url:x||"",has_4k:!!y,has_hdr:!!C,has_dolby_atmos:!!R,has_subtitles:!!U,is_flac:!!w,is_wav:!!b,proof_of_work:Le};r==="netdisk"&&l&&l.trim()&&($e.platform=l.trim());const We=await yt.addSubjectLink(Q,n,$e);if(!We.success)throw console.error("添加链接失败:",We.error),new Error(`添加链接失败: ${We.error}`);return{success:!0,data:We.data,message:"链接添加成功"}}catch(s){return console.error("添加链接服务错误:",s),{success:!1,error:s.message||"添加链接失败"}}}static async deleteLink(t,s,o="movies"){try{if(!s)throw new Error("链接ID不能为空");if(!t)throw new Error("主题ID不能为空");if(!X.isAuthenticated.value)throw new Error("用户未登录");const n=await yt.deleteSubjectLink(t,s,o);if(!n.success)throw console.error("删除链接失败:",n.error),new Error(`删除链接失败: ${n.error}`);return{success:!0,message:n.message||"链接删除成功"}}catch(n){return console.error("删除链接服务错误:",n),{success:!1,error:n.message||"删除链接失败"}}}static async updateLink(t,s,o=null,n="movies"){try{if(!t)throw new Error("链接ID不能为空");if(!X.isAuthenticated.value)throw new Error("用户未登录");if(!s.url||!s.linkType)throw new Error("链接地址和类型不能为空");const r={title:s.title||"",url:s.url,type:s.linkType,platform:s.platform||"",password:s.extractCode||"",size:s.size||"",original_url:s.original_url||"",has_4k:s.has_4k||!1,has_hdr:s.has_hdr||!1,has_dolby_atmos:s.has_dolby_atmos||!1,has_subtitles:s.has_subtitles||!1,is_flac:s.is_flac||!1,is_wav:s.is_wav||!1};let l;if(o?l=await yt.updateSubjectLink(o,t,n,r):l=await yt.updateMovieLink(t,r),!l.success)throw console.error("修改链接失败:",l.error),new Error(`修改链接失败: ${l.error}`);return{success:!0,message:l.message||"链接修改成功",data:l.data}}catch(r){return console.error("修改链接服务错误:",r),{success:!1,error:r.message||"修改链接失败"}}}static async voteLink(t,s,o="movie"){try{if(!t||!s)throw new Error("链接ID和投票类型不能为空");if(!["up","down"].includes(s))throw new Error("无效的投票类型");if(!X.isAuthenticated.value)throw new Error("用户未登录");const n=s==="up"?"like":"dislike",r=await yt.voteLink(t,n,o);if(!r.success)throw console.error("投票失败:",r.error),new Error(`投票失败: ${r.error}`);const l=r.data||{};return{success:!0,message:`${s==="up"?"点赞":"点踩"}成功`,data:{up_votes:l.likes_count||0,down_votes:l.dislikes_count||0,user_vote_type:l.user_vote_type==="like"?"up":l.user_vote_type==="dislike"?"down":null}}}catch(n){return console.error("投票服务错误:",n),{success:!1,error:n.message||"投票失败"}}}static async removeVote(t,s=0,o=0,n="up",r="movie"){try{if(!t)throw new Error("链接ID不能为空");if(!X.isAuthenticated.value)throw new Error("用户未登录");const l=n==="up"?"like":"dislike",i=await yt.removeVote(t,l,r);if(!i.success)throw console.error("取消投票失败:",i.error),new Error(`取消投票失败: ${i.error}`);const u=i.data||{};console.log("removeVote API原始响应:",u);let p,c;if(u.likes_count!==void 0&&u.dislikes_count!==void 0){const v=Math.max(0,u.likes_count||0),x=Math.max(0,u.dislikes_count||0);u.likes_count<0||u.dislikes_count<0?(console.warn("API返回负数,使用本地计算:",u),n==="up"?(p=Math.max(0,s-1),c=o):(p=s,c=Math.max(0,o-1))):(p=v,c=x),console.log("使用API返回数据:",{finalUpVotes:p,finalDownVotes:c,apiUpVotes:v,apiDownVotes:x})}else n==="up"?(p=Math.max(0,s-1),c=o):(p=s,c=Math.max(0,o-1)),console.log("使用本地计算数据:",{finalUpVotes:p,finalDownVotes:c,currentUpVotes:s,currentDownVotes:o,voteType:n});return{success:!0,message:"取消投票成功",data:{up_votes:p,down_votes:c,user_vote_type:null}}}catch(l){return console.error("取消投票服务错误:",l),{success:!1,error:l.message||"取消投票失败"}}}static async reportLink(t,s,o="",n="movie"){try{if(!t||!s)throw new Error("链接ID和反馈类型不能为空");if(!X.isAuthenticated.value)throw new Error("用户未登录");const r={link_id:t,link_type:n,type:s.trim(),reason:o.trim()||null},l=await yt.reportLink(r);if(!l.success)throw console.error("反馈失败:",l.error),new Error(`反馈失败: ${l.error}`);return{success:!0,data:l.data,message:"反馈提交成功"}}catch(r){return console.error("反馈服务错误:",r),{success:!1,error:r.message||"反馈失败"}}}}const Ru="data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1756543843235'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='20280'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M512%20330.666667c14.933333%200%2029.866667%204.266667%2040.533333%2014.933333l277.33333399%20234.666667c27.733333%2023.466667%2029.866667%2064%208.53333301%2089.6-23.466667%2027.733333-64%2029.866667-89.6%208.53333299L512%20477.866667l-236.8%20200.53333299c-27.733333%2023.466667-68.266667%2019.19999999-89.6-8.53333299-23.466667-27.733333-19.19999999-68.266667%208.53333301-89.6l277.33333399-234.666667c10.666667-10.666667%2025.6-14.933333%2040.533333-14.933333z'%20fill='currentColor'%20p-id='20281'%3e%3c/path%3e%3c/svg%3e",ju={name:"CustomSelect",props:{modelValue:{type:[String,Number],default:""},options:{type:Array,required:!0,default:()=>[]},placeholder:{type:String,default:"请选择"}},emits:["update:modelValue","change"],data(){return{isOpen:!1}},computed:{selectedLabel(){const e=this.options.find(t=>t.value===this.modelValue);return e?e.label:""}},mounted(){document.addEventListener("click",this.closeDropdown)},beforeUnmount(){document.removeEventListener("click",this.closeDropdown)},methods:{toggleDropdown(){this.isOpen=!this.isOpen},selectOption(e){this.$emit("update:modelValue",e.value),this.$emit("change",e.value),this.isOpen=!1},closeDropdown(){this.isOpen=!1}}},Bu={class:"selected-text"},Nu={class:"select-dropdown"},zu=["onClick"];function qu(e,t,s,o,n,r){return V(),M("div",{class:_e(["custom-select",{"is-open":n.isOpen}]),onClick:t[1]||(t[1]=Ge(()=>{},["stop"]))},[a("div",{class:"select-trigger",onClick:t[0]||(t[0]=(...l)=>r.toggleDropdown&&r.toggleDropdown(...l))},[a("span",Bu,G(r.selectedLabel||s.placeholder),1),a("img",{src:Ru,class:_e(["arrow",{"arrow-up":n.isOpen}]),alt:"箭头"},null,2)]),ne(a("div",Nu,[(V(!0),M(ve,null,Ys(s.options,l=>(V(),M("div",{class:_e(["select-option",{selected:l.value===s.modelValue}]),key:l.value,onClick:i=>r.selectOption(l)},G(l.label),11,zu))),128))],512),[[ao,n.isOpen]])],2)}const Nt=Xe(ju,[["render",qu],["__scopeId","data-v-3b2cba4f"]]),Hu={name:"LinkItemSkeleton"},Gu={class:"link-item skeleton"};function Ku(e,t,s,o,n,r){return V(),M("div",Gu,t[0]||(t[0]=[gr('',2)]))}const Rr=Xe(Hu,[["render",Ku],["__scopeId","data-v-115afd35"]]),Wu=["checked"],Ju={key:0,class:"checkbox-label"},et=Xe({__name:"CheckBox",props:{modelValue:{type:Boolean,default:!1},label:{type:String,default:""},color:{type:String,default:"blue",validator:e=>["blue","green","purple","red"].includes(e)}},emits:["update:modelValue"],setup(e){return(t,s)=>(V(),M("label",{class:_e(["ios-checkbox",e.color])},[a("input",{type:"checkbox",checked:e.modelValue,onChange:s[0]||(s[0]=o=>t.$emit("update:modelValue",o.target.checked))},null,40,Wu),s[1]||(s[1]=a("div",{class:"checkbox-wrapper"},[a("div",{class:"checkbox-bg"}),a("svg",{fill:"none",viewBox:"0 0 24 24",class:"checkbox-icon"},[a("path",{"stroke-linejoin":"round","stroke-linecap":"round","stroke-width":"3",stroke:"currentColor",d:"M4 12L10 18L20 6",class:"check-path"})])],-1)),e.label?(V(),M("span",Ju,G(e.label),1)):j("",!0)],2))}},[["__scopeId","data-v-150f8c13"]]),Qu={class:"tooltip"},Zu={class:"tooltip"},jr=Xe({__name:"CopyTooltip",props:{text:{type:String,required:!0},type:{type:String,default:"url",validator:e=>["url","code"].includes(e)}},emits:["copy-success","copy-error"],setup(e,{emit:t}){const s=e,o=t,n=I(!1),r=Ve(()=>n.value?"已复制":s.type==="url"?"点击复制链接(右键打开)":"点击复制提取码"),l=u=>u,i=async()=>{try{await navigator.clipboard.writeText(s.text),n.value=!0,o("copy-success",s.text),setTimeout(()=>{n.value=!1},2e3)}catch(u){console.error("复制失败:",u),o("copy-error",u)}};return(u,p)=>e.type==="url"?(V(),M("span",{key:0,class:_e(["copy-item",{copied:n.value}]),onClick:i},[ns(G(l(e.text))+" ",1),a("span",Qu,G(r.value),1)],2)):e.type==="code"?(V(),M("code",{key:1,class:_e(["extract-code",{copied:n.value}]),onClick:i},[ns(G(e.text)+" ",1),a("span",Zu,G(r.value),1)],2)):j("",!0)}},[["__scopeId","data-v-aaaa00e5"]]),Yu={quark:{domains:["pan.quark.cn"]},ali:{domains:["www.aliyundrive.com","www.alipan.com"]},baidu:{domains:["pan.baidu.com"]},tianyi:{domains:["cloud.189.cn","content.21cn.com"]},mobile:{domains:["caiyun.139.com","yun.139.com"]},115:{domains:["115cdn.com"]},xunlei:{domains:["pan.xunlei.com"]},uc:{domains:["drive.uc.cn"]},123:{domains:["www.123684.com"]},lanzou:{domains:["lanzou.com","lanzous.com","lanzoux.com","lanzoui.com","lanzouv.com","lanzouw.com","lanzouy.com","lanzn.com","wwi.lanzn.com"]}},Xu=/^magnet:\?xt=urn:btih:[a-fA-F0-9]{32,40}/;function ec(e){if(!e||typeof e!="string")return{type:null,platform:null,isValid:!1};const t=e.trim();if(Xu.test(t))return{type:"bt",platform:null,isValid:!0};for(const[s,o]of Object.entries(Yu))try{const n=new URL(t);if(o.domains.includes(n.hostname))return{type:"netdisk",platform:s,isValid:!0}}catch{continue}return/^https?:\/\/.+/.test(t)?{type:"online",platform:null,isValid:!0}:{type:null,platform:null,isValid:!1}}function Br(e){if(!e||typeof e!="string")return null;const t=[/[?&]password=([a-zA-Z0-9]+)/i,/[?&]pwd=([a-zA-Z0-9]+)/i,/#([a-zA-Z0-9]{4})$/,/提取码[::]\s*([a-zA-Z0-9]+)/i,/密码[::]\s*([a-zA-Z0-9]+)/i,/访问码[::]\s*([a-zA-Z0-9]+)/i,/验证码[::]\s*([a-zA-Z0-9]+)/i,/code[::]\s*([a-zA-Z0-9]+)/i];for(const s of t){const o=e.match(s);if(o&&o[1])return o[1]}return null}function tc(e){if(!e||typeof e!="string")return"";let t=e.trim();const s=t.match(/(https?:\/\/[^\s]+)/i);if(s)return s[1];const o=t.match(/(magnet:\?[^\s]+)/i);return o?o[1]:t}function Nr(e){if(!e||typeof e!="string")return{has_4k:!1,has_hdr:!1,has_dolby_atmos:!1,file_size:null,is_flac:!1,is_wav:!1};e.toLowerCase();const t=/(^|[^a-zA-Z0-9])(4k|4K|2160p|2160P|3840x2160|3840X2160)([^a-zA-Z]|$)/i.test(e),s=/(^|[^a-zA-Z])(hdr|HDR|hdr[\d\+]*|HDR[\d\+]*|dolby\s*vision|Dolby\s*Vision|dolbyvision|DolbyVision)([^a-zA-Z]|$)/i.test(e),o=/(^|[^a-zA-Z\u4e00-\u9fff])(ddp[\d\.]*\s*atmos|DDP[\d\.]*\s*Atmos|杜比全景声|dolby\s*atmos|Dolby\s*Atmos|全景声|杜比音效|杜比立体声|杜比数字音效|杜比环绕声|杜比\s*[\u4e00-\u9fff]*音[\u4e00-\u9fff]*|dolby\s*[\w\s]*audio|Dolby\s*[\w\s]*Audio)([^a-zA-Z\u4e00-\u9fff]|$)/i.test(e),n=/(^|[^a-zA-Z])(flac|FLAC|\.flac|\.FLAC|无损flac|FLAC无损|flac无损)([^a-zA-Z]|$)/i.test(e),r=/(^|[^a-zA-Z])(wav|WAV|\.wav|\.WAV|无损wav|WAV无损|wav无损)([^a-zA-Z]|$)/i.test(e),l=[/[\(\[\(](\d+(?:\.\d+)?[KMGT]B?)[\)\]\)]/gi,/[\(\[\(](\d+(?:\.\d+)?[kmgt]b?)[\)\]\)]/gi,/容量(\d+(?:\.\d+)?[KMGT]B?)/gi,/大小(\d+(?:\.\d+)?[KMGT]B?)/gi,/(\d+(?:\.\d+)?[KMGT]B?)容量/gi,/(\d+(?:\.\d+)?[KMGT]B?)大小/gi,/[\||](\d+(?:\.\d+)?[KMGT]B?)[\||]/gi,/[\s\||](\d+(?:\.\d+)?[KMGT]B?)[\s\||]/gi];let i=null;for(const u of l){const p=e.match(u);if(p&&p.length>0){const c=p.map(v=>{const x=v.match(/(\d+(?:\.\d+)?[KMGTkmgt]B?)/i);if(x){let y=x[1];return(y.endsWith("GB")||y.endsWith("MB")||y.endsWith("KB")||y.endsWith("TB"))&&(y=y.slice(0,-1)),y=y.toUpperCase(),y}return null}).filter(Boolean);if(c.length>0){i=c.join(" + ");break}}}return{has_4k:t,has_hdr:s,has_dolby_atmos:o,file_size:i,is_flac:n,is_wav:r}}function zr(e){const t=Br(e),s=tc(e),o=ec(s),n=Br(s),r=t||n;return{linkType:o.type||"",platform:o.platform||"",extractCode:r||"",cleanedUrl:s,isValid:o.isValid}}const Me={ajax:e=>new Promise((t,s)=>{if(console.log("[LinkChecker] 发送请求:",{method:e.type||"GET",url:e.url,headers:e.headers||{}}),typeof GM_xmlhttpRequest<"u")console.log("[LinkChecker] 使用 GM_xmlhttpRequest"),GM_xmlhttpRequest({method:e.type||"GET",url:e.url,headers:e.headers||{},data:e.data,timeout:e.timeout||1e4,onload:function(o){if(console.log("[LinkChecker] 请求成功:",{status:o.status,url:e.url,responseLength:o.responseText?o.responseText.length:0}),e.dataType==="json")try{const n=JSON.parse(o.responseText);e.success&&e.success(n),t(n)}catch(n){console.warn("[LinkChecker] JSON解析错误:",n),e.success&&e.success(o.responseText),t(o.responseText)}else e.success&&e.success(o.responseText),t(o.responseText)},onerror:function(o){console.error("[LinkChecker] 请求失败:",{status:o.status,statusText:o.statusText,url:e.url}),e.error&&e.error(o),s(new Error(`Request failed: ${o.statusText}`))},ontimeout:function(){console.error("[LinkChecker] 请求超时:",e.url),e.error&&e.error({status:0,statusText:"Timeout"}),s(new Error("Request timeout"))}});else{console.log("[LinkChecker] 使用原生 XMLHttpRequest");const o=new XMLHttpRequest;o.open(e.type||"GET",e.url,!0),e.headers&&Object.keys(e.headers).forEach(n=>{o.setRequestHeader(n,e.headers[n])}),o.timeout=e.timeout||1e4,o.onload=function(){if(o.status>=200&&o.status<300)if(console.log("[LinkChecker] 原生请求成功:",{status:o.status,url:e.url,responseLength:o.responseText?o.responseText.length:0}),e.dataType==="json")try{const n=JSON.parse(o.responseText);e.success&&e.success(n),t(n)}catch(n){console.warn("[LinkChecker] JSON解析错误:",n),e.success&&e.success(o.responseText),t(o.responseText)}else e.success&&e.success(o.responseText),t(o.responseText);else console.error("[LinkChecker] 原生请求失败:",{status:o.status,statusText:o.statusText,url:e.url}),e.error&&e.error(o),s(new Error(`Request failed: ${o.statusText}`))},o.onerror=function(){e.error&&e.error(o),s(new Error("Network error"))},o.ontimeout=function(){e.error&&e.error(o),s(new Error("Request timeout"))},e.data?e.data instanceof FormData||typeof e.data=="string"?o.send(e.data):o.send(JSON.stringify(e.data)):o.send()}})},q={info:(...e)=>console.log("[LinkChecker]",...e),debug:(...e)=>console.debug("[LinkChecker]",...e),warn:(...e)=>console.warn("[LinkChecker]",...e),error:(...e)=>console.error("[LinkChecker]",...e)},qr={baidu:{reg:/(?:https?:\/\/)?pan\.baidu\.com\/s\/([\w\-]+)/i,replaceReg:/(?:https?:\/\/)?pan\.baidu\.com\/s\/([\w\-]+)/i,prefix:"https://pan.baidu.com/s/",checkFun:(e,t)=>{q.info("🔍 百度网盘检测开始:",e);let s=e&&e.includes&&e.includes("http")?e:"https://pan.baidu.com/s/"+e;q.info("📡 请求URL:",s),Me.ajax({type:"get",url:s,success:o=>{q.info("百度网盘响应:",{shareId:e,responseLength:o?o.length:0,responsePreview:o?o.substring(0,200):"null",responseType:typeof o});let n=1;!o||typeof o!="string"?(n=0,q.warn("百度网盘无响应或响应格式错误")):o.includes("输入提取码")||o.includes("请输入提取码")?(n=2,q.info("百度网盘需要提取码")):o.includes("不存在")||o.includes("已失效")?(n=-1,q.warn("百度网盘链接失效")):q.info("百度网盘链接有效");const r={state:n};q.info("百度网盘检测结果:",r),t&&t(r)},error:function(o){q.error("💥 百度网盘请求失败:",o),t&&t({state:0})}})}},weiyun:{reg:/(?:https?:\/\/)?\bshare\.weiyun\.com\/([\w\-]{7,})(?!.)(?!\.)/gi,replaceReg:/(?:https?:\/\/)?share\.weiyun\.com\/([\w\-]{7,})(?!\.)/gi,prefix:"https://share.weiyun.com/",checkFun:(e,t)=>{let s=e&&e.includes&&e.includes("http")?e:"https://share.weiyun.com/"+e;Me.ajax({type:"get",url:s,success:o=>{let n=0;q.info(e,"weiyun",o),!o||typeof o!="string"?n=0:o.includes("已删除")||o.includes("违反相关法规")||o.includes("已过期")||o.includes("已经删除")||o.includes("目录无效")?n=-1:o.includes('"need_pwd":null')&&o.includes('"pwd":""')?n=1:(o.includes('"need_pwd":1')||o.includes('"pwd":"'))&&(n=2),t&&t({state:n})},error:function(){t&&t({state:0})}})}},lanzou:{reg:/(?:https?:\/\/)?(?:[\w\-]+\.)?\blanzou.?\.com\/([\w\-]{7,})(?!\.)(?:\/)?/gi,replaceReg:/(?:https?:\/\/)?(?:[\w\-]+\.)?lan(?:zou?|.v|z).?\.com\/([\w\-]{7,})(?!\.)(?:\/)?/gi,prefix:"https://www.lanzoum.com/",checkFun:(e,t)=>{let s=e&&e.includes&&e.includes("http")?e:"https://www.lanzoum.com/"+e;Me.ajax({type:"get",url:s,success:o=>{let n=1;!o||typeof o!="string"?n=0:o.includes("输入密码")?n=2:(o.includes("来晚啦")||o.includes("不存在"))&&(n=-1),t&&t({state:n})},error:function(){t&&t({state:0})}})}},aliyun:{reg:/(?:https?:\/\/)?www\.aliyundrive\.com\/s\/([\w\-]{8,})(?![.\/])$/gi,replaceReg:/(?:https?:\/\/)?www\.ali(?:pan|yundrive)\.com\/s\/([\w\-]{8,})(?![.\/])/gi,prefix:"https://www.aliyundrive.com/s/",checkFun:(e,t)=>{q.info("aliyun id ",e),Me.ajax({type:"post",url:"https://api.aliyundrive.com/adrive/v3/share_link/get_share_by_anonymous",data:JSON.stringify({share_id:e}),headers:{"Content-Type":"application/json"},dataType:"json",success:s=>{q.debug("aliyun response ",s);let o=1;!s||typeof s!="object"?o=0:s.code&&s.code.indexOf("ShareLink")>-1?o=-1:(s.code||s.file_count&&s.file_count==0)&&(o=0),t&&t({state:o})},error:function(){t&&t({state:0})}})}},pan123:{reg:/(?:h?ttps?:\/\/)?(?:www\.)?\b(?:123pan|123865)\.com\/s\/([\w\-]{8,})\b/gi,replaceReg:/(?:h?ttps?:\/\/)?(?:www\.)?(?:123pan|123865)\.com\/s\/([\w\-]{8,})(\.html)?\b/gi,prefix:"https://www.123pan.com/s/",checkFun:(e,t)=>{q.info("Pan123 check id "+e),Me.ajax({type:"get",url:"https://www.123pan.com/api/share/info?shareKey="+e,success:s=>{q.debug("Pan123 check response",s);let o=typeof s=="string"?JSON.parse(s):s,n=1;s?typeof s=="string"&&s.includes("分享页面不存在")||o&&o.code!=0?n=-1:o&&o.data&&o.data.HasPwd&&(n=2):n=0,t&&t({state:n})},error:function(){t&&t({state:0})}})}},quark:{reg:/(?:https?:\/\/)?\bpan.quark\.cn\/s\/([\w\-]{8,})(?!\.)/gi,replaceReg:/(?:https?:\/\/)?pan.quark\.cn\/s\/([\w\-]{8,})(?!\.)/gi,prefix:"https://pan.quark.cn/s/",checkFun:(e,t)=>{q.info("Quark check id "+e),Me.ajax({type:"post",data:JSON.stringify({pwd_id:e,passcode:""}),url:"https://drive-h.quark.cn/1/clouddrive/share/sharepage/token?pr=ucpro&fr=pc",headers:{"Content-Type":"application/json"},dataType:"json",success:s=>{q.debug("Quark token response",s);let o=typeof s=="string"?JSON.parse(s):s,n=0;if(q.debug("Quark token rsp",o.message),!s||!o)n=0;else if(o.message&&o.message.includes("需要提取码"))n=2;else if(o.message&&o.message.includes("ok")){var r=o.data.stoken.replace(/\+/g,"%2B").replace(/\"/g,"%22").replace(/\'/g,"%27").replace(/\//g,"%2F");const l=Date.now(),i="https://drive-h.quark.cn/1/clouddrive/share/sharepage/detail?pr=ucpro&fr=pc&uc_param_str=&ver=2&pwd_id="+e+"&stoken="+r+"&pdir_fid=0&force=0&_page=1&_size=50&_fetch_banner=1&_fetch_share=1&fetch_relate_conversation=1&_fetch_total=1&_sort=file_type:asc,file_name:asc&__dt="+Math.floor(Math.random()*1e4)+"&__t="+l;Me.ajax({type:"get",url:i,success:u=>{q.debug("checkQuark detail response",u);let p=typeof u=="string"?JSON.parse(u):u,c=0;if(p&&p.status===404&&p.code===41004){c=-1,q.warn("Quark file not found (404):",p.message),t&&t({state:c});return}if(p&&p.status&&p.status!==200){c=-1,q.warn("Quark request failed:",{status:p.status,code:p.code,message:p.message}),t&&t({state:c});return}p&&p.data&&p.data.share&&(p.data.share.status==1?c=p.data.share.partial_violation?11:1:p.data.share.status==3?c=p.data.share.partial_violation?-1:1:p.data.share.status>1&&(c=-1)),t&&t({state:c})},error:function(){t&&t({state:0})}})}else n=-1;(!o.message||!o.message.includes("ok"))&&t&&t({state:n})},error:function(){t&&t({state:0})}})}},baidu2:{reg:/(?:https?:\/\/)?\b(e?yun|pan)\.baidu\.com\/(?:share|wap)\/init\?surl=([\w\-]{5,})(?!\.)/gi,replaceReg:/(?:https?:\/\/)?(?:e?yun|pan)\.baidu\.com\/(?:share|wap)\/init\?surl=([\w\-]{5,})(?!\.)/gi,prefix:"https://pan.baidu.com/share/init?surl=",checkFun:(e,t)=>{q.info("Baidu2 check id "+e);let s=e&&e.includes&&e.includes("http")?e:"https://pan.baidu.com/s/"+e;Me.ajax({type:"get",url:s,success:o=>{q.debug("Baidu2 check response",o);let n=1;!o||typeof o!="string"?n=0:o.includes("输入提取码")||o.includes("请输入提取码")?n=2:(o.includes("不存在")||o.includes("已失效"))&&(n=-1),t&&t({state:n})},error:function(){t&&t({state:0})}})}},aliyun2:{reg:/(?:https?:\/\/)?(?:(?:www\.)?aliyundrive\.com\/s|alywp\.net)\/([A-Za-z0-9]+)/gi,replaceReg:/(?:https?:\/\/)?(?:(?:www\.)?aliyundrive\.com\/s|alywp\.net)\/([A-Za-z0-9]+)/gi,prefix:"https://www.aliyundrive.com/s/",checkFun:(e,t)=>{q.info("Aliyun2 check id "+e),Me.ajax({type:"post",url:"https://api.aliyundrive.com/adrive/v3/share_link/get_share_by_anonymous",data:JSON.stringify({share_id:e}),headers:{"Content-Type":"application/json"},dataType:"json",success:s=>{q.debug("Aliyun2 check response",s);let o=1;!s||typeof s!="object"?o=0:s.code&&s.code.indexOf("ShareLink")>-1?o=-1:(s.code||s.file_count&&s.file_count==0)&&(o=0),t&&t({state:o})},error:function(){t&&t({state:0})}})}},ty189:{reg:/(?:https?:\/\/)?cloud\.189\.cn\/(?:t\/|web\/share\?code=)([\w\-]{8,})(?!\.)/gi,replaceReg:/(?:https?:\/\/)?cloud\.189\.cn\/(?:t\/|web\/share\?code=)([\w\-]{8,})(?!\.)/gi,prefix:"https://cloud.189.cn/t/",aTagRepalce:[/\/web\/share\?code=/,"/t/"],checkFun:(e,t)=>{q.info("Ty189 check id "+e),Me.ajax({type:"post",url:"https://api.cloud.189.cn/open/share/getShareInfoByCodeV2.action",headers:{"Content-Type":"application/x-www-form-urlencoded"},data:`shareCode=${encodeURIComponent(e)}`,success:s=>{q.debug("Ty189 check response",s);let o=1;s?s.includes("ShareInfoNotFound")||s.includes("ShareNotFound")||s.includes("FileNotFound")||s.includes("ShareExpiredError")||s.includes("ShareAuditNotPass")?o=-1:s.includes("needAccessCode")&&(o=2):o=0,t&&t({state:o})},error:()=>t&&t({state:0})})}},xunlei:{reg:/(?:https?:\/\/)?\bpan.xunlei\.com\/s\/([\w\-]{25,})(?!\.)/gi,replaceReg:/(?:https?:\/\/)?pan.xunlei\.com\/s\/([\w\-]{25,})(?!\.)/gi,prefix:"https://pan.xunlei.com/s/",checkFun:(e,t)=>{q.info("Xunlei check id "+e),Me.ajax({type:"post",data:JSON.stringify({client_id:"Xqp0kJBXWhwaTpB6",device_id:"925b7631473a13716b791d7f28289cad",action:"get:/drive/v1/share",meta:{package_name:"pan.xunlei.com",client_version:"1.45.0",captcha_sign:"1.fe2108ad808a74c9ac0243309242726c",timestamp:"1645241033384"}}),headers:{"Content-Type":"application/json"},url:"https://xluser-ssl.xunlei.com/v1/shield/captcha/init",success:s=>{q.debug("Xunlei token response",s);let n=JSON.parse(s).captcha_token;Me.ajax({type:"get",url:"https://api-pan.xunlei.com/drive/v1/share?share_id="+e.replace("https://pan.xunlei.com/s/",""),headers:{"x-captcha-token":n,"x-client-id":"Xqp0kJBXWhwaTpB6","x-device-id":"925b7631473a13716b791d7f28289cad"},success:r=>{q.debug("Xunlei detail response",r);let l=1;r?r.includes("NOT_FOUND")||r.includes("SENSITIVE_RESOURCE")||r.includes("EXPIRED")?l=-1:r.includes("PASS_CODE_EMPTY")&&(l=2):l=0,t&&t({state:l})},error:function(){t&&t({state:0})}})},error:function(){t&&t({state:0})}})}},nainiu:{reg:/(?:https?:\/\/)?(?:[\w\-]+\.)?\bcowtransfer\.com\/s\/([\w\-]{10,})(?!\.)/gi,replaceReg:/(?:https?:\/\/)?(?:[\w\-]+\.)?cowtransfer\.com\/s\/([\w\-]{10,})(?!\.)/gi,prefix:"https://cowtransfer.com/s/",checkFun:(e,t)=>{q.info("Nainiu check id "+e),Me.ajax({type:"get",url:"https://cowtransfer.com/core/api/transfer/share?uniqueUrl="+e,success:s=>{q.debug("Nainiu check response",s);let o=typeof s=="string"?JSON.parse(s):s,n=1;s?o.code!="0000"?n=-1:o.data.needPassword&&o.data.needPassword&&(n=2):n=0,t&&t({state:n})},error:function(){t&&t({state:0})}})}},wenshushu:{reg:/(?:https?:\/\/)?\bt.wss.ink\/f\/([\w\-]{8,})(?!\.)/gi,replaceReg:/(?:https?:\/\/)?wss1.cn\/f\/([\w\-]{8,})(?!\.)/gi,prefix:"https://t.wss.ink/f/",checkFun:(e,t)=>{q.info("Wenshushu check id "+e),Me.ajax({type:"post",url:"https://www.wenshushu.cn/ap/task/mgrtask",data:JSON.stringify({tid:e}),headers:{"Content-Type":"application/json","x-token":"wss:7pmakczzw6i"},dataType:"json",success:s=>{q.debug("Wenshushu check response",s);let o=1;s?s.code!=0&&(o=-1):o=0,t&&t({state:o})},error:function(){t&&t({state:0})}})}},pan115:{reg:/(?:h?ttps?:\/\/)?(?:www\.)?\b(?:115|anxia|115cdn)\.com\/s\/([\w\-]{8,})(?!\.)/gi,replaceReg:/(?:h?ttps?:\/\/)?(?:www\.)?(?:115|anxia|115cdn)\.com\/s\/([\w\-]{8,})(?!\.)/gi,prefix:"https://115cdn.com/s/",checkFun:(e,t)=>{q.info("Pan115 check id "+e),e=e.replace("https://115cdn.com/s/",""),Me.ajax({type:"get",url:"https://115cdn.com/webapi/share/snap?share_code="+e+"&receive_code=",success:s=>{q.debug("Pan115 check response",s);let o=typeof s=="string"?JSON.parse(s):s,n=0;s?o.state?n=1:o.error&&o.error.includes("访问码")?n=2:o.error&&(o.error.includes("不存在或已被删除")||o.error.includes("分享已取消"))&&(n=-1):n=0,t&&t({state:n})},error:function(){t&&t({state:0})}})}},bilibili:{reg:/(?:https?:\/\/)?(?:www\.)?bilibili\.com\/video\/(BV[\w\d]+|av\d+)/i,replaceReg:/(?:https?:\/\/)?(?:www\.)?bilibili\.com\/video\/(BV[\w\d]+|av\d+)/i,prefix:"https://www.bilibili.com/video/",checkFun:(e,t)=>{q.info("🔍 B站视频检测开始:",e);let s=e;e.includes("http")||(s=e.startsWith("BV")||e.startsWith("av")?`https://www.bilibili.com/video/${e}`:`https://www.bilibili.com/video/${e}`),q.info("📡 请求URL:",s),Me.ajax({type:"GET",url:s,headers:{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8","Accept-Language":"zh-CN,zh;q=0.9,en;q=0.8"},timeout:1e4,success:o=>{q.info("B站视频响应:",{videoId:e,responseLength:o?o.length:0,responseType:typeof o});let n=1;!o||typeof o!="string"?(n=0,q.warn("B站视频无响应或响应格式错误")):o.includes("视频不见了")||o.includes("视频内容已被UP主删除")||o.includes("视频无法观看")||o.includes("啥都木有")||o.includes("页面不存在")?(n=-1,q.warn("B站视频失效:",e)):(n=1,q.info("B站视频有效:",e));const r={state:n};q.info("B站视频检测结果:",r),t&&t(r)},error:function(o){q.error("💥 B站视频请求失败:",o),t&&t({state:0})}})}}};class sc{constructor(){this.checkCache=new Map,this.cacheTimeout=5*60*1e3}identifyLink(t){if(!t||typeof t!="string")return null;for(const[s,o]of Object.entries(qr)){o.reg.lastIndex=0;const n=o.reg.exec(t);if(n)return{type:s,shareId:n[2]||n[1],url:t}}return null}async checkLink(t,s){q.info("开始检测链接:",t);const o=this.identifyLink(t);if(!o){const l={state:0,message:"不支持的链接类型"};return q.warn("不支持的链接类型:",t),s&&s(l),l}q.info("识别链接信息:",o);const n=`${o.type}_${o.shareId}`,r=this.checkCache.get(n);return r&&Date.now()-r.timestamp{const i=qr[o.type];if(!i||!i.checkFun){const u={state:0,message:"检测功能未实现"};q.error("检测功能未实现:",o.type),s&&s(u),l(u);return}q.info("开始执行检测函数:",o.type,o.shareId);try{i.checkFun(o.shareId,u=>{q.info("检测函数回调:",{type:o.type,shareId:o.shareId,result:u}),this.checkCache.set(n,{result:u,timestamp:Date.now()}),q.info("结果已缓存:",n),s&&s(u),l(u)})}catch(u){q.error("检测函数执行异常:",u);const p={state:0,message:"检测异常: "+u.message};s&&s(p),l(p)}})}getStateInfo(t){return{1:{text:"有效",class:"success",color:"#52c41a"},2:{text:"有效",class:"warning",color:"#faad14"},0:{text:"检测中...",class:"loading",color:"#1890ff"},[-1]:{text:"失效",class:"error",color:"#ff4d4f"},11:{text:"部分违规",class:"partial",color:"#fa8c16"}}[t]||{text:"未知",class:"unknown",color:"#d9d9d9"}}clearCache(){this.checkCache.clear()}}const Yo=new sc,oc={class:"link-manager"},nc={key:0,class:"modal-overlay"},rc={class:"modal-content"},lc={class:"modal-body"},ic={class:"form-row"},ac={class:"form-group"},uc={class:"form-row"},cc={key:0,class:"form-group"},dc={key:1,class:"form-group"},fc={class:"input-wrapper"},pc={class:"form-group"},hc={class:"input-wrapper"},mc={class:"form-row"},gc={class:"form-group"},vc={class:"input-wrapper"},_c={class:"form-group"},yc={class:"input-wrapper"},wc={class:"form-row"},bc={class:"form-group"},kc={class:"input-wrapper"},xc={key:0,class:"form-group"},Cc={class:"checkbox-group"},Tc={class:"form-actions"},Sc=["disabled"],Ec={key:1,class:"modal-overlay"},Ac={class:"modal-content"},Vc={class:"modal-body"},Mc={class:"form-row"},Lc={class:"form-group"},$c={class:"form-row"},Uc={key:0,class:"form-group"},Pc={key:1,class:"form-group"},Dc={class:"input-wrapper"},Ic={class:"form-group"},Fc={class:"input-wrapper"},Oc={class:"form-row"},Rc={class:"form-group"},jc={class:"input-wrapper"},Bc={class:"form-group"},Nc={class:"input-wrapper"},zc={class:"form-row"},qc={class:"form-group"},Hc={class:"input-wrapper"},Gc={key:0,class:"form-group"},Kc={class:"checkbox-group"},Wc={class:"form-actions"},Jc=["disabled"],Qc={class:"links-section"},Zc={class:"filter-bar"},Yc={class:"filter-controls"},Xc=["disabled"],ed={key:0,class:"links-list"},td={key:1,class:"links-list"},sd={key:2,class:"links-list"},od=["onClick"],nd={class:"link-header"},rd={key:0,class:"platform-badge"},ld=["src","alt"],id={class:"link-meta"},ad={key:0,class:"language"},ud={key:1,class:"file-size"},cd={key:2,class:"feature-tags"},dd={key:0,class:"feature-tag feature-4k"},fd={key:1,class:"feature-tag feature-hdr"},pd={key:2,class:"feature-tag feature-dolby"},hd={key:3,class:"feature-tag feature-subtitle"},md={key:0,class:"feature-tag feature-flac"},gd={key:1,class:"feature-tag feature-wav"},vd={class:"link-content"},_d={class:"link-title-row"},yd={class:"link-details"},wd=["title","onContextmenu"],bd={class:"vote-section"},kd=["onClick","disabled"],xd={viewBox:"0 0 100 100",class:"vote-icon",xmlns:"http://www.w3.org/2000/svg"},Cd=["fill"],Td=["onClick","disabled"],Sd={viewBox:"0 0 100 100",class:"vote-icon down-icon",xmlns:"http://www.w3.org/2000/svg"},Ed=["fill"],Ad={class:"action-buttons"},Vd=["onClick"],Md=["onClick"],Ld=["onClick"],$d={class:"link-footer"},Ud={class:"footer-left"},Pd=["href"],Dd={class:"author"},Id={class:"footer-right"},Fd={class:"date"},Od={key:0,class:"report-count"},Rd={key:3,class:"login-prompt"},jd={key:4,class:"empty-state"},Bd={key:2,class:"pagination"},Nd=["disabled"],zd={class:"pagination-info"},qd=["disabled"],Hd={key:0,class:"modal-overlay"},Gd={class:"modal-content"},Kd={class:"modal-body"},Wd={class:"form-actions"},Jd=["disabled"],Qd={key:1,class:"modal-overlay"},Zd={class:"modal-content"},Yd={class:"modal-body"},Xd={class:"form-group"},ef={class:"form-group"},tf={class:"input-wrapper"},sf={class:"form-actions"},of=["disabled"],nf=800,Ms="doubanflix_link_draft",rf=Xe({__name:"LinkManager",props:{subjectId:{type:String,required:!0},subjectCategory:{type:String,required:!0,validator:e=>["movie","albums","books","games"].includes(e)},linkType:{type:String,default:"all"}},setup(e){const t=e,s=Ve(()=>t.linkType),o=Ve(()=>({movies:"movie",albums:"album",books:"book",games:"game"})[t.subjectCategory]||"movie"),n=I([]),r=I(!1),l=I(!1),i=I(""),u=I(""),p=I(!1),c=I(!1),v=I(null),x=I(!1),y=I(new Set),C=I(new Map),R=I(new Set),U=I({page:1,limit:5,total:0,pages:0}),w=It({linkType:"",platform:"",url:"",extractCode:"",title:"",size:"",original_url:"",has_4k:!1,has_hdr:!1,has_dolby_atmos:!1,has_subtitles:!1,is_flac:!1,is_wav:!1}),b=It({id:"",linkType:"",platform:"",url:"",extractCode:"",title:"",size:"",original_url:"",has_4k:!1,has_hdr:!1,has_dolby_atmos:!1,has_subtitles:!1,is_flac:!1,is_wav:!1}),Q=I(!1),F=It({platform:"",sortBy:"created_at"}),ae=[{value:"",label:"请选择类型"},{value:"netdisk",label:"网盘"},{value:"bt",label:"BT"},{value:"online",label:"在线"}],ze=[{value:"",label:"请选择平台"},{value:"quark",label:"夸克网盘"},{value:"ali",label:"阿里云盘"},{value:"baidu",label:"百度网盘"},{value:"tianyi",label:"天翼云盘"},{value:"mobile",label:"移动云盘"},{value:"115",label:"115网盘"},{value:"xunlei",label:"迅雷网盘"},{value:"uc",label:"UC网盘"},{value:"123",label:"123网盘"},{value:"lanzou",label:"蓝奏网盘"}];Ye(()=>w.url,(g,d)=>{if(g&&g.trim()){const h=zr(g.trim());h.isValid&&(w.url=h.cleanedUrl,w.linkType=h.linkType,w.platform=h.platform,w.extractCode=h.extractCode)}else(!g||g.trim()==="")&&(w.linkType="",w.platform="",w.extractCode="")}),Ye(()=>b.url,(g,d)=>{if(!Q.value)if(g&&g.trim()){const h=zr(g.trim());h.isValid&&(b.url=h.cleanedUrl,b.linkType=h.linkType,b.platform=h.platform,b.extractCode=h.extractCode)}else(!g||g.trim()==="")&&(b.linkType="",b.platform="",b.extractCode="")}),Ye(()=>w.title,g=>{if(g&&g.trim()){const d=Nr(g.trim());t.subjectCategory==="movies"?(w.has_4k=d.has_4k,w.has_hdr=d.has_hdr,w.has_dolby_atmos=d.has_dolby_atmos):t.subjectCategory==="albums"&&(w.is_flac=d.is_flac,w.is_wav=d.is_wav),d.file_size&&!w.size&&(w.size=d.file_size)}}),Ye(()=>b.title,g=>{if(!Q.value&&g&&g.trim()){const d=Nr(g.trim());t.subjectCategory==="movies"?(b.has_4k=d.has_4k,b.has_hdr=d.has_hdr,b.has_dolby_atmos=d.has_dolby_atmos):t.subjectCategory==="albums"&&(b.is_flac=d.is_flac,b.is_wav=d.is_wav),d.file_size&&!b.size&&(b.size=d.file_size)}});const Le=[{value:"created_at",label:"按时间"},{value:"likes_count",label:"按点赞数"},{value:"like_rate",label:"按点赞率"}],$e=Ve(()=>{switch(c.value?b.linkType:w.linkType){case"netdisk":return ze;default:return[{value:"",label:"请选择平台"}]}}),We=Ve(()=>{const g=[{value:"",label:"所有平台"}];switch(t.linkType){case"netdisk":return g.concat([{value:"quark",label:"夸克"},{value:"ali",label:"阿里"},{value:"baidu",label:"百度"},{value:"tianyi",label:"天翼"},{value:"mobile",label:"移动"},{value:"115",label:"115"},{value:"xunlei",label:"迅雷"},{value:"uc",label:"UC"},{value:"123",label:"123"},{value:"lanzou",label:"蓝奏"}]);default:return g}}),me=Ve(()=>X.isAuthenticated.value),Ce=async(g=1)=>{if(t.subjectId){if(X.initialized.value||(l.value=!0,await X.initAuth(),l.value=!1),!me.value){n.value=[],U.value={page:1,limit:5,total:0,pages:0},r.value=!1,i.value="";return}r.value=!0,i.value="";try{const d=t.linkType==="all"?void 0:t.linkType,h=await Bt.getLinks(t.subjectId,{linkType:d,platform:F.platform||void 0,sortBy:F.sortBy,sortOrder:"desc",page:g,limit:U.value.limit,category:t.subjectCategory});h.success?(n.value=h.data.links||h.data,h.pagination?U.value={page:h.pagination.current_page||h.pagination.page||1,limit:h.pagination.per_page||h.pagination.limit||5,total:h.pagination.total_items||h.pagination.total||0,pages:h.pagination.total_pages||h.pagination.pages||0}:h.data&&h.data.pagination&&(U.value={page:h.data.pagination.current_page||h.data.pagination.page||1,limit:h.data.pagination.per_page||h.data.pagination.limit||5,total:h.data.pagination.total_items||h.data.pagination.total||0,pages:h.data.pagination.total_pages||h.data.pagination.pages||0})):h.error&&(h.error.includes("电影不存在")||h.error.includes("主题不存在"))?(console.log("主题不存在,静默处理"),n.value=[],U.value={page:1,limit:5,total:0,pages:0}):h.error&&(h.error.includes("请先登录")||h.error.includes("登录已过期"))?console.log("认证错误,静默处理:",h.error):i.value=h.error}catch(d){d.message&&(d.message.includes("电影不存在")||d.message.includes("主题不存在"))?(console.log("主题不存在,静默处理"),n.value=[],U.value={page:1,limit:5,total:0,pages:0}):d.message&&(d.message.includes("请先登录")||d.message.includes("登录已过期"))?console.log("认证错误,静默处理:",d.message):(i.value="加载链接失败",console.error("加载链接错误:",d))}finally{r.value=!1}}},$t=async()=>{if(me.value){x.value=!0,i.value="";try{const g=await Bt.addLink({subjectId:t.subjectId,category:t.subjectCategory,linkType:w.linkType,platform:w.platform,url:w.url,extractCode:w.extractCode,title:w.title,size:w.size,original_url:w.original_url,has_4k:w.has_4k,has_hdr:w.has_hdr,has_dolby_atmos:w.has_dolby_atmos,has_subtitles:w.has_subtitles,is_flac:w.is_flac,is_wav:w.is_wav});g.success?(u.value=g.message,Je(),T(),p.value=!1,await Ce(),setTimeout(()=>{u.value=""},3e3)):g.error&&(g.error.includes("请先登录")||g.error.includes("登录已过期"))?console.log("认证错误,静默处理:",g.error):i.value=g.error}catch(g){g.message&&(g.message.includes("请先登录")||g.message.includes("登录已过期"))?console.log("认证错误,静默处理:",g.message):(i.value="添加链接失败",console.error("添加链接错误:",g))}finally{x.value=!1}}},ot=I(new Map),N=I(new Map),k=I(new Map),O=async(g,d)=>{if(!me.value)return;const h=n.value.find(rt=>rt.id===g);if(!h)return;if(ot.value.has(g)&&clearTimeout(ot.value.get(g)),k.value.has(g)){const rt=k.value.get(g);rt.cancelled=!0,console.log("取消上一次正在执行的投票操作:",g)}N.value.has(g)||N.value.set(g,{originalUserVote:h.user_vote_type,originalUpVotes:h.up_votes||0,originalDownVotes:h.down_votes||0,clickSequence:[],link:h});const W=N.value.get(g);W.clickSequence.push({voteType:d,timestamp:Date.now()});const ke=te(W.originalUserVote,W.clickSequence);let xt=W.originalUpVotes,Te=W.originalDownVotes;W.originalUserVote==="up"?ke===null?xt=Math.max(0,W.originalUpVotes-1):ke==="down"?(xt=Math.max(0,W.originalUpVotes-1),Te=W.originalDownVotes+1):xt=W.originalUpVotes:W.originalUserVote==="down"?ke===null?Te=Math.max(0,W.originalDownVotes-1):ke==="up"?(Te=Math.max(0,W.originalDownVotes-1),xt=W.originalUpVotes+1):Te=W.originalDownVotes:ke==="up"?xt=W.originalUpVotes+1:ke==="down"&&(Te=W.originalDownVotes+1),h.user_vote_type=ke,h.up_votes=xt,h.down_votes=Te;const Ct=setTimeout(async()=>{const rt=N.value.get(g);if(!rt)return;const he={cancelled:!1,linkId:g,timestamp:Date.now()};k.value.set(g,he),ot.value.delete(g),N.value.delete(g),await le(rt,he),k.value.get(g)===he&&k.value.delete(g)},nf);ot.value.set(g,Ct)},le=async(g,d)=>{const{originalUserVote:h,originalUpVotes:W,originalDownVotes:ke,clickSequence:xt,link:Te}=g,Ct=Te.id;if(d&&d.cancelled){console.log("投票操作已被取消,跳过API请求:",Ct);return}const rt=te(h,xt);if(console.log("分析用户投票意图:",{linkId:Ct,originalUserVote:h,clickSequence:xt.map(he=>he.voteType),finalIntention:rt,currentUIState:Te.user_vote_type,executionId:d==null?void 0:d.timestamp}),rt===h){console.log("用户最终意图与原始状态相同,跳过API请求");return}try{if(d&&d.cancelled){console.log("API请求前检查:投票操作已被取消:",Ct);return}let he;if(rt===null?he=await Bt.removeVote(Ct,W,ke,h,o.value):he=await Bt.voteLink(Ct,rt,o.value),d&&d.cancelled){console.log("API请求完成后检查:投票操作已被取消,忽略结果:",Ct);return}he.success?he.data&&(Te.user_vote_type=he.data.user_vote_type,Te.up_votes=he.data.up_votes||0,Te.down_votes=he.data.down_votes||0):(Te.user_vote_type=h,Te.up_votes=W,Te.down_votes=ke,he.error&&(he.error.includes("请先登录")||he.error.includes("登录已过期"))?console.log("认证错误,静默处理:",he.error):i.value=he.error)}catch(he){if(d&&d.cancelled){console.log("异常处理中检查:投票操作已被取消,忽略错误:",Ct);return}Te.user_vote_type=h,Te.up_votes=W,Te.down_votes=ke,he.message&&(he.message.includes("请先登录")||he.message.includes("登录已过期"))?console.log("认证错误,静默处理:",he.message):(i.value="投票操作失败",console.error("投票请求错误:",he))}},te=(g,d)=>{if(d.length===0)return g;let h=g;for(const W of d){const{voteType:ke}=W;h===ke?h=null:h=ke}return h},wt=async g=>{is.value=g.id,as.value=g.subject_id||g.movie_id,ls.value=!0},Ut=()=>{ls.value=!1,is.value="",as.value="",nt.value=!1},bt=async()=>{if(!(!is.value||!as.value))try{nt.value=!0;const g=await Bt.deleteLink(as.value,is.value,t.subjectCategory);g.success?(u.value=g.message,Ut(),await Ce(),setTimeout(()=>{u.value=""},3e3)):g.error&&(g.error.includes("请先登录")||g.error.includes("登录已过期"))?console.log("认证错误,静默处理:",g.error):i.value=g.error}catch(g){g.message&&(g.message.includes("请先登录")||g.message.includes("登录已过期"))?console.log("认证错误,静默处理:",g.message):(i.value="删除链接失败",console.error("删除链接错误:",g))}finally{nt.value=!1}},Je=()=>{Object.assign(w,{linkType:"",platform:"",url:"",extractCode:"",title:"",size:"",original_url:"",has_4k:!1,has_hdr:!1,has_dolby_atmos:!1,has_subtitles:!1,is_flac:!1,is_wav:!1})},ls=I(!1),is=I(""),as=I(""),nt=I(!1),kt=I(!1),be=It({linkId:"",type:"",reason:""}),qt=I(!1),Ht=[{value:"invalid_link",label:"无效链接"},{value:"copyright_issue",label:"版权问题"},{value:"malicious_link",label:"恶意链接"},{value:"spam",label:"垃圾信息"},{value:"fake_content",label:"虚假内容"},{value:"other",label:"其他"}],Yr=g=>{me.value&&(be.linkId=g,be.type="invalid_link",be.reason="",kt.value=!0)},f=async()=>{if(!be.type){me.value&&(i.value="请选择反馈类型");return}qt.value=!0,i.value="";try{const g=await Bt.reportLink(be.linkId,be.type,be.reason,o.value);g.success?(u.value=g.message,kt.value=!1,await Ce(),setTimeout(()=>{u.value=""},3e3)):g.error&&(g.error.includes("请先登录")||g.error.includes("登录已过期"))?console.log("认证错误,静默处理:",g.error):i.value=g.error}catch(g){g.message&&(g.message.includes("请先登录")||g.message.includes("登录已过期"))?console.log("认证错误,静默处理:",g.message):(i.value="反馈提交失败",console.error("反馈错误:",g))}finally{qt.value=!1}},m=()=>{kt.value=!1,be.linkId="",be.reason="",be.description=""},_=()=>{const g={linkType:w.linkType,platform:w.platform,url:w.url,extractCode:w.extractCode,title:w.title,language:w.language,has_4k:w.has_4k,has_hdr:w.has_hdr,has_dolby_atmos:w.has_dolby_atmos,has_subtitles:w.has_subtitles,timestamp:Date.now()};Object.values(g).some(h=>h&&h!==""&&typeof h!="number")&&localStorage.setItem(Ms,JSON.stringify(g))},E=()=>{try{const g=localStorage.getItem(Ms);if(g){const d=JSON.parse(g);if(Date.now()-d.timestamp>24*60*60*1e3)localStorage.removeItem(Ms);else return Object.assign(w,{linkType:d.linkType||"",platform:d.platform||"",url:d.url||"",extractCode:d.extractCode||"",title:d.title||"",language:d.language||"",has_4k:d.has_4k||!1,has_hdr:d.has_hdr||!1,has_dolby_atmos:d.has_dolby_atmos||!1,has_subtitles:d.has_subtitles||!1}),!0}}catch(g){console.error("恢复草稿失败:",g),localStorage.removeItem(Ms)}return!1},T=()=>{localStorage.removeItem(Ms)},S=()=>{p.value=!0,E()&&console.log("已恢复草稿内容")},P=()=>{_(),p.value=!1,Je()},$=()=>{c.value=!1,v.value=null,A()},L=g=>{v.value=g,Q.value=!0,b.id=g.id,b.linkType=g.type,b.platform=g.platform||"",b.url=g.url,b.extractCode=g.password||"",b.title=g.title||"",b.size=g.size||"",b.original_url=g.original_url||"",b.has_4k=g.has_4k||!1,b.has_hdr=g.has_hdr||!1,b.has_dolby_atmos=g.has_dolby_atmos||!1,b.has_subtitles=g.has_subtitles||!1,b.is_flac=g.is_flac||!1,b.is_wav=g.is_wav||!1,c.value=!0,$n(()=>{Q.value=!1})},A=()=>{b.id="",b.linkType="",b.platform="",b.url="",b.extractCode="",b.title="",b.size="",b.original_url="",b.has_4k=!1,b.has_hdr=!1,b.has_dolby_atmos=!1,b.has_subtitles=!1,b.is_flac=!1,b.is_wav=!1},z=async()=>{if(!x.value)try{x.value=!0,i.value="";const g=await Bt.updateLink(b.id,b,t.subjectId,t.subjectCategory);g.success?(u.value=g.message,$(),await Ce(U.value.page),setTimeout(()=>{u.value=""},3e3)):g.error&&(g.error.includes("请先登录")||g.error.includes("登录已过期"))?console.log("认证错误,静默处理:",g.error):i.value=g.error}catch(g){console.error("修改链接失败:",g),g.message&&(g.message.includes("请先登录")||g.message.includes("登录已过期"))?console.log("认证错误,静默处理:",g.message):i.value=g.message||"修改链接失败"}finally{x.value=!1}},D=g=>g.hasOwnProperty("is_owner")?me.value&&g.is_owner:me.value&&X.userId.value===g.user_id,B=g=>({quark:"夸克",ali:"阿里",baidu:"百度",tianyi:"天翼",mobile:"移动",115:"115",xunlei:"迅雷",uc:"UC",123:"123",lanzou:"蓝奏",bilibili:"B站",iqiyi:"爱奇艺",youku:"优酷",tencent:"腾讯",bt:"磁力"})[g]||g,K=g=>{const d={quark:"data:image/svg+xml;base64,"+btoa(''),ali:"data:image/svg+xml;base64,"+btoa(''),baidu:"data:image/svg+xml;base64,"+btoa(''),tianyi:"data:image/svg+xml;base64,"+btoa(''),mobile:"data:image/svg+xml;base64,"+btoa(''),115:"data:image/svg+xml;base64,"+btoa(''),xunlei:"data:image/svg+xml;base64,"+btoa(''),uc:"data:image/svg+xml;base64,"+btoa(''),123:"data:image/svg+xml;base64,"+btoa(''),lanzou:"data:image/svg+xml;base64,"+btoa('')};return d[g]||d.quark},Y=g=>{const d=new Date(g);return d.toLocaleDateString("zh-CN")+" "+d.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"})},ie=g=>{u.value="已复制到剪贴板",setTimeout(()=>{u.value=""},2e3)},se=async(g,d)=>{try{if(window.open(g,"_blank"),d)try{await navigator.clipboard.writeText(d),u.value=`链接已打开,提取码 "${d}" 已复制到剪贴板`}catch{const W=document.createElement("textarea");W.value=d,W.style.position="fixed",W.style.left="-999999px",W.style.top="-999999px",document.body.appendChild(W),W.focus(),W.select();try{document.execCommand("copy"),u.value=`链接已打开,提取码 "${d}" 已复制到剪贴板`}catch{u.value=`链接已打开,提取码: ${d} (请手动复制)`}finally{document.body.removeChild(W)}}else u.value="链接已打开";setTimeout(()=>{u.value=""},3e3)}catch(h){console.error("操作失败:",h),i.value="操作失败"}},Ue=(g,d)=>{g.preventDefault(),se(d.url,d.password)},Pe=g=>{y.value.has(g)?y.value.delete(g):(y.value.add(g),Gt(g))},De=g=>y.value.has(g),Ie=()=>{y.value.clear(),C.value.clear(),R.value.clear()},Gt=async g=>{const d=n.value.find(W=>W.id===g);if(!(!d||!d.url||R.value.has(g)||C.value.has(g)||!Yo.identifyLink(d.url))){R.value.add(g),C.value.set(g,{state:0,message:"检测中..."});try{const W=await Yo.checkLink(d.url),ke=Yo.getStateInfo(W.state);C.value.set(g,{state:W.state,message:ke.text,class:ke.class,color:ke.color})}catch(W){console.error("链接检测失败:",W),C.value.set(g,{state:0,message:"检测失败",class:"error",color:"#ff4d4f"})}finally{R.value.delete(g)}}},$s=g=>C.value.get(g)||null,Be=g=>{const d=$s(g);return d?{1:"one-pan-tip-success",2:"one-pan-tip-success",0:"",[-1]:"one-pan-tip-error",11:"one-pan-tip-partial"}[d.state]||"one-pan-tip-other":""},tt=g=>{const d=$s(g);return d&&d.message||""};Ye(()=>t.subjectId,async g=>{g&&(Ie(),X.initialized.value||(l.value=!0,await X.initAuth(),l.value=!1),Ce())},{immediate:!0}),Ye(()=>t.linkType,async()=>{Ie(),F.platform="",U.value.page=1,t.subjectId&&(X.initialized.value||(l.value=!0,await X.initAuth(),l.value=!1),Ce())});const Us=g=>{g>=1&&g<=U.value.pages&&(Ie(),Ce(g))},ho=()=>{U.value.page>1&&Us(U.value.page-1)},s1=()=>{U.value.page{const g=document.querySelector(".auth-container")||document.querySelector(".auth-component")||document.querySelector("[data-auth-component]")||document.querySelector("#user-section");if(g)g.scrollIntoView({behavior:"smooth",block:"start"});else{const d=document.querySelector('.nav-btn[data-tab="user"]')||document.querySelector('button[data-tab="user"]')||Array.from(document.querySelectorAll(".nav-btn")).find(h=>h.textContent.includes("👤")||h.textContent.includes("用户"));if(d)d.click();else{const h=new CustomEvent("switchToUserTab",{bubbles:!0,detail:{tab:"user"}});document.dispatchEvent(h)}}};return ts(async()=>{X.initialized.value||(l.value=!0,await X.initAuth(),l.value=!1),t.subjectId&&Ce()}),(g,d)=>(V(),M(ve,null,[a("div",oc,[c.value?(V(),M("div",nc,[a("div",rc,[a("div",{class:"modal-header"},[d[40]||(d[40]=a("h4",null,"修改链接",-1)),a("button",{class:"close-btn",onClick:$},d[39]||(d[39]=[a("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor"},[a("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"})],-1)]))]),a("div",lc,[a("form",{onSubmit:Ge(z,["prevent"])},[a("div",ic,[a("div",ac,[d[41]||(d[41]=a("label",null,"链接类型 *",-1)),Z(Nt,{modelValue:b.linkType,"onUpdate:modelValue":d[0]||(d[0]=h=>b.linkType=h),options:ae,placeholder:"请选择类型",onChange:d[1]||(d[1]=h=>b.platform="")},null,8,["modelValue"])])]),a("div",uc,[b.linkType==="netdisk"?(V(),M("div",cc,[d[42]||(d[42]=a("label",null,"平台",-1)),Z(Nt,{modelValue:b.platform,"onUpdate:modelValue":d[2]||(d[2]=h=>b.platform=h),options:$e.value,placeholder:"请选择平台"},null,8,["modelValue","options"])])):j("",!0),b.linkType==="netdisk"?(V(),M("div",dc,[d[43]||(d[43]=a("label",null,"提取码",-1)),a("div",fc,[ne(a("input",{type:"text","onUpdate:modelValue":d[3]||(d[3]=h=>b.extractCode=h),placeholder:"如有提取码请填写",maxlength:"10"},null,512),[[pe,b.extractCode]])])])):j("",!0)]),a("div",pc,[d[44]||(d[44]=a("label",null,"链接地址 *",-1)),a("div",hc,[ne(a("input",{type:"url","onUpdate:modelValue":d[4]||(d[4]=h=>b.url=h),placeholder:"(会自动识别链接类型)请输入完整的链接地址",required:""},null,512),[[pe,b.url]])])]),a("div",mc,[a("div",gc,[d[45]||(d[45]=a("label",null,"标题描述 *",-1)),a("div",vc,[ne(a("input",{type:"text","onUpdate:modelValue":d[5]||(d[5]=h=>b.title=h),placeholder:"简短描述这个链接"},null,512),[[pe,b.title]])])])]),a("div",_c,[d[46]||(d[46]=a("label",null,"原文链接",-1)),a("div",yc,[ne(a("input",{type:"url","onUpdate:modelValue":d[6]||(d[6]=h=>b.original_url=h),placeholder:"原文链接地址(可选)"},null,512),[[pe,b.original_url]])])]),a("div",wc,[a("div",bc,[d[47]||(d[47]=a("label",null,"文件大小",-1)),a("div",kc,[ne(a("input",{type:"text","onUpdate:modelValue":d[7]||(d[7]=h=>b.size=h),placeholder:"如: 2.5G 或 1024M",pattern:"^\\d+(\\.\\d+)?[GMgm]$",title:"请输入数字+G或M,如: 2.5G 或 1024M"},null,512),[[pe,b.size]])])])]),t.subjectCategory==="movies"||t.subjectCategory==="albums"?(V(),M("div",xc,[d[48]||(d[48]=a("label",null,"特性标签",-1)),a("div",Cc,[t.subjectCategory==="movies"?(V(),M(ve,{key:0},[Z(et,{modelValue:b.has_4k,"onUpdate:modelValue":d[8]||(d[8]=h=>b.has_4k=h),label:"4K画质",color:"green"},null,8,["modelValue"]),Z(et,{modelValue:b.has_hdr,"onUpdate:modelValue":d[9]||(d[9]=h=>b.has_hdr=h),label:"HDR",color:"green"},null,8,["modelValue"]),Z(et,{modelValue:b.has_dolby_atmos,"onUpdate:modelValue":d[10]||(d[10]=h=>b.has_dolby_atmos=h),label:"杜比全景声",color:"green"},null,8,["modelValue"]),Z(et,{modelValue:b.has_subtitles,"onUpdate:modelValue":d[11]||(d[11]=h=>b.has_subtitles=h),label:"外挂字幕",color:"green"},null,8,["modelValue"])],64)):t.subjectCategory==="albums"?(V(),M(ve,{key:1},[Z(et,{modelValue:b.is_flac,"onUpdate:modelValue":d[12]||(d[12]=h=>b.is_flac=h),label:"FLAC无损",color:"green"},null,8,["modelValue"]),Z(et,{modelValue:b.is_wav,"onUpdate:modelValue":d[13]||(d[13]=h=>b.is_wav=h),label:"WAV无损",color:"green"},null,8,["modelValue"])],64)):j("",!0)])])):j("",!0),a("div",Tc,[a("button",{type:"submit",disabled:x.value},G(x.value?"修改中...":"保存修改"),9,Sc),a("button",{type:"button",onClick:$},"取消")])],32)])])])):j("",!0),p.value?(V(),M("div",Ec,[a("div",Ac,[a("div",{class:"modal-header"},[d[50]||(d[50]=a("h4",null,"添加新链接",-1)),a("button",{class:"close-btn",onClick:P},d[49]||(d[49]=[a("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor"},[a("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"})],-1)]))]),a("div",Vc,[a("form",{onSubmit:Ge($t,["prevent"])},[a("div",Mc,[a("div",Lc,[d[51]||(d[51]=a("label",null,"链接类型 *",-1)),Z(Nt,{modelValue:w.linkType,"onUpdate:modelValue":d[14]||(d[14]=h=>w.linkType=h),options:ae,placeholder:"请选择类型",onChange:d[15]||(d[15]=h=>w.platform="")},null,8,["modelValue"])])]),a("div",$c,[w.linkType==="netdisk"?(V(),M("div",Uc,[d[52]||(d[52]=a("label",null,"平台",-1)),Z(Nt,{modelValue:w.platform,"onUpdate:modelValue":d[16]||(d[16]=h=>w.platform=h),options:$e.value,placeholder:"请选择平台"},null,8,["modelValue","options"])])):j("",!0),w.linkType==="netdisk"?(V(),M("div",Pc,[d[53]||(d[53]=a("label",null,"提取码",-1)),a("div",Dc,[ne(a("input",{type:"text","onUpdate:modelValue":d[17]||(d[17]=h=>w.extractCode=h),placeholder:"如有提取码请填写",maxlength:"10"},null,512),[[pe,w.extractCode]])])])):j("",!0)]),a("div",Ic,[d[54]||(d[54]=a("label",null,"链接地址 *",-1)),a("div",Fc,[ne(a("input",{type:"url","onUpdate:modelValue":d[18]||(d[18]=h=>w.url=h),placeholder:"(会自动识别链接类型)请输入完整的链接地址",required:""},null,512),[[pe,w.url]])])]),a("div",Oc,[a("div",Rc,[d[55]||(d[55]=a("label",null,"标题描述",-1)),a("div",jc,[ne(a("input",{type:"text","onUpdate:modelValue":d[19]||(d[19]=h=>w.title=h),placeholder:"简短描述这个链接"},null,512),[[pe,w.title]])])])]),a("div",Bc,[d[56]||(d[56]=a("label",null,"原文链接",-1)),a("div",Nc,[ne(a("input",{type:"url","onUpdate:modelValue":d[20]||(d[20]=h=>w.original_url=h),placeholder:"原文链接地址(可选)"},null,512),[[pe,w.original_url]])])]),a("div",zc,[a("div",qc,[d[57]||(d[57]=a("label",null,"文件大小",-1)),a("div",Hc,[ne(a("input",{type:"text","onUpdate:modelValue":d[21]||(d[21]=h=>w.size=h),placeholder:"如: 2.5G 或 1024M",pattern:"^\\d+(\\.\\d+)?[GMgm]$",title:"请输入数字+G或M,如: 2.5G 或 1024M"},null,512),[[pe,w.size]])])])]),t.subjectCategory==="movies"||t.subjectCategory==="albums"?(V(),M("div",Gc,[d[58]||(d[58]=a("label",null,"特性标签",-1)),a("div",Kc,[t.subjectCategory==="movies"?(V(),M(ve,{key:0},[Z(et,{modelValue:w.has_4k,"onUpdate:modelValue":d[22]||(d[22]=h=>w.has_4k=h),label:"4K画质",color:"green"},null,8,["modelValue"]),Z(et,{modelValue:w.has_hdr,"onUpdate:modelValue":d[23]||(d[23]=h=>w.has_hdr=h),label:"HDR",color:"green"},null,8,["modelValue"]),Z(et,{modelValue:w.has_dolby_atmos,"onUpdate:modelValue":d[24]||(d[24]=h=>w.has_dolby_atmos=h),label:"杜比全景声",color:"green"},null,8,["modelValue"]),Z(et,{modelValue:w.has_subtitles,"onUpdate:modelValue":d[25]||(d[25]=h=>w.has_subtitles=h),label:"外挂字幕",color:"green"},null,8,["modelValue"])],64)):t.subjectCategory==="albums"?(V(),M(ve,{key:1},[Z(et,{modelValue:w.is_flac,"onUpdate:modelValue":d[26]||(d[26]=h=>w.is_flac=h),label:"FLAC无损",color:"green"},null,8,["modelValue"]),Z(et,{modelValue:w.is_wav,"onUpdate:modelValue":d[27]||(d[27]=h=>w.is_wav=h),label:"WAV无损",color:"green"},null,8,["modelValue"])],64)):j("",!0)])])):j("",!0),a("div",Wc,[a("button",{type:"submit",disabled:x.value},G(x.value?"添加中...":"添加链接"),9,Jc),a("button",{type:"button",onClick:P},"取消")])],32)])])])):j("",!0),a("div",Qc,[a("div",Zc,[a("div",Yc,[s.value==="netdisk"?(V(),Ts(Nt,{key:0,modelValue:F.platform,"onUpdate:modelValue":d[28]||(d[28]=h=>F.platform=h),options:We.value,placeholder:"所有平台",onChange:d[29]||(d[29]=()=>{Ie(),Ce()})},null,8,["modelValue","options"])):j("",!0),Z(Nt,{modelValue:F.sortBy,"onUpdate:modelValue":d[30]||(d[30]=h=>F.sortBy=h),options:Le,placeholder:"按时间",onChange:d[31]||(d[31]=()=>{Ie(),Ce()})},null,8,["modelValue"])]),a("button",{class:"add-link-btn-compact",onClick:S,disabled:!me.value,title:"添加链接"},d[59]||(d[59]=[a("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"currentColor"},[a("path",{d:"M8 1a.5.5 0 0 1 .5.5v6h6a.5.5 0 0 1 0 1h-6v6a.5.5 0 0 1-1 0v-6h-6a.5.5 0 0 1 0-1h6v-6A.5.5 0 0 1 8 1z"})],-1)]),8,Xc)]),l.value?(V(),M("div",ed,[(V(),M(ve,null,Ys(5,h=>Z(Rr,{key:"auth-skeleton-"+h})),64))])):r.value?(V(),M("div",td,[(V(),M(ve,null,Ys(5,h=>Z(Rr,{key:"skeleton-"+h})),64))])):n.value.length>0?(V(),M("div",sd,[(V(!0),M(ve,null,Ys(n.value,h=>(V(),M("div",{class:"link-item",key:h.id,onClick:W=>Pe(h.id)},[a("div",nd,[h.platform&&t.linkType!=="bt"&&t.linkType!=="online"?(V(),M("div",rd,[a("img",{src:K(h.platform),alt:B(h.platform),class:"platform-icon"},null,8,ld)])):j("",!0),a("div",id,[h.language?(V(),M("span",ad,G(h.language),1)):j("",!0),h.size?(V(),M("span",ud,G(h.size),1)):j("",!0),t.subjectCategory==="movies"&&(h.has_4k||h.has_hdr||h.has_dolby_atmos||h.has_subtitles)||t.subjectCategory==="albums"&&(h.is_flac||h.is_wav)?(V(),M("div",cd,[t.subjectCategory==="movies"?(V(),M(ve,{key:0},[h.has_4k?(V(),M("span",dd,"4K")):j("",!0),h.has_hdr?(V(),M("span",fd,"HDR")):j("",!0),h.has_dolby_atmos?(V(),M("span",pd,"杜比")):j("",!0),h.has_subtitles?(V(),M("span",hd,"外挂字幕")):j("",!0)],64)):t.subjectCategory==="albums"?(V(),M(ve,{key:1},[h.is_flac?(V(),M("span",md,"FLAC")):j("",!0),h.is_wav?(V(),M("span",gd,"WAV")):j("",!0)],64)):j("",!0)])):j("",!0)])]),a("div",vd,[a("div",_d,[h.title?(V(),M("div",{key:0,class:_e(["link-title",{expanded:De(h.id)}])},G(h.title),3)):j("",!0),a("div",{class:_e(["expand-arrow",{expanded:De(h.id)}])},d[60]||(d[60]=[a("svg",{viewBox:"0 0 1024 1024",width:"16",height:"16"},[a("path",{d:"M512 330.666667c14.933333 0 29.866667 4.266667 40.533333 14.933333l277.33333399 234.666667c27.733333 23.466667 29.866667 64 8.53333301 89.6-23.466667 27.733333-64 29.866667-89.6 8.53333299L512 477.866667l-236.8 200.53333299c-27.733333 23.466667-68.266667 19.19999999-89.6-8.53333299-23.466667-27.733333-19.19999999-68.266667 8.53333301-89.6l277.33333399-234.666667c10.666667-10.666667 25.6-14.933333 40.533333-14.933333z",fill:"currentColor"})],-1)]),2)]),ne(a("div",yd,[a("div",{class:_e(["link-url",Be(h.id)]),title:tt(h.id),onClick:d[32]||(d[32]=Ge(()=>{},["stop"])),onContextmenu:W=>Ue(W,h)},[Z(jr,{text:h.url,type:"url",onCopySuccess:ie},null,8,["text"])],42,wd),h.password?(V(),M("div",{key:0,class:"extract-code-container",onClick:d[33]||(d[33]=Ge(()=>{},["stop"]))},[d[61]||(d[61]=a("span",null,"提取码: ",-1)),Z(jr,{text:h.password,type:"code",onCopySuccess:ie},null,8,["text"])])):j("",!0)],512),[[ao,De(h.id)]])]),ne(a("div",{class:"link-actions",onClick:d[34]||(d[34]=Ge(()=>{},["stop"]))},[a("div",bd,[a("button",{class:_e(["vote-btn up",{active:h.user_vote_type==="up",pending:N.value.has(h.id)}]),onClick:W=>O(h.id,"up"),disabled:!me.value},[(V(),M("svg",xd,[a("path",{d:"M15 75 Q15 80 20 80 L80 80 Q85 80 85 75 Q85 70 80 65 L55 25 Q52 20 50 20 Q48 20 45 25 L20 65 Q15 70 15 75 Z",fill:h.user_vote_type==="up"?"currentColor":"none",stroke:"currentColor","stroke-width":"6","stroke-linejoin":"round"},null,8,Cd)])),ns(" "+G(h.up_votes||0),1)],10,kd),a("button",{class:_e(["vote-btn down",{active:h.user_vote_type==="down",pending:N.value.has(h.id)}]),onClick:W=>O(h.id,"down"),disabled:!me.value},[(V(),M("svg",Sd,[a("path",{d:"M15 75 Q15 80 20 80 L80 80 Q85 80 85 75 Q85 70 80 65 L55 25 Q52 20 50 20 Q48 20 45 25 L20 65 Q15 70 15 75 Z",fill:h.user_vote_type==="down"?"currentColor":"none",stroke:"currentColor","stroke-width":"6","stroke-linejoin":"round"},null,8,Ed)])),ns(" "+G(h.down_votes||0),1)],10,Td)]),a("div",Ad,[D(h)?(V(),M("button",{key:0,class:"modify-btn",onClick:W=>L(h)}," 修改 ",8,Vd)):j("",!0),D(h)?(V(),M("button",{key:1,class:"delete-btn",onClick:W=>wt(h)}," 删除 ",8,Md)):j("",!0),!D(h)&&me.value?(V(),M("button",{key:2,class:"report-btn",onClick:W=>Yr(h.id)}," 反馈 ",8,Ld)):j("",!0)])],512),[[ao,De(h.id)]]),ne(a("div",$d,[a("div",Ud,[h.original_url?(V(),M("a",{key:0,href:h.original_url,target:"_blank",class:"original-link",title:"查看原文"}," 来源 ",8,Pd)):j("",!0),a("span",Dd,"添加by "+G(h.user_display_name||"匿名用户"),1)]),a("div",Id,[a("span",Fd,G(Y(h.created_at)),1),h.report_count>0?(V(),M("span",Od," 被反馈 "+G(h.report_count)+" 次 ",1)):j("",!0)])],512),[[ao,De(h.id)]])],8,od))),128))])):!r.value&&!me.value&&n.value.length===0?(V(),M("div",Rd,[a("div",{class:"login-prompt-content"},[d[62]||(d[62]=a("div",{class:"login-icon"},[a("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"currentColor"},[a("path",{d:"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"})])],-1)),d[63]||(d[63]=a("h3",null,"登录后浏览链接",-1)),d[64]||(d[64]=a("p",null,"登录后即可查看和添加资源链接",-1)),a("button",{class:"login-btn",onClick:o1}," 立即登录 ")])])):!r.value&&n.value.length===0?(V(),M("div",jd,d[65]||(d[65]=[a("p",null,"暂无链接,成为第一个添加链接的人吧!",-1)]))):j("",!0)]),U.value.pages>1&&!r.value?(V(),M("div",Bd,[a("button",{class:"pagination-btn",disabled:U.value.page<=1,onClick:ho}," 上一页 ",8,Nd),a("span",zd,G(U.value.page)+" / "+G(U.value.pages),1),a("button",{class:"pagination-btn",disabled:U.value.page>=U.value.pages,onClick:s1}," 下一页 ",8,qd)])):j("",!0),Z(Or,{"error-message":i.value,"success-message":u.value,duration:3e3,"auto-close":!0,onClearError:d[35]||(d[35]=h=>i.value=""),onClearSuccess:d[36]||(d[36]=h=>u.value="")},null,8,["error-message","success-message"])]),ls.value?(V(),M("div",Hd,[a("div",Gd,[a("div",{class:"modal-header"},[d[67]||(d[67]=a("h4",null,"删除链接",-1)),a("button",{class:"close-btn",onClick:Ut},d[66]||(d[66]=[a("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor"},[a("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"})],-1)]))]),a("div",Kd,[d[68]||(d[68]=a("div",{class:"delete-confirmation"},[a("div",{class:"warning-icon"},"⚠️"),a("p",null,"确定要删除这个链接吗?"),a("p",{class:"warning-text"},"此操作不可撤销")],-1)),a("div",Wd,[a("button",{type:"button",class:"delete-confirm-btn",disabled:nt.value,onClick:bt},G(nt.value?"删除中...":"确认删除"),9,Jd),a("button",{type:"button",onClick:Ut}," 取消 ")])])])])):j("",!0),kt.value?(V(),M("div",Qd,[a("div",Zd,[a("div",{class:"modal-header"},[d[70]||(d[70]=a("h4",null,"反馈链接",-1)),a("button",{class:"close-btn",onClick:m},d[69]||(d[69]=[a("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor"},[a("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"})],-1)]))]),a("div",Yd,[a("form",{onSubmit:Ge(f,["prevent"])},[a("div",Xd,[d[71]||(d[71]=a("label",{for:"report-type"},"反馈类型 *",-1)),Z(Nt,{id:"report-type",modelValue:be.type,"onUpdate:modelValue":d[37]||(d[37]=h=>be.type=h),options:Ht,placeholder:"请选择反馈类型",required:""},null,8,["modelValue"])]),a("div",ef,[d[72]||(d[72]=a("label",{for:"report-reason"},"详细原因",-1)),a("div",tf,[ne(a("input",{id:"report-reason","onUpdate:modelValue":d[38]||(d[38]=h=>be.reason=h),placeholder:"请详细描述反馈原因(可选)",rows:"4"},null,512),[[pe,be.reason]])])]),a("div",sf,[a("button",{type:"submit",disabled:qt.value||!be.type},G(qt.value?"提交中...":"提交反馈"),9,of),a("button",{type:"button",onClick:m}," 取消 ")])],32)])])])):j("",!0)],64))}},[["__scopeId","data-v-6389179c"]]),lf={class:"content-wrapper"},af={class:"navigation-bar"},uf={class:"tab-content"},cf={key:0,class:"tab-panel"},df={key:1,class:"no-subject"},ff={key:1,class:"tab-panel"},pf=Xe({__name:"WindowContent",setup(e){const t=I("links"),s=I("netdisk"),o=I(""),n=I(""),r=I({title:"",year:"",rating:"",category:""}),l=(u,p=null)=>{t.value=u,u==="links"&&p&&(s.value=p)},i=()=>{try{const u=window.location.href;let p="",c=null;if(u.includes("movie.douban.com/subject/")?(p="movies",c=u.match(/\/subject\/(\d+)\/?/)):u.includes("music.douban.com/subject/")?(p="albums",c=u.match(/\/subject\/(\d+)\/?/)):u.includes("book.douban.com/subject/")?(p="books",c=u.match(/\/subject\/(\d+)\/?/)):u.includes("www.douban.com/game/")&&(p="games",c=u.match(/\/game\/(\d+)\/?/)),c&&p)o.value=c[1],n.value=p,r.value.category=p;else{o.value="",n.value="",r.value={title:"",year:"",rating:"",category:""};return}const v=document.querySelector('h1 span[property="v:itemreviewed"]')||document.querySelector("h1 span")||document.querySelector("h1");v&&(r.value.title=v.textContent.trim());const x=document.querySelector(".year")||document.querySelector("span.year");if(x){const C=x.textContent.match(/(\d{4})/);C&&(r.value.year=C[1])}const y=document.querySelector(".rating_num")||document.querySelector('[property="v:average"]');y&&(r.value.rating=y.textContent.trim())}catch(u){console.error("获取豆瓣主题信息失败:",u)}};return ts(()=>{i(),new MutationObserver(()=>{(window.location.href.includes("/subject/")||window.location.href.includes("/game/"))&&setTimeout(i,500)}).observe(document.body,{childList:!0,subtree:!0});const p=c=>{c.detail&&c.detail.tab==="user"&&l("user")};return document.addEventListener("switchToUserTab",p),()=>{document.removeEventListener("switchToUserTab",p)}}),(u,p)=>(V(),M("div",lf,[a("div",af,[a("button",{class:_e(["nav-btn",{active:t.value==="links"&&s.value==="netdisk"}]),onClick:p[0]||(p[0]=c=>l("links","netdisk"))}," 💾 网盘 ",2),a("button",{class:_e(["nav-btn",{active:t.value==="links"&&s.value==="bt"}]),onClick:p[1]||(p[1]=c=>l("links","bt"))}," 🧲 BT ",2),a("button",{class:_e(["nav-btn",{active:t.value==="links"&&s.value==="online"}]),onClick:p[2]||(p[2]=c=>l("links","online"))}," 📺 在线 ",2),a("button",{class:_e(["nav-btn",{active:t.value==="user"}]),onClick:p[3]||(p[3]=c=>l("user"))}," 👤 用户 ",2)]),a("div",uf,[t.value==="links"?(V(),M("div",cf,[o.value&&n.value?(V(),Ts(rf,{key:0,"subject-id":o.value,"subject-category":n.value,"link-type":s.value},null,8,["subject-id","subject-category","link-type"])):(V(),M("div",df,p[4]||(p[4]=[a("p",null,"未检测到支持的豆瓣页面,请在豆瓣详情页使用此功能。",-1),a("p",{class:"hint"},"支持的页面格式:",-1),a("ul",{class:"hint-list"},[a("li",null,"电影:https://movie.douban.com/subject/[ID]/"),a("li",null,"专辑:https://music.douban.com/subject/[ID]/"),a("li",null,"书籍:https://book.douban.com/subject/[ID]/"),a("li",null,"游戏:https://www.douban.com/game/[ID]/")],-1)])))])):j("",!0),t.value==="user"?(V(),M("div",ff,[Z(Ou)])):j("",!0)])]))}},[["__scopeId","data-v-92e3c6bc"]]),hf={key:0,class:"debug-panel"},mf={class:"debug-content"},gf={class:"debug-section"},vf={class:"status-item"},_f={class:"status-item"},yf={class:"value"},wf={class:"status-item"},bf={class:"value token"},kf={class:"status-item"},xf={class:"value token"},Cf={class:"status-item"},Tf={class:"debug-section"},Sf={key:0,class:"test-result"},Ef={class:"debug-section"},Af={class:"headers-preview"},Vf=Xe({__name:"DebugPanel",setup(e){const t=I(!1),s=I(""),o=I(""),n=Ve(()=>X.isAuthenticated.value),r=Ve(()=>X.token.value),l=Ve(()=>X.user.value?`${X.user.value.email} (ID: ${X.user.value.id})`:"无用户信息"),i=Ve(()=>{const y=r.value,C=s.value;return y&&C&&y===C}),u=Ve(()=>{const y=s.value;return JSON.stringify(y?{Authorization:`Bearer ${y.substring(0,20)}...`,"Content-Type":"application/json"}:{"Content-Type":"application/json"},null,2)}),p=()=>{t.value=!t.value,t.value&&c()},c=()=>{s.value=localStorage.getItem("auth_token")||"",console.log("Token状态刷新:",{memory:r.value,localStorage:s.value,match:i.value})},v=async()=>{try{o.value="测试中...";const y=await yt.getLinks();o.value=JSON.stringify({success:!0,dataLength:(y==null?void 0:y.length)||0,message:"请求成功"},null,2)}catch(y){o.value=JSON.stringify({success:!1,error:y.message,status:y.status||"unknown"},null,2)}},x=()=>{localStorage.removeItem("auth_token"),X.token.value=null,X.user.value=null,c(),o.value="",console.log("所有Token已清除")};return ts(()=>{c(),window.addEventListener("storage",y=>{y.key==="auth_token"&&c()})}),(y,C)=>t.value?(V(),M("div",hf,[a("div",{class:"debug-header"},[C[0]||(C[0]=a("h3",null,"🔧 调试面板",-1)),a("button",{onClick:p,class:"close-btn"},"×")]),a("div",mf,[a("div",gf,[C[6]||(C[6]=a("h4",null,"认证状态",-1)),a("div",vf,[C[1]||(C[1]=a("span",{class:"label"},"登录状态:",-1)),a("span",{class:_e(["status",n.value?"success":"error"])},G(n.value?"已登录":"未登录"),3)]),a("div",_f,[C[2]||(C[2]=a("span",{class:"label"},"用户信息:",-1)),a("span",yf,G(l.value),1)]),a("div",wf,[C[3]||(C[3]=a("span",{class:"label"},"Token (内存):",-1)),a("span",bf,G(r.value||"无"),1)]),a("div",kf,[C[4]||(C[4]=a("span",{class:"label"},"Token (localStorage):",-1)),a("span",xf,G(s.value||"无"),1)]),a("div",Cf,[C[5]||(C[5]=a("span",{class:"label"},"Token匹配:",-1)),a("span",{class:_e(["status",i.value?"success":"error"])},G(i.value?"匹配":"不匹配"),3)])]),a("div",Tf,[C[8]||(C[8]=a("h4",null,"测试操作",-1)),a("div",{class:"button-group"},[a("button",{onClick:c,class:"debug-btn"},"刷新Token状态"),a("button",{onClick:v,class:"debug-btn"},"测试API请求"),a("button",{onClick:x,class:"debug-btn danger"},"清除所有Token")]),o.value?(V(),M("div",Sf,[C[7]||(C[7]=a("h5",null,"API测试结果:",-1)),a("pre",null,G(o.value),1)])):j("",!0)]),a("div",Ef,[C[9]||(C[9]=a("h4",null,"请求头预览",-1)),a("div",Af,[a("code",null,G(u.value),1)])])])])):j("",!0)}},[["__scopeId","data-v-dba5723e"]]),Ls="1.1.5",Hr="https://scriptcat.org/scripts/code/4290/DoubanFlix%20-%20%E5%9C%A8%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1%E9%A1%B5%E9%9D%A2%E8%8E%B7%E5%8F%96%E6%B7%BB%E5%8A%A0%E8%B5%84%E6%BA%90%E9%93%BE%E6%8E%A5%EF%BC%88%E7%BD%91%E7%9B%98%EF%BC%8C%E7%A3%81%E5%8A%9B%EF%BC%8C%E5%9C%A8%E7%BA%BF%EF%BC%89.user.js",zt={LAST_CHECK_TIME:"doubanflix_last_version_check",SKIP_VERSION:"doubanflix_skip_version",SKIP_UNTIL:"doubanflix_skip_until"};function Gr(e,t){const s=e.split(".").map(Number),o=t.split(".").map(Number),n=Math.max(s.length,o.length);for(let r=0;ri)return 1;if(l{try{if(typeof GM_xmlhttpRequest>"u"){console.warn("GM_xmlhttpRequest 不可用,可能不在用户脚本环境中"),e({success:!1,error:"GM_xmlhttpRequest API 不可用"});return}GM_xmlhttpRequest({method:"GET",url:Hr,headers:{"User-Agent":"DoubanFlix Version Checker"},timeout:1e4,onload:function(t){try{if(t.status!==200)throw new Error(`HTTP ${t.status}: ${t.statusText}`);const s=t.responseText,o=s.match(/@version\s+([^\r\n]+)/),n=s.match(/@name\s+([^\r\n]+)/),r=s.match(/@description\s+([^\r\n]+)/);let l="";const i=s.split(` `);let u=!1;for(const p of i){if(p.trim()==="// ==/UserScript==")break;if(p.includes("@updatenote")){u=!0;const c=p.match(/@updatenote\s+(.+)/);c&&(l=c[1].trim())}else if(u){const c=p.match(/^\/\/\s+(.+)/);if(c&&!p.includes("@"))l+=` `+c[1].trim();else if(p.trim().startsWith("//")&&p.includes("@"))break}}if(!o)throw new Error("无法解析脚本版本信息");e({version:o[1].trim(),name:n?n[1].trim():"DoubanFlix",description:r?r[1].trim():"",updateNote:l||"",downloadUrl:Hr,success:!0})}catch(s){console.error("解析脚本信息失败:",s),e({success:!1,error:s.message})}},onerror:function(t){console.error("请求脚本信息失败:",t),e({success:!1,error:"网络请求失败"})},ontimeout:function(){console.error("请求脚本信息超时"),e({success:!1,error:"请求超时"})}})}catch(t){console.error("获取脚本信息失败:",t),e({success:!1,error:t.message})}})}function Kr(){const e=localStorage.getItem(zt.SKIP_UNTIL);if(e){const t=parseInt(e);if(Date.now()0?{hasUpdate:!0,currentVersion:Ls,latestVersion:s,scriptInfo:t,message:`发现新版本 ${s},当前版本 ${Ls}`}:{hasUpdate:!1,currentVersion:Ls,latestVersion:s,message:"当前已是最新版本"}}catch(t){return console.error("版本检查失败:",t),{hasUpdate:!1,error:!0,message:`版本检查失败: ${t.message}`}}}function Qr(){const e=localStorage.getItem(zt.LAST_CHECK_TIME);return e?parseInt(e):null}function Lf(e=24){const t=Qr();if(!t)return!0;const s=Date.now(),o=e*60*60*1e3;return s-t>=o}const Zr={checkForUpdates:Jr,setSkipVersionCheck:Wr,shouldSkipVersionCheck:Kr,getLastCheckTime:Qr,shouldCheckForUpdates:Lf,compareVersions:Gr,CURRENT_VERSION:Ls},$f={name:"UpdateNotification",props:{updateInfo:{type:Object,required:!0},visible:{type:Boolean,default:!1}},emits:["close","update","later"],setup(e,{emit:t}){const s=I(!1),o=I(!1),n=()=>{t("close")};return{skipForWeek:s,isUpdating:o,handleClose:n,handleOverlayClick:()=>{n()},handleSkipChange:()=>{},handleLater:()=>{s.value&&Zr.setSkipVersionCheck(e.updateInfo.latestVersion,7),t("later"),n()},handleUpdate:async()=>{try{o.value=!0,s.value&&Zr.setSkipVersionCheck(e.updateInfo.latestVersion,7),t("update",e.updateInfo),setTimeout(()=>{window.open(e.updateInfo.scriptInfo.downloadUrl,"_blank"),n()},500)}catch(c){console.error("处理更新失败:",c)}finally{setTimeout(()=>{o.value=!1},1e3)}},formatUpdateLog:c=>{if(!c)return"";if(c.includes(` `))return c.split(` `).map(C=>C.trim()).filter(C=>C.length>0).map(C=>C.match(/^\d+\.\s/)?C:C.startsWith("*")?C.replace(/^\*\s*/,"• "):C.startsWith("-")?C.replace(/^-\s*/,"• "):"• "+C).join("
").replace(/(\d+\.\d+\.\d+)/g,"$1");if(c.match(/^\d+\.\d+\.\d+/))return c.replace(/\n/g,"
").replace(/\*\s*(.+)/g,"• $1").replace(/(\d+\.\d+\.\d+)/g,"$1");const v=["更新日志","新日志","更新说明","版本更新","changelog","update log"];let x=c;for(const C of v){const R=x.toLowerCase().indexOf(C.toLowerCase());if(R!==-1){x=x.substring(R+C.length).replace(/^[:\s\-=]+/,"").trim();break}}const y=x.split(` `).filter(C=>C.trim());return y.length>5&&(x=y.slice(0,5).join(` `)+` ...`),x.replace(/\n/g,"
").replace(/\*\s*(.+)/g,"• $1").replace(/(\d+\.\d+\.\d+)/g,"$1")}}}},Uf={class:"notification-header"},Pf={class:"version-info"},Df={class:"version-row"},If={class:"version-current"},Ff={class:"version-row"},Of={class:"version-latest"},Rf={key:0,class:"update-description"},jf=["innerHTML"],Bf={class:"notification-actions"},Nf={class:"skip-option"},zf={class:"skip-checkbox"},qf={class:"action-buttons"},Hf=["disabled"],Gf=["disabled"],Kf={key:0,class:"loading-spinner"};function Wf(e,t,s,o,n,r){var l,i,u,p;return s.visible?(V(),M("div",{key:0,class:"update-notification-overlay",onClick:t[6]||(t[6]=(...c)=>o.handleOverlayClick&&o.handleOverlayClick(...c))},[a("div",{class:"update-notification",onClick:t[5]||(t[5]=Ge(()=>{},["stop"]))},[a("div",Uf,[t[8]||(t[8]=gr('

发现新版本

DoubanFlix 有新版本可用

',2)),a("button",{class:"close-btn",onClick:t[0]||(t[0]=(...c)=>o.handleClose&&o.handleClose(...c)),title:"关闭"},t[7]||(t[7]=[a("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M12 4L4 12M4 4L12 12",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"})],-1)]))]),a("div",Pf,[a("div",Df,[t[9]||(t[9]=a("span",{class:"version-label"},"当前版本:",-1)),a("span",If,G(s.updateInfo.currentVersion),1)]),a("div",Ff,[t[10]||(t[10]=a("span",{class:"version-label"},"最新版本:",-1)),a("span",Of,G(s.updateInfo.latestVersion),1)])]),(l=s.updateInfo.scriptInfo)!=null&&l.updateNote||(i=s.updateInfo.scriptInfo)!=null&&i.description?(V(),M("div",Rf,[t[11]||(t[11]=a("h4",{class:"description-title"},"更新日志",-1)),a("div",{class:"description-content",innerHTML:o.formatUpdateLog(((u=s.updateInfo.scriptInfo)==null?void 0:u.updateNote)||((p=s.updateInfo.scriptInfo)==null?void 0:p.description))},null,8,jf)])):j("",!0),a("div",Bf,[a("div",Nf,[a("label",zf,[ne(a("input",{type:"checkbox","onUpdate:modelValue":t[1]||(t[1]=c=>o.skipForWeek=c),onChange:t[2]||(t[2]=(...c)=>o.handleSkipChange&&o.handleSkipChange(...c))},null,544),[[ya,o.skipForWeek]]),t[12]||(t[12]=a("span",{class:"checkmark"},null,-1)),t[13]||(t[13]=a("span",{class:"skip-text"},"一周内不再提醒",-1))])]),a("div",qf,[a("button",{class:"btn btn-secondary",onClick:t[3]||(t[3]=(...c)=>o.handleLater&&o.handleLater(...c)),disabled:o.isUpdating}," 稍后提醒 ",8,Hf),a("button",{class:"btn btn-primary",onClick:t[4]||(t[4]=(...c)=>o.handleUpdate&&o.handleUpdate(...c)),disabled:o.isUpdating},[o.isUpdating?(V(),M("span",Kf)):j("",!0),ns(" "+G(o.isUpdating?"正在跳转...":"立即更新"),1)],8,Gf)])])])])):j("",!0)}const Jf=Xe($f,[["render",Wf],["__scopeId","data-v-8ddffaa9"]]),Qf={key:0,class:"custom-window"},Zf={class:"window-content"},Yf={class:"window-header"},Xf={class:"window-title"},e1=Xe({__name:"App",setup(e){const t=I(!0),s=I(!1),o=I("DoubanFlix 1.1.5"),n=I(null),r=I(!1),l=()=>new Promise(U=>{const w=()=>{const Q=document.querySelector(".aside")||document.querySelector("#aside")||document.querySelector(".sidebar")||document.querySelector("#sidebar")||document.querySelector(".right-col")||document.querySelector(".side-panel")||document.querySelector("#content .article")||document.querySelector(".grid-16-8 .aside")||document.querySelector('[class*="aside"]')||document.querySelector('[class*="side"]');return Q?(console.log("找到aside元素:",Q.className||Q.tagName),U(Q),!0):!1};if(w())return;const b=new MutationObserver(Q=>{for(const F of Q)if(F.type==="childList"){for(const ae of F.addedNodes)if(ae.nodeType===Node.ELEMENT_NODE&&w()){b.disconnect();return}}});b.observe(document.body,{childList:!0,subtree:!0}),setTimeout(()=>{b.disconnect(),console.log("超时未找到aside元素,强制显示窗口"),U(null)},1e4)}),i=()=>{t.value=!t.value,t.value&&s.value&&u()},u=()=>{const U=document.querySelector("#bilibili-custom-window");if(!U){console.log("未找到Vue应用容器");return}const w=document.querySelector(".aside")||document.querySelector("#aside")||document.querySelector(".sidebar")||document.querySelector("#sidebar")||document.querySelector(".right-col")||document.querySelector(".side-panel")||document.querySelector("#content .article")||document.querySelector(".grid-16-8 .aside")||document.querySelector('[class*="aside"]')||document.querySelector('[class*="side"]');w?U.parentNode!==w&&(w.firstChild?w.insertBefore(U,w.firstChild):w.appendChild(U),console.log("Vue应用容器已移动到aside元素的第一个位置:",w.className||w.tagName)):console.log("未找到aside元素,Vue应用容器保持在当前位置")},p=()=>{t.value=!1},c=async()=>{try{const U=await Jr();U.hasUpdate&&(n.value=U,r.value=!0)}catch(U){console.error("版本检查失败:",U)}},v=()=>{r.value=!1,n.value=null},x=()=>{window.open("https://scriptcat.org/scripts/code/4290/DoubanFlix%20-%20%E5%9C%A8%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1%E9%A1%B5%E9%9D%A2%E8%8E%B7%E5%8F%96%E6%B7%BB%E5%8A%A0%E8%B5%84%E6%BA%90%E9%93%BE%E6%8E%A5%EF%BC%88%E7%BD%91%E7%9B%98%EF%BC%8C%E7%A3%81%E5%8A%9B%EF%BC%8C%E5%9C%A8%E7%BA%BF%EF%BC%89.user.js","_blank"),v()},y=(U=0)=>{U>0&&Wr(U),v()},C=()=>{i()},R=U=>{U.ctrlKey&&U.key==="q"&&(U.preventDefault(),i())};return ts(async()=>{X.initAuth().catch(U=>{console.error("用户认证初始化失败:",U)}),window.addEventListener("toggle-window",C),document.addEventListener("keydown",R),await l(),s.value=!0,u(),setTimeout(()=>{c()},2e3)}),ws(()=>{window.removeEventListener("toggle-window",C),document.removeEventListener("keydown",R)}),(U,w)=>(V(),M(ve,null,[t.value&&s.value?(V(),M("div",Qf,[a("div",Zf,[Z(pf)]),a("div",Yf,[a("span",Xf,G(o.value),1),a("button",{class:"close-btn",onClick:p},"×")])])):j("",!0),Z(Vf),n.value&&r.value?(V(),Ts(Jf,{key:1,"update-info":n.value,visible:r.value,onClose:v,onUpdate:x,onLater:y},null,8,["update-info","visible"])):j("",!0)],64))}},[["__scopeId","data-v-00eb2652"]]);async function t1(){const e=document.querySelectorAll("h1"),t=document.querySelector(".article");t&&e.length>0&&e.forEach(n=>{t.insertBefore(n,t.firstChild)});const s=document.createElement("div");s.id="bilibili-custom-window",document.body.appendChild(s),Ta(e1).mount("#bilibili-custom-window"),console.log("DoubanFlix应用已初始化")}t1()})()})();