// Shared data across all variations
const SERVICES = [
  {
    id: "01",
    code: "PEN",
    title: "Penetration Testing",
    sub: "Network · Web · Mobile",
    body: "We find what your last vendor missed. Authenticated and unauthenticated assessments against the surfaces that actually matter — production web apps, internal networks, mobile clients, the APIs between them.",
    bullets: ["OWASP + beyond", "Chained exploit paths", "Reproducible PoCs"],
  },
  {
    id: "02",
    code: "RED",
    title: "Red Team & Adversary Emulation",
    sub: "Objective-based · Assumed-breach · Full-scope",
    body: "Threat-led engagements modeled on specific adversaries in your threat landscape. We emulate — we don't cosplay. Every TTP maps to ATT&CK and ends with detection-engineering handoff.",
    bullets: ["MITRE ATT&CK mapped", "Purple-team debrief", "Detection gap analysis"],
  },
  {
    id: "03",
    code: "SOC",
    title: "Social Engineering & Phishing",
    sub: "Pretext · Vishing · Physical",
    body: "Campaign-grade phishing, spear-phish against exec targets, vishing, and on-site physical pretexting — executed by operators who've done it a hundred times.",
    bullets: ["Custom pretexts", "Exec-targeted", "Training handback"],
  },
  {
    id: "04",
    code: "CLD",
    title: "Cloud Security Assessment",
    sub: "AWS · GCP · Azure",
    body: "We read your IAM like a book and don't like the ending. Configuration, identity, privilege-escalation paths, and post-exploitation lateral movement across multi-account estates.",
    bullets: ["IAM path analysis", "Control-plane attacks", "Terraform review"],
  },
  {
    id: "05",
    code: "APP",
    title: "Application Security & Code Review",
    sub: "SAST · Manual · Threat modeling",
    body: "Source-assisted reviews by people who can actually read your stack. We threat-model with your engineers, then hunt the bugs that scanners will never catch.",
    bullets: ["Source-assisted", "Design-level review", "Dev-team debriefs"],
  },
  {
    id: "06",
    code: "0DAY",
    title: "Vulnerability Research",
    sub: "Private disclosure · N-day · Novel classes",
    body: "Dedicated research engagements against vendors, products, and protocols you depend on. Bug classes discovered here are disclosed responsibly — sometimes to you, sometimes to CVE.",
    bullets: ["Coordinated disclosure", "CVE assignment", "Advisory authoring"],
  },
];

const STATS = [
  { n: "11", l: "years operating" },
  { n: "147", l: "engagements delivered" },
  { n: "38", l: "CVEs published" },
  { n: "0", l: "breaches post-remediation" },
];

// Blog posts. Body content lives in blog/<slug>/blog_post.md and is rendered
// at runtime by components/article.jsx; images resolve against blog/<slug>/.
const WRITING = [
  {
    date: "2026.05.20",
    tag: "FIELD REPORT",
    title: "A five-second keyboard trick at a self-order kiosk leaked internal RDP credentials",
    read: "6 min",
    author: "Crime of Curiosity Operators",
    slug: "kiosk-rdp",
    href: "Article.html?p=kiosk-rdp",
    excerpt: "Standing in front of a production self-order kiosk with no credentials, we broke out of the locked ordering shell with a keyboard shortcut, added an internal back-office app, and read a shared service account's plaintext RDP password off the screen.",
  },
  {
    date: "2026.04.08",
    tag: "FIELD REPORT",
    title: "One seasonal password: from a public webmail page to internal network access",
    read: "8 min",
    author: "Crime of Curiosity Operators",
    slug: "owa-spray",
    href: "Article.html?p=owa-spray",
    excerpt: "An Outlook Web Access portal on the perimeter let us enumerate the AD domain off the login page and spray a single seasonal password. One employee's account unlocked their mailbox, a Citrix desktop, and a payroll portal with bank details.",
  },
  {
    date: "2026.02.26",
    tag: "FIELD REPORT",
    title: "From a Skype contact request to payroll data: spraying a federated Lync deployment",
    read: "8 min",
    author: "Crime of Curiosity Operators",
    slug: "skype-spray",
    href: "Article.html?p=skype-spray",
    excerpt: "Skype for Business ran with open federation, letting any outside org enumerate staff by email. We confirmed valid accounts, sprayed a seasonal password against Lync, and rode ADFS single sign-on into a mailbox, HR portal, and W-2.",
  },
  {
    date: "2026.01.15",
    tag: "FIELD REPORT",
    title: "A test credential in a public GitHub repo exposed hundreds of mortgage borrowers' loan files",
    read: "4 min",
    author: "Crime of Curiosity Operators",
    slug: "github-leak",
    href: "Article.html?p=github-leak",
    excerpt: "One GitHub search undid a mortgage-tech company's production environment. A test script in a public repo hardcoded credentials that worked in QA, replica, and prod — opening loan files with SSNs, credit scores, and bank details.",
  },
  {
    date: "2025.11.12",
    tag: "FIELD REPORT",
    title: "One public Google Group: leaked credentials, hijacked social accounts, and a company's bank records",
    read: "7 min",
    author: "Crime of Curiosity Operators",
    slug: "google-groups",
    href: "Article.html?p=google-groups",
    excerpt: "A single misconfigured Google Groups setting turned a company's internal email into a public, searchable archive. In one afternoon: plaintext credentials, social-account takeover, and the company's bank statements and tax filings.",
  },
];

