[{"articleStyle":2,"cacheFirst":false,"customOrder":1,"enableJs":true,"enabled":true,"enabledCookieJar":false,"lastUpdateTime":1787294089481,"loadWithBaseUrl":false,"loginUi":"[\n    {\n        \"name\": \"🖼 背景图片链接\",\n        \"type\": \"text\",\n        \"key\": \"ft_bg\",\n        \"hint\": \"粘贴图片 URL，留空则清除背景图\"\n    },\n    {\n        \"name\": \"🎚 黑色区域透明度\",\n        \"type\": \"text\",\n        \"key\": \"ft_alpha\",\n        \"hint\": \"0-100，越大越透明，0=不透明纯黑\",\n        \"default\": \"0\"\n    },\n    {\n        \"name\": \"✅ 保存设置\",\n        \"type\": \"button\",\n        \"action\": \"var b=String(result['🖼 背景图片链接']||'').trim();var a=String(result['🎚 黑色区域透明度']||'').trim();java.put('ft_bg',b);if(a!='')java.put('ft_alpha',a);java.put('ft_msg','✅ 设置已保存');java.toast('✅ 设置已保存');java.finish();\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 1\n        }\n    },\n    {\n        \"name\": \"📌 当前接口\",\n        \"type\": \"button\",\n        \"action\": \"var n=cache.get('mcs_api_name')||'速播';var u=cache.get('mcs_api_url')||'';var t=u.indexOf('\/art\/')!==-1?'📚 小说':'🎬 影视';java.toast('📡 '+n+'\\\\n📂 '+t+'\\\\n'+u);\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 1\n        }\n    },\n    {\n        \"name\": \"⸻ 🎬 影 视 采 集 ⸻\",\n        \"type\": \"button\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 1\n        }\n    },\n    {\n        \"name\": \"如意\",\n        \"type\": \"button\",\n        \"action\": \"cache.put('mcs_api_name','如意');cache.put('mcs_api_url','https:\/\/cj.rycjapi.com\/api.php\/provide\/vod\/');java.toast('✅ 已切换：如意\\\\n🔄 请下拉刷新');\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.33\n        }\n    },\n    {\n        \"name\": \"无水印\",\n        \"type\": \"button\",\n        \"action\": \"cache.put('mcs_api_name','无水印');cache.put('mcs_api_url','https:\/\/api.wsyzy.net\/api.php\/provide\/vod\/');java.toast('✅ 已切换：无水印\\\\n🔄 请下拉刷新');\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.33\n        }\n    },\n    {\n        \"name\": \"红牛\",\n        \"type\": \"button\",\n        \"action\": \"cache.put('mcs_api_name','红牛');cache.put('mcs_api_url','https:\/\/www.hongniuzy2.com\/api.php\/provide\/vod\/');java.toast('✅ 已切换：红牛\\\\n🔄 请下拉刷新');\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.33\n        }\n    },\n    {\n        \"name\": \"豪华\",\n        \"type\": \"button\",\n        \"action\": \"cache.put('mcs_api_name','豪华');cache.put('mcs_api_url','https:\/\/hhzyapi.com\/api.php\/provide\/vod\/');java.toast('✅ 已切换：豪华\\\\n🔄 请下拉刷新');\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.33\n        }\n    },\n    {\n        \"name\": \"速播\",\n        \"type\": \"button\",\n        \"action\": \"cache.put('mcs_api_name','速播');cache.put('mcs_api_url','https:\/\/subocj.com\/api.php\/provide\/vod\/');java.toast('✅ 已切换：速播\\\\n🔄 请下拉刷新');\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.33\n        }\n    },\n    {\n        \"name\": \"索尼\",\n        \"type\": \"button\",\n        \"action\": \"cache.put('mcs_api_name','索尼');cache.put('mcs_api_url','https:\/\/suoniapi.com\/api.php\/provide\/vod\/');java.toast('✅ 已切换：索尼\\\\n🔄 请下拉刷新');\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.33\n        }\n    },\n    {\n        \"name\": \"极速\",\n        \"type\": \"button\",\n        \"action\": \"cache.put('mcs_api_name','极速');cache.put('mcs_api_url','https:\/\/jszyapi.com\/api.php\/provide\/vod\/');java.toast('✅ 已切换：极速\\\\n🔄 请下拉刷新');\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.33\n        }\n    },\n    {\n        \"name\": \"牛牛\",\n        \"type\": \"button\",\n        \"action\": \"cache.put('mcs_api_name','牛牛');cache.put('mcs_api_url','https:\/\/api.niuniuzy.me\/api.php\/provide\/vod\/');java.toast('✅ 已切换：牛牛\\\\n🔄 请下拉刷新');\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.33\n        }\n    },\n    {\n        \"name\": \"卧龙\",\n        \"type\": \"button\",\n        \"action\": \"cache.put('mcs_api_name','卧龙');cache.put('mcs_api_url','https:\/\/collect.wolongzyw.com\/api.php\/provide\/vod\/');java.toast('✅ 已切换：卧龙\\\\n🔄 请下拉刷新');\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.33\n        }\n    },\n    {\n        \"name\": \"非凡\",\n        \"type\": \"button\",\n        \"action\": \"cache.put('mcs_api_name','非凡');cache.put('mcs_api_url','http:\/\/cj.ffzyapi.com\/api.php\/provide\/vod\/');java.toast('✅ 已切换：非凡\\\\n🔄 请下拉刷新');\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.33\n        }\n    },\n    {\n        \"name\": \"量子\",\n        \"type\": \"button\",\n        \"action\": \"cache.put('mcs_api_name','量子');cache.put('mcs_api_url','https:\/\/cj.lziapi.com\/api.php\/provide\/vod\/');java.toast('✅ 已切换：量子\\\\n🔄 请下拉刷新');\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.33\n        }\n    },\n    {\n        \"name\": \"暴风\",\n        \"type\": \"button\",\n        \"action\": \"cache.put('mcs_api_name','暴风');cache.put('mcs_api_url','https:\/\/bfzyapi.com\/api.php\/provide\/vod\/');java.toast('✅ 已切换：暴风\\\\n🔄 请下拉刷新');\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.33\n        }\n    },\n    {\n        \"name\": \"360\",\n        \"type\": \"button\",\n        \"action\": \"cache.put('mcs_api_name','360');cache.put('mcs_api_url','https:\/\/360zy.com\/api.php\/provide\/vod\/');java.toast('✅ 已切换：360\\\\n🔄 请下拉刷新');\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.33\n        }\n    },\n    {\n        \"name\": \"光速\",\n        \"type\": \"button\",\n        \"action\": \"cache.put('mcs_api_name','光速');cache.put('mcs_api_url','http:\/\/api.guangsuapi.com\/api.php\/provide\/vod\/');java.toast('✅ 已切换：光速\\\\n🔄 请下拉刷新');\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.33\n        }\n    },\n    {\n        \"name\": \"虎牙\",\n        \"type\": \"button\",\n        \"action\": \"cache.put('mcs_api_name','虎牙');cache.put('mcs_api_url','https:\/\/www.huyaapi.com\/api.php\/provide\/vod\/');java.toast('✅ 已切换：虎牙\\\\n🔄 请下拉刷新');\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.33\n        }\n    },\n    {\n        \"name\": \"无尽\",\n        \"type\": \"button\",\n        \"action\": \"cache.put('mcs_api_name','无尽');cache.put('mcs_api_url','https:\/\/api.wujinapi.com\/api.php\/provide\/vod\/');java.toast('✅ 已切换：无尽\\\\n🔄 请下拉刷新');\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.33\n        }\n    },\n    {\n        \"name\": \"飘零\",\n        \"type\": \"button\",\n        \"action\": \"cache.put('mcs_api_name','飘零');cache.put('mcs_api_url','https:\/\/p2100.net\/api.php\/provide\/vod\/');java.toast('✅ 已切换：飘零\\\\n🔄 请下拉刷新');\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.33\n        }\n    },\n    {\n        \"name\": \"⸻ 📚 小 说 采 集 ⸻\",\n        \"type\": \"button\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 1\n        }\n    },\n    {\n        \"name\": \"jkun小说\",\n        \"type\": \"button\",\n        \"action\": \"cache.put('mcs_api_name','jkun小说');cache.put('mcs_api_url','https:\/\/jkunzyapi.com\/api.php\/provide\/art\/');java.toast('✅ 已切换：jkun小说\\\\n🔄 请下拉刷新');\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.5\n        }\n    },\n        {\n        \"name\": \"155小说\",\n        \"type\": \"button\",\n        \"action\": \"cache.put('mcs_api_name','155小说');cache.put('mcs_api_url','https:\/\/155api.com\/api.php\/provide\/art\/');java.toast('✅ 已切换：jkun小说\\\\n🔄 请下拉刷新');\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.5\n        }\n    }\n]","loginUrl":"function login(){}","preload":true,"preloadJs":"window.__java=java;window.__source=source;window.__cache=cache;","ruleArticles":"$.list[*]","ruleContent":"@js:\nvar res;\nvar api = cache.get('mcs_api_url') || 'https:\/\/subocj.com\/api.php\/provide\/vod\/';\nvar isArt = api.indexOf('\/art\/') !== -1;\ntry {\n    var d = null;\n    if (typeof result === 'object') {\n        d = result;\n    } else if (typeof result === 'string') {\n        try {\n            var parsed = JSON.parse(result);\n            if (parsed && parsed.list && parsed.list.length > 0) {\n                d = parsed.list[0];\n            }\n        } catch(e) {}\n    }\n    \n    if (!d) {\n        res = '<div style=\"color:#ff5252;padding:20px;text-align:center;\">暂无数据<\/div>';\n    } else if (isArt) {\n        \/\/ ========== 小说\/图片模式（保持不变） ==========\n        var bName = d.art_name || '未知';\n        var bAuthor = d.art_author || '';\n        var bType = d.type_name || '';\n        var bPic = d.art_pic || '';\n        var bBlurb = (d.art_blurb || '').replace(\/<[^>]+>\/g, '');\n        var bScore = d.art_score || '';\n        var bTime = d.art_time || '';\n        var bId = d.art_id || '';\n        var content = d.art_content || '';\n        if (!content && bPic) {\n            content = bPic;\n        }\n        var bClass = d.art_class || '';\n        \n        var isImageContent = false;\n        var imageUrls = [];\n        if (content) {\n            var imgRegex = \/https?:\\\/\\\/[^\\s\"'<>]+\\.(jpg|jpeg|png|gif|webp)\/gi;\n            var imgMatches = content.match(imgRegex);\n            if (imgMatches && imgMatches.length > 0) {\n                isImageContent = true;\n                imageUrls = imgMatches;\n            }\n            var imgTagRegex = \/<img[^>]+src=[\"']([^\"']+)[\"']\/gi;\n            var imgTagMatches = content.match(imgTagRegex);\n            if (imgTagMatches && imgTagMatches.length > 0) {\n                isImageContent = true;\n                imgTagMatches.forEach(function(tag) {\n                    var srcMatch = tag.match(\/src=[\"']([^\"']+)[\"']\/i);\n                    if (srcMatch && srcMatch[1]) {\n                        imageUrls.push(srcMatch[1]);\n                    }\n                });\n            }\n        }\n        \n        var H = [];\n        H.push('<!DOCTYPE html><html><head><meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,user-scalable=no\"><style>');\n        H.push('*{margin:0;padding:0;box-sizing:border-box}body{background:rgba(245,245,245,var(--bg-alpha));color:#333;font-family:-apple-system,sans-serif;padding:16px;--bg-alpha:1}');\n        H.push('.hdr{background:rgba(255,255,255,var(--bg-alpha));border-radius:12px;padding:16px;margin-bottom:16px;box-shadow:0 2px 8px rgba(0,0,0,.1)}');\n        H.push('.meta{display:flex;gap:12px;align-items:flex-start}');\n        H.push('.cover{width:100px;height:140px;border-radius:8px;object-fit:cover;background:rgba(238,238,238,var(--bg-alpha));flex-shrink:0}');\n        H.push('.info{flex:1}.bn{font-size:18px;font-weight:700;color:#1a73e8;margin-bottom:8px}');\n        H.push('.mt{font-size:13px;color:#666;margin:4px 0}.sc{color:#f0883e;font-weight:600}');\n        H.push('.bl{font-size:13px;color:#555;line-height:1.6;margin-top:8px}');\n        H.push('.content{background:rgba(255,255,255,var(--bg-alpha));border-radius:12px;padding:16px;box-shadow:0 2px 8px rgba(0,0,0,.1)}');\n        H.push('.ct{font-size:18px;font-weight:700;color:#1a73e8;text-align:center;margin-bottom:16px}');\n        H.push('.tx{font-size:16px;line-height:2;color:#333}.tx p{text-indent:2em;margin:8px 0}');\n        H.push('.img-content img{width:100%;border-radius:8px;margin:8px 0}');\n        H.push('.nav{position:fixed;bottom:0;left:0;right:0;background:rgba(255,255,255,var(--bg-alpha));border-top:1px solid rgba(238,238,238,var(--bg-alpha));display:flex;z-index:100}');\n        H.push('.nav-btn{flex:1;padding:14px;text-align:center;font-size:14px;color:#1a73e8;cursor:pointer}');\n        H.push('.nav-btn:active{background:rgba(248,248,248,var(--bg-alpha))}.nav-btn.disabled{color:#ccc}');\n        H.push('#rd{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(245,245,245,var(--bg-alpha));z-index:99;overflow-y:auto;padding:16px;padding-bottom:60px}');\n        H.push('.ch-list{background:rgba(255,255,255,var(--bg-alpha));border-radius:12px;padding:16px;box-shadow:0 2px 8px rgba(0,0,0,.1)}');\n        H.push('.ch-title{font-size:16px;font-weight:700;color:#1a73e8;margin-bottom:12px}');\n        H.push('.ch-item{padding:12px;border-bottom:1px solid rgba(240,240,240,var(--bg-alpha));color:#333;cursor:pointer}');\n        H.push('.ch-item:active{background:rgba(248,248,248,var(--bg-alpha))}');\n        H.push('<\/style><\/head><body>');\n        \n        H.push('<div class=\"hdr\"><div class=\"meta\">');\n        if (bPic) H.push('<img class=\"cover\" src=\"' + bPic + '\" onerror=\"this.style.display=\\'none\\'\">');\n        H.push('<div class=\"info\"><div class=\"bn\">' + bName + '<\/div>');\n        if (bAuthor) H.push('<div class=\"mt\">✍️ ' + bAuthor + '<\/div>');\n        if (bType) H.push('<div class=\"mt\">📁 ' + bType + '<\/div>');\n        if (bClass) H.push('<div class=\"mt\">🏷️ ' + bClass + '<\/div>');\n        if (bScore) H.push('<div class=\"mt sc\">⭐ ' + bScore + '<\/div>');\n        if (bTime) H.push('<div class=\"mt\">📅 ' + bTime + '<\/div>');\n        if (bBlurb) H.push('<div class=\"bl\">' + bBlurb.substring(0, 200) + '<\/div>');\n        H.push('<\/div><\/div><\/div>');\n        \n        if (isImageContent && imageUrls.length > 0) {\n            H.push('<div class=\"content\"><div class=\"ct\">' + bName + '<\/div>');\n            H.push('<div class=\"img-content\">');\n            imageUrls.forEach(function(url) {\n                H.push('<img src=\"' + url + '\" loading=\"lazy\" onerror=\"this.style.display=\\'none\\'\">');\n            });\n            H.push('<\/div><\/div>');\n        } else if (content) {\n            var clean = content.replace(\/<br\\s*\\\/?>\/gi, String.fromCharCode(10)).replace(\/<[^>]+>\/g, \"\").trim();\n            var lines = clean.split(String.fromCharCode(10));\n            var filteredLines = [];\n            for (var i = 0; i < lines.length; i++) {\n                var line = lines[i].trim();\n                if (line.length >= 3) filteredLines.push(line);\n            }\n            clean = filteredLines.join(String.fromCharCode(10));\n            var paragraphs = clean.split(\/\\n\\s*\\n\/).filter(function(p) { return p.trim().length > 0; });\n            if (paragraphs.length <= 2 && clean.length > 500) {\n                paragraphs = clean.split(\/\\n\/).filter(function(p) { return p.trim().length > 0; });\n            }\n            H.push('<div class=\"content\"><div class=\"ct\">' + bName + '<\/div><div class=\"tx\">');\n            paragraphs.forEach(function(p) {\n                var trimmed = p.trim();\n                if (trimmed.length > 0) {\n                    if (trimmed.length > 200) {\n                        var sentences = trimmed.split(\/([。！？])\/);\n                        var newP = '';\n                        for (var i = 0; i < sentences.length; i++) {\n                            newP += sentences[i];\n                            if (sentences[i] && '。！？'.indexOf(sentences[i]) >= 0) {\n                                if (newP.length > 50) {\n                                    H.push('<p>' + newP + '<\/p>');\n                                    newP = '';\n                                }\n                            }\n                        }\n                        if (newP) H.push('<p>' + newP + '<\/p>');\n                    } else {\n                        H.push('<p>' + trimmed + '<\/p>');\n                    }\n                }\n            });\n            H.push('<\/div><\/div>');\n        } else {\n            H.push('<div class=\"content\"><div class=\"ct\">' + bName + '<\/div><div class=\"tx\"><p>暂无内容<\/p><\/div><\/div>');\n        }\n        \n        H.push('<script>');\n        H.push('function applySettings(){try{var J=window.__java;if(!J||!J.get)return;var b=J.get(\"ft_bg\")||\"\";var a=parseFloat(J.get(\"ft_alpha\")||\"0\");if(isNaN(a))a=0;a=Math.max(0,Math.min(100,a));document.body.style.setProperty(\"--bg-alpha\",(1-a\/100).toFixed(3));if(b){document.body.style.backgroundImage=\"url(\"+b+\")\";document.body.style.backgroundSize=\"cover\";document.body.style.backgroundAttachment=\"fixed\";}else{document.body.style.backgroundImage=\"\";document.body.style.backgroundSize=\"\";document.body.style.backgroundAttachment=\"\";}}catch(e){}}');\n        H.push('applySettings();setInterval(applySettings,2000);');\n        H.push('<\/script><\/body><\/html>');\n        res = H.join('');\n    } else {\n        \/\/ ========== 影视模式 ==========\n        if (!d.vod_play_url) {\n            res = '<div style=\"color:#ff5252;padding:20px;text-align:center;\">暂无播放源<\/div>';\n        } else {\n            var froms = d.vod_play_from.split('$$$');\n            var urls = d.vod_play_url.split('$$$');\n            var title = d.vod_name || '未知剧集';\n            var cover = d.vod_pic || '';\n            var year = d.vod_year || '';\n            var lang = d.vod_lang || '';\n            var blurb = d.vod_blurb || d.vod_content || '';\n\n            var bgImage = '';\n            var bgAlpha = '0';\n            try {\n                bgImage = java.get('ft_bg') || '';\n                bgAlpha = java.get('ft_alpha') || '0';\n            } catch(e) {}\n\n            var html = [];\n            html.push('<!DOCTYPE html><html><head><meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,user-scalable=no\"><style>');\n            html.push('*{box-sizing:border-box;margin:0;padding:0}');\n            html.push('body{background:#121212;color:#fff;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Arial,sans-serif;padding:12px;--bg-alpha:1}');\n            html.push('.play-wrap{max-width:800px;margin:0 auto}');\n            html.push('.player-box{position:relative;width:100%;aspect-ratio:16\/9;background:rgba(0,0,0,var(--bg-alpha));border-radius:12px;overflow:hidden;margin-bottom:12px;box-shadow:0 8px 22px rgba(0,0,0,.25)}');\n            html.push('.player-box video{width:100%;height:100%;display:block;background:rgba(0,0,0,var(--bg-alpha))}');\n            html.push('.player-loading{position:absolute;left:0;top:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:#ddd;background:rgba(0,0,0,calc(var(--bg-alpha)*.55));font-size:14px;z-index:2}');\n            html.push('.gesture-tip{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:rgba(0,0,0,.7);color:#fff;padding:8px 16px;border-radius:8px;font-size:14px;z-index:10;pointer-events:none;display:none}');\n            html.push('.now-playing{background:rgba(0,0,0,var(--bg-alpha));border-radius:10px;padding:10px;margin-bottom:10px;font-weight:700;color:#fff;font-size:14px;text-align:center}');\n            html.push('.skip-bar{margin:10px 0;padding:10px;background:rgba(0,0,0,var(--bg-alpha));border-radius:12px;border:1px solid rgba(255,255,255,.1)}');\n            html.push('.skip-title{font-size:13px;font-weight:700;color:#fff;margin-bottom:8px}');\n            html.push('.skip-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}');\n            html.push('.skip-row label{font-size:12px;color:#ddd}');\n            html.push('.skip-row input{width:60px;padding:5px 8px;border:1px solid rgba(255,255,255,.2);border-radius:6px;font-size:13px;text-align:center;background:rgba(255,255,255,.1);color:#fff}');\n            html.push('.skip-row button{background:#4f8cff;color:#fff;border:none;padding:6px 12px;border-radius:6px;font-size:13px;font-weight:700}');\n            html.push('.line-tabs{display:flex;gap:8px;overflow-x:auto;padding:4px 0;margin-bottom:10px}');\n            html.push('.line-tabs button{flex:0 0 auto;border:none;padding:8px 14px;border-radius:999px;background:rgba(0,0,0,var(--bg-alpha));color:#ddd;font-size:14px;font-weight:700;border:1px solid rgba(255,255,255,.1)}');\n            html.push('.line-tabs button.active{background:#4f8cff;color:#fff;border-color:#4f8cff}');\n            html.push('.line-panel{display:none}');\n            html.push('.line-panel.active{display:block}');\n            html.push('.episode-box{display:grid;grid-template-columns:repeat(4,1fr);gap:9px}');\n            html.push('.episode-box button{width:100%;padding:10px 6px;text-align:center;background:rgba(0,0,0,var(--bg-alpha));color:#eee;border-radius:12px;border:1px solid rgba(255,255,255,.1);font-size:14px;font-weight:600;box-shadow:0 2px 8px rgba(0,0,0,.2);position:relative;transition:all .15s}');\n            html.push('.episode-box button.active{background:#4f8cff;color:#fff;border-color:#4f8cff}');\n            html.push('.episode-box button.watched{background:rgba(79,140,255,.3);border-color:#4f8cff}');\n            html.push('.episode-box button:active{transform:scale(.97)}');\n            html.push('@media(max-width:360px){.episode-box{grid-template-columns:repeat(3,1fr)}}');\n            html.push('.history-bar{display:flex;justify-content:flex-end;gap:8px;padding:10px 0}');\n            html.push('.history-bar button{background:transparent;border:1px solid rgba(255,255,255,.2);padding:4px 10px;border-radius:6px;font-size:12px;color:#ddd}');\n            html.push('.detail-box{margin-top:12px;background:rgba(0,0,0,var(--bg-alpha));border-radius:12px;padding:12px;box-shadow:0 2px 8px rgba(0,0,0,.2)}');\n            html.push('.detail-top{display:flex;gap:10px;align-items:center;margin-bottom:8px}');\n            html.push('.detail-top img{width:80px;height:112px;object-fit:cover;border-radius:8px;flex-shrink:0}');\n            html.push('.detail-info h5{font-size:16px;font-weight:700;margin:0 0 4px;color:#fff}');\n            html.push('.detail-info p{font-size:13px;color:#ccc;margin:2px 0}');\n            html.push('.detail-intro{font-size:13px;color:#ddd;line-height:1.5;max-height:200px;overflow-y:auto}');\n            html.push('<\/style><\/head><body>');\n            html.push('<div class=\"play-wrap\">');\n            html.push('<div id=\"playerBox\" class=\"player-box\"><div id=\"playerLoading\" class=\"player-loading\">加载中...<\/div><video id=\"videoPlayer\" controls playsinline webkit-playsinline x5-playsinline preload=\"auto\"><\/video><div id=\"gestureTip\" class=\"gesture-tip\"><\/div><\/div>');\n            html.push('<div class=\"detail-box\"><div class=\"detail-top\"><img src=\"' + cover + '\" onerror=\"this.style.display=\\'none\\'\"><div class=\"detail-info\"><h5>' + title + '<\/h5><p>年份：' + year + '<\/p><p>语言：' + lang + '<\/p><\/div><\/div><div class=\"detail-intro\"><p>' + blurb + '<\/p><\/div><\/div>');\n            html.push('<div class=\"skip-bar\"><div class=\"skip-title\">⚙ 播放设置（仅本剧，重新进入仍生效）<\/div><div class=\"skip-row\"><label>片头(秒)<\/label><input id=\"skipOp\" type=\"number\" min=\"0\" step=\"1\" placeholder=\"0\"><label>片尾(秒)<\/label><input id=\"skipEd\" type=\"number\" min=\"0\" step=\"1\" placeholder=\"0\"><label>速度<\/label><input id=\"speedInput\" type=\"number\" min=\"0.5\" max=\"3\" step=\"0.1\" placeholder=\"1.0\"><button type=\"button\" onclick=\"saveSkip()\">💾 保存<\/button><\/div><\/div>');\n            html.push('<div id=\"nowPlaying\" class=\"now-playing\">正在播放：-<\/div>');\n            html.push('<div class=\"line-tabs\" id=\"lineTabs\"><\/div>');\n            html.push('<div id=\"panels\"><\/div>');\n            html.push('<div class=\"history-bar\"><button onclick=\"clearHistory()\">🗑 清除本剧历史<\/button><\/div>');\n            html.push('<\/div>');\n            html.push('<script>');\n            var scriptCode = [\n                'var froms = ' + JSON.stringify(froms) + ';',\n                'var urls = ' + JSON.stringify(urls) + ';',\n                'var title = ' + JSON.stringify(title) + ';',\n                'var bgImage = ' + JSON.stringify(bgImage) + ';',\n                'var bgAlpha = ' + JSON.stringify(bgAlpha) + ';',\n                'var vp = document.getElementById(\"videoPlayer\");',\n                'var playerBox = document.getElementById(\"playerBox\");',\n                'var lineTabs = document.getElementById(\"lineTabs\");',\n                'var panels = document.getElementById(\"panels\");',\n                'var nowPlaying = document.getElementById(\"nowPlaying\");',\n                'var gestureTip = document.getElementById(\"gestureTip\");',\n                'var currentLine = 0;',\n                'var currentIndex = 0;',\n                'var currentTitle = \"\";',\n                'var playbackRate = 1;',\n                'var skipOp = 0;',\n                'var skipEd = 0;',\n                'var pendingSeekTime = null;',\n                'var pendingSeekDelta = 0;',\n                'var lastSavedTime = 0;',\n                'var longPressTimer = null;',\n                'var longPressTriggered = false;',\n                'var tempRateActive = false;',\n                'var originalRate = 1;',\n                'var startX = 0;',\n                'var startY = 0;',\n                'var seekStartTime = 0;',\n                'function getStorageKey(){return \"mcs_history_\" + encodeURIComponent(title);}',\n                'function getHistory(){try{var d=localStorage.getItem(getStorageKey());return d?JSON.parse(d):{};}catch(e){return{};}}',\n                'function saveHistory(){var h={line:currentLine,index:currentIndex,title:currentTitle,time:0};var v=document.getElementById(\"videoPlayer\");if(v)h.time=v.currentTime||0;try{localStorage.setItem(getStorageKey(),JSON.stringify(h));}catch(e){}}',\n                'function clearHistory(){localStorage.removeItem(getStorageKey());nowPlaying.textContent=\"正在播放：-\";alert(\"本剧历史已清除\");}',\n                'function updateNowPlaying(){var lineName=froms[currentLine]||(\"线路\"+(currentLine+1));nowPlaying.textContent=\"正在播放：\"+lineName+\" - \"+(currentTitle||\"未知\");}',\n                'function showLine(idx){currentLine=idx;var tabs=lineTabs.children;for(var i=0;i<tabs.length;i++)tabs[i].className=i===idx?\"active\":\"\";var ps=panels.children;for(var j=0;j<ps.length;j++)ps[j].className=\"line-panel\"+(j===idx?\" active\":\"\");}',\n                'function setActive(id){var btns=panels.querySelectorAll(\".episode-box button\");for(var i=0;i<btns.length;i++)btns[i].classList.remove(\"active\");var btn=document.getElementById(id);if(btn){btn.classList.add(\"active\");btn.classList.add(\"watched\");}}',\n                'function play(url,line,index,text){currentLine=parseInt(line);currentIndex=parseInt(index);currentTitle=text;setActive(\"ep_\"+line+\"_\"+index);vp.src=url;vp.playbackRate=playbackRate;vp.play().catch(function(){});var loading=document.getElementById(\"playerLoading\");loading.style.display=\"flex\";loading.innerHTML=\"加载中...\";vp.onloadeddata=function(){loading.style.display=\"none\";if(pendingSeekTime!==null){vp.currentTime=pendingSeekTime;pendingSeekTime=null;}};vp.onerror=function(){loading.style.display=\"flex\";loading.innerHTML=\"播放失败\";};updateNowPlaying();window.scrollTo(0,0);}',\n                'function buildUI(){for(var i=0;i<froms.length;i++){var tab=document.createElement(\"button\");tab.textContent=froms[i];tab.className=i===0?\"active\":\"\";tab.onclick=function(idx){return function(){showLine(idx);};}(i);lineTabs.appendChild(tab);var panel=document.createElement(\"div\");panel.className=\"line-panel\"+(i===0?\" active\":\"\");panel.id=\"panel_\"+i;var box=document.createElement(\"div\");box.className=\"episode-box\";var eps=urls[i].split(\"#\");for(var j=0;j<eps.length;j++){var ep=eps[j].split(\"$\");if(ep.length>=2){var btn=document.createElement(\"button\");btn.textContent=ep[0];btn.id=\"ep_\"+i+\"_\"+j;btn.dataset.url=ep[1];btn.dataset.line=i;btn.dataset.index=j;btn.onclick=function(){play(this.dataset.url,this.dataset.line,this.dataset.index,this.textContent);};box.appendChild(btn);}}panel.appendChild(box);panels.appendChild(panel);}}',\n                'vp.addEventListener(\"ended\",function(){var all=panels.querySelectorAll(\"#panel_\"+currentLine+\" .episode-box button\");var idx=-1;for(var i=0;i<all.length;i++){if(all[i].classList.contains(\"active\")){idx=i;break;}}if(idx>=0&&idx<all.length-1){all[idx+1].click();}else{var nextLine=currentLine+1;if(nextLine<froms.length){showLine(nextLine);var firstBtn=panels.querySelector(\"#panel_\"+nextLine+\" .episode-box button\");if(firstBtn)firstBtn.click();}else{alert(\"🎬 全部播放完毕\");}}});',\n                'function loadSkip(){try{var d=localStorage.getItem(getStorageKey()+\"_skip\");if(d){var o=JSON.parse(d);skipOp=parseInt(o.op)||0;skipEd=parseInt(o.ed)||0;var sp=parseFloat(o.speed);if(!(sp>0))sp=1;playbackRate=sp;vp.playbackRate=sp;var io=document.getElementById(\"skipOp\"),ie=document.getElementById(\"skipEd\"),is=document.getElementById(\"speedInput\");if(io)io.value=skipOp||\"\";if(ie)ie.value=skipEd||\"\";if(is)is.value=sp===1?\"\":sp;}}catch(e){}}',\n                'function saveSkip(){var io=document.getElementById(\"skipOp\"),ie=document.getElementById(\"skipEd\"),is=document.getElementById(\"speedInput\");var op=io?(parseInt(io.value)||0):0,ed=ie?(parseInt(ie.value)||0):0,sp=is?parseFloat(is.value):1;if(op<0)op=0;if(ed<0)ed=0;if(!(sp>0)||isNaN(sp))sp=1;skipOp=op;skipEd=ed;playbackRate=sp;vp.playbackRate=sp;try{localStorage.setItem(getStorageKey()+\"_skip\",JSON.stringify({op:op,ed:ed,speed:sp}));}catch(e){}}',\n                'function skipCheck(){if(!vp.duration||!isFinite(vp.duration))return;try{if(skipOp>0&&vp.currentTime<skipOp&&!vp.seeking){vp.currentTime=skipOp;}if(skipEd>0&&vp.currentTime>=vp.duration-skipEd&&vp.currentTime<vp.duration){vp.currentTime=vp.duration;}}catch(e){}}',\n                'vp.addEventListener(\"timeupdate\",skipCheck);',\n                'vp.addEventListener(\"timeupdate\",function(){if(Math.abs(vp.currentTime-lastSavedTime)>5){saveHistory();lastSavedTime=vp.currentTime;}});',\n                'setInterval(saveHistory,5000);',\n                'window.addEventListener(\"beforeunload\",saveHistory);',\n                'function formatTime(sec){if(!isFinite(sec)||sec<0)sec=0;var m=Math.floor(sec\/60);var s=Math.floor(sec%60);return (m<10?\"0\"+m:m)+\":\"+(s<10?\"0\"+s:s);}',\n                'function showGestureTip(msg){gestureTip.textContent=msg;gestureTip.style.display=\"block\";}',\n                'function hideGestureTip(){gestureTip.style.display=\"none\";}',\n                'document.addEventListener(\"touchstart\",function(e){if(e.target!==vp && e.target!==playerBox)return;if(e.touches.length!==1)return;startX=e.touches[0].clientX;startY=e.touches[0].clientY;seekStartTime=vp.currentTime||0;pendingSeekDelta=0;longPressTriggered=false;tempRateActive=false;clearTimeout(longPressTimer);longPressTimer=setTimeout(function(){longPressTriggered=true;tempRateActive=true;originalRate=playbackRate;playbackRate=Math.min(3,playbackRate+0.5);vp.playbackRate=playbackRate;showGestureTip(\"临时速度 \"+playbackRate.toFixed(1)+\"x，上下滑调整\");},500);});',\n                'document.addEventListener(\"touchmove\",function(e){if(e.target!==vp && e.target!==playerBox)return;if(e.touches.length!==1)return;var dx=e.touches[0].clientX-startX;var dy=e.touches[0].clientY-startY;if(longPressTriggered){if(Math.abs(dy)>Math.abs(dx)){var delta=-dy;var steps=Math.round(delta\/30);if(steps!==0){var newRate=playbackRate+steps*0.1;newRate=Math.max(0.5,Math.min(3,newRate));newRate=Math.round(newRate*10)\/10;if(newRate!==playbackRate){playbackRate=newRate;vp.playbackRate=playbackRate;showGestureTip(\"临时速度 \"+playbackRate.toFixed(1)+\"x\");}}}}else{if(Math.abs(dx)>Math.abs(dy)&&isFinite(vp.duration)){pendingSeekDelta=dx\/10;var target=seekStartTime+pendingSeekDelta;target=Math.max(0,Math.min(vp.duration,target));showGestureTip(\"进度 \"+formatTime(target)+\" \/ \"+formatTime(vp.duration));}}});',\n                'document.addEventListener(\"touchend\",function(e){if(e.target!==vp && e.target!==playerBox)return;clearTimeout(longPressTimer);if(tempRateActive){playbackRate=originalRate;vp.playbackRate=playbackRate;showGestureTip(\"已恢复速度 \"+playbackRate.toFixed(1)+\"x\");tempRateActive=false;longPressTriggered=false;setTimeout(hideGestureTip,500);}else{if(pendingSeekDelta!==0&&isFinite(vp.duration)){var target=seekStartTime+pendingSeekDelta;target=Math.max(0,Math.min(vp.duration,target));vp.currentTime=target;}longPressTriggered=false;pendingSeekDelta=0;hideGestureTip();}});',\n                'function applySettings(){',\n                '  try{',\n                '    var J = window.__java;',\n                '    if(!J || !J.get) return;',\n                '    var b = J.get(\"ft_bg\") || \"\";',\n                '    var a = parseFloat(J.get(\"ft_alpha\") || \"0\");',\n                '    if(isNaN(a)) a = 0;',\n                '    a = Math.max(0, Math.min(100, a));',\n                '    document.body.style.setProperty(\"--bg-alpha\", (1 - a \/ 100).toFixed(3));',\n                '    if(b){',\n                '      document.body.style.backgroundImage = \"url(\" + b + \")\";',\n                '      document.body.style.backgroundSize = \"cover\";',\n                '      document.body.style.backgroundAttachment = \"fixed\";',\n                '    } else {',\n                '      document.body.style.backgroundImage = \"\";',\n                '      document.body.style.backgroundSize = \"\";',\n                '      document.body.style.backgroundAttachment = \"\";',\n                '    }',\n                '  }catch(e){}',\n                '}',\n                'applySettings();',\n                'setInterval(applySettings, 2000);',\n                'document.addEventListener(\"visibilitychange\", function(){ if(!document.hidden) applySettings(); });',\n                'buildUI();',\n                'loadSkip();',\n                'function restoreHistory(){var h=getHistory();if(h.line!==undefined&&h.index!==undefined){showLine(parseInt(h.line));var btn=document.getElementById(\"ep_\"+h.line+\"_\"+h.index);if(btn){if(h.time){pendingSeekTime=h.time;}btn.click();return;}}var firstBtn=panels.querySelector(\".episode-box button\");if(firstBtn)firstBtn.click();}',\n                'restoreHistory();',\n                \/\/ ===== 新增：全屏自动横屏 =====\n                'function lockLandscape(){if(screen.orientation&&screen.orientation.lock){screen.orientation.lock(\"landscape\").catch(function(){});}}',\n                'function unlockOrientation(){if(screen.orientation&&screen.orientation.unlock){screen.orientation.unlock();}}',\n                'document.addEventListener(\"fullscreenchange\",function(){if(document.fullscreenElement){lockLandscape();}else{unlockOrientation();}});',\n                'document.addEventListener(\"webkitfullscreenchange\",function(){if(document.webkitFullscreenElement){lockLandscape();}else{unlockOrientation();}});'\n            ].join('');\n            html.push(scriptCode);\n            html.push('<\/script><\/body><\/html>');\n            res = html.join('');\n        }\n    }\n} catch (e) {\n    res = '<div style=\"color:red;\">代码执行异常: ' + e.message + '<\/div>';\n}\nres;","ruleImage":"@js:\nvar api = cache.get('mcs_api_url') || '';\nvar isArt = api.indexOf('\/art\/') !== -1;\nvar d = result;\nif (typeof d === 'string') { try { d = JSON.parse(d); } catch(e) {} }\nisArt ? (d.art_pic || '') : (d.vod_pic || '');","ruleLink":"@js:\nvar api = cache.get('mcs_api_url') || 'https:\/\/subocj.com\/api.php\/provide\/vod\/';\nvar isArt = api.indexOf('\/art\/') !== -1;\nvar d = result;\nif (typeof d === 'string') { try { d = JSON.parse(d); } catch(e) {} }\nvar id = isArt ? d.art_id : d.vod_id;\napi + '?ac=detail&ids=' + id;","ruleNextPage":"@js:\nvar next = '';\ntry {\n    var d = JSON.parse(result);\n    var p = parseInt(d.page, 10);\n    var pc = parseInt(d.pagecount, 10);\n    if (!isNaN(p) && !isNaN(pc) && p < pc) {\n        next = baseUrl.replace(\/pg=\\d+\/, 'pg=' + (p + 1));\n    }\n} catch(e) {}\nnext;","rulePubDate":"$.art_time","ruleTitle":"@js:\nvar api = cache.get('mcs_api_url') || '';\nvar isArt = api.indexOf('\/art\/') !== -1;\nvar d = result;\nif (typeof d === 'string') { try { d = JSON.parse(d); } catch(e) {} }\nisArt ? (d.art_name || '') : (d.vod_name || '');","searchUrl":"@js:\nvar api = cache.get('mcs_api_url') || 'https:\/\/subocj.com\/api.php\/provide\/vod\/';\nvar isArt = api.indexOf('\/art\/') !== -1;\nvar param = isArt ? 'list' : 'videolist';\napi + '?ac=' + param + '&wd=' + key + '&pg=' + page;","showWebLog":false,"singleUrl":false,"sortUrl":"@js:\nvar base = cache.get('mcs_api_url') || 'https:\/\/subocj.com\/api.php\/provide\/vod\/';\nvar isArt = base.indexOf('\/art\/') !== -1;\nvar out = [];\ntry {\n    var json = JSON.parse(java.ajax(base + '?ac=list'));\n    var cats = json.class || [];\n    var ignoreIds = isArt ? [] : [1, 2, 3, 4];\n    cats.forEach(function(c) {\n        if (c.type_id && c.type_name) {\n            if (ignoreIds.indexOf(parseInt(c.type_id, 10)) !== -1) return;\n            var param = isArt ? 'list' : 'videolist';\n            out.push(c.type_name + '::' + base + '?ac=' + param + '&t=' + c.type_id + '&pg=1');\n        }\n    });\n    if (out.length === 0) out.push('暂无分类::' + base + '?ac=list&pg=1');\n} catch(e) {\n    out.push('加载失败::' + base + '?ac=list&pg=1');\n}\nout.join('\\n');","sourceComment":"\/\/梦不觉  2026.08.17","sourceGroup":"影视·小说","sourceIcon":"https:\/\/c-ssl.dtstatic.com\/uploads\/blog\/202309\/22\/GgSb5GLzidPVw6g.thumb.400_0.jpg","sourceName":"苹果MCS·影视小说聚合","sourceUrl":"https:\/\/subocj.com\/api.php\/provide\/vod\/","type":0,"variableComment":"通过 loginUi 切换影视\/小说接口\n影视: \/api.php\/provide\/vod\/\n小说: \/api.php\/provide\/art\/"}]