@neowhale/storefront 0.2.46 → 0.2.48

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.
@@ -1347,149 +1347,178 @@ var WhaleStorefront = (function (exports) {
1347
1347
  ] }, u.label)) })
1348
1348
  ] });
1349
1349
  }
1350
+ var PIN_SVG = '<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z"/><circle cx="12" cy="10" r="3"/></svg>';
1351
+ var BAG_SVG = '<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M6 2L3 6v14a2 2 0 002 2h14a2 2 0 002-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 01-8 0"/></svg>';
1352
+ var STAR_PATH = "M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z";
1353
+ function LocationStars({ rating, count, accent }) {
1354
+ return /* @__PURE__ */ jsx("div", { style: { display: "flex", alignItems: "center", gap: "0.375rem" }, children: [
1355
+ /* @__PURE__ */ jsx("div", { style: { display: "flex", gap: "2px" }, children: [1, 2, 3, 4, 5].map((s) => /* @__PURE__ */ jsx(
1356
+ "svg",
1357
+ {
1358
+ width: 12,
1359
+ height: 12,
1360
+ viewBox: "0 0 20 20",
1361
+ fill: s <= Math.round(rating) ? accent : "rgba(255,255,255,0.1)",
1362
+ children: /* @__PURE__ */ jsx("path", { d: STAR_PATH })
1363
+ },
1364
+ s
1365
+ )) }),
1366
+ /* @__PURE__ */ jsx("span", { style: { color: "rgba(255,255,255,0.5)", fontSize: "0.75rem", fontWeight: 500 }, children: [
1367
+ rating.toFixed(1),
1368
+ " \xB7 ",
1369
+ count,
1370
+ " reviews"
1371
+ ] })
1372
+ ] });
1373
+ }
1350
1374
  function LocationCardSection({ section, theme, onEvent }) {
1351
1375
  const c = section.content;
1352
1376
  const locations = c.locations || [];
1353
1377
  if (locations.length === 0) return null;
1354
- return /* @__PURE__ */ jsx("div", { style: { padding: "1.5rem", maxWidth: 900, margin: "0 auto" }, children: /* @__PURE__ */ jsx("div", { style: {
1378
+ const brandFont = c.brand_font || "inherit";
1379
+ return /* @__PURE__ */ jsx("div", { style: { padding: "0.75rem 1rem", maxWidth: 900, margin: "0 auto" }, children: /* @__PURE__ */ jsx("div", { style: {
1355
1380
  display: "grid",
1356
- gridTemplateColumns: locations.length === 1 ? "minmax(0, 420px)" : `repeat(${Math.min(locations.length, 2)}, 1fr)`,
1357
- gap: "2px",
1381
+ gridTemplateColumns: locations.length === 1 ? "minmax(0, 420px)" : `repeat(${Math.min(locations.length, 4)}, 1fr)`,
1382
+ gap: "clamp(0.75rem, 2vw, 1rem)",
1358
1383
  justifyContent: "center"
1359
- }, children: locations.map((loc, i) => /* @__PURE__ */ jsx("div", { style: {
1360
- background: theme.surface,
1361
- overflow: "hidden",
1362
- display: "flex",
1363
- flexDirection: "column"
1364
- }, children: [
1365
- /* @__PURE__ */ jsx("div", { style: { position: "relative", aspectRatio: "4/5", overflow: "hidden" }, children: [
1366
- /* @__PURE__ */ jsx(
1367
- "img",
1368
- {
1369
- src: loc.image,
1370
- alt: loc.name,
1371
- style: { width: "100%", height: "100%", objectFit: "cover", display: "block" }
1372
- }
1373
- ),
1374
- /* @__PURE__ */ jsx("div", { style: {
1375
- position: "absolute",
1376
- inset: 0,
1377
- background: "linear-gradient(to top, rgba(0,0,0,0.6) 0%, transparent 50%)"
1378
- } }),
1379
- /* @__PURE__ */ jsx("div", { style: { position: "absolute", bottom: 0, left: 0, padding: "clamp(0.75rem, 3vw, 1.25rem)" }, children: [
1380
- /* @__PURE__ */ jsx("p", { style: {
1381
- fontSize: "clamp(1.25rem, 5vw, 1.75rem)",
1382
- fontWeight: 300,
1383
- fontFamily: theme.fontDisplay || "inherit",
1384
- color: "#fff",
1385
- margin: 0,
1386
- lineHeight: 1.1
1387
- }, children: loc.name }),
1388
- /* @__PURE__ */ jsx("p", { style: {
1389
- fontSize: "0.65rem",
1390
- letterSpacing: "0.2em",
1391
- color: "rgba(255,255,255,0.6)",
1392
- margin: "0.25rem 0 0",
1393
- fontWeight: 600
1394
- }, children: [
1395
- loc.city,
1396
- ", ",
1397
- loc.state
1398
- ] })
1399
- ] })
1400
- ] }),
1401
- /* @__PURE__ */ jsx("div", { style: {
1402
- padding: "clamp(0.75rem, 3vw, 1.25rem)",
1384
+ }, children: locations.map((loc, i) => {
1385
+ const dirUrl = loc.directions_url || `https://www.google.com/maps/dir/?api=1&destination=${encodeURIComponent(loc.address + ", " + loc.city + ", " + loc.state)}`;
1386
+ return /* @__PURE__ */ jsx("div", { style: {
1387
+ background: "#0C0C0C",
1388
+ border: "1px solid rgba(255,255,255,0.06)",
1389
+ overflow: "hidden",
1403
1390
  display: "flex",
1404
- flexDirection: "column",
1405
- gap: "0.5rem",
1406
- flex: 1
1391
+ flexDirection: "column"
1407
1392
  }, children: [
1408
- loc.tagline && /* @__PURE__ */ jsx("p", { style: { fontSize: "0.8rem", color: `${theme.fg}80`, fontWeight: 500, fontStyle: "italic", margin: 0 }, children: loc.tagline }),
1409
- loc.rating != null && loc.review_count != null && loc.review_count > 0 && /* @__PURE__ */ jsx("div", { style: { display: "flex", alignItems: "center", gap: "0.375rem" }, children: [
1410
- /* @__PURE__ */ jsx(Stars, { rating: loc.rating, color: theme.accent, size: 13 }),
1411
- /* @__PURE__ */ jsx("span", { style: { fontSize: "0.75rem", color: `${theme.fg}99` }, children: [
1412
- loc.rating.toFixed(1),
1413
- " (",
1414
- loc.review_count,
1415
- ")"
1416
- ] })
1417
- ] }),
1418
- loc.address && /* @__PURE__ */ jsx(
1419
- "a",
1420
- {
1421
- href: loc.directions_url || `https://maps.google.com/?q=${encodeURIComponent(loc.address + ", " + loc.city + ", " + loc.state)}`,
1422
- target: "_blank",
1423
- rel: "noopener noreferrer",
1424
- style: { fontSize: "0.75rem", color: `${theme.fg}55`, fontWeight: 500, textDecoration: "none", lineHeight: 1.5 },
1425
- children: [
1426
- loc.address,
1427
- ", ",
1393
+ /* @__PURE__ */ jsx("div", { style: { position: "relative", aspectRatio: "4/5", overflow: "hidden" }, children: [
1394
+ /* @__PURE__ */ jsx(
1395
+ "img",
1396
+ {
1397
+ src: loc.image,
1398
+ alt: loc.name,
1399
+ style: { width: "100%", height: "100%", objectFit: "cover", display: "block" }
1400
+ }
1401
+ ),
1402
+ /* @__PURE__ */ jsx("div", { style: {
1403
+ position: "absolute",
1404
+ inset: 0,
1405
+ background: "linear-gradient(to top, rgba(0,0,0,0.6) 0%, transparent 50%)"
1406
+ } }),
1407
+ /* @__PURE__ */ jsx("div", { style: { position: "absolute", bottom: 0, left: 0, padding: "clamp(1rem, 3vw, 1.25rem)" }, children: [
1408
+ /* @__PURE__ */ jsx("p", { "data-brand-font": "", style: {
1409
+ fontFamily: brandFont,
1410
+ fontSize: "clamp(1.5rem, 6vw, 1.875rem)",
1411
+ color: "#fff",
1412
+ margin: 0,
1413
+ lineHeight: 1
1414
+ }, children: loc.name }),
1415
+ /* @__PURE__ */ jsx("p", { style: {
1416
+ fontSize: "clamp(0.65rem, 1.5vw, 0.75rem)",
1417
+ letterSpacing: "0.2em",
1418
+ color: "rgba(255,255,255,0.6)",
1419
+ margin: "0.375rem 0 0",
1420
+ fontWeight: 600,
1421
+ textTransform: "uppercase"
1422
+ }, children: [
1428
1423
  loc.city,
1429
1424
  ", ",
1430
1425
  loc.state
1431
- ]
1432
- }
1433
- ),
1434
- loc.phone && /* @__PURE__ */ jsx(
1435
- "a",
1436
- {
1437
- href: loc.phone_href || `tel:${loc.phone}`,
1438
- style: { fontSize: "0.75rem", color: `${theme.fg}55`, fontWeight: 500, textDecoration: "none" },
1439
- children: loc.phone
1440
- }
1441
- ),
1442
- loc.hours && /* @__PURE__ */ jsx("p", { style: { fontSize: "0.7rem", color: `${theme.fg}40`, margin: 0 }, children: loc.hours }),
1443
- /* @__PURE__ */ jsx("div", { style: { display: "flex", gap: "0.5rem", marginTop: "auto", paddingTop: "0.25rem" }, children: [
1444
- /* @__PURE__ */ jsx(
1426
+ ] })
1427
+ ] })
1428
+ ] }),
1429
+ /* @__PURE__ */ jsx("div", { style: {
1430
+ padding: "clamp(0.875rem, 3vw, 1.25rem)",
1431
+ display: "flex",
1432
+ flexDirection: "column",
1433
+ gap: "0.625rem",
1434
+ flex: 1
1435
+ }, children: [
1436
+ loc.tagline && /* @__PURE__ */ jsx("p", { style: { fontSize: "0.8125rem", color: "rgba(255,255,255,0.5)", fontWeight: 500, fontStyle: "italic", margin: 0 }, children: loc.tagline }),
1437
+ loc.rating != null && loc.review_count != null && loc.review_count > 0 && /* @__PURE__ */ jsx(LocationStars, { rating: loc.rating, count: loc.review_count, accent: theme.accent }),
1438
+ loc.address && /* @__PURE__ */ jsx(
1445
1439
  "a",
1446
1440
  {
1447
- href: loc.directions_url || `https://maps.google.com/?q=${encodeURIComponent(loc.address + ", " + loc.city + ", " + loc.state)}`,
1441
+ href: dirUrl,
1448
1442
  target: "_blank",
1449
1443
  rel: "noopener noreferrer",
1450
- onClick: () => onEvent?.("cta_click", { label: "directions", location: loc.name }),
1451
- style: {
1452
- flex: 1,
1453
- display: "flex",
1454
- alignItems: "center",
1455
- justifyContent: "center",
1456
- padding: "0.625rem",
1457
- background: theme.fg,
1458
- color: theme.bg,
1459
- fontSize: "0.7rem",
1460
- fontWeight: 700,
1461
- letterSpacing: "0.1em",
1462
- textDecoration: "none",
1463
- textAlign: "center"
1464
- },
1465
- children: "directions"
1444
+ style: { fontSize: "0.75rem", color: "rgba(255,255,255,0.35)", fontWeight: 500, textDecoration: "none", lineHeight: 1.6 },
1445
+ children: [
1446
+ loc.address,
1447
+ ", ",
1448
+ loc.city,
1449
+ ", ",
1450
+ loc.state
1451
+ ]
1466
1452
  }
1467
1453
  ),
1468
- loc.shop_url && /* @__PURE__ */ jsx(
1454
+ loc.phone && /* @__PURE__ */ jsx(
1469
1455
  "a",
1470
1456
  {
1471
- href: loc.shop_url,
1472
- onClick: () => onEvent?.("cta_click", { label: "shop", location: loc.name }),
1473
- style: {
1474
- flex: 1,
1475
- display: "flex",
1476
- alignItems: "center",
1477
- justifyContent: "center",
1478
- padding: "0.625rem",
1479
- border: `1px solid ${theme.fg}20`,
1480
- color: `${theme.fg}CC`,
1481
- fontSize: "0.7rem",
1482
- fontWeight: 700,
1483
- letterSpacing: "0.1em",
1484
- textDecoration: "none",
1485
- textAlign: "center"
1486
- },
1487
- children: "shop"
1457
+ href: loc.phone_href || `tel:${loc.phone}`,
1458
+ style: { fontSize: "0.75rem", color: "rgba(255,255,255,0.35)", fontWeight: 500, textDecoration: "none" },
1459
+ children: loc.phone
1488
1460
  }
1489
- )
1461
+ ),
1462
+ loc.hours && /* @__PURE__ */ jsx("p", { style: { fontSize: "0.75rem", color: "rgba(255,255,255,0.35)", fontWeight: 500, margin: 0 }, children: loc.hours }),
1463
+ /* @__PURE__ */ jsx("div", { style: { display: "flex", gap: "0.5rem", marginTop: "auto", paddingTop: "0.25rem" }, children: [
1464
+ /* @__PURE__ */ jsx(
1465
+ "a",
1466
+ {
1467
+ href: dirUrl,
1468
+ target: "_blank",
1469
+ rel: "noopener noreferrer",
1470
+ onClick: () => onEvent?.("cta_click", { label: "directions", location: loc.name }),
1471
+ style: {
1472
+ flex: 1,
1473
+ display: "flex",
1474
+ alignItems: "center",
1475
+ justifyContent: "center",
1476
+ gap: "0.375rem",
1477
+ padding: "0.625rem",
1478
+ background: "#fff",
1479
+ color: "#000",
1480
+ fontSize: "clamp(0.65rem, 1.5vw, 0.75rem)",
1481
+ fontWeight: 700,
1482
+ letterSpacing: "0.1em",
1483
+ textTransform: "uppercase",
1484
+ textDecoration: "none"
1485
+ },
1486
+ children: [
1487
+ /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: PIN_SVG } }),
1488
+ "Directions"
1489
+ ]
1490
+ }
1491
+ ),
1492
+ loc.shop_url && /* @__PURE__ */ jsx(
1493
+ "a",
1494
+ {
1495
+ href: loc.shop_url,
1496
+ onClick: () => onEvent?.("cta_click", { label: "shop", location: loc.name }),
1497
+ style: {
1498
+ flex: 1,
1499
+ display: "flex",
1500
+ alignItems: "center",
1501
+ justifyContent: "center",
1502
+ gap: "0.375rem",
1503
+ padding: "0.625rem",
1504
+ border: "1px solid rgba(255,255,255,0.15)",
1505
+ color: "rgba(255,255,255,0.8)",
1506
+ fontSize: "clamp(0.65rem, 1.5vw, 0.75rem)",
1507
+ fontWeight: 700,
1508
+ letterSpacing: "0.1em",
1509
+ textTransform: "uppercase",
1510
+ textDecoration: "none"
1511
+ },
1512
+ children: [
1513
+ /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: BAG_SVG } }),
1514
+ "Shop"
1515
+ ]
1516
+ }
1517
+ )
1518
+ ] })
1490
1519
  ] })
1491
- ] })
1492
- ] }, i)) }) });
1520
+ ] }, i);
1521
+ }) }) });
1493
1522
  }