const TEAM = [
  { handle: "@echelon", role: "Principal · Red Team", years: "14y", loc: "BER" },
  { handle: "@volt", role: "Lead · Vuln Research", years: "11y", loc: "NYC" },
  { handle: "@sable", role: "Principal · AppSec", years: "12y", loc: "LDN" },
  { handle: "@atrium", role: "Senior · Cloud", years: "8y", loc: "SFO" },
  { handle: "@null_", role: "Senior · SocEng", years: "9y", loc: "AMS" },
  { handle: "@paperclip", role: "Research Associate", years: "5y", loc: "TOR" },
];

const MANIFESTO_LINES = [
  "We explore...",
  "...and you call us criminals.",
  "We seek after knowledge...",
  "...and you call us criminals.",
  "My crime is that of curiosity.",
];

// Real logo files — keyed by display name
const LOGO_FILES = {
  "Home Depot": "assets/logos/home-depot.svg",
  "AARP": "assets/logos/aarp.svg",
  "Chegg": "assets/logos/chegg.svg",
  "CrowdStrike": "assets/logos/crowdstrike.svg",
  "Discover": "assets/logos/discover.svg",
  "Domino's": "assets/logos/dominos.svg",
  "eBay": "assets/logos/ebay.svg",
  "Fannie Mae": "assets/logos/fannie-mae.png",
  "HCSC": "assets/logos/hcsc.svg",
  "Johnson & Johnson": "assets/logos/johnson-johnson.svg",
  "JPMorgan": "assets/logos/jp-morgan.svg",
  "Nuveen": "assets/logos/nuveen.png",
  "TIAA": "assets/logos/tiaa.svg",
  "Pivotal": "assets/logos/pivotal.svg",
  "Chase Bank": "assets/logos/chase-bank.svg",
  "Sony": "assets/logos/sony.svg",
  "ClientWorks": "assets/logos/clientworks.svg",
  "Cofinity-X": "assets/logos/cofinity-x.svg",
  "Modo Labs": "assets/logos/modo-labs.png",
  "Khan Academy": "assets/logos/khan-academy.svg",
  "Flexport": "assets/logos/flexport.svg",
  "Framer": "assets/logos/framer.svg",
  "Talend": "assets/logos/talend.svg",
  "Barracuda": "assets/logos/barracuda.svg",
  "Auth0": "assets/logos/auth0.svg",
  "BAE Systems": "assets/logos/bae-systems.svg",
  "General Dynamics GDIT": "assets/logos/gdit.png",

  "Office of the Secretary": "assets/logos/office-of-the-secretary.svg",
  "State of Missouri": "assets/logos/state-of-missouri.svg",
  "Texas Office of Attorney General": "assets/logos/texas-oag.svg",
  "US Department of Defense": "assets/logos/us-dod.svg",
  "US Air Force": "assets/logos/us-air-force.svg",
  "Agency for Healthcare Research and Quality": "assets/logos/ahrq.png",
  "National Telecommunications and Information Administration": "assets/logos/ntia.svg",
  "United States Courts": "assets/logos/us-courts.svg",
};

// Monogram fallback for any client without a logo file
const MONOGRAM_OVERRIDES = {
  "Home Depot": "HD",
  "AARP": "AARP",
  "Chegg": "CH",
  "CrowdStrike": "CS",
  "Discover": "D",
  "Domino's": "D",
  "eBay": "eb",
  "Fannie Mae": "FM",
  "HCSC": "HCSC",
  "Johnson & Johnson": "J&J",
  "JPMorgan": "JPM",
  "Nuveen": "N",
  "TIAA": "TIAA",
  "Pivotal": "P",
  "Chase Bank": "C",
  "Sony": "S",
  "ClientWorks": "CW",
  "Cofinity-X": "CX",
  "Modo Labs": "ML",
  "Khan Academy": "KA",
  "Flexport": "Fx",
  "Framer": "F",
  "Talend": "T",
  "Barracuda": "B",
  "Auth0": "A0",
  "BAE Systems": "BAE",
  "General Dynamics GDIT": "GD",
  "Office of the Secretary": "OS",
  "State of Missouri": "MO",
  "Texas Office of Attorney General": "TX",
  "US Department of Defense": "DoD",
  "US Air Force": "USAF",
  "Agency for Healthcare Research and Quality": "AHRQ",
  "National Telecommunications and Information Administration": "NTIA",
  "United States Courts": "USC",
};

const CLIENTS_PRIVATE = [
  "AARP", "Auth0", "BAE Systems", "Barracuda", "Chase Bank", "Chegg",
  "ClientWorks", "Cofinity-X", "CrowdStrike", "Discover", "Domino's",
  "eBay", "Fannie Mae", "Flexport", "Framer", "General Dynamics GDIT",
  "HCSC", "Home Depot", "Johnson & Johnson", "JPMorgan", "Khan Academy",
  "Modo Labs", "Nuveen", "Pivotal", "Sony", "Talend", "TIAA",
].map(name => ({ name, mono: MONOGRAM_OVERRIDES[name] || name[0], logo: LOGO_FILES[name] || null }));

const CLIENTS_GOV = [
  "Agency for Healthcare Research and Quality",
  "National Telecommunications and Information Administration",
  "Office of the Secretary",
  "State of Missouri",
  "Texas Office of Attorney General",
  "United States Courts",
  "US Air Force",
  "US Department of Defense",
].map(name => ({ name, mono: MONOGRAM_OVERRIDES[name] || name[0], logo: LOGO_FILES[name] || null }));

window.COC = { SERVICES, STATS, WRITING, TEAM, MANIFESTO_LINES, CLIENTS_PRIVATE, CLIENTS_GOV };
