@webship.co/workspace 0.0.0-stage → 1.0.0-beta1
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/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/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/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/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 +466 -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 +1439 -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 +7923 -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 +553 -0
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name Webship
|
|
3
|
+
*
|
|
4
|
+
* The default theme: the Webship design system, expressed as CSS custom properties and nothing else.
|
|
5
|
+
*
|
|
6
|
+
* A theme is a PALETTE, not a stylesheet. This file declares values; it never selects an element.
|
|
7
|
+
* Every rule that paints lives in base.css or in a component, and every one of them reads a token
|
|
8
|
+
* from here — so a component says var(--surface-card) rather than #fff, and both halves of the
|
|
9
|
+
* theme fall out of the same rule instead of needing a second `html.dark` copy of it.
|
|
10
|
+
*
|
|
11
|
+
* Three layers, in the order the design system defines them:
|
|
12
|
+
*
|
|
13
|
+
* 1. BRAND PRIMITIVES — the raw values from core/config/brand-tokens.json, kept in
|
|
14
|
+
* core/config/brand-tokens.json and edited by hand.
|
|
15
|
+
* These are the design system's own names. They do not change between light and dark:
|
|
16
|
+
* Webship blue is Webship blue on any background.
|
|
17
|
+
* 2. TYPE — the scale and the three brand typefaces, also from the stylesheet.
|
|
18
|
+
* 3. SEMANTIC TOKENS — what the interface actually asks for: a card surface, a subtle line, a
|
|
19
|
+
* danger tint. These are the ones that flip in the dark half, because "the surface a card sits
|
|
20
|
+
* on" is a different colour at night while the brand is not.
|
|
21
|
+
*
|
|
22
|
+
* Dark is not a separate theme. It is the second half of this one: the same token names, restated
|
|
23
|
+
* under html.dark. The dark ramp is built on the hue of Webship Secondary (#2b447c) rather than a
|
|
24
|
+
* neutral grey, so an unlit dashboard still reads as Webship rather than as a generic dark app.
|
|
25
|
+
*/
|
|
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; /* Components/Forms/Note/Default */
|
|
79
|
+
/* Type ROLES: one token per role, holding the weight, the size, the line-height and the
|
|
80
|
+
family together. A component writes `font: var(--type-h3)` and cannot then get the weight
|
|
81
|
+
right and the line-height wrong — which is how h3 drifted onto the serif once already.
|
|
82
|
+
The scale below stays the single source of the sizes; the role decides the rest. */
|
|
83
|
+
--type-h1: var(--weight-regular) var(--size-h1)/1.15 var(--font-secondary);
|
|
84
|
+
--type-h2: var(--weight-regular) var(--size-h2)/1.2 var(--font-secondary);
|
|
85
|
+
--type-h3: var(--weight-semibold) var(--size-h3)/1.25 var(--font-primary);
|
|
86
|
+
--type-h4: var(--weight-semibold) var(--size-h4)/1.3 var(--font-primary);
|
|
87
|
+
--type-h5: var(--weight-semibold) var(--size-h5)/1.35 var(--font-primary);
|
|
88
|
+
--type-h6: var(--weight-semibold) var(--size-h6)/1 var(--font-primary);
|
|
89
|
+
--type-body: var(--weight-regular) var(--size-body)/var(--leading-body) var(--font-primary);
|
|
90
|
+
--type-body-sm: var(--weight-regular) var(--size-small)/1.45 var(--font-primary);
|
|
91
|
+
--type-label: var(--weight-semibold) var(--size-body)/1 var(--font-primary);
|
|
92
|
+
--type-caption: var(--weight-regular) var(--size-small)/1.35 var(--font-primary);
|
|
93
|
+
--type-mono: var(--weight-regular) var(--size-body)/1.5 var(--font-code);
|
|
94
|
+
--type-mono-sm: var(--weight-regular) var(--size-small)/1.4 var(--font-code);
|
|
95
|
+
|
|
96
|
+
/* Optical tracking, per role. This theme sets none — its scale is the one it shipped with —
|
|
97
|
+
but the tokens exist so a heading never has to bring its own, and so a theme that wants
|
|
98
|
+
tightened display type only has to set these. */
|
|
99
|
+
--tracking-h1: normal;
|
|
100
|
+
--tracking-h2: normal;
|
|
101
|
+
--tracking-h3: normal;
|
|
102
|
+
--tracking-h4: normal;
|
|
103
|
+
--tracking-h5: normal;
|
|
104
|
+
--tracking-h6: var(--tracking-wide);
|
|
105
|
+
|
|
106
|
+
/* ---------------------------------------------------------------------
|
|
107
|
+
* 3. Semantic tokens — what the interface asks for by role.
|
|
108
|
+
* Restated under html.dark below; nothing else is.
|
|
109
|
+
* ------------------------------------------------------------------ */
|
|
110
|
+
|
|
111
|
+
/* Surfaces, from the page backwards: the page, a card on it, a tinted well
|
|
112
|
+
inside the card, and the field you type into. */
|
|
113
|
+
--surface: var(--subtle-light);
|
|
114
|
+
--surface-card: #ffffff;
|
|
115
|
+
--surface-muted: #f1eef9;
|
|
116
|
+
--surface-input: #ffffff;
|
|
117
|
+
|
|
118
|
+
/* Text, three steps: body, a quieter step for secondary copy, then meta
|
|
119
|
+
(--text-subtle, a brand primitive, is the quietest). */
|
|
120
|
+
--text-subtle-2: #333333;
|
|
121
|
+
|
|
122
|
+
/* Rules and edges. -strong is the hover state, where an edge has to be seen. */
|
|
123
|
+
--line: #e2ddd8;
|
|
124
|
+
--line-strong: #c9c2ba;
|
|
125
|
+
|
|
126
|
+
/* Interactive. --link is the one brand value that moves in BOTH halves, because link text is the
|
|
127
|
+
one place a brand colour has to pass 4.5:1 rather than look right: Webship blue is 4.59:1 on white
|
|
128
|
+
but 4.15:1 on --subtle-light and 3.86:1 on --subtle-brand, so prose links and the rail's current
|
|
129
|
+
row failed wherever they sat on a tint. This is a shade down — 5.35:1 and 4.98:1 on those two —
|
|
130
|
+
and brand/primary itself is untouched, since white ON blue was never the problem. */
|
|
131
|
+
--link: #0063c0;
|
|
132
|
+
--brand-pressed: #0063c0; /* a primary button, held down */
|
|
133
|
+
--brand-2-pressed: #22355f; /* a secondary button, held down */
|
|
134
|
+
--focus-ring: rgba(0, 116, 224, .35);
|
|
135
|
+
|
|
136
|
+
/* States. Each is a trio: the line/dot colour, the tint it sits on, and the
|
|
137
|
+
text colour that is readable on that tint. */
|
|
138
|
+
/* The solid colours and their subtle tints are the brand tokens's Alert Colors (status/*). */
|
|
139
|
+
--ok: #146c43;
|
|
140
|
+
--ok-soft: #d0e2d9;
|
|
141
|
+
--pcard-tool-label: 0rem;
|
|
142
|
+
--ok-ink: #14532d;
|
|
143
|
+
--danger: #e71139;
|
|
144
|
+
--danger-soft: #facfd7;
|
|
145
|
+
--danger-ink: #7d1a2e;
|
|
146
|
+
--danger-armed: #a4133c; /* a destructive button, already armed */
|
|
147
|
+
/* Danger as TEXT on a card: status/danger is 4.47:1 on white, just under the 4.5:1 text needs. */
|
|
148
|
+
--danger-text: #c20f31;
|
|
149
|
+
--warning: #fdd26e;
|
|
150
|
+
--warning-soft: #fef1d3;
|
|
151
|
+
--warning-ink: #5c4300;
|
|
152
|
+
--info: #0dcaf0;
|
|
153
|
+
--info-soft: #cff4fc;
|
|
154
|
+
--info-ink: #055160;
|
|
155
|
+
--success: #146c43; /* Figma brand tokens, status/success */
|
|
156
|
+
--success-soft: #d0e2d9;
|
|
157
|
+
--success-ink: #0f5132;
|
|
158
|
+
--busy-soft: var(--subtle-brand);
|
|
159
|
+
--busy-ink: var(--brand-secondary);
|
|
160
|
+
--accent-soft: var(--subtle-accent);
|
|
161
|
+
--accent-ink: #4b3fa8;
|
|
162
|
+
|
|
163
|
+
/* Chips: badges, labels, counts. */
|
|
164
|
+
--chip-bg: var(--brand-primary);
|
|
165
|
+
--chip-ink: var(--text-inverse);
|
|
166
|
+
|
|
167
|
+
/* Elevation. A card is lifted with the brand's own navy rather than black,
|
|
168
|
+
which is what keeps a light page warm rather than grey. */
|
|
169
|
+
--shadow-card: 0 4px 16px rgba(35, 41, 70, .06);
|
|
170
|
+
--shadow-card-hover: 0 12px 28px rgba(43, 68, 124, .16);
|
|
171
|
+
--shadow-float: 0 1.5rem 3rem rgba(43, 68, 124, .28);
|
|
172
|
+
--shadow-toast: 0 14px 34px rgba(35, 41, 70, .26);
|
|
173
|
+
--toast-ring: rgba(255, 255, 255, .9); /* the hairline that lifts a toast off a pale page */
|
|
174
|
+
|
|
175
|
+
/* Surfaces that do NOT follow the theme, and should not.
|
|
176
|
+
*
|
|
177
|
+
* Code is read as code: a terminal and a fenced block stay dark in both halves,
|
|
178
|
+
* the way every editor and every CI log the team looks at does. A video letterboxes
|
|
179
|
+
* on black because that is what the black bars are, and a rendered document is white
|
|
180
|
+
* paper whichever way the dashboard is lit — theming those would be theming the
|
|
181
|
+
* CONTENT rather than the interface around it. They are tokens all the same, so a
|
|
182
|
+
* theme that disagrees can say so in one line. */
|
|
183
|
+
--code-bg: #1f2437;
|
|
184
|
+
--code-ink: #e6e9f5;
|
|
185
|
+
--terminal-ink: #c9f7d4;
|
|
186
|
+
--media-bg: #000000;
|
|
187
|
+
--paper: #ffffff;
|
|
188
|
+
|
|
189
|
+
/* The chequerboard behind a transparent image, and the backdrop behind a modal. */
|
|
190
|
+
--checker-a: #dcdcdc;
|
|
191
|
+
--checker-b: #d8d8d8;
|
|
192
|
+
--checker-bg: #f4f4f4;
|
|
193
|
+
--overlay: rgba(0, 0, 0, .6);
|
|
194
|
+
|
|
195
|
+
/* Compatibility aliases. Older rules name the brand by number; keeping them
|
|
196
|
+
pointed at the primitives means one palette, not two. */
|
|
197
|
+
--brand-1: var(--brand-primary);
|
|
198
|
+
--brand-2: var(--brand-secondary);
|
|
199
|
+
--brand-3: var(--brand-accent);
|
|
200
|
+
--brand-grad: linear-gradient(135deg, var(--brand-primary), var(--brand-secondary));
|
|
201
|
+
--ink: var(--brand-secondary);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/* ---------------------------------------------------------------------------
|
|
205
|
+
* The dark half. Same names, night values, on the hue of Webship Secondary.
|
|
206
|
+
*
|
|
207
|
+
* Only semantic tokens are restated. The brand primitives are not: #0074e0 does
|
|
208
|
+
* not become a different blue after dark — the interface reaches for --link
|
|
209
|
+
* instead, wherever contrast demands it.
|
|
210
|
+
* ------------------------------------------------------------------------ */
|
|
211
|
+
|
|
212
|
+
html.dark {
|
|
213
|
+
--surface: #0f1626;
|
|
214
|
+
--surface-card: #172033;
|
|
215
|
+
--surface-muted: #1f2a42;
|
|
216
|
+
--surface-input: #0f1729;
|
|
217
|
+
|
|
218
|
+
--text-default: #e8edf6;
|
|
219
|
+
--text-subtle-2: #c2cbdd;
|
|
220
|
+
--text-subtle: #93a0b8;
|
|
221
|
+
|
|
222
|
+
--line: #27334d;
|
|
223
|
+
--line-strong: #3b4a6d;
|
|
224
|
+
|
|
225
|
+
--link: #57a8ff;
|
|
226
|
+
--brand-pressed: #2f8fe8;
|
|
227
|
+
--brand-2-pressed: #1b2b4d;
|
|
228
|
+
--focus-ring: rgba(87, 168, 255, .40);
|
|
229
|
+
|
|
230
|
+
--ok-soft: #10261a;
|
|
231
|
+
--ok-ink: #a8e6b8;
|
|
232
|
+
--danger-soft: #2a1620;
|
|
233
|
+
--danger-ink: #ffd0da;
|
|
234
|
+
--danger-armed: #e0466b;
|
|
235
|
+
--danger-text: #ff8fa3;
|
|
236
|
+
--warning-soft: #2e2610;
|
|
237
|
+
--warning-ink: #fde4a3;
|
|
238
|
+
--info-soft: #0c2a33;
|
|
239
|
+
--info-ink: #9eeaf9;
|
|
240
|
+
--success-soft: #10291d;
|
|
241
|
+
--success-ink: #a3d9bd;
|
|
242
|
+
--busy-soft: #1a2440;
|
|
243
|
+
--busy-ink: #b9c9ff;
|
|
244
|
+
--accent-soft: #2c2550;
|
|
245
|
+
--accent-ink: #d9d2ff;
|
|
246
|
+
|
|
247
|
+
--chip-bg: #33406e;
|
|
248
|
+
--chip-ink: #e8edf6;
|
|
249
|
+
|
|
250
|
+
--subtle-light: #131b2c;
|
|
251
|
+
--subtle-brand: #10243d;
|
|
252
|
+
--subtle-accent: #221f3a;
|
|
253
|
+
|
|
254
|
+
--shadow-card: 0 4px 16px rgba(0, 0, 0, .35);
|
|
255
|
+
--shadow-card-hover: 0 12px 28px rgba(0, 0, 0, .50);
|
|
256
|
+
--shadow-float: 0 1.5rem 3rem rgba(0, 0, 0, .55);
|
|
257
|
+
--shadow-toast: 0 14px 34px rgba(0, 0, 0, .50);
|
|
258
|
+
/* The white ring belongs to a light page; on a dark one it draws a halo. */
|
|
259
|
+
--toast-ring: rgba(0, 0, 0, .5);
|
|
260
|
+
|
|
261
|
+
--checker-a: #2a3550;
|
|
262
|
+
--checker-b: #26314a;
|
|
263
|
+
--checker-bg: #131b2c;
|
|
264
|
+
--overlay: rgba(0, 0, 0, .72);
|
|
265
|
+
|
|
266
|
+
--ink: var(--text-default);
|
|
267
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name Ember
|
|
3
|
+
*
|
|
4
|
+
* Warm and high-contrast: amber accents on near-black in the dark half, sand in the light. Built
|
|
5
|
+
* for a room with the lights off and a screen that is the brightest thing in it.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
:root {
|
|
9
|
+
--brand-primary: #d97706;
|
|
10
|
+
--brand-secondary: #b45309;
|
|
11
|
+
--brand-accent: #ea580c;
|
|
12
|
+
--brand-grad: linear-gradient(135deg, var(--brand-primary), var(--brand-secondary) 65%, var(--brand-accent));
|
|
13
|
+
--brand-primary: var(--brand-secondary);
|
|
14
|
+
--text-default: #292524;
|
|
15
|
+
--text-subtle-2: #57534e;
|
|
16
|
+
--text-subtle: #8a827c;
|
|
17
|
+
--surface: #faf7f2;
|
|
18
|
+
--surface-card: #fff;
|
|
19
|
+
--surface-muted: #f2ece3;
|
|
20
|
+
--line: #e7ded1;
|
|
21
|
+
--line-strong: #d3c4ae;
|
|
22
|
+
--ok: #4d7c0f;
|
|
23
|
+
--ok-soft: #f5f9ec;
|
|
24
|
+
--pcard-tool-label: 0rem;
|
|
25
|
+
--ok-ink: #33501a;
|
|
26
|
+
--danger: #b91c1c;
|
|
27
|
+
--danger-soft: #fdf2f2;
|
|
28
|
+
--danger-ink: #7f1d1d;
|
|
29
|
+
--danger-armed: #991b1b;
|
|
30
|
+
--danger-text: #b91c1c;
|
|
31
|
+
--warning: #d97706;
|
|
32
|
+
--warning-soft: #fdf3e0;
|
|
33
|
+
--warning-ink: #7c4a03;
|
|
34
|
+
--info: #0e7490;
|
|
35
|
+
--info-soft: #e6f4f7;
|
|
36
|
+
--info-ink: #164e63;
|
|
37
|
+
--success: #146c43; /* Figma brand tokens, status/success */
|
|
38
|
+
--success-soft: #d0e2d9;
|
|
39
|
+
--success-ink: #0f5132;
|
|
40
|
+
--link: #b45309;
|
|
41
|
+
--subtle-brand: #fdf4e7;
|
|
42
|
+
--busy-soft: #fbf0dd;
|
|
43
|
+
--busy-ink: var(--brand-secondary);
|
|
44
|
+
--subtle-light: #fdfbf7;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
html.dark {
|
|
48
|
+
--text-default: #f5ede2;
|
|
49
|
+
--text-subtle-2: #d6c9b8;
|
|
50
|
+
--text-subtle: #a1937f;
|
|
51
|
+
--surface: #17130f;
|
|
52
|
+
--surface-card: #211b15;
|
|
53
|
+
--surface-muted: #1c1712;
|
|
54
|
+
--line: #362c22;
|
|
55
|
+
--line-strong: #4d3f31;
|
|
56
|
+
--ok-soft: #1a2410;
|
|
57
|
+
--ok-ink: #c2e08a;
|
|
58
|
+
--danger-soft: #2a1512;
|
|
59
|
+
--danger-ink: #f4b8b8;
|
|
60
|
+
--danger-armed: #ef4444;
|
|
61
|
+
--danger-text: #f87171;
|
|
62
|
+
--warning-soft: #2a1f10;
|
|
63
|
+
--warning-ink: #f5c46b;
|
|
64
|
+
--info-soft: #0f2429;
|
|
65
|
+
--info-ink: #8fd3e3;
|
|
66
|
+
--success-soft: #10291d;
|
|
67
|
+
--success-ink: #a3d9bd;
|
|
68
|
+
--link: #f59e0b;
|
|
69
|
+
--subtle-brand: #2a2118;
|
|
70
|
+
--busy-soft: #14100c;
|
|
71
|
+
--busy-ink: #f0c674;
|
|
72
|
+
--subtle-light: #1c1712;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Inherited from the Webship design system: the type scale, the spacing rhythm and every token
|
|
77
|
+
* this palette does not restate. A theme is a palette — not a fork of the system — and a token a
|
|
78
|
+
* component asks for that no theme defines drops the whole declaration without a word.
|
|
79
|
+
*/
|
|
80
|
+
:root {
|
|
81
|
+
--brand-1: var(--brand-primary);
|
|
82
|
+
--brand-2: var(--brand-secondary);
|
|
83
|
+
--font-code: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
84
|
+
--font-primary: Figtree, "Helvetica Neue", Arial, sans-serif;
|
|
85
|
+
--font-secondary: "DM Serif Text", Georgia, serif;
|
|
86
|
+
--ink: var(--brand-secondary);
|
|
87
|
+
--leading-body: 1.6;
|
|
88
|
+
--leading-display: 1.3;
|
|
89
|
+
--leading-heading: 1.4;
|
|
90
|
+
--size-body: 0.9375rem;
|
|
91
|
+
--size-h1: 2rem;
|
|
92
|
+
--size-h2: 1.625rem;
|
|
93
|
+
--size-h3: 1.5rem;
|
|
94
|
+
--size-h4: 1.25rem;
|
|
95
|
+
--size-h5: 1.125rem;
|
|
96
|
+
--size-h6: 1rem;
|
|
97
|
+
--subtle-accent: #fdf6ec;
|
|
98
|
+
--weight-regular: 400;
|
|
99
|
+
--weight-semibold: 600;
|
|
100
|
+
--tracking-wide: 0.0625em;
|
|
101
|
+
--size-small: 0.875rem; /* Components/Forms/Note/Default */
|
|
102
|
+
/* Type ROLES: one token per role, holding the weight, the size, the line-height and the
|
|
103
|
+
family together. A component writes `font: var(--type-h3)` and cannot then get the weight
|
|
104
|
+
right and the line-height wrong — which is how h3 drifted onto the serif once already.
|
|
105
|
+
The scale above stays the single source of the sizes; the role decides the rest. */
|
|
106
|
+
--type-h1: var(--weight-regular) var(--size-h1)/1.15 var(--font-secondary);
|
|
107
|
+
--type-h2: var(--weight-regular) var(--size-h2)/1.2 var(--font-secondary);
|
|
108
|
+
--type-h3: var(--weight-semibold) var(--size-h3)/1.25 var(--font-primary);
|
|
109
|
+
--type-h4: var(--weight-semibold) var(--size-h4)/1.3 var(--font-primary);
|
|
110
|
+
--type-h5: var(--weight-semibold) var(--size-h5)/1.35 var(--font-primary);
|
|
111
|
+
--type-h6: var(--weight-semibold) var(--size-h6)/1 var(--font-primary);
|
|
112
|
+
--type-body: var(--weight-regular) var(--size-body)/var(--leading-body) var(--font-primary);
|
|
113
|
+
--type-body-sm: var(--weight-regular) var(--size-small)/1.45 var(--font-primary);
|
|
114
|
+
--type-label: var(--weight-semibold) var(--size-body)/1 var(--font-primary);
|
|
115
|
+
--type-caption: var(--weight-regular) var(--size-small)/1.35 var(--font-primary);
|
|
116
|
+
--type-mono: var(--weight-regular) var(--size-body)/1.5 var(--font-code);
|
|
117
|
+
--type-mono-sm: var(--weight-regular) var(--size-small)/1.4 var(--font-code);
|
|
118
|
+
|
|
119
|
+
/* Optical tracking, per role. This theme sets none — its scale is the one it shipped with —
|
|
120
|
+
but the tokens exist so a heading never has to bring its own, and so a theme that wants
|
|
121
|
+
tightened display type only has to set these. */
|
|
122
|
+
--tracking-h1: normal;
|
|
123
|
+
--tracking-h2: normal;
|
|
124
|
+
--tracking-h3: normal;
|
|
125
|
+
--tracking-h4: normal;
|
|
126
|
+
--tracking-h5: normal;
|
|
127
|
+
--tracking-h6: var(--tracking-wide);
|
|
128
|
+
|
|
129
|
+
/* The rest of the semantic layer, in this palette's own terms. */
|
|
130
|
+
--brand-3: var(--brand-accent);
|
|
131
|
+
--brand-dark: #1c1410;
|
|
132
|
+
--brand-light: #f5ede2;
|
|
133
|
+
--text-inverse: #ffffff;
|
|
134
|
+
--text-light: #f5ede2;
|
|
135
|
+
--text-brand: var(--brand-primary);
|
|
136
|
+
--text-accent: var(--brand-accent);
|
|
137
|
+
--surface-input: #ffffff;
|
|
138
|
+
--brand-pressed: #a24f07;
|
|
139
|
+
--brand-2-pressed: #92430a;
|
|
140
|
+
--focus-ring: rgba(217, 119, 6, .35);
|
|
141
|
+
--accent-soft: #fdf0e2;
|
|
142
|
+
--accent-ink: #8a4708;
|
|
143
|
+
--chip-bg: var(--brand-primary);
|
|
144
|
+
--chip-ink: var(--text-inverse);
|
|
145
|
+
--shadow-card: 0 4px 16px rgba(69, 42, 15, .07);
|
|
146
|
+
--shadow-card-hover: 0 12px 28px rgba(69, 42, 15, .18);
|
|
147
|
+
--shadow-float: 0 1.5rem 3rem rgba(69, 42, 15, .28);
|
|
148
|
+
--shadow-toast: 0 14px 34px rgba(69, 42, 15, .26);
|
|
149
|
+
--toast-ring: rgba(255, 255, 255, .9);
|
|
150
|
+
--code-bg: #241c14;
|
|
151
|
+
--code-ink: #f0e6d8;
|
|
152
|
+
--terminal-ink: #f0c674;
|
|
153
|
+
--media-bg: #000000;
|
|
154
|
+
--paper: #ffffff;
|
|
155
|
+
--checker-a: #e0d8cc;
|
|
156
|
+
--checker-b: #dad2c6;
|
|
157
|
+
--checker-bg: #f4f0e9;
|
|
158
|
+
--overlay: rgba(20, 12, 6, .6);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
html.dark {
|
|
162
|
+
--surface-input: #1a1510;
|
|
163
|
+
--brand-pressed: #f59e0b;
|
|
164
|
+
--brand-2-pressed: #c2700b;
|
|
165
|
+
--focus-ring: rgba(245, 158, 11, .40);
|
|
166
|
+
--accent-soft: #2e2015;
|
|
167
|
+
--accent-ink: #f3c98a;
|
|
168
|
+
--chip-bg: #5a3d1c;
|
|
169
|
+
--chip-ink: #f5ede2;
|
|
170
|
+
--shadow-card: 0 4px 16px rgba(0, 0, 0, .40);
|
|
171
|
+
--shadow-card-hover: 0 12px 28px rgba(0, 0, 0, .55);
|
|
172
|
+
--shadow-float: 0 1.5rem 3rem rgba(0, 0, 0, .60);
|
|
173
|
+
--shadow-toast: 0 14px 34px rgba(0, 0, 0, .55);
|
|
174
|
+
--toast-ring: rgba(0, 0, 0, .5);
|
|
175
|
+
--checker-a: #322820;
|
|
176
|
+
--checker-b: #2c231b;
|
|
177
|
+
--checker-bg: #1c1712;
|
|
178
|
+
--overlay: rgba(0, 0, 0, .72);
|
|
179
|
+
--ink: var(--text-default);
|
|
180
|
+
}
|