{
  "version": 3,
  "sources": ["/cdn/shop/t/92/assets/florame-partner-context.js?florame_partner=20260430a"],
  "sourcesContent": ["(function () {\r\n  const CONFIG = window.__florameThemeConfig || {};\r\n  const STORAGE_KEY = 'florame_partner_context_v2';\r\n  const CACHE_PREFIX = 'florame_partner_cache_v7:';\r\n  const CARD_STATE_PREFIX = 'florame_partner_home_card_v1:';\r\n  const CACHE_TTL_MS = 5 * 60 * 1000;\r\n  const PARTNER_REFRESH_INTERVAL_MS = 10 * 60 * 1000;\r\n  const PARTNER_REFRESH_MIN_GAP_MS = 15 * 1000;\r\n  const RESERVED_SEGMENTS = new Set([\r\n    'account', 'apps', 'a', 'blog', 'blogs', 'cart', 'challenge', 'checkout',\r\n    'collections', 'community', 'pages', 'policies', 'products', 'search',\r\n    'tools', 'admin', 'hub', 'en', 'it'\r\n  ]);\r\n  const DOW_IT = ['Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab', 'Dom'];\r\n  const DOW_EN = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];\r\n  const DOW = DOW_IT;\r\n  const PARTNER_CARD_TRANSLATION_KEY = 'florame_partner_card_translations_v1';\r\n  const PARTNER_MOMENT_CACHE_KEY = 'florame_partner_moment_cache_v1';\r\n  const PARTNER_REVIEW_CACHE_PREFIX = 'florame_partner_reviews_v1:';\r\n  const PARTNER_SHOWCASE_CACHE_PREFIX = 'florame_partner_showcase_v2:';\r\n  const FAVORITE_PARTNERS_KEY = 'florame_favorite_partners_v1';\r\n  const BOUQUET_OFFER_KEY = 'florame_bouquet_offer_v1';\r\n  const FULFILLMENT_PREFERENCE_KEY = 'florame_fulfillment_preference_v1';\r\n  const FULFILLMENT_PREFERENCE_TTL_MS = 6 * 60 * 60 * 1000;\r\n  const PARTNER_REVIEW_CACHE_TTL_MS = 2 * 60 * 1000;\r\n  const PARTNER_SHOWCASE_CACHE_TTL_MS = 60 * 1000;\r\n  const PARTNER_SHOWCASE_CACHE_STALE_MS = 24 * 60 * 60 * 1000;\r\n  const PARTNER_SHOWCASE_REQUEST_REUSE_MS = 15 * 1000;\r\n  const PARTNER_SHOWCASE_REQUEST_TIMEOUT_MS = 9 * 1000;\r\n  let partnerCardTranslations = null;\r\n  let partnerRefreshTimer = null;\r\n  let partnerRefreshPromise = null;\r\n  let partnerLastResolvedAt = 0;\r\n  let partnerSurfaceFingerprint = '';\r\n  let partnerAvailabilityRevision = '';\r\n  let partnerAvailabilityNoticeRevision = '';\r\n  const partnerShowcaseRequests = new Map();\r\n  const ROOT_HOST = String(CONFIG.rootHost || 'florame.ai').replace(/^www\\./, '');\r\n  const PARTNER_HOME_TEMPLATE = String(CONFIG.partnerHomeTemplateSuffix || 'partner-storefront').trim();\r\n  const CURRENT_AWI_SCRIPT = 'awi-app.min.js?v=20260914-account-entry-preview-v896';\r\n  const THEME_SYSTEM_DEFAULTS = {\r\n    headlineColor: '#111827',\r\n    brandGradientFrom: '#ff85a2',\r\n    brandGradientTo: '#ff4d75',\r\n    noteColor: '#5b6475',\r\n    accentColor: '#ff4d75',\r\n    websiteButtonColor: '',\r\n    surfaceColor: '#ffffff',\r\n    surfaceBorderColor: '#292929',\r\n    cardTextColor: '#374151',\r\n    hoursSurfaceColor: '',\r\n    hoursSurfaceBorderColor: '',\r\n    hoursTextColor: '',\r\n    badgeBackgroundColor: '#ffffff',\r\n    badgeTextColor: '#111827'\r\n  };\r\n\r\n  function buildThemeAssetUrl(fileName) {\r\n    const clean = String(fileName || '').trim();\r\n    if (!clean) return '';\r\n    try {\r\n      const script = document.currentScript?.src\r\n        || Array.from(document.scripts || []).map((node) => node.src || '').find((src) => src.includes('/assets/florame-partner-context.js'))\r\n        || '';\r\n      if (script) {\r\n        return script.replace(/\\/assets\\/[^/?#]+(?:\\?[^#]*)?(?:#.*)?$/, '/assets/' + clean);\r\n      }\r\n    } catch (_) {}\r\n    return '//' + ROOT_HOST + '/cdn/shop/t/87/assets/' + clean;\r\n  }\r\n\r\n  function syncAwiScriptUrl() {\r\n    const awiUrl = String(CONFIG.awiScriptUrl || '').trim() || buildThemeAssetUrl(CURRENT_AWI_SCRIPT);\r\n    if (!awiUrl) return;\r\n    try { window.AWI_CAP_MODAL_SCRIPT_URL = awiUrl; } catch (_) {}\r\n    try { window.HOMEPAGE_INIT_AWI_SCRIPT_URL = awiUrl; } catch (_) {}\r\n    try {\r\n      if (typeof __HOME_CTA !== 'undefined' && __HOME_CTA) {\r\n        __HOME_CTA.awiScriptUrl = awiUrl;\r\n      }\r\n    } catch (_) {}\r\n  }\r\n\r\n  syncAwiScriptUrl();\r\n  try { document.addEventListener('DOMContentLoaded', syncAwiScriptUrl, { once: true }); } catch (_) {}\r\n\r\n  function slugify(value) {\r\n    return String(value || '')\r\n      .trim()\r\n      .toLowerCase()\r\n      .normalize('NFKD')\r\n      .replace(/[\\u0300-\\u036f]/g, '')\r\n      .replace(/[^a-z0-9]+/g, '-')\r\n      .replace(/^-+|-+$/g, '')\r\n      .slice(0, 80);\r\n  }\r\n\r\n  function escapeHtml(value) {\r\n    return String(value || '')\r\n      .replace(/&/g, '&amp;')\r\n      .replace(/</g, '&lt;')\r\n      .replace(/>/g, '&gt;')\r\n      .replace(/\"/g, '&quot;')\r\n      .replace(/'/g, '&#39;');\r\n  }\r\n\r\n  function getNativeLanguage(options) {\r\n    try {\r\n      const explicit = options && (options.lang || options.locale || options.language);\r\n      const explicitLang = String(explicit || '').slice(0, 2).toLowerCase();\r\n      if (explicitLang === 'en' || explicitLang === 'it') return explicitLang;\r\n      const fromApi = window.FlorameI18n && typeof window.FlorameI18n.getLanguage === 'function'\r\n        ? window.FlorameI18n.getLanguage()\r\n        : '';\r\n      const stored = localStorage.getItem('florame_native_lang') || localStorage.getItem('bouquetLanguage') || '';\r\n      const htmlLang = document.documentElement.getAttribute('lang') || '';\r\n      return String(fromApi || stored || htmlLang || 'it').slice(0, 2).toLowerCase() === 'en' ? 'en' : 'it';\r\n    } catch (_) {\r\n      return 'it';\r\n    }\r\n  }\r\n\r\n  function partnerText(it, en) {\r\n    return getNativeLanguage() === 'en' ? en : it;\r\n  }\r\n\r\n  function readFavoritePartners() {\r\n    try {\r\n      const parsed = JSON.parse(localStorage.getItem(FAVORITE_PARTNERS_KEY) || '[]');\r\n      return Array.isArray(parsed)\r\n        ? parsed.filter((row) => row && row.partnerSlug).slice(0, 24)\r\n        : [];\r\n    } catch (_) {\r\n      return [];\r\n    }\r\n  }\r\n\r\n  function partnerIsFavorite(partnerSlug) {\r\n    const slug = slugify(partnerSlug);\r\n    return Boolean(slug && readFavoritePartners().some((row) => slugify(row.partnerSlug) === slug));\r\n  }\r\n\r\n  function setFavoritePartner(payload, shouldSave) {\r\n    const slug = slugify(payload?.partnerSlug);\r\n    if (!slug) return [];\r\n    let rows = readFavoritePartners().filter((row) => slugify(row.partnerSlug) !== slug);\r\n    if (shouldSave) {\r\n      rows.unshift({\r\n        partnerSlug: slug,\r\n        manualFallback: slug === 'manual-florist-global-v1',\r\n        name: String(payload?.name || partnerText('Fiorista Florame', 'Florame florist')).trim(),\r\n        homeUrl: String(payload?.homeUrl || localizeStorefrontPath(`/pages/${slug}`)).trim(),\r\n        city: String(payload?.city || '').trim(),\r\n        addressLine: String(payload?.addressLine || '').trim(),\r\n        logoUrl: String(payload?.logoUrl || '').trim(),\r\n        artUrl: String(payload?.artUrl || '').trim(),\r\n        savedAt: Date.now()\r\n      });\r\n    }\r\n    rows = rows.slice(0, 24);\r\n    try { localStorage.setItem(FAVORITE_PARTNERS_KEY, JSON.stringify(rows)); } catch (_) {}\r\n    try {\r\n      window.dispatchEvent(new CustomEvent('florame:favorite-partners-changed', {\r\n        detail: { partnerSlug: slug, saved: Boolean(shouldSave), partners: rows }\r\n      }));\r\n    } catch (_) {}\r\n    return rows;\r\n  }\r\n\r\n  function partnerTranslationKey(value) {\r\n    return String(value == null ? '' : value).replace(/\\s+/g, ' ').trim().toLowerCase();\r\n  }\r\n\r\n  function readPartnerCardTranslations() {\r\n    if (partnerCardTranslations) return partnerCardTranslations;\r\n    if (window.FlorameTranslationCache) return (partnerCardTranslations = Object.create(null));\r\n    try {\r\n      const parsed = JSON.parse(localStorage.getItem(PARTNER_CARD_TRANSLATION_KEY) || '{}');\r\n      partnerCardTranslations = parsed && typeof parsed === 'object' ? parsed : {};\r\n    } catch (_) {\r\n      partnerCardTranslations = {};\r\n    }\r\n    return partnerCardTranslations;\r\n  }\r\n\r\n  function savePartnerCardTranslations() {\r\n    try {\r\n      const cache = readPartnerCardTranslations();\r\n      const keys = Object.keys(cache);\r\n      if (keys.length > 400) {\r\n        const trimmed = {};\r\n        keys.slice(-400).forEach((key) => { trimmed[key] = cache[key]; });\r\n        partnerCardTranslations = trimmed;\r\n      }\r\n      localStorage.setItem(PARTNER_CARD_TRANSLATION_KEY, JSON.stringify(partnerCardTranslations || {}));\r\n    } catch (_) {}\r\n  }\r\n\r\n  function canTranslatePartnerText(value) {\r\n    const text = String(value == null ? '' : value).replace(/\\s+/g, ' ').trim();\r\n    if (!text || text.length < 3 || text.length > 700) return false;\r\n    if (/^https?:\\/\\//i.test(text)) return false;\r\n    if (/^[\\d\\s\u20AC$.,:;/%+\\-()]+$/.test(text)) return false;\r\n    return /[A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/.test(text);\r\n  }\r\n\r\n  function localizePartnerCustomText(value) {\r\n    const text = String(value == null ? '' : value).replace(/\\s+/g, ' ').trim();\r\n    if (!text) return text;\r\n    const editorialAliases = {\r\n      'il miglior negozio di fiori a roma ora su florame': {\r\n        it: 'Il tuo fiorista di fiducia, ora su Florame.',\r\n        en: 'Your trusted local florist, now on Florame.'\r\n      }\r\n    };\r\n    const language = getNativeLanguage() === 'en' ? 'en' : 'it';\r\n    const alias = editorialAliases[partnerTranslationKey(text)];\r\n    if (alias?.[language]) return alias[language];\r\n    if (language !== 'en') return text;\r\n    const cache = readPartnerCardTranslations();\r\n    return window.FlorameTranslationCache?.peek(text) || cache[partnerTranslationKey(text)] || text;\r\n  }\r\n\r\n  function collectPartnerCustomTexts(partner) {\r\n    if (!partner || typeof partner !== 'object') return [];\r\n    const config = partner.storefrontConfig || {};\r\n    const texts = [\r\n      config.welcomeMessage,\r\n      partner.description,\r\n      config.homeCardTitle\r\n    ];\r\n    if (Array.isArray(config.badges)) texts.push(...config.badges);\r\n    return texts\r\n      .map((value) => String(value == null ? '' : value).replace(/\\s+/g, ' ').trim())\r\n      .filter(canTranslatePartnerText);\r\n  }\r\n\r\n  async function translatePartnerCardTexts(texts) {\r\n    const cache = readPartnerCardTranslations();\r\n    const pending = [];\r\n    (Array.isArray(texts) ? texts : []).forEach((text) => {\r\n      const clean = String(text == null ? '' : text).replace(/\\s+/g, ' ').trim();\r\n      if (!canTranslatePartnerText(clean)) return;\r\n      const key = partnerTranslationKey(clean);\r\n      const shared = window.FlorameTranslationCache?.peek(clean);\r\n      if (shared) { cache[key] = shared; return; }\r\n      if (cache[key]) return;\r\n      if (!pending.some((item) => partnerTranslationKey(item) === key)) pending.push(clean);\r\n    });\r\n    if (!pending.length) return false;\r\n\r\n    let changed = false;\r\n    if (window.FlorameTranslationCache) {\r\n      try {\r\n        const shared = await window.FlorameTranslationCache.translate(pending);\r\n        Object.entries(shared).forEach(([text, value]) => { cache[partnerTranslationKey(text)] = value; changed = true; });\r\n      } catch (_) {}\r\n      return changed;\r\n    }\r\n    try {\r\n      for (let offset = 0; offset < pending.length; offset += 40) {\r\n        const batch = pending.slice(offset, offset + 40);\r\n        const response = await (window.FlorameReadCache?.fetch || window.fetch)('https://us-central1-flower-ai-2d7aa.cloudfunctions.net/translateTextBatch', {\r\n          method: 'POST',\r\n          headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },\r\n          body: JSON.stringify({\r\n            sourceLanguage: 'it',\r\n            targetLanguage: 'en',\r\n            context: 'partner-storefront-card',\r\n            texts: batch\r\n          })\r\n        });\r\n        if (!response.ok) throw new Error(`translate ${response.status}`);\r\n        const data = await response.json();\r\n        const map = data && data.map ? data.map : {};\r\n        const list = data && Array.isArray(data.translations) ? data.translations : [];\r\n        batch.forEach((text, index) => {\r\n          const translated = String(map[text] || list[index] || '').replace(/\\s+/g, ' ').trim();\r\n          if (!translated || partnerTranslationKey(translated) === partnerTranslationKey(text)) return;\r\n          cache[partnerTranslationKey(text)] = translated;\r\n          changed = true;\r\n        });\r\n      }\r\n      if (changed) savePartnerCardTranslations();\r\n      return changed;\r\n    } catch (err) {\r\n      if (changed) savePartnerCardTranslations();\r\n      try { console.warn('[partner] Card pre-translation skipped:', err && err.message ? err.message : err); } catch (_) {}\r\n      return changed;\r\n    }\r\n  }\r\n\r\n  function prewarmPartnerCardTranslations(partner) {\r\n    if (getNativeLanguage() !== 'en') return;\r\n    const texts = collectPartnerCustomTexts(partner);\r\n    if (!texts.length) return;\r\n    setTimeout(async () => {\r\n      const changed = await translatePartnerCardTexts(texts);\r\n      if (changed && getNativeLanguage() === 'en' && window.__floramePartner === partner) {\r\n        renderPartnerHomeStable(partner, { skipPrewarm: true, force: true });\r\n      }\r\n    }, 0);\r\n  }\r\n\r\n  function readStoredContext() {\r\n    try {\r\n      return JSON.parse(sessionStorage.getItem(STORAGE_KEY) || '{}') || {};\r\n    } catch (_) {\r\n      return {};\r\n    }\r\n  }\r\n\r\n  function saveStoredContext(ctx) {\r\n    try {\r\n      sessionStorage.setItem(STORAGE_KEY, JSON.stringify(ctx));\r\n    } catch (_) {}\r\n  }\r\n\r\n  function clearStoredContext() {\r\n    try {\r\n      sessionStorage.removeItem(STORAGE_KEY);\r\n    } catch (_) {}\r\n  }\r\n\r\n  function readCachedPartnerPayload(slug) {\r\n    const key = slugify(slug || '');\r\n    if (!key) return null;\r\n    try {\r\n      const cached = JSON.parse(sessionStorage.getItem(CACHE_PREFIX + key) || '{}');\r\n      if (cached.ts && (Date.now() - cached.ts) < CACHE_TTL_MS && cached.partner) return cached;\r\n    } catch (_) {}\r\n    return null;\r\n  }\r\n\r\n  function saveCachedPartnerPayload(slug, partner, storefrontDefaults, deliveryRescheduleSettings, deliverySpecialDateSettings, deliveryTimeSlotSettings) {\r\n    const key = slugify(slug || '');\r\n    if (!key || !partner) return;\r\n    try {\r\n      sessionStorage.setItem(CACHE_PREFIX + key, JSON.stringify({\r\n        ts: Date.now(),\r\n        partner,\r\n        storefrontDefaults: storefrontDefaults || null,\r\n        deliveryRescheduleSettings: deliveryRescheduleSettings || null,\r\n        deliverySpecialDateSettings: deliverySpecialDateSettings || null,\r\n        deliveryTimeSlotSettings: deliveryTimeSlotSettings || null\r\n      }));\r\n    } catch (_) {}\r\n  }\r\n\r\n  function clearCachedPartnerPayload(slug) {\r\n    const key = slugify(slug || '');\r\n    if (!key) return;\r\n    try {\r\n      sessionStorage.removeItem(CACHE_PREFIX + key);\r\n    } catch (_) {}\r\n  }\r\n\r\n  function applyPartnerPackagingAvailability(partner) {\r\n    const availability = partner?.decorationAvailability || partner?.decorationsAvailability || null;\r\n    if (!availability) return;\r\n    try { window.__FloramePackagingAvailability = availability; } catch (_) {}\r\n    try {\r\n      if (typeof window.updateFloramePackagingAvailability === 'function') {\r\n        window.updateFloramePackagingAvailability(availability);\r\n      }\r\n    } catch (_) {}\r\n  }\r\n\r\n  function getCurrentPathname() {\r\n    return String(window.location.pathname || '/');\r\n  }\r\n\r\n  function stripStorefrontLocale(pathname) {\r\n    return String(pathname || '/').replace(/^\\/(?:en|it)(?=\\/|$)/i, '') || '/';\r\n  }\r\n\r\n  function storefrontPathname(value, fallback) {\r\n    const raw = String(value || fallback || '/');\r\n    try {\r\n      if (/^https?:\\/\\//i.test(raw)) {\r\n        return stripStorefrontLocale(new URL(raw).pathname);\r\n      }\r\n    } catch (_) {}\r\n    return stripStorefrontLocale(raw).split('?')[0] || '/';\r\n  }\r\n\r\n  function getStorefrontLocalePrefix(pathname, options) {\r\n    const match = String(pathname || '').match(/^\\/(en|it)(?=\\/|$)/i);\r\n    if (match) return '/' + match[1].toLowerCase();\r\n    return getNativeLanguage(options) === 'en' ? '/en' : '';\r\n  }\r\n\r\n  function localizeStorefrontPath(pathname, options) {\r\n    const raw = String(pathname || '/');\r\n    try {\r\n      if (/^https?:\\/\\//i.test(raw)) {\r\n        const url = new URL(raw);\r\n        return url.pathname + url.search;\r\n      }\r\n    } catch (_) {}\r\n    const bare = stripStorefrontLocale(raw);\r\n    const sourcePathname = options && options.sourcePathname ? options.sourcePathname : getCurrentPathname();\r\n    const prefix = getStorefrontLocalePrefix(sourcePathname, options);\r\n    if (!prefix) return bare;\r\n    if (bare === '/') return prefix;\r\n    return prefix + (bare.startsWith('/') ? bare : '/' + bare);\r\n  }\r\n\r\n  function isProductPath(pathname) {\r\n    return /^\\/products\\//i.test(stripStorefrontLocale(pathname));\r\n  }\r\n\r\n  function localizeProductPath(pathname, options) {\r\n    const bare = stripStorefrontLocale(pathname);\r\n    if (!/^\\/products\\//i.test(bare)) return String(pathname || '/');\r\n    return localizeStorefrontPath(bare, options);\r\n  }\r\n\r\n  function getSingleSegment(pathname) {\r\n    const segments = stripStorefrontLocale(pathname).split('/').filter(Boolean);\r\n    if (segments.length !== 1) return '';\r\n    const slug = slugify(segments[0]);\r\n    if (!slug || RESERVED_SEGMENTS.has(slug)) return '';\r\n    if (segments[0].includes('.')) return '';\r\n    return slug;\r\n  }\r\n\r\n  function getPartnerPageSlug(pathname) {\r\n    if (isFlorameGenericRoute(pathname)) return '';\r\n    const segments = stripStorefrontLocale(pathname).split('/').filter(Boolean);\r\n    if (segments.length !== 2 || segments[0] !== 'pages') return '';\r\n    const slug = slugify(segments[1]);\r\n    const currentHandle = slugify(CONFIG.currentPageHandle || '');\r\n    const currentTemplate = String(CONFIG.currentPageTemplateSuffix || '').trim();\r\n    if (!slug || !currentHandle || currentHandle !== slug) return '';\r\n    if (currentTemplate !== PARTNER_HOME_TEMPLATE) return '';\r\n    return slug;\r\n  }\r\n\r\n  function buildPartnerPageHomePath(slug) {\r\n    const clean = slugify(slug);\r\n    return clean ? '/pages/' + encodeURIComponent(clean) : (CONFIG.homePath || '/');\r\n  }\r\n\r\n  function buildRelativeUrl(pathname, params) {\r\n    const url = new URL(pathname, window.location.origin);\r\n    Object.entries(params || {}).forEach(([key, value]) => {\r\n      if (value == null || value === '') return;\r\n      url.searchParams.set(key, value);\r\n    });\r\n    return url.pathname + url.search;\r\n  }\r\n\r\n  function isFlorameGenericRoute(pathname) {\r\n    const path = stripStorefrontLocale(pathname);\r\n    const homePath = storefrontPathname(CONFIG.homePath, '/');\r\n    const appPath = storefrontPathname(CONFIG.appPath, '/pages/florame-app');\r\n    return path === '/'\r\n      || path === homePath\r\n      || path === appPath\r\n      || isProductPath(path);\r\n  }\r\n\r\n  function shouldUseStoredContext(pathname) {\r\n    const path = stripStorefrontLocale(pathname);\r\n    const accountPath = storefrontPathname(CONFIG.accountPath, '/account');\r\n    const loginPath = storefrontPathname(CONFIG.loginPath, '/account/login');\r\n    const homePath = storefrontPathname(CONFIG.homePath, '/');\r\n    const appPath = storefrontPathname(CONFIG.appPath, '/pages/florame-app');\r\n    return path === '/'\r\n      || path === homePath\r\n      || path === appPath\r\n      || isProductPath(path)\r\n      || path.startsWith('/cart')\r\n      || path === accountPath\r\n      || path.startsWith(accountPath + '/')\r\n      || path === loginPath;\r\n  }\r\n\r\n  function getContext() {\r\n    const pathname = getCurrentPathname();\r\n    if (/^\\/(?:en\\/|it\\/)?cart\\/?$/.test(pathname)) {\r\n      const host = document.querySelector('[data-florame-cart-partner]');\r\n      const resolveSelection = window.FlorameDeliveryIntent?.getContextPartnerSlug;\r\n      // Use the identity-only resolver: a full snapshot reads selected offers,\r\n      // whose validation calls getContext again.\r\n      const slug = slugify(resolveSelection ? resolveSelection() : Number(host?.dataset?.itemCount || 0) > 0 ? host.dataset.partnerSlug || '' : '');\r\n      // A cart link or a previously visited shop is not order ownership.\r\n      return { slug, active: !!slug, routeMode: 'query', pretty: false, sourcePath: window.location.pathname + window.location.search };\r\n    }\r\n    if (String(CONFIG.pageType || '').trim() === '404') {\r\n      clearStoredContext();\r\n      return {\r\n        slug: '',\r\n        active: false,\r\n        routeMode: '',\r\n        pretty: false,\r\n        sourcePath: window.location.pathname + window.location.search,\r\n      };\r\n    }\r\n    const params = new URLSearchParams(window.location.search || '');\r\n    const prettySlug = getSingleSegment(pathname);\r\n    const pageSlug = getPartnerPageSlug(pathname);\r\n    const querySlug = slugify(params.get('partner') || params.get('partnerSlug') || '');\r\n    const stored = readStoredContext();\r\n    const storedRouteMode = ['pretty', 'page', 'query'].includes(stored.routeMode) ? stored.routeMode : 'query';\r\n    const explicitSlug = querySlug || prettySlug || pageSlug;\r\n    if (!explicitSlug && isFlorameGenericRoute(pathname)) {\r\n      clearStoredContext();\r\n      return {\r\n        slug: '',\r\n        active: false,\r\n        routeMode: '',\r\n        pretty: false,\r\n        sourcePath: window.location.pathname + window.location.search,\r\n      };\r\n    }\r\n    const slug = explicitSlug || (shouldUseStoredContext(pathname) ? slugify(stored.slug || '') : '');\r\n    const storedSlug = slugify(stored.slug || '');\r\n    const shouldRetainPartnerRoute = !!(\r\n      querySlug\r\n      && storedSlug === querySlug\r\n      && shouldUseStoredContext(pathname)\r\n      && (storedRouteMode === 'pretty' || storedRouteMode === 'page')\r\n    );\r\n    const routeMode = pageSlug\r\n      ? 'page'\r\n      : (prettySlug\r\n        ? 'pretty'\r\n        : (querySlug ? (shouldRetainPartnerRoute ? storedRouteMode : 'query') : storedRouteMode));\r\n    const context = {\r\n      slug,\r\n      active: !!slug,\r\n      routeMode,\r\n      pretty: routeMode === 'pretty',\r\n      sourcePath: window.location.pathname + window.location.search,\r\n    };\r\n    // getContext also runs for every rewritten link. Persist actual changes,\r\n    // rather than synchronously writing the same session state for every anchor.\r\n    const contextKeys = Object.keys(context);\r\n    const contextChanged = contextKeys.some((key) => stored[key] !== context[key])\r\n      || Object.keys(stored).length !== contextKeys.length;\r\n    if (context.active && contextChanged) saveStoredContext(context);\r\n    return context;\r\n  }\r\n\r\n  function homeUrl(explicitSlug, context) {\r\n    const ctx = context || getContext();\r\n    const slug = slugify(explicitSlug || ctx.slug || '');\r\n    if (!slug) return localizeStorefrontPath(CONFIG.homePath || '/');\r\n    if (slug === 'manual-florist-global-v1') {\r\n      if (window.FlorameLocalFlorist) return window.FlorameLocalFlorist.url();\r\n      const query = new URLSearchParams(window.location.search);\r\n      return buildRelativeUrl(localizeStorefrontPath(CONFIG.appPath || '/pages/florame-app'), {mode:'explore', partner:slug, city:query.get('city') || '', cap:query.get('cap') || '', sort:'newest'});\r\n    }\r\n    const canonicalPath = localizeStorefrontPath(buildPartnerPageHomePath(slug));\r\n    return buildRelativeUrl(canonicalPath, { view: PARTNER_HOME_TEMPLATE });\r\n  }\r\n\r\n  function appUrl(mode, extraParams) {\r\n    const ctx = getContext();\r\n    const slug = slugify(ctx.slug || '');\r\n    const appPath = localizeStorefrontPath(CONFIG.appPath || '/pages/florame-app');\r\n    const params = Object.assign({}, extraParams || {}, mode ? { mode } : {});\r\n    if ((mode === 'explore' || mode === 'community') && ['liked', 'mine', 'favorites'].includes(params.f || params.view)) {\r\n      return buildRelativeUrl(localizeStorefrontPath(CONFIG.homePath || '/'), {\r\n        f: (params.f || params.view) === 'mine' ? 'mine' : 'liked',\r\n        ...(slug ? { partner: slug } : {})\r\n      });\r\n    }\r\n    if ((mode === 'explore' || mode === 'community') && slug !== 'manual-florist-global-v1' && !['liked', 'mine'].includes(params.f || params.view)) {\r\n      return localizeStorefrontPath(CONFIG.homePath || '/');\r\n    }\r\n    if (slug === 'manual-florist-global-v1') {\r\n      const query = new URLSearchParams(window.location.search);\r\n      for (const key of ['city', 'cap']) if (!params[key] && query.get(key)) params[key] = query.get(key);\r\n    }\r\n    if (mode === 'explore' && !params.sort) params.sort = 'newest';\r\n    if (!slug) return buildRelativeUrl(appPath, params);\r\n    return buildRelativeUrl(appPath, Object.assign({}, params, { partner: slug }));\r\n  }\r\n\r\n  function productUrl(handle, options) {\r\n    const slug = slugify(getContext().slug || '');\r\n    const path = localizeProductPath('/products/' + encodeURIComponent(String(handle || '').trim()), options);\r\n    const area = slug === 'manual-florist-global-v1' ? window.FlorameLocalFlorist?.identity() : null;\r\n    const href = slug ? buildRelativeUrl(path, { partner: slug, ...(area ? {city:area.city,cap:area.cap} : {}) }) : path;\r\n    if (options && options.absolute) return new URL(href, window.location.origin).toString();\r\n    return href;\r\n  }\r\n\r\n  function accountUrl() {\r\n    const slug = slugify(getContext().slug || '');\r\n    const accountPath = localizeStorefrontPath(CONFIG.accountPath || '/account');\r\n    return slug ? buildRelativeUrl(accountPath, { partner: slug }) : accountPath;\r\n  }\r\n\r\n  function loginUrl() {\r\n    const currentPath = window.location.pathname + window.location.search + window.location.hash;\r\n    const loginPath = storefrontPathname(CONFIG.loginPath, '/account/login');\r\n    const returnUrl = stripStorefrontLocale(window.location.pathname) === loginPath ? homeUrl() : currentPath;\r\n    // Shopify's authentication endpoints are not locale-prefixed (/en/... is 404).\r\n    return buildRelativeUrl('/customer_authentication/login', { return_to: returnUrl, locale: getNativeLanguage() });\r\n  }\r\n\r\n  function rewriteHomeAndAppUrl(url, context) {\r\n    const rawPathname = url.pathname;\r\n    const pathname = stripStorefrontLocale(rawPathname);\r\n    const slug = slugify((context || getContext()).slug || '');\r\n    const params = new URLSearchParams(url.search);\r\n    const homePath = storefrontPathname(CONFIG.homePath, '/');\r\n    const appPath = storefrontPathname(CONFIG.appPath, '/pages/florame-app');\r\n    const accountPath = storefrontPathname(CONFIG.accountPath, '/account');\r\n    const loginPath = storefrontPathname(CONFIG.loginPath, '/account/login');\r\n    const collection = params.get('f') || params.get('view') || params.get('filter');\r\n    if (['mine', 'liked', 'favorites'].includes(collection) && !params.has('bouquet') && (pathname === '/' || pathname === homePath || (pathname === appPath && ['explore', 'community'].includes(params.get('mode'))))) {\r\n      ['mode', 'view', 'filter', 'type', 'sort', 't', 'period', 'occasion'].forEach(key => params.delete(key));\r\n      params.set('f', collection === 'mine' ? 'mine' : 'liked');\r\n      if (slug && !params.has('partner') && !params.has('partnerSlug')) params.set('partner', slug);\r\n      return localizeStorefrontPath(homePath, { sourcePathname: rawPathname }) + '?' + params.toString();\r\n    }\r\n    if (pathname === '/' || pathname === homePath) {\r\n      const base = slug ? homeUrl(slug, context) : localizeStorefrontPath(homePath, { sourcePathname: rawPathname });\r\n      const target = new URL(base, window.location.origin);\r\n      params.forEach((value, key) => {\r\n        if (key !== 'partner' && key !== 'partnerSlug') target.searchParams.set(key, value);\r\n      });\r\n      target.hash = url.hash || '';\r\n      return target.pathname + target.search + target.hash;\r\n    }\r\n    if (pathname === appPath) {\r\n      if (slug) params.set('partner', slug);\r\n      const query = params.toString();\r\n      return localizeStorefrontPath(appPath, { sourcePathname: rawPathname }) + (query ? '?' + query : '');\r\n    }\r\n    if (pathname === accountPath) {\r\n      return slug ? accountUrl() : localizeStorefrontPath(accountPath, { sourcePathname: rawPathname });\r\n    }\r\n    if (pathname === loginPath) {\r\n      // The account centre already supplies the return destination and partner.\r\n      // Keep those current parameters so both URL observers reach one value.\r\n      if (pathname === '/customer_authentication/login') {\r\n        params.set('locale', getNativeLanguage());\r\n        params.delete('lang');\r\n        params.delete('ui_locales');\r\n        if (!params.has('return_to')) params.set('return_to', window.location.pathname + window.location.search + window.location.hash);\r\n        return pathname + '?' + params.toString() + url.hash;\r\n      }\r\n      return loginUrl();\r\n    }\r\n    if (isProductPath(pathname)) {\r\n      const productPath = localizeProductPath(pathname, { sourcePathname: rawPathname });\r\n      if (slug === 'manual-florist-global-v1') {\r\n        const area = window.FlorameLocalFlorist?.identity() || {};\r\n        return buildRelativeUrl(productPath, {...Object.fromEntries(params),partner:slug,city:params.get('city') || area.city,cap:params.get('cap') || area.cap});\r\n      }\r\n      return slug ? buildRelativeUrl(productPath, { partner: slug }) : productPath + url.search;\r\n    }\r\n    if (pathname.startsWith('/cart')) {\r\n      const cartPath = localizeStorefrontPath(pathname, { sourcePathname: rawPathname });\r\n      return slug ? buildRelativeUrl(cartPath, { partner: slug }) : cartPath + url.search;\r\n    }\r\n    return '';\r\n  }\r\n\r\n  function rewriteAnchor(anchor, context) {\r\n    if (!anchor || !anchor.getAttribute) return;\r\n    if (anchor.hasAttribute('data-florame-partner-reset')) return;\r\n    const href = anchor.getAttribute('href');\r\n    if (!href || href.startsWith('#') || href.startsWith('javascript:') || href.startsWith('mailto:') || href.startsWith('tel:')) return;\r\n    let url;\r\n    try {\r\n      url = new URL(href, window.location.origin);\r\n    } catch (_) {\r\n      return;\r\n    }\r\n    const normalizedHost = String(url.hostname || '').replace(/^www\\./, '');\r\n    const sameStore = url.origin === window.location.origin || normalizedHost === ROOT_HOST;\r\n    if (!sameStore) return;\r\n    const nextHref = rewriteHomeAndAppUrl(url, context);\r\n    if (nextHref && nextHref !== href) anchor.setAttribute('href', nextHref);\r\n  }\r\n\r\n  function rewriteKnownLinks(root, context) {\r\n    // Share state only within this synchronous pass; later route/partner changes\r\n    // always resolve again, including their delivery area and availability.\r\n    const ctx = context || getContext();\r\n    (root || document).querySelectorAll('a[href]').forEach((anchor) => rewriteAnchor(anchor, ctx));\r\n  }\r\n\r\n  function runRewritePasses() {\r\n    [0, 80, 250, 700, 1600, 3200].forEach((delay) => {\r\n      setTimeout(() => {\r\n        rewriteKnownLinks(document);\r\n      }, delay);\r\n    });\r\n  }\r\n\r\n  function observeLinks() {\r\n    const observer = new MutationObserver((mutations) => {\r\n      let context;\r\n      const currentContext = () => context || (context = getContext());\r\n      mutations.forEach((mutation) => {\r\n        if (mutation.type === 'attributes') {\r\n          const target = mutation.target;\r\n          if (target && target.matches && target.matches('a[href]')) rewriteAnchor(target, currentContext());\r\n          return;\r\n        }\r\n        mutation.addedNodes.forEach((node) => {\r\n          if (node.nodeType !== 1) return;\r\n          if (node.matches && node.matches('a[href]')) rewriteAnchor(node, currentContext());\r\n          if (node.querySelectorAll) rewriteKnownLinks(node, currentContext());\r\n        });\r\n      });\r\n    });\r\n    observer.observe(document.documentElement, {\r\n      childList: true,\r\n      subtree: true,\r\n      attributes: true,\r\n      attributeFilter: ['href']\r\n    });\r\n  }\r\n\r\n  function maybeRewriteCurrentUrl() {\r\n    const ctx = getContext();\r\n    if (!ctx.active || ctx.pretty) return;\r\n    const rawPath = getCurrentPathname();\r\n    const path = stripStorefrontLocale(rawPath);\r\n    const homePath = storefrontPathname(CONFIG.homePath, '/');\r\n    const appPath = storefrontPathname(CONFIG.appPath, '/pages/florame-app');\r\n    const eligible = path === homePath\r\n      || path === '/'\r\n      || path === appPath\r\n      || isProductPath(path)\r\n      || path.startsWith('/account')\r\n      || path.startsWith('/cart');\r\n    if (!eligible) return;\r\n    const params = new URLSearchParams(window.location.search || '');\r\n    if (params.get('partner') || params.get('partnerSlug')) return;\r\n    params.set('partner', ctx.slug);\r\n    window.history.replaceState({}, '', rawPath + '?' + params.toString());\r\n  }\r\n\r\n  function getInitials(value, fallback) {\r\n    const words = String(value || '')\r\n      .trim()\r\n      .split(/\\s+/)\r\n      .filter(Boolean)\r\n      .slice(0, 2);\r\n    if (!words.length) return fallback || '';\r\n    return words.map((word) => word.charAt(0).toUpperCase()).join('');\r\n  }\r\n\r\n  function buildLogoMarkup(className, src, alt, fallback) {\r\n    if (src) {\r\n      return `<img class=\"${className}\" src=\"${escapeHtml(src)}\" alt=\"${escapeHtml(alt)}\" translate=\"no\" data-native-i18n-skip>`;\r\n    }\r\n    const extraClass = className.indexOf('florame-partner-florame-logo') >= 0\r\n      ? ' florame-partner-logo-fallback-florame'\r\n      : '';\r\n    return `<div class=\"${className} florame-partner-logo-fallback${extraClass}\" aria-hidden=\"true\"><span>${escapeHtml(fallback)}</span></div>`;\r\n  }\r\n\r\n  function partnerSurfaceIcon(name, className) {\r\n    // Lucide Icons (ISC): https://github.com/lucide-icons/lucide\r\n    if (name === 'verified') {\r\n      return `<svg class=\"${escapeHtml(className || 'florame-partner-inline-icon')} florame-partner-verified-rosette\" viewBox=\"0 0 48 48\" aria-hidden=\"true\"><polygon fill=\"#42a5f5\" points=\"29.62,3 33.053,8.308 39.367,8.624 39.686,14.937 44.997,18.367 42.116,23.995 45,29.62 39.692,33.053 39.376,39.367 33.063,39.686 29.633,44.997 24.005,42.116 18.38,45 14.947,39.692 8.633,39.376 8.314,33.063 3.003,29.633 5.884,24.005 3,18.38 8.308,14.947 8.624,8.633 14.937,8.314 18.367,3.003 23.995,5.884\"></polygon><polygon fill=\"#fff\" points=\"21.396,31.255 14.899,24.76 17.021,22.639 21.428,27.046 30.996,17.772 33.084,19.926\"></polygon></svg>`;\r\n    }\r\n    const paths = {\r\n      location: '<path d=\"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0\"></path><circle cx=\"12\" cy=\"10\" r=\"3\"></circle>',\r\n      phone: '<path d=\"M22 16.9v3a2 2 0 0 1-2.2 2 19.8 19.8 0 0 1-8.6-3.1 19.4 19.4 0 0 1-6-6A19.8 19.8 0 0 1 2.1 4.2 2 2 0 0 1 4.1 2h3a2 2 0 0 1 2 1.7c.1 1 .4 2 .7 2.9a2 2 0 0 1-.4 2.1L8.1 10a16 16 0 0 0 6 6l1.3-1.3a2 2 0 0 1 2.1-.4c1 .4 1.9.6 2.9.7a2 2 0 0 1 1.6 1.9Z\"></path>',\r\n      message: '<path d=\"M21 15a4 4 0 0 1-4 4H8l-5 3V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4Z\"></path><path d=\"M8 9h8M8 13h5\"></path>',\r\n      clock: '<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M12 6v6h4\"></path>',\r\n      delivery: '<path d=\"M14 18V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v11a1 1 0 0 0 1 1h2\"></path><path d=\"M15 18H9\"></path><path d=\"M19 18h2a1 1 0 0 0 1-1v-3.65a1 1 0 0 0-.22-.624l-3.48-4.35A1 1 0 0 0 17.52 8H14\"></path><circle cx=\"17\" cy=\"18\" r=\"2\"></circle><circle cx=\"7\" cy=\"18\" r=\"2\"></circle>',\r\n      storefront: '<path d=\"M15 21v-5a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v5\"></path><path d=\"M17.774 10.31a1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.451 0 1.12 1.12 0 0 0-1.548 0 2.5 2.5 0 0 1-3.452 0 1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.77-3.248l2.889-4.184A2 2 0 0 1 7 2h10a2 2 0 0 1 1.653.873l2.895 4.192a2.5 2.5 0 0 1-3.774 3.244\"></path><path d=\"M4 10.95V19a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8.05\"></path>',\r\n      globe: '<circle cx=\"12\" cy=\"12\" r=\"9\"></circle><path d=\"M3 12h18M12 3a14 14 0 0 1 0 18M12 3a14 14 0 0 0 0 18\"></path>',\r\n      reviews: '<path d=\"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719\"></path>',\r\n      calendar: '<path d=\"M6 3v3M18 3v3M4 8h16\"></path><rect x=\"4\" y=\"5\" width=\"16\" height=\"16\" rx=\"3\"></rect><path d=\"M8 12h3M13 12h3M8 16h3\"></path>',\r\n      leaf: '<path d=\"M11 20A7 7 0 0 1 9.8 6.1C15.5 5 19 2 19 2c0 8-3.5 12.5-8 13\"></path><path d=\"M2 21c0-3 1.85-5.36 5.08-6.94C9.2 13 12 12 16 12\"></path>',\r\n      lightning: '<path d=\"m13 2-9 12h8l-1 8 9-12h-8z\"></path>',\r\n      star: '<path d=\"m12 2.8 2.7 5.48 6.05.88-4.38 4.27 1.04 6.03L12 16.62l-5.41 2.84 1.04-6.03-4.38-4.27 6.05-.88z\"></path>',\r\n      info: '<circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M12 16v-4M12 8h.01\"></path>',\r\n      sparkles: '<path d=\"m12 3-1.25 3.75L7 8l3.75 1.25L12 13l1.25-3.75L17 8l-3.75-1.25L12 3Z\"></path><path d=\"m5 14-.75 2.25L2 17l2.25.75L5 20l.75-2.25L8 17l-2.25-.75L5 14Z\"></path><path d=\"m19 13-.65 1.85-1.85.65 1.85.65L19 18l.65-1.85 1.85-.65-1.85-.65L19 13Z\"></path>',\r\n      search: '<circle cx=\"11\" cy=\"11\" r=\"7\"></circle><path d=\"m20 20-4-4\"></path>',\r\n      heart: '<path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78L12 21.23l8.84-8.84a5.5 5.5 0 0 0 0-7.78Z\"></path>',\r\n      discount: '<circle cx=\"12\" cy=\"12\" r=\"9\"></circle><path d=\"m8.5 15.5 7-7\"></path><circle cx=\"9\" cy=\"9\" r=\"1\"></circle><circle cx=\"15\" cy=\"15\" r=\"1\"></circle>',\r\n      shield: '<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67 0C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1Z\"></path><path d=\"m9 12 2 2 4-4\"></path>',\r\n      more: '<circle cx=\"5\" cy=\"12\" r=\"1\"></circle><circle cx=\"12\" cy=\"12\" r=\"1\"></circle><circle cx=\"19\" cy=\"12\" r=\"1\"></circle>',\r\n      chevron: '<path d=\"m8 10 4 4 4-4\"></path>',\r\n      arrow: '<path d=\"M5 12h14\"></path><path d=\"m12 5 7 7-7 7\"></path>'\r\n    };\r\n    return `<svg class=\"${escapeHtml(className || 'florame-partner-inline-icon')}\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">${paths[name] || paths.storefront}</svg>`;\r\n  }\r\n\r\n  function formatPartnerLocality(address, partner) {\r\n    const source = address && typeof address === 'object' ? address : {};\r\n    const fallback = partner && typeof partner === 'object' ? partner : {};\r\n    const city = String(source.city || source.locality || fallback.city || fallback.locality || '').trim();\r\n    const province = String(source.province || source.state || fallback.province || fallback.state || '').trim();\r\n    const region = String(source.region || fallback.region || '').trim();\r\n    const parts = [city, province && province.toLowerCase() !== city.toLowerCase() ? province : ''];\r\n    if (!parts.filter(Boolean).length && region) parts.push(region);\r\n    return parts.filter(Boolean).join(' \u00B7 ');\r\n  }\r\n\r\n  const THEME_VAR_NAMES = [\r\n    '--florame-partner-headline',\r\n    '--florame-partner-note-color',\r\n    '--florame-partner-brand-from',\r\n    '--florame-partner-brand-to',\r\n    '--florame-partner-brand-fg',\r\n    '--florame-partner-accent',\r\n    '--florame-partner-accent-soft',\r\n    '--florame-partner-accent-border',\r\n    '--florame-partner-divider',\r\n    '--florame-partner-badge-border',\r\n    '--florame-partner-badge-bg',\r\n    '--florame-partner-badge-color',\r\n    '--florame-partner-surface',\r\n    '--florame-partner-surface-soft',\r\n    '--florame-partner-surface-border',\r\n    '--florame-partner-panel-bg',\r\n    '--florame-partner-cta-bg',\r\n    '--florame-partner-cta-fg',\r\n    '--florame-partner-cta-secondary-bg',\r\n    '--florame-partner-action-arrow',\r\n    '--florame-partner-hours-bg',\r\n    '--florame-partner-hours-soft',\r\n    '--florame-partner-hours-border',\r\n    '--florame-partner-hours-copy',\r\n    '--florame-partner-hours-copy-muted',\r\n    '--florame-partner-dark-surface',\r\n    '--florame-partner-dark-border',\r\n    '--florame-partner-copy',\r\n    '--florame-partner-copy-strong',\r\n    '--florame-partner-logo-border'\r\n  ];\r\n\r\n  function clearThemeVars(el) {\r\n    if (!el || !el.style) return;\r\n    THEME_VAR_NAMES.forEach((name) => el.style.removeProperty(name));\r\n  }\r\n\r\n  function resolveThemeDefaults(defaultsOverride) {\r\n    const src = (defaultsOverride && typeof defaultsOverride === 'object') ? defaultsOverride : {};\r\n    const surfaceColor = normalizeHexColor(src.surfaceColor || '') || THEME_SYSTEM_DEFAULTS.surfaceColor;\r\n    return {\r\n      headlineColor: normalizeHexColor(src.headlineColor || '') || THEME_SYSTEM_DEFAULTS.headlineColor,\r\n      brandGradientFrom: normalizeHexColor(src.brandGradientFrom || '') || THEME_SYSTEM_DEFAULTS.brandGradientFrom,\r\n      brandGradientTo: normalizeHexColor(src.brandGradientTo || '') || THEME_SYSTEM_DEFAULTS.brandGradientTo,\r\n      noteColor: normalizeHexColor(src.noteColor || '') || THEME_SYSTEM_DEFAULTS.noteColor,\r\n      accentColor: normalizeHexColor(src.accentColor || '') || THEME_SYSTEM_DEFAULTS.accentColor,\r\n      websiteButtonColor: normalizeHexColor(src.websiteButtonColor || '') || '',\r\n      surfaceColor,\r\n      surfaceBorderColor: normalizeHexColor(src.surfaceBorderColor || '') || THEME_SYSTEM_DEFAULTS.surfaceBorderColor,\r\n      cardTextColor: normalizeHexColor(src.cardTextColor || '') || THEME_SYSTEM_DEFAULTS.cardTextColor,\r\n      hoursSurfaceColor: normalizeHexColor(src.hoursSurfaceColor || '') || '',\r\n      hoursSurfaceBorderColor: normalizeHexColor(src.hoursSurfaceBorderColor || '') || '',\r\n      hoursTextColor: normalizeHexColor(src.hoursTextColor || '') || '',\r\n      badgeBackgroundColor: normalizeHexColor(src.badgeBackgroundColor || '') || THEME_SYSTEM_DEFAULTS.badgeBackgroundColor,\r\n      badgeTextColor: normalizeHexColor(src.badgeTextColor || '') || THEME_SYSTEM_DEFAULTS.badgeTextColor\r\n    };\r\n  }\r\n\r\n  function normalizeTimeSlot(slot) {\r\n    const start = String(slot?.start || '').trim();\r\n    const end = String(slot?.end || '').trim();\r\n    if (!/^\\d{2}:\\d{2}$/.test(start) || !/^\\d{2}:\\d{2}$/.test(end)) return null;\r\n    return { start, end };\r\n  }\r\n\r\n  function isAllDaySlot(slot) {\r\n    return !!slot && slot.start === '00:00' && (slot.end === '23:59' || slot.end === '24:00');\r\n  }\r\n\r\n  function formatDailyHours(slots) {\r\n    const normalized = (Array.isArray(slots) ? slots : [])\r\n      .map(normalizeTimeSlot)\r\n      .filter(Boolean);\r\n    if (!normalized.length) return { value: partnerText('Chiuso', 'Closed'), hasHours: false };\r\n    if (normalized.length === 1 && isAllDaySlot(normalized[0])) {\r\n      return { value: '24/7', hasHours: true, isAlwaysOpen: true };\r\n    }\r\n    return {\r\n      value: normalized.map((slot) => `${slot.start} - ${slot.end}`).join(' \u00B7 '),\r\n      hasHours: true,\r\n      isAlwaysOpen: false\r\n    };\r\n  }\r\n\r\n  function romeCalendarDay(now = new Date()) {\r\n    try {\r\n      const parts = new Intl.DateTimeFormat('en-CA', {\r\n        timeZone: 'Europe/Rome',\r\n        weekday: 'short',\r\n        year: 'numeric',\r\n        month: '2-digit',\r\n        day: '2-digit'\r\n      }).formatToParts(now).reduce((result, part) => {\r\n        if (part.type !== 'literal') result[part.type] = part.value;\r\n        return result;\r\n      }, {});\r\n      return {\r\n        dateKey: `${parts.year}-${parts.month}-${parts.day}`,\r\n        dayKey: String(parts.weekday || '').slice(0, 3).toLowerCase()\r\n      };\r\n    } catch (_) {\r\n      return { dateKey: '', dayKey: '' };\r\n    }\r\n  }\r\n\r\n  function openingHoursDateOverride(openingHours = {}, dateKey = '') {\r\n    const resolveRows = (value) => {\r\n      if (Array.isArray(value)) return { matched: true, rows: value };\r\n      if (!value || typeof value !== 'object') return null;\r\n      if (value.active === false) return null;\r\n      if (value.closed === true || value.isClosed === true || value.open === false) return { matched: true, rows: [] };\r\n      const rows = value.ranges || value.slots || value.hours || value.openingHours;\r\n      return Array.isArray(rows) ? { matched: true, rows } : null;\r\n    };\r\n    const collections = [\r\n      openingHours.dateOverrides,\r\n      openingHours.exceptions,\r\n      openingHours.specialHours,\r\n      openingHours.dates\r\n    ];\r\n    for (const collection of collections) {\r\n      if (!collection) continue;\r\n      if (!Array.isArray(collection) && typeof collection === 'object') {\r\n        const direct = resolveRows(collection[dateKey]);\r\n        if (direct) return direct;\r\n        continue;\r\n      }\r\n      if (!Array.isArray(collection)) continue;\r\n      const entry = collection.find((candidate) => {\r\n        if (!candidate || typeof candidate !== 'object' || candidate.active === false) return false;\r\n        const start = String(candidate.date || candidate.startDate || '').slice(0, 10);\r\n        const end = String(candidate.date || candidate.endDate || start).slice(0, 10);\r\n        return !!start && start <= dateKey && dateKey <= (end || start);\r\n      });\r\n      const resolved = resolveRows(entry);\r\n      if (resolved) return resolved;\r\n    }\r\n    return { matched: false, rows: [] };\r\n  }\r\n\r\n  function formatTodayHours(openingHours = {}, now = new Date()) {\r\n    const { dateKey, dayKey } = romeCalendarDay(now);\r\n    const hasSchedule = openingHours && typeof openingHours === 'object' && (\r\n      ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'].some((key) => Array.isArray(openingHours[key]))\r\n      || ['dateOverrides', 'exceptions', 'specialHours', 'dates'].some((key) => !!openingHours[key])\r\n    );\r\n    if (!dateKey || !dayKey || !hasSchedule) {\r\n      return { label: partnerText('Oggi', 'Today'), value: partnerText('Orari in aggiornamento', 'Hours updating'), hasHours: false };\r\n    }\r\n    const override = openingHoursDateOverride(openingHours, dateKey);\r\n    const rows = override.matched ? override.rows : (Array.isArray(openingHours[dayKey]) ? openingHours[dayKey] : []);\r\n    const formatted = formatDailyHours(rows);\r\n    if (!formatted.hasHours) {\r\n      return { label: partnerText('Oggi', 'Today'), value: partnerText('Chiuso oggi', 'Closed today'), hasHours: false };\r\n    }\r\n    return {\r\n      label: partnerText('Oggi', 'Today'),\r\n      value: formatted.isAlwaysOpen\r\n        ? partnerText('Aperto 24 ore', 'Open 24 hours')\r\n        : formatted.value.replace(/\\s+-\\s+/g, '\u2013'),\r\n      hasHours: true,\r\n      isAlwaysOpen: formatted.isAlwaysOpen === true\r\n    };\r\n  }\r\n\r\n  function formatDayRange(startIndex, endIndex) {\r\n    const dow = getNativeLanguage() === 'en' ? DOW_EN : DOW_IT;\r\n    if (startIndex === 0 && endIndex === 6) return partnerText('Tutti i giorni', 'Every day');\r\n    if (startIndex === endIndex) return dow[startIndex];\r\n    return `${dow[startIndex]} - ${dow[endIndex]}`;\r\n  }\r\n\r\n  function formatHours(openingHours) {\r\n    if (!openingHours || typeof openingHours !== 'object') {\r\n      return [{ label: partnerText('Orari', 'Hours'), value: partnerText('In aggiornamento', 'Updating') }];\r\n    }\r\n    const keys = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'];\r\n    const daily = keys.map((key, index) => {\r\n      const formatted = formatDailyHours(openingHours[key]);\r\n      return {\r\n        index,\r\n        value: formatted.value,\r\n        hasHours: formatted.hasHours,\r\n        isAlwaysOpen: formatted.isAlwaysOpen === true\r\n      };\r\n    });\r\n\r\n    if (!daily.some((day) => day.hasHours)) {\r\n      return [{ label: partnerText('Orari', 'Hours'), value: partnerText('In aggiornamento', 'Updating') }];\r\n    }\r\n\r\n    if (daily.every((day) => day.isAlwaysOpen)) {\r\n      return [{ label: partnerText('Tutti i giorni', 'Every day'), value: '24/7' }];\r\n    }\r\n\r\n    const groups = [];\r\n    daily.forEach((day) => {\r\n      const last = groups[groups.length - 1];\r\n      if (!last || last.value !== day.value) {\r\n        groups.push({ startIndex: day.index, endIndex: day.index, value: day.value });\r\n      } else {\r\n        last.endIndex = day.index;\r\n      }\r\n    });\r\n\r\n    return groups.map((group) => ({\r\n      label: formatDayRange(group.startIndex, group.endIndex),\r\n      value: group.value\r\n    }));\r\n  }\r\n\r\n  function normalizeDeliverySlotRow(slot, index) {\r\n    if (!slot || typeof slot !== 'object' || slot.active === false) return null;\r\n    const start = String(slot.start || '').trim();\r\n    const end = String(slot.end || '').trim();\r\n    if (!/^\\d{2}:\\d{2}$/.test(start) || !/^\\d{2}:\\d{2}$/.test(end)) return null;\r\n    const label = String(slot.label || slot.name || '').trim()\r\n      || partnerText(`Fascia ${index + 1}`, `Slot ${index + 1}`);\r\n    const value = isAllDaySlot({ start, end })\r\n      ? partnerText('Tutto il giorno', 'All day')\r\n      : `${start} - ${end}`;\r\n    return {\r\n      label,\r\n      value,\r\n      sortOrder: Number(slot.sortOrder ?? slot.order ?? index + 1) || index + 1\r\n    };\r\n  }\r\n\r\n  function formatDeliverySlots(settings) {\r\n    const source = (settings && typeof settings === 'object') ? settings : {};\r\n    if (source.enabled === false || source.mode === 'disabled') {\r\n      return [{ label: partnerText('Consegne', 'Delivery'), value: partnerText('In aggiornamento', 'Updating') }];\r\n    }\r\n    const rawSlots = Array.isArray(source.slots) && source.slots.length\r\n      ? source.slots\r\n      : (Array.isArray(source.inheritedSlots) && source.inheritedSlots.length\r\n        ? source.inheritedSlots\r\n        : (Array.isArray(source.personalSlots) ? source.personalSlots : []));\r\n    const rows = rawSlots\r\n      .map(normalizeDeliverySlotRow)\r\n      .filter(Boolean)\r\n      .sort((left, right) => {\r\n        const order = left.sortOrder - right.sortOrder;\r\n        return order || String(left.value || '').localeCompare(String(right.value || ''));\r\n      });\r\n    return rows.length\r\n      ? rows\r\n      : [{ label: partnerText('Consegne', 'Delivery'), value: partnerText('In aggiornamento', 'Updating') }];\r\n  }\r\n\r\n  function extractCoverageCap(value) {\r\n    const match = String(value || '').match(/\\d{5}/);\r\n    return match ? match[0] : '';\r\n  }\r\n\r\n  function uniqueCoverageCaps(values) {\r\n    const seen = new Set();\r\n    return (Array.isArray(values) ? values : [])\r\n      .map(extractCoverageCap)\r\n      .filter(Boolean)\r\n      .filter((cap) => {\r\n        if (seen.has(cap)) return false;\r\n        seen.add(cap);\r\n        return true;\r\n      });\r\n  }\r\n\r\n  function formatCoverageRules(rules, defaultCap) {\r\n    const rows = [];\r\n    (Array.isArray(rules) ? rules : []).slice(0, 12).forEach((rule) => {\r\n      if (!rule || typeof rule !== 'object') return;\r\n      const type = String(rule.type || '').trim().toLowerCase();\r\n      if (type === 'list' || type === 'fixed' || Array.isArray(rule.caps)) {\r\n        const caps = uniqueCoverageCaps(rule.caps || [rule.cap, rule.from, rule.to]);\r\n        if (!caps.length) return;\r\n        const previewCaps = caps.slice(0, 8).join(', ');\r\n        const extra = caps.length > 8 ? ` +${caps.length - 8}` : '';\r\n        rows.push({\r\n          label: caps.length === 1 ? partnerText('CAP servito', 'Served postcode') : partnerText('CAP serviti', 'Served postcodes'),\r\n          value: `${previewCaps}${extra}`\r\n        });\r\n        return;\r\n      }\r\n      const from = extractCoverageCap(rule.from || '');\r\n      const to = extractCoverageCap(rule.to || '');\r\n      if (!from || !to) return;\r\n      rows.push({\r\n        label: from === to ? partnerText('CAP servito', 'Served postcode') : partnerText('Intervallo CAP', 'Postcode range'),\r\n        value: from === to ? from : `${from} - ${to}`\r\n      });\r\n    });\r\n\r\n    if (rows.length) return rows;\r\n    const fallbackCap = extractCoverageCap(defaultCap || '');\r\n    return fallbackCap\r\n      ? [{ label: partnerText('Consegna locale', 'Local delivery'), value: partnerText(`Verifica il CAP ${fallbackCap}`, `Check postcode ${fallbackCap}`) }]\r\n      : [{ label: partnerText('Consegna locale', 'Local delivery'), value: partnerText(\"Inserisci l'indirizzo per verificarla\", 'Enter your address to check') }];\r\n  }\r\n\r\n  function formatCoverageSummary(rules, defaultCap, city, province) {\r\n    const safeRules = Array.isArray(rules) ? rules : [];\r\n    const caps = uniqueCoverageCaps(safeRules.flatMap((rule) => {\r\n      const type = String(rule?.type || '').trim().toLowerCase();\r\n      if (Array.isArray(rule?.caps)) return rule.caps;\r\n      if (type === 'fixed') return [rule?.cap, rule?.from === rule?.to ? rule?.from : ''];\r\n      if (type === 'range' && extractCoverageCap(rule?.from) === extractCoverageCap(rule?.to)) return [rule?.from];\r\n      return [];\r\n    }));\r\n    const cleanCity = String(city || '').trim();\r\n    const cleanProvince = String(province || '').trim();\r\n    const place = [cleanCity, cleanProvince && cleanProvince.toLowerCase() !== cleanCity.toLowerCase() ? cleanProvince : '']\r\n      .filter(Boolean)\r\n      .join(' \u00B7 ');\r\n    const firstRange = safeRules.find((rule) => {\r\n      const from = extractCoverageCap(rule?.from);\r\n      const to = extractCoverageCap(rule?.to);\r\n      return from && to && from !== to;\r\n    });\r\n    if (firstRange) {\r\n      const from = extractCoverageCap(firstRange.from);\r\n      const to = extractCoverageCap(firstRange.to);\r\n      const visibleCaps = caps.slice(0, 4);\r\n      const italianExtra = visibleCaps.length === 1\r\n        ? `, pi\u00F9 il CAP ${visibleCaps[0]}`\r\n        : visibleCaps.length > 1\r\n          ? `, pi\u00F9 i CAP ${visibleCaps.join(', ')}${caps.length > 4 ? ` e altri ${caps.length - 4}` : ''}`\r\n          : '';\r\n      const englishExtra = visibleCaps.length === 1\r\n        ? `, plus postcode ${visibleCaps[0]}`\r\n        : visibleCaps.length > 1\r\n          ? `, plus postcodes ${visibleCaps.join(', ')}${caps.length > 4 ? ` and ${caps.length - 4} more` : ''}`\r\n          : '';\r\n      return partnerText(\r\n        `${place ? `${place} \u00B7 ` : ''}CAP ${from}\u2013${to}${italianExtra}`,\r\n        `${place ? `${place} \u00B7 ` : ''}Postcodes ${from}\u2013${to}${englishExtra}`\r\n      );\r\n    }\r\n    if (caps.length === 1) return partnerText(`${place ? `${place} \u00B7 ` : ''}CAP ${caps[0]}`, `${place ? `${place} \u00B7 ` : ''}Postcode ${caps[0]}`);\r\n    if (caps.length > 1) {\r\n      const preview = caps.slice(0, 4).join(', ');\r\n      const extra = caps.length > 4 ? partnerText(` e altri ${caps.length - 4}`, ` and ${caps.length - 4} more`) : '';\r\n      return partnerText(`${place ? `${place} \u00B7 ` : ''}CAP ${preview}${extra}`, `${place ? `${place} \u00B7 ` : ''}Postcodes ${preview}${extra}`);\r\n    }\r\n    if (place) return partnerText(`${place} e zone vicine`, `${place} and nearby areas`);\r\n    const fallbackCap = extractCoverageCap(defaultCap || '');\r\n    if (fallbackCap) return partnerText(`Consegna locale: verifica il CAP ${fallbackCap}`, `Local delivery: check postcode ${fallbackCap}`);\r\n    return partnerText(\"Inserisci l'indirizzo per verificare la consegna\", 'Enter your address to check delivery');\r\n  }\r\n\r\n  function formatGoogleReviewRows(config) {\r\n    const source = config && typeof config === 'object' ? config : {};\r\n    if (source.showGoogleReviews !== true || !Array.isArray(source.googleReviews)) return [];\r\n    const limit = Math.max(1, Math.min(Number(source.googleReviewsLimit || 3) || 3, 3));\r\n    return source.googleReviews.map((review) => {\r\n      const src = review && typeof review === 'object' ? review : {};\r\n      const text = String(src.text || src.body || '').replace(/\\s+/g, ' ').trim();\r\n      const rating = Math.max(1, Math.min(Math.round(Number(src.rating || 0) || 0), 5));\r\n      if (!text || rating < 1) return null;\r\n      return {\r\n        authorName: String(src.authorName || src.author || partnerText('Cliente Google', 'Google customer')).replace(/\\s+/g, ' ').trim(),\r\n        authorUri: String(src.authorUri || src.authorUrl || '').trim(),\r\n        rating,\r\n        text,\r\n        relativeTimeDescription: String(src.relativeTimeDescription || src.relativeTime || '').replace(/\\s+/g, ' ').trim(),\r\n        publishTime: String(src.publishTime || '').trim()\r\n      };\r\n    }).filter(Boolean).slice(0, limit);\r\n  }\r\n\r\n  function normalizeReviewDistribution(value) {\r\n    const source = value && typeof value === 'object' ? value : {};\r\n    const output = {};\r\n    for (let star = 1; star <= 5; star += 1) {\r\n      output[star] = Math.max(0, Number(source[star] ?? source[String(star)] ?? 0) || 0);\r\n    }\r\n    return output;\r\n  }\r\n\r\n  function normalizePartnerReviewAggregate(value) {\r\n    const source = value && typeof value === 'object' ? value : null;\r\n    if (!source) return null;\r\n    const count = Math.max(0, Math.round(Number(\r\n      source.ratingCount\r\n      ?? source.reviewCount\r\n      ?? source.count\r\n      ?? source.total\r\n      ?? 0\r\n    ) || 0));\r\n    const average = Math.max(0, Math.min(5, Number(\r\n      source.average\r\n      ?? source.averageRating\r\n      ?? source.rating\r\n      ?? source.score\r\n      ?? 0\r\n    ) || 0));\r\n    return {\r\n      average,\r\n      ratingCount: count,\r\n      distribution: normalizeReviewDistribution(source.distribution || source.ratingDistribution),\r\n      topTags: (Array.isArray(source.topTags) ? source.topTags : [])\r\n        .map((tag) => typeof tag === 'string' ? tag : String(tag?.label || tag?.name || '').trim())\r\n        .filter(Boolean)\r\n        .slice(0, 6)\r\n    };\r\n  }\r\n\r\n  function partnerReviewAggregateFromPartner(partner) {\r\n    if (!partner || typeof partner !== 'object') return null;\r\n    const candidates = [\r\n      partner.reviewAggregate,\r\n      partner.reviewsAggregate,\r\n      partner.reputation?.aggregate,\r\n      partner.reputation,\r\n      partner.reviewStats,\r\n      partner.storefrontConfig?.reviewAggregate\r\n    ];\r\n    for (const candidate of candidates) {\r\n      if (candidate && typeof candidate === 'object') return normalizePartnerReviewAggregate(candidate);\r\n    }\r\n    return null;\r\n  }\r\n\r\n  function partnerReviewCompactLabel(aggregate) {\r\n    if (!aggregate) return '';\r\n    const count = Math.max(0, Number(aggregate.ratingCount || 0) || 0);\r\n    if (!count) return partnerText('Nuovo su florame.ai', 'New on florame.ai');\r\n    const locale = getNativeLanguage() === 'en' ? 'en-US' : 'it-IT';\r\n    const average = Number(aggregate.average || 0).toLocaleString(locale, {\r\n      minimumFractionDigits: 1,\r\n      maximumFractionDigits: 1\r\n    });\r\n    const countLabel = count === 1\r\n      ? partnerText('1 recensione', '1 review')\r\n      : partnerText(`${count} recensioni`, `${count} reviews`);\r\n    if (!aggregate.average) return countLabel;\r\n    return partnerText(\r\n      `\u2605 ${average} \u00B7 ${countLabel}`,\r\n      `\u2605 ${average} \u00B7 ${countLabel}`\r\n    );\r\n  }\r\n\r\n  function publicReviewApiUrl(endpoint, params) {\r\n    const apiBase = CONFIG.apiBase || 'https://us-central1-flower-ai-2d7aa.cloudfunctions.net';\r\n    const url = new URL(apiBase.replace(/\\/+$/, '') + '/' + endpoint);\r\n    Object.entries(params || {}).forEach(([key, value]) => {\r\n      if (value !== undefined && value !== null && String(value) !== '') {\r\n        url.searchParams.set(key, String(value));\r\n      }\r\n    });\r\n    return url;\r\n  }\r\n\r\n  function readPartnerReviewCache(partnerSlug) {\r\n    if (!partnerSlug) return null;\r\n    try {\r\n      const parsed = JSON.parse(sessionStorage.getItem(PARTNER_REVIEW_CACHE_PREFIX + partnerSlug) || 'null');\r\n      if (!parsed || !parsed.savedAt || Date.now() - Number(parsed.savedAt) > PARTNER_REVIEW_CACHE_TTL_MS) return null;\r\n      return parsed.payload || null;\r\n    } catch (_) {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  function savePartnerReviewCache(partnerSlug, payload) {\r\n    if (!partnerSlug || !payload) return;\r\n    try {\r\n      sessionStorage.setItem(PARTNER_REVIEW_CACHE_PREFIX + partnerSlug, JSON.stringify({\r\n        savedAt: Date.now(),\r\n        payload\r\n      }));\r\n    } catch (_) {}\r\n  }\r\n\r\n  async function fetchPublicPartnerReviews(partnerIdentity, options = {}) {\r\n    const partnerId = String(options.partnerId || partnerIdentity || '').trim();\r\n    const slug = slugify(options.partnerSlug || partnerIdentity);\r\n    if (!partnerId && !slug) throw new Error('partner_identity_required');\r\n    const aggregateOnly = options.aggregateOnly === true;\r\n    const endpoint = String(CONFIG.partnerReviewsEndpoint || 'publicPartnerReviewsV1');\r\n    const url = publicReviewApiUrl(endpoint, {\r\n      partnerId,\r\n      partnerSlug: slug,\r\n      limit: aggregateOnly ? 1 : Math.max(1, Math.min(Number(options.limit || 12) || 12, 24)),\r\n      cursor: aggregateOnly ? undefined : options.cursor\r\n    });\r\n    const response = await window.fetch(url.toString(), {\r\n      credentials: 'omit',\r\n      cache: 'no-store',\r\n      headers: { Accept: 'application/json' }\r\n    });\r\n    if (!response.ok) throw new Error(`partner_reviews_${response.status}`);\r\n    const payload = await response.json().catch(() => null);\r\n    if (!payload || payload.success === false) throw new Error('partner_reviews_invalid');\r\n    return {\r\n      ...payload,\r\n      aggregate: normalizePartnerReviewAggregate(payload.aggregate || payload.reviewAggregate || {})\r\n    };\r\n  }\r\n\r\n  function buildAddressLine(address) {\r\n    if (!address) return '';\r\n    const locality = [address.postalCode || address.cap, address.city || address.locality, address.province || address.state]\r\n      .filter(Boolean)\r\n      .join(' ');\r\n    return [address.line1, address.line2, locality].filter(Boolean).join(', ');\r\n  }\r\n\r\n  function partnerShowcaseIntent() {\r\n    try {\r\n      return window.FlorameDeliveryIntent?.toQuery?.() || {};\r\n    } catch (_) {\r\n      return {};\r\n    }\r\n  }\r\n\r\n  function partnerShowcaseIntentSignature() {\r\n    try {\r\n      return window.FlorameDeliveryIntent?.signature?.() || 'delivery|no-address|no-date|no-slot';\r\n    } catch (_) {\r\n      return 'delivery|no-address|no-date|no-slot';\r\n    }\r\n  }\r\n\r\n  function partnerShowcaseScopedKey(partnerSlug) {\r\n    return `${slugify(partnerSlug)}:${partnerShowcaseIntentSignature()}`;\r\n  }\r\n\r\n  function readPartnerShowcaseCache(partnerSlug) {\r\n    if (!partnerSlug) return null;\r\n    try {\r\n      const key = PARTNER_SHOWCASE_CACHE_PREFIX + partnerShowcaseScopedKey(partnerSlug);\r\n      const raw = localStorage.getItem(key) || sessionStorage.getItem(key) || 'null';\r\n      const parsed = JSON.parse(raw);\r\n      const ageMs = Date.now() - Number(parsed?.savedAt || 0);\r\n      if (!parsed?.payload || !Number.isFinite(ageMs) || ageMs > PARTNER_SHOWCASE_CACHE_TTL_MS || (parsed.payload.readCache && parsed.payload.readCache.validUntil <= Date.now())) return null;\r\n      return { payload: parsed.payload, savedAt: Number(parsed.savedAt), fresh: ageMs <= PARTNER_SHOWCASE_CACHE_TTL_MS };\r\n    } catch (_) {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  function savePartnerShowcaseCache(partnerSlug, payload) {\r\n    if (!partnerSlug || !payload) return;\r\n    const encoded = JSON.stringify({ savedAt: Date.now(), payload });\r\n    const key = PARTNER_SHOWCASE_CACHE_PREFIX + partnerShowcaseScopedKey(partnerSlug);\r\n    try { localStorage.setItem(key, encoded); } catch (_) {}\r\n    try { sessionStorage.setItem(key, encoded); } catch (_) {}\r\n  }\r\n\r\n  async function fetchPublicPartnerShowcase(partnerId, partnerSlug) {\r\n    const endpoint = String(CONFIG.partnerShowcaseEndpoint || 'partnerShowcasePublicV1');\r\n    const url = publicReviewApiUrl(endpoint, {\r\n      // The requested shop owns this catalogue, even while delivery intent\r\n      // has no florist yet or still contains the previously selected one.\r\n      ...partnerShowcaseIntent(),\r\n      partnerId: String(partnerId || '').trim(),\r\n      partnerSlug: slugify(partnerSlug),\r\n      limit: 120\r\n    });\r\n    const controller = typeof AbortController === 'function' ? new AbortController() : null;\r\n    let timeoutId = null;\r\n    try {\r\n      const request = (window.FlorameReadCache?.fetch || window.fetch)(url.toString(), {\r\n        credentials: 'omit',\r\n        cache: 'no-store',\r\n        headers: { Accept: 'application/json' },\r\n        ...(controller ? { signal: controller.signal } : {})\r\n      });\r\n      const timeout = new Promise((_, reject) => {\r\n        timeoutId = setTimeout(() => {\r\n          controller?.abort();\r\n          reject(new Error('partner_showcase_timeout'));\r\n        }, PARTNER_SHOWCASE_REQUEST_TIMEOUT_MS);\r\n      });\r\n      const response = await Promise.race([request, timeout]);\r\n      if (!response.ok) throw new Error(`partner_showcase_${response.status}`);\r\n      const payload = await response.json().catch(() => null);\r\n      if (!payload || payload.success === false) throw new Error('partner_showcase_invalid');\r\n      return payload;\r\n    } finally {\r\n      clearTimeout(timeoutId);\r\n    }\r\n  }\r\n\r\n  function requestPublicPartnerShowcase(partnerId, partnerSlug) {\r\n    const requestKey = partnerShowcaseScopedKey(partnerSlug || partnerId);\r\n    const existing = requestKey ? partnerShowcaseRequests.get(requestKey) : null;\r\n    if (existing && Date.now() - existing.startedAt < PARTNER_SHOWCASE_REQUEST_REUSE_MS) {\r\n      return existing.promise;\r\n    }\r\n    const request = fetchPublicPartnerShowcase(partnerId, partnerSlug).catch((error) => {\r\n      if (!/timeout|Failed to fetch|Load failed|NetworkError|partner_showcase_(?:429|5\\d\\d)/i.test(String(error?.message || error))) throw error;\r\n      // A cold endpoint or brief network failure should recover without a tap.\r\n      if (requestKey !== partnerShowcaseScopedKey(partnerSlug || partnerId)) throw error;\r\n      return fetchPublicPartnerShowcase(partnerId, partnerSlug);\r\n    });\r\n    if (requestKey) {\r\n      const entry = { promise: request, startedAt: Date.now() };\r\n      partnerShowcaseRequests.set(requestKey, entry);\r\n      request.catch(() => {\r\n        if (partnerShowcaseRequests.get(requestKey) === entry) partnerShowcaseRequests.delete(requestKey);\r\n      });\r\n    }\r\n    return request;\r\n  }\r\n\r\n  function removePartnerShowcase(payload = null) {\r\n    document.getElementById('floramePartnerShowcaseSection')?.remove();\r\n    window.__floramePartnerShowcasePayload = payload;\r\n    window.__floramePartnerShowcasePending = false;\r\n    window.__floramePartnerShowcaseError = false;\r\n    window.__floramePartnerShowcaseFingerprint = '';\r\n    if (typeof window.__florameApplyPartnerShowcase === 'function') {\r\n      window.__florameApplyPartnerShowcase(payload);\r\n    } else {\r\n      window.dispatchEvent(new CustomEvent('florame:partner-showcase-change', {\r\n        detail: { payload }\r\n      }));\r\n    }\r\n  }\r\n\r\n  function reportPartnerShowcaseError(error) {\r\n    window.__floramePartnerShowcasePending = false;\r\n    window.__floramePartnerShowcaseError = true;\r\n    if (typeof window.__florameSetPartnerShowcaseError === 'function') {\r\n      window.__florameSetPartnerShowcaseError(true);\r\n    } else {\r\n      window.dispatchEvent(new CustomEvent('florame:partner-showcase-error', {\r\n        detail: { error: String(error?.message || error || 'partner_showcase_error') }\r\n      }));\r\n    }\r\n  }\r\n\r\n  function renderPartnerShowcasePayload(partner, payload) {\r\n    const products = Array.isArray(payload?.products)\r\n        ? payload.products.filter((product) => product?.productUrl)\r\n      : [];\r\n    if (!payload?.enabled || !partner) {\r\n      removePartnerShowcase(partner ? payload : null);\r\n      return;\r\n    }\r\n    document.getElementById('floramePartnerShowcaseSection')?.remove();\r\n    const nextPayload = {\r\n      ...payload,\r\n      products,\r\n      partner: {\r\n        partnerId: String(partner.partnerId || partner.id || ''),\r\n        name: String(partner.name || partner.partnerId || partnerText('Il tuo fiorista', 'Your florist')).trim()\r\n      }\r\n    };\r\n    const nextFingerprint = JSON.stringify({\r\n      partnerId: nextPayload.partner.partnerId,\r\n      intent: partnerShowcaseIntentSignature(),\r\n      enabled: nextPayload.enabled,\r\n      products: products.map((product) => [\r\n        product.productId || product.shopifyProductId || product.productUrl,\r\n        product.variantId || '',\r\n        product.updatedAt || '',\r\n        product.availability?.status || '',\r\n        product.offer?.mode || '',\r\n        product.offer?.reasonCode || '',\r\n        product.price?.amountCents || product.price || ''\r\n      ])\r\n    });\r\n    const showcaseTarget = document.getElementById('communityCarousel');\r\n    const mountedShowcaseCards = showcaseTarget\r\n      ? showcaseTarget.querySelectorAll('.snap-card--partner-pick[data-florame-partner-product]')\r\n      : [];\r\n    const hasCompleteMountedShowcase = Boolean(\r\n      showcaseTarget\r\n      && products.length > 0\r\n      && mountedShowcaseCards.length === products.length\r\n      && !showcaseTarget.querySelector('.snap-card--partner-pick-skeleton, .skeleton')\r\n    );\r\n    if (window.__floramePartnerShowcaseFingerprint === nextFingerprint && hasCompleteMountedShowcase) {\r\n      window.__floramePartnerShowcasePending = false;\r\n      window.__floramePartnerShowcaseError = false;\r\n      if (typeof window.__florameSetPartnerShowcasePending === 'function') {\r\n        window.__florameSetPartnerShowcasePending(false);\r\n      }\r\n      if (typeof window.__florameSetPartnerShowcaseError === 'function') {\r\n        window.__florameSetPartnerShowcaseError(false);\r\n      }\r\n      return;\r\n    }\r\n    window.__floramePartnerShowcaseFingerprint = nextFingerprint;\r\n    window.__floramePartnerShowcasePayload = nextPayload;\r\n    window.__floramePartnerShowcasePending = false;\r\n    window.__floramePartnerShowcaseError = false;\r\n    if (typeof window.__florameSetPartnerShowcaseError === 'function') {\r\n      window.__florameSetPartnerShowcaseError(false);\r\n    }\r\n    if (typeof window.__florameApplyPartnerShowcase === 'function') {\r\n      window.__florameApplyPartnerShowcase(nextPayload);\r\n    } else {\r\n      window.dispatchEvent(new CustomEvent('florame:partner-showcase-change', {\r\n        detail: { payload: nextPayload }\r\n      }));\r\n    }\r\n  }\r\n\r\n  async function renderPartnerShowcase(partner) {\r\n    if (!partner) {\r\n      removePartnerShowcase();\r\n      return;\r\n    }\r\n    const partnerId = String(partner.partnerId || partner.id || '').trim();\r\n    const partnerSlug = slugify(partner.portal?.partnerSlug || partner.partnerSlug || partnerId || partner.name || '');\r\n    if (partnerSlug === 'manual-florist-global-v1') return;\r\n    const cacheKey = partnerSlug || slugify(partnerId);\r\n    const scopeKey = partnerShowcaseScopedKey(cacheKey);\r\n    const cached = readPartnerShowcaseCache(cacheKey);\r\n    if (cached) renderPartnerShowcasePayload(partner, cached.payload);\r\n    try {\r\n      const payload = await requestPublicPartnerShowcase(partnerId, partnerSlug);\r\n      if (scopeKey !== partnerShowcaseScopedKey(cacheKey)) return;\r\n      const current = window.__floramePartner;\r\n      const currentId = String(current?.partnerId || current?.id || '').trim();\r\n      if (currentId && partnerId && currentId !== partnerId) return;\r\n      savePartnerShowcaseCache(cacheKey, payload);\r\n      renderPartnerShowcasePayload(partner, payload);\r\n    } catch (error) {\r\n      if (!cached && scopeKey === partnerShowcaseScopedKey(cacheKey)) reportPartnerShowcaseError(error);\r\n    }\r\n  }\r\n\r\n  function primePartnerShowcase(ctx, cachedPartner) {\r\n    if (ctx?.slug === 'manual-florist-global-v1') return null;\r\n    if (!ctx?.active || !ctx.slug) return null;\r\n    const cacheKey = slugify(ctx.slug);\r\n    const scopeKey = partnerShowcaseScopedKey(cacheKey);\r\n    const cached = readPartnerShowcaseCache(cacheKey);\r\n    if (cached) {\r\n      const partner = cachedPartner || window.__floramePartner || {\r\n        partnerId: cached.payload?.partnerId || '',\r\n        partnerSlug: cacheKey,\r\n        name: ''\r\n      };\r\n      renderPartnerShowcasePayload(partner, cached.payload);\r\n    } else {\r\n      window.__floramePartnerShowcasePending = true;\r\n      if (typeof window.__florameSetPartnerShowcasePending === 'function') {\r\n        window.__florameSetPartnerShowcasePending(true);\r\n      }\r\n    }\r\n    return requestPublicPartnerShowcase('', cacheKey)\r\n      .then((payload) => {\r\n        if (getContext().slug !== ctx.slug || scopeKey !== partnerShowcaseScopedKey(cacheKey)) return null;\r\n        savePartnerShowcaseCache(cacheKey, payload);\r\n        const partner = window.__floramePartner || cachedPartner || {\r\n          partnerId: payload?.partnerId || '',\r\n          partnerSlug: payload?.partnerSlug || cacheKey,\r\n          name: ''\r\n        };\r\n        renderPartnerShowcasePayload(partner, payload);\r\n        return payload;\r\n      })\r\n      .catch((error) => {\r\n        if (!cached && getContext().slug === ctx.slug && scopeKey === partnerShowcaseScopedKey(cacheKey)) reportPartnerShowcaseError(error);\r\n        return null;\r\n      });\r\n  }\r\n\r\n  function normalizeHexColor(value) {\r\n    const clean = String(value || '').trim();\r\n    return /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(clean) ? clean.toLowerCase() : '';\r\n  }\r\n\r\n  function hexToRgb(value) {\r\n    const clean = normalizeHexColor(value);\r\n    if (!clean) return null;\r\n    const full = clean.length === 4\r\n      ? `#${clean[1]}${clean[1]}${clean[2]}${clean[2]}${clean[3]}${clean[3]}`\r\n      : clean;\r\n    return {\r\n      r: parseInt(full.slice(1, 3), 16),\r\n      g: parseInt(full.slice(3, 5), 16),\r\n      b: parseInt(full.slice(5, 7), 16)\r\n    };\r\n  }\r\n\r\n  function rgbaFromHex(value, alpha) {\r\n    const rgb = hexToRgb(value);\r\n    if (!rgb) return '';\r\n    return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha})`;\r\n  }\r\n\r\n  function readableTextColor(value) {\r\n    const rgb = hexToRgb(value);\r\n    if (!rgb) return '#171217';\r\n    const channel = (value) => {\r\n      const normalized = value / 255;\r\n      return normalized <= 0.03928 ? normalized / 12.92 : Math.pow((normalized + 0.055) / 1.055, 2.4);\r\n    };\r\n    const luminance = (0.2126 * channel(rgb.r)) + (0.7152 * channel(rgb.g)) + (0.0722 * channel(rgb.b));\r\n    const whiteContrast = 1.05 / (luminance + 0.05);\r\n    const darkContrast = (luminance + 0.05) / 0.057;\r\n    return whiteContrast >= darkContrast ? '#ffffff' : '#171217';\r\n  }\r\n\r\n  function injectStyles() {\r\n    if (document.getElementById('florame-partner-home-styles')) return;\r\n    const style = document.createElement('style');\r\n    style.id = 'florame-partner-home-styles';\r\n    style.textContent = `\r\n      .app-header.partner-storefront-active {\r\n        background: #fff8f3;\r\n        border-color: color-mix(in srgb, var(--florame-partner-accent, #ff4d75) 18%, #eee4e7);\r\n        box-shadow: 0 24px 54px -38px rgba(45, 31, 38, .52);\r\n      }\r\n      .app-header.partner-storefront-active .app-header-surface {\r\n        background-image: var(--florame-partner-moment-art);\r\n        background-position: center;\r\n        background-size: cover;\r\n        background-repeat: no-repeat;\r\n      }\r\n      .app-header.partner-storefront-active .app-header-surface::before {\r\n        z-index: 1;\r\n        background: linear-gradient(90deg, rgba(255,250,247,.99) 0%, rgba(255,250,247,.96) 54%, rgba(255,250,247,.44) 82%, rgba(255,250,247,.08) 100%);\r\n      }\r\n      .app-header.partner-storefront-active .app-header-surface::after { display: none; }\r\n      .app-header.partner-storefront-active.partner-storefront-offline .app-header-surface::before {\r\n        background: linear-gradient(90deg, rgba(255,248,249,.99) 0%, rgba(255,241,243,.96) 54%, rgba(255,232,236,.48) 82%, rgba(255,239,241,.1) 100%);\r\n      }\r\n      .app-header.partner-storefront-active.partner-storefront-expanded .app-header-surface {\r\n        background-color: #fff8f3;\r\n        background-image: var(--florame-partner-expanded-art);\r\n        background-position: top center;\r\n        background-size: 100% auto;\r\n        background-repeat: no-repeat;\r\n      }\r\n      .app-header.partner-storefront-active.partner-storefront-expanded .app-header-surface::before,\r\n      .app-header.partner-storefront-active.partner-storefront-expanded.partner-storefront-offline .app-header-surface::before {\r\n        background:\r\n          linear-gradient(180deg, rgba(255,250,247,.08) 0%, rgba(255,250,247,.2) 26%, rgba(255,250,247,.92) 48%, #fff8f3 64%),\r\n          linear-gradient(90deg, rgba(255,250,247,.99) 0%, rgba(255,250,247,.92) 52%, rgba(255,250,247,.36) 84%, rgba(255,250,247,.08) 100%);\r\n      }\r\n      .app-header.partner-storefront-active .app-header-surface,\r\n      .app-header.partner-storefront-active.partner-storefront-expanded .app-header-surface {\r\n        --florame-partner-art-height: clamp(330px, 32vw, 420px);\r\n        background-color: #fff8f3;\r\n        background-image: var(--florame-partner-moment-art);\r\n        background-position: right top;\r\n        background-size: auto var(--florame-partner-art-height);\r\n        background-repeat: no-repeat;\r\n      }\r\n      .app-header.partner-storefront-active.partner-storefront-custom-occasion-art .app-header-surface,\r\n      .app-header.partner-storefront-active.partner-storefront-expanded.partner-storefront-custom-occasion-art .app-header-surface {\r\n        background-position: center;\r\n        background-size: cover;\r\n      }\r\n      .app-header.partner-storefront-active .app-header-surface::before,\r\n      .app-header.partner-storefront-active.partner-storefront-expanded .app-header-surface::before {\r\n        background:\r\n          linear-gradient(180deg, transparent 0, transparent 230px, rgba(255,248,243,.18) 276px, #fff8f3 340px),\r\n          linear-gradient(90deg, rgba(255,250,247,.96) 0%, rgba(255,250,247,.82) 52%, rgba(255,250,247,.08) 82%, transparent 100%);\r\n      }\r\n      .app-header.partner-storefront-active.partner-storefront-offline .app-header-surface::before,\r\n      .app-header.partner-storefront-active.partner-storefront-expanded.partner-storefront-offline .app-header-surface::before {\r\n        background:\r\n          linear-gradient(180deg, transparent 0, transparent 230px, rgba(255,241,243,.2) 276px, #fff5f6 340px),\r\n          linear-gradient(90deg, rgba(255,248,249,.97) 0%, rgba(255,241,243,.84) 52%, rgba(255,232,236,.1) 82%, transparent 100%);\r\n      }\r\n      [data-theme=\"dark\"] .app-header.partner-storefront-active {\r\n        background: #fff8f3;\r\n        border-color: color-mix(in srgb, var(--florame-partner-accent, #ff4d75) 18%, #eee4e7);\r\n      }\r\n      .florame-partner-hero-unified {\r\n        position: relative;\r\n        display: grid;\r\n        gap: 12px;\r\n      }\r\n      .florame-partner-moment {\r\n        position: relative;\r\n        width: 100%;\r\n        min-height: 0;\r\n        margin: 0;\r\n        overflow: visible;\r\n        border: 0;\r\n        border-radius: 0;\r\n        background: transparent;\r\n        box-shadow: none;\r\n        isolation: auto;\r\n      }\r\n      .florame-partner-moment::after {\r\n        content: none;\r\n      }\r\n      .florame-partner-moment-art {\r\n        display: none;\r\n      }\r\n      .florame-partner-moment:hover .florame-partner-moment-art {\r\n        transform: none;\r\n      }\r\n      .florame-partner-moment-copy {\r\n        position: relative;\r\n        z-index: 2;\r\n        width: min(66%, 470px);\r\n        min-height: 0;\r\n        display: flex;\r\n        flex-direction: column;\r\n        align-items: flex-start;\r\n        justify-content: center;\r\n        gap: 8px;\r\n        padding: 12px 0 8px;\r\n        text-align: left;\r\n      }\r\n      .florame-partner-moment-eyebrow {\r\n        color: var(--florame-partner-accent, #ff4d75);\r\n        font-size: 11px;\r\n        font-weight: 900;\r\n        letter-spacing: .1em;\r\n        line-height: 1.2;\r\n        text-transform: uppercase;\r\n      }\r\n      .florame-partner-moment-copy > strong {\r\n        max-width: 18ch;\r\n        color: #241b20;\r\n        font-size: clamp(25px, 4.2vw, 38px);\r\n        font-weight: 950;\r\n        letter-spacing: -.045em;\r\n        line-height: .98;\r\n      }\r\n      .florame-partner-moment-copy > p {\r\n        max-width: 38ch;\r\n        margin: 0;\r\n        color: #66585f;\r\n        font-size: 13px;\r\n        font-weight: 650;\r\n        line-height: 1.45;\r\n      }\r\n      .florame-partner-moment .florame-partner-availability-state {\r\n        margin-top: 3px;\r\n        white-space: nowrap;\r\n      }\r\n      .florame-partner-hero-unified.is-dark-moment .florame-partner-moment::after {\r\n        content: none;\r\n      }\r\n      .florame-partner-hero-unified.is-dark-moment .florame-partner-moment-copy > strong {\r\n        color: #241b20;\r\n      }\r\n      .florame-partner-hero-unified.is-dark-moment .florame-partner-moment-copy > p {\r\n        color: #66585f;\r\n      }\r\n      .florame-partner-hero-unified.is-dark-moment .florame-partner-moment-eyebrow {\r\n        color: var(--florame-partner-accent, #ff4d75);\r\n      }\r\n      .app-header.partner-storefront-loading {\r\n        transition: background 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;\r\n      }\r\n      .app-header.partner-storefront-loading .app-header-surface {\r\n        background-color: #fff8f3;\r\n        background-image: var(--florame-partner-moment-art);\r\n      }\r\n      .app-header.partner-storefront-loading .app-header-surface::before {\r\n        background:\r\n          linear-gradient(180deg, transparent 0, transparent 230px, rgba(255,248,243,.18) 276px, #fff8f3 340px),\r\n          linear-gradient(90deg, rgba(255,250,247,.96) 0%, rgba(255,250,247,.82) 52%, rgba(255,250,247,.08) 82%, transparent 100%);\r\n      }\r\n      .app-header.partner-storefront-active.partner-storefront-art-transition .app-header-surface::after {\r\n        content: \"\";\r\n        display: block;\r\n        position: absolute;\r\n        inset: 0;\r\n        z-index: 0;\r\n        border-radius: inherit;\r\n        background-color: #fff8f3;\r\n        background-image: var(--florame-partner-previous-art);\r\n        background-position: inherit;\r\n        background-size: inherit;\r\n        background-repeat: no-repeat;\r\n        pointer-events: none;\r\n        animation: floramePartnerArtworkFade .42s ease-out forwards;\r\n      }\r\n      .florame-partner-loading-identity {\r\n        min-height: 52px;\r\n      }\r\n      .florame-partner-loading-logo {\r\n        position: relative;\r\n        flex: 0 0 auto;\r\n        width: 52px;\r\n        height: 52px;\r\n        border-radius: 16px;\r\n        overflow: hidden;\r\n        border: 1px solid var(--florame-partner-logo-border, rgba(15, 23, 42, 0.08));\r\n        background: linear-gradient(135deg, rgba(255,255,255,0.96), rgba(253,228,235,0.9));\r\n        box-shadow: 0 10px 20px rgba(15, 23, 42, 0.08);\r\n      }\r\n      .florame-partner-loading-logo::after,\r\n      .florame-partner-loading-line::after {\r\n        content: \"\";\r\n        position: absolute;\r\n        inset: 0;\r\n        transform: translateX(-100%);\r\n        background: linear-gradient(90deg, transparent, rgba(255,255,255,0.62), transparent);\r\n        animation: floramePartnerLoadingSweep 1.15s ease-in-out infinite;\r\n      }\r\n      .florame-partner-loading-card {\r\n        width: 100%;\r\n        margin: 0;\r\n        padding: 0;\r\n        border: 0;\r\n        border-radius: 0;\r\n        background: transparent;\r\n        box-shadow: none;\r\n      }\r\n      .florame-partner-loading-line {\r\n        position: relative;\r\n        overflow: hidden;\r\n        display: block;\r\n        width: 100%;\r\n        height: 12px;\r\n        border-radius: 999px;\r\n        border: 1px solid rgba(151, 126, 136, .08);\r\n        background: rgba(222, 205, 211, .72);\r\n      }\r\n      .florame-partner-loading-name { width: 136px; height: 14px; }\r\n      .florame-partner-loading-card .florame-partner-moment-copy { min-height: 133px; justify-content: flex-start; }\r\n      .florame-partner-loading-eyebrow { width: 92px; height: 8px; }\r\n      .florame-partner-loading-title { width: min(100%, 184px); height: 50px; border-radius: 10px; }\r\n      .florame-partner-loading-body { width: min(100%, 210px); height: 30px; border-radius: 8px; }\r\n      .florame-partner-loading-availability { width: 96px; height: 16px; margin-top: 3px; }\r\n      .florame-partner-loading-action {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 10px;\r\n        min-height: 34px;\r\n      }\r\n      .florame-partner-loading-reputation { width: 174px; height: 14px; }\r\n      .florame-partner-loading-action-label { width: 112px; height: 12px; }\r\n      .florame-partner-loading-action-arrow { width: 18px; height: 18px; border-radius: 50%; }\r\n      .florame-partner-loading-announcement {\r\n        position: absolute;\r\n        width: 1px;\r\n        height: 1px;\r\n        padding: 0;\r\n        margin: -1px;\r\n        overflow: hidden;\r\n        clip: rect(0, 0, 0, 0);\r\n        white-space: nowrap;\r\n        border: 0;\r\n      }\r\n      .app-greeting--partner .text-gradient {\r\n        background: linear-gradient(\r\n          135deg,\r\n          var(--florame-partner-brand-from, #ff85a2),\r\n          var(--florame-partner-brand-to, #ff4d75)\r\n        );\r\n        -webkit-background-clip: text;\r\n        -webkit-text-fill-color: transparent;\r\n      }\r\n      .florame-partner-logos-row {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: flex-start;\r\n        gap: 12px;\r\n        width: auto;\r\n      }\r\n      .florame-partner-identity-row {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 12px;\r\n        width: 100%;\r\n      }\r\n      .florame-partner-identity-row--single {\r\n        width: fit-content;\r\n        max-width: 100%;\r\n        margin-inline: 0;\r\n        padding: 0;\r\n        border: 0;\r\n        border-radius: 0;\r\n        background: transparent;\r\n      }\r\n      .florame-partner-identity-name {\r\n        max-width: 24ch;\r\n        color: var(--florame-partner-copy-strong, #241b20);\r\n        font-size: 12px;\r\n        font-weight: 850;\r\n        line-height: 1.15;\r\n        text-align: left;\r\n      }\r\n      .florame-partner-hero-meta {\r\n        display: grid;\r\n        justify-items: start;\r\n        gap: 8px;\r\n        width: 100%;\r\n      }\r\n      .florame-partner-hero-note {\r\n        margin: 0;\r\n        max-width: 44ch;\r\n        font-size: 14px;\r\n        line-height: 1.5;\r\n        text-align: center;\r\n        color: var(--florame-partner-note-color, rgba(15, 23, 42, 0.62));\r\n      }\r\n      .florame-partner-badges {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        justify-content: center;\r\n        gap: 8px;\r\n        width: 100%;\r\n      }\r\n      .florame-partner-badge {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        min-height: 30px;\r\n        padding: 0 12px;\r\n        border-radius: 999px;\r\n        background: var(--florame-partner-badge-bg, rgba(255,255,255,0.88));\r\n        border: 1px solid var(--florame-partner-badge-border, rgba(15, 23, 42, 0.08));\r\n        color: var(--florame-partner-badge-color, #111827);\r\n        font-size: 11px;\r\n        font-weight: 800;\r\n        letter-spacing: 0.04em;\r\n        text-transform: uppercase;\r\n      }\r\n      .florame-partner-hero-action {\r\n        appearance: none;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 10px;\r\n        min-height: 44px;\r\n        padding: 0;\r\n        border: 0;\r\n        border-radius: 0;\r\n        background: transparent;\r\n        color: var(--florame-partner-accent, #ff4d75);\r\n        cursor: pointer;\r\n        font-size: 12px;\r\n        font-weight: 800;\r\n        letter-spacing: 0.08em;\r\n        text-transform: uppercase;\r\n      }\r\n      .florame-partner-reputation-trigger {\r\n        appearance: none;\r\n        width: fit-content;\r\n        min-height: 44px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 9px;\r\n        padding: 0;\r\n        border: 0;\r\n        background: transparent;\r\n        color: var(--florame-partner-copy-strong, #2b2227);\r\n        cursor: pointer;\r\n        font: inherit;\r\n        text-align: left;\r\n      }\r\n      .florame-partner-reputation-trigger[disabled] {\r\n        cursor: default;\r\n      }\r\n      .florame-partner-reputation-label {\r\n        font-size: 13px;\r\n        font-weight: 850;\r\n        letter-spacing: -0.01em;\r\n        line-height: 1.25;\r\n      }\r\n      .florame-partner-reputation-arrow {\r\n        width: 17px;\r\n        height: 17px;\r\n        flex: 0 0 auto;\r\n        color: var(--florame-partner-accent, #ff4d75);\r\n      }\r\n      .florame-partner-reputation-trigger:focus-visible {\r\n        outline: none;\r\n        box-shadow: 0 0 0 3px var(--florame-partner-accent-soft, rgba(255, 77, 117, 0.14));\r\n      }\r\n      .florame-partner-reputation-trigger.is-loading .florame-partner-reputation-arrow {\r\n        display: none;\r\n      }\r\n      .florame-partner-reputation-trigger.is-loading .florame-partner-reputation-label {\r\n        position: relative;\r\n        width: 174px;\r\n        height: 14px;\r\n        overflow: hidden;\r\n        border: 1px solid rgba(151, 126, 136, .08);\r\n        border-radius: 999px;\r\n        background: rgba(222, 205, 211, .72);\r\n        color: transparent;\r\n      }\r\n      .florame-partner-reputation-trigger.is-loading .florame-partner-reputation-label::after {\r\n        content: \"\";\r\n        position: absolute;\r\n        inset: 0;\r\n        transform: translateX(-100%);\r\n        background: linear-gradient(90deg, transparent, rgba(255,255,255,.68), transparent);\r\n        animation: floramePartnerLoadingSweep 1.15s ease-in-out infinite;\r\n      }\r\n      .florame-partner-hero-action:hover {\r\n        opacity: 0.92;\r\n      }\r\n      .florame-partner-hero-action:focus-visible,\r\n      .florame-partner-cta:focus-visible {\r\n        outline: none;\r\n        box-shadow: 0 0 0 3px var(--florame-partner-accent-soft, rgba(255, 77, 117, 0.14));\r\n      }\r\n      .florame-partner-action-arrow {\r\n        width: 18px;\r\n        height: 18px;\r\n        color: var(--florame-partner-accent, #ff4d75);\r\n        transition: transform 0.2s ease, color 0.2s ease;\r\n      }\r\n      .florame-partner-hero-unified[data-expanded=\"true\"] .florame-partner-action-arrow {\r\n        color: var(--florame-partner-accent, #ff4d75);\r\n      }\r\n      [data-theme=\"dark\"] .florame-partner-hero-note {\r\n        color: rgba(255,255,255,0.72);\r\n      }\r\n      [data-theme=\"dark\"] .florame-partner-hero-action {\r\n        color: var(--florame-partner-accent, #ff4d75);\r\n      }\r\n      .florame-partner-logo,\r\n      .florame-partner-florame-logo {\r\n        width: 52px;\r\n        height: 52px;\r\n        border-radius: 16px;\r\n        background: #fff;\r\n        border: 1px solid var(--florame-partner-logo-border, rgba(15, 23, 42, 0.08));\r\n        object-fit: contain;\r\n        box-shadow: 0 10px 20px rgba(15, 23, 42, 0.08);\r\n        flex: 0 0 auto;\r\n      }\r\n      .florame-partner-logo-fallback {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        font-size: 18px;\r\n        font-weight: 800;\r\n        color: #111827;\r\n        background: linear-gradient(135deg, rgba(255,255,255,0.95), rgba(253,228,235,0.95));\r\n      }\r\n      .florame-partner-logo-fallback-florame {\r\n        color: var(--florame-partner-brand-fg, #ffffff);\r\n        background: linear-gradient(\r\n          135deg,\r\n          var(--florame-partner-brand-from, #ff85a2),\r\n          var(--florame-partner-brand-to, #ff4d75)\r\n        );\r\n      }\r\n      .florame-partner-brand-x {\r\n        font-size: 18px;\r\n        font-weight: 800;\r\n        color: var(--florame-partner-accent, #ff4d75);\r\n      }\r\n      .florame-partner-details {\r\n        position: relative;\r\n        z-index: 1;\r\n        width: min(100%, 820px);\r\n        margin-inline: auto;\r\n        margin-top: 8px;\r\n        padding-top: 16px;\r\n        border-top: 1px solid var(--florame-partner-divider, rgba(15, 23, 42, 0.08));\r\n      }\r\n      .florame-partner-detail-grid {\r\n        display: grid;\r\n        grid-template-columns: minmax(0, 1.08fr) minmax(190px, 0.72fr) minmax(190px, 0.72fr);\r\n        gap: 12px;\r\n      }\r\n      .florame-partner-detail-block {\r\n        position: relative;\r\n        z-index: 1;\r\n        min-width: 0;\r\n        padding: 16px;\r\n        border-radius: 20px;\r\n        background: var(--florame-partner-panel-bg, rgba(255,255,255,0.78));\r\n        border: 1px solid var(--florame-partner-surface-border, rgba(15, 23, 42, 0.08));\r\n      }\r\n      .florame-partner-detail-label {\r\n        font-size: 10px;\r\n        letter-spacing: 0.12em;\r\n        text-transform: uppercase;\r\n        font-weight: 800;\r\n        color: var(--florame-partner-note-color, rgba(15, 23, 42, 0.42));\r\n        margin-bottom: 8px;\r\n      }\r\n      .florame-partner-detail-title {\r\n        margin: 0;\r\n        font-size: 17px;\r\n        line-height: 1.1;\r\n        letter-spacing: -0.02em;\r\n        color: var(--florame-partner-copy-strong, var(--florame-partner-headline, #111827));\r\n      }\r\n      .florame-partner-address {\r\n        margin-top: 14px;\r\n        padding: 13px 14px;\r\n        border-radius: 16px;\r\n        background: var(--florame-partner-surface-soft, rgba(255,255,255,0.62));\r\n        border: 1px solid var(--florame-partner-surface-border, rgba(15, 23, 42, 0.08));\r\n        font-weight: 650;\r\n        color: var(--florame-partner-copy-strong, var(--florame-partner-headline, #111827));\r\n        font-size: 13px;\r\n        line-height: 1.45;\r\n      }\r\n      .florame-partner-coverage {\r\n        display: grid;\r\n        gap: 8px;\r\n        margin-top: 10px;\r\n        padding: 13px 14px;\r\n        border-radius: 16px;\r\n        background: var(--florame-partner-surface-soft, rgba(255,255,255,0.62));\r\n        border: 1px solid var(--florame-partner-accent-border, var(--florame-partner-surface-border, rgba(15, 23, 42, 0.08)));\r\n        color: var(--florame-partner-copy, rgba(15, 23, 42, 0.76));\r\n      }\r\n      .florame-partner-coverage-label {\r\n        color: var(--florame-partner-note-color, rgba(15, 23, 42, 0.42));\r\n        font-size: 10px;\r\n        font-weight: 900;\r\n        letter-spacing: 0.08em;\r\n        text-transform: uppercase;\r\n      }\r\n      .florame-partner-coverage-row {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        gap: 12px;\r\n        font-size: 12px;\r\n        line-height: 1.35;\r\n      }\r\n      .florame-partner-coverage-row strong {\r\n        color: var(--florame-partner-copy-strong, var(--florame-partner-headline, #111827));\r\n        white-space: nowrap;\r\n      }\r\n      .florame-partner-coverage-row span {\r\n        color: var(--florame-partner-copy, rgba(15, 23, 42, 0.74));\r\n        text-align: right;\r\n      }\r\n      .florame-partner-story {\r\n        margin: 12px 0 0;\r\n        padding: 13px 14px;\r\n        border-radius: 16px;\r\n        background: var(--florame-partner-surface-soft, rgba(255,255,255,0.62));\r\n        border: 1px solid var(--florame-partner-surface-border, rgba(15, 23, 42, 0.08));\r\n        color: var(--florame-partner-copy, rgba(15, 23, 42, 0.76));\r\n        font-size: 13px;\r\n        line-height: 1.48;\r\n        font-weight: 650;\r\n      }\r\n      .florame-partner-specialties {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        gap: 7px;\r\n        margin-top: 10px;\r\n      }\r\n      .florame-partner-specialties span {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        min-height: 28px;\r\n        padding: 0 10px;\r\n        border-radius: 999px;\r\n        background: var(--florame-partner-badge-bg, rgba(255,255,255,0.78));\r\n        border: 1px solid var(--florame-partner-badge-border, rgba(15, 23, 42, 0.08));\r\n        color: var(--florame-partner-badge-color, var(--florame-partner-copy-strong, #111827));\r\n        font-size: 11px;\r\n        font-weight: 850;\r\n      }\r\n      .florame-partner-promise {\r\n        display: grid;\r\n        gap: 4px;\r\n        margin-top: 10px;\r\n        padding: 13px 14px;\r\n        border-radius: 16px;\r\n        background: var(--florame-partner-surface-soft, rgba(255,255,255,0.62));\r\n        border: 1px solid var(--florame-partner-accent-border, var(--florame-partner-surface-border, rgba(15, 23, 42, 0.08)));\r\n      }\r\n      .florame-partner-promise span {\r\n        color: var(--florame-partner-note-color, rgba(15, 23, 42, 0.42));\r\n        font-size: 10px;\r\n        font-weight: 900;\r\n        letter-spacing: 0.08em;\r\n        text-transform: uppercase;\r\n      }\r\n      .florame-partner-promise strong {\r\n        color: var(--florame-partner-copy-strong, var(--florame-partner-headline, #111827));\r\n        font-size: 13px;\r\n        line-height: 1.38;\r\n      }\r\n      .florame-partner-google-reviews {\r\n        display: grid;\r\n        gap: 10px;\r\n        margin-top: 10px;\r\n        padding: 13px 14px;\r\n        border-radius: 16px;\r\n        background: var(--florame-partner-surface-soft, rgba(255,255,255,0.62));\r\n        border: 1px solid var(--florame-partner-surface-border, rgba(15, 23, 42, 0.08));\r\n      }\r\n      .florame-partner-google-reviews-head {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: space-between;\r\n        gap: 10px;\r\n      }\r\n      .florame-partner-google-reviews-title {\r\n        color: var(--florame-partner-note-color, rgba(15, 23, 42, 0.42));\r\n        font-size: 10px;\r\n        font-weight: 900;\r\n        letter-spacing: 0.08em;\r\n        text-transform: uppercase;\r\n      }\r\n      .florame-partner-google-reviews-source {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        min-height: 24px;\r\n        padding: 0 8px;\r\n        border-radius: 999px;\r\n        background: var(--florame-partner-badge-bg, rgba(255,255,255,0.78));\r\n        border: 1px solid var(--florame-partner-badge-border, rgba(15, 23, 42, 0.08));\r\n        color: var(--florame-partner-badge-color, var(--florame-partner-copy-strong, #111827));\r\n        font-size: 10px;\r\n        font-weight: 900;\r\n      }\r\n      .florame-partner-google-review {\r\n        display: grid;\r\n        gap: 5px;\r\n        padding-top: 10px;\r\n        border-top: 1px solid var(--florame-partner-surface-border, rgba(15, 23, 42, 0.08));\r\n      }\r\n      .florame-partner-google-review:first-of-type {\r\n        padding-top: 0;\r\n        border-top: none;\r\n      }\r\n      .florame-partner-google-review-top {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: baseline;\r\n        gap: 10px;\r\n      }\r\n      .florame-partner-google-review-author {\r\n        color: var(--florame-partner-copy-strong, var(--florame-partner-headline, #111827));\r\n        font-size: 12px;\r\n        font-weight: 900;\r\n      }\r\n      .florame-partner-google-review-rating {\r\n        color: var(--florame-partner-accent, #ff4d75);\r\n        font-size: 11px;\r\n        font-weight: 900;\r\n        white-space: nowrap;\r\n      }\r\n      .florame-partner-google-review-text {\r\n        margin: 0;\r\n        color: var(--florame-partner-copy, rgba(15, 23, 42, 0.74));\r\n        font-size: 12px;\r\n        line-height: 1.45;\r\n        font-weight: 650;\r\n      }\r\n      .florame-partner-google-review-time {\r\n        color: var(--florame-partner-copy, rgba(15, 23, 42, 0.62));\r\n        font-size: 10px;\r\n        font-weight: 800;\r\n      }\r\n      .florame-partner-hours {\r\n        display: grid;\r\n        gap: 8px;\r\n      }\r\n      .florame-partner-hours-row {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        gap: 12px;\r\n        padding: 10px 0;\r\n        border-bottom: 1px solid var(--florame-partner-divider, rgba(15, 23, 42, 0.08));\r\n        font-size: 12px;\r\n        color: var(--florame-partner-copy, rgba(15, 23, 42, 0.74));\r\n      }\r\n      .florame-partner-hours-row:last-child {\r\n        border-bottom: none;\r\n        padding-bottom: 0;\r\n      }\r\n      .florame-partner-hours-row strong {\r\n        color: var(--florame-partner-copy-strong, var(--florame-partner-headline, #111827));\r\n        white-space: nowrap;\r\n      }\r\n      .florame-partner-hours-block {\r\n        background: var(--florame-partner-hours-bg, var(--florame-partner-panel-bg, rgba(255,255,255,0.78)));\r\n        border-color: var(--florame-partner-hours-border, var(--florame-partner-surface-border, rgba(15, 23, 42, 0.08)));\r\n      }\r\n      .florame-partner-hours-block .florame-partner-detail-title,\r\n      .florame-partner-hours-block .florame-partner-hours-row strong {\r\n        color: var(--florame-partner-hours-copy, var(--florame-partner-copy-strong, #111827));\r\n      }\r\n      .florame-partner-hours-block .florame-partner-hours-row {\r\n        border-bottom-color: var(--florame-partner-hours-border, var(--florame-partner-divider, rgba(15, 23, 42, 0.08)));\r\n        color: var(--florame-partner-hours-copy-muted, var(--florame-partner-copy, rgba(15, 23, 42, 0.74)));\r\n      }\r\n      .florame-partner-delivery-slots-block {\r\n        background:\r\n          linear-gradient(135deg, var(--florame-partner-accent-soft, rgba(15,118,110,0.12)), transparent 64%),\r\n          var(--florame-partner-panel-bg, rgba(255,255,255,0.78));\r\n        border-color: var(--florame-partner-accent-border, var(--florame-partner-surface-border, rgba(15, 23, 42, 0.08)));\r\n      }\r\n      .florame-partner-delivery-slot-row span {\r\n        text-align: right;\r\n      }\r\n      .florame-partner-phones {\r\n        display: grid;\r\n        gap: 8px;\r\n        margin-top: 12px;\r\n      }\r\n      .florame-partner-contact-link {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: space-between;\r\n        min-height: 44px;\r\n        padding: 0 14px;\r\n        border-radius: 16px;\r\n        font-size: 13px;\r\n        font-weight: 700;\r\n        text-decoration: none;\r\n        color: var(--florame-partner-copy-strong, var(--florame-partner-headline, #111827));\r\n        background: var(--florame-partner-surface-soft, rgba(255,255,255,0.62));\r\n        border: 1px solid var(--florame-partner-surface-border, rgba(15, 23, 42, 0.08));\r\n      }\r\n      .florame-partner-contact-link span:last-child {\r\n        color: var(--florame-partner-copy, rgba(15, 23, 42, 0.74));\r\n      }\r\n      .florame-partner-actions {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        gap: 8px;\r\n        margin-top: 12px;\r\n      }\r\n      .florame-partner-cta {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        min-height: 44px;\r\n        padding: 0 14px;\r\n        border-radius: 999px;\r\n        text-decoration: none;\r\n        font-size: 12px;\r\n        font-weight: 800;\r\n        border: 1px solid transparent;\r\n      }\r\n      .florame-partner-cta-primary {\r\n        background: var(--florame-partner-cta-bg, linear-gradient(135deg, #111827, #1f2937));\r\n        color: var(--florame-partner-cta-fg, #fff);\r\n        box-shadow: 0 16px 28px -22px var(--florame-partner-accent, #ff4d75);\r\n      }\r\n      .florame-partner-cta-secondary {\r\n        background: var(--florame-partner-surface-soft, rgba(255,255,255,0.9));\r\n        border-color: var(--florame-partner-surface-border, rgba(15, 23, 42, 0.08));\r\n        color: var(--florame-partner-copy-strong, var(--florame-partner-headline, #111827));\r\n      }\r\n      [data-theme=\"dark\"] .florame-partner-detail-label {\r\n        color: rgba(255,255,255,0.46);\r\n      }\r\n      [data-theme=\"dark\"] .florame-partner-loading-line {\r\n        background: rgba(222, 205, 211, .72);\r\n        border-color: rgba(151, 126, 136, .08);\r\n      }\r\n      [data-theme=\"dark\"] .florame-partner-detail-title,\r\n      [data-theme=\"dark\"] .florame-partner-address,\r\n      [data-theme=\"dark\"] .florame-partner-coverage-row strong,\r\n      [data-theme=\"dark\"] .florame-partner-google-review-author,\r\n      [data-theme=\"dark\"] .florame-partner-hours-row strong,\r\n      [data-theme=\"dark\"] .florame-partner-contact-link {\r\n        color: #fff;\r\n      }\r\n      [data-theme=\"dark\"] .florame-partner-address,\r\n      [data-theme=\"dark\"] .florame-partner-coverage,\r\n      [data-theme=\"dark\"] .florame-partner-google-reviews,\r\n      [data-theme=\"dark\"] .florame-partner-story,\r\n      [data-theme=\"dark\"] .florame-partner-promise,\r\n      [data-theme=\"dark\"] .florame-partner-contact-link,\r\n      [data-theme=\"dark\"] .florame-partner-cta-secondary {\r\n        background: var(--florame-partner-dark-surface, rgba(255,255,255,0.06));\r\n        border-color: var(--florame-partner-dark-border, rgba(255,255,255,0.09));\r\n      }\r\n      [data-theme=\"dark\"] .florame-partner-google-review {\r\n        border-top-color: var(--florame-partner-dark-border, rgba(255,255,255,0.08));\r\n      }\r\n      [data-theme=\"dark\"] .florame-partner-coverage-row span {\r\n        color: rgba(255,255,255,0.7);\r\n      }\r\n      [data-theme=\"dark\"] .florame-partner-hours-row {\r\n        border-bottom-color: var(--florame-partner-dark-border, rgba(255,255,255,0.08));\r\n        color: rgba(255,255,255,0.7);\r\n      }\r\n      .florame-partner-hero-unified.is-offline {\r\n        --florame-partner-accent: #b52b3b;\r\n        --florame-partner-accent-soft: rgba(181,43,59,.14);\r\n        --florame-partner-accent-border: rgba(181,43,59,.28);\r\n        background: linear-gradient(145deg, #fffafa, #fff0f1);\r\n        border-color: rgba(181,43,59,.24);\r\n      }\r\n      .florame-partner-availability-state {\r\n        width: fit-content;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 7px;\r\n        margin-bottom: 8px;\r\n        color: #176b50;\r\n        font-size: 12px;\r\n        font-weight: 850;\r\n      }\r\n      .florame-partner-availability-state::before {\r\n        content: \"\";\r\n        width: 8px;\r\n        height: 8px;\r\n        border-radius: 50%;\r\n        background: currentColor;\r\n      }\r\n      .florame-partner-availability-state.is-expiring { color: #91600d; }\r\n      .florame-partner-availability-state.is-empty { color: #9a5411; }\r\n      .florame-partner-availability-state.is-offline { color: #a72234; }\r\n      .florame-partner-availability-state.is-unknown { color: #6f6870; }\r\n      .florame-partner-offline-panel {\r\n        display: grid;\r\n        gap: 12px;\r\n        width: 100%;\r\n        margin-top: 2px;\r\n        padding: 0;\r\n      }\r\n      .florame-partner-offline-summary {\r\n        display: grid;\r\n        grid-template-columns: 112px minmax(0, 1fr);\r\n        align-items: center;\r\n        gap: 12px;\r\n        width: min(100%, 410px);\r\n        margin-inline: auto;\r\n        padding: 6px 14px 8px 8px;\r\n        border: 1px solid rgba(181,43,59,.12);\r\n        border-radius: 22px;\r\n        background: rgba(255,255,255,.58);\r\n      }\r\n      .florame-partner-offline-mascot {\r\n        display: block;\r\n        width: 112px;\r\n        height: 112px;\r\n        object-fit: contain;\r\n        filter: drop-shadow(0 12px 18px rgba(116,39,55,.12));\r\n        animation: florameOfflineBreathe 3.4s ease-in-out infinite;\r\n      }\r\n      .florame-partner-offline-copy { min-width: 0; text-align: left; }\r\n      .florame-partner-offline-copy .florame-partner-availability-state { margin: 0 0 5px; }\r\n      .florame-partner-offline-copy p { margin: 0; color: #704f55; font-size: 14px; line-height: 1.38; }\r\n      .florame-partner-offline-cta {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        min-height: 46px;\r\n        margin-inline: auto;\r\n        padding: 0 18px;\r\n        border-radius: 999px;\r\n        background: #b52b3b;\r\n        box-shadow: 0 12px 24px rgba(181,43,59,.2);\r\n        color: #fff;\r\n        font-size: 13px;\r\n        font-weight: 850;\r\n        text-decoration: none;\r\n      }\r\n      .florame-partner-details-layer[hidden] { display: none !important; }\r\n      .florame-partner-details-layer {\r\n        position: fixed;\r\n        inset: 0;\r\n        z-index: 2147483000;\r\n        display: grid;\r\n        align-items: end;\r\n        opacity: 0;\r\n        transition: opacity .18s ease;\r\n      }\r\n      .florame-partner-details-layer.is-open { opacity: 1; }\r\n      .florame-partner-details-backdrop {\r\n        position: absolute;\r\n        inset: 0;\r\n        border: 0;\r\n        background: rgba(35, 24, 30, .42);\r\n        backdrop-filter: blur(7px);\r\n        -webkit-backdrop-filter: blur(7px);\r\n      }\r\n      .florame-partner-details-sheet {\r\n        --florame-partner-details-max-height: min(82dvh, 760px);\r\n        position: relative;\r\n        z-index: 1;\r\n        width: min(100%, 760px);\r\n        max-height: var(--florame-partner-details-max-height);\r\n        margin: 0 auto;\r\n        overflow: hidden;\r\n        border: 1px solid rgba(50, 36, 43, .1);\r\n        border-bottom: 0;\r\n        border-radius: 28px 28px 0 0;\r\n        background: #fffdfc;\r\n        color: #251c21;\r\n        box-shadow: 0 -28px 80px rgba(45, 24, 34, .26);\r\n        transform: translateY(28px);\r\n        transition: transform .22s cubic-bezier(.2,.75,.2,1);\r\n      }\r\n      .florame-partner-details-layer.is-open .florame-partner-details-sheet { transform: translateY(0); }\r\n      .florame-partner-details-handle {\r\n        width: 42px;\r\n        height: 5px;\r\n        margin: 9px auto 4px;\r\n        border-radius: 999px;\r\n        background: #d8cdd2;\r\n      }\r\n      .florame-partner-details-header {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: space-between;\r\n        gap: 14px;\r\n        padding: 10px 20px 16px;\r\n        border-bottom: 1px solid rgba(50, 36, 43, .09);\r\n      }\r\n      .florame-partner-details-identity {\r\n        min-width: 0;\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 11px;\r\n      }\r\n      .florame-partner-details-identity > span { min-width: 0; display: grid; gap: 1px; }\r\n      .florame-partner-details-identity small {\r\n        color: var(--florame-partner-accent, #cf2354);\r\n        font-size: 10px;\r\n        font-weight: 900;\r\n        letter-spacing: .08em;\r\n        text-transform: uppercase;\r\n      }\r\n      .florame-partner-details-identity strong {\r\n        overflow: hidden;\r\n        color: var(--florame-partner-copy-strong, #251c21);\r\n        font-size: 17px;\r\n        line-height: 1.15;\r\n        text-overflow: ellipsis;\r\n        white-space: nowrap;\r\n      }\r\n      .florame-partner-details-close {\r\n        width: 44px;\r\n        height: 44px;\r\n        flex: 0 0 auto;\r\n        display: grid;\r\n        place-items: center;\r\n        padding: 0;\r\n        border: 1px solid rgba(88, 54, 66, .12);\r\n        border-radius: 14px;\r\n        background: #fff;\r\n        color: #2b2227;\r\n        cursor: pointer;\r\n      }\r\n      .florame-partner-details-close svg {\r\n        width: 20px;\r\n        height: 20px;\r\n        stroke: currentColor;\r\n        stroke-width: 2;\r\n        stroke-linecap: round;\r\n      }\r\n      .florame-partner-details-scroll {\r\n        max-height: calc(var(--florame-partner-details-max-height) - 78px);\r\n        overflow: auto;\r\n        overscroll-behavior: contain;\r\n        padding: 18px 20px calc(26px + env(safe-area-inset-bottom, 0px));\r\n      }\r\n      .florame-partner-details-sheet .florame-partner-details {\r\n        width: 100%;\r\n        margin: 0;\r\n        padding: 0;\r\n        border: 0;\r\n      }\r\n      .florame-partner-details-sheet .florame-partner-detail-grid {\r\n        grid-template-columns: minmax(0, 1fr);\r\n        gap: 0;\r\n      }\r\n      .florame-partner-details-sheet .florame-partner-detail-block {\r\n        padding: 20px 0;\r\n        border: 0;\r\n        border-bottom: 1px solid rgba(88, 54, 66, .1);\r\n        border-radius: 0;\r\n        background: transparent;\r\n        box-shadow: none;\r\n      }\r\n      .florame-partner-details-sheet .florame-partner-detail-primary {\r\n        padding-top: 4px;\r\n      }\r\n      .florame-partner-details-sheet .florame-partner-detail-title {\r\n        max-width: 28ch;\r\n        font-size: clamp(22px, 5vw, 30px);\r\n        line-height: 1.08;\r\n        letter-spacing: -.035em;\r\n      }\r\n      .florame-partner-details-sheet .florame-partner-story {\r\n        max-width: 56ch;\r\n        margin-top: 10px;\r\n        padding: 0;\r\n        border: 0;\r\n        background: transparent;\r\n        color: #6f5d64;\r\n        font-size: 15px;\r\n        line-height: 1.52;\r\n        font-weight: 600;\r\n      }\r\n      .florame-partner-details-sheet .florame-partner-promise {\r\n        margin: 14px 0 0;\r\n        padding: 12px 0 0;\r\n        border: 0;\r\n        border-radius: 0;\r\n        background: transparent;\r\n      }\r\n      .florame-partner-details-sheet .florame-partner-promise strong {\r\n        font-size: 14px;\r\n        line-height: 1.5;\r\n      }\r\n      .florame-partner-contact-list {\r\n        display: grid;\r\n        margin-top: 20px;\r\n        border-top: 1px solid rgba(50, 36, 43, .1);\r\n      }\r\n      .florame-partner-contact-row {\r\n        min-width: 0;\r\n        display: grid;\r\n        grid-template-columns: 24px minmax(0, 1fr) auto;\r\n        align-items: center;\r\n        gap: 13px;\r\n        min-height: 64px;\r\n        padding: 12px 0;\r\n        border-bottom: 1px solid rgba(50, 36, 43, .1);\r\n        color: var(--florame-partner-copy-strong, #251c21);\r\n        text-decoration: none;\r\n      }\r\n      .florame-partner-contact-icon {\r\n        display: grid;\r\n        place-items: center;\r\n        color: var(--florame-partner-accent, #cf2354);\r\n      }\r\n      .florame-partner-contact-icon svg { width: 21px; height: 21px; }\r\n      .florame-partner-contact-copy {\r\n        min-width: 0;\r\n        display: grid;\r\n        gap: 2px;\r\n      }\r\n      .florame-partner-contact-copy small {\r\n        color: #8b717b;\r\n        font-size: 11px;\r\n        font-weight: 850;\r\n        letter-spacing: .045em;\r\n        text-transform: uppercase;\r\n      }\r\n      .florame-partner-contact-copy strong {\r\n        min-width: 0;\r\n        font-size: 15px;\r\n        line-height: 1.38;\r\n      }\r\n      .florame-partner-contact-row > em {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 5px;\r\n        color: var(--florame-partner-accent, #cf2354);\r\n        font-size: 13px;\r\n        font-style: normal;\r\n        font-weight: 850;\r\n      }\r\n      .florame-partner-contact-row > em svg { width: 15px; height: 15px; }\r\n      .florame-partner-quick-actions {\r\n        margin-top: 14px;\r\n      }\r\n      .florame-partner-details-sheet .florame-partner-cta {\r\n        min-height: 46px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 9px;\r\n        padding-inline: 18px;\r\n        border-radius: 12px;\r\n        font-size: 13px;\r\n      }\r\n      .florame-partner-details-sheet .florame-partner-cta svg { width: 18px; height: 18px; }\r\n      .florame-partner-details-sheet .florame-partner-cta svg:last-child { margin-left: auto; }\r\n      .florame-partner-details-sheet [data-partner-map-actions] { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 8px; margin-top: 0; }\r\n      .florame-partner-details-sheet [data-partner-map-actions] .florame-partner-cta { min-width: 0; padding: 10px 8px; gap: 6px; border-radius: 999px; font-size: 12px; justify-content: center; }\r\n      .florame-partner-details-sheet [data-partner-map-actions] .florame-partner-cta:only-child { grid-column: 1 / -1; }\r\n      .florame-partner-details-sheet [data-partner-map-actions] svg { flex-shrink: 0; }\r\n      .florame-partner-detail-disclosure {\r\n        padding: 0 !important;\r\n        border: 0;\r\n        border-bottom: 1px solid rgba(88, 54, 66, .1);\r\n        border-radius: 0;\r\n        background: transparent;\r\n        overflow: hidden;\r\n      }\r\n      .florame-partner-detail-disclosure + .florame-partner-detail-disclosure { margin-top: 0; }\r\n      .florame-partner-detail-disclosure > summary {\r\n        min-height: 64px;\r\n        display: grid;\r\n        grid-template-columns: 24px minmax(0, 1fr) 20px;\r\n        align-items: center;\r\n        gap: 13px;\r\n        padding: 11px 0;\r\n        color: var(--florame-partner-copy-strong, #251c21);\r\n        font-size: 15px;\r\n        font-weight: 850;\r\n        cursor: pointer;\r\n        list-style: none;\r\n      }\r\n      .florame-partner-detail-disclosure > summary::-webkit-details-marker { display: none; }\r\n      .florame-partner-disclosure-icon {\r\n        display: grid;\r\n        place-items: center;\r\n        color: var(--florame-partner-accent, #cf2354);\r\n      }\r\n      .florame-partner-disclosure-icon svg { width: 21px; height: 21px; }\r\n      .florame-partner-disclosure-copy {\r\n        min-width: 0;\r\n        display: grid;\r\n        gap: 3px;\r\n      }\r\n      .florame-partner-disclosure-copy strong { font-size: 15px; line-height: 1.25; }\r\n      .florame-partner-detail-disclosure > summary small {\r\n        color: #806b73;\r\n        font-size: 12px;\r\n        font-weight: 650;\r\n        line-height: 1.35;\r\n        white-space: normal;\r\n      }\r\n      .florame-partner-details-identity em {\r\n        min-width: 0;\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 5px;\r\n        overflow: hidden;\r\n        color: #74636a;\r\n        font-size: 12px;\r\n        font-style: normal;\r\n        font-weight: 700;\r\n        line-height: 1.3;\r\n        text-overflow: ellipsis;\r\n        white-space: nowrap;\r\n      }\r\n      .florame-partner-details-location-icon { width: 13px; height: 13px; flex: 0 0 auto; }\r\n      .florame-partner-disclosure-chevron {\r\n        display: grid;\r\n        place-items: center;\r\n        color: #806b73;\r\n        transition: transform .18s ease;\r\n      }\r\n      .florame-partner-disclosure-chevron svg { width: 19px; height: 19px; }\r\n      .florame-partner-detail-disclosure[open] > summary .florame-partner-disclosure-chevron { transform: rotate(180deg); }\r\n      .florame-partner-detail-disclosure__body {\r\n        padding: 2px 0 18px 37px;\r\n        border-top: 0;\r\n      }\r\n      .florame-partner-detail-disclosure__body .florame-partner-hours { padding-top: 2px; }\r\n      .florame-partner-detail-disclosure__body .florame-partner-coverage,\r\n      .florame-partner-detail-disclosure__body .florame-partner-google-reviews {\r\n        margin: 0;\r\n        padding: 2px 0 0;\r\n        border: 0;\r\n        border-radius: 0;\r\n        background: transparent;\r\n      }\r\n      body.florame-partner-details-open { overflow: hidden; }\r\n      .florame-partner-reviews-layer[hidden] { display: none !important; }\r\n      .florame-partner-reviews-layer {\r\n        position: fixed;\r\n        inset: 0;\r\n        z-index: 2147483010;\r\n        display: grid;\r\n        align-items: end;\r\n        opacity: 0;\r\n        transition: opacity .18s ease;\r\n      }\r\n      .florame-partner-reviews-layer.is-open { opacity: 1; }\r\n      .florame-partner-reviews-backdrop {\r\n        position: absolute;\r\n        inset: 0;\r\n        border: 0;\r\n        background: rgba(35, 24, 30, .42);\r\n        backdrop-filter: blur(7px);\r\n        -webkit-backdrop-filter: blur(7px);\r\n      }\r\n      .florame-partner-reviews-sheet {\r\n        position: relative;\r\n        z-index: 1;\r\n        width: min(100%, 680px);\r\n        max-height: min(84dvh, 780px);\r\n        margin: 0 auto;\r\n        overflow: hidden;\r\n        border: 1px solid rgba(88, 54, 66, .1);\r\n        border-bottom: 0;\r\n        border-radius: 28px 28px 0 0;\r\n        background: #fffafc;\r\n        color: #251c21;\r\n        box-shadow: 0 -28px 80px rgba(45, 24, 34, .26);\r\n        transform: translateY(28px);\r\n        transition: transform .22s cubic-bezier(.2,.75,.2,1);\r\n      }\r\n      .florame-partner-reviews-layer.is-open .florame-partner-reviews-sheet { transform: translateY(0); }\r\n      .florame-partner-reviews-handle {\r\n        width: 42px;\r\n        height: 5px;\r\n        margin: 9px auto 4px;\r\n        border-radius: 999px;\r\n        background: #d8cdd2;\r\n      }\r\n      .florame-partner-reviews-header {\r\n        min-height: 64px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: space-between;\r\n        gap: 14px;\r\n        padding: 8px 16px 12px 18px;\r\n        border-bottom: 1px solid rgba(88, 54, 66, .09);\r\n      }\r\n      .florame-partner-reviews-heading {\r\n        min-width: 0;\r\n        display: grid;\r\n        gap: 2px;\r\n      }\r\n      .florame-partner-reviews-heading small {\r\n        color: var(--florame-partner-accent, #cf2354);\r\n        font-size: 10px;\r\n        font-weight: 900;\r\n        letter-spacing: .09em;\r\n        text-transform: uppercase;\r\n      }\r\n      .florame-partner-reviews-heading strong {\r\n        overflow: hidden;\r\n        color: var(--florame-partner-copy-strong, #251c21);\r\n        font-size: 18px;\r\n        line-height: 1.15;\r\n        text-overflow: ellipsis;\r\n        white-space: nowrap;\r\n      }\r\n      .florame-partner-reviews-close {\r\n        width: 44px;\r\n        height: 44px;\r\n        flex: 0 0 auto;\r\n        display: grid;\r\n        place-items: center;\r\n        padding: 0;\r\n        border: 1px solid rgba(88, 54, 66, .12);\r\n        border-radius: 14px;\r\n        background: #fff;\r\n        color: #2b2227;\r\n        cursor: pointer;\r\n      }\r\n      .florame-partner-reviews-close svg {\r\n        width: 20px;\r\n        height: 20px;\r\n        stroke: currentColor;\r\n        stroke-width: 2;\r\n        stroke-linecap: round;\r\n      }\r\n      .florame-partner-reviews-scroll {\r\n        max-height: calc(min(84dvh, 780px) - 78px);\r\n        overflow: auto;\r\n        overscroll-behavior: contain;\r\n        padding: 0 18px calc(24px + env(safe-area-inset-bottom, 0px));\r\n      }\r\n      .florame-partner-reviews-summary {\r\n        display: grid;\r\n        grid-template-columns: minmax(118px, .72fr) minmax(0, 1.28fr);\r\n        gap: 22px;\r\n        align-items: center;\r\n        padding: 20px 0;\r\n        border-bottom: 1px solid rgba(88, 54, 66, .1);\r\n      }\r\n      .florame-partner-reviews-score {\r\n        display: grid;\r\n        gap: 4px;\r\n      }\r\n      .florame-partner-reviews-score strong {\r\n        color: var(--florame-partner-copy-strong, #251c21);\r\n        font-size: 42px;\r\n        font-weight: 950;\r\n        letter-spacing: -.055em;\r\n        line-height: .95;\r\n      }\r\n      .florame-partner-reviews-stars {\r\n        display: inline-flex;\r\n        gap: 1px;\r\n        font-size: 15px;\r\n        letter-spacing: .08em;\r\n      }\r\n      .florame-partner-reviews-stars > span {\r\n        color: transparent;\r\n        background: linear-gradient(\r\n          90deg,\r\n          #d92f68 0 var(--star-fill, 0%),\r\n          rgba(124, 98, 108, .22) var(--star-fill, 0%) 100%\r\n        );\r\n        -webkit-background-clip: text;\r\n        background-clip: text;\r\n      }\r\n      .florame-partner-reviews-score span:last-child {\r\n        color: #6d6067;\r\n        font-size: 12px;\r\n        font-weight: 750;\r\n      }\r\n      .florame-partner-reviews-distribution {\r\n        display: grid;\r\n        gap: 6px;\r\n      }\r\n      .florame-partner-reviews-distribution-row {\r\n        display: grid;\r\n        grid-template-columns: 24px minmax(0, 1fr) 28px;\r\n        align-items: center;\r\n        gap: 8px;\r\n        color: #6d6067;\r\n        font-size: 11px;\r\n        font-weight: 800;\r\n      }\r\n      .florame-partner-reviews-bar {\r\n        height: 7px;\r\n        overflow: hidden;\r\n        border-radius: 999px;\r\n        background: #eee5e9;\r\n      }\r\n      .florame-partner-reviews-bar > span {\r\n        display: block;\r\n        height: 100%;\r\n        border-radius: inherit;\r\n        background: linear-gradient(90deg, #ff4d75, #d92f68);\r\n      }\r\n      .florame-partner-reviews-tags {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        gap: 7px;\r\n        padding: 14px 0 0;\r\n      }\r\n      .florame-partner-reviews-tag {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        min-height: 30px;\r\n        padding: 0 10px;\r\n        border: 1px solid rgba(217,47,104,.15);\r\n        border-radius: 999px;\r\n        background: rgba(255,77,117,.06);\r\n        color: #8f254a;\r\n        font-size: 11px;\r\n        font-weight: 850;\r\n      }\r\n      .florame-partner-reviews-list {\r\n        display: grid;\r\n      }\r\n      .florame-partner-review {\r\n        display: grid;\r\n        gap: 8px;\r\n        padding: 18px 0;\r\n        border-bottom: 1px solid rgba(88, 54, 66, .1);\r\n      }\r\n      .florame-partner-review-head {\r\n        display: flex;\r\n        align-items: flex-start;\r\n        justify-content: space-between;\r\n        gap: 12px;\r\n      }\r\n      .florame-partner-review-author {\r\n        display: grid;\r\n        gap: 2px;\r\n      }\r\n      .florame-partner-review-author strong {\r\n        color: var(--florame-partner-copy-strong, #251c21);\r\n        font-size: 14px;\r\n        line-height: 1.25;\r\n      }\r\n      .florame-partner-review-author span,\r\n      .florame-partner-review-date {\r\n        color: #796b72;\r\n        font-size: 11px;\r\n        font-weight: 700;\r\n      }\r\n      .florame-partner-review-rating {\r\n        color: #d92f68;\r\n        font-size: 13px;\r\n        font-weight: 900;\r\n        white-space: nowrap;\r\n      }\r\n      .florame-partner-review-body {\r\n        margin: 0;\r\n        color: #4f444a;\r\n        font-size: 14px;\r\n        font-weight: 600;\r\n        line-height: 1.55;\r\n      }\r\n      .florame-partner-review-tags {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        gap: 6px;\r\n      }\r\n      .florame-partner-review-tags span {\r\n        color: #7b334e;\r\n        font-size: 11px;\r\n        font-weight: 800;\r\n      }\r\n      .florame-partner-review-response {\r\n        display: grid;\r\n        gap: 4px;\r\n        margin-top: 3px;\r\n        padding: 4px 0 4px 12px;\r\n        border-left: 3px solid rgba(217,47,104,.24);\r\n      }\r\n      .florame-partner-review-response strong {\r\n        color: #8f254a;\r\n        font-size: 11px;\r\n        font-weight: 900;\r\n      }\r\n      .florame-partner-review-response p {\r\n        margin: 0;\r\n        color: #5e5057;\r\n        font-size: 13px;\r\n        line-height: 1.45;\r\n      }\r\n      .florame-partner-review-media-grid {\r\n        display: grid;\r\n        grid-template-columns: repeat(4, 76px);\r\n        gap: 8px;\r\n        max-width: 100%;\r\n        overflow-x: auto;\r\n        scrollbar-width: none;\r\n      }\r\n      .florame-partner-review-media-grid::-webkit-scrollbar { display: none; }\r\n      .florame-partner-review-media {\r\n        width: 76px;\r\n        height: 76px;\r\n        display: block;\r\n        border-radius: 14px;\r\n        object-fit: cover;\r\n        background: #f1e8ec;\r\n      }\r\n      .florame-partner-reviews-empty,\r\n      .florame-partner-reviews-error {\r\n        display: grid;\r\n        gap: 6px;\r\n        padding: 30px 0;\r\n        text-align: center;\r\n      }\r\n      .florame-partner-reviews-empty strong,\r\n      .florame-partner-reviews-error strong {\r\n        color: var(--florame-partner-copy-strong, #251c21);\r\n        font-size: 18px;\r\n      }\r\n      .florame-partner-reviews-empty span,\r\n      .florame-partner-reviews-error span {\r\n        color: #796b72;\r\n        font-size: 13px;\r\n        line-height: 1.45;\r\n      }\r\n      .florame-partner-reviews-load-more {\r\n        width: 100%;\r\n        min-height: 46px;\r\n        margin-top: 14px;\r\n        border: 1px solid rgba(88,54,66,.14);\r\n        border-radius: 14px;\r\n        background: #fff;\r\n        color: #342930;\r\n        cursor: pointer;\r\n        font-family: inherit;\r\n        font-size: 13px;\r\n        font-weight: 850;\r\n        line-height: 1;\r\n      }\r\n      .florame-partner-reviews-loading {\r\n        display: grid;\r\n        gap: 18px;\r\n        padding: 20px 0;\r\n      }\r\n      .florame-partner-reviews-loading-summary,\r\n      .florame-partner-reviews-loading-row {\r\n        position: relative;\r\n        overflow: hidden;\r\n        border-radius: 14px;\r\n        background: #eee5e9;\r\n      }\r\n      .florame-partner-reviews-loading-summary { height: 116px; }\r\n      .florame-partner-reviews-loading-row { height: 132px; }\r\n      .florame-partner-reviews-loading-summary::after,\r\n      .florame-partner-reviews-loading-row::after {\r\n        content: \"\";\r\n        position: absolute;\r\n        inset: 0;\r\n        transform: translateX(-100%);\r\n        background: linear-gradient(90deg, transparent, rgba(255,255,255,.66), transparent);\r\n        animation: floramePartnerLoadingSweep 1.15s ease-in-out infinite;\r\n      }\r\n      body.florame-partner-reviews-open { overflow: hidden; }\r\n      @media (max-width: 900px) {\r\n        .florame-partner-detail-grid,\r\n        .florame-partner-details-sheet .florame-partner-detail-grid { grid-template-columns: 1fr; }\r\n        .app-header.partner-storefront-active .app-header-surface,\r\n        .app-header.partner-storefront-active.partner-storefront-expanded .app-header-surface {\r\n          --florame-partner-art-height: 330px;\r\n          background-position: center top;\r\n        }\r\n      }\r\n      @media (max-width: 640px) {\r\n        .florame-partner-details-sheet {\r\n          --florame-partner-details-max-height: min(\r\n            calc(100dvh - max(40px, env(safe-area-inset-top, 0px))),\r\n            760px\r\n          );\r\n          border-radius: 26px 26px 0 0;\r\n        }\r\n        .florame-partner-details-scroll {\r\n          max-height: calc(var(--florame-partner-details-max-height) - 74px);\r\n          padding: 12px 18px calc(22px + env(safe-area-inset-bottom, 0px));\r\n        }\r\n        .florame-partner-details-header { padding: 8px 14px 12px; }\r\n        .florame-partner-details-sheet .florame-partner-logo { width: 40px; height: 40px; }\r\n        .florame-partner-details-sheet .florame-partner-detail-block { padding: 17px 0; }\r\n        .florame-partner-details-sheet .florame-partner-detail-primary { padding-top: 6px; }\r\n        .florame-partner-contact-row { grid-template-columns: 22px minmax(0, 1fr) auto; gap: 11px; }\r\n        .florame-partner-contact-row > em { font-size: 12px; }\r\n        .florame-partner-detail-disclosure__body { padding-left: 33px; }\r\n        .florame-partner-reviews-sheet { max-height: 84dvh; border-radius: 24px 24px 0 0; }\r\n        .florame-partner-reviews-scroll { max-height: calc(84dvh - 74px); padding-inline: 16px; }\r\n        .florame-partner-reviews-header { padding: 8px 14px 12px; }\r\n        .florame-partner-reviews-summary { grid-template-columns: 102px minmax(0, 1fr); gap: 14px; }\r\n        .florame-partner-reviews-score strong { font-size: 36px; }\r\n        .florame-partner-logo,\r\n        .florame-partner-florame-logo,\r\n        .florame-partner-loading-logo { width: 36px; height: 36px; border-radius: 11px; }\r\n        .florame-partner-loading-identity { min-height: 36px; }\r\n        .app-header.partner-storefront-active { padding: 0 !important; border-radius: 0 !important; }\r\n        .app-header.partner-storefront-active .header-content { gap: 8px; }\r\n        .app-header.partner-storefront-active .hero-main-row { gap: 10px; }\r\n        .app-header.partner-storefront-active .app-greeting { margin: 6px auto 2px; max-width: 12ch; font-size: clamp(28px, 8.2vw, 36px) !important; line-height: .98 !important; letter-spacing: -.055em; }\r\n        .app-header.partner-storefront-active .hero-utility-row { margin-top: 6px; }\r\n        .florame-partner-identity-row { justify-content:flex-start;gap: 9px; }\r\n        .florame-partner-logos-row { gap: 6px; }\r\n        .florame-partner-brand-x { font-size: 12px; }\r\n        .florame-partner-identity-name { max-width: 16ch; font-size: 13px; }\r\n        .florame-partner-hero-unified { gap: 5px; }\r\n        .florame-partner-moment { min-height:0; border-radius:0; }\r\n        .florame-partner-moment::after,\r\n        .florame-partner-hero-unified.is-dark-moment .florame-partner-moment::after { content:none; }\r\n        .florame-partner-moment-copy { width: 72%; min-height:0; gap: 6px; padding: 8px 0 5px; }\r\n        .florame-partner-moment-copy > strong { max-width: 15ch; font-size: clamp(23px, 7vw, 30px); }\r\n        .florame-partner-moment-copy > p { display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:12px;line-height:1.35; }\r\n        .florame-partner-moment-eyebrow { font-size: 9px; }\r\n        .florame-partner-hero-meta { gap: 6px; }\r\n        .florame-partner-availability-state { margin-bottom: 1px; font-size: 13px; }\r\n        .florame-partner-hero-note { display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2;max-width:31ch;font-size:12px;line-height:1.35; }\r\n        .florame-partner-badges { display:none; }\r\n        .florame-partner-hero-action { min-height:44px;font-size:12px;letter-spacing:.06em; }\r\n        .florame-partner-offline-summary { grid-template-columns: 92px minmax(0,1fr); gap: 8px; padding: 4px 11px 5px 4px; }\r\n        .florame-partner-offline-mascot { width:92px;height:92px; }\r\n        .florame-partner-offline-copy p { font-size:13px; }\r\n        .florame-partner-hours-row,\r\n        .florame-partner-contact-link { padding-inline: 14px; }\r\n      }\r\n      @keyframes florameOfflineBreathe {\r\n        0%, 100% { transform: translateY(0) rotate(-1deg); }\r\n        50% { transform: translateY(-4px) rotate(1deg); }\r\n      }\r\n      @media (prefers-reduced-motion: reduce) {\r\n        .florame-partner-offline-mascot { animation: none; }\r\n      }\r\n      @keyframes floramePartnerLoadingPulse {\r\n        0%, 100% { opacity: 0.44; transform: scale(0.86); }\r\n        50% { opacity: 1; transform: scale(1); }\r\n      }\r\n      @keyframes floramePartnerLoadingSweep {\r\n        100% { transform: translateX(100%); }\r\n      }\r\n      @keyframes floramePartnerArtworkFade {\r\n        from { opacity: 1; }\r\n        to { opacity: 0; }\r\n      }\r\n    `;\r\n    document.head.appendChild(style);\r\n  }\r\n\r\n  function renderPartnerLoading(ctx) {\r\n    const context = ctx || getContext();\r\n    const path = getCurrentPathname();\r\n    const barePath = stripStorefrontLocale(path);\r\n    const isHome = barePath === storefrontPathname(CONFIG.homePath, '/')\r\n      || !!getPartnerPageSlug(path)\r\n      || (getSingleSegment(path) && !new URLSearchParams(window.location.search).get('mode'));\r\n    if (!isHome || !context.active) return false;\r\n\r\n    const heroSlot = document.getElementById('floramePartnerHeroSlot');\r\n    const heroTopSlot = document.getElementById('floramePartnerHeroTopSlot');\r\n    const heroSecondarySlot = document.getElementById('floramePartnerSecondarySlot');\r\n    const fulfillment = document.querySelector('[data-home-partner-fulfillment]');\r\n    const greeting = document.querySelector('.app-greeting');\r\n    const titleLockup = document.querySelector('.hero-title-lockup');\r\n    const appHeader = document.querySelector('.app-header');\r\n    if (!greeting || !heroSlot || !heroTopSlot || !titleLockup) return false;\r\n\r\n    injectStyles();\r\n\r\n    titleLockup.classList.add('hero-title-lockup--partner', 'hero-title-lockup--loading');\r\n    greeting.classList.add('app-greeting--partner', 'app-greeting--loading');\r\n    greeting.hidden = true;\r\n    greeting.textContent = '';\r\n    greeting.style.removeProperty('color');\r\n\r\n    if (appHeader) {\r\n      appHeader.classList.add('partner-storefront-active', 'partner-storefront-loading');\r\n      appHeader.classList.remove('partner-storefront-offline', 'partner-storefront-expanded', 'partner-storefront-dark-moment');\r\n      Array.from(appHeader.classList).forEach((className) => {\r\n        if (className.indexOf('partner-storefront-moment-') === 0) appHeader.classList.remove(className);\r\n      });\r\n      const bootMomentKey = String(\r\n        window.FloramePartnerBoot?.momentKey\r\n        || appHeader.style.getPropertyValue('--florame-partner-moment-art-key')\r\n        || ''\r\n      ).trim();\r\n      const loadingMoment = partnerCardMoment('live');\r\n      const loadingKey = window.__florameThemeConfig?.partnerCardAssets?.[bootMomentKey]\r\n        ? bootMomentKey\r\n        : loadingMoment.key;\r\n      const loadingAsset = String(window.__florameThemeConfig?.partnerCardAssets?.[loadingKey] || loadingMoment.assetUrl || '').replace(/[\"\\\\\\n\\r]/g, '');\r\n      appHeader.classList.add(`partner-storefront-moment-${loadingKey}`);\r\n      appHeader.style.setProperty('--florame-partner-moment-art-key', loadingKey);\r\n      if (loadingAsset) appHeader.style.setProperty('--florame-partner-moment-art', `url(\"${loadingAsset}\")`);\r\n    }\r\n\r\n    heroTopSlot.hidden = false;\r\n    if (!heroTopSlot.querySelector('[data-florame-skeleton=\"partner-header\"]')) {\r\n      heroTopSlot.innerHTML = window.FlorameSkeletons.partnerHeader;\r\n    }\r\n    heroSlot.hidden = false;\r\n    if (!heroSlot.querySelector('[data-florame-skeleton=\"partner-hero\"]')) {\r\n      heroSlot.innerHTML = window.FlorameSkeletons.partnerHero;\r\n    }\r\n    if (heroSecondarySlot) {\r\n      heroSecondarySlot.hidden = true;\r\n      heroSecondarySlot.classList.remove('is-partner-loading');\r\n      heroSecondarySlot.innerHTML = '';\r\n    }\r\n    if (fulfillment) {\r\n      fulfillment.hidden = false;\r\n      fulfillment.classList.add('is-partner-loading');\r\n      fulfillment.inert = true;\r\n      fulfillment.setAttribute('aria-busy', 'true');\r\n    }\r\n    return true;\r\n  }\r\n\r\n  let partnerDetailsKeydownHandler = null;\r\n  let partnerDetailsCloseHandler = null;\r\n  let partnerDetailsCloseTimer = null;\r\n\r\n  function removePartnerDetailsLayer() {\r\n    if (partnerDetailsCloseTimer) window.clearTimeout(partnerDetailsCloseTimer);\r\n    partnerDetailsCloseTimer = null;\r\n    partnerDetailsCloseHandler = null;\r\n    const layer = document.getElementById('floramePartnerDetailsLayer');\r\n    if (layer) layer.remove();\r\n    if (partnerDetailsKeydownHandler) {\r\n      document.removeEventListener('keydown', partnerDetailsKeydownHandler);\r\n      partnerDetailsKeydownHandler = null;\r\n    }\r\n    document.body.classList.remove('florame-partner-details-open');\r\n  }\r\n\r\n  function mountPartnerDetailsSheet(options) {\r\n    removePartnerDetailsLayer();\r\n    if (!options || !options.toggle || !options.html) return;\r\n    const layer = document.createElement('div');\r\n    layer.id = 'floramePartnerDetailsLayer';\r\n    layer.className = 'florame-partner-details-layer';\r\n    layer.hidden = true;\r\n    layer.innerHTML = `\r\n      <button type=\"button\" class=\"florame-partner-details-backdrop\" data-florame-partner-details-close aria-label=\"${partnerText('Chiudi orari e contatti', 'Close hours and contacts')}\"></button>\r\n      <section class=\"florame-partner-details-sheet\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"floramePartnerDetailsTitle\">\r\n        <div class=\"florame-partner-details-handle\" aria-hidden=\"true\"></div>\r\n        <header class=\"florame-partner-details-header\">\r\n          <div class=\"florame-partner-details-identity\">\r\n            ${buildLogoMarkup('florame-partner-logo', options.logo || '', options.name || 'Partner', getInitials(options.name || '', 'P'))}\r\n            <span>\r\n              <small>${partnerText('Fiorista Florame', 'Florame florist')}</small>\r\n              <strong id=\"floramePartnerDetailsTitle\">${escapeHtml(options.name || partnerText('Orari e contatti', 'Hours and contacts'))}</strong>\r\n              ${options.location ? `<em>${partnerSurfaceIcon('location', 'florame-partner-details-location-icon')}${escapeHtml(options.location)}</em>` : ''}\r\n            </span>\r\n          </div>\r\n          <button type=\"button\" class=\"florame-partner-details-close\" data-florame-partner-details-close aria-label=\"${partnerText('Chiudi', 'Close')}\">\r\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\"><path d=\"m6 6 12 12M18 6 6 18\"></path></svg>\r\n          </button>\r\n        </header>\r\n        <div class=\"florame-partner-details-scroll\">\r\n          <div class=\"florame-partner-details\">${options.html}</div>\r\n        </div>\r\n      </section>\r\n    `;\r\n    if (options.themeSource && options.themeSource.style) {\r\n      Array.from(options.themeSource.style).forEach((property) => {\r\n        if (String(property).startsWith('--florame-partner-')) {\r\n          layer.style.setProperty(property, options.themeSource.style.getPropertyValue(property));\r\n        }\r\n      });\r\n    }\r\n    document.body.appendChild(layer);\r\n\r\n    const toggle = options.toggle;\r\n    const sheet = layer.querySelector('.florame-partner-details-sheet');\r\n    const scrollArea = layer.querySelector('.florame-partner-details-scroll');\r\n    const closeButton = layer.querySelector('.florame-partner-details-close');\r\n\r\n    const close = (restoreFocus = true, immediate = false) => {\r\n      if (layer.hidden) return;\r\n      if (partnerDetailsCloseTimer) window.clearTimeout(partnerDetailsCloseTimer);\r\n      partnerDetailsCloseTimer = null;\r\n      layer.classList.remove('is-open');\r\n      document.body.classList.remove('florame-partner-details-open');\r\n      toggle.setAttribute('aria-expanded', 'false');\r\n      const finish = () => {\r\n        layer.hidden = true;\r\n        if (restoreFocus) {\r\n          try { toggle.focus({ preventScroll: true }); } catch (_) {}\r\n        }\r\n      };\r\n      if (immediate) finish();\r\n      else partnerDetailsCloseTimer = window.setTimeout(finish, 180);\r\n    };\r\n    const open = () => {\r\n      if (partnerDetailsCloseTimer) window.clearTimeout(partnerDetailsCloseTimer);\r\n      partnerDetailsCloseTimer = null;\r\n      partnerReviewsCloseHandler?.(false, true);\r\n      partnerSignalCloseHandler?.(false, true);\r\n      layer.hidden = false;\r\n      document.body.classList.add('florame-partner-details-open');\r\n      toggle.setAttribute('aria-expanded', 'true');\r\n      window.requestAnimationFrame(() => layer.classList.add('is-open'));\r\n      window.setTimeout(() => {\r\n        try { closeButton?.focus({ preventScroll: true }); } catch (_) {}\r\n      }, 40);\r\n    };\r\n    partnerDetailsCloseHandler = close;\r\n\r\n    toggle.onclick = open;\r\n    layer.addEventListener('click', (event) => {\r\n      if (event.target && event.target.closest('[data-florame-partner-details-close]')) close(true);\r\n    });\r\n    partnerDetailsKeydownHandler = (event) => {\r\n      if (event.key === 'Escape' && !layer.hidden) close(true);\r\n    };\r\n    document.addEventListener('keydown', partnerDetailsKeydownHandler);\r\n  }\r\n\r\n  let partnerReviewsKeydownHandler = null;\r\n  let partnerReviewsCloseHandler = null;\r\n  let partnerReviewsCloseTimer = null;\r\n\r\n  function removePartnerReviewsLayer() {\r\n    if (partnerReviewsCloseTimer) window.clearTimeout(partnerReviewsCloseTimer);\r\n    partnerReviewsCloseTimer = null;\r\n    partnerReviewsCloseHandler = null;\r\n    const layer = document.getElementById('floramePartnerReviewsLayer');\r\n    if (layer) layer.remove();\r\n    if (partnerReviewsKeydownHandler) {\r\n      document.removeEventListener('keydown', partnerReviewsKeydownHandler);\r\n      partnerReviewsKeydownHandler = null;\r\n    }\r\n    document.body.classList.remove('florame-partner-reviews-open');\r\n  }\r\n\r\n  function formatPartnerReviewDate(value) {\r\n    if (!value) return '';\r\n    try {\r\n      const date = typeof value === 'object' && typeof value.toDate === 'function'\r\n        ? value.toDate()\r\n        : new Date(value);\r\n      if (Number.isNaN(date.getTime())) return '';\r\n      return new Intl.DateTimeFormat(getNativeLanguage() === 'en' ? 'en-US' : 'it-IT', {\r\n        month: 'short',\r\n        year: 'numeric'\r\n      }).format(date);\r\n    } catch (_) {\r\n      return '';\r\n    }\r\n  }\r\n\r\n  function partnerReviewResponseText(value) {\r\n    if (!value) return '';\r\n    if (typeof value === 'string') return value.trim();\r\n    return String(value.body || value.text || value.message || '').trim();\r\n  }\r\n\r\n  function partnerReviewMediaUrl(value) {\r\n    if (!value) return '';\r\n    if (typeof value === 'string') return /^https:\\/\\//i.test(value) ? value : '';\r\n    const url = String(value.thumbnailUrl || value.publicUrl || value.url || '').trim();\r\n    return /^https:\\/\\//i.test(url) ? url : '';\r\n  }\r\n\r\n  function partnerReviewMediaEntry(value) {\r\n    const url = partnerReviewMediaUrl(value);\r\n    if (!url) return null;\r\n    return {\r\n      url,\r\n      type: typeof value === 'object' && value?.type === 'video' ? 'video' : 'image'\r\n    };\r\n  }\r\n\r\n  function renderPartnerAverageStars(average) {\r\n    const score = Math.max(0, Math.min(5, Number(average || 0) || 0));\r\n    return Array.from({ length: 5 }, (_, index) => {\r\n      const fill = Math.max(0, Math.min(100, (score - index) * 100));\r\n      return `<span style=\"--star-fill:${fill.toFixed(2)}%\" aria-hidden=\"true\">\u2605</span>`;\r\n    }).join('');\r\n  }\r\n\r\n  function renderPartnerReviewsPayload(container, payload, options = {}) {\r\n    if (!container) return;\r\n    const aggregate = normalizePartnerReviewAggregate(payload?.aggregate || options.aggregate || {});\r\n    const reviews = Array.isArray(payload?.reviews) ? payload.reviews : [];\r\n    const count = Number(aggregate?.ratingCount || 0) || 0;\r\n    if (!count && !reviews.length) {\r\n      container.innerHTML = `\r\n        <div class=\"florame-partner-reviews-empty\">\r\n          <strong>${partnerText('Nuovo su florame.ai', 'New on florame.ai')}</strong>\r\n          <span>${partnerText('Non ci sono ancora recensioni verificate. Il prossimo ordine potrebbe essere il primo.', 'There are no verified reviews yet. The next order could be the first.')}</span>\r\n        </div>\r\n      `;\r\n      return;\r\n    }\r\n\r\n    const distribution = aggregate?.distribution || normalizeReviewDistribution({});\r\n    const maxDistribution = Math.max(1, ...Object.values(distribution));\r\n    const average = Math.max(0, Number(aggregate?.average || 0) || 0);\r\n    const locale = getNativeLanguage() === 'en' ? 'en-US' : 'it-IT';\r\n    const scoreLabel = average.toLocaleString(locale, { minimumFractionDigits: 1, maximumFractionDigits: 1 });\r\n    const verifiedLabel = count === 1\r\n      ? partnerText('1 ordine verificato', '1 verified order')\r\n      : partnerText(`${count} ordini verificati`, `${count} verified orders`);\r\n    const summary = count >= 5 && average ? `\r\n      <div class=\"florame-partner-reviews-summary\">\r\n        <div class=\"florame-partner-reviews-score\">\r\n          <strong>${escapeHtml(scoreLabel)}</strong>\r\n          <span class=\"florame-partner-reviews-stars\" aria-label=\"${escapeHtml(partnerText(`${scoreLabel} su 5`, `${scoreLabel} out of 5`))}\">${renderPartnerAverageStars(average)}</span>\r\n          <span>${escapeHtml(verifiedLabel)}</span>\r\n        </div>\r\n        <div class=\"florame-partner-reviews-distribution\" aria-label=\"${partnerText('Distribuzione delle valutazioni', 'Rating distribution')}\">\r\n          ${[5, 4, 3, 2, 1].map((star) => {\r\n            const value = Number(distribution[star] || 0) || 0;\r\n            const width = Math.max(0, Math.min(100, (value / maxDistribution) * 100));\r\n            return `\r\n              <div class=\"florame-partner-reviews-distribution-row\">\r\n                <span>${star}\u2605</span>\r\n                <span class=\"florame-partner-reviews-bar\"><span style=\"width:${width.toFixed(2)}%\"></span></span>\r\n                <span>${value}</span>\r\n              </div>\r\n            `;\r\n          }).join('')}\r\n        </div>\r\n      </div>\r\n    ` : `\r\n      <div class=\"florame-partner-reviews-summary\">\r\n        <div class=\"florame-partner-reviews-score\">\r\n          <strong>${escapeHtml(String(count))}</strong>\r\n          <span>${escapeHtml(verifiedLabel)}</span>\r\n        </div>\r\n        <div class=\"florame-partner-reviews-empty\" style=\"padding:0;text-align:left\">\r\n          <strong>${partnerText('Le prime esperienze stanno arrivando', 'The first experiences are arriving')}</strong>\r\n          <span>${partnerText('Mostreremo la media quando ci saranno almeno 5 ordini verificati.', 'We will show the average after at least 5 verified orders.')}</span>\r\n        </div>\r\n      </div>\r\n    `;\r\n    const tags = (aggregate?.topTags || []).length ? `\r\n      <div class=\"florame-partner-reviews-tags\" aria-label=\"${partnerText('Aspetti apprezzati', 'Popular highlights')}\">\r\n        ${aggregate.topTags.map((tag) => `<span class=\"florame-partner-reviews-tag\">${escapeHtml(tag)}</span>`).join('')}\r\n      </div>\r\n    ` : '';\r\n    const reviewRows = reviews.map((review) => {\r\n      const rating = Math.max(1, Math.min(5, Math.round(Number(review?.rating || 0) || 0)));\r\n      const body = String(review?.body || review?.text || '').trim();\r\n      const author = String(review?.publicName || review?.authorName || partnerText('Cliente verificato', 'Verified customer')).trim();\r\n      const response = partnerReviewResponseText(review?.partnerResponse);\r\n      const extraResponses = [[review?.florameResponse, 'florame.ai'], [review?.legacyResponse, partnerText('Risposta precedente \u00B7 autore non verificato', 'Previous reply \u00B7 unverified author')]].filter(([reply]) => reply?.body);\r\n      const verificationLabel = String(\r\n        review?.verification?.label\r\n        || partnerText('Ordine verificato Florame', 'Verified Florame order')\r\n      ).trim();\r\n      const tags = (Array.isArray(review?.tags) ? review.tags : [])\r\n        .map((tag) => typeof tag === 'string' ? tag : String(tag?.label || tag?.name || '').trim())\r\n        .filter(Boolean)\r\n        .slice(0, 5);\r\n      const media = (Array.isArray(review?.media) ? review.media : [])\r\n        .map(partnerReviewMediaEntry)\r\n        .filter(Boolean)\r\n        .slice(0, 4);\r\n      return `\r\n        <article class=\"florame-partner-review\">\r\n          <div class=\"florame-partner-review-head\">\r\n            <div class=\"florame-partner-review-author\">\r\n              <strong>${escapeHtml(author)}</strong>\r\n              <span>${escapeHtml(verificationLabel)}</span>\r\n            </div>\r\n            <div>\r\n              <div class=\"florame-partner-review-rating\" aria-label=\"${escapeHtml(partnerText(`${rating} su 5`, `${rating} out of 5`))}\">${'\u2605'.repeat(rating)}</div>\r\n              ${review?.publishedAt ? `<div class=\"florame-partner-review-date\">${escapeHtml(formatPartnerReviewDate(review.publishedAt))}</div>` : ''}\r\n            </div>\r\n          </div>\r\n          ${body ? `<p class=\"florame-partner-review-body\">${escapeHtml(body)}</p>` : ''}\r\n          ${tags.length ? `<div class=\"florame-partner-review-tags\">${tags.map((tag) => `<span>\u00B7 ${escapeHtml(tag)}</span>`).join('')}</div>` : ''}\r\n          ${media.length ? `\r\n            <div class=\"florame-partner-review-media-grid\" aria-label=\"${partnerText('Foto e video della recensione', 'Review photos and videos')}\">\r\n              ${media.map((item) => item.type === 'video'\r\n                ? `<video class=\"florame-partner-review-media\" src=\"${escapeHtml(item.url)}\" controls playsinline preload=\"metadata\" aria-label=\"${partnerText('Video allegato alla recensione', 'Video attached to the review')}\"></video>`\r\n                : `<img class=\"florame-partner-review-media\" src=\"${escapeHtml(item.url)}\" alt=\"${partnerText('Foto allegata alla recensione', 'Photo attached to the review')}\" loading=\"lazy\" decoding=\"async\">`\r\n              ).join('')}\r\n            </div>\r\n          ` : ''}\r\n          ${extraResponses.map(([reply, label]) => `<div class=\"florame-partner-review-response\"><strong>${escapeHtml(label)}</strong><p>${escapeHtml(reply.body)}</p></div>`).join('')}\r\n          ${response ? `\r\n            <div class=\"florame-partner-review-response\">\r\n              <strong>${partnerText('Risposta del fiorista', 'Florist response')}</strong>\r\n              <p>${escapeHtml(response)}</p>\r\n            </div>\r\n          ` : ''}\r\n        </article>\r\n      `;\r\n    }).join('');\r\n\r\n    container.innerHTML = `\r\n      ${summary}\r\n      ${tags}\r\n      <div class=\"florame-partner-reviews-list\">${reviewRows}</div>\r\n      ${payload?.hasMore && payload?.nextCursor ? `<button type=\"button\" class=\"florame-partner-reviews-load-more\" data-florame-partner-reviews-more data-cursor=\"${escapeHtml(payload.nextCursor)}\">${partnerText('Mostra altre recensioni', 'Show more reviews')}</button>` : ''}\r\n    `;\r\n  }\r\n\r\n  function mountPartnerReviewsSheet(options) {\r\n    removePartnerReviewsLayer();\r\n    if (!options || !options.toggle || (!options.partnerId && !options.partnerSlug)) return;\r\n    const trigger = options.toggle;\r\n    const partnerSlug = slugify(options.partnerSlug);\r\n    const partnerId = String(options.partnerId || '').trim();\r\n    const cacheKey = partnerSlug || slugify(partnerId);\r\n    const cached = null; // Always revalidate moderated content when opening reviews.\r\n    let payload = cached || (options.aggregate ? { aggregate: options.aggregate, reviews: [] } : null);\r\n    let loaded = !!cached;\r\n    let loading = false;\r\n    const layer = document.createElement('div');\r\n    layer.id = 'floramePartnerReviewsLayer';\r\n    layer.className = 'florame-partner-reviews-layer';\r\n    layer.hidden = true;\r\n    layer.innerHTML = `\r\n      <button type=\"button\" class=\"florame-partner-reviews-backdrop\" data-florame-partner-reviews-close aria-label=\"${partnerText('Chiudi recensioni', 'Close reviews')}\"></button>\r\n      <section class=\"florame-partner-reviews-sheet\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"floramePartnerReviewsTitle\">\r\n        <div class=\"florame-partner-reviews-handle\" aria-hidden=\"true\"></div>\r\n        <header class=\"florame-partner-reviews-header\">\r\n          <div class=\"florame-partner-reviews-heading\">\r\n            <small>${partnerText('Ordini verificati Florame', 'Verified Florame orders')}</small>\r\n            <strong id=\"floramePartnerReviewsTitle\">${escapeHtml(partnerText('Recensioni', 'Reviews'))}</strong>\r\n          </div>\r\n          <button type=\"button\" class=\"florame-partner-reviews-close\" data-florame-partner-reviews-close aria-label=\"${partnerText('Chiudi', 'Close')}\">\r\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\"><path d=\"m6 6 12 12M18 6 6 18\"></path></svg>\r\n          </button>\r\n        </header>\r\n        <div class=\"florame-partner-reviews-scroll\">\r\n          <div data-florame-partner-reviews-content></div>\r\n        </div>\r\n      </section>\r\n    `;\r\n    if (options.themeSource && options.themeSource.style) {\r\n      Array.from(options.themeSource.style).forEach((property) => {\r\n        if (String(property).startsWith('--florame-partner-')) {\r\n          layer.style.setProperty(property, options.themeSource.style.getPropertyValue(property));\r\n        }\r\n      });\r\n    }\r\n    document.body.appendChild(layer);\r\n\r\n    const sheet = layer.querySelector('.florame-partner-reviews-sheet');\r\n    const scrollArea = layer.querySelector('.florame-partner-reviews-scroll');\r\n    const content = layer.querySelector('[data-florame-partner-reviews-content]');\r\n    const closeButton = layer.querySelector('.florame-partner-reviews-close');\r\n\r\n    const renderLoading = () => {\r\n      content.innerHTML = `\r\n        <div class=\"florame-partner-reviews-loading\" role=\"status\" aria-label=\"${partnerText('Caricamento recensioni', 'Loading reviews')}\">\r\n          <span class=\"florame-partner-reviews-loading-summary\"></span>\r\n          <span class=\"florame-partner-reviews-loading-row\"></span>\r\n          <span class=\"florame-partner-reviews-loading-row\"></span>\r\n        </div>\r\n      `;\r\n    };\r\n    const updateTrigger = (aggregate) => {\r\n      const normalized = normalizePartnerReviewAggregate(aggregate || {});\r\n      const label = trigger.querySelector('.florame-partner-reputation-label');\r\n      if (label) label.textContent = partnerReviewCompactLabel(normalized);\r\n      trigger.classList.remove('is-loading');\r\n      trigger.classList.toggle('has-no-reviews', Math.max(0, Number(normalized.ratingCount || 0) || 0) === 0);\r\n      trigger.disabled = false;\r\n      trigger.setAttribute('aria-label', partnerText(\r\n        `${partnerReviewCompactLabel(normalized)}. Apri le recensioni`,\r\n        `${partnerReviewCompactLabel(normalized)}. Open reviews`\r\n      ));\r\n    };\r\n    const load = async (cursor, append, showLoading = true) => {\r\n      if (loading) return;\r\n      loading = true;\r\n      const preserveCurrentContent = !append && !showLoading && Boolean(payload);\r\n      if (!append && showLoading) renderLoading();\r\n      try {\r\n        const next = await fetchPublicPartnerReviews(partnerId || partnerSlug, {\r\n          partnerId,\r\n          partnerSlug,\r\n          cursor,\r\n          limit: 12\r\n        });\r\n        payload = append\r\n          ? {\r\n              ...next,\r\n              reviews: [...(Array.isArray(payload?.reviews) ? payload.reviews : []), ...(Array.isArray(next.reviews) ? next.reviews : [])]\r\n            }\r\n          : next;\r\n        loaded = true;\r\n        savePartnerReviewCache(cacheKey, payload);\r\n        updateTrigger(payload.aggregate);\r\n        renderPartnerReviewsPayload(content, payload);\r\n      } catch (_) {\r\n        if (!preserveCurrentContent) {\r\n          content.innerHTML = `\r\n            <div class=\"florame-partner-reviews-error\">\r\n              <strong>${partnerText('Le recensioni non si sono caricate', 'Reviews did not load')}</strong>\r\n              <span>${partnerText('Riprova tra poco. La reputazione Google resta separata nelle informazioni del negozio.', 'Try again shortly. Google reputation remains separate in the store information.')}</span>\r\n              <button type=\"button\" class=\"florame-partner-reviews-load-more\" data-florame-partner-reviews-retry>${partnerText('Riprova', 'Try again')}</button>\r\n            </div>\r\n          `;\r\n        }\r\n      } finally {\r\n        loading = false;\r\n      }\r\n    };\r\n    const close = (restoreFocus = true, immediate = false) => {\r\n      if (layer.hidden) return;\r\n      if (partnerReviewsCloseTimer) window.clearTimeout(partnerReviewsCloseTimer);\r\n      partnerReviewsCloseTimer = null;\r\n      layer.classList.remove('is-open');\r\n      document.body.classList.remove('florame-partner-reviews-open');\r\n      trigger.setAttribute('aria-expanded', 'false');\r\n      const finish = () => {\r\n        layer.hidden = true;\r\n        if (restoreFocus) {\r\n          try { trigger.focus({ preventScroll: true }); } catch (_) {}\r\n        }\r\n      };\r\n      if (immediate) finish();\r\n      else partnerReviewsCloseTimer = window.setTimeout(finish, 180);\r\n    };\r\n    const open = () => {\r\n      if (partnerReviewsCloseTimer) window.clearTimeout(partnerReviewsCloseTimer);\r\n      partnerReviewsCloseTimer = null;\r\n      partnerDetailsCloseHandler?.(false, true);\r\n      partnerSignalCloseHandler?.(false, true);\r\n      layer.hidden = false;\r\n      document.body.classList.add('florame-partner-reviews-open');\r\n      trigger.setAttribute('aria-expanded', 'true');\r\n      if (payload) renderPartnerReviewsPayload(content, payload);\r\n      else renderLoading();\r\n      window.requestAnimationFrame(() => layer.classList.add('is-open'));\r\n      // When the card already carries an aggregate (including a known zero),\r\n      // keep that truthful state visible and refresh silently in the background.\r\n      if (!loaded) load('', false, !payload);\r\n      window.setTimeout(() => {\r\n        try { closeButton?.focus({ preventScroll: true }); } catch (_) {}\r\n      }, 40);\r\n    };\r\n    partnerReviewsCloseHandler = close;\r\n\r\n    trigger.onclick = open;\r\n    layer.addEventListener('click', (event) => {\r\n      if (event.target && event.target.closest('[data-florame-partner-reviews-close]')) {\r\n        close(true);\r\n        return;\r\n      }\r\n      const retry = event.target && event.target.closest('[data-florame-partner-reviews-retry]');\r\n      if (retry) {\r\n        load('', false);\r\n        return;\r\n      }\r\n      const more = event.target && event.target.closest('[data-florame-partner-reviews-more]');\r\n      if (more) load(more.getAttribute('data-cursor') || '', true);\r\n    });\r\n    partnerReviewsKeydownHandler = (event) => {\r\n      if (layer.hidden) return;\r\n      if (event.key === 'Escape') {\r\n        close(true);\r\n        return;\r\n      }\r\n      if (event.key !== 'Tab' || !sheet) return;\r\n      const focusable = Array.from(sheet.querySelectorAll(\r\n        'button:not([disabled]), a[href], input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\r\n      )).filter((node) => !node.hidden && node.getClientRects().length);\r\n      if (!focusable.length) {\r\n        event.preventDefault();\r\n        sheet.focus();\r\n        return;\r\n      }\r\n      const first = focusable[0];\r\n      const last = focusable[focusable.length - 1];\r\n      if (event.shiftKey && document.activeElement === first) {\r\n        event.preventDefault();\r\n        last.focus();\r\n      } else if (!event.shiftKey && document.activeElement === last) {\r\n        event.preventDefault();\r\n        first.focus();\r\n      }\r\n    };\r\n    document.addEventListener('keydown', partnerReviewsKeydownHandler);\r\n\r\n    if (cached?.aggregate) updateTrigger(cached.aggregate);\r\n    if (!cached && !options.aggregate) {\r\n      fetchPublicPartnerReviews(partnerId || partnerSlug, {\r\n        partnerId,\r\n        partnerSlug,\r\n        limit: 12\r\n      })\r\n        .then((result) => {\r\n          payload = result;\r\n          loaded = true;\r\n          savePartnerReviewCache(cacheKey, payload);\r\n          updateTrigger(result.aggregate);\r\n        })\r\n        .catch(() => {\r\n          const label = trigger.querySelector('.florame-partner-reputation-label');\r\n          if (label) label.textContent = partnerText('Recensioni Florame', 'Florame reviews');\r\n          trigger.classList.remove('is-loading');\r\n          trigger.disabled = false;\r\n        });\r\n    }\r\n  }\r\n\r\n  let partnerSignalKeydownHandler = null;\r\n  let partnerSignalCloseHandler = null;\r\n  let partnerSignalCloseTimer = null;\r\n\r\n  const partnerAutoPanReads = new Map();\r\n  let partnerAutoPanFrame = 0;\r\n  function schedulePartnerAutoPan(target, track, distance) {\r\n    partnerAutoPanReads.set(target, { track, distance });\r\n    if (partnerAutoPanFrame) return;\r\n    partnerAutoPanFrame = window.requestAnimationFrame(() => {\r\n      partnerAutoPanFrame = 0;\r\n      const measured = [];\r\n      partnerAutoPanReads.forEach((value, element) => {\r\n        if (element.isConnected) measured.push([element, Number.isFinite(value.distance)\r\n          ? value.distance\r\n          : Math.max(0, Math.ceil(value.track.scrollWidth - element.clientWidth))]);\r\n      });\r\n      partnerAutoPanReads.clear();\r\n      measured.forEach(([element, distance]) => {\r\n        element.classList.toggle('is-overflowing', distance > 3);\r\n        const values = {'--partner-auto-pan-distance': `${distance}px`, '--partner-auto-pan-duration': `${Math.max(8, Math.min(18, 7 + (distance / 13))).toFixed(1)}s`};\r\n        Object.entries(values).forEach(([key, value]) => { if (element.style.getPropertyValue(key) !== value) element.style.setProperty(key, value); });\r\n      });\r\n    });\r\n  }\r\n\r\n  function syncPartnerAutoPan(root) {\r\n    const scope = root instanceof Element ? root : document;\r\n    const targets = scope.matches?.('[data-partner-auto-pan]')\r\n      ? [scope]\r\n      : Array.from(scope.querySelectorAll?.('[data-partner-auto-pan]') || []);\r\n    targets.forEach((target) => {\r\n      let track = target.querySelector(':scope > .florame-partner-auto-pan__track');\r\n      if (!track) {\r\n        const copy = String(target.textContent || '').trim();\r\n        if (!copy) return;\r\n        track = document.createElement('span');\r\n        track.className = 'florame-partner-auto-pan__track';\r\n        track.textContent = copy;\r\n        target.textContent = '';\r\n        target.appendChild(track);\r\n      }\r\n      if (typeof ResizeObserver !== 'function') {\r\n        schedulePartnerAutoPan(target, track);\r\n        return;\r\n      }\r\n      if (target.__floramePartnerAutoPanTrack !== track) {\r\n        target.__floramePartnerAutoPanObserver?.disconnect();\r\n        let availableWidth = null;\r\n        let contentWidth = null;\r\n        // ResizeObserver already has the layout sizes; do not force a new layout to read them.\r\n        const observer = new ResizeObserver((entries) => {\r\n          entries.forEach((entry) => {\r\n            if (entry.target === target) availableWidth = entry.contentRect.width;\r\n            if (entry.target === track) contentWidth = entry.contentRect.width;\r\n          });\r\n          if (availableWidth !== null && contentWidth !== null) {\r\n            schedulePartnerAutoPan(target, track, Math.max(0, Math.round(contentWidth) - Math.round(availableWidth)));\r\n          }\r\n        });\r\n        observer.observe(target);\r\n        observer.observe(track);\r\n        target.__floramePartnerAutoPanObserver = observer;\r\n        target.__floramePartnerAutoPanTrack = track;\r\n      }\r\n    });\r\n  }\r\n\r\n  function removePartnerSignalLayer() {\r\n    if (partnerSignalCloseTimer) window.clearTimeout(partnerSignalCloseTimer);\r\n    partnerSignalCloseTimer = null;\r\n    partnerSignalCloseHandler = null;\r\n    document.getElementById('floramePartnerSignalLayer')?.remove();\r\n    if (partnerSignalKeydownHandler) {\r\n      document.removeEventListener('keydown', partnerSignalKeydownHandler);\r\n      partnerSignalKeydownHandler = null;\r\n    }\r\n    document.body.classList.remove('florame-partner-signal-open');\r\n  }\r\n\r\n  function mountPartnerSignalSheet(options) {\r\n    removePartnerSignalLayer();\r\n    const triggers = Array.from(options?.triggers || []).filter(Boolean);\r\n    const payloads = options?.payloads || {};\r\n    if (!triggers.length || !Object.keys(payloads).length) return;\r\n\r\n    const layer = document.createElement('div');\r\n    layer.id = 'floramePartnerSignalLayer';\r\n    layer.className = 'florame-partner-signal-layer';\r\n    layer.hidden = true;\r\n    layer.innerHTML = `\r\n      <button type=\"button\" class=\"florame-partner-signal-backdrop\" data-partner-signal-close aria-label=\"${escapeHtml(partnerText('Chiudi informazioni', 'Close information'))}\"></button>\r\n      <section class=\"florame-partner-signal-sheet\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"floramePartnerSignalTitle\" tabindex=\"-1\">\r\n        <div class=\"florame-partner-signal-handle\" aria-hidden=\"true\"></div>\r\n        <header class=\"florame-partner-signal-header\">\r\n          <span class=\"florame-partner-signal-header__icon\" data-partner-signal-icon aria-hidden=\"true\"></span>\r\n          <span class=\"florame-partner-signal-heading\">\r\n            <small data-partner-signal-eyebrow></small>\r\n            <strong id=\"floramePartnerSignalTitle\" data-partner-signal-title></strong>\r\n          </span>\r\n          <button type=\"button\" class=\"florame-partner-signal-close\" data-partner-signal-close aria-label=\"${escapeHtml(partnerText('Chiudi', 'Close'))}\">\r\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\"><path d=\"m6 6 12 12M18 6 6 18\"></path></svg>\r\n          </button>\r\n        </header>\r\n        <div class=\"florame-partner-signal-scroll\">\r\n          <p class=\"florame-partner-signal-body\" data-partner-signal-body></p>\r\n          <div data-partner-local-guide hidden></div>\r\n          <dl class=\"florame-partner-signal-facts\" data-partner-signal-facts></dl>\r\n          <div class=\"florame-partner-signal-action\" data-partner-signal-action-slot></div>\r\n        </div>\r\n      </section>\r\n    `;\r\n    if (options.themeSource && options.themeSource.style) {\r\n      Array.from(options.themeSource.style).forEach((property) => {\r\n        if (String(property).startsWith('--florame-partner-')) {\r\n          layer.style.setProperty(property, options.themeSource.style.getPropertyValue(property));\r\n        }\r\n      });\r\n    }\r\n    document.body.appendChild(layer);\r\n\r\n    const sheet = layer.querySelector('.florame-partner-signal-sheet');\r\n    const scrollArea = layer.querySelector('.florame-partner-signal-scroll');\r\n    const closeButton = layer.querySelector('.florame-partner-signal-close');\r\n    const icon = layer.querySelector('[data-partner-signal-icon]');\r\n    const eyebrow = layer.querySelector('[data-partner-signal-eyebrow]');\r\n    const title = layer.querySelector('[data-partner-signal-title]');\r\n    const body = layer.querySelector('[data-partner-signal-body]');\r\n    const facts = layer.querySelector('[data-partner-signal-facts]');\r\n    const actionSlot = layer.querySelector('[data-partner-signal-action-slot]');\r\n    let activeTrigger = null;\r\n    let activePayload = null;\r\n\r\n    const close = (restoreFocus = true, immediate = false) => {\r\n      if (layer.hidden) return;\r\n      if (partnerSignalCloseTimer) window.clearTimeout(partnerSignalCloseTimer);\r\n      partnerSignalCloseTimer = null;\r\n      layer.classList.remove('is-open');\r\n      document.body.classList.remove('florame-partner-signal-open');\r\n      activeTrigger?.setAttribute('aria-expanded', 'false');\r\n      const focusTarget = activeTrigger;\r\n      const finish = () => {\r\n        layer.hidden = true;\r\n        if (restoreFocus) {\r\n          try { focusTarget?.focus({ preventScroll: true }); } catch (_) {}\r\n        }\r\n      };\r\n      if (immediate) finish();\r\n      else partnerSignalCloseTimer = window.setTimeout(finish, 220);\r\n    };\r\n\r\n    const render = (payload) => {\r\n      icon.innerHTML = partnerSurfaceIcon(payload.icon || 'info');\r\n      eyebrow.textContent = payload.eyebrow || partnerText('Informazioni del fiorista', 'Florist information');\r\n      title.textContent = payload.title || options.name || partnerText('Dettagli', 'Details');\r\n      body.textContent = payload.body || '';\r\n      body.hidden = !payload.body;\r\n      const localGuide = layer.querySelector('[data-partner-local-guide]');\r\n      localGuide.innerHTML = payload.localRequestGuide ? (window.FlorameLocalFlorist?.guideMarkup(getNativeLanguage()) || '') : '';\r\n      localGuide.hidden = !localGuide.childElementCount;\r\n      facts.innerHTML = Array.isArray(payload.facts)\r\n        ? payload.facts.filter((fact) => fact && fact.value).map((fact) => `<div><dt>${escapeHtml(fact.label || '')}</dt><dd>${escapeHtml(fact.value || '')}</dd></div>`).join('')\r\n        : '';\r\n      facts.hidden = !facts.childElementCount;\r\n      if (payload.action?.label) {\r\n        actionSlot.innerHTML = payload.action.href\r\n          ? `<a class=\"florame-partner-signal-cta\" href=\"${escapeHtml(payload.action.href)}\">${escapeHtml(payload.action.label)}${partnerSurfaceIcon('arrow')}</a>`\r\n          : `<button type=\"button\" class=\"florame-partner-signal-cta\" data-partner-signal-action>${escapeHtml(payload.action.label)}${partnerSurfaceIcon('arrow')}</button>`;\r\n      } else {\r\n        actionSlot.innerHTML = '';\r\n      }\r\n      actionSlot.hidden = !actionSlot.childElementCount;\r\n    };\r\n\r\n    const open = (trigger) => {\r\n      const key = String(trigger?.dataset?.partnerSignal || '').trim();\r\n      const payloadSource = payloads[key];\r\n      const payload = typeof payloadSource === 'function' ? payloadSource() : payloadSource;\r\n      if (!payload) return;\r\n      if (partnerSignalCloseTimer) window.clearTimeout(partnerSignalCloseTimer);\r\n      partnerSignalCloseTimer = null;\r\n      partnerDetailsCloseHandler?.(false, true);\r\n      partnerReviewsCloseHandler?.(false, true);\r\n      activeTrigger?.setAttribute('aria-expanded', 'false');\r\n      activeTrigger = trigger;\r\n      activePayload = payload;\r\n      render(payload);\r\n      if (scrollArea) scrollArea.scrollTop = 0;\r\n      layer.hidden = false;\r\n      document.body.classList.add('florame-partner-signal-open');\r\n      activeTrigger.setAttribute('aria-expanded', 'true');\r\n      window.requestAnimationFrame(() => layer.classList.add('is-open'));\r\n      window.setTimeout(() => {\r\n        try { closeButton?.focus({ preventScroll: true }); } catch (_) {}\r\n      }, 50);\r\n    };\r\n\r\n    partnerSignalCloseHandler = close;\r\n    triggers.forEach((trigger) => trigger.addEventListener('click', () => open(trigger)));\r\n    layer.addEventListener('click', (event) => {\r\n      if (event.target?.closest('[data-partner-signal-close]')) {\r\n        close(true);\r\n        return;\r\n      }\r\n      if (event.target?.closest('[data-partner-signal-action]') && activePayload?.action?.target) {\r\n        const target = activePayload.action.target;\r\n        close(false);\r\n        window.setTimeout(() => target?.click?.(), 170);\r\n      }\r\n    });\r\n    partnerSignalKeydownHandler = (event) => {\r\n      if (layer.hidden) return;\r\n      if (event.key === 'Escape') {\r\n        close(true);\r\n        return;\r\n      }\r\n      if (event.key !== 'Tab' || !sheet) return;\r\n      const focusable = Array.from(sheet.querySelectorAll('button:not([disabled]), a[href], [tabindex]:not([tabindex=\"-1\"])'))\r\n        .filter((node) => !node.hidden && node.getClientRects().length);\r\n      if (!focusable.length) {\r\n        event.preventDefault();\r\n        sheet.focus();\r\n        return;\r\n      }\r\n      const first = focusable[0];\r\n      const last = focusable[focusable.length - 1];\r\n      if (event.shiftKey && document.activeElement === first) {\r\n        event.preventDefault();\r\n        last.focus();\r\n      } else if (!event.shiftKey && document.activeElement === last) {\r\n        event.preventDefault();\r\n        first.focus();\r\n      }\r\n    };\r\n    document.addEventListener('keydown', partnerSignalKeydownHandler);\r\n  }\r\n\r\n  function renderPartnerSeoSurface(model) {\r\n    const section = document.querySelector('.florame-partner-seo');\r\n    const inner = section && section.querySelector('.florame-partner-seo__inner');\r\n    if (!inner || !model || !model.partner) return;\r\n    const partner = model.partner;\r\n    const config = partner.storefrontConfig || {};\r\n    const name = String(partner.name || partner.partnerId || partnerText('Fiorista Florame', 'Florame florist')).trim();\r\n    const logo = partner.logoUrl || '';\r\n    const locality = model.localityLabel || partnerText('Servizio locale', 'Local service');\r\n    const appUrl = `${localizeStorefrontPath('/pages/florame-app')}?partner=${encodeURIComponent(model.partnerSlug || '')}`;\r\n    const messagesUrl = `${localizeStorefrontPath(CONFIG.messagesPath || '/pages/florame-messages')}?partner=${encodeURIComponent(model.partnerSlug || '')}`;\r\n    const specialties = Array.isArray(config.specialties) ? config.specialties.filter(Boolean).slice(0, 6) : [];\r\n    const promise = localizePartnerCustomText(config.servicePromise || config.shortBio || partner.description || '');\r\n    const facts = [\r\n      model.addressLine ? { icon: 'location', label: partnerText('Negozio', 'Store'), value: model.addressLine, href: model.googleMapsUrl } : null,\r\n      { icon: 'message', label: partnerText('Messaggi', 'Messages'), value: partnerText('Invia messaggio', 'Send message'), href: messagesUrl },\r\n      { icon: 'delivery', label: partnerText('Consegna', 'Delivery'), value: model.coverageSummary },\r\n      config.pickupEnabled !== false && model.addressLine ? { icon: 'storefront', label: partnerText('Ritiro', 'Pickup'), value: partnerText(`Disponibile a ${locality}`, `Available in ${locality}`) } : null\r\n    ].filter((item) => item && item.value);\r\n    inner.innerHTML = `\r\n      <div data-florame-partner-page=\"${escapeHtml(model.partnerSlug || '')}\" data-partner-id=\"${escapeHtml(partner.partnerId || partner.id || '')}\">\r\n        <header class=\"florame-partner-seo__identity\">\r\n          ${buildLogoMarkup('florame-partner-seo__logo', logo, partnerText(`Logo di ${name}`, `${name} logo`), getInitials(name, 'F'))}\r\n          <div>\r\n            <p class=\"florame-partner-seo__eyebrow\">${partnerSurfaceIcon('storefront')}<span>${partnerText('Fiorista Florame', 'Florame florist')}</span></p>\r\n            <p class=\"florame-partner-seo__locality\">${partnerSurfaceIcon('location')}<span>${escapeHtml(locality)}</span></p>\r\n          </div>\r\n        </header>\r\n        <div class=\"florame-partner-seo__layout\">\r\n          <div class=\"florame-partner-seo__copy\">\r\n            <h2>${escapeHtml(name)}, ${partnerText('fiori fatti per te', 'flowers made for you')}</h2>\r\n            <p class=\"florame-partner-seo__intro\">${escapeHtml(promise || partnerText(`${name} prepara bouquet personalizzati con fiori disponibili e servizio locale tramite Florame.`, `${name} creates custom bouquets with available flowers and local service through Florame.`))}</p>\r\n            ${specialties.length ? `<ul>${specialties.map((item) => `<li>${escapeHtml(localizePartnerCustomText(item))}</li>`).join('')}</ul>` : ''}\r\n          </div>\r\n          <div class=\"florame-partner-seo__visit\">\r\n            <p class=\"florame-partner-seo__visit-title\">${partnerText('Qui trovi il negozio', 'Find the store here')}</p>\r\n            <dl>${facts.map((item) => `<div><dt>${partnerSurfaceIcon(item.icon)}<span>${escapeHtml(item.label)}</span></dt><dd>${item.href ? `<a href=\"${escapeHtml(item.href)}\"${/^https?:/i.test(item.href) ? ' target=\"_blank\" rel=\"noreferrer\"' : ''}>${escapeHtml(item.value)}</a>` : escapeHtml(item.value)}</dd></div>`).join('')}</dl>\r\n            <a class=\"florame-partner-seo__cta\" href=\"${escapeHtml(appUrl)}\"><span>${partnerText('Crea con', 'Create with')} ${escapeHtml(name)}</span>${partnerSurfaceIcon('arrow')}</a>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    `;\r\n    section.setAttribute('data-florame-partner-seo-ready', 'true');\r\n  }\r\n\r\n  function organizePartnerHomeSections() {\r\n    document.querySelector('.app-home-container')?.classList.add('home-partner-storefront-2026');\r\n    const header = document.querySelector('.app-header');\r\n    const fulfillment = document.querySelector('[data-home-partner-fulfillment]');\r\n    const address = document.querySelector('[data-home-address-section]');\r\n    const explore = document.getElementById('homeExplore');\r\n    const secondary = document.getElementById('floramePartnerSecondarySlot');\r\n    const community = document.getElementById('homeCommunitySection');\r\n    const available = document.getElementById('availableCarouselSection');\r\n    const mine = document.getElementById('homeUserCreationsSection');\r\n    const favorites = document.getElementById('homeFavoritesSection');\r\n    const create = document.querySelector('.home-create-deck');\r\n    if (!explore || !community) return;\r\n    // Collections belong to the customer Home, including legacy partner routes.\r\n    explore.querySelectorAll('[data-home-explore-filter=\"mine\"],[data-home-explore-filter=\"liked\"],.home-explore-filters--personal,.home-explore-collections').forEach((node) => node.remove());\r\n    document.querySelectorAll('[data-home-sheet-feed=\"mine\"],[data-home-sheet-feed=\"liked\"]').forEach((node) => node.remove());\r\n    mine?.remove();\r\n    favorites?.remove();\r\n    if (header && secondary) header.after(secondary);\r\n    if (secondary && fulfillment) secondary.after(fulfillment);\r\n    else if (header && fulfillment) header.after(fulfillment);\r\n    if (fulfillment) fulfillment.after(explore);\r\n    explore.after(community);\r\n    if (available) community.after(available);\r\n    if (create) (available || community).after(create);\r\n    if (address && create) create.after(address);\r\n    document.documentElement.setAttribute('data-florame-partner-editorial-ready', 'true');\r\n  }\r\n\r\n  function renderPartnerHome(partner, options) {\r\n    // Capture before rebuilding the header; reading scrollY after DOM/style\r\n    // writes synchronously lays out the whole new storefront.\r\n    const initialScrollY = window.scrollY;\r\n    partner = window.FlorameLocalFlorist?.adapt(partner) || partner;\r\n    const localRequest = partner?.partnerId === 'manual-florist-global-v1';\r\n    const path = getCurrentPathname();\r\n    const barePath = stripStorefrontLocale(path);\r\n    const isHome = document.documentElement.hasAttribute('data-florame-local-storefront') || barePath === storefrontPathname(CONFIG.homePath, '/')\r\n      || !!getPartnerPageSlug(path)\r\n      || (getSingleSegment(path) && !new URLSearchParams(window.location.search).get('mode'));\r\n    const heroSlot = document.getElementById('floramePartnerHeroSlot');\r\n    const heroTopSlot = document.getElementById('floramePartnerHeroTopSlot');\r\n    const heroSecondarySlot = document.getElementById('floramePartnerSecondarySlot');\r\n    const greeting = document.querySelector('.app-greeting');\r\n    const titleLockup = document.querySelector('.hero-title-lockup');\r\n    const appHeader = document.querySelector('.app-header');\r\n    try { window.FloramePartnerBoot?.finish?.(); } catch (_) {}\r\n    const staleEditorialRoot = heroSlot?.querySelector?.('[data-partner-editorial-carousel]');\r\n    try { staleEditorialRoot?.__floramePartnerEditorialController?.destroy?.(); } catch (_) {}\r\n    if (!isHome || !partner) {\r\n      try { window.__floramePartnerFavoriteSyncCleanup?.(); } catch (_) {}\r\n      delete window.__floramePartnerFavoriteSyncCleanup;\r\n      removePartnerDetailsLayer();\r\n      removePartnerReviewsLayer();\r\n      removePartnerSignalLayer();\r\n      const staleDetails = document.getElementById('floramePartnerHomeDetails');\r\n      if (staleDetails) staleDetails.remove();\r\n      if (heroTopSlot) {\r\n        heroTopSlot.innerHTML = '';\r\n        heroTopSlot.hidden = true;\r\n        clearThemeVars(heroTopSlot);\r\n      }\r\n      if (heroSlot) {\r\n        heroSlot.innerHTML = '';\r\n        heroSlot.hidden = true;\r\n        clearThemeVars(heroSlot);\r\n      }\r\n      if (heroSecondarySlot) {\r\n        heroSecondarySlot.innerHTML = '';\r\n        heroSecondarySlot.hidden = true;\r\n      }\r\n      if (greeting) {\r\n        greeting.hidden = false;\r\n        greeting.classList.remove('app-greeting--partner', 'app-greeting--loading');\r\n        greeting.textContent = partnerText(\r\n          'Cosa facciamo fiorire oggi?',\r\n          'What shall we make bloom today?'\r\n        );\r\n        greeting.style.removeProperty('color');\r\n      }\r\n      if (titleLockup) {\r\n        titleLockup.classList.remove('hero-title-lockup--partner', 'hero-title-lockup--loading');\r\n        clearThemeVars(titleLockup);\r\n      }\r\n      if (appHeader) {\r\n        appHeader.classList.remove('partner-storefront-active', 'partner-storefront-loading', 'partner-storefront-offline', 'partner-storefront-expanded', 'partner-storefront-custom-occasion-art');\r\n        clearThemeVars(appHeader);\r\n      }\r\n      removePartnerShowcase();\r\n      return;\r\n    }\r\n    organizePartnerHomeSections();\r\n\r\n    if (!greeting || !heroSlot || !heroTopSlot || !titleLockup) return;\r\n\r\n    injectStyles();\r\n    renderPartnerShowcase(partner);\r\n\r\n    titleLockup.classList.add('hero-title-lockup--partner');\r\n    titleLockup.classList.remove('hero-title-lockup--loading');\r\n    greeting.classList.add('app-greeting--partner');\r\n    greeting.classList.remove('app-greeting--loading');\r\n    greeting.hidden = true;\r\n\r\n    const partnerSlug = slugify(partner.portal?.partnerSlug || partner.partnerId || partner.name || '');\r\n    const rawPartnerName = String(partner.name || partner.partnerId || '').trim();\r\n    const partnerDisplayName = partnerSlug === 'fiori-nino'\r\n      ? rawPartnerName.replace(/\\bnino\\b/giu, 'Nino')\r\n      : rawPartnerName;\r\n    const showDetailsCard = partner.storefrontConfig?.detailCardEnabled !== undefined\r\n      ? partner.storefrontConfig.detailCardEnabled !== false\r\n      : partner.storefrontConfig?.showHomeCard !== false;\r\n    const availabilityState = partnerAvailabilityState(partner);\r\n    const isOffline = availabilityState === 'offline';\r\n    const moment = partnerCardMoment(availabilityState);\r\n    const addressLine = buildAddressLine(partner.address || {});\r\n    const localityLabel = formatPartnerLocality(partner.address || {}, partner);\r\n    const hours = formatHours(partner.openingHours || {});\r\n    const coverageRows = formatCoverageRules(partner.coverageRules || [], partner.defaultCap || partner.address?.postalCode || partner.address?.cap || '');\r\n    const coverageSummary = formatCoverageSummary(\r\n      partner.coverageRules || [],\r\n      partner.defaultCap || partner.address?.postalCode || partner.address?.cap || '',\r\n      partner.address?.city || partner.city || '',\r\n      partner.address?.province || partner.province || ''\r\n    );\r\n    const deliverySlots = formatDeliverySlots(partner.deliveryTimeSlots || window.__florameDeliveryTimeSlotSettings || {});\r\n    const googleProfileUrl = partner.storefrontConfig?.googleProfileUrl || '';\r\n    const googleMapsUrl = partner.googleBusinessProfileUrl || partner.storefrontConfig?.googleReviewPlace?.googleMapsUri || partner.storefrontConfig?.googleMapsUrl || partner.address?.googleMapsUrl || '';\r\n    const precisePoint = partner.mapLocation;\r\n    const preciseMapsUrl = precisePoint?.source === 'partner_manual'\r\n      && precisePoint.lat != null && precisePoint.lng != null\r\n      && Number.isFinite(Number(precisePoint.lat)) && Math.abs(Number(precisePoint.lat)) <= 90\r\n      && Number.isFinite(Number(precisePoint.lng)) && Math.abs(Number(precisePoint.lng)) <= 180\r\n      ? `https://www.google.com/maps/search/?api=1&query=${Number(precisePoint.lat)},${Number(precisePoint.lng)}` : '';\r\n    const partnerLogo = partner.logoUrl || '';\r\n    const partnerFavoritePayload = {\r\n      partnerSlug,\r\n      name: partnerDisplayName,\r\n      homeUrl: localRequest ? homeUrl(partnerSlug) : localizeStorefrontPath(`/pages/${partnerSlug}`),\r\n      manualFallback: localRequest,\r\n      city: partner.address?.city || partner.city || '',\r\n      addressLine,\r\n      logoUrl: partnerLogo,\r\n      artUrl: ''\r\n    };\r\n    const homeCardTitle = localizePartnerCustomText(partner.storefrontConfig?.homeCardTitle || partnerText('Passa in negozio o scrivi al fiorista', 'Visit the store or message the florist'));\r\n    const shortBio = localizePartnerCustomText(partner.storefrontConfig?.shortBio || '');\r\n    const servicePromise = localizePartnerCustomText(partner.storefrontConfig?.servicePromise || '');\r\n    const availabilityFreshnessLabel = partnerAvailabilityFreshnessLabel(partner, availabilityState);\r\n    updatePartnerAvailabilityFreshness(partner);\r\n    const promotionBadges = !isOffline ? window.FloramePromotions?.badges(partner, {deliveryEligible:false}) || '' : '';\r\n    const partnerVerified = !localRequest && String(partner?.status || '').toLowerCase() === 'active' && Boolean(partnerSlug);\r\n    const specialties = Array.isArray(partner.storefrontConfig?.specialties)\r\n      ? partner.storefrontConfig.specialties.filter(Boolean).slice(0, 6).map(localizePartnerCustomText)\r\n      : [];\r\n    const config = partner.storefrontConfig || {};\r\n    const reviewAggregate = partnerReviewAggregateFromPartner(partner);\r\n    const googleReviews = formatGoogleReviewRows(config);\r\n    renderPartnerSeoSurface({\r\n      partner,\r\n      partnerSlug,\r\n      localityLabel,\r\n      addressLine,\r\n      coverageSummary,\r\n      googleMapsUrl\r\n    });\r\n    const googleReviewsTitle = partnerText('Recensioni esterne su Google', 'External reviews on Google');\r\n    const googleReviewPlaceUrl = config.googleReviewPlace?.googleMapsUri || googleProfileUrl || googleMapsUrl || '';\r\n    const resolvedDefaults = resolveThemeDefaults(window.__florameStorefrontDefaults || partner.storefrontDefaults || {});\r\n    const headlineColor = normalizeHexColor(config.headlineColor || '') || resolvedDefaults.headlineColor;\r\n    const brandGradientFrom = normalizeHexColor(config.brandGradientFrom || '') || resolvedDefaults.brandGradientFrom;\r\n    const brandGradientTo = normalizeHexColor(config.brandGradientTo || '') || resolvedDefaults.brandGradientTo;\r\n    const noteColor = normalizeHexColor(config.noteColor || '') || resolvedDefaults.noteColor;\r\n    const accentColor = normalizeHexColor(config.accentColor || '') || resolvedDefaults.accentColor;\r\n    const surfaceColor = normalizeHexColor(config.surfaceColor || '') || resolvedDefaults.surfaceColor;\r\n    const surfaceBorderColor = normalizeHexColor(config.surfaceBorderColor || '')\r\n      || resolvedDefaults.surfaceBorderColor\r\n      || rgbaFromHex(surfaceColor, 0.34)\r\n      || THEME_SYSTEM_DEFAULTS.surfaceBorderColor;\r\n    const cardTextColor = normalizeHexColor(config.cardTextColor || '') || resolvedDefaults.cardTextColor;\r\n    const badgeBackgroundColor = normalizeHexColor(config.badgeBackgroundColor || '') || resolvedDefaults.badgeBackgroundColor;\r\n    const badgeTextColor = normalizeHexColor(config.badgeTextColor || '') || resolvedDefaults.badgeTextColor;\r\n    const websiteButtonColor = normalizeHexColor(config.websiteButtonColor || '') || resolvedDefaults.websiteButtonColor || accentColor;\r\n    const hoursSurfaceColor = normalizeHexColor(config.hoursSurfaceColor || '') || resolvedDefaults.hoursSurfaceColor || surfaceColor;\r\n    const hoursSurfaceBorderColor = normalizeHexColor(config.hoursSurfaceBorderColor || '') || resolvedDefaults.hoursSurfaceBorderColor || surfaceBorderColor;\r\n    const hoursTextColor = normalizeHexColor(config.hoursTextColor || '') || resolvedDefaults.hoursTextColor || cardTextColor;\r\n    const surfaceSoft = rgbaFromHex(surfaceColor, 0.2) || rgbaFromHex(resolvedDefaults.surfaceColor, 0.2);\r\n    const hoursSurfaceSoft = rgbaFromHex(hoursSurfaceColor, 0.2) || surfaceSoft;\r\n    const accentSoft = rgbaFromHex(accentColor, 0.14) || rgbaFromHex(resolvedDefaults.accentColor, 0.14);\r\n    const accentBorder = rgbaFromHex(accentColor, 0.24) || rgbaFromHex(resolvedDefaults.accentColor, 0.24);\r\n    const ctaTextColor = readableTextColor(websiteButtonColor || accentColor || resolvedDefaults.accentColor);\r\n    const brandTextColor = readableTextColor(brandGradientTo || resolvedDefaults.brandGradientTo);\r\n    const themeTargets = [heroTopSlot, heroSlot, titleLockup, appHeader].filter(Boolean);\r\n\r\n    themeTargets.forEach((el) => {\r\n      if (!el || !el.style) return;\r\n      el.style.setProperty('--florame-partner-headline', headlineColor);\r\n      el.style.setProperty('--florame-partner-note-color', noteColor);\r\n      el.style.setProperty('--florame-partner-brand-from', brandGradientFrom);\r\n      el.style.setProperty('--florame-partner-brand-to', brandGradientTo);\r\n      el.style.setProperty('--florame-partner-brand-fg', brandTextColor);\r\n      el.style.setProperty('--florame-partner-accent', accentColor);\r\n      el.style.setProperty('--florame-partner-accent-soft', accentSoft);\r\n      el.style.setProperty('--florame-partner-accent-border', accentBorder);\r\n      el.style.setProperty('--florame-partner-divider', surfaceBorderColor);\r\n      el.style.setProperty('--florame-partner-badge-border', surfaceBorderColor);\r\n      el.style.setProperty('--florame-partner-panel-bg', surfaceColor);\r\n      el.style.setProperty('--florame-partner-surface', surfaceColor);\r\n      el.style.setProperty('--florame-partner-surface-soft', surfaceSoft);\r\n      el.style.setProperty('--florame-partner-cta-secondary-bg', surfaceSoft);\r\n      el.style.setProperty('--florame-partner-badge-bg', badgeBackgroundColor);\r\n      el.style.setProperty('--florame-partner-surface-border', surfaceBorderColor);\r\n      el.style.setProperty('--florame-partner-cta-bg', websiteButtonColor);\r\n      el.style.setProperty('--florame-partner-cta-fg', ctaTextColor);\r\n      el.style.setProperty('--florame-partner-hours-bg', hoursSurfaceColor);\r\n      el.style.setProperty('--florame-partner-hours-soft', hoursSurfaceSoft);\r\n      el.style.setProperty('--florame-partner-hours-border', hoursSurfaceBorderColor);\r\n      el.style.setProperty('--florame-partner-hours-copy', hoursTextColor);\r\n      el.style.setProperty('--florame-partner-hours-copy-muted', rgbaFromHex(hoursTextColor, 0.72) || hoursTextColor);\r\n      el.style.setProperty('--florame-partner-badge-color', badgeTextColor);\r\n      el.style.setProperty('--florame-partner-dark-surface', rgbaFromHex(surfaceColor, 0.18) || rgbaFromHex(resolvedDefaults.surfaceColor, 0.18) || '');\r\n      el.style.setProperty('--florame-partner-dark-border', rgbaFromHex(surfaceBorderColor, 0.26) || rgbaFromHex(resolvedDefaults.surfaceBorderColor, 0.26) || '');\r\n      el.style.setProperty('--florame-partner-copy', cardTextColor);\r\n      el.style.setProperty('--florame-partner-copy-strong', cardTextColor);\r\n      el.style.setProperty('--florame-partner-logo-border', surfaceBorderColor);\r\n    });\r\n    if (appHeader) {\r\n      appHeader.classList.add('partner-storefront-active');\r\n      appHeader.classList.remove('partner-storefront-loading');\r\n      appHeader.classList.toggle('partner-storefront-offline', isOffline);\r\n      Array.from(appHeader.classList).forEach((className) => {\r\n        if (className.indexOf('partner-storefront-moment-') === 0) appHeader.classList.remove(className);\r\n      });\r\n      appHeader.classList.add(`partner-storefront-moment-${moment.key}`);\r\n      appHeader.classList.toggle('partner-storefront-dark-moment', moment.dark);\r\n      appHeader.classList.toggle('partner-storefront-custom-occasion-art', moment.customBackground === true);\r\n      appHeader.classList.remove('partner-storefront-expanded');\r\n      const momentAsset = String(moment.assetUrl || '').replace(/[\"\\\\\\n\\r]/g, '');\r\n      const expandedMomentAsset = String(moment.expandedAssetUrl || '').replace(/[\"\\\\\\n\\r]/g, '');\r\n      if (momentAsset) transitionPartnerMomentArtwork(appHeader, momentAsset, moment.key);\r\n      else {\r\n        appHeader.style.removeProperty('--florame-partner-moment-art');\r\n        appHeader.style.removeProperty('--florame-partner-moment-art-key');\r\n      }\r\n      if (expandedMomentAsset) appHeader.style.setProperty('--florame-partner-expanded-art', `url(\"${expandedMomentAsset}\")`);\r\n      else appHeader.style.removeProperty('--florame-partner-expanded-art');\r\n      persistPartnerMoment(partnerSlug, moment.key);\r\n    }\r\n    if (greeting) {\r\n      greeting.style.color = headlineColor;\r\n    }\r\n\r\n    const partnerAppPath = localizeStorefrontPath('/pages/florame-app');\r\n    const encodedPartnerSlug = encodeURIComponent(partnerSlug);\r\n    const aiCreateUrl = `${partnerAppPath}?mode=create&partner=${encodedPartnerSlug}`;\r\n    const customCreateUrl = `${partnerAppPath}?mode=create&partner=${encodedPartnerSlug}`;\r\n    const partnerMessagesUrl = `${localizeStorefrontPath(CONFIG.messagesPath || '/pages/florame-messages')}?partner=${encodedPartnerSlug}`;\r\n    const partnerDeliveryPromiseInput = {\r\n      openingHours: partner.openingHours || {},\r\n      timeSlotSettings: partner.deliveryTimeSlots || window.__florameDeliveryTimeSlotSettings || {},\r\n      specialDateSettings: partner.deliverySpecialDates || window.__florameDeliverySpecialDateSettings || {},\r\n      locale: getNativeLanguage(),\r\n      timeZone: 'Europe/Rome'\r\n    };\r\n    const partnerDeliveryPromise = (!isOffline && window.FlorameDeliveryPromise?.resolve)\r\n      ? window.FlorameDeliveryPromise.resolve(partnerDeliveryPromiseInput)\r\n      : {\r\n          available: false,\r\n          headline: isOffline\r\n            ? partnerText('Fiori da riconfermare', 'Flowers need confirmation')\r\n            : partnerText('Prossima consegna', 'Next delivery'),\r\n          deliveryLabel: isOffline\r\n            ? partnerText('Fiori da riconfermare', 'Flowers need confirmation')\r\n            : partnerText('Fasce in aggiornamento', 'Times are being updated'),\r\n          countdownLabel: ''\r\n        };\r\n    const partnerPrimaryUrl = '#homeCommunitySection';\r\n    const partnerPrimaryLabel = partnerText('Scopri i bouquet', 'Shop bouquets');\r\n    const partnerResponseLabel = partnerResponseTimeLabel(partner);\r\n    const partnerResponseSampleSize = Math.max(0, Math.round(Number(partner?.responsePerformance?.sampleSize || 0) || 0));\r\n    const partnerResponseEvidenceLabel = partnerResponseSampleSize > 0\r\n      ? partnerText(\r\n          `Media su ${partnerResponseSampleSize} ${partnerResponseSampleSize === 1 ? 'risposta recente' : 'risposte recenti'}`,\r\n          `Average of ${partnerResponseSampleSize} recent ${partnerResponseSampleSize === 1 ? 'reply' : 'replies'}`\r\n        )\r\n      : partnerText('Stima iniziale', 'Initial estimate');\r\n    const partnerDeliveryCompactLabel = partnerDeliveryPromise.available\r\n      ? (partnerDeliveryPromise.isToday\r\n          ? partnerText('Consegna oggi', 'Delivery today')\r\n          : partnerDeliveryPromise.isTomorrow\r\n            ? partnerText('Consegna domani', 'Delivery tomorrow')\r\n            : partnerText('Prossima consegna', 'Next delivery'))\r\n      : partnerText('Consegna da verificare', 'Delivery to check');\r\n    const selectedPartnerDeliveryLabel = () => {\r\n      try {\r\n        const intent = window.FlorameDeliveryIntent?.get?.() || null;\r\n        if (!intent?.selectedDate || !intent?.selectedTimeSlot) return '';\r\n        return String(window.FlorameDeliveryIntent?.deliveryLabel?.() || '').trim();\r\n      } catch (_) {\r\n        return '';\r\n      }\r\n    };\r\n    const currentPartnerDeliveryLabel = () => String(\r\n      selectedPartnerDeliveryLabel()\r\n      || window.__floramePartnerDeliveryPromise?.deliveryLabel\r\n      || partnerDeliveryPromise.deliveryLabel\r\n      || partnerDeliveryPromise.headline\r\n      || partnerDeliveryCompactLabel\r\n    ).trim();\r\n    const partnerDeliveryFullLabel = currentPartnerDeliveryLabel();\r\n    const partnerTrustLabel = reviewAggregate && Math.max(0, Number(reviewAggregate.ratingCount || 0) || 0) > 0\r\n      ? partnerReviewCompactLabel(reviewAggregate)\r\n      : partnerText('Nuovo su florame.ai', 'New on florame.ai');\r\n    const heroSlides = config.heroSlides && typeof config.heroSlides === 'object' ? config.heroSlides : {};\r\n    const momentHero = heroSlides.moment && typeof heroSlides.moment === 'object' ? heroSlides.moment : {};\r\n    const heroAssets = window.__floramePartnerHeroAssets || {};\r\n    const coverImage = config.coverImage && typeof config.coverImage === 'object' ? config.coverImage : {};\r\n    const legacyPosition = ['left', 'center', 'right'].includes(String(momentHero.imagePosition || ''))\r\n      ? String(momentHero.imagePosition)\r\n      : 'center';\r\n    const fallbackCoverX = legacyPosition === 'left' ? 25 : legacyPosition === 'right' ? 75 : 50;\r\n    const coverPercent = (value, fallback) => Math.max(0, Math.min(Number(value ?? fallback) || 0, 100));\r\n    const coverPosition = `${coverPercent(coverImage.positionX, fallbackCoverX)}% ${coverPercent(coverImage.positionY, 50)}%`;\r\n    const storefrontCoverAsset = String(\r\n      coverImage.imageUrl\r\n      || momentHero.imageUrl\r\n      || momentHero.cardImageUrl\r\n      || heroAssets.moment\r\n      || moment.assetUrl\r\n      || ''\r\n    ).trim();\r\n    const momentHeroAsset = storefrontCoverAsset;\r\n    const coverSizes = '(max-width: 820px) 100vw, 720px';\r\n    const coverBackground = escapeHtml(window.FlorameImageVariants?.background?.(storefrontCoverAsset) || `url(\"${storefrontCoverAsset}\")`);\r\n    const heroImageMarkup = (url, lazy = false) => {\r\n      if (!url) return '';\r\n      const image = `<img class=\"florame-partner-editorial-image\" src=\"${escapeHtml(url)}\" alt=\"\" loading=\"${lazy ? 'lazy' : 'eager'}\" fetchpriority=\"${lazy ? 'low' : 'high'}\" decoding=\"async\">`;\r\n      return window.FlorameImageVariants?.html(image, coverSizes) || image;\r\n    };\r\n    const deliveryHeroAsset = storefrontCoverAsset;\r\n    const createHeroAsset = storefrontCoverAsset;\r\n    const momentCardAsset = storefrontCoverAsset;\r\n    partnerFavoritePayload.artUrl = storefrontCoverAsset;\r\n    const deliveryCardAsset = storefrontCoverAsset;\r\n    const createCardAsset = storefrontCoverAsset;\r\n    const compactPartnerAddressLabel = (value) => {\r\n      const raw = String(value || '').trim();\r\n      if (!raw) return '';\r\n      return raw\r\n        .split(/\\s+[\u00B7|]\\s+/)[0]\r\n        .replace(/,?\\s+\\d{5}$/u, '')\r\n        .replace(/\\s{2,}/g, ' ')\r\n        .trim();\r\n    };\r\n    const compactPartnerDeliveryLabel = (value) => String(value || '')\r\n      .trim()\r\n      .replace(/^(?:Consegna|Ritiro)\\s+/i, '')\r\n      .replace(/^(?:Delivery|Pickup)\\s+/i, '')\r\n      .replace(/^[a-z\u00E0-\u00FF]/u, (letter) => letter.toLocaleUpperCase(getNativeLanguage() === 'en' ? 'en-US' : 'it-IT'));\r\n    const currentLocationRawLabel = String(document.querySelector('[data-home-location-label]')?.textContent || '').trim();\r\n    const currentLocationLabel = compactPartnerAddressLabel(currentLocationRawLabel)\r\n      || partnerText('Inserisci indirizzo', 'Enter address');\r\n    const currentLocationKicker = partnerText('Consegna a', 'Deliver to');\r\n    const currentLocationFilled = document.querySelector('[data-home-address-trigger=\"header\"]')?.classList.contains('is-filled') === true;\r\n    const deliveryHeroEyebrow = '';\r\n    const deliveryHeroCtaLabel = partnerPrimaryLabel;\r\n    const deliveryHeroPromiseTitle = partnerDeliveryPromise.available\r\n      ? (partnerDeliveryPromise.deliveryLabel || partnerDeliveryPromise.headline || '')\r\n      : (partnerDeliveryPromise.headline || partnerDeliveryPromise.deliveryLabel || '');\r\n    const createHeroTitle = partnerText('Bouquet su misura', 'Made-to-measure bouquet');\r\n    const createHeroBody = partnerText('Personalizza stile e dettagli.', 'Personalize style and details.');\r\n    const createHeroPrimaryLabel = partnerText('Personalizza', 'Personalize');\r\n    window.__floramePartnerDeliveryPromise = partnerDeliveryPromise;\r\n    const exploreTitle = document.getElementById('homeExploreTitle');\r\n    const promotionsHost = document.querySelector('[data-partner-promotions]');\r\n    if (promotionsHost) {\r\n      promotionsHost.innerHTML = promotionBadges;\r\n      promotionsHost.hidden = !promotionBadges;\r\n    }\r\n    const exploreKicker = document.querySelector('.home-explore-kicker');\r\n    const selectionTitle = document.querySelector('#homeCommunitySection .section-head h3');\r\n    const createTitle = document.getElementById('homeCreateTitle');\r\n    const createKicker = document.querySelector('.home-create-kicker');\r\n    if (exploreTitle) exploreTitle.textContent = localRequest ? partnerText('Bouquet del negozio', 'Shop bouquets') : partnerText('Bouquet di oggi', 'Today\u2019s bouquets');\r\n    if (exploreKicker) exploreKicker.textContent = partnerText('Disponibili dal fiorista', 'Available from the florist');\r\n    if (selectionTitle) {\r\n      selectionTitle.textContent = partnerText('Bouquet di oggi', 'Today\u2019s bouquets');\r\n      selectionTitle.setAttribute('translate', 'no');\r\n      selectionTitle.setAttribute('data-native-i18n-skip', '');\r\n    }\r\n    if (createTitle) createTitle.textContent = partnerText('Non trovi quello che cerchi?', \"Can't find what you're looking for?\");\r\n    if (createKicker) createKicker.textContent = partnerText('Su misura', 'Made to measure');\r\n\r\n    heroTopSlot.hidden = false;\r\n    heroTopSlot.innerHTML = `\r\n      <div class=\"florame-partner-hero-topbar\">\r\n        <nav class=\"florame-partner-cover-actions\" aria-label=\"${escapeHtml(partnerText('Azioni del negozio', 'Store actions'))}\">\r\n          <a class=\"florame-partner-cover-action florame-partner-cover-action--back\" data-florame-partner-reset href=\"${escapeHtml(localizeStorefrontPath(CONFIG.homePath || '/'))}\" aria-label=\"${escapeHtml(partnerText('Esci dal negozio', 'Leave this store'))}\">\r\n            <span aria-hidden=\"true\">${partnerSurfaceIcon('arrow')}</span>\r\n          </a>\r\n          <span class=\"florame-partner-cover-actions__end\">\r\n            <button class=\"florame-partner-cover-action\" type=\"button\" data-partner-cover-search aria-label=\"${escapeHtml(partnerText('Vai ai bouquet', 'Go to bouquets'))}\">${partnerSurfaceIcon('search')}</button>\r\n            <button class=\"florame-partner-cover-action florame-partner-cover-favorite${partnerIsFavorite(partnerSlug) ? ' is-saved' : ''}\" type=\"button\" data-partner-cover-favorite aria-pressed=\"${partnerIsFavorite(partnerSlug) ? 'true' : 'false'}\" aria-label=\"${escapeHtml(partnerIsFavorite(partnerSlug) ? partnerText(`Rimuovi ${partnerDisplayName} dai fioristi preferiti`, `Remove ${partnerDisplayName} from favorite florists`) : partnerText(`Salva ${partnerDisplayName} nei fioristi preferiti`, `Save ${partnerDisplayName} to favorite florists`))}\"><span class=\"florame-partner-cover-favorite__star\" aria-hidden=\"true\">${partnerSurfaceIcon('star')}</span></button>\r\n            ${showDetailsCard ? `<button class=\"florame-partner-cover-action\" type=\"button\" data-partner-cover-more aria-label=\"${escapeHtml(partnerText('Apri informazioni sul fiorista', 'Open florist information'))}\">${partnerSurfaceIcon('more')}</button>` : ''}\r\n          </span>\r\n        </nav>\r\n        <div class=\"florame-partner-favorite-feedback\" data-partner-favorite-feedback role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" hidden>\r\n          <span aria-hidden=\"true\">${partnerSurfaceIcon('star')}</span>\r\n          <strong data-partner-favorite-feedback-copy></strong>\r\n          <a href=\"${escapeHtml(localizeStorefrontPath(CONFIG.homePath || '/'))}#favoriteFlorists\" data-partner-favorite-feedback-link>${partnerText('Apri', 'Open')}</a>\r\n        </div>\r\n        <div class=\"florame-partner-profile-card\">\r\n          <div class=\"florame-partner-identity-row florame-partner-identity-row--editorial\">\r\n            <div class=\"florame-partner-logos-row\">\r\n              ${buildLogoMarkup('florame-partner-logo', partnerLogo, partnerDisplayName || 'Partner', getInitials(partnerDisplayName, 'P'))}\r\n            </div>\r\n            <span class=\"florame-partner-identity-copy\">\r\n              <span class=\"florame-partner-identity-heading\">\r\n                <h1 class=\"florame-partner-identity-name\" translate=\"no\" data-native-i18n-skip data-partner-auto-pan>${escapeHtml(partnerDisplayName)}</h1>\r\n                ${partnerVerified ? `<button type=\"button\" class=\"florame-partner-verified\" data-partner-verified aria-expanded=\"false\" aria-controls=\"floramePartnerVerifiedNote\" aria-label=\"${escapeHtml(partnerText('Partner verificato da Florame. Mostra dettagli', 'Florame verified partner. Show details'))}\">${partnerSurfaceIcon('verified')}</button>` : ''}\r\n              </span>\r\n              <span class=\"florame-partner-identity-context\">\r\n                ${localityLabel ? `<button type=\"button\" class=\"florame-partner-identity-locality\" data-partner-signal=\"location\" aria-expanded=\"false\" aria-controls=\"floramePartnerSignalLayer\" aria-haspopup=\"dialog\" aria-label=\"${escapeHtml(partnerText(`Informazioni sulla zona ${localityLabel.replace(/\\s*\u00B7\\s*.*/, '')}`, `Information about the ${localityLabel.replace(/\\s*\u00B7\\s*.*/, '')} area`))}\">${partnerSurfaceIcon('location')}<strong>${escapeHtml(localityLabel.replace(/\\s*\u00B7\\s*.*/, ''))}</strong></button>` : ''}\r\n                <button type=\"button\" class=\"florame-partner-reputation-trigger${reviewAggregate ? (Math.max(0, Number(reviewAggregate.ratingCount || 0) || 0) === 0 ? ' has-no-reviews' : '') : ' is-loading'}\" aria-expanded=\"false\" aria-controls=\"floramePartnerReviewsLayer\" aria-haspopup=\"dialog\" aria-label=\"${escapeHtml(partnerText(`${partnerTrustLabel}. Apri le recensioni`, `${partnerTrustLabel}. Open reviews`))}\">\r\n                  <span class=\"florame-partner-trust-icon florame-partner-trust-icon--new\">${partnerSurfaceIcon('star')}</span>\r\n                  <span class=\"florame-partner-reputation-label\">${escapeHtml(partnerTrustLabel)}</span>\r\n                </button>\r\n              </span>\r\n            </span>\r\n            <span class=\"florame-partner-profile-meta\" aria-label=\"${escapeHtml(partnerText('Informazioni rapide del fiorista', 'Quick florist information'))}\">\r\n              <button type=\"button\" class=\"florame-partner-profile-meta-item\" data-partner-signal=\"delivery\" aria-expanded=\"false\" aria-controls=\"floramePartnerSignalLayer\" aria-haspopup=\"dialog\" aria-label=\"${escapeHtml(partnerText(`Dettagli consegna: ${partnerDeliveryFullLabel}`, `Delivery details: ${partnerDeliveryFullLabel}`))}\">${partnerSurfaceIcon('clock')}<strong data-partner-delivery-compact>${escapeHtml(partnerDeliveryCompactLabel)}</strong></button>\r\n              <button type=\"button\" class=\"florame-partner-profile-meta-item\" data-partner-signal=\"response\" aria-expanded=\"false\" aria-controls=\"floramePartnerSignalLayer\" aria-haspopup=\"dialog\" aria-label=\"${escapeHtml(partnerText(`Tempi di risposta: ${partnerResponseLabel}`, `Response time: ${partnerResponseLabel}`))}\">${partnerSurfaceIcon('lightning')}<strong>${escapeHtml(partnerResponseLabel)}</strong></button>\r\n            </span>\r\n          </div>\r\n          ${partnerVerified ? `<div class=\"florame-partner-verified-note\" id=\"floramePartnerVerifiedNote\" data-partner-verified-note hidden role=\"status\"><strong>${partnerText('Partner verificato da Florame', 'Florame verified partner')}</strong><span>${partnerText('Abbiamo verificato l\u2019identit\u00E0 e l\u2019attivazione di questo fiorista. Disponibilit\u00E0 e promozioni restano aggiornate dal negozio.', 'We verified this florist\u2019s identity and activation. Availability and promotions are maintained by the store.')}</span></div>` : ''}\r\n          <div class=\"florame-partner-profile-signals\" aria-label=\"${escapeHtml(partnerText('Informazioni aggiornate del negozio', 'Current store information'))}\">\r\n            <span class=\"florame-partner-profile-signal florame-partner-profile-signal--freshness is-${escapeHtml(availabilityState)}\">${partnerSurfaceIcon('clock')}<strong>${escapeHtml(availabilityFreshnessLabel)}</strong></span>\r\n          </div>\r\n        </div>\r\n        <section class=\"florame-partner-delivery-card florame-calendar-host\" aria-label=\"${escapeHtml(partnerText('Dove e quando ricevere i fiori', 'Where and when to receive the flowers'))}\">\r\n          <button type=\"button\" class=\"florame-delivery-calendar\" data-florame-calendar-card data-home-address-trigger=\"partner-schedule\" aria-haspopup=\"dialog\" aria-controls=\"florame-delivery-intent-sheet\">\r\n            <span class=\"florame-calendar-card__date\" aria-hidden=\"true\"><small>${partnerText('DATA', 'DATE')}</small><strong>+</strong></span>\r\n            <span class=\"florame-calendar-card__copy\"><small>${partnerText('Dove e quando', 'Where and when')}</small><strong>${partnerText('Scegli la consegna', 'Choose delivery')}</strong><em>${partnerText('Indirizzo, giorno e fascia oraria', 'Address, day and time window')}</em></span>\r\n            <span class=\"florame-calendar-card__arrow\" aria-hidden=\"true\">\u203A</span>\r\n          </button>\r\n        </section>\r\n      </div>\r\n    `;\r\n\r\n    window.FlorameDeliveryIntent?.renderCalendarCard?.(heroTopSlot.querySelector('[data-florame-calendar-card]'));\r\n    heroSlot.hidden = false;\r\n    heroSlot.innerHTML = `\r\n      <div class=\"florame-partner-hero-unified florame-partner-hero-editorial is-${escapeHtml(availabilityState)} is-moment-${escapeHtml(moment.key)}${moment.dark ? ' is-dark-moment' : ''}${moment.customBackground ? ' has-custom-occasion-art' : ''}\" style=\"--florame-partner-moment-art:url(&quot;${escapeHtml(moment.assetUrl)}&quot;)\" data-partner-editorial-carousel role=\"region\" aria-roledescription=\"carousel\" aria-label=\"${partnerText('In evidenza dal fiorista', 'Florist highlights')}\" tabindex=\"0\">\r\n        <div class=\"florame-partner-editorial-track\" aria-live=\"off\" aria-atomic=\"false\">\r\n          <section class=\"florame-partner-editorial-slide is-active${moment.dark ? ' is-inverse' : ''}\" style=\"--partner-slide-card-image:${coverBackground}\" data-partner-slide data-partner-slide-key=\"moment\" role=\"group\" aria-roledescription=\"slide\" aria-hidden=\"false\" aria-label=\"${partnerText('Il momento del fiorista, 1 di 3', 'Florist moment, 1 of 3')}\">\r\n            <div class=\"florame-partner-editorial-visual\" style=\"--partner-slide-image:${coverBackground};--partner-slide-position:${coverPosition}\" aria-hidden=\"true\">\r\n              ${heroImageMarkup(momentHeroAsset)}\r\n            </div>\r\n            <div class=\"florame-partner-editorial-copy\">\r\n              <h2>${escapeHtml(moment.title)}</h2>\r\n              <p>${escapeHtml(moment.body)}</p>\r\n              <div class=\"florame-partner-availability-state is-${escapeHtml(availabilityState)}\">${escapeHtml(partnerAvailabilityLabel(availabilityState))}</div>\r\n              <div class=\"florame-partner-editorial-actions\">\r\n                <a class=\"florame-partner-editorial-cta\" href=\"${escapeHtml(partnerPrimaryUrl)}\"><span>${escapeHtml(partnerPrimaryLabel)}</span>${partnerSurfaceIcon('arrow')}</a>\r\n              </div>\r\n            </div>\r\n          </section>\r\n\r\n          <section class=\"florame-partner-editorial-slide florame-partner-editorial-slide--delivery\" style=\"--partner-slide-card-image:${coverBackground}\" data-partner-slide data-partner-slide-key=\"delivery\" role=\"group\" aria-roledescription=\"slide\" hidden aria-hidden=\"true\" aria-label=\"${partnerText('Consegna, 2 di 3', 'Delivery, 2 of 3')}\">\r\n            <div class=\"florame-partner-editorial-visual\" style=\"--partner-slide-image:${coverBackground};--partner-slide-position:${coverPosition}\" aria-hidden=\"true\">\r\n              ${heroImageMarkup(deliveryHeroAsset, true)}\r\n            </div>\r\n            <div class=\"florame-partner-editorial-copy\">\r\n              ${!deliveryHeroEyebrow ? '' : `<span class=\"florame-partner-moment-eyebrow\">${escapeHtml(deliveryHeroEyebrow)}</span>`}\r\n              <h2 data-partner-delivery-custom=\"false\" data-partner-delivery-headline data-partner-delivery-window>${escapeHtml(deliveryHeroPromiseTitle)}</h2>\r\n              <div class=\"florame-partner-delivery-countdown\" ${partnerDeliveryPromise.available ? '' : 'hidden'}>\r\n                <span data-partner-delivery-countdown-label>${escapeHtml(partnerDeliveryPromise.countdownLabel || '')}</span>\r\n                <strong data-partner-delivery-countdown>${window.FlorameDeliveryPromise?.formatCountdown ? escapeHtml(window.FlorameDeliveryPromise.formatCountdown(partnerDeliveryPromise.countdownMs)) : ''}</strong>\r\n              </div>\r\n              <div class=\"florame-partner-editorial-actions\">\r\n                <a class=\"florame-partner-editorial-cta\" data-partner-hero-delivery-shop href=\"${escapeHtml(partnerPrimaryUrl)}\"><span>${escapeHtml(deliveryHeroCtaLabel)}</span>${partnerSurfaceIcon('arrow')}</a>\r\n              </div>\r\n            </div>\r\n          </section>\r\n\r\n          <section class=\"florame-partner-editorial-slide florame-partner-editorial-slide--create is-inverse\" style=\"--partner-slide-card-image:${coverBackground}\" data-partner-slide data-partner-slide-key=\"create\" role=\"group\" aria-roledescription=\"slide\" hidden aria-hidden=\"true\" aria-label=\"${partnerText('Crea il tuo bouquet, 3 di 3', 'Create your bouquet, 3 of 3')}\">\r\n            <div class=\"florame-partner-editorial-visual\" style=\"--partner-slide-image:${coverBackground};--partner-slide-position:${coverPosition}\" aria-hidden=\"true\">\r\n              ${heroImageMarkup(createHeroAsset, true)}\r\n            </div>\r\n            <div class=\"florame-partner-editorial-copy\">\r\n              <span class=\"florame-partner-moment-eyebrow\">${escapeHtml(partnerText('Creato per la tua occasione', 'Made for your occasion'))}</span>\r\n              <h2 data-partner-create-custom=\"false\">${escapeHtml(createHeroTitle)}</h2>\r\n              <p>${escapeHtml(createHeroBody)}</p>\r\n              <div class=\"florame-partner-editorial-actions\">\r\n                <a class=\"florame-partner-editorial-cta\" href=\"${escapeHtml(aiCreateUrl)}\"><span>${escapeHtml(createHeroPrimaryLabel)}</span>${partnerSurfaceIcon('arrow')}</a>\r\n                <a class=\"florame-partner-editorial-link\" href=\"${escapeHtml(customCreateUrl)}\">${escapeHtml(partnerText('Crea da zero', 'Create from scratch'))}</a>\r\n              </div>\r\n            </div>\r\n          </section>\r\n        </div>\r\n\r\n        <div class=\"florame-partner-editorial-progress\" aria-hidden=\"true\"><span></span></div>\r\n        <div class=\"florame-partner-carousel-controls-assistive\" aria-label=\"${partnerText('Cambia contenuto in evidenza', 'Change featured content')}\">\r\n          <button type=\"button\" data-partner-carousel-toggle aria-pressed=\"false\" aria-label=\"${partnerText('Metti in pausa i contenuti in evidenza', 'Pause featured content')}\" data-label-pause=\"${partnerText('Metti in pausa i contenuti in evidenza', 'Pause featured content')}\" data-label-resume=\"${partnerText('Riprendi i contenuti in evidenza', 'Resume featured content')}\">${partnerText('Pausa', 'Pause')}</button>\r\n          <button type=\"button\" data-partner-carousel-dot aria-current=\"true\" aria-pressed=\"true\" aria-label=\"${partnerText('Mostra il momento del fiorista, 1 di 3', 'Show florist moment, 1 of 3')}\"></button>\r\n          <button type=\"button\" data-partner-carousel-dot aria-current=\"false\" aria-pressed=\"false\" aria-label=\"${partnerText('Mostra la consegna, 2 di 3', 'Show delivery, 2 of 3')}\"></button>\r\n          <button type=\"button\" data-partner-carousel-dot aria-current=\"false\" aria-pressed=\"false\" aria-label=\"${partnerText('Mostra crea il tuo bouquet, 3 di 3', 'Show create your bouquet, 3 of 3')}\"></button>\r\n        </div>\r\n\r\n        ${showDetailsCard ? `\r\n          <template id=\"floramePartnerDetailsTemplate\">\r\n            <div class=\"florame-partner-detail-grid\">\r\n              <div class=\"florame-partner-detail-block florame-partner-detail-primary\">\r\n                <h3 class=\"florame-partner-detail-title\">${escapeHtml(homeCardTitle)}</h3>\r\n                ${shortBio ? `<p class=\"florame-partner-story\">${escapeHtml(shortBio)}</p>` : ''}\r\n                ${specialties.length ? `<div class=\"florame-partner-specialties\">${specialties.map((item) => `<span>${escapeHtml(item)}</span>`).join('')}</div>` : ''}\r\n                ${servicePromise ? `<p class=\"florame-partner-promise\"><strong>${escapeHtml(servicePromise)}</strong></p>` : ''}\r\n                <div class=\"florame-partner-contact-list\">\r\n                  ${addressLine ? `<div class=\"florame-partner-contact-row\"><span class=\"florame-partner-contact-icon\">${partnerSurfaceIcon('location')}</span><span class=\"florame-partner-contact-copy\"><small>${partnerText('Negozio', 'Store')}</small><strong>${escapeHtml(addressLine)}</strong></span></div>` : ''}\r\n                  ${googleMapsUrl || preciseMapsUrl ? `<div class=\"florame-partner-actions florame-partner-quick-actions\" data-partner-map-actions>${googleMapsUrl ? `<a class=\"florame-partner-cta florame-partner-cta-secondary\" href=\"${escapeHtml(googleMapsUrl)}\" target=\"_blank\" rel=\"noopener noreferrer\">${partnerSurfaceIcon('globe')}<span>${partnerText('Indicazioni', 'Directions')}</span></a>` : ''}${preciseMapsUrl ? `<a class=\"florame-partner-cta florame-partner-cta-secondary\" data-partner-precise-location href=\"${escapeHtml(preciseMapsUrl)}\" target=\"_blank\" rel=\"noopener noreferrer\">${partnerSurfaceIcon('location')}<span>${partnerText('Posizione precisa', 'Precise location')}</span></a>` : ''}</div>` : ''}\r\n                  <a class=\"florame-partner-contact-row\" data-partner-details-message href=\"${escapeHtml(partnerMessagesUrl)}\"><span class=\"florame-partner-contact-icon\">${partnerSurfaceIcon('message')}</span><span class=\"florame-partner-contact-copy\"><small>${partnerText('Messaggi', 'Messages')}</small><strong>${escapeHtml(partnerResponseLabel)}</strong></span><em>${partnerText('Invia messaggio', 'Send message')}${partnerSurfaceIcon('arrow')}</em></a>\r\n                </div>\r\n                ${googleProfileUrl ? `<div class=\"florame-partner-actions florame-partner-quick-actions\"><a class=\"florame-partner-cta florame-partner-cta-secondary\" href=\"${escapeHtml(googleProfileUrl)}\" target=\"_blank\" rel=\"noreferrer\">${partnerSurfaceIcon('globe')}<span>${partnerText('Sito del fiorista', 'Florist website')}</span>${partnerSurfaceIcon('arrow')}</a></div>` : ''}\r\n                <details class=\"florame-partner-detail-disclosure\">\r\n                  <summary><span class=\"florame-partner-disclosure-icon\">${partnerSurfaceIcon('delivery')}</span><span class=\"florame-partner-disclosure-copy\"><strong>${partnerText('Dove consegna', 'Delivery area')}</strong><small>${escapeHtml(coverageSummary)}</small></span><span class=\"florame-partner-disclosure-chevron\">${partnerSurfaceIcon('chevron')}</span></summary>\r\n                  <div class=\"florame-partner-detail-disclosure__body\">\r\n                    <div class=\"florame-partner-coverage\">\r\n                      ${coverageRows.map((row) => `<div class=\"florame-partner-coverage-row\"><strong>${escapeHtml(row.label)}</strong><span>${escapeHtml(row.value)}</span></div>`).join('')}\r\n                    </div>\r\n                  </div>\r\n                </details>\r\n                ${googleReviews.length ? `\r\n                  <details class=\"florame-partner-detail-disclosure\">\r\n                    <summary><span class=\"florame-partner-disclosure-icon\">${partnerSurfaceIcon('reviews')}</span><span class=\"florame-partner-disclosure-copy\"><strong>${escapeHtml(googleReviewsTitle)}</strong><small>${partnerText('Esperienze pubblicate su Google', 'Experiences published on Google')}</small></span><span class=\"florame-partner-disclosure-chevron\">${partnerSurfaceIcon('chevron')}</span></summary>\r\n                    <div class=\"florame-partner-detail-disclosure__body\">\r\n                      <div class=\"florame-partner-google-reviews\">\r\n                        <div class=\"florame-partner-google-reviews-head\">\r\n                          ${googleReviewPlaceUrl ? `<a class=\"florame-partner-google-reviews-source\" href=\"${escapeHtml(googleReviewPlaceUrl)}\" target=\"_blank\" rel=\"noreferrer\">Google</a>` : `<span class=\"florame-partner-google-reviews-source\">Google</span>`}\r\n                        </div>\r\n                        ${googleReviews.map((review) => `\r\n                          <div class=\"florame-partner-google-review\">\r\n                            <div class=\"florame-partner-google-review-top\">\r\n                              <strong class=\"florame-partner-google-review-author\">${escapeHtml(review.authorName || partnerText('Cliente Google', 'Google customer'))}</strong>\r\n                              <span class=\"florame-partner-google-review-rating\">${escapeHtml(String(review.rating || 5))}/5</span>\r\n                            </div>\r\n                            <p class=\"florame-partner-google-review-text\">${escapeHtml(review.text)}</p>\r\n                            ${review.relativeTimeDescription ? `<span class=\"florame-partner-google-review-time\">${escapeHtml(review.relativeTimeDescription)}</span>` : ''}\r\n                          </div>\r\n                        `).join('')}\r\n                      </div>\r\n                    </div>\r\n                  </details>\r\n                ` : ''}\r\n              </div>\r\n              <details class=\"florame-partner-detail-block florame-partner-detail-disclosure\">\r\n                <summary><span class=\"florame-partner-disclosure-icon\">${partnerSurfaceIcon('clock')}</span><span class=\"florame-partner-disclosure-copy\"><strong>${partnerText('Orari del negozio', 'Store hours')}</strong><small>${partnerText('Quando puoi trovarlo aperto', 'When the store is open')}</small></span><span class=\"florame-partner-disclosure-chevron\">${partnerSurfaceIcon('chevron')}</span></summary>\r\n                <div class=\"florame-partner-detail-disclosure__body\">\r\n                  <div class=\"florame-partner-hours\">\r\n                    ${hours.map((row) => `<div class=\"florame-partner-hours-row\"><strong>${escapeHtml(row.label)}</strong><span>${escapeHtml(row.value)}</span></div>`).join('')}\r\n                  </div>\r\n                </div>\r\n              </details>\r\n              <details class=\"florame-partner-detail-block florame-partner-detail-disclosure florame-partner-delivery-slots-block\">\r\n                <summary><span class=\"florame-partner-disclosure-icon\">${partnerSurfaceIcon('delivery')}</span><span class=\"florame-partner-disclosure-copy\"><strong>${partnerText('Quando consegna', 'Delivery times')}</strong><small>${partnerText('Fasce disponibili per gli ordini', 'Available order slots')}</small></span><span class=\"florame-partner-disclosure-chevron\">${partnerSurfaceIcon('chevron')}</span></summary>\r\n                <div class=\"florame-partner-detail-disclosure__body\">\r\n                  <div class=\"florame-partner-hours\">\r\n                    ${deliverySlots.map((row) => `<div class=\"florame-partner-hours-row florame-partner-delivery-slot-row\"><strong>${escapeHtml(row.label)}</strong><span>${escapeHtml(row.value)}</span></div>`).join('')}\r\n                  </div>\r\n                </div>\r\n              </details>\r\n            </div>\r\n          </template>\r\n        ` : ''}\r\n      </div>\r\n    `;\r\n\r\n    if (heroSecondarySlot) {\r\n      const secondaryMeta = heroSlot.querySelector('.florame-partner-hero-meta--editorial');\r\n      heroSecondarySlot.innerHTML = '';\r\n      heroSecondarySlot.classList.remove('is-partner-loading');\r\n      heroSecondarySlot.removeAttribute('aria-busy');\r\n      if (secondaryMeta) {\r\n        const deliveryCard = heroTopSlot.querySelector('.florame-partner-delivery-card');\r\n        if (deliveryCard) deliveryCard.before(secondaryMeta);\r\n        else heroSecondarySlot.appendChild(secondaryMeta);\r\n      }\r\n      heroSecondarySlot.hidden = !heroSecondarySlot.childElementCount;\r\n    }\r\n    const homeContainer = document.querySelector('.app-home-container');\r\n    let catalogExitRow = homeContainer?.querySelector(':scope > .florame-partner-store-exit-row--catalog');\r\n    if (homeContainer && !catalogExitRow) {\r\n      catalogExitRow = document.createElement('div');\r\n      catalogExitRow.className = 'florame-partner-store-exit-row florame-partner-store-exit-row--catalog';\r\n      homeContainer.appendChild(catalogExitRow);\r\n    }\r\n    if (catalogExitRow) {\r\n      catalogExitRow.innerHTML = `\r\n        <a class=\"florame-partner-store-exit\" data-florame-store-exit data-florame-partner-reset href=\"${escapeHtml(localizeStorefrontPath(CONFIG.homePath || '/'))}\">\r\n          <span class=\"florame-partner-store-exit__icon\" aria-hidden=\"true\">${partnerSurfaceIcon('arrow')}</span>\r\n          <span>${partnerText('Esci dal negozio', 'Leave this store')}</span>\r\n        </a>\r\n      `;\r\n    }\r\n    if (localRequest) {\r\n      const reputation = heroTopSlot.querySelector('.florame-partner-reputation-trigger');\r\n      if (reputation) reputation.outerHTML = `<span class=\"florame-partner-identity-locality\">${partnerSurfaceIcon('flower')}<strong>${partnerText('Gestita da Florame','Managed by Florame')}</strong></span>`;\r\n      const meta = heroTopSlot.querySelector('.florame-partner-profile-meta');\r\n      if (meta) meta.innerHTML = `<span class=\"florame-partner-profile-meta-item\">${partnerSurfaceIcon('clock')}<strong>${partnerText('Consegna su richiesta','Delivery on request')}</strong></span><button type=\"button\" class=\"florame-partner-profile-meta-item\" data-partner-signal=\"request\" aria-haspopup=\"dialog\" aria-controls=\"floramePartnerSignalLayer\">${partnerSurfaceIcon('info')}<strong>${partnerText('Come funziona','How it works')}</strong></button>`;\r\n      const details = heroSlot.querySelector('#floramePartnerDetailsTemplate');\r\n      if (details) details.innerHTML = `<h3 class=\"florame-partner-detail-title\">${partnerText('Come funziona la richiesta','How requests work')}</h3>${window.FlorameLocalFlorist?.guideMarkup(getNativeLanguage()) || ''}`;\r\n    }\r\n    const detailsTemplate = heroSlot.querySelector('#floramePartnerDetailsTemplate');\r\n    const toggle = heroTopSlot.querySelector('[data-partner-cover-more]')\r\n      || heroTopSlot.querySelector('.florame-partner-hero-action')\r\n      || heroSecondarySlot?.querySelector('.florame-partner-hero-action')\r\n      || heroSlot.querySelector('.florame-partner-hero-action');\r\n    if (toggle && detailsTemplate) {\r\n      mountPartnerDetailsSheet({\r\n        toggle,\r\n        html: detailsTemplate.innerHTML,\r\n        name: partner.name || partner.partnerId || '',\r\n        logo: partnerLogo,\r\n        location: localityLabel,\r\n        themeSource: appHeader\r\n      });\r\n      detailsTemplate.remove();\r\n    } else {\r\n      removePartnerDetailsLayer();\r\n    }\r\n    const reviewsToggle = heroTopSlot.querySelector('.florame-partner-reputation-trigger')\r\n      || heroSecondarySlot?.querySelector('.florame-partner-reputation-trigger')\r\n      || heroSlot.querySelector('.florame-partner-reputation-trigger');\r\n    if (reviewsToggle) {\r\n      mountPartnerReviewsSheet({\r\n        toggle: reviewsToggle,\r\n        partnerId: partner.partnerId || partner.id || '',\r\n        partnerSlug,\r\n        name: partner.name || partner.partnerId || '',\r\n        aggregate: reviewAggregate,\r\n        themeSource: appHeader\r\n      });\r\n    } else {\r\n      removePartnerReviewsLayer();\r\n    }\r\n    const signalTriggers = heroTopSlot.querySelectorAll('[data-partner-signal]');\r\n    const heroAddressTrigger = heroTopSlot.querySelector('[data-florame-calendar-card]');\r\n    const heroScheduleTrigger = heroTopSlot.querySelector('[data-home-address-trigger=\"partner-schedule\"]');\r\n    mountPartnerSignalSheet({\r\n      triggers: signalTriggers,\r\n      name: partnerDisplayName,\r\n      themeSource: appHeader,\r\n      payloads: {\r\n        request: {\r\n          icon: 'info', eyebrow: 'Florame',\r\n          title: partnerText('Come funziona la richiesta','How requests work'),\r\n          localRequestGuide: true\r\n        },\r\n        location: {\r\n          icon: 'location',\r\n          eyebrow: partnerText('Zona del fiorista', 'Florist area'),\r\n          title: localityLabel || partnerText('Servizio locale', 'Local service'),\r\n          body: localRequest ? partnerText('Florame cerca un fiorista nella zona per gestire la tua richiesta. Inserisci l\u2019indirizzo per verificare la fattibilit\u00E0.','Florame finds a florist in the area to handle your request. Enter the address to check feasibility.') : partnerText(\r\n            'Questa \u00E8 la zona in cui opera il fiorista. Inserisci il tuo indirizzo per verificare copertura e costi della consegna.',\r\n            'This is the area served by the florist. Enter your address to check delivery coverage and costs.'\r\n          ),\r\n          facts: [\r\n            { label: partnerText('Fiorista', 'Florist'), value: partnerDisplayName },\r\n            { label: partnerText('Zona', 'Area'), value: localityLabel || coverageSummary }\r\n          ],\r\n          action: { label: partnerText('Inserisci indirizzo', 'Enter address'), target: heroAddressTrigger }\r\n        },\r\n        delivery: () => ({\r\n          icon: 'calendar',\r\n          eyebrow: partnerText('Prossima consegna', 'Next delivery'),\r\n          title: currentPartnerDeliveryLabel(),\r\n          body: partnerText(\r\n            'La disponibilit\u00E0 viene aggiornata dal negozio. Puoi scegliere la fascia prima di aggiungere il bouquet al carrello.',\r\n            'Availability is updated by the store. You can choose the time window before adding the bouquet to your cart.'\r\n          ),\r\n          facts: [\r\n            { label: partnerText('Modalit\u00E0', 'Method'), value: partnerText('Consegna del fiorista', 'Florist delivery') },\r\n            { label: partnerText('Fascia mostrata', 'Displayed window'), value: currentPartnerDeliveryLabel() }\r\n          ],\r\n          action: { label: partnerText('Cambia fascia', 'Change time'), target: heroScheduleTrigger }\r\n        }),\r\n        response: {\r\n          icon: 'lightning',\r\n          eyebrow: partnerText('Chat con il fiorista', 'Chat with the florist'),\r\n          title: partnerResponseLabel,\r\n          body: partnerText(\r\n            'Scrivi direttamente al fiorista per richieste sul bouquet, disponibilit\u00E0 o dettagli della consegna.',\r\n            'Message the florist directly about bouquets, availability, or delivery details.'\r\n          ),\r\n          facts: [\r\n            { label: partnerResponseEvidenceLabel, value: partnerResponseLabel },\r\n            { label: partnerText('Canale', 'Channel'), value: partnerText('Messaggi Florame', 'Florame messages') }\r\n          ],\r\n          action: { label: partnerText('Invia messaggio', 'Send message'), href: partnerMessagesUrl }\r\n        },\r\n        punctual: () => ({\r\n          icon: 'clock',\r\n          eyebrow: partnerText('Servizio Florame', 'Florame service'),\r\n          title: partnerText('Consegne puntuali', 'On-time deliveries'),\r\n          body: partnerText(\r\n            'La fascia scelta resta visibile nell\u2019ordine e al fiorista. Se serve coordinarsi, puoi scrivergli dalla chat Florame.',\r\n            'The selected delivery window stays visible in the order and to the florist. If coordination is needed, you can use Florame chat.'\r\n          ),\r\n          facts: [\r\n            { label: partnerText('Fascia attuale', 'Current window'), value: currentPartnerDeliveryLabel() },\r\n            { label: partnerText('Assistenza', 'Support'), value: partnerText('Chat diretta con il fiorista', 'Direct florist chat') }\r\n          ],\r\n          action: { label: partnerText('Orari e consegne', 'Hours and deliveries'), target: toggle }\r\n        }),\r\n        fresh: {\r\n          icon: 'leaf',\r\n          eyebrow: partnerText('Preparato dal fiorista', 'Prepared by the florist'),\r\n          title: partnerText('Fiori freschi', 'Fresh flowers'),\r\n          body: partnerText(\r\n            'Il bouquet viene preparato dal partner con i fiori disponibili. Eventuali sostituzioni mantengono stile, palette e valore dell\u2019ordine.',\r\n            'The bouquet is prepared by the partner with available flowers. Any substitutions preserve the order\u2019s style, palette, and value.'\r\n          ),\r\n          facts: [\r\n            { label: partnerText('Preparazione', 'Preparation'), value: partnerText('A cura del fiorista', 'By the florist') },\r\n            { label: partnerText('Qualit\u00E0', 'Quality'), value: partnerText('Stile e valore rispettati', 'Style and value preserved') }\r\n          ],\r\n          action: { label: partnerText('Info sul fiorista', 'Florist information'), target: toggle }\r\n        }\r\n      }\r\n    });\r\n    syncPartnerAutoPan(heroTopSlot);\r\n    let storeInfoStrip = homeContainer?.querySelector(':scope > .florame-partner-store-info-strip');\r\n    if (homeContainer && !storeInfoStrip) {\r\n      storeInfoStrip = document.createElement('aside');\r\n      storeInfoStrip.className = 'florame-partner-store-info-strip';\r\n      storeInfoStrip.setAttribute('aria-label', partnerText('Informazioni del negozio', 'Store information'));\r\n      homeContainer.appendChild(storeInfoStrip);\r\n    }\r\n    if (storeInfoStrip) {\r\n      const primaryHours = formatTodayHours(partner.openingHours || {});\r\n      const previousInfoDockState = storeInfoStrip.dataset.state === 'expanded' ? 'expanded' : 'collapsed';\r\n      storeInfoStrip.id = storeInfoStrip.id || 'floramePartnerInfoDock';\r\n      storeInfoStrip.dataset.state = previousInfoDockState;\r\n      storeInfoStrip.innerHTML = `\r\n        <button type=\"button\" class=\"florame-partner-store-info-strip__compact\" data-partner-info-dock-toggle aria-expanded=\"${previousInfoDockState === 'expanded' ? 'true' : 'false'}\" aria-controls=\"${storeInfoStrip.id}\" aria-label=\"${partnerText('Apri le informazioni del negozio', 'Open store information')}\">\r\n          ${partnerSurfaceIcon('storefront')}\r\n          <span><small>${partnerText('Negozio', 'Store')}</small><strong>${escapeHtml(primaryHours.value || primaryHours.label)}</strong></span>\r\n          ${partnerSurfaceIcon('chevron')}\r\n        </button>\r\n        <button type=\"button\" data-partner-store-hours>\r\n          ${partnerSurfaceIcon('clock')}\r\n          <span><small>${partnerText('Orari negozio', 'Store hours')}</small><strong data-partner-auto-pan>${escapeHtml(primaryHours.value || primaryHours.label)}</strong></span>\r\n        </button>\r\n        <a class=\"florame-partner-store-message\" href=\"${escapeHtml(partnerMessagesUrl)}\" aria-label=\"${escapeHtml(partnerText(`Invia messaggio a ${partnerDisplayName}`, `Message ${partnerDisplayName}`))}\">${partnerSurfaceIcon('message')}<span><strong data-partner-auto-pan>${partnerText('Invia messaggio', 'Send message')}</strong></span></a>\r\n        <button type=\"button\" data-partner-store-info>\r\n          ${partnerSurfaceIcon('info')}\r\n          <span><strong data-partner-auto-pan>${partnerText('Info negozio', 'Store info')}</strong></span>\r\n          ${partnerSurfaceIcon('arrow')}\r\n        </button>\r\n      `;\r\n      const infoDockToggle = storeInfoStrip.querySelector('[data-partner-info-dock-toggle]');\r\n      if (localRequest) {\r\n        infoDockToggle.querySelector('small').textContent = 'Florame';\r\n        infoDockToggle.querySelector('strong').textContent = partnerText('Su richiesta','On request');\r\n        const hoursButton = storeInfoStrip.querySelector('[data-partner-store-hours]');\r\n        if (hoursButton) hoursButton.hidden = true;\r\n      }\r\n      const emitFloatingDockState = (expanded) => {\r\n        document.dispatchEvent(new CustomEvent('florame:floating-dock-state', {\r\n          detail: { dock: 'partner-info', expanded: expanded === true }\r\n        }));\r\n      };\r\n      const syncStoreInfoStripAccessibility = () => {\r\n        const hidden = storeInfoStrip.classList.contains('is-scroll-hidden')\r\n          || storeInfoStrip.classList.contains('is-peer-suppressed');\r\n        storeInfoStrip.setAttribute('aria-hidden', hidden ? 'true' : 'false');\r\n        storeInfoStrip.inert = hidden;\r\n      };\r\n      const setStoreInfoDockExpanded = (expanded, options = {}) => {\r\n        const nextExpanded = expanded === true;\r\n        storeInfoStrip.dataset.state = nextExpanded ? 'expanded' : 'collapsed';\r\n        infoDockToggle?.setAttribute('aria-expanded', nextExpanded ? 'true' : 'false');\r\n        infoDockToggle?.setAttribute('aria-label', nextExpanded\r\n          ? partnerText('Chiudi le informazioni del negozio', 'Close store information')\r\n          : partnerText('Apri le informazioni del negozio', 'Open store information'));\r\n        if (nextExpanded) storeInfoStrip.classList.remove('is-peer-suppressed');\r\n        syncStoreInfoStripAccessibility();\r\n        if (options.notify !== false) emitFloatingDockState(nextExpanded);\r\n        if (!nextExpanded && options.focus === true) infoDockToggle?.focus({ preventScroll: true });\r\n      };\r\n      storeInfoStrip.__florameSetExpanded = setStoreInfoDockExpanded;\r\n      storeInfoStrip.__florameSyncAccessibility = syncStoreInfoStripAccessibility;\r\n      infoDockToggle?.addEventListener('click', () => {\r\n        setStoreInfoDockExpanded(storeInfoStrip.dataset.state !== 'expanded');\r\n      });\r\n      storeInfoStrip.querySelector('[data-partner-store-hours]')?.addEventListener('click', () => {\r\n        setStoreInfoDockExpanded(false);\r\n        toggle?.click?.();\r\n      });\r\n      storeInfoStrip.querySelector('[data-partner-store-info]')?.addEventListener('click', () => {\r\n        setStoreInfoDockExpanded(false);\r\n        toggle?.click?.();\r\n      });\r\n      if (storeInfoStrip.dataset.floatingDockBound !== 'true') {\r\n        storeInfoStrip.dataset.floatingDockBound = 'true';\r\n        document.addEventListener('florame:floating-dock-state', (event) => {\r\n          if (event?.detail?.dock !== 'cart') return;\r\n          const cartExpanded = event.detail.expanded === true;\r\n          if (cartExpanded) {\r\n            storeInfoStrip.__florameSetExpanded?.(false, { notify: false });\r\n            storeInfoStrip.classList.add('is-peer-suppressed');\r\n          } else {\r\n            storeInfoStrip.classList.remove('is-peer-suppressed');\r\n          }\r\n          storeInfoStrip.__florameSyncAccessibility?.();\r\n        });\r\n        document.addEventListener('pointerdown', (event) => {\r\n          if (storeInfoStrip.dataset.state !== 'expanded' || storeInfoStrip.contains(event.target)) return;\r\n          storeInfoStrip.__florameSetExpanded?.(false);\r\n        }, true);\r\n        document.addEventListener('keydown', (event) => {\r\n          if (event.key !== 'Escape' || storeInfoStrip.dataset.state !== 'expanded') return;\r\n          storeInfoStrip.__florameSetExpanded?.(false, { focus: true });\r\n        });\r\n      }\r\n      const syncStoreInfoStripVisibility = (scrollY = window.scrollY) => {\r\n        const hiddenByScroll = scrollY > 12;\r\n        if (hiddenByScroll && storeInfoStrip.dataset.state === 'expanded') {\r\n          setStoreInfoDockExpanded(false);\r\n        }\r\n        storeInfoStrip.classList.toggle('is-scroll-hidden', hiddenByScroll);\r\n        syncStoreInfoStripAccessibility();\r\n      };\r\n      if (storeInfoStrip.dataset.scrollVisibilityBound !== 'true') {\r\n        let scrollFrame = 0;\r\n        const onStoreInfoScroll = () => {\r\n          if (scrollFrame) return;\r\n          scrollFrame = window.requestAnimationFrame(() => {\r\n            scrollFrame = 0;\r\n            syncStoreInfoStripVisibility();\r\n          });\r\n        };\r\n        storeInfoStrip.dataset.scrollVisibilityBound = 'true';\r\n        window.addEventListener('scroll', onStoreInfoScroll, { passive: true });\r\n      }\r\n      syncStoreInfoStripVisibility(initialScrollY);\r\n      syncPartnerAutoPan(storeInfoStrip);\r\n    }\r\n    heroTopSlot.querySelector('[data-partner-cover-search]')?.addEventListener('click', () => {\r\n      const explore = document.getElementById('homeExplore');\r\n      explore?.scrollIntoView?.({ behavior: 'smooth', block: 'start' });\r\n      window.setTimeout(() => {\r\n        const filter = explore?.querySelector?.('[data-home-filter-open], [data-home-explore-filter].is-active');\r\n        filter?.focus?.({ preventScroll: true });\r\n      }, 420);\r\n    });\r\n    const partnerFavoriteToggle = heroTopSlot.querySelector('[data-partner-cover-favorite]');\r\n    const partnerFavoriteFeedback = heroTopSlot.querySelector('[data-partner-favorite-feedback]');\r\n    let partnerFavoriteFeedbackTimer = 0;\r\n    let partnerFavoriteHideTimer = 0;\r\n    const syncPartnerFavoriteToggle = (saved, announce = false) => {\r\n      if (!partnerFavoriteToggle) return;\r\n      partnerFavoriteToggle.classList.toggle('is-saved', saved);\r\n      partnerFavoriteToggle.classList.remove('is-celebrating');\r\n      partnerFavoriteToggle.setAttribute('aria-pressed', saved ? 'true' : 'false');\r\n      partnerFavoriteToggle.setAttribute('aria-label', saved\r\n        ? partnerText(`Rimuovi ${partnerDisplayName} dai fioristi preferiti`, `Remove ${partnerDisplayName} from favorite florists`)\r\n        : partnerText(`Salva ${partnerDisplayName} nei fioristi preferiti`, `Save ${partnerDisplayName} to favorite florists`));\r\n      if (!announce || !partnerFavoriteFeedback) return;\r\n      window.clearTimeout(partnerFavoriteFeedbackTimer);\r\n      window.clearTimeout(partnerFavoriteHideTimer);\r\n      const feedbackCopy = partnerFavoriteFeedback.querySelector('[data-partner-favorite-feedback-copy]');\r\n      const feedbackLink = partnerFavoriteFeedback.querySelector('[data-partner-favorite-feedback-link]');\r\n      if (feedbackCopy) feedbackCopy.textContent = saved\r\n        ? partnerText('Fiorista salvato', 'Florist saved')\r\n        : partnerText('Fiorista rimosso', 'Florist removed');\r\n      if (feedbackLink) feedbackLink.hidden = !saved;\r\n      partnerFavoriteFeedback.hidden = false;\r\n      window.requestAnimationFrame(() => partnerFavoriteFeedback.classList.add('is-visible'));\r\n      if (saved) {\r\n        partnerFavoriteToggle.classList.add('is-celebrating');\r\n        window.setTimeout(() => partnerFavoriteToggle.classList.remove('is-celebrating'), 620);\r\n      }\r\n      partnerFavoriteFeedbackTimer = window.setTimeout(() => {\r\n        partnerFavoriteFeedback.classList.remove('is-visible');\r\n        partnerFavoriteHideTimer = window.setTimeout(() => {\r\n          if (!partnerFavoriteFeedback.classList.contains('is-visible')) partnerFavoriteFeedback.hidden = true;\r\n        }, 300);\r\n      }, 3200);\r\n    };\r\n    partnerFavoriteToggle?.addEventListener('click', () => {\r\n      const saved = !partnerIsFavorite(partnerSlug);\r\n      setFavoritePartner(partnerFavoritePayload, saved);\r\n      syncPartnerFavoriteToggle(saved, true);\r\n      try { navigator.vibrate?.(saved ? [12, 20, 18] : 12); } catch (_) {}\r\n    });\r\n    try { window.__floramePartnerFavoriteSyncCleanup?.(); } catch (_) {}\r\n    const handleFavoriteStorage = (event) => {\r\n      if (event.key === FAVORITE_PARTNERS_KEY) syncPartnerFavoriteToggle(partnerIsFavorite(partnerSlug));\r\n    };\r\n    const handleFavoriteChange = (event) => {\r\n      if (!event.detail || slugify(event.detail.partnerSlug) === partnerSlug) {\r\n        syncPartnerFavoriteToggle(partnerIsFavorite(partnerSlug));\r\n      }\r\n    };\r\n    window.addEventListener('storage', handleFavoriteStorage);\r\n    window.addEventListener('florame:favorite-partners-changed', handleFavoriteChange);\r\n    window.__floramePartnerFavoriteSyncCleanup = () => {\r\n      window.removeEventListener('storage', handleFavoriteStorage);\r\n      window.removeEventListener('florame:favorite-partners-changed', handleFavoriteChange);\r\n    };\r\n    const coverMoreTrigger = heroTopSlot.querySelector('[data-partner-cover-more]');\r\n    if (coverMoreTrigger && coverMoreTrigger !== toggle) {\r\n      coverMoreTrigger.addEventListener('click', () => toggle?.click?.());\r\n    }\r\n    const verifiedTrigger = heroTopSlot.querySelector('[data-partner-verified]');\r\n    const verifiedNote = heroTopSlot.querySelector('[data-partner-verified-note]');\r\n    if (verifiedTrigger && verifiedNote) {\r\n      const setVerifiedNote = (open) => {\r\n        verifiedNote.hidden = !open;\r\n        verifiedTrigger.setAttribute('aria-expanded', open ? 'true' : 'false');\r\n      };\r\n      verifiedTrigger.addEventListener('click', (event) => {\r\n        event.stopPropagation();\r\n        const opening = verifiedNote.hidden;\r\n        setVerifiedNote(opening);\r\n        if (opening) {\r\n          window.setTimeout(() => document.addEventListener('click', () => setVerifiedNote(false), { once: true }), 0);\r\n        }\r\n      });\r\n      verifiedNote.addEventListener('click', (event) => event.stopPropagation());\r\n      heroTopSlot.addEventListener('keydown', (event) => {\r\n        if (event.key === 'Escape' && !verifiedNote.hidden) {\r\n          setVerifiedNote(false);\r\n          verifiedTrigger.focus({ preventScroll: true });\r\n        }\r\n      });\r\n    }\r\n    const editorialRoot = heroSlot.querySelector('[data-partner-editorial-carousel]');\r\n    const syncDeliveryPromise = (model) => {\r\n      window.__floramePartnerDeliveryPromise = model || null;\r\n      const label = String(\r\n        currentPartnerDeliveryLabel()\r\n        || model?.deliveryLabel\r\n      ).trim();\r\n      document.querySelectorAll('[data-partner-delivery-summary]').forEach((node) => {\r\n        node.textContent = compactPartnerDeliveryLabel(label) || partnerText('Consegna da verificare', 'Delivery to check');\r\n      });\r\n      document.querySelectorAll('[data-partner-signal=\"delivery\"]').forEach((node) => {\r\n        node.setAttribute('aria-label', partnerText(`Dettagli consegna: ${label}`, `Delivery details: ${label}`));\r\n      });\r\n      document.querySelectorAll('[data-partner-card-delivery]').forEach((node) => {\r\n        const card = node.closest?.('.snap-card');\r\n        const cta = card?.querySelector?.('[data-awihome-cta]');\r\n        const uiState = String(\r\n          cta?.dataset?.awiUiState\r\n          || card?.dataset?.productUiState\r\n          || ''\r\n        ).trim().toLowerCase();\r\n        const unavailableHere = ['intent', 'request', 'reschedule', 'notify', 'subscribed', 'unavailable', 'alternative'].includes(uiState)\r\n          || (uiState === 'offer' && String(cta?.dataset?.requestedPartner || '').trim());\r\n        node.textContent = label || partnerText('Consegna da verificare', 'Delivery to check');\r\n        node.hidden = unavailableHere;\r\n      });\r\n      window.dispatchEvent(new CustomEvent('florame:partner-delivery-promise', { detail: model || null }));\r\n    };\r\n    window.__florameSyncPartnerDeliveryIntent = () => syncDeliveryPromise(\r\n      window.__floramePartnerDeliveryPromise || partnerDeliveryPromise\r\n    );\r\n    if (editorialRoot && window.FlorameDeliveryPromise?.mount) {\r\n      window.FlorameDeliveryPromise.mount(editorialRoot, {\r\n        promiseInput: partnerDeliveryPromiseInput,\r\n        onPromise: syncDeliveryPromise\r\n      });\r\n    } else {\r\n      syncDeliveryPromise(partnerDeliveryPromise);\r\n    }\r\n    if (!options || options.skipPrewarm !== true) {\r\n      prewarmPartnerCardTranslations(partner);\r\n    }\r\n  }\r\n\r\n  function applyRobotsMeta(partner) {\r\n    if (!partner || partner.storefrontConfig?.noIndex !== true) return;\r\n    let meta = document.querySelector('meta[name=\"robots\"]');\r\n    if (!meta) {\r\n      meta = document.createElement('meta');\r\n      meta.setAttribute('name', 'robots');\r\n      document.head.appendChild(meta);\r\n    }\r\n    meta.setAttribute('content', 'noindex, nofollow');\r\n  }\r\n\r\n  function stablePartnerSurfaceValue(value) {\r\n    if (Array.isArray(value)) return value.map(stablePartnerSurfaceValue);\r\n    if (!value || typeof value !== 'object') return value;\r\n    return Object.keys(value).sort().reduce((out, key) => {\r\n      out[key] = stablePartnerSurfaceValue(value[key]);\r\n      return out;\r\n    }, {});\r\n  }\r\n\r\n  function partnerSurfaceRenderFingerprint(partner) {\r\n    if (!partner) return 'partner:none';\r\n    const surface = {\r\n      partnerId: partner.partnerId || partner.id || '',\r\n      name: partner.name || '',\r\n      logoUrl: partner.logoUrl || '',\r\n      status: partner.status || '',\r\n      address: partner.address || {},\r\n      storefrontConfig: partner.storefrontConfig || {},\r\n      stockMode: partner.stockMode || {},\r\n      openingHours: partner.openingHours || {},\r\n      coverageRules: partner.coverageRules || [],\r\n      defaultCap: partner.defaultCap || '',\r\n      deliveryReschedule: partner.deliveryReschedule || {},\r\n      deliverySpecialDates: partner.deliverySpecialDates || {},\r\n      deliveryTimeSlots: partner.deliveryTimeSlots || {},\r\n      reviewAggregate: partner.reviewAggregate || {},\r\n      portal: partner.portal || {}\r\n    };\r\n    try { return JSON.stringify(stablePartnerSurfaceValue(surface)); } catch (_) { return String(Date.now()); }\r\n  }\r\n\r\n  function renderPartnerHomeStable(partner, options) {\r\n    // Stock-only updates should refresh the timestamp without rebuilding the hero.\r\n    updatePartnerAvailabilityFreshness(partner);\r\n    const nextFingerprint = partnerSurfaceRenderFingerprint(partner);\r\n    const surfaceMounted = !!document.querySelector('[data-partner-editorial-carousel]');\r\n    if (options?.force !== true && surfaceMounted && partnerSurfaceFingerprint === nextFingerprint) return false;\r\n    renderPartnerHome(partner, options);\r\n    partnerSurfaceFingerprint = nextFingerprint;\r\n    return true;\r\n  }\r\n\r\n  function partnerStockRevision(partner) {\r\n    if (!partner || typeof partner !== 'object') return '';\r\n    const availability = partner.storefrontAvailability || {};\r\n    const stats = partner.manualStockStats || {};\r\n    return String(\r\n      availability.lastUpdatedAt\r\n      || stats.lastConfirmedAt\r\n      || stats.updatedAt\r\n      || ''\r\n    ).trim();\r\n  }\r\n\r\n  function showPartnerAvailabilityNotice(revision) {\r\n    const cleanRevision = String(revision || '').trim();\r\n    if (!cleanRevision || cleanRevision === partnerAvailabilityNoticeRevision || !document.body) return;\r\n    partnerAvailabilityNoticeRevision = cleanRevision;\r\n    let notice = document.getElementById('florame-partner-stock-change-notice');\r\n    if (!notice) {\r\n      notice = document.createElement('aside');\r\n      notice.id = 'florame-partner-stock-change-notice';\r\n      notice.className = 'florame-partner-stock-change-notice';\r\n      notice.setAttribute('role', 'status');\r\n      notice.setAttribute('aria-live', 'polite');\r\n      notice.innerHTML = `\r\n        <span class=\"florame-partner-stock-change-notice__icon\" aria-hidden=\"true\">\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 12a8 8 0 1 1-2.34-5.66\"></path><path d=\"M20 4v6h-6\"></path></svg>\r\n        </span>\r\n        <span class=\"florame-partner-stock-change-notice__copy\">\r\n          <strong>${escapeHtml(partnerText('Disponibilit\u00E0 appena aggiornata', 'Availability just updated'))}</strong>\r\n          <span>${escapeHtml(partnerText('Il fiorista ha aggiornato i fiori disponibili.', 'The florist updated the available flowers.'))}</span>\r\n        </span>\r\n        <button type=\"button\" class=\"florame-partner-stock-change-notice__refresh\">${escapeHtml(partnerText('Aggiorna', 'Refresh'))}</button>\r\n        <button type=\"button\" class=\"florame-partner-stock-change-notice__close\" aria-label=\"${escapeHtml(partnerText('Chiudi avviso', 'Dismiss notice'))}\">\u00D7</button>`;\r\n      notice.querySelector('.florame-partner-stock-change-notice__refresh')?.addEventListener('click', () => {\r\n        window.location.reload();\r\n      });\r\n      notice.querySelector('.florame-partner-stock-change-notice__close')?.addEventListener('click', () => {\r\n        notice.classList.remove('is-visible');\r\n      });\r\n      document.body.appendChild(notice);\r\n    }\r\n    requestAnimationFrame(() => notice.classList.add('is-visible'));\r\n  }\r\n\r\n  async function resolvePartner(options) {\r\n    const ctx = getContext();\r\n    if (!ctx.active) {\r\n      window.__floramePartner = null;\r\n      window.__florameStorefrontDefaults = null;\r\n      window.__florameDeliveryRescheduleSettings = null;\r\n      window.__florameDeliverySpecialDateSettings = null;\r\n      window.__florameDeliveryTimeSlotSettings = null;\r\n      try { window.__FloramePackagingAvailability = null; } catch (_) {}\r\n      try { if (typeof window.updateFloramePackagingAvailability === 'function') window.updateFloramePackagingAvailability(null); } catch (_) {}\r\n      return null;\r\n    }\r\n    const cachedPayload = options?.cachedPayload || readCachedPartnerPayload(ctx.slug);\r\n\r\n    const apiBase = CONFIG.apiBase || 'https://us-central1-flower-ai-2d7aa.cloudfunctions.net';\r\n    const url = new URL(apiBase.replace(/\\/+$/, '') + '/portalResolveContext');\r\n    url.searchParams.set('partnerSlug', ctx.slug);\r\n    url.searchParams.set('host', window.location.host || '');\r\n    const prime = window.__floramePartnerContextPrime;\r\n    const primeAge = Date.now() - Number(prime?.startedAt);\r\n    const usePrime = prime && prime.url === url.toString() && !prime.consumed\r\n      && primeAge >= 0 && primeAge < 15000 && typeof prime.promise?.then === 'function';\r\n    if (prime) window.__floramePartnerContextPrime = null;\r\n    if (usePrime) prime.consumed = true;\r\n    const res = await (usePrime ? prime.promise : (window.FlorameReadCache?.fetch || window.fetch)(url.toString(), { credentials: 'omit', cache: 'no-store' })).catch(() => null);\r\n    if (getContext().slug !== ctx.slug) return null;\r\n    if (!res || !res.ok) {\r\n      if (cachedPayload?.partner) {\r\n        window.__floramePartner = cachedPayload.partner;\r\n        window.__florameStorefrontDefaults = cachedPayload.storefrontDefaults || null;\r\n        window.__florameDeliveryRescheduleSettings = cachedPayload.deliveryRescheduleSettings || cachedPayload.partner?.deliveryReschedule || null;\r\n        window.__florameDeliverySpecialDateSettings = cachedPayload.deliverySpecialDateSettings || cachedPayload.partner?.deliverySpecialDates || null;\r\n        window.__florameDeliveryTimeSlotSettings = cachedPayload.deliveryTimeSlotSettings || cachedPayload.partner?.deliveryTimeSlots || null;\r\n        applyPartnerPackagingAvailability(cachedPayload.partner);\r\n        return cachedPayload.partner;\r\n      }\r\n      return null;\r\n    }\r\n    const data = await res.json().catch(() => null);\r\n    if (getContext().slug !== ctx.slug) return null;\r\n    const partner = window.FlorameLocalFlorist?.adapt(data?.partner) || data?.partner || null;\r\n    window.__florameStorefrontDefaults = (data?.storefrontDefaults && typeof data.storefrontDefaults === 'object')\r\n      ? data.storefrontDefaults\r\n      : null;\r\n    window.__florameDeliveryRescheduleSettings = (data?.deliveryRescheduleSettings && typeof data.deliveryRescheduleSettings === 'object')\r\n      ? data.deliveryRescheduleSettings\r\n      : (partner?.deliveryReschedule || null);\r\n    window.__florameDeliverySpecialDateSettings = (data?.deliverySpecialDateSettings && typeof data.deliverySpecialDateSettings === 'object')\r\n      ? data.deliverySpecialDateSettings\r\n      : (partner?.deliverySpecialDates || null);\r\n    window.__florameDeliveryTimeSlotSettings = (data?.deliveryTimeSlotSettings && typeof data.deliveryTimeSlotSettings === 'object')\r\n      ? data.deliveryTimeSlotSettings\r\n      : (partner?.deliveryTimeSlots || null);\r\n    if (partner) {\r\n      window.__floramePartner = partner;\r\n      applyPartnerPackagingAvailability(partner);\r\n      saveCachedPartnerPayload(\r\n        ctx.slug,\r\n        partner,\r\n        window.__florameStorefrontDefaults || null,\r\n        window.__florameDeliveryRescheduleSettings || null,\r\n        window.__florameDeliverySpecialDateSettings || null,\r\n        window.__florameDeliveryTimeSlotSettings || null\r\n      );\r\n      return partner;\r\n    }\r\n    window.__floramePartner = null;\r\n    clearCachedPartnerPayload(ctx.slug);\r\n    try { window.__FloramePackagingAvailability = null; } catch (_) {}\r\n    try { if (typeof window.updateFloramePackagingAvailability === 'function') window.updateFloramePackagingAvailability(null); } catch (_) {}\r\n    return null;\r\n  }\r\n\r\n  function currentPartnerSlugAliases(ctx = getContext()) {\r\n    const selectedOffer = readSelectedBouquetOffer();\r\n    const partner = window.__floramePartner && typeof window.__floramePartner === 'object'\r\n      ? window.__floramePartner\r\n      : {};\r\n    return new Set([\r\n      ctx?.slug,\r\n      partner.partnerId,\r\n      partner.id,\r\n      partner.portal?.partnerSlug,\r\n      partner.portal?.tenantSlug,\r\n      selectedOffer?.partner?.partnerSlug,\r\n    ].map(slugify).filter(Boolean));\r\n  }\r\n\r\n  function canonicalPartnerSlug(ctx = getContext()) {\r\n    const partner = window.__floramePartner && typeof window.__floramePartner === 'object'\r\n      ? window.__floramePartner\r\n      : {};\r\n    return slugify(\r\n      partner.portal?.partnerSlug\r\n      || partner.portal?.tenantSlug\r\n      || partner.partnerId\r\n      || partner.id\r\n      || ctx?.slug\r\n      || ''\r\n    );\r\n  }\r\n\r\n  function readSelectedBouquetOffer(options) {\r\n    try {\r\n      const parsed = JSON.parse(sessionStorage.getItem(BOUQUET_OFFER_KEY) || 'null');\r\n      if (!parsed || typeof parsed !== 'object' || !parsed.partner?.partnerSlug) return null;\r\n      if (Date.now() - Number(parsed.savedAt || 0) > 2 * 60 * 60 * 1000) {\r\n        sessionStorage.removeItem(BOUQUET_OFFER_KEY);\r\n        return null;\r\n      }\r\n      const opts = options && typeof options === 'object' ? options : {};\r\n      const ctx = getContext();\r\n      const selectedPartnerSlug = slugify(parsed.partner?.partnerSlug || '');\r\n      if (ctx.active && selectedPartnerSlug !== canonicalPartnerSlug(ctx)) {\r\n        sessionStorage.removeItem(BOUQUET_OFFER_KEY);\r\n        return null;\r\n      }\r\n      if (opts.requireCurrentPath === true) {\r\n        const savedPath = String(parsed.sourcePath || '').replace(/\\/+$/, '') || '/';\r\n        const currentPath = String(window.location.pathname || '/').replace(/\\/+$/, '') || '/';\r\n        if (savedPath !== currentPath) {\r\n          sessionStorage.removeItem(BOUQUET_OFFER_KEY);\r\n          return null;\r\n        }\r\n      }\r\n      const expectedVariantId = String(opts.variantId || '').match(/(\\d+)(?:\\D*)$/)?.[1] || '';\r\n      const selectedVariantId = String(parsed.variantId || '').match(/(\\d+)(?:\\D*)$/)?.[1] || '';\r\n      const expectedProductId = String(opts.productId || '').match(/(\\d+)(?:\\D*)$/)?.[1] || '';\r\n      const selectedProductId = String(parsed.productId || '').match(/(\\d+)(?:\\D*)$/)?.[1] || '';\r\n      if ((expectedVariantId && expectedVariantId !== selectedVariantId)\r\n        || (expectedProductId && expectedProductId !== selectedProductId)) {\r\n        return null;\r\n      }\r\n      return parsed;\r\n    } catch (_) {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  function writeSelectedBouquetOffer(offer) {\r\n    try {\r\n      if (!offer || !offer.partner?.partnerSlug) {\r\n        sessionStorage.removeItem(BOUQUET_OFFER_KEY);\r\n        return null;\r\n      }\r\n      const clean = {\r\n        schemaVersion: String(offer.schemaVersion || offer.fulfillmentOffer?.schemaVersion || 'partner-offer-v4'),\r\n        offerId: String(offer.offerId || ''),\r\n        offerRevision: String(offer.offerRevision || offer.fulfillmentOffer?.offerRevision || ''),\r\n        intentRevision: String(offer.intentRevision || offer.fulfillmentOffer?.intentRevision || ''),\r\n        policyRevision: String(offer.policyRevision || offer.fulfillmentOffer?.policyRevision || offer.fulfillmentOffer?.policyVersion || ''),\r\n        commercialMode: String(offer.commercialMode || offer.fulfillmentOffer?.commercialMode || offer.fulfillmentOffer?.mode || 'request'),\r\n        paymentMode: String(offer.paymentMode || offer.fulfillmentOffer?.paymentMode || 'authorize_then_capture'),\r\n        effectiveAction: String(offer.effectiveAction || offer.fulfillmentOffer?.effectiveAction || ''),\r\n        inventoryEnforcement: String(offer.inventoryEnforcement || offer.fulfillmentOffer?.inventoryEnforcement || 'none'),\r\n        availabilityEvidence: String(offer.availabilityEvidence || offer.fulfillmentOffer?.availabilityEvidence || ''),\r\n        issuedAt: String(offer.issuedAt || ''),\r\n        expiresAt: String(offer.expiresAt || ''),\r\n        productId: String(offer.productId || ''),\r\n        commerceProductId: String(offer.commerceProductId || offer.productId || ''),\r\n        bouquetId: String(offer.bouquetId || offer.pricing?.canonicalBouquetId || ''),\r\n        variantId: String(offer.variantId || ''),\r\n        handle: String(offer.handle || ''),\r\n        pricing: offer.pricing && typeof offer.pricing === 'object' ? {\r\n          kind: String(offer.pricing.kind || ''),\r\n          canonicalBouquetId: String(offer.pricing.canonicalBouquetId || offer.bouquetId || ''),\r\n          revision: String(offer.pricing.revision || ''),\r\n          listPriceCents: Math.max(0, Math.round(Number(offer.pricing.listPriceCents || 0) || 0)),\r\n          currency: String(offer.pricing.currency || 'EUR')\r\n        } : null,\r\n        fulfillmentType: normalizeDeliveryType(offer.fulfillmentType),\r\n        fulfillmentOffer: offer.fulfillmentOffer && typeof offer.fulfillmentOffer === 'object' ? {\r\n          mode: String(offer.fulfillmentOffer.mode || ''),\r\n          reasonCode: String(offer.fulfillmentOffer.reasonCode || ''),\r\n          requestedDate: String(offer.fulfillmentOffer.requestedDate || ''),\r\n          requestedSlotKey: String(offer.fulfillmentOffer.requestedSlotKey || ''),\r\n          responseMinutes: Math.max(0, Math.round(Number(offer.fulfillmentOffer.responseMinutes || 0) || 0)),\r\n          responseDeadlineAt: String(offer.fulfillmentOffer.responseDeadlineAt || ''),\r\n          policyVersion: String(offer.fulfillmentOffer.policyVersion || ''),\r\n          policyRevision: String(offer.fulfillmentOffer.policyRevision || offer.policyRevision || offer.fulfillmentOffer.policyVersion || ''),\r\n          requestKind: String(offer.fulfillmentOffer.requestKind || ''),\r\n          inventoryEnforcement: String(offer.fulfillmentOffer.inventoryEnforcement || offer.inventoryEnforcement || 'none'),\r\n          availabilityEvidence: String(offer.fulfillmentOffer.availabilityEvidence || offer.availabilityEvidence || ''),\r\n          effectiveAction: String(offer.fulfillmentOffer.effectiveAction || offer.effectiveAction || ''),\r\n          offerRevision: String(offer.fulfillmentOffer.offerRevision || offer.offerRevision || ''),\r\n          stockReservationRequired: false\r\n        } : null,\r\n        partner: {\r\n          partnerId: String(offer.partner.partnerId || ''),\r\n          partnerSlug: slugify(offer.partner.partnerSlug),\r\n          name: String(offer.partner.name || ''),\r\n          logoUrl: String(offer.partner.logoUrl || ''),\r\n          city: String(offer.partner.city || ''),\r\n          addressLine: String(offer.partner.addressLine || ''),\r\n          defaultCap: String(offer.partner.defaultCap || ''),\r\n          cartPromotion: offer.partner.cartPromotion || null,\r\n          deliveryPricing: offer.partner.deliveryPricing || null\r\n        },\r\n        sourcePath: String(window.location.pathname || '/'),\r\n        savedAt: Date.now()\r\n      };\r\n      sessionStorage.setItem(BOUQUET_OFFER_KEY, JSON.stringify(clean));\r\n      document.dispatchEvent(new CustomEvent('florame:selected-offer-changed', {detail:{offer:clean}}));\r\n      return clean;\r\n    } catch (_) {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  function orderAttributesForOffer(offer) {\r\n    if (!offer || !offer.partner?.partnerSlug) return null;\r\n    const pickup = normalizeDeliveryType(offer.fulfillmentType) === 'pickup';\r\n    const partnerSlug = slugify(offer.partner.partnerSlug);\r\n    const attrs = {\r\n      Partner_Source: partnerSlug,\r\n      Partner_Name: String(offer.partner.name || ''),\r\n      Partner_Source_Type: 'bouquet_offer',\r\n      Partner_Source_Path: window.location.pathname + window.location.search,\r\n      Partner_Route_Mode: 'offer',\r\n      Delivery_Type: pickup ? 'pickup' : 'delivery',\r\n      'Modalita Consegna': pickup ? 'Ritiro in negozio' : 'Consegna a domicilio'\r\n    };\r\n    if (pickup) {\r\n      attrs.Pickup_Address = String(offer.partner.addressLine || '');\r\n      attrs.Pickup_Partner = String(offer.partner.name || '');\r\n      attrs.Pickup_CAP = String(offer.partner.defaultCap || '');\r\n    } else {\r\n      attrs.Pickup_Address = '';\r\n      attrs.Pickup_Partner = '';\r\n      attrs.Pickup_CAP = '';\r\n    }\r\n    return attrs;\r\n  }\r\n\r\n  function readFulfillmentPreference(partnerSlug = '') {\r\n    try {\r\n      const saved = JSON.parse(localStorage.getItem(FULFILLMENT_PREFERENCE_KEY) || 'null');\r\n      if (!saved || !saved.savedAt || (Date.now() - Number(saved.savedAt || 0)) > FULFILLMENT_PREFERENCE_TTL_MS) {\r\n        localStorage.removeItem(FULFILLMENT_PREFERENCE_KEY);\r\n        return null;\r\n      }\r\n      const savedPartnerSlug = slugify(saved.partnerSlug || '');\r\n      const requestedPartnerSlug = slugify(partnerSlug || '');\r\n      if (!savedPartnerSlug || (requestedPartnerSlug && savedPartnerSlug !== requestedPartnerSlug)) return null;\r\n      return {\r\n        mode: normalizeDeliveryType(saved.mode),\r\n        partnerSlug: savedPartnerSlug,\r\n        savedAt: Number(saved.savedAt || 0),\r\n        source: String(saved.source || '')\r\n      };\r\n    } catch (_) {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  function setFulfillmentPreference(mode, options = {}) {\r\n    const partnerSlug = slugify(\r\n      options.partnerSlug\r\n      || options.slug\r\n      || getContext().slug\r\n      || canonicalPartnerSlug(getContext())\r\n      || ''\r\n    );\r\n    if (!partnerSlug) return null;\r\n    const preference = {\r\n      mode: normalizeDeliveryType(mode),\r\n      partnerSlug,\r\n      savedAt: Date.now(),\r\n      source: String(options.source || 'storefront')\r\n    };\r\n    try {\r\n      localStorage.setItem(FULFILLMENT_PREFERENCE_KEY, JSON.stringify(preference));\r\n    } catch (_) {}\r\n    try {\r\n      document.dispatchEvent(new CustomEvent('florame:fulfillment-preference-changed', {\r\n        detail: preference\r\n      }));\r\n    } catch (_) {}\r\n    return preference;\r\n  }\r\n\r\n  function getOrderAttributes() {\r\n    const offerAttributes = orderAttributesForOffer(readSelectedBouquetOffer({ requireCurrentPath: true }));\r\n    if (offerAttributes) return offerAttributes;\r\n    const ctx = getContext();\r\n    if (!ctx.active) return {};\r\n    return {\r\n      Partner_Source: canonicalPartnerSlug(ctx),\r\n      Partner_Source_Type: 'partner_storefront',\r\n      Partner_Source_Path: ctx.sourcePath,\r\n      Partner_Route_Mode: ctx.routeMode,\r\n    };\r\n  }\r\n\r\n  function normalizeDeliveryType(value) {\r\n    const raw = String(value || '').trim().toLowerCase();\r\n    if (raw === 'pickup' || raw.includes('ritiro')) return 'pickup';\r\n    return 'delivery';\r\n  }\r\n\r\n  function clearStalePickupDeliveryAttributes(target) {\r\n    [\r\n      'Data Consegna',\r\n      'Data Consegna (ISO)',\r\n      'Fascia Oraria',\r\n      'Orario Specifico',\r\n      'Destinatario',\r\n      'Indirizzo Consegna',\r\n      'Delivery_Address_V1',\r\n      'Indirizzo_Via',\r\n      'Indirizzo_CAP',\r\n      'Indirizzo_Citta',\r\n      'Indirizzo_Provincia',\r\n      'Telefono',\r\n      'Telefono destinatario',\r\n      'Email destinatario',\r\n      'Recipient_Email',\r\n      'Recipient_Email_Source',\r\n      'Customer_Email',\r\n      'Citofono',\r\n      'Campanello',\r\n      'Note Corriere',\r\n      'Note indirizzo',\r\n      'Messaggio Biglietto',\r\n      'Disegno Biglietto',\r\n      'Biglietto Personalizzato',\r\n      'Modalita biglietto',\r\n      'Ticket_Mode',\r\n      'Font Biglietto',\r\n      'Ticket_Font_ID',\r\n      'Ticket_Renderer_Version',\r\n      'Biglietto Preview URL',\r\n      'Ticket_Preview_URL',\r\n      'Tipo Ordine',\r\n      'Pickup_Address',\r\n      'Pickup_Partner',\r\n      'Pickup_CAP',\r\n      'Delivery_Scheduler_Version',\r\n      'NOTE_ORDINE_RICCA'\r\n    ].forEach((key) => { target[key] = ''; });\r\n    target.Delivery_Type = 'delivery';\r\n    target['Modalita Consegna'] = 'Consegna a domicilio';\r\n  }\r\n\r\n  let cartAttributionSignature = '';\r\n  let cartAttributionInFlight = null;\r\n\r\n  function localizedCartUrl(partnerSlug) {\r\n    return buildRelativeUrl(localizeStorefrontPath('/cart'), { partner: slugify(partnerSlug || '') });\r\n  }\r\n\r\n  function safePartnerReturnUrl(sourcePath, partnerSlug) {\r\n    try {\r\n      const source = new URL(String(sourcePath || ''), window.location.origin);\r\n      if (source.origin === window.location.origin && source.pathname && !source.pathname.startsWith('/cart')) {\r\n        return source.pathname + source.search + source.hash;\r\n      }\r\n    } catch (_) {}\r\n    return homeUrl(partnerSlug);\r\n  }\r\n\r\n  function partnerCartItemLabel(count) {\r\n    const amount = Number(count || 0);\r\n    return partnerText(\r\n      amount === 1 ? '1 articolo' : `${amount} articoli`,\r\n      amount === 1 ? '1 item' : `${amount} items`\r\n    );\r\n  }\r\n\r\n  function showPartnerCartSwitchSuccess() {\r\n    if (!document.body) return;\r\n    let notice = document.getElementById('florame-partner-cart-switch-success');\r\n    if (!notice) {\r\n      notice = document.createElement('div');\r\n      notice.id = 'florame-partner-cart-switch-success';\r\n      notice.setAttribute('role', 'status');\r\n      notice.setAttribute('aria-live', 'polite');\r\n      notice.style.cssText = [\r\n        'position:fixed', 'left:16px', 'right:16px', 'bottom:max(16px, env(safe-area-inset-bottom))',\r\n        'z-index:2147483002', 'max-width:460px', 'margin:0 auto', 'padding:14px 16px',\r\n        'border:1px solid rgba(87,212,155,.34)', 'border-radius:18px', 'background:#14382b',\r\n        'box-shadow:0 18px 48px rgba(0,0,0,.28)', 'color:#fff', 'font:inherit', 'font-size:14px',\r\n        'font-weight:800', 'line-height:1.35', 'transform:translateY(140%)', 'opacity:0',\r\n        'transition:transform .24s ease,opacity .24s ease'\r\n      ].join(';');\r\n      document.body.appendChild(notice);\r\n    }\r\n    notice.textContent = partnerText(\r\n      'Carrello svuotato. Ora puoi acquistare da questo fiorista.',\r\n      'Cart cleared. You can now shop with this florist.'\r\n    );\r\n    requestAnimationFrame(() => {\r\n      notice.style.transform = 'translateY(0)';\r\n      notice.style.opacity = '1';\r\n    });\r\n    setTimeout(() => {\r\n      notice.style.transform = 'translateY(140%)';\r\n      notice.style.opacity = '0';\r\n    }, 4200);\r\n  }\r\n\r\n  function showPartnerCartSwitchDialog(cart, options) {\r\n    if (!document.body) return Promise.resolve(false);\r\n    const targetAttributes = options?.attributes && typeof options.attributes === 'object'\r\n      ? options.attributes\r\n      : getOrderAttributes();\r\n    const targetName = String(options?.partnerName || targetAttributes.Partner_Name || '').trim();\r\n    const selectedOffer = options?.offer || null;\r\n    return new Promise((resolve) => {\r\n    const existing = document.getElementById('florame-partner-cart-switch-dialog');\r\n    if (existing) existing.remove();\r\n    const previousFocus = document.activeElement;\r\n    const count = Number(cart?.item_count || 0);\r\n    const dialog = document.createElement('div');\r\n    dialog.id = 'florame-partner-cart-switch-dialog';\r\n    dialog.setAttribute('role', 'dialog');\r\n    dialog.setAttribute('aria-modal', 'true');\r\n    dialog.setAttribute('aria-labelledby', 'florame-partner-cart-switch-title');\r\n    dialog.style.cssText = [\r\n      'position:fixed', 'inset:0', 'z-index:2147483003', 'display:flex', 'align-items:flex-end',\r\n      'justify-content:center', 'padding:max(16px, env(safe-area-inset-top)) 16px max(16px, env(safe-area-inset-bottom))',\r\n      'background:rgba(12,12,18,.58)', 'backdrop-filter:blur(8px)'\r\n    ].join(';');\r\n    dialog.innerHTML = [\r\n      '<div style=\"width:min(100%, 480px);padding:24px;border-radius:26px;background:#fff;color:#191820;box-shadow:0 26px 80px rgba(0,0,0,.32);font:inherit\">',\r\n      '<p style=\"margin:0 0 8px;color:#b42f57;font-size:12px;font-weight:900;letter-spacing:.08em;text-transform:uppercase\" data-florame-cart-switch-kicker></p>',\r\n      '<h2 id=\"florame-partner-cart-switch-title\" style=\"margin:0;font-size:24px;line-height:1.12;letter-spacing:-.03em\" data-florame-cart-switch-title></h2>',\r\n      '<p style=\"margin:12px 0 0;color:#5d5a66;font-size:15px;font-weight:650;line-height:1.45\" data-florame-cart-switch-copy></p>',\r\n      '<p role=\"alert\" hidden style=\"margin:12px 0 0;padding:10px 12px;border-radius:12px;background:#fff0f3;color:#a21743;font-size:13px;font-weight:800;line-height:1.4\" data-florame-cart-switch-error></p>',\r\n      '<div style=\"display:grid;grid-template-columns:1fr 1.25fr;gap:10px;margin-top:22px\">',\r\n      '<button type=\"button\" data-florame-cart-switch-cancel style=\"min-height:50px;border:0;border-radius:15px;background:#f1eff3;color:#2b2931;font:inherit;font-weight:850;cursor:pointer\"></button>',\r\n      '<button type=\"button\" data-florame-cart-switch-confirm style=\"min-height:50px;border:0;border-radius:15px;background:#e52f62;color:#fff;font:inherit;font-weight:900;cursor:pointer\"></button>',\r\n      '</div></div>'\r\n    ].join('');\r\n    let settled = false;\r\n    const close = (result) => {\r\n      if (!settled) {\r\n        settled = true;\r\n        resolve(result === true);\r\n      }\r\n      dialog.remove();\r\n      if (previousFocus && previousFocus.isConnected && typeof previousFocus.focus === 'function') previousFocus.focus();\r\n    };\r\n    const kicker = dialog.querySelector('[data-florame-cart-switch-kicker]');\r\n    const title = dialog.querySelector('[data-florame-cart-switch-title]');\r\n    const copy = dialog.querySelector('[data-florame-cart-switch-copy]');\r\n    const error = dialog.querySelector('[data-florame-cart-switch-error]');\r\n    const cancel = dialog.querySelector('[data-florame-cart-switch-cancel]');\r\n    const confirm = dialog.querySelector('[data-florame-cart-switch-confirm]');\r\n    if (kicker) kicker.textContent = partnerText('Cambia fiorista', 'Change florist');\r\n    if (title) title.textContent = targetName\r\n      ? partnerText(`Vuoi acquistare da ${targetName}?`, `Would you like to buy from ${targetName}?`)\r\n      : partnerText('Vuoi ricominciare qui?', 'Do you want to start again here?');\r\n    if (copy) copy.textContent = partnerText(\r\n      `Rimuoverai ${partnerCartItemLabel(count)} dal carrello del primo fiorista. Questa azione non si pu\u00F2 annullare.`,\r\n      `You will remove ${partnerCartItemLabel(count)} from the first florist's cart. This cannot be undone.`\r\n    );\r\n    if (cancel) {\r\n      cancel.textContent = partnerText('Annulla', 'Cancel');\r\n      cancel.addEventListener('click', () => close(false));\r\n    }\r\n    if (confirm) {\r\n      confirm.textContent = partnerText('Svuota e acquista qui', 'Clear and shop here');\r\n      confirm.addEventListener('click', async () => {\r\n        confirm.disabled = true;\r\n        confirm.textContent = partnerText('Svuoto il carrello...', 'Clearing cart...');\r\n        try {\r\n          const cleared = await (window.FlorameReadCache?.fetch || window.fetch)('/cart/clear.js', {\r\n            method: 'POST', credentials: 'same-origin', headers: { Accept: 'application/json' }\r\n          });\r\n          if (!cleared.ok) throw new Error('cart_clear_failed');\r\n          const attributes = targetAttributes;\r\n          if (attributes.Partner_Source) {\r\n            const attributed = await (window.FlorameReadCache?.fetch || window.fetch)('/cart/update.js', {\r\n              method: 'POST', credentials: 'same-origin',\r\n              headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\r\n              body: JSON.stringify({ attributes })\r\n            });\r\n            if (!attributed.ok) throw new Error('cart_partner_update_failed');\r\n            const attributedCart = await attributed.json().catch(() => null);\r\n            const attributedSlug = slugify(\r\n              attributedCart?.attributes?.Partner_Source\r\n              || attributedCart?.attributes?.Partner_Slug\r\n              || ''\r\n            );\r\n            if (!attributedCart || attributedSlug !== slugify(attributes.Partner_Source)) {\r\n              throw new Error('cart_partner_verification_failed');\r\n            }\r\n          }\r\n          cartAttributionSignature = '';\r\n          if (selectedOffer) writeSelectedBouquetOffer(selectedOffer);\r\n          const notice = document.getElementById('florame-partner-cart-conflict-notice');\r\n          if (notice) notice.remove();\r\n          close(true);\r\n          ['florame:cart-updated', 'cart:updated'].forEach((eventName) => document.dispatchEvent(new CustomEvent(eventName)));\r\n          showPartnerCartSwitchSuccess();\r\n        } catch (_) {\r\n          confirm.disabled = false;\r\n          confirm.textContent = partnerText('Riprova', 'Try again');\r\n          if (error) {\r\n            error.hidden = false;\r\n            error.textContent = partnerText(\r\n              'Il carrello \u00E8 vuoto, ma il cambio fiorista non \u00E8 ancora completo. Riprova.',\r\n              'The cart is empty, but the florist change is not complete yet. Try again.'\r\n            );\r\n          }\r\n        }\r\n      });\r\n    }\r\n    dialog.addEventListener('click', (event) => { if (event.target === dialog) close(false); });\r\n    dialog.addEventListener('keydown', (event) => { if (event.key === 'Escape') close(false); });\r\n    document.body.appendChild(dialog);\r\n    setTimeout(() => cancel?.focus(), 0);\r\n    });\r\n  }\r\n\r\n  function ensurePartnerCartConflictPrivacyGuard() {\r\n    if (!document.head || document.getElementById('florame-partner-cart-conflict-privacy-guard')) return;\r\n    const style = document.createElement('style');\r\n    style.id = 'florame-partner-cart-conflict-privacy-guard';\r\n    style.textContent = [\r\n      'body:has(#shopify-pc__banner.shopify-pc__banner__dialog:not([hidden]):not(.hidden):not([aria-hidden=\"true\"]):not([style*=\"display: none\"]):not([style*=\"visibility: hidden\"])) #florame-partner-cart-conflict-notice,',\r\n      'body:has(#shopify-pc__prefs__dialog:not([hidden]):not(.hidden):not([aria-hidden=\"true\"]):not([style*=\"display: none\"]):not([style*=\"visibility: hidden\"])) #florame-partner-cart-conflict-notice {',\r\n      '  opacity: 0 !important;',\r\n      '  pointer-events: none !important;',\r\n      '  transform: translateY(140%) !important;',\r\n      '  visibility: hidden !important;',\r\n      '}'\r\n    ].join('\\n');\r\n    document.head.appendChild(style);\r\n  }\r\n\r\n  function partnerAvailabilityState(partner) {\r\n    const stockMode = partner?.stockMode || {};\r\n    const usesAiStock = stockMode.defaultMode === 'ai_camera' && stockMode.aiCameraEnabled === true;\r\n    const serverState = String(partner?.storefrontAvailability?.state || '').toLowerCase();\r\n    const serverSource = String(partner?.storefrontAvailability?.source || '').toLowerCase();\r\n    if (['live', 'expiring', 'empty', 'offline'].includes(serverState) && (!usesAiStock || serverSource === 'ai_camera')) {\r\n      const expiresMs = new Date(partner?.storefrontAvailability?.expiresAt || '').getTime();\r\n      if (Number.isFinite(expiresMs)) {\r\n        const remainingHours = (expiresMs - Date.now()) / 3600000;\r\n        if (remainingHours <= 0) return 'offline';\r\n        if (serverState === 'live' && remainingHours <= 24) return 'expiring';\r\n      }\r\n      return serverState;\r\n    }\r\n    if (usesAiStock) return 'unknown';\r\n    const last = partner?.manualStockStats?.lastConfirmedAt || partner?.manualStockStats?.confirmedAt || '';\r\n    const lastMs = new Date(last).getTime();\r\n    if (!Number.isFinite(lastMs)) return 'unknown';\r\n    const hours = Math.max(0, (Date.now() - lastMs) / 3600000);\r\n    if (hours >= 72) return 'offline';\r\n    if (Number(partner?.manualStockStats?.lastActiveCount) === 0) return 'empty';\r\n    return hours >= 48 ? 'expiring' : 'live';\r\n  }\r\n\r\n  function partnerAvailabilityLabel(state) {\r\n    if (state === 'live') return partnerText('Disponibile ora', 'Available now');\r\n    if (state === 'expiring') return partnerText('Da riconfermare', 'Needs confirmation');\r\n    if (state === 'empty') return partnerText('Esaurito ora', 'Sold out now');\r\n    if (state === 'offline') return partnerText('Su richiesta', 'On request');\r\n    return partnerText('In verifica', 'Checking');\r\n  }\r\n\r\n  function updatePartnerAvailabilityFreshness(partner) {\r\n    const node = document.querySelector('[data-home-partner-availability-updated]');\r\n    if (!node) return;\r\n    const label = partner ? partnerAvailabilityFreshnessLabel(partner) : '';\r\n    if (node.textContent !== label) node.textContent = label;\r\n    node.hidden = !partner;\r\n  }\r\n\r\n  function partnerAvailabilityFreshnessLabel(partner, state) {\r\n    const raw = partner?.storefrontAvailability?.lastUpdatedAt\r\n      || partner?.manualStockStats?.lastConfirmedAt\r\n      || partner?.manualStockStats?.confirmedAt\r\n      || partner?.manualStockStats?.updatedAt\r\n      || '';\r\n    const updatedAt = new Date(raw).getTime();\r\n    if (!raw || !Number.isFinite(updatedAt)) return partnerText('Disponibilit\u00E0 non ancora aggiornata', 'Availability not updated yet');\r\n    const elapsedHours = Math.max(0, (Date.now() - updatedAt) / 3600000);\r\n    if (elapsedHours < 1) return partnerText('Ultimo aggiornamento: poco fa', 'Last update: moments ago');\r\n    if (elapsedHours < 24) {\r\n      const hours = Math.max(1, Math.floor(elapsedHours));\r\n      return partnerText(\r\n        `Ultimo aggiornamento: ${hours} ${hours === 1 ? 'ora' : 'ore'} fa`,\r\n        `Last update: ${hours} ${hours === 1 ? 'hour' : 'hours'} ago`\r\n      );\r\n    }\r\n    if (elapsedHours < 48) return partnerText('Ultimo aggiornamento: ieri', 'Last update: yesterday');\r\n    const days = Math.max(2, Math.floor(elapsedHours / 24));\r\n    return partnerText(`Ultimo aggiornamento: ${days} giorni fa`, `Last update: ${days} days ago`);\r\n  }\r\n\r\n  function partnerResponseTimeLabel(partner) {\r\n    const minutes = Number(\r\n      partner?.responsePerformance?.typicalMinutes\r\n      ?? partner?.fulfillmentRequests?.responseMinutes\r\n      ?? partner?.fulfillment?.responseMinutes\r\n      ?? 120\r\n    );\r\n    const typicalMinutes = Number.isFinite(minutes) && minutes > 0 ? minutes : 120;\r\n    if (typicalMinutes <= 10) {\r\n      return partnerText('Risponde subito', 'Replies quickly');\r\n    }\r\n    if (typicalMinutes < 60) {\r\n      const roundedMinutes = Math.max(15, Math.min(55, Math.round(typicalMinutes / 5) * 5));\r\n      return partnerText(`Risponde in ~${roundedMinutes} min`, `Replies in ~${roundedMinutes} min`);\r\n    }\r\n    const hours = Math.max(1, Math.round(typicalMinutes / 60));\r\n    if (hours < 24) return partnerText(`Risponde in ~${hours}h`, `Replies in ~${hours}h`);\r\n    const days = Math.max(1, Math.round(hours / 24));\r\n    return partnerText(`Risponde in ~${days}g`, `Replies in ~${days}d`);\r\n  }\r\n\r\n  function partnerCardMoment(state) {\r\n    const assets = window.__florameThemeConfig?.partnerCardAssets || {};\r\n    const expandedAssets = window.__florameThemeConfig?.partnerCardExpandedAssets || {};\r\n    let resolved = null;\r\n    if (window.FloramePartnerCardMoments?.resolve) {\r\n      resolved = window.FloramePartnerCardMoments.resolve({\r\n        state,\r\n        language: getNativeLanguage(),\r\n        assets,\r\n        expandedAssets,\r\n      });\r\n    } else {\r\n      const key = String(state || '').toLowerCase() === 'offline' ? 'offline' : 'unknown';\r\n      resolved = {\r\n        key,\r\n        eyebrow: partnerText('Disponibilit\u00E0', 'Availability'),\r\n        title: partnerAvailabilityLabel(key),\r\n        body: partnerText('Stiamo aggiornando i fiori.', 'We are updating the flowers.'),\r\n        assetUrl: assets[key] || '',\r\n        expandedAssetUrl: expandedAssets[key] || assets[key] || '',\r\n        dark: key === 'offline'\r\n      };\r\n    }\r\n\r\n    return {\r\n      ...resolved,\r\n      customBackground: false\r\n    };\r\n  }\r\n\r\n  function persistPartnerMoment(partnerSlug, momentKey) {\r\n    const slug = slugify(partnerSlug || '');\r\n    const key = String(momentKey || '').trim();\r\n    if (!slug || !['dawn', 'morning', 'midday', 'afternoon', 'sunset', 'evening', 'expiring', 'empty', 'offline', 'unknown'].includes(key)) return;\r\n    try {\r\n      const parsed = JSON.parse(localStorage.getItem(PARTNER_MOMENT_CACHE_KEY) || '{}');\r\n      const cache = parsed && typeof parsed === 'object' ? parsed : {};\r\n      cache[slug] = { key, savedAt: Date.now() };\r\n      const trimmed = Object.entries(cache)\r\n        .sort((left, right) => Number(right[1]?.savedAt || 0) - Number(left[1]?.savedAt || 0))\r\n        .slice(0, 20)\r\n        .reduce((result, [entrySlug, entry]) => {\r\n          result[entrySlug] = entry;\r\n          return result;\r\n        }, {});\r\n      localStorage.setItem(PARTNER_MOMENT_CACHE_KEY, JSON.stringify(trimmed));\r\n    } catch (_) {}\r\n  }\r\n\r\n  function transitionPartnerMomentArtwork(appHeader, momentAsset, momentKey) {\r\n    if (!appHeader || !momentAsset) return;\r\n    const nextArt = `url(\"${momentAsset}\")`;\r\n    const previousArt = appHeader.style.getPropertyValue('--florame-partner-moment-art').trim();\r\n    const previousKey = appHeader.style.getPropertyValue('--florame-partner-moment-art-key').trim();\r\n    if (previousArt && previousKey === momentKey) return;\r\n    if (previousArt && previousKey && previousKey !== momentKey) {\r\n      appHeader.style.setProperty('--florame-partner-previous-art', previousArt);\r\n      const restarting = appHeader.classList.contains('partner-storefront-art-transition');\r\n      appHeader.classList.remove('partner-storefront-art-transition');\r\n      // A fresh class starts its animation without a synchronous layout flush.\r\n      // Only a transition that is already running needs an explicit restart.\r\n      if (restarting) void appHeader.offsetWidth;\r\n      appHeader.classList.add('partner-storefront-art-transition');\r\n      window.setTimeout(() => {\r\n        appHeader.classList.remove('partner-storefront-art-transition');\r\n        appHeader.style.removeProperty('--florame-partner-previous-art');\r\n      }, 480);\r\n    }\r\n    appHeader.style.setProperty('--florame-partner-moment-art-key', momentKey);\r\n    appHeader.style.setProperty('--florame-partner-moment-art', nextArt);\r\n  }\r\n\r\n  function showPartnerCartConflictNotice(cart, previousPartnerSlug) {\r\n    if (!document.body) return;\r\n    // The Shopify privacy choice has priority. The notice remains ready and\r\n    // becomes visible automatically as soon as the cookie layer closes.\r\n    ensurePartnerCartConflictPrivacyGuard();\r\n    let notice = document.getElementById('florame-partner-cart-conflict-notice');\r\n    if (!notice) {\r\n      notice = document.createElement('div');\r\n      notice.id = 'florame-partner-cart-conflict-notice';\r\n      notice.setAttribute('role', 'dialog');\r\n      notice.setAttribute('aria-modal', 'false');\r\n      notice.setAttribute('aria-labelledby', 'florame-partner-cart-conflict-title');\r\n      notice.style.cssText = [\r\n        'position:fixed', 'left:16px', 'right:16px', 'bottom:max(16px, env(safe-area-inset-bottom))',\r\n        'z-index:2147483000', 'display:grid', 'gap:12px',\r\n        'max-width:560px', 'margin:0 auto', 'padding:16px', 'border:1px solid rgba(255,255,255,.2)',\r\n        'border-radius:18px', 'background:#17171f', 'box-shadow:0 18px 48px rgba(0,0,0,.28)',\r\n        'color:#fff', 'font:inherit', 'font-size:14px', 'font-weight:700', 'line-height:1.35', 'transform:translateY(140%)',\r\n        'opacity:0', 'transition:transform .24s ease,opacity .24s ease'\r\n      ].join(';');\r\n      notice.innerHTML = [\r\n        '<div style=\"display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:start\">',\r\n        '<div style=\"display:grid;gap:4px\"><strong id=\"florame-partner-cart-conflict-title\" style=\"font-size:15px\" data-florame-cart-conflict-title></strong><span style=\"color:rgba(255,255,255,.74);font-size:13px\" data-florame-cart-conflict-copy></span></div>',\r\n        '<button type=\"button\" aria-label=\"Chiudi avviso\" data-florame-cart-conflict-close style=\"width:34px;height:34px;border:1px solid rgba(255,255,255,.18);border-radius:11px;background:rgba(255,255,255,.08);color:#fff;font:inherit;font-size:19px;line-height:1;cursor:pointer\">\u00D7</button>',\r\n        '</div>',\r\n        '<div style=\"display:grid;grid-template-columns:1fr 1fr;gap:8px\">',\r\n        '<a data-florame-cart-conflict-return style=\"display:flex;align-items:center;justify-content:center;min-height:42px;border-radius:13px;background:#fff;color:#17171f;font-weight:900;text-decoration:none\"></a>',\r\n        '<button type=\"button\" data-florame-cart-conflict-switch style=\"min-height:42px;border:1px solid rgba(255,255,255,.22);border-radius:13px;background:transparent;color:#fff;font:inherit;font-size:13px;font-weight:900;cursor:pointer\"></button>',\r\n        '</div>'\r\n      ].join('');\r\n      document.body.appendChild(notice);\r\n    }\r\n    const title = notice.querySelector('[data-florame-cart-conflict-title]');\r\n    const copy = notice.querySelector('[data-florame-cart-conflict-copy]');\r\n    const returnLink = notice.querySelector('[data-florame-cart-conflict-return]');\r\n    const switchButton = notice.querySelector('[data-florame-cart-conflict-switch]');\r\n    const closeButton = notice.querySelector('[data-florame-cart-conflict-close]');\r\n    const returnUrl = safePartnerReturnUrl(cart?.attributes?.Partner_Source_Path, previousPartnerSlug);\r\n    if (title) title.textContent = partnerText('Il carrello \u00E8 dell\u2019altro fiorista', 'The cart belongs to the other florist');\r\n    if (copy) {\r\n      copy.textContent = partnerText(\r\n        `Hai ${partnerCartItemLabel(cart?.item_count)} l\u00EC. Scegli dove continuare.`,\r\n        `You have ${partnerCartItemLabel(cart?.item_count)} there. Choose where to continue.`\r\n      );\r\n    }\r\n    if (returnLink) {\r\n      returnLink.href = returnUrl || localizedCartUrl(previousPartnerSlug);\r\n      returnLink.textContent = partnerText('Torna al primo', 'Return to the first');\r\n    }\r\n    if (switchButton) {\r\n      switchButton.textContent = partnerText('Svuota e resta qui', 'Clear and stay here');\r\n      switchButton.onclick = () => showPartnerCartSwitchDialog(cart);\r\n    }\r\n    if (closeButton) {\r\n      closeButton.setAttribute('aria-label', partnerText('Chiudi avviso', 'Close notice'));\r\n      closeButton.onclick = () => {\r\n        notice.setAttribute('aria-hidden', 'true');\r\n        notice.style.pointerEvents = 'none';\r\n        notice.style.transform = 'translateY(140%)';\r\n        notice.style.opacity = '0';\r\n      };\r\n    }\r\n    requestAnimationFrame(() => {\r\n      notice.setAttribute('aria-hidden', 'false');\r\n      notice.style.pointerEvents = 'auto';\r\n      notice.style.transform = 'translateY(0)';\r\n      notice.style.opacity = '1';\r\n    });\r\n  }\r\n\r\n  async function selectBouquetOffer(offer) {\r\n    const selected = writeSelectedBouquetOffer(offer);\r\n    const attributes = orderAttributesForOffer(selected);\r\n    if (!selected || !attributes) return false;\r\n    const cart = await (window.FlorameReadCache?.fetch || window.fetch)('/cart.js', {\r\n      cache: 'no-store',\r\n      credentials: 'same-origin',\r\n      headers: { Accept: 'application/json' }\r\n    }).then((response) => response.ok ? response.json() : null).catch(() => null);\r\n    if (!cart) return false;\r\n    const current = cart.attributes && typeof cart.attributes === 'object' ? cart.attributes : {};\r\n    const previousPartnerSlug = slugify(current.Partner_Source || current.Partner_Slug || '');\r\n    const targetPartnerSlug = slugify(attributes.Partner_Source || '');\r\n    if (Number(cart.item_count || 0) > 0 && previousPartnerSlug && previousPartnerSlug !== targetPartnerSlug) {\r\n      const confirmed = await showPartnerCartSwitchDialog(cart, {\r\n        attributes,\r\n        partnerName: selected.partner.name,\r\n        offer: selected\r\n      });\r\n      if (!confirmed) {\r\n        writeSelectedBouquetOffer(null);\r\n        return false;\r\n      }\r\n      setFulfillmentPreference(selected.fulfillmentType, {\r\n        partnerSlug: targetPartnerSlug,\r\n        source: 'bouquet-offer'\r\n      });\r\n      return true;\r\n    }\r\n    const merged = Object.assign({}, current, attributes);\r\n    if (normalizeDeliveryType(selected.fulfillmentType) !== 'pickup') {\r\n      merged.Pickup_Address = '';\r\n      merged.Pickup_Partner = '';\r\n      merged.Pickup_CAP = '';\r\n    }\r\n    // A verified selection often already matches the cart. Avoid a second write\r\n    // just to persist identical attribution/pickup fields on every addition.\r\n    const changed = Object.keys(merged).some(key => String(current[key] || '') !== String(merged[key] || ''));\r\n    let updated = changed ? null : cart;\r\n    for (let attempt = 0; attempt < 2 && !updated; attempt += 1) {\r\n      updated = await (window.FlorameReadCache?.fetch || window.fetch)('/cart/update.js', {\r\n        method: 'POST',\r\n        credentials: 'same-origin',\r\n        cache: 'no-store',\r\n        headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\r\n        body: JSON.stringify({ attributes: merged })\r\n      }).then((response) => response.ok ? response.json() : null).catch(() => null);\r\n    }\r\n    if (!updated) {\r\n      writeSelectedBouquetOffer(null);\r\n      return false;\r\n    }\r\n    setFulfillmentPreference(selected.fulfillmentType, {\r\n      partnerSlug: targetPartnerSlug,\r\n      source: 'bouquet-offer'\r\n    });\r\n    cartAttributionSignature = '';\r\n    return updated;\r\n  }\r\n\r\n  async function syncCartAttribution(options) {\r\n    const ctx = getContext();\r\n    if (!ctx.active && !readSelectedBouquetOffer({ requireCurrentPath: true })) return null;\r\n    const attrs = getOrderAttributes();\r\n    if (!attrs.Partner_Source) return null;\r\n    const reason = String(options?.reason || 'partner-context');\r\n    const signature = [\r\n      attrs.Partner_Source,\r\n      attrs.Partner_Source_Type,\r\n      attrs.Partner_Source_Path,\r\n      attrs.Partner_Route_Mode\r\n    ].join('|');\r\n    if (cartAttributionInFlight) return cartAttributionInFlight;\r\n    if (cartAttributionSignature === signature && options?.force !== true) return null;\r\n\r\n    cartAttributionInFlight = (async () => {\r\n      try {\r\n        const providedCart = options?.cart && typeof options.cart === 'object'\r\n          ? options.cart\r\n          : null;\r\n        const cart = providedCart || await (window.FlorameReadCache?.fetch || window.fetch)('/cart.js', {\r\n          cache: 'no-store',\r\n          credentials: 'same-origin',\r\n          headers: { 'Accept': 'application/json' }\r\n        }).then((res) => (res && res.ok ? res.json() : null)).catch(() => null);\r\n        if (!cart) return null;\r\n        const current = (cart.attributes && typeof cart.attributes === 'object') ? cart.attributes : {};\r\n        const previousPartnerSlug = slugify(current.Partner_Source || current.Partner_Slug || current.Partner_Source_Slug || '');\r\n        const nextPartnerSlug = slugify(attrs.Partner_Source || '');\r\n        const currentPartnerAliases = currentPartnerSlugAliases(ctx);\r\n        if (Number(cart.item_count || 0) <= 0) {\r\n          const switchingEmptyCart = !!previousPartnerSlug\r\n            && !!nextPartnerSlug\r\n            && !currentPartnerAliases.has(previousPartnerSlug);\r\n          const mergedEmptyCart = Object.assign({}, current, attrs);\r\n          if (switchingEmptyCart) clearStalePickupDeliveryAttributes(mergedEmptyCart);\r\n          const emptyCartChanged = switchingEmptyCart\r\n            || Object.keys(attrs).some((key) => String(current[key] || '') !== String(attrs[key] || ''));\r\n          if (!emptyCartChanged) {\r\n            cartAttributionSignature = signature;\r\n            return cart;\r\n          }\r\n          const updatedEmptyCart = await (window.FlorameReadCache?.fetch || window.fetch)('/cart/update.js', {\r\n            method: 'POST',\r\n            credentials: 'same-origin',\r\n            headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },\r\n            body: JSON.stringify({ attributes: mergedEmptyCart })\r\n          }).then((res) => (res && res.ok ? res.json() : null));\r\n          if (!updatedEmptyCart) return cart;\r\n          cartAttributionSignature = signature;\r\n          const staleNotice = document.getElementById('florame-partner-cart-conflict-notice');\r\n          if (staleNotice) staleNotice.remove();\r\n          return updatedEmptyCart;\r\n        }\r\n        const partnerConflict = !!previousPartnerSlug\r\n          && !!nextPartnerSlug\r\n          && !currentPartnerAliases.has(previousPartnerSlug);\r\n        // Browsing a second partner must never rewrite ownership, delivery data\r\n        // or commission attribution of an existing cart. A deliberate migration\r\n        // flow can handle this later; the safe default is to keep the cart as-is.\r\n        if (partnerConflict) {\r\n          showPartnerCartConflictNotice(cart, previousPartnerSlug);\r\n          try {\r\n            document.dispatchEvent(new CustomEvent('florame:partner-cart-conflict', {\r\n              detail: { currentPartnerSlug: previousPartnerSlug, requestedPartnerSlug: nextPartnerSlug, reason }\r\n            }));\r\n          } catch (_) {}\r\n          return cart;\r\n        }\r\n        const stalePickupFromOtherPartner = false;\r\n        const merged = Object.assign({}, current, attrs);\r\n        // The first valid storefront/offer touch owns source attribution for the\r\n        // order. Visiting /cart must not rewrite analytics, commission origin or\r\n        // Hub context from `bouquet_offer` to the generic cart page context.\r\n        [\r\n          'Partner_Source',\r\n          'Partner_Name',\r\n          'Partner_Source_Type',\r\n          'Partner_Source_Path',\r\n          'Partner_Route_Mode'\r\n        ].forEach((key) => {\r\n          if (String(current[key] || '').trim()) merged[key] = current[key];\r\n        });\r\n        if (stalePickupFromOtherPartner) clearStalePickupDeliveryAttributes(merged);\r\n        const changed = stalePickupFromOtherPartner\r\n          || Object.keys(merged).some((key) => String(current[key] || '') !== String(merged[key] || ''));\r\n        if (!changed) {\r\n          cartAttributionSignature = signature;\r\n          return cart;\r\n        }\r\n        const updated = await (window.FlorameReadCache?.fetch || window.fetch)('/cart/update.js', {\r\n          method: 'POST',\r\n          credentials: 'same-origin',\r\n          headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },\r\n          body: JSON.stringify({ attributes: merged })\r\n        }).then((res) => (res && res.ok ? res.json() : null));\r\n        cartAttributionSignature = signature;\r\n        try {\r\n          document.dispatchEvent(new CustomEvent('florame:cart-attribution-synced', {\r\n            detail: { reason, attributes: attrs, stalePickupReset: stalePickupFromOtherPartner }\r\n          }));\r\n        } catch (_) {}\r\n        return updated || cart;\r\n      } finally {\r\n        cartAttributionInFlight = null;\r\n      }\r\n    })();\r\n    return cartAttributionInFlight;\r\n  }\r\n\r\n  let cartAttributionListenersBound = false;\r\n  let cartAttributionTimer = null;\r\n\r\n  function scheduleCartAttributionSync(reason) {\r\n    if (cartAttributionTimer) clearTimeout(cartAttributionTimer);\r\n    cartAttributionTimer = setTimeout(() => {\r\n      cartAttributionTimer = null;\r\n      syncCartAttribution({ reason, force: true }).catch(() => {});\r\n    }, 180);\r\n  }\r\n\r\n  function bindCartAttributionResync() {\r\n    if (cartAttributionListenersBound) return;\r\n    cartAttributionListenersBound = true;\r\n    ['florame:cart-updated', 'cart:updated', 'essential-upsell:cart-updated', 'essential-upsell-cart-updated'].forEach((eventName) => {\r\n      document.addEventListener(eventName, () => {\r\n        scheduleCartAttributionSync(eventName);\r\n        clearEmptyCartAttribution().catch(() => {});\r\n      });\r\n    });\r\n  }\r\n\r\n  function getAttributionMeta() {\r\n    const ctx = getContext();\r\n    if (ctx.active) {\r\n      return {\r\n        partnerSlug: canonicalPartnerSlug(ctx),\r\n        sourceType: 'partner_storefront',\r\n        sourcePath: window.location.pathname + window.location.search,\r\n        routeMode: ctx.routeMode,\r\n        host: window.location.host || '',\r\n      };\r\n    }\r\n    const selectedOffer = readSelectedBouquetOffer({ requireCurrentPath: true });\r\n    if (selectedOffer) {\r\n      return {\r\n        partnerSlug: slugify(selectedOffer.partner?.partnerSlug || ''),\r\n        sourceType: 'bouquet_offer',\r\n        sourcePath: window.location.pathname + window.location.search,\r\n        routeMode: 'offer',\r\n        fulfillmentType: normalizeDeliveryType(selectedOffer.fulfillmentType),\r\n        host: window.location.host || '',\r\n      };\r\n    }\r\n    return {\r\n      partnerSlug: '',\r\n      sourceType: 'florame_direct',\r\n      sourcePath: window.location.pathname + window.location.search,\r\n      routeMode: '',\r\n      host: window.location.host || '',\r\n    };\r\n  }\r\n\r\n  async function ensureReady() {\r\n    maybeRewriteCurrentUrl();\r\n    rewriteKnownLinks(document);\r\n    observeLinks();\r\n    runRewritePasses();\r\n    bindCartAttributionResync();\r\n    const ctx = getContext();\r\n    if (!ctx.active) await clearEmptyCartAttribution();\r\n    const cachedPayload = ctx.active ? readCachedPartnerPayload(ctx.slug) : null;\r\n    const showcasePrime = ctx.active\r\n      ? primePartnerShowcase(ctx, cachedPayload?.partner || null)\r\n      : null;\r\n    if (cachedPayload?.partner) {\r\n      window.__floramePartner = cachedPayload.partner;\r\n      window.__florameStorefrontDefaults = cachedPayload.storefrontDefaults || null;\r\n      window.__florameDeliveryRescheduleSettings = cachedPayload.deliveryRescheduleSettings || cachedPayload.partner?.deliveryReschedule || null;\r\n      window.__florameDeliverySpecialDateSettings = cachedPayload.deliverySpecialDateSettings || cachedPayload.partner?.deliverySpecialDates || null;\r\n      window.__florameDeliveryTimeSlotSettings = cachedPayload.deliveryTimeSlotSettings || cachedPayload.partner?.deliveryTimeSlots || null;\r\n      applyPartnerPackagingAvailability(cachedPayload.partner);\r\n      renderPartnerHomeStable(cachedPayload.partner);\r\n      applyRobotsMeta(cachedPayload.partner);\r\n    } else if (ctx.active) {\r\n      renderPartnerLoading(ctx);\r\n    }\r\n\r\n    const partner = await resolvePartner({ cachedPayload });\r\n    partnerLastResolvedAt = Date.now();\r\n    if (partner) {\r\n      partnerAvailabilityRevision = partnerStockRevision(partner);\r\n      renderPartnerHomeStable(partner);\r\n      applyRobotsMeta(partner);\r\n      runRewritePasses();\r\n      syncCartAttribution({ reason: 'partner-ready' }).catch(() => {});\r\n      document.dispatchEvent(new CustomEvent('florame:partner-ready', { detail: partner }));\r\n    } else {\r\n      renderPartnerHomeStable(null);\r\n    }\r\n    if (showcasePrime) showcasePrime.catch(() => {});\r\n    return partner;\r\n  }\r\n\r\n  function getLineProperties(explicitPartnerSlug, pricingSource) {\r\n    const partnerSlug = slugify(\r\n      explicitPartnerSlug\r\n      || pricingSource?.partner?.partnerSlug\r\n      || pricingSource?.partnerSlug\r\n      || getAttributionMeta().partnerSlug\r\n      || ''\r\n    );\r\n    const properties = partnerSlug ? { _florame_partner_slug: partnerSlug } : {};\r\n    const pricing = pricingSource?.pricing && typeof pricingSource.pricing === 'object'\r\n      ? pricingSource.pricing\r\n      : (pricingSource && typeof pricingSource === 'object' ? pricingSource : null);\r\n    const listPriceCents = Math.round(Number(pricing?.listPriceCents || 0) || 0);\r\n    if (\r\n      pricing\r\n      && pricing.kind\r\n      && pricing.canonicalBouquetId\r\n      && pricing.revision\r\n      && listPriceCents > 0\r\n    ) {\r\n      properties._florame_bouquet_id = String(pricing.canonicalBouquetId);\r\n      properties._florame_price_kind = String(pricing.kind);\r\n      properties._florame_pricing_revision = String(pricing.revision);\r\n      properties._florame_list_price_cents = String(listPriceCents);\r\n    }\r\n    const storedOffer = readSelectedBouquetOffer({ requireCurrentPath: true });\r\n    const hasExplicitPricingSource = !!pricingSource && typeof pricingSource === 'object';\r\n    const selectedEnvelope = pricingSource?.fulfillmentOffer && typeof pricingSource.fulfillmentOffer === 'object'\r\n      ? pricingSource\r\n      : (hasExplicitPricingSource ? null : storedOffer);\r\n    const selectedOffer = selectedEnvelope?.fulfillmentOffer && typeof selectedEnvelope.fulfillmentOffer === 'object'\r\n      ? selectedEnvelope.fulfillmentOffer\r\n      : null;\r\n    let intent = null;\r\n    try { intent = window.FlorameDeliveryIntent?.get?.() || null; } catch (_) { intent = null; }\r\n    const fulfillmentMode = normalizeDeliveryType(\r\n      pricingSource?.fulfillmentType\r\n      || intent?.deliveryType\r\n      || storedOffer?.fulfillmentType\r\n    );\r\n    if (intent?.selectedDate && intent?.selectedTimeSlot) {\r\n      properties._florame_delivery_type = fulfillmentMode;\r\n      properties._florame_delivery_date = String(intent.selectedDate);\r\n      properties._florame_delivery_slot = String(intent.selectedTimeSlot);\r\n    }\r\n    if (selectedOffer?.mode) {\r\n      properties._florame_offer_mode = String(selectedOffer.mode);\r\n      properties._florame_offer_reason = String(selectedOffer.reasonCode || '');\r\n      properties._florame_offer_policy = String(selectedEnvelope?.policyRevision || selectedOffer.policyRevision || selectedOffer.policyVersion || '');\r\n      properties._florame_offer_id = String(selectedEnvelope?.offerId || '');\r\n      properties._florame_offer_revision = String(selectedEnvelope?.offerRevision || selectedOffer.offerRevision || '');\r\n      properties._florame_offer_schema = String(selectedEnvelope?.schemaVersion || 'partner-offer-v4');\r\n      properties._florame_offer_mode = String(selectedEnvelope?.commercialMode || selectedOffer.mode || 'request');\r\n      properties._florame_commercial_mode = properties._florame_offer_mode;\r\n      properties._florame_request_kind = String(selectedOffer.requestKind || '');\r\n      properties._florame_inventory_enforcement = String(selectedEnvelope?.inventoryEnforcement || selectedOffer.inventoryEnforcement || 'none');\r\n      properties._florame_effective_action = String(selectedEnvelope?.effectiveAction || selectedOffer.effectiveAction || 'request');\r\n      properties._florame_payment_mode = String(selectedEnvelope?.paymentMode || 'authorize_then_capture');\r\n      properties._florame_intent_revision = String(selectedEnvelope?.intentRevision || '');\r\n      properties._florame_stock_reservation_required = 'false';\r\n      if (selectedOffer.responseDeadlineAt) {\r\n        properties._florame_request_deadline = String(selectedOffer.responseDeadlineAt);\r\n      }\r\n    }\r\n    return properties;\r\n  }\r\n\r\n  async function clearEmptyCartAttribution() {\r\n    if (getContext().active) return null;\r\n    const cart = await (window.FlorameReadCache?.fetch || window.fetch)('/cart.js', {\r\n      cache: 'no-store',\r\n      credentials: 'same-origin',\r\n      headers: { Accept: 'application/json' }\r\n    }).then((response) => response.ok ? response.json() : null).catch(() => null);\r\n    if (!cart || Number(cart.item_count || 0) > 0) return cart;\r\n    const selectedOffer = readSelectedBouquetOffer({ requireCurrentPath: true });\r\n    if (selectedOffer) writeSelectedBouquetOffer(null);\r\n    const current = cart.attributes && typeof cart.attributes === 'object' ? cart.attributes : {};\r\n    const staleKeys = [\r\n      'Partner_Source', 'Partner_Name', 'Partner_Source_Type', 'Partner_Source_Path',\r\n      'Partner_Route_Mode', 'Partner_Slug', 'Partner_Source_Slug',\r\n      'Pickup_Address', 'Pickup_Partner', 'Pickup_CAP'\r\n    ];\r\n    if (!staleKeys.some((key) => String(current[key] || '').trim())) {\r\n      if (selectedOffer) {\r\n        try { document.dispatchEvent(new CustomEvent('florame:selected-offer-cleared')); } catch (_) {}\r\n      }\r\n      return cart;\r\n    }\r\n    const attributes = Object.assign({}, current);\r\n    staleKeys.forEach((key) => { attributes[key] = ''; });\r\n    const updated = await (window.FlorameReadCache?.fetch || window.fetch)('/cart/update.js', {\r\n      method: 'POST',\r\n      credentials: 'same-origin',\r\n      headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\r\n      body: JSON.stringify({ attributes })\r\n    }).then((response) => response.ok ? response.json() : cart).catch(() => cart);\r\n    try {\r\n      document.dispatchEvent(new CustomEvent('florame:cart-attribution-cleared', {\r\n        detail: { reason: 'empty-cart-page-load' }\r\n      }));\r\n    } catch (_) {}\r\n    return updated;\r\n  }\r\n\r\n  async function refreshPartnerAvailability(reason, options) {\r\n    const ctx = getContext();\r\n    if (!ctx.active || document.visibilityState === 'hidden') return window.__floramePartner || null;\r\n    const force = options?.force === true;\r\n    const now = Date.now();\r\n    if (partnerRefreshPromise) return partnerRefreshPromise;\r\n    if (!force && (now - partnerLastResolvedAt) < PARTNER_REFRESH_MIN_GAP_MS) {\r\n      return window.__floramePartner || null;\r\n    }\r\n\r\n    const previousRevision = partnerAvailabilityRevision || partnerStockRevision(window.__floramePartner);\r\n    partnerLastResolvedAt = now;\r\n    partnerRefreshPromise = resolvePartner({ cachedPayload: readCachedPartnerPayload(ctx.slug) })\r\n      .then((partner) => {\r\n        if (partner) {\r\n          const nextRevision = partnerStockRevision(partner);\r\n          const stockChanged = !!(previousRevision && nextRevision && previousRevision !== nextRevision);\r\n          partnerAvailabilityRevision = nextRevision || previousRevision;\r\n          renderPartnerHomeStable(partner);\r\n          applyRobotsMeta(partner);\r\n          runRewritePasses();\r\n          if (stockChanged) showPartnerAvailabilityNotice(nextRevision);\r\n        } else {\r\n          renderPartnerHomeStable(null);\r\n        }\r\n        document.dispatchEvent(new CustomEvent('florame:partner-refreshed', {\r\n          detail: { partner: partner || null, reason: String(reason || 'refresh') }\r\n        }));\r\n        return partner;\r\n      })\r\n      .finally(() => {\r\n        partnerRefreshPromise = null;\r\n      });\r\n    return partnerRefreshPromise;\r\n  }\r\n\r\n  function bindPartnerAvailabilityRefresh() {\r\n    if (partnerRefreshTimer) return;\r\n    if (window.FlorameReadCache?.subscribe) {\r\n      window.FlorameReadCache.subscribe('partner', ({ reason }) => {\r\n        if (!window.__floramePartner || document.hidden) return false;\r\n        return refreshPartnerAvailability(reason, { force: true }).then(partner => {\r\n          if (reason === 'realtime' && partner) return window.__florameRefreshPartnerShowcase?.();\r\n          return partner;\r\n        });\r\n      }, {retainUnchanged:true});\r\n    } else {\r\n      window.addEventListener('focus', () => refreshPartnerAvailability('focus'));\r\n      document.addEventListener('visibilitychange', () => {\r\n        if (document.visibilityState === 'visible') refreshPartnerAvailability('visible');\r\n      });\r\n    }\r\n    document.addEventListener('florame:availability-updated', () => {\r\n      refreshPartnerAvailability('availability-event', { force: true });\r\n    });\r\n    // The shared feed owns the infrequent reconciliation while it is available.\r\n    partnerRefreshTimer = window.FlorameLiveSync ? 1 : window.setInterval(() => {\r\n      refreshPartnerAvailability('interval');\r\n    }, PARTNER_REFRESH_INTERVAL_MS);\r\n  }\r\n\r\n  function bindDeliveryIntentRefresh() {\r\n    const refreshShowcaseForCurrentIntent = () => {\r\n      const partner = window.__floramePartner;\r\n      if (partner) return renderPartnerShowcase(partner);\r\n      return primePartnerShowcase(getContext());\r\n    };\r\n    window.__florameRefreshPartnerShowcase = () => {\r\n      partnerShowcaseRequests.clear();\r\n      window.__floramePartnerShowcaseFingerprint = '';\r\n      return refreshShowcaseForCurrentIntent();\r\n    };\r\n    // Identity can arrive before the deferred delivery runtime. Its final\r\n    // signature must own a fresh request when the initial one becomes stale.\r\n    document.addEventListener('florame:delivery-intent-ready', refreshShowcaseForCurrentIntent);\r\n    ['florame:partner-ready', 'florame:partner-refreshed'].forEach((name) => {\r\n      document.addEventListener(name, () => queueMicrotask(refreshShowcaseForCurrentIntent));\r\n    });\r\n    document.addEventListener('florame:delivery-intent-changed', () => {\r\n      window.__florameSyncPartnerDeliveryIntent?.();\r\n      // Requests are already scoped by intent. Repeated notifications for the\r\n      // same choice must reuse the request and retain the mounted catalogue.\r\n      refreshShowcaseForCurrentIntent();\r\n    });\r\n    document.addEventListener('florame:delivery-context-refresh', (event) => {\r\n      const request = refreshPartnerAvailability('delivery-intent', { force: true })\r\n        .then((nextPartner) => renderPartnerShowcase(nextPartner || window.__floramePartner || null));\r\n      event?.detail?.waitUntil?.(request);\r\n    });\r\n  }\r\n\r\n  try {\r\n    window.addEventListener('florame:native-language-change', () => {\r\n      if (window.__floramePartner) {\r\n        renderPartnerHomeStable(window.__floramePartner, { force: true });\r\n      } else {\r\n        renderPartnerLoading(getContext());\r\n      }\r\n    });\r\n  } catch (_) {}\r\n\r\n  window.FloramePartner = {\r\n    getContext,\r\n    homeUrl,\r\n    appUrl,\r\n    productUrl,\r\n    accountUrl,\r\n    loginUrl,\r\n    rewriteKnownLinks,\r\n    resolvePartner,\r\n    refreshPartnerAvailability,\r\n    refreshPartnerShowcase: () => renderPartnerShowcase(window.__floramePartner || null),\r\n    renderPartnerHome,\r\n    renderPartnerLoading,\r\n    getOrderAttributes,\r\n    getAttributionMeta,\r\n    getLineProperties,\r\n    primeBouquetOffer: writeSelectedBouquetOffer,\r\n    selectBouquetOffer,\r\n    getSelectedBouquetOffer: readSelectedBouquetOffer,\r\n    clearSelectedBouquetOffer: () => writeSelectedBouquetOffer(null),\r\n    getFulfillmentPreference: readFulfillmentPreference,\r\n    setFulfillmentPreference,\r\n    syncCartAttribution,\r\n    clearEmptyCartAttribution,\r\n  };\r\n\r\n  let partnerContextStarted = false;\r\n  function startPartnerContext() {\r\n    if (partnerContextStarted) return;\r\n    // The local identity can load independently of unrelated deferred scripts.\r\n    // Never paint its catalogue with the generic shared partner identity first.\r\n    if (getContext().slug === 'manual-florist-global-v1' && !window.FlorameLocalFlorist && document.readyState !== 'complete') {\r\n      document.addEventListener('florame:local-identity-ready', startPartnerContext, { once: true });\r\n      // Preserve the previous fallback if the identity asset fails to load.\r\n      window.addEventListener('load', startPartnerContext, { once: true });\r\n      return;\r\n    }\r\n    partnerContextStarted = true;\r\n    bindPartnerAvailabilityRefresh();\r\n    bindDeliveryIntentRefresh();\r\n    ensureReady();\r\n  }\r\n  // The complete DOM is available at interactive. Waiting for DOMContentLoaded\r\n  // also waits for unrelated deferred scripts before replacing the shop skeleton.\r\n  if (document.readyState === 'loading') {\r\n    const onParsed = () => {\r\n      if (document.readyState === 'loading') return;\r\n      document.removeEventListener('readystatechange', onParsed);\r\n      startPartnerContext();\r\n    };\r\n    document.addEventListener('readystatechange', onParsed);\r\n  } else startPartnerContext();\r\n})();\r\n"],
  "mappings": "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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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",
  "names": ["slug", "value", "tags", "distance", "appUrl", "options"]
}
