Beale Investigations | Private intelligence for counsel and private clients
:root{
–ink:#000000;
–ivory:#E7DED2;
–stone:#A89E90;
–brass:#B9975B;
–field:#15140F;
–rule:#2B2822;
–display:”Libre Caslon Display”,”Big Caslon”,”Book Antiqua”,Georgia,serif;
–text:”Libre Caslon Text”,”Big Caslon”,Georgia,”Times New Roman”,serif;
box-sizing:border-box;
padding-top:env(safe-area-inset-top,0px);
padding-bottom:env(safe-area-inset-bottom,0px);
}
*,*::before,*::after{box-sizing:inherit}
html{scroll-behavior:smooth;scroll-padding-top:calc(env(safe-area-inset-top,0px) + 104px);background:var(–ink)}
body{margin:0;background:var(–ink);color:var(–ivory);font-family:var(–text);font-size:18px;line-height:1.75;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;font-variant-numeric:oldstyle-nums}
img{max-width:100%;display:block}
a{color:var(–ivory)}
a:hover{color:var(–brass)}
:focus-visible{outline:2px solid var(–brass);outline-offset:4px}
.skip{position:absolute;left:-9999px;top:0;background:var(–ivory);color:var(–ink);padding:12px 18px;z-index:20}
.skip:focus{left:16px;top:16px}
.wrap{width:100%;max-width:1180px;margin:0 auto;padding:0 32px}
/* header */
.site-head{position:sticky;top:0;z-index:10;background:rgba(0,0,0,.92);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);border-bottom:1px solid var(–rule);padding-top:env(safe-area-inset-top,0px)}
.site-head .wrap{display:flex;align-items:center;justify-content:space-between;gap:24px;min-height:92px}
.site-head .mark img{height:52px;width:auto}
.site-head nav{display:flex;align-items:center;gap:30px;font-size:16px}
.site-head nav a{text-decoration:none;color:var(–stone);padding:10px 0}
.site-head nav a:hover{color:var(–ivory)}
.site-head nav .tel{color:var(–ivory);border:1px solid var(–brass);padding:10px 18px}
.site-head nav .tel:hover{background:var(–brass);color:var(–ink)}
/* hero */
.hero{padding:96px 0 120px;border-bottom:1px solid var(–rule)}
.cipher{display:flex;flex-wrap:wrap;gap:18px 34px;margin:0 0 22px;padding:0}
.word{display:flex;gap:0}
.c{display:inline-grid;justify-items:center;line-height:1;font-size:clamp(34px,5.2vw,68px);width:.66em}
.c>span{grid-area:1/1}
.c .num{font-family:var(–text);font-size:.3em;color:var(–brass);transition:opacity .5s ease,transform .5s ease;align-self:center}
.c .ltr{font-family:var(–display);font-size:1em;color:var(–ivory);opacity:0;transform:translateY(8px);transition:opacity .6s ease,transform .6s ease}
.c .idx{grid-area:2/1;font-size:11px;color:var(–stone);opacity:0;margin-top:8px;transition:opacity .6s ease}
.c.done .num{opacity:0;transform:translateY(-10px)}
.c.done .ltr{opacity:1;transform:none}
.c.done .idx{opacity:1}
.cipher-note{max-width:62ch;font-size:15px;line-height:1.6;color:var(–stone);font-style:italic;margin:0 0 88px}
.hero h1{font-family:var(–display);font-weight:400;font-size:clamp(40px,5.6vw,78px);line-height:1.04;letter-spacing:-.01em;max-width:16ch;margin:0 0 32px}
.hero .lead{font-size:clamp(19px,1.7vw,22px);max-width:56ch;margin:0 0 44px;color:var(–ivory)}
.actions{display:flex;flex-wrap:wrap;gap:16px 28px;align-items:center}
.btn{display:inline-flex;align-items:center;justify-content:center;min-height:52px;padding:0 30px;background:var(–ivory);color:var(–ink);text-decoration:none;font-family:var(–text);font-size:17px;border:1px solid var(–ivory);cursor:pointer}
.btn:hover{background:var(–brass);border-color:var(–brass);color:var(–ink)}
.actions .alt{color:var(–stone);text-decoration:none;font-size:17px}
.actions .alt strong{color:var(–ivory);font-weight:400}
.credential{margin-top:72px;padding-top:24px;border-top:1px solid var(–rule);display:flex;flex-wrap:wrap;gap:12px 48px;font-size:15px;color:var(–stone)}
/* sections */
section{padding:120px 0}
.sec-head{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:48px;align-items:end;margin-bottom:72px}
h2{font-family:var(–display);font-weight:400;font-size:clamp(34px,4vw,56px);line-height:1.08;margin:0}
.sec-head p{margin:0;color:var(–stone);max-width:52ch}
/* clients */
.clients{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:56px}
.clients h3{font-family:var(–display);font-weight:400;font-size:28px;line-height:1.2;margin:0 0 16px;padding-top:22px;border-top:1px solid var(–brass)}
.clients p{margin:0;color:var(–stone)}
/* practice ledger */
.practice{background:#070706;border-top:1px solid var(–rule);border-bottom:1px solid var(–rule)}
.matter{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:48px;padding:56px 0;border-top:1px solid var(–rule)}
.matter:last-of-type{border-bottom:1px solid var(–rule)}
.matter h3{font-family:var(–display);font-weight:400;font-size:clamp(26px,2.6vw,36px);line-height:1.15;margin:0 0 14px}
.matter .by{margin:0;font-size:15px;color:var(–stone);font-style:italic}
.matter .body p{margin:0 0 20px;max-width:60ch}
.matter .yield{margin:0;padding-top:18px;border-top:1px solid var(–rule);color:var(–ivory);font-size:17px;max-width:60ch}
.matter .yield b{display:block;font-weight:400;font-style:italic;color:var(–brass);font-size:15px;margin-bottom:4px}
.consult-note{margin:56px 0 0;color:var(–stone);max-width:64ch}
.consult-note a{color:var(–ivory)}
/* method */
.steps{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:36px;counter-reset:step}
.steps li{counter-increment:step;padding-top:20px;border-top:1px solid var(–rule)}
.steps li::before{content:counter(step);display:block;font-family:var(–display);font-size:40px;color:var(–brass);line-height:1;margin-bottom:18px}
.steps h3{font-family:var(–display);font-weight:400;font-size:24px;margin:0 0 10px}
.steps p{margin:0;font-size:16px;line-height:1.65;color:var(–stone)}
/* discretion */
.discretion{padding:110px 0;border-top:1px solid var(–rule);border-bottom:1px solid var(–rule);text-align:center}
.discretion blockquote{margin:0 auto;max-width:24ch;font-family:var(–display);font-size:clamp(32px,4.4vw,60px);line-height:1.12}
.discretion p{margin:36px auto 0;max-width:58ch;color:var(–stone)}
/* about */
.about{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:48px}
.about p{margin:0 0 20px;max-width:62ch}
.about .sig{font-family:var(–display);font-size:30px;margin:28px 0 0}
.about .sig span{display:block;font-family:var(–text);font-size:15px;color:var(–stone);font-style:italic}
/* contact */
.contact{background:#070706;border-top:1px solid var(–rule)}
.contact-grid{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:64px}
.keyhole{width:88px;height:auto;margin-bottom:36px}
.contact h2{margin-bottom:24px}
.contact .intro p{color:var(–stone);margin:0 0 20px;max-width:44ch}
.direct{margin-top:40px;font-size:17px;line-height:2}
.direct a{text-decoration:none}
form{display:grid;grid-template-columns:1fr 1fr;gap:24px}
.f{display:flex;flex-direction:column;gap:8px}
.f.full{grid-column:1/-1}
label{font-size:15px;color:var(–stone)}
input,select,textarea{font:inherit;font-size:17px;color:var(–ivory);background:var(–field);border:1px solid var(–rule);border-radius:0;padding:14px 16px;min-height:52px;width:100%}
select{appearance:none;-webkit-appearance:none;background-image:url(“data:image/svg+xml,%3Csvg xmlns=’http://www.w3.org/2000/svg’ width=’12’ height=’8′ viewBox=’0 0 12 8’%3E%3Cpath d=’M1 1l5 5 5-5′ fill=’none’ stroke=’%23B9975B’ stroke-width=’1.5’/%3E%3C/svg%3E”);background-repeat:no-repeat;background-position:right 16px center;padding-right:44px}
textarea{min-height:170px;resize:vertical;line-height:1.6}
input:focus,select:focus,textarea:focus{border-color:var(–brass);outline:none}
input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(–brass);outline-offset:2px}
.hp{position:absolute;left:-9999px}
.form-foot{grid-column:1/-1;display:flex;flex-wrap:wrap;align-items:center;gap:20px 32px}
.form-foot small{font-size:14px;color:var(–stone);max-width:44ch;line-height:1.55}
.status{grid-column:1/-1;margin:0;min-height:1.6em;font-size:17px}
.status.ok{color:var(–ivory)}
.status.err{color:#E3A27E}
/* footer */
footer{padding:64px 0 56px;border-top:1px solid var(–rule);font-size:15px;color:var(–stone)}
footer .wrap{display:flex;flex-wrap:wrap;justify-content:space-between;gap:32px;align-items:flex-end}
footer img{height:30px;width:auto;margin-bottom:18px}
footer p{margin:0;line-height:1.7}
@media (max-width:960px){
.sec-head,.matter,.about,.contact-grid{grid-template-columns:1fr;gap:24px}
.clients{grid-template-columns:1fr;gap:40px}
.steps{grid-template-columns:1fr 1fr}
section{padding:88px 0}
}
@media (max-width:640px){
.wrap{padding:0 22px}
.site-head nav a:not(.tel){display:none}
.site-head .mark img{height:38px}
.hero{padding:64px 0 88px}
.cipher{gap:14px 22px}
.cipher-note{margin-bottom:56px}
.steps{grid-template-columns:1fr}
form{grid-template-columns:1fr}
}
@media (prefers-reduced-motion:reduce){
html{scroll-behavior:auto}
.c .num,.c .ltr,.c .idx{transition:none}
}
h2.solo{margin-bottom:56px}
.hero{padding:140px 0 150px}
.hero h1{max-width:18ch}
.hero .lead{margin-bottom:48px}
.matter{grid-template-columns:minmax(0,5fr) minmax(0,7fr);padding:40px 0;align-items:baseline}
.matter h3{margin:0}
.matter .body p{margin:0 0 14px}
.matter .yield{padding-top:0;border-top:0}
.steps p{font-size:16px}
.terms{margin:56px 0 0;color:var(–stone);max-width:70ch}
.about-sec{border-top:1px solid var(–rule);position:relative;z-index:0}
.about-sec .cipher{margin-bottom:14px}
.about-sec .cipher-note{margin-bottom:72px;font-style:italic}
.about h3{font-family:var(–display);font-weight:400;font-size:28px;margin:0 0 16px;padding-top:22px;border-top:1px solid var(–brass)}
.about{grid-template-columns:1fr 1fr;gap:64px}
@media (max-width:960px){.about{grid-template-columns:1fr;gap:48px}}
@media (max-width:640px){.hero{padding:80px 0 96px}}
.hero{position:relative;overflow:hidden}
.hero .wrap{position:relative;z-index:1}
.compass{position:absolute;right:-140px;top:44%;width:720px;height:720px;transform:translate(0,-50%);opacity:.2;animation:spin 240s linear infinite;pointer-events:none;z-index:0}
@keyframes spin{from{transform:translate(0,-50%) rotate(0)}to{transform:translate(0,-50%) rotate(360deg)}}
.accepts{margin:40px 0 0;font-size:15px;color:var(–stone);max-width:52ch}
.c1{position:absolute;left:0;right:0;bottom:28px;overflow:hidden;white-space:nowrap;font-size:14px;letter-spacing:.18em;color:var(–brass);opacity:.45;-webkit-mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent);mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent)}
.c1 span{display:inline-block;animation:drift 160s linear infinite}
@keyframes drift{from{transform:translateX(0)}to{transform:translateX(-50%)}}
.notice{border-bottom:1px solid var(–rule);padding:26px 0}
.notice p{margin:0;font-size:16px;color:var(–stone);max-width:90ch}
.notice b{font-weight:400;color:var(–ivory);font-style:italic}
.steps li::before{content:counter(step,upper-roman)}
footer .named{font-style:italic;margin-top:6px}
@media (max-width:960px){.compass{width:520px;height:520px;right:-220px;opacity:.14}}
@media (max-width:640px){.c1{bottom:16px;font-size:12px}}
@media (prefers-reduced-motion:reduce){.compass,.c1 span{animation:none}}
.about-name{max-width:68ch;margin-bottom:0}
.about-name h3,.principal h3{font-family:var(–display);font-weight:400;font-size:28px;margin:0 0 16px;padding-top:22px;border-top:1px solid var(–brass)}
.about-name p{margin:0 0 20px}
.spirit{margin:24px 0 0;font-family:var(–display);font-size:clamp(20px,1.9vw,24px);line-height:1.5;color:var(–ivory);max-width:46ch}
.principal{margin-bottom:120px;display:grid;grid-template-columns:minmax(0,4fr) minmax(0,7fr);gap:64px;align-items:start}
.principal figure{margin:0;position:relative}
.principal figure::after{content:””;position:absolute;inset:14px -14px -14px 14px;border:1px solid var(–brass);opacity:.5;z-index:-1}
.principal img{width:100%;height:auto;filter:contrast(1.05) brightness(.92)}
.principal h3 span{display:block;font-family:var(–text);font-size:15px;font-style:italic;color:var(–stone);margin-top:6px}
.principal p{margin:0 0 18px;max-width:62ch}
.principal .lic{font-size:15px;font-style:italic;color:var(–stone);margin-bottom:6px}
.principal .li a{color:var(–brass)}
.principal .li a:hover{color:var(–ivory)}
@media (max-width:960px){.principal{grid-template-columns:1fr;gap:40px}.principal figure{max-width:360px}}
.desk{position:relative;min-height:560px;margin-top:8px}
.folder{position:absolute;left:var(–x);top:var(–y);width:min(340px,30%);min-height:200px;transform:rotate(var(–r));text-align:left;font:inherit;color:var(–ivory);background:#14130F;border:1px solid #2E2A23;border-radius:0 4px 4px 4px;padding:30px 26px 26px;cursor:pointer;box-shadow:0 18px 40px rgba(0,0,0,.6);transition:transform .3s ease,box-shadow .3s ease,border-color .3s ease;display:flex;flex-direction:column;gap:10px}
.folder:hover,.folder:focus-visible{transform:rotate(0deg) translateY(-8px);border-color:var(–brass);box-shadow:0 28px 60px rgba(0,0,0,.75);z-index:3}
.folder .tab{position:absolute;top:-17px;left:-1px;width:104px;height:17px;background:#14130F;border:1px solid #2E2A23;border-bottom:0;border-top:1px solid var(–brass);border-radius:4px 4px 0 0}
.folder .clip{position:absolute;top:-10px;right:26px;width:14px;height:30px;color:var(–brass)}
.folder .flabel{font-size:14px;font-style:italic;color:var(–stone)}
.folder .ftitle{font-family:var(–display);font-size:26px;line-height:1.15;max-width:15ch}
.folder .fnum{position:absolute;right:20px;bottom:12px;font-family:var(–display);font-size:56px;line-height:1;color:var(–brass);opacity:.18}
.dossier{border:0;padding:0;background:transparent;max-width:min(820px,calc(100vw – 32px));width:100%;max-height:calc(100vh – 48px);overflow:auto;color:#1C1A15}
.dossier::backdrop{background:rgba(0,0,0,.78);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
.dossier[open]{animation:pull .35s ease}
@keyframes pull{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:none}}
.d-folder{background:#14130F;border:1px solid #2E2A23;border-radius:0 6px 6px 6px;padding:0 0 14px;margin-top:26px;position:relative}
.d-tab{position:absolute;top:-26px;left:-1px;height:26px;padding:0 18px;display:flex;align-items:center;background:#14130F;border:1px solid #2E2A23;border-bottom:0;border-top:1px solid var(–brass);border-radius:6px 6px 0 0;font-size:13px;font-style:italic;color:var(–stone)}
.d-peek{position:relative;height:18px;margin:0 16px}
.d-peek span{position:absolute;left:0;right:0;height:16px;background:#E2D8C8;border-radius:2px 2px 0 0}
.d-peek span:nth-child(1){top:4px;left:8px;right:10px;transform:rotate(-1.1deg);background:#D9CEBC}
.d-peek span:nth-child(2){top:7px;left:3px;right:5px;transform:rotate(.6deg);background:#DED3C2}
.d-peek span:nth-child(3){top:10px}
.d-paper{position:relative;margin:0 14px;background:#EEE6D8;padding:44px 48px 40px 76px;background-image:repeating-linear-gradient(transparent 0 31px,rgba(28,26,21,.07) 31px 32px);background-position:0 120px}
.d-paper::before{content:””;position:absolute;left:52px;top:0;bottom:0;width:1px;background:var(–brass);opacity:.55}
.d-close{position:absolute;top:14px;right:16px;font:inherit;font-size:15px;color:#5A5246;background:none;border:0;cursor:pointer;min-height:44px;padding:0 10px}
.d-close:hover{color:#1C1A15}
.d-close:focus-visible{outline:2px solid var(–brass)}
.d-label{margin:0 0 6px;font-size:14px;font-style:italic;color:#7A6A4E}
.dossier h3{font-family:var(–display);font-weight:400;font-size:clamp(28px,3.4vw,40px);line-height:1.1;margin:0 0 24px;padding-bottom:18px;border-bottom:1px solid rgba(28,26,21,.18)}
.d-desc{margin:0 0 16px;font-size:18px;line-height:1.75;max-width:60ch}
.d-by{margin:0 0 26px;font-size:16px;color:#4A443A}
.d-by i{color:#7A6A4E;margin-right:6px}
.dossier ul{list-style:none;margin:0;padding:0;display:grid;gap:4px;font-size:17px;line-height:2}
.dossier li{padding-left:22px;position:relative}
.dossier li::before{content:””;position:absolute;left:0;top:1em;width:10px;height:1px;background:#8C7448}
@media (max-width:960px){
.desk{min-height:0;display:grid;grid-template-columns:1fr 1fr;gap:44px 24px;padding-top:20px}
.folder{position:relative;left:auto;top:auto;width:auto;transform:none}
}
@media (max-width:640px){
.desk{grid-template-columns:1fr}
.folder{min-height:150px}
.d-paper{padding:56px 22px 28px 40px}
.d-paper::before{left:24px}
}
@media (prefers-reduced-motion:reduce){.folder{transition:none}.dossier[open]{animation:none}}
.li-icon{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;margin-left:-10px;color:var(–brass);text-decoration:none}
.li-icon svg{width:24px;height:24px}
.li-icon:hover,.li-icon:focus-visible{color:var(–ivory)}
footer .li-icon{width:44px;height:44px;margin:-6px 0 -6px -10px}
footer .li-icon svg{width:20px;height:20px}
Private investigations for law firms and private clients.
Fraud tracing, locates, due diligence, and surveillance. Licensed in Virginia.
Inquiries accepted from law firms, corporate counsel, family offices, and qualified private clients.
NESW
Notice of confidentiality. Beale Investigations does not disclose client identity, matter details, or work product to any third party without written authorization.
Clients
Litigation counsel
Fraud, digital-asset theft, defamation, and asset recovery.
Family offices and private clients
Extortion, smear campaigns, and counterparty vetting.
Investors and boards
Due diligence on people, partners, and companies.
Services
Process
-
Consult
Define scope and budget.
-
Collect
Open-source, public-record, and field collection.
-
Corroborate
Each finding marked confirmed, corroborated, or uncertain.
-
Preserve
Hash, timestamp, and log captures.
-
Deliver
Written report. Available to testify.
About
Laura C. SmithPrincipal Investigator
Laura is Research Director of Khthon, a nonprofit that identifies mass graves and documents war crimes in more than 30 countries. She leads its analytical operations, combining open-source, satellite, and human intelligence into findings that meet strict verification standards.
She is also founder and CEO of Kairos Forensics, which builds cryptographic software for evidence integrity and chain of custody.
Her earlier work spans government security contracting and the technology startup sector. She holds a B.S. in Intelligence Analysis from James Madison University.
Virginia DCJS private investigator license no. 99-1009646
Beale Cipher No. 2, describing where the treasure was buried.
The Beale Papers, published in Lynchburg in 1885, contain three ciphers said to locate gold, silver, and jewels buried in Bedford County, Virginia, in the 1820s. One was decoded using the Declaration of Independence. Two remain unsolved.
For more than a century, the ciphers have drawn a particular kind of person: two brothers who gave decades to them, codebreakers who fed them into some of the first computers, and hunters who crossed Bedford County with survey maps and land deeds, testing every theory against a hillside, a creek bed, or a property line. They exhausted the record, proved what they could on the ground, and stayed with it long after the trail went cold. Beale Investigations brings that same discipline to every case.
Open a case
Do not include privileged details. Laura will reply directly.
Choose one
Counsel
Family office or private client
Investor, board, or company
Other
Choose one
Fraud or digital-asset theft
Extortion or smear campaign
Locate or skip trace
Background or due diligence
Surveillance or process service
Strategy consultation
Something else
Sending this form does not create an engagement.
Fraud and digital-asset theft
Tracing fraud sites to their hosting, registrars, shared kits, and cash-out points.
Retained by Class-action and asset-recovery counsel, and victims through their counsel.
- Domain, hosting, and registrar research
- Shared-kit and backend vendor matching
- Brand-squatting network mapping
- Cash-out and payment chokepoint identification
- Captures preserved with hashes and a custody log
Extortion and smear campaigns
Identifying anonymous operators through their sites, hosting, takedown history, and payment processors.
Retained by Defamation and privacy counsel, and the individuals they represent.
- Content-farm and pseudo-news site mapping
- Registrar and CDN routing analysis
- DMCA and counter-notice history
- Payment processor identification
- Subpoena targets listed for counsel
Locates and skip tracing
Finding defendants, witnesses, and corporate officers who have moved or are avoiding service.
Retained by Litigators, recovery counsel, and corporate legal teams.
- Current address and location development
- Employment and business affiliations
- Associates and known contacts
- Identity verification
- Locate report for service and enforcement
Background and due diligence
Litigation history, business affiliations, assets, and beneficial ownership, checked before a deal, hire, or lawsuit.
Retained by Investors, family offices, boards, and their counsel.
- Civil, criminal, and regulatory records
- Business ownership and corporate affiliations
- Litigation history, judgments, and liens
- Beneficial ownership tracing
- Vendor, partner, and executive vetting
Surveillance and process service
Physical corroboration of digital findings, and service on subjects who are difficult to reach.
Retained by Law firms and private clients through counsel.
- Pattern-of-life observation
- Site and address verification
- Discreet subject tracking
- Diligent service of subpoenas and summonses
- Affidavits of service
(function(){
// Beale Cipher No. 2: “an excavation or vault six feet below the surface of the ground”
var words=[
[[28,’a’],[353,’n’]],
[[37,’e’],[1005,’x’],[65,’c’],[147,’a’],[807,’v’],[24,’a’],[3,’t’],[8,’i’],[12,’o’],[47,’n’]],
[[43,’o’],[59,’r’]],
[[807,’v’],[45,’a’],[316,’u’],[101,’l’],[41,’t’]],
[[78,’s’],[154,’i’],[1005,’x’]],
[[122,’f’],[138,’e’],[191,’e’],[16,’t’]],
[[77,’b’],[49,’e’],[102,’l’],[57,’o’],[72,’w’]],
[[34,’t’],[73,’h’],[85,’e’]],
[[35,’s’],[371,’u’],[59,’r’],[196,’f’],[81,’a’],[92,’c’],[191,’e’]],
[[106,’o’],[273,’f’]],
[[60,’t’],[394,’h’],[620,’e’]],
[[270,’g’],[220,’r’],[106,’o’],[388,’u’],[287,’n’],[63,’d’]]
];
var box=document.getElementById(‘cipher’), cells=[];
words.forEach(function(w){
var g=document.createElement(‘span’); g.className=’word’; g.setAttribute(‘aria-hidden’,’true’);
w.forEach(function(p){
var c=document.createElement(‘span’); c.className=’c’;
var n=document.createElement(‘span’); n.className=’num’; n.textContent=p[0];
var l=document.createElement(‘span’); l.className=’ltr’; l.textContent=p[1];
var i=document.createElement(‘span’); i.className=’idx’; i.textContent=p[0];
c.appendChild(n); c.appendChild(l); c.appendChild(i); g.appendChild(c); cells.push(c);
});
box.appendChild(g);
});
var reduce=window.matchMedia&&window.matchMedia(‘(prefers-reduced-motion: reduce)’).matches;
function play(){cells.forEach(function(c,k){setTimeout(function(){c.classList.add(‘done’)},200+k*85)});}
if(reduce||!(‘IntersectionObserver’ in window)){cells.forEach(function(c){c.classList.add(‘done’)});}
else{var io=new IntersectionObserver(function(es){if(es[0].isIntersecting){play();io.disconnect();}},{threshold:.5});io.observe(box);}
// Case files: open the matching dossier; click outside the paper to close
document.querySelectorAll(‘.folder’).forEach(function(f){
f.addEventListener(‘click’,function(){var d=document.getElementById(f.dataset.open);if(d.showModal)d.showModal();else d.setAttribute(‘open’,”);});
});
document.querySelectorAll(‘.dossier’).forEach(function(d){
d.addEventListener(‘click’,function(e){if(e.target===d)d.close();});
});
// Contact form: sends through FormSubmit to laura@bealeinvestigations.com
var form=document.getElementById(‘inquiry’), status=document.getElementById(‘status’), send=document.getElementById(‘send’);
form.addEventListener(‘submit’,function(e){
e.preventDefault();
status.className=’status’; status.textContent=”;
if(!form.checkValidity()){
var bad=form.querySelector(‘:invalid’); bad.focus();
status.className=’status err’;
status.textContent=’Fill in your name, a valid email, both selections, and a short description, then send again.’;
return;
}
if(form._honey.value){return;}
var data={}; new FormData(form).forEach(function(v,k){data[k]=v;});
send.disabled=true; send.textContent=’Sending\u2026′;
fetch(‘https://formsubmit.co/ajax/laura@bealeinvestigations.com’,{
method:’POST’,headers:{‘Content-Type’:’application/json’,’Accept’:’application/json’},body:JSON.stringify(data)
}).then(function(r){return r.json().then(function(j){if(!r.ok||String(j.success)!==’true’)throw 0;});})
.then(function(){
form.reset(); status.className=’status ok’;
status.textContent=’Inquiry sent. Laura will reply from laura@bealeinvestigations.com.’;
send.textContent=’Sent’;
}).catch(function(){
status.className=’status err’;
status.textContent=’The inquiry did not send. Email laura@bealeinvestigations.com or call (703) 801-4109.’;
send.disabled=false; send.textContent=’Send inquiry’;
});
});
})();