{"version":3,"file":"SectionHeaderSearch.CKBtQ2SE.mjs","names":["queryTokens","useMemo","_Fragment","useRef","useMemo","_Fragment","useRef","useCallback","React.Fragment","custom","useRef","useMemo","useState","useId","useCallback","_Fragment","useRef","useId","useMemo"],"sources":["https:/framerusercontent.com/modules/1XTicB6ZB0oMHOK199vO/xULXi1xdaG7930SPd60o/accentContrast.js","https:/framerusercontent.com/modules/ELyWSXK8tBY7KFqORue0/dIB0C5KQRN1zh6U2W72N/collectionId.js","https:/framerusercontent.com/modules/BNc22V5OleFxwlAtFbLs/KcVJMzey401tcG9ihdd7/helpSearchIndex.js","https:/framerusercontent.com/modules/RwYqM9peexHuGWb1RjgA/BuosGXQzWOB3GDMqXwHi/collectionSearchFilter.js","https:/framerusercontent.com/modules/9q0SZwaSV5g6UJVFdQLo/FjLeITr2V0p8qhMWPvka/Badge.js","https:/framerusercontent.com/modules/qzvHcKzbXR3bZBxBKyxz/yh9mFnFnQeKrVG0l00jw/CardSearchResult.js","https:/framerusercontent.com/modules/3WESqm56YJyrnHigs8iQ/ryOkJe9B6WzUlPjNFT7l/useInheritedSectionBreakpoint.js","https:/framerusercontent.com/modules/yViEmUCqysmi1x1XmBkR/OGaaEPWkjTaun1JOmr41/reviewModeration.js","https:/framerusercontent.com/modules/b2ilh64oGM37Rt6YVZrt/e7VWwe5yO3tbvqI0F48H/cmsCollectionLayout.js","https:/framerusercontent.com/modules/qSAi9VileQLI8aez6prv/12wNRBVAQrRH1gW1krUK/injectBreakpointIntoCmsSlot.js","https:/framerusercontent.com/modules/FH2wN6RYgVf0K5AZfGoS/e5HC5dOIxyqZy0kVwBmb/timing.js","https:/framerusercontent.com/modules/qA3udEKSZSTxpWEKsM49/gCQuOQRm8AbgLy2Yzvqf/searchQuerySync.js","https:/framerusercontent.com/modules/je6vWcfdbReeqag8iNpl/J4zYjvgg9PzUtYooXzIb/ModalSearch.js","https:/framerusercontent.com/modules/Sh1qW1MnBwDY6Hpok42w/pZy14HRnO7Xt9Kvsx3Ht/SectionHeaderSearch.js"],"sourcesContent":["/**\n * WCAG AA checks for accent text on the matching accent background.\n *\n * Tag and Badge accent mode paint `/Text/text-{accent}` on `/Backgrounds/bg-{accent}`.\n * At 20px / weight 400 that pairing is normal text (4.5:1). Tag medium and large\n * labels are 24px at the same weight, which is large text, so chips can use the\n * 3:1 large-text bar. Badge stays 16px / 400, so its picker labels still flag\n * 4.5:1 misses.\n */import{contrastRatio}from\"https://framerusercontent.com/modules/A8521j2MLHn01xoKoATB/9nfSSQO1SIbrhWLzh5D4/colorParsing.js\";import Tokens from\"https://framerusercontent.com/modules/JnflwrfTBO2W3YxUCt5T/s9q9B55pHhXdKNmRFsqk/index.js\";import{BADGE_ACCENT_COLORS,BADGE_ACCENT_COLOR_TITLES}from\"https://framerusercontent.com/modules/ERwHkp0S7TS5OOtXo7Ib/S8ko8Z1Mo9DMqr6Uk0y9/badgeAccentConstants.js\";/** WCAG 2.1 AA minimum for normal text (under 18pt, or under 14pt bold). */export const WCAG_AA_NORMAL_TEXT_MIN_RATIO=4.5;/**\n * WCAG 2.1 AA minimum for large text (18pt / 24px, or 14pt / 18.67px at weight 700+).\n * Tag medium and large meet that type bar (24px at weight 400).\n */export const WCAG_AA_LARGE_TEXT_MIN_RATIO=3;/**\n * Contrast of accent label text on the matching accent fill (default theme).\n */export function getAccentTextOnBackgroundContrastRatio(accent){return contrastRatio(Tokens.getColorValue(`/Text/text-${accent}`),Tokens.getColorValue(`/Backgrounds/bg-${accent}`));}export function isAccentTextOnBackgroundAA(accent){const ratio=getAccentTextOnBackgroundContrastRatio(accent);return ratio!=null&&ratio>=WCAG_AA_NORMAL_TEXT_MIN_RATIO;}export function isAccentTextOnBackgroundLargeAA(accent){const ratio=getAccentTextOnBackgroundContrastRatio(accent);return ratio!=null&&ratio>=WCAG_AA_LARGE_TEXT_MIN_RATIO;}/**\n * Accents whose text-on-fill pair meets WCAG AA large text (3:1).\n * Used by Tag and SectionTags. Not for Badge, which is still normal text.\n */export const BADGE_ACCENT_COLORS_WCAG_AA=BADGE_ACCENT_COLORS.filter(isAccentTextOnBackgroundLargeAA);/**\n * Default chip accent. Yellow also passes 4.5:1, so small Tags stay safe.\n */export const DEFAULT_TAG_ACCENT_COLOR=\"yellow\";export function accentColorOptionTitle(accent){const title=BADGE_ACCENT_COLOR_TITLES[accent];return isAccentTextOnBackgroundAA(accent)?title:`${title} (fails AA)`;}\nexport const __FramerMetadata__ = {\"exports\":{\"isAccentTextOnBackgroundLargeAA\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"WCAG_AA_NORMAL_TEXT_MIN_RATIO\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"BADGE_ACCENT_COLORS_WCAG_AA\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"accentColorOptionTitle\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"isAccentTextOnBackgroundAA\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"WCAG_AA_LARGE_TEXT_MIN_RATIO\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"DEFAULT_TAG_ACCENT_COLOR\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getAccentTextOnBackgroundContrastRatio\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","/**\n * Magic border value used to mark Framer Collection List wrapper elements for DOM queries.\n * Used by CollectionCounter, CollectionEmptyState, CollectionSort, CollectionDropdown, CollectionFilter, CollectionSearch.\n */export const COLLECTION_ID=\"3.14px solid transparent\";\nexport const __FramerMetadata__ = {\"exports\":{\"COLLECTION_ID\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./collectionId.map","/**\n * Lazy loader for the compact help-article body index.\n *\n * The file is generated from the `content/` help mirror (published articles\n * only) and must be served from a public origin. Visitors cannot fetch GitLab.\n * Prefer same-origin `/help-search-index.json` (Framer Domains → Files).\n * bunq Help may fall back to static.bunq.com. tricount Help must not: that\n * file is the bunq article index.\n * Never GitLab: visitors cannot read that host, and drafts must not leak.\n */export const HELP_SEARCH_INDEX_PATH=\"/help-search-index.json\";export const HELP_SEARCH_INDEX_CDN_URL=\"https://static.bunq.com/website/data/help-search-index.json\";export const HELP_SEARCH_INDEX_VERSION=1;const ALLOWED_INDEX_HOSTS=new Set([\"static.bunq.com\",\"help.bunq.com\",\"help.tricount.com\",\"framerusercontent.com\"]);const ALLOWED_INDEX_HOST_SUFFIXES=[\".framerusercontent.com\"];const BUNQ_HELP_CDN_FALLBACK_HOSTS=new Set([\"help.bunq.com\",\"diverse-methodologies-768530.framer.app\"]);let cachedIndex=null;let inflightLoad=null;/**\n * Last path segment of an article href, ignoring query strings and locale prefixes.\n */export function getItemSlug(item){const href=item.querySelector(\"a[href]\")?.getAttribute(\"href\")??\"\";const path=href.split(\"?\")[0]??\"\";const parts=path.split(\"/\").filter(Boolean);const articlesAt=parts.lastIndexOf(\"articles\");const slug=articlesAt>=0?parts[articlesAt+1]:parts[parts.length-1];return(slug??\"\").toLowerCase();}export function parseHelpSearchIndex(raw){if(raw===null||typeof raw!==\"object\"){return null;}const candidate=raw;if(candidate.version!==HELP_SEARCH_INDEX_VERSION){return null;}if(typeof candidate.source!==\"string\"||candidate.source.trim()===\"\"){return null;}if(typeof candidate.articleCount!==\"number\"||!Number.isFinite(candidate.articleCount)){return null;}if(!Array.isArray(candidate.slugs)||candidate.slugs.some(slug=>typeof slug!==\"string\")){return null;}if(candidate.tokens===null||typeof candidate.tokens!==\"object\"||Array.isArray(candidate.tokens)){return null;}const tokens={};for(const[token,posting]of Object.entries(candidate.tokens)){if(!Array.isArray(posting)||posting.some(index=>typeof index!==\"number\"||index<0)){return null;}tokens[token]=posting;}return{articleCount:candidate.articleCount,slugs:candidate.slugs,source:candidate.source.trim(),tokens,version:HELP_SEARCH_INDEX_VERSION};}export function isAllowedHelpSearchIndexUrl(urlString,pageOrigin){if(urlString.startsWith(\"/\")){return true;}try{const url=new URL(urlString);if(url.protocol!==\"https:\"){return false;}if(pageOrigin!==undefined&&url.origin===new URL(pageOrigin).origin){return true;}if(ALLOWED_INDEX_HOSTS.has(url.hostname)){return true;}return ALLOWED_INDEX_HOST_SUFFIXES.some(suffix=>url.hostname.endsWith(suffix));}catch{return false;}}function queryTokens(query){return query.trim().toLowerCase().split(/\\s+/).filter(token=>token.length>0);}/**\n * Slugs whose body contains every query token (exact token keys).\n */export function slugsMatchingQuery(index,query){const tokens=queryTokens(query);const matched=new Set;if(tokens.length===0){return matched;}let intersection=null;for(const token of tokens){const posting=index.tokens[token];if(posting===undefined){return matched;}const next=new Set(posting);if(intersection===null){intersection=next;continue;}intersection=new Set([...intersection].filter(indexValue=>next.has(indexValue)));}if(intersection===null){return matched;}for(const indexValue of intersection){const slug=index.slugs[indexValue];if(typeof slug===\"string\"&&slug!==\"\"){matched.add(slug);}}return matched;}function hostnameFromOrigin(pageOrigin){if(!pageOrigin){return null;}try{return new URL(pageOrigin).hostname;}catch{return null;}}/**\n * bunq Help may use the public CDN copy of the bunq article index. tricount\n * Help (and unknown hosts) must not, or body search would match bunq slugs.\n */export function shouldFallbackToBunqHelpIndexCdn(pageOrigin){const hostname=hostnameFromOrigin(pageOrigin);return hostname!==null&&BUNQ_HELP_CDN_FALLBACK_HOSTS.has(hostname);}function resolveIndexUrls(explicitUrl){const urls=[];const pageOrigin=typeof window===\"undefined\"?undefined:window.location.origin;if(explicitUrl&&isAllowedHelpSearchIndexUrl(explicitUrl,pageOrigin)){urls.push(explicitUrl);}if(pageOrigin!==undefined&&pageOrigin.startsWith(\"https://\")){urls.push(new URL(HELP_SEARCH_INDEX_PATH,pageOrigin).toString());}if(shouldFallbackToBunqHelpIndexCdn(pageOrigin)){urls.push(HELP_SEARCH_INDEX_CDN_URL);}return[...new Set(urls)];}async function fetchIndex(url,signal){const pageOrigin=typeof window===\"undefined\"?undefined:window.location.origin;if(!isAllowedHelpSearchIndexUrl(url,pageOrigin)){return null;}const response=await fetch(url,{signal,mode:\"cors\",credentials:\"omit\",headers:{Accept:\"application/json\"}});if(!response.ok){return null;}return parseHelpSearchIndex(await response.json());}/**\n * Fetch the compact body index once per session. Returns null when every\n * public URL fails so title/description search still works.\n */export async function loadHelpSearchIndex(explicitUrl,signal){if(cachedIndex){return cachedIndex;}if(inflightLoad){return inflightLoad;}inflightLoad=(async()=>{try{for(const url of resolveIndexUrls(explicitUrl)){try{const parsed=await fetchIndex(url,signal);if(parsed){cachedIndex=parsed;return parsed;}}catch(error){if(signal?.aborted){throw error;}}}return null;}finally{inflightLoad=null;}})();return inflightLoad;}export function resetHelpSearchIndexCacheForTests(){cachedIndex=null;inflightLoad=null;}\nexport const __FramerMetadata__ = {\"exports\":{\"HELP_SEARCH_INDEX_CDN_URL\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"HELP_SEARCH_INDEX_VERSION\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"resetHelpSearchIndexCacheForTests\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"loadHelpSearchIndex\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"slugsMatchingQuery\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getItemSlug\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"HelpSearchIndex\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"shouldFallbackToBunqHelpIndexCdn\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"parseHelpSearchIndex\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"isAllowedHelpSearchIndexUrl\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"HELP_SEARCH_INDEX_PATH\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./helpSearchIndex.map","/**\n * DOM-level search filtering for Framer CMS Collection Lists.\n *\n * Framer renders collection items as opaque DOM produced by the canvas, so\n * filtering happens by walking that DOM and toggling visibility rather than by\n * filtering a data array. These helpers keep that logic in one testable place,\n * away from the components that render the surrounding UI.\n *\n * Visibility is expressed both as a `data-filter-*` attribute (the convention\n * shared with the Broadcaster / CollectionSearch components, so several filters\n * can interoperate on one list) and as an inline `display` so the result is\n * immediate without an external applier.\n */import{COLLECTION_ID}from\"https://framerusercontent.com/modules/ELyWSXK8tBY7KFqORue0/dIB0C5KQRN1zh6U2W72N/collectionId.js\";import{getItemSlug}from\"https://framerusercontent.com/modules/BNc22V5OleFxwlAtFbLs/KcVJMzey401tcG9ihdd7/helpSearchIndex.js\";/**\n * Shortest query the filter acts on. A single character matches almost every\n * item in a large collection, which produces a scroll list thousands of pixels\n * long and no useful ranking.\n */export const MIN_SEARCH_QUERY_LENGTH=2;/**\n * Finds the individual collection list items inside a container.\n *\n * Strategy (in priority order):\n *  1. If a COLLECTION_ID-bordered element exists (Broadcaster override applied), use its children.\n *  2. Otherwise, drill down through single-child wrappers until we find a level\n *     with multiple siblings — that's where Framer renders the individual items.\n *  3. Fall back to the container's direct children.\n *\n * This handles Framer's rendering pattern where:\n *   container > [collectionListWrapper] > [item, item, item]\n * The naive approach of `container.children` returns the wrapper (1 element) and NOT the items,\n * causing every text-content check to match everything (and nothing ever gets hidden).\n */export function getFilterableItems(container){// Option 1: COLLECTION_ID border element (set by the Broadcaster/CollectionList override).\nconst collectionEl=container.querySelector(`[style*=\"border: ${COLLECTION_ID}\"]`);if(collectionEl&&collectionEl.children.length>0){return renderedChildren(collectionEl);}// Option 2: Drill down through single-child wrappers to find the items level.\n// Framer's collection list: container → wrapper → [item, item, item…]\nlet current=container;for(let depth=0;depth<8;depth++){const children=renderedChildren(current);if(children.length>1){// Multiple siblings — these are the actual items.\nreturn children;}if(children.length===1){current=children[0];}else{break;}}// Option 3: Fallback.\nreturn renderedChildren(container);}/** Tags a section may render alongside its items that are never results. */const NON_ITEM_TAGS=new Set([\"STYLE\",\"SCRIPT\",\"LINK\",\"TEMPLATE\"]);/**\n * Children that can hold a result. A section may render a critical-CSS `<style>`\n * next to its Collection List; counting it as a sibling would stop the drill-down\n * one level too early and treat the whole list as a single result.\n */function renderedChildren(element){return Array.from(element.children).filter(child=>!NON_ITEM_TAGS.has(child.tagName));}/**\n * Turns CMS HTML (article body) into searchable plain text.\n * Scripts and tags are dropped so markup tokens cannot become false matches.\n */export function htmlToSearchText(value){return value.replace(/<script[\\s\\S]*?<\\/script>/gi,\" \").replace(/<style[\\s\\S]*?<\\/style>/gi,\" \").replace(/<[^>]+>/g,\" \").replace(/&nbsp;/gi,\" \").replace(/&amp;/gi,\"&\").replace(/&lt;/gi,\"<\").replace(/&gt;/gi,\">\").replace(/&quot;/gi,'\"').replace(/&#39;/g,\"'\").replace(/&apos;/gi,\"'\").replace(/\\s+/g,\" \").trim();}/**\n * Reads the searchable text out of a rendered collection item.\n *\n * `body` is hidden `[data-search-body]` text. Do not bind CMS Content there\n * (hundreds of cards × article HTML). Body-only terms come from the public\n * help search index via `extraSlugs`. `fallback` is the item's full text,\n * used only when the item exposes neither a heading, a paragraph, nor a\n * search body.\n */export function getItemSearchText(item){const title=item.querySelector(\"h3, h2, [data-search-title]\")?.textContent?.trim()??\"\";const description=item.querySelector(\"p, [data-search-description]\")?.textContent?.trim()??\"\";const bodyNodes=item.querySelectorAll(\"[data-search-body]\");const body=Array.from(bodyNodes).map(node=>node.textContent?.trim()??\"\").filter(Boolean).join(\" \");const fallback=item.textContent??item.innerText??\"\";return{title,description,body,fallback};}function queryTokens(query){return query.trim().toLowerCase().split(/\\s+/).filter(token=>token.length>0);}function escapeRegExp(value){return value.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");}/**\n * True when `token` is a whole word in `field`, or starts a word.\n * Tokens of 1–3 characters must be whole words so `TIN` does not match `tiny`.\n * Longer tokens still match a prefix (`save` → `savings`).\n */export function fieldHasToken(field,token){if(!field||!token)return false;if(token.length<=3){return fieldHasExactToken(field,token);}const pattern=new RegExp(`(?:^|[^\\\\p{L}\\\\p{N}])${escapeRegExp(token)}`,\"iu\");return pattern.test(field);}function fieldHasExactToken(field,token){if(!field||!token)return false;const pattern=new RegExp(`(?:^|[^\\\\p{L}\\\\p{N}])${escapeRegExp(token)}(?=[^\\\\p{L}\\\\p{N}]|$)`,\"iu\");return pattern.test(field);}function fieldMatchesAllTokens(field,tokens){return tokens.every(token=>fieldHasToken(field,token));}function searchableFields(item){const{title,description,body,fallback}=getItemSearchText(item);if(!title&&!description&&!body){return{title:fallback,description:\"\",body:\"\"};}return{title,description,body};}export function itemMatchesQuery(item,lowerQuery,options={}){const tokens=queryTokens(lowerQuery);if(tokens.length===0)return false;const fields=searchableFields(item);if(fieldMatchesAllTokens(fields.title,tokens)||fieldMatchesAllTokens(fields.description,tokens)||fieldMatchesAllTokens(fields.body,tokens)){return true;}const slug=getItemSlug(item);return Boolean(slug&&options.extraSlugs?.has(slug));}/**\n * Higher is better. Title exact-word beats title prefix, then description, then body.\n */function rankMatch(item,tokens,extraSlugs){const fields=searchableFields(item);if(tokens.every(token=>fieldHasExactToken(fields.title,token)))return 4;if(fieldMatchesAllTokens(fields.title,tokens))return 3;if(fieldMatchesAllTokens(fields.description,tokens))return 2;if(fieldMatchesAllTokens(fields.body,tokens))return 1;const slug=getItemSlug(item);if(slug&&extraSlugs?.has(slug))return 1;return 0;}/**\n * Shows the items matching `query`, hides the rest, and caps how many stay\n * visible. Title matches are ranked above description and body matches so the\n * cap keeps the most relevant rows rather than whichever came first in CMS order.\n */export function applySearchFilter(items,query,filterId,maxResults,options={}){const attr=`data-filter-${filterId}`;const trimmedQuery=query.trim();const lowerQuery=trimmedQuery.toLowerCase();if(trimmedQuery.length<MIN_SEARCH_QUERY_LENGTH){// Below the threshold nothing is a result yet: hide everything rather\n// than falling back to \"show the whole collection\", which is what made\n// a single keystroke render hundreds of rows.\nitems.forEach(item=>{item.setAttribute(attr,\"no-match\");item.style.display=\"none\";});return{matchCount:0,shownCount:0};}const tokens=queryTokens(lowerQuery);const matches=[];items.forEach(item=>{if(!itemMatchesQuery(item,lowerQuery,options)){item.setAttribute(attr,\"no-match\");item.style.display=\"none\";return;}matches.push(item);});const ranked=[...matches].sort((left,right)=>{const rankDelta=rankMatch(right,tokens,options.extraSlugs)-rankMatch(left,tokens,options.extraSlugs);if(rankDelta!==0)return rankDelta;return matches.indexOf(left)-matches.indexOf(right);});ranked.forEach((item,index)=>{const withinCap=index<maxResults;item.setAttribute(attr,withinCap?\"match\":\"no-match\");item.style.display=withinCap?\"\":\"none\";});// Reordering is a childList mutation, and callers watch the results\n// container with a MutationObserver that re-runs this filter. Moving nodes\n// unconditionally therefore re-triggers the observer every frame, so only\n// touch the DOM when the ranked items are not already in ranked order.\nconst parent=items[0]?.parentElement;if(parent&&ranked.length>0){const rankedSet=new Set(ranked);const currentOrder=Array.from(parent.children).filter(child=>rankedSet.has(child));const needsReorder=currentOrder.some((child,index)=>child!==ranked[index]);if(needsReorder){/* bunq:reorder-title-matches */ranked.forEach(item=>parent.appendChild(item));}}return{matchCount:ranked.length,shownCount:Math.min(ranked.length,maxResults)};}/**\n * Clears all filtering applied by applySearchFilter — restores items to visible.\n */export function clearSearchFilter(items,filterId){const attr=`data-filter-${filterId}`;items.forEach(item=>{item.removeAttribute(attr);item.style.display=\"\";});}\nexport const __FramerMetadata__ = {\"exports\":{\"ItemSearchText\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getFilterableItems\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"SearchFilterResult\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"MIN_SEARCH_QUERY_LENGTH\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"htmlToSearchText\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getItemSearchText\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"SearchFilterOptions\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"clearSearchFilter\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"applySearchFilter\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"itemMatchesQuery\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"fieldHasToken\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","/**\n * Badge - Badge component with theme variants and size options.\n *\n * Badge component supporting multiple color schemes (default, inverted), variants (default, success, warning, danger, info).\n * Size variants (small, medium, large), and optional icon indicator (shown by default).\n * Color mode: Semantic (status variants) or Accent (design token accent colors).\n *\n * @framerIntrinsicWidth 80\n * @framerIntrinsicHeight 32\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */// 1. React and React types\nimport{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{forwardRef,useMemo}from\"react\";// 2. Framer Motion (not applicable for Badge)\n// 3. Framer API\nimport{addPropertyControls,ControlType}from\"framer\";import{FRAMER_BREAKPOINT_DESCRIPTION,FRAMER_ICON_SVG_CUSTOM_DESCRIPTION,FRAMER_THEME_DESCRIPTION_SURFACE}from\"https://framerusercontent.com/modules/kgixvU6ZSjEgZfx2dLER/o4VhqtRdwHGnIui8eFET/propertyControlCopy.js\";// 4. Design system utilities\nimport Tokens,{useEffectiveBreakpoint}from\"https://framerusercontent.com/modules/JnflwrfTBO2W3YxUCt5T/s9q9B55pHhXdKNmRFsqk/index.js\";import{getNewTabAriaLabel,useSmartLinkProps}from\"https://framerusercontent.com/modules/NbJRONH2Z4yDLXjbVsSq/0MsEMzjB4aZK3lbWLov2/linkHelpers.js\";// 5. Hooks\nimport{useInteractiveStates}from\"https://framerusercontent.com/modules/Oyd67FvSjdl6uCVEyAij/z0s6QvQLAVmOIBsYHE49/useInteractiveStates.js\";// 6. Local utilities\nimport{getIconRaw,ICON_OPTIONS_WITH_NONE_AND_CUSTOM,ICON_OPTION_TITLES_WITH_NONE_AND_CUSTOM}from\"https://framerusercontent.com/modules/OuAHgtW29YOxApe6lCN1/aLin5QE1reSwcDexLNvn/icons.js\";import{processSVG}from\"https://framerusercontent.com/modules/Ajjw0fi7RIb9ZhcKml39/F5wZq9cpDqNzdkFBwiSj/svg.js\";import{HINT_BADGE}from\"https://framerusercontent.com/modules/48iFuUf79i0lV1xbzOpm/7PDbwRtBBNFcH1O0jgLo/placeholders.js\";import{pickSafeDivProps}from\"https://framerusercontent.com/modules/HHfrxxHLEFZsStlLgAXu/hkvPnRpc40IjPMvMGp2M/domProps.js\";import{getTricountChipColors,resolveBrand,resolveTricountThemeVariant,isLightThemeSurface}from\"https://framerusercontent.com/modules/30edN7qiEI1dwQI5mdZ5/dkkDgJrFsyz4msc9Ybeu/themeHelpers.js\";import{brandPropertyControl}from\"https://framerusercontent.com/modules/T2sckviMCmJ4Jmbp9jxp/3qB2GDU7RlL1QG4oYr45/brandControl.js\";import{themePropertyControls,resolveThemeProp}from\"https://framerusercontent.com/modules/lFWBe5qCxlzWknbvQ1Np/lwWuCSxZ9LvCgcPdkfUa/themeControl.js\";import{getLiquidGlassFinish,LIQUID_GLASS_FILL_ALPHA,liquidGlassLegacyHighlightToVariant,toAccentGradient,withAlpha}from\"https://framerusercontent.com/modules/LcVxbLU0r8yRbNNFNhrj/r4N8Cbo0w1MxDY2KORnE/colorEffects.js\";// 7. Effects — Badge has its own tone scale because it doesn't share the\n// LiquidGlass surface tint matrix. The badge surface is the accent fill\n// (transparent at ~55% alpha) plus an inset highlight; the tone here only\n// picks the *highlight* color (white sheen vs dark sheen). It does **not**\n// use the heavy `LiquidGlassSurface` primitive — at this size a CSS-only\n// `backdrop-filter` + inset highlights produces a crisper \"tinted glass\"\n// finish where the accent color stays dominant. The shared\n// `colorEffects` utils mirror the same approach so Badge, Tab and\n// FeaturedIcon read as one surface family.\nconst DEFAULT_CIRCLE_ICON_SVG=getIconRaw(\"circle\");import{BADGE_ACCENT_COLORS,BADGE_ACCENT_COLOR_TITLES}from\"https://framerusercontent.com/modules/ERwHkp0S7TS5OOtXo7Ib/S8ko8Z1Mo9DMqr6Uk0y9/badgeAccentConstants.js\";import{accentColorOptionTitle}from\"https://framerusercontent.com/modules/1XTicB6ZB0oMHOK199vO/xULXi1xdaG7930SPd60o/accentContrast.js\";export{BADGE_ACCENT_COLORS,BADGE_ACCENT_COLOR_TITLES};/**\n * BadgeInternal - Internal forwardRef component.\n *\n * Actual component implementation with ref forwarding for Framer and parent components.\n */const BadgeInternal=/*#__PURE__*/forwardRef(function BadgeInternal(props,ref){const theme=resolveThemeProp(props);const{// 1. System\nbreakpoint:breakpointProp=\"desktop\",// 2. Primary Configuration\nbrand,semanticMode=true,variant=\"default\",accentColor=\"blue\",size=\"medium\",// 3. Content\nlabel=\"Label\",link,ariaLabel:ariaLabelProp=\"Label\",// 4. Visual/Icon\nshowIcon=true,icon=\"check\",iconSvg=DEFAULT_CIRCLE_ICON_SVG,// 5. State (not applicable)\n// 6-8. Not applicable.\n// 9. Advanced\nstyle,...rest}=props;const safeDomProps=useMemo(()=>pickSafeDivProps(rest),[rest]);const breakpoint=useEffectiveBreakpoint(breakpointProp);// tricount drops the frosted blur, so the badge reads as a flat solid chip.\nconst resolvedBrand=resolveBrand(brand);// SmartLink validates the editor-supplied link via `safeUrl` internally so\n// a `javascript:` / `data:` payload from a CMS or canvas user can never\n// reach `<a href>`, and wires the anchor into Framer's SPA router so\n// internal paths navigate without reloading the preview iframe.\nconst smartLink=useSmartLinkProps(link);const safeLinkHref=smartLink.href;const{styles:linkInteractiveStyles,handlers:linkHandlers}=useInteractiveStates(!safeLinkHref,{brand:resolvedBrand,transitions:true});const useAccentColors=!semanticMode;const isAccentMode=useAccentColors&&accentColor;const isDarkSurface=!isLightThemeSurface(theme,resolvedBrand);// Get dot color for icon processing (still needed for SVG processing).\nconst getDotColor=()=>{if(isAccentMode&&resolvedBrand===\"tricount\"){return getTricountChipColors(resolveTricountThemeVariant(theme)).color;}if(isAccentMode){if(!isDarkSurface){return Tokens.getColorValue(`/Text/text-${accentColor}`);}return Tokens.getColorValue(`/Foregrounds/fg-${accentColor}`);}if(isDarkSurface){switch(variant){case\"default\":return Tokens.getColorValue(\"/Foregrounds/fg-primary\");case\"success\":return Tokens.getColorValue(\"/Foregrounds/fg-success\");case\"warning\":return Tokens.getColorValue(\"/Foregrounds/fg-warning\");case\"danger\":return Tokens.getColorValue(\"/Foregrounds/fg-error\");case\"info\":return Tokens.getColorValue(\"/Foregrounds/fg-information\");default:return Tokens.getColorValue(\"/Foregrounds/fg-primary\");}}else{switch(variant){case\"success\":return Tokens.getColorValue(\"/Foregrounds/fg-success\");case\"warning\":return Tokens.getColorValue(\"/Foregrounds/fg-warning\");case\"danger\":return Tokens.getColorValue(\"/Foregrounds/fg-error\");case\"info\":return Tokens.getColorValue(\"/Foregrounds/fg-information\");default:return Tokens.getColorValue(\"/Foregrounds/fg-inverted-primary\");}}};const dotColor=getDotColor();/** Icon box matches row height (~24 / 32 / 40): glyphs were 12px inside a full-height pill and read tiny. */const iconSize=size===\"small\"?16:size===\"medium\"?20:24;const showIconResolved=showIcon!==false&&icon!==\"none\";const effectiveIconSvg=icon===\"custom\"?iconSvg:icon===\"none\"?\"\":getIconRaw(icon);const processedIconSvg=(()=>{if(!effectiveIconSvg||!effectiveIconSvg.trim()||!effectiveIconSvg.includes(\"<svg\")){return\"\";}return processSVG(effectiveIconSvg.trim(),iconSize,dotColor,{replaceStroke:true});})();// Compute background and text color: accent mode uses token background + white text (default) or utility-200 + text-accent (inverted); otherwise semantic variant.\nconst getBadgeBackground=()=>{if(isAccentMode&&resolvedBrand===\"tricount\"){return getTricountChipColors(resolveTricountThemeVariant(theme)).background;}if(isAccentMode){if(!isDarkSurface){return Tokens.getColorValue(`/Utility colors/utility-${accentColor}-200`);}return Tokens.getColorValue(`/Backgrounds/bg-${accentColor}`);}if(isDarkSurface){switch(variant){case\"success\":return Tokens.getColorValue(\"/Backgrounds/bg-success\");case\"warning\":return Tokens.getColorValue(\"/Backgrounds/bg-warning\");case\"danger\":return Tokens.getColorValue(\"/Backgrounds/bg-error\");case\"info\":return Tokens.getColorValue(\"/Backgrounds/bg-information\");default:return Tokens.getColorValue(\"/Utility colors/utility-white-10%\");}}else{switch(variant){case\"success\":return Tokens.getColorValue(\"/Utility colors/utility-success-100\");case\"warning\":return Tokens.getColorValue(\"/Utility colors/utility-warning-100\");case\"danger\":return Tokens.getColorValue(\"/Utility colors/utility-error-100\");case\"info\":return Tokens.getColorValue(\"/Utility colors/utility-blue-100\");default:return Tokens.getColorValue(\"/Utility colors/utility-black-10%\");}}};const getBadgeTextColor=()=>{if(isAccentMode&&resolvedBrand===\"tricount\"){return getTricountChipColors(resolveTricountThemeVariant(theme)).color;}if(isAccentMode){return Tokens.getColorValue(`/Text/text-${accentColor}`);}if(isDarkSurface){switch(variant){case\"success\":return Tokens.getColorValue(\"/Text/text-success\");case\"warning\":return Tokens.getColorValue(\"/Text/text-warning\");case\"danger\":return Tokens.getColorValue(\"/Text/text-error\");case\"info\":return Tokens.getColorValue(\"/Text/text-information\");default:return Tokens.getColorValue(\"/Text/text-secondary\");}}else{return Tokens.getColorValue(\"/Text/text-inverted-primary\");}};// Responsive padding and gap based on breakpoint and size.\nconst getPaddingX=()=>{if(size===\"small\"){return breakpoint===\"phone\"?Tokens.getSpacing(8):breakpoint===\"tablet\"?Tokens.getSpacing(10):Tokens.getSpacing(12);}if(size===\"medium\"){return breakpoint===\"phone\"?Tokens.getSpacing(12):breakpoint===\"tablet\"?Tokens.getSpacing(16):Tokens.getSpacing(16);}return breakpoint===\"phone\"?Tokens.getSpacing(16):breakpoint===\"tablet\"?Tokens.getSpacing(20):Tokens.getSpacing(20);};const getGap=()=>{if(size===\"small\"){return breakpoint===\"phone\"?Tokens.getSpacing(4):breakpoint===\"tablet\"?Tokens.getSpacing(6):Tokens.getSpacing(6);}if(size===\"medium\"){return breakpoint===\"phone\"?Tokens.getSpacing(6):breakpoint===\"tablet\"?Tokens.getSpacing(8):Tokens.getSpacing(8);}return breakpoint===\"phone\"?Tokens.getSpacing(8):breakpoint===\"tablet\"?Tokens.getSpacing(10):Tokens.getSpacing(10);};const typography=size===\"small\"?Tokens.getTypographyStyles(\"/Detail SM/Heavy\",breakpoint,{brand:resolvedBrand}):size===\"medium\"?Tokens.getTypographyStyles(\"/Body SM/Heavy\",breakpoint,{brand:resolvedBrand}):Tokens.getTypographyStyles(\"/Body SM/Heavy\",breakpoint,{brand:resolvedBrand});const solidBackground=getBadgeBackground();const textColor=getBadgeTextColor();const paddingX=getPaddingX();const gap=getGap();// Tinted liquid glass uses `LIQUID_GLASS_FILL_ALPHA` so the backdrop\n// blur reads through — paired with `backdrop-filter` for the frosted look.\n// Alphas toward 1 read solid (blur wasted); too low and the accent washes out.\nconst tintedBackground=useMemo(()=>withAlpha(solidBackground,LIQUID_GLASS_FILL_ALPHA),[solidBackground]);// A subtle top-darker → accent gradient is applied to all *colored*\n// backgrounds (any accent color, plus the four semantic colored variants\n// success / warning / danger / info). The \"default\" semantic variant uses\n// a translucent white/black wash where a gradient would be invisible and\n// weird — so it stays flat. The gradient is intentionally subtle (~11%\n// L drop) and accessibility-positive: white labels sit on the darker\n// top stop, gaining contrast vs. the flat fill.\nconst useGradientFill=isAccentMode&&resolvedBrand!==\"tricount\"||variant!==\"default\";const finalBackground=useMemo(()=>useGradientFill?toAccentGradient(tintedBackground):tintedBackground,[useGradientFill,tintedBackground]);// Glass highlight follows theme (same as former surfaceTone `\"auto\"`).\nconst resolvedGlassTone=isDarkSurface?\"light\":\"dark\";const badgeHeight=size===\"small\"?Tokens.getSpacing(24):size===\"medium\"?Tokens.getSpacing(32):Tokens.getSpacing(40);// Chip-family: always pill radius per design system exception.\nconst badgeRadius=Tokens.getRadius(\"radius-full\");// Tinted-glass finishing layer: backdrop-filter for the actual glass\n// refraction, inset highlight on the top edge for the \"lit-from-above\"\n// glassy reflection, plus a hairline border to define the edge against\n// contrast-y backgrounds. All three are scaled by the highlight tone.\n// Opaque fill used for tricount so the chip reads fully solid (no blur).\n// Colored chips keep the same top-darker gradient, just without alpha.\nconst tricountSolidFill=useMemo(()=>useGradientFill?toAccentGradient(solidBackground):solidBackground,[useGradientFill,solidBackground]);const liquidGlassFinish=useMemo(()=>{if(resolvedBrand===\"tricount\"){return{background:solidBackground,border:\"none\"};}const neutralVariant=liquidGlassLegacyHighlightToVariant(resolvedGlassTone);if(useGradientFill){return getLiquidGlassFinish({variant:\"colored\",surface:\"button\",selected:false,accentColor:solidBackground,baseFill:finalBackground,brand:resolvedBrand,solidFill:tricountSolidFill});}return getLiquidGlassFinish({variant:neutralVariant,surface:\"button\",selected:false,brand:resolvedBrand,solidFill:tricountSolidFill});},[resolvedGlassTone,useGradientFill,solidBackground,finalBackground,resolvedBrand,tricountSolidFill]);const badgeStyle=useMemo(()=>({display:\"inline-flex\",alignItems:\"center\",minWidth:Tokens.getSpacing(32),whiteSpace:\"nowrap\",height:badgeHeight,paddingLeft:paddingX,paddingRight:paddingX,gap,borderRadius:badgeRadius,background:finalBackground,color:textColor,...typography,// Tinted-glass finishing layer (backdrop-filter + inset highlights +\n    // hairline border). Spread *before* `style` so editor overrides win.\n    ...liquidGlassFinish??null,...style}),[badgeHeight,badgeRadius,style,finalBackground,textColor,paddingX,gap,typography,liquidGlassFinish]);const iconContainerStyle={display:\"inline-flex\",alignItems:\"center\",justifyContent:\"center\",flexShrink:0,width:Tokens.getSpacing(iconSize),height:Tokens.getSpacing(iconSize)};const iconSvgStyle={display:\"inline-flex\",width:\"100%\",height:\"100%\"};const iconDotStyle={display:\"inline-block\",width:\"100%\",height:\"100%\",borderRadius:Tokens.getRadius(\"radius-full\"),boxSizing:\"border-box\",borderWidth:Tokens.getSpacing(2),borderStyle:\"solid\",borderColor:dotColor};/**\n     * New-tab links need an explicit name (WCAG 3.2.5). See getNewTabAriaLabel.\n     */const newTabAriaLabel=safeLinkHref&&smartLink.target===\"_blank\"&&label?.trim()?getNewTabAriaLabel(label):undefined;const trimmedAriaOverride=ariaLabelProp.trim();const trimmedLabelText=label?.trim()??\"\";const resolvedAriaLabel=newTabAriaLabel??(trimmedAriaOverride!==\"\"&&trimmedAriaOverride!==trimmedLabelText?trimmedAriaOverride:undefined);const inner=/*#__PURE__*/_jsxs(_Fragment,{children:[showIconResolved&&/*#__PURE__*/_jsx(\"span\",{style:iconContainerStyle,\"aria-hidden\":\"true\",children:processedIconSvg?/*#__PURE__*/_jsx(\"span\",{style:iconSvgStyle,dangerouslySetInnerHTML:{__html:processedIconSvg}}):/*#__PURE__*/_jsx(\"span\",{style:iconDotStyle})}),/*#__PURE__*/_jsx(\"span\",{style:{whiteSpace:\"nowrap\"},children:label})]});if(safeLinkHref){const linkTouchTargetStyle={display:\"inline-flex\",alignItems:\"center\",justifyContent:\"center\",minWidth:Tokens.getControlSizeValue(\"touchTarget\"),minHeight:Tokens.getControlSizeValue(\"touchTarget\"),borderRadius:badgeRadius,textDecoration:\"none\",...linkInteractiveStyles};return /*#__PURE__*/_jsx(\"a\",{ref:ref,href:smartLink.href,target:smartLink.target,rel:smartLink.rel,onClick:smartLink.onClick,style:{...smartLink.style,...linkTouchTargetStyle},\"aria-label\":resolvedAriaLabel,onMouseEnter:linkHandlers.onMouseEnter,onMouseLeave:linkHandlers.onMouseLeave,onMouseDown:linkHandlers.onMouseDown,onMouseUp:linkHandlers.onMouseUp,onFocus:linkHandlers.onFocus,onBlur:linkHandlers.onBlur,...safeDomProps,children:/*#__PURE__*/_jsx(\"span\",{style:badgeStyle,children:inner})});}return /*#__PURE__*/_jsx(\"span\",{ref:ref,style:badgeStyle,\"aria-label\":resolvedAriaLabel,...safeDomProps,children:inner});});BadgeInternal.displayName=\"Badge Internal - Atom\";/**\n * Framer attaches `addPropertyControls` to this export; it must remain a plain function\n * component — wrapping the default export in `forwardRef` breaks Framer’s code component pipeline.\n */export default function Badge(props){return /*#__PURE__*/_jsx(BadgeInternal,{...props});}Badge.displayName=\"Badge - Atom\";addPropertyControls(Badge,{// ─── 1. Content ────────────────────────────────────────────────────────────\nlabel:{type:ControlType.String,title:\"Label\",defaultValue:\"Label\",placeholder:HINT_BADGE,description:\"Type the short label shown on the badge—keep it brief so the pill stays balanced.\"},// ─── 2. Links ────────────────────────────────────────────────────────────\nlink:{type:ControlType.Link,title:\"Link\",defaultValue:\"\",description:\"Add a URL to make the whole badge clickable; leave empty for display-only badges.\"},// ─── 4. Icons ──────────────────────────────────────────────────────────────\nicon:{type:ControlType.Enum,title:\"Icon\",options:[...ICON_OPTIONS_WITH_NONE_AND_CUSTOM],optionTitles:ICON_OPTIONS_WITH_NONE_AND_CUSTOM.map(key=>ICON_OPTION_TITLES_WITH_NONE_AND_CUSTOM[key]),displaySegmentedControl:false,defaultValue:\"check\",description:\"Select an icon, None for text-only badges, or Custom to paste SVG below.\"},iconSvg:{type:ControlType.String,title:\"Icon SVG\",defaultValue:DEFAULT_CIRCLE_ICON_SVG,placeholder:\"<svg>...</svg>\",description:FRAMER_ICON_SVG_CUSTOM_DESCRIPTION,preventLocalization:true,hidden:props=>props.icon!==\"custom\"},// ─── 6. Configuration ──────────────────────────────────────────────────────\nsemanticMode:{type:ControlType.Boolean,title:\"Color Mode\",defaultValue:true,enabledTitle:\"Semantic\",disabledTitle:\"Accent\",description:\"Choose Semantic for status-driven colors (success, warning, …). Switch to Accent to use one brand accent from your tokens.\"},variant:{type:ControlType.Enum,title:\"Variant\",options:[\"default\",\"success\",\"warning\",\"danger\",\"info\"],optionTitles:[\"Default\",\"Success\",\"Warning\",\"Danger\",\"Info\"],defaultValue:\"default\",description:\"With Semantic on, choose Default for neutral labels or a status variant to reinforce meaning.\",hidden:props=>props.semanticMode===false},accentColor:{type:ControlType.Enum,title:\"Color\",options:[...BADGE_ACCENT_COLORS],optionTitles:BADGE_ACCENT_COLORS.map(c=>accentColorOptionTitle(c)),defaultValue:\"blue\",description:\"With Accent mode on, pick which background token color fills the badge. Accents marked (fails AA) miss WCAG 4.5:1 for accent text on the matching fill; prefer unmarked colors for chips with that pairing.\",hidden:props=>props.semanticMode!==false},size:{type:ControlType.Enum,title:\"Size\",options:[\"small\",\"medium\",\"large\"],optionTitles:[\"Small\",\"Medium\",\"Large\"],displaySegmentedControl:true,defaultValue:\"medium\",description:\"Use Small in dense layouts; Medium or Large when the badge should read clearly at a glance.\"},// ─── 8. Accessibility ────────────────────────────────────────────────────\nariaLabel:{type:ControlType.String,title:\"ARIA Label\",defaultValue:\"Label\",placeholder:\"e.g. Label\",description:\"Accessible name override. Keep it the same as the visible label unless you need a different spoken name.\"},// ─── 9. Advanced ─────────────────────────────────────────────────────────\nid:{type:ControlType.String,title:\"ID\",defaultValue:\"badge\",placeholder:\"e.g. my-element\",description:\"Set a unique id when you link to this element or tag it for analytics; clear or change it if you use multiple badges on one page.\",preventLocalization:true},// ─── 10. System ────────────────────────────────────────────────────────────\nbreakpoint:{type:ControlType.Enum,title:\"Breakpoint\",options:[\"desktop\",\"tablet\",\"phone\"],optionTitles:[\"Desktop\",\"Tablet\",\"Phone\"],displaySegmentedControl:false,defaultValue:\"desktop\",description:FRAMER_BREAKPOINT_DESCRIPTION},...themePropertyControls(FRAMER_THEME_DESCRIPTION_SURFACE),...brandPropertyControl()});\nexport const __FramerMetadata__ = {\"exports\":{\"BadgeAccentColor\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"Badge\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"BadgeProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"BADGE_ACCENT_COLOR_TITLES\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"BADGE_ACCENT_COLORS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","/**\n * CardSearchResult - Search result card component.\n *\n * A compact horizontal card designed to display a single search result inside a\n * ModalSearch collection list. Features an optional icon, category label, title,\n * description, and a navigation chevron. The entire card is a clickable link.\n *\n * @framerIntrinsicWidth 600\n * @framerIntrinsicHeight 80\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */// 1. React and React types\nimport{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{forwardRef,useRef,useMemo}from\"react\";// 2. Framer API\nimport{addPropertyControls,ControlType}from\"framer\";// 3. Design system utilities\nimport Tokens,{useEffectiveBreakpoint,useReducedMotion,kernHeadingPlainText}from\"https://framerusercontent.com/modules/JnflwrfTBO2W3YxUCt5T/s9q9B55pHhXdKNmRFsqk/index.js\";import{getGap,getCardRadius}from\"https://framerusercontent.com/modules/LQuuOAryIVnwswuGx8Ex/FuV5wmJNbd4rfUFpPQsp/layoutStyles.js\";import{applyCardSurfaceStyle,CardSurfaceOverlay}from\"https://framerusercontent.com/modules/s0sufguyw0flCdVPRcnP/eXWSx2znDZgEPicu5d2l/cardSurface.js\";import{withAlpha}from\"https://framerusercontent.com/modules/LcVxbLU0r8yRbNNFNhrj/r4N8Cbo0w1MxDY2KORnE/colorEffects.js\";import{htmlToSearchText}from\"https://framerusercontent.com/modules/RwYqM9peexHuGWb1RjgA/BuosGXQzWOB3GDMqXwHi/collectionSearchFilter.js\";// 4. Local utilities\nimport{getNewTabAriaLabel,useSmartLinkProps}from\"https://framerusercontent.com/modules/NbJRONH2Z4yDLXjbVsSq/0MsEMzjB4aZK3lbWLov2/linkHelpers.js\";import{pickSafeDivProps}from\"https://framerusercontent.com/modules/HHfrxxHLEFZsStlLgAXu/hkvPnRpc40IjPMvMGp2M/domProps.js\";import{normalizeElementId,resolveCollectionElementId}from\"https://framerusercontent.com/modules/EhucoCcvUrEmkeXlMWEK/ZU1rnZ0qw6WabcfA5070/resolveElementId.js\";import{PRESERVE_CONTROL_NEWLINES}from\"https://framerusercontent.com/modules/7usa64yv6f2tRQTyL0ZP/5mFzfiHMhnd6JaTAckCv/controlTextStyles.js\";import{getIcon,ICON_OPTIONS_WITH_NONE_AND_CUSTOM,ICON_OPTION_TITLES_WITH_NONE_AND_CUSTOM,ICON_ACCENT_COLORS}from\"https://framerusercontent.com/modules/OuAHgtW29YOxApe6lCN1/aLin5QE1reSwcDexLNvn/icons.js\";// 5. Component imports\nimport FeaturedIcon from\"https://framerusercontent.com/modules/Kh0Egfp0qTfCabtCLJHL/kksCFHjXhvr4TXjxwPNz/FeaturedIcon.js\";import Badge from\"https://framerusercontent.com/modules/9q0SZwaSV5g6UJVFdQLo/FjLeITr2V0p8qhMWPvka/Badge.js\";import{useInteractiveStates}from\"https://framerusercontent.com/modules/Oyd67FvSjdl6uCVEyAij/z0s6QvQLAVmOIBsYHE49/useInteractiveStates.js\";import{getBrandFocusColor,getCardThemeColors,getThemeColors,resolveBrand}from\"https://framerusercontent.com/modules/30edN7qiEI1dwQI5mdZ5/dkkDgJrFsyz4msc9Ybeu/themeHelpers.js\";import{brandPropertyControl}from\"https://framerusercontent.com/modules/T2sckviMCmJ4Jmbp9jxp/3qB2GDU7RlL1QG4oYr45/brandControl.js\";import{themePropertyControls,resolveThemeProp}from\"https://framerusercontent.com/modules/lFWBe5qCxlzWknbvQ1Np/lwWuCSxZ9LvCgcPdkfUa/themeControl.js\";import{FRAMER_THEME_DESCRIPTION_SURFACE_WITH_CHILDREN}from\"https://framerusercontent.com/modules/kgixvU6ZSjEgZfx2dLER/o4VhqtRdwHGnIui8eFET/propertyControlCopy.js\";/** Width keywords that make a row size to its content instead of its cell. */const SHRINK_TO_FIT_WIDTHS=new Set([\"auto\",\"fit-content\",\"min-content\",\"max-content\"]);/**\n * Framer passes the instance frame size to the component as an inline width.\n * A Collection List row authored as \"Fit\" arrives as `width: auto`, which sizes\n * each result to its longest line and pushes long rows past the results\n * container. Drop shrink-to-fit widths so the row fills its cell; explicit\n * widths an author set on purpose are kept.\n */function stripFramerShrinkToFitWidth(style){if(!style||typeof style!==\"object\")return{};const{width}=style;if(typeof width!==\"string\"||!SHRINK_TO_FIT_WIDTHS.has(width.trim().toLowerCase())){return style;}const{width:_width,...rest}=style;return rest;}/**\n * CardSearchResultInternal - Internal forwardRef component.\n */const CardSearchResultInternal=/*#__PURE__*/forwardRef(function CardSearchResultInternal(props,ref){const theme=resolveThemeProp(props);const{breakpoint:breakpointProp=\"desktop\",brand,title=\"Search result title\",description=\"\",searchBody=\"\",category=\"Category\",showIcon:_showIcon,icon:iconProp=\"none\",iconName=\"\",iconSvg=\"\",iconColor:iconColorProp=\"blue\",showCategory=false,categoryStyle=\"badge\",showDescription:_showDescription,showChevron=true,variant=\"plain\",link,openInNewTab=false,ariaLabel,surface=\"liquid-glass\",style,id:idProp,...rest}=props;// Search results are cloned from a Collection List whose breakpoint control\n// is set for the canvas the list was placed on, so a desktop-authored list\n// kept desktop type and padding on a phone: titles clamped after three\n// words and every row grew past 140px. Step down with the viewport.\nconst breakpoint=useEffectiveBreakpoint(breakpointProp);const legacyCardId=props.cardId;// Real anchors (not role=\"link\" divs) so middle-click / open-in-new-tab work.\nconst smartLink=useSmartLinkProps(link??\"\",openInNewTab,{brand});const linkUrl=smartLink.href||undefined;const rootId=resolveCollectionElementId(normalizeElementId(legacyCardId)??idProp,\"card-search-result\",linkUrl||title);const isInteractive=Boolean(linkUrl);const safeDomProps=useMemo(()=>pickSafeDivProps(rest),[rest]);// Explicit Icon=None wins over a CMS-bound `iconName`, so compact\n// typeahead templates can hide icons without clearing the CMS field.\nconst icon=iconProp===\"none\"?\"none\":iconName&&iconName.length?iconName:iconProp;const iconColorRaw=String(iconColorProp??\"\").toLowerCase().trim().replace(/\\s+/g,\"-\").replace(/grey/g,\"gray\");const iconColor=iconColorRaw===\"default\"?\"default\":ICON_ACCENT_COLORS.includes(iconColorRaw)?iconColorRaw:\"blue\";const reducedMotion=useReducedMotion();const{isHovered,isFocused,isPressed,handlers}=useInteractiveStates(!isInteractive);// ── Colors ────────────────────────────────────────────────────────────────\nconst isTricount=resolveBrand(brand)===\"tricount\";const isPlain=variant===\"plain\";const colors=useMemo(()=>{// Hairline dividers use the glass divider token (alpha tint), not solid\n// border-primary (rgb(0,0,0)), which reads as a harsh black rule on light\n// search surfaces. Matches Accordion / footer / FormHeader list separators.\nconst sectionColors=getThemeColors(theme,brand);const dividerColor=sectionColors.dividerGlass;// Plain rows sit on the section (or modal) with no card fill, so they\n// must use section text colors. Filled tricount cards keep the\n// contrasting Paper/Ink face from getCardThemeColors.\nif(isTricount&&isPlain){return{cardBg:\"transparent\",titleColor:sectionColors.textPrimary,descriptionColor:sectionColors.textSecondary,chevronColor:sectionColors.fgSecondary,focusOutlineColor:getBrandFocusColor(brand,theme),dividerColor,hoverBg:withAlpha(sectionColors.textPrimary,.08)};}// tricount: solid card with contrasting title/body/icon colors from the shared helper.\nif(isTricount){const tri=getCardThemeColors(theme,\"tricount\");return{cardBg:tri.cardBg,titleColor:tri.titleColor,descriptionColor:tri.descriptionColor,chevronColor:tri.iconColor,focusOutlineColor:getBrandFocusColor(brand,theme),dividerColor,hoverBg:Tokens.getColorValue(\"/Backgrounds/bg-tertiary\")};}const isInverted=theme===\"inverted\";return{cardBg:Tokens.getColorValue(isInverted?\"/Backgrounds/bg-inverted-tertiary\":\"/Backgrounds/bg-tertiary\"),titleColor:Tokens.getColorValue(isInverted?\"/Text/text-inverted-primary\":\"/Text/text-primary\"),descriptionColor:Tokens.getColorValue(isInverted?\"/Text/text-inverted-secondary\":\"/Text/text-secondary\"),chevronColor:Tokens.getColorValue(isInverted?\"/Foregrounds/fg-inverted-secondary\":\"/Foregrounds/fg-secondary\"),focusOutlineColor:getBrandFocusColor(brand,theme),dividerColor,hoverBg:Tokens.getColorValue(isInverted?\"/Backgrounds/bg-inverted-secondary\":\"/Backgrounds/bg-quaternary\")};},[brand,theme,isPlain,isTricount]);// ── Hover feedback ────────────────────────────────────────────────────────\n// The card surface is painted by a glass overlay, so the only hover\n// affordance is a filter on the card element. The shared darken-on-hover\n// filter assumes a light surface: on bunq's default palette the card\n// already sits near black, and darkening it further reads as a disabled\n// row rather than a hovered one. Lift it instead, which lands on roughly\n// the next background tier (bg-tertiary → bg-quaternary). Inverted and\n// tricount cards are light, so they keep the shared darkening.\n// Plain rows skip filters and use a soft background wash instead.\nconst usesDarkCardSurface=!isTricount&&theme!==\"inverted\";const hoverFilter=useMemo(()=>{if(isPlain)return\"none\";const active=isInteractive&&(isHovered||isPressed);if(!usesDarkCardSurface){return Tokens.getBrightnessFilter(false,isHovered&&isInteractive,isPressed&&isInteractive);}return active?\"brightness(1.4)\":\"none\";},[isPlain,usesDarkCardSurface,isInteractive,isHovered,isPressed]);// ── Icon ──────────────────────────────────────────────────────────────────\nconst resolvedIcon=icon??\"none\";const hasIcon=resolvedIcon!==\"none\";// ── Chevron ───────────────────────────────────────────────────────────────\nconst chevronSVG=getIcon(\"arrow-narrow-right\",16,colors.chevronColor,{opticalInset:0});// ── Layout ────────────────────────────────────────────────────────────────\nconst isPhone=breakpoint===\"phone\";// Dense typeahead rows: 14 vertical / 12–14 horizontal from the spacing scale.\nconst cardPaddingV=Tokens.getSpacing(isPlain?14:12);const cardPaddingH=Tokens.getSpacing(isPhone?12:14);// ── Styles ────────────────────────────────────────────────────────────────\nconst cardBorderRadius=getCardRadius(breakpoint,\"small\");const plainHoverBg=isPlain&&isInteractive&&(isHovered||isPressed)?colors.hoverBg:\"transparent\";const cardStyle=useMemo(()=>{const base={display:\"flex\",flexDirection:\"row\",alignItems:\"center\",gap:getGap(\"sm\",breakpoint),padding:`${cardPaddingV} ${cardPaddingH}`,width:\"100%\",maxWidth:\"100%\",minWidth:0,textDecoration:\"none\",cursor:isInteractive?\"pointer\":\"default\",outline:isFocused?`${Tokens.getFocusOutlineWidth()} solid ${colors.focusOutlineColor}`:`${Tokens.getFocusOutlineWidth()} solid transparent`,// Inset focus ring (negative offset) so it follows\n// the card's `borderRadius` and stays visible when\n// the card is rendered inside an `overflow: hidden`\n// / `overflow: auto` ancestor — most notably the\n// `ModalSearch` results scroller, which is\n// `overflow-y: auto` (forcing horizontal clipping\n// per CSS spec) with no horizontal padding. With a\n// positive offset the ring would paint outside the\n// card border and be clipped to invisibility.\noutlineOffset:-2,transition:reducedMotion?\"none\":`${Tokens.getTransition(\"filter\",\"quick\")}, ${Tokens.getTransition(\"outline\",\"quick\")}, ${Tokens.getTransition(\"background-color\",\"quick\")}`,filter:hoverFilter,boxSizing:\"border-box\",position:\"relative\",...stripFramerShrinkToFitWidth(style)};if(isPlain){return{...base,borderRadius:0,background:plainHoverBg,borderBottom:`1px solid ${colors.dividerColor}`};}return applyCardSurfaceStyle({...base,borderRadius:cardBorderRadius,background:colors.cardBg},surface);},[breakpoint,cardPaddingV,cardPaddingH,cardBorderRadius,colors,isInteractive,isFocused,hoverFilter,reducedMotion,style,surface,isPlain,plainHoverBg]);const contentColumnStyle={display:\"flex\",flexDirection:\"column\",gap:getGap(\"xs\",breakpoint),minWidth:0,flex:1};const titleStyle={margin:0,color:colors.titleColor,// Compact typeahead rows: Body MD reads clearly without the oversized\n// Headline SM that clipped mid-question in the help search dropdown.\n...Tokens.getTypographyStyles(\"/Body MD/Heavy\",breakpoint),overflowWrap:\"anywhere\",wordBreak:\"break-word\",display:\"-webkit-box\",WebkitLineClamp:2,WebkitBoxOrient:\"vertical\",overflow:\"hidden\"};const descriptionStyle={margin:0,color:colors.descriptionColor,...Tokens.getTypographyStyles(\"/Body MD/Light\",breakpoint),display:\"-webkit-box\",WebkitLineClamp:2,WebkitBoxOrient:\"vertical\",overflow:\"hidden\",...PRESERVE_CONTROL_NEWLINES};// Span (not `p`) so collection search text does not treat the caption as description.\nconst categoryCaptionStyle={margin:0,color:colors.descriptionColor,...Tokens.getTypographyStyles(\"/Body SM/Light\",breakpoint)};const showCategoryBadge=showCategory&&Boolean(category)&&categoryStyle===\"badge\";const showCategoryCaption=showCategory&&Boolean(category)&&categoryStyle===\"caption\";const searchBodyText=htmlToSearchText(searchBody);const baseAriaLabel=ariaLabel||title||\"Search result\";const effectiveAriaLabel=isInteractive&&smartLink.target===\"_blank\"?getNewTabAriaLabel(baseAriaLabel):baseAriaLabel;const cardBody=/*#__PURE__*/_jsxs(_Fragment,{children:[!isPlain?/*#__PURE__*/_jsx(CardSurfaceOverlay,{surface:surface,radius:cardBorderRadius,theme:theme,brand:brand}):null,hasIcon&&/*#__PURE__*/_jsx(\"div\",{style:{flexShrink:0,alignSelf:\"center\"},children:/*#__PURE__*/_jsx(FeaturedIcon,{id:`${rootId}-icon`,breakpoint:breakpoint,theme:theme,brand:brand,iconContext:\"card\",variant:\"solid\",color:resolveBrand(brand)===\"tricount\"?undefined:iconColor,size:24,icon:resolvedIcon===\"custom\"?\"custom\":resolvedIcon,iconName:resolvedIcon===\"custom\"?\"custom\":resolvedIcon,iconSvg:resolvedIcon===\"custom\"?iconSvg:undefined})}),/*#__PURE__*/_jsxs(\"div\",{style:contentColumnStyle,children:[showCategoryBadge?/*#__PURE__*/_jsx(\"div\",{style:{display:\"flex\"},children:/*#__PURE__*/_jsx(Badge,{id:`${rootId}-badge`,label:category,breakpoint:breakpoint,theme:theme,brand:brand,size:\"small\",variant:\"default\"})}):null,title&&/*#__PURE__*/_jsx(\"h3\",{style:titleStyle,children:kernHeadingPlainText(title)}),description?.trim()?/*#__PURE__*/_jsx(\"p\",{style:descriptionStyle,children:description}):null,showCategoryCaption?/*#__PURE__*/_jsx(\"span\",{style:categoryCaptionStyle,children:`in ${category}`}):null,searchBodyText?/*#__PURE__*/_jsx(\"span\",{\"data-search-body\":\"\",hidden:true,children:searchBodyText}):null]}),showChevron&&isInteractive&&/*#__PURE__*/_jsx(\"span\",{style:{flexShrink:0,display:\"flex\",alignItems:\"center\"},\"aria-hidden\":true,dangerouslySetInnerHTML:{__html:chevronSVG}})]});const interactionHandlers={onMouseEnter:handlers.onMouseEnter,onMouseLeave:handlers.onMouseLeave,onMouseDown:handlers.onMouseDown,onMouseUp:handlers.onMouseUp,onFocus:handlers.onFocus,onBlur:handlers.onBlur};// Interactive results are real anchors so browsers expose href, middle-click,\n// and \"open in new tab\". Static (no link) rows keep article semantics.\nif(isInteractive&&linkUrl){return /*#__PURE__*/_jsx(\"a\",{ref:ref,href:smartLink.href,target:smartLink.target,rel:smartLink.rel,style:{...cardStyle,...smartLink.style},\"aria-label\":effectiveAriaLabel,onClick:smartLink.onClick,...interactionHandlers,...safeDomProps,id:rootId,children:cardBody});}return /*#__PURE__*/_jsx(\"article\",{ref:ref,style:cardStyle,\"aria-label\":effectiveAriaLabel,...interactionHandlers,...safeDomProps,id:rootId,children:cardBody});});/**\n * CardSearchResult - Wrapper component for Framer compatibility.\n */export default function CardSearchResult(props){const ref=useRef(null);return /*#__PURE__*/_jsx(CardSearchResultInternal,{...props,ref:ref});}// Set display name for Framer.\nCardSearchResult.displayName=\"Card Search Result - Molecule\";// Property Controls configuration for Framer.\naddPropertyControls(CardSearchResult,{// ─── 1. Content ────────────────────────────────────────────────────────────\ntitle:{type:ControlType.String,title:\"Title\",defaultValue:\"Search result title\",placeholder:\"Enter result title...\",description:\"Primary heading for the search result.\"},category:{type:ControlType.String,title:\"Category\",defaultValue:\"Category\",placeholder:\"Enter category...\",description:\"Category label for the badge or caption presentation.\",hidden:props=>!props.showCategory},description:{type:ControlType.String,title:\"Supporting Text\",defaultValue:\"\",placeholder:\"Enter description...\",description:\"Short excerpt or description. Truncated to 2 lines. Leave empty to hide.\",displayTextArea:true},searchBody:{type:ControlType.String,title:\"Search Body\",defaultValue:\"\",placeholder:\"Optional extra keywords only\",description:\"Hidden from the row. Do not bind CMS Content. Help body search uses the public index.\",displayTextArea:true},// ─── 2. Links ──────────────────────────────────────────────────────────────\nlink:{type:ControlType.Link,title:\"Link\",defaultValue:\"\",description:\"URL to navigate to when the card is clicked.\"},// ─── 4. Icons ────────────────────────────────────────────────────────────────\niconName:{type:ControlType.String,title:\"Icon Name\",defaultValue:\"\",placeholder:\"e.g. check\",description:\"CMS-bound icon name. Overrides the Icon enum when set.\",preventLocalization:true},icon:{type:ControlType.Enum,title:\"Icon\",options:[...ICON_OPTIONS_WITH_NONE_AND_CUSTOM],optionTitles:ICON_OPTIONS_WITH_NONE_AND_CUSTOM.map(c=>ICON_OPTION_TITLES_WITH_NONE_AND_CUSTOM[c]),defaultValue:\"none\",description:\"Optional left icon. Prefer None for compact typeahead rows.\"},iconSvg:{type:ControlType.String,title:\"Icon SVG\",defaultValue:\"\",placeholder:\"Paste SVG code...\",description:\"Custom SVG code for the icon when Icon is set to custom.\",displayTextArea:true,preventLocalization:true,hidden:props=>props.icon!==\"custom\"},iconColor:{type:ControlType.String,title:\"Icon Color\",defaultValue:\"blue\",placeholder:\"e.g. orange\",description:\"Accent color for the icon background.\",preventLocalization:true,hidden:props=>props.icon===\"none\"&&(!props.iconName||props.iconName.length===0)},// ─── 7. Behavior ───────────────────────────────────────────────────────────\nshowCategory:{type:ControlType.Boolean,title:\"Show Category\",defaultValue:false,enabledTitle:\"Show\",disabledTitle:\"Hide\",description:\"Optional category above the title (badge) or under the description (caption).\"},categoryStyle:{type:ControlType.Enum,title:\"Category Style\",options:[\"badge\",\"caption\"],optionTitles:[\"Badge\",\"Caption\"],defaultValue:\"badge\",displaySegmentedControl:true,description:\"Badge sits above the title. Caption shows in {category} under the description.\",hidden:props=>!props.showCategory},showChevron:{type:ControlType.Boolean,title:\"Show Chevron\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\",description:\"Show a right-side navigation chevron to indicate the card is a link.\"},variant:{type:ControlType.Enum,title:\"Variant\",options:[\"plain\",\"card\"],optionTitles:[\"Plain\",\"Card\"],defaultValue:\"plain\",displaySegmentedControl:true,description:\"Plain is a flat divider row (no fill/radius). Card keeps the filled surface.\"},openInNewTab:{type:ControlType.Boolean,title:\"Open in New Tab\",defaultValue:false,enabledTitle:\"New Tab\",disabledTitle:\"Same Tab\",description:\"Open the link in a new browser tab.\"},// ─── 9. Advanced ───────────────────────────────────────────────────────────\nariaLabel:{type:ControlType.String,title:\"ARIA Label\",defaultValue:\"\",placeholder:\"Defaults to title if empty...\",description:\"Accessible label for the card. Defaults to the title when empty.\"},id:{type:ControlType.String,title:\"ID\",defaultValue:\"card-search-result\",placeholder:\"e.g. my-element\",description:\"HTML id for the root element (e.g. for analytics or anchor links).\",preventLocalization:true},// ─── 10. System ────────────────────────────────────────────────────────────\nbreakpoint:{type:ControlType.Enum,title:\"Breakpoint\",options:[\"desktop\",\"tablet\",\"phone\"],optionTitles:[\"Desktop\",\"Tablet\",\"Phone\"],displaySegmentedControl:false,defaultValue:\"desktop\",description:\"Select the breakpoint to match Framer's canvas.\"},...themePropertyControls(FRAMER_THEME_DESCRIPTION_SURFACE_WITH_CHILDREN),...brandPropertyControl()});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CardSearchResult\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"CardSearchResultProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","import{useLayoutEffect,useState}from\"react\";export const SECTION_BREAKPOINT_ATTR=\"data-bunq-section-breakpoint\";function parseBreakpoint(value){if(value===\"desktop\"||value===\"tablet\"||value===\"phone\"){return value;}return undefined;}/** Synchronous read for layout decisions on the same commit the ref is attached. */export function readInheritedSectionBreakpoint(element){if(!element)return undefined;const host=element.closest(`[${SECTION_BREAKPOINT_ATTR}]`);if(!(host instanceof HTMLElement))return undefined;return parseBreakpoint(host.getAttribute(SECTION_BREAKPOINT_ATTR));}/**\n * Reads the parent section breakpoint from {@link SECTION_BREAKPOINT_ATTR} on an\n * ancestor host. Used by CMS collection item cards when Framer overrides the\n * component breakpoint control with the item template value.\n *\n * Parent sections set the attr in their own `useLayoutEffect`, which runs after\n * child effects. When the host is missing on first pass, retry on a microtask so\n * we still attach before paint.\n */export function useInheritedSectionBreakpoint(ref){const[inheritedBreakpoint,setInheritedBreakpoint]=useState();useLayoutEffect(()=>{const element=ref.current;if(!element)return undefined;let observer;let cancelled=false;const syncBreakpoint=()=>{setInheritedBreakpoint(readInheritedSectionBreakpoint(element));};const tryAttach=()=>{const host=element.closest(`[${SECTION_BREAKPOINT_ATTR}]`);if(!(host instanceof HTMLElement))return false;syncBreakpoint();observer?.disconnect();observer=new MutationObserver(syncBreakpoint);observer.observe(host,{attributes:true,attributeFilter:[SECTION_BREAKPOINT_ATTR]});return true;};if(!tryAttach()){// Section host attr is often written in a parent layout effect (after this one).\nqueueMicrotask(()=>{if(!cancelled)tryAttach();});}return()=>{cancelled=true;observer?.disconnect();};},[ref]);return inheritedBreakpoint;}\nexport const __FramerMetadata__ = {\"exports\":{\"useInheritedSectionBreakpoint\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"SECTION_BREAKPOINT_ATTR\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"readInheritedSectionBreakpoint\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./useInheritedSectionBreakpoint.map","/**\n * Filters App Store / Google Play review quotes before they render on bunq.com.\n *\n * English CMS source text is curated, but localized overrides (for example from\n * Lokalise) can surface spam, profanity, or incoherent store reviews. These\n * checks are defense in depth for every CardTestimonial instance site-wide.\n */const BLOCKED_QUOTE_PATTERNS=[/\\*{3,}/,/\\bHIV\\s+KOMMT\\b/i,/\\bBEOBACHTET\\s+FACEBOOK!?/i,/\\bABSOLUT\\s+0\\s+STERNE\\b/i,/\\bVORMUNDSCHAFT\\b.*\\b0\\s+STERNE\\b/i,/@BUNQ,,KREDIT/i,/\\bID\\.AUSWEI[Sẞ]/i,/\\bEINSCKENUNG\\b/i,/\\bEINBINDETT\\.KUNFT\\b/i];/** Known bad localized review blobs that must never render again. */const BLOCKED_QUOTE_SNIPPETS=[\"TJA ABER DIE HABEN VORMUNDSCHAFT\",\"ICH ERWARTE DADURCH NACH EINSCKENUNG DES ID.AUSWEI\"];function uppercaseLetterRatio(text){const letters=text.replace(/[^a-zA-ZäöüÄÖÜß]/g,\"\");if(letters.length===0){return 0;}const uppercaseCount=letters.match(/[A-ZÄÖÜ]/g)?.length??0;return uppercaseCount/letters.length;}/**\n * Returns false when a review quote should not be shown on the public site.\n */export function isDisplayableReviewQuote(quote){const normalized=quote?.trim();if(!normalized){return false;}for(const pattern of BLOCKED_QUOTE_PATTERNS){if(pattern.test(normalized)){return false;}}const upper=normalized.toUpperCase();for(const snippet of BLOCKED_QUOTE_SNIPPETS){if(upper.includes(snippet)){return false;}}// Long all-caps rants are almost never legitimate marketing testimonials.\nif(normalized.length>=60&&uppercaseLetterRatio(normalized)>=.85){return false;}return true;}/**\n * Hide CMS collection items whose rendered review quote failed moderation.\n */export function hideNonDisplayableTestimonialItems(host){const articles=host.querySelectorAll('article[itemtype=\"https://schema.org/Review\"]');articles.forEach(article=>{const quote=article.querySelector('[itemprop=\"reviewBody\"]')?.textContent?.trim()??\"\";const collectionItem=article.closest(\"[data-framer-name], li, div\")??article.parentElement;const target=collectionItem instanceof HTMLElement?collectionItem:article;if(isDisplayableReviewQuote(quote)){if(target.style.display===\"none\"){target.style.removeProperty(\"display\");}return;}target.style.display=\"none\";});}\nexport const __FramerMetadata__ = {\"exports\":{\"isDisplayableReviewQuote\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"hideNonDisplayableTestimonialItems\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./reviewModeration.map","import{useCallback,useEffect,useLayoutEffect,useRef}from\"react\";import Tokens from\"https://framerusercontent.com/modules/JnflwrfTBO2W3YxUCt5T/s9q9B55pHhXdKNmRFsqk/index.js\";import{SECTION_BREAKPOINT_ATTR}from\"https://framerusercontent.com/modules/3WESqm56YJyrnHigs8iQ/ryOkJe9B6WzUlPjNFT7l/useInheritedSectionBreakpoint.js\";import{getTestimonialCarouselBackgroundVariant,TESTIMONIAL_CMS_BG_VARIANT_ATTR}from\"https://framerusercontent.com/modules/zb4EfFSvYfha8rCUQ5UG/7H3HsgZhDkedudRdgxYf/testimonialCarouselBackgrounds.js\";import{hideNonDisplayableTestimonialItems}from\"https://framerusercontent.com/modules/yViEmUCqysmi1x1XmBkR/OGaaEPWkjTaun1JOmr41/reviewModeration.js\";import{isFramerEditorEnvironment}from\"https://framerusercontent.com/modules/utSMfW8SFuWGMAtLH63t/rzEVd249dg0O5Oz98Jk8/useInViewport.js\";const TESTIMONIAL_COLUMN_ATTR=\"data-bunq-testimonial-column\";const TESTIMONIAL_CLONE_ATTR=\"data-bunq-testimonial-clone\";/**\n * CMS card field layers. Used to avoid treating content cards (with Read more)\n * as Collection List pagination / Load more controls.\n */const CMS_COLLECTION_FIELD_LAYER_SELECTOR=['[data-framer-name=\"Title\"]','[data-framer-name=\"Description\"]','[data-framer-name=\"Category\"]','[data-framer-name=\"Year\"]',\"[data-collection-category]\",\"article\"].join(\", \");const LOAD_MORE_LABEL_PATTERN=/load more|show more|meer laden|afficher plus|cargar más|carica di più/i;const SPINNER_OR_LOADING_LABEL_PATTERN=/^(loading|loading\\.\\.\\.|spinner)$/i;/**\n * Default styles for Framer Collection List pagination / Load more siblings.\n * On bunq.com/documents the control is a `data-framer-name=\"Button Load More\"`\n * wrapper. Item stretch styles made that wrapper full-width `display:block`,\n * which left-aligned the pill; center it and add space above.\n */export const CMS_COLLECTION_PAGINATION_STYLES={justifyContent:\"center\",alignItems:\"center\",// Shrink-wrap. `width: 100%` fills the spanned row and leaves the pill on\n// the start edge (bunq.com/business/features/deals). Do not set\n// `display:flex` here: that unhides Framer's exhausted Load more.\nwidth:\"auto\",maxWidth:\"100%\",flex:\"0 0 auto\",alignSelf:\"center\",boxSizing:\"border-box\",// Extra space above the control on top of the list gap.\nmarginTop:Tokens.getSpacing(24),// Sit on their own row. Otherwise a 3-column CMS grid places Load more /\n// Spinner as extra cards (one circle under each column).\ngridColumn:\"1 / -1\",justifySelf:\"center\"};/**\n * Styles when the Load more control is the button element itself (not a wrapper).\n * Keep intrinsic width and center with align-self instead of stretching the pill.\n */const CMS_COLLECTION_PAGINATION_BUTTON_STYLES={alignSelf:\"center\",flex:\"0 0 auto\",width:\"auto\",maxWidth:\"100%\",boxSizing:\"border-box\",marginTop:Tokens.getSpacing(24),gridColumn:\"1 / -1\",justifySelf:\"center\"};/** Infinite-scroll Spinner / Loading placeholders. Keep a 1px sentinel for Framer IO; do not paint as cards. */const CMS_COLLECTION_INFINITE_SCROLL_SENTINEL_STYLES={...CMS_COLLECTION_PAGINATION_STYLES,width:\"100%\",height:\"1px\",minHeight:0,overflow:\"hidden\",opacity:0,marginTop:0,pointerEvents:\"none\"};/** Marker on a Collection List host so SSR CSS can grid the nested item wrapper. */export const CMS_COLLECTION_GRID_ATTR=\"data-bunq-cms-grid\";/** `data-bunq-cms-grid` value for {@link SectionGridCards} CMS collections. */export const SECTION_GRID_CARDS_CMS_GRID_ID=\"section-grid-cards\";/**\n * Critical CSS so a Framer Collection List is a grid in server HTML and on the\n * design canvas, not a 400px flex column that jumps when\n * {@link useCmsCollectionLayout} hydrates.\n *\n * The host stays a single full-width block. Putting the 3-column grid on the\n * host shrinks a slotted Collection List into the first column (~400px).\n * Stretch `host > *` so Framer's default 400px slot fills the section, then\n * `:has(> :nth-child(2))` grids the wrapper whose children are the cards,\n * matching {@link getCollectionGridRoot}.\n */export function buildCmsCollectionGridCriticalCss(gridId,columns,gap){const host=`[${CMS_COLLECTION_GRID_ATTR}=\"${gridId}\"]`;const slotRules=[\"width:100% !important\",\"max-width:100% !important\",\"min-width:100% !important\",\"flex:1 1 100% !important\",\"align-self:stretch !important\",\"box-sizing:border-box !important\"].join(\";\");const gridRules=[\"display:grid !important\",`grid-template-columns:${columns} !important`,`gap:${gap} !important`,\"width:100% !important\",\"max-width:100% !important\",\"min-width:100% !important\",\"box-sizing:border-box !important\"].join(\";\");const slot=`${host} > :not(style):not(script):not(link):not(template)`;const pagination=[`${host} [data-framer-name*=\"Load More\" i]`,`${host} [data-framer-name*=\"Load more\" i]`,`${host} [data-framer-name*=\"Pagination\" i]`].join(\",\");const spinner=`${host} [data-framer-name*=\"Spinner\" i],${host} [data-framer-name=\"Loading\"]`;return[cmsChromeHideCss(host),`${host}{display:block;width:100%;min-width:0}`,`${slot}{${slotRules}}`,`${slot}:has(> :nth-child(2)),${slot} > *:has(> :nth-child(2)){${gridRules}}`,`${pagination}{grid-column:1/-1!important;width:auto!important;max-width:100%!important;justify-self:center!important}`,`${spinner}{grid-column:1/-1!important;width:100%!important;justify-self:center!important}`,`${spinner}{height:1px!important;min-height:0!important;overflow:hidden!important;opacity:0!important;margin:0!important;pointer-events:none!important}`].join(\"\");}/**\n * Critical CSS so a slotted Collection List wraps as chips, not a left-hand\n * column. Do not set `width:100%` on `host > *` unless that node is also\n * `display:flex;flex-wrap:wrap`. A block-level 100% slot keeps Framer's\n * vertical stack and pins items to the start edge.\n */export function buildCmsCollectionFlexWrapCriticalCss(hostSelector,maxWidth,gap){const slotRules=[\"width:100% !important\",\"max-width:100% !important\",\"min-width:100% !important\",\"flex:1 1 100% !important\",\"align-self:stretch !important\",\"box-sizing:border-box !important\"].join(\";\");const wrapRules=[\"display:flex !important\",\"flex-direction:row !important\",\"flex-wrap:wrap !important\",\"justify-content:center !important\",\"align-items:center !important\",`gap:${gap} !important`,\"width:100% !important\",\"max-width:100% !important\",\"height:auto !important\",\"box-sizing:border-box !important\"].join(\";\");const itemRules=[\"width:auto !important\",\"max-width:100% !important\",\"flex:0 0 auto !important\",\"align-self:center !important\",\"box-sizing:border-box !important\"].join(\";\");// The slot is usually one child (the Collection List). Leave that node as\n// a full-width block. Wrap the list itself even when it has a single chip:\n// `:nth-child(2)` would skip one-tag article pages and leave that chip left-aligned.\nconst slot=`${hostSelector} > :not(style):not(script):not(link):not(template)`;const wrapTargets=[`${slot}:has(> :nth-child(2))`,`${slot} > *:has(> *)`,`${slot} > * > *:has(> *)`].join(\",\");return[cmsChromeHideCss(hostSelector),`${hostSelector}{display:block;width:100%;max-width:${maxWidth};margin-left:auto;margin-right:auto;box-sizing:border-box}`,`${slot}{${slotRules}}`,`${wrapTargets}{${wrapRules}}`,`${wrapTargets} > *{${itemRules}}`].join(\"\");}/** Marker on a Collection List host whose repeated items are full-width rows. */export const CMS_COLLECTION_ROWS_ATTR=\"data-bunq-cms-rows\";/** `data-bunq-cms-rows` value for {@link SectionSearchResults} result rows. */export const SECTION_SEARCH_RESULTS_CMS_ROWS_ID=\"section-search-results\";/**\n * Critical CSS for a Collection List rendered as a stack of full-width rows.\n *\n * Framer wraps every code-component instance in a `framer-…-container` div and\n * sizes it from the instance on the canvas. A row placed as \"Fit\" gives that\n * wrapper a shrink-to-fit width, so the row is only as wide as its longest line\n * and a long one runs past the section. Rows in a full-width list always fill\n * their cell, so stretch the wrappers regardless of how the list was authored.\n */export function buildCmsCollectionRowsCriticalCss(rowsId){const host=`[${CMS_COLLECTION_ROWS_ATTR}=\"${rowsId}\"]`;const stretch=[\"width:100% !important\",\"max-width:100% !important\",\"min-width:0 !important\",\"box-sizing:border-box\"].join(\";\");const slot=`${host} > :not(style):not(script):not(link):not(template)`;return[cmsChromeHideCss(host),`${slot},${slot} > *{${stretch}}`,`${host} div[class*=\"-container\"]{${stretch};flex:1 0 auto !important}`].join(\"\");}function isTestimonialColumnWrapper(element){return element instanceof HTMLElement&&element.hasAttribute(TESTIMONIAL_COLUMN_ATTR);}/**\n * Tags a section may render next to a Collection List (critical CSS, and the\n * occasional script/link). Never treat them as list roots or repeated items.\n * Applying `display:flex !important` to a `<style>` makes the CSS source visible.\n */const CMS_LAYOUT_CHROME_TAGS=new Set([\"STYLE\",\"SCRIPT\",\"LINK\",\"TEMPLATE\"]);export function isCmsLayoutChromeElement(element){return CMS_LAYOUT_CHROME_TAGS.has(element.tagName);}function layoutElementChildren(parent){return Array.from(parent.children).filter(child=>child instanceof HTMLElement&&!isCmsLayoutChromeElement(child)&&!isTestimonialColumnWrapper(child));}/** Keep injected `<style>` tags out of flex/grid `> *` rules so they stay `display:none`. */function cmsChromeHideCss(hostSelector){return`${hostSelector} > style,${hostSelector} > script,${hostSelector} > link,${hostSelector} > template{display:none!important}`;}/**\n * True for Framer Collection List Load more / CollectionPagination / infinite-scroll\n * Spinner controls that sit as siblings of repeated CMS items.\n */export function isCmsCollectionPaginationControl(element){if(isTestimonialColumnWrapper(element)){return false;}const framerName=element.getAttribute(\"data-framer-name\")?.toLowerCase()??\"\";const layerName=element.getAttribute(\"name\")?.toLowerCase()??\"\";// Live documents page: data-framer-name=\"Button Load More\"\n// Help Center infinite-scroll: data-framer-name=\"Spinner\" / \"Load More\"\nif(framerName.includes(\"pagination\")||framerName.includes(\"load more\")||framerName.includes(\"loadmore\")||framerName.includes(\"spinner\")||framerName===\"loading\"||framerName.includes(\"loading\")||layerName.includes(\"pagination\")||layerName.includes(\"load more\")||layerName.includes(\"loadmore\")||layerName.includes(\"spinner\")||layerName===\"loading\"){return true;}const ariaLabel=element.getAttribute(\"aria-label\")?.toLowerCase()??\"\";if(ariaLabel.includes(\"pagination\")||ariaLabel.includes(\"loading\")||ariaLabel.includes(\"spinner\")){return true;}if(element.getAttribute(\"aria-busy\")===\"true\"&&!element.querySelector(CMS_COLLECTION_FIELD_LAYER_SELECTOR)){return true;}if(element.tagName===\"NAV\"&&element.querySelector('[aria-current=\"page\"]')){return true;}// Cards often include a \"Read more\" button; never treat those as pagination.\nif(element.querySelector(CMS_COLLECTION_FIELD_LAYER_SELECTOR)){return false;}const controls=(element.matches(\"button, a, [role='button']\")?[element]:Array.from(element.querySelectorAll(\"button, a, [role='button']\"))).filter(node=>node instanceof HTMLElement);if(controls.length===1){const label=(controls[0].textContent??\"\").trim();if(label.length>0&&LOAD_MORE_LABEL_PATTERN.test(label)){return true;}}// Numbered pagination without a nav/aria-label wrapper.\nif(controls.length>=2){const hasPageNumber=controls.some(control=>/^\\d+$/.test((control.textContent??\"\").trim()));if(hasPageNumber){return true;}}// Framer sometimes renders Load more / Loading… as a non-button stack layer.\nif(controls.length===0){const text=(element.textContent??\"\").trim();if(text.length>0&&text.length<48){if(LOAD_MORE_LABEL_PATTERN.test(text)||SPINNER_OR_LOADING_LABEL_PATTERN.test(text)){return true;}}}return false;}function isCmsCollectionInfiniteScrollSpinner(element){const framerName=element.getAttribute(\"data-framer-name\")?.toLowerCase()??\"\";const layerName=element.getAttribute(\"name\")?.toLowerCase()??\"\";const ariaLabel=element.getAttribute(\"aria-label\")?.toLowerCase()??\"\";return framerName.includes(\"spinner\")||framerName===\"loading\"||layerName.includes(\"spinner\")||ariaLabel.includes(\"loading\")||ariaLabel.includes(\"spinner\");}function isCmsCollectionLoadMoreExhausted(element){if(element.getAttribute(\"aria-disabled\")===\"true\"||element.hasAttribute(\"disabled\")){return true;}const button=element.matches(\"button\")?element:element.querySelector(\"button\");return Boolean(button&&(button.getAttribute(\"aria-disabled\")===\"true\"||button.hasAttribute(\"disabled\")));}function getCmsCollectionPaginationStyles(element){if(isCmsCollectionInfiniteScrollSpinner(element)){return CMS_COLLECTION_INFINITE_SCROLL_SENTINEL_STYLES;}if(isCmsCollectionLoadMoreExhausted(element)){return{display:\"none\"};}if(element.matches(\"button\")){return CMS_COLLECTION_PAGINATION_BUTTON_STYLES;}return CMS_COLLECTION_PAGINATION_STYLES;}function getLooseCollectionItems(root){const direct=layoutElementChildren(root);// Framer often wraps all CMS items in one flex-column container; unwrap so we can\n// split even/odd items into left/right columns instead of treating the wrapper as one item.\nif(direct.length===1){const wrapper=direct[0];const nested=layoutElementChildren(wrapper);if(nested.length>1){return nested;}}return direct;}function cssPropertyName(property){return property.replace(/[A-Z]/g,letter=>`-${letter.toLowerCase()}`);}function applyInlineStyles(element,styles,important=false){Object.entries(styles).forEach(([property,value])=>{if(value==null)return;if(important){element.style.setProperty(cssPropertyName(property),String(value),\"important\");return;}element.style[property]=String(value);});}/** Unwrap `display: contents` hosts so CMS list roots receive layout styles. */export function getCollectionRoots(host){return Array.from(host.children).flatMap(child=>{if(!(child instanceof HTMLElement)||isCmsLayoutChromeElement(child))return[];if(child.style.display===\"contents\"&&child.childElementCount>0){return Array.from(child.children).filter(nested=>nested instanceof HTMLElement&&!isCmsLayoutChromeElement(nested));}return[child];});}/**\n * Framer often nests all CMS items inside one flex-column wrapper. Grid layout must\n * target the element whose direct children are the repeated items, not an outer shell.\n */export function getCollectionGridRoot(root){const directChildren=layoutElementChildren(root);if(directChildren.length===1){const wrapper=directChildren[0];const nestedChildren=layoutElementChildren(wrapper);if(nestedChildren.length>1){return wrapper;}}return root;}/**\n * Grid roots that hold repeated CMS items (unwraps display:contents and nested shells).\n */export function getCmsCollectionLayoutRoots(host){const roots=getCollectionRoots(host);const candidates=roots.length>0?roots:[host];const layoutRoots=candidates.map(root=>getCollectionGridRoot(root));return[...new Set(layoutRoots)];}/**\n * Repeated CMS item elements under a collection list host.\n * Excludes Collection List pagination / Load more siblings.\n */export function getCmsCollectionItemElements(host){return getCmsCollectionLayoutRoots(host).flatMap(gridRoot=>Array.from(gridRoot.children).filter(child=>child instanceof HTMLElement&&!isCmsLayoutChromeElement(child)&&!isTestimonialColumnWrapper(child)&&!isCmsCollectionPaginationControl(child)));}function applyTestimonialBackgroundVariant(element,visualIndex){const variant=getTestimonialCarouselBackgroundVariant(visualIndex);element.setAttribute(TESTIMONIAL_CMS_BG_VARIANT_ATTR,variant);element.querySelectorAll(\"article\").forEach(article=>{article.setAttribute(TESTIMONIAL_CMS_BG_VARIANT_ATTR,variant);});}/**\n * Rewrites `root.id` and every descendant id that uses `${oldId}` or\n * `${oldId}-…`. Used when CMS carousel clones duplicate a card's full id tree.\n */export function remapElementIdTree(root,oldId,newId){if(!oldId||!newId||oldId===newId)return;const rewrite=element=>{if(!element.id)return;if(element.id===oldId){element.id=newId;return;}if(element.id.startsWith(`${oldId}-`)){element.id=`${newId}${element.id.slice(oldId.length)}`;}};rewrite(root);root.querySelectorAll(\"[id]\").forEach(rewrite);}/**\n * CMS list templates and carousel clones often reuse the same card id tree.\n * Remap colliding article roots and every nested tracking id (surface, stars, …).\n */export function dedupeTestimonialArticleIds(host){const articles=[...host.querySelectorAll(\"article[id]\")];const seen=new Set;articles.forEach((article,index)=>{const current=article.id;const isFramerInternalId=/^[A-Za-z][A-Za-z0-9]{7,11}$/.test(current)&&!current.includes(\"-\");if(!current||seen.has(current)||isFramerInternalId){const nextId=`cms-testimonial-card-${index+1}`;if(!current){article.id=nextId;}else{remapElementIdTree(article,current,nextId);}seen.add(nextId);return;}seen.add(current);});}function removeTestimonialClones(root){root.querySelectorAll(`[${TESTIMONIAL_CLONE_ATTR}]`).forEach(clone=>clone.remove());}function getOriginalColumnItems(column){return Array.from(column.children).filter(child=>child instanceof HTMLElement&&!child.hasAttribute(TESTIMONIAL_CLONE_ATTR));}function fillTestimonialColumn(column,minimumItems,visualIndexOffset,itemStyles){const originals=getOriginalColumnItems(column);originals.forEach((item,index)=>applyTestimonialBackgroundVariant(item,visualIndexOffset+index));if(minimumItems<=originals.length||originals.length===0)return;for(let index=originals.length;index<minimumItems;index+=1){const clone=originals[index%originals.length].cloneNode(true);clone.setAttribute(TESTIMONIAL_CLONE_ATTR,\"true\");applyInlineStyles(clone,itemStyles);applyTestimonialBackgroundVariant(clone,visualIndexOffset+index);column.appendChild(clone);}}/**\n * Apply Collection List grid/list styles to a mounted host.\n * Safe to call from the Framer design canvas (static renderer skips effects).\n */export function applyCmsCollectionLayoutToHost(host,collectionRootStyles,collectionItemStyles={},sectionBreakpoint,scrollRootRef){if(sectionBreakpoint&&host.getAttribute(SECTION_BREAKPOINT_ATTR)!==sectionBreakpoint){host.setAttribute(SECTION_BREAKPOINT_ATTR,sectionBreakpoint);}let firstScrollRoot=null;getCollectionRoots(host).forEach(root=>{const gridRoot=getCollectionGridRoot(root);// Framer slots Collection Lists at 400px. Stretch the slot to the host\n// so a 3-column grid can actually fit on the design canvas.\napplyInlineStyles(root,{width:\"100%\",maxWidth:\"100%\",minWidth:\"100%\",boxSizing:\"border-box\"},true);if(gridRoot!==root){applyInlineStyles(root,{display:\"block\"},true);// Pagination sometimes sits as a sibling of the items wrapper.\nArray.from(root.children).forEach(child=>{if(!(child instanceof HTMLElement)||child===gridRoot||isCmsLayoutChromeElement(child))return;if(isCmsCollectionPaginationControl(child)){applyInlineStyles(child,getCmsCollectionPaginationStyles(child),true);}});}applyInlineStyles(gridRoot,collectionRootStyles,true);Array.from(gridRoot.children).forEach(item=>{if(!(item instanceof HTMLElement)||isTestimonialColumnWrapper(item)||isCmsLayoutChromeElement(item)){return;}if(isCmsCollectionPaginationControl(item)){applyInlineStyles(item,getCmsCollectionPaginationStyles(item),true);return;}applyInlineStyles(item,collectionItemStyles);});if(!firstScrollRoot){firstScrollRoot=gridRoot;}});if(scrollRootRef){scrollRootRef.current=firstScrollRoot;}if(!isFramerEditorEnvironment()){hideNonDisplayableTestimonialItems(host);}}/**\n * Styles Framer's generated Collection List wrapper so CMS items can inherit\n * the same layout rules as manually rendered items inside code components.\n *\n * Framer's design canvas skips `useLayoutEffect`. A microtask plus observer\n * still apply after the host ref attaches so canvas matches preview.\n */export function useCmsCollectionLayout(hostRef,enabled,collectionRootStyles,collectionItemStyles={},sectionBreakpoint,scrollRootRef){const canvasObserverRef=useRef(null);const applyStyles=useCallback(()=>{const host=hostRef.current;if(!host)return;applyCmsCollectionLayoutToHost(host,collectionRootStyles,collectionItemStyles,sectionBreakpoint,scrollRootRef);},[hostRef,collectionRootStyles,collectionItemStyles,sectionBreakpoint,scrollRootRef]);// Static canvas renderer never runs layout effects. Apply after commit when\n// the host ref is populated, and keep watching for late Collection List items.\nif(enabled&&typeof window!==\"undefined\"){queueMicrotask(()=>{applyStyles();const host=hostRef.current;if(!host||canvasObserverRef.current||typeof MutationObserver===\"undefined\")return;const observer=new MutationObserver(applyStyles);observer.observe(host,{childList:true,subtree:true});canvasObserverRef.current=observer;});}useLayoutEffect(()=>{if(!enabled){canvasObserverRef.current?.disconnect();canvasObserverRef.current=null;if(scrollRootRef){scrollRootRef.current=null;}return undefined;}const host=hostRef.current;if(!host)return undefined;applyStyles();if(typeof MutationObserver===\"undefined\"){return()=>{if(scrollRootRef){scrollRootRef.current=null;}if(sectionBreakpoint){host.removeAttribute(SECTION_BREAKPOINT_ATTR);}};}const observer=new MutationObserver(applyStyles);observer.observe(host,{childList:true,subtree:true});return()=>{observer.disconnect();canvasObserverRef.current?.disconnect();canvasObserverRef.current=null;if(scrollRootRef){scrollRootRef.current=null;}if(sectionBreakpoint){host.removeAttribute(SECTION_BREAKPOINT_ATTR);}};},[hostRef,enabled,applyStyles,sectionBreakpoint,scrollRootRef]);}/**\n * Splits Framer CMS collection items into left/right testimonial columns (even/odd)\n * and optionally applies scroll parallax transforms to each column.\n */export function useCmsTestimonialCarouselColumns(hostRef,enabled,isPhone,trackStyles,columnStyles,itemStyles,phoneListStyles,minimumItemsPerColumn,applyParallax,leftParallaxY,rightParallaxY){/**\n     * Initial layout pass is gated behind two `requestAnimationFrame`s (≈2 frames) inside\n     * a `useEffect` (post-paint) instead of running in `useLayoutEffect`. Framer renders the\n     * underlying `CollectionList` inside a `lazy()` + `<Suspense>` boundary, so the testimonial\n     * cards hydrate **after** the parent has committed and after the parent's layout effects\n     * have run. Mutating the DOM before that deferred Suspense hydration finishes causes\n     * React to see a divergent DOM during the children's hydration pass, surfacing as React\n     * #418 mismatches at every card. Deferring past the next two frames lets Suspense settle\n     * before we splice in the column wrappers and bg-variant attributes; the MutationObserver\n     * below then keeps subsequent layout in sync.\n     */useEffect(()=>{if(!enabled)return undefined;const host=hostRef.current;if(!host)return undefined;let isApplyingLayout=false;const ensureColumn=(root,side)=>{const existing=root.querySelector(`[${TESTIMONIAL_COLUMN_ATTR}=\"${side}\"]`);if(existing){applyInlineStyles(existing,columnStyles);return existing;}const columnEl=document.createElement(\"div\");columnEl.setAttribute(TESTIMONIAL_COLUMN_ATTR,side);applyInlineStyles(columnEl,columnStyles);root.appendChild(columnEl);return columnEl;};const flattenColumns=root=>{root.querySelectorAll(`[${TESTIMONIAL_COLUMN_ATTR}]`).forEach(column=>{while(column.firstChild){root.appendChild(column.firstChild);}column.remove();});};const applyLayout=()=>{if(isApplyingLayout)return;isApplyingLayout=true;try{Array.from(host.children).forEach(collectionRoot=>{const root=collectionRoot;removeTestimonialClones(root);const looseItems=getLooseCollectionItems(root);if(isPhone){flattenColumns(root);applyInlineStyles(root,phoneListStyles);looseItems.forEach((item,index)=>{applyTestimonialBackgroundVariant(item,index);applyInlineStyles(item,itemStyles);});return;}applyInlineStyles(root,trackStyles);const leftColumn=ensureColumn(root,\"left\");const rightColumn=ensureColumn(root,\"right\");looseItems.forEach((item,index)=>{applyInlineStyles(item,itemStyles);const target=index%2===0?leftColumn:rightColumn;if(item.parentElement!==target){target.appendChild(item);}});const leftItems=getOriginalColumnItems(leftColumn);const filledLeftCount=Math.max(minimumItemsPerColumn,leftItems.length);fillTestimonialColumn(leftColumn,minimumItemsPerColumn,0,itemStyles);fillTestimonialColumn(rightColumn,minimumItemsPerColumn,filledLeftCount,itemStyles);Array.from(root.children).forEach(child=>{if(isTestimonialColumnWrapper(child))return;if(child instanceof HTMLElement&&child.childElementCount===0){child.remove();}});});}finally{setTimeout(()=>{isApplyingLayout=false;},0);}dedupeTestimonialArticleIds(host);};// Defer the first applyLayout() pass past two animation frames so React can\n// finish hydrating Framer's lazy/Suspense-wrapped CollectionList children before\n// we mutate the DOM out from under them.\nlet cancelled=false;let rafA=0;let rafB=0;rafA=requestAnimationFrame(()=>{rafB=requestAnimationFrame(()=>{if(!cancelled)applyLayout();});});let observer;if(typeof MutationObserver!==\"undefined\"){observer=new MutationObserver(()=>{if(!isApplyingLayout)applyLayout();});observer.observe(host,{childList:true,subtree:true});}return()=>{cancelled=true;cancelAnimationFrame(rafA);cancelAnimationFrame(rafB);observer?.disconnect();};},[hostRef,enabled,isPhone,trackStyles,columnStyles,itemStyles,phoneListStyles,minimumItemsPerColumn]);useLayoutEffect(()=>{if(!enabled||isPhone||!applyParallax||!leftParallaxY||!rightParallaxY)return undefined;const host=hostRef.current;if(!host)return undefined;const applyTransforms=()=>{host.querySelectorAll(`[${TESTIMONIAL_COLUMN_ATTR}=\"left\"]`).forEach(column=>{column.style.transform=`translateY(${leftParallaxY.get()})`;});host.querySelectorAll(`[${TESTIMONIAL_COLUMN_ATTR}=\"right\"]`).forEach(column=>{column.style.transform=`translateY(${rightParallaxY.get()})`;});};applyTransforms();const unsubscribeLeft=leftParallaxY.on(\"change\",applyTransforms);const unsubscribeRight=rightParallaxY.on(\"change\",applyTransforms);return()=>{unsubscribeLeft();unsubscribeRight();};},[hostRef,enabled,isPhone,applyParallax,leftParallaxY,rightParallaxY]);}\nexport const __FramerMetadata__ = {\"exports\":{\"SECTION_SEARCH_RESULTS_CMS_ROWS_ID\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"remapElementIdTree\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CMS_COLLECTION_ROWS_ATTR\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"buildCmsCollectionFlexWrapCriticalCss\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useCmsCollectionLayout\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useCmsTestimonialCarouselColumns\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getCollectionRoots\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getCollectionGridRoot\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CMS_COLLECTION_GRID_ATTR\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CMS_COLLECTION_PAGINATION_STYLES\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"SECTION_GRID_CARDS_CMS_GRID_ID\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"isCmsCollectionPaginationControl\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"buildCmsCollectionRowsCriticalCss\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getCmsCollectionLayoutRoots\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"applyCmsCollectionLayoutToHost\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getCmsCollectionItemElements\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"isCmsLayoutChromeElement\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"buildCmsCollectionGridCriticalCss\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"dedupeTestimonialArticleIds\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./cmsCollectionLayout.map","import*as React from\"react\";/**\n * Walks Framer CMS slot content and injects the parent section breakpoint into\n * nested code components so collection-list cards match the section canvas control.\n *\n * When `sectionContext` is provided, also injects `theme`, `themeTricount`, and\n * `brand` so CMS cards follow the section's theme axis (section control is authoritative).\n */export function injectBreakpointIntoCmsSlot(node,breakpoint,sectionContext){if(Array.isArray(node)){return node.map(child=>injectBreakpointIntoCmsSlot(child,breakpoint,sectionContext));}if(!/*#__PURE__*/React.isValidElement(node)){return node;}const nextChildren=node.props.children!=null?injectBreakpointIntoCmsSlot(node.props.children,breakpoint,sectionContext):node.props.children;const isCustomComponent=typeof node.type!==\"string\"&&node.type!==React.Fragment;const hasResponsiveBreakpoint=Object.prototype.hasOwnProperty.call(node.props,\"breakpoint\");const nextProps={};if(isCustomComponent){// canvasBreakpoint is not a Framer control — CMS item templates cannot override it.\nnextProps.canvasBreakpoint=breakpoint;}if(hasResponsiveBreakpoint||isCustomComponent){nextProps.breakpoint=breakpoint;}if(sectionContext&&isCustomComponent){if(sectionContext.theme!==undefined){nextProps.theme=sectionContext.theme;nextProps.themeTricount=sectionContext.theme;}if(sectionContext.brand!==undefined){nextProps.brand=sectionContext.brand;}}if(nextChildren!==node.props.children){nextProps.children=nextChildren;}if(Object.keys(nextProps).length===0){return node;}return /*#__PURE__*/React.cloneElement(node,nextProps);}\nexport const __FramerMetadata__ = {\"exports\":{\"injectBreakpointIntoCmsSlot\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"SectionCmsInjectionContext\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./injectBreakpointIntoCmsSlot.map","/**\n * Shared timing constants used by interactive components.\n *\n * Centralising these defaults keeps the perceived responsiveness of search,\n * filter, and live-poll patterns consistent across the design system. Pass\n * them as `defaultValue` for property controls or as the seed value for\n * component-local debounce/polling logic.\n *//**\n * Default debounce delay (ms) for search and filter inputs. Chosen to feel\n * instant to the user while coalescing rapid keystrokes into a single\n * filtering pass.\n */export const DEFAULT_DEBOUNCE_MS=150;/**\n * Default poll interval (ms) for components that re-evaluate state on a\n * timer (e.g. CMS-backed lists rechecking for new content while open).\n */export const DEFAULT_POLL_INTERVAL_MS=1e3;\nexport const __FramerMetadata__ = {\"exports\":{\"DEFAULT_DEBOUNCE_MS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"DEFAULT_POLL_INTERVAL_MS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./timing.map","/**\n * Shared URL + event sync for help-centre search.\n *\n * `ModalSearch` (the field) and `SectionSearchResults` (the full-page list) are\n * sibling Framer components. They cannot share React state, so the active query\n * is coordinated through:\n *   1. the URL search param (shareable, reloadable, back/forward via history)\n *   2. a window CustomEvent (live updates; `history.replaceState` does not fire\n *      `popstate`)\n *\n * Framer renders every breakpoint variant at once, so several field instances\n * may exist in the DOM. Only the instance that last drove a local edit should\n * write the URL; every instance (and the results section) listens for sync.\n */import{isDevelopment}from\"https://framerusercontent.com/modules/llQ8rGhCICS7CbBpBDaR/g29iyzjgrzt0JpjEqshK/env.js\";/** Window event name for live search-query updates across Framer instances. */export const SEARCH_QUERY_CHANGE_EVENT=\"bunq:search-query-change\";/** Normalize pathnames so `/search` and `/search/` compare equal. */export function normalizeSearchPathname(path){const withLeading=path.startsWith(\"/\")?path:`/${path}`;const trimmed=withLeading.replace(/\\/+$/,\"\");return trimmed.length>0?trimmed:\"/\";}/** Read a search query param from the current location. SSR-safe. */export function readSearchQueryParam(param){if(typeof window===\"undefined\")return\"\";try{return new URLSearchParams(window.location.search).get(param)?.trim()??\"\";}catch(error){if(isDevelopment()){console.error(\"searchQuerySync: failed to read search query from URL\",error);}return\"\";}}/**\n * Prefill the field from `?q=` only on the dedicated results page.\n * Article and topic pages must not inherit a leftover query.\n */export function readSeededSearchQuery(param,searchResultsPath){if(!isOnSearchResultsPath(searchResultsPath))return\"\";return readSearchQueryParam(param);}/**\n * Drop `?q=` when the reader is not on the results page, so the keyword does\n * not follow them through every article they open.\n */export function stripSearchQueryParamOffResultsPage(param,searchResultsPath){if(isOnSearchResultsPath(searchResultsPath))return;if(!readSearchQueryParam(param))return;replaceSearchQueryParam(param,\"\");}/** True when the browser is already on the dedicated search results page. */export function isOnSearchResultsPath(searchResultsPath){if(typeof window===\"undefined\")return false;try{return normalizeSearchPathname(window.location.pathname)===normalizeSearchPathname(searchResultsPath);}catch(error){if(isDevelopment()){console.error(\"searchQuerySync: failed to compare pathname to search results path\",error);}return false;}}/**\n * Replace the URL search param without creating a history entry, then notify\n * listeners. Empty query removes the param so `/search` is the empty state.\n */export function replaceSearchQueryParam(param,query){if(typeof window===\"undefined\")return;const trimmed=query.trim();try{const url=new URL(window.location.href);if(trimmed){url.searchParams.set(param,trimmed);}else{url.searchParams.delete(param);}const next=`${url.pathname}${url.search}${url.hash}`;const current=`${window.location.pathname}${window.location.search}${window.location.hash}`;if(next!==current){window.history.replaceState(window.history.state,\"\",next);}}catch(error){if(isDevelopment()){console.error(\"searchQuerySync: failed to replace search query in URL\",error);}}dispatchSearchQueryChange(param,trimmed);}/** Notify sibling search UI that the active query changed. */export function dispatchSearchQueryChange(param,query){if(typeof window===\"undefined\")return;const detail={param,query:query.trim()};window.dispatchEvent(new CustomEvent(SEARCH_QUERY_CHANGE_EVENT,{detail}));}/** Subscribe to live search-query changes. Returns an unsubscribe function. */export function subscribeSearchQueryChange(handler){if(typeof window===\"undefined\")return()=>undefined;const listener=event=>{const custom=event;const detail=custom.detail;if(!detail||typeof detail.param!==\"string\"||typeof detail.query!==\"string\"){return;}handler(detail);};window.addEventListener(SEARCH_QUERY_CHANGE_EVENT,listener);return()=>window.removeEventListener(SEARCH_QUERY_CHANGE_EVENT,listener);}\nexport const __FramerMetadata__ = {\"exports\":{\"replaceSearchQueryParam\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"stripSearchQueryParamOffResultsPage\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"SearchQueryChangeDetail\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"SEARCH_QUERY_CHANGE_EVENT\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"normalizeSearchPathname\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"readSearchQueryParam\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"subscribeSearchQueryChange\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"dispatchSearchQueryChange\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"readSeededSearchQuery\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"isOnSearchResultsPath\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","/**\n * ModalSearch - Help / CMS search field with filtered collection results.\n *\n * Default `presentation=\"inline\"`: type in the bar and see a dropdown of CMS\n * results underneath (Revolut/N26 style). Optional `presentation=\"modal\"` keeps\n * the older trigger → portaled dialog path for canvas previews and legacy use.\n * Connect a Framer CMS Collection List to the collectionList slot – the search\n * filters those items live by text content.\n *\n * @framerDisableUnlink\n * @framerIntrinsicWidth 280\n * @framerIntrinsicHeight 48\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight auto\n */// 1. React and React types\nimport{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{forwardRef,useRef,useState,useEffect,useLayoutEffect,useCallback,useId,useMemo,startTransition}from\"react\";import{createPortal}from\"react-dom\";// 3. Framer API\nimport{addPropertyControls,ControlType,RenderTarget,useIsStaticRenderer}from\"framer\";// 4. Design system utilities\nimport Tokens,{useReducedMotion,useEffectiveBreakpoint}from\"https://framerusercontent.com/modules/JnflwrfTBO2W3YxUCt5T/s9q9B55pHhXdKNmRFsqk/index.js\";import{getGap}from\"https://framerusercontent.com/modules/LQuuOAryIVnwswuGx8Ex/FuV5wmJNbd4rfUFpPQsp/layoutStyles.js\";import{getInputContainerStyle,getInputElementStyle,getInputPlaceholderColor,getPlaceholderCSS}from\"https://framerusercontent.com/modules/8bYsP9WP0FSjOW4yE6SU/WRscaGusfhNR05POTEfP/inputStyles.js\";// 5. Hooks\nimport{useModal}from\"https://framerusercontent.com/modules/w9au2mLWaooURZgTwDza/6IhRn8scVGMeNm2ZxAoR/useModal.js\";import{useInteractiveStates}from\"https://framerusercontent.com/modules/Oyd67FvSjdl6uCVEyAij/z0s6QvQLAVmOIBsYHE49/useInteractiveStates.js\";// 6. Local utilities\nimport{getIcon}from\"https://framerusercontent.com/modules/OuAHgtW29YOxApe6lCN1/aLin5QE1reSwcDexLNvn/icons.js\";import{iconPixelSizeForSquareSide}from\"https://framerusercontent.com/modules/Ajjw0fi7RIb9ZhcKml39/F5wZq9cpDqNzdkFBwiSj/svg.js\";import{getModalBackdropColor,getModalContainerStyle,getModalThemeColors,getResponsiveModalWidths}from\"https://framerusercontent.com/modules/XsnVuU913anGEMMeDQoB/azeQkJf3Egxjg1m3B84q/modalConstants.js\";import{ModalOverlayAnimatePresence}from\"https://framerusercontent.com/modules/gnPzazAoBpiJ3sn3T5EM/VWL6bA43rWyK27oqaFy2/ModalOverlayAnimatePresence.js\";import{createModalVariants}from\"https://framerusercontent.com/modules/4txbpRwhPsY7unmUb1pS/EJ5K0M8gILbKZCABqm7q/motionVariants.js\";import{ButtonCloseWithRef}from\"https://framerusercontent.com/modules/K5WXeTRnlTrVIxulnLAb/0z05TrMj7AtHgmiZrUTn/ButtonClose.js\";import{DEFAULT_DEBOUNCE_MS as DEFAULT_DEBOUNCE_DELAY}from\"https://framerusercontent.com/modules/FH2wN6RYgVf0K5AZfGoS/e5HC5dOIxyqZy0kVwBmb/timing.js\";import{injectBreakpointIntoCmsSlot}from\"https://framerusercontent.com/modules/qSAi9VileQLI8aez6prv/12wNRBVAQrRH1gW1krUK/injectBreakpointIntoCmsSlot.js\";import{applySearchFilter,clearSearchFilter,getFilterableItems,MIN_SEARCH_QUERY_LENGTH}from\"https://framerusercontent.com/modules/RwYqM9peexHuGWb1RjgA/BuosGXQzWOB3GDMqXwHi/collectionSearchFilter.js\";import{loadHelpSearchIndex,slugsMatchingQuery}from\"https://framerusercontent.com/modules/BNc22V5OleFxwlAtFbLs/KcVJMzey401tcG9ihdd7/helpSearchIndex.js\";import{isOnSearchResultsPath,readSearchQueryParam,readSeededSearchQuery,replaceSearchQueryParam,stripSearchQueryParamOffResultsPage,subscribeSearchQueryChange}from\"https://framerusercontent.com/modules/qA3udEKSZSTxpWEKsM49/gCQuOQRm8AbgLy2Yzvqf/searchQuerySync.js\";// 8. Shared modal surface utilities\nimport{MODAL_SURFACE_VARIANT_PROPERTY_CONTROL,ModalSurfaceContent,ModalSurfaceOverlay}from\"https://framerusercontent.com/modules/j1lbN8XHe1XwXCOxVvuu/Pue2WH8yoxJ8zU8Bo1m7/modalSurface.js\";import{getBrandFocusColor,resolveBrand}from\"https://framerusercontent.com/modules/30edN7qiEI1dwQI5mdZ5/dkkDgJrFsyz4msc9Ybeu/themeHelpers.js\";import{brandPropertyControl}from\"https://framerusercontent.com/modules/T2sckviMCmJ4Jmbp9jxp/3qB2GDU7RlL1QG4oYr45/brandControl.js\";import{themePropertyControls,resolveThemeProp}from\"https://framerusercontent.com/modules/lFWBe5qCxlzWknbvQ1Np/lwWuCSxZ9LvCgcPdkfUa/themeControl.js\";import{isDevelopment}from\"https://framerusercontent.com/modules/llQ8rGhCICS7CbBpBDaR/g29iyzjgrzt0JpjEqshK/env.js\";const RESULTS_REFRESH_INTERVAL_MS=1e3;/**\n * Upper bound on rendered result rows. Collections here run to several hundred\n * items; showing every match makes the modal an endless scroller. Matches past\n * the cap stay hidden and the count line tells the user to narrow the query.\n */const DEFAULT_MAX_RESULTS=8;/**\n * ModalSearchInternal - Internal forwardRef component.\n */const ModalSearchInternal=/*#__PURE__*/forwardRef(function ModalSearchInternal(props,_ref){const theme=resolveThemeProp(props);const{id,breakpoint:breakpointProp=\"desktop\",presentation=\"inline\",surface=\"liquid-glass\",brand=\"bunq\",glassVariant,surfaceTriggerTintOverlay,triggerSize=\"default\",triggerPlaceholder=\"Search...\",searchPlaceholder=\"Search...\",noResultsText=\"No results found.\",emptyStateText=\"Type to search help articles\",minQueryText=\"Keep typing to see results\",collectionList,isOpen:controlledIsOpen,showModal,hidden=false,onClose,closeOnBackdropClick=true,closeOnEscape=true,debounceDelay=DEFAULT_DEBOUNCE_DELAY,maxResults=DEFAULT_MAX_RESULTS,showAllResultsLabel=\"Show all search results\",searchResultsPath=\"/search\",searchQueryParam=\"q\",initialQuery,searchIndexUrl=\"\",ariaLabel=\"Search\",style}=props;const isInline=presentation===\"inline\";// The tricount brand always renders a solid surface, so the brand decides\n// the effective surface and the internal `surface` prop only applies to bunq.\nconst effectiveSurface=resolveBrand(brand)===\"tricount\"?\"solid\":surface;const breakpoint=useEffectiveBreakpoint(breakpointProp);const reducedMotion=useReducedMotion();const isStatic=useIsStaticRenderer();const modalMotion=useMemo(()=>createModalVariants(reducedMotion||isStatic,{liquidGlass:effectiveSurface===\"liquid-glass\",// Liquid-glass backdrops fade in via `background-color` alpha\n    // (see the variants factory). Passing the resolved dim color\n    // here keeps the entry animation consistent with the static\n    // style returned by `getModalBackdropStyle`.\n    backdropColor:getModalBackdropColor(theme)}),[reducedMotion,isStatic,effectiveSurface,theme]);const isCanvas=RenderTarget.current()===RenderTarget.canvas;// Portal only after mount. SSR and the first client paint stay in-tree with\n// absolute styles so hydration matches; switching to fixed+body on the same\n// paint as `document` exists left React props at `fixed` while the DOM kept\n// the absolute attribute (panel ended up on `body` at ~100% document height).\nconst[hasMounted,setHasMounted]=useState(false);useLayoutEffect(()=>{setHasMounted(true);},[]);const modalId=useId();// `useId()` returns IDs containing colons (e.g. `:r0:`) which break\n// CSS selectors that target this element by `id` (the colons are\n// parsed as pseudo-class delimiters and the rule silently no-ops).\n// Strip them once so e.g. `#modal-search-input-r0::-webkit-search-cancel-button`\n// actually applies and hides the browser's native search-cancel \"x\".\nconst safeModalId=modalId.replace(/:/g,\"\");const searchInputId=`modal-search-input-${safeModalId}`;const searchFieldId=`modal-search-field-${safeModalId}`;const resultsScrollerId=`modal-search-scroller-${safeModalId}`;// Stable ID used for data-filter-* attributes (matches CollectionSearch convention).\nconst filterId=useRef(`modal-search-${safeModalId}`);// Refs for the results container and the inner search input.\nconst resultsScrollerRef=useRef(null);const resultsContainerRef=useRef(null);const resultsPanelRef=useRef(null);const searchInputRef=useRef(null);const containerRef=useRef(null);const hasCollectionList=Array.isArray(collectionList)?collectionList.filter(Boolean).length>0:Boolean(collectionList);// Eager query from props or (client) URL so shared `/search?q=` links paint results\n// without waiting for a focus/type engagement cycle. Article pages ignore `?q=`\n// so a leftover keyword does not prefill the field or open the dropdown.\nconst seededQueryFromProp=(initialQuery??\"\").trim();const seededQueryFromUrl=isCanvas?\"\":readSeededSearchQuery(searchQueryParam,searchResultsPath);const seededQuery=seededQueryFromProp||seededQueryFromUrl;// Search state.\nconst[searchQuery,setSearchQuery]=useState(seededQuery);const[debouncedQuery,setDebouncedQuery]=useState(seededQuery);const[resultCounts,setResultCounts]=useState({matchCount:0,shownCount:0});/** Last query string for which `filterItems` applied counts (avoids false \"no results\"). */const[appliedFilterQuery,setAppliedFilterQuery]=useState(null);const[scrollEdges,setScrollEdges]=useState({top:false,bottom:false});/** Inline: user dismissed the dropdown (outside click / Escape) until they type again. */const[inlinePanelDismissed,setInlinePanelDismissed]=useState(false);/** Fixed-position box for the portaled inline panel (viewport coords). */const[inlinePanelBox,setInlinePanelBox]=useState(null);/** Seed once from `?q=` (or `initialQuery`) so Enter / Show all round-trip works. */const didSeedFromUrlRef=useRef(Boolean(seededQuery));/**\n     * True while this instance is driving the shared query (user typed/cleared\n     * here). Framer keeps every breakpoint field mounted; only the driver may\n     * write the URL so hidden siblings cannot overwrite the active query.\n     */const isLocalQueryDriverRef=useRef(false);const searchQueryRef=useRef(searchQuery);const debouncedQueryRef=useRef(debouncedQuery);searchQueryRef.current=searchQuery;debouncedQueryRef.current=debouncedQuery;/**\n     * Lazy-mount gate for the CMS collection slot. Holding the React node prop is\n     * cheap; rendering hundreds of Framer collection items into every page HTML is\n     * not. Mount once on first engagement (or immediately when a query is seeded /\n     * canvas authoring needs the slot) and keep it mounted for the session.\n     */const[collectionMounted,setCollectionMounted]=useState(()=>isCanvas||Boolean(seededQuery)||!isInline&&(controlledIsOpen===true||showModal===true));const mountCollection=useCallback(()=>{setCollectionMounted(true);},[]);const[bodyIndex,setBodyIndex]=useState(null);// Trigger interactive states. `isFocused` is already keyboard-only\n// (`:focus-visible`), so a pointer click on the bar never leaves a ring\n// behind once the modal closes and focus is restored.\nconst{isHovered,isFocused,handlers:triggerHandlers}=useInteractiveStates(false);// Controlled open: treat showModal (canvas preview) and controlledIsOpen together.\n// Only fall back to `undefined` (= uncontrolled, internal trigger drives state) when\n// the parent did NOT pass a controlled value at all. If the parent explicitly passes\n// `isOpen={false}` we must keep the hook in controlled mode, otherwise the trigger\n// could re-open a modal the parent intends to keep closed.\n// Inline presentation never drives useModal open state from the trigger.\nconst effectiveControlledIsOpen=isInline?false:controlledIsOpen===undefined&&showModal!==true?undefined:(controlledIsOpen??false)||showModal===true;const{isOpen,open:handleOpen,close:handleClose,modalRef,closeButtonRef,backdropProps}=useModal({isOpen:effectiveControlledIsOpen,onClose,closeOnEscape:isInline?false:closeOnEscape,closeOnBackdropClick:isInline?false:closeOnBackdropClick,// Inline never traps focus or inerts the page behind a dialog.\ninertBackground:isInline?false:undefined});// ── Debounce ──────────────────────────────────────────────────────────────\nuseEffect(()=>{const applyDebounced=()=>setDebouncedQuery(searchQuery);const timer=setTimeout(applyDebounced,debounceDelay);return()=>clearTimeout(timer);},[searchQuery,debounceDelay]);// Prefill from the URL once before paint when SSR skipped the sync read\n// (no `window` on the server). Keeps shared `/search?q=` links honest.\n// Off the results page, drop a leftover `?q=` so it does not follow the reader.\nuseLayoutEffect(()=>{if(didSeedFromUrlRef.current||isCanvas)return;didSeedFromUrlRef.current=true;if(seededQueryFromProp){setCollectionMounted(true);return;}stripSearchQueryParamOffResultsPage(searchQueryParam,searchResultsPath);const fromUrl=readSeededSearchQuery(searchQueryParam,searchResultsPath);if(!fromUrl)return;isLocalQueryDriverRef.current=false;setSearchQuery(fromUrl);setDebouncedQuery(fromUrl);setInlinePanelDismissed(false);setCollectionMounted(true);},[isCanvas,searchQueryParam,searchResultsPath,seededQueryFromProp]);const applyExternalSearchQuery=useCallback(nextQuery=>{isLocalQueryDriverRef.current=false;setSearchQuery(nextQuery);setDebouncedQuery(nextQuery);if(nextQuery.trim().length>0){setCollectionMounted(true);setInlinePanelDismissed(false);}else{setResultCounts({matchCount:0,shownCount:0});setAppliedFilterQuery(null);setInlinePanelDismissed(true);}},[]);// Keep sibling breakpoint instances + this field aligned with URL / live sync.\nuseEffect(()=>{if(isCanvas||typeof window===\"undefined\")return undefined;const syncFromLocation=()=>{stripSearchQueryParamOffResultsPage(searchQueryParam,searchResultsPath);applyExternalSearchQuery(readSeededSearchQuery(searchQueryParam,searchResultsPath));};const unsubscribe=subscribeSearchQueryChange(detail=>{if(detail.param!==searchQueryParam)return;const current=searchQueryRef.current.trim();const currentDebounced=debouncedQueryRef.current.trim();// Ignore echoes of our own publish, and no-ops when already aligned.\nif(detail.query===current&&detail.query===currentDebounced)return;if(isLocalQueryDriverRef.current&&detail.query===current)return;applyExternalSearchQuery(detail.query);});window.addEventListener(\"popstate\",syncFromLocation);return()=>{unsubscribe();window.removeEventListener(\"popstate\",syncFromLocation);};},[applyExternalSearchQuery,isCanvas,searchQueryParam,searchResultsPath]);// On the results page, publish the debounced query so SectionSearchResults\n// and the shareable URL stay in sync without a full navigation.\nuseEffect(()=>{if(isCanvas||!isInline||typeof window===\"undefined\")return;if(!isOnSearchResultsPath(searchResultsPath))return;if(!isLocalQueryDriverRef.current)return;const trimmed=debouncedQuery.trim();if(readSearchQueryParam(searchQueryParam)===trimmed)return;replaceSearchQueryParam(searchQueryParam,trimmed);},[debouncedQuery,isCanvas,isInline,searchQueryParam,searchResultsPath]);// Mount the heavy CMS slot on first genuine engagement; never unmount after.\nuseEffect(()=>{if(!isInline&&isOpen){setCollectionMounted(true);}},[isInline,isOpen]);useEffect(()=>{if(searchQuery.trim().length>0){setCollectionMounted(true);}},[searchQuery]);useEffect(()=>{if(isCanvas||searchQuery.trim().length<MIN_SEARCH_QUERY_LENGTH){return;}let cancelled=false;void loadHelpSearchIndex(searchIndexUrl||undefined).then(index=>{if(!cancelled){setBodyIndex(index);}});return()=>{cancelled=true;};},[isCanvas,searchIndexUrl,searchQuery]);// ── DOM filtering ─────────────────────────────────────────────────────────\nconst filterItems=useCallback(query=>{const container=resultsContainerRef.current;if(!container||isCanvas)return;const items=getFilterableItems(container);// Framer may paint the collection wrapper before item rows arrive.\n// Leave counts untouched so the live region does not announce a\n// false empty state; the MutationObserver retries when children appear.\nif(items.length===0)return;const extraSlugs=bodyIndex?slugsMatchingQuery(bodyIndex,query):undefined;const counts=applySearchFilter(items,query,filterId.current,maxResults,{extraSlugs});startTransition(()=>{setResultCounts(counts);setAppliedFilterQuery(query);});},[bodyIndex,isCanvas,maxResults]);useEffect(()=>{// Modal path only filters while open. Inline filters whenever the\n// collection is mounted so the dropdown can react as the user types.\nif(isCanvas||!hasCollectionList||!collectionMounted)return;if(!isInline&&!isOpen)return;filterItems(debouncedQuery);// Replace the previous 1 s `setInterval` with a `MutationObserver`\n// so we only re-filter when the collection's children actually\n// change (e.g. CMS lazy-loads a page) instead of every second\n// forever — even on idle pages where the collection never grows.\n// We coalesce mutation bursts on the next animation frame.\n//\n// `collectionMounted` is in the dependency list so this effect\n// re-attaches when the results container appears after a deferred mount.\nif(typeof MutationObserver===\"undefined\"){const intervalId=setInterval(()=>filterItems(debouncedQuery),RESULTS_REFRESH_INTERVAL_MS);return()=>clearInterval(intervalId);}let scheduled=0;const scheduleFilter=()=>{if(scheduled)return;scheduled=window.requestAnimationFrame(()=>{scheduled=0;filterItems(debouncedQuery);});};const observer=new MutationObserver(scheduleFilter);const resultsRoot=resultsContainerRef.current;if(resultsRoot){observer.observe(resultsRoot,{childList:true,subtree:true});}return()=>{observer.disconnect();if(scheduled)window.cancelAnimationFrame(scheduled);};// `hasMounted` matters for inline: the panel moves from in-tree absolute\n// positioning into a body portal after mount, which remounts the CMS\n// subtree and would otherwise leave an unfiltered collection on screen\n// when a query was seeded before that switch.\n},[debouncedQuery,filterItems,hasCollectionList,collectionMounted,isCanvas,isOpen,isInline,hasMounted]);// ── Reset on open/close (modal) ───────────────────────────────────────────\nuseEffect(()=>{if(isInline)return;if(isOpen){// Reset search state when modal opens.\nstartTransition(()=>{setSearchQuery(\"\");setDebouncedQuery(\"\");setResultCounts({matchCount:0,shownCount:0});setAppliedFilterQuery(null);});setCollectionMounted(true);}else{// Restore all item visibility when modal closes.\nconst container=resultsContainerRef.current;if(container){clearSearchFilter(getFilterableItems(container),filterId.current);}}},[isOpen,isInline]);// Auto-focus search input when modal opens.\nuseEffect(()=>{if(isInline||!isOpen||!searchInputRef.current)return undefined;const raf=requestAnimationFrame(()=>{searchInputRef.current?.focus();});return()=>cancelAnimationFrame(raf);},[isOpen,isInline]);// ── Search input handler ──────────────────────────────────────────────────\nconst handleSearchChange=useCallback(e=>{const value=e.target.value;isLocalQueryDriverRef.current=true;// Typing is engagement — mount in the same update as the query so the\n// filter effect does not run one frame against a missing container.\nif(value.trim().length>0){setCollectionMounted(true);}startTransition(()=>{setSearchQuery(value);setInlinePanelDismissed(false);});},[]);const handleClearSearch=useCallback(()=>{isLocalQueryDriverRef.current=true;startTransition(()=>{setSearchQuery(\"\");setDebouncedQuery(\"\");setResultCounts({matchCount:0,shownCount:0});setAppliedFilterQuery(null);setInlinePanelDismissed(true);});// Clear must update the results page immediately (debounce is skipped).\nif(!isCanvas&&isInline&&isOnSearchResultsPath(searchResultsPath)){replaceSearchQueryParam(searchQueryParam,\"\");}const container=resultsContainerRef.current;if(container){clearSearchFilter(getFilterableItems(container),filterId.current);}searchInputRef.current?.focus();},[isCanvas,isInline,searchQueryParam,searchResultsPath]);const dismissInlinePanel=useCallback(()=>{setInlinePanelDismissed(true);},[]);// ── Colors ────────────────────────────────────────────────────────────────\nconst themeColors=useMemo(()=>getModalThemeColors(theme,brand),[theme,brand]);const responsiveCollectionList=useMemo(()=>injectBreakpointIntoCmsSlot(collectionList,breakpointProp,{theme,brand:resolveBrand(brand)}),[collectionList,breakpointProp,theme,brand]);// ── Trigger styles ────────────────────────────────────────────────────────\nconst isLargeTrigger=triggerSize===\"large\";const isLiquidGlassTrigger=effectiveSurface===\"liquid-glass\";const triggerSidePx=isLargeTrigger?64:48;const iconSize=iconPixelSizeForSquareSide(triggerSidePx);const iconColor=themeColors.iconSecondary;const searchIconSVG=getIcon(\"search\",iconSize,iconColor,{opticalInset:0});// Match search glyph size; x-circle pairs better with the circular search mark than a bare x.\nconst clearIconSVG=getIcon(\"x-circle\",iconSize,iconColor,{opticalInset:0});const triggerContainerStyle=getInputContainerStyle({breakpoint,theme,brand,disabled:false,isFocused,isHovered,reducedMotion});const triggerRadius=Tokens.getRadius(isLargeTrigger?\"radius-xl\":\"radius-lg\");const triggerRadiusPx=(()=>{const parsed=parseFloat(String(triggerRadius));return Number.isFinite(parsed)?parsed:16;})();const triggerStyle=useMemo(()=>({...triggerContainerStyle,cursor:\"pointer\",userSelect:\"none\",WebkitUserSelect:\"none\",justifyContent:\"flex-start\",gap:Tokens.getSpacing(12),width:\"100%\",minWidth:Tokens.getSpacing(200),// `large` bumps the bar height to 64 px so it visually\n    // balances a hero heading. Keep the default 48 px otherwise.\n    ...isLargeTrigger?{height:Tokens.getSpacing(64),borderRadius:triggerRadius}:{},// Liquid-glass overrides come last so they always win — the\n    // bar becomes a transparent shell that the absolute-fill\n    // `<ModalSurfaceOverlay />` paints behind.\n    ...isLiquidGlassTrigger?{backgroundColor:\"transparent\",position:\"relative\",// Fresh stacking context so the overlay's\n    // `z-index: -1` stays clipped inside the bar.\n    isolation:\"isolate\"}:{},...style}),[triggerContainerStyle,style,isLargeTrigger,isLiquidGlassTrigger,triggerRadius]);const triggerTextStyle=useMemo(()=>({// The trigger was previously asking for `/Body MD/Regular`,\n    // which doesn't exist as a token — `getTypographyStyles`\n    // returned `null` and the placeholder rendered at the\n    // browser default (looked tiny). Use real tokens: `/Body LG/Light`\n    // for the default trigger and `/Body XL/Light` for the larger\n    // hero variant so the text size scales with the bar height.\n    ...Tokens.getTypographyStyles(isLargeTrigger?\"/Body XL/Light\":\"/Body LG/Light\",breakpoint),color:getInputPlaceholderColor(theme,brand),flex:1,textAlign:\"left\",overflow:\"hidden\",whiteSpace:\"nowrap\",textOverflow:\"ellipsis\"}),[theme,brand,breakpoint,isLargeTrigger]);// ── Modal styles ──────────────────────────────────────────────────────────\nconst modalContentStyles=useMemo(()=>{const{maxWidth,minWidth}=getResponsiveModalWidths(breakpoint,{defaultMaxWidth:680,tabletMaxWidth:560,phoneMaxWidth:360});return{...getModalContainerStyle(breakpoint,{maxWidth,minWidth,surface:effectiveSurface,maxHeight:\"80vh\"}),// Override overflow so results scroll independently of the modal chrome.\noverflow:\"hidden\",display:\"flex\",flexDirection:\"column\"};},[breakpoint,effectiveSurface]);// ── Modal search input styles ─────────────────────────────────────────────\nconst modalSearchContainerStyle=useMemo(()=>getInputContainerStyle({breakpoint,theme,brand,isFocused:false,isHovered:false,reducedMotion}),[breakpoint,theme,brand,reducedMotion]);const modalSearchInputStyle=useMemo(()=>getInputElementStyle({breakpoint,theme,brand}),[breakpoint,theme,brand]);const placeholderCSS=getPlaceholderCSS(searchInputId,getInputPlaceholderColor(theme,brand));// Hide the browser's native search-input chrome (the small gray \"×\"\n// cancel button + the related decoration / results-button affordances\n// WebKit adds to `<input type=\"search\">`) so only our custom clear\n// button shows. Targets the input by `id` rather than a class so the\n// rule is scoped to this modal and can't bleed into other inputs on\n// the page.\nconst hideNativeSearchCancelCSS=`\n            #${searchInputId}::-webkit-search-cancel-button,\n            #${searchInputId}::-webkit-search-decoration,\n            #${searchInputId}::-webkit-search-results-button,\n            #${searchInputId}::-webkit-search-results-decoration {\n                -webkit-appearance: none;\n                appearance: none;\n                display: none;\n            }\n        `;// The field is auto-focused on open, so a `:focus-within` ring painted a\n// saturated outline flush against the field every single time the modal\n// appeared. Scope it to keyboard focus and offset it, so it reads as a\n// focus indicator rather than a permanent blue border.\nconst modalSearchFocusCSS=`\n            #${searchFieldId}:has(#${searchInputId}:focus-visible) {\n                outline: ${Tokens.getFocusOutlineWidth()} solid ${getBrandFocusColor(brand)};\n                outline-offset: ${Tokens.getSpacing(2)};\n            }\n        `;// Platforms without overlay scrollbars (Windows, Android, emulated mobile)\n// painted a solid track over the right edge of the result cards. The top and\n// bottom fade already signal more content, so hide the bar and keep the fade\n// as the single affordance.\nconst hideResultsScrollbarCSS=`\n            #${resultsScrollerId} {\n                scrollbar-width: none;\n                -ms-overflow-style: none;\n            }\n            #${resultsScrollerId}::-webkit-scrollbar {\n                width: 0;\n                height: 0;\n                display: none;\n            }\n        `;// ── Results list spacing ──────────────────────────────────────────────────\n// Framer's CMS Collection List wraps items in an extra element we don't\n// control. Imperatively style that wrapper as a flex column with gap so\n// search results render with consistent spacing — without leaking a\n// global `<style>` tag that previously had to use `!important` to win\n// against Framer's inline styles.\nconst resultsGap=useMemo(()=>isInline?\"0px\":getGap(\"sm\",breakpoint),[breakpoint,isInline]);useLayoutEffect(()=>{if(!hasCollectionList||!collectionMounted)return undefined;const container=resultsContainerRef.current;if(!container)return undefined;const applyWrapperStyles=()=>{// Style the element that actually holds the items. Framer nests the\n// collection an unpredictable number of levels deep, so targeting\n// `firstElementChild` styled a pass-through wrapper and the gap\n// never reached the row that lays the cards out.\nconst items=getFilterableItems(container);const wrapper=items[0]?.parentElement??container.firstElementChild;if(!wrapper)return;wrapper.style.display=\"flex\";wrapper.style.flexDirection=\"column\";wrapper.style.gap=resultsGap;};applyWrapperStyles();if(typeof MutationObserver===\"undefined\")return undefined;const observer=new MutationObserver(applyWrapperStyles);observer.observe(container,{childList:true,subtree:true});return()=>observer.disconnect();},[hasCollectionList,collectionMounted,resultsGap,isOpen,isInline,hasMounted]);// ── Scroll affordance ─────────────────────────────────────────────────────\nconst updateScrollEdges=useCallback(()=>{const scroller=resultsScrollerRef.current;if(!scroller)return;const{scrollTop,scrollHeight,clientHeight}=scroller;const maxScroll=scrollHeight-clientHeight;// 1 px tolerance absorbs sub-pixel rounding at fractional zoom levels,\n// which otherwise leaves a fade pinned on at the very end of a scroll.\nconst next={top:scrollTop>1,bottom:maxScroll>1&&scrollTop<maxScroll-1};setScrollEdges(current=>current.top===next.top&&current.bottom===next.bottom?current:next);},[]);// Result state is derived from the debounced query so the status line and\n// the list flip together instead of the message racing ahead of the filter.\nconst activeQuery=debouncedQuery.trim();const isSearching=activeQuery.length>=MIN_SEARCH_QUERY_LENGTH;const isQueryTooShort=activeQuery.length>0&&!isSearching;const{matchCount,shownCount}=resultCounts;const hasMatches=isSearching&&matchCount>0;const showResultsList=hasCollectionList&&hasMatches;// Inline dropdown: open once the user has typed anything (min-length hint,\n// results, or no-results). Canvas `showModal` forces the panel for QA.\n// On the dedicated results page (`searchResultsPath`), suppress the panel so\n// SectionSearchResults owns the full-page list (field still works; Enter updates URL).\nconst inlineWantsPanel=isInline&&!inlinePanelDismissed&&(showModal===true||searchQuery.trim().length>0);const showInlinePanel=Boolean(inlineWantsPanel)&&!isOnSearchResultsPath(searchResultsPath);useEffect(()=>{if(isInline){if(!showInlinePanel)return undefined;}else if(!isOpen){return undefined;}updateScrollEdges();const scroller=resultsScrollerRef.current;if(!scroller||typeof ResizeObserver===\"undefined\")return undefined;const observer=new ResizeObserver(updateScrollEdges);observer.observe(scroller);return()=>observer.disconnect();},[isOpen,isInline,showInlinePanel,updateScrollEdges,resultCounts]);// Outside click dismisses the inline panel (query stays so re-focus can reopen).\n// Include the portaled panel — it lives outside `containerRef` on `document.body`.\nuseEffect(()=>{if(!isInline||!showInlinePanel)return undefined;const onPointerDown=event=>{const target=event.target;if(!(target instanceof Node))return;if(containerRef.current?.contains(target))return;if(resultsPanelRef.current?.contains(target))return;dismissInlinePanel();};document.addEventListener(\"pointerdown\",onPointerDown,true);return()=>document.removeEventListener(\"pointerdown\",onPointerDown,true);},[isInline,showInlinePanel,dismissInlinePanel]);// Pin the portaled panel under the field. Sibling sections use `isolation:\n// isolate`, so an absolutely-positioned panel inside the hero is painted\n// under the next section — fixed + body portal escapes that stack.\n//\n// Scroll must update the DOM only (no setState): React commits lag a frame\n// behind capture-phase scroll and were overwriting the imperative `top`\n// with a stale box, which read as the panel detaching from the field.\nconst inlinePanelBoxRef=useRef(null);const applyInlinePanelBox=useCallback((next,syncReact)=>{inlinePanelBoxRef.current=next;const panel=resultsPanelRef.current;if(panel){panel.style.position=\"fixed\";panel.style.top=`${next.top}px`;panel.style.left=`${next.left}px`;panel.style.width=`${next.width}px`;panel.style.right=\"auto\";// Below sticky navbar (`sticky` = 4); still above page sections\n// because we portal to `document.body` and escape `isolation`.\npanel.style.zIndex=String(Tokens.getZIndex(\"elevated\"));panel.style.visibility=\"visible\";}if(syncReact){setInlinePanelBox(prev=>prev&&prev.top===next.top&&prev.left===next.left&&prev.width===next.width?prev:next);}},[]);const updateInlinePanelBox=useCallback(options=>{const syncReact=options?.syncReact!==false;const field=(searchInputRef.current?.parentElement)??(typeof document!==\"undefined\"?document.getElementById(searchFieldId):null);const panel=resultsPanelRef.current;if(!field)return;const rect=field.getBoundingClientRect();const gap=Number.parseFloat(String(Tokens.getSpacing(8)))||8;// When the field scrolls under the fixed nav, hide the panel instead\n// of letting it paint over the chrome (z-index is below sticky).\nconst navHeight=Number.parseFloat(typeof document!==\"undefined\"?getComputedStyle(document.documentElement).getPropertyValue(\"--nav-header-height\"):\"\")||0;if(rect.bottom<=navHeight+gap){if(panel)panel.style.visibility=\"hidden\";return;}applyInlinePanelBox({top:rect.bottom+gap,left:rect.left,width:rect.width},syncReact);},[applyInlinePanelBox,searchFieldId]);useLayoutEffect(()=>{if(!isInline||isCanvas||!hasMounted)return undefined;updateInlinePanelBox({syncReact:true});if(!showInlinePanel)return undefined;const onResize=()=>updateInlinePanelBox({syncReact:true});// Apply synchronously on scroll — rAF coalescing lagged a frame and the\n// panel visibly detached from the field on fast trackpad scrolls.\nconst onScroll=()=>updateInlinePanelBox({syncReact:false});window.addEventListener(\"resize\",onResize);// Capture scroll from nested Framer page wrappers.\nwindow.addEventListener(\"scroll\",onScroll,{capture:true,passive:true});const visualViewport=window.visualViewport;visualViewport?.addEventListener(\"resize\",onResize);visualViewport?.addEventListener(\"scroll\",onScroll);return()=>{window.removeEventListener(\"resize\",onResize);window.removeEventListener(\"scroll\",onScroll,true);visualViewport?.removeEventListener(\"resize\",onResize);visualViewport?.removeEventListener(\"scroll\",onScroll);};},[isInline,isCanvas,hasMounted,showInlinePanel,updateInlinePanelBox,searchQuery,resultCounts]);const buildSearchResultsHref=useCallback(query=>{const trimmed=query.trim();if(!trimmed)return searchResultsPath;const path=searchResultsPath.startsWith(\"/\")?searchResultsPath:`/${searchResultsPath}`;const params=new URLSearchParams;params.set(searchQueryParam,trimmed);return`${path}?${params.toString()}`;},[searchResultsPath,searchQueryParam]);const navigateToSearchResults=useCallback(query=>{if(typeof window===\"undefined\"||isCanvas)return;const trimmed=query.trim();if(trimmed.length<MIN_SEARCH_QUERY_LENGTH)return;// Already on the results page: flush the shared query without a reload.\nif(isOnSearchResultsPath(searchResultsPath)){isLocalQueryDriverRef.current=true;setDebouncedQuery(query);replaceSearchQueryParam(searchQueryParam,trimmed);setInlinePanelDismissed(false);return;}const href=buildSearchResultsHref(trimmed);// Already on the results page with the same query: keep the panel open.\ntry{const current=new URL(window.location.href);const next=new URL(href,window.location.origin);if(current.pathname===next.pathname&&current.search===next.search){setInlinePanelDismissed(false);return;}}catch(error){if(isDevelopment()){console.error(\"ModalSearch: failed to compare current URL before navigate\",error);}// Fall through to navigation.\n}window.location.assign(href);},[buildSearchResultsHref,isCanvas,searchQueryParam,searchResultsPath]);const handleInlineKeyDown=useCallback(event=>{if(event.key===\"Escape\"){event.preventDefault();if(searchQuery.length>0){handleClearSearch();}else{dismissInlinePanel();searchInputRef.current?.blur();}return;}if(event.key===\"Enter\"){event.preventDefault();navigateToSearchResults(searchQuery);}},[searchQuery,handleClearSearch,dismissInlinePanel,navigateToSearchResults]);// Only announce \"no results\" after the collection is mounted and a filter\n// pass has settled for the active debounced query — never during the gap\n// between mounting 660 CMS nodes and the first DOM walk.\nconst filterSettledForActiveQuery=collectionMounted&&appliedFilterQuery===debouncedQuery;/** Single muted line shown whenever there is nothing to list. */const statusMessage=!hasCollectionList?\"\":isQueryTooShort?minQueryText:!isSearching?isInline?\"\":emptyStateText||\"Type to search help articles\":filterSettledForActiveQuery&&matchCount===0?noResultsText:\"\";/** Count line above the list, doubling as the polite live region. Hidden for\n     *  inline typeahead — the list itself is enough; keep for modal only. */const resultsSummary=isInline||!hasMatches||!filterSettledForActiveQuery?\"\":matchCount>shownCount?`Showing ${shownCount} of ${matchCount} results. Keep typing to narrow them down.`:`${matchCount} ${matchCount===1?\"result\":\"results\"}`;// Fade the scroll edges so a clipped list reads as scrollable rather than\n// cut off. Only applied on the edge that actually has content past it.\nconst fadeSize=Tokens.getSpacing(24);const resultsMask=scrollEdges.top||scrollEdges.bottom?`linear-gradient(to bottom, transparent 0px, black ${scrollEdges.top?fadeSize:\"0px\"}, black calc(100% - ${scrollEdges.bottom?fadeSize:\"0px\"}), transparent 100%)`:undefined;if(hidden)return null;const portalTarget=typeof document!==\"undefined\"?containerRef.current?.ownerDocument?.body??document.body:null;const hasStatusCopy=Boolean(statusMessage||resultsSummary);const resultsStatusStyle={flexShrink:0,...Tokens.getTypographyStyles(\"/Body SM/Light\",breakpoint),color:themeColors.textSecondary,textAlign:statusMessage?\"center\":\"left\",...hasStatusCopy?{paddingBottom:getGap(\"sm\",breakpoint)}:{height:0,overflow:\"hidden\",lineHeight:0}};const resultsScrollerStyle={flex:\"0 1 auto\",overflowY:\"auto\",minHeight:0,paddingLeft:0,paddingRight:0,...resultsMask?{maskImage:resultsMask,WebkitMaskImage:resultsMask}:{}};// Do not SSR/paint the CMS collection until engagement (or a seeded query /\n// canvas). Keeping `{collectionList}` out of the tree is what drops ~2k\n// duplicate heading nodes from every help page HTML payload.\nconst collectionResultsNode=hasCollectionList&&collectionMounted?/*#__PURE__*/_jsx(\"div\",{id:`modal-search-results-${safeModalId}`,ref:resultsContainerRef,style:showResultsList?undefined:{display:\"none\"},children:responsiveCollectionList}):null;const canvasEmptySlot=!hasCollectionList&&isCanvas?/*#__PURE__*/_jsx(\"div\",{style:{padding:`${getGap(\"xl\",breakpoint)} ${getGap(\"lg\",breakpoint)}`,textAlign:\"center\",borderRadius:Tokens.getRadius(\"radius-lg\"),background:themeColors.bgTertiary},children:/*#__PURE__*/_jsxs(\"span\",{style:{...Tokens.getTypographyStyles(\"/Body MD/Light\",breakpoint),color:themeColors.textTertiary},children:[\"Connect a CMS Collection List to the \",/*#__PURE__*/_jsx(\"strong\",{children:\"Collection List\"}),\" slot to enable search results.\"]})}):null;// ── Inline typeahead ──────────────────────────────────────────────────────\nif(isInline){const fieldPlaceholder=searchPlaceholder||triggerPlaceholder;const inlineInputStyle={...getInputElementStyle({breakpoint,theme,brand}),flex:1,width:\"100%\",minWidth:0,paddingLeft:Tokens.getResponsiveSpacing(isLargeTrigger?24:20,breakpoint),paddingRight:0};const trailingIconPad=Tokens.getResponsiveSpacing(isLargeTrigger?20:16,breakpoint);const panelGap=Tokens.getSpacing(8);const panelRadius=Tokens.getRadius(isLargeTrigger?\"radius-xl\":\"radius-lg\");// Published pages portal the panel so sibling `isolation: isolate` sections\n// (e.g. \"Browse by category\") cannot paint over the typeahead. Canvas and\n// pre-mount keep in-tree absolute positioning (hydration-safe + editable).\nconst useFixedPortal=hasMounted&&!isCanvas;const inlinePanelStyle=useFixedPortal?{position:\"fixed\",top:inlinePanelBox?.top??0,left:inlinePanelBox?.left??0,width:inlinePanelBox?.width??\"100%\",// Below sticky navbar; body portal still stacks above page sections.\nzIndex:Tokens.getZIndex(\"elevated\"),display:showInlinePanel?\"flex\":\"none\",flexDirection:\"column\",maxHeight:\"min(60vh, 420px)\",overflow:\"hidden\",borderRadius:panelRadius,backgroundColor:themeColors.bgSecondary,boxShadow:Tokens.getShadow(\"medium\"),paddingTop:0,paddingBottom:0,paddingLeft:0,paddingRight:0}:{position:\"absolute\",left:0,right:0,top:`calc(100% + ${panelGap})`,zIndex:Tokens.getZIndex(\"elevated\"),display:showInlinePanel?\"flex\":\"none\",flexDirection:\"column\",maxHeight:\"min(60vh, 420px)\",overflow:\"hidden\",borderRadius:panelRadius,backgroundColor:themeColors.bgSecondary,boxShadow:Tokens.getShadow(\"medium\"),paddingTop:0,paddingBottom:0,paddingLeft:0,paddingRight:0};const showAllHref=showAllResultsLabel.trim().length>0&&isSearching&&searchQuery.trim().length>=MIN_SEARCH_QUERY_LENGTH?buildSearchResultsHref(searchQuery):null;const showAllDivider=themeColors.borderSecondary;const showAllStyle={display:\"block\",flexShrink:0,padding:`${Tokens.getSpacing(14)} ${Tokens.getSpacing(16)}`,borderTop:`1px solid ${showAllDivider}`,...Tokens.getTypographyStyles(\"/Body MD/Heavy\",breakpoint),color:Tokens.getColorValue(resolveBrand(brand)===\"tricount\"?\"/Text/text-brand-tricount\":\"/Text/text-brand-bunq\"),textDecoration:\"none\",cursor:\"pointer\",backgroundColor:themeColors.bgTertiary,borderLeft:\"none\",borderRight:\"none\",borderBottom:\"none\",width:\"100%\",textAlign:\"left\",boxSizing:\"border-box\"};const inlineResultsPanel=/*#__PURE__*/_jsxs(\"div\",{ref:resultsPanelRef,\"data-bunq-search-dropdown\":\"\",\"aria-hidden\":!showInlinePanel,style:inlinePanelStyle,children:[/*#__PURE__*/_jsx(\"div\",{role:\"status\",\"aria-live\":\"polite\",style:{...resultsStatusStyle,paddingLeft:Tokens.getSpacing(16),paddingRight:Tokens.getSpacing(16)},children:statusMessage||resultsSummary}),/*#__PURE__*/_jsxs(\"div\",{id:resultsScrollerId,ref:resultsScrollerRef,role:\"region\",\"aria-label\":\"Search results\",onScroll:updateScrollEdges,style:resultsScrollerStyle,children:[collectionResultsNode,canvasEmptySlot]}),showAllHref?/*#__PURE__*/_jsx(\"a\",{href:showAllHref,style:showAllStyle,onClick:event=>{// Real link: allow middle-click / cmd-click / open-in-new-tab.\nif(event.metaKey||event.ctrlKey||event.shiftKey||event.altKey||event.button!==0){return;}if(typeof window===\"undefined\")return;try{const current=new URL(window.location.href);const next=new URL(showAllHref,window.location.origin);// Already on this results URL: keep the panel open instead of reloading.\nif(current.pathname===next.pathname&&current.search===next.search){event.preventDefault();setInlinePanelDismissed(false);}}catch(error){if(isDevelopment()){console.error(\"ModalSearch: failed to handle Show all navigation\",error);}}},children:showAllResultsLabel}):null]});return /*#__PURE__*/_jsxs(\"span\",{ref:containerRef,id:id,style:{display:\"inline-block\",width:\"100%\",position:\"relative\",...style},children:[/*#__PURE__*/_jsx(\"style\",{dangerouslySetInnerHTML:{__html:`${getPlaceholderCSS(searchInputId,getInputPlaceholderColor(theme,brand))} ${hideNativeSearchCancelCSS} ${modalSearchFocusCSS} ${hideResultsScrollbarCSS}${showAllHref?` #${resultsScrollerId} [id^=\"modal-search-results-\"] a:last-of-type { border-bottom-color: transparent; }`:\"\"}`}}),/*#__PURE__*/_jsxs(\"div\",{id:searchFieldId,style:{...triggerStyle,cursor:\"text\",userSelect:\"auto\",WebkitUserSelect:\"auto\",position:\"relative\"},onMouseEnter:triggerHandlers.onMouseEnter,onMouseLeave:triggerHandlers.onMouseLeave,children:[/*#__PURE__*/_jsx(ModalSurfaceOverlay,{surface:effectiveSurface,theme:theme,glassVariant:glassVariant,shade:\"light\",tintOverlay:surfaceTriggerTintOverlay,stack:\"nested\",radius:triggerRadiusPx}),/*#__PURE__*/_jsx(\"input\",{ref:searchInputRef,id:searchInputId,type:\"search\",role:\"searchbox\",\"aria-label\":ariaLabel||fieldPlaceholder,value:searchQuery,onChange:handleSearchChange,onKeyDown:handleInlineKeyDown,onFocus:event=>{// Focus gives the browser a head start to mount the CMS\n// collection before the user reaches MIN_SEARCH_QUERY_LENGTH.\nmountCollection();triggerHandlers.onFocus(event);if(searchQuery.trim().length>0)setInlinePanelDismissed(false);},onBlur:triggerHandlers.onBlur,placeholder:fieldPlaceholder,style:inlineInputStyle,autoComplete:\"off\",spellCheck:false}),searchQuery.length>0&&/*#__PURE__*/_jsx(\"button\",{type:\"button\",\"aria-label\":\"Clear search\",onClick:handleClearSearch,style:{flexShrink:0,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",width:Tokens.getSpacing(44),height:Tokens.getSpacing(44),minWidth:Tokens.getSpacing(44),padding:0,border:\"none\",borderRadius:Tokens.getRadius(\"radius-full\"),background:\"transparent\",cursor:\"pointer\",color:themeColors.iconSecondary,transition:Tokens.getTransition(\"filter\",\"quick\")},dangerouslySetInnerHTML:{__html:clearIconSVG}}),/*#__PURE__*/_jsx(\"span\",{style:{display:\"flex\",alignItems:\"center\",flexShrink:0,padding:`${Tokens.getResponsiveSpacing(12,breakpoint)} ${trailingIconPad} ${Tokens.getResponsiveSpacing(12,breakpoint)} 0`},\"aria-hidden\":true,dangerouslySetInnerHTML:{__html:searchIconSVG}})]}),useFixedPortal?/*#__PURE__*/createPortal(inlineResultsPanel,containerRef.current?.ownerDocument?.body??document.body):inlineResultsPanel]});}return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"span\",{ref:containerRef,id:id,style:{display:\"inline-block\",width:\"100%\"},children:/*#__PURE__*/_jsxs(\"div\",{role:\"button\",tabIndex:0,\"aria-label\":ariaLabel,style:triggerStyle,onClick:handleOpen,onKeyDown:e=>{if(e.key===\"Enter\"||e.key===\" \"){e.preventDefault();handleOpen();}},onMouseEnter:triggerHandlers.onMouseEnter,onMouseLeave:triggerHandlers.onMouseLeave,onFocus:triggerHandlers.onFocus,onBlur:triggerHandlers.onBlur,children:[/*#__PURE__*/_jsx(ModalSurfaceOverlay,{surface:effectiveSurface,theme:theme,glassVariant:glassVariant,shade:\"light\",tintOverlay:surfaceTriggerTintOverlay,stack:\"nested\",radius:triggerRadiusPx}),/*#__PURE__*/_jsx(\"span\",{style:{display:\"flex\",alignItems:\"center\",flexShrink:0,padding:`${Tokens.getResponsiveSpacing(12,breakpoint)} 0 ${Tokens.getResponsiveSpacing(12,breakpoint)} ${Tokens.getResponsiveSpacing(isLargeTrigger?24:20,breakpoint)}`},\"aria-hidden\":true,dangerouslySetInnerHTML:{__html:searchIconSVG}}),/*#__PURE__*/_jsx(\"span\",{style:triggerTextStyle,children:triggerPlaceholder})]})}),portalTarget&&/*#__PURE__*/createPortal(/*#__PURE__*/_jsxs(ModalOverlayAnimatePresence,{isOpen:isOpen,keyPrefix:\"modal-search\",motion:modalMotion,breakpoint:breakpoint,theme:theme,surface:effectiveSurface,brand:brand,onBackdropClick:backdropProps.onClick,panelRef:modalRef,panelStyle:modalContentStyles,panelProps:{\"role\":\"dialog\",\"aria-modal\":true,\"aria-label\":\"Search\"},children:[/*#__PURE__*/_jsx(ModalSurfaceOverlay,{surface:effectiveSurface,theme:theme,glassVariant:glassVariant}),/*#__PURE__*/_jsxs(ModalSurfaceContent,{children:[/*#__PURE__*/_jsx(\"style\",{dangerouslySetInnerHTML:{__html:`${placeholderCSS} ${hideNativeSearchCancelCSS} ${modalSearchFocusCSS} ${hideResultsScrollbarCSS}`}}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",gap:getGap(\"xs\",breakpoint),flexShrink:0},children:[/*#__PURE__*/_jsxs(\"div\",{id:searchFieldId,style:{...modalSearchContainerStyle,flex:1,minWidth:0,display:\"flex\",alignItems:\"center\",gap:Tokens.getSpacing(12),justifyContent:\"flex-start\",// Liquid-glass overrides come last so they always\n// win — keep the inner search field visually in\n// sync with the modal's own trigger bar (same\n// tone + tint overlay + radius).\n...isLiquidGlassTrigger?{backgroundColor:\"transparent\",position:\"relative\",// Establish a stacking context so the\n// absolute-fill `<ModalSurfaceOverlay />`\n// (z-index: -1) is clipped to this\n// input row and stays behind the icon,\n// input, and clear button siblings.\nisolation:\"isolate\"}:{}},children:[/*#__PURE__*/_jsx(ModalSurfaceOverlay,{surface:effectiveSurface,theme:theme,glassVariant:glassVariant,shade:\"light\",tintOverlay:surfaceTriggerTintOverlay,stack:\"nested\",radius:triggerRadiusPx}),/*#__PURE__*/_jsx(\"span\",{style:{display:\"flex\",alignItems:\"center\",flexShrink:0,padding:`${Tokens.getResponsiveSpacing(12,breakpoint)} 0 ${Tokens.getResponsiveSpacing(12,breakpoint)} ${Tokens.getResponsiveSpacing(20,breakpoint)}`},\"aria-hidden\":true,dangerouslySetInnerHTML:{__html:searchIconSVG}}),/*#__PURE__*/_jsx(\"input\",{ref:searchInputRef,id:searchInputId,type:\"search\",role:\"searchbox\",\"aria-label\":searchPlaceholder,value:searchQuery,onChange:handleSearchChange,onFocus:mountCollection,placeholder:searchPlaceholder,style:{...modalSearchInputStyle,flex:1,width:\"100%\",paddingLeft:0},autoComplete:\"off\",spellCheck:false}),searchQuery.length>0&&/*#__PURE__*/_jsx(\"button\",{type:\"button\",\"aria-label\":\"Clear search\",onClick:handleClearSearch,style:{flexShrink:0,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",width:Tokens.getSpacing(44),height:Tokens.getSpacing(44),minWidth:Tokens.getSpacing(44),marginRight:Tokens.getResponsiveSpacing(8,breakpoint),padding:0,border:\"none\",borderRadius:Tokens.getRadius(\"radius-full\"),background:\"transparent\",cursor:\"pointer\",color:themeColors.iconSecondary,transition:Tokens.getTransition(\"filter\",\"quick\")},dangerouslySetInnerHTML:{__html:clearIconSVG}})]}),/*#__PURE__*/_jsx(ButtonCloseWithRef,{ref:closeButtonRef,theme:theme,brand:brand,breakpoint:breakpoint,placement:\"inline\",onClick:handleClose,ariaLabel:\"Close search\"})]}),/*#__PURE__*/_jsx(\"div\",{role:\"status\",\"aria-live\":\"polite\",style:resultsStatusStyle,children:statusMessage||resultsSummary}),/*#__PURE__*/_jsxs(\"div\",{id:resultsScrollerId,ref:resultsScrollerRef,onScroll:updateScrollEdges,style:resultsScrollerStyle,children:[collectionResultsNode,canvasEmptySlot]})]})]}),portalTarget)]});});/**\n * ModalSearch - Wrapper component for Framer compatibility.\n */export default function ModalSearch(props){const ref=useRef(null);return /*#__PURE__*/_jsx(ModalSearchInternal,{...props,ref:ref});}// Set display name for Framer.\nModalSearch.displayName=\"Modal Search - Molecule\";// Property Controls configuration for Framer.\naddPropertyControls(ModalSearch,{// ─── 0. Analytics ──\nid:{type:ControlType.String,title:\"ID\",defaultValue:\"modal-search\",placeholder:\"e.g. modal-search-help-center\",description:\"Unique DOM id for the search trigger.\",preventLocalization:true},// ─── 1. Content ──\ntriggerPlaceholder:{type:ControlType.String,title:\"Trigger Placeholder\",defaultValue:\"Search...\",placeholder:\"Enter placeholder text...\",description:\"Placeholder text displayed on the trigger search bar.\"},searchPlaceholder:{type:ControlType.String,title:\"Search Placeholder\",defaultValue:\"Search...\",placeholder:\"Enter search placeholder...\",description:\"Placeholder text for the search input inside the modal.\"},noResultsText:{type:ControlType.String,title:\"No Results Text\",defaultValue:\"No results found.\",placeholder:\"Enter no-results message...\",description:\"Message shown when the search query returns no results.\"},emptyStateText:{type:ControlType.String,title:\"Empty State Text\",defaultValue:\"Type to search help articles\",placeholder:\"Enter empty state hint...\",description:\"Optional message shown before the user has typed anything.\"},minQueryText:{type:ControlType.String,title:\"Min Query Text\",defaultValue:\"Keep typing to see results\",placeholder:\"Enter short-query hint...\",description:`Message shown while the query is shorter than ${MIN_SEARCH_QUERY_LENGTH} characters.`},collectionList:{type:ControlType.ComponentInstance,title:\"Collection List\",description:\"Connect a Framer CMS Collection List here. Items will be filtered by the search query.\"},// ─── 6. Configuration ──\npresentation:{type:ControlType.Enum,title:\"Presentation\",options:[\"inline\",\"modal\"],optionTitles:[\"Inline\",\"Modal\"],displaySegmentedControl:true,defaultValue:\"inline\",description:\"Inline: typeahead dropdown under the field (default). Modal: trigger bar opens a centered dialog.\"},glassVariant:{...MODAL_SURFACE_VARIANT_PROPERTY_CONTROL,hidden:({brand})=>resolveBrand(brand)===\"tricount\"},surfaceTriggerTintOverlay:{type:ControlType.String,title:\"Trigger Tint\",defaultValue:\"\",placeholder:\"e.g. hex with alpha channel or a token path\",description:\"Optional translucent CSS background layered on the trigger bar (and the modal's inner search input). Use to match a sibling element like a pricing-table row.\",hidden:({brand})=>resolveBrand(brand)===\"tricount\"},triggerSize:{type:ControlType.Enum,title:\"Trigger Size\",options:[\"default\",\"large\"],optionTitles:[\"Default\",\"Large\"],displaySegmentedControl:true,defaultValue:\"default\",description:\"Default: 48px bar / 20px icon. Large: 64px bar / 24px icon — search glyph uses a tight viewBox so it fills the pixel size.\"},// ─── 7. Behavior / Events ──\nshowModal:{type:ControlType.Boolean,title:\"Show Results\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\",description:\"Preview open results on the Framer canvas. Inline: forces the dropdown open. Modal: opens the dialog.\"},hidden:{type:ControlType.Boolean,title:\"Hidden\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\",description:\"Hide the component entirely.\"},closeOnBackdropClick:{type:ControlType.Boolean,title:\"Close on Backdrop Click\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\",description:\"Modal only: whether clicking the backdrop closes the dialog.\",hidden:props=>(props.presentation??\"inline\")===\"inline\"},closeOnEscape:{type:ControlType.Boolean,title:\"Close on Escape\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\",description:\"Modal only: whether Escape closes the dialog. Inline always clears/dismisses on Escape.\",hidden:props=>(props.presentation??\"inline\")===\"inline\"},debounceDelay:{type:ControlType.Number,title:\"Debounce Delay\",defaultValue:DEFAULT_DEBOUNCE_DELAY,min:0,max:1e3,step:50,unit:\"ms\",displayStepper:true,description:\"Delay in milliseconds before the search filter is applied.\"},maxResults:{type:ControlType.Number,title:\"Max Results\",defaultValue:DEFAULT_MAX_RESULTS,min:3,max:50,step:1,displayStepper:true,description:\"Most result rows shown at once. Extra matches are reported in the count line instead.\"},showAllResultsLabel:{type:ControlType.String,title:\"Show All Label\",defaultValue:\"Show all search results\",placeholder:\"Show all search results\",description:\"Footer link under the dropdown. Empty hides it. Enter uses the same destination.\",hidden:props=>(props.presentation??\"inline\")===\"modal\"},searchResultsPath:{type:ControlType.String,title:\"Results Path\",defaultValue:\"/search\",placeholder:\"/search\",description:\"Page path for Enter and Show all (query appended as ?q=…).\",preventLocalization:true,hidden:props=>(props.presentation??\"inline\")===\"modal\"},searchQueryParam:{type:ControlType.String,title:\"Query Param\",defaultValue:\"q\",placeholder:\"q\",description:\"URL search param key for the query. Also seeds the field on load.\",preventLocalization:true,hidden:props=>(props.presentation??\"inline\")===\"modal\"},searchIndexUrl:{type:ControlType.String,title:\"Search Index URL\",defaultValue:\"\",placeholder:\"/help-search-index.json\",description:\"Public JSON for body-only matches. Leave empty for same-origin, then static.bunq.com. Not GitLab.\",preventLocalization:true},onClose:{type:ControlType.EventHandler,title:\"On Close\",description:\"Callback fired when the modal closes.\",hidden:props=>(props.presentation??\"inline\")===\"inline\"},// ─── 9. Advanced ──\nariaLabel:{type:ControlType.String,title:\"ARIA Label\",defaultValue:\"Search\",placeholder:\"e.g. Search help\",description:\"Accessible label for the search field (inline) or trigger button (modal).\"},// ─── 10. System ──\nbreakpoint:{type:ControlType.Enum,title:\"Breakpoint\",options:[\"desktop\",\"tablet\",\"phone\"],optionTitles:[\"Desktop\",\"Tablet\",\"Phone\"],displaySegmentedControl:false,defaultValue:\"desktop\",description:\"Select the breakpoint to match Framer's canvas.\"},...themePropertyControls(\"Default is dark mode, inverted is light mode. Theme passes to all children.\"),...brandPropertyControl()});\nexport const __FramerMetadata__ = {\"exports\":{\"ModalSearchPresentation\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"ModalSearchTriggerSize\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"ModalSearch\",\"slots\":[\"collectionList\"],\"annotations\":{\"framerContractVersion\":\"1\"}},\"ModalSearchProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","/**\n * SectionHeaderSearch - Header section with integrated help search.\n *\n * Identical to SectionHeader but includes an inline ModalSearch typeahead below\n * the heading and description. Connect a Framer CMS Collection List to the\n * collectionList slot – the search filters those items live as the user types.\n *\n * @framerDisableUnlink\n * @framerIntrinsicWidth 1280\n * @framerIntrinsicHeight auto\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight auto\n */// 1. React and React types\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{forwardRef,useRef,useMemo,useId,useEffect}from\"react\";// 2. Framer Motion\nimport{motion}from\"framer-motion\";// 3. Framer API\nimport{addPropertyControls,ControlType}from\"framer\";import{themePropertyControls,resolveThemeProp}from\"https://framerusercontent.com/modules/lFWBe5qCxlzWknbvQ1Np/lwWuCSxZ9LvCgcPdkfUa/themeControl.js\";import{FRAMER_THEME_DESCRIPTION_SURFACE_WITH_CHILDREN}from\"https://framerusercontent.com/modules/kgixvU6ZSjEgZfx2dLER/o4VhqtRdwHGnIui8eFET/propertyControlCopy.js\";// 4. Design system utilities\nimport Tokens,{useReducedMotion,useEffectiveBreakpoint,kernHeadingPlainText}from\"https://framerusercontent.com/modules/JnflwrfTBO2W3YxUCt5T/s9q9B55pHhXdKNmRFsqk/index.js\";import{getThemeColors,resolveBrand}from\"https://framerusercontent.com/modules/30edN7qiEI1dwQI5mdZ5/dkkDgJrFsyz4msc9Ybeu/themeHelpers.js\";import{getSectionStyles,getContainerStyles,getCopyStackGap,getCopyToCtaMarginTop,getSectionWrapperStyles,getSectionPaddingY}from\"https://framerusercontent.com/modules/LQuuOAryIVnwswuGx8Ex/FuV5wmJNbd4rfUFpPQsp/layoutStyles.js\";import{SECTION_GRADIENT_PRESET_DEFAULT}from\"https://framerusercontent.com/modules/JT38eNLF3NCcfcMPZQnl/jy0BrDtaXKuTglv0GSp9/sectionGradientPresets.js\";import{getSectionBackgroundFromProps,getSectionContentStackStyle,getSectionRootBackgroundStyle,sectionBackgroundPropertyControls}from\"https://framerusercontent.com/modules/jZFHLdiOT2heZl3JSdXg/smOpTasnK7657nqfIFG7/sectionBackground.js\";import{getSectionRestProps}from\"https://framerusercontent.com/modules/DTXTjpsqu0cSSSvQLUkb/vGJLzdDZYpya3DBEk5P8/sectionProps.js\";import{PRESERVE_CONTROL_NEWLINES}from\"https://framerusercontent.com/modules/7usa64yv6f2tRQTyL0ZP/5mFzfiHMhnd6JaTAckCv/controlTextStyles.js\";import{useSectionAnimation}from\"https://framerusercontent.com/modules/T0hsVXlJCFwqijvkTPxe/6cugWjYEX2IpaY1Botqg/useSectionAnimation.js\";import{createSectionVariants}from\"https://framerusercontent.com/modules/4txbpRwhPsY7unmUb1pS/EJ5K0M8gILbKZCABqm7q/motionVariants.js\";// 5. Molecule components\nimport ModalSearch from\"https://framerusercontent.com/modules/je6vWcfdbReeqag8iNpl/J4zYjvgg9PzUtYooXzIb/ModalSearch.js\";// ============================================\n// COMPONENT\n// ============================================\n/**\n * SectionHeaderSearchInternal - Internal forwardRef component.\n */const SectionHeaderSearchInternal=/*#__PURE__*/forwardRef(function SectionHeaderSearchInternal(props,ref){const theme=resolveThemeProp(props);const{breakpoint:breakpointProp=\"desktop\",heading=\"Short section heading goes here\",description=\"One or two sentences describing this section. Replace with your own copy so the layout and length are clear.\",sectionId,showBottomPadding=true,backgroundVariant=\"gradient\",backgroundPreset=SECTION_GRADIENT_PRESET_DEFAULT,brand,backgroundEnabled,backgroundGradientBrand,backgroundPresetTricount,backgroundOverlayDirection=\"top-color-bottom-neutral\",backgroundShowOverlay=true,useMontserrat=false,searchTriggerPlaceholder=\"Search...\",searchInputPlaceholder=\"Search...\",searchNoResultsText=\"No results found.\",searchEmptyStateText=\"\",searchMinQueryText,searchMaxResults,searchShowAllLabel,searchResultsPath,searchQueryParam,collectionList,searchAriaLabel=\"Search help\",collectionSchemaEnabled,collectionSchema,collectionSchemaName,schemaName,collectionSchemaDescription,schemaDescription,collectionSchemaSlug,schemaSlug,collectionSchemaPathPrefix,schemaPathPrefix,style,children,...rest}=props;useCollectionPageSchema({enabled:collectionSchemaEnabled===true||collectionSchema===true||collectionSchema===\"true\",name:collectionSchemaName||schemaName,description:collectionSchemaDescription||schemaDescription,slug:collectionSchemaSlug||schemaSlug,pathPrefix:collectionSchemaPathPrefix||schemaPathPrefix||\"/topics\"});// ========================================\n// HOOKS\n// ========================================\nconst breakpoint=useEffectiveBreakpoint(breakpointProp);const resolvedBrand=resolveBrand(brand??backgroundGradientBrand);const isTricount=resolvedBrand===\"tricount\";const colors=getThemeColors(theme,resolvedBrand);const{sectionBgColor,isGradient,backgroundLayer}=getSectionBackgroundFromProps({theme,backgroundVariant,backgroundPreset,brand,backgroundEnabled,backgroundGradientBrand,backgroundPresetTricount,backgroundOverlayDirection,backgroundShowOverlay,colors});const reducedMotion=useReducedMotion();const componentId=useId();const headingId=useId();const{sectionRef,animate}=useSectionAnimation(ref);// ========================================\n// STYLES\n// ========================================\n// The search field's focus ring is an outline drawn with an offset, so it paints\n// outside the field's box. Default section wrappers set overflow-x: hidden, which\n// also clips the vertical axis, so a tight paddingBottom: 0 would cut the ring\n// off at the section edge. Keep just enough room for the ring instead.\nconst focusRingInset=`calc(${Tokens.getSpacing(2)} + ${Tokens.getFocusOutlineWidth()})`;const sectionStyles=useMemo(()=>({...getSectionRootBackgroundStyle({useMontserrat,brand:brand??backgroundGradientBrand}),...getSectionStyles(breakpoint),backgroundColor:sectionBgColor,overflow:\"visible\",...style,paddingTop:`calc(${getSectionPaddingY(breakpoint)} + var(--nav-header-height, 80px))`,...showBottomPadding?{}:{paddingBottom:focusRingInset}}),[breakpoint,sectionBgColor,style,useMontserrat,brand,backgroundGradientBrand,showBottomPadding,focusRingInset]);const containerStyles=useMemo(()=>({...getContainerStyles(breakpoint),...getSectionContentStackStyle(isGradient)}),[breakpoint,isGradient]);const copyStackGap=getCopyStackGap(breakpoint);const copyToCtaMarginTop=getCopyToCtaMarginTop(breakpoint);const contentStyles={display:\"flex\",flexDirection:\"column\",alignItems:\"center\",gap:0};const innerHeaderStyles={display:\"flex\",flexDirection:\"column\",gap:copyStackGap,textAlign:\"center\",alignItems:\"center\"};const headingStyles={...Tokens.getTypographyStyles(\"/Headline 3XL/Heavy\",breakpoint),color:colors.textPrimary,margin:0,textAlign:\"center\",...PRESERVE_CONTROL_NEWLINES};const descriptionStyles={...Tokens.getTypographyStyles(\"/Subheadline/MD\",breakpoint),color:colors.textPrimary,margin:0,textAlign:\"center\",maxWidth:Tokens.getWidthValue(\"width-lg\"),...PRESERVE_CONTROL_NEWLINES};const searchWrapperStyles={width:\"100%\",maxWidth:Tokens.getWidthValue(\"width-sm\"),boxSizing:\"border-box\",overflow:\"visible\",padding:focusRingInset,...heading||description?{marginTop:copyToCtaMarginTop}:{}};// ========================================\n// ANIMATION VARIANTS\n// ========================================\nconst{container:containerVariants,item:itemVariants}=createSectionVariants(reducedMotion,{stagger:Tokens.getStagger(\"loose\")});// ========================================\n// RENDER\n// ========================================\nreturn /*#__PURE__*/_jsxs(motion.section,{ref:sectionRef,style:sectionStyles,id:sectionId||`section-header-search-${componentId}`,\"aria-labelledby\":heading?headingId:undefined,initial:animate===\"visible\"?false:\"hidden\",animate:animate,variants:containerVariants,...getSectionRestProps(rest),children:[backgroundLayer,/*#__PURE__*/_jsx(\"div\",{style:containerStyles,children:/*#__PURE__*/_jsxs(\"div\",{style:contentStyles,children:[Boolean(heading??description)&&/*#__PURE__*/_jsxs(motion.div,{style:innerHeaderStyles,variants:itemVariants,children:[heading&&/*#__PURE__*/_jsx(\"h1\",{id:headingId,style:headingStyles,children:kernHeadingPlainText(heading)}),description&&/*#__PURE__*/_jsx(\"p\",{style:descriptionStyles,children:description})]}),/*#__PURE__*/_jsx(motion.div,{style:searchWrapperStyles,variants:itemVariants,children:/*#__PURE__*/_jsx(ModalSearch,{breakpoint:breakpoint,theme:theme,brand:resolvedBrand,presentation:\"inline\",surface:isTricount?\"solid\":\"liquid-glass\",triggerSize:\"large\",triggerPlaceholder:searchTriggerPlaceholder,searchPlaceholder:searchInputPlaceholder||searchTriggerPlaceholder,noResultsText:searchNoResultsText,emptyStateText:searchEmptyStateText,minQueryText:searchMinQueryText,maxResults:searchMaxResults,showAllResultsLabel:searchShowAllLabel,searchResultsPath:searchResultsPath,searchQueryParam:searchQueryParam,collectionList:collectionList,ariaLabel:searchAriaLabel})}),children]})})]});});/**\n * SectionHeaderSearch - Wrapper component for Framer compatibility.\n */function useCollectionPageSchema(opts){useEffect(()=>{if(!opts.enabled||!opts.name||!opts.slug)return undefined;const base=(opts.baseUrl||(typeof location!==\"undefined\"?location.origin:\"\")).replace(/\\/$/,\"\");const prefix=opts.pathPrefix||\"/topics\";const url=`${base}${prefix}/${opts.slug}`;const data={\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"CollectionPage\",\"name\":opts.name,\"description\":opts.description||undefined,url},{\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Help\",\"item\":{\"@id\":`${base}/`,\"name\":\"Help\"}},{\"@type\":\"ListItem\",\"position\":2,\"name\":opts.name,\"item\":{\"@id\":url,\"name\":opts.name}}]}]};const id=\"cc-collection-page-jsonld\";let el=document.getElementById(id);if(!el){el=document.createElement(\"script\");el.type=\"application/ld+json\";el.id=id;document.body.appendChild(el);}el.text=JSON.stringify(data);return()=>{el?.parentNode?.removeChild(el);};},[opts.enabled,opts.name,opts.description,opts.slug,opts.pathPrefix,opts.baseUrl]);}export default function SectionHeaderSearch(props){const ref=useRef(null);const breakpoint=useEffectiveBreakpoint(props.breakpoint??\"desktop\");// Overflow visible so the search field's offset focus ring is not clipped.\n// Default getSectionWrapperStyles uses overflow-x: hidden, which also clips Y.\nreturn /*#__PURE__*/_jsx(\"div\",{style:{...getSectionWrapperStyles(breakpoint),overflow:\"visible\",...props.style},children:/*#__PURE__*/_jsx(SectionHeaderSearchInternal,{...props,ref:ref})});}// Set display name for Framer.\nSectionHeaderSearch.displayName=\"Section Header Search - Organism\";// ============================================\n// PROPERTY CONTROLS\n// ============================================\naddPropertyControls(SectionHeaderSearch,{// ─── 1. Content ────────────────────────────────────────────────────────────\nheading:{type:ControlType.String,title:\"Headline\",defaultValue:\"Short section heading goes here\",placeholder:\"e.g. Short headline (one line)\",description:\"Main heading text for the section.\",displayTextArea:true},description:{type:ControlType.String,title:\"Subheadline\",defaultValue:\"One or two sentences describing this section. Replace with your own copy so the layout and length are clear.\",placeholder:\"One or two sentences describing the section\",description:\"Description or body text.\",displayTextArea:true},showBottomPadding:{type:ControlType.Boolean,title:\"Bottom Padding\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\",description:\"Turn off to remove the section's bottom vertical padding when stacking tightly against the section below. A few pixels stay so the search field's focus ring is not clipped.\"},searchTriggerPlaceholder:{type:ControlType.String,title:\"Trigger Placeholder\",defaultValue:\"Search...\",placeholder:\"Enter placeholder text...\",description:\"Placeholder text displayed on the search trigger bar.\"},searchInputPlaceholder:{type:ControlType.String,title:\"Search Placeholder\",defaultValue:\"Search...\",placeholder:\"Enter search placeholder...\",description:\"Placeholder text for the search input inside the modal.\"},searchNoResultsText:{type:ControlType.String,title:\"No Results Text\",defaultValue:\"No results found.\",placeholder:\"Enter no-results message...\",description:\"Message shown when the search query returns no results.\"},searchEmptyStateText:{type:ControlType.String,title:\"Empty State Text\",defaultValue:\"\",placeholder:\"Enter empty state hint...\",description:\"Optional message shown before the user has typed anything.\",displayTextArea:true},searchMinQueryText:{type:ControlType.String,title:\"Min Query Text\",defaultValue:\"Keep typing to see results\",placeholder:\"Enter short-query hint...\",description:\"Message shown while the query is still too short to search on.\"},searchMaxResults:{type:ControlType.Number,title:\"Max Results\",defaultValue:8,min:3,max:50,step:1,displayStepper:true,description:\"Most result rows shown at once. Extra matches are reported in the count line instead.\"},searchShowAllLabel:{type:ControlType.String,title:\"Show All Label\",defaultValue:\"Show all search results\",placeholder:\"Show all search results\",description:\"Footer link under the dropdown. Empty hides it.\"},searchResultsPath:{type:ControlType.String,title:\"Results Path\",defaultValue:\"/search\",placeholder:\"/search\",description:\"Page path for Enter and Show all (appends ?q=…).\",preventLocalization:true},searchQueryParam:{type:ControlType.String,title:\"Query Param\",defaultValue:\"q\",placeholder:\"q\",description:\"URL param for the query. Also prefills the field on load.\",preventLocalization:true},searchAriaLabel:{type:ControlType.String,title:\"Search Aria Label\",defaultValue:\"Search help\",placeholder:\"e.g. Search help\",description:\"Accessible label for the search field.\"},// ─── 6. Configuration ──────────────────────────────────────────────────────\ncollectionList:{type:ControlType.ComponentInstance,title:\"Collection List\",description:\"Connect a Framer CMS Collection List here. Items will be filtered by the search query.\"},...sectionBackgroundPropertyControls({variantDefault:\"gradient\",presetDefault:SECTION_GRADIENT_PRESET_DEFAULT,overlayDirectionDefault:\"top-color-bottom-neutral\"}),// ─── 9. Advanced ───────────────────────────────────────────────────────────\nsectionId:{type:ControlType.String,title:\"Section ID\",defaultValue:\"section-header-search\",placeholder:\"e.g. search\",description:\"HTML id for the section element. Used for anchor links and page navigation.\",preventLocalization:true},// ─── 10. System ────────────────────────────────────────────────────────────\nbreakpoint:{type:ControlType.Enum,title:\"Breakpoint\",options:[\"desktop\",\"tablet\",\"phone\"],optionTitles:[\"Desktop\",\"Tablet\",\"Phone\"],displaySegmentedControl:false,defaultValue:\"desktop\",description:\"Select the breakpoint to match Framer's canvas.\"},collectionSchemaEnabled:{type:ControlType.Boolean,title:\"Collection Schema\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\",description:\"Inject CollectionPage + BreadcrumbList JSON-LD (topic/category pages).\"},collectionSchemaName:{type:ControlType.String,title:\"Schema Name\",defaultValue:\"\",hidden:p=>!p.collectionSchemaEnabled},collectionSchemaDescription:{type:ControlType.String,title:\"Schema Description\",defaultValue:\"\",hidden:p=>!p.collectionSchemaEnabled},collectionSchemaSlug:{type:ControlType.String,title:\"Schema Slug\",defaultValue:\"\",hidden:p=>!p.collectionSchemaEnabled},collectionSchemaPathPrefix:{type:ControlType.String,title:\"Schema Path Prefix\",defaultValue:\"/topics\",hidden:p=>!p.collectionSchemaEnabled},...themePropertyControls(FRAMER_THEME_DESCRIPTION_SURFACE_WITH_CHILDREN)});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"SectionHeaderSearch\",\"slots\":[\"collectionList\"],\"annotations\":{\"framerContractVersion\":\"1\"}},\"Breakpoint\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"SectionHeaderSearchProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"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"}