@hale-bopp/valentino-engine 2.3.1 → 2.5.0

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.
@@ -0,0 +1,400 @@
1
+ /* === VALENTINO FRAMEWORK BASE (Universal) ===
2
+ * Surface remaps, rhythm profiles, typography, grid, utilities.
3
+ * This file is framework-agnostic: no site-specific colors, logos, or layouts.
4
+ * Source of truth: valentino-engine (will move to npm package in v2.5.0).
5
+ */
6
+
7
+ /* --- Resets & Baselines --- */
8
+ * {
9
+ box-sizing: border-box;
10
+ margin: 0;
11
+ padding: 0;
12
+ }
13
+
14
+ body {
15
+ background-color: var(--bg-deep-void);
16
+ color: var(--text-primary);
17
+ font-family: var(--font-family);
18
+ line-height: 1.6;
19
+ overflow-x: hidden;
20
+ min-height: 100vh;
21
+ display: flex;
22
+ flex-direction: column;
23
+ }
24
+
25
+ /* --- Valentino Section Shell --- */
26
+ .valentino-section-shell {
27
+ position: relative;
28
+ padding: var(--valentino-rhythm-shell-padding, clamp(2.5rem, 4vw, 4.5rem)) 0;
29
+ background: var(--valentino-surface-bg, #ffffff);
30
+ color: var(--valentino-surface-text, #0f172a);
31
+ --valentino-rhythm-body-measure: var(--valentino-rhythm-measure-feature);
32
+ --valentino-rhythm-header-measure: var(--valentino-rhythm-measure-feature);
33
+ --valentino-rhythm-cluster-gap: var(--valentino-rhythm-space-block-m);
34
+ }
35
+
36
+ .valentino-section-shell[data-height='screen-sm'] {
37
+ min-height: min(62svh, 720px);
38
+ }
39
+
40
+ .valentino-section-shell[data-height='screen-md'] {
41
+ min-height: min(78svh, 920px);
42
+ }
43
+
44
+ .valentino-section-shell[data-height='screen-full'] {
45
+ min-height: calc(100svh - 92px);
46
+ }
47
+
48
+ /* --- Surface Variants --- */
49
+ .valentino-section-shell[data-surface='default'] {
50
+ --valentino-surface-bg: var(--valentino-surface-default-background);
51
+ --valentino-surface-text: var(--valentino-surface-default-text);
52
+ --valentino-surface-muted: var(--valentino-surface-default-text-muted);
53
+ --valentino-card-bg: var(--valentino-surface-default-card-bg);
54
+ --valentino-card-border: var(--valentino-surface-default-card-border);
55
+ /* Light-surface remaps: dark-themed tokens accessible on white */
56
+ --text-primary: #0f172a;
57
+ --text-secondary: var(--valentino-surface-default-text-muted);
58
+ --text-sovereign-gold: #92400e;
59
+ --accent-neural-cyan: #0b6a82;
60
+ --rgb-neural-cyan: 14, 116, 144;
61
+ --accent-violet: #6d28d9;
62
+ --rgb-violet: 109, 40, 217;
63
+ --code-gold: #92400e;
64
+ --code-cyan: #0b6a82;
65
+ }
66
+
67
+ .valentino-section-shell[data-surface='muted'] {
68
+ --valentino-surface-bg: var(--valentino-surface-muted-background);
69
+ --valentino-surface-text: var(--valentino-surface-muted-text);
70
+ --valentino-surface-muted: var(--valentino-surface-muted-text-muted);
71
+ --valentino-card-bg: var(--valentino-surface-muted-card-bg);
72
+ --valentino-card-border: var(--valentino-surface-muted-card-border);
73
+ --text-primary: #0f172a;
74
+ --text-secondary: var(--valentino-surface-muted-text-muted);
75
+ --text-sovereign-gold: #92400e;
76
+ --accent-neural-cyan: #0b6a82;
77
+ --rgb-neural-cyan: 14, 116, 144;
78
+ --accent-violet: #6d28d9;
79
+ --rgb-violet: 109, 40, 217;
80
+ --code-gold: #92400e;
81
+ --code-cyan: #0b6a82;
82
+ }
83
+
84
+ .valentino-section-shell[data-surface='accent'] {
85
+ --valentino-surface-bg: var(--valentino-surface-accent-background);
86
+ --valentino-surface-text: var(--valentino-surface-accent-text);
87
+ --valentino-surface-muted: var(--valentino-surface-accent-text-muted);
88
+ --valentino-card-bg: var(--valentino-surface-accent-card-bg);
89
+ --valentino-card-border: var(--valentino-surface-accent-card-border);
90
+ --text-primary: #1f2937;
91
+ --text-secondary: var(--valentino-surface-accent-text-muted);
92
+ --text-sovereign-gold: #92400e;
93
+ --accent-neural-cyan: #0b6a82;
94
+ --rgb-neural-cyan: 14, 116, 144;
95
+ --accent-violet: #6d28d9;
96
+ --rgb-violet: 109, 40, 217;
97
+ --code-gold: #92400e;
98
+ --code-cyan: #0b6a82;
99
+ }
100
+
101
+ .valentino-section-shell[data-surface='dark'] {
102
+ --valentino-surface-bg: var(--valentino-surface-dark-background);
103
+ --valentino-surface-text: var(--valentino-surface-dark-text);
104
+ --valentino-surface-muted: var(--valentino-surface-dark-text-muted);
105
+ --valentino-card-bg: var(--valentino-surface-dark-card-bg);
106
+ --valentino-card-border: var(--valentino-surface-dark-card-border);
107
+ }
108
+
109
+ .valentino-section-shell[data-surface='shell-dark'] {
110
+ --valentino-surface-bg: var(--valentino-surface-shell-dark-background);
111
+ --valentino-surface-text: var(--valentino-surface-shell-dark-text);
112
+ --valentino-surface-muted: var(--valentino-surface-shell-dark-text-muted);
113
+ --valentino-card-bg: var(--valentino-surface-shell-dark-card-bg);
114
+ --valentino-card-border: var(--valentino-surface-shell-dark-card-border);
115
+ }
116
+
117
+ .valentino-section-shell[data-surface='reading-light'] {
118
+ --valentino-surface-bg: var(--valentino-surface-reading-light-background);
119
+ --valentino-surface-text: var(--valentino-surface-reading-light-text);
120
+ --valentino-surface-muted: var(--valentino-surface-reading-light-text-muted);
121
+ --valentino-card-bg: var(--valentino-surface-reading-light-card-bg);
122
+ --valentino-card-border: var(--valentino-surface-reading-light-card-border);
123
+ --text-primary: #0f172a;
124
+ --text-secondary: var(--valentino-surface-reading-light-text-muted);
125
+ --text-sovereign-gold: #92400e;
126
+ --accent-neural-cyan: #0b6a82;
127
+ --rgb-neural-cyan: 14, 116, 144;
128
+ --accent-violet: #6d28d9;
129
+ --rgb-violet: 109, 40, 217;
130
+ --code-gold: #92400e;
131
+ --code-cyan: #0b6a82;
132
+ }
133
+
134
+ .valentino-section-shell[data-surface='ops-light'] {
135
+ --valentino-surface-bg: var(--valentino-surface-ops-light-background);
136
+ --valentino-surface-text: var(--valentino-surface-ops-light-text);
137
+ --valentino-surface-muted: var(--valentino-surface-ops-light-text-muted);
138
+ --valentino-card-bg: var(--valentino-surface-ops-light-card-bg);
139
+ --valentino-card-border: var(--valentino-surface-ops-light-card-border);
140
+ --text-primary: #0f172a;
141
+ --text-secondary: var(--valentino-surface-ops-light-text-muted);
142
+ --text-sovereign-gold: #92400e;
143
+ --accent-neural-cyan: #0b6a82;
144
+ --rgb-neural-cyan: 14, 116, 144;
145
+ --accent-violet: #6d28d9;
146
+ --rgb-violet: 109, 40, 217;
147
+ --code-gold: #92400e;
148
+ --code-cyan: #0b6a82;
149
+ }
150
+
151
+ /* --- Rhythm Profiles --- */
152
+ .valentino-section-shell[data-rhythm-profile='hero'] {
153
+ --valentino-rhythm-shell-padding: var(--valentino-rhythm-space-block-xl);
154
+ --valentino-rhythm-body-measure: var(--valentino-rhythm-measure-support);
155
+ --valentino-rhythm-header-measure: var(--valentino-rhythm-measure-compact);
156
+ --valentino-rhythm-cluster-gap: var(--valentino-rhythm-space-block-l);
157
+ }
158
+
159
+ .valentino-section-shell[data-rhythm-profile='transition'] {
160
+ --valentino-rhythm-shell-padding: var(--valentino-rhythm-space-block-l);
161
+ --valentino-rhythm-body-measure: var(--valentino-rhythm-measure-support);
162
+ --valentino-rhythm-header-measure: var(--valentino-rhythm-measure-compact);
163
+ --valentino-rhythm-cluster-gap: var(--valentino-rhythm-space-block-m);
164
+ }
165
+
166
+ .valentino-section-shell[data-rhythm-profile='feature'],
167
+ .valentino-section-shell[data-rhythm-profile='proof'] {
168
+ --valentino-rhythm-shell-padding: var(--valentino-rhythm-space-block-l);
169
+ --valentino-rhythm-body-measure: var(--valentino-rhythm-measure-feature);
170
+ --valentino-rhythm-header-measure: var(--valentino-rhythm-measure-support);
171
+ --valentino-rhythm-cluster-gap: var(--valentino-rhythm-space-block-m);
172
+ }
173
+
174
+ .valentino-section-shell[data-rhythm-profile='metrics'] {
175
+ --valentino-rhythm-shell-padding: var(--valentino-rhythm-space-block-m);
176
+ --valentino-rhythm-body-measure: var(--valentino-rhythm-measure-compact);
177
+ --valentino-rhythm-header-measure: var(--valentino-rhythm-measure-compact);
178
+ --valentino-rhythm-cluster-gap: var(--valentino-rhythm-space-stack-l);
179
+ }
180
+
181
+ .valentino-section-shell[data-rhythm-profile='reading'] {
182
+ --valentino-rhythm-shell-padding: var(--valentino-rhythm-space-block-xl);
183
+ --valentino-rhythm-body-measure: var(--valentino-rhythm-measure-reading);
184
+ --valentino-rhythm-header-measure: var(--valentino-rhythm-measure-support);
185
+ --valentino-rhythm-cluster-gap: var(--valentino-rhythm-space-block-l);
186
+ }
187
+
188
+ .valentino-section-shell[data-rhythm-profile='ops'] {
189
+ --valentino-rhythm-shell-padding: var(--valentino-rhythm-space-block-m);
190
+ --valentino-rhythm-body-measure: var(--valentino-rhythm-measure-ops);
191
+ --valentino-rhythm-header-measure: var(--valentino-rhythm-measure-support);
192
+ --valentino-rhythm-cluster-gap: var(--valentino-rhythm-space-stack-l);
193
+ }
194
+
195
+ /* --- Surface Utility Cascade (generic selectors only) --- */
196
+ .valentino-section-shell h1,
197
+ .valentino-section-shell h2,
198
+ .valentino-section-shell h3,
199
+ .valentino-section-shell h4 {
200
+ color: var(--valentino-surface-text);
201
+ }
202
+
203
+ .valentino-section-shell p {
204
+ color: var(--valentino-surface-muted);
205
+ }
206
+
207
+ /* --- Runtime Loading Guard --- */
208
+ body.runtime-loading #page-root {
209
+ min-height: 80vh;
210
+ }
211
+
212
+ body.runtime-loading #page-root::after {
213
+ content: '';
214
+ display: block;
215
+ height: 160px;
216
+ margin: 2rem auto 0;
217
+ max-width: 900px;
218
+ border-radius: 12px;
219
+ background: linear-gradient(90deg, rgba(15, 30, 45, 0.4), rgba(15, 30, 45, 0.1), rgba(15, 30, 45, 0.4));
220
+ background-size: 200% 100%;
221
+ animation: runtime-sheen 1.4s ease-in-out infinite;
222
+ opacity: 0.6;
223
+ }
224
+
225
+ body.runtime-loading sovereign-footer {
226
+ opacity: 0;
227
+ pointer-events: none;
228
+ }
229
+
230
+ @keyframes runtime-sheen {
231
+ 0% {
232
+ background-position: 0% 50%;
233
+ }
234
+
235
+ 100% {
236
+ background-position: 200% 50%;
237
+ }
238
+ }
239
+
240
+ /* --- Typography Scale (Fluid) --- */
241
+ .h1 {
242
+ font-size: var(--text-step-5);
243
+ line-height: var(--valentino-rhythm-leading-display, 1.1);
244
+ font-weight: 800;
245
+ letter-spacing: -0.02em;
246
+ }
247
+
248
+ .h2 {
249
+ font-size: var(--text-step-4);
250
+ line-height: var(--valentino-rhythm-leading-display, 1.15);
251
+ font-weight: 700;
252
+ letter-spacing: -0.01em;
253
+ }
254
+
255
+ .h3 {
256
+ font-size: var(--text-step-3);
257
+ line-height: var(--valentino-rhythm-leading-display, 1.2);
258
+ font-weight: 600;
259
+ }
260
+
261
+ .h4 {
262
+ font-size: var(--text-step-2);
263
+ line-height: var(--valentino-rhythm-leading-display, 1.3);
264
+ font-weight: 600;
265
+ }
266
+
267
+ .h5 {
268
+ font-size: var(--text-step-1);
269
+ line-height: var(--valentino-rhythm-leading-body, 1.4);
270
+ font-weight: 600;
271
+ }
272
+
273
+ .body-large {
274
+ font-size: var(--text-step-0);
275
+ line-height: var(--valentino-rhythm-leading-body, 1.6);
276
+ }
277
+
278
+ /* --- Utilities --- */
279
+ .text-gold {
280
+ color: var(--text-sovereign-gold);
281
+ }
282
+
283
+ .text-cyan {
284
+ color: var(--accent-neural-cyan);
285
+ }
286
+
287
+ .text-gradient {
288
+ background: linear-gradient(135deg, var(--text-sovereign-gold), var(--accent-neural-cyan), var(--accent-violet));
289
+ -webkit-background-clip: text;
290
+ background-clip: text;
291
+ -webkit-text-fill-color: transparent;
292
+ }
293
+
294
+ .text-violet {
295
+ color: var(--accent-violet);
296
+ }
297
+
298
+ .container {
299
+ max-width: 1200px;
300
+ margin: 0 auto;
301
+ padding: 0 2rem;
302
+ }
303
+
304
+ /* --- Button Base --- */
305
+ .btn {
306
+ display: inline-flex;
307
+ align-items: center;
308
+ justify-content: center;
309
+ padding: 0 1.5rem;
310
+ height: 48px;
311
+ min-width: 140px;
312
+ font-weight: 600;
313
+ text-decoration: none;
314
+ border-radius: 8px;
315
+ transition: all var(--transition-ease);
316
+ cursor: pointer;
317
+ border: 1px solid transparent;
318
+ }
319
+
320
+ /* --- Animation Presets --- */
321
+ .anim-ready { opacity: 0; transition: opacity 0.6s ease, transform 0.6s ease; }
322
+ .anim-ready.anim-visible { opacity: 1; transform: none; }
323
+
324
+ .anim-fade-up { transform: translateY(24px); }
325
+ .anim-fade-in { transform: none; }
326
+ .anim-slide-left { transform: translateX(40px); }
327
+ .anim-slide-right { transform: translateX(-40px); }
328
+ .anim-scale-in { transform: scale(0.95); }
329
+
330
+ @media (prefers-reduced-motion: reduce) {
331
+ .anim-ready { opacity: 1; transform: none; transition: none; }
332
+ }
333
+
334
+ /* --- Grid System --- */
335
+ .row {
336
+ display: flex;
337
+ flex-wrap: wrap;
338
+ gap: 1rem;
339
+ width: 100%;
340
+ }
341
+
342
+ .row.no-gap {
343
+ gap: 0;
344
+ }
345
+
346
+ .row.gap-sm {
347
+ gap: 0.5rem;
348
+ }
349
+
350
+ .row.gap-lg {
351
+ gap: 2rem;
352
+ }
353
+
354
+ .col-12 { flex: 0 0 100%; max-width: 100%; }
355
+ .col-11 { flex: 0 0 calc(91.666% - 0.917rem); max-width: calc(91.666% - 0.917rem); }
356
+ .col-10 { flex: 0 0 calc(83.333% - 0.833rem); max-width: calc(83.333% - 0.833rem); }
357
+ .col-9 { flex: 0 0 calc(75% - 0.75rem); max-width: calc(75% - 0.75rem); }
358
+ .col-8 { flex: 0 0 calc(66.666% - 0.667rem); max-width: calc(66.666% - 0.667rem); }
359
+ .col-7 { flex: 0 0 calc(58.333% - 0.583rem); max-width: calc(58.333% - 0.583rem); }
360
+ .col-6 { flex: 0 0 calc(50% - 0.5rem); max-width: calc(50% - 0.5rem); }
361
+ .col-5 { flex: 0 0 calc(41.666% - 0.417rem); max-width: calc(41.666% - 0.417rem); }
362
+ .col-4 { flex: 0 0 calc(33.333% - 0.667rem); max-width: calc(33.333% - 0.667rem); }
363
+ .col-3 { flex: 0 0 calc(25% - 0.75rem); max-width: calc(25% - 0.75rem); }
364
+ .col-2 { flex: 0 0 calc(16.666% - 0.833rem); max-width: calc(16.666% - 0.833rem); }
365
+ .col-1 { flex: 0 0 calc(8.333% - 0.917rem); max-width: calc(8.333% - 0.917rem); }
366
+
367
+ .col-auto {
368
+ flex: 0 0 auto;
369
+ width: auto;
370
+ }
371
+
372
+ @media (max-width: 768px) {
373
+ .col-6, .col-4, .col-3, .col-2, .col-1,
374
+ .col-5, .col-7, .col-8, .col-9, .col-10, .col-11 {
375
+ flex: 0 0 100%;
376
+ max-width: 100%;
377
+ }
378
+
379
+ .col-md-6 {
380
+ flex: 0 0 calc(50% - 0.5rem);
381
+ max-width: calc(50% - 0.5rem);
382
+ }
383
+
384
+ .col-md-4 {
385
+ flex: 0 0 calc(33.333% - 0.667rem);
386
+ max-width: calc(33.333% - 0.667rem);
387
+ }
388
+
389
+ .col-md-12 {
390
+ flex: 0 0 100%;
391
+ max-width: 100%;
392
+ }
393
+ }
394
+
395
+ @media (max-width: 500px) {
396
+ .col-md-6, .col-md-4 {
397
+ flex: 0 0 100%;
398
+ max-width: 100%;
399
+ }
400
+ }
@@ -0,0 +1,251 @@
1
+ /* === VALENTINO TEMPLATE: Corporate ===
2
+ * For company websites: hero, features, team, pricing, CTA, contact.
3
+ * Import after framework.base.css.
4
+ * Usage: @import '@hale-bopp/valentino-engine/css/framework.corporate.css';
5
+ */
6
+
7
+ /* --- Hero Section --- */
8
+ .valentino-section-shell[data-rhythm-profile='hero'] .hero-headline {
9
+ max-width: var(--valentino-rhythm-header-measure, 36ch);
10
+ margin: 0 auto;
11
+ text-align: center;
12
+ }
13
+
14
+ .valentino-section-shell[data-rhythm-profile='hero'] .hero-lead {
15
+ max-width: var(--valentino-rhythm-body-measure, 52ch);
16
+ margin: 1.5rem auto 0;
17
+ text-align: center;
18
+ font-size: var(--text-step-1, 1.125rem);
19
+ line-height: var(--valentino-rhythm-leading-body, 1.6);
20
+ color: var(--valentino-surface-muted);
21
+ }
22
+
23
+ .valentino-section-shell[data-rhythm-profile='hero'] .hero-actions {
24
+ display: flex;
25
+ gap: 1rem;
26
+ justify-content: center;
27
+ margin-top: 2rem;
28
+ flex-wrap: wrap;
29
+ }
30
+
31
+ /* --- Feature Cards --- */
32
+ .feature-grid {
33
+ display: grid;
34
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
35
+ gap: var(--valentino-rhythm-cluster-gap, 1.5rem);
36
+ }
37
+
38
+ .feature-card {
39
+ background: var(--valentino-card-bg, #ffffff);
40
+ border: 1px solid var(--valentino-card-border, rgba(148, 163, 184, 0.2));
41
+ border-radius: 12px;
42
+ padding: 2rem;
43
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
44
+ }
45
+
46
+ .feature-card:hover {
47
+ transform: translateY(-4px);
48
+ box-shadow: 0 12px 32px rgba(15, 23, 42, 0.08);
49
+ }
50
+
51
+ .feature-card__icon {
52
+ width: 48px;
53
+ height: 48px;
54
+ border-radius: 12px;
55
+ display: inline-flex;
56
+ align-items: center;
57
+ justify-content: center;
58
+ margin-bottom: 1rem;
59
+ background: var(--valentino-surface-bg, #f1f5f9);
60
+ }
61
+
62
+ .feature-card__title {
63
+ font-size: var(--text-step-1, 1.125rem);
64
+ font-weight: 700;
65
+ margin-bottom: 0.5rem;
66
+ color: var(--valentino-surface-text);
67
+ }
68
+
69
+ .feature-card__desc {
70
+ font-size: 1rem;
71
+ line-height: 1.6;
72
+ color: var(--valentino-surface-muted);
73
+ }
74
+
75
+ /* --- Team Section --- */
76
+ .team-grid {
77
+ display: grid;
78
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
79
+ gap: var(--valentino-rhythm-cluster-gap, 1.5rem);
80
+ text-align: center;
81
+ }
82
+
83
+ .team-member__avatar {
84
+ width: 120px;
85
+ height: 120px;
86
+ border-radius: 50%;
87
+ object-fit: cover;
88
+ margin: 0 auto 1rem;
89
+ border: 3px solid var(--valentino-card-border, rgba(148, 163, 184, 0.2));
90
+ }
91
+
92
+ .team-member__name {
93
+ font-size: var(--text-step-1, 1.125rem);
94
+ font-weight: 700;
95
+ color: var(--valentino-surface-text);
96
+ }
97
+
98
+ .team-member__role {
99
+ font-size: 0.9rem;
100
+ color: var(--valentino-surface-muted);
101
+ margin-top: 0.25rem;
102
+ }
103
+
104
+ /* --- Pricing Section --- */
105
+ .pricing-grid {
106
+ display: grid;
107
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
108
+ gap: var(--valentino-rhythm-cluster-gap, 1.5rem);
109
+ align-items: start;
110
+ }
111
+
112
+ .pricing-card {
113
+ background: var(--valentino-card-bg, #ffffff);
114
+ border: 1px solid var(--valentino-card-border, rgba(148, 163, 184, 0.2));
115
+ border-radius: 12px;
116
+ padding: 2.5rem 2rem;
117
+ text-align: center;
118
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
119
+ }
120
+
121
+ .pricing-card--featured {
122
+ border-color: var(--accent-neural-cyan, #0ea5e9);
123
+ box-shadow: 0 8px 24px rgba(14, 165, 233, 0.12);
124
+ transform: scale(1.02);
125
+ }
126
+
127
+ .pricing-card__name {
128
+ font-size: var(--text-step-1, 1.125rem);
129
+ font-weight: 700;
130
+ color: var(--valentino-surface-text);
131
+ }
132
+
133
+ .pricing-card__price {
134
+ font-size: var(--text-step-4, 2.5rem);
135
+ font-weight: 800;
136
+ margin: 1rem 0;
137
+ color: var(--valentino-surface-text);
138
+ }
139
+
140
+ .pricing-card__price span {
141
+ font-size: var(--text-step-0, 1rem);
142
+ font-weight: 400;
143
+ color: var(--valentino-surface-muted);
144
+ }
145
+
146
+ .pricing-card__features {
147
+ list-style: none;
148
+ text-align: left;
149
+ margin: 1.5rem 0;
150
+ }
151
+
152
+ .pricing-card__features li {
153
+ padding: 0.5rem 0;
154
+ border-bottom: 1px solid rgba(148, 163, 184, 0.1);
155
+ color: var(--valentino-surface-muted);
156
+ font-size: 0.95rem;
157
+ }
158
+
159
+ .pricing-card__features li::before {
160
+ content: '\2713';
161
+ margin-right: 0.5rem;
162
+ color: var(--accent-neural-cyan, #0ea5e9);
163
+ font-weight: 700;
164
+ }
165
+
166
+ /* --- CTA Banner --- */
167
+ .cta-banner {
168
+ text-align: center;
169
+ max-width: 640px;
170
+ margin: 0 auto;
171
+ }
172
+
173
+ .cta-banner__title {
174
+ font-size: var(--text-step-3, 1.75rem);
175
+ font-weight: 700;
176
+ margin-bottom: 1rem;
177
+ color: var(--valentino-surface-text);
178
+ }
179
+
180
+ .cta-banner__desc {
181
+ font-size: var(--text-step-0, 1rem);
182
+ color: var(--valentino-surface-muted);
183
+ margin-bottom: 2rem;
184
+ line-height: 1.6;
185
+ }
186
+
187
+ /* --- Contact Form --- */
188
+ .contact-form {
189
+ max-width: 560px;
190
+ margin: 0 auto;
191
+ display: flex;
192
+ flex-direction: column;
193
+ gap: 1rem;
194
+ }
195
+
196
+ .contact-form__field {
197
+ display: flex;
198
+ flex-direction: column;
199
+ gap: 0.35rem;
200
+ }
201
+
202
+ .contact-form__label {
203
+ font-size: 0.85rem;
204
+ font-weight: 600;
205
+ color: var(--valentino-surface-text);
206
+ }
207
+
208
+ .contact-form__input,
209
+ .contact-form__textarea {
210
+ padding: 0.75rem 1rem;
211
+ border: 1px solid var(--valentino-card-border, rgba(148, 163, 184, 0.3));
212
+ border-radius: 8px;
213
+ font-size: 1rem;
214
+ font-family: inherit;
215
+ background: var(--valentino-card-bg, #ffffff);
216
+ color: var(--valentino-surface-text);
217
+ transition: border-color 0.15s ease;
218
+ }
219
+
220
+ .contact-form__input:focus,
221
+ .contact-form__textarea:focus {
222
+ outline: none;
223
+ border-color: var(--accent-neural-cyan, #0ea5e9);
224
+ }
225
+
226
+ .contact-form__textarea {
227
+ min-height: 120px;
228
+ resize: vertical;
229
+ }
230
+
231
+ /* --- Responsive (Corporate) --- */
232
+ @media (max-width: 768px) {
233
+ .pricing-card--featured {
234
+ transform: none;
235
+ }
236
+
237
+ .team-grid {
238
+ grid-template-columns: repeat(2, 1fr);
239
+ }
240
+ }
241
+
242
+ @media (max-width: 500px) {
243
+ .team-grid {
244
+ grid-template-columns: 1fr;
245
+ }
246
+
247
+ .valentino-section-shell[data-rhythm-profile='hero'] .hero-actions {
248
+ flex-direction: column;
249
+ align-items: center;
250
+ }
251
+ }
@@ -0,0 +1,281 @@
1
+ /* === VALENTINO TEMPLATE: Landing Page ===
2
+ * Single-scroll conversion funnel: hero → problem → solution → social proof → CTA.
3
+ * Import after framework.base.css.
4
+ * Usage: @import '@hale-bopp/valentino-engine/css/framework.landing.css';
5
+ */
6
+
7
+ /* --- Full-Screen Hero --- */
8
+ .landing-hero {
9
+ display: flex;
10
+ flex-direction: column;
11
+ align-items: center;
12
+ justify-content: center;
13
+ text-align: center;
14
+ min-height: calc(100svh - 80px);
15
+ padding: 2rem;
16
+ }
17
+
18
+ .landing-hero__headline {
19
+ max-width: 18ch;
20
+ font-size: var(--text-step-5, 3rem);
21
+ font-weight: 800;
22
+ line-height: 1.1;
23
+ letter-spacing: -0.02em;
24
+ color: var(--valentino-surface-text);
25
+ }
26
+
27
+ .landing-hero__sub {
28
+ max-width: 42ch;
29
+ margin-top: 1.25rem;
30
+ font-size: var(--text-step-1, 1.25rem);
31
+ line-height: 1.5;
32
+ color: var(--valentino-surface-muted);
33
+ }
34
+
35
+ .landing-hero__cta {
36
+ display: flex;
37
+ gap: 1rem;
38
+ margin-top: 2.5rem;
39
+ flex-wrap: wrap;
40
+ justify-content: center;
41
+ }
42
+
43
+ /* --- Problem / Pain Points --- */
44
+ .pain-grid {
45
+ display: grid;
46
+ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
47
+ gap: var(--valentino-rhythm-cluster-gap, 1.5rem);
48
+ text-align: center;
49
+ }
50
+
51
+ .pain-card {
52
+ padding: 2rem 1.5rem;
53
+ }
54
+
55
+ .pain-card__icon {
56
+ font-size: 2.5rem;
57
+ margin-bottom: 1rem;
58
+ }
59
+
60
+ .pain-card__title {
61
+ font-size: var(--text-step-1, 1.125rem);
62
+ font-weight: 700;
63
+ color: var(--valentino-surface-text);
64
+ margin-bottom: 0.5rem;
65
+ }
66
+
67
+ .pain-card__desc {
68
+ font-size: 0.95rem;
69
+ line-height: 1.6;
70
+ color: var(--valentino-surface-muted);
71
+ }
72
+
73
+ /* --- Solution (Split Layout) --- */
74
+ .split-section {
75
+ display: grid;
76
+ grid-template-columns: 1fr 1fr;
77
+ gap: 3rem;
78
+ align-items: center;
79
+ }
80
+
81
+ .split-section--reverse {
82
+ direction: rtl;
83
+ }
84
+
85
+ .split-section--reverse > * {
86
+ direction: ltr;
87
+ }
88
+
89
+ .split-section__copy {
90
+ display: flex;
91
+ flex-direction: column;
92
+ gap: 1rem;
93
+ }
94
+
95
+ .split-section__title {
96
+ font-size: var(--text-step-3, 1.75rem);
97
+ font-weight: 700;
98
+ color: var(--valentino-surface-text);
99
+ }
100
+
101
+ .split-section__desc {
102
+ font-size: 1rem;
103
+ line-height: 1.7;
104
+ color: var(--valentino-surface-muted);
105
+ }
106
+
107
+ .split-section__visual {
108
+ border-radius: 12px;
109
+ overflow: hidden;
110
+ }
111
+
112
+ .split-section__visual img {
113
+ width: 100%;
114
+ height: auto;
115
+ display: block;
116
+ }
117
+
118
+ /* --- Social Proof --- */
119
+ .testimonial-grid {
120
+ display: grid;
121
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
122
+ gap: var(--valentino-rhythm-cluster-gap, 1.5rem);
123
+ }
124
+
125
+ .testimonial-card {
126
+ background: var(--valentino-card-bg, #ffffff);
127
+ border: 1px solid var(--valentino-card-border, rgba(148, 163, 184, 0.2));
128
+ border-radius: 12px;
129
+ padding: 2rem;
130
+ }
131
+
132
+ .testimonial-card__quote {
133
+ font-size: 1.05rem;
134
+ line-height: 1.7;
135
+ color: var(--valentino-surface-text);
136
+ font-style: italic;
137
+ margin-bottom: 1.25rem;
138
+ }
139
+
140
+ .testimonial-card__quote::before {
141
+ content: '\201C';
142
+ font-size: 2rem;
143
+ line-height: 0;
144
+ vertical-align: -0.4em;
145
+ margin-right: 0.15em;
146
+ color: var(--accent-neural-cyan, #0ea5e9);
147
+ font-style: normal;
148
+ }
149
+
150
+ .testimonial-card__author {
151
+ display: flex;
152
+ align-items: center;
153
+ gap: 0.75rem;
154
+ }
155
+
156
+ .testimonial-card__avatar {
157
+ width: 40px;
158
+ height: 40px;
159
+ border-radius: 50%;
160
+ object-fit: cover;
161
+ }
162
+
163
+ .testimonial-card__name {
164
+ font-weight: 700;
165
+ font-size: 0.9rem;
166
+ color: var(--valentino-surface-text);
167
+ }
168
+
169
+ .testimonial-card__title {
170
+ font-size: 0.8rem;
171
+ color: var(--valentino-surface-muted);
172
+ }
173
+
174
+ /* --- Logos Bar --- */
175
+ .logos-bar {
176
+ display: flex;
177
+ align-items: center;
178
+ justify-content: center;
179
+ flex-wrap: wrap;
180
+ gap: 2.5rem;
181
+ opacity: 0.6;
182
+ }
183
+
184
+ .logos-bar img {
185
+ height: 32px;
186
+ width: auto;
187
+ filter: grayscale(1);
188
+ transition: filter 0.2s ease, opacity 0.2s ease;
189
+ }
190
+
191
+ .logos-bar img:hover {
192
+ filter: grayscale(0);
193
+ opacity: 1;
194
+ }
195
+
196
+ /* --- Stats Row --- */
197
+ .stats-row {
198
+ display: flex;
199
+ justify-content: center;
200
+ flex-wrap: wrap;
201
+ gap: 3rem;
202
+ text-align: center;
203
+ }
204
+
205
+ .stat-item__value {
206
+ font-size: var(--text-step-4, 2.5rem);
207
+ font-weight: 800;
208
+ color: var(--valentino-surface-text);
209
+ line-height: 1;
210
+ }
211
+
212
+ .stat-item__label {
213
+ font-size: 0.9rem;
214
+ color: var(--valentino-surface-muted);
215
+ margin-top: 0.35rem;
216
+ }
217
+
218
+ /* --- Final CTA (Full-Width) --- */
219
+ .final-cta {
220
+ text-align: center;
221
+ padding: 1rem 0;
222
+ }
223
+
224
+ .final-cta__title {
225
+ font-size: var(--text-step-4, 2.5rem);
226
+ font-weight: 800;
227
+ color: var(--valentino-surface-text);
228
+ max-width: 20ch;
229
+ margin: 0 auto;
230
+ }
231
+
232
+ .final-cta__desc {
233
+ font-size: var(--text-step-0, 1rem);
234
+ color: var(--valentino-surface-muted);
235
+ margin: 1rem auto 2rem;
236
+ max-width: 48ch;
237
+ line-height: 1.6;
238
+ }
239
+
240
+ .final-cta__actions {
241
+ display: flex;
242
+ gap: 1rem;
243
+ justify-content: center;
244
+ flex-wrap: wrap;
245
+ }
246
+
247
+ /* --- Responsive (Landing) --- */
248
+ @media (max-width: 768px) {
249
+ .split-section {
250
+ grid-template-columns: 1fr;
251
+ gap: 2rem;
252
+ }
253
+
254
+ .split-section--reverse {
255
+ direction: ltr;
256
+ }
257
+
258
+ .stats-row {
259
+ gap: 2rem;
260
+ }
261
+ }
262
+
263
+ @media (max-width: 500px) {
264
+ .landing-hero {
265
+ min-height: auto;
266
+ padding: 3rem 1.5rem;
267
+ }
268
+
269
+ .landing-hero__cta {
270
+ flex-direction: column;
271
+ align-items: stretch;
272
+ }
273
+
274
+ .logos-bar {
275
+ gap: 1.5rem;
276
+ }
277
+
278
+ .logos-bar img {
279
+ height: 24px;
280
+ }
281
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Valentino Engine — Browser Entry Point
3
+ *
4
+ * Re-exports all browser-safe modules (no Node builtins: readline, fs, http, etc.).
5
+ * Use this entry point in browser bundlers (Vite, Rollup, webpack) to avoid
6
+ * pulling in Node-only code.
7
+ *
8
+ * Usage: import { PageSpecV1, validatePageSpec } from '@hale-bopp/valentino-engine/browser';
9
+ */
10
+ export type { ActionSpec, CtaSpec, ActionWidgetIcon, ActionWidgetVariant, ActionWidgetSpec, SectionPresentationSpec, SectionPresentationBase, LayoutMapMeasureToken, LayoutMapVariantToken, LayoutMapPlacementSpec, LayoutMapStyleSpec, LayoutMapSlotSpec, LayoutMapGridSpec, LayoutMapBreakpointSpec, LayoutMapSpec, HeroGuardrailToken, HeroGeometryAnchorId, HeroGeometryAnchorSpec, HeroGeometryBreakpointSpec, HeroGeometrySpec, HeroSection, CardsCatalogItem, CardsLinkRailItem, CardsSection, ComparisonSection, CtaSection, FormFieldSpec, FormSection, SpacerSection, ManifestoSection, ComponentVariant, ComponentShowcaseItem, ShowcaseIntroSection, ComponentShowcaseSection, AgentDashboardSection, AgentGraphSection, AgentListSection, DataListColumnSpec, RowActionSpec, DataListSection, ActionFormFieldSpec, ActionFormSection, StatItemSpec, StatsSection, HowItWorksStepSpec, HowItWorksSection, AdvisorPromptSpec, AdvisorResponseStatus, AdvisorResponseLabelsSpec, AdvisorSection, MermaidDiagramSection, ValentinoCatalogSection, SectionSpec, PageProfileSpec, PageSpecV1, ValentinoGovernanceTier, ValentinoGovernanceSpec, ValentinoTemplateEntry, ValentinoSectionPresetEntry, ValentinoTransitionProfileEntry, ValentinoPageBlueprintEntry, ValentinoCatalogV1, ManifestPageV1, NavigationConfigV1, PagesManifestV1, NavInteractionModeV1, NavPanelVariantV1, NavPanelWidthTokenV1, NavPanelLayoutTokenV1, NavLinkDensityTokenV1, NavPanelLinkV1, NavPanelGroupV1, NavFeaturedCardV1, NavItemV1, AnimationPreset, AnimationDelay, AnimationTrigger, AnimationSpec, } from './core/types.js';
11
+ export { mergePresentation, isGovernanceAllowed, resolvePageSpecWithCatalog } from './core/catalog.js';
12
+ export { DEFAULT_PRESENTATION, inferRhythmProfile, resolvePresentation } from './core/presentation.js';
13
+ export { normalizePathname, resolvePageIdByRoute } from './core/manifest.js';
14
+ export { validatePageSpec } from './core/page-spec.js';
15
+ export { checkNoHardcodedPx, checkNoHardcodedColor, checkNoNamedColor, GUARDRAILS } from './core/guardrails.js';
16
+ export { CSS_NAMED_COLORS } from './core/css-named-colors.js';
17
+ export { checkWcagContrast, parseColor, relativeLuminance, contrastRatio } from './core/contrast.js';
18
+ export type { ContrastLevel, ContrastResult } from './core/contrast.js';
19
+ export { probeRhythm } from './core/rhythm.js';
20
+ export type { RhythmWarning, RhythmProbeResult } from './core/rhythm.js';
21
+ export { probeHeroContract } from './core/hero-contract.js';
22
+ export type { HeroContractWarning, HeroContractResult } from './core/hero-contract.js';
23
+ export { probeSectionIntegrity } from './core/section-integrity.js';
24
+ export type { IntegrityWarning, IntegrityResult } from './core/section-integrity.js';
25
+ export { auditThemePack, auditThemePacks, validateThemePackAgainstRegistry, inferTokenRole, VALENTINO_SURFACES, } from './core/theme-audit.js';
26
+ export type { SurfaceKind, SurfaceDefinition, ThemePackTokens, TokenRole, ThemeAuditViolation, ThemeAuditResult, RegistryViolation, BatchAuditResult, } from './core/theme-audit.js';
27
+ export { probeContrastUsage, probeContrastUsageMulti, parseRemappedTokens, parseTextTokenUsages, extractShadowDomStyles, } from './core/contrast-usage-probe.js';
28
+ export type { ContrastUsageWarning, ContrastUsageProbeResult, ContrastUsageMultiResult } from './core/contrast-usage-probe.js';
29
+ export { premiumDesignSkill, webGuardrailsSkill, designGuidelinesSkill } from './skills/index.js';
30
+ export { getPageStatus, getPublishAt, isPageVisible, getContrastAuditPages } from './core/page-status.js';
31
+ export type { PageStatus, ContrastAuditPage } from './core/page-status.js';
32
+ export { findRedirect } from './core/redirects.js';
33
+ export type { RedirectRule, RedirectsConfig } from './core/redirects.js';
34
+ export { resolveMediaUrl, resolveMediaAsset } from './core/media.js';
35
+ export type { MediaAsset, MediaManifest } from './core/media.js';
36
+ export { buildWebPageSchema } from './core/seo.js';
37
+ export type { SeoSpec } from './core/seo.js';
38
+ export { checkDraftOrphans, checkPublishAtCoherence, checkMaintenanceModeLeak, check404Exists, checkRedirects, checkSeoCompleteness, checkOgImageExists, checkMediaOrphans, checkMediaMissingAlt, checkBreadcrumbDepth, checkLanguageCoverage, checkDuplicateRoutes, collectPureCmsWarnings, } from './core/guardrails-cms.js';
39
+ export type { CmsWarning } from './core/guardrails-cms.js';
40
+ export { checkMojibake, checkTypography, checkEncoding, MOJIBAKE_PATTERN_COUNT, TYPO_RULE_COUNT } from './core/encoding.js';
41
+ export type { EncodingWarning } from './core/encoding.js';
42
+ export { generateLlmsTxt, generateLlmsFullTxt } from './core/llms-generator.js';
43
+ export type { LlmsGeneratorOptions } from './core/llms-generator.js';
44
+ export { probeAnimations, resolveAnimationCSS, ANIMATION_PRESETS } from './core/animation.js';
45
+ export type { AnimationWarning } from './core/animation.js';
46
+ export { getEditableSectionTypes, generateEditorSchema, generateAllEditorSchemas, applySectionPatch, addSection, removeSection, moveSection, applyPagePatch, } from './core/editor.js';
47
+ export type { EditorFieldType, EditorFieldSpec, EditorSectionSchema, SectionPatchWarning, SectionPatchResult, } from './core/editor.js';
48
+ export { parsePrompt, generatePageSpec, generatePageSpecLocal } from './core/page-generator.js';
49
+ export type { PageIntent, SectionIntent, GeneratePageOptions, LlmContext, GeneratePageResult, } from './core/page-generator.js';
50
+ export { listCatalogEntries, listPageEntries, listAllGalleryEntries, filterGalleryEntries } from './core/gallery.js';
51
+ export type { GalleryEntryKind, GalleryEntry, GalleryFilter } from './core/gallery.js';
52
+ export { executeCockpitAction, executeCockpitBatch, validateCockpitAction, describeCockpitAction, COCKPIT_SECTION_TYPES, } from './core/cockpit-api.js';
53
+ export type { CockpitAction, CockpitActionAddSection, CockpitActionEditSection, CockpitActionRemoveSection, CockpitActionMoveSection, CockpitActionEditPage, CockpitActionQuery, CockpitQuery, CockpitWarning, CockpitActionResult, CockpitBatchResult, } from './core/cockpit-api.js';
54
+ export { parseIntent, parseIntentLocal, buildMinimalSection, buildSectionSummary } from './core/intent-parser.js';
55
+ export type { ParsedIntent, IntentParseResult, IntentLlmCallback, IntentLlmContext, } from './core/intent-parser.js';
56
+ export { importFromImage, createVisionCallback } from './core/visual-import.js';
57
+ export type { VisualImportResult, VisualImportOptions, VisionLlmCallback } from './core/visual-import.js';
58
+ export { importFromVideo, selectKeyFrames } from './core/video-import.js';
59
+ export type { VideoImportResult, VideoImportOptions, FrameData } from './core/video-import.js';
60
+ export type { UrlImportResult, UrlImportOptions, HtmlLlmCallback } from './core/url-import.js';
61
+ export { createOpenRouterCallback, testOpenRouterConnection } from './core/openrouter-client.js';
62
+ export type { OpenRouterConfig } from './core/openrouter-client.js';
63
+ export { getPageSpecSchema, getCockpitActionSchema, getSectionSchema, getAllSectionSchemas, getSchemaDefinedSectionTypes, } from './core/schema-export.js';
64
+ export { createExtensionRegistry, registerSectionRenderer, registerGuardrail, registerCustomStatus, setContentResolver, setMediaResolver, registerEditorPanel, hasCustomRenderer, getCustomRenderer, runCustomGuardrails, getEditorPanels, } from './core/extension-registry.js';
65
+ export type { ExtensionRegistry, CustomSectionRenderer, CustomGuardrail, GuardrailContext, ContentResolver, MediaResolver, EditorPanelDef, } from './core/extension-registry.js';
66
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Valentino Engine — Browser Entry Point
3
+ *
4
+ * Re-exports all browser-safe modules (no Node builtins: readline, fs, http, etc.).
5
+ * Use this entry point in browser bundlers (Vite, Rollup, webpack) to avoid
6
+ * pulling in Node-only code.
7
+ *
8
+ * Usage: import { PageSpecV1, validatePageSpec } from '@hale-bopp/valentino-engine/browser';
9
+ */
10
+ // Catalog resolver
11
+ export { mergePresentation, isGovernanceAllowed, resolvePageSpecWithCatalog } from './core/catalog.js';
12
+ // Presentation resolver
13
+ export { DEFAULT_PRESENTATION, inferRhythmProfile, resolvePresentation } from './core/presentation.js';
14
+ // Manifest resolver
15
+ export { normalizePathname, resolvePageIdByRoute } from './core/manifest.js';
16
+ // PageSpec validation
17
+ export { validatePageSpec } from './core/page-spec.js';
18
+ // Guardrails
19
+ export { checkNoHardcodedPx, checkNoHardcodedColor, checkNoNamedColor, GUARDRAILS } from './core/guardrails.js';
20
+ export { CSS_NAMED_COLORS } from './core/css-named-colors.js';
21
+ // Validation probes
22
+ export { checkWcagContrast, parseColor, relativeLuminance, contrastRatio } from './core/contrast.js';
23
+ export { probeRhythm } from './core/rhythm.js';
24
+ export { probeHeroContract } from './core/hero-contract.js';
25
+ export { probeSectionIntegrity } from './core/section-integrity.js';
26
+ // Theme Audit
27
+ export { auditThemePack, auditThemePacks, validateThemePackAgainstRegistry, inferTokenRole, VALENTINO_SURFACES, } from './core/theme-audit.js';
28
+ // Contrast Usage Probe
29
+ export { probeContrastUsage, probeContrastUsageMulti, parseRemappedTokens, parseTextTokenUsages, extractShadowDomStyles, } from './core/contrast-usage-probe.js';
30
+ // Skills
31
+ export { premiumDesignSkill, webGuardrailsSkill, designGuidelinesSkill } from './skills/index.js';
32
+ // CMS — Page status workflow
33
+ export { getPageStatus, getPublishAt, isPageVisible, getContrastAuditPages } from './core/page-status.js';
34
+ // CMS — Redirects
35
+ export { findRedirect } from './core/redirects.js';
36
+ // CMS — Media resolver
37
+ export { resolveMediaUrl, resolveMediaAsset } from './core/media.js';
38
+ // CMS — SEO + Schema.org
39
+ export { buildWebPageSchema } from './core/seo.js';
40
+ // CMS — Guardrails pure rules
41
+ export { checkDraftOrphans, checkPublishAtCoherence, checkMaintenanceModeLeak, check404Exists, checkRedirects, checkSeoCompleteness, checkOgImageExists, checkMediaOrphans, checkMediaMissingAlt, checkBreadcrumbDepth, checkLanguageCoverage, checkDuplicateRoutes, collectPureCmsWarnings, } from './core/guardrails-cms.js';
42
+ // Encoding guardrail
43
+ export { checkMojibake, checkTypography, checkEncoding, MOJIBAKE_PATTERN_COUNT, TYPO_RULE_COUNT } from './core/encoding.js';
44
+ // LLMs.txt generator
45
+ export { generateLlmsTxt, generateLlmsFullTxt } from './core/llms-generator.js';
46
+ // Animation presets
47
+ export { probeAnimations, resolveAnimationCSS, ANIMATION_PRESETS } from './core/animation.js';
48
+ // Editor utilities
49
+ export { getEditableSectionTypes, generateEditorSchema, generateAllEditorSchemas, applySectionPatch, addSection, removeSection, moveSection, applyPagePatch, } from './core/editor.js';
50
+ // AI Page Generator
51
+ export { parsePrompt, generatePageSpec, generatePageSpecLocal } from './core/page-generator.js';
52
+ // Template Gallery
53
+ export { listCatalogEntries, listPageEntries, listAllGalleryEntries, filterGalleryEntries } from './core/gallery.js';
54
+ // Cockpit API (pure logic, no Node builtins)
55
+ export { executeCockpitAction, executeCockpitBatch, validateCockpitAction, describeCockpitAction, COCKPIT_SECTION_TYPES, } from './core/cockpit-api.js';
56
+ // Intent Parser (pure logic)
57
+ export { parseIntent, parseIntentLocal, buildMinimalSection, buildSectionSummary } from './core/intent-parser.js';
58
+ // Visual Import (fetch-based, no fs)
59
+ export { importFromImage, createVisionCallback } from './core/visual-import.js';
60
+ // Video Import (in-memory, no fs)
61
+ export { importFromVideo, selectKeyFrames } from './core/video-import.js';
62
+ // OpenRouter Client (fetch-based)
63
+ export { createOpenRouterCallback, testOpenRouterConnection } from './core/openrouter-client.js';
64
+ // Schema Export
65
+ export { getPageSpecSchema, getCockpitActionSchema, getSectionSchema, getAllSectionSchemas, getSchemaDefinedSectionTypes, } from './core/schema-export.js';
66
+ // Extension Registry
67
+ export { createExtensionRegistry, registerSectionRenderer, registerGuardrail, registerCustomStatus, setContentResolver, setMediaResolver, registerEditorPanel, hasCustomRenderer, getCustomRenderer, runCustomGuardrails, getEditorPanels, } from './core/extension-registry.js';
68
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
@@ -850,34 +850,12 @@ importGo.addEventListener('click', async () => {
850
850
  setTimeout(() => importOverlay.classList.remove('open'), 1500);
851
851
  } else {
852
852
  importInfo.className = 'llm-status disconnected';
853
- const errMsg = result.error || result.warnings?.join(', ') || 'Import failed';
854
- const needsKey = errMsg.includes('API key') || errMsg.includes('OpenRouter') || errMsg.includes('OPENROUTER');
855
- if (needsKey) {
856
- importInfo.innerHTML = 'Configura OpenRouter: clicca <b>Settings</b> in alto a destra e inserisci la API key.';
857
- addMessage(
858
- '<div class="description">API key mancante</div>' +
859
- 'L\'import richiede un LLM. Clicca <b>Settings</b> in alto a destra, inserisci la tua API key OpenRouter e premi Connect. Poi riprova.',
860
- 'system', 'error'
861
- );
862
- } else {
863
- importInfo.textContent = errMsg;
864
- addMessage(`Import failed: ${errMsg}`, 'system', 'error');
865
- }
853
+ importInfo.textContent = result.error || 'Import failed';
854
+ addMessage(`Import failed: ${result.error || result.warnings?.join(', ')}`, 'system', 'error');
866
855
  }
867
856
  } catch (err) {
868
- const errMsg = err.message || String(err);
869
- const needsKey = errMsg.includes('API key') || errMsg.includes('OpenRouter') || errMsg.includes('Not found');
870
- if (needsKey || errMsg === 'Not found') {
871
- importInfo.innerHTML = 'Configura OpenRouter: clicca <b>Settings</b> in alto a destra.';
872
- addMessage(
873
- '<div class="description">Configurazione necessaria</div>' +
874
- 'Per importare serve un LLM. Clicca <b>Settings</b> → inserisci API key OpenRouter → Connect. Poi riprova.',
875
- 'system', 'error'
876
- );
877
- } else {
878
- importInfo.textContent = `Error: ${errMsg}`;
879
- addMessage(`Import error: ${errMsg}`, 'system', 'error');
880
- }
857
+ importInfo.textContent = `Error: ${err.message}`;
858
+ addMessage(`Import error: ${err.message}`, 'system', 'error');
881
859
  }
882
860
 
883
861
  importGo.disabled = false;
package/dist/node.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Valentino Engine — Node Entry Point
3
+ *
4
+ * Re-exports everything from the browser entry plus Node-only modules
5
+ * (cockpit-server, cockpit-repl, project-adapter).
6
+ *
7
+ * Usage: import { startCockpitServer, importFromProject } from '@hale-bopp/valentino-engine/node';
8
+ */
9
+ export * from './browser.js';
10
+ export { importFromUrl } from './core/url-import.js';
11
+ export { processReplInput, createReplSession, startRepl } from './core/cockpit-repl.js';
12
+ export type { ReplOptions, ReplSession } from './core/cockpit-repl.js';
13
+ export { importFromProject, scanProjectDirectory, analyzeHtmlStructure } from './core/project-adapter.js';
14
+ export type { ProjectScanResult, ProjectPageResult, ProjectAdapterResult, ProjectAdapterOptions } from './core/project-adapter.js';
15
+ export { startCockpitServer } from './cockpit-server.js';
16
+ export type { CockpitServerOptions } from './cockpit-server.js';
17
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxF,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGvE,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAC1G,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGnI,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/node.js ADDED
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Valentino Engine — Node Entry Point
3
+ *
4
+ * Re-exports everything from the browser entry plus Node-only modules
5
+ * (cockpit-server, cockpit-repl, project-adapter).
6
+ *
7
+ * Usage: import { startCockpitServer, importFromProject } from '@hale-bopp/valentino-engine/node';
8
+ */
9
+ // Everything from browser entry
10
+ export * from './browser.js';
11
+ // Node-only: URL Import (requires playwright)
12
+ export { importFromUrl } from './core/url-import.js';
13
+ // Node-only: REPL (requires readline)
14
+ export { processReplInput, createReplSession, startRepl } from './core/cockpit-repl.js';
15
+ // Node-only: Project Adapter (requires fs, path)
16
+ export { importFromProject, scanProjectDirectory, analyzeHtmlStructure } from './core/project-adapter.js';
17
+ // Node-only: Cockpit Server (requires http, fs, path)
18
+ export { startCockpitServer } from './cockpit-server.js';
19
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,gCAAgC;AAChC,cAAc,cAAc,CAAC;AAE7B,8CAA8C;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,sCAAsC;AACtC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGxF,iDAAiD;AACjD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAG1G,sDAAsD;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hale-bopp/valentino-engine",
3
- "version": "2.3.1",
3
+ "version": "2.5.0",
4
4
  "description": "Antifragile Open Source UI Design Engine — generates Runtime PageSpec JSON, validates accessibility, enforces Design Tokens, and consults GEDI for architectural decisions.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -10,6 +10,14 @@
10
10
  "types": "./dist/index.d.ts",
11
11
  "import": "./dist/index.js"
12
12
  },
13
+ "./browser": {
14
+ "types": "./dist/browser.d.ts",
15
+ "import": "./dist/browser.js"
16
+ },
17
+ "./node": {
18
+ "types": "./dist/node.d.ts",
19
+ "import": "./dist/node.js"
20
+ },
13
21
  "./mcp": {
14
22
  "types": "./dist/mcp/index.d.ts",
15
23
  "import": "./dist/mcp/index.js"
@@ -17,13 +25,17 @@
17
25
  "./cockpit-server": {
18
26
  "types": "./dist/cockpit-server.d.ts",
19
27
  "import": "./dist/cockpit-server.js"
20
- }
28
+ },
29
+ "./css/framework.base.css": "./css/framework.base.css",
30
+ "./css/framework.corporate.css": "./css/framework.corporate.css",
31
+ "./css/framework.landing.css": "./css/framework.landing.css"
21
32
  },
22
33
  "bin": {
23
34
  "valentino": "dist/bin/valentino.js"
24
35
  },
25
36
  "files": [
26
37
  "dist",
38
+ "css",
27
39
  "README.md",
28
40
  "LICENSE",
29
41
  "CHANGELOG.md",