@redsift/products 12.5.1 → 12.5.2-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_internal/ChartSankey.js +1 -1
- package/_internal/SignalCardSpfDomain.js +14 -2
- package/_internal/SignalCardSpfDomain.js.map +1 -1
- package/_internal/bimi-checker.js +1 -1
- package/_internal/signal-cards.js +33 -5
- package/_internal/signal-cards.js.map +1 -1
- package/index.d.ts +3 -1
- package/index.js +1 -1
- package/package.json +6 -6
- package/signal-cards.d.ts +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignalCardSpfDomain.js","sources":["../../src/components/signal-cards/cards/signal-card-styles.ts","../../src/components/signal-cards/hooks/useSignalCardTheme.tsx","../../src/components/signal-cards/hooks/withSignalCardTheme.tsx","../../../../node_modules/@redsift/signal-logic/dist/chunk-JN5BEW4U.js","../../src/components/signal-cards/intl/index.ts","../../src/components/signal-cards/hooks/useSignalCardFormatter.ts","../../src/components/signal-cards/utils/logger.ts","../../src/components/signal-cards/utils/resolveTranslation.ts","../../src/components/signal-cards/hooks/useSignalCardTranslation.ts","../../src/components/signal-cards/hooks/useCollapseController.ts","../../src/components/signal-cards/cards/SignalCardNormal/styles.tsx","../../src/components/signal-cards/cards/SignalCard/components/CardDescriptionStyles.tsx","../../src/components/signal-cards/cards/components/SignalCardButton.tsx","../../src/components/signal-cards/cards/SignalCardNormal/ExpandableDescription.tsx","../../src/components/signal-cards/cards/SignalCard/components/SignalCardSection.tsx","../../src/components/signal-cards/cards/SignalCard/components/InfoItemElements.tsx","../../src/components/signal-cards/cards/SignalCard/components/SignalCardInfoBox.tsx","../../src/components/signal-cards/components/ui/GlossaryTag/GlossaryTag.tsx","../../src/components/signal-cards/styles/styles.ts","../../src/components/signal-cards/components/glossary/glossary.tsx","../../src/components/signal-cards/utils/parse-glossary-markdown.tsx","../../src/components/signal-cards/cards/SignalCard/components/extraction-box.constants.ts","../../src/components/signal-cards/cards/SignalCard/components/InfoSectionStyles.tsx","../../src/components/signal-cards/components/ui/Checklist/Checklist.tsx","../../src/components/signal-cards/cards/SignalCardNormal/ChecklistRenderer.tsx","../../src/components/signal-cards/components/ui/CheckBox.tsx","../../src/components/signal-cards/utils/format-content.tsx","../../src/components/signal-cards/cards/SignalCardDmarc/DmarcPromoBanner.tsx","../../src/components/signal-cards/cards/SignalCardNormal/SignalCardNormal.tsx","../../src/components/signal-cards/hooks/useOnClickOutside.ts","../../src/components/signal-cards/components/ui/Portal/Portal.tsx","../../src/components/signal-cards/components/ui/Tooltip/Tooltip.tsx","../../src/components/signal-cards/components/ui/TooltipInPortal/TooltipInPortal.tsx","../../src/components/signal-cards/cards/SignalCardNormal/SignalCardExtractedItems.tsx","../../src/components/signal-cards/components/ui/WordHighlighter/WordHighlighter.tsx","../../src/components/signal-cards/components/charts/LazyChartSankey.tsx","../../src/components/signal-cards/cards/SignalCardFcrdns/styles.ts","../../src/components/signal-cards/adapters/structured-data-renderer.tsx","../../src/components/signal-cards/adapters/extractor-adapter.ts","../../src/components/signal-cards/components/ui/SVGLogo.tsx","../../src/components/signal-cards/cards/SignalCardBimi/SignalCardBimi.tsx","../../src/components/signal-cards/cards/SignalCardDmarcDomain/SignalCardDmarcDomain.tsx","../../src/components/signal-cards/cards/SignalCardSpfDomain/SignalCardSpfDomain.tsx"],"sourcesContent":["export const COLOR = {\n main: {\n green: 'var(--redsift-color-notifications-success-primary)',\n yellow: 'var(--redsift-color-notifications-warning-primary)',\n red: 'var(--redsift-color-notifications-error-primary)',\n blue: 'var(--redsift-color-notifications-info-primary)',\n white: 'var(--redsift-color-dark-components-text-primary)',\n black: '#3B3A58', // Grey-80 - primary body text\n warningOrange: '#f5a623', // Warning icon/accent color\n },\n grey: {\n darkest: '#201F36', // Grey-100 - card titles only\n darker: '#3B3A58', // Grey-80 - very dark text\n dark: '#55546D', // Grey-70 - dark secondary text\n medium: '#6E6D83', // Grey-60 - medium text, labels\n regular: '#9F9FAD', // Grey-50 - muted text\n light: '#D9D8DE', // Grey-30 - borders, dividers\n lighter: '#EAEAED', // Grey-20 - backgrounds\n lightest: '#f4f4f6', // Grey-10 - section backgrounds (Investigate)\n },\n};\n\nexport const FONT = {\n TYPE: {\n TEXT: '\"Open Sans\", sans-serif',\n HEADING: '\"Space Grotesk\", sans-serif',\n NUMBER: '\"Source Code Pro\", monospace',\n },\n};\n\n/**\n * Signal Card CSS Custom Properties\n *\n * These CSS variables provide theming for signal card components.\n * Design System mode uses DS tokens, Investigate mode uses custom values.\n *\n * Usage in styled-components:\n * ```tsx\n * const MyComponent = styled.div`\n * color: var(--sc-text-color);\n * font-family: var(--sc-font-body);\n * `;\n * ```\n */\nexport const SIGNAL_CARD_CSS_VARS = {\n // Text colors\n '--sc-text-color': 'var(--redsift-color-neutral-x-dark-grey)',\n '--sc-text-muted': 'var(--redsift-color-neutral-dark-grey)',\n '--sc-text-darkest': 'var(--redsift-color-neutral-x-dark-grey)',\n '--sc-text-heading': 'var(--redsift-color-neutral-x-dark-grey)',\n '--sc-text-secondary': 'var(--redsift-color-neutral-dark-grey)',\n\n // Background colors\n '--sc-bg-light': 'var(--redsift-color-neutral-x-light-grey)',\n '--sc-bg-lighter': 'var(--redsift-color-neutral-light-grey)',\n '--sc-bg-hover': 'var(--redsift-color-neutral-xx-light-grey)',\n '--sc-bg-selected': 'var(--redsift-color-neutral-x-light-grey)',\n '--sc-grey-background': 'var(--redsift-color-neutral-x-light-grey)',\n '--sc-code-bg': 'var(--redsift-color-neutral-x-light-grey)',\n\n // Border colors\n '--sc-border-color': 'var(--redsift-color-neutral-light-grey)',\n '--sc-border-color-light': 'var(--redsift-color-neutral-light-grey)',\n\n // Link colors\n '--sc-link-color': 'var(--redsift-color-notifications-info-primary)',\n\n // Warning/status colors\n '--sc-warning-color': 'var(--redsift-color-notifications-warning-primary)',\n\n // Fonts - Use Design System typography tokens with Poppins fallbacks\n '--sc-font-body': \"var(--redsift-typography-body-font-family, 'Poppins', sans-serif)\",\n '--sc-font-heading': \"var(--redsift-typography-h1-font-family, 'Poppins', sans-serif)\",\n '--sc-font-mono': \"var(--redsift-typography-font-family-source-code-pro, 'Source Code Pro', monospace)\",\n '--sc-font-code': \"var(--redsift-typography-font-family-source-code-pro, 'Source Code Pro', monospace)\",\n} as const;\n\n/**\n * Investigate-specific overrides for Signal Card CSS variables.\n * Applied when useInvestigateColors is true.\n */\nexport const INVESTIGATE_CSS_VARS = {\n // Text colors\n '--sc-text-color': COLOR.grey.darker,\n '--sc-text-muted': COLOR.grey.medium,\n '--sc-text-darkest': COLOR.grey.darkest,\n '--sc-text-heading': COLOR.grey.darkest,\n '--sc-text-secondary': COLOR.grey.darker,\n\n // Background colors\n '--sc-bg-light': COLOR.grey.lightest,\n '--sc-bg-lighter': COLOR.grey.lighter,\n '--sc-bg-hover': '#f8f9fc',\n '--sc-bg-selected': COLOR.grey.lightest,\n '--sc-grey-background': COLOR.grey.lightest,\n '--sc-code-bg': COLOR.grey.lightest,\n\n // Override Design System neutral grey for section backgrounds (Grey-10)\n '--redsift-color-neutral-x-light-grey': COLOR.grey.lightest,\n\n // Border colors\n '--sc-border-color': COLOR.grey.lighter,\n '--sc-border-color-light': COLOR.grey.lighter,\n\n // Link colors\n '--sc-link-color': COLOR.main.blue,\n\n // Warning/status colors\n '--sc-warning-color': COLOR.main.warningOrange,\n\n // Fonts\n '--sc-font-body': FONT.TYPE.TEXT,\n '--sc-font-heading': FONT.TYPE.HEADING,\n '--sc-font-mono': FONT.TYPE.NUMBER,\n '--sc-font-code': '\"Source Code Pro\", monospace',\n} as const;\n\n/**\n * Generates CSS variable declarations as a style object.\n * Used by SignalCardThemeProvider to inject theme-appropriate variables.\n */\nexport const getThemeCSSVars = (useInvestigateColors: boolean): Record<string, string> => {\n return useInvestigateColors ? INVESTIGATE_CSS_VARS : SIGNAL_CARD_CSS_VARS;\n};\n","import React, { createContext, useContext, ReactNode, useMemo } from 'react';\nimport { getThemeCSSVars } from '../cards/signal-card-styles';\n\n/**\n * Signal Cards Theme Configuration\n *\n * This context provides theme configuration to signal card components,\n * eliminating the need to pass `useInvestigateColors` through every component layer.\n */\n\nexport interface SignalCardTheme {\n /**\n * Whether to use Investigate-specific colors and fonts.\n * When true, applies custom fonts and color palette for the Investigate tool.\n */\n useInvestigateColors: boolean;\n}\n\nconst defaultTheme: SignalCardTheme = {\n useInvestigateColors: false,\n};\n\nconst SignalCardThemeContext = createContext<SignalCardTheme>(defaultTheme);\n\nexport interface SignalCardThemeProviderProps {\n children: ReactNode;\n /**\n * Theme configuration to apply to all signal card descendants\n */\n theme?: Partial<SignalCardTheme>;\n}\n\n/**\n * Provider component for Signal Card theming.\n *\n * Wrap signal card components with this provider to set theme options\n * without passing props through every component level.\n *\n * This provider injects CSS custom properties (--sc-*) that components use for styling.\n *\n * @example\n * ```tsx\n * <SignalCardThemeProvider theme={{ useInvestigateColors: true }}>\n * <SignalCardList signals={signals} />\n * </SignalCardThemeProvider>\n * ```\n */\nexport const SignalCardThemeProvider: React.FC<SignalCardThemeProviderProps> = ({ children, theme = {} }) => {\n const mergedTheme: SignalCardTheme = useMemo(\n () => ({\n ...defaultTheme,\n ...theme,\n }),\n [theme]\n );\n\n // Generate CSS variable overrides based on theme\n const cssVars = useMemo(() => getThemeCSSVars(mergedTheme.useInvestigateColors), [mergedTheme.useInvestigateColors]);\n\n return (\n <SignalCardThemeContext.Provider value={mergedTheme}>\n <div style={cssVars as React.CSSProperties}>{children}</div>\n </SignalCardThemeContext.Provider>\n );\n};\n\nSignalCardThemeProvider.displayName = 'SignalCardThemeProvider';\n\n/**\n * Hook to access the current signal card theme.\n *\n * Components can use this hook to access theme configuration\n * without requiring explicit props.\n *\n * @example\n * ```tsx\n * const { useInvestigateColors } = useSignalCardTheme();\n * ```\n */\nexport const useSignalCardTheme = (): SignalCardTheme => {\n return useContext(SignalCardThemeContext);\n};\n\n/**\n * Hook that combines prop value with context value.\n * Prop value takes precedence over context when explicitly provided.\n *\n * Components can receive useInvestigateColors via props or context.\n *\n * @param propValue - Explicitly passed prop value (takes precedence)\n * @returns Resolved theme configuration\n */\nexport const useResolvedTheme = (propValue?: boolean): SignalCardTheme => {\n const contextTheme = useSignalCardTheme();\n\n return {\n ...contextTheme,\n useInvestigateColors: propValue ?? contextTheme.useInvestigateColors,\n };\n};\n","import React, { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef, ComponentRef, ComponentType } from 'react';\n\nimport { useResolvedTheme } from './useSignalCardTheme';\n\nexport type ThemeOverrideProps = {\n /** Optional override for Investigate color palette usage. */\n useInvestigateColors?: boolean;\n};\n\n/**\n * Higher-order component that injects the resolved theme value into any signal card component.\n * Consumers can still override `useInvestigateColors` via props, but the surrounding\n * `SignalCardThemeProvider` now automatically supplies the default.\n */\nexport function withSignalCardTheme<C extends ComponentType<any>>(Component: C): C {\n type Props = ComponentPropsWithoutRef<C> & ThemeOverrideProps;\n type Ref = ComponentRef<C>;\n\n const Wrapped = forwardRef<Ref, Props>((props, ref) => {\n const { useInvestigateColors: override, ...rest } = props;\n const { useInvestigateColors } = useResolvedTheme(override);\n\n const ThemedComponent = Component as ComponentType<any>;\n\n return (\n <ThemedComponent\n {...(rest as ComponentPropsWithoutRef<C>)}\n useInvestigateColors={useInvestigateColors}\n ref={ref as any}\n />\n );\n });\n\n const componentName = Component.displayName ?? Component.name ?? 'Component';\n Wrapped.displayName = `WithSignalCardTheme(${componentName})`;\n\n // Preserve common static properties for backward compatibility without overriding the wrapper render method\n const STATIC_KEYS: Array<'propTypes' | 'defaultProps' | 'contextTypes' | 'contextType'> = [\n 'propTypes',\n 'defaultProps',\n 'contextTypes',\n 'contextType',\n ];\n\n STATIC_KEYS.forEach((key) => {\n if (key in Component) {\n (Wrapped as any)[key] = (Component as any)[key];\n }\n });\n\n return Wrapped as unknown as C;\n}\n","// src/i18n/glossary-labels.ts\nvar GLOSSARY_LABELS = {\n // FCrDNS\n \"sender-ip\": \"Sender IP\",\n ehlo: \"EHLO domain\",\n \"ptr-record\": \"PTR record\",\n \"a-record\": \"A record\",\n // SPF\n spf: \"SPF\",\n \"spf-record\": \"SPF Record\",\n \"spf-domain\": \"SPF Domain\",\n \"spf-alignment\": \"aspf=\",\n // DKIM\n dkim: \"DKIM\",\n \"dkim-signing-domain\": \"DKIM Signing Domain\",\n \"dkim-selector\": \"DKIM Selector\",\n \"dkim-signature\": \"DKIM Signature\",\n \"dkim-algorithm\": \"Key Algorithm\",\n canonicalization: \"Canonicalization\",\n \"signed-headers\": \"Signed Headers\",\n \"signer-domain\": \"DKIM Signing Domain\",\n \"key-length\": \"Key Length\",\n ttl: \"TTL\",\n \"dkim-alignment\": \"adkim=\",\n // DMARC\n from: \"From Domain\",\n \"return-path\": \"Return Path\",\n \"dmarc-policy\": \"DMARC Policy\",\n pct: \"pct=\",\n rua: \"rua=\",\n ruf: \"ruf=\",\n \"subdomain-policy\": \"sp=\",\n dmarc: \"DMARC\",\n // TLS\n tls: \"TLS\",\n ssl: \"SSL\",\n \"cipher-suite\": \"Cipher suite\",\n // DNS records\n \"txt-record\": \"TXT Record\",\n \"cname-record\": \"CNAME Record\",\n // BIMI\n \"bimi-record\": \"BIMI Record\",\n \"dmarc-compliant\": \"DMARC Compliant\",\n svg: \"SVG\",\n vmc: \"VMC\",\n cmc: \"CMC\",\n itag: \"I-TAG\",\n atag: \"A-TAG\",\n // MTA-STS\n \"tls-rpt-record\": \"TLS-RPT Record\",\n \"mta-sts-record\": \"MTA-STS Record\",\n \"mta-sts-policy-file\": \"MTA-STS Policy File\",\n \"mta-file-version\": \"version=\",\n \"mta-file-mode\": \"mode=\",\n \"mta-file-mx\": \"mx=\",\n \"mta-file-max-age\": \"max_age=\",\n \"mta-sts-certificate\": \"MTA-STS SSL Certificate\",\n \"mta-sts-certificate-expiry\": \"expiry=\"\n};\n\n// src/i18n/extractor-strings.ts\nvar EXTRACTOR_STRINGS = {\n \"en-US\": {\n \"card.amp.align-dkim-fail_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) and [](FROM#:glossary) are not aligned. The policy is [{dkimPolicy}](DKIM_ALIGNMENT#:glossary).\",\n \"card.amp.align-dkim_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) and [](FROM#:glossary) are aligned. The policy is [{dkimPolicy}](DKIM_ALIGNMENT#:glossary).\",\n \"card.amp.dkim-failed_md\": \"**[](DKIM#:glossary) authentication failed.**\",\n \"card.amp.dkim-passed_md\": \"**[](DKIM#:glossary) authentication passed.**\",\n \"card.amp.spf-failed_md\": \"**[](SPF#:glossary) authentication failed.**\",\n \"card.amp.spf-passed_md\": \"**[](SPF#:glossary) authentication passed.**\",\n \"card.dkim.canonicalization-simple_md\": \"The [](CANONICALIZATION#:glossary) {whichPart} is set to `simple`. This can lead to problems when verifying the email signature. We recommend setting it to `relaxed` for header and body. [Learn more](https://community.redsift.com/s/article/000001204) in our knowledge base.\",\n \"card.dkim.code-eval-failed_md\": \"**The given code `{code}` can not be evaluated.**\",\n \"card.dkim.dkim-key-length-warning\": \"The length of the RSA public key should be at least 1024 bits to conform with current security standards. If it is shorter, some providers (e.g. Google) may flag the DKIM verification test as failed.\",\n \"card.dkim.error_md\": \"DKIM verification status\",\n \"card.dkim.error_md_fail\": \"The message has a valid signature, but it does not match the signature of the sending domain. This probably means that the message was modified somewhere along the way.\",\n \"card.dkim.error_md_neutral\": \"The message was signed but the signature or signatures contained syntax errors.\",\n \"card.dkim.error_md_none\": \"The message was not signed.\",\n \"card.dkim.error_md_outdated_algorithm\": \"The message was signed with a key using the older, insecure RSA-{algorithm} algorithm.\",\n \"card.dkim.error_md_pass\": \"The message was signed and passed verification tests.\",\n \"card.dkim.error_md_permerror\": \"The signature (or some part of it) was missing from the received message. This indicates that either the email's signature header is incorrectly formatted or it has been modified after being sent.\",\n \"card.dkim.error_md_policy\": \"The message was signed, but some aspect of the signature or signatures was not accepted.\",\n \"card.dkim.error_md_temperror\": \"There was a short-term problem verifying the email signature. This error is temporary, so please send the email again later.\",\n \"card.dkim.error_simple_canonicalization_md\": \"Simple canonicalization detected\",\n \"card.dkim.error_simple_canonicalization_md_policy\": \"**The message has a valid signature, but it does not match the signature of the sending domain.**\\n\\n\\n\\n**Please note** that your email sending service is using `simple` [](CANONICALIZATION#:glossary) for email headers, which is not recommended and can falsify the result of this [](DKIM#:glossary) check. See below on how to change your setup to the recommended way.\",\n \"card.dkim.eval-error-record-not-found_md\": \"**A [](DKIM_SIGNATURE_HEADER#:glossary) is not present in your email.**\",\n \"card.dkim.eval-error-record-not-found_subtext_md\": \"Please configure DKIM for your email sending service to start signing emails. Our [knowledge base](https://community.redsift.com/s/global-search/dkim) provides instructions to setup DKIM for many providers.\",\n \"card.dkim.eval-error-validation-error_md\": \"**The signature verification failed.**\",\n \"card.dkim.eval-error-validation-error_subtext_md\": \"This is the raw error:\\n\\n```{error}```\",\n \"card.dkim.failed_md\": \"**[](DKIM#:glossary) evaluation failed.**\",\n \"card.dkim.invalid-txt-record-published-selector_md\": \"Empty or invalid [](TXT_RECORD#:glossary) published for the selector `{fullSelector}`.\",\n \"card.dkim.invalid_md\": \"**[](DKIM#:glossary) status is invalid.**\",\n \"card.dkim.no-dkim-email-header_md\": \"No [](DKIM_SIGNATURE_HEADER#:glossary)\",\n \"card.dkim.no-txt-record-published-selector_md\": \"No [](TXT_RECORD#:glossary) published for the selector `{fullSelector}`.\",\n \"card.dkim.not-present_md\": \"Not present\",\n \"card.dkim.passed_md\": \"**[](DKIM#:glossary) evaluation passed.**\",\n \"card.dkim.prompt-dkim-txt-record-publish_md\": \"Please publish a valid [](TXT_RECORD#:glossary) in your DNS for the selector.\",\n \"card.dkim.recommend-ttl-max-600_md\": \"We recommend not setting the TTL value higher than 600 seconds.\",\n \"card.dkim.txt-record-published-on-dkim-url_md\": \"[](TXT_RECORD#:glossary) published on `{selector}._domainkey.{signerDomain}`\",\n \"card.dkim.txt-record-ttl-600-warning_md\": \"The time-to-live (TTL) for the [](TXT_RECORD#:glossary) is higher then 600 seconds. When updating the record DNS servers can still show the old value for the TTL duration before they update the value. The impact is that you might have to wait for the change to take effect for this amount of time.\",\n \"card.dkim.unavailable-try-later_md\": \"Please try sending another email later.\",\n \"card.dkim.unavailable_md\": \"**[](DKIM#:glossary) evaluation temporarily unavailable.**\",\n \"card.dmarc.domain-aligned\": \"The domain is aligned with the From Domain. It can contribute to passing DMARC.\",\n \"card.dmarc.domain-not-aligned\": \"The domain is not aligned with the From Domain. It cannot contribute to passing DMARC.\",\n \"card.dmarc.error.dns-timeout\": \"DNS timeout when looking up DMARC record\",\n \"card.dmarc.error.invalid-pct-value\": \"Pct value must be between 0 and 100\",\n \"card.dmarc.error.invalid-policy-value\": \"Invalid policy value in DMARC record\",\n \"card.dmarc.error.invalid-rua-format\": \"Invalid rua format - must be mailto: URI\",\n \"card.dmarc.error.invalid-version\": \"Invalid DMARC version - must be DMARC1\",\n \"card.dmarc.error.misplaced-policy\": \"DMARC policy located at wrong subdomain\",\n \"card.dmarc.error.nxdomain\": \"NXDOMAIN - domain does not exist\",\n \"card.dmarc.error.policy-not-found\": \"DMARC policy not found\",\n \"card.dmarc.error.syntax-error\": \"Syntax error in DMARC record\",\n \"card.dmarc.error.unknown\": \"Unknown error\",\n \"card.dmarc.error.unrecognized-tag\": \"Unrecognized DMARC tag found\",\n \"card.dmarc.error_md\": \"\",\n \"card.dmarc.error_md_none\": \"**No DMARC policy record is published.**\",\n \"card.dmarc.error_md_pass\": \"**DMARC validation passed.**\",\n \"card.dmarc.error_md_permerror\": \"**A permanent error occured during DMARC evaluation.**\",\n \"card.dmarc.error_md_temperror\": \"**There was a temporary error evaluating the DMARC policy.**\",\n \"card.dnssec.domain-protected_fail\": \"The Domain is not protected by DNSSEC.\",\n \"card.dnssec.domain-protected_pass\": \"The Domain is protected by DNSSEC.\",\n \"card.fcrdns.ehlo-match-ptr-all_md\": \"The [](EHLO#:glossary) matches the [](PTR_RECORD#:glossary) of the [](A_RECORD#:glossary) in both directions.\",\n \"card.fcrdns.ehlo-no-match-ptr-all_md\": \"The [](EHLO#:glossary) does not match the [](PTR_RECORD#:glossary) of the [](A_RECORD#:glossary) in both directions.\",\n \"card.fcrdns.ehlo-not-valid_md\": \"The [](EHLO#:glossary) is not a valid domain. For a better security rating we recommend configuring your email sending service so that the domain is correctly set.\",\n \"card.fcrdns.no-ehlo_md\": \"[](EHLO#:glossary) is not set, invalid, or points to a non-public IP, so the tests have been skipped. We recommend configuring your email sending service to correctly set the [](EHLO#:glossary) as it will enhance your security rating.\",\n \"card.fcrdns.sender-ip-match-a-ehlo-all_md\": \"The [](SENDER_IP#:glossary) matches the [](A_RECORD#:glossary) of the [](EHLO#:glossary) in both directions.\",\n \"card.fcrdns.sender-ip-match-ptr-all_md\": \"The [](SENDER_IP#:glossary) matches the [](A_RECORD#:glossary) of the [](PTR_RECORD#:glossary) in both directions.\",\n \"card.fcrdns.sender-ip-no-match-ehlo-all_md\": \"The [](SENDER_IP#:glossary) does not match the [](A_RECORD#:glossary) of the [](EHLO#:glossary).\",\n \"card.fcrdns.sender-ip-no-match-ptr-all_md\": \"The [](SENDER_IP#:glossary) does not match the [](A_RECORD#:glossary) of the [](PTR_RECORD#:glossary) in both directions.\",\n \"card.fcrdns.sender-ip-ptr-record-no-match-ehlo_md\": \"The [](SENDER_IP#:glossary)'s [](PTR_RECORD#:glossary) does not match the [](EHLO#:glossary).\",\n \"card.spf.eval-error-infinite-recursion-detected_md\": \"**Infinite lookup recursion detected**\",\n \"card.spf.eval-error-infinite-recursion-detected_subtext_md\": \"One of your SPF record's `include:` statements is causing an infinite lookup recursion. Please remove the `include:` causing the recursion to make the SPF record work.\",\n \"card.spf.eval-error-limit-exceeded_md\": \"**Too many DNS lookups**\",\n \"card.spf.eval-error-limit-exceeded_subtext_md\": \"The SPF specification limits the number of DNS lookups to 10, which you are exceeding and which can cause SPF authentication to fail.\\n\\nPlease have at [this knowledge base article](https://community.redsift.com/s/article/000001129) for a solution to this problem.\",\n \"card.spf.eval-error-record-not-found_md\": \"**No SPF record found**\",\n \"card.spf.eval-error-record-not-found_subtext_md\": \"Please add your SPF [](TXT_RECORD#:glossary) in your DNS.\\n\\nOur [knowledge base](https://community.redsift.com/s/global-search/SPF%20DKIM) provides instructions to setup SPF for many providers.\",\n \"card.spf.eval-error-too-many-spf-records_md\": \"**Too many SPF records found**\",\n \"card.spf.eval-error-too-many-spf-records_md_subtext\": \"Please use a single SPF entry only.\",\n \"card.spf.eval-error-wrong-syntax_md\": \"**The SPF [FULL](TXT_RECORD#:glossary) has a syntax error**\",\n \"card.spf.eval-error-wrong-syntax_subtext_md\": \"Please check if it has the correct syntax and update the record in your DNS. One possible reason is a copy & paste error of the record content.\",\n \"card.spf.eval-failed_md\": \"**[](SPF#:glossary) evaluation failed**\",\n \"card.spf.eval-failed_md_subtext\": \"The sender is not authorized to send email on your behalf.\",\n \"card.spf.eval-neutral_md\": \"**The SPF check did not assert if the sender is authorized**\",\n \"card.spf.eval-not-possible_md\": \"**SPF evaluation not possible**\",\n \"card.spf.eval-not-possible_md_subtext-entry\": \"Please contact your DNS administrator to review the SPF [](TXT_RECORD#:glossary):\",\n \"card.spf.eval-not-possible_md_subtext-error\": \"Please contact your DNS administrator to investigate the error(s):\",\n \"card.spf.eval-passed_md\": \"**[](SPF#:glossary) check passed**\",\n \"card.spf.eval-soft-failed_md\": \"**[](SPF#:glossary) evaluation soft fail**\",\n \"card.spf.eval-soft-failed_md_subtext\": \"The sender is probably not authorized, but no stronger policy was published.\",\n \"card.spf.unavailable_md\": \"**[](SPF#:glossary) evaluation temporarily unavailable**\",\n // BIMI keys\n \"card.bimi.cert-forbidden_md\": \"Your certificate appears to be behind an anti-bot protection system. Find out more and how to resolve the issue [here](https://knowledge.ondmarc.redsift.com/en/articles/8047013-ondmarc-cannot-fetch-my-bimi-logo-or-certificate)\",\n \"card.bimi.could-not-fetch_md\": \"Failed to fetch **[](BIMI_RECORD#:glossary)**\",\n \"card.bimi.dmarc-compliance-title\": \"DMARC compliance\",\n \"card.bimi.dmarc-compliance-pass_md\": \"Domain is DMARC compliant\",\n \"card.bimi.dmarc-compliance-fail_md\": \"Domain is not DMARC compliant\",\n \"card.bimi.errors.bimi-error-cert-not-valid\": \"Certificate is not valid\",\n \"card.bimi.errors.bimi-error-incorrect-v\": \"Record v value should be BIMI1;\",\n \"card.bimi.errors.bimi-error-invalid-a\": \"Record a value needs to be a valid URL\",\n \"card.bimi.errors.bimi-error-invalid-l\": \"Record l value needs to be a valid URL\",\n \"card.bimi.errors.bimi-error-invalid-record\": \"BIMI record is invalid\",\n \"card.bimi.errors.bimi-error-missing-a\": \"Record a value needs to be defined\",\n \"card.bimi.errors.bimi-error-missing-l\": \"Record l value needs to be defined\",\n \"card.bimi.errors.bimi-error-missing-v\": \"Record v value needs to be defined\",\n \"card.bimi.errors.bimi-error-unknown\": \"unknown error\",\n \"card.bimi.errors.bimi-error-unsupported-values\": \"Record v value needs to be defined\",\n \"card.bimi.logoErrors.invalid-svg_md\": \"**[](VMC#:glossary)** Invalid SVG. Logo from certificate cannot be converted to a valid SVG.\",\n \"card.bimi.logoErrors.invalid-svg-attribute_md\": \"**[](VMC#:glossary)** Invalid SVG attribute found.\",\n \"card.bimi.logoErrors.invalid-svg-attribute-xy_md\": \"**[](VMC#:glossary)** Invalid attribute. **x** and/or **y** are not allowed\",\n \"card.bimi.logoErrors.invalid-svg-content-type_md\": \"**[](VMC#:glossary)** Invalid SVG content-type. Should be **image/svg+xml**\",\n \"card.bimi.logoErrors.invalid-svg-element-foreign-object_md\": \"**[](VMC#:glossary)** Invalid SVG element **foreing-object** found.\",\n \"card.bimi.logoErrors.invalid-svg-element-image_md\": \"**[](VMC#:glossary)** Invalid SVG element **image** found.\",\n \"card.bimi.logoErrors.invalid-svg-element-link_md\": \"**[](VMC#:glossary)** Invalid SVG element **link** found.\",\n \"card.bimi.logoErrors.invalid-svg-element-script_md\": \"**[](VMC#:glossary)** Invalid SVG element **script** found.\",\n \"card.bimi.logoErrors.invalid-svg-element-style_md\": \"**[](VMC#:glossary)** Invalid SVG element **style** found.\",\n \"card.bimi.logoErrors.invalid-svg-id-name_md\": \"**[](VMC#:glossary)** Attribute id has an invalid name.\",\n \"card.bimi.logoErrors.invalid-svg-missing-title_md\": \"**[](VMC#:glossary)** Missing **title** element in svg.\",\n \"card.bimi.logoErrors.invalid-svg-profile_md\": \"**[](VMC#:glossary)** Invalid SVG profile. Should be **tiny-ps**\",\n \"card.bimi.logoErrors.invalid-svg-reference_md\": \"**[](VMC#:glossary)** Invalid reference in svg.\",\n \"card.bimi.logoErrors.invalid-svg-root-element_md\": \"**[](VMC#:glossary)** Invalid root element. Should be **svg**\",\n \"card.bimi.logoErrors.invalid-svg-size_md\": \"**[](VMC#:glossary)** Invalid size. SVG must be up to **32k**\",\n \"card.bimi.logoErrors.invalid-svg-version_md\": \"**[](VMC#:glossary)** Invalid SVG version. Should be **1.2**\",\n \"card.bimi.logoErrors.invalid-xml-12_md\": '**[](VMC#:glossary)** Unsupported XML version \"1.2\". Should be **1.0**',\n \"card.bimi.logoErrors.logo-and-evidence-mismatch_md\": \"**[](VMC#:glossary)** Logo on l record and on certificate do not match\",\n \"card.bimi.logoErrors.logo-extract-error_md\": \"**[](VMC#:glossary)** Error extracting logo\",\n \"card.bimi.logoErrors.unknown-svg-error_md\": \"**[](VMC#:glossary)** Unknown SVG error\",\n \"card.bimi.no-txt-published-policy-on-domain_md\": \"No [](TXT_RECORD#:glossary) published on `{policyDomain}`\",\n \"card.bimi.pemErrors.cert-bad-date_md\": \"**[](VMC#:glossary)** Certificate has expired\",\n \"card.bimi.pemErrors.cert-bad-signature_md\": \"**[](VMC#:glossary)** Certificate has a bad signature\",\n \"card.bimi.pemErrors.cert-not-file_md\": \"**[](VMC#:glossary)** Certificate is not a file\",\n \"card.bimi.pemErrors.cert-not-found_md\": \"**[](VMC#:glossary)** Certificate not found\",\n \"card.bimi.pemErrors.cert-not-https_md\": \"**[](VMC#:glossary)** Certificate does not use the HTTPS protocol\",\n \"card.bimi.pemErrors.cert-not-pem_md\": \"**[](VMC#:glossary)** Certificate is not a PEM file\",\n \"card.bimi.pemErrors.cert-not-url_md\": \"**[](VMC#:glossary)** Certificate is not an url\",\n \"card.bimi.pemErrors.cert-not-valid_md\": \"**[](VMC#:glossary)** Certificate is not valid\",\n \"card.bimi.pemErrors.cert-unknown-error_md\": \"**[](VMC#:glossary)** Certificate has an unknown error\",\n \"card.bimi.record-declination_md\": \"**[](BIMI_RECORD#:glossary)** Present and containing a **valid declination to publish**\",\n \"card.bimi.record-failed_md\": \"**[](BIMI_RECORD#:glossary)** **Present** but with errors\",\n \"card.bimi.record-info_md\": \"BIMI requires domains to be DMARC compliant, which means a minimum DMARC policy of **p=quarantine at pct=100 (and sp <> none)** [Learn how to fix it](https://community.redsift.com/s/article/000001196)\",\n \"card.bimi.record-invalid_md\": \"**[](BIMI_RECORD#:glossary)** **is invalid**\",\n \"card.bimi.record-missing_md\": \"**[](BIMI_RECORD#:glossary)** **Missing.** [Learn how to fix it](https://community.redsift.com/s/article/000001130)\",\n \"card.bimi.record-no-cert_md\": \"**[](BIMI_RECORD#:glossary)** **Certificate not found**\",\n \"card.bimi.record-passed_md\": \"**[](BIMI_RECORD#:glossary)** **Present and compliant**\",\n \"card.bimi.record-status-title\": \"BIMI record status\",\n \"card.bimi.record-svg-added-from-itag-invalid_md\": \"**[](BIMI_RECORD#:glossary)** image with errors from **[](ITAG#:glossary)** [svg-url]({url})\",\n \"card.bimi.record-svg-added-from-itag-valid_md\": \"**[](BIMI_RECORD#:glossary)** successfully added from **[](ITAG#:glossary)** [svg-url]({url})\",\n \"card.bimi.record-title\": \"BIMI record\",\n \"card.bimi.record-unknown-error_md\": \"**[](BIMI_RECORD#:glossary)** **Present with errors**\",\n \"card.bimi.safe-svg-title\": \"Safe SVG\",\n \"card.bimi.svg-error-fallback_md\": \"**[](VMC#:glossary)** {error}\",\n \"card.bimi.svg-missing-title_md\": \"**[](BIMI_RECORD#:glossary) Logo missing:** Logo not found on BIMI Record\",\n \"card.bimi.txt-published-policy-on-domain_md\": \"[](TXT_RECORD#:glossary) published on `{policyDomain}`\",\n \"card.bimi.vmc-correctly-title_md\": \"**[](VMC#:glossary)** certificate from **[](ATAG#:glossary)** [pem-url]({url}) is valid\",\n \"card.bimi.vmc-invalid-title_md\": \"**[](VMC#:glossary)** certificate from **[](ATAG#:glossary)** [pem-url]({url}) is invalid\",\n \"card.bimi.vmc-missing-title_md\": \"**[](VMC#:glossary) certificate missing (currently optional)** [Learn how to add it](https://community.redsift.com/s/article/000001130)\",\n \"card.bimi.vmc-not-vmc-title_md\": \"**[](VMC#:glossary)** certificate from **[](ATAG#:glossary)** [pem-url]({url}) is not a VMC\",\n \"card.bimi.vmc-title\": \"VMC Certificate\",\n \"card.bimi.vmc.assertionMark_md\": \"**Assertion Mark:** {assertionMark}\",\n \"card.bimi.vmc.expired-date_md\": \"Expired on {date}\",\n \"card.bimi.vmc.expiry-date_md\": \"**Expires on:** {date} ({daysLeft} days left)\",\n \"card.bimi.vmc.issuer_md\": \"**Issuer: {issuer}**\",\n \"card.bimi.vmc.trademarkAuthority_md\": \"**Trademark Authority: {trademarkAuthority}**\",\n \"card.bimi.vmc.valid-for-domain_md\": \"**Valid for domains:** `{domains}`\",\n // BIMI section titles\n \"section-titles.bimi-domain\": \"DMARC Domains\",\n \"section-titles.bimi-policy\": \"Your BIMI Policy\",\n // Domain Analyzer DKIM keys\n \"card.dkim.cname-record-published-on-dkim-url_md\": \"[](CNAME_RECORD#:glossary) published on `{selector}._domainkey.{signerDomain}`\",\n \"card.dkim.no-selectors-found_md\": \"No DKIM selectors were found for this domain. Please add your DKIM selectors to start monitoring.\",\n \"card.dkim.no-txt-record-published-at_md\": \"No [](TXT_RECORD#:glossary) published at `{domain}`.\",\n \"card.dkim.selector\": \"Selector\",\n \"card.dkim.selector-statuses.fail_one\": \"{count} selector failed\",\n \"card.dkim.selector-statuses.fail_other\": \"{count} selectors failed\",\n \"card.dkim.selector-statuses.pass_one\": \"{count} selector passed\",\n \"card.dkim.selector-statuses.pass_other\": \"{count} selectors passed\",\n \"card.dkim.selector-statuses.warning_one\": \"{count} selector with warnings\",\n \"card.dkim.selector-statuses.warning_other\": \"{count} selectors with warnings\",\n \"card.dkim.title\": \"DKIM Selector\",\n // Domain Analyzer DKIM section titles\n \"section-titles.dkim-selector-records\": \"DKIM DNS records\",\n \"section-titles.dkim-selector-details\": \"Key configuration\",\n \"section-titles.dkim-policy\": \"Your DKIM Policy\",\n // Domain Analyzer DKIM issue status detail keys\n \"statusDetails.no-dkim-public-key\": \"No DKIM public key found\",\n \"statusDetails.invalid-dkim-public-key\": \"DKIM public key is invalid\",\n \"statusDetails.invalid-dkim-algorithm\": \"Invalid DKIM algorithm\",\n \"statusDetails.invalid-dkim-version\": \"Invalid DKIM version\",\n \"statusDetails.missing-dkim-version\": \"DKIM version is missing\",\n \"statusDetails.weak-dkim\": \"DKIM key is weak (less than 1024 bits)\",\n \"statusDetails.malformed-dkim\": \"DKIM record is malformed\",\n \"statusDetails.missing-dkim-v\": \"DKIM version tag is missing\",\n \"statusDetails.duplicate-dkim\": \"Duplicate DKIM record found\",\n \"statusDetails.no-dkim\": \"No DKIM record found\",\n \"statusDetails.missing-dkim\": \"DKIM record is missing\",\n \"statusDetails.servfail-dkim\": \"DNS server failure when looking up DKIM record\",\n // Domain Analyzer SPF keys\n \"card.spf.passed_md\": \"**[](SPF#:glossary) authentication passed.**\",\n \"card.spf.warnings_md\": \"**[](SPF#:glossary) authentication detected problems:**\",\n \"card.spf.failed_md\": \"**[](SPF#:glossary) authentication failed.**\",\n \"card.spf.has-dynamic-spf\": \"Using Dynamic SPF\",\n \"card.spf.dns-count-lookup_md\": \"{count}/10 SPF lookups\",\n \"card.spf.dns-count-lookup-greater-10_md\": \"**SPF lookups are exceeding the limit of 10, which results in an SPF fail. Check our Dynamic SPF feature for a solution!**\",\n \"card.spf.dns-count-lookup-greater-10_md_no-dynamic-services\": \"**SPF lookups are exceeding the limit of 10, which results in an SPF fail. Check our Dynamic SPF feature for a solution!**\",\n \"card.spf.dns-count-lookup-greater-10_md_has-external-includes\": \"**SPF lookups are exceeding the limit of 10, which results in an SPF fail. Consider using Dynamic SPF to consolidate your includes.**\",\n \"card.spf.dns-count-lookup-greater-10_md_no-external-includes\": \"**SPF lookups are exceeding the limit of 10, which results in an SPF fail.**\",\n \"card.spf.dns-count-lookup-warning_md\": \"SPF lookup count is nearing the limit of 10.\",\n \"card.spf.dns-count-lookup-warning_md_no-dynamic-services\": \"SPF lookup count is nearing the limit of 10. Check our Dynamic SPF feature for a solution!\",\n \"card.spf.dns-count-lookup-warning_md_has-external-includes\": \"SPF lookup count is nearing the limit of 10. Consider using Dynamic SPF to consolidate your includes.\",\n \"card.spf.dns-count-lookup-warning_md_no-external-includes\": \"SPF lookup count is nearing the limit of 10.\",\n \"card.spf.dns-count-void-lookups_md\": \"{count}/2 Void lookups\",\n \"card.spf.txt-published-policy-on-domain_md\": \"[](TXT_RECORD#:glossary) published on `{policyDomain}`\",\n \"card.spf.no-txt-published-policy-on-domain_md\": \"No [](TXT_RECORD#:glossary) published on `{policyDomain}`\",\n \"card.subdo.found-warning_one\": \"{count} subdomain mailer detected\",\n \"card.subdo.found-warning_other\": \"{count} subdomain mailers detected\",\n \"card.subdo.button-name\": \"View in SPF Checker\",\n \"card.subdo.spf-subdo-poisoned_md_one\": \"**{count}** compromised include detected\",\n \"card.subdo.spf-subdo-poisoned_md_other\": \"**{count}** compromised includes detected\",\n \"card.threat-int.from-domain.found_md\": \"[](FROM#:glossary) {code} was found in {length} database. Threats listed below:\",\n \"card.threat-int.from-domain.not-found_md\": \"[](FROM#:glossary) {code} was **not** found in any database.\",\n \"card.threat-int.sender-ip.found_md\": \"[](SENDER_IP#:glossary) {code} was found in {length} database. Threats listed below:\",\n \"card.threat-int.sender-ip.not-found_md\": \"[](SENDER_IP#:glossary) {code} was **not** found in any database.\",\n \"card.urls.description\": \"Shows all URLs extracted from the email. This is useful if you need to subscribe via a link to the service you are testing.\",\n \"card.urls.not-found_md\": \"No URLs found in this email.\",\n \"card.urls.url_md\": \"[{url}]({url})\",\n \"extracted-email\": \"Extracted from your email\",\n \"investigate:card.dmarc.align-dkim-fail_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) and [](FROM#:glossary) are not aligned. The policy is [{policy}](DKIM_ALIGNMENT#:glossary).\",\n \"investigate:card.dmarc.align-dkim-identical-no-policy_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) and [](FROM#:glossary) are aligned because they are identical. The email would be compliant if there was a valid [DMARC](DMARC#:glossary) policy.\",\n \"investigate:card.dmarc.align-dkim-no-policy_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) and [](FROM#:glossary) are not identical. Alignment cannot be determined without a [DMARC](DMARC#:glossary) policy.\",\n \"investigate:card.dmarc.align-dkim_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) and [](FROM#:glossary) are aligned. The policy is [{policy}](DKIM_ALIGNMENT#:glossary).\",\n \"investigate:card.dmarc.align-spf-fail_md\": \"[](SPF_DOMAIN#:glossary) and [](FROM#:glossary) are not aligned. The policy is [{policy}](SPF_ALIGNMENT#:glossary).\",\n \"investigate:card.dmarc.align-spf-identical-no-policy_md\": \"[](SPF_DOMAIN#:glossary) and [](FROM#:glossary) are aligned because they are identical. The email would be compliant if there was a valid [DMARC](DMARC#:glossary) policy.\",\n \"investigate:card.dmarc.align-spf-no-policy_md\": \"[](SPF_DOMAIN#:glossary) and [](FROM#:glossary) are not identical. Alignment cannot be determined without a [DMARC](DMARC#:glossary) policy.\",\n \"investigate:card.dmarc.align-spf_md\": \"[](SPF_DOMAIN#:glossary) and [](FROM#:glossary) are aligned. The policy is [{policy}](SPF_ALIGNMENT#:glossary).\",\n \"investigate:card.dmarc.all-emails-reported-only_md\": \"DMARC configured in report-only mode. All emails will only be [REPORTED](DMARC_POLICY#:glossary).\",\n \"investigate:card.dmarc.all-emails-reported_md\": \"All emails will be [REPORTED](DMARC_POLICY#:glossary).\",\n \"investigate:card.dmarc.bad-policy_md_one\": \"**The [FULL](DMARC_POLICY#:glossary) has the following syntax error:**\",\n \"investigate:card.dmarc.bad-policy_md_other\": \"**The [FULL](DMARC_POLICY#:glossary) has the following syntax error:**\",\n \"investigate:card.dmarc.category-policy-good_md\": \"The policy on your DNS conforms with the DMARC specification.\",\n \"investigate:card.dmarc.dkim-failed_md\": \"**[](DKIM#:glossary) authentication failed.**\",\n \"investigate:card.dmarc.dkim-none_md\": \"**[](DKIM#:glossary) authentication failed.**\",\n \"investigate:card.dmarc.dkim-passed_md\": \"**[](DKIM#:glossary) authentication passed.**\",\n \"investigate:card.dmarc.dmarc-failed_md\": \"[](DMARC#:glossary) settings **are not** BIMI compliant\",\n \"investigate:card.dmarc.dmarc-no-rua_md\": \"[](DMARC#:glossary) does not have an **aggregate report address** (rua) entry.\",\n \"investigate:card.dmarc.dmarc-passed_md\": \"[](DMARC#:glossary) **passed**\",\n \"investigate:card.dmarc.dmarc-passed-no-rua_md\": \"[](DMARC#:glossary) is BIMI compliant **BUT** it does not have an **aggregate report address** (rua) entry.\",\n \"investigate:card.dmarc.dmarc-policy_md\": \"**[PERCENT {percent}%](PCT#:glossary)** of unauthorized emails will be subject to the **[{policy}](DMARC_POLICY#:glossary)** policy.\",\n \"investigate:card.dmarc.dmarc-policy-partial_md\": \"The domain is only partially protected. Only **[PERCENT {percent}%](PCT#:glossary)** of unauthorized emails will be subject to the **[{policy}](DMARC_POLICY#:glossary)** policy.\",\n \"investigate:card.dmarc.full-rejection_md\": \"**100%** of unauthorized emails with the [](FROM#:glossary) `{domain}` will be **rejected**.\",\n \"investigate:card.dmarc.full-rejection-subdomain-weak_md\": \"**100%** of unauthorized emails with the [](FROM#:glossary) `{domain}` will be **rejected**, but subdomains use a weaker policy (sp={sp}), leaving them vulnerable to spoofing.\",\n \"investigate:card.dmarc.misplaced-bad-policy_md\": \"**The [FULL](DMARC_POLICY#:glossary) is misplaced and has a syntax error:**\",\n \"investigate:card.dmarc.misplaced-policy_md\": \"**The [FULL](DMARC_POLICY#:glossary) is misplaced.**\",\n \"investigate:card.dmarc.no-policy_md\": \"**No [FULL](DMARC_POLICY#:glossary) published on domain**\\n\\n**`{policyDomain}`**\",\n \"investigate:card.dmarc.no-txt-published-policy-on-domain_md\": \"No [](TXT_RECORDS#:glossary) published on `{policyDomain}`\",\n \"investigate:card.dmarc.permerror-no-rua_md\": \"No valid reporting URI ([](RUA#:glossary)) is present, so receivers will skip DMARC processing entirely.\",\n \"investigate:card.dmarc.permerror-rua-fallback_md\": \"A valid reporting URI ([](RUA#:glossary)) is present, so receivers will fall back to acting as if the policy is **p=none**.\",\n \"investigate:card.dmarc.policy-no-rua_md\": \"**[](RUA#:glossary) is not set.**\",\n \"investigate:card.dmarc.policy-no-ruf_md\": \"[](RUF#:glossary) is not set. Failure Reports with more detailed visibility of problems will not be sent.\",\n \"investigate:card.dmarc.policy-none-pct-0_md\": \"No reports will be sent with this policy, because the sample rate [](PCT#:glossary) is set to `0`.\",\n \"investigate:card.dmarc.policy-not-none-pct-0_md\": \"All **unauthorized** email will be delivered to receivers although the policy is set to [{policy}](DMARC_POLICY#:glossary), because the sample rate [](PCT#:glossary) is set to `0`.\",\n \"investigate:card.dmarc.policy-remaining-emails-pct-reject_md\": \"The remaining **{remainingPercent}%** of unauthorized emails will be subject to the **quarantine** policy.\",\n \"investigate:card.dmarc.policy-remaining-emails-pct-quarantine_md\": \"The remaining **{remainingPercent}%** of unauthorized emails will be **delivered normally**.\",\n \"investigate:card.dmarc.receiver-does-not-accept-reports-both\": \"One or more of your RUA and RUF recipients is not configured to accept DMARC reports.\",\n \"investigate:card.dmarc.receiver-does-not-accept-reports-rua\": \"One or more of your RUA recipients is not configured to accept DMARC reports.\",\n \"investigate:card.dmarc.receiver-does-not-accept-reports-ruf\": \"One or more of your RUF recipients is not configured to accept DMARC reports.\",\n \"investigate:card.dmarc.receiver-does-not-accept-reports-rua-uri_md\": \"**{uri}** is not configured to accept DMARC aggregate reports.\",\n \"investigate:card.dmarc.receiver-does-not-accept-reports-ruf-uri_md\": \"**{uri}** is not configured to accept DMARC forensic reports.\",\n \"investigate:card.dmarc.setup-dmarc_md\": \"Please setup a DMARC record as described [here](https://community.redsift.com/s/article/000001195) to secure your email setup.\",\n \"investigate:card.dmarc.spf-failed_md\": \"**[](SPF#:glossary) authentication failed.**\",\n \"investigate:card.dmarc.spf-passed_md\": \"**[](SPF#:glossary) authentication passed.**\",\n \"investigate:card.dmarc.subdomain-no-explicit-policy_md\": \"This DMARC policy applies to all emails sent from subdomains of `{domain}.{tld}`, e.g. `mail.{domain}.{tld}`, where no explicit DMARC policy is set on the subdomain.\",\n \"investigate:card.dmarc.subdomain-no-policy_md\": \"**100%** of unauthorized emails from subdomains of `{domain}` will be delivered (reported only) unless they have published their own, stronger DMARC policy.\",\n \"investigate:card.dmarc.subdomain-full-rejection_md\": \"**100%** of unauthorized emails with the [](FROM#:glossary) of subdomains of `{domain}` will be **rejected** unless they have published their own, weaker DMARC policy.\",\n \"investigate:card.dmarc.subdomain-full-quarantine_md\": \"**100%** of unauthorized emails with the [](FROM#:glossary) of subdomains of `{domain}` will be **quarantined** unless they have published their own DMARC policy.\",\n \"investigate:card.dmarc.subdomain-partial-rejection_md\": \"Subdomains are only partially protected unless they have published their own, stronger DMARC policy. Only **{pct}%** of unauthorized emails will be subject to the **reject** policy. The remaining **{remainingPercent}%** of unauthorized emails will be subject to the **quarantine** policy.\",\n \"investigate:card.dmarc.subdomain-partial-quarantine_md\": \"Subdomains are only partially protected unless they have published their own, stronger DMARC policy. Only **{pct}%** of unauthorized emails will be subject to the **quarantine** policy. The remaining **{remainingPercent}%** of unauthorized emails will be **delivered normally**.\",\n \"investigate:card.dmarc.subdomain-partial-no-policy_md\": \"Only **{pct}%** of unauthorized emails from subdomains of `{domain}` will be delivered (reported only) unless they have published their own, stronger DMARC policy.\",\n \"investigate:card.dmarc.subdomain-policy-not-none_md\": \"The DMARC policy '{subpolicy}' is applied for mails sent from subdomains of `{domain}` that do not have their own DMARC policy records set.\",\n \"investigate:card.dmarc.subdomain-policy-not-none_weaker_md\": \"**sp={subpolicyL}** is weaker than **p={policyL}**. The DMARC policy '{subpolicy}' is applied for mails sent from subdomains of `{domain}` that do not have their own DMARC policy records set.\",\n \"investigate:card.dmarc.summary-domain-reject-full-sp-weak\": \"The domain has a reject policy for the main domain, but subdomains use a weaker policy, leaving them vulnerable to spoofing.\",\n \"investigate:card.dmarc.summary-domain-reject-partial-sp-weak\": \"The domain only rejects {pct}% of unauthorized email, and subdomains use a weaker policy, leaving them vulnerable to spoofing.\",\n \"investigate:card.dmarc.summary-domain-quarantine-full-sp-weak\": \"The domain has a quarantine policy, but subdomains use a weaker policy, leaving them vulnerable to spoofing.\",\n \"investigate:card.dmarc.summary-domain-quarantine-partial-sp-weak\": \"The domain only quarantines {pct}% of unauthorized email, and subdomains use a weaker policy, leaving them vulnerable to spoofing.\",\n // Summary box strings for email compliance results\n \"investigate:card.dmarc.summary-email-pass\": \"The email is DMARC compliant. It passed both DKIM and SPF.\",\n \"investigate:card.dmarc.summary-email-fail-both\": \"The email is not DMARC compliant. Neither DKIM nor SPF passed.\",\n \"investigate:card.dmarc.summary-email-fail-dkim\": \"The email is not DMARC compliant. DKIM did not pass.\",\n \"investigate:card.dmarc.summary-email-fail-spf\": \"The email is not DMARC compliant. SPF did not pass.\",\n // Summary box strings for permerror (RFC 7489 §6.6.3)\n \"investigate:card.dmarc.summary-email-permerror\": \"Email compliance could not be determined because the DMARC record has a permanent error and no reporting URI (rua) is configured.\",\n \"investigate:card.dmarc.summary-domain-permerror\": \"The DMARC policy has a permanent error and cannot be enforced. No reporting URI (rua) is configured, so receivers will skip DMARC processing entirely.\",\n \"investigate:card.dmarc.summary-domain-permerror-rua-fallback\": \"The DMARC policy contains errors, but a valid reporting URI (rua) is present. Receivers fall back to acting as if the policy is p=none (monitoring only).\",\n \"investigate:card.dmarc.txt-published-on-policy-domain_md\": \"[](TXT_RECORD#:glossary) published on `{policyDomain}`\",\n \"investigate:card.dmarc.txt-published-policy-on-domain_md\": \"[](TXT_RECORD#:glossary) published on `{policyDomain}`\",\n \"investigate:card.dmarc.txt-published-policy-on-domain_md_one\": \"[](TXT_RECORD#:glossary) published on `{policyDomain}`\",\n \"investigate:card.dmarc.txt-published-policy-on-domain_md_other\": \"{count} [](TXT_RECORDS#:glossary) published on `{policyDomain}`\",\n \"investigate:card.spf.dns-count-lookup-greater-10_md\": \"**SPF lookups are exceeding the limit of 10, which results in an SPF fail. Check our Dynamic SPF feature for a solution!**\",\n \"investigate:card.spf.dns-count-lookup_md\": \"{count}/10 SPF lookups\",\n \"investigate:card.spf.dns-count-lookup_md_one\": \"{count}/10 SPF lookup\",\n \"investigate:card.spf.dns-count-lookup_md_other\": \"{count}/10 SPF lookups\",\n \"investigate:card.spf.dns-count-void-lookups_md\": \"{count}/2 Void lookups\",\n \"investigate:card.spf.dns-count-void-lookups_md_one\": \"{count}/2 Void lookup\",\n \"investigate:card.spf.dns-count-void-lookups_md_other\": \"{count}/2 Void lookups\",\n \"investigate:card.spf.eval-error-record-not-found_md\": \"**No SPF record found**\",\n \"investigate:card.spf.failed_md\": \"**[](SPF#:glossary) authentication failed.**\",\n \"investigate:card.spf.passed_md\": \"**[](SPF#:glossary) authentication passed.**\",\n \"investigate:card.spf.spf-all-and-redirect_md\": \"Any **redirect** is ignored if there is an **all** mechanism.\",\n \"investigate:card.spf.spf-all-not-last_md\": \"Any data after the **all** is ignored.\",\n \"investigate:card.spf.spf-all-plus-warning_md\": \"**+all** mechanism should not be used as this allows all sending IP addresses.\",\n \"investigate:card.spf.spf-all-question-mark-warning_md\": \"**?all** mechanism should not be used as it allows for an ambiguous response.\",\n \"investigate:card.spf.spf-extra-spf-lookups_md\": \"Too many SPF lookups. Details below\",\n \"investigate:card.spf.spf-invalid-spf-header-include_md\": \"SPF record is invalid because it has a space between the include: statement.\",\n \"investigate:card.spf.spf-invalid-spf1-header_md\": \"Invalid SPF record\",\n \"investigate:card.spf.spf-multiple-all_md\": \"Multiple **all** mechanisms in the SPF record\",\n \"investigate:card.spf.spf-multiple-mx-providers_md\": \"Multiple email providers configured in the MX records for this domain.\",\n \"investigate:card.spf.spf-multiple-spf_md\": \"Multiple SPF records found for this domain\",\n \"investigate:card.spf.spf-no-all_md\": \"It is recommended to use either a **redirect** modifier or an **all** mechanism to explicitly terminate processing.\",\n \"investigate:card.spf.spf-no-spf_md\": \"No SPF configured for the domain.\",\n \"investigate:card.spf.spf-recursive-include-spf_md\": \"Redundant SPF include can be removed as it points back to your own domain\",\n \"investigate:card.spf.spf-v-tag-duplicated-spf_md\": \"Version tag is duplicated.\",\n \"investigate:card.spf.warnings_md\": \"**[](SPF#:glossary) authentication detected problems:**\",\n \"investigate:dkim-evaluation\": \"DKIM Evaluation\",\n \"investigate:extracted-dns\": \"Extracted from your DNS configuration\",\n \"investigate:extracted-dns-details\": \"Extracted DNS configuration details\",\n \"investigate:extracted-dns-short\": \"Extracted from your DNS\",\n \"investigate:extracted-email\": \"Extracted from your email\",\n \"investigate:fcrdns-evaluation\": \"FCrDNS Evaluation\",\n \"investigate:retry-email_md\": \"**Please send the email again!**\",\n \"investigate:temporary-error-setup\": \"A temporary error occurred when analyzing your setup.\",\n \"retry-email_md\": \"**Please send the email again!**\",\n \"section-titles.dkim-headers\": \"Email headers\",\n \"section-titles.dkim-key\": \"DKIM public key\",\n \"section-titles.dkim-signature\": \"DKIM signature\",\n \"section-titles.dmarc-alignment\": \"DMARC alignment check\",\n \"section-titles.dmarc-authentication\": \"DMARC authentication check\",\n \"section-titles.dmarc-domain\": \"DMARC Domains\",\n \"section-titles.dmarc-policy\": \"Your DMARC Policy\",\n \"section-titles.dmarc-policy-check\": \"DMARC policy record check\",\n \"section-titles.dmarc-policy-details\": \"Policy configuration\",\n \"section-titles.dnssec\": \"DNSSEC Status\",\n \"section-titles.sender-information\": \"Sender Information\",\n \"section-titles.spf-policy\": \"Your SPF Policy\",\n \"section-titles.spf-policy-check\": \"SPF policy record check\",\n \"section-titles.tls-configuration\": \"TLS Configuration\",\n \"section-titles.urls-found\": \"URLs found\",\n \"signal-cards.tls.extracted.cipher_md\": \"[](CIPHER_SUITE#:glossary)\",\n \"signal-cards.tls.extracted.version_md\": \"[](TLS#:glossary) version\",\n \"signal-cards.tls.info.cipher.error_md\": \"Cipher Suite `{cipher}` is insecure.\",\n \"signal-cards.tls.info.cipher.good_md\": \"Cipher Suite is secure\",\n \"signal-cards.tls.info.cipher.learn_more_md\": \"Click [here](https://community.redsift.com/s/article/000001271) to view our Knowledge Base article on recommended cipher suites.\",\n \"signal-cards.tls.info.cipher.unknown_md\": \"[](CIPHER_SUITE#:glossary) is unknown and cannot be verified as secure.\",\n \"signal-cards.tls.info.cipher.warning_md\": \"Cipher Suite `{cipher}` should be updated.\",\n \"signal-cards.tls.info.version.error_md\": \"[](SSL#:glossary){version} is used, which is considered insecure\",\n \"signal-cards.tls.info.version.good_md\": \"TLS version is secure ({version})\",\n \"signal-cards.tls.info.version.missing_md\": \"You are not using TLS\",\n \"signal-cards.tls.info.version.missing_subtext\": \"As a result the contents of your message can easily be snooped by people who are not your intended recipients.\",\n \"signal-cards.tls.info.version.unknown_md\": \"Unknown TLS version ({value})\",\n \"signal-cards.tls.info.version.warning_md\": \"TLS version should be updated from {current} to v1.2\",\n \"signal-description.THREATINV_DOMAIN_ANALYZER_NO_THREATS_md\": \"Domain was checked against several of trusted spammers database, web-mail transfer agents, botnet resources, phishers, or Non-reputation source: No suspicious activity.\",\n \"signal-description.THREATINV_NO_THREATS_md\": \"The results of the Threat Intelligence check help to identify suspicious domains or email that should be blocked. It also displays any vulnerability issues you might face.\",\n \"temporary-error-setup\": \"A temporary error occurred when analyzing your setup.\",\n unknown: \"Unknown\",\n // -------------------------------------------------------------------------\n // Glossary labels (plain-text equivalents of DS React glossary components)\n // -------------------------------------------------------------------------\n \"glossary.from\": \"From\",\n \"glossary.version\": \"Version\",\n \"glossary.mode\": \"Mode\",\n \"glossary.mx\": \"MX\",\n \"glossary.max-age\": \"Max Age\",\n \"glossary.tls-rpt-record\": \"TLS-RPT Record\",\n \"glossary.mta-sts-record\": \"MTA-STS Record\",\n \"glossary.mta-sts-policy-file\": \"MTA-STS Policy File\",\n \"glossary.dkim-signing-domain\": \"DKIM Signing Domain\",\n \"glossary.spf-domain\": \"SPF Domain\",\n \"glossary.spf-domains\": \"SPF Domains\",\n // -------------------------------------------------------------------------\n // MTA-STS section titles + info/extracted keys\n // -------------------------------------------------------------------------\n \"section-titles.tls-rpt-dns-record\": \"Your TLS-RPT DNS Record\",\n \"section-titles.mta-sts-dns-record\": \"Your MTA-STS DNS Record\",\n \"section-titles.mta-sts-policy-config\": \"Your MTA-STS Policy Configuration\",\n \"signal-cards.mta-sts.title\": \"MTA-STS\",\n \"signal-cards.mta-sts.txt-published-policy-on-domain_md\": \"[](TXT_RECORD#:glossary) published on `{policyDomain}`\",\n \"signal-cards.mta-sts.no-txt-published-policy-on-domain_md\": \"No [](TXT_RECORD#:glossary) published on `{policyDomain}`\",\n \"signal-cards.mta-sts.record-missing_md\": \"**[](MTA_STS_POLICY_FILE#:glossary)** **Missing.** [Learn how to fix it](https://community.redsift.com/s/article/000001035)\",\n \"signal-cards.mta-sts.elements-missing_md\": \"**[](MTA_STS_POLICY_FILE#:glossary)** **Some elements missing.** [Learn how to fix it](https://community.redsift.com/s/article/000001035)\",\n \"signal-cards.mta-sts.mta-policy-mode-invalid_md\": \"MTA-STS Policy mode is set to **{mode}** which is invalid\",\n \"signal-cards.mta-sts.mta-policy-version-invalid_md\": \"MTA-STS Policy version is set to **{version}** which is invalid\",\n \"signal-cards.mta-sts.mta-certificate-at-risk_md\": \"SSL certificate cannot be renewed automatically\",\n \"signal-cards.mta-sts.mta-certificate-not-issued_md\": \"SSL certificate has not been issued yet\",\n \"signal-cards.mta-sts.mta-certificate-add-to-dns\": \"Please add the entries below to your DNS record, to ensure the SSL certificate is automatically renewed\",\n \"signal-cards.mta-sts.mta-certificate-add-to-caa\": \"Please add the CAA below to the CAA list in your DNS record, to ensure the SSL certificate is automatically renewed\",\n \"signal-cards.mta-sts.certificate-expiry\": \"Certificate expires: {expiry}\",\n // -------------------------------------------------------------------------\n // SubDo section title\n // -------------------------------------------------------------------------\n \"section-titles.subdo-check\": \"Subdomain Takeover Check\",\n // -------------------------------------------------------------------------\n // AMP extracted items\n // -------------------------------------------------------------------------\n \"extracted-dns-short\": \"DNS Record\",\n // -------------------------------------------------------------------------\n // Google/Yahoo Compliance sections\n // -------------------------------------------------------------------------\n \"card.google-yahoo-compliance.section.spf-dkim.header\": \"SPF and DKIM\",\n \"card.google-yahoo-compliance.section.spf-dkim.spf.success_md\": \"[](SPF#:glossary) evaluation passed\",\n \"card.google-yahoo-compliance.section.spf-dkim.spf.error_md\": \"[](SPF#:glossary) evaluation failed\",\n \"card.google-yahoo-compliance.section.spf-dkim.dkim.success_md\": \"[](DKIM#:glossary) evaluation passed\",\n \"card.google-yahoo-compliance.section.spf-dkim.dkim.error_md\": \"[](DKIM#:glossary) evaluation failed\",\n \"card.google-yahoo-compliance.section.spf-dkim-alignment.header\": \"SPF or DKIM Alignment\",\n \"card.google-yahoo-compliance.section.spf-dkim-alignment.align-spf.success_md\": \"[](SPF_DOMAIN#:glossary) and [](FROM#:glossary) are aligned. The policy is [{policy}](SPF_ALIGNMENT#:glossary).\",\n \"card.google-yahoo-compliance.section.spf-dkim-alignment.align-spf.error_md\": \"[](SPF_DOMAIN#:glossary) and [](FROM#:glossary) are not aligned. The policy is [{policy}](SPF_ALIGNMENT#:glossary).\",\n \"card.google-yahoo-compliance.section.spf-dkim-alignment.align-dkim.success_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) DKIM signing domain and [](FROM#:glossary) are aligned. The policy is [{policy}](DKIM_ALIGNMENT#:glossary).\",\n \"card.google-yahoo-compliance.section.spf-dkim-alignment.align-dkim.error_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) DKIM signing domain and [](FROM#:glossary) are not aligned. The policy is [{policy}](DKIM_ALIGNMENT#:glossary).\",\n \"card.google-yahoo-compliance.section.dmarc.header\": \"DMARC\",\n \"card.google-yahoo-compliance.section.dmarc.evaluation.success_md\": \"[](DMARC#:glossary) evaluation passed\",\n \"card.google-yahoo-compliance.section.dmarc.evaluation.error_md\": \"[](DMARC#:glossary) evaluation failed\",\n \"card.google-yahoo-compliance.section.dmarc.policy.success_md\": \"[](DMARC_POLICY#:glossary) {policy}.\",\n \"card.google-yahoo-compliance.section.dmarc.policy.error_md\": \"Policy **is not set**. It should be set as [](DMARC_POLICY#:glossary) none, quarantine, or reject.\",\n \"card.google-yahoo-compliance.section.fcrdns.header\": \"FCrDNS\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip.success_md\": \"[](SENDER_IP#:glossary) matches the [](A_RECORD#:glossary) of the [](PTR_RECORD#:glossary) in both directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip.error_md\": \"[](SENDER_IP#:glossary) does not match the [](A_RECORD#:glossary) of the [](PTR_RECORD#:glossary) in both directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip.warning_md\": \"[](SENDER_IP#:glossary) does not match the [](A_RECORD#:glossary) of the [](PTR_RECORD#:glossary) in both directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.ehlo.success_md\": \"The [](EHLO#:glossary) matches the [](PTR_RECORD#:glossary) of the [](A_RECORD#:glossary) in both directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.ehlo.error_md\": \"The [](EHLO#:glossary) does not match the [](PTR_RECORD#:glossary) of the [](A_RECORD#:glossary) in both directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.ehlo.warning_md\": \"The [](EHLO#:glossary) does not match the [](PTR_RECORD#:glossary) of the [](A_RECORD#:glossary) in both directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip-matches-ehlo-a-record.success_md\": \"[](SENDER_IP#:glossary) matches the [](A_RECORD#:glossary) of the [](EHLO#:glossary) in both directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip-matches-ehlo-a-record.error_md\": \"[](SENDER_IP#:glossary) does not match the [](A_RECORD#:glossary) of the [](EHLO#:glossary) in both directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip-matches-ehlo-a-record.warning_md\": \"[](SENDER_IP#:glossary) does not match the [](A_RECORD#:glossary) of the [](EHLO#:glossary) in both directions.\",\n \"card.google-yahoo-compliance.section.reputation.header\": \"Spam Rate\",\n \"card.google-yahoo-compliance.section.reputation.summary_md\": \"Requirement: **Low reported spam rate**\",\n \"card.google-yahoo-compliance.section.reputation.information_md\": \"Microsoft, Google and Yahoo require spam rates to be below 0.3%. To check your rates, consult [Microsoft's Sender Support](https://sendersupport.olc.protection.outlook.com/pm/Postmaster), [Google's Postmaster Tools](https://gmail.com/postmaster) or [Yahoo's Complaint Feedback Loop program](https://senders.yahooinc.com/complaint-feedback-loop/).\",\n \"card.google-yahoo-compliance.section.tls.header\": \"TLS\",\n \"card.google-yahoo-compliance.section.tls.evaluation.success_md\": \"[](TLS#:glossary) TLS ({version}) connection is being used.\",\n \"card.google-yahoo-compliance.section.tls.evaluation.warning_md\": \"[](TLS#:glossary) TLS ({version}) is outdated. TLS 1.2+ is required for compliance.\",\n \"card.google-yahoo-compliance.section.tls.evaluation.error_md\": \"[](TLS#:glossary) TLS connection is **not** being used.\",\n \"card.google-yahoo-compliance.section.one-click-unsub.header\": \"One-click unsubscribe\",\n \"card.google-yahoo-compliance.section.one-click-unsub.evaluation.success_md\": \"One-click unsubscribe link is present.\",\n \"card.google-yahoo-compliance.section.one-click-unsub.evaluation.error_md\": \"One-click unsubscribe link **is not** present.\",\n \"card.google-yahoo-compliance.section.one-click-unsub.evaluation.warning\": \"Marketing and subscribed messages only: one-click unsubscribe is missing.\"\n },\n \"fr-FR\": {\n \"card.amp.align-dkim-fail_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) et [](FROM#:glossary) ne sont pas align\\xE9s. La politique est [{dkimPolicy}](DKIM_ALIGNMENT#:glossary).\",\n \"card.amp.align-dkim_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) et [](FROM#:glossary) sont align\\xE9s. La politique est [{dkimPolicy}](DKIM_ALIGNMENT#:glossary).\",\n \"card.amp.dkim-failed_md\": \"**[](DKIM#:glossary) authentification \\xE9chou\\xE9e.**\",\n \"card.amp.dkim-passed_md\": \"**[](DKIM#:glossary) authentification r\\xE9ussie.**\",\n \"card.amp.spf-failed_md\": \"**[](SPF#:glossary) authentification \\xE9chou\\xE9e.**\",\n \"card.amp.spf-passed_md\": \"**[](SPF#:glossary) authentification r\\xE9ussie.**\",\n \"card.dkim.canonicalization-simple_md\": \"La [](CANONICALIZATION#:glossary) {whichPart} est r\\xE9gl\\xE9e sur `simple`. Cela peut entra\\xEEner des probl\\xE8mes lors de la v\\xE9rification de la signature de l'email. Nous recommandons d'utiliser la valeur `relaxed` pour l'en-t\\xEAte et le corps du message. [En savoir plus](https://community.redsift.com/s/article/000001204) dans notre base de connaissances.\",\n \"card.dkim.code-eval-failed_md\": \"**Le code donn\\xE9 `{code}` ne peut pas \\xEAtre \\xE9valu\\xE9.**\",\n \"card.dkim.dkim-key-length-warning\": \"La longueur de la cl\\xE9 publique doit \\xEAtre d'au moins 1024 bits pour \\xEAtre conforme aux normes de s\\xE9curit\\xE9 actuelles. Si elle est plus courte, certains fournisseurs (par exemple Google) peuvent signaler que le test de v\\xE9rification DKIM a \\xE9chou\\xE9.\",\n \"card.dkim.error_md\": \"Statut de v\\xE9rification DKIM\",\n \"card.dkim.error_md_fail\": \"Le message a une signature valide, mais elle ne correspond pas \\xE0 la signature du domaine d'envoi. Cela signifie probablement que le message a \\xE9t\\xE9 modifi\\xE9 en cours de route.\",\n \"card.dkim.error_md_neutral\": \"Le message a \\xE9t\\xE9 sign\\xE9 mais la ou les signatures contiennent des erreurs de syntaxe.\",\n \"card.dkim.error_md_none\": \"Le message n'est pas sign\\xE9.\",\n \"card.dkim.error_md_outdated_algorithm\": \"Le message a \\xE9t\\xE9 sign\\xE9 avec une cl\\xE9 utilisant l'algorithme RSA-{algorithm}, plus ancien et moins s\\xFBr.\",\n \"card.dkim.error_md_pass\": \"Le message a \\xE9t\\xE9 sign\\xE9 et a pass\\xE9 les tests de v\\xE9rification.\",\n \"card.dkim.error_md_permerror\": \"La signature (ou une partie de celle-ci) est absente du message re\\xE7u. Cela indique que l'en-t\\xEAte de la signature du courriel est mal format\\xE9 ou qu'il a \\xE9t\\xE9 modifi\\xE9 apr\\xE8s l'envoi.\",\n \"card.dkim.error_md_policy\": \"Le message a \\xE9t\\xE9 sign\\xE9, mais un aspect de la ou des signatures n'a pas \\xE9t\\xE9 accept\\xE9.\",\n \"card.dkim.error_md_temperror\": \"Il y a eu un probl\\xE8me \\xE0 court terme lors de la v\\xE9rification de la signature du courriel. Cette erreur est temporaire, veuillez donc renvoyer l'e-mail plus tard.\",\n \"card.dkim.error_simple_canonicalization_md\": \"Canonicalisation simple d\\xE9tect\\xE9e\",\n \"card.dkim.error_simple_canonicalization_md_policy\": \"**Le message a une signature valide, mais elle ne correspond pas \\xE0 la signature du domaine d'envoi.\\n\\n\\n\\n**Veuillez noter** que votre service d'envoi d'emails utilise [](CANONICALIZATION#:glossary) simple pour les en-t\\xEAtes d'emails, ce qui n'est pas recommand\\xE9 et peut fausser le r\\xE9sultat de cette v\\xE9rification [](DKIM#:glossary). Voir ci-dessous comment modifier votre configuration pour adopter la m\\xE9thode recommand\\xE9e.\",\n \"card.dkim.eval-error-record-not-found_md\": \"**Un [](DKIM_SIGNATURE_HEADER#:glossary) n'est pas pr\\xE9sent dans votre email.**\",\n \"card.dkim.eval-error-record-not-found_subtext_md\": \"Veuillez configurer DKIM pour votre service d'envoi de courriels afin de commencer \\xE0 signer les courriels. Notre [base de connaissances](https://community.redsift.com/s/global-search/dkim) fournit des instructions pour configurer DKIM pour de nombreux fournisseurs.\",\n \"card.dkim.eval-error-validation-error_md\": \"**La v\\xE9rification de la signature a \\xE9chou\\xE9.\",\n \"card.dkim.eval-error-validation-error_subtext_md\": \"Il s'agit de l'erreur brute :\\n\\n```{error}```\",\n \"card.dkim.failed_md\": \"**[](DKIM#:glossary) \\xE9valuation \\xE9chou\\xE9e.**\",\n \"card.dkim.invalid-txt-record-published-selector_md\": \"[](TXT_RECORD#:glossary) vide ou invalide publi\\xE9 pour le s\\xE9lecteur `{fullSelector}`.\",\n \"card.dkim.invalid_md\": \"**[](DKIM#:glossary) status is invalid.**\",\n \"card.dkim.no-dkim-email-header_md\": \"Non [](DKIM_SIGNATURE_HEADER#:glossary)\",\n \"card.dkim.no-txt-record-published-selector_md\": \"Aucun [](TXT_RECORD#:glossary) publi\\xE9 pour le s\\xE9lecteur `{fullSelector}`.\",\n \"card.dkim.not-present_md\": \"Non pr\\xE9sent\",\n \"card.dkim.passed_md\": \"**[](DKIM#:glossary) \\xE9valuation r\\xE9ussie.**\",\n \"card.dkim.prompt-dkim-txt-record-publish_md\": \"Veuillez publier un [](TXT_RECORD#:glossary) valide dans votre DNS pour le s\\xE9lecteur.\",\n \"card.dkim.recommend-ttl-max-600_md\": \"Il est recommand\\xE9 de ne pas fixer la valeur TTL \\xE0 plus de 600 secondes.\",\n \"card.dkim.txt-record-published-on-dkim-url_md\": \"[](TXT_RECORD#:glossary) publi\\xE9 sur `{selector}._domainkey.{signerDomain}`\",\n \"card.dkim.txt-record-ttl-600-warning_md\": \"Le time-to-live (TTL) pour le [](TXT_RECORD#:glossary) est sup\\xE9rieur \\xE0 600 secondes. Lors de la mise \\xE0 jour de l'enregistrement, les serveurs DNS peuvent encore afficher l'ancienne valeur pour la dur\\xE9e du TTL avant de mettre \\xE0 jour la valeur. L'impact est qu'il se peut que vous deviez attendre que le changement prenne effet pendant ce laps de temps.\",\n \"card.dkim.unavailable-try-later_md\": \"Veuillez essayer d'envoyer un autre courriel plus tard.\",\n \"card.dkim.unavailable_md\": \"**[](DKIM#:glossary) \\xE9valuation temporairement indisponible.**\",\n \"card.dmarc.domain-aligned\": \"Le domaine est align\\xE9 avec le domaine exp\\xE9diteur. Il peut contribuer \\xE0 la r\\xE9ussite de DMARC.\",\n \"card.dmarc.domain-not-aligned\": \"Le domaine n'est pas align\\xE9 avec le domaine exp\\xE9diteur. Il ne peut pas contribuer \\xE0 la r\\xE9ussite de DMARC.\",\n \"card.dmarc.error.dns-timeout\": \"D\\xE9lai d'attente DNS lors de la recherche de l'enregistrement DMARC\",\n \"card.dmarc.error.invalid-pct-value\": \"La valeur pct doit \\xEAtre entre 0 et 100\",\n \"card.dmarc.error.invalid-policy-value\": \"Valeur de politique invalide dans l'enregistrement DMARC\",\n \"card.dmarc.error.invalid-rua-format\": \"Format rua invalide - doit \\xEAtre une URI mailto:\",\n \"card.dmarc.error.invalid-version\": \"Version DMARC invalide - doit \\xEAtre DMARC1\",\n \"card.dmarc.error.misplaced-policy\": \"Politique DMARC situ\\xE9e au mauvais sous-domaine\",\n \"card.dmarc.error.nxdomain\": \"NXDOMAIN - le domaine n'existe pas\",\n \"card.dmarc.error.policy-not-found\": \"Politique DMARC introuvable\",\n \"card.dmarc.error.syntax-error\": \"Erreur de syntaxe dans l'enregistrement DMARC\",\n \"card.dmarc.error.unknown\": \"Erreur inconnue\",\n \"card.dmarc.error.unrecognized-tag\": \"Balise DMARC non reconnue trouv\\xE9e\",\n \"card.dmarc.error_md\": \"\",\n \"card.dmarc.error_md_none\": \"**Aucun enregistrement de politique DMARC n'est publi\\xE9.**\",\n \"card.dmarc.error_md_pass\": \"**La validation du DMARC est r\\xE9ussie.**\",\n \"card.dmarc.error_md_permerror\": \"**Une erreur permanente s'est produite lors de l'\\xE9valuation DMARC**.\",\n \"card.dmarc.error_md_temperror\": \"**Il y a eu une erreur temporaire dans l'\\xE9valuation de la politique DMARC**.\",\n \"card.dnssec.domain-protected_fail\": \"Le domaine n'est pas prot\\xE9g\\xE9 par DNSSEC.\",\n \"card.dnssec.domain-protected_pass\": \"Le domaine est prot\\xE9g\\xE9 par DNSSEC.\",\n \"card.fcrdns.ehlo-match-ptr-all_md\": \"Le [](EHLO#:glossary) correspond au [](PTR_RECORD#:glossary) du [](A_RECORD#:glossary) dans les deux sens.\",\n \"card.fcrdns.ehlo-no-match-ptr-all_md\": \"Le [](EHLO#:glossary) ne correspond pas au [](PTR_RECORD#:glossary) du [](A_RECORD#:glossary) dans les deux sens.\",\n \"card.fcrdns.ehlo-not-valid_md\": \"Le domaine [](EHLO#:glossary) n'est pas valide. Pour une meilleure s\\xE9curit\\xE9, nous vous recommandons de configurer votre service d'envoi d'e-mails de mani\\xE8re \\xE0 ce que le domaine soit correctement d\\xE9fini.\",\n \"card.fcrdns.no-ehlo_md\": \"[](EHLO#:glossary) n'est pas d\\xE9fini, n'est pas valide ou pointe vers une IP non publique, les tests ont donc \\xE9t\\xE9 ignor\\xE9s. Nous vous recommandons de configurer votre service d'envoi de courrier \\xE9lectronique de mani\\xE8re \\xE0 ce que le [](EHLO#:glossary) soit correctement d\\xE9fini, ce qui am\\xE9liorera votre niveau de s\\xE9curit\\xE9.\",\n \"card.fcrdns.sender-ip-match-a-ehlo-all_md\": \"Le [](SENDER_IP#:glossary) correspond au [](A_RECORD#:glossary) du [](EHLO#:glossary) dans les deux sens.\",\n \"card.fcrdns.sender-ip-match-ptr-all_md\": \"Le [](SENDER_IP#:glossary) correspond au [](A_RECORD#:glossary) du [](PTR_RECORD#:glossary) dans les deux sens.\",\n \"card.fcrdns.sender-ip-no-match-ehlo-all_md\": \"Le [](SENDER_IP#:glossary) ne correspond pas au [](A_RECORD#:glossary) du [](EHLO#:glossary).\",\n \"card.fcrdns.sender-ip-no-match-ptr-all_md\": \"Le [](SENDER_IP#:glossary) ne correspond pas au [](A_RECORD#:glossary) du [](PTR_RECORD#:glossary) dans les deux directions.\",\n \"card.fcrdns.sender-ip-ptr-record-no-match-ehlo_md\": \"Le [](SENDER_IP#:glossary) du [](PTR_RECORD#:glossary) ne correspond pas au [](EHLO#:glossary).\",\n \"card.spf.eval-error-infinite-recursion-detected_md\": \"**R\\xE9curion de recherche infinie d\\xE9tect\\xE9e**\",\n \"card.spf.eval-error-infinite-recursion-detected_subtext_md\": \"L'une des d\\xE9clarations `include:` de votre enregistrement SPF est \\xE0 l'origine d'une r\\xE9cursion de recherche infinie. Veuillez supprimer le `include:` \\xE0 l'origine de la r\\xE9cursion pour que l'enregistrement SPF fonctionne.\",\n \"card.spf.eval-error-limit-exceeded_md\": \"**Trop de recherches DNS**\",\n \"card.spf.eval-error-limit-exceeded_subtext_md\": \"La sp\\xE9cification SPF limite le nombre de consultations DNS \\xE0 10, nombre que vous d\\xE9passez et qui peut faire \\xE9chouer l'authentification SPF.\\n\\nVeuillez consulter [cet article de la base de connaissances] (https://community.redsift.com/s/article/000001129) pour trouver une solution \\xE0 ce probl\\xE8me.\",\n \"card.spf.eval-error-record-not-found_md\": \"**Aucun enregistrement SPF n'a \\xE9t\\xE9 trouv\\xE9**\",\n \"card.spf.eval-error-record-not-found_subtext_md\": \"Veuillez ajoutez votre SPF [](TXT_RECORD#:glossary) dans votre DNS.\\n\\nNotre [base de connaissances](https://community.redsift.com/s/global-search/SPF%20DKIM) fournit des instructions pour configurer SPF pour de nombreux fournisseurs.\",\n \"card.spf.eval-error-too-many-spf-records_md\": \"**Trop d'enregistrements SPF trouv\\xE9s**\",\n \"card.spf.eval-error-too-many-spf-records_md_subtext\": \"Veuillez n'utiliser qu'une seule entr\\xE9e SPF.\",\n \"card.spf.eval-error-wrong-syntax_md\": \"**Le SPF [FULL](TXT_RECORD#:glossary) a une erreur de syntaxe**\",\n \"card.spf.eval-error-wrong-syntax_subtext_md\": \"Veuillez v\\xE9rifier si la syntaxe est correcte et mettre \\xE0 jour l'enregistrement dans votre DNS. L'une des raisons possibles est une erreur de copier-coller du contenu de l'enregistrement.\",\n \"card.spf.eval-failed_md\": \"**[](SPF#:glossary) \\xE9valuation \\xE9chou\\xE9e**\",\n \"card.spf.eval-failed_md_subtext\": \"L'exp\\xE9diteur n'est pas autoris\\xE9 \\xE0 envoyer des courriels en votre nom.\",\n \"card.spf.eval-neutral_md\": \"**La v\\xE9rification SPF n'a pas permis d'affirmer que l'exp\\xE9diteur est autoris\\xE9**\",\n \"card.spf.eval-not-possible_md\": \"**L'\\xE9valuation de la FSP n'est pas possible**\",\n \"card.spf.eval-not-possible_md_subtext-entry\": \"Veuillez contacter votre administrateur DNS pour revoir le SPF [](TXT_RECORD#:glossary) :\",\n \"card.spf.eval-not-possible_md_subtext-error\": \"Veuillez contacter votre administrateur DNS afin qu'il recherche la ou les erreurs :\",\n \"card.spf.eval-passed_md\": \"**[](SPF#:glossary) v\\xE9rification r\\xE9ussie**\",\n \"card.spf.eval-soft-failed_md\": \"**[](SPF#:glossary) \\xE9valuation soft fail**\",\n \"card.spf.eval-soft-failed_md_subtext\": \"L'exp\\xE9diteur n'est probablement pas autoris\\xE9, mais aucune politique plus stricte n'a \\xE9t\\xE9 publi\\xE9e.\",\n \"card.spf.unavailable_md\": \"**[](SPF#:glossary) \\xE9valuation temporairement indisponible**\",\n // BIMI keys\n \"card.bimi.cert-forbidden_md\": \"Votre certificat semble \\xEAtre derri\\xE8re un syst\\xE8me de protection anti-bot. En savoir plus et comment r\\xE9soudre le probl\\xE8me [ici](https://knowledge.ondmarc.redsift.com/en/articles/8047013-ondmarc-cannot-fetch-my-bimi-logo-or-certificate)\",\n \"card.bimi.could-not-fetch_md\": \"\\xC9chec de la r\\xE9cup\\xE9ration de **[](BIMI_RECORD#:glossary)**\",\n \"card.bimi.dmarc-compliance-title\": \"Conformit\\xE9 DMARC\",\n \"card.bimi.dmarc-compliance-pass_md\": \"Le domaine est conforme \\xE0 DMARC\",\n \"card.bimi.dmarc-compliance-fail_md\": \"Le domaine n'est pas conforme \\xE0 DMARC\",\n \"card.bimi.errors.bimi-error-cert-not-valid\": \"Le certificat n'est pas valide\",\n \"card.bimi.errors.bimi-error-incorrect-v\": \"La valeur de l'enregistrement v doit \\xEAtre BIMI1 ;\",\n \"card.bimi.errors.bimi-error-invalid-a\": \"La valeur de l'enregistrement a doit \\xEAtre une URL valide\",\n \"card.bimi.errors.bimi-error-invalid-l\": \"La valeur de l'enregistrement l doit \\xEAtre une URL valide\",\n \"card.bimi.errors.bimi-error-invalid-record\": \"L'enregistrement BIMI est invalide\",\n \"card.bimi.errors.bimi-error-missing-a\": \"Enregistrer une valeur \\xE0 d\\xE9finir\",\n \"card.bimi.errors.bimi-error-missing-l\": \"La valeur de l'enregistrement doit \\xEAtre d\\xE9finie\",\n \"card.bimi.errors.bimi-error-missing-v\": \"La valeur de l'enregistrement v doit \\xEAtre d\\xE9finie\",\n \"card.bimi.errors.bimi-error-unknown\": \"erreur inconnue\",\n \"card.bimi.errors.bimi-error-unsupported-values\": \"La valeur de l'enregistrement v doit \\xEAtre d\\xE9finie\",\n \"card.bimi.logoErrors.invalid-svg_md\": \"**[](VMC#:glossary)** SVG non valide. Le logo du certificat ne peut pas \\xEAtre converti en un SVG valide.\",\n \"card.bimi.logoErrors.invalid-svg-attribute_md\": \"**[](VMC#:glossary)** Attribut SVG invalide trouv\\xE9.\",\n \"card.bimi.logoErrors.invalid-svg-attribute-xy_md\": \"**[](VMC#:glossary)** Attribut invalide. **x** et/ou **y** ne sont pas autoris\\xE9s\",\n \"card.bimi.logoErrors.invalid-svg-content-type_md\": \"**[](VMC#:glossary)** Type de contenu SVG invalide. Doit \\xEAtre **image/svg+xml**\",\n \"card.bimi.logoErrors.invalid-svg-element-foreign-object_md\": \"**[](VMC#:glossary)** \\xC9l\\xE9ment SVG **foreing-object** invalide trouv\\xE9.\",\n \"card.bimi.logoErrors.invalid-svg-element-image_md\": \"**[](VMC#:glossary)** \\xC9l\\xE9ment SVG **image** invalide trouv\\xE9.\",\n \"card.bimi.logoErrors.invalid-svg-element-link_md\": \"**[](VMC#:glossary)** \\xC9l\\xE9ment SVG **link** invalide trouv\\xE9.\",\n \"card.bimi.logoErrors.invalid-svg-element-script_md\": \"**[](VMC#:glossary)** \\xC9l\\xE9ment SVG **script** invalide trouv\\xE9.\",\n \"card.bimi.logoErrors.invalid-svg-element-style_md\": \"**[](VMC#:glossary)** \\xC9l\\xE9ment SVG **style** invalide trouv\\xE9.\",\n \"card.bimi.logoErrors.invalid-svg-id-name_md\": \"**[](VMC#:glossary)** L'attribut id a un nom invalide.\",\n \"card.bimi.logoErrors.invalid-svg-missing-title_md\": \"**[](VMC#:glossary)** Titre manquant dans le svg.\",\n \"card.bimi.logoErrors.invalid-svg-profile_md\": \"**[](VMC#:glossary)** Profil SVG invalide. Doit \\xEAtre **tiny-ps**\",\n \"card.bimi.logoErrors.invalid-svg-reference_md\": \"**[](VMC#:glossary)** R\\xE9f\\xE9rence invalide dans le svg.\",\n \"card.bimi.logoErrors.invalid-svg-root-element_md\": \"**[](VMC#:glossary)** \\xC9l\\xE9ment root invalide. Doit \\xEAtre **svg**\",\n \"card.bimi.logoErrors.invalid-svg-size_md\": \"**[](VMC#:glossary)** Taille invalide. Le SVG doit \\xEAtre jusqu'\\xE0 **32k**\",\n \"card.bimi.logoErrors.invalid-svg-version_md\": \"**[](VMC#:glossary)** Version SVG invalide. Devrait \\xEAtre **1.2**\",\n \"card.bimi.logoErrors.invalid-xml-12_md\": '**[](VMC#:glossary)** Version XML invalide \"1.2\"; Devrait \\xEAtre **1.0**',\n \"card.bimi.logoErrors.logo-and-evidence-mismatch_md\": \"**[](VMC#:glossary)** Logo sur l'enregistrement et sur le certificat ne correspondent pas\",\n \"card.bimi.logoErrors.logo-extract-error_md\": \"**[](VMC#:glossary)** Erreur lors de l'extraction du logo\",\n \"card.bimi.logoErrors.unknown-svg-error_md\": \"**[](VMC#:glossary)** Erreur inconnue lors de la validation du SVG\",\n \"card.bimi.no-txt-published-policy-on-domain_md\": \"Aucun [](TXT_RECORD#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"card.bimi.pemErrors.cert-bad-date_md\": \"**[](VMC#:glossary)** Le certificat a expir\\xE9\",\n \"card.bimi.pemErrors.cert-bad-signature_md\": \"**[](VMC#:glossary)** Le certificat a une mauvaise signature\",\n \"card.bimi.pemErrors.cert-not-file_md\": \"**[](VMC#:glossary)** Le certificat n'est pas un fichier\",\n \"card.bimi.pemErrors.cert-not-found_md\": \"**[](VMC#:glossary)** Certificat non trouv\\xE9\",\n \"card.bimi.pemErrors.cert-not-https_md\": \"**[](VMC#:glossary)** Le certificat n'utilise pas le protocole HTTPS\",\n \"card.bimi.pemErrors.cert-not-pem_md\": \"**[](VMC#:glossary)** Le certificat n'est pas un fichier PEM\",\n \"card.bimi.pemErrors.cert-not-url_md\": \"**[](VMC#:glossary)** Le certificat n'est pas une url\",\n \"card.bimi.pemErrors.cert-not-valid_md\": \"**[](VMC#:glossary)** Le certificat n'est pas valide\",\n \"card.bimi.pemErrors.cert-unknown-error_md\": \"**[](VMC#:glossary)** Le certificat a une erreur inconnue\",\n \"card.bimi.record-declination_md\": \"**[](BIMI_RECORD#:glossary)** Pr\\xE9senter et contenir une **d\\xE9claration valide de publication**\",\n \"card.bimi.record-failed_md\": \"**[](BIMI_RECORD#:glossary)** **Pr\\xE9sent** mais avec des erreurs\",\n \"card.bimi.record-info_md\": \"BIMI exige que les domaines soient conformes \\xE0 DMARC, ce qui signifie une politique DMARC minimale de **p=quarantine at pct=100 (and sp <> none)** [Apprenez comment r\\xE9soudre ce probl\\xE8me](https://community.redsift.com/s/article/000001196)\",\n \"card.bimi.record-invalid_md\": \"**[](BIMI_RECORD#:glossary)** **est invalide**\",\n \"card.bimi.record-missing_md\": \"**[](BIMI_RECORD#:glossary)** **Missing.** [Learn how to fix it](https://community.redsift.com/s/article/000001130)\",\n \"card.bimi.record-no-cert_md\": \"**[](BIMI_RECORD#:glossary)** **Certificat non trouv\\xE9**\",\n \"card.bimi.record-passed_md\": \"**[](BIMI_RECORD#:glossary)** **Pr\\xE9sent et conforme**\",\n \"card.bimi.record-status-title\": \"Statut de l'enregistrement BIMI\",\n \"card.bimi.record-svg-added-from-itag-invalid_md\": \"**[](BIMI_RECORD#:glossary)** image avec des erreurs de **[](ITAG#:glossary)** [svg-url]({url})\",\n \"card.bimi.record-svg-added-from-itag-valid_md\": \"**[](BIMI_RECORD#:glossary)** ajout\\xE9 avec succ\\xE8s \\xE0 partir de **[](ITAG#:glossary)** [svg-url]({url})\",\n \"card.bimi.record-title\": \"Enregistrement BIMI\",\n \"card.bimi.record-unknown-error_md\": \"**[](BIMI_RECORD#:glossary)** **Pr\\xE9sent avec des erreurs**\",\n \"card.bimi.safe-svg-title\": \"SVG s\\xFBr\",\n \"card.bimi.svg-error-fallback_md\": \"**[](VMC#:glossary)** {error}\",\n \"card.bimi.svg-missing-title_md\": \"**[](BIMI_RECORD#:glossary) Logo manquant:** SVG introuvable dans le dossier BIMI\",\n \"card.bimi.txt-published-policy-on-domain_md\": \"[](TXT_RECORD#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"card.bimi.vmc-correctly-title_md\": \"**[](VMC#:glossary)** certificat de **[](ATAG#:glossary)** [pem-url]({url}) est valide\",\n \"card.bimi.vmc-invalid-title_md\": \"**[](VMC#:glossary)** certificat de **[](ATAG#:glossary)** [pem-url]({url}) est invalide\",\n \"card.bimi.vmc-missing-title_md\": \"**[](VMC#:glossary) certificat manquant (actuellement facultatif)** [Lean comment l'ajouter](https://community.redsift.com/s/article/000001130)\",\n \"card.bimi.vmc-not-vmc-title_md\": \"**[](VMC#:glossary)** certificat de **[](ATAG#:glossary)** [pem-url]({url}) n'est pas un VMC\",\n \"card.bimi.vmc-title\": \"Certificat VMC\",\n \"card.bimi.vmc.assertionMark_md\": \"**Marque d'assertion :** {assertionMark}\",\n \"card.bimi.vmc.expired-date_md\": \"Expir\\xE9 le {date}\",\n \"card.bimi.vmc.expiry-date_md\": \"**Expire le:** {date} ({daysLeft} jours restants)\",\n \"card.bimi.vmc.issuer_md\": \"**Issuer : {issuer}**\",\n \"card.bimi.vmc.trademarkAuthority_md\": \"**Autorit\\xE9 de la marque : {trademarkAuthority}**\",\n \"card.bimi.vmc.valid-for-domain_md\": \"**Valide pour les domaines :** `{domains}`\",\n // BIMI section titles\n \"section-titles.bimi-domain\": \"Domaines DMARC\",\n \"section-titles.bimi-policy\": \"Votre politique BIMI\",\n // Domain Analyzer DKIM keys\n \"card.dkim.cname-record-published-on-dkim-url_md\": \"[](CNAME_RECORD#:glossary) publi\\xE9 sur `{selector}._domainkey.{signerDomain}`\",\n \"card.dkim.no-selectors-found_md\": \"Aucun s\\xE9lecteur DKIM n'a \\xE9t\\xE9 trouv\\xE9 pour ce domaine. Veuillez ajouter vos s\\xE9lecteurs DKIM pour commencer la surveillance.\",\n \"card.dkim.no-txt-record-published-at_md\": \"Aucun [](TXT_RECORD#:glossary) publi\\xE9 \\xE0 `{domain}`.\",\n \"card.dkim.selector\": \"S\\xE9lecteur\",\n \"card.dkim.selector-statuses.fail_one\": \"{count} s\\xE9lecteur \\xE9chou\\xE9\",\n \"card.dkim.selector-statuses.fail_other\": \"{count} s\\xE9lecteurs \\xE9chou\\xE9s\",\n \"card.dkim.selector-statuses.pass_one\": \"{count} s\\xE9lecteur r\\xE9ussi\",\n \"card.dkim.selector-statuses.pass_other\": \"{count} s\\xE9lecteurs r\\xE9ussis\",\n \"card.dkim.selector-statuses.warning_one\": \"{count} s\\xE9lecteur avec des avertissements\",\n \"card.dkim.selector-statuses.warning_other\": \"{count} s\\xE9lecteurs avec des avertissements\",\n \"card.dkim.title\": \"S\\xE9lecteur DKIM\",\n // Domain Analyzer DKIM section titles\n \"section-titles.dkim-selector-records\": \"Enregistrements DNS DKIM\",\n \"section-titles.dkim-selector-details\": \"Configuration de la cl\\xE9\",\n \"section-titles.dkim-policy\": \"Votre politique DKIM\",\n // Domain Analyzer DKIM issue status detail keys\n \"statusDetails.no-dkim-public-key\": \"Aucune cl\\xE9 publique DKIM trouv\\xE9e\",\n \"statusDetails.invalid-dkim-public-key\": \"La cl\\xE9 publique DKIM est invalide\",\n \"statusDetails.invalid-dkim-algorithm\": \"Algorithme DKIM invalide\",\n \"statusDetails.invalid-dkim-version\": \"Version DKIM invalide\",\n \"statusDetails.missing-dkim-version\": \"La version DKIM est manquante\",\n \"statusDetails.weak-dkim\": \"La cl\\xE9 DKIM est faible (moins de 1024 bits)\",\n \"statusDetails.malformed-dkim\": \"L'enregistrement DKIM est malform\\xE9\",\n \"statusDetails.missing-dkim-v\": \"La balise de version DKIM est manquante\",\n \"statusDetails.duplicate-dkim\": \"Enregistrement DKIM en double trouv\\xE9\",\n \"statusDetails.no-dkim\": \"Aucun enregistrement DKIM trouv\\xE9\",\n \"statusDetails.missing-dkim\": \"L'enregistrement DKIM est manquant\",\n \"statusDetails.servfail-dkim\": \"\\xC9chec du serveur DNS lors de la recherche de l'enregistrement DKIM\",\n // Domain Analyzer SPF keys\n \"card.spf.passed_md\": \"**[](SPF#:glossary) authentification r\\xE9ussie.**\",\n \"card.spf.warnings_md\": \"**[](SPF#:glossary) probl\\xE8mes d'authentification d\\xE9tect\\xE9s :**\",\n \"card.spf.failed_md\": \"**[](SPF#:glossary) authentification \\xE9chou\\xE9e.**\",\n \"card.spf.has-dynamic-spf\": \"Utilisation du SPF dynamique\",\n \"card.spf.dns-count-lookup_md\": \"{count}/10 Recherches SPF\",\n \"card.spf.dns-count-lookup-greater-10_md\": \"**Les recherches SPF d\\xE9passent la limite de 10, ce qui entra\\xEEne un \\xE9chec SPF. Consultez notre fonctionnalit\\xE9 Dynamic SPF pour trouver une solution!**\",\n \"card.spf.dns-count-lookup-greater-10_md_no-dynamic-services\": \"**Les recherches SPF d\\xE9passent la limite de 10, ce qui entra\\xEEne un \\xE9chec SPF. Consultez notre fonctionnalit\\xE9 Dynamic SPF pour trouver une solution!**\",\n \"card.spf.dns-count-lookup-greater-10_md_has-external-includes\": \"**Les recherches SPF d\\xE9passent la limite de 10, ce qui entra\\xEEne un \\xE9chec SPF. Envisagez d'utiliser le SPF dynamique pour consolider vos includes.**\",\n \"card.spf.dns-count-lookup-greater-10_md_no-external-includes\": \"**Les recherches SPF d\\xE9passent la limite de 10, ce qui entra\\xEEne un \\xE9chec SPF.**\",\n \"card.spf.dns-count-lookup-warning_md\": \"Le nombre de recherches SPF approche de la limite de 10.\",\n \"card.spf.dns-count-lookup-warning_md_no-dynamic-services\": \"Le nombre de recherches SPF approche de la limite de 10. Consultez notre fonctionnalit\\xE9 Dynamic SPF pour trouver une solution!\",\n \"card.spf.dns-count-lookup-warning_md_has-external-includes\": \"Le nombre de recherches SPF approche de la limite de 10. Envisagez d'utiliser le SPF dynamique pour consolider vos includes.\",\n \"card.spf.dns-count-lookup-warning_md_no-external-includes\": \"Le nombre de recherches SPF approche de la limite de 10.\",\n \"card.spf.dns-count-void-lookups_md\": \"{count}/2 Recherches nulles\",\n \"card.spf.txt-published-policy-on-domain_md\": \"[](TXT_RECORD#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"card.spf.no-txt-published-policy-on-domain_md\": \"Aucun [](TXT_RECORD#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"card.subdo.found-warning_one\": \"{count} exp\\xE9diteur de sous-domaine d\\xE9tect\\xE9\",\n \"card.subdo.found-warning_other\": \"{count} exp\\xE9diteurs de sous-domaine d\\xE9tect\\xE9s\",\n \"card.subdo.button-name\": \"Voir dans le v\\xE9rificateur SPF\",\n \"card.subdo.spf-subdo-poisoned_md_one\": \"**{count}** inclusion compromise d\\xE9tect\\xE9e\",\n \"card.subdo.spf-subdo-poisoned_md_other\": \"**{count}** inclusions compromises d\\xE9tect\\xE9es\",\n \"card.threat-int.from-domain.found_md\": \"[](FROM#:glossary) {code} a \\xE9t\\xE9 trouv\\xE9 dans la base de donn\\xE9es {length}. Menaces list\\xE9es ci-dessous :\",\n \"card.threat-int.from-domain.not-found_md\": \"[](FROM#:glossary) {code} n'a **pas** \\xE9t\\xE9 trouv\\xE9 dans une base de donn\\xE9es.\",\n \"card.threat-int.sender-ip.found_md\": \"[](SENDER_IP#:glossary) {code} a \\xE9t\\xE9 trouv\\xE9 dans la base de donn\\xE9es {length}. Menaces list\\xE9es ci-dessous :\",\n \"card.threat-int.sender-ip.not-found_md\": \"[](SENDER_IP#:glossary) {code} n'a **pas** \\xE9t\\xE9 trouv\\xE9 dans une base de donn\\xE9es.\",\n \"card.urls.description\": \"Affiche toutes les URL extraites de l'e-mail. Ceci est utile si vous avez besoin de vous abonner via un lien au service que vous testez.\",\n \"card.urls.not-found_md\": \"Aucun URL n'a \\xE9t\\xE9 trouv\\xE9 dans ce courriel.\",\n \"card.urls.url_md\": \"[{url}]({url})\",\n \"extracted-email\": \"Extrait de votre courriel\",\n \"investigate:card.dmarc.align-dkim-fail_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) et [](FROM#:glossary) ne sont pas align\\xE9s. La politique est [{policy}](DKIM_ALIGNMENT#:glossary).\",\n \"investigate:card.dmarc.align-dkim-identical-no-policy_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) et [](FROM#:glossary) sont align\\xE9s car ils sont identiques. L'e-mail serait conforme s'il existait une politique [DMARC](DMARC#:glossary) valide.\",\n \"investigate:card.dmarc.align-dkim-no-policy_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) et [](FROM#:glossary) ne sont pas identiques. L'alignement ne peut pas \\xEAtre d\\xE9termin\\xE9 sans politique [DMARC](DMARC#:glossary).\",\n \"investigate:card.dmarc.align-dkim_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) et [](FROM#:glossary) sont align\\xE9s. La politique est [{policy}](DKIM_ALIGNMENT#:glossary).\",\n \"investigate:card.dmarc.align-spf-fail_md\": \"[](SPF_DOMAIN#:glossary) et [](FROM#:glossary) ne sont pas align\\xE9s. La politique est [{policy}](SPF_ALIGNMENT#:glossary).\",\n \"investigate:card.dmarc.align-spf-identical-no-policy_md\": \"[](SPF_DOMAIN#:glossary) et [](FROM#:glossary) sont align\\xE9s car ils sont identiques. L'e-mail serait conforme s'il existait une politique [DMARC](DMARC#:glossary) valide.\",\n \"investigate:card.dmarc.align-spf-no-policy_md\": \"[](SPF_DOMAIN#:glossary) et [](FROM#:glossary) ne sont pas identiques. L'alignement ne peut pas \\xEAtre d\\xE9termin\\xE9 sans politique [DMARC](DMARC#:glossary).\",\n \"investigate:card.dmarc.align-spf_md\": \"[](SPF_DOMAIN#:glossary) et [](FROM#:glossary) sont align\\xE9s. La politique est [{policy}](SPF_ALIGNMENT#:glossary).\",\n \"investigate:card.dmarc.all-emails-reported-only_md\": \"DMARC configur\\xE9 en mode rapport uniquement. Tous les courriels seront uniquement [REPORTED](DMARC_POLICY#:glossary).\",\n \"investigate:card.dmarc.all-emails-reported_md\": \"Tous les courriels seront [REPORTED](DMARC_POLICY#:glossary).\",\n \"investigate:card.dmarc.bad-policy_md_one\": \"**Le [FULL](DMARC_POLICY#:glossary) pr\\xE9sente l'erreur de syntaxe suivante:**.\",\n \"investigate:card.dmarc.bad-policy_md_other\": \"**Le [FULL](DMARC_POLICY#:glossary) pr\\xE9sente l'erreur de syntaxe suivante:**.\",\n \"investigate:card.dmarc.category-policy-good_md\": \"La politique de votre DNS est conforme \\xE0 la sp\\xE9cification DMARC.\",\n \"investigate:card.dmarc.dkim-failed_md\": \"**[](DKIM#:glossary) authentification \\xE9chou\\xE9e.**\",\n \"investigate:card.dmarc.dkim-none_md\": \"**[](DKIM#:glossary) authentification \\xE9chou\\xE9e.**\",\n \"investigate:card.dmarc.dkim-passed_md\": \"**[](DKIM#:glossary) authentification r\\xE9ussie.**\",\n \"investigate:card.dmarc.dmarc-failed_md\": \"Les param\\xE8tres [](DMARC#:glossary) **ne sont pas** conformes \\xE0 BIMI\",\n \"investigate:card.dmarc.dmarc-no-rua_md\": \"[](DMARC#:glossary) n'a pas d'**adresse de rapport agr\\xE9g\\xE9** (rua).\",\n \"investigate:card.dmarc.dmarc-passed_md\": \"[](DMARC#:glossary) **r\\xE9ussi**\",\n \"investigate:card.dmarc.dmarc-passed-no-rua_md\": \"[](DMARC#:glossary) est conforme \\xE0 BIMI **MAIS** n'a pas d'**adresse de rapport agr\\xE9g\\xE9** (rua).\",\n \"investigate:card.dmarc.dmarc-policy_md\": \"**[PERCENT {percent}%](PCT#:glossary)** des courriels non autoris\\xE9s seront soumis \\xE0 la politique **[{policy}](DMARC_POLICY#:glossary)**.\",\n \"investigate:card.dmarc.dmarc-policy-partial_md\": \"Le domaine n'est que partiellement prot\\xE9g\\xE9. Seulement **[PERCENT {percent}%](PCT#:glossary)** des courriels non autoris\\xE9s seront soumis \\xE0 la politique **[{policy}](DMARC_POLICY#:glossary)**.\",\n \"investigate:card.dmarc.full-rejection_md\": \"**100%** des courriels non autoris\\xE9s avec le [](FROM#:glossary) `{domain}` seront **rejet\\xE9s**.\",\n \"investigate:card.dmarc.full-rejection-subdomain-weak_md\": \"**100%** des courriels non autoris\\xE9s avec le [](FROM#:glossary) `{domain}` seront **rejet\\xE9s**, mais les sous-domaines utilisent une politique plus faible (sp={sp}), les laissant vuln\\xE9rables \\xE0 l'usurpation.\",\n \"investigate:card.dmarc.misplaced-bad-policy_md\": \"**Le [FULL](DMARC_POLICY#:glossary) est mal plac\\xE9 et a une erreur de syntaxe:**\",\n \"investigate:card.dmarc.misplaced-policy_md\": \"**Le [FULL](DMARC_POLICY#:glossary) est mal plac\\xE9.\",\n \"investigate:card.dmarc.no-policy_md\": \"**Aucune [FULL](DMARC_POLICY#:glossary) publi\\xE9e sur le domaine**\\n\\n**`{policyDomain}`**\",\n \"investigate:card.dmarc.no-txt-published-policy-on-domain_md\": \"Aucun [](TXT_RECORD#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"investigate:card.dmarc.permerror-no-rua_md\": \"Aucun URI de rapport valide ([](RUA#:glossary)) n'est pr\\xE9sent, les destinataires ignoreront enti\\xE8rement le traitement DMARC.\",\n \"investigate:card.dmarc.permerror-rua-fallback_md\": \"Un URI de rapport valide ([](RUA#:glossary)) est pr\\xE9sent, les destinataires agiront comme si la politique \\xE9tait **p=none**.\",\n \"investigate:card.dmarc.policy-no-rua_md\": \"**[](RUA#:glossary) n'est pas d\\xE9fini.**\",\n \"investigate:card.dmarc.policy-no-ruf_md\": \"[](RUF#:glossary) n'est pas d\\xE9fini. Les rapports d'\\xE9chec offrant une visibilit\\xE9 plus d\\xE9taill\\xE9e des probl\\xE8mes ne seront pas envoy\\xE9s.\",\n \"investigate:card.dmarc.policy-none-pct-0_md\": \"Aucun rapport ne sera envoy\\xE9 avec cette politique, car le taux d'\\xE9chantillonnage [](PCT#:glossary) est fix\\xE9 \\xE0 `0`.\",\n \"investigate:card.dmarc.policy-not-none-pct-0_md\": \"Tous les emails **non autoris\\xE9s** seront d\\xE9livr\\xE9s aux destinataires bien que la politique soit d\\xE9finie sur [{policy}](DMARC_POLICY#:glossary), parce que le taux d'\\xE9chantillonnage [](PCT#:glossary) est d\\xE9fini sur `0`.\",\n \"investigate:card.dmarc.policy-remaining-emails-pct-reject_md\": \"Les **{remainingPercent}%** restants de courriels non autoris\\xE9s seront soumis \\xE0 la politique de **mise en quarantaine**.\",\n \"investigate:card.dmarc.policy-remaining-emails-pct-quarantine_md\": \"Les **{remainingPercent}%** restants de courriels non autoris\\xE9s seront **livr\\xE9s normalement**.\",\n \"investigate:card.dmarc.receiver-does-not-accept-reports-both\": \"Un ou plusieurs destinataires de votre RUA et RUF ne sont pas configur\\xE9s pour accepter les rapports DMARC.\",\n \"investigate:card.dmarc.receiver-does-not-accept-reports-rua\": \"Un ou plusieurs destinataires de votre RUA ne sont pas configur\\xE9s pour accepter les rapports DMARC.\",\n \"investigate:card.dmarc.receiver-does-not-accept-reports-ruf\": \"Un ou plusieurs destinataires de votre RUF ne sont pas configur\\xE9s pour accepter les rapports DMARC.\",\n \"investigate:card.dmarc.receiver-does-not-accept-reports-rua-uri_md\": \"**{uri}** n'est pas configur\\xE9 pour accepter les rapports agr\\xE9g\\xE9s DMARC.\",\n \"investigate:card.dmarc.receiver-does-not-accept-reports-ruf-uri_md\": \"**{uri}** n'est pas configur\\xE9 pour accepter les rapports d'\\xE9chec DMARC.\",\n \"investigate:card.dmarc.setup-dmarc_md\": \"Veuillez configurer un enregistrement DMARC comme d\\xE9crit [ici](https://community.redsift.com/s/article/000001195) pour s\\xE9curiser votre configuration de courrier \\xE9lectronique.\",\n \"investigate:card.dmarc.spf-failed_md\": \"**[](SPF#:glossary) authentification \\xE9chou\\xE9e.**\",\n \"investigate:card.dmarc.spf-passed_md\": \"**[](SPF#:glossary) authentification r\\xE9ussie.**\",\n \"investigate:card.dmarc.subdomain-no-explicit-policy_md\": \"Cette politique DMARC s'applique \\xE0 tous les courriels envoy\\xE9s depuis des sous-domaines de `{domain}.{tld}`, par exemple `mail.{domain}.{tld}`, lorsqu'aucune politique DMARC explicite n'est d\\xE9finie pour le sous-domaine.\",\n \"investigate:card.dmarc.subdomain-no-policy_md\": \"**100%** des courriels non autoris\\xE9s provenant des sous-domaines de `{domain}` seront livr\\xE9s (signal\\xE9s uniquement), sauf s'ils ont publi\\xE9 leur propre politique DMARC plus stricte.\",\n \"investigate:card.dmarc.subdomain-full-rejection_md\": \"**100%** des courriels non autoris\\xE9s avec le [](FROM#:glossary) des sous-domaines de `{domain}` seront **rejet\\xE9s** sauf s'ils ont publi\\xE9 leur propre politique DMARC plus faible.\",\n \"investigate:card.dmarc.subdomain-full-quarantine_md\": \"**100%** des courriels non autoris\\xE9s avec le [](FROM#:glossary) des sous-domaines de `{domain}` seront **mis en quarantaine** sauf s'ils ont publi\\xE9 leur propre politique DMARC.\",\n \"investigate:card.dmarc.subdomain-partial-rejection_md\": \"Les sous-domaines ne sont que partiellement prot\\xE9g\\xE9s, sauf s'ils ont publi\\xE9 leur propre politique DMARC plus stricte. Seulement **{pct}%** des courriels non autoris\\xE9s seront soumis \\xE0 la politique de **rejet**. Les **{remainingPercent}%** restants seront soumis \\xE0 la politique de **mise en quarantaine**.\",\n \"investigate:card.dmarc.subdomain-partial-quarantine_md\": \"Les sous-domaines ne sont que partiellement prot\\xE9g\\xE9s, sauf s'ils ont publi\\xE9 leur propre politique DMARC plus stricte. Seulement **{pct}%** des courriels non autoris\\xE9s seront soumis \\xE0 la politique de **mise en quarantaine**. Les **{remainingPercent}%** restants seront **livr\\xE9s normalement**.\",\n \"investigate:card.dmarc.subdomain-partial-no-policy_md\": \"Seulement **{pct}%** des courriels non autoris\\xE9s provenant des sous-domaines de `{domain}` seront livr\\xE9s (signal\\xE9s uniquement), sauf s'ils ont publi\\xE9 leur propre politique DMARC plus stricte.\",\n \"investigate:card.dmarc.subdomain-policy-not-none_md\": \"La politique DMARC '{subpolicy}' est appliqu\\xE9e aux courriers envoy\\xE9s depuis les sous-domaines de `{domain}`, qui n'ont pas leur propre jeu d'enregistrements de politique DMARC.\",\n \"investigate:card.dmarc.subdomain-policy-not-none_weaker_md\": \"**sp={subpolicyL}** est plus faible que **p={policyL}**. La politique DMARC '{subpolicy}' est appliqu\\xE9e pour les mails envoy\\xE9s depuis les sous-domaines de `{domain}` qui n'ont pas leurs propres enregistrements de politique DMARC.\",\n \"investigate:card.dmarc.summary-domain-reject-full-sp-weak\": \"Le domaine dispose d'une politique de rejet, mais les sous-domaines utilisent une politique plus faible, les rendant vuln\\xE9rables \\xE0 l'usurpation.\",\n \"investigate:card.dmarc.summary-domain-reject-partial-sp-weak\": \"Le domaine ne rejette que {pct} % des e-mails non autoris\\xE9s, et les sous-domaines utilisent une politique plus faible, les rendant vuln\\xE9rables \\xE0 l'usurpation.\",\n \"investigate:card.dmarc.summary-domain-quarantine-full-sp-weak\": \"Le domaine dispose d'une politique de mise en quarantaine, mais les sous-domaines utilisent une politique plus faible, les rendant vuln\\xE9rables \\xE0 l'usurpation.\",\n \"investigate:card.dmarc.summary-domain-quarantine-partial-sp-weak\": \"Le domaine ne met en quarantaine que {pct} % des e-mails non autoris\\xE9s, et les sous-domaines utilisent une politique plus faible, les rendant vuln\\xE9rables \\xE0 l'usurpation.\",\n // Summary box strings for email compliance results\n \"investigate:card.dmarc.summary-email-pass\": \"L'e-mail est conforme \\xE0 DMARC. Il a pass\\xE9 \\xE0 la fois DKIM et SPF.\",\n \"investigate:card.dmarc.summary-email-fail-both\": \"L'e-mail n'est pas conforme \\xE0 DMARC. Ni DKIM ni SPF n'ont pass\\xE9.\",\n \"investigate:card.dmarc.summary-email-fail-dkim\": \"L'e-mail n'est pas conforme \\xE0 DMARC. DKIM n'a pas pass\\xE9.\",\n \"investigate:card.dmarc.summary-email-fail-spf\": \"L'e-mail n'est pas conforme \\xE0 DMARC. SPF n'a pas pass\\xE9.\",\n // Summary box strings for permerror (RFC 7489 §6.6.3)\n \"investigate:card.dmarc.summary-email-permerror\": \"La conformit\\xE9 de l'e-mail n'a pas pu \\xEAtre d\\xE9termin\\xE9e car l'enregistrement DMARC contient une erreur permanente et aucun URI de rapport (rua) n'est configur\\xE9.\",\n \"investigate:card.dmarc.summary-domain-permerror\": \"La politique DMARC contient une erreur permanente et ne peut pas \\xEAtre appliqu\\xE9e. Aucun URI de rapport (rua) n'est configur\\xE9, les destinataires ignoreront enti\\xE8rement le traitement DMARC.\",\n \"investigate:card.dmarc.summary-domain-permerror-rua-fallback\": \"La politique DMARC contient des erreurs, mais un URI de rapport valide (rua) est pr\\xE9sent. Les destinataires se rabattront sur p=none (mode surveillance uniquement).\",\n \"investigate:card.dmarc.txt-published-on-policy-domain_md\": \"[](TXT_RECORD#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"investigate:card.dmarc.txt-published-policy-on-domain_md\": \"[](TXT_RECORD#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"investigate:card.dmarc.txt-published-policy-on-domain_md_one\": \"[](TXT_RECORD#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"investigate:card.dmarc.txt-published-policy-on-domain_md_other\": \"{count} [](TXT_RECORDS#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"investigate:card.spf.dns-count-lookup-greater-10_md\": \"**Les recherches SPF d\\xE9passent la limite de 10, ce qui entra\\xEEne un \\xE9chec SPF. Consultez notre fonctionnalit\\xE9 Dynamic SPF pour trouver une solution!**\",\n \"investigate:card.spf.dns-count-lookup_md\": \"{count}/10 Recherches SPF\",\n \"investigate:card.spf.dns-count-lookup_md_one\": \"{count}/10 Recherche SPF\",\n \"investigate:card.spf.dns-count-lookup_md_other\": \"{count}/10 Recherches SPF\",\n \"investigate:card.spf.dns-count-void-lookups_md\": \"{count}/2 Recherches nulles\",\n \"investigate:card.spf.dns-count-void-lookups_md_one\": \"{count}/2 Recherche nulle\",\n \"investigate:card.spf.dns-count-void-lookups_md_other\": \"{count}/2 Recherches nulles\",\n \"investigate:card.spf.eval-error-record-not-found_md\": \"**Aucun enregistrement SPF n'a \\xE9t\\xE9 trouv\\xE9**\",\n \"investigate:card.spf.failed_md\": \"**L'authentification [](SPF#:glossary) a \\xE9chou\\xE9.**\",\n \"investigate:card.spf.passed_md\": \"**Authentification [](SPF#:glossary) r\\xE9ussie.**\",\n \"investigate:card.spf.spf-all-and-redirect_md\": \"Toute **redirection** est ignor\\xE9e s'il y a un m\\xE9canisme **all**.\",\n \"investigate:card.spf.spf-all-not-last_md\": \"Toute donn\\xE9e apr\\xE8s le **all** est ignor\\xE9e.\",\n \"investigate:card.spf.spf-all-plus-warning_md\": \"Le m\\xE9canisme **+all** ne devrait pas \\xEAtre utilis\\xE9 car il autorise toutes les adresses IP d'envoi.\",\n \"investigate:card.spf.spf-all-question-mark-warning_md\": \"**?all** ne doit pas \\xEAtre utilis\\xE9 car il permet une r\\xE9ponse ambigu\\xEB.\",\n \"investigate:card.spf.spf-extra-spf-lookups_md\": \"Trop de recherches SPF. D\\xE9tails ci-dessous\",\n \"investigate:card.spf.spf-invalid-spf-header-include_md\": \"L'enregistrement SPF est invalide car il a un espace entre l'instruction include:.\",\n \"investigate:card.spf.spf-invalid-spf1-header_md\": \"Enregistrement SPF invalide\",\n \"investigate:card.spf.spf-multiple-all_md\": \"Plusieurs m\\xE9canismes **all** dans l'enregistrement SPF\",\n \"investigate:card.spf.spf-multiple-mx-providers_md\": \"Plusieurs fournisseurs de messagerie configur\\xE9s dans les enregistrements MX de ce domaine.\",\n \"investigate:card.spf.spf-multiple-spf_md\": \"Plusieurs enregistrements SPF trouv\\xE9s pour ce domaine\",\n \"investigate:card.spf.spf-no-all_md\": \"Il est recommand\\xE9 d'utiliser soit un modificateur **redirect** soit un m\\xE9canisme **all** pour terminer explicitement le traitement.\",\n \"investigate:card.spf.spf-no-spf_md\": \"Aucun SPF configur\\xE9 pour le domaine.\",\n \"investigate:card.spf.spf-recursive-include-spf_md\": \"L'inclusion SPF redondante peut \\xEAtre supprim\\xE9e car elle pointe vers votre propre domaine\",\n \"investigate:card.spf.spf-v-tag-duplicated-spf_md\": \"La balise de version est dupliqu\\xE9e.\",\n \"investigate:card.spf.warnings_md\": \"**[](SPF#:glossary) probl\\xE8mes d'authentification d\\xE9tect\\xE9s:**\",\n \"investigate:dkim-evaluation\": \"\\xC9valuation DKIM\",\n \"investigate:extracted-dns\": \"Extrait de votre configuration DNS\",\n \"investigate:extracted-dns-details\": \"D\\xE9tails de la configuration DNS extraits\",\n \"investigate:extracted-dns-short\": \"Extrait de votre DNS\",\n \"investigate:extracted-email\": \"Extrait de votre courriel\",\n \"investigate:fcrdns-evaluation\": \"\\xC9valuation FCrDNS\",\n \"investigate:retry-email_md\": \"**Veuillez renvoyer l'email!**\",\n \"investigate:temporary-error-setup\": \"Une erreur temporaire s'est produite lors de l'analyse de votre installation.\",\n \"retry-email_md\": \"**Veuillez renvoyer l'email!**\",\n \"section-titles.dkim-headers\": \"En-t\\xEAtes d'email\",\n \"section-titles.dkim-key\": \"Cl\\xE9 publique DKIM\",\n \"section-titles.dkim-signature\": \"Signature DKIM\",\n \"section-titles.dmarc-alignment\": \"V\\xE9rification de l'alignement DMARC\",\n \"section-titles.dmarc-authentication\": \"V\\xE9rification de l'authentification DMARC\",\n \"section-titles.dmarc-domain\": \"Domaines DMARC\",\n \"section-titles.dmarc-policy\": \"Votre politique DMARC\",\n \"section-titles.dmarc-policy-check\": \"V\\xE9rification de l'enregistrement de la politique DMARC\",\n \"section-titles.dmarc-policy-details\": \"Configuration de la politique\",\n \"section-titles.dnssec\": \"Statut DNSSEC\",\n \"section-titles.sender-information\": \"Informations sur l'exp\\xE9diteur\",\n \"section-titles.spf-policy\": \"Votre politique SPF\",\n \"section-titles.spf-policy-check\": \"V\\xE9rification de l'enregistrement de la politique SPF\",\n \"section-titles.tls-configuration\": \"Configuration TLS\",\n \"section-titles.urls-found\": \"URLs trouv\\xE9es\",\n \"signal-cards.tls.extracted.cipher_md\": \"[](CIPHER_SUITE#:glossary)\",\n \"signal-cards.tls.extracted.version_md\": \"Version [](TLS#:glossary)\",\n \"signal-cards.tls.info.cipher.error_md\": \"La suite de chiffrement `{cipher}` n'est pas s\\xE9curis\\xE9e.\",\n \"signal-cards.tls.info.cipher.good_md\": \"La suite de chiffrement est s\\xE9curis\\xE9e\",\n \"signal-cards.tls.info.cipher.learn_more_md\": \"Cliquez [ici](https://community.redsift.com/s/article/000001271) pour consulter notre article de base de connaissances sur les suites de chiffrement recommand\\xE9es.\",\n \"signal-cards.tls.info.cipher.unknown_md\": \"La suite de chiffrement est inconnue et ne peut pas \\xEAtre v\\xE9rifi\\xE9e comme s\\xE9curis\\xE9e.\",\n \"signal-cards.tls.info.cipher.warning_md\": \"La suite de chiffrement `{cipher}` doit \\xEAtre mise \\xE0 jour.\",\n \"signal-cards.tls.info.version.error_md\": \"[](SSL#:glossary){version} est utilis\\xE9, ce qui est consid\\xE9r\\xE9 comme non s\\xE9curis\\xE9\",\n \"signal-cards.tls.info.version.good_md\": \"La version TLS est s\\xE9curis\\xE9e ({version})\",\n \"signal-cards.tls.info.version.missing_md\": \"Vous n'utilisez pas TLS\",\n \"signal-cards.tls.info.version.missing_subtext\": \"En cons\\xE9quence, le contenu de votre message peut facilement \\xEAtre espionn\\xE9 par des personnes qui ne sont pas vos destinataires pr\\xE9vus.\",\n \"signal-cards.tls.info.version.unknown_md\": \"Version TLS inconnue ({value})\",\n \"signal-cards.tls.info.version.warning_md\": \"La version TLS doit \\xEAtre mise \\xE0 jour de {current} vers v1.2\",\n \"signal-description.THREATINV_DOMAIN_ANALYZER_NO_THREATS_md\": \"Le domaine a \\xE9t\\xE9 compar\\xE9 \\xE0 des bases de donn\\xE9es de spammeurs, d'agents de transfert de courrier web, de botnets, de phishers et de sources non r\\xE9put\\xE9es de confiance : aucune activit\\xE9 suspecte.\",\n \"signal-description.THREATINV_NO_THREATS_md\": \"Les r\\xE9sultats du contr\\xF4le Threat Intelligence permettent d'identifier les courriels suspects ou ceux qui devraient \\xEAtre bloqu\\xE9s. Ils mettent \\xE9galement en \\xE9vidence les probl\\xE8mes de d\\xE9livrabilit\\xE9 provenant de sources l\\xE9gitimes.\",\n \"temporary-error-setup\": \"Une erreur temporaire s'est produite lors de l'analyse de votre installation.\",\n unknown: \"Inconnu\",\n // -------------------------------------------------------------------------\n // Glossary labels (French)\n // -------------------------------------------------------------------------\n \"glossary.from\": \"De\",\n \"glossary.version\": \"Version\",\n \"glossary.mode\": \"Mode\",\n \"glossary.mx\": \"MX\",\n \"glossary.max-age\": \"\\xC2ge max.\",\n \"glossary.tls-rpt-record\": \"Enregistrement TLS-RPT\",\n \"glossary.mta-sts-record\": \"Enregistrement MTA-STS\",\n \"glossary.mta-sts-policy-file\": \"Fichier de politique MTA-STS\",\n \"glossary.dkim-signing-domain\": \"Domaine de signature DKIM\",\n \"glossary.spf-domain\": \"Domaine SPF\",\n \"glossary.spf-domains\": \"Domaines SPF\",\n // -------------------------------------------------------------------------\n // MTA-STS section titles + keys (French)\n // -------------------------------------------------------------------------\n \"section-titles.tls-rpt-dns-record\": \"Votre enregistrement DNS TLS-RPT\",\n \"section-titles.mta-sts-dns-record\": \"Votre enregistrement DNS MTA-STS\",\n \"section-titles.mta-sts-policy-config\": \"Configuration de votre politique MTA-STS\",\n \"signal-cards.mta-sts.title\": \"MTA-STS\",\n \"signal-cards.mta-sts.txt-published-policy-on-domain_md\": \"[](TXT_RECORD#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"signal-cards.mta-sts.no-txt-published-policy-on-domain_md\": \"Aucun [](TXT_RECORD#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"signal-cards.mta-sts.record-missing_md\": \"**[](MTA_STS_POLICY_FILE#:glossary)** **Manquant.** [Apprendre \\xE0 corriger](https://community.redsift.com/s/article/000001035)\",\n \"signal-cards.mta-sts.elements-missing_md\": \"**[](MTA_STS_POLICY_FILE#:glossary)** **Certains \\xE9l\\xE9ments manquants.** [Apprendre \\xE0 corriger](https://community.redsift.com/s/article/000001035)\",\n \"signal-cards.mta-sts.mta-policy-mode-invalid_md\": \"Le mode de la politique MTA-STS est d\\xE9fini sur **{mode}** ce qui est invalide\",\n \"signal-cards.mta-sts.mta-policy-version-invalid_md\": \"La version de la politique MTA-STS est d\\xE9finie sur **{version}** ce qui est invalide\",\n \"signal-cards.mta-sts.mta-certificate-at-risk_md\": \"Le certificat SSL ne peut pas \\xEAtre renouvel\\xE9 automatiquement\",\n \"signal-cards.mta-sts.mta-certificate-not-issued_md\": \"Le certificat SSL n'a pas encore \\xE9t\\xE9 \\xE9mis\",\n \"signal-cards.mta-sts.mta-certificate-add-to-dns\": \"Veuillez ajouter les entr\\xE9es ci-dessous \\xE0 votre enregistrement DNS pour garantir le renouvellement automatique du certificat SSL\",\n \"signal-cards.mta-sts.mta-certificate-add-to-caa\": \"Veuillez ajouter le CAA ci-dessous \\xE0 la liste CAA dans votre enregistrement DNS pour garantir le renouvellement automatique du certificat SSL\",\n \"signal-cards.mta-sts.certificate-expiry\": \"Le certificat expire : {expiry}\",\n // -------------------------------------------------------------------------\n // SubDo section title (French)\n // -------------------------------------------------------------------------\n \"section-titles.subdo-check\": \"V\\xE9rification de prise de contr\\xF4le de sous-domaine\",\n // -------------------------------------------------------------------------\n // AMP extracted items (French)\n // -------------------------------------------------------------------------\n \"extracted-dns-short\": \"Enregistrement DNS\",\n // -------------------------------------------------------------------------\n // Google/Yahoo Compliance sections (French)\n // -------------------------------------------------------------------------\n \"card.google-yahoo-compliance.section.spf-dkim.header\": \"SPF et DKIM\",\n \"card.google-yahoo-compliance.section.spf-dkim.spf.success_md\": \"[](SPF#:glossary) \\xE9valuation r\\xE9ussie\",\n \"card.google-yahoo-compliance.section.spf-dkim.spf.error_md\": \"[](SPF#:glossary) \\xE9valuation \\xE9chou\\xE9e\",\n \"card.google-yahoo-compliance.section.spf-dkim.dkim.success_md\": \"[](DKIM#:glossary) \\xE9valuation r\\xE9ussie\",\n \"card.google-yahoo-compliance.section.spf-dkim.dkim.error_md\": \"[](DKIM#:glossary) \\xE9valuation \\xE9chou\\xE9e\",\n \"card.google-yahoo-compliance.section.spf-dkim-alignment.header\": \"Alignement SPF ou DKIM\",\n \"card.google-yahoo-compliance.section.spf-dkim-alignment.align-spf.success_md\": \"[](SPF_DOMAIN#:glossary) et [](FROM#:glossary) sont align\\xE9s. La politique est [{policy}](SPF_ALIGNMENT#:glossary).\",\n \"card.google-yahoo-compliance.section.spf-dkim-alignment.align-spf.error_md\": \"[](SPF_DOMAIN#:glossary) et [](FROM#:glossary) ne sont pas align\\xE9s. La politique est [{policy}](SPF_ALIGNMENT#:glossary).\",\n \"card.google-yahoo-compliance.section.spf-dkim-alignment.align-dkim.success_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) Domaine de signature DKIM et [](FROM#:glossary) sont align\\xE9s. La politique est [{policy}](DKIM_ALIGNMENT#:glossary).\",\n \"card.google-yahoo-compliance.section.spf-dkim-alignment.align-dkim.error_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) Domaine de signature DKIM et [](FROM#:glossary) ne sont pas align\\xE9s. La politique est [{policy}](DKIM_ALIGNMENT#:glossary).\",\n \"card.google-yahoo-compliance.section.dmarc.header\": \"DMARC\",\n \"card.google-yahoo-compliance.section.dmarc.evaluation.success_md\": \"[](DMARC#:glossary) \\xE9valuation r\\xE9ussie\",\n \"card.google-yahoo-compliance.section.dmarc.evaluation.error_md\": \"[](DMARC#:glossary) \\xE9valuation \\xE9chou\\xE9e\",\n \"card.google-yahoo-compliance.section.dmarc.policy.success_md\": \"[](DMARC_POLICY#:glossary) {policy}.\",\n \"card.google-yahoo-compliance.section.dmarc.policy.error_md\": \"La politique **n'est pas d\\xE9finie**. Elle devrait \\xEAtre d\\xE9finie comme [](DMARC_POLICY#:glossary) none, quarantine ou reject.\",\n \"card.google-yahoo-compliance.section.fcrdns.header\": \"FCrDNS\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip.success_md\": \"[](SENDER_IP#:glossary) correspond \\xE0 l'[](A_RECORD#:glossary) du [](PTR_RECORD#:glossary) dans les deux directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip.error_md\": \"[](SENDER_IP#:glossary) ne correspond pas \\xE0 l'[](A_RECORD#:glossary) du [](PTR_RECORD#:glossary) dans les deux directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip.warning_md\": \"[](SENDER_IP#:glossary) ne correspond pas \\xE0 l'[](A_RECORD#:glossary) du [](PTR_RECORD#:glossary) dans les deux directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.ehlo.success_md\": \"Le [](EHLO#:glossary) correspond au [](PTR_RECORD#:glossary) de l'[](A_RECORD#:glossary) dans les deux directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.ehlo.error_md\": \"Le [](EHLO#:glossary) ne correspond pas au [](PTR_RECORD#:glossary) de l'[](A_RECORD#:glossary) dans les deux directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.ehlo.warning_md\": \"Le [](EHLO#:glossary) ne correspond pas au [](PTR_RECORD#:glossary) de l'[](A_RECORD#:glossary) dans les deux directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip-matches-ehlo-a-record.success_md\": \"[](SENDER_IP#:glossary) correspond \\xE0 l'[](A_RECORD#:glossary) du [](EHLO#:glossary) dans les deux directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip-matches-ehlo-a-record.error_md\": \"[](SENDER_IP#:glossary) ne correspond pas \\xE0 l'[](A_RECORD#:glossary) du [](EHLO#:glossary) dans les deux directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip-matches-ehlo-a-record.warning_md\": \"[](SENDER_IP#:glossary) ne correspond pas \\xE0 l'[](A_RECORD#:glossary) du [](EHLO#:glossary) dans les deux directions.\",\n \"card.google-yahoo-compliance.section.reputation.header\": \"Taux de spam\",\n \"card.google-yahoo-compliance.section.reputation.summary_md\": \"Exigence : **Taux de spam signal\\xE9 faible**\",\n \"card.google-yahoo-compliance.section.reputation.information_md\": \"Microsoft, Google et Yahoo exigent que les taux de spam soient inf\\xE9rieurs \\xE0 0,3 %. Pour v\\xE9rifier vos taux, consultez le [Support exp\\xE9diteur de Microsoft](https://sendersupport.olc.protection.outlook.com/pm/Postmaster), les [Outils Postmaster de Google](https://gmail.com/postmaster) ou le [programme de boucle de r\\xE9troaction de Yahoo](https://senders.yahooinc.com/complaint-feedback-loop/).\",\n \"card.google-yahoo-compliance.section.tls.header\": \"TLS\",\n \"card.google-yahoo-compliance.section.tls.evaluation.success_md\": \"[](TLS#:glossary) TLS ({version}) est utilis\\xE9.\",\n \"card.google-yahoo-compliance.section.tls.evaluation.warning_md\": \"[](TLS#:glossary) TLS ({version}) est obsol\\xE8te. TLS 1.2+ est requis pour la conformit\\xE9.\",\n \"card.google-yahoo-compliance.section.tls.evaluation.error_md\": \"[](TLS#:glossary) La connexion TLS **n'est pas** utilis\\xE9e.\",\n \"card.google-yahoo-compliance.section.one-click-unsub.header\": \"D\\xE9sabonnement en un clic\",\n \"card.google-yahoo-compliance.section.one-click-unsub.evaluation.success_md\": \"Le lien de d\\xE9sabonnement en un clic est pr\\xE9sent.\",\n \"card.google-yahoo-compliance.section.one-click-unsub.evaluation.error_md\": \"Le lien de d\\xE9sabonnement en un clic **n'est pas** pr\\xE9sent.\",\n \"card.google-yahoo-compliance.section.one-click-unsub.evaluation.warning\": \"Messages marketing et abonn\\xE9s uniquement : le d\\xE9sabonnement en un clic est manquant.\"\n }\n};\n\nexport { EXTRACTOR_STRINGS, GLOSSARY_LABELS };\n//# sourceMappingURL=chunk-JN5BEW4U.js.map\n//# sourceMappingURL=chunk-JN5BEW4U.js.map","/* istanbul ignore file */\nimport { EXTRACTOR_STRINGS } from '@redsift/signal-logic/i18n';\nimport enUS from './en-US.json';\nimport frFR from './fr-FR.json';\n\n/**\n * Add the 'investigate.' namespace prefix to all extractor string keys\n * so they align with the DS translation key convention.\n */\nfunction prefixKeys(strings: Record<string, string | string[] | null>): Record<string, string | string[] | null> {\n const result: Record<string, string | string[] | null> = {};\n for (const [key, value] of Object.entries(strings)) {\n result[`investigate.${key}`] = value;\n }\n return result;\n}\n\nconst mergedEnUS = { ...enUS, ...prefixKeys(EXTRACTOR_STRINGS['en-US']) };\nconst mergedFrFR = { ...frFR, ...prefixKeys(EXTRACTOR_STRINGS['fr-FR']) };\n\nexport default {\n 'en-US': mergedEnUS,\n 'fr-FR': mergedFrFR,\n} as const;\n\nexport type SignalCardsMessages = typeof mergedEnUS;\n","import { useLocalizedStringFormatter } from '@redsift/design-system';\nimport intlMessages from '../intl';\n\n/**\n * Type for signal card message keys (dot-notation paths into the translation object)\n * The formatter accepts any string key since keys are dynamically constructed at runtime\n */\nexport type SignalCardMessageKey = string;\n\n/**\n * Type for the signal card formatter return type\n * Uses string as key type since translation keys are constructed dynamically\n */\nexport type SignalCardFormatter = ReturnType<typeof useLocalizedStringFormatter<SignalCardMessageKey, string>>;\n\n/**\n * Hook to get the localized string formatter for Signal Cards\n * Uses React Aria's i18n system with Signal Cards translations\n *\n * Note: We use `as any` for intlMessages because:\n * 1. The translation file contains mixed value types (string, string[], null) for advanced i18n features\n * 2. The LocalizedStrings type expects Record<string, string> but our translations are more complex\n * 3. Translation keys are constructed dynamically at runtime, not statically known\n * This is an accepted tradeoff for i18n flexibility with React Aria's typing constraints.\n */\nexport const useSignalCardFormatter = (): SignalCardFormatter => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return useLocalizedStringFormatter<SignalCardMessageKey, string>(intlMessages as any);\n};\n","/**\n * Signal Cards Logger Utility\n *\n * Provides environment-aware logging that only outputs in development mode.\n * Prevents console noise in production while maintaining debugging capability.\n */\n\n// Check for edge runtime compatibility where process.env may be undefined\nconst isDevelopment = typeof process !== 'undefined' && process.env?.NODE_ENV !== 'production';\n\ninterface Logger {\n debug: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n}\n\nconst noop = () => {};\n\n/**\n * Creates a prefixed logger for a specific module\n * @param prefix - Module name prefix for log messages\n */\nexport const createLogger = (prefix: string): Logger => {\n if (!isDevelopment) {\n return {\n debug: noop,\n info: noop,\n warn: noop,\n error: noop,\n };\n }\n\n const formatPrefix = `[SignalCards:${prefix}]`;\n\n return {\n debug: (...args: unknown[]) => console.debug(formatPrefix, ...args),\n info: (...args: unknown[]) => console.info(formatPrefix, ...args),\n warn: (...args: unknown[]) => console.warn(formatPrefix, ...args),\n error: (...args: unknown[]) => console.error(formatPrefix, ...args),\n };\n};\n\n/**\n * Default logger instance for general use\n */\nexport const logger: Logger = createLogger('General');\n\n/**\n * Main signal cards logger (alias for general usage)\n */\nexport const signalCardsLogger: Logger = logger;\n\n/**\n * Translation-specific logger\n */\nexport const translationLogger: Logger = createLogger('i18n');\n\n/**\n * Component-specific logger\n */\nexport const componentLogger: Logger = createLogger('Component');\n","import type { SignalCardFormatter } from '../hooks/useSignalCardFormatter';\nimport type { TranslationParams } from '@redsift/signal-logic';\nimport { translationLogger } from './logger';\nimport { interpolateTranslation } from '@redsift/signal-logic';\n\n/**\n * Helper to resolve translation keys with namespace fallback logic.\n *\n * Tries multiple namespaces with _md suffix first, then without.\n * Returns the first matching translation or the original key if not found.\n *\n * Supports both plain keys ('card.dkim.passed_md') and namespace-prefixed keys ('investigate:extracted-dns')\n */\nexport const createNamespaceResolver = (formatter: SignalCardFormatter, namespaces: string[]) => {\n return (key: string, params?: TranslationParams): string => {\n // Handle namespace-prefixed keys like 'investigate:card.key' or 'status-details:message'\n if (key.includes(':')) {\n const [explicitNs, actualKey] = key.split(':', 2);\n const fullKey = `${explicitNs}.${actualKey}`;\n\n // Handle pluralization\n let finalKey = fullKey;\n if (params?.count !== undefined) {\n const pluralSuffix = params.count === 1 ? '_one' : '_other';\n finalKey = `${fullKey}${pluralSuffix}`;\n }\n\n try {\n // Don't pass params to formatter - do manual interpolation instead\n const result = formatter.format(finalKey);\n return interpolateTranslation(result, params);\n } catch {\n translationLogger.warn(`Translation key not found: ${finalKey}`);\n return key;\n }\n }\n\n // Try with _md suffix first, then without\n const suffixes = ['_md', ''];\n\n for (const namespace of namespaces) {\n for (const suffix of suffixes) {\n let fullKey = `${namespace}.${key}${suffix}`;\n\n // Handle pluralization\n if (params?.count !== undefined) {\n const pluralSuffix = params.count === 1 ? '_one' : '_other';\n fullKey = `${fullKey}${pluralSuffix}`;\n }\n\n try {\n // Don't pass params to formatter - do manual interpolation instead\n const result = formatter.format(fullKey);\n return interpolateTranslation(result, params);\n } catch {\n // Key not found, try next combination\n continue;\n }\n }\n }\n\n translationLogger.warn(`Translation key not found in any namespace: ${key}`);\n return key;\n };\n};\n","import { useCallback, useMemo } from 'react';\nimport { useSignalCardFormatter } from './useSignalCardFormatter';\nimport { createNamespaceResolver } from '../utils/resolveTranslation';\nimport { translationLogger } from '../utils/logger';\nimport { interpolateTranslation } from '@redsift/signal-logic';\nimport type { TranslationParams } from '@redsift/signal-logic';\n/**\n * Custom translation hook for Signal Cards that provides i18next-like API using React Aria's\n * LocalizedStringFormatter under the hood.\n *\n * ## Why This Exists\n *\n * React Aria's `LocalizedStringFormatter` does NOT support ICU MessageFormat syntax in plain\n * JSON strings. It only supports:\n * 1. Simple strings (returned as-is, no interpolation)\n * 2. Function-based messages that call `formatter.plural()` / `formatter.select()` programmatically\n *\n * This hook bridges the gap by implementing:\n * - **Pluralization**: Uses `_one` / `_other` key suffixes (e.g., `error_one`, `error_other`)\n * - **Context**: Uses `_context` key suffixes (e.g., `error_md_fail` for context='fail')\n * - **Interpolation**: Replaces `{{variable}}` placeholders with provided values\n *\n * ## Usage\n *\n * ```tsx\n * const { t } = useSignalCardTranslation('investigate', 'signal-cards.dmarc');\n *\n * // Simple translation\n * t('title'); // looks up 'investigate.signal-cards.dmarc.title'\n *\n * // With interpolation\n * t('greeting', { name: 'John' }); // replaces {{name}} with 'John'\n *\n * // With pluralization\n * t('errors', { count: 1 }); // looks up 'errors_one'\n * t('errors', { count: 5 }); // looks up 'errors_other'\n *\n * // With context\n * t('status', { context: 'fail' }); // looks up 'status_fail'\n *\n * // Namespace override with colon syntax\n * t('glossary:term.dmarc'); // looks up 'glossary.term.dmarc' instead\n * ```\n *\n * @param namespace - The translation namespace (e.g., 'investigate', 'glossary')\n * @param keyPrefix - Optional key prefix to prepend to all translation keys\n * @returns Object with `t` function and `formatter` reference\n *\n * @see {@link interpolateTranslation} for interpolation logic\n * @see {@link useSignalCardFormatter} for the underlying formatter\n */\nexport const useSignalCardTranslation = (namespace: string, keyPrefix?: string) => {\n const formatter = useSignalCardFormatter();\n\n const t = useCallback(\n (\n key: string,\n params?: TranslationParams & { defaultValue?: string; returnObjects?: boolean; context?: string; count?: number }\n ) => {\n // Strip namespace prefix if key uses colon syntax (e.g., 'investigate:signal-description.key')\n let cleanKey = key;\n const colonIndex = key.indexOf(':');\n if (colonIndex !== -1) {\n // Extract the part after the colon\n cleanKey = key.substring(colonIndex + 1);\n }\n\n const prefixedKey = keyPrefix ? `${keyPrefix}.${cleanKey}` : cleanKey;\n let fullKey = `${namespace}.${prefixedKey}`;\n\n // Handle i18next context feature - append context to key if provided\n // e.g., t('error_md', { context: 'fail' }) looks for 'error_md_fail'\n if (params?.context) {\n fullKey = `${fullKey}_${params.context}`;\n }\n\n // Handle pluralization - append _one or _other based on count\n let countValue: number | undefined;\n if (params?.count !== undefined) {\n countValue = params.count;\n const pluralSuffix = countValue === 1 ? '_one' : '_other';\n fullKey = `${fullKey}${pluralSuffix}`;\n }\n\n // Filter out i18next-specific options that shouldn't be passed to formatter\n const interpolationValues = params ? { ...params } : undefined;\n if (interpolationValues) {\n delete interpolationValues.defaultValue;\n delete interpolationValues.returnObjects;\n delete interpolationValues.context;\n // Keep count in interpolationValues for string replacement\n }\n\n // Build the base key (without plural suffix) for fallback\n const baseKey = `${namespace}.${prefixedKey}${params?.context ? `_${params.context}` : ''}`;\n\n try {\n // Don't pass interpolationValues to formatter - it expects ICU MessageFormat\n // We'll do manual string replacement instead\n const result = formatter.format(fullKey);\n\n // Use shared interpolation utility\n return interpolateTranslation(result, interpolationValues);\n } catch (error) {\n // If a plural key (_one/_other) was not found, fall back to the base key\n // This matches i18next behavior: keys without plural variants still work with count\n if (countValue !== undefined && fullKey !== baseKey) {\n try {\n const baseResult = formatter.format(baseKey);\n return interpolateTranslation(baseResult, interpolationValues);\n } catch {\n // Base key also not found — fall through to default handling\n }\n }\n\n // Check if a defaultValue was provided in params\n if (params?.defaultValue !== undefined) {\n // Apply interpolation to defaultValue as well\n return interpolateTranslation(params.defaultValue, interpolationValues);\n }\n translationLogger.warn(`Translation key not found: ${fullKey}`);\n // In development, return a visually distinct marker so missing translations are obvious\n // In production, return the clean key as a reasonable fallback\n if (process.env.NODE_ENV !== 'production') {\n return `⚠️ ${cleanKey}`;\n }\n return cleanKey;\n }\n },\n [formatter, namespace, keyPrefix]\n );\n\n // Return stable references\n return useMemo(() => ({ t, formatter }), [t, formatter]);\n};\n\n/**\n * Translation hook for components that need to search multiple namespaces with fallback logic.\n *\n * Tries each namespace in order until a translation is found. Useful for shared components\n * that may have translations in different namespaces depending on context.\n *\n * ## Usage\n *\n * ```tsx\n * const { t } = useMultiNamespaceTranslation(['investigate', 'glossary', 'common']);\n *\n * // Will try:\n * // 1. 'investigate.some.key'\n * // 2. 'glossary.some.key'\n * // 3. 'common.some.key'\n * // Returns the first match found\n * t('some.key');\n * ```\n *\n * @param namespaces - Array of namespace names to search in order\n * @returns Object with `t` function (resolver) and `formatter` reference\n *\n * @see {@link createNamespaceResolver} for the underlying resolution logic\n */\nexport const useMultiNamespaceTranslation = (namespaces: string[]) => {\n const formatter = useSignalCardFormatter();\n // Serialize namespaces to a stable string to avoid re-creating the callback\n // when callers pass a new array literal with the same contents\n const stableKey = namespaces.join(',');\n const resolve = useCallback(\n (key: string, params?: TranslationParams) => createNamespaceResolver(formatter, namespaces)(key, params),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [formatter, stableKey]\n );\n\n return { t: resolve, formatter };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\ninterface UseCollapseControllerProps {\n areAllCollapsed?: boolean;\n onCollapseAll?: (nextValue: boolean) => void;\n /** When true, collapsible UI is enabled. */\n isCollapsible?: boolean;\n}\n\ninterface UseCollapseControllerResult {\n areAllCollapsed: boolean;\n handleCollapseAll: () => void;\n isCollapsible: boolean;\n}\n\n/**\n * Normalizes the controlled/uncontrolled collapse-all props so every card can\n * share the same behaviour without duplicating state logic.\n */\nexport function useCollapseController({\n areAllCollapsed: controlledValue,\n onCollapseAll,\n isCollapsible,\n}: UseCollapseControllerProps): UseCollapseControllerResult {\n const [internalValue, setInternalValue] = useState<boolean>(controlledValue ?? false);\n\n useEffect(() => {\n if (controlledValue !== undefined) {\n setInternalValue(controlledValue);\n }\n }, [controlledValue]);\n\n const resolvedIsCollapsible = isCollapsible ?? true;\n const resolvedValue = controlledValue ?? internalValue;\n\n const handleCollapseAll = useCallback(() => {\n if (!resolvedIsCollapsible) {\n return;\n }\n\n const nextValue = !resolvedValue;\n onCollapseAll?.(nextValue);\n\n if (controlledValue === undefined) {\n setInternalValue(nextValue);\n }\n }, [controlledValue, onCollapseAll, resolvedIsCollapsible, resolvedValue]);\n\n return {\n areAllCollapsed: resolvedValue,\n handleCollapseAll,\n isCollapsible: resolvedIsCollapsible,\n };\n}\n","/**\n * Styled components for SignalCardNormal.\n *\n * All theming uses CSS variables with Design System fallbacks (Poppins).\n * When SignalCardThemeProvider sets useInvestigateColors=true,\n * these will be overridden with Investigate-specific fonts.\n */\n\nimport styled from 'styled-components';\n\n// Default fallback values - use DS CSS variables with hardcoded ultimate fallbacks\nconst DS_FONT_BODY = \"var(--redsift-typography-body-font-family, 'Poppins', sans-serif)\";\nconst DS_TEXT_COLOR = 'var(--redsift-color-neutral-x-dark-grey, #3B3A58)';\n\n/**\n * Intro text container for signal cards.\n * Displays intro content with proper spacing and typography.\n * Used for intro descriptions at the top of the card.\n */\nexport const StyledIntroText = styled.div`\n margin-top: 0.5rem;\n margin-bottom: 0.75rem;\n font-size: 14px;\n line-height: 1.5;\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n\n strong {\n font-weight: 600;\n }\n\n a {\n font: inherit;\n }\n`;\n\n/**\n * Card header container.\n * Rendered at the top of the card (after title) for optional header content.\n * Used by renderHeader prop for promotional banners, CTAs, or contextual information.\n */\nexport const StyledCardHeader = styled.div`\n @media (max-width: 600px) {\n margin: 16px 0;\n }\n\n @media (min-width: 601px) {\n margin-bottom: 24px;\n }\n`;\n\n/**\n * Card footer container.\n * Rendered at the bottom of the card for optional footer content.\n * Used by renderFooter prop for website-specific or OnDMARC-specific CTAs.\n */\nexport const StyledCardFooter = styled.div`\n /* Optional styles for footer - no active styles needed */\n`;\n","import styled from 'styled-components';\n\n// ============================================================================\n// All theming now uses CSS variables with Design System fallbacks (Poppins).\n// When SignalCardThemeProvider sets useInvestigateColors=true,\n// these will be overridden with Investigate-specific fonts.\n// ============================================================================\n\n// Default fallback values - use DS CSS variables with hardcoded ultimate fallbacks\nconst DS_FONT_BODY = \"var(--redsift-typography-body-font-family, 'Poppins', sans-serif)\";\nconst DS_TEXT_COLOR = 'var(--redsift-color-neutral-x-dark-grey, #3B3A58)';\nconst DS_LINK_COLOR = 'var(--redsift-color-notifications-info-primary, #4285f4)';\n\nexport const DescriptionContainer = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nexport const DescriptionText = styled.div`\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n font-size: 14px;\n line-height: 1.5;\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n\n p {\n margin: 0 0 1rem;\n }\n\n ol {\n margin: 0 0 1em 1.5em;\n padding: 0;\n list-style-type: decimal;\n list-style-position: outside;\n }\n\n li {\n margin-bottom: 0.5em;\n line-height: 1.6;\n }\n\n strong {\n font-weight: 600;\n }\n\n em {\n font-style: italic;\n }\n\n a {\n font: inherit;\n color: var(--sc-link-color, ${DS_LINK_COLOR});\n text-decoration: none;\n\n &:hover,\n &:focus {\n text-decoration: underline;\n }\n }\n`;\n\nexport const DescriptionToggle = styled.div`\n margin-top: 1em;\n margin-bottom: 0.5em;\n`;\n\n/**\n * CardWrapper applies font overrides via CSS classes.\n * Uses CSS variables with Design System fallbacks.\n * The --sc-* variables are injected by SignalCardNormal based on useInvestigateColors.\n */\nexport const CardWrapper = styled.div`\n height: 100%;\n text-align: left;\n\n @media only screen and (max-width: 768px) {\n min-width: auto;\n }\n\n /* Override DetailedCard header font (uses CSS var with DS fallback) */\n .redsift-detailed-card-header__header {\n font-family: var(--sc-font-heading, var(--redsift-typography-h1-font-family, 'Poppins', sans-serif));\n }\n\n /* Override DetailedCard section title font */\n .redsift-detailed-card-section-header__title {\n font-family: var(--sc-font-heading, var(--redsift-typography-h1-font-family, 'Poppins', sans-serif));\n }\n\n /* Override DetailedCard collapsible section caption font */\n .redsift-detailed-card-collapsible-section-items__caption {\n font-family: var(--sc-font-heading, var(--redsift-typography-h1-font-family, 'Poppins', sans-serif));\n }\n`;\n\nexport const CardContent = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`;\n\nexport const DescriptionSpacer = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const ChartContainer = styled.div`\n margin: 1rem 0;\n overflow-x: auto;\n`;\n\nDescriptionContainer.displayName = 'DeliverabilityDescriptionContainer';\nDescriptionText.displayName = 'DeliverabilityDescriptionText';\nDescriptionToggle.displayName = 'DeliverabilityDescriptionToggle';\nCardWrapper.displayName = 'DeliverabilityCardWrapper';\nCardContent.displayName = 'DeliverabilityCardContent';\nDescriptionSpacer.displayName = 'DeliverabilityDescriptionSpacer';\nChartContainer.displayName = 'InfoChartContainer';\n","import React, { forwardRef } from 'react';\nimport styled, { css } from 'styled-components';\nimport { Theme, useTheme, Button } from '@redsift/design-system';\n\ntype SignalCardButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n theme?: Theme;\n /**\n * Use Investigate product-specific hardcoded colors and fonts instead of Design System CSS variables.\n * When false, uses the Design System Button component.\n * When true, uses the custom styled website button.\n * @default false\n */\n useInvestigateColors?: boolean;\n};\n\ntype ButtonTokenState = 'default' | 'hover' | 'active' | 'disabled' | 'focus-visible';\n\nconst websiteButtonToken = (theme: Theme, token: 'background' | 'text', state: ButtonTokenState) =>\n `var(--redsift-color-${theme}-components-website-buttons-primary-website-button-primary-${token}-${state})`;\n\nconst websiteButtonOutlineToken = (theme: Theme) =>\n `var(--redsift-color-${theme}-components-website-buttons-primary-website-button-primary-background-focus-visible-outline)`;\n\nconst StyledSignalCardButton = styled.button<{ $theme: Theme }>`\n box-sizing: border-box;\n align-items: center;\n background-color: ${({ $theme }) => websiteButtonToken($theme, 'background', 'default')};\n /* Fallback if CSS variables not loaded */\n background-color: var(\n --redsift-color-light-components-website-buttons-primary-website-button-primary-background-default,\n #63224a\n );\n border: none;\n border-radius: 5px;\n display: inline-flex;\n font-family: var(--redsift-typography-website-button-font-family, 'Space Grotesk', sans-serif);\n font-size: var(--redsift-typography-website-button-font-size, 18px);\n font-weight: var(--redsift-typography-website-button-font-weight, 500);\n gap: 8px;\n justify-content: center;\n line-height: var(--redsift-typography-website-button-line-height, 1.5);\n min-height: 48px;\n padding: 10px 20px;\n text-align: center;\n text-decoration: none;\n text-transform: var(--redsift-typography-website-button-text-transform, none);\n cursor: pointer;\n transition: background-color 200ms ease-out, color 200ms ease-out, outline-offset 75ms ease-out;\n vertical-align: middle;\n -webkit-font-smoothing: antialiased;\n\n &,\n .redsift-icon:not(.colored) {\n color: ${({ $theme }) => websiteButtonToken($theme, 'text', 'default')};\n /* Fallback if CSS variables not loaded */\n color: white;\n }\n\n &:focus,\n &:active,\n &:hover {\n outline: none;\n }\n\n &:hover:not(:disabled) {\n ${({ $theme }) => css`\n background-color: ${websiteButtonToken($theme, 'background', 'hover')};\n /* Fallback if CSS variables not loaded */\n background-color: #52184d;\n color: ${websiteButtonToken($theme, 'text', 'hover')};\n color: white;\n\n .redsift-icon:not(.colored) {\n color: ${websiteButtonToken($theme, 'text', 'hover')};\n color: white;\n }\n `}\n }\n\n &:active:not(:disabled) {\n ${({ $theme }) => css`\n background-color: ${websiteButtonToken($theme, 'background', 'active')};\n color: ${websiteButtonToken($theme, 'text', 'active')};\n\n .redsift-icon:not(.colored) {\n color: ${websiteButtonToken($theme, 'text', 'active')};\n }\n `}\n }\n\n &:focus-visible:not(:disabled) {\n ${({ $theme }) => css`\n background-color: ${websiteButtonToken($theme, 'background', 'focus-visible')};\n color: ${websiteButtonToken($theme, 'text', 'focus-visible')};\n outline: 2px solid ${websiteButtonOutlineToken($theme)};\n\n .redsift-icon:not(.colored) {\n color: ${websiteButtonToken($theme, 'text', 'focus-visible')};\n }\n `}\n }\n\n &:focus-visible:not(:disabled):not(:active) {\n transition-duration: 0.25s;\n outline-offset: 6px;\n }\n\n &:disabled {\n ${({ $theme }) => css`\n background-color: ${websiteButtonToken($theme, 'background', 'disabled')};\n color: ${websiteButtonToken($theme, 'text', 'disabled')};\n cursor: not-allowed;\n\n .redsift-icon:not(.colored) {\n color: ${websiteButtonToken($theme, 'text', 'disabled')};\n }\n `}\n }\n`;\n\nexport const SignalCardButton = forwardRef<HTMLButtonElement, SignalCardButtonProps>(\n ({ children, theme: requestedTheme, type = 'button', useInvestigateColors = false, ...rest }, ref) => {\n const theme = useTheme(requestedTheme);\n\n // Use Design System Button when useInvestigateColors is false\n if (!useInvestigateColors) {\n return (\n <Button ref={ref} type={type} {...rest}>\n {children}\n </Button>\n );\n }\n\n // Use custom Investigate website button when useInvestigateColors is true\n return (\n <StyledSignalCardButton ref={ref} type={type} $theme={theme} {...rest}>\n {children}\n </StyledSignalCardButton>\n );\n }\n);\n\nSignalCardButton.displayName = 'SignalCardButton';\n","import React, { useState, useEffect } from 'react';\nimport { DescriptionText, DescriptionToggle } from '../SignalCard/components/CardDescriptionStyles';\nimport { SignalCardButton } from '../components/SignalCardButton';\nimport { useResolvedTheme } from '../../hooks/useSignalCardTheme';\nimport type { TranslationFn } from '@redsift/signal-logic';\nexport interface ExpandableDescriptionProps {\n shortDescription: React.ReactNode;\n additionalDescription?: React.ReactNode;\n hasAdditionalContent: boolean;\n showShowMoreButton: boolean;\n showCTAButton: boolean;\n onCTAButtonClick?: () => void;\n ctaButtonName?: string;\n t: TranslationFn;\n onHeightChange?: () => void;\n useInvestigateColors?: boolean;\n}\n\n/**\n * ExpandableDescription - Isolated description component with its own state\n * to prevent parent re-renders when toggling description visibility.\n */\nexport const ExpandableDescription = React.memo<ExpandableDescriptionProps>(\n ({\n shortDescription,\n additionalDescription,\n hasAdditionalContent,\n showShowMoreButton,\n showCTAButton,\n onCTAButtonClick,\n ctaButtonName,\n t,\n onHeightChange,\n useInvestigateColors: useInvestigateColorsOverride,\n }) => {\n const { useInvestigateColors } = useResolvedTheme(useInvestigateColorsOverride);\n const [showLongDescription, setShowLongDescription] = useState(false);\n\n useEffect(() => {\n onHeightChange?.();\n }, [showLongDescription, onHeightChange]);\n\n return (\n <>\n <DescriptionText>{shortDescription}</DescriptionText>\n\n {hasAdditionalContent && (\n <DescriptionText style={{ display: showLongDescription ? 'block' : 'none' }}>\n {additionalDescription}\n </DescriptionText>\n )}\n\n {showShowMoreButton ? (\n <DescriptionToggle>\n <SignalCardButton\n useInvestigateColors={useInvestigateColors}\n onClick={() => {\n setShowLongDescription(!showLongDescription);\n }}\n >\n {showLongDescription\n ? t('investigate:signal-description.show-less')\n : t('investigate:signal-description.show-more')}\n </SignalCardButton>\n </DescriptionToggle>\n ) : null}\n\n {showCTAButton ? (\n <DescriptionToggle>\n <SignalCardButton\n useInvestigateColors={useInvestigateColors}\n onClick={() => {\n onCTAButtonClick?.();\n }}\n >\n {ctaButtonName}\n </SignalCardButton>\n </DescriptionToggle>\n ) : null}\n </>\n );\n }\n);\n\nExpandableDescription.displayName = 'ExpandableDescription';\n","import React from 'react';\nimport styled from 'styled-components';\nimport { COLOR } from '../../signal-card-styles';\n\n// All theming uses CSS variables with Design System fallbacks (Poppins).\n// When SignalCardThemeProvider sets useInvestigateColors=true,\n// these will be overridden with Investigate-specific fonts.\n\n// Default fallback values - use DS CSS variables with hardcoded ultimate fallbacks\nconst DS_FONT_BODY = \"var(--redsift-typography-body-font-family, 'Poppins', sans-serif)\";\n\nconst StyledContainer = styled.div<{\n $marginBottom: number;\n $borderBottom: boolean;\n $hidden: boolean;\n}>`\n display: ${({ $hidden }) => ($hidden ? 'none' : 'grid')};\n gap: 0.25rem;\n padding: 0;\n padding-bottom: ${({ $borderBottom }) => ($borderBottom ? '0.5rem' : '0')};\n margin-bottom: ${({ $marginBottom, $borderBottom }) =>\n $borderBottom && $marginBottom === 0 ? '0.5rem' : `${$marginBottom}px`};\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n\n &:first-child {\n margin-top: 0;\n }\n\n > h2 {\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n font-size: 1.35rem;\n font-weight: 600;\n margin: 0 0 0.25rem;\n padding: 0;\n }\n\n border-bottom: ${({ $borderBottom }) => ($borderBottom ? `1px solid ${COLOR.grey.light}` : 'none')};\n`;\n\ntype SignalCardSectionProps = {\n children?: React.ReactNode;\n title?: React.ReactNode;\n marginBottom?: number | null;\n borderBottom?: boolean | null;\n hidden?: boolean;\n};\n\nconst SignalCardSection: React.FC<SignalCardSectionProps> = ({\n children,\n title,\n marginBottom = 0,\n borderBottom = true,\n hidden = false,\n}) => {\n return (\n <StyledContainer $marginBottom={marginBottom ?? 0} $borderBottom={borderBottom ?? false} $hidden={hidden}>\n {title ? <h2>{title}</h2> : null}\n {children}\n </StyledContainer>\n );\n};\n\nexport default SignalCardSection;\n","import styled, { css } from 'styled-components';\n\n// ============================================================================\n// All theming now uses CSS variables with Design System fallbacks.\n// When no SignalCardThemeProvider is present, components use DS defaults (Poppins).\n// When SignalCardThemeProvider is used with useInvestigateColors=true,\n// it overrides these with Investigate-specific fonts.\n// ============================================================================\n\n// Default fallback values - use DS CSS variables with hardcoded ultimate fallbacks\nconst DS_FONT_BODY = \"var(--redsift-typography-body-font-family, 'Poppins', sans-serif)\";\nconst DS_FONT_CODE = \"var(--redsift-typography-font-family-source-code-pro, 'Source Code Pro', monospace)\";\nconst DS_TEXT_COLOR = 'var(--redsift-color-neutral-x-dark-grey, #3B3A58)';\nconst DS_BG_LIGHT = 'var(--redsift-color-neutral-x-light-grey, #EAEAED)';\n\nexport const InfoItemContainer = styled.div<{ $compact?: boolean }>`\n padding: ${({ $compact }) => ($compact ? '0.25em 1em 0.25em 0' : '0.5em 1em 0.5em 0')};\n`;\n\nexport const InfoItemRow = styled.div<{ $alignTop?: boolean }>`\n display: flex;\n align-items: ${({ $alignTop }) => ($alignTop ? 'flex-start' : 'center')};\n gap: 0.75rem;\n flex-wrap: wrap;\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n font-size: 14px;\n line-height: 1.5;\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n`;\n\nexport const InfoItemIcon = styled.span<{ $alignTop?: boolean }>`\n display: inline-flex;\n align-items: center;\n justify-content: flex-start;\n padding-right: 0.5em;\n height: 25px;\n margin-top: ${({ $alignTop }) => ($alignTop ? '2px' : '0')};\n flex-shrink: 0;\n`;\n\nexport const InfoItemContent = styled.span`\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: 0.5rem;\n\n p {\n margin: 0;\n }\n`;\n\nexport const InfoItemLabel = styled.span<{\n $variant?: 'warn';\n $inline?: boolean;\n}>`\n display: inline;\n font-size: 14px;\n line-height: 1.5;\n\n strong {\n font-weight: 600;\n margin: 0 0.2rem;\n }\n\n ${({ $inline }) =>\n $inline\n ? css`\n margin-right: 0;\n `\n : ''}\n\n ${({ $variant }) =>\n $variant === 'warn'\n ? css`\n color: #fff;\n background: rgb(232, 70, 70);\n border-radius: 4px;\n padding: 2.8px 7px;\n font-size: 14px;\n line-height: 20px;\n font-weight: 600;\n margin-right: 0;\n `\n : ''}\n`;\n\nexport const InfoItemSubtexts = styled.div<{ $hasImage?: boolean }>`\n margin: 0;\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n font-size: 14px;\n line-height: 1.5;\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n\n ${({ $hasImage }) =>\n $hasImage &&\n `\n max-width: 100%;\n overflow: hidden;\n `}\n\n p {\n margin: 0;\n display: block;\n }\n\n strong {\n font-weight: 600;\n margin: 0 0.2rem;\n }\n\n code {\n background-color: var(--sc-code-bg, ${DS_BG_LIGHT});\n font-family: var(--sc-font-code, ${DS_FONT_CODE});\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n padding: 0.2em 0.5em;\n border-radius: 3px;\n white-space: pre-wrap;\n word-break: break-word;\n }\n`;\n\nexport const InfoItemList = styled.ul`\n list-style-type: none;\n margin: 0;\n padding: 0;\n margin-left: 0;\n\n li {\n margin: 0.3em 0;\n line-height: 1.5;\n font-size: 14px;\n\n strong {\n font-weight: 600;\n }\n\n code {\n background-color: var(--sc-code-bg, ${DS_BG_LIGHT});\n font-family: var(--sc-font-code, ${DS_FONT_CODE});\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n padding: 0.2em 0.5em;\n border-radius: 3px;\n white-space: pre-wrap;\n word-break: break-word;\n }\n\n p {\n margin: 0;\n line-height: inherit;\n font-size: inherit;\n }\n }\n`;\n\nexport const InfoItemCodeBlock = styled.pre`\n background-color: var(--sc-code-bg, ${DS_BG_LIGHT});\n font-family: var(--sc-font-code, ${DS_FONT_CODE});\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n font-size: 14px;\n padding: 0.5em;\n border-radius: 4px;\n word-break: break-all;\n overflow-wrap: break-word;\n white-space: pre-wrap;\n margin-top: 8px;\n\n code {\n font-family: inherit;\n color: inherit;\n }\n`;\n\nexport const InfoItemsWrapper = styled.div`\n position: relative;\n max-width: 100%;\n overflow: hidden;\n\n h1 {\n margin-top: 0.2em;\n margin-bottom: 1em;\n }\n\n h2 {\n font-weight: 600;\n }\n`;\n\nInfoItemContainer.displayName = 'InfoItemContainer';\nInfoItemRow.displayName = 'InfoItemRow';\nInfoItemIcon.displayName = 'InfoItemIcon';\nInfoItemContent.displayName = 'InfoItemContent';\nInfoItemLabel.displayName = 'InfoItemLabel';\nInfoItemSubtexts.displayName = 'InfoItemSubtexts';\nInfoItemList.displayName = 'InfoItemList';\nInfoItemCodeBlock.displayName = 'InfoItemCodeBlock';\nInfoItemsWrapper.displayName = 'InfoItemsWrapper';\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport { COLOR } from '../../signal-card-styles';\nimport { InfoItemContent } from './InfoItemElements';\n\n// All theming uses CSS variables with Design System fallbacks (Poppins).\n// When SignalCardThemeProvider sets useInvestigateColors=true,\n// these will be overridden with Investigate-specific fonts.\n\n// Default fallback values - use DS CSS variables with hardcoded ultimate fallbacks\nconst DS_FONT_BODY = \"var(--redsift-typography-body-font-family, 'Poppins', sans-serif)\";\n\nconst StyledContainer = styled.div`\n border-radius: 4px;\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n > div {\n display: grid;\n padding: 0;\n gap: 0.5rem;\n }\n code {\n font-family: inherit;\n color: inherit;\n padding: 0 0.5rem;\n white-space: pre-wrap;\n word-break: break-word;\n }\n\n > footer {\n border-top: 1px solid ${COLOR.grey.light};\n display: flex;\n justify-content: flex-end;\n padding: 4px 0.5rem;\n font-size: 12px;\n color: ${COLOR.grey.regular}; /* Grey-50 */\n }\n\n ${InfoItemContent} a {\n line-break: anywhere;\n }\n`;\n\ntype SignalCardInfoBoxProps = {\n children?: React.ReactNode;\n footerText?: React.ReactNode;\n};\n\nconst SignalCardInfoBox: React.FC<SignalCardInfoBoxProps> = ({ children, footerText }) => {\n return (\n <StyledContainer>\n <div>{children}</div>\n {footerText ? <footer>{footerText}</footer> : null}\n </StyledContainer>\n );\n};\n\nexport default SignalCardInfoBox;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { COLOR } from '../../../cards/signal-card-styles';\n\n// All theming uses CSS variables with Design System fallbacks (Poppins).\n// When SignalCardThemeProvider sets useInvestigateColors=true,\n// these will be overridden with Investigate-specific fonts.\n\n// Default fallback values - use DS CSS variables with hardcoded ultimate fallbacks\nconst DS_FONT_BODY = \"var(--redsift-typography-body-font-family, 'Poppins', sans-serif)\";\n\ntype GlossaryTagProps = {\n label: React.ReactNode;\n onClick?: () => unknown;\n href?: string;\n color?: string;\n className?: string;\n};\n\ntype Palette = {\n base: string;\n hover: string;\n};\n\nconst DEFAULT_PALETTE: Palette = {\n base: '#e5e5e5',\n hover: '#d6d6d6',\n};\n\nconst COLOR_MAP: Record<string, Palette> = {\n green: { base: '#a5e6c3', hover: '#56d58e' },\n pink: { base: '#eda3da', hover: '#d95cba' },\n aqua: { base: '#9af8f4', hover: '#63eae4' },\n brown: { base: '#edc19c', hover: '#c78348' },\n grey: DEFAULT_PALETTE,\n red: { base: '#f5aaaa', hover: '#e06363' },\n yellow: { base: '#f7efc3', hover: '#fff741' },\n purple: { base: '#c6a8ef', hover: '#965ede' },\n orange: { base: '#f8d296', hover: '#fcbb54' },\n blue: { base: '#addbf0', hover: '#73c5eb' },\n};\n\nconst resolvePalette = (color?: string): Palette => {\n if (!color) {\n return DEFAULT_PALETTE;\n }\n\n const key = color.toLowerCase();\n return COLOR_MAP[key] ?? DEFAULT_PALETTE;\n};\n\nconst StyledGlossaryTag = styled.a<{ $palette: Palette }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 4px 8px;\n margin: 0 0.35rem;\n border-radius: 4px;\n background-color: ${({ $palette }) => $palette.base};\n cursor: pointer;\n user-select: none;\n font-size: 14px;\n font-weight: 400;\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n white-space: nowrap;\n line-height: 1.3;\n color: ${COLOR.grey.darkest} !important;\n text-decoration: none !important;\n transition: background-color 150ms ease;\n\n code {\n font-family: inherit;\n color: inherit;\n }\n\n &:hover,\n &:focus,\n &:active,\n &:visited,\n &:visited:hover {\n color: ${COLOR.grey.darkest} !important;\n text-decoration: none !important;\n }\n\n &:hover,\n &:focus-visible {\n background-color: ${({ $palette }) => $palette.hover};\n }\n`;\n\nconst GlossaryTag: React.FC<GlossaryTagProps> = ({ label, onClick, href, color = 'grey', className }) => {\n const palette = resolvePalette(color);\n const isInteractive = Boolean(href || onClick);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (onClick && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n onClick();\n }\n };\n\n return (\n <StyledGlossaryTag\n as={href ? 'a' : 'span'}\n href={href}\n onClick={onClick}\n onKeyDown={!href && onClick ? handleKeyDown : undefined}\n className={className}\n $palette={palette}\n target={href ? '_blank' : undefined}\n rel={href ? 'noopener noreferrer' : undefined}\n role={!href && onClick ? 'button' : undefined}\n tabIndex={isInteractive && !href ? 0 : undefined}\n >\n {label}\n </StyledGlossaryTag>\n );\n};\n\nexport default GlossaryTag;\n","/**\n * Local color palette derived from @redsift/d3-rs-theme presentation10\n * to avoid package resolution issues in Vite/Storybook\n */\nconst presentation10 = {\n standard: [\n '#56d58e', // green: 0\n '#d95cba', // pink: 1\n '#63eae4', // aqua: 2\n '#C78348', // brown: 3\n '#d6d6d6', // grey: 4\n '#E06363', // red: 5\n '#FFF741', // yellow: 6\n '#965ede', // purple: 7\n '#FCBB54', // orange: 8\n '#73c5eb', // blue: 9\n ],\n darker: [\n '#00ce5c', // green: 0\n '#d800a2', // pink: 1\n '#00d9d2', // aqua: 2\n '#AF5100', // brown: 3\n '#bfbfbf', // grey: 4\n '#DE0000', // red: 5\n '#F0DE00', // yellow: 6\n '#9200ff', // purple: 7\n '#ED9200', // orange: 8\n '#00aeff', // blue: 9\n ],\n lighter: [\n '#a5e6c3', // green: 0\n '#eda3da', // pink: 1\n '#9af8f4', // aqua: 2\n '#EDC19C', // brown: 3\n '#e5e5e5', // grey: 4\n '#F5AAAA', // red: 5\n '#F7EFC3', // yellow: 6\n '#c6a8ef', // purple: 7\n '#F8D296', // orange: 8\n '#addbf0', // blue: 9\n ],\n names: {\n green: 0,\n pink: 1,\n aqua: 2,\n brown: 3,\n grey: 4,\n red: 5,\n yellow: 6,\n purple: 7,\n orange: 8,\n blue: 9,\n },\n};\n\ntype PaletteName = keyof typeof presentation10.names | 'gray';\n\ninterface ColorVariant {\n standard: string;\n darker: string;\n lighter: string;\n name: string;\n}\n\nconst getColor = (name: PaletteName): ColorVariant => {\n const normalizedName = (name === 'gray' ? 'grey' : name) as keyof typeof presentation10.names;\n const paletteIndex = presentation10.names[normalizedName];\n\n return {\n standard: presentation10.standard[paletteIndex],\n darker: presentation10.darker[paletteIndex],\n lighter: presentation10.lighter[paletteIndex],\n name: normalizedName as string,\n };\n};\n\nexport { getColor };\n\nexport const colors = {\n theme: {\n green: getColor('green'),\n pink: getColor('pink'),\n aqua: getColor('aqua'),\n brown: getColor('brown'),\n grey: getColor('grey'),\n red: getColor('red'),\n yellow: getColor('yellow'),\n purple: getColor('purple'),\n orange: getColor('orange'),\n blue: getColor('blue'),\n },\n welcomeGreen: '#4da868',\n ondmarcGreen: '#02ac61',\n ondmarcGreenDark: '#009252',\n ondmarcGreenHover: '#028D51',\n ondmarcGreenActive: '#027442',\n white: '#ffffff',\n grey: '#aaaaaa',\n darkGrey: '#363434',\n inactiveGrey: '#c2c1c1',\n mediumGrey: '#757575',\n ondmarcRed: '#e84646',\n ondmarcRedLight: '#e06354',\n ondmarcRedLightHover: '#D94130',\n ondmarcRedLightActive: '#B12F20',\n ondmarcRedDark: '#e11010',\n ondmarcAmberDark: '#c99900',\n ondmarcBlue: '#0b85d6',\n ondmarcAmber: '#e0ab00',\n black: '#333',\n lightGrey: '#e0e0e0',\n disabledGrey: '#aaa',\n darkGrayishBlue: '#94A0AD',\n lightGreyishBlue: '#fafbff',\n blueGrey: '#adc0d3',\n navGrey: '#c0c0c2',\n navDarkGrey: '#24242a',\n glossary: {\n // FCrDNS card:\n senderIp: getColor('blue'),\n ehlo: getColor('pink'),\n ptrRecord: getColor('aqua'),\n aRecord: getColor('brown'),\n spfRecord: getColor('yellow'),\n // DKIM card:\n dkim: getColor('gray'),\n signerDomain: getColor('grey'),\n dkimSelector: getColor('aqua'),\n canonicalization: getColor('brown'),\n signedHeaders: getColor('yellow'),\n dkimSignature: getColor('green'),\n dkimSignatureHeader: getColor('orange'),\n ttl: getColor('pink'),\n // DMARC card:\n from: getColor('blue'),\n returnPath: getColor('pink'),\n dmarcPolicy: getColor('aqua'),\n pct: getColor('brown'),\n sp: getColor('yellow'),\n rua: getColor('yellow'),\n ruf: getColor('green'),\n dkimSigningDomain: getColor('grey'),\n spfDomain: getColor('red'),\n spfDomains: getColor('red'),\n subdomainPolicy: getColor('blue'),\n dkimAlignment: getColor('pink'),\n spfAlignment: getColor('orange'),\n // SPF card:\n spf: getColor('green'),\n // TLS card:\n tls: getColor('blue'),\n ssl: getColor('red'),\n cipherSuite: getColor('purple'),\n // common:\n key: getColor('red'),\n keyLength: getColor('orange'),\n txtRecord: getColor('purple'),\n bimiRecord: getColor('blue'),\n dmarcCompliant: getColor('blue'),\n svg: getColor('blue'),\n iTag: getColor('purple'),\n aTag: getColor('purple'),\n vmc: getColor('blue'),\n cmc: getColor('blue'),\n dmarc: getColor('aqua'),\n // mta\n tlsRptRecord: getColor('blue'),\n mtaStsRecord: getColor('blue'),\n mtaStsPolicyFile: getColor('blue'),\n version: getColor('aqua'),\n mode: getColor('orange'),\n mx: getColor('green'),\n maxAge: getColor('pink'),\n error: getColor('red'),\n },\n} as const;\n\n// * grey: 4,\n// * orange: 8,\n\n// * green: 0,\n// * blue: 9\n// * pink: 1,\n// * aqua: 2,\n// * brown: 3,\n// * red: 5,\n// * yellow: 6,\n// * purple: 7,\n\n/**\n * Simplified mapping of glossary label IDs to color names for CSS classes\n */\nexport const glossaryColorMap = {\n // FCrDNS card:\n senderIp: 'blue',\n ehlo: 'pink',\n ptrRecord: 'aqua',\n aRecord: 'brown',\n spfRecord: 'yellow',\n // DKIM card:\n dkim: 'grey',\n signerDomain: 'grey',\n dkimSelector: 'aqua',\n canonicalization: 'brown',\n signedHeaders: 'yellow',\n dkimSignature: 'green',\n dkimSignatureHeader: 'orange',\n ttl: 'pink',\n // DMARC card:\n from: 'blue',\n returnPath: 'pink',\n dmarcPolicy: 'aqua',\n pct: 'brown',\n sp: 'yellow',\n rua: 'yellow',\n ruf: 'green',\n dkimSigningDomain: 'grey',\n spfDomain: 'red',\n spfDomains: 'red',\n subdomainPolicy: 'blue',\n dkimAlignment: 'pink',\n spfAlignment: 'orange',\n // SPF card:\n spf: 'green',\n // TLS card:\n tls: 'blue',\n ssl: 'red',\n cipherSuite: 'purple',\n // common:\n key: 'red',\n keyLength: 'orange',\n txtRecord: 'purple',\n bimiRecord: 'blue',\n dmarcCompliant: 'blue',\n svg: 'blue',\n iTag: 'purple',\n aTag: 'purple',\n vmc: 'blue',\n dmarc: 'aqua',\n // mta\n tlsRptRecord: 'blue',\n mtaStsRecord: 'blue',\n mtaStsPolicyFile: 'blue',\n version: 'aqua',\n mode: 'orange',\n mx: 'green',\n maxAge: 'pink',\n error: 'red',\n} as const;\n","/**\n * Glossary terms for Investigate reports\n *\n * This module provides localized glossary term components that link to\n * the Red Sift community glossary documentation.\n */\n\nimport React from 'react';\nimport GlossaryTag from '../ui/GlossaryTag/GlossaryTag';\nimport { glossaryColorMap } from '../../styles/styles';\nimport { useSignalCardTranslation } from '../../hooks/useSignalCardTranslation';\n\nconst GLOSSARY_BASE_PAGE = 'https://community.redsift.com/s/article/000001019';\n\n/**\n * Creates a link to the glossary documentation for a specific term\n */\nexport const createGlossaryLink = ({\n glossaryPage = GLOSSARY_BASE_PAGE,\n label,\n}: {\n glossaryPage?: string;\n label: string;\n}): string => {\n return `${glossaryPage}#${label.toLowerCase().replace(' ', '-').replace('=', '').replace(/_/g, '-')}`;\n};\n\n/**\n * Opens a link in a new window\n * Uses noopener,noreferrer for security (prevents tabnabbing attacks)\n */\nfunction navigateTo(link: string): void {\n window.open(link, '_blank', 'noopener,noreferrer');\n}\n\n/**\n * Mapping of glossary label IDs to their internal names\n */\nexport const glossaryLabelIds = {\n ATAG: 'aTag',\n A_RECORD: 'aRecord',\n BIMI_RECORD: 'bimiRecord',\n CANONICALIZATION: 'canonicalization',\n CNAME_RECORD: 'cnameRecord',\n DKIM: 'dkim',\n DKIM_ALGORITHM: 'dkimAlgorithm',\n DKIM_ALIGNMENT: 'dkimAlignment',\n DKIM_SELECTOR: 'dkimSelector',\n DKIM_SIGNATURE: 'dkimSignature',\n DKIM_SIGNATURE_HEADER: 'dkimSignatureHeader',\n DKIM_SIGNING_DOMAIN: 'dkimSigningDomain',\n DMARC: 'dmarc',\n DMARC_COMPLIANT: 'dmarcCompliant',\n DMARC_POLICY: 'dmarcPolicy',\n EHLO: 'ehlo',\n FROM: 'from',\n ITAG: 'iTag',\n KEY_LENGTH: 'keyLength',\n MTA_FILE_MAX_AGE: 'maxAge',\n MTA_FILE_MODE: 'mode',\n MTA_FILE_MX: 'mx',\n MTA_FILE_VERSION: 'version',\n MTA_STS_POLICY_FILE: 'mtaStsPolicyFile',\n MTA_STS_CERTIFICATE: 'mtaStsCertificate',\n MTA_STS_CERTIFICATE_EXPIRY: 'mtaStsCertificateExpiry',\n MTA_STS_CERTIFICATE_CNAME_NAME: 'mtaStsCertificateCnameName',\n MTA_STS_CERTIFICATE_CNAME_VALUE: 'mtaStsCertificateCnameValue',\n MTA_STS_CERTIFICATE_CNAME_TYPE: 'mtaStsCertificateCnameType',\n MTA_STS_RECORD: 'mtaStsRecord',\n PCT: 'pct',\n PTR_RECORD: 'ptrRecord',\n RETURN_PATH: 'returnPath',\n RUA: 'rua',\n RUF: 'ruf',\n SENDER_IP: 'senderIp',\n SIGNED_HEADERS: 'signedHeaders',\n SIGNER_DOMAIN: 'signerDomain',\n SP: 'sp',\n SPF: 'spf',\n SPF_ALIGNMENT: 'spfAlignment',\n SPF_DOMAIN: 'spfDomain',\n SPF_DOMAINS: 'spfDomains',\n SPF_RECORD: 'spfRecord',\n TLS: 'tls',\n SSL: 'ssl',\n CIPHER_SUITE: 'cipherSuite',\n SUBDOMAIN_POLICY: 'subdomainPolicy',\n SVG: 'svg',\n TLS_RPT_RECORD: 'tlsRptRecord',\n TTL: 'ttl',\n TXT_RECORD: 'txtRecord',\n TXT_RECORDS: 'txtRecord',\n VMC: 'vmc',\n CMC: 'cmc',\n} as const;\n\ntype GlossaryLabelId = keyof typeof glossaryLabelIds;\n\ninterface GlossaryTermProps {\n label: string;\n glossaryLabel?: string;\n context?: string;\n value?: string | number;\n}\n\n/**\n * GlossaryTerm component with React Aria i18n hooks\n */\nconst GlossaryTerm: React.FC<GlossaryTermProps> = ({ label, glossaryLabel, context, value }) => {\n const { t } = useSignalCardTranslation('glossary');\n\n const localeLink = t(`label.${label}.link`, {\n defaultValue: '',\n context,\n });\n\n const resolvedLink = localeLink as unknown as string | boolean;\n\n const link =\n resolvedLink !== false\n ? createGlossaryLink({\n label: glossaryLabel || (resolvedLink as string) || label,\n })\n : undefined;\n\n // Get color name from glossary label ID mapping\n const labelId = glossaryLabelIds[label as GlossaryLabelId];\n const colorName = labelId ? glossaryColorMap[labelId as keyof typeof glossaryColorMap] : undefined;\n\n return (\n <GlossaryTag\n href={link}\n label={t(`label.${label}.value`, {\n defaultValue: t(`label.${label}`),\n context,\n value,\n })}\n color={colorName}\n onClick={link ? () => navigateTo(link) : undefined}\n />\n );\n};\n\n// Export the component directly (no HOC needed)\nexport { GlossaryTerm };\n\n// Type for glossary component props\ninterface GlossaryComponentProps {\n label?: string;\n context?: string;\n value?: string | number;\n glossaryLabel?: string;\n}\n\n/**\n * Factory function to create glossary term components.\n * Reduces boilerplate for the 60+ glossary term wrappers.\n *\n * @param defaultLabel - The default label key from glossaryLabelIds\n * @param displayName - Optional display name for React DevTools\n */\nconst createGlossaryComponent = (\n defaultLabel: GlossaryLabelId,\n displayName?: string\n): React.FC<GlossaryComponentProps> => {\n const Component: React.FC<GlossaryComponentProps> = ({ label = defaultLabel, ...other }) => (\n <GlossaryTerm label={label} {...other} />\n );\n Component.displayName = displayName || defaultLabel;\n return Component;\n};\n\n// FCrDNS card:\nexport const SenderIp = createGlossaryComponent('SENDER_IP', 'SenderIp');\nexport const Ehlo = createGlossaryComponent('EHLO', 'Ehlo');\nexport const PtrRecord = createGlossaryComponent('PTR_RECORD', 'PtrRecord');\nexport const ARecord = createGlossaryComponent('A_RECORD', 'ARecord');\nexport const SpfRecord = createGlossaryComponent('SPF_RECORD', 'SpfRecord');\nexport const TxtRecord = createGlossaryComponent('TXT_RECORD', 'TxtRecord');\nexport const TxtRecords = createGlossaryComponent('TXT_RECORDS', 'TxtRecords');\nexport const CnameRecord = createGlossaryComponent('CNAME_RECORD', 'CnameRecord');\n\n// DKIM card:\nexport const Dkim = createGlossaryComponent('DKIM', 'Dkim');\nexport const SignerDomain = createGlossaryComponent('SIGNER_DOMAIN', 'SignerDomain');\nexport const DkimSelector = createGlossaryComponent('DKIM_SELECTOR', 'DkimSelector');\nexport const Canonicalization = createGlossaryComponent('CANONICALIZATION', 'Canonicalization');\nexport const SignedHeaders = createGlossaryComponent('SIGNED_HEADERS', 'SignedHeaders');\nexport const DkimSignature = createGlossaryComponent('DKIM_SIGNATURE', 'DkimSignature');\nexport const KeyLength = createGlossaryComponent('KEY_LENGTH', 'KeyLength');\nexport const Ttl = createGlossaryComponent('TTL', 'Ttl');\nexport const DkimAlgorithm = createGlossaryComponent('DKIM_ALGORITHM', 'DkimAlgorithm');\n\n// DMARC card:\nexport const From = createGlossaryComponent('FROM', 'From');\nexport const ReturnPath = createGlossaryComponent('RETURN_PATH', 'ReturnPath');\nexport const DmarcPolicy = createGlossaryComponent('DMARC_POLICY', 'DmarcPolicy');\nexport const Pct = createGlossaryComponent('PCT', 'Pct');\nexport const Sp = createGlossaryComponent('SP', 'Sp');\nexport const Rua = createGlossaryComponent('RUA', 'Rua');\nexport const Ruf = createGlossaryComponent('RUF', 'Ruf');\nexport const DkimSigningDomain = createGlossaryComponent('DKIM_SIGNING_DOMAIN', 'DkimSigningDomain');\nexport const SpfDomain = createGlossaryComponent('SPF_DOMAIN', 'SpfDomain');\nexport const SubdomainPolicy = createGlossaryComponent('SUBDOMAIN_POLICY', 'SubdomainPolicy');\nexport const DkimAlignment = createGlossaryComponent('DKIM_ALIGNMENT', 'DkimAlignment');\nexport const SpfAlignment = createGlossaryComponent('SPF_ALIGNMENT', 'SpfAlignment');\n\n// SPF card:\nexport const Spf = createGlossaryComponent('SPF', 'Spf');\n\n// TLS card:\nexport const Tls = createGlossaryComponent('TLS', 'Tls');\nexport const Ssl = createGlossaryComponent('SSL', 'Ssl');\nexport const CipherSuite = createGlossaryComponent('CIPHER_SUITE', 'CipherSuite');\n\n// BIMI card:\nexport const BimiRecord = createGlossaryComponent('BIMI_RECORD', 'BimiRecord');\nexport const DmarcCompliant = createGlossaryComponent('DMARC_COMPLIANT', 'DmarcCompliant');\nexport const SVG = createGlossaryComponent('SVG', 'SVG');\nexport const VMC = createGlossaryComponent('VMC', 'VMC');\nexport const CMC = createGlossaryComponent('CMC', 'CMC');\nexport const ITAG = createGlossaryComponent('ITAG', 'ITAG');\nexport const ATAG = createGlossaryComponent('ATAG', 'ATAG');\nexport const Dmarc = createGlossaryComponent('DMARC', 'Dmarc');\n\n// MTA card:\nexport const TlsRptRecord = createGlossaryComponent('TLS_RPT_RECORD', 'TlsRptRecord');\nexport const MtaStsRecord = createGlossaryComponent('MTA_STS_RECORD', 'MtaStsRecord');\nexport const MtaStsPolicyFile = createGlossaryComponent('MTA_STS_POLICY_FILE', 'MtaStsPolicyFile');\nexport const Version = createGlossaryComponent('MTA_FILE_VERSION', 'Version');\nexport const Mode = createGlossaryComponent('MTA_FILE_MODE', 'Mode');\nexport const Mx = createGlossaryComponent('MTA_FILE_MX', 'Mx');\nexport const MaxAge = createGlossaryComponent('MTA_FILE_MAX_AGE', 'MaxAge');\nexport const MtaStsCertificate = createGlossaryComponent('MTA_STS_CERTIFICATE', 'MtaStsCertificate');\nexport const MtaStsCertificateExpiry = createGlossaryComponent('MTA_STS_CERTIFICATE_EXPIRY', 'MtaStsCertificateExpiry');\nexport const MtaStsCertificateCnameName = createGlossaryComponent(\n 'MTA_STS_CERTIFICATE_CNAME_NAME',\n 'MtaStsCertificateCnameName'\n);\nexport const MtaStsCertificateCnameValue = createGlossaryComponent(\n 'MTA_STS_CERTIFICATE_CNAME_VALUE',\n 'MtaStsCertificateCnameValue'\n);\nexport const MtaStsCertificateCnameType = createGlossaryComponent(\n 'MTA_STS_CERTIFICATE_CNAME_TYPE',\n 'MtaStsCertificateCnameType'\n);\n\n// =============================================================================\n// ICON MAP - Single source of truth for icon type → component mapping\n// =============================================================================\n\n/**\n * Type for glossary icon identifiers (kebab-case).\n * Used as keys in extractors to reference icons without coupling to React components.\n */\nexport type GlossaryIconType =\n // FCrDNS\n | 'sender-ip'\n | 'ehlo'\n | 'ptr-record'\n | 'a-record'\n // SPF\n | 'spf'\n | 'spf-record'\n | 'spf-domain'\n | 'spf-alignment'\n // DKIM\n | 'dkim'\n | 'dkim-signing-domain'\n | 'dkim-selector'\n | 'dkim-signature'\n | 'dkim-algorithm'\n | 'canonicalization'\n | 'signed-headers'\n | 'signer-domain'\n | 'key-length'\n | 'ttl'\n | 'dkim-alignment'\n // DMARC\n | 'from'\n | 'return-path'\n | 'dmarc-policy'\n | 'pct'\n | 'rua'\n | 'ruf'\n | 'subdomain-policy'\n | 'dmarc'\n // TLS\n | 'tls'\n | 'ssl'\n | 'cipher-suite'\n // DNS records\n | 'txt-record'\n | 'cname-record'\n // BIMI\n | 'bimi-record'\n | 'dmarc-compliant'\n | 'svg'\n | 'vmc'\n | 'cmc'\n | 'itag'\n | 'atag'\n // MTA-STS\n | 'tls-rpt-record'\n | 'mta-sts-record'\n | 'mta-sts-policy-file'\n | 'mta-file-version'\n | 'mta-file-mode'\n | 'mta-file-mx'\n | 'mta-file-max-age'\n | 'mta-sts-certificate'\n | 'mta-sts-certificate-expiry'\n | null;\n\n/**\n * Map from icon type identifiers (kebab-case) to glossary icon components.\n * This is the single source of truth for icon mapping.\n * Covers all signal card types (DMARC, DKIM, SPF, FCRDNS, TLS, BIMI, MTA-STS).\n */\nexport const GLOSSARY_ICON_MAP: Record<NonNullable<GlossaryIconType>, React.FC<GlossaryComponentProps>> = {\n // FCrDNS\n 'sender-ip': SenderIp,\n ehlo: Ehlo,\n 'ptr-record': PtrRecord,\n 'a-record': ARecord,\n // SPF\n spf: Spf,\n 'spf-record': SpfRecord,\n 'spf-domain': SpfDomain,\n 'spf-alignment': SpfAlignment,\n // DKIM\n dkim: Dkim,\n 'dkim-signing-domain': DkimSigningDomain,\n 'dkim-selector': DkimSelector,\n 'dkim-signature': DkimSignature,\n 'dkim-algorithm': DkimAlgorithm,\n canonicalization: Canonicalization,\n 'signed-headers': SignedHeaders,\n 'signer-domain': SignerDomain,\n 'key-length': KeyLength,\n ttl: Ttl,\n 'dkim-alignment': DkimAlignment,\n // DMARC\n from: From,\n 'return-path': ReturnPath,\n 'dmarc-policy': DmarcPolicy,\n pct: Pct,\n rua: Rua,\n ruf: Ruf,\n 'subdomain-policy': SubdomainPolicy,\n dmarc: Dmarc,\n // TLS\n tls: Tls,\n ssl: Ssl,\n 'cipher-suite': CipherSuite,\n // DNS records\n 'txt-record': TxtRecord,\n 'cname-record': CnameRecord,\n // BIMI\n 'bimi-record': BimiRecord,\n 'dmarc-compliant': DmarcCompliant,\n svg: SVG,\n vmc: VMC,\n cmc: CMC,\n itag: ITAG,\n atag: ATAG,\n // MTA-STS\n 'tls-rpt-record': TlsRptRecord,\n 'mta-sts-record': MtaStsRecord,\n 'mta-sts-policy-file': MtaStsPolicyFile,\n 'mta-file-version': Version,\n 'mta-file-mode': Mode,\n 'mta-file-mx': Mx,\n 'mta-file-max-age': MaxAge,\n 'mta-sts-certificate': MtaStsCertificate,\n 'mta-sts-certificate-expiry': MtaStsCertificateExpiry,\n};\n","/**\n * Glossary Markdown Parser\n *\n * Parses a subset of markdown syntax used in translation strings to render\n * React components for glossary terms, links, and formatting.\n *\n * @security TRUST ASSUMPTION\n * This parser trusts translation strings and renders their content as React elements.\n * Translation strings are bundled at build time from source-controlled JSON files,\n * NOT from user input or external APIs. If translation sources are ever moved to\n * an external CMS or user-editable system, this parser would need to be reviewed\n * for XSS vulnerabilities.\n *\n * Current security measures:\n * - URL validation: Only http/https protocols are allowed for links (see isValidUrl)\n * - No dangerouslySetInnerHTML usage\n * - Glossary terms are mapped to known component types\n */\n\nimport React from 'react';\nimport * as GlossaryComponents from '../components/glossary/glossary';\nimport { GlossaryTerm } from '../components/glossary/glossary';\nimport styled from 'styled-components';\nimport { COLOR } from '../cards/signal-card-styles';\n\n// Styled span that adds right padding when followed by a glossary tag\nconst TextBeforeGlossary = styled.span`\n &.before-glossary {\n padding-right: 0.35rem;\n }\n\n &.before-link {\n padding-right: 0.2rem;\n }\n`;\n\nconst MarkdownLink = styled.a`\n color: ${COLOR.main.blue};\n text-decoration: none;\n font: inherit;\n\n &:hover,\n &:focus {\n color: #005fa3;\n text-decoration: underline;\n }\n`;\n\nconst BoldText = styled.strong`\n font-weight: 600;\n`;\n\n/**\n * Validates that a URL uses a safe protocol (http or https).\n * Prevents XSS attacks via javascript: or data: URLs in translation strings.\n */\nconst isValidUrl = (url: string): boolean => {\n try {\n const parsed = new URL(url);\n return ['http:', 'https:'].includes(parsed.protocol);\n } catch {\n return false;\n }\n};\n\n/**\n * Parses markdown-style glossary syntax and converts to React components\n *\n * Supports patterns:\n * - [](TERM#:glossary) - Empty text, uses component's default label\n * - [Custom Text](TERM#:glossary) - Custom text with glossary link (renders as GlossaryTerm)\n * - [Link text](https://url) - Regular markdown links\n * - **bold text** - Bold formatting\n * - `code` - Inline code\n *\n * Example:\n * \"[PERCENT 100](PCT#:glossary) of **unauthorized** emails\"\n * becomes: <GlossaryTerm label=\"PCT\" context=\"PERCENT\" value=\"100\" /> of <strong>unauthorized</strong> emails\n */\n\n// Combined regex pattern for O(n) parsing - matches all markdown patterns in a single pass\n// Groups: 1=glossary text, 2=glossary term, 3=http link text, 4=http link url, 5=bold, 6=italic, 7=code, 8=plain link text, 9=plain link value\n// NOTE: Create new RegExp instance per call to avoid shared state issues with global flag\n// Order matters: check glossary first, then http links, then plain links (most specific to least specific)\nconst COMBINED_PATTERN_SOURCE =\n /\\[([^\\]]*)\\]\\(([A-Z_]+)#:glossary\\)|\\[([^\\]]+)\\]\\((https?:\\/\\/[^)]+)\\)|\\*\\*([^*]+)\\*\\*|\\*(?!\\*)([^*]+)\\*(?!\\*)|`([^`]+)`|\\[([^\\]]+)\\]\\(([^)]+)\\)/\n .source;\n\nexport function parseGlossaryMarkdown(text: string): React.ReactNode {\n if (!text || typeof text !== 'string') {\n return text;\n }\n\n const parts: React.ReactNode[] = [];\n let lastIndex = 0;\n let keyCounter = 0;\n let match: RegExpExecArray | null;\n\n // Create new regex instance per call to avoid shared lastIndex state issues\n const pattern = new RegExp(COMBINED_PATTERN_SOURCE, 'g');\n\n while ((match = pattern.exec(text)) !== null) {\n // Add text before the match (wrapped in span for CSS sibling selectors)\n if (match.index > lastIndex) {\n const textBefore = text.substring(lastIndex, match.index);\n // Determine class based on what type of match follows\n const isGlossary = match[2] !== undefined;\n const isLink = match[4] !== undefined;\n const className = isGlossary ? 'before-glossary' : isLink ? 'before-link' : '';\n parts.push(\n <TextBeforeGlossary key={`text-${keyCounter++}`} className={className}>\n {textBefore}\n </TextBeforeGlossary>\n );\n }\n\n // Process match based on which group matched\n if (match[2] !== undefined) {\n // Glossary: [custom text](TERM#:glossary)\n const customText = match[1];\n const termId = match[2];\n\n // Convert TXT_RECORD to TxtRecord\n const componentName = termId\n .split('_')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('');\n\n const GlossaryComponent = (GlossaryComponents as Record<string, any>)[componentName];\n\n if (GlossaryComponent) {\n if (customText) {\n const [context = '', ...rest] = customText.trim().split(/\\s+/);\n const value = rest.length ? rest.join(' ') : undefined;\n\n parts.push(\n <GlossaryTerm\n key={`glossary-${keyCounter++}`}\n label={termId}\n context={context || undefined}\n value={value}\n glossaryLabel={customText}\n />\n );\n } else {\n // No custom text - use the component with default label\n const Component = GlossaryComponent as React.ComponentType<any>;\n parts.push(<Component key={`glossary-${keyCounter++}`} />);\n }\n } else {\n // Component not found - render via GlossaryTerm with provided text\n const [context = '', ...rest] = customText ? customText.trim().split(/\\s+/) : [''];\n const value = rest.length ? rest.join(' ') : undefined;\n\n parts.push(\n <GlossaryTerm\n key={`glossary-${keyCounter++}`}\n label={termId}\n context={context || undefined}\n value={value}\n glossaryLabel={customText || termId}\n />\n );\n }\n } else if (match[4] !== undefined) {\n // Link: [text](url)\n const linkText = match[3];\n const linkUrl = match[4];\n // Validate URL protocol to prevent XSS via javascript: or data: URLs\n if (isValidUrl(linkUrl)) {\n parts.push(\n <MarkdownLink key={`link-${keyCounter++}`} href={linkUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n {linkText}\n </MarkdownLink>\n );\n } else {\n // Invalid URL - render as plain text for safety\n parts.push(<span key={`text-${keyCounter++}`}>{linkText}</span>);\n }\n } else if (match[5] !== undefined) {\n // Bold: **text**\n const boldText = match[5];\n const parsedBoldText = parseGlossaryMarkdown(boldText);\n parts.push(<BoldText key={`bold-${keyCounter++}`}>{parsedBoldText}</BoldText>);\n } else if (match[6] !== undefined) {\n // Italic: *text*\n const italicText = match[6];\n const parsedItalicText = parseGlossaryMarkdown(italicText);\n parts.push(<em key={`italic-${keyCounter++}`}>{parsedItalicText}</em>);\n } else if (match[7] !== undefined) {\n // Code: `text`\n const codeText = match[7];\n parts.push(<code key={`code-${keyCounter++}`}>{codeText}</code>);\n } else if (match[8] !== undefined && match[9] !== undefined) {\n // Plain link (non-http): [text](value) - render value as plain text\n // This handles cases like [svg-url](123) where 123 is not a valid URL\n const linkValue = match[9];\n parts.push(<span key={`plain-link-${keyCounter++}`}>{linkValue}</span>);\n }\n\n lastIndex = match.index + match[0].length;\n }\n\n // Add remaining text after last match\n if (lastIndex < text.length) {\n parts.push(text.substring(lastIndex));\n }\n\n // If no matches found, return original text\n if (parts.length === 0) {\n return text;\n }\n\n // If only one part and it's a string, return it directly\n if (parts.length === 1 && typeof parts[0] === 'string') {\n return parts[0];\n }\n\n // Wrap in fragment\n return <>{parts}</>;\n}\n","/* istanbul ignore file */\n\n/**\n * Caption types for ExtractionBox component\n * Maps to predefined caption text shown at bottom-right of grey boxes\n */\nexport type ExtractionCaptionType = 'email' | 'dns' | 'dns-details' | 'policy' | 'email-details';\n\n/**\n * Maps extraction caption types to translation keys\n */\nexport const EXTRACTION_CAPTION_KEYS: Record<ExtractionCaptionType, string> = {\n email: 'investigate:extracted-email',\n dns: 'investigate:extracted-dns',\n 'dns-details': 'investigate:extracted-dns-details',\n policy: 'investigate:extracted-policy',\n 'email-details': 'investigate:extracted-email-details',\n};\n","import styled from 'styled-components';\nimport { COLOR } from '../../signal-card-styles';\n\n// ============================================================================\n// All theming uses CSS variables with Design System fallbacks (Poppins).\n// When SignalCardThemeProvider sets useInvestigateColors=true,\n// these will be overridden with Investigate-specific fonts.\n// ============================================================================\n\n// Default fallback values - use DS CSS variables with hardcoded ultimate fallbacks\nconst DS_FONT_BODY = \"var(--redsift-typography-body-font-family, 'Poppins', sans-serif)\";\nconst DS_FONT_CODE = \"var(--redsift-typography-font-family-source-code-pro, 'Source Code Pro', monospace)\";\nconst DS_TEXT_COLOR = 'var(--redsift-color-neutral-x-dark-grey, #3B3A58)';\nconst DS_BG_LIGHT = 'var(--redsift-color-neutral-x-light-grey, #EAEAED)';\n\nexport const SectionHeader = styled.div`\n padding: 0;\n margin-bottom: 0.25rem;\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n line-height: normal;\n`;\n\nexport const SectionTitle = styled.span`\n margin: 0;\n margin-right: 0.5rem;\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n font-size: 16px;\n font-weight: 600;\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n`;\n\nexport const SectionCaption = styled.span`\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n font-size: 12px;\n font-weight: 400;\n color: ${COLOR.grey.medium};\n white-space: nowrap;\n\n code {\n font-family: inherit;\n color: inherit;\n white-space: nowrap;\n word-break: normal;\n }\n`;\n\nexport const ExtractionBox = styled.div<{ $hasCaption?: boolean }>`\n background-color: var(--sc-grey-background, ${DS_BG_LIGHT});\n padding: 0.5rem;\n border-radius: 4px;\n position: relative;\n padding-bottom: ${({ $hasCaption }) => ($hasCaption ? '1.75rem' : '0.5rem')};\n margin-bottom: 0.5rem;\n`;\n\nexport const ExtractionCaption = styled.div`\n position: absolute;\n bottom: 0.5rem;\n right: 0.5rem;\n left: 0.5rem;\n font-size: 12px;\n color: ${COLOR.grey.regular};\n text-align: right;\n line-height: 1.2;\n padding-top: 0.5rem;\n`;\n\nexport const InfoItemsHighlight = styled.div<{ $compact?: boolean; $insideCollapsible?: boolean }>`\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n padding-bottom: ${(props) => (props.$insideCollapsible ? '0' : '0.5rem')};\n word-break: break-word;\n border-radius: ${(props) => (props.$insideCollapsible ? '0' : '4px')};\n margin: ${(props) => (props.$insideCollapsible ? '0' : 'initial')};\n`;\n\nexport const InfoItemsGrid = styled.div<{\n $hasNonInlineItems?: boolean;\n $insideCollapsible?: boolean;\n}>`\n display: grid;\n grid-template-columns: auto 1fr;\n gap: 0.5rem 0.75rem;\n align-items: center;\n padding: ${(props) => (props.$insideCollapsible ? '0' : '0 0 0.5rem 0')};\n word-break: break-word;\n border-radius: ${(props) => (props.$insideCollapsible ? '0' : '4px')};\n margin: ${(props) => (props.$insideCollapsible ? '0' : 'initial')};\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n font-size: 14px;\n line-height: 1.5;\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n`;\n\nexport const GridLabel = styled.div`\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-size: 14px;\n line-height: 1.5;\n\n code {\n font-family: inherit;\n color: inherit;\n padding: 0 0.5rem;\n white-space: pre-wrap;\n word-break: break-word;\n }\n`;\n\nexport const GridValue = styled.div`\n display: flex;\n align-items: center;\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n font-size: 14px;\n font-weight: 600;\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n word-break: break-all;\n\n p {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n }\n\n span {\n margin-left: 0 !important;\n }\n\n code {\n font-family: inherit;\n color: inherit;\n padding: 0 0.5rem;\n white-space: pre-wrap;\n word-break: break-word;\n }\n`;\n\nexport const CodeBlock = styled.div`\n font-family: var(--sc-font-code, ${DS_FONT_CODE});\n font-size: 14px;\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n border-radius: 4px;\n width: 100%;\n word-break: break-all;\n white-space: normal;\n line-height: 1.5;\n\n p {\n display: inline !important;\n margin: 0 !important;\n padding: 0 !important;\n white-space: normal !important;\n }\n\n br {\n display: none !important;\n }\n`;\n\nExtractionBox.displayName = 'ExtractionBox';\nExtractionCaption.displayName = 'ExtractionCaption';\nInfoItemsHighlight.displayName = 'InfoItemsHighlight';\n","import React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Icon } from '@redsift/design-system';\nimport { mdiCheck, mdiClose, mdiEarth, mdiInformationOutline, mdiHelpCircle, mdiAlert, mdiEmail } from '@redsift/icons';\n\nimport { COLOR } from '../../../cards/signal-card-styles';\nimport { parseGlossaryMarkdown } from '../../../utils/parse-glossary-markdown';\nimport {\n EXTRACTION_CAPTION_KEYS,\n type ExtractionCaptionType,\n} from '../../../cards/SignalCard/components/extraction-box.constants';\nimport { useSignalCardTranslation } from '../../../hooks/useSignalCardTranslation';\nimport { ExtractionBox, ExtractionCaption } from '../../../cards/SignalCard/components/InfoSectionStyles';\n\n// All theming uses CSS variables with Design System fallbacks (Poppins).\n// When SignalCardThemeProvider sets useInvestigateColors=true,\n// these will be overridden with Investigate-specific fonts.\n\n// Default fallback values - use DS CSS variables with hardcoded ultimate fallbacks\nconst DS_FONT_BODY = \"var(--redsift-typography-body-font-family, 'Poppins', sans-serif)\";\nconst DS_FONT_CODE = \"var(--redsift-typography-font-family-source-code-pro, 'Source Code Pro', monospace)\";\nconst DS_TEXT_COLOR = 'var(--redsift-color-neutral-x-dark-grey, #3B3A58)';\nconst DS_LINK_COLOR = 'var(--redsift-color-notifications-info-primary, #4285f4)';\nconst DS_BG_LIGHT = 'var(--redsift-color-neutral-x-light-grey, #EAEAED)';\n\nconst StyledChecklistContainer = styled.div<{ $fluid: boolean }>`\n display: flex;\n flex-direction: ${({ $fluid }) => ($fluid ? 'row' : 'column')};\n flex-wrap: ${({ $fluid }) => ($fluid ? 'wrap' : 'nowrap')};\n gap: ${({ $fluid }) => ($fluid ? '0.5rem' : '0')};\n /* padding-bottom: 1rem; */\n min-width: 0; /* Allow flex container to shrink */\n\n /* Remove padding-bottom when inside result options list */\n [for='resultsList'] & {\n padding-bottom: 0;\n }\n`;\n\nconst StyledInfoItem = styled.div<{ $fluid: boolean; $compact: boolean }>`\n display: flex;\n flex-direction: column;\n gap: ${({ $compact }) => ($compact ? '0' : '0.35rem')};\n padding: ${({ $compact }) => ($compact ? '0.1em 0.5em 0.1em 0' : '0.25em 1em 0.25em 0')};\n min-width: 0; /* Allow flex item to shrink */\n ${({ $fluid }) =>\n $fluid\n ? css`\n flex: 1 1 200px;\n `\n : ''}\n`;\n\nconst StyledItemText = styled.div<{ $compact: boolean }>`\n display: flex;\n align-items: ${({ $compact }) => ($compact ? 'center' : 'flex-start')};\n gap: ${({ $compact }) => ($compact ? '0.5rem' : '0.75rem')};\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n font-size: 0.875rem;\n line-height: ${({ $compact }) => ($compact ? '1.4' : '2')};\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n min-width: 0; /* Allow flex container to shrink */\n\n @media (max-width: 480px) {\n max-width: 100%;\n }\n`;\n\nconst StyledIconWrapper = styled.span<{ $compact: boolean }>`\n display: flex;\n align-items: center;\n justify-content: center;\n padding-right: ${({ $compact }) => ($compact ? '0.25em' : '0.5em')};\n margin-top: ${({ $compact }) => ($compact ? '0' : '5px')};\n flex-shrink: 0;\n`;\n\nconst StyledContent = styled.span`\n flex: 1;\n display: block;\n min-width: 0; /* Allow flex item to shrink below content size */\n overflow-wrap: break-word;\n\n p {\n margin: 0 0 0.5rem;\n display: block;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n strong {\n font-weight: 600;\n }\n\n a {\n font: inherit;\n color: var(--sc-link-color, ${DS_LINK_COLOR});\n text-decoration: none;\n\n &:hover,\n &:focus {\n text-decoration: underline;\n }\n }\n\n code {\n background-color: var(--sc-code-bg, ${DS_BG_LIGHT});\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n border-radius: 4px;\n padding: 0 0.25rem;\n word-break: break-word;\n }\n`;\n\nconst StyledSubtexts = styled.div`\n margin: 0.5em 0 0.5em 0;\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n font-size: 0.875rem;\n line-height: 2;\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n overflow-wrap: break-word;\n\n a {\n font: inherit;\n color: var(--sc-link-color, ${DS_LINK_COLOR});\n text-decoration: none;\n\n &:hover,\n &:focus {\n text-decoration: underline;\n }\n }\n\n strong {\n font-weight: 600;\n }\n\n code {\n background-color: var(--sc-code-bg, ${DS_BG_LIGHT});\n font-family: var(--sc-font-code, ${DS_FONT_CODE});\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n padding: 0.2em 0.5em;\n border-radius: 3px;\n white-space: pre-wrap;\n word-break: break-word;\n }\n`;\n\nexport type ChecklistItem = {\n type: 'good' | 'info' | 'warning' | 'danger' | 'unknown' | string;\n theme?: 'email' | 'dns' | string;\n text: React.ReactNode;\n subtexts?: { text: React.ReactNode }[];\n link?: Record<string, unknown>;\n hasWarning?: boolean;\n /**\n * Wraps item in grey extraction box with optional caption\n * Used for DNS records, email data, policy files, etc.\n */\n extractionBox?: {\n caption?: ExtractionCaptionType;\n };\n /** Optional test ID for QA automation */\n 'data-testid'?: string;\n};\n\nexport type ChecklistProps = {\n items?: ChecklistItem[];\n fluid?: boolean;\n /** When true, renders with reduced vertical spacing for use inside radio/checkbox labels */\n compact?: boolean;\n};\n\nconst renderValue = (value: React.ReactNode, keyPrefix: string): React.ReactNode[] => {\n const nodes: React.ReactNode[] = [];\n\n const process = (item: React.ReactNode, prefix: string) => {\n if (item === null || item === undefined) {\n return;\n }\n\n if (Array.isArray(item)) {\n item.forEach((entry, idx) => process(entry as React.ReactNode, `${prefix}-${idx}`));\n return;\n }\n\n if (typeof item === 'string') {\n const trimmed = item.trim();\n if (!trimmed) {\n return;\n }\n\n nodes.push(<p key={`${prefix}-text`}>{parseGlossaryMarkdown(item)}</p>);\n return;\n }\n\n if (React.isValidElement(item)) {\n nodes.push(\n React.cloneElement(item, {\n key: item.key ?? `${prefix}-element`,\n })\n );\n return;\n }\n\n nodes.push(<p key={`${prefix}-fallback`}>{item}</p>);\n };\n\n process(value, keyPrefix);\n return nodes;\n};\n\ntype IconProps = Pick<ChecklistItem, 'type' | 'theme' | 'hasWarning'>;\n\nconst getIcon = ({ type, theme, hasWarning }: IconProps) => {\n switch (type) {\n case 'good':\n return <Icon icon={mdiCheck} color={hasWarning ? COLOR.main.yellow : COLOR.main.green} size=\"small\" />;\n case 'info':\n if (theme === 'email') {\n return <Icon icon={mdiEmail} color={COLOR.main.black} size=\"small\" />;\n }\n if (theme === 'dns') {\n return <Icon icon={mdiEarth} size=\"small\" />;\n }\n return <Icon icon={mdiInformationOutline} size=\"small\" />;\n case 'warning':\n return <Icon icon={mdiAlert} color={COLOR.main.yellow} size=\"small\" />;\n case 'danger':\n return <Icon icon={mdiClose} color={COLOR.main.red} size=\"small\" />;\n case 'unknown':\n return <Icon icon={mdiHelpCircle} size=\"small\" />;\n default:\n return null;\n }\n};\n\ntype InfoItemProps = ChecklistItem & { fluid: boolean; compact: boolean };\n\nconst InfoItem: React.FC<InfoItemProps> = ({\n type,\n theme,\n text,\n subtexts,\n hasWarning,\n fluid,\n compact,\n extractionBox,\n 'data-testid': dataTestId,\n}) => {\n const renderedText = renderValue(text, 'info-item-text');\n const icon = getIcon({ type, theme, hasWarning });\n const { t } = useSignalCardTranslation('investigate');\n\n const captionText = extractionBox?.caption ? t(EXTRACTION_CAPTION_KEYS[extractionBox.caption]) : undefined;\n\n // Handle image type specially - render without flex wrapper to preserve overflow\n if (type === 'image') {\n return (\n <StyledInfoItem $fluid={fluid} $compact={compact} data-testid={dataTestId}>\n {renderedText.length ? renderedText : null}\n </StyledInfoItem>\n );\n }\n\n const content = (\n <StyledInfoItem $fluid={fluid} $compact={compact} data-testid={dataTestId}>\n <StyledItemText $compact={compact}>\n {icon && <StyledIconWrapper $compact={compact}>{icon}</StyledIconWrapper>}\n <StyledContent>{renderedText.length ? renderedText : null}</StyledContent>\n </StyledItemText>\n {subtexts?.length ? (\n <StyledSubtexts>\n {subtexts.map((subtext, idx) => (\n <React.Fragment key={idx}>{renderValue(subtext.text, `info-item-subtext-${idx}`)}</React.Fragment>\n ))}\n </StyledSubtexts>\n ) : null}\n </StyledInfoItem>\n );\n\n // Wrap in extraction box if specified\n if (extractionBox) {\n return (\n <ExtractionBox $hasCaption={!!captionText}>\n {content}\n {captionText && <ExtractionCaption>{captionText}</ExtractionCaption>}\n </ExtractionBox>\n );\n }\n\n return content;\n};\n\n// Memoize InfoItem to prevent unnecessary re-renders of subtexts (e.g., Sankey charts)\nconst MemoizedInfoItem = React.memo(InfoItem);\n\nconst Checklist: React.FC<ChecklistProps> = ({ items = [], fluid = false, compact = false }) => {\n return (\n <StyledChecklistContainer $fluid={fluid}>\n {items.map((item, index) => (\n <MemoizedInfoItem key={index} {...item} fluid={fluid} compact={compact} />\n ))}\n </StyledChecklistContainer>\n );\n};\n\nexport default Checklist;\n\nStyledChecklistContainer.displayName = 'ChecklistContainer';\nStyledInfoItem.displayName = 'ChecklistInfoItem';\nStyledItemText.displayName = 'ChecklistItemText';\nStyledIconWrapper.displayName = 'ChecklistIconWrapper';\nStyledContent.displayName = 'ChecklistContent';\nStyledSubtexts.displayName = 'ChecklistSubtexts';\n","import React from 'react';\nimport { DetailedCard } from '@redsift/design-system';\nimport Checklist from '../../components/ui/Checklist/Checklist';\nimport { EXTRACTION_CAPTION_KEYS, type ExtractionCaptionType } from '../SignalCard/components/extraction-box.constants';\n\nexport interface ChecklistCategory {\n title?: string;\n caption?: ExtractionCaptionType;\n items?: Array<any>;\n text?: React.ReactNode;\n}\n\nexport interface ChecklistRendererProps {\n /** Array of category objects containing items to render. Accepts any[] for backwards compatibility with existing prop types. */\n infoItemsCategories: Array<ChecklistCategory | any>;\n /** Whether sections are collapsible */\n isCollapsible?: boolean;\n /** Whether all sections are collapsed */\n areAllCollapsed?: boolean;\n /** Translation function for captions */\n t: (key: string) => string;\n}\n\n/**\n * ChecklistRenderer - Renders categorized checklists within DetailedCard sections\n *\n * Extracted from SignalCardNormal to improve code organization.\n * Used by VMCCertificate, SafeSVG, and other checklist-based sections.\n */\nexport const ChecklistRenderer: React.FC<ChecklistRendererProps> = ({\n infoItemsCategories,\n isCollapsible = true,\n areAllCollapsed,\n t,\n}) => {\n if (!infoItemsCategories?.length) {\n return null;\n }\n\n const getTranslatedCaption = (caption?: ExtractionCaptionType): string | undefined => {\n if (!caption) return undefined;\n return t(EXTRACTION_CAPTION_KEYS[caption]);\n };\n\n const sections = infoItemsCategories\n .map((category, i) => {\n if (!category.items?.length) {\n return null;\n }\n\n const hasCaption = category.caption;\n\n return (\n <DetailedCard.Section\n key={i}\n header={category.title}\n isCollapsible={isCollapsible}\n isCollapsed={areAllCollapsed}\n >\n {hasCaption ? (\n <DetailedCard.CollapsibleSectionItems caption={getTranslatedCaption(category.caption)}>\n <Checklist items={category.items} />\n {category.text}\n </DetailedCard.CollapsibleSectionItems>\n ) : (\n <>\n <Checklist items={category.items} />\n {category.text}\n </>\n )}\n </DetailedCard.Section>\n );\n })\n .filter(Boolean);\n\n return <>{sections}</>;\n};\n\nexport default ChecklistRenderer;\n","import React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { COLOR } from '../../cards/signal-card-styles';\n\ntype AlignLabel = 'left' | 'right';\n\ntype CheckBoxProps = {\n id?: string;\n name?: string;\n className?: string;\n children?: React.ReactNode;\n selected?: boolean;\n color?: string;\n title?: string;\n onToggle?: () => void;\n disabled?: boolean;\n circle?: boolean;\n bold?: boolean;\n isSwitch?: boolean;\n alignLabel?: AlignLabel;\n};\n\nconst DISABLED_GREY = '#aaa';\n\nconst resolveAccentColor = (color?: string): string => {\n if (!color) {\n return COLOR.main.green;\n }\n\n switch (color) {\n case 'red':\n return COLOR.main.red;\n case 'yellow':\n return COLOR.main.yellow;\n case 'green':\n default:\n return COLOR.main.green;\n }\n};\n\nconst Wrapper = styled.div<{ $alignLabel: AlignLabel }>`\n display: flex;\n align-items: center;\n ${({ $alignLabel }) =>\n $alignLabel === 'left'\n ? css`\n flex-direction: row-reverse;\n `\n : undefined};\n`;\n\nconst StyledBox = styled.div<{\n $selected: boolean;\n $accentColor: string;\n $disabled: boolean;\n $circle: boolean;\n $bold: boolean;\n $isSwitch: boolean;\n}>`\n --checkbox-accent: ${({ $accentColor }) => $accentColor};\n box-sizing: content-box;\n display: flex;\n justify-content: center;\n align-items: center;\n margin: 2px 0 2px 0.5em;\n border-style: solid;\n border-color: ${({ $disabled, $accentColor }) => ($disabled ? DISABLED_GREY : $accentColor)};\n border-width: ${({ $circle, $bold }) => ($circle || $bold ? '2px' : '1px')};\n padding: ${({ $isSwitch, $bold, $circle }) => {\n if ($isSwitch) {\n return '0';\n }\n if ($bold) {\n return '2px';\n }\n if ($circle) {\n return '4px';\n }\n return '3px';\n }};\n height: ${({ $isSwitch, $circle }) => {\n if ($isSwitch) {\n return '24px';\n }\n if ($circle) {\n return '14px';\n }\n return '20px';\n }};\n width: ${({ $isSwitch, $circle }) => {\n if ($isSwitch) {\n return '48px';\n }\n if ($circle) {\n return '14px';\n }\n return '20px';\n }};\n border-radius: ${({ $isSwitch, $circle }) => {\n if ($isSwitch) {\n return '24px';\n }\n if ($circle) {\n return '50%';\n }\n return '3px';\n }};\n background-color: ${({ $selected, $circle, $accentColor }) => {\n if (!$selected) {\n return 'transparent';\n }\n return $circle ? '#fff' : $accentColor;\n }};\n cursor: ${({ $disabled }) => ($disabled ? 'default' : 'pointer')};\n transition: opacity 200ms ease;\n position: relative;\n\n &:hover {\n opacity: ${({ $disabled }) => ($disabled ? 1 : 0.7)};\n }\n\n &:focus-within {\n box-shadow: ${({ $disabled }) =>\n $disabled ? 'none' : '0 0 0 2px rgba(0, 0, 0, 0.12), 0 0 0 4px var(--checkbox-accent)'};\n }\n`;\n\nconst Center = styled.div<{\n $selected: boolean;\n $circle: boolean;\n $isSwitch: boolean;\n $accentColor: string;\n $disabled: boolean;\n}>`\n position: relative;\n height: ${({ $isSwitch, $circle }) => {\n if ($isSwitch) {\n return '100%';\n }\n if ($circle) {\n return '14px';\n }\n return '12px';\n }};\n width: ${({ $isSwitch, $circle }) => {\n if ($isSwitch) {\n return '100%';\n }\n if ($circle) {\n return '14px';\n }\n return '12px';\n }};\n border-radius: ${({ $isSwitch, $circle }) => {\n if ($isSwitch) {\n return '24px';\n }\n if ($circle) {\n return '50%';\n }\n return '3px';\n }};\n opacity: ${({ $selected, $isSwitch }) => ($isSwitch || $selected ? 1 : 0)};\n transition: opacity 200ms ease;\n ${({ $isSwitch, $selected, $accentColor, $disabled }) =>\n !$isSwitch && $selected\n ? css`\n background-color: ${$disabled ? DISABLED_GREY : $accentColor};\n `\n : ''}\n`;\n\nconst HiddenInput = styled.input<{ $accentColor: string }>`\n opacity: 0;\n cursor: pointer;\n position: absolute;\n inset: 0;\n margin: 0;\n width: 100%;\n height: 100%;\n z-index: 1;\n\n &:focus-visible + span {\n box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.12), 0 0 0 4px ${({ $accentColor }) => $accentColor};\n }\n`;\n\nconst Slider = styled.span<{\n $selected: boolean;\n $accentColor: string;\n $disabled: boolean;\n}>`\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: ${({ $selected, $accentColor, $disabled }) =>\n $selected ? ($disabled ? DISABLED_GREY : $accentColor) : '#ccc'};\n transition: 0.4s;\n border-radius: 34px;\n\n &::before {\n position: absolute;\n content: '';\n height: 16px;\n width: 16px;\n left: 4px;\n bottom: 4px;\n background-color: #fff;\n transition: 0.4s;\n border-radius: 50%;\n transform: ${({ $selected }) => ($selected ? 'translateX(24px)' : 'translateX(0)')};\n }\n`;\n\nconst StyledLabel = styled.label<{\n $alignLabel: AlignLabel;\n $hasChildren: boolean;\n}>`\n display: inline-flex;\n align-items: center;\n ${({ $hasChildren, $alignLabel }) =>\n $hasChildren\n ? $alignLabel === 'right'\n ? css`\n padding-left: 12px;\n `\n : css`\n padding-right: 12px;\n `\n : undefined};\n`;\n\nconst CheckBox: React.FC<CheckBoxProps> = ({\n id,\n name,\n className,\n children,\n selected = false,\n color,\n title,\n onToggle,\n disabled = false,\n circle = false,\n bold = false,\n isSwitch = false,\n alignLabel = 'right',\n}) => {\n const accentColor = resolveAccentColor(color);\n\n const handleToggle = () => {\n if (!disabled && onToggle) {\n onToggle();\n }\n };\n\n return (\n <Wrapper $alignLabel={alignLabel}>\n <StyledBox\n className={className}\n $selected={selected}\n $accentColor={accentColor}\n $disabled={disabled}\n $circle={circle}\n $bold={bold}\n $isSwitch={isSwitch}\n onClick={handleToggle}\n role=\"presentation\"\n title={title}\n >\n <Center\n $selected={selected}\n $circle={circle}\n $isSwitch={isSwitch}\n $accentColor={accentColor}\n $disabled={disabled}\n >\n <HiddenInput\n id={id}\n name={name}\n onChange={handleToggle}\n type={circle ? 'radio' : 'checkbox'}\n checked={Boolean(selected)}\n readOnly\n $accentColor={accentColor}\n />\n {selected && !circle && !isSwitch ? (\n <svg viewBox=\"0 0 24 24\" style={{ position: 'absolute', inset: 0 }}>\n <path style={{ strokeWidth: '3.12px' }} fill=\"none\" stroke=\"white\" d=\"M1.73,12.91 8.1,19.28 22.79,4.59\" />\n </svg>\n ) : null}\n {isSwitch ? <Slider $selected={selected} $accentColor={accentColor} $disabled={disabled} /> : null}\n </Center>\n </StyledBox>\n {id && (\n <StyledLabel htmlFor={id} $alignLabel={alignLabel} $hasChildren={Boolean(children)}>\n {children}\n </StyledLabel>\n )}\n </Wrapper>\n );\n};\n\nexport default CheckBox;\n","import React from 'react';\nimport { parseGlossaryMarkdown } from './parse-glossary-markdown';\n\nexport const hasRenderableContent = (value: any): boolean => {\n if (value === null || value === undefined) {\n return false;\n }\n\n if (typeof value === 'string') {\n return value.trim().length > 0;\n }\n\n if (Array.isArray(value)) {\n return value.some((item) => hasRenderableContent(item));\n }\n\n return true;\n};\n\nexport const formatContent = (value: any, keyPrefix = 'desc') => {\n const processValue = (item: any, key: string): React.ReactNode | React.ReactNode[] | null => {\n if (item === null || item === undefined || (typeof item === 'string' && item.trim().length === 0)) {\n return null;\n }\n\n if (Array.isArray(item)) {\n return processArray(item, key);\n }\n\n if (typeof item === 'string') {\n const parsed = parseGlossaryMarkdown(item);\n return <p key={`${keyPrefix}-${key}`}>{parsed}</p>;\n }\n\n if (React.isValidElement(item)) {\n return React.cloneElement(item, {\n key: item.key ?? `${keyPrefix}-${key}`,\n });\n }\n\n return <p key={`${keyPrefix}-${key}`}>{item}</p>;\n };\n\n const processArray = (arr: any[], key: string): React.ReactNode[] => {\n const result: React.ReactNode[] = [];\n let orderedListBuffer: string[] = [];\n\n const flushOrderedList = () => {\n if (!orderedListBuffer.length) {\n return;\n }\n\n const listIndex = result.length;\n result.push(\n <ol key={`${keyPrefix}-${key}-ol-${listIndex}`}>\n {orderedListBuffer.map((text, idx) => (\n <li key={`${keyPrefix}-${key}-li-${idx}`}>{parseGlossaryMarkdown(text)}</li>\n ))}\n </ol>\n );\n orderedListBuffer = [];\n };\n\n arr.forEach((entry, idx) => {\n const entryKey = `${key}-${idx}`;\n\n if (typeof entry === 'string') {\n const trimmed = entry.trim();\n\n if (trimmed.length === 0) {\n flushOrderedList();\n return;\n }\n\n const orderedListMatch = trimmed.match(/^(\\d+)\\.\\s+(.*)$/);\n if (orderedListMatch) {\n orderedListBuffer.push(orderedListMatch[2]);\n return;\n }\n }\n\n flushOrderedList();\n\n const processed = processValue(entry, entryKey);\n if (Array.isArray(processed)) {\n processed.forEach((node) => {\n if (node) {\n result.push(node);\n }\n });\n } else if (processed) {\n result.push(processed);\n }\n });\n\n flushOrderedList();\n\n return result;\n };\n\n const processed = processValue(value, 'root');\n\n if (Array.isArray(processed)) {\n const flattened: React.ReactNode[] = [];\n processed.forEach((node) => {\n if (node) {\n flattened.push(node);\n }\n });\n return flattened;\n }\n\n return processed;\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport { ButtonLink } from '@redsift/design-system';\nimport ondmarcLogoSimple from '../../assets/ondmarc-logo-simple.svg';\n\nconst StyledBanner = styled.div`\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 8px;\n border-radius: 8px;\n border: 1px solid rgba(99, 34, 74, 0.15);\n background: linear-gradient(\n 71deg,\n rgba(237, 21, 83, 0.07) 2.5%,\n rgba(140, 101, 255, 0.07) 51%,\n rgba(107, 183, 255, 0.07) 100%\n ),\n #fff;\n`;\n\nconst StyledBannerContent = styled.div`\n display: flex;\n gap: 16px;\n align-items: center;\n flex: 10000 1 300px;\n min-width: 0;\n`;\n\nconst StyledBannerLogo = styled.img`\n flex-shrink: 0;\n width: 46px;\n height: 38px;\n`;\n\nconst StyledBannerText = styled.span`\n font-size: 14px;\n line-height: 1.4;\n font-family: var(--sc-font-body);\n color: var(--sc-text-color);\n max-width: 335px;\n`;\n\nconst ONDMARC_SIGNUP_URL = 'https://iam.redsift.cloud/signup?redirectapp=cloud&product=ondmarc';\n\nconst websiteButtonToken = (token: 'background' | 'text', state: string) =>\n `var(--redsift-color-light-components-website-buttons-primary-website-button-primary-${token}-${state})`;\n\nconst StyledBannerLink = styled.a`\n box-sizing: border-box;\n align-items: center;\n background-color: ${websiteButtonToken('background', 'default')};\n background-color: var(\n --redsift-color-light-components-website-buttons-primary-website-button-primary-background-default,\n #63224a\n );\n border: none;\n border-radius: 5px;\n display: inline-flex;\n font-family: var(--redsift-typography-website-button-font-family, 'Space Grotesk', sans-serif);\n font-size: var(--redsift-typography-website-button-font-size, 18px);\n font-weight: var(--redsift-typography-website-button-font-weight, 500);\n gap: 8px;\n justify-content: center;\n line-height: var(--redsift-typography-website-button-line-height, 1.5);\n min-height: 48px;\n padding: 10px 20px;\n text-align: center;\n text-decoration: none;\n cursor: pointer;\n transition: background-color 200ms ease-out, color 200ms ease-out;\n white-space: nowrap;\n flex: 1 0 0%;\n -webkit-font-smoothing: antialiased;\n\n &,\n svg {\n color: ${websiteButtonToken('text', 'default')};\n color: var(--redsift-color-light-components-website-buttons-primary-website-button-primary-text-default, white);\n }\n\n &:hover {\n background-color: var(\n --redsift-color-light-components-website-buttons-primary-website-button-primary-background-hover,\n #52184d\n );\n color: var(--redsift-color-light-components-website-buttons-primary-website-button-primary-text-hover, white);\n }\n\n &:active {\n background-color: ${websiteButtonToken('background', 'active')};\n color: ${websiteButtonToken('text', 'active')};\n }\n`;\n\nconst ExternalLinkIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n height=\"24\"\n width=\"24\"\n preserveAspectRatio=\"xMidYMid meet\"\n role=\"img\"\n >\n <path\n d=\"M14,3V5H17.59L7.76,14.83L9.17,16.24L19,6.41V10H21V3M19,19H5V5H12V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V12H19V19Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nconst StyledDSButtonLinkWrapper = styled.div`\n flex: 1 0 0%;\n\n .redsift-button-link {\n box-sizing: border-box;\n white-space: nowrap;\n text-decoration: none;\n width: 100%;\n }\n\n .redsift-button-link > span {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n }\n`;\n\nexport interface DmarcPromoBannerProps {\n /** Translated banner text */\n text: string;\n /** Translated button label */\n buttonLabel: string;\n /** Use Investigate-specific styling for the button. When false, uses DS Button. */\n useInvestigateColors?: boolean;\n /** Override the button href (e.g. to add UTM parameters). Defaults to the OnDMARC signup URL. */\n href?: string;\n}\n\n/**\n * Promotional banner for OnDMARC displayed at the top of the DMARC signal card.\n * When useInvestigateColors is true, uses website button tokens (matching SignalCardButton).\n * When false, uses the DS Button component.\n * Text uses CSS variables (--sc-font-body, --sc-text-color) which adapt based on the theme.\n */\nexport const DmarcPromoBanner: React.FC<DmarcPromoBannerProps> = ({\n text,\n buttonLabel,\n useInvestigateColors = false,\n href = ONDMARC_SIGNUP_URL,\n}) => (\n <StyledBanner data-testid=\"dmarc-promo-banner\">\n <StyledBannerContent>\n <StyledBannerLogo src={ondmarcLogoSimple} alt=\"OnDMARC\" />\n <StyledBannerText>{text}</StyledBannerText>\n </StyledBannerContent>\n {useInvestigateColors ? (\n <StyledBannerLink href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n {buttonLabel}\n <ExternalLinkIcon />\n </StyledBannerLink>\n ) : (\n <StyledDSButtonLinkWrapper>\n <ButtonLink href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n {buttonLabel}\n <ExternalLinkIcon />\n </ButtonLink>\n </StyledDSButtonLinkWrapper>\n )}\n </StyledBanner>\n);\n","import React, { useEffect, forwardRef, useId, useMemo, useCallback } from 'react';\nimport classNames from 'classnames';\nimport type { Comp } from '@redsift/design-system';\nimport { DetailedCard, Flexbox } from '@redsift/design-system';\nimport { useSignalCardTranslation } from '../../hooks/useSignalCardTranslation';\nimport { useResolvedTheme } from '../../hooks/useSignalCardTheme';\nimport type { SignalCardNormalProps } from './types';\nimport { StyledIntroText, StyledCardHeader, StyledCardFooter } from './styles';\nimport { ExpandableDescription } from './ExpandableDescription';\n\nimport { SignalCardSection } from '../SignalCard';\nimport { DescriptionContainer, CardWrapper, DescriptionSpacer } from '../SignalCard/components/CardDescriptionStyles';\n\nimport Checklist from '../../components/ui/Checklist/Checklist';\nimport { ChecklistRenderer } from './ChecklistRenderer';\nimport CheckBox from '../../components/ui/CheckBox';\nimport { formatContent, hasRenderableContent } from '../../utils/format-content';\n\nimport { Icon } from '@redsift/design-system';\nimport { mdiCheck, mdiClose, mdiInformation, mdiAlert } from '@redsift/icons';\nimport { FONT, getThemeCSSVars } from '../signal-card-styles';\nimport { componentLogger } from '../../utils/logger';\nimport { mapStatusToDetailedCardColor } from '@redsift/signal-logic';\nimport { DmarcPromoBanner } from '../SignalCardDmarc/DmarcPromoBanner';\n// Use consolidated status mapping\nconst mapCardTypeToColor = mapStatusToDetailedCardColor;\n\nexport const DEFAULT_SECTION_ORDER = ['resultOptions', 'introDescription', 'safeSVG', 'VMCCertificate'];\n\n/**\n * SignalCardNormal - Universal card component for displaying security check results\n *\n * Key architectural decisions:\n * - `type` vs `cardType`: `cardType` controls visual styling (icon, color).\n * `type` is used for i18n description lookup.\n * - Error handling: Cards merge error items internally into `infoItemsCategories`\n * before passing to this component.\n * - Type system: Supports 'danger' for authentication failures (red icon),\n * 'warning' for temporary issues (orange icon).\n */\nconst COMPONENT_NAME = 'SignalCardNormal';\nconst CLASSNAME = 'redsift-signal-card-normal';\n\n/**\n * SignalCardNormal is the base component for all signal cards in the Investigate tool.\n * It provides a consistent structure for displaying card header, extracted items, checklists,\n * descriptions, and custom content sections.\n */\nexport const SignalCardNormal: Comp<SignalCardNormalProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n cardType,\n resultSelected,\n resultOptions,\n optionsLabel,\n onResultsChange,\n type,\n title,\n safeSVG = null,\n VMCCertificate = null,\n customSectionOrder = null,\n onHeightChange,\n onCTAButtonClick,\n ctaButtonName,\n shortDescription,\n longDescription,\n introDescription,\n onComponentMount,\n children,\n renderHeader,\n promoHref,\n renderFooter,\n bannerVariant = 'none',\n isLoading,\n shield,\n icon,\n useInvestigateColors: useInvestigateColorsOverride,\n isCollapsible = true,\n areAllCollapsed,\n onCollapseAll,\n className,\n sections,\n // Destructure non-DOM props to prevent them from being spread to DOM elements\n // These come from parent components like SignalCardList but shouldn't reach the DOM\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n signalType: _signalType,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n jmap: _jmap,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n domain: _domain,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n investigate: _investigate,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isDomainAnalyzer: _isDomainAnalyzer,\n ...forwardedProps\n } = props as SignalCardNormalProps & {\n signalType?: unknown;\n jmap?: unknown;\n domain?: unknown;\n investigate?: unknown;\n isDomainAnalyzer?: unknown;\n };\n\n const resultOptionsBaseId = useId();\n const resultOptionsGroupName = `${COMPONENT_NAME}-results-${resultOptionsBaseId}`;\n\n const { t } = useSignalCardTranslation('investigate');\n const { useInvestigateColors } = useResolvedTheme(useInvestigateColorsOverride);\n\n const defaultRenderHeader = useCallback(\n () => (\n <DmarcPromoBanner\n text={t('dmarc-promo.text')}\n buttonLabel={t('dmarc-promo.button')}\n useInvestigateColors={useInvestigateColors}\n href={promoHref}\n />\n ),\n [t, useInvestigateColors, promoHref]\n );\n // When using a thick banner header (standard/condensed), don't show the promo card by default —\n // only DMARC should show it, and it does so by passing an explicit renderHeader prop.\n const effectiveRenderHeader = renderHeader !== undefined ? renderHeader : bannerVariant === 'none' ? defaultRenderHeader : null;\n\n // Get CSS variables for theming - memoized to avoid recalculating on every render\n const themeCSSVars = useMemo(() => getThemeCSSVars(useInvestigateColors), [useInvestigateColors]);\n\n useEffect(() => {\n onComponentMount?.();\n }, [onComponentMount]);\n\n // Memoize description computations to avoid expensive formatContent parsing on every render\n const { shortDescriptionComponent, hasShortDescription } = useMemo(() => {\n const raw =\n shortDescription ??\n (type\n ? (() => {\n const result = t(`signal-description.${type}_md`, {\n context: 'SHORT',\n defaultValue: '',\n returnObjects: true,\n });\n // If translation returns the key itself (missing translation), treat as no short description\n if (typeof result === 'string' && (result as string).includes('signal-description')) {\n return null;\n }\n return result;\n })()\n : null);\n return {\n shortDescriptionComponent: formatContent(raw),\n hasShortDescription: hasRenderableContent(raw),\n };\n }, [shortDescription, type, t]);\n\n const { longDescriptionRaw, longDescriptionComponent, hasLongDescription } = useMemo(() => {\n const raw =\n longDescription ??\n (type\n ? (() => {\n const result = t(`signal-description.${type}_md`, {\n context: 'LONG',\n defaultValue: '',\n returnObjects: true,\n });\n // If translation returns the key itself (missing translation), treat as no long description\n if (typeof result === 'string' && (result as string).includes('signal-description')) {\n return null;\n }\n return result;\n })()\n : null);\n return {\n longDescriptionRaw: raw,\n longDescriptionComponent: formatContent(raw),\n hasLongDescription: hasRenderableContent(raw),\n };\n }, [longDescription, type, t]);\n\n const introDescriptionComponent = useMemo(() => {\n const raw =\n introDescription ??\n (type\n ? (() => {\n const result = t(`signal-description.${type}_md_INTRO`, {\n defaultValue: '',\n returnObjects: true,\n });\n // If translation returns empty string, the key itself (a string with dots), or is falsy, treat as no intro\n if (!result) {\n return undefined;\n }\n if (typeof result === 'string' && (result as string).includes('signal-description')) {\n return undefined;\n }\n return result;\n })()\n : undefined);\n return formatContent(raw);\n }, [introDescription, type, t]);\n\n const { additionalLongDescriptionComponent, hasAdditionalLongDescription } = useMemo(() => {\n const normalizedLongDescriptionRaw = Array.isArray(longDescriptionRaw)\n ? longDescriptionRaw\n : longDescriptionRaw !== null && longDescriptionRaw !== undefined\n ? [longDescriptionRaw]\n : [];\n\n const additionalRaw =\n hasShortDescription && normalizedLongDescriptionRaw.length\n ? normalizedLongDescriptionRaw.slice(1)\n : normalizedLongDescriptionRaw;\n\n return {\n additionalLongDescriptionComponent: formatContent(additionalRaw),\n hasAdditionalLongDescription: hasRenderableContent(additionalRaw),\n };\n }, [longDescriptionRaw, hasShortDescription]);\n\n const descriptionContent: React.ReactNode[] = [];\n\n const appendContent = (content: React.ReactNode | React.ReactNode[]) => {\n if (!content) {\n return;\n }\n\n if (Array.isArray(content)) {\n descriptionContent.push(...content);\n } else {\n descriptionContent.push(content);\n }\n };\n\n // Always include all description content, hide/show via CSS\n if (hasShortDescription) {\n appendContent(shortDescriptionComponent);\n }\n\n const hasAdditionalContent = hasShortDescription && hasLongDescription;\n const additionalDescriptionContent = hasAdditionalLongDescription\n ? additionalLongDescriptionComponent\n : longDescriptionComponent;\n\n const descriptionEl = descriptionContent.length ? descriptionContent : null;\n\n const showShowMoreButton = hasShortDescription && hasLongDescription;\n const showCTAButton = onCTAButtonClick !== undefined;\n\n // Memoize section render functions to prevent identity changes on every render\n const ResultOptions = useMemo(\n () => () => {\n return (\n <>\n {resultOptions && resultOptions.length > 1 && (\n <SignalCardSection>\n {optionsLabel && <h4 style={{ marginTop: '0.5rem' }}>{optionsLabel}</h4>}\n {resultOptions.map((data, i) => {\n // Extract type from data if present (for SPF/DKIM identity selection)\n const itemType = 'type' in data && typeof data.type === 'string' ? data.type : 'info';\n const optionId = `${resultOptionsGroupName}-option-${i}`;\n return (\n <div key={optionId}>\n <CheckBox\n id={optionId}\n name={resultOptionsGroupName}\n circle={true}\n onToggle={() => onResultsChange?.(i)}\n selected={resultSelected === i}\n >\n <Checklist\n compact\n items={[\n {\n ...data,\n text: data.label,\n type: itemType,\n },\n ]}\n />\n </CheckBox>\n </div>\n );\n })}\n </SignalCardSection>\n )}\n </>\n );\n },\n [resultOptions, optionsLabel, resultOptionsGroupName, onResultsChange, resultSelected]\n );\n\n const IntroDescription = useMemo(\n () => () => {\n return (\n <>\n {introDescriptionComponent ? (\n <SignalCardSection marginBottom={0} borderBottom={false}>\n <StyledIntroText>{introDescriptionComponent}</StyledIntroText>\n </SignalCardSection>\n ) : null}\n </>\n );\n },\n [introDescriptionComponent]\n );\n\n const SafeSVG = useMemo(\n () => () => {\n if (!safeSVG) return null;\n return (\n <ChecklistRenderer\n infoItemsCategories={[safeSVG]}\n isCollapsible={isCollapsible}\n areAllCollapsed={areAllCollapsed}\n t={t}\n />\n );\n },\n [safeSVG, isCollapsible, areAllCollapsed, t]\n );\n\n const VMCCertificatSection = useMemo(\n () => () => {\n if (!VMCCertificate) return null;\n return (\n <ChecklistRenderer\n infoItemsCategories={[VMCCertificate]}\n isCollapsible={isCollapsible}\n areAllCollapsed={areAllCollapsed}\n t={t}\n />\n );\n },\n [VMCCertificate, isCollapsible, areAllCollapsed, t]\n );\n\n // Render generic sections passed via the `sections` prop\n const GenericSections = useMemo(\n () => () => {\n if (!sections?.length) return null;\n\n return sections.map((section, i) => (\n <DetailedCard.Section\n key={`generic-${section.id}-${i}`}\n header={section.title}\n isCollapsible={section.isCollapsible ?? false}\n isCollapsed={areAllCollapsed}\n data-testid={section.testId}\n >\n {section.content}\n </DetailedCard.Section>\n ));\n },\n [sections, areAllCollapsed]\n );\n\n const componentNameMap: Record<string, () => React.ReactNode> = {\n resultOptions: ResultOptions,\n introDescription: IntroDescription,\n safeSVG: SafeSVG,\n VMCCertificate: VMCCertificatSection,\n genericSections: GenericSections,\n };\n\n // Helper function to check if a section has content to display\n const sectionHasContent = (sectionName: string): boolean => {\n // First check if it's a generic section passed via props (takes priority)\n // This allows cards to use IDs like 'VMCCertificate' in their sections array\n // without conflicting with the built-in prop-based section\n if (sections?.some((s) => s.id === sectionName)) {\n return true;\n }\n\n // Then check built-in sections\n switch (sectionName) {\n case 'resultOptions':\n return !!(resultOptions && resultOptions.length > 1);\n case 'introDescription':\n return !!introDescriptionComponent;\n case 'safeSVG':\n return safeSVG !== null && safeSVG !== undefined;\n case 'VMCCertificate':\n return VMCCertificate !== null && VMCCertificate !== undefined;\n case 'genericSections':\n return !!(sections && sections.length > 0);\n default:\n // For unknown sections, assume they have content (fallback)\n return true;\n }\n };\n\n const sectionsOrder = customSectionOrder || [...DEFAULT_SECTION_ORDER, 'genericSections'];\n\n // Filter out sections that have no content to display\n const sectionsWithContent = sectionsOrder.filter(sectionHasContent);\n\n // Collect all rendered sections as a flat array so DetailedCard can count them\n // This flattens arrays returned from wrapper functions so DetailedCard.hasMultipleCollapsibleChildren\n // can see individual DetailedCard.Section elements as direct children\n const renderedSections = sectionsWithContent.flatMap((section) => {\n // 1. First check if it's a generic section passed via props (takes priority)\n // This allows cards to use IDs like 'VMCCertificate' or 'safeSVG' in their sections array\n // without conflicting with the built-in prop-based sections\n const genericSection = sections?.find((s) => s.id === section);\n if (genericSection) {\n return [\n <DetailedCard.Section\n key={genericSection.id}\n header={genericSection.title}\n isCollapsible={genericSection.isCollapsible ?? false}\n isCollapsed={areAllCollapsed}\n data-testid={genericSection.testId}\n >\n {genericSection.content}\n </DetailedCard.Section>,\n ];\n }\n\n // 2. Then check if it's a built-in section\n const renderSection = componentNameMap[section];\n if (renderSection) {\n const result = renderSection();\n\n // If result is an array, add keys to each element\n if (Array.isArray(result)) {\n return result.map((item, index) =>\n React.isValidElement(item) ? React.cloneElement(item, { key: `${section}-${index}` }) : item\n );\n }\n\n // If result is a single element, add key\n if (React.isValidElement(result)) {\n return [React.cloneElement(result, { key: section })];\n }\n\n return result ? [result] : [];\n }\n\n return [];\n });\n if (customSectionOrder && process.env.NODE_ENV !== 'production') {\n // Only warn about default sections that are missing from custom order\n // (Don't warn about card-specific sections like checklistsBimi, etc.)\n const missingSections = DEFAULT_SECTION_ORDER.filter((section) => !sectionsOrder.includes(section));\n // Only warn if the component actually has data for the missing sections\n const hasResultOptions = resultOptions && resultOptions.length > 0;\n const hasSafeSVG = safeSVG !== undefined && safeSVG !== null;\n const hasVMCCertificate = VMCCertificate !== undefined && VMCCertificate !== null;\n\n const relevantMissingSections = missingSections.filter((section) => {\n if (section === 'resultOptions' && hasResultOptions) return true;\n if (section === 'safeSVG' && hasSafeSVG) return true;\n if (section === 'VMCCertificate' && hasVMCCertificate) return true;\n return false;\n });\n\n if (relevantMissingSections.length > 0) {\n componentLogger.warn('[SignalCardNormal] customSectionOrder is missing sections that have data.', {\n missingSections: relevantMissingSections,\n });\n }\n }\n\n // Map bannerVariant to DetailedCard props\n const detailedCardColor = bannerVariant === 'none' ? undefined : mapCardTypeToColor(cardType);\n const detailedCardBannerVariant = bannerVariant === 'condensed' ? 'condensed' : 'standard';\n\n // Calculate icon color independently for use in header (always based on cardType, not banner visibility)\n const iconColor = mapCardTypeToColor(cardType) || 'neutral-x-dark-grey';\n\n // Generate icon from cardType if not explicitly provided\n const effectiveIcon =\n icon ||\n (() => {\n const upper = cardType?.toString().toUpperCase();\n if (upper === 'GOOD' || upper === 'PASS' || upper === 'PASSED') return mdiCheck;\n if (upper === 'DANGER' || upper === 'FAIL' || upper === 'FAILED') return mdiClose;\n if (upper === 'WARNING') return mdiAlert;\n if (upper === 'INFO' || upper === 'UNKNOWN') return mdiInformation;\n return undefined;\n })();\n\n // When banner is hidden, show icon in header; when banner is visible, show icon in banner\n const showIconInHeader = bannerVariant === 'none' && effectiveIcon;\n const showIconInBanner = bannerVariant !== 'none' && effectiveIcon;\n\n return (\n <CardWrapper\n {...forwardedProps}\n className={classNames(SignalCardNormal.className, className)}\n ref={ref}\n style={{ ...themeCSSVars, ...forwardedProps.style } as React.CSSProperties}\n >\n <DetailedCard\n color={detailedCardColor}\n bannerVariant={bannerVariant === 'none' ? undefined : detailedCardBannerVariant}\n icon={showIconInBanner ? (effectiveIcon as any) : undefined}\n isLoading={isLoading}\n shield={shield as any}\n isCollapsible={isCollapsible}\n areAllCollapsed={areAllCollapsed}\n onCollapseAll={onCollapseAll}\n width=\"auto\"\n >\n {title && (\n <DetailedCard.Header header={!showIconInHeader && typeof title === 'string' ? title : undefined}>\n {showIconInHeader ? (\n <Flexbox gap=\"8px\" alignItems=\"center\">\n <Icon icon={effectiveIcon as any} size=\"large\" color={iconColor} />\n {typeof title === 'string' ? (\n <span\n style={{\n fontSize: '32px',\n fontWeight: 500,\n lineHeight: '32px',\n fontFamily: useInvestigateColors ? FONT.TYPE.HEADING : undefined,\n }}\n >\n {title}\n </span>\n ) : (\n <span\n style={{\n fontSize: '32px',\n fontWeight: 500,\n lineHeight: '32px',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flexWrap: 'wrap',\n fontFamily: useInvestigateColors ? FONT.TYPE.HEADING : undefined,\n }}\n >\n {title}\n </span>\n )}\n </Flexbox>\n ) : typeof title !== 'string' ? (\n <span\n style={{\n fontSize: '32px',\n fontWeight: 500,\n lineHeight: '32px',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flexWrap: 'wrap',\n fontFamily: useInvestigateColors ? FONT.TYPE.HEADING : undefined,\n }}\n >\n {title}\n </span>\n ) : null}\n </DetailedCard.Header>\n )}\n {effectiveRenderHeader &&\n (() => {\n const headerContent = effectiveRenderHeader();\n return headerContent != null ? <StyledCardHeader>{headerContent}</StyledCardHeader> : null;\n })()}\n {renderedSections}\n {children}\n {renderFooter && <StyledCardFooter>{renderFooter()}</StyledCardFooter>}\n {descriptionEl && (\n <SignalCardSection borderBottom={false}>\n <DescriptionSpacer />\n\n <DescriptionContainer>\n <ExpandableDescription\n shortDescription={descriptionEl}\n additionalDescription={additionalDescriptionContent}\n hasAdditionalContent={hasAdditionalContent}\n showShowMoreButton={showShowMoreButton}\n showCTAButton={showCTAButton}\n onCTAButtonClick={onCTAButtonClick}\n ctaButtonName={ctaButtonName}\n t={t}\n onHeightChange={onHeightChange}\n useInvestigateColors={useInvestigateColors}\n />\n </DescriptionContainer>\n </SignalCardSection>\n )}\n </DetailedCard>\n </CardWrapper>\n );\n});\n\nSignalCardNormal.className = CLASSNAME;\nSignalCardNormal.displayName = COMPONENT_NAME;\n","import { useEffect, useRef, type RefObject } from 'react';\n\ntype EventHandler = (event: MouseEvent | TouchEvent) => void;\n\nconst useOnClickOutside = <T extends HTMLElement>(\n ref: RefObject<T>,\n handler: EventHandler\n) => {\n const handlerRef = useRef(handler);\n handlerRef.current = handler;\n\n useEffect(() => {\n const listener = (event: MouseEvent | TouchEvent) => {\n const element = ref?.current;\n if (!element || element.contains(event.target as Node)) {\n return;\n }\n\n handlerRef.current(event);\n };\n\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n\n return () => {\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n };\n }, [ref]);\n};\n\nexport default useOnClickOutside;\n","import React, { useEffect, useRef, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useOnClickOutside } from '../../../hooks';\n\ninterface PortalProps {\n children: ReactNode;\n onClickOutside?: () => void;\n rootId?: string;\n}\n\nconst Portal: React.FC<PortalProps> = ({\n children,\n onClickOutside = () => {},\n rootId = 'portal-root',\n}) => {\n const mount =\n typeof document !== 'undefined' ? document.getElementById(rootId) : null;\n const ref = useRef<HTMLDivElement | null>(\n typeof document !== 'undefined' ? document.createElement('div') : null\n );\n\n const el = ref.current;\n\n useOnClickOutside(ref, onClickOutside);\n\n useEffect(() => {\n if (!mount || !el) {\n return;\n }\n\n mount.appendChild(el);\n return () => {\n mount.removeChild(el);\n };\n }, [el, mount]);\n\n if (!el) {\n return null;\n }\n\n return createPortal(children, el);\n};\n\nexport default Portal;\n","import React from 'react';\nimport styled, { css } from 'styled-components';\n\nexport const PLACEMENT = {\n UP: 'up',\n DOWN: 'down',\n TOP_LEFT: 'top-left',\n RIGHT: 'right',\n CENTER: 'center',\n LEFT: 'left',\n} as const;\n\ntype Placement = (typeof PLACEMENT)[keyof typeof PLACEMENT];\n\nconst TooltipContent = styled.div<{ $placement: Placement }>`\n background-color: #fff;\n border-radius: 3px;\n box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.3);\n opacity: 0;\n padding: 13px 25px;\n position: absolute;\n transform: translateX(-50%);\n scale: 0;\n transition: 0.4s cubic-bezier(0.25, 0.01, 0.24, 1) opacity;\n visibility: hidden;\n z-index: 1;\n\n top: 0;\n left: 0;\n ${({ $placement }) => {\n if ($placement === PLACEMENT.CENTER) {\n return css`\n transform: translate(-50%, 0);\n `;\n }\n\n if ($placement === PLACEMENT.UP) {\n return css`\n transform: translate(-50%, -100%);\n `;\n }\n\n if ($placement === PLACEMENT.LEFT) {\n return css`\n transform: translate(-110%, -50%);\n `;\n }\n if ($placement === PLACEMENT.TOP_LEFT) {\n return css`\n transform: translate(-100%, -100%);\n `;\n }\n if ($placement === PLACEMENT.RIGHT) {\n return css`\n transform: translate(100%, -50%);\n `;\n }\n return '';\n }}\n\n & > span {\n display: block;\n min-width: 150px;\n max-width: 300px;\n font-weight: 500;\n }\n\n &::before {\n content: '';\n position: absolute;\n left: 50%;\n width: 0;\n height: 0;\n border: 7px solid white;\n border-left-color: transparent;\n border-bottom-color: transparent;\n\n ${({ $placement }) => {\n if ($placement === PLACEMENT.UP) {\n return css`\n bottom: -7px;\n transform: translateX(-50%) rotate(135deg);\n box-shadow: 2px -3px 3px 0 rgba(0, 0, 0, 30%);\n `;\n }\n\n if ($placement === PLACEMENT.TOP_LEFT) {\n return css`\n right: 0;\n transform: translate(-100%, -100%);\n bottom: 0;\n `;\n }\n return css`\n top: -7px;\n transform: translateX(-50%) rotate(-45deg);\n `;\n }}\n }\n`;\n\nconst TooltipContainer = styled.div<{ $isOpen?: boolean }>`\n align-items: center;\n cursor: pointer;\n display: inline-flex;\n position: relative;\n\n ${({ $isOpen }) => css`\n ${$isOpen === undefined\n ? css`\n &:hover ${TooltipContent} {\n visibility: visible;\n opacity: 1;\n scale: 1;\n }\n `\n : ''}\n ${$isOpen\n ? css`\n ${TooltipContent} {\n visibility: visible;\n opacity: 1;\n scale: 1;\n }\n `\n : ''}\n `}\n`;\n\ninterface TooltipProps {\n children?: React.ReactNode;\n className?: string;\n placement?: Placement;\n renderContent?: React.ReactNode;\n ContentComponent?: React.ComponentType;\n isOpen?: boolean;\n styles?: React.CSSProperties;\n}\n\nconst Tooltip: React.FC<TooltipProps> = ({\n children,\n className,\n placement = PLACEMENT.DOWN,\n renderContent,\n ContentComponent,\n isOpen,\n styles,\n}) => (\n <TooltipContainer className={className} $isOpen={isOpen} style={styles}>\n {children}\n {ContentComponent && (\n <TooltipContent $placement={placement} className=\"tooltip__content\">\n <ContentComponent />\n </TooltipContent>\n )}\n {renderContent && (\n <TooltipContent $placement={placement} className=\"tooltip__content\">\n <span>{renderContent}</span>\n </TooltipContent>\n )}\n </TooltipContainer>\n);\n\nexport type { Placement };\nexport default Tooltip;\n","import React, { useEffect, useState, useRef, type ReactNode } from 'react';\nimport styled from 'styled-components';\nimport Portal from '../Portal/Portal';\nimport Tooltip, { PLACEMENT, type Placement } from '../Tooltip/Tooltip';\n\n// All theming uses CSS variables with Design System fallbacks (Poppins).\n// When SignalCardThemeProvider sets useInvestigateColors=true,\n// these will be overridden with Investigate-specific fonts.\n\n// Default fallback values - use DS CSS variables with hardcoded ultimate fallbacks\nconst DS_FONT_BODY = \"var(--redsift-typography-body-font-family, 'Poppins', sans-serif)\";\n\n/**\n * TooltipInPortal Component\n *\n * A tooltip that renders in a React portal to avoid clipping issues when\n * the parent container has `overflow: hidden` or other CSS constraints.\n *\n * **IMPORTANT: DOM Requirement**\n * This component requires a `<div id=\"portal-root\"></div>` element in the DOM.\n * If this element is missing, the tooltip will not render.\n *\n * **For Storybook:**\n * Add to `storybook/.storybook/preview-head.html`:\n * ```html\n * <div id=\"portal-root\"></div>\n * ```\n *\n * **For consuming applications:**\n * Add to your root HTML file or _document.tsx:\n * ```html\n * <div id=\"portal-root\"></div>\n * ```\n *\n * **Current Usage:**\n * - SignalCardDkimDomainAnalyzer: Hover tooltips for selector status counts\n * (e.g., \"3 selectors passed\" when hovering over status icons)\n *\n * @example\n * ```tsx\n * <TooltipInPortalWrapper message=\"Tooltip text\">\n * <button>Hover me</button>\n * </TooltipInPortalWrapper>\n * ```\n */\n\nconst TooltipStyled = styled(Tooltip)`\n position: absolute;\n pointer-events: none;\n\n & .tooltip__content {\n padding: 8px;\n font-size: 13px;\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n min-width: 260px;\n max-width: 320px;\n }\n\n & .tooltip__content::before {\n display: none;\n }\n`;\n\nconst TOOLTIP_DISTANCE = 8;\n\ntype TooltipCoords = {\n left: number;\n top: number;\n};\n\ninterface TooltipInPortalProps\n extends Omit<React.ComponentProps<typeof Tooltip>, 'children' | 'ContentComponent' | 'styles'> {\n isOpen: boolean;\n parentRef: React.RefObject<HTMLElement>;\n ContentComponent: React.ComponentType;\n styles?: React.CSSProperties;\n placement?: Placement;\n}\n\nconst TooltipInPortal: React.FC<TooltipInPortalProps> = ({\n isOpen,\n parentRef,\n ContentComponent,\n placement = PLACEMENT.UP,\n styles = {},\n ...rest\n}) => {\n const [coords, setCoords] = useState<TooltipCoords | null>(null);\n\n useEffect(() => {\n const parentElement = parentRef.current;\n\n if (parentElement) {\n const rect = parentElement.getBoundingClientRect();\n setCoords({\n left: rect.left + rect.width / 2,\n top: rect.top + window.scrollY - TOOLTIP_DISTANCE,\n });\n } else {\n setCoords(null);\n }\n }, [isOpen, parentRef]);\n\n if (!coords) {\n return null;\n }\n\n return (\n <Portal>\n <TooltipStyled\n styles={{ ...coords, ...styles }}\n ContentComponent={ContentComponent}\n placement={placement}\n isOpen={isOpen}\n {...rest}\n />\n </Portal>\n );\n};\n\ninterface TooltipInPortalWrapperProps extends Omit<TooltipInPortalProps, 'isOpen' | 'parentRef' | 'ContentComponent'> {\n message: ReactNode;\n children: ReactNode;\n className?: string;\n isDisabled?: boolean;\n}\n\n/**\n * Wraps children in a container that will show the tooltip on mouse enter and hide it on mouse leave\n */\nexport const TooltipInPortalWrapper: React.FC<TooltipInPortalWrapperProps> = ({\n message,\n children,\n placement = PLACEMENT.UP,\n className,\n isDisabled = false,\n ...rest\n}) => {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [isTooltipOpen, setIsTooltipOpen] = useState(false);\n\n useEffect(() => {\n const containerElement = containerRef.current;\n if (!containerElement) {\n return;\n }\n\n const onMouseLeave = () => {\n setIsTooltipOpen(false);\n };\n const onMouseEnter = () => {\n setIsTooltipOpen(true);\n };\n\n containerElement.addEventListener('mouseleave', onMouseLeave);\n containerElement.addEventListener('mouseenter', onMouseEnter);\n\n return () => {\n containerElement.removeEventListener('mouseleave', onMouseLeave);\n containerElement.removeEventListener('mouseenter', onMouseEnter);\n };\n }, []);\n\n return (\n <div ref={containerRef} className={className}>\n {children}\n {isTooltipOpen && !isDisabled && (\n <TooltipInPortal\n isOpen={isTooltipOpen}\n parentRef={containerRef}\n ContentComponent={() => <>{message}</>}\n placement={placement}\n {...rest}\n />\n )}\n </div>\n );\n};\n\nexport default TooltipInPortal;\n","import React from 'react';\nimport { DetailedCard, Icon } from '@redsift/design-system';\nimport { mdiCheck, mdiClose, mdiAlert, mdiInformation, mdiHelpCircle, mdiEmail, mdiEarth } from '@redsift/icons';\n\nimport { useSignalCardTranslation } from '../../hooks/useSignalCardTranslation';\nimport { parseGlossaryMarkdown } from '../../utils/parse-glossary-markdown';\nimport { COLOR } from '../signal-card-styles';\nimport { SignalCardSection, SignalCardInfoBox } from '../SignalCard';\nimport {\n InfoItemContent,\n InfoItemIcon,\n InfoItemLabel,\n InfoItemRow,\n InfoItemSubtexts,\n InfoItemsWrapper,\n} from '../SignalCard/components/InfoItemElements';\nimport {\n InfoItemsHighlight,\n InfoItemsGrid,\n GridLabel,\n GridValue,\n SectionHeader,\n SectionCaption,\n CodeBlock,\n ExtractionBox,\n ExtractionCaption,\n} from '../SignalCard/components/InfoSectionStyles';\nimport { EXTRACTION_CAPTION_KEYS, type ExtractionCaptionType } from '../SignalCard/components/extraction-box.constants';\nimport { TooltipInPortalWrapper } from '../../components/ui/TooltipInPortal/TooltipInPortal';\nimport type { ItemType, ItemTheme } from './types';\n\nexport interface ExtractedItemProps {\n type: any;\n theme: any;\n label: any;\n text: any;\n inline?: boolean;\n useCodeBlock?: boolean;\n extractionBox?: {\n caption?: ExtractionCaptionType;\n };\n}\n\nexport function getIcon({ type, theme = 'email' }: { type: ItemType; theme?: ItemTheme }) {\n return type === 'good' ? (\n <Icon icon={mdiCheck} color=\"#02ac61\" size=\"small\" />\n ) : type === 'info' ? (\n theme === 'email' ? (\n <Icon icon={mdiEmail} color={COLOR.main.black} size=\"small\" />\n ) : theme === 'dns' ? (\n <Icon icon={mdiEarth} size=\"small\" />\n ) : (\n <Icon icon={mdiInformation} size=\"small\" />\n )\n ) : type === 'warning' ? (\n <Icon icon={mdiAlert} color=\"#ed6c02\" size=\"small\" />\n ) : type === 'danger' ? (\n <Icon icon={mdiClose} color={COLOR.main.red} size=\"small\" />\n ) : type === 'unknown' ? (\n <Icon icon={mdiHelpCircle} size=\"small\" />\n ) : null;\n}\n\nconst renderExtractedValue = (value: any, keyPrefix: string): React.ReactNode[] => {\n const nodes: React.ReactNode[] = [];\n\n const process = (input: any, prefix: string) => {\n if (input === null || input === undefined) {\n return;\n }\n\n if (Array.isArray(input)) {\n input.forEach((entry, idx) => process(entry, `${prefix}-${idx}`));\n return;\n }\n\n if (typeof input === 'string') {\n const trimmed = input.trim();\n if (!trimmed) {\n return;\n }\n\n nodes.push(<p key={`${prefix}-text`}>{parseGlossaryMarkdown(input)}</p>);\n return;\n }\n\n if (React.isValidElement(input)) {\n nodes.push(\n React.cloneElement(input, {\n key: input.key ?? `${prefix}-element`,\n })\n );\n return;\n }\n\n nodes.push(<p key={`${prefix}-fallback`}>{String(input)}</p>);\n };\n\n process(value, keyPrefix);\n\n return nodes;\n};\n\nexport const ExtractedItem: React.FC<ExtractedItemProps> = ({\n type,\n theme,\n label,\n text,\n inline = true,\n useCodeBlock = false,\n extractionBox,\n}) => {\n // Get translated caption for extraction box\n const { t } = useSignalCardTranslation('investigate');\n const captionText = extractionBox?.caption ? t(EXTRACTION_CAPTION_KEYS[extractionBox.caption]) : undefined;\n\n // Parse label if it's a string with glossary markdown\n const parsedLabel = typeof label === 'string' ? parseGlossaryMarkdown(label) : label;\n\n // Strip newlines from text if it's a string and we're using code block\n const cleanedText =\n useCodeBlock && typeof text === 'string'\n ? text\n .replace(/[\\r\\n]+/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim()\n : text;\n\n const renderedText = renderExtractedValue(cleanedText, 'extracted-item-text');\n\n const icon = getIcon({ type, theme });\n\n // Wrap in CodeBlock if needed\n const displayText = useCodeBlock ? (\n <CodeBlock>\n {typeof renderedText === 'string' ? (\n renderedText\n ) : (\n <>\n {renderedText.map((node) => {\n // Extract text content from p tags and flatten\n if (React.isValidElement(node) && node.type === 'p') {\n const children = node.props.children;\n\n // If children is a string, strip ALL newlines aggressively\n const cleanedChildren =\n typeof children === 'string'\n ? children\n .replace(/[\\r\\n\\t]+/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim()\n : children;\n\n return cleanedChildren;\n }\n return node;\n })}\n </>\n )}\n </CodeBlock>\n ) : (\n renderedText\n );\n\n const content = (\n <SignalCardInfoBox>\n <InfoItemRow>\n {icon ? <InfoItemIcon>{icon}</InfoItemIcon> : null}\n <InfoItemContent>\n <InfoItemLabel $inline>{parsedLabel}</InfoItemLabel>\n {inline && renderedText.length ? displayText : null}\n </InfoItemContent>\n </InfoItemRow>\n {!inline && renderedText.length ? <InfoItemSubtexts>{displayText}</InfoItemSubtexts> : null}\n </SignalCardInfoBox>\n );\n\n // Wrap in extraction box if specified\n if (extractionBox) {\n return (\n <ExtractionBox $hasCaption={!!captionText}>\n {content}\n {captionText && <ExtractionCaption>{captionText}</ExtractionCaption>}\n </ExtractionBox>\n );\n }\n\n return content;\n};\n\nexport interface SignalCardExtractedItemsProps {\n extractedItemsCategories?: any[];\n extractedItems?: any[] | null;\n defaultTitle?: string | null;\n isCollapsible?: boolean;\n areAllCollapsed?: boolean;\n}\n\nfunction renderGridItem(item: any, idx: number, t: (key: string) => string): React.ReactNode {\n const parsedLabel = typeof item.label === 'string' ? parseGlossaryMarkdown(item.label) : item.label;\n const renderedText = renderExtractedValue(item.text, `grid-item-${idx}`);\n const icon = getIcon({ type: item.type, theme: item.theme });\n const alignmentIcon =\n icon && item.tooltipKey ? (\n <div style={{ display: 'inline-flex', alignItems: 'center', flexShrink: 0, marginLeft: '8px', marginTop: '3px' }}>\n <TooltipInPortalWrapper message={t(item.tooltipKey)}>\n <span style={{ display: 'inline-flex' }}>{icon}</span>\n </TooltipInPortalWrapper>\n </div>\n ) : null;\n const displayValue = item.useCodeBlock ? (\n <CodeBlock>{renderedText}</CodeBlock>\n ) : (\n <GridValue>\n {renderedText}\n {alignmentIcon}\n </GridValue>\n );\n return (\n <React.Fragment key={idx}>\n <GridLabel>\n {icon && !item.tooltipKey ? <span style={{ display: 'inline-flex', flexShrink: 0 }}>{icon}</span> : null}\n {parsedLabel}\n </GridLabel>\n {displayValue}\n </React.Fragment>\n );\n}\n\nexport const ExtractedCategoryContent: React.FC<{\n category: any;\n getTranslatedCaption: (caption?: ExtractionCaptionType) => any;\n}> = ({ category, getTranslatedCaption }) => {\n const { t } = useSignalCardTranslation('investigate');\n const useGridLayout =\n category.categoryType === 'dmarc-domain' ||\n category.categoryType === 'dmarc-policy' ||\n category.categoryType === 'dkim-details';\n\n if (useGridLayout) {\n // Grid layout for DMARC domain and policy sections\n const hasNonInlineItems = category.items?.some((item: any) => item.inline === false);\n const hasInlineItems = category.items?.some((item: any) => item.inline !== false);\n\n if (hasNonInlineItems && hasInlineItems) {\n // Both TXT records and grid items present\n return (\n <DetailedCard.CollapsibleSectionItems\n caption={getTranslatedCaption(\n category.extractionBox?.caption ||\n category.items?.find((item: any) => item.inline === false && item.extractionBox?.caption)?.extractionBox\n ?.caption\n )}\n >\n {category.items\n ?.filter((item: any) => item.inline === false)\n .map((item: any, idx: number) => {\n const { type, theme, label, text, inline, useCodeBlock } = item;\n return (\n <ExtractedItem\n key={`non-inline-${idx}`}\n type={type}\n theme={theme}\n label={label}\n text={text}\n inline={inline}\n useCodeBlock={useCodeBlock}\n extractionBox={undefined}\n />\n );\n })}\n <InfoItemsGrid $hasNonInlineItems={hasNonInlineItems} $insideCollapsible={true}>\n {category.items?.filter((item: any) => item.inline !== false).map((item: any, idx: number) => renderGridItem(item, idx, t))}\n </InfoItemsGrid>\n </DetailedCard.CollapsibleSectionItems>\n );\n } else if (hasNonInlineItems) {\n // Only TXT records present\n return (\n <DetailedCard.CollapsibleSectionItems\n caption={getTranslatedCaption(\n category.items?.find((item: any) => item.inline === false && item.extractionBox?.caption)?.extractionBox\n ?.caption\n )}\n >\n {category.items\n ?.filter((item: any) => item.inline === false)\n .map((item: any, idx: number) => {\n const { type, theme, label, text, inline, useCodeBlock } = item;\n return (\n <ExtractedItem\n key={`non-inline-${idx}`}\n type={type}\n theme={theme}\n label={label}\n text={text}\n inline={inline}\n useCodeBlock={useCodeBlock}\n extractionBox={undefined}\n />\n );\n })}\n </DetailedCard.CollapsibleSectionItems>\n );\n } else {\n // Only grid items present\n return (\n <DetailedCard.CollapsibleSectionItems caption={getTranslatedCaption(category.extractionBox?.caption)}>\n <InfoItemsGrid $hasNonInlineItems={false} $insideCollapsible={true}>\n {category.items?.filter((item: any) => item.inline !== false).map((item: any, idx: number) => renderGridItem(item, idx, t))}\n </InfoItemsGrid>\n </DetailedCard.CollapsibleSectionItems>\n );\n }\n }\n\n // Standard flex layout for other sections\n return (\n <DetailedCard.CollapsibleSectionItems caption={getTranslatedCaption(category.extractionBox?.caption)}>\n <InfoItemsHighlight $insideCollapsible={true}>\n {category.items?.map((item: any, idx: number) => {\n const { type, theme, label, text, inline, useCodeBlock } = item;\n return (\n <ExtractedItem\n key={idx}\n type={type}\n theme={theme}\n label={label}\n text={text}\n inline={inline}\n useCodeBlock={useCodeBlock}\n extractionBox={undefined}\n />\n );\n })}\n </InfoItemsHighlight>\n </DetailedCard.CollapsibleSectionItems>\n );\n};\n\nexport const SignalCardExtractedItems: React.FC<SignalCardExtractedItemsProps> = ({\n extractedItemsCategories,\n extractedItems,\n defaultTitle,\n isCollapsible,\n areAllCollapsed,\n}) => {\n const { t } = useSignalCardTranslation('investigate');\n\n // Create a caption translator function (doesn't use hooks, safe to call in loops)\n const getTranslatedCaption = (caption?: ExtractionCaptionType) => {\n if (!caption) return undefined;\n return t(EXTRACTION_CAPTION_KEYS[caption]);\n };\n\n if (extractedItems?.length) {\n return (\n <SignalCardSection marginBottom={0}>\n <InfoItemsWrapper>\n <SectionHeader>\n <SectionCaption>{defaultTitle}</SectionCaption>\n </SectionHeader>\n <InfoItemsHighlight>\n {extractedItems.map((item: any, idx: number) => {\n const { type, theme, label, text, inline, extractionBox } = item;\n return (\n <ExtractedItem\n key={idx}\n type={type}\n theme={theme}\n label={label}\n text={text}\n inline={inline}\n extractionBox={extractionBox}\n />\n );\n })}\n </InfoItemsHighlight>\n </InfoItemsWrapper>\n </SignalCardSection>\n );\n }\n\n if (extractedItemsCategories?.length) {\n return (\n <>\n {extractedItemsCategories\n .map((category: any, i: number) => {\n const hasItems = Array.isArray(category.items) && category.items.length;\n\n if (!hasItems) return null;\n\n return (\n <DetailedCard.Section\n key={i}\n header={category.title}\n isCollapsible={isCollapsible}\n isCollapsed={areAllCollapsed}\n >\n <ExtractedCategoryContent category={category} getTranslatedCaption={getTranslatedCaption} />\n </DetailedCard.Section>\n );\n })\n .filter(Boolean)}\n </>\n );\n }\n\n return null;\n};\n","import React from 'react';\n\ninterface WordHighlighterProps {\n startPos?: number;\n highlightClassName?: string;\n searchWord?: string;\n textToHighlight: string;\n highlightStyle?: React.CSSProperties;\n}\n\nconst DEFAULT_HIGHLIGHT_STYLE: React.CSSProperties = {\n backgroundColor: '#fff200',\n color: 'inherit',\n};\n\nconst WordHighlighter: React.FC<WordHighlighterProps> = ({\n startPos = 0,\n highlightClassName = 'syntax-error-highlight',\n searchWord,\n textToHighlight,\n highlightStyle,\n}) => {\n const wordLength = searchWord?.length ?? 0;\n const isHighlightable = wordLength > 0 && startPos >= 0 && startPos + wordLength <= textToHighlight.length;\n\n if (!isHighlightable) {\n return <>{textToHighlight}</>;\n }\n\n const before = textToHighlight.slice(0, startPos);\n const highlighted = textToHighlight.slice(startPos, startPos + wordLength);\n const after = textToHighlight.slice(startPos + wordLength);\n\n return (\n <span>\n {before}\n <span className={highlightClassName} style={highlightStyle ?? DEFAULT_HIGHLIGHT_STYLE}>\n {highlighted}\n </span>\n {after}\n </span>\n );\n};\n\nexport default WordHighlighter;\n","/* istanbul ignore file */\n/**\n * Lazy-loaded wrapper for ChartSankey to reduce initial bundle size.\n * D3 dependencies (~50-80KB) are only loaded when a Sankey chart is rendered.\n *\n * Re-exports types from ChartSankey for convenience.\n */\nimport React, { Suspense } from 'react';\nimport type { SankeyData, SankeyNode, ChartSankeyOptions } from './ChartSankey';\n\n// Re-export types (these don't add to bundle)\nexport type { SankeyData, SankeyNode, ChartSankeyOptions };\n\n// Lazy load the D3-heavy ChartSankey component\nconst ChartSankeyLazy = React.lazy(() => import('./ChartSankey'));\n\nexport interface LazyChartSankeyProps {\n data: SankeyData;\n options?: ChartSankeyOptions;\n /** Fallback to show while loading. Defaults to a placeholder with matching dimensions. */\n fallback?: React.ReactNode;\n}\n\n/**\n * Lazy-loaded Sankey chart that defers D3 bundle loading until render.\n */\nconst LazyChartSankey: React.FC<LazyChartSankeyProps> = ({ data, options, fallback }) => {\n const defaultFallback = (\n <div\n style={{\n width: options?.width ?? 345,\n height: options?.height ?? 100,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n aria-label=\"Loading chart...\"\n />\n );\n\n return (\n <Suspense fallback={fallback ?? defaultFallback}>\n <ChartSankeyLazy data={data} options={options} />\n </Suspense>\n );\n};\n\nLazyChartSankey.displayName = 'LazyChartSankey';\n\nexport default LazyChartSankey;\n","import styled from 'styled-components';\nimport type { StyledSignalCardFcrdnsProps } from './types';\n\n/**\n * Wrapper for Sankey chart visualization\n * Ensures SVG scales to full width and has stable dimensions to prevent layout shift\n */\nexport const StyledSankeyWrapper = styled.div<StyledSignalCardFcrdnsProps>`\n min-height: 100px;\n\n svg {\n width: 100%;\n }\n`;\n","/**\n * Structured Data Renderer\n *\n * Maps each StructuredData variant from @redsift/signal-logic to React components.\n * This is the rendering bridge between the framework-agnostic signal-logic library\n * and the React-based design system.\n *\n * @example\n * ```tsx\n * import { renderStructuredData } from '../adapters/structured-data-renderer';\n *\n * const node = renderStructuredData(item.label); // StructuredData → ReactNode\n * ```\n */\n\nimport React from 'react';\nimport type { StructuredData, DisplayValue } from '@redsift/signal-logic';\nimport { isStructuredData } from '@redsift/signal-logic';\nimport { GLOSSARY_ICON_MAP, type GlossaryIconType } from '../components/glossary/glossary';\nimport WordHighlighter from '../components/ui/WordHighlighter/WordHighlighter';\nimport { parseGlossaryMarkdown } from '../utils/parse-glossary-markdown';\nimport LazyChartSankey from '../components/charts/LazyChartSankey';\nimport { StyledSankeyWrapper } from '../cards/SignalCardFcrdns/styles';\nimport { colors } from '../styles/styles';\nimport { calculateSankeyHeight, create2LevelSankey } from '@redsift/signal-logic';\n// =============================================================================\n// ICON RENDERING\n// =============================================================================\n\n/**\n * Render a glossary icon from its type identifier.\n *\n * Label handling depends on labelType:\n * - `'display'`: rendered as `<code>` text alongside the icon (e.g., IP addresses)\n * - `'glossary-key'` or undefined: passed as prop to the GlossaryTerm component\n * for translation lookup (e.g., 'SPF_DOMAIN')\n */\nfunction renderIcon(\n iconType: GlossaryIconType,\n label?: string,\n labelType?: 'glossary-key' | 'display'\n): React.ReactNode {\n if (!iconType) {\n return null;\n }\n const Icon = GLOSSARY_ICON_MAP[iconType];\n if (!Icon) {\n return null;\n }\n if (label) {\n if (labelType === 'display') {\n return (\n <span>\n <Icon /> <code>{label}</code>\n </span>\n );\n }\n // Default: glossary-key — pass label as prop to GlossaryTerm for translation\n return <Icon label={label} />;\n }\n return <Icon />;\n}\n\n// =============================================================================\n// LIST RENDERING\n// =============================================================================\n\n/**\n * Render an array of strings as an unordered list.\n */\nexport function renderList(items: string[]): React.ReactNode {\n if (!items?.length) {\n return null;\n }\n return (\n <ul>\n {items.map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n );\n}\n\n// =============================================================================\n// SIGNED HEADERS RENDERING\n// =============================================================================\n\n/**\n * Render signed headers as a vertical list with code formatting.\n */\nfunction renderSignedHeaders(headers: string[]): React.ReactNode {\n if (!headers?.length) {\n return null;\n }\n return (\n <span\n style={{\n display: 'flex',\n flexDirection: 'column',\n marginLeft: '1em',\n }}\n >\n {headers.map((header, index) => (\n <code key={`${header}-${index}`} style={{ padding: 0 }}>\n <pre style={{ margin: 0, padding: 0 }}>{header}</pre>\n </code>\n ))}\n </span>\n );\n}\n\n// =============================================================================\n// ERROR SUBTEXT RENDERING\n// =============================================================================\n\n/**\n * Render error subtext, optionally removing a prefix pattern.\n */\nfunction renderErrorSubtext(text: string, removePattern?: string): React.ReactNode {\n let displayText = text;\n if (removePattern) {\n try {\n const regex = new RegExp(removePattern);\n displayText = text.replace(regex, '');\n } catch {\n // If regex is invalid, use original text\n }\n }\n return <span>{displayText}</span>;\n}\n\n// =============================================================================\n// SANKEY NODE STYLING\n// =============================================================================\n\n/** Map SankeyNodeType from signal-logic to fill colors from DS styles */\nconst SANKEY_NODE_COLORS: Record<string, string> = {\n 'sender-ip': colors.glossary.senderIp.lighter,\n 'a-record': colors.glossary.aRecord.lighter,\n 'ptr-record': colors.glossary.ptrRecord.lighter,\n ehlo: colors.glossary.ehlo.lighter,\n error: colors.glossary.error.lighter,\n};\n\n// =============================================================================\n// SANKEY RENDERING\n// =============================================================================\n\n/**\n * Render a sequential Sankey chart from StructuredData.\n */\nfunction renderSequentialSankey(data: {\n nodes: Array<{ name: string; nodeType: string }>;\n loopback?: boolean;\n}): React.ReactNode {\n const { nodes: dataNodes, loopback = false } = data;\n\n if (!dataNodes?.length) {\n return null;\n }\n\n const nodes = dataNodes.map((n) => ({\n name: n.name,\n fill: SANKEY_NODE_COLORS[n.nodeType] || colors.glossary.error.lighter,\n }));\n\n const numNodes = nodes.length;\n const links = loopback\n ? [...Array(numNodes)].map((_, idx) => ({\n source: idx,\n target: idx < numNodes - 1 ? idx + 1 : 0,\n value: 1,\n }))\n : [...Array(numNodes - 1)].map((_, idx) => ({\n source: idx,\n target: idx + 1,\n value: 1,\n }));\n\n const options = {\n width: 345,\n height: calculateSankeyHeight({ numItems: loopback ? 1.2 : 1 }),\n tipHtml: (d: { name: string }) => d.name,\n marginLeft: 0,\n };\n\n return (\n <StyledSankeyWrapper className=\"sankey\">\n <LazyChartSankey data={{ nodes, links }} options={options} />\n </StyledSankeyWrapper>\n );\n}\n\n/**\n * Render a two-level Sankey chart from StructuredData.\n */\nfunction render2LevelSankey(data: {\n rootName: string;\n rootNodeType: string;\n level1Nodes: string[];\n level1NodeType: string;\n level2Nodes: Record<string, string[]>;\n level2NodeType: string;\n noLevel2NodeLabel: string;\n}): React.ReactNode {\n const createNodeFn = (nodeType: string) => {\n const fill = SANKEY_NODE_COLORS[nodeType] || colors.glossary.error.lighter;\n return (d: { name: string }) => ({ ...d, fill });\n };\n\n const { nodes, links, width, height, numLeafs, matchingIdx, matchingPath } = create2LevelSankey({\n rootName: data.rootName,\n level1Nodes: data.level1Nodes,\n level2Nodes: data.level2Nodes,\n createRootNodeFn: createNodeFn(data.rootNodeType),\n createLevel1NodeFn: createNodeFn(data.level1NodeType),\n createLevel2NodeFn: createNodeFn(data.level2NodeType),\n noLevel2NodeLabel: data.noLevel2NodeLabel,\n });\n\n return (\n <StyledSankeyWrapper className=\"sankey\">\n <LazyChartSankey\n data={{ nodes, links }}\n options={{\n width,\n height,\n marginLeft: matchingIdx ? -16 : 0,\n marginRight: matchingIdx ? -48 : 0,\n marginBottom: numLeafs === 1 ? 32 : 0,\n tipHtml: (d: { name: string }) => d.name,\n matchingPath,\n chartId: `adapter-sankey-${data.rootName.replace(/\\./g, '-')}`,\n }}\n />\n </StyledSankeyWrapper>\n );\n}\n\n// =============================================================================\n// MAIN RENDERER\n// =============================================================================\n\n/**\n * Render a StructuredData variant as a React node.\n *\n * Handles all variants of the StructuredData discriminated union from signal-logic:\n * - `text` → plain string\n * - `icon` → `<GlossaryIcon>`\n * - `icon-pair` → `<Fragment>` with two icons\n * - `list` → `<ul><li>` list\n * - `highlighted-text` → `<WordHighlighter>`\n * - `signed-headers` → vertical code blocks\n * - `error-subtext` → `<span>` with pattern removal\n * - `code-block` → `<pre><code>` block\n * - `formatted-text` → segments with inline `<code>`/`<b>` and optional `<pre>` wrapper\n * - `sankey-sequential` → sequential Sankey chart\n * - `sankey-2level` → two-level Sankey chart\n *\n * @param data - A StructuredData object from signal-logic\n * @returns ReactNode for rendering\n */\nexport function renderStructuredData(data: StructuredData): React.ReactNode {\n switch (data.type) {\n case 'text':\n return data.value;\n\n case 'icon':\n return renderIcon(data.icon as GlossaryIconType, data.label, data.labelType);\n\n case 'icon-pair': {\n const primary = renderIcon(data.primary as GlossaryIconType, data.label, data.labelType);\n const secondary = data.secondary ? renderIcon(data.secondary as GlossaryIconType) : null;\n if (!secondary) {\n return primary;\n }\n return (\n <>\n {primary} {secondary}\n </>\n );\n }\n\n case 'list':\n return renderList(data.items);\n\n case 'highlighted-text':\n return <WordHighlighter searchWord={data.searchWord} textToHighlight={data.text} startPos={data.startPos} />;\n\n case 'signed-headers':\n return renderSignedHeaders(data.headers);\n\n case 'error-subtext':\n return renderErrorSubtext(data.text, data.removePattern);\n\n case 'code-block':\n return (\n <pre>\n <code>{data.content}</code>\n </pre>\n );\n\n case 'formatted-text': {\n const content = data.segments.map((segment, i) => {\n if (segment.format === 'code') {\n return <code key={i}>{segment.text}</code>;\n }\n if (segment.format === 'bold') {\n return <b key={i}>{segment.text}</b>;\n }\n if (segment.format === 'link') {\n return (\n <a key={i} href={segment.text} target=\"_blank\" rel=\"noopener noreferrer\">\n {segment.text}\n </a>\n );\n }\n return <React.Fragment key={i}>{parseGlossaryMarkdown(segment.text)}</React.Fragment>;\n });\n if (data.wrapper === 'pre') {\n return <pre>{content}</pre>;\n }\n return <>{content}</>;\n }\n\n case 'sankey-sequential':\n return renderSequentialSankey(data);\n\n case 'sankey-2level':\n return render2LevelSankey(data);\n\n default: {\n // Exhaustive check — if signal-logic adds a new variant, this will error at compile time\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _exhaustive: never = data;\n return null;\n }\n }\n}\n\n/**\n * Render a DisplayValue (string | StructuredData) as a React node.\n *\n * If the value is a plain string, it is returned as-is.\n * If the value is a StructuredData object, it is rendered via renderStructuredData.\n * Null/undefined values return null.\n *\n * @param value - A DisplayValue from signal-logic extractor results\n * @returns ReactNode for rendering\n */\nexport function renderDisplayValue(value: DisplayValue | null | undefined): React.ReactNode {\n if (value === null || value === undefined) {\n return null;\n }\n if (isStructuredData(value)) {\n return renderStructuredData(value);\n }\n return value;\n}\n","/**\n * Extractor Adapter\n *\n * Bridges @redsift/signal-logic extractors (framework-agnostic, StructuredData)\n * with DS card components (React, ReactNode).\n *\n * Each adapter function:\n * 1. Calls the signal-logic extractor with the same parameters\n * 2. Converts DisplayValue fields (string | StructuredData) → ReactNode\n * 3. Returns a result compatible with the existing card component interface\n *\n * Old extractors remain in the codebase during this phase. Cards can be\n * migrated one-at-a-time by switching their import from the old extractor\n * to the adapter.\n *\n * @example\n * ```tsx\n * // Before (in card component):\n * import { extractData } from '../../extractors/dmarc/';\n *\n * // After (using adapter):\n * import { adaptDmarcExtractor } from '../../adapters/extractor-adapter';\n * const result = adaptDmarcExtractor(dmarc, dkim, spf, jmap, t, isDomainAnalyzer);\n * ```\n */\n\nimport type { ReactNode } from 'react';\nimport type { ExtractedItem, ExtractedItemCategory, InfoItem, InfoItemCategory, Subtext } from '@redsift/signal-logic';\nimport {\n extractDmarcData,\n extractDkimData,\n extractSpfData,\n extractTlsData,\n extractFcrdnsData,\n extractDnssecData,\n extractThreatIntelligenceData,\n extractUrlsData,\n extractBimiData,\n extractAmpData,\n extractSubdoData,\n extractDomainAnalyzerDkimData,\n extractDomainAnalyzerSpfData,\n extractDmarcDomainData,\n extractSpfDomainData,\n extractMtaStsFullData,\n} from '@redsift/signal-logic';\n\nimport { renderDisplayValue } from './structured-data-renderer';\nimport type { CategoryItem, ItemCategory } from '../cards/SignalCardNormal/types';\nimport type { ChecklistItem } from '../components/ui/Checklist/Checklist';\n\n// =============================================================================\n// BIMI TRANSLATION KEY → data-testid MAPPING\n// =============================================================================\n\n/**\n * Maps signal-logic BIMI translation keys to the data-testid values\n * that the old DS helpers used to set on checklist items.\n * These are item-level testIds for QA automation (Playwright/Cypress).\n */\nconst BIMI_KEY_TO_TESTID: Record<string, string> = {\n // BIMI record status items\n 'card.bimi.record-declination_md': 'bimi-record-declination',\n 'card.bimi.record-passed_md': 'bimi-record-valid',\n 'card.bimi.record-invalid_md': 'bimi-record-invalid',\n 'card.bimi.record-no-cert_md': 'bimi-record-no-cert',\n 'card.bimi.record-failed_md': 'bimi-record-failed',\n 'card.bimi.cert-forbidden_md': 'bimi-record-cert-forbidden',\n 'card.bimi.record-unknown-error_md': 'bimi-record-unknown-error',\n 'card.bimi.could-not-fetch_md': 'bimi-record-fetch-failed',\n 'card.bimi.record-missing_md': 'bimi-record-not-found',\n // DMARC compliance items\n 'card.bimi.dmarc-compliance-pass_md': 'dmarc-compliance-pass',\n 'card.bimi.dmarc-compliance-fail_md': 'dmarc-compliance-fail',\n // VMC certificate items\n 'card.bimi.vmc-correctly-title_md': 'vmc-validity-valid',\n 'card.bimi.vmc-invalid-title_md': 'vmc-validity-invalid',\n 'card.bimi.vmc-not-vmc-title_md': 'vmc-validity-invalid',\n 'card.bimi.pemErrors.cert-not-found_md': 'vmc-cert-not-found',\n 'card.bimi.vmc.expired-date_md': 'vmc-expiration-expired',\n 'card.bimi.vmc.expiry-date_md': 'vmc-expiration-valid',\n};\n\n// =============================================================================\n// GENERIC CONVERSION HELPERS\n// =============================================================================\n\n/**\n * Convert a Subtext (DisplayValue fields) → { label?: ReactNode; text?: ReactNode }\n */\nfunction adaptSubtext(subtext: Subtext): { label?: ReactNode; text?: ReactNode } {\n return {\n label: renderDisplayValue(subtext.label) ?? undefined,\n text: renderDisplayValue(subtext.text) ?? undefined,\n };\n}\n\n/**\n * Convert an ExtractedItem (DisplayValue fields) → CategoryItem.\n */\nfunction adaptExtractedItem(item: ExtractedItem): CategoryItem {\n return {\n type: item.type,\n theme: item.theme,\n label: renderDisplayValue(item.label),\n text: renderDisplayValue(item.text),\n inline: item.inline,\n useCodeBlock: item.useCodeBlock,\n subtexts: item.subtexts?.map(adaptSubtext),\n tooltipKey: item.tooltipKey,\n };\n}\n\n/**\n * Convert an ExtractedItemCategory → ItemCategory.\n */\nfunction adaptExtractedItemCategory(cat: ExtractedItemCategory): ItemCategory {\n return {\n title: cat.title,\n caption: cat.caption,\n items: cat.items?.map(adaptExtractedItem),\n categoryType: cat.categoryType,\n extractionBox: cat.extractionBox,\n };\n}\n\n/**\n * Convert an InfoItem (DisplayValue text) → ChecklistItem-compatible shape.\n */\nfunction adaptInfoItem(item: InfoItem, testId?: string): ChecklistItem {\n return {\n type: item.type,\n theme: item.theme,\n text: renderDisplayValue(item.text),\n subtexts: item.subtexts ? item.subtexts.map((s) => ({ text: renderDisplayValue(s.text) })) : undefined,\n ...(testId ? { 'data-testid': testId } : undefined),\n };\n}\n\n/**\n * Convert an InfoItemCategory → checklist section with title and items.\n */\nfunction adaptInfoItemCategory(cat: InfoItemCategory): { title?: string; items: ChecklistItem[] } {\n return {\n title: cat.title,\n items: cat.items.map((item) => adaptInfoItem(item)),\n };\n}\n\n/**\n * Adapt an array of ExtractedItemCategory[], if present.\n */\nfunction adaptExtractedCategories(categories: ExtractedItemCategory[] | undefined): ItemCategory[] | undefined {\n return categories?.map(adaptExtractedItemCategory);\n}\n\n/**\n * Adapt an array of InfoItemCategory[], if present.\n */\nfunction adaptInfoCategories(\n categories: InfoItemCategory[] | undefined\n): Array<{ title?: string; items: ChecklistItem[] }> | undefined {\n return categories?.map(adaptInfoItemCategory);\n}\n\n/**\n * Adapt a flat array of InfoItem[], if present.\n */\nfunction adaptInfoItems(items: InfoItem[] | undefined | null): ChecklistItem[] | undefined {\n if (!items) return undefined;\n return items.map((item) => adaptInfoItem(item));\n}\n\n// =============================================================================\n// PER-EXTRACTOR ADAPTERS\n// =============================================================================\n\n/**\n * DMARC extractor adapter.\n * Wraps signal-logic's extractDmarcData and converts result to ReactNode-based types.\n */\nexport function adaptDmarcExtractor(...args: Parameters<typeof extractDmarcData>) {\n const result = extractDmarcData(...args);\n return {\n cardType: result.cardType,\n extractedItemsCategories: adaptExtractedCategories(result.extractedItemsCategories),\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n error: result.error,\n };\n}\n\n/**\n * DKIM extractor adapter.\n * Wraps signal-logic's extractDkimData and converts result to ReactNode-based types.\n */\nexport function adaptDkimExtractor(...args: Parameters<typeof extractDkimData>) {\n const result = extractDkimData(...args);\n return {\n cardType: result.cardType,\n extractedItemsCategories: adaptExtractedCategories(result.extractedItemsCategories),\n infoItems: adaptInfoItems(result.infoItems),\n infoItemsCategoriesDkim: result.infoItemsCategoriesDkim\n ? adaptInfoCategories(result.infoItemsCategoriesDkim)\n : undefined,\n };\n}\n\n/**\n * SPF extractor adapter.\n * Wraps signal-logic's extractSpfData and converts result to ReactNode-based types.\n */\nexport function adaptSpfExtractor(...args: Parameters<typeof extractSpfData>) {\n const result = extractSpfData(...args);\n return {\n cardType: result.cardType,\n extractedItemsCategories: adaptExtractedCategories(result.extractedItemsCategories),\n infoItems: adaptInfoCategories(result.infoItems),\n error: result.error,\n };\n}\n\n/**\n * TLS extractor adapter.\n * Wraps signal-logic's extractTlsData and converts result to ReactNode-based types.\n */\nexport function adaptTlsExtractor(...args: Parameters<typeof extractTlsData>) {\n const result = extractTlsData(...args);\n return {\n cardType: result.cardType,\n extractedItemsCategories: adaptExtractedCategories(result.extractedItemsCategories),\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n error: result.error,\n };\n}\n\n/**\n * FCrDNS extractor adapter.\n * Wraps signal-logic's extractFcrdnsData and converts result to ReactNode-based types.\n */\nexport function adaptFcrdnsExtractor(...args: Parameters<typeof extractFcrdnsData>) {\n const result = extractFcrdnsData(...args);\n return {\n cardType: result.cardType,\n extractedItemsCategories: adaptExtractedCategories(result.extractedItemsCategories),\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n error: result.error,\n };\n}\n\n/**\n * DNSSEC extractor adapter.\n * Wraps signal-logic's extractDnssecData and converts result to ReactNode-based types.\n */\nexport function adaptDnssecExtractor(...args: Parameters<typeof extractDnssecData>) {\n const result = extractDnssecData(...args);\n return {\n cardType: result.cardType,\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n };\n}\n\n/**\n * Threat Intelligence extractor adapter.\n * Wraps signal-logic's extractThreatIntelligenceData and converts result.\n */\nexport function adaptThreatIntelligenceExtractor(...args: Parameters<typeof extractThreatIntelligenceData>) {\n const result = extractThreatIntelligenceData(...args);\n if (!result) return null;\n return {\n cardType: result.cardType,\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n };\n}\n\n/**\n * URLs extractor adapter.\n * Wraps signal-logic's extractUrlsData and converts result to ReactNode-based types.\n */\nexport function adaptUrlsExtractor(...args: Parameters<typeof extractUrlsData>) {\n const result = extractUrlsData(...args);\n return {\n cardType: result.cardType,\n extractedItemsCategories: adaptExtractedCategories(result.extractedItemsCategories),\n shortDescription: renderDisplayValue(result.shortDescription),\n };\n}\n\n// =============================================================================\n// NEW ADAPTERS — Group 10\n// =============================================================================\n\n/**\n * BIMI extractor adapter.\n * Wraps signal-logic's extractBimiData and splits the flat result into named sections\n * for the SignalCardBimi component's interleaved section layout:\n * DMARC compliance → DMARC extracted → BIMI status → BIMI extracted → VMC → SVG\n *\n * Signal-logic returns categories in deterministic order; we split by title matching.\n */\nexport function adaptBimiExtractor(...args: Parameters<typeof extractBimiData>) {\n const [props, t, context] = args;\n\n // Wrap t to track which translation keys map to which returned strings.\n // This lets us stamp data-testid on items by matching the translated text back to its key.\n const translatedValueToKey = new Map<string, string>();\n const trackingT: typeof t = (key, params) => {\n const value = t(key, params);\n // Only track keys that have a known testId mapping\n if (BIMI_KEY_TO_TESTID[key]) {\n translatedValueToKey.set(value, key);\n }\n return value;\n };\n\n const result = extractBimiData(props, trackingT, context);\n const infoAll = result.infoItemsCategories ?? [];\n const extractedAll = result.extractedItemsCategories ?? [];\n\n // Split info categories by known section titles (from signal-logic's BIMI extractor).\n // VMC title uses t('card.bimi.vmc-title') but signal-logic applies localizeAssertionMarkdown()\n // which replaces \"VMC\" → \"CMC\" for CMC assertion types. Match both variants.\n const TITLE_BIMI_STATUS = t('card.bimi.record-status-title');\n const TITLE_DMARC = t('card.bimi.dmarc-compliance-title');\n const TITLE_SVG = t('card.bimi.safe-svg-title');\n const TITLE_VMC = t('card.bimi.vmc-title');\n const TITLE_CMC = TITLE_VMC.replace(/VMC/g, 'CMC');\n\n const infoBimi = infoAll.filter((c) => c.title === TITLE_BIMI_STATUS);\n const infoDmarc = infoAll.filter((c) => c.title === TITLE_DMARC);\n const svgRaw = infoAll.find((c) => c.title === TITLE_SVG);\n const vmcRaw = infoAll.find((c) => c.title === TITLE_VMC || c.title === TITLE_CMC);\n\n // Split extracted categories\n const TITLE_BIMI_RECORD = t('card.bimi.record-title');\n const extractedBimi = extractedAll.filter((c) => c.title === TITLE_BIMI_RECORD);\n const extractedDmarc = extractedAll.filter((c) => c.title !== TITLE_BIMI_RECORD);\n\n // Adapt info items with data-testid lookup from the tracking t wrapper.\n // Signal-logic may post-process t() values with localizeAssertionMarkdown (VMC→CMC),\n // so also try reversing that transformation when looking up the key.\n const resolveTestId = (text: string): string | undefined => {\n const key = translatedValueToKey.get(text);\n if (key) return BIMI_KEY_TO_TESTID[key];\n // Try reverse CMC→VMC substitution for assertion-mark-localized strings\n const vmcText = text.replace(/CMC/g, 'VMC');\n if (vmcText !== text) {\n const vmcKey = translatedValueToKey.get(vmcText);\n if (vmcKey) return BIMI_KEY_TO_TESTID[vmcKey];\n }\n return undefined;\n };\n\n const adaptWithTestIds = (categories: InfoItemCategory[] | undefined) =>\n categories?.map((cat) => ({\n title: cat.title,\n items: cat.items.map((item) => {\n const testId = typeof item.text === 'string' ? resolveTestId(item.text) : undefined;\n return adaptInfoItem(item, testId);\n }),\n }));\n\n return {\n cardType: result.cardType,\n infoItemsCategoriesBimi: adaptWithTestIds(infoBimi),\n infoItemsCategoriesDmarc: adaptWithTestIds(infoDmarc),\n svgSection: svgRaw ? adaptWithTestIds([svgRaw])![0] : null,\n vmcSection: vmcRaw ? adaptWithTestIds([vmcRaw])![0] : null,\n extractedItemsBimi: extractedBimi.map((cat) => adaptExtractedItemCategory(cat)),\n extractedItemsDmarc: extractedDmarc.map((cat) => adaptExtractedItemCategory(cat)),\n };\n}\n\n/**\n * AMP extractor adapter.\n * Wraps signal-logic's extractAmpData and converts result to ReactNode-based types.\n * Enriches extracted categories with extractionBox caption (dns/email) from dmarc.fromDns.\n */\nexport function adaptAmpExtractor(...args: Parameters<typeof extractAmpData>) {\n const result = extractAmpData(...args);\n const { dmarc } = args[0];\n const isDns = !!(dmarc as Record<string, unknown>)?.fromDns;\n const enrichedExtracted = result.extractedItemsCategories?.map((cat) => ({\n ...adaptExtractedItemCategory(cat),\n categoryType: 'dmarc-domain' as const,\n extractionBox: { caption: isDns ? ('dns' as const) : ('email' as const) },\n }));\n return {\n cardType: result.cardType,\n extractedItemsCategories: enrichedExtracted,\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n };\n}\n\n/**\n * SubDo extractor adapter.\n * Wraps signal-logic's extractSubdoData and converts result to ReactNode-based types.\n */\nexport function adaptSubdoExtractor(...args: Parameters<typeof extractSubdoData>) {\n const result = extractSubdoData(...args);\n return {\n cardType: result.cardType,\n ctaLink: result.ctaLink,\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n };\n}\n\n/**\n * Domain Analyzer DKIM extractor adapter.\n * Wraps signal-logic's extractDomainAnalyzerDkimData and converts result to ReactNode-based types.\n * Includes per-selector results for multi-selector DKIM display.\n */\nexport function adaptDomainAnalyzerDkimExtractor(...args: Parameters<typeof extractDomainAnalyzerDkimData>) {\n const result = extractDomainAnalyzerDkimData(...args);\n return {\n cardType: result.cardType,\n selectorResults: result.selectorResults?.map((sr) => ({\n selector: sr.selector,\n cardType: sr.cardType,\n extractedItemsCategories: adaptExtractedCategories(sr.extractedItemsCategories) ?? [],\n infoItemsCategories: adaptInfoCategories(sr.infoItemsCategories) ?? [],\n })),\n statusSummary: result.statusSummary as { pass: number; warning: number; fail: number } | undefined,\n extractedItemsCategories: adaptExtractedCategories(result.extractedItemsCategories),\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n };\n}\n\n/**\n * Domain Analyzer SPF extractor adapter.\n * Wraps signal-logic's extractDomainAnalyzerSpfData and converts result to ReactNode-based types.\n */\nexport function adaptDomainAnalyzerSpfExtractor(...args: Parameters<typeof extractDomainAnalyzerSpfData>) {\n const result = extractDomainAnalyzerSpfData(...args);\n const enrichedExtracted = result.extractedItemsCategories?.map((cat) => ({\n ...adaptExtractedItemCategory(cat),\n categoryType: 'dmarc-domain' as const,\n }));\n return {\n cardType: result.cardType,\n extractedItemsCategories: enrichedExtracted,\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n ctaLink: result.ctaLink,\n };\n}\n\n/**\n * DMARC Domain extractor adapter.\n * Wraps signal-logic's extractDmarcDomainData and converts result to ReactNode-based types.\n * Enriches extracted categories with DS-specific extractionBox and categoryType.\n */\nexport function adaptDmarcDomainExtractor(...args: Parameters<typeof extractDmarcDomainData>) {\n const result = extractDmarcDomainData(...args);\n const enrichedExtracted = result.extractedItemsCategories?.map((cat) => ({\n ...adaptExtractedItemCategory(cat),\n categoryType: 'dmarc-domain' as const,\n extractionBox: { caption: 'dns' as const },\n }));\n return {\n cardType: result.cardType,\n extractedItemsCategories: enrichedExtracted,\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n };\n}\n\n/**\n * SPF Domain extractor adapter.\n * Wraps signal-logic's extractSpfDomainData and converts result to ReactNode-based types.\n * Enriches extracted categories with DS-specific extractionBox and categoryType.\n */\nexport function adaptSpfDomainExtractor(...args: Parameters<typeof extractSpfDomainData>) {\n const result = extractSpfDomainData(...args);\n const enrichedExtracted = result.extractedItemsCategories?.map((cat) => ({\n ...adaptExtractedItemCategory(cat),\n categoryType: 'dmarc-domain' as const,\n extractionBox: { caption: 'dns' as const },\n }));\n return {\n cardType: result.cardType,\n extractedItemsCategories: enrichedExtracted,\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n ctaLink: result.ctaLink,\n };\n}\n\n/**\n * MTA-STS extractor adapter.\n * Wraps signal-logic's extractMtaStsFullData and splits the flat result into named\n * sections for the SignalCardMtaSts component's interleaved section layout:\n * TLS-RPT info → TLS-RPT extracted → MTA-STS info → MTA-STS extracted →\n * Policy info → Policy extracted → Certificate info\n *\n * Signal-logic returns categories in deterministic order; we split by title matching.\n * Extracted categories are enriched with DS-specific extractionBox and categoryType.\n */\nexport function adaptMtaStsExtractor(...args: Parameters<typeof extractMtaStsFullData>) {\n const [, t] = args;\n const result = extractMtaStsFullData(...args);\n if (!result) return null;\n\n const infoAll = result.infoItemsCategories ?? [];\n const extractedAll = result.extractedItemsCategories ?? [];\n\n // Split info categories by title strings set by signal-logic's MTA-STS extractor.\n // These are hardcoded English strings in signal-logic (not translation keys).\n // If signal-logic renames these titles, this adapter must be updated to match.\n const TITLE_TLS_RPT = 'TLS-RPT Record';\n const TITLE_MTA_STS = 'MTA-STS Record';\n const TITLE_POLICY = 'MTA-STS Policy File';\n const TITLE_CERTIFICATE = 'MTA-STS SSL Certificate';\n\n const infoTlsRpt = infoAll.filter((c) => c.title === TITLE_TLS_RPT);\n const infoMtaSts = infoAll.filter((c) => c.title === TITLE_MTA_STS);\n const infoPolicy = infoAll.filter((c) => c.title === TITLE_POLICY);\n const infoCertificate = infoAll.filter((c) => c.title === TITLE_CERTIFICATE);\n\n // Split extracted categories by translated titles (computed from same t() function)\n const TITLE_TLS_RPT_EXTRACTED = t('section-titles.tls-rpt-dns-record') ?? 'Your TLS-RPT DNS Record';\n const TITLE_MTA_STS_EXTRACTED = t('section-titles.mta-sts-dns-record') ?? 'Your MTA-STS DNS Record';\n const TITLE_POLICY_EXTRACTED = t('section-titles.mta-sts-policy-config') ?? 'Your MTA-STS Policy Configuration';\n\n const extractedTlsRpt = extractedAll.filter((c) => c.title === TITLE_TLS_RPT_EXTRACTED);\n const extractedMtaSts = extractedAll.filter((c) => c.title === TITLE_MTA_STS_EXTRACTED);\n const extractedPolicy = extractedAll.filter((c) => c.title === TITLE_POLICY_EXTRACTED);\n\n return {\n cardType: result.cardType,\n // Info sections (adapted to ChecklistItem[])\n infoTlsRpt: adaptInfoCategories(infoTlsRpt) ?? [],\n infoMtaSts: adaptInfoCategories(infoMtaSts) ?? [],\n infoPolicy: adaptInfoCategories(infoPolicy) ?? [],\n infoCertificate: adaptInfoCategories(infoCertificate) ?? [],\n // Extracted sections (enriched with DS-specific metadata)\n extractedTlsRptCategories: extractedTlsRpt.map((cat) => ({\n ...adaptExtractedItemCategory(cat),\n extractionBox: { caption: 'dns' as const },\n })),\n extractedMtaStsCategories: extractedMtaSts.map((cat) => ({\n ...adaptExtractedItemCategory(cat),\n extractionBox: { caption: 'dns' as const },\n })),\n extractedItemsPolicy: extractedPolicy.map((cat) => ({\n ...adaptExtractedItemCategory(cat),\n categoryType: 'dmarc-policy' as const,\n extractionBox: { caption: 'policy' as const },\n })),\n };\n}\n","import React, { useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport pako from 'pako';\nimport { componentLogger } from '../../utils/logger';\n\nconst toDataUri = (svg: string): string => `data:image/svg+xml;utf8,${encodeURIComponent(svg)}`;\n\nconst samePath =\n 'M27.2041 0.00010336C27.0218 -0.00237654 26.8417 0.0398027 26.6794 0.122959C26.5172 0.206116 26.3777 0.327722 26.2733 0.477164L6.91158 27.2857C6.73723 27.5264 6.66563 27.8265 6.71254 28.12C6.75946 28.4135 6.92104 28.6763 7.16175 28.8507C7.40245 29.025 7.70256 29.0966 7.99606 29.0497C8.28955 29.0028 8.55238 28.8412 8.72674 28.6005L10.5419 26.0872H33.883C34.1792 26.0872 34.4633 25.9695 34.6728 25.76C34.8823 25.5505 35 25.2664 35 24.9702V4.11912C35 3.82287 34.8823 3.53877 34.6728 3.3293C34.4633 3.11982 34.1792 3.00213 33.883 3.0021H27.2158L28.0884 1.79199C28.2137 1.62667 28.2905 1.42974 28.3102 1.22324C28.3299 1.01675 28.2917 0.808847 28.1999 0.622834C28.1081 0.43682 27.9663 0.280039 27.7904 0.170053C27.6146 0.0600667 27.4116 0.00121957 27.2041 0.00010336ZM1.00068 3.0021C0.72504 3.03099 0.469981 3.16131 0.285053 3.36774C0.100125 3.57417 -0.00146622 3.84197 1.59931e-05 4.11912V24.9702C4.5613e-05 25.2664 0.117741 25.5505 0.327217 25.76C0.536692 25.9695 0.820793 26.0872 1.11704 26.0872H4.47973C4.62775 26.0893 4.77471 26.0619 4.91207 26.0067C5.04943 25.9515 5.17445 25.8696 5.27986 25.7657C5.38527 25.6617 5.46898 25.5379 5.52611 25.4013C5.58324 25.2648 5.61266 25.1182 5.61266 24.9702C5.61266 24.8221 5.58324 24.6756 5.52611 24.539C5.46898 24.4025 5.38527 24.2786 5.27986 24.1747C5.17445 24.0707 5.04943 23.9888 4.91207 23.9336C4.77471 23.8784 4.62775 23.8511 4.47973 23.8531H2.23406V21.3399L9.68086 16.2667L10.4255 16.7787C10.6709 16.944 10.9718 17.0054 11.2623 16.9493C11.5528 16.8933 11.8092 16.7244 11.9755 16.4796C12.1417 16.2349 12.2042 15.9343 12.1492 15.6436C12.0942 15.3528 11.9263 15.0958 11.6822 14.9286L10.3092 13.9861C10.0907 13.8381 9.82693 13.7721 9.56451 13.8C9.3811 13.8188 9.20522 13.8828 9.05254 13.9861L2.23406 18.6404V5.23614H19.4083C19.5563 5.23823 19.7032 5.21089 19.8406 5.15569C19.9779 5.10049 20.103 5.01855 20.2084 4.91462C20.3138 4.81068 20.3975 4.68684 20.4546 4.55027C20.5118 4.41371 20.5412 4.26715 20.5412 4.11912C20.5412 3.97108 20.5118 3.82453 20.4546 3.68796C20.3975 3.5514 20.3138 3.42755 20.2084 3.32362C20.103 3.21969 19.9779 3.13774 19.8406 3.08255C19.7032 3.02735 19.5563 3 19.4083 3.0021H1.11704C1.07828 3.00008 1.03944 3.00008 1.00068 3.0021ZM25.5984 5.23614H32.766V16.162L26.7852 11.0772C26.6715 10.9818 26.5398 10.91 26.398 10.866C26.2561 10.8221 26.1069 10.8069 25.9591 10.8212C25.7323 10.8417 25.5171 10.931 25.3424 11.0772L16.6855 18.3495L16.3132 18.0935L25.5984 5.23614ZM10.0532 6.35316C8.42133 6.35316 7.07448 7.70001 7.07448 9.33188C7.07448 10.9638 8.42133 12.3106 10.0532 12.3106C11.6851 12.3106 13.0319 10.9638 13.0319 9.33188C13.0319 7.70001 11.6851 6.35316 10.0532 6.35316ZM10.0532 8.5872C10.4777 8.5872 10.7979 8.90738 10.7979 9.33188C10.7979 9.75639 10.4777 10.0766 10.0532 10.0766C9.6287 10.0766 9.30852 9.75639 9.30852 9.33188C9.30852 8.90738 9.6287 8.5872 10.0532 8.5872ZM26.0638 13.3927L32.766 19.0942V23.8531H12.1593L15.01 19.9087L16.127 20.6766C16.3287 20.814 16.5699 20.8816 16.8136 20.869C17.0574 20.8564 17.2903 20.7643 17.4767 20.6068L26.0638 13.3927Z';\n\nconst PLACEHOLDER_LIGHT = toDataUri(`\n <svg width=\"35\" height=\"30\" viewBox=\"0 0 35 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"${samePath}\" fill=\"#fff\"/>\n </svg>\n`);\n\nconst PLACEHOLDER_DARK = toDataUri(`\n <svg width=\"35\" height=\"30\" viewBox=\"0 0 35 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"${samePath}\" fill=\"#333333\"/>\n </svg>\n`);\n\nconst LogosWrapper = styled.div<{ $isDark?: boolean }>`\n &,\n & > div:last-child {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n gap: 16px;\n }\n\n border: 1px solid #dddddd;\n\n padding: 0.625rem 0.8rem;\n @media only screen and (min-width: 768px) {\n padding: 0.625rem 1rem;\n }\n margin-bottom: 1.125rem;\n max-width: 100%;\n overflow: hidden;\n box-sizing: border-box;\n\n background: ${({ $isDark }) => ($isDark ? '#333' : 'transparent')};\n\n & > :first-child {\n padding-right: 8px;\n @media only screen and (min-width: 768px) {\n padding-right: 1.25rem;\n }\n border-right: 1px solid #e1e1e1;\n flex-shrink: 0;\n }\n\n & > :last-child {\n flex: 1;\n margin-left: 0;\n min-width: 0;\n }\n`;\n\ninterface StyledLogoElementWrapperProps {\n $size: number;\n $square?: boolean;\n $isDark?: boolean;\n}\n\nconst LogoElementWrapper = styled.div<StyledLogoElementWrapperProps>`\n flex-shrink: 1;\n min-width: 0;\n\n &,\n & > div:first-child {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n }\n\n & > div:first-child {\n flex: 1;\n margin-bottom: 0.25rem;\n }\n\n .img {\n border-radius: 50%;\n border: 1px solid #e1e1e1;\n\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n max-width: 100%;\n\n ${({ $square }) =>\n $square\n ? css`\n border-radius: 0;\n border: 1px solid #e1e1e1;\n `\n : ''}\n\n &[data-error=true] {\n background-size: 50%;\n }\n\n width: ${({ $size }) => $size * 0.8}px;\n height: ${({ $size }) => $size * 0.8}px;\n\n @media only screen and (min-width: 768px) {\n width: ${({ $size }) => $size}px;\n height: ${({ $size }) => $size}px;\n }\n }\n\n p {\n font-size: 12px;\n line-height: 1.2;\n font-family: Source Code Pro;\n margin: 0;\n color: ${({ $isDark }) => ($isDark ? 'white' : 'black')};\n }\n`;\n\nconst round = (num: number, decimals = 2): number => Number(num.toFixed(decimals));\n\n/**\n * This function is to deal with a known bug of firefox.\n * If it tries to render an svg as an image, and the svg does not have height\n * or width attributes, the const { width, height } = this; will return a value of 0;\n */\nconst getAspectRatio = (height?: number, width?: number): string => {\n if (!width || !height) return '1:1';\n if (height <= width) return `${round(width / height)}:${1}`;\n return `${1}:${round(height / width)}`;\n};\n\nconst decodeBase64 = (base64: string): Uint8Array => {\n const binaryString = atob(base64);\n const len = binaryString.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n};\n\ninterface LogoElementProps {\n svgUrl?: string | null;\n size: number;\n square?: boolean;\n isDark?: boolean;\n}\n\nconst LogoElement: React.FC<LogoElementProps> = ({ svgUrl, size, square = false, isDark = false }) => {\n const [aspectRatio, setAspectRatio] = useState<string>(`${size}x${size}`);\n const [url, setUrl] = useState<string>(svgUrl ?? (isDark ? PLACEHOLDER_LIGHT : PLACEHOLDER_DARK));\n const [error, setError] = useState<boolean>(false);\n const [isLoaded, setIsLoaded] = useState<boolean>(false);\n\n useEffect(() => {\n setIsLoaded(false);\n if (!svgUrl) {\n setUrl(isDark ? PLACEHOLDER_LIGHT : PLACEHOLDER_DARK);\n setError(true);\n setIsLoaded(true);\n return;\n }\n\n const img = new Image();\n img.onload = () => {\n const { width, height } = img;\n setAspectRatio(getAspectRatio(height, width));\n setIsLoaded(true);\n };\n\n img.onerror = (error) => {\n componentLogger.error('Error loading image', error);\n componentLogger.error('Failed URL:', img.src);\n if (square) {\n setAspectRatio('1:1');\n }\n setUrl(isDark ? PLACEHOLDER_LIGHT : PLACEHOLDER_DARK);\n setError(true);\n setIsLoaded(true);\n };\n\n const newUrl = uncompressLogo(svgUrl);\n\n img.src = newUrl;\n setUrl(newUrl || (isDark ? PLACEHOLDER_LIGHT : PLACEHOLDER_DARK));\n }, [square, svgUrl, isDark, size]);\n\n return (\n <LogoElementWrapper $isDark={isDark} $square={square} $size={size}>\n <div>\n <div\n data-testid=\"bimi-logo-image\"\n data-error={error}\n data-loaded={isLoaded}\n className={'img'}\n style={{\n backgroundImage: `url(${url})`,\n }}\n />\n </div>\n <p>{square ? aspectRatio : `${size}x${size}`}</p>\n </LogoElementWrapper>\n );\n};\n\ntype LogosProps = Omit<LogoElementProps, 'size'>;\n\nconst Logos: React.FC<LogosProps> = ({ svgUrl, isDark, ...rest }) => (\n <LogosWrapper $isDark={isDark} {...rest}>\n <LogoElement svgUrl={svgUrl} size={80} square isDark={isDark} {...rest} />\n <div>\n <LogoElement svgUrl={svgUrl} size={80} isDark={isDark} {...rest} />\n <LogoElement svgUrl={svgUrl} size={60} isDark={isDark} {...rest} />\n <LogoElement svgUrl={svgUrl} size={40} isDark={isDark} {...rest} />\n </div>\n </LogosWrapper>\n);\n\nexport interface SVGLogoProps {\n svgUrl?: string | null;\n}\n\nconst SVGLogo: React.FC<SVGLogoProps> = ({ svgUrl = '' }) => (\n <>\n <Logos svgUrl={svgUrl} />\n <Logos svgUrl={svgUrl} isDark />\n </>\n);\n\nconst uncompressLogo = (svgUrl?: string | null): string => {\n if (!svgUrl) {\n return '';\n }\n\n if (!svgUrl.startsWith('data:image/svg+xml+gzip;base64,')) {\n return svgUrl;\n }\n try {\n const base64Data = svgUrl.replace('data:image/svg+xml+gzip;base64,', '');\n const compressedData = decodeBase64(base64Data);\n const decompressedData = pako.inflate(compressedData);\n const utf8Decoder = new TextDecoder('utf-8');\n let decodedString = utf8Decoder.decode(decompressedData);\n\n // Remove the <title> element, since it breaks the image if it has weird characters\n decodedString = decodedString.replace(/<title>.*<\\/title>/, '');\n\n return `data:image/svg+xml;base64,${btoa(decodedString)}`;\n } catch (error) {\n componentLogger.error('Error decompressing logo:', error);\n return svgUrl; // Return the original URL if decompression fails\n }\n};\n\nexport default SVGLogo;\n","import React, { forwardRef, useState, useCallback, useMemo } from 'react';\nimport classNames from 'classnames';\nimport type { Comp } from '@redsift/design-system';\nimport { useSignalCardTranslation } from '../../hooks/useSignalCardTranslation';\nimport { SignalCardNormal } from '../SignalCardNormal';\nimport { ExtractedCategoryContent } from '../SignalCardNormal/SignalCardExtractedItems';\nimport { EXTRACTION_CAPTION_KEYS, type ExtractionCaptionType } from '../SignalCard/components/extraction-box.constants';\nimport Checklist from '../../components/ui/Checklist/Checklist';\nimport SVGLogo from '../../components/ui/SVGLogo';\nimport { recordStatus } from '@redsift/signal-logic';\nimport { adaptBimiExtractor } from '../../adapters/extractor-adapter';\nimport type { SignalCardBimiProps } from './types';\n\n// Re-export signal-logic functions for backward compatibility\nexport { getBimiCardType as getCardType, recordStatus } from '@redsift/signal-logic';\n\nconst COMPONENT_NAME = 'SignalCardBimi';\nconst CLASSNAME = 'redsift-signal-card-bimi';\n\n/**\n * SignalCardBimi displays BIMI validation results including DMARC compliance,\n * BIMI record validation, VMC certificate details, and SVG logo validation.\n */\nexport const SignalCardBimi: Comp<SignalCardBimiProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { t } = useSignalCardTranslation('investigate');\n\n const {\n jmap: { extsecrep },\n onHeightChange,\n useInvestigateColors = false,\n isCollapsible,\n areAllCollapsed: areAllCollapsedProp,\n onCollapseAll: onCollapseAllProp,\n className,\n ...restProps\n } = props;\n\n // Manage internal collapse state\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const areAllCollapsed = areAllCollapsedProp !== undefined ? areAllCollapsedProp : internalCollapsed;\n const onCollapseAll = useCallback(\n (collapsed: boolean) => {\n setInternalCollapsed(collapsed);\n onCollapseAllProp?.(collapsed);\n },\n [onCollapseAllProp]\n );\n\n const { bimi } = extsecrep;\n\n const adapterResult = useMemo(() => {\n if (!bimi) return null;\n return adaptBimiExtractor(bimi as any, t, { dmarc: extsecrep.dmarc as any });\n }, [bimi, t, extsecrep.dmarc]);\n\n const isDeclinationToPublish = bimi?.bimiRecordStatus === recordStatus.DECLINATION_TO_PUBLISH;\n\n // Inject SVGLogo into SVG section (React-specific, can't come from signal-logic)\n const svgSection = useMemo(() => {\n if (isDeclinationToPublish || !adapterResult?.svgSection) return null;\n const items = [...adapterResult.svgSection.items];\n const imageUrl = bimi?.imageUrl;\n const hasErrors = ((bimi?.svgErrors as string[])?.length ?? 0) > 0 || ((bimi?.logo as any)?.errors?.length ?? 0) > 0;\n\n if (imageUrl && !hasErrors) {\n items.splice(1, 0, { text: <SVGLogo svgUrl={imageUrl} />, type: 'image' });\n } else if (!imageUrl) {\n items.splice(1, 0, { text: <SVGLogo />, type: 'image' });\n }\n return { ...adapterResult.svgSection, items };\n }, [adapterResult?.svgSection, bimi, isDeclinationToPublish]);\n\n // Inject SVGLogo into VMC section (React-specific)\n const vmcSection = useMemo(() => {\n if (isDeclinationToPublish || !adapterResult?.vmcSection) return null;\n const logoSrc = (bimi?.vmc as any)?.logoSrc;\n if (!logoSrc) return adapterResult.vmcSection;\n\n const items = [...adapterResult.vmcSection.items];\n // Insert logo before the first 'no-icon' item (matching original helpers behavior)\n const noIconIdx = items.findIndex((item) => item.type === 'no-icon');\n const svgItem = { text: <SVGLogo svgUrl={logoSrc} />, type: 'image' as const };\n if (noIconIdx >= 0) {\n items.splice(noIconIdx, 0, svgItem);\n } else {\n items.push(svgItem);\n }\n return { ...adapterResult.vmcSection, items };\n }, [adapterResult?.vmcSection, bimi, isDeclinationToPublish]);\n\n const getTranslatedCaption = useCallback(\n (caption?: ExtractionCaptionType) => {\n if (!caption) return undefined;\n return t(EXTRACTION_CAPTION_KEYS[caption]);\n },\n [t]\n );\n\n if (!bimi || !adapterResult) {\n return null;\n }\n\n const { cardType, infoItemsCategoriesDmarc, infoItemsCategoriesBimi, extractedItemsDmarc, extractedItemsBimi } =\n adapterResult;\n\n const sections = [\n ...(infoItemsCategoriesDmarc?.map((cat, i) => ({\n id: `checklistsDmarc-${i}`,\n title: cat.title,\n content: <Checklist items={cat.items} />,\n testId: `bimi-dmarc-section-${i}`,\n })) || []),\n ...(extractedItemsDmarc?.map((cat, i) => ({\n id: `extractedItemsDmarc-${i}`,\n title: cat.title,\n isCollapsible: true,\n content: <ExtractedCategoryContent category={cat} getTranslatedCaption={getTranslatedCaption} />,\n testId: `bimi-dmarc-extracted-${i}`,\n })) || []),\n ...(infoItemsCategoriesBimi?.map((cat, i) => ({\n id: `checklistsBimi-${i}`,\n title: cat.title,\n content: <Checklist items={cat.items} />,\n testId: `bimi-record-section-${i}`,\n })) || []),\n ...(extractedItemsBimi?.map((cat, i) => ({\n id: `extractedItemsBimi-${i}`,\n title: cat.title,\n isCollapsible: true,\n content: <ExtractedCategoryContent category={cat} getTranslatedCaption={getTranslatedCaption} />,\n testId: `bimi-record-extracted-${i}`,\n })) || []),\n ];\n\n if (vmcSection) {\n sections.push({\n id: 'VMCCertificate',\n title: vmcSection.title,\n content: <Checklist items={vmcSection.items} />,\n testId: 'bimi-vmc-section',\n });\n }\n\n if (svgSection) {\n sections.push({\n id: 'safeSVG',\n title: svgSection.title,\n content: <Checklist items={svgSection.items} />,\n testId: 'bimi-svg-section',\n });\n }\n\n const sectionIds = sections.map((s) => s.id);\n\n const introDescriptionContent = t('signal-description.BIMI_md_INTRO', {\n defaultValue: '',\n returnObjects: true,\n });\n\n return (\n <SignalCardNormal\n useInvestigateColors={useInvestigateColors}\n ref={ref}\n className={classNames(CLASSNAME, className)}\n title={'BIMI'}\n type=\"BIMI\"\n cardType={cardType}\n introDescription={introDescriptionContent}\n onComponentMount={() => onHeightChange?.()}\n onHeightChange={onHeightChange}\n customSectionOrder={['introDescription', ...sectionIds]}\n sections={sections}\n isCollapsible={isCollapsible}\n areAllCollapsed={areAllCollapsed}\n onCollapseAll={onCollapseAll}\n data-testid=\"signal-card-bimi\"\n data-card-type={cardType}\n {...restProps}\n />\n );\n});\n\nSignalCardBimi.className = CLASSNAME;\nSignalCardBimi.displayName = COMPONENT_NAME;\n","import React, { forwardRef, useMemo } from 'react';\nimport classNames from 'classnames';\nimport { useSignalCardTranslation } from '../../hooks/useSignalCardTranslation';\nimport { useCollapseController } from '../../hooks/useCollapseController';\nimport { SignalCardNormal } from '../SignalCardNormal';\nimport { ExtractedCategoryContent } from '../SignalCardNormal/SignalCardExtractedItems';\nimport { EXTRACTION_CAPTION_KEYS, type ExtractionCaptionType } from '../SignalCard/components/extraction-box.constants';\nimport Checklist from '../../components/ui/Checklist/Checklist';\nimport type { Comp } from '@redsift/design-system';\nimport type { SignalCardDmarcDomainProps } from './types';\nimport { adaptDmarcDomainExtractor } from '../../adapters/extractor-adapter';\n\nconst COMPONENT_NAME = 'SignalCardDmarcDomain';\nconst CLASSNAME = 'redsift-signal-card-dmarc-domain';\n\nexport const SignalCardDmarcDomain: Comp<SignalCardDmarcDomainProps, HTMLDivElement> = forwardRef<\n HTMLDivElement,\n SignalCardDmarcDomainProps\n>(function SignalCardDmarcDomain(\n {\n jmap: { extsecrep },\n onHeightChange,\n className,\n useInvestigateColors = false,\n bannerVariant,\n renderFooter,\n isCollapsible = true,\n areAllCollapsed,\n onCollapseAll,\n ...forwardedProps\n },\n ref\n) {\n const { t } = useSignalCardTranslation('investigate');\n const { dmarc } = extsecrep;\n\n const { cardType, infoItemsCategories, extractedItemsCategories } = useMemo(\n () => adaptDmarcDomainExtractor(dmarc ?? null, extsecrep.originator ?? null, t),\n [dmarc, extsecrep.originator, t]\n );\n\n const {\n isCollapsible: resolvedIsCollapsible,\n areAllCollapsed: resolvedAreAllCollapsed,\n handleCollapseAll,\n } = useCollapseController({\n isCollapsible,\n areAllCollapsed,\n onCollapseAll,\n });\n\n const onComponentMount = () => {\n onHeightChange?.();\n };\n\n const getTranslatedCaption = (caption?: ExtractionCaptionType) => {\n if (!caption) return undefined;\n return t(EXTRACTION_CAPTION_KEYS[caption]);\n };\n\n const sections = useMemo(\n () => [\n ...(infoItemsCategories?.map((cat, i) => ({\n id: `checklists-${i}`,\n title: cat.title,\n content: <Checklist items={cat.items} />,\n testId: `dmarc-domain-section-${i}`,\n })) || []),\n ...(extractedItemsCategories\n ?.filter((cat) => cat.items && cat.items.length > 0)\n .map((cat, i) => ({\n id: `extractedItems-${i}`,\n title: cat.title,\n caption: cat.extractionBox?.caption\n ? getTranslatedCaption(cat.extractionBox.caption as ExtractionCaptionType)\n : undefined,\n isCollapsible: true,\n content: <ExtractedCategoryContent category={cat} getTranslatedCaption={getTranslatedCaption} />,\n testId: `dmarc-domain-extracted-${i}`,\n })) || []),\n ],\n [infoItemsCategories, extractedItemsCategories, t]\n );\n\n return (\n <SignalCardNormal\n useInvestigateColors={useInvestigateColors}\n {...forwardedProps}\n ref={ref}\n className={classNames(CLASSNAME, className)}\n title={'DMARC'}\n cardType={cardType}\n onComponentMount={onComponentMount}\n onHeightChange={onHeightChange}\n renderFooter={renderFooter}\n sections={sections}\n shortDescription={t('signal-description.DMARC_DOMAIN_md_SHORT', {\n returnObjects: true,\n })}\n longDescription={t('signal-description.DMARC_DOMAIN_md_LONG', {\n returnObjects: true,\n })}\n bannerVariant={bannerVariant}\n isCollapsible={resolvedIsCollapsible}\n areAllCollapsed={resolvedAreAllCollapsed}\n onCollapseAll={handleCollapseAll}\n data-testid=\"signal-card-dmarc-domain\"\n data-card-type={cardType}\n />\n );\n});\n\nSignalCardDmarcDomain.className = CLASSNAME;\nSignalCardDmarcDomain.displayName = COMPONENT_NAME;\n\n// Re-export signal-logic functions for backward compatibility with existing tests/consumers\nexport { getDmarcDomainCardType as getCardType, getDmarcDomainCheck as getDMARCCheck } from '@redsift/signal-logic';\n","import React, { forwardRef, useState, useMemo } from 'react';\nimport classNames from 'classnames';\nimport { useSignalCardTranslation } from '../../hooks/useSignalCardTranslation';\nimport type { Comp } from '@redsift/design-system';\n\nimport { SignalCardNormal } from '../SignalCardNormal';\nimport { ExtractedCategoryContent } from '../SignalCardNormal/SignalCardExtractedItems';\nimport { EXTRACTION_CAPTION_KEYS, type ExtractionCaptionType } from '../SignalCard/components/extraction-box.constants';\nimport Checklist from '../../components/ui/Checklist/Checklist';\nimport type { SignalCardSpfDomainProps } from './types';\nimport { adaptSpfDomainExtractor } from '../../adapters/extractor-adapter';\n\nconst COMPONENT_NAME = 'SignalCardSpfDomain';\nconst CLASSNAME = 'redsift-signal-card-spf-domain';\n\n/**\n * SignalCardSpfDomain Component\n *\n * Simplified SPF Domain Card for BIMI Checker tool.\n * Shows only pass/fail status and raw SPF TXT record.\n *\n * For advanced SPF analysis (DNS lookups, Dynamic SPF, etc.),\n * see SignalCardSpfDomainAnalyzer instead.\n *\n * @component\n * @example\n * ```tsx\n * <SignalCardSpfDomain\n * jmap={{ extsecrep: { spf: { status: 'pass', raw: 'v=spf1 ...' } } }}\n * />\n * ```\n */\nexport const SignalCardSpfDomain: Comp<SignalCardSpfDomainProps, HTMLDivElement> = forwardRef<\n HTMLDivElement,\n SignalCardSpfDomainProps\n>(function SignalCardSpfDomain(props, ref) {\n const {\n className,\n jmap,\n onHeightChange,\n bannerVariant,\n useInvestigateColors = false,\n renderFooter,\n ...forwardedProps\n } = props;\n const { t } = useSignalCardTranslation('investigate');\n\n const spf = jmap?.extsecrep?.spf;\n\n const { cardType, infoItemsCategories, extractedItemsCategories, ctaLink } = useMemo(\n () => adaptSpfDomainExtractor(spf as any, t),\n [spf, t]\n );\n\n const ctaButtonName = t('card.subdo.button-name');\n const onCTAButtonClick = ctaLink ? () => window.open(ctaLink, '_blank') : undefined;\n\n // State for collapse all functionality\n const [areAllCollapsed, setAreAllCollapsed] = useState(false);\n const handleCollapseAll = () => {\n setAreAllCollapsed((prev) => !prev);\n };\n\n const handleComponentMount = () => {\n if (onHeightChange) {\n onHeightChange();\n }\n };\n\n const getTranslatedCaption = (caption?: ExtractionCaptionType) => {\n if (!caption) return undefined;\n return t(EXTRACTION_CAPTION_KEYS[caption]);\n };\n\n const sections = useMemo(\n () => [\n // SPF Policy section with DNS record\n ...(extractedItemsCategories\n ?.filter((cat) => cat.items && cat.items.length > 0)\n .map((cat, i) => ({\n id: `extractedItems-${i}`,\n title: cat.title,\n isCollapsible: true,\n content: <ExtractedCategoryContent category={cat} getTranslatedCaption={getTranslatedCaption} />,\n testId: `spf-domain-extracted-${i}`,\n })) || []),\n // SPF status section with all checklist items (main status + report errors)\n ...(infoItemsCategories?.map((cat, i) => ({\n id: `spf-status-${i}`,\n title: cat.title,\n content: <Checklist items={cat.items} />,\n testId: `spf-domain-status-section-${i}`,\n })) || []),\n ],\n [extractedItemsCategories, infoItemsCategories, t]\n );\n\n if (!spf) return null;\n\n return (\n <SignalCardNormal\n useInvestigateColors={useInvestigateColors}\n {...forwardedProps}\n ref={ref}\n className={classNames(CLASSNAME, className)}\n title=\"SPF\"\n cardType={cardType}\n onComponentMount={handleComponentMount}\n sections={sections}\n bannerVariant={bannerVariant}\n renderFooter={renderFooter}\n ctaButtonName={ctaButtonName}\n onCTAButtonClick={onCTAButtonClick}\n shortDescription={t('signal-description.SPF_DOMAIN_md_SHORT', {\n returnObjects: true,\n })}\n longDescription={t('signal-description.SPF_DOMAIN_md_LONG', {\n returnObjects: true,\n })}\n isCollapsible={true}\n areAllCollapsed={areAllCollapsed}\n onCollapseAll={handleCollapseAll}\n data-testid=\"signal-card-spf-domain\"\n data-card-type={cardType}\n />\n );\n});\n\nSignalCardSpfDomain.displayName = COMPONENT_NAME;\nSignalCardSpfDomain.className = CLASSNAME;\n\n// Re-export signal-logic functions for backward compatibility\nexport { getSpfDomainCardType as getCardType, getSpfDomainCheck as getSpfCheck } from '@redsift/signal-logic';\n"],"names":["COLOR","main","green","yellow","red","blue","white","black","warningOrange","grey","darkest","darker","dark","medium","regular","light","lighter","lightest","FONT","TYPE","TEXT","HEADING","NUMBER","SIGNAL_CARD_CSS_VARS","INVESTIGATE_CSS_VARS","getThemeCSSVars","useInvestigateColors","defaultTheme","SignalCardThemeContext","createContext","SignalCardThemeProvider","_ref","children","theme","mergedTheme","useMemo","_objectSpread","cssVars","React","createElement","Provider","value","style","displayName","useSignalCardTheme","useContext","useResolvedTheme","propValue","contextTheme","withSignalCardTheme","Component","_Component$displayNam","Wrapped","forwardRef","props","ref","override","rest","_objectWithoutProperties","_excluded","ThemedComponent","_extends","componentName","name","STATIC_KEYS","forEach","key","prefixKeys","strings","result","Object","entries","mergedEnUS","enUS","EXTRACTOR_STRINGS","mergedFrFR","frFR","useSignalCardFormatter","useLocalizedStringFormatter","intlMessages","isDevelopment","process","_process$env","env","NODE_ENV","noop","createLogger","prefix","debug","info","warn","error","formatPrefix","_len","arguments","length","args","Array","_key","console","_len2","_key2","_len3","_key3","_len4","_key4","logger","signalCardsLogger","translationLogger","componentLogger","createNamespaceResolver","formatter","namespaces","params","includes","explicitNs","actualKey","split","fullKey","finalKey","count","undefined","pluralSuffix","format","interpolateTranslation","suffixes","namespace","suffix","useSignalCardTranslation","keyPrefix","t","useCallback","cleanKey","colonIndex","indexOf","substring","prefixedKey","context","countValue","interpolationValues","defaultValue","returnObjects","baseKey","baseResult","useMultiNamespaceTranslation","stableKey","join","resolve","useCollapseController","areAllCollapsed","controlledValue","onCollapseAll","isCollapsible","internalValue","setInternalValue","useState","useEffect","resolvedIsCollapsible","resolvedValue","handleCollapseAll","nextValue","DS_FONT_BODY","DS_TEXT_COLOR","StyledIntroText","styled","div","StyledCardHeader","StyledCardFooter","DS_LINK_COLOR","DescriptionContainer","DescriptionText","DescriptionToggle","CardWrapper","CardContent","DescriptionSpacer","ChartContainer","websiteButtonToken","token","state","websiteButtonOutlineToken","StyledSignalCardButton","button","$theme","_ref2","_ref3","css","_ref4","_ref5","_ref6","SignalCardButton","_ref7","requestedTheme","type","useTheme","Button","ExpandableDescription","memo","shortDescription","additionalDescription","hasAdditionalContent","showShowMoreButton","showCTAButton","onCTAButtonClick","ctaButtonName","onHeightChange","useInvestigateColorsOverride","showLongDescription","setShowLongDescription","Fragment","display","onClick","StyledContainer","$hidden","$borderBottom","$marginBottom","SignalCardSection","title","marginBottom","borderBottom","hidden","DS_FONT_CODE","DS_BG_LIGHT","InfoItemContainer","$compact","InfoItemRow","$alignTop","InfoItemIcon","span","InfoItemContent","InfoItemLabel","$inline","$variant","InfoItemSubtexts","$hasImage","InfoItemList","ul","InfoItemCodeBlock","pre","InfoItemsWrapper","SignalCardInfoBox","footerText","DEFAULT_PALETTE","base","hover","COLOR_MAP","pink","aqua","brown","purple","orange","resolvePalette","color","_COLOR_MAP$key","toLowerCase","StyledGlossaryTag","a","$palette","GlossaryTag","label","href","className","palette","isInteractive","Boolean","handleKeyDown","e","preventDefault","as","onKeyDown","target","rel","role","tabIndex","presentation10","standard","names","getColor","normalizedName","paletteIndex","colors","welcomeGreen","ondmarcGreen","ondmarcGreenDark","ondmarcGreenHover","ondmarcGreenActive","darkGrey","inactiveGrey","mediumGrey","ondmarcRed","ondmarcRedLight","ondmarcRedLightHover","ondmarcRedLightActive","ondmarcRedDark","ondmarcAmberDark","ondmarcBlue","ondmarcAmber","lightGrey","disabledGrey","darkGrayishBlue","lightGreyishBlue","blueGrey","navGrey","navDarkGrey","glossary","senderIp","ehlo","ptrRecord","aRecord","spfRecord","dkim","signerDomain","dkimSelector","canonicalization","signedHeaders","dkimSignature","dkimSignatureHeader","ttl","from","returnPath","dmarcPolicy","pct","sp","rua","ruf","dkimSigningDomain","spfDomain","spfDomains","subdomainPolicy","dkimAlignment","spfAlignment","spf","tls","ssl","cipherSuite","keyLength","txtRecord","bimiRecord","dmarcCompliant","svg","iTag","aTag","vmc","cmc","dmarc","tlsRptRecord","mtaStsRecord","mtaStsPolicyFile","version","mode","mx","maxAge","glossaryColorMap","GLOSSARY_BASE_PAGE","createGlossaryLink","glossaryPage","replace","navigateTo","link","window","open","glossaryLabelIds","ATAG","A_RECORD","BIMI_RECORD","CANONICALIZATION","CNAME_RECORD","DKIM","DKIM_ALGORITHM","DKIM_ALIGNMENT","DKIM_SELECTOR","DKIM_SIGNATURE","DKIM_SIGNATURE_HEADER","DKIM_SIGNING_DOMAIN","DMARC","DMARC_COMPLIANT","DMARC_POLICY","EHLO","FROM","ITAG","KEY_LENGTH","MTA_FILE_MAX_AGE","MTA_FILE_MODE","MTA_FILE_MX","MTA_FILE_VERSION","MTA_STS_POLICY_FILE","MTA_STS_CERTIFICATE","MTA_STS_CERTIFICATE_EXPIRY","MTA_STS_CERTIFICATE_CNAME_NAME","MTA_STS_CERTIFICATE_CNAME_VALUE","MTA_STS_CERTIFICATE_CNAME_TYPE","MTA_STS_RECORD","PCT","PTR_RECORD","RETURN_PATH","RUA","RUF","SENDER_IP","SIGNED_HEADERS","SIGNER_DOMAIN","SP","SPF","SPF_ALIGNMENT","SPF_DOMAIN","SPF_DOMAINS","SPF_RECORD","TLS","SSL","CIPHER_SUITE","SUBDOMAIN_POLICY","SVG","TLS_RPT_RECORD","TTL","TXT_RECORD","TXT_RECORDS","VMC","CMC","GlossaryTerm","glossaryLabel","localeLink","resolvedLink","labelId","colorName","createGlossaryComponent","defaultLabel","other","SenderIp","Ehlo","PtrRecord","ARecord","SpfRecord","TxtRecord","TxtRecords","CnameRecord","Dkim","SignerDomain","DkimSelector","Canonicalization","SignedHeaders","DkimSignature","KeyLength","Ttl","DkimAlgorithm","From","ReturnPath","DmarcPolicy","Pct","Sp","Rua","Ruf","DkimSigningDomain","SpfDomain","SubdomainPolicy","DkimAlignment","SpfAlignment","Spf","Tls","Ssl","CipherSuite","BimiRecord","DmarcCompliant","Dmarc","TlsRptRecord","MtaStsRecord","MtaStsPolicyFile","Version","Mode","Mx","MaxAge","MtaStsCertificate","MtaStsCertificateExpiry","MtaStsCertificateCnameName","MtaStsCertificateCnameValue","MtaStsCertificateCnameType","GLOSSARY_ICON_MAP","itag","atag","TextBeforeGlossary","MarkdownLink","BoldText","strong","isValidUrl","url","parsed","URL","protocol","COMBINED_PATTERN_SOURCE","source","parseGlossaryMarkdown","text","parts","lastIndex","keyCounter","match","pattern","RegExp","exec","index","textBefore","isGlossary","isLink","push","customText","termId","map","word","charAt","toUpperCase","slice","GlossaryComponent","GlossaryComponents","trim","linkText","linkUrl","boldText","parsedBoldText","italicText","parsedItalicText","codeText","linkValue","EXTRACTION_CAPTION_KEYS","email","dns","policy","ExtractionBox","$hasCaption","ExtractionCaption","InfoItemsHighlight","$insideCollapsible","InfoItemsGrid","GridLabel","GridValue","CodeBlock","StyledChecklistContainer","$fluid","StyledInfoItem","StyledItemText","_ref8","_ref9","StyledIconWrapper","_ref10","_ref11","StyledContent","StyledSubtexts","renderValue","nodes","item","isArray","entry","idx","trimmed","isValidElement","_item$key","cloneElement","getIcon","_ref12","hasWarning","Icon","icon","mdiCheck","size","mdiEmail","mdiEarth","mdiInformationOutline","mdiAlert","mdiClose","mdiHelpCircle","InfoItem","_ref13","subtexts","fluid","compact","extractionBox","dataTestId","renderedText","captionText","caption","content","subtext","MemoizedInfoItem","Checklist","_ref14","items","ChecklistRenderer","infoItemsCategories","getTranslatedCaption","sections","category","i","_category$items","hasCaption","DetailedCard","Section","header","isCollapsed","CollapsibleSectionItems","filter","DISABLED_GREY","resolveAccentColor","Wrapper","$alignLabel","StyledBox","$accentColor","$disabled","$circle","$bold","$isSwitch","$selected","Center","_ref15","_ref16","_ref17","HiddenInput","input","_ref18","Slider","_ref19","_ref20","StyledLabel","_ref21","$hasChildren","CheckBox","_ref22","id","selected","onToggle","disabled","circle","bold","isSwitch","alignLabel","accentColor","handleToggle","onChange","checked","readOnly","viewBox","position","inset","strokeWidth","fill","stroke","d","htmlFor","hasRenderableContent","some","formatContent","processValue","processArray","arr","orderedListBuffer","flushOrderedList","listIndex","entryKey","orderedListMatch","processed","node","flattened","StyledBanner","StyledBannerContent","StyledBannerLogo","img","StyledBannerText","ONDMARC_SIGNUP_URL","StyledBannerLink","ExternalLinkIcon","focusable","height","width","preserveAspectRatio","StyledDSButtonLinkWrapper","DmarcPromoBanner","buttonLabel","src","ondmarcLogoSimple","alt","ButtonLink","mapCardTypeToColor","mapStatusToDetailedCardColor","DEFAULT_SECTION_ORDER","COMPONENT_NAME","CLASSNAME","SignalCardNormal","cardType","resultSelected","resultOptions","optionsLabel","onResultsChange","safeSVG","VMCCertificate","customSectionOrder","longDescription","introDescription","onComponentMount","renderHeader","promoHref","renderFooter","bannerVariant","isLoading","shield","signalType","_signalType","jmap","_jmap","domain","_domain","investigate","_investigate","isDomainAnalyzer","_isDomainAnalyzer","forwardedProps","resultOptionsBaseId","useId","resultOptionsGroupName","defaultRenderHeader","effectiveRenderHeader","themeCSSVars","shortDescriptionComponent","hasShortDescription","raw","longDescriptionRaw","longDescriptionComponent","hasLongDescription","introDescriptionComponent","additionalLongDescriptionComponent","hasAdditionalLongDescription","normalizedLongDescriptionRaw","additionalRaw","descriptionContent","appendContent","additionalDescriptionContent","descriptionEl","ResultOptions","marginTop","data","itemType","optionId","IntroDescription","SafeSVG","VMCCertificatSection","GenericSections","section","_section$isCollapsibl","testId","componentNameMap","genericSections","sectionHasContent","sectionName","s","sectionsOrder","sectionsWithContent","renderedSections","flatMap","genericSection","find","_genericSection$isCol","renderSection","missingSections","hasResultOptions","hasSafeSVG","hasVMCCertificate","relevantMissingSections","detailedCardColor","detailedCardBannerVariant","iconColor","effectiveIcon","upper","toString","mdiInformation","showIconInHeader","showIconInBanner","classNames","Header","Flexbox","gap","alignItems","fontSize","fontWeight","lineHeight","fontFamily","flexWrap","headerContent","useOnClickOutside","handler","handlerRef","useRef","current","listener","event","element","contains","document","addEventListener","removeEventListener","Portal","onClickOutside","rootId","mount","getElementById","el","appendChild","removeChild","createPortal","PLACEMENT","UP","DOWN","TOP_LEFT","RIGHT","CENTER","LEFT","TooltipContent","$placement","TooltipContainer","$isOpen","Tooltip","placement","renderContent","ContentComponent","isOpen","styles","TooltipStyled","TOOLTIP_DISTANCE","TooltipInPortal","parentRef","coords","setCoords","parentElement","rect","getBoundingClientRect","left","top","scrollY","TooltipInPortalWrapper","message","isDisabled","_excluded2","containerRef","isTooltipOpen","setIsTooltipOpen","containerElement","onMouseLeave","onMouseEnter","renderExtractedValue","_input$key","String","ExtractedItem","inline","useCodeBlock","parsedLabel","cleanedText","displayText","cleanedChildren","renderGridItem","alignmentIcon","tooltipKey","flexShrink","marginLeft","displayValue","ExtractedCategoryContent","_category$extractionB3","_category$items9","useGridLayout","categoryType","_category$items2","hasNonInlineItems","hasInlineItems","_category$extractionB","_category$items3","_category$items3$find","_category$items3$find2","_category$items4","_category$items5","_item$extractionBox","$hasNonInlineItems","_category$items6","_category$items6$find","_category$items6$find2","_category$items7","_item$extractionBox2","_category$extractionB2","_category$items8","DEFAULT_HIGHLIGHT_STYLE","backgroundColor","WordHighlighter","_searchWord$length","startPos","highlightClassName","searchWord","textToHighlight","highlightStyle","wordLength","isHighlightable","before","highlighted","after","ChartSankeyLazy","lazy","LazyChartSankey","_options$width","_options$height","options","fallback","defaultFallback","justifyContent","Suspense","StyledSankeyWrapper","renderIcon","iconType","labelType","renderList","renderSignedHeaders","headers","flexDirection","padding","margin","renderErrorSubtext","removePattern","regex","SANKEY_NODE_COLORS","renderSequentialSankey","dataNodes","loopback","n","nodeType","numNodes","links","_","calculateSankeyHeight","numItems","tipHtml","render2LevelSankey","createNodeFn","numLeafs","matchingIdx","matchingPath","create2LevelSankey","rootName","level1Nodes","level2Nodes","createRootNodeFn","rootNodeType","createLevel1NodeFn","level1NodeType","createLevel2NodeFn","level2NodeType","noLevel2NodeLabel","marginRight","chartId","renderStructuredData","primary","secondary","segments","segment","wrapper","renderDisplayValue","isStructuredData","BIMI_KEY_TO_TESTID","adaptSubtext","_renderDisplayValue","_renderDisplayValue2","adaptExtractedItem","_item$subtexts","adaptExtractedItemCategory","cat","_cat$items","adaptInfoItem","adaptInfoItemCategory","adaptExtractedCategories","categories","adaptInfoCategories","adaptInfoItems","adaptDmarcExtractor","extractDmarcData","extractedItemsCategories","adaptDkimExtractor","extractDkimData","infoItems","infoItemsCategoriesDkim","adaptSpfExtractor","extractSpfData","adaptTlsExtractor","extractTlsData","adaptFcrdnsExtractor","extractFcrdnsData","adaptDnssecExtractor","extractDnssecData","adaptThreatIntelligenceExtractor","extractThreatIntelligenceData","adaptUrlsExtractor","extractUrlsData","adaptBimiExtractor","_result$infoItemsCate","_result$extractedItem","translatedValueToKey","Map","trackingT","set","extractBimiData","infoAll","extractedAll","TITLE_BIMI_STATUS","TITLE_DMARC","TITLE_SVG","TITLE_VMC","TITLE_CMC","infoBimi","c","infoDmarc","svgRaw","vmcRaw","TITLE_BIMI_RECORD","extractedBimi","extractedDmarc","resolveTestId","get","vmcText","vmcKey","adaptWithTestIds","infoItemsCategoriesBimi","infoItemsCategoriesDmarc","svgSection","vmcSection","extractedItemsBimi","extractedItemsDmarc","adaptAmpExtractor","_result$extractedItem2","extractAmpData","isDns","fromDns","enrichedExtracted","adaptSubdoExtractor","extractSubdoData","ctaLink","adaptDomainAnalyzerDkimExtractor","_result$selectorResul","extractDomainAnalyzerDkimData","selectorResults","sr","_adaptExtractedCatego","_adaptInfoCategories","selector","statusSummary","adaptDomainAnalyzerSpfExtractor","_result$extractedItem3","extractDomainAnalyzerSpfData","adaptDmarcDomainExtractor","_result$extractedItem4","extractDmarcDomainData","adaptSpfDomainExtractor","_result$extractedItem5","extractSpfDomainData","adaptMtaStsExtractor","_result$infoItemsCate2","_result$extractedItem6","_t","_t2","_t3","_adaptInfoCategories2","_adaptInfoCategories3","_adaptInfoCategories4","_adaptInfoCategories5","extractMtaStsFullData","TITLE_TLS_RPT","TITLE_MTA_STS","TITLE_POLICY","TITLE_CERTIFICATE","infoTlsRpt","infoMtaSts","infoPolicy","infoCertificate","TITLE_TLS_RPT_EXTRACTED","TITLE_MTA_STS_EXTRACTED","TITLE_POLICY_EXTRACTED","extractedTlsRpt","extractedMtaSts","extractedPolicy","extractedTlsRptCategories","extractedMtaStsCategories","extractedItemsPolicy","toDataUri","encodeURIComponent","samePath","PLACEHOLDER_LIGHT","PLACEHOLDER_DARK","LogosWrapper","$isDark","LogoElementWrapper","$square","$size","round","num","decimals","Number","toFixed","getAspectRatio","decodeBase64","base64","binaryString","atob","len","bytes","Uint8Array","charCodeAt","LogoElement","svgUrl","square","isDark","aspectRatio","setAspectRatio","setUrl","setError","isLoaded","setIsLoaded","Image","onload","onerror","newUrl","uncompressLogo","backgroundImage","Logos","SVGLogo","startsWith","base64Data","compressedData","decompressedData","pako","inflate","utf8Decoder","TextDecoder","decodedString","decode","btoa","SignalCardBimi","extsecrep","areAllCollapsedProp","onCollapseAllProp","restProps","internalCollapsed","setInternalCollapsed","collapsed","bimi","adapterResult","isDeclinationToPublish","bimiRecordStatus","recordStatus","DECLINATION_TO_PUBLISH","_length","_bimi$svgErrors","_errors$length","_bimi$logo","_bimi$logo$errors","imageUrl","hasErrors","svgErrors","logo","errors","splice","_bimi$vmc","logoSrc","noIconIdx","findIndex","svgItem","sectionIds","introDescriptionContent","SignalCardDmarcDomain","_extsecrep$originator","originator","resolvedAreAllCollapsed","_cat$extractionBox","SignalCardSpfDomain","_jmap$extsecrep","setAreAllCollapsed","prev","handleComponentMount"],"mappings":"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E;AAClJ,IAAI,yEAAyE,EAAE,4FAA4F;AAC3K,GAAG;AACH,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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ACA;AACO,MAAMC,eAAe,GAAGC,MAAM,CAACC,GAAI,CAAA;AAC1C;AACA;AACA;AACA;AACA,mCAAA,EAAqCJ,cAAa,CAAA;AAClD,8BAAA,EAAgCC,eAAc,CAAA;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACO,MAAMI,gBAAgB,GAAGF,MAAM,CAACC,GAAI,CAAA;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACO,MAAME,gBAAgB,GAAGH,MAAM,CAACC,GAAI,CAAA;AAC3C;AACA,CAAC;;ACxDD;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAMJ,cAAY,GAAG,mEAAmE,CAAA;AACxF,MAAMC,eAAa,GAAG,mDAAmD,CAAA;AACzE,MAAMM,eAAa,GAAG,0DAA0D,CAAA;AAEzE,MAAMC,oBAAoB,GAAGL,MAAM,CAACC,GAAI,CAAA;AAC/C;AACA;AACA,CAAC,CAAA;AAEM,MAAMK,eAAe,GAAGN,MAAM,CAACC,GAAI,CAAA;AAC1C,mCAAA,EAAqCJ,cAAa,CAAA;AAClD;AACA;AACA,8BAAA,EAAgCC,eAAc,CAAA;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAA,EAAkCM,eAAc,CAAA;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAA;AAEM,MAAMG,iBAAiB,GAAGP,MAAM,CAACC,GAAI,CAAA;AAC5C;AACA;AACA,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACO,MAAMO,WAAW,GAAGR,MAAM,CAACC,GAAI,CAAA;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAA;AAEM,MAAMQ,WAAW,G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"}
|
|
1
|
+
{"version":3,"file":"SignalCardSpfDomain.js","sources":["../../src/components/signal-cards/cards/signal-card-styles.ts","../../src/components/signal-cards/hooks/useSignalCardTheme.tsx","../../src/components/signal-cards/hooks/withSignalCardTheme.tsx","../../../../node_modules/@redsift/signal-logic/dist/chunk-JN5BEW4U.js","../../src/components/signal-cards/intl/index.ts","../../src/components/signal-cards/hooks/useSignalCardFormatter.ts","../../src/components/signal-cards/utils/logger.ts","../../src/components/signal-cards/utils/resolveTranslation.ts","../../src/components/signal-cards/hooks/useSignalCardTranslation.ts","../../src/components/signal-cards/hooks/useCollapseController.ts","../../src/components/signal-cards/cards/SignalCardNormal/styles.tsx","../../src/components/signal-cards/cards/SignalCard/components/CardDescriptionStyles.tsx","../../src/components/signal-cards/cards/components/SignalCardButton.tsx","../../src/components/signal-cards/cards/SignalCardNormal/ExpandableDescription.tsx","../../src/components/signal-cards/cards/SignalCard/components/SignalCardSection.tsx","../../src/components/signal-cards/cards/SignalCard/components/InfoItemElements.tsx","../../src/components/signal-cards/cards/SignalCard/components/SignalCardInfoBox.tsx","../../src/components/signal-cards/components/ui/GlossaryTag/GlossaryTag.tsx","../../src/components/signal-cards/styles/styles.ts","../../src/components/signal-cards/components/glossary/glossary.tsx","../../src/components/signal-cards/utils/parse-glossary-markdown.tsx","../../src/components/signal-cards/cards/SignalCard/components/extraction-box.constants.ts","../../src/components/signal-cards/cards/SignalCard/components/InfoSectionStyles.tsx","../../src/components/signal-cards/components/ui/Checklist/Checklist.tsx","../../src/components/signal-cards/cards/SignalCardNormal/ChecklistRenderer.tsx","../../src/components/signal-cards/components/ui/CheckBox.tsx","../../src/components/signal-cards/utils/format-content.tsx","../../src/components/signal-cards/cards/SignalCardDmarc/DmarcPromoBanner.tsx","../../src/components/signal-cards/cards/SignalCardNormal/SignalCardNormal.tsx","../../src/components/signal-cards/hooks/useOnClickOutside.ts","../../src/components/signal-cards/components/ui/Portal/Portal.tsx","../../src/components/signal-cards/components/ui/Tooltip/Tooltip.tsx","../../src/components/signal-cards/components/ui/TooltipInPortal/TooltipInPortal.tsx","../../src/components/signal-cards/cards/SignalCardNormal/SignalCardExtractedItems.tsx","../../src/components/signal-cards/components/ui/WordHighlighter/WordHighlighter.tsx","../../src/components/signal-cards/components/charts/LazyChartSankey.tsx","../../src/components/signal-cards/cards/SignalCardFcrdns/styles.ts","../../src/components/signal-cards/adapters/structured-data-renderer.tsx","../../src/components/signal-cards/adapters/extractor-adapter.ts","../../src/components/signal-cards/components/ui/SVGLogo.tsx","../../src/components/signal-cards/cards/SignalCardBimi/SignalCardBimi.tsx","../../src/components/signal-cards/cards/SignalCardDmarcDomain/SignalCardDmarcDomain.tsx","../../src/components/signal-cards/cards/SignalCardSpfDomain/SignalCardSpfDomain.tsx"],"sourcesContent":["export const COLOR = {\n main: {\n green: 'var(--redsift-color-notifications-success-primary)',\n yellow: 'var(--redsift-color-notifications-warning-primary)',\n red: 'var(--redsift-color-notifications-error-primary)',\n blue: 'var(--redsift-color-notifications-info-primary)',\n white: 'var(--redsift-color-dark-components-text-primary)',\n black: '#3B3A58', // Grey-80 - primary body text\n warningOrange: '#f5a623', // Warning icon/accent color\n },\n grey: {\n darkest: '#201F36', // Grey-100 - card titles only\n darker: '#3B3A58', // Grey-80 - very dark text\n dark: '#55546D', // Grey-70 - dark secondary text\n medium: '#6E6D83', // Grey-60 - medium text, labels\n regular: '#9F9FAD', // Grey-50 - muted text\n light: '#D9D8DE', // Grey-30 - borders, dividers\n lighter: '#EAEAED', // Grey-20 - backgrounds\n lightest: '#f4f4f6', // Grey-10 - section backgrounds (Investigate)\n },\n};\n\nexport const FONT = {\n TYPE: {\n TEXT: '\"Open Sans\", sans-serif',\n HEADING: '\"Space Grotesk\", sans-serif',\n NUMBER: '\"Source Code Pro\", monospace',\n },\n};\n\n/**\n * Signal Card CSS Custom Properties\n *\n * These CSS variables provide theming for signal card components.\n * Design System mode uses DS tokens, Investigate mode uses custom values.\n *\n * Usage in styled-components:\n * ```tsx\n * const MyComponent = styled.div`\n * color: var(--sc-text-color);\n * font-family: var(--sc-font-body);\n * `;\n * ```\n */\nexport const SIGNAL_CARD_CSS_VARS = {\n // Text colors\n '--sc-text-color': 'var(--redsift-color-neutral-x-dark-grey)',\n '--sc-text-muted': 'var(--redsift-color-neutral-dark-grey)',\n '--sc-text-darkest': 'var(--redsift-color-neutral-x-dark-grey)',\n '--sc-text-heading': 'var(--redsift-color-neutral-x-dark-grey)',\n '--sc-text-secondary': 'var(--redsift-color-neutral-dark-grey)',\n\n // Background colors\n '--sc-bg-light': 'var(--redsift-color-neutral-x-light-grey)',\n '--sc-bg-lighter': 'var(--redsift-color-neutral-light-grey)',\n '--sc-bg-hover': 'var(--redsift-color-neutral-xx-light-grey)',\n '--sc-bg-selected': 'var(--redsift-color-neutral-x-light-grey)',\n '--sc-grey-background': 'var(--redsift-color-neutral-x-light-grey)',\n '--sc-code-bg': 'var(--redsift-color-neutral-x-light-grey)',\n\n // Border colors\n '--sc-border-color': 'var(--redsift-color-neutral-light-grey)',\n '--sc-border-color-light': 'var(--redsift-color-neutral-light-grey)',\n\n // Link colors\n '--sc-link-color': 'var(--redsift-color-notifications-info-primary)',\n\n // Warning/status colors\n '--sc-warning-color': 'var(--redsift-color-notifications-warning-primary)',\n\n // Fonts - Use Design System typography tokens with Poppins fallbacks\n '--sc-font-body': \"var(--redsift-typography-body-font-family, 'Poppins', sans-serif)\",\n '--sc-font-heading': \"var(--redsift-typography-h1-font-family, 'Poppins', sans-serif)\",\n '--sc-font-mono': \"var(--redsift-typography-font-family-source-code-pro, 'Source Code Pro', monospace)\",\n '--sc-font-code': \"var(--redsift-typography-font-family-source-code-pro, 'Source Code Pro', monospace)\",\n} as const;\n\n/**\n * Investigate-specific overrides for Signal Card CSS variables.\n * Applied when useInvestigateColors is true.\n */\nexport const INVESTIGATE_CSS_VARS = {\n // Text colors\n '--sc-text-color': COLOR.grey.darker,\n '--sc-text-muted': COLOR.grey.medium,\n '--sc-text-darkest': COLOR.grey.darkest,\n '--sc-text-heading': COLOR.grey.darkest,\n '--sc-text-secondary': COLOR.grey.darker,\n\n // Background colors\n '--sc-bg-light': COLOR.grey.lightest,\n '--sc-bg-lighter': COLOR.grey.lighter,\n '--sc-bg-hover': '#f8f9fc',\n '--sc-bg-selected': COLOR.grey.lightest,\n '--sc-grey-background': COLOR.grey.lightest,\n '--sc-code-bg': COLOR.grey.lightest,\n\n // Override Design System neutral grey for section backgrounds (Grey-10)\n '--redsift-color-neutral-x-light-grey': COLOR.grey.lightest,\n\n // Border colors\n '--sc-border-color': COLOR.grey.lighter,\n '--sc-border-color-light': COLOR.grey.lighter,\n\n // Link colors\n '--sc-link-color': COLOR.main.blue,\n\n // Warning/status colors\n '--sc-warning-color': COLOR.main.warningOrange,\n\n // Fonts\n '--sc-font-body': FONT.TYPE.TEXT,\n '--sc-font-heading': FONT.TYPE.HEADING,\n '--sc-font-mono': FONT.TYPE.NUMBER,\n '--sc-font-code': '\"Source Code Pro\", monospace',\n} as const;\n\n/**\n * Generates CSS variable declarations as a style object.\n * Used by SignalCardThemeProvider to inject theme-appropriate variables.\n */\nexport const getThemeCSSVars = (useInvestigateColors: boolean): Record<string, string> => {\n return useInvestigateColors ? INVESTIGATE_CSS_VARS : SIGNAL_CARD_CSS_VARS;\n};\n","import React, { createContext, useContext, ReactNode, useMemo } from 'react';\nimport { getThemeCSSVars } from '../cards/signal-card-styles';\n\n/**\n * Signal Cards Theme Configuration\n *\n * This context provides theme configuration to signal card components,\n * eliminating the need to pass `useInvestigateColors` through every component layer.\n */\n\nexport interface SignalCardTheme {\n /**\n * Whether to use Investigate-specific colors and fonts.\n * When true, applies custom fonts and color palette for the Investigate tool.\n */\n useInvestigateColors: boolean;\n}\n\nconst defaultTheme: SignalCardTheme = {\n useInvestigateColors: false,\n};\n\nconst SignalCardThemeContext = createContext<SignalCardTheme>(defaultTheme);\n\nexport interface SignalCardThemeProviderProps {\n children: ReactNode;\n /**\n * Theme configuration to apply to all signal card descendants\n */\n theme?: Partial<SignalCardTheme>;\n}\n\n/**\n * Provider component for Signal Card theming.\n *\n * Wrap signal card components with this provider to set theme options\n * without passing props through every component level.\n *\n * This provider injects CSS custom properties (--sc-*) that components use for styling.\n *\n * @example\n * ```tsx\n * <SignalCardThemeProvider theme={{ useInvestigateColors: true }}>\n * <SignalCardList signals={signals} />\n * </SignalCardThemeProvider>\n * ```\n */\nexport const SignalCardThemeProvider: React.FC<SignalCardThemeProviderProps> = ({ children, theme = {} }) => {\n const mergedTheme: SignalCardTheme = useMemo(\n () => ({\n ...defaultTheme,\n ...theme,\n }),\n [theme]\n );\n\n // Generate CSS variable overrides based on theme\n const cssVars = useMemo(() => getThemeCSSVars(mergedTheme.useInvestigateColors), [mergedTheme.useInvestigateColors]);\n\n return (\n <SignalCardThemeContext.Provider value={mergedTheme}>\n <div style={cssVars as React.CSSProperties}>{children}</div>\n </SignalCardThemeContext.Provider>\n );\n};\n\nSignalCardThemeProvider.displayName = 'SignalCardThemeProvider';\n\n/**\n * Hook to access the current signal card theme.\n *\n * Components can use this hook to access theme configuration\n * without requiring explicit props.\n *\n * @example\n * ```tsx\n * const { useInvestigateColors } = useSignalCardTheme();\n * ```\n */\nexport const useSignalCardTheme = (): SignalCardTheme => {\n return useContext(SignalCardThemeContext);\n};\n\n/**\n * Hook that combines prop value with context value.\n * Prop value takes precedence over context when explicitly provided.\n *\n * Components can receive useInvestigateColors via props or context.\n *\n * @param propValue - Explicitly passed prop value (takes precedence)\n * @returns Resolved theme configuration\n */\nexport const useResolvedTheme = (propValue?: boolean): SignalCardTheme => {\n const contextTheme = useSignalCardTheme();\n\n return {\n ...contextTheme,\n useInvestigateColors: propValue ?? contextTheme.useInvestigateColors,\n };\n};\n","import React, { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef, ComponentRef, ComponentType } from 'react';\n\nimport { useResolvedTheme } from './useSignalCardTheme';\n\nexport type ThemeOverrideProps = {\n /** Optional override for Investigate color palette usage. */\n useInvestigateColors?: boolean;\n};\n\n/**\n * Higher-order component that injects the resolved theme value into any signal card component.\n * Consumers can still override `useInvestigateColors` via props, but the surrounding\n * `SignalCardThemeProvider` now automatically supplies the default.\n */\nexport function withSignalCardTheme<C extends ComponentType<any>>(Component: C): C {\n type Props = ComponentPropsWithoutRef<C> & ThemeOverrideProps;\n type Ref = ComponentRef<C>;\n\n const Wrapped = forwardRef<Ref, Props>((props, ref) => {\n const { useInvestigateColors: override, ...rest } = props;\n const { useInvestigateColors } = useResolvedTheme(override);\n\n const ThemedComponent = Component as ComponentType<any>;\n\n return (\n <ThemedComponent\n {...(rest as ComponentPropsWithoutRef<C>)}\n useInvestigateColors={useInvestigateColors}\n ref={ref as any}\n />\n );\n });\n\n const componentName = Component.displayName ?? Component.name ?? 'Component';\n Wrapped.displayName = `WithSignalCardTheme(${componentName})`;\n\n // Preserve common static properties for backward compatibility without overriding the wrapper render method\n const STATIC_KEYS: Array<'propTypes' | 'defaultProps' | 'contextTypes' | 'contextType'> = [\n 'propTypes',\n 'defaultProps',\n 'contextTypes',\n 'contextType',\n ];\n\n STATIC_KEYS.forEach((key) => {\n if (key in Component) {\n (Wrapped as any)[key] = (Component as any)[key];\n }\n });\n\n return Wrapped as unknown as C;\n}\n","// src/i18n/glossary-labels.ts\nvar GLOSSARY_LABELS = {\n // FCrDNS\n \"sender-ip\": \"Sender IP\",\n ehlo: \"EHLO domain\",\n \"ptr-record\": \"PTR record\",\n \"a-record\": \"A record\",\n // SPF\n spf: \"SPF\",\n \"spf-record\": \"SPF Record\",\n \"spf-domain\": \"SPF Domain\",\n \"spf-alignment\": \"aspf=\",\n // DKIM\n dkim: \"DKIM\",\n \"dkim-signing-domain\": \"DKIM Signing Domain\",\n \"dkim-selector\": \"DKIM Selector\",\n \"dkim-signature\": \"DKIM Signature\",\n \"dkim-algorithm\": \"Key Algorithm\",\n canonicalization: \"Canonicalization\",\n \"signed-headers\": \"Signed Headers\",\n \"signer-domain\": \"DKIM Signing Domain\",\n \"key-length\": \"Key Length\",\n ttl: \"TTL\",\n \"dkim-alignment\": \"adkim=\",\n // DMARC\n from: \"From Domain\",\n \"return-path\": \"Return Path\",\n \"dmarc-policy\": \"DMARC Policy\",\n pct: \"pct=\",\n rua: \"rua=\",\n ruf: \"ruf=\",\n \"subdomain-policy\": \"sp=\",\n dmarc: \"DMARC\",\n // TLS\n tls: \"TLS\",\n ssl: \"SSL\",\n \"cipher-suite\": \"Cipher suite\",\n // DNS records\n \"txt-record\": \"TXT Record\",\n \"cname-record\": \"CNAME Record\",\n // BIMI\n \"bimi-record\": \"BIMI Record\",\n \"dmarc-compliant\": \"DMARC Compliant\",\n svg: \"SVG\",\n vmc: \"VMC\",\n cmc: \"CMC\",\n itag: \"I-TAG\",\n atag: \"A-TAG\",\n // MTA-STS\n \"tls-rpt-record\": \"TLS-RPT Record\",\n \"mta-sts-record\": \"MTA-STS Record\",\n \"mta-sts-policy-file\": \"MTA-STS Policy File\",\n \"mta-file-version\": \"version=\",\n \"mta-file-mode\": \"mode=\",\n \"mta-file-mx\": \"mx=\",\n \"mta-file-max-age\": \"max_age=\",\n \"mta-sts-certificate\": \"MTA-STS SSL Certificate\",\n \"mta-sts-certificate-expiry\": \"expiry=\"\n};\n\n// src/i18n/extractor-strings.ts\nvar EXTRACTOR_STRINGS = {\n \"en-US\": {\n \"card.amp.align-dkim-fail_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) and [](FROM#:glossary) are not aligned. The policy is [{dkimPolicy}](DKIM_ALIGNMENT#:glossary).\",\n \"card.amp.align-dkim_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) and [](FROM#:glossary) are aligned. The policy is [{dkimPolicy}](DKIM_ALIGNMENT#:glossary).\",\n \"card.amp.dkim-failed_md\": \"**[](DKIM#:glossary) authentication failed.**\",\n \"card.amp.dkim-passed_md\": \"**[](DKIM#:glossary) authentication passed.**\",\n \"card.amp.spf-failed_md\": \"**[](SPF#:glossary) authentication failed.**\",\n \"card.amp.spf-passed_md\": \"**[](SPF#:glossary) authentication passed.**\",\n \"card.dkim.canonicalization-simple_md\": \"The [](CANONICALIZATION#:glossary) {whichPart} is set to `simple`. This can lead to problems when verifying the email signature. We recommend setting it to `relaxed` for header and body. [Learn more](https://community.redsift.com/s/article/000001204) in our knowledge base.\",\n \"card.dkim.code-eval-failed_md\": \"**The given code `{code}` can not be evaluated.**\",\n \"card.dkim.dkim-key-length-warning\": \"The length of the RSA public key should be at least 1024 bits to conform with current security standards. If it is shorter, some providers (e.g. Google) may flag the DKIM verification test as failed.\",\n \"card.dkim.error_md\": \"DKIM verification status\",\n \"card.dkim.error_md_fail\": \"The message has a valid signature, but it does not match the signature of the sending domain. This probably means that the message was modified somewhere along the way.\",\n \"card.dkim.error_md_neutral\": \"The message was signed but the signature or signatures contained syntax errors.\",\n \"card.dkim.error_md_none\": \"The message was not signed.\",\n \"card.dkim.error_md_outdated_algorithm\": \"The message was signed with a key using the older, insecure RSA-{algorithm} algorithm.\",\n \"card.dkim.error_md_pass\": \"The message was signed and passed verification tests.\",\n \"card.dkim.error_md_permerror\": \"The signature (or some part of it) was missing from the received message. This indicates that either the email's signature header is incorrectly formatted or it has been modified after being sent.\",\n \"card.dkim.error_md_policy\": \"The message was signed, but some aspect of the signature or signatures was not accepted.\",\n \"card.dkim.error_md_temperror\": \"There was a short-term problem verifying the email signature. This error is temporary, so please send the email again later.\",\n \"card.dkim.error_simple_canonicalization_md\": \"Simple canonicalization detected\",\n \"card.dkim.error_simple_canonicalization_md_policy\": \"**The message has a valid signature, but it does not match the signature of the sending domain.**\\n\\n\\n\\n**Please note** that your email sending service is using `simple` [](CANONICALIZATION#:glossary) for email headers, which is not recommended and can falsify the result of this [](DKIM#:glossary) check. See below on how to change your setup to the recommended way.\",\n \"card.dkim.eval-error-record-not-found_md\": \"**A [](DKIM_SIGNATURE_HEADER#:glossary) is not present in your email.**\",\n \"card.dkim.eval-error-record-not-found_subtext_md\": \"Please configure DKIM for your email sending service to start signing emails. Our [knowledge base](https://community.redsift.com/s/global-search/dkim) provides instructions to setup DKIM for many providers.\",\n \"card.dkim.eval-error-validation-error_md\": \"**The signature verification failed.**\",\n \"card.dkim.eval-error-validation-error_subtext_md\": \"This is the raw error:\\n\\n```{error}```\",\n \"card.dkim.failed_md\": \"**[](DKIM#:glossary) evaluation failed.**\",\n \"card.dkim.invalid-txt-record-published-selector_md\": \"Empty or invalid [](TXT_RECORD#:glossary) published for the selector `{fullSelector}`.\",\n \"card.dkim.invalid_md\": \"**[](DKIM#:glossary) status is invalid.**\",\n \"card.dkim.no-dkim-email-header_md\": \"No [](DKIM_SIGNATURE_HEADER#:glossary)\",\n \"card.dkim.no-txt-record-published-selector_md\": \"No [](TXT_RECORD#:glossary) published for the selector `{fullSelector}`.\",\n \"card.dkim.not-present_md\": \"Not present\",\n \"card.dkim.passed_md\": \"**[](DKIM#:glossary) evaluation passed.**\",\n \"card.dkim.prompt-dkim-txt-record-publish_md\": \"Please publish a valid [](TXT_RECORD#:glossary) in your DNS for the selector.\",\n \"card.dkim.recommend-ttl-max-600_md\": \"We recommend not setting the TTL value higher than 600 seconds.\",\n \"card.dkim.txt-record-published-on-dkim-url_md\": \"[](TXT_RECORD#:glossary) published on `{selector}._domainkey.{signerDomain}`\",\n \"card.dkim.txt-record-ttl-600-warning_md\": \"The time-to-live (TTL) for the [](TXT_RECORD#:glossary) is higher then 600 seconds. When updating the record DNS servers can still show the old value for the TTL duration before they update the value. The impact is that you might have to wait for the change to take effect for this amount of time.\",\n \"card.dkim.unavailable-try-later_md\": \"Please try sending another email later.\",\n \"card.dkim.unavailable_md\": \"**[](DKIM#:glossary) evaluation temporarily unavailable.**\",\n \"card.dmarc.domain-aligned\": \"The domain is aligned with the From Domain. It can contribute to passing DMARC.\",\n \"card.dmarc.domain-not-aligned\": \"The domain is not aligned with the From Domain. It cannot contribute to passing DMARC.\",\n \"card.dmarc.error.dns-timeout\": \"DNS timeout when looking up DMARC record\",\n \"card.dmarc.error.invalid-pct-value\": \"Pct value must be between 0 and 100\",\n \"card.dmarc.error.invalid-policy-value\": \"Invalid policy value in DMARC record\",\n \"card.dmarc.error.invalid-rua-format\": \"Invalid rua format - must be mailto: URI\",\n \"card.dmarc.error.invalid-version\": \"Invalid DMARC version - must be DMARC1\",\n \"card.dmarc.error.misplaced-policy\": \"DMARC policy located at wrong subdomain\",\n \"card.dmarc.error.nxdomain\": \"NXDOMAIN - domain does not exist\",\n \"card.dmarc.error.policy-not-found\": \"DMARC policy not found\",\n \"card.dmarc.error.syntax-error\": \"Syntax error in DMARC record\",\n \"card.dmarc.error.unknown\": \"Unknown error\",\n \"card.dmarc.error.unrecognized-tag\": \"Unrecognized DMARC tag found\",\n \"card.dmarc.error_md\": \"\",\n \"card.dmarc.error_md_none\": \"**No DMARC policy record is published.**\",\n \"card.dmarc.error_md_pass\": \"**DMARC validation passed.**\",\n \"card.dmarc.error_md_permerror\": \"**A permanent error occured during DMARC evaluation.**\",\n \"card.dmarc.error_md_temperror\": \"**There was a temporary error evaluating the DMARC policy.**\",\n \"card.dnssec.domain-protected_fail\": \"The Domain is not protected by DNSSEC.\",\n \"card.dnssec.domain-protected_pass\": \"The Domain is protected by DNSSEC.\",\n \"card.fcrdns.ehlo-match-ptr-all_md\": \"The [](EHLO#:glossary) matches the [](PTR_RECORD#:glossary) of the [](A_RECORD#:glossary) in both directions.\",\n \"card.fcrdns.ehlo-no-match-ptr-all_md\": \"The [](EHLO#:glossary) does not match the [](PTR_RECORD#:glossary) of the [](A_RECORD#:glossary) in both directions.\",\n \"card.fcrdns.ehlo-not-valid_md\": \"The [](EHLO#:glossary) is not a valid domain. For a better security rating we recommend configuring your email sending service so that the domain is correctly set.\",\n \"card.fcrdns.no-ehlo_md\": \"[](EHLO#:glossary) is not set, invalid, or points to a non-public IP, so the tests have been skipped. We recommend configuring your email sending service to correctly set the [](EHLO#:glossary) as it will enhance your security rating.\",\n \"card.fcrdns.sender-ip-match-a-ehlo-all_md\": \"The [](SENDER_IP#:glossary) matches the [](A_RECORD#:glossary) of the [](EHLO#:glossary) in both directions.\",\n \"card.fcrdns.sender-ip-match-ptr-all_md\": \"The [](SENDER_IP#:glossary) matches the [](A_RECORD#:glossary) of the [](PTR_RECORD#:glossary) in both directions.\",\n \"card.fcrdns.sender-ip-no-match-ehlo-all_md\": \"The [](SENDER_IP#:glossary) does not match the [](A_RECORD#:glossary) of the [](EHLO#:glossary).\",\n \"card.fcrdns.sender-ip-no-match-ptr-all_md\": \"The [](SENDER_IP#:glossary) does not match the [](A_RECORD#:glossary) of the [](PTR_RECORD#:glossary) in both directions.\",\n \"card.fcrdns.sender-ip-ptr-record-no-match-ehlo_md\": \"The [](SENDER_IP#:glossary)'s [](PTR_RECORD#:glossary) does not match the [](EHLO#:glossary).\",\n \"card.spf.eval-error-infinite-recursion-detected_md\": \"**Infinite lookup recursion detected**\",\n \"card.spf.eval-error-infinite-recursion-detected_subtext_md\": \"One of your SPF record's `include:` statements is causing an infinite lookup recursion. Please remove the `include:` causing the recursion to make the SPF record work.\",\n \"card.spf.eval-error-limit-exceeded_md\": \"**Too many DNS lookups**\",\n \"card.spf.eval-error-limit-exceeded_subtext_md\": \"The SPF specification limits the number of DNS lookups to 10, which you are exceeding and which can cause SPF authentication to fail.\\n\\nPlease have at [this knowledge base article](https://community.redsift.com/s/article/000001129) for a solution to this problem.\",\n \"card.spf.eval-error-record-not-found_md\": \"**No SPF record found**\",\n \"card.spf.eval-error-record-not-found_subtext_md\": \"Please add your SPF [](TXT_RECORD#:glossary) in your DNS.\\n\\nOur [knowledge base](https://community.redsift.com/s/global-search/SPF%20DKIM) provides instructions to setup SPF for many providers.\",\n \"card.spf.eval-error-too-many-spf-records_md\": \"**Too many SPF records found**\",\n \"card.spf.eval-error-too-many-spf-records_md_subtext\": \"Please use a single SPF entry only.\",\n \"card.spf.eval-error-wrong-syntax_md\": \"**The SPF [FULL](TXT_RECORD#:glossary) has a syntax error**\",\n \"card.spf.eval-error-wrong-syntax_subtext_md\": \"Please check if it has the correct syntax and update the record in your DNS. One possible reason is a copy & paste error of the record content.\",\n \"card.spf.eval-failed_md\": \"**[](SPF#:glossary) evaluation failed**\",\n \"card.spf.eval-failed_md_subtext\": \"The sender is not authorized to send email on your behalf.\",\n \"card.spf.eval-neutral_md\": \"**The SPF check did not assert if the sender is authorized**\",\n \"card.spf.eval-not-possible_md\": \"**SPF evaluation not possible**\",\n \"card.spf.eval-not-possible_md_subtext-entry\": \"Please contact your DNS administrator to review the SPF [](TXT_RECORD#:glossary):\",\n \"card.spf.eval-not-possible_md_subtext-error\": \"Please contact your DNS administrator to investigate the error(s):\",\n \"card.spf.eval-passed_md\": \"**[](SPF#:glossary) check passed**\",\n \"card.spf.eval-soft-failed_md\": \"**[](SPF#:glossary) evaluation soft fail**\",\n \"card.spf.eval-soft-failed_md_subtext\": \"The sender is probably not authorized, but no stronger policy was published.\",\n \"card.spf.unavailable_md\": \"**[](SPF#:glossary) evaluation temporarily unavailable**\",\n // BIMI keys\n \"card.bimi.cert-forbidden_md\": \"Your certificate appears to be behind an anti-bot protection system. Find out more and how to resolve the issue [here](https://knowledge.ondmarc.redsift.com/en/articles/8047013-ondmarc-cannot-fetch-my-bimi-logo-or-certificate)\",\n \"card.bimi.could-not-fetch_md\": \"Failed to fetch **[](BIMI_RECORD#:glossary)**\",\n \"card.bimi.dmarc-compliance-title\": \"DMARC compliance\",\n \"card.bimi.dmarc-compliance-pass_md\": \"Domain is DMARC compliant\",\n \"card.bimi.dmarc-compliance-fail_md\": \"Domain is not DMARC compliant\",\n \"card.bimi.errors.bimi-error-cert-not-valid\": \"Certificate is not valid\",\n \"card.bimi.errors.bimi-error-incorrect-v\": \"Record v value should be BIMI1;\",\n \"card.bimi.errors.bimi-error-invalid-a\": \"Record a value needs to be a valid URL\",\n \"card.bimi.errors.bimi-error-invalid-l\": \"Record l value needs to be a valid URL\",\n \"card.bimi.errors.bimi-error-invalid-record\": \"BIMI record is invalid\",\n \"card.bimi.errors.bimi-error-missing-a\": \"Record a value needs to be defined\",\n \"card.bimi.errors.bimi-error-missing-l\": \"Record l value needs to be defined\",\n \"card.bimi.errors.bimi-error-missing-v\": \"Record v value needs to be defined\",\n \"card.bimi.errors.bimi-error-unknown\": \"unknown error\",\n \"card.bimi.errors.bimi-error-unsupported-values\": \"Record v value needs to be defined\",\n \"card.bimi.logoErrors.invalid-svg_md\": \"**[](VMC#:glossary)** Invalid SVG. Logo from certificate cannot be converted to a valid SVG.\",\n \"card.bimi.logoErrors.invalid-svg-attribute_md\": \"**[](VMC#:glossary)** Invalid SVG attribute found.\",\n \"card.bimi.logoErrors.invalid-svg-attribute-xy_md\": \"**[](VMC#:glossary)** Invalid attribute. **x** and/or **y** are not allowed\",\n \"card.bimi.logoErrors.invalid-svg-content-type_md\": \"**[](VMC#:glossary)** Invalid SVG content-type. Should be **image/svg+xml**\",\n \"card.bimi.logoErrors.invalid-svg-element-foreign-object_md\": \"**[](VMC#:glossary)** Invalid SVG element **foreing-object** found.\",\n \"card.bimi.logoErrors.invalid-svg-element-image_md\": \"**[](VMC#:glossary)** Invalid SVG element **image** found.\",\n \"card.bimi.logoErrors.invalid-svg-element-link_md\": \"**[](VMC#:glossary)** Invalid SVG element **link** found.\",\n \"card.bimi.logoErrors.invalid-svg-element-script_md\": \"**[](VMC#:glossary)** Invalid SVG element **script** found.\",\n \"card.bimi.logoErrors.invalid-svg-element-style_md\": \"**[](VMC#:glossary)** Invalid SVG element **style** found.\",\n \"card.bimi.logoErrors.invalid-svg-id-name_md\": \"**[](VMC#:glossary)** Attribute id has an invalid name.\",\n \"card.bimi.logoErrors.invalid-svg-missing-title_md\": \"**[](VMC#:glossary)** Missing **title** element in svg.\",\n \"card.bimi.logoErrors.invalid-svg-profile_md\": \"**[](VMC#:glossary)** Invalid SVG profile. Should be **tiny-ps**\",\n \"card.bimi.logoErrors.invalid-svg-reference_md\": \"**[](VMC#:glossary)** Invalid reference in svg.\",\n \"card.bimi.logoErrors.invalid-svg-root-element_md\": \"**[](VMC#:glossary)** Invalid root element. Should be **svg**\",\n \"card.bimi.logoErrors.invalid-svg-size_md\": \"**[](VMC#:glossary)** Invalid size. SVG must be up to **32k**\",\n \"card.bimi.logoErrors.invalid-svg-version_md\": \"**[](VMC#:glossary)** Invalid SVG version. Should be **1.2**\",\n \"card.bimi.logoErrors.invalid-xml-12_md\": '**[](VMC#:glossary)** Unsupported XML version \"1.2\". Should be **1.0**',\n \"card.bimi.logoErrors.logo-and-evidence-mismatch_md\": \"**[](VMC#:glossary)** Logo on l record and on certificate do not match\",\n \"card.bimi.logoErrors.logo-extract-error_md\": \"**[](VMC#:glossary)** Error extracting logo\",\n \"card.bimi.logoErrors.unknown-svg-error_md\": \"**[](VMC#:glossary)** Unknown SVG error\",\n \"card.bimi.no-txt-published-policy-on-domain_md\": \"No [](TXT_RECORD#:glossary) published on `{policyDomain}`\",\n \"card.bimi.pemErrors.cert-bad-date_md\": \"**[](VMC#:glossary)** Certificate has expired\",\n \"card.bimi.pemErrors.cert-bad-signature_md\": \"**[](VMC#:glossary)** Certificate has a bad signature\",\n \"card.bimi.pemErrors.cert-not-file_md\": \"**[](VMC#:glossary)** Certificate is not a file\",\n \"card.bimi.pemErrors.cert-not-found_md\": \"**[](VMC#:glossary)** Certificate not found\",\n \"card.bimi.pemErrors.cert-not-https_md\": \"**[](VMC#:glossary)** Certificate does not use the HTTPS protocol\",\n \"card.bimi.pemErrors.cert-not-pem_md\": \"**[](VMC#:glossary)** Certificate is not a PEM file\",\n \"card.bimi.pemErrors.cert-not-url_md\": \"**[](VMC#:glossary)** Certificate is not an url\",\n \"card.bimi.pemErrors.cert-not-valid_md\": \"**[](VMC#:glossary)** Certificate is not valid\",\n \"card.bimi.pemErrors.cert-unknown-error_md\": \"**[](VMC#:glossary)** Certificate has an unknown error\",\n \"card.bimi.record-declination_md\": \"**[](BIMI_RECORD#:glossary)** Present and containing a **valid declination to publish**\",\n \"card.bimi.record-failed_md\": \"**[](BIMI_RECORD#:glossary)** **Present** but with errors\",\n \"card.bimi.record-info_md\": \"BIMI requires domains to be DMARC compliant, which means a minimum DMARC policy of **p=quarantine at pct=100 (and sp <> none)** [Learn how to fix it](https://community.redsift.com/s/article/000001196)\",\n \"card.bimi.record-invalid_md\": \"**[](BIMI_RECORD#:glossary)** **is invalid**\",\n \"card.bimi.record-missing_md\": \"**[](BIMI_RECORD#:glossary)** **Missing.** [Learn how to fix it](https://community.redsift.com/s/article/000001130)\",\n \"card.bimi.record-no-cert_md\": \"**[](BIMI_RECORD#:glossary)** **Certificate not found**\",\n \"card.bimi.record-passed_md\": \"**[](BIMI_RECORD#:glossary)** **Present and compliant**\",\n \"card.bimi.record-status-title\": \"BIMI record status\",\n \"card.bimi.record-svg-added-from-itag-invalid_md\": \"**[](BIMI_RECORD#:glossary)** image with errors from **[](ITAG#:glossary)** [svg-url]({url})\",\n \"card.bimi.record-svg-added-from-itag-valid_md\": \"**[](BIMI_RECORD#:glossary)** successfully added from **[](ITAG#:glossary)** [svg-url]({url})\",\n \"card.bimi.record-title\": \"BIMI record\",\n \"card.bimi.record-unknown-error_md\": \"**[](BIMI_RECORD#:glossary)** **Present with errors**\",\n \"card.bimi.safe-svg-title\": \"Safe SVG\",\n \"card.bimi.svg-error-fallback_md\": \"**[](VMC#:glossary)** {error}\",\n \"card.bimi.svg-missing-title_md\": \"**[](BIMI_RECORD#:glossary) Logo missing:** Logo not found on BIMI Record\",\n \"card.bimi.txt-published-policy-on-domain_md\": \"[](TXT_RECORD#:glossary) published on `{policyDomain}`\",\n \"card.bimi.vmc-correctly-title_md\": \"**[](VMC#:glossary)** certificate from **[](ATAG#:glossary)** [pem-url]({url}) is valid\",\n \"card.bimi.vmc-invalid-title_md\": \"**[](VMC#:glossary)** certificate from **[](ATAG#:glossary)** [pem-url]({url}) is invalid\",\n \"card.bimi.vmc-missing-title_md\": \"**[](VMC#:glossary) certificate missing (currently optional)** [Learn how to add it](https://community.redsift.com/s/article/000001130)\",\n \"card.bimi.vmc-not-vmc-title_md\": \"**[](VMC#:glossary)** certificate from **[](ATAG#:glossary)** [pem-url]({url}) is not a VMC\",\n \"card.bimi.vmc-title\": \"VMC Certificate\",\n \"card.bimi.vmc.assertionMark_md\": \"**Assertion Mark:** {assertionMark}\",\n \"card.bimi.vmc.expired-date_md\": \"Expired on {date}\",\n \"card.bimi.vmc.expiry-date_md\": \"**Expires on:** {date} ({daysLeft} days left)\",\n \"card.bimi.vmc.issuer_md\": \"**Issuer: {issuer}**\",\n \"card.bimi.vmc.trademarkAuthority_md\": \"**Trademark Authority: {trademarkAuthority}**\",\n \"card.bimi.vmc.valid-for-domain_md\": \"**Valid for domains:** `{domains}`\",\n // BIMI section titles\n \"section-titles.bimi-domain\": \"DMARC Domains\",\n \"section-titles.bimi-policy\": \"Your BIMI Policy\",\n // Domain Analyzer DKIM keys\n \"card.dkim.cname-record-published-on-dkim-url_md\": \"[](CNAME_RECORD#:glossary) published on `{selector}._domainkey.{signerDomain}`\",\n \"card.dkim.no-selectors-found_md\": \"No DKIM selectors were found for this domain. Please add your DKIM selectors to start monitoring.\",\n \"card.dkim.no-txt-record-published-at_md\": \"No [](TXT_RECORD#:glossary) published at `{domain}`.\",\n \"card.dkim.selector\": \"Selector\",\n \"card.dkim.selector-statuses.fail_one\": \"{count} selector failed\",\n \"card.dkim.selector-statuses.fail_other\": \"{count} selectors failed\",\n \"card.dkim.selector-statuses.pass_one\": \"{count} selector passed\",\n \"card.dkim.selector-statuses.pass_other\": \"{count} selectors passed\",\n \"card.dkim.selector-statuses.warning_one\": \"{count} selector with warnings\",\n \"card.dkim.selector-statuses.warning_other\": \"{count} selectors with warnings\",\n \"card.dkim.title\": \"DKIM Selector\",\n // Domain Analyzer DKIM section titles\n \"section-titles.dkim-selector-records\": \"DKIM DNS records\",\n \"section-titles.dkim-selector-details\": \"Key configuration\",\n \"section-titles.dkim-policy\": \"Your DKIM Policy\",\n // Domain Analyzer DKIM issue status detail keys\n \"statusDetails.no-dkim-public-key\": \"No DKIM public key found\",\n \"statusDetails.invalid-dkim-public-key\": \"DKIM public key is invalid\",\n \"statusDetails.invalid-dkim-algorithm\": \"Invalid DKIM algorithm\",\n \"statusDetails.invalid-dkim-version\": \"Invalid DKIM version\",\n \"statusDetails.missing-dkim-version\": \"DKIM version is missing\",\n \"statusDetails.weak-dkim\": \"DKIM key is weak (less than 1024 bits)\",\n \"statusDetails.malformed-dkim\": \"DKIM record is malformed\",\n \"statusDetails.missing-dkim-v\": \"DKIM version tag is missing\",\n \"statusDetails.duplicate-dkim\": \"Duplicate DKIM record found\",\n \"statusDetails.no-dkim\": \"No DKIM record found\",\n \"statusDetails.missing-dkim\": \"DKIM record is missing\",\n \"statusDetails.servfail-dkim\": \"DNS server failure when looking up DKIM record\",\n // Domain Analyzer SPF keys\n \"card.spf.passed_md\": \"**[](SPF#:glossary) authentication passed.**\",\n \"card.spf.warnings_md\": \"**[](SPF#:glossary) authentication detected problems:**\",\n \"card.spf.failed_md\": \"**[](SPF#:glossary) authentication failed.**\",\n \"card.spf.has-dynamic-spf\": \"Using Dynamic SPF\",\n \"card.spf.dns-count-lookup_md\": \"{count}/10 SPF lookups\",\n \"card.spf.dns-count-lookup-greater-10_md\": \"**SPF lookups are exceeding the limit of 10, which results in an SPF fail. Check our Dynamic SPF feature for a solution!**\",\n \"card.spf.dns-count-lookup-greater-10_md_no-dynamic-services\": \"**SPF lookups are exceeding the limit of 10, which results in an SPF fail. Check our Dynamic SPF feature for a solution!**\",\n \"card.spf.dns-count-lookup-greater-10_md_has-external-includes\": \"**SPF lookups are exceeding the limit of 10, which results in an SPF fail. Consider using Dynamic SPF to consolidate your includes.**\",\n \"card.spf.dns-count-lookup-greater-10_md_no-external-includes\": \"**SPF lookups are exceeding the limit of 10, which results in an SPF fail.**\",\n \"card.spf.dns-count-lookup-warning_md\": \"SPF lookup count is nearing the limit of 10.\",\n \"card.spf.dns-count-lookup-warning_md_no-dynamic-services\": \"SPF lookup count is nearing the limit of 10. Check our Dynamic SPF feature for a solution!\",\n \"card.spf.dns-count-lookup-warning_md_has-external-includes\": \"SPF lookup count is nearing the limit of 10. Consider using Dynamic SPF to consolidate your includes.\",\n \"card.spf.dns-count-lookup-warning_md_no-external-includes\": \"SPF lookup count is nearing the limit of 10.\",\n \"card.spf.dns-count-void-lookups_md\": \"{count}/2 Void lookups\",\n \"card.spf.txt-published-policy-on-domain_md\": \"[](TXT_RECORD#:glossary) published on `{policyDomain}`\",\n \"card.spf.no-txt-published-policy-on-domain_md\": \"No [](TXT_RECORD#:glossary) published on `{policyDomain}`\",\n \"card.subdo.found-warning_one\": \"{count} subdomain mailer detected\",\n \"card.subdo.found-warning_other\": \"{count} subdomain mailers detected\",\n \"card.subdo.button-name\": \"View in SPF Checker\",\n \"card.subdo.spf-subdo-poisoned_md_one\": \"**{count}** compromised include detected\",\n \"card.subdo.spf-subdo-poisoned_md_other\": \"**{count}** compromised includes detected\",\n \"card.threat-int.from-domain.found_md\": \"[](FROM#:glossary) {code} was found in {length} database. Threats listed below:\",\n \"card.threat-int.from-domain.not-found_md\": \"[](FROM#:glossary) {code} was **not** found in any database.\",\n \"card.threat-int.sender-ip.found_md\": \"[](SENDER_IP#:glossary) {code} was found in {length} database. Threats listed below:\",\n \"card.threat-int.sender-ip.not-found_md\": \"[](SENDER_IP#:glossary) {code} was **not** found in any database.\",\n \"card.urls.description\": \"Shows all URLs extracted from the email. This is useful if you need to subscribe via a link to the service you are testing.\",\n \"card.urls.not-found_md\": \"No URLs found in this email.\",\n \"card.urls.url_md\": \"[{url}]({url})\",\n \"extracted-email\": \"Extracted from your email\",\n \"investigate:card.dmarc.align-dkim-fail_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) and [](FROM#:glossary) are not aligned. The policy is [{policy}](DKIM_ALIGNMENT#:glossary).\",\n \"investigate:card.dmarc.align-dkim-identical-no-policy_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) and [](FROM#:glossary) are aligned because they are identical. The email would be compliant if there was a valid [DMARC](DMARC#:glossary) policy.\",\n \"investigate:card.dmarc.align-dkim-no-policy_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) and [](FROM#:glossary) are not identical. Alignment cannot be determined without a [DMARC](DMARC#:glossary) policy.\",\n \"investigate:card.dmarc.align-dkim_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) and [](FROM#:glossary) are aligned. The policy is [{policy}](DKIM_ALIGNMENT#:glossary).\",\n \"investigate:card.dmarc.align-spf-fail_md\": \"[](SPF_DOMAIN#:glossary) and [](FROM#:glossary) are not aligned. The policy is [{policy}](SPF_ALIGNMENT#:glossary).\",\n \"investigate:card.dmarc.align-spf-identical-no-policy_md\": \"[](SPF_DOMAIN#:glossary) and [](FROM#:glossary) are aligned because they are identical. The email would be compliant if there was a valid [DMARC](DMARC#:glossary) policy.\",\n \"investigate:card.dmarc.align-spf-no-policy_md\": \"[](SPF_DOMAIN#:glossary) and [](FROM#:glossary) are not identical. Alignment cannot be determined without a [DMARC](DMARC#:glossary) policy.\",\n \"investigate:card.dmarc.align-spf_md\": \"[](SPF_DOMAIN#:glossary) and [](FROM#:glossary) are aligned. The policy is [{policy}](SPF_ALIGNMENT#:glossary).\",\n \"investigate:card.dmarc.all-emails-reported-only_md\": \"DMARC configured in report-only mode. All emails will only be [REPORTED](DMARC_POLICY#:glossary).\",\n \"investigate:card.dmarc.all-emails-reported_md\": \"All emails will be [REPORTED](DMARC_POLICY#:glossary).\",\n \"investigate:card.dmarc.bad-policy_md_one\": \"**The [FULL](DMARC_POLICY#:glossary) has the following syntax error:**\",\n \"investigate:card.dmarc.bad-policy_md_other\": \"**The [FULL](DMARC_POLICY#:glossary) has the following syntax error:**\",\n \"investigate:card.dmarc.category-policy-good_md\": \"The policy on your DNS conforms with the DMARC specification.\",\n \"investigate:card.dmarc.dkim-failed_md\": \"**[](DKIM#:glossary) authentication failed.**\",\n \"investigate:card.dmarc.dkim-none_md\": \"**[](DKIM#:glossary) authentication failed.**\",\n \"investigate:card.dmarc.dkim-passed_md\": \"**[](DKIM#:glossary) authentication passed.**\",\n \"investigate:card.dmarc.dmarc-failed_md\": \"[](DMARC#:glossary) settings **are not** BIMI compliant\",\n \"investigate:card.dmarc.dmarc-no-rua_md\": \"[](DMARC#:glossary) does not have an **aggregate report address** (rua) entry.\",\n \"investigate:card.dmarc.dmarc-passed_md\": \"[](DMARC#:glossary) **passed**\",\n \"investigate:card.dmarc.dmarc-passed-no-rua_md\": \"[](DMARC#:glossary) is BIMI compliant **BUT** it does not have an **aggregate report address** (rua) entry.\",\n \"investigate:card.dmarc.dmarc-policy_md\": \"**[PERCENT {percent}%](PCT#:glossary)** of unauthorized emails will be subject to the **[{policy}](DMARC_POLICY#:glossary)** policy.\",\n \"investigate:card.dmarc.dmarc-policy-partial_md\": \"The domain is only partially protected. Only **[PERCENT {percent}%](PCT#:glossary)** of unauthorized emails will be subject to the **[{policy}](DMARC_POLICY#:glossary)** policy.\",\n \"investigate:card.dmarc.full-rejection_md\": \"**100%** of unauthorized emails with the [](FROM#:glossary) `{domain}` will be **rejected**.\",\n \"investigate:card.dmarc.full-rejection-subdomain-weak_md\": \"**100%** of unauthorized emails with the [](FROM#:glossary) `{domain}` will be **rejected**, but subdomains use a weaker policy (sp={sp}), leaving them vulnerable to spoofing.\",\n \"investigate:card.dmarc.misplaced-bad-policy_md\": \"**The [FULL](DMARC_POLICY#:glossary) is misplaced and has a syntax error:**\",\n \"investigate:card.dmarc.misplaced-policy_md\": \"**The [FULL](DMARC_POLICY#:glossary) is misplaced.**\",\n \"investigate:card.dmarc.no-policy_md\": \"**No [FULL](DMARC_POLICY#:glossary) published on domain**\\n\\n**`{policyDomain}`**\",\n \"investigate:card.dmarc.no-txt-published-policy-on-domain_md\": \"No [](TXT_RECORDS#:glossary) published on `{policyDomain}`\",\n \"investigate:card.dmarc.permerror-no-rua_md\": \"No valid reporting URI ([](RUA#:glossary)) is present, so receivers will skip DMARC processing entirely.\",\n \"investigate:card.dmarc.permerror-rua-fallback_md\": \"A valid reporting URI ([](RUA#:glossary)) is present, so receivers will fall back to acting as if the policy is **p=none**.\",\n \"investigate:card.dmarc.policy-no-rua_md\": \"**[](RUA#:glossary) is not set.**\",\n \"investigate:card.dmarc.policy-no-ruf_md\": \"[](RUF#:glossary) is not set. Failure Reports with more detailed visibility of problems will not be sent.\",\n \"investigate:card.dmarc.policy-none-pct-0_md\": \"No reports will be sent with this policy, because the sample rate [](PCT#:glossary) is set to `0`.\",\n \"investigate:card.dmarc.policy-not-none-pct-0_md\": \"All **unauthorized** email will be delivered to receivers although the policy is set to [{policy}](DMARC_POLICY#:glossary), because the sample rate [](PCT#:glossary) is set to `0`.\",\n \"investigate:card.dmarc.policy-remaining-emails-pct-reject_md\": \"The remaining **{remainingPercent}%** of unauthorized emails will be subject to the **quarantine** policy.\",\n \"investigate:card.dmarc.policy-remaining-emails-pct-quarantine_md\": \"The remaining **{remainingPercent}%** of unauthorized emails will be **delivered normally**.\",\n \"investigate:card.dmarc.receiver-does-not-accept-reports-both\": \"One or more of your RUA and RUF recipients is not configured to accept DMARC reports.\",\n \"investigate:card.dmarc.receiver-does-not-accept-reports-rua\": \"One or more of your RUA recipients is not configured to accept DMARC reports.\",\n \"investigate:card.dmarc.receiver-does-not-accept-reports-ruf\": \"One or more of your RUF recipients is not configured to accept DMARC reports.\",\n \"investigate:card.dmarc.receiver-does-not-accept-reports-rua-uri_md\": \"**{uri}** is not configured to accept DMARC aggregate reports.\",\n \"investigate:card.dmarc.receiver-does-not-accept-reports-ruf-uri_md\": \"**{uri}** is not configured to accept DMARC forensic reports.\",\n \"investigate:card.dmarc.setup-dmarc_md\": \"Please setup a DMARC record as described [here](https://community.redsift.com/s/article/000001195) to secure your email setup.\",\n \"investigate:card.dmarc.spf-failed_md\": \"**[](SPF#:glossary) authentication failed.**\",\n \"investigate:card.dmarc.spf-passed_md\": \"**[](SPF#:glossary) authentication passed.**\",\n \"investigate:card.dmarc.subdomain-no-explicit-policy_md\": \"This DMARC policy applies to all emails sent from subdomains of `{domain}.{tld}`, e.g. `mail.{domain}.{tld}`, where no explicit DMARC policy is set on the subdomain.\",\n \"investigate:card.dmarc.subdomain-no-policy_md\": \"**100%** of unauthorized emails from subdomains of `{domain}` will be delivered (reported only) unless they have published their own, stronger DMARC policy.\",\n \"investigate:card.dmarc.subdomain-full-rejection_md\": \"**100%** of unauthorized emails with the [](FROM#:glossary) of subdomains of `{domain}` will be **rejected** unless they have published their own, weaker DMARC policy.\",\n \"investigate:card.dmarc.subdomain-full-quarantine_md\": \"**100%** of unauthorized emails with the [](FROM#:glossary) of subdomains of `{domain}` will be **quarantined** unless they have published their own DMARC policy.\",\n \"investigate:card.dmarc.subdomain-partial-rejection_md\": \"Subdomains are only partially protected unless they have published their own, stronger DMARC policy. Only **{pct}%** of unauthorized emails will be subject to the **reject** policy. The remaining **{remainingPercent}%** of unauthorized emails will be subject to the **quarantine** policy.\",\n \"investigate:card.dmarc.subdomain-partial-quarantine_md\": \"Subdomains are only partially protected unless they have published their own, stronger DMARC policy. Only **{pct}%** of unauthorized emails will be subject to the **quarantine** policy. The remaining **{remainingPercent}%** of unauthorized emails will be **delivered normally**.\",\n \"investigate:card.dmarc.subdomain-partial-no-policy_md\": \"Only **{pct}%** of unauthorized emails from subdomains of `{domain}` will be delivered (reported only) unless they have published their own, stronger DMARC policy.\",\n \"investigate:card.dmarc.subdomain-policy-not-none_md\": \"The DMARC policy '{subpolicy}' is applied for mails sent from subdomains of `{domain}` that do not have their own DMARC policy records set.\",\n \"investigate:card.dmarc.subdomain-policy-not-none_weaker_md\": \"**sp={subpolicyL}** is weaker than **p={policyL}**. The DMARC policy '{subpolicy}' is applied for mails sent from subdomains of `{domain}` that do not have their own DMARC policy records set.\",\n \"investigate:card.dmarc.summary-domain-reject-full-sp-weak\": \"The domain has a reject policy for the main domain, but subdomains use a weaker policy, leaving them vulnerable to spoofing.\",\n \"investigate:card.dmarc.summary-domain-reject-partial-sp-weak\": \"The domain only rejects {pct}% of unauthorized email, and subdomains use a weaker policy, leaving them vulnerable to spoofing.\",\n \"investigate:card.dmarc.summary-domain-quarantine-full-sp-weak\": \"The domain has a quarantine policy, but subdomains use a weaker policy, leaving them vulnerable to spoofing.\",\n \"investigate:card.dmarc.summary-domain-quarantine-partial-sp-weak\": \"The domain only quarantines {pct}% of unauthorized email, and subdomains use a weaker policy, leaving them vulnerable to spoofing.\",\n // Summary box strings for email compliance results\n \"investigate:card.dmarc.summary-email-pass\": \"The email is DMARC compliant. It passed both DKIM and SPF.\",\n \"investigate:card.dmarc.summary-email-fail-both\": \"The email is not DMARC compliant. Neither DKIM nor SPF passed.\",\n \"investigate:card.dmarc.summary-email-fail-dkim\": \"The email is not DMARC compliant. DKIM did not pass.\",\n \"investigate:card.dmarc.summary-email-fail-spf\": \"The email is not DMARC compliant. SPF did not pass.\",\n // Summary box strings for permerror (RFC 7489 §6.6.3)\n \"investigate:card.dmarc.summary-email-permerror\": \"Email compliance could not be determined because the DMARC record has a permanent error and no reporting URI (rua) is configured.\",\n \"investigate:card.dmarc.summary-domain-permerror\": \"The DMARC policy has a permanent error and cannot be enforced. No reporting URI (rua) is configured, so receivers will skip DMARC processing entirely.\",\n \"investigate:card.dmarc.summary-domain-permerror-rua-fallback\": \"The DMARC policy contains errors, but a valid reporting URI (rua) is present. Receivers fall back to acting as if the policy is p=none (monitoring only).\",\n \"investigate:card.dmarc.txt-published-on-policy-domain_md\": \"[](TXT_RECORD#:glossary) published on `{policyDomain}`\",\n \"investigate:card.dmarc.txt-published-policy-on-domain_md\": \"[](TXT_RECORD#:glossary) published on `{policyDomain}`\",\n \"investigate:card.dmarc.txt-published-policy-on-domain_md_one\": \"[](TXT_RECORD#:glossary) published on `{policyDomain}`\",\n \"investigate:card.dmarc.txt-published-policy-on-domain_md_other\": \"{count} [](TXT_RECORDS#:glossary) published on `{policyDomain}`\",\n \"investigate:card.spf.dns-count-lookup-greater-10_md\": \"**SPF lookups are exceeding the limit of 10, which results in an SPF fail. Check our Dynamic SPF feature for a solution!**\",\n \"investigate:card.spf.dns-count-lookup_md\": \"{count}/10 SPF lookups\",\n \"investigate:card.spf.dns-count-lookup_md_one\": \"{count}/10 SPF lookup\",\n \"investigate:card.spf.dns-count-lookup_md_other\": \"{count}/10 SPF lookups\",\n \"investigate:card.spf.dns-count-void-lookups_md\": \"{count}/2 Void lookups\",\n \"investigate:card.spf.dns-count-void-lookups_md_one\": \"{count}/2 Void lookup\",\n \"investigate:card.spf.dns-count-void-lookups_md_other\": \"{count}/2 Void lookups\",\n \"investigate:card.spf.eval-error-record-not-found_md\": \"**No SPF record found**\",\n \"investigate:card.spf.failed_md\": \"**[](SPF#:glossary) authentication failed.**\",\n \"investigate:card.spf.passed_md\": \"**[](SPF#:glossary) authentication passed.**\",\n \"investigate:card.spf.spf-all-and-redirect_md\": \"Any **redirect** is ignored if there is an **all** mechanism.\",\n \"investigate:card.spf.spf-all-not-last_md\": \"Any data after the **all** is ignored.\",\n \"investigate:card.spf.spf-all-plus-warning_md\": \"**+all** mechanism should not be used as this allows all sending IP addresses.\",\n \"investigate:card.spf.spf-all-question-mark-warning_md\": \"**?all** mechanism should not be used as it allows for an ambiguous response.\",\n \"investigate:card.spf.spf-extra-spf-lookups_md\": \"Too many SPF lookups. Details below\",\n \"investigate:card.spf.spf-invalid-spf-header-include_md\": \"SPF record is invalid because it has a space between the include: statement.\",\n \"investigate:card.spf.spf-invalid-spf1-header_md\": \"Invalid SPF record\",\n \"investigate:card.spf.spf-multiple-all_md\": \"Multiple **all** mechanisms in the SPF record\",\n \"investigate:card.spf.spf-multiple-mx-providers_md\": \"Multiple email providers configured in the MX records for this domain.\",\n \"investigate:card.spf.spf-multiple-spf_md\": \"Multiple SPF records found for this domain\",\n \"investigate:card.spf.spf-no-all_md\": \"It is recommended to use either a **redirect** modifier or an **all** mechanism to explicitly terminate processing.\",\n \"investigate:card.spf.spf-no-spf_md\": \"No SPF configured for the domain.\",\n \"investigate:card.spf.spf-recursive-include-spf_md\": \"Redundant SPF include can be removed as it points back to your own domain\",\n \"investigate:card.spf.spf-v-tag-duplicated-spf_md\": \"Version tag is duplicated.\",\n \"investigate:card.spf.warnings_md\": \"**[](SPF#:glossary) authentication detected problems:**\",\n \"investigate:dkim-evaluation\": \"DKIM Evaluation\",\n \"investigate:extracted-dns\": \"Extracted from your DNS configuration\",\n \"investigate:extracted-dns-details\": \"Extracted DNS configuration details\",\n \"investigate:extracted-dns-short\": \"Extracted from your DNS\",\n \"investigate:extracted-email\": \"Extracted from your email\",\n \"investigate:fcrdns-evaluation\": \"FCrDNS Evaluation\",\n \"investigate:retry-email_md\": \"**Please send the email again!**\",\n \"investigate:temporary-error-setup\": \"A temporary error occurred when analyzing your setup.\",\n \"retry-email_md\": \"**Please send the email again!**\",\n \"section-titles.dkim-headers\": \"Email headers\",\n \"section-titles.dkim-key\": \"DKIM public key\",\n \"section-titles.dkim-signature\": \"DKIM signature\",\n \"section-titles.dmarc-alignment\": \"DMARC alignment check\",\n \"section-titles.dmarc-authentication\": \"DMARC authentication check\",\n \"section-titles.dmarc-domain\": \"DMARC Domains\",\n \"section-titles.dmarc-policy\": \"Your DMARC Policy\",\n \"section-titles.dmarc-policy-check\": \"DMARC policy record check\",\n \"section-titles.dmarc-policy-details\": \"Policy configuration\",\n \"section-titles.dnssec\": \"DNSSEC Status\",\n \"section-titles.sender-information\": \"Sender Information\",\n \"section-titles.spf-policy\": \"Your SPF Policy\",\n \"section-titles.spf-policy-check\": \"SPF policy record check\",\n \"section-titles.tls-configuration\": \"TLS Configuration\",\n \"section-titles.urls-found\": \"URLs found\",\n \"signal-cards.tls.extracted.cipher_md\": \"[](CIPHER_SUITE#:glossary)\",\n \"signal-cards.tls.extracted.version_md\": \"[](TLS#:glossary) version\",\n \"signal-cards.tls.info.cipher.error_md\": \"Cipher Suite `{cipher}` is insecure.\",\n \"signal-cards.tls.info.cipher.good_md\": \"Cipher Suite is secure\",\n \"signal-cards.tls.info.cipher.learn_more_md\": \"Click [here](https://community.redsift.com/s/article/000001271) to view our Knowledge Base article on recommended cipher suites.\",\n \"signal-cards.tls.info.cipher.unknown_md\": \"[](CIPHER_SUITE#:glossary) is unknown and cannot be verified as secure.\",\n \"signal-cards.tls.info.cipher.warning_md\": \"Cipher Suite `{cipher}` should be updated.\",\n \"signal-cards.tls.info.version.error_md\": \"[](SSL#:glossary){version} is used, which is considered insecure\",\n \"signal-cards.tls.info.version.good_md\": \"TLS version is secure ({version})\",\n \"signal-cards.tls.info.version.missing_md\": \"You are not using TLS\",\n \"signal-cards.tls.info.version.missing_subtext\": \"As a result the contents of your message can easily be snooped by people who are not your intended recipients.\",\n \"signal-cards.tls.info.version.unknown_md\": \"Unknown TLS version ({value})\",\n \"signal-cards.tls.info.version.warning_md\": \"TLS version should be updated from {current} to v1.2\",\n \"signal-description.THREATINV_DOMAIN_ANALYZER_NO_THREATS_md\": \"Domain was checked against several of trusted spammers database, web-mail transfer agents, botnet resources, phishers, or Non-reputation source: No suspicious activity.\",\n \"signal-description.THREATINV_NO_THREATS_md\": \"The results of the Threat Intelligence check help to identify suspicious domains or email that should be blocked. It also displays any vulnerability issues you might face.\",\n \"temporary-error-setup\": \"A temporary error occurred when analyzing your setup.\",\n unknown: \"Unknown\",\n // -------------------------------------------------------------------------\n // Glossary labels (plain-text equivalents of DS React glossary components)\n // -------------------------------------------------------------------------\n \"glossary.from\": \"From\",\n \"glossary.version\": \"Version\",\n \"glossary.mode\": \"Mode\",\n \"glossary.mx\": \"MX\",\n \"glossary.max-age\": \"Max Age\",\n \"glossary.tls-rpt-record\": \"TLS-RPT Record\",\n \"glossary.mta-sts-record\": \"MTA-STS Record\",\n \"glossary.mta-sts-policy-file\": \"MTA-STS Policy File\",\n \"glossary.dkim-signing-domain\": \"DKIM Signing Domain\",\n \"glossary.spf-domain\": \"SPF Domain\",\n \"glossary.spf-domains\": \"SPF Domains\",\n // -------------------------------------------------------------------------\n // MTA-STS section titles + info/extracted keys\n // -------------------------------------------------------------------------\n \"section-titles.tls-rpt-dns-record\": \"Your TLS-RPT DNS Record\",\n \"section-titles.mta-sts-dns-record\": \"Your MTA-STS DNS Record\",\n \"section-titles.mta-sts-policy-config\": \"Your MTA-STS Policy Configuration\",\n \"signal-cards.mta-sts.title\": \"MTA-STS\",\n \"signal-cards.mta-sts.txt-published-policy-on-domain_md\": \"[](TXT_RECORD#:glossary) published on `{policyDomain}`\",\n \"signal-cards.mta-sts.no-txt-published-policy-on-domain_md\": \"No [](TXT_RECORD#:glossary) published on `{policyDomain}`\",\n \"signal-cards.mta-sts.record-missing_md\": \"**[](MTA_STS_POLICY_FILE#:glossary)** **Missing.** [Learn how to fix it](https://community.redsift.com/s/article/000001035)\",\n \"signal-cards.mta-sts.elements-missing_md\": \"**[](MTA_STS_POLICY_FILE#:glossary)** **Some elements missing.** [Learn how to fix it](https://community.redsift.com/s/article/000001035)\",\n \"signal-cards.mta-sts.mta-policy-mode-invalid_md\": \"MTA-STS Policy mode is set to **{mode}** which is invalid\",\n \"signal-cards.mta-sts.mta-policy-version-invalid_md\": \"MTA-STS Policy version is set to **{version}** which is invalid\",\n \"signal-cards.mta-sts.mta-certificate-at-risk_md\": \"SSL certificate cannot be renewed automatically\",\n \"signal-cards.mta-sts.mta-certificate-not-issued_md\": \"SSL certificate has not been issued yet\",\n \"signal-cards.mta-sts.mta-certificate-add-to-dns\": \"Please add the entries below to your DNS record, to ensure the SSL certificate is automatically renewed\",\n \"signal-cards.mta-sts.mta-certificate-add-to-caa\": \"Please add the CAA below to the CAA list in your DNS record, to ensure the SSL certificate is automatically renewed\",\n \"signal-cards.mta-sts.certificate-expiry\": \"Certificate expires: {expiry}\",\n // -------------------------------------------------------------------------\n // SubDo section title\n // -------------------------------------------------------------------------\n \"section-titles.subdo-check\": \"Subdomain Takeover Check\",\n // -------------------------------------------------------------------------\n // AMP extracted items\n // -------------------------------------------------------------------------\n \"extracted-dns-short\": \"DNS Record\",\n // -------------------------------------------------------------------------\n // Google/Yahoo Compliance sections\n // -------------------------------------------------------------------------\n \"card.google-yahoo-compliance.section.spf-dkim.header\": \"SPF and DKIM\",\n \"card.google-yahoo-compliance.section.spf-dkim.spf.success_md\": \"[](SPF#:glossary) evaluation passed\",\n \"card.google-yahoo-compliance.section.spf-dkim.spf.error_md\": \"[](SPF#:glossary) evaluation failed\",\n \"card.google-yahoo-compliance.section.spf-dkim.dkim.success_md\": \"[](DKIM#:glossary) evaluation passed\",\n \"card.google-yahoo-compliance.section.spf-dkim.dkim.error_md\": \"[](DKIM#:glossary) evaluation failed\",\n \"card.google-yahoo-compliance.section.spf-dkim-alignment.header\": \"SPF or DKIM Alignment\",\n \"card.google-yahoo-compliance.section.spf-dkim-alignment.align-spf.success_md\": \"[](SPF_DOMAIN#:glossary) and [](FROM#:glossary) are aligned. The policy is [{policy}](SPF_ALIGNMENT#:glossary).\",\n \"card.google-yahoo-compliance.section.spf-dkim-alignment.align-spf.error_md\": \"[](SPF_DOMAIN#:glossary) and [](FROM#:glossary) are not aligned. The policy is [{policy}](SPF_ALIGNMENT#:glossary).\",\n \"card.google-yahoo-compliance.section.spf-dkim-alignment.align-dkim.success_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) DKIM signing domain and [](FROM#:glossary) are aligned. The policy is [{policy}](DKIM_ALIGNMENT#:glossary).\",\n \"card.google-yahoo-compliance.section.spf-dkim-alignment.align-dkim.error_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) DKIM signing domain and [](FROM#:glossary) are not aligned. The policy is [{policy}](DKIM_ALIGNMENT#:glossary).\",\n \"card.google-yahoo-compliance.section.dmarc.header\": \"DMARC\",\n \"card.google-yahoo-compliance.section.dmarc.evaluation.success_md\": \"[](DMARC#:glossary) evaluation passed\",\n \"card.google-yahoo-compliance.section.dmarc.evaluation.error_md\": \"[](DMARC#:glossary) evaluation failed\",\n \"card.google-yahoo-compliance.section.dmarc.policy.success_md\": \"[](DMARC_POLICY#:glossary) {policy}.\",\n \"card.google-yahoo-compliance.section.dmarc.policy.error_md\": \"Policy **is not set**. It should be set as [](DMARC_POLICY#:glossary) none, quarantine, or reject.\",\n \"card.google-yahoo-compliance.section.fcrdns.header\": \"FCrDNS\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip.success_md\": \"[](SENDER_IP#:glossary) matches the [](A_RECORD#:glossary) of the [](PTR_RECORD#:glossary) in both directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip.error_md\": \"[](SENDER_IP#:glossary) does not match the [](A_RECORD#:glossary) of the [](PTR_RECORD#:glossary) in both directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip.warning_md\": \"[](SENDER_IP#:glossary) does not match the [](A_RECORD#:glossary) of the [](PTR_RECORD#:glossary) in both directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.ehlo.success_md\": \"The [](EHLO#:glossary) matches the [](PTR_RECORD#:glossary) of the [](A_RECORD#:glossary) in both directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.ehlo.error_md\": \"The [](EHLO#:glossary) does not match the [](PTR_RECORD#:glossary) of the [](A_RECORD#:glossary) in both directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.ehlo.warning_md\": \"The [](EHLO#:glossary) does not match the [](PTR_RECORD#:glossary) of the [](A_RECORD#:glossary) in both directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip-matches-ehlo-a-record.success_md\": \"[](SENDER_IP#:glossary) matches the [](A_RECORD#:glossary) of the [](EHLO#:glossary) in both directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip-matches-ehlo-a-record.error_md\": \"[](SENDER_IP#:glossary) does not match the [](A_RECORD#:glossary) of the [](EHLO#:glossary) in both directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip-matches-ehlo-a-record.warning_md\": \"[](SENDER_IP#:glossary) does not match the [](A_RECORD#:glossary) of the [](EHLO#:glossary) in both directions.\",\n \"card.google-yahoo-compliance.section.reputation.header\": \"Spam Rate\",\n \"card.google-yahoo-compliance.section.reputation.summary_md\": \"Requirement: **Low reported spam rate**\",\n \"card.google-yahoo-compliance.section.reputation.information_md\": \"Microsoft, Google and Yahoo require spam rates to be below 0.3%. To check your rates, consult [Microsoft's Sender Support](https://sendersupport.olc.protection.outlook.com/pm/Postmaster), [Google's Postmaster Tools](https://gmail.com/postmaster) or [Yahoo's Complaint Feedback Loop program](https://senders.yahooinc.com/complaint-feedback-loop/).\",\n \"card.google-yahoo-compliance.section.tls.header\": \"TLS\",\n \"card.google-yahoo-compliance.section.tls.evaluation.success_md\": \"[](TLS#:glossary) TLS ({version}) connection is being used.\",\n \"card.google-yahoo-compliance.section.tls.evaluation.warning_md\": \"[](TLS#:glossary) TLS ({version}) is outdated. TLS 1.2+ is required for compliance.\",\n \"card.google-yahoo-compliance.section.tls.evaluation.error_md\": \"[](TLS#:glossary) TLS connection is **not** being used.\",\n \"card.google-yahoo-compliance.section.one-click-unsub.header\": \"One-click unsubscribe\",\n \"card.google-yahoo-compliance.section.one-click-unsub.evaluation.success_md\": \"One-click unsubscribe link is present.\",\n \"card.google-yahoo-compliance.section.one-click-unsub.evaluation.error_md\": \"One-click unsubscribe link **is not** present.\",\n \"card.google-yahoo-compliance.section.one-click-unsub.evaluation.warning\": \"Marketing and subscribed messages only: one-click unsubscribe is missing.\"\n },\n \"fr-FR\": {\n \"card.amp.align-dkim-fail_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) et [](FROM#:glossary) ne sont pas align\\xE9s. La politique est [{dkimPolicy}](DKIM_ALIGNMENT#:glossary).\",\n \"card.amp.align-dkim_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) et [](FROM#:glossary) sont align\\xE9s. La politique est [{dkimPolicy}](DKIM_ALIGNMENT#:glossary).\",\n \"card.amp.dkim-failed_md\": \"**[](DKIM#:glossary) authentification \\xE9chou\\xE9e.**\",\n \"card.amp.dkim-passed_md\": \"**[](DKIM#:glossary) authentification r\\xE9ussie.**\",\n \"card.amp.spf-failed_md\": \"**[](SPF#:glossary) authentification \\xE9chou\\xE9e.**\",\n \"card.amp.spf-passed_md\": \"**[](SPF#:glossary) authentification r\\xE9ussie.**\",\n \"card.dkim.canonicalization-simple_md\": \"La [](CANONICALIZATION#:glossary) {whichPart} est r\\xE9gl\\xE9e sur `simple`. Cela peut entra\\xEEner des probl\\xE8mes lors de la v\\xE9rification de la signature de l'email. Nous recommandons d'utiliser la valeur `relaxed` pour l'en-t\\xEAte et le corps du message. [En savoir plus](https://community.redsift.com/s/article/000001204) dans notre base de connaissances.\",\n \"card.dkim.code-eval-failed_md\": \"**Le code donn\\xE9 `{code}` ne peut pas \\xEAtre \\xE9valu\\xE9.**\",\n \"card.dkim.dkim-key-length-warning\": \"La longueur de la cl\\xE9 publique doit \\xEAtre d'au moins 1024 bits pour \\xEAtre conforme aux normes de s\\xE9curit\\xE9 actuelles. Si elle est plus courte, certains fournisseurs (par exemple Google) peuvent signaler que le test de v\\xE9rification DKIM a \\xE9chou\\xE9.\",\n \"card.dkim.error_md\": \"Statut de v\\xE9rification DKIM\",\n \"card.dkim.error_md_fail\": \"Le message a une signature valide, mais elle ne correspond pas \\xE0 la signature du domaine d'envoi. Cela signifie probablement que le message a \\xE9t\\xE9 modifi\\xE9 en cours de route.\",\n \"card.dkim.error_md_neutral\": \"Le message a \\xE9t\\xE9 sign\\xE9 mais la ou les signatures contiennent des erreurs de syntaxe.\",\n \"card.dkim.error_md_none\": \"Le message n'est pas sign\\xE9.\",\n \"card.dkim.error_md_outdated_algorithm\": \"Le message a \\xE9t\\xE9 sign\\xE9 avec une cl\\xE9 utilisant l'algorithme RSA-{algorithm}, plus ancien et moins s\\xFBr.\",\n \"card.dkim.error_md_pass\": \"Le message a \\xE9t\\xE9 sign\\xE9 et a pass\\xE9 les tests de v\\xE9rification.\",\n \"card.dkim.error_md_permerror\": \"La signature (ou une partie de celle-ci) est absente du message re\\xE7u. Cela indique que l'en-t\\xEAte de la signature du courriel est mal format\\xE9 ou qu'il a \\xE9t\\xE9 modifi\\xE9 apr\\xE8s l'envoi.\",\n \"card.dkim.error_md_policy\": \"Le message a \\xE9t\\xE9 sign\\xE9, mais un aspect de la ou des signatures n'a pas \\xE9t\\xE9 accept\\xE9.\",\n \"card.dkim.error_md_temperror\": \"Il y a eu un probl\\xE8me \\xE0 court terme lors de la v\\xE9rification de la signature du courriel. Cette erreur est temporaire, veuillez donc renvoyer l'e-mail plus tard.\",\n \"card.dkim.error_simple_canonicalization_md\": \"Canonicalisation simple d\\xE9tect\\xE9e\",\n \"card.dkim.error_simple_canonicalization_md_policy\": \"**Le message a une signature valide, mais elle ne correspond pas \\xE0 la signature du domaine d'envoi.\\n\\n\\n\\n**Veuillez noter** que votre service d'envoi d'emails utilise [](CANONICALIZATION#:glossary) simple pour les en-t\\xEAtes d'emails, ce qui n'est pas recommand\\xE9 et peut fausser le r\\xE9sultat de cette v\\xE9rification [](DKIM#:glossary). Voir ci-dessous comment modifier votre configuration pour adopter la m\\xE9thode recommand\\xE9e.\",\n \"card.dkim.eval-error-record-not-found_md\": \"**Un [](DKIM_SIGNATURE_HEADER#:glossary) n'est pas pr\\xE9sent dans votre email.**\",\n \"card.dkim.eval-error-record-not-found_subtext_md\": \"Veuillez configurer DKIM pour votre service d'envoi de courriels afin de commencer \\xE0 signer les courriels. Notre [base de connaissances](https://community.redsift.com/s/global-search/dkim) fournit des instructions pour configurer DKIM pour de nombreux fournisseurs.\",\n \"card.dkim.eval-error-validation-error_md\": \"**La v\\xE9rification de la signature a \\xE9chou\\xE9.\",\n \"card.dkim.eval-error-validation-error_subtext_md\": \"Il s'agit de l'erreur brute :\\n\\n```{error}```\",\n \"card.dkim.failed_md\": \"**[](DKIM#:glossary) \\xE9valuation \\xE9chou\\xE9e.**\",\n \"card.dkim.invalid-txt-record-published-selector_md\": \"[](TXT_RECORD#:glossary) vide ou invalide publi\\xE9 pour le s\\xE9lecteur `{fullSelector}`.\",\n \"card.dkim.invalid_md\": \"**[](DKIM#:glossary) status is invalid.**\",\n \"card.dkim.no-dkim-email-header_md\": \"Non [](DKIM_SIGNATURE_HEADER#:glossary)\",\n \"card.dkim.no-txt-record-published-selector_md\": \"Aucun [](TXT_RECORD#:glossary) publi\\xE9 pour le s\\xE9lecteur `{fullSelector}`.\",\n \"card.dkim.not-present_md\": \"Non pr\\xE9sent\",\n \"card.dkim.passed_md\": \"**[](DKIM#:glossary) \\xE9valuation r\\xE9ussie.**\",\n \"card.dkim.prompt-dkim-txt-record-publish_md\": \"Veuillez publier un [](TXT_RECORD#:glossary) valide dans votre DNS pour le s\\xE9lecteur.\",\n \"card.dkim.recommend-ttl-max-600_md\": \"Il est recommand\\xE9 de ne pas fixer la valeur TTL \\xE0 plus de 600 secondes.\",\n \"card.dkim.txt-record-published-on-dkim-url_md\": \"[](TXT_RECORD#:glossary) publi\\xE9 sur `{selector}._domainkey.{signerDomain}`\",\n \"card.dkim.txt-record-ttl-600-warning_md\": \"Le time-to-live (TTL) pour le [](TXT_RECORD#:glossary) est sup\\xE9rieur \\xE0 600 secondes. Lors de la mise \\xE0 jour de l'enregistrement, les serveurs DNS peuvent encore afficher l'ancienne valeur pour la dur\\xE9e du TTL avant de mettre \\xE0 jour la valeur. L'impact est qu'il se peut que vous deviez attendre que le changement prenne effet pendant ce laps de temps.\",\n \"card.dkim.unavailable-try-later_md\": \"Veuillez essayer d'envoyer un autre courriel plus tard.\",\n \"card.dkim.unavailable_md\": \"**[](DKIM#:glossary) \\xE9valuation temporairement indisponible.**\",\n \"card.dmarc.domain-aligned\": \"Le domaine est align\\xE9 avec le domaine exp\\xE9diteur. Il peut contribuer \\xE0 la r\\xE9ussite de DMARC.\",\n \"card.dmarc.domain-not-aligned\": \"Le domaine n'est pas align\\xE9 avec le domaine exp\\xE9diteur. Il ne peut pas contribuer \\xE0 la r\\xE9ussite de DMARC.\",\n \"card.dmarc.error.dns-timeout\": \"D\\xE9lai d'attente DNS lors de la recherche de l'enregistrement DMARC\",\n \"card.dmarc.error.invalid-pct-value\": \"La valeur pct doit \\xEAtre entre 0 et 100\",\n \"card.dmarc.error.invalid-policy-value\": \"Valeur de politique invalide dans l'enregistrement DMARC\",\n \"card.dmarc.error.invalid-rua-format\": \"Format rua invalide - doit \\xEAtre une URI mailto:\",\n \"card.dmarc.error.invalid-version\": \"Version DMARC invalide - doit \\xEAtre DMARC1\",\n \"card.dmarc.error.misplaced-policy\": \"Politique DMARC situ\\xE9e au mauvais sous-domaine\",\n \"card.dmarc.error.nxdomain\": \"NXDOMAIN - le domaine n'existe pas\",\n \"card.dmarc.error.policy-not-found\": \"Politique DMARC introuvable\",\n \"card.dmarc.error.syntax-error\": \"Erreur de syntaxe dans l'enregistrement DMARC\",\n \"card.dmarc.error.unknown\": \"Erreur inconnue\",\n \"card.dmarc.error.unrecognized-tag\": \"Balise DMARC non reconnue trouv\\xE9e\",\n \"card.dmarc.error_md\": \"\",\n \"card.dmarc.error_md_none\": \"**Aucun enregistrement de politique DMARC n'est publi\\xE9.**\",\n \"card.dmarc.error_md_pass\": \"**La validation du DMARC est r\\xE9ussie.**\",\n \"card.dmarc.error_md_permerror\": \"**Une erreur permanente s'est produite lors de l'\\xE9valuation DMARC**.\",\n \"card.dmarc.error_md_temperror\": \"**Il y a eu une erreur temporaire dans l'\\xE9valuation de la politique DMARC**.\",\n \"card.dnssec.domain-protected_fail\": \"Le domaine n'est pas prot\\xE9g\\xE9 par DNSSEC.\",\n \"card.dnssec.domain-protected_pass\": \"Le domaine est prot\\xE9g\\xE9 par DNSSEC.\",\n \"card.fcrdns.ehlo-match-ptr-all_md\": \"Le [](EHLO#:glossary) correspond au [](PTR_RECORD#:glossary) du [](A_RECORD#:glossary) dans les deux sens.\",\n \"card.fcrdns.ehlo-no-match-ptr-all_md\": \"Le [](EHLO#:glossary) ne correspond pas au [](PTR_RECORD#:glossary) du [](A_RECORD#:glossary) dans les deux sens.\",\n \"card.fcrdns.ehlo-not-valid_md\": \"Le domaine [](EHLO#:glossary) n'est pas valide. Pour une meilleure s\\xE9curit\\xE9, nous vous recommandons de configurer votre service d'envoi d'e-mails de mani\\xE8re \\xE0 ce que le domaine soit correctement d\\xE9fini.\",\n \"card.fcrdns.no-ehlo_md\": \"[](EHLO#:glossary) n'est pas d\\xE9fini, n'est pas valide ou pointe vers une IP non publique, les tests ont donc \\xE9t\\xE9 ignor\\xE9s. Nous vous recommandons de configurer votre service d'envoi de courrier \\xE9lectronique de mani\\xE8re \\xE0 ce que le [](EHLO#:glossary) soit correctement d\\xE9fini, ce qui am\\xE9liorera votre niveau de s\\xE9curit\\xE9.\",\n \"card.fcrdns.sender-ip-match-a-ehlo-all_md\": \"Le [](SENDER_IP#:glossary) correspond au [](A_RECORD#:glossary) du [](EHLO#:glossary) dans les deux sens.\",\n \"card.fcrdns.sender-ip-match-ptr-all_md\": \"Le [](SENDER_IP#:glossary) correspond au [](A_RECORD#:glossary) du [](PTR_RECORD#:glossary) dans les deux sens.\",\n \"card.fcrdns.sender-ip-no-match-ehlo-all_md\": \"Le [](SENDER_IP#:glossary) ne correspond pas au [](A_RECORD#:glossary) du [](EHLO#:glossary).\",\n \"card.fcrdns.sender-ip-no-match-ptr-all_md\": \"Le [](SENDER_IP#:glossary) ne correspond pas au [](A_RECORD#:glossary) du [](PTR_RECORD#:glossary) dans les deux directions.\",\n \"card.fcrdns.sender-ip-ptr-record-no-match-ehlo_md\": \"Le [](SENDER_IP#:glossary) du [](PTR_RECORD#:glossary) ne correspond pas au [](EHLO#:glossary).\",\n \"card.spf.eval-error-infinite-recursion-detected_md\": \"**R\\xE9curion de recherche infinie d\\xE9tect\\xE9e**\",\n \"card.spf.eval-error-infinite-recursion-detected_subtext_md\": \"L'une des d\\xE9clarations `include:` de votre enregistrement SPF est \\xE0 l'origine d'une r\\xE9cursion de recherche infinie. Veuillez supprimer le `include:` \\xE0 l'origine de la r\\xE9cursion pour que l'enregistrement SPF fonctionne.\",\n \"card.spf.eval-error-limit-exceeded_md\": \"**Trop de recherches DNS**\",\n \"card.spf.eval-error-limit-exceeded_subtext_md\": \"La sp\\xE9cification SPF limite le nombre de consultations DNS \\xE0 10, nombre que vous d\\xE9passez et qui peut faire \\xE9chouer l'authentification SPF.\\n\\nVeuillez consulter [cet article de la base de connaissances] (https://community.redsift.com/s/article/000001129) pour trouver une solution \\xE0 ce probl\\xE8me.\",\n \"card.spf.eval-error-record-not-found_md\": \"**Aucun enregistrement SPF n'a \\xE9t\\xE9 trouv\\xE9**\",\n \"card.spf.eval-error-record-not-found_subtext_md\": \"Veuillez ajoutez votre SPF [](TXT_RECORD#:glossary) dans votre DNS.\\n\\nNotre [base de connaissances](https://community.redsift.com/s/global-search/SPF%20DKIM) fournit des instructions pour configurer SPF pour de nombreux fournisseurs.\",\n \"card.spf.eval-error-too-many-spf-records_md\": \"**Trop d'enregistrements SPF trouv\\xE9s**\",\n \"card.spf.eval-error-too-many-spf-records_md_subtext\": \"Veuillez n'utiliser qu'une seule entr\\xE9e SPF.\",\n \"card.spf.eval-error-wrong-syntax_md\": \"**Le SPF [FULL](TXT_RECORD#:glossary) a une erreur de syntaxe**\",\n \"card.spf.eval-error-wrong-syntax_subtext_md\": \"Veuillez v\\xE9rifier si la syntaxe est correcte et mettre \\xE0 jour l'enregistrement dans votre DNS. L'une des raisons possibles est une erreur de copier-coller du contenu de l'enregistrement.\",\n \"card.spf.eval-failed_md\": \"**[](SPF#:glossary) \\xE9valuation \\xE9chou\\xE9e**\",\n \"card.spf.eval-failed_md_subtext\": \"L'exp\\xE9diteur n'est pas autoris\\xE9 \\xE0 envoyer des courriels en votre nom.\",\n \"card.spf.eval-neutral_md\": \"**La v\\xE9rification SPF n'a pas permis d'affirmer que l'exp\\xE9diteur est autoris\\xE9**\",\n \"card.spf.eval-not-possible_md\": \"**L'\\xE9valuation de la FSP n'est pas possible**\",\n \"card.spf.eval-not-possible_md_subtext-entry\": \"Veuillez contacter votre administrateur DNS pour revoir le SPF [](TXT_RECORD#:glossary) :\",\n \"card.spf.eval-not-possible_md_subtext-error\": \"Veuillez contacter votre administrateur DNS afin qu'il recherche la ou les erreurs :\",\n \"card.spf.eval-passed_md\": \"**[](SPF#:glossary) v\\xE9rification r\\xE9ussie**\",\n \"card.spf.eval-soft-failed_md\": \"**[](SPF#:glossary) \\xE9valuation soft fail**\",\n \"card.spf.eval-soft-failed_md_subtext\": \"L'exp\\xE9diteur n'est probablement pas autoris\\xE9, mais aucune politique plus stricte n'a \\xE9t\\xE9 publi\\xE9e.\",\n \"card.spf.unavailable_md\": \"**[](SPF#:glossary) \\xE9valuation temporairement indisponible**\",\n // BIMI keys\n \"card.bimi.cert-forbidden_md\": \"Votre certificat semble \\xEAtre derri\\xE8re un syst\\xE8me de protection anti-bot. En savoir plus et comment r\\xE9soudre le probl\\xE8me [ici](https://knowledge.ondmarc.redsift.com/en/articles/8047013-ondmarc-cannot-fetch-my-bimi-logo-or-certificate)\",\n \"card.bimi.could-not-fetch_md\": \"\\xC9chec de la r\\xE9cup\\xE9ration de **[](BIMI_RECORD#:glossary)**\",\n \"card.bimi.dmarc-compliance-title\": \"Conformit\\xE9 DMARC\",\n \"card.bimi.dmarc-compliance-pass_md\": \"Le domaine est conforme \\xE0 DMARC\",\n \"card.bimi.dmarc-compliance-fail_md\": \"Le domaine n'est pas conforme \\xE0 DMARC\",\n \"card.bimi.errors.bimi-error-cert-not-valid\": \"Le certificat n'est pas valide\",\n \"card.bimi.errors.bimi-error-incorrect-v\": \"La valeur de l'enregistrement v doit \\xEAtre BIMI1 ;\",\n \"card.bimi.errors.bimi-error-invalid-a\": \"La valeur de l'enregistrement a doit \\xEAtre une URL valide\",\n \"card.bimi.errors.bimi-error-invalid-l\": \"La valeur de l'enregistrement l doit \\xEAtre une URL valide\",\n \"card.bimi.errors.bimi-error-invalid-record\": \"L'enregistrement BIMI est invalide\",\n \"card.bimi.errors.bimi-error-missing-a\": \"Enregistrer une valeur \\xE0 d\\xE9finir\",\n \"card.bimi.errors.bimi-error-missing-l\": \"La valeur de l'enregistrement doit \\xEAtre d\\xE9finie\",\n \"card.bimi.errors.bimi-error-missing-v\": \"La valeur de l'enregistrement v doit \\xEAtre d\\xE9finie\",\n \"card.bimi.errors.bimi-error-unknown\": \"erreur inconnue\",\n \"card.bimi.errors.bimi-error-unsupported-values\": \"La valeur de l'enregistrement v doit \\xEAtre d\\xE9finie\",\n \"card.bimi.logoErrors.invalid-svg_md\": \"**[](VMC#:glossary)** SVG non valide. Le logo du certificat ne peut pas \\xEAtre converti en un SVG valide.\",\n \"card.bimi.logoErrors.invalid-svg-attribute_md\": \"**[](VMC#:glossary)** Attribut SVG invalide trouv\\xE9.\",\n \"card.bimi.logoErrors.invalid-svg-attribute-xy_md\": \"**[](VMC#:glossary)** Attribut invalide. **x** et/ou **y** ne sont pas autoris\\xE9s\",\n \"card.bimi.logoErrors.invalid-svg-content-type_md\": \"**[](VMC#:glossary)** Type de contenu SVG invalide. Doit \\xEAtre **image/svg+xml**\",\n \"card.bimi.logoErrors.invalid-svg-element-foreign-object_md\": \"**[](VMC#:glossary)** \\xC9l\\xE9ment SVG **foreing-object** invalide trouv\\xE9.\",\n \"card.bimi.logoErrors.invalid-svg-element-image_md\": \"**[](VMC#:glossary)** \\xC9l\\xE9ment SVG **image** invalide trouv\\xE9.\",\n \"card.bimi.logoErrors.invalid-svg-element-link_md\": \"**[](VMC#:glossary)** \\xC9l\\xE9ment SVG **link** invalide trouv\\xE9.\",\n \"card.bimi.logoErrors.invalid-svg-element-script_md\": \"**[](VMC#:glossary)** \\xC9l\\xE9ment SVG **script** invalide trouv\\xE9.\",\n \"card.bimi.logoErrors.invalid-svg-element-style_md\": \"**[](VMC#:glossary)** \\xC9l\\xE9ment SVG **style** invalide trouv\\xE9.\",\n \"card.bimi.logoErrors.invalid-svg-id-name_md\": \"**[](VMC#:glossary)** L'attribut id a un nom invalide.\",\n \"card.bimi.logoErrors.invalid-svg-missing-title_md\": \"**[](VMC#:glossary)** Titre manquant dans le svg.\",\n \"card.bimi.logoErrors.invalid-svg-profile_md\": \"**[](VMC#:glossary)** Profil SVG invalide. Doit \\xEAtre **tiny-ps**\",\n \"card.bimi.logoErrors.invalid-svg-reference_md\": \"**[](VMC#:glossary)** R\\xE9f\\xE9rence invalide dans le svg.\",\n \"card.bimi.logoErrors.invalid-svg-root-element_md\": \"**[](VMC#:glossary)** \\xC9l\\xE9ment root invalide. Doit \\xEAtre **svg**\",\n \"card.bimi.logoErrors.invalid-svg-size_md\": \"**[](VMC#:glossary)** Taille invalide. Le SVG doit \\xEAtre jusqu'\\xE0 **32k**\",\n \"card.bimi.logoErrors.invalid-svg-version_md\": \"**[](VMC#:glossary)** Version SVG invalide. Devrait \\xEAtre **1.2**\",\n \"card.bimi.logoErrors.invalid-xml-12_md\": '**[](VMC#:glossary)** Version XML invalide \"1.2\"; Devrait \\xEAtre **1.0**',\n \"card.bimi.logoErrors.logo-and-evidence-mismatch_md\": \"**[](VMC#:glossary)** Logo sur l'enregistrement et sur le certificat ne correspondent pas\",\n \"card.bimi.logoErrors.logo-extract-error_md\": \"**[](VMC#:glossary)** Erreur lors de l'extraction du logo\",\n \"card.bimi.logoErrors.unknown-svg-error_md\": \"**[](VMC#:glossary)** Erreur inconnue lors de la validation du SVG\",\n \"card.bimi.no-txt-published-policy-on-domain_md\": \"Aucun [](TXT_RECORD#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"card.bimi.pemErrors.cert-bad-date_md\": \"**[](VMC#:glossary)** Le certificat a expir\\xE9\",\n \"card.bimi.pemErrors.cert-bad-signature_md\": \"**[](VMC#:glossary)** Le certificat a une mauvaise signature\",\n \"card.bimi.pemErrors.cert-not-file_md\": \"**[](VMC#:glossary)** Le certificat n'est pas un fichier\",\n \"card.bimi.pemErrors.cert-not-found_md\": \"**[](VMC#:glossary)** Certificat non trouv\\xE9\",\n \"card.bimi.pemErrors.cert-not-https_md\": \"**[](VMC#:glossary)** Le certificat n'utilise pas le protocole HTTPS\",\n \"card.bimi.pemErrors.cert-not-pem_md\": \"**[](VMC#:glossary)** Le certificat n'est pas un fichier PEM\",\n \"card.bimi.pemErrors.cert-not-url_md\": \"**[](VMC#:glossary)** Le certificat n'est pas une url\",\n \"card.bimi.pemErrors.cert-not-valid_md\": \"**[](VMC#:glossary)** Le certificat n'est pas valide\",\n \"card.bimi.pemErrors.cert-unknown-error_md\": \"**[](VMC#:glossary)** Le certificat a une erreur inconnue\",\n \"card.bimi.record-declination_md\": \"**[](BIMI_RECORD#:glossary)** Pr\\xE9senter et contenir une **d\\xE9claration valide de publication**\",\n \"card.bimi.record-failed_md\": \"**[](BIMI_RECORD#:glossary)** **Pr\\xE9sent** mais avec des erreurs\",\n \"card.bimi.record-info_md\": \"BIMI exige que les domaines soient conformes \\xE0 DMARC, ce qui signifie une politique DMARC minimale de **p=quarantine at pct=100 (and sp <> none)** [Apprenez comment r\\xE9soudre ce probl\\xE8me](https://community.redsift.com/s/article/000001196)\",\n \"card.bimi.record-invalid_md\": \"**[](BIMI_RECORD#:glossary)** **est invalide**\",\n \"card.bimi.record-missing_md\": \"**[](BIMI_RECORD#:glossary)** **Missing.** [Learn how to fix it](https://community.redsift.com/s/article/000001130)\",\n \"card.bimi.record-no-cert_md\": \"**[](BIMI_RECORD#:glossary)** **Certificat non trouv\\xE9**\",\n \"card.bimi.record-passed_md\": \"**[](BIMI_RECORD#:glossary)** **Pr\\xE9sent et conforme**\",\n \"card.bimi.record-status-title\": \"Statut de l'enregistrement BIMI\",\n \"card.bimi.record-svg-added-from-itag-invalid_md\": \"**[](BIMI_RECORD#:glossary)** image avec des erreurs de **[](ITAG#:glossary)** [svg-url]({url})\",\n \"card.bimi.record-svg-added-from-itag-valid_md\": \"**[](BIMI_RECORD#:glossary)** ajout\\xE9 avec succ\\xE8s \\xE0 partir de **[](ITAG#:glossary)** [svg-url]({url})\",\n \"card.bimi.record-title\": \"Enregistrement BIMI\",\n \"card.bimi.record-unknown-error_md\": \"**[](BIMI_RECORD#:glossary)** **Pr\\xE9sent avec des erreurs**\",\n \"card.bimi.safe-svg-title\": \"SVG s\\xFBr\",\n \"card.bimi.svg-error-fallback_md\": \"**[](VMC#:glossary)** {error}\",\n \"card.bimi.svg-missing-title_md\": \"**[](BIMI_RECORD#:glossary) Logo manquant:** SVG introuvable dans le dossier BIMI\",\n \"card.bimi.txt-published-policy-on-domain_md\": \"[](TXT_RECORD#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"card.bimi.vmc-correctly-title_md\": \"**[](VMC#:glossary)** certificat de **[](ATAG#:glossary)** [pem-url]({url}) est valide\",\n \"card.bimi.vmc-invalid-title_md\": \"**[](VMC#:glossary)** certificat de **[](ATAG#:glossary)** [pem-url]({url}) est invalide\",\n \"card.bimi.vmc-missing-title_md\": \"**[](VMC#:glossary) certificat manquant (actuellement facultatif)** [Lean comment l'ajouter](https://community.redsift.com/s/article/000001130)\",\n \"card.bimi.vmc-not-vmc-title_md\": \"**[](VMC#:glossary)** certificat de **[](ATAG#:glossary)** [pem-url]({url}) n'est pas un VMC\",\n \"card.bimi.vmc-title\": \"Certificat VMC\",\n \"card.bimi.vmc.assertionMark_md\": \"**Marque d'assertion :** {assertionMark}\",\n \"card.bimi.vmc.expired-date_md\": \"Expir\\xE9 le {date}\",\n \"card.bimi.vmc.expiry-date_md\": \"**Expire le:** {date} ({daysLeft} jours restants)\",\n \"card.bimi.vmc.issuer_md\": \"**Issuer : {issuer}**\",\n \"card.bimi.vmc.trademarkAuthority_md\": \"**Autorit\\xE9 de la marque : {trademarkAuthority}**\",\n \"card.bimi.vmc.valid-for-domain_md\": \"**Valide pour les domaines :** `{domains}`\",\n // BIMI section titles\n \"section-titles.bimi-domain\": \"Domaines DMARC\",\n \"section-titles.bimi-policy\": \"Votre politique BIMI\",\n // Domain Analyzer DKIM keys\n \"card.dkim.cname-record-published-on-dkim-url_md\": \"[](CNAME_RECORD#:glossary) publi\\xE9 sur `{selector}._domainkey.{signerDomain}`\",\n \"card.dkim.no-selectors-found_md\": \"Aucun s\\xE9lecteur DKIM n'a \\xE9t\\xE9 trouv\\xE9 pour ce domaine. Veuillez ajouter vos s\\xE9lecteurs DKIM pour commencer la surveillance.\",\n \"card.dkim.no-txt-record-published-at_md\": \"Aucun [](TXT_RECORD#:glossary) publi\\xE9 \\xE0 `{domain}`.\",\n \"card.dkim.selector\": \"S\\xE9lecteur\",\n \"card.dkim.selector-statuses.fail_one\": \"{count} s\\xE9lecteur \\xE9chou\\xE9\",\n \"card.dkim.selector-statuses.fail_other\": \"{count} s\\xE9lecteurs \\xE9chou\\xE9s\",\n \"card.dkim.selector-statuses.pass_one\": \"{count} s\\xE9lecteur r\\xE9ussi\",\n \"card.dkim.selector-statuses.pass_other\": \"{count} s\\xE9lecteurs r\\xE9ussis\",\n \"card.dkim.selector-statuses.warning_one\": \"{count} s\\xE9lecteur avec des avertissements\",\n \"card.dkim.selector-statuses.warning_other\": \"{count} s\\xE9lecteurs avec des avertissements\",\n \"card.dkim.title\": \"S\\xE9lecteur DKIM\",\n // Domain Analyzer DKIM section titles\n \"section-titles.dkim-selector-records\": \"Enregistrements DNS DKIM\",\n \"section-titles.dkim-selector-details\": \"Configuration de la cl\\xE9\",\n \"section-titles.dkim-policy\": \"Votre politique DKIM\",\n // Domain Analyzer DKIM issue status detail keys\n \"statusDetails.no-dkim-public-key\": \"Aucune cl\\xE9 publique DKIM trouv\\xE9e\",\n \"statusDetails.invalid-dkim-public-key\": \"La cl\\xE9 publique DKIM est invalide\",\n \"statusDetails.invalid-dkim-algorithm\": \"Algorithme DKIM invalide\",\n \"statusDetails.invalid-dkim-version\": \"Version DKIM invalide\",\n \"statusDetails.missing-dkim-version\": \"La version DKIM est manquante\",\n \"statusDetails.weak-dkim\": \"La cl\\xE9 DKIM est faible (moins de 1024 bits)\",\n \"statusDetails.malformed-dkim\": \"L'enregistrement DKIM est malform\\xE9\",\n \"statusDetails.missing-dkim-v\": \"La balise de version DKIM est manquante\",\n \"statusDetails.duplicate-dkim\": \"Enregistrement DKIM en double trouv\\xE9\",\n \"statusDetails.no-dkim\": \"Aucun enregistrement DKIM trouv\\xE9\",\n \"statusDetails.missing-dkim\": \"L'enregistrement DKIM est manquant\",\n \"statusDetails.servfail-dkim\": \"\\xC9chec du serveur DNS lors de la recherche de l'enregistrement DKIM\",\n // Domain Analyzer SPF keys\n \"card.spf.passed_md\": \"**[](SPF#:glossary) authentification r\\xE9ussie.**\",\n \"card.spf.warnings_md\": \"**[](SPF#:glossary) probl\\xE8mes d'authentification d\\xE9tect\\xE9s :**\",\n \"card.spf.failed_md\": \"**[](SPF#:glossary) authentification \\xE9chou\\xE9e.**\",\n \"card.spf.has-dynamic-spf\": \"Utilisation du SPF dynamique\",\n \"card.spf.dns-count-lookup_md\": \"{count}/10 Recherches SPF\",\n \"card.spf.dns-count-lookup-greater-10_md\": \"**Les recherches SPF d\\xE9passent la limite de 10, ce qui entra\\xEEne un \\xE9chec SPF. Consultez notre fonctionnalit\\xE9 Dynamic SPF pour trouver une solution!**\",\n \"card.spf.dns-count-lookup-greater-10_md_no-dynamic-services\": \"**Les recherches SPF d\\xE9passent la limite de 10, ce qui entra\\xEEne un \\xE9chec SPF. Consultez notre fonctionnalit\\xE9 Dynamic SPF pour trouver une solution!**\",\n \"card.spf.dns-count-lookup-greater-10_md_has-external-includes\": \"**Les recherches SPF d\\xE9passent la limite de 10, ce qui entra\\xEEne un \\xE9chec SPF. Envisagez d'utiliser le SPF dynamique pour consolider vos includes.**\",\n \"card.spf.dns-count-lookup-greater-10_md_no-external-includes\": \"**Les recherches SPF d\\xE9passent la limite de 10, ce qui entra\\xEEne un \\xE9chec SPF.**\",\n \"card.spf.dns-count-lookup-warning_md\": \"Le nombre de recherches SPF approche de la limite de 10.\",\n \"card.spf.dns-count-lookup-warning_md_no-dynamic-services\": \"Le nombre de recherches SPF approche de la limite de 10. Consultez notre fonctionnalit\\xE9 Dynamic SPF pour trouver une solution!\",\n \"card.spf.dns-count-lookup-warning_md_has-external-includes\": \"Le nombre de recherches SPF approche de la limite de 10. Envisagez d'utiliser le SPF dynamique pour consolider vos includes.\",\n \"card.spf.dns-count-lookup-warning_md_no-external-includes\": \"Le nombre de recherches SPF approche de la limite de 10.\",\n \"card.spf.dns-count-void-lookups_md\": \"{count}/2 Recherches nulles\",\n \"card.spf.txt-published-policy-on-domain_md\": \"[](TXT_RECORD#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"card.spf.no-txt-published-policy-on-domain_md\": \"Aucun [](TXT_RECORD#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"card.subdo.found-warning_one\": \"{count} exp\\xE9diteur de sous-domaine d\\xE9tect\\xE9\",\n \"card.subdo.found-warning_other\": \"{count} exp\\xE9diteurs de sous-domaine d\\xE9tect\\xE9s\",\n \"card.subdo.button-name\": \"Voir dans le v\\xE9rificateur SPF\",\n \"card.subdo.spf-subdo-poisoned_md_one\": \"**{count}** inclusion compromise d\\xE9tect\\xE9e\",\n \"card.subdo.spf-subdo-poisoned_md_other\": \"**{count}** inclusions compromises d\\xE9tect\\xE9es\",\n \"card.threat-int.from-domain.found_md\": \"[](FROM#:glossary) {code} a \\xE9t\\xE9 trouv\\xE9 dans la base de donn\\xE9es {length}. Menaces list\\xE9es ci-dessous :\",\n \"card.threat-int.from-domain.not-found_md\": \"[](FROM#:glossary) {code} n'a **pas** \\xE9t\\xE9 trouv\\xE9 dans une base de donn\\xE9es.\",\n \"card.threat-int.sender-ip.found_md\": \"[](SENDER_IP#:glossary) {code} a \\xE9t\\xE9 trouv\\xE9 dans la base de donn\\xE9es {length}. Menaces list\\xE9es ci-dessous :\",\n \"card.threat-int.sender-ip.not-found_md\": \"[](SENDER_IP#:glossary) {code} n'a **pas** \\xE9t\\xE9 trouv\\xE9 dans une base de donn\\xE9es.\",\n \"card.urls.description\": \"Affiche toutes les URL extraites de l'e-mail. Ceci est utile si vous avez besoin de vous abonner via un lien au service que vous testez.\",\n \"card.urls.not-found_md\": \"Aucun URL n'a \\xE9t\\xE9 trouv\\xE9 dans ce courriel.\",\n \"card.urls.url_md\": \"[{url}]({url})\",\n \"extracted-email\": \"Extrait de votre courriel\",\n \"investigate:card.dmarc.align-dkim-fail_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) et [](FROM#:glossary) ne sont pas align\\xE9s. La politique est [{policy}](DKIM_ALIGNMENT#:glossary).\",\n \"investigate:card.dmarc.align-dkim-identical-no-policy_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) et [](FROM#:glossary) sont align\\xE9s car ils sont identiques. L'e-mail serait conforme s'il existait une politique [DMARC](DMARC#:glossary) valide.\",\n \"investigate:card.dmarc.align-dkim-no-policy_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) et [](FROM#:glossary) ne sont pas identiques. L'alignement ne peut pas \\xEAtre d\\xE9termin\\xE9 sans politique [DMARC](DMARC#:glossary).\",\n \"investigate:card.dmarc.align-dkim_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) et [](FROM#:glossary) sont align\\xE9s. La politique est [{policy}](DKIM_ALIGNMENT#:glossary).\",\n \"investigate:card.dmarc.align-spf-fail_md\": \"[](SPF_DOMAIN#:glossary) et [](FROM#:glossary) ne sont pas align\\xE9s. La politique est [{policy}](SPF_ALIGNMENT#:glossary).\",\n \"investigate:card.dmarc.align-spf-identical-no-policy_md\": \"[](SPF_DOMAIN#:glossary) et [](FROM#:glossary) sont align\\xE9s car ils sont identiques. L'e-mail serait conforme s'il existait une politique [DMARC](DMARC#:glossary) valide.\",\n \"investigate:card.dmarc.align-spf-no-policy_md\": \"[](SPF_DOMAIN#:glossary) et [](FROM#:glossary) ne sont pas identiques. L'alignement ne peut pas \\xEAtre d\\xE9termin\\xE9 sans politique [DMARC](DMARC#:glossary).\",\n \"investigate:card.dmarc.align-spf_md\": \"[](SPF_DOMAIN#:glossary) et [](FROM#:glossary) sont align\\xE9s. La politique est [{policy}](SPF_ALIGNMENT#:glossary).\",\n \"investigate:card.dmarc.all-emails-reported-only_md\": \"DMARC configur\\xE9 en mode rapport uniquement. Tous les courriels seront uniquement [REPORTED](DMARC_POLICY#:glossary).\",\n \"investigate:card.dmarc.all-emails-reported_md\": \"Tous les courriels seront [REPORTED](DMARC_POLICY#:glossary).\",\n \"investigate:card.dmarc.bad-policy_md_one\": \"**Le [FULL](DMARC_POLICY#:glossary) pr\\xE9sente l'erreur de syntaxe suivante:**.\",\n \"investigate:card.dmarc.bad-policy_md_other\": \"**Le [FULL](DMARC_POLICY#:glossary) pr\\xE9sente l'erreur de syntaxe suivante:**.\",\n \"investigate:card.dmarc.category-policy-good_md\": \"La politique de votre DNS est conforme \\xE0 la sp\\xE9cification DMARC.\",\n \"investigate:card.dmarc.dkim-failed_md\": \"**[](DKIM#:glossary) authentification \\xE9chou\\xE9e.**\",\n \"investigate:card.dmarc.dkim-none_md\": \"**[](DKIM#:glossary) authentification \\xE9chou\\xE9e.**\",\n \"investigate:card.dmarc.dkim-passed_md\": \"**[](DKIM#:glossary) authentification r\\xE9ussie.**\",\n \"investigate:card.dmarc.dmarc-failed_md\": \"Les param\\xE8tres [](DMARC#:glossary) **ne sont pas** conformes \\xE0 BIMI\",\n \"investigate:card.dmarc.dmarc-no-rua_md\": \"[](DMARC#:glossary) n'a pas d'**adresse de rapport agr\\xE9g\\xE9** (rua).\",\n \"investigate:card.dmarc.dmarc-passed_md\": \"[](DMARC#:glossary) **r\\xE9ussi**\",\n \"investigate:card.dmarc.dmarc-passed-no-rua_md\": \"[](DMARC#:glossary) est conforme \\xE0 BIMI **MAIS** n'a pas d'**adresse de rapport agr\\xE9g\\xE9** (rua).\",\n \"investigate:card.dmarc.dmarc-policy_md\": \"**[PERCENT {percent}%](PCT#:glossary)** des courriels non autoris\\xE9s seront soumis \\xE0 la politique **[{policy}](DMARC_POLICY#:glossary)**.\",\n \"investigate:card.dmarc.dmarc-policy-partial_md\": \"Le domaine n'est que partiellement prot\\xE9g\\xE9. Seulement **[PERCENT {percent}%](PCT#:glossary)** des courriels non autoris\\xE9s seront soumis \\xE0 la politique **[{policy}](DMARC_POLICY#:glossary)**.\",\n \"investigate:card.dmarc.full-rejection_md\": \"**100%** des courriels non autoris\\xE9s avec le [](FROM#:glossary) `{domain}` seront **rejet\\xE9s**.\",\n \"investigate:card.dmarc.full-rejection-subdomain-weak_md\": \"**100%** des courriels non autoris\\xE9s avec le [](FROM#:glossary) `{domain}` seront **rejet\\xE9s**, mais les sous-domaines utilisent une politique plus faible (sp={sp}), les laissant vuln\\xE9rables \\xE0 l'usurpation.\",\n \"investigate:card.dmarc.misplaced-bad-policy_md\": \"**Le [FULL](DMARC_POLICY#:glossary) est mal plac\\xE9 et a une erreur de syntaxe:**\",\n \"investigate:card.dmarc.misplaced-policy_md\": \"**Le [FULL](DMARC_POLICY#:glossary) est mal plac\\xE9.\",\n \"investigate:card.dmarc.no-policy_md\": \"**Aucune [FULL](DMARC_POLICY#:glossary) publi\\xE9e sur le domaine**\\n\\n**`{policyDomain}`**\",\n \"investigate:card.dmarc.no-txt-published-policy-on-domain_md\": \"Aucun [](TXT_RECORD#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"investigate:card.dmarc.permerror-no-rua_md\": \"Aucun URI de rapport valide ([](RUA#:glossary)) n'est pr\\xE9sent, les destinataires ignoreront enti\\xE8rement le traitement DMARC.\",\n \"investigate:card.dmarc.permerror-rua-fallback_md\": \"Un URI de rapport valide ([](RUA#:glossary)) est pr\\xE9sent, les destinataires agiront comme si la politique \\xE9tait **p=none**.\",\n \"investigate:card.dmarc.policy-no-rua_md\": \"**[](RUA#:glossary) n'est pas d\\xE9fini.**\",\n \"investigate:card.dmarc.policy-no-ruf_md\": \"[](RUF#:glossary) n'est pas d\\xE9fini. Les rapports d'\\xE9chec offrant une visibilit\\xE9 plus d\\xE9taill\\xE9e des probl\\xE8mes ne seront pas envoy\\xE9s.\",\n \"investigate:card.dmarc.policy-none-pct-0_md\": \"Aucun rapport ne sera envoy\\xE9 avec cette politique, car le taux d'\\xE9chantillonnage [](PCT#:glossary) est fix\\xE9 \\xE0 `0`.\",\n \"investigate:card.dmarc.policy-not-none-pct-0_md\": \"Tous les emails **non autoris\\xE9s** seront d\\xE9livr\\xE9s aux destinataires bien que la politique soit d\\xE9finie sur [{policy}](DMARC_POLICY#:glossary), parce que le taux d'\\xE9chantillonnage [](PCT#:glossary) est d\\xE9fini sur `0`.\",\n \"investigate:card.dmarc.policy-remaining-emails-pct-reject_md\": \"Les **{remainingPercent}%** restants de courriels non autoris\\xE9s seront soumis \\xE0 la politique de **mise en quarantaine**.\",\n \"investigate:card.dmarc.policy-remaining-emails-pct-quarantine_md\": \"Les **{remainingPercent}%** restants de courriels non autoris\\xE9s seront **livr\\xE9s normalement**.\",\n \"investigate:card.dmarc.receiver-does-not-accept-reports-both\": \"Un ou plusieurs destinataires de votre RUA et RUF ne sont pas configur\\xE9s pour accepter les rapports DMARC.\",\n \"investigate:card.dmarc.receiver-does-not-accept-reports-rua\": \"Un ou plusieurs destinataires de votre RUA ne sont pas configur\\xE9s pour accepter les rapports DMARC.\",\n \"investigate:card.dmarc.receiver-does-not-accept-reports-ruf\": \"Un ou plusieurs destinataires de votre RUF ne sont pas configur\\xE9s pour accepter les rapports DMARC.\",\n \"investigate:card.dmarc.receiver-does-not-accept-reports-rua-uri_md\": \"**{uri}** n'est pas configur\\xE9 pour accepter les rapports agr\\xE9g\\xE9s DMARC.\",\n \"investigate:card.dmarc.receiver-does-not-accept-reports-ruf-uri_md\": \"**{uri}** n'est pas configur\\xE9 pour accepter les rapports d'\\xE9chec DMARC.\",\n \"investigate:card.dmarc.setup-dmarc_md\": \"Veuillez configurer un enregistrement DMARC comme d\\xE9crit [ici](https://community.redsift.com/s/article/000001195) pour s\\xE9curiser votre configuration de courrier \\xE9lectronique.\",\n \"investigate:card.dmarc.spf-failed_md\": \"**[](SPF#:glossary) authentification \\xE9chou\\xE9e.**\",\n \"investigate:card.dmarc.spf-passed_md\": \"**[](SPF#:glossary) authentification r\\xE9ussie.**\",\n \"investigate:card.dmarc.subdomain-no-explicit-policy_md\": \"Cette politique DMARC s'applique \\xE0 tous les courriels envoy\\xE9s depuis des sous-domaines de `{domain}.{tld}`, par exemple `mail.{domain}.{tld}`, lorsqu'aucune politique DMARC explicite n'est d\\xE9finie pour le sous-domaine.\",\n \"investigate:card.dmarc.subdomain-no-policy_md\": \"**100%** des courriels non autoris\\xE9s provenant des sous-domaines de `{domain}` seront livr\\xE9s (signal\\xE9s uniquement), sauf s'ils ont publi\\xE9 leur propre politique DMARC plus stricte.\",\n \"investigate:card.dmarc.subdomain-full-rejection_md\": \"**100%** des courriels non autoris\\xE9s avec le [](FROM#:glossary) des sous-domaines de `{domain}` seront **rejet\\xE9s** sauf s'ils ont publi\\xE9 leur propre politique DMARC plus faible.\",\n \"investigate:card.dmarc.subdomain-full-quarantine_md\": \"**100%** des courriels non autoris\\xE9s avec le [](FROM#:glossary) des sous-domaines de `{domain}` seront **mis en quarantaine** sauf s'ils ont publi\\xE9 leur propre politique DMARC.\",\n \"investigate:card.dmarc.subdomain-partial-rejection_md\": \"Les sous-domaines ne sont que partiellement prot\\xE9g\\xE9s, sauf s'ils ont publi\\xE9 leur propre politique DMARC plus stricte. Seulement **{pct}%** des courriels non autoris\\xE9s seront soumis \\xE0 la politique de **rejet**. Les **{remainingPercent}%** restants seront soumis \\xE0 la politique de **mise en quarantaine**.\",\n \"investigate:card.dmarc.subdomain-partial-quarantine_md\": \"Les sous-domaines ne sont que partiellement prot\\xE9g\\xE9s, sauf s'ils ont publi\\xE9 leur propre politique DMARC plus stricte. Seulement **{pct}%** des courriels non autoris\\xE9s seront soumis \\xE0 la politique de **mise en quarantaine**. Les **{remainingPercent}%** restants seront **livr\\xE9s normalement**.\",\n \"investigate:card.dmarc.subdomain-partial-no-policy_md\": \"Seulement **{pct}%** des courriels non autoris\\xE9s provenant des sous-domaines de `{domain}` seront livr\\xE9s (signal\\xE9s uniquement), sauf s'ils ont publi\\xE9 leur propre politique DMARC plus stricte.\",\n \"investigate:card.dmarc.subdomain-policy-not-none_md\": \"La politique DMARC '{subpolicy}' est appliqu\\xE9e aux courriers envoy\\xE9s depuis les sous-domaines de `{domain}`, qui n'ont pas leur propre jeu d'enregistrements de politique DMARC.\",\n \"investigate:card.dmarc.subdomain-policy-not-none_weaker_md\": \"**sp={subpolicyL}** est plus faible que **p={policyL}**. La politique DMARC '{subpolicy}' est appliqu\\xE9e pour les mails envoy\\xE9s depuis les sous-domaines de `{domain}` qui n'ont pas leurs propres enregistrements de politique DMARC.\",\n \"investigate:card.dmarc.summary-domain-reject-full-sp-weak\": \"Le domaine dispose d'une politique de rejet, mais les sous-domaines utilisent une politique plus faible, les rendant vuln\\xE9rables \\xE0 l'usurpation.\",\n \"investigate:card.dmarc.summary-domain-reject-partial-sp-weak\": \"Le domaine ne rejette que {pct} % des e-mails non autoris\\xE9s, et les sous-domaines utilisent une politique plus faible, les rendant vuln\\xE9rables \\xE0 l'usurpation.\",\n \"investigate:card.dmarc.summary-domain-quarantine-full-sp-weak\": \"Le domaine dispose d'une politique de mise en quarantaine, mais les sous-domaines utilisent une politique plus faible, les rendant vuln\\xE9rables \\xE0 l'usurpation.\",\n \"investigate:card.dmarc.summary-domain-quarantine-partial-sp-weak\": \"Le domaine ne met en quarantaine que {pct} % des e-mails non autoris\\xE9s, et les sous-domaines utilisent une politique plus faible, les rendant vuln\\xE9rables \\xE0 l'usurpation.\",\n // Summary box strings for email compliance results\n \"investigate:card.dmarc.summary-email-pass\": \"L'e-mail est conforme \\xE0 DMARC. Il a pass\\xE9 \\xE0 la fois DKIM et SPF.\",\n \"investigate:card.dmarc.summary-email-fail-both\": \"L'e-mail n'est pas conforme \\xE0 DMARC. Ni DKIM ni SPF n'ont pass\\xE9.\",\n \"investigate:card.dmarc.summary-email-fail-dkim\": \"L'e-mail n'est pas conforme \\xE0 DMARC. DKIM n'a pas pass\\xE9.\",\n \"investigate:card.dmarc.summary-email-fail-spf\": \"L'e-mail n'est pas conforme \\xE0 DMARC. SPF n'a pas pass\\xE9.\",\n // Summary box strings for permerror (RFC 7489 §6.6.3)\n \"investigate:card.dmarc.summary-email-permerror\": \"La conformit\\xE9 de l'e-mail n'a pas pu \\xEAtre d\\xE9termin\\xE9e car l'enregistrement DMARC contient une erreur permanente et aucun URI de rapport (rua) n'est configur\\xE9.\",\n \"investigate:card.dmarc.summary-domain-permerror\": \"La politique DMARC contient une erreur permanente et ne peut pas \\xEAtre appliqu\\xE9e. Aucun URI de rapport (rua) n'est configur\\xE9, les destinataires ignoreront enti\\xE8rement le traitement DMARC.\",\n \"investigate:card.dmarc.summary-domain-permerror-rua-fallback\": \"La politique DMARC contient des erreurs, mais un URI de rapport valide (rua) est pr\\xE9sent. Les destinataires se rabattront sur p=none (mode surveillance uniquement).\",\n \"investigate:card.dmarc.txt-published-on-policy-domain_md\": \"[](TXT_RECORD#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"investigate:card.dmarc.txt-published-policy-on-domain_md\": \"[](TXT_RECORD#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"investigate:card.dmarc.txt-published-policy-on-domain_md_one\": \"[](TXT_RECORD#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"investigate:card.dmarc.txt-published-policy-on-domain_md_other\": \"{count} [](TXT_RECORDS#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"investigate:card.spf.dns-count-lookup-greater-10_md\": \"**Les recherches SPF d\\xE9passent la limite de 10, ce qui entra\\xEEne un \\xE9chec SPF. Consultez notre fonctionnalit\\xE9 Dynamic SPF pour trouver une solution!**\",\n \"investigate:card.spf.dns-count-lookup_md\": \"{count}/10 Recherches SPF\",\n \"investigate:card.spf.dns-count-lookup_md_one\": \"{count}/10 Recherche SPF\",\n \"investigate:card.spf.dns-count-lookup_md_other\": \"{count}/10 Recherches SPF\",\n \"investigate:card.spf.dns-count-void-lookups_md\": \"{count}/2 Recherches nulles\",\n \"investigate:card.spf.dns-count-void-lookups_md_one\": \"{count}/2 Recherche nulle\",\n \"investigate:card.spf.dns-count-void-lookups_md_other\": \"{count}/2 Recherches nulles\",\n \"investigate:card.spf.eval-error-record-not-found_md\": \"**Aucun enregistrement SPF n'a \\xE9t\\xE9 trouv\\xE9**\",\n \"investigate:card.spf.failed_md\": \"**L'authentification [](SPF#:glossary) a \\xE9chou\\xE9.**\",\n \"investigate:card.spf.passed_md\": \"**Authentification [](SPF#:glossary) r\\xE9ussie.**\",\n \"investigate:card.spf.spf-all-and-redirect_md\": \"Toute **redirection** est ignor\\xE9e s'il y a un m\\xE9canisme **all**.\",\n \"investigate:card.spf.spf-all-not-last_md\": \"Toute donn\\xE9e apr\\xE8s le **all** est ignor\\xE9e.\",\n \"investigate:card.spf.spf-all-plus-warning_md\": \"Le m\\xE9canisme **+all** ne devrait pas \\xEAtre utilis\\xE9 car il autorise toutes les adresses IP d'envoi.\",\n \"investigate:card.spf.spf-all-question-mark-warning_md\": \"**?all** ne doit pas \\xEAtre utilis\\xE9 car il permet une r\\xE9ponse ambigu\\xEB.\",\n \"investigate:card.spf.spf-extra-spf-lookups_md\": \"Trop de recherches SPF. D\\xE9tails ci-dessous\",\n \"investigate:card.spf.spf-invalid-spf-header-include_md\": \"L'enregistrement SPF est invalide car il a un espace entre l'instruction include:.\",\n \"investigate:card.spf.spf-invalid-spf1-header_md\": \"Enregistrement SPF invalide\",\n \"investigate:card.spf.spf-multiple-all_md\": \"Plusieurs m\\xE9canismes **all** dans l'enregistrement SPF\",\n \"investigate:card.spf.spf-multiple-mx-providers_md\": \"Plusieurs fournisseurs de messagerie configur\\xE9s dans les enregistrements MX de ce domaine.\",\n \"investigate:card.spf.spf-multiple-spf_md\": \"Plusieurs enregistrements SPF trouv\\xE9s pour ce domaine\",\n \"investigate:card.spf.spf-no-all_md\": \"Il est recommand\\xE9 d'utiliser soit un modificateur **redirect** soit un m\\xE9canisme **all** pour terminer explicitement le traitement.\",\n \"investigate:card.spf.spf-no-spf_md\": \"Aucun SPF configur\\xE9 pour le domaine.\",\n \"investigate:card.spf.spf-recursive-include-spf_md\": \"L'inclusion SPF redondante peut \\xEAtre supprim\\xE9e car elle pointe vers votre propre domaine\",\n \"investigate:card.spf.spf-v-tag-duplicated-spf_md\": \"La balise de version est dupliqu\\xE9e.\",\n \"investigate:card.spf.warnings_md\": \"**[](SPF#:glossary) probl\\xE8mes d'authentification d\\xE9tect\\xE9s:**\",\n \"investigate:dkim-evaluation\": \"\\xC9valuation DKIM\",\n \"investigate:extracted-dns\": \"Extrait de votre configuration DNS\",\n \"investigate:extracted-dns-details\": \"D\\xE9tails de la configuration DNS extraits\",\n \"investigate:extracted-dns-short\": \"Extrait de votre DNS\",\n \"investigate:extracted-email\": \"Extrait de votre courriel\",\n \"investigate:fcrdns-evaluation\": \"\\xC9valuation FCrDNS\",\n \"investigate:retry-email_md\": \"**Veuillez renvoyer l'email!**\",\n \"investigate:temporary-error-setup\": \"Une erreur temporaire s'est produite lors de l'analyse de votre installation.\",\n \"retry-email_md\": \"**Veuillez renvoyer l'email!**\",\n \"section-titles.dkim-headers\": \"En-t\\xEAtes d'email\",\n \"section-titles.dkim-key\": \"Cl\\xE9 publique DKIM\",\n \"section-titles.dkim-signature\": \"Signature DKIM\",\n \"section-titles.dmarc-alignment\": \"V\\xE9rification de l'alignement DMARC\",\n \"section-titles.dmarc-authentication\": \"V\\xE9rification de l'authentification DMARC\",\n \"section-titles.dmarc-domain\": \"Domaines DMARC\",\n \"section-titles.dmarc-policy\": \"Votre politique DMARC\",\n \"section-titles.dmarc-policy-check\": \"V\\xE9rification de l'enregistrement de la politique DMARC\",\n \"section-titles.dmarc-policy-details\": \"Configuration de la politique\",\n \"section-titles.dnssec\": \"Statut DNSSEC\",\n \"section-titles.sender-information\": \"Informations sur l'exp\\xE9diteur\",\n \"section-titles.spf-policy\": \"Votre politique SPF\",\n \"section-titles.spf-policy-check\": \"V\\xE9rification de l'enregistrement de la politique SPF\",\n \"section-titles.tls-configuration\": \"Configuration TLS\",\n \"section-titles.urls-found\": \"URLs trouv\\xE9es\",\n \"signal-cards.tls.extracted.cipher_md\": \"[](CIPHER_SUITE#:glossary)\",\n \"signal-cards.tls.extracted.version_md\": \"Version [](TLS#:glossary)\",\n \"signal-cards.tls.info.cipher.error_md\": \"La suite de chiffrement `{cipher}` n'est pas s\\xE9curis\\xE9e.\",\n \"signal-cards.tls.info.cipher.good_md\": \"La suite de chiffrement est s\\xE9curis\\xE9e\",\n \"signal-cards.tls.info.cipher.learn_more_md\": \"Cliquez [ici](https://community.redsift.com/s/article/000001271) pour consulter notre article de base de connaissances sur les suites de chiffrement recommand\\xE9es.\",\n \"signal-cards.tls.info.cipher.unknown_md\": \"La suite de chiffrement est inconnue et ne peut pas \\xEAtre v\\xE9rifi\\xE9e comme s\\xE9curis\\xE9e.\",\n \"signal-cards.tls.info.cipher.warning_md\": \"La suite de chiffrement `{cipher}` doit \\xEAtre mise \\xE0 jour.\",\n \"signal-cards.tls.info.version.error_md\": \"[](SSL#:glossary){version} est utilis\\xE9, ce qui est consid\\xE9r\\xE9 comme non s\\xE9curis\\xE9\",\n \"signal-cards.tls.info.version.good_md\": \"La version TLS est s\\xE9curis\\xE9e ({version})\",\n \"signal-cards.tls.info.version.missing_md\": \"Vous n'utilisez pas TLS\",\n \"signal-cards.tls.info.version.missing_subtext\": \"En cons\\xE9quence, le contenu de votre message peut facilement \\xEAtre espionn\\xE9 par des personnes qui ne sont pas vos destinataires pr\\xE9vus.\",\n \"signal-cards.tls.info.version.unknown_md\": \"Version TLS inconnue ({value})\",\n \"signal-cards.tls.info.version.warning_md\": \"La version TLS doit \\xEAtre mise \\xE0 jour de {current} vers v1.2\",\n \"signal-description.THREATINV_DOMAIN_ANALYZER_NO_THREATS_md\": \"Le domaine a \\xE9t\\xE9 compar\\xE9 \\xE0 des bases de donn\\xE9es de spammeurs, d'agents de transfert de courrier web, de botnets, de phishers et de sources non r\\xE9put\\xE9es de confiance : aucune activit\\xE9 suspecte.\",\n \"signal-description.THREATINV_NO_THREATS_md\": \"Les r\\xE9sultats du contr\\xF4le Threat Intelligence permettent d'identifier les courriels suspects ou ceux qui devraient \\xEAtre bloqu\\xE9s. Ils mettent \\xE9galement en \\xE9vidence les probl\\xE8mes de d\\xE9livrabilit\\xE9 provenant de sources l\\xE9gitimes.\",\n \"temporary-error-setup\": \"Une erreur temporaire s'est produite lors de l'analyse de votre installation.\",\n unknown: \"Inconnu\",\n // -------------------------------------------------------------------------\n // Glossary labels (French)\n // -------------------------------------------------------------------------\n \"glossary.from\": \"De\",\n \"glossary.version\": \"Version\",\n \"glossary.mode\": \"Mode\",\n \"glossary.mx\": \"MX\",\n \"glossary.max-age\": \"\\xC2ge max.\",\n \"glossary.tls-rpt-record\": \"Enregistrement TLS-RPT\",\n \"glossary.mta-sts-record\": \"Enregistrement MTA-STS\",\n \"glossary.mta-sts-policy-file\": \"Fichier de politique MTA-STS\",\n \"glossary.dkim-signing-domain\": \"Domaine de signature DKIM\",\n \"glossary.spf-domain\": \"Domaine SPF\",\n \"glossary.spf-domains\": \"Domaines SPF\",\n // -------------------------------------------------------------------------\n // MTA-STS section titles + keys (French)\n // -------------------------------------------------------------------------\n \"section-titles.tls-rpt-dns-record\": \"Votre enregistrement DNS TLS-RPT\",\n \"section-titles.mta-sts-dns-record\": \"Votre enregistrement DNS MTA-STS\",\n \"section-titles.mta-sts-policy-config\": \"Configuration de votre politique MTA-STS\",\n \"signal-cards.mta-sts.title\": \"MTA-STS\",\n \"signal-cards.mta-sts.txt-published-policy-on-domain_md\": \"[](TXT_RECORD#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"signal-cards.mta-sts.no-txt-published-policy-on-domain_md\": \"Aucun [](TXT_RECORD#:glossary) publi\\xE9 sur `{policyDomain}`\",\n \"signal-cards.mta-sts.record-missing_md\": \"**[](MTA_STS_POLICY_FILE#:glossary)** **Manquant.** [Apprendre \\xE0 corriger](https://community.redsift.com/s/article/000001035)\",\n \"signal-cards.mta-sts.elements-missing_md\": \"**[](MTA_STS_POLICY_FILE#:glossary)** **Certains \\xE9l\\xE9ments manquants.** [Apprendre \\xE0 corriger](https://community.redsift.com/s/article/000001035)\",\n \"signal-cards.mta-sts.mta-policy-mode-invalid_md\": \"Le mode de la politique MTA-STS est d\\xE9fini sur **{mode}** ce qui est invalide\",\n \"signal-cards.mta-sts.mta-policy-version-invalid_md\": \"La version de la politique MTA-STS est d\\xE9finie sur **{version}** ce qui est invalide\",\n \"signal-cards.mta-sts.mta-certificate-at-risk_md\": \"Le certificat SSL ne peut pas \\xEAtre renouvel\\xE9 automatiquement\",\n \"signal-cards.mta-sts.mta-certificate-not-issued_md\": \"Le certificat SSL n'a pas encore \\xE9t\\xE9 \\xE9mis\",\n \"signal-cards.mta-sts.mta-certificate-add-to-dns\": \"Veuillez ajouter les entr\\xE9es ci-dessous \\xE0 votre enregistrement DNS pour garantir le renouvellement automatique du certificat SSL\",\n \"signal-cards.mta-sts.mta-certificate-add-to-caa\": \"Veuillez ajouter le CAA ci-dessous \\xE0 la liste CAA dans votre enregistrement DNS pour garantir le renouvellement automatique du certificat SSL\",\n \"signal-cards.mta-sts.certificate-expiry\": \"Le certificat expire : {expiry}\",\n // -------------------------------------------------------------------------\n // SubDo section title (French)\n // -------------------------------------------------------------------------\n \"section-titles.subdo-check\": \"V\\xE9rification de prise de contr\\xF4le de sous-domaine\",\n // -------------------------------------------------------------------------\n // AMP extracted items (French)\n // -------------------------------------------------------------------------\n \"extracted-dns-short\": \"Enregistrement DNS\",\n // -------------------------------------------------------------------------\n // Google/Yahoo Compliance sections (French)\n // -------------------------------------------------------------------------\n \"card.google-yahoo-compliance.section.spf-dkim.header\": \"SPF et DKIM\",\n \"card.google-yahoo-compliance.section.spf-dkim.spf.success_md\": \"[](SPF#:glossary) \\xE9valuation r\\xE9ussie\",\n \"card.google-yahoo-compliance.section.spf-dkim.spf.error_md\": \"[](SPF#:glossary) \\xE9valuation \\xE9chou\\xE9e\",\n \"card.google-yahoo-compliance.section.spf-dkim.dkim.success_md\": \"[](DKIM#:glossary) \\xE9valuation r\\xE9ussie\",\n \"card.google-yahoo-compliance.section.spf-dkim.dkim.error_md\": \"[](DKIM#:glossary) \\xE9valuation \\xE9chou\\xE9e\",\n \"card.google-yahoo-compliance.section.spf-dkim-alignment.header\": \"Alignement SPF ou DKIM\",\n \"card.google-yahoo-compliance.section.spf-dkim-alignment.align-spf.success_md\": \"[](SPF_DOMAIN#:glossary) et [](FROM#:glossary) sont align\\xE9s. La politique est [{policy}](SPF_ALIGNMENT#:glossary).\",\n \"card.google-yahoo-compliance.section.spf-dkim-alignment.align-spf.error_md\": \"[](SPF_DOMAIN#:glossary) et [](FROM#:glossary) ne sont pas align\\xE9s. La politique est [{policy}](SPF_ALIGNMENT#:glossary).\",\n \"card.google-yahoo-compliance.section.spf-dkim-alignment.align-dkim.success_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) Domaine de signature DKIM et [](FROM#:glossary) sont align\\xE9s. La politique est [{policy}](DKIM_ALIGNMENT#:glossary).\",\n \"card.google-yahoo-compliance.section.spf-dkim-alignment.align-dkim.error_md\": \"[](DKIM_SIGNING_DOMAIN#:glossary) Domaine de signature DKIM et [](FROM#:glossary) ne sont pas align\\xE9s. La politique est [{policy}](DKIM_ALIGNMENT#:glossary).\",\n \"card.google-yahoo-compliance.section.dmarc.header\": \"DMARC\",\n \"card.google-yahoo-compliance.section.dmarc.evaluation.success_md\": \"[](DMARC#:glossary) \\xE9valuation r\\xE9ussie\",\n \"card.google-yahoo-compliance.section.dmarc.evaluation.error_md\": \"[](DMARC#:glossary) \\xE9valuation \\xE9chou\\xE9e\",\n \"card.google-yahoo-compliance.section.dmarc.policy.success_md\": \"[](DMARC_POLICY#:glossary) {policy}.\",\n \"card.google-yahoo-compliance.section.dmarc.policy.error_md\": \"La politique **n'est pas d\\xE9finie**. Elle devrait \\xEAtre d\\xE9finie comme [](DMARC_POLICY#:glossary) none, quarantine ou reject.\",\n \"card.google-yahoo-compliance.section.fcrdns.header\": \"FCrDNS\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip.success_md\": \"[](SENDER_IP#:glossary) correspond \\xE0 l'[](A_RECORD#:glossary) du [](PTR_RECORD#:glossary) dans les deux directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip.error_md\": \"[](SENDER_IP#:glossary) ne correspond pas \\xE0 l'[](A_RECORD#:glossary) du [](PTR_RECORD#:glossary) dans les deux directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip.warning_md\": \"[](SENDER_IP#:glossary) ne correspond pas \\xE0 l'[](A_RECORD#:glossary) du [](PTR_RECORD#:glossary) dans les deux directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.ehlo.success_md\": \"Le [](EHLO#:glossary) correspond au [](PTR_RECORD#:glossary) de l'[](A_RECORD#:glossary) dans les deux directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.ehlo.error_md\": \"Le [](EHLO#:glossary) ne correspond pas au [](PTR_RECORD#:glossary) de l'[](A_RECORD#:glossary) dans les deux directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.ehlo.warning_md\": \"Le [](EHLO#:glossary) ne correspond pas au [](PTR_RECORD#:glossary) de l'[](A_RECORD#:glossary) dans les deux directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip-matches-ehlo-a-record.success_md\": \"[](SENDER_IP#:glossary) correspond \\xE0 l'[](A_RECORD#:glossary) du [](EHLO#:glossary) dans les deux directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip-matches-ehlo-a-record.error_md\": \"[](SENDER_IP#:glossary) ne correspond pas \\xE0 l'[](A_RECORD#:glossary) du [](EHLO#:glossary) dans les deux directions.\",\n \"card.google-yahoo-compliance.section.fcrdns.sender-ip-matches-ehlo-a-record.warning_md\": \"[](SENDER_IP#:glossary) ne correspond pas \\xE0 l'[](A_RECORD#:glossary) du [](EHLO#:glossary) dans les deux directions.\",\n \"card.google-yahoo-compliance.section.reputation.header\": \"Taux de spam\",\n \"card.google-yahoo-compliance.section.reputation.summary_md\": \"Exigence : **Taux de spam signal\\xE9 faible**\",\n \"card.google-yahoo-compliance.section.reputation.information_md\": \"Microsoft, Google et Yahoo exigent que les taux de spam soient inf\\xE9rieurs \\xE0 0,3 %. Pour v\\xE9rifier vos taux, consultez le [Support exp\\xE9diteur de Microsoft](https://sendersupport.olc.protection.outlook.com/pm/Postmaster), les [Outils Postmaster de Google](https://gmail.com/postmaster) ou le [programme de boucle de r\\xE9troaction de Yahoo](https://senders.yahooinc.com/complaint-feedback-loop/).\",\n \"card.google-yahoo-compliance.section.tls.header\": \"TLS\",\n \"card.google-yahoo-compliance.section.tls.evaluation.success_md\": \"[](TLS#:glossary) TLS ({version}) est utilis\\xE9.\",\n \"card.google-yahoo-compliance.section.tls.evaluation.warning_md\": \"[](TLS#:glossary) TLS ({version}) est obsol\\xE8te. TLS 1.2+ est requis pour la conformit\\xE9.\",\n \"card.google-yahoo-compliance.section.tls.evaluation.error_md\": \"[](TLS#:glossary) La connexion TLS **n'est pas** utilis\\xE9e.\",\n \"card.google-yahoo-compliance.section.one-click-unsub.header\": \"D\\xE9sabonnement en un clic\",\n \"card.google-yahoo-compliance.section.one-click-unsub.evaluation.success_md\": \"Le lien de d\\xE9sabonnement en un clic est pr\\xE9sent.\",\n \"card.google-yahoo-compliance.section.one-click-unsub.evaluation.error_md\": \"Le lien de d\\xE9sabonnement en un clic **n'est pas** pr\\xE9sent.\",\n \"card.google-yahoo-compliance.section.one-click-unsub.evaluation.warning\": \"Messages marketing et abonn\\xE9s uniquement : le d\\xE9sabonnement en un clic est manquant.\"\n }\n};\n\nexport { EXTRACTOR_STRINGS, GLOSSARY_LABELS };\n//# sourceMappingURL=chunk-JN5BEW4U.js.map\n//# sourceMappingURL=chunk-JN5BEW4U.js.map","/* istanbul ignore file */\nimport { EXTRACTOR_STRINGS } from '@redsift/signal-logic/i18n';\nimport enUS from './en-US.json';\nimport frFR from './fr-FR.json';\n\n/**\n * Add the 'investigate.' namespace prefix to all extractor string keys\n * so they align with the DS translation key convention.\n */\nfunction prefixKeys(strings: Record<string, string | string[] | null>): Record<string, string | string[] | null> {\n const result: Record<string, string | string[] | null> = {};\n for (const [key, value] of Object.entries(strings)) {\n result[`investigate.${key}`] = value;\n }\n return result;\n}\n\nconst mergedEnUS = { ...enUS, ...prefixKeys(EXTRACTOR_STRINGS['en-US']) };\nconst mergedFrFR = { ...frFR, ...prefixKeys(EXTRACTOR_STRINGS['fr-FR']) };\n\nexport default {\n 'en-US': mergedEnUS,\n 'fr-FR': mergedFrFR,\n} as const;\n\nexport type SignalCardsMessages = typeof mergedEnUS;\n","import { useLocalizedStringFormatter } from '@redsift/design-system';\nimport intlMessages from '../intl';\n\n/**\n * Type for signal card message keys (dot-notation paths into the translation object)\n * The formatter accepts any string key since keys are dynamically constructed at runtime\n */\nexport type SignalCardMessageKey = string;\n\n/**\n * Type for the signal card formatter return type\n * Uses string as key type since translation keys are constructed dynamically\n */\nexport type SignalCardFormatter = ReturnType<typeof useLocalizedStringFormatter<SignalCardMessageKey, string>>;\n\n/**\n * Hook to get the localized string formatter for Signal Cards\n * Uses React Aria's i18n system with Signal Cards translations\n *\n * Note: We use `as any` for intlMessages because:\n * 1. The translation file contains mixed value types (string, string[], null) for advanced i18n features\n * 2. The LocalizedStrings type expects Record<string, string> but our translations are more complex\n * 3. Translation keys are constructed dynamically at runtime, not statically known\n * This is an accepted tradeoff for i18n flexibility with React Aria's typing constraints.\n */\nexport const useSignalCardFormatter = (): SignalCardFormatter => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return useLocalizedStringFormatter<SignalCardMessageKey, string>(intlMessages as any);\n};\n","/**\n * Signal Cards Logger Utility\n *\n * Provides environment-aware logging that only outputs in development mode.\n * Prevents console noise in production while maintaining debugging capability.\n */\n\n// Check for edge runtime compatibility where process.env may be undefined\nconst isDevelopment = typeof process !== 'undefined' && process.env?.NODE_ENV !== 'production';\n\ninterface Logger {\n debug: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n}\n\nconst noop = () => {};\n\n/**\n * Creates a prefixed logger for a specific module\n * @param prefix - Module name prefix for log messages\n */\nexport const createLogger = (prefix: string): Logger => {\n if (!isDevelopment) {\n return {\n debug: noop,\n info: noop,\n warn: noop,\n error: noop,\n };\n }\n\n const formatPrefix = `[SignalCards:${prefix}]`;\n\n return {\n debug: (...args: unknown[]) => console.debug(formatPrefix, ...args),\n info: (...args: unknown[]) => console.info(formatPrefix, ...args),\n warn: (...args: unknown[]) => console.warn(formatPrefix, ...args),\n error: (...args: unknown[]) => console.error(formatPrefix, ...args),\n };\n};\n\n/**\n * Default logger instance for general use\n */\nexport const logger: Logger = createLogger('General');\n\n/**\n * Main signal cards logger (alias for general usage)\n */\nexport const signalCardsLogger: Logger = logger;\n\n/**\n * Translation-specific logger\n */\nexport const translationLogger: Logger = createLogger('i18n');\n\n/**\n * Component-specific logger\n */\nexport const componentLogger: Logger = createLogger('Component');\n","import type { SignalCardFormatter } from '../hooks/useSignalCardFormatter';\nimport type { TranslationParams } from '@redsift/signal-logic';\nimport { translationLogger } from './logger';\nimport { interpolateTranslation } from '@redsift/signal-logic';\n\n/**\n * Helper to resolve translation keys with namespace fallback logic.\n *\n * Tries multiple namespaces with _md suffix first, then without.\n * Returns the first matching translation or the original key if not found.\n *\n * Supports both plain keys ('card.dkim.passed_md') and namespace-prefixed keys ('investigate:extracted-dns')\n */\nexport const createNamespaceResolver = (formatter: SignalCardFormatter, namespaces: string[]) => {\n return (key: string, params?: TranslationParams): string => {\n // Handle namespace-prefixed keys like 'investigate:card.key' or 'status-details:message'\n if (key.includes(':')) {\n const [explicitNs, actualKey] = key.split(':', 2);\n const fullKey = `${explicitNs}.${actualKey}`;\n\n // Handle pluralization\n let finalKey = fullKey;\n if (params?.count !== undefined) {\n const pluralSuffix = params.count === 1 ? '_one' : '_other';\n finalKey = `${fullKey}${pluralSuffix}`;\n }\n\n try {\n // Don't pass params to formatter - do manual interpolation instead\n const result = formatter.format(finalKey);\n return interpolateTranslation(result, params);\n } catch {\n translationLogger.warn(`Translation key not found: ${finalKey}`);\n return key;\n }\n }\n\n // Try with _md suffix first, then without\n const suffixes = ['_md', ''];\n\n for (const namespace of namespaces) {\n for (const suffix of suffixes) {\n let fullKey = `${namespace}.${key}${suffix}`;\n\n // Handle pluralization\n if (params?.count !== undefined) {\n const pluralSuffix = params.count === 1 ? '_one' : '_other';\n fullKey = `${fullKey}${pluralSuffix}`;\n }\n\n try {\n // Don't pass params to formatter - do manual interpolation instead\n const result = formatter.format(fullKey);\n return interpolateTranslation(result, params);\n } catch {\n // Key not found, try next combination\n continue;\n }\n }\n }\n\n translationLogger.warn(`Translation key not found in any namespace: ${key}`);\n return key;\n };\n};\n","import { useCallback, useMemo } from 'react';\nimport { useSignalCardFormatter } from './useSignalCardFormatter';\nimport { createNamespaceResolver } from '../utils/resolveTranslation';\nimport { translationLogger } from '../utils/logger';\nimport { interpolateTranslation } from '@redsift/signal-logic';\nimport type { TranslationParams } from '@redsift/signal-logic';\n/**\n * Custom translation hook for Signal Cards that provides i18next-like API using React Aria's\n * LocalizedStringFormatter under the hood.\n *\n * ## Why This Exists\n *\n * React Aria's `LocalizedStringFormatter` does NOT support ICU MessageFormat syntax in plain\n * JSON strings. It only supports:\n * 1. Simple strings (returned as-is, no interpolation)\n * 2. Function-based messages that call `formatter.plural()` / `formatter.select()` programmatically\n *\n * This hook bridges the gap by implementing:\n * - **Pluralization**: Uses `_one` / `_other` key suffixes (e.g., `error_one`, `error_other`)\n * - **Context**: Uses `_context` key suffixes (e.g., `error_md_fail` for context='fail')\n * - **Interpolation**: Replaces `{{variable}}` placeholders with provided values\n *\n * ## Usage\n *\n * ```tsx\n * const { t } = useSignalCardTranslation('investigate', 'signal-cards.dmarc');\n *\n * // Simple translation\n * t('title'); // looks up 'investigate.signal-cards.dmarc.title'\n *\n * // With interpolation\n * t('greeting', { name: 'John' }); // replaces {{name}} with 'John'\n *\n * // With pluralization\n * t('errors', { count: 1 }); // looks up 'errors_one'\n * t('errors', { count: 5 }); // looks up 'errors_other'\n *\n * // With context\n * t('status', { context: 'fail' }); // looks up 'status_fail'\n *\n * // Namespace override with colon syntax\n * t('glossary:term.dmarc'); // looks up 'glossary.term.dmarc' instead\n * ```\n *\n * @param namespace - The translation namespace (e.g., 'investigate', 'glossary')\n * @param keyPrefix - Optional key prefix to prepend to all translation keys\n * @returns Object with `t` function and `formatter` reference\n *\n * @see {@link interpolateTranslation} for interpolation logic\n * @see {@link useSignalCardFormatter} for the underlying formatter\n */\nexport const useSignalCardTranslation = (namespace: string, keyPrefix?: string) => {\n const formatter = useSignalCardFormatter();\n\n const t = useCallback(\n (\n key: string,\n params?: TranslationParams & { defaultValue?: string; returnObjects?: boolean; context?: string; count?: number }\n ) => {\n // Strip namespace prefix if key uses colon syntax (e.g., 'investigate:signal-description.key')\n let cleanKey = key;\n const colonIndex = key.indexOf(':');\n if (colonIndex !== -1) {\n // Extract the part after the colon\n cleanKey = key.substring(colonIndex + 1);\n }\n\n const prefixedKey = keyPrefix ? `${keyPrefix}.${cleanKey}` : cleanKey;\n let fullKey = `${namespace}.${prefixedKey}`;\n\n // Handle i18next context feature - append context to key if provided\n // e.g., t('error_md', { context: 'fail' }) looks for 'error_md_fail'\n if (params?.context) {\n fullKey = `${fullKey}_${params.context}`;\n }\n\n // Handle pluralization - append _one or _other based on count\n let countValue: number | undefined;\n if (params?.count !== undefined) {\n countValue = params.count;\n const pluralSuffix = countValue === 1 ? '_one' : '_other';\n fullKey = `${fullKey}${pluralSuffix}`;\n }\n\n // Filter out i18next-specific options that shouldn't be passed to formatter\n const interpolationValues = params ? { ...params } : undefined;\n if (interpolationValues) {\n delete interpolationValues.defaultValue;\n delete interpolationValues.returnObjects;\n delete interpolationValues.context;\n // Keep count in interpolationValues for string replacement\n }\n\n // Build the base key (without plural suffix) for fallback\n const baseKey = `${namespace}.${prefixedKey}${params?.context ? `_${params.context}` : ''}`;\n\n try {\n // Don't pass interpolationValues to formatter - it expects ICU MessageFormat\n // We'll do manual string replacement instead\n const result = formatter.format(fullKey);\n\n // Use shared interpolation utility\n return interpolateTranslation(result, interpolationValues);\n } catch (error) {\n // If a plural key (_one/_other) was not found, fall back to the base key\n // This matches i18next behavior: keys without plural variants still work with count\n if (countValue !== undefined && fullKey !== baseKey) {\n try {\n const baseResult = formatter.format(baseKey);\n return interpolateTranslation(baseResult, interpolationValues);\n } catch {\n // Base key also not found — fall through to default handling\n }\n }\n\n // Check if a defaultValue was provided in params\n if (params?.defaultValue !== undefined) {\n // Apply interpolation to defaultValue as well\n return interpolateTranslation(params.defaultValue, interpolationValues);\n }\n translationLogger.warn(`Translation key not found: ${fullKey}`);\n // In development, return a visually distinct marker so missing translations are obvious\n // In production, return the clean key as a reasonable fallback\n if (process.env.NODE_ENV !== 'production') {\n return `⚠️ ${cleanKey}`;\n }\n return cleanKey;\n }\n },\n [formatter, namespace, keyPrefix]\n );\n\n // Return stable references\n return useMemo(() => ({ t, formatter }), [t, formatter]);\n};\n\n/**\n * Translation hook for components that need to search multiple namespaces with fallback logic.\n *\n * Tries each namespace in order until a translation is found. Useful for shared components\n * that may have translations in different namespaces depending on context.\n *\n * ## Usage\n *\n * ```tsx\n * const { t } = useMultiNamespaceTranslation(['investigate', 'glossary', 'common']);\n *\n * // Will try:\n * // 1. 'investigate.some.key'\n * // 2. 'glossary.some.key'\n * // 3. 'common.some.key'\n * // Returns the first match found\n * t('some.key');\n * ```\n *\n * @param namespaces - Array of namespace names to search in order\n * @returns Object with `t` function (resolver) and `formatter` reference\n *\n * @see {@link createNamespaceResolver} for the underlying resolution logic\n */\nexport const useMultiNamespaceTranslation = (namespaces: string[]) => {\n const formatter = useSignalCardFormatter();\n // Serialize namespaces to a stable string to avoid re-creating the callback\n // when callers pass a new array literal with the same contents\n const stableKey = namespaces.join(',');\n const resolve = useCallback(\n (key: string, params?: TranslationParams) => createNamespaceResolver(formatter, namespaces)(key, params),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [formatter, stableKey]\n );\n\n return { t: resolve, formatter };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\ninterface UseCollapseControllerProps {\n areAllCollapsed?: boolean;\n onCollapseAll?: (nextValue: boolean) => void;\n /** When true, collapsible UI is enabled. */\n isCollapsible?: boolean;\n}\n\ninterface UseCollapseControllerResult {\n areAllCollapsed: boolean;\n handleCollapseAll: () => void;\n isCollapsible: boolean;\n}\n\n/**\n * Normalizes the controlled/uncontrolled collapse-all props so every card can\n * share the same behaviour without duplicating state logic.\n */\nexport function useCollapseController({\n areAllCollapsed: controlledValue,\n onCollapseAll,\n isCollapsible,\n}: UseCollapseControllerProps): UseCollapseControllerResult {\n const [internalValue, setInternalValue] = useState<boolean>(controlledValue ?? false);\n\n useEffect(() => {\n if (controlledValue !== undefined) {\n setInternalValue(controlledValue);\n }\n }, [controlledValue]);\n\n const resolvedIsCollapsible = isCollapsible ?? true;\n const resolvedValue = controlledValue ?? internalValue;\n\n const handleCollapseAll = useCallback(() => {\n if (!resolvedIsCollapsible) {\n return;\n }\n\n const nextValue = !resolvedValue;\n onCollapseAll?.(nextValue);\n\n if (controlledValue === undefined) {\n setInternalValue(nextValue);\n }\n }, [controlledValue, onCollapseAll, resolvedIsCollapsible, resolvedValue]);\n\n return {\n areAllCollapsed: resolvedValue,\n handleCollapseAll,\n isCollapsible: resolvedIsCollapsible,\n };\n}\n","/**\n * Styled components for SignalCardNormal.\n *\n * All theming uses CSS variables with Design System fallbacks (Poppins).\n * When SignalCardThemeProvider sets useInvestigateColors=true,\n * these will be overridden with Investigate-specific fonts.\n */\n\nimport styled from 'styled-components';\n\n// Default fallback values - use DS CSS variables with hardcoded ultimate fallbacks\nconst DS_FONT_BODY = \"var(--redsift-typography-body-font-family, 'Poppins', sans-serif)\";\nconst DS_TEXT_COLOR = 'var(--redsift-color-neutral-x-dark-grey, #3B3A58)';\n\n/**\n * Intro text container for signal cards.\n * Displays intro content with proper spacing and typography.\n * Used for intro descriptions at the top of the card.\n */\nexport const StyledIntroText = styled.div`\n margin-top: 0.5rem;\n margin-bottom: 0.75rem;\n font-size: 14px;\n line-height: 1.5;\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n\n strong {\n font-weight: 600;\n }\n\n a {\n font: inherit;\n }\n`;\n\n/**\n * Card header container.\n * Rendered at the top of the card (after title) for optional header content.\n * Used by renderHeader prop for promotional banners, CTAs, or contextual information.\n */\nexport const StyledCardHeader = styled.div`\n @media (max-width: 600px) {\n margin: 16px 0;\n }\n\n @media (min-width: 601px) {\n margin-bottom: 24px;\n }\n`;\n\n/**\n * Card footer container.\n * Rendered at the bottom of the card for optional footer content.\n * Used by renderFooter prop for website-specific or OnDMARC-specific CTAs.\n */\nexport const StyledCardFooter = styled.div`\n /* Optional styles for footer - no active styles needed */\n`;\n","import styled from 'styled-components';\n\n// ============================================================================\n// All theming now uses CSS variables with Design System fallbacks (Poppins).\n// When SignalCardThemeProvider sets useInvestigateColors=true,\n// these will be overridden with Investigate-specific fonts.\n// ============================================================================\n\n// Default fallback values - use DS CSS variables with hardcoded ultimate fallbacks\nconst DS_FONT_BODY = \"var(--redsift-typography-body-font-family, 'Poppins', sans-serif)\";\nconst DS_TEXT_COLOR = 'var(--redsift-color-neutral-x-dark-grey, #3B3A58)';\nconst DS_LINK_COLOR = 'var(--redsift-color-notifications-info-primary, #4285f4)';\n\nexport const DescriptionContainer = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nexport const DescriptionText = styled.div`\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n font-size: 14px;\n line-height: 1.5;\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n\n p {\n margin: 0 0 1rem;\n }\n\n ol {\n margin: 0 0 1em 1.5em;\n padding: 0;\n list-style-type: decimal;\n list-style-position: outside;\n }\n\n li {\n margin-bottom: 0.5em;\n line-height: 1.6;\n }\n\n strong {\n font-weight: 600;\n }\n\n em {\n font-style: italic;\n }\n\n a {\n font: inherit;\n color: var(--sc-link-color, ${DS_LINK_COLOR});\n text-decoration: none;\n\n &:hover,\n &:focus {\n text-decoration: underline;\n }\n }\n`;\n\nexport const DescriptionToggle = styled.div`\n margin-top: 1em;\n margin-bottom: 0.5em;\n`;\n\n/**\n * CardWrapper applies font overrides via CSS classes.\n * Uses CSS variables with Design System fallbacks.\n * The --sc-* variables are injected by SignalCardNormal based on useInvestigateColors.\n */\nexport const CardWrapper = styled.div`\n height: 100%;\n text-align: left;\n\n @media only screen and (max-width: 768px) {\n min-width: auto;\n }\n\n /* Override DetailedCard header font (uses CSS var with DS fallback) */\n .redsift-detailed-card-header__header {\n font-family: var(--sc-font-heading, var(--redsift-typography-h1-font-family, 'Poppins', sans-serif));\n }\n\n /* Override DetailedCard section title font */\n .redsift-detailed-card-section-header__title {\n font-family: var(--sc-font-heading, var(--redsift-typography-h1-font-family, 'Poppins', sans-serif));\n }\n\n /* Override DetailedCard collapsible section caption font */\n .redsift-detailed-card-collapsible-section-items__caption {\n font-family: var(--sc-font-heading, var(--redsift-typography-h1-font-family, 'Poppins', sans-serif));\n }\n`;\n\nexport const CardContent = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`;\n\nexport const DescriptionSpacer = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const ChartContainer = styled.div`\n margin: 1rem 0;\n overflow-x: auto;\n`;\n\nDescriptionContainer.displayName = 'DeliverabilityDescriptionContainer';\nDescriptionText.displayName = 'DeliverabilityDescriptionText';\nDescriptionToggle.displayName = 'DeliverabilityDescriptionToggle';\nCardWrapper.displayName = 'DeliverabilityCardWrapper';\nCardContent.displayName = 'DeliverabilityCardContent';\nDescriptionSpacer.displayName = 'DeliverabilityDescriptionSpacer';\nChartContainer.displayName = 'InfoChartContainer';\n","import React, { forwardRef } from 'react';\nimport styled, { css } from 'styled-components';\nimport { Theme, useTheme, Button } from '@redsift/design-system';\n\ntype SignalCardButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n theme?: Theme;\n /**\n * Use Investigate product-specific hardcoded colors and fonts instead of Design System CSS variables.\n * When false, uses the Design System Button component.\n * When true, uses the custom styled website button.\n * @default false\n */\n useInvestigateColors?: boolean;\n};\n\ntype ButtonTokenState = 'default' | 'hover' | 'active' | 'disabled' | 'focus-visible';\n\nconst websiteButtonToken = (theme: Theme, token: 'background' | 'text', state: ButtonTokenState) =>\n `var(--redsift-color-${theme}-components-website-buttons-primary-website-button-primary-${token}-${state})`;\n\nconst websiteButtonOutlineToken = (theme: Theme) =>\n `var(--redsift-color-${theme}-components-website-buttons-primary-website-button-primary-background-focus-visible-outline)`;\n\nconst StyledSignalCardButton = styled.button<{ $theme: Theme }>`\n box-sizing: border-box;\n align-items: center;\n background-color: ${({ $theme }) => websiteButtonToken($theme, 'background', 'default')};\n /* Fallback if CSS variables not loaded */\n background-color: var(\n --redsift-color-light-components-website-buttons-primary-website-button-primary-background-default,\n #63224a\n );\n border: none;\n border-radius: 5px;\n display: inline-flex;\n font-family: var(--redsift-typography-website-button-font-family, 'Space Grotesk', sans-serif);\n font-size: var(--redsift-typography-website-button-font-size, 18px);\n font-weight: var(--redsift-typography-website-button-font-weight, 500);\n gap: 8px;\n justify-content: center;\n line-height: var(--redsift-typography-website-button-line-height, 1.5);\n min-height: 48px;\n padding: 10px 20px;\n text-align: center;\n text-decoration: none;\n text-transform: var(--redsift-typography-website-button-text-transform, none);\n cursor: pointer;\n transition: background-color 200ms ease-out, color 200ms ease-out, outline-offset 75ms ease-out;\n vertical-align: middle;\n -webkit-font-smoothing: antialiased;\n\n &,\n .redsift-icon:not(.colored) {\n color: ${({ $theme }) => websiteButtonToken($theme, 'text', 'default')};\n /* Fallback if CSS variables not loaded */\n color: white;\n }\n\n &:focus,\n &:active,\n &:hover {\n outline: none;\n }\n\n &:hover:not(:disabled) {\n ${({ $theme }) => css`\n background-color: ${websiteButtonToken($theme, 'background', 'hover')};\n /* Fallback if CSS variables not loaded */\n background-color: #52184d;\n color: ${websiteButtonToken($theme, 'text', 'hover')};\n color: white;\n\n .redsift-icon:not(.colored) {\n color: ${websiteButtonToken($theme, 'text', 'hover')};\n color: white;\n }\n `}\n }\n\n &:active:not(:disabled) {\n ${({ $theme }) => css`\n background-color: ${websiteButtonToken($theme, 'background', 'active')};\n color: ${websiteButtonToken($theme, 'text', 'active')};\n\n .redsift-icon:not(.colored) {\n color: ${websiteButtonToken($theme, 'text', 'active')};\n }\n `}\n }\n\n &:focus-visible:not(:disabled) {\n ${({ $theme }) => css`\n background-color: ${websiteButtonToken($theme, 'background', 'focus-visible')};\n color: ${websiteButtonToken($theme, 'text', 'focus-visible')};\n outline: 2px solid ${websiteButtonOutlineToken($theme)};\n\n .redsift-icon:not(.colored) {\n color: ${websiteButtonToken($theme, 'text', 'focus-visible')};\n }\n `}\n }\n\n &:focus-visible:not(:disabled):not(:active) {\n transition-duration: 0.25s;\n outline-offset: 6px;\n }\n\n &:disabled {\n ${({ $theme }) => css`\n background-color: ${websiteButtonToken($theme, 'background', 'disabled')};\n color: ${websiteButtonToken($theme, 'text', 'disabled')};\n cursor: not-allowed;\n\n .redsift-icon:not(.colored) {\n color: ${websiteButtonToken($theme, 'text', 'disabled')};\n }\n `}\n }\n`;\n\nexport const SignalCardButton = forwardRef<HTMLButtonElement, SignalCardButtonProps>(\n ({ children, theme: requestedTheme, type = 'button', useInvestigateColors = false, ...rest }, ref) => {\n const theme = useTheme(requestedTheme);\n\n // Use Design System Button when useInvestigateColors is false\n if (!useInvestigateColors) {\n return (\n <Button ref={ref} type={type} {...rest}>\n {children}\n </Button>\n );\n }\n\n // Use custom Investigate website button when useInvestigateColors is true\n return (\n <StyledSignalCardButton ref={ref} type={type} $theme={theme} {...rest}>\n {children}\n </StyledSignalCardButton>\n );\n }\n);\n\nSignalCardButton.displayName = 'SignalCardButton';\n","import React, { useState, useEffect } from 'react';\nimport { DescriptionText, DescriptionToggle } from '../SignalCard/components/CardDescriptionStyles';\nimport { SignalCardButton } from '../components/SignalCardButton';\nimport { useResolvedTheme } from '../../hooks/useSignalCardTheme';\nimport type { TranslationFn } from '@redsift/signal-logic';\nexport interface ExpandableDescriptionProps {\n shortDescription: React.ReactNode;\n additionalDescription?: React.ReactNode;\n hasAdditionalContent: boolean;\n showShowMoreButton: boolean;\n showCTAButton: boolean;\n onCTAButtonClick?: () => void;\n ctaButtonName?: string;\n t: TranslationFn;\n onHeightChange?: () => void;\n useInvestigateColors?: boolean;\n}\n\n/**\n * ExpandableDescription - Isolated description component with its own state\n * to prevent parent re-renders when toggling description visibility.\n */\nexport const ExpandableDescription = React.memo<ExpandableDescriptionProps>(\n ({\n shortDescription,\n additionalDescription,\n hasAdditionalContent,\n showShowMoreButton,\n showCTAButton,\n onCTAButtonClick,\n ctaButtonName,\n t,\n onHeightChange,\n useInvestigateColors: useInvestigateColorsOverride,\n }) => {\n const { useInvestigateColors } = useResolvedTheme(useInvestigateColorsOverride);\n const [showLongDescription, setShowLongDescription] = useState(false);\n\n useEffect(() => {\n onHeightChange?.();\n }, [showLongDescription, onHeightChange]);\n\n return (\n <>\n <DescriptionText>{shortDescription}</DescriptionText>\n\n {hasAdditionalContent && (\n <DescriptionText style={{ display: showLongDescription ? 'block' : 'none' }}>\n {additionalDescription}\n </DescriptionText>\n )}\n\n {showShowMoreButton ? (\n <DescriptionToggle>\n <SignalCardButton\n useInvestigateColors={useInvestigateColors}\n onClick={() => {\n setShowLongDescription(!showLongDescription);\n }}\n >\n {showLongDescription\n ? t('investigate:signal-description.show-less')\n : t('investigate:signal-description.show-more')}\n </SignalCardButton>\n </DescriptionToggle>\n ) : null}\n\n {showCTAButton ? (\n <DescriptionToggle>\n <SignalCardButton\n useInvestigateColors={useInvestigateColors}\n onClick={() => {\n onCTAButtonClick?.();\n }}\n >\n {ctaButtonName}\n </SignalCardButton>\n </DescriptionToggle>\n ) : null}\n </>\n );\n }\n);\n\nExpandableDescription.displayName = 'ExpandableDescription';\n","import React from 'react';\nimport styled from 'styled-components';\nimport { COLOR } from '../../signal-card-styles';\n\n// All theming uses CSS variables with Design System fallbacks (Poppins).\n// When SignalCardThemeProvider sets useInvestigateColors=true,\n// these will be overridden with Investigate-specific fonts.\n\n// Default fallback values - use DS CSS variables with hardcoded ultimate fallbacks\nconst DS_FONT_BODY = \"var(--redsift-typography-body-font-family, 'Poppins', sans-serif)\";\n\nconst StyledContainer = styled.div<{\n $marginBottom: number;\n $borderBottom: boolean;\n $hidden: boolean;\n}>`\n display: ${({ $hidden }) => ($hidden ? 'none' : 'grid')};\n gap: 0.25rem;\n padding: 0;\n padding-bottom: ${({ $borderBottom }) => ($borderBottom ? '0.5rem' : '0')};\n margin-bottom: ${({ $marginBottom, $borderBottom }) =>\n $borderBottom && $marginBottom === 0 ? '0.5rem' : `${$marginBottom}px`};\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n\n &:first-child {\n margin-top: 0;\n }\n\n > h2 {\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n font-size: 1.35rem;\n font-weight: 600;\n margin: 0 0 0.25rem;\n padding: 0;\n }\n\n border-bottom: ${({ $borderBottom }) => ($borderBottom ? `1px solid ${COLOR.grey.light}` : 'none')};\n`;\n\ntype SignalCardSectionProps = {\n children?: React.ReactNode;\n title?: React.ReactNode;\n marginBottom?: number | null;\n borderBottom?: boolean | null;\n hidden?: boolean;\n};\n\nconst SignalCardSection: React.FC<SignalCardSectionProps> = ({\n children,\n title,\n marginBottom = 0,\n borderBottom = true,\n hidden = false,\n}) => {\n return (\n <StyledContainer $marginBottom={marginBottom ?? 0} $borderBottom={borderBottom ?? false} $hidden={hidden}>\n {title ? <h2>{title}</h2> : null}\n {children}\n </StyledContainer>\n );\n};\n\nexport default SignalCardSection;\n","import styled, { css } from 'styled-components';\n\n// ============================================================================\n// All theming now uses CSS variables with Design System fallbacks.\n// When no SignalCardThemeProvider is present, components use DS defaults (Poppins).\n// When SignalCardThemeProvider is used with useInvestigateColors=true,\n// it overrides these with Investigate-specific fonts.\n// ============================================================================\n\n// Default fallback values - use DS CSS variables with hardcoded ultimate fallbacks\nconst DS_FONT_BODY = \"var(--redsift-typography-body-font-family, 'Poppins', sans-serif)\";\nconst DS_FONT_CODE = \"var(--redsift-typography-font-family-source-code-pro, 'Source Code Pro', monospace)\";\nconst DS_TEXT_COLOR = 'var(--redsift-color-neutral-x-dark-grey, #3B3A58)';\nconst DS_BG_LIGHT = 'var(--redsift-color-neutral-x-light-grey, #EAEAED)';\n\nexport const InfoItemContainer = styled.div<{ $compact?: boolean }>`\n padding: ${({ $compact }) => ($compact ? '0.25em 1em 0.25em 0' : '0.5em 1em 0.5em 0')};\n`;\n\nexport const InfoItemRow = styled.div<{ $alignTop?: boolean }>`\n display: flex;\n align-items: ${({ $alignTop }) => ($alignTop ? 'flex-start' : 'center')};\n gap: 0.75rem;\n flex-wrap: wrap;\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n font-size: 14px;\n line-height: 1.5;\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n`;\n\nexport const InfoItemIcon = styled.span<{ $alignTop?: boolean }>`\n display: inline-flex;\n align-items: center;\n justify-content: flex-start;\n padding-right: 0.5em;\n height: 25px;\n margin-top: ${({ $alignTop }) => ($alignTop ? '2px' : '0')};\n flex-shrink: 0;\n`;\n\nexport const InfoItemContent = styled.span`\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: 0.5rem;\n\n p {\n margin: 0;\n }\n`;\n\nexport const InfoItemLabel = styled.span<{\n $variant?: 'warn';\n $inline?: boolean;\n}>`\n display: inline;\n font-size: 14px;\n line-height: 1.5;\n\n strong {\n font-weight: 600;\n margin: 0 0.2rem;\n }\n\n ${({ $inline }) =>\n $inline\n ? css`\n margin-right: 0;\n `\n : ''}\n\n ${({ $variant }) =>\n $variant === 'warn'\n ? css`\n color: #fff;\n background: rgb(232, 70, 70);\n border-radius: 4px;\n padding: 2.8px 7px;\n font-size: 14px;\n line-height: 20px;\n font-weight: 600;\n margin-right: 0;\n `\n : ''}\n`;\n\nexport const InfoItemSubtexts = styled.div<{ $hasImage?: boolean }>`\n margin: 0;\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n font-size: 14px;\n line-height: 1.5;\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n\n ${({ $hasImage }) =>\n $hasImage &&\n `\n max-width: 100%;\n overflow: hidden;\n `}\n\n p {\n margin: 0;\n display: block;\n }\n\n strong {\n font-weight: 600;\n margin: 0 0.2rem;\n }\n\n code {\n background-color: var(--sc-code-bg, ${DS_BG_LIGHT});\n font-family: var(--sc-font-code, ${DS_FONT_CODE});\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n padding: 0.2em 0.5em;\n border-radius: 3px;\n white-space: pre-wrap;\n word-break: break-word;\n }\n`;\n\nexport const InfoItemList = styled.ul`\n list-style-type: none;\n margin: 0;\n padding: 0;\n margin-left: 0;\n\n li {\n margin: 0.3em 0;\n line-height: 1.5;\n font-size: 14px;\n\n strong {\n font-weight: 600;\n }\n\n code {\n background-color: var(--sc-code-bg, ${DS_BG_LIGHT});\n font-family: var(--sc-font-code, ${DS_FONT_CODE});\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n padding: 0.2em 0.5em;\n border-radius: 3px;\n white-space: pre-wrap;\n word-break: break-word;\n }\n\n p {\n margin: 0;\n line-height: inherit;\n font-size: inherit;\n }\n }\n`;\n\nexport const InfoItemCodeBlock = styled.pre`\n background-color: var(--sc-code-bg, ${DS_BG_LIGHT});\n font-family: var(--sc-font-code, ${DS_FONT_CODE});\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n font-size: 14px;\n padding: 0.5em;\n border-radius: 4px;\n word-break: break-all;\n overflow-wrap: break-word;\n white-space: pre-wrap;\n margin-top: 8px;\n\n code {\n font-family: inherit;\n color: inherit;\n }\n`;\n\nexport const InfoItemsWrapper = styled.div`\n position: relative;\n max-width: 100%;\n overflow: hidden;\n\n h1 {\n margin-top: 0.2em;\n margin-bottom: 1em;\n }\n\n h2 {\n font-weight: 600;\n }\n`;\n\nInfoItemContainer.displayName = 'InfoItemContainer';\nInfoItemRow.displayName = 'InfoItemRow';\nInfoItemIcon.displayName = 'InfoItemIcon';\nInfoItemContent.displayName = 'InfoItemContent';\nInfoItemLabel.displayName = 'InfoItemLabel';\nInfoItemSubtexts.displayName = 'InfoItemSubtexts';\nInfoItemList.displayName = 'InfoItemList';\nInfoItemCodeBlock.displayName = 'InfoItemCodeBlock';\nInfoItemsWrapper.displayName = 'InfoItemsWrapper';\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport { COLOR } from '../../signal-card-styles';\nimport { InfoItemContent } from './InfoItemElements';\n\n// All theming uses CSS variables with Design System fallbacks (Poppins).\n// When SignalCardThemeProvider sets useInvestigateColors=true,\n// these will be overridden with Investigate-specific fonts.\n\n// Default fallback values - use DS CSS variables with hardcoded ultimate fallbacks\nconst DS_FONT_BODY = \"var(--redsift-typography-body-font-family, 'Poppins', sans-serif)\";\n\nconst StyledContainer = styled.div`\n border-radius: 4px;\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n > div {\n display: grid;\n padding: 0;\n gap: 0.5rem;\n }\n code {\n font-family: inherit;\n color: inherit;\n padding: 0 0.5rem;\n white-space: pre-wrap;\n word-break: break-word;\n }\n\n > footer {\n border-top: 1px solid ${COLOR.grey.light};\n display: flex;\n justify-content: flex-end;\n padding: 4px 0.5rem;\n font-size: 12px;\n color: ${COLOR.grey.regular}; /* Grey-50 */\n }\n\n ${InfoItemContent} a {\n line-break: anywhere;\n }\n`;\n\ntype SignalCardInfoBoxProps = {\n children?: React.ReactNode;\n footerText?: React.ReactNode;\n};\n\nconst SignalCardInfoBox: React.FC<SignalCardInfoBoxProps> = ({ children, footerText }) => {\n return (\n <StyledContainer>\n <div>{children}</div>\n {footerText ? <footer>{footerText}</footer> : null}\n </StyledContainer>\n );\n};\n\nexport default SignalCardInfoBox;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { COLOR } from '../../../cards/signal-card-styles';\n\n// All theming uses CSS variables with Design System fallbacks (Poppins).\n// When SignalCardThemeProvider sets useInvestigateColors=true,\n// these will be overridden with Investigate-specific fonts.\n\n// Default fallback values - use DS CSS variables with hardcoded ultimate fallbacks\nconst DS_FONT_BODY = \"var(--redsift-typography-body-font-family, 'Poppins', sans-serif)\";\n\ntype GlossaryTagProps = {\n label: React.ReactNode;\n onClick?: () => unknown;\n href?: string;\n color?: string;\n className?: string;\n};\n\ntype Palette = {\n base: string;\n hover: string;\n};\n\nconst DEFAULT_PALETTE: Palette = {\n base: '#e5e5e5',\n hover: '#d6d6d6',\n};\n\nconst COLOR_MAP: Record<string, Palette> = {\n green: { base: '#a5e6c3', hover: '#56d58e' },\n pink: { base: '#eda3da', hover: '#d95cba' },\n aqua: { base: '#9af8f4', hover: '#63eae4' },\n brown: { base: '#edc19c', hover: '#c78348' },\n grey: DEFAULT_PALETTE,\n red: { base: '#f5aaaa', hover: '#e06363' },\n yellow: { base: '#f7efc3', hover: '#fff741' },\n purple: { base: '#c6a8ef', hover: '#965ede' },\n orange: { base: '#f8d296', hover: '#fcbb54' },\n blue: { base: '#addbf0', hover: '#73c5eb' },\n};\n\nconst resolvePalette = (color?: string): Palette => {\n if (!color) {\n return DEFAULT_PALETTE;\n }\n\n const key = color.toLowerCase();\n return COLOR_MAP[key] ?? DEFAULT_PALETTE;\n};\n\nconst StyledGlossaryTag = styled.a<{ $palette: Palette }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 4px 8px;\n margin: 0 0.35rem;\n border-radius: 4px;\n background-color: ${({ $palette }) => $palette.base};\n cursor: pointer;\n user-select: none;\n font-size: 14px;\n font-weight: 400;\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n white-space: nowrap;\n line-height: 1.3;\n color: ${COLOR.grey.darkest} !important;\n text-decoration: none !important;\n transition: background-color 150ms ease;\n\n code {\n font-family: inherit;\n color: inherit;\n }\n\n &:hover,\n &:focus,\n &:active,\n &:visited,\n &:visited:hover {\n color: ${COLOR.grey.darkest} !important;\n text-decoration: none !important;\n }\n\n &:hover,\n &:focus-visible {\n background-color: ${({ $palette }) => $palette.hover};\n }\n`;\n\nconst GlossaryTag: React.FC<GlossaryTagProps> = ({ label, onClick, href, color = 'grey', className }) => {\n const palette = resolvePalette(color);\n const isInteractive = Boolean(href || onClick);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (onClick && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n onClick();\n }\n };\n\n return (\n <StyledGlossaryTag\n as={href ? 'a' : 'span'}\n href={href}\n onClick={onClick}\n onKeyDown={!href && onClick ? handleKeyDown : undefined}\n className={className}\n $palette={palette}\n target={href ? '_blank' : undefined}\n rel={href ? 'noopener noreferrer' : undefined}\n role={!href && onClick ? 'button' : undefined}\n tabIndex={isInteractive && !href ? 0 : undefined}\n >\n {label}\n </StyledGlossaryTag>\n );\n};\n\nexport default GlossaryTag;\n","/**\n * Local color palette derived from @redsift/d3-rs-theme presentation10\n * to avoid package resolution issues in Vite/Storybook\n */\nconst presentation10 = {\n standard: [\n '#56d58e', // green: 0\n '#d95cba', // pink: 1\n '#63eae4', // aqua: 2\n '#C78348', // brown: 3\n '#d6d6d6', // grey: 4\n '#E06363', // red: 5\n '#FFF741', // yellow: 6\n '#965ede', // purple: 7\n '#FCBB54', // orange: 8\n '#73c5eb', // blue: 9\n ],\n darker: [\n '#00ce5c', // green: 0\n '#d800a2', // pink: 1\n '#00d9d2', // aqua: 2\n '#AF5100', // brown: 3\n '#bfbfbf', // grey: 4\n '#DE0000', // red: 5\n '#F0DE00', // yellow: 6\n '#9200ff', // purple: 7\n '#ED9200', // orange: 8\n '#00aeff', // blue: 9\n ],\n lighter: [\n '#a5e6c3', // green: 0\n '#eda3da', // pink: 1\n '#9af8f4', // aqua: 2\n '#EDC19C', // brown: 3\n '#e5e5e5', // grey: 4\n '#F5AAAA', // red: 5\n '#F7EFC3', // yellow: 6\n '#c6a8ef', // purple: 7\n '#F8D296', // orange: 8\n '#addbf0', // blue: 9\n ],\n names: {\n green: 0,\n pink: 1,\n aqua: 2,\n brown: 3,\n grey: 4,\n red: 5,\n yellow: 6,\n purple: 7,\n orange: 8,\n blue: 9,\n },\n};\n\ntype PaletteName = keyof typeof presentation10.names | 'gray';\n\ninterface ColorVariant {\n standard: string;\n darker: string;\n lighter: string;\n name: string;\n}\n\nconst getColor = (name: PaletteName): ColorVariant => {\n const normalizedName = (name === 'gray' ? 'grey' : name) as keyof typeof presentation10.names;\n const paletteIndex = presentation10.names[normalizedName];\n\n return {\n standard: presentation10.standard[paletteIndex],\n darker: presentation10.darker[paletteIndex],\n lighter: presentation10.lighter[paletteIndex],\n name: normalizedName as string,\n };\n};\n\nexport { getColor };\n\nexport const colors = {\n theme: {\n green: getColor('green'),\n pink: getColor('pink'),\n aqua: getColor('aqua'),\n brown: getColor('brown'),\n grey: getColor('grey'),\n red: getColor('red'),\n yellow: getColor('yellow'),\n purple: getColor('purple'),\n orange: getColor('orange'),\n blue: getColor('blue'),\n },\n welcomeGreen: '#4da868',\n ondmarcGreen: '#02ac61',\n ondmarcGreenDark: '#009252',\n ondmarcGreenHover: '#028D51',\n ondmarcGreenActive: '#027442',\n white: '#ffffff',\n grey: '#aaaaaa',\n darkGrey: '#363434',\n inactiveGrey: '#c2c1c1',\n mediumGrey: '#757575',\n ondmarcRed: '#e84646',\n ondmarcRedLight: '#e06354',\n ondmarcRedLightHover: '#D94130',\n ondmarcRedLightActive: '#B12F20',\n ondmarcRedDark: '#e11010',\n ondmarcAmberDark: '#c99900',\n ondmarcBlue: '#0b85d6',\n ondmarcAmber: '#e0ab00',\n black: '#333',\n lightGrey: '#e0e0e0',\n disabledGrey: '#aaa',\n darkGrayishBlue: '#94A0AD',\n lightGreyishBlue: '#fafbff',\n blueGrey: '#adc0d3',\n navGrey: '#c0c0c2',\n navDarkGrey: '#24242a',\n glossary: {\n // FCrDNS card:\n senderIp: getColor('blue'),\n ehlo: getColor('pink'),\n ptrRecord: getColor('aqua'),\n aRecord: getColor('brown'),\n spfRecord: getColor('yellow'),\n // DKIM card:\n dkim: getColor('gray'),\n signerDomain: getColor('grey'),\n dkimSelector: getColor('aqua'),\n canonicalization: getColor('brown'),\n signedHeaders: getColor('yellow'),\n dkimSignature: getColor('green'),\n dkimSignatureHeader: getColor('orange'),\n ttl: getColor('pink'),\n // DMARC card:\n from: getColor('blue'),\n returnPath: getColor('pink'),\n dmarcPolicy: getColor('aqua'),\n pct: getColor('brown'),\n sp: getColor('yellow'),\n rua: getColor('yellow'),\n ruf: getColor('green'),\n dkimSigningDomain: getColor('grey'),\n spfDomain: getColor('red'),\n spfDomains: getColor('red'),\n subdomainPolicy: getColor('blue'),\n dkimAlignment: getColor('pink'),\n spfAlignment: getColor('orange'),\n // SPF card:\n spf: getColor('green'),\n // TLS card:\n tls: getColor('blue'),\n ssl: getColor('red'),\n cipherSuite: getColor('purple'),\n // common:\n key: getColor('red'),\n keyLength: getColor('orange'),\n txtRecord: getColor('purple'),\n bimiRecord: getColor('blue'),\n dmarcCompliant: getColor('blue'),\n svg: getColor('blue'),\n iTag: getColor('purple'),\n aTag: getColor('purple'),\n vmc: getColor('blue'),\n cmc: getColor('blue'),\n dmarc: getColor('aqua'),\n // mta\n tlsRptRecord: getColor('blue'),\n mtaStsRecord: getColor('blue'),\n mtaStsPolicyFile: getColor('blue'),\n version: getColor('aqua'),\n mode: getColor('orange'),\n mx: getColor('green'),\n maxAge: getColor('pink'),\n error: getColor('red'),\n },\n} as const;\n\n// * grey: 4,\n// * orange: 8,\n\n// * green: 0,\n// * blue: 9\n// * pink: 1,\n// * aqua: 2,\n// * brown: 3,\n// * red: 5,\n// * yellow: 6,\n// * purple: 7,\n\n/**\n * Simplified mapping of glossary label IDs to color names for CSS classes\n */\nexport const glossaryColorMap = {\n // FCrDNS card:\n senderIp: 'blue',\n ehlo: 'pink',\n ptrRecord: 'aqua',\n aRecord: 'brown',\n spfRecord: 'yellow',\n // DKIM card:\n dkim: 'grey',\n signerDomain: 'grey',\n dkimSelector: 'aqua',\n canonicalization: 'brown',\n signedHeaders: 'yellow',\n dkimSignature: 'green',\n dkimSignatureHeader: 'orange',\n ttl: 'pink',\n // DMARC card:\n from: 'blue',\n returnPath: 'pink',\n dmarcPolicy: 'aqua',\n pct: 'brown',\n sp: 'yellow',\n rua: 'yellow',\n ruf: 'green',\n dkimSigningDomain: 'grey',\n spfDomain: 'red',\n spfDomains: 'red',\n subdomainPolicy: 'blue',\n dkimAlignment: 'pink',\n spfAlignment: 'orange',\n // SPF card:\n spf: 'green',\n // TLS card:\n tls: 'blue',\n ssl: 'red',\n cipherSuite: 'purple',\n // common:\n key: 'red',\n keyLength: 'orange',\n txtRecord: 'purple',\n bimiRecord: 'blue',\n dmarcCompliant: 'blue',\n svg: 'blue',\n iTag: 'purple',\n aTag: 'purple',\n vmc: 'blue',\n organizationalDomain: 'blue',\n dmarc: 'aqua',\n // mta\n tlsRptRecord: 'blue',\n mtaStsRecord: 'blue',\n mtaStsPolicyFile: 'blue',\n version: 'aqua',\n mode: 'orange',\n mx: 'green',\n maxAge: 'pink',\n error: 'red',\n} as const;\n","/**\n * Glossary terms for Investigate reports\n *\n * This module provides localized glossary term components that link to\n * the Red Sift community glossary documentation.\n */\n\nimport React from 'react';\nimport GlossaryTag from '../ui/GlossaryTag/GlossaryTag';\nimport { glossaryColorMap } from '../../styles/styles';\nimport { useSignalCardTranslation } from '../../hooks/useSignalCardTranslation';\n\nconst GLOSSARY_BASE_PAGE = 'https://community.redsift.com/s/article/000001019';\n\n/**\n * Creates a link to the glossary documentation for a specific term\n */\nexport const createGlossaryLink = ({\n glossaryPage = GLOSSARY_BASE_PAGE,\n label,\n}: {\n glossaryPage?: string;\n label: string;\n}): string => {\n return `${glossaryPage}#${label.toLowerCase().replace(' ', '-').replace('=', '').replace(/_/g, '-')}`;\n};\n\n/**\n * Opens a link in a new window\n * Uses noopener,noreferrer for security (prevents tabnabbing attacks)\n */\nfunction navigateTo(link: string): void {\n window.open(link, '_blank', 'noopener,noreferrer');\n}\n\n/**\n * Mapping of glossary label IDs to their internal names\n */\nexport const glossaryLabelIds = {\n ATAG: 'aTag',\n A_RECORD: 'aRecord',\n BIMI_RECORD: 'bimiRecord',\n CANONICALIZATION: 'canonicalization',\n CNAME_RECORD: 'cnameRecord',\n DKIM: 'dkim',\n DKIM_ALGORITHM: 'dkimAlgorithm',\n DKIM_ALIGNMENT: 'dkimAlignment',\n DKIM_SELECTOR: 'dkimSelector',\n DKIM_SIGNATURE: 'dkimSignature',\n DKIM_SIGNATURE_HEADER: 'dkimSignatureHeader',\n DKIM_SIGNING_DOMAIN: 'dkimSigningDomain',\n DMARC: 'dmarc',\n DMARC_COMPLIANT: 'dmarcCompliant',\n DMARC_POLICY: 'dmarcPolicy',\n EHLO: 'ehlo',\n FROM: 'from',\n ITAG: 'iTag',\n KEY_LENGTH: 'keyLength',\n MTA_FILE_MAX_AGE: 'maxAge',\n MTA_FILE_MODE: 'mode',\n MTA_FILE_MX: 'mx',\n MTA_FILE_VERSION: 'version',\n MTA_STS_POLICY_FILE: 'mtaStsPolicyFile',\n MTA_STS_CERTIFICATE: 'mtaStsCertificate',\n MTA_STS_CERTIFICATE_EXPIRY: 'mtaStsCertificateExpiry',\n MTA_STS_CERTIFICATE_CNAME_NAME: 'mtaStsCertificateCnameName',\n MTA_STS_CERTIFICATE_CNAME_VALUE: 'mtaStsCertificateCnameValue',\n MTA_STS_CERTIFICATE_CNAME_TYPE: 'mtaStsCertificateCnameType',\n MTA_STS_RECORD: 'mtaStsRecord',\n PCT: 'pct',\n PTR_RECORD: 'ptrRecord',\n RETURN_PATH: 'returnPath',\n RUA: 'rua',\n RUF: 'ruf',\n SENDER_IP: 'senderIp',\n SIGNED_HEADERS: 'signedHeaders',\n SIGNER_DOMAIN: 'signerDomain',\n SP: 'sp',\n SPF: 'spf',\n SPF_ALIGNMENT: 'spfAlignment',\n SPF_DOMAIN: 'spfDomain',\n SPF_DOMAINS: 'spfDomains',\n SPF_RECORD: 'spfRecord',\n TLS: 'tls',\n SSL: 'ssl',\n CIPHER_SUITE: 'cipherSuite',\n SUBDOMAIN_POLICY: 'subdomainPolicy',\n SVG: 'svg',\n TLS_RPT_RECORD: 'tlsRptRecord',\n TTL: 'ttl',\n TXT_RECORD: 'txtRecord',\n TXT_RECORDS: 'txtRecord',\n VMC: 'vmc',\n CMC: 'cmc',\n ORGANIZATIONAL_DOMAIN: 'organizationalDomain',\n} as const;\n\ntype GlossaryLabelId = keyof typeof glossaryLabelIds;\n\ninterface GlossaryTermProps {\n label: string;\n glossaryLabel?: string;\n context?: string;\n value?: string | number;\n}\n\n/**\n * GlossaryTerm component with React Aria i18n hooks\n */\nconst GlossaryTerm: React.FC<GlossaryTermProps> = ({ label, glossaryLabel, context, value }) => {\n const { t } = useSignalCardTranslation('glossary');\n\n const localeLink = t(`label.${label}.link`, {\n defaultValue: '',\n context,\n });\n\n const resolvedLink = localeLink as unknown as string | boolean;\n\n const link =\n resolvedLink !== false\n ? createGlossaryLink({\n label: glossaryLabel || (resolvedLink as string) || label,\n })\n : undefined;\n\n // Get color name from glossary label ID mapping\n const labelId = glossaryLabelIds[label as GlossaryLabelId];\n const colorName = labelId ? glossaryColorMap[labelId as keyof typeof glossaryColorMap] : undefined;\n\n return (\n <GlossaryTag\n href={link}\n label={t(`label.${label}.value`, {\n defaultValue: t(`label.${label}`),\n context,\n value,\n })}\n color={colorName}\n onClick={link ? () => navigateTo(link) : undefined}\n />\n );\n};\n\n// Export the component directly (no HOC needed)\nexport { GlossaryTerm };\n\n// Type for glossary component props\ninterface GlossaryComponentProps {\n label?: string;\n context?: string;\n value?: string | number;\n glossaryLabel?: string;\n}\n\n/**\n * Factory function to create glossary term components.\n * Reduces boilerplate for the 60+ glossary term wrappers.\n *\n * @param defaultLabel - The default label key from glossaryLabelIds\n * @param displayName - Optional display name for React DevTools\n */\nconst createGlossaryComponent = (\n defaultLabel: GlossaryLabelId,\n displayName?: string\n): React.FC<GlossaryComponentProps> => {\n const Component: React.FC<GlossaryComponentProps> = ({ label = defaultLabel, ...other }) => (\n <GlossaryTerm label={label} {...other} />\n );\n Component.displayName = displayName || defaultLabel;\n return Component;\n};\n\n// FCrDNS card:\nexport const SenderIp = createGlossaryComponent('SENDER_IP', 'SenderIp');\nexport const Ehlo = createGlossaryComponent('EHLO', 'Ehlo');\nexport const PtrRecord = createGlossaryComponent('PTR_RECORD', 'PtrRecord');\nexport const ARecord = createGlossaryComponent('A_RECORD', 'ARecord');\nexport const SpfRecord = createGlossaryComponent('SPF_RECORD', 'SpfRecord');\nexport const TxtRecord = createGlossaryComponent('TXT_RECORD', 'TxtRecord');\nexport const TxtRecords = createGlossaryComponent('TXT_RECORDS', 'TxtRecords');\nexport const CnameRecord = createGlossaryComponent('CNAME_RECORD', 'CnameRecord');\n\n// DKIM card:\nexport const Dkim = createGlossaryComponent('DKIM', 'Dkim');\nexport const SignerDomain = createGlossaryComponent('SIGNER_DOMAIN', 'SignerDomain');\nexport const DkimSelector = createGlossaryComponent('DKIM_SELECTOR', 'DkimSelector');\nexport const Canonicalization = createGlossaryComponent('CANONICALIZATION', 'Canonicalization');\nexport const SignedHeaders = createGlossaryComponent('SIGNED_HEADERS', 'SignedHeaders');\nexport const DkimSignature = createGlossaryComponent('DKIM_SIGNATURE', 'DkimSignature');\nexport const KeyLength = createGlossaryComponent('KEY_LENGTH', 'KeyLength');\nexport const Ttl = createGlossaryComponent('TTL', 'Ttl');\nexport const DkimAlgorithm = createGlossaryComponent('DKIM_ALGORITHM', 'DkimAlgorithm');\n\n// DMARC card:\nexport const From = createGlossaryComponent('FROM', 'From');\nexport const ReturnPath = createGlossaryComponent('RETURN_PATH', 'ReturnPath');\nexport const DmarcPolicy = createGlossaryComponent('DMARC_POLICY', 'DmarcPolicy');\nexport const Pct = createGlossaryComponent('PCT', 'Pct');\nexport const Sp = createGlossaryComponent('SP', 'Sp');\nexport const Rua = createGlossaryComponent('RUA', 'Rua');\nexport const Ruf = createGlossaryComponent('RUF', 'Ruf');\nexport const DkimSigningDomain = createGlossaryComponent('DKIM_SIGNING_DOMAIN', 'DkimSigningDomain');\nexport const SpfDomain = createGlossaryComponent('SPF_DOMAIN', 'SpfDomain');\nexport const SubdomainPolicy = createGlossaryComponent('SUBDOMAIN_POLICY', 'SubdomainPolicy');\nexport const DkimAlignment = createGlossaryComponent('DKIM_ALIGNMENT', 'DkimAlignment');\nexport const SpfAlignment = createGlossaryComponent('SPF_ALIGNMENT', 'SpfAlignment');\n\n// SPF card:\nexport const Spf = createGlossaryComponent('SPF', 'Spf');\n\n// TLS card:\nexport const Tls = createGlossaryComponent('TLS', 'Tls');\nexport const Ssl = createGlossaryComponent('SSL', 'Ssl');\nexport const CipherSuite = createGlossaryComponent('CIPHER_SUITE', 'CipherSuite');\n\n// BIMI card:\nexport const BimiRecord = createGlossaryComponent('BIMI_RECORD', 'BimiRecord');\nexport const DmarcCompliant = createGlossaryComponent('DMARC_COMPLIANT', 'DmarcCompliant');\nexport const SVG = createGlossaryComponent('SVG', 'SVG');\nexport const VMC = createGlossaryComponent('VMC', 'VMC');\nexport const CMC = createGlossaryComponent('CMC', 'CMC');\nexport const OrganizationalDomain = createGlossaryComponent('ORGANIZATIONAL_DOMAIN', 'OrganizationalDomain');\nexport const ITAG = createGlossaryComponent('ITAG', 'ITAG');\nexport const ATAG = createGlossaryComponent('ATAG', 'ATAG');\nexport const Dmarc = createGlossaryComponent('DMARC', 'Dmarc');\n\n// MTA card:\nexport const TlsRptRecord = createGlossaryComponent('TLS_RPT_RECORD', 'TlsRptRecord');\nexport const MtaStsRecord = createGlossaryComponent('MTA_STS_RECORD', 'MtaStsRecord');\nexport const MtaStsPolicyFile = createGlossaryComponent('MTA_STS_POLICY_FILE', 'MtaStsPolicyFile');\nexport const Version = createGlossaryComponent('MTA_FILE_VERSION', 'Version');\nexport const Mode = createGlossaryComponent('MTA_FILE_MODE', 'Mode');\nexport const Mx = createGlossaryComponent('MTA_FILE_MX', 'Mx');\nexport const MaxAge = createGlossaryComponent('MTA_FILE_MAX_AGE', 'MaxAge');\nexport const MtaStsCertificate = createGlossaryComponent('MTA_STS_CERTIFICATE', 'MtaStsCertificate');\nexport const MtaStsCertificateExpiry = createGlossaryComponent('MTA_STS_CERTIFICATE_EXPIRY', 'MtaStsCertificateExpiry');\nexport const MtaStsCertificateCnameName = createGlossaryComponent(\n 'MTA_STS_CERTIFICATE_CNAME_NAME',\n 'MtaStsCertificateCnameName'\n);\nexport const MtaStsCertificateCnameValue = createGlossaryComponent(\n 'MTA_STS_CERTIFICATE_CNAME_VALUE',\n 'MtaStsCertificateCnameValue'\n);\nexport const MtaStsCertificateCnameType = createGlossaryComponent(\n 'MTA_STS_CERTIFICATE_CNAME_TYPE',\n 'MtaStsCertificateCnameType'\n);\n\n// =============================================================================\n// ICON MAP - Single source of truth for icon type → component mapping\n// =============================================================================\n\n/**\n * Type for glossary icon identifiers (kebab-case).\n * Used as keys in extractors to reference icons without coupling to React components.\n */\nexport type GlossaryIconType =\n // FCrDNS\n | 'sender-ip'\n | 'ehlo'\n | 'ptr-record'\n | 'a-record'\n // SPF\n | 'spf'\n | 'spf-record'\n | 'spf-domain'\n | 'spf-alignment'\n // DKIM\n | 'dkim'\n | 'dkim-signing-domain'\n | 'dkim-selector'\n | 'dkim-signature'\n | 'dkim-algorithm'\n | 'canonicalization'\n | 'signed-headers'\n | 'signer-domain'\n | 'key-length'\n | 'ttl'\n | 'dkim-alignment'\n // DMARC\n | 'from'\n | 'return-path'\n | 'dmarc-policy'\n | 'pct'\n | 'rua'\n | 'ruf'\n | 'subdomain-policy'\n | 'dmarc'\n // TLS\n | 'tls'\n | 'ssl'\n | 'cipher-suite'\n // DNS records\n | 'txt-record'\n | 'cname-record'\n // BIMI\n | 'bimi-record'\n | 'dmarc-compliant'\n | 'svg'\n | 'vmc'\n | 'cmc'\n | 'itag'\n | 'atag'\n // MTA-STS\n | 'tls-rpt-record'\n | 'mta-sts-record'\n | 'mta-sts-policy-file'\n | 'mta-file-version'\n | 'mta-file-mode'\n | 'mta-file-mx'\n | 'mta-file-max-age'\n | 'mta-sts-certificate'\n | 'mta-sts-certificate-expiry'\n | null;\n\n/**\n * Map from icon type identifiers (kebab-case) to glossary icon components.\n * This is the single source of truth for icon mapping.\n * Covers all signal card types (DMARC, DKIM, SPF, FCRDNS, TLS, BIMI, MTA-STS).\n */\nexport const GLOSSARY_ICON_MAP: Record<NonNullable<GlossaryIconType>, React.FC<GlossaryComponentProps>> = {\n // FCrDNS\n 'sender-ip': SenderIp,\n ehlo: Ehlo,\n 'ptr-record': PtrRecord,\n 'a-record': ARecord,\n // SPF\n spf: Spf,\n 'spf-record': SpfRecord,\n 'spf-domain': SpfDomain,\n 'spf-alignment': SpfAlignment,\n // DKIM\n dkim: Dkim,\n 'dkim-signing-domain': DkimSigningDomain,\n 'dkim-selector': DkimSelector,\n 'dkim-signature': DkimSignature,\n 'dkim-algorithm': DkimAlgorithm,\n canonicalization: Canonicalization,\n 'signed-headers': SignedHeaders,\n 'signer-domain': SignerDomain,\n 'key-length': KeyLength,\n ttl: Ttl,\n 'dkim-alignment': DkimAlignment,\n // DMARC\n from: From,\n 'return-path': ReturnPath,\n 'dmarc-policy': DmarcPolicy,\n pct: Pct,\n rua: Rua,\n ruf: Ruf,\n 'subdomain-policy': SubdomainPolicy,\n dmarc: Dmarc,\n // TLS\n tls: Tls,\n ssl: Ssl,\n 'cipher-suite': CipherSuite,\n // DNS records\n 'txt-record': TxtRecord,\n 'cname-record': CnameRecord,\n // BIMI\n 'bimi-record': BimiRecord,\n 'dmarc-compliant': DmarcCompliant,\n svg: SVG,\n vmc: VMC,\n cmc: CMC,\n itag: ITAG,\n atag: ATAG,\n // MTA-STS\n 'tls-rpt-record': TlsRptRecord,\n 'mta-sts-record': MtaStsRecord,\n 'mta-sts-policy-file': MtaStsPolicyFile,\n 'mta-file-version': Version,\n 'mta-file-mode': Mode,\n 'mta-file-mx': Mx,\n 'mta-file-max-age': MaxAge,\n 'mta-sts-certificate': MtaStsCertificate,\n 'mta-sts-certificate-expiry': MtaStsCertificateExpiry,\n};\n","/**\n * Glossary Markdown Parser\n *\n * Parses a subset of markdown syntax used in translation strings to render\n * React components for glossary terms, links, and formatting.\n *\n * @security TRUST ASSUMPTION\n * This parser trusts translation strings and renders their content as React elements.\n * Translation strings are bundled at build time from source-controlled JSON files,\n * NOT from user input or external APIs. If translation sources are ever moved to\n * an external CMS or user-editable system, this parser would need to be reviewed\n * for XSS vulnerabilities.\n *\n * Current security measures:\n * - URL validation: Only http/https protocols are allowed for links (see isValidUrl)\n * - No dangerouslySetInnerHTML usage\n * - Glossary terms are mapped to known component types\n */\n\nimport React from 'react';\nimport * as GlossaryComponents from '../components/glossary/glossary';\nimport { GlossaryTerm } from '../components/glossary/glossary';\nimport styled from 'styled-components';\nimport { COLOR } from '../cards/signal-card-styles';\n\n// Styled span that adds right padding when followed by a glossary tag\nconst TextBeforeGlossary = styled.span`\n &.before-glossary {\n padding-right: 0.35rem;\n }\n\n &.before-link {\n padding-right: 0.2rem;\n }\n`;\n\nconst MarkdownLink = styled.a`\n color: ${COLOR.main.blue};\n text-decoration: none;\n font: inherit;\n\n &:hover,\n &:focus {\n color: #005fa3;\n text-decoration: underline;\n }\n`;\n\nconst BoldText = styled.strong`\n font-weight: 600;\n`;\n\n/**\n * Validates that a URL uses a safe protocol (http or https).\n * Prevents XSS attacks via javascript: or data: URLs in translation strings.\n */\nconst isValidUrl = (url: string): boolean => {\n try {\n const parsed = new URL(url);\n return ['http:', 'https:'].includes(parsed.protocol);\n } catch {\n return false;\n }\n};\n\n/**\n * Parses markdown-style glossary syntax and converts to React components\n *\n * Supports patterns:\n * - [](TERM#:glossary) - Empty text, uses component's default label\n * - [Custom Text](TERM#:glossary) - Custom text with glossary link (renders as GlossaryTerm)\n * - [Link text](https://url) - Regular markdown links\n * - **bold text** - Bold formatting\n * - `code` - Inline code\n *\n * Example:\n * \"[PERCENT 100](PCT#:glossary) of **unauthorized** emails\"\n * becomes: <GlossaryTerm label=\"PCT\" context=\"PERCENT\" value=\"100\" /> of <strong>unauthorized</strong> emails\n */\n\n// Combined regex pattern for O(n) parsing - matches all markdown patterns in a single pass\n// Groups: 1=glossary text, 2=glossary term, 3=http link text, 4=http link url, 5=bold, 6=italic, 7=code, 8=plain link text, 9=plain link value\n// NOTE: Create new RegExp instance per call to avoid shared state issues with global flag\n// Order matters: check glossary first, then http links, then plain links (most specific to least specific)\nconst COMBINED_PATTERN_SOURCE =\n /\\[([^\\]]*)\\]\\(([A-Z_]+)#:glossary\\)|\\[([^\\]]+)\\]\\((https?:\\/\\/[^)]+)\\)|\\*\\*([^*]+)\\*\\*|\\*(?!\\*)([^*]+)\\*(?!\\*)|`([^`]+)`|\\[([^\\]]+)\\]\\(([^)]+)\\)/\n .source;\n\nexport function parseGlossaryMarkdown(text: string): React.ReactNode {\n if (!text || typeof text !== 'string') {\n return text;\n }\n\n const parts: React.ReactNode[] = [];\n let lastIndex = 0;\n let keyCounter = 0;\n let match: RegExpExecArray | null;\n\n // Create new regex instance per call to avoid shared lastIndex state issues\n const pattern = new RegExp(COMBINED_PATTERN_SOURCE, 'g');\n\n while ((match = pattern.exec(text)) !== null) {\n // Add text before the match (wrapped in span for CSS sibling selectors)\n if (match.index > lastIndex) {\n const textBefore = text.substring(lastIndex, match.index);\n // Determine class based on what type of match follows\n const isGlossary = match[2] !== undefined;\n const isLink = match[4] !== undefined;\n const className = isGlossary ? 'before-glossary' : isLink ? 'before-link' : '';\n parts.push(\n <TextBeforeGlossary key={`text-${keyCounter++}`} className={className}>\n {textBefore}\n </TextBeforeGlossary>\n );\n }\n\n // Process match based on which group matched\n if (match[2] !== undefined) {\n // Glossary: [custom text](TERM#:glossary)\n const customText = match[1];\n const termId = match[2];\n\n // Convert TXT_RECORD to TxtRecord\n const componentName = termId\n .split('_')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('');\n\n const GlossaryComponent = (GlossaryComponents as Record<string, any>)[componentName];\n\n if (GlossaryComponent) {\n if (customText) {\n const [context = '', ...rest] = customText.trim().split(/\\s+/);\n const value = rest.length ? rest.join(' ') : undefined;\n\n parts.push(\n <GlossaryTerm\n key={`glossary-${keyCounter++}`}\n label={termId}\n context={context || undefined}\n value={value}\n glossaryLabel={customText}\n />\n );\n } else {\n // No custom text - use the component with default label\n const Component = GlossaryComponent as React.ComponentType<any>;\n parts.push(<Component key={`glossary-${keyCounter++}`} />);\n }\n } else {\n // Component not found - render via GlossaryTerm with provided text\n const [context = '', ...rest] = customText ? customText.trim().split(/\\s+/) : [''];\n const value = rest.length ? rest.join(' ') : undefined;\n\n parts.push(\n <GlossaryTerm\n key={`glossary-${keyCounter++}`}\n label={termId}\n context={context || undefined}\n value={value}\n glossaryLabel={customText || termId}\n />\n );\n }\n } else if (match[4] !== undefined) {\n // Link: [text](url)\n const linkText = match[3];\n const linkUrl = match[4];\n // Validate URL protocol to prevent XSS via javascript: or data: URLs\n if (isValidUrl(linkUrl)) {\n parts.push(\n <MarkdownLink key={`link-${keyCounter++}`} href={linkUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n {linkText}\n </MarkdownLink>\n );\n } else {\n // Invalid URL - render as plain text for safety\n parts.push(<span key={`text-${keyCounter++}`}>{linkText}</span>);\n }\n } else if (match[5] !== undefined) {\n // Bold: **text**\n const boldText = match[5];\n const parsedBoldText = parseGlossaryMarkdown(boldText);\n parts.push(<BoldText key={`bold-${keyCounter++}`}>{parsedBoldText}</BoldText>);\n } else if (match[6] !== undefined) {\n // Italic: *text*\n const italicText = match[6];\n const parsedItalicText = parseGlossaryMarkdown(italicText);\n parts.push(<em key={`italic-${keyCounter++}`}>{parsedItalicText}</em>);\n } else if (match[7] !== undefined) {\n // Code: `text`\n const codeText = match[7];\n parts.push(<code key={`code-${keyCounter++}`}>{codeText}</code>);\n } else if (match[8] !== undefined && match[9] !== undefined) {\n // Plain link (non-http): [text](value) - render value as plain text\n // This handles cases like [svg-url](123) where 123 is not a valid URL\n const linkValue = match[9];\n parts.push(<span key={`plain-link-${keyCounter++}`}>{linkValue}</span>);\n }\n\n lastIndex = match.index + match[0].length;\n }\n\n // Add remaining text after last match\n if (lastIndex < text.length) {\n parts.push(text.substring(lastIndex));\n }\n\n // If no matches found, return original text\n if (parts.length === 0) {\n return text;\n }\n\n // If only one part and it's a string, return it directly\n if (parts.length === 1 && typeof parts[0] === 'string') {\n return parts[0];\n }\n\n // Wrap in fragment\n return <>{parts}</>;\n}\n","/* istanbul ignore file */\n\n/**\n * Caption types for ExtractionBox component\n * Maps to predefined caption text shown at bottom-right of grey boxes\n */\nexport type ExtractionCaptionType = 'email' | 'dns' | 'dns-details' | 'policy' | 'email-details';\n\n/**\n * Maps extraction caption types to translation keys\n */\nexport const EXTRACTION_CAPTION_KEYS: Record<ExtractionCaptionType, string> = {\n email: 'investigate:extracted-email',\n dns: 'investigate:extracted-dns',\n 'dns-details': 'investigate:extracted-dns-details',\n policy: 'investigate:extracted-policy',\n 'email-details': 'investigate:extracted-email-details',\n};\n","import styled from 'styled-components';\nimport { COLOR } from '../../signal-card-styles';\n\n// ============================================================================\n// All theming uses CSS variables with Design System fallbacks (Poppins).\n// When SignalCardThemeProvider sets useInvestigateColors=true,\n// these will be overridden with Investigate-specific fonts.\n// ============================================================================\n\n// Default fallback values - use DS CSS variables with hardcoded ultimate fallbacks\nconst DS_FONT_BODY = \"var(--redsift-typography-body-font-family, 'Poppins', sans-serif)\";\nconst DS_FONT_CODE = \"var(--redsift-typography-font-family-source-code-pro, 'Source Code Pro', monospace)\";\nconst DS_TEXT_COLOR = 'var(--redsift-color-neutral-x-dark-grey, #3B3A58)';\nconst DS_BG_LIGHT = 'var(--redsift-color-neutral-x-light-grey, #EAEAED)';\n\nexport const SectionHeader = styled.div`\n padding: 0;\n margin-bottom: 0.25rem;\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n line-height: normal;\n`;\n\nexport const SectionTitle = styled.span`\n margin: 0;\n margin-right: 0.5rem;\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n font-size: 16px;\n font-weight: 600;\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n`;\n\nexport const SectionCaption = styled.span`\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n font-size: 12px;\n font-weight: 400;\n color: ${COLOR.grey.medium};\n white-space: nowrap;\n\n code {\n font-family: inherit;\n color: inherit;\n white-space: nowrap;\n word-break: normal;\n }\n`;\n\nexport const ExtractionBox = styled.div<{ $hasCaption?: boolean }>`\n background-color: var(--sc-grey-background, ${DS_BG_LIGHT});\n padding: 0.5rem;\n border-radius: 4px;\n position: relative;\n padding-bottom: ${({ $hasCaption }) => ($hasCaption ? '1.75rem' : '0.5rem')};\n margin-bottom: 0.5rem;\n`;\n\nexport const ExtractionCaption = styled.div`\n position: absolute;\n bottom: 0.5rem;\n right: 0.5rem;\n left: 0.5rem;\n font-size: 12px;\n color: ${COLOR.grey.regular};\n text-align: right;\n line-height: 1.2;\n padding-top: 0.5rem;\n`;\n\nexport const InfoItemsHighlight = styled.div<{ $compact?: boolean; $insideCollapsible?: boolean }>`\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n padding-bottom: ${(props) => (props.$insideCollapsible ? '0' : '0.5rem')};\n word-break: break-word;\n border-radius: ${(props) => (props.$insideCollapsible ? '0' : '4px')};\n margin: ${(props) => (props.$insideCollapsible ? '0' : 'initial')};\n`;\n\nexport const InfoItemsGrid = styled.div<{\n $hasNonInlineItems?: boolean;\n $insideCollapsible?: boolean;\n}>`\n display: grid;\n grid-template-columns: auto 1fr;\n gap: 0.5rem 0.75rem;\n align-items: center;\n padding: ${(props) => (props.$insideCollapsible ? '0' : '0 0 0.5rem 0')};\n word-break: break-word;\n border-radius: ${(props) => (props.$insideCollapsible ? '0' : '4px')};\n margin: ${(props) => (props.$insideCollapsible ? '0' : 'initial')};\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n font-size: 14px;\n line-height: 1.5;\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n`;\n\nexport const GridLabel = styled.div`\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-size: 14px;\n line-height: 1.5;\n\n code {\n font-family: inherit;\n color: inherit;\n padding: 0 0.5rem;\n white-space: pre-wrap;\n word-break: break-word;\n }\n`;\n\nexport const GridValue = styled.div`\n display: flex;\n align-items: center;\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n font-size: 14px;\n font-weight: 600;\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n word-break: break-all;\n\n p {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n }\n\n span {\n margin-left: 0 !important;\n }\n\n code {\n font-family: inherit;\n color: inherit;\n padding: 0 0.5rem;\n white-space: pre-wrap;\n word-break: break-word;\n }\n`;\n\nexport const CodeBlock = styled.div`\n font-family: var(--sc-font-code, ${DS_FONT_CODE});\n font-size: 14px;\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n border-radius: 4px;\n width: 100%;\n word-break: break-all;\n white-space: normal;\n line-height: 1.5;\n\n p {\n display: inline !important;\n margin: 0 !important;\n padding: 0 !important;\n white-space: normal !important;\n }\n\n br {\n display: none !important;\n }\n`;\n\nExtractionBox.displayName = 'ExtractionBox';\nExtractionCaption.displayName = 'ExtractionCaption';\nInfoItemsHighlight.displayName = 'InfoItemsHighlight';\n","import React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Icon } from '@redsift/design-system';\nimport { mdiCheck, mdiClose, mdiEarth, mdiInformationOutline, mdiHelpCircle, mdiAlert, mdiEmail } from '@redsift/icons';\n\nimport { COLOR } from '../../../cards/signal-card-styles';\nimport { parseGlossaryMarkdown } from '../../../utils/parse-glossary-markdown';\nimport {\n EXTRACTION_CAPTION_KEYS,\n type ExtractionCaptionType,\n} from '../../../cards/SignalCard/components/extraction-box.constants';\nimport { useSignalCardTranslation } from '../../../hooks/useSignalCardTranslation';\nimport { ExtractionBox, ExtractionCaption } from '../../../cards/SignalCard/components/InfoSectionStyles';\n\n// All theming uses CSS variables with Design System fallbacks (Poppins).\n// When SignalCardThemeProvider sets useInvestigateColors=true,\n// these will be overridden with Investigate-specific fonts.\n\n// Default fallback values - use DS CSS variables with hardcoded ultimate fallbacks\nconst DS_FONT_BODY = \"var(--redsift-typography-body-font-family, 'Poppins', sans-serif)\";\nconst DS_FONT_CODE = \"var(--redsift-typography-font-family-source-code-pro, 'Source Code Pro', monospace)\";\nconst DS_TEXT_COLOR = 'var(--redsift-color-neutral-x-dark-grey, #3B3A58)';\nconst DS_LINK_COLOR = 'var(--redsift-color-notifications-info-primary, #4285f4)';\nconst DS_BG_LIGHT = 'var(--redsift-color-neutral-x-light-grey, #EAEAED)';\n\nconst StyledChecklistContainer = styled.div<{ $fluid: boolean }>`\n display: flex;\n flex-direction: ${({ $fluid }) => ($fluid ? 'row' : 'column')};\n flex-wrap: ${({ $fluid }) => ($fluid ? 'wrap' : 'nowrap')};\n gap: ${({ $fluid }) => ($fluid ? '0.5rem' : '0')};\n /* padding-bottom: 1rem; */\n min-width: 0; /* Allow flex container to shrink */\n\n /* Remove padding-bottom when inside result options list */\n [for='resultsList'] & {\n padding-bottom: 0;\n }\n`;\n\nconst StyledInfoItem = styled.div<{ $fluid: boolean; $compact: boolean }>`\n display: flex;\n flex-direction: column;\n gap: ${({ $compact }) => ($compact ? '0' : '0.35rem')};\n padding: ${({ $compact }) => ($compact ? '0.1em 0.5em 0.1em 0' : '0.25em 1em 0.25em 0')};\n min-width: 0; /* Allow flex item to shrink */\n ${({ $fluid }) =>\n $fluid\n ? css`\n flex: 1 1 200px;\n `\n : ''}\n`;\n\nconst StyledItemText = styled.div<{ $compact: boolean }>`\n display: flex;\n align-items: ${({ $compact }) => ($compact ? 'center' : 'flex-start')};\n gap: ${({ $compact }) => ($compact ? '0.5rem' : '0.75rem')};\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n font-size: 0.875rem;\n line-height: ${({ $compact }) => ($compact ? '1.4' : '2')};\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n min-width: 0; /* Allow flex container to shrink */\n\n @media (max-width: 480px) {\n max-width: 100%;\n }\n`;\n\nconst StyledIconWrapper = styled.span<{ $compact: boolean }>`\n display: flex;\n align-items: center;\n justify-content: center;\n padding-right: ${({ $compact }) => ($compact ? '0.25em' : '0.5em')};\n margin-top: ${({ $compact }) => ($compact ? '0' : '5px')};\n flex-shrink: 0;\n`;\n\nconst StyledContent = styled.span`\n flex: 1;\n display: block;\n min-width: 0; /* Allow flex item to shrink below content size */\n overflow-wrap: break-word;\n\n p {\n margin: 0 0 0.5rem;\n display: block;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n strong {\n font-weight: 600;\n }\n\n a {\n font: inherit;\n color: var(--sc-link-color, ${DS_LINK_COLOR});\n text-decoration: none;\n\n &:hover,\n &:focus {\n text-decoration: underline;\n }\n }\n\n code {\n background-color: var(--sc-code-bg, ${DS_BG_LIGHT});\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n border-radius: 4px;\n padding: 0 0.25rem;\n word-break: break-word;\n }\n`;\n\nconst StyledSubtexts = styled.div`\n margin: 0.5em 0 0.5em 0;\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n font-size: 0.875rem;\n line-height: 2;\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n overflow-wrap: break-word;\n\n a {\n font: inherit;\n color: var(--sc-link-color, ${DS_LINK_COLOR});\n text-decoration: none;\n\n &:hover,\n &:focus {\n text-decoration: underline;\n }\n }\n\n strong {\n font-weight: 600;\n }\n\n code {\n background-color: var(--sc-code-bg, ${DS_BG_LIGHT});\n font-family: var(--sc-font-code, ${DS_FONT_CODE});\n color: var(--sc-text-color, ${DS_TEXT_COLOR});\n padding: 0.2em 0.5em;\n border-radius: 3px;\n white-space: pre-wrap;\n word-break: break-word;\n }\n`;\n\nexport type ChecklistItem = {\n type: 'good' | 'info' | 'warning' | 'danger' | 'unknown' | string;\n theme?: 'email' | 'dns' | string;\n text: React.ReactNode;\n subtexts?: { text: React.ReactNode }[];\n link?: Record<string, unknown>;\n hasWarning?: boolean;\n /**\n * Wraps item in grey extraction box with optional caption\n * Used for DNS records, email data, policy files, etc.\n */\n extractionBox?: {\n caption?: ExtractionCaptionType;\n };\n /** Optional test ID for QA automation */\n 'data-testid'?: string;\n};\n\nexport type ChecklistProps = {\n items?: ChecklistItem[];\n fluid?: boolean;\n /** When true, renders with reduced vertical spacing for use inside radio/checkbox labels */\n compact?: boolean;\n};\n\nconst renderValue = (value: React.ReactNode, keyPrefix: string): React.ReactNode[] => {\n const nodes: React.ReactNode[] = [];\n\n const process = (item: React.ReactNode, prefix: string) => {\n if (item === null || item === undefined) {\n return;\n }\n\n if (Array.isArray(item)) {\n item.forEach((entry, idx) => process(entry as React.ReactNode, `${prefix}-${idx}`));\n return;\n }\n\n if (typeof item === 'string') {\n const trimmed = item.trim();\n if (!trimmed) {\n return;\n }\n\n nodes.push(<p key={`${prefix}-text`}>{parseGlossaryMarkdown(item)}</p>);\n return;\n }\n\n if (React.isValidElement(item)) {\n nodes.push(\n React.cloneElement(item, {\n key: item.key ?? `${prefix}-element`,\n })\n );\n return;\n }\n\n nodes.push(<p key={`${prefix}-fallback`}>{item}</p>);\n };\n\n process(value, keyPrefix);\n return nodes;\n};\n\ntype IconProps = Pick<ChecklistItem, 'type' | 'theme' | 'hasWarning'>;\n\nconst getIcon = ({ type, theme, hasWarning }: IconProps) => {\n switch (type) {\n case 'good':\n return <Icon icon={mdiCheck} color={hasWarning ? COLOR.main.yellow : COLOR.main.green} size=\"small\" />;\n case 'info':\n if (theme === 'email') {\n return <Icon icon={mdiEmail} color={COLOR.main.black} size=\"small\" />;\n }\n if (theme === 'dns') {\n return <Icon icon={mdiEarth} size=\"small\" />;\n }\n return <Icon icon={mdiInformationOutline} size=\"small\" />;\n case 'warning':\n return <Icon icon={mdiAlert} color={COLOR.main.yellow} size=\"small\" />;\n case 'danger':\n return <Icon icon={mdiClose} color={COLOR.main.red} size=\"small\" />;\n case 'unknown':\n return <Icon icon={mdiHelpCircle} size=\"small\" />;\n default:\n return null;\n }\n};\n\ntype InfoItemProps = ChecklistItem & { fluid: boolean; compact: boolean };\n\nconst InfoItem: React.FC<InfoItemProps> = ({\n type,\n theme,\n text,\n subtexts,\n hasWarning,\n fluid,\n compact,\n extractionBox,\n 'data-testid': dataTestId,\n}) => {\n const renderedText = renderValue(text, 'info-item-text');\n const icon = getIcon({ type, theme, hasWarning });\n const { t } = useSignalCardTranslation('investigate');\n\n const captionText = extractionBox?.caption ? t(EXTRACTION_CAPTION_KEYS[extractionBox.caption]) : undefined;\n\n // Handle image type specially - render without flex wrapper to preserve overflow\n if (type === 'image') {\n return (\n <StyledInfoItem $fluid={fluid} $compact={compact} data-testid={dataTestId}>\n {renderedText.length ? renderedText : null}\n </StyledInfoItem>\n );\n }\n\n const content = (\n <StyledInfoItem $fluid={fluid} $compact={compact} data-testid={dataTestId}>\n <StyledItemText $compact={compact}>\n {icon && <StyledIconWrapper $compact={compact}>{icon}</StyledIconWrapper>}\n <StyledContent>{renderedText.length ? renderedText : null}</StyledContent>\n </StyledItemText>\n {subtexts?.length ? (\n <StyledSubtexts>\n {subtexts.map((subtext, idx) => (\n <React.Fragment key={idx}>{renderValue(subtext.text, `info-item-subtext-${idx}`)}</React.Fragment>\n ))}\n </StyledSubtexts>\n ) : null}\n </StyledInfoItem>\n );\n\n // Wrap in extraction box if specified\n if (extractionBox) {\n return (\n <ExtractionBox $hasCaption={!!captionText}>\n {content}\n {captionText && <ExtractionCaption>{captionText}</ExtractionCaption>}\n </ExtractionBox>\n );\n }\n\n return content;\n};\n\n// Memoize InfoItem to prevent unnecessary re-renders of subtexts (e.g., Sankey charts)\nconst MemoizedInfoItem = React.memo(InfoItem);\n\nconst Checklist: React.FC<ChecklistProps> = ({ items = [], fluid = false, compact = false }) => {\n return (\n <StyledChecklistContainer $fluid={fluid}>\n {items.map((item, index) => (\n <MemoizedInfoItem key={index} {...item} fluid={fluid} compact={compact} />\n ))}\n </StyledChecklistContainer>\n );\n};\n\nexport default Checklist;\n\nStyledChecklistContainer.displayName = 'ChecklistContainer';\nStyledInfoItem.displayName = 'ChecklistInfoItem';\nStyledItemText.displayName = 'ChecklistItemText';\nStyledIconWrapper.displayName = 'ChecklistIconWrapper';\nStyledContent.displayName = 'ChecklistContent';\nStyledSubtexts.displayName = 'ChecklistSubtexts';\n","import React from 'react';\nimport { DetailedCard } from '@redsift/design-system';\nimport Checklist from '../../components/ui/Checklist/Checklist';\nimport { EXTRACTION_CAPTION_KEYS, type ExtractionCaptionType } from '../SignalCard/components/extraction-box.constants';\n\nexport interface ChecklistCategory {\n title?: string;\n caption?: ExtractionCaptionType;\n items?: Array<any>;\n text?: React.ReactNode;\n}\n\nexport interface ChecklistRendererProps {\n /** Array of category objects containing items to render. Accepts any[] for backwards compatibility with existing prop types. */\n infoItemsCategories: Array<ChecklistCategory | any>;\n /** Whether sections are collapsible */\n isCollapsible?: boolean;\n /** Whether all sections are collapsed */\n areAllCollapsed?: boolean;\n /** Translation function for captions */\n t: (key: string) => string;\n}\n\n/**\n * ChecklistRenderer - Renders categorized checklists within DetailedCard sections\n *\n * Extracted from SignalCardNormal to improve code organization.\n * Used by VMCCertificate, SafeSVG, and other checklist-based sections.\n */\nexport const ChecklistRenderer: React.FC<ChecklistRendererProps> = ({\n infoItemsCategories,\n isCollapsible = true,\n areAllCollapsed,\n t,\n}) => {\n if (!infoItemsCategories?.length) {\n return null;\n }\n\n const getTranslatedCaption = (caption?: ExtractionCaptionType): string | undefined => {\n if (!caption) return undefined;\n return t(EXTRACTION_CAPTION_KEYS[caption]);\n };\n\n const sections = infoItemsCategories\n .map((category, i) => {\n if (!category.items?.length) {\n return null;\n }\n\n const hasCaption = category.caption;\n\n return (\n <DetailedCard.Section\n key={i}\n header={category.title}\n isCollapsible={isCollapsible}\n isCollapsed={areAllCollapsed}\n >\n {hasCaption ? (\n <DetailedCard.CollapsibleSectionItems caption={getTranslatedCaption(category.caption)}>\n <Checklist items={category.items} />\n {category.text}\n </DetailedCard.CollapsibleSectionItems>\n ) : (\n <>\n <Checklist items={category.items} />\n {category.text}\n </>\n )}\n </DetailedCard.Section>\n );\n })\n .filter(Boolean);\n\n return <>{sections}</>;\n};\n\nexport default ChecklistRenderer;\n","import React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { COLOR } from '../../cards/signal-card-styles';\n\ntype AlignLabel = 'left' | 'right';\n\ntype CheckBoxProps = {\n id?: string;\n name?: string;\n className?: string;\n children?: React.ReactNode;\n selected?: boolean;\n color?: string;\n title?: string;\n onToggle?: () => void;\n disabled?: boolean;\n circle?: boolean;\n bold?: boolean;\n isSwitch?: boolean;\n alignLabel?: AlignLabel;\n};\n\nconst DISABLED_GREY = '#aaa';\n\nconst resolveAccentColor = (color?: string): string => {\n if (!color) {\n return COLOR.main.green;\n }\n\n switch (color) {\n case 'red':\n return COLOR.main.red;\n case 'yellow':\n return COLOR.main.yellow;\n case 'green':\n default:\n return COLOR.main.green;\n }\n};\n\nconst Wrapper = styled.div<{ $alignLabel: AlignLabel }>`\n display: flex;\n align-items: center;\n ${({ $alignLabel }) =>\n $alignLabel === 'left'\n ? css`\n flex-direction: row-reverse;\n `\n : undefined};\n`;\n\nconst StyledBox = styled.div<{\n $selected: boolean;\n $accentColor: string;\n $disabled: boolean;\n $circle: boolean;\n $bold: boolean;\n $isSwitch: boolean;\n}>`\n --checkbox-accent: ${({ $accentColor }) => $accentColor};\n box-sizing: content-box;\n display: flex;\n justify-content: center;\n align-items: center;\n margin: 2px 0 2px 0.5em;\n border-style: solid;\n border-color: ${({ $disabled, $accentColor }) => ($disabled ? DISABLED_GREY : $accentColor)};\n border-width: ${({ $circle, $bold }) => ($circle || $bold ? '2px' : '1px')};\n padding: ${({ $isSwitch, $bold, $circle }) => {\n if ($isSwitch) {\n return '0';\n }\n if ($bold) {\n return '2px';\n }\n if ($circle) {\n return '4px';\n }\n return '3px';\n }};\n height: ${({ $isSwitch, $circle }) => {\n if ($isSwitch) {\n return '24px';\n }\n if ($circle) {\n return '14px';\n }\n return '20px';\n }};\n width: ${({ $isSwitch, $circle }) => {\n if ($isSwitch) {\n return '48px';\n }\n if ($circle) {\n return '14px';\n }\n return '20px';\n }};\n border-radius: ${({ $isSwitch, $circle }) => {\n if ($isSwitch) {\n return '24px';\n }\n if ($circle) {\n return '50%';\n }\n return '3px';\n }};\n background-color: ${({ $selected, $circle, $accentColor }) => {\n if (!$selected) {\n return 'transparent';\n }\n return $circle ? '#fff' : $accentColor;\n }};\n cursor: ${({ $disabled }) => ($disabled ? 'default' : 'pointer')};\n transition: opacity 200ms ease;\n position: relative;\n\n &:hover {\n opacity: ${({ $disabled }) => ($disabled ? 1 : 0.7)};\n }\n\n &:focus-within {\n box-shadow: ${({ $disabled }) =>\n $disabled ? 'none' : '0 0 0 2px rgba(0, 0, 0, 0.12), 0 0 0 4px var(--checkbox-accent)'};\n }\n`;\n\nconst Center = styled.div<{\n $selected: boolean;\n $circle: boolean;\n $isSwitch: boolean;\n $accentColor: string;\n $disabled: boolean;\n}>`\n position: relative;\n height: ${({ $isSwitch, $circle }) => {\n if ($isSwitch) {\n return '100%';\n }\n if ($circle) {\n return '14px';\n }\n return '12px';\n }};\n width: ${({ $isSwitch, $circle }) => {\n if ($isSwitch) {\n return '100%';\n }\n if ($circle) {\n return '14px';\n }\n return '12px';\n }};\n border-radius: ${({ $isSwitch, $circle }) => {\n if ($isSwitch) {\n return '24px';\n }\n if ($circle) {\n return '50%';\n }\n return '3px';\n }};\n opacity: ${({ $selected, $isSwitch }) => ($isSwitch || $selected ? 1 : 0)};\n transition: opacity 200ms ease;\n ${({ $isSwitch, $selected, $accentColor, $disabled }) =>\n !$isSwitch && $selected\n ? css`\n background-color: ${$disabled ? DISABLED_GREY : $accentColor};\n `\n : ''}\n`;\n\nconst HiddenInput = styled.input<{ $accentColor: string }>`\n opacity: 0;\n cursor: pointer;\n position: absolute;\n inset: 0;\n margin: 0;\n width: 100%;\n height: 100%;\n z-index: 1;\n\n &:focus-visible + span {\n box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.12), 0 0 0 4px ${({ $accentColor }) => $accentColor};\n }\n`;\n\nconst Slider = styled.span<{\n $selected: boolean;\n $accentColor: string;\n $disabled: boolean;\n}>`\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: ${({ $selected, $accentColor, $disabled }) =>\n $selected ? ($disabled ? DISABLED_GREY : $accentColor) : '#ccc'};\n transition: 0.4s;\n border-radius: 34px;\n\n &::before {\n position: absolute;\n content: '';\n height: 16px;\n width: 16px;\n left: 4px;\n bottom: 4px;\n background-color: #fff;\n transition: 0.4s;\n border-radius: 50%;\n transform: ${({ $selected }) => ($selected ? 'translateX(24px)' : 'translateX(0)')};\n }\n`;\n\nconst StyledLabel = styled.label<{\n $alignLabel: AlignLabel;\n $hasChildren: boolean;\n}>`\n display: inline-flex;\n align-items: center;\n ${({ $hasChildren, $alignLabel }) =>\n $hasChildren\n ? $alignLabel === 'right'\n ? css`\n padding-left: 12px;\n `\n : css`\n padding-right: 12px;\n `\n : undefined};\n`;\n\nconst CheckBox: React.FC<CheckBoxProps> = ({\n id,\n name,\n className,\n children,\n selected = false,\n color,\n title,\n onToggle,\n disabled = false,\n circle = false,\n bold = false,\n isSwitch = false,\n alignLabel = 'right',\n}) => {\n const accentColor = resolveAccentColor(color);\n\n const handleToggle = () => {\n if (!disabled && onToggle) {\n onToggle();\n }\n };\n\n return (\n <Wrapper $alignLabel={alignLabel}>\n <StyledBox\n className={className}\n $selected={selected}\n $accentColor={accentColor}\n $disabled={disabled}\n $circle={circle}\n $bold={bold}\n $isSwitch={isSwitch}\n onClick={handleToggle}\n role=\"presentation\"\n title={title}\n >\n <Center\n $selected={selected}\n $circle={circle}\n $isSwitch={isSwitch}\n $accentColor={accentColor}\n $disabled={disabled}\n >\n <HiddenInput\n id={id}\n name={name}\n onChange={handleToggle}\n type={circle ? 'radio' : 'checkbox'}\n checked={Boolean(selected)}\n readOnly\n $accentColor={accentColor}\n />\n {selected && !circle && !isSwitch ? (\n <svg viewBox=\"0 0 24 24\" style={{ position: 'absolute', inset: 0 }}>\n <path style={{ strokeWidth: '3.12px' }} fill=\"none\" stroke=\"white\" d=\"M1.73,12.91 8.1,19.28 22.79,4.59\" />\n </svg>\n ) : null}\n {isSwitch ? <Slider $selected={selected} $accentColor={accentColor} $disabled={disabled} /> : null}\n </Center>\n </StyledBox>\n {id && (\n <StyledLabel htmlFor={id} $alignLabel={alignLabel} $hasChildren={Boolean(children)}>\n {children}\n </StyledLabel>\n )}\n </Wrapper>\n );\n};\n\nexport default CheckBox;\n","import React from 'react';\nimport { parseGlossaryMarkdown } from './parse-glossary-markdown';\n\nexport const hasRenderableContent = (value: any): boolean => {\n if (value === null || value === undefined) {\n return false;\n }\n\n if (typeof value === 'string') {\n return value.trim().length > 0;\n }\n\n if (Array.isArray(value)) {\n return value.some((item) => hasRenderableContent(item));\n }\n\n return true;\n};\n\nexport const formatContent = (value: any, keyPrefix = 'desc') => {\n const processValue = (item: any, key: string): React.ReactNode | React.ReactNode[] | null => {\n if (item === null || item === undefined || (typeof item === 'string' && item.trim().length === 0)) {\n return null;\n }\n\n if (Array.isArray(item)) {\n return processArray(item, key);\n }\n\n if (typeof item === 'string') {\n const parsed = parseGlossaryMarkdown(item);\n return <p key={`${keyPrefix}-${key}`}>{parsed}</p>;\n }\n\n if (React.isValidElement(item)) {\n return React.cloneElement(item, {\n key: item.key ?? `${keyPrefix}-${key}`,\n });\n }\n\n return <p key={`${keyPrefix}-${key}`}>{item}</p>;\n };\n\n const processArray = (arr: any[], key: string): React.ReactNode[] => {\n const result: React.ReactNode[] = [];\n let orderedListBuffer: string[] = [];\n\n const flushOrderedList = () => {\n if (!orderedListBuffer.length) {\n return;\n }\n\n const listIndex = result.length;\n result.push(\n <ol key={`${keyPrefix}-${key}-ol-${listIndex}`}>\n {orderedListBuffer.map((text, idx) => (\n <li key={`${keyPrefix}-${key}-li-${idx}`}>{parseGlossaryMarkdown(text)}</li>\n ))}\n </ol>\n );\n orderedListBuffer = [];\n };\n\n arr.forEach((entry, idx) => {\n const entryKey = `${key}-${idx}`;\n\n if (typeof entry === 'string') {\n const trimmed = entry.trim();\n\n if (trimmed.length === 0) {\n flushOrderedList();\n return;\n }\n\n const orderedListMatch = trimmed.match(/^(\\d+)\\.\\s+(.*)$/);\n if (orderedListMatch) {\n orderedListBuffer.push(orderedListMatch[2]);\n return;\n }\n }\n\n flushOrderedList();\n\n const processed = processValue(entry, entryKey);\n if (Array.isArray(processed)) {\n processed.forEach((node) => {\n if (node) {\n result.push(node);\n }\n });\n } else if (processed) {\n result.push(processed);\n }\n });\n\n flushOrderedList();\n\n return result;\n };\n\n const processed = processValue(value, 'root');\n\n if (Array.isArray(processed)) {\n const flattened: React.ReactNode[] = [];\n processed.forEach((node) => {\n if (node) {\n flattened.push(node);\n }\n });\n return flattened;\n }\n\n return processed;\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport { ButtonLink } from '@redsift/design-system';\nimport ondmarcLogoSimple from '../../assets/ondmarc-logo-simple.svg';\n\nconst StyledBanner = styled.div`\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 8px;\n border-radius: 8px;\n border: 1px solid rgba(99, 34, 74, 0.15);\n background: linear-gradient(\n 71deg,\n rgba(237, 21, 83, 0.07) 2.5%,\n rgba(140, 101, 255, 0.07) 51%,\n rgba(107, 183, 255, 0.07) 100%\n ),\n #fff;\n`;\n\nconst StyledBannerContent = styled.div`\n display: flex;\n gap: 16px;\n align-items: center;\n flex: 10000 1 300px;\n min-width: 0;\n`;\n\nconst StyledBannerLogo = styled.img`\n flex-shrink: 0;\n width: 46px;\n height: 38px;\n`;\n\nconst StyledBannerText = styled.span`\n font-size: 14px;\n line-height: 1.4;\n font-family: var(--sc-font-body);\n color: var(--sc-text-color);\n max-width: 335px;\n`;\n\nconst ONDMARC_SIGNUP_URL = 'https://iam.redsift.cloud/signup?redirectapp=cloud&product=ondmarc';\n\nconst websiteButtonToken = (token: 'background' | 'text', state: string) =>\n `var(--redsift-color-light-components-website-buttons-primary-website-button-primary-${token}-${state})`;\n\nconst StyledBannerLink = styled.a`\n box-sizing: border-box;\n align-items: center;\n background-color: ${websiteButtonToken('background', 'default')};\n background-color: var(\n --redsift-color-light-components-website-buttons-primary-website-button-primary-background-default,\n #63224a\n );\n border: none;\n border-radius: 5px;\n display: inline-flex;\n font-family: var(--redsift-typography-website-button-font-family, 'Space Grotesk', sans-serif);\n font-size: var(--redsift-typography-website-button-font-size, 18px);\n font-weight: var(--redsift-typography-website-button-font-weight, 500);\n gap: 8px;\n justify-content: center;\n line-height: var(--redsift-typography-website-button-line-height, 1.5);\n min-height: 48px;\n padding: 10px 20px;\n text-align: center;\n text-decoration: none;\n cursor: pointer;\n transition: background-color 200ms ease-out, color 200ms ease-out;\n white-space: nowrap;\n flex: 1 0 0%;\n -webkit-font-smoothing: antialiased;\n\n &,\n svg {\n color: ${websiteButtonToken('text', 'default')};\n color: var(--redsift-color-light-components-website-buttons-primary-website-button-primary-text-default, white);\n }\n\n &:hover {\n background-color: var(\n --redsift-color-light-components-website-buttons-primary-website-button-primary-background-hover,\n #52184d\n );\n color: var(--redsift-color-light-components-website-buttons-primary-website-button-primary-text-hover, white);\n }\n\n &:active {\n background-color: ${websiteButtonToken('background', 'active')};\n color: ${websiteButtonToken('text', 'active')};\n }\n`;\n\nconst ExternalLinkIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n height=\"24\"\n width=\"24\"\n preserveAspectRatio=\"xMidYMid meet\"\n role=\"img\"\n >\n <path\n d=\"M14,3V5H17.59L7.76,14.83L9.17,16.24L19,6.41V10H21V3M19,19H5V5H12V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V12H19V19Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nconst StyledDSButtonLinkWrapper = styled.div`\n flex: 1 0 0%;\n\n .redsift-button-link {\n box-sizing: border-box;\n white-space: nowrap;\n text-decoration: none;\n width: 100%;\n }\n\n .redsift-button-link > span {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n }\n`;\n\nexport interface DmarcPromoBannerProps {\n /** Translated banner text */\n text: string;\n /** Translated button label */\n buttonLabel: string;\n /** Use Investigate-specific styling for the button. When false, uses DS Button. */\n useInvestigateColors?: boolean;\n /** Override the button href (e.g. to add UTM parameters). Defaults to the OnDMARC signup URL. */\n href?: string;\n}\n\n/**\n * Promotional banner for OnDMARC displayed at the top of the DMARC signal card.\n * When useInvestigateColors is true, uses website button tokens (matching SignalCardButton).\n * When false, uses the DS Button component.\n * Text uses CSS variables (--sc-font-body, --sc-text-color) which adapt based on the theme.\n */\nexport const DmarcPromoBanner: React.FC<DmarcPromoBannerProps> = ({\n text,\n buttonLabel,\n useInvestigateColors = false,\n href = ONDMARC_SIGNUP_URL,\n}) => (\n <StyledBanner data-testid=\"dmarc-promo-banner\">\n <StyledBannerContent>\n <StyledBannerLogo src={ondmarcLogoSimple} alt=\"OnDMARC\" />\n <StyledBannerText>{text}</StyledBannerText>\n </StyledBannerContent>\n {useInvestigateColors ? (\n <StyledBannerLink href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n {buttonLabel}\n <ExternalLinkIcon />\n </StyledBannerLink>\n ) : (\n <StyledDSButtonLinkWrapper>\n <ButtonLink href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n {buttonLabel}\n <ExternalLinkIcon />\n </ButtonLink>\n </StyledDSButtonLinkWrapper>\n )}\n </StyledBanner>\n);\n","import React, { useEffect, forwardRef, useId, useMemo, useCallback } from 'react';\nimport classNames from 'classnames';\nimport type { Comp } from '@redsift/design-system';\nimport { DetailedCard, Flexbox } from '@redsift/design-system';\nimport { useSignalCardTranslation } from '../../hooks/useSignalCardTranslation';\nimport { useResolvedTheme } from '../../hooks/useSignalCardTheme';\nimport type { SignalCardNormalProps } from './types';\nimport { StyledIntroText, StyledCardHeader, StyledCardFooter } from './styles';\nimport { ExpandableDescription } from './ExpandableDescription';\n\nimport { SignalCardSection } from '../SignalCard';\nimport { DescriptionContainer, CardWrapper, DescriptionSpacer } from '../SignalCard/components/CardDescriptionStyles';\n\nimport Checklist from '../../components/ui/Checklist/Checklist';\nimport { ChecklistRenderer } from './ChecklistRenderer';\nimport CheckBox from '../../components/ui/CheckBox';\nimport { formatContent, hasRenderableContent } from '../../utils/format-content';\n\nimport { Icon } from '@redsift/design-system';\nimport { mdiCheck, mdiClose, mdiInformation, mdiAlert } from '@redsift/icons';\nimport { FONT, getThemeCSSVars } from '../signal-card-styles';\nimport { componentLogger } from '../../utils/logger';\nimport { mapStatusToDetailedCardColor } from '@redsift/signal-logic';\nimport { DmarcPromoBanner } from '../SignalCardDmarc/DmarcPromoBanner';\n// Use consolidated status mapping\nconst mapCardTypeToColor = mapStatusToDetailedCardColor;\n\nexport const DEFAULT_SECTION_ORDER = ['resultOptions', 'introDescription', 'safeSVG', 'VMCCertificate'];\n\n/**\n * SignalCardNormal - Universal card component for displaying security check results\n *\n * Key architectural decisions:\n * - `type` vs `cardType`: `cardType` controls visual styling (icon, color).\n * `type` is used for i18n description lookup.\n * - Error handling: Cards merge error items internally into `infoItemsCategories`\n * before passing to this component.\n * - Type system: Supports 'danger' for authentication failures (red icon),\n * 'warning' for temporary issues (orange icon).\n */\nconst COMPONENT_NAME = 'SignalCardNormal';\nconst CLASSNAME = 'redsift-signal-card-normal';\n\n/**\n * SignalCardNormal is the base component for all signal cards in the Investigate tool.\n * It provides a consistent structure for displaying card header, extracted items, checklists,\n * descriptions, and custom content sections.\n */\nexport const SignalCardNormal: Comp<SignalCardNormalProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n cardType,\n resultSelected,\n resultOptions,\n optionsLabel,\n onResultsChange,\n type,\n title,\n safeSVG = null,\n VMCCertificate = null,\n customSectionOrder = null,\n onHeightChange,\n onCTAButtonClick,\n ctaButtonName,\n shortDescription,\n longDescription,\n introDescription,\n onComponentMount,\n children,\n renderHeader,\n promoHref,\n renderFooter,\n bannerVariant = 'none',\n isLoading,\n shield,\n icon,\n useInvestigateColors: useInvestigateColorsOverride,\n isCollapsible = true,\n areAllCollapsed,\n onCollapseAll,\n className,\n sections,\n // Destructure non-DOM props to prevent them from being spread to DOM elements\n // These come from parent components like SignalCardList but shouldn't reach the DOM\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n signalType: _signalType,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n jmap: _jmap,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n domain: _domain,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n investigate: _investigate,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isDomainAnalyzer: _isDomainAnalyzer,\n ...forwardedProps\n } = props as SignalCardNormalProps & {\n signalType?: unknown;\n jmap?: unknown;\n domain?: unknown;\n investigate?: unknown;\n isDomainAnalyzer?: unknown;\n };\n\n const resultOptionsBaseId = useId();\n const resultOptionsGroupName = `${COMPONENT_NAME}-results-${resultOptionsBaseId}`;\n\n const { t } = useSignalCardTranslation('investigate');\n const { useInvestigateColors } = useResolvedTheme(useInvestigateColorsOverride);\n\n const defaultRenderHeader = useCallback(\n () => (\n <DmarcPromoBanner\n text={t('dmarc-promo.text')}\n buttonLabel={t('dmarc-promo.button')}\n useInvestigateColors={useInvestigateColors}\n href={promoHref}\n />\n ),\n [t, useInvestigateColors, promoHref]\n );\n // When using a thick banner header (standard/condensed), don't show the promo card by default —\n // only DMARC should show it, and it does so by passing an explicit renderHeader prop.\n const effectiveRenderHeader = renderHeader !== undefined ? renderHeader : bannerVariant === 'none' ? defaultRenderHeader : null;\n\n // Get CSS variables for theming - memoized to avoid recalculating on every render\n const themeCSSVars = useMemo(() => getThemeCSSVars(useInvestigateColors), [useInvestigateColors]);\n\n useEffect(() => {\n onComponentMount?.();\n }, [onComponentMount]);\n\n // Memoize description computations to avoid expensive formatContent parsing on every render\n const { shortDescriptionComponent, hasShortDescription } = useMemo(() => {\n const raw =\n shortDescription ??\n (type\n ? (() => {\n const result = t(`signal-description.${type}_md`, {\n context: 'SHORT',\n defaultValue: '',\n returnObjects: true,\n });\n // If translation returns the key itself (missing translation), treat as no short description\n if (typeof result === 'string' && (result as string).includes('signal-description')) {\n return null;\n }\n return result;\n })()\n : null);\n return {\n shortDescriptionComponent: formatContent(raw),\n hasShortDescription: hasRenderableContent(raw),\n };\n }, [shortDescription, type, t]);\n\n const { longDescriptionRaw, longDescriptionComponent, hasLongDescription } = useMemo(() => {\n const raw =\n longDescription ??\n (type\n ? (() => {\n const result = t(`signal-description.${type}_md`, {\n context: 'LONG',\n defaultValue: '',\n returnObjects: true,\n });\n // If translation returns the key itself (missing translation), treat as no long description\n if (typeof result === 'string' && (result as string).includes('signal-description')) {\n return null;\n }\n return result;\n })()\n : null);\n return {\n longDescriptionRaw: raw,\n longDescriptionComponent: formatContent(raw),\n hasLongDescription: hasRenderableContent(raw),\n };\n }, [longDescription, type, t]);\n\n const introDescriptionComponent = useMemo(() => {\n const raw =\n introDescription ??\n (type\n ? (() => {\n const result = t(`signal-description.${type}_md_INTRO`, {\n defaultValue: '',\n returnObjects: true,\n });\n // If translation returns empty string, the key itself (a string with dots), or is falsy, treat as no intro\n if (!result) {\n return undefined;\n }\n if (typeof result === 'string' && (result as string).includes('signal-description')) {\n return undefined;\n }\n return result;\n })()\n : undefined);\n return formatContent(raw);\n }, [introDescription, type, t]);\n\n const { additionalLongDescriptionComponent, hasAdditionalLongDescription } = useMemo(() => {\n const normalizedLongDescriptionRaw = Array.isArray(longDescriptionRaw)\n ? longDescriptionRaw\n : longDescriptionRaw !== null && longDescriptionRaw !== undefined\n ? [longDescriptionRaw]\n : [];\n\n const additionalRaw =\n hasShortDescription && normalizedLongDescriptionRaw.length\n ? normalizedLongDescriptionRaw.slice(1)\n : normalizedLongDescriptionRaw;\n\n return {\n additionalLongDescriptionComponent: formatContent(additionalRaw),\n hasAdditionalLongDescription: hasRenderableContent(additionalRaw),\n };\n }, [longDescriptionRaw, hasShortDescription]);\n\n const descriptionContent: React.ReactNode[] = [];\n\n const appendContent = (content: React.ReactNode | React.ReactNode[]) => {\n if (!content) {\n return;\n }\n\n if (Array.isArray(content)) {\n descriptionContent.push(...content);\n } else {\n descriptionContent.push(content);\n }\n };\n\n // Always include all description content, hide/show via CSS\n if (hasShortDescription) {\n appendContent(shortDescriptionComponent);\n }\n\n const hasAdditionalContent = hasShortDescription && hasLongDescription;\n const additionalDescriptionContent = hasAdditionalLongDescription\n ? additionalLongDescriptionComponent\n : longDescriptionComponent;\n\n const descriptionEl = descriptionContent.length ? descriptionContent : null;\n\n const showShowMoreButton = hasShortDescription && hasLongDescription;\n const showCTAButton = onCTAButtonClick !== undefined;\n\n // Memoize section render functions to prevent identity changes on every render\n const ResultOptions = useMemo(\n () => () => {\n return (\n <>\n {resultOptions && resultOptions.length > 1 && (\n <SignalCardSection>\n {optionsLabel && <h4 style={{ marginTop: '0.5rem' }}>{optionsLabel}</h4>}\n {resultOptions.map((data, i) => {\n // Extract type from data if present (for SPF/DKIM identity selection)\n const itemType = 'type' in data && typeof data.type === 'string' ? data.type : 'info';\n const optionId = `${resultOptionsGroupName}-option-${i}`;\n return (\n <div key={optionId}>\n <CheckBox\n id={optionId}\n name={resultOptionsGroupName}\n circle={true}\n onToggle={() => onResultsChange?.(i)}\n selected={resultSelected === i}\n >\n <Checklist\n compact\n items={[\n {\n ...data,\n text: data.label,\n type: itemType,\n },\n ]}\n />\n </CheckBox>\n </div>\n );\n })}\n </SignalCardSection>\n )}\n </>\n );\n },\n [resultOptions, optionsLabel, resultOptionsGroupName, onResultsChange, resultSelected]\n );\n\n const IntroDescription = useMemo(\n () => () => {\n return (\n <>\n {introDescriptionComponent ? (\n <SignalCardSection marginBottom={0} borderBottom={false}>\n <StyledIntroText>{introDescriptionComponent}</StyledIntroText>\n </SignalCardSection>\n ) : null}\n </>\n );\n },\n [introDescriptionComponent]\n );\n\n const SafeSVG = useMemo(\n () => () => {\n if (!safeSVG) return null;\n return (\n <ChecklistRenderer\n infoItemsCategories={[safeSVG]}\n isCollapsible={isCollapsible}\n areAllCollapsed={areAllCollapsed}\n t={t}\n />\n );\n },\n [safeSVG, isCollapsible, areAllCollapsed, t]\n );\n\n const VMCCertificatSection = useMemo(\n () => () => {\n if (!VMCCertificate) return null;\n return (\n <ChecklistRenderer\n infoItemsCategories={[VMCCertificate]}\n isCollapsible={isCollapsible}\n areAllCollapsed={areAllCollapsed}\n t={t}\n />\n );\n },\n [VMCCertificate, isCollapsible, areAllCollapsed, t]\n );\n\n // Render generic sections passed via the `sections` prop\n const GenericSections = useMemo(\n () => () => {\n if (!sections?.length) return null;\n\n return sections.map((section, i) => (\n <DetailedCard.Section\n key={`generic-${section.id}-${i}`}\n header={section.title}\n isCollapsible={section.isCollapsible ?? false}\n isCollapsed={areAllCollapsed}\n data-testid={section.testId}\n >\n {section.content}\n </DetailedCard.Section>\n ));\n },\n [sections, areAllCollapsed]\n );\n\n const componentNameMap: Record<string, () => React.ReactNode> = {\n resultOptions: ResultOptions,\n introDescription: IntroDescription,\n safeSVG: SafeSVG,\n VMCCertificate: VMCCertificatSection,\n genericSections: GenericSections,\n };\n\n // Helper function to check if a section has content to display\n const sectionHasContent = (sectionName: string): boolean => {\n // First check if it's a generic section passed via props (takes priority)\n // This allows cards to use IDs like 'VMCCertificate' in their sections array\n // without conflicting with the built-in prop-based section\n if (sections?.some((s) => s.id === sectionName)) {\n return true;\n }\n\n // Then check built-in sections\n switch (sectionName) {\n case 'resultOptions':\n return !!(resultOptions && resultOptions.length > 1);\n case 'introDescription':\n return !!introDescriptionComponent;\n case 'safeSVG':\n return safeSVG !== null && safeSVG !== undefined;\n case 'VMCCertificate':\n return VMCCertificate !== null && VMCCertificate !== undefined;\n case 'genericSections':\n return !!(sections && sections.length > 0);\n default:\n // For unknown sections, assume they have content (fallback)\n return true;\n }\n };\n\n const sectionsOrder = customSectionOrder || [...DEFAULT_SECTION_ORDER, 'genericSections'];\n\n // Filter out sections that have no content to display\n const sectionsWithContent = sectionsOrder.filter(sectionHasContent);\n\n // Collect all rendered sections as a flat array so DetailedCard can count them\n // This flattens arrays returned from wrapper functions so DetailedCard.hasMultipleCollapsibleChildren\n // can see individual DetailedCard.Section elements as direct children\n const renderedSections = sectionsWithContent.flatMap((section) => {\n // 1. First check if it's a generic section passed via props (takes priority)\n // This allows cards to use IDs like 'VMCCertificate' or 'safeSVG' in their sections array\n // without conflicting with the built-in prop-based sections\n const genericSection = sections?.find((s) => s.id === section);\n if (genericSection) {\n return [\n <DetailedCard.Section\n key={genericSection.id}\n header={genericSection.title}\n isCollapsible={genericSection.isCollapsible ?? false}\n isCollapsed={areAllCollapsed}\n data-testid={genericSection.testId}\n >\n {genericSection.content}\n </DetailedCard.Section>,\n ];\n }\n\n // 2. Then check if it's a built-in section\n const renderSection = componentNameMap[section];\n if (renderSection) {\n const result = renderSection();\n\n // If result is an array, add keys to each element\n if (Array.isArray(result)) {\n return result.map((item, index) =>\n React.isValidElement(item) ? React.cloneElement(item, { key: `${section}-${index}` }) : item\n );\n }\n\n // If result is a single element, add key\n if (React.isValidElement(result)) {\n return [React.cloneElement(result, { key: section })];\n }\n\n return result ? [result] : [];\n }\n\n return [];\n });\n if (customSectionOrder && process.env.NODE_ENV !== 'production') {\n // Only warn about default sections that are missing from custom order\n // (Don't warn about card-specific sections like checklistsBimi, etc.)\n const missingSections = DEFAULT_SECTION_ORDER.filter((section) => !sectionsOrder.includes(section));\n // Only warn if the component actually has data for the missing sections\n const hasResultOptions = resultOptions && resultOptions.length > 0;\n const hasSafeSVG = safeSVG !== undefined && safeSVG !== null;\n const hasVMCCertificate = VMCCertificate !== undefined && VMCCertificate !== null;\n\n const relevantMissingSections = missingSections.filter((section) => {\n if (section === 'resultOptions' && hasResultOptions) return true;\n if (section === 'safeSVG' && hasSafeSVG) return true;\n if (section === 'VMCCertificate' && hasVMCCertificate) return true;\n return false;\n });\n\n if (relevantMissingSections.length > 0) {\n componentLogger.warn('[SignalCardNormal] customSectionOrder is missing sections that have data.', {\n missingSections: relevantMissingSections,\n });\n }\n }\n\n // Map bannerVariant to DetailedCard props\n const detailedCardColor = bannerVariant === 'none' ? undefined : mapCardTypeToColor(cardType);\n const detailedCardBannerVariant = bannerVariant === 'condensed' ? 'condensed' : 'standard';\n\n // Calculate icon color independently for use in header (always based on cardType, not banner visibility)\n const iconColor = mapCardTypeToColor(cardType) || 'neutral-x-dark-grey';\n\n // Generate icon from cardType if not explicitly provided\n const effectiveIcon =\n icon ||\n (() => {\n const upper = cardType?.toString().toUpperCase();\n if (upper === 'GOOD' || upper === 'PASS' || upper === 'PASSED') return mdiCheck;\n if (upper === 'DANGER' || upper === 'FAIL' || upper === 'FAILED') return mdiClose;\n if (upper === 'WARNING') return mdiAlert;\n if (upper === 'INFO' || upper === 'UNKNOWN') return mdiInformation;\n return undefined;\n })();\n\n // When banner is hidden, show icon in header; when banner is visible, show icon in banner\n const showIconInHeader = bannerVariant === 'none' && effectiveIcon;\n const showIconInBanner = bannerVariant !== 'none' && effectiveIcon;\n\n return (\n <CardWrapper\n {...forwardedProps}\n className={classNames(SignalCardNormal.className, className)}\n ref={ref}\n style={{ ...themeCSSVars, ...forwardedProps.style } as React.CSSProperties}\n >\n <DetailedCard\n color={detailedCardColor}\n bannerVariant={bannerVariant === 'none' ? undefined : detailedCardBannerVariant}\n icon={showIconInBanner ? (effectiveIcon as any) : undefined}\n isLoading={isLoading}\n shield={shield as any}\n isCollapsible={isCollapsible}\n areAllCollapsed={areAllCollapsed}\n onCollapseAll={onCollapseAll}\n width=\"auto\"\n >\n {title && (\n <DetailedCard.Header header={!showIconInHeader && typeof title === 'string' ? title : undefined}>\n {showIconInHeader ? (\n <Flexbox gap=\"8px\" alignItems=\"center\">\n <Icon icon={effectiveIcon as any} size=\"large\" color={iconColor} />\n {typeof title === 'string' ? (\n <span\n style={{\n fontSize: '32px',\n fontWeight: 500,\n lineHeight: '32px',\n fontFamily: useInvestigateColors ? FONT.TYPE.HEADING : undefined,\n }}\n >\n {title}\n </span>\n ) : (\n <span\n style={{\n fontSize: '32px',\n fontWeight: 500,\n lineHeight: '32px',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flexWrap: 'wrap',\n fontFamily: useInvestigateColors ? FONT.TYPE.HEADING : undefined,\n }}\n >\n {title}\n </span>\n )}\n </Flexbox>\n ) : typeof title !== 'string' ? (\n <span\n style={{\n fontSize: '32px',\n fontWeight: 500,\n lineHeight: '32px',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flexWrap: 'wrap',\n fontFamily: useInvestigateColors ? FONT.TYPE.HEADING : undefined,\n }}\n >\n {title}\n </span>\n ) : null}\n </DetailedCard.Header>\n )}\n {effectiveRenderHeader &&\n (() => {\n const headerContent = effectiveRenderHeader();\n return headerContent != null ? <StyledCardHeader>{headerContent}</StyledCardHeader> : null;\n })()}\n {renderedSections}\n {children}\n {renderFooter && <StyledCardFooter>{renderFooter()}</StyledCardFooter>}\n {descriptionEl && (\n <SignalCardSection borderBottom={false}>\n <DescriptionSpacer />\n\n <DescriptionContainer>\n <ExpandableDescription\n shortDescription={descriptionEl}\n additionalDescription={additionalDescriptionContent}\n hasAdditionalContent={hasAdditionalContent}\n showShowMoreButton={showShowMoreButton}\n showCTAButton={showCTAButton}\n onCTAButtonClick={onCTAButtonClick}\n ctaButtonName={ctaButtonName}\n t={t}\n onHeightChange={onHeightChange}\n useInvestigateColors={useInvestigateColors}\n />\n </DescriptionContainer>\n </SignalCardSection>\n )}\n </DetailedCard>\n </CardWrapper>\n );\n});\n\nSignalCardNormal.className = CLASSNAME;\nSignalCardNormal.displayName = COMPONENT_NAME;\n","import { useEffect, useRef, type RefObject } from 'react';\n\ntype EventHandler = (event: MouseEvent | TouchEvent) => void;\n\nconst useOnClickOutside = <T extends HTMLElement>(\n ref: RefObject<T>,\n handler: EventHandler\n) => {\n const handlerRef = useRef(handler);\n handlerRef.current = handler;\n\n useEffect(() => {\n const listener = (event: MouseEvent | TouchEvent) => {\n const element = ref?.current;\n if (!element || element.contains(event.target as Node)) {\n return;\n }\n\n handlerRef.current(event);\n };\n\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n\n return () => {\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n };\n }, [ref]);\n};\n\nexport default useOnClickOutside;\n","import React, { useEffect, useRef, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useOnClickOutside } from '../../../hooks';\n\ninterface PortalProps {\n children: ReactNode;\n onClickOutside?: () => void;\n rootId?: string;\n}\n\nconst Portal: React.FC<PortalProps> = ({\n children,\n onClickOutside = () => {},\n rootId = 'portal-root',\n}) => {\n const mount =\n typeof document !== 'undefined' ? document.getElementById(rootId) : null;\n const ref = useRef<HTMLDivElement | null>(\n typeof document !== 'undefined' ? document.createElement('div') : null\n );\n\n const el = ref.current;\n\n useOnClickOutside(ref, onClickOutside);\n\n useEffect(() => {\n if (!mount || !el) {\n return;\n }\n\n mount.appendChild(el);\n return () => {\n mount.removeChild(el);\n };\n }, [el, mount]);\n\n if (!el) {\n return null;\n }\n\n return createPortal(children, el);\n};\n\nexport default Portal;\n","import React from 'react';\nimport styled, { css } from 'styled-components';\n\nexport const PLACEMENT = {\n UP: 'up',\n DOWN: 'down',\n TOP_LEFT: 'top-left',\n RIGHT: 'right',\n CENTER: 'center',\n LEFT: 'left',\n} as const;\n\ntype Placement = (typeof PLACEMENT)[keyof typeof PLACEMENT];\n\nconst TooltipContent = styled.div<{ $placement: Placement }>`\n background-color: #fff;\n border-radius: 3px;\n box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.3);\n opacity: 0;\n padding: 13px 25px;\n position: absolute;\n transform: translateX(-50%);\n scale: 0;\n transition: 0.4s cubic-bezier(0.25, 0.01, 0.24, 1) opacity;\n visibility: hidden;\n z-index: 1;\n\n top: 0;\n left: 0;\n ${({ $placement }) => {\n if ($placement === PLACEMENT.CENTER) {\n return css`\n transform: translate(-50%, 0);\n `;\n }\n\n if ($placement === PLACEMENT.UP) {\n return css`\n transform: translate(-50%, -100%);\n `;\n }\n\n if ($placement === PLACEMENT.LEFT) {\n return css`\n transform: translate(-110%, -50%);\n `;\n }\n if ($placement === PLACEMENT.TOP_LEFT) {\n return css`\n transform: translate(-100%, -100%);\n `;\n }\n if ($placement === PLACEMENT.RIGHT) {\n return css`\n transform: translate(100%, -50%);\n `;\n }\n return '';\n }}\n\n & > span {\n display: block;\n min-width: 150px;\n max-width: 300px;\n font-weight: 500;\n }\n\n &::before {\n content: '';\n position: absolute;\n left: 50%;\n width: 0;\n height: 0;\n border: 7px solid white;\n border-left-color: transparent;\n border-bottom-color: transparent;\n\n ${({ $placement }) => {\n if ($placement === PLACEMENT.UP) {\n return css`\n bottom: -7px;\n transform: translateX(-50%) rotate(135deg);\n box-shadow: 2px -3px 3px 0 rgba(0, 0, 0, 30%);\n `;\n }\n\n if ($placement === PLACEMENT.TOP_LEFT) {\n return css`\n right: 0;\n transform: translate(-100%, -100%);\n bottom: 0;\n `;\n }\n return css`\n top: -7px;\n transform: translateX(-50%) rotate(-45deg);\n `;\n }}\n }\n`;\n\nconst TooltipContainer = styled.div<{ $isOpen?: boolean }>`\n align-items: center;\n cursor: pointer;\n display: inline-flex;\n position: relative;\n\n ${({ $isOpen }) => css`\n ${$isOpen === undefined\n ? css`\n &:hover ${TooltipContent} {\n visibility: visible;\n opacity: 1;\n scale: 1;\n }\n `\n : ''}\n ${$isOpen\n ? css`\n ${TooltipContent} {\n visibility: visible;\n opacity: 1;\n scale: 1;\n }\n `\n : ''}\n `}\n`;\n\ninterface TooltipProps {\n children?: React.ReactNode;\n className?: string;\n placement?: Placement;\n renderContent?: React.ReactNode;\n ContentComponent?: React.ComponentType;\n isOpen?: boolean;\n styles?: React.CSSProperties;\n}\n\nconst Tooltip: React.FC<TooltipProps> = ({\n children,\n className,\n placement = PLACEMENT.DOWN,\n renderContent,\n ContentComponent,\n isOpen,\n styles,\n}) => (\n <TooltipContainer className={className} $isOpen={isOpen} style={styles}>\n {children}\n {ContentComponent && (\n <TooltipContent $placement={placement} className=\"tooltip__content\">\n <ContentComponent />\n </TooltipContent>\n )}\n {renderContent && (\n <TooltipContent $placement={placement} className=\"tooltip__content\">\n <span>{renderContent}</span>\n </TooltipContent>\n )}\n </TooltipContainer>\n);\n\nexport type { Placement };\nexport default Tooltip;\n","import React, { useEffect, useState, useRef, type ReactNode } from 'react';\nimport styled from 'styled-components';\nimport Portal from '../Portal/Portal';\nimport Tooltip, { PLACEMENT, type Placement } from '../Tooltip/Tooltip';\n\n// All theming uses CSS variables with Design System fallbacks (Poppins).\n// When SignalCardThemeProvider sets useInvestigateColors=true,\n// these will be overridden with Investigate-specific fonts.\n\n// Default fallback values - use DS CSS variables with hardcoded ultimate fallbacks\nconst DS_FONT_BODY = \"var(--redsift-typography-body-font-family, 'Poppins', sans-serif)\";\n\n/**\n * TooltipInPortal Component\n *\n * A tooltip that renders in a React portal to avoid clipping issues when\n * the parent container has `overflow: hidden` or other CSS constraints.\n *\n * **IMPORTANT: DOM Requirement**\n * This component requires a `<div id=\"portal-root\"></div>` element in the DOM.\n * If this element is missing, the tooltip will not render.\n *\n * **For Storybook:**\n * Add to `storybook/.storybook/preview-head.html`:\n * ```html\n * <div id=\"portal-root\"></div>\n * ```\n *\n * **For consuming applications:**\n * Add to your root HTML file or _document.tsx:\n * ```html\n * <div id=\"portal-root\"></div>\n * ```\n *\n * **Current Usage:**\n * - SignalCardDkimDomainAnalyzer: Hover tooltips for selector status counts\n * (e.g., \"3 selectors passed\" when hovering over status icons)\n *\n * @example\n * ```tsx\n * <TooltipInPortalWrapper message=\"Tooltip text\">\n * <button>Hover me</button>\n * </TooltipInPortalWrapper>\n * ```\n */\n\nconst TooltipStyled = styled(Tooltip)`\n position: absolute;\n pointer-events: none;\n\n & .tooltip__content {\n padding: 8px;\n font-size: 13px;\n font-family: var(--sc-font-body, ${DS_FONT_BODY});\n min-width: 260px;\n max-width: 320px;\n }\n\n & .tooltip__content::before {\n display: none;\n }\n`;\n\nconst TOOLTIP_DISTANCE = 8;\n\ntype TooltipCoords = {\n left: number;\n top: number;\n};\n\ninterface TooltipInPortalProps\n extends Omit<React.ComponentProps<typeof Tooltip>, 'children' | 'ContentComponent' | 'styles'> {\n isOpen: boolean;\n parentRef: React.RefObject<HTMLElement>;\n ContentComponent: React.ComponentType;\n styles?: React.CSSProperties;\n placement?: Placement;\n}\n\nconst TooltipInPortal: React.FC<TooltipInPortalProps> = ({\n isOpen,\n parentRef,\n ContentComponent,\n placement = PLACEMENT.UP,\n styles = {},\n ...rest\n}) => {\n const [coords, setCoords] = useState<TooltipCoords | null>(null);\n\n useEffect(() => {\n const parentElement = parentRef.current;\n\n if (parentElement) {\n const rect = parentElement.getBoundingClientRect();\n setCoords({\n left: rect.left + rect.width / 2,\n top: rect.top + window.scrollY - TOOLTIP_DISTANCE,\n });\n } else {\n setCoords(null);\n }\n }, [isOpen, parentRef]);\n\n if (!coords) {\n return null;\n }\n\n return (\n <Portal>\n <TooltipStyled\n styles={{ ...coords, ...styles }}\n ContentComponent={ContentComponent}\n placement={placement}\n isOpen={isOpen}\n {...rest}\n />\n </Portal>\n );\n};\n\ninterface TooltipInPortalWrapperProps extends Omit<TooltipInPortalProps, 'isOpen' | 'parentRef' | 'ContentComponent'> {\n message: ReactNode;\n children: ReactNode;\n className?: string;\n isDisabled?: boolean;\n}\n\n/**\n * Wraps children in a container that will show the tooltip on mouse enter and hide it on mouse leave\n */\nexport const TooltipInPortalWrapper: React.FC<TooltipInPortalWrapperProps> = ({\n message,\n children,\n placement = PLACEMENT.UP,\n className,\n isDisabled = false,\n ...rest\n}) => {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [isTooltipOpen, setIsTooltipOpen] = useState(false);\n\n useEffect(() => {\n const containerElement = containerRef.current;\n if (!containerElement) {\n return;\n }\n\n const onMouseLeave = () => {\n setIsTooltipOpen(false);\n };\n const onMouseEnter = () => {\n setIsTooltipOpen(true);\n };\n\n containerElement.addEventListener('mouseleave', onMouseLeave);\n containerElement.addEventListener('mouseenter', onMouseEnter);\n\n return () => {\n containerElement.removeEventListener('mouseleave', onMouseLeave);\n containerElement.removeEventListener('mouseenter', onMouseEnter);\n };\n }, []);\n\n return (\n <div ref={containerRef} className={className}>\n {children}\n {isTooltipOpen && !isDisabled && (\n <TooltipInPortal\n isOpen={isTooltipOpen}\n parentRef={containerRef}\n ContentComponent={() => <>{message}</>}\n placement={placement}\n {...rest}\n />\n )}\n </div>\n );\n};\n\nexport default TooltipInPortal;\n","import React from 'react';\nimport { DetailedCard, Icon } from '@redsift/design-system';\nimport { mdiCheck, mdiClose, mdiAlert, mdiInformation, mdiHelpCircle, mdiEmail, mdiEarth } from '@redsift/icons';\n\nimport { useSignalCardTranslation } from '../../hooks/useSignalCardTranslation';\nimport { parseGlossaryMarkdown } from '../../utils/parse-glossary-markdown';\nimport { COLOR } from '../signal-card-styles';\nimport { SignalCardSection, SignalCardInfoBox } from '../SignalCard';\nimport {\n InfoItemContent,\n InfoItemIcon,\n InfoItemLabel,\n InfoItemRow,\n InfoItemSubtexts,\n InfoItemsWrapper,\n} from '../SignalCard/components/InfoItemElements';\nimport {\n InfoItemsHighlight,\n InfoItemsGrid,\n GridLabel,\n GridValue,\n SectionHeader,\n SectionCaption,\n CodeBlock,\n ExtractionBox,\n ExtractionCaption,\n} from '../SignalCard/components/InfoSectionStyles';\nimport { EXTRACTION_CAPTION_KEYS, type ExtractionCaptionType } from '../SignalCard/components/extraction-box.constants';\nimport { TooltipInPortalWrapper } from '../../components/ui/TooltipInPortal/TooltipInPortal';\nimport type { ItemType, ItemTheme } from './types';\n\nexport interface ExtractedItemProps {\n type: any;\n theme: any;\n label: any;\n text: any;\n inline?: boolean;\n useCodeBlock?: boolean;\n extractionBox?: {\n caption?: ExtractionCaptionType;\n };\n}\n\nexport function getIcon({ type, theme = 'email' }: { type: ItemType; theme?: ItemTheme }) {\n return type === 'good' ? (\n <Icon icon={mdiCheck} color=\"#02ac61\" size=\"small\" />\n ) : type === 'info' ? (\n theme === 'email' ? (\n <Icon icon={mdiEmail} color={COLOR.main.black} size=\"small\" />\n ) : theme === 'dns' ? (\n <Icon icon={mdiEarth} size=\"small\" />\n ) : (\n <Icon icon={mdiInformation} size=\"small\" />\n )\n ) : type === 'warning' ? (\n <Icon icon={mdiAlert} color=\"#ed6c02\" size=\"small\" />\n ) : type === 'danger' ? (\n <Icon icon={mdiClose} color={COLOR.main.red} size=\"small\" />\n ) : type === 'unknown' ? (\n <Icon icon={mdiHelpCircle} size=\"small\" />\n ) : null;\n}\n\nconst renderExtractedValue = (value: any, keyPrefix: string): React.ReactNode[] => {\n const nodes: React.ReactNode[] = [];\n\n const process = (input: any, prefix: string) => {\n if (input === null || input === undefined) {\n return;\n }\n\n if (Array.isArray(input)) {\n input.forEach((entry, idx) => process(entry, `${prefix}-${idx}`));\n return;\n }\n\n if (typeof input === 'string') {\n const trimmed = input.trim();\n if (!trimmed) {\n return;\n }\n\n nodes.push(<p key={`${prefix}-text`}>{parseGlossaryMarkdown(input)}</p>);\n return;\n }\n\n if (React.isValidElement(input)) {\n nodes.push(\n React.cloneElement(input, {\n key: input.key ?? `${prefix}-element`,\n })\n );\n return;\n }\n\n nodes.push(<p key={`${prefix}-fallback`}>{String(input)}</p>);\n };\n\n process(value, keyPrefix);\n\n return nodes;\n};\n\nexport const ExtractedItem: React.FC<ExtractedItemProps> = ({\n type,\n theme,\n label,\n text,\n inline = true,\n useCodeBlock = false,\n extractionBox,\n}) => {\n // Get translated caption for extraction box\n const { t } = useSignalCardTranslation('investigate');\n const captionText = extractionBox?.caption ? t(EXTRACTION_CAPTION_KEYS[extractionBox.caption]) : undefined;\n\n // Parse label if it's a string with glossary markdown\n const parsedLabel = typeof label === 'string' ? parseGlossaryMarkdown(label) : label;\n\n // Strip newlines from text if it's a string and we're using code block\n const cleanedText =\n useCodeBlock && typeof text === 'string'\n ? text\n .replace(/[\\r\\n]+/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim()\n : text;\n\n const renderedText = renderExtractedValue(cleanedText, 'extracted-item-text');\n\n const icon = getIcon({ type, theme });\n\n // Wrap in CodeBlock if needed\n const displayText = useCodeBlock ? (\n <CodeBlock>\n {typeof renderedText === 'string' ? (\n renderedText\n ) : (\n <>\n {renderedText.map((node) => {\n // Extract text content from p tags and flatten\n if (React.isValidElement(node) && node.type === 'p') {\n const children = node.props.children;\n\n // If children is a string, strip ALL newlines aggressively\n const cleanedChildren =\n typeof children === 'string'\n ? children\n .replace(/[\\r\\n\\t]+/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim()\n : children;\n\n return cleanedChildren;\n }\n return node;\n })}\n </>\n )}\n </CodeBlock>\n ) : (\n renderedText\n );\n\n const content = (\n <SignalCardInfoBox>\n <InfoItemRow>\n {icon ? <InfoItemIcon>{icon}</InfoItemIcon> : null}\n <InfoItemContent>\n <InfoItemLabel $inline>{parsedLabel}</InfoItemLabel>\n {inline && renderedText.length ? displayText : null}\n </InfoItemContent>\n </InfoItemRow>\n {!inline && renderedText.length ? <InfoItemSubtexts>{displayText}</InfoItemSubtexts> : null}\n </SignalCardInfoBox>\n );\n\n // Wrap in extraction box if specified\n if (extractionBox) {\n return (\n <ExtractionBox $hasCaption={!!captionText}>\n {content}\n {captionText && <ExtractionCaption>{captionText}</ExtractionCaption>}\n </ExtractionBox>\n );\n }\n\n return content;\n};\n\nexport interface SignalCardExtractedItemsProps {\n extractedItemsCategories?: any[];\n extractedItems?: any[] | null;\n defaultTitle?: string | null;\n isCollapsible?: boolean;\n areAllCollapsed?: boolean;\n}\n\nfunction renderGridItem(item: any, idx: number, t: (key: string) => string): React.ReactNode {\n const parsedLabel = typeof item.label === 'string' ? parseGlossaryMarkdown(item.label) : item.label;\n const renderedText = renderExtractedValue(item.text, `grid-item-${idx}`);\n const icon = getIcon({ type: item.type, theme: item.theme });\n const alignmentIcon =\n icon && item.tooltipKey ? (\n <div style={{ display: 'inline-flex', alignItems: 'center', flexShrink: 0, marginLeft: '8px', marginTop: '3px' }}>\n <TooltipInPortalWrapper message={t(item.tooltipKey)}>\n <span style={{ display: 'inline-flex' }}>{icon}</span>\n </TooltipInPortalWrapper>\n </div>\n ) : null;\n const displayValue = item.useCodeBlock ? (\n <CodeBlock>{renderedText}</CodeBlock>\n ) : (\n <GridValue>\n {renderedText}\n {alignmentIcon}\n </GridValue>\n );\n return (\n <React.Fragment key={idx}>\n <GridLabel>\n {icon && !item.tooltipKey ? <span style={{ display: 'inline-flex', flexShrink: 0 }}>{icon}</span> : null}\n {parsedLabel}\n </GridLabel>\n {displayValue}\n </React.Fragment>\n );\n}\n\nexport const ExtractedCategoryContent: React.FC<{\n category: any;\n getTranslatedCaption: (caption?: ExtractionCaptionType) => any;\n}> = ({ category, getTranslatedCaption }) => {\n const { t } = useSignalCardTranslation('investigate');\n const useGridLayout =\n category.categoryType === 'dmarc-domain' ||\n category.categoryType === 'dmarc-policy' ||\n category.categoryType === 'dkim-details';\n\n if (useGridLayout) {\n // Grid layout for DMARC domain and policy sections\n const hasNonInlineItems = category.items?.some((item: any) => item.inline === false);\n const hasInlineItems = category.items?.some((item: any) => item.inline !== false);\n\n if (hasNonInlineItems && hasInlineItems) {\n // Both TXT records and grid items present\n return (\n <DetailedCard.CollapsibleSectionItems\n caption={getTranslatedCaption(\n category.extractionBox?.caption ||\n category.items?.find((item: any) => item.inline === false && item.extractionBox?.caption)?.extractionBox\n ?.caption\n )}\n >\n {category.items\n ?.filter((item: any) => item.inline === false)\n .map((item: any, idx: number) => {\n const { type, theme, label, text, inline, useCodeBlock } = item;\n return (\n <ExtractedItem\n key={`non-inline-${idx}`}\n type={type}\n theme={theme}\n label={label}\n text={text}\n inline={inline}\n useCodeBlock={useCodeBlock}\n extractionBox={undefined}\n />\n );\n })}\n <InfoItemsGrid $hasNonInlineItems={hasNonInlineItems} $insideCollapsible={true}>\n {category.items?.filter((item: any) => item.inline !== false).map((item: any, idx: number) => renderGridItem(item, idx, t))}\n </InfoItemsGrid>\n </DetailedCard.CollapsibleSectionItems>\n );\n } else if (hasNonInlineItems) {\n // Only TXT records present\n return (\n <DetailedCard.CollapsibleSectionItems\n caption={getTranslatedCaption(\n category.items?.find((item: any) => item.inline === false && item.extractionBox?.caption)?.extractionBox\n ?.caption\n )}\n >\n {category.items\n ?.filter((item: any) => item.inline === false)\n .map((item: any, idx: number) => {\n const { type, theme, label, text, inline, useCodeBlock } = item;\n return (\n <ExtractedItem\n key={`non-inline-${idx}`}\n type={type}\n theme={theme}\n label={label}\n text={text}\n inline={inline}\n useCodeBlock={useCodeBlock}\n extractionBox={undefined}\n />\n );\n })}\n </DetailedCard.CollapsibleSectionItems>\n );\n } else {\n // Only grid items present\n return (\n <DetailedCard.CollapsibleSectionItems caption={getTranslatedCaption(category.extractionBox?.caption)}>\n <InfoItemsGrid $hasNonInlineItems={false} $insideCollapsible={true}>\n {category.items?.filter((item: any) => item.inline !== false).map((item: any, idx: number) => renderGridItem(item, idx, t))}\n </InfoItemsGrid>\n </DetailedCard.CollapsibleSectionItems>\n );\n }\n }\n\n // Standard flex layout for other sections\n return (\n <DetailedCard.CollapsibleSectionItems caption={getTranslatedCaption(category.extractionBox?.caption)}>\n <InfoItemsHighlight $insideCollapsible={true}>\n {category.items?.map((item: any, idx: number) => {\n const { type, theme, label, text, inline, useCodeBlock } = item;\n return (\n <ExtractedItem\n key={idx}\n type={type}\n theme={theme}\n label={label}\n text={text}\n inline={inline}\n useCodeBlock={useCodeBlock}\n extractionBox={undefined}\n />\n );\n })}\n </InfoItemsHighlight>\n </DetailedCard.CollapsibleSectionItems>\n );\n};\n\nexport const SignalCardExtractedItems: React.FC<SignalCardExtractedItemsProps> = ({\n extractedItemsCategories,\n extractedItems,\n defaultTitle,\n isCollapsible,\n areAllCollapsed,\n}) => {\n const { t } = useSignalCardTranslation('investigate');\n\n // Create a caption translator function (doesn't use hooks, safe to call in loops)\n const getTranslatedCaption = (caption?: ExtractionCaptionType) => {\n if (!caption) return undefined;\n return t(EXTRACTION_CAPTION_KEYS[caption]);\n };\n\n if (extractedItems?.length) {\n return (\n <SignalCardSection marginBottom={0}>\n <InfoItemsWrapper>\n <SectionHeader>\n <SectionCaption>{defaultTitle}</SectionCaption>\n </SectionHeader>\n <InfoItemsHighlight>\n {extractedItems.map((item: any, idx: number) => {\n const { type, theme, label, text, inline, extractionBox } = item;\n return (\n <ExtractedItem\n key={idx}\n type={type}\n theme={theme}\n label={label}\n text={text}\n inline={inline}\n extractionBox={extractionBox}\n />\n );\n })}\n </InfoItemsHighlight>\n </InfoItemsWrapper>\n </SignalCardSection>\n );\n }\n\n if (extractedItemsCategories?.length) {\n return (\n <>\n {extractedItemsCategories\n .map((category: any, i: number) => {\n const hasItems = Array.isArray(category.items) && category.items.length;\n\n if (!hasItems) return null;\n\n return (\n <DetailedCard.Section\n key={i}\n header={category.title}\n isCollapsible={isCollapsible}\n isCollapsed={areAllCollapsed}\n >\n <ExtractedCategoryContent category={category} getTranslatedCaption={getTranslatedCaption} />\n </DetailedCard.Section>\n );\n })\n .filter(Boolean)}\n </>\n );\n }\n\n return null;\n};\n","import React from 'react';\n\ninterface WordHighlighterProps {\n startPos?: number;\n highlightClassName?: string;\n searchWord?: string;\n textToHighlight: string;\n highlightStyle?: React.CSSProperties;\n}\n\nconst DEFAULT_HIGHLIGHT_STYLE: React.CSSProperties = {\n backgroundColor: '#fff200',\n color: 'inherit',\n};\n\nconst WordHighlighter: React.FC<WordHighlighterProps> = ({\n startPos = 0,\n highlightClassName = 'syntax-error-highlight',\n searchWord,\n textToHighlight,\n highlightStyle,\n}) => {\n const wordLength = searchWord?.length ?? 0;\n const isHighlightable = wordLength > 0 && startPos >= 0 && startPos + wordLength <= textToHighlight.length;\n\n if (!isHighlightable) {\n return <>{textToHighlight}</>;\n }\n\n const before = textToHighlight.slice(0, startPos);\n const highlighted = textToHighlight.slice(startPos, startPos + wordLength);\n const after = textToHighlight.slice(startPos + wordLength);\n\n return (\n <span>\n {before}\n <span className={highlightClassName} style={highlightStyle ?? DEFAULT_HIGHLIGHT_STYLE}>\n {highlighted}\n </span>\n {after}\n </span>\n );\n};\n\nexport default WordHighlighter;\n","/* istanbul ignore file */\n/**\n * Lazy-loaded wrapper for ChartSankey to reduce initial bundle size.\n * D3 dependencies (~50-80KB) are only loaded when a Sankey chart is rendered.\n *\n * Re-exports types from ChartSankey for convenience.\n */\nimport React, { Suspense } from 'react';\nimport type { SankeyData, SankeyNode, ChartSankeyOptions } from './ChartSankey';\n\n// Re-export types (these don't add to bundle)\nexport type { SankeyData, SankeyNode, ChartSankeyOptions };\n\n// Lazy load the D3-heavy ChartSankey component\nconst ChartSankeyLazy = React.lazy(() => import('./ChartSankey'));\n\nexport interface LazyChartSankeyProps {\n data: SankeyData;\n options?: ChartSankeyOptions;\n /** Fallback to show while loading. Defaults to a placeholder with matching dimensions. */\n fallback?: React.ReactNode;\n}\n\n/**\n * Lazy-loaded Sankey chart that defers D3 bundle loading until render.\n */\nconst LazyChartSankey: React.FC<LazyChartSankeyProps> = ({ data, options, fallback }) => {\n const defaultFallback = (\n <div\n style={{\n width: options?.width ?? 345,\n height: options?.height ?? 100,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n aria-label=\"Loading chart...\"\n />\n );\n\n return (\n <Suspense fallback={fallback ?? defaultFallback}>\n <ChartSankeyLazy data={data} options={options} />\n </Suspense>\n );\n};\n\nLazyChartSankey.displayName = 'LazyChartSankey';\n\nexport default LazyChartSankey;\n","import styled from 'styled-components';\nimport type { StyledSignalCardFcrdnsProps } from './types';\n\n/**\n * Wrapper for Sankey chart visualization\n * Ensures SVG scales to full width and has stable dimensions to prevent layout shift\n */\nexport const StyledSankeyWrapper = styled.div<StyledSignalCardFcrdnsProps>`\n min-height: 100px;\n\n svg {\n width: 100%;\n }\n`;\n","/**\n * Structured Data Renderer\n *\n * Maps each StructuredData variant from @redsift/signal-logic to React components.\n * This is the rendering bridge between the framework-agnostic signal-logic library\n * and the React-based design system.\n *\n * @example\n * ```tsx\n * import { renderStructuredData } from '../adapters/structured-data-renderer';\n *\n * const node = renderStructuredData(item.label); // StructuredData → ReactNode\n * ```\n */\n\nimport React from 'react';\nimport type { StructuredData, DisplayValue } from '@redsift/signal-logic';\nimport { isStructuredData } from '@redsift/signal-logic';\nimport { GLOSSARY_ICON_MAP, type GlossaryIconType } from '../components/glossary/glossary';\nimport WordHighlighter from '../components/ui/WordHighlighter/WordHighlighter';\nimport { parseGlossaryMarkdown } from '../utils/parse-glossary-markdown';\nimport LazyChartSankey from '../components/charts/LazyChartSankey';\nimport { StyledSankeyWrapper } from '../cards/SignalCardFcrdns/styles';\nimport { colors } from '../styles/styles';\nimport { calculateSankeyHeight, create2LevelSankey } from '@redsift/signal-logic';\n// =============================================================================\n// ICON RENDERING\n// =============================================================================\n\n/**\n * Render a glossary icon from its type identifier.\n *\n * Label handling depends on labelType:\n * - `'display'`: rendered as `<code>` text alongside the icon (e.g., IP addresses)\n * - `'glossary-key'` or undefined: passed as prop to the GlossaryTerm component\n * for translation lookup (e.g., 'SPF_DOMAIN')\n */\nfunction renderIcon(\n iconType: GlossaryIconType,\n label?: string,\n labelType?: 'glossary-key' | 'display'\n): React.ReactNode {\n if (!iconType) {\n return null;\n }\n const Icon = GLOSSARY_ICON_MAP[iconType];\n if (!Icon) {\n return null;\n }\n if (label) {\n if (labelType === 'display') {\n return (\n <span>\n <Icon /> <code>{label}</code>\n </span>\n );\n }\n // Default: glossary-key — pass label as prop to GlossaryTerm for translation\n return <Icon label={label} />;\n }\n return <Icon />;\n}\n\n// =============================================================================\n// LIST RENDERING\n// =============================================================================\n\n/**\n * Render an array of strings as an unordered list.\n */\nexport function renderList(items: string[]): React.ReactNode {\n if (!items?.length) {\n return null;\n }\n return (\n <ul>\n {items.map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </ul>\n );\n}\n\n// =============================================================================\n// SIGNED HEADERS RENDERING\n// =============================================================================\n\n/**\n * Render signed headers as a vertical list with code formatting.\n */\nfunction renderSignedHeaders(headers: string[]): React.ReactNode {\n if (!headers?.length) {\n return null;\n }\n return (\n <span\n style={{\n display: 'flex',\n flexDirection: 'column',\n marginLeft: '1em',\n }}\n >\n {headers.map((header, index) => (\n <code key={`${header}-${index}`} style={{ padding: 0 }}>\n <pre style={{ margin: 0, padding: 0 }}>{header}</pre>\n </code>\n ))}\n </span>\n );\n}\n\n// =============================================================================\n// ERROR SUBTEXT RENDERING\n// =============================================================================\n\n/**\n * Render error subtext, optionally removing a prefix pattern.\n */\nfunction renderErrorSubtext(text: string, removePattern?: string): React.ReactNode {\n let displayText = text;\n if (removePattern) {\n try {\n const regex = new RegExp(removePattern);\n displayText = text.replace(regex, '');\n } catch {\n // If regex is invalid, use original text\n }\n }\n return <span>{displayText}</span>;\n}\n\n// =============================================================================\n// SANKEY NODE STYLING\n// =============================================================================\n\n/** Map SankeyNodeType from signal-logic to fill colors from DS styles */\nconst SANKEY_NODE_COLORS: Record<string, string> = {\n 'sender-ip': colors.glossary.senderIp.lighter,\n 'a-record': colors.glossary.aRecord.lighter,\n 'ptr-record': colors.glossary.ptrRecord.lighter,\n ehlo: colors.glossary.ehlo.lighter,\n error: colors.glossary.error.lighter,\n};\n\n// =============================================================================\n// SANKEY RENDERING\n// =============================================================================\n\n/**\n * Render a sequential Sankey chart from StructuredData.\n */\nfunction renderSequentialSankey(data: {\n nodes: Array<{ name: string; nodeType: string }>;\n loopback?: boolean;\n}): React.ReactNode {\n const { nodes: dataNodes, loopback = false } = data;\n\n if (!dataNodes?.length) {\n return null;\n }\n\n const nodes = dataNodes.map((n) => ({\n name: n.name,\n fill: SANKEY_NODE_COLORS[n.nodeType] || colors.glossary.error.lighter,\n }));\n\n const numNodes = nodes.length;\n const links = loopback\n ? [...Array(numNodes)].map((_, idx) => ({\n source: idx,\n target: idx < numNodes - 1 ? idx + 1 : 0,\n value: 1,\n }))\n : [...Array(numNodes - 1)].map((_, idx) => ({\n source: idx,\n target: idx + 1,\n value: 1,\n }));\n\n const options = {\n width: 345,\n height: calculateSankeyHeight({ numItems: loopback ? 1.2 : 1 }),\n tipHtml: (d: { name: string }) => d.name,\n marginLeft: 0,\n };\n\n return (\n <StyledSankeyWrapper className=\"sankey\">\n <LazyChartSankey data={{ nodes, links }} options={options} />\n </StyledSankeyWrapper>\n );\n}\n\n/**\n * Render a two-level Sankey chart from StructuredData.\n */\nfunction render2LevelSankey(data: {\n rootName: string;\n rootNodeType: string;\n level1Nodes: string[];\n level1NodeType: string;\n level2Nodes: Record<string, string[]>;\n level2NodeType: string;\n noLevel2NodeLabel: string;\n}): React.ReactNode {\n const createNodeFn = (nodeType: string) => {\n const fill = SANKEY_NODE_COLORS[nodeType] || colors.glossary.error.lighter;\n return (d: { name: string }) => ({ ...d, fill });\n };\n\n const { nodes, links, width, height, numLeafs, matchingIdx, matchingPath } = create2LevelSankey({\n rootName: data.rootName,\n level1Nodes: data.level1Nodes,\n level2Nodes: data.level2Nodes,\n createRootNodeFn: createNodeFn(data.rootNodeType),\n createLevel1NodeFn: createNodeFn(data.level1NodeType),\n createLevel2NodeFn: createNodeFn(data.level2NodeType),\n noLevel2NodeLabel: data.noLevel2NodeLabel,\n });\n\n return (\n <StyledSankeyWrapper className=\"sankey\">\n <LazyChartSankey\n data={{ nodes, links }}\n options={{\n width,\n height,\n marginLeft: matchingIdx ? -16 : 0,\n marginRight: matchingIdx ? -48 : 0,\n marginBottom: numLeafs === 1 ? 32 : 0,\n tipHtml: (d: { name: string }) => d.name,\n matchingPath,\n chartId: `adapter-sankey-${data.rootName.replace(/\\./g, '-')}`,\n }}\n />\n </StyledSankeyWrapper>\n );\n}\n\n// =============================================================================\n// MAIN RENDERER\n// =============================================================================\n\n/**\n * Render a StructuredData variant as a React node.\n *\n * Handles all variants of the StructuredData discriminated union from signal-logic:\n * - `text` → plain string\n * - `icon` → `<GlossaryIcon>`\n * - `icon-pair` → `<Fragment>` with two icons\n * - `list` → `<ul><li>` list\n * - `highlighted-text` → `<WordHighlighter>`\n * - `signed-headers` → vertical code blocks\n * - `error-subtext` → `<span>` with pattern removal\n * - `code-block` → `<pre><code>` block\n * - `formatted-text` → segments with inline `<code>`/`<b>` and optional `<pre>` wrapper\n * - `sankey-sequential` → sequential Sankey chart\n * - `sankey-2level` → two-level Sankey chart\n *\n * @param data - A StructuredData object from signal-logic\n * @returns ReactNode for rendering\n */\nexport function renderStructuredData(data: StructuredData): React.ReactNode {\n switch (data.type) {\n case 'text':\n return data.value;\n\n case 'icon':\n return renderIcon(data.icon as GlossaryIconType, data.label, data.labelType);\n\n case 'icon-pair': {\n const primary = renderIcon(data.primary as GlossaryIconType, data.label, data.labelType);\n const secondary = data.secondary ? renderIcon(data.secondary as GlossaryIconType) : null;\n if (!secondary) {\n return primary;\n }\n return (\n <>\n {primary} {secondary}\n </>\n );\n }\n\n case 'list':\n return renderList(data.items);\n\n case 'highlighted-text':\n return <WordHighlighter searchWord={data.searchWord} textToHighlight={data.text} startPos={data.startPos} />;\n\n case 'signed-headers':\n return renderSignedHeaders(data.headers);\n\n case 'error-subtext':\n return renderErrorSubtext(data.text, data.removePattern);\n\n case 'code-block':\n return (\n <pre>\n <code>{data.content}</code>\n </pre>\n );\n\n case 'formatted-text': {\n const content = data.segments.map((segment, i) => {\n if (segment.format === 'code') {\n return <code key={i}>{segment.text}</code>;\n }\n if (segment.format === 'bold') {\n return <b key={i}>{segment.text}</b>;\n }\n if (segment.format === 'link') {\n return (\n <a key={i} href={segment.text} target=\"_blank\" rel=\"noopener noreferrer\">\n {segment.text}\n </a>\n );\n }\n return <React.Fragment key={i}>{parseGlossaryMarkdown(segment.text)}</React.Fragment>;\n });\n if (data.wrapper === 'pre') {\n return <pre>{content}</pre>;\n }\n return <>{content}</>;\n }\n\n case 'sankey-sequential':\n return renderSequentialSankey(data);\n\n case 'sankey-2level':\n return render2LevelSankey(data);\n\n default: {\n // Exhaustive check — if signal-logic adds a new variant, this will error at compile time\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _exhaustive: never = data;\n return null;\n }\n }\n}\n\n/**\n * Render a DisplayValue (string | StructuredData) as a React node.\n *\n * If the value is a plain string, it is returned as-is.\n * If the value is a StructuredData object, it is rendered via renderStructuredData.\n * Null/undefined values return null.\n *\n * @param value - A DisplayValue from signal-logic extractor results\n * @returns ReactNode for rendering\n */\nexport function renderDisplayValue(value: DisplayValue | null | undefined): React.ReactNode {\n if (value === null || value === undefined) {\n return null;\n }\n if (isStructuredData(value)) {\n return renderStructuredData(value);\n }\n return value;\n}\n","/**\n * Extractor Adapter\n *\n * Bridges @redsift/signal-logic extractors (framework-agnostic, StructuredData)\n * with DS card components (React, ReactNode).\n *\n * Each adapter function:\n * 1. Calls the signal-logic extractor with the same parameters\n * 2. Converts DisplayValue fields (string | StructuredData) → ReactNode\n * 3. Returns a result compatible with the existing card component interface\n *\n * Old extractors remain in the codebase during this phase. Cards can be\n * migrated one-at-a-time by switching their import from the old extractor\n * to the adapter.\n *\n * @example\n * ```tsx\n * // Before (in card component):\n * import { extractData } from '../../extractors/dmarc/';\n *\n * // After (using adapter):\n * import { adaptDmarcExtractor } from '../../adapters/extractor-adapter';\n * const result = adaptDmarcExtractor(dmarc, dkim, spf, jmap, t, isDomainAnalyzer);\n * ```\n */\n\nimport type { ReactNode } from 'react';\nimport type { ExtractedItem, ExtractedItemCategory, InfoItem, InfoItemCategory, Subtext } from '@redsift/signal-logic';\nimport {\n extractDmarcData,\n extractDkimData,\n extractSpfData,\n extractTlsData,\n extractFcrdnsData,\n extractDnssecData,\n extractThreatIntelligenceData,\n extractUrlsData,\n extractBimiData,\n extractAmpData,\n extractSubdoData,\n extractDomainAnalyzerDkimData,\n extractDomainAnalyzerSpfData,\n extractDmarcDomainData,\n extractSpfDomainData,\n extractMtaStsFullData,\n} from '@redsift/signal-logic';\n\nimport { renderDisplayValue } from './structured-data-renderer';\nimport type { CategoryItem, ItemCategory } from '../cards/SignalCardNormal/types';\nimport type { ChecklistItem } from '../components/ui/Checklist/Checklist';\n\n// =============================================================================\n// BIMI TRANSLATION KEY → data-testid MAPPING\n// =============================================================================\n\n/**\n * Maps signal-logic BIMI translation keys to the data-testid values\n * that the old DS helpers used to set on checklist items.\n * These are item-level testIds for QA automation (Playwright/Cypress).\n */\nconst BIMI_KEY_TO_TESTID: Record<string, string> = {\n // BIMI record status items\n 'card.bimi.record-declination_md': 'bimi-record-declination',\n 'card.bimi.record-passed_md': 'bimi-record-valid',\n 'card.bimi.record-invalid_md': 'bimi-record-invalid',\n 'card.bimi.record-no-cert_md': 'bimi-record-no-cert',\n 'card.bimi.record-failed_md': 'bimi-record-failed',\n 'card.bimi.cert-forbidden_md': 'bimi-record-cert-forbidden',\n 'card.bimi.record-unknown-error_md': 'bimi-record-unknown-error',\n 'card.bimi.could-not-fetch_md': 'bimi-record-fetch-failed',\n 'card.bimi.record-missing_md': 'bimi-record-not-found',\n // DMARC compliance items\n 'card.bimi.dmarc-compliance-pass_md': 'dmarc-compliance-pass',\n 'card.bimi.dmarc-compliance-fail_md': 'dmarc-compliance-fail',\n // VMC certificate items\n 'card.bimi.vmc-correctly-title_md': 'vmc-validity-valid',\n 'card.bimi.vmc-invalid-title_md': 'vmc-validity-invalid',\n 'card.bimi.vmc-not-vmc-title_md': 'vmc-validity-invalid',\n 'card.bimi.pemErrors.cert-not-found_md': 'vmc-cert-not-found',\n 'card.bimi.vmc.expired-date_md': 'vmc-expiration-expired',\n 'card.bimi.vmc.expiry-date_md': 'vmc-expiration-valid',\n};\n\n// =============================================================================\n// GENERIC CONVERSION HELPERS\n// =============================================================================\n\n/**\n * Convert a Subtext (DisplayValue fields) → { label?: ReactNode; text?: ReactNode }\n */\nfunction adaptSubtext(subtext: Subtext): { label?: ReactNode; text?: ReactNode } {\n return {\n label: renderDisplayValue(subtext.label) ?? undefined,\n text: renderDisplayValue(subtext.text) ?? undefined,\n };\n}\n\n/**\n * Convert an ExtractedItem (DisplayValue fields) → CategoryItem.\n */\nfunction adaptExtractedItem(item: ExtractedItem): CategoryItem {\n return {\n type: item.type,\n theme: item.theme,\n label: renderDisplayValue(item.label),\n text: renderDisplayValue(item.text),\n inline: item.inline,\n useCodeBlock: item.useCodeBlock,\n subtexts: item.subtexts?.map(adaptSubtext),\n tooltipKey: item.tooltipKey,\n };\n}\n\n/**\n * Convert an ExtractedItemCategory → ItemCategory.\n */\nfunction adaptExtractedItemCategory(cat: ExtractedItemCategory): ItemCategory {\n return {\n title: cat.title,\n caption: cat.caption,\n items: cat.items?.map(adaptExtractedItem),\n categoryType: cat.categoryType,\n extractionBox: cat.extractionBox,\n };\n}\n\n/**\n * Convert an InfoItem (DisplayValue text) → ChecklistItem-compatible shape.\n */\nfunction adaptInfoItem(item: InfoItem, testId?: string): ChecklistItem {\n return {\n type: item.type,\n theme: item.theme,\n text: renderDisplayValue(item.text),\n subtexts: item.subtexts ? item.subtexts.map((s) => ({ text: renderDisplayValue(s.text) })) : undefined,\n ...(testId ? { 'data-testid': testId } : undefined),\n };\n}\n\n/**\n * Convert an InfoItemCategory → checklist section with title and items.\n */\nfunction adaptInfoItemCategory(cat: InfoItemCategory): { title?: string; items: ChecklistItem[] } {\n return {\n title: cat.title,\n items: cat.items.map((item) => adaptInfoItem(item)),\n };\n}\n\n/**\n * Adapt an array of ExtractedItemCategory[], if present.\n */\nfunction adaptExtractedCategories(categories: ExtractedItemCategory[] | undefined): ItemCategory[] | undefined {\n return categories?.map(adaptExtractedItemCategory);\n}\n\n/**\n * Adapt an array of InfoItemCategory[], if present.\n */\nfunction adaptInfoCategories(\n categories: InfoItemCategory[] | undefined\n): Array<{ title?: string; items: ChecklistItem[] }> | undefined {\n return categories?.map(adaptInfoItemCategory);\n}\n\n/**\n * Adapt a flat array of InfoItem[], if present.\n */\nfunction adaptInfoItems(items: InfoItem[] | undefined | null): ChecklistItem[] | undefined {\n if (!items) return undefined;\n return items.map((item) => adaptInfoItem(item));\n}\n\n// =============================================================================\n// PER-EXTRACTOR ADAPTERS\n// =============================================================================\n\n/**\n * DMARC extractor adapter.\n * Wraps signal-logic's extractDmarcData and converts result to ReactNode-based types.\n */\nexport function adaptDmarcExtractor(...args: Parameters<typeof extractDmarcData>) {\n const result = extractDmarcData(...args);\n return {\n cardType: result.cardType,\n extractedItemsCategories: adaptExtractedCategories(result.extractedItemsCategories),\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n error: result.error,\n };\n}\n\n/**\n * DKIM extractor adapter.\n * Wraps signal-logic's extractDkimData and converts result to ReactNode-based types.\n */\nexport function adaptDkimExtractor(...args: Parameters<typeof extractDkimData>) {\n const result = extractDkimData(...args);\n return {\n cardType: result.cardType,\n extractedItemsCategories: adaptExtractedCategories(result.extractedItemsCategories),\n infoItems: adaptInfoItems(result.infoItems),\n infoItemsCategoriesDkim: result.infoItemsCategoriesDkim\n ? adaptInfoCategories(result.infoItemsCategoriesDkim)\n : undefined,\n };\n}\n\n/**\n * SPF extractor adapter.\n * Wraps signal-logic's extractSpfData and converts result to ReactNode-based types.\n */\nexport function adaptSpfExtractor(...args: Parameters<typeof extractSpfData>) {\n const result = extractSpfData(...args);\n return {\n cardType: result.cardType,\n extractedItemsCategories: adaptExtractedCategories(result.extractedItemsCategories),\n infoItems: adaptInfoCategories(result.infoItems),\n error: result.error,\n };\n}\n\n/**\n * TLS extractor adapter.\n * Wraps signal-logic's extractTlsData and converts result to ReactNode-based types.\n */\nexport function adaptTlsExtractor(...args: Parameters<typeof extractTlsData>) {\n const result = extractTlsData(...args);\n return {\n cardType: result.cardType,\n extractedItemsCategories: adaptExtractedCategories(result.extractedItemsCategories),\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n error: result.error,\n };\n}\n\n/**\n * FCrDNS extractor adapter.\n * Wraps signal-logic's extractFcrdnsData and converts result to ReactNode-based types.\n */\nexport function adaptFcrdnsExtractor(...args: Parameters<typeof extractFcrdnsData>) {\n const result = extractFcrdnsData(...args);\n return {\n cardType: result.cardType,\n extractedItemsCategories: adaptExtractedCategories(result.extractedItemsCategories),\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n error: result.error,\n };\n}\n\n/**\n * DNSSEC extractor adapter.\n * Wraps signal-logic's extractDnssecData and converts result to ReactNode-based types.\n */\nexport function adaptDnssecExtractor(...args: Parameters<typeof extractDnssecData>) {\n const result = extractDnssecData(...args);\n return {\n cardType: result.cardType,\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n };\n}\n\n/**\n * Threat Intelligence extractor adapter.\n * Wraps signal-logic's extractThreatIntelligenceData and converts result.\n */\nexport function adaptThreatIntelligenceExtractor(...args: Parameters<typeof extractThreatIntelligenceData>) {\n const result = extractThreatIntelligenceData(...args);\n if (!result) return null;\n return {\n cardType: result.cardType,\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n };\n}\n\n/**\n * URLs extractor adapter.\n * Wraps signal-logic's extractUrlsData and converts result to ReactNode-based types.\n */\nexport function adaptUrlsExtractor(...args: Parameters<typeof extractUrlsData>) {\n const result = extractUrlsData(...args);\n return {\n cardType: result.cardType,\n extractedItemsCategories: adaptExtractedCategories(result.extractedItemsCategories),\n shortDescription: renderDisplayValue(result.shortDescription),\n };\n}\n\n// =============================================================================\n// NEW ADAPTERS — Group 10\n// =============================================================================\n\n/**\n * BIMI extractor adapter.\n * Wraps signal-logic's extractBimiData and splits the flat result into named sections\n * for the SignalCardBimi component's interleaved section layout:\n * DMARC compliance → DMARC extracted → BIMI status → BIMI extracted → VMC → SVG\n *\n * Signal-logic returns categories in deterministic order; we split by title matching.\n */\nexport function adaptBimiExtractor(...args: Parameters<typeof extractBimiData>) {\n const [props, t, context] = args;\n\n // Wrap t to track which translation keys map to which returned strings.\n // This lets us stamp data-testid on items by matching the translated text back to its key.\n const translatedValueToKey = new Map<string, string>();\n const trackingT: typeof t = (key, params) => {\n const value = t(key, params);\n // Only track keys that have a known testId mapping\n if (BIMI_KEY_TO_TESTID[key]) {\n translatedValueToKey.set(value, key);\n }\n return value;\n };\n\n const result = extractBimiData(props, trackingT, context);\n const infoAll = result.infoItemsCategories ?? [];\n const extractedAll = result.extractedItemsCategories ?? [];\n\n // Split info categories by known section titles (from signal-logic's BIMI extractor).\n // VMC title uses t('card.bimi.vmc-title') but signal-logic applies localizeAssertionMarkdown()\n // which replaces \"VMC\" → \"CMC\" for CMC assertion types. Match both variants.\n const TITLE_BIMI_STATUS = t('card.bimi.record-status-title');\n const TITLE_DMARC = t('card.bimi.dmarc-compliance-title');\n const TITLE_SVG = t('card.bimi.safe-svg-title');\n const TITLE_VMC = t('card.bimi.vmc-title');\n const TITLE_CMC = TITLE_VMC.replace(/VMC/g, 'CMC');\n\n const infoBimi = infoAll.filter((c) => c.title === TITLE_BIMI_STATUS);\n const infoDmarc = infoAll.filter((c) => c.title === TITLE_DMARC);\n const svgRaw = infoAll.find((c) => c.title === TITLE_SVG);\n const vmcRaw = infoAll.find((c) => c.title === TITLE_VMC || c.title === TITLE_CMC);\n\n // Split extracted categories\n const TITLE_BIMI_RECORD = t('card.bimi.record-title');\n const extractedBimi = extractedAll.filter((c) => c.title === TITLE_BIMI_RECORD);\n const extractedDmarc = extractedAll.filter((c) => c.title !== TITLE_BIMI_RECORD);\n\n // Adapt info items with data-testid lookup from the tracking t wrapper.\n // Signal-logic may post-process t() values with localizeAssertionMarkdown (VMC→CMC),\n // so also try reversing that transformation when looking up the key.\n const resolveTestId = (text: string): string | undefined => {\n const key = translatedValueToKey.get(text);\n if (key) return BIMI_KEY_TO_TESTID[key];\n // Try reverse CMC→VMC substitution for assertion-mark-localized strings\n const vmcText = text.replace(/CMC/g, 'VMC');\n if (vmcText !== text) {\n const vmcKey = translatedValueToKey.get(vmcText);\n if (vmcKey) return BIMI_KEY_TO_TESTID[vmcKey];\n }\n return undefined;\n };\n\n const adaptWithTestIds = (categories: InfoItemCategory[] | undefined) =>\n categories?.map((cat) => ({\n title: cat.title,\n items: cat.items.map((item) => {\n const testId = typeof item.text === 'string' ? resolveTestId(item.text) : undefined;\n return adaptInfoItem(item, testId);\n }),\n }));\n\n return {\n cardType: result.cardType,\n infoItemsCategoriesBimi: adaptWithTestIds(infoBimi),\n infoItemsCategoriesDmarc: adaptWithTestIds(infoDmarc),\n svgSection: svgRaw ? adaptWithTestIds([svgRaw])![0] : null,\n vmcSection: vmcRaw ? adaptWithTestIds([vmcRaw])![0] : null,\n extractedItemsBimi: extractedBimi.map((cat) => adaptExtractedItemCategory(cat)),\n extractedItemsDmarc: extractedDmarc.map((cat) => adaptExtractedItemCategory(cat)),\n };\n}\n\n/**\n * AMP extractor adapter.\n * Wraps signal-logic's extractAmpData and converts result to ReactNode-based types.\n * Enriches extracted categories with extractionBox caption (dns/email) from dmarc.fromDns.\n */\nexport function adaptAmpExtractor(...args: Parameters<typeof extractAmpData>) {\n const result = extractAmpData(...args);\n const { dmarc } = args[0];\n const isDns = !!(dmarc as Record<string, unknown>)?.fromDns;\n const enrichedExtracted = result.extractedItemsCategories?.map((cat) => ({\n ...adaptExtractedItemCategory(cat),\n categoryType: 'dmarc-domain' as const,\n extractionBox: { caption: isDns ? ('dns' as const) : ('email' as const) },\n }));\n return {\n cardType: result.cardType,\n extractedItemsCategories: enrichedExtracted,\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n };\n}\n\n/**\n * SubDo extractor adapter.\n * Wraps signal-logic's extractSubdoData and converts result to ReactNode-based types.\n */\nexport function adaptSubdoExtractor(...args: Parameters<typeof extractSubdoData>) {\n const result = extractSubdoData(...args);\n return {\n cardType: result.cardType,\n ctaLink: result.ctaLink,\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n };\n}\n\n/**\n * Domain Analyzer DKIM extractor adapter.\n * Wraps signal-logic's extractDomainAnalyzerDkimData and converts result to ReactNode-based types.\n * Includes per-selector results for multi-selector DKIM display.\n */\nexport function adaptDomainAnalyzerDkimExtractor(...args: Parameters<typeof extractDomainAnalyzerDkimData>) {\n const result = extractDomainAnalyzerDkimData(...args);\n return {\n cardType: result.cardType,\n selectorResults: result.selectorResults?.map((sr) => ({\n selector: sr.selector,\n cardType: sr.cardType,\n extractedItemsCategories: adaptExtractedCategories(sr.extractedItemsCategories) ?? [],\n infoItemsCategories: adaptInfoCategories(sr.infoItemsCategories) ?? [],\n })),\n statusSummary: result.statusSummary as { pass: number; warning: number; fail: number } | undefined,\n extractedItemsCategories: adaptExtractedCategories(result.extractedItemsCategories),\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n };\n}\n\n/**\n * Domain Analyzer SPF extractor adapter.\n * Wraps signal-logic's extractDomainAnalyzerSpfData and converts result to ReactNode-based types.\n */\nexport function adaptDomainAnalyzerSpfExtractor(...args: Parameters<typeof extractDomainAnalyzerSpfData>) {\n const result = extractDomainAnalyzerSpfData(...args);\n const enrichedExtracted = result.extractedItemsCategories?.map((cat) => ({\n ...adaptExtractedItemCategory(cat),\n categoryType: 'dmarc-domain' as const,\n }));\n return {\n cardType: result.cardType,\n extractedItemsCategories: enrichedExtracted,\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n ctaLink: result.ctaLink,\n };\n}\n\n/**\n * DMARC Domain extractor adapter.\n * Wraps signal-logic's extractDmarcDomainData and converts result to ReactNode-based types.\n * Enriches extracted categories with DS-specific extractionBox and categoryType.\n */\nexport function adaptDmarcDomainExtractor(...args: Parameters<typeof extractDmarcDomainData>) {\n const result = extractDmarcDomainData(...args);\n const enrichedExtracted = result.extractedItemsCategories?.map((cat) => ({\n ...adaptExtractedItemCategory(cat),\n categoryType: 'dmarc-domain' as const,\n extractionBox: { caption: 'dns' as const },\n }));\n return {\n cardType: result.cardType,\n extractedItemsCategories: enrichedExtracted,\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n };\n}\n\n/**\n * SPF Domain extractor adapter.\n * Wraps signal-logic's extractSpfDomainData and converts result to ReactNode-based types.\n * Enriches extracted categories with DS-specific extractionBox and categoryType.\n */\nexport function adaptSpfDomainExtractor(...args: Parameters<typeof extractSpfDomainData>) {\n const result = extractSpfDomainData(...args);\n const enrichedExtracted = result.extractedItemsCategories?.map((cat) => ({\n ...adaptExtractedItemCategory(cat),\n categoryType: 'dmarc-domain' as const,\n extractionBox: { caption: 'dns' as const },\n }));\n return {\n cardType: result.cardType,\n extractedItemsCategories: enrichedExtracted,\n infoItemsCategories: adaptInfoCategories(result.infoItemsCategories),\n ctaLink: result.ctaLink,\n };\n}\n\n/**\n * MTA-STS extractor adapter.\n * Wraps signal-logic's extractMtaStsFullData and splits the flat result into named\n * sections for the SignalCardMtaSts component's interleaved section layout:\n * TLS-RPT info → TLS-RPT extracted → MTA-STS info → MTA-STS extracted →\n * Policy info → Policy extracted → Certificate info\n *\n * Signal-logic returns categories in deterministic order; we split by title matching.\n * Extracted categories are enriched with DS-specific extractionBox and categoryType.\n */\nexport function adaptMtaStsExtractor(...args: Parameters<typeof extractMtaStsFullData>) {\n const [, t] = args;\n const result = extractMtaStsFullData(...args);\n if (!result) return null;\n\n const infoAll = result.infoItemsCategories ?? [];\n const extractedAll = result.extractedItemsCategories ?? [];\n\n // Split info categories by title strings set by signal-logic's MTA-STS extractor.\n // These are hardcoded English strings in signal-logic (not translation keys).\n // If signal-logic renames these titles, this adapter must be updated to match.\n const TITLE_TLS_RPT = 'TLS-RPT Record';\n const TITLE_MTA_STS = 'MTA-STS Record';\n const TITLE_POLICY = 'MTA-STS Policy File';\n const TITLE_CERTIFICATE = 'MTA-STS SSL Certificate';\n\n const infoTlsRpt = infoAll.filter((c) => c.title === TITLE_TLS_RPT);\n const infoMtaSts = infoAll.filter((c) => c.title === TITLE_MTA_STS);\n const infoPolicy = infoAll.filter((c) => c.title === TITLE_POLICY);\n const infoCertificate = infoAll.filter((c) => c.title === TITLE_CERTIFICATE);\n\n // Split extracted categories by translated titles (computed from same t() function)\n const TITLE_TLS_RPT_EXTRACTED = t('section-titles.tls-rpt-dns-record') ?? 'Your TLS-RPT DNS Record';\n const TITLE_MTA_STS_EXTRACTED = t('section-titles.mta-sts-dns-record') ?? 'Your MTA-STS DNS Record';\n const TITLE_POLICY_EXTRACTED = t('section-titles.mta-sts-policy-config') ?? 'Your MTA-STS Policy Configuration';\n\n const extractedTlsRpt = extractedAll.filter((c) => c.title === TITLE_TLS_RPT_EXTRACTED);\n const extractedMtaSts = extractedAll.filter((c) => c.title === TITLE_MTA_STS_EXTRACTED);\n const extractedPolicy = extractedAll.filter((c) => c.title === TITLE_POLICY_EXTRACTED);\n\n return {\n cardType: result.cardType,\n // Info sections (adapted to ChecklistItem[])\n infoTlsRpt: adaptInfoCategories(infoTlsRpt) ?? [],\n infoMtaSts: adaptInfoCategories(infoMtaSts) ?? [],\n infoPolicy: adaptInfoCategories(infoPolicy) ?? [],\n infoCertificate: adaptInfoCategories(infoCertificate) ?? [],\n // Extracted sections (enriched with DS-specific metadata)\n extractedTlsRptCategories: extractedTlsRpt.map((cat) => ({\n ...adaptExtractedItemCategory(cat),\n extractionBox: { caption: 'dns' as const },\n })),\n extractedMtaStsCategories: extractedMtaSts.map((cat) => ({\n ...adaptExtractedItemCategory(cat),\n extractionBox: { caption: 'dns' as const },\n })),\n extractedItemsPolicy: extractedPolicy.map((cat) => ({\n ...adaptExtractedItemCategory(cat),\n categoryType: 'dmarc-policy' as const,\n extractionBox: { caption: 'policy' as const },\n })),\n };\n}\n","import React, { useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport pako from 'pako';\nimport { componentLogger } from '../../utils/logger';\n\nconst toDataUri = (svg: string): string => `data:image/svg+xml;utf8,${encodeURIComponent(svg)}`;\n\nconst samePath =\n 'M27.2041 0.00010336C27.0218 -0.00237654 26.8417 0.0398027 26.6794 0.122959C26.5172 0.206116 26.3777 0.327722 26.2733 0.477164L6.91158 27.2857C6.73723 27.5264 6.66563 27.8265 6.71254 28.12C6.75946 28.4135 6.92104 28.6763 7.16175 28.8507C7.40245 29.025 7.70256 29.0966 7.99606 29.0497C8.28955 29.0028 8.55238 28.8412 8.72674 28.6005L10.5419 26.0872H33.883C34.1792 26.0872 34.4633 25.9695 34.6728 25.76C34.8823 25.5505 35 25.2664 35 24.9702V4.11912C35 3.82287 34.8823 3.53877 34.6728 3.3293C34.4633 3.11982 34.1792 3.00213 33.883 3.0021H27.2158L28.0884 1.79199C28.2137 1.62667 28.2905 1.42974 28.3102 1.22324C28.3299 1.01675 28.2917 0.808847 28.1999 0.622834C28.1081 0.43682 27.9663 0.280039 27.7904 0.170053C27.6146 0.0600667 27.4116 0.00121957 27.2041 0.00010336ZM1.00068 3.0021C0.72504 3.03099 0.469981 3.16131 0.285053 3.36774C0.100125 3.57417 -0.00146622 3.84197 1.59931e-05 4.11912V24.9702C4.5613e-05 25.2664 0.117741 25.5505 0.327217 25.76C0.536692 25.9695 0.820793 26.0872 1.11704 26.0872H4.47973C4.62775 26.0893 4.77471 26.0619 4.91207 26.0067C5.04943 25.9515 5.17445 25.8696 5.27986 25.7657C5.38527 25.6617 5.46898 25.5379 5.52611 25.4013C5.58324 25.2648 5.61266 25.1182 5.61266 24.9702C5.61266 24.8221 5.58324 24.6756 5.52611 24.539C5.46898 24.4025 5.38527 24.2786 5.27986 24.1747C5.17445 24.0707 5.04943 23.9888 4.91207 23.9336C4.77471 23.8784 4.62775 23.8511 4.47973 23.8531H2.23406V21.3399L9.68086 16.2667L10.4255 16.7787C10.6709 16.944 10.9718 17.0054 11.2623 16.9493C11.5528 16.8933 11.8092 16.7244 11.9755 16.4796C12.1417 16.2349 12.2042 15.9343 12.1492 15.6436C12.0942 15.3528 11.9263 15.0958 11.6822 14.9286L10.3092 13.9861C10.0907 13.8381 9.82693 13.7721 9.56451 13.8C9.3811 13.8188 9.20522 13.8828 9.05254 13.9861L2.23406 18.6404V5.23614H19.4083C19.5563 5.23823 19.7032 5.21089 19.8406 5.15569C19.9779 5.10049 20.103 5.01855 20.2084 4.91462C20.3138 4.81068 20.3975 4.68684 20.4546 4.55027C20.5118 4.41371 20.5412 4.26715 20.5412 4.11912C20.5412 3.97108 20.5118 3.82453 20.4546 3.68796C20.3975 3.5514 20.3138 3.42755 20.2084 3.32362C20.103 3.21969 19.9779 3.13774 19.8406 3.08255C19.7032 3.02735 19.5563 3 19.4083 3.0021H1.11704C1.07828 3.00008 1.03944 3.00008 1.00068 3.0021ZM25.5984 5.23614H32.766V16.162L26.7852 11.0772C26.6715 10.9818 26.5398 10.91 26.398 10.866C26.2561 10.8221 26.1069 10.8069 25.9591 10.8212C25.7323 10.8417 25.5171 10.931 25.3424 11.0772L16.6855 18.3495L16.3132 18.0935L25.5984 5.23614ZM10.0532 6.35316C8.42133 6.35316 7.07448 7.70001 7.07448 9.33188C7.07448 10.9638 8.42133 12.3106 10.0532 12.3106C11.6851 12.3106 13.0319 10.9638 13.0319 9.33188C13.0319 7.70001 11.6851 6.35316 10.0532 6.35316ZM10.0532 8.5872C10.4777 8.5872 10.7979 8.90738 10.7979 9.33188C10.7979 9.75639 10.4777 10.0766 10.0532 10.0766C9.6287 10.0766 9.30852 9.75639 9.30852 9.33188C9.30852 8.90738 9.6287 8.5872 10.0532 8.5872ZM26.0638 13.3927L32.766 19.0942V23.8531H12.1593L15.01 19.9087L16.127 20.6766C16.3287 20.814 16.5699 20.8816 16.8136 20.869C17.0574 20.8564 17.2903 20.7643 17.4767 20.6068L26.0638 13.3927Z';\n\nconst PLACEHOLDER_LIGHT = toDataUri(`\n <svg width=\"35\" height=\"30\" viewBox=\"0 0 35 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"${samePath}\" fill=\"#fff\"/>\n </svg>\n`);\n\nconst PLACEHOLDER_DARK = toDataUri(`\n <svg width=\"35\" height=\"30\" viewBox=\"0 0 35 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"${samePath}\" fill=\"#333333\"/>\n </svg>\n`);\n\nconst LogosWrapper = styled.div<{ $isDark?: boolean }>`\n &,\n & > div:last-child {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n gap: 16px;\n }\n\n border: 1px solid #dddddd;\n\n padding: 0.625rem 0.8rem;\n @media only screen and (min-width: 768px) {\n padding: 0.625rem 1rem;\n }\n margin-bottom: 1.125rem;\n max-width: 100%;\n overflow: hidden;\n box-sizing: border-box;\n\n background: ${({ $isDark }) => ($isDark ? '#333' : 'transparent')};\n\n & > :first-child {\n padding-right: 8px;\n @media only screen and (min-width: 768px) {\n padding-right: 1.25rem;\n }\n border-right: 1px solid #e1e1e1;\n flex-shrink: 0;\n }\n\n & > :last-child {\n flex: 1;\n margin-left: 0;\n min-width: 0;\n }\n`;\n\ninterface StyledLogoElementWrapperProps {\n $size: number;\n $square?: boolean;\n $isDark?: boolean;\n}\n\nconst LogoElementWrapper = styled.div<StyledLogoElementWrapperProps>`\n flex-shrink: 1;\n min-width: 0;\n\n &,\n & > div:first-child {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n }\n\n & > div:first-child {\n flex: 1;\n margin-bottom: 0.25rem;\n }\n\n .img {\n border-radius: 50%;\n border: 1px solid #e1e1e1;\n\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n max-width: 100%;\n\n ${({ $square }) =>\n $square\n ? css`\n border-radius: 0;\n border: 1px solid #e1e1e1;\n `\n : ''}\n\n &[data-error=true] {\n background-size: 50%;\n }\n\n width: ${({ $size }) => $size * 0.8}px;\n height: ${({ $size }) => $size * 0.8}px;\n\n @media only screen and (min-width: 768px) {\n width: ${({ $size }) => $size}px;\n height: ${({ $size }) => $size}px;\n }\n }\n\n p {\n font-size: 12px;\n line-height: 1.2;\n font-family: Source Code Pro;\n margin: 0;\n color: ${({ $isDark }) => ($isDark ? 'white' : 'black')};\n }\n`;\n\nconst round = (num: number, decimals = 2): number => Number(num.toFixed(decimals));\n\n/**\n * This function is to deal with a known bug of firefox.\n * If it tries to render an svg as an image, and the svg does not have height\n * or width attributes, the const { width, height } = this; will return a value of 0;\n */\nconst getAspectRatio = (height?: number, width?: number): string => {\n if (!width || !height) return '1:1';\n if (height <= width) return `${round(width / height)}:${1}`;\n return `${1}:${round(height / width)}`;\n};\n\nconst decodeBase64 = (base64: string): Uint8Array => {\n const binaryString = atob(base64);\n const len = binaryString.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n};\n\ninterface LogoElementProps {\n svgUrl?: string | null;\n size: number;\n square?: boolean;\n isDark?: boolean;\n}\n\nconst LogoElement: React.FC<LogoElementProps> = ({ svgUrl, size, square = false, isDark = false }) => {\n const [aspectRatio, setAspectRatio] = useState<string>(`${size}x${size}`);\n const [url, setUrl] = useState<string>(svgUrl ?? (isDark ? PLACEHOLDER_LIGHT : PLACEHOLDER_DARK));\n const [error, setError] = useState<boolean>(false);\n const [isLoaded, setIsLoaded] = useState<boolean>(false);\n\n useEffect(() => {\n setIsLoaded(false);\n if (!svgUrl) {\n setUrl(isDark ? PLACEHOLDER_LIGHT : PLACEHOLDER_DARK);\n setError(true);\n setIsLoaded(true);\n return;\n }\n\n const img = new Image();\n img.onload = () => {\n const { width, height } = img;\n setAspectRatio(getAspectRatio(height, width));\n setIsLoaded(true);\n };\n\n img.onerror = (error) => {\n componentLogger.error('Error loading image', error);\n componentLogger.error('Failed URL:', img.src);\n if (square) {\n setAspectRatio('1:1');\n }\n setUrl(isDark ? PLACEHOLDER_LIGHT : PLACEHOLDER_DARK);\n setError(true);\n setIsLoaded(true);\n };\n\n const newUrl = uncompressLogo(svgUrl);\n\n img.src = newUrl;\n setUrl(newUrl || (isDark ? PLACEHOLDER_LIGHT : PLACEHOLDER_DARK));\n }, [square, svgUrl, isDark, size]);\n\n return (\n <LogoElementWrapper $isDark={isDark} $square={square} $size={size}>\n <div>\n <div\n data-testid=\"bimi-logo-image\"\n data-error={error}\n data-loaded={isLoaded}\n className={'img'}\n style={{\n backgroundImage: `url(${url})`,\n }}\n />\n </div>\n <p>{square ? aspectRatio : `${size}x${size}`}</p>\n </LogoElementWrapper>\n );\n};\n\ntype LogosProps = Omit<LogoElementProps, 'size'>;\n\nconst Logos: React.FC<LogosProps> = ({ svgUrl, isDark, ...rest }) => (\n <LogosWrapper $isDark={isDark} {...rest}>\n <LogoElement svgUrl={svgUrl} size={80} square isDark={isDark} {...rest} />\n <div>\n <LogoElement svgUrl={svgUrl} size={80} isDark={isDark} {...rest} />\n <LogoElement svgUrl={svgUrl} size={60} isDark={isDark} {...rest} />\n <LogoElement svgUrl={svgUrl} size={40} isDark={isDark} {...rest} />\n </div>\n </LogosWrapper>\n);\n\nexport interface SVGLogoProps {\n svgUrl?: string | null;\n}\n\nconst SVGLogo: React.FC<SVGLogoProps> = ({ svgUrl = '' }) => (\n <>\n <Logos svgUrl={svgUrl} />\n <Logos svgUrl={svgUrl} isDark />\n </>\n);\n\nconst uncompressLogo = (svgUrl?: string | null): string => {\n if (!svgUrl) {\n return '';\n }\n\n if (!svgUrl.startsWith('data:image/svg+xml+gzip;base64,')) {\n return svgUrl;\n }\n try {\n const base64Data = svgUrl.replace('data:image/svg+xml+gzip;base64,', '');\n const compressedData = decodeBase64(base64Data);\n const decompressedData = pako.inflate(compressedData);\n const utf8Decoder = new TextDecoder('utf-8');\n let decodedString = utf8Decoder.decode(decompressedData);\n\n // Remove the <title> element, since it breaks the image if it has weird characters\n decodedString = decodedString.replace(/<title>.*<\\/title>/, '');\n\n return `data:image/svg+xml;base64,${btoa(decodedString)}`;\n } catch (error) {\n componentLogger.error('Error decompressing logo:', error);\n return svgUrl; // Return the original URL if decompression fails\n }\n};\n\nexport default SVGLogo;\n","import React, { forwardRef, useState, useCallback, useMemo } from 'react';\nimport classNames from 'classnames';\nimport type { Comp } from '@redsift/design-system';\nimport { useSignalCardTranslation } from '../../hooks/useSignalCardTranslation';\nimport { SignalCardNormal } from '../SignalCardNormal';\nimport { ExtractedCategoryContent } from '../SignalCardNormal/SignalCardExtractedItems';\nimport { EXTRACTION_CAPTION_KEYS, type ExtractionCaptionType } from '../SignalCard/components/extraction-box.constants';\nimport Checklist from '../../components/ui/Checklist/Checklist';\nimport SVGLogo from '../../components/ui/SVGLogo';\nimport { recordStatus } from '@redsift/signal-logic';\nimport { adaptBimiExtractor } from '../../adapters/extractor-adapter';\nimport type { SignalCardBimiProps } from './types';\n\n// Re-export signal-logic functions for backward compatibility\nexport { getBimiCardType as getCardType, recordStatus } from '@redsift/signal-logic';\n\nconst COMPONENT_NAME = 'SignalCardBimi';\nconst CLASSNAME = 'redsift-signal-card-bimi';\n\n/**\n * SignalCardBimi displays BIMI validation results including DMARC compliance,\n * BIMI record validation, VMC certificate details, and SVG logo validation.\n */\nexport const SignalCardBimi: Comp<SignalCardBimiProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { t } = useSignalCardTranslation('investigate');\n\n const {\n jmap: { extsecrep },\n onHeightChange,\n useInvestigateColors = false,\n isCollapsible,\n areAllCollapsed: areAllCollapsedProp,\n onCollapseAll: onCollapseAllProp,\n className,\n ...restProps\n } = props;\n\n // Manage internal collapse state\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const areAllCollapsed = areAllCollapsedProp !== undefined ? areAllCollapsedProp : internalCollapsed;\n const onCollapseAll = useCallback(\n (collapsed: boolean) => {\n setInternalCollapsed(collapsed);\n onCollapseAllProp?.(collapsed);\n },\n [onCollapseAllProp]\n );\n\n const { bimi } = extsecrep;\n\n const adapterResult = useMemo(() => {\n if (!bimi) return null;\n return adaptBimiExtractor(bimi as any, t, { dmarc: extsecrep.dmarc as any });\n }, [bimi, t, extsecrep.dmarc]);\n\n const isDeclinationToPublish = bimi?.bimiRecordStatus === recordStatus.DECLINATION_TO_PUBLISH;\n\n // Inject SVGLogo into SVG section (React-specific, can't come from signal-logic)\n const svgSection = useMemo(() => {\n if (isDeclinationToPublish || !adapterResult?.svgSection) return null;\n const items = [...adapterResult.svgSection.items];\n const imageUrl = bimi?.imageUrl;\n const hasErrors = ((bimi?.svgErrors as string[])?.length ?? 0) > 0 || ((bimi?.logo as any)?.errors?.length ?? 0) > 0;\n\n if (imageUrl && !hasErrors) {\n items.splice(1, 0, { text: <SVGLogo svgUrl={imageUrl} />, type: 'image' });\n } else if (!imageUrl) {\n items.splice(1, 0, { text: <SVGLogo />, type: 'image' });\n }\n return { ...adapterResult.svgSection, items };\n }, [adapterResult?.svgSection, bimi, isDeclinationToPublish]);\n\n // Inject SVGLogo into VMC section (React-specific)\n const vmcSection = useMemo(() => {\n if (isDeclinationToPublish || !adapterResult?.vmcSection) return null;\n const logoSrc = (bimi?.vmc as any)?.logoSrc;\n if (!logoSrc) return adapterResult.vmcSection;\n\n const items = [...adapterResult.vmcSection.items];\n // Insert logo before the first 'no-icon' item (matching original helpers behavior)\n const noIconIdx = items.findIndex((item) => item.type === 'no-icon');\n const svgItem = { text: <SVGLogo svgUrl={logoSrc} />, type: 'image' as const };\n if (noIconIdx >= 0) {\n items.splice(noIconIdx, 0, svgItem);\n } else {\n items.push(svgItem);\n }\n return { ...adapterResult.vmcSection, items };\n }, [adapterResult?.vmcSection, bimi, isDeclinationToPublish]);\n\n const getTranslatedCaption = useCallback(\n (caption?: ExtractionCaptionType) => {\n if (!caption) return undefined;\n return t(EXTRACTION_CAPTION_KEYS[caption]);\n },\n [t]\n );\n\n if (!bimi || !adapterResult) {\n return null;\n }\n\n const { cardType, infoItemsCategoriesDmarc, infoItemsCategoriesBimi, extractedItemsDmarc, extractedItemsBimi } =\n adapterResult;\n\n const sections = [\n ...(infoItemsCategoriesDmarc?.map((cat, i) => ({\n id: `checklistsDmarc-${i}`,\n title: cat.title,\n content: <Checklist items={cat.items} />,\n testId: `bimi-dmarc-section-${i}`,\n })) || []),\n ...(extractedItemsDmarc?.map((cat, i) => ({\n id: `extractedItemsDmarc-${i}`,\n title: cat.title,\n isCollapsible: true,\n content: <ExtractedCategoryContent category={cat} getTranslatedCaption={getTranslatedCaption} />,\n testId: `bimi-dmarc-extracted-${i}`,\n })) || []),\n ...(infoItemsCategoriesBimi?.map((cat, i) => ({\n id: `checklistsBimi-${i}`,\n title: cat.title,\n content: <Checklist items={cat.items} />,\n testId: `bimi-record-section-${i}`,\n })) || []),\n ...(extractedItemsBimi?.map((cat, i) => ({\n id: `extractedItemsBimi-${i}`,\n title: cat.title,\n isCollapsible: true,\n content: <ExtractedCategoryContent category={cat} getTranslatedCaption={getTranslatedCaption} />,\n testId: `bimi-record-extracted-${i}`,\n })) || []),\n ];\n\n if (vmcSection) {\n sections.push({\n id: 'VMCCertificate',\n title: vmcSection.title,\n content: <Checklist items={vmcSection.items} />,\n testId: 'bimi-vmc-section',\n });\n }\n\n if (svgSection) {\n sections.push({\n id: 'safeSVG',\n title: svgSection.title,\n content: <Checklist items={svgSection.items} />,\n testId: 'bimi-svg-section',\n });\n }\n\n const sectionIds = sections.map((s) => s.id);\n\n const introDescriptionContent = t('signal-description.BIMI_md_INTRO', {\n defaultValue: '',\n returnObjects: true,\n });\n\n return (\n <SignalCardNormal\n useInvestigateColors={useInvestigateColors}\n ref={ref}\n className={classNames(CLASSNAME, className)}\n title={'BIMI'}\n type=\"BIMI\"\n cardType={cardType}\n introDescription={introDescriptionContent}\n onComponentMount={() => onHeightChange?.()}\n onHeightChange={onHeightChange}\n customSectionOrder={['introDescription', ...sectionIds]}\n sections={sections}\n isCollapsible={isCollapsible}\n areAllCollapsed={areAllCollapsed}\n onCollapseAll={onCollapseAll}\n data-testid=\"signal-card-bimi\"\n data-card-type={cardType}\n {...restProps}\n />\n );\n});\n\nSignalCardBimi.className = CLASSNAME;\nSignalCardBimi.displayName = COMPONENT_NAME;\n","import React, { forwardRef, useMemo } from 'react';\nimport classNames from 'classnames';\nimport { useSignalCardTranslation } from '../../hooks/useSignalCardTranslation';\nimport { useCollapseController } from '../../hooks/useCollapseController';\nimport { SignalCardNormal } from '../SignalCardNormal';\nimport { ExtractedCategoryContent } from '../SignalCardNormal/SignalCardExtractedItems';\nimport { EXTRACTION_CAPTION_KEYS, type ExtractionCaptionType } from '../SignalCard/components/extraction-box.constants';\nimport Checklist from '../../components/ui/Checklist/Checklist';\nimport type { Comp } from '@redsift/design-system';\nimport type { SignalCardDmarcDomainProps } from './types';\nimport { adaptDmarcDomainExtractor } from '../../adapters/extractor-adapter';\n\nconst COMPONENT_NAME = 'SignalCardDmarcDomain';\nconst CLASSNAME = 'redsift-signal-card-dmarc-domain';\n\nexport const SignalCardDmarcDomain: Comp<SignalCardDmarcDomainProps, HTMLDivElement> = forwardRef<\n HTMLDivElement,\n SignalCardDmarcDomainProps\n>(function SignalCardDmarcDomain(\n {\n jmap: { extsecrep },\n onHeightChange,\n className,\n useInvestigateColors = false,\n bannerVariant,\n renderFooter,\n isCollapsible = true,\n areAllCollapsed,\n onCollapseAll,\n ...forwardedProps\n },\n ref\n) {\n const { t } = useSignalCardTranslation('investigate');\n const { dmarc } = extsecrep;\n\n const { cardType, infoItemsCategories, extractedItemsCategories } = useMemo(\n () => adaptDmarcDomainExtractor(dmarc ?? null, extsecrep.originator ?? null, t),\n [dmarc, extsecrep.originator, t]\n );\n\n const {\n isCollapsible: resolvedIsCollapsible,\n areAllCollapsed: resolvedAreAllCollapsed,\n handleCollapseAll,\n } = useCollapseController({\n isCollapsible,\n areAllCollapsed,\n onCollapseAll,\n });\n\n const onComponentMount = () => {\n onHeightChange?.();\n };\n\n const getTranslatedCaption = (caption?: ExtractionCaptionType) => {\n if (!caption) return undefined;\n return t(EXTRACTION_CAPTION_KEYS[caption]);\n };\n\n const sections = useMemo(\n () => [\n ...(infoItemsCategories?.map((cat, i) => ({\n id: `checklists-${i}`,\n title: cat.title,\n content: <Checklist items={cat.items} />,\n testId: `dmarc-domain-section-${i}`,\n })) || []),\n ...(extractedItemsCategories\n ?.filter((cat) => cat.items && cat.items.length > 0)\n .map((cat, i) => ({\n id: `extractedItems-${i}`,\n title: cat.title,\n caption: cat.extractionBox?.caption\n ? getTranslatedCaption(cat.extractionBox.caption as ExtractionCaptionType)\n : undefined,\n isCollapsible: true,\n content: <ExtractedCategoryContent category={cat} getTranslatedCaption={getTranslatedCaption} />,\n testId: `dmarc-domain-extracted-${i}`,\n })) || []),\n ],\n [infoItemsCategories, extractedItemsCategories, t]\n );\n\n return (\n <SignalCardNormal\n useInvestigateColors={useInvestigateColors}\n {...forwardedProps}\n ref={ref}\n className={classNames(CLASSNAME, className)}\n title={'DMARC'}\n cardType={cardType}\n onComponentMount={onComponentMount}\n onHeightChange={onHeightChange}\n renderFooter={renderFooter}\n sections={sections}\n shortDescription={t('signal-description.DMARC_DOMAIN_md_SHORT', {\n returnObjects: true,\n })}\n longDescription={t('signal-description.DMARC_DOMAIN_md_LONG', {\n returnObjects: true,\n })}\n bannerVariant={bannerVariant}\n isCollapsible={resolvedIsCollapsible}\n areAllCollapsed={resolvedAreAllCollapsed}\n onCollapseAll={handleCollapseAll}\n data-testid=\"signal-card-dmarc-domain\"\n data-card-type={cardType}\n />\n );\n});\n\nSignalCardDmarcDomain.className = CLASSNAME;\nSignalCardDmarcDomain.displayName = COMPONENT_NAME;\n\n// Re-export signal-logic functions for backward compatibility with existing tests/consumers\nexport { getDmarcDomainCardType as getCardType, getDmarcDomainCheck as getDMARCCheck } from '@redsift/signal-logic';\n","import React, { forwardRef, useState, useMemo } from 'react';\nimport classNames from 'classnames';\nimport { useSignalCardTranslation } from '../../hooks/useSignalCardTranslation';\nimport type { Comp } from '@redsift/design-system';\n\nimport { SignalCardNormal } from '../SignalCardNormal';\nimport { ExtractedCategoryContent } from '../SignalCardNormal/SignalCardExtractedItems';\nimport { EXTRACTION_CAPTION_KEYS, type ExtractionCaptionType } from '../SignalCard/components/extraction-box.constants';\nimport Checklist from '../../components/ui/Checklist/Checklist';\nimport type { SignalCardSpfDomainProps } from './types';\nimport { adaptSpfDomainExtractor } from '../../adapters/extractor-adapter';\n\nconst COMPONENT_NAME = 'SignalCardSpfDomain';\nconst CLASSNAME = 'redsift-signal-card-spf-domain';\n\n/**\n * SignalCardSpfDomain Component\n *\n * Simplified SPF Domain Card for BIMI Checker tool.\n * Shows only pass/fail status and raw SPF TXT record.\n *\n * For advanced SPF analysis (DNS lookups, Dynamic SPF, etc.),\n * see SignalCardSpfDomainAnalyzer instead.\n *\n * @component\n * @example\n * ```tsx\n * <SignalCardSpfDomain\n * jmap={{ extsecrep: { spf: { status: 'pass', raw: 'v=spf1 ...' } } }}\n * />\n * ```\n */\nexport const SignalCardSpfDomain: Comp<SignalCardSpfDomainProps, HTMLDivElement> = forwardRef<\n HTMLDivElement,\n SignalCardSpfDomainProps\n>(function SignalCardSpfDomain(props, ref) {\n const {\n className,\n jmap,\n onHeightChange,\n bannerVariant,\n useInvestigateColors = false,\n renderFooter,\n ...forwardedProps\n } = props;\n const { t } = useSignalCardTranslation('investigate');\n\n const spf = jmap?.extsecrep?.spf;\n\n const { cardType, infoItemsCategories, extractedItemsCategories, ctaLink } = useMemo(\n () => adaptSpfDomainExtractor(spf as any, t),\n [spf, t]\n );\n\n const ctaButtonName = t('card.subdo.button-name');\n const onCTAButtonClick = ctaLink ? () => window.open(ctaLink, '_blank') : undefined;\n\n // State for collapse all functionality\n const [areAllCollapsed, setAreAllCollapsed] = useState(false);\n const handleCollapseAll = () => {\n setAreAllCollapsed((prev) => !prev);\n };\n\n const handleComponentMount = () => {\n if (onHeightChange) {\n onHeightChange();\n }\n };\n\n const getTranslatedCaption = (caption?: ExtractionCaptionType) => {\n if (!caption) return undefined;\n return t(EXTRACTION_CAPTION_KEYS[caption]);\n };\n\n const sections = useMemo(\n () => [\n // SPF Policy section with DNS record\n ...(extractedItemsCategories\n ?.filter((cat) => cat.items && cat.items.length > 0)\n .map((cat, i) => ({\n id: `extractedItems-${i}`,\n title: cat.title,\n isCollapsible: true,\n content: <ExtractedCategoryContent category={cat} getTranslatedCaption={getTranslatedCaption} />,\n testId: `spf-domain-extracted-${i}`,\n })) || []),\n // SPF status section with all checklist items (main status + report errors)\n ...(infoItemsCategories?.map((cat, i) => ({\n id: `spf-status-${i}`,\n title: cat.title,\n content: <Checklist items={cat.items} />,\n testId: `spf-domain-status-section-${i}`,\n })) || []),\n ],\n [extractedItemsCategories, infoItemsCategories, t]\n );\n\n if (!spf) return null;\n\n return (\n <SignalCardNormal\n useInvestigateColors={useInvestigateColors}\n {...forwardedProps}\n ref={ref}\n className={classNames(CLASSNAME, className)}\n title=\"SPF\"\n cardType={cardType}\n onComponentMount={handleComponentMount}\n sections={sections}\n bannerVariant={bannerVariant}\n renderFooter={renderFooter}\n ctaButtonName={ctaButtonName}\n onCTAButtonClick={onCTAButtonClick}\n shortDescription={t('signal-description.SPF_DOMAIN_md_SHORT', {\n returnObjects: true,\n })}\n longDescription={t('signal-description.SPF_DOMAIN_md_LONG', {\n returnObjects: true,\n })}\n isCollapsible={true}\n areAllCollapsed={areAllCollapsed}\n onCollapseAll={handleCollapseAll}\n data-testid=\"signal-card-spf-domain\"\n data-card-type={cardType}\n />\n );\n});\n\nSignalCardSpfDomain.displayName = COMPONENT_NAME;\nSignalCardSpfDomain.className = CLASSNAME;\n\n// Re-export signal-logic functions for backward compatibility\nexport { getSpfDomainCardType as getCardType, getSpfDomainCheck as getSpfCheck } from '@redsift/signal-logic';\n"],"names":["COLOR","main","green","yellow","red","blue","white","black","warningOrange","grey","darkest","darker","dark","medium","regular","light","lighter","lightest","FONT","TYPE","TEXT","HEADING","NUMBER","SIGNAL_CARD_CSS_VARS","INVESTIGATE_CSS_VARS","getThemeCSSVars","useInvestigateColors","defaultTheme","SignalCardThemeContext","createContext","SignalCardThemeProvider","_ref","children","theme","mergedTheme","useMemo","_objectSpread","cssVars","React","createElement","Provider","value","style","displayName","useSignalCardTheme","useContext","useResolvedTheme","propValue","contextTheme","withSignalCardTheme","Component","_Component$displayNam","Wrapped","forwardRef","props","ref","override","rest","_objectWithoutProperties","_excluded","ThemedComponent","_extends","componentName","name","STATIC_KEYS","forEach","key","prefixKeys","strings","result","Object","entries","mergedEnUS","enUS","EXTRACTOR_STRINGS","mergedFrFR","frFR","useSignalCardFormatter","useLocalizedStringFormatter","intlMessages","isDevelopment","process","_process$env","env","NODE_ENV","noop","createLogger","prefix","debug","info","warn","error","formatPrefix","_len","arguments","length","args","Array","_key","console","_len2","_key2","_len3","_key3","_len4","_key4","logger","signalCardsLogger","translationLogger","componentLogger","createNamespaceResolver","formatter","namespaces","params","includes","explicitNs","actualKey","split","fullKey","finalKey","count","undefined","pluralSuffix","format","interpolateTranslation","suffixes","namespace","suffix","useSignalCardTranslation","keyPrefix","t","useCallback","cleanKey","colonIndex","indexOf","substring","prefixedKey","context","countValue","interpolationValues","defaultValue","returnObjects","baseKey","baseResult","useMultiNamespaceTranslation","stableKey","join","resolve","useCollapseController","areAllCollapsed","controlledValue","onCollapseAll","isCollapsible","internalValue","setInternalValue","useState","useEffect","resolvedIsCollapsible","resolvedValue","handleCollapseAll","nextValue","DS_FONT_BODY","DS_TEXT_COLOR","StyledIntroText","styled","div","StyledCardHeader","StyledCardFooter","DS_LINK_COLOR","DescriptionContainer","DescriptionText","DescriptionToggle","CardWrapper","CardContent","DescriptionSpacer","ChartContainer","websiteButtonToken","token","state","websiteButtonOutlineToken","StyledSignalCardButton","button","$theme","_ref2","_ref3","css","_ref4","_ref5","_ref6","SignalCardButton","_ref7","requestedTheme","type","useTheme","Button","ExpandableDescription","memo","shortDescription","additionalDescription","hasAdditionalContent","showShowMoreButton","showCTAButton","onCTAButtonClick","ctaButtonName","onHeightChange","useInvestigateColorsOverride","showLongDescription","setShowLongDescription","Fragment","display","onClick","StyledContainer","$hidden","$borderBottom","$marginBottom","SignalCardSection","title","marginBottom","borderBottom","hidden","DS_FONT_CODE","DS_BG_LIGHT","InfoItemContainer","$compact","InfoItemRow","$alignTop","InfoItemIcon","span","InfoItemContent","InfoItemLabel","$inline","$variant","InfoItemSubtexts","$hasImage","InfoItemList","ul","InfoItemCodeBlock","pre","InfoItemsWrapper","SignalCardInfoBox","footerText","DEFAULT_PALETTE","base","hover","COLOR_MAP","pink","aqua","brown","purple","orange","resolvePalette","color","_COLOR_MAP$key","toLowerCase","StyledGlossaryTag","a","$palette","GlossaryTag","label","href","className","palette","isInteractive","Boolean","handleKeyDown","e","preventDefault","as","onKeyDown","target","rel","role","tabIndex","presentation10","standard","names","getColor","normalizedName","paletteIndex","colors","welcomeGreen","ondmarcGreen","ondmarcGreenDark","ondmarcGreenHover","ondmarcGreenActive","darkGrey","inactiveGrey","mediumGrey","ondmarcRed","ondmarcRedLight","ondmarcRedLightHover","ondmarcRedLightActive","ondmarcRedDark","ondmarcAmberDark","ondmarcBlue","ondmarcAmber","lightGrey","disabledGrey","darkGrayishBlue","lightGreyishBlue","blueGrey","navGrey","navDarkGrey","glossary","senderIp","ehlo","ptrRecord","aRecord","spfRecord","dkim","signerDomain","dkimSelector","canonicalization","signedHeaders","dkimSignature","dkimSignatureHeader","ttl","from","returnPath","dmarcPolicy","pct","sp","rua","ruf","dkimSigningDomain","spfDomain","spfDomains","subdomainPolicy","dkimAlignment","spfAlignment","spf","tls","ssl","cipherSuite","keyLength","txtRecord","bimiRecord","dmarcCompliant","svg","iTag","aTag","vmc","cmc","dmarc","tlsRptRecord","mtaStsRecord","mtaStsPolicyFile","version","mode","mx","maxAge","glossaryColorMap","organizationalDomain","GLOSSARY_BASE_PAGE","createGlossaryLink","glossaryPage","replace","navigateTo","link","window","open","glossaryLabelIds","ATAG","A_RECORD","BIMI_RECORD","CANONICALIZATION","CNAME_RECORD","DKIM","DKIM_ALGORITHM","DKIM_ALIGNMENT","DKIM_SELECTOR","DKIM_SIGNATURE","DKIM_SIGNATURE_HEADER","DKIM_SIGNING_DOMAIN","DMARC","DMARC_COMPLIANT","DMARC_POLICY","EHLO","FROM","ITAG","KEY_LENGTH","MTA_FILE_MAX_AGE","MTA_FILE_MODE","MTA_FILE_MX","MTA_FILE_VERSION","MTA_STS_POLICY_FILE","MTA_STS_CERTIFICATE","MTA_STS_CERTIFICATE_EXPIRY","MTA_STS_CERTIFICATE_CNAME_NAME","MTA_STS_CERTIFICATE_CNAME_VALUE","MTA_STS_CERTIFICATE_CNAME_TYPE","MTA_STS_RECORD","PCT","PTR_RECORD","RETURN_PATH","RUA","RUF","SENDER_IP","SIGNED_HEADERS","SIGNER_DOMAIN","SP","SPF","SPF_ALIGNMENT","SPF_DOMAIN","SPF_DOMAINS","SPF_RECORD","TLS","SSL","CIPHER_SUITE","SUBDOMAIN_POLICY","SVG","TLS_RPT_RECORD","TTL","TXT_RECORD","TXT_RECORDS","VMC","CMC","ORGANIZATIONAL_DOMAIN","GlossaryTerm","glossaryLabel","localeLink","resolvedLink","labelId","colorName","createGlossaryComponent","defaultLabel","other","SenderIp","Ehlo","PtrRecord","ARecord","SpfRecord","TxtRecord","TxtRecords","CnameRecord","Dkim","SignerDomain","DkimSelector","Canonicalization","SignedHeaders","DkimSignature","KeyLength","Ttl","DkimAlgorithm","From","ReturnPath","DmarcPolicy","Pct","Sp","Rua","Ruf","DkimSigningDomain","SpfDomain","SubdomainPolicy","DkimAlignment","SpfAlignment","Spf","Tls","Ssl","CipherSuite","BimiRecord","DmarcCompliant","OrganizationalDomain","Dmarc","TlsRptRecord","MtaStsRecord","MtaStsPolicyFile","Version","Mode","Mx","MaxAge","MtaStsCertificate","MtaStsCertificateExpiry","MtaStsCertificateCnameName","MtaStsCertificateCnameValue","MtaStsCertificateCnameType","GLOSSARY_ICON_MAP","itag","atag","TextBeforeGlossary","MarkdownLink","BoldText","strong","isValidUrl","url","parsed","URL","protocol","COMBINED_PATTERN_SOURCE","source","parseGlossaryMarkdown","text","parts","lastIndex","keyCounter","match","pattern","RegExp","exec","index","textBefore","isGlossary","isLink","push","customText","termId","map","word","charAt","toUpperCase","slice","GlossaryComponent","GlossaryComponents","trim","linkText","linkUrl","boldText","parsedBoldText","italicText","parsedItalicText","codeText","linkValue","EXTRACTION_CAPTION_KEYS","email","dns","policy","ExtractionBox","$hasCaption","ExtractionCaption","InfoItemsHighlight","$insideCollapsible","InfoItemsGrid","GridLabel","GridValue","CodeBlock","StyledChecklistContainer","$fluid","StyledInfoItem","StyledItemText","_ref8","_ref9","StyledIconWrapper","_ref10","_ref11","StyledContent","StyledSubtexts","renderValue","nodes","item","isArray","entry","idx","trimmed","isValidElement","_item$key","cloneElement","getIcon","_ref12","hasWarning","Icon","icon","mdiCheck","size","mdiEmail","mdiEarth","mdiInformationOutline","mdiAlert","mdiClose","mdiHelpCircle","InfoItem","_ref13","subtexts","fluid","compact","extractionBox","dataTestId","renderedText","captionText","caption","content","subtext","MemoizedInfoItem","Checklist","_ref14","items","ChecklistRenderer","infoItemsCategories","getTranslatedCaption","sections","category","i","_category$items","hasCaption","DetailedCard","Section","header","isCollapsed","CollapsibleSectionItems","filter","DISABLED_GREY","resolveAccentColor","Wrapper","$alignLabel","StyledBox","$accentColor","$disabled","$circle","$bold","$isSwitch","$selected","Center","_ref15","_ref16","_ref17","HiddenInput","input","_ref18","Slider","_ref19","_ref20","StyledLabel","_ref21","$hasChildren","CheckBox","_ref22","id","selected","onToggle","disabled","circle","bold","isSwitch","alignLabel","accentColor","handleToggle","onChange","checked","readOnly","viewBox","position","inset","strokeWidth","fill","stroke","d","htmlFor","hasRenderableContent","some","formatContent","processValue","processArray","arr","orderedListBuffer","flushOrderedList","listIndex","entryKey","orderedListMatch","processed","node","flattened","StyledBanner","StyledBannerContent","StyledBannerLogo","img","StyledBannerText","ONDMARC_SIGNUP_URL","StyledBannerLink","ExternalLinkIcon","focusable","height","width","preserveAspectRatio","StyledDSButtonLinkWrapper","DmarcPromoBanner","buttonLabel","src","ondmarcLogoSimple","alt","ButtonLink","mapCardTypeToColor","mapStatusToDetailedCardColor","DEFAULT_SECTION_ORDER","COMPONENT_NAME","CLASSNAME","SignalCardNormal","cardType","resultSelected","resultOptions","optionsLabel","onResultsChange","safeSVG","VMCCertificate","customSectionOrder","longDescription","introDescription","onComponentMount","renderHeader","promoHref","renderFooter","bannerVariant","isLoading","shield","signalType","_signalType","jmap","_jmap","domain","_domain","investigate","_investigate","isDomainAnalyzer","_isDomainAnalyzer","forwardedProps","resultOptionsBaseId","useId","resultOptionsGroupName","defaultRenderHeader","effectiveRenderHeader","themeCSSVars","shortDescriptionComponent","hasShortDescription","raw","longDescriptionRaw","longDescriptionComponent","hasLongDescription","introDescriptionComponent","additionalLongDescriptionComponent","hasAdditionalLongDescription","normalizedLongDescriptionRaw","additionalRaw","descriptionContent","appendContent","additionalDescriptionContent","descriptionEl","ResultOptions","marginTop","data","itemType","optionId","IntroDescription","SafeSVG","VMCCertificatSection","GenericSections","section","_section$isCollapsibl","testId","componentNameMap","genericSections","sectionHasContent","sectionName","s","sectionsOrder","sectionsWithContent","renderedSections","flatMap","genericSection","find","_genericSection$isCol","renderSection","missingSections","hasResultOptions","hasSafeSVG","hasVMCCertificate","relevantMissingSections","detailedCardColor","detailedCardBannerVariant","iconColor","effectiveIcon","upper","toString","mdiInformation","showIconInHeader","showIconInBanner","classNames","Header","Flexbox","gap","alignItems","fontSize","fontWeight","lineHeight","fontFamily","flexWrap","headerContent","useOnClickOutside","handler","handlerRef","useRef","current","listener","event","element","contains","document","addEventListener","removeEventListener","Portal","onClickOutside","rootId","mount","getElementById","el","appendChild","removeChild","createPortal","PLACEMENT","UP","DOWN","TOP_LEFT","RIGHT","CENTER","LEFT","TooltipContent","$placement","TooltipContainer","$isOpen","Tooltip","placement","renderContent","ContentComponent","isOpen","styles","TooltipStyled","TOOLTIP_DISTANCE","TooltipInPortal","parentRef","coords","setCoords","parentElement","rect","getBoundingClientRect","left","top","scrollY","TooltipInPortalWrapper","message","isDisabled","_excluded2","containerRef","isTooltipOpen","setIsTooltipOpen","containerElement","onMouseLeave","onMouseEnter","renderExtractedValue","_input$key","String","ExtractedItem","inline","useCodeBlock","parsedLabel","cleanedText","displayText","cleanedChildren","renderGridItem","alignmentIcon","tooltipKey","flexShrink","marginLeft","displayValue","ExtractedCategoryContent","_category$extractionB3","_category$items9","useGridLayout","categoryType","_category$items2","hasNonInlineItems","hasInlineItems","_category$extractionB","_category$items3","_category$items3$find","_category$items3$find2","_category$items4","_category$items5","_item$extractionBox","$hasNonInlineItems","_category$items6","_category$items6$find","_category$items6$find2","_category$items7","_item$extractionBox2","_category$extractionB2","_category$items8","DEFAULT_HIGHLIGHT_STYLE","backgroundColor","WordHighlighter","_searchWord$length","startPos","highlightClassName","searchWord","textToHighlight","highlightStyle","wordLength","isHighlightable","before","highlighted","after","ChartSankeyLazy","lazy","LazyChartSankey","_options$width","_options$height","options","fallback","defaultFallback","justifyContent","Suspense","StyledSankeyWrapper","renderIcon","iconType","labelType","renderList","renderSignedHeaders","headers","flexDirection","padding","margin","renderErrorSubtext","removePattern","regex","SANKEY_NODE_COLORS","renderSequentialSankey","dataNodes","loopback","n","nodeType","numNodes","links","_","calculateSankeyHeight","numItems","tipHtml","render2LevelSankey","createNodeFn","numLeafs","matchingIdx","matchingPath","create2LevelSankey","rootName","level1Nodes","level2Nodes","createRootNodeFn","rootNodeType","createLevel1NodeFn","level1NodeType","createLevel2NodeFn","level2NodeType","noLevel2NodeLabel","marginRight","chartId","renderStructuredData","primary","secondary","segments","segment","wrapper","renderDisplayValue","isStructuredData","BIMI_KEY_TO_TESTID","adaptSubtext","_renderDisplayValue","_renderDisplayValue2","adaptExtractedItem","_item$subtexts","adaptExtractedItemCategory","cat","_cat$items","adaptInfoItem","adaptInfoItemCategory","adaptExtractedCategories","categories","adaptInfoCategories","adaptInfoItems","adaptDmarcExtractor","extractDmarcData","extractedItemsCategories","adaptDkimExtractor","extractDkimData","infoItems","infoItemsCategoriesDkim","adaptSpfExtractor","extractSpfData","adaptTlsExtractor","extractTlsData","adaptFcrdnsExtractor","extractFcrdnsData","adaptDnssecExtractor","extractDnssecData","adaptThreatIntelligenceExtractor","extractThreatIntelligenceData","adaptUrlsExtractor","extractUrlsData","adaptBimiExtractor","_result$infoItemsCate","_result$extractedItem","translatedValueToKey","Map","trackingT","set","extractBimiData","infoAll","extractedAll","TITLE_BIMI_STATUS","TITLE_DMARC","TITLE_SVG","TITLE_VMC","TITLE_CMC","infoBimi","c","infoDmarc","svgRaw","vmcRaw","TITLE_BIMI_RECORD","extractedBimi","extractedDmarc","resolveTestId","get","vmcText","vmcKey","adaptWithTestIds","infoItemsCategoriesBimi","infoItemsCategoriesDmarc","svgSection","vmcSection","extractedItemsBimi","extractedItemsDmarc","adaptAmpExtractor","_result$extractedItem2","extractAmpData","isDns","fromDns","enrichedExtracted","adaptSubdoExtractor","extractSubdoData","ctaLink","adaptDomainAnalyzerDkimExtractor","_result$selectorResul","extractDomainAnalyzerDkimData","selectorResults","sr","_adaptExtractedCatego","_adaptInfoCategories","selector","statusSummary","adaptDomainAnalyzerSpfExtractor","_result$extractedItem3","extractDomainAnalyzerSpfData","adaptDmarcDomainExtractor","_result$extractedItem4","extractDmarcDomainData","adaptSpfDomainExtractor","_result$extractedItem5","extractSpfDomainData","adaptMtaStsExtractor","_result$infoItemsCate2","_result$extractedItem6","_t","_t2","_t3","_adaptInfoCategories2","_adaptInfoCategories3","_adaptInfoCategories4","_adaptInfoCategories5","extractMtaStsFullData","TITLE_TLS_RPT","TITLE_MTA_STS","TITLE_POLICY","TITLE_CERTIFICATE","infoTlsRpt","infoMtaSts","infoPolicy","infoCertificate","TITLE_TLS_RPT_EXTRACTED","TITLE_MTA_STS_EXTRACTED","TITLE_POLICY_EXTRACTED","extractedTlsRpt","extractedMtaSts","extractedPolicy","extractedTlsRptCategories","extractedMtaStsCategories","extractedItemsPolicy","toDataUri","encodeURIComponent","samePath","PLACEHOLDER_LIGHT","PLACEHOLDER_DARK","LogosWrapper","$isDark","LogoElementWrapper","$square","$size","round","num","decimals","Number","toFixed","getAspectRatio","decodeBase64","base64","binaryString","atob","len","bytes","Uint8Array","charCodeAt","LogoElement","svgUrl","square","isDark","aspectRatio","setAspectRatio","setUrl","setError","isLoaded","setIsLoaded","Image","onload","onerror","newUrl","uncompressLogo","backgroundImage","Logos","SVGLogo","startsWith","base64Data","compressedData","decompressedData","pako","inflate","utf8Decoder","TextDecoder","decodedString","decode","btoa","SignalCardBimi","extsecrep","areAllCollapsedProp","onCollapseAllProp","restProps","internalCollapsed","setInternalCollapsed","collapsed","bimi","adapterResult","isDeclinationToPublish","bimiRecordStatus","recordStatus","DECLINATION_TO_PUBLISH","_length","_bimi$svgErrors","_errors$length","_bimi$logo","_bimi$logo$errors","imageUrl","hasErrors","svgErrors","logo","errors","splice","_bimi$vmc","logoSrc","noIconIdx","findIndex","svgItem","sectionIds","introDescriptionContent","SignalCardDmarcDomain","_extsecrep$originator","originator","resolvedAreAllCollapsed","_cat$extractionBox","SignalCardSpfDomain","_jmap$extsecrep","setAreAllCollapsed","prev","handleComponentMount"],"mappings":"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E;AAClJ,IAAI,yEAAyE,EAAE,4FAA4F;AAC3K,GAAG;AACH,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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A;AACA;AACA;AACO,MAAMC,eAAe,GAAGC,MAAM,CAACC,GAAI,CAAA;AAC1C;AACA;AACA;AACA;AACA,mCAAA,EAAqCJ,cAAa,CAAA;AAClD,8BAAA,EAAgCC,eAAc,CAAA;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACO,MAAMI,gBAAgB,GAAGF,MAAM,CAACC,GAAI,CAAA;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACO,MAAME,gBAAgB,GAAGH,MAAM,CAACC,GAAI,CAAA;AAC3C;AACA,CAAC;;ACxDD;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAMJ,cAAY,GAAG,mEAAmE,CAAA;AACxF,MAAMC,eAAa,GAAG,mDAAmD,CAAA;AACzE,MAAMM,eAAa,GAAG,0DAA0D,CAAA;AAEzE,MAAMC,oBAAoB,GAAGL,MAAM,CAACC,GAAI,CAAA;AAC/C;AACA;AACA,CAAC,CAAA;AAEM,MAAMK,eAAe,GAAGN,MAAM,CAACC,GAAI,CAAA;AAC1C,mCAAA,EAAqCJ,cAAa,CAAA;AAClD;AACA;AACA,8BAAA,EAAgCC,eAAc,CAAA;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAA,EAAkCM,eAAc,CAAA;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAA;AAEM,MAAMG,iBAAiB,GAAGP,MAAM,CAACC,GAAI,CAAA;AAC5C;AACA;AACA,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACO,MAAMO,WAAW,GAAGR,MAAM,CAACC,GAAI,CAAA;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAA;AAEM,MAAM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"}
|