function Services(){
const DecryptedText=window.DecryptedText||(p=>p.text);
const SpotlightCard=window.SpotlightCard||(p=>p.children);
const block=(id,kicker,title,lede,body,out)=>
<section id={id} style={{padding:'72px 40px',borderBottom:'1px solid var(--border-subtle)'}}>
<div style={{maxWidth:800,margin:'0 auto'}}>
<div style={{fontFamily:'var(--font-mono)',fontSize:12,letterSpacing:'.08em',color:'var(--text-faint)',marginBottom:10}}><DecryptedText text={kicker} animateOn="view"/></div>
<h2 style={{fontSize:28,fontWeight:600,letterSpacing:'-.03em',margin:'0 0 16px'}}>{title}</h2>
<p style={{fontSize:15,color:'var(--text-muted)',margin:'0 0 20px'}}>{lede}</p>
{body.map((p,i)=><p key={i} style={{fontSize:14,color:'var(--text-muted)',lineHeight:1.7,margin:'0 0 14px'}}>{p}</p>)}
<SpotlightCard style={{marginTop:24,background:'var(--bg-1)',border:'1px solid var(--border-default)',borderRadius:'var(--radius-2)',padding:'18px 20px'}}>
<div style={{fontSize:12,letterSpacing:'.08em',color:'var(--text-faint)',marginBottom:10}}>YOU LEAVE WITH</div>
<ul style={{margin:0,paddingLeft:18,color:'var(--text-muted)',fontSize:14,lineHeight:1.7}}>{out.map(x=><li key={x}>{x}</li>)}</ul>
</SpotlightCard>
</div>
</section>;
return <div>
<div style={{padding:'48px 40px 24px'}}>
<div style={{maxWidth:800,margin:'0 auto'}}>
<h1 style={{fontFamily:'var(--font-mono)',fontSize:40,fontWeight:500,letterSpacing:'-.04em',margin:'0 0 12px'}}>Services</h1>
<p style={{fontSize:15,color:'var(--text-muted)',maxWidth:560}}>Four lines of work. All authorized. We do not run against systems you do not own or have in writing.</p>
</div>
</div>
{block('reverse-engineering','01','Reverse engineering','Firmware, protocols, and closed-source dependencies taken apart before they ship into your stack.',
['Most “we decompiled it” reports are a Ghidra dump plus adjectives. We treat the binary as an instrument: recover the layout the code actually uses, the parser it actually accepts, and the fields it never reads. See the offset-oracle note for the method.',
'Typical targets: vendor gateway firmware, mobile clients, native SDKs, protocol blobs. We start from an offline sample and a scope file. No production scanning from this engagement unless you put it in writing.',
'If an agent is in the loop, it is routed, not left to guess jadx vs IDA. The analyst still owns the finding.'],
['Struct and protocol notes that match the bytes','Risk register with evidence paths','Reproduction steps your engineers can run'])}
{block('ai-security','02','AI security','Model supply chain, injection resistance, and guardrail evaluation for systems that retrieve and act.',
['Weights, adapters, and fine-tunes are dependencies. We ask where they came from, who can swap them, and what the runtime actually loads, not what the manifest says.',
'RAG and agents fail when untrusted text is treated as an instruction. We test whether a user prompt or a retrieved chunk can overwrite your preset, and whether tool calls still hit a broker when the model complies with a jailbreak.',
'Guardrails are scored as a pair: unauthorized must fail closed; in-scope questions must still answer. A bot that refuses everything is not hardened.'],
['Provenance notes for weights and adapters','Injection and RAG override results with cited inputs','Guardrail gaps mapped to tool policy'])}
{block('agents','03','Agent audits','Which agents to trust, with which tools, with evidence.',
['An agent is a model plus a harness. We inventory tools, credentials, network, and who can change the system prompt. Then we try to make it do something outside that inventory, and we stop at the broker, not at a scolding paragraph.',
'We assign Anthropic, OpenAI, Gemini, Bedrock, or Grok by lane: general, Mythos fallback, verified-defender. The comparison notes are public; the assignment for your tenant is not.',
'Deliverable is a trust report: allowlist, schema, sandbox, confirm-for-high-impact. If you cannot name those four gates, the product is a chat box with side effects.'],
['Tool and identity inventory','Allowlist / schema / sandbox / confirm gaps','Written assignment of model lane'])}
{block('network','04','Detection engineering','Hardening for networks that carry machine-to-machine and agent-to-tool traffic.',
['Agent traffic does not look like a browser user. We tune detections around tool calls, model endpoints, and the paths between them, not only phishing and ransomware defaults.',
'Protocol work from reverse engineering feeds this: once we know what the blob actually speaks, we can say what “normal” is on the wire.',
'We write detections and hardening so your SOC can stop guessing, without staffing it 24/7.'],
['Detection notes tied to observed protocols','Hardening list with owners','What we explicitly did not cover'])}
</div>;
}
mountPage('services.html', Services);
