# DESIGN — native DSH settings panel, mode picker, status band, dashboard (checkpoint 3) Visual authority: **the established native DSH desktop UI world**. This is a precise native extension, not a new visual world; no options were needed and none were invented. That native-operate visual direction binds every surface shipped in this checkpoint — settings tab, mode picker, status band, and dashboard alike. Parent has read `new-work / operate / craft-floor / init` context (impeccable `context.mjs` run once). ## Platform facts that bind the design - Browser plugin form: `window.__ModuleLoader__.load({ id, factory: (require) => … })`, CJS body, `const React = require('react')`, `React.createElement` only. Host loader demands this wrapper, not an ESM default export. - Package metadata: `exports["./client"] = "./client.js"`, `files` whitelist includes `client.js`, `dsh.client = { platform: 'web', inject: [native package ids] }`. - Services used (verified present in rc.3 runtime, exact community contract): - `ctx.inject(['locale','slots'])` — locale dictionaries + slot registration. - `configForms.get('ponytail')` → bound scope with `getSnapshot()`, `subscribe()`, `mutate(ops, expectedRevision)`; snapshot `{ value, revision, writable, status }`; `mutate` returning `false` means host refusal. - `slots.inject('settings.plugins.tab', () => slots.register({ name, id:'ponytail', key:'ponytail', order:30, label, inject: () => ({ scope }) }, SettingsCard))`. - `ctx.inject(['commandUi','remote'])` → `commandUi.decorate({ name:'ponytail', available, ui:{ kind:'popupSelect', options, onSelect } })`; `onSelect` calls `remote.commands.execute(session.sessionId, '/ponytail ', [])`. - Band: `slots.inject('conversation.input.dock', …)` with the host-provided `useProjection('ponytailStats')` hook (always called before any conditional return), typed state over `connection.rpc.call('/api','ponytail/state',{sessionId})`, and band preference writes through the same config-form scope. - Dashboard: `slots.inject('sidebar.panellist', …)` + keyed `slots.inject('main', …)` with id `ponytail-dashboard`; history comes from `remote.session.list` / `remote.session.projections` through the exported pure `loadHistory` (max 4 concurrent reads, abort-aware). `loadHistory(remote, signal, { updatedSince, project, onProgress })` filters **metadata before any projection read**: `updatedSince` is a finite epoch-ms cutoff or `null` (= All, default), `project` is a string defaulting to `'all'`. It returns `{ rows, total, available, failed, catalogTotal, projects }` — `total`/`rows` are the *selected* set, `catalogTotal` and `projects` always describe the whole profile metadata so the filter controls stay complete while a narrower read runs. Progress reports `{ total: selectedCount, available, failed, catalogTotal, projectCount }`. - Server half: `ctx.inject(['settings'])`, `settings.configure({ auto: false }, ctx.fiber)` so the native Plugins tab replaces the host's auto-generated form; volatile Config fields are what the host can edit live (`loader/volatile-update` commits refs without remount). ## Theme tokens — inherited, never redefined All styling uses the host's `--dsw-alias-*` variables already in the desktop shell: `--dsw-alias-border-l4`, `--dsw-alias-bg-layer-2`, `--dsw-alias-bg-layer-3`, `--dsw-alias-label-primary`, `--dsw-alias-label-secondary`, `--dsw-alias-brand-primary`. No new palette, no hard-coded theme colours, no font declarations — **system font inherit** (`font: inherit` on controls only). Scoped CSS only: one `