@aglyn/plugins-ai 1.0.0-beta.231 → 1.0.0-beta.232
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/package.json +17 -17
- package/src/lib/activity/ai-activity-actions.js +8 -4
- package/src/lib/activity/ai-activity-actions.js.map +1 -1
- package/src/lib/components/ai-job-follow.component.js +1 -0
- package/src/lib/components/ai-job-follow.component.js.map +1 -1
- package/src/lib/components/ai-job-links.js +13 -0
- package/src/lib/components/ai-job-links.js.map +1 -1
- package/src/lib/components/ai-jobs-list-page.component.js +1 -0
- package/src/lib/components/ai-jobs-list-page.component.js.map +1 -1
- package/src/lib/components/ai-media-create.component.d.ts +20 -7
- package/src/lib/components/ai-media-create.component.js +107 -55
- package/src/lib/components/ai-media-create.component.js.map +1 -1
- package/src/lib/components/ai-seo-fields-card.component.js +1 -0
- package/src/lib/components/ai-seo-fields-card.component.js.map +1 -1
- package/src/lib/components/ai-site-memory-card.component.d.ts +32 -0
- package/src/lib/components/ai-site-memory-card.component.js +187 -0
- package/src/lib/components/ai-site-memory-card.component.js.map +1 -0
- package/src/lib/components/ai-site-start-card.component.js +80 -77
- package/src/lib/components/ai-site-start-card.component.js.map +1 -1
- package/src/lib/components/ai-theme-proposal-card.component.js +4 -0
- package/src/lib/components/ai-theme-proposal-card.component.js.map +1 -1
- package/src/lib/components/ai-usage-strip.component.js +1 -0
- package/src/lib/components/ai-usage-strip.component.js.map +1 -1
- package/src/lib/components/assist-panel.component.d.ts +10 -0
- package/src/lib/components/assist-panel.component.js +119 -9
- package/src/lib/components/assist-panel.component.js.map +1 -1
- package/src/lib/components/assist-signals-page.component.js +2 -0
- package/src/lib/components/assist-signals-page.component.js.map +1 -1
- package/src/lib/components/billing-ai-allotments.component.js +3 -0
- package/src/lib/components/billing-ai-allotments.component.js.map +1 -1
- package/src/lib/components/billing-ai-top-users.component.js +1 -0
- package/src/lib/components/billing-ai-top-users.component.js.map +1 -1
- package/src/lib/components/billing-assist-overage-card.component.js +2 -0
- package/src/lib/components/billing-assist-overage-card.component.js.map +1 -1
- package/src/lib/components/member-ai-usage-card.component.js +10 -0
- package/src/lib/components/member-ai-usage-card.component.js.map +1 -1
- package/src/lib/components/staff-org-ai-card.component.js +1 -0
- package/src/lib/components/staff-org-ai-card.component.js.map +1 -1
- package/src/lib/components/staff-org-ai-conversations.component.d.ts +23 -0
- package/src/lib/components/staff-org-ai-conversations.component.js +346 -0
- package/src/lib/components/staff-org-ai-conversations.component.js.map +1 -0
- package/src/lib/jobs/ai-build-capabilities.d.ts +13 -1
- package/src/lib/jobs/ai-build-capabilities.js +101 -7
- package/src/lib/jobs/ai-build-capabilities.js.map +1 -1
- package/src/lib/jobs/ai-business-profile-prefill.d.ts +29 -0
- package/src/lib/jobs/ai-business-profile-prefill.js +85 -0
- package/src/lib/jobs/ai-business-profile-prefill.js.map +1 -0
- package/src/lib/jobs/ai-job-build-step.js +3 -1
- package/src/lib/jobs/ai-job-build-step.js.map +1 -1
- package/src/lib/jobs/ai-job-edit-step.d.ts +225 -0
- package/src/lib/jobs/ai-job-edit-step.js +631 -0
- package/src/lib/jobs/ai-job-edit-step.js.map +1 -0
- package/src/lib/jobs/ai-job-insight-step.js +21 -4
- package/src/lib/jobs/ai-job-insight-step.js.map +1 -1
- package/src/lib/jobs/ai-job-layout-language.d.ts +8 -3
- package/src/lib/jobs/ai-job-layout-language.js +8 -2
- package/src/lib/jobs/ai-job-layout-language.js.map +1 -1
- package/src/lib/jobs/ai-job-layout-step.js +7 -6
- package/src/lib/jobs/ai-job-layout-step.js.map +1 -1
- package/src/lib/jobs/ai-job-logic-step.d.ts +20 -0
- package/src/lib/jobs/ai-job-logic-step.js +87 -6
- package/src/lib/jobs/ai-job-logic-step.js.map +1 -1
- package/src/lib/jobs/ai-job-page-language.d.ts +52 -7
- package/src/lib/jobs/ai-job-page-language.js +72 -9
- package/src/lib/jobs/ai-job-page-language.js.map +1 -1
- package/src/lib/jobs/ai-job-page-step.js +12 -2
- package/src/lib/jobs/ai-job-page-step.js.map +1 -1
- package/src/lib/jobs/ai-job-plan-step.d.ts +19 -5
- package/src/lib/jobs/ai-job-plan-step.js +54 -20
- package/src/lib/jobs/ai-job-plan-step.js.map +1 -1
- package/src/lib/jobs/ai-job-site-content.d.ts +163 -0
- package/src/lib/jobs/ai-job-site-content.js +443 -0
- package/src/lib/jobs/ai-job-site-content.js.map +1 -0
- package/src/lib/jobs/ai-job-site-look.d.ts +112 -0
- package/src/lib/jobs/ai-job-site-look.js +322 -0
- package/src/lib/jobs/ai-job-site-look.js.map +1 -0
- package/src/lib/jobs/ai-job-site-step.d.ts +26 -5
- package/src/lib/jobs/ai-job-site-step.js +163 -24
- package/src/lib/jobs/ai-job-site-step.js.map +1 -1
- package/src/lib/jobs/ai-jobs-notify.d.ts +6 -1
- package/src/lib/jobs/ai-jobs-notify.js +15 -3
- package/src/lib/jobs/ai-jobs-notify.js.map +1 -1
- package/src/lib/layout-language/ai-layout-compiler.d.ts +9 -0
- package/src/lib/layout-language/ai-layout-compiler.js +120 -33
- package/src/lib/layout-language/ai-layout-compiler.js.map +1 -1
- package/src/lib/layout-language/ai-layout-frame.js +5 -4
- package/src/lib/layout-language/ai-layout-frame.js.map +1 -1
- package/src/lib/layout-language/ai-layout-language.d.ts +12 -5
- package/src/lib/layout-language/ai-layout-language.js +92 -9
- package/src/lib/layout-language/ai-layout-language.js.map +1 -1
- package/src/lib/layout-language/ai-layout-pictures.d.ts +144 -0
- package/src/lib/layout-language/ai-layout-pictures.js +214 -0
- package/src/lib/layout-language/ai-layout-pictures.js.map +1 -0
- package/src/lib/layout-language/ai-layout-store.d.ts +2 -0
- package/src/lib/layout-language/ai-layout-store.js +7 -1
- package/src/lib/layout-language/ai-layout-store.js.map +1 -1
- package/src/lib/model/ai-build-progress.js +4 -1
- package/src/lib/model/ai-build-progress.js.map +1 -1
- package/src/lib/model/ai-edit-job.d.ts +109 -0
- package/src/lib/model/ai-edit-job.js +157 -0
- package/src/lib/model/ai-edit-job.js.map +1 -0
- package/src/lib/model/ai-job-activity.js +1 -0
- package/src/lib/model/ai-job-activity.js.map +1 -1
- package/src/lib/model/ai-jobs.types.d.ts +3 -1
- package/src/lib/model/ai-jobs.types.js.map +1 -1
- package/src/lib/model/ai-logic-job.d.ts +18 -1
- package/src/lib/model/ai-logic-job.js +24 -3
- package/src/lib/model/ai-logic-job.js.map +1 -1
- package/src/lib/model/ai-media-credits.d.ts +8 -4
- package/src/lib/model/ai-media-credits.js +11 -4
- package/src/lib/model/ai-media-credits.js.map +1 -1
- package/src/lib/model/ai-media-kinds.d.ts +68 -0
- package/src/lib/model/ai-media-kinds.js +98 -0
- package/src/lib/model/ai-media-kinds.js.map +1 -0
- package/src/lib/model/ai-site-build-progress.d.ts +4 -0
- package/src/lib/model/ai-site-build-progress.js +28 -11
- package/src/lib/model/ai-site-build-progress.js.map +1 -1
- package/src/lib/model/ai-site-context.d.ts +111 -0
- package/src/lib/model/ai-site-context.js +222 -0
- package/src/lib/model/ai-site-context.js.map +1 -0
- package/src/lib/model/ai-site-job.d.ts +10 -2
- package/src/lib/model/ai-site-job.js +12 -5
- package/src/lib/model/ai-site-job.js.map +1 -1
- package/src/lib/model/ai-site-kinds.d.ts +164 -0
- package/src/lib/model/ai-site-kinds.js +1942 -0
- package/src/lib/model/ai-site-kinds.js.map +1 -0
- package/src/lib/model/ai-site-look.d.ts +150 -0
- package/src/lib/model/ai-site-look.js +1236 -0
- package/src/lib/model/ai-site-look.js.map +1 -0
- package/src/lib/model/ai-site-memory.d.ts +80 -0
- package/src/lib/model/ai-site-memory.js +171 -0
- package/src/lib/model/ai-site-memory.js.map +1 -0
- package/src/lib/model/ai-site-start.d.ts +10 -1
- package/src/lib/model/ai-site-start.js +16 -2
- package/src/lib/model/ai-site-start.js.map +1 -1
- package/src/lib/model/assist-follow-up.d.ts +92 -0
- package/src/lib/model/assist-follow-up.js +128 -0
- package/src/lib/model/assist-follow-up.js.map +1 -0
- package/src/lib/plugin-config.js +2 -0
- package/src/lib/plugin-config.js.map +1 -1
- package/src/lib/plugin.js +20 -1
- package/src/lib/plugin.js.map +1 -1
- package/src/lib/providers/anthropic.d.ts +9 -1
- package/src/lib/providers/anthropic.js +143 -9
- package/src/lib/providers/anthropic.js.map +1 -1
- package/src/lib/providers/catalog.d.ts +37 -7
- package/src/lib/providers/catalog.js +103 -11
- package/src/lib/providers/catalog.js.map +1 -1
- package/src/lib/providers/contract.d.ts +29 -0
- package/src/lib/providers/contract.js.map +1 -1
- package/src/lib/providers/image-contract.d.ts +22 -1
- package/src/lib/providers/image-contract.js +40 -1
- package/src/lib/providers/image-contract.js.map +1 -1
- package/src/lib/providers/image-endpoints.d.ts +24 -0
- package/src/lib/providers/image-endpoints.js +28 -0
- package/src/lib/providers/image-endpoints.js.map +1 -0
- package/src/lib/providers/model-choice.js +23 -2
- package/src/lib/providers/model-choice.js.map +1 -1
- package/src/lib/providers/routing.js +18 -0
- package/src/lib/providers/routing.js.map +1 -1
- package/src/lib/providers/vertex-image-endpoint.d.ts +48 -0
- package/src/lib/providers/vertex-image-endpoint.js +80 -0
- package/src/lib/providers/vertex-image-endpoint.js.map +1 -0
- package/src/lib/providers/vertex-image.d.ts +13 -27
- package/src/lib/providers/vertex-image.js +15 -42
- package/src/lib/providers/vertex-image.js.map +1 -1
- package/src/lib/runtime/ai-blog-post-generation.d.ts +62 -0
- package/src/lib/runtime/ai-blog-post-generation.js +89 -0
- package/src/lib/runtime/ai-blog-post-generation.js.map +1 -0
- package/src/lib/runtime/ai-dev-env.d.ts +53 -0
- package/src/lib/runtime/ai-dev-env.js +72 -0
- package/src/lib/runtime/ai-dev-env.js.map +1 -0
- package/src/lib/runtime/ai-dev-replay.d.ts +116 -0
- package/src/lib/runtime/ai-dev-replay.js +313 -0
- package/src/lib/runtime/ai-dev-replay.js.map +1 -0
- package/src/lib/runtime/ai-doctrine.js +5 -1
- package/src/lib/runtime/ai-doctrine.js.map +1 -1
- package/src/lib/runtime/ai-eval-live.js +4 -0
- package/src/lib/runtime/ai-eval-live.js.map +1 -1
- package/src/lib/runtime/ai-eval.d.ts +13 -1
- package/src/lib/runtime/ai-eval.js +84 -1
- package/src/lib/runtime/ai-eval.js.map +1 -1
- package/src/lib/runtime/ai-live-batch.d.ts +45 -0
- package/src/lib/runtime/ai-live-batch.js +89 -0
- package/src/lib/runtime/ai-live-batch.js.map +1 -0
- package/src/lib/runtime/ai-runtime.js +46 -2
- package/src/lib/runtime/ai-runtime.js.map +1 -1
- package/src/lib/runtime/site-context.d.ts +58 -0
- package/src/lib/runtime/site-context.js +127 -0
- package/src/lib/runtime/site-context.js.map +1 -0
- package/src/lib/server/ai-admin-conversations.d.ts +22 -0
- package/src/lib/server/ai-admin-conversations.js +197 -0
- package/src/lib/server/ai-admin-conversations.js.map +1 -0
- package/src/lib/server/ai-media-image.d.ts +5 -5
- package/src/lib/server/ai-media-image.js +25 -11
- package/src/lib/server/ai-media-image.js.map +1 -1
- package/src/lib/server/ai-media-raster-prompt.d.ts +34 -0
- package/src/lib/server/ai-media-raster-prompt.js +53 -0
- package/src/lib/server/ai-media-raster-prompt.js.map +1 -0
- package/src/lib/server/assist-chat.d.ts +11 -0
- package/src/lib/server/assist-chat.js +57 -18
- package/src/lib/server/assist-chat.js.map +1 -1
- package/src/lib/server/assist-edit-applied.js +16 -3
- package/src/lib/server/assist-edit-applied.js.map +1 -1
- package/src/lib/server/assist-view-context.d.ts +19 -1
- package/src/lib/server/assist-view-context.js +38 -1
- package/src/lib/server/assist-view-context.js.map +1 -1
- package/src/lib/server.js +10 -0
- package/src/lib/server.js.map +1 -1
- package/src/lib/subprocessors.js +17 -1
- package/src/lib/subprocessors.js.map +1 -1
- package/src/lib/tools/ai-blog-post-tool.d.ts +60 -0
- package/src/lib/tools/ai-blog-post-tool.js +175 -0
- package/src/lib/tools/ai-blog-post-tool.js.map +1 -0
- package/src/lib/usage/assist-usage.d.ts +3 -0
- package/src/lib/usage/assist-usage.js +4 -2
- package/src/lib/usage/assist-usage.js.map +1 -1
- package/src/lib/usage/staff-org-ai-conversations.d.ts +103 -0
- package/src/lib/usage/staff-org-ai-conversations.js +152 -0
- package/src/lib/usage/staff-org-ai-conversations.js.map +1 -0
|
@@ -0,0 +1,1942 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ /**
|
|
17
|
+
* The kinds of website a guided start offers (AGL-3660), and the style
|
|
18
|
+
* direction each one sets.
|
|
19
|
+
*
|
|
20
|
+
* A kind is NOT a template. It is a direction in two halves:
|
|
21
|
+
*
|
|
22
|
+
* - a LOOK FAMILY the code applies — how saturated the palette is, the hues
|
|
23
|
+
* that suit the kind, the page grounds, the font pairings, the corners,
|
|
24
|
+
* the button style, the heading scale and the density — inside which the
|
|
25
|
+
* model picks this business's own look and a per-job seed varies it
|
|
26
|
+
* (`ai-site-look.ts`), so two sites of one kind never share a theme;
|
|
27
|
+
* - GUIDANCE the model reads: how the kind's pages are usually arranged
|
|
28
|
+
* (band rhythm, image share, density) and which pages it usually has.
|
|
29
|
+
*
|
|
30
|
+
* Every page a kind suggests is one the site job builds itself out of the
|
|
31
|
+
* layout language: sections, cards, images, a form. On a paid plan the site
|
|
32
|
+
* job also writes a blog's first posts into a content collection and a
|
|
33
|
+
* store's first products as unpriced drafts (AGL-3676,
|
|
34
|
+
* `jobs/ai-job-site-content.ts`), and the pages are told their titles; on
|
|
35
|
+
* the Free taste it writes neither. No event records are created, and no
|
|
36
|
+
* guidance here promises posts, products or events, since the plan reads it
|
|
37
|
+
* on every plan (the owner adds more from the Content, Commerce and Events
|
|
38
|
+
* sections afterward).
|
|
39
|
+
*
|
|
40
|
+
* Pure data and two small readers, safe for the console to import: no
|
|
41
|
+
* theme compiler, no network.
|
|
42
|
+
*/ /** A font pairing the look may choose: a heading family over a body family. */ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
43
|
+
/**
|
|
44
|
+
* The pairings, every family from the Google Fonts catalog the fonts plugin
|
|
45
|
+
* serves (`google-fonts.catalog.json`) and every weight one that family
|
|
46
|
+
* has — `ai-site-look.spec.ts` holds both. The tenant loads them the way it
|
|
47
|
+
* loads the starter theme's family, so nothing here adds a font host.
|
|
48
|
+
*/ export const AI_SITE_FONT_PAIRINGS = [
|
|
49
|
+
{
|
|
50
|
+
id: 'jakarta',
|
|
51
|
+
feel: 'modern, friendly sans',
|
|
52
|
+
heading: {
|
|
53
|
+
family: 'Plus Jakarta Sans',
|
|
54
|
+
category: 'sans-serif',
|
|
55
|
+
weight: 800,
|
|
56
|
+
sub: 700
|
|
57
|
+
},
|
|
58
|
+
body: {
|
|
59
|
+
family: 'Plus Jakarta Sans',
|
|
60
|
+
category: 'sans-serif',
|
|
61
|
+
weights: [
|
|
62
|
+
400,
|
|
63
|
+
500,
|
|
64
|
+
600,
|
|
65
|
+
700
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
tracking: -0.02
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
id: 'inter',
|
|
72
|
+
feel: 'neutral, precise sans',
|
|
73
|
+
heading: {
|
|
74
|
+
family: 'Inter',
|
|
75
|
+
category: 'sans-serif',
|
|
76
|
+
weight: 700,
|
|
77
|
+
sub: 600
|
|
78
|
+
},
|
|
79
|
+
body: {
|
|
80
|
+
family: 'Inter',
|
|
81
|
+
category: 'sans-serif',
|
|
82
|
+
weights: [
|
|
83
|
+
400,
|
|
84
|
+
500,
|
|
85
|
+
600,
|
|
86
|
+
700
|
|
87
|
+
]
|
|
88
|
+
},
|
|
89
|
+
tracking: -0.025
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
id: 'grotesk',
|
|
93
|
+
feel: 'designer grotesk',
|
|
94
|
+
heading: {
|
|
95
|
+
family: 'Space Grotesk',
|
|
96
|
+
category: 'sans-serif',
|
|
97
|
+
weight: 600,
|
|
98
|
+
sub: 600
|
|
99
|
+
},
|
|
100
|
+
body: {
|
|
101
|
+
family: 'Inter',
|
|
102
|
+
category: 'sans-serif',
|
|
103
|
+
weights: [
|
|
104
|
+
400,
|
|
105
|
+
500,
|
|
106
|
+
600,
|
|
107
|
+
700
|
|
108
|
+
]
|
|
109
|
+
},
|
|
110
|
+
tracking: -0.03
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
id: 'syne',
|
|
114
|
+
feel: 'expressive, art-school display',
|
|
115
|
+
heading: {
|
|
116
|
+
family: 'Syne',
|
|
117
|
+
category: 'sans-serif',
|
|
118
|
+
weight: 700,
|
|
119
|
+
sub: 600
|
|
120
|
+
},
|
|
121
|
+
body: {
|
|
122
|
+
family: 'Inter',
|
|
123
|
+
category: 'sans-serif',
|
|
124
|
+
weights: [
|
|
125
|
+
400,
|
|
126
|
+
500,
|
|
127
|
+
600,
|
|
128
|
+
700
|
|
129
|
+
]
|
|
130
|
+
},
|
|
131
|
+
tracking: -0.02
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
id: 'bricolage',
|
|
135
|
+
feel: 'contemporary, characterful sans',
|
|
136
|
+
heading: {
|
|
137
|
+
family: 'Bricolage Grotesque',
|
|
138
|
+
category: 'sans-serif',
|
|
139
|
+
weight: 700,
|
|
140
|
+
sub: 600
|
|
141
|
+
},
|
|
142
|
+
body: {
|
|
143
|
+
family: 'DM Sans',
|
|
144
|
+
category: 'sans-serif',
|
|
145
|
+
weights: [
|
|
146
|
+
400,
|
|
147
|
+
500,
|
|
148
|
+
600,
|
|
149
|
+
700
|
|
150
|
+
]
|
|
151
|
+
},
|
|
152
|
+
tracking: -0.025
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
id: 'editorial',
|
|
156
|
+
feel: 'editorial serif over clean sans',
|
|
157
|
+
heading: {
|
|
158
|
+
family: 'Playfair Display',
|
|
159
|
+
category: 'serif',
|
|
160
|
+
weight: 700,
|
|
161
|
+
sub: 600
|
|
162
|
+
},
|
|
163
|
+
body: {
|
|
164
|
+
family: 'Source Sans 3',
|
|
165
|
+
category: 'sans-serif',
|
|
166
|
+
weights: [
|
|
167
|
+
400,
|
|
168
|
+
500,
|
|
169
|
+
600,
|
|
170
|
+
700
|
|
171
|
+
]
|
|
172
|
+
},
|
|
173
|
+
tracking: -0.01
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
id: 'fraunces',
|
|
177
|
+
feel: 'warm, soft serif',
|
|
178
|
+
heading: {
|
|
179
|
+
family: 'Fraunces',
|
|
180
|
+
category: 'serif',
|
|
181
|
+
weight: 600,
|
|
182
|
+
sub: 600
|
|
183
|
+
},
|
|
184
|
+
body: {
|
|
185
|
+
family: 'Inter',
|
|
186
|
+
category: 'sans-serif',
|
|
187
|
+
weights: [
|
|
188
|
+
400,
|
|
189
|
+
500,
|
|
190
|
+
600,
|
|
191
|
+
700
|
|
192
|
+
]
|
|
193
|
+
},
|
|
194
|
+
tracking: -0.015
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
id: 'instrument',
|
|
198
|
+
feel: 'elegant, light serif headlines',
|
|
199
|
+
heading: {
|
|
200
|
+
family: 'Instrument Serif',
|
|
201
|
+
category: 'serif',
|
|
202
|
+
weight: 400,
|
|
203
|
+
sub: 400
|
|
204
|
+
},
|
|
205
|
+
body: {
|
|
206
|
+
family: 'Inter',
|
|
207
|
+
category: 'sans-serif',
|
|
208
|
+
weights: [
|
|
209
|
+
400,
|
|
210
|
+
500,
|
|
211
|
+
600,
|
|
212
|
+
700
|
|
213
|
+
]
|
|
214
|
+
},
|
|
215
|
+
tracking: -0.01
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
id: 'reading',
|
|
219
|
+
feel: 'reading-first serif, serif body',
|
|
220
|
+
heading: {
|
|
221
|
+
family: 'Newsreader',
|
|
222
|
+
category: 'serif',
|
|
223
|
+
weight: 600,
|
|
224
|
+
sub: 600
|
|
225
|
+
},
|
|
226
|
+
body: {
|
|
227
|
+
family: 'Source Serif 4',
|
|
228
|
+
category: 'serif',
|
|
229
|
+
weights: [
|
|
230
|
+
400,
|
|
231
|
+
600,
|
|
232
|
+
700
|
|
233
|
+
]
|
|
234
|
+
},
|
|
235
|
+
tracking: -0.01
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
id: 'garamond',
|
|
239
|
+
feel: 'refined, classic serif',
|
|
240
|
+
heading: {
|
|
241
|
+
family: 'Cormorant Garamond',
|
|
242
|
+
category: 'serif',
|
|
243
|
+
weight: 600,
|
|
244
|
+
sub: 600
|
|
245
|
+
},
|
|
246
|
+
body: {
|
|
247
|
+
family: 'Montserrat',
|
|
248
|
+
category: 'sans-serif',
|
|
249
|
+
weights: [
|
|
250
|
+
400,
|
|
251
|
+
500,
|
|
252
|
+
600,
|
|
253
|
+
700
|
|
254
|
+
]
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
id: 'baskerville',
|
|
259
|
+
feel: 'established, trustworthy serif',
|
|
260
|
+
heading: {
|
|
261
|
+
family: 'Libre Baskerville',
|
|
262
|
+
category: 'serif',
|
|
263
|
+
weight: 700,
|
|
264
|
+
sub: 700
|
|
265
|
+
},
|
|
266
|
+
body: {
|
|
267
|
+
family: 'Source Sans 3',
|
|
268
|
+
category: 'sans-serif',
|
|
269
|
+
weights: [
|
|
270
|
+
400,
|
|
271
|
+
500,
|
|
272
|
+
600,
|
|
273
|
+
700
|
|
274
|
+
]
|
|
275
|
+
}
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
id: 'merriweather',
|
|
279
|
+
feel: 'sturdy, readable serif',
|
|
280
|
+
heading: {
|
|
281
|
+
family: 'Merriweather',
|
|
282
|
+
category: 'serif',
|
|
283
|
+
weight: 700,
|
|
284
|
+
sub: 700
|
|
285
|
+
},
|
|
286
|
+
body: {
|
|
287
|
+
family: 'Lato',
|
|
288
|
+
category: 'sans-serif',
|
|
289
|
+
weights: [
|
|
290
|
+
400,
|
|
291
|
+
700
|
|
292
|
+
]
|
|
293
|
+
}
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
id: 'lora',
|
|
297
|
+
feel: 'gentle, calm serif',
|
|
298
|
+
heading: {
|
|
299
|
+
family: 'Lora',
|
|
300
|
+
category: 'serif',
|
|
301
|
+
weight: 600,
|
|
302
|
+
sub: 600
|
|
303
|
+
},
|
|
304
|
+
body: {
|
|
305
|
+
family: 'Open Sans',
|
|
306
|
+
category: 'sans-serif',
|
|
307
|
+
weights: [
|
|
308
|
+
400,
|
|
309
|
+
500,
|
|
310
|
+
600,
|
|
311
|
+
700
|
|
312
|
+
]
|
|
313
|
+
}
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
id: 'dmserif',
|
|
317
|
+
feel: 'polished display serif',
|
|
318
|
+
heading: {
|
|
319
|
+
family: 'DM Serif Display',
|
|
320
|
+
category: 'serif',
|
|
321
|
+
weight: 400,
|
|
322
|
+
sub: 400
|
|
323
|
+
},
|
|
324
|
+
body: {
|
|
325
|
+
family: 'DM Sans',
|
|
326
|
+
category: 'sans-serif',
|
|
327
|
+
weights: [
|
|
328
|
+
400,
|
|
329
|
+
500,
|
|
330
|
+
600,
|
|
331
|
+
700
|
|
332
|
+
]
|
|
333
|
+
}
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
id: 'oswald',
|
|
337
|
+
feel: 'bold, condensed, workmanlike',
|
|
338
|
+
heading: {
|
|
339
|
+
family: 'Oswald',
|
|
340
|
+
category: 'sans-serif',
|
|
341
|
+
weight: 600,
|
|
342
|
+
sub: 500
|
|
343
|
+
},
|
|
344
|
+
body: {
|
|
345
|
+
family: 'Roboto',
|
|
346
|
+
category: 'sans-serif',
|
|
347
|
+
weights: [
|
|
348
|
+
400,
|
|
349
|
+
500,
|
|
350
|
+
700
|
|
351
|
+
]
|
|
352
|
+
},
|
|
353
|
+
caps: true,
|
|
354
|
+
tracking: 0.01
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
id: 'archivo',
|
|
358
|
+
feel: 'heavy, high-impact sans',
|
|
359
|
+
heading: {
|
|
360
|
+
family: 'Archivo Black',
|
|
361
|
+
category: 'sans-serif',
|
|
362
|
+
weight: 400,
|
|
363
|
+
sub: 400
|
|
364
|
+
},
|
|
365
|
+
body: {
|
|
366
|
+
family: 'Archivo',
|
|
367
|
+
category: 'sans-serif',
|
|
368
|
+
weights: [
|
|
369
|
+
400,
|
|
370
|
+
500,
|
|
371
|
+
600,
|
|
372
|
+
700
|
|
373
|
+
]
|
|
374
|
+
},
|
|
375
|
+
tracking: -0.01
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
id: 'barlow',
|
|
379
|
+
feel: 'athletic, condensed sans',
|
|
380
|
+
heading: {
|
|
381
|
+
family: 'Barlow Condensed',
|
|
382
|
+
category: 'sans-serif',
|
|
383
|
+
weight: 700,
|
|
384
|
+
sub: 600
|
|
385
|
+
},
|
|
386
|
+
body: {
|
|
387
|
+
family: 'Barlow',
|
|
388
|
+
category: 'sans-serif',
|
|
389
|
+
weights: [
|
|
390
|
+
400,
|
|
391
|
+
500,
|
|
392
|
+
600,
|
|
393
|
+
700
|
|
394
|
+
]
|
|
395
|
+
},
|
|
396
|
+
caps: true,
|
|
397
|
+
tracking: 0.01
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
id: 'anton',
|
|
401
|
+
feel: 'loud poster display',
|
|
402
|
+
heading: {
|
|
403
|
+
family: 'Anton',
|
|
404
|
+
category: 'sans-serif',
|
|
405
|
+
weight: 400,
|
|
406
|
+
sub: 400
|
|
407
|
+
},
|
|
408
|
+
body: {
|
|
409
|
+
family: 'Inter',
|
|
410
|
+
category: 'sans-serif',
|
|
411
|
+
weights: [
|
|
412
|
+
400,
|
|
413
|
+
500,
|
|
414
|
+
600,
|
|
415
|
+
700
|
|
416
|
+
]
|
|
417
|
+
},
|
|
418
|
+
caps: true,
|
|
419
|
+
tracking: 0.01
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
id: 'nunito',
|
|
423
|
+
feel: 'rounded, approachable sans',
|
|
424
|
+
heading: {
|
|
425
|
+
family: 'Nunito',
|
|
426
|
+
category: 'sans-serif',
|
|
427
|
+
weight: 800,
|
|
428
|
+
sub: 700
|
|
429
|
+
},
|
|
430
|
+
body: {
|
|
431
|
+
family: 'Nunito Sans',
|
|
432
|
+
category: 'sans-serif',
|
|
433
|
+
weights: [
|
|
434
|
+
400,
|
|
435
|
+
600,
|
|
436
|
+
700
|
|
437
|
+
]
|
|
438
|
+
}
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
id: 'quicksand',
|
|
442
|
+
feel: 'soft, airy rounded sans',
|
|
443
|
+
heading: {
|
|
444
|
+
family: 'Quicksand',
|
|
445
|
+
category: 'sans-serif',
|
|
446
|
+
weight: 700,
|
|
447
|
+
sub: 600
|
|
448
|
+
},
|
|
449
|
+
body: {
|
|
450
|
+
family: 'Nunito Sans',
|
|
451
|
+
category: 'sans-serif',
|
|
452
|
+
weights: [
|
|
453
|
+
400,
|
|
454
|
+
600,
|
|
455
|
+
700
|
|
456
|
+
]
|
|
457
|
+
}
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
id: 'manrope',
|
|
461
|
+
feel: 'crisp, confident sans',
|
|
462
|
+
heading: {
|
|
463
|
+
family: 'Manrope',
|
|
464
|
+
category: 'sans-serif',
|
|
465
|
+
weight: 800,
|
|
466
|
+
sub: 700
|
|
467
|
+
},
|
|
468
|
+
body: {
|
|
469
|
+
family: 'Manrope',
|
|
470
|
+
category: 'sans-serif',
|
|
471
|
+
weights: [
|
|
472
|
+
400,
|
|
473
|
+
500,
|
|
474
|
+
600,
|
|
475
|
+
700
|
|
476
|
+
]
|
|
477
|
+
},
|
|
478
|
+
tracking: -0.02
|
|
479
|
+
},
|
|
480
|
+
{
|
|
481
|
+
id: 'outfit',
|
|
482
|
+
feel: 'geometric, upbeat sans',
|
|
483
|
+
heading: {
|
|
484
|
+
family: 'Outfit',
|
|
485
|
+
category: 'sans-serif',
|
|
486
|
+
weight: 700,
|
|
487
|
+
sub: 600
|
|
488
|
+
},
|
|
489
|
+
body: {
|
|
490
|
+
family: 'Outfit',
|
|
491
|
+
category: 'sans-serif',
|
|
492
|
+
weights: [
|
|
493
|
+
400,
|
|
494
|
+
500,
|
|
495
|
+
600,
|
|
496
|
+
700
|
|
497
|
+
]
|
|
498
|
+
},
|
|
499
|
+
tracking: -0.02
|
|
500
|
+
},
|
|
501
|
+
{
|
|
502
|
+
id: 'plex',
|
|
503
|
+
feel: 'technical, engineered sans',
|
|
504
|
+
heading: {
|
|
505
|
+
family: 'IBM Plex Sans',
|
|
506
|
+
category: 'sans-serif',
|
|
507
|
+
weight: 600,
|
|
508
|
+
sub: 600
|
|
509
|
+
},
|
|
510
|
+
body: {
|
|
511
|
+
family: 'IBM Plex Sans',
|
|
512
|
+
category: 'sans-serif',
|
|
513
|
+
weights: [
|
|
514
|
+
400,
|
|
515
|
+
500,
|
|
516
|
+
600,
|
|
517
|
+
700
|
|
518
|
+
]
|
|
519
|
+
},
|
|
520
|
+
tracking: -0.01
|
|
521
|
+
}
|
|
522
|
+
];
|
|
523
|
+
/**
|
|
524
|
+
* The platform's built-in themes a site's look is layered on, by the short
|
|
525
|
+
* name of the themes plugin's preset id (\`theme-presets.<name>\`), and
|
|
526
|
+
* \`starter\`: the theme a new site is born with (AGL-3497).
|
|
527
|
+
*/ export const AI_SITE_BASES = [
|
|
528
|
+
'starter',
|
|
529
|
+
'material-ui',
|
|
530
|
+
'bootstrap',
|
|
531
|
+
'minimal',
|
|
532
|
+
'material3',
|
|
533
|
+
'ant-design',
|
|
534
|
+
'fluent',
|
|
535
|
+
'carbon',
|
|
536
|
+
'cupertino'
|
|
537
|
+
];
|
|
538
|
+
export const AI_SITE_GROUNDS = [
|
|
539
|
+
'white',
|
|
540
|
+
'warm',
|
|
541
|
+
'cool',
|
|
542
|
+
'tinted'
|
|
543
|
+
];
|
|
544
|
+
export const AI_SITE_CORNERS = [
|
|
545
|
+
'sharp',
|
|
546
|
+
'soft',
|
|
547
|
+
'round',
|
|
548
|
+
'pill'
|
|
549
|
+
];
|
|
550
|
+
export const AI_SITE_RHYTHMS = [
|
|
551
|
+
'calm',
|
|
552
|
+
'alternating',
|
|
553
|
+
'bold'
|
|
554
|
+
];
|
|
555
|
+
const ALL_HUES = [
|
|
556
|
+
[
|
|
557
|
+
0,
|
|
558
|
+
360
|
|
559
|
+
]
|
|
560
|
+
];
|
|
561
|
+
/**
|
|
562
|
+
* The kinds, in the order the guided start shows them. Drawn from the template
|
|
563
|
+
* categories the large site builders offer, merged where two would build the
|
|
564
|
+
* same site: designer and agency are one studio, law and accounting one
|
|
565
|
+
* practice, health and therapy one wellness kind.
|
|
566
|
+
*/ export const AI_SITE_KINDS = [
|
|
567
|
+
{
|
|
568
|
+
id: 'business',
|
|
569
|
+
label: 'Business & services',
|
|
570
|
+
blurb: 'Say what you do, why choose you, and how to reach you',
|
|
571
|
+
icon: 'briefcase',
|
|
572
|
+
keywords: [
|
|
573
|
+
'cleaning',
|
|
574
|
+
'cleaner',
|
|
575
|
+
'janitorial',
|
|
576
|
+
'pet',
|
|
577
|
+
'groomer',
|
|
578
|
+
'grooming',
|
|
579
|
+
'dog',
|
|
580
|
+
'staffing',
|
|
581
|
+
'printing',
|
|
582
|
+
'courier'
|
|
583
|
+
],
|
|
584
|
+
starter: 'business',
|
|
585
|
+
look: {
|
|
586
|
+
bases: [
|
|
587
|
+
'starter',
|
|
588
|
+
'material3',
|
|
589
|
+
'fluent',
|
|
590
|
+
'minimal',
|
|
591
|
+
'ant-design'
|
|
592
|
+
],
|
|
593
|
+
chroma: 'balanced',
|
|
594
|
+
hues: ALL_HUES,
|
|
595
|
+
grounds: [
|
|
596
|
+
'white',
|
|
597
|
+
'cool',
|
|
598
|
+
'warm',
|
|
599
|
+
'tinted'
|
|
600
|
+
],
|
|
601
|
+
fonts: [
|
|
602
|
+
'jakarta',
|
|
603
|
+
'manrope',
|
|
604
|
+
'outfit',
|
|
605
|
+
'inter',
|
|
606
|
+
'bricolage',
|
|
607
|
+
'fraunces'
|
|
608
|
+
],
|
|
609
|
+
corners: [
|
|
610
|
+
'soft',
|
|
611
|
+
'round'
|
|
612
|
+
],
|
|
613
|
+
buttons: 'rounded',
|
|
614
|
+
headingScale: 1,
|
|
615
|
+
density: 'regular'
|
|
616
|
+
},
|
|
617
|
+
design: 'Lead with what the business does and for whom, then services as cards, the reasons to choose it, how it works as steps, and a clear call to get in touch. Mix plain and soft bands with one brand band.',
|
|
618
|
+
pages: 'Home, Services, About and Contact are typical; a pricing or booking page where the brief asks for one.'
|
|
619
|
+
},
|
|
620
|
+
{
|
|
621
|
+
id: 'trades',
|
|
622
|
+
label: 'Home services & trades',
|
|
623
|
+
blurb: 'Roofers, plumbers, towing, landscaping: bold, direct, built on trust',
|
|
624
|
+
icon: 'wrench',
|
|
625
|
+
keywords: [
|
|
626
|
+
'roofer',
|
|
627
|
+
'roofing',
|
|
628
|
+
'plumber',
|
|
629
|
+
'plumbing',
|
|
630
|
+
'electrician',
|
|
631
|
+
'hvac',
|
|
632
|
+
'towing',
|
|
633
|
+
'tow',
|
|
634
|
+
'landscaping',
|
|
635
|
+
'landscaper',
|
|
636
|
+
'contractor',
|
|
637
|
+
'construction',
|
|
638
|
+
'handyman',
|
|
639
|
+
'painter',
|
|
640
|
+
'painting',
|
|
641
|
+
'mover',
|
|
642
|
+
'moving',
|
|
643
|
+
'pest',
|
|
644
|
+
'remodeling',
|
|
645
|
+
'repair',
|
|
646
|
+
'mechanic',
|
|
647
|
+
'auto',
|
|
648
|
+
'trades',
|
|
649
|
+
'trade',
|
|
650
|
+
'garage',
|
|
651
|
+
'locksmith',
|
|
652
|
+
'flooring',
|
|
653
|
+
'fencing',
|
|
654
|
+
'pool'
|
|
655
|
+
],
|
|
656
|
+
starter: 'business',
|
|
657
|
+
look: {
|
|
658
|
+
bases: [
|
|
659
|
+
'bootstrap',
|
|
660
|
+
'carbon',
|
|
661
|
+
'material-ui',
|
|
662
|
+
'fluent',
|
|
663
|
+
'starter'
|
|
664
|
+
],
|
|
665
|
+
chroma: 'vivid',
|
|
666
|
+
hues: [
|
|
667
|
+
[
|
|
668
|
+
4,
|
|
669
|
+
18
|
|
670
|
+
],
|
|
671
|
+
[
|
|
672
|
+
20,
|
|
673
|
+
38
|
|
674
|
+
],
|
|
675
|
+
[
|
|
676
|
+
42,
|
|
677
|
+
56
|
|
678
|
+
],
|
|
679
|
+
[
|
|
680
|
+
128,
|
|
681
|
+
158
|
|
682
|
+
],
|
|
683
|
+
[
|
|
684
|
+
195,
|
|
685
|
+
212
|
|
686
|
+
],
|
|
687
|
+
[
|
|
688
|
+
214,
|
|
689
|
+
240
|
|
690
|
+
]
|
|
691
|
+
],
|
|
692
|
+
grounds: [
|
|
693
|
+
'white',
|
|
694
|
+
'cool'
|
|
695
|
+
],
|
|
696
|
+
fonts: [
|
|
697
|
+
'oswald',
|
|
698
|
+
'archivo',
|
|
699
|
+
'barlow',
|
|
700
|
+
'manrope'
|
|
701
|
+
],
|
|
702
|
+
corners: [
|
|
703
|
+
'sharp',
|
|
704
|
+
'soft'
|
|
705
|
+
],
|
|
706
|
+
buttons: 'square',
|
|
707
|
+
headingScale: 1.05,
|
|
708
|
+
density: 'compact'
|
|
709
|
+
},
|
|
710
|
+
design: 'Direct and high-contrast: a big promise and a call-to-action button in the first section, the services as a tight grid of cards, why customers can trust the business (licensed, insured, years, guarantees, but only what the brief gives), the area served, and a call or quote request repeated near the end. Use a dark band and a brand band.',
|
|
711
|
+
pages: 'Home, Services, About or Why us, and a Quote or Contact page with the form.'
|
|
712
|
+
},
|
|
713
|
+
{
|
|
714
|
+
id: 'professional',
|
|
715
|
+
label: 'Law, finance & consulting',
|
|
716
|
+
blurb: 'Law firms, accountants, advisers: calm, established, credible',
|
|
717
|
+
icon: 'scale',
|
|
718
|
+
keywords: [
|
|
719
|
+
'law',
|
|
720
|
+
'lawyer',
|
|
721
|
+
'attorney',
|
|
722
|
+
'legal',
|
|
723
|
+
'firm',
|
|
724
|
+
'accountant',
|
|
725
|
+
'accounting',
|
|
726
|
+
'cpa',
|
|
727
|
+
'tax',
|
|
728
|
+
'bookkeeping',
|
|
729
|
+
'financial',
|
|
730
|
+
'advisor',
|
|
731
|
+
'adviser',
|
|
732
|
+
'consulting',
|
|
733
|
+
'insurance',
|
|
734
|
+
'notary',
|
|
735
|
+
'mediator'
|
|
736
|
+
],
|
|
737
|
+
starter: 'business',
|
|
738
|
+
look: {
|
|
739
|
+
bases: [
|
|
740
|
+
'carbon',
|
|
741
|
+
'fluent',
|
|
742
|
+
'minimal',
|
|
743
|
+
'starter'
|
|
744
|
+
],
|
|
745
|
+
chroma: 'muted',
|
|
746
|
+
hues: [
|
|
747
|
+
[
|
|
748
|
+
210,
|
|
749
|
+
250
|
|
750
|
+
],
|
|
751
|
+
[
|
|
752
|
+
340,
|
|
753
|
+
360
|
|
754
|
+
],
|
|
755
|
+
[
|
|
756
|
+
0,
|
|
757
|
+
15
|
|
758
|
+
],
|
|
759
|
+
[
|
|
760
|
+
150,
|
|
761
|
+
175
|
|
762
|
+
]
|
|
763
|
+
],
|
|
764
|
+
grounds: [
|
|
765
|
+
'white',
|
|
766
|
+
'warm',
|
|
767
|
+
'cool'
|
|
768
|
+
],
|
|
769
|
+
fonts: [
|
|
770
|
+
'baskerville',
|
|
771
|
+
'merriweather',
|
|
772
|
+
'editorial',
|
|
773
|
+
'plex',
|
|
774
|
+
'lora'
|
|
775
|
+
],
|
|
776
|
+
corners: [
|
|
777
|
+
'sharp',
|
|
778
|
+
'soft'
|
|
779
|
+
],
|
|
780
|
+
buttons: 'rounded',
|
|
781
|
+
headingScale: 0.95,
|
|
782
|
+
density: 'airy'
|
|
783
|
+
},
|
|
784
|
+
design: 'Measured and credible: generous space, a calm opening statement, practice areas as cards with short plain explanations, the approach as steps, and an unhurried invitation to a consultation. Prefer plain and soft bands, at most one dark band.',
|
|
785
|
+
pages: 'Home, Practice areas or Services, About or Our team, and Contact with a consultation form.'
|
|
786
|
+
},
|
|
787
|
+
{
|
|
788
|
+
id: 'wellness',
|
|
789
|
+
label: 'Health & wellness',
|
|
790
|
+
blurb: 'Therapists, clinics, dentists, coaches: warm, reassuring, clear',
|
|
791
|
+
icon: 'heart',
|
|
792
|
+
keywords: [
|
|
793
|
+
'therapist',
|
|
794
|
+
'therapy',
|
|
795
|
+
'counselor',
|
|
796
|
+
'counseling',
|
|
797
|
+
'counselling',
|
|
798
|
+
'psychologist',
|
|
799
|
+
'dentist',
|
|
800
|
+
'dental',
|
|
801
|
+
'clinic',
|
|
802
|
+
'doctor',
|
|
803
|
+
'chiropractor',
|
|
804
|
+
'massage',
|
|
805
|
+
'wellness',
|
|
806
|
+
'health',
|
|
807
|
+
'nutrition',
|
|
808
|
+
'nutritionist',
|
|
809
|
+
'acupuncture',
|
|
810
|
+
'physio',
|
|
811
|
+
'physiotherapy',
|
|
812
|
+
'coach',
|
|
813
|
+
'coaching',
|
|
814
|
+
'healing',
|
|
815
|
+
'mental',
|
|
816
|
+
'medical',
|
|
817
|
+
'vet',
|
|
818
|
+
'veterinary'
|
|
819
|
+
],
|
|
820
|
+
starter: 'business',
|
|
821
|
+
look: {
|
|
822
|
+
bases: [
|
|
823
|
+
'material3',
|
|
824
|
+
'cupertino',
|
|
825
|
+
'starter',
|
|
826
|
+
'fluent'
|
|
827
|
+
],
|
|
828
|
+
chroma: 'muted',
|
|
829
|
+
hues: [
|
|
830
|
+
[
|
|
831
|
+
150,
|
|
832
|
+
200
|
|
833
|
+
],
|
|
834
|
+
[
|
|
835
|
+
250,
|
|
836
|
+
290
|
|
837
|
+
],
|
|
838
|
+
[
|
|
839
|
+
20,
|
|
840
|
+
40
|
|
841
|
+
],
|
|
842
|
+
[
|
|
843
|
+
90,
|
|
844
|
+
130
|
|
845
|
+
]
|
|
846
|
+
],
|
|
847
|
+
grounds: [
|
|
848
|
+
'warm',
|
|
849
|
+
'tinted',
|
|
850
|
+
'white'
|
|
851
|
+
],
|
|
852
|
+
fonts: [
|
|
853
|
+
'lora',
|
|
854
|
+
'fraunces',
|
|
855
|
+
'quicksand',
|
|
856
|
+
'dmserif',
|
|
857
|
+
'nunito'
|
|
858
|
+
],
|
|
859
|
+
corners: [
|
|
860
|
+
'round',
|
|
861
|
+
'pill'
|
|
862
|
+
],
|
|
863
|
+
buttons: 'pill',
|
|
864
|
+
headingScale: 1,
|
|
865
|
+
density: 'airy'
|
|
866
|
+
},
|
|
867
|
+
design: 'Reassuring and gentle: a warm opening that names who it helps, what a first visit or session is like as steps, services as soft cards, answers to common worries as an FAQ, and a low-pressure way to book or ask. Prefer soft bands, avoid dark ones.',
|
|
868
|
+
pages: 'Home, Services or Approach, About, and Book or Contact with the form.'
|
|
869
|
+
},
|
|
870
|
+
{
|
|
871
|
+
id: 'restaurant',
|
|
872
|
+
label: 'Restaurant & café',
|
|
873
|
+
blurb: 'Warm, photo-led pages for food, drink and a place to visit',
|
|
874
|
+
icon: 'utensils',
|
|
875
|
+
keywords: [
|
|
876
|
+
'restaurant',
|
|
877
|
+
'cafe',
|
|
878
|
+
'café',
|
|
879
|
+
'coffee',
|
|
880
|
+
'bakery',
|
|
881
|
+
'bar',
|
|
882
|
+
'pub',
|
|
883
|
+
'bistro',
|
|
884
|
+
'diner',
|
|
885
|
+
'pizzeria',
|
|
886
|
+
'pizza',
|
|
887
|
+
'food',
|
|
888
|
+
'catering',
|
|
889
|
+
'brewery',
|
|
890
|
+
'winery',
|
|
891
|
+
'kitchen',
|
|
892
|
+
'truck',
|
|
893
|
+
'tea',
|
|
894
|
+
'deli'
|
|
895
|
+
],
|
|
896
|
+
starter: 'business',
|
|
897
|
+
look: {
|
|
898
|
+
bases: [
|
|
899
|
+
'material3',
|
|
900
|
+
'starter',
|
|
901
|
+
'cupertino'
|
|
902
|
+
],
|
|
903
|
+
chroma: 'balanced',
|
|
904
|
+
hues: [
|
|
905
|
+
[
|
|
906
|
+
0,
|
|
907
|
+
45
|
|
908
|
+
],
|
|
909
|
+
[
|
|
910
|
+
80,
|
|
911
|
+
150
|
|
912
|
+
],
|
|
913
|
+
[
|
|
914
|
+
330,
|
|
915
|
+
360
|
|
916
|
+
]
|
|
917
|
+
],
|
|
918
|
+
grounds: [
|
|
919
|
+
'warm',
|
|
920
|
+
'tinted'
|
|
921
|
+
],
|
|
922
|
+
fonts: [
|
|
923
|
+
'fraunces',
|
|
924
|
+
'editorial',
|
|
925
|
+
'dmserif',
|
|
926
|
+
'garamond',
|
|
927
|
+
'bricolage'
|
|
928
|
+
],
|
|
929
|
+
corners: [
|
|
930
|
+
'soft',
|
|
931
|
+
'round'
|
|
932
|
+
],
|
|
933
|
+
buttons: 'rounded',
|
|
934
|
+
headingScale: 1.1,
|
|
935
|
+
density: 'regular'
|
|
936
|
+
},
|
|
937
|
+
design: 'Photo-led and inviting: a large image beside the opening line, the menu highlights as cards with pictures, the story of the place, and a clear visit or reserve section. Use images generously and a warm brand band.',
|
|
938
|
+
pages: 'Home, Menu, About or Our story, and Visit or Reserve with the form.'
|
|
939
|
+
},
|
|
940
|
+
{
|
|
941
|
+
id: 'store',
|
|
942
|
+
label: 'Online store',
|
|
943
|
+
blurb: 'Product-first pages for things you sell',
|
|
944
|
+
icon: 'bag',
|
|
945
|
+
keywords: [
|
|
946
|
+
'store',
|
|
947
|
+
'shop',
|
|
948
|
+
'boutique',
|
|
949
|
+
'ecommerce',
|
|
950
|
+
'e-commerce',
|
|
951
|
+
'products',
|
|
952
|
+
'sell',
|
|
953
|
+
'selling',
|
|
954
|
+
'merch',
|
|
955
|
+
'jewelry',
|
|
956
|
+
'clothing',
|
|
957
|
+
'apparel',
|
|
958
|
+
'candles',
|
|
959
|
+
'soap',
|
|
960
|
+
'brand'
|
|
961
|
+
],
|
|
962
|
+
starter: 'physical-shop',
|
|
963
|
+
look: {
|
|
964
|
+
bases: [
|
|
965
|
+
'minimal',
|
|
966
|
+
'cupertino',
|
|
967
|
+
'material3'
|
|
968
|
+
],
|
|
969
|
+
chroma: 'balanced',
|
|
970
|
+
hues: ALL_HUES,
|
|
971
|
+
grounds: [
|
|
972
|
+
'white',
|
|
973
|
+
'warm'
|
|
974
|
+
],
|
|
975
|
+
fonts: [
|
|
976
|
+
'inter',
|
|
977
|
+
'outfit',
|
|
978
|
+
'manrope',
|
|
979
|
+
'dmserif',
|
|
980
|
+
'syne'
|
|
981
|
+
],
|
|
982
|
+
corners: [
|
|
983
|
+
'soft',
|
|
984
|
+
'sharp',
|
|
985
|
+
'round'
|
|
986
|
+
],
|
|
987
|
+
buttons: 'pill',
|
|
988
|
+
headingScale: 1,
|
|
989
|
+
density: 'regular'
|
|
990
|
+
},
|
|
991
|
+
design: 'Product-grid first: a short opening with one strong image, then the product range as a grid of image cards, what makes the products different, and care, shipping or returns answers only as the brief gives them. Keep copy short and let images lead.',
|
|
992
|
+
pages: 'Home, Shop presenting the range as image cards, About, and Contact. Products, a cart and checkout are added in Commerce, so plan no checkout page.'
|
|
993
|
+
},
|
|
994
|
+
{
|
|
995
|
+
id: 'portfolio',
|
|
996
|
+
label: 'Portfolio',
|
|
997
|
+
blurb: 'Minimal, image-led pages that put the work first',
|
|
998
|
+
icon: 'grid',
|
|
999
|
+
keywords: [
|
|
1000
|
+
'portfolio',
|
|
1001
|
+
'illustrator',
|
|
1002
|
+
'artist',
|
|
1003
|
+
'art',
|
|
1004
|
+
'architect',
|
|
1005
|
+
'architecture',
|
|
1006
|
+
'developer',
|
|
1007
|
+
'engineer',
|
|
1008
|
+
'writer',
|
|
1009
|
+
'copywriter',
|
|
1010
|
+
'animator',
|
|
1011
|
+
'freelance',
|
|
1012
|
+
'freelancer',
|
|
1013
|
+
'maker',
|
|
1014
|
+
'ceramics',
|
|
1015
|
+
'sculptor'
|
|
1016
|
+
],
|
|
1017
|
+
starter: 'portfolio',
|
|
1018
|
+
look: {
|
|
1019
|
+
bases: [
|
|
1020
|
+
'minimal',
|
|
1021
|
+
'cupertino',
|
|
1022
|
+
'carbon'
|
|
1023
|
+
],
|
|
1024
|
+
chroma: 'neutral',
|
|
1025
|
+
hues: ALL_HUES,
|
|
1026
|
+
grounds: [
|
|
1027
|
+
'white',
|
|
1028
|
+
'warm'
|
|
1029
|
+
],
|
|
1030
|
+
fonts: [
|
|
1031
|
+
'inter',
|
|
1032
|
+
'grotesk',
|
|
1033
|
+
'syne',
|
|
1034
|
+
'instrument'
|
|
1035
|
+
],
|
|
1036
|
+
corners: [
|
|
1037
|
+
'sharp',
|
|
1038
|
+
'soft'
|
|
1039
|
+
],
|
|
1040
|
+
buttons: 'square',
|
|
1041
|
+
headingScale: 1.3,
|
|
1042
|
+
density: 'airy'
|
|
1043
|
+
},
|
|
1044
|
+
design: 'Minimal and image-led: a large, short statement as the title, then the work as a grid of image cards with one-line captions, a brief about, and a quiet way to get in touch. Mostly plain bands, lots of space, big type, one accent color.',
|
|
1045
|
+
pages: 'Home with selected work, Work or Projects, About, and Contact.'
|
|
1046
|
+
},
|
|
1047
|
+
{
|
|
1048
|
+
id: 'studio',
|
|
1049
|
+
label: 'Design studio & agency',
|
|
1050
|
+
blurb: 'Bold type and case studies for creative teams',
|
|
1051
|
+
icon: 'sparkle',
|
|
1052
|
+
keywords: [
|
|
1053
|
+
'design',
|
|
1054
|
+
'designer',
|
|
1055
|
+
'agency',
|
|
1056
|
+
'creative',
|
|
1057
|
+
'branding',
|
|
1058
|
+
'marketing',
|
|
1059
|
+
'advertising',
|
|
1060
|
+
'web',
|
|
1061
|
+
'digital',
|
|
1062
|
+
'production',
|
|
1063
|
+
'video',
|
|
1064
|
+
'animation'
|
|
1065
|
+
],
|
|
1066
|
+
starter: 'portfolio',
|
|
1067
|
+
look: {
|
|
1068
|
+
bases: [
|
|
1069
|
+
'minimal',
|
|
1070
|
+
'carbon',
|
|
1071
|
+
'cupertino'
|
|
1072
|
+
],
|
|
1073
|
+
chroma: 'neutral',
|
|
1074
|
+
hues: ALL_HUES,
|
|
1075
|
+
grounds: [
|
|
1076
|
+
'white',
|
|
1077
|
+
'cool'
|
|
1078
|
+
],
|
|
1079
|
+
fonts: [
|
|
1080
|
+
'syne',
|
|
1081
|
+
'grotesk',
|
|
1082
|
+
'bricolage',
|
|
1083
|
+
'inter'
|
|
1084
|
+
],
|
|
1085
|
+
corners: [
|
|
1086
|
+
'sharp',
|
|
1087
|
+
'soft'
|
|
1088
|
+
],
|
|
1089
|
+
buttons: 'pill',
|
|
1090
|
+
headingScale: 1.3,
|
|
1091
|
+
density: 'airy'
|
|
1092
|
+
},
|
|
1093
|
+
design: 'Confident and editorial: an oversized statement, selected case studies as large image cards with the outcome in a line, services as a short list, how the studio works as steps, and a bold dark band to start a project.',
|
|
1094
|
+
pages: 'Home, Work or Case studies, Services, About, and Contact or Start a project.'
|
|
1095
|
+
},
|
|
1096
|
+
{
|
|
1097
|
+
id: 'photography',
|
|
1098
|
+
label: 'Photography',
|
|
1099
|
+
blurb: 'Galleries first, words second',
|
|
1100
|
+
icon: 'camera',
|
|
1101
|
+
keywords: [
|
|
1102
|
+
'photographer',
|
|
1103
|
+
'photography',
|
|
1104
|
+
'photo',
|
|
1105
|
+
'photos',
|
|
1106
|
+
'videographer',
|
|
1107
|
+
'wedding photographer',
|
|
1108
|
+
'portraits'
|
|
1109
|
+
],
|
|
1110
|
+
starter: 'portfolio',
|
|
1111
|
+
look: {
|
|
1112
|
+
bases: [
|
|
1113
|
+
'minimal',
|
|
1114
|
+
'cupertino',
|
|
1115
|
+
'carbon'
|
|
1116
|
+
],
|
|
1117
|
+
chroma: 'neutral',
|
|
1118
|
+
hues: ALL_HUES,
|
|
1119
|
+
grounds: [
|
|
1120
|
+
'white',
|
|
1121
|
+
'warm'
|
|
1122
|
+
],
|
|
1123
|
+
fonts: [
|
|
1124
|
+
'instrument',
|
|
1125
|
+
'garamond',
|
|
1126
|
+
'inter',
|
|
1127
|
+
'grotesk'
|
|
1128
|
+
],
|
|
1129
|
+
corners: [
|
|
1130
|
+
'sharp'
|
|
1131
|
+
],
|
|
1132
|
+
buttons: 'square',
|
|
1133
|
+
headingScale: 1.2,
|
|
1134
|
+
density: 'airy'
|
|
1135
|
+
},
|
|
1136
|
+
design: 'Gallery-first: one full image to open, then galleries as image cards by subject, a short personal about, packages only as the brief gives them, and a booking inquiry. Few words, many images, mostly plain bands and one dark band.',
|
|
1137
|
+
pages: 'Home, Galleries or Portfolio, About, and Book or Contact with the form.'
|
|
1138
|
+
},
|
|
1139
|
+
{
|
|
1140
|
+
id: 'blog',
|
|
1141
|
+
label: 'Blog & writing',
|
|
1142
|
+
blurb: 'Reading-first pages with a calm serif voice',
|
|
1143
|
+
icon: 'book',
|
|
1144
|
+
keywords: [
|
|
1145
|
+
'blog',
|
|
1146
|
+
'blogger',
|
|
1147
|
+
'writing',
|
|
1148
|
+
'journal',
|
|
1149
|
+
'magazine',
|
|
1150
|
+
'newsletter',
|
|
1151
|
+
'podcast',
|
|
1152
|
+
'stories',
|
|
1153
|
+
'essays',
|
|
1154
|
+
'author',
|
|
1155
|
+
'publication'
|
|
1156
|
+
],
|
|
1157
|
+
starter: 'business',
|
|
1158
|
+
look: {
|
|
1159
|
+
bases: [
|
|
1160
|
+
'minimal',
|
|
1161
|
+
'starter',
|
|
1162
|
+
'cupertino'
|
|
1163
|
+
],
|
|
1164
|
+
chroma: 'muted',
|
|
1165
|
+
hues: ALL_HUES,
|
|
1166
|
+
grounds: [
|
|
1167
|
+
'white',
|
|
1168
|
+
'warm'
|
|
1169
|
+
],
|
|
1170
|
+
fonts: [
|
|
1171
|
+
'reading',
|
|
1172
|
+
'editorial',
|
|
1173
|
+
'instrument',
|
|
1174
|
+
'lora'
|
|
1175
|
+
],
|
|
1176
|
+
corners: [
|
|
1177
|
+
'sharp',
|
|
1178
|
+
'soft'
|
|
1179
|
+
],
|
|
1180
|
+
buttons: 'rounded',
|
|
1181
|
+
headingScale: 1.05,
|
|
1182
|
+
density: 'airy'
|
|
1183
|
+
},
|
|
1184
|
+
design: 'Reading-first: a short introduction to the writer and the subject, featured writing as cards with a title and a one-line summary, the topics covered as a list, and a sign-up or contact section. Narrow, calm, mostly plain bands.',
|
|
1185
|
+
pages: 'Home, Articles presenting the writing as cards, About, and Subscribe or Contact. Posts themselves are added in Data as a collection, so plan the articles page as an introduction and a few featured cards.'
|
|
1186
|
+
},
|
|
1187
|
+
{
|
|
1188
|
+
id: 'events',
|
|
1189
|
+
label: 'Events & weddings',
|
|
1190
|
+
blurb: 'Dates, places and the details guests need',
|
|
1191
|
+
icon: 'calendar',
|
|
1192
|
+
keywords: [
|
|
1193
|
+
'event',
|
|
1194
|
+
'events',
|
|
1195
|
+
'wedding',
|
|
1196
|
+
'conference',
|
|
1197
|
+
'festival',
|
|
1198
|
+
'party',
|
|
1199
|
+
'gala',
|
|
1200
|
+
'meetup',
|
|
1201
|
+
'summit',
|
|
1202
|
+
'concert',
|
|
1203
|
+
'retreat',
|
|
1204
|
+
'workshop',
|
|
1205
|
+
'venue',
|
|
1206
|
+
'planner'
|
|
1207
|
+
],
|
|
1208
|
+
starter: 'landing',
|
|
1209
|
+
look: {
|
|
1210
|
+
bases: [
|
|
1211
|
+
'material3',
|
|
1212
|
+
'cupertino',
|
|
1213
|
+
'starter'
|
|
1214
|
+
],
|
|
1215
|
+
chroma: 'balanced',
|
|
1216
|
+
hues: [
|
|
1217
|
+
[
|
|
1218
|
+
320,
|
|
1219
|
+
360
|
|
1220
|
+
],
|
|
1221
|
+
[
|
|
1222
|
+
0,
|
|
1223
|
+
30
|
|
1224
|
+
],
|
|
1225
|
+
[
|
|
1226
|
+
250,
|
|
1227
|
+
290
|
|
1228
|
+
],
|
|
1229
|
+
[
|
|
1230
|
+
140,
|
|
1231
|
+
170
|
|
1232
|
+
],
|
|
1233
|
+
[
|
|
1234
|
+
40,
|
|
1235
|
+
55
|
|
1236
|
+
]
|
|
1237
|
+
],
|
|
1238
|
+
grounds: [
|
|
1239
|
+
'warm',
|
|
1240
|
+
'tinted',
|
|
1241
|
+
'white'
|
|
1242
|
+
],
|
|
1243
|
+
fonts: [
|
|
1244
|
+
'garamond',
|
|
1245
|
+
'editorial',
|
|
1246
|
+
'dmserif',
|
|
1247
|
+
'anton',
|
|
1248
|
+
'syne'
|
|
1249
|
+
],
|
|
1250
|
+
corners: [
|
|
1251
|
+
'soft',
|
|
1252
|
+
'round'
|
|
1253
|
+
],
|
|
1254
|
+
buttons: 'pill',
|
|
1255
|
+
headingScale: 1.2,
|
|
1256
|
+
density: 'regular'
|
|
1257
|
+
},
|
|
1258
|
+
design: 'Celebratory and clear: the name and what it is in a big opening, when and where only as the brief gives them, the schedule as steps, details guests ask about as an FAQ, and an RSVP or registration section. One brand band.',
|
|
1259
|
+
pages: 'Home, Schedule or Details, Travel or Venue where the brief names one, and RSVP or Register with the form.'
|
|
1260
|
+
},
|
|
1261
|
+
{
|
|
1262
|
+
id: 'fitness',
|
|
1263
|
+
label: 'Fitness & sports',
|
|
1264
|
+
blurb: 'Gyms, trainers and studios with energy',
|
|
1265
|
+
icon: 'bolt',
|
|
1266
|
+
keywords: [
|
|
1267
|
+
'gym',
|
|
1268
|
+
'fitness',
|
|
1269
|
+
'trainer',
|
|
1270
|
+
'training',
|
|
1271
|
+
'personal trainer',
|
|
1272
|
+
'crossfit',
|
|
1273
|
+
'boxing',
|
|
1274
|
+
'martial',
|
|
1275
|
+
'karate',
|
|
1276
|
+
'pilates',
|
|
1277
|
+
'sports',
|
|
1278
|
+
'running',
|
|
1279
|
+
'climbing',
|
|
1280
|
+
'dance',
|
|
1281
|
+
'swim',
|
|
1282
|
+
'team',
|
|
1283
|
+
'club'
|
|
1284
|
+
],
|
|
1285
|
+
starter: 'business',
|
|
1286
|
+
look: {
|
|
1287
|
+
bases: [
|
|
1288
|
+
'bootstrap',
|
|
1289
|
+
'material-ui',
|
|
1290
|
+
'carbon',
|
|
1291
|
+
'material3'
|
|
1292
|
+
],
|
|
1293
|
+
chroma: 'vivid',
|
|
1294
|
+
hues: [
|
|
1295
|
+
[
|
|
1296
|
+
0,
|
|
1297
|
+
30
|
|
1298
|
+
],
|
|
1299
|
+
[
|
|
1300
|
+
90,
|
|
1301
|
+
140
|
|
1302
|
+
],
|
|
1303
|
+
[
|
|
1304
|
+
180,
|
|
1305
|
+
210
|
|
1306
|
+
],
|
|
1307
|
+
[
|
|
1308
|
+
270,
|
|
1309
|
+
300
|
|
1310
|
+
]
|
|
1311
|
+
],
|
|
1312
|
+
grounds: [
|
|
1313
|
+
'white',
|
|
1314
|
+
'cool'
|
|
1315
|
+
],
|
|
1316
|
+
fonts: [
|
|
1317
|
+
'barlow',
|
|
1318
|
+
'anton',
|
|
1319
|
+
'archivo',
|
|
1320
|
+
'outfit'
|
|
1321
|
+
],
|
|
1322
|
+
corners: [
|
|
1323
|
+
'sharp',
|
|
1324
|
+
'soft'
|
|
1325
|
+
],
|
|
1326
|
+
buttons: 'caps',
|
|
1327
|
+
headingScale: 1.15,
|
|
1328
|
+
density: 'compact'
|
|
1329
|
+
},
|
|
1330
|
+
design: 'High-energy: a punchy opening with a strong call to action, classes or programs as cards, how to start as steps, and a repeated join or book section. Use a dark band and a brand band.',
|
|
1331
|
+
pages: 'Home, Classes or Programs, About or Coaches, and Join or Contact with the form.'
|
|
1332
|
+
},
|
|
1333
|
+
{
|
|
1334
|
+
id: 'yoga',
|
|
1335
|
+
label: 'Yoga & mindfulness',
|
|
1336
|
+
blurb: 'Calm, spacious pages for classes and retreats',
|
|
1337
|
+
icon: 'leaf',
|
|
1338
|
+
keywords: [
|
|
1339
|
+
'yoga',
|
|
1340
|
+
'meditation',
|
|
1341
|
+
'mindfulness',
|
|
1342
|
+
'breathwork',
|
|
1343
|
+
'reiki',
|
|
1344
|
+
'spa',
|
|
1345
|
+
'retreat',
|
|
1346
|
+
'sound'
|
|
1347
|
+
],
|
|
1348
|
+
starter: 'business',
|
|
1349
|
+
look: {
|
|
1350
|
+
bases: [
|
|
1351
|
+
'material3',
|
|
1352
|
+
'cupertino',
|
|
1353
|
+
'starter',
|
|
1354
|
+
'fluent'
|
|
1355
|
+
],
|
|
1356
|
+
chroma: 'muted',
|
|
1357
|
+
hues: [
|
|
1358
|
+
[
|
|
1359
|
+
20,
|
|
1360
|
+
50
|
|
1361
|
+
],
|
|
1362
|
+
[
|
|
1363
|
+
80,
|
|
1364
|
+
150
|
|
1365
|
+
],
|
|
1366
|
+
[
|
|
1367
|
+
260,
|
|
1368
|
+
300
|
|
1369
|
+
],
|
|
1370
|
+
[
|
|
1371
|
+
170,
|
|
1372
|
+
200
|
|
1373
|
+
]
|
|
1374
|
+
],
|
|
1375
|
+
grounds: [
|
|
1376
|
+
'warm',
|
|
1377
|
+
'tinted'
|
|
1378
|
+
],
|
|
1379
|
+
fonts: [
|
|
1380
|
+
'garamond',
|
|
1381
|
+
'lora',
|
|
1382
|
+
'quicksand',
|
|
1383
|
+
'instrument',
|
|
1384
|
+
'fraunces'
|
|
1385
|
+
],
|
|
1386
|
+
corners: [
|
|
1387
|
+
'round',
|
|
1388
|
+
'pill'
|
|
1389
|
+
],
|
|
1390
|
+
buttons: 'pill',
|
|
1391
|
+
headingScale: 1.05,
|
|
1392
|
+
density: 'airy'
|
|
1393
|
+
},
|
|
1394
|
+
design: 'Calm and spacious: a quiet opening, classes as soft cards, what a first class is like as steps, a gentle about, and an easy way to book. Soft bands, no dark band, lots of space.',
|
|
1395
|
+
pages: 'Home, Classes or Schedule, About, and Book or Contact with the form.'
|
|
1396
|
+
},
|
|
1397
|
+
{
|
|
1398
|
+
id: 'beauty',
|
|
1399
|
+
label: 'Beauty & salon',
|
|
1400
|
+
blurb: 'Salons, barbers, spas and studios with style',
|
|
1401
|
+
icon: 'scissors',
|
|
1402
|
+
keywords: [
|
|
1403
|
+
'salon',
|
|
1404
|
+
'hair',
|
|
1405
|
+
'hairdresser',
|
|
1406
|
+
'barber',
|
|
1407
|
+
'barbershop',
|
|
1408
|
+
'nails',
|
|
1409
|
+
'nail',
|
|
1410
|
+
'beauty',
|
|
1411
|
+
'makeup',
|
|
1412
|
+
'lashes',
|
|
1413
|
+
'brows',
|
|
1414
|
+
'esthetician',
|
|
1415
|
+
'skincare',
|
|
1416
|
+
'tattoo',
|
|
1417
|
+
'stylist'
|
|
1418
|
+
],
|
|
1419
|
+
starter: 'business',
|
|
1420
|
+
look: {
|
|
1421
|
+
bases: [
|
|
1422
|
+
'material3',
|
|
1423
|
+
'cupertino',
|
|
1424
|
+
'minimal'
|
|
1425
|
+
],
|
|
1426
|
+
chroma: 'balanced',
|
|
1427
|
+
hues: [
|
|
1428
|
+
[
|
|
1429
|
+
320,
|
|
1430
|
+
360
|
|
1431
|
+
],
|
|
1432
|
+
[
|
|
1433
|
+
0,
|
|
1434
|
+
25
|
|
1435
|
+
],
|
|
1436
|
+
[
|
|
1437
|
+
270,
|
|
1438
|
+
300
|
|
1439
|
+
],
|
|
1440
|
+
[
|
|
1441
|
+
20,
|
|
1442
|
+
45
|
|
1443
|
+
]
|
|
1444
|
+
],
|
|
1445
|
+
grounds: [
|
|
1446
|
+
'warm',
|
|
1447
|
+
'tinted',
|
|
1448
|
+
'white'
|
|
1449
|
+
],
|
|
1450
|
+
fonts: [
|
|
1451
|
+
'garamond',
|
|
1452
|
+
'dmserif',
|
|
1453
|
+
'instrument',
|
|
1454
|
+
'outfit',
|
|
1455
|
+
'syne'
|
|
1456
|
+
],
|
|
1457
|
+
corners: [
|
|
1458
|
+
'round',
|
|
1459
|
+
'pill',
|
|
1460
|
+
'sharp'
|
|
1461
|
+
],
|
|
1462
|
+
buttons: 'pill',
|
|
1463
|
+
headingScale: 1.1,
|
|
1464
|
+
density: 'regular'
|
|
1465
|
+
},
|
|
1466
|
+
design: 'Stylish and image-led: a striking opening image, services as cards, the look and feel of the place in images, and booking made obvious. One brand band.',
|
|
1467
|
+
pages: 'Home, Services, About or The team, and Book or Contact with the form.'
|
|
1468
|
+
},
|
|
1469
|
+
{
|
|
1470
|
+
id: 'realestate',
|
|
1471
|
+
label: 'Real estate',
|
|
1472
|
+
blurb: 'Agents, brokers and property: polished and local',
|
|
1473
|
+
icon: 'home',
|
|
1474
|
+
keywords: [
|
|
1475
|
+
'real estate',
|
|
1476
|
+
'realtor',
|
|
1477
|
+
'realty',
|
|
1478
|
+
'broker',
|
|
1479
|
+
'property',
|
|
1480
|
+
'properties',
|
|
1481
|
+
'homes',
|
|
1482
|
+
'rentals',
|
|
1483
|
+
'rental',
|
|
1484
|
+
'apartment',
|
|
1485
|
+
'apartments',
|
|
1486
|
+
'mortgage',
|
|
1487
|
+
'airbnb',
|
|
1488
|
+
'vacation'
|
|
1489
|
+
],
|
|
1490
|
+
starter: 'business',
|
|
1491
|
+
look: {
|
|
1492
|
+
bases: [
|
|
1493
|
+
'fluent',
|
|
1494
|
+
'minimal',
|
|
1495
|
+
'carbon'
|
|
1496
|
+
],
|
|
1497
|
+
chroma: 'muted',
|
|
1498
|
+
hues: [
|
|
1499
|
+
[
|
|
1500
|
+
200,
|
|
1501
|
+
240
|
|
1502
|
+
],
|
|
1503
|
+
[
|
|
1504
|
+
150,
|
|
1505
|
+
180
|
|
1506
|
+
],
|
|
1507
|
+
[
|
|
1508
|
+
20,
|
|
1509
|
+
45
|
|
1510
|
+
],
|
|
1511
|
+
[
|
|
1512
|
+
0,
|
|
1513
|
+
360
|
|
1514
|
+
]
|
|
1515
|
+
],
|
|
1516
|
+
grounds: [
|
|
1517
|
+
'white',
|
|
1518
|
+
'warm',
|
|
1519
|
+
'cool'
|
|
1520
|
+
],
|
|
1521
|
+
fonts: [
|
|
1522
|
+
'dmserif',
|
|
1523
|
+
'manrope',
|
|
1524
|
+
'editorial',
|
|
1525
|
+
'outfit'
|
|
1526
|
+
],
|
|
1527
|
+
corners: [
|
|
1528
|
+
'soft',
|
|
1529
|
+
'sharp'
|
|
1530
|
+
],
|
|
1531
|
+
buttons: 'rounded',
|
|
1532
|
+
headingScale: 1.05,
|
|
1533
|
+
density: 'regular'
|
|
1534
|
+
},
|
|
1535
|
+
design: 'Polished and local: an image-led opening, the areas served, how buying or selling works as steps, featured listings only as image cards the owner fills in, and a valuation or contact request. One dark band.',
|
|
1536
|
+
pages: 'Home, Buy or Listings, Sell, About, and Contact with the form.'
|
|
1537
|
+
},
|
|
1538
|
+
{
|
|
1539
|
+
id: 'education',
|
|
1540
|
+
label: 'Courses & education',
|
|
1541
|
+
blurb: 'Tutors, schools and courses, clear and encouraging',
|
|
1542
|
+
icon: 'school',
|
|
1543
|
+
keywords: [
|
|
1544
|
+
'course',
|
|
1545
|
+
'courses',
|
|
1546
|
+
'school',
|
|
1547
|
+
'tutoring',
|
|
1548
|
+
'tutor',
|
|
1549
|
+
'teacher',
|
|
1550
|
+
'lessons',
|
|
1551
|
+
'academy',
|
|
1552
|
+
'education',
|
|
1553
|
+
'learning',
|
|
1554
|
+
'training',
|
|
1555
|
+
'daycare',
|
|
1556
|
+
'preschool',
|
|
1557
|
+
'music lessons',
|
|
1558
|
+
'driving'
|
|
1559
|
+
],
|
|
1560
|
+
starter: 'business',
|
|
1561
|
+
look: {
|
|
1562
|
+
bases: [
|
|
1563
|
+
'material3',
|
|
1564
|
+
'ant-design',
|
|
1565
|
+
'material-ui'
|
|
1566
|
+
],
|
|
1567
|
+
chroma: 'balanced',
|
|
1568
|
+
hues: [
|
|
1569
|
+
[
|
|
1570
|
+
200,
|
|
1571
|
+
240
|
|
1572
|
+
],
|
|
1573
|
+
[
|
|
1574
|
+
140,
|
|
1575
|
+
170
|
|
1576
|
+
],
|
|
1577
|
+
[
|
|
1578
|
+
30,
|
|
1579
|
+
50
|
|
1580
|
+
],
|
|
1581
|
+
[
|
|
1582
|
+
260,
|
|
1583
|
+
290
|
|
1584
|
+
]
|
|
1585
|
+
],
|
|
1586
|
+
grounds: [
|
|
1587
|
+
'white',
|
|
1588
|
+
'tinted',
|
|
1589
|
+
'cool'
|
|
1590
|
+
],
|
|
1591
|
+
fonts: [
|
|
1592
|
+
'nunito',
|
|
1593
|
+
'outfit',
|
|
1594
|
+
'jakarta',
|
|
1595
|
+
'lora',
|
|
1596
|
+
'manrope'
|
|
1597
|
+
],
|
|
1598
|
+
corners: [
|
|
1599
|
+
'round',
|
|
1600
|
+
'soft'
|
|
1601
|
+
],
|
|
1602
|
+
buttons: 'rounded',
|
|
1603
|
+
headingScale: 1,
|
|
1604
|
+
density: 'regular'
|
|
1605
|
+
},
|
|
1606
|
+
design: 'Clear and encouraging: who it is for and the result they get, courses or subjects as cards, how it works as steps, common questions as an FAQ, and a sign-up or inquiry section.',
|
|
1607
|
+
pages: 'Home, Courses or Lessons, About or Teachers, and Enroll or Contact with the form.'
|
|
1608
|
+
},
|
|
1609
|
+
{
|
|
1610
|
+
id: 'nonprofit',
|
|
1611
|
+
label: 'Nonprofit & community',
|
|
1612
|
+
blurb: 'A cause, its impact and how to help',
|
|
1613
|
+
icon: 'hands',
|
|
1614
|
+
keywords: [
|
|
1615
|
+
'nonprofit',
|
|
1616
|
+
'non-profit',
|
|
1617
|
+
'charity',
|
|
1618
|
+
'foundation',
|
|
1619
|
+
'church',
|
|
1620
|
+
'community',
|
|
1621
|
+
'volunteer',
|
|
1622
|
+
'volunteers',
|
|
1623
|
+
'association',
|
|
1624
|
+
'ngo',
|
|
1625
|
+
'mission',
|
|
1626
|
+
'ministry',
|
|
1627
|
+
'rescue',
|
|
1628
|
+
'shelter',
|
|
1629
|
+
'cause'
|
|
1630
|
+
],
|
|
1631
|
+
starter: 'business',
|
|
1632
|
+
look: {
|
|
1633
|
+
bases: [
|
|
1634
|
+
'material3',
|
|
1635
|
+
'fluent',
|
|
1636
|
+
'starter'
|
|
1637
|
+
],
|
|
1638
|
+
chroma: 'balanced',
|
|
1639
|
+
hues: [
|
|
1640
|
+
[
|
|
1641
|
+
130,
|
|
1642
|
+
200
|
|
1643
|
+
],
|
|
1644
|
+
[
|
|
1645
|
+
20,
|
|
1646
|
+
45
|
|
1647
|
+
],
|
|
1648
|
+
[
|
|
1649
|
+
200,
|
|
1650
|
+
230
|
|
1651
|
+
],
|
|
1652
|
+
[
|
|
1653
|
+
340,
|
|
1654
|
+
360
|
|
1655
|
+
]
|
|
1656
|
+
],
|
|
1657
|
+
grounds: [
|
|
1658
|
+
'white',
|
|
1659
|
+
'warm'
|
|
1660
|
+
],
|
|
1661
|
+
fonts: [
|
|
1662
|
+
'merriweather',
|
|
1663
|
+
'lora',
|
|
1664
|
+
'jakarta',
|
|
1665
|
+
'fraunces',
|
|
1666
|
+
'nunito'
|
|
1667
|
+
],
|
|
1668
|
+
corners: [
|
|
1669
|
+
'soft',
|
|
1670
|
+
'round'
|
|
1671
|
+
],
|
|
1672
|
+
buttons: 'rounded',
|
|
1673
|
+
headingScale: 1.05,
|
|
1674
|
+
density: 'regular'
|
|
1675
|
+
},
|
|
1676
|
+
design: 'Mission-led: the cause in one line, what the organization does as cards, how to help as steps (volunteer, give, spread the word), and a clear way to get involved. A brand band for the call to help.',
|
|
1677
|
+
pages: 'Home, Our work or Programs, About, and Get involved or Contact with the form.'
|
|
1678
|
+
},
|
|
1679
|
+
{
|
|
1680
|
+
id: 'music',
|
|
1681
|
+
label: 'Music & bands',
|
|
1682
|
+
blurb: 'Artists, bands and DJs, loud and visual',
|
|
1683
|
+
icon: 'music',
|
|
1684
|
+
keywords: [
|
|
1685
|
+
'band',
|
|
1686
|
+
'musician',
|
|
1687
|
+
'music',
|
|
1688
|
+
'dj',
|
|
1689
|
+
'singer',
|
|
1690
|
+
'rapper',
|
|
1691
|
+
'producer',
|
|
1692
|
+
'orchestra',
|
|
1693
|
+
'choir',
|
|
1694
|
+
'composer',
|
|
1695
|
+
'artist music'
|
|
1696
|
+
],
|
|
1697
|
+
starter: 'landing',
|
|
1698
|
+
look: {
|
|
1699
|
+
bases: [
|
|
1700
|
+
'carbon',
|
|
1701
|
+
'minimal',
|
|
1702
|
+
'material-ui'
|
|
1703
|
+
],
|
|
1704
|
+
chroma: 'vivid',
|
|
1705
|
+
hues: ALL_HUES,
|
|
1706
|
+
grounds: [
|
|
1707
|
+
'white',
|
|
1708
|
+
'cool',
|
|
1709
|
+
'tinted'
|
|
1710
|
+
],
|
|
1711
|
+
fonts: [
|
|
1712
|
+
'anton',
|
|
1713
|
+
'syne',
|
|
1714
|
+
'grotesk',
|
|
1715
|
+
'archivo'
|
|
1716
|
+
],
|
|
1717
|
+
corners: [
|
|
1718
|
+
'sharp'
|
|
1719
|
+
],
|
|
1720
|
+
buttons: 'caps',
|
|
1721
|
+
headingScale: 1.3,
|
|
1722
|
+
density: 'regular'
|
|
1723
|
+
},
|
|
1724
|
+
design: 'Loud and visual: the name huge in the opening, an image band, releases or shows as image cards only as the brief gives them, a short bio, and a booking or contact section. Dark bands are welcome.',
|
|
1725
|
+
pages: 'Home, Music or Shows, About, and Booking or Contact with the form.'
|
|
1726
|
+
},
|
|
1727
|
+
{
|
|
1728
|
+
id: 'personal',
|
|
1729
|
+
label: 'Personal & resume',
|
|
1730
|
+
blurb: 'A simple page about you and your work',
|
|
1731
|
+
icon: 'person',
|
|
1732
|
+
keywords: [
|
|
1733
|
+
'personal',
|
|
1734
|
+
'resume',
|
|
1735
|
+
'cv',
|
|
1736
|
+
'me',
|
|
1737
|
+
'myself',
|
|
1738
|
+
'profile',
|
|
1739
|
+
'job',
|
|
1740
|
+
'candidate',
|
|
1741
|
+
'speaker'
|
|
1742
|
+
],
|
|
1743
|
+
starter: 'portfolio',
|
|
1744
|
+
look: {
|
|
1745
|
+
bases: [
|
|
1746
|
+
'minimal',
|
|
1747
|
+
'cupertino',
|
|
1748
|
+
'starter',
|
|
1749
|
+
'fluent'
|
|
1750
|
+
],
|
|
1751
|
+
chroma: 'muted',
|
|
1752
|
+
hues: ALL_HUES,
|
|
1753
|
+
grounds: [
|
|
1754
|
+
'white',
|
|
1755
|
+
'warm',
|
|
1756
|
+
'cool'
|
|
1757
|
+
],
|
|
1758
|
+
fonts: [
|
|
1759
|
+
'inter',
|
|
1760
|
+
'instrument',
|
|
1761
|
+
'manrope',
|
|
1762
|
+
'lora',
|
|
1763
|
+
'grotesk'
|
|
1764
|
+
],
|
|
1765
|
+
corners: [
|
|
1766
|
+
'soft',
|
|
1767
|
+
'round'
|
|
1768
|
+
],
|
|
1769
|
+
buttons: 'rounded',
|
|
1770
|
+
headingScale: 1.1,
|
|
1771
|
+
density: 'airy'
|
|
1772
|
+
},
|
|
1773
|
+
design: 'Simple and personal: who the person is in one line, what they do, experience or highlights as a list or steps, selected work as cards where the brief names some, and a way to get in touch. Mostly plain bands.',
|
|
1774
|
+
pages: 'Home, About or Experience, Work where the brief names some, and Contact.'
|
|
1775
|
+
},
|
|
1776
|
+
{
|
|
1777
|
+
id: 'landing',
|
|
1778
|
+
label: 'Landing page',
|
|
1779
|
+
blurb: 'One page that leads to one action',
|
|
1780
|
+
icon: 'rocket',
|
|
1781
|
+
keywords: [
|
|
1782
|
+
'landing',
|
|
1783
|
+
'launch',
|
|
1784
|
+
'app',
|
|
1785
|
+
'startup',
|
|
1786
|
+
'saas',
|
|
1787
|
+
'software',
|
|
1788
|
+
'product',
|
|
1789
|
+
'waitlist',
|
|
1790
|
+
'campaign',
|
|
1791
|
+
'offer',
|
|
1792
|
+
'ebook',
|
|
1793
|
+
'webinar'
|
|
1794
|
+
],
|
|
1795
|
+
starter: 'landing',
|
|
1796
|
+
look: {
|
|
1797
|
+
bases: [
|
|
1798
|
+
'material3',
|
|
1799
|
+
'minimal',
|
|
1800
|
+
'ant-design'
|
|
1801
|
+
],
|
|
1802
|
+
chroma: 'vivid',
|
|
1803
|
+
hues: ALL_HUES,
|
|
1804
|
+
grounds: [
|
|
1805
|
+
'white',
|
|
1806
|
+
'cool',
|
|
1807
|
+
'tinted'
|
|
1808
|
+
],
|
|
1809
|
+
fonts: [
|
|
1810
|
+
'outfit',
|
|
1811
|
+
'jakarta',
|
|
1812
|
+
'manrope',
|
|
1813
|
+
'bricolage',
|
|
1814
|
+
'inter'
|
|
1815
|
+
],
|
|
1816
|
+
corners: [
|
|
1817
|
+
'round',
|
|
1818
|
+
'soft'
|
|
1819
|
+
],
|
|
1820
|
+
buttons: 'pill',
|
|
1821
|
+
headingScale: 1.15,
|
|
1822
|
+
density: 'regular'
|
|
1823
|
+
},
|
|
1824
|
+
design: 'One action: a strong promise and the call to action first, the benefits as cards, how it works as steps, answers to objections as an FAQ, and the call to action again. A brand band to close.',
|
|
1825
|
+
pages: 'One long home page carries the story; a second page only for the form or details the brief asks for.'
|
|
1826
|
+
},
|
|
1827
|
+
{
|
|
1828
|
+
id: 'coming-soon',
|
|
1829
|
+
label: 'Coming soon',
|
|
1830
|
+
blurb: 'A placeholder that collects interest',
|
|
1831
|
+
icon: 'clock',
|
|
1832
|
+
keywords: [
|
|
1833
|
+
'coming soon',
|
|
1834
|
+
'soon',
|
|
1835
|
+
'prelaunch',
|
|
1836
|
+
'pre-launch',
|
|
1837
|
+
'under construction',
|
|
1838
|
+
'placeholder'
|
|
1839
|
+
],
|
|
1840
|
+
starter: 'landing',
|
|
1841
|
+
look: {
|
|
1842
|
+
bases: [
|
|
1843
|
+
'minimal',
|
|
1844
|
+
'material3',
|
|
1845
|
+
'cupertino'
|
|
1846
|
+
],
|
|
1847
|
+
chroma: 'vivid',
|
|
1848
|
+
hues: ALL_HUES,
|
|
1849
|
+
grounds: [
|
|
1850
|
+
'white',
|
|
1851
|
+
'tinted',
|
|
1852
|
+
'cool'
|
|
1853
|
+
],
|
|
1854
|
+
fonts: [
|
|
1855
|
+
'syne',
|
|
1856
|
+
'anton',
|
|
1857
|
+
'outfit',
|
|
1858
|
+
'instrument'
|
|
1859
|
+
],
|
|
1860
|
+
corners: [
|
|
1861
|
+
'round',
|
|
1862
|
+
'pill'
|
|
1863
|
+
],
|
|
1864
|
+
buttons: 'pill',
|
|
1865
|
+
headingScale: 1.3,
|
|
1866
|
+
density: 'airy'
|
|
1867
|
+
},
|
|
1868
|
+
design: 'Short and striking: what is coming in one big line, two or three reasons to care, and a way to hear first through the form. Few sections, big type.',
|
|
1869
|
+
pages: 'A home page that says what is coming and invites people to sign up; nothing else unless the brief asks.'
|
|
1870
|
+
}
|
|
1871
|
+
];
|
|
1872
|
+
/** A kind by id, or `null`. */ export function aiSiteKind(id) {
|
|
1873
|
+
var _AI_SITE_KINDS_find;
|
|
1874
|
+
if (typeof id !== 'string' || !id) return null;
|
|
1875
|
+
return (_AI_SITE_KINDS_find = AI_SITE_KINDS.find((kind)=>kind.id === id)) != null ? _AI_SITE_KINDS_find : null;
|
|
1876
|
+
}
|
|
1877
|
+
/** A pairing by id, or `null`. */ export function aiSiteFontPairing(id) {
|
|
1878
|
+
var _AI_SITE_FONT_PAIRINGS_find;
|
|
1879
|
+
if (typeof id !== 'string' || !id) return null;
|
|
1880
|
+
return (_AI_SITE_FONT_PAIRINGS_find = AI_SITE_FONT_PAIRINGS.find((pairing)=>pairing.id === id)) != null ? _AI_SITE_FONT_PAIRINGS_find : null;
|
|
1881
|
+
}
|
|
1882
|
+
const words = (text)=>` ${text.toLowerCase().replace(/[^a-z0-9é&'-]+/g, ' ')} `;
|
|
1883
|
+
/**
|
|
1884
|
+
* The kind a "what kind of site" answer suggests, or `business` when nothing
|
|
1885
|
+
* in it matches: the card the guided start selects until the person picks
|
|
1886
|
+
* another. A longer keyword wins over a shorter one ("wedding photographer"
|
|
1887
|
+
* is photography, not events), and of two as long the later one wins, since
|
|
1888
|
+
* English puts the noun last ("a food blog" is a blog).
|
|
1889
|
+
*/ export function aiSiteKindFor(siteType) {
|
|
1890
|
+
var _ref;
|
|
1891
|
+
const text = words(siteType);
|
|
1892
|
+
let best = null;
|
|
1893
|
+
for (const kind of AI_SITE_KINDS){
|
|
1894
|
+
for (const keyword of kind.keywords){
|
|
1895
|
+
const at = text.lastIndexOf(words(keyword));
|
|
1896
|
+
if (at === -1) continue;
|
|
1897
|
+
if (!best || keyword.length > best.length || keyword.length === best.length && at > best.at) {
|
|
1898
|
+
best = {
|
|
1899
|
+
kind,
|
|
1900
|
+
length: keyword.length,
|
|
1901
|
+
at
|
|
1902
|
+
};
|
|
1903
|
+
}
|
|
1904
|
+
}
|
|
1905
|
+
}
|
|
1906
|
+
return (_ref = best == null ? void 0 : best.kind) != null ? _ref : AI_SITE_KINDS[0];
|
|
1907
|
+
}
|
|
1908
|
+
/** The kind a job's inputs name, else the one its business type suggests; `null` for a job that names neither. */ export function aiSiteKindOfInputs(inputs) {
|
|
1909
|
+
const named = aiSiteKind(inputs == null ? void 0 : inputs['siteKind']);
|
|
1910
|
+
if (named) return named;
|
|
1911
|
+
const type = inputs == null ? void 0 : inputs['businessType'];
|
|
1912
|
+
return typeof type === 'string' && type.trim() ? aiSiteKindFor(type) : null;
|
|
1913
|
+
}
|
|
1914
|
+
/** What each band rhythm asks of a page's sections. */ const RHYTHM_WORDS = {
|
|
1915
|
+
calm: 'mostly plain bands with one soft band, and a brand or dark band only for the closing call to action',
|
|
1916
|
+
alternating: 'plain and soft bands by turns, with one brand band',
|
|
1917
|
+
bold: 'a dark or brand band to open or close, and strong contrast between neighboring sections'
|
|
1918
|
+
};
|
|
1919
|
+
/** The site's own look tokens a unit is handed (AGL-3660), read defensively. */ export function aiSiteStyleTokens(inputs) {
|
|
1920
|
+
const raw = inputs == null ? void 0 : inputs['siteStyle'];
|
|
1921
|
+
if (!raw || typeof raw !== 'object') return {};
|
|
1922
|
+
const style = raw;
|
|
1923
|
+
return _extends({}, style['headerAlign'] === 'start' || style['headerAlign'] === 'center' ? {
|
|
1924
|
+
headerAlign: style['headerAlign']
|
|
1925
|
+
} : {}, AI_SITE_RHYTHMS.includes(style['rhythm']) ? {
|
|
1926
|
+
rhythm: style['rhythm']
|
|
1927
|
+
} : {});
|
|
1928
|
+
}
|
|
1929
|
+
/** The style lines a page, the header and the footer are told for the job's kind and look; empty for none. */ export function aiSiteKindDesignLines(inputs) {
|
|
1930
|
+
const kind = aiSiteKindOfInputs(inputs);
|
|
1931
|
+
const { rhythm } = aiSiteStyleTokens(inputs);
|
|
1932
|
+
return [
|
|
1933
|
+
...kind ? [
|
|
1934
|
+
`Style: a ${kind.label.toLowerCase()} site. ${kind.design}`
|
|
1935
|
+
] : [],
|
|
1936
|
+
...rhythm ? [
|
|
1937
|
+
`Band rhythm for this site: ${RHYTHM_WORDS[rhythm]}.`
|
|
1938
|
+
] : []
|
|
1939
|
+
];
|
|
1940
|
+
}
|
|
1941
|
+
|
|
1942
|
+
//# sourceMappingURL=ai-site-kinds.js.map
|