@rubytech/create-maxy-code 0.1.114 → 0.1.115

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (711) hide show
  1. package/dist/__tests__/installer-specialist-registration.test.js +40 -1
  2. package/dist/__tests__/premium-bundle-gate.test.js +59 -0
  3. package/dist/index.js +24 -1
  4. package/dist/specialist-registration.js +15 -0
  5. package/package.json +1 -1
  6. package/payload/platform/config/brand.json +1 -1
  7. package/payload/platform/neo4j/schema.cypher +1 -1
  8. package/payload/platform/plugins/.claude-plugin/marketplace.json +0 -5
  9. package/payload/platform/plugins/contacts/mcp/dist/index.js +3 -3
  10. package/payload/platform/plugins/contacts/mcp/dist/index.js.map +1 -1
  11. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js +1 -1
  12. package/payload/platform/plugins/docs/references/contacts-guide.md +1 -9
  13. package/payload/platform/plugins/docs/references/getting-started.md +1 -1
  14. package/payload/platform/plugins/docs/references/internals.md +1 -1
  15. package/payload/platform/plugins/docs/references/platform.md +1 -1
  16. package/payload/platform/plugins/docs/references/plugins-guide.md +1 -2
  17. package/payload/platform/plugins/linkedin-import/PLUGIN.md +1 -1
  18. package/payload/platform/plugins/memory/PLUGIN.md +1 -1
  19. package/payload/platform/plugins/sales/.claude-plugin/plugin.json +1 -1
  20. package/payload/platform/plugins/sales/PLUGIN.md +9 -9
  21. package/payload/platform/plugins/sales/references/close-tracking.md +6 -6
  22. package/payload/platform/plugins/sales/references/faq.md +1 -5
  23. package/payload/platform/plugins/sales/references/objection-handling.md +2 -2
  24. package/payload/platform/plugins/scheduling/PLUGIN.md +1 -1
  25. package/payload/platform/plugins/scheduling/mcp/dist/index.js +2 -2
  26. package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
  27. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/getUserTimezone.test.js +1 -1
  28. package/payload/platform/plugins/venture-studio/skills/office-hours/SKILL.md +3 -3
  29. package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/landing-page.md +4 -4
  30. package/payload/platform/plugins/workflows/PLUGIN.md +1 -1
  31. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.d.ts +1 -1
  32. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js +2 -2
  33. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js.map +1 -1
  34. package/payload/platform/scripts/conversation-id-allowlist.txt +0 -7
  35. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  36. package/payload/platform/services/claude-session-manager/dist/http-server.js +42 -1
  37. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  38. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +34 -0
  39. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  40. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +83 -2
  41. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  42. package/payload/platform/templates/specialists/agents/project-manager.md +1 -3
  43. package/payload/premium-plugins/.claude-plugin/marketplace.json +0 -10
  44. package/payload/premium-plugins/venture-studio/skills/office-hours/SKILL.md +3 -3
  45. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/landing-page.md +4 -4
  46. package/payload/server/{chunk-FSPPVVWM.js → chunk-FJCI6X3H.js} +192 -0
  47. package/payload/server/maxy-edge.js +1 -1
  48. package/payload/server/public/assets/{ChatInput-CsnIedhS.js → ChatInput-CJo_77bp.js} +5 -1
  49. package/payload/server/public/assets/{Checkbox-CWugFyFT.js → Checkbox-YrQovXpN.js} +1 -1
  50. package/payload/server/public/assets/{admin-D3gZuyUn.js → admin-DOxHsV7g.js} +25 -25
  51. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-CeTRKWDb.js → architectureDiagram-Q4EWVU46-Breg9-99.js} +1 -1
  52. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-DeeIX5U3.js → blockDiagram-DXYQGD6D-DXf1_673.js} +1 -1
  53. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-CFsqZuil.js → c4Diagram-AHTNJAMY-CSZ36W4-.js} +1 -1
  54. package/payload/server/public/assets/channel-BmZnt3PP.js +1 -0
  55. package/payload/server/public/assets/{chunk-336JU56O-DpIXuFM0.js → chunk-336JU56O-DsrLk2eK.js} +2 -2
  56. package/payload/server/public/assets/{chunk-426QAEUC-Qk8qqrvA.js → chunk-426QAEUC-JpNfNf81.js} +1 -1
  57. package/payload/server/public/assets/{chunk-4TB4RGXK-DtM8-CUn.js → chunk-4TB4RGXK-DmClEAD0.js} +1 -1
  58. package/payload/server/public/assets/{chunk-5FUZZQ4R-CrSQ4ySU.js → chunk-5FUZZQ4R-BI9blW3N.js} +1 -1
  59. package/payload/server/public/assets/{chunk-5PVQY5BW-Bn2nQwdj.js → chunk-5PVQY5BW-BbgttEFO.js} +1 -1
  60. package/payload/server/public/assets/{chunk-EDXVE4YY-CzCPnR0P.js → chunk-EDXVE4YY-BX_LCFOx.js} +1 -1
  61. package/payload/server/public/assets/{chunk-ENJZ2VHE-CgZj9RoG.js → chunk-ENJZ2VHE-Bb7EoD0w.js} +1 -1
  62. package/payload/server/public/assets/{chunk-ICPOFSXX-wy-eNjwW.js → chunk-ICPOFSXX-DH8uQk-s.js} +1 -1
  63. package/payload/server/public/assets/{chunk-OYMX7WX6-CMmJtL8S.js → chunk-OYMX7WX6-FH5kgXsw.js} +1 -1
  64. package/payload/server/public/assets/{chunk-U2HBQHQK-CFCW7OaT.js → chunk-U2HBQHQK-D_ljlkHr.js} +1 -1
  65. package/payload/server/public/assets/{chunk-X2U36JSP-Bgh-CJSN.js → chunk-X2U36JSP-BX3EmZvm.js} +1 -1
  66. package/payload/server/public/assets/{chunk-YZCP3GAM-BXKwZ4vN.js → chunk-YZCP3GAM-Vu7-E93h.js} +1 -1
  67. package/payload/server/public/assets/{chunk-ZZ45TVLE-BiOuK5NP.js → chunk-ZZ45TVLE-CwjhNPX5.js} +1 -1
  68. package/payload/server/public/assets/classDiagram-6PBFFD2Q-kmMLFUpV.js +1 -0
  69. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BV7Ae8ct.js +1 -0
  70. package/payload/server/public/assets/clone-B5eqoN9I.js +1 -0
  71. package/payload/server/public/assets/{dagre-DyCxa9Q2.js → dagre-Ce6gsj0C.js} +1 -1
  72. package/payload/server/public/assets/{dagre-KV5264BT-Cffo_hmf.js → dagre-KV5264BT-BaMGpsoy.js} +1 -1
  73. package/payload/server/public/assets/data-NMvGx6jm.js +1 -0
  74. package/payload/server/public/assets/{diagram-5BDNPKRD-Bt93Du3V.js → diagram-5BDNPKRD-CHEE9rjq.js} +1 -1
  75. package/payload/server/public/assets/{diagram-G4DWMVQ6-v4r-tBsC.js → diagram-G4DWMVQ6-C98sZLW1.js} +1 -1
  76. package/payload/server/public/assets/{diagram-MMDJMWI5-DKrVPOP-.js → diagram-MMDJMWI5-DNvMGsTZ.js} +1 -1
  77. package/payload/server/public/assets/{diagram-TYMM5635-B1PzWQb9.js → diagram-TYMM5635-Cdte4IBa.js} +1 -1
  78. package/payload/server/public/assets/{erDiagram-SMLLAGMA-ClQzsQAs.js → erDiagram-SMLLAGMA-C9VZsWXK.js} +1 -1
  79. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-h3IbpN_7.js → flowDiagram-DWJPFMVM-tuP5fzzR.js} +1 -1
  80. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-ClaxOJi8.js → ganttDiagram-T4ZO3ILL-SJgRPUwx.js} +1 -1
  81. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-pM-U4ClD.js → gitGraphDiagram-UUTBAWPF-DU_cI_50.js} +1 -1
  82. package/payload/server/public/assets/graph-BkwTCV2Y.js +1 -0
  83. package/payload/server/public/assets/graph-labels-h39S93Xo.js +1 -0
  84. package/payload/server/public/assets/{graphlib-CwimOv_M.js → graphlib-D_nAsvmx.js} +1 -1
  85. package/payload/server/public/assets/{infoDiagram-42DDH7IO-DcO3Giwe.js → infoDiagram-42DDH7IO-Cj2Y19m6.js} +1 -1
  86. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-BcdSL5VS.js → ishikawaDiagram-UXIWVN3A-DMc1xq1y.js} +1 -1
  87. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-CYahHYzf.js → journeyDiagram-VCZTEJTY-C4CRAQma.js} +1 -1
  88. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-Cl5KhoS4.js → kanban-definition-6JOO6SKY-CTr4AldU.js} +1 -1
  89. package/payload/server/public/assets/lib-Bnh57com.js +29 -0
  90. package/payload/server/public/assets/{line-d_2oTxLp.js → line-Btlm_IAl.js} +1 -1
  91. package/payload/server/public/assets/{mermaid-parser.core-CMMDGv3x.js → mermaid-parser.core-DXFdj_y1.js} +1 -1
  92. package/payload/server/public/assets/{mermaid.core-DK9ENGbr.js → mermaid.core-DFBhoCr5.js} +3 -3
  93. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-mA3x3MFG.js → mindmap-definition-QFDTVHPH-r9gVQybo.js} +1 -1
  94. package/payload/server/public/assets/{page-CgDmg_fX.js → page-B0iMmY6t.js} +1 -1
  95. package/payload/server/public/assets/{page-D9lluVl7.js → page-zQ79YCEt.js} +2 -2
  96. package/payload/server/public/assets/{pieDiagram-DEJITSTG-CW1nGFlY.js → pieDiagram-DEJITSTG-CHKZjSaH.js} +1 -1
  97. package/payload/server/public/assets/{public-DdLMkNdS.js → public-DyGWgfaZ.js} +4 -4
  98. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-DI5igJhR.js → quadrantDiagram-34T5L4WZ-CSGR1HJr.js} +1 -1
  99. package/payload/server/public/assets/{requirementDiagram-MS252O5E-DyVeI4e_.js → requirementDiagram-MS252O5E-DZ6hX9D6.js} +1 -1
  100. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-CCTTBYKY.js → sankeyDiagram-XADWPNL6-DbZBKh0m.js} +1 -1
  101. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-hVVf35ly.js → sequenceDiagram-FGHM5R23-BHHpb8dt.js} +1 -1
  102. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-CSLuQDUX.js → stateDiagram-FHFEXIEX-DQ1jiLB4.js} +1 -1
  103. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-CByT2RzF.js +1 -0
  104. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-sxC3W8Q4.js → timeline-definition-GMOUNBTQ-BlGiEU7p.js} +1 -1
  105. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-Ro-ton6Z.js → vennDiagram-DHZGUBPP-DmEH-hsB.js} +1 -1
  106. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-T-dKD0Zx.js → wardleyDiagram-NUSXRM2D-C7KJJ40d.js} +1 -1
  107. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-CfProPts.js → xychartDiagram-5P7HB3ND-JDnusCaa.js} +1 -1
  108. package/payload/server/public/data.html +4 -4
  109. package/payload/server/public/graph.html +5 -5
  110. package/payload/server/public/index.html +7 -7
  111. package/payload/server/public/public.html +4 -4
  112. package/payload/server/server.js +52 -8
  113. package/payload/platform/plugins/waitlist/.claude-plugin/plugin.json +0 -17
  114. package/payload/platform/plugins/waitlist/PLUGIN.md +0 -86
  115. package/payload/platform/plugins/waitlist/mcp/dist/index.d.ts +0 -2
  116. package/payload/platform/plugins/waitlist/mcp/dist/index.d.ts.map +0 -1
  117. package/payload/platform/plugins/waitlist/mcp/dist/index.js +0 -388
  118. package/payload/platform/plugins/waitlist/mcp/dist/index.js.map +0 -1
  119. package/payload/platform/plugins/waitlist/mcp/dist/lib/admin-model.d.ts +0 -16
  120. package/payload/platform/plugins/waitlist/mcp/dist/lib/admin-model.d.ts.map +0 -1
  121. package/payload/platform/plugins/waitlist/mcp/dist/lib/admin-model.js +0 -58
  122. package/payload/platform/plugins/waitlist/mcp/dist/lib/admin-model.js.map +0 -1
  123. package/payload/platform/plugins/waitlist/mcp/dist/lib/embedding.d.ts +0 -3
  124. package/payload/platform/plugins/waitlist/mcp/dist/lib/embedding.d.ts.map +0 -1
  125. package/payload/platform/plugins/waitlist/mcp/dist/lib/embedding.js +0 -48
  126. package/payload/platform/plugins/waitlist/mcp/dist/lib/embedding.js.map +0 -1
  127. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.d.ts +0 -5
  128. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.d.ts.map +0 -1
  129. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js +0 -40
  130. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js.map +0 -1
  131. package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.d.ts +0 -2
  132. package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.d.ts.map +0 -1
  133. package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.js +0 -70
  134. package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.js.map +0 -1
  135. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-extract.d.ts +0 -34
  136. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-extract.d.ts.map +0 -1
  137. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-extract.js +0 -129
  138. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-extract.js.map +0 -1
  139. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-heal.d.ts +0 -27
  140. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-heal.d.ts.map +0 -1
  141. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-heal.js +0 -127
  142. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-heal.js.map +0 -1
  143. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-list.d.ts +0 -23
  144. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-list.d.ts.map +0 -1
  145. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-list.js +0 -58
  146. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-list.js.map +0 -1
  147. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.d.ts +0 -83
  148. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.d.ts.map +0 -1
  149. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.js +0 -433
  150. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.js.map +0 -1
  151. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-review.d.ts +0 -19
  152. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-review.d.ts.map +0 -1
  153. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-review.js +0 -81
  154. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-review.js.map +0 -1
  155. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-scan.d.ts +0 -28
  156. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-scan.d.ts.map +0 -1
  157. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-scan.js +0 -50
  158. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-scan.js.map +0 -1
  159. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.d.ts +0 -33
  160. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.d.ts.map +0 -1
  161. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js +0 -297
  162. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js.map +0 -1
  163. package/payload/platform/plugins/waitlist/mcp/package.json +0 -23
  164. package/payload/platform/plugins/waitlist/mcp/vitest.config.ts +0 -9
  165. package/payload/premium-plugins/real-agent/BUNDLE.md +0 -47
  166. package/payload/premium-plugins/real-agent/agents/buyer-enquiry/IDENTITY.md +0 -13
  167. package/payload/premium-plugins/real-agent/agents/buyer-enquiry/SOUL.md +0 -19
  168. package/payload/premium-plugins/real-agent/agents/buyer-enquiry/template.json +0 -9
  169. package/payload/premium-plugins/real-agent/agents/compliance.md +0 -317
  170. package/payload/premium-plugins/real-agent/agents/listing-curator.md +0 -152
  171. package/payload/premium-plugins/real-agent/agents/negotiator.md +0 -167
  172. package/payload/premium-plugins/real-agent/agents/valuer.md +0 -155
  173. package/payload/premium-plugins/real-agent/plugins/.claude-plugin/marketplace.json +0 -68
  174. package/payload/premium-plugins/real-agent/plugins/brochures/.claude-plugin/plugin.json +0 -8
  175. package/payload/premium-plugins/real-agent/plugins/brochures/PLUGIN.md +0 -38
  176. package/payload/premium-plugins/real-agent/plugins/brochures/commands/make-brochure.md +0 -11
  177. package/payload/premium-plugins/real-agent/plugins/brochures/skills/a4-print-documents/SKILL.md +0 -478
  178. package/payload/premium-plugins/real-agent/plugins/brochures/skills/brand-design/SKILL.md +0 -235
  179. package/payload/premium-plugins/real-agent/plugins/brochures/skills/make-brochure/SKILL.md +0 -355
  180. package/payload/premium-plugins/real-agent/plugins/brochures/skills/make-brochure/references/seller-brief-template.md +0 -115
  181. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/SKILL.md +0 -195
  182. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/build.md +0 -689
  183. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/copy.md +0 -211
  184. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/images.md +0 -166
  185. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/index-landing.md +0 -376
  186. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/index.html +0 -1290
  187. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/placeholders.md +0 -250
  188. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/registers.md +0 -105
  189. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/seller-brief.md +0 -56
  190. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/structure.md +0 -249
  191. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/template.html +0 -2400
  192. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-extract/SKILL.md +0 -366
  193. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-market-report/SKILL.md +0 -100
  194. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-market-report/references/render.py +0 -267
  195. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-market-report/references/template.html +0 -266
  196. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-socials/SKILL.md +0 -143
  197. package/payload/premium-plugins/real-agent/plugins/buyers/.claude-plugin/plugin.json +0 -8
  198. package/payload/premium-plugins/real-agent/plugins/buyers/PLUGIN.md +0 -35
  199. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-feedback/SKILL.md +0 -109
  200. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/SKILL.md +0 -42
  201. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/buyer-qualification-questions.md +0 -16
  202. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/buyer-qualification.md +0 -59
  203. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/buyer-scripts.md +0 -63
  204. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/buyer-working-scripts.md +0 -54
  205. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/feedback-collection.md +0 -42
  206. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/offer-capture.md +0 -38
  207. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/viewing-booking.md +0 -32
  208. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/viewing-management.md +0 -52
  209. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/SKILL.md +0 -407
  210. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/references/care-fees-guide.md +0 -68
  211. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/references/divorce-sales-guide.md +0 -61
  212. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/references/downsizing-guide.md +0 -45
  213. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/references/first-time-buyers.md +0 -92
  214. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/references/first-time-sellers.md +0 -78
  215. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/references/probate-guide.md +0 -53
  216. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/references/upsizing-guide.md +0 -41
  217. package/payload/premium-plugins/real-agent/plugins/buyers/skills/property-enquiry/SKILL.md +0 -126
  218. package/payload/premium-plugins/real-agent/plugins/buyers/skills/property-recommender/SKILL.md +0 -116
  219. package/payload/premium-plugins/real-agent/plugins/buyers/skills/viewing-management/SKILL.md +0 -111
  220. package/payload/premium-plugins/real-agent/plugins/estate-business/.claude-plugin/plugin.json +0 -8
  221. package/payload/premium-plugins/real-agent/plugins/estate-business/PLUGIN.md +0 -64
  222. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/SKILL.md +0 -133
  223. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/buy-back-your-time.md +0 -37
  224. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/firewave-gost-scorecards.md +0 -14
  225. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/keller-org-model.md +0 -17
  226. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/lencioni-team-models.md +0 -22
  227. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/listing-management-system.md +0 -11
  228. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/net-figure-form.md +0 -11
  229. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/serhant-bizinbox-notes.md +0 -13
  230. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/team-roles-commission.md +0 -14
  231. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/va-2026-ops.md +0 -43
  232. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/wingman-structure.md +0 -13
  233. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-operations/SKILL.md +0 -32
  234. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-operations/references/crm-systems.md +0 -57
  235. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-operations/references/hiring-guide.md +0 -59
  236. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-operations/references/impact-framework.md +0 -47
  237. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-operations/references/minutes-equal-money.md +0 -55
  238. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-operations/references/team-management.md +0 -48
  239. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/commission-calculator/SKILL.md +0 -40
  240. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/SKILL.md +0 -52
  241. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/references/12-reasons.md +0 -39
  242. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/references/95-5-system.md +0 -66
  243. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/references/agent-attraction-scripts.md +0 -90
  244. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/references/business-partnership.md +0 -92
  245. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/references/exp-model-overview.md +0 -66
  246. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/references/model-comparison.md +0 -66
  247. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/references/revenue-share-explained.md +0 -57
  248. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/month-end-close/SKILL.md +0 -69
  249. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/payment-batch-stager/SKILL.md +0 -42
  250. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/period-reconciler/SKILL.md +0 -42
  251. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/SKILL.md +0 -117
  252. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/attraction-agent-notes.md +0 -31
  253. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/attraction-agent.md +0 -58
  254. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/authenticity-boundaries.md +0 -28
  255. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/become-a-brand-leader-notes.md +0 -19
  256. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/blast-formula.md +0 -42
  257. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/brand-leader.md +0 -48
  258. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/brand-strategy-system.md +0 -59
  259. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/content-engine.md +0 -49
  260. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/firewave-blast-and-blogging.md +0 -23
  261. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/gary-v-content.md +0 -52
  262. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/gary-v-principles.md +0 -20
  263. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/oversubscribed-positioning.md +0 -18
  264. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/platforms.md +0 -41
  265. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/priestley-oversubscribed.md +0 -54
  266. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/storeys-style-examples.md +0 -25
  267. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/visual-identity.md +0 -27
  268. package/payload/premium-plugins/real-agent/plugins/estate-coaching/.claude-plugin/plugin.json +0 -8
  269. package/payload/premium-plugins/real-agent/plugins/estate-coaching/PLUGIN.md +0 -54
  270. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/agent-performance/SKILL.md +0 -371
  271. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/agent-performance/references/atomic-habits.md +0 -52
  272. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/agent-performance/references/daily-routine-scorecard.md +0 -104
  273. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/agent-performance/references/hp6-model.md +0 -63
  274. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/agent-performance/references/twelve-week-year.md +0 -71
  275. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/bespoke-coaching/SKILL.md +0 -36
  276. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/bespoke-coaching/references/coaching-boundaries.md +0 -56
  277. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/bespoke-coaching/references/feedback-framework.md +0 -61
  278. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/bespoke-coaching/references/performance-framework.md +0 -109
  279. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/coaching-toolkit/SKILL.md +0 -421
  280. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/coaching-toolkit/references/coaching-exercises.md +0 -86
  281. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/coaching-toolkit/references/goal-setting.md +0 -78
  282. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/coaching-toolkit/references/one-to-one-framework.md +0 -92
  283. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/coaching-toolkit/references/soi-workbook.md +0 -103
  284. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/serhant-training/SKILL.md +0 -410
  285. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/serhant-training/references/agent-training-guide.md +0 -70
  286. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/serhant-training/references/business-in-a-box.md +0 -72
  287. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/serhant-training/references/buyers-guide.md +0 -53
  288. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/serhant-training/references/codo-method.md +0 -72
  289. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/serhant-training/references/website-planning-guide.md +0 -79
  290. package/payload/premium-plugins/real-agent/plugins/estate-sales/.claude-plugin/plugin.json +0 -8
  291. package/payload/premium-plugins/real-agent/plugins/estate-sales/PLUGIN.md +0 -52
  292. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/chase-progression/SKILL.md +0 -107
  293. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/negotiation/SKILL.md +0 -35
  294. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/negotiation/references/deal-saving.md +0 -47
  295. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/negotiation/references/negotiation-deep-guide.md +0 -64
  296. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/negotiation/references/negotiation-prep-principles.md +0 -29
  297. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/negotiation/references/negotiation-techniques.md +0 -42
  298. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/negotiation/references/offer-presentation.md +0 -43
  299. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/risk-scorer/SKILL.md +0 -42
  300. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-closer/SKILL.md +0 -24
  301. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-closer/references/serhant-emotion-stages.md +0 -36
  302. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/SKILL.md +0 -30
  303. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/references/chris-voss-discovery.md +0 -88
  304. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/references/firewave-gost-journey.md +0 -68
  305. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/references/phil-jones-openers.md +0 -78
  306. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/references/pre-listing-checklist.md +0 -77
  307. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/references/serhant-improv.md +0 -22
  308. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/references/tom-ferry-discovery.md +0 -103
  309. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/references/vendor-motivation-competitor.md +0 -52
  310. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-negotiation/SKILL.md +0 -29
  311. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-negotiation/references/chris-voss-negotiation.md +0 -70
  312. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-negotiation/references/phil-jones-price-words.md +0 -40
  313. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-negotiation/references/serhant-negotiation-plus.md +0 -55
  314. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-negotiation/references/tom-panos-commission-pricing.md +0 -57
  315. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-negotiation/references/tony-morris-questioning.md +0 -54
  316. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-progression/SKILL.md +0 -27
  317. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-progression/references/conveyancing-guide.md +0 -54
  318. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-progression/references/transaction-tracking.md +0 -66
  319. package/payload/premium-plugins/real-agent/plugins/estate-teaching/.claude-plugin/plugin.json +0 -8
  320. package/payload/premium-plugins/real-agent/plugins/estate-teaching/PLUGIN.md +0 -30
  321. package/payload/premium-plugins/real-agent/plugins/estate-teaching/skills/content-directory/SKILL.md +0 -39
  322. package/payload/premium-plugins/real-agent/plugins/estate-teaching/skills/content-directory/references/module-delivery.md +0 -65
  323. package/payload/premium-plugins/real-agent/plugins/estate-teaching/skills/content-directory/references/progress-tracking.md +0 -47
  324. package/payload/premium-plugins/real-agent/plugins/leads/.claude-plugin/plugin.json +0 -8
  325. package/payload/premium-plugins/real-agent/plugins/leads/PLUGIN.md +0 -61
  326. package/payload/premium-plugins/real-agent/plugins/leads/skills/chain-progression-tracker/SKILL.md +0 -51
  327. package/payload/premium-plugins/real-agent/plugins/leads/skills/diary-builder/SKILL.md +0 -38
  328. package/payload/premium-plugins/real-agent/plugins/leads/skills/enquiry-triage/SKILL.md +0 -36
  329. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/SKILL.md +0 -137
  330. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/buyer-search-letter.md +0 -28
  331. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/buyer-search-letters.md +0 -37
  332. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/database-reactivation.md +0 -30
  333. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/email-nurture-sequences.md +0 -45
  334. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/facebook-referrals.md +0 -30
  335. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/firewave-email-nurture-sequences.md +0 -41
  336. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/keller-33-touch.md +0 -34
  337. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/neighbour-letters.md +0 -31
  338. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/neighbour-notification-letter.md +0 -20
  339. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/ofi-follow-up-dialogue.md +0 -22
  340. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/ofi-follow-up.md +0 -26
  341. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/serhant-three-fs-plus.md +0 -21
  342. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/sharran-10x10x10.md +0 -18
  343. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/sms-templates.md +0 -40
  344. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/sphere-of-influence-notes.md +0 -34
  345. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/sphere-of-influence.md +0 -60
  346. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/tom-panos-sms-templates.md +0 -59
  347. package/payload/premium-plugins/real-agent/plugins/leads/skills/morning-round/SKILL.md +0 -72
  348. package/payload/premium-plugins/real-agent/plugins/leads/skills/prospecting/SKILL.md +0 -33
  349. package/payload/premium-plugins/real-agent/plugins/leads/skills/prospecting/references/database-matching.md +0 -30
  350. package/payload/premium-plugins/real-agent/plugins/leads/skills/prospecting/references/database-value.md +0 -53
  351. package/payload/premium-plugins/real-agent/plugins/leads/skills/prospecting/references/prospecting-dialogues.md +0 -24
  352. package/payload/premium-plugins/real-agent/plugins/leads/skills/prospecting/references/reactivation.md +0 -34
  353. package/payload/premium-plugins/real-agent/plugins/listings/.claude-plugin/plugin.json +0 -8
  354. package/payload/premium-plugins/real-agent/plugins/listings/PLUGIN.md +0 -100
  355. package/payload/premium-plugins/real-agent/plugins/listings/skills/comparable-finder/SKILL.md +0 -52
  356. package/payload/premium-plugins/real-agent/plugins/listings/skills/home-preparation/SKILL.md +0 -28
  357. package/payload/premium-plugins/real-agent/plugins/listings/skills/home-preparation/references/kerb-appeal.md +0 -38
  358. package/payload/premium-plugins/real-agent/plugins/listings/skills/home-preparation/references/photo-day.md +0 -59
  359. package/payload/premium-plugins/real-agent/plugins/listings/skills/home-preparation/references/situational-tips.md +0 -50
  360. package/payload/premium-plugins/real-agent/plugins/listings/skills/home-preparation/references/staging-guide.md +0 -52
  361. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-copy-writer/SKILL.md +0 -55
  362. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-presentation/SKILL.md +0 -286
  363. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-presentation/references/booking-script.md +0 -51
  364. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-presentation/references/objection-scripts.md +0 -193
  365. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-presentation/references/penhaul-presentation.md +0 -123
  366. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-presentation/references/pre-listing-kit.md +0 -139
  367. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-presentation/references/set-to-sell.md +0 -55
  368. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-presentation/references/sharran-frameworks.md +0 -107
  369. package/payload/premium-plugins/real-agent/plugins/listings/skills/local-market-stats/SKILL.md +0 -33
  370. package/payload/premium-plugins/real-agent/plugins/listings/skills/new-instruction/SKILL.md +0 -77
  371. package/payload/premium-plugins/real-agent/plugins/listings/skills/particulars-builder/SKILL.md +0 -48
  372. package/payload/premium-plugins/real-agent/plugins/listings/skills/portal-launch-scheduler/SKILL.md +0 -49
  373. package/payload/premium-plugins/real-agent/plugins/listings/skills/pricing-scenario-builder/SKILL.md +0 -35
  374. package/payload/premium-plugins/real-agent/plugins/listings/skills/property-marketing/SKILL.md +0 -337
  375. package/payload/premium-plugins/real-agent/plugins/listings/skills/property-marketing/references/auction-report-template.md +0 -41
  376. package/payload/premium-plugins/real-agent/plugins/listings/skills/property-marketing/references/coming-soon-campaign.md +0 -43
  377. package/payload/premium-plugins/real-agent/plugins/listings/skills/property-marketing/references/direct-mail-templates.md +0 -121
  378. package/payload/premium-plugins/real-agent/plugins/listings/skills/property-marketing/references/eoi-form-template.md +0 -62
  379. package/payload/premium-plugins/real-agent/plugins/listings/skills/property-marketing/references/monthly-scorecard.md +0 -63
  380. package/payload/premium-plugins/real-agent/plugins/listings/skills/supplier-booker/SKILL.md +0 -39
  381. package/payload/premium-plugins/real-agent/plugins/listings/skills/talk-track-composer/SKILL.md +0 -36
  382. package/payload/premium-plugins/real-agent/plugins/listings/skills/terms-of-business-drafter/SKILL.md +0 -54
  383. package/payload/premium-plugins/real-agent/plugins/listings/skills/valuation-prep/SKILL.md +0 -69
  384. package/payload/premium-plugins/real-agent/plugins/loop/.claude-plugin/plugin.json +0 -8
  385. package/payload/premium-plugins/real-agent/plugins/loop/PLUGIN.md +0 -261
  386. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/index.d.ts +0 -2
  387. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/index.d.ts.map +0 -1
  388. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/index.js +0 -320
  389. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/index.js.map +0 -1
  390. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/crypto.d.ts +0 -10
  391. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/crypto.d.ts.map +0 -1
  392. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/crypto.js +0 -88
  393. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/crypto.js.map +0 -1
  394. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/file-crypto.d.ts +0 -3
  395. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/file-crypto.d.ts.map +0 -1
  396. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/file-crypto.js +0 -48
  397. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/file-crypto.js.map +0 -1
  398. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/key-store.d.ts +0 -22
  399. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/key-store.d.ts.map +0 -1
  400. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/key-store.js +0 -165
  401. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/key-store.js.map +0 -1
  402. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/loop-api.d.ts +0 -82
  403. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/loop-api.d.ts.map +0 -1
  404. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/loop-api.js +0 -392
  405. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/loop-api.js.map +0 -1
  406. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.d.ts +0 -5
  407. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.d.ts.map +0 -1
  408. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.js +0 -40
  409. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.js.map +0 -1
  410. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/auto-responder.d.ts +0 -12
  411. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/auto-responder.d.ts.map +0 -1
  412. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/auto-responder.js +0 -22
  413. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/auto-responder.js.map +0 -1
  414. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/customer-preferences.d.ts +0 -10
  415. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/customer-preferences.d.ts.map +0 -1
  416. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/customer-preferences.js +0 -24
  417. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/customer-preferences.js.map +0 -1
  418. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/feedback.d.ts +0 -16
  419. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/feedback.d.ts.map +0 -1
  420. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/feedback.js +0 -35
  421. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/feedback.js.map +0 -1
  422. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-deregister.d.ts +0 -5
  423. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-deregister.d.ts.map +0 -1
  424. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-deregister.js +0 -9
  425. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-deregister.js.map +0 -1
  426. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-list.d.ts +0 -4
  427. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-list.d.ts.map +0 -1
  428. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-list.js +0 -14
  429. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-list.js.map +0 -1
  430. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-register.d.ts +0 -9
  431. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-register.d.ts.map +0 -1
  432. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-register.js +0 -43
  433. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-register.js.map +0 -1
  434. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts +0 -6
  435. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts.map +0 -1
  436. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-enquiry.js +0 -7
  437. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-enquiry.js.map +0 -1
  438. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts +0 -9
  439. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts.map +0 -1
  440. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-batch.js +0 -16
  441. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-batch.js.map +0 -1
  442. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts +0 -15
  443. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts.map +0 -1
  444. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-request.js +0 -11
  445. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-request.js.map +0 -1
  446. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match.d.ts +0 -10
  447. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match.d.ts.map +0 -1
  448. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match.js +0 -39
  449. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match.js.map +0 -1
  450. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-detail.d.ts +0 -9
  451. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-detail.d.ts.map +0 -1
  452. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-detail.js +0 -125
  453. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-detail.js.map +0 -1
  454. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-search.d.ts +0 -18
  455. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-search.d.ts.map +0 -1
  456. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-search.js +0 -87
  457. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-search.js.map +0 -1
  458. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-detail.d.ts +0 -10
  459. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-detail.d.ts.map +0 -1
  460. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-detail.js +0 -82
  461. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-detail.js.map +0 -1
  462. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-intent.d.ts +0 -33
  463. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-intent.d.ts.map +0 -1
  464. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-intent.js +0 -19
  465. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-intent.js.map +0 -1
  466. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-listed.d.ts +0 -11
  467. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-listed.d.ts.map +0 -1
  468. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-listed.js +0 -26
  469. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-listed.js.map +0 -1
  470. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-request.d.ts +0 -15
  471. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-request.d.ts.map +0 -1
  472. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-request.js +0 -11
  473. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-request.js.map +0 -1
  474. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-search.d.ts +0 -16
  475. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-search.d.ts.map +0 -1
  476. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-search.js +0 -41
  477. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-search.js.map +0 -1
  478. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-sold.d.ts +0 -9
  479. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-sold.d.ts.map +0 -1
  480. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-sold.js +0 -19
  481. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-sold.js.map +0 -1
  482. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/supplier.d.ts +0 -13
  483. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/supplier.d.ts.map +0 -1
  484. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/supplier.js +0 -49
  485. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/supplier.js.map +0 -1
  486. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-availability.d.ts +0 -7
  487. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-availability.d.ts.map +0 -1
  488. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-availability.js +0 -19
  489. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-availability.js.map +0 -1
  490. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-info.d.ts +0 -5
  491. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-info.d.ts.map +0 -1
  492. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-info.js +0 -32
  493. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-info.js.map +0 -1
  494. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-create.d.ts +0 -14
  495. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-create.d.ts.map +0 -1
  496. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-create.js +0 -11
  497. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-create.js.map +0 -1
  498. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-detail.d.ts +0 -9
  499. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-detail.d.ts.map +0 -1
  500. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-detail.js +0 -85
  501. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-detail.js.map +0 -1
  502. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-search.d.ts +0 -13
  503. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-search.d.ts.map +0 -1
  504. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-search.js +0 -44
  505. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-search.js.map +0 -1
  506. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-update.d.ts +0 -14
  507. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-update.d.ts.map +0 -1
  508. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-update.js +0 -18
  509. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-update.js.map +0 -1
  510. package/payload/premium-plugins/real-agent/plugins/loop/mcp/package-lock.json +0 -2549
  511. package/payload/premium-plugins/real-agent/plugins/loop/mcp/package.json +0 -21
  512. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/__tests__/loop-swagger.snapshot.json +0 -26467
  513. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/__tests__/new-tool-shape.test.ts +0 -99
  514. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/__tests__/plugin-md-time-doctrine.test.ts +0 -132
  515. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/__tests__/swagger-write-coverage.test.ts +0 -154
  516. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/index.ts +0 -498
  517. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/lib/crypto.ts +0 -105
  518. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/lib/file-crypto.ts +0 -54
  519. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/lib/key-store.ts +0 -221
  520. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/lib/loop-api.ts +0 -567
  521. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/lib/neo4j.ts +0 -51
  522. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/auto-responder.ts +0 -80
  523. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/customer-preferences.ts +0 -66
  524. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/feedback.ts +0 -86
  525. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/key-deregister.ts +0 -12
  526. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/key-list.ts +0 -19
  527. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/key-register.ts +0 -70
  528. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/marketing-enquiry.ts +0 -27
  529. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/marketing-match-batch.ts +0 -53
  530. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/marketing-match-request.ts +0 -42
  531. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/marketing-match.ts +0 -84
  532. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/people-detail.ts +0 -245
  533. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/people-search.ts +0 -180
  534. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/property-detail.ts +0 -145
  535. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/property-intent.ts +0 -84
  536. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/property-listed.ts +0 -81
  537. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/property-search.ts +0 -92
  538. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/property-sold.ts +0 -67
  539. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/supplier.ts +0 -129
  540. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/team-availability.ts +0 -52
  541. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/team-info.ts +0 -95
  542. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/viewing-create.ts +0 -41
  543. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/viewing-detail.ts +0 -171
  544. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/viewing-search.ts +0 -92
  545. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/viewing-update.ts +0 -53
  546. package/payload/premium-plugins/real-agent/plugins/loop/mcp/tsconfig.json +0 -20
  547. package/payload/premium-plugins/real-agent/plugins/loop/mcp/vitest.config.ts +0 -9
  548. package/payload/premium-plugins/real-agent/plugins/loop/skills/compliance-flag-checker/SKILL.md +0 -53
  549. package/payload/premium-plugins/real-agent/plugins/loop/skills/priority-ranker/SKILL.md +0 -40
  550. package/payload/premium-plugins/real-agent/plugins/loop/skills/tone-matched-drafter/SKILL.md +0 -53
  551. package/payload/premium-plugins/real-agent/plugins/loop/skills/variance-narrator/SKILL.md +0 -50
  552. package/payload/premium-plugins/real-agent/plugins/loop/skills/vendor-research/SKILL.md +0 -54
  553. package/payload/premium-plugins/real-agent/plugins/preval/.claude-plugin/plugin.json +0 -8
  554. package/payload/premium-plugins/real-agent/plugins/preval/PLUGIN.md +0 -55
  555. package/payload/premium-plugins/real-agent/plugins/preval/hooks/preval-prompt-required.sh +0 -140
  556. package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/SKILL.md +0 -198
  557. package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/references/__tests__/adherence.test.py +0 -373
  558. package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/references/render.py +0 -814
  559. package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/references/template-inputs.schema.json +0 -204
  560. package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/references/template.html +0 -381
  561. package/payload/premium-plugins/real-agent/plugins/property-data/.claude-plugin/plugin.json +0 -8
  562. package/payload/premium-plugins/real-agent/plugins/property-data/PLUGIN.md +0 -181
  563. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/index.d.ts +0 -2
  564. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/index.d.ts.map +0 -1
  565. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/index.js +0 -236
  566. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/index.js.map +0 -1
  567. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/crypto.d.ts +0 -3
  568. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/crypto.d.ts.map +0 -1
  569. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/crypto.js +0 -72
  570. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/crypto.js.map +0 -1
  571. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/file-crypto.d.ts +0 -3
  572. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/file-crypto.d.ts.map +0 -1
  573. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/file-crypto.js +0 -49
  574. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/file-crypto.js.map +0 -1
  575. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/key-store.d.ts +0 -15
  576. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/key-store.d.ts.map +0 -1
  577. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/key-store.js +0 -135
  578. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/key-store.js.map +0 -1
  579. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/neo4j.d.ts +0 -5
  580. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/neo4j.d.ts.map +0 -1
  581. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/neo4j.js +0 -38
  582. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/neo4j.js.map +0 -1
  583. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/propertydata-api.d.ts +0 -28
  584. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/propertydata-api.d.ts.map +0 -1
  585. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/propertydata-api.js +0 -101
  586. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/propertydata-api.js.map +0 -1
  587. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/endpoints.d.ts +0 -24
  588. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/endpoints.d.ts.map +0 -1
  589. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/endpoints.js +0 -33
  590. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/endpoints.js.map +0 -1
  591. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-deregister.d.ts +0 -4
  592. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-deregister.d.ts.map +0 -1
  593. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-deregister.js +0 -9
  594. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-deregister.js.map +0 -1
  595. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-list.d.ts +0 -4
  596. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-list.d.ts.map +0 -1
  597. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-list.js +0 -10
  598. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-list.js.map +0 -1
  599. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-register.d.ts +0 -5
  600. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-register.d.ts.map +0 -1
  601. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-register.js +0 -50
  602. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-register.js.map +0 -1
  603. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/package-lock.json +0 -2566
  604. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/package.json +0 -21
  605. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/__tests__/endpoints.test.ts +0 -252
  606. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/__tests__/key-roundtrip.test.ts +0 -107
  607. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/__tests__/propertydata-api.test.ts +0 -184
  608. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/__tests__/schema-parity.test.ts +0 -62
  609. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/index.ts +0 -409
  610. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/lib/crypto.ts +0 -79
  611. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/lib/file-crypto.ts +0 -55
  612. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/lib/key-store.ts +0 -181
  613. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/lib/neo4j.ts +0 -47
  614. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/lib/propertydata-api.ts +0 -120
  615. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/tools/endpoints.ts +0 -47
  616. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/tools/key-deregister.ts +0 -9
  617. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/tools/key-list.ts +0 -10
  618. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/tools/key-register.ts +0 -54
  619. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/tsconfig.json +0 -20
  620. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/vitest.config.ts +0 -8
  621. package/payload/premium-plugins/real-agent/plugins/property-data/skills/property-data/SKILL.md +0 -77
  622. package/payload/premium-plugins/real-agent/plugins/vendors/.claude-plugin/plugin.json +0 -8
  623. package/payload/premium-plugins/real-agent/plugins/vendors/PLUGIN.md +0 -33
  624. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/SKILL.md +0 -42
  625. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/fee-protection-and-agenda.md +0 -28
  626. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/listing-scripts.md +0 -44
  627. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/negotiation-deep-guide.md +0 -70
  628. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/price-alignment-scripts.md +0 -33
  629. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/price-alignment.md +0 -34
  630. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/scenario-scripts.md +0 -38
  631. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/seller-engagement.md +0 -51
  632. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/valuation-booking.md +0 -76
  633. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/vendor-scripts.md +0 -63
  634. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/vendor-updates.md +0 -41
  635. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-updates/SKILL.md +0 -153
  636. package/payload/premium-plugins/real-agent/specs/00-architecture-and-customization.md +0 -122
  637. package/payload/premium-plugins/real-agent/specs/01-morning-round.md +0 -76
  638. package/payload/premium-plugins/real-agent/specs/02-valuation-prep.md +0 -81
  639. package/payload/premium-plugins/real-agent/specs/03-new-instruction.md +0 -96
  640. package/payload/premium-plugins/real-agent/specs/04-chase-progression.md +0 -120
  641. package/payload/premium-plugins/real-agent/specs/05-month-end-close.md +0 -79
  642. package/payload/premium-plugins/teaching/.claude-plugin/plugin.json +0 -8
  643. package/payload/premium-plugins/teaching/PLUGIN.md +0 -58
  644. package/payload/premium-plugins/teaching/skills/interactive-tutor/SKILL.md +0 -59
  645. package/payload/premium-plugins/teaching/skills/interactive-tutor/references/assessment.md +0 -70
  646. package/payload/premium-plugins/teaching/skills/interactive-tutor/references/classroom-conduct.md +0 -43
  647. package/payload/premium-plugins/teaching/skills/interactive-tutor/references/teaching-modes.md +0 -83
  648. package/payload/premium-plugins/teaching/skills/lesson-planner/SKILL.md +0 -48
  649. package/payload/premium-plugins/teaching/skills/lesson-planner/references/context-gathering.md +0 -41
  650. package/payload/premium-plugins/teaching/skills/lesson-planner/references/plan-structure.md +0 -94
  651. package/payload/premium-plugins/teaching/skills/study-pack-builder/SKILL.md +0 -52
  652. package/payload/premium-plugins/teaching/skills/study-pack-builder/references/disaggregation.md +0 -49
  653. package/payload/premium-plugins/teaching/skills/study-pack-builder/references/materials.md +0 -116
  654. package/payload/premium-plugins/writer-craft/.claude-plugin/plugin.json +0 -8
  655. package/payload/premium-plugins/writer-craft/PLUGIN.md +0 -88
  656. package/payload/premium-plugins/writer-craft/agents/writer-craft--manuscript-reviewer.md +0 -92
  657. package/payload/premium-plugins/writer-craft/skills/citation-style/SKILL.md +0 -94
  658. package/payload/premium-plugins/writer-craft/skills/citation-style/references/book-and-chapter-models.md +0 -77
  659. package/payload/premium-plugins/writer-craft/skills/citation-style/references/citation-rules.md +0 -103
  660. package/payload/premium-plugins/writer-craft/skills/citation-style/references/journal-article-models.md +0 -74
  661. package/payload/premium-plugins/writer-craft/skills/citation-style/references/other-source-models.md +0 -146
  662. package/payload/premium-plugins/writer-craft/skills/citation-style/references/reference-list-rules.md +0 -70
  663. package/payload/premium-plugins/writer-craft/skills/editorial-practice/SKILL.md +0 -108
  664. package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/copyediting.md +0 -73
  665. package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/developmental-editing.md +0 -85
  666. package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/genre-specific-editing.md +0 -78
  667. package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/line-editing.md +0 -55
  668. package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/self-editing.md +0 -89
  669. package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/SKILL.md +0 -114
  670. package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/references/audience-analysis.md +0 -73
  671. package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/references/crafting-persuasive-story.md +0 -76
  672. package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/references/persuasion-case-studies.md +0 -67
  673. package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/references/transformation-framework.md +0 -86
  674. package/payload/premium-plugins/writer-craft/skills/point-of-view/SKILL.md +0 -97
  675. package/payload/premium-plugins/writer-craft/skills/point-of-view/references/indirect-narration.md +0 -72
  676. package/payload/premium-plugins/writer-craft/skills/point-of-view/references/pov-types-and-voice.md +0 -91
  677. package/payload/premium-plugins/writer-craft/skills/point-of-view/references/protagonist-filter.md +0 -71
  678. package/payload/premium-plugins/writer-craft/skills/point-of-view/references/tense-and-person.md +0 -85
  679. package/payload/premium-plugins/writer-craft/skills/prose-craft/SKILL.md +0 -100
  680. package/payload/premium-plugins/writer-craft/skills/prose-craft/references/punctuation-and-grammar.md +0 -72
  681. package/payload/premium-plugins/writer-craft/skills/prose-craft/references/repetition.md +0 -71
  682. package/payload/premium-plugins/writer-craft/skills/prose-craft/references/sound-and-rhythm.md +0 -64
  683. package/payload/premium-plugins/writer-craft/skills/prose-craft/references/word-economy.md +0 -93
  684. package/payload/premium-plugins/writer-craft/skills/reader-engagement/SKILL.md +0 -100
  685. package/payload/premium-plugins/writer-craft/skills/reader-engagement/references/cause-effect-setup-payoff.md +0 -79
  686. package/payload/premium-plugins/writer-craft/skills/reader-engagement/references/conflict-escalation.md +0 -81
  687. package/payload/premium-plugins/writer-craft/skills/reader-engagement/references/hooking-readers.md +0 -67
  688. package/payload/premium-plugins/writer-craft/skills/reader-engagement/references/neurochemistry-of-engagement.md +0 -94
  689. package/payload/premium-plugins/writer-craft/skills/review-manuscript/SKILL.md +0 -111
  690. package/payload/premium-plugins/writer-craft/skills/review-manuscript/references/review-manuscript-checklist.md +0 -119
  691. package/payload/premium-plugins/writer-craft/skills/review-prose/SKILL.md +0 -99
  692. package/payload/premium-plugins/writer-craft/skills/review-prose/references/prose-review-checklist.md +0 -112
  693. package/payload/premium-plugins/writer-craft/skills/review-scene/SKILL.md +0 -99
  694. package/payload/premium-plugins/writer-craft/skills/review-scene/references/scene-analysis-framework.md +0 -95
  695. package/payload/premium-plugins/writer-craft/skills/story-architecture/SKILL.md +0 -106
  696. package/payload/premium-plugins/writer-craft/skills/story-architecture/references/blueprinting-and-scene-cards.md +0 -118
  697. package/payload/premium-plugins/writer-craft/skills/story-architecture/references/inner-issue-and-protagonist-goal.md +0 -66
  698. package/payload/premium-plugins/writer-craft/skills/story-architecture/references/misbelief-desire-worldview.md +0 -87
  699. package/payload/premium-plugins/writer-craft/skills/story-architecture/references/origin-scenes-and-escalation.md +0 -82
  700. package/payload/premium-plugins/writer-craft/skills/story-blueprint/SKILL.md +0 -133
  701. package/payload/premium-plugins/writer-craft/skills/story-blueprint/references/blueprinting-exercises.md +0 -118
  702. package/payload/premium-plugins/writer-craft/skills/story-blueprint/references/blueprinting-process.md +0 -128
  703. package/payload/server/public/assets/channel-CrSx5mnG.js +0 -1
  704. package/payload/server/public/assets/classDiagram-6PBFFD2Q-C3IDJsqN.js +0 -1
  705. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BOIrJ5Zb.js +0 -1
  706. package/payload/server/public/assets/clone-P8Fkz7JD.js +0 -1
  707. package/payload/server/public/assets/data-DRfwJPja.js +0 -1
  708. package/payload/server/public/assets/graph-B4FFYwus.js +0 -1
  709. package/payload/server/public/assets/graph-labels-Cpk9Ktt0.js +0 -1
  710. package/payload/server/public/assets/lib--yuBd0Xi.js +0 -33
  711. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-C5JejhQU.js +0 -1
