Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ Sources in this repository:
| **pi.workspace-file-guard** | Keeps model-written test, log, cache and temp files off the system drive, Desktop and Downloads; junk stays in the project's Temp or scratch | xingleiwu |
| **pi.goal-x** | Persistent workspace goals, task evidence and host-owned completion audits | Goal X contributors |
| **pi.parchment** | Warm parchment global theme: cream paper background with a faint grid, ink user bubbles, paper assistant cards and monospace meta lines (styling only) | pkmcenter |
| **pi.obsidian-theme** | Deep blue-teal global theme tuned against a measured reference: a layered surface ladder, hierarchy from 1px hairlines rather than glow, a solid teal selection fill and a four-step text scale (styling only) | ily55421 |

Published on the plugin center from their own repositories:

Expand Down
1 change: 1 addition & 0 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
| **pi.workspace-file-guard** | C盘防垃圾:防止模型把测试、日志、缓存、临时文件写到系统盘、桌面、下载,垃圾只待在当前项目的 Temp 或 scratch | xingleiwu |
| **pi.goal-x** | 为 PI-Desktop 提供持久化工作区目标、任务证据与宿主完成审计 | Goal X contributors |
| **pi.parchment** | 羊皮纸主题:米色纸面背景配淡网格,墨色用户气泡,纸色助手卡片,等宽字体元信息行(纯样式) | pkmcenter |
| **pi.obsidian-theme** | 黑曜石主题:深蓝青全局主题,按实测参考图校准——分层表面阶梯、用 1px 发丝边框而非发光建立层级、实心青绿选中态、四档文字层级(纯样式) | ily55421 |

插件中心上由作者自有仓库发布:

