//! # jsdet-browser — Browser API bridges for URL detonation
//!
//! Implements the `Bridge` trait with a complete fake browser environment:
//!
//! - **DOM** — Arena-allocated HTML tree. `document.createElement`, `querySelector`,
//!   `getAttribute`, `innerHTML`, `appendChild`, etc.
//! - **Window** — `location`, `open`, `history`, `postMessage`, `setTimeout`, `setInterval`
//! - **Navigator** — `userAgent`, `platform`, `language`, `clipboard` (persona-configurable)
//! - **Network** — `fetch()`, `XMLHttpRequest` (programmable fake responses, no real network)
//! - **Storage** — `localStorage`, `sessionStorage`, `document.cookie`
//! - **Canvas** — `toDataURL()` returns template-based fingerprints from real Chrome captures
//! - **CSS** — `getComputedStyle()`, selector matching for keylogger detection
//! - **Mutation** — `MutationObserver` backed by the observation stream
//! - **Persona** — Configurable UA, platform, timezone, screen resolution, referrer
//!
//! Used by Sear for URL detonation. Each module is a separate file implementing
//! a focused piece of the browser API surface.

pub mod bridge;
pub mod canvas;
pub mod css;
pub mod dom;
pub mod har;
pub mod mutation;
pub mod navigator;
pub mod network;
pub mod persona;
pub mod sear_compat;
pub mod storage;
pub mod window;

pub use bridge::BrowserBridge;
pub use dom::Dom;
pub use persona::Persona;
pub use sear_compat::SandboxSummary;
