from pathlib import Path from html import escape O=Path(__file__).parent p=['One family. Room to become yourself.SAMFORD VALLEY / Shared kitchen + dining, adjacent parents’ room, three future children’s rooms'] def pt(x,y):return (690+17*x,520-17*y) def label(x,y,lines,size=13): X,Y=pt(x,y) for i,t in enumerate(lines):p.append(f'{escape(t)}') def rect(cx,cy,w,d,fill,stroke='#4b6256',dash=''): X,Y=pt(cx-w/2,cy+d/2);p.append(f'') def line(points,color='#a99372',width=16): ps=' '.join(f'{pt(x,y)[0]},{pt(x,y)[1]}' for x,y in points);p.append(f'') # Covered walks first, with clear building footprints drawn over them. line([(-3,5.4),(-3,14.6)],width=20);line([(-11,9), (7,9),(7,12.6)],width=20) rect(0,0,12,6,'#ddc8a9');label(0,.8,['CENTRAL ROOM','Kitchen · dining · lounge','Local AI desk'],13) rect(0,4.2,12,2.4,'#c8d0b8');label(0,4.3,['NORTH VERANDA'],12) rect(-7.75,-1.8,3.5,1.2,'#c7bfae');label(-7.9,1.0,['Short corridor','3.5 × 1.2 m'],12) rect(-11.8,-4.9,8,5,'#ddc8a9');rect(-12.7,-4.9,6.2,5,'#ddc8a9');label(-12.7,-4.5,['PARENTS’','BEDROOM'],12) rect(-8.7,-5.63,1.8,3.54,'#b6c4c5');label(-8.7,-5.25,['Bath'],10);label(-8.7,-3.0,['Lobby'],9) for i,(x,y,color) in enumerate([(-11,12,'#d8b4a0'),(-3,17,'#b9c9b8'),(7,15,'#aec4d0')]): rect(x,y,4.5,4.8,color,dash='stroke-dasharray="6 3"');label(x,y+.6,[f'CHILD {i+1}','Own room','4.5 × 4.8 m'],11) label(-1,11.6,['SHARED','COURTYARD'],12) X,Y=pt(-23,2);p.append(f'');label(-23,2.1,['SAUNA'],12) rect(-27,4.6,1.3,1.3,'#b6c4c5');label(-27,7,['Outdoor','shower'],12) for x in [-23.95,-26.25]: X,Y=pt(x,-8);p.append(f'') label(-25,-10,['Rainwater tanks'],12) rect(24.2,-7.5,4.3,5,'#c3d6c1');label(24.2,-7,['GREENHOUSE'],11) for x in [23.8,27.5]: for y in [-1.7,1.5,4.7]:rect(x,y,2.3,1.3,'#b29b73') label(25.5,7,['FOOD GARDEN'],13) rect(13.2,-17.7,7.3,5.2,'#71848b');label(13.2,-17,['GROUND SOLAR'],12) label(0,-7.5,['Roof solar on main pavilion','Starlink on parents’ wing'],12) line([(0,7),(9,9),(19,9),(26,6)],color='#d2ccb9',width=7) line([(-3,5.4),(-15,6),(-22,6.6),(-25,5.9)],color='#d2ccb9',width=7) # Diagram furniture indicates that children personalise the same simple base room. for x,y in [(-11,12),(-3,17),(7,15)]: rect(x-1.4,y-.7,.7,1.5,'#f3eadb',stroke='#879387') p.extend(['N','10 metres','Dashed cabins = future rooms for the three children. Shared kitchen, dining and bathroom stay in the family home.','Illustrative layout, not a surveyed block or construction drawing. No property boundary or approval is implied.','Land search guide: 1–2 hectares of usable land; around 2 hectares offers more flexibility. Site conditions decide suitability.']) (O/'family-courtyard-plan.svg').write_text(''.join(p))