@webship.co/workspace 0.0.0-stage → 1.0.0-alpha1
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/PLUGINS.md +249 -0
- package/README.md +379 -2
- package/WORKSPACES.md +69 -0
- package/actions/ai-items.js +293 -0
- package/actions/audio.js +48 -0
- package/actions/build-order.js +79 -0
- package/actions/checks.js +95 -0
- package/actions/claude-session.js +104 -0
- package/actions/commands-center.js +258 -0
- package/actions/composer.js +267 -0
- package/actions/ddev-addons.js +90 -0
- package/actions/ddev-mail.js +80 -0
- package/actions/ddev.js +237 -0
- package/actions/folders.js +165 -0
- package/actions/graphs.js +107 -0
- package/actions/images-svg.js +33 -0
- package/actions/images.js +145 -0
- package/actions/navigation.js +190 -0
- package/actions/node.js +222 -0
- package/actions/notes.js +55 -0
- package/actions/obsidian.js +59 -0
- package/actions/plugins.js +36 -0
- package/actions/project-make.js +28 -0
- package/actions/rag.js +202 -0
- package/actions/row-actions.js +262 -0
- package/actions/screens.js +270 -0
- package/actions/testing.js +121 -0
- package/actions/video-edit.js +54 -0
- package/ai-inventory.js +182 -0
- package/ai-items.js +202 -0
- package/assistant-cast.js +176 -0
- package/assistant-suggestions.js +91 -0
- package/assistant.js +484 -0
- package/audio-voice.js +528 -0
- package/auth-google.js +260 -0
- package/build-ai.js +52 -0
- package/build-order-page.js +191 -0
- package/build-order.js +313 -0
- package/builder-args.js +117 -0
- package/changelog.js +302 -0
- package/chat-threads.js +134 -0
- package/checks.js +105 -0
- package/claude-args.js +282 -0
- package/claude-sessions.js +129 -0
- package/command-author.js +117 -0
- package/command-block.js +20 -0
- package/commands/defaults.yml +159 -0
- package/commands-page.js +460 -0
- package/commands.js +568 -0
- package/cucumber.js +43 -0
- package/ddev-addons-page.js +124 -0
- package/ddev-addons.js +154 -0
- package/ddev-custom-commands.js +96 -0
- package/ddev-domains.js +84 -0
- package/ddev-import.js +93 -0
- package/ddev-mail-page.js +167 -0
- package/ddev-mail.js +110 -0
- package/ddev-options.js +145 -0
- package/ddev-snapshots.js +126 -0
- package/ddev.js +145 -0
- package/docs/DEVELOPER-GUIDE.md +224 -0
- package/docs/README.md +252 -0
- package/docs/REFERENCE.md +684 -0
- package/docs/USER-GUIDE.md +697 -0
- package/docs/screenshots/assistant/avatar-board.png +0 -0
- package/docs/screenshots/assistant/avatar-coffee.png +0 -0
- package/docs/screenshots/assistant/avatar-colours.png +0 -0
- package/docs/screenshots/assistant/avatar-icons.png +0 -0
- package/docs/screenshots/assistant/avatar-moves.png +0 -0
- package/docs/screenshots/assistant/avatar-pick-cookieman.png +0 -0
- package/docs/screenshots/assistant/avatar-settings-voices.png +0 -0
- package/docs/screenshots/assistant/avatar-status.png +0 -0
- package/docs/screenshots/create-card/create-card.png +0 -0
- package/docs/screenshots/create-card/start-ai.png +0 -0
- package/docs/screenshots/guide-clone-address.png +0 -0
- package/docs/screenshots/guide-clone-worktree-off.png +0 -0
- package/docs/screenshots/guide-clone-worktree-on.png +0 -0
- package/docs/screenshots/guide-ddev-menu.png +0 -0
- package/docs/screenshots/guide-domains.png +0 -0
- package/docs/screenshots/guide-home.png +0 -0
- package/docs/screenshots/guide-ide-menu.png +0 -0
- package/docs/screenshots/guide-remove-refusal.png +0 -0
- package/docs/screenshots/guide-rows-worktree.png +0 -0
- package/docs/screenshots/guide-screens.png +0 -0
- package/docs/screenshots/guide-settings.png +0 -0
- package/docs/screenshots/guide-workspace-page.png +0 -0
- package/docs/screenshots/home/card-settings.png +0 -0
- package/docs/screenshots/home/drag-reorder.png +0 -0
- package/docs/screenshots/home/edit-card.png +0 -0
- package/docs/screenshots/images/claude-code-image.png +0 -0
- package/docs/screenshots/images/edit-with-ai.png +0 -0
- package/docs/screenshots/images/gallery.png +0 -0
- package/docs/screenshots/images/generate-description.png +0 -0
- package/docs/screenshots/images/generate-plan.png +0 -0
- package/docs/screenshots/images/providers.png +0 -0
- package/docs/screenshots/images/svg-form.png +0 -0
- package/docs/screenshots/images/svg-result.png +0 -0
- package/docs/screenshots/images/upload.png +0 -0
- package/docs/screenshots/new-folder/2-form.png +0 -0
- package/docs/screenshots/new-folder/8-ddev-options.png +0 -0
- package/docs/screenshots/new-folder/files-folder.png +0 -0
- package/docs/screenshots/projects/ddev-custom-commands.png +0 -0
- package/docs/screenshots/projects/state-chip-stop.png +0 -0
- package/docs/screenshots/readme/dashboard-dark.png +0 -0
- package/docs/screenshots/readme/dashboard-light.png +0 -0
- package/docs/screenshots/readme/dev-dark.png +0 -0
- package/docs/screenshots/readme/dev-light.png +0 -0
- package/docs/screenshots/readme/docs-dark.png +0 -0
- package/docs/screenshots/readme/docs-light.png +0 -0
- package/docs/screenshots/readme/icons/ai.svg +4 -0
- package/docs/screenshots/readme/icons/code.svg +4 -0
- package/docs/screenshots/readme/icons/docs.svg +4 -0
- package/docs/screenshots/readme/icons/services.svg +4 -0
- package/docs/screenshots/readme/icons/sites.svg +4 -0
- package/docs/screenshots/readme/test-report-dark.png +0 -0
- package/docs/screenshots/readme/test-report-light.png +0 -0
- package/docs/screenshots/readme/test-scenarios.png +0 -0
- package/docs/screenshots/readme/test-steps.png +0 -0
- package/docs/screenshots/readme/videos-dark.png +0 -0
- package/docs/screenshots/readme/videos-light.png +0 -0
- package/docs/screenshots/screens-menu.png +0 -0
- package/docs/screenshots/screens-new.png +0 -0
- package/docs/screenshots/settings/auth-google-lists.png +0 -0
- package/docs/screenshots/settings/delete-1-row.png +0 -0
- package/docs/screenshots/settings/delete-2-confirm.png +0 -0
- package/docs/screenshots/settings/delete-3-type-name.png +0 -0
- package/docs/screenshots/settings/delete-4-type-yes.png +0 -0
- package/event-log.js +59 -0
- package/files-browser.js +247 -0
- package/folders.js +121 -0
- package/format.js +73 -0
- package/git-info.js +81 -0
- package/github-auth.js +62 -0
- package/graphs.js +104 -0
- package/html.js +10 -0
- package/icons.js +83 -0
- package/images-ai.js +447 -0
- package/images-create.js +226 -0
- package/images-page.js +417 -0
- package/images-records.js +39 -0
- package/images-render.js +36 -0
- package/images-svg-core.js +214 -0
- package/images-svg-sanitize.js +188 -0
- package/images-svg.js +241 -0
- package/images.js +270 -0
- package/jobs.js +430 -0
- package/linger.js +21 -0
- package/lists.js +292 -0
- package/media-info.js +136 -0
- package/navigation-page.js +264 -0
- package/navigation.js +394 -0
- package/notes.js +0 -0
- package/obsidian.js +405 -0
- package/package.json +47 -4
- package/palette-index.js +46 -0
- package/playwright.config.js +23 -0
- package/plugin-install.js +239 -0
- package/plugin-loader.js +448 -0
- package/plugin-manifest.js +83 -0
- package/plugin-settings.js +44 -0
- package/plugins/workspace-notes/index.js +59 -0
- package/plugins-page.js +103 -0
- package/project-make.js +241 -0
- package/project-name.js +210 -0
- package/public/assistant-avatar-moves.js +646 -0
- package/public/assistant-avatar-ui.js +1223 -0
- package/public/assistant-avatar.js +530 -0
- package/public/avatar/druplicon.vrm +0 -0
- package/public/css/base.css +260 -0
- package/public/css/components/ai-assistant.css +263 -0
- package/public/css/components/assistant-avatar.css +279 -0
- package/public/css/components/assistant-views.css +198 -0
- package/public/css/components/build-order.css +74 -0
- package/public/css/components/clone-as-a-git-worktree.css +30 -0
- package/public/css/components/command-palette.css +61 -0
- package/public/css/components/commands-center.css +139 -0
- package/public/css/components/confirm-dialog.css +40 -0
- package/public/css/components/create-card.css +8 -0
- package/public/css/components/ddev-menu.css +23 -0
- package/public/css/components/deep-chat.css +17 -0
- package/public/css/components/density.css +11 -0
- package/public/css/components/floating-assistant-workspace-pages.css +55 -0
- package/public/css/components/folders.css +5 -0
- package/public/css/components/full-height-left-assistant-sidebar-all-pages.css +39 -0
- package/public/css/components/full-height-right-actions-rail-pages-that-have-actions.css +267 -0
- package/public/css/components/grid-and-list.css +203 -0
- package/public/css/components/help-page.css +36 -0
- package/public/css/components/hero.css +16 -0
- package/public/css/components/images.css +70 -0
- package/public/css/components/layout-rhythm-and-spacing-polish.css +139 -0
- package/public/css/components/mic-on-any-field-that-wants-typing.css +416 -0
- package/public/css/components/modal-fit.css +113 -0
- package/public/css/components/page-width.css +23 -0
- package/public/css/components/plugins-page.css +9 -0
- package/public/css/components/project-cards.css +256 -0
- package/public/css/components/project-rows.css +390 -0
- package/public/css/components/reordering-the-workspace-cards.css +85 -0
- package/public/css/components/responsive-home-and-the-workspace-pages.css +457 -0
- package/public/css/components/running-commands-as-toasts.css +327 -0
- package/public/css/components/settings-editor-core-config-yml.css +828 -0
- package/public/css/components/short-results-as-a-toast-at-the-top.css +203 -0
- package/public/css/components/sound-player.css +84 -0
- package/public/css/components/suggest-agents-skills-commands.css +112 -0
- package/public/css/components/tab-modal.css +142 -0
- package/public/css/components/terminals.css +244 -0
- package/public/css/components/test-report-media-one-file-per-row-paged.css +144 -0
- package/public/css/components/top-toolbar-logo-breadcrumb.css +107 -0
- package/public/css/components/video-edit.css +6 -0
- package/public/css/components/web-ide-open-with.css +23 -0
- package/public/css/components/working-indicators.css +158 -0
- package/public/css/components/workspace-cards.css +79 -0
- package/public/favicon.ico +0 -0
- package/public/favicon.png +0 -0
- package/public/htmx.min.js +1 -0
- package/public/logo.png +0 -0
- package/public/media-player.js +215 -0
- package/public/mic.js +255 -0
- package/public/narration.js +110 -0
- package/public/palette.js +278 -0
- package/public/sortable.js +251 -0
- package/public/suggest.js +337 -0
- package/public/terminal.js +903 -0
- package/public/themes/default/theme.css +267 -0
- package/public/themes/ember/theme.css +180 -0
- package/public/themes/press/theme.css +290 -0
- package/public/themes/slate/theme.css +182 -0
- package/public/touch-icon.png +0 -0
- package/public/ui.js +2721 -0
- package/public/vendor/ace/LICENSE.txt +24 -0
- package/public/vendor/ace/ace.js +23 -0
- package/public/vendor/ace/ext-language_tools.js +8 -0
- package/public/vendor/ace/ext-searchbox.js +8 -0
- package/public/vendor/ace/mode-css.js +8 -0
- package/public/vendor/ace/mode-html.js +8 -0
- package/public/vendor/ace/mode-javascript.js +8 -0
- package/public/vendor/ace/mode-markdown.js +8 -0
- package/public/vendor/ace/mode-sh.js +8 -0
- package/public/vendor/ace/mode-yaml.js +8 -0
- package/public/vendor/ace/theme-textmate.js +8 -0
- package/public/vendor/ace/theme-tomorrow_night.js +8 -0
- package/public/vendor/ace/worker-yaml.js +1 -0
- package/public/vendor/deep-chat.LICENSE +21 -0
- package/public/vendor/deep-chat.bundle.js +1 -0
- package/public/vendor/fonts/dm-serif-text-LICENSE.txt +93 -0
- package/public/vendor/fonts/dm-serif-text-latin-400-italic.woff2 +0 -0
- package/public/vendor/fonts/dm-serif-text-latin-400-normal.woff2 +0 -0
- package/public/vendor/fonts/figtree-LICENSE.txt +93 -0
- package/public/vendor/fonts/figtree-latin-400-italic.woff2 +0 -0
- package/public/vendor/fonts/figtree-latin-400-normal.woff2 +0 -0
- package/public/vendor/fonts/figtree-latin-600-italic.woff2 +0 -0
- package/public/vendor/fonts/figtree-latin-600-normal.woff2 +0 -0
- package/public/vendor/fonts/jetbrains-mono-LICENSE.txt +93 -0
- package/public/vendor/fonts/jetbrains-mono-latin-400-normal.woff2 +0 -0
- package/public/vendor/fonts/ubuntu-mono-LICENSE.txt +98 -0
- package/public/vendor/fonts/ubuntu-mono-latin-wght-normal.woff2 +0 -0
- package/public/vendor/tabler-LICENSE.txt +21 -0
- package/public/vendor/tabler-sprite.svg +1 -0
- package/public/vendor/three/LICENSE +21 -0
- package/public/vendor/three/addons/loaders/GLTFLoader.js +4860 -0
- package/public/vendor/three/addons/utils/BufferGeometryUtils.js +1501 -0
- package/public/vendor/three/addons/utils/SkeletonUtils.js +496 -0
- package/public/vendor/three/three.core.min.js +6 -0
- package/public/vendor/three/three.module.min.js +6 -0
- package/public/vendor/three-vrm/LICENSE +22 -0
- package/public/vendor/three-vrm/three-vrm.module.min.js +983 -0
- package/public/vendor/uikit-icons.min.js +1 -0
- package/public/vendor/uikit.min.css +1 -0
- package/public/vendor/uikit.min.js +1 -0
- package/public/vendor/webship-icons/ui/bookmark-outlined.svg +1 -0
- package/public/vendor/webship-icons/ui/headset.svg +1 -0
- package/public/vendor/webship-icons/ui/menu.svg +1 -0
- package/public/vendor/webship-icons/ui/pause.svg +1 -0
- package/public/vendor/webship-icons/ui/play.svg +1 -0
- package/public/vendor/webship-icons/ui/share.svg +1 -0
- package/public/vendor/webship-icons/ui/sound-off.svg +1 -0
- package/public/vendor/webship-icons/ui/sound-on.svg +1 -0
- package/public/vendor/webship-icons/ui/stop.svg +1 -0
- package/public/vendor/xterm/addon-fit.js +2 -0
- package/public/vendor/xterm/addon-unicode11.js +2 -0
- package/public/vendor/xterm/addon-web-links.js +2 -0
- package/public/vendor/xterm/xterm.css +218 -0
- package/public/vendor/xterm/xterm.js +2 -0
- package/rag.js +169 -0
- package/reader.js +132 -0
- package/repo-blobs.js +66 -0
- package/report-pdf.js +337 -0
- package/row-layout.js +1440 -0
- package/screenrc +37 -0
- package/screens.js +1063 -0
- package/scripts/code-server-start.sh +190 -0
- package/scripts/images-claude-finish.js +107 -0
- package/scripts/screen-host.sh +114 -0
- package/scripts/screen-runner.js +362 -0
- package/scripts/screen-then.js +47 -0
- package/scripts/update.sh +350 -0
- package/server.js +8140 -0
- package/settings-file.js +423 -0
- package/speech.js +297 -0
- package/tab-modal.js +75 -0
- package/test-reports.js +260 -0
- package/themes.js +381 -0
- package/transcripts.js +168 -0
- package/urls.js +13 -0
- package/validate.js +18 -0
- package/version-check.js +94 -0
- package/video-edit.js +588 -0
- package/waiting.js +85 -0
- package/workspace-card-tools.js +41 -0
- package/workspace-delete.js +139 -0
- package/workspace-types.js +85 -0
- package/workspaces.js +557 -0
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name Webship Press
|
|
3
|
+
*
|
|
4
|
+
* The Webship palette, set on a typographic scale built for reading rather than for a landing page.
|
|
5
|
+
*
|
|
6
|
+
* Same colours as the default theme, token for token — if a colour differs between the two, one of
|
|
7
|
+
* them is a mistake. What differs is the type, in four ways:
|
|
8
|
+
*
|
|
9
|
+
* 1. BODY IS 16px, not 15. The dashboard is read, not glanced at: a project table, a run log, a
|
|
10
|
+
* settings form and a chat transcript are all continuous text, and 15px is a size chosen for
|
|
11
|
+
* dense interfaces rather than for prose.
|
|
12
|
+
* 2. THE HEADINGS STEP FURTHER APART. 36 / 30 / 24 / 20 / 18 instead of 32 / 26 / 24 / 20 / 18,
|
|
13
|
+
* so a page title reads as one and an h3 is not almost the same size as an h2.
|
|
14
|
+
* 3. TIGHTER LINE HEIGHT AS TYPE GETS BIGGER. 1.15 at h1 through 1.35 at h5. A line height that
|
|
15
|
+
* suits body text leaves a large heading looking loose and unset.
|
|
16
|
+
* 4. OPTICAL TRACKING. Large type is tightened (-0.02em at h1, easing to -0.005em at h5) and the
|
|
17
|
+
* h6 label is opened up to 0.08em. This is the part with no equivalent in the default theme,
|
|
18
|
+
* which sets none at all: it is what stops a 36px heading reading as if nobody chose the
|
|
19
|
+
* spacing.
|
|
20
|
+
*
|
|
21
|
+
* And h6 becomes a real small-caps LABEL — 13px, opened up, uppercase — rather than a sixth heading
|
|
22
|
+
* set at the same size as the body text it sits above, which is a heading that cannot be told from
|
|
23
|
+
* a bold sentence.
|
|
24
|
+
*
|
|
25
|
+
* Opt in with `style: theme: press` in core/config/settings.yml. Nothing selects it by default.
|
|
26
|
+
*/
|
|
27
|
+
:root {
|
|
28
|
+
|
|
29
|
+
/* ---------------------------------------------------------------------
|
|
30
|
+
* 1. Brand primitives — brand tokens (figma.com/design/Hwbkgkvxths84swEtWcmTv)
|
|
31
|
+
* ------------------------------------------------------------------ */
|
|
32
|
+
|
|
33
|
+
--brand-primary: #0074e0;
|
|
34
|
+
--brand-secondary: #2b447c;
|
|
35
|
+
--brand-accent: #e4dcff;
|
|
36
|
+
--brand-dark: #000000;
|
|
37
|
+
--brand-light: #ebe8e5;
|
|
38
|
+
|
|
39
|
+
/* Subtle (tinted surfaces) */
|
|
40
|
+
--subtle-light: #f5f3f2;
|
|
41
|
+
--subtle-brand: #deedff;
|
|
42
|
+
--subtle-accent: #f6f3ff;
|
|
43
|
+
|
|
44
|
+
/* Text */
|
|
45
|
+
--text-default: #000000;
|
|
46
|
+
--text-subtle: #4d4d4d;
|
|
47
|
+
--text-inverse: #ffffff;
|
|
48
|
+
--text-light: #ebe8e5;
|
|
49
|
+
--text-brand: var(--brand-primary);
|
|
50
|
+
--text-accent: var(--brand-accent);
|
|
51
|
+
|
|
52
|
+
/* ---------------------------------------------------------------------
|
|
53
|
+
* 2. Type — Figtree primary, DM Serif Text secondary, JetBrains Mono for code.
|
|
54
|
+
* The faces are vendored as woff2 and declared in base.css; nothing is fetched.
|
|
55
|
+
* ------------------------------------------------------------------ */
|
|
56
|
+
|
|
57
|
+
--font-primary: Figtree, "Helvetica Neue", Arial, sans-serif;
|
|
58
|
+
--font-secondary: "DM Serif Text", Georgia, serif;
|
|
59
|
+
--font-code: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
60
|
+
|
|
61
|
+
/* Typography scale, from the brand tokens (Figma 2070-473). Headings 1 and 2 are
|
|
62
|
+
Secondary; 3 to 6 are Primary SemiBold. The 62px/50px display sizes are the
|
|
63
|
+
landing-page scale — this is a dashboard, so the page heading uses the H3 step
|
|
64
|
+
and keeps the Secondary family, rather than setting a 62px h1 over a table. */
|
|
65
|
+
--weight-regular: 400;
|
|
66
|
+
--weight-semibold: 600;
|
|
67
|
+
--leading-heading: 1.4;
|
|
68
|
+
--leading-display: 1.3;
|
|
69
|
+
--leading-body: 1.6;
|
|
70
|
+
--tracking-wide: 0.0625em; /* spacing/letter-wide */
|
|
71
|
+
--size-h1: 2rem;
|
|
72
|
+
--size-h2: 1.625rem;
|
|
73
|
+
--size-h3: 1.5rem;
|
|
74
|
+
--size-h4: 1.25rem;
|
|
75
|
+
--size-h5: 1.125rem;
|
|
76
|
+
--size-h6: 1rem;
|
|
77
|
+
--size-body: 0.9375rem;
|
|
78
|
+
--size-small: 0.875rem;
|
|
79
|
+
|
|
80
|
+
/* Type ROLES: one token per role, holding the weight, the size, the line-height and the
|
|
81
|
+
family together. A component writes `font: var(--type-h3)` and cannot then get the weight
|
|
82
|
+
right and the line-height wrong — which is how h3 drifted onto the serif once already.
|
|
83
|
+
The scale below stays the single source of the sizes; the role decides the rest. */
|
|
84
|
+
--type-h1: var(--weight-regular) var(--size-h1)/1.15 var(--font-secondary);
|
|
85
|
+
--type-h2: var(--weight-regular) var(--size-h2)/1.2 var(--font-secondary);
|
|
86
|
+
--type-h3: var(--weight-semibold) var(--size-h3)/1.25 var(--font-primary);
|
|
87
|
+
--type-h4: var(--weight-semibold) var(--size-h4)/1.3 var(--font-primary);
|
|
88
|
+
--type-h5: var(--weight-semibold) var(--size-h5)/1.35 var(--font-primary);
|
|
89
|
+
--type-h6: var(--weight-semibold) var(--size-h6)/1 var(--font-primary);
|
|
90
|
+
--type-body: var(--weight-regular) var(--size-body)/var(--leading-body) var(--font-primary);
|
|
91
|
+
--type-body-sm: var(--weight-regular) var(--size-small)/1.45 var(--font-primary);
|
|
92
|
+
--type-label: var(--weight-semibold) var(--size-body)/1 var(--font-primary);
|
|
93
|
+
--type-caption: var(--weight-regular) var(--size-small)/1.35 var(--font-primary);
|
|
94
|
+
--type-mono: var(--weight-regular) var(--size-body)/1.5 var(--font-code);
|
|
95
|
+
--type-mono-sm: var(--weight-regular) var(--size-small)/1.4 var(--font-code);
|
|
96
|
+
|
|
97
|
+
/* Optical tracking, per role. This theme sets none — its scale is the one it shipped with —
|
|
98
|
+
but the tokens exist so a heading never has to bring its own, and so a theme that wants
|
|
99
|
+
tightened display type only has to set these. */
|
|
100
|
+
--tracking-h1: normal;
|
|
101
|
+
--tracking-h2: normal;
|
|
102
|
+
--tracking-h3: normal;
|
|
103
|
+
--tracking-h4: normal;
|
|
104
|
+
--tracking-h5: normal;
|
|
105
|
+
--tracking-h6: var(--tracking-wide); /* Components/Forms/Note/Default */
|
|
106
|
+
|
|
107
|
+
/* ---------------------------------------------------------------------
|
|
108
|
+
* 3. Semantic tokens — what the interface asks for by role.
|
|
109
|
+
* Restated under html.dark below; nothing else is.
|
|
110
|
+
* ------------------------------------------------------------------ */
|
|
111
|
+
|
|
112
|
+
/* Surfaces, from the page backwards: the page, a card on it, a tinted well
|
|
113
|
+
inside the card, and the field you type into. */
|
|
114
|
+
--surface: var(--subtle-light);
|
|
115
|
+
--surface-card: #ffffff;
|
|
116
|
+
--surface-muted: #f1eef9;
|
|
117
|
+
--surface-input: #ffffff;
|
|
118
|
+
|
|
119
|
+
/* Text, three steps: body, a quieter step for secondary copy, then meta
|
|
120
|
+
(--text-subtle, a brand primitive, is the quietest). */
|
|
121
|
+
--text-subtle-2: #333333;
|
|
122
|
+
|
|
123
|
+
/* Rules and edges. -strong is the hover state, where an edge has to be seen. */
|
|
124
|
+
--line: #e2ddd8;
|
|
125
|
+
--line-strong: #c9c2ba;
|
|
126
|
+
|
|
127
|
+
/* Interactive. --link is the one brand value that moves in BOTH halves, because link text is the
|
|
128
|
+
one place a brand colour has to pass 4.5:1 rather than look right: Webship blue is 4.59:1 on white
|
|
129
|
+
but 4.15:1 on --subtle-light and 3.86:1 on --subtle-brand, so prose links and the rail's current
|
|
130
|
+
row failed wherever they sat on a tint. This is a shade down — 5.35:1 and 4.98:1 on those two —
|
|
131
|
+
and brand/primary itself is untouched, since white ON blue was never the problem. */
|
|
132
|
+
--link: #0063c0;
|
|
133
|
+
--brand-pressed: #0063c0; /* a primary button, held down */
|
|
134
|
+
--brand-2-pressed: #22355f; /* a secondary button, held down */
|
|
135
|
+
--focus-ring: rgba(0, 116, 224, .35);
|
|
136
|
+
|
|
137
|
+
/* States. Each is a trio: the line/dot colour, the tint it sits on, and the
|
|
138
|
+
text colour that is readable on that tint. */
|
|
139
|
+
/* The solid colours and their subtle tints are the brand tokens's Alert Colors (status/*). */
|
|
140
|
+
--ok: #146c43;
|
|
141
|
+
--ok-soft: #d0e2d9;
|
|
142
|
+
--pcard-tool-label: 0rem;
|
|
143
|
+
--ok-ink: #14532d;
|
|
144
|
+
--danger: #e71139;
|
|
145
|
+
--danger-soft: #facfd7;
|
|
146
|
+
--danger-ink: #7d1a2e;
|
|
147
|
+
--danger-armed: #a4133c; /* a destructive button, already armed */
|
|
148
|
+
/* Danger as TEXT on a card: status/danger is 4.47:1 on white, just under the 4.5:1 text needs. */
|
|
149
|
+
--danger-text: #c20f31;
|
|
150
|
+
--warning: #fdd26e;
|
|
151
|
+
--warning-soft: #fef1d3;
|
|
152
|
+
--warning-ink: #5c4300;
|
|
153
|
+
--info: #0dcaf0;
|
|
154
|
+
--info-soft: #cff4fc;
|
|
155
|
+
--info-ink: #055160;
|
|
156
|
+
--success: #146c43; /* Figma brand tokens, status/success */
|
|
157
|
+
--success-soft: #d0e2d9;
|
|
158
|
+
--success-ink: #0f5132;
|
|
159
|
+
--busy-soft: var(--subtle-brand);
|
|
160
|
+
--busy-ink: var(--brand-secondary);
|
|
161
|
+
--accent-soft: var(--subtle-accent);
|
|
162
|
+
--accent-ink: #4b3fa8;
|
|
163
|
+
|
|
164
|
+
/* Chips: badges, labels, counts. */
|
|
165
|
+
--chip-bg: var(--brand-primary);
|
|
166
|
+
--chip-ink: var(--text-inverse);
|
|
167
|
+
|
|
168
|
+
/* Elevation. A card is lifted with the brand's own navy rather than black,
|
|
169
|
+
which is what keeps a light page warm rather than grey. */
|
|
170
|
+
--shadow-card: 0 4px 16px rgba(35, 41, 70, .06);
|
|
171
|
+
--shadow-card-hover: 0 12px 28px rgba(43, 68, 124, .16);
|
|
172
|
+
--shadow-float: 0 1.5rem 3rem rgba(43, 68, 124, .28);
|
|
173
|
+
--shadow-toast: 0 14px 34px rgba(35, 41, 70, .26);
|
|
174
|
+
--toast-ring: rgba(255, 255, 255, .9); /* the hairline that lifts a toast off a pale page */
|
|
175
|
+
|
|
176
|
+
/* Surfaces that do NOT follow the theme, and should not.
|
|
177
|
+
*
|
|
178
|
+
* Code is read as code: a terminal and a fenced block stay dark in both halves,
|
|
179
|
+
* the way every editor and every CI log the team looks at does. A video letterboxes
|
|
180
|
+
* on black because that is what the black bars are, and a rendered document is white
|
|
181
|
+
* paper whichever way the dashboard is lit — theming those would be theming the
|
|
182
|
+
* CONTENT rather than the interface around it. They are tokens all the same, so a
|
|
183
|
+
* theme that disagrees can say so in one line. */
|
|
184
|
+
--code-bg: #1f2437;
|
|
185
|
+
--code-ink: #e6e9f5;
|
|
186
|
+
--terminal-ink: #c9f7d4;
|
|
187
|
+
--media-bg: #000000;
|
|
188
|
+
--paper: #ffffff;
|
|
189
|
+
|
|
190
|
+
/* The chequerboard behind a transparent image, and the backdrop behind a modal. */
|
|
191
|
+
--checker-a: #dcdcdc;
|
|
192
|
+
--checker-b: #d8d8d8;
|
|
193
|
+
--checker-bg: #f4f4f4;
|
|
194
|
+
--overlay: rgba(0, 0, 0, .6);
|
|
195
|
+
|
|
196
|
+
/* Compatibility aliases. Older rules name the brand by number; keeping them
|
|
197
|
+
pointed at the primitives means one palette, not two. */
|
|
198
|
+
--brand-1: var(--brand-primary);
|
|
199
|
+
--brand-2: var(--brand-secondary);
|
|
200
|
+
--brand-3: var(--brand-accent);
|
|
201
|
+
--brand-grad: linear-gradient(135deg, var(--brand-primary), var(--brand-secondary));
|
|
202
|
+
--ink: var(--brand-secondary);
|
|
203
|
+
|
|
204
|
+
/* ------------------------------------------------------------------
|
|
205
|
+
* What this theme changes: the type scale, its line heights and its tracking.
|
|
206
|
+
* Everything above is the Webship palette, identical to the default theme.
|
|
207
|
+
* ------------------------------------------------------------------ */
|
|
208
|
+
|
|
209
|
+
--size-h1: 2.25rem; /* 36px */
|
|
210
|
+
--size-h2: 1.875rem; /* 30px */
|
|
211
|
+
--size-h3: 1.5rem; /* 24px */
|
|
212
|
+
--size-h4: 1.25rem; /* 20px */
|
|
213
|
+
--size-h5: 1.125rem; /* 18px */
|
|
214
|
+
--size-h6: 0.8125rem; /* 13px — a label, not a heading */
|
|
215
|
+
--size-body: 1rem; /* 16px */
|
|
216
|
+
--size-small: 0.875rem; /* 14px */
|
|
217
|
+
--leading-body: 1.55;
|
|
218
|
+
|
|
219
|
+
--tracking-h1: -0.02em;
|
|
220
|
+
--tracking-h2: -0.015em;
|
|
221
|
+
--tracking-h3: -0.01em;
|
|
222
|
+
--tracking-h4: -0.01em;
|
|
223
|
+
--tracking-h5: -0.005em;
|
|
224
|
+
--tracking-h6: 0.08em;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/* ---------------------------------------------------------------------------
|
|
228
|
+
* The dark half. Same names, night values, on the hue of Webship Secondary.
|
|
229
|
+
*
|
|
230
|
+
* Only semantic tokens are restated. The brand primitives are not: #0074e0 does
|
|
231
|
+
* not become a different blue after dark — the interface reaches for --link
|
|
232
|
+
* instead, wherever contrast demands it.
|
|
233
|
+
* ------------------------------------------------------------------------ */
|
|
234
|
+
|
|
235
|
+
html.dark {
|
|
236
|
+
--surface: #0f1626;
|
|
237
|
+
--surface-card: #172033;
|
|
238
|
+
--surface-muted: #1f2a42;
|
|
239
|
+
--surface-input: #0f1729;
|
|
240
|
+
|
|
241
|
+
--text-default: #e8edf6;
|
|
242
|
+
--text-subtle-2: #c2cbdd;
|
|
243
|
+
--text-subtle: #93a0b8;
|
|
244
|
+
|
|
245
|
+
--line: #27334d;
|
|
246
|
+
--line-strong: #3b4a6d;
|
|
247
|
+
|
|
248
|
+
--link: #57a8ff;
|
|
249
|
+
--brand-pressed: #2f8fe8;
|
|
250
|
+
--brand-2-pressed: #1b2b4d;
|
|
251
|
+
--focus-ring: rgba(87, 168, 255, .40);
|
|
252
|
+
|
|
253
|
+
--ok-soft: #10261a;
|
|
254
|
+
--ok-ink: #a8e6b8;
|
|
255
|
+
--danger-soft: #2a1620;
|
|
256
|
+
--danger-ink: #ffd0da;
|
|
257
|
+
--danger-armed: #e0466b;
|
|
258
|
+
--danger-text: #ff8fa3;
|
|
259
|
+
--warning-soft: #2e2610;
|
|
260
|
+
--warning-ink: #fde4a3;
|
|
261
|
+
--info-soft: #0c2a33;
|
|
262
|
+
--info-ink: #9eeaf9;
|
|
263
|
+
--success-soft: #10291d;
|
|
264
|
+
--success-ink: #a3d9bd;
|
|
265
|
+
--busy-soft: #1a2440;
|
|
266
|
+
--busy-ink: #b9c9ff;
|
|
267
|
+
--accent-soft: #2c2550;
|
|
268
|
+
--accent-ink: #d9d2ff;
|
|
269
|
+
|
|
270
|
+
--chip-bg: #33406e;
|
|
271
|
+
--chip-ink: #e8edf6;
|
|
272
|
+
|
|
273
|
+
--subtle-light: #131b2c;
|
|
274
|
+
--subtle-brand: #10243d;
|
|
275
|
+
--subtle-accent: #221f3a;
|
|
276
|
+
|
|
277
|
+
--shadow-card: 0 4px 16px rgba(0, 0, 0, .35);
|
|
278
|
+
--shadow-card-hover: 0 12px 28px rgba(0, 0, 0, .50);
|
|
279
|
+
--shadow-float: 0 1.5rem 3rem rgba(0, 0, 0, .55);
|
|
280
|
+
--shadow-toast: 0 14px 34px rgba(0, 0, 0, .50);
|
|
281
|
+
/* The white ring belongs to a light page; on a dark one it draws a halo. */
|
|
282
|
+
--toast-ring: rgba(0, 0, 0, .5);
|
|
283
|
+
|
|
284
|
+
--checker-a: #2a3550;
|
|
285
|
+
--checker-b: #26314a;
|
|
286
|
+
--checker-bg: #131b2c;
|
|
287
|
+
--overlay: rgba(0, 0, 0, .72);
|
|
288
|
+
|
|
289
|
+
--ink: var(--text-default);
|
|
290
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name Slate
|
|
3
|
+
*
|
|
4
|
+
* A cooler, quieter palette: less brand gradient, more paper. For long sessions reading job output
|
|
5
|
+
* and diffs, where the default's purple is more presence than the work needs.
|
|
6
|
+
*
|
|
7
|
+
* It sets the same tokens as the default and nothing else — which is the point of the token layer.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
:root {
|
|
11
|
+
--brand-primary: #3d7ea6;
|
|
12
|
+
--brand-secondary: #4f6d8c;
|
|
13
|
+
--brand-accent: #6b8fa8;
|
|
14
|
+
--brand-grad: linear-gradient(135deg, var(--brand-primary), var(--brand-secondary) 65%, var(--brand-accent));
|
|
15
|
+
--brand-primary: var(--brand-secondary);
|
|
16
|
+
--text-default: #1f2933;
|
|
17
|
+
--text-subtle-2: #3e4c59;
|
|
18
|
+
--text-subtle: #7b8794;
|
|
19
|
+
--surface: #f4f6f8;
|
|
20
|
+
--surface-card: #fff;
|
|
21
|
+
--surface-muted: #e9edf1;
|
|
22
|
+
--line: #dde3e9;
|
|
23
|
+
--line-strong: #c3ccd5;
|
|
24
|
+
--ok: #2f855a;
|
|
25
|
+
--ok-soft: #f0f8f3;
|
|
26
|
+
--pcard-tool-label: 0rem;
|
|
27
|
+
--ok-ink: #1c4532;
|
|
28
|
+
--danger: #c53030;
|
|
29
|
+
--danger-soft: #fdf2f2;
|
|
30
|
+
--danger-ink: #742a2a;
|
|
31
|
+
--danger-armed: #9b2c2c;
|
|
32
|
+
--danger-text: #c53030;
|
|
33
|
+
--warning: #d69e2e;
|
|
34
|
+
--warning-soft: #fdf6e3;
|
|
35
|
+
--warning-ink: #744210;
|
|
36
|
+
--info: #3182ce;
|
|
37
|
+
--info-soft: #ebf4fb;
|
|
38
|
+
--info-ink: #2a4365;
|
|
39
|
+
--success: #146c43; /* Figma brand tokens, status/success */
|
|
40
|
+
--success-soft: #d0e2d9;
|
|
41
|
+
--success-ink: #0f5132;
|
|
42
|
+
--link: #2f6a8d; /* 4.44:1 on white was under AA for text; this is 5.9:1 */
|
|
43
|
+
--subtle-brand: #eef3f7;
|
|
44
|
+
--busy-soft: #eaf1f5;
|
|
45
|
+
--busy-ink: var(--brand-secondary);
|
|
46
|
+
--subtle-light: #f7fafc;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
html.dark {
|
|
50
|
+
--text-default: #e4e9ee;
|
|
51
|
+
--text-subtle-2: #bcc6d0;
|
|
52
|
+
--text-subtle: #8b97a5;
|
|
53
|
+
--surface: #12171c;
|
|
54
|
+
--surface-card: #1a2027;
|
|
55
|
+
--surface-muted: #161b21;
|
|
56
|
+
--line: #2a323b;
|
|
57
|
+
--line-strong: #3c4753;
|
|
58
|
+
--ok-soft: #14251c;
|
|
59
|
+
--ok-ink: #a7d9bd;
|
|
60
|
+
--danger-soft: #2a1618;
|
|
61
|
+
--danger-ink: #f0b4b4;
|
|
62
|
+
--danger-armed: #e05252;
|
|
63
|
+
--danger-text: #f28b8b;
|
|
64
|
+
--warning-soft: #2a2412;
|
|
65
|
+
--warning-ink: #f6d58e;
|
|
66
|
+
--info-soft: #12202c;
|
|
67
|
+
--info-ink: #9cc9ee;
|
|
68
|
+
--success-soft: #10291d;
|
|
69
|
+
--success-ink: #a3d9bd;
|
|
70
|
+
--link: #6aa9cc;
|
|
71
|
+
--subtle-brand: #1e262e;
|
|
72
|
+
--busy-soft: #10151a;
|
|
73
|
+
--busy-ink: #a7d9bd;
|
|
74
|
+
--subtle-light: #171d23;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Inherited from the Webship design system: the type scale, the spacing rhythm and every token
|
|
79
|
+
* this palette does not restate. A theme is a palette — not a fork of the system — and a token a
|
|
80
|
+
* component asks for that no theme defines drops the whole declaration without a word.
|
|
81
|
+
*/
|
|
82
|
+
:root {
|
|
83
|
+
--brand-1: var(--brand-primary);
|
|
84
|
+
--brand-2: var(--brand-secondary);
|
|
85
|
+
--font-code: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
86
|
+
--font-primary: Figtree, "Helvetica Neue", Arial, sans-serif;
|
|
87
|
+
--font-secondary: "DM Serif Text", Georgia, serif;
|
|
88
|
+
--ink: var(--brand-secondary);
|
|
89
|
+
--leading-body: 1.6;
|
|
90
|
+
--leading-display: 1.3;
|
|
91
|
+
--leading-heading: 1.4;
|
|
92
|
+
--size-body: 0.9375rem;
|
|
93
|
+
--size-h1: 2rem;
|
|
94
|
+
--size-h2: 1.625rem;
|
|
95
|
+
--size-h3: 1.5rem;
|
|
96
|
+
--size-h4: 1.25rem;
|
|
97
|
+
--size-h5: 1.125rem;
|
|
98
|
+
--size-h6: 1rem;
|
|
99
|
+
--subtle-accent: #eef4f8;
|
|
100
|
+
--weight-regular: 400;
|
|
101
|
+
--weight-semibold: 600;
|
|
102
|
+
--tracking-wide: 0.0625em;
|
|
103
|
+
--size-small: 0.875rem; /* Components/Forms/Note/Default */
|
|
104
|
+
/* Type ROLES: one token per role, holding the weight, the size, the line-height and the
|
|
105
|
+
family together. A component writes `font: var(--type-h3)` and cannot then get the weight
|
|
106
|
+
right and the line-height wrong — which is how h3 drifted onto the serif once already.
|
|
107
|
+
The scale above stays the single source of the sizes; the role decides the rest. */
|
|
108
|
+
--type-h1: var(--weight-regular) var(--size-h1)/1.15 var(--font-secondary);
|
|
109
|
+
--type-h2: var(--weight-regular) var(--size-h2)/1.2 var(--font-secondary);
|
|
110
|
+
--type-h3: var(--weight-semibold) var(--size-h3)/1.25 var(--font-primary);
|
|
111
|
+
--type-h4: var(--weight-semibold) var(--size-h4)/1.3 var(--font-primary);
|
|
112
|
+
--type-h5: var(--weight-semibold) var(--size-h5)/1.35 var(--font-primary);
|
|
113
|
+
--type-h6: var(--weight-semibold) var(--size-h6)/1 var(--font-primary);
|
|
114
|
+
--type-body: var(--weight-regular) var(--size-body)/var(--leading-body) var(--font-primary);
|
|
115
|
+
--type-body-sm: var(--weight-regular) var(--size-small)/1.45 var(--font-primary);
|
|
116
|
+
--type-label: var(--weight-semibold) var(--size-body)/1 var(--font-primary);
|
|
117
|
+
--type-caption: var(--weight-regular) var(--size-small)/1.35 var(--font-primary);
|
|
118
|
+
--type-mono: var(--weight-regular) var(--size-body)/1.5 var(--font-code);
|
|
119
|
+
--type-mono-sm: var(--weight-regular) var(--size-small)/1.4 var(--font-code);
|
|
120
|
+
|
|
121
|
+
/* Optical tracking, per role. This theme sets none — its scale is the one it shipped with —
|
|
122
|
+
but the tokens exist so a heading never has to bring its own, and so a theme that wants
|
|
123
|
+
tightened display type only has to set these. */
|
|
124
|
+
--tracking-h1: normal;
|
|
125
|
+
--tracking-h2: normal;
|
|
126
|
+
--tracking-h3: normal;
|
|
127
|
+
--tracking-h4: normal;
|
|
128
|
+
--tracking-h5: normal;
|
|
129
|
+
--tracking-h6: var(--tracking-wide);
|
|
130
|
+
|
|
131
|
+
/* The rest of the semantic layer, in this palette's own terms. */
|
|
132
|
+
--brand-3: var(--brand-accent);
|
|
133
|
+
--brand-dark: #12171c;
|
|
134
|
+
--brand-light: #e4e9ee;
|
|
135
|
+
--text-inverse: #ffffff;
|
|
136
|
+
--text-light: #e4e9ee;
|
|
137
|
+
--text-brand: var(--brand-primary);
|
|
138
|
+
--text-accent: var(--brand-accent);
|
|
139
|
+
--surface-input: #ffffff;
|
|
140
|
+
--brand-pressed: #33698a;
|
|
141
|
+
--brand-2-pressed: #405a75;
|
|
142
|
+
--focus-ring: rgba(61, 126, 166, .35);
|
|
143
|
+
--accent-soft: #eaf1f6;
|
|
144
|
+
--accent-ink: #2f5f7d;
|
|
145
|
+
--chip-bg: var(--brand-primary);
|
|
146
|
+
--chip-ink: var(--text-inverse);
|
|
147
|
+
--shadow-card: 0 4px 16px rgba(31, 41, 51, .07);
|
|
148
|
+
--shadow-card-hover: 0 12px 28px rgba(31, 41, 51, .16);
|
|
149
|
+
--shadow-float: 0 1.5rem 3rem rgba(31, 41, 51, .26);
|
|
150
|
+
--shadow-toast: 0 14px 34px rgba(31, 41, 51, .24);
|
|
151
|
+
--toast-ring: rgba(255, 255, 255, .9);
|
|
152
|
+
--code-bg: #1b2229;
|
|
153
|
+
--code-ink: #dde5ec;
|
|
154
|
+
--terminal-ink: #a7d9bd;
|
|
155
|
+
--media-bg: #000000;
|
|
156
|
+
--paper: #ffffff;
|
|
157
|
+
--checker-a: #dcdcdc;
|
|
158
|
+
--checker-b: #d8d8d8;
|
|
159
|
+
--checker-bg: #f4f4f4;
|
|
160
|
+
--overlay: rgba(10, 14, 18, .6);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
html.dark {
|
|
164
|
+
--surface-input: #12171c;
|
|
165
|
+
--brand-pressed: #6aa9cc;
|
|
166
|
+
--brand-2-pressed: #3d566f;
|
|
167
|
+
--focus-ring: rgba(106, 169, 204, .40);
|
|
168
|
+
--accent-soft: #1c2830;
|
|
169
|
+
--accent-ink: #a8cee2;
|
|
170
|
+
--chip-bg: #2f4250;
|
|
171
|
+
--chip-ink: #e4e9ee;
|
|
172
|
+
--shadow-card: 0 4px 16px rgba(0, 0, 0, .38);
|
|
173
|
+
--shadow-card-hover: 0 12px 28px rgba(0, 0, 0, .52);
|
|
174
|
+
--shadow-float: 0 1.5rem 3rem rgba(0, 0, 0, .58);
|
|
175
|
+
--shadow-toast: 0 14px 34px rgba(0, 0, 0, .52);
|
|
176
|
+
--toast-ring: rgba(0, 0, 0, .5);
|
|
177
|
+
--checker-a: #2b343d;
|
|
178
|
+
--checker-b: #262e36;
|
|
179
|
+
--checker-bg: #171d23;
|
|
180
|
+
--overlay: rgba(0, 0, 0, .72);
|
|
181
|
+
--ink: var(--text-default);
|
|
182
|
+
}
|
|
Binary file
|