@nonamelego/dsh-catppuccin 0.2.5-beta.2 → 0.2.5

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
@@ -42,7 +42,7 @@ Catppuccin 主题。
42
42
  - 🌫️ **玻璃拟态细节**:页面上下边缘渐变模糊、折叠侧边栏悬浮玻璃、
43
43
  纯色背景跟随主题底色——内容滚入视口边缘时柔化穿过,层次更立体
44
44
  - 🎨 玻璃配色取自当前主题的 token(color-mix 自动跟随四个 Catppuccin 色板)
45
- - 🔄 **检查插件更新**:设置页一键检测本插件(dsh-catppuccin)在 npm 上的最新版本,发现新版直接给出可复制的升级命令
45
+ - 🔄 **检查 Catppuccin 插件更新**:设置页一键检测本插件(dsh-catppuccin)在 npm 上的最新版本,发现新版直接给出可复制的升级命令
46
46
 
47
47
  ## 预览
48
48
 
@@ -132,9 +132,9 @@ pnpm --dir C:\Users\LeGo\.dsh\profiles\web add link:D:\Vibe-Coding\dsh-catppucci
132
132
  玻璃配色取自当前主题的设计 token,切换 Latte / Frappé / Macchiato / Mocha
133
133
  时玻璃颜色自动跟随;设置保存在浏览器本地(localStorage),重启自动恢复。
134
134
 
135
- ### 检查插件更新
135
+ ### 检查 Catppuccin 插件更新
136
136
 
137
- 在 **设置 → 常规** 的 **玻璃质感** 正下方找到 **检查插件更新** 行:
137
+ 在 **设置 → 常规** 的 **玻璃质感** 正下方找到 **检查 Catppuccin 插件更新** 行:
138
138
 
139
139
  - 点击 **检查更新**,插件宿主会查询 npm registry 上本插件(`dsh-catppuccin`)
140
140
  的最新版本,并与当前安装版本比较(含预发布版本的语义化版本比较)。
@@ -205,7 +205,7 @@ node scripts/generate-palettes.mjs
205
205
  A: 选择保存在浏览器本地(localStorage),下次打开同一浏览器会自动恢复;
206
206
  玻璃质感开关与各旋钮同样保存在本地。
207
207
  - Q: **_"怎么知道这个插件有没有新版本?"_**
208
- A: 设置 → 常规 → **检查插件更新** 一键检测本插件在 npm 上的最新版本,
208
+ A: 设置 → 常规 → **检查 Catppuccin 插件更新** 一键检测本插件在 npm 上的最新版本,
209
209
  发现新版会给出可复制的升级命令;也可以随时手动执行
210
210
  `dsh plugin --profile web update @nonamelego/dsh-catppuccin`
211
211
  (或重新 `add` 最新版)。
