为水贴增加护眼护航 
// ==UserScript==
// @name DeepFlood 夜间毛玻璃主题 v2.6(精细交互版)
// @namespace https://ezren.dev
// @version 2.6.0
// @description 自动识别用户名/标题链接悬停特效 + 色盘即时生效 + 双主题 + 全自定义控制面板
// @match https://www.deepflood.com/*
// @match https://deepflood.com/*
// @run-at document-idle
// @grant none
// ==/UserScript==
(function () {
'use strict';
const LS_KEY = 'df_glass_theme_v26';
const defaults = {
theme: 'neon',
blur: 18, alpha: 0.42, radius: 16, shadow: 32,
enabled: true,
contentRounded: false,
contentGlass: false,
titleColor: '', usernameColor: '', linkColor: ''
};
const state = { ...defaults };
try { Object.assign(state, JSON.parse(localStorage.getItem(LS_KEY)||'{}')); } catch(_){}
const style = document.createElement('style');
style.id = 'df-glass-v26';
document.documentElement.appendChild(style);
function themeVars() {
if (state.theme === 'deepblack') {
return {
accent:'#7FA6FF',text:'#E6EAF4',card:'rgba(18,20,28,var(--df-alpha))',
header:'rgba(10,12,18,.72)',border:'rgba(132,160,255,.14)',
titleGlow:'rgba(127,166,255,.45)',uname:'#9ca9c6',unameHover:'#d3dbf0',meta:'#78809a',
backdrop:`radial-gradient(1000px 800px at 15% 12%, rgba(127,166,255,.28), transparent 60%),
radial-gradient(1100px 850px at 85% 18%, rgba(79,209,197,.18), transparent 60%),
linear-gradient(180deg,#06080f 0%, #0a0d16 50%, #05060b 100%)`
};
}
return {
accent:'#4FD1C5',text:'#E7ECF7',card:'rgba(30,32,44,var(--df-alpha))',
header:'rgba(12,16,28,.7)',border:'rgba(99,226,183,.18)',
titleGlow:'rgba(79,209,197,.40)',uname:'#aab7d5',unameHover:'#d0dcf0',meta:'#7d8399',
backdrop:`radial-gradient(900px 700px at 10% 10%, rgba(79,209,197,.25), transparent 60%),
radial-gradient(800px 600px at 90% 15%, rgba(76,111,255,.18), transparent 60%),
radial-gradient(1200px 900px at 40% 80%, rgba(255,122,89,.12), transparent 60%),
linear-gradient(180deg,#0a0f1f 0%,#101529 50%,#080a14 100%)`
};
}
function setCSS(){
const t = themeVars();
const titleColor = state.titleColor || t.accent;
const linkColor = state.linkColor || t.accent;
const unameColor = state.usernameColor || t.uname;
const contentBg = state.contentGlass ? 'rgba(22,24,33,0.6)' : 'rgba(12,14,22,0.92)';
const contentBlur = state.contentGlass ? 'blur(10px)' : 'none';
const contentRadius = state.contentRounded ? '12px' : '0';
style.textContent = `
:root{
--df-blur:${state.blur}px;--df-alpha:${state.alpha};
--df-radius:${state.radius}px;--df-shadow:${state.shadow};
--df-accent:${t.accent};--df-text:${t.text};
--df-card-bg:${t.card};--df-border:${t.border};
--df-title-glow:${t.titleGlow};--df-uname:${t.uname};
--df-uname-hover:${t.unameHover};--df-meta:${t.meta};
--df-title-color:${titleColor};--df-link-color:${linkColor};
--df-username-color:${unameColor};
--df-content-bg:${contentBg};--df-content-radius:${contentRadius};--df-content-blur:${contentBlur};
}
body::before{content:"";position:fixed;inset:0;z-index:-1;background:${t.backdrop};}
body{color:var(--df-text);background:transparent!important;}
a{color:var(--df-link-color);} a:hover{opacity:.9;}
/* 主要卡片 */
.post-item,.post,article,.card,.panel,.user-card,.comment{
background:var(--df-card-bg)!important;
border:1px solid rgba(255,255,255,.08);
border-radius:var(--df-radius);
-webkit-backdrop-filter:blur(var(--df-blur));backdrop-filter:blur(var(--df-blur));
box-shadow:0 8px calc(var(--df-shadow)) rgba(0,0,0,.45);
transition:all .35s ease;
}
.post-item:hover,.card:hover,.panel:hover,.user-card:hover{
transform:translateY(-2px) scale(1.01);
box-shadow:0 14px 40px rgba(0,0,0,.6);
}
/* 帖子正文 */
.post-content, .reply-content, .markdown-body, .comment-body {
background: var(--df-content-bg)!important;
border-radius: var(--df-content-radius)!important;
-webkit-backdrop-filter: var(--df-content-blur)!important;
backdrop-filter: var(--df-content-blur)!important;
border: 1px solid rgba(255,255,255,.06);
box-shadow:none!important;
}
/* 用户名识别 */
a[href^="/space/"] {
color: var(--df-username-color)!important;
font-weight:500;
transition:color .2s ease;
}
a[href^="/space/"]:hover { color: var(--df-uname-hover)!important; }
/* 帖子标题识别 */
a[href^="/post-"] {
color: var(--df-title-color)!important;
font-weight:600;
text-shadow:0 0 6px var(--df-title-glow);
transition:all .25s ease;
}
a[href^="/post-"]:hover {
transform:translateY(-1px);
filter:brightness(1.2);
background:rgba(255,255,255,.05);
-webkit-backdrop-filter:blur(6px);
backdrop-filter:blur(6px);
border-radius:6px;
}
/* 控制面板样式 */
.df-btn{position:fixed;right:20px;bottom:22px;width:46px;height:46px;border-radius:50%;
border:none;cursor:pointer;z-index:10001;background:rgba(24,28,44,.7);
-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
box-shadow:0 8px 24px rgba(0,0,0,.4);color:var(--df-accent);font-size:22px;transition:all .25s ease;}
.df-btn:hover{box-shadow:0 10px 32px rgba(0,0,0,.55);transform:scale(1.1);}
.df-card-ui{position:fixed;right:80px;bottom:90px;z-index:10000;width:320px;
padding:12px 14px;border-radius:14px;background:rgba(22,26,40,.82);
-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);
border:1px solid var(--df-border);color:#d9e6ff;
box-shadow:0 20px 40px rgba(0,0,0,.45);
opacity:0;pointer-events:none;transform:translateY(10px);
transition:opacity .3s ease,transform .3s ease;}
.df-card-ui.active{opacity:1;pointer-events:auto;transform:translateY(0);}
.df-row{display:flex;align-items:center;gap:8px;margin:8px 0;flex-wrap:wrap}
.df-row label{flex:0 0 90px;font-size:12px;opacity:.9}
.df-row input[type=range]{flex:1}
.df-color input[type=color]{width:28px;height:28px;padding:0;border:none;background:transparent}
.df-pills{display:flex;gap:6px;flex-wrap:wrap;margin:6px 0 2px}
.df-pill{padding:6px 10px;border-radius:999px;cursor:pointer;font-size:12px;
border:1px solid var(--df-border);background:rgba(79,209,197,.08);color:#d9e6ff;}
.df-pill.active{background:var(--df-accent);color:#0b0f1e;border-color:transparent;}
`;
}
setCSS();
// 控制面板逻辑
const btn=document.createElement('button');btn.className='df-btn';btn.textContent='⚙️';document.body.appendChild(btn);
const panel=document.createElement('div');panel.className='df-card-ui';
panel.innerHTML=`
<div class="df-row"><label>主题</label>
<div class="df-pills">
<span class="df-pill ${state.theme==='neon'?'active':''}" data-theme="neon">Neon 夜蓝</span>
<span class="df-pill ${state.theme==='deepblack'?'active':''}" data-theme="deepblack">Deep Black 夜幕</span>
</div>
</div>
<div class="df-row"><label>标题颜色</label><input id="title-color" type="color" value="${state.titleColor||'#4FD1C5'}"></div>
<div class="df-row"><label>用户名颜色</label><input id="uname-color" type="color" value="${state.usernameColor||'#aab7d5'}"></div>
<div class="df-row"><label>链接颜色</label><input id="link-color" type="color" value="${state.linkColor||'#4FD1C5'}"></div>
<div class="df-row"><label>模糊</label><input id="blur" type="range" min="6" max="28" value="${state.blur}"></div>
<div class="df-row"><label>透明</label><input id="alpha" type="range" min="20" max="80" value="${Math.round(state.alpha*100)}"></div>
<div class="df-row"><label>正文圆角</label><input id="rounded" type="checkbox" ${state.contentRounded?'checked':''}>
<label style="flex:0 0 120px">正文毛玻璃</label><input id="glass" type="checkbox" ${state.contentGlass?'checked':''}></div>
<div class="df-row" style="justify-content:flex-end;gap:8px">
<button id="save">保存</button><button id="reset">重置</button>
</div>`;
document.body.appendChild(panel);
const qs=id=>panel.querySelector(id);
const blur=qs('#blur'),alpha=qs('#alpha'),rounded=qs('#rounded'),glass=qs('#glass');
const titleColor=qs('#title-color'),unameColor=qs('#uname-color'),linkColor=qs('#link-color');
const saveBtn=qs('#save'),resetBtn=qs('#reset');
function persist(){localStorage.setItem(LS_KEY,JSON.stringify(state));}
panel.querySelectorAll('.df-pill').forEach(p=>p.addEventListener('click',()=>{
panel.querySelectorAll('.df-pill').forEach(x=>x.classList.remove('active'));
p.classList.add('active');state.theme=p.dataset.theme;setCSS();persist();
}));
[blur,alpha].forEach(i=>i.addEventListener('input',()=>{state.blur=+blur.value;state.alpha=(+alpha.value)/100;setCSS();persist();}));
[titleColor,unameColor,linkColor].forEach(inp=>inp.addEventListener('input',()=>{state[ inp.id.replace('-color','Color') ]=inp.value;setCSS();persist();}));
rounded.addEventListener('change',()=>{state.contentRounded=rounded.checked;setCSS();persist();});
glass.addEventListener('change',()=>{state.contentGlass=glass.checked;setCSS();persist();});
saveBtn.onclick=()=>persist();
resetBtn.onclick=()=>{Object.assign(state,defaults);setCSS();persist();};
let open=false;btn.onclick=()=>{open=!open;panel.classList.toggle('active',open);};
document.addEventListener('click',e=>{if(open && !panel.contains(e.target) && !btn.contains(e.target)){open=false;panel.classList.remove('active');}});
document.addEventListener('keydown',e=>{if(e.key==='Escape'&&open){open=false;panel.classList.remove('active');}});
})();
DF站应该和ND站的css能通用吧
牛逼
@shallow #1 应该
有没有效果图
试试看
@chrimast #4
支持
我靠 这个真帅吧