dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
宋律 Songgrid —— 宋代美学主题,宣纸(浅)与夜墨(深)双变体;汝窑天青承担交互态、窑铜只用于引用块;另附 4pt 间距阶与 46 个 mask 图标。
Song-dynasty aesthetics × Swiss International Style — a theme for the DeepSeek Harness Web UI.
中文 | English
| Xuanzhi · light | Yemo · dark |
|---|---|
![]() | ![]() |
The two variants, captured live (the sidebar is the Eight Standing Seats board). Card areas are redacted.
The warm white of rice paper, the celadon of Ru ware, the warning red of cinnabar — disciplined by Swiss International Style: a 4pt spacing scale, 2/4px radii, and type sizes locked to line heights.
This is not ancient styling pasted onto a UI. Every traditional colour is placed on the functional role it can actually hold.
The one decision in this theme that looks like a duplicate but must not be collapsed:
| Role | Colour | Contrast (on paper) | Where it lands |
|---|---|---|---|
| Functional · Ru celadon | #3A7284 | 4.91 : 1 ✓ AA | buttons · focus ring · selection · links |
| Editorial · kiln copper | #9A6B50 | 4.19 : 1 | blockquotes · markers |
Celadon passes WCAG AA, so it can carry "can I click this / is this selected". Kiln copper does not pass AA for body text, so it only carries "is this worth a second look". Their hues sit 174° apart — they were never two candidates for one role.
| Variant | id | Character |
|---|---|---|
| Xuanzhi (rice paper) | song-grid-xuanzhi | warm paper white × Ru celadon × cinnabar |
| Yemo (night ink) | song-grid-yemo | cool blue-black × brightened celadon |
| Follow system | system | switches with the host |
| Role | Value | |
|---|---|---|
| Paper | #F7F5EF | |
| Surface +1 | #FBFAF6 | |
| Surface +2 | #F0EDE4 | |
| Overlay | #E7E3D8 | |
| Hairline | #DDD8CB | |
| Ink (primary text) | #26221C | |
| Secondary text | #5C554A | |
| Tertiary text | #8B8478 | |
| Brand / functional | #3A7284 | |
| Editorial accent | #9A6B50 | |
| Success | #4E7A5A | |
| Warn | #B0823A | |
| Cinnabar (error) | #B5453C |
| Role | Value | |
|---|---|---|
| Night ink | #10151A | |
| Surface +1 | #191F26 | |
| Surface +2 | #1D242B | |
| Primary text | #E8E3D6 | |
| Secondary text | #A8A193 | |
| Tertiary text | #7A7468 | |
| Brand / functional | #7FB4C4 | |
| Error | #D07A70 |
The dark ground is a cool blue-black, tuned together with the celadon. Swapping it for a warm black means re-tuning the entire dark variant.
Noto Serif SC); Latin stays sans-serif — each script gets its own face, never mixedThree layers; two of them are orthogonal to colour — future palette work never touches them:
| Layer | Contents | Colour |
|---|---|---|
STRUCTURE_CSS | spacing scale (4pt grid + semantic aliases) · 2/4px radii · 4 line-height steps · 5 motion durations + 3 curves · focus ring · icon sizes | no |
ICON_CSS | 46 Lucide mask icons, following currentColor | no |
SEMANTIC_CSS | accent role split (--sg-accent-functional / --sg-accent-editorial) | yes |
dsh plugin --profile web add dsh-theme-songgrid
Then refresh the page and pick 「宋律 · 宣纸」/「宋律 · 夜墨」/ follow-system under Settings → General → Theme. The choice persists in the song-grid-theme settings namespace (the host plugin entry id).
The entry URL decides whether the choice survives across browsers. The DSH client only writes settings back to the host when the page hostname is
localhost/::1/127.x(isLoopbackHostnameindsh-client-connection). Opened throughdsh.localhost, a LAN name or a reverse-proxy domain, the whole settings surface degrades to in-pagememory— which looks like "I picked the theme, refreshed, and it was gone", and it affects the official theme preference, locale and notification settings just the same. To have the choice remembered across browsers/machines, openhttp://localhost:8080/(orhttp://127.0.0.1:3080/?token=…). Per-browser remembering works on any entry (the plugin keeps its own localStorage mirror).
@deepseek-ai/dsh); verified on 0.2.0-rc.2 — on 0.1.5-rc.2 install dsh-theme-songgrid@0.1.0settingsScope was removed: the theme preference scope is now ctx.configForms.get("songgrid") (the snapshot is still { status, value })lib/client.js must register under the package name in __ModuleLoader__.load({ id }) — rebuild the bundle after any rename, or the boot aborts with duplicate factory registrationlib/index.js host half: registers the songgrid settings namespace
lib/client.js browser half: theme tokens + three CSS layers + theme picker
assets/ landscape backgrounds (ink / ink-night / celadon)
:root; add a step there. New styles take var(--sg-gap-*) / var(--sg-radius-*) — never raw values<span class="sg-icon sg-icon-check"></span>, 46 glyphs in ICON_CSS; sizes via .sm / .lg / .xl or --sg-icon-size--sg-accent-editorial already exists in SEMANTIC_CSS; add selectors — the only rule is never on an interactive control, that slot belongs to the functional accentMIT