@elementor/editor-canvas 4.3.0-973 → 4.3.0-975

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/dist/index.js CHANGED
@@ -227,37 +227,10 @@ function extractV3ControlsMetadata(controls) {
227
227
  var CANVAS_SERVER_NAME = "editor-canvas";
228
228
  var WIDGET_SCHEMA_URI = "elementor://widgets/schema/{widgetType}";
229
229
  var WIDGET_SCHEMA_FULL_URI = `${CANVAS_SERVER_NAME}_${WIDGET_SCHEMA_URI}`;
230
- var BEST_PRACTICES_URI = "elementor://styles/best-practices";
230
+ var BEST_PRACTICES_URI = "elementor://style/best-practices";
231
231
  var BEST_PRACTICES_FULL_URI = `${CANVAS_SERVER_NAME}_${BEST_PRACTICES_URI}`;
232
232
  var initWidgetsSchemaResource = (reg) => {
233
233
  const { resource } = reg;
234
- resource(
235
- "styles-best-practices",
236
- BEST_PRACTICES_URI,
237
- {
238
- description: "Styling best practices"
239
- },
240
- async () => {
241
- return {
242
- contents: [
243
- {
244
- uri: BEST_PRACTICES_URI,
245
- text: `# Styling best practices
246
- Prefer using "em" and "rem" values for text-related sizes, padding and spacing. Use percentages for dynamic sizing relative to parent containers.
247
- This flexboxes are by default "flex" with "stretch" alignment. To ensure proper layout, define the "justify-content" and "align-items" as in the schema.
248
-
249
- Styling is provided as raw CSS. The css string must follow standard CSS syntax, with properties and values separated by semicolons, no selectors, or nesting rules allowed.
250
-
251
- ** CRITICAL - VARIABLES **
252
- When using global variables, ensure that the variables are defined in the ${"elementor://global-variables"} resource.
253
- Variables from the user context ARE NOT SUPPORTED AND WILL RESOLVE IN ERROR.
254
-
255
- `
256
- }
257
- ]
258
- };
259
- }
260
- );
261
234
  resource(
262
235
  "widget-schema-by-type",
263
236
  new import_editor_mcp.ResourceTemplate(WIDGET_SCHEMA_URI, {
@@ -4195,6 +4168,36 @@ var initAvailableWidgetsResource = (reg) => {
4195
4168
  onV1Ready();
4196
4169
  };
4197
4170
 
4171
+ // src/mcp/resources/best-practices-resource.ts
4172
+ var import_http_client2 = require("@elementor/http-client");
4173
+ var MCP_PROXY_URL = "elementor/v1/mcp-proxy";
4174
+ var BEST_PRACTICES_URI2 = "elementor://style/best-practices";
4175
+ var initBestPracticesResource = (reg) => {
4176
+ const { resource } = reg;
4177
+ resource(
4178
+ "style-best-practices",
4179
+ BEST_PRACTICES_URI2,
4180
+ {
4181
+ description: "Design quality guidelines for avoiding generic AI output: typography, color strategy, spacing, motion, and visual hierarchy best practices.",
4182
+ mimeType: "text/markdown"
4183
+ },
4184
+ async (uri) => {
4185
+ const { data } = await (0, import_http_client2.httpService)().get(MCP_PROXY_URL, {
4186
+ params: { uri: uri.href }
4187
+ });
4188
+ return {
4189
+ contents: [
4190
+ {
4191
+ uri: uri.href,
4192
+ mimeType: "text/markdown",
4193
+ text: data.data
4194
+ }
4195
+ ]
4196
+ };
4197
+ }
4198
+ );
4199
+ };
4200
+
4198
4201
  // src/mcp/resources/document-structure-resource.ts
4199
4202
  var import_editor_elements11 = require("@elementor/editor-elements");
4200
4203
  var import_editor_v1_adapters16 = require("@elementor/editor-v1-adapters");
@@ -5913,9 +5916,9 @@ Provide styling as raw CSS via the "style" parameter (a flat map of CSS property
5913
5916
 
5914
5917
  // src/mcp/tools/create-element/tool.ts
5915
5918
  var import_editor_documents4 = require("@elementor/editor-documents");
5916
- var import_http_client2 = require("@elementor/http-client");
5919
+ var import_http_client3 = require("@elementor/http-client");
5917
5920
  var import_schema5 = require("@elementor/schema");
5918
- var MCP_PROXY_URL = "elementor/v1/mcp-proxy";
5921
+ var MCP_PROXY_URL2 = "elementor/v1/mcp-proxy";
5919
5922
  var initCreateElementTool = (reg) => {
5920
5923
  const { addTool } = reg;
5921
5924
  addTool({
@@ -5935,7 +5938,7 @@ var initCreateElementTool = (reg) => {
5935
5938
  if (!document2?.id) {
5936
5939
  throw new Error("No active document found.");
5937
5940
  }
5938
- const { data } = await (0, import_http_client2.httpService)().post(MCP_PROXY_URL, {
5941
+ const { data } = await (0, import_http_client3.httpService)().post(MCP_PROXY_URL2, {
5939
5942
  tool: "create-element",
5940
5943
  input: {
5941
5944
  parent_id: parentId ?? "document",
@@ -6055,6 +6058,7 @@ var initCanvasMcp = (reg) => {
6055
6058
  initSelectedElementResource(reg);
6056
6059
  initEditorStateResource(reg);
6057
6060
  initGeneralContextResource(reg);
6061
+ initBestPracticesResource(reg);
6058
6062
  initBuildCompositionsTool(reg);
6059
6063
  initGetElementConfigTool(reg);
6060
6064
  initConfigureElementTool(reg);
package/dist/index.mjs CHANGED
@@ -160,37 +160,10 @@ function extractV3ControlsMetadata(controls) {
160
160
  var CANVAS_SERVER_NAME = "editor-canvas";
161
161
  var WIDGET_SCHEMA_URI = "elementor://widgets/schema/{widgetType}";
162
162
  var WIDGET_SCHEMA_FULL_URI = `${CANVAS_SERVER_NAME}_${WIDGET_SCHEMA_URI}`;
163
- var BEST_PRACTICES_URI = "elementor://styles/best-practices";
163
+ var BEST_PRACTICES_URI = "elementor://style/best-practices";
164
164
  var BEST_PRACTICES_FULL_URI = `${CANVAS_SERVER_NAME}_${BEST_PRACTICES_URI}`;
165
165
  var initWidgetsSchemaResource = (reg) => {
166
166
  const { resource } = reg;
167
- resource(
168
- "styles-best-practices",
169
- BEST_PRACTICES_URI,
170
- {
171
- description: "Styling best practices"
172
- },
173
- async () => {
174
- return {
175
- contents: [
176
- {
177
- uri: BEST_PRACTICES_URI,
178
- text: `# Styling best practices
179
- Prefer using "em" and "rem" values for text-related sizes, padding and spacing. Use percentages for dynamic sizing relative to parent containers.
180
- This flexboxes are by default "flex" with "stretch" alignment. To ensure proper layout, define the "justify-content" and "align-items" as in the schema.
181
-
182
- Styling is provided as raw CSS. The css string must follow standard CSS syntax, with properties and values separated by semicolons, no selectors, or nesting rules allowed.
183
-
184
- ** CRITICAL - VARIABLES **
185
- When using global variables, ensure that the variables are defined in the ${"elementor://global-variables"} resource.
186
- Variables from the user context ARE NOT SUPPORTED AND WILL RESOLVE IN ERROR.
187
-
188
- `
189
- }
190
- ]
191
- };
192
- }
193
- );
194
167
  resource(
195
168
  "widget-schema-by-type",
196
169
  new ResourceTemplate(WIDGET_SCHEMA_URI, {
@@ -4158,6 +4131,36 @@ var initAvailableWidgetsResource = (reg) => {
4158
4131
  onV1Ready();
4159
4132
  };
4160
4133
 
4134
+ // src/mcp/resources/best-practices-resource.ts
4135
+ import { httpService as httpService2 } from "@elementor/http-client";
4136
+ var MCP_PROXY_URL = "elementor/v1/mcp-proxy";
4137
+ var BEST_PRACTICES_URI2 = "elementor://style/best-practices";
4138
+ var initBestPracticesResource = (reg) => {
4139
+ const { resource } = reg;
4140
+ resource(
4141
+ "style-best-practices",
4142
+ BEST_PRACTICES_URI2,
4143
+ {
4144
+ description: "Design quality guidelines for avoiding generic AI output: typography, color strategy, spacing, motion, and visual hierarchy best practices.",
4145
+ mimeType: "text/markdown"
4146
+ },
4147
+ async (uri) => {
4148
+ const { data } = await httpService2().get(MCP_PROXY_URL, {
4149
+ params: { uri: uri.href }
4150
+ });
4151
+ return {
4152
+ contents: [
4153
+ {
4154
+ uri: uri.href,
4155
+ mimeType: "text/markdown",
4156
+ text: data.data
4157
+ }
4158
+ ]
4159
+ };
4160
+ }
4161
+ );
4162
+ };
4163
+
4161
4164
  // src/mcp/resources/document-structure-resource.ts
4162
4165
  import {
4163
4166
  getWidgetsCache as getWidgetsCache4
@@ -5898,9 +5901,9 @@ Provide styling as raw CSS via the "style" parameter (a flat map of CSS property
5898
5901
 
5899
5902
  // src/mcp/tools/create-element/tool.ts
5900
5903
  import { getCurrentDocument as getCurrentDocument2 } from "@elementor/editor-documents";
5901
- import { httpService as httpService2 } from "@elementor/http-client";
5904
+ import { httpService as httpService3 } from "@elementor/http-client";
5902
5905
  import { z as z3 } from "@elementor/schema";
5903
- var MCP_PROXY_URL = "elementor/v1/mcp-proxy";
5906
+ var MCP_PROXY_URL2 = "elementor/v1/mcp-proxy";
5904
5907
  var initCreateElementTool = (reg) => {
5905
5908
  const { addTool } = reg;
5906
5909
  addTool({
@@ -5920,7 +5923,7 @@ var initCreateElementTool = (reg) => {
5920
5923
  if (!document2?.id) {
5921
5924
  throw new Error("No active document found.");
5922
5925
  }
5923
- const { data } = await httpService2().post(MCP_PROXY_URL, {
5926
+ const { data } = await httpService3().post(MCP_PROXY_URL2, {
5924
5927
  tool: "create-element",
5925
5928
  input: {
5926
5929
  parent_id: parentId ?? "document",
@@ -6040,6 +6043,7 @@ var initCanvasMcp = (reg) => {
6040
6043
  initSelectedElementResource(reg);
6041
6044
  initEditorStateResource(reg);
6042
6045
  initGeneralContextResource(reg);
6046
+ initBestPracticesResource(reg);
6043
6047
  initBuildCompositionsTool(reg);
6044
6048
  initGetElementConfigTool(reg);
6045
6049
  initConfigureElementTool(reg);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@elementor/editor-canvas",
3
3
  "description": "Elementor Editor Canvas",
4
- "version": "4.3.0-973",
4
+ "version": "4.3.0-975",
5
5
  "private": false,
6
6
  "author": "Elementor Team",
7
7
  "homepage": "https://elementor.com/",
@@ -37,26 +37,26 @@
37
37
  "react-dom": "^18.3.1"
38
38
  },
39
39
  "dependencies": {
40
- "@elementor/editor": "4.3.0-973",
41
- "@elementor/editor-controls": "4.3.0-973",
42
- "@elementor/editor-documents": "4.3.0-973",
43
- "@elementor/editor-elements": "4.3.0-973",
44
- "@elementor/editor-interactions": "4.3.0-973",
45
- "@elementor/editor-mcp": "4.3.0-973",
46
- "@elementor/editor-notifications": "4.3.0-973",
47
- "@elementor/editor-props": "4.3.0-973",
48
- "@elementor/editor-responsive": "4.3.0-973",
49
- "@elementor/editor-styles": "4.3.0-973",
50
- "@elementor/editor-styles-repository": "4.3.0-973",
51
- "@elementor/editor-ui": "4.3.0-973",
52
- "@elementor/editor-v1-adapters": "4.3.0-973",
53
- "@elementor/events": "4.3.0-973",
54
- "@elementor/http-client": "4.3.0-973",
55
- "@elementor/schema": "4.3.0-973",
56
- "@elementor/twing": "4.3.0-973",
40
+ "@elementor/editor": "4.3.0-975",
41
+ "@elementor/editor-controls": "4.3.0-975",
42
+ "@elementor/editor-documents": "4.3.0-975",
43
+ "@elementor/editor-elements": "4.3.0-975",
44
+ "@elementor/editor-interactions": "4.3.0-975",
45
+ "@elementor/editor-mcp": "4.3.0-975",
46
+ "@elementor/editor-notifications": "4.3.0-975",
47
+ "@elementor/editor-props": "4.3.0-975",
48
+ "@elementor/editor-responsive": "4.3.0-975",
49
+ "@elementor/editor-styles": "4.3.0-975",
50
+ "@elementor/editor-styles-repository": "4.3.0-975",
51
+ "@elementor/editor-ui": "4.3.0-975",
52
+ "@elementor/editor-v1-adapters": "4.3.0-975",
53
+ "@elementor/events": "4.3.0-975",
54
+ "@elementor/http-client": "4.3.0-975",
55
+ "@elementor/schema": "4.3.0-975",
56
+ "@elementor/twing": "4.3.0-975",
57
57
  "@elementor/ui": "1.37.5",
58
- "@elementor/utils": "4.3.0-973",
59
- "@elementor/wp-media": "4.3.0-973",
58
+ "@elementor/utils": "4.3.0-975",
59
+ "@elementor/wp-media": "4.3.0-975",
60
60
  "@floating-ui/react": "^0.27.5",
61
61
  "@wordpress/i18n": "^5.13.0",
62
62
  "dompurify": "^3.2.6"
@@ -2,6 +2,7 @@ import { type MCPRegistryEntry } from '@elementor/editor-mcp';
2
2
  import { Schema } from '@elementor/editor-props';
3
3
 
4
4
  import { initAvailableWidgetsResource } from './resources/available-widgets-resource';
5
+ import { initBestPracticesResource } from './resources/best-practices-resource';
5
6
  import { initBreakpointsResource } from './resources/breakpoints-resource';
6
7
  import { initDocumentStructureResource } from './resources/document-structure-resource';
7
8
  import { initDynamicTagsResource } from './resources/dynamic-tags-resource';
@@ -27,6 +28,7 @@ export const initCanvasMcp = ( reg: MCPRegistryEntry ) => {
27
28
  initSelectedElementResource( reg );
28
29
  initEditorStateResource( reg );
29
30
  initGeneralContextResource( reg );
31
+ initBestPracticesResource( reg );
30
32
  initBuildCompositionsTool( reg );
31
33
  initGetElementConfigTool( reg );
32
34
  initConfigureElementTool( reg );
@@ -0,0 +1,34 @@
1
+ import { type MCPRegistryEntry } from '@elementor/editor-mcp';
2
+ import { type HttpResponse, httpService } from '@elementor/http-client';
3
+
4
+ const MCP_PROXY_URL = 'elementor/v1/mcp-proxy';
5
+ export const BEST_PRACTICES_URI = 'elementor://style/best-practices';
6
+
7
+ export const initBestPracticesResource = ( reg: MCPRegistryEntry ) => {
8
+ const { resource } = reg;
9
+
10
+ resource(
11
+ 'style-best-practices',
12
+ BEST_PRACTICES_URI,
13
+ {
14
+ description:
15
+ 'Design quality guidelines for avoiding generic AI output: typography, color strategy, spacing, motion, and visual hierarchy best practices.',
16
+ mimeType: 'text/markdown',
17
+ },
18
+ async ( uri: URL ) => {
19
+ const { data } = await httpService().get< HttpResponse< string > >( MCP_PROXY_URL, {
20
+ params: { uri: uri.href },
21
+ } );
22
+
23
+ return {
24
+ contents: [
25
+ {
26
+ uri: uri.href,
27
+ mimeType: 'text/markdown',
28
+ text: data.data,
29
+ },
30
+ ],
31
+ };
32
+ }
33
+ );
34
+ };
@@ -59,40 +59,12 @@ export const CANVAS_SERVER_NAME = 'editor-canvas';
59
59
  export const WIDGET_SCHEMA_URI = 'elementor://widgets/schema/{widgetType}';
60
60
  export const WIDGET_SCHEMA_FULL_URI = `${ CANVAS_SERVER_NAME }_${ WIDGET_SCHEMA_URI }`;
61
61
  export const STYLE_SCHEMA_URI = 'elementor://styles/schema/{category}';
62
- export const BEST_PRACTICES_URI = 'elementor://styles/best-practices';
62
+ export const BEST_PRACTICES_URI = 'elementor://style/best-practices';
63
63
  export const BEST_PRACTICES_FULL_URI = `${ CANVAS_SERVER_NAME }_${ BEST_PRACTICES_URI }`;
64
64
 
65
65
  export const initWidgetsSchemaResource = ( reg: MCPRegistryEntry ) => {
66
66
  const { resource } = reg;
67
67
 
68
- resource(
69
- 'styles-best-practices',
70
- BEST_PRACTICES_URI,
71
- {
72
- description: 'Styling best practices',
73
- },
74
- async () => {
75
- return {
76
- contents: [
77
- {
78
- uri: BEST_PRACTICES_URI,
79
- text: `# Styling best practices
80
- Prefer using "em" and "rem" values for text-related sizes, padding and spacing. Use percentages for dynamic sizing relative to parent containers.
81
- This flexboxes are by default "flex" with "stretch" alignment. To ensure proper layout, define the "justify-content" and "align-items" as in the schema.
82
-
83
- Styling is provided as raw CSS. The css string must follow standard CSS syntax, with properties and values separated by semicolons, no selectors, or nesting rules allowed.
84
-
85
- ** CRITICAL - VARIABLES **
86
- When using global variables, ensure that the variables are defined in the ${ 'elementor://global-variables' } resource.
87
- Variables from the user context ARE NOT SUPPORTED AND WILL RESOLVE IN ERROR.
88
-
89
- `,
90
- },
91
- ],
92
- };
93
- }
94
- );
95
-
96
68
  resource(
97
69
  'widget-schema-by-type',
98
70
  new ResourceTemplate( WIDGET_SCHEMA_URI, {
@@ -1,159 +0,0 @@
1
- export const BEST_PRACTICES_PROMPT = `
2
- # DESIGN QUALITY IMPERATIVE
3
-
4
- You are generating designs for real users who expect distinctive, intentional aesthetics - NOT generic AI output.
5
-
6
- **The Core Challenge**: Large language models naturally converge toward statistically common design patterns during generation. This creates predictable, uninspired results that users describe as "AI slop": safe color schemes, default typography hierarchies, minimal contrast, and timid spacing.
7
-
8
- **Your Mission**: Actively resist distributional convergence by making intentional, distinctive design choices across all aesthetic dimensions. Every design decision should have a clear purpose tied to visual hierarchy, brand personality, or user experience goals.
9
-
10
- When in doubt between "safe" and "distinctive," choose distinctive - users can always request refinements, but they cannot salvage generic foundations.
11
-
12
- ---
13
-
14
- # DESIGN VECTORS - Concrete Implementation Guidance
15
-
16
- ## 1. Typography & Visual Hierarchy
17
-
18
- ### Avoid Distributional Defaults:
19
- - NO generic sans-serifs as primary typefaces (Inter, Roboto, Arial, Helvetica)
20
- - NO timid size ratios (1.2x, 1.5x scaling)
21
- - NO uniform font weights (everything at 400 or 600)
22
-
23
- ### Intentional Alternatives:
24
- - **For Technical/Modern**: Consider monospace headlines (JetBrains Mono, SF Mono) paired with clean body text
25
- - **For Editorial/Elegant**: Consider serif headlines (Playfair Display, Crimson Text) with sans-serif body
26
- - **For Playful/Creative**: Consider display fonts with character, paired with highly legible body text
27
-
28
- ### Scale & Contrast Implementation:
29
- - Headline-to-body size ratios: 3x minimum (e.g., 48px headline vs 16px body)
30
- - Use extreme weight contrasts: pair weight-100 or 200 with weight-800 or 900
31
- - Line height contrasts: tight headlines (1.1) vs. generous body (1.7)
32
- - Letter spacing: compressed headlines (-0.02em to -0.05em) vs. open small text (0.03em+)
33
-
34
- ## 2. Color & Theme Strategy
35
-
36
- ### Avoid Distributional Defaults:
37
- - NO purple gradients or blue-purple color schemes (massively overrepresented in AI output)
38
- - NO evenly-distributed color palettes (3-4 colors used equally)
39
- - NO timid pastels or all-neutral schemes
40
- - NO #333333, #666666, #999999 grays
41
-
42
- ### Intentional Alternatives:
43
- - **Commit to a Dominant Color**: Choose ONE primary brand color that appears in 60-70% of colored elements
44
- - **Sharp Accent Strategy**: Use 1-2 high-contrast accent colors sparingly (10-15% of colored elements)
45
- - **Neutrals with Personality**: Replace pure grays with warm (#3d3228, #f5f1ed) or cool (#2a2f3d, #f0f2f5) tinted neutrals
46
-
47
- ### Color Psychology Mapping:
48
- - Energy/Action → Warm reds, oranges, yellows (NOT purple/blue)
49
- - Trust/Calm → Deep teals, forest greens (NOT generic blue)
50
- - Luxury/Premium → Deep burgundy, emerald, charcoal with gold accents
51
- - Playful/Creative → Unexpected combinations (coral + mint, mustard + navy)
52
-
53
- ## 3. Spatial Design & White Space
54
-
55
- ### Avoid Distributional Defaults:
56
- - NO uniform spacing (everything 16px or 24px)
57
- - NO cramped layouts that maximize content density
58
- - NO default container widths (1200px, 1440px)
59
-
60
- ### Intentional Alternatives:
61
- - **Breathing Room**: Use generous white space as a design element (80-120px vertical spacing between sections)
62
- - **Asymmetric Spacing**: Vary padding dramatically (small: 12px, medium: 48px, large: 96px)
63
- - **Content Width Strategy**:
64
- - Reading content: max 65-75 characters (600-700px)
65
- - Hero sections: asymmetric layouts, not centered blocks
66
- - Cards/components: vary sizes intentionally, not uniform grids
67
-
68
- ## 4. Motion & Interaction Design
69
-
70
- ### Avoid Distributional Defaults:
71
- - NO scattered micro-interactions on every element
72
- - NO generic fade-in animations
73
- - NO 0.3s ease-in-out transitions everywhere
74
-
75
- ### Intentional Alternatives:
76
- - **High-Impact Moments**: Use animation for 2-3 key moments (page load hero, primary CTA, section reveals)
77
- - **Staggered Reveals**: When animating multiple items, use staggered delays (0.1s increments)
78
- - **Purposeful Timing**: Fast interactions (0.15s) for responsiveness, slow reveals (0.6s+) for drama
79
-
80
- ## 5. Backgrounds & Atmospheric Depth
81
-
82
- ### Avoid Distributional Defaults:
83
- - NO solid white or light gray backgrounds
84
- - NO single-color backgrounds
85
- - NO generic gradient overlays
86
-
87
- ### Intentional Alternatives:
88
- - **Layered Gradients**: Combine 2-3 subtle gradients for depth
89
- - **Geometric Patterns**: SVG patterns, mesh gradients, or subtle noise textures
90
- - **Strategic Contrast**: Alternate between light and dark sections for rhythm
91
-
92
- ## 6. Visual Hierarchy Principles
93
-
94
- ### Clear Priority System:
95
- 1. **Primary Focus (1 element)**: Largest, highest contrast, most visual weight
96
- 2. **Secondary Elements (2-3 elements)**: 40-60% of primary size, reduced contrast
97
- 3. **Tertiary/Support (everything else)**: Minimal visual weight, muted colors
98
-
99
- ### Contrast Techniques:
100
- - Size: 3x+ differences between hierarchy levels
101
- - Weight: 300+ difference in font-weight values
102
- - Color: Primary gets brand color, secondary gets neutral, tertiary gets muted
103
- - Space: Primary gets 2x+ surrounding white space vs. secondary
104
-
105
-
106
- # IMPLEMENTATION WORKFLOW
107
-
108
- When building a composition:
109
-
110
- 1. **Define the Visual Goal First**
111
- - What emotion/brand personality? (Professional, playful, elegant, bold)
112
- - What's the single most important element?
113
- - What color family (warm/cool/neutral) supports the goal?
114
-
115
- 2. **Choose Typography Personality**
116
- - Select font pairings that match the personality (NOT defaults)
117
- - Define scale (3x+ headline ratio)
118
- - Set weight extremes (light/heavy contrast)
119
-
120
- 3. **Commit to Color Strategy**
121
- - Pick ONE dominant color (NOT purple, NOT generic blue)
122
- - Choose 1 sharp accent
123
- - Define warm or cool neutrals
124
-
125
- 4. **Design Spatial Rhythm**
126
- - Use generous white space (3-6rem between sections)
127
- - Create asymmetry (not everything centered)
128
- - Vary component sizes intentionally
129
-
130
- 5. **Add Strategic Motion**
131
- - Identify 2-3 high-impact animation moments
132
- - Use staggered timing for multiple elements
133
- - Keep interactions purposeful, not decorative
134
-
135
- 6. **Layer Atmospheric Depth**
136
- - Use gradient combinations for backgrounds
137
- - Add subtle patterns or textures
138
- - Alternate light/dark sections for rhythm
139
-
140
-
141
- # CONTEXT-AWARE DESIGN PERSONALITIES
142
-
143
- Brand personality should influence your choices:
144
-
145
- - **Corporate/Professional**: Deep neutrals, serif headlines, structured spacing
146
- - **Creative/Agency**: Bold color, display fonts, asymmetric layouts
147
- - **Tech/Startup**: Monospace accents, sharp colors, modern spacing
148
- - **Elegant/Luxury**: Serif dominance, muted colors with metallic accents, generous white space
149
-
150
- # USER OVERRIDE CAPABILITY
151
-
152
- Always respect user specifications:
153
-
154
- If user specifies:
155
- - Specific colors → use them
156
- - Specific fonts → use them
157
- - Specific spacing → use it
158
- - "Minimal/simple" → reduce ornamentation but maintain quality principles
159
- `;