// ==UserScript== // @name Steam 好友动态美化 // @namespace http://tampermonkey.net/ // @version 1.3.6 // @description 美化Steam好友动态页面样式(科技感深空玻璃主题),支持截图/游戏/成就/评测筛选,好友列表悬浮面板,修复游戏封面图显示为SVG的问题 // @author SmallFork // @match https://steamcommunity.com/id/*/home // @match https://steamcommunity.com/id/*/myactivity // @grant GM_addStyle // @grant GM_xmlhttpRequest // @grant unsafeWindow // @connect store.steampowered.com // @run-at document-end // @license MIT // @icon data:image/svg+xml, // @tag Steam // @tag games // ==/UserScript== (function() { 'use strict'; const _ver = typeof GM_info !== 'undefined' ? GM_info.script.version : 'unknown'; console.log(`%c[Steam 好友动态美化] v${_ver} 已启动`, 'color:#4fc3f7;font-weight:bold;font-size:13px'); /* ========== 页面全局变量访问 ========== */ // 沙箱环境下 window 可能无法访问页面全局变量,每次动态检测 function getPageVar(name) { try { if (typeof unsafeWindow !== 'undefined' && unsafeWindow[name] !== undefined) return unsafeWindow[name]; } catch {} try { if (window[name] !== undefined) return window[name]; } catch {} try { if (document.defaultView && document.defaultView[name] !== undefined) return document.defaultView[name]; } catch {} return undefined; } /* ========== 配置常量 ========== */ const CONFIG = { WAIT_TIMEOUT: 15000, // 等待元素超时(ms) Z_INDEX: 9999, // UI 层级 BTN_SIZE: 30, // 按钮尺寸(px) PANEL_WIDTH: 300, // 好友面板宽度(px) PANEL_MAX_H: '80vh', // 好友面板最大高度 MAX_GAME_SHOW: 12, // 游戏购买动态最大封面数 ANIM_DURATION: 250, // 查看器动画时长(ms) ZOOM_MIN: 0.2, // 最小缩放比例 ZOOM_MAX: 8, // 最大缩放比例 ZOOM_STEP: 0.15, // 缩放步进 DL_IMG_SIZE: 5000 // 下载原图尺寸参数(imw/imh) }; /* ========== 筛选按钮配置 ========== */ const FILTER_BTNS = [ { id: 'sf-screenshot-btn', icon: 'screenshot', title: '只看截图', filter: 'screenshot', gradient: 'var(--sf-green),#0d9488', shadow: '52,211,153' }, { id: 'sf-game-btn', icon: 'game', title: '只看游戏', filter: 'game', gradient: 'var(--sf-orange),#ea580c', shadow: '251,146,60' }, { id: 'sf-achievement-btn', icon: 'achievement', title: '只看成就', filter: 'achievement', gradient: '#a855f7,#7c3aed', shadow: '168,85,247' }, { id: 'sf-review-btn', icon: 'review', title: '只看评测', filter: 'review', gradient: '#f43f5e,#be123c', shadow: '244,63,94' }, { id: 'sf-friend-btn', icon: 'friend', title: '好友列表', filter: null, gradient: 'var(--sf-accent),#0284c7', shadow: '79,195,247' } ]; /* ========== 筛选匹配规则 ========== */ const FILTER_MATCHERS = { screenshot: block => !!block.querySelector('.blotter_screenshot'), game: block => !!block.querySelector('.blotter_gamepurchase'), achievement: block => [...block.querySelectorAll('.blotter_daily_rollup_line')] .some(line => { const t = line.textContent || ''; return t.includes('达成了《') || t.includes('的成就'); }), review: block => !!block.querySelector('.blotter_recommendation') }; /* ========== 每日汇总行分类 ========== */ function classifyRollupLine(line) { const t = line.textContent || ''; if (/成为了好友/.test(t)) return 'friend'; if (/第一次玩/.test(t)) return 'firstplay'; if (/添加到.*愿望单/.test(t)) return 'wishlist'; if (/达成了|的成就/.test(t)) return 'achievement'; return null; } function injectRollupStyles() { document.querySelectorAll('.blotter_daily_rollup_line').forEach(line => { if (line.dataset.sfClassified) return; line.dataset.sfClassified = '1'; const cat = classifyRollupLine(line); if (cat) line.classList.add('sf-rollup-' + cat); }); } /* ========== SVG 图标 ========== */ const ICONS = { friend: '', close: '', screenshot: '', game: '', achievement: '', review: '', download: '', top: '', prev: '', next: '' }; /* ========== 工具函数 ========== */ const $ = (sel, ctx = document) => ctx.querySelector(sel); const $$ = (sel, ctx = document) => [...ctx.querySelectorAll(sel)]; const escapeHtml = t => String(t).replace(/[&<>"']/g, c => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[c])); /* ========== CSS 变量主题(科技感深空玻璃) ========== */ const CSS_VARS = `:root{ --sf-bg:#0d1520;--sf-bg2:#080c12; --sf-card:rgba(15,24,40,.78); --sf-border:rgba(79,195,247,.14); --sf-border-strong:rgba(79,195,247,.4); --sf-glow:rgba(79,195,247,.22); --sf-hover:rgba(79,195,247,.08); --sf-text:#c9d6e2;--sf-dim:#7d8fa1; --sf-accent:#4fc3f7; --sf-green:#34d399;--sf-orange:#fb923c; --sf-radius:12px; --sf-shadow:0 4px 24px rgba(0,0,0,.45); --sf-transition:all .3s cubic-bezier(.25,.8,.35,1)}`; /* ========== 样式表 ========== */ const CSS = `${CSS_VARS} /* 页面布局:深空渐变 + 顶部青色光晕 */ .pagecontent,.bluebg{background:radial-gradient(1100px 480px at 50% -120px,rgba(79,195,247,.09),transparent 62%),linear-gradient(180deg,var(--sf-bg) 0%,var(--sf-bg2) 100%)!important} #blotter_page{display:block!important;padding:0!important;max-width:940px!important;margin:0 auto!important} .blotter_content,#blotter_content{float:none!important;width:auto!important;min-width:0!important;max-width:none!important;padding:0 16px!important;box-sizing:border-box!important} #friendactivity_right_column{display:none!important} .blotter_block,.blotter_status_entry,.blotter_eventsblock,.friend_activity_header{margin-left:0!important;margin-right:0!important} .blotter_daily_rollup_line>span{max-width:none!important} /* 页面标题 & 头部 */ .blotter_page_title h1{font-size:28px!important;font-weight:800!important;letter-spacing:.5px!important;background:linear-gradient(90deg,#fff 30%,#7dd3fc 100%)!important;-webkit-background-clip:text!important;background-clip:text!important;-webkit-text-fill-color:transparent!important;margin-bottom:20px!important} .friend_activity_header{padding:20px!important;background:rgba(15,24,40,.6)!important;backdrop-filter:blur(10px)!important;-webkit-backdrop-filter:blur(10px)!important;border:1px solid var(--sf-border)!important;border-radius:var(--sf-radius)!important;margin-bottom:16px!important;box-shadow:var(--sf-shadow)!important} /* 动态卡片:玻璃拟态 + 顶部光线 + 悬停辉光 */ .blotter_block{position:relative!important;background:linear-gradient(160deg,rgba(20,32,50,.82) 0%,rgba(11,18,30,.86) 100%)!important;backdrop-filter:blur(10px)!important;-webkit-backdrop-filter:blur(10px)!important;border-radius:var(--sf-radius)!important;border:1px solid var(--sf-border)!important;margin-bottom:16px!important;overflow:hidden!important;box-shadow:var(--sf-shadow),inset 0 1px 0 rgba(255,255,255,.04)!important;transition:var(--sf-transition)!important} .blotter_block::before{content:''!important;position:absolute!important;top:0!important;left:0!important;right:0!important;height:1px!important;background:linear-gradient(90deg,transparent 0%,rgba(79,195,247,.55) 50%,transparent 100%)!important;opacity:.55!important;pointer-events:none!important;z-index:1!important;transition:opacity .3s ease!important} .blotter_block:hover{transform:translateY(-3px)!important;box-shadow:0 8px 32px rgba(0,0,0,.5),0 0 26px var(--sf-glow)!important;border-color:var(--sf-border-strong)!important} .blotter_block:hover::before{opacity:1!important} .blotter_block.sf-hidden{display:none!important} /* 作者信息 */ .blotter_author_block{padding:14px 16px!important;background:rgba(0,0,0,.25)!important;border-bottom:1px solid rgba(79,195,247,.08)!important} .blotter_avatar_holder .playerAvatar{border-radius:8px!important;box-shadow:0 2px 10px rgba(0,0,0,.4),0 0 0 1px rgba(79,195,247,.2)!important;transition:box-shadow .3s ease!important} .blotter_block:hover .blotter_avatar_holder .playerAvatar{box-shadow:0 2px 10px rgba(0,0,0,.4),0 0 12px var(--sf-glow)!important} .blotter_avatar_holder .playerAvatar img{border-radius:8px!important} .blotter_author_block a[data-miniprofile]{font-size:14px!important;font-weight:600!important;color:var(--sf-accent)!important;text-shadow:0 0 12px rgba(79,195,247,.35)!important;transition:color .2s ease!important} .blotter_author_block a[data-miniprofile]:hover{color:#fff!important} /* 截图动态 */ .blotter_screenshot{border-radius:0!important;border:none!important} .blotter_screenshot_image{border-radius:0!important;overflow:hidden!important} .blotter_screenshot_image img{transition:transform .35s cubic-bezier(.25,.8,.35,1)!important} .blotter_block:hover .blotter_screenshot_image img{transform:scale(1.03)!important} .blotter_screenshot_title{padding:12px 16px!important;font-size:13px!important;color:var(--sf-text)!important;line-height:1.5!important;background:rgba(0,0,0,.12)!important} .blotter_screenshot_gallery_image{border-radius:8px!important;margin:4px!important;overflow:hidden!important;transition:box-shadow .25s ease!important} .blotter_screenshot_gallery_image:hover{box-shadow:0 0 12px var(--sf-glow)!important} /* 游戏状态动态 */ .blotter_userstatus_game{height:auto!important} .blotter_userstatus_game img{height:auto!important} .highlight_strip{overflow-x:auto!important;overflow-y:hidden!important} .highlight_strip_scroll{width:auto!important;display:flex!important;flex-wrap:nowrap!important;overflow-x:auto!important;overflow-y:hidden!important;gap:4px!important;padding:4px!important} .highlight_strip_scroll::-webkit-scrollbar{height:6px} .highlight_strip_scroll::-webkit-scrollbar-thumb{background:rgba(79,195,247,.25);border-radius:3px} .highlight_strip_scroll::-webkit-scrollbar-thumb:hover{background:rgba(79,195,247,.45)} .highlight_strip_scroll::-webkit-scrollbar-track{background:transparent} /* 游戏购买动态 */ .blotter_gamepurchase{border:none!important} .blotter_gamepurchase_content{padding:16px!important;display:flex!important;flex-wrap:wrap!important;gap:8px!important} .blotter_gamepurchase_logo{border-radius:8px!important;overflow:hidden!important;transition:transform .2s ease,box-shadow .2s ease!important;box-shadow:0 2px 8px rgba(0,0,0,.35)!important} .blotter_gamepurchase_logo:hover{transform:scale(1.06)!important;box-shadow:0 4px 16px rgba(0,0,0,.4),0 0 14px var(--sf-glow)!important} .blotter_gamepurchase_logo img{border-radius:8px!important} .blotter_gamepurchase_logo.single_item{width:200px!important} .plus_block{background:rgba(79,195,247,.08)!important;border:1px solid var(--sf-border)!important;border-radius:8px!important;color:var(--sf-accent)!important;font-weight:600!important;font-variant-numeric:tabular-nums!important} .blotter_gamepurchase_details{padding:12px 16px!important;font-size:12px!important;color:var(--sf-dim)!important} /* 评测动态 */ .blotter_recommendation{padding:16px!important} .blotter_recommendation_game{display:flex!important;align-items:center!important;gap:12px!important;margin-bottom:12px!important} .blotter_recommendation_game img{border-radius:8px!important;box-shadow:0 2px 8px rgba(0,0,0,.35)!important} .blotter_recommendation_game_name{font-size:15px!important;font-weight:600!important;color:#fff!important} .blotter_recommendation_rating{display:flex!important;align-items:center!important;gap:8px!important;margin-bottom:10px!important} .blotter_recommendation_rating img{width:24px!important;height:24px!important;filter:drop-shadow(0 0 6px rgba(79,195,247,.3))!important} .blotter_recommendation_desc{font-size:13px!important;color:var(--sf-text)!important;line-height:1.6!important;padding:12px!important;background:rgba(0,0,0,.18)!important;border-left:2px solid var(--sf-border-strong)!important;border-radius:8px!important} /* 创意工坊动态 */ .blotter_workshopitempublished{border:none!important} .blotter_workshopitem{padding:16px!important} /* 外链卡片 */ .dynamiclink_box{border-radius:8px!important;overflow:hidden!important;background:rgba(0,0,0,.32)!important;border:1px solid var(--sf-border)!important;transition:all .2s ease!important} .dynamiclink_box:hover{border-color:var(--sf-border-strong)!important;box-shadow:0 0 16px var(--sf-glow)!important} .dynamiclink_preview{border-radius:8px 8px 0 0!important} .dynamiclink_content{padding:12px!important} .dynamiclink_name{font-size:14px!important;font-weight:600!important;color:#fff!important} .dynamiclink_type{font-size:12px!important;color:var(--sf-dim)!important} .dynamiclink_author{font-size:12px!important;color:var(--sf-text)!important} .dynamiclink_authorname{color:var(--sf-accent)!important} .dynamiclink_description{font-size:12px!important;color:var(--sf-dim)!important;margin-top:8px!important} /* 评论 & 操作区 */ .blotter_control_container{padding:12px 16px!important;background:rgba(0,0,0,.18)!important;border-top:1px solid rgba(79,195,247,.08)!important} .btn_grey_grey,.btn_grey_white_innerfade{background:rgba(79,195,247,.08)!important;border:1px solid var(--sf-border)!important;border-radius:6px!important;color:var(--sf-text)!important;transition:all .2s ease!important} .btn_grey_grey:hover,.btn_grey_white_innerfade:hover{background:rgba(79,195,247,.16)!important;color:#fff!important;border-color:var(--sf-border-strong)!important;box-shadow:0 0 10px var(--sf-glow)!important} .ico16.thumb_up{filter:brightness(1.2) drop-shadow(0 0 4px rgba(79,195,247,.4))!important} .blotter_voters_names{font-size:12px!important;color:var(--sf-dim)!important} .blotter_voters_names a{color:var(--sf-accent)!important} .blotter_comment_thread{background:rgba(0,0,0,.12)!important;border-radius:8px!important;margin:12px 16px!important} .comment_footer_ctn{display:none!important} .commentthread_area{background:transparent!important;border:none!important} .commentthread_textarea{background:rgba(4,10,18,.6)!important;border:1px solid var(--sf-border)!important;border-radius:8px!important;color:#fff!important;font-size:13px!important;padding:10px 12px!important;height:60px!important;min-height:60px!important;max-height:150px!important;resize:vertical!important;box-sizing:border-box!important;transition:border-color .2s ease,box-shadow .2s ease!important} .commentthread_textarea:focus{border-color:var(--sf-border-strong)!important;box-shadow:0 0 0 1px rgba(79,195,247,.25),0 0 14px var(--sf-glow)!important;outline:none!important} .btn_green_white_innerfade{background:linear-gradient(135deg,#10b981 0%,#0d9488 100%)!important;border-radius:6px!important;font-weight:500!important;box-shadow:0 2px 10px rgba(16,185,129,.3)!important} /* 日期分组:左侧霓虹指示条 */ .blotter_day{margin-top:20px!important} .blotter_day_header{display:flex!important;align-items:center!important;padding:10px 16px!important;background:linear-gradient(90deg,rgba(79,195,247,.1),rgba(79,195,247,.02))!important;border-left:2px solid var(--sf-accent)!important;border-radius:8px!important;margin-bottom:12px!important} .blotter_day_header h2{font-size:14px!important;font-weight:600!important;letter-spacing:.5px!important;color:var(--sf-text)!important} /* 发帖区域 */ .blotter_status_entry{background:linear-gradient(160deg,rgba(20,32,50,.82),rgba(11,18,30,.86))!important;backdrop-filter:blur(10px)!important;-webkit-backdrop-filter:blur(10px)!important;border-radius:var(--sf-radius)!important;border:1px solid var(--sf-border)!important;padding:12px!important;margin-bottom:16px!important;box-sizing:border-box!important;box-shadow:var(--sf-shadow)!important} #blotter_statuspost_textarea{background:rgba(4,10,18,.6)!important;border:1px solid var(--sf-border)!important;border-radius:8px!important;color:#fff!important;font-size:14px!important;padding:12px!important;height:80px!important;min-height:80px!important;max-height:200px!important;resize:vertical!important;box-sizing:border-box!important;transition:border-color .2s ease,box-shadow .2s ease!important} #blotter_statuspost_textarea:focus{border-color:var(--sf-border-strong)!important;box-shadow:0 0 0 1px rgba(79,195,247,.25),0 0 14px var(--sf-glow)!important;outline:none!important} .blotter_appselect{background:rgba(79,195,247,.06)!important;border-radius:6px!important;border:1px solid var(--sf-border)!important} #blotter_appselect_suggestions{background:rgba(10,16,26,.95)!important;border:1px solid var(--sf-border-strong)!important;border-radius:8px!important;box-shadow:0 8px 24px rgba(0,0,0,.5),0 0 20px var(--sf-glow)!important;overflow:hidden!important;backdrop-filter:blur(8px)!important;-webkit-backdrop-filter:blur(8px)!important} #blotter_appselect_suggestions .option{color:var(--sf-text)!important;padding:5px 12px!important;font-size:12px!important;border-bottom:1px solid rgba(79,195,247,.06)!important;transition:background .15s ease!important;line-height:1.4!important} #blotter_appselect_suggestions .option:last-child{border-bottom:none!important} #blotter_appselect_suggestions .option:hover{background:rgba(79,195,247,.15)!important;color:#fff!important} .blotter_status_submit_ctn{display:flex!important;align-items:center!important;gap:10px!important;justify-content:flex-end!important} .blotter_eventsblock{background:rgba(15,24,40,.6)!important;backdrop-filter:blur(10px)!important;-webkit-backdrop-filter:blur(10px)!important;border-radius:var(--sf-radius)!important;border:1px solid var(--sf-border)!important;padding:16px!important;margin-bottom:16px!important} .blotter_eventsblock_title{font-size:14px!important;font-weight:600!important;color:#fff!important;margin-bottom:12px!important} /* Steam 原生全屏截图 */ .blotter_screenshot_fullscreen{background:rgba(4,8,14,.95)!important} .blotter_screenshot_fullscreen img{border-radius:8px!important;max-width:95vw!important;max-height:90vh!important;box-shadow:0 0 40px rgba(0,0,0,.6),0 0 20px var(--sf-glow)!important} /* Steam 原生弹窗美化 */ #modalContent{background:var(--sf-card)!important;backdrop-filter:blur(14px)!important;-webkit-backdrop-filter:blur(14px)!important;border-radius:var(--sf-radius)!important;border:1px solid var(--sf-border-strong)!important;box-shadow:0 8px 40px rgba(0,0,0,.55),0 0 30px var(--sf-glow)!important;overflow:hidden!important} #modalContentTitleBar{background:linear-gradient(90deg,rgba(13,21,32,.95) 0%,rgba(30,58,84,.95) 100%)!important;border-bottom:1px solid var(--sf-border)!important;padding:10px 16px!important;display:flex!important;align-items:center!important;gap:10px!important} #modalContentTitleBarLink{color:var(--sf-accent)!important;font-size:13px!important;font-weight:500!important;text-decoration:none!important;flex:1!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important} #modalContentTitleBarLink:hover{color:#fff!important} #modalContentTitleBarImageLink img{opacity:.5!important;transition:opacity .2s!important} #modalContentTitleBarImageLink:hover img{opacity:1!important} #modalContentDismiss{width:28px!important;height:28px!important;border-radius:50%!important;background:rgba(244,63,94,.12)!important;border:1px solid rgba(244,63,94,.3)!important;cursor:pointer!important;display:flex!important;align-items:center!important;justify-content:center!important;transition:all .2s!important;padding:0!important} #modalContentDismiss:hover{background:rgba(244,63,94,.3)!important;box-shadow:0 0 10px rgba(244,63,94,.35)!important} #modalContentDismiss img{display:none!important} #modalContentDismiss::after{content:'✕';color:#fda4af!important;font-size:13px!important} #modalContentFrameContainer{background:rgba(0,0,0,.2)!important} .modalContent_iFrame{border:none!important;border-radius:0!important} /* 右侧按钮组:霓虹圆钮 */ #sf-btn-group{position:fixed!important;bottom:30px!important;right:30px!important;display:flex!important;flex-direction:column!important;gap:10px!important;z-index:${CONFIG.Z_INDEX}!important} #sf-friend-btn,#sf-screenshot-btn,#sf-game-btn,#sf-achievement-btn,#sf-review-btn{width:${CONFIG.BTN_SIZE}px!important;height:${CONFIG.BTN_SIZE}px!important;border-radius:50%!important;border:1px solid rgba(255,255,255,.25)!important;cursor:pointer!important;box-shadow:0 4px 20px rgba(0,0,0,.35)!important;transition:var(--sf-transition)!important;display:flex!important;align-items:center!important;justify-content:center!important} #sf-screenshot-btn{background:linear-gradient(135deg,var(--sf-green) 0%,#0d9488 100%)!important;box-shadow:0 4px 20px rgba(52,211,153,.35)!important} #sf-game-btn{background:linear-gradient(135deg,var(--sf-orange) 0%,#ea580c 100%)!important;box-shadow:0 4px 20px rgba(251,146,60,.35)!important} #sf-achievement-btn{background:linear-gradient(135deg,#a855f7 0%,#7c3aed 100%)!important;box-shadow:0 4px 20px rgba(168,85,247,.35)!important} #sf-review-btn{background:linear-gradient(135deg,#f43f5e 0%,#be123c 100%)!important;box-shadow:0 4px 20px rgba(244,63,94,.35)!important} #sf-friend-btn{background:linear-gradient(135deg,var(--sf-accent) 0%,#0284c7 100%)!important;box-shadow:0 4px 20px rgba(79,195,247,.35)!important} #sf-friend-btn:hover,#sf-screenshot-btn:hover,#sf-game-btn:hover,#sf-achievement-btn:hover,#sf-review-btn:hover{transform:scale(1.1)!important;border-color:rgba(255,255,255,.5)!important} #sf-friend-btn svg,#sf-screenshot-btn svg,#sf-game-btn svg,#sf-achievement-btn svg,#sf-review-btn svg{width:28px!important;height:28px!important;fill:#fff!important;filter:drop-shadow(0 0 3px rgba(255,255,255,.45))!important} /* 筛选按钮激活/未激活状态 */ #sf-btn-group.filtering #sf-screenshot-btn,#sf-btn-group.filtering #sf-game-btn,#sf-btn-group.filtering #sf-achievement-btn,#sf-btn-group.filtering #sf-review-btn{opacity:.3!important;filter:grayscale(.7)!important;transform:scale(.9)!important} #sf-btn-group.filtering #sf-screenshot-btn.active,#sf-btn-group.filtering #sf-game-btn.active,#sf-btn-group.filtering #sf-achievement-btn.active,#sf-btn-group.filtering #sf-review-btn.active{opacity:1!important;filter:none!important;transform:scale(1.1)!important;animation:sf-pulse 2.2s ease-in-out infinite!important} @keyframes sf-pulse{0%,100%{filter:brightness(1)}50%{filter:brightness(1.4)}} /* 每日汇总行分类样式:霓虹左缘 */ .sf-rollup-friend{box-shadow:inset 2px 0 0 #38bdf8,inset 0 0 14px rgba(56,189,248,.05)!important;background:rgba(56,189,248,.05)!important} .sf-rollup-firstplay{box-shadow:inset 2px 0 0 #34d399,inset 0 0 14px rgba(52,211,153,.05)!important;background:rgba(52,211,153,.05)!important} .sf-rollup-wishlist{box-shadow:inset 2px 0 0 #fb923c,inset 0 0 14px rgba(251,146,60,.05)!important;background:rgba(251,146,60,.05)!important} .sf-rollup-achievement{box-shadow:inset 2px 0 0 #a855f7,inset 0 0 14px rgba(168,85,247,.05)!important;background:rgba(168,85,247,.05)!important} /* 回到顶部 */ #sf-top-btn{width:${CONFIG.BTN_SIZE}px!important;height:${CONFIG.BTN_SIZE}px!important;border-radius:50%!important;border:1px solid rgba(79,195,247,.3)!important;cursor:pointer!important;box-shadow:0 4px 20px rgba(0,0,0,.35)!important;transition:var(--sf-transition)!important;display:flex!important;align-items:center!important;justify-content:center!important;background:linear-gradient(135deg,#1e3a5f 0%,#0f2038 100%)!important;opacity:0!important;visibility:hidden!important;transform:scale(.8)!important} #sf-top-btn.show{opacity:1!important;visibility:visible!important;transform:scale(1)!important} #sf-top-btn:hover{transform:scale(1.1)!important;background:linear-gradient(135deg,#2563eb 0%,#1e40af 100%)!important;border-color:var(--sf-border-strong)!important;box-shadow:0 4px 20px rgba(0,0,0,.35),0 0 16px var(--sf-glow)!important} #sf-top-btn svg{width:28px!important;height:28px!important;fill:#fff!important;filter:drop-shadow(0 0 3px rgba(79,195,247,.5))!important} /* 好友面板:玻璃拟态 + 辉光边框 */ #sf-friend-panel{position:fixed!important;bottom:200px!important;right:30px!important;width:${CONFIG.PANEL_WIDTH}px!important;max-height:${CONFIG.PANEL_MAX_H}!important;background:rgba(10,16,26,.92)!important;backdrop-filter:blur(16px)!important;-webkit-backdrop-filter:blur(16px)!important;border-radius:16px!important;border:1px solid var(--sf-border-strong)!important;box-shadow:0 8px 40px rgba(0,0,0,.6),0 0 30px var(--sf-glow)!important;z-index:${CONFIG.Z_INDEX - 1}!important;overflow:hidden!important;opacity:0!important;visibility:hidden!important;transform:translateY(20px) scale(.95)!important;transition:var(--sf-transition)!important} #sf-friend-panel.open{opacity:1!important;visibility:visible!important;transform:translateY(0) scale(1)!important} .sf-panel-header{padding:16px!important;background:linear-gradient(90deg,rgba(79,195,247,.1),rgba(79,195,247,.02))!important;border-bottom:1px solid var(--sf-border)!important;display:flex!important;align-items:center!important;justify-content:space-between!important;position:relative!important} .sf-panel-header::after{content:''!important;position:absolute!important;bottom:-1px!important;left:0!important;right:0!important;height:1px!important;background:linear-gradient(90deg,transparent,rgba(79,195,247,.6),transparent)!important;pointer-events:none!important} .sf-panel-title{font-size:16px!important;font-weight:700!important;letter-spacing:.5px!important;background:linear-gradient(90deg,#4fc3f7,#a5e4ff)!important;-webkit-background-clip:text!important;background-clip:text!important;-webkit-text-fill-color:transparent!important} .sf-panel-close{width:28px!important;height:28px!important;border-radius:50%!important;background:rgba(255,255,255,.08)!important;border:1px solid var(--sf-border)!important;cursor:pointer!important;display:flex!important;align-items:center!important;justify-content:center!important;transition:all .2s!important} .sf-panel-close:hover{background:rgba(244,63,94,.2)!important;border-color:rgba(244,63,94,.4)!important} .sf-panel-close svg{width:14px!important;height:14px!important;fill:var(--sf-text)!important} .sf-panel-content{padding:12px!important;max-height:calc(70vh - 60px)!important;overflow-y:auto!important} .sf-panel-content::-webkit-scrollbar{width:6px!important} .sf-panel-content::-webkit-scrollbar-thumb{background:rgba(79,195,247,.25)!important;border-radius:3px!important} .sf-panel-content::-webkit-scrollbar-thumb:hover{background:rgba(79,195,247,.45)!important} /* 好友列表项 */ .sf-friend-item{display:flex!important;align-items:center!important;gap:12px!important;padding:10px!important;border-radius:10px!important;background:rgba(79,195,247,.04)!important;border:1px solid transparent!important;margin-bottom:8px!important;transition:all .2s ease!important;cursor:pointer!important} .sf-friend-item:hover{background:var(--sf-hover)!important;border-color:var(--sf-border)!important;box-shadow:0 0 12px var(--sf-glow)!important;transform:translateX(2px)!important} .sf-friend-avatar{width:40px!important;height:40px!important;border-radius:8px!important;position:relative!important;flex-shrink:0!important} .sf-friend-avatar img{width:100%!important;height:100%!important;border-radius:8px!important;object-fit:cover!important} .sf-friend-frame{position:absolute!important;inset:-6px!important;pointer-events:none!important} .sf-friend-frame img{width:100%!important;height:100%!important} .sf-friend-info{flex:1!important;min-width:0!important} .sf-friend-name{font-size:14px!important;font-weight:500!important;color:var(--sf-accent)!important;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important} .sf-friend-status{font-size:12px!important;color:var(--sf-dim)!important} .sf-status-dot{width:10px!important;height:10px!important;border-radius:50%!important;flex-shrink:0!important} .sf-dot-online{background:var(--sf-green)!important;box-shadow:0 0 8px rgba(52,211,153,.6)!important} .sf-dot-offline{background:var(--sf-dim)!important} .sf-dot-ingame{background:var(--sf-accent)!important;box-shadow:0 0 8px rgba(79,195,247,.7)!important} .sf-own-item{background:rgba(79,195,247,.08)!important;border:1px solid var(--sf-border)!important} .sf-action-btn{display:flex!important;align-items:center!important;justify-content:center!important;padding:12px!important;margin-top:8px!important;border-radius:8px!important;background:rgba(79,195,247,.06)!important;border:1px solid var(--sf-border)!important;color:var(--sf-text)!important;font-size:14px!important;cursor:pointer!important;transition:all .2s ease!important} .sf-action-btn:hover{background:rgba(79,195,247,.14)!important;color:var(--sf-accent)!important;border-color:var(--sf-border-strong)!important;box-shadow:0 0 12px var(--sf-glow)!important} .sf-stats-block{padding:10px!important;margin:8px 0!important;background:rgba(79,195,247,.05)!important;border:1px solid var(--sf-border)!important;border-radius:8px!important;font-size:13px!important;color:var(--sf-text)!important;text-align:center!important;font-variant-numeric:tabular-nums!important} .sf-section-title{padding:12px 8px 8px!important;font-size:13px!important;font-weight:600!important;letter-spacing:.5px!important;color:var(--sf-accent)!important;text-transform:uppercase!important;border-top:1px solid var(--sf-border)!important;margin-top:8px!important} .sf-ingame{color:var(--sf-accent)!important} .sf-view-all{padding:10px!important;text-align:center!important;font-size:12px!important;color:var(--sf-accent)!important;cursor:pointer!important;transition:all .2s ease!important} .sf-view-all:hover{color:#fff!important;text-shadow:0 0 8px var(--sf-glow)!important} .sf-menu-item{display:flex!important;align-items:center!important;padding:8px 12px!important;border-radius:6px!important;background:rgba(79,195,247,.04)!important;border:1px solid transparent!important;color:var(--sf-text)!important;font-size:13px!important;cursor:pointer!important;transition:all .2s ease!important;margin-bottom:4px!important} .sf-menu-item:hover{background:var(--sf-hover)!important;color:var(--sf-accent)!important;border-color:var(--sf-border)!important} /* 移动端适配 */ @media(max-width:600px){.blotter_page_title h1{font-size:20px!important}.friend_activity_header{padding:12px!important}#sf-btn-group{bottom:20px!important;right:20px!important}#sf-friend-btn,#sf-screenshot-btn,#sf-game-btn,#sf-achievement-btn,#sf-review-btn{width:48px!important;height:48px!important}#sf-friend-panel{right:20px!important;width:calc(100vw - 40px)!important;max-width:300px!important}} /* 截图查看器:深空网格背景 */ #sf-viewer{position:fixed;inset:0;z-index:99999;background:rgba(4,8,14,.88);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);display:flex;align-items:center;justify-content:center;opacity:0;visibility:hidden;transition:opacity .35s ease,visibility .35s ease} #sf-viewer::before{content:'';position:absolute;inset:0;background-image:linear-gradient(rgba(79,195,247,.03) 1px,transparent 1px),linear-gradient(90deg,rgba(79,195,247,.03) 1px,transparent 1px);background-size:44px 44px;pointer-events:none} #sf-viewer.open{opacity:1;visibility:visible} #sf-viewer-img{max-width:90vw;max-height:85vh;object-fit:contain;border-radius:4px;box-shadow:0 8px 40px rgba(0,0,0,.6),0 0 30px rgba(79,195,247,.12);cursor:grab;user-select:none;-webkit-user-drag:none;position:relative} #sf-viewer img:active{cursor:grabbing} #sf-viewer-close{position:fixed;top:20px;right:20px;width:40px;height:40px;border-radius:50%;border:1px solid rgba(244,63,94,.35);background:rgba(244,63,94,.12);color:#fda4af;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;z-index:100000} #sf-viewer-close:hover{background:rgba(244,63,94,.3);color:#fff;box-shadow:0 0 14px rgba(244,63,94,.4);transform:rotate(90deg)} #sf-viewer-download{position:fixed;bottom:24px;right:24px;padding:10px 20px;border-radius:8px;border:1px solid var(--sf-border-strong);background:rgba(79,195,247,.12);color:var(--sf-accent);font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;z-index:100000;display:flex;align-items:center;gap:8px;backdrop-filter:blur(6px)} #sf-viewer-download:hover{background:rgba(79,195,247,.25);color:#fff;box-shadow:0 0 16px var(--sf-glow)} #sf-viewer-zoom{position:fixed;bottom:24px;left:24px;padding:8px 14px;border-radius:8px;border:1px solid var(--sf-border);background:rgba(10,16,26,.7);color:var(--sf-accent);font-size:13px;font-variant-numeric:tabular-nums;z-index:100000;pointer-events:none;backdrop-filter:blur(6px)} #sf-viewer-hint{position:fixed;bottom:70px;left:50%;transform:translateX(-50%);padding:6px 16px;border-radius:6px;border:1px solid var(--sf-border);background:rgba(10,16,26,.7);color:var(--sf-dim);font-size:12px;z-index:100000;pointer-events:none;opacity:0;transition:opacity .3s;backdrop-filter:blur(6px)} #sf-viewer-hint.show{opacity:1} .sf-toast{position:fixed;top:24px;left:50%;transform:translateX(-50%) translateY(-10px);padding:10px 24px;border-radius:8px;font-size:14px;font-weight:500;z-index:100001;opacity:0;transition:all .3s ease;pointer-events:none;box-shadow:0 4px 16px rgba(0,0,0,.5);backdrop-filter:blur(8px)} .sf-toast--visible{opacity:1;transform:translateX(-50%) translateY(0)} .sf-toast--info{background:rgba(13,32,50,.92);color:#c9d6e2;border:1px solid var(--sf-border-strong);box-shadow:0 4px 16px rgba(0,0,0,.5),0 0 14px var(--sf-glow)} .sf-toast--warn{background:rgba(234,179,8,.92);color:#1a1a1a;border:1px solid rgba(234,179,8,.5)} /* 切图按钮 */ #sf-viewer-prev,#sf-viewer-next{position:fixed;top:50%;transform:translateY(-50%);width:44px;height:44px;border-radius:50%;border:1px solid var(--sf-border-strong);background:rgba(79,195,247,.1);color:var(--sf-accent);font-size:22px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;z-index:100000;opacity:0;pointer-events:none;backdrop-filter:blur(6px)} #sf-viewer-prev{left:20px} #sf-viewer-next{right:20px} #sf-viewer-prev.show,#sf-viewer-next.show{opacity:1;pointer-events:auto} #sf-viewer-prev:hover,#sf-viewer-next:hover{background:rgba(79,195,247,.28);color:#fff;transform:translateY(-50%) scale(1.1);box-shadow:0 0 16px var(--sf-glow)} #sf-viewer-prev svg,#sf-viewer-next svg{fill:currentColor} /* 图片计数 */ #sf-viewer-counter{position:fixed;top:20px;left:50%;transform:translateX(-50%);padding:6px 14px;border-radius:6px;border:1px solid var(--sf-border);background:rgba(10,16,26,.7);color:var(--sf-accent);font-size:13px;font-variant-numeric:tabular-nums;z-index:100000;pointer-events:none;display:none;backdrop-filter:blur(6px)} #sf-viewer-counter.show{display:block}`; /* ========== 注入样式 ========== */ if (typeof GM_addStyle !== 'undefined') GM_addStyle(CSS); else { const s = document.createElement('style'); s.textContent = CSS; document.head.appendChild(s); } /* ========== 筛选状态 ========== */ let activeFilter = null; /* ========== 创建 UI ========== */ function createUI() { if ($('#sf-btn-group')) return; const grp = document.createElement('div'); grp.id = 'sf-btn-group'; // 通过配置数组创建筛选按钮 FILTER_BTNS.forEach(({ id, icon, title }) => { const btn = document.createElement('button'); btn.id = id; btn.innerHTML = ICONS[icon]; btn.title = title; grp.appendChild(btn); }); // 回到顶部按钮 const topBtn = document.createElement('button'); topBtn.id = 'sf-top-btn'; topBtn.innerHTML = ICONS.top; topBtn.title = '回到顶部'; grp.appendChild(topBtn); document.body.appendChild(grp); // 回到顶部:滚动显示/隐藏 + 点击 window.addEventListener('scroll', () => { topBtn.classList.toggle('show', window.scrollY > 400); }, { passive: true }); topBtn.addEventListener('click', () => window.scrollTo({ top: 0, behavior: 'smooth' })); // 好友面板 const panel = document.createElement('div'); panel.id = 'sf-friend-panel'; panel.innerHTML = `