/* ============================================================ IBC Labs — Pages (part 2): Methodologies, Concepts, Problem, Notes, Contact ============================================================ */ /* ---------- Methodologies ---------- */ function MethodologiesPage() { const { methodologies } = window.IBC; return (
{methodologies.map((m) => (

{m.name}

Source paper

{m.summary}

{m.steps.map((s, i) => (
{String(i + 1).padStart(2, "0")}
{s[0]}

{s[1]}

))}
))}
); } /* ---------- Concepts ---------- */ function ConceptsPage() { const [q, setQ] = useState(""); const { concepts } = window.IBC; const norm = q.trim().toLowerCase(); const shown = norm ? concepts.filter( (c) => c.term.toLowerCase().includes(norm) || c.def.toLowerCase().includes(norm) ) : concepts; const jump = (term) => { const t = concepts.find((c) => c.term === term); if (t) { setQ(""); window.scrollTo({ top: 0, behavior: "smooth" }); } }; return (
setQ(e.target.value)} />
{shown.length ? shown.map((c) => (
{c.term}

{c.def}

See also{" "} {c.see.map((s, i) => ( { e.preventDefault(); jump(s); }}>{s} {i < c.see.length - 1 ? ", " : ""} ))}
)) : (

No concepts match “{q}”.

)}
); } /* ---------- Problem ---------- */ function ProblemPage() { const { problemSections } = window.IBC; const audiences = ["Practitioners", "Students", "Executives", "The merely curious"]; return (
A Problem Worth Considering

A problem worth considering.

{audiences.map((a) => {a})}

You can read this page without any background. It explains, in plain language, why we think identity in AI interaction deserves a standard — and why that is harder than it first appears.


{problemSections.map((s) => (

{s.h}

{s.p.map((para, i) =>

{para}

)}
))}
Read the Research Contact Us
); } /* ---------- Notes ---------- */ function NotesPage() { const [q, setQ] = useState(""); const [tag, setTag] = useState("All"); const { notes } = window.IBC; const tags = ["All", ...Array.from(new Set(notes.map((n) => n.tag)))]; const norm = q.trim().toLowerCase(); const shown = notes.filter((n) => { const tagOk = tag === "All" || n.tag === tag; const qOk = !norm || n.title.toLowerCase().includes(norm) || n.excerpt.toLowerCase().includes(norm); return tagOk && qOk; }); return (
setQ(e.target.value)} />
{tags.map((t) => ( ))}
{shown.length ? (
{shown.map((n) => )}
) : (

No notes match your filters.

)}
); } /* ---------- Contact ---------- */ function ContactPage() { const { org, team } = window.IBC; const [form, setForm] = useState({ name: "", email: "", message: "" }); const [errors, setErrors] = useState({}); const [sent, setSent] = useState(false); const set = (k) => (e) => setForm((f) => ({ ...f, [k]: e.target.value })); const submit = (e) => { e.preventDefault(); const errs = {}; if (!form.name.trim()) errs.name = "Please enter your name."; if (!form.email.trim()) errs.email = "Please enter your email."; else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(form.email)) errs.email = "Please enter a valid email."; if (!form.message.trim()) errs.message = "Please include a message."; setErrors(errs); if (Object.keys(errs).length === 0) setSent(true); }; return (
{sent ? (
Thank you — your inquiry has been recorded. This is a prototype, so nothing was actually sent, but in production we'd be in touch.
) : (
{errors.name && {errors.name}}
{errors.email && {errors.email}}