1494
1523
 
1495
1524
  // src/react/components/section-renderer.tsx
@@ -3085,149 +3085,178 @@ function CountdownSection({ section, theme }) {
3085
3085
  ] }, u.label)) })
3086
3086
  ] });
3087
3087
  }
3088
+ var PIN_SVG = '<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z"/><circle cx="12" cy="10" r="3"/></svg>';
3089
+ var BAG_SVG = '<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M6 2L3 6v14a2 2 0 002 2h14a2 2 0 002-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 01-8 0"/></svg>';
3090
+ var STAR_PATH = "M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z";
3091
+ function LocationStars({ rating, count, accent }) {
3092
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", gap: "0.375rem" }, children: [
3093
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", gap: "2px" }, children: [1, 2, 3, 4, 5].map((s) => /* @__PURE__ */ jsxRuntime.jsx(
3094
+ "svg",
3095
+ {
3096
+ width: 12,
3097
+ height: 12,
3098
+ viewBox: "0 0 20 20",
3099
+ fill: s <= Math.round(rating) ? accent : "rgba(255,255,255,0.1)",
3100
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: STAR_PATH })
3101
+ },
3102
+ s
3103
+ )) }),
3104
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { color: "rgba(255,255,255,0.5)", fontSize: "0.75rem", fontWeight: 500 }, children: [
3105
+ rating.toFixed(1),
3106
+ " \xB7 ",
3107
+ count,
3108
+ " reviews"
3109
+ ] })
3110
+ ] });
3111
+ }
3088
3112
  function LocationCardSection({ section, theme, onEvent }) {
3089
3113
  const c = section.content;
3090
3114
  const locations = c.locations || [];
3091
3115
  if (locations.length === 0) return null;
3092
- return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "1.5rem", maxWidth: 900, margin: "0 auto" }, children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: {
3116
+ const brandFont = c.brand_font || "inherit";
3117
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "0.75rem 1rem", maxWidth: 900, margin: "0 auto" }, children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: {
3093
3118
  display: "grid",
3094
- gridTemplateColumns: locations.length === 1 ? "minmax(0, 420px)" : `repeat(${Math.min(locations.length, 2)}, 1fr)`,
3095
- gap: "2px",
3119
+ gridTemplateColumns: locations.length === 1 ? "minmax(0, 420px)" : `repeat(${Math.min(locations.length, 4)}, 1fr)`,
3120
+ gap: "clamp(0.75rem, 2vw, 1rem)",
3096
3121
  justifyContent: "center"
3097
- }, children: locations.map((loc, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { style: {
3098
- background: theme.surface,
3099
- overflow: "hidden",
3100
- display: "flex",
3101
- flexDirection: "column"
3102
- }, children: [
3103
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { position: "relative", aspectRatio: "4/5", overflow: "hidden" }, children: [
3104
- /* @__PURE__ */ jsxRuntime.jsx(
3105
- "img",
3106
- {
3107
- src: loc.image,
3108
- alt: loc.name,
3109
- style: { width: "100%", height: "100%", objectFit: "cover", display: "block" }
3110
- }
3111
- ),
3112
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: {
3113
- position: "absolute",
3114
- inset: 0,
3115
- background: "linear-gradient(to top, rgba(0,0,0,0.6) 0%, transparent 50%)"
3116
- } }),
3117
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { position: "absolute", bottom: 0, left: 0, padding: "clamp(0.75rem, 3vw, 1.25rem)" }, children: [
3118
- /* @__PURE__ */ jsxRuntime.jsx("p", { style: {
3119
- fontSize: "clamp(1.25rem, 5vw, 1.75rem)",
3120
- fontWeight: 300,
3121
- fontFamily: theme.fontDisplay || "inherit",
3122
- color: "#fff",
3123
- margin: 0,
3124
- lineHeight: 1.1
3125
- }, children: loc.name }),
3126
- /* @__PURE__ */ jsxRuntime.jsxs("p", { style: {
3127
- fontSize: "0.65rem",
3128
- letterSpacing: "0.2em",
3129
- color: "rgba(255,255,255,0.6)",
3130
- margin: "0.25rem 0 0",
3131
- fontWeight: 600
3132
- }, children: [
3133
- loc.city,
3134
- ", ",
3135
- loc.state
3136
- ] })
3137
- ] })
3138
- ] }),
3139
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: {
3140
- padding: "clamp(0.75rem, 3vw, 1.25rem)",
3122
+ }, children: locations.map((loc, i) => {
3123
+ const dirUrl = loc.directions_url || `https://www.google.com/maps/dir/?api=1&destination=${encodeURIComponent(loc.address + ", " + loc.city + ", " + loc.state)}`;
3124
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: {
3125
+ background: "#0C0C0C",
3126
+ border: "1px solid rgba(255,255,255,0.06)",
3127
+ overflow: "hidden",
3141
3128
  display: "flex",
3142
- flexDirection: "column",
3143
- gap: "0.5rem",
3144
- flex: 1
3129
+ flexDirection: "column"
3145
3130
  }, children: [
3146
- loc.tagline && /* @__PURE__ */ jsxRuntime.jsx("p", { style: { fontSize: "0.8rem", color: `${theme.fg}80`, fontWeight: 500, fontStyle: "italic", margin: 0 }, children: loc.tagline }),
3147
- loc.rating != null && loc.review_count != null && loc.review_count > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", gap: "0.375rem" }, children: [
3148
- /* @__PURE__ */ jsxRuntime.jsx(Stars, { rating: loc.rating, color: theme.accent, size: 13 }),
3149
- /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: "0.75rem", color: `${theme.fg}99` }, children: [
3150
- loc.rating.toFixed(1),
3151
- " (",
3152
- loc.review_count,
3153
- ")"
3154
- ] })
3155
- ] }),
3156
- loc.address && /* @__PURE__ */ jsxRuntime.jsxs(
3157
- "a",
3158
- {
3159
- href: loc.directions_url || `https://maps.google.com/?q=${encodeURIComponent(loc.address + ", " + loc.city + ", " + loc.state)}`,
3160
- target: "_blank",
3161
- rel: "noopener noreferrer",
3162
- style: { fontSize: "0.75rem", color: `${theme.fg}55`, fontWeight: 500, textDecoration: "none", lineHeight: 1.5 },
3163
- children: [
3164
- loc.address,
3165
- ", ",
3131
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { position: "relative", aspectRatio: "4/5", overflow: "hidden" }, children: [
3132
+ /* @__PURE__ */ jsxRuntime.jsx(
3133
+ "img",
3134
+ {
3135
+ src: loc.image,
3136
+ alt: loc.name,
3137
+ style: { width: "100%", height: "100%", objectFit: "cover", display: "block" }
3138
+ }
3139
+ ),
3140
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: {
3141
+ position: "absolute",
3142
+ inset: 0,
3143
+ background: "linear-gradient(to top, rgba(0,0,0,0.6) 0%, transparent 50%)"
3144
+ } }),
3145
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { position: "absolute", bottom: 0, left: 0, padding: "clamp(1rem, 3vw, 1.25rem)" }, children: [
3146
+ /* @__PURE__ */ jsxRuntime.jsx("p", { "data-brand-font": "", style: {
3147
+ fontFamily: brandFont,
3148
+ fontSize: "clamp(1.5rem, 6vw, 1.875rem)",
3149
+ color: "#fff",
3150
+ margin: 0,
3151
+ lineHeight: 1
3152
+ }, children: loc.name }),
3153
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { style: {
3154
+ fontSize: "clamp(0.65rem, 1.5vw, 0.75rem)",
3155
+ letterSpacing: "0.2em",
3156
+ color: "rgba(255,255,255,0.6)",
3157
+ margin: "0.375rem 0 0",
3158
+ fontWeight: 600,
3159
+ textTransform: "uppercase"
3160
+ }, children: [
3166
3161
  loc.city,
3167
3162
  ", ",
3168
3163
  loc.state
3169
- ]
3170
- }
3171
- ),
3172
- loc.phone && /* @__PURE__ */ jsxRuntime.jsx(
3173
- "a",
3174
- {
3175
- href: loc.phone_href || `tel:${loc.phone}`,
3176
- style: { fontSize: "0.75rem", color: `${theme.fg}55`, fontWeight: 500, textDecoration: "none" },
3177
- children: loc.phone
3178
- }
3179
- ),
3180
- loc.hours && /* @__PURE__ */ jsxRuntime.jsx("p", { style: { fontSize: "0.7rem", color: `${theme.fg}40`, margin: 0 }, children: loc.hours }),
3181
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", gap: "0.5rem", marginTop: "auto", paddingTop: "0.25rem" }, children: [
3182
- /* @__PURE__ */ jsxRuntime.jsx(
3164
+ ] })
3165
+ ] })
3166
+ ] }),
3167
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: {
3168
+ padding: "clamp(0.875rem, 3vw, 1.25rem)",
3169
+ display: "flex",
3170
+ flexDirection: "column",
3171
+ gap: "0.625rem",
3172
+ flex: 1
3173
+ }, children: [
3174
+ loc.tagline && /* @__PURE__ */ jsxRuntime.jsx("p", { style: { fontSize: "0.8125rem", color: "rgba(255,255,255,0.5)", fontWeight: 500, fontStyle: "italic", margin: 0 }, children: loc.tagline }),
3175
+ loc.rating != null && loc.review_count != null && loc.review_count > 0 && /* @__PURE__ */ jsxRuntime.jsx(LocationStars, { rating: loc.rating, count: loc.review_count, accent: theme.accent }),
3176
+ loc.address && /* @__PURE__ */ jsxRuntime.jsxs(
3183
3177
  "a",
3184
3178
  {
3185
- href: loc.directions_url || `https://maps.google.com/?q=${encodeURIComponent(loc.address + ", " + loc.city + ", " + loc.state)}`,
3179
+ href: dirUrl,
3186
3180
  target: "_blank",
3187
3181
  rel: "noopener noreferrer",
3188
- onClick: () => onEvent?.("cta_click", { label: "directions", location: loc.name }),
3189
- style: {
3190
- flex: 1,
3191
- display: "flex",
3192
- alignItems: "center",
3193
- justifyContent: "center",
3194
- padding: "0.625rem",
3195
- background: theme.fg,
3196
- color: theme.bg,
3197
- fontSize: "0.7rem",
3198
- fontWeight: 700,
3199
- letterSpacing: "0.1em",
3200
- textDecoration: "none",
3201
- textAlign: "center"
3202
- },
3203
- children: "directions"
3182
+ style: { fontSize: "0.75rem", color: "rgba(255,255,255,0.35)", fontWeight: 500, textDecoration: "none", lineHeight: 1.6 },
3183
+ children: [
3184
+ loc.address,
3185
+ ", ",
3186
+ loc.city,
3187
+ ", ",
3188
+ loc.state
3189
+ ]
3204
3190
  }
3205
3191
  ),
3206
- loc.shop_url && /* @__PURE__ */ jsxRuntime.jsx(
3192
+ loc.phone && /* @__PURE__ */ jsxRuntime.jsx(
3207
3193
  "a",
3208
3194
  {
3209
- href: loc.shop_url,
3210
- onClick: () => onEvent?.("cta_click", { label: "shop", location: loc.name }),
3211
- style: {
3212
- flex: 1,
3213
- display: "flex",
3214
- alignItems: "center",
3215
- justifyContent: "center",
3216
- padding: "0.625rem",
3217
- border: `1px solid ${theme.fg}20`,
3218
- color: `${theme.fg}CC`,
3219
- fontSize: "0.7rem",
3220
- fontWeight: 700,
3221
- letterSpacing: "0.1em",
3222
- textDecoration: "none",
3223
- textAlign: "center"
3224
- },
3225
- children: "shop"
3195
+ href: loc.phone_href || `tel:${loc.phone}`,
3196
+ style: { fontSize: "0.75rem", color: "rgba(255,255,255,0.35)", fontWeight: 500, textDecoration: "none" },
3197
+ children: loc.phone
3226
3198
  }
3227
- )
3199
+ ),
3200
+ loc.hours && /* @__PURE__ */ jsxRuntime.jsx("p", { style: { fontSize: "0.75rem", color: "rgba(255,255,255,0.35)", fontWeight: 500, margin: 0 }, children: loc.hours }),
3201
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", gap: "0.5rem", marginTop: "auto", paddingTop: "0.25rem" }, children: [
3202
+ /* @__PURE__ */ jsxRuntime.jsxs(
3203
+ "a",
3204
+ {
3205
+ href: dirUrl,
3206
+ target: "_blank",
3207
+ rel: "noopener noreferrer",
3208
+ onClick: () => onEvent?.("cta_click", { label: "directions", location: loc.name }),
3209
+ style: {
3210
+ flex: 1,
3211
+ display: "flex",
3212
+ alignItems: "center",
3213
+ justifyContent: "center",
3214
+ gap: "0.375rem",
3215
+ padding: "0.625rem",
3216
+ background: "#fff",
3217
+ color: "#000",
3218
+ fontSize: "clamp(0.65rem, 1.5vw, 0.75rem)",
3219
+ fontWeight: 700,
3220
+ letterSpacing: "0.1em",
3221
+ textTransform: "uppercase",
3222
+ textDecoration: "none"
3223
+ },
3224
+ children: [
3225
+ /* @__PURE__ */ jsxRuntime.jsx("span", { dangerouslySetInnerHTML: { __html: PIN_SVG } }),
3226
+ "Directions"
3227
+ ]
3228
+ }
3229
+ ),
3230
+ loc.shop_url && /* @__PURE__ */ jsxRuntime.jsxs(
3231
+ "a",
3232
+ {
3233
+ href: loc.shop_url,
3234
+ onClick: () => onEvent?.("cta_click", { label: "shop", location: loc.name }),
3235
+ style: {
3236
+ flex: 1,
3237
+ display: "flex",
3238
+ alignItems: "center",
3239
+ justifyContent: "center",
3240
+ gap: "0.375rem",
3241
+ padding: "0.625rem",
3242
+ border: "1px solid rgba(255,255,255,0.15)",
3243
+ color: "rgba(255,255,255,0.8)",
3244
+ fontSize: "clamp(0.65rem, 1.5vw, 0.75rem)",
3245
+ fontWeight: 700,
3246
+ letterSpacing: "0.1em",
3247
+ textTransform: "uppercase",
3248
+ textDecoration: "none"
3249
+ },
3250
+ children: [
3251
+ /* @__PURE__ */ jsxRuntime.jsx("span", { dangerouslySetInnerHTML: { __html: BAG_SVG } }),
3252
+ "Shop"
3253
+ ]
3254
+ }
3255
+ )
3256
+ ] })
3228
3257
  ] })
3229
- ] })
3230
- ] }, i)) }) });
3258
+ ] }, i);
3259
+ }) }) });
3231
3260
  }
3232
3261
  function SectionRenderer({
3233
3262
  section,