dsh-dream-skin 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <strong>中文</strong> · <a href="./README.en.md">English</a> · <a href="./README.ja.md">日本語</a> · <a href="./README.ko.md">한국어</a> · <a href="./README.es.md">Español</a> · <a href="./README.fr.md">Français</a> · <a href="./README.de.md">Deutsch</a> · <a href="./README.ru.md">Русский</a>
2
+ <strong>中文</strong> · <a href="./docs/i18n/README.en.md">English</a> · <a href="./docs/i18n/README.ja.md">日本語</a> · <a href="./docs/i18n/README.ko.md">한국어</a> · <a href="./docs/i18n/README.es.md">Español</a> · <a href="./docs/i18n/README.fr.md">Français</a> · <a href="./docs/i18n/README.de.md">Deutsch</a> · <a href="./docs/i18n/README.ru.md">Русский</a>
3
3
  </p>
4
4
 
5
5
  <div align="center">
@@ -19,7 +19,7 @@
19
19
 
20
20
  ✨ **Design Philosophy — [一份关于「什么算高级」的设计声明](./docs/design-philosophy.md)** · 以 iOS / Linear 的审美为基准,把「高级感」建立在材质的准确与配色的克制上。
21
21
 
22
- [English](./README.en.md) · [变更日志](./CHANGELOG.md) · [项目说明](./docs/PROJECT.md) · [设计哲学](./docs/design-philosophy.md) · [发布指引](./docs/publishing-to-npm.md)
22
+ [English](./docs/i18n/README.en.md) · [变更日志](./CHANGELOG.md) · [项目说明](./docs/PROJECT.md) · [设计哲学](./docs/design-philosophy.md) · [发布指引](./docs/publishing-to-npm.md)
23
23
 
