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

  1. Consult

    Define scope and budget.

  2. Collect

    Open-source, public-record, and field collection.

  3. Corroborate

    Each finding marked confirmed, corroborated, or uncertain.

  4. Preserve

    Hash, timestamp, and log captures.

  5. 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.

Name

Firm or organization (optional)

Email

Phone (optional)

You are

Choose one
Counsel
Family office or private client
Investor, board, or company
Other

Type of matter

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

How did you find Beale? (optional)

What do you need to know?


Sending this form does not create an engagement.

Fraud, No. 01

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, No. 02

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

Locate, No. 03

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

Due diligence, No. 04

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

Field, No. 05

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’;
});
});
})();