1import{c as N,u as H,r as l,j as e,e as M,d as D,P as t,A as q,L as y,C as F}from"./index-CB5zgalJ.js";import{w as B,S as K,R as W,W as I,a as S,b as A,c as O,d as G,K as V,e as U}from"./workshopUi-BeMAzhnP.js";import{c as X,i as b,W as J,d as Q,e as Y,a as Z,g as ee,f as te}from"./workshopsApi-D1r2NPEJ.js";import{R as se}from"./refresh-cw-CInY00Mx.js";import{A as j}from"./arrow-right-Bm9BzHcR.js";import{G as ne}from"./globe-DVEfl28g.js";import{M as ae}from"./map-pin-BqIZxSr-.js";import{T as ie}from"./ticket-CI9RhIIE.js";const oe=N("GraduationCap",[["path",{d:"M21.42 10.922a1 1 0 0 0-.019-1.838L12.83 5.18a2 2 0 0 0-1.66 0L2.6 9.08a1 1 0 0 0 0 1.832l8.57 3.908a2 2 0 0 0 1.66 0z",key:"j76jl0"}],["path",{d:"M22 10v6",key:"1lu8f3"}],["path",{d:"M6 12.5V16a6 3 0 0 0 12 0v-3.5",key:"1r8lef"}]]);const re=N("Presentation",[["path",{d:"M2 3h20",key:"91anmk"}],["path",{d:"M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3",key:"2k9sn8"}],["path",{d:"m7 21 5-5 5 5",key:"bip4we"}]]),le=["all","workshop","training","talk","meetup"];function ke(){const n=H(),[i,o]=l.useState([]),[d,g]=l.useState(!0),[x,m]=l.useState(null),[T,P]=l.useState(0),[u,$]=l.useState("all"),[p,C]=l.useState("all"),_=l.useCallback(()=>P(s=>s+1),[]);l.useEffect(()=>{let s=!1;return g(!0),(async()=>{try{const a=await X();if(s)return;o(a.workshops),m(a.failed?a.error??"Could not load the calendar.":null)}catch(a){if(s)return;o([]),m(a instanceof Error?a.message:"Could not load the calendar.")}finally{s||g(!1)}})(),()=>{s=!0}},[T]);const v=l.useMemo(()=>{let s=i;return u!=="all"&&(s=s.filter(a=>a.kind===u)),p==="online"&&(s=s.filter(a=>a.is_online)),p==="in-person"&&(s=s.filter(a=>!a.is_online)),s},[i,u,p]),{upcoming:k,past:z}=l.useMemo(()=>{const s=[],a=[];for(const r of v)(b(r)?a:s).push(r);return s.sort((r,h)=>c(r.starts_at)-c(h.starts_at)),a.sort((r,h)=>c(h.starts_at)-c(r.starts_at)),{upcoming:s,past:a}},[v]),f=l.useMemo(()=>{const s=i.filter(r=>!b(r)).sort((r,h)=>c(r.starts_at)-c(h.starts_at));return s.length?s[0]:i.filter(r=>b(r)).sort((r,h)=>c(h.starts_at)-c(r.starts_at))[0]??null},[i]),R=l.useMemo(()=>k.filter(s=>s.id!==f?.id),[k,f]),w=l.useMemo(()=>z.filter(s=>s.id!==f?.id),[z,f]),L=u!=="all"||p!=="all",E=l.useMemo(()=>({"@context":"https://schema.org","@type":"ItemList",name:"ProofAgent workshops, talks and training",description:"Workshops, conference talks, meetups and private training on AI agent governance, adversarial evaluation, and the ProofAgent Index (PAI).",url:"https://www.proofagent.ai/workshops",itemListElement:i.filter(a=>!b(a)).slice(0,20).map((a,r)=>({"@type":"ListItem",position:r+1,item:B(a)}))}),[i]);return e.jsxs(M,{topBand:!1,children:[e.jsx(D,{title:"AI agent governance workshops & talks · ProofAgent",description:"Hands-on workshops, talks and private training on AI agent governance: the ProofAgent Index, adversarial evaluation, and compliance mapping. Request a session for your team.",canonicalPath:"/workshops",ogImage:"/og-workshops.png",keywords:"AI agent governance workshop, AI agent evaluation training, PAI ProofAgent Index workshop, adversarial AI testing training, AI agent readiness workshop, private AI governance training",breadcrumbs:[["Home","/"],["Workshops","/workshops"]],jsonLd:E}),e.jsxs("div",{style:{background:t.bg,color:t.ink,minHeight:"100vh"},children:[e.jsx("style",{children:` 2 ${K} 3 /* ââ Featured hero ââ 4 The page opens on the next session's photo, edge to edge, with the 5 facts on a card riding up over it. The old opener was a two-line 6 marketing headline above a wall of filters: it said nothing a 7 visitor came here to learn (what is on, when, where). */ 8 /* ââ Featured hero ââ 9 The band's height comes from its own copy, not from a clamp(). It 10 used to be a fixed-height box with the title absolutely positioned 11 inside it: on a phone the lead wrapped to three lines, outgrew the 12 box, and the featured card â which rides up over the band by design 13 â landed on top of the text. Content sets the height, the padding 14 leaves room for the overlap, and nothing can collide. */ 15 .pa-ws-top { position: relative; width: 100%; background: ${t.soft}; 16 padding: clamp(104px, 12vw, 140px) 0 clamp(116px, 12vw, 150px); } 17 .pa-ws-top-img { position: absolute; inset: 0; width: 100%; height: 100%; 18 object-fit: cover; display: block; } 19 .pa-ws-top-scrim { position: absolute; inset: 0; pointer-events: none; 20 background: linear-gradient(180deg, 21 rgba(8, 20, 30, .40) 0%, rgba(8, 20, 30, .08) 28%, 22 ${t.bg}00 74%, ${t.bg} 100%); } 23 /* The page title lives ON the teal, in white â the backdrop was a 24 large empty green field otherwise, and a visitor landing here had 25 to read a card to find out what the page was. */ 26 .pa-ws-top-copy { position: relative; z-index: 1; } 27 .pa-ws-top-copy > div { max-width: ${t.max}px; margin: 0 auto; padding: 0 24px; } 28 .pa-ws-top-copy h1 { margin: 0; color: #ffffff; font-size: clamp(30px, 4.2vw, 46px); 29 line-height: 1.06; letter-spacing: -0.025em; font-weight: 800; } 30 .pa-ws-top-copy p { margin: 12px 0 0; max-width: 620px; color: rgba(220, 240, 238, .84); 31 font-size: clamp(15px, 1.5vw, 17px); line-height: 1.55; font-weight: 500; } 32 .pa-ws-feature { position: relative; z-index: 1; margin-top: -104px; 33 background: ${t.card}; border: 1px solid ${t.line}; 34 border-radius: 22px; box-shadow: ${t.shadow}; padding: 30px 34px 32px; } 35 .pa-ws-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 22px; } 36 @media (max-width: 1000px) { .pa-ws-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } 37 @media (max-width: 660px) { .pa-ws-grid { grid-template-columns: 1fr; gap: 18px; } } 38 @media (max-width: 540px) { 39 .pa-ws-top { padding: 96px 0 84px; } 40 .pa-ws-top-copy > div { padding: 0 16px; } 41 .pa-ws-index { padding: 0 16px 64px !important; } 42 .pa-ws-feature { margin-top: -48px; border-radius: 18px; padding: 22px 18px 24px; } 43 } 44 `}),e.jsx(de,{workshop:f,loading:d}),e.jsxs("div",{className:"pa-ws-index",style:{maxWidth:t.max,margin:"0 auto",padding:"0 24px 96px"},children:[e.jsxs("p",{style:{margin:"26px 0 34px",color:t.muted,fontSize:16.5,lineHeight:1.65,maxWidth:820},children:["Workshops, conference talks and private training on AI agent governance: the four axes of the"," ",e.jsx("a",{href:"https://arxiv.org/abs/2607.27677",target:"_blank",rel:"noopener noreferrer",style:{color:t.cyanDeep,fontWeight:600},children:"ProofAgent Index (PAI)"}),", adversarial evaluation on the open-source Harness, and how to turn a compliance obligation into a test that either passes or fails."]}),e.jsxs("div",{id:"upcoming",style:{display:"flex",gap:12,marginBottom:26,flexWrap:"wrap",alignItems:"center",justifyContent:"space-between"},children:[e.jsx("div",{style:{display:"flex",gap:8,flexWrap:"wrap"},children:le.map(s=>e.jsx(ce,{active:u===s,onClick:()=>$(s),label:s==="all"?"All formats":`${J[s]}s`},s))}),e.jsx("div",{style:{display:"inline-flex",padding:3,borderRadius:999,background:t.soft,border:`1px solid ${t.line}`},children:[["all","Anywhere"],["online","Online"],["in-person","In person"]].map(([s,a])=>e.jsx("button",{onClick:()=>C(s),style:{padding:"6px 14px",borderRadius:999,border:"none",cursor:"pointer",fontSize:13,fontWeight:p===s?700:500,background:p===s?t.card:"transparent",color:p===s?t.ink:t.muted,boxShadow:p===s?"0 1px 3px rgba(15,23,42,.10)":"none"},children:a},s))})]}),d?e.jsxs(e.Fragment,{children:[e.jsx(W,{title:"Upcoming",count:0,hint:"loading"}),e.jsxs("div",{className:"pa-ws-grid",children:[e.jsx(I,{}),e.jsx(I,{}),e.jsx(I,{})]})]}):x?e.jsxs("div",{role:"alert",style:{border:`1px solid ${t.line}`,borderRadius:18,background:t.card,padding:"48px 32px",textAlign:"center"},children:[e.jsx("div",{style:{width:46,height:46,borderRadius:14,margin:"0 auto 18px",display:"grid",placeItems:"center",background:`${t.orange}14`,color:t.orange},children:e.jsx(q,{size:22})}),e.jsx("h3",{style:{margin:0,fontSize:21,fontWeight:800,color:t.ink}
44,children:"The calendar did not load"}),e.jsxs("p",{style:{margin:"10px auto 0",color:t.muted,fontSize:15.5,lineHeight:1.6,maxWidth:520},children:[x," Sessions may well be scheduled â this is a loading problem, not an empty calendar."]}),e.jsxs("div",{style:{marginTop:22,display:"flex",gap:10,justifyContent:"center",flexWrap:"wrap"},children:[e.jsxs("button",{onClick:_,style:{display:"inline-flex",alignItems:"center",gap:7,padding:"11px 20px",borderRadius:999,border:"none",cursor:"pointer",background:t.ink,color:"#fff",fontWeight:700,fontSize:14},children:[e.jsx(se,{size:14})," Try again"]}),e.jsxs(y,{to:"/workshops/request",style:{display:"inline-flex",alignItems:"center",gap:6,padding:"11px 20px",borderRadius:999,background:"transparent",color:t.ink,fontWeight:700,fontSize:14,textDecoration:"none",border:`1px solid ${t.line}`},children:["Request a private session ",e.jsx(j,{size:14})]})]})]}):i.length===0?e.jsx(S,{title:"No sessions on the public calendar yet",body:"Dates get announced here as they are confirmed. Private workshops and internal training are booked directly â that path is open today.",primary:{label:"Request a private session",href:"/workshops/request"},secondary:{label:"Read the PAI paper",href:"https://arxiv.org/abs/2607.27677",external:!0}}):v.length===0?e.jsx(S,{title:"Nothing matches those filters",body:`There ${i.length===1?"is 1 published session":`are ${i.length} published sessions`}, but none in this format or location. Clear the filters to see everything.`,icon:e.jsx(re,{size:22}),primary:{label:"Clear filters",href:"/workshops"}}):e.jsxs(e.Fragment,{children:[e.jsxs("section",{style:{marginBottom:w.length?56:0},children:[e.jsx(W,{title:"Upcoming",count:k.length,hint:L?"filtered":void 0}),k.length===0?e.jsx(S,{title:"Nothing scheduled right now",body:"The next public date has not been announced. Past sessions are below, and private workshops can be booked any time.",primary:{label:"Request a private session",href:"/workshops/request"}}):R.length===0?e.jsx("p",{style:{margin:0,color:t.muted,fontSize:15,lineHeight:1.6},children:"That is the only session currently scheduled â it is featured at the top of this page."}):e.jsx("div",{className:"pa-ws-grid",children:R.map(s=>e.jsx(A,{workshop:s},s.id))})]}),w.length>0&&e.jsxs("section",{children:[e.jsx(W,{title:"Past sessions",count:w.length,hint:"recordings and slides where available"}),e.jsx("div",{className:"pa-ws-grid",children:w.map(s=>e.jsx(A,{workshop:s},s.id))})]})]}),e.jsxs("div",{style:{marginTop:64,padding:"32px 28px",background:t.card,border:`1px solid ${t.line}`,borderRadius:16,boxShadow:t.shadow,display:"flex",gap:18,alignItems:"center",justifyContent:"space-between",flexWrap:"wrap"},children:[e.jsxs("div",{style:{maxWidth:640},children:[e.jsx("h3",{style:{margin:0,fontSize:20,fontWeight:800,color:t.ink},children:"Want this run inside your company?"}),e.jsx("p",{style:{marginTop:8,marginBottom:0,color:t.muted,fontSize:14.5,lineHeight:1.6},children:"Sessions are delivered on site or remote, shaped around your agents and your regulatory scope. Tell us the team, the timeframe and the topics and you get a concrete agenda back â not a brochure."})]}),e.jsxs("button",{onClick:()=>n("/workshops/request"),style:{display:"inline-flex",alignItems:"center",gap:7,padding:"12px 22px",borderRadius:999,border:"none",cursor:"pointer",background:t.ink,color:"#fff",fontWeight:700,fontSize:14.5},children:["Start a request ",e.jsx(j,{size:15})]})]})]})]})]})}function de({workshop:n,loading:i}){const o=n?Q(n):!1,d=n?b(n):!1,g=n?O[n.kind]:t.cyanDeep,x=n?Y(n):"",m=n?pe(n):null;return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"pa-ws-top",children:[i?e.jsx("div",{className:"pa-ws-shimmer pa-ws-top-img"}):e.jsx(G,{accent:g,className:"pa-ws-top-img"}),e.jsx("div",{className:"pa-ws-top-scrim"}),e.jsx("div",{className:"pa-ws-top-copy",children:e.jsxs("div",{children:[e.jsx("h1",{children:"Workshops & events"}),e.jsx("p",{children:"Hands-on sessions on evaluating and governing AI agents: conference talks, meetups, and private training for your team."})]})})]}),e.jsx("div",{style:{maxWidth:t.max,margin:"0 auto",padding:"0 24px"},children:e.jsxs("div",{className:"pa-ws-feature",children:[e.jsxs("div",{style:{margin:"0 0 14px",display:"inline-flex",alignItems:"center",gap:7,fontSize:12,fontWeight:800,letterSpacing:.9,textTransform:"uppercase",color:t.cyanDeep},children:[e.jsx(oe,{size:14})," Next on the calendar"]}),i?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"pa-ws-shimmer",style:{width:"70%",height:34,borderRadius:8,marginBottom:14}}),e.jsx("div",{className:"pa-ws-shimmer",style:{width:"50%",height:16,borderRadius:6}})]}
44):n?e.jsxs(e.Fragment,{children:[e.jsxs("div",{style:{display:"flex",gap:8,flexWrap:"wrap",alignItems:"center",marginBottom:12},children:[e.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:6,padding:"4px 11px",borderRadius:999,background:o?`${t.green}14`:d?`${t.muted}14`:`${g}14`,color:o?t.green:d?t.muted:g,fontSize:11,fontWeight:800,letterSpacing:.5,textTransform:"uppercase"},children:[o?"Happening now":d?"Most recent session":"Next up",!o&&!d&&m?` · ${m}`:""]}),e.jsx(V,{kind:n.kind}),n.is_online&&e.jsx(U,{label:"Online",color:t.blue})]}),e.jsx("h2",{style:{margin:0,fontSize:"clamp(26px, 3.4vw, 40px)",fontWeight:800,color:t.ink,letterSpacing:-.5,lineHeight:1.15,maxWidth:900},children:e.jsx(y,{to:`/workshops/${n.slug}`,style:{color:"inherit",textDecoration:"none"},children:n.title})}),(n.summary||n.subtitle)&&e.jsx("p",{style:{margin:"12px 0 0",color:t.muted,fontSize:16.5,lineHeight:1.6,maxWidth:780,display:"-webkit-box",WebkitLineClamp:3,WebkitBoxOrient:"vertical",overflow:"hidden"},children:n.summary||n.subtitle}),e.jsxs("div",{style:{marginTop:18,display:"flex",gap:"10px 22px",flexWrap:"wrap",color:t.ink,fontSize:14,fontWeight:600},children:[e.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:7},children:[e.jsx(F,{size:15,color:t.muted}),Z(n),x?` · ${x}`:""]}),e.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:7},children:[n.is_online?e.jsx(ne,{size:15,color:t.muted}):e.jsx(ae,{size:15,color:t.muted}),ee(n)]}),e.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:7},children:[e.jsx(ie,{size:15,color:t.muted}),te(n)]})]}),e.jsxs("div",{style:{marginTop:24,display:"flex",gap:10,flexWrap:"wrap"},children:[e.jsxs(y,{to:`/workshops/${n.slug}`,style:{display:"inline-flex",alignItems:"center",gap:7,padding:"12px 22px",borderRadius:999,background:t.ink,color:"#fff",fontWeight:700,fontSize:14.5,textDecoration:"none"},children:[d?"View the recap":"Details & registration"," ",e.jsx(j,{size:15})]}),e.jsx(y,{to:"/workshops/request",style:{display:"inline-flex",alignItems:"center",gap:7,padding:"12px 22px",borderRadius:999,background:"transparent",color:t.ink,fontWeight:700,fontSize:14.5,textDecoration:"none",border:`1px solid ${t.line}`},children:"Request a session for your team"})]})]}):e.jsxs(e.Fragment,{children:[e.jsx("h2",{style:{margin:0,fontSize:"clamp(26px, 3.4vw, 40px)",fontWeight:800,color:t.ink,letterSpacing:-.5,lineHeight:1.15,maxWidth:860},children:"Learn to prove an AI agent is ready, not just that it works."}),e.jsx("p",{style:{margin:"12px 0 0",color:t.muted,fontSize:16.5,lineHeight:1.6,maxWidth:780},children:"No public date is on the calendar right now. Private workshops, talks and team training are booked directly and that path is open today."}),e.jsx("div",{style:{marginTop:24},children:e.jsxs(y,{to:"/workshops/request",style:{display:"inline-flex",alignItems:"center",gap:7,padding:"12px 22px",borderRadius:999,background:t.ink,color:"#fff",fontWeight:700,fontSize:14.5,textDecoration:"none"},children:["Request a session for your team ",e.jsx(j,{size:15})]})})]})]})})]})}function pe(n){if(!n.starts_at)return null;const i=new Date(n.starts_at).getTime();if(Number.isNaN(i))return null;const o=Math.ceil((i-Date.now())/864e5);return o<=0?"Today":o===1?"Tomorrow":o<15?`In ${o} days`:o<61?`In ${Math.round(o/7)} weeks`:null}function ce({active:n,onClick:i,label:o}){return e.jsx("button",{onClick:i,style:{cursor:"pointer",borderRadius:999,padding:"6px 14px",fontSize:13,fontWeight:n?700:500,border:`1px solid ${n?t.ink:t.line}`,background:n?t.ink:t.card,color:n?"#fff":t.ink,transition:"all .15s ease"},children:o})}function c(n){if(!n)return Number.MAX_SAFE_INTEGER;const i=new Date(n).getTime();return Number.isNaN(i)?Number.MAX_SAFE_INTEGER:i}export{ke as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.