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
68 changes: 68 additions & 0 deletions skills/codedrobe-theme/assets/examples/dual-miku-neon-wb/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Miku Future Beats + Neon Skyline / 初音未来 × 霓虹天际

A **dual-mode** WorkBuddy theme that automatically switches between two visual styles based on the app's light/dark mode setting.

| Mode | Theme | Vibe |
|------|-------|------|
| **Light** | Miku Future Beats | Soft pastel, aqua-teal, gentle character artwork |
| **Dark** | Neon Skyline | Deep navy, neon-cyan, futuristic cityscape with character |

## How it works

The CSS uses scoped selectors to bind each theme to a specific mode:

- **Light mode**: All Miku rules are scoped under `html.codedrobe-host-workbuddy:not(.dark)` — they only activate when the `.dark` class is **absent**
- **Dark mode**: All Neon Skyline rules are scoped under `html.codedrobe-host-workbuddy.dark` — they only activate when the `.dark` class is **present**

Toggle WorkBuddy's light/dark theme switch and the correct skin loads automatically — no restart or re-injection needed.

## Assets (4 images)

| Key | File | Mode | Usage |
|-----|------|------|-------|
| `miku-hero` | `assets/miku-hero.png` | Light | Home-page hero background (Miku character) |
| `miku-texture` | `assets/miku-texture.png` | Light | Sidebar/surface texture overlay |
| `hero` | `assets/hero.png` | Dark | Home-page hero background (neon city + character) |
| `miku-wink` | `assets/miku-wink.png` | Dark | Input-box polaroid photo frame (wink Miku) |

## Build and apply

```bash
# Pack into .codedrobe-theme package
node ./bin/codedrobe.mjs theme pack skills/codedrobe-theme/assets/examples/dual-miku-neon-wb/theme.json \
--output dual-miku-neon-wb-1.0.0.codedrobe-theme --force

# Apply to running WorkBuddy (with CDP debug port)
node ./bin/codedrobe.mjs apply --app workbuddy \
--theme dual-miku-neon-wb-1.0.0.codedrobe-theme \
--app-path "F:/WorkBuddy" --port 9336 --no-launch

# Verify with screenshot
node ./bin/codedrobe.mjs verify --app workbuddy \
--theme dual-miku-neon-wb-1.0.0.codedrobe-theme \
--app-path "F:/WorkBuddy" --port 9336 \
--screenshot dual-miku-neon-preview.png
```

## Persistence (auto-apply on launch)

For the theme to persist across WorkBuddy restarts, use a launcher that:

1. Starts WorkBuddy with `--remote-debugging-port=9336`
2. Runs `codedrobe apply --watch` in the background to auto-inject when CDP port becomes available

Example VBS launcher:

```vbscript
Set Shell = CreateObject("WScript.Shell")
Shell.Run "powershell.exe -NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -File watch-apply.ps1", 0, False
Shell.Run """F:\WorkBuddy\WorkBuddy.exe"" --remote-debugging-port=9336", 1, False
```

Where `watch-apply.ps1` polls port 9336 and runs `codedrobe apply --watch --no-launch` once the port is open.

## Credits

- **Miku Future Beats** (light mode): Original character theme adapted from CodeDrobe store, re-scoped for WorkBuddy light mode
- **Neon Skyline** (dark mode): Originally `neon-skyline-codex` for Codex, migrated and adapted for WorkBuddy dark mode by [anhao](https://github.com/s17765152890)
- **Dual-mode merge**: CSS scoping strategy combining both themes into a single auto-switching package
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"schemaVersion": 1, "id": "dual-miku-neon-wb", "displayName": "Miku × Neon Skyline / 初音未来 × 霓虹天际", "version": "1.0.0", "catalog": {"name": {"en": "Miku Future Beats + Neon Skyline", "zh": "初音未来 · 霓虹天际(双模式)"}, "description": {"en": "Dual-mode WorkBuddy theme: Miku Future Beats in light mode, Neon Skyline in dark mode. Auto-switches with the system/theme toggle. Features full hero artwork, character polaroid, neon accents, and deep-navy surfaces.", "zh": "双模式 WorkBuddy 主题:浅色模式下为初音未来(Miku Future Beats),深色模式下为霓虹天际(Neon Skyline)。跟随系统/主题开关自动切换。全幅主视觉、角色相框、霓虹光效与深海蓝表面。"}, "categories": ["character", "futuristic", "artistic", "dual-mode", "vocaloid"]}, "images": {"hero": "assets/hero.png", "miku-wink": "assets/miku-wink.png", "miku-hero": "assets/miku-hero.png", "miku-texture": "assets/miku-texture.png"}, "copy": {"brandTitle": "初音未来 × 霓虹天际", "brandSubtitle": "WorkBuddy · 双模式主题", "signature": "Miku ♫ Neon", "tagline": "浅色初音未来 · 深色霓虹天际 — 跟随主题自动切换", "ribbon": "♫"}, "targets": {"workbuddy": {"css": "workbuddy.css", "options": {"baseTheme": {"mode": "auto", "codeTheme": "workbuddy", "accent": "#61DDFF", "contrast": 84, "ink": "#F4F8FF", "surface": "#07142F", "opaqueWindows": true, "fonts": {"windowsCode": "Cascadia Code", "windowsUi": "Microsoft YaHei UI", "macCode": "SF Mono", "macUi": "PingFang SC"}, "semanticColors": {"diffAdded": "#153D4D", "diffRemoved": "#4A203F", "skill": "#A992FF"}}}, "verification": {"required": [{"name": "chat-surface", "any": [".chat-container", ".wb-cb-chat"]}], "contexts": [{"name": "home-light", "when": {"any": [".wb-home-page"]}, "required": [{"name": "home-hero", "any": [".wb-home-header"]}, {"name": "home-composer", "any": [".wb-home-composer"]}]}, {"name": "home-dark", "when": {"any": [".wb-home-page"]}, "required": [{"name": "home-hero", "any": [".wb-home-header"]}, {"name": "home-composer", "any": [".wb-home-composer"]}]}, {"name": "conversation", "when": {"any": [".chat-container:not(.chat-container--welcome)"]}, "required": [{"name": "conversation-composer-shell", "any": [".chat-container:not(.chat-container--welcome) section:has([role='textbox'][contenteditable='true'])"}]}]}}}}
Loading
Loading