diff --git a/site/assets/patterns/marketing-surface-weeknight-meal-plan.webp b/site/assets/patterns/marketing-surface-weeknight-meal-plan.webp
new file mode 100644
index 0000000..418d2a7
Binary files /dev/null and b/site/assets/patterns/marketing-surface-weeknight-meal-plan.webp differ
diff --git a/site/build-site.mjs b/site/build-site.mjs
index 8f7f149..b42513a 100755
--- a/site/build-site.mjs
+++ b/site/build-site.mjs
@@ -59,6 +59,10 @@ const SOCIAL_THUMBNAIL_PATH = `/assets/${SOCIAL_THUMBNAIL_FILENAME}`;
const SOCIAL_THUMBNAIL_ALT = "JudgmentKit. Before the UI.";
const HOMEPAGE_HERO_ART_FILENAME = "judgment-lens-hero.webp";
const HOMEPAGE_HERO_ART_PATH = `/assets/${HOMEPAGE_HERO_ART_FILENAME}`;
+const MARKETING_PATTERN_HERO_FILENAME =
+ "marketing-surface-weeknight-meal-plan.webp";
+const MARKETING_PATTERN_HERO_PATH =
+ `/assets/patterns/${MARKETING_PATTERN_HERO_FILENAME}`;
const VISUAL_COMPOSITION_RECORDING_FILENAME =
"judgmentkit-select-field-agent-demo.mp4";
const VISUAL_COMPOSITION_DARK_RECORDING_FILENAME =
@@ -3432,17 +3436,26 @@ pre {
}
.jk-surface-marketing-hero {
display: grid;
- grid-template-columns: minmax(0, 1.1fr) minmax(260px, 0.9fr);
- gap: 28px;
align-items: center;
+ min-height: clamp(430px, 50vw, 570px);
padding: clamp(24px, 5vw, 56px);
- background: var(--jk-color-canvas, var(--bg));
+ background-color: var(--hero-art-bg);
+ background-image:
+ linear-gradient(90deg, color-mix(in srgb, var(--hero-art-bg) 96%, transparent) 0%, color-mix(in srgb, var(--hero-art-bg) 86%, transparent) 42%, color-mix(in srgb, var(--hero-art-bg) 42%, transparent) 70%, color-mix(in srgb, var(--hero-art-bg) 22%, transparent) 100%),
+ url("${MARKETING_PATTERN_HERO_PATH}");
+ background-position: 50% 48%;
+ background-size: cover;
+ color: var(--fixed-light-ink);
}
.jk-surface-marketing-offer {
display: grid;
gap: 14px;
align-content: center;
min-width: 0;
+ max-width: 650px;
+}
+.jk-surface-marketing-offer .jk-surface-kicker {
+ color: color-mix(in srgb, var(--fixed-light-ink) 78%, transparent);
}
.jk-surface-marketing-offer h4 {
max-width: 15ch;
@@ -3452,65 +3465,47 @@ pre {
}
.jk-surface-marketing-offer p:not(.jk-surface-kicker) {
max-width: 52ch;
- color: var(--jk-color-muted, var(--muted));
+ color: color-mix(in srgb, var(--fixed-light-ink) 82%, transparent);
+}
+.jk-surface-marketing-actions {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 10px 18px;
+ align-items: center;
}
.jk-surface-marketing-offer .jk-action-button {
width: max-content;
}
-.jk-surface-marketing-offer small {
- color: var(--jk-color-muted, var(--muted));
-}
-.jk-surface-marketing-proof {
- display: grid;
- gap: 14px;
- min-width: 0;
- padding: 18px;
- border: 1px solid var(--jk-color-border, var(--line));
- border-radius: var(--jk-radius-panel, 8px);
- background: var(--jk-color-surface, var(--panel));
- box-shadow: 0 16px 36px color-mix(in srgb, var(--jk-color-text, var(--ink)) 10%, transparent);
-}
-.jk-surface-plan-card {
- display: grid;
- gap: 2px;
+.jk-surface-marketing-offer .jk-action-button:disabled {
+ border-color: var(--fixed-light-ink);
+ background: var(--fixed-light-ink);
+ color: var(--hero-art-bg);
+ opacity: 1;
}
-.jk-surface-plan-card > div {
- display: grid;
- grid-template-columns: 40px minmax(0, 1fr);
- gap: 2px 10px;
- padding: 10px 0;
- border-bottom: 1px solid var(--jk-color-border, var(--line));
+.jk-surface-marketing-offer .jk-surface-text-link {
+ color: var(--fixed-light-ink);
}
-.jk-surface-plan-card > div:last-child {
- border-bottom: 0;
-}
-.jk-surface-plan-card span {
- grid-row: 1 / 3;
- color: var(--jk-color-focus, var(--accent));
- font-size: 11px;
- font-weight: 900;
+.jk-surface-marketing-offer small {
+ color: color-mix(in srgb, var(--fixed-light-ink) 72%, transparent);
}
-.jk-surface-plan-card small {
- color: var(--jk-color-muted, var(--muted));
+.jk-surface-marketing-proofline {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 12px 26px;
+ max-width: 560px;
+ padding-top: 14px;
+ border-top: 1px solid color-mix(in srgb, var(--fixed-light-ink) 28%, transparent);
}
-.jk-surface-proof-stats {
+.jk-surface-marketing-proofline div {
display: grid;
- grid-template-columns: repeat(2, minmax(0, 1fr));
- border-top: 1px solid var(--jk-color-border, var(--line));
- border-bottom: 1px solid var(--jk-color-border, var(--line));
-}
-.jk-surface-proof-stats div {
- padding: 10px;
-}
-.jk-surface-proof-stats div + div {
- border-left: 1px solid var(--jk-color-border, var(--line));
+ gap: 1px;
}
-.jk-surface-proof-stats dt {
- font-size: 18px;
+.jk-surface-marketing-proofline dt {
+ font-size: 17px;
font-weight: 900;
}
-.jk-surface-proof-stats dd {
- color: var(--jk-color-muted, var(--muted));
+.jk-surface-marketing-proofline dd {
+ color: color-mix(in srgb, var(--fixed-light-ink) 74%, transparent);
font-size: 11px;
}
.jk-surface-marketing-next {
@@ -5627,15 +5622,21 @@ pre {
grid-template-columns: minmax(0, 1fr);
}
.jk-surface-marketing-hero {
- gap: 20px;
- padding: 22px 16px;
+ padding: clamp(210px, 38vw, 310px) 16px 24px;
+ background-image:
+ linear-gradient(180deg, transparent 0%, color-mix(in srgb, var(--hero-art-bg) 72%, transparent) 26%, var(--hero-art-bg) 34%, var(--hero-art-bg) 100%),
+ url("${MARKETING_PATTERN_HERO_PATH}");
+ background-position: center, center top;
+ background-repeat: no-repeat;
+ background-size: 100% 100%, 100% auto;
}
.jk-surface-marketing-offer h4 {
max-width: 18ch;
font-size: clamp(27px, 10vw, 40px);
}
- .jk-surface-marketing-proof {
- padding: 14px;
+ .jk-surface-marketing-actions {
+ align-items: flex-start;
+ flex-direction: column;
}
.jk-surface-marketing-next,
.jk-surface-review-receipt,
@@ -6981,21 +6982,16 @@ function renderMarketingSurface(contract, example) {
Five dinners. One calm week.
${escapeHtml(example.regions.offer)}
Flexible recipes, one organized grocery list, and simple swaps for nights when plans change.
- ${renderPatternControl("primary call to action", 0, example.controls["primary call to action"])}
- No card required · Cancel any time
-
-