// ==UserScript== // @name DoubanFlix - 在豆瓣页面获取添加资源链接(网盘,磁力,在线),支持电影,游戏,音乐,书籍 // @namespace http://tampermonkey.net/ // @version 1.1.3 // @description 在豆瓣页面获取添加资源链接(网盘,磁力,在线),支持电影,游戏,音乐,书籍 // @updatenote 1. 修复标题的特性与大小识别问题 // 2. 添加原文链接 // @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 // @license MIT // @icon https://cdn.zerror.cc/images/%E8%B1%86%E7%93%A3%E7%BD%91.png // ==/UserScript== // @license MIT // 注入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-8b6fa670]{max-width:1000px;margin:0 auto}.link-stats[data-v-8b6fa670]{display:flex;gap:20px;margin-bottom:20px;padding:15px;background:#f5f5f5;border-radius:8px}.stat-item[data-v-8b6fa670]{display:flex;flex-direction:column;align-items:center}.stat-label[data-v-8b6fa670]{font-size:12px;color:#666;margin-bottom:4px}.stat-value[data-v-8b6fa670]{font-size:18px;font-weight:700;color:#333}.add-link-section[data-v-8b6fa670]{margin-bottom:20px;display:flex;align-items:center;gap:10px}.add-link-btn[data-v-8b6fa670]{padding:10px 20px;background:#007bff;color:#fff;border:none;border-radius:6px;cursor:pointer;font-size:14px}.add-link-btn[data-v-8b6fa670]:hover:not(:disabled){background:#0056b3}.add-link-btn[data-v-8b6fa670]:disabled{background:#ccc;cursor:not-allowed}.auth-hint[data-v-8b6fa670]{color:#666;font-size:12px}.add-form[data-v-8b6fa670]{background:#f9f9f9;padding:20px;border-radius:8px;margin-bottom:20px}.add-form h4[data-v-8b6fa670]{margin:0 0 15px;color:#333}.form-row[data-v-8b6fa670]{display:flex;gap:15px}.form-group[data-v-8b6fa670]{flex:1;display:flex;align-items:center;gap:10px;margin-bottom:24px}.form-group label[data-v-8b6fa670]{margin-bottom:0;font-weight:540;color:#333;font-size:13px;white-space:nowrap;min-width:80px;text-align:right}.checkbox-group[data-v-8b6fa670]{display:flex;flex-wrap:wrap;gap:15px}.form-group input[data-v-8b6fa670],.form-group select[data-v-8b6fa670]{width:95%;padding:8px 12px;border:1px solid #ddd;border-radius:4px;font-size:14px}.form-group select[data-v-8b6fa670]:focus{outline:none}.input-wrapper[data-v-8b6fa670]{width:100%;border:1px solid #ddd;border-radius:6px}.input-wrapper input[data-v-8b6fa670]{width:95%;border:none;outline:none;font-size:14px;background:transparent}.form-actions[data-v-8b6fa670]{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.form-actions button[data-v-8b6fa670]{font-weight:300;padding:10px 20px;border:none;border-radius:8px;cursor:pointer;font-size:14px}.form-actions button[type=submit][data-v-8b6fa670]{background:#beecc859;color:#2e8339}.form-actions button[type=submit][data-v-8b6fa670]:hover:not(:disabled){background:#beecc870}.form-actions button[type=submit][data-v-8b6fa670]:disabled{background:#b1efbf;cursor:not-allowed}.form-actions button[type=button][data-v-8b6fa670]{background:#f1f1f1;color:#828282}.form-actions button[type=button][data-v-8b6fa670]:hover{background:#ececec}.filter-bar[data-v-8b6fa670]{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:20px;border-radius:6px}.filter-controls[data-v-8b6fa670]{display:flex;gap:10px}.filter-bar .custom-select[data-v-8b6fa670]{width:auto;min-width:100px}.add-link-btn-compact[data-v-8b6fa670]{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-8b6fa670]:hover:not(:disabled){background:#dae9f7;transform:scale(1)}.add-link-btn-compact[data-v-8b6fa670]:disabled{color:#b2b2b2;background:#f5f4f4;cursor:not-allowed;transform:none}.filter-bar select[data-v-8b6fa670]{padding:6px 10px;border:1px solid #ddd;border-radius:4px;font-size:13px}.links-list[data-v-8b6fa670]{display:flex;flex-direction:column;gap:15px}.link-item[data-v-8b6fa670]{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-8b6fa670]{display:flex;align-items:center;gap:10px;margin-bottom:10px}.link-type-badge[data-v-8b6fa670]{padding:4px 8px;border-radius:4px;font-size:12px;font-weight:700;color:#fff}.link-type-badge.netdisk[data-v-8b6fa670]{background:#28a745}.link-type-badge.bt[data-v-8b6fa670]{background:#dc3545}.link-type-badge.online[data-v-8b6fa670]{background:#007bff}.platform-badge[data-v-8b6fa670]{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-8b6fa670]{width:16px;height:16px;object-fit:contain}.link-meta[data-v-8b6fa670]{display:flex;justify-content:space-between;align-items:center;width:100%}.file-size[data-v-8b6fa670]{padding:2px 5px;border-radius:3px;font-size:10px;background:#e3f2fd!important;color:#1976d2!important;font-weight:500}.feature-tags[data-v-8b6fa670]{display:flex;gap:3px;flex-wrap:wrap;margin-left:auto}.feature-tag[data-v-8b6fa670]{padding:2px 5px;background:#007bff;color:#fff;border-radius:3px;font-size:10px;font-weight:700}.feature-tag.feature-4k[data-v-8b6fa670]{border:1px solid #eff524;background:#f6ff00;color:#232323}.feature-tag.feature-hdr[data-v-8b6fa670]{background:#ffe55a;color:#232323}.feature-tag.feature-dolby[data-v-8b6fa670]{background:#eaeaea;color:#121212;font-weight:300}.feature-tag.feature-subtitle[data-v-8b6fa670]{background:#cee2e8;color:#036;font-weight:300}.feature-tag.feature-flac[data-v-8b6fa670]{background:#ededed;color:#383838;font-weight:500}.feature-tag.feature-wav[data-v-8b6fa670]{background:#ffe3b3;color:#ce7f0d;font-weight:500}.link-content[data-v-8b6fa670]{margin-bottom:15px}.link-title-row[data-v-8b6fa670]{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-8b6fa670]{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-8b6fa670]{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-8b6fa670]: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-8b6fa670]:after{opacity:0}.expand-arrow[data-v-8b6fa670]{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-8b6fa670]:hover{color:#333}.expand-arrow.expanded[data-v-8b6fa670]{transform:rotate(180deg)}.link-details[data-v-8b6fa670]{margin-top:10px;animation:slideDown-8b6fa670 .3s ease forwards}@keyframes slideDown-8b6fa670{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.link-url[data-v-8b6fa670]{display:flex;align-items:center;gap:8px;margin-bottom:5px}.link-url a[data-v-8b6fa670]{color:#007bff;text-decoration:none;flex:1;word-break:break-all}.link-url span[data-v-8b6fa670]:hover{text-decoration:none;background-color:transparent}.extract-code-container[data-v-8b6fa670]{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-8b6fa670]{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-8b6fa670]:hover{background:#e6e6e6}.copy-btn[data-v-8b6fa670]{background:none;border:none;cursor:pointer;font-size:14px;padding:2px 4px;border-radius:3px}.copy-btn[data-v-8b6fa670]:hover{background:#f8f9fa}.link-actions[data-v-8b6fa670]{display:flex;justify-content:space-between;align-items:center;margin-top:10px;margin-bottom:10px}.vote-section[data-v-8b6fa670]{display:flex;align-items:center;gap:10px}.vote-btn[data-v-8b6fa670]{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-8b6fa670]{width:12px;height:12px}.vote-icon.down-icon[data-v-8b6fa670]{transform:rotate(180deg)}.vote-btn[data-v-8b6fa670]:hover:not(:disabled){background:#e9ecef}.vote-btn[data-v-8b6fa670]:disabled{opacity:.6;cursor:not-allowed}.vote-btn.active.up[data-v-8b6fa670]{color:#155724}.vote-btn.active.down[data-v-8b6fa670]{color:#721c24}.vote-btn.pending[data-v-8b6fa670]{opacity:.7;position:relative}.pending-indicator[data-v-8b6fa670]{font-size:10px;margin-left:2px;animation:pulse-8b6fa670 1.5s ease-in-out infinite}@keyframes pulse-8b6fa670{0%,to{opacity:1}50%{opacity:.5}}.action-buttons[data-v-8b6fa670]{display:flex;gap:8px}.action-buttons button[data-v-8b6fa670]{padding:4px 8px;border:none;border-radius:6px;cursor:pointer;font-size:12px}.edit-btn[data-v-8b6fa670]{background:#ffc107;color:#212529}.edit-btn[data-v-8b6fa670]:hover{background:#e0a800}.modify-btn[data-v-8b6fa670]{width:48px;height:28px;background:#d4ecef66;color:#22899b}.modify-btn[data-v-8b6fa670]:hover{background:#d4ecef80}.delete-btn[data-v-8b6fa670]{width:48px;height:28px;background:#ffccd052;color:#e62e2e}.delete-btn[data-v-8b6fa670]:hover{background:#ffccd060}.delete-confirmation[data-v-8b6fa670]{text-align:center;padding:20px 0}.warning-icon[data-v-8b6fa670]{font-size:48px;margin-bottom:16px}.delete-confirmation p[data-v-8b6fa670]{margin:8px 0;font-size:16px}.warning-text[data-v-8b6fa670]{color:#dc3545;font-size:14px;font-weight:500}.delete-confirm-btn[data-v-8b6fa670]{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-8b6fa670]:hover:not(:disabled){background:#f8d7dad2!important;border:1px solid #f5c6cb!important}.delete-confirm-btn[data-v-8b6fa670]:disabled{background:#6c757d;cursor:not-allowed}.report-btn[data-v-8b6fa670]{width:48px;height:28px;background:#eee;color:#495057}.report-btn[data-v-8b6fa670]:hover{color:#495057;background:#e3e3e3}.link-footer[data-v-8b6fa670]{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-8b6fa670]{display:flex;align-items:center;gap:8px}.footer-right[data-v-8b6fa670]{display:flex;align-items:center;gap:12px}.original-link[data-v-8b6fa670]{color:#007bff;text-decoration:none;font-size:12px}.original-link[data-v-8b6fa670]:hover{background-color:transparent}.report-count[data-v-8b6fa670]{color:#dc3545;font-weight:700}.empty-state[data-v-8b6fa670]{text-align:center;padding:40px;color:#666}.loading[data-v-8b6fa670]{text-align:center;padding:20px;color:#666}.error-message[data-v-8b6fa670]{background:#f8d7da;color:#721c24;padding:10px 15px;border-radius:4px;margin:10px 0;border:1px solid #f5c6cb}.success-message[data-v-8b6fa670]{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-8b6fa670]{padding:10px}.form-row[data-v-8b6fa670]{flex-direction:column;gap:10px}.filter-bar[data-v-8b6fa670]{flex-direction:column;gap:8px}.link-header[data-v-8b6fa670]{flex-wrap:wrap}.link-meta[data-v-8b6fa670]{margin-left:0;margin-top:5px}.link-actions[data-v-8b6fa670]{flex-direction:column;gap:10px;align-items:flex-start}}.modal-overlay[data-v-8b6fa670]{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-8b6fa670]{background:#fff;border-radius:16px;width:90%;max-width:600px;max-height:90vh;box-shadow:0 4px 20px #00000026}.modal-header[data-v-8b6fa670]{display:flex;justify-content:space-between;align-items:center;padding:20px;border-bottom:1px solid #eee;margin-bottom:20px}.modal-header h4[data-v-8b6fa670]{margin-left:10px;margin-bottom:0;color:#333;font-size:18px}.close-btn[data-v-8b6fa670]{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-8b6fa670]:hover{background:#f5f5f5;color:#333}.modal-body[data-v-8b6fa670]{padding:0 20px 20px}.vote-section[data-v-8b6fa670]{width:100%}.input-wrapper textarea[data-v-8b6fa670]{width:100%;border:none;outline:none;font-size:14px;font-family:inherit;resize:vertical;min-height:80px;background:transparent}.input-wrapper[data-v-8b6fa670]:has(textarea):focus-within{border-color:#007bff;box-shadow:0 0 0 2px #007bff40}.input-wrapper textarea[data-v-8b6fa670]::placeholder{color:#999}.pagination[data-v-8b6fa670]{display:flex;justify-content:center;align-items:center;gap:15px;margin-top:10px;padding:10px;background:#fff;border-radius:8px}.pagination-btn[data-v-8b6fa670]{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-8b6fa670]:hover:not(:disabled){background:#b3d8ff;color:#007bff;border-color:#b3d8ff}.pagination-btn[data-v-8b6fa670]:disabled{background:#f5f5f5;color:#999;cursor:not-allowed;border-color:#ddd}.pagination-info[data-v-8b6fa670]{font-size:14px;color:#666;font-weight:500}.login-prompt[data-v-8b6fa670]{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-8b6fa670]{text-align:center;max-width:400px}.login-icon[data-v-8b6fa670]{margin-bottom:20px;color:#6c757d;opacity:.8}.login-prompt h3[data-v-8b6fa670]{font-size:24px;font-weight:600;color:#495057;margin-bottom:12px;line-height:1.3}.login-prompt p[data-v-8b6fa670]{font-size:16px;color:#6c757d;margin-bottom:24px;line-height:1.5}.login-btn[data-v-8b6fa670]{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-8b6fa670]:hover{transform:translateY(-2px);box-shadow:#0000000f 4px 4px 20px}.login-btn[data-v-8b6fa670]: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-f96739f0]{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-f96739f0]{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-f96739f0]{font-weight:300;font-size:12px}.close-btn[data-v-f96739f0]{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-f96739f0]:hover{background-color:#fff3}.window-content[data-v-f96739f0]{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 ro(e){const t=Object.create(null);for(const s of e.split(","))t[s]=1;return s=>s in t}const ae={},Nt=[],tt=()=>{},ql=()=>!1,As=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),io=e=>e.startsWith("onUpdate:"),Ve=Object.assign,ao=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},Hl=Object.prototype.hasOwnProperty,se=(e,t)=>Hl.call(e,t),N=Array.isArray,zt=e=>ns(e)==="[object Map]",Vs=e=>ns(e)==="[object Set]",Ho=e=>ns(e)==="[object Date]",W=e=>typeof e=="function",ve=e=>typeof e=="string",st=e=>typeof e=="symbol",fe=e=>e!==null&&typeof e=="object",Ko=e=>(fe(e)||W(e))&&W(e.then)&&W(e.catch),Wo=Object.prototype.toString,ns=e=>Wo.call(e),Kl=e=>ns(e).slice(8,-1),Go=e=>ns(e)==="[object Object]",uo=e=>ve(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ls=ro(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),$s=e=>{const t=Object.create(null);return s=>t[s]||(t[s]=e(s))},Wl=/-(\w)/g,wt=$s(e=>e.replace(Wl,(t,s)=>s?s.toUpperCase():"")),Gl=/\B([A-Z])/g,Mt=$s(e=>e.replace(Gl,"-$1").toLowerCase()),Qo=$s(e=>e.charAt(0).toUpperCase()+e.slice(1)),co=$s(e=>e?`on${Qo(e)}`:""),kt=(e,t)=>!Object.is(e,t),Ms=(e,...t)=>{for(let s=0;s{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:o,value:s})},po=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Yo;const Is=()=>Yo||(Yo=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function qt(e){if(N(e)){const t={};for(let s=0;s{if(s){const o=s.split(Yl);o.length>1&&(t[o[0].trim()]=o[1].trim())}}),t}function be(e){let t="";if(ve(e))t=e;else if(N(e))for(let s=0;sLs(s,t))}const Xo=e=>!!(e&&e.__v_isRef===!0),q=e=>ve(e)?e:e==null?"":N(e)||fe(e)&&(e.toString===Wo||!W(e.toString))?Xo(e)?q(e.value):JSON.stringify(e,en,2):String(e),en=(e,t)=>Xo(t)?en(e,t.value):zt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[o,n],l)=>(s[ho(o,l)+" =>"]=n,s),{})}:Vs(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>ho(s))}:st(t)?ho(t):fe(t)&&!N(t)&&!Go(t)?String(t):t,ho=(e,t="")=>{var s;return st(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 De;class tr{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=De,!t&&De&&(this.index=(De.scopes||(De.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&&(De=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(is){let t=is;for(is=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;rs;){let t=rs;for(rs=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 nn(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function ln(e){let t,s=e.depsTail,o=s;for(;o;){const n=o.prevDep;o.version===-1?(o===s&&(s=n),bo(o),or(o)):t=o,o.dep.activeLink=o.prevActiveLink,o.prevActiveLink=void 0,o=n}e.deps=t,e.depsTail=s}function _o(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(rn(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function rn(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===as)||(e.globalVersion=as,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!_o(e))))return;e.flags|=2;const t=e.dep,s=de,o=Xe;de=e,Xe=!0;try{nn(e);const n=e.fn(e._value);(t.version===0||kt(n,e._value))&&(e.flags|=128,e._value=n,t.version++)}catch(n){throw t.version++,n}finally{de=s,Xe=o,ln(e),e.flags&=-3}}function bo(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 l=s.computed.deps;l;l=l.nextDep)bo(l,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function or(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}let Xe=!0;const an=[];function ot(){an.push(Xe),Xe=!1}function nt(){const e=an.pop();Xe=e===void 0?!0:e}function un(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=de;de=void 0;try{t()}finally{de=s}}}let as=0;class nr{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 yo{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||!Xe||de===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==de)s=this.activeLink=new nr(de,this),de.deps?(s.prevDep=de.depsTail,de.depsTail.nextDep=s,de.depsTail=s):de.deps=de.depsTail=s,cn(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++,as++,this.notify(t)}notify(t){vo();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{go()}}}function cn(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)cn(o)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const wo=new WeakMap,It=Symbol(""),ko=Symbol(""),us=Symbol("");function Ee(e,t,s){if(Xe&&de){let o=wo.get(e);o||wo.set(e,o=new Map);let n=o.get(s);n||(o.set(s,n=new yo),n.map=o,n.key=s),n.track()}}function dt(e,t,s,o,n,l){const r=wo.get(e);if(!r){as++;return}const i=u=>{u&&u.trigger()};if(vo(),t==="clear")r.forEach(i);else{const u=N(e),p=u&&uo(s);if(u&&s==="length"){const d=Number(o);r.forEach((_,C)=>{(C==="length"||C===us||!st(C)&&C>=d)&&i(_)})}else switch((s!==void 0||r.has(void 0))&&i(r.get(s)),p&&i(r.get(us)),t){case"add":u?p&&i(r.get("length")):(i(r.get(It)),zt(e)&&i(r.get(ko)));break;case"delete":u||(i(r.get(It)),zt(e)&&i(r.get(ko)));break;case"set":zt(e)&&i(r.get(It));break}}go()}function Ht(e){const t=X(e);return t===e?t:(Ee(t,"iterate",us),qe(e)?t:t.map(ke))}function Us(e){return Ee(e=X(e),"iterate",us),e}const lr={__proto__:null,[Symbol.iterator](){return xo(this,Symbol.iterator,ke)},concat(...e){return Ht(this).concat(...e.map(t=>N(t)?Ht(t):t))},entries(){return xo(this,"entries",e=>(e[1]=ke(e[1]),e))},every(e,t){return ft(this,"every",e,t,void 0,arguments)},filter(e,t){return ft(this,"filter",e,t,s=>s.map(ke),arguments)},find(e,t){return ft(this,"find",e,t,ke,arguments)},findIndex(e,t){return ft(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return ft(this,"findLast",e,t,ke,arguments)},findLastIndex(e,t){return ft(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return ft(this,"forEach",e,t,void 0,arguments)},includes(...e){return Co(this,"includes",e)},indexOf(...e){return Co(this,"indexOf",e)},join(e){return Ht(this).join(e)},lastIndexOf(...e){return Co(this,"lastIndexOf",e)},map(e,t){return ft(this,"map",e,t,void 0,arguments)},pop(){return cs(this,"pop")},push(...e){return cs(this,"push",e)},reduce(e,...t){return dn(this,"reduce",e,t)},reduceRight(e,...t){return dn(this,"reduceRight",e,t)},shift(){return cs(this,"shift")},some(e,t){return ft(this,"some",e,t,void 0,arguments)},splice(...e){return cs(this,"splice",e)},toReversed(){return Ht(this).toReversed()},toSorted(e){return Ht(this).toSorted(e)},toSpliced(...e){return Ht(this).toSpliced(...e)},unshift(...e){return cs(this,"unshift",e)},values(){return xo(this,"values",ke)}};function xo(e,t,s){const o=Us(e),n=o[t]();return o!==e&&!qe(e)&&(n._next=n.next,n.next=()=>{const l=n._next();return l.value&&(l.value=s(l.value)),l}),n}const rr=Array.prototype;function ft(e,t,s,o,n,l){const r=Us(e),i=r!==e&&!qe(e),u=r[t];if(u!==rr[t]){const _=u.apply(e,l);return i?ke(_):_}let p=s;r!==e&&(i?p=function(_,C){return s.call(this,ke(_),C,e)}:s.length>2&&(p=function(_,C){return s.call(this,_,C,e)}));const d=u.call(r,p,o);return i&&n?n(d):d}function dn(e,t,s,o){const n=Us(e);let l=s;return n!==e&&(qe(e)?s.length>3&&(l=function(r,i,u){return s.call(this,r,i,u,e)}):l=function(r,i,u){return s.call(this,r,ke(i),u,e)}),n[t](l,...o)}function Co(e,t,s){const o=X(e);Ee(o,"iterate",us);const n=o[t](...s);return(n===-1||n===!1)&&So(s[0])?(s[0]=X(s[0]),o[t](...s)):n}function cs(e,t,s=[]){ot(),vo();const o=X(e)[t].apply(e,s);return go(),nt(),o}const ir=ro("__proto__,__v_isRef,__isVue"),fn=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(st));function ar(e){st(e)||(e=String(e));const t=X(this);return Ee(t,"has",e),t.hasOwnProperty(e)}class pn{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,l=this._isShallow;if(s==="__v_isReactive")return!n;if(s==="__v_isReadonly")return n;if(s==="__v_isShallow")return l;if(s==="__v_raw")return o===(n?l?bn:_n:l?gn:vn).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(o)?t:void 0;const r=N(t);if(!n){let u;if(r&&(u=lr[s]))return u;if(s==="hasOwnProperty")return ar}const i=Reflect.get(t,s,xe(t)?t:o);return(st(s)?fn.has(s):ir(s))||(n||Ee(t,"get",s),l)?i:xe(i)?r&&uo(s)?i:i.value:fe(i)?n?yn(i):Lt(i):i}}class hn extends pn{constructor(t=!1){super(!1,t)}set(t,s,o,n){let l=t[s];if(!this._isShallow){const u=xt(l);if(!qe(o)&&!xt(o)&&(l=X(l),o=X(o)),!N(t)&&xe(l)&&!xe(o))return u?!1:(l.value=o,!0)}const r=N(t)&&uo(s)?Number(s)e,Ps=e=>Reflect.getPrototypeOf(e);function pr(e,t,s){return function(...o){const n=this.__v_raw,l=X(n),r=zt(l),i=e==="entries"||e===Symbol.iterator&&r,u=e==="keys"&&r,p=n[e](...o),d=s?To:t?Rs:ke;return!t&&Ee(l,"iterate",u?ko:It),{next(){const{value:_,done:C}=p.next();return C?{value:_,done:C}:{value:i?[d(_[0]),d(_[1])]:d(_),done:C}},[Symbol.iterator](){return this}}}}function Ds(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function hr(e,t){const s={get(n){const l=this.__v_raw,r=X(l),i=X(n);e||(kt(n,i)&&Ee(r,"get",n),Ee(r,"get",i));const{has:u}=Ps(r),p=t?To:e?Rs:ke;if(u.call(r,n))return p(l.get(n));if(u.call(r,i))return p(l.get(i));l!==r&&l.get(n)},get size(){const n=this.__v_raw;return!e&&Ee(X(n),"iterate",It),Reflect.get(n,"size",n)},has(n){const l=this.__v_raw,r=X(l),i=X(n);return e||(kt(n,i)&&Ee(r,"has",n),Ee(r,"has",i)),n===i?l.has(n):l.has(n)||l.has(i)},forEach(n,l){const r=this,i=r.__v_raw,u=X(i),p=t?To:e?Rs:ke;return!e&&Ee(u,"iterate",It),i.forEach((d,_)=>n.call(l,p(d),p(_),r))}};return Ve(s,e?{add:Ds("add"),set:Ds("set"),delete:Ds("delete"),clear:Ds("clear")}:{add(n){!t&&!qe(n)&&!xt(n)&&(n=X(n));const l=X(this);return Ps(l).has.call(l,n)||(l.add(n),dt(l,"add",n,n)),this},set(n,l){!t&&!qe(l)&&!xt(l)&&(l=X(l));const r=X(this),{has:i,get:u}=Ps(r);let p=i.call(r,n);p||(n=X(n),p=i.call(r,n));const d=u.call(r,n);return r.set(n,l),p?kt(l,d)&&dt(r,"set",n,l):dt(r,"add",n,l),this},delete(n){const l=X(this),{has:r,get:i}=Ps(l);let u=r.call(l,n);u||(n=X(n),u=r.call(l,n)),i&&i.call(l,n);const p=l.delete(n);return u&&dt(l,"delete",n,void 0),p},clear(){const n=X(this),l=n.size!==0,r=n.clear();return l&&dt(n,"clear",void 0,void 0),r}}),["keys","values","entries",Symbol.iterator].forEach(n=>{s[n]=pr(n,e,t)}),s}function Fs(e,t){const s=hr(e,t);return(o,n,l)=>n==="__v_isReactive"?!e:n==="__v_isReadonly"?e:n==="__v_raw"?o:Reflect.get(se(s,n)&&n in o?s:o,n,l)}const mr={get:Fs(!1,!1)},vr={get:Fs(!1,!0)},gr={get:Fs(!0,!1)},_r={get:Fs(!0,!0)},vn=new WeakMap,gn=new WeakMap,_n=new WeakMap,bn=new WeakMap;function br(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function yr(e){return e.__v_skip||!Object.isExtensible(e)?0:br(Kl(e))}function Lt(e){return xt(e)?e:Os(e,!1,ur,mr,vn)}function wr(e){return Os(e,!1,dr,vr,gn)}function yn(e){return Os(e,!0,cr,gr,_n)}function K1(e){return Os(e,!0,fr,_r,bn)}function Os(e,t,s,o,n){if(!fe(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const l=yr(e);if(l===0)return e;const r=n.get(e);if(r)return r;const i=new Proxy(e,l===2?o:s);return n.set(e,i),i}function Kt(e){return xt(e)?Kt(e.__v_raw):!!(e&&e.__v_isReactive)}function xt(e){return!!(e&&e.__v_isReadonly)}function qe(e){return!!(e&&e.__v_isShallow)}function So(e){return e?!!e.__v_raw:!1}function X(e){const t=e&&e.__v_raw;return t?X(t):e}function kr(e){return!se(e,"__v_skip")&&Object.isExtensible(e)&&fo(e,"__v_skip",!0),e}const ke=e=>fe(e)?Lt(e):e,Rs=e=>fe(e)?yn(e):e;function xe(e){return e?e.__v_isRef===!0:!1}function D(e){return xr(e,!1)}function xr(e,t){return xe(e)?e:new Cr(e,t)}class Cr{constructor(t,s){this.dep=new yo,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:X(t),this._value=s?t:ke(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)||xt(t);t=o?t:X(t),kt(t,s)&&(this._rawValue=t,this._value=o?t:ke(t),this.dep.trigger())}}function Tr(e){return xe(e)?e.value:e}const Sr={get:(e,t,s)=>t==="__v_raw"?e:Tr(Reflect.get(e,t,s)),set:(e,t,s,o)=>{const n=e[t];return xe(n)&&!xe(s)?(n.value=s,!0):Reflect.set(e,t,s,o)}};function wn(e){return Kt(e)?e:new Proxy(e,Sr)}class Er{constructor(t,s,o){this.fn=t,this.setter=s,this._value=void 0,this.dep=new yo(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=as-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 on(this,!0),!0}get value(){const t=this.dep.track();return rn(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Ar(e,t,s=!1){let o,n;return W(e)?o=e:(o=e.get,n=e.set),new Er(o,n,s)}const Bs={},js=new WeakMap;let Ut;function Vr(e,t=!1,s=Ut){if(s){let o=js.get(s);o||js.set(s,o=[]),o.push(e)}}function $r(e,t,s=ae){const{immediate:o,deep:n,once:l,scheduler:r,augmentJob:i,call:u}=s,p=R=>n?R:qe(R)||n===!1||n===0?pt(R,1):pt(R);let d,_,C,b,g=!1,y=!1;if(xe(e)?(_=()=>e.value,g=qe(e)):Kt(e)?(_=()=>p(e),g=!0):N(e)?(y=!0,g=e.some(R=>Kt(R)||qe(R)),_=()=>e.map(R=>{if(xe(R))return R.value;if(Kt(R))return p(R);if(W(R))return u?u(R,2):R()})):W(e)?t?_=u?()=>u(e,2):e:_=()=>{if(C){ot();try{C()}finally{nt()}}const R=Ut;Ut=d;try{return u?u(e,3,[b]):e(b)}finally{Ut=R}}:_=tt,t&&n){const R=_,re=n===!0?1/0:n;_=()=>pt(R(),re)}const U=sr(),B=()=>{d.stop(),U&&U.active&&ao(U.effects,d)};if(l&&t){const R=t;t=(...re)=>{R(...re),B()}}let G=y?new Array(e.length).fill(Bs):Bs;const Q=R=>{if(!(!(d.flags&1)||!d.dirty&&!R))if(t){const re=d.run();if(n||g||(y?re.some((Fe,ce)=>kt(Fe,G[ce])):kt(re,G))){C&&C();const Fe=Ut;Ut=d;try{const ce=[re,G===Bs?void 0:y&&G[0]===Bs?[]:G,b];G=re,u?u(t,3,ce):t(...ce)}finally{Ut=Fe}}}else d.run()};return i&&i(Q),d=new tn(_),d.scheduler=r?()=>r(Q,!1):Q,b=R=>Vr(R,!1,d),C=d.onStop=()=>{const R=js.get(d);if(R){if(u)u(R,4);else for(const re of R)re();js.delete(d)}},t?o?Q(!0):G=d.run():r?r(Q.bind(null,!0),!0):d.run(),B.pause=d.pause.bind(d),B.resume=d.resume.bind(d),B.stop=B,B}function pt(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--,xe(e))pt(e.value,t,s);else if(N(e))for(let o=0;o{pt(o,t,s)});else if(Go(e)){for(const o in e)pt(e[o],t,s);for(const o of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,o)&&pt(e[o],t,s)}return e}/** * @vue/runtime-core v3.5.18 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT **/const ds=[];let Eo=!1;function W1(e,...t){if(Eo)return;Eo=!0,ot();const s=ds.length?ds[ds.length-1].component:null,o=s&&s.appContext.config.warnHandler,n=Mr();if(o)Wt(o,s,11,[e+t.map(l=>{var r,i;return(i=(r=l.toString)==null?void 0:r.call(l))!=null?i:JSON.stringify(l)}).join(""),s&&s.proxy,n.map(({vnode:l})=>`at <${pl(s,l.type)}>`).join(` `),n]);else{const l=[`[Vue warn]: ${e}`,...t];n.length&&l.push(` `,...Ir(n)),console.warn(...l)}nt(),Eo=!1}function Mr(){let e=ds[ds.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 Ir(e){const t=[];return e.forEach((s,o)=>{t.push(...o===0?[]:[` `],...Lr(s))}),t}function Lr({vnode:e,recurseCount:t}){const s=t>0?`... (${t} recursive calls)`:"",o=e.component?e.component.parent==null:!1,n=` at <${pl(e.component,e.type,o)}`,l=">"+s;return e.props?[n,...Ur(e.props),l]:[n+l]}function Ur(e){const t=[],s=Object.keys(e);return s.slice(0,3).forEach(o=>{t.push(...kn(o,e[o]))}),s.length>3&&t.push(" ..."),t}function kn(e,t,s){return ve(t)?(t=JSON.stringify(t),s?t:[`${e}=${t}`]):typeof t=="number"||typeof t=="boolean"||t==null?s?t:[`${e}=${t}`]:xe(t)?(t=kn(e,X(t.value),!0),s?t:[`${e}=Ref<`,t,">"]):W(t)?[`${e}=fn${t.name?`<${t.name}>`:""}`]:(t=X(t),s?t:[`${e}=`,t])}function Wt(e,t,s,o){try{return o?e(...o):e()}catch(n){Ns(n,t,s)}}function lt(e,t,s,o){if(W(e)){const n=Wt(e,t,s,o);return n&&Ko(n)&&n.catch(l=>{Ns(l,t,s)}),n}if(N(e)){const n=[];for(let l=0;l>>1,n=$e[o],l=fs(n);l=fs(s)?$e.push(e):$e.splice(Dr(t),0,e),e.flags|=1,Tn()}}function Tn(){zs||(zs=xn.then(An))}function Fr(e){N(e)?Gt.push(...e):Ct&&e.id===-1?Ct.splice(Qt+1,0,e):e.flags&1||(Gt.push(e),e.flags|=1),Tn()}function Sn(e,t,s=rt+1){for(;s<$e.length;s++){const o=$e[s];if(o&&o.flags&2){if(e&&o.id!==e.uid)continue;$e.splice(s,1),s--,o.flags&4&&(o.flags&=-2),o(),o.flags&4||(o.flags&=-2)}}}function En(e){if(Gt.length){const t=[...new Set(Gt)].sort((s,o)=>fs(s)-fs(o));if(Gt.length=0,Ct){Ct.push(...t);return}for(Ct=t,Qt=0;Qte.id==null?e.flags&2?-1:1/0:e.id;function An(e){try{for(rt=0;rt<$e.length;rt++){const t=$e[rt];t&&!(t.flags&8)&&(t.flags&4&&(t.flags&=-2),Wt(t,t.i,t.i?15:14),t.flags&4||(t.flags&=-2))}}finally{for(;rt<$e.length;rt++){const t=$e[rt];t&&(t.flags&=-2)}rt=-1,$e.length=0,En(),zs=null,($e.length||Gt.length)&&An()}}let He=null,Vn=null;function qs(e){const t=He;return He=e,Vn=e&&e.type.__scopeId||null,t}function Or(e,t=He,s){if(!t||e._n)return e;const o=(...n)=>{o._d&&nl(-1);const l=qs(t);let r;try{r=e(...n)}finally{qs(l),o._d&&nl(1)}return r};return o._n=!0,o._c=!0,o._d=!0,o}function oe(e,t){if(He===null)return e;const s=Xs(He),o=e.dirs||(e.dirs=[]);for(let n=0;ne.__isTeleport;function Vo(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Vo(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 $n(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function ps(e,t,s,o,n=!1){if(N(e)){e.forEach((g,y)=>ps(g,t&&(N(t)?t[y]:t),s,o,n));return}if(hs(o)&&!n){o.shapeFlag&512&&o.type.__asyncResolved&&o.component.subTree.component&&ps(e,t,s,o.component.subTree);return}const l=o.shapeFlag&4?Xs(o.component):o.el,r=n?null:l,{i,r:u}=e,p=t&&t.r,d=i.refs===ae?i.refs={}:i.refs,_=i.setupState,C=X(_),b=_===ae?()=>!1:g=>se(C,g);if(p!=null&&p!==u&&(ve(p)?(d[p]=null,b(p)&&(_[p]=null)):xe(p)&&(p.value=null)),W(u))Wt(u,i,12,[r,d]);else{const g=ve(u),y=xe(u);if(g||y){const U=()=>{if(e.f){const B=g?b(u)?_[u]:d[u]:u.value;n?N(B)&&ao(B,l):N(B)?B.includes(l)||B.push(l):g?(d[u]=[l],b(u)&&(_[u]=d[u])):(u.value=[l],e.k&&(d[e.k]=u.value))}else g?(d[u]=r,b(u)&&(_[u]=r)):y&&(u.value=r,e.k&&(d[e.k]=r))};r?(U.id=-1,Re(U,s)):U()}}}Is().requestIdleCallback,Is().cancelIdleCallback;const hs=e=>!!e.type.__asyncLoader,Mn=e=>e.type.__isKeepAlive;function jr(e,t){In(e,"a",t)}function Nr(e,t){In(e,"da",t)}function In(e,t,s=Ie){const o=e.__wdc||(e.__wdc=()=>{let n=s;for(;n;){if(n.isDeactivated)return;n=n.parent}return e()});if(Hs(t,o,s),s){let n=s.parent;for(;n&&n.parent;)Mn(n.parent.vnode)&&zr(o,t,s,n),n=n.parent}}function zr(e,t,s,o){const n=Hs(t,e,o,!0);ms(()=>{ao(o[t],n)},s)}function Hs(e,t,s=Ie,o=!1){if(s){const n=s[e]||(s[e]=[]),l=t.__weh||(t.__weh=(...r)=>{ot();const i=ks(s),u=lt(t,s,e,r);return i(),nt(),u});return o?n.unshift(l):n.push(l),l}}const ht=e=>(t,s=Ie)=>{(!xs||e==="sp")&&Hs(e,(...o)=>t(...o),s)},qr=ht("bm"),Yt=ht("m"),Hr=ht("bu"),Kr=ht("u"),Wr=ht("bum"),ms=ht("um"),Gr=ht("sp"),Qr=ht("rtg"),Yr=ht("rtc");function Zr(e,t=Ie){Hs("ec",e,t)}const Jr=Symbol.for("v-ndc");function $o(e,t,s,o){let n;const l=s,r=N(e);if(r||ve(e)){const i=r&&Kt(e);let u=!1,p=!1;i&&(u=!qe(e),p=xt(e),e=Us(e)),n=new Array(e.length);for(let d=0,_=e.length;d<_;d++)n[d]=t(u?p?Rs(ke(e[d])):ke(e[d]):e[d],d,void 0,l)}else if(typeof e=="number"){n=new Array(e);for(let i=0;it(i,u,void 0,l));else{const i=Object.keys(e);n=new Array(i.length);for(let u=0,p=i.length;ue?cl(e)?Xs(e):Mo(e.parent):null,vs=Ve(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=>Mo(e.parent),$root:e=>Mo(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Dn(e),$forceUpdate:e=>e.f||(e.f=()=>{Ao(e.update)}),$nextTick:e=>e.n||(e.n=Cn.bind(e.proxy)),$watch:e=>yi.bind(e)}),Io=(e,t)=>e!==ae&&!e.__isScriptSetup&&se(e,t),Xr={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:o,data:n,props:l,accessCache:r,type:i,appContext:u}=e;let p;if(t[0]!=="$"){const b=r[t];if(b!==void 0)switch(b){case 1:return o[t];case 2:return n[t];case 4:return s[t];case 3:return l[t]}else{if(Io(o,t))return r[t]=1,o[t];if(n!==ae&&se(n,t))return r[t]=2,n[t];if((p=e.propsOptions[0])&&se(p,t))return r[t]=3,l[t];if(s!==ae&&se(s,t))return r[t]=4,s[t];Lo&&(r[t]=0)}}const d=vs[t];let _,C;if(d)return t==="$attrs"&&Ee(e.attrs,"get",""),d(e);if((_=i.__cssModules)&&(_=_[t]))return _;if(s!==ae&&se(s,t))return r[t]=4,s[t];if(C=u.config.globalProperties,se(C,t))return C[t]},set({_:e},t,s){const{data:o,setupState:n,ctx:l}=e;return Io(n,t)?(n[t]=s,!0):o!==ae&&se(o,t)?(o[t]=s,!0):se(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(l[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:o,appContext:n,propsOptions:l}},r){let i;return!!s[r]||e!==ae&&se(e,r)||Io(t,r)||(i=l[0])&&se(i,r)||se(o,r)||se(vs,r)||se(n.config.globalProperties,r)},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:se(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function Ln(e){return N(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let Lo=!0;function ei(e){const t=Dn(e),s=e.proxy,o=e.ctx;Lo=!1,t.beforeCreate&&Un(t.beforeCreate,e,"bc");const{data:n,computed:l,methods:r,watch:i,provide:u,inject:p,created:d,beforeMount:_,mounted:C,beforeUpdate:b,updated:g,activated:y,deactivated:U,beforeDestroy:B,beforeUnmount:G,destroyed:Q,unmounted:R,render:re,renderTracked:Fe,renderTriggered:ce,errorCaptured:he,serverPrefetch:ze,expose:Oe,inheritAttrs:Le,components:Qe,directives:_t,filters:z}=t;if(p&&ti(p,o,null),r)for(const ee in r){const te=r[ee];W(te)&&(o[ee]=te.bind(s))}if(n){const ee=n.call(s,s);fe(ee)&&(e.data=Lt(ee))}if(Lo=!0,l)for(const ee in l){const te=l[ee],ut=W(te)?te.bind(s,s):W(te.get)?te.get.bind(s,s):tt,At=!W(te)&&W(te.set)?te.set.bind(s):tt,Ye=Ae({get:ut,set:At});Object.defineProperty(o,ee,{enumerable:!0,configurable:!0,get:()=>Ye.value,set:Ue=>Ye.value=Ue})}if(i)for(const ee in i)Pn(i[ee],o,s,ee);if(u){const ee=W(u)?u.call(s):u;Reflect.ownKeys(ee).forEach(te=>{ii(te,ee[te])})}d&&Un(d,e,"c");function P(ee,te){N(te)?te.forEach(ut=>ee(ut.bind(s))):te&&ee(te.bind(s))}if(P(qr,_),P(Yt,C),P(Hr,b),P(Kr,g),P(jr,y),P(Nr,U),P(Zr,he),P(Yr,Fe),P(Qr,ce),P(Wr,G),P(ms,R),P(Gr,ze),N(Oe))if(Oe.length){const ee=e.exposed||(e.exposed={});Oe.forEach(te=>{Object.defineProperty(ee,te,{get:()=>s[te],set:ut=>s[te]=ut,enumerable:!0})})}else e.exposed||(e.exposed={});re&&e.render===tt&&(e.render=re),Le!=null&&(e.inheritAttrs=Le),Qe&&(e.components=Qe),_t&&(e.directives=_t),ze&&$n(e)}function ti(e,t,s=tt){N(e)&&(e=Uo(e));for(const o in e){const n=e[o];let l;fe(n)?"default"in n?l=Ws(n.from||o,n.default,!0):l=Ws(n.from||o):l=Ws(n),xe(l)?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>l.value,set:r=>l.value=r}):t[o]=l}}function Un(e,t,s){lt(N(e)?e.map(o=>o.bind(t.proxy)):e.bind(t.proxy),t,s)}function Pn(e,t,s,o){let n=o.includes(".")?Xn(s,o):()=>s[o];if(ve(e)){const l=t[e];W(l)&&Ke(n,l)}else if(W(e))Ke(n,e.bind(s));else if(fe(e))if(N(e))e.forEach(l=>Pn(l,t,s,o));else{const l=W(e.handler)?e.handler.bind(s):t[e.handler];W(l)&&Ke(n,l,e)}}function Dn(e){const t=e.type,{mixins:s,extends:o}=t,{mixins:n,optionsCache:l,config:{optionMergeStrategies:r}}=e.appContext,i=l.get(t);let u;return i?u=i:!n.length&&!s&&!o?u=t:(u={},n.length&&n.forEach(p=>Ks(u,p,r,!0)),Ks(u,t,r)),fe(t)&&l.set(t,u),u}function Ks(e,t,s,o=!1){const{mixins:n,extends:l}=t;l&&Ks(e,l,s,!0),n&&n.forEach(r=>Ks(e,r,s,!0));for(const r in t)if(!(o&&r==="expose")){const i=si[r]||s&&s[r];e[r]=i?i(e[r],t[r]):t[r]}return e}const si={data:Fn,props:On,emits:On,methods:gs,computed:gs,beforeCreate:Me,created:Me,beforeMount:Me,mounted:Me,beforeUpdate:Me,updated:Me,beforeDestroy:Me,beforeUnmount:Me,destroyed:Me,unmounted:Me,activated:Me,deactivated:Me,errorCaptured:Me,serverPrefetch:Me,components:gs,directives:gs,watch:ni,provide:Fn,inject:oi};function Fn(e,t){return t?e?function(){return Ve(W(e)?e.call(this,this):e,W(t)?t.call(this,this):t)}:t:e}function oi(e,t){return gs(Uo(e),Uo(t))}function Uo(e){if(N(e)){const t={};for(let s=0;s1)return s&&W(t)?t.call(o&&o.proxy):t}}const Bn={},jn=()=>Object.create(Bn),Nn=e=>Object.getPrototypeOf(e)===Bn;function ai(e,t,s,o=!1){const n={},l=jn();e.propsDefaults=Object.create(null),zn(e,t,n,l);for(const r in e.propsOptions[0])r in n||(n[r]=void 0);s?e.props=o?n:wr(n):e.type.props?e.props=n:e.props=l,e.attrs=l}function ui(e,t,s,o){const{props:n,attrs:l,vnode:{patchFlag:r}}=e,i=X(n),[u]=e.propsOptions;let p=!1;if((o||r>0)&&!(r&16)){if(r&8){const d=e.vnode.dynamicProps;for(let _=0;_{u=!0;const[C,b]=qn(_,t,!0);Ve(r,C),b&&i.push(...b)};!s&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!l&&!u)return fe(e)&&o.set(e,Nt),Nt;if(N(l))for(let d=0;de==="_"||e==="__"||e==="_ctx"||e==="$stable",Fo=e=>N(e)?e.map(it):[it(e)],di=(e,t,s)=>{if(t._n)return t;const o=Or((...n)=>Fo(t(...n)),s);return o._c=!1,o},Kn=(e,t,s)=>{const o=e._ctx;for(const n in e){if(Do(n))continue;const l=e[n];if(W(l))t[n]=di(n,l,o);else if(l!=null){const r=Fo(l);t[n]=()=>r}}},Wn=(e,t)=>{const s=Fo(t);e.slots.default=()=>s},Gn=(e,t,s)=>{for(const o in t)(s||!Do(o))&&(e[o]=t[o])},fi=(e,t,s)=>{const o=e.slots=jn();if(e.vnode.shapeFlag&32){const n=t.__;n&&fo(o,"__",n,!0);const l=t._;l?(Gn(o,t,s),s&&fo(o,"_",l,!0)):Kn(t,o)}else t&&Wn(e,t)},pi=(e,t,s)=>{const{vnode:o,slots:n}=e;let l=!0,r=ae;if(o.shapeFlag&32){const i=t._;i?s&&i===1?l=!1:Gn(n,t,s):(l=!t.$stable,Kn(t,n)),r=t}else t&&(Wn(e,t),r={default:1});if(l)for(const i in n)!Do(i)&&r[i]==null&&delete n[i]},Re=Ei;function hi(e){return mi(e)}function mi(e,t){const s=Is();s.__VUE__=!0;const{insert:o,remove:n,patchProp:l,createElement:r,createText:i,createComment:u,setText:p,setElementText:d,parentNode:_,nextSibling:C,setScopeId:b=tt,insertStaticContent:g}=e,y=(f,h,w,S=null,x=null,T=null,I=void 0,M=null,V=!!h.dynamicChildren)=>{if(f===h)return;f&&!ws(f,h)&&(S=ss(f),Ue(f,x,T,!0),f=null),h.patchFlag===-2&&(V=!1,h.dynamicChildren=null);const{type:E,ref:j,shapeFlag:L}=h;switch(E){case Qs:U(f,h,w,S);break;case Tt:B(f,h,w,S);break;case Ys:f==null&&G(h,w,S,I);break;case ge:Qe(f,h,w,S,x,T,I,M,V);break;default:L&1?re(f,h,w,S,x,T,I,M,V):L&6?_t(f,h,w,S,x,T,I,M,V):(L&64||L&128)&&E.process(f,h,w,S,x,T,I,M,V,$t)}j!=null&&x?ps(j,f&&f.ref,T,h||f,!h):j==null&&f&&f.ref!=null&&ps(f.ref,null,T,f,!0)},U=(f,h,w,S)=>{if(f==null)o(h.el=i(h.children),w,S);else{const x=h.el=f.el;h.children!==f.children&&p(x,h.children)}},B=(f,h,w,S)=>{f==null?o(h.el=u(h.children||""),w,S):h.el=f.el},G=(f,h,w,S)=>{[f.el,f.anchor]=g(f.children,h,w,S,f.el,f.anchor)},Q=({el:f,anchor:h},w,S)=>{let x;for(;f&&f!==h;)x=C(f),o(f,w,S),f=x;o(h,w,S)},R=({el:f,anchor:h})=>{let w;for(;f&&f!==h;)w=C(f),n(f),f=w;n(h)},re=(f,h,w,S,x,T,I,M,V)=>{h.type==="svg"?I="svg":h.type==="math"&&(I="mathml"),f==null?Fe(h,w,S,x,T,I,M,V):ze(f,h,x,T,I,M,V)},Fe=(f,h,w,S,x,T,I,M)=>{let V,E;const{props:j,shapeFlag:L,transition:O,dirs:H}=f;if(V=f.el=r(f.type,T,j&&j.is,j),L&8?d(V,f.children):L&16&&he(f.children,V,null,S,x,Oo(f,T),I,M),H&&Pt(f,null,S,"created"),ce(V,f,f.scopeId,I,S),j){for(const ie in j)ie!=="value"&&!ls(ie)&&l(V,ie,null,j[ie],T,S);"value"in j&&l(V,"value",null,j.value,T),(E=j.onVnodeBeforeMount)&&at(E,S,f)}H&&Pt(f,null,S,"beforeMount");const Z=vi(x,O);Z&&O.beforeEnter(V),o(V,h,w),((E=j&&j.onVnodeMounted)||Z||H)&&Re(()=>{E&&at(E,S,f),Z&&O.enter(V),H&&Pt(f,null,S,"mounted")},x)},ce=(f,h,w,S,x)=>{if(w&&b(f,w),S)for(let T=0;T{for(let E=V;E{const M=h.el=f.el;let{patchFlag:V,dynamicChildren:E,dirs:j}=h;V|=f.patchFlag&16;const L=f.props||ae,O=h.props||ae;let H;if(w&&Dt(w,!1),(H=O.onVnodeBeforeUpdate)&&at(H,w,h,f),j&&Pt(h,f,w,"beforeUpdate"),w&&Dt(w,!0),(L.innerHTML&&O.innerHTML==null||L.textContent&&O.textContent==null)&&d(M,""),E?Oe(f.dynamicChildren,E,M,w,S,Oo(h,x),T):I||te(f,h,M,null,w,S,Oo(h,x),T,!1),V>0){if(V&16)Le(M,L,O,w,x);else if(V&2&&L.class!==O.class&&l(M,"class",null,O.class,x),V&4&&l(M,"style",L.style,O.style,x),V&8){const Z=h.dynamicProps;for(let ie=0;ie{H&&at(H,w,h,f),j&&Pt(h,f,w,"updated")},S)},Oe=(f,h,w,S,x,T,I)=>{for(let M=0;M{if(h!==w){if(h!==ae)for(const T in h)!ls(T)&&!(T in w)&&l(f,T,h[T],null,x,S);for(const T in w){if(ls(T))continue;const I=w[T],M=h[T];I!==M&&T!=="value"&&l(f,T,M,I,x,S)}"value"in w&&l(f,"value",h.value,w.value,x)}},Qe=(f,h,w,S,x,T,I,M,V)=>{const E=h.el=f?f.el:i(""),j=h.anchor=f?f.anchor:i("");let{patchFlag:L,dynamicChildren:O,slotScopeIds:H}=h;H&&(M=M?M.concat(H):H),f==null?(o(E,w,S),o(j,w,S),he(h.children||[],w,j,x,T,I,M,V)):L>0&&L&64&&O&&f.dynamicChildren?(Oe(f.dynamicChildren,O,w,x,T,I,M),(h.key!=null||x&&h===x.subTree)&&Qn(f,h,!0)):te(f,h,w,j,x,T,I,M,V)},_t=(f,h,w,S,x,T,I,M,V)=>{h.slotScopeIds=M,f==null?h.shapeFlag&512?x.ctx.activate(h,w,S,I,V):z(h,w,S,x,T,I,V):k(f,h,V)},z=(f,h,w,S,x,T,I)=>{const M=f.component=Ui(f,S,x);if(Mn(f)&&(M.ctx.renderer=$t),Di(M,!1,I),M.asyncDep){if(x&&x.registerDep(M,P,I),!f.el){const V=M.subTree=Y(Tt);B(null,V,h,w),f.placeholder=V.el}}else P(M,f,h,w,x,T,I)},k=(f,h,w)=>{const S=h.component=f.component;if(Ti(f,h,w))if(S.asyncDep&&!S.asyncResolved){ee(S,h,w);return}else S.next=h,S.update();else h.el=f.el,S.vnode=h},P=(f,h,w,S,x,T,I)=>{const M=()=>{if(f.isMounted){let{next:L,bu:O,u:H,parent:Z,vnode:ie}=f;{const Je=Yn(f);if(Je){L&&(L.el=ie.el,ee(f,L,I)),Je.asyncDep.then(()=>{f.isUnmounted||M()});return}}let J=L,_e;Dt(f,!1),L?(L.el=ie.el,ee(f,L,I)):L=ie,O&&Ms(O),(_e=L.props&&L.props.onVnodeBeforeUpdate)&&at(_e,Z,L,ie),Dt(f,!0);const Se=tl(f),Ze=f.subTree;f.subTree=Se,y(Ze,Se,_(Ze.el),ss(Ze),f,x,T),L.el=Se.el,J===null&&Si(f,Se.el),H&&Re(H,x),(_e=L.props&&L.props.onVnodeUpdated)&&Re(()=>at(_e,Z,L,ie),x)}else{let L;const{el:O,props:H}=h,{bm:Z,m:ie,parent:J,root:_e,type:Se}=f,Ze=hs(h);Dt(f,!1),Z&&Ms(Z),!Ze&&(L=H&&H.onVnodeBeforeMount)&&at(L,J,h),Dt(f,!0);{_e.ce&&_e.ce._def.shadowRoot!==!1&&_e.ce._injectChildStyle(Se);const Je=f.subTree=tl(f);y(null,Je,w,S,f,x,T),h.el=Je.el}if(ie&&Re(ie,x),!Ze&&(L=H&&H.onVnodeMounted)){const Je=h;Re(()=>at(L,J,Je),x)}(h.shapeFlag&256||J&&hs(J.vnode)&&J.vnode.shapeFlag&256)&&f.a&&Re(f.a,x),f.isMounted=!0,h=w=S=null}};f.scope.on();const V=f.effect=new tn(M);f.scope.off();const E=f.update=V.run.bind(V),j=f.job=V.runIfDirty.bind(V);j.i=f,j.id=f.uid,V.scheduler=()=>Ao(j),Dt(f,!0),E()},ee=(f,h,w)=>{h.component=f;const S=f.vnode.props;f.vnode=h,f.next=null,ui(f,h.props,S,w),pi(f,h.children,w),ot(),Sn(f),nt()},te=(f,h,w,S,x,T,I,M,V=!1)=>{const E=f&&f.children,j=f?f.shapeFlag:0,L=h.children,{patchFlag:O,shapeFlag:H}=h;if(O>0){if(O&128){At(E,L,w,S,x,T,I,M,V);return}else if(O&256){ut(E,L,w,S,x,T,I,M,V);return}}H&8?(j&16&&ct(E,x,T),L!==E&&d(w,L)):j&16?H&16?At(E,L,w,S,x,T,I,M,V):ct(E,x,T,!0):(j&8&&d(w,""),H&16&&he(L,w,S,x,T,I,M,V))},ut=(f,h,w,S,x,T,I,M,V)=>{f=f||Nt,h=h||Nt;const E=f.length,j=h.length,L=Math.min(E,j);let O;for(O=0;Oj?ct(f,x,T,!0,!1,L):he(h,w,S,x,T,I,M,V,L)},At=(f,h,w,S,x,T,I,M,V)=>{let E=0;const j=h.length;let L=f.length-1,O=j-1;for(;E<=L&&E<=O;){const H=f[E],Z=h[E]=V?St(h[E]):it(h[E]);if(ws(H,Z))y(H,Z,w,null,x,T,I,M,V);else break;E++}for(;E<=L&&E<=O;){const H=f[L],Z=h[O]=V?St(h[O]):it(h[O]);if(ws(H,Z))y(H,Z,w,null,x,T,I,M,V);else break;L--,O--}if(E>L){if(E<=O){const H=O+1,Z=HO)for(;E<=L;)Ue(f[E],x,T,!0),E++;else{const H=E,Z=E,ie=new Map;for(E=Z;E<=O;E++){const v=h[E]=V?St(h[E]):it(h[E]);v.key!=null&&ie.set(v.key,E)}let J,_e=0;const Se=O-Z+1;let Ze=!1,Je=0;const jt=new Array(Se);for(E=0;E=Se){Ue(v,x,T,!0);continue}let c;if(v.key!=null)c=ie.get(v.key);else for(J=Z;J<=O;J++)if(jt[J-Z]===0&&ws(v,h[J])){c=J;break}c===void 0?Ue(v,x,T,!0):(jt[c-Z]=E+1,c>=Je?Je=c:Ze=!0,y(v,h[c],w,null,x,T,I,M,V),_e++)}const os=Ze?gi(jt):Nt;for(J=os.length-1,E=Se-1;E>=0;E--){const v=Z+E,c=h[v],m=h[v+1],K=v+1{const{el:T,type:I,transition:M,children:V,shapeFlag:E}=f;if(E&6){Ye(f.component.subTree,h,w,S);return}if(E&128){f.suspense.move(h,w,S);return}if(E&64){I.move(f,h,w,$t);return}if(I===ge){o(T,h,w);for(let L=0;LM.enter(T),x);else{const{leave:L,delayLeave:O,afterLeave:H}=M,Z=()=>{f.ctx.isUnmounted?n(T):o(T,h,w)},ie=()=>{L(T,()=>{Z(),H&&H()})};O?O(T,Z,ie):ie()}else o(T,h,w)},Ue=(f,h,w,S=!1,x=!1)=>{const{type:T,props:I,ref:M,children:V,dynamicChildren:E,shapeFlag:j,patchFlag:L,dirs:O,cacheIndex:H}=f;if(L===-2&&(x=!1),M!=null&&(ot(),ps(M,null,w,f,!0),nt()),H!=null&&(h.renderCache[H]=void 0),j&256){h.ctx.deactivate(f);return}const Z=j&1&&O,ie=!hs(f);let J;if(ie&&(J=I&&I.onVnodeBeforeUnmount)&&at(J,h,f),j&6)Te(f.component,w,S);else{if(j&128){f.suspense.unmount(w,S);return}Z&&Pt(f,null,h,"beforeUnmount"),j&64?f.type.remove(f,h,w,$t,S):E&&!E.hasOnce&&(T!==ge||L>0&&L&64)?ct(E,h,w,!1,!0):(T===ge&&L&384||!x&&j&16)&&ct(V,h,w),S&&Vt(f)}(ie&&(J=I&&I.onVnodeUnmounted)||Z)&&Re(()=>{J&&at(J,h,f),Z&&Pt(f,null,h,"unmounted")},w)},Vt=f=>{const{type:h,el:w,anchor:S,transition:x}=f;if(h===ge){ts(w,S);return}if(h===Ys){R(f);return}const T=()=>{n(w),x&&!x.persisted&&x.afterLeave&&x.afterLeave()};if(f.shapeFlag&1&&x&&!x.persisted){const{leave:I,delayLeave:M}=x,V=()=>I(w,T);M?M(f.el,T,V):V()}else T()},ts=(f,h)=>{let w;for(;f!==h;)w=C(f),n(f),f=w;n(h)},Te=(f,h,w)=>{const{bum:S,scope:x,job:T,subTree:I,um:M,m:V,a:E,parent:j,slots:{__:L}}=f;Zn(V),Zn(E),S&&Ms(S),j&&N(L)&&L.forEach(O=>{j.renderCache[O]=void 0}),x.stop(),T&&(T.flags|=8,Ue(I,f,h,w)),M&&Re(M,h),Re(()=>{f.isUnmounted=!0},h),h&&h.pendingBranch&&!h.isUnmounted&&f.asyncDep&&!f.asyncResolved&&f.suspenseId===h.pendingId&&(h.deps--,h.deps===0&&h.resolve())},ct=(f,h,w,S=!1,x=!1,T=0)=>{for(let I=T;I{if(f.shapeFlag&6)return ss(f.component.subTree);if(f.shapeFlag&128)return f.suspense.next();const h=C(f.anchor||f.el),w=h&&h[Rr];return w?C(w):h};let Es=!1;const lo=(f,h,w)=>{f==null?h._vnode&&Ue(h._vnode,null,null,!0):y(h._vnode||null,f,h,null,null,null,w),h._vnode=f,Es||(Es=!0,Sn(),En(),Es=!1)},$t={p:y,um:Ue,m:Ye,r:Vt,mt:z,mc:he,pc:te,pbc:Oe,n:ss,o:e};return{render:lo,hydrate:void 0,createApp:ri(lo)}}function Oo({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 Dt({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function vi(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Qn(e,t,s=!1){const o=e.children,n=t.children;if(N(o)&&N(n))for(let l=0;l>1,e[s[i]]0&&(t[o]=s[l-1]),s[l]=o)}}for(l=s.length,r=s[l-1];l-- >0;)s[l]=r,r=t[r];return s}function Yn(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Yn(t)}function Zn(e){if(e)for(let t=0;tWs(_i);function Ke(e,t,s){return Jn(e,t,s)}function Jn(e,t,s=ae){const{immediate:o,deep:n,flush:l,once:r}=s,i=Ve({},s),u=t&&o||!t&&l!=="post";let p;if(xs){if(l==="sync"){const b=bi();p=b.__watcherHandles||(b.__watcherHandles=[])}else if(!u){const b=()=>{};return b.stop=tt,b.resume=tt,b.pause=tt,b}}const d=Ie;i.call=(b,g,y)=>lt(b,d,g,y);let _=!1;l==="post"?i.scheduler=b=>{Re(b,d&&d.suspense)}:l!=="sync"&&(_=!0,i.scheduler=(b,g)=>{g?b():Ao(b)}),i.augmentJob=b=>{t&&(b.flags|=4),_&&(b.flags|=2,d&&(b.id=d.uid,b.i=d))};const C=$r(e,t,i);return xs&&(p?p.push(C):u&&C()),C}function yi(e,t,s){const o=this.proxy,n=ve(e)?e.includes(".")?Xn(o,e):()=>o[e]:e.bind(o,o);let l;W(t)?l=t:(l=t.handler,s=t);const r=ks(this),i=Jn(n,l.bind(o),s);return r(),i}function Xn(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[`${wt(t)}Modifiers`]||e[`${Mt(t)}Modifiers`];function ki(e,t,...s){if(e.isUnmounted)return;const o=e.vnode.props||ae;let n=s;const l=t.startsWith("update:"),r=l&&wi(o,t.slice(7));r&&(r.trim&&(n=s.map(d=>ve(d)?d.trim():d)),r.number&&(n=s.map(po)));let i,u=o[i=co(t)]||o[i=co(wt(t))];!u&&l&&(u=o[i=co(Mt(t))]),u&<(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,lt(p,e,6,n)}}function el(e,t,s=!1){const o=t.emitsCache,n=o.get(e);if(n!==void 0)return n;const l=e.emits;let r={},i=!1;if(!W(e)){const u=p=>{const d=el(p,t,!0);d&&(i=!0,Ve(r,d))};!s&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}return!l&&!i?(fe(e)&&o.set(e,null),null):(N(l)?l.forEach(u=>r[u]=null):Ve(r,l),fe(e)&&o.set(e,r),r)}function Gs(e,t){return!e||!As(t)?!1:(t=t.slice(2).replace(/Once$/,""),se(e,t[0].toLowerCase()+t.slice(1))||se(e,Mt(t))||se(e,t))}function G1(){}function tl(e){const{type:t,vnode:s,proxy:o,withProxy:n,propsOptions:[l],slots:r,attrs:i,emit:u,render:p,renderCache:d,props:_,data:C,setupState:b,ctx:g,inheritAttrs:y}=e,U=qs(e);let B,G;try{if(s.shapeFlag&4){const R=n||o,re=R;B=it(p.call(re,R,d,_,b,C,g)),G=i}else{const R=t;B=it(R.length>1?R(_,{attrs:i,slots:r,emit:u}):R(_,null)),G=t.props?i:xi(i)}}catch(R){_s.length=0,Ns(R,e,1),B=Y(Tt)}let Q=B;if(G&&y!==!1){const R=Object.keys(G),{shapeFlag:re}=Q;R.length&&re&7&&(l&&R.some(io)&&(G=Ci(G,l)),Q=Jt(Q,G,!1,!0))}return s.dirs&&(Q=Jt(Q,null,!1,!0),Q.dirs=Q.dirs?Q.dirs.concat(s.dirs):s.dirs),s.transition&&Vo(Q,s.transition),B=Q,qs(U),B}const xi=e=>{let t;for(const s in e)(s==="class"||s==="style"||As(s))&&((t||(t={}))[s]=e[s]);return t},Ci=(e,t)=>{const s={};for(const o in e)(!io(o)||!(o.slice(9)in t))&&(s[o]=e[o]);return s};function Ti(e,t,s){const{props:o,children:n,component:l}=e,{props:r,children:i,patchFlag:u}=t,p=l.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&u>=0){if(u&1024)return!0;if(u&16)return o?sl(o,r,p):!!r;if(u&8){const d=t.dynamicProps;for(let _=0;_e.__isSuspense;function Ei(e,t){t&&t.pendingBranch?N(e)?t.effects.push(...e):t.effects.push(e):Fr(e)}const ge=Symbol.for("v-fgt"),Qs=Symbol.for("v-txt"),Tt=Symbol.for("v-cmt"),Ys=Symbol.for("v-stc"),_s=[];let Be=null;function A(e=!1){_s.push(Be=e?null:[])}function Ai(){_s.pop(),Be=_s[_s.length-1]||null}let bs=1;function nl(e,t=!1){bs+=e,e<0&&Be&&t&&(Be.hasOnce=!0)}function ll(e){return e.dynamicChildren=bs>0?Be||Nt:null,Ai(),bs>0&&Be&&Be.push(e),e}function $(e,t,s,o,n,l){return ll(a(e,t,s,o,n,l,!0))}function ys(e,t,s,o,n){return ll(Y(e,t,s,o,n,!0))}function rl(e){return e?e.__v_isVNode===!0:!1}function ws(e,t){return e.type===t.type&&e.key===t.key}const il=({key:e})=>e??null,Zs=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?ve(e)||xe(e)||W(e)?{i:He,r:e,k:t,f:!!s}:e:null);function a(e,t=null,s=null,o=0,n=null,l=e===ge?0:1,r=!1,i=!1){const u={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&il(t),ref:t&&Zs(t),scopeId:Vn,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:l,patchFlag:o,dynamicProps:n,dynamicChildren:null,appContext:null,ctx:He};return i?(Ro(u,s),l&128&&e.normalize(u)):s&&(u.shapeFlag|=ve(s)?8:16),bs>0&&!r&&Be&&(u.patchFlag>0||l&6)&&u.patchFlag!==32&&Be.push(u),u}const Y=Vi;function Vi(e,t=null,s=null,o=0,n=null,l=!1){if((!e||e===Jr)&&(e=Tt),rl(e)){const i=Jt(e,t,!0);return s&&Ro(i,s),bs>0&&!l&&Be&&(i.shapeFlag&6?Be[Be.indexOf(e)]=i:Be.push(i)),i.patchFlag=-2,i}if(zi(e)&&(e=e.__vccOpts),t){t=$i(t);let{class:i,style:u}=t;i&&!ve(i)&&(t.class=be(i)),fe(u)&&(So(u)&&!N(u)&&(u=Ve({},u)),t.style=qt(u))}const r=ve(e)?1:ol(e)?128:Br(e)?64:fe(e)?4:W(e)?2:0;return a(e,t,s,o,n,r,l,!0)}function $i(e){return e?So(e)||Nn(e)?Ve({},e):e:null}function Jt(e,t,s=!1,o=!1){const{props:n,ref:l,patchFlag:r,children:i,transition:u}=e,p=t?Mi(n||{},t):n,d={__v_isVNode:!0,__v_skip:!0,type:e.type,props:p,key:p&&il(p),ref:t&&t.ref?s&&l?N(l)?l.concat(Zs(t)):[l,Zs(t)]:Zs(t):l,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!==ge?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:u,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Jt(e.ssContent),ssFallback:e.ssFallback&&Jt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return u&&o&&Vo(d,u.clone(d)),d}function Xt(e=" ",t=0){return Y(Qs,null,e,t)}function al(e,t){const s=Y(Ys,null,e);return s.staticCount=t,s}function F(e="",t=!1){return t?(A(),ys(Tt,null,e)):Y(Tt,null,e)}function it(e){return e==null||typeof e=="boolean"?Y(Tt):N(e)?Y(ge,null,e.slice()):rl(e)?St(e):Y(Qs,null,String(e))}function St(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Jt(e)}function Ro(e,t){let s=0;const{shapeFlag:o}=e;if(t==null)t=null;else if(N(t))s=16;else if(typeof t=="object")if(o&65){const n=t.default;n&&(n._c&&(n._d=!1),Ro(e,n()),n._c&&(n._d=!0));return}else{s=32;const n=t._;!n&&!Nn(t)?t._ctx=He:n===3&&He&&(He.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else W(t)?(t={default:t,_ctx:He},s=32):(t=String(t),o&64?(s=16,t=[Xt(t)]):s=8);e.children=t,e.shapeFlag|=s}function Mi(...e){const t={};for(let s=0;sIe||He;let Js,Bo;{const e=Is(),t=(s,o)=>{let n;return(n=e[s])||(n=e[s]=[]),n.push(o),l=>{n.length>1?n.forEach(r=>r(l)):n[0](l)}};Js=t("__VUE_INSTANCE_SETTERS__",s=>Ie=s),Bo=t("__VUE_SSR_SETTERS__",s=>xs=s)}const ks=e=>{const t=Ie;return Js(e),e.scope.on(),()=>{e.scope.off(),Js(t)}},ul=()=>{Ie&&Ie.scope.off(),Js(null)};function cl(e){return e.vnode.shapeFlag&4}let xs=!1;function Di(e,t=!1,s=!1){t&&Bo(t);const{props:o,children:n}=e.vnode,l=cl(e);ai(e,o,l,t),fi(e,n,s||t);const r=l?Fi(e,t):void 0;return t&&Bo(!1),r}function Fi(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Xr);const{setup:o}=s;if(o){ot();const n=e.setupContext=o.length>1?Ri(e):null,l=ks(e),r=Wt(o,e,0,[e.props,n]),i=Ko(r);if(nt(),l(),(i||e.sp)&&!hs(e)&&$n(e),i){if(r.then(ul,ul),t)return r.then(u=>{dl(e,u)}).catch(u=>{Ns(u,e,0)});e.asyncDep=r}else dl(e,r)}else fl(e)}function dl(e,t,s){W(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:fe(t)&&(e.setupState=wn(t)),fl(e)}function fl(e,t,s){const o=e.type;e.render||(e.render=o.render||tt);{const n=ks(e);ot();try{ei(e)}finally{nt(),n()}}}const Oi={get(e,t){return Ee(e,"get",""),e[t]}};function Ri(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,Oi),slots:e.slots,emit:e.emit,expose:t}}function Xs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(wn(kr(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in vs)return vs[s](e)},has(t,s){return s in t||s in vs}})):e.proxy}const Bi=/(?:^|[-_])(\w)/g,ji=e=>e.replace(Bi,t=>t.toUpperCase()).replace(/[-_]/g,"");function Ni(e,t=!0){return W(e)?e.displayName||e.name:e.name||t&&e.__name}function pl(e,t,s=!1){let o=Ni(t);if(!o&&t.__file){const n=t.__file.match(/([^/\\]+)\.\w+$/);n&&(o=n[1])}if(!o&&e&&e.parent){const n=l=>{for(const r in l)if(l[r]===t)return r};o=n(e.components||e.parent.type.components)||n(e.appContext.components)}return o?ji(o):s?"App":"Anonymous"}function zi(e){return W(e)&&"__vccOpts"in e}const Ae=(e,t)=>Ar(e,t,xs),qi="3.5.18";/** * @vue/runtime-dom v3.5.18 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT **/let jo;const hl=typeof window<"u"&&window.trustedTypes;if(hl)try{jo=hl.createPolicy("vue",{createHTML:e=>e})}catch{}const ml=jo?e=>jo.createHTML(e):e=>e,Hi="http://www.w3.org/2000/svg",Ki="http://www.w3.org/1998/Math/MathML",mt=typeof document<"u"?document:null,vl=mt&&mt.createElement("template"),Wi={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"?mt.createElementNS(Hi,e):t==="mathml"?mt.createElementNS(Ki,e):s?mt.createElement(e,{is:s}):mt.createElement(e);return e==="select"&&o&&o.multiple!=null&&n.setAttribute("multiple",o.multiple),n},createText:e=>mt.createTextNode(e),createComment:e=>mt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>mt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,o,n,l){const r=s?s.previousSibling:t.lastChild;if(n&&(n===l||n.nextSibling))for(;t.insertBefore(n.cloneNode(!0),s),!(n===l||!(n=n.nextSibling)););else{vl.innerHTML=ml(o==="svg"?`${e}`:o==="mathml"?`${e}`:e);const i=vl.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[r?r.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},Gi=Symbol("_vtc");function Qi(e,t,s){const o=e[Gi];o&&(t=(t?[t,...o]:[...o]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const eo=Symbol("_vod"),gl=Symbol("_vsh"),to={beforeMount(e,{value:t},{transition:s}){e[eo]=e.style.display==="none"?"":e.style.display,s&&t?s.beforeEnter(e):Cs(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),Cs(e,!0),o.enter(e)):o.leave(e,()=>{Cs(e,!1)}):Cs(e,t))},beforeUnmount(e,{value:t}){Cs(e,t)}};function Cs(e,t){e.style.display=t?e[eo]:"none",e[gl]=!t}const Yi=Symbol(""),Zi=/(^|;)\s*display\s*:/;function Ji(e,t,s){const o=e.style,n=ve(s);let l=!1;if(s&&!n){if(t)if(ve(t))for(const r of t.split(";")){const i=r.slice(0,r.indexOf(":")).trim();s[i]==null&&so(o,i,"")}else for(const r in t)s[r]==null&&so(o,r,"");for(const r in s)r==="display"&&(l=!0),so(o,r,s[r])}else if(n){if(t!==s){const r=o[Yi];r&&(s+=";"+r),o.cssText=s,l=Zi.test(s)}}else t&&e.removeAttribute("style");eo in e&&(e[eo]=l?o.display:"",e[gl]&&(o.display="none"))}const _l=/\s*!important$/;function so(e,t,s){if(N(s))s.forEach(o=>so(e,t,o));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const o=Xi(e,t);_l.test(s)?e.setProperty(Mt(o),s.replace(_l,""),"important"):e[o]=s}}const bl=["Webkit","Moz","ms"],No={};function Xi(e,t){const s=No[t];if(s)return s;let o=wt(t);if(o!=="filter"&&o in e)return No[t]=o;o=Qo(o);for(let n=0;nzo||(oa.then(()=>zo=0),zo=Date.now());function la(e,t){const s=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=s.attached)return;lt(ra(o,s.value),t,5,[o])};return s.value=e,s.attached=na(),s}function ra(e,t){if(N(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 Tl=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,ia=(e,t,s,o,n,l)=>{const r=n==="svg";t==="class"?Qi(e,o,r):t==="style"?Ji(e,s,o):As(t)?io(t)||ta(e,t,s,o,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):aa(e,t,o,r))?(kl(e,t,o),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&wl(e,t,o,r,l,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!ve(o))?kl(e,wt(t),o,l,t):(t==="true-value"?e._trueValue=o:t==="false-value"&&(e._falseValue=o),wl(e,t,o,r))};function aa(e,t,s,o){if(o)return!!(t==="innerHTML"||t==="textContent"||t in e&&Tl(t)&&W(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 Tl(t)&&ve(s)?!1:t in e}const oo=e=>{const t=e.props["onUpdate:modelValue"]||!1;return N(t)?s=>Ms(t,s):t};function ua(e){e.target.composing=!0}function Sl(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const es=Symbol("_assign"),pe={created(e,{modifiers:{lazy:t,trim:s,number:o}},n){e[es]=oo(n);const l=o||n.props&&n.props.type==="number";Ft(e,t?"change":"input",r=>{if(r.target.composing)return;let i=e.value;s&&(i=i.trim()),l&&(i=po(i)),e[es](i)}),s&&Ft(e,"change",()=>{e.value=e.value.trim()}),t||(Ft(e,"compositionstart",ua),Ft(e,"compositionend",Sl),Ft(e,"change",Sl))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:o,trim:n,number:l}},r){if(e[es]=oo(r),e.composing)return;const i=(l||e.type==="number")&&!/^0\d/.test(e.value)?po(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))}},ca={deep:!0,created(e,t,s){e[es]=oo(s),Ft(e,"change",()=>{const o=e._modelValue,n=da(e),l=e.checked,r=e[es];if(N(o)){const i=Jo(o,n),u=i!==-1;if(l&&!u)r(o.concat(n));else if(!l&&u){const p=[...o];p.splice(i,1),r(p)}}else if(Vs(o)){const i=new Set(o);l?i.add(n):i.delete(n),r(i)}else r(Al(e,l))})},mounted:El,beforeUpdate(e,t,s){e[es]=oo(s),El(e,t,s)}};function El(e,{value:t,oldValue:s},o){e._modelValue=t;let n;if(N(t))n=Jo(t,o.props.value)>-1;else if(Vs(t))n=t.has(o.props.value);else{if(t===s)return;n=Ls(t,Al(e,!0))}e.checked!==n&&(e.checked=n)}function da(e){return"_value"in e?e._value:e.value}function Al(e,t){const s=t?"_trueValue":"_falseValue";return s in e?e[s]:t}const fa=["ctrl","shift","alt","meta"],pa={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)=>fa.some(s=>e[`${s}Key`]&&!t.includes(s))},je=(e,t)=>{const s=e._withMods||(e._withMods={}),o=t.join(".");return s[o]||(s[o]=(n,...l)=>{for(let r=0;r{const t=ma().createApp(...e),{mount:s}=t;return t.mount=o=>{const n=_a(o);if(!n)return;const l=t._component;!W(l)&&!l.render&&!l.template&&(l.template=n.innerHTML),n.nodeType===1&&(n.textContent="");const r=s(n,!1,ga(n));return n instanceof Element&&(n.removeAttribute("v-cloak"),n.setAttribute("data-v-app","")),r},t};function ga(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function _a(e){return ve(e)?document.querySelector(e):e}const vt={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)}}},ba="https://das.doubanflix.com/api",ya="https://api.doubanflix.com/api",wa=1e4,ka=1e3,$l=2*60*60*1e3;class xa{constructor(){this.primaryURL=ba,this.fallbackURL=ya,this.currentURL=this.primaryURL,this.timeout=wa,this.isUsingFallback=!1,this.resetTimer=null}switchToFallback(){this.isUsingFallback||(console.warn("主要API接口无法访问,切换到备用接口:",this.fallbackURL),this.currentURL=this.fallbackURL,this.isUsingFallback=!0,this.startAutoResetTimer())}resetToPrimary(){this.isUsingFallback&&(console.log("重置到主要API接口:",this.primaryURL),this.currentURL=this.primaryURL,this.isUsingFallback=!1,this.clearAutoResetTimer())}startAutoResetTimer(){this.clearAutoResetTimer(),console.log(`将在 ${$l/1e3/60} 分钟后自动尝试切换回主接口`),this.resetTimer=setTimeout(()=>{console.log("定时器触发,自动切换回主接口"),this.forceResetToPrimary()},$l)}clearAutoResetTimer(){this.resetTimer&&(clearTimeout(this.resetTimer),this.resetTimer=null)}forceResetToPrimary(){console.log("强制重置到主要API接口:",this.primaryURL),this.currentURL=this.primaryURL,this.isUsingFallback=!1,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=vt.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 vt.getToken()?(vt.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 l=`${n}${t}`,r={headers:this.addAuthHeaders(s.headers),...s},i=new AbortController,u=setTimeout(()=>i.abort(),this.timeout);try{const p=await fetch(l,{...r,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(l=>setTimeout(l,ka));try{return this.switchToFallback(),await o(this.currentURL)}catch(l){throw console.error("备用接口也无法访问:",l.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 ne=new xa,Ne={getChallenge(){return ne.get("/auth/challenge")},register(e){return ne.post("/auth/register",e)},login(e){return ne.post("/auth/login",e)},verifyEmail(e){return ne.post("/auth/verify-email",e)},resendVerificationCode(e){return ne.post("/auth/resend-code",e)},getUserInfo(){return ne.get("/user/profile")},getCurrentUser(){return ne.get("/user/profile")},logout(){return ne.post("/auth/logout")},forgotPassword(e){return ne.post("/auth/forgot-password",e)},resetPassword(e){return ne.post("/auth/reset-password",e)}},gt={getSubjectLinks(e,t="movies",s={}){return ne.get(`/subjects/${t}/${e}/links`,s)},getMovieLinks(e,t={}){return ne.get(`/movie/${e}/links`,t)},addSubjectLink(e,t="movies",s){return ne.post(`/subjects/${t}/${e}/links`,s)},addMovieLink(e,t){return ne.post(`/movies/${e}/links`,t)},updateSubjectLink(e,t,s="movies",o){return ne.put(`/subjects/${s}/${e}/links/${t}`,o)},updateMovieLink(e,t){return ne.put(`/movies/links/${e}`,t)},deleteSubjectLink(e,t,s="movies"){return ne.delete(`/subjects/${s}/${e}/links/${t}`)},deleteMovieLink(e,t){return ne.delete(`/movies/${e}/links/${t}`)},voteLink(e,t,s="movie"){return ne.post(`/links/${e}/vote`,{vote_type:t,link_type:s})},removeVote(e,t,s="movie"){return ne.post(`/links/${e}/vote`,{vote_type:t,link_type:s})},getLinkVoteStatus(e,t="movie"){return ne.get(`/links/${e}/vote-status`,{link_type:t})},getUserVote(e,t="movie"){return ne.get(`/links/${e}/vote-status`,{link_type:t})},reportLink(e){return ne.post("/reports",e)}},Ca={getUserProfile(e){return ne.get("/user/profile/")},getUserLinks(e={}){return ne.get("/user/links",e)},getUserLinksByCategory(){return ne.get("/user/links/category")},updateUserName(e){return ne.put("/user/name",e)},getAllUsers(){return ne.get("/admin/users")},banUser(e,t){return ne.put(`/admin/users/${e}/ban`,{reason:t})},unbanUser(e){return ne.put(`/admin/users/${e}/unban`)}};async function Ta(e){const t=new TextEncoder().encode(e),s=await crypto.subtle.digest("SHA-256",t);return Array.from(new Uint8Array(s)).map(l=>l.toString(16).padStart(2,"0")).join("")}function Sa(e,t){return e.startsWith("0".repeat(t))}async function no(e,t,s=null){let o=0;const n=Date.now();for(;;){const l=e+o.toString(),r=await Ta(l);if(Sa(r,t)){const u=Date.now()-n;return console.log(`工作量证明完成: nonce=${o}, 耗时=${u}ms, hash=${r}`),{challenge:e,nonce:o.toString(),hash:r}}o++,o%1e3===0&&(s&&s(o),await new Promise(i=>setTimeout(i,1)))}}const Ce=D(null),Et=D(null),ye=D(!1),ue=D(""),qo=D(!1),Ea=Ae(()=>!!Ce.value&&!!Et.value),Aa=Ae(()=>{var e;return((e=Ce.value)==null?void 0:e.email)||""}),Va=Ae(()=>{var e;return((e=Ce.value)==null?void 0:e.id)||""}),le={user:Ce,token:Et,loading:ye,error:ue,initialized:qo,isAuthenticated:Ea,userEmail:Aa,userId:Va,async initAuth(){if(!qo.value)try{ye.value=!0;const e=vt.getToken();if(e){Et.value=e;try{const t=await Ne.getCurrentUser();t&&t.data?Ce.value=t.data:Ce.value=t,ue.value=""}catch(t){console.error("获取用户信息失败:",t),t.status===401||t.status===403?(vt.removeToken(),Et.value=null,Ce.value=null):console.warn("网络或其他错误,保留token:",t.message)}}}catch(e){console.error("初始化认证失败:",e)}finally{ye.value=!1,qo.value=!0}},async signIn(e,t){try{ye.value=!0,ue.value="";const s=await Ne.login({email:e,password:t});return Et.value=s.data.token,Ce.value=s.data.user,vt.setToken(s.data.token),{success:!0,user:s.data.user}}catch(s){return console.error("登录错误:",s),ue.value=s.message||"登录过程中发生错误",{success:!1,error:ue.value}}finally{ye.value=!1}},async signUp(e,t,s={}){try{ye.value=!0,ue.value="";const o=await Ne.register({email:e,password:t,...s});return Et.value=o.token,Ce.value=o.user,vt.setToken(o.token),{success:!0,data:o}}catch(o){return console.error("注册错误:",o),ue.value=o.message||"注册过程中发生错误",{success:!1,error:ue.value}}finally{ye.value=!1}},async signUpWithProof(e,t){try{ye.value=!0,ue.value="";const s=await Ne.getChallenge();if(!s.success)throw new Error(s.error||"获取挑战失败");const{challenge:o,difficulty:n}=s.data,l=await no(o,n,t),r={username:e.username,email:e.email,password:e.password,proof_of_work:{challenge:o,nonce:l.nonce,hash:l.hash}},i=await Ne.register(r);return i.success?{success:!0,data:i.data}:{success:!1,error:i.error}}catch(s){return console.error("注册失败:",s),ue.value=s.message||"注册失败",{success:!1,error:ue.value}}finally{ye.value=!1}},async verifyEmail(e,t){try{ye.value=!0,ue.value="";const s={email:e,code:t},o=await Ne.verifyEmail(s);return o.success?{success:!0,data:o.data}:{success:!1,error:o.error}}catch(s){return console.error("邮箱验证失败:",s),ue.value=s.message||"验证失败",{success:!1,error:ue.value}}finally{ye.value=!1}},async resendVerificationCode(e,t=()=>{}){try{ye.value=!0,ue.value="";const s=await Ne.getChallenge();if(!s.success)throw new Error(s.error||"获取挑战失败");const{challenge:o,difficulty:n}=s.data,l=await no(o,n,t),r={email:e,challenge:o,solution:l.nonce},i=await Ne.resendVerificationCode(r);return i.success?{success:!0,data:i.data}:{success:!1,error:i.error}}catch(s){return console.error("重发验证码失败:",s),ue.value=s.message||"发送失败",{success:!1,error:ue.value}}finally{ye.value=!1}},async forgotPassword(e,t){try{ye.value=!0,ue.value="";const s=await Ne.getChallenge();if(!s.success)throw new Error(s.error||"获取挑战失败");const{challenge:o,difficulty:n}=s.data,l=await no(o,n,t),r={email:e,proof_of_work:{challenge:o,nonce:l.nonce,hash:l.hash}},i=await Ne.forgotPassword(r);return i.success?{success:!0,data:i.data}:{success:!1,error:i.message||i.error}}catch(s){return console.error("忘记密码失败:",s),ue.value=s.message||"发送失败",{success:!1,error:ue.value}}finally{ye.value=!1}},async resetPassword(e,t,s){try{ye.value=!0,ue.value="";const o=await Ne.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),ue.value=o.message||"重置失败",{success:!1,error:ue.value}}finally{ye.value=!1}},async signOut(){try{return ye.value=!0,ue.value="",vt.removeToken(),Et.value=null,Ce.value=null,{success:!0}}catch(e){return console.error("登出错误:",e),ue.value="登出过程中发生错误",vt.removeToken(),Et.value=null,Ce.value=null,{success:!1,error:ue.value}}finally{ye.value=!1}},clearError(){ue.value=""},hasPermission(e){return!!Ce.value},getDisplayName(){var e;return Ce.value?((e=Ce.value.user_metadata)==null?void 0:e.full_name)||Ce.value.email||"用户":"未登录"},getAvatarUrl(){var e;return Ce.value&&((e=Ce.value.user_metadata)==null?void 0:e.avatar_url)||null}},We=(e,t)=>{const s=e.__vccOpts||e;for(const[o,n]of t)s[o]=n;return s},$a={class:"auth-switch"},Ma={class:"switch-container"},Ia=["checked"],La=["checked"],Ua=We({__name:"AuthSwitch",props:{modelValue:{type:String,default:"login"}},emits:["update:modelValue"],setup(e,{emit:t}){const s=e,o=Ae(()=>s.modelValue==="login"?"2%":"52%");return(n,l)=>(A(),$("div",$a,[a("div",Ma,[a("input",{id:"login",type:"radio",name:"authMode",value:"login",checked:e.modelValue==="login",onChange:l[0]||(l[0]=r=>n.$emit("update:modelValue","login")),class:"switch-input"},null,40,Ia),l[2]||(l[2]=a("label",{for:"login",class:"switch-label"},"登录",-1)),a("input",{id:"register",type:"radio",name:"authMode",value:"register",checked:e.modelValue==="register",onChange:l[1]||(l[1]=r=>n.$emit("update:modelValue","register")),class:"switch-input"},null,40,La),l[3]||(l[3]=a("label",{for:"register",class:"switch-label"},"注册",-1)),a("div",{class:"slider",style:qt({left:o.value})},null,4)])]))}},[["__scopeId","data-v-d47a81a4"]]),Pa={class:"toast-container"},Ml=We({__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,l=null;const r=()=>{n&&(clearTimeout(n),n=null),o("clear-error")},i=()=>{l&&(clearTimeout(l),l=null),o("clear-success")};return Ke(()=>s.errorMessage,u=>{u&&s.autoClose&&(n&&clearTimeout(n),n=setTimeout(()=>{r()},s.duration))}),Ke(()=>s.successMessage,u=>{u&&s.autoClose&&(l&&clearTimeout(l),l=setTimeout(()=>{i()},s.duration))}),ms(()=>{n&&clearTimeout(n),l&&clearTimeout(l)}),(u,p)=>(A(),$("div",Pa,[e.errorMessage?(A(),$("div",{key:0,class:"toast error-toast",onClick:r},[a("span",null,q(e.errorMessage),1),p[0]||(p[0]=a("button",{class:"toast-close"},"×",-1))])):F("",!0),e.successMessage?(A(),$("div",{key:1,class:"toast success-toast",onClick:i},[a("span",null,q(e.successMessage),1),p[1]||(p[1]=a("button",{class:"toast-close"},"×",-1))])):F("",!0)]))}},[["__scopeId","data-v-52e28bd4"]]),Da={class:"auth-container"},Fa={key:0,class:"initializing-container"},Oa={key:1,class:"user-info"},Ra={class:"user-header"},Ba={class:"user-details"},ja={class:"user-display-name"},Na={key:0,class:"user-email"},za={class:"user-stats"},qa={class:"stat-item"},Ha={class:"stat-value"},Ka={class:"stat-item"},Wa={class:"stat-value"},Ga={key:0,class:"nickname-edit-form"},Qa={class:"form-group"},Ya={class:"nickname-actions"},Za=["disabled"],Ja={key:2,class:"auth-forms"},Xa={key:1,class:"back-button"},eu={class:"form-group"},tu={class:"input-wrapper"},su={class:"form-group"},ou={class:"input-wrapper"},nu=["disabled"],lu={class:"forgot-password-link"},ru={class:"form-group"},iu={class:"form-group"},au={class:"form-group"},uu={class:"form-group"},cu={key:0,class:"proof-progress"},du={class:"progress-bar"},fu=["disabled"],pu={class:"form-description"},hu={class:"form-group"},mu=["readonly"],vu={class:"form-group"},gu=["disabled"],_u={class:"resend-code"},bu=["disabled"],yu={class:"form-group"},wu={key:0,class:"proof-progress"},ku={class:"progress-bar"},xu=["disabled"],Cu={class:"form-group"},Tu={class:"form-group"},Su={class:"form-group"},Eu={class:"form-group"},Au=["disabled"],Vu=We({__name:"AuthComponent",setup(e){const t=D(null),s=D(null),o=D("login"),n=D(!1);D(""),D("");const l=D(!1),r=D(!0),i=D(""),u=D(""),p=D({email:"",password:""});ms(()=>{stopWatching&&stopWatching()});const d=D({email:"",password:"",confirmPassword:"",username:""}),_=D({email:"",code:""}),C=D({email:""}),b=D({email:"",code:"",password:"",confirmPassword:""}),g=D(!1),y=D(0),U=D(""),B=D({username:""});Yt(async()=>{try{await le.initAuth(),t.value=le.user.value,t.value&&await Q();const z=Ke(()=>le.user.value,k=>{t.value=k,k?Q():s.value=null},{immediate:!1})}finally{r.value=!1}});const G=()=>{i.value="",u.value=""},Q=async()=>{if(t.value)try{const z=await Ne.getCurrentUser();z?(s.value=z,console.log("用户资料数据:",z)):console.error("获取用户数据失败")}catch(z){console.error("加载用户资料异常:",z)}},R=()=>{var z;l.value=!l.value,l.value&&(B.value.username=((z=t.value)==null?void 0:z.username)||""),G()},re=async()=>{var z,k;if(t.value){G(),n.value=!0;try{const P=B.value.username.trim();if(!P){i.value="用户名不能为空";return}if(P.length<2||P.length>10){i.value="用户名长度必须在2-10个字符之间";return}const ee=await Ca.updateUserName({username:P});if(ee.success){const te={...t.value,...ee.data};t.value=te,le.user.value=te,u.value=ee.message||"用户名更新成功!",l.value=!1,await Q()}else i.value=ee.message||"更新用户名失败"}catch(P){console.error("更新用户名错误:",P),(k=(z=P.response)==null?void 0:z.data)!=null&&k.message?i.value=P.response.data.message:i.value="更新用户名失败,请稍后重试"}finally{n.value=!1}}},Fe=async()=>{G(),n.value=!0;try{const z=await le.signIn(p.value.email,p.value.password);z.success?(t.value=z.user,u.value="登录成功!",p.value={email:"",password:""},await Q()):i.value=z.error||"登录失败,请检查邮箱和密码"}catch(z){i.value="登录过程中发生错误",console.error("登录错误:",z)}finally{n.value=!1}},ce=async()=>{if(G(),d.value.password!==d.value.confirmPassword){i.value="两次输入的密码不一致";return}n.value=!0;try{const z=await le.signUpWithProof(d.value,k=>{g.value=!0,y.value=k});g.value=!1,y.value=0,z.success?(U.value=d.value.email,_.value.email=d.value.email,o.value="verify-email",u.value="注册成功!请查收邮件并验证邮箱",d.value={email:"",password:"",confirmPassword:"",username:""}):i.value=z.error||"注册失败,请稍后重试"}catch(z){g.value=!1,y.value=0,i.value="注册过程中发生错误",console.error("注册错误:",z)}finally{n.value=!1}},he=async()=>{G(),n.value=!0;try{const z=await le.verifyEmail(_.value.email,_.value.code);z.success?(u.value="邮箱验证成功!请登录",o.value="login",_.value={email:"",code:""},U.value=""):i.value=z.error||"验证失败,请重试"}catch(z){i.value="验证过程中发生错误",console.error("验证错误:",z)}finally{n.value=!1}},ze=async()=>{G(),n.value=!0;try{const z=_.value.email||U.value,k=await le.resendVerificationCode(z,P=>{console.log("重发验证码进度:",P)});k.success?u.value="验证码已重新发送,请查收邮件":i.value=k.error||"发送失败,请重试"}catch(z){i.value="发送过程中发生错误",console.error("重发验证码错误:",z)}finally{n.value=!1}},Oe=async()=>{G(),n.value=!0;try{const z=await le.forgotPassword(C.value.email,k=>{g.value=!0,y.value=k});g.value=!1,y.value=0,z.success?(b.value.email=C.value.email,o.value="reset-password",u.value="重置码已发送,请查收邮件",C.value={email:""}):i.value=z.error||"发送失败,请重试"}catch(z){g.value=!1,y.value=0,i.value="发送过程中发生错误",console.error("忘记密码错误:",z)}finally{n.value=!1}},Le=async()=>{if(G(),b.value.password!==b.value.confirmPassword){i.value="两次输入的密码不一致";return}n.value=!0;try{const z=await le.resetPassword(b.value.email,b.value.code,b.value.password);z.success?(u.value="密码重置成功!请使用新密码登录",o.value="login",b.value={email:"",code:"",password:"",confirmPassword:""}):i.value=z.error||"重置失败,请重试"}catch(z){i.value="重置过程中发生错误",console.error("重置密码错误:",z)}finally{n.value=!1}},Qe=()=>{o.value="login",G()},_t=()=>{le.signOut(),u.value="已成功登出",t.value=null,s.value=null};return(z,k)=>(A(),$("div",Da,[r.value?(A(),$("div",Fa,k[18]||(k[18]=[a("div",{class:"loading-spinner"},null,-1),a("p",null,"加载中...",-1)]))):t.value?(A(),$("div",Oa,[a("div",Ra,[a("div",Ba,[a("div",ja,q(t.value.username||t.value.email),1),t.value.username?(A(),$("div",Na,q(t.value.email),1)):F("",!0),a("div",za,[a("span",qa,[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",Ha,q(s.value&&s.value.data&&s.value.data.total_likes||0),1)]),a("span",Ka,[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",Wa,q(s.value&&s.value.data&&s.value.data.total_dislikes||0),1)])])]),a("button",{onClick:R,class:"edit-nickname-btn"},q(l.value?"取消":"编辑用户名"),1)]),l.value?(A(),$("div",Ga,[a("div",Qa,[k[21]||(k[21]=a("label",null,"用户名",-1)),oe(a("input",{"onUpdate:modelValue":k[0]||(k[0]=P=>B.value.username=P),type:"text",placeholder:"请输入用户名",class:"form-input",maxlength:"10"},null,512),[[pe,B.value.username]]),k[22]||(k[22]=a("div",{class:"nickname-hint"},"用户名长度为2-10个字符",-1))]),a("div",Ya,[a("button",{onClick:re,disabled:n.value,class:"save-nickname-btn"},q(n.value?"保存中...":"保存"),9,Za),a("button",{onClick:R,class:"cancel-nickname-btn"}," 取消 ")])])):F("",!0),a("button",{onClick:_t,class:"sign-out-btn"}," 退出登录 ")])):(A(),$("div",Ja,[["verify-email","forgot-password","reset-password"].includes(o.value)?F("",!0):(A(),ys(Ua,{key:0,modelValue:o.value,"onUpdate:modelValue":k[1]||(k[1]=P=>o.value=P)},null,8,["modelValue"])),["verify-email","forgot-password","reset-password"].includes(o.value)?(A(),$("div",Xa,[a("button",{onClick:Qe,class:"back-btn"}," ← 返回登录 ")])):F("",!0),o.value==="login"?(A(),$("form",{key:2,onSubmit:je(Fe,["prevent"]),class:"auth-form","data-mode":"login"},[a("div",eu,[k[23]||(k[23]=a("label",null,"邮箱",-1)),a("div",tu,[oe(a("input",{"onUpdate:modelValue":k[2]||(k[2]=P=>p.value.email=P),type:"email",required:"",placeholder:"请输入邮箱",class:"form-input"},null,512),[[pe,p.value.email]])])]),a("div",su,[k[24]||(k[24]=a("label",null,"密码",-1)),a("div",ou,[oe(a("input",{"onUpdate:modelValue":k[3]||(k[3]=P=>p.value.password=P),type:"password",required:"",placeholder:"请输入密码",class:"form-input"},null,512),[[pe,p.value.password]])])]),a("button",{type:"submit",disabled:n.value,class:"auth-submit-btn"},q(n.value?"登录中...":"登录"),9,nu),a("div",lu,[a("button",{type:"button",onClick:k[4]||(k[4]=P=>o.value="forgot-password"),class:"link-btn"}," 忘记密码? ")])],32)):F("",!0),o.value==="register"?(A(),$("form",{key:3,onSubmit:je(ce,["prevent"]),class:"auth-form","data-mode":"register"},[a("div",ru,[k[25]||(k[25]=a("label",null,"用户名",-1)),oe(a("input",{"onUpdate:modelValue":k[5]||(k[5]=P=>d.value.username=P),type:"text",required:"",placeholder:"3-10个字符",class:"form-input",minlength:"3",maxlength:"10"},null,512),[[pe,d.value.username]])]),a("div",iu,[k[26]||(k[26]=a("label",null,"邮箱",-1)),oe(a("input",{"onUpdate:modelValue":k[6]||(k[6]=P=>d.value.email=P),type:"email",required:"",placeholder:"请输入邮箱",class:"form-input"},null,512),[[pe,d.value.email]])]),a("div",au,[k[27]||(k[27]=a("label",null,"密码",-1)),oe(a("input",{"onUpdate:modelValue":k[7]||(k[7]=P=>d.value.password=P),type:"password",required:"",placeholder:"至少6位",class:"form-input",minlength:"6"},null,512),[[pe,d.value.password]])]),a("div",uu,[k[28]||(k[28]=a("label",null,"确认密码",-1)),oe(a("input",{"onUpdate:modelValue":k[8]||(k[8]=P=>d.value.confirmPassword=P),type:"password",required:"",placeholder:"请再次输入密码",class:"form-input"},null,512),[[pe,d.value.confirmPassword]])]),g.value?(A(),$("div",cu,[k[29]||(k[29]=a("div",{class:"progress-text"},"正在计算工作量证明...",-1)),a("div",du,[a("div",{class:"progress-fill",style:qt({width:Math.min(y.value/1e3,100)+"%"})},null,4)])])):F("",!0),a("button",{type:"submit",disabled:n.value||g.value,class:"auth-submit-btn"},q(g.value?"计算中...":n.value?"注册中...":"注册"),9,fu)],32)):F("",!0),o.value==="verify-email"?(A(),$("form",{key:4,onSubmit:je(he,["prevent"]),class:"auth-form"},[k[32]||(k[32]=a("div",{class:"form-title"},"邮箱验证",-1)),a("div",pu," 我们已向 "+q(U.value||_.value.email)+" 发送了验证码,请查收邮件并输入验证码。 ",1),a("div",hu,[k[30]||(k[30]=a("label",null,"邮箱",-1)),oe(a("input",{"onUpdate:modelValue":k[9]||(k[9]=P=>_.value.email=P),type:"email",required:"",placeholder:"请输入邮箱",class:"form-input",readonly:!!U.value},null,8,mu),[[pe,_.value.email]])]),a("div",vu,[k[31]||(k[31]=a("label",null,"验证码",-1)),oe(a("input",{"onUpdate:modelValue":k[10]||(k[10]=P=>_.value.code=P),type:"text",required:"",placeholder:"请输入6位验证码",class:"form-input",maxlength:"6"},null,512),[[pe,_.value.code]])]),a("button",{type:"submit",disabled:n.value,class:"auth-submit-btn"},q(n.value?"验证中...":"验证邮箱"),9,gu),a("div",_u,[a("button",{type:"button",onClick:ze,disabled:n.value,class:"link-btn"}," 重新发送验证码 ",8,bu)])],32)):F("",!0),o.value==="forgot-password"?(A(),$("form",{key:5,onSubmit:je(Oe,["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",yu,[k[33]||(k[33]=a("label",null,"邮箱",-1)),oe(a("input",{"onUpdate:modelValue":k[11]||(k[11]=P=>C.value.email=P),type:"email",required:"",placeholder:"请输入注册时使用的邮箱",class:"form-input"},null,512),[[pe,C.value.email]])]),g.value?(A(),$("div",wu,[k[34]||(k[34]=a("div",{class:"progress-text"},"正在计算工作量证明...",-1)),a("div",ku,[a("div",{class:"progress-fill",style:qt({width:Math.min(y.value/1e3,100)+"%"})},null,4)])])):F("",!0),a("button",{type:"submit",disabled:n.value||g.value,class:"auth-submit-btn"},q(g.value?"计算中...":n.value?"发送中...":"发送重置码"),9,xu)],32)):F("",!0),o.value==="reset-password"?(A(),$("form",{key:6,onSubmit:je(Le,["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",Cu,[k[37]||(k[37]=a("label",null,"邮箱",-1)),oe(a("input",{"onUpdate:modelValue":k[12]||(k[12]=P=>b.value.email=P),type:"email",required:"",placeholder:"请输入邮箱",class:"form-input",readonly:""},null,512),[[pe,b.value.email]])]),a("div",Tu,[k[38]||(k[38]=a("label",null,"验证码",-1)),oe(a("input",{"onUpdate:modelValue":k[13]||(k[13]=P=>b.value.code=P),type:"text",required:"",placeholder:"请输入6位验证码",class:"form-input",maxlength:"6"},null,512),[[pe,b.value.code]])]),a("div",Su,[k[39]||(k[39]=a("label",null,"新密码",-1)),oe(a("input",{"onUpdate:modelValue":k[14]||(k[14]=P=>b.value.password=P),type:"password",required:"",placeholder:"请输入新密码(至少6位)",class:"form-input",minlength:"6"},null,512),[[pe,b.value.password]])]),a("div",Eu,[k[40]||(k[40]=a("label",null,"确认新密码",-1)),oe(a("input",{"onUpdate:modelValue":k[15]||(k[15]=P=>b.value.confirmPassword=P),type:"password",required:"",placeholder:"请再次输入新密码",class:"form-input"},null,512),[[pe,b.value.confirmPassword]])]),a("button",{type:"submit",disabled:n.value,class:"auth-submit-btn"},q(n.value?"重置中...":"重置密码"),9,Au)],32)):F("",!0)])),Y(Ml,{"error-message":i.value,"success-message":u.value,duration:3e3,"auto-close":!0,onClearError:k[16]||(k[16]=P=>i.value=""),onClearSuccess:k[17]||(k[17]=P=>u.value="")},null,8,["error-message","success-message"])]))}},[["__scopeId","data-v-09cfbe3d"]]);class Ot{static async getLinks(t,s={}){try{const o={},{linkType:n,platform:l,page:r=1,limit:i=5,sortBy:u="created_at",sortOrder:p="desc",category:d="movies"}=s;r&&(o.page=r),i&&(o.limit=i),u&&(o.sort_by=u),p&&(o.sort_order=p),n&&(o.type=n==="bt"?"magnet":n),l&&(o.platform=l);const _=await gt.getSubjectLinks(t,d,o);if(!_.success)throw _.error==="NOT_FOUND"||_.status===404?(console.log("电影不存在,返回空结果"),new Error("电影不存在")):(console.error("获取链接失败:",_.error),new Error(`获取链接失败: ${_.error}`));const C=_.data||{};let b=C.links||[];const g=C.pagination||{};Array.isArray(b)||(console.warn("API返回的links不是数组格式:",b),b=[]);const y=b.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:y,pagination:g,count:y.length,total:g.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:l,platform:r,url:i,extractCode:u,title:p,quality:d,size:_,original_url:C,has_4k:b,has_hdr:g,has_dolby_atmos:y,has_subtitles:U,is_flac:B,is_wav:G}=t,Q=s||o;if(!Q||!l||!i)throw new Error("缺少必填字段:subjectId, linkType, url");if(!["netdisk","bt","online"].includes(l))throw new Error("无效的链接类型");if(u&&u.length>10)throw new Error("提取码长度不能超过10个字符");const R=await Ne.getChallenge();if(!R.success)throw new Error("获取工作量证明挑战失败");const{challenge:re,difficulty:Fe}=R.data,ce=await no(re,Fe),he={title:p||"",url:i.trim(),type:l==="bt"?"magnet":l,password:u||"",quality:d||"",size:_||"",original_url:C||"",has_4k:!!b,has_hdr:!!g,has_dolby_atmos:!!y,has_subtitles:!!U,is_flac:!!B,is_wav:!!G,proof_of_work:ce};l==="netdisk"&&r&&r.trim()&&(he.platform=r.trim());const ze=await gt.addSubjectLink(Q,n,he);if(!ze.success)throw console.error("添加链接失败:",ze.error),new Error(`添加链接失败: ${ze.error}`);return{success:!0,data:ze.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(!le.isAuthenticated.value)throw new Error("用户未登录");const n=await gt.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(!le.isAuthenticated.value)throw new Error("用户未登录");if(!s.url||!s.linkType)throw new Error("链接地址和类型不能为空");const l={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 r;if(o?r=await gt.updateSubjectLink(o,t,n,l):r=await gt.updateMovieLink(t,l),!r.success)throw console.error("修改链接失败:",r.error),new Error(`修改链接失败: ${r.error}`);return{success:!0,message:r.message||"链接修改成功",data:r.data}}catch(l){return console.error("修改链接服务错误:",l),{success:!1,error:l.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(!le.isAuthenticated.value)throw new Error("用户未登录");const n=s==="up"?"like":"dislike",l=await gt.voteLink(t,n,o);if(!l.success)throw console.error("投票失败:",l.error),new Error(`投票失败: ${l.error}`);const r=l.data||{};return{success:!0,message:`${s==="up"?"点赞":"点踩"}成功`,data:{up_votes:r.likes_count||0,down_votes:r.dislikes_count||0,user_vote_type:r.user_vote_type==="like"?"up":r.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",l="movie"){try{if(!t)throw new Error("链接ID不能为空");if(!le.isAuthenticated.value)throw new Error("用户未登录");const r=n==="up"?"like":"dislike",i=await gt.removeVote(t,r,l);if(!i.success)throw console.error("取消投票失败:",i.error),new Error(`取消投票失败: ${i.error}`);const u=i.data||{};console.log("removeVote API原始响应:",u);let p,d;if(u.likes_count!==void 0&&u.dislikes_count!==void 0){const _=Math.max(0,u.likes_count||0),C=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),d=o):(p=s,d=Math.max(0,o-1))):(p=_,d=C),console.log("使用API返回数据:",{finalUpVotes:p,finalDownVotes:d,apiUpVotes:_,apiDownVotes:C})}else n==="up"?(p=Math.max(0,s-1),d=o):(p=s,d=Math.max(0,o-1)),console.log("使用本地计算数据:",{finalUpVotes:p,finalDownVotes:d,currentUpVotes:s,currentDownVotes:o,voteType:n});return{success:!0,message:"取消投票成功",data:{up_votes:p,down_votes:d,user_vote_type:null}}}catch(r){return console.error("取消投票服务错误:",r),{success:!1,error:r.message||"取消投票失败"}}}static async reportLink(t,s,o="",n="movie"){try{if(!t||!s)throw new Error("链接ID和反馈类型不能为空");if(!le.isAuthenticated.value)throw new Error("用户未登录");const l={link_id:t,link_type:n,type:s.trim(),reason:o.trim()||null},r=await gt.reportLink(l);if(!r.success)throw console.error("反馈失败:",r.error),new Error(`反馈失败: ${r.error}`);return{success:!0,data:r.data,message:"反馈提交成功"}}catch(l){return console.error("反馈服务错误:",l),{success:!1,error:l.message||"反馈失败"}}}}const $u="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",Mu={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}}},Iu={class:"selected-text"},Lu={class:"select-dropdown"},Uu=["onClick"];function Pu(e,t,s,o,n,l){return A(),$("div",{class:be(["custom-select",{"is-open":n.isOpen}]),onClick:t[1]||(t[1]=je(()=>{},["stop"]))},[a("div",{class:"select-trigger",onClick:t[0]||(t[0]=(...r)=>l.toggleDropdown&&l.toggleDropdown(...r))},[a("span",Iu,q(l.selectedLabel||s.placeholder),1),a("img",{src:$u,class:be(["arrow",{"arrow-up":n.isOpen}]),alt:"箭头"},null,2)]),oe(a("div",Lu,[(A(!0),$(ge,null,$o(s.options,r=>(A(),$("div",{class:be(["select-option",{selected:r.value===s.modelValue}]),key:r.value,onClick:i=>l.selectOption(r)},q(r.label),11,Uu))),128))],512),[[to,n.isOpen]])],2)}const Rt=We(Mu,[["render",Pu],["__scopeId","data-v-3b2cba4f"]]),Du={name:"LinkItemSkeleton"},Fu={class:"link-item skeleton"};function Ou(e,t,s,o,n,l){return A(),$("div",Fu,t[0]||(t[0]=[al('',2)]))}const Ru=We(Du,[["render",Ou],["__scopeId","data-v-115afd35"]]),Bu=["checked"],ju={key:0,class:"checkbox-label"},Ge=We({__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)=>(A(),$("label",{class:be(["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,Bu),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?(A(),$("span",ju,q(e.label),1)):F("",!0)],2))}},[["__scopeId","data-v-150f8c13"]]),Nu={class:"tooltip"},zu={class:"tooltip"},Il=We({__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=D(!1),l=Ae(()=>n.value?"已复制":s.type==="url"?"点击复制链接(右键打开)":"点击复制提取码"),r=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"?(A(),$("span",{key:0,class:be(["copy-item",{copied:n.value}]),onClick:i},[Xt(q(r(e.text))+" ",1),a("span",Nu,q(l.value),1)],2)):e.type==="code"?(A(),$("code",{key:1,class:be(["extract-code",{copied:n.value}]),onClick:i},[Xt(q(e.text)+" ",1),a("span",zu,q(l.value),1)],2)):F("",!0)}},[["__scopeId","data-v-aaaa00e5"]]),qu={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"]}},Hu=/^magnet:\?xt=urn:btih:[a-fA-F0-9]{32,40}/;function Ku(e){if(!e||typeof e!="string")return{type:null,platform:null,isValid:!1};const t=e.trim();if(Hu.test(t))return{type:"bt",platform:null,isValid:!0};for(const[s,o]of Object.entries(qu))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 Ll(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 Wu(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 Ul(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),l=/(^|[^a-zA-Z])(wav|WAV|\.wav|\.WAV|无损wav|WAV无损|wav无损)([^a-zA-Z]|$)/i.test(e),r=[/[\(\[\(](\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 r){const p=e.match(u);if(p&&p.length>0){const d=p.map(_=>{const C=_.match(/(\d+(?:\.\d+)?[KMGTkmgt]B?)/i);if(C){let b=C[1];return(b.endsWith("GB")||b.endsWith("MB")||b.endsWith("KB")||b.endsWith("TB"))&&(b=b.slice(0,-1)),b=b.toUpperCase(),b}return null}).filter(Boolean);if(d.length>0){i=d.join(" + ");break}}}return{has_4k:t,has_hdr:s,has_dolby_atmos:o,file_size:i,is_flac:n,is_wav:l}}function Pl(e){const t=Ll(e),s=Wu(e),o=Ku(s),n=Ll(s),l=t||n;return{linkType:o.type||"",platform:o.platform||"",extractCode:l||"",cleanedUrl:s,isValid:o.isValid}}const Gu={class:"link-manager"},Qu={key:0,class:"modal-overlay"},Yu={class:"modal-content"},Zu={class:"modal-body"},Ju={class:"form-row"},Xu={class:"form-group"},ec={class:"form-row"},tc={key:0,class:"form-group"},sc={key:1,class:"form-group"},oc={class:"input-wrapper"},nc={class:"form-group"},lc={class:"input-wrapper"},rc={class:"form-row"},ic={class:"form-group"},ac={class:"input-wrapper"},uc={class:"form-group"},cc={class:"input-wrapper"},dc={class:"form-row"},fc={class:"form-group"},pc={class:"input-wrapper"},hc={key:0,class:"form-group"},mc={class:"checkbox-group"},vc={class:"form-actions"},gc=["disabled"],_c={key:1,class:"modal-overlay"},bc={class:"modal-content"},yc={class:"modal-body"},wc={class:"form-row"},kc={class:"form-group"},xc={class:"form-row"},Cc={key:0,class:"form-group"},Tc={key:1,class:"form-group"},Sc={class:"input-wrapper"},Ec={class:"form-group"},Ac={class:"input-wrapper"},Vc={class:"form-row"},$c={class:"form-group"},Mc={class:"input-wrapper"},Ic={class:"form-group"},Lc={class:"input-wrapper"},Uc={class:"form-row"},Pc={class:"form-group"},Dc={class:"input-wrapper"},Fc={key:0,class:"form-group"},Oc={class:"checkbox-group"},Rc={class:"form-actions"},Bc=["disabled"],jc={class:"links-section"},Nc={class:"filter-bar"},zc={class:"filter-controls"},qc=["disabled"],Hc={key:0,class:"links-list"},Kc={key:1,class:"links-list"},Wc=["onClick"],Gc={class:"link-header"},Qc={key:0,class:"platform-badge"},Yc=["src","alt"],Zc={class:"link-meta"},Jc={key:0,class:"language"},Xc={key:1,class:"file-size"},ed={key:2,class:"feature-tags"},td={key:0,class:"feature-tag feature-4k"},sd={key:1,class:"feature-tag feature-hdr"},od={key:2,class:"feature-tag feature-dolby"},nd={key:3,class:"feature-tag feature-subtitle"},ld={key:0,class:"feature-tag feature-flac"},rd={key:1,class:"feature-tag feature-wav"},id={class:"link-content"},ad={class:"link-title-row"},ud={class:"link-details"},cd=["onContextmenu"],dd={class:"vote-section"},fd=["onClick","disabled"],pd={viewBox:"0 0 100 100",class:"vote-icon",xmlns:"http://www.w3.org/2000/svg"},hd=["fill"],md=["onClick","disabled"],vd={viewBox:"0 0 100 100",class:"vote-icon down-icon",xmlns:"http://www.w3.org/2000/svg"},gd=["fill"],_d={class:"action-buttons"},bd=["onClick"],yd=["onClick"],wd=["onClick"],kd={class:"link-footer"},xd={class:"footer-left"},Cd=["href"],Td={class:"author"},Sd={class:"footer-right"},Ed={class:"date"},Ad={key:0,class:"report-count"},Vd={key:2,class:"login-prompt"},$d={key:3,class:"empty-state"},Md={key:2,class:"pagination"},Id=["disabled"],Ld={class:"pagination-info"},Ud=["disabled"],Pd={key:0,class:"modal-overlay"},Dd={class:"modal-content"},Fd={class:"modal-body"},Od={class:"form-actions"},Rd=["disabled"],Bd={key:1,class:"modal-overlay"},jd={class:"modal-content"},Nd={class:"modal-body"},zd={class:"form-group"},qd={class:"form-group"},Hd={class:"input-wrapper"},Kd={class:"form-actions"},Wd=["disabled"],Gd=800,Ts="doubanflix_link_draft",Qd=We({__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=Ae(()=>t.linkType),o=Ae(()=>({movies:"movie",albums:"album",books:"book",games:"game"})[t.subjectCategory]||"movie"),n=D([]),l=D(!1),r=D(""),i=D(""),u=D(!1),p=D(!1),d=D(null),_=D(!1),C=D(new Set),b=D({page:1,limit:5,total:0,pages:0}),g=Lt({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}),y=Lt({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}),U=D(!1),B=Lt({platform:"",sortBy:"created_at"}),G=[{value:"",label:"请选择类型"},{value:"netdisk",label:"网盘"},{value:"bt",label:"BT"},{value:"online",label:"在线"}],Q=[{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:"蓝奏网盘"}];Ke(()=>g.url,(v,c)=>{if(v&&v.trim()){const m=Pl(v.trim());m.isValid&&(g.url=m.cleanedUrl,g.linkType=m.linkType,g.platform=m.platform,g.extractCode=m.extractCode)}else(!v||v.trim()==="")&&(g.linkType="",g.platform="",g.extractCode="")}),Ke(()=>y.url,(v,c)=>{if(!U.value)if(v&&v.trim()){const m=Pl(v.trim());m.isValid&&(y.url=m.cleanedUrl,y.linkType=m.linkType,y.platform=m.platform,y.extractCode=m.extractCode)}else(!v||v.trim()==="")&&(y.linkType="",y.platform="",y.extractCode="")}),Ke(()=>g.title,v=>{if(v&&v.trim()){const c=Ul(v.trim());t.subjectCategory==="movies"?(g.has_4k=c.has_4k,g.has_hdr=c.has_hdr,g.has_dolby_atmos=c.has_dolby_atmos):t.subjectCategory==="albums"&&(g.is_flac=c.is_flac,g.is_wav=c.is_wav),c.file_size&&!g.size&&(g.size=c.file_size)}}),Ke(()=>y.title,v=>{if(!U.value&&v&&v.trim()){const c=Ul(v.trim());t.subjectCategory==="movies"?(y.has_4k=c.has_4k,y.has_hdr=c.has_hdr,y.has_dolby_atmos=c.has_dolby_atmos):t.subjectCategory==="albums"&&(y.is_flac=c.is_flac,y.is_wav=c.is_wav),c.file_size&&!y.size&&(y.size=c.file_size)}});const R=[{value:"created_at",label:"按时间"},{value:"likes_count",label:"按点赞数"},{value:"like_rate",label:"按点赞率"}],re=Ae(()=>{switch(p.value?y.linkType:g.linkType){case"netdisk":return Q;default:return[{value:"",label:"请选择平台"}]}}),Fe=Ae(()=>{const v=[{value:"",label:"所有平台"}];switch(t.linkType){case"netdisk":return v.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 v}}),ce=Ae(()=>le.isAuthenticated.value),he=async(v=1)=>{if(t.subjectId){if(!ce.value){n.value=[],b.value={page:1,limit:5,total:0,pages:0};return}l.value=!0,r.value="";try{const c=t.linkType==="all"?void 0:t.linkType,m=await Ot.getLinks(t.subjectId,{linkType:c,platform:B.platform||void 0,sortBy:B.sortBy,sortOrder:"desc",page:v,limit:b.value.limit,category:t.subjectCategory});m.success?(n.value=m.data,m.pagination&&(b.value={page:m.pagination.page||1,limit:m.pagination.limit||5,total:m.pagination.total||0,pages:m.pagination.pages||0})):m.error&&(m.error.includes("电影不存在")||m.error.includes("主题不存在"))?(console.log("主题不存在,静默处理"),n.value=[],b.value={page:1,limit:5,total:0,pages:0}):m.error&&(m.error.includes("请先登录")||m.error.includes("登录已过期"))?console.log("认证错误,静默处理:",m.error):r.value=m.error}catch(c){c.message&&(c.message.includes("电影不存在")||c.message.includes("主题不存在"))?(console.log("主题不存在,静默处理"),n.value=[],b.value={page:1,limit:5,total:0,pages:0}):c.message&&(c.message.includes("请先登录")||c.message.includes("登录已过期"))?console.log("认证错误,静默处理:",c.message):(r.value="加载链接失败",console.error("加载链接错误:",c))}finally{l.value=!1}}},ze=async()=>{if(ce.value){_.value=!0,r.value="";try{const v=await Ot.addLink({subjectId:t.subjectId,category:t.subjectCategory,linkType:g.linkType,platform:g.platform,url:g.url,extractCode:g.extractCode,title:g.title,size:g.size,original_url:g.original_url,has_4k:g.has_4k,has_hdr:g.has_hdr,has_dolby_atmos:g.has_dolby_atmos,has_subtitles:g.has_subtitles,is_flac:g.is_flac,is_wav:g.is_wav});v.success?(i.value=v.message,ut(),h(),u.value=!1,await he(),setTimeout(()=>{i.value=""},3e3)):v.error&&(v.error.includes("请先登录")||v.error.includes("登录已过期"))?console.log("认证错误,静默处理:",v.error):r.value=v.error}catch(v){v.message&&(v.message.includes("请先登录")||v.message.includes("登录已过期"))?console.log("认证错误,静默处理:",v.message):(r.value="添加链接失败",console.error("添加链接错误:",v))}finally{_.value=!1}}},Oe=D(new Map),Le=D(new Map),Qe=D(new Map),_t=async(v,c)=>{if(!ce.value)return;const m=n.value.find(et=>et.id===v);if(!m)return;if(Oe.value.has(v)&&clearTimeout(Oe.value.get(v)),Qe.value.has(v)){const et=Qe.value.get(v);et.cancelled=!0,console.log("取消上一次正在执行的投票操作:",v)}Le.value.has(v)||Le.value.set(v,{originalUserVote:m.user_vote_type,originalUpVotes:m.up_votes||0,originalDownVotes:m.down_votes||0,clickSequence:[],link:m});const K=Le.value.get(v);K.clickSequence.push({voteType:c,timestamp:Date.now()});const Pe=k(K.originalUserVote,K.clickSequence);let bt=K.originalUpVotes,we=K.originalDownVotes;K.originalUserVote==="up"?Pe===null?bt=Math.max(0,K.originalUpVotes-1):Pe==="down"?(bt=Math.max(0,K.originalUpVotes-1),we=K.originalDownVotes+1):bt=K.originalUpVotes:K.originalUserVote==="down"?Pe===null?we=Math.max(0,K.originalDownVotes-1):Pe==="up"?(we=Math.max(0,K.originalDownVotes-1),bt=K.originalUpVotes+1):we=K.originalDownVotes:Pe==="up"?bt=K.originalUpVotes+1:Pe==="down"&&(we=K.originalDownVotes+1),m.user_vote_type=Pe,m.up_votes=bt,m.down_votes=we;const yt=setTimeout(async()=>{const et=Le.value.get(v);if(!et)return;const me={cancelled:!1,linkId:v,timestamp:Date.now()};Qe.value.set(v,me),Oe.value.delete(v),Le.value.delete(v),await z(et,me),Qe.value.get(v)===me&&Qe.value.delete(v)},Gd);Oe.value.set(v,yt)},z=async(v,c)=>{const{originalUserVote:m,originalUpVotes:K,originalDownVotes:Pe,clickSequence:bt,link:we}=v,yt=we.id;if(c&&c.cancelled){console.log("投票操作已被取消,跳过API请求:",yt);return}const et=k(m,bt);if(console.log("分析用户投票意图:",{linkId:yt,originalUserVote:m,clickSequence:bt.map(me=>me.voteType),finalIntention:et,currentUIState:we.user_vote_type,executionId:c==null?void 0:c.timestamp}),et===m){console.log("用户最终意图与原始状态相同,跳过API请求");return}try{if(c&&c.cancelled){console.log("API请求前检查:投票操作已被取消:",yt);return}let me;if(et===null?me=await Ot.removeVote(yt,K,Pe,m,o.value):me=await Ot.voteLink(yt,et,o.value),c&&c.cancelled){console.log("API请求完成后检查:投票操作已被取消,忽略结果:",yt);return}me.success?me.data&&(we.user_vote_type=me.data.user_vote_type,we.up_votes=me.data.up_votes||0,we.down_votes=me.data.down_votes||0):(we.user_vote_type=m,we.up_votes=K,we.down_votes=Pe,me.error&&(me.error.includes("请先登录")||me.error.includes("登录已过期"))?console.log("认证错误,静默处理:",me.error):r.value=me.error)}catch(me){if(c&&c.cancelled){console.log("异常处理中检查:投票操作已被取消,忽略错误:",yt);return}we.user_vote_type=m,we.up_votes=K,we.down_votes=Pe,me.message&&(me.message.includes("请先登录")||me.message.includes("登录已过期"))?console.log("认证错误,静默处理:",me.message):(r.value="投票操作失败",console.error("投票请求错误:",me))}},k=(v,c)=>{if(c.length===0)return v;let m=v;for(const K of c){const{voteType:Pe}=K;m===Pe?m=null:m=Pe}return m},P=async v=>{Ye.value=v.id,Ue.value=v.subject_id||v.movie_id,At.value=!0},ee=()=>{At.value=!1,Ye.value="",Ue.value="",Vt.value=!1},te=async()=>{if(!(!Ye.value||!Ue.value))try{Vt.value=!0;const v=await Ot.deleteLink(Ue.value,Ye.value,t.subjectCategory);v.success?(i.value=v.message,ee(),await he(),setTimeout(()=>{i.value=""},3e3)):v.error&&(v.error.includes("请先登录")||v.error.includes("登录已过期"))?console.log("认证错误,静默处理:",v.error):r.value=v.error}catch(v){v.message&&(v.message.includes("请先登录")||v.message.includes("登录已过期"))?console.log("认证错误,静默处理:",v.message):(r.value="删除链接失败",console.error("删除链接错误:",v))}finally{Vt.value=!1}},ut=()=>{Object.assign(g,{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})},At=D(!1),Ye=D(""),Ue=D(""),Vt=D(!1),ts=D(!1),Te=Lt({linkId:"",type:"",reason:""}),ct=D(!1),ss=[{value:"invalid_link",label:"无效链接"},{value:"copyright_issue",label:"版权问题"},{value:"malicious_link",label:"恶意链接"},{value:"spam",label:"垃圾信息"},{value:"fake_content",label:"虚假内容"},{value:"other",label:"其他"}],Es=v=>{ce.value&&(Te.linkId=v,Te.type="invalid_link",Te.reason="",ts.value=!0)},lo=async()=>{if(!Te.type){ce.value&&(r.value="请选择反馈类型");return}ct.value=!0,r.value="";try{const v=await Ot.reportLink(Te.linkId,Te.type,Te.reason,o.value);v.success?(i.value=v.message,ts.value=!1,await he(),setTimeout(()=>{i.value=""},3e3)):v.error&&(v.error.includes("请先登录")||v.error.includes("登录已过期"))?console.log("认证错误,静默处理:",v.error):r.value=v.error}catch(v){v.message&&(v.message.includes("请先登录")||v.message.includes("登录已过期"))?console.log("认证错误,静默处理:",v.message):(r.value="反馈提交失败",console.error("反馈错误:",v))}finally{ct.value=!1}},$t=()=>{ts.value=!1,Te.linkId="",Te.reason="",Te.description=""},zl=()=>{const v={linkType:g.linkType,platform:g.platform,url:g.url,extractCode:g.extractCode,title:g.title,language:g.language,has_4k:g.has_4k,has_hdr:g.has_hdr,has_dolby_atmos:g.has_dolby_atmos,has_subtitles:g.has_subtitles,timestamp:Date.now()};Object.values(v).some(m=>m&&m!==""&&typeof m!="number")&&localStorage.setItem(Ts,JSON.stringify(v))},f=()=>{try{const v=localStorage.getItem(Ts);if(v){const c=JSON.parse(v);if(Date.now()-c.timestamp>24*60*60*1e3)localStorage.removeItem(Ts);else return Object.assign(g,{linkType:c.linkType||"",platform:c.platform||"",url:c.url||"",extractCode:c.extractCode||"",title:c.title||"",language:c.language||"",has_4k:c.has_4k||!1,has_hdr:c.has_hdr||!1,has_dolby_atmos:c.has_dolby_atmos||!1,has_subtitles:c.has_subtitles||!1}),!0}}catch(v){console.error("恢复草稿失败:",v),localStorage.removeItem(Ts)}return!1},h=()=>{localStorage.removeItem(Ts)},w=()=>{u.value=!0,f()&&console.log("已恢复草稿内容")},S=()=>{zl(),u.value=!1,ut()},x=()=>{p.value=!1,d.value=null,I()},T=v=>{d.value=v,U.value=!0,y.id=v.id,y.linkType=v.type,y.platform=v.platform||"",y.url=v.url,y.extractCode=v.password||"",y.title=v.title||"",y.size=v.size||"",y.original_url=v.original_url||"",y.has_4k=v.has_4k||!1,y.has_hdr=v.has_hdr||!1,y.has_dolby_atmos=v.has_dolby_atmos||!1,y.has_subtitles=v.has_subtitles||!1,y.is_flac=v.is_flac||!1,y.is_wav=v.is_wav||!1,p.value=!0,Cn(()=>{U.value=!1})},I=()=>{y.id="",y.linkType="",y.platform="",y.url="",y.extractCode="",y.title="",y.size="",y.original_url="",y.has_4k=!1,y.has_hdr=!1,y.has_dolby_atmos=!1,y.has_subtitles=!1,y.is_flac=!1,y.is_wav=!1},M=async()=>{if(!_.value)try{_.value=!0,r.value="";const v=await Ot.updateLink(y.id,y,t.subjectId,t.subjectCategory);v.success?(i.value=v.message,x(),await he(b.value.page),setTimeout(()=>{i.value=""},3e3)):v.error&&(v.error.includes("请先登录")||v.error.includes("登录已过期"))?console.log("认证错误,静默处理:",v.error):r.value=v.error}catch(v){console.error("修改链接失败:",v),v.message&&(v.message.includes("请先登录")||v.message.includes("登录已过期"))?console.log("认证错误,静默处理:",v.message):r.value=v.message||"修改链接失败"}finally{_.value=!1}},V=v=>v.hasOwnProperty("is_owner")?ce.value&&v.is_owner:ce.value&&le.userId.value===v.user_id,E=v=>({quark:"夸克",ali:"阿里",baidu:"百度",tianyi:"天翼",mobile:"移动",115:"115",xunlei:"迅雷",uc:"UC",123:"123",lanzou:"蓝奏",bilibili:"B站",iqiyi:"爱奇艺",youku:"优酷",tencent:"腾讯",bt:"磁力"})[v]||v,j=v=>{const c={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 c[v]||c.quark},L=v=>{const c=new Date(v);return c.toLocaleDateString("zh-CN")+" "+c.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"})},O=v=>{i.value="已复制到剪贴板",setTimeout(()=>{i.value=""},2e3)},H=async(v,c)=>{try{if(window.open(v,"_blank"),c)try{await navigator.clipboard.writeText(c),i.value=`链接已打开,提取码 "${c}" 已复制到剪贴板`}catch{const K=document.createElement("textarea");K.value=c,K.style.position="fixed",K.style.left="-999999px",K.style.top="-999999px",document.body.appendChild(K),K.focus(),K.select();try{document.execCommand("copy"),i.value=`链接已打开,提取码 "${c}" 已复制到剪贴板`}catch{i.value=`链接已打开,提取码: ${c} (请手动复制)`}finally{document.body.removeChild(K)}}else i.value="链接已打开";setTimeout(()=>{i.value=""},3e3)}catch(m){console.error("操作失败:",m),r.value="操作失败"}},Z=(v,c)=>{v.preventDefault(),H(c.url,c.password)},ie=v=>{C.value.has(v)?C.value.delete(v):C.value.add(v)},J=v=>C.value.has(v),_e=()=>{C.value.clear()};Ke(()=>t.subjectId,async v=>{v&&(_e(),await os(),he())},{immediate:!0}),Ke(()=>t.linkType,async()=>{_e(),B.platform="",b.value.page=1,t.subjectId&&(await os(),he())});const Se=v=>{v>=1&&v<=b.value.pages&&(_e(),he(v))},Ze=()=>{b.value.page>1&&Se(b.value.page-1)},Je=()=>{b.value.page{const v=document.querySelector(".auth-container")||document.querySelector(".auth-component")||document.querySelector("[data-auth-component]")||document.querySelector("#user-section");if(v)v.scrollIntoView({behavior:"smooth",block:"start"});else{const c=document.querySelector('.nav-btn[data-tab="user"]')||document.querySelector('button[data-tab="user"]')||Array.from(document.querySelectorAll(".nav-btn")).find(m=>m.textContent.includes("👤")||m.textContent.includes("用户"));if(c)c.click();else{const m=new CustomEvent("switchToUserTab",{bubbles:!0,detail:{tab:"user"}});document.dispatchEvent(m)}}};Yt(async()=>{t.subjectId&&(await os(),he())});const os=async()=>{if(!le.initialized.value)return new Promise(v=>{let c=0;const m=50,K=()=>{if(c++,le.initialized.value||c>=m){v();return}setTimeout(K,100)};K()})};return(v,c)=>(A(),$(ge,null,[a("div",Gu,[p.value?(A(),$("div",Qu,[a("div",Yu,[a("div",{class:"modal-header"},[c[40]||(c[40]=a("h4",null,"修改链接",-1)),a("button",{class:"close-btn",onClick:x},c[39]||(c[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",Zu,[a("form",{onSubmit:je(M,["prevent"])},[a("div",Ju,[a("div",Xu,[c[41]||(c[41]=a("label",null,"链接类型 *",-1)),Y(Rt,{modelValue:y.linkType,"onUpdate:modelValue":c[0]||(c[0]=m=>y.linkType=m),options:G,placeholder:"请选择类型",onChange:c[1]||(c[1]=m=>y.platform="")},null,8,["modelValue"])])]),a("div",ec,[y.linkType==="netdisk"?(A(),$("div",tc,[c[42]||(c[42]=a("label",null,"平台",-1)),Y(Rt,{modelValue:y.platform,"onUpdate:modelValue":c[2]||(c[2]=m=>y.platform=m),options:re.value,placeholder:"请选择平台"},null,8,["modelValue","options"])])):F("",!0),y.linkType==="netdisk"?(A(),$("div",sc,[c[43]||(c[43]=a("label",null,"提取码",-1)),a("div",oc,[oe(a("input",{type:"text","onUpdate:modelValue":c[3]||(c[3]=m=>y.extractCode=m),placeholder:"如有提取码请填写",maxlength:"10"},null,512),[[pe,y.extractCode]])])])):F("",!0)]),a("div",nc,[c[44]||(c[44]=a("label",null,"链接地址 *",-1)),a("div",lc,[oe(a("input",{type:"url","onUpdate:modelValue":c[4]||(c[4]=m=>y.url=m),placeholder:"(会自动识别链接类型)请输入完整的链接地址",required:""},null,512),[[pe,y.url]])])]),a("div",rc,[a("div",ic,[c[45]||(c[45]=a("label",null,"标题描述 *",-1)),a("div",ac,[oe(a("input",{type:"text","onUpdate:modelValue":c[5]||(c[5]=m=>y.title=m),placeholder:"简短描述这个链接"},null,512),[[pe,y.title]])])])]),a("div",uc,[c[46]||(c[46]=a("label",null,"原文链接",-1)),a("div",cc,[oe(a("input",{type:"url","onUpdate:modelValue":c[6]||(c[6]=m=>y.original_url=m),placeholder:"原文链接地址(可选)"},null,512),[[pe,y.original_url]])])]),a("div",dc,[a("div",fc,[c[47]||(c[47]=a("label",null,"文件大小",-1)),a("div",pc,[oe(a("input",{type:"text","onUpdate:modelValue":c[7]||(c[7]=m=>y.size=m),placeholder:"如: 2.5G 或 1024M",pattern:"^\\d+(\\.\\d+)?[GMgm]$",title:"请输入数字+G或M,如: 2.5G 或 1024M"},null,512),[[pe,y.size]])])])]),t.subjectCategory==="movies"||t.subjectCategory==="albums"?(A(),$("div",hc,[c[48]||(c[48]=a("label",null,"特性标签",-1)),a("div",mc,[t.subjectCategory==="movies"?(A(),$(ge,{key:0},[Y(Ge,{modelValue:y.has_4k,"onUpdate:modelValue":c[8]||(c[8]=m=>y.has_4k=m),label:"4K画质",color:"green"},null,8,["modelValue"]),Y(Ge,{modelValue:y.has_hdr,"onUpdate:modelValue":c[9]||(c[9]=m=>y.has_hdr=m),label:"HDR",color:"green"},null,8,["modelValue"]),Y(Ge,{modelValue:y.has_dolby_atmos,"onUpdate:modelValue":c[10]||(c[10]=m=>y.has_dolby_atmos=m),label:"杜比全景声",color:"green"},null,8,["modelValue"]),Y(Ge,{modelValue:y.has_subtitles,"onUpdate:modelValue":c[11]||(c[11]=m=>y.has_subtitles=m),label:"外挂字幕",color:"green"},null,8,["modelValue"])],64)):t.subjectCategory==="albums"?(A(),$(ge,{key:1},[Y(Ge,{modelValue:y.is_flac,"onUpdate:modelValue":c[12]||(c[12]=m=>y.is_flac=m),label:"FLAC无损",color:"green"},null,8,["modelValue"]),Y(Ge,{modelValue:y.is_wav,"onUpdate:modelValue":c[13]||(c[13]=m=>y.is_wav=m),label:"WAV无损",color:"green"},null,8,["modelValue"])],64)):F("",!0)])])):F("",!0),a("div",vc,[a("button",{type:"submit",disabled:_.value},q(_.value?"修改中...":"保存修改"),9,gc),a("button",{type:"button",onClick:x},"取消")])],32)])])])):F("",!0),u.value?(A(),$("div",_c,[a("div",bc,[a("div",{class:"modal-header"},[c[50]||(c[50]=a("h4",null,"添加新链接",-1)),a("button",{class:"close-btn",onClick:S},c[49]||(c[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",yc,[a("form",{onSubmit:je(ze,["prevent"])},[a("div",wc,[a("div",kc,[c[51]||(c[51]=a("label",null,"链接类型 *",-1)),Y(Rt,{modelValue:g.linkType,"onUpdate:modelValue":c[14]||(c[14]=m=>g.linkType=m),options:G,placeholder:"请选择类型",onChange:c[15]||(c[15]=m=>g.platform="")},null,8,["modelValue"])])]),a("div",xc,[g.linkType==="netdisk"?(A(),$("div",Cc,[c[52]||(c[52]=a("label",null,"平台",-1)),Y(Rt,{modelValue:g.platform,"onUpdate:modelValue":c[16]||(c[16]=m=>g.platform=m),options:re.value,placeholder:"请选择平台"},null,8,["modelValue","options"])])):F("",!0),g.linkType==="netdisk"?(A(),$("div",Tc,[c[53]||(c[53]=a("label",null,"提取码",-1)),a("div",Sc,[oe(a("input",{type:"text","onUpdate:modelValue":c[17]||(c[17]=m=>g.extractCode=m),placeholder:"如有提取码请填写",maxlength:"10"},null,512),[[pe,g.extractCode]])])])):F("",!0)]),a("div",Ec,[c[54]||(c[54]=a("label",null,"链接地址 *",-1)),a("div",Ac,[oe(a("input",{type:"url","onUpdate:modelValue":c[18]||(c[18]=m=>g.url=m),placeholder:"(会自动识别链接类型)请输入完整的链接地址",required:""},null,512),[[pe,g.url]])])]),a("div",Vc,[a("div",$c,[c[55]||(c[55]=a("label",null,"标题描述",-1)),a("div",Mc,[oe(a("input",{type:"text","onUpdate:modelValue":c[19]||(c[19]=m=>g.title=m),placeholder:"简短描述这个链接"},null,512),[[pe,g.title]])])])]),a("div",Ic,[c[56]||(c[56]=a("label",null,"原文链接",-1)),a("div",Lc,[oe(a("input",{type:"url","onUpdate:modelValue":c[20]||(c[20]=m=>g.original_url=m),placeholder:"原文链接地址(可选)"},null,512),[[pe,g.original_url]])])]),a("div",Uc,[a("div",Pc,[c[57]||(c[57]=a("label",null,"文件大小",-1)),a("div",Dc,[oe(a("input",{type:"text","onUpdate:modelValue":c[21]||(c[21]=m=>g.size=m),placeholder:"如: 2.5G 或 1024M",pattern:"^\\d+(\\.\\d+)?[GMgm]$",title:"请输入数字+G或M,如: 2.5G 或 1024M"},null,512),[[pe,g.size]])])])]),t.subjectCategory==="movies"||t.subjectCategory==="albums"?(A(),$("div",Fc,[c[58]||(c[58]=a("label",null,"特性标签",-1)),a("div",Oc,[t.subjectCategory==="movies"?(A(),$(ge,{key:0},[Y(Ge,{modelValue:g.has_4k,"onUpdate:modelValue":c[22]||(c[22]=m=>g.has_4k=m),label:"4K画质",color:"green"},null,8,["modelValue"]),Y(Ge,{modelValue:g.has_hdr,"onUpdate:modelValue":c[23]||(c[23]=m=>g.has_hdr=m),label:"HDR",color:"green"},null,8,["modelValue"]),Y(Ge,{modelValue:g.has_dolby_atmos,"onUpdate:modelValue":c[24]||(c[24]=m=>g.has_dolby_atmos=m),label:"杜比全景声",color:"green"},null,8,["modelValue"]),Y(Ge,{modelValue:g.has_subtitles,"onUpdate:modelValue":c[25]||(c[25]=m=>g.has_subtitles=m),label:"外挂字幕",color:"green"},null,8,["modelValue"])],64)):t.subjectCategory==="albums"?(A(),$(ge,{key:1},[Y(Ge,{modelValue:g.is_flac,"onUpdate:modelValue":c[26]||(c[26]=m=>g.is_flac=m),label:"FLAC无损",color:"green"},null,8,["modelValue"]),Y(Ge,{modelValue:g.is_wav,"onUpdate:modelValue":c[27]||(c[27]=m=>g.is_wav=m),label:"WAV无损",color:"green"},null,8,["modelValue"])],64)):F("",!0)])])):F("",!0),a("div",Rc,[a("button",{type:"submit",disabled:_.value},q(_.value?"添加中...":"添加链接"),9,Bc),a("button",{type:"button",onClick:S},"取消")])],32)])])])):F("",!0),a("div",jc,[a("div",Nc,[a("div",zc,[s.value==="netdisk"?(A(),ys(Rt,{key:0,modelValue:B.platform,"onUpdate:modelValue":c[28]||(c[28]=m=>B.platform=m),options:Fe.value,placeholder:"所有平台",onChange:c[29]||(c[29]=()=>{_e(),he()})},null,8,["modelValue","options"])):F("",!0),Y(Rt,{modelValue:B.sortBy,"onUpdate:modelValue":c[30]||(c[30]=m=>B.sortBy=m),options:R,placeholder:"按时间",onChange:c[31]||(c[31]=()=>{_e(),he()})},null,8,["modelValue"])]),a("button",{class:"add-link-btn-compact",onClick:w,disabled:!ce.value,title:"添加链接"},c[59]||(c[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,qc)]),l.value?(A(),$("div",Hc,[(A(),$(ge,null,$o(3,m=>Y(Ru,{key:"skeleton-"+m})),64))])):n.value.length>0?(A(),$("div",Kc,[(A(!0),$(ge,null,$o(n.value,m=>(A(),$("div",{class:"link-item",key:m.id,onClick:K=>ie(m.id)},[a("div",Gc,[m.platform&&t.linkType!=="bt"&&t.linkType!=="online"?(A(),$("div",Qc,[a("img",{src:j(m.platform),alt:E(m.platform),class:"platform-icon"},null,8,Yc)])):F("",!0),a("div",Zc,[m.language?(A(),$("span",Jc,q(m.language),1)):F("",!0),m.size?(A(),$("span",Xc,q(m.size),1)):F("",!0),t.subjectCategory==="movies"&&(m.has_4k||m.has_hdr||m.has_dolby_atmos||m.has_subtitles)||t.subjectCategory==="albums"&&(m.is_flac||m.is_wav)?(A(),$("div",ed,[t.subjectCategory==="movies"?(A(),$(ge,{key:0},[m.has_4k?(A(),$("span",td,"4K")):F("",!0),m.has_hdr?(A(),$("span",sd,"HDR")):F("",!0),m.has_dolby_atmos?(A(),$("span",od,"杜比")):F("",!0),m.has_subtitles?(A(),$("span",nd,"外挂字幕")):F("",!0)],64)):t.subjectCategory==="albums"?(A(),$(ge,{key:1},[m.is_flac?(A(),$("span",ld,"FLAC")):F("",!0),m.is_wav?(A(),$("span",rd,"WAV")):F("",!0)],64)):F("",!0)])):F("",!0)])]),a("div",id,[a("div",ad,[m.title?(A(),$("div",{key:0,class:be(["link-title",{expanded:J(m.id)}])},q(m.title),3)):F("",!0),a("div",{class:be(["expand-arrow",{expanded:J(m.id)}])},c[60]||(c[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)]),oe(a("div",ud,[a("div",{class:"link-url",onClick:c[32]||(c[32]=je(()=>{},["stop"])),onContextmenu:K=>Z(K,m)},[Y(Il,{text:m.url,type:"url",onCopySuccess:O},null,8,["text"])],40,cd),m.password?(A(),$("div",{key:0,class:"extract-code-container",onClick:c[33]||(c[33]=je(()=>{},["stop"]))},[c[61]||(c[61]=a("span",null,"提取码: ",-1)),Y(Il,{text:m.password,type:"code",onCopySuccess:O},null,8,["text"])])):F("",!0)],512),[[to,J(m.id)]])]),oe(a("div",{class:"link-actions",onClick:c[34]||(c[34]=je(()=>{},["stop"]))},[a("div",dd,[a("button",{class:be(["vote-btn up",{active:m.user_vote_type==="up",pending:Le.value.has(m.id)}]),onClick:K=>_t(m.id,"up"),disabled:!ce.value},[(A(),$("svg",pd,[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:m.user_vote_type==="up"?"currentColor":"none",stroke:"currentColor","stroke-width":"6","stroke-linejoin":"round"},null,8,hd)])),Xt(" "+q(m.up_votes||0),1)],10,fd),a("button",{class:be(["vote-btn down",{active:m.user_vote_type==="down",pending:Le.value.has(m.id)}]),onClick:K=>_t(m.id,"down"),disabled:!ce.value},[(A(),$("svg",vd,[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:m.user_vote_type==="down"?"currentColor":"none",stroke:"currentColor","stroke-width":"6","stroke-linejoin":"round"},null,8,gd)])),Xt(" "+q(m.down_votes||0),1)],10,md)]),a("div",_d,[V(m)?(A(),$("button",{key:0,class:"modify-btn",onClick:K=>T(m)}," 修改 ",8,bd)):F("",!0),V(m)?(A(),$("button",{key:1,class:"delete-btn",onClick:K=>P(m)}," 删除 ",8,yd)):F("",!0),!V(m)&&ce.value?(A(),$("button",{key:2,class:"report-btn",onClick:K=>Es(m.id)}," 反馈 ",8,wd)):F("",!0)])],512),[[to,J(m.id)]]),oe(a("div",kd,[a("div",xd,[m.original_url?(A(),$("a",{key:0,href:m.original_url,target:"_blank",class:"original-link",title:"查看原文"}," 来源 ",8,Cd)):F("",!0),a("span",Td,"添加by "+q(m.user_display_name||"匿名用户"),1)]),a("div",Sd,[a("span",Ed,q(L(m.created_at)),1),m.report_count>0?(A(),$("span",Ad," 被反馈 "+q(m.report_count)+" 次 ",1)):F("",!0)])],512),[[to,J(m.id)]])],8,Wc))),128))])):!l.value&&!ce.value?(A(),$("div",Vd,[a("div",{class:"login-prompt-content"},[c[62]||(c[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)),c[63]||(c[63]=a("h3",null,"登录后浏览链接",-1)),c[64]||(c[64]=a("p",null,"登录后即可查看和添加资源链接",-1)),a("button",{class:"login-btn",onClick:jt}," 立即登录 ")])])):!l.value&&n.value.length===0?(A(),$("div",$d,c[65]||(c[65]=[a("p",null,"暂无链接,成为第一个添加链接的人吧!",-1)]))):F("",!0)]),b.value.pages>1&&!l.value?(A(),$("div",Md,[a("button",{class:"pagination-btn",disabled:b.value.page<=1,onClick:Ze}," 上一页 ",8,Id),a("span",Ld,q(b.value.page)+" / "+q(b.value.pages),1),a("button",{class:"pagination-btn",disabled:b.value.page>=b.value.pages,onClick:Je}," 下一页 ",8,Ud)])):F("",!0),Y(Ml,{"error-message":r.value,"success-message":i.value,duration:3e3,"auto-close":!0,onClearError:c[35]||(c[35]=m=>r.value=""),onClearSuccess:c[36]||(c[36]=m=>i.value="")},null,8,["error-message","success-message"])]),At.value?(A(),$("div",Pd,[a("div",Dd,[a("div",{class:"modal-header"},[c[67]||(c[67]=a("h4",null,"删除链接",-1)),a("button",{class:"close-btn",onClick:ee},c[66]||(c[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",Fd,[c[68]||(c[68]=a("div",{class:"delete-confirmation"},[a("div",{class:"warning-icon"},"⚠️"),a("p",null,"确定要删除这个链接吗?"),a("p",{class:"warning-text"},"此操作不可撤销")],-1)),a("div",Od,[a("button",{type:"button",class:"delete-confirm-btn",disabled:Vt.value,onClick:te},q(Vt.value?"删除中...":"确认删除"),9,Rd),a("button",{type:"button",onClick:ee}," 取消 ")])])])])):F("",!0),ts.value?(A(),$("div",Bd,[a("div",jd,[a("div",{class:"modal-header"},[c[70]||(c[70]=a("h4",null,"反馈链接",-1)),a("button",{class:"close-btn",onClick:$t},c[69]||(c[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",Nd,[a("form",{onSubmit:je(lo,["prevent"])},[a("div",zd,[c[71]||(c[71]=a("label",{for:"report-type"},"反馈类型 *",-1)),Y(Rt,{id:"report-type",modelValue:Te.type,"onUpdate:modelValue":c[37]||(c[37]=m=>Te.type=m),options:ss,placeholder:"请选择反馈类型",required:""},null,8,["modelValue"])]),a("div",qd,[c[72]||(c[72]=a("label",{for:"report-reason"},"详细原因",-1)),a("div",Hd,[oe(a("input",{id:"report-reason","onUpdate:modelValue":c[38]||(c[38]=m=>Te.reason=m),placeholder:"请详细描述反馈原因(可选)",rows:"4"},null,512),[[pe,Te.reason]])])]),a("div",Kd,[a("button",{type:"submit",disabled:ct.value||!Te.type},q(ct.value?"提交中...":"提交反馈"),9,Wd),a("button",{type:"button",onClick:$t}," 取消 ")])],32)])])])):F("",!0)],64))}},[["__scopeId","data-v-8b6fa670"]]),Yd={class:"content-wrapper"},Zd={class:"navigation-bar"},Jd={class:"tab-content"},Xd={key:0,class:"tab-panel"},e1={key:1,class:"no-subject"},t1={key:1,class:"tab-panel"},s1=We({__name:"WindowContent",setup(e){const t=D("links"),s=D("netdisk"),o=D(""),n=D(""),l=D({title:"",year:"",rating:"",category:""}),r=(u,p=null)=>{t.value=u,u==="links"&&p&&(s.value=p)},i=()=>{try{const u=window.location.href;let p="",d=null;if(u.includes("movie.douban.com/subject/")?(p="movies",d=u.match(/\/subject\/(\d+)\/?/)):u.includes("music.douban.com/subject/")?(p="albums",d=u.match(/\/subject\/(\d+)\/?/)):u.includes("book.douban.com/subject/")?(p="books",d=u.match(/\/subject\/(\d+)\/?/)):u.includes("www.douban.com/game/")&&(p="games",d=u.match(/\/game\/(\d+)\/?/)),d&&p)o.value=d[1],n.value=p,l.value.category=p;else{o.value="",n.value="",l.value={title:"",year:"",rating:"",category:""};return}const _=document.querySelector('h1 span[property="v:itemreviewed"]')||document.querySelector("h1 span")||document.querySelector("h1");_&&(l.value.title=_.textContent.trim());const C=document.querySelector(".year")||document.querySelector("span.year");if(C){const g=C.textContent.match(/(\d{4})/);g&&(l.value.year=g[1])}const b=document.querySelector(".rating_num")||document.querySelector('[property="v:average"]');b&&(l.value.rating=b.textContent.trim())}catch(u){console.error("获取豆瓣主题信息失败:",u)}};return Yt(()=>{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=d=>{d.detail&&d.detail.tab==="user"&&r("user")};return document.addEventListener("switchToUserTab",p),()=>{document.removeEventListener("switchToUserTab",p)}}),(u,p)=>(A(),$("div",Yd,[a("div",Zd,[a("button",{class:be(["nav-btn",{active:t.value==="links"&&s.value==="netdisk"}]),onClick:p[0]||(p[0]=d=>r("links","netdisk"))}," 💾 网盘 ",2),a("button",{class:be(["nav-btn",{active:t.value==="links"&&s.value==="bt"}]),onClick:p[1]||(p[1]=d=>r("links","bt"))}," 🧲 BT ",2),a("button",{class:be(["nav-btn",{active:t.value==="links"&&s.value==="online"}]),onClick:p[2]||(p[2]=d=>r("links","online"))}," 📺 在线 ",2),a("button",{class:be(["nav-btn",{active:t.value==="user"}]),onClick:p[3]||(p[3]=d=>r("user"))}," 👤 用户 ",2)]),a("div",Jd,[t.value==="links"?(A(),$("div",Xd,[o.value&&n.value?(A(),ys(Qd,{key:0,"subject-id":o.value,"subject-category":n.value,"link-type":s.value},null,8,["subject-id","subject-category","link-type"])):(A(),$("div",e1,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)])))])):F("",!0),t.value==="user"?(A(),$("div",t1,[Y(Vu)])):F("",!0)])]))}},[["__scopeId","data-v-92e3c6bc"]]),o1={key:0,class:"debug-panel"},n1={class:"debug-content"},l1={class:"debug-section"},r1={class:"status-item"},i1={class:"status-item"},a1={class:"value"},u1={class:"status-item"},c1={class:"value token"},d1={class:"status-item"},f1={class:"value token"},p1={class:"status-item"},h1={class:"debug-section"},m1={key:0,class:"test-result"},v1={class:"debug-section"},g1={class:"headers-preview"},_1=We({__name:"DebugPanel",setup(e){const t=D(!1),s=D(""),o=D(""),n=Ae(()=>le.isAuthenticated.value),l=Ae(()=>le.token.value),r=Ae(()=>le.user.value?`${le.user.value.email} (ID: ${le.user.value.id})`:"无用户信息"),i=Ae(()=>{const b=l.value,g=s.value;return b&&g&&b===g}),u=Ae(()=>{const b=s.value;return JSON.stringify(b?{Authorization:`Bearer ${b.substring(0,20)}...`,"Content-Type":"application/json"}:{"Content-Type":"application/json"},null,2)}),p=()=>{t.value=!t.value,t.value&&d()},d=()=>{s.value=localStorage.getItem("auth_token")||"",console.log("Token状态刷新:",{memory:l.value,localStorage:s.value,match:i.value})},_=async()=>{try{o.value="测试中...";const b=await gt.getLinks();o.value=JSON.stringify({success:!0,dataLength:(b==null?void 0:b.length)||0,message:"请求成功"},null,2)}catch(b){o.value=JSON.stringify({success:!1,error:b.message,status:b.status||"unknown"},null,2)}},C=()=>{localStorage.removeItem("auth_token"),le.token.value=null,le.user.value=null,d(),o.value="",console.log("所有Token已清除")};return Yt(()=>{d(),window.addEventListener("storage",b=>{b.key==="auth_token"&&d()})}),(b,g)=>t.value?(A(),$("div",o1,[a("div",{class:"debug-header"},[g[0]||(g[0]=a("h3",null,"🔧 调试面板",-1)),a("button",{onClick:p,class:"close-btn"},"×")]),a("div",n1,[a("div",l1,[g[6]||(g[6]=a("h4",null,"认证状态",-1)),a("div",r1,[g[1]||(g[1]=a("span",{class:"label"},"登录状态:",-1)),a("span",{class:be(["status",n.value?"success":"error"])},q(n.value?"已登录":"未登录"),3)]),a("div",i1,[g[2]||(g[2]=a("span",{class:"label"},"用户信息:",-1)),a("span",a1,q(r.value),1)]),a("div",u1,[g[3]||(g[3]=a("span",{class:"label"},"Token (内存):",-1)),a("span",c1,q(l.value||"无"),1)]),a("div",d1,[g[4]||(g[4]=a("span",{class:"label"},"Token (localStorage):",-1)),a("span",f1,q(s.value||"无"),1)]),a("div",p1,[g[5]||(g[5]=a("span",{class:"label"},"Token匹配:",-1)),a("span",{class:be(["status",i.value?"success":"error"])},q(i.value?"匹配":"不匹配"),3)])]),a("div",h1,[g[8]||(g[8]=a("h4",null,"测试操作",-1)),a("div",{class:"button-group"},[a("button",{onClick:d,class:"debug-btn"},"刷新Token状态"),a("button",{onClick:_,class:"debug-btn"},"测试API请求"),a("button",{onClick:C,class:"debug-btn danger"},"清除所有Token")]),o.value?(A(),$("div",m1,[g[7]||(g[7]=a("h5",null,"API测试结果:",-1)),a("pre",null,q(o.value),1)])):F("",!0)]),a("div",v1,[g[9]||(g[9]=a("h4",null,"请求头预览",-1)),a("div",g1,[a("code",null,q(u.value),1)])])])])):F("",!0)}},[["__scopeId","data-v-dba5723e"]]),Ss="1.1.3",Dl="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",Bt={LAST_CHECK_TIME:"doubanflix_last_version_check",SKIP_VERSION:"doubanflix_skip_version",SKIP_UNTIL:"doubanflix_skip_until"};function Fl(e,t){const s=e.split(".").map(Number),o=t.split(".").map(Number),n=Math.max(s.length,o.length);for(let l=0;li)return 1;if(r{try{if(typeof GM_xmlhttpRequest>"u"){console.warn("GM_xmlhttpRequest 不可用,可能不在用户脚本环境中"),e({success:!1,error:"GM_xmlhttpRequest API 不可用"});return}GM_xmlhttpRequest({method:"GET",url:Dl,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]+)/),l=s.match(/@description\s+([^\r\n]+)/);let r="";const i=s.split(` `);let u=!1;for(const p of i){if(p.trim()==="// ==/UserScript==")break;if(p.includes("@updatenote")){u=!0;const d=p.match(/@updatenote\s+(.+)/);d&&(r=d[1].trim())}else if(u){const d=p.match(/^\/\/\s+(.+)/);if(d&&!p.includes("@"))r+=` `+d[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:l?l[1].trim():"",updateNote:r||"",downloadUrl:Dl,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 Ol(){const e=localStorage.getItem(Bt.SKIP_UNTIL);if(e){const t=parseInt(e);if(Date.now()0?{hasUpdate:!0,currentVersion:Ss,latestVersion:s,scriptInfo:t,message:`发现新版本 ${s},当前版本 ${Ss}`}:{hasUpdate:!1,currentVersion:Ss,latestVersion:s,message:"当前已是最新版本"}}catch(t){return console.error("版本检查失败:",t),{hasUpdate:!1,error:!0,message:`版本检查失败: ${t.message}`}}}function jl(){const e=localStorage.getItem(Bt.LAST_CHECK_TIME);return e?parseInt(e):null}function y1(e=24){const t=jl();if(!t)return!0;const s=Date.now(),o=e*60*60*1e3;return s-t>=o}const Nl={checkForUpdates:Bl,setSkipVersionCheck:Rl,shouldSkipVersionCheck:Ol,getLastCheckTime:jl,shouldCheckForUpdates:y1,compareVersions:Fl,CURRENT_VERSION:Ss},w1={name:"UpdateNotification",props:{updateInfo:{type:Object,required:!0},visible:{type:Boolean,default:!1}},emits:["close","update","later"],setup(e,{emit:t}){const s=D(!1),o=D(!1),n=()=>{t("close")};return{skipForWeek:s,isUpdating:o,handleClose:n,handleOverlayClick:()=>{n()},handleSkipChange:()=>{},handleLater:()=>{s.value&&Nl.setSkipVersionCheck(e.updateInfo.latestVersion,7),t("later"),n()},handleUpdate:async()=>{try{o.value=!0,s.value&&Nl.setSkipVersionCheck(e.updateInfo.latestVersion,7),t("update",e.updateInfo),setTimeout(()=>{window.open(e.updateInfo.scriptInfo.downloadUrl,"_blank"),n()},500)}catch(d){console.error("处理更新失败:",d)}finally{setTimeout(()=>{o.value=!1},1e3)}},formatUpdateLog:d=>{if(!d)return"";if(d.includes(` `))return d.split(` `).map(g=>g.trim()).filter(g=>g.length>0).map(g=>g.match(/^\d+\.\s/)?g:g.startsWith("*")?g.replace(/^\*\s*/,"• "):g.startsWith("-")?g.replace(/^-\s*/,"• "):"• "+g).join("
").replace(/(\d+\.\d+\.\d+)/g,"$1");if(d.match(/^\d+\.\d+\.\d+/))return d.replace(/\n/g,"
").replace(/\*\s*(.+)/g,"• $1").replace(/(\d+\.\d+\.\d+)/g,"$1");const _=["更新日志","新日志","更新说明","版本更新","changelog","update log"];let C=d;for(const g of _){const y=C.toLowerCase().indexOf(g.toLowerCase());if(y!==-1){C=C.substring(y+g.length).replace(/^[:\s\-=]+/,"").trim();break}}const b=C.split(` `).filter(g=>g.trim());return b.length>5&&(C=b.slice(0,5).join(` `)+` ...`),C.replace(/\n/g,"
").replace(/\*\s*(.+)/g,"• $1").replace(/(\d+\.\d+\.\d+)/g,"$1")}}}},k1={class:"notification-header"},x1={class:"version-info"},C1={class:"version-row"},T1={class:"version-current"},S1={class:"version-row"},E1={class:"version-latest"},A1={key:0,class:"update-description"},V1=["innerHTML"],$1={class:"notification-actions"},M1={class:"skip-option"},I1={class:"skip-checkbox"},L1={class:"action-buttons"},U1=["disabled"],P1=["disabled"],D1={key:0,class:"loading-spinner"};function F1(e,t,s,o,n,l){var r,i,u,p;return s.visible?(A(),$("div",{key:0,class:"update-notification-overlay",onClick:t[6]||(t[6]=(...d)=>o.handleOverlayClick&&o.handleOverlayClick(...d))},[a("div",{class:"update-notification",onClick:t[5]||(t[5]=je(()=>{},["stop"]))},[a("div",k1,[t[8]||(t[8]=al('