Expand Down
46 changes: 45 additions & 1 deletion catalog.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"schemaVersion": 1,
"providerId": "official",
"name": "PI-Desktop Official Plugins",
"updatedAt": "2026-09-19T06:13:43Z",
"updatedAt": "2026-09-20T01:32:20Z",
"homepage": "https://github.com/vastsa/pi-desktop-plugins",
"plugins": [
{
Expand Down Expand Up @@ -805,6 +805,50 @@
}
]
},
{
"id": "pi.obsidian-theme",
"name": "Obsidian Theme",
"description": "A deep blue-teal global theme tuned to a measured reference: surfaces lifted from #0F1B26 to #223648, hierarchy carried by 1px #2A4054 hairlines rather than glow, a solid #1B4F53 selection state, and a four-step text scale that takes body prose from 17:1 down to 11:1. Styling only \u2014 no features.",
"i18n": {
"en": {
"name": "Obsidian Theme",
"description": "A deep blue-teal global theme tuned to a measured reference: surfaces lifted from #0F1B26 to #223648, hierarchy carried by 1px #2A4054 hairlines rather than glow, a solid #1B4F53 selection state, and a four-step text scale that takes body prose from 17:1 down to 11:1. Styling only \u2014 no features.",
"safetyNotes": "Pure styling. The plugin contributes one global theme (CSS only) and a small info panel. No network, file, clipboard, shell, or agent access."
},
"zh-CN": {
"name": "\u9ed1\u66dc\u77f3\u4e3b\u9898",
"description": "\u6df1\u84dd\u9752\u5168\u5c40\u4e3b\u9898\uff0c\u6309\u5b9e\u6d4b\u53c2\u8003\u56fe\u6821\u51c6\uff1a\u8868\u9762\u7531 #0F1B26 \u5206\u5c42\u62ac\u81f3 #223648\uff0c\u5c42\u7ea7\u7528 1px #2A4054 \u53d1\u4e1d\u8fb9\u6846\u800c\u975e\u53d1\u5149\u627f\u62c5\uff0c\u9009\u4e2d\u6001\u4e3a\u5b9e\u5fc3 #1B4F53\uff0c\u56db\u6863\u6587\u5b57\u5c42\u7ea7\u628a\u6b63\u6587\u5bf9\u6bd4\u5ea6\u4ece 17:1 \u964d\u5230 11:1\u3002\u9664\u6837\u5f0f\u5916\u4e0d\u63d0\u4f9b\u4efb\u4f55\u529f\u80fd\u3002",
"safetyNotes": "\u7eaf\u6837\u5f0f\u63d2\u4ef6\u3002\u4ec5\u8d21\u732e\u4e00\u4e2a\u5168\u5c40\u4e3b\u9898\uff08\u53ea\u6709 CSS\uff09\u548c\u4e00\u4e2a\u8bf4\u660e\u9762\u677f\u3002\u65e0\u7f51\u7edc\u3001\u6587\u4ef6\u3001\u526a\u8d34\u677f\u3001\u547d\u4ee4\u6267\u884c\u6216\u667a\u80fd\u4f53\u6743\u9650\u3002"
}
},
"author": "ily55421",
"categories": [
"theme",
"community"
],
"verified": true,
"downloads": 0,
"homepage": "https://github.com/vastsa/pi-desktop-plugins/tree/main/plugins/pi.obsidian-theme",
"repository": "https://github.com/vastsa/pi-desktop-plugins",
"readmeMarkdown": "# Obsidian Theme / \u9ed1\u66dc\u77f3\u4e3b\u9898\n\nA deep blue-grey global theme for PI-Desktop, tuned for long reading: a layered surface ladder instead of one flat black, hierarchy carried by 1px hairline borders rather than glow, a low-saturation teal accent, and a four-step text scale. Styling only \u2014 no features.\n\nPI-Desktop \u6df1\u84dd\u7070\u5168\u5c40\u4e3b\u9898\uff0c\u4e3a\u957f\u65f6\u95f4\u9605\u8bfb\u8c03\u6821\uff1a\u5206\u5c42\u6d77\u62d4\u800c\u975e\u4e00\u7247\u6b7b\u9ed1\u3001\u7528 1px \u53d1\u4e1d\u8fb9\u6846\u800c\u975e\u53d1\u5149\u5efa\u7acb\u5c42\u7ea7\u3001\u4f4e\u9971\u548c\u9752\u7eff\u5f3a\u8c03\u8272\u3001\u56db\u6863\u6587\u5b57\u5c42\u7ea7\u3002\u7eaf\u6837\u5f0f\uff0c\u65e0\u989d\u5916\u529f\u80fd\u3002\n\n## Palette / \u8272\u677f\n\n| Role / \u7528\u9014 | Value | | Role / \u7528\u9014 | Value |\n|---|---|---|---|---|\n| App base / \u5e94\u7528\u5e95\u8272 | `#0F1B26` | | Title text / \u6807\u9898 | `#F2F7FA` |\n| Rails / \u4fa7\u680f | `#12202C` | | Body prose / \u6b63\u6587 | `#C4D2DD` |\n| Reading column / \u9605\u8bfb\u533a | `#0E1A25` | | Secondary / \u6b21\u7ea7 | `#8FA3B4` |\n| Card / composer / \u5361\u7247 | `#182835` | | Hints / \u5f31\u63d0\u793a | `#6A7E8F` |\n| Raised / \u60ac\u6d6e | `#1E3040` | | Accent / \u5f3a\u8c03 | `#5CD0B8` |\n| Hover | `#223648` | | Border / \u8fb9\u6846 | `#2A4054` |\n| Field / \u8f93\u5165\u6846 | `#1B2C3B` | | Inset / \u51f9\u9677 | `#091219` |\n| Selected row / \u9009\u4e2d\u6001 | `#1B4F53`\u2192`#15414A` | | Info / Warning / Danger | `#7FB4F0` `#E8C878` `#E78282` |\n\nNo pure black, no pure white. / \u4e0d\u4f7f\u7528\u7eaf\u9ed1\uff0c\u4e0d\u4f7f\u7528\u7eaf\u767d\u3002\n\n## What it does / \u529f\u80fd\n\n- One global theme, selectable in **Settings \u2192 Theme \u2192 search \"Obsidian\" / \u8bbe\u7f6e \u2192 \u4e3b\u9898 \u2192 \u641c\u7d22 \"Obsidian\"**.\n- **Elevation ladder.** Eight distinct surface tones from `#091219` (inset) through `#0F1B26` (app) to `#223648` (hover), so the three columns and the cards inside them stop merging. A card now separates from the canvas it sits on; in the previous build that measured zero.\n- **Hierarchy from borders, not glow.** Every panel, card, field and code block carries a 1px `#2A4054` / `#1C2B3A` edge. All bloom and drop-glow shadows were removed.\n- **Four text steps for reading comfort.** Titles `#F2F7FA`, body prose `#C4D2DD`, secondary `#8FA3B4`, hints `#6A7E8F`. Body prose dropped from 17:1 to 11.3:1 against its background \u2014 still AAA, far less glaring \u2014 while secondary text went slightly up.\n- **Accent used as a material, sparingly.** `#5CD0B8` on selection, the send button, `.btn-primary`, focus rings and the active session rail; nothing else.\n- **Fields read as fields.** Lighter than the canvas with a hairline edge, so the composer stays visible; selected rows get a solid teal fill (`#1B4F53`) rather than a wash.\n- Code cards and blockquotes sit on `#16242F`; blockquotes carry a `#5CD0B8` rule; tables get a real row seam; meta and path lines are monospace.\n- \u6d77\u62d4\u9636\u68af\uff1a\u4ece `#091219`\uff08\u51f9\u9677\uff09\u5230 `#223648`\uff08hover\uff09\u5171\u516b\u6863\u8868\u9762\u8272\uff0c\u4e09\u680f\u4e0e\u5176\u5185\u90e8\u5361\u7247\u4e0d\u518d\u7cca\u6210\u4e00\u7247\u3002\n- \u5c42\u7ea7\u9760\u8fb9\u6846\u800c\u975e\u53d1\u5149\uff1a\u6240\u6709\u9762\u677f\u3001\u5361\u7247\u3001\u8f93\u5165\u6846\u3001\u4ee3\u7801\u5757\u90fd\u5e26 1px \u5b9e\u8272\u53d1\u4e1d\u8fb9\uff08`#2A4054` / `#1C2B3A`\uff09\uff0c\u53d1\u5149\u9634\u5f71\u5168\u90e8\u79fb\u9664\u3002\n- \u56db\u6863\u6587\u5b57\uff1a\u6807\u9898 / \u6b63\u6587 / \u6b21\u7ea7 / \u5f31\u63d0\u793a\u3002\u6b63\u6587\u5bf9\u6bd4\u5ea6\u7531 17:1 \u964d\u5230 11.3:1\uff08\u4ecd\u662f AAA\uff09\u4e0d\u518d\u523a\u773c\uff0c\u6b21\u7ea7\u6587\u5b57\u7565\u6709\u63d0\u5347\u3002\n- \u5f3a\u8c03\u8272\u514b\u5236\u4f7f\u7528\uff1a\u4ec5\u9009\u4e2d\u6001\u3001\u53d1\u9001\u6309\u94ae\u3001\u4e3b\u6309\u94ae\u3001\u805a\u7126\u63cf\u8fb9\u4e0e\u5f53\u524d\u4f1a\u8bdd\u6761\u76ee\u3002\n- \u8f93\u5165\u6846\u6bd4\u753b\u5e03\u66f4\u4eae\u5e76\u5e26\u53d1\u4e1d\u8fb9\uff0c\u56e0\u6b64\u8f93\u5165\u533a\u4e0d\u4f1a\u518d\"\u6d88\u5931\"\uff1b\u9009\u4e2d\u884c\u7528\u5b9e\u5fc3 `#1B4F53` \u800c\u975e\u534a\u900f\u660e\u7f69\u8272\u3002\n- \u4ee3\u7801\u5361\u7247\u4e0e\u5f15\u7528\u5757\u5e95\u8272 `#16242F`\uff0c\u5f15\u7528\u5757\u914d `#5CD0B8` \u7ad6\u6761\uff1b\u8868\u683c\u8865\u4e0a\u884c\u5206\u9694\u7ebf\uff1b\u5143\u4fe1\u606f\u4e0e\u8def\u5f84\u884c\u6539\u7528\u7b49\u5bbd\u5b57\u4f53\u3002\n\n## Reverting / \u6062\u590d\n\nPick Light / Dark / System in the theme picker \u2014 the plugin can stay installed without effect. Or uninstall the plugin.\n\n\u5728\u4e3b\u9898\u9009\u62e9\u5668\u4e2d\u5207\u56de\u6d45\u8272 / \u6df1\u8272 / \u7cfb\u7edf\u5373\u53ef\uff1b\u63d2\u4ef6\u4fdd\u7559\u5b89\u88c5\u4e5f\u65e0\u526f\u4f5c\u7528\uff0c\u6216\u76f4\u63a5\u5378\u8f7d\u3002\n\n## Permissions / \u6743\u9650\n\n| Permission | Why / \u539f\u56e0 |\n|---|---|\n| `ui.panel` | Bilingual info panel: palette reference and elevation preview / \u53cc\u8bed\u8bf4\u660e\u9762\u677f\uff1a\u8272\u677f\u53c2\u8003\u4e0e\u6d77\u62d4\u9884\u89c8 |\n| `ui.theme` | Contribute the global theme / \u8d21\u732e\u5168\u5c40\u4e3b\u9898 |\n\n## Safety / \u5b89\u5168\n\nCSS is sanitized by the host on load (256 KiB cap, no `@import`, no markup, no scripts, no external URLs \u2014 only `data:` URLs and manifest-declared assets are allowed). This sheet carries exactly one reference: a base64 `data:` SVG noise tile. The plugin makes no network requests, reads no files, and stores no data.\n\nCSS \u7531\u5bbf\u4e3b\u5728\u52a0\u8f7d\u65f6\u51c0\u5316\uff08\u4e0a\u9650 256 KiB\uff0c\u7981\u6b62 `@import`\u3001\u6807\u8bb0\u3001\u811a\u672c\u4e0e\u5916\u90e8 URL\uff0c\u4ec5\u5141\u8bb8 `data:` URL \u4e0e\u6e05\u5355\u58f0\u660e\u7684\u8d44\u6e90\uff09\u3002\u672c\u6837\u5f0f\u8868\u53ea\u542b\u4e00\u4e2a\u5f15\u7528\uff1a\u4e00\u4e2a base64 \u7684 `data:` SVG \u566a\u70b9\u8d34\u56fe\u3002\u63d2\u4ef6\u4e0d\u53d1\u8d77\u7f51\u7edc\u8bf7\u6c42\u3001\u4e0d\u8bfb\u53d6\u6587\u4ef6\u3001\u4e0d\u5b58\u50a8\u6570\u636e\u3002\n\n## Files / \u6587\u4ef6\n\n| File | Purpose / \u4f5c\u7528 |\n|---|---|\n| `manifest.json` | Identity, permissions, the `contributes.themes` entry / \u6807\u8bc6\u3001\u6743\u9650\u3001\u4e3b\u9898\u8d21\u732e\u58f0\u660e |\n| `main.js` | Registers the one \"open panel\" command / \u6ce8\u518c\u552f\u4e00\u7684\u6253\u5f00\u9762\u677f\u547d\u4ee4 |\n| `themes/obsidian.css` | The theme itself / \u4e3b\u9898\u672c\u4f53 |\n| `renderer/index.html` | Info panel / \u8bf4\u660e\u9762\u677f |\n| `renderer/panel.js` | Panel copy + locale switching / \u9762\u677f\u6587\u6848\u4e0e\u8bed\u8a00\u5207\u6362 |\n| `renderer/appearance-boot.js` | Shared appearance adapter, pre-paint / \u5171\u4eab\u5916\u89c2\u9002\u914d\u5668\uff08\u9996\u5e27\uff09 |\n| `renderer/appearance.js` | Shared appearance adapter, live updates / \u5171\u4eab\u5916\u89c2\u9002\u914d\u5668\uff08\u5b9e\u65f6\u66f4\u65b0\uff09 |\n| `renderer/capsule-retint.js` | Retints the host window-control capsule / \u91cd\u67d3\u5bbf\u4e3b\u7a97\u53e3\u63a7\u5236\u80f6\u56ca |\n\n## Notes on the 3.0.0 revision / 3.0.0 \u6539\u7248\u8bf4\u660e\n\nThe 2.0.0 build was measured against a reference screenshot, and the finding was\nnot about lightness at all \u2014 it was **hue**. Blue-minus-red on the 2.0.0 canvas\nwas 7, i.e. grey; the reference sits at 21\u201324. Every surface now carries a real\nblue lead (measured 23 across the whole rendered frame).\n\nA band scan also **disproved the gradient theory**: the reference panels are\nessentially flat (drift \u22120.11\u2026\u22120.23 pts), so hierarchy is carried instead by\nreal 1px borders and by a confident selected fill. 2.0.0 used a 13% accent wash\nfor selection, which measured as nothing; the solid `#1B4F53` gradient now lifts\n+3.6 pts over a plain row, matching the reference's own +2.1.\n\nFluorescent mint was replaced by a lower-chroma teal and confined to selection,\nprimary actions and focus. Bloom shadows gave way to a 3\u20135% top light, grain was\ncut to 0.035, radius was pulled onto one 8/10/12 ladder, prose line-height was\nraised to 1.72, and the scrollbars \u2014 which the host builds out of\n`--ds-text-primary`, now near-white \u2014 were pinned back so they stop reading as\nbright bars.\n\n## Notes on the 2.0.0 revision / 2.0.0 \u6539\u7248\u8bf4\u660e\n\nThe 1.0.0 build was measured against a real screenshot and two of its ideas were wrong:\n\n1. **Semi-transparent white tiles cannot separate dark surfaces.** `--ds-tile` at 3.5% white over a near-black canvas produced a card that was optically identical to the page it sat on. The fix is opaque step values plus solid 1px borders.\n2. **`soft-light` grain is a no-op on near-black.** Its effect scales with `backdrop \u00d7 (1 \u2212 backdrop)`, which is ~0.04 at `#0a0e0c`. Grain is now a faint `overlay` film at 0.05 opacity, kept because it still breaks up large flat fills.\n\nRecessing the composer into a darker well also backfired \u2014 it simply disappeared. Fields are lighter than the canvas again.\n\n1.0.0 \u7248\u672c\u7ecf\u771f\u5b9e\u622a\u56fe\u6d4b\u91cf\u540e\uff0c\u53d1\u73b0\u4e24\u5904\u5224\u65ad\u5931\u8bef\uff1a\n\n1. **\u534a\u900f\u660e\u767d\u8272\u8272\u5757\u65e0\u6cd5\u5206\u9694\u6df1\u8272\u8868\u9762**\uff1a\u8fd1\u9ed1\u753b\u5e03\u4e0a\u53e0 3.5% \u767d\uff0c\u5361\u7247\u4e0e\u9875\u9762\u5728\u89c6\u89c9\u4e0a\u5b8c\u5168\u76f8\u540c\u3002\u6539\u7528\u4e0d\u900f\u660e\u5206\u6863\u8272\u503c + \u5b9e\u8272 1px \u8fb9\u6846\u3002\n2. **`soft-light` \u566a\u70b9\u5728\u8fd1\u9ed1\u80cc\u666f\u4e0a\u7b49\u4e8e\u6ca1\u6709**\uff1a\u5176\u5f3a\u5ea6\u4e0e `\u80cc\u666f \u00d7 (1 \u2212 \u80cc\u666f)` \u6210\u6b63\u6bd4\uff0c\u5728 `#0a0e0c` \u5904\u4ec5\u7ea6 0.04\u3002\u73b0\u6539\u4e3a 0.05 \u4e0d\u900f\u660e\u5ea6\u7684 `overlay` \u8584\u819c\uff0c\u4fdd\u7559\u5b83\u662f\u56e0\u4e3a\u4ecd\u80fd\u6253\u7834\u5927\u9762\u79ef\u7eaf\u8272\u3002\n\n\u6b64\u5916\u628a\u8f93\u5165\u6846\u505a\u6210\u6bd4\u753b\u5e03\u66f4\u6697\u7684\"\u51f9\u4e95\"\u4e5f\u9002\u5f97\u5176\u53cd\u2014\u2014\u5b83\u76f4\u63a5\u770b\u4e0d\u89c1\u4e86\uff0c\u73b0\u5df2\u6539\u56de\u6bd4\u753b\u5e03\u66f4\u4eae\u3002\n",
"safetyNotes": "Pure styling. The plugin contributes one global theme (CSS only) and a small info panel. No network, file, clipboard, shell, or agent access.",
"versions": [
{
"version": "3.0.0",
"publishedAt": "2026-09-20T01:32:20Z",
"changelog": "Release 3.0.0: retuned against a measured reference screenshot. The decisive finding was hue, not lightness \u2014 the 2.0.0 canvas had a blue-minus-red lead of 7 (grey), while the reference sits at 21-24; every surface is now blue-dominant (measured 23 across the frame). A band scan also disproved the gradient theory: the reference panels are essentially flat (drift -0.11..-0.23 pts), so hierarchy is carried by real 1px borders (#2A4054 / #1C2B3A, which rise 1.0-2.8 pts off their neighbours) and by a solid cyan-teal selection fill (#1B4F53, +3.6 pts over a plain row) instead of the 13% wash 2.0.0 used, which measured as nothing. Ladder: #091219 inset, #0F1B26 app, #12202C rails, #0E1A25 reading column, #182835 cards, #1B2C3B fields, #1E3040 raised, #223648 hover. Text: #F2F7FA titles, #C4D2DD body (11.4:1, down from 17.1:1), #8FA3B4 secondary, #6A7E8F hints. Accent lowered from #65D6BC to #5CD0B8 and reserved for selection, primary actions and focus. All bloom removed in favour of a 3-5% top light; grain cut to 0.035; radius pulled onto one 8/10/12 ladder; prose line-height raised to 1.72; scrollbars retuned. Release 2.0.0: blue-grey rebalance after a screenshot review. Release 1.0.0: first release.",
"minPiDesktop": ">=0.15.0",
"shasum": "e03fd14aa9b11c984a6d5876477a3898f5ab30123357891962405af5cb7fd32e",
"url": "packages/pi.obsidian-theme-3.0.0.piplug",
"sizeBytes": 61705,
"permissions": [
"ui.panel",
"ui.theme"
],
"fs": {}
}
]
},
{
"id": "pi.parchment",
"name": "Parchment Theme",
Expand Down
Binary file added packages/pi.obsidian-theme-3.0.0.piplug
Binary file not shown.
6 changes: 6 additions & 0 deletions plugins/pi.obsidian-theme/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
manifest.json text eol=lf
main.js text eol=lf
README.md text eol=lf
themes/*.css text eol=lf
renderer/*.html text eol=lf
renderer/*.js text eol=lf
Loading