LibTV 画布增强 · 性能优化 · AI 提示词 · 标签 · 模板 · 主题
// ==UserScript==
// @name LibTV Canvas Boost
// @version 1.10.2
// @icon https://raw.githubusercontent.com/lonely814/Messy/refs/heads/main/libtv-boost/libtv-boost-icon.png
// @license MIT
// @author oocc00
// @description LibTV 画布增强 · 性能优化 · AI 提示词 · 标签 · 模板 · 主题
// @match *://*.iblib.tv/canvas*
// @match *://*.liblib.tv/canvas*
// @match https://www.liblib.tv/*
// @run-at document-idle
// @grant GM_registerMenuCommand
// @grant unsafeWindow
// @namespace https://github.com/hero8152/Infinite-Canvas
// ==/UserScript==
(function(){
'use strict';
/* =========================================================
* 1. CSS 注入
* ========================================================= */
var style = document.createElement('style');
style.id = 'libtv-boost-css';
style.textContent = [':root {',
' --accent: #6366f1;',
' --accent-light: #818cf8;',
' --accent-dark: #4f46e5;',
' --accent-rgb: 99,102,241;',
' --accent-light-rgb: 129,140,248;',
' --canvas-bg: #0f0f0f;',
' --node-bg: #1a1a2e;',
' --border-color: rgba(255,255,255,0.12);',
' --edge-color: rgba(255,255,255,0.08);',
' --ease-out: cubic-bezier(0.23, 1, 0.32, 1);',
' --ease-in-out: cubic-bezier(0.77, 0, 0.175, 1);',
'}',
'.react-flow__node {',
' transition: box-shadow 0.25s var(--ease-out), opacity 0.2s var(--ease-out) !important;',
' border-radius: 12px;',
'}',
'.react-flow__node.selected {',
' outline: none !important;',
' box-shadow:',
' 0 0 0 2px rgba(255,255,255,0.7),',
' 0 0 0 5px var(--accent, #6366f1),',
' 0 0 16px var(--accent, #6366f1),',
' 0 0 48px rgba(var(--accent-rgb),0.4) !important;',
'}',
'.react-flow__node.selected::after {',
' content: ""; position: absolute;',
' left: 10%; right: 10%; bottom: -4px; height: 3px;',
' border-radius: 2px; opacity: 1;',
' background: linear-gradient(90deg,transparent,var(--accent,#818cf8),transparent);',
' box-shadow: 0 0 10px var(--accent,#818cf8),',
' 0 0 20px rgba(var(--accent-light-rgb),0.4);',
'}',
'.react-flow__background.perf-no-grid { display: none !important; }',
'.react-flow__edges.perf-hide-edges { display: none !important; }',
'.react-flow__edge-path {',
' stroke: var(--faint, rgba(255,255,255,0.15)) !important;',
' stroke-width: 1.8 !important;',
' transition: stroke 0.15s, stroke-width 0.15s !important;',
'}',
'.react-flow__edge.libtv-edge-active .react-flow__edge-path {',
' stroke: var(--strong, #818cf8) !important;',
' stroke-width: 2.5 !important;',
'}',
'body.libtv-chain .react-flow__edge.libtv-chain-edge .react-flow__edge-path {',
' stroke: var(--accent, #818cf8) !important;',
' stroke-width: 2.5 !important;',
' filter: drop-shadow(0 0 6px rgba(var(--accent-light-rgb),0.6));',
'}',
'body.perf-mode .react-flow__edge-path {',
' stroke-width: 0.8 !important;',
' transition: none !important;',
' filter: none !important;',
'}',
'body.libtv-step-edges .react-flow__edge-path {',
' transition: none !important;',
'}',
'body.perf-hide-imgs .react-flow__node img {',
' display: none !important;',
'}',
'body.perf-mode .react-flow__node {',
' box-shadow: none !important; border-radius: 0 !important;',
' backdrop-filter: none !important;',
' border-color: rgba(255,255,255,0.06) !important;',
' opacity: 0.85;',
' transition: none !important;',
' animation: none !important;',
'}',
'body.perf-mode .react-flow__node [class*="rounded"] { border-radius: 0 !important; }',
'body.perf-mode .react-flow__node:hover {',
' opacity: 1;',
'}',
'body.perf-mode .react-flow {',
' backdrop-filter: none !important;',
'}',
'body.perf-mode * {',
' animation-duration: 0s !important;',
' animation-delay: 0s !important;',
' transition-duration: 0s !important;',
' backdrop-filter: none !important;',
'}',
'body.perf-mode #libtv-glow { display: none !important; }',
'#libtv-fps {',
' position: fixed; right: 14px; bottom: 14px; z-index: 99999;',
' padding: 5px 12px; border-radius: 10px;',
' background: rgba(10,10,15,0.55); color: rgba(255,255,255,0.5);',
' font: 11px/1.5 -apple-system, "SF Mono", monospace;',
' user-select: none;',
' backdrop-filter: blur(20px);',
' border: 1px solid rgba(255,255,255,0.06);',
' white-space: nowrap;',
' display: inline-flex; align-items: center; gap: 5px;',
' cursor: grab;',
' transition: background .2s var(--ease-out), border-color .2s var(--ease-out), padding .2s var(--ease-out), box-shadow .2s var(--ease-out);',
' box-shadow: 0 2px 12px rgba(0,0,0,0.2);',
'}',
'#libtv-fps:hover {',
' background: rgba(10,10,15,0.75);',
' border-color: rgba(var(--accent-light-rgb),0.15);',
' padding: 5px 14px;',
' box-shadow: 0 4px 16px rgba(0,0,0,0.3);',
'}',
'#libtv-fps:active { cursor: grabbing; }',
'#libtv-fps .fps-val { color: #4ade80; font-weight: 600; }',
'#libtv-fps .fps-flag { color: #fbbf24; }',
'#libtv-fps .fps-sep { color: rgba(255,255,255,0.08); }',
'#libtv-fps .fps-zoom { color: var(--accent-light); }',
'#libtv-fps .fps-cnt { color: rgba(255,255,255,0.35); }',
'#libtv-help {',
' position:fixed; right:14px; bottom:118px; z-index:99997;',
' max-width:260px; padding:10px 12px;',
' background:rgba(18,18,28,0.92);',
' border:1px solid rgba(var(--accent-light-rgb),0.25); border-radius:10px;',
' color:rgba(255,255,255,0.6);',
' font:11px/1.8 -apple-system,"SF Mono",monospace;',
' pointer-events:none; user-select:none;',
' white-space:pre-line; text-align:left;',
' box-shadow:0 8px 24px rgba(0,0,0,0.4);',
' transition: opacity 0.3s var(--ease-out), transform 0.3s var(--ease-out);',
'}',
'#libtv-help.libtv-hide {',
' opacity:0;',
' transform:translateY(8px);',
' pointer-events:none;',
'}',
'body.libtv-chain .react-flow__node { opacity: 0.08 !important; }',
'body.libtv-chain .react-flow__node.selected,',
'body.libtv-chain .react-flow__node.libtv-chain-node',
' { opacity: 1 !important; }',
'body.libtv-chain .react-flow__edge { opacity: 0.03 !important; }',
'body.libtv-chain .react-flow__edge.libtv-chain-edge',
' { opacity: 0.6 !important; }',
'body.libtv-focus [data-toolbar-collapsed],',
'body.libtv-focus [data-sidebar-container],',
'body.libtv-focus header,',
'body.libtv-focus nav,',
'body.libtv-focus aside {',
' display: none !important;',
'}',
'body.libtv-focus .react-flow {',
' width: 100vw !important;',
' height: 100vh !important;',
' max-width: none !important;',
'}',
'#libtv-search {',
' backdrop-filter: blur(20px) !important;',
' backdrop-filter:blur(20px) !important;',
' border: 1px solid rgba(255,255,255,0.08) !important;',
'}',
'#libtv-prompt {',
' position:fixed; z-index:99999;',
' width:440px; max-width:88vw; max-height:68vh;',
' background:rgba(12,12,20,0.88);',
' backdrop-filter:blur(32px) saturate(1.4);',
' border:1px solid rgba(var(--accent-light-rgb),0.25);',
' border-radius:16px; padding:0; overflow:hidden;',
' display:flex; flex-direction:column;',
' font:13px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif; color:#d4d4d8;',
' box-shadow:',
' 0 0 1px rgba(var(--accent-light-rgb),0.6),',
' 0 0 8px rgba(var(--accent-light-rgb),0.15),',
' 0 0 24px rgba(var(--accent-light-rgb),0.08),',
' 0 16px 48px rgba(0,0,0,0.5);',
'}',
'#libtv-prompt::before {',
' content:""; position:absolute; top:-1px; left:20%; right:20%; height:1px;',
' background:linear-gradient(90deg,transparent,rgba(var(--accent-light-rgb),0.6),transparent);',
' pointer-events:none;',
'}',
'#libtv-prompt .ltp-head {',
' display:flex; align-items:center; justify-content:space-between;',
' padding:14px 18px 10px; border-bottom:1px solid rgba(var(--accent-light-rgb),0.12);',
' flex-shrink:0;',
'}',
'#libtv-prompt .ltp-head h3 { margin:0; font-size:13px; color:var(--accent-light); font-weight:600; letter-spacing:0.02em; text-shadow:0 0 12px rgba(var(--accent-light-rgb),0.4); text-wrap:balance; }',
'#libtv-prompt .ltp-close { cursor:pointer; font-size:16px; color:rgba(255,255,255,0.25); transition:color .15s var(--ease-out), text-shadow .15s var(--ease-out); line-height:1; }',
'#libtv-prompt .ltp-close:hover { color:var(--accent-light); text-shadow:0 0 8px rgba(var(--accent-light-rgb),0.5); }',
'#libtv-prompt .ltp-acc-btn { cursor:pointer; width:28px; height:28px; display:flex; align-items:center; justify-content:center; border-radius:7px; color:rgba(255,255,255,0.3); transition:background .15s var(--ease-out), color .15s var(--ease-out), transform .15s var(--ease-out); }',
'#libtv-prompt .ltp-acc-btn:hover { background:color-mix(in oklab, var(--accent-light) 12%, transparent); color:var(--accent-light); }',
'#libtv-prompt .ltp-acc-btn:active { transform:scale(0.9); }',
'#lt-acc-panel { position:fixed;z-index:100006;background:rgba(12,12,20,0.94);backdrop-filter:blur(40px) saturate(1.4);border:1px solid rgba(var(--accent-light-rgb),0.2);border-radius:12px;padding:14px;min-width:200px;box-shadow:0 0 1px rgba(var(--accent-light-rgb),0.4),0 8px 32px rgba(0,0,0,0.5);opacity:0;translate:0 12px;scale:0.97;transition:opacity .25s var(--ease-out), translate .25s var(--ease-out), scale .25s var(--ease-out); }',
'#lt-acc-panel { opacity:1; translate:0 0; scale:1; }',
'@starting-style { #lt-acc-panel { opacity:0; translate:0 12px; scale:0.97; } }',
'#lt-acc-panel .acc-title { font-size:12px;font-weight:600;color:rgba(255,255,255,0.5);margin-bottom:10px; }',
'#lt-acc-panel .acc-item { display:flex;align-items:center;justify-content:space-between;padding:7px 8px;border-radius:8px;cursor:pointer;transition:background .12s var(--ease-out); }',
'#lt-acc-panel .acc-item:hover { background:color-mix(in oklab, var(--accent-light) 8%, transparent); }',
'#lt-acc-panel .acc-item .acc-name { font-size:12px;color:rgba(255,255,255,0.7); }',
'#lt-acc-panel .acc-item .acc-badge { font-size:9px;background:rgba(255,255,255,0.06);color:rgba(255,255,255,0.3);padding:2px 8px;border-radius:4px; }',
'#lt-acc-panel .acc-item .acc-swt { font-size:11px;color:var(--accent-light);padding:3px 10px;border-radius:5px;background:color-mix(in oklab, var(--accent-light) 10%, transparent);cursor:pointer;transition:background .12s var(--ease-out); }',
'#lt-acc-panel .acc-item .acc-swt:hover { background:color-mix(in oklab, var(--accent-light) 20%, transparent); }',
'#lt-acc-panel .acc-item .acc-del { font-size:12px;color:rgba(255,255,255,0.15);cursor:pointer;padding:2px 6px;border-radius:4px;transition:color .12s var(--ease-out), background .12s var(--ease-out); }',
'#lt-acc-panel .acc-item .acc-del:hover { color:#f87171;background:rgba(248,113,113,0.1); }',
'#lt-acc-panel .acc-item .acc-upd { font-size:13px;color:rgba(255,255,255,0.2);cursor:pointer;padding:2px 5px;border-radius:4px;transition:color .12s var(--ease-out), background .12s var(--ease-out); }',
'#lt-acc-panel .acc-item .acc-upd:hover { color:#60a5fa;background:rgba(96,165,250,0.1); }',
'#lt-acc-panel .acc-div { height:1px;background:color-mix(in oklab, var(--accent-light) 8%, transparent);margin:8px 0; }',
'#lt-acc-panel .acc-add { display:flex;align-items:center;gap:6px;padding:8px;border-radius:8px;cursor:pointer;font-size:12px;color:var(--accent-light);transition:background .12s var(--ease-out); }',
'#lt-acc-panel .acc-add:hover { background:color-mix(in oklab, var(--accent-light) 8%, transparent); }',
'#lt-acc-panel .acc-empty { font-size:11px;color:rgba(255,255,255,0.2);text-align:center;padding:12px 0; }',
'#libtv-prompt .ltp-tabs { display:flex; gap:0; padding:0 18px; border-bottom:1px solid rgba(var(--accent-light-rgb),0.12); flex-shrink:0; }',
'#libtv-prompt .ltp-tab { padding:10px 16px; cursor:pointer; color:rgba(255,255,255,0.3); font-size:12px; border-bottom:1.5px solid transparent; transition:color .15s var(--ease-out), border-color .15s var(--ease-out); letter-spacing:0.02em; user-select:none; }',
'#libtv-prompt .ltp-tab:hover { color:rgba(224,231,255,0.7); }',
'#libtv-prompt .ltp-tab.active { color:var(--accent-light); border-bottom-color:var(--accent-light); text-shadow:0 0 8px rgba(var(--accent-light-rgb),0.5); }',
'#libtv-prompt .ltp-body { padding:14px 18px; overflow-y:auto; scrollbar-gutter:stable; flex:1; max-height:42vh; position:relative; }',
'#libtv-prompt .ltp-body textarea { width:100%; box-sizing:border-box; min-height:80px; padding:10px 12px; border-radius:10px; border:1px solid rgba(var(--accent-light-rgb),0.2); background:color-mix(in oklab, var(--accent-light) 4%, transparent); color:#e0e7ff; font:12px/1.5 ui-monospace,SFMono-Regular,monospace; outline:none; resize:vertical; transition:border-color .15s, box-shadow .15s; }',
'#libtv-prompt .ltp-body textarea:focus { border-color:var(--accent-light); box-shadow:0 0 12px rgba(var(--accent-light-rgb),0.2); }',
'#libtv-prompt .ltp-body input[type="text"],#libtv-prompt .ltp-body input[type="password"] { width:100%; box-sizing:border-box; padding:8px 12px; border-radius:8px; border:1px solid rgba(var(--accent-light-rgb),0.2); background:color-mix(in oklab, var(--accent-light) 4%, transparent); color:#e0e7ff; font:12px/1.5 ui-monospace,SFMono-Regular,monospace; outline:none; transition:border-color .15s, box-shadow .15s; }',
'#libtv-prompt .ltp-body input:focus { border-color:var(--accent-light); box-shadow:0 0 12px rgba(var(--accent-light-rgb),0.2); } ',
'#libtv-prompt .ltp-btn { display:inline-flex; align-items:center; gap:5px; padding:6px 14px; border-radius:8px; border:none; cursor:pointer; font:12px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif; transition:background .15s var(--ease-out), box-shadow .15s var(--ease-out), color .15s var(--ease-out), transform .15s var(--ease-out); }',
'#libtv-prompt .ltp-btn:active { transform:scale(0.97); }',
'#libtv-prompt .ltp-btn-primary { background:linear-gradient(135deg,var(--accent),var(--accent-light)); color:#fff; box-shadow:0 0 12px rgba(var(--accent-light-rgb),0.3); }',
'#libtv-prompt .ltp-btn-primary:hover { background:linear-gradient(135deg,var(--accent-light),color-mix(in srgb,var(--accent-light) 70%,#fff)); box-shadow:0 0 16px rgba(var(--accent-light-rgb),0.4); }',
'#libtv-prompt .ltp-btn-sm { padding:4px 12px; font-size:11px; border-radius:6px; }',
'#libtv-prompt .ltp-btn-danger { background:rgba(239,68,68,0.12); color:#f87171; }',
'#libtv-prompt .ltp-btn-danger:hover { background:rgba(239,68,68,0.22); }',
'#libtv-prompt .ltp-btn-ghost { background:rgba(255,255,255,0.04); color:#aaa; }',
'#libtv-prompt .ltp-btn-ghost:hover { background:rgba(255,255,255,0.08); color:#fff; }',
'#libtv-prompt .ltp-cat { display:flex; gap:6px; flex-wrap:wrap; margin-bottom:12px; }',
'#libtv-prompt .ltp-cat-btn { padding:3px 12px; border-radius:14px; border:1px solid rgba(var(--accent-light-rgb),0.2); cursor:pointer; font:11px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif; color:rgba(255,255,255,0.4); background:transparent; transition:background .15s var(--ease-out), color .15s var(--ease-out), border-color .15s var(--ease-out), transform .15s var(--ease-out); }',
'#libtv-prompt .ltp-cat-btn:hover { border-color:rgba(var(--accent-light-rgb),0.4); color:var(--accent-light); }',
'#libtv-prompt .ltp-cat-btn:active { transform:scale(0.97); }',
'#libtv-prompt .ltp-cat-btn.active { background:color-mix(in oklab, var(--accent-light) 20%, transparent); border-color:var(--accent-light); color:var(--accent-light); box-shadow:0 0 8px rgba(var(--accent-light-rgb),0.2); }',
'#libtv-prompt .ltp-item { display:flex; flex-direction:column; gap:4px; padding:8px 10px; border-radius:8px; cursor:default; transition:background .12s; position:relative; }',
'#libtv-prompt .ltp-item:hover { background:rgba(255,255,255,0.04); }',
'#libtv-prompt .ltp-item-top { display:flex; align-items:center; justify-content:space-between; gap:8px; }',
'#libtv-prompt .ltp-item-info { display:flex; align-items:center; gap:6px; min-width:0; flex:1; }',
'#libtv-prompt .ltp-item .ltp-name { font-size:12px; color:#c7d2fe; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; flex-shrink:0; max-width:160px; }',
'#libtv-prompt .ltp-cat-badge { font-size:10px; padding:1px 7px; border-radius:8px; background:color-mix(in oklab, var(--accent-light) 15%, transparent); color:var(--accent-light); white-space:nowrap; flex-shrink:0; }',
'#libtv-prompt .ltp-item .ltp-actions { display:flex; gap:3px; align-items:center; flex-shrink:0; }',
'#libtv-prompt .ltp-item .ltp-actions .ltp-btn { padding:3px 8px; font-size:10px; border-radius:5px; }',
'#libtv-prompt .ltp-item .ltp-preview { font-size:11px; color:rgba(255,255,255,0.25); line-height:1.4; display:-webkit-box; -webkit-line-clamp:2; line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; cursor:pointer; }',
'#libtv-prompt .ltp-item .ltp-preview:hover { color:rgba(255,255,255,0.4); }',
'#libtv-prompt .ltp-status { font-size:11px; color:rgba(255,255,255,0.3); margin-top:6px; }',
'#libtv-prompt .ltp-empty { text-align:center; padding:30px 0; color:rgba(255,255,255,0.2); font-size:13px; }',
'#libtv-prompt .ltp-form-overlay { position:absolute; inset:0; z-index:10; background:rgba(8,8,16,0.94); backdrop-filter:blur(16px); display:flex; flex-direction:column; padding:16px 18px; border-radius:12px; border:1px solid rgba(var(--accent-light-rgb),0.15); }',
'#libtv-prompt .ltp-form-overlay .ltp-form-title { font-size:13px; color:#fff; font-weight:600; margin-bottom:12px; }',
'#libtv-prompt .ltp-form-overlay .ltp-form-row { margin-bottom:10px; display:flex; flex-direction:column; gap:4px; }',
'#libtv-prompt .ltp-form-overlay .ltp-form-row label { font-size:11px; color:rgba(255,255,255,0.4); }',
'#libtv-prompt .ltp-form-overlay .ltp-form-row input,.ltp-form-overlay .ltp-form-row textarea { width:100%; box-sizing:border-box; padding:6px 10px; border-radius:6px; border:1px solid rgba(var(--accent-light-rgb),0.2); background:color-mix(in oklab, var(--accent-light) 4%, transparent); color:#e0e7ff; font:12px/1.5 ui-monospace,SFMono-Regular,monospace; outline:none; transition:border-color .15s; resize:vertical; }',
'#libtv-prompt .ltp-form-overlay .ltp-form-row input:focus,.ltp-form-overlay .ltp-form-row textarea:focus { border-color:var(--accent-light); box-shadow:0 0 8px rgba(var(--accent-light-rgb),0.2); }',
'#libtv-prompt .ltp-form-overlay .ltp-form-ta { min-height:80px; max-height:160px; }',
'#libtv-prompt .ltp-form-overlay .ltp-form-actions { display:flex; gap:6px; margin-top:auto; padding-top:10px; justify-content:flex-end; border-top:1px solid rgba(255,255,255,0.06); }',
'#libtv-prompt .ltp-form-inp-row2 { display:flex; gap:10px; }',
'#libtv-prompt .ltp-form-inp-row2 .ltp-form-row { flex:1; }',
'#libtv-prompt .ltp-view-overlay { position:absolute; inset:0; z-index:10; background:rgba(8,8,16,0.94); backdrop-filter:blur(16px); display:flex; flex-direction:column; padding:16px 18px; border-radius:12px; border:1px solid rgba(var(--accent-light-rgb),0.15); }',
'#libtv-prompt .ltp-view-overlay .ltp-view-title { font-size:13px; color:#fff; font-weight:600; margin-bottom:4px; }',
'#libtv-prompt .ltp-view-overlay .ltp-view-meta { font-size:10px; color:rgba(255,255,255,0.3); margin-bottom:10px; }',
'#libtv-prompt .ltp-view-overlay .ltp-view-content { flex:1; padding:10px; border-radius:8px; background:rgba(255,255,255,0.03); font-size:12px; color:rgba(255,255,255,0.7); line-height:1.6; white-space:pre-wrap; word-break:break-word; overflow-y:auto; scrollbar-gutter:stable; border:1px solid rgba(var(--accent-light-rgb),0.08); }',
'#libtv-prompt .ltp-view-overlay .ltp-view-actions { display:flex; gap:6px; margin-top:10px; padding-top:10px; justify-content:flex-end; border-top:1px solid rgba(255,255,255,0.06); }',
'#libtv-prompt .ltp-var-overlay { position:absolute; inset:0; z-index:10; background:rgba(8,8,16,0.94); backdrop-filter:blur(16px); display:flex; flex-direction:column; padding:16px 18px; border-radius:12px; border:1px solid rgba(var(--accent-light-rgb),0.15); }',
'#libtv-prompt .ltp-var-title { font-size:13px; color:#fff; font-weight:600; margin-bottom:10px; }',
'#libtv-prompt .ltp-var-sub { font-size:11px; color:rgba(255,255,255,0.25); margin-bottom:12px; padding-bottom:10px; border-bottom:1px solid rgba(255,255,255,0.06); }',
'#libtv-prompt .ltp-var-row { margin-bottom:8px; display:flex; align-items:center; gap:8px; }',
'#libtv-prompt .ltp-var-row label { font-size:11px; color:rgba(255,255,255,0.4); min-width:64px; flex-shrink:0; text-align:right; }',
'#libtv-prompt .ltp-var-row input { flex:1; padding:6px 10px; border-radius:6px; border:1px solid rgba(var(--accent-light-rgb),0.2); background:color-mix(in oklab, var(--accent-light) 4%, transparent); color:#e0e7ff; font:12px/1.4 ui-monospace,SFMono-Regular,monospace; outline:none; transition:border-color .15s, box-shadow .15s; }',
'#libtv-prompt .ltp-var-row input:focus { border-color:var(--accent-light); box-shadow:0 0 8px rgba(var(--accent-light-rgb),0.2); }',
'#libtv-prompt .ltp-var-preview { margin-top:8px; padding:8px 10px; border-radius:6px; background:rgba(255,255,255,0.03); font-size:11px; color:rgba(255,255,255,0.3); white-space:pre-wrap; word-break:break-all; max-height:80px; overflow-y:auto; scrollbar-gutter:stable; flex-shrink:0; }',
'#libtv-prompt .ltp-var-actions { display:flex; gap:6px; margin-top:auto; padding-top:10px; justify-content:flex-end; border-top:1px solid rgba(255,255,255,0.06); }',
'.ltp-pal-section { margin-bottom:14px; }',
'.ltp-pal-section-title { font-size:11px; color:rgba(255,255,255,0.35); letter-spacing:0.05em; margin-bottom:8px; cursor:pointer; display:flex; align-items:center; gap:6px; user-select:none; text-wrap:balance; }',
'.ltp-pal-section-title::before { content:"▸"; font-size:9px; transition:transform .15s; }',
'.ltp-pal-section-title.open::before { transform:rotate(90deg); }',
'.ltp-pal-section-body { display:grid; grid-template-columns:repeat(auto-fill,minmax(32px,1fr)); gap:6px; }',
'.ltp-pal-section-body.collapsed { display:none; }',
'.ltp-pal-swatch { width:32px; height:32px; border-radius:6px; cursor:pointer; border:2px solid transparent; transition:border-color .15s var(--ease-out), transform .15s var(--ease-out); position:relative; }',
'.ltp-pal-swatch:hover { transform:scale(1.15); border-color:rgba(255,255,255,0.4); z-index:1; }',
'.ltp-pal-swatch:active { transform:scale(0.95); }',
'.ltp-pal-swatch.copied { border-color:#22c55e !important; }',
'.ltp-pal-swatch .ltp-pal-tip { position:absolute; bottom:calc(100% + 4px); left:50%; transform:translateX(-50%); background:rgba(0,0,0,0.85); color:#fff; font-size:10px; padding:2px 6px; border-radius:4px; white-space:nowrap; opacity:0; pointer-events:none; transition:opacity .15s; }',
'.ltp-pal-swatch:hover .ltp-pal-tip { opacity:1; }',
'.ltp-pal-picker { display:flex; align-items:center; gap:12px; margin-bottom:16px; padding:12px; border-radius:10px; background:rgba(255,255,255,0.03); border:1px solid rgba(var(--accent-light-rgb),0.12); }',
'.ltp-pal-picker input[type="color"] { width:48px; height:48px; border:none; border-radius:8px; cursor:pointer; background:none; padding:0; }',
'.ltp-pal-picker input[type="color"]::-webkit-color-swatch-wrapper { padding:0; }',
'.ltp-pal-picker input[type="color"]::-webkit-color-swatch { border-radius:8px; border:2px solid rgba(255,255,255,0.1); }',
'.ltp-pal-info { flex:1; }',
'.ltp-pal-hex { font-size:16px; font-weight:600; color:#e0e7ff; cursor:pointer; letter-spacing:0.03em; }',
'.ltp-pal-hex:hover { color:var(--accent-light); }',
'.ltp-pal-rgb, .ltp-pal-hsl { font-size:11px; color:rgba(255,255,255,0.35); margin-top:2px; cursor:pointer; }',
'.ltp-pal-rgb:hover, .ltp-pal-hsl:hover { color:rgba(255,255,255,0.6); }',
'.ltp-pal-ai { display:flex; gap:6px; align-items:center; margin-top:10px; padding:8px 10px; border-radius:8px; background:color-mix(in oklab, var(--accent-light) 8%, transparent); border:1px solid rgba(var(--accent-light-rgb),0.15); }',
'.ltp-pal-ai-desc { flex:1; font-size:11px; color:rgba(255,255,255,0.5); line-height:1.5; }',
'.ltp-pal-recent { display:flex; gap:4px; flex-wrap:wrap; margin-top:12px; }',
'.ltp-pal-recent-title { width:100%; font-size:11px; color:rgba(255,255,255,0.3); margin-bottom:4px; }',
'.ltp-pal-toast { position:fixed; bottom:30px; left:50%; transform:translateX(-50%); background:color-mix(in oklab, var(--accent-light) 90%, transparent); color:#fff; font-size:12px; padding:6px 16px; border-radius:8px; z-index:999999; pointer-events:none; opacity:0; transition:opacity .2s; }',
'.ltp-pal-toast.show { opacity:1; }',
'#libtv-pbtn {',
' transition: transform 0.2s var(--ease-out), box-shadow 0.2s var(--ease-out), background 0.2s var(--ease-out), border 0.2s var(--ease-out), width 0.25s var(--ease-out) !important;',
' border-radius: 50% !important;',
' overflow: hidden !important;',
'}',
'',
'/* 样式 0: 霓虹原版 */',
'#libtv-pbtn.s0 {',
' background: #000 !important;',
' border: none !important;',
' box-shadow:',
' inset 0 0 8px #fff,',
' inset 3px 0 10px #f0f,',
' inset -3px 0 10px #0ff,',
' inset 3px 0 30px #f0f,',
' inset -3px 0 30px #0ff,',
' 0 0 8px #fff,',
' -2px 0 10px #f0f,',
' 2px 0 10px #0ff !important;',
' animation: libtv-pbtn-glow 3s var(--ease-in-out) infinite alternate !important;',
'}',
'#libtv-pbtn.s0:hover { transform: scale(1.08) !important; }',
'',
'@keyframes libtv-pbtn-glow {',
' 0% { box-shadow: inset 0 0 4px rgba(var(--accent-light-rgb),0.25), 0 0 6px rgba(var(--accent-light-rgb),0.12), 0 0 20px rgba(var(--accent-light-rgb),0.08) !important; }',
' 100% { box-shadow: inset 0 0 8px rgba(var(--accent-light-rgb),0.4), 0 0 12px rgba(var(--accent-light-rgb),0.2), 0 0 40px rgba(var(--accent-light-rgb),0.15) !important; }',
'}',
'',
'/* 样式 1: 磨砂玻璃 */',
'#libtv-pbtn.s1 {',
' background: rgba(255,255,255,0.06) !important;',
' backdrop-filter: blur(12px) !important;',
' border: 1px solid rgba(255,255,255,0.08) !important;',
' box-shadow: 0 4px 16px rgba(0,0,0,0.2) !important;',
' color: rgba(255,255,255,0.7) !important;',
'}',
'#libtv-pbtn.s1:hover {',
' border-color: rgba(129,140,248,0.5) !important;',
' color: #fff !important;',
' transform: scale(1.05) !important;',
' box-shadow: 0 6px 24px rgba(0,0,0,0.3) !important;',
'}',
'',
'/* 样式 2: 单色光晕脉冲 */',
'#libtv-pbtn.s2 {',
' width: 28px !important; height: 28px !important;',
' background: #6366f1 !important;',
' border: none !important;',
' box-shadow: 0 0 8px rgba(99,102,241,0.3) !important;',
' animation: libtv-pbtn-pulse 2s var(--ease-in-out) infinite !important;',
'}',
'#libtv-pbtn.s2:hover {',
' width: 36px !important; height: 36px !important;',
' box-shadow: 0 0 16px rgba(99,102,241,0.5) !important;',
'}',
'',
'@keyframes libtv-pbtn-pulse {',
' 0% { box-shadow: 0 0 4px rgba(99,102,241,0.2); }',
' 50% { box-shadow: 0 0 14px rgba(99,102,241,0.4); }',
' 100% { box-shadow: 0 0 4px rgba(99,102,241,0.2); }',
'}',
'',
'/* 样式 3: 动静展开 */',
'#libtv-pbtn.s3 {',
' width: 36px !important; height: 36px !important;',
' background: rgba(15,15,20,0.8) !important;',
' backdrop-filter: blur(12px) !important;',
' border: 1px solid rgba(129,140,248,0.2) !important;',
' box-shadow: 0 4px 16px rgba(0,0,0,0.25) !important;',
' border-radius: 18px !important;',
' color: #c7d2fe !important;',
' overflow: hidden !important;',
' white-space: nowrap !important;',
'}',
'#libtv-pbtn.s3:hover {',
' width: 120px !important;',
' border-radius: 18px !important;',
' border-color: rgba(129,140,248,0.4) !important;',
' box-shadow: 0 4px 20px rgba(99,102,241,0.2) !important;',
'}',
'',
'/* 样式 4: 纯文字极简 */',
'#libtv-pbtn.s4 {',
' background: transparent !important;',
' border: none !important;',
' box-shadow: none !important;',
' color: #818cf8 !important;',
' font-size: 16px !important;',
' font-weight: 600 !important;',
'}',
'#libtv-pbtn.s4:hover {',
' background: rgba(129,140,248,0.1) !important;',
' box-shadow: 0 0 0 1px rgba(129,140,248,0.2) !important;',
' transform: scale(1.05) !important;',
'}',
'',
'#libtv-pbtn:active { cursor: grabbing !important; }',
'.react-flow__node { background: var(--node-bg) !important; border-color: var(--border-color) !important; }',
'.react-flow__edge-path { stroke: var(--edge-color) !important; }',
'.lt-tag-menu { position:fixed; z-index:100000; width:520px; max-height:250px; min-width:240px; min-height:160px; background:rgba(15,15,20,0.94); backdrop-filter:blur(24px) saturate(1.3); border:1px solid rgba(var(--accent-light-rgb),0.25); border-radius:12px; overflow:hidden; display:flex; flex-direction:column; box-shadow:0 8px 32px rgba(0,0,0,0.6),0 0 0 1px rgba(var(--accent-light-rgb),0.1),0 0 20px rgba(var(--accent-light-rgb),0.12); resize:none; opacity:0; translate:0 12px; transition:opacity .25s var(--ease-out), translate .25s var(--ease-out); }',
'.lt-tag-menu { opacity:1; translate:0 0; }',
'@starting-style { .lt-tag-menu { opacity:0; translate:0 12px; } }',
'.lt-tag-resize { position:absolute; right:0; bottom:0; width:18px; height:18px; cursor:nwse-resize; display:flex; align-items:flex-end; justify-content:flex-end; z-index:5; touch-action:none; }',
'.lt-tag-resize::after { content:""; width:9px; height:9px; margin:0 3px 3px 0; border-right:2px solid rgba(199,210,254,0.45); border-bottom:2px solid rgba(199,210,254,0.45); border-bottom-right-radius:3px; }',
'.lt-tag-resize:hover::after { border-color:var(--accent-light); }',
'.lt-tag-header { display:flex; align-items:center; gap:6px; padding:9px 10px; border-bottom:1px solid rgba(var(--accent-light-rgb),0.12); flex-shrink:0; }',
'.lt-tag-lib { flex:0 0 auto; max-width:112px; background:color-mix(in oklab, var(--accent-light) 10%, transparent); border:1px solid rgba(var(--accent-light-rgb),0.2); color:#c7d2fe; border-radius:6px; padding:4px 6px; font-size:11px; outline:none; cursor:pointer; }',
'.lt-tag-search { flex:1; min-width:0; background:rgba(255,255,255,0.05); border:1px solid rgba(var(--accent-light-rgb),0.15); color:#e0e7ff; border-radius:6px; padding:5px 8px; font-size:11px; outline:none; transition:border-color .12s; }',
'.lt-tag-search:focus { border-color:var(--accent-light); }',
'.lt-tag-refresh,.lt-tag-close { flex:0 0 auto; width:24px; height:24px; border:none; border-radius:6px; background:color-mix(in oklab, var(--accent-light) 10%, transparent); color:rgba(255,255,255,0.5); cursor:pointer; font-size:13px; line-height:1; display:flex; align-items:center; justify-content:center; transition:background .12s var(--ease-out), color .12s var(--ease-out), transform .12s var(--ease-out); }',
'.lt-tag-refresh:hover,.lt-tag-close:hover { background:color-mix(in oklab, var(--accent-light) 25%, transparent); color:#fff; }',
'.lt-tag-refresh:active,.lt-tag-close:active { transform:scale(0.9); }',
'.lt-tag-tabs { display:flex; align-items:center; gap:2px; padding:6px 8px 0; border-bottom:1px solid rgba(var(--accent-light-rgb),0.1); flex-shrink:0; overflow-x:auto; }',
'.lt-tag-tab { padding:6px 10px 8px; cursor:pointer; font-size:11px; color:rgba(255,255,255,0.4); border-bottom:2px solid transparent; transition:color .15s var(--ease-out), border-color .15s var(--ease-out); user-select:none; white-space:nowrap; }',
'.lt-tag-tab:hover { color:rgba(224,231,255,0.75); }',
'.lt-tag-tab.active { color:var(--accent-light); border-bottom-color:var(--accent-light); text-shadow:0 0 8px rgba(var(--accent-light-rgb),0.5); }',
'.lt-tag-add { margin-left:auto; flex:0 0 auto; width:22px; height:22px; border-radius:6px; background:color-mix(in oklab, var(--accent-light) 10%, transparent); color:rgba(255,255,255,0.5); cursor:pointer; font-size:14px; line-height:22px; text-align:center; transition:background .12s var(--ease-out), color .12s var(--ease-out), transform .12s var(--ease-out); }',
'.lt-tag-add:hover { background:color-mix(in oklab, var(--accent-light) 25%, transparent); color:#fff; }',
'.lt-tag-add:active { transform:scale(0.9); }',
'.lt-tag-content { flex:1; overflow-y:auto; scrollbar-gutter:stable; padding:8px 10px 12px; content-visibility:auto; contain-intrinsic-size:300px; }',
'.lt-tag-recent { margin-bottom:8px; }',
'.lt-tag-recent-head,.lt-tag-ins-head { font-size:11px; color:rgba(255,255,255,0.45); margin:2px 2px 6px; display:flex; align-items:center; justify-content:space-between; }',
'.lt-rec-clear,.lt-ins-clear { color:rgba(255,255,255,0.3); cursor:pointer; font-size:10px; padding:1px 6px; border-radius:4px; }',
'.lt-rec-clear:hover,.lt-ins-clear:hover { color:#f87171; background:rgba(239,68,68,0.12); }',
'.lt-tag-group { margin-bottom:8px; border:1px solid rgba(var(--accent-light-rgb),0.1); border-radius:8px; overflow:hidden; background:color-mix(in oklab, var(--accent-light) 3%, transparent); }',
'.lt-tag-group-head { display:flex; align-items:center; justify-content:space-between; padding:7px 10px; cursor:pointer; user-select:none; background:color-mix(in oklab, var(--accent-light) 6%, transparent); }',
'.lt-tag-group-head:hover { background:color-mix(in oklab, var(--accent-light) 12%, transparent); }',
'.lt-tag-group-name { font-size:11px; color:#c7d2fe; font-weight:600; letter-spacing:0.02em; }',
'.lt-tag-group-actions { display:flex; align-items:center; gap:8px; }',
'.lt-tag-add-item { width:18px; height:18px; border-radius:4px; background:color-mix(in oklab, var(--accent-light) 15%, transparent); color:#c7d2fe; cursor:pointer; font-size:13px; line-height:18px; text-align:center; transition:background .12s var(--ease-out), color .12s var(--ease-out), transform .12s var(--ease-out); }',
'.lt-tag-add-item:hover { background:var(--accent-light); color:#fff; }',
'.lt-tag-add-item:active { transform:scale(0.9); }',
'.lt-tag-arrow { font-size:10px; color:rgba(255,255,255,0.4); transition:transform .15s; }',
'.lt-tag-arrow.open { transform:rotate(0deg); }',
'.lt-tag-arrow:not(.open) { transform:rotate(-90deg); }',
'.lt-tag-group-head-static { padding:6px 10px; font-size:11px; color:#c7d2fe; font-weight:600; border-bottom:1px solid rgba(var(--accent-light-rgb),0.08); }',
'.lt-tag-grid { display:flex; flex-wrap:wrap; align-content:flex-start; gap:6px; padding:8px; }',
'.lt-tag-item { padding:5px 11px; border-radius:16px; font-size:11px; color:rgba(255,255,255,0.78); background:color-mix(in oklab, var(--accent-light) 10%, transparent); border:1px solid rgba(var(--accent-light-rgb),0.14); cursor:pointer; transition:background .12s var(--ease-out), color .12s var(--ease-out), border-color .12s var(--ease-out), box-shadow .12s var(--ease-out), transform .12s var(--ease-out); user-select:none; line-height:1.4; }',
'.lt-tag-item:hover { background:color-mix(in oklab, var(--accent-light) 28%, transparent); color:#fff; border-color:rgba(var(--accent-light-rgb),0.4); box-shadow:0 0 10px rgba(var(--accent-light-rgb),0.25); transform:translateY(-1px); }',
'.lt-tag-item:active { transform:scale(0.95); }',
'.lt-tag-add-group-wrap { text-align:center; margin-top:6px; }',
'.lt-tag-add-group { display:inline-block; padding:5px 14px; border-radius:8px; background:color-mix(in oklab, var(--accent-light) 8%, transparent); border:1px dashed rgba(var(--accent-light-rgb),0.3); color:rgba(199,210,254,0.7); font-size:11px; cursor:pointer; transition:background .12s var(--ease-out), border-color .12s var(--ease-out), color .12s var(--ease-out), transform .12s var(--ease-out); }',
'.lt-tag-add-group:hover { background:color-mix(in oklab, var(--accent-light) 20%, transparent); color:#fff; }',
'.lt-tag-add-group:active { transform:scale(0.97); }',
'.lt-tag-empty,.lt-tag-search-hint { font-size:11px; color:rgba(255,255,255,0.4); padding:10px 4px; text-align:center; }',
'.lt-mgr-overlay { position:fixed; inset:0; z-index:100001; display:flex; align-items:center; justify-content:center; background:rgba(0,0,0,0.5); backdrop-filter:blur(4px); }',
'.lt-mgr-panel { width:400px; max-width:88vw; max-height:70vh; background:rgba(15,15,20,0.95); backdrop-filter:blur(32px) saturate(1.3); border:1px solid rgba(var(--accent-light-rgb),0.2); border-radius:14px; display:flex; flex-direction:column; overflow:hidden; box-shadow:0 16px 48px rgba(0,0,0,0.6); opacity:0; translate:0 16px; transition:opacity .3s var(--ease-out), translate .3s var(--ease-out); }',
'.lt-mgr-panel { opacity:1; translate:0 0; }',
'@starting-style { .lt-mgr-panel { opacity:0; translate:0 16px; } }',
'.lt-mgr-head { display:flex; align-items:center; justify-content:space-between; padding:14px 16px 10px; border-bottom:1px solid rgba(var(--accent-light-rgb),0.1); font-size:13px; color:#e0e7ff; font-weight:600; flex-shrink:0; text-wrap:balance; }',
'.lt-mgr-body { flex:1; overflow-y:auto; scrollbar-gutter:stable; padding:12px 16px; content-visibility:auto; contain-intrinsic-size:300px; }',
'.lt-mgr-foot { padding:10px 16px 14px; border-top:1px solid rgba(var(--accent-light-rgb),0.08); flex-shrink:0; }',
'.lt-mgr-group { margin-bottom:14px; border:1px solid rgba(var(--accent-light-rgb),0.1); border-radius:8px; padding:10px 12px; background:color-mix(in oklab, var(--accent-light) 3%, transparent); }',
'.lt-mgr-ghead { display:flex; align-items:center; gap:8px; margin-bottom:8px; }',
'.lt-mgr-gname { flex:1; background:rgba(255,255,255,0.04); border:1px solid rgba(var(--accent-light-rgb),0.12); border-radius:5px; padding:4px 8px; font:12px/1.5 -apple-system,sans-serif; color:#d4d4d8; outline:none; transition:border-color .12s; }',
'.lt-mgr-gname:focus { border-color:var(--accent-light); }',
'.lt-tag-delg { background:none; border:none; color:rgba(239,68,68,0.5); cursor:pointer; font-size:10px; padding:2px 6px; border-radius:4px; transition:background .12s var(--ease-out), color .12s var(--ease-out), transform .12s var(--ease-out); }',
'.lt-tag-delg:hover { background:rgba(239,68,68,0.15); color:#f87171; }',
'.lt-tag-delg:active { transform:scale(0.93); }',
'.lt-mgr-item { display:flex; align-items:center; gap:6px; margin:4px 0; }',
'.lt-mgr-itext { flex:1; background:rgba(255,255,255,0.04); border:1px solid rgba(var(--accent-light-rgb),0.1); border-radius:4px; padding:3px 8px; font:11px/1.5 -apple-system,sans-serif; color:#d4d4d8; outline:none; }',
'.lt-mgr-itext:focus { border-color:var(--accent-light); }',
'.lt-tag-deli { background:none; border:none; color:rgba(239,68,68,0.4); cursor:pointer; font-size:9px; padding:2px 4px; border-radius:3px; }',
'.lt-tag-deli:hover { background:rgba(239,68,68,0.12); color:#f87171; }',
'.lt-mgr-add-item { margin-top:4px; }',
'/* 毛玻璃 - 节点浮动面板 */',
'.react-flow__nodes .node-floating-ui > div.bg-panel-background {',
' background-color: rgba(38, 38, 38, 0.55) !important;',
' backdrop-filter: blur(20px) !important;',
' backdrop-filter:blur(20px) !important;',
' border: 1px solid rgba(255, 255, 255, 0.08) !important;',
'}',
'/* 毛玻璃 - 全屏输入面板 */',
'div[class*="max-h-\\[90dvh\\]"][class*="max-w-\\[90vw\\]"] > div.bg-panel-background {',
' background-color: rgba(38,38,38,0.55) !important;',
' backdrop-filter: blur(20px) !important;',
' -webkit-backdrop-filter: blur(20px) !important;',
' border: 1px solid rgba(255,255,255,0.08) !important;',
'}',
'/* 毛玻璃 - 底部导航栏 */',
'div[class*="b768:bottom-3"] {',
' background-color: rgba(38, 38, 38, 0.55) !important;',
' backdrop-filter: blur(20px) !important;',
' backdrop-filter:blur(20px) !important;',
' border: 1px solid rgba(255, 255, 255, 0.08) !important;',
'}',
'/* 隐藏青色"会员超市"按钮 */',
'button[aria-label="会员超市"],',
'button[class*="text-[#05A3C5]"] {',
' display: none !important;',
'}',
'/* 隐藏 Mantine 面板触发按钮 */',
'[id$="-target"][id^="mantine-"],',
'body.libtv-clean-home button[aria-label="帮助信息"] {',
' display: none !important;',
'}',
'/* 恢复导航栏 Mantine 按钮 */',
'nav [id$="-target"][id^="mantine-"] {',
' display: flex !important;',
'}',
'/* 隐藏"限时40折"广告按钮 */',
'[data-tag="CornerMark"] {',
' display: none !important;',
'}',
'/* 隐藏导航栏右侧文字div */',
'div[class*="border-"][class*="topnav-btn-border"] > div.relative:first-child > div.relative:last-child {',
' display: none !important;',
'}',
'/* 画布背景:网格参考线 + 中心暖色辉光 */',
'.react-flow__pane {',
' background-image: ',
' radial-gradient(ellipse at 50% 50%, rgba(255, 180, 80, 0.05) 0%, rgba(255, 140, 50, 0.02) 25%, transparent 55%),',
' repeating-linear-gradient(0deg, rgba(255, 255, 255, 0.015) 0px, rgba(255, 255, 255, 0.015) 1px, transparent 1px, transparent 40px),',
' repeating-linear-gradient(90deg, rgba(255, 255, 255, 0.015) 0px, rgba(255, 255, 255, 0.015) 1px, transparent 1px, transparent 40px) !important;',
' background-color: transparent !important;',
'}',
'header.m_3b16f56b > div.relative:first-child {',
' display: none !important;',
'}',
'/* body.libtv-clean-home button[aria-label="帮助信息"] 已合入上方 Mantine 规则 */',
'body.libtv-clean-home a[aria-label="回到主站"],',
'body.libtv-clean-home button[aria-label="创作者挑战赛"] {',
' display: none !important;',
'}',
'body.libtv-clean-home div.b1280\\:max-w-\\[1440px\\] > div.block,',
'body.libtv-clean-home div.b1280\\:max-w-\\[1440px\\] > div.hidden,',
'body.libtv-clean-home div.b1280\\:max-w-\\[1440px\\] > div.mx-auto,',
'body.libtv-clean-home div.b1280\\:max-w-\\[1440px\\] > div.mt-10,',
'body.libtv-clean-home div.b1280\\:max-w-\\[1440px\\] > button.border-border-default {',
' display: none !important;',
'}',
'body.libtv-clean-home div.b768\\:mb-8:nth-of-type(4) {',
' width: 100% !important;',
' max-width: 1200px !important;',
' height: auto !important;',
' margin: 48px auto !important;',
' padding: 0 24px !important;',
'}',
'body.libtv-clean-home div.b768\\:mb-8:nth-of-type(4) > body.libtv-clean-home div.b768\\:mb-4 {',
' margin-bottom: 28px !important;',
' padding: 0 4px !important;',
' display: flex !important;',
' visibility: visible !important;',
' opacity: 1 !important;',
'}',
'body.libtv-clean-home div.b768\\:mb-8:nth-of-type(4) > body.libtv-clean-home div.b768\\:mb-4 body.libtv-clean-home div.b768\\:text-\\[18px\\] {',
' font-size: 22px !important;',
' font-weight: 600 !important;',
' letter-spacing: 0.3px !important;',
'}',
'body.libtv-clean-home div.b768\\:mb-8:nth-of-type(4) div.scrollbar-hide {',
' display: grid !important;',
' grid-template-columns: repeat(3, 1fr) !important;',
' gap: 24px !important;',
' width: 100% !important;',
' height: auto !important;',
' min-width: 0 !important;',
'}',
'/* 开始创作卡片 */',
'body.libtv-clean-home div.b768\\:mb-8:nth-of-type(4) div.aspect-video,',
'body.libtv-clean-home div.b768\\:mb-8:nth-of-type(4) div.aspect-video > div.cursor-pointer {',
' width: 100% !important;',
' height: 320px !important;',
' max-width: 100% !important;',
' min-width: 0 !important;',
'}',
'body.libtv-clean-home div.b768\\:mb-8:nth-of-type(4) div.create-new-project-card {',
' width: 100% !important;',
' height: 100% !important;',
' background-color: rgba(38, 38, 38, 0.4) !important;',
' border: 2px dashed rgba(255, 255, 255, 0.12) !important;',
' border-radius: 16px !important;',
' gap: 16px !important;',
' transition: background-color .3s var(--ease-out), border-color .3s var(--ease-out) !important;',
'}',
'body.libtv-clean-home div.b768\\:mb-8:nth-of-type(4) div.create-new-project-card:hover {',
' background-color: rgba(38, 38, 38, 0.65) !important;',
' border-color: rgba(255, 255, 255, 0.25) !important;',
'}',
'body.libtv-clean-home div.b768\\:mb-8:nth-of-type(4) div.create-new-project-card div.text-fg-default {',
' font-size: 16px !important;',
' color: rgba(255, 255, 255, 0.7) !important;',
' text-align: center !important;',
' width: auto !important;',
'}',
'/* 项目卡片 */',
'body.libtv-clean-home div.b768\\:mb-8:nth-of-type(4) div.md\\:w-auto {',
' width: 100% !important;',
' height: 320px !important;',
' max-width: 100% !important;',
' min-width: 0 !important;',
'}',
'body.libtv-clean-home div.b768\\:mb-8:nth-of-type(4) div.md\\:w-auto div.group {',
' width: 100% !important;',
' height: 100% !important;',
' border-radius: 16px !important;',
' overflow: hidden !important;',
' background-color: #1e1e1e !important;',
' border: 1px solid rgba(255, 255, 255, 0.06) !important;',
' transition: transform 0.3s var(--ease-out), box-shadow 0.3s var(--ease-out) !important;',
'}',
'body.libtv-clean-home div.b768\\:mb-8:nth-of-type(4) div.md\\:w-auto div.group:hover {',
' transform: translateY(-4px) !important;',
' box-shadow: 0 16px 40px rgba(0, 0, 0, 0.5) !important;',
'}',
'/* 封面 */',
'body.libtv-clean-home div.b768\\:mb-8:nth-of-type(4) div.md\\:w-auto div.group > div:nth-of-type(1),',
'body.libtv-clean-home div.b768\\:mb-8:nth-of-type(4) div.md\\:w-auto div.group div.rounded-xl,',
'body.libtv-clean-home div.b768\\:mb-8:nth-of-type(4) div.md\\:w-auto div.group div.rounded-xl div.relative {',
' width: 100% !important;',
' height: 210px !important;',
' border-radius: 0 !important;',
'}',
'/* 底部信息 */',
'body.libtv-clean-home div.b768\\:mb-8:nth-of-type(4) div.md\\:w-auto div.group div.items-top {',
' width: 100% !important;',
' height: 110px !important;',
' padding: 16px !important;',
' flex-direction: column !important;',
' align-items: flex-start !important;',
' gap: 8px !important;',
'}',
'body.libtv-clean-home div.b768\\:mb-8:nth-of-type(4) div.md\\:w-auto div.group div.items-top div.max-w-\\[calc\\(100\\%-34px\\)\\] {',
' width: 100% !important;',
' max-width: 100% !important;',
'}',
'body.libtv-clean-home div.b768\\:mb-8:nth-of-type(4) div.md\\:w-auto div.group div.items-top p.text-fg-default {',
' font-size: 15px !important;',
' font-weight: 500 !important;',
' line-height: 1.4 !important;',
' color: #f0f0f0 !important;',
' display: -webkit-box !important;',
' -webkit-line-clamp: 2 !important; line-clamp: 2 !important;',
' -webkit-box-orient: vertical !important;',
' overflow: hidden !important;',
'}',
'body.libtv-clean-home div.b768\\:mb-8:nth-of-type(4) div.md\\:w-auto div.group div.items-top p.text-xs {',
' font-size: 13px !important;',
' color: #888 !important;',
'}',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto {',
' max-width: 1800px !important;',
' padding: 0 24px !important;',
' margin: 0 auto !important;',
'}',
'/* 面包屑导航 */',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto > div.mb-6 {',
' margin: 28px 0 24px 0 !important;',
' justify-content: space-between !important;',
' align-items: center !important;',
'}',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto > div.mb-6 div.text-base {',
' font-size: 24px !important;',
' font-weight: 600 !important;',
'}',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto > div.mb-6 button.bg-btn-secondary {',
' background-color: rgba(255, 255, 255, 0.08) !important;',
' border: 1px solid rgba(255, 255, 255, 0.12) !important;',
' padding: 4px 16px !important;',
' border-radius: 8px !important;',
'}',
'/* 网格 */',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto body.libtv-clean-home div.b768\\:grid-cols-3 {',
' display: grid !important;',
' grid-template-columns: repeat(6, 1fr) !important;',
' gap: 16px !important;',
' width: 100% !important;',
' height: auto !important;',
'}',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto input.hidden {',
' display: none !important;',
'}',
'/* "最近项目" 分区标题 */',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto body.libtv-clean-home div.b768\\:grid-cols-3::before {',
' content: \'最近项目\' !important;',
' grid-column: 1 / -1 !important;',
' display: block !important;',
' font-size: 18px !important;',
' font-weight: 600 !important;',
' color: rgba(255, 255, 255, 0.9) !important;',
' padding: 4px 0 !important;',
' margin-bottom: 4px !important;',
'}',
'/* 开始创作卡片 - 280px */',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto div.aspect-video {',
' width: 100% !important;',
' min-width: 0 !important;',
' height: 280px !important;',
'}',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto div.create-new-project-card {',
' width: 100% !important;',
' height: 280px !important;',
' background-color: rgba(38, 38, 38, 0.4) !important;',
' border: 2px dashed rgba(255, 255, 255, 0.12) !important;',
' border-radius: 16px !important;',
' gap: 8px !important;',
' transition: background-color .3s var(--ease-out), border-color .3s var(--ease-out) !important;',
'}',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto div.create-new-project-card:hover {',
' background-color: rgba(38, 38, 38, 0.65) !important;',
' border-color: rgba(255, 255, 255, 0.25) !important;',
'}',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto div.create-new-project-card div.text-fg-default {',
' font-size: 16px !important;',
' text-align: center !important;',
'}',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto div.create-new-project-card svg,',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto div.create-new-project-card div.py-2\\.5 p {',
' display: block !important;',
'}',
'/* 项目卡片 - 280px */',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto body.libtv-clean-home div.b768\\:grid-cols-3 > div.group {',
' border-radius: 16px !important;',
' overflow: hidden !important;',
' background-color: #1a1a1a !important;',
' border: 1px solid rgba(255, 255, 255, 0.06) !important;',
' transition: transform 0.25s var(--ease-out), box-shadow 0.25s var(--ease-out) !important;',
' width: 100% !important;',
' min-width: 0 !important;',
' height: 280px !important;',
'}',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto body.libtv-clean-home div.b768\\:grid-cols-3 > div.group:hover {',
' transform: translateY(-3px) !important;',
' box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5) !important;',
'}',
'/* 封面 - 170px */',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto body.libtv-clean-home div.b768\\:grid-cols-3 > div.group > div:nth-of-type(1) {',
' width: 100% !important;',
' height: 170px !important;',
' overflow: hidden !important;',
'}',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto body.libtv-clean-home div.b768\\:grid-cols-3 > div.group div.aspect-video {',
' width: 100% !important;',
' height: 170px !important;',
'}',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto body.libtv-clean-home div.b768\\:grid-cols-3 > div.group img {',
' width: 100% !important;',
' height: 100% !important;',
' object-fit: cover !important;',
'}',
'/* 底部信息 - 110px */',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto body.libtv-clean-home div.b768\\:grid-cols-3 > div.group div.items-top {',
' width: 100% !important;',
' padding: 14px 16px !important;',
' height: 110px !important;',
'}',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto body.libtv-clean-home div.b768\\:grid-cols-3 > div.group div.items-top p.text-fg-default {',
' font-size: 13px !important;',
' font-weight: 500 !important;',
' color: #eee !important;',
' line-height: 1.3 !important;',
' white-space: nowrap !important;',
' overflow: hidden !important;',
' text-overflow: ellipsis !important;',
' display: -webkit-box !important;',
' -webkit-line-clamp: 2 !important; line-clamp: 2 !important;',
' -webkit-box-orient: vertical !important;',
'}',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto body.libtv-clean-home div.b768\\:grid-cols-3 > div.group div.items-top p.text-xs {',
' font-size: 11px !important;',
' color: #888 !important;',
'}',
'/* 分割线 + "所有项目" 标题 */',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto body.libtv-clean-home div.b768\\:grid-cols-3 > div.group:nth-of-type(12) {',
' position: relative !important;',
'}',
'body.libtv-clean-home div.b768\\:px-\\[10px\\] > div.mx-auto body.libtv-clean-home div.b768\\:grid-cols-3 > div.group:nth-of-type(12)::after {',
' content: \'所有项目\' !important;',
' position: absolute !important;',
' bottom: -52px !important;',
' left: -1200% !important;',
' width: 5000px !important;',
' padding-top: 28px !important;',
' font-size: 18px !important;',
' font-weight: 600 !important;',
' color: rgba(255, 255, 255, 0.9) !important;',
' border-top: 1px solid rgba(255, 255, 255, 0.10) !important;',
' pointer-events: none !important;',
'}',
'/* ⚙ 设置面板 — 主题跟随 */',
'.lt-settings { position:fixed; top:50%; left:50%; transform:translate(-50%,-50%); z-index:100002; width:440px; max-width:90vw; max-height:80vh; background:rgba(15,15,20,0.96); backdrop-filter:blur(32px) saturate(1.3); border:1px solid rgba(var(--accent-light-rgb),0.2); border-radius:14px; display:flex; flex-direction:column; overflow:hidden; box-shadow:0 16px 48px rgba(0,0,0,0.6); opacity:0; translate:0 16px; transition:opacity .3s var(--ease-out), translate .3s var(--ease-out); }',
'.lt-settings { opacity:1; translate:0 0; }',
'@starting-style { .lt-settings { opacity:0; translate:0 16px; } }',
'.lt-settings-head { display:flex; align-items:center; justify-content:space-between; padding:16px 18px 10px; border-bottom:1px solid rgba(var(--accent-light-rgb),0.1); font-size:14px; color:#e0e7ff; font-weight:600; flex-shrink:0; letter-spacing:0.02em; }',
'.lt-settings-close { cursor:pointer; font-size:16px; color:rgba(255,255,255,0.2); transition:color .15s var(--ease-out); line-height:1; }',
'.lt-settings-close:hover { color:var(--accent-light); }',
'.lt-settings-body { flex:1; overflow-y:auto; scrollbar-gutter:stable; padding:4px 18px 18px; content-visibility:auto; contain-intrinsic-size:400px; }',
'.lt-settings-sec { margin-top:16px; }',
'.lt-settings-stitle { font-size:11px; color:rgba(var(--accent-light-rgb),0.5); margin-bottom:8px; letter-spacing:0.04em; text-transform:uppercase; text-wrap:balance; }',
'.lt-settings-toggle { display:flex; align-items:center; justify-content:space-between; padding:8px 0; cursor:pointer; border-bottom:1px solid rgba(255,255,255,0.03); }',
'.lt-settings-toggle span:first-child { font-size:13px; color:rgba(255,255,255,0.55); }',
'.lt-settings-switch { width:36px; height:20px; border-radius:10px; background:rgba(255,255,255,0.1); position:relative; transition:background .2s var(--ease-out); flex-shrink:0; }',
'.lt-settings-switch::after { content:\'\'; position:absolute; top:2px; left:2px; width:16px; height:16px; border-radius:50%; background:#fff; transition:transform .2s var(--ease-out); }',
'.lt-settings-switch.on { background:var(--accent-light); }',
'.lt-settings-switch.on::after { transform:translateX(16px); }',
'.lt-settings-row { display:flex; align-items:center; gap:8px; margin-bottom:6px; }',
'.lt-settings-row label { font-size:11px; color:rgba(255,255,255,0.3); min-width:60px; flex-shrink:0; }',
'.lt-settings-inp { flex:1; background:rgba(255,255,255,0.04); border:1px solid rgba(var(--accent-light-rgb),0.12); border-radius:6px; padding:7px 10px; font:12px/1.4 -apple-system,sans-serif; color:#d4d4d8; outline:none; transition:border-color .12s; }',
'.lt-settings-inp:focus { border-color:var(--accent-light); }',
'.lt-settings-status { font-size:11px; color:rgba(74,222,128,0.7); margin-left:8px; }',
'.lt-settings-dlist { margin-bottom:8px; }',
'.lt-settings-ditem { display:flex; align-items:center; gap:6px; padding:5px 0; border-bottom:1px solid rgba(255,255,255,0.02); font-size:11px; }',
'.lt-settings-ditem span:first-child { flex:1; color:rgba(255,255,255,0.35); }',
'.lt-settings-ditem span:nth-child(2) { color:rgba(255,255,255,0.15); min-width:40px; text-align:right; }',
'.lt-settings-dclear { background:none; border:none; color:rgba(239,68,68,0.4); cursor:pointer; font-size:10px; padding:1px 6px; border-radius:3px; transition:background .12s var(--ease-out), color .12s var(--ease-out), transform .12s var(--ease-out); }',
'.lt-settings-dclear:hover { background:rgba(239,68,68,0.12); color:#f87171; }',
'.lt-settings-dclear:active { transform:scale(0.93); }',
'.lt-settings-about { font-size:11px; color:rgba(255,255,255,0.2); line-height:1.6; margin-top:4px; }',
'.lt-settings-cpbtns { display:flex; gap:6px; margin-top:8px; }',
'.lt-settings-btn { display:inline-flex; align-items:center; gap:4px; padding:6px 12px; border-radius:7px; border:none; cursor:pointer; font:12px/1.4 -apple-system,sans-serif; transition:background .15s var(--ease-out), color .15s var(--ease-out), box-shadow .15s var(--ease-out), transform .15s var(--ease-out); }',
'.lt-settings-btn:active { transform:scale(0.97); }',
'.lt-settings-btn-primary { background:var(--accent); color:#fff; }',
'.lt-settings-btn-primary:hover { background:var(--accent-light); }',
'.lt-settings-btn-ghost { background:rgba(255,255,255,0.05); color:rgba(255,255,255,0.55); border:1px solid rgba(255,255,255,0.06); }',
'.lt-settings-btn-ghost:hover { background:rgba(255,255,255,0.1); color:#fff; }',
'.lt-settings-btn-sm { padding:4px 10px; font-size:11px; }',
'#libtv-welcome-overlay { position:fixed;inset:0;z-index:100010;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0.5);backdrop-filter:blur(8px);opacity:0;transition:opacity .35s var(--ease-out); }',
'#libtv-welcome-overlay { opacity:1; }',
'@starting-style { #libtv-welcome-overlay { opacity:0; } }',
'#libtv-welcome { width:520px;max-width:90vw;max-height:82vh;overflow-y:auto;scrollbar-gutter:stable;background:color-mix(in oklab, #0a0a12 94%, transparent);backdrop-filter:blur(40px) saturate(1.5);border:1px solid color-mix(in oklab, var(--accent-light) 20%, transparent);border-radius:20px;padding:36px 36px 28px;box-shadow:0 0 1px color-mix(in oklab, var(--accent-light) 50%, transparent),0 0 32px color-mix(in oklab, var(--accent-light) 6%, transparent),0 32px 80px color-mix(in oklab, #000 60%, transparent);opacity:0;translate:0 24px;scale:0.96;transition:opacity .4s var(--ease-out), translate .4s var(--ease-out), scale .4s var(--ease-out);color:#d4d4d8;font:14px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;position:relative; }',
'#libtv-welcome { opacity:1; translate:0 0; scale:1; }',
'@starting-style { #libtv-welcome { opacity:0; translate:0 24px; scale:0.96; } }',
'#libtv-welcome::-webkit-scrollbar{width:4px}#libtv-welcome::-webkit-scrollbar-track{background:transparent}#libtv-welcome::-webkit-scrollbar-thumb{background:rgba(255,255,255,0.08);border-radius:2px}',
'#libtv-welcome h1{font-size:22px;font-weight:700;color:var(--accent-light);margin:0 0 2px;letter-spacing:-0.01em;text-wrap:balance}',
'#libtv-welcome .sub{font-size:13px;color:rgba(255,255,255,0.3);margin-bottom:28px}',
'#libtv-welcome .sec-title{font-size:11px;font-weight:600;color:rgba(var(--accent-light-rgb),0.5);text-transform:uppercase;letter-spacing:0.08em;margin-bottom:10px;text-wrap:balance}',
'#libtv-welcome .sec-title:not(:first-of-type){margin-top:24px}',
'#libtv-welcome .w-close{position:absolute;top:14px;right:16px;width:28px;height:28px;border-radius:8px;border:none;background:rgba(255,255,255,0.04);color:rgba(255,255,255,0.3);cursor:pointer;font:16px/1 sans-serif;display:flex;align-items:center;justify-content:center;transition:background .15s var(--ease-out), color .15s var(--ease-out), transform .15s var(--ease-out)}',
'#libtv-welcome .w-close:hover{background:rgba(255,255,255,0.1);color:#fff}',
'#libtv-welcome .w-close:active{transform:scale(0.9)}',
'#libtv-welcome .w-grid{display:grid;grid-template-columns:1fr 1fr;gap:5px 20px}',
'#libtv-welcome .w-grid .item{display:flex;align-items:center;gap:10px;font-size:13px;color:rgba(255,255,255,0.5);padding:5px 0}',
'#libtv-welcome .w-grid .item kbd{display:inline-flex;align-items:center;justify-content:center;min-width:28px;height:24px;padding:0 7px;border-radius:5px;background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.08);font:11px/1 ui-monospace,SFMono-Regular,monospace;color:var(--accent-light);font-weight:600}',
'#libtv-welcome .w-feats{display:flex;flex-wrap:wrap;gap:8px}',
'#libtv-welcome .w-feats span{padding:5px 14px;border-radius:8px;background:color-mix(in oklab, var(--accent-light) 7%, transparent);border:1px solid rgba(var(--accent-light-rgb),0.1);font-size:12px;color:rgba(255,255,255,0.65)}',
'#libtv-welcome .w-tips{margin-top:20px;padding:14px 18px;border-radius:12px;background:color-mix(in oklab, var(--accent-light) 3%, transparent);border:1px solid rgba(var(--accent-light-rgb),0.07)}',
'#libtv-welcome .w-tips p{margin:2px 0;font-size:12px;color:rgba(255,255,255,0.4)}',
'#libtv-welcome .w-tips p:before{content:"\\01f4a1 ";opacity:.6}',
'#libtv-welcome .w-actions{margin-top:24px;display:flex;justify-content:flex-end}',
'#libtv-welcome .w-btn{padding:10px 36px;border-radius:10px;border:none;background:linear-gradient(135deg,var(--accent),var(--accent-light));color:#fff;font-size:14px;font-weight:600;cursor:pointer;transition:background .15s var(--ease-out), box-shadow .15s var(--ease-out), transform .15s var(--ease-out);box-shadow:0 0 20px rgba(var(--accent-light-rgb),0.3)}',
'#libtv-welcome .w-btn:hover{transform:scale(1.04);box-shadow:0 0 28px rgba(var(--accent-light-rgb),0.45)}',
'#libtv-welcome .w-btn:active{transform:scale(0.97)}',
'.ltp-ai-input { width:100%;box-sizing:border-box;min-height:48px;max-height:160px;background:rgba(255,255,255,0.03);border:1px solid rgba(var(--accent-light-rgb),0.12);border-radius:8px;padding:8px 10px;font:12px/1.5 -apple-system,sans-serif;color:#d4d4d8;outline:none;resize:none;transition:border-color .15s;overflow:hidden; }',
'.ltp-ai-input:focus { border-color:rgba(var(--accent-light-rgb),0.35); }',
'.ltp-ai-input::placeholder { color:rgba(255,255,255,0.15); }',
'.ltp-ai-tasks { display:flex;flex-wrap:wrap;gap:4px;margin-top:10px; }',
'.ltp-ai-task { padding:4px 10px;border-radius:6px;font-size:11px;cursor:pointer;color:rgba(255,255,255,0.35);background:rgba(255,255,255,0.03);border:1px solid rgba(255,255,255,0.04);transition:background .12s var(--ease-out), color .12s var(--ease-out), border-color .12s var(--ease-out), transform .12s var(--ease-out);user-select:none; }',
'.ltp-ai-task:hover { color:rgba(255,255,255,0.6);background:color-mix(in oklab, var(--accent-light) 4%, transparent);border-color:rgba(var(--accent-light-rgb),0.08); }',
'.ltp-ai-task:active { transform:scale(0.97); }',
'.ltp-ai-task.active { color:var(--accent-light);background:color-mix(in oklab, var(--accent-light) 10%, transparent);border-color:rgba(var(--accent-light-rgb),0.2); }',
'.ltp-ai-custom { margin-top:8px;overflow:hidden;transition:max-height .2s var(--ease-out); }',
'.ltp-ai-sys { width:100%;box-sizing:border-box;min-height:56px;max-height:120px;background:rgba(255,255,255,0.02);border:1px solid rgba(var(--accent-light-rgb),0.08);border-radius:6px;padding:6px 10px;font:11px/1.5 -apple-system,sans-serif;color:#b0b0b8;outline:none;resize:none;overflow:hidden; }',
'.ltp-ai-sys:focus { border-color:rgba(var(--accent-light-rgb),0.25); }',
'.ltp-ai-sys::placeholder { color:rgba(255,255,255,0.1); }',
'.ltp-ai-actions { display:flex;gap:6px;margin-top:10px; }',
'.ltp-ai-result { margin-top:10px;border-radius:8px;background:rgba(255,255,255,0.02);border:1px solid rgba(var(--accent-light-rgb),0.06);overflow:hidden; }',
'.ltp-ai-result .ai-sec { padding:8px 10px; }',
'.ltp-ai-result .ai-sep { height:1px;background:color-mix(in oklab, var(--accent-light) 6%, transparent); }',
'.ltp-ai-result .ai-label { font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:0.06em;color:rgba(255,255,255,0.2);margin-bottom:4px; }',
'.ltp-ai-result .ai-text { font-size:12px;color:#d4d4d8;white-space:pre-wrap;word-break:break-word;line-height:1.5; }',
'.ltp-ai-result .ai-text.ai-orig { color:rgba(255,255,255,0.35); }',
'.ltp-ai-result .ai-res-actions { display:flex;gap:6px;padding:6px 10px 10px; }',
'.ltp-ai-preset-btn { padding:3px 10px;border-radius:5px;font-size:10px;cursor:pointer;background:color-mix(in oklab, var(--accent-light) 8%, transparent);color:var(--accent-light);border:none;transition:background .12s var(--ease-out), color .12s var(--ease-out), transform .12s var(--ease-out); }',
'.ltp-ai-preset-btn:hover { background:color-mix(in oklab, var(--accent-light) 18%, transparent); }',
'.ltp-ai-preset-btn:active { transform:scale(0.95); }',
'.ltp-ai-preset-list { margin-top:6px;display:flex;flex-direction:column;gap:3px; }',
'.ltp-ai-preset-item { display:flex;align-items:center;justify-content:space-between;padding:4px 8px;border-radius:4px;font-size:11px;color:rgba(255,255,255,0.5);background:rgba(255,255,255,0.02); }',
'.ltp-ai-preset-item:hover { background:rgba(255,255,255,0.04);color:rgba(255,255,255,0.7); }',
'.ltp-ai-preset-del { cursor:pointer;padding:2px 5px;border-radius:3px;font-size:10px;color:rgba(255,100,100,0.5); }',
'.ltp-ai-preset-del:hover { color:rgba(255,100,100,0.8);background:rgba(255,100,100,0.1); }',
'.ltp-ai-task.cp { color:rgba(255,255,255,0.25); }',
'.ltp-ai-task.cp::before { content:"\\2022";margin-right:3px; }',
'.ltp-ai-task.cp:hover { color:rgba(255,255,255,0.5); }',
'.ltp-ai-task.cp.active { color:var(--accent-light); }',
'',
'/* ── standalone AI panel status line ── */',
'',
''].join('\n');
document.head.appendChild(style);
/* =========================================================
* 2. FPS 面板
* ========================================================= */
var fpsEl = document.createElement('div');
fpsEl.id = 'libtv-fps';
fpsEl.innerHTML = '<span class="fps-val">--fps</span><span class="fps-sep">|</span><span class="fps-zoom">100%</span><span class="fps-sep">|</span><span class="fps-cnt">-节点</span><span class="fps-sep fps-flag-sep">|</span><span class="fps-flags"></span>';
var fpsVal = fpsEl.querySelector('.fps-val');
var fpsZoom = fpsEl.querySelector('.fps-zoom');
var fpsCnt = fpsEl.querySelector('.fps-cnt');
var fpsFlags = fpsEl.querySelector('.fps-flags');
var fpsFlagSep = fpsEl.querySelector('.fps-flag-sep');
document.body.appendChild(fpsEl);
var helpEl = document.createElement('div');
helpEl.id = 'libtv-help';
helpEl.classList.add('libtv-hide');
helpEl.textContent = '画布\n G 网格 T 性能 H 隐藏 L 连线\n C 全链 R 直角 X 专注\n工具\n F 搜索 P 提示词 N 清爽 ? 帮助';
document.body.appendChild(helpEl);
function _showHelp(){ if(helpEl) helpEl.classList.remove('libtv-hide'); }
function _hideHelp(){ if(helpEl && !helpEl.classList.contains('libtv-pin')) helpEl.classList.add('libtv-hide'); }
if(fpsEl){ fpsEl.addEventListener('mouseenter', _showHelp); fpsEl.addEventListener('mouseleave', _hideHelp); }
var _fc = 0, _lastT = performance.now(), _fps = 0;
// FPS 拖拽
(function(){
var dx = 0, dy = 0, dragging = false;
fpsEl.addEventListener('mousedown', function(e){
dragging = true;
dx = e.clientX - fpsEl.offsetLeft;
dy = e.clientY - fpsEl.offsetTop;
e.preventDefault();
});
document.addEventListener('mousemove', function(e){
if(!dragging) return;
var l = e.clientX - dx, t = e.clientY - dy;
var pw = fpsEl.offsetWidth, ph = fpsEl.offsetHeight;
l = Math.max(4, Math.min(l, window.innerWidth - pw - 4));
t = Math.max(4, Math.min(t, window.innerHeight - ph - 4));
fpsEl.style.left = l + 'px';
fpsEl.style.top = t + 'px';
fpsEl.style.bottom = 'auto';
fpsEl.style.right = 'auto';
});
document.addEventListener('mouseup', function(){
dragging = false;
});
})();
function fpsLoop(now){
if (document.hidden) { _lastT = now; requestAnimationFrame(fpsLoop); return; }
_fc++;
if (now - _lastT >= 1000){
_fps = Math.round(_fc * 1000 / (now - _lastT));
var flags = '', zoom = '';
var bg = document.querySelector('.react-flow__background');
if (bg && bg.classList.contains('perf-no-grid')) flags += '<span class="fps-flag">■</span>';
if (document.body.classList.contains('perf-mode')) flags += '<span class="fps-flag">◆</span>';
if (document.body.classList.contains('perf-hide-imgs')) flags += '<span class="fps-flag">⊙</span>';
var edges = document.querySelector('.react-flow__edges');
if (edges && edges.classList.contains('perf-hide-edges')) flags += '<span class="fps-flag">╳</span>';
if (document.body.classList.contains('libtv-chain')) flags += '<span class="fps-flag">◉</span>';
if (document.body.classList.contains('libtv-autochain')) flags += '<span class="fps-flag">⟷</span>';
if (document.body.classList.contains('libtv-focus')) flags += '<span class="fps-flag">◎</span>';
if (document.body.classList.contains('libtv-step-edges')) flags += '<span class="fps-flag">└</span>';
if (document.body.classList.contains('libtv-clean-home')) flags += '<span class="fps-flag">♡</span>';
var nTotal = document.querySelectorAll('.react-flow__node').length;
// 缩放级别
var vp = document.querySelector('.react-flow__viewport');
if(vp){
var m = (vp.style.transform || '').match(/scale\(([^)]+)\)/);
if(m) zoom = Math.round(parseFloat(m[1]) * 100) + '%';
}
fpsVal.textContent = _fps + 'fps';
fpsZoom.textContent = zoom || '';
fpsZoom.style.display = zoom ? '' : 'none';
fpsCnt.textContent = nTotal + '节点';
fpsFlags.innerHTML = flags;
fpsFlagSep.style.display = flags ? '' : 'none';
_fc = 0;
_lastT = now;
}
requestAnimationFrame(fpsLoop);
}
requestAnimationFrame(fpsLoop);
/* =========================================================
* 流动光效 — 全屏 SVG overlay,不碰节点 DOM
* ========================================================= */
(function(){
var svgNS='http://www.w3.org/2000/svg';
var overlay=document.createElementNS(svgNS,'svg');
overlay.id='libtv-glow';
overlay.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;pointer-events:none;z-index:50;';
document.body.appendChild(overlay);
var glowDefs=document.createElementNS(svgNS,'defs');
var filter=document.createElementNS(svgNS,'filter');
filter.setAttribute('id','glowBlur');
filter.setAttribute('x','-50%');filter.setAttribute('y','-50%');
filter.setAttribute('width','200%');filter.setAttribute('height','200%');
var blur=document.createElementNS(svgNS,'feGaussianBlur');
blur.setAttribute('stdDeviation','6');
filter.appendChild(blur);
glowDefs.appendChild(filter);
overlay.appendChild(glowDefs);
var animGroup=document.createElementNS(svgNS,'g');
overlay.appendChild(animGroup);
var prevNodes=new Set();
var animRaf=null;
function readAccent(){
var n=document.querySelector('.react-flow__node');
if(!n)return{accent:'#6366f1',accentLight:'#818cf8'};
var s=getComputedStyle(n);
return{
accent:s.getPropertyValue('--accent').trim()||'#6366f1',
accentLight:s.getPropertyValue('--accent-light').trim()||'#818cf8'
};
}
function buildFrame(){
while(animGroup.firstChild)animGroup.removeChild(animGroup.firstChild);
var nodes=document.querySelectorAll('.react-flow__node.selected');
if(!nodes.length){prevNodes.clear();return;}
var c=readAccent();
var now=performance.now();
nodes.forEach(function(node){
var r=node.getBoundingClientRect();
var w=r.width,h=r.height;
var cssW=node.offsetWidth||w,cssH=node.offsetHeight||h;
var zoomX=cssW?w/cssW:1,zoomY=cssH?h/cssH:1;
var zoom=Math.min(zoomX,zoomY);
var cssBr=parseFloat(getComputedStyle(node).borderRadius)||12;
var br=cssBr*zoom;
var perim=2*(w+h);
var dash=Math.round(perim*0.12),gap=perim-dash;
function mkRect(stroke,sw){
var el=document.createElementNS(svgNS,'rect');
el.setAttribute('x',0);el.setAttribute('y',0);
el.setAttribute('width',w);el.setAttribute('height',h);
el.setAttribute('rx',br);el.setAttribute('fill','none');
el.setAttribute('stroke',stroke);el.setAttribute('stroke-width',sw);
el.setAttribute('stroke-dasharray',dash+' '+gap);
return el;
}
var g1=mkRect(c.accentLight,8);
g1.setAttribute('filter','url(#glowBlur)');
var g2=mkRect('#fff',2);
var p=((now%7000)/7000);
var off=Math.round(p*perim);
g1.setAttribute('stroke-dashoffset',off);
g2.setAttribute('stroke-dashoffset',off);
var wrap=document.createElementNS(svgNS,'g');
wrap.setAttribute('transform','translate('+r.left+','+r.top+')');
wrap.appendChild(g1);
wrap.appendChild(g2);
animGroup.appendChild(wrap);
});
}
function loop(){buildFrame();animRaf=requestAnimationFrame(loop);}
loop();
})();
/* =========================================================
* AI Agent Drawer 适配 — 动态读宽度右推
* ========================================================= */
(function(){
var drawerSel = '.canvas-agent-drawer-chat';
function drawerEl(){ return document.querySelector(drawerSel) || document.querySelector('.mantine-Drawer-content.canvas-agent-drawer-chat'); }
function adjust(){
var el = drawerEl(), dw = el ? el.offsetWidth : 0;
var fps = document.getElementById('libtv-fps');
var pbtn = document.getElementById('libtv-pbtn');
if(dw > 0 && el.getBoundingClientRect().right > window.innerWidth / 2){
/* Drawer on right — shift our elements if they're still in default right position (not dragged) */
var gap = 16;
[fps, pbtn].forEach(function(x){
if(x && !x.style.left){
if(!x._dd){ x._dd = true; x._dr = x.style.right; x._db = x.style.bottom; }
x.style.right = (dw + gap + (x === pbtn ? 46 : 0)) + 'px';
}
});
} else if(dw === 0){
[fps, pbtn].forEach(function(x){
if(x && x._dd){ x.style.right = x._dr; x.style.bottom = x._db; delete x._dd; delete x._dr; delete x._db; }
});
}
}
var obs = new MutationObserver(function(){
if(obs._t) clearTimeout(obs._t);
obs._t = setTimeout(adjust, 50);
});
obs.observe(document.body, { childList: true, subtree: true });
window.addEventListener('resize', function(){
if(drawerEl()) setTimeout(adjust, 50);
});
setTimeout(adjust, 500);
})();
/* =========================================================
* 3. 快捷键 + 状态持久化
* ========================================================= */
var hook;
try {
hook = document.createElement('script');
hook.textContent = ['(function(){',
' function _ltClearChain(){',
' document.body.classList.remove("libtv-chain");',
' document.querySelectorAll(".libtv-chain-node,.libtv-chain-edge").forEach(function(e){',
' e.classList.remove("libtv-chain-node","libtv-chain-edge");',
' });',
' };',
' var _ltAutoChain=localStorage.getItem("_lt_autochain")==="1";',
' if(_ltAutoChain) document.body.classList.add("libtv-autochain");',
' var _ltGraphCache=null;',
' function _ltGetGraph(){',
' if(!_ltGraphCache){',
' var up={},down={};',
' document.querySelectorAll(".react-flow__edge").forEach(function(e){',
' var lb=e.getAttribute("aria-label")||"",m=lb.match(/^Edge from (\\S+) to (\\S+)$/);',
' if(!m)return;',
' var s=m[1],t=m[2];',
' if(!down[s])down[s]=[]; down[s].push(t);',
' if(!up[t])up[t]=[]; up[t].push(s);',
' });',
' _ltGraphCache={up:up,down:down};',
' }',
' return _ltGraphCache;',
' }',
' function _ltInvalidateGraph(){_ltGraphCache=null;}',
' document.addEventListener("click",function(e){',
' _ltInvalidateGraph();',
' if(!_ltAutoChain) return;',
' if(!e.target.closest(".react-flow__node")){',
' _ltClearChain(); return;',
' }',
' setTimeout(function(){',
' if(document.querySelector(".react-flow__node.selected")){',
' var g=_ltGetGraph(),sid=document.querySelector(".react-flow__node.selected").getAttribute("data-id")||"";',
' if(!sid||!g)return;',
' var v={},q=[sid]; v[sid]=1;',
' while(q.length){',
' var c=q.shift();',
' (g.up[c]||[]).forEach(function(n){if(!v[n]){v[n]=1;q.push(n);}});',
' (g.down[c]||[]).forEach(function(n){if(!v[n]){v[n]=1;q.push(n);}});',
' }',
' document.querySelectorAll(".react-flow__node").forEach(function(n){',
' n.classList[(v[n.getAttribute("data-id")||n.id||""])?"add":"remove"]("libtv-chain-node");',
' });',
' document.querySelectorAll(".react-flow__edge").forEach(function(e){',
' var lb=e.getAttribute("aria-label")||"",m=lb.match(/^Edge from (\\S+) to (\\S+)$/);',
' e.classList[(m&&v[m[1]]&&v[m[2]])?"add":"remove"]("libtv-chain-edge");',
' });',
' document.body.classList.add("libtv-chain");',
' }',
' }, 50);',
' }, true);',
' document.addEventListener("mouseover",function(e){',
' var n=e.target.closest(".react-flow__node");',
' if(!n)return;',
' var id=n.getAttribute("data-id")||n.id||""; if(!id)return;',
' document.querySelectorAll(".react-flow__edge").forEach(function(ed){',
' var lb=ed.getAttribute("aria-label")||"",m=lb.match(/^Edge from (\\S+) to (\\S+)$/);',
' if(m&&(m[1]===id||m[2]===id)) ed.classList.add("libtv-edge-active");',
' });',
' },true);',
' document.addEventListener("mouseout",function(e){',
' if(!e.target.closest(".react-flow__node"))return;',
' document.querySelectorAll(".react-flow__edge.libtv-edge-active").forEach(function(ed){',
' ed.classList.remove("libtv-edge-active");',
' });',
' },true);',
' function _ltSearch(){',
' var overlay=document.getElementById("libtv-search");',
' if(overlay){ overlay.remove(); return; }',
' var items=[];',
' document.querySelectorAll(".react-flow__node").forEach(function(n){',
' var id=n.getAttribute("data-id")||n.id||"";',
' if(!id)return;',
' var txt=(n.textContent||"").trim().split("\\n")[0].trim().slice(0,50);',
' items.push({id:id,name:txt||id,el:n});',
' });',
' var div=document.createElement("div");',
' div.id="libtv-search";',
' div.style.cssText="position:fixed;top:60px;right:20px;z-index:99999;background:rgba(0,0,0,0.9);border-radius:10px;padding:10px;width:280px;max-height:60vh;overflow:auto;font:12px/1.5 sans-serif;";',
' div.innerHTML="<input id=\\"lt-search-input\\" placeholder=\\"搜索节点...\\" style=\\"width:100%;box-sizing:border-box;padding:6px 10px;border-radius:6px;border:1px solid rgba(255,255,255,0.1);background:rgba(255,255,255,0.06);color:#fff;font:12px/1.5 sans-serif;outline:none;\\"><div id=\\"lt-search-results\\" style=\\"margin-top:6px;\\"></div>";',
' document.body.appendChild(div);',
' function render(q){',
' var q=(q||"").toLowerCase(),html="";',
' items.forEach(function(it){',
' if(!q||it.name.toLowerCase().indexOf(q)>=0||it.id.toLowerCase().indexOf(q)>=0){',
' html+="<div data-id=\\""+_ltEsc(it.id)+"\\" style=\\"padding:4px 8px;border-radius:4px;cursor:pointer;color:#ccc;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\\">"+_ltEsc(it.name)+"</div>";',
' }',
' });',
' document.getElementById("lt-search-results").innerHTML=html;',
' }',
' render("");',
' document.getElementById("lt-search-input").addEventListener("input",function(){',
' render(this.value);',
' });',
' document.getElementById("lt-search-results").addEventListener("click",function(e){',
' var item=e.target.closest("[data-id]");',
' if(!item)return;',
' var id=item.getAttribute("data-id");',
' var el=document.querySelector(\'.react-flow__node[data-id="\'+id+\'"],.react-flow__node#\'+id);',
' if(el){',
' el.scrollIntoView({behavior:"smooth",block:"center"});',
' el.click();',
' }',
' div.remove();',
' });',
' document.getElementById("lt-search-input").focus();',
' }',
' var _ltPrompts=JSON.parse(localStorage.getItem("_lt_prompts")||"[]");',
' if(!_ltPrompts.length){',
' _ltPrompts=[',
' {id:"d1",name:"产品摄影",category:"图像",content:"Product photography on {background=white} background, {lighting=studio lighting}, high detail, 8K, sharp focus, {extra}"},',
' {id:"d2",name:"电影镜头",category:"图像",content:"Cinematic shot, {lens=anamorphic} lens, {lighting=dramatic} lighting, shallow depth of field, {style}"},',
' {id:"d3",name:"动画-吉卜力风",category:"图像",content:"Studio Ghibli style, hand-drawn animation, {palette=soft pastel} colors, {atmosphere=whimsical}"},',
' {id:"d4",name:"产品展示-环绕",category:"视频",content:"Smooth 360 orbit around {subject=product}, {lighting=soft studio} lighting, slow motion, {extra}"},',
' {id:"d5",name:"风光-延时",category:"视频",content:"Timelapse, {time=golden hour}, {sky=dramatic clouds}, warm tones, smooth transition, {extra}"},',
' ];',
' try{localStorage.setItem("_lt_prompts",JSON.stringify(_ltPrompts));}catch(e){}',
' }',
' var _ltPromptAPI=JSON.parse(localStorage.getItem("_lt_prompt_api")||"{\\"url\\":\\"https://api.deepseek.com/chat/completions\\",\\"model\\":\\"deepseek-v4-flash\\"}");',
' if(!_ltPromptAPI.url){_ltPromptAPI.url="https://api.deepseek.com/chat/completions";_ltPromptAPI.model=_ltPromptAPI.model||"deepseek-v4-flash";}',
' var _ltThemePresets=[',
' {n:"靛蓝",a:"#6366f1",l:"#818cf8",d:"#4f46e5",ar:"99,102,241",alr:"129,140,248",cb:"#0e0e12",gc:"rgba(255,255,255,0.12)",nb:"#16162a",nc:"rgba(129,140,248,0.15)",ec:"rgba(129,140,248,0.15)",cat:"dark"},',
' {n:"翡翠",a:"#10b981",l:"#34d399",d:"#059669",ar:"16,185,129",alr:"52,211,153",cb:"#0b120f",gc:"rgba(255,255,255,0.12)",nb:"#12261c",nc:"rgba(52,211,153,0.15)",ec:"rgba(52,211,153,0.15)",cat:"dark"},',
' {n:"玫瑰",a:"#f43f5e",l:"#fb7185",d:"#e11d48",ar:"244,63,94",alr:"251,113,133",cb:"#120b0d",gc:"rgba(255,255,255,0.12)",nb:"#261318",nc:"rgba(251,113,133,0.15)",ec:"rgba(251,113,133,0.15)",cat:"dark"},',
' {n:"琥珀",a:"#f59e0b",l:"#fbbf24",d:"#d97706",ar:"245,158,11",alr:"251,191,36",cb:"#12100a",gc:"rgba(255,255,255,0.12)",nb:"#261e12",nc:"rgba(251,191,36,0.15)",ec:"rgba(251,191,36,0.15)",cat:"dark"},',
' {n:"天蓝",a:"#0ea5e9",l:"#38bdf8",d:"#0284c7",ar:"14,165,233",alr:"56,189,248",cb:"#0a1013",gc:"rgba(255,255,255,0.12)",nb:"#111f28",nc:"rgba(56,189,248,0.15)",ec:"rgba(56,189,248,0.15)",cat:"dark"},',
' {n:"紫色",a:"#8b5cf6",l:"#a78bfa",d:"#7c3aed",ar:"139,92,246",alr:"167,139,250",cb:"#0e0c14",gc:"rgba(255,255,255,0.12)",nb:"#1b1730",nc:"rgba(167,139,250,0.15)",ec:"rgba(167,139,250,0.15)",cat:"dark"},',
' {n:"暗夜绿",a:"#22c55e",l:"#4ade80",d:"#16a34a",ar:"34,197,94",alr:"74,222,128",cb:"#080c0a",gc:"rgba(255,255,255,0.08)",nb:"#0f1a14",nc:"rgba(74,222,128,0.12)",ec:"rgba(74,222,128,0.12)",cat:"dark"},',
' {n:"赛博朋克",a:"#f472b6",l:"#fb923c",d:"#e11d48",ar:"244,114,182",alr:"251,146,60",cb:"#0a0a14",gc:"rgba(255,255,255,0.08)",nb:"#14142a",nc:"rgba(244,114,182,0.15)",ec:"rgba(244,114,182,0.15)",cat:"dark"},',
' {n:"暖棕复古",a:"#d97706",l:"#f59e0b",d:"#b45309",ar:"217,119,6",alr:"245,158,11",cb:"#0f0c08",gc:"rgba(255,255,255,0.08)",nb:"#1c160e",nc:"rgba(245,158,11,0.12)",ec:"rgba(245,158,11,0.12)",cat:"dark"},',
' {n:"极简白",a:"#6366f1",l:"#818cf8",d:"#4f46e5",ar:"99,102,241",alr:"129,140,248",cb:"#f5f5f0",gc:"rgba(0,0,0,0.06)",nb:"#ffffff",nc:"rgba(99,102,241,0.12)",ec:"rgba(0,0,0,0.08)",cat:"light"},',
' {n:"灰银",a:"#6b7280",l:"#9ca3af",d:"#4b5563",ar:"107,114,128",alr:"156,163,175",cb:"#e8e8e5",gc:"rgba(0,0,0,0.06)",nb:"#f0f0ed",nc:"rgba(0,0,0,0.1)",ec:"rgba(0,0,0,0.08)",cat:"light"},',
' {n:"暖白",a:"#d97706",l:"#f59e0b",d:"#b45309",ar:"217,119,6",alr:"245,158,11",cb:"#f0ebe3",gc:"rgba(0,0,0,0.06)",nb:"#faf5ed",nc:"rgba(217,119,6,0.1)",ec:"rgba(0,0,0,0.08)",cat:"light"},',
' {n:"高对比",a:"#ffffff",l:"#e0e0e0",d:"#ffffff",ar:"255,255,255",alr:"224,224,224",cb:"#000000",gc:"rgba(255,255,255,0.15)",nb:"#1a1a1a",nc:"rgba(255,255,255,0.2)",ec:"rgba(255,255,255,0.2)",cat:"high"},',
' {n:"高对比蓝",a:"#00bfff",l:"#87ceeb",d:"#00bfff",ar:"0,191,255",alr:"135,206,235",cb:"#000000",gc:"rgba(0,191,255,0.1)",nb:"#0a0a14",nc:"rgba(0,191,255,0.2)",ec:"rgba(0,191,255,0.2)",cat:"high"},',
' {n:"深海蓝",a:"#0891b2",l:"#22d3ee",d:"#0e7490",ar:"8,145,178",alr:"34,211,238",cb:"#0a0e12",gc:"rgba(255,255,255,0.10)",nb:"#0e1a24",nc:"rgba(34,211,238,0.12)",ec:"rgba(34,211,238,0.12)",cat:"dark"},',
' {n:"石墨",a:"#6b7280",l:"#9ca3af",d:"#4b5563",ar:"107,114,128",alr:"156,163,175",cb:"#0c0c0e",gc:"rgba(255,255,255,0.08)",nb:"#151518",nc:"rgba(255,255,255,0.08)",ec:"rgba(255,255,255,0.08)",cat:"dark"},',
' {n:"咖啡",a:"#a16207",l:"#ca8a04",d:"#854d0e",ar:"161,98,7",alr:"202,138,4",cb:"#0e0a06",gc:"rgba(255,255,255,0.07)",nb:"#1a1208",nc:"rgba(202,138,4,0.12)",ec:"rgba(202,138,4,0.10)",cat:"dark"},',
' {n:"极光",a:"#34d399",l:"#6ee7b7",d:"#10b981",ar:"52,211,153",alr:"110,231,183",cb:"#060e0b",gc:"rgba(255,255,255,0.07)",nb:"#0e1a14",nc:"rgba(52,211,153,0.10)",ec:"rgba(110,231,183,0.12)",cat:"dark"},',
' {n:"午夜蓝",a:"#3b82f6",l:"#60a5fa",d:"#2563eb",ar:"59,130,246",alr:"96,165,250",cb:"#060810",gc:"rgba(255,255,255,0.06)",nb:"#0c1020",nc:"rgba(59,130,246,0.12)",ec:"rgba(59,130,246,0.10)",cat:"dark"},',
' {n:"暗橙",a:"#ea580c",l:"#f97316",d:"#c2410c",ar:"234,88,12",alr:"249,115,22",cb:"#0e0806",gc:"rgba(255,255,255,0.08)",nb:"#1a0f08",nc:"rgba(249,115,22,0.12)",ec:"rgba(249,115,22,0.10)",cat:"dark"},',
' {n:"樱花",a:"#ec4899",l:"#f472b6",d:"#db2777",ar:"236,72,153",alr:"244,114,182",cb:"#0e080c",gc:"rgba(255,255,255,0.08)",nb:"#1c0e16",nc:"rgba(244,114,182,0.12)",ec:"rgba(244,114,182,0.10)",cat:"dark"},',
' {n:"星河",a:"#a78bfa",l:"#c4b5fd",d:"#8b5cf6",ar:"167,139,250",alr:"196,181,253",cb:"#08060e",gc:"rgba(255,255,255,0.08)",nb:"#12101e",nc:"rgba(167,139,250,0.12)",ec:"rgba(167,139,250,0.10)",cat:"dark"},',
' {n:"红莲",a:"#ef4444",l:"#f87171",d:"#dc2626",ar:"239,68,68",alr:"248,113,113",cb:"#0e0606",gc:"rgba(255,255,255,0.07)",nb:"#1c0a0a",nc:"rgba(248,113,113,0.12)",ec:"rgba(248,113,113,0.10)",cat:"dark"},',
' {n:"纸张",a:"#d97706",l:"#f59e0b",d:"#b45309",ar:"217,119,6",alr:"245,158,11",cb:"#f7f3eb",gc:"rgba(0,0,0,0.05)",nb:"#fefcf5",nc:"rgba(217,119,6,0.08)",ec:"rgba(0,0,0,0.06)",cat:"light"},',
' {n:"薄荷",a:"#059669",l:"#10b981",d:"#047857",ar:"5,150,105",alr:"16,185,129",cb:"#eef5f0",gc:"rgba(0,0,0,0.05)",nb:"#ffffff",nc:"rgba(16,185,129,0.10)",ec:"rgba(0,0,0,0.06)",cat:"light"},',
' {n:"玫瑰金",a:"#e11d48",l:"#f43f5e",d:"#be123c",ar:"225,29,72",alr:"244,63,94",cb:"#f5eeef",gc:"rgba(0,0,0,0.05)",nb:"#fffafa",nc:"rgba(244,63,94,0.08)",ec:"rgba(0,0,0,0.06)",cat:"light"},',
' {n:"薰衣草",a:"#7c3aed",l:"#8b5cf6",d:"#6d28d9",ar:"124,58,237",alr:"139,92,246",cb:"#f0edf5",gc:"rgba(0,0,0,0.05)",nb:"#fefcff",nc:"rgba(139,92,246,0.08)",ec:"rgba(0,0,0,0.06)",cat:"light"},',
' {n:"高对比绿",a:"#22c55e",l:"#4ade80",d:"#16a34a",ar:"34,197,94",alr:"74,222,128",cb:"#000000",gc:"rgba(255,255,255,0.12)",nb:"#0a0f0c",nc:"rgba(74,222,128,0.18)",ec:"rgba(74,222,128,0.18)",cat:"high"},',
' {n:"高对比橙",a:"#f97316",l:"#fb923c",d:"#ea580c",ar:"249,115,22",alr:"251,146,60",cb:"#000000",gc:"rgba(255,255,255,0.12)",nb:"#0f0a06",nc:"rgba(251,146,60,0.18)",ec:"rgba(251,146,60,0.18)",cat:"high"},',
' ];',
' var _ltTheme=JSON.parse(localStorage.getItem("_lt_theme")||"null")||_ltThemePresets[0];',
' if(!_ltTheme.cb){_ltTheme.cb=_ltThemePresets[0].cb;_ltTheme.gc=_ltThemePresets[0].gc;_ltTheme.nb=_ltThemePresets[0].nb;_ltTheme.nc=_ltThemePresets[0].nc;_ltTheme.ec=_ltThemePresets[0].ec;}',
' function _ltApplyTheme(t){',
' var r=document.documentElement;',
' r.style.setProperty("--accent",t.a);',
' r.style.setProperty("--accent-light",t.l);',
' r.style.setProperty("--accent-dark",t.d);',
' r.style.setProperty("--accent-rgb",t.ar);',
' r.style.setProperty("--accent-light-rgb",t.alr);',
' r.style.setProperty("--canvas-bg",t.cb);',
' r.style.setProperty("--node-bg",t.nb);',
' r.style.setProperty("--border-color",t.nc);',
' r.style.setProperty("--edge-color",t.ec);',
' _ltTheme=t;',
' try{localStorage.setItem("_lt_theme",JSON.stringify(t));}catch(e){}',
' try{document.getElementById("ltp-theme-preview").style.background=t.l;}catch(e){}',
' try{var _e=document.querySelectorAll(".react-flow__renderer,.react-flow");for(var _i=0;_i<_e.length;_i++)_e[_i].style.backgroundColor=t.cb;}catch(e){}',
' }',
' _ltApplyTheme(_ltTheme);',
' setTimeout(function(){try{var _e=document.querySelectorAll(".react-flow__renderer,.react-flow");for(var _i=0;_i<_e.length;_i++)_e[_i].style.backgroundColor=_ltTheme.cb;}catch(e){}},500);',
' var _ltPActiveTab="templates",_ltPCat="",_ltAISource=null,_ltBodyOrigMinH="";',
' function _ltPromptPanel(anchor){',
' if(_ltPActiveTab==="settings")_ltPActiveTab="templates";',
' var el=document.getElementById("libtv-prompt");',
' if(el){el.remove();return;}',
' function savePrompts(){try{localStorage.setItem("_lt_prompts",JSON.stringify(_ltPrompts));}catch(e){}}',
' function _ltPromptFormModal(data,onSave){',
' var body=document.getElementById("ltp-body");if(!body)return;',
' var n=data?data.name:"",c=data?data.content:"",cat=data?data.category:"\\u901a\\u7528";',
' var overlay=document.createElement("div");overlay.className="ltp-form-overlay";',
' overlay.innerHTML="<div class=\\"ltp-form-title\\">"+(data?"\\u7f16\\u8f91\\u6a21\\u677f":"\\u65b0\\u589e\\u6a21\\u677f")+"</div>"',
' +"<div class=\\"ltp-form-row\\"><label>\\u540d\\u79f0</label><input class=\\"ltp-form-inp\\" id=\\"ltp-f-name\\" value=\\"" + _ltEsc(n) + "\\"></div>"',
' +"<div class=\\"ltp-form-inp-row2\\"><div class=\\"ltp-form-row\\"><label>\\u5206\\u7c7b</label><input class=\\"ltp-form-inp\\" id=\\"ltp-f-cat\\" value=\\"" + _ltEsc(cat) + "\\"></div></div>"',
' +"<div class=\\"ltp-form-row\\" style=\\"flex:1\\"><label>\\u5185\\u5bb9</label><textarea class=\\"ltp-form-ta\\" id=\\"ltp-f-ct\\" rows=\\"6\\">"+_ltEsc(c)+"</textarea></div>"',
' +"<div class=\\"ltp-form-actions\\"><button class=\\"ltp-btn ltp-btn-ghost\\" id=\\"ltp-f-cancel\\">\\u53d6\\u6d88</button><button class=\\"ltp-btn ltp-btn-primary\\" id=\\"ltp-f-ok\\">"+(data?"\\u4fdd\\u5b58":"\\u6dfb\\u52a0")+"</button></div>";',
' _ltBodyOrigMinH=body.style.minHeight||"";body.style.minHeight="300px";body.appendChild(overlay);',
' function _clean(){if(overlay.parentNode)overlay.parentNode.removeChild(overlay);body.style.minHeight=_ltBodyOrigMinH;}',
' document.getElementById("ltp-f-cancel").onclick=_clean;',
' document.getElementById("ltp-f-ok").onclick=function(){',
' var nn=document.getElementById("ltp-f-name").value.trim();',
' if(!nn){document.getElementById("ltp-f-name").focus();return;}',
' var cc=document.getElementById("ltp-f-ct").value;',
' var cat2=document.getElementById("ltp-f-cat").value.trim()||"\\u901a\\u7528";',
' _clean();onSave({name:nn,content:cc,category:cat2});',
' };',
' }',
' function _ltPromptViewModal(p){',
' var body=document.getElementById("ltp-body");if(!body)return;',
' var overlay=document.createElement("div");overlay.className="ltp-view-overlay";',
' overlay.innerHTML="<div class=\\"ltp-view-title\\">"+_ltEsc(p.name)+"</div>"',
' +"<div class=\\"ltp-view-meta\\">"+_ltEsc(p.category)+" \\u2022 "+p.content.length+" \\u5b57</div>"',
' +"<div class=\\"ltp-view-content\\">"+_ltEsc(p.content)+"</div>"',
' +"<div class=\\"ltp-view-actions\\"><button class=\\"ltp-btn ltp-btn-primary ltp-btn-sm\\" id=\\"ltp-v-copy\\">\\u590d\\u5236\\u5230\\u526a\\u8d34\\u677f</button><button class=\\"ltp-btn ltp-btn-ghost ltp-btn-sm\\" id=\\"ltp-v-close\\">\\u5173\\u95ed</button></div>";',
' _ltBodyOrigMinH=body.style.minHeight||"";body.style.minHeight="300px";body.appendChild(overlay);',
' function _clean(){if(overlay.parentNode)overlay.parentNode.removeChild(overlay);body.style.minHeight=_ltBodyOrigMinH;}',
' document.getElementById("ltp-v-close").onclick=_clean;',
' document.getElementById("ltp-v-copy").onclick=function(){navigator.clipboard.writeText(p.content).then(function(){var b=document.getElementById("ltp-v-copy");if(b){b.textContent="\\u2714 \\u5df2\\u590d\\u5236";setTimeout(function(){if(b)b.textContent="\\u590d\\u5236\\u5230\\u526a\\u8d34\\u677f";},1200);}});};',
' overlay.querySelector(".ltp-view-content").onclick=function(){navigator.clipboard.writeText(p.content);var b=document.getElementById("ltp-v-copy");if(b){b.textContent="\\u2714 \\u5df2\\u590d\\u5236";setTimeout(function(){if(b)b.textContent="\\u590d\\u5236\\u5230\\u526a\\u8d34\\u677f";},1200);}};',
' }',
' function renderBody(){',
' var body=document.getElementById("ltp-body"); if(!body)return;',
' if(_ltPActiveTab==="templates"){',
' var cats={};',
' _ltPrompts.forEach(function(p){if(!cats[p.category])cats[p.category]=0;cats[p.category]++;});',
' var catKeys=Object.keys(cats);',
' var filtered= _ltPCat ? _ltPrompts.filter(function(p){return p.category===_ltPCat;}) : _ltPrompts;',
' var h=\'<div class="ltp-cat"><button class="ltp-cat-btn\'+(!_ltPCat?" active":"")+\'" data-cat="">全部</button>\';',
' catKeys.forEach(function(c){h+=\'<button class="ltp-cat-btn\'+(c===_ltPCat?" active":"")+\'" data-cat="\'+_ltEsc(c)+\'">\'+_ltEsc(c)+\' (\'+cats[c]+\')</button>\';});',
' h+="</div>";',
' if(!filtered.length){h+=\'<div class="ltp-empty">暂无模板,点击右上角 + 添加</div>\';}',
' else{',
' filtered.forEach(function(p){',
' h+=\'<div class="ltp-item" data-id="\'+p.id+\'">\'',
' +\'<div class="ltp-item-top">\'',
' +\'<div class="ltp-item-info">\'',
' +\'<span class="ltp-name">\'+_ltEsc(p.name)+\'</span>\'',
' +\'<span class="ltp-cat-badge">\'+_ltEsc(p.category)+\'</span>\'',
' +\'</div>\'',
' +\'<div class="ltp-actions">\'',
' +\'<button class="ltp-btn ltp-btn-primary ltp-btn-sm" data-action="copy" title="复制到剪贴板" data-id="\'+p.id+\'">复制</button>\'',
' +\'<button class="ltp-btn ltp-btn-ghost ltp-btn-sm" data-action="view" title="查看完整内容" data-id="\'+p.id+\'">查看</button>\'',
' +\'<button class="ltp-btn ltp-btn-ghost ltp-btn-sm" data-action="edit" data-id="\'+p.id+\'">编辑</button>\'',
' +\'<button class="ltp-btn ltp-btn-danger ltp-btn-sm" data-action="del" data-id="\'+p.id+\'">×</button>\'',
' +\'</div>\'',
' +\'</div>\'',
' +\'<div class="ltp-preview" data-id="\'+p.id+\'">\'+_ltEsc(p.content.slice(0,120))+\'</div>\'',
' +\'</div>\';',
' });',
' }',
' body.innerHTML=h;',
' body.querySelectorAll(".ltp-cat-btn").forEach(function(b){b.onclick=function(){_ltPCat=this.getAttribute("data-cat")||"";renderBody();};});',
' body.querySelectorAll(".ltp-item .ltp-preview,.ltp-item .ltp-item-top").forEach(function(b){b.onclick=function(e){if(e.target.closest(".ltp-actions"))return;var id=this.closest(".ltp-item").getAttribute("data-id");var btn=body.querySelector("[data-action=copy][data-id=\'"+id+"\']");if(btn)btn.click();};});',
' body.querySelectorAll("[data-action=copy]").forEach(function(b){b.onclick=function(){var id=b.getAttribute("data-id"),p=_ltPrompts.find(function(x){return x.id===id;});if(!p)return;var m,pairs=[],re=/\\{(\\w+)(?:=([^}]*))?\\}/g;while((m=re.exec(p.content))!==null)pairs.push({n:m[1],d:m[2]||""});if(!pairs.length){navigator.clipboard.writeText(p.content).then(function(){b.textContent="✅";setTimeout(function(){b.textContent="复制";},1200);});return;}var overlay=document.createElement("div");overlay.className="ltp-var-overlay";var html=\'<div class="ltp-var-title">\'+_ltEsc(p.name)+\'</div><div class="ltp-var-sub">填写变量后点击确认,替换结果将复制到剪贴板</div>\';pairs.forEach(function(v){html+=\'<div class="ltp-var-row"><label>\'+v.n+\'</label><input class="ltp-var-inp" data-var="\'+v.n+\'" value="\'+_ltEsc(v.d)+\'"></div>\';});html+=\'<div class="ltp-var-preview" id="ltp-var-ovprev">\'+_ltEsc(p.content)+\'</div><div class="ltp-var-actions"><button class="ltp-btn ltp-btn-ghost" id="ltp-var-cancel">取消</button><button class="ltp-btn ltp-btn-primary" id="ltp-var-ok">填充并复制</button></div></div>\';overlay.innerHTML=html;_ltBodyOrigMinH=body.style.minHeight||"";body.style.minHeight="320px";body.appendChild(overlay);function _clean(){if(overlay.parentNode)overlay.parentNode.removeChild(overlay);body.style.minHeight=_ltBodyOrigMinH;}function _upd(){var r=p.content;overlay.querySelectorAll(".ltp-var-inp").forEach(function(i){r=r.replace(new RegExp("\\\\{"+i.getAttribute("data-var")+"(?:=[^}]*)?\\\\}","g"),i.value||i.getAttribute("data-var"));});overlay.querySelector("#ltp-var-ovprev").textContent=r;}overlay.querySelectorAll(".ltp-var-inp").forEach(function(i){i.addEventListener("input",_upd);});overlay.querySelector("#ltp-var-cancel").onclick=function(){_clean();};overlay.querySelector("#ltp-var-ok").onclick=function(){var r=p.content;overlay.querySelectorAll(".ltp-var-inp").forEach(function(i){r=r.replace(new RegExp("\\\\{"+i.getAttribute("data-var")+"(?:=[^}]*)?\\\\}","g"),i.value);});navigator.clipboard.writeText(r).then(function(){b.textContent="✅";setTimeout(function(){b.textContent="复制";},1200);_clean();}).catch(function(){_clean();});};};});',
' body.querySelectorAll("[data-action=view]").forEach(function(b){b.onclick=function(){var id=this.getAttribute("data-id"),p=_ltPrompts.find(function(x){return x.id===id;});if(!p)return;_ltPromptViewModal(p);};});',
' body.querySelectorAll("[data-action=edit]").forEach(function(b){b.onclick=function(){var id=this.getAttribute("data-id"),p=_ltPrompts.find(function(x){return x.id===id;});if(!p)return;_ltPromptFormModal({name:p.name,content:p.content,category:p.category},function(r){p.name=r.name;p.content=r.content;p.category=r.category||"\\u901a\\u7528";savePrompts();renderBody();});};});',
' body.querySelectorAll("[data-action=del]").forEach(function(b){b.onclick=function(){var id=this.getAttribute("data-id");_ltPrompts=_ltPrompts.filter(function(x){return x.id!==id;});savePrompts();renderBody();};});',
' }',
' else if(_ltPActiveTab==="ai"){',
' var api=_ltPromptAPI;',
' var _ltAIPresets={',
' polish:{label:"✨ 润色",sys:"你是一个提示词工程专家。请润色用户的 AI 图像/视频生成提示词,修正语法、优化表达,保持原意不变。请务必用中文回复。"},',
' expand:{label:"📏 扩写",sys:"你是一个提示词工程专家。请在用户原有提示词基础上扩写,补充光影、构图、风格、氛围、色彩等细节,使提示词更丰富具体。请务必用中文回复。"},',
' shorten:{label:"✂️ 缩写",sys:"你是一个提示词工程专家。请在不丢失核心信息的前提下精简提示词,保留关键修饰词,移除冗余表达。请务必用中文回复。"},',
' zh2en:{label:"🌐 中→英",sys:"You are a prompt engineering expert. Translate the Chinese prompt to English while maintaining all stylistic and technical details. Output English only."},',
' en2zh:{label:"🌐 英→中",sys:"你是一个提示词工程专家。将英文提示词翻译成中文,保留所有风格和技术细节。只输出中文。"},',
' custom:{label:"⚙ 自定义",sys:""}',
' };',
' var _ltAICustomSys=function(){try{return localStorage.getItem("_lt_ai_sys")||"";}catch(e){return "";}};',
' var _ltAICustomPresetsGet=function(){try{return JSON.parse(localStorage.getItem("_lt_ai_custom_presets")||"[]");}catch(e){return [];}};',
' var _ltAICustomPresetsSave=function(name,sys){var a=_ltAICustomPresetsGet();a.push({id:"cp_"+Date.now().toString(36),name:name,sys:sys,created:Date.now()});try{localStorage.setItem("_lt_ai_custom_presets",JSON.stringify(a));}catch(e){}};',
' var _ltAICustomPresetsDelete=function(id){var a=_ltAICustomPresetsGet();for(var i=0;i<a.length;i++){if(a[i].id===id){a.splice(i,1);break;}}try{localStorage.setItem("_lt_ai_custom_presets",JSON.stringify(a));}catch(e){}};',
' var _ltAICurTask="polish";',
' body.innerHTML=',
' \'<textarea id="ltp-ai-input" class="ltp-ai-input" placeholder="在此输入提示词..." rows="1"></textarea>\'',
' +\'<div class="ltp-ai-tasks" id="ltp-ai-tasks">\'',
' +Object.keys(_ltAIPresets).map(function(k){return \'<span class="ltp-ai-task\'+(k==="polish"?" active":"")+\'" data-task="\'+k+\'">\'+_ltAIPresets[k].label+\'</span>\';}).join("")',
' +_ltAICustomPresetsGet().map(function(p){return \'<span class="ltp-ai-task cp" data-task="\'+p.id+\'">\'+_ltEsc(p.name)+\'</span>\';}).join("")',
' +\'</div>\'',
' +\'<div class="ltp-ai-custom" id="ltp-ai-custom"><textarea id="ltp-ai-sys" class="ltp-ai-sys" placeholder="在此输入自定义 system prompt..." rows="2"></textarea>\'',
' +\'<div style="display:flex;gap:4px;margin-top:6px;"><button class="ltp-ai-preset-btn" id="ltp-ai-save-preset">💾 另存为</button></div>\'',
' +\'<div class="ltp-ai-preset-list" id="ltp-ai-preset-list"></div></div>\'',
' +\'<div class="ltp-ai-actions"><button class="ltp-btn ltp-btn-primary" id="ltp-ai-go">🚀 执行</button><button class="ltp-btn ltp-btn-ghost" id="ltp-ai-fill">从输入框获取</button><button class="ltp-btn ltp-btn-ghost" id="ltp-ai-clear">清空</button></div>\'',
' +\'<div id="ltp-ai-result" class="ltp-ai-result" style="display:none"></div>\'',
' +\'<div class="ltp-status" id="ltp-ai-status">\'+(api.url?"已配置 "+api.url:"未配置 API,请在⚙设置中配置")+\'</div>\';',
' /* custom init */',
' var _ltCustomEl=document.getElementById("ltp-ai-custom");_ltCustomEl.style.display="none";',
' /* auto-height textarea */',
' var _ltAIInp=document.getElementById("ltp-ai-input");',
' _ltAIInp.addEventListener("input",function(){this.style.height="auto";this.style.height=Math.min(this.scrollHeight,160)+"px";});',
' _ltAIInp.addEventListener("keydown",function(e){if(e.key==="Enter"&&(e.ctrlKey||e.metaKey)){e.preventDefault();document.getElementById("ltp-ai-go").click();}});',
' /* task selector */',
' document.getElementById("ltp-ai-tasks").addEventListener("click",function(e){',
' var t=e.target.closest(".ltp-ai-task");if(!t)return;',
' _ltAICurTask=t.getAttribute("data-task");',
' this.querySelectorAll(".ltp-ai-task").forEach(function(s){s.classList.toggle("active",s===t);});',
' if(_ltAICurTask==="custom"){_ltCustomEl.style.display="block";document.getElementById("ltp-ai-sys").value=_ltAICustomSys();document.getElementById("ltp-ai-sys").focus();_ltRenderCustomPresets();}',
' else if(_ltAICurTask.indexOf("cp_")===0){_ltCustomEl.style.display="block";var pr=_ltAICustomPresetsGet();var found=null;for(var _i=0;_i<pr.length;_i++){if(pr[_i].id===_ltAICurTask){found=pr[_i];break;}}document.getElementById("ltp-ai-sys").value=found?found.sys:_ltAICustomSys();document.getElementById("ltp-ai-sys").focus();_ltRenderCustomPresets();}',
' else{_ltCustomEl.style.display="none";}',
' });',
' /* custom sys prompt auto-save */',
' document.getElementById("ltp-ai-sys").addEventListener("input",function(){try{localStorage.setItem("_lt_ai_sys",this.value);}catch(e){}});',
' /* rebuild task bar from presets */',
' var _ltRebuildTaskBar=function(){',
' var tasksEl=document.getElementById("ltp-ai-tasks");if(!tasksEl)return;',
' var cur=_ltAICurTask;',
' var html=Object.keys(_ltAIPresets).map(function(k){return \'<span class="ltp-ai-task\'+(k===cur?" active":"")+\'" data-task="\'+k+\'">\'+_ltAIPresets[k].label+\'</span>\';}).join("");',
' html+=_ltAICustomPresetsGet().map(function(p){return \'<span class="ltp-ai-task cp\'+(p.id===cur?" active":"")+\'" data-task="\'+p.id+\'">\'+_ltEsc(p.name)+\'</span>\';}).join("");',
' tasksEl.innerHTML=html;',
' };',
' /* render preset list below custom textarea */',
' var _ltRenderCustomPresets=function(){',
' var listEl=document.getElementById("ltp-ai-preset-list");if(!listEl)return;',
' var presets=_ltAICustomPresetsGet();',
' if(presets.length===0){listEl.innerHTML="";return;}',
' listEl.innerHTML=presets.map(function(p){return \'<div class="ltp-ai-preset-item"><span>\'+_ltEsc(p.name)+\'</span><span class="ltp-ai-preset-del" data-pid="\'+p.id+\'">🗑</span></div>\';}).join("");',
' listEl.querySelectorAll(".ltp-ai-preset-del").forEach(function(b){b.onclick=function(e){e.stopPropagation();var pid=this.getAttribute("data-pid");_ltAICustomPresetsDelete(pid);_ltRebuildTaskBar();_ltRenderCustomPresets();};});',
' };',
' /* save preset button */',
' document.getElementById("ltp-ai-save-preset").onclick=function(){',
' var sys=document.getElementById("ltp-ai-sys").value;',
' if(!sys.trim()){document.getElementById("ltp-ai-status").textContent="⚠ 请先填写 system prompt";return;}',
' var name=prompt("请输入预设名称:","自定义 "+new Date().toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}));',
' if(!name)return;',
' _ltAICustomPresetsSave(name,sys);',
' _ltRebuildTaskBar();_ltRenderCustomPresets();',
' document.getElementById("ltp-ai-status").textContent="✅ 已保存预设: "+name;',
' };',
' /* initial render */',
' _ltRenderCustomPresets();',
' /* fill from input */',
' document.getElementById("ltp-ai-fill").onclick=function(){',
' var candidates=[],best=null;',
' document.querySelectorAll("textarea").forEach(function(t){var id=t.id;if(id==="ltp-ai-input"||id==="ltp-ai-sys")return;if(t.offsetParent!==null)candidates.push({el:t,val:t.value});});',
' document.querySelectorAll("input[type=text]").forEach(function(t){if(t.offsetParent!==null)candidates.push({el:t,val:t.value});});',
' document.querySelectorAll("[contenteditable=true]").forEach(function(t){if(t.offsetParent!==null)candidates.push({el:t,val:t.textContent||""});});',
' candidates.forEach(function(c){if(c.val.trim()&&(!best||c.val.length>best.val.length))best=c;});',
' _ltAIInp.value=best?best.val:"";_ltAIInp.style.height="auto";_ltAIInp.style.height=Math.min(_ltAIInp.scrollHeight,160)+"px";',
' _ltAISource=best?best.el:null;',
' document.getElementById("ltp-ai-status").textContent=_ltAISource?"✅ 已绑定源输入框":"⚠ 未找到可见输入框";',
' };',
' /* clear */',
' document.getElementById("ltp-ai-clear").onclick=function(){_ltAIInp.value="";_ltAIInp.style.height="auto";document.getElementById("ltp-ai-result").style.display="none";};',
' /* execute */',
' var _ltDoAI=function(text,btn){',
' var api=_ltPromptAPI;',
' if(!api.url||!api.key){document.getElementById("ltp-ai-status").textContent="❌ 请先在⚙设置中配置 API";return;}',
' var sysPrompt=_ltAICurTask==="custom"?_ltAICustomSys():(_ltAICurTask.indexOf("cp_")===0?function(){var pr=_ltAICustomPresetsGet();for(var _i=0;_i<pr.length;_i++){if(pr[_i].id===_ltAICurTask)return pr[_i].sys;}return "";}():(_ltAIPresets[_ltAICurTask]?_ltAIPresets[_ltAICurTask].sys:""));',
' if((_ltAICurTask==="custom"||_ltAICurTask.indexOf("cp_")===0)&&!sysPrompt.trim()){document.getElementById("ltp-ai-status").textContent="❌ 请先填写 system prompt";return;}',
' var statusEl=document.getElementById("ltp-ai-status");',
' btn.textContent="处理中...";btn.disabled=true;',
' fetch(api.url,{',
' method:"POST",',
' headers:{"Content-Type":"application/json","Authorization":"Bearer "+api.key},',
' body:JSON.stringify({model:api.model||"deepseek-v4-flash",messages:[{role:"system",content:sysPrompt},{role:"user",content:text}],max_tokens:1000})',
' }).then(function(r){if(!r.ok)return r.text().then(function(t){throw new Error("HTTP "+r.status+(t?" "+t.slice(0,120):""));});return r.json();}).then(function(d){',
' var result=d.choices&&d.choices[0]&&d.choices[0].message?d.choices[0].message.content:JSON.stringify(d);',
' var resEl=document.getElementById("ltp-ai-result");',
' resEl.style.display="block";',
' resEl.innerHTML=\'<div class="ai-sec"><div class="ai-label">原文</div><div class="ai-text ai-orig">\'+_ltEsc(text.slice(0,300))+(text.length>300?"...":"")+\'</div></div><div class="ai-sep"></div><div class="ai-sec"><div class="ai-label">增强结果</div><div class="ai-text" id="ltp-ai-res-text">\'+_ltEsc(result)+\'</div></div><div class="ai-res-actions"><button class="ltp-btn ltp-btn-primary ltp-btn-sm" id="ltp-ai-write">写回源输入框</button><button class="ltp-btn ltp-btn-ghost ltp-btn-sm" id="ltp-ai-copy">复制</button></div>\';',
' statusEl.textContent="✅ 完成";',
' btn.textContent="🚀 执行";btn.disabled=false;',
' /* write-back */',
' document.getElementById("ltp-ai-write").onclick=function(){',
' if(!_ltAISource){statusEl.textContent="⚠ 未绑定源输入框,请先点击“从输入框获取”";return;}',
' try{',
' if(_ltAISource.tagName==="TEXTAREA"||_ltAISource.tagName==="INPUT"){_ltAISource.value=result;_ltAISource.dispatchEvent(new Event("input",{bubbles:true}));}',
' else if(_ltAISource.isContentEditable){_ltAISource.textContent=result;_ltAISource.dispatchEvent(new Event("input",{bubbles:true}));}',
' statusEl.textContent="✅ ✅ 已写回节点";',
' }catch(ex){statusEl.textContent="❌ 写入失败: "+ex.message;}',
' };',
' /* copy */',
' document.getElementById("ltp-ai-copy").onclick=function(){',
' navigator.clipboard.writeText(result).then(function(){statusEl.textContent="✅ ✅ 已复制到剪贴板";}).catch(function(){',
' var sel=window.getSelection();var r=document.createRange();var el=document.getElementById("ltp-ai-res-text");r.selectNodeContents(el);sel.removeAllRanges();sel.addRange(r);',
' try{var ok=document.execCommand("copy");if(ok){sel.removeAllRanges();statusEl.textContent="✅ ✅ 已复制";return;}}catch(e){}',
' statusEl.textContent="✅ 选中了结果文本,请按 Ctrl+C";',
' });',
' };',
' }).catch(function(err){',
' statusEl.textContent="❌ 请求失败: "+err.message;',
' btn.textContent="🚀 执行";btn.disabled=false;',
' });',
' };',
' document.getElementById("ltp-ai-go").onclick=function(){',
' var text=_ltAIInp.value.trim();',
' if(!text)return;',
' _ltDoAI(text,this);',
' };',
' }',
' else if(_ltPActiveTab==="theme"){',
' function _ltRenderTheme(){',
' var cats=[["dark","\\u6df1\\u8272\\u7cfb"],["light","\\u6d45\\u8272\\u7cfb"],["high","\\u9ad8\\u5bf9\\u6bd4"]],html="";',
' cats.forEach(function(c){',
' var items=_ltThemePresets.filter(function(t){return t.cat===c[0];});',
' if(!items.length)return;',
' html+=\'<div style="margin-top:10px;font-size:10px;color:rgba(255,255,255,0.25);letter-spacing:0.04em;margin-bottom:4px;">\'+c[1]+\'</div>\';',
' html+=\'<div style="display:flex;flex-wrap:wrap;gap:6px;">\';',
' items.forEach(function(t,i){',
' var idx=_ltThemePresets.indexOf(t);',
' var sel=t.a===_ltTheme.a&&t.cb===_ltTheme.cb?"2px solid var(--accent-light)":"1px solid rgba(255,255,255,0.06)";',
' html+=\'<button class="ltp-theme-preset" data-idx="\'+idx+\'" style="width:76px;height:50px;border-radius:8px;border:\'+sel+\';cursor:pointer;padding:0;overflow:hidden;position:relative;transition:border-color .12s ease-out, box-shadow .12s ease-out;background:\'+t.nb+\';display:flex;flex-direction:column;">\'',
' +\'<div style="height:6px;background:\'+t.a+\';flex-shrink:0;"></div>\'',
' +\'<div style="flex:1;display:flex;align-items:center;justify-content:center;font-size:9px;color:rgba(255,255,255,0.4);overflow:hidden;">\'+t.n+\'</div>\'',
' +\'</button>\';',
' });',
' html+=\'</div>\';',
' });',
' html+=\'<div style="margin-top:12px;display:flex;gap:6px;"><button class="lt-settings-btn lt-settings-btn-ghost lt-settings-btn-sm" id="ltp-theme-reset">\\u91cd\\u7f6e\\u4e3a\\u9884\\u8bbe</button></div>\';',
' body.innerHTML=html;',
' body.querySelectorAll(".ltp-theme-preset").forEach(function(b){',
' b.onclick=function(){',
' var idx=parseInt(this.getAttribute("data-idx")),t=_ltThemePresets[idx];',
' _ltApplyTheme(t);',
' _ltRenderTheme();',
' };',
' });',
' document.getElementById("ltp-theme-reset").onclick=function(){',
' var t=_ltThemePresets[0];',
' _ltApplyTheme(t);',
' _ltRenderTheme();',
' };',
' }',
' _ltRenderTheme();',
' }',
' else if(_ltPActiveTab==="palette"){',
' var _presets={',
' "电影色调":["#2c1e30","#4a2c4a","#c9a227","#e8d5b7","#1a3a4a","#2d5a7b","#8b4513","#cd853f"],',
' "赛博朋克":["#ff00ff","#00ffff","#ff1493","#00bfff","#ff6ec7","#7b68ee","#ff4500","#1c1c3c"],',
' "莫兰迪":["#b5c4b1","#e8e0d4","#c9b8a8","#a8b5c4","#d4c5b9","#b9c4d4","#c4b5b1","#d4d0c5"],',
' "马卡龙":["#ffb3ba","#bae1ff","#baffc9","#ffffba","#e8baff","#baffee","#ffd1ba","#d4baff"],',
' "暖色系":["#ff6b35","#f7c59f","#efefd0","#ffb4a2","#e5989b","#b5838d","#6d6875","#ffcdb2"],',
' "冷色系":["#023e8a","#0077b6","#0096c7","#00b4d8","#48cae4","#90e0ef","#ade8f4","#caf0f8"],',
' "黑白灰":["#000000","#1a1a1a","#333333","#666666","#999999","#cccccc","#e5e5e5","#ffffff"],',
' "高饱和":["#ff0000","#ff8800","#ffff00","#00ff00","#0088ff","#8800ff","#ff00ff","#00ffff"],',
' "低饱和":["#8b7d72","#a0937e","#b8a99a","#c4b7a6","#d1c4b0","#e0d6c8","#ebe3d7","#f5f0e8"]',
' };',
' function _hex2rgb(h){h=h.replace("#","");return[parseInt(h.slice(0,2),16),parseInt(h.slice(2,4),16),parseInt(h.slice(4,6),16)];}',
' function _rgb2hsl(r,g,b){r/=255;g/=255;b/=255;var mx=Math.max(r,g,b),mn=Math.min(r,g,b),h,s,l=(mx+mn)/2;if(mx===mn){h=s=0;}else{var d=mx-mn;s=l>0.5?d/(2-mx-mn):d/(mx+mn);switch(mx){case r:h=((g-b)/d+(g<b?6:0))/6;break;case g:h=((b-r)/d+2)/6;break;case b:h=((r-g)/d+4)/6;break;}}return[Math.round(h*360),Math.round(s*100),Math.round(l*100)];}',
' function _aiDesc(hex){var r=_hex2rgb(hex),hsl=_rgb2hsl(r[0],r[1],r[2]);var h=hsl[0],s=hsl[1],l=hsl[2];var desc="";if(l<15)desc="very dark";else if(l<35)desc="dark";else if(l<65)desc="mid-tone";else if(l<85)desc="light";else desc="very light";if(s<10)desc+=", almost gray";else if(s<30)desc+=", muted";else if(s<60)desc+=", moderate saturation";else desc+=", highly saturated";var hue="";if(h<15||h>=345)hue="red";else if(h<45)hue="orange";else if(h<70)hue="yellow";else if(h<160)hue="green";else if(h<200)hue="cyan";else if(h<260)hue="blue";else if(h<310)hue="purple";else hue="pink";return desc+" "+hue+" ("+hex+")";}',
' var _recent=JSON.parse(localStorage.getItem("_lt_pal_recent")||"[]");',
' function _saveRecent(c){_recent=_recent.filter(function(x){return x!==c;});_recent.unshift(c);if(_recent.length>20)_recent.pop();try{localStorage.setItem("_lt_pal_recent",JSON.stringify(_recent));}catch(e){}}',
' function _copySwatch(el,color){navigator.clipboard.writeText(color).then(function(){el.classList.add("copied");setTimeout(function(){el.classList.remove("copied");},800);var toast=document.createElement("div");toast.className="ltp-pal-toast show";toast.textContent="Copied "+color.toUpperCase();document.body.appendChild(toast);setTimeout(function(){toast.classList.remove("show");setTimeout(function(){toast.remove();},300);},1200);_saveRecent(color);});}',
' function _renderPalette(){',
' var h=\'<div class="ltp-pal-picker"><input type="color" id="ltp-pal-pick" value="#818cf8"><div class="ltp-pal-info"><div class="ltp-pal-hex" id="ltp-pal-hex">#818CF8</div><div class="ltp-pal-rgb" id="ltp-pal-rgb">rgb(129, 140, 248)</div><div class="ltp-pal-hsl" id="ltp-pal-hsl">hsl(235, 91%, 74%)</div></div></div>\';',
' h+=\'<div class="ltp-pal-ai"><div class="ltp-pal-ai-desc" id="ltp-pal-ai-desc">muted blue (#818cf8)</div><button class="ltp-btn ltp-btn-primary ltp-btn-sm" id="ltp-pal-ai-copy">复制AI描述</button></div>\';',
' h+=\'<div class="ltp-pal-section"><div class="ltp-pal-section-title open">我的收藏</div><div class="ltp-pal-section-body" id="ltp-pal-fav"></div><button class="ltp-btn ltp-btn-ghost ltp-btn-sm" id="ltp-pal-add-fav" style="margin-top:6px;">+ 添加当前颜色</button></div>\';',
' if(_recent.length){',
' h+=\'<div class="ltp-pal-section"><div class="ltp-pal-section-title">最近使用</div><div class="ltp-pal-section-body collapsed">\',',
' _recent.slice(0,16).forEach(function(c){',
' h+=\'<div class="ltp-pal-swatch" style="background:\'+c+\'" data-color="\'+c+\'"><div class="ltp-pal-tip">\'+c+\'</div></div>\';',
' });',
' h+=\'</div></div>\';',
' }',
' Object.keys(_presets).forEach(function(name){',
' h+=\'<div class="ltp-pal-section"><div class="ltp-pal-section-title" data-group="\'+name+\'">\'+name+\'</div><div class="ltp-pal-section-body collapsed" data-body="\'+name+\'">\';',
' _presets[name].forEach(function(c){',
' h+=\'<div class="ltp-pal-swatch" style="background:\'+c+\'" data-color="\'+c+\'"><div class="ltp-pal-tip">\'+c+\'</div></div>\';',
' });',
' h+=\'</div></div>\';',
' });',
' body.innerHTML=h;',
' var _fav=JSON.parse(localStorage.getItem("_lt_pal_fav")||"[]");',
' function _renderFav(){var fb=document.getElementById("ltp-pal-fav");if(!fb)return;fb.innerHTML="";_fav.forEach(function(c,i){var s=document.createElement("div");s.className="ltp-pal-swatch";s.style.background=c;s.setAttribute("data-color",c);s.innerHTML=\'<div class="ltp-pal-tip">\'+_ltEsc(c)+\'</div>\';s.onclick=function(){_copySwatch(s,c);_updPicker(c);};fb.appendChild(s);});}',
' _renderFav();',
' function _updPicker(hex){document.getElementById("ltp-pal-pick").value=hex;document.getElementById("ltp-pal-hex").textContent=hex.toUpperCase();var rgb=_hex2rgb(hex);document.getElementById("ltp-pal-rgb").textContent="rgb("+rgb.join(", ")+")";var hsl=_rgb2hsl(rgb[0],rgb[1],rgb[2]);document.getElementById("ltp-pal-hsl").textContent="hsl("+hsl[0]+", "+hsl[1]+"%, "+hsl[2]+"%)";document.getElementById("ltp-pal-ai-desc").textContent=_aiDesc(hex);}',
' document.getElementById("ltp-pal-pick").oninput=function(){_updPicker(this.value);};',
' body.querySelectorAll(".ltp-pal-swatch").forEach(function(s){s.onclick=function(){var c=this.getAttribute("data-color");_copySwatch(s,c);_updPicker(c);};});',
' body.querySelectorAll(".ltp-pal-section-title").forEach(function(t){t.onclick=function(){var b=this.nextElementSibling;if(b)b.classList.toggle("collapsed");this.classList.toggle("open");};});',
' document.getElementById("ltp-pal-hex").onclick=function(){var v=this.textContent;navigator.clipboard.writeText(v);var toast=document.createElement("div");toast.className="ltp-pal-toast show";toast.textContent="Copied "+v;document.body.appendChild(toast);setTimeout(function(){toast.classList.remove("show");setTimeout(function(){toast.remove();},300);},1200);};',
' document.getElementById("ltp-pal-rgb").onclick=function(){var v=this.textContent;navigator.clipboard.writeText(v);var toast=document.createElement("div");toast.className="ltp-pal-toast show";toast.textContent="Copied "+v;document.body.appendChild(toast);setTimeout(function(){toast.classList.remove("show");setTimeout(function(){toast.remove();},300);},1200);};',
' document.getElementById("ltp-pal-hsl").onclick=function(){var v=this.textContent;navigator.clipboard.writeText(v);var toast=document.createElement("div");toast.className="ltp-pal-toast show";toast.textContent="Copied "+v;document.body.appendChild(toast);setTimeout(function(){toast.classList.remove("show");setTimeout(function(){toast.remove();},300);},1200);};',
' document.getElementById("ltp-pal-ai-copy").onclick=function(){var v=document.getElementById("ltp-pal-ai-desc").textContent;navigator.clipboard.writeText(v);var toast=document.createElement("div");toast.className="ltp-pal-toast show";toast.textContent="Copied AI描述";document.body.appendChild(toast);setTimeout(function(){toast.classList.remove("show");setTimeout(function(){toast.remove();},300);},1200);};',
' document.getElementById("ltp-pal-add-fav").onclick=function(){var hex=document.getElementById("ltp-pal-pick").value;if(!_fav.includes(hex)){_fav.push(hex);try{localStorage.setItem("_lt_pal_fav",JSON.stringify(_fav));}catch(e){}_renderFav();}};',
' }',
' _renderPalette();',
' }',
' else if(_ltPActiveTab==="settings"){',
' var existing=document.getElementById("lt-settings");',
' if(existing){existing.remove();return;}',
' var p=document.getElementById("libtv-prompt");',
' if(p)p.remove();',
' _ltSettingsPanel();',
' return;',
' }',
' }',
' var div=document.createElement("div");',
' div.id="libtv-prompt";',
' div.innerHTML=\'<div class="ltp-head"><h3>提示词工具</h3><div style="display:flex;align-items:center;gap:4px"><span class="ltp-acc-btn" id="ltp-acc-btn" title="账号切换"><svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg></span><span class="ltp-close" id="ltp-close">✕</span></div></div>\'',
' +\'<div class="ltp-tabs"><span class="ltp-tab active" data-tab="templates">模板</span><span class="ltp-tab" data-tab="palette">调色</span><span class="ltp-tab" data-tab="ai">AI 增强</span><span class="ltp-tab" data-tab="theme">主题</span><span class="ltp-tab" data-tab="settings">设置</span></div>\'',
' +\'<div id="ltp-body" class="ltp-body"></div>\'',
' +\'<div style="display:flex;gap:6px;padding:8px 16px 12px;border-top:1px solid rgba(var(--accent-light-rgb),0.12);">\'',
' +\'<button class="ltp-btn ltp-btn-primary ltp-btn-sm" id="ltp-add">+ 新增模板</button>\'',
' +\'<button class="ltp-btn ltp-btn-ghost ltp-btn-sm" id="ltp-reset">恢复默认模板</button>\'',
' +\'</div>\';',
' document.body.appendChild(div);',
' if(!anchor||!anchor.getBoundingClientRect){',
' div.style.left="50%"; div.style.top="50%";',
' div.style.transform="translate(-50%,-50%)";',
' }',
' renderBody();',
' div.addEventListener("mousemove",function(e){',
' var items=div.querySelectorAll(".ltp-item");',
' items.forEach(function(it){',
' var r=it.getBoundingClientRect();',
' it.style.setProperty("--mx",(e.clientX-r.left)+"px");',
' it.style.setProperty("--my",(e.clientY-r.top)+"px");',
' });',
' });',
' function _ltGetCookies(){return document.cookie;}',
' function _ltSetCookies(s){if(!s)return;s.split("; ").forEach(function(p){var i=p.indexOf("=");if(i<1)return;document.cookie=p.slice(0,i)+"="+p.slice(i+1)+"; path=/";});}',
' function _ltSaveLS(){var o={};for(var i=0;i<localStorage.length;i++){var k=localStorage.key(i);if(k.indexOf("_lt_")!==0)o[k]=localStorage.getItem(k);}return o;}',
' function _ltRestoreLS(o){if(!o)return;for(var k in o){if(o.hasOwnProperty(k)&&k.indexOf("_lt_")!==0){try{localStorage.setItem(k,o[k]);}catch(e){}}}}',
' function _ltIDBSet(k,v){try{var r=indexedDB.open("_lt_boost",1);r.onupgradeneeded=function(e){e.target.result.createObjectStore("b");};r.onsuccess=function(e){var db=e.target.result,tx=db.transaction("b","readwrite");tx.objectStore("b").put(v,k);tx.oncomplete=function(){db.close();};};}catch(e){}}',
' function _ltIDBGet(k,cb){try{var r=indexedDB.open("_lt_boost",1);r.onupgradeneeded=function(e){e.target.result.createObjectStore("b");};r.onsuccess=function(e){var db=e.target.result,tx=db.transaction("b","readonly");var q=tx.objectStore("b").get(k);q.onsuccess=function(){cb(q.result);db.close();};q.onerror=function(){cb(null);db.close();};};r.onerror=function(){cb(null);};}catch(e){cb(null);}}',
' function _ltAccBackup(){try{var d=localStorage.getItem("_lt_accounts");if(d){document.cookie="_lt_acc_bak="+encodeURIComponent(d)+"; path=/; max-age="+(86400*60)+"; SameSite=Lax";_ltIDBSet("_lt_accounts",d);}}catch(e){}}',
' function _ltAccTryRestore(){try{if(localStorage.getItem("_lt_accounts"))return;var m=document.cookie.match(/(?:^|;\\s*)_lt_acc_bak=([^;]*)/);if(m){var d=decodeURIComponent(m[1]);if(d){localStorage.setItem("_lt_accounts",d);return;}}_ltIDBGet("_lt_accounts",function(d){if(d&&!localStorage.getItem("_lt_accounts")){try{localStorage.setItem("_lt_accounts",d);}catch(e){}}});}catch(e){}}',
' function _ltAccList(){_ltAccTryRestore();try{return JSON.parse(localStorage.getItem("_lt_accounts")||"[]");}catch(e){return [];}}',
' function _ltAccSave(name){var a=_ltAccList();a.push({id:Date.now().toString(36),name:name,cookies:_ltGetCookies(),ls:_ltSaveLS(),created:Date.now()});try{localStorage.setItem("_lt_accounts",JSON.stringify(a));_ltAccBackup();}catch(e){}}',
' function _ltAccRefresh(id){var a=_ltAccList();for(var i=0;i<a.length;i++){if(a[i].id===id){a[i].cookies=_ltGetCookies();a[i].ls=_ltSaveLS();a[i].created=Date.now();try{localStorage.setItem("_lt_accounts",JSON.stringify(a));_ltAccBackup();}catch(e){}break;}}_ltAccPanel();}',
' function _ltAccSwitch(id){var a=_ltAccList();for(var i=0;i<a.length;i++){if(a[i].id===id){_ltSetCookies(a[i].cookies);_ltRestoreLS(a[i].ls);location.reload();return;}}}',
' function _ltAccDelete(id){var a=_ltAccList();for(var i=0;i<a.length;i++){if(a[i].id===id){a.splice(i,1);try{localStorage.setItem("_lt_accounts",JSON.stringify(a));_ltAccBackup();}catch(e){}break;}}_ltAccPanel();}',
' function _ltAccTime(t){var d=new Date(t);return (d.getMonth()+1)+"/"+d.getDate()+" "+String(d.getHours()).padStart(2,"0")+":"+String(d.getMinutes()).padStart(2,"0");}',
' function _ltAccPanel(){',
' var e=document.getElementById("lt-acc-panel");if(e){e.remove();return;}',
' var btn=document.getElementById("ltp-acc-btn");if(!btn)return;',
' var r=btn.getBoundingClientRect();',
' var a=_ltAccList();',
' var p=document.createElement("div");p.id="lt-acc-panel";',
' var h="<div class=\\"acc-title\\">\\u8d26\\u53f7\\u5207\\u6362</div>";',
' if(!a.length){h+="<div class=\\"acc-empty\\">\\u6682\\u65e0\\u4fdd\\u5b58\\u7684\\u8d26\\u53f7</div>";}',
' else{h+="<div class=\\"acc-list\\">";',
' for(var i=0;i<a.length;i++){',
' var c=a[i];',
' var age=_ltAccTime(c.created);',
' h+="<div class=\\"acc-item\\" data-id=\\""+c.id+"\\"><div style=\\"flex:1;min-width:0\\"><div style=\\"display:flex;align-items:center;gap:6px\\"><span class=\\"acc-name\\">"+_ltEsc(c.name)+"</span><span class=\\"acc-badge\\">"+age+"</span></div></div><div style=\\"display:flex;align-items:center;gap:4px\\"><span class=\\"acc-swt\\" data-id=\\""+c.id+"\\">\\u5207\\u6362</span><span class=\\"acc-upd\\" data-id=\\""+c.id+"\\" title=\\"刷新\\u2014\\u7528\\u5f53\\u524d\\u767b\\u5f55\\u72b6\\u6001\\u66f4\\u65b0\\u6b64\\u8d26\\u53f7\\">\\u21bb</span><span class=\\"acc-del\\" data-id=\\""+c.id+"\\" title=\\"\\u5220\\u9664\\">\\u2715</span></div></div>";',
' }',
' h+="</div>";}',
' h+="<div class=\\"acc-div\\"></div><div class=\\"acc-add\\" id=\\"lt-acc-add\\"><span>+</span> \\u4fdd\\u5b58\\u5f53\\u524d\\u8d26\\u53f7</div>";',
' p.innerHTML=h;',
' p.style.left=Math.max(4,Math.min(r.left+p.offsetWidth-220,window.innerWidth-224))+"px";',
' p.style.top=(r.bottom+6)+"px";',
' document.body.appendChild(p);',
' /* \\u5207\\u6362 */',
' p.querySelectorAll(".acc-swt").forEach(function(el){el.onclick=function(e){e.stopPropagation();_ltAccSwitch(this.getAttribute("data-id"));};});',
' /* \\u5237\\u65b0 */',
' p.querySelectorAll(".acc-upd").forEach(function(el){el.onclick=function(e){e.stopPropagation();_ltAccRefresh(this.getAttribute("data-id"));};});',
' /* \\u5220\\u9664 */',
' p.querySelectorAll(".acc-del").forEach(function(el){el.onclick=function(e){e.stopPropagation();_ltAccDelete(this.getAttribute("data-id"));};});',
' /* \\u4fdd\\u5b58 */',
' document.getElementById("lt-acc-add").onclick=function(){',
' var nn=prompt("\\u8bf7\\u8f93\\u5165\\u8d26\\u53f7\\u540d\\u79f0\\uff1a","\\u4e3b\\u53f7");if(nn===null||!nn.trim())return;',
' _ltAccSave(nn.trim());_ltAccPanel();',
' };',
' /* \\u70b9\\u51fb\\u5916\\u90e8\\u5173\\u95ed */',
' setTimeout(function(){document.addEventListener("click",function _c(e){if(!p.contains(e.target)&&e.target!==btn){p.remove();document.removeEventListener("click",_c);}},{once:true});},0);',
' }',
' document.getElementById("ltp-acc-btn").onclick=_ltAccPanel;',
' document.getElementById("ltp-close").onclick=function(){div.remove();};',
' document.getElementById("ltp-add").onclick=function(){',
' _ltPromptFormModal(null,function(r){',
' _ltPrompts.push({id:"p"+Date.now(),name:r.name,content:r.content,category:r.category||"\\u901a\\u7528"});',
' savePrompts(); renderBody();',
' });',
' };',
' document.getElementById("ltp-reset").onclick=function(){',
' if(!confirm("恢复默认模板将覆盖当前所有模板,确认?"))return;',
' _ltPrompts=[',
' {id:"d1",name:"产品摄影",category:"图像",content:"Product photography on {background=white} background, {lighting=studio lighting}, high detail, 8K, sharp focus, {extra}"},',
' {id:"d2",name:"电影镜头",category:"图像",content:"Cinematic shot, {lens=anamorphic} lens, {lighting=dramatic} lighting, shallow depth of field, {style}"},',
' {id:"d3",name:"动画-吉卜力风",category:"图像",content:"Studio Ghibli style, hand-drawn animation, {palette=soft pastel} colors, {atmosphere=whimsical}"},',
' {id:"d4",name:"产品展示-环绕",category:"视频",content:"Smooth 360 orbit around {subject=product}, {lighting=soft studio} lighting, slow motion, {extra}"},',
' {id:"d5",name:"风光-延时",category:"视频",content:"Timelapse, {time=golden hour}, {sky=dramatic clouds}, warm tones, smooth transition, {extra}"},',
' ];',
' savePrompts(); renderBody();',
' };',
' div.querySelectorAll(".ltp-tab").forEach(function(t){t.onclick=function(){_ltPActiveTab=this.getAttribute("data-tab");div.querySelectorAll(".ltp-tab").forEach(function(x){x.classList.toggle("active",x===t);});renderBody();};});',
' window._ltPromptRefresh=function(){var d=document.getElementById("libtv-prompt");if(d){_ltPrompts=JSON.parse(localStorage.getItem("_lt_prompts")||"[]");renderBody();}};',
' }',
' var _ltTagLibs=JSON.parse(localStorage.getItem("_lt_tag_libs")||"null");',
' if(!_ltTagLibs){',
' _ltTagLibs={"默认标签":{categories:[',
' {name:"常规标签",icon:"⭐",groups:[',
' {name:"画质",open:true,items:["杰作","写实","提高质量","最佳质量","高分辨率","超高分辨率","超高清","更多细节","简单背景","模糊背景","清晰背景","清晰细节","超精细绘画","聚焦清晰","物理渲染","极详细刻画","改善细节","添加鲜艳色彩","扫描"]},',
' {name:"负面标签",open:false,items:["低质量","模糊","畸形","多余手指","水印","签名","丑陋","变形","低分辨率","噪点","抖动","糟糕构图","文本","拼贴","多余的文字"]},',
' {name:"摄影",open:false,items:["摄影","单反","胶片颗粒","移轴","长曝光","微距摄影","人像摄影","风景摄影"]},',
' {name:"光影",open:false,items:["工作室光照","戏剧性光照","柔光","黄金时刻","霓虹灯光","轮廓光","体积光","电影光照"]},',
' {name:"构图",open:false,items:["特写","广角","鸟瞰","低角度","对称构图","三分法","居中构图","前景"]}',
' ]},',
' {name:"艺术题材",icon:"🎨",groups:[',
' {name:"题材",open:false,items:["奇幻","科幻","赛博朋克","蒸汽朋克","水墨","浮世绘","像素艺术","低多边形","超现实主义","复古"]}',
' ]},',
' {name:"人物类",icon:"👤",groups:[',
' {name:"人物",open:false,items:["女孩","男孩","少女","少年","女人","男人","老者","儿童","多人","角色设计","五官精致","红发","蓝眼"]}',
' ]},',
' {name:"场景",icon:"🏞",groups:[',
' {name:"场景",open:false,items:["城市","森林","山脉","海滩","星空","室内","废墟","花园","雪景","夜景","雨天"]}',
' ]}',
' ]}};',
' try{localStorage.setItem("_lt_tag_libs",JSON.stringify(_ltTagLibs));}catch(e){}',
' }',
' var _ltCurLib=localStorage.getItem("_lt_cur_lib")||"默认标签";',
' if(!_ltTagLibs[_ltCurLib])_ltCurLib=Object.keys(_ltTagLibs)[0];',
' var _ltTagActiveCat=0;',
' var _ltTagSearch="";',
' var _ltRecentTags=JSON.parse(localStorage.getItem("_lt_recent")||"[]");',
' var _ltTagMenuEl=null,_ltTagInputEl=null;',
' function _ltCurLibCats(){var l=_ltTagLibs[_ltCurLib];return l&&l.categories?l.categories:[];}',
' function _ltCurCatGroups(){var c=_ltCurLibCats()[_ltTagActiveCat];return c&&c.groups?c.groups:[];}',
' function _ltSaveLibs(){try{localStorage.setItem("_lt_tag_libs",JSON.stringify(_ltTagLibs));localStorage.setItem("_lt_cur_lib",_ltCurLib);}catch(e){}}',
' window._ltTagRefresh=function(){var s=localStorage.getItem("_lt_tag_libs");if(s){try{_ltTagLibs=JSON.parse(s);}catch(e){}}if(!_ltTagLibs[_ltCurLib])_ltCurLib=Object.keys(_ltTagLibs)[0];if(_ltTagMenuEl)_ltRenderTagMenu();};',
' function _ltPushRecent(t){t=String(t);if(!t)return;_ltRecentTags=_ltRecentTags.filter(function(x){return x!==t;});_ltRecentTags.push(t);if(_ltRecentTags.length>40)_ltRecentTags=_ltRecentTags.slice(-40);try{localStorage.setItem("_lt_recent",JSON.stringify(_ltRecentTags));}catch(e){}if(_ltTagMenuEl&&_ltTagActiveCat>=_ltCurLibCats().length)_ltRenderTagMenu();}',
' function _ltInsertTagAtCursor(tagText){',
' var ta=_ltTagInputEl; if(!ta)return;',
' if(ta.tagName==="TEXTAREA"||(ta.tagName==="INPUT"&&ta.type==="text")){',
' var start=ta.selectionStart,end=ta.selectionEnd,val=ta.value;',
' var before=val.slice(0,start);',
' var sep=(before.length>0&&!/[\\s,,]$/.test(before))?", ":"";',
' var ins=sep+tagText;',
' var newVal=val.slice(0,start)+ins+val.slice(end);',
' var proto=ta.tagName==="TEXTAREA"?HTMLTextAreaElement.prototype:HTMLInputElement.prototype;',
' var nativeSetter=Object.getOwnPropertyDescriptor(proto,"value").set;',
' nativeSetter.call(ta,newVal);',
' var pos=start+ins.length;',
' ta.setSelectionRange(pos,pos);',
' ta.dispatchEvent(new Event("input",{bubbles:true}));',
' }else if(ta.isContentEditable){',
' var sel=window.getSelection();',
' if(!sel||!sel.rangeCount){var pre0=ta.textContent;ta.appendChild(document.createTextNode((pre0&&pre0.length?", ":"")+tagText));}',
' else{',
' var r=sel.getRangeAt(0);',
' var pr=r.cloneRange();pr.selectNodeContents(ta);pr.setEnd(r.startContainer,r.startOffset);',
' var beforeText=pr.toString();',
' var sep=(beforeText.length>0&&!/[\\s,,]$/.test(beforeText))?", ":"";',
' r.deleteContents();',
' r.insertNode(document.createTextNode(sep+tagText));',
' r.collapse(false);',
' sel.removeAllRanges();sel.addRange(r);',
' }',
' ta.dispatchEvent(new Event("input",{bubbles:true}));',
' }',
' ta.focus();',
' }',
' function _ltRenderCat(cat){',
' if(!cat)return "";',
' var h="";',
' if(_ltRecentTags.length){',
' h+="<div class=\\"lt-tag-recent\\"><div class=\\"lt-tag-recent-head\\">最近使用<span class=\\"lt-rec-clear\\">清空</span></div><div class=\\"lt-tag-grid\\">";',
' _ltRecentTags.slice(-10).reverse().forEach(function(t){var s=_ltEsc(t);h+="<div class=\\"lt-tag-item\\" data-text=\\""+s+"\\" title=\\""+s+"\\">"+s+"</div>";});',
' h+="</div></div>";',
' }',
' (cat.groups||[]).forEach(function(g,gi){',
' h+="<div class=\\"lt-tag-group\\">";',
' h+="<div class=\\"lt-tag-group-head\\" data-gi=\\""+gi+"\\"><span class=\\"lt-tag-group-name\\">"+_ltEsc(g.name)+"</span><span class=\\"lt-tag-group-actions\\"><span class=\\"lt-tag-add-item\\" data-gi=\\""+gi+"\\" title=\\"新增标签\\">+</span><span class=\\"lt-tag-arrow "+(g.open?"open":"")+"\\">▾</span></span></div>";',
' if(g.open){',
' h+="<div class=\\"lt-tag-grid\\">";',
' (g.items||[]).forEach(function(it){var s=_ltEsc(it);h+="<div class=\\"lt-tag-item\\" data-text=\\""+s+"\\" title=\\""+s+"\\">"+s+"</div>";});',
' h+="</div>";',
' }',
' h+="</div>";',
' });',
' h+="<div class=\\"lt-tag-add-group-wrap\\"><span class=\\"lt-tag-add-group\\">+ 新增分组</span></div>";',
' return h;',
' }',
' function _ltRenderSearch(){',
' var q=_ltTagSearch,h="<div class=\\"lt-tag-search-hint\\">搜索:“"+q+"”</div>",found=false;',
' _ltCurLibCats().forEach(function(cat){',
' (cat.groups||[]).forEach(function(g){',
' var ms=(g.items||[]).filter(function(it){return String(it).toLowerCase().indexOf(q)>=0;});',
' if(ms.length){',
' found=true;',
' h+="<div class=\\"lt-tag-group\\"><div class=\\"lt-tag-group-head-static\\"><span class=\\"lt-tag-group-name\\">"+_ltEsc(cat.name)+" · "+_ltEsc(g.name)+"</span></div><div class=\\"lt-tag-grid\\">";',
' ms.forEach(function(it){var s=_ltEsc(it);h+="<div class=\\"lt-tag-item\\" data-text=\\""+s+"\\" title=\\""+s+"\\">"+s+"</div>";});',
' h+="</div></div>";',
' }',
' });',
' });',
' if(!found)h+="<div class=\\"lt-tag-empty\\">无匹配标签</div>";',
' return h;',
' }',
' function _ltRenderInserted(){',
' var h="<div class=\\"lt-tag-ins-head\\">已插入<span class=\\"lt-ins-clear\\">清空</span></div>";',
' if(!_ltRecentTags.length){h+="<div class=\\"lt-tag-empty\\">还没有插入过标签</div>";return h;}',
' h+="<div class=\\"lt-tag-grid\\">";',
' _ltRecentTags.slice().reverse().forEach(function(t){var s=_ltEsc(t);h+="<div class=\\"lt-tag-item\\" data-text=\\""+s+"\\" title=\\""+s+"\\">"+s+"</div>";});',
' h+="</div>";',
' return h;',
' }',
' function _ltRenderTagMenu(){',
' if(!_ltTagMenuEl)return;',
' var cats=_ltCurLibCats();',
' var isInserted=_ltTagActiveCat>=cats.length;',
' var sel=_ltTagMenuEl.querySelector("#lt-tag-lib");',
' if(sel)sel.innerHTML=Object.keys(_ltTagLibs).map(function(n){return "<option value=\\""+_ltEsc(n)+"\\""+(_ltCurLib===n?" selected":"")+">"+_ltEsc(n)+"</option>";}).join("");',
' var tabs=_ltTagMenuEl.querySelector("#lt-tag-tabs");',
' var th="";',
' cats.forEach(function(c,i){th+="<span class=\\"lt-tag-tab"+(i===_ltTagActiveCat?" active":"")+"\\" data-cat=\\""+i+"\\">"+(c.icon?_ltEsc(c.icon)+" ":"")+_ltEsc(c.name)+"</span>";});',
' th+="<span class=\\"lt-tag-tab"+(isInserted?" active":"")+"\\" data-cat=\\"ins\\">已插入</span>";',
' th+="<span class=\\"lt-tag-add\\" id=\\"lt-tag-add-cat\\" title=\\"新增分类\\">+</span>";',
' tabs.innerHTML=th;',
' var content=_ltTagMenuEl.querySelector("#lt-tag-content");',
' if(isInserted)content.innerHTML=_ltRenderInserted();',
' else if(_ltTagSearch)content.innerHTML=_ltRenderSearch();',
' else content.innerHTML=_ltRenderCat(cats[_ltTagActiveCat]);',
' }',
' function _ltPosTagMenu(){',
' if(!_ltTagMenuEl||!_ltTagInputEl)return;',
' var mw=_ltTagMenuEl.offsetWidth||688,mh=_ltTagMenuEl.offsetHeight||420;',
' var icon=_ltTagInputEl.parentNode?_ltTagInputEl.parentNode.querySelector(".lt-tag-icon"):null;',
' var ir=icon?icon.getBoundingClientRect():_ltTagInputEl.getBoundingClientRect();',
' var l=ir.right; if(l+mw>window.innerWidth-8)l=window.innerWidth-8-mw; if(l<8)l=8;',
' var t=ir.top-mh; if(t<8)t=ir.bottom+6;',
' _ltTagMenuEl.style.left=l+"px";_ltTagMenuEl.style.top=t+"px";',
' }',
' function _ltShowTagMenu(ta){',
' _ltCloseTagMenu();',
' _ltTagInputEl=ta;',
' var div=document.createElement("div");div.className="lt-tag-menu";div.id="lt-tag-menu";',
' div.innerHTML=',
' "<div class=\\"lt-tag-header\\">"',
' +"<select class=\\"lt-tag-lib\\" id=\\"lt-tag-lib\\"></select>"',
' +"<input class=\\"lt-tag-search\\" id=\\"lt-tag-search\\" placeholder=\\"搜索标签...\\">"',
' +"<button class=\\"lt-tag-refresh\\" id=\\"lt-tag-refresh\\" title=\\"刷新/重置\\">⟳</button>"',
' +"<button class=\\"lt-tag-close\\" id=\\"lt-tag-close\\" title=\\"关闭\\">✕</button>"',
' +"</div>"',
' +"<div class=\\"lt-tag-tabs\\" id=\\"lt-tag-tabs\\"></div>"',
' +"<div class=\\"lt-tag-content\\" id=\\"lt-tag-content\\"></div>"',
' +"<div class=\\"lt-tag-resize\\" id=\\"lt-tag-resize\\" title=\\"拖拽调整大小\\"></div>";',
' document.body.appendChild(div);',
' _ltTagMenuEl=div;',
' var libSel=div.querySelector("#lt-tag-lib");',
' libSel.onchange=function(){_ltCurLib=libSel.value;_ltTagActiveCat=0;_ltSaveLibs();_ltRenderTagMenu();};',
' var search=div.querySelector("#lt-tag-search");',
' search.oninput=function(){_ltTagSearch=search.value.trim().toLowerCase();_ltRenderTagMenu();};',
' div.querySelector("#lt-tag-refresh").onclick=function(){search.value="";_ltTagSearch="";_ltTagActiveCat=0;_ltRenderTagMenu();};',
' div.querySelector("#lt-tag-close").onclick=_ltCloseTagMenu;',
' div.querySelector("#lt-tag-tabs").addEventListener("click",function(e){',
' var tab=e.target.closest(".lt-tag-tab");',
' if(tab){var v=tab.getAttribute("data-cat");_ltTagActiveCat=(v==="ins")?_ltCurLibCats().length:parseInt(v);_ltRenderTagMenu();return;}',
' var ac=e.target.closest("#lt-tag-add-cat");',
' if(ac){var n=prompt("新分类名称:");if(n&&n.trim()){_ltCurLibCats().push({name:n.trim(),icon:"",groups:[{name:"新分组",open:true,items:[]}]});_ltSaveLibs();_ltTagActiveCat=_ltCurLibCats().length-1;_ltRenderTagMenu();}}',
' });',
' div.querySelector("#lt-tag-content").addEventListener("click",function(e){',
' var item=e.target.closest(".lt-tag-item");',
' if(item){_ltInsertTagAtCursor(item.getAttribute("data-text"));_ltPushRecent(item.getAttribute("data-text"));if(_ltTagActiveCat>=_ltCurLibCats().length)_ltRenderTagMenu();return;}',
' var ai=e.target.closest(".lt-tag-add-item");',
' if(ai){var gi=parseInt(ai.getAttribute("data-gi"));var txt=prompt("新标签:");if(txt&&txt.trim()){_ltCurCatGroups()[gi].items.push(txt.trim());_ltSaveLibs();_ltRenderTagMenu();}return;}',
' var gh=e.target.closest(".lt-tag-group-head");',
' if(gh){var gi=parseInt(gh.getAttribute("data-gi"));var g=_ltCurCatGroups()[gi];if(g){g.open=!g.open;_ltSaveLibs();_ltRenderTagMenu();}return;}',
' var ag=e.target.closest(".lt-tag-add-group");',
' if(ag){var n=prompt("新分组名称:");if(n&&n.trim()){_ltCurCatGroups().push({name:n.trim(),open:true,items:[]});_ltSaveLibs();_ltRenderTagMenu();}return;}',
' var rc=e.target.closest(".lt-rec-clear");',
' if(rc){_ltRecentTags=[];try{localStorage.removeItem("_lt_recent");}catch(ex){}_ltRenderTagMenu();return;}',
' var ic=e.target.closest(".lt-ins-clear");',
' if(ic){_ltRecentTags=[];try{localStorage.removeItem("_lt_recent");}catch(ex){}_ltRenderTagMenu();return;}',
' });',
' _ltRenderTagMenu();',
' _ltPosTagMenu();',
' var rz=div.querySelector("#lt-tag-resize");',
' rz.addEventListener("mousedown",function(ev){',
' ev.preventDefault();ev.stopPropagation();',
' var sw=div.offsetWidth,sh=div.offsetHeight,sx=ev.clientX,sy=ev.clientY;',
' var left=parseInt(div.style.left)||0,top=parseInt(div.style.top)||0;',
' function mm(e){',
' var nw=Math.max(240,sw+(e.clientX-sx));',
' var nh=Math.max(160,sh+(e.clientY-sy));',
' if(left+nw>window.innerWidth-8)nw=window.innerWidth-8-left;',
' if(top+nh>window.innerHeight-8)nh=window.innerHeight-8-top;',
' div.style.width=nw+"px";div.style.height=nh+"px";div.style.maxHeight=nh+"px";',
' }',
' function mu(){document.removeEventListener("mousemove",mm);document.removeEventListener("mouseup",mu);document.body.style.userSelect="";}',
' document.addEventListener("mousemove",mm);',
' document.addEventListener("mouseup",mu);',
' document.body.style.userSelect="none";',
' });',
' }',
' function _ltCloseTagMenu(){',
' var el=document.getElementById("lt-tag-menu");if(el)el.remove();',
' _ltTagMenuEl=null;_ltTagInputEl=null;',
' }',
' /* 标签管理已移至面板内联(新增标签 / 分组 / 分类) */',
' (function(){',
' function _ltTagScan(){',
' var els=document.querySelectorAll("textarea,input[type=\\"text\\"],[contenteditable=\\"true\\"]");',
' /* filter to only canvas node inputs (skip page-level search bars, etc.) */',
' function _ltIsNodeInput(el){return el.closest(".react-flow__node")!==null||el.closest("[data-id^=\\"i-\\"],[data-id^=\\"n-\\"],[data-id^=\\"m-\\"]")!==null;}',
'',
' els.forEach(function(ta){',
' if(ta.offsetParent===null)return;',
' if(!_ltIsNodeInput(ta))return;',
' /* unified tag icon for all inputs; anchored to parent, shows/hides with input */',
' var wr=ta.parentNode;',
' if(wr&&!wr.querySelector(":scope > .lt-tag-icon")){',
' if(ta.parentNode&&!ta.parentNode.querySelector(".lt-tag-icon")){',
' var wr=ta.parentNode;',
' if(getComputedStyle(wr).position==="static")wr.style.position="relative";',
' var icon=document.createElement("div");',
' icon.className="lt-tag-icon";',
' icon.title="\\u6807\\u7b7e";',
' icon.innerHTML=\'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"/><line x1="7" y1="7" x2="7.01" y2="7"/></svg>\';',
' icon.style.cssText="position:absolute;right:6px;bottom:6px;z-index:2147483646;width:24px;height:24px;pointer-events:auto;border-radius:6px;display:flex;align-items:center;justify-content:center;cursor:pointer;";',
' icon.onclick=function(e){e.stopPropagation();if(document.getElementById("lt-tag-menu"))_ltCloseTagMenu();else _ltShowTagMenu(ta);};',
' wr.appendChild(icon);',
' }',
' }',
' /* AI quick icon - co-inject alongside tag icon */',
' if(wr&&!wr.querySelector(":scope > .lt-ai-icon")){',
' if(ta.parentNode&&!ta.parentNode.querySelector(".lt-ai-icon")){',
' var wr=ta.parentNode;',
' if(getComputedStyle(wr).position==="static")wr.style.position="relative";',
' var aiIcon=document.createElement("div");',
' aiIcon.title="AI 增强";',
' aiIcon.style.cssText="position:absolute;right:44px;bottom:6px;z-index:2147483646;width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:#fff;";',
' aiIcon.innerHTML=\'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 3l.5 2.5L12 6l-2.5.5L9 9l-.5-2.5L6 6l2.5-.5z"/><path d="M16 12l.5 2.5L19 15l-2.5.5L16 18l-.5-2.5L13 15l2.5-.5z"/></svg>\';',
' aiIcon.onclick=function(e){',
' e.stopPropagation();',
' _ltAIPanel(ta,aiIcon);',
' };',
' wr.appendChild(aiIcon);',
' }',
' }',
' });',
' }',
' var _ltTagTimer=null;',
' var _ltTagObs=new MutationObserver(function(){',
' if(_ltTagTimer)clearTimeout(_ltTagTimer);',
' _ltTagTimer=setTimeout(_ltTagScan,100);',
' });',
' _ltTagObs.observe(document.body,{childList:true,subtree:true,attributes:true,attributeFilter:["style","class","hidden"]});',
' _ltTagScan();',
' setInterval(_ltTagScan,1500);',
' /* ── standalone AI-only panel (self-contained, no dependence on _ltPromptPanel) ── */',
' function _ltAIPanel(inputEl,iconEl){',
' var pid="lt-ai-panel";',
' var existing=document.getElementById(pid);',
' if(existing){existing.remove();return;}',
' var api=JSON.parse(localStorage.getItem("_lt_prompt_api")||"{}");',
' var presets={',
' polish:{label:"\\u2728 \\u6da6\\u8272",sys:"\\u4f60\\u662f\\u4e00\\u4e2a\\u63d0\\u793a\\u8bcd\\u5de5\\u7a0b\\u4e13\\u5bb6\\u3002\\u8bf7\\u6da6\\u8272\\u7528\\u6237\\u7684 AI \\u56fe\\u50cf/\\u89c6\\u9891\\u751f\\u6210\\u63d0\\u793a\\u8bcd\\uff0c\\u4fee\\u6b63\\u8bed\\u6cd5\\u3001\\u4f18\\u5316\\u8868\\u8fbe\\uff0c\\u4fdd\\u6301\\u539f\\u610f\\u4e0d\\u53d8\\u3002\\u8bf7\\u52a1\\u5fc5\\u7528\\u4e2d\\u6587\\u56de\\u590d\\u3002"},',
' expand:{label:"\\ud83d\\udccf \\u6269\\u5199",sys:"\\u4f60\\u662f\\u4e00\\u4e2a\\u63d0\\u793a\\u8bcd\\u5de5\\u7a0b\\u4e13\\u5bb6\\u3002\\u8bf7\\u5728\\u7528\\u6237\\u539f\\u6709\\u63d0\\u793a\\u8bcd\\u57fa\\u7840\\u4e0a\\u6269\\u5199\\uff0c\\u8865\\u5145\\u5149\\u5f71\\u3001\\u6784\\u56fe\\u3001\\u98ce\\u683c\\u3001\\u6c1b\\u56f4\\u3001\\u8272\\u5f69\\u7b49\\u7ec6\\u8282\\uff0c\\u4f7f\\u63d0\\u793a\\u8bcd\\u66f4\\u4e30\\u5bcc\\u5177\\u4f53\\u3002\\u8bf7\\u52a1\\u5fc5\\u7528\\u4e2d\\u6587\\u56de\\u590d\\u3002"},',
' shorten:{label:"\\u2702\\ufe0f \\u7f29\\u5199",sys:"\\u4f60\\u662f\\u4e00\\u4e2a\\u63d0\\u793a\\u8bcd\\u5de5\\u7a0b\\u4e13\\u5bb6\\u3002\\u8bf7\\u5728\\u4e0d\\u4e22\\u5931\\u6838\\u5fc3\\u4fe1\\u606f\\u7684\\u524d\\u63d0\\u4e0b\\u7cbe\\u7b80\\u63d0\\u793a\\u8bcd\\uff0c\\u4fdd\\u7559\\u5173\\u952e\\u4fee\\u9970\\u8bcd\\uff0c\\u79fb\\u9664\\u5197\\u4f59\\u8868\\u8fbe\\u3002\\u8bf7\\u52a1\\u5fc5\\u7528\\u4e2d\\u6587\\u56de\\u590d\\u3002"},',
' zh2en:{label:"\\ud83c\\udf10 \\u4e2d\\u2192\\u82f1",sys:"You are a prompt engineering expert. Translate the Chinese prompt to English while maintaining all stylistic and technical details. Output English only."},',
' en2zh:{label:"\\ud83c\\udf10 \\u82f1\\u2192\\u4e2d",sys:"\\u4f60\\u662f\\u4e00\\u4e2a\\u63d0\\u793a\\u8bcd\\u5de5\\u7a0b\\u4e13\\u5bb6\\u3002\\u5c06\\u82f1\\u6587\\u63d0\\u793a\\u8bcd\\u7ffb\\u8bd1\\u6210\\u4e2d\\u6587\\uff0c\\u4fdd\\u7559\\u6240\\u6709\\u98ce\\u683c\\u548c\\u6280\\u672f\\u7ec6\\u8282\\u3002\\u53ea\\u8f93\\u51fa\\u4e2d\\u6587\\u3002"},',
' custom:{label:"\\u2699 \\u81ea\\u5b9a\\u4e49",sys:""}',
' };',
' function _ltCPGet(){try{return JSON.parse(localStorage.getItem("_lt_ai_custom_presets")||"[]");}catch(e){return [];}}',
' function _ltCPSys(){try{return localStorage.getItem("_lt_ai_sys")||"";}catch(e){return "";}}',
' function _ltGetSP(task){',
' if(task==="custom")return _ltCPSys();',
' if(task.indexOf("cp_")===0){var c=_ltCPGet();for(var i=0;i<c.length;i++){if(c[i].id===task)return c[i].sys;}return "";}',
' return presets[task]?presets[task].sys:"";',
' }',
' var curTask="polish";',
' function _ltTaskHTML(t){',
' var h="";',
' Object.keys(presets).forEach(function(k){h+=\'<span class="ltp-ai-task\'+(k===t?\' active\':\'\')+\'" data-task="\'+k+\'">\'+presets[k].label+\'</span>\';});',
' _ltCPGet().forEach(function(p){h+=\'<span class="ltp-ai-task cp\'+(p.id===t?\' active\':\'\')+\'" data-task="\'+p.id+\'">\'+_ltEsc(p.name)+\'</span>\';});',
' return h;',
' }',
' /* ── inline button styles (ltp-btn scoped to #libtv-prompt, not accessible here) ── */',
' var _btn="display:inline-flex;align-items:center;gap:5px;padding:6px 14px;border-radius:8px;border:none;cursor:pointer;font:12px/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;transition:background .15s ease-out,box-shadow .15s ease-out,color .15s ease-out;";',
' var _btnP=_btn+"background:linear-gradient(135deg,var(--accent),var(--accent-light));color:#fff;box-shadow:0 0 12px rgba(var(--accent-light-rgb),0.3);";',
' var _btnG=_btn+"background:rgba(255,255,255,0.04);color:#aaa;";',
' var _btnS="padding:4px 12px;font-size:11px;border-radius:6px;";',
' /* ── position near AI icon (pop upward from icon location) ── */',
' var ir=iconEl.getBoundingClientRect();',
' var pL=ir.left+ir.width-420;',
' if(pL<12)pL=12;',
' var pT=ir.top-470;',
' if(pT<12){pT=ir.bottom+8;}',
' var div=document.createElement("div");',
' div.id=pid;',
' div.style.cssText="position:fixed;left:"+pL+"px;top:"+pT+"px;z-index:99999;width:440px;max-width:88vw;max-height:68vh;background:rgba(12,12,20,0.88);-webkit-backdrop-filter:blur(32px) saturate(1.4);backdrop-filter:blur(32px) saturate(1.4);border:1px solid rgba(var(--accent-light-rgb),0.25);border-radius:16px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 0 1px rgba(var(--accent-light-rgb),0.6),0 0 8px rgba(var(--accent-light-rgb),0.15),0 0 24px rgba(var(--accent-light-rgb),0.08),0 16px 48px rgba(0,0,0,0.5);color:#d4d4d8;font:13px/1.5 -apple-system,BlinkMacSystemFont,sans-serif;";',
' div.innerHTML=',
' \'<div style="display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid rgba(var(--accent-light-rgb),0.12);flex-shrink:0;"><span style="font-size:13px;font-weight:600;color:var(--accent-light);">AI \\u589e\\u5f3a</span><span id="lt-ap-close" style="cursor:pointer;font-size:16px;color:rgba(255,255,255,0.25);line-height:1;">\\u2715</span></div>\'',
' +\'<div class="ltp-ai-tasks" id="lt-ap-tasks" style="padding:8px 12px 4px;">\'+_ltTaskHTML(curTask)+\'</div>\'',
' +\'<div style="padding:0 12px 4px;flex-shrink:0;"><textarea id="lt-ap-input" class="ltp-ai-input" placeholder="\\u5728\\u6b64\\u8f93\\u5165\\u63d0\\u793a\\u8bcd..." rows="2" style="width:100%;box-sizing:border-box;"></textarea></div>\'',
' +\'<div style="padding:4px 12px 6px;display:flex;gap:6px;flex-shrink:0;"><button style="\'+_btnP+\'" id="lt-ap-go">\\u2728 \\u6267\\u884c</button><button style="\'+_btnG+\'" id="lt-ap-fill">\\u4ece\\u8f93\\u5165\\u6846\\u83b7\\u53d6</button><button style="\'+_btnG+\'" id="lt-ap-clr">\\u6e05\\u7a7a</button></div>\'',
' +\'<div id="lt-ap-result" style="display:none;flex:1;overflow-y:auto;padding:4px 12px 6px;white-space:pre-wrap;word-break:break-word;font-size:12px;"></div>\'',
' +\'<div style="padding:4px 12px 8px;flex-shrink:0;"><span style="font-size:11px;color:rgba(255,255,255,0.3);" id="lt-ap-status">\'+(api.url?"\\u5df2\\u914d\\u7f6e "+_ltEsc(api.url):"\\u672a\\u914d\\u7f6e API")+\'</span></div>\';',
' document.body.appendChild(div);',
' /* close */',
' document.getElementById("lt-ap-close").onclick=function(){div.remove();};',
' /* task selector */',
' var taskEl=document.getElementById("lt-ap-tasks");',
' taskEl.addEventListener("click",function(e){',
' var t=e.target.closest(".ltp-ai-task");if(!t)return;',
' curTask=t.getAttribute("data-task");',
' taskEl.querySelectorAll(".ltp-ai-task").forEach(function(s){s.classList.toggle("active",s===t);});',
' var customEl=document.getElementById("lt-ap-custom");',
' if(curTask==="custom"||curTask.indexOf("cp_")===0){',
' if(!customEl){',
' var customDiv=document.createElement("div");',
' customDiv.id="lt-ap-custom";',
' customDiv.style.cssText="padding:0 12px 4px;flex-shrink:0;";',
' customDiv.innerHTML=\'<textarea id="lt-ap-sys" class="ltp-ai-sys" placeholder="\\u81ea\\u5b9a\\u4e49 system prompt..." rows="2" style="width:100%;box-sizing:border-box;min-height:36px;max-height:80px;background:rgba(255,255,255,0.03);border:1px solid rgba(var(--accent-light-rgb),0.12);border-radius:6px;padding:6px 10px;font:12px/1.5 -apple-system,sans-serif;color:#d4d4d8;outline:none;resize:none;"></textarea>\';',
' taskEl.parentNode.insertBefore(customDiv,taskEl.nextSibling);',
' customDiv.querySelector("#lt-ap-sys").value=_ltCPSys();',
' }',
' customEl=document.getElementById("lt-ap-custom");',
' if(customEl)customEl.style.display="block";',
' document.getElementById("lt-ap-sys").value=_ltGetSP(curTask);',
' }else{',
' var ce=document.getElementById("lt-ap-custom");if(ce)ce.style.display="none";',
' }',
' });',
' /* input auto-height */',
' var inp=document.getElementById("lt-ap-input");',
' inp.addEventListener("input",function(){this.style.height="auto";this.style.height=Math.min(this.scrollHeight,160)+"px";});',
' /* fill from input */',
' document.getElementById("lt-ap-fill").onclick=function(){',
' var t=inputEl.value||inputEl.textContent||"";',
' inp.value=t;inp.style.height="auto";inp.style.height=Math.min(inp.scrollHeight,160)+"px";',
' _ltAISource=inputEl;',
' document.getElementById("lt-ap-status").textContent="\\u2705 \\u5df2\\u7ed1\\u5b9a\\u6e90\\u8f93\\u5165\\u6846";',
' };',
' /* clear */',
' document.getElementById("lt-ap-clr").onclick=function(){',
' inp.value="";inp.style.height="auto";',
' var re=document.getElementById("lt-ap-result");re.style.display="none";',
' };',
' /* execute */',
' var _gen=0;',
' document.getElementById("lt-ap-go").onclick=function(){',
' var text=inp.value.trim();',
' if(!text){document.getElementById("lt-ap-status").textContent="\\u8bf7\\u5148\\u8f93\\u5165\\u63d0\\u793a\\u8bcd";return;}',
' if(!api.url||!api.key){document.getElementById("lt-ap-status").textContent="\\u8bf7\\u5148\\u5728\\u2699\\u8bbe\\u7f6e\\u4e2d\\u914d\\u7f6e API";return;}',
' var sys=_ltGetSP(curTask);',
' if((curTask==="custom"||curTask.indexOf("cp_")===0)&&!sys.trim()){document.getElementById("lt-ap-status").textContent="\\u8bf7\\u5148\\u586b\\u5199 system prompt";return;}',
' var statusEl=document.getElementById("lt-ap-status");',
' var btn=this;btn.disabled=true;btn.textContent="\\u5904\\u7406\\u4e2d...";',
' var myGen=++_gen;',
' fetch(api.url,{method:"POST",headers:{"Content-Type":"application/json","Authorization":"Bearer "+api.key},body:JSON.stringify({model:api.model||"deepseek-v4-flash",messages:[{role:"system",content:sys},{role:"user",content:text}],max_tokens:1000})})',
' .then(function(r){if(!r.ok)return r.text().then(function(t){throw new Error("HTTP "+r.status+(t?" "+t.slice(0,120):""));});return r.json();})',
' .then(function(d){',
' if(myGen!==_gen)return;',
' var result=d.choices&&d.choices[0]&&d.choices[0].message?d.choices[0].message.content:JSON.stringify(d);',
' var resEl=document.getElementById("lt-ap-result");',
' resEl.style.display="block";',
' resEl.innerHTML=\'<div style="margin-bottom:6px;font-size:11px;color:rgba(255,255,255,0.3);">\\u589e\\u5f3a\\u7ed3\\u679c</div><div id="lt-ap-rtext" style="color:#d4d4d8;">\'+_ltEsc(result)+\'</div><div style="margin-top:8px;display:flex;gap:6px;"><button style="\'+_btnP+_btnS+\'" id="lt-ap-write">\\u5199\\u56de\\u6e90\\u8f93\\u5165\\u6846</button><button style="\'+_btnG+_btnS+\'" id="lt-ap-copy">\\u590d\\u5236</button></div>\';',
' document.getElementById("lt-ap-write").onclick=function(){',
' if(!_ltAISource){statusEl.textContent="\\u26a0 \\u672a\\u7ed1\\u5b9a\\u6e90\\u8f93\\u5165\\u6846";return;}',
' try{',
' if(_ltAISource.tagName==="TEXTAREA"||_ltAISource.tagName==="INPUT"){_ltAISource.value=result;_ltAISource.dispatchEvent(new Event("input",{bubbles:true}));}',
' else if(_ltAISource.isContentEditable){_ltAISource.textContent=result;_ltAISource.dispatchEvent(new Event("input",{bubbles:true}));}',
' statusEl.textContent="\\u2705\\u2705 \\u5df2\\u5199\\u56de";',
' }catch(ex){statusEl.textContent="\\u5199\\u5165\\u5931\\u8d25: "+ex.message;}',
' };',
' document.getElementById("lt-ap-copy").onclick=function(){',
' navigator.clipboard.writeText(result).then(function(){statusEl.textContent="\\u2705\\u2705 \\u5df2\\u590d\\u5236\\u5230\\u526a\\u8d34\\u677f";}).catch(function(){',
' var sel=window.getSelection();var r=document.createRange();var el=document.getElementById("lt-ap-rtext");r.selectNodeContents(el);sel.removeAllRanges();sel.addRange(r);',
' try{var ok=document.execCommand("copy");if(ok){sel.removeAllRanges();statusEl.textContent="\\u2705\\u2705 \\u5df2\\u590d\\u5236";return;}}catch(e){}',
' statusEl.textContent="\\u2705 \\u5df2\\u9009\\u4e2d\\u7ed3\\u679c\\u6587\\u672c\\uff0c\\u8bf7\\u6309 Ctrl+C";',
' });',
' };',
' statusEl.textContent="\\u2705 \\u5b8c\\u6210";',
' btn.disabled=false;btn.textContent="\\u2728 \\u6267\\u884c";',
' })',
' .catch(function(e){',
' if(myGen!==_gen)return;',
' statusEl.textContent="\\u8bf7\\u6c42\\u5931\\u8d25: "+e.message;',
' btn.disabled=false;btn.textContent="\\u2728 \\u6267\\u884c";',
' });',
' };',
' /* auto-fill on open */',
' var initText=inputEl.value||inputEl.textContent||"";',
' if(initText.trim()){',
' inp.value=initText;inp.style.height="auto";inp.style.height=Math.min(inp.scrollHeight,160)+"px";',
' _ltAISource=inputEl;',
' }',
' }',
' })();',
' (function(){',
' function _createBtn(){',
' if(document.getElementById("libtv-pbtn"))return;',
' var si=parseInt(localStorage.getItem("_lt_pbtn_style")||"0");',
' if(isNaN(si)||si<0||si>4)si=0;',
' var btn=document.createElement("div");',
' btn.id="libtv-pbtn";',
' btn.className="s"+si;',
' btn.title="提示词工具 (P) | 右键切换样式";',
' if(si===4){btn.textContent="P";}',
' else if(si===3){btn.innerHTML=\'<span style="display:flex;align-items:center;justify-content:center;height:100%"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg><span class="s3-label" style="opacity:0;transition:opacity .2s ease .1s;margin-left:4px;font-size:13px">提示词</span></span>\';}',
' else{btn.innerHTML=\'<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/><polyline points="10 9 9 9 8 9"/></svg>\';}',
' btn.style.cssText="position:fixed;right:60px;bottom:70px;z-index:99998;display:flex;align-items:center;justify-content:center;cursor:grab;user-select:none;";',
' if(si===2){btn.style.width="28px";btn.style.height="28px";}else{btn.style.width="36px";btn.style.height="36px";}',
' if(si===4){btn.style.fontSize="16px";btn.style.fontWeight="600";btn.style.fontFamily="-apple-system,BlinkMacSystemFont,sans-serif";}',
' btn.addEventListener("contextmenu",function(e){e.preventDefault();var cur=parseInt(localStorage.getItem("_lt_pbtn_style")||"0");var next=((cur%5)+1)%5;try{localStorage.setItem("_lt_pbtn_style",String(next));}catch(ex){}btn.remove();_createBtn();});',
' document.body.appendChild(btn);',
' btn.onmouseenter=function(){if(si!==0){btn.style.transform="scale(1.05)";}};',
' btn.onmouseleave=function(){btn.style.transform="scale(1)";};',
' function _ltPosPanel(){',
' var p=document.getElementById("libtv-prompt");if(!p)return;',
' var r=btn.getBoundingClientRect(),pw=Math.min(520,window.innerWidth-32),ph=p.offsetHeight||400;',
' p.style.left=Math.max(12,Math.min(r.left+r.width/2-pw/2,window.innerWidth-pw-12))+"px";',
' var t=r.bottom+10;if(t+ph>window.innerHeight-12)t=Math.max(12,r.top-ph-10);',
' p.style.top=t+"px";p.style.transform="none";',
' }',
' function _ltToggle(){',
' var p=document.getElementById("libtv-prompt");if(p){p.remove();return;}',
' _ltPromptPanel(btn);_ltPosPanel();',
' }',
' btn.onclick=_ltToggle;',
' function _ltClamp(){var pw=36,ph=36;var l=parseInt(btn.style.left);var t=parseInt(btn.style.top);if(!isNaN(l)){l=Math.max(4,Math.min(l,window.innerWidth-pw-4));btn.style.left=l+"px";}if(!isNaN(t)){t=Math.max(4,Math.min(t,window.innerHeight-ph-4));btn.style.top=t+"px";}_ltPosPanel();}',
' var dx=0,dy=0,dragging=false;',
' btn.addEventListener("mousedown",function(e){dragging=true;dx=e.clientX-btn.offsetLeft;dy=e.clientY-btn.offsetTop;e.preventDefault();});',
' document.addEventListener("mousemove",function(e){if(!dragging)return;var pw=36,ph=36,l=e.clientX-dx,t=e.clientY-dy;l=Math.max(4,Math.min(l,window.innerWidth-pw-4));t=Math.max(4,Math.min(t,window.innerHeight-ph-4));btn.style.left=l+"px";btn.style.top=t+"px";btn.style.right="auto";btn.style.bottom="auto";_ltPosPanel();});',
' document.addEventListener("mouseup",function(){if(dragging){dragging=false;try{localStorage.removeItem("_lt_pbtn_r");localStorage.removeItem("_lt_pbtn_b");localStorage.removeItem("_lt_pbtn_x");localStorage.removeItem("_lt_pbtn_y");}catch(ex){}}});',
' window.addEventListener("resize",_ltClamp);',
' }',
' function _removeBtn(){var b=document.getElementById("libtv-pbtn");if(b)b.remove();}',
' var _ltWelcomePending=false;',
' function _ltShowWelcome(){',
' try{if(localStorage.getItem("_lt_first_run"))return;}catch(e){}',
' if(document.getElementById("libtv-welcome-overlay"))return;',
' var ov=document.createElement("div");',
' ov.id="libtv-welcome-overlay";',
' ov.innerHTML=',
' "<div id=\\"libtv-welcome\\"><button class=\\"w-close\\" title=\\"关闭\\">\\u2715</button>"',
' +"<h1>\\u6b22\\u8fce\\u4f7f\\u7528 LibTV Canvas Boost</h1>"',
' +"<p class=\\"sub\\">\\u5feb\\u6377\\u952e\\u00b7\\u7279\\u6027\\u00b7\\u5c0f\\u8d34\\u58eb</p>"',
' +"<div class=\\"sec-title\\">\\u5feb\\u6377\\u952e\\u901f\\u89c8</div>"',
' +"<div class=\\"w-grid\\">"',
' +"<div class=\\"item\\"><kbd>G</kbd>\\u7f51\\u683c</div>"',
' +"<div class=\\"item\\"><kbd>T</kbd>\\u6027\\u80fd\\u6a21\\u5f0f</div>"',
' +"<div class=\\"item\\"><kbd>H</kbd>\\u9690\\u85cf\\u56fe\\u7247</div>"',
' +"<div class=\\"item\\"><kbd>L</kbd>\\u8fde\\u7ebf\\u6a21\\u5f0f</div>"',
' +"<div class=\\"item\\"><kbd>C</kbd>\\u5168\\u94fe\\u8def\\u9ad8\\u4eae</div>"',
' +"<div class=\\"item\\"><kbd>R</kbd>\\u76f4\\u89d2\\u8fde\\u7ebf</div>"',
' +"<div class=\\"item\\"><kbd>X</kbd>\\u4e13\\u6ce8\\u6a21\\u5f0f</div>"',
' +"<div class=\\"item\\"><kbd>F</kbd>\\u641c\\u7d22\\u8282\\u70b9</div>"',
' +"<div class=\\"item\\"><kbd>P</kbd>\\u63d0\\u793a\\u8bcd\\u5de5\\u5177</div>"',
' +"<div class=\\"item\\"><kbd>N</kbd>\\u6e05\\u723d\\u6a21\\u5f0f</div>"',
' +"<div class=\\"item\\"><kbd>?</kbd>\\u5e2e\\u52a9\\u5feb\\u7167</div>"',
' +"</div>"',
' +"<div class=\\"sec-title\\">\\u529f\\u80fd\\u6a21\\u5757</div>"',
' +"<div class=\\"w-feats\\"><span>\\u63d0\\u793a\\u8bcd\\u6a21\\u677f</span><span>AI \\u589e\\u5f3a</span><span>\\u6807\\u7b7e\\u7cfb\\u7edf</span><span>29 \\u79cd\\u4e3b\\u9898\\u9884\\u8bbe</span><span>\\u8c03\\u8272\\u677f</span><span>\\u6309\\u94ae\\u6837\\u5f0f</span></div>"',
' +"<div class=\\"w-tips\\"><p>\\u53f3\\u952e\\u70b9\\u51fb\\u6d6e\\u52a8\\u6309\\u94ae\\u53ef\\u5faa\\u73af\\u5207\\u6362\\u6837\\u5f0f</p><p>\\u6807\\u7b7e\\u56fe\\u6807\\u4f4d\\u4e8e\\u8f93\\u5165\\u6846\\u53f3\\u4e0b\\u89d2</p><p>FPS \\u9762\\u677f\\u60ac\\u505c\\u53ef\\u67e5\\u770b\\u5feb\\u6377\\u952e\\u5feb\\u7167</p></div>"',
' +"<div class=\\"w-actions\\"><button class=\\"w-btn\\">\\u5f00\\u59cb\\u4f7f\\u7528</button></div></div>";',
' document.body.appendChild(ov);',
' var close=function(){ov.remove();try{localStorage.setItem("_lt_first_run","1");}catch(e){}};',
' ov.querySelector(".w-btn").onclick=close;',
' ov.querySelector(".w-close").onclick=close;',
' ov.addEventListener("click",function(e){if(e.target===ov)close();});',
' }',
' function _ltTryWelcome(){if(_ltWelcomePending)return;_ltWelcomePending=true;setTimeout(function(){_ltWelcomePending=false;_ltShowWelcome();},3000)}',
' var _obs=new MutationObserver(function(){',
' if(document.querySelector(".react-flow")){_createBtn();_ltTryWelcome();}',
' else{_removeBtn();}',
' });',
' _obs.observe(document.body,{childList:true,subtree:true});',
' if(document.querySelector(".react-flow")){_createBtn();_ltTryWelcome();}',
' })();',
' var _ltStepTo=null;',
' function _ltStepEdges(){',
' document.querySelectorAll(".react-flow__edges path").forEach(function(p){',
' var d=p.getAttribute("d")||"";',
' if(d.indexOf("C")===-1)return;',
' try{',
' var len=p.getTotalLength();',
' if(!len||isNaN(len))return;',
' var s=p.getPointAtLength(0),e=p.getPointAtLength(len);',
' p.setAttribute("d","M "+s.x+" "+s.y+" L "+e.x+" "+s.y+" L "+e.x+" "+e.y);',
' }catch(ex){}',
' });',
' }',
' var _ltStepObs=null,_ltStepRetries=0;',
' function _ltStepApply(){',
' if(_ltStepTo){clearTimeout(_ltStepTo);_ltStepTo=null;}',
' var ed=document.querySelector(".react-flow__edges");',
' if(!ed){if(++_ltStepRetries>5)return;_ltStepTo=setTimeout(_ltStepApply,500);return;}',
' _ltStepRetries=0;',
' if(document.body.classList.contains("libtv-step-edges")){',
' _ltStepEdges();',
' if(!_ltStepObs){',
' var _ltStepParent=document.querySelector(".react-flow")||document.body;',
' _ltStepObs=new MutationObserver(function(){_ltStepRetries=0;_ltStepApply();});',
' _ltStepObs.observe(_ltStepParent,{childList:true,subtree:true,attributes:true,attributeFilter:["d"]});',
' }',
' }else{',
' if(_ltStepObs){_ltStepObs.disconnect();_ltStepObs=null;}',
' }',
' }',
' var _ltStepOn=localStorage.getItem("_lt_step")==="1";',
' if(_ltStepOn){ document.body.classList.add("libtv-step-edges"); _ltStepApply(); }',
' document.addEventListener("keydown",function(e){',
' if(e.ctrlKey||e.metaKey||e.altKey)return;',
' if(e.key==="Escape"){',
' var _handled=false; var _tm=document.getElementById("lt-tag-menu"); if(_tm){_ltCloseTagMenu();_handled=true;}',
' _ltClearChain();',
' var _ss=document.getElementById("libtv-search"); if(_ss){_ss.remove();_handled=true;}',
' var _pp=document.getElementById("libtv-prompt"); if(_pp){_pp.remove();_handled=true;}',
' var _dd=document.getElementById("lt-debug"); if(_dd){_dd.remove();_handled=true;}',
' if(_handled){e.preventDefault();e.stopPropagation();}',
' return;',
' }',
' var t=e.target||document.activeElement;',
' if(t&&(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.isContentEditable)){',
' return;',
' }',
' if(e.key==="g"||e.key==="G"){',
' e.preventDefault(); e.stopPropagation();',
' var bg=document.querySelector(".react-flow__background");',
' if(bg) bg.classList.toggle("perf-no-grid");',
' try{localStorage.setItem("_lt_grid",bg.classList.contains("perf-no-grid")?"1":"0");}catch(ex){}',
' return;',
' }',
' if(e.key==="t"||e.key==="T"){',
' e.preventDefault(); e.stopPropagation();',
' document.body.classList.toggle("perf-mode");',
' try{localStorage.setItem("_lt_perf",document.body.classList.contains("perf-mode")?"1":"0");}catch(ex){}',
' return;',
' }',
' if(e.key==="h"||e.key==="H"){',
' e.preventDefault(); e.stopPropagation();',
' document.body.classList.toggle("perf-hide-imgs");',
' try{localStorage.setItem("_lt_hide",document.body.classList.contains("perf-hide-imgs")?"1":"0");}catch(ex){}',
' return;',
' }',
' if(e.key==="l"||e.key==="L"){',
' e.preventDefault(); e.stopPropagation();',
' var edges=document.querySelector(".react-flow__edges");',
' if(edges) edges.classList.toggle("perf-hide-edges");',
' try{localStorage.setItem("_lt_edges",edges.classList.contains("perf-hide-edges")?"1":"0");}catch(ex){}',
' return;',
' }',
' if(e.key==="c"||e.key==="C"){',
' e.preventDefault(); e.stopPropagation();',
' _ltAutoChain=!_ltAutoChain;',
' document.body.classList.toggle("libtv-autochain",_ltAutoChain);',
' try{localStorage.setItem("_lt_autochain",_ltAutoChain?"1":"0");}catch(ex){}',
' if(!_ltAutoChain) _ltClearChain();',
' return;',
' }',
' if(e.key==="f"||e.key==="F"){',
' e.preventDefault(); e.stopPropagation();',
' _ltSearch();',
' return;',
' }',
' if(e.key==="p"||e.key==="P"){',
' e.preventDefault(); e.stopPropagation();',
' _ltPromptPanel();',
' return;',
' }',
' if(e.key==="x"||e.key==="X"){',
' e.preventDefault(); e.stopPropagation();',
' document.body.classList.toggle("libtv-focus");',
' try{localStorage.setItem("_lt_focus",document.body.classList.contains("libtv-focus")?"1":"0");}catch(ex){}',
' return;',
' }',
' if(e.key==="r"||e.key==="R"){',
' e.preventDefault(); e.stopPropagation();',
' document.body.classList.toggle("libtv-step-edges");',
' try{localStorage.setItem("_lt_step",document.body.classList.contains("libtv-step-edges")?"1":"0");}catch(ex){}',
' _ltStepApply();',
' return;',
' }',
' if(e.key==="n"||e.key==="N"){',
' e.preventDefault(); e.stopPropagation();',
' document.body.classList.toggle("libtv-clean-home");',
' try{localStorage.setItem("_lt_clean",document.body.classList.contains("libtv-clean-home")?"1":"0");}catch(ex){}',
' return;',
' }',
' if(e.key==="?"||e.key==="/"){',
' e.preventDefault(); e.stopPropagation();',
' var h=document.getElementById("libtv-help");',
' if(h){ h.classList.toggle("libtv-pin"); if(h.classList.contains("libtv-pin")) h.classList.remove("libtv-hide"); else h.classList.add("libtv-hide"); }',
' return;',
' }',
' }, true);',
' function _ltEsc(s){return String(s==null?"":s).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""");}',
' function _ltToast(msg, dur){var e=document.getElementById("_ltToast");if(!e){e=document.createElement("div");e.id="_ltToast";Object.assign(e.style,{position:"fixed",bottom:"20px",left:"50%",transform:"translateX(-50%)",background:"rgba(0,0,0,.8)",color:"#fff",padding:"8px 18px",borderRadius:"6px",zIndex:99999,fontSize:"14px",pointerEvents:"none",transition:"opacity .3s",opacity:"0"});document.body.appendChild(e)}e.textContent=msg;e.style.opacity="1";clearTimeout(e._t);e._t=setTimeout(function(){e.style.opacity="0"},dur||2000);}',
' function _ltBuildContentPack(){',
' var prompts=JSON.parse(localStorage.getItem("_lt_prompts")||"[]");',
' var tagLibs=JSON.parse(localStorage.getItem("_lt_tag_libs")||"null")||{};',
' var curLib=localStorage.getItem("_lt_cur_lib")||"默认标签";',
' return {app:"libtv-boost",type:"content-pack",version:1,exportedAt:new Date().toISOString(),currentLib:curLib,prompts:prompts,tagLibs:tagLibs};',
' }',
' function _ltDownloadContentPack(){',
' var str=JSON.stringify(_ltBuildContentPack(),null,2);',
' var blob=new Blob([str],{type:"application/json"});',
' var url=URL.createObjectURL(blob);',
' var a=document.createElement("a");',
' var d=new Date(),pad=function(n){return (n<10?"0":"")+n;};',
' a.href=url;a.download="libtv-content-pack-"+d.getFullYear()+"-"+pad(d.getMonth()+1)+"-"+pad(d.getDate())+".json";',
' document.body.appendChild(a);a.click();a.remove();',
' setTimeout(function(){try{URL.revokeObjectURL(url);}catch(e){}},1000);',
' }',
' function _ltImportContentPackFromFile(){',
' var inp=document.createElement("input");inp.type="file";inp.accept="application/json,.json";',
' inp.onchange=function(){var f=inp.files&&inp.files[0];if(!f)return;var r=new FileReader();r.onload=function(){try{_ltShowContentPackChooser(String(r.result));}catch(e){_ltToast("内容包解析失败:"+e.message);}};r.readAsText(f);};',
' inp.click();',
' }',
' function _ltShowContentPackChooser(text){',
' var data;try{data=JSON.parse(text);}catch(e){_ltToast("不是有效的 JSON 内容包:"+e.message);return;}',
' if(!data||data.type!=="content-pack"){_ltToast("文件不是 libtv-boost 内容包(缺少 type:\\"content-pack\\")");return;}',
' var ov=document.createElement("div");ov.id="lt-cp-overlay";',
' ov.style.cssText="position:fixed;inset:0;background:rgba(0,0,0,0.6);z-index:2147483647;display:flex;align-items:center;justify-content:center;";',
' var box=document.createElement("div");',
' box.style.cssText="background:#1b1d2a;border:1px solid rgba(129,140,248,0.3);border-radius:12px;padding:22px;min-width:320px;max-width:90vw;color:#e7e9f3;font-family:inherit;";',
' var pcount=Array.isArray(data.prompts)?data.prompts.length:0;',
' var tcount=data.tagLibs?Object.keys(data.tagLibs).length:0;',
' box.innerHTML=\'<div style="font-size:15px;font-weight:600;margin-bottom:6px;">导入内容包</div>\'',
' +\'<div style="font-size:12px;color:rgba(255,255,255,0.55);margin-bottom:14px;">检测到 \'+pcount+\' 条提示词 · \'+tcount+\' 个标签库</div>\'',
' +\'<div style="display:flex;flex-direction:column;gap:8px;">\'',
' +\'<button id="lt-cp-replace" style="padding:10px;border-radius:8px;border:1px solid rgba(129,140,248,0.4);background:linear-gradient(135deg,rgba(129,140,248,0.25),rgba(167,139,250,0.25));color:#fff;cursor:pointer;font-size:13px;">整体替换(覆盖现有)</button>\'',
' +\'<button id="lt-cp-merge" style="padding:10px;border-radius:8px;border:1px solid rgba(255,255,255,0.15);background:rgba(255,255,255,0.06);color:#e7e9f3;cursor:pointer;font-size:13px;">合并去重(保留现有)</button>\'',
' +\'<button id="lt-cp-cancel" style="padding:9px;border-radius:8px;border:1px solid rgba(255,255,255,0.1);background:transparent;color:rgba(255,255,255,0.6);cursor:pointer;font-size:12px;">取消</button>\'',
' +\'</div>\';',
' ov.appendChild(box);document.body.appendChild(ov);',
' function close(){if(ov.parentNode)ov.parentNode.removeChild(ov);}',
' document.getElementById("lt-cp-replace").onclick=function(){close();_ltApplyContentPack(data,"replace");};',
' document.getElementById("lt-cp-merge").onclick=function(){close();_ltApplyContentPack(data,"merge");};',
' document.getElementById("lt-cp-cancel").onclick=close;',
' ov.onclick=function(e){if(e.target===ov)close();};',
' }',
' function _ltApplyContentPack(data,mode){',
' try{',
' if(mode==="replace"){',
' if(Array.isArray(data.prompts))try{localStorage.setItem("_lt_prompts",JSON.stringify(data.prompts));}catch(e){}',
' if(data.tagLibs&&typeof data.tagLibs==="object")try{localStorage.setItem("_lt_tag_libs",JSON.stringify(data.tagLibs));}catch(e){}',
' if(data.currentLib)try{localStorage.setItem("_lt_cur_lib",data.currentLib);}catch(e){}',
' }else{',
' var prompts=JSON.parse(localStorage.getItem("_lt_prompts")||"[]");',
' var seen={};prompts.forEach(function(p){seen[(p&&p.id)||("n"+Math.random())]=true;});',
' (data.prompts||[]).forEach(function(p){if(p&&p.id&&!seen[p.id]){prompts.push(p);seen[p.id]=true;}});',
' try{localStorage.setItem("_lt_prompts",JSON.stringify(prompts));}catch(e){}',
' var tagLibs=JSON.parse(localStorage.getItem("_lt_tag_libs")||"null");if(!tagLibs)tagLibs={};',
' var src=data.tagLibs||{};',
' for(var k in src){if(!src.hasOwnProperty(k))continue;',
' if(!tagLibs[k]){tagLibs[k]=src[k];continue;}',
' var dstCats=tagLibs[k].categories||[];var srcCats=src[k].categories||[];',
' srcCats.forEach(function(c){',
' var ex=null;for(var i=0;i<dstCats.length;i++){if(dstCats[i].name===c.name){ex=dstCats[i];break;}}',
' if(!ex){dstCats.push(c);return;}',
' var dg=ex.groups||[];',
' (c.groups||[]).forEach(function(g){',
' var eg=null;for(var j=0;j<dg.length;j++){if(dg[j].name===g.name){eg=dg[j];break;}}',
' if(!eg){dg.push(g);return;}',
' eg.items=eg.items||[];(g.items||[]).forEach(function(it){if(eg.items.indexOf(it)<0)eg.items.push(it);});',
' });',
' });',
' tagLibs[k].categories=dstCats;',
' }',
' try{localStorage.setItem("_lt_tag_libs",JSON.stringify(tagLibs));}catch(e){}',
' }',
' if(window._ltPromptRefresh)window._ltPromptRefresh();',
' if(window._ltTagRefresh)window._ltTagRefresh();',
' _ltToast("✅ 内容包已导入("+(mode==="replace"?"整体替换":"合并去重")+")");',
' }catch(e){_ltToast("导入失败:"+e.message);}',
' }',
'function _ltSettingsPanel(){',
' var existing=document.getElementById("lt-settings");',
' if(existing){existing.remove();return;}',
' var div=document.createElement("div");div.id="lt-settings";div.className="lt-settings";',
' var h="<div class=\\"lt-settings-head\\"><span>⚙ \\u8bbe\\u7f6e</span><span class=\\"lt-settings-close\\" id=\\"lt-settings-close\\">\\u2715</span></div>"',
' +"<div class=\\"lt-settings-body\\" id=\\"lt-settings-body\\">";',
' /* \\u5f00\\u5173 */',
' var toggles=[',
' {k:"perf",l:"\\u6027\\u80fd\\u6a21\\u5f0f"},',
' {k:"hide",l:"\\u9690\\u85cf\\u56fe\\u7247"},',
' {k:"edges",l:"\\u9690\\u85cf\\u8fde\\u7ebf"},',
' {k:"grid",l:"\\u9690\\u85cf\\u7f51\\u683c"},',
' {k:"focus",l:"\\u4e13\\u6ce8\\u6a21\\u5f0f"},',
' ];',
' h+="<div class=\\"lt-settings-sec\\"><div class=\\"lt-settings-stitle\\">\\u5f00\\u5173</div>";',
' toggles.forEach(function(t){',
' var on=document.body.classList.contains("perf-mode")||localStorage.getItem("_lt_"+t.k)==="1";',
' h+="<div class=\\"lt-settings-toggle\\" data-key=\\""+t.k+"\\"><span>"+t.l+"</span><span class=\\"lt-settings-switch"+(on?" on":"")+"\\"></span></div>";',
' });',
' h+="</div>";',
' /* API */',
' var api=JSON.parse(localStorage.getItem("_lt_prompt_api")||"{}");',
' h+="<div class=\\"lt-settings-sec\\"><div class=\\"lt-settings-stitle\\">AI \\u589e\\u5f3a API</div>"',
' +"<div class=\\"lt-settings-row\\"><label>API \\u5730\\u5740</label><input class=\\"lt-settings-inp\\" id=\\"lt-set-url\\" value=\\""+_ltEsc(api.url||"")+"\\" placeholder=\\"https://api.deepseek.com/chat/completions\\"></div>"',
' +"<div class=\\"lt-settings-row\\"><label>API Key</label><input class=\\"lt-settings-inp\\" type=\\"password\\" id=\\"lt-set-key\\" value=\\""+_ltEsc(api.key||"")+"\\" placeholder=\\"sk-...\\"></div>"',
' +"<div class=\\"lt-settings-row\\"><label>\\u6a21\\u578b</label><input class=\\"lt-settings-inp\\" id=\\"lt-set-model\\" value=\\""+_ltEsc(api.model||"")+"\\" placeholder=\\"deepseek-v4-flash\\"></div>"',
' +"<div style=\\"margin-top:8px;\\"><button class=\\"lt-settings-btn lt-settings-btn-primary\\" id=\\"lt-set-api-save\\">\\u4fdd\\u5b58</button><span class=\\"lt-settings-status\\" id=\\"lt-set-api-status\\"></span></div>"',
' +"</div>";',
' /* \\u6570\\u636e */',
' h+="<div class=\\"lt-settings-sec\\"><div class=\\"lt-settings-stitle\\">\\u6570\\u636e\\u7ba1\\u7406</div>"',
' +"<div class=\\"lt-settings-dlist\\" id=\\"lt-settings-dlist\\"></div>"',
' +"<button class=\\"lt-settings-btn lt-settings-btn-ghost lt-settings-btn-sm\\" id=\\"lt-set-export-all\\">\\u5bfc\\u51fa\\u5168\\u90e8\\u914d\\u7f6e</button>"',
' +"<div class=\\"lt-settings-cpbtns\\">"',
' +"<button class=\\"lt-settings-btn lt-settings-btn-primary lt-settings-btn-sm\\" id=\\"lt-set-cp-export\\">\\u5bfc\\u51fa\\u5185\\u5bb9\\u5305</button>"',
' +"<button class=\\"lt-settings-btn lt-settings-btn-ghost lt-settings-btn-sm\\" id=\\"lt-set-cp-import\\">\\u5bfc\\u5165\\u5185\\u5bb9\\u5305</button>"',
' +"</div>"',
' +"</div>";',
' /* \\u5173\\u4e8e */',
' h+="<div class=\\"lt-settings-sec\\"><div class=\\"lt-settings-stitle\\">\\u5173\\u4e8e</div>"',
' +"<div class=\\"lt-settings-about\\">LibTV Canvas Boost v1.10.1<br>\\u4e13\\u4e3a liblib.tv \\u753b\\u5e03\\u6253\\u9020\\u7684\\u589e\\u5f3a\\u5de5\\u5177\\u3002\\u4f18\\u5316\\u6e32\\u67d3\\u6027\\u80fd\\uff0c\\u6d41\\u7545\\u64cd\\u4f5c\\u5927\\u753b\\u5e03\\uff1b\\u5185\\u7f6e AI \\u63d0\\u793a\\u8bcd\\u52a9\\u624b\\uff08\\u6da6\\u8272/\\u6269\\u5199/\\u7ffb\\u8bd1\\uff09\\u3001\\u6807\\u7b7e\\u7ba1\\u7406\\u3001\\u63d0\\u793a\\u8bcd\\u6a21\\u677f\\u3001\\u53d8\\u91cf\\u7cfb\\u7edf\\u3001\\u753b\\u5e03\\u4e3b\\u9898\\u914d\\u8272\\u4e0e\\u591a\\u79cd\\u89c6\\u89c9\\u8f85\\u52a9\\uff0c\\u8ba9\\u5de5\\u4f5c\\u6d41\\u66f4\\u9ad8\\u6548\\u3002</div>"',
' +"<div style=\\"margin-top:12px;display:flex;gap:6px;\\"><button class=\\"lt-settings-btn lt-settings-btn-primary lt-settings-btn-sm\\" id=\\"lt-set-help\\">\\u5e2e\\u52a9 / \\u91cd\\u65b0\\u663e\\u793a\\u5f15\\u5bfc</button></div>"',
' +"</div>";',
' h+="</div>";',
' div.innerHTML=h;',
' document.body.appendChild(div);',
' /* \\u5f00\\u5173\\u4e8b\\u4ef6 */',
' div.querySelectorAll(".lt-settings-toggle").forEach(function(el){',
' el.onclick=function(){',
' var k=this.getAttribute("data-key");',
' var v=localStorage.getItem("_lt_"+k)!=="1";',
' try{localStorage.setItem("_lt_"+k,v?"1":"0");}catch(e){}',
' if(k==="grid"){var bg=document.querySelector(".react-flow__background");if(bg)bg.classList.toggle("perf-no-grid",v);}',
' else if(k==="edges"){var ed=document.querySelector(".react-flow__edges");if(ed)ed.classList.toggle("perf-hide-edges",v);}',
' else document.body.classList.toggle(k==="perf"?"perf-mode":k==="hide"?"perf-hide-imgs":"libtv-"+k,v);',
' this.querySelector(".lt-settings-switch").classList.toggle("on",v);',
' };',
' });',
' /* API \\u4fdd\\u5b58 */',
' document.getElementById("lt-set-api-save").onclick=function(){',
' var d={url:document.getElementById("lt-set-url").value.trim(),key:document.getElementById("lt-set-key").value.trim(),model:document.getElementById("lt-set-model").value.trim()||"deepseek-v4-flash"};',
' try{localStorage.setItem("_lt_prompt_api",JSON.stringify(d));}catch(e){}',
' document.getElementById("lt-set-api-status").textContent="\\u2705 \\u5df2\\u4fdd\\u5b58";',
' };',
' /* \\u6570\\u636e\\u6e05\\u5355 */',
' var keys=[["_lt_tag_libs","\\u6807\\u7b7e\\u5e93"],["_lt_cur_lib","\\u5f53\\u524d\\u6807\\u7b7e\\u5e93"],["_lt_recent","\\u5df2\\u63d2\\u5165\\u5386\\u53f2"]];',
' var dl=document.getElementById("lt-settings-dlist");',
' keys.forEach(function(kv){',
' var val=localStorage.getItem(kv[0]);',
' if(!val)return;',
' var size=Math.round(val.length/1024);',
' var el=document.createElement("div");el.className="lt-settings-ditem";',
' el.innerHTML="<span>"+kv[1]+"</span><span>"+size+"KB</span><button class=\\"lt-settings-dclear\\" data-key=\\""+kv[0]+"\\">\\u6e05\\u7a7a</button>";',
' el.querySelector(".lt-settings-dclear").onclick=function(e){e.stopPropagation();try{localStorage.removeItem(this.getAttribute("data-key"));}catch(ex){}el.remove();};',
' dl.appendChild(el);',
' });',
' /* \\u5bfc\\u51fa\\u5168\\u90e8 */',
' document.getElementById("lt-set-export-all").onclick=function(){',
' var data={};',
' keys.forEach(function(kv){var v=localStorage.getItem(kv[0]);if(v)data[kv[0]]=v;});',
' data._version="1.8.3";',
' data._exportedAt=new Date().toISOString();',
' var blob=new Blob([JSON.stringify(data,null,2)],{type:"application/json"});',
' var url=URL.createObjectURL(blob);',
' var a=document.createElement("a");a.href=url;a.download="libtv-boost-config-"+new Date().toISOString().slice(0,10)+".json";a.click();',
' setTimeout(function(){URL.revokeObjectURL(url);},1000);',
' };',
' document.getElementById("lt-set-cp-export").onclick=function(){ _ltDownloadContentPack(); };',
' document.getElementById("lt-set-cp-import").onclick=function(){ _ltImportContentPackFromFile(); };',
' /* \\u5e2e\\u52a9 */',
' document.getElementById("lt-set-help").onclick=function(){div.remove();try{localStorage.removeItem("_lt_first_run");}catch(e){}setTimeout(function(){_ltShowWelcome();},300)};',
' /* \\u5173\\u95ed */',
' document.getElementById("lt-settings-close").onclick=function(){div.remove();};',
' }',
' window._ltOpenSettings=_ltSettingsPanel;',
' window._ltContent={exportPack:_ltDownloadContentPack,importFile:_ltImportContentPackFromFile};',
' window._ltShowTagMenu=_ltShowTagMenu;',
' _ltIDBGet("_lt_accounts",function(d){if(d&&!localStorage.getItem("_lt_accounts")){try{localStorage.setItem("_lt_accounts",d);}catch(e){}}});',
'})();'].join('\n');
document.body.appendChild(hook);
} catch(e) {
console.error('[LibTV] Hook error:', e);
if (typeof alert !== 'undefined') alert('LibTV hook error: ' + e.message);
}
/* =========================================================
* 4. 菜单开关 + 状态持久化
* ========================================================= */
var _toggles = {
perf: function(v){ document.body.classList.toggle('perf-mode', v); },
hide: function(v){ document.body.classList.toggle('perf-hide-imgs', v); },
grid: function(v){
var bg = document.querySelector('.react-flow__background');
if(bg) bg.classList.toggle('perf-no-grid', v);
},
edges: function(v){
var edges = document.querySelector('.react-flow__edges');
if(edges) edges.classList.toggle('perf-hide-edges', v);
},
focus: function(v){ document.body.classList.toggle('libtv-focus', v); },
};
function _read(){
var s = {};
for(var k in _toggles) if(_toggles.hasOwnProperty(k))
try{ s[k] = localStorage.getItem('_lt_'+k) === '1'; }catch(e){}
return s;
}
function _apply(){
var s = _read();
for(var k in _toggles) if(_toggles.hasOwnProperty(k)) _toggles[k](s[k]);
}
function _click(key){
var v = true;
try{ v = localStorage.getItem('_lt_'+key) !== '1'; }catch(e){}
try{localStorage.setItem('_lt_'+key, v ? '1' : '0');}catch(e){}
_toggles[key](v);
}
setTimeout(_apply, 1000);
GM_registerMenuCommand('⚙ 设置', function(){
if(unsafeWindow._ltOpenSettings) unsafeWindow._ltOpenSettings();
});
GM_registerMenuCommand('🔍 诊断', function(){
try {
var info = [];
info.push('=== 边 (class 含 edge) ===');
var es = document.querySelectorAll('[class*="edge"]');
info.push('数量: ' + es.length);
for(var i=0;i<Math.min(es.length,10);i++){
var e = es[i];
var attrs = '';
for(var a=0;a<e.attributes.length;a++){
var attr = e.attributes[a];
if(attr.name.indexOf('__react')===0) continue;
attrs += '\n ' + attr.name + '="' + (attr.value||'').slice(0,80) + '"';
}
var path = e.querySelector('path');
var d = path ? (path.getAttribute('d')||'').slice(0,100) : '无path';
info.push(i + ' class="' + (e.getAttribute('class')||'') + '"' + attrs);
info.push(' d="' + d + '"');
}
info.push('');
info.push('=== 节点 (data-id) ===');
// 找所有有 data-id 的元素
var all = document.querySelectorAll('[data-id]');
info.push('有 data-id 的元素: ' + all.length);
var ns = [];
for(var j=0;j<all.length;j++){
var id = all[j].getAttribute('data-id');
if(id && (id.indexOf('i-')===0 || id.indexOf('n-')===0 || id.indexOf('m-')===0)){
ns.push(all[j]);
}
}
info.push('节点(data-id以i-/n-/m-开头): ' + ns.length);
for(var k=0;k<Math.min(ns.length,10);k++){
var n = ns[k];
var transform = n.style.transform || '';
var text = (n.textContent||'').trim().split('\n')[0].slice(0,40);
info.push(k + ' data-id=' + n.getAttribute('data-id') + ' transform="' + transform + '" text="' + text + '" class=' + (n.getAttribute('class')||'').slice(0,40));
}
var txt = info.join('\n');
var div = document.createElement('div');
div.style.cssText = 'position:fixed;top:10px;left:10px;z-index:999999;background:rgba(0,0,0,0.92);color:#0f0;padding:12px;border-radius:8px;font:10px/1.4 monospace;max-width:700px;max-height:80vh;overflow:auto;pointer-events:auto;';
div.innerHTML = '<div style="font-weight:bold;margin-bottom:6px;color:#fff;">🔍 诊断</div><pre style="margin:0;">' + txt.replace(/</g,'<') + '</pre><div style="margin-top:6px;display:flex;gap:6px;"><button id="lt-dbg-copy" style="padding:2px 12px;cursor:pointer;">📋 复制</button><button id="lt-dbg-close" style="padding:2px 12px;cursor:pointer;">关闭</button></div>';
document.body.appendChild(div);
document.getElementById('lt-dbg-copy').onclick = function(){
navigator.clipboard.writeText(txt).then(function(){ document.getElementById('lt-dbg-copy').textContent = '✅ 已复制'; });
};
document.getElementById('lt-dbg-close').onclick = function(){ div.remove(); };
} catch(e){ try{_ltToast(e.message);}catch(ex){} }
});
})();