1import{m as k,h as w,r,o as T,P as N,j as e,d as z,F as B,an as p,B as S,ad as C}from"./index-_aijvlUq.js";import{p as I}from"./performances-duTJPchz.js";function E(){const{perfId:i}=k(),u=w(n=>n.currentOrg),[t,x]=r.useState(null),[g,m]=r.useState(null),[o,f]=r.useState(null),[a,j]=r.useState(null);r.useEffect(()=>{if(!i)return;let n=!1;return Promise.all([I.getById(i),T.generateToken({eventId:i,eventType:"performance",purpose:"audience"})]).then(async([s,y])=>{if(!n&&(x(s),f(`${window.location.origin}/app/audience/${y.token}`),s?.orgId))try{const v=await N.getById(s.orgId);n||m(v)}catch{}}).catch(s=>{n||j(s?.message||"Could not load")}),()=>{n=!0}},[i]),r.useEffect(()=>{if(!t||!o)return;const n=setTimeout(()=>{try{window.print()}catch{}},600);return()=>clearTimeout(n)},[t,o]);const l=r.useMemo(()=>t?[t.venueName,t.venueAddress,t.venueCity,t.venueState].filter(Boolean).join(", "):"",[t]);if(a)return e.jsxs(h,{children:["Couldn't generate the guide: ",a]});if(!t||!o)return e.jsx(h,{children:"Generating door-team guideâ¦"});const b=t.performanceDate?z(t.performanceDate):"TBD",c=t.performanceTime?B(t.performanceTime):null,d=g?.name||u?.name||t.orgName||"Your Band";return e.jsxs(e.Fragment,{children:[e.jsx("style",{children:P}),e.jsx(p,{children:e.jsx(S,{type:"button",variant:"primary",size:"md",onClick:()=>window.print(),children:"Print"})}),e.jsxs("main",{className:"audience-print",children:[e.jsxs("h1",{children:["Audience Counter â ",t.title]}),e.jsxs("p",{className:"subtitle",children:[d," · ",b,c?` at ${c}`:"",l?e.jsxs(e.Fragment,{children:[" · ",l]}):null]}),e.jsxs("div",{className:"top",children:[e.jsxs("div",{className:"qr-block",children:[e.jsx(C,{value:o,size:200,level:"M",includeMargin:!1}),e.jsx("div",{className:"caption",children:"Scan with your phone's camera"})]}),e.jsxs("div",{className:"intro",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"What this is:"})," a simple counting tool for tracking who walks in. Every tap adds one person to the running total. Counts go straight into our records for grant reports."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Who's using it:"})," the team manning the front door. Multiple volunteers can count at the same time on different phones â everyone's taps add to the same total live."]}),e.jsx("p",{className:"highlight",children:"If you can't scan: open your phone's browser and type the address at the bottom of this page."})]})]}),e.jsx("h2",{children:"How to start"}),e.jsxs("ol",{children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Scan the QR code above"})," with your phone's camera. Tap the link that pops up."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Tap the screen once"})," when the page opens. This wakes up the counter and keeps your screen on automatically."]}),e.jsx("li",{children:"You're ready. The big number at the top is the running total."})]}),e.jsxs("div",{className:"two-col",children:[e.jsxs("div",{children:[e.jsx("h2",{children:"Counting people"}),e.jsxs("ol",{children:[e.jsxs("li",{children:[e.jsx("strong",{children:"For each person walking in,"})," find their county, then tap ",e.jsx("strong",{children:"Adult"})," or ",e.jsx("strong",{children:"Child"}),"."]}),e.jsx("li",{children:"The number on that button jumps by one. The total at the top updates too."}),e.jsxs("li",{children:["Don't recognize their county? Tap the ",e.jsx("em",{children:"Other"})," tile."]})]}),e.jsxs("div",{className:"tip",children:[e.jsx("strong",{children:"Tip:"})," children = anyone who looks under 18. Don't worry about being precise â close is good enough."]})]}),e.jsxs("div",{children:[e.jsx("h2",{children:"Made a mistake?"}),e.jsxs("ol",{children:[e.jsxs("li",{children:["Tap the big gray ",e.jsx("strong",{children:"â© Undo last tap"})," button at the bottom of the screen."]}),e.jsx("li",{children:"Each tap of Undo removes the most recent count."}),e.jsx("li",{children:"Tap it multiple times to walk back several mistakes in a row."})]}),e.jsxs("div",{className:"tip",children:[e.jsx("strong",{children:"If your screen turns off:"})," just tap it to wake it up. Your counts are saved."]})]})]}),e.jsx("h2",{children:"Sharing with another volunteer"}),e.jsxs("ul",{children:[e.jsxs("li",{children:["Tap the ",e.jsx("strong",{children:"share icon"})," in the top-right corner of the counter."]}),e.jsx("li",{children:"Send the link by text, AirDrop, or however your phones talk to each other."}),e.jsx("li",{children:"The other volunteer opens the link â their counts merge into the same total."}),e.jsx("li",{children:"Or have them scan the same QR code on this sheet."})]}),e.jsx("h2",{children:"If something goes wrong"}),e.jsxs("ul",{children:[e.jsxs("li",{children:[e.jsx("strong",{children:`Counter won't open / says "Link expired":`})," find a board member â they can generate a fresh link in under a minute."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Tapped the wrong county and didn't notice r
1ight away:"})," no problem, leave it â we'd rather have an off-by-one than risk losing the running total."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Phone battery dying:"})," hand the link off to another volunteer using the share button."]})]}),e.jsxs("p",{className:"url-fallback",children:["Direct link (if the QR doesn't work):",e.jsx("br",{}),o]}),e.jsxs("div",{className:"footer",children:[e.jsxs("div",{className:"footer-brand",children:[e.jsx("img",{className:"footer-logo",src:"/brand/logo-icon.png",alt:"Backstage Baton"}),e.jsxs("div",{className:"footer-text",children:["Powered by ",e.jsx("strong",{children:"Backstage Baton"}),e.jsx("br",{}),e.jsx("span",{className:"tagline",children:"Membership hub for community bands · backstagebaton.com"})]})]}),e.jsxs("div",{className:"footer-meta",children:[d,e.jsx("br",{}),t.title]})]})]})]})}function h({children:i}){return e.jsxs(e.Fragment,{children:[e.jsx(p,{}),e.jsx("div",{className:"min-h-[80vh] flex items-center justify-center text-gray-500 text-sm px-6 text-center",children:i})]})}const P=` 2@page { size: letter; margin: 0.45in; } 3html, body { height: 100%; margin: 0; padding: 0; } 4.audience-print { 5 font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif; 6 color: #111827; 7 line-height: 1.35; 8 padding: 0; 9 max-width: 7.5in; 10 margin: 0 auto; 11 min-height: 100vh; 12 display: flex; 13 flex-direction: column; 14} 15.audience-print h1 { font-size: 19px; margin: 0 0 2px; color: #2e6b8a; } 16.audience-print .subtitle { font-size: 12px; color: #6b7280; margin: 0 0 10px; } 17.audience-print .top { display: flex; gap: 18px; align-items: flex-start; margin-bottom: 10px; } 18.audience-print .qr-block { flex: 0 0 200px; text-align: center; } 19.audience-print .qr-block svg { width: 200px; height: 200px; border: 1px solid #e5e7eb; } 20.audience-print .qr-block .caption { font-size: 10px; color: #6b7280; margin-top: 4px; } 21.audience-print .intro { flex: 1; font-size: 12px; } 22.audience-print .intro p { margin: 0 0 6px; } 23.audience-print .intro .highlight { 24 background: #fef3c7; 25 padding: 6px 8px; 26 border-radius: 6px; 27 font-weight: 500; 28 margin-top: 4px; 29} 30.audience-print h2 { 31 font-size: 13px; 32 color: #2e6b8a; 33 text-transform: uppercase; 34 letter-spacing: 0.06em; 35 margin: 8px 0 4px; 36 border-bottom: 1px solid #e5e7eb; 37 padding-bottom: 2px; 38} 39.audience-print ol, .audience-print ul { margin: 0 0 6px 0; padding-left: 20px; font-size: 11.5px; } 40.audience-print li { margin-bottom: 2px; } 41.audience-print .two-col { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; } 42.audience-print .tip { 43 background: #f0f6fa; 44 border-left: 3px solid #2e6b8a; 45 padding: 5px 8px; 46 font-size: 11px; 47 margin: 5px 0 0; 48} 49.audience-print .url-fallback { 50 font-family: Consolas, monospace; 51 font-size: 8.5px; 52 word-break: break-all; 53 background: #f3f4f6; 54 padding: 3px 5px; 55 border-radius: 4px; 56 color: #374151; 57 margin: 6px 0 0; 58} 59.audience-print .footer { 60 margin-top: auto; 61 padding-top: 8px; 62 border-top: 2px solid #2e6b8a; 63 display: flex; 64 align-items: center; 65 justify-content: space-between; 66 gap: 12px; 67} 68.audience-print .footer-brand { display: flex; align-items: center; gap: 8px; } 69.audience-print .footer-logo { 70 width: 28px; height: 28px; 71 flex-shrink: 0; 72 object-fit: contain; 73} 74.audience-print .footer-text { font-size: 10.5px; color: #374151; line-height: 1.3; } 75.audience-print .footer-text strong { color: #2e6b8a; font-weight: 700; } 76.audience-print .footer-text .tagline { color: #9ca3af; font-size: 9.5px; } 77.audience-print .footer-meta { 78 font-size: 10px; color: #4b5563; 79 text-align: right; line-height: 1.3; 80 font-weight: 500; 81} 82@media print { 83 body { padding: 0; } 84} 85`;export{E as PrintAudienceGuidePage};
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.