@@ -1,2400 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en-GB">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Property Folio — Template</title>
7
- <link rel="preconnect" href="https://fonts.googleapis.com">
8
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
- <link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;0,600;1,300;1,400;1,500;1,600&family=Lora:ital,wght@0,400;0,500;0,600;1,400;1,500&family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
10
- <style>
11
- /* ═══════════════════════════════════════════════════
12
- EDITORIAL PROPERTY FOLIO — CANONICAL TEMPLATE
13
- A4 landscape (297 × 210 mm) — 16-page super-premium folio.
14
- Reference register: Knight Frank country-houses / Strutt & Parker.
15
- Type: Cormorant Garamond (display, italic-default at hero)
16
- Lora (humanist serif body)
17
- Inter (numeric labels, particulars)
18
- Palette: ivory paper · ink · bronze · antique gold · champagne
19
-
20
- SUBSTITUTION CONTRACT
21
- ─────────────────────
22
- This file is the CANONICAL template. Every property-specific value
23
- is a {{ token }} placeholder — there is no exemplar copy left to
24
- accidentally inherit. Substitution is mechanical and verifiable:
25
- after rendering, `grep "{{" output/brochure.html` must return ZERO
26
- matches. Any remaining {{ x }} is a bug.
27
-
28
- The full token list, with source field, expected format, length
29
- and voice, lives at:
30
- references/placeholders.md
31
- Each <!-- REPLACE: ... --> inline comment in this file gives the
32
- short version (what fills the token, how long, what voice). The
33
- placeholders.md file gives the long version with worked examples
34
- from the validated muvin Sparrows Farm reference brochure.
35
-
36
- Re-skin: agents override the design tokens in :root from their
37
- brand DESIGN.md per the property-brochure SKILL ("registers" — see
38
- references/registers.md).
39
-
40
- Image filenames follow the pattern {{ property_slug }}-NN.webp,
41
- where {{ property_slug }} is the literal slug from the property
42
- directory (e.g. "sparrows-farm" or "agincourt-house") and NN is
43
- the zero-padded image index per references/images.md.
44
- ═══════════════════════════════════════════════════ */
45
- :root {
46
- /* Super-premium tokens (palette, type) */
47
- --teal-900: #0E1418; /* primary ink */
48
- --teal-950: #06080A; /* deepest surface (cover/back bg) */
49
- --teal-700: #2A3036; /* secondary ink */
50
- --gold-500: #A4884C; /* antique gold rule */
51
- --gold-700: #7A6235; /* bronze accent */
52
- --gold-300: #C9B07A; /* champagne flourish */
53
- --paper-0: #FFFFFF;
54
- --paper-25: #F8F4ED; /* ivory page */
55
- --paper-50: #F4EFE5;
56
- --paper-100: #EFE7D8; /* warm cream surface */
57
- --slate-600: #5C6470;
58
- --slate-400: #8A8E96;
59
- --rule: rgba(14,20,24,0.16);
60
- --rule-soft: rgba(14,20,24,0.08);
61
- --rule-fine: #E2D5BD; /* champagne sand */
62
- --ink: #0E1418;
63
-
64
- --serif: 'Cormorant Garamond', 'EB Garamond', 'Garamond', 'Times New Roman', serif;
65
- --body-serif: 'Lora', 'Source Serif Pro', 'Georgia', serif;
66
- --sans: 'Inter', 'Söhne', -apple-system, BlinkMacSystemFont, sans-serif;
67
-
68
- /* BRAND_TOKENS_OVERRIDE_SLOT — branded register MUST emit a `<style id="brand-tokens">`
69
- block here, AFTER the template defaults, so cascade ordering selects the brand
70
- values. The block replaces --paper-25, --paper-50, --paper-100, --gold-700,
71
- --gold-500, --gold-300, --ink, --serif, --body-serif, --sans (plus the
72
- index.html-vocabulary twins per build.md → Brand-token override emission). Without
73
- this slot the agent has nowhere to inject and the brochure ships in Premium
74
- register even when register=branded. */
75
- }
76
-
77
- * { margin: 0; padding: 0; box-sizing: border-box; }
78
- html { font-size: 16px; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
79
- body {
80
- font-family: var(--body-serif);
81
- background: #c9c1b1;
82
- color: var(--ink);
83
- line-height: 1.62;
84
- font-weight: 400;
85
- }
86
-
87
- img { display: block; }
88
-
89
- /* Super-premium body-copy contract: ragged-right, no hyphenation, on warm ivory */
90
- .ed-body, .ed-deck, .opener-body p, .feature-page .panel p,
91
- .spread-6 .bottom .ed-body, .toc-credit, .mi-foot, .back-tagline {
92
- text-align: left !important;
93
- hyphens: none !important;
94
- -webkit-hyphens: none !important;
95
- word-break: normal !important;
96
- overflow-wrap: normal !important;
97
- }
98
- .opener-meta-row, .ed-stat .v, .mi-section .mi-row, .spec-list,
99
- .opener-spec, .epc-bars, .attr-grid {
100
- font-variant-numeric: tabular-nums;
101
- font-feature-settings: "tnum" 1;
102
- }
103
-
104
- /* Download bar (screen only) */
105
- .download-bar { position: fixed; top: 18px; right: 18px; z-index: 1000; }
106
- .download-btn {
107
- font-family: var(--sans);
108
- font-size: 11px; font-weight: 400;
109
- letter-spacing: 0.18em; text-transform: uppercase;
110
- color: var(--paper-0); background: var(--teal-900);
111
- border: 1px solid rgba(255,255,255,0.16);
112
- padding: 12px 22px;
113
- cursor: pointer;
114
- display: flex; align-items: center; gap: 10px;
115
- transition: background 250ms ease;
116
- }
117
- .download-btn:hover { background: var(--gold-700); }
118
- .download-btn svg { width: 13px; height: 13px; }
119
-
120
- /* ═══════════════════════════════════════════════════
121
- PAGE BOXES
122
- ═══════════════════════════════════════════════════ */
123
- .page {
124
- width: 297mm;
125
- height: 210mm;
126
- margin: 18px auto 0;
127
- position: relative;
128
- overflow: hidden;
129
- background: var(--paper-25);
130
- box-shadow: 0 4px 28px rgba(0,0,0,0.14);
131
- }
132
- .page:last-of-type { margin-bottom: 22px; }
133
-
134
- /* Folio (page-number) chrome — the bottom strip on a magazine page */
135
- .folio {
136
- position: absolute;
137
- bottom: 8mm; left: 14mm; right: 14mm;
138
- display: flex; justify-content: space-between; align-items: center;
139
- font-family: var(--sans);
140
- font-size: 9px; font-weight: 500;
141
- letter-spacing: 0.32em; text-transform: uppercase;
142
- color: var(--teal-900);
143
- z-index: 5;
144
- pointer-events: none;
145
- }
146
- .folio > span {
147
- /* Folio chrome stripped — folio is plain text on whitespace. Pages that
148
- have full-bleed imagery at the bottom must hide the folio entirely
149
- (see "Full-bleed pages suppress the folio" rule below); pages that
150
- leave clean whitespace below their content (most editorial spreads)
151
- render the folio as readable plain text in --teal-900. */
152
- white-space: nowrap;
153
- }
154
-
155
- /* Full-bleed pages suppress the folio.
156
- If a page's bottom area is covered by a full-bleed image (.cover, .intermission,
157
- .folio-dark chapter intros, or the .feature-page photo+panel layout where the
158
- photo bleeds to the page bottom), the folio is hidden entirely. The folio is
159
- never made readable over photography via background chrome — see SKILL.md
160
- "Folio is plain text on whitespace or absent". */
161
- .page.cover > .folio,
162
- .page.intermission > .folio,
163
- .page.folio-dark > .folio,
164
- .page:has(.feature-page) > .folio { display: none; }
165
- .folio .folio-mid { letter-spacing: 0.4em; }
166
- .folio em { font-style: normal; color: var(--gold-700); font-weight: 500; }
167
-
168
- /* On dark/photo-heavy pages, swap to light text on dark pill */
169
- .page.folio-dark .folio { color: var(--paper-25); }
170
- .page.folio-dark .folio > span { background: rgba(6, 68, 68, 0.55); }
171
- .page.folio-dark .folio em { color: var(--gold-300); }
172
-
173
- /* ═══════════════════════════════════════════════════
174
- COVER — split layout: paper title block on top, full-bleed photo below
175
- Reference register: Knight Frank country-houses / Strutt & Parker folios
176
- ═══════════════════════════════════════════════════ */
177
- .cover {
178
- background: var(--paper-25);
179
- color: var(--ink);
180
- display: grid;
181
- grid-template-rows: 86mm 1fr;
182
- }
183
-
184
- .cover-paper {
185
- position: relative;
186
- padding: 14mm 22mm 10mm;
187
- display: flex; flex-direction: column;
188
- align-items: center; justify-content: center;
189
- text-align: center;
190
- }
191
-
192
- .cover-mast {
193
- position: absolute;
194
- top: 12mm; left: 0; right: 0;
195
- display: flex; align-items: center; justify-content: center; gap: 14px;
196
- font-family: var(--sans);
197
- font-size: 9px; font-weight: 500;
198
- letter-spacing: 0.42em; text-transform: uppercase;
199
- color: var(--gold-700);
200
- }
201
- .cover-mast .pipe { width: 1px; height: 12px; background: var(--gold-700); opacity: 0.5; }
202
- .cover-mast .brand { color: var(--gold-700); }
203
- .cover-mast .label { color: var(--gold-700); opacity: 0.86; }
204
-
205
- .cover-title-line {
206
- display: flex; align-items: center; justify-content: center; gap: 28px;
207
- margin-top: 6mm;
208
- width: 100%;
209
- }
210
- .cover-title-line .flank {
211
- flex: 1;
212
- height: 1px;
213
- background: var(--gold-500);
214
- opacity: 0.55;
215
- max-width: 70mm;
216
- }
217
-
218
- .cover-title {
219
- font-family: var(--serif);
220
- font-style: normal;
221
- font-weight: 400;
222
- font-size: 64px;
223
- line-height: 1;
224
- letter-spacing: 0.18em;
225
- text-indent: 0.18em; /* compensate for trailing letter-spacing */
226
- text-transform: uppercase;
227
- color: var(--ink);
228
- white-space: nowrap;
229
- white-space: nowrap;
230
- }
231
-
232
- .cover-subtitle {
233
- margin-top: 16px;
234
- font-family: var(--sans);
235
- font-size: 11px; font-weight: 500;
236
- letter-spacing: 0.42em; text-transform: uppercase;
237
- color: var(--teal-700);
238
- }
239
- .cover-subtitle em {
240
- font-style: normal;
241
- color: var(--gold-700);
242
- font-weight: 500;
243
- }
244
-
245
- .cover-image {
246
- position: relative;
247
- overflow: hidden;
248
- }
249
- .cover-image > img {
250
- width: 100%; height: 100%;
251
- object-fit: cover;
252
- object-position: 50% 50%;
253
- }
254
-
255
- /* ═══════════════════════════════════════════════════
256
- CONTENTS PAGE
257
- ═══════════════════════════════════════════════════ */
258
- .toc-page {
259
- display: grid;
260
- grid-template-columns: 1.1fr 1fr;
261
- height: 100%;
262
- }
263
- .toc-image {
264
- position: relative;
265
- overflow: hidden;
266
- }
267
- .toc-image img { width: 100%; height: 100%; object-fit: cover; }
268
- .toc-image::after {
269
- content: '';
270
- position: absolute; inset: 0;
271
- background: linear-gradient(180deg, transparent 60%, rgba(14,20,24,0.18) 100%);
272
- }
273
- .toc-image .caption {
274
- position: absolute; bottom: 12mm; left: 12mm; right: 12mm;
275
- padding: 14px 18px 16px;
276
- background: rgba(14,20,24,0.78);
277
- border-left: 1px solid var(--gold-300);
278
- font-family: var(--serif);
279
- font-style: italic;
280
- font-weight: 400;
281
- font-size: 16px;
282
- color: var(--paper-0);
283
- letter-spacing: 0.01em;
284
- line-height: 1.45;
285
- }
286
- .toc-image .caption::before { display: none; }
287
-
288
- .toc-content {
289
- padding: 18mm 16mm 16mm;
290
- display: flex; flex-direction: column;
291
- justify-content: space-between;
292
- }
293
- .toc-eyebrow {
294
- font-family: var(--sans);
295
- font-size: 10px; font-weight: 500;
296
- letter-spacing: 0.42em; text-transform: uppercase;
297
- color: var(--gold-700);
298
- }
299
- .toc-rule { width: 32px; height: 1px; background: var(--gold-500); margin: 7px 0 14px; }
300
- .toc-title.compact {
301
- font-size: 38px !important;
302
- line-height: 0.95 !important;
303
- margin-bottom: 16px !important;
304
- }
305
- .toc-title {
306
- font-family: var(--serif);
307
- font-weight: 400;
308
- font-size: 56px;
309
- line-height: 1;
310
- color: var(--teal-900);
311
- letter-spacing: -0.01em;
312
- margin-bottom: 24px;
313
- }
314
- .toc-title em { font-style: italic; color: var(--gold-700); }
315
-
316
- .toc-list {
317
- list-style: none;
318
- border-top: 1px solid var(--rule);
319
- }
320
- .toc-list li {
321
- display: grid;
322
- grid-template-columns: 26px 1fr 34px;
323
- align-items: baseline;
324
- column-gap: 12px;
325
- padding: 6.5px 0;
326
- border-bottom: 1px solid var(--rule);
327
- }
328
- .toc-num {
329
- font-family: var(--serif);
330
- font-style: italic;
331
- font-size: 13px;
332
- color: var(--gold-700);
333
- }
334
- .toc-name {
335
- font-family: var(--serif);
336
- font-size: 15.5px;
337
- font-weight: 400;
338
- color: var(--teal-900);
339
- letter-spacing: 0.005em;
340
- line-height: 1.25;
341
- }
342
- .toc-name span {
343
- font-family: var(--sans);
344
- font-size: 8.5px; font-weight: 400;
345
- letter-spacing: 0.18em; text-transform: uppercase;
346
- color: var(--slate-600);
347
- display: block;
348
- margin-top: 2px;
349
- }
350
- .toc-page-num {
351
- font-family: var(--sans);
352
- font-size: 10px; font-weight: 500;
353
- letter-spacing: 0.2em;
354
- color: var(--gold-700);
355
- text-align: right;
356
- }
357
-
358
- .toc-credit {
359
- margin-top: auto;
360
- font-family: var(--body-serif);
361
- font-style: italic;
362
- font-size: 11px;
363
- color: var(--slate-600);
364
- line-height: 1.55;
365
- }
366
- .toc-credit strong { font-style: normal; color: var(--teal-900); font-weight: 600; }
367
- .toc-credit .brand-mark {
368
- display: block;
369
- font-family: var(--sans);
370
- font-style: normal;
371
- font-size: 10px; font-weight: 500;
372
- letter-spacing: 0.32em; text-transform: uppercase;
373
- color: var(--gold-700);
374
- margin-bottom: 10px;
375
- }
376
-
377
- /* ═══════════════════════════════════════════════════
378
- SHARED EDITORIAL STYLES
379
- ═══════════════════════════════════════════════════ */
380
- .ed-eyebrow {
381
- font-family: var(--sans);
382
- font-size: 9.5px; font-weight: 500;
383
- letter-spacing: 0.42em; text-transform: uppercase;
384
- color: var(--gold-700);
385
- margin-bottom: 8px;
386
- }
387
- .ed-rule { width: 32px; height: 1px; background: var(--gold-500); margin: 8px 0 14px; }
388
-
389
- .ed-headline {
390
- font-family: var(--serif);
391
- font-weight: 400;
392
- font-size: 50px;
393
- line-height: 0.98;
394
- letter-spacing: -0.012em;
395
- color: var(--teal-900);
396
- }
397
- .ed-headline em { font-style: italic; font-weight: 400; color: var(--gold-700); }
398
- .ed-headline.smaller { font-size: 38px; }
399
-
400
- .ed-deck {
401
- font-family: var(--serif);
402
- font-style: italic;
403
- font-weight: 400;
404
- font-size: 17px;
405
- line-height: 1.42;
406
- color: var(--teal-700);
407
- margin-top: 16px;
408
- letter-spacing: 0.005em;
409
- }
410
-
411
- .ed-body {
412
- font-family: var(--body-serif);
413
- font-size: 10.5px; font-weight: 400;
414
- line-height: 1.62;
415
- color: #1a2026;
416
- text-align: left;
417
- hyphens: none;
418
- letter-spacing: 0.005em;
419
- }
420
- .ed-body + .ed-body { margin-top: 9px; }
421
- .ed-body strong { color: var(--teal-900); font-weight: 600; }
422
- .ed-body em { color: var(--gold-700); font-style: italic; }
423
-
424
- .ed-body.dropcap::first-letter {
425
- font-family: var(--serif);
426
- font-style: italic;
427
- font-weight: 400;
428
- font-size: 68px;
429
- line-height: 0.85;
430
- float: left;
431
- color: var(--gold-700);
432
- padding: 6px 10px 0 0;
433
- margin-top: 4px;
434
- }
435
-
436
- .ed-caption {
437
- font-family: var(--serif);
438
- font-style: italic;
439
- font-size: 11px;
440
- color: var(--slate-600);
441
- line-height: 1.5;
442
- letter-spacing: 0.01em;
443
- margin-top: 6px;
444
- }
445
- .ed-caption strong { font-style: normal; color: var(--teal-900); font-weight: 500; }
446
-
447
- .ed-pullquote {
448
- font-family: var(--serif);
449
- font-style: italic;
450
- font-weight: 400;
451
- font-size: 26px;
452
- line-height: 1.22;
453
- color: var(--teal-900);
454
- letter-spacing: -0.005em;
455
- padding: 12px 0 14px;
456
- border-top: 1px solid var(--rule);
457
- border-bottom: 1px solid var(--rule);
458
- }
459
- .ed-pullquote::before {
460
- content: '“';
461
- display: block;
462
- font-size: 50px;
463
- line-height: 0.6;
464
- color: var(--gold-500);
465
- margin-bottom: 8px;
466
- }
467
- .ed-pullquote .attrib {
468
- display: block;
469
- font-family: var(--sans);
470
- font-style: normal;
471
- font-size: 9px; font-weight: 500;
472
- letter-spacing: 0.32em; text-transform: uppercase;
473
- color: var(--slate-600);
474
- margin-top: 12px;
475
- }
476
-
477
- .ed-stat {
478
- border-top: 1px solid var(--rule);
479
- padding-top: 8px;
480
- }
481
- .ed-stat .v {
482
- font-family: var(--serif);
483
- font-size: 36px; font-weight: 400;
484
- line-height: 1;
485
- color: var(--teal-900);
486
- letter-spacing: -0.01em;
487
- }
488
- .ed-stat .v em { font-style: italic; color: var(--gold-700); }
489
- .ed-stat .l {
490
- font-family: var(--sans);
491
- font-size: 8.5px; font-weight: 400;
492
- letter-spacing: 0.28em; text-transform: uppercase;
493
- color: var(--slate-600);
494
- margin-top: 8px;
495
- }
496
-
497
- /* ═══════════════════════════════════════════════════
498
- SPREAD 01 — OPENER (Pont Street-style two-page editorial)
499
- Big serif title left, hero photo right
500
- ═══════════════════════════════════════════════════ */
501
- .opener {
502
- display: grid;
503
- grid-template-columns: 1fr 1.35fr;
504
- height: 100%;
505
- }
506
- .opener-text {
507
- padding: 18mm 14mm 14mm 18mm;
508
- display: flex; flex-direction: column;
509
- }
510
- .opener-spec {
511
- margin-top: 10px;
512
- font-family: var(--serif);
513
- font-style: italic;
514
- font-size: 16px;
515
- color: var(--gold-700);
516
- letter-spacing: 0.01em;
517
- }
518
- .opener-spec strong { font-style: normal; font-weight: 500; color: var(--teal-900); }
519
-
520
- .opener-title {
521
- font-family: var(--serif);
522
- font-style: italic;
523
- font-weight: 400;
524
- font-size: 72px;
525
- line-height: 0.96;
526
- letter-spacing: -0.016em;
527
- color: var(--teal-900);
528
- margin: 14px 0 0;
529
- }
530
- .opener-title em {
531
- display: block;
532
- font-style: italic;
533
- font-weight: 400;
534
- color: var(--gold-700);
535
- font-size: 0.36em;
536
- white-space: nowrap;
537
- line-height: 1.2;
538
- margin-top: 8px;
539
- letter-spacing: 0.18em;
540
- text-transform: uppercase;
541
- font-family: var(--sans);
542
- }
543
-
544
- .opener-meta-row {
545
- display: flex; flex-wrap: nowrap; gap: 14px;
546
- margin: 18px 0 16px;
547
- padding: 12px 0;
548
- border-top: 1px solid var(--rule);
549
- border-bottom: 1px solid var(--rule);
550
- font-variant-numeric: tabular-nums;
551
- }
552
- .opener-meta-row .item {
553
- flex: 0 1 auto;
554
- min-width: 0;
555
- white-space: nowrap;
556
- font-family: var(--serif);
557
- }
558
- .opener-meta-row .item .k {
559
- font-family: var(--sans);
560
- font-size: 8.5px; font-weight: 500;
561
- letter-spacing: 0.22em; text-transform: uppercase;
562
- color: var(--slate-600);
563
- display: block; margin-bottom: 4px;
564
- white-space: nowrap;
565
- }
566
- .opener-meta-row .item .v {
567
- font-family: var(--serif);
568
- font-size: 17px; font-weight: 400;
569
- color: var(--teal-900);
570
- letter-spacing: 0;
571
- white-space: nowrap;
572
- }
573
- .opener-meta-row .item .v em { font-style: italic; color: var(--gold-700); white-space: nowrap; }
574
-
575
- .opener-body { margin-top: auto; }
576
- .opener-body .ed-body { font-size: 10.5px; line-height: 1.58; }
577
-
578
- .opener-image {
579
- position: relative;
580
- overflow: hidden;
581
- }
582
- .opener-image img { width: 100%; height: 100%; object-fit: cover; }
583
- .opener-image::after {
584
- content: '';
585
- position: absolute; inset: 0;
586
- background: linear-gradient(180deg, transparent 60%, rgba(14,20,24,0.18) 100%);
587
- }
588
- .opener-image .img-caption {
589
- position: absolute;
590
- bottom: 12mm; right: 12mm;
591
- padding: 12px 16px 14px;
592
- background: rgba(14,20,24,0.78);
593
- border-right: 1px solid var(--gold-300);
594
- font-family: var(--serif);
595
- font-style: italic;
596
- font-weight: 400;
597
- font-size: 14px;
598
- color: var(--paper-0);
599
- text-align: right;
600
- line-height: 1.5;
601
- max-width: 320px;
602
- }
603
- .opener-image .img-caption::before { display: none; }
604
-
605
- /* ═══════════════════════════════════════════════════
606
- SPREAD 02 — STORY: ground floor / living
607
- Mosaic with narrative column
608
- ═══════════════════════════════════════════════════ */
609
- .spread {
610
- padding: 14mm 14mm 16mm;
611
- height: 100%;
612
- display: grid;
613
- gap: 10px;
614
- }
615
-
616
- .spread-2 {
617
- grid-template-columns: 1.1fr 1fr 1.1fr;
618
- grid-template-rows: 1fr 56mm;
619
- min-height: 0;
620
- }
621
- .spread-2 .hero-img {
622
- grid-column: 1 / 3;
623
- grid-row: 1;
624
- overflow: hidden;
625
- position: relative;
626
- min-height: 0;
627
- }
628
- .spread-2 .hero-img img { width: 100%; height: 100%; object-fit: cover; }
629
-
630
- .spread-2 .text-col {
631
- grid-column: 3;
632
- grid-row: 1;
633
- padding: 2mm 0 0 4mm;
634
- display: flex; flex-direction: column;
635
- min-height: 0;
636
- overflow: hidden;
637
- }
638
-
639
- .spread-2 .strip {
640
- grid-column: 1 / 4;
641
- grid-row: 2;
642
- margin-top: 2mm;
643
- display: grid;
644
- grid-template-columns: 1fr 1fr 1fr;
645
- gap: 14px;
646
- }
647
- .spread-2 .strip-cell { display: flex; flex-direction: column; gap: 6px; }
648
- .spread-2 .strip-cell img {
649
- width: 100%; height: 42mm; object-fit: cover;
650
- }
651
-
652
- /* ═══════════════════════════════════════════════════
653
- SPREAD 03 — RECEPTION ROOMS / HALL
654
- Asymmetric: left big text, right offset photo column
655
- ═══════════════════════════════════════════════════ */
656
- .spread-3 {
657
- grid-template-columns: 1fr 1fr;
658
- grid-template-rows: 60mm 1fr;
659
- column-gap: 18px;
660
- row-gap: 8px;
661
- min-height: 0;
662
- }
663
- .spread-3 .head {
664
- grid-column: 1 / 3;
665
- grid-row: 1;
666
- display: grid;
667
- grid-template-columns: 1fr 1fr;
668
- column-gap: 22px;
669
- align-items: end;
670
- overflow: hidden;
671
- }
672
- .spread-3 .head .right { padding-left: 0; }
673
-
674
- .spread-3 .left-img {
675
- grid-column: 1;
676
- grid-row: 2;
677
- position: relative;
678
- overflow: hidden;
679
- }
680
- .spread-3 .left-img img { width: 100%; height: 100%; object-fit: cover; }
681
-
682
- .spread-3 .right-stack {
683
- grid-column: 2;
684
- grid-row: 2;
685
- display: grid;
686
- grid-template-rows: 1fr 1fr;
687
- row-gap: 10px;
688
- min-height: 0;
689
- }
690
- .spread-3 .right-stack .cell { position: relative; overflow: hidden; min-height: 0; }
691
- .spread-3 .right-stack img { width: 100%; height: 100%; object-fit: cover; }
692
- .spread-3 .right-stack img { width: 100%; height: 100%; object-fit: cover; }
693
-
694
- /* ═══════════════════════════════════════════════════
695
- SPREAD 04 — BEDROOMS GALLERY (Savills-style)
696
- Tile grid + sidebar text
697
- ═══════════════════════════════════════════════════ */
698
- .spread-4 {
699
- grid-template-columns: 1fr 2.1fr;
700
- grid-template-rows: auto 1fr;
701
- column-gap: 18px;
702
- row-gap: 12px;
703
- }
704
- .spread-4 .text-side {
705
- grid-column: 1;
706
- grid-row: 1 / 3;
707
- padding-right: 6mm;
708
- display: flex; flex-direction: column;
709
- }
710
- .spread-4 .gallery {
711
- grid-column: 2;
712
- grid-row: 1 / 3;
713
- display: grid;
714
- grid-template-columns: 1.4fr 1fr 1fr;
715
- grid-template-rows: 1fr 1fr;
716
- gap: 10px;
717
- }
718
- .spread-4 .gallery .cell { position: relative; overflow: hidden; }
719
- .spread-4 .gallery .cell img { width: 100%; height: 100%; object-fit: cover; }
720
- .spread-4 .gallery .cell.tall { grid-row: 1 / 3; }
721
-
722
- /* ═══════════════════════════════════════════════════
723
- SPREAD 05 — ANNEXE FEATURE: full-bleed photo + side panel
724
- ═══════════════════════════════════════════════════ */
725
- .feature-page {
726
- display: grid;
727
- grid-template-columns: 1.45fr 1fr;
728
- height: 100%;
729
- }
730
- .feature-page .photo {
731
- position: relative; overflow: hidden;
732
- }
733
- .feature-page .photo img { width: 100%; height: 100%; object-fit: cover; }
734
- .feature-page .photo::after {
735
- content: '';
736
- position: absolute; inset: 0;
737
- background: linear-gradient(180deg, transparent 60%, rgba(14,20,24,0.18) 100%);
738
- }
739
- .feature-page .photo .photo-caption {
740
- position: absolute;
741
- bottom: 12mm; left: 12mm; right: 12mm;
742
- padding: 12px 16px 14px;
743
- background: rgba(14,20,24,0.78);
744
- border-left: 1px solid var(--gold-300);
745
- font-family: var(--serif);
746
- font-style: italic;
747
- font-weight: 400;
748
- font-size: 14px;
749
- color: var(--paper-0);
750
- line-height: 1.5;
751
- max-width: 75%;
752
- }
753
- .feature-page .photo .photo-caption::before { display: none; }
754
-
755
- .feature-page .panel {
756
- background: var(--paper-100);
757
- padding: 22mm 14mm 18mm 16mm;
758
- display: flex; flex-direction: column;
759
- position: relative;
760
- }
761
- .feature-page .panel::before {
762
- content: '';
763
- position: absolute;
764
- top: 14mm; left: 16mm; right: 14mm;
765
- height: 1px;
766
- background: var(--gold-500);
767
- }
768
-
769
- /* Annexe attribute cards */
770
- .attr-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 14px; margin-top: 14px; }
771
- .attr {
772
- border-top: 1px solid var(--rule);
773
- padding: 8px 0 4px;
774
- }
775
- .attr .k {
776
- font-family: var(--sans);
777
- font-size: 8px; font-weight: 500;
778
- letter-spacing: 0.28em; text-transform: uppercase;
779
- color: var(--gold-700);
780
- margin-bottom: 4px;
781
- }
782
- .attr .v {
783
- font-family: var(--serif);
784
- font-size: 14px;
785
- color: var(--teal-900);
786
- line-height: 1.3;
787
- letter-spacing: 0.005em;
788
- }
789
-
790
- /* ═══════════════════════════════════════════════════
791
- SPREAD 06 — GROUNDS & DEVELOPMENT
792
- Big landscape image top, two-column text under
793
- ═══════════════════════════════════════════════════ */
794
- .spread-6 {
795
- grid-template-columns: 1fr 1fr 1fr 1fr;
796
- grid-template-rows: 1.1fr auto;
797
- row-gap: 14px;
798
- column-gap: 14px;
799
- }
800
- .spread-6 .top-image {
801
- grid-column: 1 / 5;
802
- grid-row: 1;
803
- position: relative; overflow: hidden;
804
- }
805
- .spread-6 .top-image img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 60%; }
806
- .spread-6 .top-image::after {
807
- content: '';
808
- position: absolute; inset: 0;
809
- background: linear-gradient(180deg, rgba(14,20,24,0.32) 0%, rgba(14,20,24,0.10) 30%, rgba(14,20,24,0) 55%, rgba(14,20,24,0) 75%, rgba(14,20,24,0.45) 100%);
810
- }
811
- .spread-6 .top-image .overlay {
812
- position: absolute;
813
- top: 12mm; left: 12mm;
814
- max-width: 60%;
815
- padding: 14px 18px 16px;
816
- background: rgba(14,20,24,0.78);
817
- color: var(--paper-0);
818
- border-left: 1px solid var(--gold-300);
819
- }
820
- .spread-6 .top-image .overlay .ed-eyebrow { color: var(--gold-300); margin-bottom: 6px; }
821
- .spread-6 .top-image .overlay .ed-rule { background: var(--gold-300); margin: 6px 0 12px; }
822
- .spread-6 .top-image .overlay .ed-headline { color: var(--paper-0); font-size: 38px; line-height: 1.0; }
823
- .spread-6 .top-image .overlay .ed-headline em { color: var(--gold-300); }
824
- .spread-6 .top-image .overlay .ed-eyebrow { color: var(--gold-300); }
825
- .spread-6 .top-image .overlay .ed-rule { background: var(--gold-300); }
826
- .spread-6 .top-image .overlay .ed-headline { color: var(--paper-0); font-size: 44px; }
827
- .spread-6 .top-image .overlay .ed-headline em { color: var(--gold-300); }
828
-
829
- .spread-6 .bottom { grid-row: 2; grid-column: span 1; }
830
- .spread-6 .bottom h4 {
831
- font-family: var(--serif);
832
- font-size: 19px; font-weight: 500;
833
- color: var(--teal-900);
834
- margin-bottom: 6px;
835
- letter-spacing: 0.005em;
836
- }
837
- .spread-6 .bottom h4 em { font-style: italic; font-weight: 400; color: var(--gold-700); }
838
- .spread-6 .bottom .ed-body { font-size: 10px; }
839
-
840
- /* ═══════════════════════════════════════════════════
841
- SPREAD 07 — FLOORPLAN & SPECIFICATION
842
- ═══════════════════════════════════════════════════ */
843
- .spread-7 {
844
- grid-template-columns: 1.4fr 1fr;
845
- grid-template-rows: auto 1fr;
846
- column-gap: 22px;
847
- row-gap: 10px;
848
- }
849
- .spread-7 .header {
850
- grid-column: 1 / 3;
851
- }
852
- .spread-7 .plan-area {
853
- grid-column: 1;
854
- grid-row: 2;
855
- display: flex; flex-direction: column; align-items: center; justify-content: center;
856
- }
857
- .spread-7 .plan-area img {
858
- max-width: 100%;
859
- max-height: 130mm;
860
- width: auto; height: auto;
861
- object-fit: contain;
862
- }
863
- .spread-7 .plan-area .meta {
864
- margin-top: 10px;
865
- text-align: center;
866
- }
867
- .spread-7 .plan-area .meta .lead {
868
- font-family: var(--serif);
869
- font-size: 16px; font-weight: 400;
870
- color: var(--teal-900);
871
- letter-spacing: 0.005em;
872
- }
873
- .spread-7 .plan-area .meta .lead em { font-style: italic; color: var(--gold-700); }
874
- .spread-7 .plan-area .meta .sub {
875
- font-family: var(--sans);
876
- font-size: 9px; font-weight: 300;
877
- color: var(--slate-600);
878
- letter-spacing: 0.16em; text-transform: uppercase;
879
- margin-top: 4px;
880
- }
881
-
882
- .spec-side {
883
- grid-column: 2;
884
- grid-row: 2;
885
- border-left: 1px solid var(--rule);
886
- padding-left: 18px;
887
- display: flex; flex-direction: column;
888
- }
889
- .spec-list {
890
- list-style: none;
891
- margin-top: 8px;
892
- }
893
- .spec-list li {
894
- display: grid;
895
- grid-template-columns: 24px 1fr;
896
- column-gap: 12px;
897
- padding: 7px 0;
898
- border-bottom: 1px solid var(--rule-soft);
899
- font-family: var(--sans);
900
- font-size: 9.5px; font-weight: 300;
901
- line-height: 1.5;
902
- color: #2c3535;
903
- }
904
- .spec-list li:last-child { border-bottom: none; }
905
- .spec-list li .num {
906
- font-family: var(--serif);
907
- font-style: italic;
908
- font-size: 11px;
909
- color: var(--gold-700);
910
- }
911
- .spec-list li strong { color: var(--teal-900); font-weight: 500; }
912
-
913
- /* Location map — conditional. The slot lives between BROCHURE_MAP_SLOT_START / END
914
- markers in the page-9 .spec-side block. property-extract screenshots whatever map
915
- element the listing exposes (Google iframe, Mapbox/Leaflet div, static-map image,
916
- etc.) — provider-agnostic — and saves the bytes as images/map.webp. When the slot
917
- is non-null in property.json, the brochure agent leaves the block in place.
918
- When the listing has no map, the agent deletes everything between the markers
919
- (inclusive). Extract or omit — never synthesise. */
920
- .location-map {
921
- margin: 14px 0 0 0;
922
- padding: 0;
923
- border: 1px solid var(--rule);
924
- background: var(--paper-100, #f6f1ea);
925
- aspect-ratio: 16 / 10;
926
- overflow: hidden;
927
- position: relative;
928
- display: flex; flex-direction: column;
929
- }
930
- .location-map img {
931
- width: 100%; height: 100%;
932
- object-fit: cover;
933
- display: block;
934
- }
935
- .location-map figcaption {
936
- position: absolute;
937
- left: 0; right: 0; bottom: 0;
938
- padding: 4px 8px;
939
- background: rgba(252, 251, 248, 0.92);
940
- font-family: var(--serif);
941
- font-style: italic;
942
- font-size: 8.5px;
943
- line-height: 1.4;
944
- color: var(--ink);
945
- letter-spacing: 0.005em;
946
- text-align: right;
947
- border-top: 1px solid var(--rule);
948
- }
949
-
950
- /* EPC bars */
951
- .epc-block { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--rule); }
952
- .epc-title {
953
- font-family: var(--serif);
954
- font-size: 14px; font-weight: 500;
955
- color: var(--teal-900);
956
- margin-bottom: 8px;
957
- letter-spacing: 0.005em;
958
- }
959
- .epc-title em { font-style: italic; color: var(--gold-700); }
960
- .epc-bars { display: flex; gap: 2px; }
961
- .epc-bar {
962
- flex: 1;
963
- height: 18px;
964
- display: flex; align-items: center; justify-content: center;
965
- font-family: var(--sans);
966
- font-size: 9px; font-weight: 600;
967
- color: white;
968
- }
969
- .epc-bar.a { background: #008054; }
970
- .epc-bar.b { background: #19b459; }
971
- .epc-bar.c { background: #8dce46; color: #1c2222; }
972
- .epc-bar.d { background: #ffd500; color: #1c2222; }
973
- .epc-bar.e { background: #fcaa65; color: #1c2222; }
974
- .epc-bar.f { background: #ef8023; }
975
- .epc-bar.g { background: #e9153b; }
976
- .epc-bar.current {
977
- outline: 2px solid var(--ink);
978
- outline-offset: 2px;
979
- z-index: 2;
980
- position: relative;
981
- }
982
-
983
- /* ═══════════════════════════════════════════════════
984
- SPREAD 08 — MATERIAL INFORMATION
985
- Editorial directory style
986
- ═══════════════════════════════════════════════════ */
987
- .mi-page { padding: 18mm 14mm 22mm; height: 100%; display: flex; flex-direction: column; }
988
- .mi-head { display: grid; grid-template-columns: 2fr 3fr; column-gap: 24px; align-items: end; margin-bottom: 14px; }
989
- .mi-intro {
990
- font-family: var(--serif);
991
- font-style: italic;
992
- font-size: 13px;
993
- line-height: 1.55;
994
- color: var(--teal-700);
995
- border-left: 1px solid var(--gold-500);
996
- padding-left: 14px;
997
- }
998
- .mi-grid {
999
- display: grid;
1000
- grid-template-columns: 1fr 1fr 1fr;
1001
- column-gap: 24px;
1002
- row-gap: 18px;
1003
- margin-top: 6px;
1004
- }
1005
- .mi-section .mi-label {
1006
- font-family: var(--sans);
1007
- font-size: 9px; font-weight: 500;
1008
- letter-spacing: 0.36em; text-transform: uppercase;
1009
- color: var(--gold-700);
1010
- border-bottom: 1px solid var(--gold-500);
1011
- padding-bottom: 6px;
1012
- margin-bottom: 8px;
1013
- }
1014
- .mi-section .mi-row {
1015
- display: flex; justify-content: space-between; align-items: baseline;
1016
- padding: 6px 0;
1017
- border-bottom: 1px solid var(--rule-soft);
1018
- font-family: var(--sans);
1019
- font-size: 9.5px;
1020
- column-gap: 10px;
1021
- }
1022
- .mi-section .mi-row:last-child { border-bottom: none; }
1023
- .mi-section .mi-row .k {
1024
- color: var(--slate-600); font-weight: 300;
1025
- }
1026
- .mi-section .mi-row .v {
1027
- color: var(--teal-900); font-weight: 400;
1028
- text-align: right;
1029
- font-family: var(--serif);
1030
- font-size: 11.5px;
1031
- letter-spacing: 0.01em;
1032
- }
1033
- .mi-foot {
1034
- /* Absolute positioning — anchored to page bottom so an oversized .mi-grid
1035
- cannot push the disclaimer into the folio zone. The folio sits at
1036
- bottom 8mm with ~8mm visible height (occupies 8-16mm from page bottom);
1037
- this anchor at 22mm leaves a 6mm gap above the folio. Any .mi-grid
1038
- overflow extends UNDERNEATH this footer (clipped by .page's
1039
- overflow:hidden at 210mm) without disrupting the chrome layer. */
1040
- position: absolute;
1041
- left: 14mm; right: 14mm; bottom: 22mm;
1042
- background: var(--paper-25);
1043
- z-index: 3;
1044
- padding-top: 14px;
1045
- border-top: 1px solid var(--rule);
1046
- font-family: var(--serif);
1047
- font-style: italic;
1048
- font-size: 11px;
1049
- color: var(--slate-600);
1050
- line-height: 1.55;
1051
- }
1052
-
1053
- /* ═══════════════════════════════════════════════════
1054
- BACK PAGE
1055
- ═══════════════════════════════════════════════════ */
1056
- .backpage {
1057
- background: var(--teal-950);
1058
- color: var(--paper-25);
1059
- }
1060
- .backpage .bg { position: absolute; inset: 0; }
1061
- .backpage .bg img { width: 100%; height: 100%; object-fit: cover; opacity: 0.32; }
1062
- .backpage .bg::after {
1063
- content: '';
1064
- position: absolute; inset: 0;
1065
- background:
1066
- radial-gradient(ellipse 60% 60% at 50% 40%, rgba(201,176,122,0.12) 0%, transparent 70%),
1067
- linear-gradient(180deg, rgba(14,20,24,0.62) 0%, rgba(14,20,24,0.50) 50%, rgba(14,20,24,0.92) 100%);
1068
- }
1069
-
1070
- .backpage-frame {
1071
- position: absolute;
1072
- top: 14mm; left: 14mm; right: 14mm; bottom: 14mm;
1073
- border: 1px solid rgba(229, 210, 168, 0.32);
1074
- z-index: 1;
1075
- pointer-events: none;
1076
- }
1077
-
1078
- .backpage-inner {
1079
- position: relative; z-index: 2;
1080
- height: 100%;
1081
- padding: 22mm 28mm 42mm; /* bottom 42mm reserves clearance for absolute .back-disclaimer at bottom 16mm + up to 5 lines of wrapped text */
1082
- display: flex; flex-direction: column;
1083
- align-items: center; justify-content: center;
1084
- text-align: center;
1085
- }
1086
- .backpage-inner .back-mast { margin-bottom: 18px; }
1087
- .back-mast {
1088
- display: flex; align-items: center; justify-content: center; gap: 16px;
1089
- font-family: var(--sans);
1090
- font-size: 10px; font-weight: 400;
1091
- letter-spacing: 0.55em; text-transform: uppercase;
1092
- color: rgba(229, 210, 168, 0.82);
1093
- margin-bottom: 22px;
1094
- }
1095
- .back-mast img.back-mast-logo {
1096
- height: 36px; width: auto; display: block;
1097
- filter: drop-shadow(0 2px 12px rgba(0,0,0,0.45));
1098
- }
1099
- .back-mast .pipe { width: 1px; height: 18px; background: rgba(229, 210, 168, 0.55); }
1100
- .back-mast .brand { font-family: var(--sans); font-size: 11px; font-weight: 500; letter-spacing: 0.42em; text-transform: uppercase; color: rgba(229, 210, 168, 0.95); }
1101
- .back-mast .label { letter-spacing: 0.45em; text-transform: uppercase; color: rgba(229, 210, 168, 0.88); }
1102
-
1103
- /* QR strip on the back page */
1104
- .back-qr-strip {
1105
- display: flex; gap: 28px; justify-content: center; align-items: flex-start;
1106
- margin-top: 22px;
1107
- }
1108
- .back-qr-strip a.qr {
1109
- display: flex; flex-direction: column; align-items: center; gap: 6px;
1110
- text-decoration: none;
1111
- color: inherit;
1112
- transition: opacity 200ms ease;
1113
- }
1114
- .back-qr-strip a.qr:hover { opacity: 0.85; }
1115
- .back-qr-strip .qr img {
1116
- width: 72px; height: 72px;
1117
- background: var(--paper-0);
1118
- padding: 6px;
1119
- border: 1px solid rgba(229, 210, 168, 0.32);
1120
- }
1121
- .back-qr-strip .qr-label {
1122
- font-family: var(--sans);
1123
- font-size: 8px; font-weight: 500;
1124
- letter-spacing: 0.28em; text-transform: uppercase;
1125
- color: rgba(229, 210, 168, 0.78);
1126
- text-align: center;
1127
- }
1128
- .back-qr-strip .qr-label em { font-style: italic; color: var(--gold-300); text-transform: none; letter-spacing: 0.04em; font-family: var(--body-serif); font-size: 11px; font-weight: 400; display: block; margin-top: 3px; }
1129
- .back-qr-strip .qr-link {
1130
- font-family: var(--sans);
1131
- font-size: 9px; font-weight: 400;
1132
- letter-spacing: 0.04em; text-transform: none;
1133
- color: var(--gold-300);
1134
- text-align: center;
1135
- text-decoration: underline;
1136
- text-decoration-color: rgba(201, 176, 122, 0.45);
1137
- text-underline-offset: 3px;
1138
- margin-top: 4px;
1139
- font-variant-numeric: tabular-nums;
1140
- }
1141
- .back-contact-grid .cell .name .dot { color: rgba(229,210,168,0.6); font-style: normal; }
1142
-
1143
- .back-headline {
1144
- font-family: var(--serif);
1145
- font-style: italic;
1146
- font-weight: 400;
1147
- font-size: 60px;
1148
- line-height: 1.04;
1149
- letter-spacing: -0.012em;
1150
- color: var(--paper-0);
1151
- margin-bottom: 12px;
1152
- }
1153
- .back-headline em { font-style: italic; color: var(--gold-300); white-space: nowrap; }
1154
-
1155
- .back-tagline {
1156
- font-family: var(--serif);
1157
- font-style: italic;
1158
- font-size: 17px;
1159
- color: rgba(252,251,248,0.82);
1160
- line-height: 1.5;
1161
- max-width: 540px;
1162
- margin: 0 auto 28px;
1163
- }
1164
- .back-rule {
1165
- width: 56px; height: 1px;
1166
- background: var(--gold-500);
1167
- margin: 0 auto 20px;
1168
- }
1169
-
1170
- .back-contact-grid {
1171
- display: grid;
1172
- grid-template-columns: 1fr 1fr;
1173
- gap: 36px;
1174
- max-width: 540px;
1175
- margin: 0 auto;
1176
- text-align: left;
1177
- }
1178
- .back-contact-grid .cell .k {
1179
- font-family: var(--sans);
1180
- font-size: 9px; font-weight: 500;
1181
- letter-spacing: 0.32em; text-transform: uppercase;
1182
- color: rgba(229, 210, 168, 0.7);
1183
- margin-bottom: 8px;
1184
- border-bottom: 1px solid rgba(229,210,168,0.25);
1185
- padding-bottom: 6px;
1186
- }
1187
- .back-contact-grid .cell .name {
1188
- font-family: var(--serif);
1189
- font-size: 19px;
1190
- color: var(--paper-0);
1191
- margin-bottom: 6px;
1192
- letter-spacing: 0.005em;
1193
- }
1194
- .back-contact-grid .cell .name em { font-style: italic; color: var(--gold-300); }
1195
- .back-contact-grid .cell .line {
1196
- font-family: var(--sans);
1197
- font-size: 11px; font-weight: 300;
1198
- color: rgba(252,251,248,0.85);
1199
- line-height: 1.7;
1200
- }
1201
-
1202
- .back-foot {
1203
- position: absolute;
1204
- bottom: 28mm; left: 28mm; right: 28mm;
1205
- z-index: 2;
1206
- display: flex; justify-content: space-between; align-items: flex-end;
1207
- }
1208
- .back-foot .left, .back-foot .right {
1209
- font-family: var(--sans);
1210
- font-size: 9px; font-weight: 400;
1211
- letter-spacing: 0.28em; text-transform: uppercase;
1212
- color: rgba(252,251,248,0.55);
1213
- }
1214
- .back-foot .right { text-align: right; }
1215
- .back-foot em { font-style: normal; color: var(--gold-300); }
1216
-
1217
- .back-disclaimer {
1218
- position: absolute;
1219
- bottom: 16mm; left: 28mm; right: 28mm;
1220
- z-index: 2;
1221
- font-family: var(--serif);
1222
- font-style: italic;
1223
- font-size: 9px;
1224
- line-height: 1.55;
1225
- color: rgba(252,251,248,0.45);
1226
- text-align: center;
1227
- }
1228
-
1229
- /* ═══════════════════════════════════════════════════
1230
- INTERMISSION / FULL-BLEED IMAGE PAGES
1231
- Used between chapters; image is the page, with one
1232
- small caption pill anchored bottom-left. The folio
1233
- is the only other element. Lets the photography
1234
- breathe between editorial spreads.
1235
- ═══════════════════════════════════════════════════ */
1236
- .page.intermission { padding: 0; background: var(--ink); }
1237
- .full-bleed { position: relative; width: 100%; height: 100%; overflow: hidden; }
1238
- .full-bleed > img { width: 100%; height: 100%; object-fit: cover; display: block; }
1239
- .full-bleed::after {
1240
- content: '';
1241
- position: absolute; inset: 0;
1242
- background: linear-gradient(180deg, transparent 50%, rgba(14,20,24,0.45) 100%);
1243
- pointer-events: none;
1244
- }
1245
- .caption-pill {
1246
- position: absolute;
1247
- left: 14mm; bottom: 14mm;
1248
- max-width: 60%;
1249
- padding: 12px 16px 14px;
1250
- background: rgba(14,20,24,0.72);
1251
- color: var(--paper-0);
1252
- border-left: 1px solid var(--gold-300);
1253
- z-index: 2;
1254
- }
1255
- .caption-pill .ed-eyebrow-light {
1256
- display: block;
1257
- font-family: var(--sans);
1258
- font-size: 9px; font-weight: 500;
1259
- letter-spacing: 0.36em; text-transform: uppercase;
1260
- color: var(--gold-300);
1261
- margin-bottom: 7px;
1262
- }
1263
- .caption-pill .caption-text {
1264
- display: block;
1265
- font-family: var(--body-serif);
1266
- font-size: 11.5px; font-weight: 400;
1267
- line-height: 1.55;
1268
- color: var(--paper-0);
1269
- letter-spacing: 0.005em;
1270
- }
1271
- .caption-pill .caption-text em { font-style: italic; color: var(--gold-300); font-weight: 500; }
1272
-
1273
- /* ═══════════════════════════════════════════════════
1274
- IMAGE-LED GRID PAGE — additional internal coverage
1275
- ═══════════════════════════════════════════════════ */
1276
- .gallery-page {
1277
- display: grid;
1278
- grid-template-rows: 32mm 1fr;
1279
- grid-template-columns: 1fr;
1280
- height: 100%;
1281
- padding: 14mm 14mm 16mm;
1282
- gap: 10px;
1283
- }
1284
- .gallery-page .gallery-head { grid-row: 1; display: flex; flex-direction: column; justify-content: flex-end; }
1285
- .gallery-page .gallery-grid {
1286
- grid-row: 2;
1287
- display: grid;
1288
- grid-template-columns: 1fr 1fr 1fr;
1289
- grid-template-rows: 1fr 1fr;
1290
- gap: 10px;
1291
- min-height: 0;
1292
- }
1293
- .gallery-page .gallery-cell { position: relative; overflow: hidden; min-height: 0; }
1294
- .gallery-page .gallery-cell.tall { grid-row: 1 / 3; }
1295
- .gallery-page .gallery-cell img { width: 100%; height: 100%; object-fit: cover; display: block; }
1296
- .gallery-page .gallery-cell figcaption {
1297
- position: absolute; left: 8px; right: 8px; bottom: 8px;
1298
- padding: 6px 10px;
1299
- background: rgba(14,20,24,0.72);
1300
- color: var(--paper-0);
1301
- font-family: var(--body-serif);
1302
- font-style: italic;
1303
- font-size: 9.5px; line-height: 1.4;
1304
- border-left: 1px solid var(--gold-300);
1305
- }
1306
-
1307
- /* ═══════════════════════════════════════════════════
1308
- SITE PLAN PAGE — dedicated page for plot plan
1309
- ═══════════════════════════════════════════════════ */
1310
- .siteplan-page {
1311
- display: grid;
1312
- grid-template-rows: 32mm 1fr 18mm;
1313
- grid-template-columns: 1.4fr 1fr;
1314
- height: 100%;
1315
- padding: 14mm 14mm 16mm;
1316
- gap: 12px 22px;
1317
- }
1318
- .siteplan-page .head { grid-column: 1 / 3; grid-row: 1; }
1319
- .siteplan-page .plan-area {
1320
- grid-column: 1; grid-row: 2;
1321
- display: flex; align-items: center; justify-content: center;
1322
- background: var(--paper-50);
1323
- overflow: hidden;
1324
- }
1325
- .siteplan-page .plan-area img {
1326
- max-width: 100%; max-height: 100%;
1327
- width: auto; height: auto;
1328
- object-fit: contain;
1329
- }
1330
- .siteplan-page .text-side {
1331
- grid-column: 2; grid-row: 2;
1332
- border-left: 1px solid var(--rule);
1333
- padding-left: 18px;
1334
- display: flex; flex-direction: column;
1335
- gap: 12px;
1336
- }
1337
- .siteplan-page .text-side h4 {
1338
- font-family: var(--body-serif);
1339
- font-style: normal; font-weight: 500;
1340
- font-size: 13px;
1341
- color: var(--teal-900);
1342
- letter-spacing: 0.005em;
1343
- }
1344
- .siteplan-page .text-side h4 em { font-style: italic; color: var(--gold-700); font-weight: 500; }
1345
-
1346
- /* Strengthened text-on-image scrim for the feature page (page 7),
1347
- per the user feedback that the body copy was hard to read against the photo */
1348
- .feature-page .panel { background: var(--paper-100); }
1349
-
1350
- /* ═══════════════════════════════════════════════════
1351
- PRINT
1352
- ═══════════════════════════════════════════════════ */
1353
- .print-img {
1354
- position: absolute;
1355
- width: 1px;
1356
- height: 1px;
1357
- opacity: 0;
1358
- pointer-events: none;
1359
- z-index: -1;
1360
- }
1361
-
1362
- @page { size: A4 landscape; margin: 0; }
1363
- @media print {
1364
- html, body { background: white; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
1365
- .download-bar { display: none !important; }
1366
- .page { margin: 0; box-shadow: none; page-break-after: always; page-break-inside: avoid; overflow: hidden; }
1367
- .page:last-of-type { page-break-after: auto; }
1368
-
1369
- /* PRIMARY PATH — when print-img snapshots exist, hide everything else and show only the snapshot.
1370
- The snapshot is a flat raster of the on-screen page (folio + all chrome baked in). */
1371
- .page:has(.print-img[src]:not([src=""])) > *:not(.print-img) { display: none !important; }
1372
- .print-img[src]:not([src=""]) {
1373
- position: absolute !important;
1374
- inset: 0 !important;
1375
- width: 100% !important;
1376
- height: 100% !important;
1377
- opacity: 1 !important;
1378
- object-fit: cover !important;
1379
- z-index: 9999 !important;
1380
- }
1381
-
1382
- /* FALLBACK PATH — no snapshot present. Print the live DOM directly.
1383
- Force folio reliability: drop backdrop-filter (Chrome's PDF engine strips it, pill goes invisible),
1384
- lift z-index above any absolute imagery, and bring it 2mm inward of the printable edge. */
1385
- .folio { z-index: 100 !important; bottom: 6mm !important; }
1386
- .folio > span { backdrop-filter: none !important; -webkit-backdrop-filter: none !important; background: rgba(252, 251, 248, 0.95) !important; }
1387
- .page.folio-dark .folio > span { background: rgba(6, 68, 68, 0.78) !important; }
1388
- .back-foot { z-index: 100 !important; }
1389
-
1390
- * { -webkit-print-color-adjust: exact !important; print-color-adjust: exact !important; }
1391
- }
1392
- /* BRAND_TYPE_ROLES_OVERRIDE_SLOT — branded register may inject role overrides here */
1393
- </style>
1394
- </head>
1395
- <body>
1396
-
1397
- <div class="download-bar">
1398
- <button class="download-btn" onclick="window.print()">
1399
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
1400
- <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/>
1401
- <polyline points="7 10 12 15 17 10"/>
1402
- <line x1="12" y1="15" x2="12" y2="3"/>
1403
- </svg>
1404
- Download PDF
1405
- </button>
1406
- </div>
1407
-
1408
-
1409
- <!-- ════════════════════════════════════════════════════
1410
- COVER
1411
- ════════════════════════════════════════════════════ -->
1412
- <section class="page cover" data-screen-label="01 Cover">
1413
- <img class="print-img" src="cover-print.png" alt="">
1414
-
1415
- <div class="cover-paper">
1416
- <div class="cover-title-line">
1417
- <span class="flank"></span>
1418
- <!-- REPLACE {{ property_name }}: the property's distinct house name
1419
- (e.g. "Sparrows Farm", "Agincourt House") OR — if the property has
1420
- no separate name — the street as a tracked-caps proper noun
1421
- (e.g. "12 Henham Road"). All-caps display via CSS; the source
1422
- should be Title Case. Capped at ~28 characters to fit between
1423
- the gold flank rules. See placeholders.md for the picking rule. -->
1424
- <h1 class="cover-title">{{ property_name }}</h1>
1425
- <span class="flank"></span>
1426
- </div>
1427
-
1428
- <!-- REPLACE {{ address_subtitle }}: the postal address as four parts
1429
- joined by " <em>·</em> " — typically "<street> · <locality> ·
1430
- <county> · <postcode>". For a property without a separate house
1431
- name the cover-title carries the street already; then the subtitle
1432
- drops "<street>" and starts at "<locality>". Use a non-breaking
1433
- space in the postcode (`NP7&nbsp;9TS`). Single line; will not wrap. -->
1434
- <div class="cover-subtitle">{{ address_subtitle }}</div>
1435
- </div>
1436
-
1437
- <div class="cover-image">
1438
- <!-- REPLACE {{ cover_hero_src }} / {{ cover_hero_alt }}: the strongest
1439
- landscape exterior shot. By the images.md slot map this is
1440
- {{ property_slug }}-01.webp (cover hero index). Alt text: property
1441
- name + the moment captured (e.g. "...at golden hour", "...framed by
1442
- the village green"). -->
1443
- <img src="images/{{ cover_hero_src }}" alt="{{ cover_hero_alt }}">
1444
- </div>
1445
- </section>
1446
-
1447
-
1448
- <!-- ════════════════════════════════════════════════════
1449
- CONTENTS — page 2
1450
- ════════════════════════════════════════════════════ -->
1451
- <section class="page" data-screen-label="02 Contents">
1452
- <img class="print-img" src="page2-print.png" alt="">
1453
- <div class="toc-page">
1454
- <div class="toc-image">
1455
- <!-- REPLACE {{ toc_hero_src }} / {{ toc_hero_alt }}: an interior shot
1456
- establishing character — typically the principal reception or the
1457
- open-plan kitchen-dining. Slot index per images.md is normally
1458
- {{ property_slug }}-07. Alt text: short factual description. -->
1459
- <img src="images/{{ toc_hero_src }}" alt="{{ toc_hero_alt }}">
1460
- <!-- REPLACE {{ toc_caption }}: ONE editorial sentence — the property's
1461
- elevator pitch. 15-30 words. Italic register. Often distilled from
1462
- seller brief Q5 ("the feeling on entry") + Q19 ("three words"). -->
1463
- <div class="caption">{{ toc_caption }}</div>
1464
- </div>
1465
- <div class="toc-content">
1466
- <div>
1467
- <div class="toc-rule"></div>
1468
- <h2 class="toc-title">Contents <em>&amp; itinerary</em></h2>
1469
-
1470
- <!-- REPLACE {{ toc_chapter_N_title }} / {{ toc_chapter_N_sub }} /
1471
- {{ toc_chapter_N_page }}: chapter titles, sub-lines and page
1472
- numbers for chapters i–viii. The canonical eight-chapter arc
1473
- is documented in references/structure.md (Of place & pedigree →
1474
- A home at ease → Hall, hearth & sun → Bedrooms & baths →
1475
- [feature page] → Garden & ground → Plan & particulars →
1476
- Material information). Adapt the chapter titles to the property
1477
- (e.g. "Pool, outdoor kitchen & summerhouse" becomes "Terrace
1478
- & outdoor kitchen" when the property has no pool). PAGE NUMBERS
1479
- MUST match the actual rendered pages (default: 03, 04, 06, 08,
1480
- 10, 12, 14, 15 for the 16-page folio with intermissions). -->
1481
- <ul class="toc-list">
1482
- <li>
1483
- <span class="toc-num">i.</span>
1484
- <span class="toc-name">{{ toc_chapter_1_title }}<span>{{ toc_chapter_1_sub }}</span></span>
1485
- <span class="toc-page-num">{{ toc_chapter_1_page }}</span>
1486
- </li>
1487
- <li>
1488
- <span class="toc-num">ii.</span>
1489
- <span class="toc-name">{{ toc_chapter_2_title }}<span>{{ toc_chapter_2_sub }}</span></span>
1490
- <span class="toc-page-num">{{ toc_chapter_2_page }}</span>
1491
- </li>
1492
- <li>
1493
- <span class="toc-num">iii.</span>
1494
- <span class="toc-name">{{ toc_chapter_3_title }}<span>{{ toc_chapter_3_sub }}</span></span>
1495
- <span class="toc-page-num">{{ toc_chapter_3_page }}</span>
1496
- </li>
1497
- <li>
1498
- <span class="toc-num">iv.</span>
1499
- <span class="toc-name">{{ toc_chapter_4_title }}<span>{{ toc_chapter_4_sub }}</span></span>
1500
- <span class="toc-page-num">{{ toc_chapter_4_page }}</span>
1501
- </li>
1502
- <li>
1503
- <span class="toc-num">v.</span>
1504
- <span class="toc-name">{{ toc_chapter_5_title }}<span>{{ toc_chapter_5_sub }}</span></span>
1505
- <span class="toc-page-num">{{ toc_chapter_5_page }}</span>
1506
- </li>
1507
- <li>
1508
- <span class="toc-num">vi.</span>
1509
- <span class="toc-name">{{ toc_chapter_6_title }}<span>{{ toc_chapter_6_sub }}</span></span>
1510
- <span class="toc-page-num">{{ toc_chapter_6_page }}</span>
1511
- </li>
1512
- <li>
1513
- <span class="toc-num">vii.</span>
1514
- <span class="toc-name">{{ toc_chapter_7_title }}<span>{{ toc_chapter_7_sub }}</span></span>
1515
- <span class="toc-page-num">{{ toc_chapter_7_page }}</span>
1516
- </li>
1517
- <li>
1518
- <span class="toc-num">viii.</span>
1519
- <span class="toc-name">{{ toc_chapter_8_title }}<span>{{ toc_chapter_8_sub }}</span></span>
1520
- <span class="toc-page-num">{{ toc_chapter_8_page }}</span>
1521
- </li>
1522
- </ul>
1523
- </div>
1524
-
1525
- <!-- REPLACE {{ toc_credit }}: agent attribution. Two short lines:
1526
- italic photo/floorplan note (boilerplate, see placeholders.md) then
1527
- a <strong>Marketed by {{ brand_name }}</strong>, {{ brand_town }},
1528
- {{ brand_county }}. line. -->
1529
- <div class="toc-credit">
1530
- Photographed in&#8209;situ. Floor plans drawn to indicative scale; areas in sq&nbsp;ft and m&sup2;.<br>
1531
- <strong>Marketed by {{ brand_name }}</strong>, {{ brand_town }}, {{ brand_county }}.
1532
- </div>
1533
- </div>
1534
- </div>
1535
- <!-- REPLACE {{ folio_strip }}: "{{ property_name }} · {{ locality }}" —
1536
- this exact pattern repeats on every interior page. The middle slot
1537
- changes per page ({{ folio_mid_NN }}); the right slot is the page
1538
- number (literal, matches the page index). -->
1539
- <div class="folio">
1540
- <span>{{ folio_strip }}</span>
1541
- <span class="folio-mid">— <em>Contents</em> —</span>
1542
- <span>02</span>
1543
- </div>
1544
- </section>
1545
-
1546
-
1547
- <!-- ════════════════════════════════════════════════════
1548
- OPENER — Spread 03 (Chapter I — Of place & pedigree)
1549
- ════════════════════════════════════════════════════ -->
1550
- <section class="page" data-screen-label="03 Opener">
1551
- <img class="print-img" src="page3-print.png" alt="">
1552
- <div class="opener">
1553
- <div class="opener-text">
1554
- <!-- REPLACE {{ chapter1_eyebrow }}: "Chapter I · <chapter1 title>".
1555
- The chapter1 title is normally "Of place & pedigree" — adapt only
1556
- if the property's narrative arc differs (rare). -->
1557
- <div class="ed-eyebrow">{{ chapter1_eyebrow }}</div>
1558
- <div class="ed-rule"></div>
1559
- <!-- REPLACE {{ opener_title_main }} / {{ opener_title_sub }}: h2 with
1560
- the property name as the main glyph and locality+county as the
1561
- inline <em> sub-line. CSS renders the <em> as a smaller tracked-
1562
- caps label. -->
1563
- <h2 class="opener-title">{{ opener_title_main }}<em>{{ opener_title_sub }}</em></h2>
1564
- <!-- REPLACE {{ opener_spec_line }}: "<strong><street></strong> ·
1565
- <postcode> &nbsp;·&nbsp; <em>{{ price_line }}</em>" — keep the
1566
- strong/em formatting; use the exact price qualifier from
1567
- property.json (Offers Over / Guide Price / Asking Price). -->
1568
- <div class="opener-spec">{{ opener_spec_line }}</div>
1569
-
1570
- <!-- REPLACE {{ opener_meta_N_label }} / {{ opener_meta_N_value }}:
1571
- five fixed slots — typically Bedrooms, Bathrooms, Receptions,
1572
- Internal (sq ft), Plot (acres). Numbers come from property.json.
1573
- If a slot is genuinely unknown (e.g. plot not surveyed, year
1574
- unknown), drop that <div class="item"> rather than inventing
1575
- a value — never synthesise. If the property has no acreage,
1576
- substitute "Type" / "Detached <em>YYYY</em>" or similar. The
1577
- row MUST NOT wrap — see copy.md "Stats rows". -->
1578
- <div class="opener-meta-row">
1579
- <div class="item">
1580
- <span class="k">{{ opener_meta_1_label }}</span>
1581
- <span class="v">{{ opener_meta_1_value }}</span>
1582
- </div>
1583
- <div class="item">
1584
- <span class="k">{{ opener_meta_2_label }}</span>
1585
- <span class="v">{{ opener_meta_2_value }}</span>
1586
- </div>
1587
- <div class="item">
1588
- <span class="k">{{ opener_meta_3_label }}</span>
1589
- <span class="v">{{ opener_meta_3_value }}</span>
1590
- </div>
1591
- <div class="item">
1592
- <span class="k">{{ opener_meta_4_label }}</span>
1593
- <span class="v">{{ opener_meta_4_value }}</span>
1594
- </div>
1595
- <div class="item">
1596
- <span class="k">{{ opener_meta_5_label }}</span>
1597
- <span class="v">{{ opener_meta_5_value }}</span>
1598
- </div>
1599
- </div>
1600
-
1601
- <!-- REPLACE {{ opener_para_1 }} / {{ opener_para_2 }}: two editorial
1602
- paragraphs introducing the home. Style guide in copy.md →
1603
- "Opener paragraphs (page 3)".
1604
- - Para 1 carries the dropcap. 4–6 sentences. Set place + age +
1605
- tenure context. Distil from seller brief Q1 (why bought) +
1606
- Q3 (love most) + Q11 (the area).
1607
- - Para 2: pairs character + comfort or period + modern.
1608
- 3–4 sentences. End on an italic phrase (single sentence
1609
- wrapped in <em>) — the brochure's "voice signature" closer.
1610
- Use <strong> sparingly for the two or three signature features.
1611
- Em-dashes MUST stay rare — see copy.md "Reduce em-dash usage". -->
1612
- <div class="opener-body">
1613
- <p class="ed-body dropcap">
1614
- {{ opener_para_1 }}
1615
- </p>
1616
- <p class="ed-body">
1617
- {{ opener_para_2 }}
1618
- </p>
1619
- </div>
1620
- </div>
1621
-
1622
- <div class="opener-image">
1623
- <!-- REPLACE {{ opener_image_src }} / {{ opener_image_alt }} /
1624
- {{ opener_image_caption }}: the principal elevation OR a strong
1625
- aerial. Slot {{ property_slug }}-02 per images.md. Caption is a
1626
- single italic sentence below the image. -->
1627
- <img src="images/{{ opener_image_src }}" alt="{{ opener_image_alt }}">
1628
- <div class="img-caption">{{ opener_image_caption }}</div>
1629
- </div>
1630
- </div>
1631
- <div class="folio">
1632
- <span>{{ folio_strip }}</span>
1633
- <span class="folio-mid">— <em>{{ folio_mid_03 }}</em> —</span>
1634
- <span>03</span>
1635
- </div>
1636
- </section>
1637
-
1638
-
1639
- <!-- ════════════════════════════════════════════════════
1640
- SPREAD 04 — Chapter II — A home at ease
1641
- ════════════════════════════════════════════════════ -->
1642
- <section class="page" data-screen-label="04 House at ease">
1643
- <img class="print-img" src="page4-print.png" alt="">
1644
- <div class="spread spread-2">
1645
- <div class="hero-img">
1646
- <!-- REPLACE {{ chapter2_hero_src }} / {{ chapter2_hero_alt }}: the
1647
- wide open-plan reception or kitchen-dining hero. Slot 04 or 07. -->
1648
- <img src="images/{{ chapter2_hero_src }}" alt="{{ chapter2_hero_alt }}">
1649
- </div>
1650
- <div class="text-col">
1651
- <!-- REPLACE {{ chapter2_eyebrow }}: "Chapter II" (Roman numeral). -->
1652
- <div class="ed-eyebrow">{{ chapter2_eyebrow }}</div>
1653
- <div class="ed-rule"></div>
1654
- <!-- REPLACE {{ chapter2_heading }}: h3 with property's headline word(s)
1655
- — "A home at ease", "A home built around the table", etc.
1656
- Italic glyph at the end via <em>...</em>. Avoid "house" — use
1657
- "home" per copy.md "Home vs house". -->
1658
- <h3 class="ed-headline smaller">{{ chapter2_heading }}</h3>
1659
- <!-- REPLACE {{ chapter2_deck }}: single italic sentence summarising
1660
- the chapter — 12-25 words. Sourced from seller brief Q5
1661
- (feeling on entry) + Q7 (lifestyle). -->
1662
- <p class="ed-deck">{{ chapter2_deck }}</p>
1663
- <!-- REPLACE {{ chapter2_para_1 }} / {{ chapter2_para_2 }}: two body
1664
- paragraphs walking the reader through the ground-floor flow.
1665
- - Para 1: from entrance through reception(s) to the central
1666
- living space (kitchen-dining-living). 4–6 sentences.
1667
- - Para 2: kitchen specifics (cabinetry, worksurfaces, appliances)
1668
- and how the rooms connect to utility + outdoor. 3–5 sentences.
1669
- Close with an italic phrase if the seller's brief offers one. -->
1670
- <p class="ed-body" style="margin-top: 10px;">
1671
- {{ chapter2_para_1 }}
1672
- </p>
1673
- <p class="ed-body">
1674
- {{ chapter2_para_2 }}
1675
- </p>
1676
- </div>
1677
-
1678
- <!-- REPLACE {{ chapter2_strip_N_src }} / {{ chapter2_strip_N_alt }} /
1679
- {{ chapter2_strip_N_caption_label }} / {{ chapter2_strip_N_caption_text }}:
1680
- three strip cells along the bottom. Each cell has a bold lead-in
1681
- (e.g. "The kitchen.") then a one-sentence descriptive caption.
1682
- Pick distinct moments — not three angles of the same room. -->
1683
- <div class="strip">
1684
- <div class="strip-cell">
1685
- <img src="images/{{ chapter2_strip_1_src }}" alt="{{ chapter2_strip_1_alt }}">
1686
- <div class="ed-caption"><strong>{{ chapter2_strip_1_caption_label }}</strong> {{ chapter2_strip_1_caption_text }}</div>
1687
- </div>
1688
- <div class="strip-cell">
1689
- <img src="images/{{ chapter2_strip_2_src }}" alt="{{ chapter2_strip_2_alt }}">
1690
- <div class="ed-caption"><strong>{{ chapter2_strip_2_caption_label }}</strong> {{ chapter2_strip_2_caption_text }}</div>
1691
- </div>
1692
- <div class="strip-cell">
1693
- <img src="images/{{ chapter2_strip_3_src }}" alt="{{ chapter2_strip_3_alt }}">
1694
- <div class="ed-caption"><strong>{{ chapter2_strip_3_caption_label }}</strong> {{ chapter2_strip_3_caption_text }}</div>
1695
- </div>
1696
- </div>
1697
- </div>
1698
- <div class="folio">
1699
- <span>{{ folio_strip }}</span>
1700
- <span class="folio-mid">— <em>{{ folio_mid_04 }}</em> —</span>
1701
- <span>04</span>
1702
- </div>
1703
- </section>
1704
-
1705
-
1706
- <!-- ════════════════════════════════════════════════════
1707
- PAGE 5 — INTERMISSION (after Chapter II — visual breath)
1708
- ════════════════════════════════════════════════════ -->
1709
- <section class="page intermission" data-screen-label="05 Intermission interior">
1710
- <img class="print-img" src="page5-print.png" alt="">
1711
- <div class="full-bleed">
1712
- <!-- REPLACE {{ intermission_05_src }} / {{ intermission_05_alt }}:
1713
- one full-bleed interior shot — a dining table moment, a hearth, an
1714
- orangery — that gives the eye a beat between chapters II and III.
1715
- Use a slot with strong negative space; avoid busy/cluttered images
1716
- because the caption pill sits on top of them. -->
1717
- <img src="images/{{ intermission_05_src }}" alt="{{ intermission_05_alt }}">
1718
- <div class="caption-pill">
1719
- <span class="ed-eyebrow-light">Continued, Chapter II</span>
1720
- <!-- REPLACE {{ intermission_05_caption }}: single italic sentence
1721
- anchoring the image. Start with "<em>The [room]</em>," — the
1722
- italic noun matches the visible feature. 10-20 words. -->
1723
- <span class="caption-text">{{ intermission_05_caption }}</span>
1724
- </div>
1725
- </div>
1726
- <div class="folio folio-dark">
1727
- <span>{{ folio_strip }}</span>
1728
- <span class="folio-mid">— <em>{{ folio_mid_04 }}</em> —</span>
1729
- <span>05</span>
1730
- </div>
1731
- </section>
1732
-
1733
-
1734
- <!-- ════════════════════════════════════════════════════
1735
- SPREAD 06 — Chapter III (e.g. "Hall, hearth & sun" / "Hearth & hall")
1736
- ════════════════════════════════════════════════════ -->
1737
- <section class="page" data-screen-label="06 Chapter III">
1738
- <img class="print-img" src="page6-print.png" alt="">
1739
- <div class="spread spread-3">
1740
- <div class="head">
1741
- <div class="left">
1742
- <!-- REPLACE {{ chapter3_eyebrow }}: "Chapter III". -->
1743
- <div class="ed-eyebrow">{{ chapter3_eyebrow }}</div>
1744
- <div class="ed-rule"></div>
1745
- <!-- REPLACE {{ chapter3_heading }}: h3, two lines, italic glyph at
1746
- the end. Default arc names this chapter for the home's quieter
1747
- ground-floor moments — hearth, entry, sun-room, drawing room.
1748
- Adapt to the property's actual features ("Hearth & hall" /
1749
- "Hall, hearth & sun" / "Reception rooms"). -->
1750
- <h3 class="ed-headline">{{ chapter3_heading }}</h3>
1751
- </div>
1752
- <div class="right">
1753
- <!-- REPLACE {{ chapter3_deck }}: italic deck sentence. -->
1754
- <p class="ed-deck" style="margin-top: 0;">{{ chapter3_deck }}</p>
1755
- <!-- REPLACE {{ chapter3_para }}: ONE longer body paragraph (6–9
1756
- sentences) walking through the secondary reception rooms.
1757
- Lean on character features — beams, fireplaces, glazing,
1758
- flooring — and connect them to how the rooms are used. -->
1759
- <p class="ed-body" style="margin-top: 12px;">
1760
- {{ chapter3_para }}
1761
- </p>
1762
- </div>
1763
- </div>
1764
-
1765
- <!-- REPLACE {{ chapter3_left_src }} / {{ chapter3_left_alt }}: the
1766
- largest single image of the chapter — typically the hearth or the
1767
- signature reception. -->
1768
- <div class="left-img">
1769
- <img src="images/{{ chapter3_left_src }}" alt="{{ chapter3_left_alt }}">
1770
- </div>
1771
-
1772
- <!-- REPLACE {{ chapter3_stack_N_src }} / _alt: two stacked images on the
1773
- right. Use complementary rooms (e.g. hallway + drawing room, or
1774
- orangery + study). -->
1775
- <div class="right-stack">
1776
- <div class="cell">
1777
- <img src="images/{{ chapter3_stack_1_src }}" alt="{{ chapter3_stack_1_alt }}">
1778
- </div>
1779
- <div class="cell">
1780
- <img src="images/{{ chapter3_stack_2_src }}" alt="{{ chapter3_stack_2_alt }}">
1781
- </div>
1782
- </div>
1783
- </div>
1784
- <div class="folio">
1785
- <span>{{ folio_strip }}</span>
1786
- <span class="folio-mid">— <em>{{ folio_mid_06 }}</em> —</span>
1787
- <span>06</span>
1788
- </div>
1789
- </section>
1790
-
1791
-
1792
- <!-- ════════════════════════════════════════════════════
1793
- PAGE 7 — INTERMISSION (after Chapter III — visual breath)
1794
- ════════════════════════════════════════════════════ -->
1795
- <section class="page intermission" data-screen-label="07 Intermission Chapter III">
1796
- <img class="print-img" src="page7-print.png" alt="">
1797
- <div class="full-bleed">
1798
- <!-- REPLACE {{ intermission_07_src }} / {{ intermission_07_alt }}: a
1799
- second full-bleed interior moment — the orangery, a sun-flooded
1800
- reception, the hearth from a wider angle. -->
1801
- <img src="images/{{ intermission_07_src }}" alt="{{ intermission_07_alt }}">
1802
- <div class="caption-pill">
1803
- <span class="ed-eyebrow-light">Continued, Chapter III</span>
1804
- <!-- REPLACE {{ intermission_07_caption }}: italic anchor sentence,
1805
- same style as page 5. -->
1806
- <span class="caption-text">{{ intermission_07_caption }}</span>
1807
- </div>
1808
- </div>
1809
- <div class="folio folio-dark">
1810
- <span>{{ folio_strip }}</span>
1811
- <span class="folio-mid">— <em>{{ folio_mid_06 }}</em> —</span>
1812
- <span>07</span>
1813
- </div>
1814
- </section>
1815
-
1816
-
1817
- <!-- ════════════════════════════════════════════════════
1818
- SPREAD 08 — Chapter IV — Bedrooms & baths
1819
- ════════════════════════════════════════════════════ -->
1820
- <section class="page" data-screen-label="08 Bedrooms baths">
1821
- <img class="print-img" src="page8-print.png" alt="">
1822
- <div class="spread spread-4">
1823
- <div class="text-side">
1824
- <!-- REPLACE {{ chapter4_eyebrow }}: "Chapter IV". -->
1825
- <div class="ed-eyebrow">{{ chapter4_eyebrow }}</div>
1826
- <div class="ed-rule"></div>
1827
- <!-- REPLACE {{ chapter4_heading }}: "Bedrooms<br>&amp; <em>baths</em>"
1828
- or similar — keep <br> for two-line setting. -->
1829
- <h3 class="ed-headline smaller">{{ chapter4_heading }}</h3>
1830
- <!-- REPLACE {{ chapter4_deck }}: italic deck. Mention the count (X
1831
- bedrooms across Y floors) and the principal suite's signature. -->
1832
- <p class="ed-deck">{{ chapter4_deck }}</p>
1833
-
1834
- <!-- REPLACE {{ chapter4_para_1 }}: 3–5 sentences walking the sleeping
1835
- floor — staircase, landing, second/third/fourth bedrooms in order.
1836
- Lean on light, beam, glazing. -->
1837
- <p class="ed-body" style="margin-top: 10px;">
1838
- {{ chapter4_para_1 }}
1839
- </p>
1840
-
1841
- <!-- REPLACE three .ed-stat blocks. Each has a big number value (.v
1842
- with optional <em> unit) and an all-caps slate label (.l).
1843
- Typical content: bedroom count + character, bathroom count + en-
1844
- suite split, upper-floor sq ft (or first-floor / principal floor).
1845
- Drop the third stat if the property is small (apartment, terrace). -->
1846
- <div style="margin-top: 10px; display: grid; gap: 8px;">
1847
- <div class="ed-stat"><div class="v">{{ chapter4_stat_1_value }}</div><div class="l">{{ chapter4_stat_1_label }}</div></div>
1848
- <div class="ed-stat"><div class="v">{{ chapter4_stat_2_value }}</div><div class="l">{{ chapter4_stat_2_label }}</div></div>
1849
- <div class="ed-stat"><div class="v">{{ chapter4_stat_3_value }}</div><div class="l">{{ chapter4_stat_3_label }}</div></div>
1850
- </div>
1851
-
1852
- <!-- REPLACE {{ chapter4_para_2 }}: 2–3 sentence closer on the
1853
- principal suite — dressing room, en-suite, view from the bed. -->
1854
- <p class="ed-body" style="margin-top: 10px;">
1855
- {{ chapter4_para_2 }}
1856
- </p>
1857
- </div>
1858
-
1859
- <!-- REPLACE 5 gallery cells (1 tall feature + 4 standard). Mix bedrooms
1860
- and bathrooms so the gallery reads as the floor as a whole. The
1861
- tall cell is the principal-bedroom hero — verify pixel content
1862
- matches the principal room (NOT a guest bedroom). -->
1863
- <div class="gallery">
1864
- <div class="cell tall">
1865
- <img src="images/{{ chapter4_gallery_1_src }}" alt="{{ chapter4_gallery_1_alt }}">
1866
- </div>
1867
- <div class="cell">
1868
- <img src="images/{{ chapter4_gallery_2_src }}" alt="{{ chapter4_gallery_2_alt }}">
1869
- </div>
1870
- <div class="cell">
1871
- <img src="images/{{ chapter4_gallery_3_src }}" alt="{{ chapter4_gallery_3_alt }}">
1872
- </div>
1873
- <div class="cell">
1874
- <img src="images/{{ chapter4_gallery_4_src }}" alt="{{ chapter4_gallery_4_alt }}">
1875
- </div>
1876
- <div class="cell">
1877
- <img src="images/{{ chapter4_gallery_5_src }}" alt="{{ chapter4_gallery_5_alt }}">
1878
- </div>
1879
- </div>
1880
- </div>
1881
- <div class="folio">
1882
- <span>{{ folio_strip }}</span>
1883
- <span class="folio-mid">— <em>{{ folio_mid_08 }}</em> —</span>
1884
- <span>08</span>
1885
- </div>
1886
- </section>
1887
-
1888
-
1889
- <!-- ════════════════════════════════════════════════════
1890
- PAGE 9 — IMAGE-LED additional internal coverage ("Rooms in passing")
1891
- ════════════════════════════════════════════════════ -->
1892
- <section class="page" data-screen-label="09 Image-led additional internal">
1893
- <img class="print-img" src="page9-print.png" alt="">
1894
- <div class="gallery-page">
1895
- <div class="gallery-head">
1896
- <!-- REPLACE {{ gallery_eyebrow }}: "Continued, Chapter II &amp; III"
1897
- or similar — links the gallery to the chapters whose imagery
1898
- it expands. -->
1899
- <div class="ed-eyebrow">{{ gallery_eyebrow }}</div>
1900
- <div class="ed-rule"></div>
1901
- <!-- REPLACE {{ gallery_heading }} / {{ gallery_deck }}: h3 + deck for
1902
- "Rooms in passing" — supplementary internal coverage. Keep
1903
- heading short (2–4 words italic close). -->
1904
- <h3 class="ed-headline smaller">{{ gallery_heading }}</h3>
1905
- <p class="ed-deck" style="margin-top: 8px;">{{ gallery_deck }}</p>
1906
- </div>
1907
- <!-- REPLACE five gallery cells, each with src/alt + a one-line italic
1908
- figcaption. The tall cell is the strongest single room. Captions
1909
- are SHORT — "<em>The living room.</em>" + (optional) trailing
1910
- clause. Don't repeat captions from the strip cells in Chapter II. -->
1911
- <div class="gallery-grid">
1912
- <div class="gallery-cell tall">
1913
- <img src="images/{{ gallery_1_src }}" alt="{{ gallery_1_alt }}">
1914
- <figcaption>{{ gallery_1_caption }}</figcaption>
1915
- </div>
1916
- <div class="gallery-cell">
1917
- <img src="images/{{ gallery_2_src }}" alt="{{ gallery_2_alt }}">
1918
- <figcaption>{{ gallery_2_caption }}</figcaption>
1919
- </div>
1920
- <div class="gallery-cell">
1921
- <img src="images/{{ gallery_3_src }}" alt="{{ gallery_3_alt }}">
1922
- <figcaption>{{ gallery_3_caption }}</figcaption>
1923
- </div>
1924
- <div class="gallery-cell">
1925
- <img src="images/{{ gallery_4_src }}" alt="{{ gallery_4_alt }}">
1926
- <figcaption>{{ gallery_4_caption }}</figcaption>
1927
- </div>
1928
- <div class="gallery-cell">
1929
- <img src="images/{{ gallery_5_src }}" alt="{{ gallery_5_alt }}">
1930
- <figcaption>{{ gallery_5_caption }}</figcaption>
1931
- </div>
1932
- </div>
1933
- </div>
1934
- <div class="folio">
1935
- <span>{{ folio_strip }}</span>
1936
- <span class="folio-mid">— <em>{{ folio_mid_09 }}</em> —</span>
1937
- <span>09</span>
1938
- </div>
1939
- </section>
1940
-
1941
-
1942
- <!-- ════════════════════════════════════════════════════
1943
- SPREAD 10 — Chapter V — Feature page (pool / outdoor kitchen /
1944
- summerhouse OR property-specific equivalent: terrace, annexe, studio,
1945
- pavilion, etc.). Repurpose the chapter title to the actual feature.
1946
- ════════════════════════════════════════════════════ -->
1947
- <section class="page" data-screen-label="10 Feature page">
1948
- <img class="print-img" src="page10-print.png" alt="">
1949
- <div class="feature-page">
1950
- <div class="photo">
1951
- <!-- REPLACE {{ chapter5_photo_src }} / {{ chapter5_photo_alt }} /
1952
- {{ chapter5_photo_caption }}: the strongest single shot of the
1953
- feature, with a one-sentence caption beneath. -->
1954
- <img src="images/{{ chapter5_photo_src }}" alt="{{ chapter5_photo_alt }}">
1955
- <div class="photo-caption">{{ chapter5_photo_caption }}</div>
1956
- </div>
1957
- <div class="panel">
1958
- <!-- REPLACE {{ chapter5_eyebrow }}: "Chapter V · <feature title>" —
1959
- "Pool, outdoor kitchen & summerhouse", "Terrace & outdoor kitchen",
1960
- "The annexe & studio", etc. Match the TOC entry. -->
1961
- <div class="ed-eyebrow">{{ chapter5_eyebrow }}</div>
1962
- <div class="ed-rule"></div>
1963
- <!-- REPLACE {{ chapter5_heading }}: italic editorial headline summing
1964
- the feature's appeal. Two-line layout (use <br>). -->
1965
- <h3 class="ed-headline smaller">{{ chapter5_heading }}</h3>
1966
- <!-- REPLACE {{ chapter5_deck }}: italic deck — 18-30 words. -->
1967
- <p class="ed-deck" style="margin-top: 12px;">{{ chapter5_deck }}</p>
1968
-
1969
- <!-- REPLACE {{ chapter5_para }}: ONE body paragraph (5–7 sentences)
1970
- walking the feature in detail. Name each sub-element exactly —
1971
- "outdoor kitchen" / "summerhouse" / "orangery" are NOT
1972
- interchangeable; see structure.md "Distinguishing features
1973
- clearly". -->
1974
- <p class="ed-body" style="margin-top: 12px;">
1975
- {{ chapter5_para }}
1976
- </p>
1977
-
1978
- <!-- REPLACE four .attr blocks. Each has a small all-caps label (.k)
1979
- and a one-line value (.v). Pick four crisp facts — plot size,
1980
- a single distinctive feature, a count, a material. Drop a row
1981
- if the property has only three relevant facts. -->
1982
- <div class="attr-grid">
1983
- <div class="attr">
1984
- <div class="k">{{ chapter5_attr_1_label }}</div>
1985
- <div class="v">{{ chapter5_attr_1_value }}</div>
1986
- </div>
1987
- <div class="attr">
1988
- <div class="k">{{ chapter5_attr_2_label }}</div>
1989
- <div class="v">{{ chapter5_attr_2_value }}</div>
1990
- </div>
1991
- <div class="attr">
1992
- <div class="k">{{ chapter5_attr_3_label }}</div>
1993
- <div class="v">{{ chapter5_attr_3_value }}</div>
1994
- </div>
1995
- <div class="attr">
1996
- <div class="k">{{ chapter5_attr_4_label }}</div>
1997
- <div class="v">{{ chapter5_attr_4_value }}</div>
1998
- </div>
1999
- </div>
2000
- </div>
2001
- </div>
2002
- <div class="folio">
2003
- <span>{{ folio_strip }}</span>
2004
- <span class="folio-mid">— <em>{{ folio_mid_10 }}</em> —</span>
2005
- <span>10</span>
2006
- </div>
2007
- </section>
2008
-
2009
-
2010
- <!-- ════════════════════════════════════════════════════
2011
- PAGE 11 — INTERMISSION (after Chapter V — outdoor full-bleed)
2012
- ════════════════════════════════════════════════════ -->
2013
- <section class="page intermission" data-screen-label="11 Intermission outdoor">
2014
- <img class="print-img" src="page11-print.png" alt="">
2015
- <div class="full-bleed">
2016
- <!-- REPLACE {{ intermission_11_src }} / {{ intermission_11_alt }}: the
2017
- strongest single outdoor moment — pool at golden hour, terrace,
2018
- pergola, garden-from-distance. Drone shots work well here. -->
2019
- <img src="images/{{ intermission_11_src }}" alt="{{ intermission_11_alt }}">
2020
- <div class="caption-pill">
2021
- <span class="ed-eyebrow-light">Continued, Chapter V</span>
2022
- <!-- REPLACE {{ intermission_11_caption }}: italic anchor sentence. -->
2023
- <span class="caption-text">{{ intermission_11_caption }}</span>
2024
- </div>
2025
- </div>
2026
- <div class="folio folio-dark">
2027
- <span>{{ folio_strip }}</span>
2028
- <span class="folio-mid">— <em>{{ folio_mid_10 }}</em> —</span>
2029
- <span>11</span>
2030
- </div>
2031
- </section>
2032
-
2033
-
2034
- <!-- ════════════════════════════════════════════════════
2035
- SPREAD 12 — Chapter VI — Garden & ground
2036
- ════════════════════════════════════════════════════ -->
2037
- <section class="page folio-dark" data-screen-label="12 Garden ground">
2038
- <img class="print-img" src="page12-print.png" alt="">
2039
- <div class="spread spread-6">
2040
- <div class="top-image">
2041
- <!-- REPLACE {{ chapter6_top_src }} / {{ chapter6_top_alt }}: the full
2042
- front elevation OR a wide aerial that frames the home in its
2043
- setting. The overlay sits on top — verify the image has a
2044
- contrast-quiet region for the overlay panel. -->
2045
- <img src="images/{{ chapter6_top_src }}" alt="{{ chapter6_top_alt }}">
2046
- <div class="overlay">
2047
- <!-- REPLACE {{ chapter6_eyebrow }} / {{ chapter6_heading }}:
2048
- "Chapter VI" and the chapter title. The heading reads as
2049
- "Garden,<br>drive <em>&amp; outlook</em>" or similar — adapt
2050
- to the property's actual ground-floor outdoor narrative. -->
2051
- <div class="ed-eyebrow">{{ chapter6_eyebrow }}</div>
2052
- <div class="ed-rule"></div>
2053
- <h3 class="ed-headline">{{ chapter6_heading }}</h3>
2054
- </div>
2055
- </div>
2056
-
2057
- <!-- REPLACE four .bottom panels — each is a one-paragraph mini-section
2058
- with an italic h4 label and a 2–3 sentence body. Typical four:
2059
- rear garden, paddocks/plot, front/approach, ancillary
2060
- outbuildings. Re-title for the property. -->
2061
- <div class="bottom">
2062
- <h4>{{ chapter6_panel_1_heading }}</h4>
2063
- <p class="ed-body">{{ chapter6_panel_1_body }}</p>
2064
- </div>
2065
- <div class="bottom">
2066
- <h4>{{ chapter6_panel_2_heading }}</h4>
2067
- <p class="ed-body">{{ chapter6_panel_2_body }}</p>
2068
- </div>
2069
- <div class="bottom">
2070
- <h4>{{ chapter6_panel_3_heading }}</h4>
2071
- <p class="ed-body">{{ chapter6_panel_3_body }}</p>
2072
- </div>
2073
- <div class="bottom">
2074
- <h4>{{ chapter6_panel_4_heading }}</h4>
2075
- <p class="ed-body">{{ chapter6_panel_4_body }}</p>
2076
- </div>
2077
- </div>
2078
- <div class="folio">
2079
- <span>{{ folio_strip }}</span>
2080
- <span class="folio-mid">— <em>{{ folio_mid_12 }}</em> —</span>
2081
- <span>12</span>
2082
- </div>
2083
- </section>
2084
-
2085
-
2086
- <!-- ════════════════════════════════════════════════════
2087
- PAGE 13 — SITE PLAN (continued from Chapter VI)
2088
- ════════════════════════════════════════════════════ -->
2089
- <section class="page" data-screen-label="13 Site plan">
2090
- <img class="print-img" src="page13-print.png" alt="">
2091
- <div class="siteplan-page">
2092
- <div class="head">
2093
- <!-- REPLACE {{ siteplan_eyebrow }}: "Continued, Chapter VI · The plot"
2094
- or similar. -->
2095
- <div class="ed-eyebrow">{{ siteplan_eyebrow }}</div>
2096
- <div class="ed-rule"></div>
2097
- <!-- REPLACE {{ siteplan_heading }}: the plot's headline fact —
2098
- "In excess of <em>2.20 acres</em>", "The <em>plot &amp; outlook</em>",
2099
- "Approximately <em>1.4 acres</em>". -->
2100
- <h3 class="ed-headline smaller">{{ siteplan_heading }}</h3>
2101
- </div>
2102
- <div class="plan-area">
2103
- <!-- REPLACE {{ siteplan_src }} / {{ siteplan_alt }}: the plot drawing
2104
- (trees, boundary, paddocks, outbuildings). Filename is normally
2105
- {{ property_slug }}-siteplan.png — line art, copied unchanged. -->
2106
- <img src="images/{{ siteplan_src }}" alt="{{ siteplan_alt }}">
2107
- </div>
2108
- <div class="text-side">
2109
- <!-- REPLACE three .text-side h4 + p pairs. Typical content: plot
2110
- description, boundary/screening, what sits within the grounds
2111
- (garden complex, paddocks, outbuildings). Then a small italic
2112
- ed-caption note about plan accuracy. -->
2113
- <h4>{{ siteplan_panel_1_heading }}</h4>
2114
- <p class="ed-body">{{ siteplan_panel_1_body }}</p>
2115
- <h4>{{ siteplan_panel_2_heading }}</h4>
2116
- <p class="ed-body">{{ siteplan_panel_2_body }}</p>
2117
- <h4>{{ siteplan_panel_3_heading }}</h4>
2118
- <p class="ed-body">{{ siteplan_panel_3_body }}</p>
2119
- <p class="ed-caption" style="margin-top: 4px;">Plan drawn to indicative scale; not to be relied on for legal purposes.</p>
2120
- </div>
2121
- </div>
2122
- <div class="folio">
2123
- <span>{{ folio_strip }}</span>
2124
- <span class="folio-mid">— <em>{{ folio_mid_13 }}</em> —</span>
2125
- <span>13</span>
2126
- </div>
2127
- </section>
2128
-
2129
-
2130
- <!-- ════════════════════════════════════════════════════
2131
- SPREAD 14 — Chapter VII — Plan & particulars
2132
- ════════════════════════════════════════════════════ -->
2133
- <section class="page" data-screen-label="14 Plan particulars">
2134
- <img class="print-img" src="page14-print.png" alt="">
2135
- <div class="spread spread-7">
2136
- <div class="header">
2137
- <!-- REPLACE {{ chapter7_eyebrow }}: "Chapter VII · Plan &amp; particulars". -->
2138
- <div class="ed-eyebrow">{{ chapter7_eyebrow }}</div>
2139
- <div class="ed-rule"></div>
2140
- <!-- REPLACE {{ chapter7_heading }}: "All floors <em>at a glance</em>"
2141
- or similar. -->
2142
- <h3 class="ed-headline smaller">{{ chapter7_heading }}</h3>
2143
- </div>
2144
-
2145
- <div class="plan-area">
2146
- <!-- REPLACE {{ floorplan_src }} / {{ floorplan_alt }}: the composite
2147
- floor plan, typically {{ property_slug }}-floorplan.png. PNG,
2148
- line art, copied unchanged from source (do NOT WebP-encode line
2149
- art; see images.md "Floor plan exception"). -->
2150
- <img src="images/{{ floorplan_src }}" alt="{{ floorplan_alt }}">
2151
- <div class="meta">
2152
- <!-- REPLACE {{ floorplan_lead }}: italic lead — "Total internal area
2153
- · <em>X sq ft</em> · Y m&sup2;". -->
2154
- <div class="lead">{{ floorplan_lead }}</div>
2155
- <!-- REPLACE {{ floorplan_sub }}: floor-by-floor breakdown — "Floor 1
2156
- · X sq ft &nbsp;·&nbsp; Floor 2 · Y sq ft" plus any ancillary
2157
- footprints (garage, outbuildings, plot). Excluded outbuildings
2158
- must be LISTED SEPARATELY — never silently rolled into the
2159
- principal home's sq ft; see structure.md "Floor area". -->
2160
- <div class="sub">{{ floorplan_sub }}</div>
2161
- </div>
2162
- </div>
2163
-
2164
- <div class="spec-side">
2165
- <div class="ed-eyebrow" style="margin-bottom: 6px;">Particulars</div>
2166
- <!-- REPLACE 9 numbered particulars (.spec-list li × 9). Each is a
2167
- single short sentence highlighting one feature with <strong> on
2168
- the named element. Sequence: top-line architectural fact,
2169
- character feature, kitchen specifics, heating/services, signature
2170
- internal feature, signature outdoor feature, ancillary buildings,
2171
- plot, outlook. Adapt count to the property — fewer if smaller,
2172
- never more than 9 (the column overflows). -->
2173
- <ol class="spec-list">
2174
- <li><span class="num">i</span><span>{{ particular_1 }}</span></li>
2175
- <li><span class="num">ii</span><span>{{ particular_2 }}</span></li>
2176
- <li><span class="num">iii</span><span>{{ particular_3 }}</span></li>
2177
- <li><span class="num">iv</span><span>{{ particular_4 }}</span></li>
2178
- <li><span class="num">v</span><span>{{ particular_5 }}</span></li>
2179
- <li><span class="num">vi</span><span>{{ particular_6 }}</span></li>
2180
- <li><span class="num">vii</span><span>{{ particular_7 }}</span></li>
2181
- <li><span class="num">viii</span><span>{{ particular_8 }}</span></li>
2182
- <li><span class="num">ix</span><span>{{ particular_9 }}</span></li>
2183
- </ol>
2184
-
2185
- <div class="epc-block">
2186
- <!-- REPLACE {{ epc_rating }}: the current band letter A–G. The CSS
2187
- class .current on the matching <div class="epc-bar X"> lights
2188
- that band; the others are dim. The exact pattern below shows
2189
- band C as the "current" — substitute by changing which row
2190
- carries `class="epc-bar X current"`. -->
2191
- <div class="epc-title">Energy &amp; environment <em>· EPC {{ epc_rating }}</em></div>
2192
- <div class="epc-bars">
2193
- <div class="epc-bar a{{ epc_current_a }}">A</div>
2194
- <div class="epc-bar b{{ epc_current_b }}">B</div>
2195
- <div class="epc-bar c{{ epc_current_c }}">C</div>
2196
- <div class="epc-bar d{{ epc_current_d }}">D</div>
2197
- <div class="epc-bar e{{ epc_current_e }}">E</div>
2198
- <div class="epc-bar f{{ epc_current_f }}">F</div>
2199
- <div class="epc-bar g{{ epc_current_g }}">G</div>
2200
- </div>
2201
- <!-- REPLACE {{ epc_caption }}: 1–2 sentences on the heating system
2202
- and what the EPC band reflects about the home's fabric. -->
2203
- <p class="ed-caption" style="margin-top: 8px;">
2204
- {{ epc_caption }}
2205
- </p>
2206
- </div>
2207
- </div>
2208
- </div>
2209
- <div class="folio">
2210
- <span>{{ folio_strip }}</span>
2211
- <span class="folio-mid">— <em>{{ folio_mid_14 }}</em> —</span>
2212
- <span>14</span>
2213
- </div>
2214
- </section>
2215
-
2216
-
2217
- <!-- ════════════════════════════════════════════════════
2218
- SPREAD 15 — Chapter VIII — Material Information (DMCCA 2024)
2219
- ════════════════════════════════════════════════════ -->
2220
- <section class="page" data-screen-label="15 Material information">
2221
- <img class="print-img" src="page15-print.png" alt="">
2222
- <div class="mi-page">
2223
- <div class="mi-head">
2224
- <div>
2225
- <!-- REPLACE {{ chapter8_eyebrow }}: "Chapter VIII · Disclosure". -->
2226
- <div class="ed-eyebrow">{{ chapter8_eyebrow }}</div>
2227
- <div class="ed-rule"></div>
2228
- <h3 class="ed-headline smaller">Material <em>information</em></h3>
2229
- </div>
2230
- <!-- Disclosure intro paragraph — DO NOT EDIT (boilerplate compliance text). -->
2231
- <div class="mi-intro">
2232
- Provided in accordance with the Consumer Protection from Unfair Trading Regulations 2008, the Digital Markets, Competition and Consumers Act 2024, and National Trading Standards guidance on material information in property listings.
2233
- </div>
2234
- </div>
2235
-
2236
- <!-- REPLACE every .mi-row value (.v slot). The three columns are
2237
- fixed Part A / Part B / Part C per UK DMCCA 2024 guidance. Mark
2238
- unknowns "TBC" verbatim — never invent. Drop a row only if the
2239
- field is genuinely not applicable to the property (e.g. "Coastal
2240
- Erosion" for an inland home). Add a row if the property has a
2241
- distinctive fact not in the canonical list (e.g. "Pool",
2242
- "Annexe"). Keep all keys as single-line; values can be short
2243
- pairs ("G · £3,890 pa") joined with "&nbsp;·&nbsp;". -->
2244
- <div class="mi-grid">
2245
- <div class="mi-section">
2246
- <div class="mi-label">Part A · Material to all transactions</div>
2247
- <div class="mi-row"><span class="k">Asking Price</span><span class="v">{{ mi_price }}</span></div>
2248
- <div class="mi-row"><span class="k">Tenure</span><span class="v">{{ mi_tenure }}</span></div>
2249
- <div class="mi-row"><span class="k">Title Number</span><span class="v">{{ mi_title_number }}</span></div>
2250
- <div class="mi-row"><span class="k">Council Tax Band</span><span class="v">{{ mi_council_tax }}</span></div>
2251
- <div class="mi-row"><span class="k">Local Authority</span><span class="v">{{ mi_local_authority }}</span></div>
2252
- <div class="mi-row"><span class="k">Property Type</span><span class="v">{{ mi_property_type }}</span></div>
2253
- <div class="mi-row"><span class="k">Year Built</span><span class="v">{{ mi_year_built }}</span></div>
2254
- <div class="mi-row"><span class="k">Bedrooms</span><span class="v">{{ mi_bedrooms }}</span></div>
2255
- <div class="mi-row"><span class="k">Bathrooms</span><span class="v">{{ mi_bathrooms }}</span></div>
2256
- <div class="mi-row"><span class="k">Receptions</span><span class="v">{{ mi_receptions }}</span></div>
2257
- <div class="mi-row"><span class="k">Floor Area</span><span class="v">{{ mi_floor_area }}</span></div>
2258
- <div class="mi-row"><span class="k">Heating</span><span class="v">{{ mi_heating }}</span></div>
2259
- <div class="mi-row"><span class="k">Electricity</span><span class="v">{{ mi_electricity }}</span></div>
2260
- <div class="mi-row"><span class="k">Broadband</span><span class="v">{{ mi_broadband }}</span></div>
2261
- <div class="mi-row"><span class="k">Mobile Signal</span><span class="v">{{ mi_mobile }}</span></div>
2262
- <div class="mi-row"><span class="k">Parking</span><span class="v">{{ mi_parking }}</span></div>
2263
- <div class="mi-row"><span class="k">EPC</span><span class="v">{{ epc_rating }}</span></div>
2264
- </div>
2265
-
2266
- <div class="mi-section">
2267
- <div class="mi-label">Part B · Where applicable</div>
2268
- <div class="mi-row"><span class="k">Building Safety</span><span class="v">{{ mi_building_safety }}</span></div>
2269
- <div class="mi-row"><span class="k">Restrictive Covenants</span><span class="v">{{ mi_covenants }}</span></div>
2270
- <div class="mi-row"><span class="k">Rights of Way</span><span class="v">{{ mi_rights_of_way }}</span></div>
2271
- <div class="mi-row"><span class="k">Easements</span><span class="v">{{ mi_easements }}</span></div>
2272
- <div class="mi-row"><span class="k">Listed Building</span><span class="v">{{ mi_listed }}</span></div>
2273
- <div class="mi-row"><span class="k">Conservation Area</span><span class="v">{{ mi_conservation }}</span></div>
2274
- <div class="mi-row"><span class="k">Tree Preservation</span><span class="v">{{ mi_tpo }}</span></div>
2275
- <div class="mi-row"><span class="k">Accessibility</span><span class="v">{{ mi_accessibility }}</span></div>
2276
- <div class="mi-row"><span class="k">Water Supply</span><span class="v">{{ mi_water }}</span></div>
2277
- <div class="mi-row"><span class="k">Sewerage</span><span class="v">{{ mi_sewerage }}</span></div>
2278
- <div class="mi-row"><span class="k">Outbuildings</span><span class="v">{{ mi_outbuildings }}</span></div>
2279
- <div class="mi-row"><span class="k">{{ mi_part_b_extra_label }}</span><span class="v">{{ mi_part_b_extra_value }}</span></div>
2280
- </div>
2281
-
2282
- <div class="mi-section">
2283
- <div class="mi-label">Part C · Additional material facts</div>
2284
- <div class="mi-row"><span class="k">Flood Risk, Rivers &amp; Seas</span><span class="v">{{ mi_flood_rivers }}</span></div>
2285
- <div class="mi-row"><span class="k">Flood Risk, Surface Water</span><span class="v">{{ mi_flood_surface }}</span></div>
2286
- <div class="mi-row"><span class="k">Coastal Erosion</span><span class="v">{{ mi_coastal }}</span></div>
2287
- <div class="mi-row"><span class="k">Planning</span><span class="v">{{ mi_planning }}</span></div>
2288
- <div class="mi-row"><span class="k">Construction</span><span class="v">{{ mi_construction }}</span></div>
2289
- <div class="mi-row"><span class="k">Structural</span><span class="v">{{ mi_structural }}</span></div>
2290
- <div class="mi-row"><span class="k">Subsidence</span><span class="v">{{ mi_subsidence }}</span></div>
2291
- <div class="mi-row"><span class="k">Damp</span><span class="v">{{ mi_damp }}</span></div>
2292
- <div class="mi-row"><span class="k">Asbestos</span><span class="v">{{ mi_asbestos }}</span></div>
2293
- <div class="mi-row"><span class="k">Japanese Knotweed</span><span class="v">{{ mi_knotweed }}</span></div>
2294
- <div class="mi-row"><span class="k">Mining</span><span class="v">{{ mi_mining }}</span></div>
2295
- <div class="mi-row"><span class="k">Electrical Cert.</span><span class="v">{{ mi_electrical_cert }}</span></div>
2296
- <div class="mi-row"><span class="k">UPRN</span><span class="v">{{ mi_uprn }}</span></div>
2297
- </div>
2298
- </div>
2299
-
2300
- <!-- Disclosure footer — keep boilerplate; tweak only if your jurisdiction requires different wording. -->
2301
- <div class="mi-foot">
2302
- The agent has made reasonable enquiries to verify this information; prospective purchasers should satisfy themselves as to its accuracy through their own legal and survey processes. Items marked TBC will be confirmed by the seller's solicitor.
2303
- </div>
2304
- </div>
2305
- <div class="folio">
2306
- <span>{{ folio_strip }}</span>
2307
- <span class="folio-mid">— <em>Material information</em> —</span>
2308
- <span>15</span>
2309
- </div>
2310
- </section>
2311
-
2312
-
2313
- <!-- ════════════════════════════════════════════════════
2314
- BACK PAGE
2315
- ════════════════════════════════════════════════════ -->
2316
- <section class="page backpage" data-screen-label="16 Back page">
2317
- <img class="print-img" src="backpage-print.png" alt="">
2318
- <div class="bg">
2319
- <!-- REPLACE {{ backpage_bg_src }} / {{ backpage_bg_alt }}: the back-page
2320
- atmospheric background. Typically a rear elevation or aerial at
2321
- golden hour. Filename {{ property_slug }}-26 per images.md. -->
2322
- <img src="images/{{ backpage_bg_src }}" alt="{{ backpage_bg_alt }}">
2323
- </div>
2324
- <div class="backpage-frame"></div>
2325
-
2326
- <div class="backpage-inner">
2327
- <!-- REPLACE {{ brand_slug }}: the brand's slug from the brand pack —
2328
- used to resolve the LIGHT-ART logo on the dark back-page hero. The
2329
- brand-design SKILL writes <brand>-logo-light.png; substituting
2330
- {{ brand_slug }} resolves the path. Alt text is the brand name. -->
2331
- <div class="back-mast">
2332
- <img class="back-mast-logo" src="images/{{ brand_slug }}-logo-light.png" alt="{{ brand_name }}">
2333
- </div>
2334
-
2335
- <!-- REPLACE {{ backpage_headline }}: "Arrange a viewing of
2336
- <em>{{ property_name }}</em>". The <em> on the property name is
2337
- consistent with the cover and opener. Don't substitute a different
2338
- CTA wording — this is the canonical closer. -->
2339
- <h2 class="back-headline">{{ backpage_headline }}</h2>
2340
-
2341
- <!-- REPLACE {{ backpage_tagline }}: single sentence summarising the
2342
- property (size · key features · grounds). 25-45 words. Mirrors
2343
- but does not duplicate the cover/opener copy. Close with "Best
2344
- understood in person." or an equivalent property-specific clincher. -->
2345
- <p class="back-tagline">{{ backpage_tagline }}</p>
2346
-
2347
- <div class="back-rule"></div>
2348
-
2349
- <!-- REPLACE the agent + office cells. {{ agent_first_name }} sits in
2350
- <em>; {{ agent_surname }} follows in normal weight. {{ office_phone }}
2351
- is the display format ("01873 377 575"); {{ office_email }} the
2352
- contact email; {{ office_address_line_1 }} and
2353
- {{ office_address_line_2 }} the postal lines. -->
2354
- <div class="back-contact-grid">
2355
- <div class="cell">
2356
- <div class="k">The Agent</div>
2357
- <div class="name"><em>{{ agent_first_name }}</em> {{ agent_surname }}</div>
2358
- <div class="line">
2359
- {{ office_phone }}<br>
2360
- {{ office_email }}
2361
- </div>
2362
- </div>
2363
- <div class="cell">
2364
- <div class="k">The Office</div>
2365
- <div class="name">{{ brand_name }} <span class="dot">·</span> <em>{{ brand_town }}</em></div>
2366
- <div class="line">
2367
- {{ office_address_line_1 }}<br>
2368
- {{ office_address_line_2 }}
2369
- </div>
2370
- </div>
2371
- </div>
2372
-
2373
- <!-- REPLACE the QR strip — TWO clickable QR codes. The qr-video.png
2374
- and qr-listing.png images are generated by qrencode at brochure-
2375
- assembly time. Each <a> wraps the QR image + label + visible URL,
2376
- all clickable. The visible URL beneath each QR is MANDATORY —
2377
- the digital reader's equivalent of scanning. See structure.md
2378
- "Back-page QR codes". If the listing has no video tour, drop
2379
- the first <a> and let the listing QR span the strip. -->
2380
- <div class="back-qr-strip">
2381
- <a class="qr" href="{{ video_url }}" target="_blank" rel="noopener">
2382
- <img src="images/qr-video.png" alt="Scan or click to view the property video tour">
2383
- <div class="qr-label">Watch the <em>video tour</em></div>
2384
- <div class="qr-link">{{ video_short_url }}</div>
2385
- </a>
2386
- <a class="qr" href="{{ listing_url }}" target="_blank" rel="noopener">
2387
- <img src="images/qr-listing.png" alt="Scan or click to view the full property listing">
2388
- <div class="qr-label">View the <em>full listing</em></div>
2389
- <div class="qr-link">{{ listing_display }}</div>
2390
- </a>
2391
- </div>
2392
- </div>
2393
-
2394
- <div class="back-disclaimer">
2395
- These particulars, whilst believed to be accurate, are set out as a general outline only for guidance and do not constitute any part of an offer or contract. Intending purchasers should not rely on them as statements or representations of fact, but must satisfy themselves by inspection or otherwise as to their accuracy. All measurements are approximate and floor plans are drawn to indicative scale. Some images may include CGI or AI enhancements for illustrative purposes.
2396
- </div>
2397
- </section>
2398
-
2399
- </body>
2400
- </html>