24
24
  ![npm version](https://img.shields.io/npm/v/dsh-dream-skin?color=4f83f2&label=npm)
25
25
  ![license](https://img.shields.io/github/license/RevolutionLA/dsh-dream-skin?color=34d399)
@@ -103,6 +103,7 @@ dsh plugin --profile web add dsh-dream-skin && dsh web
103
103
  | 📦 **主题包格式 + 导入/导出** | 一个 `*.dsh-theme.json` 主题包 = 格式标记 + 版本 + manifest(id/name/作者/色系/accent/tokens)。可**导入文件**、**一键应用**、**复制分享链接**(编码进 URL hash) |
104
104
  | 🌈 **每用户强调色 Accent** | 为当前皮肤叠加一个自定义品牌强调色(`overrideTokens` 层,不动皮肤本身),**12 个典型色块一键选色** + 选色盘 + 随机 + 恢复主题色 |
105
105
  | 🖼️ **壁纸 2.0** | 本地图 / **图片 URL** / **渐变预设**,每套皮肤**自动建议**一张渐变,可**自动弱化**(聚焦任务时降低干扰);**最近使用**(最多 5 张)一键换回 |
106
+ | 🪟 **弹窗不透明度** | 设置 → 外观 →「弹窗不透明度」滑块(0–100%),控制选项弹窗 / 选项卡卡片的底填充透明度——调高文字更清晰,调低可透出背后内容,跟随持久化保存 |
106
107
  | 🧩 **本地主题包库** | 你导入的自定义主题包集中展示,**应用 / 收藏 / 移除** 一键完成(内置 8 套皮肤在「皮肤」行选择) |
107
108
  | ✅ **清晰选中反馈** | 切换皮肤时选中态(✓ + 边框)**即时跟随**,不再残留模糊的白色高亮框 |
108
109
  | 🎲 **换一个试试(surprise me)** | 随机挑一个和你当前不同的主题 |
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <a href="./README.md">中文</a> · <a href="./README.en.md">English</a> · <a href="./README.ja.md">日本語</a> · <a href="./README.ko.md">한국어</a> · <a href="./README.es.md">Español</a> · <a href="./README.fr.md">Français</a> · <strong>Deutsch</strong> · <a href="./README.ru.md">Русский</a>
2
+ <a href="../../README.md">中文</a> · <a href="./README.en.md">English</a> · <a href="./README.ja.md">日本語</a> · <a href="./README.ko.md">한국어</a> · <a href="./README.es.md">Español</a> · <a href="./README.fr.md">Français</a> · <strong>Deutsch</strong> · <a href="./README.ru.md">Русский</a>
3
3
  </p>
4
4
 
5
5
  <div align="center">
@@ -17,9 +17,9 @@ Natives Skinning · Wallpaper · teilbare Theme-Pakete — eine elegante Umsetzu
17
17
 
18
18
  > 1-Zeilen-Installation · rein nativ (keine Injektion, keine Installer-Patches) · übersteht DSH-Updates
19
19
 
20
- ✨ **Design Philosophy — [eine Aussage darüber, was „premium" bedeutet](./docs/design-philosophy.md)** · mit der iOS-/Linear-Ästhetik als Basis entsteht Premium aus der Präzision des Materials und der Zurückhaltung der Farben.
20
+ ✨ **Design Philosophy — [eine Aussage darüber, was „premium" bedeutet](../../docs/design-philosophy.md)** · mit der iOS-/Linear-Ästhetik als Basis entsteht Premium aus der Präzision des Materials und der Zurückhaltung der Farben.
21
21
 
22
- [中文](./README.md) · [Änderungshistorie](./CHANGELOG.md) · [Projektnotizen](./docs/PROJECT.md) · [Design Philosophy](./docs/design-philosophy.md) · [Veröffentlichungsanleitung](./docs/publishing-to-npm.md)
22
+ [中文](../../README.md) · [Änderungshistorie](../../CHANGELOG.md) · [Projektnotizen](../../docs/PROJECT.md) · [Design Philosophy](../../docs/design-philosophy.md) · [Veröffentlichungsanleitung](../../docs/publishing-to-npm.md)
23
23
 
24
24
  ![npm version](https://img.shields.io/npm/v/dsh-dream-skin?color=4f83f2&label=npm)
25
25
  ![license](https://img.shields.io/github/license/RevolutionLA/dsh-dream-skin?color=34d399)
@@ -308,12 +308,12 @@ Das Client-Bundle ist direkt im `__ModuleLoader__`-Format geschrieben (dieselbe
308
308
  - **Einen integrierten Skin hinzufügen**: Füge dem `SKINS`-Array in `lib/client.js` ein Objekt (`id` + `colorScheme` +
309
309
  `tokens`) hinzu; es erscheint dann automatisch in den Einstellungen. Füge einen Schlüssel `skin.<id>` in **allen 8 Sprachwörterbüchern** (`zh`/`en`/`ja`/`ko`/`es`/`fr`/`de`/`ru`) hinzu.
310
310
 
311
- - **Ein Theme-Paket ausliefern (empfohlen)**: Folge [`docs/examples/sample-theme-pack.json`](./docs/examples/sample-theme-pack.json) —
311
+ - **Ein Theme-Paket ausliefern (empfohlen)**: Folge [`docs/examples/sample-theme-pack.json`](../../docs/examples/sample-theme-pack.json) —
312
312
  eine `*.dsh-theme.json` ist in den Einstellungen importierbar und über einen Link teilbar, ohne Codeänderungen.
313
- - **Eigene Wallpaper hinzufügen**: Lege Bilder in [`wallpapers/`](./wallpapers/) ab (verbreite nur, wofür du die Rechte
313
+ - **Eigene Wallpaper hinzufügen**: Lege Bilder in [`wallpapers/`](../../wallpapers/) ab (verbreite nur, wofür du die Rechte
314
314
  hast) und importiere sie dann über die „Wallpaper“-Reihe von DSH.
315
315
  - **Validieren**: `npm test` (VM-Smoke-Tests, die Factory-Eval, `apply()` sowie Paket-Import/-Persistenz abdecken).
316
- - **Neu einfärben**: Nutze die `--dsw-alias-*`-Tokens (vollständiger Vertrag in [`docs/themes-spec.md`](./docs/themes-spec.md)).
316
+ - **Neu einfärben**: Nutze die `--dsw-alias-*`-Tokens (vollständiger Vertrag in [`docs/themes-spec.md`](../../docs/themes-spec.md)).
317
317
 
318
318
  ## 📌 Roadmap
319
319
 
@@ -329,8 +329,8 @@ Das Client-Bundle ist direkt im `__ModuleLoader__`-Format geschrieben (dieselbe
329
329
 
330
330
  ## 🤝 Mitwirken
331
331
 
332
- Issues und PRs sind willkommen! Bitte lies den [Contributing Guide](./CONTRIBUTING.md) und beachte den
333
- [Code of Conduct](./CODE_OF_CONDUCT.md).
332
+ Issues und PRs sind willkommen! Bitte lies den [Contributing Guide](../../CONTRIBUTING.md) und beachte den
333
+ [Code of Conduct](../../CODE_OF_CONDUCT.md).
334
334
 
335
335
  ## ⭐ Das Projekt unterstützen
336
336
 
@@ -340,11 +340,11 @@ beisteuern? Mach mit.
340
340
 
341
341
  ## 🔒 Sicherheit
342
342
 
343
- Ein Sicherheitsproblem gefunden? Öffne kein öffentliches Issue — siehe die [Security Policy](./SECURITY.md).
343
+ Ein Sicherheitsproblem gefunden? Öffne kein öffentliches Issue — siehe die [Security Policy](../../SECURITY.md).
344
344
 
345
345
  ## 📄 Lizenz
346
346
 
347
- [MIT](./LICENSE)
347
+ [MIT](../../LICENSE)
348
348
 
349
349
  ## 🙏 Danksagungen
350
350
 
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <a href="./README.md">中文</a> · <strong>English</strong> · <a href="./README.ja.md">日本語</a> · <a href="./README.ko.md">한국어</a> · <a href="./README.es.md">Español</a> · <a href="./README.fr.md">Français</a> · <a href="./README.de.md">Deutsch</a> · <a href="./README.ru.md">Русский</a>
2
+ <a href="../../README.md">中文</a> · <strong>English</strong> · <a href="./README.ja.md">日本語</a> · <a href="./README.ko.md">한국어</a> · <a href="./README.es.md">Español</a> · <a href="./README.fr.md">Français</a> · <a href="./README.de.md">Deutsch</a> · <a href="./README.ru.md">Русский</a>
3
3
  </p>
4
4
 
5
5
  <div align="center">
@@ -17,9 +17,9 @@ Native skinning · wallpaper · shareable theme packs — an elegant implementat
17
17
 
18
18
  > 1-line install · purely native (no injection, no installer patches) · survives DSH updates
19
19
 
20
- ✨ **Design Philosophy — [a statement on what "premium" means](./docs/design-philosophy.md)** · grounded in iOS / Linear aesthetics, premium comes from material precision and restrained color.
20
+ ✨ **Design Philosophy — [a statement on what "premium" means](../../docs/design-philosophy.md)** · grounded in iOS / Linear aesthetics, premium comes from material precision and restrained color.
21
21
 
22
- [中文](./README.md) · [Changelog](./CHANGELOG.md) · [Project Notes](./docs/PROJECT.md) · [Design Philosophy](./docs/design-philosophy.md) · [Publishing Guide](./docs/publishing-to-npm.md)
22
+ [中文](../../README.md) · [Changelog](../../CHANGELOG.md) · [Project Notes](../../docs/PROJECT.md) · [Design Philosophy](../../docs/design-philosophy.md) · [Publishing Guide](../../docs/publishing-to-npm.md)
23
23
 
24
24
  ![npm version](https://img.shields.io/npm/v/dsh-dream-skin?color=4f83f2&label=npm)
25
25
  ![license](https://img.shields.io/github/license/RevolutionLA/dsh-dream-skin?color=34d399)
@@ -306,12 +306,12 @@ seeds (`react`, `react/jsx-runtime`, …) and registered client bundles (`@deeps
306
306
  - **Add a built-in skin**: append an object (`id` + `colorScheme` + `tokens`) to the `SKINS` array in `lib/client.js`;
307
307
  it then appears in Settings automatically. Add a `skin.<id>` key to **all 8 locale dictionaries**
308
308
  (`zh`/`en`/`ja`/`ko`/`es`/`fr`/`de`/`ru`).
309
- - **Ship a theme pack (recommended)**: follow [`docs/examples/sample-theme-pack.json`](./docs/examples/sample-theme-pack.json) —
309
+ - **Ship a theme pack (recommended)**: follow [`docs/examples/sample-theme-pack.json`](../../docs/examples/sample-theme-pack.json) —
310
310
  one `*.dsh-theme.json` is importable in Settings and shareable via a link, no code changes needed.
311
- - **Add your own wallpapers**: drop images into [`wallpapers/`](./wallpapers/) (distribute only what you have rights
311
+ - **Add your own wallpapers**: drop images into [`wallpapers/`](../../wallpapers/) (distribute only what you have rights
312
312
  to), then import them via DSH's "Wallpaper" row.
313
313
  - **Validate**: `npm test` (VM smoke tests covering factory eval, `apply()`, and pack import/persistence).
314
- - **Repaint**: reference the `--dsw-alias-*` tokens (full contract in [`docs/themes-spec.md`](./docs/themes-spec.md)).
314
+ - **Repaint**: reference the `--dsw-alias-*` tokens (full contract in [`docs/themes-spec.md`](../../docs/themes-spec.md)).
315
315
 
316
316
  ## 📌 Roadmap
317
317
 
@@ -327,8 +327,8 @@ seeds (`react`, `react/jsx-runtime`, …) and registered client bundles (`@deeps
327
327
 
328
328
  ## 🤝 Contributing
329
329
 
330
- Issues and PRs welcome! Please read the [Contributing Guide](./CONTRIBUTING.md) and follow the
331
- [Code of Conduct](./CODE_OF_CONDUCT.md).
330
+ Issues and PRs welcome! Please read the [Contributing Guide](../../CONTRIBUTING.md) and follow the
331
+ [Code of Conduct](../../CODE_OF_CONDUCT.md).
332
332
 
333
333
  ## ⭐ Support the project
334
334
 
@@ -337,11 +337,11 @@ get discovered and keeps it maintained. Want to contribute themes / an online St
337
337
 
338
338
  ## 🔒 Security
339
339
 
340
- Found a security issue? Don't open a public issue — see the [Security Policy](./SECURITY.md).
340
+ Found a security issue? Don't open a public issue — see the [Security Policy](../../SECURITY.md).
341
341
 
342
342
  ## 📄 License
343
343
 
344
- [MIT](./LICENSE)
344
+ [MIT](../../LICENSE)
345
345
 
346
346
  ## 🙏 Acknowledgments
347
347
 
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <a href="./README.md">中文</a> · <a href="./README.en.md">English</a> · <a href="./README.ja.md">日本語</a> · <a href="./README.ko.md">한국어</a> · <strong>Español</strong> · <a href="./README.fr.md">Français</a> · <a href="./README.de.md">Deutsch</a> · <a href="./README.ru.md">Русский</a>
2
+ <a href="../../README.md">中文</a> · <a href="./README.en.md">English</a> · <a href="./README.ja.md">日本語</a> · <a href="./README.ko.md">한국어</a> · <strong>Español</strong> · <a href="./README.fr.md">Français</a> · <a href="./README.de.md">Deutsch</a> · <a href="./README.ru.md">Русский</a>
3
3
  </p>
4
4
 
5
5
  <div align="center">
@@ -17,9 +17,9 @@ Skinning nativo · wallpaper · paquetes de temas compartibles — una implement
17
17
 
18
18
  > Instalación en 1 línea · 100 % nativo (sin inyección, sin parches al instalador) · sobrevive a las actualizaciones de DSH
19
19
 
20
- ✨ **Design Philosophy — [una declaración sobre qué significa «premium»](./docs/design-philosophy.md)** · con la estética de iOS / Linear como base, lo premium nace de la precisión del material y la restricción del color.
20
+ ✨ **Design Philosophy — [una declaración sobre qué significa «premium»](../../docs/design-philosophy.md)** · con la estética de iOS / Linear como base, lo premium nace de la precisión del material y la restricción del color.
21
21
 
22
- [中文](./README.md) · [Historial de cambios](./CHANGELOG.md) · [Notas del proyecto](./docs/PROJECT.md) · [Design Philosophy](./docs/design-philosophy.md) · [Guía de publicación](./docs/publishing-to-npm.md)
22
+ [中文](../../README.md) · [Historial de cambios](../../CHANGELOG.md) · [Notas del proyecto](../../docs/PROJECT.md) · [Design Philosophy](../../docs/design-philosophy.md) · [Guía de publicación](../../docs/publishing-to-npm.md)
23
23
 
24
24
  ![npm version](https://img.shields.io/npm/v/dsh-dream-skin?color=4f83f2&label=npm)
25
25
  ![license](https://img.shields.io/github/license/RevolutionLA/dsh-dream-skin?color=34d399)
@@ -305,12 +305,12 @@ entidades de la tabla de módulos: semillas de plataforma (`react`, `react/jsx-r
305
305
 
306
306
  - **Añadir un skin integrado**: añade un objeto (`id` + `colorScheme` + `tokens`) al array `SKINS` en `lib/client.js`;
307
307
  aparecerá automáticamente en Ajustes. Añade una clave `skin.<id>` a **los 8 diccionarios de idioma** (`zh`/`en`/`ja`/`ko`/`es`/`fr`/`de`/`ru`).
308
- - **Publicar un paquete de temas (recomendado)**: sigue [`docs/examples/sample-theme-pack.json`](./docs/examples/sample-theme-pack.json):
308
+ - **Publicar un paquete de temas (recomendado)**: sigue [`docs/examples/sample-theme-pack.json`](../../docs/examples/sample-theme-pack.json):
309
309
  un único `*.dsh-theme.json` es importable en Ajustes y compartible mediante un enlace, sin necesidad de cambios de código.
310
- - **Añadir tus propios wallpapers**: coloca las imágenes en [`wallpapers/`](./wallpapers/) (distribuye solo aquello sobre
310
+ - **Añadir tus propios wallpapers**: coloca las imágenes en [`wallpapers/`](../../wallpapers/) (distribuye solo aquello sobre
311
311
  lo que tengas derechos) e impórtalas desde la fila «Wallpaper» de DSH.
312
312
  - **Validar**: `npm test` (pruebas de humo en VM que cubren la evaluación de la factory, `apply()` y la importación/persistencia de paquetes).
313
- - **Repintar**: consulta los tokens `--dsw-alias-*` (contrato completo en [`docs/themes-spec.md`](./docs/themes-spec.md)).
313
+ - **Repintar**: consulta los tokens `--dsw-alias-*` (contrato completo en [`docs/themes-spec.md`](../../docs/themes-spec.md)).
314
314
 
315
315
  ## 📌 Hoja de ruta
316
316
 
@@ -326,8 +326,8 @@ entidades de la tabla de módulos: semillas de plataforma (`react`, `react/jsx-r
326
326
 
327
327
  ## 🤝 Contribuciones
328
328
 
329
- ¡Las issues y los PRs son bienvenidos! Lee la [Guía de contribución](./CONTRIBUTING.md) y sigue el
330
- [Código de conducta](./CODE_OF_CONDUCT.md).
329
+ ¡Las issues y los PRs son bienvenidos! Lee la [Guía de contribución](../../CONTRIBUTING.md) y sigue el
330
+ [Código de conducta](../../CODE_OF_CONDUCT.md).
331
331
 
332
332
  ## ⭐ Apoya el proyecto
333
333
 
@@ -336,11 +336,11 @@ ayuda a que el proyecto sea descubierto y se mantenga. ¿Quieres aportar temas,
336
336
 
337
337
  ## 🔒 Seguridad
338
338
 
339
- ¿Has encontrado un problema de seguridad? No abras una issue pública: consulta la [Política de seguridad](./SECURITY.md).
339
+ ¿Has encontrado un problema de seguridad? No abras una issue pública: consulta la [Política de seguridad](../../SECURITY.md).
340
340
 
341
341
  ## 📄 Licencia
342
342
 
343
- [MIT](./LICENSE)
343
+ [MIT](../../LICENSE)
344
344
 
345
345
  ## 🙏 Agradecimientos
346
346
 
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <a href="./README.md">中文</a> · <a href="./README.en.md">English</a> · <a href="./README.ja.md">日本語</a> · <a href="./README.ko.md">한국어</a> · <a href="./README.es.md">Español</a> · <strong>Français</strong> · <a href="./README.de.md">Deutsch</a> · <a href="./README.ru.md">Русский</a>
2
+ <a href="../../README.md">中文</a> · <a href="./README.en.md">English</a> · <a href="./README.ja.md">日本語</a> · <a href="./README.ko.md">한국어</a> · <a href="./README.es.md">Español</a> · <strong>Français</strong> · <a href="./README.de.md">Deutsch</a> · <a href="./README.ru.md">Русский</a>
3
3
  </p>
4
4
 
5
5
  <div align="center">
@@ -17,9 +17,9 @@ Habillage natif · fond d'écran · packs de thèmes partageables — une implé
17
17
 
18
18
  > Installation en 1 ligne · 100 % natif (aucune injection, aucun patch d'installation) · résiste aux mises à jour de DSH
19
19
 
20
- ✨ **Design Philosophy — [une déclaration sur ce que « premium » signifie](./docs/design-philosophy.md)** · avec l'esthétique iOS / Linear comme base, le premium naît de la précision du matériau et de la retenue des couleurs.
20
+ ✨ **Design Philosophy — [une déclaration sur ce que « premium » signifie](../../docs/design-philosophy.md)** · avec l'esthétique iOS / Linear comme base, le premium naît de la précision du matériau et de la retenue des couleurs.
21
21
 
22
- [中文](./README.md) · [Historique](./CHANGELOG.md) · [Notes du projet](./docs/PROJECT.md) · [Design Philosophy](./docs/design-philosophy.md) · [Guide de publication](./docs/publishing-to-npm.md)
22
+ [中文](../../README.md) · [Historique](../../CHANGELOG.md) · [Notes du projet](../../docs/PROJECT.md) · [Design Philosophy](../../docs/design-philosophy.md) · [Guide de publication](../../docs/publishing-to-npm.md)
23
23
 
24
24
  ![npm version](https://img.shields.io/npm/v/dsh-dream-skin?color=4f83f2&label=npm)
25
25
  ![license](https://img.shields.io/github/license/RevolutionLA/dsh-dream-skin?color=34d399)
@@ -305,12 +305,12 @@ seeds de plateforme (`react`, `react/jsx-runtime`, …) et les bundles client en
305
305
 
306
306
  - **Ajouter un skin intégré** : ajoutez un objet (`id` + `colorScheme` + `tokens`) au tableau `SKINS` dans `lib/client.js` ;
307
307
  il apparaîtra alors automatiquement dans les Paramètres. Ajoutez une clé `skin.<id>` aux **8 dictionnaires de langue** (`zh`/`en`/`ja`/`ko`/`es`/`fr`/`de`/`ru`).
308
- - **Publier un pack de thèmes (recommandé)** : suivez [`docs/examples/sample-theme-pack.json`](./docs/examples/sample-theme-pack.json) —
308
+ - **Publier un pack de thèmes (recommandé)** : suivez [`docs/examples/sample-theme-pack.json`](../../docs/examples/sample-theme-pack.json) —
309
309
  un `*.dsh-theme.json` est importable dans les Paramètres et partageable via un lien, sans aucune modification de code.
310
- - **Ajouter vos propres fonds d'écran** : déposez des images dans [`wallpapers/`](./wallpapers/) (ne distribuez que ce dont vous avez
310
+ - **Ajouter vos propres fonds d'écran** : déposez des images dans [`wallpapers/`](../../wallpapers/) (ne distribuez que ce dont vous avez
311
311
  les droits), puis importez-les via la rangée « Fond d'écran » de DSH.
312
312
  - **Valider** : `npm test` (tests de fumée VM couvrant l'évaluation de la factory, `apply()` et l'import/la persistance des packs).
313
- - **Repeindre** : référez-vous aux tokens `--dsw-alias-*` (contrat complet dans [`docs/themes-spec.md`](./docs/themes-spec.md)).
313
+ - **Repeindre** : référez-vous aux tokens `--dsw-alias-*` (contrat complet dans [`docs/themes-spec.md`](../../docs/themes-spec.md)).
314
314
 
315
315
  ## 📌 Feuille de route
316
316
 
@@ -326,8 +326,8 @@ seeds de plateforme (`react`, `react/jsx-runtime`, …) et les bundles client en
326
326
 
327
327
  ## 🤝 Contribuer
328
328
 
329
- Issues et PR bienvenues ! Veuillez lire le [Guide de contribution](./CONTRIBUTING.md) et respecter le
330
- [Code de conduite](./CODE_OF_CONDUCT.md).
329
+ Issues et PR bienvenues ! Veuillez lire le [Guide de contribution](../../CONTRIBUTING.md) et respecter le
330
+ [Code de conduite](../../CODE_OF_CONDUCT.md).
331
331
 
332
332
  ## ⭐ Soutenir le projet
333
333
 
@@ -336,11 +336,11 @@ Si vous l'aimez : mettez une étoile **⭐** au dépôt, un pouce **👍** sur n
336
336
 
337
337
  ## 🔒 Sécurité
338
338
 
339
- Vous avez trouvé un problème de sécurité ? N'ouvrez pas d'issue publique — consultez la [Politique de sécurité](./SECURITY.md).
339
+ Vous avez trouvé un problème de sécurité ? N'ouvrez pas d'issue publique — consultez la [Politique de sécurité](../../SECURITY.md).
340
340
 
341
341
  ## 📄 Licence
342
342
 
343
- [MIT](./LICENSE)
343
+ [MIT](../../LICENSE)
344
344
 
345
345
  ## 🙏 Remerciements
346
346
 
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <a href="./README.md">中文</a> · <a href="./README.en.md">English</a> · <strong>日本語</strong> · <a href="./README.ko.md">한국어</a> · <a href="./README.es.md">Español</a> · <a href="./README.fr.md">Français</a> · <a href="./README.de.md">Deutsch</a> · <a href="./README.ru.md">Русский</a>
2
+ <a href="../../README.md">中文</a> · <a href="./README.en.md">English</a> · <strong>日本語</strong> · <a href="./README.ko.md">한국어</a> · <a href="./README.es.md">Español</a> · <a href="./README.fr.md">Français</a> · <a href="./README.de.md">Deutsch</a> · <a href="./README.ru.md">Русский</a>
3
3
  </p>
4
4
 
5
5
  <div align="center">
@@ -17,9 +17,9 @@
17
17
 
18
18
  > 1行インストール · 完全ネイティブ(注入なし・インストーラへのパッチなし)· DSH のアップデート後もそのまま動作
19
19
 
20
- ✨ **Design Philosophy — [「高級とは何か」についてのデザイン宣言](./docs/design-philosophy.md)** · iOS / Linear の美学を基準に、高級感を素材の正確さと克制された配色に置く。
20
+ ✨ **Design Philosophy — [「高級とは何か」についてのデザイン宣言](../../docs/design-philosophy.md)** · iOS / Linear の美学を基準に、高級感を素材の正確さと克制された配色に置く。
21
21
 
22
- [中文](./README.md) · [変更履歴](./CHANGELOG.md) · [プロジェクトメモ](./docs/PROJECT.md) · [Design Philosophy](./docs/design-philosophy.md) · [公開ガイド](./docs/publishing-to-npm.md)
22
+ [中文](../../README.md) · [変更履歴](../../CHANGELOG.md) · [プロジェクトメモ](../../docs/PROJECT.md) · [Design Philosophy](../../docs/design-philosophy.md) · [公開ガイド](../../docs/publishing-to-npm.md)
23
23
 
24
24
  ![npm version](https://img.shields.io/npm/v/dsh-dream-skin?color=4f83f2&label=npm)
25
25
  ![license](https://img.shields.io/github/license/RevolutionLA/dsh-dream-skin?color=34d399)
@@ -305,12 +305,12 @@ ui-layout の ThemePresenter によって `<body>` へのインラインカス
305
305
 
306
306
  - **内蔵スキンを追加する**: `lib/client.js` の `SKINS` 配列にオブジェクト(`id` + `colorScheme` + `tokens`)を追加するだけ。
307
307
  Settings には自動的に表示されます。**全 8 言語の辞書**(`zh`/`en`/`ja`/`ko`/`es`/`fr`/`de`/`ru`)に `skin.<id>` キーを追加してください。
308
- - **テーマパックを配布する(推奨)**: [`docs/examples/sample-theme-pack.json`](./docs/examples/sample-theme-pack.json) に従って —
308
+ - **テーマパックを配布する(推奨)**: [`docs/examples/sample-theme-pack.json`](../../docs/examples/sample-theme-pack.json) に従って —
309
309
  `*.dsh-theme.json` を1つ用意すれば Settings からインポートでき、リンクで共有も可能。コードの変更は不要です。
310
- - **自分で壁紙を追加する**: [`wallpapers/`](./wallpapers/) に画像を配置し(配布権のあるものだけを)、
310
+ - **自分で壁紙を追加する**: [`wallpapers/`](../../wallpapers/) に画像を配置し(配布権のあるものだけを)、
311
311
  DSH の「Wallpaper」行からインポートします。
312
312
  - **検証する**: `npm test`(ファクトリの評価、`apply()`、パックのインポート/永続化をカバーする VM スモークテスト)。
313
- - **塗り直す**: `--dsw-alias-*` トークンを参照(完全な仕様は [`docs/themes-spec.md`](./docs/themes-spec.md))。
313
+ - **塗り直す**: `--dsw-alias-*` トークンを参照(完全な仕様は [`docs/themes-spec.md`](../../docs/themes-spec.md))。
314
314
 
315
315
  ## 📌 ロードマップ
316
316
 
@@ -326,8 +326,8 @@ ui-layout の ThemePresenter によって `<body>` へのインラインカス
326
326
 
327
327
  ## 🤝 コントリビューション
328
328
 
329
- Issue や PR を歓迎します![コントリビューションガイド](./CONTRIBUTING.md) をお読みの上、
330
- [行動規範](./CODE_OF_CONDUCT.md) に従ってください。
329
+ Issue や PR を歓迎します![コントリビューションガイド](../../CONTRIBUTING.md) をお読みの上、
330
+ [行動規範](../../CODE_OF_CONDUCT.md) に従ってください。
331
331
 
332
332
  ## ⭐ プロジェクトを支援する
333
333
 
@@ -336,11 +336,11 @@ Issue や PR を歓迎します![コントリビューションガイド](./CO
336
336
 
337
337
  ## 🔒 セキュリティ
338
338
 
339
- セキュリティ上の問題を発見しましたか?公開の Issue は開かず、[セキュリティポリシー](./SECURITY.md) を確認してください。
339
+ セキュリティ上の問題を発見しましたか?公開の Issue は開かず、[セキュリティポリシー](../../SECURITY.md) を確認してください。
340
340
 
341
341
  ## 📄 ライセンス
342
342
 
343
- [MIT](./LICENSE)
343
+ [MIT](../../LICENSE)
344
344
 
345
345
  ## 🙏 謝辞
346
346
 
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <a href="./README.md">中文</a> · <a href="./README.en.md">English</a> · <a href="./README.ja.md">日本語</a> · <strong>한국어</strong> · <a href="./README.es.md">Español</a> · <a href="./README.fr.md">Français</a> · <a href="./README.de.md">Deutsch</a> · <a href="./README.ru.md">Русский</a>
2
+ <a href="../../README.md">中文</a> · <a href="./README.en.md">English</a> · <a href="./README.ja.md">日本語</a> · <strong>한국어</strong> · <a href="./README.es.md">Español</a> · <a href="./README.fr.md">Français</a> · <a href="./README.de.md">Deutsch</a> · <a href="./README.ru.md">Русский</a>
3
3
  </p>
4
4
 
5
5
  <div align="center">
@@ -17,9 +17,9 @@
17
17
 
18
18
  > 1줄 설치 · 순수 네이티브 (주입 없음, 설치 프로그램 패치 없음) · DSH 업데이트에도 안전
19
19
 
20
- ✨ **Design Philosophy — ["고급"이란 무엇인가에 대한 디자인 선언](./docs/design-philosophy.md)** · iOS / Linear 미학을 기준으로, 고급감을 소재의 정확성과 절제된 배색에 둡니다.
20
+ ✨ **Design Philosophy — ["고급"이란 무엇인가에 대한 디자인 선언](../../docs/design-philosophy.md)** · iOS / Linear 미학을 기준으로, 고급감을 소재의 정확성과 절제된 배색에 둡니다.
21
21
 
22
- [中文](./README.md) · [변경 내역](./CHANGELOG.md) · [프로젝트 노트](./docs/PROJECT.md) · [Design Philosophy](./docs/design-philosophy.md) · [배포 가이드](./docs/publishing-to-npm.md)
22
+ [中文](../../README.md) · [변경 내역](../../CHANGELOG.md) · [프로젝트 노트](../../docs/PROJECT.md) · [Design Philosophy](../../docs/design-philosophy.md) · [배포 가이드](../../docs/publishing-to-npm.md)
23
23
 
24
24
  ![npm version](https://img.shields.io/npm/v/dsh-dream-skin?color=4f83f2&label=npm)
25
25
  ![license](https://img.shields.io/github/license/RevolutionLA/dsh-dream-skin?color=34d399)
@@ -304,12 +304,12 @@ ui-layout의 ThemePresenter가 `<body>`에 인라인 커스텀 프로퍼티로
304
304
 
305
305
  - **기본 스킨 추가**: `lib/client.js`의 `SKINS` 배열에 객체(`id` + `colorScheme` + `tokens`)를 추가하면
306
306
  설정(Settings)에 자동으로 나타납니다. **8개 언어 사전 전체**(`zh`/`en`/`ja`/`ko`/`es`/`fr`/`de`/`ru`)에 `skin.<id>` 키를 추가하세요.
307
- - **테마 팩 배포 (권장)**: [`docs/examples/sample-theme-pack.json`](./docs/examples/sample-theme-pack.json)을 따르세요 —
307
+ - **테마 팩 배포 (권장)**: [`docs/examples/sample-theme-pack.json`](../../docs/examples/sample-theme-pack.json)을 따르세요 —
308
308
  `*.dsh-theme.json` 하나로 설정(Settings)에서 가져오기 가능하고 링크로 공유할 수 있으며, 코드 변경이 필요 없습니다.
309
- - **자체 월페이퍼 추가**: [`wallpapers/`](./wallpapers/)에 이미지를 넣으세요 (권리 보유 이미지만 배포), 그런 다음
309
+ - **자체 월페이퍼 추가**: [`wallpapers/`](../../wallpapers/)에 이미지를 넣으세요 (권리 보유 이미지만 배포), 그런 다음
310
310
  DSH의 "Wallpaper" 행에서 가져오면 됩니다.
311
311
  - **검증**: `npm test` (factory eval, `apply()`, 팩 가져오기/영속성 등을 다루는 VM 스모크 테스트).
312
- - **리페인트**: `--dsw-alias-*` 토큰을 참조하세요 (전체 계약은 [`docs/themes-spec.md`](./docs/themes-spec.md)에).
312
+ - **리페인트**: `--dsw-alias-*` 토큰을 참조하세요 (전체 계약은 [`docs/themes-spec.md`](../../docs/themes-spec.md)에).
313
313
 
314
314
  ## 📌 로드맵
315
315
 
@@ -325,8 +325,8 @@ ui-layout의 ThemePresenter가 `<body>`에 인라인 커스텀 프로퍼티로
325
325
 
326
326
  ## 🤝 기여하기
327
327
 
328
- 이슈와 PR 환영합니다! [기여 가이드](./CONTRIBUTING.md)를 읽고
329
- [행동 강령](./CODE_OF_CONDUCT.md)을 따라주세요.
328
+ 이슈와 PR 환영합니다! [기여 가이드](../../CONTRIBUTING.md)를 읽고
329
+ [행동 강령](../../CODE_OF_CONDUCT.md)을 따라주세요.
330
330
 
331
331
  ## ⭐ 프로젝트 지원하기
332
332
 
@@ -336,11 +336,11 @@ ui-layout의 ThemePresenter가 `<body>`에 인라인 커스텀 프로퍼티로
336
336
 
337
337
  ## 🔒 보안
338
338
 
339
- 보안 문제를 발견하셨나요? 공개 이슈로 열지 말고 [보안 정책](./SECURITY.md)을 참고하세요.
339
+ 보안 문제를 발견하셨나요? 공개 이슈로 열지 말고 [보안 정책](../../SECURITY.md)을 참고하세요.
340
340
 
341
341
  ## 📄 라이선스
342
342
 
343
- [MIT](./LICENSE)
343
+ [MIT](../../LICENSE)
344
344
 
345
345
  ## 🙏 감사의 말
346
346
 
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <a href="./README.md">中文</a> · <a href="./README.en.md">English</a> · <a href="./README.ja.md">日本語</a> · <a href="./README.ko.md">한국어</a> · <a href="./README.es.md">Español</a> · <a href="./README.fr.md">Français</a> · <a href="./README.de.md">Deutsch</a> · <strong>Русский</strong>
2
+ <a href="../../README.md">中文</a> · <a href="./README.en.md">English</a> · <a href="./README.ja.md">日本語</a> · <a href="./README.ko.md">한국어</a> · <a href="./README.es.md">Español</a> · <a href="./README.fr.md">Français</a> · <a href="./README.de.md">Deutsch</a> · <strong>Русский</strong>
3
3
  </p>
4
4
 
5
5
  <div align="center">
@@ -17,9 +17,9 @@
17
17
 
18
18
  > Установка в одну строку · полностью нативно (без инъекций, без патчей установщика) · переживает обновления DSH
19
19
 
20
- ✨ **Design Philosophy — [заявление о том, что значит «премиум»](./docs/design-philosophy.md)** · с эстетикой iOS / Linear за основу премиум рождается из точности материала и сдержанности цвета.
20
+ ✨ **Design Philosophy — [заявление о том, что значит «премиум»](../../docs/design-philosophy.md)** · с эстетикой iOS / Linear за основу премиум рождается из точности материала и сдержанности цвета.
21
21
 
22
- [中文](./README.md) · [История изменений](./CHANGELOG.md) · [Заметки о проекте](./docs/PROJECT.md) · [Design Philosophy](./docs/design-philosophy.md) · [Руководство по публикации](./docs/publishing-to-npm.md)
22
+ [中文](../../README.md) · [История изменений](../../CHANGELOG.md) · [Заметки о проекте](../../docs/PROJECT.md) · [Design Philosophy](../../docs/design-philosophy.md) · [Руководство по публикации](../../docs/publishing-to-npm.md)
23
23
 
24
24
  ![npm version](https://img.shields.io/npm/v/dsh-dream-skin?color=4f83f2&label=npm)
25
25
  ![license](https://img.shields.io/github/license/RevolutionLA/dsh-dream-skin?color=34d399)
@@ -304,12 +304,12 @@ dsh web # restores the official appearance
304
304
 
305
305
  - **Добавить встроенную тему**: добавьте объект (`id` + `colorScheme` + `tokens`) в массив `SKINS` в `lib/client.js`;
306
306
  она появится в Настройках автоматически. Добавьте ключ `skin.<id>` во **все 8 словарей языков** (`zh`/`en`/`ja`/`ko`/`es`/`fr`/`de`/`ru`).
307
- - **Поставлять набор тем (рекомендуется)**: следуйте [`docs/examples/sample-theme-pack.json`](./docs/examples/sample-theme-pack.json) —
307
+ - **Поставлять набор тем (рекомендуется)**: следуйте [`docs/examples/sample-theme-pack.json`](../../docs/examples/sample-theme-pack.json) —
308
308
  любой `*.dsh-theme.json` импортируется в Настройках и распространяется по ссылке, без изменений кода.
309
- - **Добавить свои обои**: положите изображения в [`wallpapers/`](./wallpapers/) (распространяйте только то, на что у вас
309
+ - **Добавить свои обои**: положите изображения в [`wallpapers/`](../../wallpapers/) (распространяйте только то, на что у вас
310
310
  есть права), затем импортируйте их через ряд «Обои» в DSH.
311
311
  - **Проверка**: `npm test` (VM-смоук-тесты: factory eval, `apply()`, импорт набора и сохранение).
312
- - **Перекраска**: используйте токены `--dsw-alias-*` (полный контракт в [`docs/themes-spec.md`](./docs/themes-spec.md)).
312
+ - **Перекраска**: используйте токены `--dsw-alias-*` (полный контракт в [`docs/themes-spec.md`](../../docs/themes-spec.md)).
313
313
 
314
314
  ## 📌 Дорожная карта
315
315
 
@@ -325,8 +325,8 @@ dsh web # restores the official appearance
325
325
 
326
326
  ## 🤝 Вклад
327
327
 
328
- Приветствуются issue и PR! Пожалуйста, прочитайте [Руководство по вкладу](./CONTRIBUTING.md) и соблюдайте
329
- [Кодекс поведения](./CODE_OF_CONDUCT.md).
328
+ Приветствуются issue и PR! Пожалуйста, прочитайте [Руководство по вкладу](../../CONTRIBUTING.md) и соблюдайте
329
+ [Кодекс поведения](../../CODE_OF_CONDUCT.md).
330
330
 
331
331
  ## ⭐ Поддержите проект
332
332
 
@@ -336,11 +336,11 @@ dsh web # restores the official appearance
336
336
 
337
337
  ## 🔒 Безопасность
338
338
 
339
- Нашли проблему с безопасностью? Не открывайте публичный issue — см. [Политику безопасности](./SECURITY.md).
339
+ Нашли проблему с безопасностью? Не открывайте публичный issue — см. [Политику безопасности](../../SECURITY.md).
340
340
 
341
341
  ## 📄 Лицензия
342
342
 
343
- [MIT](./LICENSE)
343
+ [MIT](../../LICENSE)
344
344
 
345
345
  ## 🙏 Благодарности
346
346
 
package/lib/client.js CHANGED
@@ -54,6 +54,12 @@ window.__ModuleLoader__.load({
54
54
  const SIDEBAR_LINK_KEY = "dsh-dream-skin:sidebar-link";
55
55
  /** Default: sidebar wash opacity follows the main canvas (avoids a split look). */
56
56
  const DEFAULT_SIDEBAR_LINK = 1;
57
+ /** localStorage key holding the popup / option-card fill opacity (0..1). */
58
+ const MODAL_OPACITY_KEY = "dsh-dream-skin:modal-opacity";
59
+ /** Default fill opacity for popups & the user-options card (kept readable). */
60
+ const DEFAULT_MODAL_OPACITY = 0.94;
61
+ /** CSS variable carrying the current popup fill weight (a percentage). */
62
+ const MODAL_FILL_VAR = "--dsh-dream-skin-modal-fill";
57
63
  /** Built-in base colors used when no skin token owns a scheme. */
58
64
  const BUILTIN_BASE = {
59
65
  light: "rgb(255, 255, 255)",
@@ -404,7 +410,9 @@ window.__ModuleLoader__.load({
404
410
  "bg2.gradient": "渐变",
405
411
  "bg2.apply": "应用链接",
406
412
  "bg2.autodim": "自动弱化(聚焦任务时不喧宾夺主)",
407
- "bg2.remove": "清除壁纸"
413
+ "bg2.remove": "清除壁纸",
414
+ "modal.title": "弹窗不透明度",
415
+ "modal.hint": "控制选项弹窗 / 选项卡的底填充透明度——越高越不透明、文字越清晰;越低越能透出背后的内容。"
408
416
  };
409
417
 
410
418
  /** English dictionary, checked complete against the zh key set. */
@@ -451,7 +459,9 @@ window.__ModuleLoader__.load({
451
459
  "bg2.gradient": "Gradient",
452
460
  "bg2.apply": "Apply link",
453
461
  "bg2.autodim": "Auto-dim (gently fade while focusing tasks)",
454
- "bg2.remove": "Clear wallpaper"
462
+ "bg2.remove": "Clear wallpaper",
463
+ "modal.title": "Popup opacity",
464
+ "modal.hint": "Controls how opaque the popup / option-card fill is — higher keeps text crisp, lower lets the content behind show through."
455
465
  };
456
466
 
457
467
  /** JA dictionary (community translation). */
@@ -498,7 +508,9 @@ window.__ModuleLoader__.load({
498
508
  "bg2.gradient": "グラデーション",
499
509
  "bg2.apply": "リンクを適用",
500
510
  "bg2.autodim": "自動ディム(タスクに集中している間は控えめに薄暗く)",
501
- "bg2.remove": "壁紙をクリア"
511
+ "bg2.remove": "壁紙をクリア",
512
+ "modal.title": "ポップアップの不透明度",
513
+ "modal.hint": "オプションのポップアップ / カードの塗り不透明度を調整します。高いほど不透明で文字がはっきりし、低いと背後が透けます。"
502
514
  };
503
515
 
504
516
  /** KO dictionary (community translation). */
@@ -545,7 +557,9 @@ window.__ModuleLoader__.load({
545
557
  "bg2.gradient": "그라데이션",
546
558
  "bg2.apply": "링크 적용",
547
559
  "bg2.autodim": "자동으로 은은해지기 (작업에 집중할 때 방해하지 않도록)",
548
- "bg2.remove": "배경화면 지우기"
560
+ "bg2.remove": "배경화면 지우기",
561
+ "modal.title": "팝업 불투명도",
562
+ "modal.hint": "옵션 팝업 / 카드 채우기 불투명도를 조절합니다. 높을수록 불투명해져 텍스트가 선명하고, 낮으면 배경이 비쳐 보입니다."
549
563
  };
550
564
 
551
565
  /** ES dictionary (community translation). */
@@ -592,7 +606,9 @@ window.__ModuleLoader__.load({
592
606
  "bg2.gradient": "Degradado",
593
607
  "bg2.apply": "Aplicar enlace",
594
608
  "bg2.autodim": "Atenuación automática (se desvanece suavemente mientras te concentras en las tareas)",
595
- "bg2.remove": "Quitar fondo"
609
+ "bg2.remove": "Quitar fondo",
610
+ "modal.title": "Opacidad de las ventanas emergentes",
611
+ "modal.hint": "Controla la opacidad del relleno de las ventanas emergentes / tarjetas de opciones: más alta mantiene el texto nítido, más baja deja ver el contenido de atrás."
596
612
  };
597
613
 
598
614
  /** FR dictionary (community translation). */
@@ -639,7 +655,9 @@ window.__ModuleLoader__.load({
639
655
  "bg2.gradient": "Dégradé",
640
656
  "bg2.apply": "Appliquer le lien",
641
657
  "bg2.autodim": "Atténuation auto (s'estompe en douceur pendant la concentration)",
642
- "bg2.remove": "Effacer le fond d'écran"
658
+ "bg2.remove": "Effacer le fond d'écran",
659
+ "modal.title": "Opacité des fenêtres contextuelles",
660
+ "modal.hint": "Contrôle l'opacité du remplissage des fenêtres / cartes d'options : plus élevée, le texte reste net ; plus basse, le contenu derrière transparaît."
643
661
  };
644
662
 
645
663
  /** DE dictionary (community translation). */
@@ -686,7 +704,9 @@ window.__ModuleLoader__.load({
686
704
  "bg2.gradient": "Verlauf",
687
705
  "bg2.apply": "Link anwenden",
688
706
  "bg2.autodim": "Automatisch dimmen (sanft verblassen, während du dich auf Aufgaben konzentrierst)",
689
- "bg2.remove": "Wallpaper entfernen"
707
+ "bg2.remove": "Wallpaper entfernen",
708
+ "modal.title": "Deckkraft von Popups",
709
+ "modal.hint": "Regelt die Fülldeckkraft von Popups / Optionskarten – höher hält den Text klar, niedriger lässt den Hintergrund durchscheinen."
690
710
  };
691
711
 
692
712
  /** RU dictionary (community translation). */
@@ -733,7 +753,9 @@ window.__ModuleLoader__.load({
733
753
  "bg2.gradient": "Градиент",
734
754
  "bg2.apply": "Применить ссылку",
735
755
  "bg2.autodim": "Автоприглушение (плавно затухает при фокусе на задачах)",
736
- "bg2.remove": "Очистить обои"
756
+ "bg2.remove": "Очистить обои",
757
+ "modal.title": "Непрозрачность всплывающих окон",
758
+ "modal.hint": "Регулирует непрозрачность заливки всплывающих окон / карточек с параметрами: выше — текст чётче, ниже — просвечивает фон."
737
759
  };
738
760
 
739
761
  //#endregion
@@ -901,6 +923,21 @@ window.__ModuleLoader__.load({
901
923
  const n = Number(raw);
902
924
  return Number.isFinite(n) ? n !== 0 : (DEFAULT_SIDEBAR_LINK !== 0);
903
925
  }
926
+
927
+ /** Popup / option-card fill opacity 0..1 (clamped; default when unset). */
928
+ function readModalOpacity() {
929
+ const raw = readStorage(MODAL_OPACITY_KEY);
930
+ if (raw === null) return DEFAULT_MODAL_OPACITY;
931
+ const value = Number(raw);
932
+ return Number.isFinite(value) ? Math.min(1, Math.max(0, value)) : DEFAULT_MODAL_OPACITY;
933
+ }
934
+
935
+ /** Persist the popup fill opacity (0..1, clamped) and cache it in-process. */
936
+ function writeModalOpacity(value) {
937
+ const clamped = Math.min(1, Math.max(0, Number(value)));
938
+ writeStorage(MODAL_OPACITY_KEY, String(clamped));
939
+ return clamped;
940
+ }
904
941
  //#endregion
905
942
 
906
943
  //#region dsh-dream-skin: wallpaper layer + token shading
@@ -984,18 +1021,65 @@ window.__ModuleLoader__.load({
984
1021
  " backdrop-filter: blur(20px) saturate(140%);",
985
1022
  " }",
986
1023
  "}",
987
- // A second rule (always applied, not @supports-gated) gives the
1024
+ // A second rule (always applied, not @supports-gated) used to give the
988
1025
  // composer root a bottom-scrim so a scrolled-up message / "turn N"
989
- // monitor row never shows through under the input. It is tinted with
990
- // the ACTIVE BASE color (not the tip color, not translucent white),
991
- // so on light skins it exactly matches the page background — no
992
- // grey/black fog, no dirty gradient — while still shielding the
993
- // scrolled content behind the input. On deep skins it leans on the
994
- // deep base and stays subtle too.
1026
+ // monitor row never shows through under the input. That scrim was a
1027
+ // full-rectangle gradient over the WIDER `.uV2eYG_root` (which is
1028
+ // wider than the rounded `.uV2eYG_card`), so on skins with a
1029
+ // wallpaper it painted a big sharp-cornered rectangle behind and
1030
+ // around the rounded input — the "外层尖角框" users disliked. The
1031
+ // composer card already carries its own translucent glass fill +
1032
+ // backdrop blur, so the frame is dropped: the root is now fully
1033
+ // transparent and only the rounded card reads. Readability is kept
1034
+ // by the card's own fill; nothing sharp frames the input anymore.
995
1035
  ".uV2eYG_root {",
996
- " background: linear-gradient(to bottom,",
997
- " color-mix(in srgb, var(--dsw-alias-bg-base) 92%, transparent) 0%,",
998
- " var(--dsw-alias-bg-base) 34%);",
1036
+ " background: transparent;",
1037
+ "}",
1038
+ // --- Right file panel consistency (issue: left rail vs right panel) ---
1039
+ // The left sidebar reads the skin's `--dsw-specific-sidebar-fill`
1040
+ // (a translucent dark tint that matches the wallpaper wash), but the
1041
+ // right file panel (`nArs4W_panel`) fell back to DSH's default
1042
+ // near-white translucent fill, so the two halves rendered with
1043
+ // totally different tints. Give the right panel the very same
1044
+ // sidebar fill and a matching hairline so both sides look uniform.
1045
+ ".nArs4W_panel {",
1046
+ " background: var(--dsw-specific-sidebar-fill) !important;",
1047
+ " border-left-color: var(--dsw-alias-border-l2);",
1048
+ "}",
1049
+ // The white default show-through can leak on nested panes that carry
1050
+ // their own translucent white; force them to inherit the sidebar fill.
1051
+ ".nArs4W_pane, .nArs4W_paneContent, .nArs4W_workbench, .nArs4W_explorerBody {",
1052
+ " background: transparent;",
1053
+ "}",
1054
+ // --- Left sidebar foot/settings consistency (issue: settings area) ---
1055
+ // The workspace list region (`hHd-Xa_regionArea`) overhangs to the
1056
+ // column's left/right edges (margin-left:-4px / margin-right:-12px),
1057
+ // but the footer/settings region was a plain `width:100%` box stuck
1058
+ // at the inner padding, so it sat ~4px inset left and ~12px inset
1059
+ // right. At the seam between the scrolling list and the footer that
1060
+ // difference made a visible vertical step that read as a "断裂" —
1061
+ // the two planes looked misaligned/detached. Align the footer to the
1062
+ // exact same span as the list so the whole left column is one
1063
+ // continuous plane.
1064
+ ".hHd-Xa_root .hHd-Xa_footArea, .hHd-Xa_root .hHd-Xa_settingsArea, .hHd-Xa_root .hHd-Xa_footerActions {",
1065
+ " width: auto;",
1066
+ " margin-right: calc(-1 * var(--dsh-sidebar-inline-padding, 12px));",
1067
+ " margin-left: -4px;",
1068
+ " padding-right: var(--dsh-sidebar-inline-padding, 12px);",
1069
+ " padding-left: 4px;",
1070
+ "}",
1071
+ // Force a single uniform fill across the whole sidebar and remove any
1072
+ // leftover erase-band / divider right at the list-footer boundary.
1073
+ ".hHd-Xa_footArea, .hHd-Xa_settingsArea, .hHd-Xa_footerActions {",
1074
+ " background: transparent;",
1075
+ " box-shadow: none;",
1076
+ " border: none;",
1077
+ "}",
1078
+ // The conversation list ends with a fade (`.qDHVXG_fade`) so the whole
1079
+ // left column fades uniformly into the sidebar fill — no seam at the
1080
+ // foot.
1081
+ ".qDHVXG_fade {",
1082
+ " background: transparent;",
999
1083
  "}",
1000
1084
  // The user-questions option card (`.Mbwy4a_card`) shares `--dsw-specific-input-major`
1001
1085
  // with the composer, which is intentionally very translucent for the liquid-glass
@@ -1003,8 +1087,12 @@ window.__ModuleLoader__.load({
1003
1087
  // through). Override it with a high-opacity fill derived from the active base color,
1004
1088
  // so the options stay readable in BOTH deep and light skins while still carrying a
1005
1089
  // subtle glass blur. This is a leaf card, so backdrop-filter here is safe.
1090
+ //
1091
+ // The fill weight (what % of the base color the block carries) is user-adjustable
1092
+ // via Settings → 外观 → 弹窗不透明度, held in the MODAL_FILL_VAR custom property.
1093
+ // Lower weight = more transparent (content shows through); higher = nearly solid.
1006
1094
  ".Mbwy4a_card {",
1007
- " background: color-mix(in srgb, var(--dsw-alias-bg-base) 94%, transparent);",
1095
+ " background: color-mix(in srgb, var(--dsw-alias-bg-base) var(" + MODAL_FILL_VAR + ", 94%), transparent);",
1008
1096
  " -webkit-backdrop-filter: blur(24px) saturate(150%);",
1009
1097
  " backdrop-filter: blur(24px) saturate(150%);",
1010
1098
  "}"
@@ -1021,6 +1109,22 @@ window.__ModuleLoader__.load({
1021
1109
  materialStyleEl?.remove();
1022
1110
  materialStyleEl = null;
1023
1111
  }
1112
+
1113
+ /**
1114
+ * Apply the persisted popup-fill weight onto `:root` as MODAL_FILL_VAR, so
1115
+ * every injected rule that references it (the user-options card fill) stays
1116
+ * in sync without rebuilding the stylesheet. The weight is the base-color
1117
+ * percentage (0..100): higher = more opaque/solid, lower = more transparent.
1118
+ * Called at boot (so a saved value re-applies) and whenever the slider moves.
1119
+ */
1120
+ function applyModalOpacity() {
1121
+ const weight = Math.round(readModalOpacity() * 100);
1122
+ try {
1123
+ document.documentElement.style.setProperty(MODAL_FILL_VAR, `${weight}%`);
1124
+ } catch {
1125
+ // document null in a headless eval — the CSS fallback (94%) still applies
1126
+ }
1127
+ }
1024
1128
  //#endregion
1025
1129
 
1026
1130
  //#region dsh-dream-skin: image compression
@@ -1728,6 +1832,38 @@ window.__ModuleLoader__.load({
1728
1832
  ]
1729
1833
  });
1730
1834
  }
1835
+
1836
+ /**
1837
+ * Popup-opacity row: a slider for how opaque the popup / option-card fill
1838
+ * is. Uses the shared Slider component; the injected modal CSS reads the
1839
+ * persisted value through MODAL_FILL_VAR (see applyModalOpacity), so moving
1840
+ * the slider re-applies immediately and persists across reloads.
1841
+ */
1842
+ function ModalOpacityRow({ t, setOpacity, useStore }) {
1843
+ const opacity = useStore((s) => s.opacity);
1844
+ return (0, react_jsx_runtime.jsxs)("div", {
1845
+ style: styles.group,
1846
+ children: [
1847
+ (0, react_jsx_runtime.jsx)("div", {
1848
+ style: styles.title,
1849
+ children: t("modal.title")
1850
+ }),
1851
+ (0, react_jsx_runtime.jsx)(Slider, {
1852
+ label: t("modal.title"),
1853
+ value: Math.round(opacity * 100),
1854
+ min: 0,
1855
+ max: 100,
1856
+ step: 1,
1857
+ format: (v) => `${v}%`,
1858
+ onChange: setOpacity
1859
+ }),
1860
+ (0, react_jsx_runtime.jsx)("div", {
1861
+ style: styles.hint,
1862
+ children: t("modal.hint")
1863
+ })
1864
+ ]
1865
+ });
1866
+ }
1731
1867
  //#endregion
1732
1868
 
1733
1869
  //#region dsh-dream-skin: P0 shared utilities (packs, accent, persistence, random)
@@ -2203,6 +2339,20 @@ window.__ModuleLoader__.load({
2203
2339
  }
2204
2340
  });
2205
2341
  }
2342
+
2343
+ /** Popup-opacity row store: the current fill weight (0..1) + revision. */
2344
+ function createModalOpacityStore() {
2345
+ return (0, _runtime_client.defineStore)({
2346
+ init: () => ({ opacity: DEFAULT_MODAL_OPACITY, revision: -1 }),
2347
+ actions: {
2348
+ sync: (d, opacity, revision) => {
2349
+ if (revision <= d.revision) return;
2350
+ d.opacity = opacity;
2351
+ d.revision = revision;
2352
+ }
2353
+ }
2354
+ });
2355
+ }
2206
2356
  //#endregion
2207
2357
 
2208
2358
  //#region dsh-dream-skin: P0 accent override
@@ -2413,6 +2563,9 @@ window.__ModuleLoader__.load({
2413
2563
  // Apply + push the wallpaper state (includes the sidebar opacity).
2414
2564
  applyWallpaper2(ctx);
2415
2565
  syncWallpaper();
2566
+
2567
+ // Apply the persisted popup-fill weight so saved modal opacity re-applies.
2568
+ applyModalOpacity();
2416
2569
  }
2417
2570
 
2418
2571
  /** Clear wallpaper (all kinds) and its overrides. */
@@ -3073,6 +3226,33 @@ window.__ModuleLoader__.load({
3073
3226
  inject: advWallpaperInjected
3074
3227
  }, WallpaperAdvancedRow));
3075
3228
 
3229
+ // Popup / option-card fill opacity row.
3230
+ const modalOpacityStore = createModalOpacityStore();
3231
+ let modalOpacityBound;
3232
+ let modalOpacityRevision = 0;
3233
+ const syncModalOpacity = () => {
3234
+ modalOpacityBound?.sync(readModalOpacity(), ++modalOpacityRevision);
3235
+ };
3236
+ const modalOpacityInjected = (actions) => {
3237
+ modalOpacityBound = actions;
3238
+ syncModalOpacity();
3239
+ return {
3240
+ setOpacity: (percent) => {
3241
+ const clamped = writeModalOpacity(percent / 100);
3242
+ applyModalOpacity();
3243
+ modalOpacityBound?.sync(clamped, ++modalOpacityRevision);
3244
+ }
3245
+ };
3246
+ };
3247
+ ctx.slots.inject("settings.dreamSkin.item", () => ctx.slots.register({
3248
+ name: "settings.dreamSkin.item",
3249
+ id: "dream-skin-modal-opacity",
3250
+ order: 32,
3251
+ store: modalOpacityStore,
3252
+ locale: SETTINGS_NS,
3253
+ inject: modalOpacityInjected
3254
+ }, ModalOpacityRow));
3255
+
3076
3256
  // P0: per-user accent override row.
3077
3257
  const accentStore = createAccentStore();
3078
3258
  let accentBound;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-dream-skin",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "description": "DeepSeek Harness 换肤插件(Dream Skin for DSH):8 套 iOS / Linear 式清透冷调的高质感主题 + 弥散光壁纸 + 每皮肤智能背景 + 强调色 + 主题包分享,把换肤做成材质与配色克制的高级感工艺,而非贴图 — in the spirit of Codex Dream Skin, elevated.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -23,13 +23,7 @@
23
23
  "lib/types",
24
24
  "cordis.patch.yml",
25
25
  "README.md",
26
- "README.en.md",
27
- "README.ja.md",
28
- "README.ko.md",
29
- "README.es.md",
30
- "README.fr.md",
31
- "README.de.md",
32
- "README.ru.md",
26
+ "docs/i18n",
33
27
  "docs/previews",
34
28
  "docs/screenshots",
35
29
  "docs/examples",