diff --git a/web/src/app.css b/web/src/app.css index ddae5b6..1472994 100644 --- a/web/src/app.css +++ b/web/src/app.css @@ -74,14 +74,21 @@ body { /* Custom card styling */ .card { - border: none; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); transition: transform 0.2s ease, box-shadow 0.2s ease; } -.card:hover { +.card:not(.fade-in .card) { + border: none; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); +} + +.fade-in .card:not(.card .card) { + border: none; +} + +.card:hover:not(.fade-in .card) { transform: translateY(-2px); box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15); } diff --git a/web/src/lib/components/AuthenticationCard.svelte b/web/src/lib/components/AuthenticationCard.svelte index 13ae525..b44c102 100644 --- a/web/src/lib/components/AuthenticationCard.svelte +++ b/web/src/lib/components/AuthenticationCard.svelte @@ -72,10 +72,9 @@ -
| RBL | -Status | ++ + {check.error ? 'Error' : (check.listed ? 'Listed' : 'Clean')} + + | +{check.rbl} |
|---|---|---|---|
{check.rbl} |
- - - {check.error ? 'Error' : (check.listed ? 'Listed' : 'Clean')} - - | -
{dnsResults.rp_domain || dnsResults.from_domain}
+ {dnsResults.rp_domain || dnsResults.from_domain}
+ SPF validates the Return-Path (envelope sender) domain.
- {#each dnsResults.spf_records as spf, index} -SPF specifies which mail servers are authorized to send emails on behalf of your domain. Receiving servers check the sender's IP address against your SPF record to prevent email spoofing.
+{spf.domain}
@@ -109,16 +125,18 @@
{dnsResults.from_domain}
+ {dnsResults.from_domain}
+ DKIM cryptographically signs your emails, proving they haven't been tampered with in transit. Receiving servers verify this signature against your DNS records.
+{dkim.selector}
Domain: {dkim.domain}
@@ -166,59 +199,79 @@
{dnsResults.dmarc_record.record}
- DMARC builds on SPF and DKIM by telling receiving servers what to do with emails that fail authentication checks. It also enables reporting so you can monitor your email security.
+{dnsResults.dmarc_record.record}
+ BIMI allows your brand logo to be displayed next to your emails in supported mail clients. Requires strong DMARC enforcement (quarantine or reject policy) and optionally a Verified Mark Certificate (VMC).
{dnsResults.bimi_record.selector}
Domain: {dnsResults.bimi_record.domain}
diff --git a/web/src/lib/components/HeaderAnalysisCard.svelte b/web/src/lib/components/HeaderAnalysisCard.svelte
index 382da56..9a7857c 100644
--- a/web/src/lib/components/HeaderAnalysisCard.svelte
+++ b/web/src/lib/components/HeaderAnalysisCard.svelte
@@ -34,7 +34,7 @@
+ Domain alignment ensures that the visible "From" domain matches the domain used for authentication (Return-Path). Proper alignment is crucial for DMARC compliance and helps prevent email spoofing by verifying that the sender domain is consistent across all authentication layers. +
+{headerAnalysis.domain_alignment.from_domain || '-'}{headerAnalysis.domain_alignment.return_path_domain || '-'}{headerAnalysis.domain_alignment.from_domain || '-'}{headerAnalysis.domain_alignment.return_path_domain || '-'}| Header | ++ | When? | Present | Valid | Value | @@ -115,10 +124,12 @@||||
|---|---|---|---|---|---|---|---|---|---|
{name}
+ |
+ {#if check.importance} - + {check.importance} - + {/if} | @@ -132,7 +143,7 @@ {/if} |
- {check.value || '-'}
+ {check.value || '-'}
{#if check.issues && check.issues.length > 0}
{#each check.issues as issue}
diff --git a/web/src/lib/components/MxRecordsDisplay.svelte b/web/src/lib/components/MxRecordsDisplay.svelte
index 55fd7df..c739c5d 100644
--- a/web/src/lib/components/MxRecordsDisplay.svelte
+++ b/web/src/lib/components/MxRecordsDisplay.svelte
@@ -1,49 +1,54 @@
-
- - MX {title} -- {#if description} -{description} - {/if} -
-
+
diff --git a/web/src/lib/components/SpamAssassinCard.svelte b/web/src/lib/components/SpamAssassinCard.svelte
index 374a4f7..7a588f0 100644
--- a/web/src/lib/components/SpamAssassinCard.svelte
+++ b/web/src/lib/components/SpamAssassinCard.svelte
@@ -12,7 +12,7 @@
let { spamassassin, spamGrade, spamScore }: Props = $props();
-
+
+ + + {title} ++ MX +
+ {#if description}
+
+ {description} + {/if} +
+ {#each mxRecords as mx}
+
+
+ {/each}
+ {#if mx.valid}
+ Valid
+ {:else}
+ Invalid
+ {/if}
+
+ {#if mx.error}
+ {mx.error}
+ {/if}
+ Host:
+ {mx.host}Priority: {mx.priority}
+
+ |