PageSourceSearch

https://saferestorehelp.com/assets/ForensicScanner-BYzn3SEp.js

js saferestorehelp.com collected 2026-10-04 21:45:47 UTC 73,450 bytes, 3 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-Dl_m57S2.js","assets/query-DLf6jQ7_.js","assets/vendor-B-xW6FxA.js","assets/ui-GpmADA3y.js","assets/index-0Lb626Tj.css","assets/index-oMP3OQVq.js"])))=>i.map(i=>d[i]);
2import{j as xe,B as g,a as O,D as J,b as he,C as ue,_ as G,r as le}from"./index-Dl_m57S2.js";import{j as e}from"./query-DLf6jQ7_.js";import{a as j,L as Y}from"./vendor-B-xW6FxA.js";import{C as w}from"./card-ILj4tDPQ.js";import{B as y}from"./badge-luS2o2NC.js";import{u as pe}from"./use-forensic-access-CpYYOrnm.js";import{P as v}from"./pricing-D9ntUgza.js";import{C as fe,a as W}from"./CloudUpsell-BoF_NKXx.js";import{C as be}from"./WalletButtons-TEpQy85l.js";import{U as Z}from"./upload-CX2QwWNh.js";import{T as Q}from"./triangle-alert-Z1fBjo2X.js";import{L as H}from"./loader-circle-phX4kCmI.js";import{F as I}from"./file-search-Ch2-fq_S.js";import{L as z}from"./lock-CAF_mOiQ.js";import{F as ee}from"./file-text-A9UNmDIV.js";import{C as K}from"./clock-CqLwbLu7.js";import{M as ge}from"./monitor-BcnQ_B0z.js";import{U as we}from"./user-TQ8ViG6s.js";import{M as je}
2from"./map-pin-DJYLBuVr.js";import{E as ye}from"./eye-D6WR8Gh6.js";import{F as te}from"./fingerprint-BPsVEhx5.js";import{C as R}from"./circle-check-big-DgwbXNy9.js";import{H as ae}from"./hash-DyrOTx1m.js";import{C as ce}from"./crown-Blc4v3xx.js";import{S as se}from"./scale-BEx2838k.js";import{A as re}from"./arrow-right-yrfNys5z.js";import{C as Ne}from"./chevron-down-CANWGin2.js";import{C as ve}from"./circle-x-Ck2dTlHe.js";import{I as Se}from"./info-CswzKH8K.js";import"./ui-GpmADA3y.js";import"./cloud-DMsKisex.js";const ke=xe("ArrowDown",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);function Fe(){return e.jsxs(w,{className:"bg-gradient-to-r from-amber-500/10 to-orange-500/10 border-amber-500/30 p-6 md:p-8 text-center space-y-4",children:[e.jsx(z,{className:"h-8 w-8 text-amber-400 mx-auto"}),e.jsx("h3",{className:"text-2xl font-bold text-white",children:"Unlock Full Forensic Report"}),e.jsx("p",{className:"text-gray-200 max-w-lg mx-auto",children:"See complete metadata details, document edit history, and full finding descriptions. Download court-ready reports and scrub metadata."}),e.jsxs("p",{className:"text-3xl font-black text-white",children:[v.forensicScanner.price," ",e.jsx("span",{className:"text-sm font-normal text-gray-200",children:"one-time"})]}),e.jsxs(g,{onClick:async()=>{const i=prompt("Enter your email to proceed to checkout:");if(i)try{const{getAttributionForCheckout:d}=await G(async()=>{const{getAttributionForCheckout:t}=await import("./index-Dl_m57S2.js").then(n=>n.Z);return{getAttributionForCheckout:t}},__vite__mapDeps([0,1,2,3,4])),c=await(await fetch("/api/forensic-tools/create-checkout",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:i,plan:"scanner",source:"/forensic-scanner",...d()})})).json();c.url&&le(c.url)}catch(d){console.error("Checkout failed:",d)}},className:"bg-gradient-to-r from-amber-500 to-orange-500 text-black font-bold px-8","data-testid":"button-buy-scanner
2-upsell",children:[e.jsx(ce,{className:"h-4 w-4 mr-2"}),"Buy Forensic Scanner"]}),e.jsxs("p",{className:"text-xs text-gray-200",children:["Or get both Scanner + Scrubber for ",v.forensicBundle.price]}),e.jsx(be,{source:"forensic_scanner",showUnavailableHint:!0})]})}const ie=".pdf,.jpg,.jpeg,.png,.tiff,.docx",De=50*1024*1024;async function Ce(i){const d=await i.arrayBuffer(),s=await crypto.subtle.digest("SHA-256",d);return Array.from(new Uint8Array(s)).map(c=>c.toString(16).padStart(2,"0")).join("")}function q(i){return i<1024?i+" B":i<1024*1024?(i/1024).toFixed(1)+" KB":(i/(1024*1024)).toFixed(2)+" MB"}function C(i){if(!i)return"N/A";const d=new Date(i);return isNaN(d.getTime())?"N/A":d.toLocaleString("en-US",{year:"numeric",month:"long",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"})}async function Te(i){const d=await Ce(i),s={fileName:i.name,fileType:i.type||"unknown",fileSize:i.size,sha256:d,metadata:{},flags:[],scanTimestamp:new Date().toISOString()},c=i.name.split(".").pop()?.toLowerCase();if(["jpg","jpeg","png","tiff"].includes(c||""))try{const t=await i.arrayBuffer(),n=new Uint8Array(t.slice(0,32)),r=await(await G(()=>import("./full.esm-DoFl4RTa.js"),[])).default.parse(i,{tiff:!0,exif:!0,gps:!0,icc:!0,iptc:!0,xmp:!0,jfif:!0});if(r){s.metadata.created=r.DateTimeOriginal?.toISOString?.()||r.CreateDate?.toISOString?.()||void 0,s.metadata.modified=r.ModifyDate?.toISOString?.()||void 0,s.metadata.software=r.Software||void 0,s.metadata.cameraModel=r.Model||void 0,s.metadata.cameraMake=r.Make||void 0,s.metadata.author=r.Artist||r.Copyright||void 0;const p=r.ImageWidth||r.ExifImageWidth,m=r.ImageHeight||r.ExifImageHeight;if(s.metadata.resolution=p&&m?`${p}x${m}`:void 0,s.metadata.orientation=r.Orientation?String(r.Orientation):void 0,s.metadata.colorSpace=r.ColorSpace?String(r.ColorSpace):void 0,r.latitude&&r.longitude&&(s.metadata.gps={lat:r.latitude,lng:r.longitude},s.flags.push({severity:"info",title:"GPS Location Data Found",description:`This image contains embedded GPS coordinates: ${r.latitude.toFixed(6)}, ${r.longitude.toFixed(6)}. This reveals where the photo was taken.`})),r.Make&&!r.Model&&s.flags.push({severity:"warning",title:"Incomplete Camera Metadata",description:`Camera make "${r.Make}" is present but the model field is missing. This may indicate partial metadata was preserved or injected.`}),(c==="jpg"||c==="jpeg")&&s.metadata.resolution){const[f,b]=s.metadata.resolution.split("x").map(Number);if(f&&b){const S=f*b*3;i.size>S*.85&&s.flags.push({severity:"info",title:"Unusually Large File Size for Dimensions",description:`The file (${q(i.size)}) is unusually large for a ${s.metadata.resolution} image. This can occur with minimal compression settings or may indicate embedded data (steganography).`})}}}else if(c==="jpg"||c==="jpeg"){const p=n[6]===74&&n[7]===70&&n[8]===73&&n[9]===70;s.flags.push({severity:"critical",title:"EXIF Metadata Stripped",de
2scription:`This JPEG image contains ${p?"only a JFIF header":"no EXIF metadata"}. Most cameras and phones embed metadata automatically. Missing EXIF is a strong indicator the image was re-processed, converted, or had metadata deliberately removed.`})}else(c==="png"||c==="tiff")&&s.flags.push({severity:"warning",title:"No Embedded Metadata",description:`This ${c.toUpperCase()} file contains no embedded metadata fields. This can be normal for programmatically generated images, but may also indicate the file was scrubbed.`})}catch{s.flags.push({severity:"warning",title:"Metadata Parse Error",description:"Could not fully parse image metadata. The file structure may be corrupted or non-standard."})}if(c==="pdf")try{const t=await i.arrayBuffer(),n=new TextDecoder("latin1").decode(t.slice(0,Math.min(t.byteLength,1e5))),l=(n.match(/\bxref\b/g)||[]).length,r=n.includes("/JavaScript")||/\/JS[\s\r\n<(]/.test(n),p=n.includes("/EmbeddedFile")||n.includes("/EmbeddedFiles"),m=n.includes("/AcroForm"),f=n.includes("/Sig ")||n.includes("/SigRef")||n.includes("/DocMDP"),b=n.includes("/Metadata")&&n.includes("xpacket"),{PDFDocument:S}=await G(async()=>{const{PDFDocument:k}=await import("./index-oMP3OQVq.js");return{PDFDocument:k}},__vite__mapDeps([5,2])),h=await S.load(t,{ignoreEncryption:!0});s.metadata.title=h.getTitle()||void 0,s.metadata.author=h.getAuthor()||void 0,s.metadata.creator=h.getCreator()||void 0,s.metadata.producer=h.getProducer()||void 0,s.metadata.software=h.getCreator()||h.getProducer()||void 0,s.metadata.created=h.getCreationDate()?.toISOString()||void 0,s.metadata.modified=h.getModificationDate()?.toISOString()||void 0;const x=h.getPageCount();s.metadata.resolution=`${x} page${x!==1?"s":""}`;const T=h.getCreator(),N=h.getProducer();if(T&&N&&T!==N&&s.flags.push({severity:"warning",title:"Multiple Software Signatures",description:`Created with "${T}" but produced/modified by "${N}". This indicates the PDF was converted or re-processed after initial creation.`}),l>1&&s.flags.push({severity:"warning",title:`Incremental Updates Detected (${l} Revisions)`,description:`This PDF contains ${l} cross-reference sections, indicating it was edited ${l-1} time(s) after creation using incremental update. Each update adds new content without removing old content, which can be used to hide original document content.`}),r&&s.flags.push({severity:"critical",title:"Embedded JavaScript Detected",description:"This PDF contains embedded JavaScript code. While sometimes used legitimately for forms, JavaScript in PDFs is a common vector for malicious code execution and document tampering attacks."}),p&&s.flags.push({severity:"warning",title:"Embedded Files Detected",description:"This PDF contains embedded file attachments. Be cautious — embedded files can contain malware or be used to hide additional documents within this PDF."}),m&&s.flags.push({severity:"info",title:"Interactive Form Fields Present",description:"This PDF contains AcroForm interactive fields. Form data may carry additional metadata or be modified independently from the document body."}),f&&s.flags.push({severity:"info",title:"Digital Signature Field Found",description:"This PDF contains a digital signature structure. If the signature is valid, it confirms the document has not been altered since signing. Verify the certificate chain for authenticity."}),b&&s.metadata.created){const k=n.match(/xmp:CreateDate[^>]*>([^<]+)/);if(k)try{const F=new Date(k[1]).toISOString(),B=s.metadata.created;Math.abs(new Date(F).getTime()-new Date(B).getTime())>300*1e3&&s.flags.push({severity:"warning",title:"XMP and Info Dictionary Date Mismatch",description:`The XMP metadata creation date (${new Date(F).toLocaleString()}) differs from the PDF Info dictionary date (${new Date(B).toLocaleString()}). This mismatch may indicate the document was tampered with or reconstructed.`})}catch{}}}catch{s.flags.push({severity:"warning",title:"PDF Parse Error",description:"Could not fully parse PDF metadata. The file may be encrypted or use a non-standard format."})}if(c==="docx")try{const t=await i.arrayBuffer(),n=new Uint8Array(t);if(n[0]===80&&n[1]===75){const r=new TextDecoder("utf-8",{fatal:!1}).decode(n),p=r.match(/dc:creator[>]([^<]*)/),m=r.match(/cp:lastModifiedBy[>]([^<]*)/),f=r.match(/dcterms:created[^>]*>([^<]*)/),b=r.match(/dcterms:modified[^>]*>([^<]*)/),S=r.match(/dc:title[>]([^<]*)/),h=r.match(/Application[>]([^<]*)/),x=r.match(/AppVersion[>]([^<]*)/),T=r.match(/<Revisions>(\d+)<\/Revisions>/),N=r.match(/<Pages>(\d+)<\/Pages>/),k=r.match(/<Words>(\d+)<\/Words>/);if(p&&(s.metadata.author=p[1]),m&&(s.metadata.lastModifiedBy=m[1]),f&&(s.metadata.created=new Date(f[1]).toISOString()),b&&(s.metadata.modified=new Date(b[1]).toISOString()),S&&(s.metadata.title=S[1]),h){const D=h[1],a=x?x[1]:"";
2s.metadata.software=a?`${D} ${a}`:D}(N||k)&&(s.metadata.resolution=[N?`${N[1]} page${parseInt(N[1])!==1?"s":""}`:"",k?`${parseInt(k[1]).toLocaleString()} words`:""].filter(Boolean).join(", "));const F=T?parseInt(T[1]):null;F!==null&&(F>50?s.flags.push({severity:"warning",title:`High Revision Count (${F} saves)`,description:`This document has been saved ${F} times. A very high revision count can indicate an extensively edited document where content may have been significantly altered from the original.`}):F>0&&s.flags.push({severity:"info",title:`Document Revision Count: ${F}`,description:`This document has been saved ${F} time${F!==1?"s":""}. This is the total number of save operations recorded in the file.`}));const B=r.match(/w:rsidR="([^"]+)"/g)||[],P=new Set(B.map(D=>D.replace(/w:rsidR="|"/g,""))).size;P>3&&s.flags.push({severity:"info",title:`${P} Distinct Editing Sessions`,description:`Word embeds a unique session ID (rsid) each time the document is opened and edited. This document shows ${P} distinct sessions, indicating it was edited ${P} separate times across potentially different computers or user accounts.`});const L=(r.match(/<w:ins[\s>]/g)||[]).length,E=(r.match(/<w:del[\s>]/g)||[]).length;if(L+E>0&&s.flags.push({severity:"warning",title:`Tracked Changes Present (${L} insertions, ${E} deletions)`,description:`This document contains ${L+E} tracked change${L+E!==1?"s":""} that have NOT been accepted or rejected. Hidden tracked changes can conceal the true original content of a document.`}),r.includes("<w:comment ")||r.includes("word/comments.xml")){const D=(r.match(/<w:comment /g)||[]).length;s.flags.push({severity:"info",title:`Comment${D>1?"s":""} Found in Document${D>0?` (${D})`:""}`,description:"This document contains embedded comments. Comments can reveal reviewer names, internal discussions, and context about how the document was created or altered."})}(r.includes("<w:vanish/>")||r.includes("<w:vanish />")||r.includes("<w:vanish>"))&&s.flags.push({severity:"critical",title:"Hidden Text Detected",description:"This document contains text formatted with the 'vanish' property, making it invisible when printed or viewed normally. Hidden text is a red flag for document tampering — content may have been concealed."});const M=r.match(/Target="(https?:\/\/[^"]+)"/g)||[];M.length>0&&s.flags.push({severity:"info",title:`${M.length} External Link${M.length!==1?"s":""} Embedded`,description:`This document contains ${M.length} external hyperlink${M.length!==1?"s":""}. Links can be used to track when a document is opened (via remote image loading) or redirect to malicious content.`}),(r.includes("/word/embeddings/")||r.includes("oleObject"))&&s.flags.push({severity:"warning",title:"Embedded OLE Objects Detected",description:"This document contains embedded OLE (Object Linking and Embedding) objects. OLE embeds can contain executable code and are a common vector for macro-based malware."}),s.metadata.author&&s.metadata.lastModifiedBy&&s.metadata.author!==s.metadata.lastModifiedBy&&s.flags.push({severity:"warning",title:"Different Author and Last Editor",description:`Created by "${s.metadata.author}" but last modified by "${s.metadata.lastModifiedBy}". This indicates the document was edited by a different person than who created it.`})}}catch{s.flags.push({severity:"warning",title:"DOCX Parse Error",description:"Could not fully parse Word document metadata."})}if(s.metadata.created&&s.metadata.modified){const t=new Date(s.metadata.created),n=new Date(s.metadata.modified);n<t&&s.flags.push({severity:"critical",title:"Modification Date Before Creation Date",description:`The file shows a modification date (${n.toLocaleDateString()}) that is BEFORE the creation date (${t.toLocaleDateString()}). This is a strong indicator that metadata has been tampered with or the file was improperly reconstructed.`});const l=Math.abs(n.getTime()-t.getTime())/(1e3*60*60*24);l>365&&s.flags.push({severity:"warning",title:"Large Time Gap Between Creation and Modification",description:`There is a ${Math.floor(l)}-day gap between creation and last modification. This could indicate the document was revisited and significantly altered much later.`});const r=Date.now()+1440*60*1e3;(t.getTime()>r||n.getTime()>r)&&s.flags.push({severity:"critical",title:"Future Timestamp Detected",description:"This file contains a timestamp set to a future date. Future timestamps are a strong indicator of deliberate metadata manipulation."})}if(["jpg","jpeg","png","tiff"].includes(c||"")&&s.metadata.softw
2are){const t=["photoshop","gimp","paint","lightroom","affinity","pixlr","canva","illustrator","inkscape","snapseed","darktable","rawtherapee","capture one","luminar","sketchbook","procreate","paintshop"],n=s.metadata.software.toLowerCase();t.some(l=>n.includes(l))&&s.flags.push({severity:"warning",title:"Image Editing Software Detected",description:`This image was processed with "${s.metadata.software}", which is image editing software. The image may have been significantly altered from its original state.`})}return s}function ne(i){const d=["═════════════════════════════════════════════════════","  SAFERESTORE FORENSIC DOCUMENT ANALYSIS REPORT","═════════════════════════════════════════════════════","",`Scan Date: ${new Date(i.scanTimestamp).toLocaleString()}`,"Report Generated By: SafeRestore Fraudulent Document Scanner","","─── FILE OVERVIEW ───",`Filename: ${i.fileName}`,`File Type: ${i.fileType}`,`File Size: ${(i.fileSize/1024).toFixed(1)} KB (${i.fileSize} bytes)`,`SHA-256 Hash: ${i.sha256}`,"","─── METADATA ANALYSIS ───"],s=i.metadata;s.created&&d.push(`Created: ${new Date(s.created).toLocaleString()}`),s.modified&&d.push(`Modified: ${new Date(s.modified).toLocaleString()}`),s.author&&d.push(`Author: ${s.author}`),s.lastModifiedBy&&d.push(`Last Modified By: ${s.lastModifiedBy}`),s.software&&d.push(`Software: ${s.software}`),s.producer&&d.push(`Producer: ${s.producer}`),s.creator&&d.push(`Creator Tool: ${s.creator}`),s.cameraModel&&d.push(`Camera: ${s.cameraMake||""} ${s.cameraModel}`),s.gps&&d.push(`GPS: ${s.gps.lat.toFixed(6)}, ${s.gps.lng.toFixed(6)}`),s.resolution&&d.push(`Resolution/Pages: ${s.resolution}`),s.title&&d.push(`Title: ${s.title}`),d.push(""),d.push("─── FINDINGS ───"),i.flags.length===0?d.push("No signs of tampering or alteration detected."):i.flags.forEach(l=>{d.push(`[${l.severity.toUpperCase()}] ${l.title}`),d.push(`  ${l.description}`),d.push("")}),d.push(""),d.push("─── INTEGRITY ───"),d.push(`File SHA-256: ${i.sha256}`),d.push("This hash uniquely identifies the exact file analyzed."),d.push(""),d.push("═════════════════════════════════════════════════════"),d.push("SafeRestore | saferestorehelp.com/forensic-scanner"),d.push("Official methods only. No security bypasses.");const c=new Blob([d.join(`
3`)],{type:"text/plain"}),t=URL.createObjectURL(c),n=document.createElement("a");n.href=t,n.download=`forensic-report-${i.fileName.replace(/[^a-zA-Z0-9]/g,"_")}.txt`,n.click(),URL.revokeObjectURL(t)}async function de(i,d){const s=i.name.split(".").pop()?.toLowerCase(),c=i.name.replace(/\.[^.]+$/,"");if(["jpg","jpeg","png","tiff"].includes(s||"")){const t=new Image,n=URL.createObjectURL(i),l=["jpg","jpeg"].includes(s||""),r=l?"jpg":"png",p=l?"image/jpeg":"image/png";await new Promise((m,f)=>{t.onload=()=>{const b=document.createElement("canvas");b.width=t.naturalWidth,b.height=t.naturalHeight;const S=b.getContext("2d");if(!S){f(new Error("Canvas not supported"));return}S.drawImage(t,0,0),b.toBlob(h=>{if(!h){f(new Error("Failed to create blob"));return}const x=document.createElement("a");x.href=URL.createObjectURL(h),x.download=`${c}_scrubbed.${r}`,x.click(),URL.revokeObjectURL(x.href),m()},p,l?.95:void 0),URL.revokeObjectURL(n)},t.onerror=()=>f(new Error("Failed to load image")),t.src=n})}else if(s==="pdf"){const t=await i.arrayBuffer(),{PDFDocument:n}=await G(async()=>{const{PDFDocument:f}=await import("./index-oMP3OQVq.js");return{PDFDocument:f}},__vite__mapDeps([5,2])),l=await n.load(t,{ignoreEncryption:!0});l.setTitle(""),l.setAuthor(""),l.setSubject(""),l.setKeywords([]),l.setProducer(""),l.setCreator(""),l.setCreationDate(new Date(0)),l.setModificationDate(new Date(0));const r=await l.save(),p=new Blob([r],{type:"application/pdf"}),m=document.createElement("a");m.href=URL.createObjectURL(p),m.download=`${c}_scrubbed.pdf`,m.click(),URL.revokeObjectURL(m.href)}}function oe({severity:i}){return i==="critical"?e.jsx(ve,{className:"h-5 w-5 text-red-500 shrink-0"}):i==="warning"?e.jsx(Q,{className:"h-5 w-5 text-amber-500 shrink-0"}):e.jsx(Se,{className:"h-5 w-5 text-blue-400 shrink-0"})}const Pe=[{q:"Can you really detect if a document has been altered?",a:"Yes. Our scanner analyzes embedded metadata such as creation dates, modification timestamps, software signatures, and author fields. Inconsistencies in this data—like a modification date before the creation date, or evidence of image editing software—are strong indicators of tampering. While no tool can guarantee 100% detection of every possible alteration, metadata analysis is a widely accepted forensic technique."},{q:"Is my file uploaded to your servers?",a:"No. All analysis happens entirely in your browser using JavaScript. Your file never leaves your device. We use the Web Crypto API for SHA-256 hashing and parse metadata locally. There is no network request involved in the scanning process."},{q:"What file types are supported?",a:"We support PDF documents, JPEG/JPG images, PNG images, TIFF images, and DOCX (Microsoft Word) files. Each file type has specialized metadata extraction. Images are analyzed for EXIF data including GPS coordinates and camera information. PDFs are checked for creator/producer mismatches. DOCX files are parsed for author and editor metadata."},{q:"Can this be used as evidence in court?",a:"The forensic report includes a SHA-256 hash that uniquely identifies the exact file analyzed, providing chain-of-custody documentation. While the report itself is a useful supporting document, its admissibility depends on your jurisdiction and case. We recommend consulting with your attorney about how to present digital forensic evidence in your specific legal context."},{q:"How does the SHA-256 hash help?",a:"SHA-256 is a cryptographic hash function that produces a unique 64-character fingerprint for any file. Even a single-byte change to the file produces a completely different hash. By recording the hash at the time of analysis, you can later prove that the file has not been modified since it was scanned. This is essential for chain-of-custody in legal proceedings."},{q:"What's the difference between the standalone scan and the Pro version?",a:`The annual subscription provides unlimited document analyses with downloadable text reports for ${v.forensicToolkit.annual.price}/year. SafeRestore Forensic includes unlimited forensic scans, court-ready formatted reports, chain-of-custody documentation, and priority support for legal cases—all included with any Pro license at no additional cost.`},{q:"What does the metadata scrubber do?",a:"The metadata scrubber creates a clean copy of your file with all embedded metadata removed. For images, it strips EXIF data including GPS coordinates, c
3amera information, and editing history by redrawing the image. For PDFs, it removes author, creator, producer, title, and date fields. The scrubbed file is generated entirely in your browser and downloaded directly — nothing is uploaded to any server."}];function ot(i={}){const d=i.dashboardMode??!1,[s,c]=j.useState("idle"),[t,n]=j.useState(null),[l,r]=j.useState(""),[p,m]=j.useState(!1),[f,b]=j.useState(""),[S,h]=j.useState(null),[x,T]=j.useState(null),[N,k]=j.useState(!1),[F,B]=j.useState("monthly"),$=j.useRef(null),P=j.useRef(null),{hasAccess:L,loading:E}=pe(),_=d?!0:L,U=j.useCallback(async a=>{if(b(""),a.size>De){b("File exceeds 50MB limit.");return}const o=a.name.split(".").pop()?.toLowerCase()||"";if(!["pdf","jpg","jpeg","png","tiff","docx"].includes(o)){b("Unsupported file type. Please upload a PDF, image, or Word document.");return}T(a),c("scanning"),n(null),r("Computing SHA-256 file hash..."),await new Promise(u=>setTimeout(u,400)),r("Extracting metadata..."),await new Promise(u=>setTimeout(u,500)),r("Analyzing file signatures..."),await new Promise(u=>setTimeout(u,300)),r("Checking for tampering indicators...");try{const u=await Te(a);await new Promise(A=>setTimeout(A,400)),r("Generating forensic report..."),await new Promise(A=>setTimeout(A,300)),n(u),c("done")}catch{b("Failed to analyze file. The file may be corrupted or encrypted."),c("idle")}},[_]),M=j.useCallback(a=>{a.preventDefault(),m(!1);const o=a.dataTransfer.files[0];o&&U(o)},[U]),X=j.useCallback(a=>{const o=a.target.files?.[0];o&&U(o)},[U]),D=j.useCallback(()=>{c("idle"),n(null),T(null),b(""),r(""),$.current&&($.current.value="")},[]);return d?e.jsx("div",{className:"space-y-8",children:e.jsxs("section",{id:"scanner",ref:P,className:"space-y-8",children:[e.jsx("div",{className:"text-center",children:e.jsx("p",{className:"text-lg text-gray-200 max-w-xl mx-auto",children:"Drop your file below. Everything happens in your browser \\u2014 nothing is sent to a server."})}),s==="idle"&&e.jsxs("div",{className:"max-w-2xl mx-auto",children:[e.jsxs("div",{className:`relative rounded-2xl border-2 border-dashed p-6 sm:p-10 md:p-16 text-center transition-all cursor-pointer ${p?"border-amber-400 bg-amber-500/10":"border-white/20 bg-white/[0.02] hover:border-white/40 hover:bg-white/[0.04]"}`,onDragOver:a=>{a.preventDefault(),m(!0)},onDragLeave:()=>m(!1),onDrop:M,onClick:()=>$.current?.click(),"data-testid":"dropzone-upload",children:[e.jsx("input",{ref:$,type:"file",accept:ie,onChange:X,className:"hidden","data-testid":"input-file-upload"}),e.jsx(Z,{className:"h-12 w-12 text-amber-400 mx-auto mb-4"}),e.jsx("p",{className:"text-xl font-bold text-white mb-2",children:p?"Drop your file here":"Drag & drop a file, or click to browse"}),e.jsx("p",{className:"text-base text-gray-200 mb-4",children:"PDF, JPG, PNG, TIFF, DOCX \\u2014 up to 50MB"}),e.jsx("div",{className:"flex flex-wrap justify-center gap-2",children:["PDF","JPG","PNG","TIFF","DOCX"].map(a=>e.jsxs(y,{variant:"outline",className:"border-white/10 text-gray-200 text-xs",children:[".",a.toLowerCase()]},a))})]}),f&&e.jsxs("p",{className:"text-red-400 text-sm text-center mt-4","data-testid":"text-upload-error",children:[e.jsx(Q,{className:"h-4 w-4 inline mr-1"}),f]})]}),s==="scanning"&&e.jsxs("div",{className:"max-w-md mx-auto text-center space-y-6",children:[e.jsx("div",{className:"relative",children:e.jsx("div",{className:"w-20 h-20 mx-auto rounded-full bg-amber-500/10 border border-amber-500/20 flex items-center justify-center",children:e.jsx(H,{className:"h-10 w-10 text-amber-400 animate-spin"})})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xl font-bold text-white mb-2","data-testid":"text-scanning-status",children:"Analyzing metadata..."}),e.jsx("p",{className:"text-base text-amber-400","data-testid":"text-scanning-step",children:l})]}),e.jsx("div",{className:"w-full bg-white/10 rounded-full h-1.5 overflow-hidden",children:e.jsx("div",{className:"h-full bg-gradient-to-r from-amber-400 to-orange-400 rounded-full animate-pulse",style:{width:"75%"}})})]}
3),s==="done"&&t&&e.jsxs("div",{className:"max-w-3xl mx-auto space-y-6",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-4",children:[e.jsx("h3",{className:"text-xl font-bold text-white","data-testid":"text-report-title",children:"Forensic Analysis Report"}),e.jsxs("div",{className:"flex gap-3 flex-wrap w-full sm:w-auto",children:[e.jsxs(g,{variant:"outline",onClick:D,className:"border-white/20 text-white w-full sm:w-auto","data-testid":"button-scan-another",children:[e.jsx(I,{className:"h-4 w-4 mr-2"}),"Scan Another"]}),x&&e.jsxs(g,{variant:"outline",onClick:async()=>{if(!(!x||N)){k(!0);try{await de(x,t)}catch(a){console.error("Scrub failed:",a)}k(!1)}},disabled:N,className:"border-emerald-500/30 text-emerald-400 w-full sm:w-auto","data-testid":"button-scrub-metadata",children:[N?e.jsx(H,{className:"h-4 w-4 mr-2 animate-spin"}):e.jsx(O,{className:"h-4 w-4 mr-2"}),"Scrub Metadata"]}),e.jsxs(g,{onClick:()=>ne(t),className:"bg-gradient-to-r from-amber-500 to-orange-500 text-black font-bold w-full sm:w-auto","data-testid":"button-download-report",children:[e.jsx(J,{className:"h-4 w-4 mr-2"}),"Download Report"]})]})]}),e.jsxs(w,{className:"bg-white/[0.03] border-white/10 p-6",children:[e.jsx("h4",{className:"text-base font-bold text-amber-400 uppercase tracking-wider mb-4",children:"File Overview"}),e.jsxs("div",{className:"grid sm:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-gray-200 mb-1",children:"File Name"}),e.jsx("p",{className:"text-sm text-white font-medium break-all","data-testid":"text-filename",children:t.fileName})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-gray-200 mb-1",children:"File Type"}),e.jsx("p",{className:"text-sm text-white font-medium","data-testid":"text-filetype",children:t.fileType})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-gray-200 mb-1",children:"File Size"}),e.jsx("p",{className:"text-sm text-white font-medium","data-testid":"text-filesize",children:q(t.fileSize)})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-gray-200 mb-1",children:"SHA-256 Hash"}),e.jsx("p",{className:"text-xs text-white font-mono break-all","data-testid":"text-hash",children:t.sha256})]})]})]}),e.jsxs(w,{className:"bg-white/[0.03] border-white/10 p-6",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2 flex-wrap mb-4",children:[e.jsxs("h4",{className:"text-base font-bold text-amber-400 uppercase tracking-wider",children:["Findings",t.flags.length>0&&e.jsxs("span",{className:"ml-2 text-xs font-normal text-gray-200",children:["(",t.flags.length," detected)"]})]}),e.jsx("div",{className:"flex gap-2 flex-wrap",children:e.jsxs(y,{variant:"outline",className:"border-amber-500/30 text-amber-400","data-testid":"badge-findings-count",children:[t.flags.length," ",t.flags.length===1?"finding":"findings"," detected"]})})]}),t.flags.length===0?e.jsx("p",{className:"text-base text-emerald-400",children:"No signs of tampering detected."}):e.jsx("div",{className:"space-y-3",children:t.flags.map((a,o)=>e.jsx("div",{className:`rounded-lg p-4 border ${a.severity==="critical"?"bg-red-500/5 border-red-500/20":a.severity==="warning"?"bg-amber-500/5 border-amber-500/20":"bg-blue-500/5 border-blue-500/20"}`,"data-testid":`finding-${o}`,children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(y,{variant:"outline",className:`shrink-0 text-xs ${a.severity==="critical"?"border-red-500/30 text-red-400":a.severity==="warning"?"border-amber-500/30 text-amber-400":"border-blue-500/30 text-blue-400"}`,children:a.severity}),e.jsxs("div",{children:[e.jsx("p",{className:"text-white font-medium text-sm",children:a.title}),e.jsx("p",{className:"text-gray-300 text-sm mt-1",children:a.description})]})]})},o))})]}),(()=>{const a=t.metadata,o=Object.entries(a).filter(([,u])=>u!=null&&u!==""&&typeof u!="object");return a.gps&&o.push(["GPS",`${a.gps.lat.toFixed(6)}, ${a.gps.lng.toFixed(6)}`]),o.length>0?e.jsxs(w,{className:"bg-white/[0.03] border-white/10 p-6",children:[e.jsx("h4",{className:"text-base font-bold text-amber-400 uppercase tracking-wider mb-4",children:"Extracted Metadata"}),e.jsx("div",{className:"space-y-2",children:o.map(([u,A],V)=>e.jsxs("div",{className:"flex justify-between items-start gap-4 py-2 border-b border-white/5 last:border-0",children:[e.jsx("span",{className:"text-xs text-gray-400 shrink-0 capitalize",children:u.replace(/([A-Z])/g," $1").trim()}),e.jsx("span",{className:"text-sm text-white text-right break-all",children:A})]},V))})]}):null})()]})]})}):e.jsxs(e.Fragment,{children:[e.jsx(he,{title:"Upload Any Document — Instantly See If It's Been Altered or Faked (Free)",description:"Drop a PDF, DOCX, or image and get instant forensic analysis. Detects tampering, checks timestamps, generates SHA-256 hashes. 100% in your browser — files never uploaded.",ke
3ywords:"fraudulent document scanner, detect altered documents, metadata analysis, document tampering detection, falsified document detection, SHA-256 verification, court-ready forensic report"}),e.jsxs("article",{className:"px-4 sm:px-6 lg:px-0 space-y-12 md:space-y-24",children:[e.jsxs("section",{className:"text-center max-w-4xl mx-auto pt-8",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 rounded-full bg-amber-500/10 border border-amber-500/20 px-5 py-2.5 mb-8",children:[e.jsx(I,{className:"h-4 w-4 text-amber-400"}),e.jsx("span",{className:"text-base font-semibold text-amber-400 uppercase tracking-wider",children:"Forensic Analysis Tool"})]}),e.jsxs("h1",{className:"text-4xl md:text-6xl font-black text-white mb-6 leading-tight","data-testid":"text-hero-title",children:["Forensic Document"," ",e.jsx("span",{className:"bg-gradient-to-r from-amber-400 to-orange-400 bg-clip-text text-transparent",children:"Scanner"})]}),e.jsx("p",{className:"text-lg md:text-xl font-semibold text-amber-300/90 max-w-xl mx-auto mb-4","data-testid":"text-hero-oneliner",children:"Detect edited or falsified documents instantly using metadata analysis."}),e.jsx("p",{className:"text-xl md:text-2xl text-gray-200 max-w-2xl mx-auto mb-8 leading-relaxed","data-testid":"text-hero-subtitle",children:"Upload any PDF, image, or Word document and get a full forensic breakdown of its hidden metadata, edit history, and tampering indicators — all in seconds, right in your browser."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-2 sm:gap-3 mb-10",children:[e.jsxs(y,{variant:"outline",className:"border-amber-500/30 text-amber-400 bg-amber-500/5 px-4 py-1.5",children:[e.jsx(z,{className:"h-3.5 w-3.5 mr-1.5"}),"100% Client-Side"]}),e.jsxs(y,{variant:"outline",className:"border-emerald-500/30 text-emerald-400 bg-emerald-500/5 px-4 py-1.5",children:[e.jsx(O,{className:"h-3.5 w-3.5 mr-1.5"}),"No File Upload"]}),e.jsxs(y,{variant:"outline",className:"border-blue-500/30 text-blue-400 bg-blue-500/5 px-4 py-1.5",children:[e.jsx(ee,{className:"h-3.5 w-3.5 mr-1.5"}),"Court-Ready Reports"]})]}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsxs(g,{onClick:()=>P.current?.scrollIntoView({behavior:"smooth"}),className:"bg-gradient-to-r from-amber-500 to-orange-500 text-black font-bold px-8","data-testid":"button-scan-document-hero",children:[e.jsx(I,{className:"h-4 w-4 mr-2"}),"Scan a Document"]}),e.jsxs(g,{variant:"outline",onClick:()=>{document.getElementById("how-it-works")?.scrollIntoView({behavior:"smooth"})},className:"border-white/20 text-white","data-testid":"button-learn-more-hero",children:["Learn More",e.jsx(ke,{className:"h-4 w-4 ml-2"})]})]})]}),e.jsxs("section",{id:"how-it-works",className:"max-w-4xl mx-auto space-y-10",children:[e.jsxs("div",{className:"text-center",children:[e.jsxs("h2",{className:"text-3xl md:text-5xl font-black text-white mb-4",children:["How It"," ",e.jsx("span",{className:"bg-gradient-to-r from-amber-400 to-orange-400 bg-clip-text text-transparent",children:"Works"})]}),e.jsx("p",{className:"text-gray-200 max-w-xl mx-auto",children:"Your files never leave your device. All analysis happens in your browser."})]}),e.jsx("div",{className:"grid md:grid-cols-3 gap-6",children:[{step:"01",icon:Z,title:"Select File",desc:"Drag and drop or select a PDF, image, or Word document. The file stays in your browser — nothing is uploaded to any server.",gradient:"from-amber-500 to-orange-500"},{step:"02",icon:ue,title:"Instant Analysis",desc:"Our scanner extracts metadata, computes SHA-256 hashes, checks timestamps, software signatures, GPS data, and more.",gradient:"from-orange-500 to-red-500"},{step:"03",icon:ee,title:"Get Report",desc:"View a detailed forensic report with findings ranked by severity. Download the report as a text file for your records.",gradient:"from-red-500 to-pink-500"}].map(a=>e.jsxs(w,{className:"bg-white/[0.03] border-white/10 p-6 md:p-8",children:[e.jsx("div",{className:`inline-flex rounded-xl bg-gradient-to-br ${a.gradient} p-3 mb-5`,children:e.jsx(a.icon,{className:"h-6 w-6 text-white"})}),e.jsxs("p",{className:"text-sm font-bold text-amber-400 mb-2 tracking-widest",children:["STEP ",a.step]}),e.jsx("h3",{className:"text-2xl font-bold text-white mb-3",children:a.title}),e.jsx("p",{className:"text-base text-gray-200 leading-relaxed",children:a.desc})]},a.step))})]}),e.jsxs("section",{className:"space-y-10",children:[e.jsxs("div",{className:"text-center max-w-2xl mx-auto",children:[e.jsxs("h2",{className:"text-3xl md:text-5xl font-black text-white mb-4",children:["What We"," ",e.jsx("span",{className:"bg-gradient-to-r from-amber-400 to-orange-400 bg-clip-text text-transparent",children:"Detect"})]}),e.jsx("p",{className:"text-lg text-gray-200",children:"Comprehensive metadata analysis to uncover signs of document tampering."})]}),e.jsx("div",{className:"grid sm:grid-cols-2 lg:grid-cols-3 gap-4 md:gap-6",children:[{icon:K,title:"Date Inconsistencies",desc:"Flags when modification dates precede creation dates, or when timestamps show suspicious gaps."},{icon:ge,title:"Software Signature Analysis",desc:"Identifies what software created and last edited the file, flagging mismatches between creator and editor."},{icon:we,title:"Author & Metadata Tampering",desc:"Detects when the original author differs from the last modifier, indicating potential unauthorized edits."},{icon:je,title:"GPS / Location Data in Photos",desc:"Extracts embedded GPS coordinates from photos, revealing where a document or image was created."}
3,{icon:ye,title:"Stripped or Missing Metadata",desc:"Identifies files where expected metadata has been removed — a common tactic to hide a file's origin."},{icon:te,title:"File Hash Verification (SHA-256)",desc:"Computes a unique cryptographic hash for chain of custody, proving the file hasn't been altered since scanning."},{icon:O,title:"Metadata Scrubber",desc:"Remove all identifying metadata from images and PDFs. Strip GPS coordinates, author names, software signatures, and timestamps."}].map(a=>e.jsxs(w,{className:"bg-white/[0.03] border-white/10 p-6",children:[e.jsx(a.icon,{className:"h-8 w-8 text-amber-400 mb-4"}),e.jsx("h3",{className:"text-lg font-bold text-white mb-2",children:a.title}),e.jsx("p",{className:"text-base text-gray-200 leading-relaxed",children:a.desc})]},a.title))})]}),e.jsxs("section",{id:"scanner",ref:P,className:"space-y-8",children:[e.jsxs("div",{className:"text-center",children:[e.jsxs("h2",{className:"text-3xl md:text-5xl font-black text-white mb-4",children:["Scan a"," ",e.jsx("span",{className:"bg-gradient-to-r from-amber-400 to-orange-400 bg-clip-text text-transparent",children:"Document"})]}),e.jsx("p",{className:"text-lg text-gray-200 max-w-xl mx-auto",children:_?"Drop your file below. Everything happens in your browser — nothing is sent to a server.":"Scan any document for free — see if it's been edited. Purchase to unlock full metadata details and reports."})]}),E&&e.jsx("div",{className:"max-w-2xl mx-auto text-center py-12",children:e.jsx(H,{className:"h-8 w-8 text-amber-400 animate-spin mx-auto"})}),!E&&e.jsxs(e.Fragment,{children:[s==="idle"&&e.jsxs("div",{className:"max-w-2xl mx-auto",children:[e.jsxs("div",{className:`relative rounded-2xl border-2 border-dashed p-6 sm:p-10 md:p-16 text-center transition-all cursor-pointer ${p?"border-amber-400 bg-amber-500/10":"border-white/20 bg-white/[0.02] hover:border-white/40 hover:bg-white/[0.04]"}`,onDragOver:a=>{a.preventDefault(),m(!0)},onDragLeave:()=>m(!1),onDrop:M,onClick:()=>$.current?.click(),"data-testid":"dropzone-upload",children:[e.jsx("input",{ref:$,type:"file",accept:ie,onChange:X,className:"hidden","data-testid":"input-file-upload"}),e.jsx(Z,{className:"h-12 w-12 text-amber-400 mx-auto mb-4"}),e.jsx("p",{className:"text-xl font-bold text-white mb-2",children:p?"Drop your file here":"Drag & drop a file, or click to browse"}),e.jsx("p",{className:"text-base text-gray-200 mb-4",children:"PDF, JPG, PNG, TIFF, DOCX \\u2014 up to 50MB"}),e.jsx("div",{className:"flex flex-wrap justify-center gap-2",children:["PDF","JPG","PNG","TIFF","DOCX"].map(a=>e.jsxs(y,{variant:"outline",className:"border-white/10 text-gray-200 text-xs",children:[".",a.toLowerCase()]},a))})]}),f&&e.jsxs("p",{className:"text-red-400 text-sm text-center mt-4","data-testid":"text-upload-error",children:[e.jsx(Q,{className:"h-4 w-4 inline mr-1"}),f]})]}),s==="scanning"&&e.jsxs("div",{className:"max-w-md mx-auto text-center space-y-6",children:[e.jsx("div",{className:"relative",children:e.jsx("div",{className:"w-20 h-20 mx-auto rounded-full bg-amber-500/10 border border-amber-500/20 flex items-center justify-center",children:e.jsx(H,{className:"h-10 w-10 text-amber-400 animate-spin"})})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xl font-bold text-white mb-2","data-testid":"text-scanning-status",children:"Analyzing metadata..."}),e.jsx("p",{className:"text-base text-amber-400","data-testid":"text-scanning-step",children:l})]}),e.jsx("div",{className:"w-full bg-white/10 rounded-full h-1.5 overflow-hidden",children:e.jsx("div",{className:"h-full bg-gradient-to-r from-amber-400 to-orange-400 rounded-full animate-pulse",style:{width:"75%"}})})]}),s==="done"&&t&&_&&e.jsxs("div",{className:"max-w-3xl mx-auto space-y-6",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-4",children:[e.jsx("h3",{className:"text-xl font-bold text-white","data-testid":"text-report-title",children:"Forensic Analysis Report"}),e.jsxs("div",{className:"flex gap-3 flex-wrap w-full sm:w-auto",children:[e.jsxs(g,{variant:"outline",onClick:D,className:"border-white/20 text-white w-full sm:w-auto","data-testid":"button-scan-another",children:[e.jsx(I,{className:"h-4 w-4 mr-2"}),"Scan Another"]}),x&&!["docx"].includes(x.name.split(".").pop()?.toLowerCase()||"")&&e.jsx(g,{variant:"outline",onClick:async()=>
3{if(!(!x||!t)){k(!0);try{await de(x,t)}catch(a){console.error("Scrub failed:",a)}k(!1)}},disabled:N,className:"border-emerald-500/30 text-emerald-400 w-full sm:w-auto","data-testid":"button-scrub-metadata",children:N?e.jsxs(e.Fragment,{children:[e.jsx(H,{className:"h-4 w-4 mr-2 animate-spin"}),"Scrubbing..."]}):e.jsxs(e.Fragment,{children:[e.jsx(O,{className:"h-4 w-4 mr-2"}),"Scrub Metadata"]})}),e.jsxs(g,{onClick:()=>ne(t),className:"bg-gradient-to-r from-amber-500 to-orange-500 text-black font-bold w-full sm:w-auto","data-testid":"button-download-report",children:[e.jsx(J,{className:"h-4 w-4 mr-2"}),"Download Report"]})]})]}),e.jsxs(w,{className:"bg-white/[0.03] border-white/10 p-6",children:[e.jsx("h4",{className:"text-base font-bold text-amber-400 uppercase tracking-wider mb-4",children:"File Overview"}),e.jsxs("div",{className:"grid sm:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-gray-200 mb-1",children:"File Name"}),e.jsx("p",{className:"text-sm text-white font-medium break-all","data-testid":"text-result-filename",children:t.fileName})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-gray-200 mb-1",children:"File Type"}),e.jsx("p",{className:"text-sm text-white font-medium","data-testid":"text-result-filetype",children:t.fileType})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-gray-200 mb-1",children:"File Size"}),e.jsx("p",{className:"text-sm text-white font-medium","data-testid":"text-result-filesize",children:q(t.fileSize)})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-gray-200 mb-1",children:"SHA-256 Hash"}),e.jsx("p",{className:"text-xs text-white font-mono break-all","data-testid":"text-result-hash",children:t.sha256})]})]})]}),e.jsxs(w,{className:"bg-white/[0.03] border-white/10 p-6",children:[e.jsx("h4",{className:"text-base font-bold text-amber-400 uppercase tracking-wider mb-4",children:"Metadata Found"}),e.jsx("div",{className:"grid sm:grid-cols-2 gap-4",children:[{label:"Created",value:C(t.metadata.created)},{label:"Modified",value:C(t.metadata.modified)},{label:"Author",value:t.metadata.author||"N/A"},{label:"Last Modified By",value:t.metadata.lastModifiedBy||"N/A"},{label:"Software",value:t.metadata.software||"N/A"},{label:"Producer",value:t.metadata.producer||"N/A"},{label:"Creator",value:t.metadata.creator||"N/A"},...t.metadata.cameraModel?[{label:"Camera Model",value:`${t.metadata.cameraMake||""} ${t.metadata.cameraModel}`.trim()}]:[],...t.metadata.gps?[{label:"GPS Location",value:`${t.metadata.gps.lat.toFixed(6)}, ${t.metadata.gps.lng.toFixed(6)}`}]:[],...t.metadata.resolution?[{label:"Resolution / Pages",value:t.metadata.resolution}]:[],...t.metadata.title?[{label:"Title",value:t.metadata.title}]:[]].map(a=>e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-gray-200 mb-1",children:a.label}),e.jsx("p",{className:"text-sm text-white font-medium","data-testid":`text-meta-${a.label.toLowerCase().replace(/\s+/g,"-")}`,children:a.value})]},a.label))})]}),(t.metadata.created||t.metadata.modified||t.metadata.author||t.metadata.lastModifiedBy||t.metadata.software||t.metadata.producer||t.metadata.creator)&&e.jsxs(w,{className:"bg-white/[0.03] border-white/10 p-6","data-testid":"card-document-history",children:[e.jsxs("h4",{className:"text-base font-bold text-amber-400 uppercase tracking-wider mb-4",children:[e.jsx(K,{className:"h-4 w-4 inline mr-1.5"}),"Document History"]}),e.jsx("p",{className:"text-xs text-gray-200 mb-5",children:"What the metadata reveals about this document's origin and editing history. This is not a reconstruction of the original file, but an analysis of the embedded metadata trail."}),e.jsxs("div",{className:"relative pl-6 space-y-5 before:absolute before:left-[7px] before:top-2 before:bottom-2 before:w-px before:bg-gradient-to-b before:from-amber-500/40 before:to-transparent",children:[t.metadata.created&&e.jsxs("div",{className:"relative","data-testid":"history-created",children:[e.jsx("div",{className:"absolute -left-6 top-1 w-3.5 h-3.5 rounded-full bg-amber-500/20 border-2 border-amber-500 flex items-center justify-center",children:e.jsx("div",{className:"w-1 h-1 rounded-full bg-amber-400"})}),e.jsx("p",{className:"text-xs font-bold text-amber-400 mb-0.5",children:"Original Creation"}),e.jsx("p",{className:"text-sm text-white",children:C(t.metadata.created)}),e.jsxs("div",{className:"mt-1 space-y-0.5",children:[t.metadata.author&&e.jsxs("p",{className:"text-xs text-gray-200",children:["Author: ",e.jsx("span",{className:"text-gray-300",children:t.metadata.author})]}),t.metadata.creator&&e.jsxs("p",{className:"text-xs text-gray-200",children:["Created with: ",e.jsx("span",{className:"text-gray-300",children:t.metadata.creator})]}),t.metadata.cameraMake&&e.jsxs("p",{className:"text-xs text-gray-200",children:["Camera: ",e.jsxs("span",{className:"text-gray-300",children:[t.metadata.cameraMake," ",t.metadata.cameraModel||""]})]}),t.metadata.gps&&e.jsxs("p",{className:"text-xs text-gray-200",children:["Location: ",e.jsxs("span",{className:"text-gray-300",children:[t.metadata.gps.lat.toFixed(6),", ",t.metadata.gps.lng.toFixed(6)]})]})]})]}
3),t.metadata.software&&t.metadata.creator&&t.metadata.software!==t.metadata.creator&&e.jsxs("div",{className:"relative","data-testid":"history-processed",children:[e.jsx("div",{className:"absolute -left-6 top-1 w-3.5 h-3.5 rounded-full bg-blue-500/20 border-2 border-blue-500 flex items-center justify-center",children:e.jsx("div",{className:"w-1 h-1 rounded-full bg-blue-400"})}),e.jsx("p",{className:"text-xs font-bold text-blue-400 mb-0.5",children:"Processed / Converted"}),e.jsxs("p",{className:"text-sm text-white",children:["Handled by: ",t.metadata.software]}),t.metadata.producer&&t.metadata.producer!==t.metadata.software&&e.jsxs("p",{className:"text-xs text-gray-200 mt-0.5",children:["Producer: ",e.jsx("span",{className:"text-gray-300",children:t.metadata.producer})]})]}),t.metadata.modified&&e.jsxs("div",{className:"relative","data-testid":"history-modified",children:[e.jsx("div",{className:`absolute -left-6 top-1 w-3.5 h-3.5 rounded-full flex items-center justify-center ${t.metadata.created&&new Date(t.metadata.modified)<new Date(t.metadata.created)?"bg-red-500/20 border-2 border-red-500":"bg-emerald-500/20 border-2 border-emerald-500"}`,children:e.jsx("div",{className:`w-1 h-1 rounded-full ${t.metadata.created&&new Date(t.metadata.modified)<new Date(t.metadata.created)?"bg-red-400":"bg-emerald-400"}`})}),e.jsxs("p",{className:`text-xs font-bold mb-0.5 ${t.metadata.created&&new Date(t.metadata.modified)<new Date(t.metadata.created)?"text-red-400":"text-emerald-400"}`,children:["Last Modified",t.metadata.created&&new Date(t.metadata.modified)<new Date(t.metadata.created)?" (SUSPICIOUS: Before Creation Date)":""]}),e.jsx("p",{className:"text-sm text-white",children:C(t.metadata.modified)}),e.jsxs("div",{className:"mt-1 space-y-0.5",children:[t.metadata.lastModifiedBy&&e.jsxs("p",{className:"text-xs text-gray-200",children:["Modified by: ",e.jsxs("span",{className:`${t.metadata.author&&t.metadata.lastModifiedBy!==t.metadata.author?"text-amber-400":"text-gray-300"}`,children:[t.metadata.lastModifiedBy,t.metadata.author&&t.metadata.lastModifiedBy!==t.metadata.author?" (different from original author)":""]})]}),t.metadata.created&&e.jsxs("p",{className:"text-xs text-gray-200",children:["Time since creation: ",e.jsx("span",{className:"text-gray-300",children:(()=>{const a=Math.abs(new Date(t.metadata.modified).getTime()-new Date(t.metadata.created).getTime()),o=Math.floor(a/(1e3*60*60*24)),u=Math.floor(a%(1e3*60*60*24)/(1e3*60*60));return o>365?`${Math.floor(o/365)} year${Math.floor(o/365)>1?"s":""}, ${o%365} days`:o>0?`${o} day${o>1?"s":""}, ${u} hour${u!==1?"s":""}`:`${u} hour${u!==1?"s":""}`})()})]})]})]}),e.jsxs("div",{className:"relative","data-testid":"history-scanned",children:[e.jsx("div",{className:"absolute -left-6 top-1 w-3.5 h-3.5 rounded-full bg-gray-500/20 border-2 border-gray-500 flex items-center justify-center",children:e.jsx("div",{className:"w-1 h-1 rounded-full bg-gray-400"})}),e.jsx("p",{className:"text-xs font-bold text-gray-200 mb-0.5",children:"Forensic Scan Performed"}),e.jsx("p",{className:"text-sm text-white",children:C(t.scanTimestamp)})]})]})]}),e.jsxs(w,{className:"bg-white/[0.03] border-white/10 p-6",children:[e.jsxs("h4",{className:"text-base font-bold text-amber-400 uppercase tracking-wider mb-4",children:["Findings",t.flags.length>0&&e.jsxs("span",{className:"ml-2 text-xs font-normal text-gray-200",children:["(",t.flags.length," detected)"]})]}),t.flags.length===0?e.jsxs("div",{className:"flex items-center gap-3 rounded-xl bg-emerald-500/10 border border-emerald-500/20 p-4","data-testid":"text-no-tampering",children:[e.jsx(R,{className:"h-6 w-6 text-emerald-400 shrink-0"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-bold text-emerald-400",children:"No signs of tampering detected"}),e.jsx("p",{className:"text-xs text-gray-200 mt-1",children:"All metadata appears consistent and intact."})]})]}):e.jsx("div",{className:"space-y-3",children:t.flags.map((a,o)=>e.jsxs("div",{className:`flex items-start gap-3 rounded-xl p-4 border ${a.severity==="critical"?"bg-red-500/10 border-red-500/20":a.severity==="warning"?"bg-amber-500/10 border-amber-500/20":"bg-blue-500/10 border-blue-500/20"}`,"data-testid":`flag-${a.severity}-${o}`,children:[e.jsx(oe,{severity:a.severity}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx(y,{variant:"outline",className:`text-xs ${a.severity==="critical"?"border-red-500/30 text-red-400":a.severity==="warning"?"border-amber-500/30 text-amber-400":"border-blue-500/30 text-blue-400"}`,children:a.severity.toUpperCase()}),e.jsx("p",{className:"text-sm font-bold text-white",children:a.title})]}),e.jsx("p",{className:"text-sm text-gray-200 mt-1 leading-relaxed",children:a.description})]})]},o))})]}),e.jsxs(w,{className:"bg-white/[0.03] border-white/10 p-6",children:[e.jsxs("h4",{className:"text-base font-bold text-amber-400 uppercase tracking-wider mb-3",children:[e.jsx(ae,{className:"h-4 w-4 inline mr-1.5"}),"Integrity Hash \\u2014 Chain of Custody"]}),e.jsx("p",{className:"text-xs text-gray-200 mb-2",children:"This SHA-256 hash uniquely identifies the exact file analyzed. Any modification to the file will produce a different hash."}),e.jsx("div",{className:"rounded-lg bg-black/50 border border-white/10 p-3",children:e.jsx("p",{className:"text-xs font-mono text-white break-all","data-testid":"text-integrity-hash",children:t.sha256})}),e.jsxs("p",{className:"text-xs text-gray-200 mt-2",children:["Scan performed: ",C(t.scanTimestamp)]})]}),x&&e.jsx(w,{className:"bg-emerald-500/5 border-emerald-500/20 p-5",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(O,{className:"h-5 w-5 text-emerald-400 shrink-0 mt-0.5"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-bold text-emerald-400 mb-1",children:"Metadata Scrubber"}),e.jsx("p",{className:"text-sm text-gray-200 leading-relaxed",children:["docx","doc"].includes(x.name.split(".").pop()?.toLowerCase()||"")?"Word documents require re-saving from Microsoft Word to fully strip metadata. Open the document in Word, go to File > Info > Check for Issues > Inspect Document.":'Want to remove all metadata from this file? Click "Scrub Metadata" above to download a clean copy with all identifying information stripped. The scrubbed file will have no author, GPS, software, or date information.'})]})]})}),e.jsx(fe,{feature:"exportable_logs",tier:"cloud",context:"forensic_scanner_result"}),e.jsx(W,{feature:"mobile_cloud_recovery",context:"forensic_scanner_result"})]}),s==="done"&&t&&!_&&e.jsxs("div",{className:"max-w-3xl mx-auto 
3space-y-6",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-4",children:[e.jsx("h3",{className:"text-xl font-bold text-white","data-testid":"text-report-title",children:"Forensic Analysis Report"}),e.jsxs("div",{className:"flex gap-3 flex-wrap w-full sm:w-auto",children:[e.jsxs(g,{variant:"outline",onClick:D,className:"border-white/20 text-white w-full sm:w-auto","data-testid":"button-scan-another",children:[e.jsx(I,{className:"h-4 w-4 mr-2"}),"Scan Another"]}),e.jsxs(g,{disabled:!0,className:"opacity-50 cursor-not-allowed bg-gradient-to-r from-gray-600 to-gray-700 text-gray-200 font-bold w-full sm:w-auto","data-testid":"button-scrub-metadata-disabled",children:[e.jsx(O,{className:"h-4 w-4 mr-2"}),"Scrub Metadata"]}),e.jsxs(g,{disabled:!0,className:"opacity-50 cursor-not-allowed bg-gradient-to-r from-gray-600 to-gray-700 text-gray-200 font-bold w-full sm:w-auto","data-testid":"button-download-report-disabled",children:[e.jsx(J,{className:"h-4 w-4 mr-2"}),"Download Report"]})]})]}),e.jsxs(w,{className:"bg-white/[0.03] border-white/10 p-6",children:[e.jsx("h4",{className:"text-base font-bold text-amber-400 uppercase tracking-wider mb-4",children:"File Overview"}),e.jsxs("div",{className:"grid sm:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-gray-200 mb-1",children:"File Name"}),e.jsx("p",{className:"text-sm text-white font-medium break-all","data-testid":"text-preview-filename",children:t.fileName})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-gray-200 mb-1",children:"File Type"}),e.jsx("p",{className:"text-sm text-white font-medium","data-testid":"text-preview-filetype",children:t.fileType})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-gray-200 mb-1",children:"File Size"}),e.jsx("p",{className:"text-sm text-white font-medium","data-testid":"text-preview-filesize",children:q(t.fileSize)})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-gray-200 mb-1",children:"SHA-256 Hash"}),e.jsx("p",{className:"text-xs text-white font-mono break-all","data-testid":"text-preview-hash",children:t.sha256})]})]})]}),e.jsxs(w,{className:"bg-white/[0.03] border-white/10 p-6",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2 flex-wrap mb-4",children:[e.jsxs("h4",{className:"text-base font-bold text-amber-400 uppercase tracking-wider",children:["Findings",t.flags.length>0&&e.jsxs("span",{className:"ml-2 text-xs font-normal text-gray-200",children:["(",t.flags.length," detected)"]})]}),e.jsxs("div",{className:"flex gap-2 flex-wrap",children:[e.jsxs(y,{variant:"outline",className:"border-amber-500/30 text-amber-400","data-testid":"badge-findings-count",children:[t.flags.length," ",t.flags.length===1?"finding":"findings"," detected"]}),t.flags.filter(a=>a.severity==="critical").length>0&&e.jsxs(y,{variant:"outline",className:"border-red-500/30 text-red-400","data-testid":"badge-critical-count",children:[t.flags.filter(a=>a.severity==="critical").length," critical"]}),t.flags.filter(a=>a.severity==="warning").length>0&&e.jsxs(y,{variant:"outline",className:"border-amber-500/30 text-amber-400","data-testid":"badge-warning-count",children:[t.flags.filter(a=>a.severity==="warning").length," warning"]}),t.flags.filter(a=>a.severity==="info").length>0&&e.jsxs(y,{variant:"outline",className:"border-blue-500/30 text-blue-400","data-testid":"badge-info-count",children:[t.flags.filter(a=>a.severity==="info").length," info"]})]})]}),t.flags.length===0?e.jsxs("div",{className:"flex items-center gap-3 rounded-xl bg-emerald-500/10 border border-emerald-500/20 p-4","data-testid":"text-no-tampering",children:[e.jsx(R,{className:"h-6 w-6 text-emerald-400 shrink-0"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-bold text-emerald-400",children:"No signs of tampering detected"}),e.jsx("p",{className:"text-xs text-gray-200 mt-1",children:"All metadata appears consistent and intact."})]})]}):e.jsx("div",{className:"space-y-3",children:t.flags.map((a,o)=>e.jsxs("div",{className:`flex items-start gap-3 rounded-xl p-4 border ${a.severity==="critical"?"bg-red-500/10 border-red-500/20":a.severity==="warning"?"bg-amber-500/10 border-amber-500/20":"bg-blue-500/10 border-blue-500/20"}`,"data-testid":`flag-${a.severity}-${o}`,children:[e.jsx(oe,{severity:a.severity}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx(y,{variant:"outline",className:`text-xs ${a.severity==="critical"?"border-red-500/30 text-red-400":a.severity==="warning"?"border-amber-500/30 text-amber-400":"border-blue-500/30 text-blue-400"}`,children:a.severity.toUpperCase()}),e.jsx("p",{className:"text-sm font-bold text-white",children:a.title})]}),e.jsx("div",{className:"relative mt-1",children:e.jsx("p",{className:"text-sm text-gray-200 leading-relaxed blur-sm select-none",children:a.description})})]})]},o))})]}),e.jsxs(w,{className:"bg-white/[0.03] border-white/10 p-6",children:[e.jsx("h4",{className:"text-base font-bold text-amber-400 uppercase tracking-wider mb-4",children:"Metadata Found"}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"blur-sm select-none pointer-events-none",children:e.jsx("div",{className:"grid sm:grid-cols-2 gap-4",children:[{label:"Created",value:C(t.metadata.created)},{label:"Modified",value:C(t.metadata.modified)},{label:"Author",value:t.metadata.author||"N/A"},{label:"Last Modified By",value:t.metadata.lastModifiedBy||"N/A"}
3,{label:"Software",value:t.metadata.software||"N/A"},{label:"Producer",value:t.metadata.producer||"N/A"},{label:"Creator",value:t.metadata.creator||"N/A"}].map(a=>e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-gray-200 mb-1",children:a.label}),e.jsx("p",{className:"text-sm text-white font-medium",children:a.value})]},a.label))})}),e.jsx("div",{className:"absolute inset-0 flex items-center justify-center",children:e.jsxs("div",{className:"flex items-center gap-2 rounded-full bg-black/60 backdrop-blur-sm px-4 py-2 border border-amber-500/30",children:[e.jsx(z,{className:"h-3.5 w-3.5 text-amber-400"}),e.jsx("span",{className:"text-sm font-medium text-amber-400",children:"Purchase to reveal full metadata"})]})})]})]}),(t.metadata.created||t.metadata.modified||t.metadata.author||t.metadata.lastModifiedBy||t.metadata.software||t.metadata.producer||t.metadata.creator)&&e.jsxs(w,{className:"bg-white/[0.03] border-white/10 p-6","data-testid":"card-document-history",children:[e.jsxs("h4",{className:"text-base font-bold text-amber-400 uppercase tracking-wider mb-4",children:[e.jsx(K,{className:"h-4 w-4 inline mr-1.5"}),"Document History"]}),e.jsxs("div",{className:"relative",children:[e.jsxs("div",{className:"blur-sm select-none pointer-events-none",children:[e.jsx("p",{className:"text-xs text-gray-200 mb-5",children:"What the metadata reveals about this document's origin and editing history."}),e.jsxs("div",{className:"relative pl-6 space-y-5 before:absolute before:left-[7px] before:top-2 before:bottom-2 before:w-px before:bg-gradient-to-b before:from-amber-500/40 before:to-transparent",children:[t.metadata.created&&e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-6 top-1 w-3.5 h-3.5 rounded-full bg-amber-500/20 border-2 border-amber-500 flex items-center justify-center",children:e.jsx("div",{className:"w-1 h-1 rounded-full bg-amber-400"})}),e.jsx("p",{className:"text-xs font-bold text-amber-400 mb-0.5",children:"Original Creation"}),e.jsx("p",{className:"text-sm text-white",children:C(t.metadata.created)})]}),t.metadata.modified&&e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-6 top-1 w-3.5 h-3.5 rounded-full bg-blue-500/20 border-2 border-blue-500 flex items-center justify-center",children:e.jsx("div",{className:"w-1 h-1 rounded-full bg-blue-400"})}),e.jsx("p",{className:"text-xs font-bold text-blue-400 mb-0.5",children:"Last Modified"}),e.jsx("p",{className:"text-sm text-white",children:C(t.metadata.modified)})]}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -left-6 top-1 w-3.5 h-3.5 rounded-full bg-gray-500/20 border-2 border-gray-500 flex items-center justify-center",children:e.jsx("div",{className:"w-1 h-1 rounded-full bg-gray-400"})}),e.jsx("p",{className:"text-xs font-bold text-gray-200 mb-0.5",children:"Forensic Scan Performed"}),e.jsx("p",{className:"text-sm text-white",children:C(t.scanTimestamp)})]})]})]}),e.jsx("div",{className:"absolute inset-0 flex items-center justify-center",children:e.jsxs("div",{className:"flex items-center gap-2 rounded-full bg-black/60 backdrop-blur-sm px-4 py-2 border border-amber-500/30",children:[e.jsx(z,{className:"h-3.5 w-3.5 text-amber-400"}),e.jsx("span",{className:"text-sm font-medium text-amber-400",children:"Purchase to reveal edit history"})]})})]})]}),e.jsxs(w,{className:"bg-white/[0.03] border-white/10 p-6",children:[e.jsxs("h4",{className:"text-base font-bold text-amber-400 uppercase tracking-wider mb-3",children:[e.jsx(ae,{className:"h-4 w-4 inline mr-1.5"}),"Integrity Hash — Chain of Custody"]}),e.jsx("p",{className:"text-xs text-gray-200 mb-2",children:"This SHA-256 hash uniquely identifies the exact file analyzed. Any modification to the file will produce a different hash."}),e.jsx("div",{className:"rounded-lg bg-black/50 border border-white/10 p-3",children:e.jsx("p",{className:"text-xs font-mono text-white break-all","data-testid":"text-integrity-hash",children:t.sha256})}),e.jsxs("p",{className:"text-xs text-gray-200 mt-2",children:["Scan performed: ",C(t.scanTimestamp)]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(W,{feature:"mobile_message_parsing",context:"forensic_scanner_locked"}),e.jsx(W,{feature:"cloud_file_carving",context:"forensic_scanner_locked"}),e.jsx(W,{feature:"exportable_logs",tier:"cloud",context:"forensic_scanner_locked"})]}),e.jsx(Fe,{})]})]})]}),e.jsxs("section",{className:"space-y-10",id:"pricing",children:[e.jsxs("div",{className:"text-center",children:[e.jsx("h2",{className:"text-3xl md:text-5xl font-black text-white mb-4",children:e.jsx("span",{className:"bg-gradient-to-r from-amber-400 to-orange-400 bg-clip-text text-transparent",children:"Pricing"})}),e.jsx("p",{className:"text-gray-200 max-w-xl mx-auto",children:"Buy each tool individually, grab the bundle, or get everything included with a Forensic Toolkit subscription."})]}),e.jsxs("div",{className:"grid md:grid-cols-2 lg:grid-cols-4 gap-6 max-w-6xl mx-auto",children:[e.jsxs("div",{className:"rounded-2xl bg-white/[0.03] border border-white/10 p-6 transition-all hover:border-amber-500/30",children:[e.jsxs("div",{className:"flex items-center gap-2.5 mb-4",children:[e.jsx("div",{className:"rounded-lg bg-amber-500/15 p-2",children:e.jsx(I,{className:"h-5 w-5 text-amber-400"})}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-xl font-bold text-white","data-testid":"text-scanner-title",children:"Forensic Scanner"}),e.jsx("p",{className:"text-xs text-gray-400",children:"Standalone"})]})]}),e.jsx("div",{className:"rounded-lg bg-white/5 border border-white/10 p-3 mb-5",children:e.jsxs("p",{className:"text-2xl font-black text-white",children:[v.forensicScanner.price," ",e.jsx("span",{className:"text-sm font-normal text-gray-400",children:"one-time"})]})}),e.jsx("ul",{className:"space-y-2 mb-6",children:["Unlimited document scans","Tampering & alteration detection","SHA-256 hash verification","Author & software fingerprinting","Downloadable forensic report"].map(a=>e.jsxs("li",{className:"flex items-start gap-2 text-base text-gray-300",children:[e.jsx(R,{className:"h-3.5 w-3.5 text-amber-400 shrink-0 mt-0.5"}),a]},a))}),e.jsxs(g,{onClick:()=>{const a=document.getElementById("scanner");a&&a.scrollIntoView({behavior:"smooth"})},className:"w-full bg-amber-500/15 text-amber-400 font-bold border border-amber-500/30 hover:bg-amber-500/25","data-testid":"button-buy-scanner",children:["Get Scanner — ",v.forensicScanner.price]})]}),e.jsxs("div",{className:"rounded-2xl bg-white/[0.03] border border-white/10 p-6 transition-all hover:border-emerald-500/30",children:[e.jsxs("div",{className:"flex items-center gap-2.5 mb-4",children:[e.jsx("div",{className:"rounded-lg bg-emerald-500/15 p-2",children:e.jsx(z,{className:"h-5 w-5 text-emerald-400"})}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-xl font-bold text-white","data-testid":"text-scrubber-title",children:"Metadata Scrubber"}),e.jsx("p",{className:"text-xs text-gray-400",children:"Standalone"})]})]}),e.jsx("div",{className:"rounded-lg bg-white/5 border border-white/10 p-3 mb-5",children:e.jsxs("p",{className:"text-2xl font-black text-white",children:[v.metadataScrubber.price," ",e.jsx("span",{className:"text-sm font-normal text-gray-400",children:"one-time"})]})}),e.jsx("ul",{className:"space-y-2 mb-6",children:["Unlimited metadata scrubbing","Strip EXIF, GPS, author data","PDF, DOCX, image support","Batch f
3ile processing","Privacy-safe file export"].map(a=>e.jsxs("li",{className:"flex items-start gap-2 text-base text-gray-300",children:[e.jsx(R,{className:"h-3.5 w-3.5 text-emerald-400 shrink-0 mt-0.5"}),a]},a))}),e.jsx(Y,{href:"/metadata-scrubber",children:e.jsxs(g,{className:"w-full bg-emerald-500/15 text-emerald-400 font-bold border border-emerald-500/30 hover:bg-emerald-500/25","data-testid":"button-buy-scrubber",children:["Get Scrubber — ",v.metadataScrubber.price]})})]}),e.jsxs("div",{className:"relative rounded-2xl bg-gradient-to-br from-violet-500/10 to-purple-500/10 border border-violet-500/30 p-6 transition-all hover:border-violet-500/50",children:[e.jsx("div",{className:"absolute -top-3 left-1/2 -translate-x-1/2",children:e.jsx(y,{className:"bg-gradient-to-r from-violet-500 to-purple-500 text-white font-bold border-0 px-3 py-1 text-xs",children:"SAVE $10"})}),e.jsxs("div",{className:"flex items-center gap-2.5 mb-4",children:[e.jsx("div",{className:"rounded-lg bg-violet-500/15 p-2",children:e.jsx(te,{className:"h-5 w-5 text-violet-400"})}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-xl font-bold text-white","data-testid":"text-bundle-title",children:"Scanner + Scrubber"}),e.jsx("p",{className:"text-xs text-violet-400",children:"Bundle Deal"})]})]}),e.jsxs("div",{className:"rounded-lg bg-white/5 border border-violet-500/20 p-3 mb-5",children:[e.jsxs("p",{className:"text-2xl font-black bg-gradient-to-r from-violet-400 to-purple-400 bg-clip-text text-transparent",children:[v.forensicBundle.price," ",e.jsx("span",{className:"text-sm font-normal text-gray-400",children:"one-time"})]}),e.jsxs("p",{className:"text-xs text-gray-400 mt-0.5",children:["vs ",v.forensicScanner.price," + ",v.metadataScrubber.price," separately"]})]}),e.jsx("ul",{className:"space-y-2 mb-6",children:["Everything in Scanner","Everything in Scrubber","Both tools, one purchase","Unlimited scans & scrubs","Court-ready forensic reports"].map(a=>e.jsxs("li",{className:"flex items-start gap-2 text-base text-gray-300",children:[e.jsx(R,{className:"h-3.5 w-3.5 text-violet-400 shrink-0 mt-0.5"}),a]},a))}),e.jsxs(g,{className:"w-full bg-gradient-to-r from-violet-500 to-purple-500 text-white font-bold hover:shadow-[0_0_20px_rgba(139,92,246,0.3)]","data-testid":"button-buy-bundle",children:["Get Bundle — ",v.forensicBundle.price]})]}),e.jsxs("div",{className:"relative rounded-2xl bg-gradient-to-br from-amber-500/10 to-orange-500/10 border border-amber-500/30 p-6 transition-all hover:border-amber-500/50",children:[e.jsx("div",{className:"absolute -top-3 left-1/2 -translate-x-1/2",children:e.jsxs(y,{className:"bg-gradient-to-r from-amber-500 to-orange-500 text-black font-bold border-0 px-3 py-1 text-xs",children:[e.jsx(ce,{className:"h-3 w-3 mr-1"}),"BEST VALUE"]})}),e.jsxs("div",{className:"flex items-center gap-2.5 mb-4",children:[e.jsx("div",{className:"rounded-lg bg-amber-500/15 p-2",children:e.jsx(se,{className:"h-5 w-5 text-amber-400"})}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-xl font-bold text-white","data-testid":"text-pro-included-title",children:"SafeRestore Forensic"}),e.jsx("p",{className:"text-xs text-amber-400",children:"All tools included"})]})]}),e.jsxs("div",{className:"rounded-lg bg-white/5 border border-amber-500/20 p-3 mb-5",children:[e.jsxs("p",{className:"text-2xl font-black text-white",children:["Included ",e.jsx("span",{className:"text-sm font-normal text-gray-400",children:"with Pro"})]}),e.jsxs("p",{className:"text-xs text-gray-400 mt-0.5",children:["From ",v.desktop.pro.price,"/device"]})]}),e.jsx("ul",{className:"space-y-2 mb-6",children:["Scanner + Scrubber included","Court-ready formatted reports","Chain of custody documentation","Full metadata extraction","Priority support for legal cases"].map(a=>e.jsxs("li",{className:"flex items-start gap-2 text-base text-gray-300",children:[e.jsx(R,{className:"h-3.5 w-3.5 text-amber-400 shrink-0 mt-0.5"}),a]},a))}),e.jsx(Y,{href:"/legal",children:e.jsxs(g,{className:"w-full bg-gradient-to-r from-amber-500 to-orange-500 text-black font-bold","data-testid":"button-get-pro",children:["Free Download",e.jsx(re,{className:"h-4 w-4 ml-2"})]})})]})]}),e.jsx("div",{className:"max-w-3xl mx-auto text-center",children:e.jsxs("p",{className:"text-sm text-gray-400",children:["Need unlimited scans with a subscription?"," ",e.jsx(Y,{href:"/pricing#forensic-scanner",className:"text-amber-400 hover:text-amber-300 transition-colors",children:"View Forensic Toolkit plans"})," ","starting at ",v.forensicToolkit.monthly.price,"/mo."]})})]}
3),e.jsxs("section",{className:"max-w-3xl mx-auto space-y-8",children:[e.jsx("div",{className:"text-center",children:e.jsxs("h2",{className:"text-3xl md:text-5xl font-black text-white mb-4",children:["Frequently Asked"," ",e.jsx("span",{className:"bg-gradient-to-r from-amber-400 to-orange-400 bg-clip-text text-transparent",children:"Questions"})]})}),e.jsx("div",{className:"space-y-3",children:Pe.map((a,o)=>e.jsxs("div",{className:"rounded-xl border border-white/10 bg-white/[0.02] overflow-hidden",children:[e.jsxs("button",{onClick:()=>h(S===o?null:o),className:"w-full flex items-center justify-between gap-4 p-4 sm:p-5 text-left","data-testid":`button-faq-${o}`,children:[e.jsx("span",{className:"text-base font-semibold text-white",children:a.q}),e.jsx(Ne,{className:`h-5 w-5 text-gray-200 shrink-0 transition-transform ${S===o?"rotate-180":""}`})]}),S===o&&e.jsx("div",{className:"px-5 pb-5",children:e.jsx("p",{className:"text-base text-gray-200 leading-relaxed","data-testid":`text-faq-answer-${o}`,children:a.a})})]},o))})]}),e.jsxs("section",{className:"text-center max-w-2xl mx-auto pb-8",children:[e.jsx(se,{className:"h-10 w-10 text-amber-400 mx-auto mb-6"}),e.jsxs("h2",{className:"text-3xl md:text-5xl font-black text-white mb-4",children:["Ready to verify a"," ",e.jsx("span",{className:"bg-gradient-to-r from-amber-400 to-orange-400 bg-clip-text text-transparent",children:"document"}),"?"]}),e.jsx("p",{className:"text-lg text-gray-200 mb-8",children:"Upload any PDF, image, or Word document and get instant forensic analysis \\u2014 100% in your browser."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-4",children:[e.jsxs(g,{onClick:async()=>{const a=prompt("Enter your email to proceed to checkout:");if(a)try{const{getAttributionForCheckout:o}=await G(async()=>{const{getAttributionForCheckout:V}=await import("./index-Dl_m57S2.js").then(me=>me.Z);return{getAttributionForCheckout:V}},__vite__mapDeps([0,1,2,3,4])),A=await(await fetch("/api/forensic-tools/create-checkout",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:a,plan:"monthly",source:"/forensic-scanner",...o()})})).json();A.url&&le(A.url)}catch(o){console.error("Checkout failed:",o)}},className:"bg-gradient-to-r from-amber-500 to-orange-500 text-black font-bold px-8 py-6 text-lg","data-testid":"button-final-purchase-scanner",children:["Buy Forensic Scanner — ",v.forensicScanner.price,e.jsx(re,{className:"h-5 w-5 ml-2"})]}),e.jsxs(g,{onClick:()=>P.current?.scrollIntoView({behavior:"smooth"}),variant:"outline",className:"border-white/20 text-white px-8 py-6 text-lg","data-testid":"button-scan-document-cta",children:[e.jsx(I,{className:"h-5 w-5 mr-2"}),"Try Free Scan First"]})]})]})]})]})}export{Fe as ForensicScannerUnlockUpsell,ot as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.