0% found this document useful (0 votes)
3 views11 pages

Build Script PDF

The document is a script for an episode titled 'FPSai — Episode Script & Blueprint,' detailing a narrative centered around a FIFA World Cup match. It includes various sections such as title options, emotional journey, a full 7-beat blueprint, and dialogue, structured using ReportLab for PDF generation. The script emphasizes themes of anticipation, emotional responses, and the dynamics of a group game experience.

Uploaded by

md.shihab.r
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views11 pages

Build Script PDF

The document is a script for an episode titled 'FPSai — Episode Script & Blueprint,' detailing a narrative centered around a FIFA World Cup match. It includes various sections such as title options, emotional journey, a full 7-beat blueprint, and dialogue, structured using ReportLab for PDF generation. The script emphasizes themes of anticipation, emotional responses, and the dynamics of a group game experience.

Uploaded by

md.shihab.r
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

build_script_pdf

1 # -*- coding: utf-8 -*-


2 from [Link] import letter
3 from [Link] import inch
4 from [Link] import colors
5 from [Link] import ParagraphStyle
6 from [Link] import TA_LEFT, TA_CENTER
7 from [Link] import (
8 SimpleDocTemplate, Paragraph, Spacer, PageBreak, Table, TableStyle, HRFlowab
le
9 )
10
11 INK = [Link]("#2b2b2b")
12 HEAD = [Link]("#1f3d3a")
13 ACCENT = [Link]("#c76b3c")
14 MUTED = [Link]("#6f6f6f")
15 LINE = [Link]("#d8d2c4")
16
17 def esc(t):
18 return [Link]("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
19
20 styles = {
21 "title": ParagraphStyle("title", fontName="Helvetica-Bold", fontSize=24, lea
ding=28,
22 textColor=HEAD, spaceAfter=6, alignment=TA_LEFT),
23 "subtitle": ParagraphStyle("subtitle", fontName="Helvetica-Oblique", fontSiz
e=12, leading=16,
24 textColor=MUTED, spaceAfter=18),
25 "h1": ParagraphStyle("h1", fontName="Helvetica-Bold", fontSize=15, leading=1
9,
26 textColor=HEAD, spaceBefore=18, spaceAfter=8),
27 "h2": ParagraphStyle("h2", fontName="Helvetica-Bold", fontSize=11.5, leading
=15,
28 textColor=ACCENT, spaceBefore=4, spaceAfter=4),
29 "label": ParagraphStyle("label", fontName="Helvetica-Bold", fontSize=9.5, le
ading=13,
30 textColor=HEAD, spaceBefore=10, spaceAfter=2),
31 "body": ParagraphStyle("body", fontName="Helvetica", fontSize=10, leading=14
,
32 textColor=INK, spaceAfter=6, alignment=TA_LEFT),
33 "small": ParagraphStyle("small", fontName="Helvetica", fontSize=8.5, leading
=12,
34 textColor=MUTED, spaceAfter=4),
35 "beat": ParagraphStyle("beat", fontName="Helvetica-Bold", fontSize=12.5, lea
ding=16,
36 textColor=[Link], spaceBefore=0, spaceAfter=0,
37 backColor=HEAD, borderPadding=(6, 8, 6, 8), alignmen
t=TA_LEFT),
38 "loc": ParagraphStyle("loc", fontName="Helvetica-BoldOblique", fontSize=9.5,

1
leading=13,
39 textColor=ACCENT, spaceBefore=8, spaceAfter=4, leftIn
dent=6),
40 "cue": ParagraphStyle("cue", fontName="Helvetica-Oblique", fontSize=9, leadi
ng=12,
41 textColor=MUTED, spaceBefore=2, spaceAfter=2, leftInd
ent=6),
42 "pause": ParagraphStyle("pause", fontName="Helvetica-Oblique", fontSize=9.5,
leading=13,
43 textColor=ACCENT, spaceBefore=2, spaceAfter=2, alig
nment=TA_CENTER),
44 "dialogue": ParagraphStyle("dialogue", fontName="Helvetica", fontSize=10.5,
leading=15,
45 textColor=INK, spaceAfter=5, leftIndent=6),
46 }
47
48 def P(text, style="body"):
49 return Paragraph(esc(text), styles[style])
50
51 def hrule(color=LINE, w=1, space_before=6, space_after=6):
52 return [Spacer(1, space_before), HRFlowable(width="100%", thickness=w, color
=color), Spacer(1, space_after)]
53
54 story = []
55
56 # ---------- TITLE PAGE ----------
57 [Link](Spacer(1, 0.3 * inch))
58 [Link](P(" FPSai — Episode Script &amp; Blueprint", "title"))
59 [Link](P("Master Prompt 1 (Script Generator) + Master Prompt 2 (Dialogue G
enerator) output · Built on Channel Bible V8.0", "subtitle"))
60 [Link](hrule())
61
62 [Link](P("Nobody Warned Me I'd Feel This Much About a Group Game", "h1"))
63 [Link](P("Argentina vs. Austria — FIFA World Cup 2026, Group J", "subtitle
"))
64
65 meta_rows = [
66 ["TARGET RUNTIME", "10 minutes"],
67 ["THUMBNAIL CONCEPT", "[DEAD STARE], dark background, cold mug as the one cu
riosity object. Overlay text: \u201cSTILL NOT OKAY\u201d (3 words)."],
68 ["ONE-LINE PREMISE", "Sai sits down for a routine group-stage game and ends
up watching a 38-year-old rewrite the record books \u2014 then has no idea wh
at to do with a good outcome."],
69 ["CATS IN EPISODE", "Pepsi (cameo, Beat 3) \u00b7 Casper (Beat 1, 5, 6) \u00
b7 Simba (cameo, Beat 6, for Council quorum)"],
70 ["SANCTUARY SECTIONS", "One \u2014 inside Beat 6, a wordless memory of watch
ing this player for the first time. [SOFT] only, amber Memory Palette."],
71 ["VIRAL MOMENT", "Beat 5 \u2014 the room goes dead silent instead of eruptin
g the instant the record-breaking goal lands; one cat meow breaks it. Works o
n mute, pays off in under 10 seconds."],
72 ["CHAOS RULE", "Omits the Spiral. Beat 6 plays as a hush that gets quieter,
not louder \u2014 restrained instead of chaotic, to match the real tone of th

2
e night."],
73 ]
74 t = Table(meta_rows, colWidths=[1.5 * inch, 4.9 * inch])
75 [Link](TableStyle([
76 ("FONTNAME", (0, 0), (0, -1), "Helvetica-Bold"),
77 ("FONTNAME", (1, 0), (1, -1), "Helvetica"),
78 ("FONTSIZE", (0, 0), (-1, -1), 9),
79 ("TEXTCOLOR", (0, 0), (0, -1), HEAD),
80 ("TEXTCOLOR", (1, 0), (1, -1), INK),
81 ("VALIGN", (0, 0), (-1, -1), "TOP"),
82 ("LINEBELOW", (0, 0), (-1, -1), 0.5, LINE),
83 ("TOPPADDING", (0, 0), (-1, -1), 6),
84 ("BOTTOMPADDING", (0, 0), (-1, -1), 6),
85 ]))
86 [Link](Spacer(1, 10))
87 [Link](t)
88
89 [Link](PageBreak())
90
91 # ---------- TITLE OPTIONS ----------
92 [Link](P("Video Title Options", "h1"))
93 titles = [
94 ("A \u2014 Emotional", "Nobody Warned Me I'd Feel This Much About a Group Ga
me"),
95 ("B \u2014 Curiosity Gap", "He Missed The Penalty. Then He Rewrote History."
),
96 ("C \u2014 Search", "Messi's Record-Breaking Night vs Austria \u2014 World C
up 2026"),
97 ]
98 for label, txt in titles:
99 [Link](P(label, "h2"))
100 [Link](P(txt, "body"))
101 [Link](hrule())
102
103 # ---------- EMOTIONAL JOURNEY ----------
104 [Link](P("Emotional Journey", "h1"))
105 journey = [
106 ("BEAT 1", "Frozen confusion \u2014 something huge just happened and Sai is
the last to know."),
107 ("BEAT 2", "Warm, doomed confidence \u2014 rituals locked in, nothing can go
wrong."),
108 ("BEAT 3", "Deflating shock \u2014 the plan breaks in under ten minutes."),
109 ("BEAT 4", "Anxious respect \u2014 grudging admiration for the opponent curd
ling into real tension."),
110 ("BEAT 5", "Disbelief tipping into awe \u2014 a routine goal turns out to be
history."),
111 ("BEAT 6", "Quiet overwhelm \u2014 memory, then release, then not knowing ho
w to feel good."),
112 ("BEAT 7", "Warm gratitude \u2014 appreciation for everyone who earned it, e
yes already on what's next."),
113 ]
114 for b, txt in journey:

3
115 [Link](P(f"{b} \u2014 {txt}", "body"))
116 [Link](hrule())
117
118 # ---------- BLUEPRINT ----------
119 [Link](P("Full 7-Beat Blueprint", "h1"))
120 blueprint = [
121 ("BEAT 1 \u2014 HOOK", "TV Room",
122 "Cold open on Sai frozen mid-sip; the record-breaking goal has already land
ed off-screen. Casper's mid-air comedy fall breaks the tension for one beat.
Ends on the open loop: \u201clet's go back nine minutes.\u201d"),
123 ("BEAT 2 \u2014 FALSE CONFIDENCE", "Kitchen \u2192 TV Room",
124 "Sai's full pre-match ritual \u2014 the mug, the seat, the unspoken clean-s
heet jinx, the one-line group chat message. Catastrophically confident this i
s a routine group-stage win."),
125 ("BEAT 3 \u2014 FIRST FRICTION", "TV Room",
126 "Under ten minutes in, Argentina win and then miss a penalty. Pepsi deliver
s one flat meow. Methodical Roaster energy as the confident plan collapses in
stantly."),
127 ("BEAT 4 \u2014 ESCALATION CYCLES", "TV Room",
128 "Three cycles of Argentina probing and Austria's captain denying them at th
e last second, twice. Fan-level analysis, no tactics jargon, plus context on
Austria's own stakes: first World Cup since 1998, chasing a knockout stage th
ey haven't reached since 1954."),
129 ("BEAT 5 \u2014 MIDPOINT TWIST", "TV Room",
130 "The 38th-minute goal lands \u2014 and turns out to be a record-breaking on
e. [VIRAL MOMENT] The room goes silent instead of loud; Casper's single meow
becomes the punctuation."),
131 ("BEAT 6 \u2014 TENSION + DEFLATION", "TV Room (Sanctuary flashback)",
132 "A quiet stretch of second-half football lets Sai's mind drift into a soft,
wordless memory of watching this player for the first time, twenty years ago
. Snapped back for a tense stoppage-time sequence and a second goal that seal
s it. Sai doesn't celebrate \u2014 he just sits with it. CHAOS RULE applied h
ere: the usual 3-line Spiral is deliberately skipped."),
133 ("BEAT 7 \u2014 REFRAME + BUTTON", "TV Room \u2192 Kitchen",
134 "Honest appreciation for both sides, plus a preview of Argentina's Round of
32 date with World Cup debutants Cape Verde, the smallest nation left in the
tournament. Soft button: \u201cWe'll see.\u201d Post-credit teases the next
ritual."),
135 ]
136 for name, loc, desc in blueprint:
137 [Link](P(name, "h2"))
138 [Link](P(f"Location: {loc}", "small"))
139 [Link](P(desc, "body"))
140 [Link](hrule())
141
142 # ---------- OPEN LOOPS / SHORTS / ANTI-MONOTONY ----------
143 [Link](P("Open Loops", "h1"))
144 loops = [
145 "What actually happened in the nine-ish minutes before this frozen mug?",
146 "Will the ritual survive contact with an actual penalty kick?",
147 "Is Austria's captain going to keep doing this all match?",
148 "Is the second half really going to be as slow as it looks?",

4
149 "Did that goal just break a record \u2014 and whose?",
150 "What do you actually do with your hands when the good outcome happens?",
151 "Who is this tiny country everyone's suddenly adopted, and why does Sai alre
ady care?",
152 ]
153 for i, l in enumerate(loops, 1):
154 [Link](P(f"{i}. {l}", "body"))
155
156 [Link](P("Shorts Moments", "h1"))
157 shorts = [
158 ("Short 1 (Viral Moment)", "The dead-silence + Casper meow the instant the r
ecord-breaking goal lands (Beat 5)."),
159 ("Short 2 (Deflation)", "\u201cI don't know what to do with a good outcome.
I have never practiced this.\u201d (Beat 6)"),
160 ("Short 3 (Sanctuary)", "The twenty-years-watching-him memory (Beat 6)."),
161 ]
162 for label, txt in shorts:
163 [Link](P(label, "h2"))
164 [Link](P(txt, "body"))
165
166 [Link](P("Anti-Monotony Notes", "h1"))
167 notes = [
168 "Rule 3 subversion (every 10 videos): Argentina wins comfortably and histori
cally, yet Deflation still fires \u2014 Sai doesn't know what to do with an u
nambiguously good outcome.",
169 "Chaos Rule: the Spiral mechanic is deliberately swapped for a quieter, hush
-toned equivalent in Beat 6, matching the real tone of the night instead of f
orcing manufactured chaos onto a genuinely earned, respectful sports moment."
,
170 "Low-meme back half: comedy is front-loaded into Beats 1\u20134; Beats 5\u20
137 lean on warmth and restraint (Rule 2's \u2018almost no jokes\u2019 tonal
wildcard) rather than the Evergreen Meme Vault.",
171 ]
172 for i, n in enumerate(notes, 1):
173 [Link](P(f"{i}. {n}", "body"))
174
175 [Link](PageBreak())
176
177 # ---------- FULL DIALOGUE ----------
178 [Link](P("Full Dialogue \u2014 Master Prompt 2 Output", "h1"))
179 [Link](P("One sentence per line. (pause) = 1\u20132 sec \u00b7 (long pause
) = 3\u20134 sec. Format matches Section 12 exactly.", "small"))
180 [Link](Spacer(1, 8))
181
182 DIALOGUE = """ BEAT 1: HOOK
183 [LOCATION: TV Room]
184 The ball is already in the net.
185 I don't know that yet.
186 My mug is stuck halfway to my mouth.
187 Coffee. Going cold. In real time.
188 [CAT ENTERS: Casper — leaps for the armrest, misses, slides off camera]
189 Casper just fell off the couch.

5
190 Nobody reacts. Not even Casper.
191 The wall clock says 3:14. It has said 3:14 since the day I got it.
192 (long pause)
193 Something enormous just happened in this room.
194 Let's go back nine minutes.
195
196 BEAT 2: FALSE CONFIDENCE
197 [LOCATION: Kitchen]
198 Under ten minutes ago, I was calm.
199 This is a group-stage game. Third one. Should be routine.
200 Panda Behavior Activated: same mug, every single time, no exceptions.
201 Kettle on. Two minutes, not one, not three. The ritual has rules.
202 For the love of bamboo, I will not say the words "clean sheet" out loud.
203 I didn't say it. I thought it so loud it doesn't count.
204 [LOCATION: TV Room]
205 Seat secured. Cushion angle correct. Lighting: acceptable.
206 Group chat opened. One message sent. "He's got this."
207 Three replies in nine seconds. Nobody in that chat has ever once been right abou
t anything.
208 Didn't move during the anthem.
209 Won't move during a single penalty either, if it comes to that.
210 Every fan has a version of this ritual, and every fan knows it changes nothing.
211 We do it anyway.
212 Catastrophically confident, as always, about a plan I have not tested once.
213
214 BEAT 3: FIRST FRICTION
215 [LOCATION: TV Room]
216 Not even ten minutes in. Penalty. Argentina.
217 He steps up. Of course he steps up.
218 I don't move. Per the plan.
219 [CAT ENTERS: Pepsi — one flat meow from the doorway, then gone]
220 That was Pepsi's entire review of the situation.
221 The shot goes wide.
222 Not saved. Not blocked. Wide.
223 (pause)
224 Ten minutes of confidence, gone in one kick.
225 Son of a biscuit.
226 The room goes quiet the way rooms do after a bad idea.
227 This is the part every fan recognizes and nobody enjoys — the missed chance that
might matter later, replaying itself for no reason.
228 Twenty-something minutes pass. Barely anything happens.
229 WHICH MEANS this is somehow the tense part.
230
231 BEAT 4: ESCALATION CYCLES
232 [LOCATION: TV Room]
233 Minute nineteen. He's in. Clean. Alone with the keeper.
234 BUT a man in yellow gets there first.
235 Austria's captain. Again.
236 Minute thirty-one. Same story. Different angle.
237 Him again. Near post. Denied.
238 THEREFORE I now have a nemesis who has no idea I exist.
239 He's genuinely one of the best defenders left in this tournament, by the way.

6
240 I looked that up during the break.
241 I am now, unofficially, a fully credentialed expert.
242 One finger up. Full confidence. Zero actual qualifications.
243 Here's the honest fan take, not the expert one — nobody out there is playing bad
ly.
244 Austria came to make this difficult on purpose, and it's working. Painfully well
.
245 This is also their first World Cup since 1998.
246 Their first shot at a knockout stage since 1954.
247 SO every one of their players is playing like it's the only night that will ever
matter.
248 Because for a lot of them, it genuinely might be.
249 Meanwhile our goalkeeper has had exactly one thing to do all half, and he did it
.
250 Twenty-plus minutes. One shot on target. Total. Combined. Both teams.
251 This is either a chess match or one of the longest naps I've ever half-watched.
252 Possibly both, at the exact same time.
253 Halftime approaches, and nobody in this room has finished a full sentence in fou
r minutes.
254
255 BEAT 5: MIDPOINT TWIST
256 [LOCATION: TV Room]
257 Minute thirty-eight.
258 The ball moves through three players like it's one brain thinking out loud.
259 One man lets it run straight through his own legs, no touch, pure trust.
260 It lands at his feet. Alone. Open net in front of him.
261 He doesn't celebrate right away.
262 He just stands there, half a second too long.
263 [VIRAL MOMENT START]
264 BUT the commentary isn't saying a name anymore. It's saying a number.
265 Seventeen.
266 THEREFORE this stopped being just a goal about four seconds ago.
267 Most goals scored by anyone, ever, at a World Cup. In the history of the tournam
ent. Full stop.
268 More than a striker who did this for over a decade before him.
269 My mug is still in my hand. I have forgotten it exists entirely.
270 The room doesn't erupt.
271 It goes completely silent. For one full second.
272 Then, from across the room, one meow.
273 Casper. Like even the cat understood the assignment.
274 (pause)
275 Nobody in this room says anything for a while.
276 [VIRAL MOMENT END]
277
278 BEAT 6: TENSION + DEFLATION
279 [LOCATION: TV Room]
280 [SHORTS CLIP START]
281 [SANCTUARY START]
282 Somewhere in the second half, the game goes quiet again.
283 Not much happening on screen.
284 So my brain wanders somewhere else instead.
285 (pause)

7
286 I remember watching him for the first time.
287 Some year I can't fully place anymore.
288 Some room that wasn't this one.
289 He was thinner then. Faster. Already a little bit magic.
290 (pause)
291 Twenty years is a strange amount of time to watch one person stay this good.
292 It doesn't feel like twenty years.
293 It feels like one long night that kept going.
294 [SANCTUARY END]
295 [SHORTS CLIP END]
296 BUT the second half is, if we're honest, a little slow.
297 Nothing wrong with slow. Just true.
298 SO the room settles into something quieter than panic.
299 Substitutions roll through both benches. Legs are tired. Ours. Theirs. Mine too,
somehow, from tension alone.
300 Austria push forward looking for anything. A corner, cleared. A half-chance, wid
e.
301 The clock bleeds toward ninety with the score still one-nil, and one-nil always
feels breakable.
302 Minute ninety. Stoppage time. The board goes up. Five more minutes.
303 A shot. Saved.
304 The rebound falls to him again.
305 First effort — blocked.
306 Second effort —
307 (long pause)
308 In.
309 Eighteen.
310 Full time. Two-nil.
311 (pause)
312 [SHORTS CLIP START]
313 I don't know what to do with a good outcome.
314 I have never practiced this.
315 [CAT ENTERS: Casper — walks across the coffee table, unbothered]
316 [CAT ENTERS: Simba — appears in the doorway, does the slow blink]
317 The Council has arrived. Late. But arrived.
318 [SHORTS CLIP END]
319
320 BEAT 7: REFRAME + BUTTON
321 [LOCATION: TV Room]
322 Here's the honest part.
323 Missing a penalty in the first ten minutes ends most nights badly.
324 He missed it, kept playing, and finished with two goals and a record that stood
since before some of his own teammates were born.
325 That's not luck. That's just who he is at this point.
326 Thirty-eight years old and still doing this. Built different, apparently.
327 Six World Cups now. No outfield player has played more.
328 Only two other men in the sport's history have ever scored across six straight W
orld Cup games.
329 Now there are three.
330 Austria's captain earned his whole evening too.
331 Twice he stood directly in the way of history, and meant it.
332 Their own forward admitted afterward that the second goal stung worse than the f

8
irst, purely on the goal-difference math, not the pride.
333 That's a professional's complaint. Respect earned either way.
334 Nobody in that game phoned it in tonight. Not once.
335 Group stage: finished. Top of the group. Not one goal conceded across three game
s.
336 Next up, Round of 32: Cape Verde.
337 Research Mode Engaged, briefly. Roughly half a million people. An island nation
off West Africa most brackets hadn't heard of a month ago.
338 Their first-ever World Cup match was a scoreless draw against Spain.
339 Then a draw with Uruguay. Then a draw with Saudi Arabia.
340 Three games. Zero losses. A run that got them here.
341 Everyone's adopted second team right now, and they didn't even have to ask.
342 On paper, this next one should be simple.
343 BUT the smallest team left in this entire tournament is playing with the biggest
heart in it.
344 That's exactly the kind of game that humbles a favorite.
345 We'll be here either way.
346 (pause)
347 We'll see.
348
349 POST-CREDIT
350 [LOCATION: Kitchen]
351 New mug already out. The ritual is under review.
352 Same time. Different country. Same me.
353 Cut."""
354
355 for raw_line in [Link]("\n"):
356 s = raw_line.strip()
357 if not s:
358 [Link](Spacer(1, 4))
359 continue
360 if [Link](""):
361 [Link](Spacer(1, 10))
362 [Link](P([Link](" "), "beat"))
363 [Link](Spacer(1, 6))
364 elif [Link]("[LOCATION:"):
365 [Link](P(s, "loc"))
366 elif [Link]("[") and [Link]("]"):
367 [Link](P(s, "cue"))
368 elif s in ("(pause)", "(long pause)"):
369 [Link](P(s, "pause"))
370 else:
371 [Link](P(s, "dialogue"))
372
373 [Link](PageBreak())
374
375 # ---------- QC + SOURCING ----------
376 [Link](P("Light QC Checklist \u2014 Self-Audit", "h1"))
377 qc_rows = [
378 ["Opens in crisis / mid-story?", "PASS \u2014 cold open on the frozen reacti
on, pre-reveal."],
379 ["False confidence doomed?", "PASS \u2014 ritual is set up in Beat 2, broken

9
in Beat 3."],
380 ["5+ open loops?", "PASS \u2014 7 logged."],
381 ["Midpoint twist?", "PASS \u2014 the goal reframes into a record."],
382 ["Spiral has 3 versions?", "N/A by design \u2014 Chaos Rule swaps it for a h
ush; logged."],
383 ["Deflation follows?", "PASS \u2014 \u201cgood outcome\u201d line, Beat 6."]
,
384 ["Sai doesn't preach?", "PASS \u2014 observational, fan-voice framing throug
hout."],
385 ["Button ending?", "PASS \u2014 \u201cWe'll see.\u201d"],
386 ["Post-credit, 10\u201320 sec?", "PASS \u2014 Next Event Tease flavor."],
387 ["Three Locations Rule?", "PASS \u2014 every scene is TV Room or Kitchen; Sa
nctuary is the sanctioned exception."],
388 ["Character locked (black hair/beard)?", "PASS \u2014 confirmed in every ima
ge prompt."],
389 ["Runtime states target, scales images?", "PASS \u2014 10 min stated; image
math in the companion Image Prompts file."],
390 ["80/20 slang, none in Sanctuary?", "PASS \u2014 originals dominant; Sanctua
ry is slang-free."],
391 ]
392 t2 = Table(qc_rows, colWidths=[2.6 * inch, 3.8 * inch])
393 [Link](TableStyle([
394 ("FONTNAME", (0, 0), (-1, -1), "Helvetica"),
395 ("FONTSIZE", (0, 0), (-1, -1), 8.7),
396 ("TEXTCOLOR", (0, 0), (0, -1), HEAD),
397 ("TEXTCOLOR", (1, 0), (1, -1), INK),
398 ("VALIGN", (0, 0), (-1, -1), "TOP"),
399 ("LINEBELOW", (0, 0), (-1, -1), 0.4, LINE),
400 ("TOPPADDING", (0, 0), (-1, -1), 5),
401 ("BOTTOMPADDING", (0, 0), (-1, -1), 5),
402 ]))
403 [Link](t2)
404
405 [Link](Spacer(1, 16))
406 [Link](P("Grounded In Reality", "h1"))
407 [Link](P(
408 "This episode is built on the actual Argentina 2\u20130 Austria Group J matc
h played June 22, 2026 "
409 "at Dallas Stadium (Messi's penalty miss, the 38' and 90+5' goals, the Klose
record, Alaba's saves) "
410 "and the confirmed Round of 32 pairing with Cape Verde (Miami, July 3). One
note: a real, serious "
411 "off-pitch legal matter involving a Cape Verde player surfaced in research a
nd has been deliberately "
412 "left out of this script \u2014 it has no place in a comedy reaction format,
and no individual player is "
413 "named on the Cape Verde side for that reason. Stick to the team-level story
(population, the three "
414 "draws, the goalkeeper's heroics) if you want to keep praising them by name,
verify the specific player "
415 "first.", "small"))
416

10
417 doc = SimpleDocTemplate(
418 "/home/claude/FPSai_ArgentinaAustria_Script.pdf",
419 pagesize=letter,
420 leftMargin=0.75 * inch, rightMargin=0.75 * inch,
421 topMargin=0.75 * inch, bottomMargin=0.75 * inch,
422 title="FPSai - Argentina vs Austria - Script and Blueprint",
423 )
424 [Link](story)
425 print("Built script PDF.")
426

11

You might also like