1import{r as d,j as e}from"./index-DMdjr2K_.js";const s={VOID:"#ffffff",PEARL:"#fafafa",ICE:"#f4f6f8",GHOST:"#e8eaed",DUST:"#c7cbd1",INK:"#0a0a0a",GRAPHITE:"#2c3033",SILVER:"#8e9298",RED:"#ef4444",ORANGE:"#f97316",AMBER:"#f59e0b",EMERALD:"#10b981",CYAN:"#06b6d4",BLUE:"#3b82f6",VIOLET:"#8b5cf6"},j=` 2@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Inter+Tight:wght@500;600;700;800&family=Newsreader:ital,opsz,wght@1,6..72,400;1,6..72,500&family=JetBrains+Mono:wght@400;500;600&display=swap'); 3.lh { font-family: Inter, system-ui, sans-serif; color: ${s.INK}; } 4.lh .display { font-family: 'Inter Tight', Inter, sans-serif; letter-spacing: -0.02em; } 5.lh .quote { font-family: Newsreader, Georgia, serif; font-style: italic; } 6.lh .mono { font-family: 'JetBrains Mono', ui-monospace, monospace; } 7.lh .kick { font-family: 'JetBrains Mono', monospace; text-transform: uppercase; letter-spacing: 0.16em; font-size: 11px; } 8.lh .spectrum { height: 2px; background: linear-gradient(90deg, ${s.RED}, ${s.ORANGE}, ${s.AMBER}, ${s.EMERALD}, ${s.CYAN}, ${s.BLUE}, ${s.VIOLET}); } 9.lh .card { background: ${s.VOID}; border: 1px solid ${s.GHOST}; border-radius: 16px; } 10.lh .tabbtn { transition: all .15s; } 11.lh a { color: inherit; } 12.lh .fadein { animation: fadein .5s ease both; } 13@keyframes fadein { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } } 14.lh ::selection { background: ${s.AMBER}; color: ${s.INK}; } 15.lh .ed-body { font-family: Newsreader, Georgia, serif; font-size: 18.5px; line-height: 1.72; color: ${s.GRAPHITE}; } 16.lh .ed-body p { margin: 0 0 18px; } 17.lh .ed-body p:first-of-type { font-size: 19.5px; color: ${s.INK}; } 18.lh .ed-body strong { font-weight: 640; color: ${s.INK}; } 19.lh .ed-body .cite { font-family: 'JetBrains Mono', monospace; font-style: normal; font-size: 0.7em; letter-spacing: 0.02em; color: ${s.EMERALD}; background: #ecfdf5; border: 1px solid #c7f0dd; border-radius: 5px; padding: 1px 6px; vertical-align: 1.5px; white-space: nowrap; } 20`,w=[{title:"Festivals, events",note:"Kept private by the group â not exported, not here."},{title:"Potentially Useful Links",note:"Kept private by the group â not exported, not here."}],S=[{title:"Message",color:s.BLUE,ready:!1,status:"In the works",replaces:"In place of WhatsApp",body:"Talk together in a private group space that does what your WhatsApp rooms do â without a platform reading over your shoulder.",icon:e.jsx("svg",{width:"32",height:"32",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:e.jsx("path",{d:"M21 11.5a8.4 8.4 0 0 1-8.5 8.5 8.5 8.5 0 0 1-3.8-.9L3 21l1.9-5.7A8.5 8.5 0 0 1 4 11.5 8.4 8.4 0 0 1 12.5 3 8.4 8.4 0 0 1 21 11.5z"})})},{title:"Meet",color:s.ORANGE,ready:!1,status:"In the works",replaces:"In place of Zoom",body:"Gather face to face on video â like the calls you run now, but yours, not rented by the month.",icon:e.jsxs("svg",{width:"32",height:"32",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("rect",{x:"2",y:"6",width:"13",height:"12",rx:"2"}),e.jsx("path",{d:"M22 8.5 15 12l7 3.5v-7z"})]})},{title:"Understand each other",color:s.CYAN,ready:!0,status:"You're using it now",replaces:"This demo",body:"The shared memory you're exploring right now â everything the group has said, made findable, owned by the group.",icon:e.jsxs("svg",{width:"32",height:"32",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("circle",{cx:"5",cy:"6",r:"2"}),e.jsx("circle",{cx:"19",cy:"7",r:"2"}),e.jsx("circle",{cx:"12",cy:"18",r:"2"}),e.jsx("path",{d:"M6.6 7.3 10.6 16.2M17.4 8.5 13.4 16.3M7 6.4 17 6.9"})]})},{title:"Speak",color:s.EMERALD,ready:!0,status:"First piece just published",replaces:"In place of a newsletter",body:"When a theme keeps coming back across the rooms, the shared memory writes a short piece about it â in the community's own voice, from the community's own words. A way for the group to publish itself, owned by the group. Read the first one under âThe community speaksâ.",icon:e.jsxs("svg",{width:"32",height:"32",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("path",{d:"M3 11a9 9 0 0 1 9-9M3 11a9 9 0 0 0 9 9",opacity:"0"}),e.jsx("path",{d:"M4 5h13a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H8l-4 3V5z"}),e.jsx("path",{d:"M8 9h8M8 13h5"})]})}];function m(i,t){return fetch(`/api/lifehouses${i}`,{credentials:"same-origin",headers:{Accept:"application/json"},...t})}function v(i,t){return`/api/lifehouses?action=media&room=${encodeURIComponent(i)}&file=${encodeURIComponent(t)}`}function k(i){const[t,n]=i.split("-");return`${["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][(parseInt(n,10)||1)-1]} ${t}`}function O(){const[i,t]=d.useState(null),[n,o]=d.useState(""),[l,a]=d.useState(""),[r,h]=d.useState(!1);d.useEffect(()=>{m("?action=session").then(p=>p.json()).then(p=>t(!!p.unlocked)).catch(()=>t(!1))},[]);const u=async p=>{p.preventDefault(),h(!0),a("");try{(await(await m("",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"auth",password:n})})).json()).ok?t(!0):a("That password didn't match. Try again, or ask whoever shared this link.")}catch{a("Something went wrong. Please try again.")}h(!1)};return i===null?e.jsxs("div",{className:"lh",style:{minHeight:"100vh",background:s.VOID,display:"grid",placeItems:"center"},children:[e.jsx("style",{children:j}),e.jsx("div",{className:"mono",style:{color:s.SILVER,fontSize:13},children:"openingâ¦"})]}):i?e.jsx(I,{onLock:()=>{m("",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"logout"})}).finally(()=>t(!1))}}):e.jsx(T,{pw:n,setPw:o,err:l,busy:r,submit:u})}function T({pw:i,setPw:t,err:n,busy:o,submit:l}){return e.jsxs("div",{className:"lh",style:{minHeight:"100vh",background:s.VOID},children:[e.jsx("style",{children:j}),e.jsx("div",{className:"spectrum"}),e.jsxs("div",{style:{maxWidth:560,margin:"0 auto",padding:"9vh 24px 24px"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,marginBottom:40},children:[e.jsx("a",{href:"/birdbrain",children:e.jsx("img",{src:"/images/icons/birdbrain-favicon.png",alt:"",width:34,he
20ight:34,style:{borderRadius:"50%"},onError:a=>{a.currentTarget.style.display="none"}})}),e.jsx("span",{className:"kick",style:{color:s.SILVER},children:"A private demo"})]}),e.jsxs("div",{className:"fadein",children:[e.jsxs("h1",{className:"display",style:{fontSize:40,lineHeight:1.05,fontWeight:800,margin:0},children:["The Lifehouses",e.jsx("br",{}),"shared memory"]}),e.jsx("p",{className:"quote",style:{fontSize:20,color:s.GRAPHITE,marginTop:18,lineHeight:1.5},children:"Everything the group has already said â a link, a plan, a hard-won idea â made findable again."}),e.jsx("p",{style:{fontSize:15.5,color:s.SILVER,marginTop:16,lineHeight:1.65},children:"This is a small, private demo built for the Lifehouses â Collapse-Preparing Communities network. It's password-protected and not public. If someone shared this link with you, they'll have shared the password too."}),e.jsxs("form",{onSubmit:l,style:{marginTop:28},children:[e.jsx("label",{className:"kick",style:{color:s.SILVER,display:"block",marginBottom:10},children:"Password"}),e.jsxs("div",{style:{display:"flex",gap:10},children:[e.jsx("input",{value:i,onChange:a=>t(a.target.value),type:"password",autoFocus:!0,placeholder:"the shared password",style:{flex:1,padding:"13px 15px",borderRadius:12,border:`1px solid ${s.DUST}`,fontSize:15,outline:"none",background:s.PEARL}}),e.jsx("button",{disabled:o||!i,type:"submit",style:{padding:"13px 22px",borderRadius:12,border:"none",background:o||!i?s.GHOST:s.INK,color:o||!i?s.SILVER:s.VOID,fontWeight:600,fontSize:15,cursor:o||!i?"default":"pointer"},children:o?"â¦":"Enter"})]}),n&&e.jsx("p",{style:{color:s.RED,fontSize:13.5,marginTop:12},children:n})]}),e.jsx("p",{style:{fontSize:13,color:s.DUST,marginTop:34,lineHeight:1.6},children:"No tokens, no surveillance, no data sold. Just the group's own words â with simple logins and cryptography used only to keep provenance intact and to keep the community in control of its own data."})]})]})]})}function I({onLock:i}){const[t,n]=d.useState(null),[o,l]=d.useState("rooms");d.useEffect(()=>{m("?action=meta").then(r=>r.json()).then(n).catch(()=>n(null))},[]);const a=[["rooms","Rooms"],["editorial","The community speaks"],["ask","Ask"],["concepts","Ideas"],["voices","Voices"],["threads","Open threads"],["gallery","Shared media"],["timeline","Timeline"]];return e.jsxs("div",{className:"lh",style:{background:s.VOID,minHeight:"100vh"},children:[e.jsx("style",{children:j}),e.jsx("div",{className:"spectrum"}),e.jsx("header",{style:{position:"sticky",top:0,zIndex:30,background:"rgba(255,255,255,0.86)",backdropFilter:"blur(10px)",borderBottom:`1px solid ${s.GHOST}`},children:e.jsxs("div",{style:{maxWidth:1120,margin:"0 auto",padding:"12px 24px",display:"flex",alignItems:"center",gap:12},children:[e.jsx("a",{href:"/birdbrain",children:e.jsx("img",{src:"/images/icons/birdbrain-favicon.png",alt:"",width:30,height:30,style:{borderRadius:"50%"},onError:r=>{r.currentTarget.style.display="none"}})}),e.jsxs("div",{style:{lineHeight:1.1},children:[e.jsx("div",{className:"display",style:{fontWeight:700,fontSize:15},children:"Lifehouses · shared memory"}),e.jsx("div",{className:"kick",style:{color:s.SILVER,fontSize:10},children:"L-CPC · private demo"})]}),e.jsx("div",{style:{flex:1}}),e.jsx("button",{onClick:i,className:"mono",style:{fontSize:12,color:s.SILVER,background:"none",border:`1px solid ${s.GHOST}`,borderRadius:8,padding:"6px 12px",cursor:"pointer"},children:"lock"})]})}),e.jsx(E,{meta:t}),e.jsxs("div",{id:"explore",style:{maxWidth:1120,margin:"0 auto",padding:"8px 24px 80px"},children:[e.jsx("div",{className:"spectrum",style:{borderRadius:99,margin:"8px 0 22px"}}),e.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:8,marginBottom:26},children:a.map(([r,h])=>e.jsx("button",{onClick:()=>l(r),className:"tabbtn mono",style:{fontSize:12.5,padding:"8px 15px",borderRadius:99,cursor:"pointer",border:`1px solid ${o===r?s.INK:s.GHOST}`,background:o===r?s.INK:s.VOID,color:o===r?s.VOID:s.GRAPHITE},children:h},r))}),t?e.jsxs("div",{className:"fadein",children:[o==="rooms"&&e.jsx(R,{meta:t}),o==="editorial"&&e.jsx(L,{}),o==="ask"&&e.jsx(N,{}),o==="concepts"&&e.jsx(z,{meta:t}),o==="voices"&&e.jsx(A,{meta:t}),o==="threads"&&e.jsx(W,{meta:t}),o==="gallery"&&e.jsx(H,{meta:t}),o==="timeline"&&e.jsx(V,{meta:t})]},o):e.jsx("div",{className:"mono",style:{color:s.SILVER},children:"loading the archiveâ¦"})]}),e.jsx("footer",{style:{borderTop:`1px solid ${s.GHOST}`,background:s.PEARL},children:e.jsxs("div",{style:{maxWidth:1120,margin:"0 auto",padding:"28px 24px",color:s.SILVER,fontSize:13,lineHeight:1.7},children:[e.jsx("div",{className:"spectrum",style:{width:60,borderRadius:99,marginBottom:16}}),"A private demo built by exporting the group's own WhatsApp rooms â nothing scraped or bought. Nothing here is public; nothing posts back to WhatsApp; every answer shows its sources so you can check it against the group's own words. Two rooms that were locked couldn't be exported, so they're not included."]})})]})}function y({n:i,color:t,kick:n,title:o,children:l}){return e.jsxs("div",{style:{display:"grid",gridTemplateColumns:"auto 1fr",gap:18,alignItems:"start"}
20,children:[e.jsx("div",{className:"mono",style:{width:34,height:34,borderRadius:"50%",border:`1.5px solid ${t}`,color:t,display:"grid",placeItems:"center",fontSize:13,fontWeight:600,flexShrink:0},children:i}),e.jsxs("div",{children:[e.jsx("div",{className:"kick",style:{color:t,marginBottom:8},children:n}),e.jsx("h3",{className:"display",style:{fontSize:23,fontWeight:700,margin:"0 0 10px"},children:o}),e.jsx("div",{style:{fontSize:15.5,color:s.GRAPHITE,lineHeight:1.68},children:l})]})]})}function E({meta:i}){const t=i?.rooms??[],n=i?.counts??{};return e.jsxs("div",{style:{maxWidth:1120,margin:"0 auto",padding:"40px 24px 8px"},children:[e.jsxs("div",{style:{maxWidth:760},children:[e.jsx("div",{className:"kick fadein",style:{color:s.SILVER,marginBottom:18},children:"Why we built this"}),e.jsxs("h1",{className:"display fadein",style:{fontSize:"clamp(34px, 5vw, 52px)",lineHeight:1.04,fontWeight:800,margin:0},children:["You already did the hard part.",e.jsx("br",{}),"You talked."]}),e.jsx("p",{className:"quote fadein",style:{fontSize:22,color:s.GRAPHITE,marginTop:22,lineHeight:1.5},children:"Nine rooms. A thousand messages. Everything that matters â a link, a plan, a hard-won insight â is in there somewhere. And then it's three weeks down the scroll, and effectively gone."}),e.jsxs("p",{className:"fadein",style:{fontSize:16,color:s.SILVER,marginTop:18,lineHeight:1.7},children:["This is a small demo that takes the conversations you've ",e.jsx("em",{children:"already"})," had and turns them into a shared memory the community can actually search â owned by the group, kept private, built only from the group's own words."]})]}),e.jsxs("div",{style:{margin:"40px 0 8px"},children:[e.jsx("div",{className:"kick",style:{color:s.SILVER,marginBottom:14},children:"The problem, in one picture â your rooms"}),e.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:10},children:[t.map(o=>e.jsxs("div",{className:"card",style:{padding:"12px 14px",borderRadius:12,minWidth:150},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[e.jsx("span",{style:{width:8,height:8,borderRadius:2,background:s.VIOLET,display:"inline-block"}}),e.jsx("span",{className:"display",style:{fontWeight:600,fontSize:14},children:o.title})]}),e.jsxs("div",{className:"mono",style:{color:s.SILVER,fontSize:11,marginTop:6},children:[o.posts," messages · ",o.voices," voices"]})]},o.id)),w.map(o=>e.jsxs("div",{style:{padding:"12px 14px",borderRadius:12,minWidth:150,border:`1px dashed ${s.DUST}`,background:s.ICE},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[e.jsx("span",{style:{width:8,height:8,borderRadius:2,background:s.DUST,display:"inline-block"}}),e.jsx("span",{className:"display",style:{fontWeight:600,fontSize:14,color:s.SILVER},children:o.title})]}),e.jsx("div",{className:"mono",style:{color:s.DUST,fontSize:11,marginTop:6},children:"private · not included"})]},o.title))]}),e.jsxs("p",{style:{fontSize:13.5,color:s.SILVER,marginTop:12,lineHeight:1.6},children:["Two rooms â ",e.jsx("b",{children:"Festivals"})," and ",e.jsx("b",{children:"Potentially Useful Links"})," â were locked so they can't be exported. They stay out. That's the principle we're building toward: only what a community consents to share is ever included."]})]}),e.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:26,margin:"30px 0 44px",padding:"22px 24px",borderRadius:16,background:s.INK,color:s.VOID},children:[[n.topics??0,"rooms",s.VIOLET],[n.posts??0,"messages",s.CYAN],[n.concepts??0,"ideas surfaced",s.CYAN],[n.questions??0,"open questions",s.EMERALD],[n.decisions??0,"decisions",s.AMBER],[i?.gallery?.length??0,"shared photos",s.ORANGE]].map(([o,l,a])=>e.jsxs("div",{children:[e.jsx("div",{className:"display",style:{fontSize:30,fontWeight:800,color:a},children:o}),e.jsx("div",{className:"mono",style:{fontSize:11,color:s.DUST,textTransform:"uppercase",letterSpacing:"0.1em"},children:l})]},l))}),e.jsxs("div",{style:{display:"grid",gap:30,maxWidth:820},children:[e.jsx(y,{n:1,color:s.CYAN,kick:"What it is",title:"A shared memory, not another app to check",children:"One quiet place where everything the group has already said becomes findable. You don't have to post here, learn anything, or change how you use WhatsApp. It sits alongside â a filing cabinet for a conversation that was otherwise scrolling away."}),e.jsxs(y,{n:2,color:s.VIOLET,kick:"What it lets you do",title:"Ask a real question, get an answer built from your own words",children:["Search by ",e.jsx("em",{children:"idea"}),", not just keywords. Ask a plain-English question â âwhat have we said about food growing?â, âwho's working on resilience mapping?â â and get a short answer assembled ",e.jsx("em",{children:"only"})," from the group's own messages, always with the sources next to it so you can check it. See which topics keep coming back, who's carrying them, and the open questions and decisions that surface on their own."]}),e.jsxs(y,{n:3,color:s.EMERALD,kick:"How it works, plainly",title:"Your words stay yours",children:["To build this demo, these conversations were exported straight from the group's own WhatsApp â nothing was scraped, bought, or taken from anywhere else. The two rooms that were locked simply couldn't be exported, so they aren't here. It runs on our own computer: your messages aren't sold, aren't used for advertising, and aren't handed to a big tech platform. The âaskâ feature uses a language model to ",e.jsx("em",{children:"summarise"}),", but only over your own text, and it shows its receipts every time. Nothing here posts back into WhatsApp or changes your groups. Names and numbers can be trimmed on request."]}),e.jsxs(y,{n:4,color:s.AMBER,kick:"Who stays in control",title:"The community holds its own data",children:["This isn't about tokens or speculation. The wider system we're building is designed so individuals and communities keep control of their own data and their consent â what's shared, who can see it, and the right to take it back. It leans on two ordinary things: ",e.jsx("em",{children:"simple logins"})," (a tap on your phone â no passwords to remember, no account sold to anyone) and ",e.jsx("em",{children:"cryptography"})," â the same everyday maths that already secures your messages â used here for one honest job: to prove who said what, so provenance stays intact and no one can put words in your mouth. A tool the community holds, not a new middleman. If it isn't useful, you delete it and nothing is lost."]})]}),e.jsxs("div",{style:{marginTop:56,maxWidth:1120},children:[e.jsx("div",{className:"kick",style:{color:s.SILVER,marginBottom:14},children:"The bigger picture"}),e.jsx("h2",{className:"display",style:{fontSize:"clamp(26px, 3.4vw, 36px)",fontWeight:800,lineHeight:1.08,margin:0,maxWidth:760},children:"One set of tools to message, meet, understand each other â and speak"}),e.jsx("p",{style:{fontSize:16,color:s.SILVER,marginTop:16,lineHeight:1.7,maxWidth:760},children:"What you're looking at is one of four simple tools â a stack a community can run for itself, in place of the scattered apps you're renting from big tech. The things you already do together â talk, gather, remember, and say your piece â on ground you own."}),e.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(240px, 1fr))",gap:14,marginTop:26},children:S.map(o=>e.jsxs("div",{className:"card",style:{padding:"22px 22px 24px",position:"relative",overflow:"hidden",background:o.ready?"#f5feff":s.VOID,borderColor:o.ready?"#bfeefc":s.GHOST},children:[e.jsx("div",{style:{position:"absolute",top:0,left:0,right:0,height:3,background:o.color}}),e.jsx("div",{style:{color:o.color,marginBottom:16},children:o.icon}),e.jsx("h3",{className:"display",style:{fontSize:19,fontWeight:700,margin:"0 0 8px"},children:o.title}
20),e.jsxs("div",{className:"mono",style:{fontSize:10,color:o.ready?o.color:s.DUST,textTransform:"uppercase",letterSpacing:"0.12em",marginBottom:12,display:"flex",alignItems:"center",gap:6},children:[o.ready&&e.jsx("span",{style:{width:6,height:6,borderRadius:"50%",background:o.color,display:"inline-block"}}),o.status]}),e.jsx("p",{style:{fontSize:14.5,color:s.GRAPHITE,lineHeight:1.6,margin:0},children:o.body}),e.jsx("div",{className:"mono",style:{fontSize:11,color:s.SILVER,marginTop:14},children:o.replaces})]},o.title))}),e.jsx("p",{style:{fontSize:14.5,color:s.GRAPHITE,marginTop:20,lineHeight:1.6,maxWidth:760},children:"Four tools, one shared library that belongs to the community. Start with what's here â the rest joins on when you're ready, and you can unplug any time."})]}),e.jsx("a",{href:"#explore",style:{display:"inline-flex",alignItems:"center",gap:10,marginTop:40,padding:"14px 24px",borderRadius:99,background:s.INK,color:s.VOID,fontWeight:600,fontSize:15.5,textDecoration:"none"},children:"Explore the archive â"})]})}function R({meta:i}){const[t,n]=d.useState(null),[o,l]=d.useState(""),a=r=>{if(t===r){n(null);return}n(r),l(""),m(`?action=read&room=${r}`).then(h=>h.json()).then(h=>l(h.content||"")).catch(()=>l("Couldn't load this room."))};return e.jsxs("div",{style:{display:"grid",gap:12},children:[e.jsx("p",{style:{color:s.SILVER,fontSize:14,marginTop:-4},children:"Each WhatsApp room, kept whole. Open one to read the full record â the same messages, just no longer scrolling away."}),i.rooms.map(r=>e.jsxs("div",{className:"card",style:{overflow:"hidden"},children:[e.jsxs("button",{onClick:()=>a(r.id),style:{width:"100%",textAlign:"left",padding:"16px 18px",background:"none",border:"none",cursor:"pointer"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[e.jsx("span",{style:{width:10,height:10,borderRadius:3,background:s.VIOLET}}),e.jsx("span",{className:"display",style:{fontWeight:700,fontSize:17},children:r.title}),e.jsx("span",{style:{flex:1}}),e.jsxs("span",{className:"mono",style:{fontSize:11.5,color:s.SILVER},children:[r.posts," msgs · ",r.voices," voices · ",r.media," media"]})]}),r.frame&&e.jsx("div",{style:{marginTop:8,color:s.GRAPHITE,fontSize:14.5,lineHeight:1.5},children:r.frame}),e.jsx("div",{className:"mono",style:{marginTop:8,color:s.DUST,fontSize:11},children:r.top.join(" · ")})]}),t===r.id&&e.jsx("div",{style:{borderTop:`1px solid ${s.GHOST}`,padding:"14px 18px",background:s.PEARL,maxHeight:460,overflow:"auto"},children:o?e.jsx("pre",{className:"quote",style:{whiteSpace:"pre-wrap",fontStyle:"normal",fontFamily:"Inter, sans-serif",fontSize:13.5,lineHeight:1.6,color:s.GRAPHITE,margin:0},children:o.replace(/^---[\s\S]*?---\n/,"")}):e.jsx("div",{className:"mono",style:{color:s.SILVER,fontSize:12},children:"loadingâ¦"})})]},r.id))]})}function N(){const[i,t]=d.useState(""),[n,o]=d.useState(""),[l,a]=d.useState(null),[r,h]=d.useState(!1),[u,p]=d.useState(!1),b=["What is a Lifehouse and why are people building them?","What have we said about food growing and food systems?","Who is working on local resilience?","What are people worried about?"],x=d.useCallback(c=>{const f=c.trim();f&&(h(!0),p(!0),o(""),a(null),t(f),m(`?action=ask&q=${encodeURIComponent(f)}`).then(g=>g.json()).then(g=>{o(g.answer||"The archive doesn't really cover this yet."),a(g.sources||[])}).catch(()=>o("Something went wrong reaching the archive.")).finally(()=>h(!1)))},[]);return e.jsxs("div",{style:{maxWidth:760},children:[e.jsx("p",{style:{color:s.SILVER,fontSize:14,marginTop:-4,marginBottom:16},children:"Ask a plain question. The answer is assembled only from the community's own messages, and every claim shows where it came from."}),e.jsxs("form",{onSubmit:c=>{c.preventDefault(),x(i)},style:{display:"flex",gap:10},children:[e.jsx("input",{value:i,onChange:c=>t(c.target.value),placeholder:"Ask the archiveâ¦",style:{flex:1,padding:"14px 16px",borderRadius:12,border:`1px solid ${s.DUST}`,fontSize:15,outline:"none",background:s.PEARL}}),e.jsx("button",{type:"submit",disabled:r||!i.trim(),style:{padding:"14px 22px",borderRadius:12,border:"none",background:r||!i.trim()?s.GHOST:s.INK,color:r||!i.trim()?s.SILVER:s.VOID,fontWeight:600,fontSize:15,cursor:r||!i.trim()?"default":"pointer"},children:r?"â¦":"Ask"})]}),!u&&e.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:8,marginTop:16},children:b.map(c=>e.jsx("button",{onClick:()=>x(c),style:{fontSize:13,padding:"8px 13px",borderRadius:99,border:`1px solid ${s.GHOST}`,background:s.VOID,color:s.GRAPHITE,cursor:"pointer",textAlign:"left"},children:c},c))}),r&&e.jsx("div",{className:"mono",style:{color:s.SILVER,marginTop:22,fontSize:13},children:"reading the community's messagesâ¦"}),n&&!r&&e.jsxs("div",{className:"fadein",style:{marginTop:24},children:[e.jsx("div",{className:"card",style:{padding:"20px 22px",background:s.PEARL},children:e.jsx("div",{style:{fontSize:16,lineHeight:1.66,color:s.INK,whiteSpace:"pre-wrap"},children:n})}),l&&l.length>0&&e.jsxs("div",{style:{marginTop:16},children:[e.jsx("div",{className:"kick",style:{color:s.SILVER,marginBottom:10},children:"Sources â the group's own words"}),e.jsx("div",{style:{display:"grid",gap:8},children:l.map(c=>e.jsxs("div",{className:"card",style:{padding:"11px 14px"},children:[e.jsxs("div",{style:{display:"flex",gap:8,alignItems:"baseline"},children:[e.jsxs("span",{className:"mono",style:{color:s.CYAN,fontSize:12,fontWeight:600},children:["[",c.n,"]"]}),e.jsx("span",{className:"display",style:{fontWeight:600,fontSize:13.5},children:c.label}),c.date&&e.jsx("span",{className:"mono",style:{color:s.DUST,fontSize:11},children:String(c.date).slice(0,10)})]}),e.jsx("div",{style:{color:s.SILVER,fontSize:13,marginTop:6,lineHeight:1.5},children:c.excerpt})]},c.n))})]})]})]})}function L(){const[i,t]=d.useState(null),[n,o]=d.useState(!1);if(d.useEffect(()=>{m("?action=editorial").then(a=>
20a.json()).then(t).catch(()=>o(!0))},[]),n)return e.jsx("div",{className:"mono",style:{color:s.SILVER},children:"Couldn't load this."});if(!i)return e.jsx("div",{className:"mono",style:{color:s.SILVER},children:"openingâ¦"});const l=i.posts||[];return e.jsxs("div",{style:{maxWidth:760},children:[e.jsxs("p",{style:{color:s.SILVER,fontSize:14,marginTop:-4,marginBottom:6,lineHeight:1.6},children:["This is the part that surprises people. When a theme keeps coming back across the rooms, the shared memory writes a short piece about it â in the community's own collective voice, built ",e.jsx("em",{children:"only"})," from the group's own words, with every point tagged back to the room it came from. It is never scheduled and never made public. It waits until there is genuinely something to say, then says it â and hands the thread back to you."]}),l.length===0&&e.jsx("div",{className:"mono",style:{color:s.SILVER,marginTop:14},children:"No pieces yet â the memory speaks only when a theme has built up enough to be worth it."}),l.map(a=>e.jsxs("article",{className:"card",style:{padding:"30px 30px 26px",marginTop:22},children:[e.jsxs("div",{className:"kick",style:{color:s.EMERALD,marginBottom:14},children:[a.strand?`${a.strand} · `:"","Piece â ",a.number||1]}),e.jsx("h2",{className:"display",style:{fontSize:"clamp(25px, 3.6vw, 33px)",fontWeight:800,lineHeight:1.1,margin:0},children:a.title}),a.dek&&e.jsx("p",{className:"quote",style:{fontSize:18.5,color:s.GRAPHITE,marginTop:14,lineHeight:1.5},children:a.dek}),e.jsxs("div",{className:"mono",style:{fontSize:11,color:s.SILVER,marginTop:16,display:"flex",flexWrap:"wrap",gap:10,alignItems:"center"},children:[e.jsx("span",{children:a.byline}),a.date&&e.jsxs("span",{style:{color:s.DUST},children:["· ",a.date]})]}),e.jsxs("div",{style:{marginTop:18,padding:"12px 14px",borderRadius:12,background:"#f0fdf8",border:"1px solid #c7f0dd"},children:[e.jsx("div",{className:"mono",style:{fontSize:10.5,color:s.EMERALD,textTransform:"uppercase",letterSpacing:"0.12em",marginBottom:6},children:"Why this piece, and why now"}),e.jsxs("div",{style:{fontSize:13.5,color:s.GRAPHITE,lineHeight:1.6},children:["Written because ",e.jsxs("b",{children:["â",a.spine,"â"]})," kept surfacing across the rooms in the period ",a.window,". Not scheduled â the shared memory only writes when a theme has built up enough weight to be worth saying",a.pressure?e.jsxs(e.Fragment,{children:[" (it crossed the line at a build-up score of ",e.jsx("span",{className:"mono",children:a.pressure}),")"]}):null,"."]})]}),e.jsx("div",{className:"ed-body",style:{marginTop:24},dangerouslySetInnerHTML:{__html:a.html}}),a.receipts&&a.receipts.length>0&&e.jsxs("div",{style:{marginTop:22,borderTop:`1px solid ${s.GHOST}`,paddingTop:18},children:[e.jsx("div",{className:"kick",style:{color:s.SILVER,marginBottom:12},children:"What it's drawn from â the group's own words"}),e.jsx("div",{style:{display:"grid",gap:8},children:a.receipts.map((r,h)=>e.jsx("div",{className:"card",style:{padding:"11px 14px",background:s.PEARL,fontSize:13.5,color:s.GRAPHITE,lineHeight:1.55},children:r},h))})]})]},a.slug))]})}function z({meta:i}){return e.jsxs("div",{children:[e.jsx("p",{style:{color:s.SILVER,fontSize:14,marginTop:-4,marginBottom:16},children:"The ideas that keep coming up â pulled out of the conversation automatically, then you can see which recur across rooms."}),e.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(240px, 1fr))",gap:12},children:i.concepts.map(t=>e.jsxs("div",{className:"card",style:{padding:"14px 16px"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[e.jsx("span",{style:{width:8,height:8,borderRadius:"50%",background:s.CYAN}}),e.jsx("span",{className:"display",style:{fontWeight:600,fontSize:14.5},children:t.label})]}),t.summary&&e.jsx("div",{style:{color:s.SILVER,fontSize:13,marginTop:8,lineHeight:1.55},children:t.summary}),t.rooms>1&&e.jsxs("div",{className:"mono",style:{color:s.DUST,fontSize:10.5,marginTop:8},children:["in ",t.rooms," rooms"]})]},t.label))})]})}function A({meta:i}){const t=Math.max(1,...i.voices.map(o=>o.msgs)),n=i.voices.filter(o=>o.label&&!/^\+?\d[\d ]+$/.test(o.label));return e.jsxs("div",{children:[e.jsx("p",{style:{color:s.SILVER,fontSize:14,marginTop:-4,marginBottom:16},children:"Who's been carrying the conversation, by how much they've contributed. (Everyone who's spoken counts â no ranking of worth, just a way to find who knows about what.)"}),e.jsx("div",{style:{display:"grid",gap:7},children:n.slice(0,60).map(o=>e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:12},children:[e.jsx("span",{className:"display",style:{width:190,fontSize:14,fontWeight:500,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:o.label}),e.jsx("span",{style:{flex:1,height:8,background:s.ICE,borderRadius:99,overflow:"hidden"},children:e.jsx("span",{style:{display:"block",height:"100%",width:`${o.msgs/t*100}%`,background:s.BLUE,borderRadius:99}})}),e.jsxs("span",{className:"mono",style:{width:74,textAlign:"right",fontSize:11.5,color:s.SILVER},children:[o.msgs," · ",o.rooms,"r"]})]},o.label))})]})}function W({meta:i}){return e.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:24},children:[e.jsxs("div",{children:[e.jsxs("div",{className:"kick",style:{color:s.EMERALD,marginBottom:12},children:["Open questions (",i.questions.length,")"]}),e.jsx("div",{style:{display:"grid",gap:8},children:i.questions.map((t,n)=>e.jsxs("div",{className:"card",style:{padding:"12px 14px",borderLeft:`3px solid ${s.EMERALD}`},children:[e.jsx("div",{style:{fontSize:14,lineHeight:1.5,color:s.INK},children:t.label}),t.by&&e.jsx("div",{className:"mono",style:{color:s.DUST,fontSize:10.5,marginTop:6},children:t.by})]},n))})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"kick",style:{color:s.AMBER,marginBottom:12},children:["Decisions & directions (",i.decisions.length,")"]}),e.jsx("div",{style:{display:"grid",gap:8},children:i.decisions.map((t,n)=>e.jsxs("div",{className:"card",style:{padding:"12px 14px",borderLeft:`3px solid ${s.AMBER}`},children:[e.jsx("div",{style:{fontSize:14,lineHeight:1.5,color:s.INK},children:t.label}),t.by&&e.jsx("div",{className:"mono",style:{color:s.DUST,fontSize:10.5,marginTop:6},children:t.by})]},n))})]})]})}function H({meta:i}
20){const[t,n]=d.useState(null);return e.jsxs("div",{children:[e.jsxs("p",{style:{color:s.SILVER,fontSize:14,marginTop:-4,marginBottom:16},children:["Every photo, poster and image shared in the rooms â ",i.gallery.length," in all, kept with who shared it and when."]}),e.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(150px, 1fr))",gap:10},children:i.gallery.map((o,l)=>e.jsx("button",{onClick:()=>n(o),style:{padding:0,border:`1px solid ${s.GHOST}`,borderRadius:12,overflow:"hidden",cursor:"pointer",background:s.ICE,aspectRatio:"1 / 1"},children:e.jsx("img",{src:v(o.room,o.file),alt:o.caption||"shared image",loading:"lazy",style:{width:"100%",height:"100%",objectFit:"cover",display:"block"}})},l))}),t&&e.jsx("div",{onClick:()=>n(null),style:{position:"fixed",inset:0,background:"rgba(10,10,10,0.86)",zIndex:60,display:"grid",placeItems:"center",padding:24},children:e.jsxs("div",{onClick:o=>o.stopPropagation(),style:{maxWidth:900,maxHeight:"90vh",overflow:"auto"},children:[e.jsx("img",{src:v(t.room,t.file),alt:"",style:{width:"100%",borderRadius:12,display:"block"}}),e.jsxs("div",{style:{color:s.VOID,marginTop:12,fontSize:13.5},children:[e.jsxs("span",{className:"mono",style:{color:s.DUST},children:[t.roomTitle," · ",String(t.date).slice(0,10)," · ",t.author]}),t.caption&&e.jsx("p",{style:{marginTop:8,lineHeight:1.6},children:t.caption})]})]})})]})}function V({meta:i}){const t=Math.max(1,...i.timeline.map(o=>o.msg_count)),n=[...i.timeline].reverse();return e.jsxs("div",{style:{display:"grid",gap:12,maxWidth:760},children:[e.jsx("p",{style:{color:s.SILVER,fontSize:14,marginTop:-4},children:"The conversation month by month â how busy it was, and the room that carried it."}),n.map(o=>e.jsxs("div",{className:"card",style:{padding:"14px 16px"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:10},children:[e.jsx("span",{className:"display",style:{fontWeight:700,fontSize:16},children:k(o.date)}),e.jsxs("span",{className:"mono",style:{color:s.SILVER,fontSize:11.5},children:[o.msg_count," messages · ",o.topic_count," rooms · ",o.speaker_count," voices"]})]}),e.jsx("div",{style:{height:8,background:s.ICE,borderRadius:99,overflow:"hidden",margin:"10px 0"},children:e.jsx("div",{style:{height:"100%",width:`${o.msg_count/t*100}%`,background:s.ORANGE,borderRadius:99}})}),o.frame&&e.jsxs("div",{style:{color:s.GRAPHITE,fontSize:13.5},children:["Busiest: ",e.jsx("b",{children:o.frame})]})]},o.date))]})}export{O 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.