Se faccio 20’000 passi al giorno per un mese, evito dolci, mangio poco e sano. Bevo 2 litri. Quanto riesco a smagrire viso, gambe, braccia, coscie, glutei, braccia?
20000 steps a day weight loss results 1 month calorie burn
dimagrire localizzato gambe coscie glutei viso passi camminata risultati
| Peso corporeo | Calorie/giorno (20k passi) |
|---|---|
| 55-60 kg | ~600-650 kcal |
| 70-75 kg | ~750-830 kcal |
| 85-90 kg | ~900-1000 kcal |
Perdita realistica di grasso puro: 3-5 kg in 30 giorni Più una riduzione della ritenzione idrica di 0,5-1,5 kg nelle prime settimane grazie ai 2 litri d'acqua e all'eliminazione degli zuccheri.
| Fattore | Impatto |
|---|---|
| Sesso | Le donne perdono più lentamente nelle cosce/glutei (depositi di estrogeni) |
| Età | Sopra i 40 anni il metabolismo è più lento, i risultati sono leggermente meno rapidi |
| Punto di partenza | Chi ha più grasso da perdere vede risultati più rapidi all'inizio |
| Genetica | Determina l'ordine con cui il corpo "smonta" il grasso da ogni zona |
| Qualità del sonno | Dormire poco eleva il cortisolo e blocca il dimagrimento |
| Zona | Perdita stimata |
|---|---|
| Peso totale | -3 a -5 kg (grasso + acqua) |
| Girovita | -3 a -6 cm |
| Coscia | -1 a -3 cm |
| Viso | Notevolmente più definito |
| Braccia | Leggermente più sottili |
| Glutei | Più tonici, forma migliorata |
⚠️ Nota importante: Il "dimagrimento localizzato" (scegliere dove dimagrire) non esiste scientificamente - il corpo brucia il grasso in modo sistemico, seguendo un ordine determinato dalla genetica e dagli ormoni. Però certi esercizi tonificano muscoli specifici, rendendo quella zona visivamente più definita.
Corpo attuale. Voglio raggiungere una cosa simile alla seconda foto. Integrami esercizi e tutto necessario
⚠️ Onestà importante: il corpo della foto 2 ha probabilmente corpo fat intorno al 18-20% con una struttura ossea favorevole. Il tuo obiettivo realistico in 60-90 giorni è avvicinarti molto a quella forma, non necessariamente replicarla esattamente (la genetica delle ossa del bacino è fissa). Ma la trasformazione sarà molto visibile.
| Esercizio | Serie x Rip | Note |
|---|---|---|
| Squat classico | 4 x 15 | Piedi a larghezza spalle, scendi fino a 90° |
| Sumo squat | 3 x 15 | Piedi larghi, punta fuori - mira all'interno coscia |
| Hip thrust (con zaino pesante o borsa) | 4 x 12 | Schiena sul bordo del letto, spingi i fianchi in alto |
| Reverse lunge (affondi indietro) | 3 x 12 per gamba | Più sicuro del lunge classico per le ginocchia |
| Donkey kick (a 4 zampe) | 3 x 20 per gamba | Calcio indietro e in alto, strizza il gluteo in cima |
| Abductor raise (in piedi) | 3 x 20 per gamba | Gamba a lato, lenta e controllata |
| Wall sit | 3 x 45 sec | Schiena al muro, coscie parallele al pavimento |
| Esercizio | Serie x Rip | Note |
|---|---|---|
| Plank frontale | 3 x 40 sec → arriva a 60 sec | Core, non inarcare la schiena |
| Plank laterale | 3 x 30 sec per lato | Vita + obliqui - chiave per la "clessidra" |
| Crunch bicicletta | 3 x 20 | Obliqui + addome completo |
| Dead bug | 3 x 12 per lato | Perfetto per pianare la pancia bassa |
| Leg raise | 3 x 15 | Pancia bassa, le più difficili da perdere |
| Push up modificati | 3 x 12 | Sulle ginocchia se necessario - braccia + petto |
| Tricep dips (su sedia) | 3 x 12 | Elimina la "carne in eccesso" sotto il braccio |
| Shoulder tap | 3 x 15 per lato | Spalle + core contemporaneamente |
| Macro | Quantità | Perché |
|---|---|---|
| Proteine | 100-130g/giorno | Preserva e costruisce il muscolo mentre bruci grasso |
| Carboidrati | 100-150g/giorno | Energia per gli allenamenti, preferire integrali |
| Grassi | 50-60g/giorno | Ormoni, pelle, sazietà |
| Tempo | Risultati attesi |
|---|---|
| Settimana 1-2 | Meno gonfiore, viso più definito, -1-2 kg (acqua + inizio grasso) |
| Settimana 3-4 | Coscie visibilmente meno piene, vita che inizia a definirsi, -2-3 kg totali |
| Mese 2 | Glutei tonificati e sollevati, addome più piatto, coscie con gap iniziale visibile |
| Mese 3 | Silhouette notevolmente cambiata, -5-8 kg di grasso, fisico vicino all'obiettivo |
Generare un PDF con il programma di allenamento stampabile
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "created"
mkdir -p /tmp/workspace/fitness-plan && python3 << 'EOF' from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.units import cm, mm from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, KeepTogether from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT from reportlab.platypus import PageBreak doc = SimpleDocTemplate( "/tmp/workspace/fitness-plan/programma_allenamento.pdf", pagesize=A4, rightMargin=1.8*cm, leftMargin=1.8*cm, topMargin=2*cm, bottomMargin=2*cm, title="Programma di Allenamento Personalizzato", author="Piano Fitness Personalizzato" ) # Colors PINK = colors.HexColor('#E8A0B0') PINK_DARK = colors.HexColor('#C96A85') PINK_LIGHT = colors.HexColor('#FDF0F3') GREY = colors.HexColor('#4A4A4A') LIGHT_GREY = colors.HexColor('#F5F5F5') MEDIUM_GREY = colors.HexColor('#9E9E9E') BLACK = colors.HexColor('#222222') GREEN = colors.HexColor('#6DB47E') GREEN_LIGHT = colors.HexColor('#EEF7F0') ORANGE = colors.HexColor('#E8955A') ORANGE_LIGHT = colors.HexColor('#FFF4EE') BLUE = colors.HexColor('#5A8AB4') BLUE_LIGHT = colors.HexColor('#EEF4FA') styles = getSampleStyleSheet() # Custom styles title_style = ParagraphStyle('Title', fontName='Helvetica-Bold', fontSize=22, textColor=PINK_DARK, alignment=TA_CENTER, spaceAfter=4, leading=26) subtitle_style = ParagraphStyle('Sub', fontName='Helvetica', fontSize=11, textColor=GREY, alignment=TA_CENTER, spaceAfter=2) section_title = ParagraphStyle('SecTitle', fontName='Helvetica-Bold', fontSize=13, textColor=PINK_DARK, spaceBefore=10, spaceAfter=6, leading=16) day_title = ParagraphStyle('DayTitle', fontName='Helvetica-Bold', fontSize=11, textColor=colors.white, alignment=TA_CENTER, leading=14) body_style = ParagraphStyle('Body', fontName='Helvetica', fontSize=9, textColor=BLACK, leading=13, spaceAfter=3) note_style = ParagraphStyle('Note', fontName='Helvetica-Oblique', fontSize=8, textColor=MEDIUM_GREY, leading=11, spaceAfter=2) table_header = ParagraphStyle('TH', fontName='Helvetica-Bold', fontSize=9, textColor=colors.white, alignment=TA_CENTER, leading=12) table_cell = ParagraphStyle('TC', fontName='Helvetica', fontSize=8.5, textColor=BLACK, leading=11, alignment=TA_LEFT) table_cell_center = ParagraphStyle('TCC', fontName='Helvetica', fontSize=8.5, textColor=BLACK, leading=11, alignment=TA_CENTER) table_note = ParagraphStyle('TN', fontName='Helvetica-Oblique', fontSize=7.5, textColor=MEDIUM_GREY, leading=10, alignment=TA_LEFT) label_style = ParagraphStyle('Label', fontName='Helvetica-Bold', fontSize=9, textColor=PINK_DARK, leading=11, spaceAfter=1) check_style = ParagraphStyle('Check', fontName='Helvetica', fontSize=9, textColor=BLACK, leading=14, spaceAfter=0) story = [] W = A4[0] - 3.6*cm # usable width # ─── HEADER ───────────────────────────────────────────────────────────────── story.append(Spacer(1, 0.3*cm)) story.append(Paragraph("💪 PROGRAMMA DI ALLENAMENTO", title_style)) story.append(Paragraph("Piano personalizzato · 3 mesi · Corpo lean hourglass", subtitle_style)) story.append(Spacer(1, 0.2*cm)) story.append(HRFlowable(width="100%", thickness=2, color=PINK_DARK, spaceAfter=10)) # ─── OVERVIEW BOX ──────────────────────────────────────────────────────────── overview_data = [ [Paragraph("<b>🗓 Durata</b>", table_cell_center), Paragraph("<b>🏃 Passi/giorno</b>", table_cell_center), Paragraph("<b>💪 Sessioni/sett.</b>", table_cell_center), Paragraph("<b>💧 Acqua</b>", table_cell_center)], [Paragraph("3 mesi", table_cell_center), Paragraph("20.000", table_cell_center), Paragraph("4 + cardio", table_cell_center), Paragraph("2+ litri", table_cell_center)], ] overview_table = Table(overview_data, colWidths=[W/4]*4) overview_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), PINK_DARK), ('BACKGROUND', (0,1), (-1,1), PINK_LIGHT), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 9), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('ALIGN', (0,0), (-1,-1), 'CENTER'), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('ROWBACKGROUNDS', (0,1), (-1,-1), [PINK_LIGHT]), ('BOX', (0,0), (-1,-1), 1, PINK_DARK), ('INNERGRID', (0,0), (-1,-1), 0.5, PINK), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6), ('ROUNDEDCORNERS', [4]), ])) story.append(overview_table) story.append(Spacer(1, 0.5*cm)) # ─── SETTIMANA TIPO ────────────────────────────────────────────────────────── story.append(Paragraph("📅 STRUTTURA SETTIMANALE", section_title)) week_data = [ [Paragraph("LUN", day_title), Paragraph("MAR", day_title), Paragraph("MER", day_title), Paragraph("GIO", day_title), Paragraph("VEN", day_title), Paragraph("SAB", day_title), Paragraph("DOM", day_title)], [Paragraph("Lower Body\n+ Glutei", table_cell_center), Paragraph("Core +\nUpper Body", table_cell_center), Paragraph("Riposo\nattivo 🚶", table_cell_center), Paragraph("Lower Body\n+ Glutei", table_cell_center), Paragraph("Core +\nUpper Body", table_cell_center), Paragraph("Cammino\n+ salita 🏔", table_cell_center), Paragraph("Riposo\ncompleto 🧘", table_cell_center)], ] week_colors = [PINK_DARK, BLUE, GREEN, PINK_DARK, BLUE, ORANGE, MEDIUM_GREY] week_table = Table(week_data, colWidths=[W/7]*7, rowHeights=[22, 38]) week_ts = TableStyle([ ('ALIGN', (0,0), (-1,-1), 'CENTER'), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 8), ('BOX', (0,0), (-1,-1), 1, colors.HexColor('#CCCCCC')), ('INNERGRID', (0,0), (-1,-1), 0.5, colors.HexColor('#DDDDDD')), ('TOPPADDING', (0,0), (-1,-1), 4), ('BOTTOMPADDING', (0,0), (-1,-1), 4), ('TEXTCOLOR', (0,1), (-1,1), BLACK), ('ROWBACKGROUNDS', (0,1), (-1,1), [LIGHT_GREY]), ]) for i, c in enumerate(week_colors): week_ts.add('BACKGROUND', (i,0), (i,0), c) week_ts.add('TEXTCOLOR', (i,0), (i,0), colors.white) week_table.setStyle(week_ts) story.append(week_table) story.append(Spacer(1, 0.5*cm)) # ─── ALLENAMENTO A: LOWER BODY ─────────────────────────────────────────────── story.append(Paragraph("🍑 ALLENAMENTO A — LOWER BODY + GLUTEI (Lunedì & Giovedì · 35-40 min)", section_title)) lower_data = [ [Paragraph("ESERCIZIO", table_header), Paragraph("SERIE", table_header), Paragraph("REPS", table_header), Paragraph("TECNICA / FOCUS", table_header)], [Paragraph("Squat classico", table_cell), Paragraph("4", table_cell_center), Paragraph("15", table_cell_center), Paragraph("Piedi larghezza spalle, scendi a 90°, ginocchia in linea con le punte", table_note)], [Paragraph("Sumo squat", table_cell), Paragraph("3", table_cell_center), Paragraph("15", table_cell_center), Paragraph("Piedi larghi, punte verso l'esterno — mira all'interno coscia", table_note)], [Paragraph("Hip thrust", table_cell), Paragraph("4", table_cell_center), Paragraph("12", table_cell_center), Paragraph("Schiena sul bordo del letto/divano, spingi i fianchi in alto, strizza gluteo in cima", table_note)], [Paragraph("Reverse lunge", table_cell), Paragraph("3", table_cell_center), Paragraph("12 × gamba", table_cell_center), Paragraph("Affondo all'indietro, ginocchio posteriore sfiora terra, petto dritto", table_note)], [Paragraph("Donkey kick", table_cell), Paragraph("3", table_cell_center), Paragraph("20 × gamba", table_cell_center), Paragraph("A 4 zampe, calcio indietro e in alto, schiena neutra, strizza gluteo", table_note)], [Paragraph("Abductor raise", table_cell), Paragraph("3", table_cell_center), Paragraph("20 × gamba", table_cell_center), Paragraph("In piedi, gamba a lato lenta e controllata, tensione continua", table_note)], [Paragraph("Wall sit", table_cell), Paragraph("3", table_cell_center), Paragraph("45-60 sec", table_cell_center), Paragraph("Schiena al muro, coscie parallele al pavimento, respira regolarmente", table_note)], ] col_w = [W*0.28, W*0.1, W*0.14, W*0.48] lower_table = Table(lower_data, colWidths=col_w, repeatRows=1) lower_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), PINK_DARK), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('ALIGN', (0,0), (-1,-1), 'CENTER'), ('ALIGN', (0,1), (0,-1), 'LEFT'), ('ALIGN', (3,1), (3,-1), 'LEFT'), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, PINK_LIGHT]), ('BOX', (0,0), (-1,-1), 1, PINK), ('INNERGRID', (0,0), (-1,-1), 0.3, colors.HexColor('#E8D0D8')), ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('LEFTPADDING', (0,0), (-1,-1), 5), ])) story.append(lower_table) # Tip box story.append(Spacer(1, 0.25*cm)) tip_a = Table([[Paragraph("💡 <b>Tip chiave:</b> L'hip thrust è l'esercizio N°1 per sollevare e tonificare il gluteo. Non saltarlo mai! Aggiungi peso progressivamente (borsa, zaino).", note_style)]], colWidths=[W]) tip_a.setStyle(TableStyle([('BACKGROUND',(0,0),(-1,-1),PINK_LIGHT),('BOX',(0,0),(-1,-1),1,PINK), ('LEFTPADDING',(0,0),(-1,-1),8),('TOPPADDING',(0,0),(-1,-1),5),('BOTTOMPADDING',(0,0),(-1,-1),5)])) story.append(tip_a) story.append(Spacer(1, 0.5*cm)) # ─── ALLENAMENTO B: CORE + UPPER ───────────────────────────────────────────── story.append(Paragraph("🔥 ALLENAMENTO B — CORE + UPPER BODY LEAN (Martedì & Venerdì · 30-35 min)", section_title)) upper_data = [ [Paragraph("ESERCIZIO", table_header), Paragraph("SERIE", table_header), Paragraph("REPS / TEMPO", table_header), Paragraph("TECNICA / FOCUS", table_header)], [Paragraph("Plank frontale", table_cell), Paragraph("3", table_cell_center), Paragraph("40 → 60 sec", table_cell_center), Paragraph("Core duro, no inarcamento, respira — progressione settimanale", table_note)], [Paragraph("Plank laterale", table_cell), Paragraph("3", table_cell_center), Paragraph("30 sec × lato", table_cell_center), Paragraph("Obliqui + vita — chiave per creare la strozzatura a clessidra", table_note)], [Paragraph("Crunch bicicletta", table_cell), Paragraph("3", table_cell_center), Paragraph("20", table_cell_center), Paragraph("Obliqui + addome completo, gomito verso ginocchio opposto", table_note)], [Paragraph("Dead bug", table_cell), Paragraph("3", table_cell_center), Paragraph("12 × lato", table_cell_center), Paragraph("Sdraiata, abbassa braccio/gamba opposti mantenendo schiena a terra", table_note)], [Paragraph("Leg raise", table_cell), Paragraph("3", table_cell_center), Paragraph("15", table_cell_center), Paragraph("Pancia bassa, gambe dritte, sali lentamente, scendi senza toccare terra", table_note)], [Paragraph("Push up (anche sulle ginocchia)", table_cell), Paragraph("3", table_cell_center), Paragraph("12", table_cell_center), Paragraph("Petto + braccia, corpo diritto, gomiti a 45° dal busto", table_note)], [Paragraph("Tricep dips su sedia", table_cell), Paragraph("3", table_cell_center), Paragraph("12", table_cell_center), Paragraph("Mani sul bordo della sedia, gomiti dietro — elimina la carne sotto il braccio", table_note)], [Paragraph("Shoulder tap", table_cell), Paragraph("3", table_cell_center), Paragraph("15 × lato", table_cell_center), Paragraph("Da plank, tocca spalla opposta alternando — spalle + core stabilizzatori", table_note)], ] upper_table = Table(upper_data, colWidths=col_w, repeatRows=1) upper_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), BLUE), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('ALIGN', (0,0), (-1,-1), 'CENTER'), ('ALIGN', (0,1), (0,-1), 'LEFT'), ('ALIGN', (3,1), (3,-1), 'LEFT'), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, BLUE_LIGHT]), ('BOX', (0,0), (-1,-1), 1, BLUE), ('INNERGRID', (0,0), (-1,-1), 0.3, colors.HexColor('#C8D8E8')), ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('LEFTPADDING', (0,0), (-1,-1), 5), ])) story.append(upper_table) story.append(Spacer(1, 0.25*cm)) tip_b = Table([[Paragraph("💡 <b>Tip chiave:</b> Il plank laterale è l'esercizio N°1 per creare la vita a clessidra. Tienilo sempre nella routine anche quando ti sembra facile — aumenta il tempo.", note_style)]], colWidths=[W]) tip_b.setStyle(TableStyle([('BACKGROUND',(0,0),(-1,-1),BLUE_LIGHT),('BOX',(0,0),(-1,-1),1,BLUE), ('LEFTPADDING',(0,0),(-1,-1),8),('TOPPADDING',(0,0),(-1,-1),5),('BOTTOMPADDING',(0,0),(-1,-1),5)])) story.append(tip_b) # ─── PAGE BREAK → PAGINA 2 ─────────────────────────────────────────────────── story.append(PageBreak()) # ─── CARDIO ────────────────────────────────────────────────────────────────── story.append(Paragraph("🚶 CARDIO GIORNALIERO — 20.000 PASSI", section_title)) cardio_data = [ [Paragraph("TIPO", table_header), Paragraph("FREQUENZA", table_header), Paragraph("INTENSITÀ", table_header), Paragraph("DETTAGLIO", table_header)], [Paragraph("Camminata base", table_cell), Paragraph("Ogni giorno", table_cell_center), Paragraph("5.5-6 km/h", table_cell_center), Paragraph("Bruci 40% in più rispetto al passo lento", table_note)], [Paragraph("Camminata in salita", table_cell), Paragraph("3x/settimana min.", table_cell_center), Paragraph("5% inclinazione+", table_cell_center), Paragraph("Attiva glutei e coscie direttamente — scale, colline, tapis inclinato", table_note)], [Paragraph("Sprint brevi (opz.)", table_cell), Paragraph("2x/settimana", table_cell_center), Paragraph("30 sec ogni 5 min", table_cell_center), Paragraph("Accelera il metabolismo — bruciagrassi anche a riposo", table_note)], ] cardio_table = Table(cardio_data, colWidths=[W*0.22, W*0.2, W*0.18, W*0.4], repeatRows=1) cardio_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), GREEN), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('ALIGN', (0,0), (-1,-1), 'CENTER'), ('ALIGN', (0,1), (0,-1), 'LEFT'), ('ALIGN', (3,1), (3,-1), 'LEFT'), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, GREEN_LIGHT]), ('BOX', (0,0), (-1,-1), 1, GREEN), ('INNERGRID', (0,0), (-1,-1), 0.3, colors.HexColor('#BCD8C4')), ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('LEFTPADDING', (0,0), (-1,-1), 5), ])) story.append(cardio_table) story.append(Spacer(1, 0.5*cm)) # ─── ALIMENTAZIONE ─────────────────────────────────────────────────────────── story.append(Paragraph("🥗 LINEE GUIDA ALIMENTARI", section_title)) # Macros table macro_data = [ [Paragraph("MACRO", table_header), Paragraph("QUANTITÀ/GIORNO", table_header), Paragraph("PERCHÉ", table_header)], [Paragraph("🥩 Proteine", table_cell), Paragraph("100-130 g", table_cell_center), Paragraph("Preserva il muscolo durante il dimagrimento — fondamentale", table_note)], [Paragraph("🌾 Carboidrati", table_cell), Paragraph("100-150 g", table_cell_center), Paragraph("Energia per gli allenamenti — solo integrali e non raffinati", table_note)], [Paragraph("🥑 Grassi buoni", table_cell), Paragraph("50-60 g", table_cell_center), Paragraph("Ormoni, pelle sana, sazietà duratura", table_note)], [Paragraph("🔥 Deficit calorico", table_cell), Paragraph("400-600 kcal/giorno", table_cell_center), Paragraph("Con 20k passi + allenamento: mangia 1.400-1.700 kcal/giorno", table_note)], ] macro_table = Table(macro_data, colWidths=[W*0.22, W*0.22, W*0.56], repeatRows=1) macro_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), ORANGE), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('ALIGN', (0,0), (-1,-1), 'CENTER'), ('ALIGN', (0,1), (0,-1), 'LEFT'), ('ALIGN', (2,1), (2,-1), 'LEFT'), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, ORANGE_LIGHT]), ('BOX', (0,0), (-1,-1), 1, ORANGE), ('INNERGRID', (0,0), (-1,-1), 0.3, colors.HexColor('#E8C8B0')), ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('LEFTPADDING', (0,0), (-1,-1), 5), ])) story.append(macro_table) story.append(Spacer(1, 0.3*cm)) # SI / NO food half = (W - 0.4*cm) / 2 si_items = [ "✅ Albumi d'uovo + uova intere", "✅ Pollo, tacchino, pesce bianco, salmone", "✅ Yogurt greco 0% (max 150g)", "✅ Legumi 3x/settimana", "✅ Verdure a volontà", "✅ Frutta 2 pezzi/giorno (mattina)", "✅ Riso integrale/avena/farro (60-80g crudi)", "✅ Olio EVO (2 cucchiai/giorno)", "✅ Tè verde / tè bianco senza zucchero", ] no_items = [ "❌ Dolci, biscotti, merendine", "❌ Succhi di frutta e bevande zuccherate", "❌ Pane bianco e pasta bianca", "❌ Alcol", "❌ Salumi grassi e formaggi grassi", "❌ Salse (ketchup, maionese)", "❌ Cibi fritti", "⚠️ Pizza, pasta integrale: max 1-2x/settimana", "⚠️ Pane integrale: max 1-2 fette/giorno", ] si_content = [Paragraph("✅ ALIMENTI CONSIGLIATI", ParagraphStyle('SH', fontName='Helvetica-Bold', fontSize=9, textColor=GREEN, alignment=TA_CENTER, spaceAfter=4))] si_content += [Paragraph(x, check_style) for x in si_items] no_content = [Paragraph("❌ DA ELIMINARE / LIMITARE", ParagraphStyle('NH', fontName='Helvetica-Bold', fontSize=9, textColor=colors.HexColor('#C0392B'), alignment=TA_CENTER, spaceAfter=4))] no_content += [Paragraph(x, check_style) for x in no_items] food_table = Table( [[si_content, no_content]], colWidths=[half, half] ) food_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (0,0), GREEN_LIGHT), ('BACKGROUND', (1,0), (1,0), colors.HexColor('#FEF0F0')), ('BOX', (0,0), (0,0), 1, GREEN), ('BOX', (1,0), (1,0), 1, colors.HexColor('#C0392B')), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('LEFTPADDING', (0,0), (-1,-1), 8), ('RIGHTPADDING', (0,0), (-1,-1), 8), ('TOPPADDING', (0,0), (-1,-1), 7), ('BOTTOMPADDING', (0,0), (-1,-1), 7), ])) story.append(food_table) story.append(Spacer(1, 0.3*cm)) # Hydration tip hydra = Table([[Paragraph("💧 <b>IDRATAZIONE:</b> 500ml appena sveglia · 1 bicchiere prima di ogni pasto · 2+ litri totali · Riduci il sale (sgonfia viso e gambe in 5-7 giorni)", note_style)]], colWidths=[W]) hydra.setStyle(TableStyle([('BACKGROUND',(0,0),(-1,-1),BLUE_LIGHT),('BOX',(0,0),(-1,-1),1,BLUE), ('LEFTPADDING',(0,0),(-1,-1),8),('TOPPADDING',(0,0),(-1,-1),5),('BOTTOMPADDING',(0,0),(-1,-1),5)])) story.append(hydra) story.append(Spacer(1, 0.4*cm)) # ─── TIMELINE ──────────────────────────────────────────────────────────────── story.append(Paragraph("📈 RISULTATI ATTESI MESE PER MESE", section_title)) timeline_data = [ [Paragraph("PERIODO", table_header), Paragraph("RISULTATI ATTESI", table_header), Paragraph("KG PERSI", table_header)], [Paragraph("Settimane 1-2", table_cell_center), Paragraph("Meno gonfiore, viso più definito, gambe meno pesanti, più energia", table_note), Paragraph("-1 / -2 kg", table_cell_center)], [Paragraph("Settimane 3-4", table_cell_center), Paragraph("Coscie visibilmente meno piene, vita che inizia a definirsi, glutei più sodi", table_note), Paragraph("-2 / -3 kg tot.", table_cell_center)], [Paragraph("Mese 2", table_cell_center), Paragraph("Silhouette cambiata, addome più piatto, glutei tonificati e sollevati, braccia toniche", table_note), Paragraph("-4 / -6 kg tot.", table_cell_center)], [Paragraph("Mese 3", table_cell_center), Paragraph("Fisico vicino all'obiettivo — vita a clessidra visibile, cosce snelle, forza migliorata", table_note), Paragraph("-5 / -8 kg tot.", table_cell_center)], ] timeline_table = Table(timeline_data, colWidths=[W*0.2, W*0.6, W*0.2], repeatRows=1) timeline_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), PINK_DARK), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('ALIGN', (0,0), (-1,-1), 'CENTER'), ('ALIGN', (1,1), (1,-1), 'LEFT'), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, PINK_LIGHT]), ('BOX', (0,0), (-1,-1), 1, PINK_DARK), ('INNERGRID', (0,0), (-1,-1), 0.3, PINK), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6), ('LEFTPADDING', (0,0), (-1,-1), 5), ])) story.append(timeline_table) story.append(Spacer(1, 0.3*cm)) # ─── 3 SEGRETI ─────────────────────────────────────────────────────────────── secrets = Table([[Paragraph( "🔑 <b>3 SEGRETI CHE FANNO LA DIFFERENZA:</b> " "1) Hip thrust ad ogni sessione lower body. " "2) Plank laterale 3x/settimana per creare la vita. " "3) Almeno 100g di proteine al giorno — senza proteine perdi muscolo invece di grasso.", note_style)]], colWidths=[W]) secrets.setStyle(TableStyle([('BACKGROUND',(0,0),(-1,-1),PINK_LIGHT),('BOX',(0,0),(-1,-1),1.5,PINK_DARK), ('LEFTPADDING',(0,0),(-1,-1),10),('TOPPADDING',(0,0),(-1,-1),7),('BOTTOMPADDING',(0,0),(-1,-1),7)])) story.append(secrets) story.append(Spacer(1, 0.3*cm)) # ─── FOOTER ────────────────────────────────────────────────────────────────── story.append(HRFlowable(width="100%", thickness=1, color=PINK, spaceAfter=4)) footer_style = ParagraphStyle('Footer', fontName='Helvetica', fontSize=7.5, textColor=MEDIUM_GREY, alignment=TA_CENTER) story.append(Paragraph("Piano personalizzato generato il 18 Luglio 2026 · Consult a healthcare professional before starting any new exercise programme", footer_style)) doc.build(story) print("PDF created successfully!") EOF
ls -lh /tmp/workspace/fitness-plan/
programma allenamento
PDF Document · PDF