Binary file
Binary file
package/lib/client.js CHANGED
@@ -135,7 +135,7 @@ window.__ModuleLoader__.load({
135
135
  "glass.brightnessHintDark": "深色模式:0 压暗至纯黑,50 原样",
136
136
  "glass.brightnessHintLight": "浅色模式:50 原样,100 提亮至纯白",
137
137
  "glass.reset": "还原默认值",
138
- "update.title": "检查插件更新",
138
+ "update.title": "检查 Catppuccin 插件更新",
139
139
  "update.description": "检测本插件(dsh-catppuccin)在 npm 上的最新版本,判断当前安装是否需要升级。",
140
140
  "update.check": "检查更新",
141
141
  "update.checking": "检查中…",
@@ -173,7 +173,7 @@ window.__ModuleLoader__.load({
173
173
  "glass.brightnessHintDark": "Dark mode: 0 fades to pure black, 50 unchanged",
174
174
  "glass.brightnessHintLight": "Light mode: 50 unchanged, 100 brightens to pure white",
175
175
  "glass.reset": "Reset to defaults",
176
- "update.title": "Check for plugin updates",
176
+ "update.title": "Check for Catppuccin plugin updates",
177
177
  "update.description": "Checks npm for the latest dsh-catppuccin release and whether this install is current.",
178
178
  "update.check": "Check for updates",
179
179
  "update.checking": "Checking…",
package/lib/client.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","names":["useSyncExternalStore","css","useSyncExternalStore","useState"],"sources":["../src/client/CatppuccinRow.tsx","../src/client/locales.ts","../src/client/palettes.ts","../src/client/glass/glass-seams.ts","../src/client/glass/glass-layer.ts","../src/client/glass/glass-row.tsx","../src/client/UpdateRow.tsx","../src/update-check.ts","../src/client/index.ts"],"sourcesContent":["/**\n * Catppuccin settings row — one General-section preference row listing the\n * four flavour themes plus a \"follow system\" (off) choice. Selecting a\n * flavour calls the injected `select`, which switches the official\n * ThemeRuntime and persists the choice. The row subscribes to `theme/change`\n * so the highlighted flavour tracks the live preference.\n */\nimport { useSyncExternalStore } from 'react'\nimport type { PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots'\nimport type { FlavorChoice } from './index.ts'\n\n/** One flavour button shown by the row. */\nexport interface CatppuccinFlavorButton {\n /** Theme id registered into ThemeRuntime. */\n id: string\n /** Display label. */\n label: string\n /** Accent colour for the swatch. */\n accent: string\n}\n\n/** Injected business face of the row (assembled in apply). */\nexport interface CatppuccinRowInjected {\n /** The four flavours, in display order. */\n themes: readonly CatppuccinFlavorButton[]\n /** Current choice (`off` when a Catppuccin theme is not active). */\n current: () => FlavorChoice\n /** Subscribe to theme preference changes. Returns the disposer. */\n subscribe: (listener: () => void) => () => void\n /** Switch the theme and persist the choice (`off` reverts to system). */\n select: (choice: FlavorChoice) => void | Promise<void>\n}\n\n/** Full component props: runtime share + locale seat + injected face. */\nexport type CatppuccinRowProps = PropsRuntime<'settings.general.item'> & PropsLocale<'catppuccin'> & CatppuccinRowInjected\n\n/**\n * Render the Catppuccin row: title, one swatch button per flavour, and a\n * follow-system button. The active flavour is highlighted; clicking a flavour\n * applies it immediately (live, no restart) and persists the choice.\n * @param props - composed slot props.\n * @returns the row element tree.\n */\nexport function CatppuccinRow({ t, themes, current, subscribe, select }: CatppuccinRowProps): React.JSX.Element {\n const choice = useSyncExternalStore(subscribe, current)\n return (\n <div style={{ borderBottom: '1px solid var(--dsw-alias-border-l2)', display: 'flex', flexDirection: 'column', gap: '10px', padding: '16px 0' }}>\n <div style={{ color: 'var(--dsw-alias-label-primary)', fontSize: 14, lineHeight: '22px' }}>\n {t('row.title')}\n </div>\n <div style={{ color: 'var(--dsw-alias-label-tertiary)', fontSize: 12, lineHeight: '18px' }}>\n {t('row.description')}\n </div>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '8px' }}>\n {themes.map((flavor) => {\n const selected = choice === flavor.id\n return (\n <button\n key={flavor.id}\n type=\"button\"\n aria-pressed={selected}\n onClick={() => void select(flavor.id)}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n padding: '6px 12px',\n borderRadius: 8,\n border: `1px solid ${selected ? 'var(--dsw-alias-border-l3)' : 'var(--dsw-alias-border-l1)'}`,\n background: selected ? 'var(--dsw-alias-interactive-bg-active)' : 'transparent',\n color: 'var(--dsw-alias-label-primary)',\n cursor: 'pointer',\n font: 'inherit',\n }}\n >\n <span aria-hidden=\"true\" style={{ width: 12, height: 12, borderRadius: 3, background: flavor.accent, flex: 'none' }} />\n {flavor.label}\n </button>\n )\n })}\n <button\n key=\"off\"\n type=\"button\"\n aria-pressed={choice === 'off'}\n onClick={() => void select('off')}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n padding: '6px 12px',\n borderRadius: 8,\n border: `1px solid ${choice === 'off' ? 'var(--dsw-alias-border-l3)' : 'var(--dsw-alias-border-l1)'}`,\n background: choice === 'off' ? 'var(--dsw-alias-interactive-bg-active)' : 'transparent',\n color: 'var(--dsw-alias-label-primary)',\n cursor: 'pointer',\n font: 'inherit',\n }}\n >\n {t('row.off')}\n </button>\n </div>\n </div>\n )\n}\n","/**\n * Catppuccin settings-row copy. The zh dictionary is the key-set source of\n * truth; the en dictionary mirrors it (checked complete against the zh keys).\n */\n\n/** Simplified Chinese dictionary. */\nexport const zh = {\n 'row.title': 'Catppuccin 主题',\n 'row.description': 'Latte / Frappé / Macchiato / Mocha 四款配色,一键切换。',\n 'row.off': '跟随系统',\n 'flavor.latte': 'Latte',\n 'flavor.frappe': 'Frappé',\n 'flavor.macchiato': 'Macchiato',\n 'flavor.mocha': 'Mocha',\n 'glass.title': '玻璃质感',\n 'glass.description': '顶栏、侧边栏、输入框、统计行、轨迹视图的磨砂玻璃效果,一键开关。',\n 'glass.enable': '总开关',\n 'glass.on': '开启',\n 'glass.off': '关闭',\n 'glass.mode': '模式',\n 'glass.modeMica': '云母效果',\n 'glass.modeCompat': '兼容模式',\n 'glass.modeHint': '云母效果把界面改成悬浮磨砂卡片;兼容模式保持原版排版,只换玻璃材质',\n 'glass.blur': '玻璃模糊度',\n 'glass.frost': '磨砂度',\n 'glass.brightness': '背景亮度',\n 'glass.brightnessHintDark': '深色模式:0 压暗至纯黑,50 原样',\n 'glass.brightnessHintLight': '浅色模式:50 原样,100 提亮至纯白',\n 'glass.reset': '还原默认值',\n 'update.title': '检查插件更新',\n 'update.description': '检测本插件(dsh-catppuccin)在 npm 上的最新版本,判断当前安装是否需要升级。',\n 'update.check': '检查更新',\n 'update.checking': '检查中…',\n 'update.current': '当前版本',\n 'update.upToDate': '已是最新版本 🎉',\n 'update.available': '发现新版本:',\n 'update.commandHint': '在终端运行以下命令升级(把 web 换成你的 profile 名):',\n 'update.restartHint': '升级完成后重启 dsh web 生效。',\n 'update.copy': '复制命令',\n 'update.copied': '已复制 ✓',\n 'update.failed': '检查失败,请稍后重试。',\n 'update.retry': '重试',\n} as const\n\n/** English dictionary, checked complete against the zh key set. */\nexport const en: Record<keyof typeof zh, string> = {\n 'row.title': 'Catppuccin theme',\n 'row.description': 'Latte / Frappé / Macchiato / Mocha, one click away.',\n 'row.off': 'Follow system',\n 'flavor.latte': 'Latte',\n 'flavor.frappe': 'Frappé',\n 'flavor.macchiato': 'Macchiato',\n 'flavor.mocha': 'Mocha',\n 'glass.title': 'Glassmorphism',\n 'glass.description': 'Frosted glass for the top bar, sidebar, composer, stats line and trajectory view — one click on/off.',\n 'glass.enable': 'Master switch',\n 'glass.on': 'On',\n 'glass.off': 'Off',\n 'glass.mode': 'Mode',\n 'glass.modeMica': 'Mica',\n 'glass.modeCompat': 'Compatibility',\n 'glass.modeHint': 'Mica restyles the UI into floating frosted cards; Compatibility keeps the stock layout and only swaps the material to glass',\n 'glass.blur': 'Glass blur',\n 'glass.frost': 'Frost',\n 'glass.brightness': 'Backdrop brightness',\n 'glass.brightnessHintDark': 'Dark mode: 0 fades to pure black, 50 unchanged',\n 'glass.brightnessHintLight': 'Light mode: 50 unchanged, 100 brightens to pure white',\n 'glass.reset': 'Reset to defaults',\n 'update.title': 'Check for plugin updates',\n 'update.description': 'Checks npm for the latest dsh-catppuccin release and whether this install is current.',\n 'update.check': 'Check for updates',\n 'update.checking': 'Checking…',\n 'update.current': 'Current version',\n 'update.upToDate': 'Up to date 🎉',\n 'update.available': 'New version available:',\n 'update.commandHint': 'Run this in a terminal to upgrade (replace web with your profile name):',\n 'update.restartHint': 'Restart dsh web after the upgrade.',\n 'update.copy': 'Copy command',\n 'update.copied': 'Copied ✓',\n 'update.failed': 'Check failed — try again later.',\n 'update.retry': 'Retry',\n}\n\n/** Key union of the Catppuccin dictionaries. */\nexport type CatppuccinKey = keyof typeof zh\n","/**\n * AUTO-GENERATED by scripts/generate-palettes.mjs — do not edit by hand.\n * Catppuccin token tables for the DeepSeek Harness web GUI.\n * Source palette: https://github.com/catppuccin/catppuccin (palette.json v1.8.0).\n * Each flavour carries a flat dictionary of every --dsw-static-*,\n * --dsw-alias-* and --dsw-specific-* token the official theme stylesheet\n * declares. Alias/specific entries keep their var() references so the static\n * overrides below flow through automatically; literal (non-var) entries are\n * remapped to Catppuccin colours.\n */\nexport type CatppuccinFlavorId = 'latte' | 'frappe' | 'macchiato' | 'mocha'\nexport interface CatppuccinFlavorInfo {\n /** Theme id registered into ThemeRuntime. */\n themeId: string\n /** Base color scheme this flavour builds on. */\n colorScheme: 'light' | 'dark'\n /** Display label. */\n label: string\n /** Accent colour for the settings row swatch. */\n accent: string\n /** Token dictionary (--dsw-* names). */\n tokens: Record<string, string>\n}\n\nexport const CATPPUCCIN_LATTE: CatppuccinFlavorInfo = {\n themeId: 'catppuccin-latte',\n colorScheme: 'light',\n label: 'Latte',\n accent: '#1e66f5',\n tokens: {\n \"--dsw-static-amber-100\": \"color-mix(in srgb, #fe640b 20%, #eff1f5)\",\n \"--dsw-static-amber-400\": \"#df8e1d\",\n \"--dsw-static-amber-500\": \"#fe640b\",\n \"--dsw-static-amber-600\": \"#fe640b\",\n \"--dsw-static-amber-900\": \"color-mix(in srgb, #fe640b 32%, #eff1f5)\",\n \"--dsw-static-blue-100\": \"color-mix(in srgb, #1e66f5 22%, #eff1f5)\",\n \"--dsw-static-blue-300\": \"color-mix(in srgb, #1e66f5 48%, #eff1f5)\",\n \"--dsw-static-blue-400\": \"color-mix(in srgb, #1e66f5 65%, #eff1f5)\",\n \"--dsw-static-blue-450\": \"color-mix(in srgb, #1e66f5 82%, #eff1f5)\",\n \"--dsw-static-blue-500\": \"#1e66f5\",\n \"--dsw-static-blue-50\": \"color-mix(in srgb, #1e66f5 8%, #eff1f5)\",\n \"--dsw-static-blue-50p\": \"color-mix(in srgb, #1e66f5 12%, #eff1f5)\",\n \"--dsw-static-blue-600\": \"color-mix(in srgb, #1e66f5 82%, #eff1f5)\",\n \"--dsw-static-blue-75\": \"color-mix(in srgb, #1e66f5 16%, #eff1f5)\",\n \"--dsw-static-blue-800\": \"color-mix(in srgb, #1e66f5 50%, #eff1f5)\",\n \"--dsw-static-blue-900\": \"color-mix(in srgb, #1e66f5 38%, #eff1f5)\",\n \"--dsw-static-blue-950\": \"color-mix(in srgb, #1e66f5 26%, #eff1f5)\",\n \"--dsw-static-deepseek-100\": \"color-mix(in srgb, #1e66f5 22%, #eff1f5)\",\n \"--dsw-static-deepseek-200\": \"color-mix(in srgb, #1e66f5 34%, #eff1f5)\",\n \"--dsw-static-deepseek-300\": \"color-mix(in srgb, #1e66f5 48%, #eff1f5)\",\n \"--dsw-static-deepseek-400\": \"color-mix(in srgb, #1e66f5 65%, #eff1f5)\",\n \"--dsw-static-deepseek-450\": \"color-mix(in srgb, #1e66f5 82%, #eff1f5)\",\n \"--dsw-static-deepseek-500\": \"#1e66f5\",\n \"--dsw-static-deepseek-50\": \"color-mix(in srgb, #1e66f5 8%, #eff1f5)\",\n \"--dsw-static-deepseek-600\": \"color-mix(in srgb, #1e66f5 82%, #eff1f5)\",\n \"--dsw-static-deepseek-700-delete\": \"color-mix(in srgb, #1e66f5 66%, #eff1f5)\",\n \"--dsw-static-deepseek-800\": \"color-mix(in srgb, #1e66f5 50%, #eff1f5)\",\n \"--dsw-static-deepseek-900\": \"color-mix(in srgb, #1e66f5 38%, #eff1f5)\",\n \"--dsw-static-green-100\": \"color-mix(in srgb, #40a02b 18%, #eff1f5)\",\n \"--dsw-static-green-400\": \"color-mix(in srgb, #40a02b 80%, #eff1f5)\",\n \"--dsw-static-green-500\": \"#40a02b\",\n \"--dsw-static-green-900\": \"color-mix(in srgb, #40a02b 30%, #eff1f5)\",\n \"--dsw-static-neutral-00\": \"#eff1f5\",\n \"--dsw-static-neutral-1000\": \"#4c4f69\",\n \"--dsw-static-neutral-100\": \"#bcc0cc\",\n \"--dsw-static-neutral-150\": \"#acb0be\",\n \"--dsw-static-neutral-200\": \"#9ca0b0\",\n \"--dsw-static-neutral-250\": \"#9ca0b0\",\n \"--dsw-static-neutral-300\": \"#8c8fa1\",\n \"--dsw-static-neutral-400\": \"#7c7f93\",\n \"--dsw-static-neutral-500\": \"#6c6f85\",\n \"--dsw-static-neutral-50\": \"#e6e9ef\",\n \"--dsw-static-neutral-550\": \"#6c6f85\",\n \"--dsw-static-neutral-600\": \"#5c5f77\",\n \"--dsw-static-neutral-700\": \"#5c5f77\",\n \"--dsw-static-neutral-800\": \"#4c4f69\",\n \"--dsw-static-neutral-850\": \"#4c4f69\",\n \"--dsw-static-neutral-900\": \"#4c4f69\",\n \"--dsw-static-neutral-bluish-00\": \"#eff1f5\",\n \"--dsw-static-neutral-bluish-1000\": \"#4c4f69\",\n \"--dsw-static-neutral-bluish-100\": \"#bcc0cc\",\n \"--dsw-static-neutral-bluish-150\": \"#acb0be\",\n \"--dsw-static-neutral-bluish-200\": \"#9ca0b0\",\n \"--dsw-static-neutral-bluish-300\": \"#8c8fa1\",\n \"--dsw-static-neutral-bluish-400\": \"#7c7f93\",\n \"--dsw-static-neutral-bluish-500\": \"#6c6f85\",\n \"--dsw-static-neutral-bluish-50\": \"#e6e9ef\",\n \"--dsw-static-neutral-bluish-600\": \"#5c5f77\",\n \"--dsw-static-neutral-bluish-60\": \"#e6e9ef\",\n \"--dsw-static-neutral-bluish-700\": \"#5c5f77\",\n \"--dsw-static-neutral-bluish-750\": \"#4c4f69\",\n \"--dsw-static-neutral-bluish-75\": \"#ccd0da\",\n \"--dsw-static-neutral-bluish-800\": \"#4c4f69\",\n \"--dsw-static-neutral-bluish-850\": \"#4c4f69\",\n \"--dsw-static-neutral-bluish-875\": \"#4c4f69\",\n \"--dsw-static-neutral-bluish-900\": \"#4c4f69\",\n \"--dsw-static-neutral-bluish-950\": \"#4c4f69\",\n \"--dsw-static-red-100\": \"color-mix(in srgb, #d20f39 20%, #eff1f5)\",\n \"--dsw-static-red-400\": \"color-mix(in srgb, #d20f39 70%, #eff1f5)\",\n \"--dsw-static-red-500\": \"#d20f39\",\n \"--dsw-static-red-50\": \"color-mix(in srgb, #d20f39 10%, #eff1f5)\",\n \"--dsw-static-red-600\": \"#d20f39\",\n \"--dsw-static-red-900\": \"color-mix(in srgb, #d20f39 34%, #eff1f5)\",\n \"--dsw-alias-bg-base\": \"var(--dsw-static-neutral-bluish-00)\",\n \"--dsw-alias-bg-layer-1\": \"var(--dsw-static-neutral-bluish-00)\",\n \"--dsw-alias-bg-layer-2\": \"var(--dsw-static-neutral-bluish-00)\",\n \"--dsw-alias-bg-layer-3\": \"var(--dsw-static-neutral-bluish-00)\",\n \"--dsw-alias-bg-mask-1\": \"rgba(0, 0, 0, 0.24)\",\n \"--dsw-alias-bg-mask-2\": \"rgba(0, 0, 0, 0.12)\",\n \"--dsw-alias-bg-mask-3\": \"rgba(0, 0, 0, 0.48)\",\n \"--dsw-alias-bg-mask-photo\": \"rgba(0, 0, 0, 0.88)\",\n \"--dsw-alias-bg-mask-drop\": \"rgba(255, 255, 255, 0.7)\",\n \"--dsw-alias-bg-module-platform\": \"var(--dsw-static-neutral-bluish-60)\",\n \"--dsw-alias-bg-multi-select\": \"var(--dsw-static-neutral-bluish-60)\",\n \"--dsw-alias-bg-overlay\": \"var(--dsw-static-neutral-bluish-150)\",\n \"--dsw-alias-bg-skeleton\": \"rgba(0, 0, 0, 0.04)\",\n \"--dsw-alias-border-inverted2\": \"rgba(0, 0, 0, 0)\",\n \"--dsw-alias-border-inverted\": \"rgba(0, 0, 0, 0)\",\n \"--dsw-alias-border-l1\": \"rgba(0, 0, 0, 0.04)\",\n \"--dsw-alias-border-l2-darkmode-thin\": \"rgba(0, 0, 0, 0.1)\",\n \"--dsw-alias-border-l2\": \"rgba(0, 0, 0, 0.1)\",\n \"--dsw-alias-border-l3\": \"rgba(0, 0, 0, 0.12)\",\n \"--dsw-alias-border-l4\": \"rgba(0, 0, 0, 0.16)\",\n \"--dsw-alias-brand-primary-invert\": \"var(--dsw-static-neutral-bluish-1000)\",\n \"--dsw-alias-brand-primary-new-colorprimary-new-color\": \"#1e66f5\",\n \"--dsw-alias-brand-primary\": \"var(--dsw-static-neutral-bluish-1000)\",\n \"--dsw-alias-brand-text\": \"var(--dsw-static-neutral-bluish-1000)\",\n \"--dsw-alias-button-contrast-fill\": \"var(--dsw-static-neutral-bluish-700)\",\n \"--dsw-alias-button-elevated-fill\": \"var(--dsw-static-neutral-bluish-00)\",\n \"--dsw-alias-button-floating-fill\": \"var(--dsw-static-neutral-bluish-00)\",\n \"--dsw-alias-button-floating-hover\": \"var(--dsw-static-neutral-bluish-75)\",\n \"--dsw-alias-button-ghost-active-border\": \"var(--dsw-static-neutral-bluish-500)\",\n \"--dsw-alias-button-ghost-active-fill\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-alias-button-ghost-active-hover\": \"var(--dsw-static-neutral-bluish-150)\",\n \"--dsw-alias-button-info-fill\": \"var(--dsw-static-deepseek-500)\",\n \"--dsw-alias-button-info-hover\": \"var(--dsw-static-deepseek-400)\",\n \"--dsw-alias-button-primary-dimmed\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-alias-button-primary-fill\": \"var(--dsw-alias-brand-primary)\",\n \"--dsw-alias-button-primary-hover\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-button-tool-bar-fill-invisible\": \"rgba(31, 31, 31, 0.36)\",\n \"--dsw-alias-button-tool-bar-fill\": \"rgba(84, 85, 87, 0.5)\",\n \"--dsw-alias-button-tool-bar-hover\": \"rgba(84, 85, 87, 0.6)\",\n \"--dsw-alias-interactive-bg-active\": \"rgba(38, 49, 72, 0.1)\",\n \"--dsw-alias-interactive-bg-hover-accent\": \"rgba(38, 49, 72, 0.14)\",\n \"--dsw-alias-interactive-bg-hover-danger\": \"rgba(236, 19, 19, 0.05)\",\n \"--dsw-alias-interactive-bg-hover-solid\": \"var(--dsw-static-neutral-bluish-75)\",\n \"--dsw-alias-interactive-bg-hover\": \"rgba(38, 49, 72, 0.06)\",\n \"--dsw-alias-label-caption\": \"var(--dsw-static-neutral-bluish-400)\",\n \"--dsw-alias-label-dimmed\": \"var(--dsw-static-neutral-bluish-200)\",\n \"--dsw-alias-label-primary-bluish\": \"var(--dsw-static-blue-900)\",\n \"--dsw-alias-label-primary-dimmed\": \"var(--dsw-static-neutral-bluish-950)\",\n \"--dsw-alias-label-primary-foreground\": \"var(--dsw-static-neutral-bluish-00)\",\n \"--dsw-alias-label-primary-inverted\": \"var(--dsw-static-neutral-bluish-00)\",\n \"--dsw-alias-label-primary\": \"var(--dsw-static-neutral-bluish-1000)\",\n \"--dsw-alias-label-secondary\": \"var(--dsw-static-neutral-bluish-700)\",\n \"--dsw-alias-label-tertiary\": \"var(--dsw-static-neutral-bluish-600)\",\n \"--dsw-alias-markdown-citation\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-alias-markdown-code-block-banner\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-markdown-code-block\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-markdown-code-segment-selected\": \"var(--dsw-static-neutral-bluish-00)\",\n \"--dsw-alias-markdown-code-segment-unselected\": \"var(--dsw-static-neutral-bluish-75)\",\n \"--dsw-alias-markdown-inline-code\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-alias-markdown-placeholder\": \"var(--dsw-static-neutral-bluish-60)\",\n \"--dsw-alias-markdown-tag\": \"var(--dsw-static-neutral-bluish-75)\",\n \"--dsw-alias-scrollbar-bg-l1\": \"var(--dsw-static-neutral-200)\",\n \"--dsw-alias-scrollbar-bg-l2\": \"var(--dsw-static-neutral-200)\",\n \"--dsw-alias-scrollbar-hover-l1\": \"var(--dsw-static-neutral-300)\",\n \"--dsw-alias-scrollbar-hover-l2\": \"var(--dsw-static-neutral-300)\",\n \"--dsw-alias-state-business-primary\": \"var(--dsw-static-deepseek-500)\",\n \"--dsw-alias-state-business-tertiary\": \"var(--dsw-static-deepseek-100)\",\n \"--dsw-alias-state-error-primary\": \"var(--dsw-static-red-600)\",\n \"--dsw-alias-state-error-secondary\": \"var(--dsw-static-red-400)\",\n \"--dsw-alias-state-success-primary\": \"var(--dsw-static-green-500)\",\n \"--dsw-alias-state-success-secondary\": \"var(--dsw-static-green-400)\",\n \"--dsw-alias-state-success-tertiary\": \"var(--dsw-static-green-100)\",\n \"--dsw-alias-state-warn-label\": \"var(--dsw-static-amber-600)\",\n \"--dsw-alias-state-warn-primary\": \"var(--dsw-static-amber-500)\",\n \"--dsw-alias-state-warn-secondary\": \"var(--dsw-static-amber-400)\",\n \"--dsw-alias-state-warn-tertiary\": \"var(--dsw-static-amber-100)\",\n \"--dsw-alias-toast-bg\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-tooltip-bg\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-specific-bubble-highlight\": \"var(--dsw-static-deepseek-200)\",\n \"--dsw-specific-bubble\": \"var(--dsw-static-deepseek-50)\",\n \"--dsw-specific-input-major\": \"var(--dsw-static-neutral-bluish-00)\",\n \"--dsw-specific-login-input\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-specific-menu\": \"var(--dsw-alias-bg-layer-3)\",\n \"--dsw-specific-selector\": \"var(--dsw-static-neutral-bluish-60)\",\n \"--dsw-specific-sidebar-fill\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-specific-sidebar-nav-item-active-accent\": \"var(--dsw-static-deepseek-100)\",\n \"--dsw-specific-sidebar-nav-item-active\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-specific-sidebar-nav-item-hover\": \"var(--dsw-static-neutral-bluish-75)\",\n \"--dsw-specific-tip\": \"var(--dsw-static-neutral-bluish-60)\",\n },\n}\n\nexport const CATPPUCCIN_FRAPPE: CatppuccinFlavorInfo = {\n themeId: 'catppuccin-frappe',\n colorScheme: 'dark',\n label: 'Frappé',\n accent: '#8caaee',\n tokens: {\n \"--dsw-static-amber-100\": \"color-mix(in srgb, #ef9f76 20%, #303446)\",\n \"--dsw-static-amber-400\": \"#e5c890\",\n \"--dsw-static-amber-500\": \"#ef9f76\",\n \"--dsw-static-amber-600\": \"#ef9f76\",\n \"--dsw-static-amber-900\": \"color-mix(in srgb, #ef9f76 32%, #303446)\",\n \"--dsw-static-blue-100\": \"color-mix(in srgb, #8caaee 24%, #303446)\",\n \"--dsw-static-blue-300\": \"color-mix(in srgb, #8caaee 50%, #303446)\",\n \"--dsw-static-blue-400\": \"color-mix(in srgb, #8caaee 66%, #303446)\",\n \"--dsw-static-blue-450\": \"color-mix(in srgb, #8caaee 84%, #303446)\",\n \"--dsw-static-blue-500\": \"#8caaee\",\n \"--dsw-static-blue-50\": \"color-mix(in srgb, #8caaee 10%, #303446)\",\n \"--dsw-static-blue-50p\": \"color-mix(in srgb, #8caaee 14%, #303446)\",\n \"--dsw-static-blue-600\": \"color-mix(in srgb, #8caaee 84%, #303446)\",\n \"--dsw-static-blue-75\": \"color-mix(in srgb, #8caaee 18%, #303446)\",\n \"--dsw-static-blue-800\": \"color-mix(in srgb, #8caaee 52%, #303446)\",\n \"--dsw-static-blue-900\": \"color-mix(in srgb, #8caaee 40%, #303446)\",\n \"--dsw-static-blue-950\": \"color-mix(in srgb, #8caaee 28%, #303446)\",\n \"--dsw-static-deepseek-100\": \"color-mix(in srgb, #8caaee 24%, #303446)\",\n \"--dsw-static-deepseek-200\": \"color-mix(in srgb, #8caaee 36%, #303446)\",\n \"--dsw-static-deepseek-300\": \"color-mix(in srgb, #8caaee 50%, #303446)\",\n \"--dsw-static-deepseek-400\": \"color-mix(in srgb, #8caaee 66%, #303446)\",\n \"--dsw-static-deepseek-450\": \"color-mix(in srgb, #8caaee 84%, #303446)\",\n \"--dsw-static-deepseek-500\": \"#8caaee\",\n \"--dsw-static-deepseek-50\": \"color-mix(in srgb, #8caaee 10%, #303446)\",\n \"--dsw-static-deepseek-600\": \"color-mix(in srgb, #8caaee 84%, #303446)\",\n \"--dsw-static-deepseek-700-delete\": \"color-mix(in srgb, #8caaee 68%, #303446)\",\n \"--dsw-static-deepseek-800\": \"color-mix(in srgb, #8caaee 52%, #303446)\",\n \"--dsw-static-deepseek-900\": \"color-mix(in srgb, #8caaee 40%, #303446)\",\n \"--dsw-static-green-100\": \"color-mix(in srgb, #a6d189 18%, #303446)\",\n \"--dsw-static-green-400\": \"color-mix(in srgb, #a6d189 80%, #303446)\",\n \"--dsw-static-green-500\": \"#a6d189\",\n \"--dsw-static-green-900\": \"color-mix(in srgb, #a6d189 30%, #303446)\",\n \"--dsw-static-neutral-00\": \"#c6d0f5\",\n \"--dsw-static-neutral-1000\": \"#232634\",\n \"--dsw-static-neutral-100\": \"#a5adce\",\n \"--dsw-static-neutral-150\": \"#a5adce\",\n \"--dsw-static-neutral-200\": \"#949cbb\",\n \"--dsw-static-neutral-250\": \"#949cbb\",\n \"--dsw-static-neutral-300\": \"#838ba7\",\n \"--dsw-static-neutral-400\": \"#737994\",\n \"--dsw-static-neutral-500\": \"#626880\",\n \"--dsw-static-neutral-50\": \"#c6d0f5\",\n \"--dsw-static-neutral-550\": \"#51576d\",\n \"--dsw-static-neutral-600\": \"#51576d\",\n \"--dsw-static-neutral-700\": \"#414559\",\n \"--dsw-static-neutral-800\": \"#414559\",\n \"--dsw-static-neutral-850\": \"#303446\",\n \"--dsw-static-neutral-900\": \"#292c3c\",\n \"--dsw-static-neutral-bluish-00\": \"#c6d0f5\",\n \"--dsw-static-neutral-bluish-1000\": \"#232634\",\n \"--dsw-static-neutral-bluish-100\": \"#a5adce\",\n \"--dsw-static-neutral-bluish-150\": \"#a5adce\",\n \"--dsw-static-neutral-bluish-200\": \"#949cbb\",\n \"--dsw-static-neutral-bluish-300\": \"#838ba7\",\n \"--dsw-static-neutral-bluish-400\": \"#737994\",\n \"--dsw-static-neutral-bluish-500\": \"#626880\",\n \"--dsw-static-neutral-bluish-50\": \"#c6d0f5\",\n \"--dsw-static-neutral-bluish-600\": \"#51576d\",\n \"--dsw-static-neutral-bluish-60\": \"#b5bfe2\",\n \"--dsw-static-neutral-bluish-700\": \"#414559\",\n \"--dsw-static-neutral-bluish-750\": \"#414559\",\n \"--dsw-static-neutral-bluish-75\": \"#b5bfe2\",\n \"--dsw-static-neutral-bluish-800\": \"#414559\",\n \"--dsw-static-neutral-bluish-850\": \"#303446\",\n \"--dsw-static-neutral-bluish-875\": \"#292c3c\",\n \"--dsw-static-neutral-bluish-900\": \"#292c3c\",\n \"--dsw-static-neutral-bluish-950\": \"#232634\",\n \"--dsw-static-red-100\": \"color-mix(in srgb, #e78284 20%, #303446)\",\n \"--dsw-static-red-400\": \"color-mix(in srgb, #e78284 70%, #303446)\",\n \"--dsw-static-red-500\": \"#e78284\",\n \"--dsw-static-red-50\": \"color-mix(in srgb, #e78284 10%, #303446)\",\n \"--dsw-static-red-600\": \"#e78284\",\n \"--dsw-static-red-900\": \"color-mix(in srgb, #e78284 34%, #303446)\",\n \"--dsw-alias-bg-base\": \"var(--dsw-static-neutral-bluish-950)\",\n \"--dsw-alias-bg-layer-1\": \"var(--dsw-static-neutral-bluish-875)\",\n \"--dsw-alias-bg-layer-2\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-bg-layer-3\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-bg-mask-1\": \"rgba(0, 0, 0, 0.5)\",\n \"--dsw-alias-bg-mask-2\": \"rgba(0, 0, 0, 0.2)\",\n \"--dsw-alias-bg-mask-3\": \"rgba(0, 0, 0, 0.48)\",\n \"--dsw-alias-bg-mask-photo\": \"rgba(0, 0, 0, 0.88)\",\n \"--dsw-alias-bg-mask-drop\": \"rgba(39, 39, 48, 0.7)\",\n \"--dsw-alias-bg-module-platform\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-bg-multi-select\": \"var(--dsw-static-neutral-850)\",\n \"--dsw-alias-bg-overlay\": \"var(--dsw-static-neutral-bluish-700)\",\n \"--dsw-alias-bg-skeleton\": \"rgba(255, 255, 255, 0.08)\",\n \"--dsw-alias-border-inverted2\": \"rgba(255, 255, 255, 0.08)\",\n \"--dsw-alias-border-inverted\": \"rgba(255, 255, 255, 0.06)\",\n \"--dsw-alias-border-l1\": \"rgba(255, 255, 255, 0.06)\",\n \"--dsw-alias-border-l2-darkmode-thin\": \"rgba(255, 255, 255, 0.06)\",\n \"--dsw-alias-border-l2\": \"rgba(255, 255, 255, 0.12)\",\n \"--dsw-alias-border-l3\": \"rgba(255, 255, 255, 0.16)\",\n \"--dsw-alias-border-l4\": \"rgba(255, 255, 255, 0.2)\",\n \"--dsw-alias-brand-primary-invert\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-brand-primary-new-colorprimary-new-color\": \"#8caaee\",\n \"--dsw-alias-brand-primary\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-brand-text\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-button-contrast-fill\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-button-elevated-fill\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-button-floating-fill\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-button-floating-hover\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-button-ghost-active-border\": \"var(--dsw-static-neutral-bluish-600)\",\n \"--dsw-alias-button-ghost-active-fill\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-button-ghost-active-hover\": \"var(--dsw-static-neutral-bluish-700)\",\n \"--dsw-alias-button-info-fill\": \"var(--dsw-static-deepseek-400)\",\n \"--dsw-alias-button-info-hover\": \"var(--dsw-static-deepseek-500)\",\n \"--dsw-alias-button-primary-dimmed\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-button-primary-fill\": \"var(--dsw-alias-brand-primary)\",\n \"--dsw-alias-button-primary-hover\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-alias-button-tool-bar-fill-invisible\": \"rgba(31, 31, 31, 0.36)\",\n \"--dsw-alias-button-tool-bar-fill\": \"rgba(84, 85, 87, 0.5)\",\n \"--dsw-alias-button-tool-bar-hover\": \"rgba(84, 85, 87, 0.6)\",\n \"--dsw-alias-interactive-bg-active\": \"rgba(255, 255, 255, 0.14)\",\n \"--dsw-alias-interactive-bg-hover-accent\": \"rgba(255, 255, 255, 0.24)\",\n \"--dsw-alias-interactive-bg-hover-danger\": \"rgba(242, 90, 90, 0.15)\",\n \"--dsw-alias-interactive-bg-hover-solid\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-interactive-bg-hover\": \"rgba(255, 255, 255, 0.08)\",\n \"--dsw-alias-label-caption\": \"var(--dsw-static-neutral-bluish-600)\",\n \"--dsw-alias-label-dimmed\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-label-primary-bluish\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-label-primary-dimmed\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-alias-label-primary-foreground\": \"var(--dsw-static-neutral-bluish-1000)\",\n \"--dsw-alias-label-primary-inverted\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-label-primary\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-label-secondary\": \"var(--dsw-static-neutral-bluish-300)\",\n \"--dsw-alias-label-tertiary\": \"var(--dsw-static-neutral-bluish-400)\",\n \"--dsw-alias-markdown-citation\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-markdown-code-block-banner\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-markdown-code-block\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-alias-markdown-code-segment-selected\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-markdown-code-segment-unselected\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-alias-markdown-inline-code\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-markdown-placeholder\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-markdown-tag\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-scrollbar-bg-l1\": \"var(--dsw-static-neutral-700)\",\n \"--dsw-alias-scrollbar-bg-l2\": \"var(--dsw-static-neutral-600)\",\n \"--dsw-alias-scrollbar-hover-l1\": \"var(--dsw-static-neutral-600)\",\n \"--dsw-alias-scrollbar-hover-l2\": \"var(--dsw-static-neutral-550)\",\n \"--dsw-alias-state-business-primary\": \"var(--dsw-static-deepseek-400)\",\n \"--dsw-alias-state-business-tertiary\": \"var(--dsw-static-deepseek-800)\",\n \"--dsw-alias-state-error-primary\": \"var(--dsw-static-red-400)\",\n \"--dsw-alias-state-error-secondary\": \"var(--dsw-static-red-400)\",\n \"--dsw-alias-state-success-primary\": \"var(--dsw-static-green-500)\",\n \"--dsw-alias-state-success-secondary\": \"var(--dsw-static-green-400)\",\n \"--dsw-alias-state-success-tertiary\": \"var(--dsw-static-green-900)\",\n \"--dsw-alias-state-warn-label\": \"var(--dsw-static-amber-600)\",\n \"--dsw-alias-state-warn-primary\": \"var(--dsw-static-amber-500)\",\n \"--dsw-alias-state-warn-secondary\": \"var(--dsw-static-amber-400)\",\n \"--dsw-alias-state-warn-tertiary\": \"var(--dsw-static-amber-900)\",\n \"--dsw-alias-toast-bg\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-tooltip-bg\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-specific-bubble-highlight\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-specific-bubble\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-specific-input-major\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-specific-login-input\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-specific-menu\": \"var(--dsw-alias-bg-layer-3)\",\n \"--dsw-specific-selector\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-specific-sidebar-fill\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-specific-sidebar-nav-item-active-accent\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-specific-sidebar-nav-item-active\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-specific-sidebar-nav-item-hover\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-specific-tip\": \"var(--dsw-static-neutral-bluish-800)\",\n },\n}\n\nexport const CATPPUCCIN_MACCHIATO: CatppuccinFlavorInfo = {\n themeId: 'catppuccin-macchiato',\n colorScheme: 'dark',\n label: 'Macchiato',\n accent: '#8aadf4',\n tokens: {\n \"--dsw-static-amber-100\": \"color-mix(in srgb, #f5a97f 20%, #24273a)\",\n \"--dsw-static-amber-400\": \"#eed49f\",\n \"--dsw-static-amber-500\": \"#f5a97f\",\n \"--dsw-static-amber-600\": \"#f5a97f\",\n \"--dsw-static-amber-900\": \"color-mix(in srgb, #f5a97f 32%, #24273a)\",\n \"--dsw-static-blue-100\": \"color-mix(in srgb, #8aadf4 24%, #24273a)\",\n \"--dsw-static-blue-300\": \"color-mix(in srgb, #8aadf4 50%, #24273a)\",\n \"--dsw-static-blue-400\": \"color-mix(in srgb, #8aadf4 66%, #24273a)\",\n \"--dsw-static-blue-450\": \"color-mix(in srgb, #8aadf4 84%, #24273a)\",\n \"--dsw-static-blue-500\": \"#8aadf4\",\n \"--dsw-static-blue-50\": \"color-mix(in srgb, #8aadf4 10%, #24273a)\",\n \"--dsw-static-blue-50p\": \"color-mix(in srgb, #8aadf4 14%, #24273a)\",\n \"--dsw-static-blue-600\": \"color-mix(in srgb, #8aadf4 84%, #24273a)\",\n \"--dsw-static-blue-75\": \"color-mix(in srgb, #8aadf4 18%, #24273a)\",\n \"--dsw-static-blue-800\": \"color-mix(in srgb, #8aadf4 52%, #24273a)\",\n \"--dsw-static-blue-900\": \"color-mix(in srgb, #8aadf4 40%, #24273a)\",\n \"--dsw-static-blue-950\": \"color-mix(in srgb, #8aadf4 28%, #24273a)\",\n \"--dsw-static-deepseek-100\": \"color-mix(in srgb, #8aadf4 24%, #24273a)\",\n \"--dsw-static-deepseek-200\": \"color-mix(in srgb, #8aadf4 36%, #24273a)\",\n \"--dsw-static-deepseek-300\": \"color-mix(in srgb, #8aadf4 50%, #24273a)\",\n \"--dsw-static-deepseek-400\": \"color-mix(in srgb, #8aadf4 66%, #24273a)\",\n \"--dsw-static-deepseek-450\": \"color-mix(in srgb, #8aadf4 84%, #24273a)\",\n \"--dsw-static-deepseek-500\": \"#8aadf4\",\n \"--dsw-static-deepseek-50\": \"color-mix(in srgb, #8aadf4 10%, #24273a)\",\n \"--dsw-static-deepseek-600\": \"color-mix(in srgb, #8aadf4 84%, #24273a)\",\n \"--dsw-static-deepseek-700-delete\": \"color-mix(in srgb, #8aadf4 68%, #24273a)\",\n \"--dsw-static-deepseek-800\": \"color-mix(in srgb, #8aadf4 52%, #24273a)\",\n \"--dsw-static-deepseek-900\": \"color-mix(in srgb, #8aadf4 40%, #24273a)\",\n \"--dsw-static-green-100\": \"color-mix(in srgb, #a6da95 18%, #24273a)\",\n \"--dsw-static-green-400\": \"color-mix(in srgb, #a6da95 80%, #24273a)\",\n \"--dsw-static-green-500\": \"#a6da95\",\n \"--dsw-static-green-900\": \"color-mix(in srgb, #a6da95 30%, #24273a)\",\n \"--dsw-static-neutral-00\": \"#cad3f5\",\n \"--dsw-static-neutral-1000\": \"#181926\",\n \"--dsw-static-neutral-100\": \"#a5adcb\",\n \"--dsw-static-neutral-150\": \"#a5adcb\",\n \"--dsw-static-neutral-200\": \"#939ab7\",\n \"--dsw-static-neutral-250\": \"#939ab7\",\n \"--dsw-static-neutral-300\": \"#8087a2\",\n \"--dsw-static-neutral-400\": \"#6e738d\",\n \"--dsw-static-neutral-500\": \"#5b6078\",\n \"--dsw-static-neutral-50\": \"#cad3f5\",\n \"--dsw-static-neutral-550\": \"#494d64\",\n \"--dsw-static-neutral-600\": \"#494d64\",\n \"--dsw-static-neutral-700\": \"#363a4f\",\n \"--dsw-static-neutral-800\": \"#363a4f\",\n \"--dsw-static-neutral-850\": \"#24273a\",\n \"--dsw-static-neutral-900\": \"#1e2030\",\n \"--dsw-static-neutral-bluish-00\": \"#cad3f5\",\n \"--dsw-static-neutral-bluish-1000\": \"#181926\",\n \"--dsw-static-neutral-bluish-100\": \"#a5adcb\",\n \"--dsw-static-neutral-bluish-150\": \"#a5adcb\",\n \"--dsw-static-neutral-bluish-200\": \"#939ab7\",\n \"--dsw-static-neutral-bluish-300\": \"#8087a2\",\n \"--dsw-static-neutral-bluish-400\": \"#6e738d\",\n \"--dsw-static-neutral-bluish-500\": \"#5b6078\",\n \"--dsw-static-neutral-bluish-50\": \"#cad3f5\",\n \"--dsw-static-neutral-bluish-600\": \"#494d64\",\n \"--dsw-static-neutral-bluish-60\": \"#b8c0e0\",\n \"--dsw-static-neutral-bluish-700\": \"#363a4f\",\n \"--dsw-static-neutral-bluish-750\": \"#363a4f\",\n \"--dsw-static-neutral-bluish-75\": \"#b8c0e0\",\n \"--dsw-static-neutral-bluish-800\": \"#363a4f\",\n \"--dsw-static-neutral-bluish-850\": \"#24273a\",\n \"--dsw-static-neutral-bluish-875\": \"#1e2030\",\n \"--dsw-static-neutral-bluish-900\": \"#1e2030\",\n \"--dsw-static-neutral-bluish-950\": \"#181926\",\n \"--dsw-static-red-100\": \"color-mix(in srgb, #ed8796 20%, #24273a)\",\n \"--dsw-static-red-400\": \"color-mix(in srgb, #ed8796 70%, #24273a)\",\n \"--dsw-static-red-500\": \"#ed8796\",\n \"--dsw-static-red-50\": \"color-mix(in srgb, #ed8796 10%, #24273a)\",\n \"--dsw-static-red-600\": \"#ed8796\",\n \"--dsw-static-red-900\": \"color-mix(in srgb, #ed8796 34%, #24273a)\",\n \"--dsw-alias-bg-base\": \"var(--dsw-static-neutral-bluish-950)\",\n \"--dsw-alias-bg-layer-1\": \"var(--dsw-static-neutral-bluish-875)\",\n \"--dsw-alias-bg-layer-2\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-bg-layer-3\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-bg-mask-1\": \"rgba(0, 0, 0, 0.5)\",\n \"--dsw-alias-bg-mask-2\": \"rgba(0, 0, 0, 0.2)\",\n \"--dsw-alias-bg-mask-3\": \"rgba(0, 0, 0, 0.48)\",\n \"--dsw-alias-bg-mask-photo\": \"rgba(0, 0, 0, 0.88)\",\n \"--dsw-alias-bg-mask-drop\": \"rgba(39, 39, 48, 0.7)\",\n \"--dsw-alias-bg-module-platform\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-bg-multi-select\": \"var(--dsw-static-neutral-850)\",\n \"--dsw-alias-bg-overlay\": \"var(--dsw-static-neutral-bluish-700)\",\n \"--dsw-alias-bg-skeleton\": \"rgba(255, 255, 255, 0.08)\",\n \"--dsw-alias-border-inverted2\": \"rgba(255, 255, 255, 0.08)\",\n \"--dsw-alias-border-inverted\": \"rgba(255, 255, 255, 0.06)\",\n \"--dsw-alias-border-l1\": \"rgba(255, 255, 255, 0.06)\",\n \"--dsw-alias-border-l2-darkmode-thin\": \"rgba(255, 255, 255, 0.06)\",\n \"--dsw-alias-border-l2\": \"rgba(255, 255, 255, 0.12)\",\n \"--dsw-alias-border-l3\": \"rgba(255, 255, 255, 0.16)\",\n \"--dsw-alias-border-l4\": \"rgba(255, 255, 255, 0.2)\",\n \"--dsw-alias-brand-primary-invert\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-brand-primary-new-colorprimary-new-color\": \"#8aadf4\",\n \"--dsw-alias-brand-primary\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-brand-text\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-button-contrast-fill\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-button-elevated-fill\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-button-floating-fill\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-button-floating-hover\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-button-ghost-active-border\": \"var(--dsw-static-neutral-bluish-600)\",\n \"--dsw-alias-button-ghost-active-fill\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-button-ghost-active-hover\": \"var(--dsw-static-neutral-bluish-700)\",\n \"--dsw-alias-button-info-fill\": \"var(--dsw-static-deepseek-400)\",\n \"--dsw-alias-button-info-hover\": \"var(--dsw-static-deepseek-500)\",\n \"--dsw-alias-button-primary-dimmed\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-button-primary-fill\": \"var(--dsw-alias-brand-primary)\",\n \"--dsw-alias-button-primary-hover\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-alias-button-tool-bar-fill-invisible\": \"rgba(31, 31, 31, 0.36)\",\n \"--dsw-alias-button-tool-bar-fill\": \"rgba(84, 85, 87, 0.5)\",\n \"--dsw-alias-button-tool-bar-hover\": \"rgba(84, 85, 87, 0.6)\",\n \"--dsw-alias-interactive-bg-active\": \"rgba(255, 255, 255, 0.14)\",\n \"--dsw-alias-interactive-bg-hover-accent\": \"rgba(255, 255, 255, 0.24)\",\n \"--dsw-alias-interactive-bg-hover-danger\": \"rgba(242, 90, 90, 0.15)\",\n \"--dsw-alias-interactive-bg-hover-solid\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-interactive-bg-hover\": \"rgba(255, 255, 255, 0.08)\",\n \"--dsw-alias-label-caption\": \"var(--dsw-static-neutral-bluish-600)\",\n \"--dsw-alias-label-dimmed\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-label-primary-bluish\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-label-primary-dimmed\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-alias-label-primary-foreground\": \"var(--dsw-static-neutral-bluish-1000)\",\n \"--dsw-alias-label-primary-inverted\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-label-primary\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-label-secondary\": \"var(--dsw-static-neutral-bluish-300)\",\n \"--dsw-alias-label-tertiary\": \"var(--dsw-static-neutral-bluish-400)\",\n \"--dsw-alias-markdown-citation\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-markdown-code-block-banner\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-markdown-code-block\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-alias-markdown-code-segment-selected\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-markdown-code-segment-unselected\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-alias-markdown-inline-code\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-markdown-placeholder\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-markdown-tag\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-scrollbar-bg-l1\": \"var(--dsw-static-neutral-700)\",\n \"--dsw-alias-scrollbar-bg-l2\": \"var(--dsw-static-neutral-600)\",\n \"--dsw-alias-scrollbar-hover-l1\": \"var(--dsw-static-neutral-600)\",\n \"--dsw-alias-scrollbar-hover-l2\": \"var(--dsw-static-neutral-550)\",\n \"--dsw-alias-state-business-primary\": \"var(--dsw-static-deepseek-400)\",\n \"--dsw-alias-state-business-tertiary\": \"var(--dsw-static-deepseek-800)\",\n \"--dsw-alias-state-error-primary\": \"var(--dsw-static-red-400)\",\n \"--dsw-alias-state-error-secondary\": \"var(--dsw-static-red-400)\",\n \"--dsw-alias-state-success-primary\": \"var(--dsw-static-green-500)\",\n \"--dsw-alias-state-success-secondary\": \"var(--dsw-static-green-400)\",\n \"--dsw-alias-state-success-tertiary\": \"var(--dsw-static-green-900)\",\n \"--dsw-alias-state-warn-label\": \"var(--dsw-static-amber-600)\",\n \"--dsw-alias-state-warn-primary\": \"var(--dsw-static-amber-500)\",\n \"--dsw-alias-state-warn-secondary\": \"var(--dsw-static-amber-400)\",\n \"--dsw-alias-state-warn-tertiary\": \"var(--dsw-static-amber-900)\",\n \"--dsw-alias-toast-bg\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-tooltip-bg\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-specific-bubble-highlight\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-specific-bubble\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-specific-input-major\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-specific-login-input\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-specific-menu\": \"var(--dsw-alias-bg-layer-3)\",\n \"--dsw-specific-selector\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-specific-sidebar-fill\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-specific-sidebar-nav-item-active-accent\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-specific-sidebar-nav-item-active\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-specific-sidebar-nav-item-hover\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-specific-tip\": \"var(--dsw-static-neutral-bluish-800)\",\n },\n}\n\nexport const CATPPUCCIN_MOCHA: CatppuccinFlavorInfo = {\n themeId: 'catppuccin-mocha',\n colorScheme: 'dark',\n label: 'Mocha',\n accent: '#89b4fa',\n tokens: {\n \"--dsw-static-amber-100\": \"color-mix(in srgb, #fab387 20%, #1e1e2e)\",\n \"--dsw-static-amber-400\": \"#f9e2af\",\n \"--dsw-static-amber-500\": \"#fab387\",\n \"--dsw-static-amber-600\": \"#fab387\",\n \"--dsw-static-amber-900\": \"color-mix(in srgb, #fab387 32%, #1e1e2e)\",\n \"--dsw-static-blue-100\": \"color-mix(in srgb, #89b4fa 24%, #1e1e2e)\",\n \"--dsw-static-blue-300\": \"color-mix(in srgb, #89b4fa 50%, #1e1e2e)\",\n \"--dsw-static-blue-400\": \"color-mix(in srgb, #89b4fa 66%, #1e1e2e)\",\n \"--dsw-static-blue-450\": \"color-mix(in srgb, #89b4fa 84%, #1e1e2e)\",\n \"--dsw-static-blue-500\": \"#89b4fa\",\n \"--dsw-static-blue-50\": \"color-mix(in srgb, #89b4fa 10%, #1e1e2e)\",\n \"--dsw-static-blue-50p\": \"color-mix(in srgb, #89b4fa 14%, #1e1e2e)\",\n \"--dsw-static-blue-600\": \"color-mix(in srgb, #89b4fa 84%, #1e1e2e)\",\n \"--dsw-static-blue-75\": \"color-mix(in srgb, #89b4fa 18%, #1e1e2e)\",\n \"--dsw-static-blue-800\": \"color-mix(in srgb, #89b4fa 52%, #1e1e2e)\",\n \"--dsw-static-blue-900\": \"color-mix(in srgb, #89b4fa 40%, #1e1e2e)\",\n \"--dsw-static-blue-950\": \"color-mix(in srgb, #89b4fa 28%, #1e1e2e)\",\n \"--dsw-static-deepseek-100\": \"color-mix(in srgb, #89b4fa 24%, #1e1e2e)\",\n \"--dsw-static-deepseek-200\": \"color-mix(in srgb, #89b4fa 36%, #1e1e2e)\",\n \"--dsw-static-deepseek-300\": \"color-mix(in srgb, #89b4fa 50%, #1e1e2e)\",\n \"--dsw-static-deepseek-400\": \"color-mix(in srgb, #89b4fa 66%, #1e1e2e)\",\n \"--dsw-static-deepseek-450\": \"color-mix(in srgb, #89b4fa 84%, #1e1e2e)\",\n \"--dsw-static-deepseek-500\": \"#89b4fa\",\n \"--dsw-static-deepseek-50\": \"color-mix(in srgb, #89b4fa 10%, #1e1e2e)\",\n \"--dsw-static-deepseek-600\": \"color-mix(in srgb, #89b4fa 84%, #1e1e2e)\",\n \"--dsw-static-deepseek-700-delete\": \"color-mix(in srgb, #89b4fa 68%, #1e1e2e)\",\n \"--dsw-static-deepseek-800\": \"color-mix(in srgb, #89b4fa 52%, #1e1e2e)\",\n \"--dsw-static-deepseek-900\": \"color-mix(in srgb, #89b4fa 40%, #1e1e2e)\",\n \"--dsw-static-green-100\": \"color-mix(in srgb, #a6e3a1 18%, #1e1e2e)\",\n \"--dsw-static-green-400\": \"color-mix(in srgb, #a6e3a1 80%, #1e1e2e)\",\n \"--dsw-static-green-500\": \"#a6e3a1\",\n \"--dsw-static-green-900\": \"color-mix(in srgb, #a6e3a1 30%, #1e1e2e)\",\n \"--dsw-static-neutral-00\": \"#cdd6f4\",\n \"--dsw-static-neutral-1000\": \"#11111b\",\n \"--dsw-static-neutral-100\": \"#a6adc8\",\n \"--dsw-static-neutral-150\": \"#a6adc8\",\n \"--dsw-static-neutral-200\": \"#9399b2\",\n \"--dsw-static-neutral-250\": \"#9399b2\",\n \"--dsw-static-neutral-300\": \"#7f849c\",\n \"--dsw-static-neutral-400\": \"#6c7086\",\n \"--dsw-static-neutral-500\": \"#585b70\",\n \"--dsw-static-neutral-50\": \"#cdd6f4\",\n \"--dsw-static-neutral-550\": \"#45475a\",\n \"--dsw-static-neutral-600\": \"#45475a\",\n \"--dsw-static-neutral-700\": \"#313244\",\n \"--dsw-static-neutral-800\": \"#313244\",\n \"--dsw-static-neutral-850\": \"#1e1e2e\",\n \"--dsw-static-neutral-900\": \"#181825\",\n \"--dsw-static-neutral-bluish-00\": \"#cdd6f4\",\n \"--dsw-static-neutral-bluish-1000\": \"#11111b\",\n \"--dsw-static-neutral-bluish-100\": \"#a6adc8\",\n \"--dsw-static-neutral-bluish-150\": \"#a6adc8\",\n \"--dsw-static-neutral-bluish-200\": \"#9399b2\",\n \"--dsw-static-neutral-bluish-300\": \"#7f849c\",\n \"--dsw-static-neutral-bluish-400\": \"#6c7086\",\n \"--dsw-static-neutral-bluish-500\": \"#585b70\",\n \"--dsw-static-neutral-bluish-50\": \"#cdd6f4\",\n \"--dsw-static-neutral-bluish-600\": \"#45475a\",\n \"--dsw-static-neutral-bluish-60\": \"#bac2de\",\n \"--dsw-static-neutral-bluish-700\": \"#313244\",\n \"--dsw-static-neutral-bluish-750\": \"#313244\",\n \"--dsw-static-neutral-bluish-75\": \"#bac2de\",\n \"--dsw-static-neutral-bluish-800\": \"#313244\",\n \"--dsw-static-neutral-bluish-850\": \"#1e1e2e\",\n \"--dsw-static-neutral-bluish-875\": \"#181825\",\n \"--dsw-static-neutral-bluish-900\": \"#181825\",\n \"--dsw-static-neutral-bluish-950\": \"#11111b\",\n \"--dsw-static-red-100\": \"color-mix(in srgb, #f38ba8 20%, #1e1e2e)\",\n \"--dsw-static-red-400\": \"color-mix(in srgb, #f38ba8 70%, #1e1e2e)\",\n \"--dsw-static-red-500\": \"#f38ba8\",\n \"--dsw-static-red-50\": \"color-mix(in srgb, #f38ba8 10%, #1e1e2e)\",\n \"--dsw-static-red-600\": \"#f38ba8\",\n \"--dsw-static-red-900\": \"color-mix(in srgb, #f38ba8 34%, #1e1e2e)\",\n \"--dsw-alias-bg-base\": \"var(--dsw-static-neutral-bluish-950)\",\n \"--dsw-alias-bg-layer-1\": \"var(--dsw-static-neutral-bluish-875)\",\n \"--dsw-alias-bg-layer-2\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-bg-layer-3\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-bg-mask-1\": \"rgba(0, 0, 0, 0.5)\",\n \"--dsw-alias-bg-mask-2\": \"rgba(0, 0, 0, 0.2)\",\n \"--dsw-alias-bg-mask-3\": \"rgba(0, 0, 0, 0.48)\",\n \"--dsw-alias-bg-mask-photo\": \"rgba(0, 0, 0, 0.88)\",\n \"--dsw-alias-bg-mask-drop\": \"rgba(39, 39, 48, 0.7)\",\n \"--dsw-alias-bg-module-platform\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-bg-multi-select\": \"var(--dsw-static-neutral-850)\",\n \"--dsw-alias-bg-overlay\": \"var(--dsw-static-neutral-bluish-700)\",\n \"--dsw-alias-bg-skeleton\": \"rgba(255, 255, 255, 0.08)\",\n \"--dsw-alias-border-inverted2\": \"rgba(255, 255, 255, 0.08)\",\n \"--dsw-alias-border-inverted\": \"rgba(255, 255, 255, 0.06)\",\n \"--dsw-alias-border-l1\": \"rgba(255, 255, 255, 0.06)\",\n \"--dsw-alias-border-l2-darkmode-thin\": \"rgba(255, 255, 255, 0.06)\",\n \"--dsw-alias-border-l2\": \"rgba(255, 255, 255, 0.12)\",\n \"--dsw-alias-border-l3\": \"rgba(255, 255, 255, 0.16)\",\n \"--dsw-alias-border-l4\": \"rgba(255, 255, 255, 0.2)\",\n \"--dsw-alias-brand-primary-invert\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-brand-primary-new-colorprimary-new-color\": \"#89b4fa\",\n \"--dsw-alias-brand-primary\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-brand-text\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-button-contrast-fill\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-button-elevated-fill\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-button-floating-fill\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-button-floating-hover\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-button-ghost-active-border\": \"var(--dsw-static-neutral-bluish-600)\",\n \"--dsw-alias-button-ghost-active-fill\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-button-ghost-active-hover\": \"var(--dsw-static-neutral-bluish-700)\",\n \"--dsw-alias-button-info-fill\": \"var(--dsw-static-deepseek-400)\",\n \"--dsw-alias-button-info-hover\": \"var(--dsw-static-deepseek-500)\",\n \"--dsw-alias-button-primary-dimmed\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-button-primary-fill\": \"var(--dsw-alias-brand-primary)\",\n \"--dsw-alias-button-primary-hover\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-alias-button-tool-bar-fill-invisible\": \"rgba(31, 31, 31, 0.36)\",\n \"--dsw-alias-button-tool-bar-fill\": \"rgba(84, 85, 87, 0.5)\",\n \"--dsw-alias-button-tool-bar-hover\": \"rgba(84, 85, 87, 0.6)\",\n \"--dsw-alias-interactive-bg-active\": \"rgba(255, 255, 255, 0.14)\",\n \"--dsw-alias-interactive-bg-hover-accent\": \"rgba(255, 255, 255, 0.24)\",\n \"--dsw-alias-interactive-bg-hover-danger\": \"rgba(242, 90, 90, 0.15)\",\n \"--dsw-alias-interactive-bg-hover-solid\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-interactive-bg-hover\": \"rgba(255, 255, 255, 0.08)\",\n \"--dsw-alias-label-caption\": \"var(--dsw-static-neutral-bluish-600)\",\n \"--dsw-alias-label-dimmed\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-label-primary-bluish\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-label-primary-dimmed\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-alias-label-primary-foreground\": \"var(--dsw-static-neutral-bluish-1000)\",\n \"--dsw-alias-label-primary-inverted\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-label-primary\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-label-secondary\": \"var(--dsw-static-neutral-bluish-300)\",\n \"--dsw-alias-label-tertiary\": \"var(--dsw-static-neutral-bluish-400)\",\n \"--dsw-alias-markdown-citation\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-markdown-code-block-banner\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-markdown-code-block\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-alias-markdown-code-segment-selected\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-markdown-code-segment-unselected\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-alias-markdown-inline-code\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-markdown-placeholder\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-markdown-tag\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-scrollbar-bg-l1\": \"var(--dsw-static-neutral-700)\",\n \"--dsw-alias-scrollbar-bg-l2\": \"var(--dsw-static-neutral-600)\",\n \"--dsw-alias-scrollbar-hover-l1\": \"var(--dsw-static-neutral-600)\",\n \"--dsw-alias-scrollbar-hover-l2\": \"var(--dsw-static-neutral-550)\",\n \"--dsw-alias-state-business-primary\": \"var(--dsw-static-deepseek-400)\",\n \"--dsw-alias-state-business-tertiary\": \"var(--dsw-static-deepseek-800)\",\n \"--dsw-alias-state-error-primary\": \"var(--dsw-static-red-400)\",\n \"--dsw-alias-state-error-secondary\": \"var(--dsw-static-red-400)\",\n \"--dsw-alias-state-success-primary\": \"var(--dsw-static-green-500)\",\n \"--dsw-alias-state-success-secondary\": \"var(--dsw-static-green-400)\",\n \"--dsw-alias-state-success-tertiary\": \"var(--dsw-static-green-900)\",\n \"--dsw-alias-state-warn-label\": \"var(--dsw-static-amber-600)\",\n \"--dsw-alias-state-warn-primary\": \"var(--dsw-static-amber-500)\",\n \"--dsw-alias-state-warn-secondary\": \"var(--dsw-static-amber-400)\",\n \"--dsw-alias-state-warn-tertiary\": \"var(--dsw-static-amber-900)\",\n \"--dsw-alias-toast-bg\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-tooltip-bg\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-specific-bubble-highlight\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-specific-bubble\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-specific-input-major\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-specific-login-input\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-specific-menu\": \"var(--dsw-alias-bg-layer-3)\",\n \"--dsw-specific-selector\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-specific-sidebar-fill\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-specific-sidebar-nav-item-active-accent\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-specific-sidebar-nav-item-active\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-specific-sidebar-nav-item-hover\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-specific-tip\": \"var(--dsw-static-neutral-bluish-800)\",\n },\n}\n\nexport const CATPPUCCIN_FLAVORS: readonly CatppuccinFlavorInfo[] = [\n CATPPUCCIN_LATTE,\n CATPPUCCIN_FRAPPE,\n CATPPUCCIN_MACCHIATO,\n CATPPUCCIN_MOCHA,\n]\n","/**\n * Runtime seam stamper for the Catppuccin glass layer.\n *\n * The glass stylesheet keys off stable data-* hooks (`data-dsh-glass-frame`,\n * `data-dsh-glass-trajectory`, `data-dsh-glass-stats`, …) that are NOT part\n * of the stock DSH markup, so this module stamps them onto the matching\n * elements at runtime — the stylesheet works with zero base edits. Each\n * selector uses only stable attributes already present in the stock UI\n * (`data-composer-card`, `data-conversation-composer-overlay`, `data-slot`,\n * ARIA roles) or lightningcss-preserved class-name substrings.\n *\n * Stamps are idempotent and inert without the `data-dsh-glass` root attribute\n * (the whole stylesheet is gated on it), so they are simply left in place when\n * the layer flips off — \"off\" still renders the exact stock UI.\n */\n\ninterface Seam {\n /** Attribute to stamp (bare name; value is always ''). */\n readonly attribute: string\n /** CSS selector for the element(s) to stamp. */\n readonly selector: string\n /** Stamp only the first (topmost) match, not every descendant match. */\n readonly first?: boolean\n}\n\nconst SEAMS: readonly Seam[] = [\n // The layout frame: the sidebar column's direct parent.\n { attribute: 'data-dsh-glass-frame', selector: ':has(> [class*=\"sidebarCol\"])' },\n // The sidebar content root (topmost `root` under the column — settings\n // internals also carry a `root` class but sit deeper, so first match wins).\n { attribute: 'data-dsh-glass-sidebar-root', selector: '[class*=\"sidebarCol\"] [class*=\"root\"]', first: true },\n // New-session button (a raised-surface seam).\n { attribute: 'data-dsh-glass-surface', selector: 'button[class*=\"newSession\"]' },\n // Trajectory view (the composer-overlay view).\n { attribute: 'data-dsh-glass-trajectory', selector: '[data-conversation-composer-overlay]' },\n // Details panel (topmost `root` under the details column).\n { attribute: 'data-dsh-glass-details', selector: '[class*=\"detailsCol\"] [class*=\"root\"]', first: true },\n // Composer bar root: the composer card's direct parent.\n { attribute: 'data-dsh-glass-inputbar', selector: ':has(> [data-composer-card])' },\n // Composer attach \"+\" button.\n { attribute: 'data-dsh-glass-add', selector: '[data-composer-card] [class*=\"add\"]' },\n // Session stats line under the composer (composer.dock slot).\n { attribute: 'data-dsh-glass-stats', selector: '[data-slot=\"conversation.composer.dock\"] [class*=\"root\"]' },\n]\n\nfunction stamp(seam: Seam): void {\n if (seam.first) {\n const el = document.querySelector(seam.selector)\n if (el !== null && !el.hasAttribute(seam.attribute)) el.setAttribute(seam.attribute, '')\n return\n }\n for (const el of document.querySelectorAll(seam.selector)) {\n if (!el.hasAttribute(seam.attribute)) el.setAttribute(seam.attribute, '')\n }\n}\n\nfunction stampAll(): void {\n for (const seam of SEAMS) stamp(seam)\n}\n\n/**\n * Stamp the seams once, then keep them stamped as React remounts nodes.\n * @returns a disposer that disconnects the observer.\n */\nexport function startGlassSeamStamper(): () => void {\n stampAll()\n const observer = new MutationObserver(() => { stampAll() })\n observer.observe(document.documentElement, { childList: true, subtree: true })\n return () => { observer.disconnect() }\n}\n","/**\n * Catppuccin glass layer — one toggleable glassmorphism skin over the whole\n * Web surface, riding on top of the Catppuccin themes. Everything the layer\n * owns is an effect: the CSS hooks ride a `data-dsh-glass` attribute on\n * <html> (the stylesheet only applies under it), the seam stamps ride a\n * MutationObserver, and the page-edge fade bands are DOM elements — so\n * switching the flag off (or unloading the plugin) restores the stock UI\n * exactly: no residue, no reload.\n *\n * The page ground is a SOLID colour: the active theme's own `bg-base`\n * token (Latte / Frappé / Macchiato / Mocha), with the brightness knob\n * mixing white/black straight into it. The earlier animated ambient scene\n * (gradient wash + drifting blobs + hue rotation) was removed in favour of\n * this flat ground.\n *\n * The enable flag and every knob persist in localStorage: client-only visual\n * preferences (like the selected-session key), written and read by this\n * plugin alone, so the layer needs no host configuration.\n */\nimport type { Context } from '@deepseek-ai/cordis'\n// Type-only: pulls the theme plugin's Context merge (ctx.theme + theme/change).\nimport type {} from '@deepseek-ai/dsh-client-ui-theme/client'\nimport { startGlassSeamStamper } from './glass-seams.ts'\n\n/** html attribute selecting the glass layer: CSS hooks and page effects. */\nexport const GLASS_ATTRIBUTE = 'data-dsh-glass'\n\n/** html attribute selecting the mica (floating-card) layout rules. */\nexport const GLASS_FLOAT_ATTRIBUTE = 'data-dsh-glass-float'\n\n/** html attribute selecting the compatibility (stock-layout) rules. */\nexport const GLASS_COMPAT_ATTRIBUTE = 'data-dsh-glass-compat'\n\n/** localStorage key carrying the layer enable flag. */\nexport const GLASS_ENABLED_KEY = 'dsh.catppuccin.glass.enabled'\n\n/** Default state when nothing is stored yet: off (the stock UI stays stock). */\nexport const DEFAULT_ENABLED = false\n\n/** Tunable glass knobs. */\nexport interface GlassSettings {\n /** Rendering mode: mica (frosted floating cards) or the stock layout with a generic glass material. */\n mode: 'mica' | 'compat'\n /** Glass backdrop blur radius, px. */\n blur: number\n /** Glass fill opacity, 0-100 (50 = the shipped look; drives the frost multiplier). */\n frost: number\n /** Backdrop brightness, 0-100 (0 = pure black, 50 = transparent, 100 = pure white; half-range per scheme). */\n brightness: number\n}\n\n/** The full state the settings row mirrors (settings + enable flag + scheme). */\nexport interface GlassRowState extends GlassSettings {\n /** Layer enable flag. */\n enabled: boolean\n /** Resolved palette is dark (the brightness knob darkens). */\n dark: boolean\n}\n\n/**\n * Shipped knob defaults — aligned with the reference project\n * (DSH-Transparent-UI-Plugin / Aqua): mica mode, blur 2px, frost 20\n * (the 0-100 slider maps to a 0-1.4 alpha multiplier via frost/50, so 20\n * reads as a light frost) and neutral backdrop brightness.\n */\nconst SETTINGS_DEFAULTS: GlassSettings = {\n mode: 'mica',\n blur: 2,\n frost: 20,\n brightness: 50,\n}\n\n/** Numeric knob keys and their localStorage names. */\nconst NUMERIC_KEYS = {\n blur: 'dsh.catppuccin.glass.blur',\n frost: 'dsh.catppuccin.glass.frost',\n brightness: 'dsh.catppuccin.glass.brightness',\n} as const\ntype NumericKey = keyof typeof NUMERIC_KEYS\n\nconst MODE_KEY = 'dsh.catppuccin.glass.mode'\n\n/** Clamp a numeric knob into its sane range. */\nfunction clampSetting(key: NumericKey, value: number): number {\n const max = key === 'blur' ? 40 : 100\n return Number.isFinite(value) ? Math.min(max, Math.max(0, value)) : SETTINGS_DEFAULTS[key]\n}\n\n/** Read one numeric knob from localStorage (absent/parse failure means the default). */\nfunction readSetting(key: NumericKey): number {\n try {\n const raw = localStorage.getItem(NUMERIC_KEYS[key])\n return raw === null ? SETTINGS_DEFAULTS[key] : clampSetting(key, Number(raw))\n } catch {\n return SETTINGS_DEFAULTS[key]\n }\n}\n\n/** Persist one numeric knob (storage failures keep the in-memory state). */\nfunction writeSetting(key: NumericKey, value: number): void {\n try {\n localStorage.setItem(NUMERIC_KEYS[key], String(value))\n } catch {\n /* in-memory state still applies for this tab */\n }\n}\n\n/** Read the rendering mode ('mica' or 'compat'). */\nfunction readMode(): 'mica' | 'compat' {\n try {\n return localStorage.getItem(MODE_KEY) === 'compat' ? 'compat' : 'mica'\n } catch {\n return 'mica'\n }\n}\n\n/** Persist the rendering mode. */\nfunction writeMode(value: 'mica' | 'compat'): void {\n try {\n localStorage.setItem(MODE_KEY, value)\n } catch {\n /* in-memory state still applies */\n }\n}\n\n/** Read the persisted enable flag (absent storage means the default). */\nfunction readEnabled(): boolean {\n try {\n const raw = localStorage.getItem(GLASS_ENABLED_KEY)\n return raw === null ? DEFAULT_ENABLED : raw === 'true'\n } catch {\n return DEFAULT_ENABLED\n }\n}\n\n/** Persist the enable flag (storage failures keep the in-memory state). */\nfunction writeEnabled(value: boolean): void {\n try {\n localStorage.setItem(GLASS_ENABLED_KEY, String(value))\n } catch {\n /* in-memory state still applies for this tab */\n }\n}\n\n/** Resolved scheme from the theme service (falls back to the body attribute). */\nfunction resolveDark(ctx: Context): boolean {\n try {\n return ctx.theme.getTheme().active.colorScheme === 'dark'\n } catch {\n return document.body.hasAttribute('data-ds-dark-theme')\n }\n}\n\n/**\n * The page-edge fade bands injected while enabled (ported from\n * DSH-Transparent-UI-Plugin): two fixed-position, click-through strips\n * that blur the chat content melting into the viewport edges. Both are\n * removed together on disable. The page ground itself is pure CSS (the\n * body rule), so no backdrop element is needed.\n */\nconst FADE_MARKUP = [\n '<span data-dsh-glass-fade=\"top\" aria-hidden=\"true\"></span>',\n '<span data-dsh-glass-fade=\"bottom\" aria-hidden=\"true\"></span>',\n].join('')\n\n/**\n * Owns the glass layer lifecycle: reads the durable enable flag and knobs,\n * and applies / retracts every layer on change. Cross-tab flips arrive through\n * the storage event; the seam observer and every subscription are released\n * when the plugin fiber is disposed.\n */\nexport class GlassLayer {\n private enabled = false\n private settings: GlassSettings = { ...SETTINGS_DEFAULTS }\n /** Cached snapshot for the settings row (stable reference between changes). */\n private snapshot: GlassRowState\n private readonly listeners = new Set<() => void>()\n private dark = false\n private seamDisposer: (() => void) | undefined\n private readonly ctx: Context\n\n /**\n * @param ctx - owning client context (listeners ride this fiber).\n */\n constructor(ctx: Context) {\n this.ctx = ctx\n this.enabled = readEnabled()\n this.reloadSettings()\n this.dark = resolveDark(ctx)\n this.snapshot = this.buildSnapshot()\n\n ctx.effect(() => {\n const onStorage = (event: StorageEvent): void => {\n if (event.key === null) { this.reloadSettings(); this.enabled = readEnabled(); this.sync() }\n else if (event.key === GLASS_ENABLED_KEY) {\n this.enabled = readEnabled()\n this.sync()\n } else if (event.key === MODE_KEY || event.key in NUMERIC_KEYS) {\n this.reloadSettings()\n if (this.enabled) this.applySettings()\n this.publish()\n }\n }\n window.addEventListener('storage', onStorage)\n // Follow the Appearance switch: the brightness knob's half-range and\n // the mix direction flip with the resolved scheme. Runs even while\n // disabled so the settings row stays correct.\n const themeListener = ctx.on('theme/change', () => {\n this.dark = resolveDark(ctx)\n if (this.enabled) this.applySettings()\n this.publish()\n })\n return () => {\n window.removeEventListener('storage', onStorage)\n themeListener()\n this.unmount()\n }\n }, 'catppuccin: glass layer lifecycle')\n\n // Apply the restored state: mount the layer when the persisted flag is on\n // (the settings row reflects the same snapshot, so the two stay in sync).\n this.sync()\n }\n\n /** Current state snapshot (stable reference until the next change). */\n getSnapshot(): GlassRowState {\n return this.snapshot\n }\n\n /** Subscribe to snapshot changes. Returns the disposer. */\n subscribe(listener: () => void): () => void {\n this.listeners.add(listener)\n return () => { this.listeners.delete(listener) }\n }\n\n /** Flip the layer: persist, then apply or retract every owned effect. */\n setEnabled(value: boolean): void {\n if (value === this.enabled) return\n this.enabled = value\n writeEnabled(value)\n this.sync()\n }\n\n /** Set the rendering mode ('mica' or 'compat'). */\n setMode(value: 'mica' | 'compat'): void {\n if (value === this.settings.mode) return\n this.settings.mode = value\n writeMode(value)\n if (this.enabled) this.applySettings()\n this.publish()\n }\n\n /** Set the glass blur radius (px). */\n setBlur(value: number): void {\n const next = clampSetting('blur', value)\n if (next === this.settings.blur) return\n this.settings.blur = next\n writeSetting('blur', next)\n if (this.enabled) this.applySettings()\n this.publish()\n }\n\n /** Set the glass frost amount (0-100). */\n setFrost(value: number): void {\n const next = clampSetting('frost', value)\n if (next === this.settings.frost) return\n this.settings.frost = next\n writeSetting('frost', next)\n if (this.enabled) this.applySettings()\n this.publish()\n }\n\n /** Set the backdrop brightness (0-100: 0 = pure black, 50 = transparent, 100 = pure white). */\n setBrightness(value: number): void {\n const next = clampSetting('brightness', value)\n if (next === this.settings.brightness) return\n this.settings.brightness = next\n writeSetting('brightness', next)\n if (this.enabled) this.applySettings()\n this.publish()\n }\n\n /** Restore every knob to the shipped defaults (persisted immediately). */\n resetDefaults(): void {\n this.settings = { ...SETTINGS_DEFAULTS }\n writeMode(this.settings.mode)\n writeSetting('blur', this.settings.blur)\n writeSetting('frost', this.settings.frost)\n writeSetting('brightness', this.settings.brightness)\n if (this.enabled) this.applySettings()\n this.publish()\n }\n\n /** Re-read every knob from localStorage into memory. */\n private reloadSettings(): void {\n this.settings = {\n mode: readMode(),\n blur: readSetting('blur'),\n frost: readSetting('frost'),\n brightness: readSetting('brightness'),\n }\n }\n\n private buildSnapshot(): GlassRowState {\n return { ...this.settings, enabled: this.enabled, dark: this.dark }\n }\n\n private publish(): void {\n this.snapshot = this.buildSnapshot()\n for (const listener of this.listeners) listener()\n }\n\n private sync(): void {\n if (this.enabled) this.mount()\n else this.unmount()\n this.publish()\n }\n\n /** Write the knob-driven CSS variables and mode attributes onto <html>. */\n private applySettings(): void {\n const style = document.documentElement.style\n style.setProperty('--dsh-glass-blur', `${this.settings.blur}px`)\n // Frost 0-100 → a 0-1.4 alpha multiplier (50 = 1x). Capped so max frost\n // stays translucent frosted glass instead of collapsing to a solid slab.\n style.setProperty('--dsh-glass-frost', String(Math.min(this.settings.frost / 50, 1.4)))\n // Backdrop brightness: dark mode darkens (0 = pure black, 50 = off),\n // light mode brightens (50 = off, 100 = pure white) — the knob's range\n // and the mix direction both follow the resolved scheme. The body\n // background rule mixes these fractions straight into the solid ground.\n const dark = this.dark\n style.setProperty('--dsh-glass-brightness-black', String(dark ? Math.max(0, (50 - this.settings.brightness) / 50) : 0))\n style.setProperty('--dsh-glass-brightness-white', String(dark ? 0 : Math.max(0, (this.settings.brightness - 50) / 50)))\n\n // Rendering mode: the float rules key off data-dsh-glass-float; the\n // compat (generic glass) rules key off data-dsh-glass-compat.\n const compat = this.settings.mode === 'compat'\n document.documentElement.toggleAttribute(GLASS_FLOAT_ATTRIBUTE, !compat)\n document.documentElement.toggleAttribute(GLASS_COMPAT_ATTRIBUTE, compat)\n }\n\n private mount(): void {\n document.documentElement.setAttribute(GLASS_ATTRIBUTE, '')\n this.applySettings()\n this.ensureFades()\n if (this.seamDisposer === undefined) this.seamDisposer = startGlassSeamStamper()\n }\n\n private unmount(): void {\n document.documentElement.removeAttribute(GLASS_ATTRIBUTE)\n document.documentElement.removeAttribute(GLASS_FLOAT_ATTRIBUTE)\n document.documentElement.removeAttribute(GLASS_COMPAT_ATTRIBUTE)\n for (const node of document.querySelectorAll('[data-dsh-glass-fade]')) node.remove()\n this.seamDisposer?.()\n this.seamDisposer = undefined\n }\n\n /** Insert the page-edge fade bands (or reuse the existing ones). */\n private ensureFades(): void {\n if (document.querySelector('[data-dsh-glass-fade]') !== null) return\n const holder = document.createElement('div')\n holder.innerHTML = FADE_MARKUP\n for (const node of Array.from(holder.children)) {\n if (node instanceof HTMLElement) document.body.append(node)\n }\n }\n}\n","/**\n * Catppuccin glass settings row — registered into the General settings\n * section (`settings.general.item`, right under the Catppuccin flavour row).\n * Holds the master on/off switch plus every glass knob: mode (mica /\n * compatibility), blur, frost and backdrop brightness. Every write goes\n * straight through to the glass layer, so the skin moves live.\n */\nimport { useSyncExternalStore } from 'react'\nimport type { PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots'\nimport type { GlassRowState } from './glass-layer.ts'\nimport css from './GlassRow.module.css'\n\n/** Injected business face: the layer state seat plus every knob write. */\nexport interface GlassRowInjected {\n /** Current layer state snapshot. */\n getState: () => GlassRowState\n /** Subscribe to layer state changes. Returns the disposer. */\n subscribe: (listener: () => void) => () => void\n /** Switch the glass layer on or off. */\n setEnabled: (enabled: boolean) => void\n /** Set the rendering mode ('mica' floating cards or 'compat' stock layout). */\n setMode: (mode: 'mica' | 'compat') => void\n /** Set the glass blur radius, px. */\n setBlur: (value: number) => void\n /** Set the glass frost amount, 0-100. */\n setFrost: (value: number) => void\n /** Set the backdrop brightness, 0-100. */\n setBrightness: (value: number) => void\n /** Restore every knob to the shipped defaults. */\n resetDefaults: () => void\n}\n\n/** Full component props: runtime share + locale seat + injected face. */\nexport type GlassRowProps = PropsRuntime<'settings.general.item'> & PropsLocale<'catppuccin'> & GlassRowInjected\n\n/** One slider + number box, wired to a single value. */\nfunction Knob(props: {\n label: string\n value: number\n min: number\n max: number\n step: number\n unit: string\n onChange: (value: number) => void\n}): React.JSX.Element {\n const { label, value, min, max, step, unit, onChange } = props\n const clamp = (n: number): number => Math.min(max, Math.max(min, Number.isFinite(n) ? n : min))\n return (\n <label className={css.knob}>\n <span className={css.knobLabel}>{label}</span>\n <input\n type=\"range\"\n className={css.slider}\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={(e) => { onChange(clamp(Number(e.target.value))) }}\n />\n <span className={css.numberWrap}>\n <input\n type=\"number\"\n className={css.number}\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={(e) => { onChange(clamp(Number(e.target.value))) }}\n />\n <span className={css.unit}>{unit}</span>\n </span>\n </label>\n )\n}\n\n/** A two-option segmented picker. */\nfunction Segmented<T extends string>(props: {\n label: string\n value: T\n options: readonly { id: T; label: string }[]\n onSelect: (value: T) => void\n}): React.JSX.Element {\n const { label, value, options, onSelect } = props\n return (\n <div className={css.segmented} role=\"group\" aria-label={label}>\n {options.map((option) => (\n <button\n key={option.id}\n type=\"button\"\n className={option.id === value ? css.segActive : css.seg}\n aria-pressed={option.id === value}\n onClick={() => { onSelect(option.id) }}\n >\n {option.label}\n </button>\n ))}\n </div>\n )\n}\n\n/**\n * Render the glass row: title, the master switch, and — while enabled — the\n * mode picker and every knob.\n * @param props - composed slot props.\n * @returns the General section row.\n */\nexport function GlassRow({ t, getState, subscribe, setEnabled, setMode, setBlur, setFrost, setBrightness, resetDefaults }: GlassRowProps): React.JSX.Element {\n const state = useSyncExternalStore(subscribe, getState)\n const { enabled, mode, blur, frost, brightness, dark } = state\n\n // The brightness knob only ever offers the half that makes sense for the\n // resolved scheme: dark mode darkens (0-50), light mode brightens (50-100).\n const bgMin = dark ? 0 : 50\n const bgMax = dark ? 50 : 100\n const bgDisplay = Math.min(bgMax, Math.max(bgMin, brightness))\n\n return (\n <div className={css.group}>\n <div className={css.title}>{t('glass.title')}</div>\n <div className={css.description}>{t('glass.description')}</div>\n <div className={css.controls}>\n <div className={css.row}>\n <span className={css.rowLabel}>{t('glass.enable')}</span>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={enabled}\n aria-label={t('glass.enable')}\n className={enabled ? css.toggleOn : css.toggle}\n onClick={() => { setEnabled(!enabled) }}\n >\n <span className={css.check} aria-hidden=\"true\">{enabled ? '✓' : ''}</span>\n </button>\n </div>\n {enabled && (\n <>\n <div className={css.row}>\n <span className={css.rowLabel}>{t('glass.mode')}</span>\n <Segmented\n label={t('glass.mode')}\n value={mode}\n options={[\n { id: 'mica', label: t('glass.modeMica') },\n { id: 'compat', label: t('glass.modeCompat') },\n ]}\n onSelect={setMode}\n />\n </div>\n <div className={css.rowHint}>{t('glass.modeHint')}</div>\n <Knob label={t('glass.blur')} value={blur} min={0} max={40} step={0.5} unit=\"px\" onChange={setBlur} />\n <Knob label={t('glass.frost')} value={frost} min={0} max={100} step={1} unit=\"%\" onChange={setFrost} />\n <Knob label={t('glass.brightness')} value={bgDisplay} min={bgMin} max={bgMax} step={1} unit=\"%\" onChange={setBrightness} />\n <div className={css.knobHint}>\n {t(dark ? 'glass.brightnessHintDark' : 'glass.brightnessHintLight')}\n </div>\n <div className={css.row}>\n <button type=\"button\" className={css.resetButton} onClick={() => { resetDefaults() }}>\n {t('glass.reset')}\n </button>\n </div>\n </>\n )}\n </div>\n </div>\n )\n}\n","/**\n * Update-check settings row — one General-section preference row that asks\n * the Host's `/catppuccin/check-update` route for the latest published npm\n * version and reports whether this install is current. Detection is Host-side\n * (Node fetch, no CORS); the row renders the verdict and, when an update is\n * available, offers the copyable CLI upgrade command. Upgrading itself stays\n * a terminal action (`dsh plugin … add @latest`) — the row never touches the\n * profile workspace.\n */\nimport { useState } from 'react'\nimport type { PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots'\nimport type { UpdateCheckPayload } from '../update-check.ts'\n\n/** Injected business face of the row (assembled in apply). */\nexport interface UpdateRowInjected {\n /** Ask the Host for the update verdict (same-origin fetch of the route). */\n check: () => Promise<UpdateCheckPayload>\n}\n\n/** Full component props: runtime share + locale seat + injected face. */\nexport type UpdateRowProps = PropsRuntime<'settings.general.item'> & PropsLocale<'catppuccin'> & UpdateRowInjected\n\n/** One phase of the row's interaction. */\ntype Phase = 'idle' | 'checking' | 'done'\n\n/** Copy the upgrade command; falls back to no-op when the clipboard is unavailable. */\nasync function copyCommand(text: string): Promise<boolean> {\n try {\n await navigator.clipboard.writeText(text)\n return true\n } catch {\n return false\n }\n}\n\n/**\n * Render the update-check row: title, description, a check button, and the\n * verdict once checked.\n * @param props - composed slot props.\n * @returns the row element tree.\n */\nexport function UpdateRow({ t, check }: UpdateRowProps): React.JSX.Element {\n const [phase, setPhase] = useState<Phase>('idle')\n const [payload, setPayload] = useState<UpdateCheckPayload | null>(null)\n const [copied, setCopied] = useState(false)\n\n const runCheck = async (): Promise<void> => {\n setPhase('checking')\n setCopied(false)\n try {\n setPayload(await check())\n } catch {\n setPayload({ ok: false, error: 'network' })\n } finally {\n setPhase('done')\n }\n }\n\n const buttonStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n padding: '6px 12px',\n borderRadius: 8,\n border: '1px solid var(--dsw-alias-border-l1)',\n background: 'transparent',\n color: 'var(--dsw-alias-label-primary)',\n cursor: phase === 'checking' ? 'default' : 'pointer',\n font: 'inherit',\n opacity: phase === 'checking' ? 0.6 : 1,\n }\n\n return (\n <div style={{ borderBottom: '1px solid var(--dsw-alias-border-l2)', display: 'flex', flexDirection: 'column', gap: '10px', padding: '16px 0' }}>\n <div style={{ color: 'var(--dsw-alias-label-primary)', fontSize: 14, lineHeight: '22px' }}>\n {t('update.title')}\n </div>\n <div style={{ color: 'var(--dsw-alias-label-tertiary)', fontSize: 12, lineHeight: '18px' }}>\n {t('update.description')}\n </div>\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '8px', alignItems: 'center' }}>\n <button type=\"button\" disabled={phase === 'checking'} onClick={() => void runCheck()} style={buttonStyle}>\n {phase === 'checking' ? t('update.checking') : t('update.check')}\n </button>\n {payload?.ok === true && payload.current !== undefined && (\n <span style={{ color: 'var(--dsw-alias-label-secondary)', fontSize: 12, lineHeight: '18px' }}>\n {t('update.current')} {payload.current}\n </span>\n )}\n </div>\n\n {phase === 'done' && payload !== null && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {payload.ok === true ? (\n payload.outdated === true && payload.latest !== undefined ? (\n <>\n <div style={{ color: 'var(--dsw-alias-label-primary)', fontSize: 12, lineHeight: '18px' }}>\n {t('update.available')} <strong>{payload.latest}</strong>\n </div>\n {payload.updateCommand !== undefined && (\n <>\n <div style={{ color: 'var(--dsw-alias-label-tertiary)', fontSize: 12, lineHeight: '18px' }}>\n {t('update.commandHint')}\n </div>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '8px', alignItems: 'center' }}>\n <code style={{\n flex: '1 1 260px',\n padding: '6px 10px',\n borderRadius: 8,\n border: '1px solid var(--dsw-alias-border-l1)',\n background: 'var(--dsw-alias-bg-layer-1)',\n color: 'var(--dsw-alias-label-primary)',\n fontSize: 12,\n lineHeight: '18px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace',\n }}>\n {payload.updateCommand}\n </code>\n <button\n type=\"button\"\n onClick={() => { void copyCommand(payload.updateCommand ?? '').then(setCopied) }}\n style={{ ...buttonStyle, cursor: 'pointer' }}\n >\n {copied ? t('update.copied') : t('update.copy')}\n </button>\n </div>\n <div style={{ color: 'var(--dsw-alias-label-tertiary)', fontSize: 12, lineHeight: '18px' }}>\n {t('update.restartHint')}\n </div>\n </>\n )}\n </>\n ) : (\n <div style={{ color: 'var(--dsw-alias-label-primary)', fontSize: 12, lineHeight: '18px' }}>\n {t('update.upToDate')}\n </div>\n )\n ) : (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '8px', alignItems: 'center' }}>\n <span style={{ color: 'var(--dsw-alias-label-tertiary)', fontSize: 12, lineHeight: '18px' }}>\n {t('update.failed')}\n </span>\n <button type=\"button\" onClick={() => void runCheck()} style={{ ...buttonStyle, cursor: 'pointer' }}>\n {t('update.retry')}\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n )\n}\n","/**\n * Shared contract of the update-check feature — consumed by both halves:\n * the Host registers an exact webServer route answering this JSON payload,\n * and the Client settings row fetches that same-origin route and renders it.\n * This module is dependency-free so both bundles inline it.\n */\nimport { compareVersions, parseVersion } from './versions.ts'\n\n/** The plugin's own npm name (the registry lookup key). */\nexport const PACKAGE_NAME = '@nonamelego/dsh-catppuccin'\n\n/**\n * npm registry abbreviated packument endpoint (the `install-v1` document).\n * The `latest` endpoint alone is not enough: this project ships prereleases\n * under the `beta` dist-tag while `latest` stays on the last stable, so the\n * check reads `dist-tags` to serve both channels.\n */\nexport const REGISTRY_PACKUMENT_URL =\n `https://registry.npmjs.org/${PACKAGE_NAME.replace('/', '%2F')}`\n\n/** Host route the Client row fetches (exact match, same origin). */\nexport const UPDATE_ROUTE_PATH = '/catppuccin/check-update'\n\n/** Network budget for the Host's registry lookup. */\nexport const UPDATE_FETCH_TIMEOUT_MS = 8000\n\n/** Release channels the check knows about. */\nexport type UpdateChannel = 'latest' | 'beta'\n\n/** The `dist-tags` object of an npm packument. */\nexport interface DistTags {\n latest?: string\n beta?: string\n}\n\n/** The newest release a given install should chase, and on which channel. */\nexport interface NewestRelease {\n version: string\n channel: UpdateChannel\n}\n\n/**\n * The copyable CLI upgrade command for one channel (`dsh plugin` is a thin\n * pnpm forwarder; the profile name varies per deployment).\n */\nexport function updateCommandFor(channel: UpdateChannel): string {\n return `dsh plugin --profile web add ${PACKAGE_NAME}@${channel}`\n}\n\n/**\n * Pick the newest release worth reporting for the given install:\n * - a stable install only chases the `latest` tag (never downgrades onto a\n * beta), so a stable user on the last stable sees \"up to date\";\n * - a prerelease install (e.g. a `beta`-tagged version) also chases `beta`,\n * so beta users see newer betas — and a stable release that outranks their\n * prerelease promotes them via `@latest`.\n * @param current - the installed version.\n * @param tags - the registry's dist-tags.\n * @returns the newest candidate and its channel, or null when nothing applies.\n */\nexport function selectNewest(current: string, tags: DistTags): NewestRelease | null {\n const candidates: NewestRelease[] = []\n if (tags.latest !== undefined) candidates.push({ version: tags.latest, channel: 'latest' })\n const parsed = parseVersion(current)\n if (tags.beta !== undefined && parsed !== null && parsed.prerelease.length > 0) {\n candidates.push({ version: tags.beta, channel: 'beta' })\n }\n if (candidates.length === 0) return null\n let best = candidates[0]\n for (const candidate of candidates.slice(1)) {\n if (compareVersions(best.version, candidate.version) < 0) best = candidate\n }\n return best\n}\n\n/**\n * JSON payload of the update check. `ok: false` carries a human-readable\n * `error`; `ok: true` carries the comparison result. The Host owns the\n * semver comparison and the channel selection (single source of truth), so\n * the Client never parses versions itself.\n */\nexport interface UpdateCheckPayload {\n /** Whether the registry lookup succeeded. */\n ok: boolean\n /** Installed version (from this package's own manifest). */\n current?: string\n /** Newest release worth chasing (`latest`, plus `beta` for prerelease installs). */\n latest?: string\n /** `latest` is strictly newer than `current`. */\n outdated?: boolean\n /** The dist-tag the newest release came from. */\n channel?: UpdateChannel\n /** Copyable CLI upgrade command (present when outdated). */\n updateCommand?: string\n /** Failure detail (only when `ok` is false). */\n error?: string\n}\n","/**\n * Catppuccin themes for the DeepSeek Harness web GUI — browser half.\n *\n * Registers the four Catppuccin flavours (Latte light / Frappé, Macchiato,\n * Mocha dark) into the official ThemeRuntime, so they become selectable\n * themes whose --dsw-* token overrides fully remap the UI palette. The\n * official Appearance row persists only the built-in light/dark/system\n * preferences, so this plugin also owns a settings row (\"Catppuccin\") that\n * lists the four flavours; selecting one switches the theme and persists the\n * flavour in localStorage (the Host settings wire only serves an explicit\n * allowlist of namespaces — a plugin-owned namespace answers\n * `settings-not-exposed`, so a browser-local preference is the durable\n * store here). The choice is restored on boot.\n */\nimport type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client'\nimport type { ThemeRuntime, ThemeTokens } from '@deepseek-ai/dsh-client-ui-theme/client'\n// Type-only: pulls the locale plugin's Context merge (ctx.locale).\nimport type {} from '@deepseek-ai/dsh-client-locale/client'\n// Type-only: pulls the settings-surface SlotMap merge (settings.general.item).\nimport type {} from '@deepseek-ai/dsh-client-ui-settings/client'\nimport { CatppuccinRow, type CatppuccinRowInjected } from './CatppuccinRow.tsx'\nimport { en, zh, type CatppuccinKey } from './locales.ts'\nimport { CATPPUCCIN_FLAVORS, type CatppuccinFlavorInfo } from './palettes.ts'\nimport { GlassLayer } from './glass/glass-layer.ts'\nimport { GlassRow, type GlassRowInjected } from './glass/glass-row.tsx'\nimport { UpdateRow, type UpdateRowInjected } from './UpdateRow.tsx'\nimport type { UpdateCheckPayload } from '../update-check.ts'\nimport { UPDATE_ROUTE_PATH } from '../update-check.ts'\n// Side-effect import: the glass stylesheet (auto-injected as a plugin-owned\n// <style> tag; every rule is gated on the data-dsh-glass attribute).\nimport './glass/glass.module.css'\n\n/** Locale namespace owned by this plugin. */\nexport const NS = 'catppuccin'\n\ndeclare module '@deepseek-ai/dsh-client-ui-slots' {\n interface LocaleNamespaceMap {\n /** The Catppuccin settings row's copy. */\n catppuccin: CatppuccinKey\n }\n}\n\n/** localStorage key carrying the persisted flavour choice. */\nexport const FLAVOR_STORAGE_KEY = 'dsh.catppuccin.flavor'\n\n/** Accepted flavour values — the four registered theme ids plus `off`. These\n * MUST stay in sync with the registered themes (guarded by\n * tests/palettes.spec.ts) because the persisted value is the theme id. */\nexport const CATPPUCCIN_FLAVOR_VALUES = [\n ...CATPPUCCIN_FLAVORS.map((f) => f.themeId),\n 'off',\n] as const\n\n/** `off` means: fall back to the official theme (default). */\nexport type FlavorChoice = (typeof CATPPUCCIN_FLAVOR_VALUES)[number]\n\n/** The flavour whose themeId this is, or `off`. */\nexport function flavorFromThemeId(themeId: string): FlavorChoice {\n return CATPPUCCIN_FLAVORS.some((f) => f.themeId === themeId) ? themeId as FlavorChoice : 'off'\n}\n\n/** The flavour registered for a theme id, or undefined when not a Catppuccin theme. */\nexport function flavorInfo(themeId: string): CatppuccinFlavorInfo | undefined {\n return CATPPUCCIN_FLAVORS.find((f) => f.themeId === themeId)\n}\n\n/** Read the persisted flavour (absent / unknown values mean the default `off`). */\nexport function readFlavor(): FlavorChoice {\n try {\n const raw = localStorage.getItem(FLAVOR_STORAGE_KEY)\n return raw !== null && (CATPPUCCIN_FLAVOR_VALUES as readonly string[]).includes(raw)\n ? raw as FlavorChoice\n : 'off'\n } catch {\n return 'off'\n }\n}\n\n/** Persist the flavour choice (storage failures keep the in-memory state). */\nexport function writeFlavor(choice: FlavorChoice): void {\n try {\n localStorage.setItem(FLAVOR_STORAGE_KEY, choice)\n } catch {\n /* in-memory state still applies for this tab */\n }\n}\n\n/** Required services: slots + locale (settings rows) and theme (register + switch). */\nexport const inject = ['slots', 'locale', 'theme']\n\n/**\n * Register the Catppuccin dictionaries, the four flavour themes, and the\n * settings row.\n * @param ctx - client root context.\n */\nexport function apply(ctx: ClientContext): void {\n ctx.effect(() => ctx.locale.register(NS, { zh, en }), 'catppuccin: dictionaries')\n\n const theme = ctx.get('theme') as ThemeRuntime\n\n // Register the four flavour themes. Each carries the full --dsw-* token\n // dictionary for its flavour; the presenter applies them as body inline\n // variables when the theme is active.\n ctx.effect(() => {\n const disposers = CATPPUCCIN_FLAVORS.map((flavor) =>\n theme.register({\n id: flavor.themeId,\n colorScheme: flavor.colorScheme,\n tokens: flavor.tokens as ThemeTokens,\n }),\n )\n return () => {\n for (const dispose of disposers) dispose()\n }\n }, 'catppuccin: flavour themes')\n\n // Persisted flavour choice. The official ThemeRuntime only persists the\n // built-in preferences, and the Host settings wire refuses plugin-owned\n // namespaces (`settings-not-exposed`), so the choice lives in localStorage.\n // Restoring it is a two-step race at boot: the flavour themes are registered\n // by this plugin (so an immediate setTheme may run before registration), and\n // the official Appearance scope adoption (`adopt()`) re-applies the stored\n // light/dark/system preference once its scope loads, overriding us. So the\n // saved flavour is re-asserted on every theme change within a short boot\n // window; after that a theme change is a user action and must win.\n ctx.effect(() => {\n const saved = readFlavor()\n if (saved === 'off') return () => {}\n let settled = false\n const started = Date.now()\n const applySaved = (): void => {\n if (settled) return\n if (Date.now() - started > 5000) {\n settled = true\n return\n }\n try {\n if (theme.getTheme().preference !== saved) theme.setTheme(saved)\n } catch {\n // Theme not registered yet — the registry-update theme/change retries.\n }\n }\n applySaved()\n const disposer = ctx.on('theme/change', applySaved)\n const timer = window.setTimeout(() => { settled = true }, 5000)\n const onStorage = (event: StorageEvent): void => {\n if (event.key !== FLAVOR_STORAGE_KEY) return\n const next = readFlavor()\n if (next !== 'off') {\n try {\n theme.setTheme(next)\n } catch {\n /* unknown persisted value — keep the current theme */\n }\n }\n }\n window.addEventListener('storage', onStorage)\n return () => {\n disposer()\n window.clearTimeout(timer)\n window.removeEventListener('storage', onStorage)\n }\n }, 'catppuccin: boot restore')\n\n const injected = (): CatppuccinRowInjected => ({\n themes: CATPPUCCIN_FLAVORS.map((flavor) => ({\n id: flavor.themeId,\n label: flavor.label,\n accent: flavor.accent,\n })),\n current: () => {\n const pref = theme.getTheme().preference\n return flavorFromThemeId(pref)\n },\n subscribe: (listener) => ctx.on('theme/change', listener),\n select: (choice: FlavorChoice) => {\n if (choice === 'off') {\n // Revert to the official default (system-following).\n theme.setTheme('system')\n writeFlavor('off')\n return\n }\n const flavor = flavorInfo(choice)\n if (!flavor) return\n theme.setTheme(flavor.themeId)\n writeFlavor(flavor.themeId)\n },\n })\n\n ctx.slots.inject('settings.general.item', () => ctx.slots.register({\n name: 'settings.general.item',\n id: 'catppuccin',\n order: 20,\n locale: NS,\n inject: injected,\n }, CatppuccinRow))\n\n // The glass layer: a toggleable glassmorphism skin on top of the Catppuccin\n // themes. It owns its lifecycle (enable flag + knobs persist in\n // localStorage; every effect is released with this fiber).\n const glass = new GlassLayer(ctx)\n\n const glassInjected = (): GlassRowInjected => ({\n getState: () => glass.getSnapshot(),\n subscribe: (listener) => glass.subscribe(listener),\n setEnabled: (enabled) => { glass.setEnabled(enabled) },\n setMode: (mode) => { glass.setMode(mode) },\n setBlur: (blur) => { glass.setBlur(blur) },\n setFrost: (frost) => { glass.setFrost(frost) },\n setBrightness: (brightness) => { glass.setBrightness(brightness) },\n resetDefaults: () => { glass.resetDefaults() },\n })\n\n ctx.slots.inject('settings.general.item', () => ctx.slots.register({\n name: 'settings.general.item',\n id: 'catppuccin-glass',\n order: 21,\n locale: NS,\n inject: glassInjected,\n }, GlassRow))\n\n // Update check: the Host owns the npm lookup (Node fetch, no CORS); the row\n // only fetches the same-origin route and renders the verdict. Upgrade stays\n // a terminal action — the row just surfaces the CLI command.\n const updateInjected = (): UpdateRowInjected => ({\n check: async () => {\n try {\n const response = await fetch(UPDATE_ROUTE_PATH, { headers: { accept: 'application/json' } })\n return await response.json() as UpdateCheckPayload\n } catch {\n return { ok: false, error: 'network' }\n }\n },\n })\n\n ctx.slots.inject('settings.general.item', () => ctx.slots.register({\n name: 'settings.general.item',\n id: 'catppuccin-update',\n order: 22,\n locale: NS,\n inject: updateInjected,\n }, UpdateRow))\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"client.js","names":["useSyncExternalStore","css","useSyncExternalStore","useState"],"sources":["../src/client/CatppuccinRow.tsx","../src/client/locales.ts","../src/client/palettes.ts","../src/client/glass/glass-seams.ts","../src/client/glass/glass-layer.ts","../src/client/glass/glass-row.tsx","../src/client/UpdateRow.tsx","../src/update-check.ts","../src/client/index.ts"],"sourcesContent":["/**\n * Catppuccin settings row — one General-section preference row listing the\n * four flavour themes plus a \"follow system\" (off) choice. Selecting a\n * flavour calls the injected `select`, which switches the official\n * ThemeRuntime and persists the choice. The row subscribes to `theme/change`\n * so the highlighted flavour tracks the live preference.\n */\nimport { useSyncExternalStore } from 'react'\nimport type { PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots'\nimport type { FlavorChoice } from './index.ts'\n\n/** One flavour button shown by the row. */\nexport interface CatppuccinFlavorButton {\n /** Theme id registered into ThemeRuntime. */\n id: string\n /** Display label. */\n label: string\n /** Accent colour for the swatch. */\n accent: string\n}\n\n/** Injected business face of the row (assembled in apply). */\nexport interface CatppuccinRowInjected {\n /** The four flavours, in display order. */\n themes: readonly CatppuccinFlavorButton[]\n /** Current choice (`off` when a Catppuccin theme is not active). */\n current: () => FlavorChoice\n /** Subscribe to theme preference changes. Returns the disposer. */\n subscribe: (listener: () => void) => () => void\n /** Switch the theme and persist the choice (`off` reverts to system). */\n select: (choice: FlavorChoice) => void | Promise<void>\n}\n\n/** Full component props: runtime share + locale seat + injected face. */\nexport type CatppuccinRowProps = PropsRuntime<'settings.general.item'> & PropsLocale<'catppuccin'> & CatppuccinRowInjected\n\n/**\n * Render the Catppuccin row: title, one swatch button per flavour, and a\n * follow-system button. The active flavour is highlighted; clicking a flavour\n * applies it immediately (live, no restart) and persists the choice.\n * @param props - composed slot props.\n * @returns the row element tree.\n */\nexport function CatppuccinRow({ t, themes, current, subscribe, select }: CatppuccinRowProps): React.JSX.Element {\n const choice = useSyncExternalStore(subscribe, current)\n return (\n <div style={{ borderBottom: '1px solid var(--dsw-alias-border-l2)', display: 'flex', flexDirection: 'column', gap: '10px', padding: '16px 0' }}>\n <div style={{ color: 'var(--dsw-alias-label-primary)', fontSize: 14, lineHeight: '22px' }}>\n {t('row.title')}\n </div>\n <div style={{ color: 'var(--dsw-alias-label-tertiary)', fontSize: 12, lineHeight: '18px' }}>\n {t('row.description')}\n </div>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '8px' }}>\n {themes.map((flavor) => {\n const selected = choice === flavor.id\n return (\n <button\n key={flavor.id}\n type=\"button\"\n aria-pressed={selected}\n onClick={() => void select(flavor.id)}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n padding: '6px 12px',\n borderRadius: 8,\n border: `1px solid ${selected ? 'var(--dsw-alias-border-l3)' : 'var(--dsw-alias-border-l1)'}`,\n background: selected ? 'var(--dsw-alias-interactive-bg-active)' : 'transparent',\n color: 'var(--dsw-alias-label-primary)',\n cursor: 'pointer',\n font: 'inherit',\n }}\n >\n <span aria-hidden=\"true\" style={{ width: 12, height: 12, borderRadius: 3, background: flavor.accent, flex: 'none' }} />\n {flavor.label}\n </button>\n )\n })}\n <button\n key=\"off\"\n type=\"button\"\n aria-pressed={choice === 'off'}\n onClick={() => void select('off')}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n padding: '6px 12px',\n borderRadius: 8,\n border: `1px solid ${choice === 'off' ? 'var(--dsw-alias-border-l3)' : 'var(--dsw-alias-border-l1)'}`,\n background: choice === 'off' ? 'var(--dsw-alias-interactive-bg-active)' : 'transparent',\n color: 'var(--dsw-alias-label-primary)',\n cursor: 'pointer',\n font: 'inherit',\n }}\n >\n {t('row.off')}\n </button>\n </div>\n </div>\n )\n}\n","/**\n * Catppuccin settings-row copy. The zh dictionary is the key-set source of\n * truth; the en dictionary mirrors it (checked complete against the zh keys).\n */\n\n/** Simplified Chinese dictionary. */\nexport const zh = {\n 'row.title': 'Catppuccin 主题',\n 'row.description': 'Latte / Frappé / Macchiato / Mocha 四款配色,一键切换。',\n 'row.off': '跟随系统',\n 'flavor.latte': 'Latte',\n 'flavor.frappe': 'Frappé',\n 'flavor.macchiato': 'Macchiato',\n 'flavor.mocha': 'Mocha',\n 'glass.title': '玻璃质感',\n 'glass.description': '顶栏、侧边栏、输入框、统计行、轨迹视图的磨砂玻璃效果,一键开关。',\n 'glass.enable': '总开关',\n 'glass.on': '开启',\n 'glass.off': '关闭',\n 'glass.mode': '模式',\n 'glass.modeMica': '云母效果',\n 'glass.modeCompat': '兼容模式',\n 'glass.modeHint': '云母效果把界面改成悬浮磨砂卡片;兼容模式保持原版排版,只换玻璃材质',\n 'glass.blur': '玻璃模糊度',\n 'glass.frost': '磨砂度',\n 'glass.brightness': '背景亮度',\n 'glass.brightnessHintDark': '深色模式:0 压暗至纯黑,50 原样',\n 'glass.brightnessHintLight': '浅色模式:50 原样,100 提亮至纯白',\n 'glass.reset': '还原默认值',\n 'update.title': '检查 Catppuccin 插件更新',\n 'update.description': '检测本插件(dsh-catppuccin)在 npm 上的最新版本,判断当前安装是否需要升级。',\n 'update.check': '检查更新',\n 'update.checking': '检查中…',\n 'update.current': '当前版本',\n 'update.upToDate': '已是最新版本 🎉',\n 'update.available': '发现新版本:',\n 'update.commandHint': '在终端运行以下命令升级(把 web 换成你的 profile 名):',\n 'update.restartHint': '升级完成后重启 dsh web 生效。',\n 'update.copy': '复制命令',\n 'update.copied': '已复制 ✓',\n 'update.failed': '检查失败,请稍后重试。',\n 'update.retry': '重试',\n} as const\n\n/** English dictionary, checked complete against the zh key set. */\nexport const en: Record<keyof typeof zh, string> = {\n 'row.title': 'Catppuccin theme',\n 'row.description': 'Latte / Frappé / Macchiato / Mocha, one click away.',\n 'row.off': 'Follow system',\n 'flavor.latte': 'Latte',\n 'flavor.frappe': 'Frappé',\n 'flavor.macchiato': 'Macchiato',\n 'flavor.mocha': 'Mocha',\n 'glass.title': 'Glassmorphism',\n 'glass.description': 'Frosted glass for the top bar, sidebar, composer, stats line and trajectory view — one click on/off.',\n 'glass.enable': 'Master switch',\n 'glass.on': 'On',\n 'glass.off': 'Off',\n 'glass.mode': 'Mode',\n 'glass.modeMica': 'Mica',\n 'glass.modeCompat': 'Compatibility',\n 'glass.modeHint': 'Mica restyles the UI into floating frosted cards; Compatibility keeps the stock layout and only swaps the material to glass',\n 'glass.blur': 'Glass blur',\n 'glass.frost': 'Frost',\n 'glass.brightness': 'Backdrop brightness',\n 'glass.brightnessHintDark': 'Dark mode: 0 fades to pure black, 50 unchanged',\n 'glass.brightnessHintLight': 'Light mode: 50 unchanged, 100 brightens to pure white',\n 'glass.reset': 'Reset to defaults',\n 'update.title': 'Check for Catppuccin plugin updates',\n 'update.description': 'Checks npm for the latest dsh-catppuccin release and whether this install is current.',\n 'update.check': 'Check for updates',\n 'update.checking': 'Checking…',\n 'update.current': 'Current version',\n 'update.upToDate': 'Up to date 🎉',\n 'update.available': 'New version available:',\n 'update.commandHint': 'Run this in a terminal to upgrade (replace web with your profile name):',\n 'update.restartHint': 'Restart dsh web after the upgrade.',\n 'update.copy': 'Copy command',\n 'update.copied': 'Copied ✓',\n 'update.failed': 'Check failed — try again later.',\n 'update.retry': 'Retry',\n}\n\n/** Key union of the Catppuccin dictionaries. */\nexport type CatppuccinKey = keyof typeof zh\n","/**\n * AUTO-GENERATED by scripts/generate-palettes.mjs — do not edit by hand.\n * Catppuccin token tables for the DeepSeek Harness web GUI.\n * Source palette: https://github.com/catppuccin/catppuccin (palette.json v1.8.0).\n * Each flavour carries a flat dictionary of every --dsw-static-*,\n * --dsw-alias-* and --dsw-specific-* token the official theme stylesheet\n * declares. Alias/specific entries keep their var() references so the static\n * overrides below flow through automatically; literal (non-var) entries are\n * remapped to Catppuccin colours.\n */\nexport type CatppuccinFlavorId = 'latte' | 'frappe' | 'macchiato' | 'mocha'\nexport interface CatppuccinFlavorInfo {\n /** Theme id registered into ThemeRuntime. */\n themeId: string\n /** Base color scheme this flavour builds on. */\n colorScheme: 'light' | 'dark'\n /** Display label. */\n label: string\n /** Accent colour for the settings row swatch. */\n accent: string\n /** Token dictionary (--dsw-* names). */\n tokens: Record<string, string>\n}\n\nexport const CATPPUCCIN_LATTE: CatppuccinFlavorInfo = {\n themeId: 'catppuccin-latte',\n colorScheme: 'light',\n label: 'Latte',\n accent: '#1e66f5',\n tokens: {\n \"--dsw-static-amber-100\": \"color-mix(in srgb, #fe640b 20%, #eff1f5)\",\n \"--dsw-static-amber-400\": \"#df8e1d\",\n \"--dsw-static-amber-500\": \"#fe640b\",\n \"--dsw-static-amber-600\": \"#fe640b\",\n \"--dsw-static-amber-900\": \"color-mix(in srgb, #fe640b 32%, #eff1f5)\",\n \"--dsw-static-blue-100\": \"color-mix(in srgb, #1e66f5 22%, #eff1f5)\",\n \"--dsw-static-blue-300\": \"color-mix(in srgb, #1e66f5 48%, #eff1f5)\",\n \"--dsw-static-blue-400\": \"color-mix(in srgb, #1e66f5 65%, #eff1f5)\",\n \"--dsw-static-blue-450\": \"color-mix(in srgb, #1e66f5 82%, #eff1f5)\",\n \"--dsw-static-blue-500\": \"#1e66f5\",\n \"--dsw-static-blue-50\": \"color-mix(in srgb, #1e66f5 8%, #eff1f5)\",\n \"--dsw-static-blue-50p\": \"color-mix(in srgb, #1e66f5 12%, #eff1f5)\",\n \"--dsw-static-blue-600\": \"color-mix(in srgb, #1e66f5 82%, #eff1f5)\",\n \"--dsw-static-blue-75\": \"color-mix(in srgb, #1e66f5 16%, #eff1f5)\",\n \"--dsw-static-blue-800\": \"color-mix(in srgb, #1e66f5 50%, #eff1f5)\",\n \"--dsw-static-blue-900\": \"color-mix(in srgb, #1e66f5 38%, #eff1f5)\",\n \"--dsw-static-blue-950\": \"color-mix(in srgb, #1e66f5 26%, #eff1f5)\",\n \"--dsw-static-deepseek-100\": \"color-mix(in srgb, #1e66f5 22%, #eff1f5)\",\n \"--dsw-static-deepseek-200\": \"color-mix(in srgb, #1e66f5 34%, #eff1f5)\",\n \"--dsw-static-deepseek-300\": \"color-mix(in srgb, #1e66f5 48%, #eff1f5)\",\n \"--dsw-static-deepseek-400\": \"color-mix(in srgb, #1e66f5 65%, #eff1f5)\",\n \"--dsw-static-deepseek-450\": \"color-mix(in srgb, #1e66f5 82%, #eff1f5)\",\n \"--dsw-static-deepseek-500\": \"#1e66f5\",\n \"--dsw-static-deepseek-50\": \"color-mix(in srgb, #1e66f5 8%, #eff1f5)\",\n \"--dsw-static-deepseek-600\": \"color-mix(in srgb, #1e66f5 82%, #eff1f5)\",\n \"--dsw-static-deepseek-700-delete\": \"color-mix(in srgb, #1e66f5 66%, #eff1f5)\",\n \"--dsw-static-deepseek-800\": \"color-mix(in srgb, #1e66f5 50%, #eff1f5)\",\n \"--dsw-static-deepseek-900\": \"color-mix(in srgb, #1e66f5 38%, #eff1f5)\",\n \"--dsw-static-green-100\": \"color-mix(in srgb, #40a02b 18%, #eff1f5)\",\n \"--dsw-static-green-400\": \"color-mix(in srgb, #40a02b 80%, #eff1f5)\",\n \"--dsw-static-green-500\": \"#40a02b\",\n \"--dsw-static-green-900\": \"color-mix(in srgb, #40a02b 30%, #eff1f5)\",\n \"--dsw-static-neutral-00\": \"#eff1f5\",\n \"--dsw-static-neutral-1000\": \"#4c4f69\",\n \"--dsw-static-neutral-100\": \"#bcc0cc\",\n \"--dsw-static-neutral-150\": \"#acb0be\",\n \"--dsw-static-neutral-200\": \"#9ca0b0\",\n \"--dsw-static-neutral-250\": \"#9ca0b0\",\n \"--dsw-static-neutral-300\": \"#8c8fa1\",\n \"--dsw-static-neutral-400\": \"#7c7f93\",\n \"--dsw-static-neutral-500\": \"#6c6f85\",\n \"--dsw-static-neutral-50\": \"#e6e9ef\",\n \"--dsw-static-neutral-550\": \"#6c6f85\",\n \"--dsw-static-neutral-600\": \"#5c5f77\",\n \"--dsw-static-neutral-700\": \"#5c5f77\",\n \"--dsw-static-neutral-800\": \"#4c4f69\",\n \"--dsw-static-neutral-850\": \"#4c4f69\",\n \"--dsw-static-neutral-900\": \"#4c4f69\",\n \"--dsw-static-neutral-bluish-00\": \"#eff1f5\",\n \"--dsw-static-neutral-bluish-1000\": \"#4c4f69\",\n \"--dsw-static-neutral-bluish-100\": \"#bcc0cc\",\n \"--dsw-static-neutral-bluish-150\": \"#acb0be\",\n \"--dsw-static-neutral-bluish-200\": \"#9ca0b0\",\n \"--dsw-static-neutral-bluish-300\": \"#8c8fa1\",\n \"--dsw-static-neutral-bluish-400\": \"#7c7f93\",\n \"--dsw-static-neutral-bluish-500\": \"#6c6f85\",\n \"--dsw-static-neutral-bluish-50\": \"#e6e9ef\",\n \"--dsw-static-neutral-bluish-600\": \"#5c5f77\",\n \"--dsw-static-neutral-bluish-60\": \"#e6e9ef\",\n \"--dsw-static-neutral-bluish-700\": \"#5c5f77\",\n \"--dsw-static-neutral-bluish-750\": \"#4c4f69\",\n \"--dsw-static-neutral-bluish-75\": \"#ccd0da\",\n \"--dsw-static-neutral-bluish-800\": \"#4c4f69\",\n \"--dsw-static-neutral-bluish-850\": \"#4c4f69\",\n \"--dsw-static-neutral-bluish-875\": \"#4c4f69\",\n \"--dsw-static-neutral-bluish-900\": \"#4c4f69\",\n \"--dsw-static-neutral-bluish-950\": \"#4c4f69\",\n \"--dsw-static-red-100\": \"color-mix(in srgb, #d20f39 20%, #eff1f5)\",\n \"--dsw-static-red-400\": \"color-mix(in srgb, #d20f39 70%, #eff1f5)\",\n \"--dsw-static-red-500\": \"#d20f39\",\n \"--dsw-static-red-50\": \"color-mix(in srgb, #d20f39 10%, #eff1f5)\",\n \"--dsw-static-red-600\": \"#d20f39\",\n \"--dsw-static-red-900\": \"color-mix(in srgb, #d20f39 34%, #eff1f5)\",\n \"--dsw-alias-bg-base\": \"var(--dsw-static-neutral-bluish-00)\",\n \"--dsw-alias-bg-layer-1\": \"var(--dsw-static-neutral-bluish-00)\",\n \"--dsw-alias-bg-layer-2\": \"var(--dsw-static-neutral-bluish-00)\",\n \"--dsw-alias-bg-layer-3\": \"var(--dsw-static-neutral-bluish-00)\",\n \"--dsw-alias-bg-mask-1\": \"rgba(0, 0, 0, 0.24)\",\n \"--dsw-alias-bg-mask-2\": \"rgba(0, 0, 0, 0.12)\",\n \"--dsw-alias-bg-mask-3\": \"rgba(0, 0, 0, 0.48)\",\n \"--dsw-alias-bg-mask-photo\": \"rgba(0, 0, 0, 0.88)\",\n \"--dsw-alias-bg-mask-drop\": \"rgba(255, 255, 255, 0.7)\",\n \"--dsw-alias-bg-module-platform\": \"var(--dsw-static-neutral-bluish-60)\",\n \"--dsw-alias-bg-multi-select\": \"var(--dsw-static-neutral-bluish-60)\",\n \"--dsw-alias-bg-overlay\": \"var(--dsw-static-neutral-bluish-150)\",\n \"--dsw-alias-bg-skeleton\": \"rgba(0, 0, 0, 0.04)\",\n \"--dsw-alias-border-inverted2\": \"rgba(0, 0, 0, 0)\",\n \"--dsw-alias-border-inverted\": \"rgba(0, 0, 0, 0)\",\n \"--dsw-alias-border-l1\": \"rgba(0, 0, 0, 0.04)\",\n \"--dsw-alias-border-l2-darkmode-thin\": \"rgba(0, 0, 0, 0.1)\",\n \"--dsw-alias-border-l2\": \"rgba(0, 0, 0, 0.1)\",\n \"--dsw-alias-border-l3\": \"rgba(0, 0, 0, 0.12)\",\n \"--dsw-alias-border-l4\": \"rgba(0, 0, 0, 0.16)\",\n \"--dsw-alias-brand-primary-invert\": \"var(--dsw-static-neutral-bluish-1000)\",\n \"--dsw-alias-brand-primary-new-colorprimary-new-color\": \"#1e66f5\",\n \"--dsw-alias-brand-primary\": \"var(--dsw-static-neutral-bluish-1000)\",\n \"--dsw-alias-brand-text\": \"var(--dsw-static-neutral-bluish-1000)\",\n \"--dsw-alias-button-contrast-fill\": \"var(--dsw-static-neutral-bluish-700)\",\n \"--dsw-alias-button-elevated-fill\": \"var(--dsw-static-neutral-bluish-00)\",\n \"--dsw-alias-button-floating-fill\": \"var(--dsw-static-neutral-bluish-00)\",\n \"--dsw-alias-button-floating-hover\": \"var(--dsw-static-neutral-bluish-75)\",\n \"--dsw-alias-button-ghost-active-border\": \"var(--dsw-static-neutral-bluish-500)\",\n \"--dsw-alias-button-ghost-active-fill\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-alias-button-ghost-active-hover\": \"var(--dsw-static-neutral-bluish-150)\",\n \"--dsw-alias-button-info-fill\": \"var(--dsw-static-deepseek-500)\",\n \"--dsw-alias-button-info-hover\": \"var(--dsw-static-deepseek-400)\",\n \"--dsw-alias-button-primary-dimmed\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-alias-button-primary-fill\": \"var(--dsw-alias-brand-primary)\",\n \"--dsw-alias-button-primary-hover\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-button-tool-bar-fill-invisible\": \"rgba(31, 31, 31, 0.36)\",\n \"--dsw-alias-button-tool-bar-fill\": \"rgba(84, 85, 87, 0.5)\",\n \"--dsw-alias-button-tool-bar-hover\": \"rgba(84, 85, 87, 0.6)\",\n \"--dsw-alias-interactive-bg-active\": \"rgba(38, 49, 72, 0.1)\",\n \"--dsw-alias-interactive-bg-hover-accent\": \"rgba(38, 49, 72, 0.14)\",\n \"--dsw-alias-interactive-bg-hover-danger\": \"rgba(236, 19, 19, 0.05)\",\n \"--dsw-alias-interactive-bg-hover-solid\": \"var(--dsw-static-neutral-bluish-75)\",\n \"--dsw-alias-interactive-bg-hover\": \"rgba(38, 49, 72, 0.06)\",\n \"--dsw-alias-label-caption\": \"var(--dsw-static-neutral-bluish-400)\",\n \"--dsw-alias-label-dimmed\": \"var(--dsw-static-neutral-bluish-200)\",\n \"--dsw-alias-label-primary-bluish\": \"var(--dsw-static-blue-900)\",\n \"--dsw-alias-label-primary-dimmed\": \"var(--dsw-static-neutral-bluish-950)\",\n \"--dsw-alias-label-primary-foreground\": \"var(--dsw-static-neutral-bluish-00)\",\n \"--dsw-alias-label-primary-inverted\": \"var(--dsw-static-neutral-bluish-00)\",\n \"--dsw-alias-label-primary\": \"var(--dsw-static-neutral-bluish-1000)\",\n \"--dsw-alias-label-secondary\": \"var(--dsw-static-neutral-bluish-700)\",\n \"--dsw-alias-label-tertiary\": \"var(--dsw-static-neutral-bluish-600)\",\n \"--dsw-alias-markdown-citation\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-alias-markdown-code-block-banner\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-markdown-code-block\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-markdown-code-segment-selected\": \"var(--dsw-static-neutral-bluish-00)\",\n \"--dsw-alias-markdown-code-segment-unselected\": \"var(--dsw-static-neutral-bluish-75)\",\n \"--dsw-alias-markdown-inline-code\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-alias-markdown-placeholder\": \"var(--dsw-static-neutral-bluish-60)\",\n \"--dsw-alias-markdown-tag\": \"var(--dsw-static-neutral-bluish-75)\",\n \"--dsw-alias-scrollbar-bg-l1\": \"var(--dsw-static-neutral-200)\",\n \"--dsw-alias-scrollbar-bg-l2\": \"var(--dsw-static-neutral-200)\",\n \"--dsw-alias-scrollbar-hover-l1\": \"var(--dsw-static-neutral-300)\",\n \"--dsw-alias-scrollbar-hover-l2\": \"var(--dsw-static-neutral-300)\",\n \"--dsw-alias-state-business-primary\": \"var(--dsw-static-deepseek-500)\",\n \"--dsw-alias-state-business-tertiary\": \"var(--dsw-static-deepseek-100)\",\n \"--dsw-alias-state-error-primary\": \"var(--dsw-static-red-600)\",\n \"--dsw-alias-state-error-secondary\": \"var(--dsw-static-red-400)\",\n \"--dsw-alias-state-success-primary\": \"var(--dsw-static-green-500)\",\n \"--dsw-alias-state-success-secondary\": \"var(--dsw-static-green-400)\",\n \"--dsw-alias-state-success-tertiary\": \"var(--dsw-static-green-100)\",\n \"--dsw-alias-state-warn-label\": \"var(--dsw-static-amber-600)\",\n \"--dsw-alias-state-warn-primary\": \"var(--dsw-static-amber-500)\",\n \"--dsw-alias-state-warn-secondary\": \"var(--dsw-static-amber-400)\",\n \"--dsw-alias-state-warn-tertiary\": \"var(--dsw-static-amber-100)\",\n \"--dsw-alias-toast-bg\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-tooltip-bg\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-specific-bubble-highlight\": \"var(--dsw-static-deepseek-200)\",\n \"--dsw-specific-bubble\": \"var(--dsw-static-deepseek-50)\",\n \"--dsw-specific-input-major\": \"var(--dsw-static-neutral-bluish-00)\",\n \"--dsw-specific-login-input\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-specific-menu\": \"var(--dsw-alias-bg-layer-3)\",\n \"--dsw-specific-selector\": \"var(--dsw-static-neutral-bluish-60)\",\n \"--dsw-specific-sidebar-fill\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-specific-sidebar-nav-item-active-accent\": \"var(--dsw-static-deepseek-100)\",\n \"--dsw-specific-sidebar-nav-item-active\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-specific-sidebar-nav-item-hover\": \"var(--dsw-static-neutral-bluish-75)\",\n \"--dsw-specific-tip\": \"var(--dsw-static-neutral-bluish-60)\",\n },\n}\n\nexport const CATPPUCCIN_FRAPPE: CatppuccinFlavorInfo = {\n themeId: 'catppuccin-frappe',\n colorScheme: 'dark',\n label: 'Frappé',\n accent: '#8caaee',\n tokens: {\n \"--dsw-static-amber-100\": \"color-mix(in srgb, #ef9f76 20%, #303446)\",\n \"--dsw-static-amber-400\": \"#e5c890\",\n \"--dsw-static-amber-500\": \"#ef9f76\",\n \"--dsw-static-amber-600\": \"#ef9f76\",\n \"--dsw-static-amber-900\": \"color-mix(in srgb, #ef9f76 32%, #303446)\",\n \"--dsw-static-blue-100\": \"color-mix(in srgb, #8caaee 24%, #303446)\",\n \"--dsw-static-blue-300\": \"color-mix(in srgb, #8caaee 50%, #303446)\",\n \"--dsw-static-blue-400\": \"color-mix(in srgb, #8caaee 66%, #303446)\",\n \"--dsw-static-blue-450\": \"color-mix(in srgb, #8caaee 84%, #303446)\",\n \"--dsw-static-blue-500\": \"#8caaee\",\n \"--dsw-static-blue-50\": \"color-mix(in srgb, #8caaee 10%, #303446)\",\n \"--dsw-static-blue-50p\": \"color-mix(in srgb, #8caaee 14%, #303446)\",\n \"--dsw-static-blue-600\": \"color-mix(in srgb, #8caaee 84%, #303446)\",\n \"--dsw-static-blue-75\": \"color-mix(in srgb, #8caaee 18%, #303446)\",\n \"--dsw-static-blue-800\": \"color-mix(in srgb, #8caaee 52%, #303446)\",\n \"--dsw-static-blue-900\": \"color-mix(in srgb, #8caaee 40%, #303446)\",\n \"--dsw-static-blue-950\": \"color-mix(in srgb, #8caaee 28%, #303446)\",\n \"--dsw-static-deepseek-100\": \"color-mix(in srgb, #8caaee 24%, #303446)\",\n \"--dsw-static-deepseek-200\": \"color-mix(in srgb, #8caaee 36%, #303446)\",\n \"--dsw-static-deepseek-300\": \"color-mix(in srgb, #8caaee 50%, #303446)\",\n \"--dsw-static-deepseek-400\": \"color-mix(in srgb, #8caaee 66%, #303446)\",\n \"--dsw-static-deepseek-450\": \"color-mix(in srgb, #8caaee 84%, #303446)\",\n \"--dsw-static-deepseek-500\": \"#8caaee\",\n \"--dsw-static-deepseek-50\": \"color-mix(in srgb, #8caaee 10%, #303446)\",\n \"--dsw-static-deepseek-600\": \"color-mix(in srgb, #8caaee 84%, #303446)\",\n \"--dsw-static-deepseek-700-delete\": \"color-mix(in srgb, #8caaee 68%, #303446)\",\n \"--dsw-static-deepseek-800\": \"color-mix(in srgb, #8caaee 52%, #303446)\",\n \"--dsw-static-deepseek-900\": \"color-mix(in srgb, #8caaee 40%, #303446)\",\n \"--dsw-static-green-100\": \"color-mix(in srgb, #a6d189 18%, #303446)\",\n \"--dsw-static-green-400\": \"color-mix(in srgb, #a6d189 80%, #303446)\",\n \"--dsw-static-green-500\": \"#a6d189\",\n \"--dsw-static-green-900\": \"color-mix(in srgb, #a6d189 30%, #303446)\",\n \"--dsw-static-neutral-00\": \"#c6d0f5\",\n \"--dsw-static-neutral-1000\": \"#232634\",\n \"--dsw-static-neutral-100\": \"#a5adce\",\n \"--dsw-static-neutral-150\": \"#a5adce\",\n \"--dsw-static-neutral-200\": \"#949cbb\",\n \"--dsw-static-neutral-250\": \"#949cbb\",\n \"--dsw-static-neutral-300\": \"#838ba7\",\n \"--dsw-static-neutral-400\": \"#737994\",\n \"--dsw-static-neutral-500\": \"#626880\",\n \"--dsw-static-neutral-50\": \"#c6d0f5\",\n \"--dsw-static-neutral-550\": \"#51576d\",\n \"--dsw-static-neutral-600\": \"#51576d\",\n \"--dsw-static-neutral-700\": \"#414559\",\n \"--dsw-static-neutral-800\": \"#414559\",\n \"--dsw-static-neutral-850\": \"#303446\",\n \"--dsw-static-neutral-900\": \"#292c3c\",\n \"--dsw-static-neutral-bluish-00\": \"#c6d0f5\",\n \"--dsw-static-neutral-bluish-1000\": \"#232634\",\n \"--dsw-static-neutral-bluish-100\": \"#a5adce\",\n \"--dsw-static-neutral-bluish-150\": \"#a5adce\",\n \"--dsw-static-neutral-bluish-200\": \"#949cbb\",\n \"--dsw-static-neutral-bluish-300\": \"#838ba7\",\n \"--dsw-static-neutral-bluish-400\": \"#737994\",\n \"--dsw-static-neutral-bluish-500\": \"#626880\",\n \"--dsw-static-neutral-bluish-50\": \"#c6d0f5\",\n \"--dsw-static-neutral-bluish-600\": \"#51576d\",\n \"--dsw-static-neutral-bluish-60\": \"#b5bfe2\",\n \"--dsw-static-neutral-bluish-700\": \"#414559\",\n \"--dsw-static-neutral-bluish-750\": \"#414559\",\n \"--dsw-static-neutral-bluish-75\": \"#b5bfe2\",\n \"--dsw-static-neutral-bluish-800\": \"#414559\",\n \"--dsw-static-neutral-bluish-850\": \"#303446\",\n \"--dsw-static-neutral-bluish-875\": \"#292c3c\",\n \"--dsw-static-neutral-bluish-900\": \"#292c3c\",\n \"--dsw-static-neutral-bluish-950\": \"#232634\",\n \"--dsw-static-red-100\": \"color-mix(in srgb, #e78284 20%, #303446)\",\n \"--dsw-static-red-400\": \"color-mix(in srgb, #e78284 70%, #303446)\",\n \"--dsw-static-red-500\": \"#e78284\",\n \"--dsw-static-red-50\": \"color-mix(in srgb, #e78284 10%, #303446)\",\n \"--dsw-static-red-600\": \"#e78284\",\n \"--dsw-static-red-900\": \"color-mix(in srgb, #e78284 34%, #303446)\",\n \"--dsw-alias-bg-base\": \"var(--dsw-static-neutral-bluish-950)\",\n \"--dsw-alias-bg-layer-1\": \"var(--dsw-static-neutral-bluish-875)\",\n \"--dsw-alias-bg-layer-2\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-bg-layer-3\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-bg-mask-1\": \"rgba(0, 0, 0, 0.5)\",\n \"--dsw-alias-bg-mask-2\": \"rgba(0, 0, 0, 0.2)\",\n \"--dsw-alias-bg-mask-3\": \"rgba(0, 0, 0, 0.48)\",\n \"--dsw-alias-bg-mask-photo\": \"rgba(0, 0, 0, 0.88)\",\n \"--dsw-alias-bg-mask-drop\": \"rgba(39, 39, 48, 0.7)\",\n \"--dsw-alias-bg-module-platform\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-bg-multi-select\": \"var(--dsw-static-neutral-850)\",\n \"--dsw-alias-bg-overlay\": \"var(--dsw-static-neutral-bluish-700)\",\n \"--dsw-alias-bg-skeleton\": \"rgba(255, 255, 255, 0.08)\",\n \"--dsw-alias-border-inverted2\": \"rgba(255, 255, 255, 0.08)\",\n \"--dsw-alias-border-inverted\": \"rgba(255, 255, 255, 0.06)\",\n \"--dsw-alias-border-l1\": \"rgba(255, 255, 255, 0.06)\",\n \"--dsw-alias-border-l2-darkmode-thin\": \"rgba(255, 255, 255, 0.06)\",\n \"--dsw-alias-border-l2\": \"rgba(255, 255, 255, 0.12)\",\n \"--dsw-alias-border-l3\": \"rgba(255, 255, 255, 0.16)\",\n \"--dsw-alias-border-l4\": \"rgba(255, 255, 255, 0.2)\",\n \"--dsw-alias-brand-primary-invert\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-brand-primary-new-colorprimary-new-color\": \"#8caaee\",\n \"--dsw-alias-brand-primary\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-brand-text\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-button-contrast-fill\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-button-elevated-fill\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-button-floating-fill\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-button-floating-hover\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-button-ghost-active-border\": \"var(--dsw-static-neutral-bluish-600)\",\n \"--dsw-alias-button-ghost-active-fill\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-button-ghost-active-hover\": \"var(--dsw-static-neutral-bluish-700)\",\n \"--dsw-alias-button-info-fill\": \"var(--dsw-static-deepseek-400)\",\n \"--dsw-alias-button-info-hover\": \"var(--dsw-static-deepseek-500)\",\n \"--dsw-alias-button-primary-dimmed\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-button-primary-fill\": \"var(--dsw-alias-brand-primary)\",\n \"--dsw-alias-button-primary-hover\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-alias-button-tool-bar-fill-invisible\": \"rgba(31, 31, 31, 0.36)\",\n \"--dsw-alias-button-tool-bar-fill\": \"rgba(84, 85, 87, 0.5)\",\n \"--dsw-alias-button-tool-bar-hover\": \"rgba(84, 85, 87, 0.6)\",\n \"--dsw-alias-interactive-bg-active\": \"rgba(255, 255, 255, 0.14)\",\n \"--dsw-alias-interactive-bg-hover-accent\": \"rgba(255, 255, 255, 0.24)\",\n \"--dsw-alias-interactive-bg-hover-danger\": \"rgba(242, 90, 90, 0.15)\",\n \"--dsw-alias-interactive-bg-hover-solid\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-interactive-bg-hover\": \"rgba(255, 255, 255, 0.08)\",\n \"--dsw-alias-label-caption\": \"var(--dsw-static-neutral-bluish-600)\",\n \"--dsw-alias-label-dimmed\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-label-primary-bluish\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-label-primary-dimmed\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-alias-label-primary-foreground\": \"var(--dsw-static-neutral-bluish-1000)\",\n \"--dsw-alias-label-primary-inverted\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-label-primary\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-label-secondary\": \"var(--dsw-static-neutral-bluish-300)\",\n \"--dsw-alias-label-tertiary\": \"var(--dsw-static-neutral-bluish-400)\",\n \"--dsw-alias-markdown-citation\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-markdown-code-block-banner\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-markdown-code-block\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-alias-markdown-code-segment-selected\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-markdown-code-segment-unselected\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-alias-markdown-inline-code\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-markdown-placeholder\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-markdown-tag\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-scrollbar-bg-l1\": \"var(--dsw-static-neutral-700)\",\n \"--dsw-alias-scrollbar-bg-l2\": \"var(--dsw-static-neutral-600)\",\n \"--dsw-alias-scrollbar-hover-l1\": \"var(--dsw-static-neutral-600)\",\n \"--dsw-alias-scrollbar-hover-l2\": \"var(--dsw-static-neutral-550)\",\n \"--dsw-alias-state-business-primary\": \"var(--dsw-static-deepseek-400)\",\n \"--dsw-alias-state-business-tertiary\": \"var(--dsw-static-deepseek-800)\",\n \"--dsw-alias-state-error-primary\": \"var(--dsw-static-red-400)\",\n \"--dsw-alias-state-error-secondary\": \"var(--dsw-static-red-400)\",\n \"--dsw-alias-state-success-primary\": \"var(--dsw-static-green-500)\",\n \"--dsw-alias-state-success-secondary\": \"var(--dsw-static-green-400)\",\n \"--dsw-alias-state-success-tertiary\": \"var(--dsw-static-green-900)\",\n \"--dsw-alias-state-warn-label\": \"var(--dsw-static-amber-600)\",\n \"--dsw-alias-state-warn-primary\": \"var(--dsw-static-amber-500)\",\n \"--dsw-alias-state-warn-secondary\": \"var(--dsw-static-amber-400)\",\n \"--dsw-alias-state-warn-tertiary\": \"var(--dsw-static-amber-900)\",\n \"--dsw-alias-toast-bg\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-tooltip-bg\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-specific-bubble-highlight\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-specific-bubble\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-specific-input-major\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-specific-login-input\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-specific-menu\": \"var(--dsw-alias-bg-layer-3)\",\n \"--dsw-specific-selector\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-specific-sidebar-fill\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-specific-sidebar-nav-item-active-accent\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-specific-sidebar-nav-item-active\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-specific-sidebar-nav-item-hover\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-specific-tip\": \"var(--dsw-static-neutral-bluish-800)\",\n },\n}\n\nexport const CATPPUCCIN_MACCHIATO: CatppuccinFlavorInfo = {\n themeId: 'catppuccin-macchiato',\n colorScheme: 'dark',\n label: 'Macchiato',\n accent: '#8aadf4',\n tokens: {\n \"--dsw-static-amber-100\": \"color-mix(in srgb, #f5a97f 20%, #24273a)\",\n \"--dsw-static-amber-400\": \"#eed49f\",\n \"--dsw-static-amber-500\": \"#f5a97f\",\n \"--dsw-static-amber-600\": \"#f5a97f\",\n \"--dsw-static-amber-900\": \"color-mix(in srgb, #f5a97f 32%, #24273a)\",\n \"--dsw-static-blue-100\": \"color-mix(in srgb, #8aadf4 24%, #24273a)\",\n \"--dsw-static-blue-300\": \"color-mix(in srgb, #8aadf4 50%, #24273a)\",\n \"--dsw-static-blue-400\": \"color-mix(in srgb, #8aadf4 66%, #24273a)\",\n \"--dsw-static-blue-450\": \"color-mix(in srgb, #8aadf4 84%, #24273a)\",\n \"--dsw-static-blue-500\": \"#8aadf4\",\n \"--dsw-static-blue-50\": \"color-mix(in srgb, #8aadf4 10%, #24273a)\",\n \"--dsw-static-blue-50p\": \"color-mix(in srgb, #8aadf4 14%, #24273a)\",\n \"--dsw-static-blue-600\": \"color-mix(in srgb, #8aadf4 84%, #24273a)\",\n \"--dsw-static-blue-75\": \"color-mix(in srgb, #8aadf4 18%, #24273a)\",\n \"--dsw-static-blue-800\": \"color-mix(in srgb, #8aadf4 52%, #24273a)\",\n \"--dsw-static-blue-900\": \"color-mix(in srgb, #8aadf4 40%, #24273a)\",\n \"--dsw-static-blue-950\": \"color-mix(in srgb, #8aadf4 28%, #24273a)\",\n \"--dsw-static-deepseek-100\": \"color-mix(in srgb, #8aadf4 24%, #24273a)\",\n \"--dsw-static-deepseek-200\": \"color-mix(in srgb, #8aadf4 36%, #24273a)\",\n \"--dsw-static-deepseek-300\": \"color-mix(in srgb, #8aadf4 50%, #24273a)\",\n \"--dsw-static-deepseek-400\": \"color-mix(in srgb, #8aadf4 66%, #24273a)\",\n \"--dsw-static-deepseek-450\": \"color-mix(in srgb, #8aadf4 84%, #24273a)\",\n \"--dsw-static-deepseek-500\": \"#8aadf4\",\n \"--dsw-static-deepseek-50\": \"color-mix(in srgb, #8aadf4 10%, #24273a)\",\n \"--dsw-static-deepseek-600\": \"color-mix(in srgb, #8aadf4 84%, #24273a)\",\n \"--dsw-static-deepseek-700-delete\": \"color-mix(in srgb, #8aadf4 68%, #24273a)\",\n \"--dsw-static-deepseek-800\": \"color-mix(in srgb, #8aadf4 52%, #24273a)\",\n \"--dsw-static-deepseek-900\": \"color-mix(in srgb, #8aadf4 40%, #24273a)\",\n \"--dsw-static-green-100\": \"color-mix(in srgb, #a6da95 18%, #24273a)\",\n \"--dsw-static-green-400\": \"color-mix(in srgb, #a6da95 80%, #24273a)\",\n \"--dsw-static-green-500\": \"#a6da95\",\n \"--dsw-static-green-900\": \"color-mix(in srgb, #a6da95 30%, #24273a)\",\n \"--dsw-static-neutral-00\": \"#cad3f5\",\n \"--dsw-static-neutral-1000\": \"#181926\",\n \"--dsw-static-neutral-100\": \"#a5adcb\",\n \"--dsw-static-neutral-150\": \"#a5adcb\",\n \"--dsw-static-neutral-200\": \"#939ab7\",\n \"--dsw-static-neutral-250\": \"#939ab7\",\n \"--dsw-static-neutral-300\": \"#8087a2\",\n \"--dsw-static-neutral-400\": \"#6e738d\",\n \"--dsw-static-neutral-500\": \"#5b6078\",\n \"--dsw-static-neutral-50\": \"#cad3f5\",\n \"--dsw-static-neutral-550\": \"#494d64\",\n \"--dsw-static-neutral-600\": \"#494d64\",\n \"--dsw-static-neutral-700\": \"#363a4f\",\n \"--dsw-static-neutral-800\": \"#363a4f\",\n \"--dsw-static-neutral-850\": \"#24273a\",\n \"--dsw-static-neutral-900\": \"#1e2030\",\n \"--dsw-static-neutral-bluish-00\": \"#cad3f5\",\n \"--dsw-static-neutral-bluish-1000\": \"#181926\",\n \"--dsw-static-neutral-bluish-100\": \"#a5adcb\",\n \"--dsw-static-neutral-bluish-150\": \"#a5adcb\",\n \"--dsw-static-neutral-bluish-200\": \"#939ab7\",\n \"--dsw-static-neutral-bluish-300\": \"#8087a2\",\n \"--dsw-static-neutral-bluish-400\": \"#6e738d\",\n \"--dsw-static-neutral-bluish-500\": \"#5b6078\",\n \"--dsw-static-neutral-bluish-50\": \"#cad3f5\",\n \"--dsw-static-neutral-bluish-600\": \"#494d64\",\n \"--dsw-static-neutral-bluish-60\": \"#b8c0e0\",\n \"--dsw-static-neutral-bluish-700\": \"#363a4f\",\n \"--dsw-static-neutral-bluish-750\": \"#363a4f\",\n \"--dsw-static-neutral-bluish-75\": \"#b8c0e0\",\n \"--dsw-static-neutral-bluish-800\": \"#363a4f\",\n \"--dsw-static-neutral-bluish-850\": \"#24273a\",\n \"--dsw-static-neutral-bluish-875\": \"#1e2030\",\n \"--dsw-static-neutral-bluish-900\": \"#1e2030\",\n \"--dsw-static-neutral-bluish-950\": \"#181926\",\n \"--dsw-static-red-100\": \"color-mix(in srgb, #ed8796 20%, #24273a)\",\n \"--dsw-static-red-400\": \"color-mix(in srgb, #ed8796 70%, #24273a)\",\n \"--dsw-static-red-500\": \"#ed8796\",\n \"--dsw-static-red-50\": \"color-mix(in srgb, #ed8796 10%, #24273a)\",\n \"--dsw-static-red-600\": \"#ed8796\",\n \"--dsw-static-red-900\": \"color-mix(in srgb, #ed8796 34%, #24273a)\",\n \"--dsw-alias-bg-base\": \"var(--dsw-static-neutral-bluish-950)\",\n \"--dsw-alias-bg-layer-1\": \"var(--dsw-static-neutral-bluish-875)\",\n \"--dsw-alias-bg-layer-2\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-bg-layer-3\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-bg-mask-1\": \"rgba(0, 0, 0, 0.5)\",\n \"--dsw-alias-bg-mask-2\": \"rgba(0, 0, 0, 0.2)\",\n \"--dsw-alias-bg-mask-3\": \"rgba(0, 0, 0, 0.48)\",\n \"--dsw-alias-bg-mask-photo\": \"rgba(0, 0, 0, 0.88)\",\n \"--dsw-alias-bg-mask-drop\": \"rgba(39, 39, 48, 0.7)\",\n \"--dsw-alias-bg-module-platform\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-bg-multi-select\": \"var(--dsw-static-neutral-850)\",\n \"--dsw-alias-bg-overlay\": \"var(--dsw-static-neutral-bluish-700)\",\n \"--dsw-alias-bg-skeleton\": \"rgba(255, 255, 255, 0.08)\",\n \"--dsw-alias-border-inverted2\": \"rgba(255, 255, 255, 0.08)\",\n \"--dsw-alias-border-inverted\": \"rgba(255, 255, 255, 0.06)\",\n \"--dsw-alias-border-l1\": \"rgba(255, 255, 255, 0.06)\",\n \"--dsw-alias-border-l2-darkmode-thin\": \"rgba(255, 255, 255, 0.06)\",\n \"--dsw-alias-border-l2\": \"rgba(255, 255, 255, 0.12)\",\n \"--dsw-alias-border-l3\": \"rgba(255, 255, 255, 0.16)\",\n \"--dsw-alias-border-l4\": \"rgba(255, 255, 255, 0.2)\",\n \"--dsw-alias-brand-primary-invert\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-brand-primary-new-colorprimary-new-color\": \"#8aadf4\",\n \"--dsw-alias-brand-primary\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-brand-text\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-button-contrast-fill\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-button-elevated-fill\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-button-floating-fill\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-button-floating-hover\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-button-ghost-active-border\": \"var(--dsw-static-neutral-bluish-600)\",\n \"--dsw-alias-button-ghost-active-fill\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-button-ghost-active-hover\": \"var(--dsw-static-neutral-bluish-700)\",\n \"--dsw-alias-button-info-fill\": \"var(--dsw-static-deepseek-400)\",\n \"--dsw-alias-button-info-hover\": \"var(--dsw-static-deepseek-500)\",\n \"--dsw-alias-button-primary-dimmed\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-button-primary-fill\": \"var(--dsw-alias-brand-primary)\",\n \"--dsw-alias-button-primary-hover\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-alias-button-tool-bar-fill-invisible\": \"rgba(31, 31, 31, 0.36)\",\n \"--dsw-alias-button-tool-bar-fill\": \"rgba(84, 85, 87, 0.5)\",\n \"--dsw-alias-button-tool-bar-hover\": \"rgba(84, 85, 87, 0.6)\",\n \"--dsw-alias-interactive-bg-active\": \"rgba(255, 255, 255, 0.14)\",\n \"--dsw-alias-interactive-bg-hover-accent\": \"rgba(255, 255, 255, 0.24)\",\n \"--dsw-alias-interactive-bg-hover-danger\": \"rgba(242, 90, 90, 0.15)\",\n \"--dsw-alias-interactive-bg-hover-solid\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-interactive-bg-hover\": \"rgba(255, 255, 255, 0.08)\",\n \"--dsw-alias-label-caption\": \"var(--dsw-static-neutral-bluish-600)\",\n \"--dsw-alias-label-dimmed\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-label-primary-bluish\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-label-primary-dimmed\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-alias-label-primary-foreground\": \"var(--dsw-static-neutral-bluish-1000)\",\n \"--dsw-alias-label-primary-inverted\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-label-primary\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-label-secondary\": \"var(--dsw-static-neutral-bluish-300)\",\n \"--dsw-alias-label-tertiary\": \"var(--dsw-static-neutral-bluish-400)\",\n \"--dsw-alias-markdown-citation\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-markdown-code-block-banner\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-markdown-code-block\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-alias-markdown-code-segment-selected\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-markdown-code-segment-unselected\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-alias-markdown-inline-code\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-markdown-placeholder\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-markdown-tag\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-scrollbar-bg-l1\": \"var(--dsw-static-neutral-700)\",\n \"--dsw-alias-scrollbar-bg-l2\": \"var(--dsw-static-neutral-600)\",\n \"--dsw-alias-scrollbar-hover-l1\": \"var(--dsw-static-neutral-600)\",\n \"--dsw-alias-scrollbar-hover-l2\": \"var(--dsw-static-neutral-550)\",\n \"--dsw-alias-state-business-primary\": \"var(--dsw-static-deepseek-400)\",\n \"--dsw-alias-state-business-tertiary\": \"var(--dsw-static-deepseek-800)\",\n \"--dsw-alias-state-error-primary\": \"var(--dsw-static-red-400)\",\n \"--dsw-alias-state-error-secondary\": \"var(--dsw-static-red-400)\",\n \"--dsw-alias-state-success-primary\": \"var(--dsw-static-green-500)\",\n \"--dsw-alias-state-success-secondary\": \"var(--dsw-static-green-400)\",\n \"--dsw-alias-state-success-tertiary\": \"var(--dsw-static-green-900)\",\n \"--dsw-alias-state-warn-label\": \"var(--dsw-static-amber-600)\",\n \"--dsw-alias-state-warn-primary\": \"var(--dsw-static-amber-500)\",\n \"--dsw-alias-state-warn-secondary\": \"var(--dsw-static-amber-400)\",\n \"--dsw-alias-state-warn-tertiary\": \"var(--dsw-static-amber-900)\",\n \"--dsw-alias-toast-bg\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-tooltip-bg\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-specific-bubble-highlight\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-specific-bubble\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-specific-input-major\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-specific-login-input\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-specific-menu\": \"var(--dsw-alias-bg-layer-3)\",\n \"--dsw-specific-selector\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-specific-sidebar-fill\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-specific-sidebar-nav-item-active-accent\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-specific-sidebar-nav-item-active\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-specific-sidebar-nav-item-hover\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-specific-tip\": \"var(--dsw-static-neutral-bluish-800)\",\n },\n}\n\nexport const CATPPUCCIN_MOCHA: CatppuccinFlavorInfo = {\n themeId: 'catppuccin-mocha',\n colorScheme: 'dark',\n label: 'Mocha',\n accent: '#89b4fa',\n tokens: {\n \"--dsw-static-amber-100\": \"color-mix(in srgb, #fab387 20%, #1e1e2e)\",\n \"--dsw-static-amber-400\": \"#f9e2af\",\n \"--dsw-static-amber-500\": \"#fab387\",\n \"--dsw-static-amber-600\": \"#fab387\",\n \"--dsw-static-amber-900\": \"color-mix(in srgb, #fab387 32%, #1e1e2e)\",\n \"--dsw-static-blue-100\": \"color-mix(in srgb, #89b4fa 24%, #1e1e2e)\",\n \"--dsw-static-blue-300\": \"color-mix(in srgb, #89b4fa 50%, #1e1e2e)\",\n \"--dsw-static-blue-400\": \"color-mix(in srgb, #89b4fa 66%, #1e1e2e)\",\n \"--dsw-static-blue-450\": \"color-mix(in srgb, #89b4fa 84%, #1e1e2e)\",\n \"--dsw-static-blue-500\": \"#89b4fa\",\n \"--dsw-static-blue-50\": \"color-mix(in srgb, #89b4fa 10%, #1e1e2e)\",\n \"--dsw-static-blue-50p\": \"color-mix(in srgb, #89b4fa 14%, #1e1e2e)\",\n \"--dsw-static-blue-600\": \"color-mix(in srgb, #89b4fa 84%, #1e1e2e)\",\n \"--dsw-static-blue-75\": \"color-mix(in srgb, #89b4fa 18%, #1e1e2e)\",\n \"--dsw-static-blue-800\": \"color-mix(in srgb, #89b4fa 52%, #1e1e2e)\",\n \"--dsw-static-blue-900\": \"color-mix(in srgb, #89b4fa 40%, #1e1e2e)\",\n \"--dsw-static-blue-950\": \"color-mix(in srgb, #89b4fa 28%, #1e1e2e)\",\n \"--dsw-static-deepseek-100\": \"color-mix(in srgb, #89b4fa 24%, #1e1e2e)\",\n \"--dsw-static-deepseek-200\": \"color-mix(in srgb, #89b4fa 36%, #1e1e2e)\",\n \"--dsw-static-deepseek-300\": \"color-mix(in srgb, #89b4fa 50%, #1e1e2e)\",\n \"--dsw-static-deepseek-400\": \"color-mix(in srgb, #89b4fa 66%, #1e1e2e)\",\n \"--dsw-static-deepseek-450\": \"color-mix(in srgb, #89b4fa 84%, #1e1e2e)\",\n \"--dsw-static-deepseek-500\": \"#89b4fa\",\n \"--dsw-static-deepseek-50\": \"color-mix(in srgb, #89b4fa 10%, #1e1e2e)\",\n \"--dsw-static-deepseek-600\": \"color-mix(in srgb, #89b4fa 84%, #1e1e2e)\",\n \"--dsw-static-deepseek-700-delete\": \"color-mix(in srgb, #89b4fa 68%, #1e1e2e)\",\n \"--dsw-static-deepseek-800\": \"color-mix(in srgb, #89b4fa 52%, #1e1e2e)\",\n \"--dsw-static-deepseek-900\": \"color-mix(in srgb, #89b4fa 40%, #1e1e2e)\",\n \"--dsw-static-green-100\": \"color-mix(in srgb, #a6e3a1 18%, #1e1e2e)\",\n \"--dsw-static-green-400\": \"color-mix(in srgb, #a6e3a1 80%, #1e1e2e)\",\n \"--dsw-static-green-500\": \"#a6e3a1\",\n \"--dsw-static-green-900\": \"color-mix(in srgb, #a6e3a1 30%, #1e1e2e)\",\n \"--dsw-static-neutral-00\": \"#cdd6f4\",\n \"--dsw-static-neutral-1000\": \"#11111b\",\n \"--dsw-static-neutral-100\": \"#a6adc8\",\n \"--dsw-static-neutral-150\": \"#a6adc8\",\n \"--dsw-static-neutral-200\": \"#9399b2\",\n \"--dsw-static-neutral-250\": \"#9399b2\",\n \"--dsw-static-neutral-300\": \"#7f849c\",\n \"--dsw-static-neutral-400\": \"#6c7086\",\n \"--dsw-static-neutral-500\": \"#585b70\",\n \"--dsw-static-neutral-50\": \"#cdd6f4\",\n \"--dsw-static-neutral-550\": \"#45475a\",\n \"--dsw-static-neutral-600\": \"#45475a\",\n \"--dsw-static-neutral-700\": \"#313244\",\n \"--dsw-static-neutral-800\": \"#313244\",\n \"--dsw-static-neutral-850\": \"#1e1e2e\",\n \"--dsw-static-neutral-900\": \"#181825\",\n \"--dsw-static-neutral-bluish-00\": \"#cdd6f4\",\n \"--dsw-static-neutral-bluish-1000\": \"#11111b\",\n \"--dsw-static-neutral-bluish-100\": \"#a6adc8\",\n \"--dsw-static-neutral-bluish-150\": \"#a6adc8\",\n \"--dsw-static-neutral-bluish-200\": \"#9399b2\",\n \"--dsw-static-neutral-bluish-300\": \"#7f849c\",\n \"--dsw-static-neutral-bluish-400\": \"#6c7086\",\n \"--dsw-static-neutral-bluish-500\": \"#585b70\",\n \"--dsw-static-neutral-bluish-50\": \"#cdd6f4\",\n \"--dsw-static-neutral-bluish-600\": \"#45475a\",\n \"--dsw-static-neutral-bluish-60\": \"#bac2de\",\n \"--dsw-static-neutral-bluish-700\": \"#313244\",\n \"--dsw-static-neutral-bluish-750\": \"#313244\",\n \"--dsw-static-neutral-bluish-75\": \"#bac2de\",\n \"--dsw-static-neutral-bluish-800\": \"#313244\",\n \"--dsw-static-neutral-bluish-850\": \"#1e1e2e\",\n \"--dsw-static-neutral-bluish-875\": \"#181825\",\n \"--dsw-static-neutral-bluish-900\": \"#181825\",\n \"--dsw-static-neutral-bluish-950\": \"#11111b\",\n \"--dsw-static-red-100\": \"color-mix(in srgb, #f38ba8 20%, #1e1e2e)\",\n \"--dsw-static-red-400\": \"color-mix(in srgb, #f38ba8 70%, #1e1e2e)\",\n \"--dsw-static-red-500\": \"#f38ba8\",\n \"--dsw-static-red-50\": \"color-mix(in srgb, #f38ba8 10%, #1e1e2e)\",\n \"--dsw-static-red-600\": \"#f38ba8\",\n \"--dsw-static-red-900\": \"color-mix(in srgb, #f38ba8 34%, #1e1e2e)\",\n \"--dsw-alias-bg-base\": \"var(--dsw-static-neutral-bluish-950)\",\n \"--dsw-alias-bg-layer-1\": \"var(--dsw-static-neutral-bluish-875)\",\n \"--dsw-alias-bg-layer-2\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-bg-layer-3\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-bg-mask-1\": \"rgba(0, 0, 0, 0.5)\",\n \"--dsw-alias-bg-mask-2\": \"rgba(0, 0, 0, 0.2)\",\n \"--dsw-alias-bg-mask-3\": \"rgba(0, 0, 0, 0.48)\",\n \"--dsw-alias-bg-mask-photo\": \"rgba(0, 0, 0, 0.88)\",\n \"--dsw-alias-bg-mask-drop\": \"rgba(39, 39, 48, 0.7)\",\n \"--dsw-alias-bg-module-platform\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-bg-multi-select\": \"var(--dsw-static-neutral-850)\",\n \"--dsw-alias-bg-overlay\": \"var(--dsw-static-neutral-bluish-700)\",\n \"--dsw-alias-bg-skeleton\": \"rgba(255, 255, 255, 0.08)\",\n \"--dsw-alias-border-inverted2\": \"rgba(255, 255, 255, 0.08)\",\n \"--dsw-alias-border-inverted\": \"rgba(255, 255, 255, 0.06)\",\n \"--dsw-alias-border-l1\": \"rgba(255, 255, 255, 0.06)\",\n \"--dsw-alias-border-l2-darkmode-thin\": \"rgba(255, 255, 255, 0.06)\",\n \"--dsw-alias-border-l2\": \"rgba(255, 255, 255, 0.12)\",\n \"--dsw-alias-border-l3\": \"rgba(255, 255, 255, 0.16)\",\n \"--dsw-alias-border-l4\": \"rgba(255, 255, 255, 0.2)\",\n \"--dsw-alias-brand-primary-invert\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-brand-primary-new-colorprimary-new-color\": \"#89b4fa\",\n \"--dsw-alias-brand-primary\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-brand-text\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-button-contrast-fill\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-button-elevated-fill\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-button-floating-fill\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-button-floating-hover\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-button-ghost-active-border\": \"var(--dsw-static-neutral-bluish-600)\",\n \"--dsw-alias-button-ghost-active-fill\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-button-ghost-active-hover\": \"var(--dsw-static-neutral-bluish-700)\",\n \"--dsw-alias-button-info-fill\": \"var(--dsw-static-deepseek-400)\",\n \"--dsw-alias-button-info-hover\": \"var(--dsw-static-deepseek-500)\",\n \"--dsw-alias-button-primary-dimmed\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-button-primary-fill\": \"var(--dsw-alias-brand-primary)\",\n \"--dsw-alias-button-primary-hover\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-alias-button-tool-bar-fill-invisible\": \"rgba(31, 31, 31, 0.36)\",\n \"--dsw-alias-button-tool-bar-fill\": \"rgba(84, 85, 87, 0.5)\",\n \"--dsw-alias-button-tool-bar-hover\": \"rgba(84, 85, 87, 0.6)\",\n \"--dsw-alias-interactive-bg-active\": \"rgba(255, 255, 255, 0.14)\",\n \"--dsw-alias-interactive-bg-hover-accent\": \"rgba(255, 255, 255, 0.24)\",\n \"--dsw-alias-interactive-bg-hover-danger\": \"rgba(242, 90, 90, 0.15)\",\n \"--dsw-alias-interactive-bg-hover-solid\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-interactive-bg-hover\": \"rgba(255, 255, 255, 0.08)\",\n \"--dsw-alias-label-caption\": \"var(--dsw-static-neutral-bluish-600)\",\n \"--dsw-alias-label-dimmed\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-label-primary-bluish\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-label-primary-dimmed\": \"var(--dsw-static-neutral-bluish-100)\",\n \"--dsw-alias-label-primary-foreground\": \"var(--dsw-static-neutral-bluish-1000)\",\n \"--dsw-alias-label-primary-inverted\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-label-primary\": \"var(--dsw-static-neutral-bluish-50)\",\n \"--dsw-alias-label-secondary\": \"var(--dsw-static-neutral-bluish-300)\",\n \"--dsw-alias-label-tertiary\": \"var(--dsw-static-neutral-bluish-400)\",\n \"--dsw-alias-markdown-citation\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-markdown-code-block-banner\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-markdown-code-block\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-alias-markdown-code-segment-selected\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-alias-markdown-code-segment-unselected\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-alias-markdown-inline-code\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-markdown-placeholder\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-markdown-tag\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-alias-scrollbar-bg-l1\": \"var(--dsw-static-neutral-700)\",\n \"--dsw-alias-scrollbar-bg-l2\": \"var(--dsw-static-neutral-600)\",\n \"--dsw-alias-scrollbar-hover-l1\": \"var(--dsw-static-neutral-600)\",\n \"--dsw-alias-scrollbar-hover-l2\": \"var(--dsw-static-neutral-550)\",\n \"--dsw-alias-state-business-primary\": \"var(--dsw-static-deepseek-400)\",\n \"--dsw-alias-state-business-tertiary\": \"var(--dsw-static-deepseek-800)\",\n \"--dsw-alias-state-error-primary\": \"var(--dsw-static-red-400)\",\n \"--dsw-alias-state-error-secondary\": \"var(--dsw-static-red-400)\",\n \"--dsw-alias-state-success-primary\": \"var(--dsw-static-green-500)\",\n \"--dsw-alias-state-success-secondary\": \"var(--dsw-static-green-400)\",\n \"--dsw-alias-state-success-tertiary\": \"var(--dsw-static-green-900)\",\n \"--dsw-alias-state-warn-label\": \"var(--dsw-static-amber-600)\",\n \"--dsw-alias-state-warn-primary\": \"var(--dsw-static-amber-500)\",\n \"--dsw-alias-state-warn-secondary\": \"var(--dsw-static-amber-400)\",\n \"--dsw-alias-state-warn-tertiary\": \"var(--dsw-static-amber-900)\",\n \"--dsw-alias-toast-bg\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-alias-tooltip-bg\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-specific-bubble-highlight\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-specific-bubble\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-specific-input-major\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-specific-login-input\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-specific-menu\": \"var(--dsw-alias-bg-layer-3)\",\n \"--dsw-specific-selector\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-specific-sidebar-fill\": \"var(--dsw-static-neutral-bluish-900)\",\n \"--dsw-specific-sidebar-nav-item-active-accent\": \"var(--dsw-static-neutral-bluish-800)\",\n \"--dsw-specific-sidebar-nav-item-active\": \"var(--dsw-static-neutral-bluish-750)\",\n \"--dsw-specific-sidebar-nav-item-hover\": \"var(--dsw-static-neutral-bluish-850)\",\n \"--dsw-specific-tip\": \"var(--dsw-static-neutral-bluish-800)\",\n },\n}\n\nexport const CATPPUCCIN_FLAVORS: readonly CatppuccinFlavorInfo[] = [\n CATPPUCCIN_LATTE,\n CATPPUCCIN_FRAPPE,\n CATPPUCCIN_MACCHIATO,\n CATPPUCCIN_MOCHA,\n]\n","/**\n * Runtime seam stamper for the Catppuccin glass layer.\n *\n * The glass stylesheet keys off stable data-* hooks (`data-dsh-glass-frame`,\n * `data-dsh-glass-trajectory`, `data-dsh-glass-stats`, …) that are NOT part\n * of the stock DSH markup, so this module stamps them onto the matching\n * elements at runtime — the stylesheet works with zero base edits. Each\n * selector uses only stable attributes already present in the stock UI\n * (`data-composer-card`, `data-conversation-composer-overlay`, `data-slot`,\n * ARIA roles) or lightningcss-preserved class-name substrings.\n *\n * Stamps are idempotent and inert without the `data-dsh-glass` root attribute\n * (the whole stylesheet is gated on it), so they are simply left in place when\n * the layer flips off — \"off\" still renders the exact stock UI.\n */\n\ninterface Seam {\n /** Attribute to stamp (bare name; value is always ''). */\n readonly attribute: string\n /** CSS selector for the element(s) to stamp. */\n readonly selector: string\n /** Stamp only the first (topmost) match, not every descendant match. */\n readonly first?: boolean\n}\n\nconst SEAMS: readonly Seam[] = [\n // The layout frame: the sidebar column's direct parent.\n { attribute: 'data-dsh-glass-frame', selector: ':has(> [class*=\"sidebarCol\"])' },\n // The sidebar content root (topmost `root` under the column — settings\n // internals also carry a `root` class but sit deeper, so first match wins).\n { attribute: 'data-dsh-glass-sidebar-root', selector: '[class*=\"sidebarCol\"] [class*=\"root\"]', first: true },\n // New-session button (a raised-surface seam).\n { attribute: 'data-dsh-glass-surface', selector: 'button[class*=\"newSession\"]' },\n // Trajectory view (the composer-overlay view).\n { attribute: 'data-dsh-glass-trajectory', selector: '[data-conversation-composer-overlay]' },\n // Details panel (topmost `root` under the details column).\n { attribute: 'data-dsh-glass-details', selector: '[class*=\"detailsCol\"] [class*=\"root\"]', first: true },\n // Composer bar root: the composer card's direct parent.\n { attribute: 'data-dsh-glass-inputbar', selector: ':has(> [data-composer-card])' },\n // Composer attach \"+\" button.\n { attribute: 'data-dsh-glass-add', selector: '[data-composer-card] [class*=\"add\"]' },\n // Session stats line under the composer (composer.dock slot).\n { attribute: 'data-dsh-glass-stats', selector: '[data-slot=\"conversation.composer.dock\"] [class*=\"root\"]' },\n]\n\nfunction stamp(seam: Seam): void {\n if (seam.first) {\n const el = document.querySelector(seam.selector)\n if (el !== null && !el.hasAttribute(seam.attribute)) el.setAttribute(seam.attribute, '')\n return\n }\n for (const el of document.querySelectorAll(seam.selector)) {\n if (!el.hasAttribute(seam.attribute)) el.setAttribute(seam.attribute, '')\n }\n}\n\nfunction stampAll(): void {\n for (const seam of SEAMS) stamp(seam)\n}\n\n/**\n * Stamp the seams once, then keep them stamped as React remounts nodes.\n * @returns a disposer that disconnects the observer.\n */\nexport function startGlassSeamStamper(): () => void {\n stampAll()\n const observer = new MutationObserver(() => { stampAll() })\n observer.observe(document.documentElement, { childList: true, subtree: true })\n return () => { observer.disconnect() }\n}\n","/**\n * Catppuccin glass layer — one toggleable glassmorphism skin over the whole\n * Web surface, riding on top of the Catppuccin themes. Everything the layer\n * owns is an effect: the CSS hooks ride a `data-dsh-glass` attribute on\n * <html> (the stylesheet only applies under it), the seam stamps ride a\n * MutationObserver, and the page-edge fade bands are DOM elements — so\n * switching the flag off (or unloading the plugin) restores the stock UI\n * exactly: no residue, no reload.\n *\n * The page ground is a SOLID colour: the active theme's own `bg-base`\n * token (Latte / Frappé / Macchiato / Mocha), with the brightness knob\n * mixing white/black straight into it. The earlier animated ambient scene\n * (gradient wash + drifting blobs + hue rotation) was removed in favour of\n * this flat ground.\n *\n * The enable flag and every knob persist in localStorage: client-only visual\n * preferences (like the selected-session key), written and read by this\n * plugin alone, so the layer needs no host configuration.\n */\nimport type { Context } from '@deepseek-ai/cordis'\n// Type-only: pulls the theme plugin's Context merge (ctx.theme + theme/change).\nimport type {} from '@deepseek-ai/dsh-client-ui-theme/client'\nimport { startGlassSeamStamper } from './glass-seams.ts'\n\n/** html attribute selecting the glass layer: CSS hooks and page effects. */\nexport const GLASS_ATTRIBUTE = 'data-dsh-glass'\n\n/** html attribute selecting the mica (floating-card) layout rules. */\nexport const GLASS_FLOAT_ATTRIBUTE = 'data-dsh-glass-float'\n\n/** html attribute selecting the compatibility (stock-layout) rules. */\nexport const GLASS_COMPAT_ATTRIBUTE = 'data-dsh-glass-compat'\n\n/** localStorage key carrying the layer enable flag. */\nexport const GLASS_ENABLED_KEY = 'dsh.catppuccin.glass.enabled'\n\n/** Default state when nothing is stored yet: off (the stock UI stays stock). */\nexport const DEFAULT_ENABLED = false\n\n/** Tunable glass knobs. */\nexport interface GlassSettings {\n /** Rendering mode: mica (frosted floating cards) or the stock layout with a generic glass material. */\n mode: 'mica' | 'compat'\n /** Glass backdrop blur radius, px. */\n blur: number\n /** Glass fill opacity, 0-100 (50 = the shipped look; drives the frost multiplier). */\n frost: number\n /** Backdrop brightness, 0-100 (0 = pure black, 50 = transparent, 100 = pure white; half-range per scheme). */\n brightness: number\n}\n\n/** The full state the settings row mirrors (settings + enable flag + scheme). */\nexport interface GlassRowState extends GlassSettings {\n /** Layer enable flag. */\n enabled: boolean\n /** Resolved palette is dark (the brightness knob darkens). */\n dark: boolean\n}\n\n/**\n * Shipped knob defaults — aligned with the reference project\n * (DSH-Transparent-UI-Plugin / Aqua): mica mode, blur 2px, frost 20\n * (the 0-100 slider maps to a 0-1.4 alpha multiplier via frost/50, so 20\n * reads as a light frost) and neutral backdrop brightness.\n */\nconst SETTINGS_DEFAULTS: GlassSettings = {\n mode: 'mica',\n blur: 2,\n frost: 20,\n brightness: 50,\n}\n\n/** Numeric knob keys and their localStorage names. */\nconst NUMERIC_KEYS = {\n blur: 'dsh.catppuccin.glass.blur',\n frost: 'dsh.catppuccin.glass.frost',\n brightness: 'dsh.catppuccin.glass.brightness',\n} as const\ntype NumericKey = keyof typeof NUMERIC_KEYS\n\nconst MODE_KEY = 'dsh.catppuccin.glass.mode'\n\n/** Clamp a numeric knob into its sane range. */\nfunction clampSetting(key: NumericKey, value: number): number {\n const max = key === 'blur' ? 40 : 100\n return Number.isFinite(value) ? Math.min(max, Math.max(0, value)) : SETTINGS_DEFAULTS[key]\n}\n\n/** Read one numeric knob from localStorage (absent/parse failure means the default). */\nfunction readSetting(key: NumericKey): number {\n try {\n const raw = localStorage.getItem(NUMERIC_KEYS[key])\n return raw === null ? SETTINGS_DEFAULTS[key] : clampSetting(key, Number(raw))\n } catch {\n return SETTINGS_DEFAULTS[key]\n }\n}\n\n/** Persist one numeric knob (storage failures keep the in-memory state). */\nfunction writeSetting(key: NumericKey, value: number): void {\n try {\n localStorage.setItem(NUMERIC_KEYS[key], String(value))\n } catch {\n /* in-memory state still applies for this tab */\n }\n}\n\n/** Read the rendering mode ('mica' or 'compat'). */\nfunction readMode(): 'mica' | 'compat' {\n try {\n return localStorage.getItem(MODE_KEY) === 'compat' ? 'compat' : 'mica'\n } catch {\n return 'mica'\n }\n}\n\n/** Persist the rendering mode. */\nfunction writeMode(value: 'mica' | 'compat'): void {\n try {\n localStorage.setItem(MODE_KEY, value)\n } catch {\n /* in-memory state still applies */\n }\n}\n\n/** Read the persisted enable flag (absent storage means the default). */\nfunction readEnabled(): boolean {\n try {\n const raw = localStorage.getItem(GLASS_ENABLED_KEY)\n return raw === null ? DEFAULT_ENABLED : raw === 'true'\n } catch {\n return DEFAULT_ENABLED\n }\n}\n\n/** Persist the enable flag (storage failures keep the in-memory state). */\nfunction writeEnabled(value: boolean): void {\n try {\n localStorage.setItem(GLASS_ENABLED_KEY, String(value))\n } catch {\n /* in-memory state still applies for this tab */\n }\n}\n\n/** Resolved scheme from the theme service (falls back to the body attribute). */\nfunction resolveDark(ctx: Context): boolean {\n try {\n return ctx.theme.getTheme().active.colorScheme === 'dark'\n } catch {\n return document.body.hasAttribute('data-ds-dark-theme')\n }\n}\n\n/**\n * The page-edge fade bands injected while enabled (ported from\n * DSH-Transparent-UI-Plugin): two fixed-position, click-through strips\n * that blur the chat content melting into the viewport edges. Both are\n * removed together on disable. The page ground itself is pure CSS (the\n * body rule), so no backdrop element is needed.\n */\nconst FADE_MARKUP = [\n '<span data-dsh-glass-fade=\"top\" aria-hidden=\"true\"></span>',\n '<span data-dsh-glass-fade=\"bottom\" aria-hidden=\"true\"></span>',\n].join('')\n\n/**\n * Owns the glass layer lifecycle: reads the durable enable flag and knobs,\n * and applies / retracts every layer on change. Cross-tab flips arrive through\n * the storage event; the seam observer and every subscription are released\n * when the plugin fiber is disposed.\n */\nexport class GlassLayer {\n private enabled = false\n private settings: GlassSettings = { ...SETTINGS_DEFAULTS }\n /** Cached snapshot for the settings row (stable reference between changes). */\n private snapshot: GlassRowState\n private readonly listeners = new Set<() => void>()\n private dark = false\n private seamDisposer: (() => void) | undefined\n private readonly ctx: Context\n\n /**\n * @param ctx - owning client context (listeners ride this fiber).\n */\n constructor(ctx: Context) {\n this.ctx = ctx\n this.enabled = readEnabled()\n this.reloadSettings()\n this.dark = resolveDark(ctx)\n this.snapshot = this.buildSnapshot()\n\n ctx.effect(() => {\n const onStorage = (event: StorageEvent): void => {\n if (event.key === null) { this.reloadSettings(); this.enabled = readEnabled(); this.sync() }\n else if (event.key === GLASS_ENABLED_KEY) {\n this.enabled = readEnabled()\n this.sync()\n } else if (event.key === MODE_KEY || event.key in NUMERIC_KEYS) {\n this.reloadSettings()\n if (this.enabled) this.applySettings()\n this.publish()\n }\n }\n window.addEventListener('storage', onStorage)\n // Follow the Appearance switch: the brightness knob's half-range and\n // the mix direction flip with the resolved scheme. Runs even while\n // disabled so the settings row stays correct.\n const themeListener = ctx.on('theme/change', () => {\n this.dark = resolveDark(ctx)\n if (this.enabled) this.applySettings()\n this.publish()\n })\n return () => {\n window.removeEventListener('storage', onStorage)\n themeListener()\n this.unmount()\n }\n }, 'catppuccin: glass layer lifecycle')\n\n // Apply the restored state: mount the layer when the persisted flag is on\n // (the settings row reflects the same snapshot, so the two stay in sync).\n this.sync()\n }\n\n /** Current state snapshot (stable reference until the next change). */\n getSnapshot(): GlassRowState {\n return this.snapshot\n }\n\n /** Subscribe to snapshot changes. Returns the disposer. */\n subscribe(listener: () => void): () => void {\n this.listeners.add(listener)\n return () => { this.listeners.delete(listener) }\n }\n\n /** Flip the layer: persist, then apply or retract every owned effect. */\n setEnabled(value: boolean): void {\n if (value === this.enabled) return\n this.enabled = value\n writeEnabled(value)\n this.sync()\n }\n\n /** Set the rendering mode ('mica' or 'compat'). */\n setMode(value: 'mica' | 'compat'): void {\n if (value === this.settings.mode) return\n this.settings.mode = value\n writeMode(value)\n if (this.enabled) this.applySettings()\n this.publish()\n }\n\n /** Set the glass blur radius (px). */\n setBlur(value: number): void {\n const next = clampSetting('blur', value)\n if (next === this.settings.blur) return\n this.settings.blur = next\n writeSetting('blur', next)\n if (this.enabled) this.applySettings()\n this.publish()\n }\n\n /** Set the glass frost amount (0-100). */\n setFrost(value: number): void {\n const next = clampSetting('frost', value)\n if (next === this.settings.frost) return\n this.settings.frost = next\n writeSetting('frost', next)\n if (this.enabled) this.applySettings()\n this.publish()\n }\n\n /** Set the backdrop brightness (0-100: 0 = pure black, 50 = transparent, 100 = pure white). */\n setBrightness(value: number): void {\n const next = clampSetting('brightness', value)\n if (next === this.settings.brightness) return\n this.settings.brightness = next\n writeSetting('brightness', next)\n if (this.enabled) this.applySettings()\n this.publish()\n }\n\n /** Restore every knob to the shipped defaults (persisted immediately). */\n resetDefaults(): void {\n this.settings = { ...SETTINGS_DEFAULTS }\n writeMode(this.settings.mode)\n writeSetting('blur', this.settings.blur)\n writeSetting('frost', this.settings.frost)\n writeSetting('brightness', this.settings.brightness)\n if (this.enabled) this.applySettings()\n this.publish()\n }\n\n /** Re-read every knob from localStorage into memory. */\n private reloadSettings(): void {\n this.settings = {\n mode: readMode(),\n blur: readSetting('blur'),\n frost: readSetting('frost'),\n brightness: readSetting('brightness'),\n }\n }\n\n private buildSnapshot(): GlassRowState {\n return { ...this.settings, enabled: this.enabled, dark: this.dark }\n }\n\n private publish(): void {\n this.snapshot = this.buildSnapshot()\n for (const listener of this.listeners) listener()\n }\n\n private sync(): void {\n if (this.enabled) this.mount()\n else this.unmount()\n this.publish()\n }\n\n /** Write the knob-driven CSS variables and mode attributes onto <html>. */\n private applySettings(): void {\n const style = document.documentElement.style\n style.setProperty('--dsh-glass-blur', `${this.settings.blur}px`)\n // Frost 0-100 → a 0-1.4 alpha multiplier (50 = 1x). Capped so max frost\n // stays translucent frosted glass instead of collapsing to a solid slab.\n style.setProperty('--dsh-glass-frost', String(Math.min(this.settings.frost / 50, 1.4)))\n // Backdrop brightness: dark mode darkens (0 = pure black, 50 = off),\n // light mode brightens (50 = off, 100 = pure white) — the knob's range\n // and the mix direction both follow the resolved scheme. The body\n // background rule mixes these fractions straight into the solid ground.\n const dark = this.dark\n style.setProperty('--dsh-glass-brightness-black', String(dark ? Math.max(0, (50 - this.settings.brightness) / 50) : 0))\n style.setProperty('--dsh-glass-brightness-white', String(dark ? 0 : Math.max(0, (this.settings.brightness - 50) / 50)))\n\n // Rendering mode: the float rules key off data-dsh-glass-float; the\n // compat (generic glass) rules key off data-dsh-glass-compat.\n const compat = this.settings.mode === 'compat'\n document.documentElement.toggleAttribute(GLASS_FLOAT_ATTRIBUTE, !compat)\n document.documentElement.toggleAttribute(GLASS_COMPAT_ATTRIBUTE, compat)\n }\n\n private mount(): void {\n document.documentElement.setAttribute(GLASS_ATTRIBUTE, '')\n this.applySettings()\n this.ensureFades()\n if (this.seamDisposer === undefined) this.seamDisposer = startGlassSeamStamper()\n }\n\n private unmount(): void {\n document.documentElement.removeAttribute(GLASS_ATTRIBUTE)\n document.documentElement.removeAttribute(GLASS_FLOAT_ATTRIBUTE)\n document.documentElement.removeAttribute(GLASS_COMPAT_ATTRIBUTE)\n for (const node of document.querySelectorAll('[data-dsh-glass-fade]')) node.remove()\n this.seamDisposer?.()\n this.seamDisposer = undefined\n }\n\n /** Insert the page-edge fade bands (or reuse the existing ones). */\n private ensureFades(): void {\n if (document.querySelector('[data-dsh-glass-fade]') !== null) return\n const holder = document.createElement('div')\n holder.innerHTML = FADE_MARKUP\n for (const node of Array.from(holder.children)) {\n if (node instanceof HTMLElement) document.body.append(node)\n }\n }\n}\n","/**\n * Catppuccin glass settings row — registered into the General settings\n * section (`settings.general.item`, right under the Catppuccin flavour row).\n * Holds the master on/off switch plus every glass knob: mode (mica /\n * compatibility), blur, frost and backdrop brightness. Every write goes\n * straight through to the glass layer, so the skin moves live.\n */\nimport { useSyncExternalStore } from 'react'\nimport type { PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots'\nimport type { GlassRowState } from './glass-layer.ts'\nimport css from './GlassRow.module.css'\n\n/** Injected business face: the layer state seat plus every knob write. */\nexport interface GlassRowInjected {\n /** Current layer state snapshot. */\n getState: () => GlassRowState\n /** Subscribe to layer state changes. Returns the disposer. */\n subscribe: (listener: () => void) => () => void\n /** Switch the glass layer on or off. */\n setEnabled: (enabled: boolean) => void\n /** Set the rendering mode ('mica' floating cards or 'compat' stock layout). */\n setMode: (mode: 'mica' | 'compat') => void\n /** Set the glass blur radius, px. */\n setBlur: (value: number) => void\n /** Set the glass frost amount, 0-100. */\n setFrost: (value: number) => void\n /** Set the backdrop brightness, 0-100. */\n setBrightness: (value: number) => void\n /** Restore every knob to the shipped defaults. */\n resetDefaults: () => void\n}\n\n/** Full component props: runtime share + locale seat + injected face. */\nexport type GlassRowProps = PropsRuntime<'settings.general.item'> & PropsLocale<'catppuccin'> & GlassRowInjected\n\n/** One slider + number box, wired to a single value. */\nfunction Knob(props: {\n label: string\n value: number\n min: number\n max: number\n step: number\n unit: string\n onChange: (value: number) => void\n}): React.JSX.Element {\n const { label, value, min, max, step, unit, onChange } = props\n const clamp = (n: number): number => Math.min(max, Math.max(min, Number.isFinite(n) ? n : min))\n return (\n <label className={css.knob}>\n <span className={css.knobLabel}>{label}</span>\n <input\n type=\"range\"\n className={css.slider}\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={(e) => { onChange(clamp(Number(e.target.value))) }}\n />\n <span className={css.numberWrap}>\n <input\n type=\"number\"\n className={css.number}\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={(e) => { onChange(clamp(Number(e.target.value))) }}\n />\n <span className={css.unit}>{unit}</span>\n </span>\n </label>\n )\n}\n\n/** A two-option segmented picker. */\nfunction Segmented<T extends string>(props: {\n label: string\n value: T\n options: readonly { id: T; label: string }[]\n onSelect: (value: T) => void\n}): React.JSX.Element {\n const { label, value, options, onSelect } = props\n return (\n <div className={css.segmented} role=\"group\" aria-label={label}>\n {options.map((option) => (\n <button\n key={option.id}\n type=\"button\"\n className={option.id === value ? css.segActive : css.seg}\n aria-pressed={option.id === value}\n onClick={() => { onSelect(option.id) }}\n >\n {option.label}\n </button>\n ))}\n </div>\n )\n}\n\n/**\n * Render the glass row: title, the master switch, and — while enabled — the\n * mode picker and every knob.\n * @param props - composed slot props.\n * @returns the General section row.\n */\nexport function GlassRow({ t, getState, subscribe, setEnabled, setMode, setBlur, setFrost, setBrightness, resetDefaults }: GlassRowProps): React.JSX.Element {\n const state = useSyncExternalStore(subscribe, getState)\n const { enabled, mode, blur, frost, brightness, dark } = state\n\n // The brightness knob only ever offers the half that makes sense for the\n // resolved scheme: dark mode darkens (0-50), light mode brightens (50-100).\n const bgMin = dark ? 0 : 50\n const bgMax = dark ? 50 : 100\n const bgDisplay = Math.min(bgMax, Math.max(bgMin, brightness))\n\n return (\n <div className={css.group}>\n <div className={css.title}>{t('glass.title')}</div>\n <div className={css.description}>{t('glass.description')}</div>\n <div className={css.controls}>\n <div className={css.row}>\n <span className={css.rowLabel}>{t('glass.enable')}</span>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={enabled}\n aria-label={t('glass.enable')}\n className={enabled ? css.toggleOn : css.toggle}\n onClick={() => { setEnabled(!enabled) }}\n >\n <span className={css.check} aria-hidden=\"true\">{enabled ? '✓' : ''}</span>\n </button>\n </div>\n {enabled && (\n <>\n <div className={css.row}>\n <span className={css.rowLabel}>{t('glass.mode')}</span>\n <Segmented\n label={t('glass.mode')}\n value={mode}\n options={[\n { id: 'mica', label: t('glass.modeMica') },\n { id: 'compat', label: t('glass.modeCompat') },\n ]}\n onSelect={setMode}\n />\n </div>\n <div className={css.rowHint}>{t('glass.modeHint')}</div>\n <Knob label={t('glass.blur')} value={blur} min={0} max={40} step={0.5} unit=\"px\" onChange={setBlur} />\n <Knob label={t('glass.frost')} value={frost} min={0} max={100} step={1} unit=\"%\" onChange={setFrost} />\n <Knob label={t('glass.brightness')} value={bgDisplay} min={bgMin} max={bgMax} step={1} unit=\"%\" onChange={setBrightness} />\n <div className={css.knobHint}>\n {t(dark ? 'glass.brightnessHintDark' : 'glass.brightnessHintLight')}\n </div>\n <div className={css.row}>\n <button type=\"button\" className={css.resetButton} onClick={() => { resetDefaults() }}>\n {t('glass.reset')}\n </button>\n </div>\n </>\n )}\n </div>\n </div>\n )\n}\n","/**\n * Update-check settings row — one General-section preference row that asks\n * the Host's `/catppuccin/check-update` route for the latest published npm\n * version and reports whether this install is current. Detection is Host-side\n * (Node fetch, no CORS); the row renders the verdict and, when an update is\n * available, offers the copyable CLI upgrade command. Upgrading itself stays\n * a terminal action (`dsh plugin … add @latest`) — the row never touches the\n * profile workspace.\n */\nimport { useState } from 'react'\nimport type { PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots'\nimport type { UpdateCheckPayload } from '../update-check.ts'\n\n/** Injected business face of the row (assembled in apply). */\nexport interface UpdateRowInjected {\n /** Ask the Host for the update verdict (same-origin fetch of the route). */\n check: () => Promise<UpdateCheckPayload>\n}\n\n/** Full component props: runtime share + locale seat + injected face. */\nexport type UpdateRowProps = PropsRuntime<'settings.general.item'> & PropsLocale<'catppuccin'> & UpdateRowInjected\n\n/** One phase of the row's interaction. */\ntype Phase = 'idle' | 'checking' | 'done'\n\n/** Copy the upgrade command; falls back to no-op when the clipboard is unavailable. */\nasync function copyCommand(text: string): Promise<boolean> {\n try {\n await navigator.clipboard.writeText(text)\n return true\n } catch {\n return false\n }\n}\n\n/**\n * Render the update-check row: title, description, a check button, and the\n * verdict once checked.\n * @param props - composed slot props.\n * @returns the row element tree.\n */\nexport function UpdateRow({ t, check }: UpdateRowProps): React.JSX.Element {\n const [phase, setPhase] = useState<Phase>('idle')\n const [payload, setPayload] = useState<UpdateCheckPayload | null>(null)\n const [copied, setCopied] = useState(false)\n\n const runCheck = async (): Promise<void> => {\n setPhase('checking')\n setCopied(false)\n try {\n setPayload(await check())\n } catch {\n setPayload({ ok: false, error: 'network' })\n } finally {\n setPhase('done')\n }\n }\n\n const buttonStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n padding: '6px 12px',\n borderRadius: 8,\n border: '1px solid var(--dsw-alias-border-l1)',\n background: 'transparent',\n color: 'var(--dsw-alias-label-primary)',\n cursor: phase === 'checking' ? 'default' : 'pointer',\n font: 'inherit',\n opacity: phase === 'checking' ? 0.6 : 1,\n }\n\n return (\n <div style={{ borderBottom: '1px solid var(--dsw-alias-border-l2)', display: 'flex', flexDirection: 'column', gap: '10px', padding: '16px 0' }}>\n <div style={{ color: 'var(--dsw-alias-label-primary)', fontSize: 14, lineHeight: '22px' }}>\n {t('update.title')}\n </div>\n <div style={{ color: 'var(--dsw-alias-label-tertiary)', fontSize: 12, lineHeight: '18px' }}>\n {t('update.description')}\n </div>\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '8px', alignItems: 'center' }}>\n <button type=\"button\" disabled={phase === 'checking'} onClick={() => void runCheck()} style={buttonStyle}>\n {phase === 'checking' ? t('update.checking') : t('update.check')}\n </button>\n {payload?.ok === true && payload.current !== undefined && (\n <span style={{ color: 'var(--dsw-alias-label-secondary)', fontSize: 12, lineHeight: '18px' }}>\n {t('update.current')} {payload.current}\n </span>\n )}\n </div>\n\n {phase === 'done' && payload !== null && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {payload.ok === true ? (\n payload.outdated === true && payload.latest !== undefined ? (\n <>\n <div style={{ color: 'var(--dsw-alias-label-primary)', fontSize: 12, lineHeight: '18px' }}>\n {t('update.available')} <strong>{payload.latest}</strong>\n </div>\n {payload.updateCommand !== undefined && (\n <>\n <div style={{ color: 'var(--dsw-alias-label-tertiary)', fontSize: 12, lineHeight: '18px' }}>\n {t('update.commandHint')}\n </div>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '8px', alignItems: 'center' }}>\n <code style={{\n flex: '1 1 260px',\n padding: '6px 10px',\n borderRadius: 8,\n border: '1px solid var(--dsw-alias-border-l1)',\n background: 'var(--dsw-alias-bg-layer-1)',\n color: 'var(--dsw-alias-label-primary)',\n fontSize: 12,\n lineHeight: '18px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace',\n }}>\n {payload.updateCommand}\n </code>\n <button\n type=\"button\"\n onClick={() => { void copyCommand(payload.updateCommand ?? '').then(setCopied) }}\n style={{ ...buttonStyle, cursor: 'pointer' }}\n >\n {copied ? t('update.copied') : t('update.copy')}\n </button>\n </div>\n <div style={{ color: 'var(--dsw-alias-label-tertiary)', fontSize: 12, lineHeight: '18px' }}>\n {t('update.restartHint')}\n </div>\n </>\n )}\n </>\n ) : (\n <div style={{ color: 'var(--dsw-alias-label-primary)', fontSize: 12, lineHeight: '18px' }}>\n {t('update.upToDate')}\n </div>\n )\n ) : (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '8px', alignItems: 'center' }}>\n <span style={{ color: 'var(--dsw-alias-label-tertiary)', fontSize: 12, lineHeight: '18px' }}>\n {t('update.failed')}\n </span>\n <button type=\"button\" onClick={() => void runCheck()} style={{ ...buttonStyle, cursor: 'pointer' }}>\n {t('update.retry')}\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n )\n}\n","/**\n * Shared contract of the update-check feature — consumed by both halves:\n * the Host registers an exact webServer route answering this JSON payload,\n * and the Client settings row fetches that same-origin route and renders it.\n * This module is dependency-free so both bundles inline it.\n */\nimport { compareVersions, parseVersion } from './versions.ts'\n\n/** The plugin's own npm name (the registry lookup key). */\nexport const PACKAGE_NAME = '@nonamelego/dsh-catppuccin'\n\n/**\n * npm registry abbreviated packument endpoint (the `install-v1` document).\n * The `latest` endpoint alone is not enough: this project ships prereleases\n * under the `beta` dist-tag while `latest` stays on the last stable, so the\n * check reads `dist-tags` to serve both channels.\n */\nexport const REGISTRY_PACKUMENT_URL =\n `https://registry.npmjs.org/${PACKAGE_NAME.replace('/', '%2F')}`\n\n/** Host route the Client row fetches (exact match, same origin). */\nexport const UPDATE_ROUTE_PATH = '/catppuccin/check-update'\n\n/** Network budget for the Host's registry lookup. */\nexport const UPDATE_FETCH_TIMEOUT_MS = 8000\n\n/** Release channels the check knows about. */\nexport type UpdateChannel = 'latest' | 'beta'\n\n/** The `dist-tags` object of an npm packument. */\nexport interface DistTags {\n latest?: string\n beta?: string\n}\n\n/** The newest release a given install should chase, and on which channel. */\nexport interface NewestRelease {\n version: string\n channel: UpdateChannel\n}\n\n/**\n * The copyable CLI upgrade command for one channel (`dsh plugin` is a thin\n * pnpm forwarder; the profile name varies per deployment).\n */\nexport function updateCommandFor(channel: UpdateChannel): string {\n return `dsh plugin --profile web add ${PACKAGE_NAME}@${channel}`\n}\n\n/**\n * Pick the newest release worth reporting for the given install:\n * - a stable install only chases the `latest` tag (never downgrades onto a\n * beta), so a stable user on the last stable sees \"up to date\";\n * - a prerelease install (e.g. a `beta`-tagged version) also chases `beta`,\n * so beta users see newer betas — and a stable release that outranks their\n * prerelease promotes them via `@latest`.\n * @param current - the installed version.\n * @param tags - the registry's dist-tags.\n * @returns the newest candidate and its channel, or null when nothing applies.\n */\nexport function selectNewest(current: string, tags: DistTags): NewestRelease | null {\n const candidates: NewestRelease[] = []\n if (tags.latest !== undefined) candidates.push({ version: tags.latest, channel: 'latest' })\n const parsed = parseVersion(current)\n if (tags.beta !== undefined && parsed !== null && parsed.prerelease.length > 0) {\n candidates.push({ version: tags.beta, channel: 'beta' })\n }\n if (candidates.length === 0) return null\n let best = candidates[0]\n for (const candidate of candidates.slice(1)) {\n if (compareVersions(best.version, candidate.version) < 0) best = candidate\n }\n return best\n}\n\n/**\n * JSON payload of the update check. `ok: false` carries a human-readable\n * `error`; `ok: true` carries the comparison result. The Host owns the\n * semver comparison and the channel selection (single source of truth), so\n * the Client never parses versions itself.\n */\nexport interface UpdateCheckPayload {\n /** Whether the registry lookup succeeded. */\n ok: boolean\n /** Installed version (from this package's own manifest). */\n current?: string\n /** Newest release worth chasing (`latest`, plus `beta` for prerelease installs). */\n latest?: string\n /** `latest` is strictly newer than `current`. */\n outdated?: boolean\n /** The dist-tag the newest release came from. */\n channel?: UpdateChannel\n /** Copyable CLI upgrade command (present when outdated). */\n updateCommand?: string\n /** Failure detail (only when `ok` is false). */\n error?: string\n}\n","/**\n * Catppuccin themes for the DeepSeek Harness web GUI — browser half.\n *\n * Registers the four Catppuccin flavours (Latte light / Frappé, Macchiato,\n * Mocha dark) into the official ThemeRuntime, so they become selectable\n * themes whose --dsw-* token overrides fully remap the UI palette. The\n * official Appearance row persists only the built-in light/dark/system\n * preferences, so this plugin also owns a settings row (\"Catppuccin\") that\n * lists the four flavours; selecting one switches the theme and persists the\n * flavour in localStorage (the Host settings wire only serves an explicit\n * allowlist of namespaces — a plugin-owned namespace answers\n * `settings-not-exposed`, so a browser-local preference is the durable\n * store here). The choice is restored on boot.\n */\nimport type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client'\nimport type { ThemeRuntime, ThemeTokens } from '@deepseek-ai/dsh-client-ui-theme/client'\n// Type-only: pulls the locale plugin's Context merge (ctx.locale).\nimport type {} from '@deepseek-ai/dsh-client-locale/client'\n// Type-only: pulls the settings-surface SlotMap merge (settings.general.item).\nimport type {} from '@deepseek-ai/dsh-client-ui-settings/client'\nimport { CatppuccinRow, type CatppuccinRowInjected } from './CatppuccinRow.tsx'\nimport { en, zh, type CatppuccinKey } from './locales.ts'\nimport { CATPPUCCIN_FLAVORS, type CatppuccinFlavorInfo } from './palettes.ts'\nimport { GlassLayer } from './glass/glass-layer.ts'\nimport { GlassRow, type GlassRowInjected } from './glass/glass-row.tsx'\nimport { UpdateRow, type UpdateRowInjected } from './UpdateRow.tsx'\nimport type { UpdateCheckPayload } from '../update-check.ts'\nimport { UPDATE_ROUTE_PATH } from '../update-check.ts'\n// Side-effect import: the glass stylesheet (auto-injected as a plugin-owned\n// <style> tag; every rule is gated on the data-dsh-glass attribute).\nimport './glass/glass.module.css'\n\n/** Locale namespace owned by this plugin. */\nexport const NS = 'catppuccin'\n\ndeclare module '@deepseek-ai/dsh-client-ui-slots' {\n interface LocaleNamespaceMap {\n /** The Catppuccin settings row's copy. */\n catppuccin: CatppuccinKey\n }\n}\n\n/** localStorage key carrying the persisted flavour choice. */\nexport const FLAVOR_STORAGE_KEY = 'dsh.catppuccin.flavor'\n\n/** Accepted flavour values — the four registered theme ids plus `off`. These\n * MUST stay in sync with the registered themes (guarded by\n * tests/palettes.spec.ts) because the persisted value is the theme id. */\nexport const CATPPUCCIN_FLAVOR_VALUES = [\n ...CATPPUCCIN_FLAVORS.map((f) => f.themeId),\n 'off',\n] as const\n\n/** `off` means: fall back to the official theme (default). */\nexport type FlavorChoice = (typeof CATPPUCCIN_FLAVOR_VALUES)[number]\n\n/** The flavour whose themeId this is, or `off`. */\nexport function flavorFromThemeId(themeId: string): FlavorChoice {\n return CATPPUCCIN_FLAVORS.some((f) => f.themeId === themeId) ? themeId as FlavorChoice : 'off'\n}\n\n/** The flavour registered for a theme id, or undefined when not a Catppuccin theme. */\nexport function flavorInfo(themeId: string): CatppuccinFlavorInfo | undefined {\n return CATPPUCCIN_FLAVORS.find((f) => f.themeId === themeId)\n}\n\n/** Read the persisted flavour (absent / unknown values mean the default `off`). */\nexport function readFlavor(): FlavorChoice {\n try {\n const raw = localStorage.getItem(FLAVOR_STORAGE_KEY)\n return raw !== null && (CATPPUCCIN_FLAVOR_VALUES as readonly string[]).includes(raw)\n ? raw as FlavorChoice\n : 'off'\n } catch {\n return 'off'\n }\n}\n\n/** Persist the flavour choice (storage failures keep the in-memory state). */\nexport function writeFlavor(choice: FlavorChoice): void {\n try {\n localStorage.setItem(FLAVOR_STORAGE_KEY, choice)\n } catch {\n /* in-memory state still applies for this tab */\n }\n}\n\n/** Required services: slots + locale (settings rows) and theme (register + switch). */\nexport const inject = ['slots', 'locale', 'theme']\n\n/**\n * Register the Catppuccin dictionaries, the four flavour themes, and the\n * settings row.\n * @param ctx - client root context.\n */\nexport function apply(ctx: ClientContext): void {\n ctx.effect(() => ctx.locale.register(NS, { zh, en }), 'catppuccin: dictionaries')\n\n const theme = ctx.get('theme') as ThemeRuntime\n\n // Register the four flavour themes. Each carries the full --dsw-* token\n // dictionary for its flavour; the presenter applies them as body inline\n // variables when the theme is active.\n ctx.effect(() => {\n const disposers = CATPPUCCIN_FLAVORS.map((flavor) =>\n theme.register({\n id: flavor.themeId,\n colorScheme: flavor.colorScheme,\n tokens: flavor.tokens as ThemeTokens,\n }),\n )\n return () => {\n for (const dispose of disposers) dispose()\n }\n }, 'catppuccin: flavour themes')\n\n // Persisted flavour choice. The official ThemeRuntime only persists the\n // built-in preferences, and the Host settings wire refuses plugin-owned\n // namespaces (`settings-not-exposed`), so the choice lives in localStorage.\n // Restoring it is a two-step race at boot: the flavour themes are registered\n // by this plugin (so an immediate setTheme may run before registration), and\n // the official Appearance scope adoption (`adopt()`) re-applies the stored\n // light/dark/system preference once its scope loads, overriding us. So the\n // saved flavour is re-asserted on every theme change within a short boot\n // window; after that a theme change is a user action and must win.\n ctx.effect(() => {\n const saved = readFlavor()\n if (saved === 'off') return () => {}\n let settled = false\n const started = Date.now()\n const applySaved = (): void => {\n if (settled) return\n if (Date.now() - started > 5000) {\n settled = true\n return\n }\n try {\n if (theme.getTheme().preference !== saved) theme.setTheme(saved)\n } catch {\n // Theme not registered yet — the registry-update theme/change retries.\n }\n }\n applySaved()\n const disposer = ctx.on('theme/change', applySaved)\n const timer = window.setTimeout(() => { settled = true }, 5000)\n const onStorage = (event: StorageEvent): void => {\n if (event.key !== FLAVOR_STORAGE_KEY) return\n const next = readFlavor()\n if (next !== 'off') {\n try {\n theme.setTheme(next)\n } catch {\n /* unknown persisted value — keep the current theme */\n }\n }\n }\n window.addEventListener('storage', onStorage)\n return () => {\n disposer()\n window.clearTimeout(timer)\n window.removeEventListener('storage', onStorage)\n }\n }, 'catppuccin: boot restore')\n\n const injected = (): CatppuccinRowInjected => ({\n themes: CATPPUCCIN_FLAVORS.map((flavor) => ({\n id: flavor.themeId,\n label: flavor.label,\n accent: flavor.accent,\n })),\n current: () => {\n const pref = theme.getTheme().preference\n return flavorFromThemeId(pref)\n },\n subscribe: (listener) => ctx.on('theme/change', listener),\n select: (choice: FlavorChoice) => {\n if (choice === 'off') {\n // Revert to the official default (system-following).\n theme.setTheme('system')\n writeFlavor('off')\n return\n }\n const flavor = flavorInfo(choice)\n if (!flavor) return\n theme.setTheme(flavor.themeId)\n writeFlavor(flavor.themeId)\n },\n })\n\n ctx.slots.inject('settings.general.item', () => ctx.slots.register({\n name: 'settings.general.item',\n id: 'catppuccin',\n order: 20,\n locale: NS,\n inject: injected,\n }, CatppuccinRow))\n\n // The glass layer: a toggleable glassmorphism skin on top of the Catppuccin\n // themes. It owns its lifecycle (enable flag + knobs persist in\n // localStorage; every effect is released with this fiber).\n const glass = new GlassLayer(ctx)\n\n const glassInjected = (): GlassRowInjected => ({\n getState: () => glass.getSnapshot(),\n subscribe: (listener) => glass.subscribe(listener),\n setEnabled: (enabled) => { glass.setEnabled(enabled) },\n setMode: (mode) => { glass.setMode(mode) },\n setBlur: (blur) => { glass.setBlur(blur) },\n setFrost: (frost) => { glass.setFrost(frost) },\n setBrightness: (brightness) => { glass.setBrightness(brightness) },\n resetDefaults: () => { glass.resetDefaults() },\n })\n\n ctx.slots.inject('settings.general.item', () => ctx.slots.register({\n name: 'settings.general.item',\n id: 'catppuccin-glass',\n order: 21,\n locale: NS,\n inject: glassInjected,\n }, GlassRow))\n\n // Update check: the Host owns the npm lookup (Node fetch, no CORS); the row\n // only fetches the same-origin route and renders the verdict. Upgrade stays\n // a terminal action — the row just surfaces the CLI command.\n const updateInjected = (): UpdateRowInjected => ({\n check: async () => {\n try {\n const response = await fetch(UPDATE_ROUTE_PATH, { headers: { accept: 'application/json' } })\n return await response.json() as UpdateCheckPayload\n } catch {\n return { ok: false, error: 'network' }\n }\n },\n })\n\n ctx.slots.inject('settings.general.item', () => ctx.slots.register({\n name: 'settings.general.item',\n id: 'catppuccin-update',\n order: 22,\n locale: NS,\n inject: updateInjected,\n }, UpdateRow))\n}\n"],"mappings":"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"}
package/lib/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  //#region package.json
2
- var version = "0.2.5-beta.2";
2
+ var version = "0.2.5";
3
3
  //#endregion
4
4
  //#region src/versions.ts
5
5
  /** Parse a semver string, or null when it is not `v?x.y.z[-pre][+build]`. */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nonamelego/dsh-catppuccin",
3
3
  "description": "Catppuccin themes + a toggleable glassmorphism skin for the DeepSeek Harness web GUI — Latte, Frappé, Macchiato and Mocha registered into the official theme system (Appearance settings), fully remapping the --dsw-* token ladder, with adjustable frosted glass for the top bar, sidebar, composer, stats line and trajectory view.",
4
- "version": "0.2.5-beta.2",
4
+ "version": "0.2.5",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
7
7
  "repository": {