# dsh-deepshub

> [English](./README.md) | **中文**

[![npm version](https://img.shields.io/npm/v/dsh-deepshub?color=4a6cf7)](https://www.npmjs.com/package/dsh-deepshub)
[![npm downloads](https://img.shields.io/npm/dt/dsh-deepshub?color=4a6cf7)](https://www.npmjs.com/package/dsh-deepshub)
[![GitHub stars](https://img.shields.io/github/stars/01Virex/dsh-deepshub?color=4a6cf7)](https://github.com/01Virex/dsh-deepshub)
[![license](https://img.shields.io/github/license/01Virex/dsh-deepshub)](LICENSE)
[![status](https://img.shields.io/badge/status-%E7%A8%B3%E5%AE%9A%E7%89%88-2ecc71)](https://www.npmjs.com/package/dsh-deepshub)

```bash
# 一行安装
dsh plugin --profile web add dsh-deepshub
```

**v0.3.2 — 稳定版**

> ⭐ **要是它让你笑了一下,就给个 star 吧**——梗的能源全靠它了。

Pornhub 风格戏仿皮肤插件 · **纯整活,不含任何露骨内容**:炭黑/近黑底 + PH 橙(跟随系统明暗)、胶囊按钮、圆润橙字 **"Deephub"** 戏仿字标(内置 Baloo 2 ExtraBold)、18+ 进场屏、"HD 1080p" / "🔴 直播中" 角标、侧栏"今日热推"卡片——全部走官方 `--dsw-*` 设计令牌,**不改变任何功能与文案**,可随时卸载。

## 安装

两种方式:推荐用 `dsh plugin add` 命令,或手动复制。无论哪种方式,首次安装后都需要重启一次 `dsh web`。

### 方式 A:`dsh plugin add`(推荐)

插件 `package.json` 声明了 `dsh.bundle.patch` 清单,安装后自动识别,无需额外参数。命令语法为 `dsh plugin --profile <名> add <包>`(如 `--profile web`):

- **从 npm 装**(最简单):`dsh plugin --profile web add dsh-deepshub` ← 永远装最新版
- **从克隆装**:`dsh plugin --profile web add ./dsh-deepshub`
- **从发布包装**:下载 Release 页的打包 tarball,然后 `dsh plugin --profile web add /path/to/dsh-deepshub-<版本>.tgz`。

### 方式 B:手动安装

1. 把本仓库放到 profile 的 node_modules 下(默认 `C:\Users\<你>\.dsh\profiles\node_modules\dsh-deepshub\`);
2. 在 profile 的 `cordis.patch.yml` 插入:

   ```yaml
   - insert:
       - id: deepshub
         name: dsh-deepshub
   ```

3. 重启 `dsh web` 并硬刷新浏览器(Ctrl+F5)——插件 node 半(`lib/index.js`)启用后,Host 才会扫描加载浏览器半(`lib/client.js`)。

## 功能

- **PH 配色**:炭黑/近黑底 + `#ff9000`(深色),PH 味浅灰 + 橙(浅色)——跟随系统主题,不强行覆盖偏好;
- **胶囊按钮**:所有 `button` 变成 PH 式药丸;
- **戏仿字标**:DeepSeek 字标 SVG → 自绘 **"Deephub"** 橙字圆体(Baloo 2 ExtraBold 拉丁子集,node 半自动 serve);favicon 与标签页标题同步换;
- **"18+ 进场屏"**:每次打开 DSH 页面都弹出「本站包含高强度编程内容」确认层(点确认后本次会话不再弹);
- **代码块角标**:每个代码块右上角 "HD 1080p" 小标签,运行中的工具挂 "🔴 直播中"(稳定 `data-running` 钩子);
- **侧栏"今日热推"**:PH 式推荐小卡片(按 locale 文本启发式插在「新会话」按钮下方,找不到锚点自动退回固定悬浮,可点 × 关闭);
- 完整覆盖官方 `--dsw-alias-*` / `--dsw-specific-*` / `--dsw-static-deepseek-*` 设计令牌,滚动条、代码块、选中色、气泡、侧栏悬浮均为橙调。

## 配置

内置默认即完整效果,无需任何文件。三种覆盖方式,优先级从高到低:

1. **localStorage**(网页控制台实时调试):`window.dshDeepHub.setConfig({ accent: "#ff5500" })` / `window.dshDeepHub.reset()`
2. **config.json**:把 `config.example.json` 复制为插件根目录 `config.json`,node 半会自动在 `/plugins/dsh-deepshub/config.json` 提供(link 安装时即源码目录,改完刷新即生效)。
3. 内置默认(见 `config.example.json`)。

常用字段:

| 字段 | 默认 | 说明 |
| --- | --- | --- |
| `enabled` | `true` | 总开关 |
| `accent` / `accentHover` / `accentText` | `#ff9000` / `#ffa72e` / `#ffffff` | PH 橙主色 / hover / 主色上的文字 |
| `wordmark` / `logoText` | `true` / `Deephub` | 戏仿字标开关与文案 |
| `favicon` | `true` | 换 favicon |
| `title` | `true` | 标签页标题 |
| `pillButtons` | `true` | 胶囊按钮 |
| `ageGate` | `true` | "18+ 进场屏"(每次页面加载都显示) |
| `codeBadges` | `true` | "HD 1080p" / "🔴 直播中" 角标 |
| `recommendCard` | `true` | 侧栏"今日热推"卡片(可点 × 关闭) |
| `debug` | `false` | 控制台日志 `[dsh-deepshub]` |

卸载:`dsh plugin --profile web remove dsh-deepshub`,或在 profile 的 `cordis.patch.yml` 临时禁用:

```yaml
- id: deepshub
  name: dsh-deepshub
  disabled: true
```

## 包结构

```
dsh-deepshub/
├─ package.json          # 声明 dsh.client(web 端) + dsh.bundle.patch
├─ cordis.patch.yml      # 把双面插件行插入 cordis 树
├─ lib/
│  ├─ index.js           # node 半:serve config.json + 字标字体
│  └─ client.js          # 浏览器半:令牌覆盖 + 胶囊按钮 + 字标/favicon/标题 + 整活层
├─ assets/
│  ├─ deephub-bold.woff2 # Baloo 2 ExtraBold 拉丁子集(字标字体,OFL 许可)
│  └─ OFL.txt            # Baloo 2 许可文本
├─ config.example.json   # 配置模板
└─ scripts/              # 开发用:validate / smoke-test / package-release(不随 npm 发布)
```

## 原理速览

浏览器半纯 DOM/CSS 实现,不依赖任何 ctx 服务:

- 全部主题化通过官方设计令牌(`--dsw-alias-*` 等)完成,在 `body{}`(浅色)与 `body[data-ds-dark-theme]{}`(深色)各重定义一套,全部 `!important`,与注入顺序无关;
- 主色走插件自定义属性 `--dsh-deepshub-accent-*`(设在 `:root`),改配置即时生效;
- 字标替换以官方字标 SVG 内稳定的 `#dsh-wordmark-*` clipPath id 定位,不依赖构建哈希类名;MutationObserver 兜底 React 重渲染;
- 18+ 进场屏、热推卡、角标均为自建节点 / 纯 CSS 钩子(`pre::after`、`[data-running]::before`),不依赖任何哈希类名;
- 卸载时由 `ctx.effect` 清理:移除样式、恢复标题/favicon、断开观察器并清除注入节点。

## 许可

插件本身 MIT。字标与配色为戏仿,与 Pornhub 公司无关;内置字体 Baloo 2 依 SIL Open Font License 使用。
