from reportlab.pdfgen import canvas from reportlab.lib.colors import HexColor, Color from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont from reportlab.lib.utils import simpleSplit from pathlib import Path OUT = Path('/Users/adolforeyna/brain/exports/emi_latin_america_vision_slides_2026-09-22.pdf') W,H = 960,540 BG=HexColor('#F7F3EA'); INK=HexColor('#172A25'); GREEN=HexColor('#1F5946'); MINT=HexColor('#CDE1D1'); GOLD=HexColor('#D7A850'); RUST=HexColor('#B9684C'); MUTED=HexColor('#62736A'); WHITE=HexColor('#FFFFFF'); PALE=HexColor('#EAE4D6') pdfmetrics.registerFont(TTFont('Georgia','/System/Library/Fonts/Supplemental/Georgia.ttf')) pdfmetrics.registerFont(TTFont('Arial','/System/Library/Fonts/Supplemental/Arial.ttf')) pdfmetrics.registerFont(TTFont('ArialB','/System/Library/Fonts/Supplemental/Arial Bold.ttf')) c=canvas.Canvas(str(OUT), pagesize=(W,H), pageCompression=1) c.setTitle('EMI | A Vision and Mission for Latin America') c.setAuthor('EMI — based on Vision_for_Latin_America_final.docx') def base(n, dark=False): c.setFillColor(INK if dark else BG); c.rect(0,0,W,H,fill=1,stroke=0) c.setFillColor(GOLD); c.setFont('ArialB',10); c.drawString(48,26,'EMI / LATIN AMERICA') c.setFillColor(Color(1,1,1,.50) if dark else MUTED); c.setFont('Arial',9); c.drawRightString(W-48,26,f'VISION • MISSION / {n:02d}') def txt(s,x,y,size=16,font='Arial',color=INK): c.setFillColor(color); c.setFont(font,size); c.drawString(x,y,s) def para(s,x,y,width,size=15,leading=22,font='Arial',color=INK): c.setFillColor(color); c.setFont(font,size) for line in simpleSplit(s,font,size,width): c.drawString(x,y,line); y-=leading return y def pill(s,x,y,fill=MINT,color=GREEN): c.setFont('ArialB',10); w=pdfmetrics.stringWidth(s,'ArialB',10)+24 c.setFillColor(fill); c.roundRect(x,y-6,w,24,12,fill=1,stroke=0) txt(s,x+12,y+1,10,'ArialB',color) def line(x1,y1,x2,y2,col=GOLD,width=2): c.setStrokeColor(col); c.setLineWidth(width); c.line(x1,y1,x2,y2) def circ(x,y,r,col): c.setFillColor(col); c.circle(x,y,r,fill=1,stroke=0) # 1 Cover base(1,True) c.setFillColor(GOLD); c.rect(0,0,12,H,fill=1,stroke=0) pill('A SHARED REGIONAL CALL',58,452,fill=HexColor('#315346'),color=HexColor('#F2D69A')) txt('A vision & mission',58,365,43,'Georgia',WHITE) txt('for Latin America',58,311,43,'Georgia',WHITE) para('One spiritual family, moving together to establish lasting expressions of the Kingdom of God.',60,250,470,19,29,'Arial',HexColor('#DDE6DF')) line(60,144,400,144,GOLD,3) txt('“Go and make disciples of all nations.”',60,112,17,'Georgia',HexColor('#F2D69A')) txt('MATTHEW 28:18–20',60,83,10,'ArialB',HexColor('#DDE6DF')) # abstract regional sunrise / connected people for i,(x,y,r) in enumerate([(660,300,76),(780,354,52),(826,236,66),(690,186,42),(746,275,18)]): circ(x,y,r,[GREEN,HexColor('#2E7556'),RUST,GOLD,MINT][i]) for a,b in [((660,300),(780,354)),((660,300),(826,236)),((660,300),(690,186)),((780,354),(826,236)),((690,186),(826,236))]: line(*a,*b,HexColor('#D5BC85'),1.5) c.showPage() # 2 north star base(2) pill('THE NORTH STAR',52,465) txt('The vision is bigger than a visit.',52,396,31,'Georgia') para('Rooted in Jesus’ commission, the regional vision is to see God’s Kingdom and family established among every ethnos—every nation, people, and people group.',55,343,720,17,25,'Arial',MUTED) # focal diagram circ(480,188,92,GREEN); txt('KINGDOM',430,197,16,'ArialB',WHITE); txt('& FAMILY',427,173,16,'ArialB',WHITE) for x,y,l in [(200,213,'NATIONS'),(760,213,'DISCIPLES'),(325,92,'BAPTIZE'),(635,92,'TEACH & OBEY')]: circ(x,y,42,MINT); c.setFillColor(GREEN); c.setFont('ArialB',10); c.drawCentredString(x,y-4,l) line(480,188,x,y,GOLD,1.5) txt('Not merely building churches: making disciples who learn to live Jesus’ way.',196,47,13,'Georgia',INK) c.showPage() # 3 mission base(3) pill('THE MISSION',52,465) txt('How the family carries the vision',52,403,30,'Georgia') para('A cohesive regional company works deliberately together so that the Kingdom takes root—and continues to grow.',55,359,780,16,23,'Arial',MUTED) # central circle & six branches cx,cy=480,203 circ(cx,cy,64,GREEN); c.setFillColor(WHITE); c.setFont('ArialB',12); c.drawCentredString(cx,cy+5,'ONE'); c.drawCentredString(cx,cy-13,'FAMILY') cards=[(183,277,'PRAYER','Shared spiritual life'),(480,278,'RELATIONSHIPS','Presence & trust'),(777,277,'DISCIPLESHIP','New believers & leaders'),(183,119,'PRACTICAL SERVICE','Medicine, business, education'),(480,79,'CROSS-POLLINATION','People, ideas & resources'),(777,119,'LASTING WORKS','Local roots & continuity')] for x,y,h,b in cards: line(cx,cy,x,y,GOLD,1.4); circ(x,y,5,RUST) txt(h,x-110,y+21,11,'ArialB',GREEN); txt(b,x-110,y+3,11,'Arial',MUTED) c.showPage() # 4 family and generations base(4,True) pill('A CORPORATE FAMILY',55,465,fill=HexColor('#315346'),color=HexColor('#F2D69A')) txt('From “my ministry”',55,386,32,'Georgia',WHITE) txt('to “our family”',55,344,32,'Georgia',WHITE) para('The mandate is shared. Each person has an assignment; each region has responsibility. We do not wait for someone else to carry what we can faithfully do together.',58,293,395,16,23,'Arial',HexColor('#DDE6DF')) # generational bridge line(565,220,846,220,GOLD,3) for x,label,sub,col in [(590,'MATURE','Coach • affirm',GREEN),(705,'TOGETHER','Share the work',RUST),(825,'EMERGING','Learn • lead',HexColor('#4F8066'))]: circ(x,220,39,col); c.setFillColor(WHITE); c.setFont('ArialB',10); c.drawCentredString(x,224,label) c.setFillColor(HexColor('#DDE6DF')); c.setFont('Arial',10); c.drawCentredString(x,165,sub) txt('Transition begins before it is urgent.',555,110,18,'Georgia',HexColor('#F2D69A')) para('Wisdom is passed on while experienced leaders can still coach and emerging leaders can grow into their place.',555,79,330,12,17,'Arial',HexColor('#DDE6DF')) c.showPage() # 5 establish not visit base(5) pill('THE OUTCOME',52,465) txt('Don’t only visit. Establish.',52,404,32,'Georgia') para('Evangelism opens the door. The mission is to build relationships and works that remain after the first visit.',55,358,760,16,23,'Arial',MUTED) # left-to-right progression steps=[('GO','Show up with purpose'),('CONNECT','Build trust & family'),('DISCIPLE','Form people & leaders'),('ESTABLISH','Root a lasting work'),('MULTIPLY','Equip others to carry it')] xs=[112,293,474,655,836] for i,((head,desc),x) in enumerate(zip(steps,xs)): col=GREEN if i in (0,3) else (RUST if i==4 else HexColor('#46745D')) circ(x,219,53,col); c.setFillColor(WHITE); c.setFont('ArialB',12); c.drawCentredString(x,215,head) if i<4: line(x+56,219,xs[i+1]-56,219,GOLD,2); circ((x+xs[i+1])/2,219,4,GOLD) c.setFillColor(MUTED); c.setFont('Arial',11) for j,l in enumerate(simpleSplit(desc,'Arial',11,130)): c.drawCentredString(x,143-j*15,l) # foundation c.setFillColor(PALE); c.roundRect(89,78,782,25,12,fill=1,stroke=0) c.setFillColor(GREEN); c.setFont('ArialB',10); c.drawCentredString(480,87,'RELATIONSHIPS • LOCAL LEADERS • SUSTAINABLE ROOTS • REGIONAL OWNERSHIP') c.showPage() # 6 priorities base(6) pill('START WITH THE NEXT FAITHFUL STEPS',52,465) txt('A regional agenda',52,404,32,'Georgia') items=[('01','ALIGN','One shared understanding of the vision'),('02','CONNECT','Strengthen relationships across the region'),('03','PRAY','Establish a shared rhythm of prayer'),('04','SHARE','Cross-pollinate strategies, gifts & resources'),('05','STRENGTHEN','Encourage existing open doors, including Chile'),('06','FOCUS','Choose a few clear priorities; build steadily')] for i,(num,head,body) in enumerate(items): col=i%2; row=i//2; x=57+col*438; y=319-row*96 c.setFillColor(WHITE); c.roundRect(x,y-53,400,72,13,fill=1,stroke=0) c.setFillColor(GOLD); c.setFont('Georgia',20); c.drawString(x+17,y-10,num) txt(head,x+65,y-3,12,'ArialB',GREEN) txt(body,x+65,y-26,12,'Arial',MUTED) c.showPage() # 7 gathering base(7,True) pill('THE LONGER HORIZON',55,465,fill=HexColor('#315346'),color=HexColor('#F2D69A')) txt('A gathering that becomes',55,392,31,'Georgia',WHITE) txt('a regional family in motion.',55,351,31,'Georgia',WHITE) para('The Latin American Family Gathering is not just an event. It can become a catalyst for shared life and ongoing collaboration.',58,301,680,16,23,'Arial',HexColor('#DDE6DF')) labels=['VISION','RELATIONSHIP','LEADERSHIP','PRAYER','COLLABORATION','OUTREACH','NEXT GENERATION'] for i,s in enumerate(labels): x=58+(i%4)*218; y=209-(i//4)*61 pill(s,x,y,fill=HexColor('#315346') if i%2==0 else HexColor('#3E6757'),color=HexColor('#F5EAD1')) line(58,86,874,86,GOLD,2) txt('One family. Shared responsibility. Lasting Kingdom work.',58,55,17,'Georgia',HexColor('#F2D69A')) txt('Based on the EMI “Vision for Latin America” source document.',58,38,9,'Arial',HexColor('#DDE6DF')) c.showPage() c.save() print(f'Wrote {OUT} ({OUT.stat().st_size} bytes; 7 slides)')