发现新版本

DoubanFlix 有新版本可用

',2)),a("button",{class:"close-btn",onClick:t[0]||(t[0]=(...d)=>o.handleClose&&o.handleClose(...d)),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",x1,[a("div",C1,[t[9]||(t[9]=a("span",{class:"version-label"},"当前版本:",-1)),a("span",T1,q(s.updateInfo.currentVersion),1)]),a("div",S1,[t[10]||(t[10]=a("span",{class:"version-label"},"最新版本:",-1)),a("span",E1,q(s.updateInfo.latestVersion),1)])]),(r=s.updateInfo.scriptInfo)!=null&&r.updateNote||(i=s.updateInfo.scriptInfo)!=null&&i.description?(A(),$("div",A1,[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,V1)])):F("",!0),a("div",$1,[a("div",M1,[a("label",I1,[oe(a("input",{type:"checkbox","onUpdate:modelValue":t[1]||(t[1]=d=>o.skipForWeek=d),onChange:t[2]||(t[2]=(...d)=>o.handleSkipChange&&o.handleSkipChange(...d))},null,544),[[ca,o.skipForWeek]]),t[12]||(t[12]=a("span",{class:"checkmark"},null,-1)),t[13]||(t[13]=a("span",{class:"skip-text"},"一周内不再提醒",-1))])]),a("div",L1,[a("button",{class:"btn btn-secondary",onClick:t[3]||(t[3]=(...d)=>o.handleLater&&o.handleLater(...d)),disabled:o.isUpdating}," 稍后提醒 ",8,U1),a("button",{class:"btn btn-primary",onClick:t[4]||(t[4]=(...d)=>o.handleUpdate&&o.handleUpdate(...d)),disabled:o.isUpdating},[o.isUpdating?(A(),$("span",D1)):F("",!0),Xt(" "+q(o.isUpdating?"正在跳转...":"立即更新"),1)],8,P1)])])])])):F("",!0)}const O1=We(w1,[["render",F1],["__scopeId","data-v-8ddffaa9"]]),R1={key:0,class:"custom-window"},B1={class:"window-content"},j1={class:"window-header"},N1={class:"window-title"},z1=We({__name:"App",setup(e){const t=D(!0),s=D(!1),o=D("DoubanFlix 1.1.3"),n=D(null),l=D(!1),r=()=>new Promise(U=>{const B=()=>{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(B())return;const G=new MutationObserver(Q=>{for(const R of Q)if(R.type==="childList"){for(const re of R.addedNodes)if(re.nodeType===Node.ELEMENT_NODE&&B()){G.disconnect();return}}});G.observe(document.body,{childList:!0,subtree:!0}),setTimeout(()=>{G.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 B=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"]');B?U.parentNode!==B&&(B.firstChild?B.insertBefore(U,B.firstChild):B.appendChild(U),console.log("Vue应用容器已移动到aside元素的第一个位置:",B.className||B.tagName)):console.log("未找到aside元素,Vue应用容器保持在当前位置")},p=()=>{t.value=!1},d=async()=>{try{const U=await Bl();U.hasUpdate&&(n.value=U,l.value=!0)}catch(U){console.error("版本检查失败:",U)}},_=()=>{l.value=!1,n.value=null},C=()=>{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"),_()},b=(U=0)=>{U>0&&Rl(U),_()},g=()=>{i()},y=U=>{U.ctrlKey&&U.key==="q"&&(U.preventDefault(),i())};return Yt(async()=>{await le.initAuth(),window.addEventListener("toggle-window",g),document.addEventListener("keydown",y),await r(),s.value=!0,u(),setTimeout(()=>{d()},2e3)}),ms(()=>{window.removeEventListener("toggle-window",g),document.removeEventListener("keydown",y)}),(U,B)=>(A(),$(ge,null,[t.value&&s.value?(A(),$("div",R1,[a("div",B1,[Y(s1)]),a("div",j1,[a("span",N1,q(o.value),1),a("button",{class:"close-btn",onClick:p},"×")])])):F("",!0),Y(_1),n.value&&l.value?(A(),ys(O1,{key:1,"update-info":n.value,visible:l.value,onClose:_,onUpdate:C,onLater:b},null,8,["update-info","visible"])):F("",!0)],64))}},[["__scopeId","data-v-f96739f0"]]);async function q1(){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),va(z1).mount("#bilibili-custom-window"),console.log("DoubanFlix应用已初始化")}q1()})()})();