From 2016c35df01476cfcf087a871d024c90d7037a02 Mon Sep 17 00:00:00 2001 From: DemchaAV Date: Mon, 31 Aug 2026 13:32:41 +0100 Subject: [PATCH] feat(templates): add the Terracotta Rail two-column CV preset MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit An architect's one-page CV: a narrow column with a serif monogram over a terracotta rule, the contact channels behind their marks, two bulleted lists, the credentials and a block of closing facts, beside a wide column with a letter-spaced masthead, the summary, the roles held on a ringed rail, a projects grid and the degrees. It ports a published standalone template onto the existing CvDocument with no model change: eight berths reach their sections by title, and the software berth is claimed before the competency one so a section titled for both is drawn once rather than twice. The monogram is drawn from the name's own initials rather than a field of its own, so a document states its name once. A link in the contact block is set smaller than the channels above it, because a URL is one long token that cannot be broken and is the line that outgrows that column first; it takes the mark of the network it points at, or a globe. The headings are letter-spaced with a real space character rather than a style property — a hair space in the sidebar, a thin space in the wider column. Like its siblings it holds one page: the body is a single atomic row, so a longer CV raises AtomicNodeTooLargeException rather than losing an entry. Guarded by a smoke test, an exact layout snapshot and a pixel-parity gate; the examples showcase gains `cv-terracotta-rail-v2`. --- CHANGELOG.md | 25 + .../readme/examples/cv-terracotta-rail-v2.pdf | Bin 0 -> 40888 bytes .../demcha/examples/GenerateAllExamples.java | 2 + .../examples/support/ShowcaseMetadata.java | 1 + .../support/TerracottaRailSampleData.java | 207 + .../cv/v2/TerracottaRailExample.java | 57 + .../cv/presets/TerracottaRailFixtures.java | 205 + .../TerracottaRailLayoutSnapshotTest.java | 38 + .../cv/presets/TerracottaRailSmokeTest.java | 225 + .../TerracottaRailVisualParityTest.java | 45 + .../cv-v2/terracotta_rail_layout.json | 4637 +++++++++++++++++ .../cv-v2-layered/terracotta_rail-page-0.png | Bin 0 -> 143214 bytes .../templates/cv/presets/TerracottaRail.java | 219 + .../cv/presets/TerracottaRailAside.java | 306 ++ .../cv/presets/TerracottaRailIcons.java | 97 + .../cv/presets/TerracottaRailMain.java | 337 ++ .../cv/presets/TerracottaRailStyles.java | 182 + .../cv/presets/TerracottaRailWidgets.java | 260 + .../cv/terracotta-rail/icons/badge.svg | 1 + .../cv/terracotta-rail/icons/building.svg | 1 + .../cv/terracotta-rail/icons/clock.svg | 1 + .../cv/terracotta-rail/icons/email.svg | 1 + .../cv/terracotta-rail/icons/globe.svg | 1 + .../cv/terracotta-rail/icons/hotel.svg | 1 + .../cv/terracotta-rail/icons/house.svg | 1 + .../cv/terracotta-rail/icons/linkedin.svg | 1 + .../cv/terracotta-rail/icons/location.svg | 1 + .../cv/terracotta-rail/icons/phone.svg | 1 + .../cv/terracotta-rail/icons/square.svg | 1 + 29 files changed, 6854 insertions(+) create mode 100644 assets/readme/examples/cv-terracotta-rail-v2.pdf create mode 100644 examples/src/main/java/com/demcha/examples/support/TerracottaRailSampleData.java create mode 100644 examples/src/main/java/com/demcha/examples/templates/cv/v2/TerracottaRailExample.java create mode 100644 qa/src/test/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailFixtures.java create mode 100644 qa/src/test/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailLayoutSnapshotTest.java create mode 100644 qa/src/test/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailSmokeTest.java create mode 100644 qa/src/test/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailVisualParityTest.java create mode 100644 qa/src/test/resources/layout-snapshots/canonical-templates/cv-v2/terracotta_rail_layout.json create mode 100644 qa/src/test/resources/visual-baselines/cv-v2-layered/terracotta_rail-page-0.png create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/cv/presets/TerracottaRail.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailAside.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailIcons.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailMain.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailStyles.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailWidgets.java create mode 100644 templates/src/main/resources/templates/cv/terracotta-rail/icons/badge.svg create mode 100644 templates/src/main/resources/templates/cv/terracotta-rail/icons/building.svg create mode 100644 templates/src/main/resources/templates/cv/terracotta-rail/icons/clock.svg create mode 100644 templates/src/main/resources/templates/cv/terracotta-rail/icons/email.svg create mode 100644 templates/src/main/resources/templates/cv/terracotta-rail/icons/globe.svg create mode 100644 templates/src/main/resources/templates/cv/terracotta-rail/icons/hotel.svg create mode 100644 templates/src/main/resources/templates/cv/terracotta-rail/icons/house.svg create mode 100644 templates/src/main/resources/templates/cv/terracotta-rail/icons/linkedin.svg create mode 100644 templates/src/main/resources/templates/cv/terracotta-rail/icons/location.svg create mode 100644 templates/src/main/resources/templates/cv/terracotta-rail/icons/phone.svg create mode 100644 templates/src/main/resources/templates/cv/terracotta-rail/icons/square.svg diff --git a/CHANGELOG.md b/CHANGELOG.md index 89c1ee8e3..d7f869e47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -84,6 +84,31 @@ follow semantic versioning; release dates are ISO 8601. ### Templates +- **An architect's two-column CV preset: `TerracottaRail`.** A one-page A4 sheet whose + narrow column carries a serif monogram over a terracotta rule, the contact channels + behind their marks, two bulleted lists and a block of closing facts, beside a wide + column carrying a letter-spaced masthead, the summary, the roles held on a ringed + rail, a projects grid and the degrees. Ships as `cv.presets.TerracottaRail` on the + existing `CvDocument` model with **no model change at all**, porting the rendered + layout of a published standalone template. Like `CharcoalGold` it leaves the page to + the caller. Eight berths reach their sections by title; the two bulleted lists are + skills without levels, because this design writes them as plain lines — one takes a + terracotta square and no dash under its heading, the other a disc and a dash, which + is how the sheet tells two lists of one-liners apart. Each fact and each project + takes the mark its entry names in `CvEntry.icon()` from this preset's own vocabulary, + a project title is a link when its entry carries one, and the monogram is drawn from + the name's own initials rather than a field of its own — a document states its name + once, and a monogram that could disagree with it would be a second place to keep + true. A link in the contact block is set smaller than the channels above it, because + a URL is one long token that cannot be broken and is the line that outgrows that + column first; it takes the mark of the network it points at, or a globe. Like its + siblings it holds one page: the body is a single atomic row, so a longer CV raises + `AtomicNodeTooLargeException` rather than flowing or dropping entries. Guarded by a + smoke test (including the unknown-mark data error, an entry with no mark, an identity + with no links, a document with nothing but an identity, the monogram, the link + targets and the one-page limit), an exact layout snapshot and a pixel-parity gate; + the examples showcase gains `cv-terracotta-rail-v2`. + - **The first invoice preset that paginates what it ports: `LumaStudioInvoice`.** A studio invoice built around a cream sidebar — the two-line monogram and the wordmark on a terracotta block at its head, a tinted quarter-disc, an arch and a sprig running diff --git a/assets/readme/examples/cv-terracotta-rail-v2.pdf b/assets/readme/examples/cv-terracotta-rail-v2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f598c897ed65937bf19b1de54cf3d6c7e3144d13 GIT binary patch literal 40888 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� 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 literal 0 HcmV?d00001 diff --git a/examples/src/main/java/com/demcha/examples/GenerateAllExamples.java b/examples/src/main/java/com/demcha/examples/GenerateAllExamples.java index 55bb1da8a..398cd51e9 100644 --- a/examples/src/main/java/com/demcha/examples/GenerateAllExamples.java +++ b/examples/src/main/java/com/demcha/examples/GenerateAllExamples.java @@ -80,6 +80,7 @@ import com.demcha.examples.templates.coverletter.CvSidebarPortraitLetterV2Example; import com.demcha.examples.templates.coverletter.CvTimelineMinimalLetterV2Example; import com.demcha.examples.templates.cv.v2.CharcoalGoldExample; +import com.demcha.examples.templates.cv.v2.TerracottaRailExample; import com.demcha.examples.templates.cv.v2.CvBlueBannerExample; import com.demcha.examples.templates.cv.v2.CvBoxedV2Example; import com.demcha.examples.templates.cv.v2.CvCenteredHeadlineExample; @@ -154,6 +155,7 @@ public static void main(String[] args) throws Exception { System.out.println("Generated: " + ProfessionalSidebarExample.generate()); System.out.println("Generated: " + SerifHeadlineExample.generate()); System.out.println("Generated: " + CharcoalGoldExample.generate()); + System.out.println("Generated: " + TerracottaRailExample.generate()); // Cover letters (v2 layered — 15 paired letters, one per CV preset) System.out.println("Generated: " + CvBlueBannerLetterV2Example.generate()); diff --git a/examples/src/main/java/com/demcha/examples/support/ShowcaseMetadata.java b/examples/src/main/java/com/demcha/examples/support/ShowcaseMetadata.java index da69b14cf..9df177429 100644 --- a/examples/src/main/java/com/demcha/examples/support/ShowcaseMetadata.java +++ b/examples/src/main/java/com/demcha/examples/support/ShowcaseMetadata.java @@ -64,6 +64,7 @@ record Entry(String title, String description, List tags, String codeUrl cv("cv-navy-sidebar-v2", "NavySidebarExample", "Navy Sidebar", "Navy plate with a ringed portrait, contact marks, degrees, skills and languages, beside a white column of summary, badged sections and roles strung on a timeline rail.", "sidebar", "navy", "portrait"); cv("cv-serif-headline-v2", "SerifHeadlineExample", "Serif Headline", "Volkhov masthead over a two-column body: roles on a timeline rail and marked project cards beside degrees and skill meters, closing with full-width certification and achievement bands.", "serif", "two-column"); cv("cv-charcoal-gold-v2", "CharcoalGoldExample", "Charcoal Gold", "Charcoal sidebar with a ringed photograph, rated skills and languages, beside a paper column with a two-tone name, a dated experience rail and paired credential columns.", "sidebar", "photo", "gold"); + cv("cv-terracotta-rail-v2", "TerracottaRailExample", "Terracotta Rail", "Serif monogram over a terracotta rule, contact channels behind their marks and two bulleted lists, beside a letter-spaced masthead, roles on a ringed rail, a projects grid and the degrees.", "sidebar", "monogram", "terracotta"); // ===== Templates / Cover Letter (v2 layered, paired 1:1 with CV) ===== // Registered directly: letter() points at the layered preset examples under diff --git a/examples/src/main/java/com/demcha/examples/support/TerracottaRailSampleData.java b/examples/src/main/java/com/demcha/examples/support/TerracottaRailSampleData.java new file mode 100644 index 000000000..2a6490270 --- /dev/null +++ b/examples/src/main/java/com/demcha/examples/support/TerracottaRailSampleData.java @@ -0,0 +1,207 @@ +package com.demcha.examples.support; + +import com.demcha.compose.document.templates.core.identity.Contact; +import com.demcha.compose.document.templates.core.identity.Link; +import com.demcha.compose.document.templates.cv.data.CvDocument; +import com.demcha.compose.document.templates.cv.data.CvEntry; +import com.demcha.compose.document.templates.cv.data.CvIdentity; +import com.demcha.compose.document.templates.cv.data.CvName; +import com.demcha.compose.document.templates.cv.data.CvSkill; +import com.demcha.compose.document.templates.cv.data.EntriesSection; +import com.demcha.compose.document.templates.cv.data.ParagraphSection; +import com.demcha.compose.document.templates.cv.data.SkillGroup; +import com.demcha.compose.document.templates.cv.data.SkillsSection; +import com.demcha.compose.document.templates.cv.data.Slot; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.OptionalDouble; + +/** + * Shared sample data for the Terracotta Rail CV example. + * + *

The sample is the preset's reference content: an architect's one-page + * CV with a monogram, four contact rows including a link, two bulleted + * lists, two credentials, three facts behind their marks, a three-paragraph + * summary, three roles on the rail, three marked projects and two + * degrees.

+ * + *

Kept in lockstep with the qa module's {@code TerracottaRailFixtures} — + * the two modules cannot share a source file, so a content change here + * belongs there too.

+ */ +public final class TerracottaRailSampleData { + + /** The break a fact stacks its values on. */ + private static final String NEWLINE = String.valueOf((char) 10); + + /** The dash this sheet writes a date range with. */ + private static final String EN_DASH = String.valueOf((char) 0x2013); + + private TerracottaRailSampleData() { + } + + /** The single-page reference CV. */ + public static CvDocument sample() { + List placements = new ArrayList<>(); + placements.add(new CvDocument.Placement(Slot.SIDEBAR, competencies())); + placements.add(new CvDocument.Placement(Slot.SIDEBAR, software())); + placements.add(new CvDocument.Placement(Slot.SIDEBAR, certifications())); + placements.add(new CvDocument.Placement(Slot.SIDEBAR, facts())); + placements.add(new CvDocument.Placement(Slot.MAIN, summary())); + placements.add(new CvDocument.Placement(Slot.MAIN, experience())); + placements.add(new CvDocument.Placement(Slot.MAIN, projects())); + placements.add(new CvDocument.Placement(Slot.MAIN, education())); + return new CvDocument(identity(), placements); + } + + private static CvIdentity identity() { + return new CvIdentity( + CvName.of("OLIVER", "BENNETT"), + "SENIOR ARCHITECT", + new Contact("+44 7700 900123", "oliver.bennett@email.com", + "Bristol, United Kingdom"), + List.of(new Link("linkedin.com/in/oliverbennett-architect", + "https://linkedin.com/in/oliverbennett-architect")), + Optional.empty()); + } + + private static SkillsSection competencies() { + return plainSkills("CORE COMPETENCIES", + "Architectural Design", "Concept Development", "Planning Applications", + "Technical Drawings", "Revit", "AutoCAD", "BIM Coordination", + "Design Presentations", "Project Delivery", "Stakeholder Management", + "Sustainable Design", "Building Regulations"); + } + + private static SkillsSection software() { + return plainSkills("SOFTWARE", + "Revit", "AutoCAD", "Rhino", "SketchUp", "Adobe InDesign", "Photoshop", + "Microsoft Office"); + } + + private static EntriesSection certifications() { + return new EntriesSection("CERTIFICATIONS", List.of( + CvEntry.builder("ARB Registered Architect").build(), + CvEntry.builder("RIBA Chartered Member").build())); + } + + private static EntriesSection facts() { + return new EntriesSection("ADDITIONAL INFORMATION", List.of( + CvEntry.builder("Languages:") + .icon("globe") + .body("English (Native)," + NEWLINE + "Spanish (Conversational)") + .build(), + CvEntry.builder("Right to Work:") + .icon("badge") + .body("United Kingdom") + .build(), + CvEntry.builder("Availability:") + .icon("clock") + .body("1 month notice") + .build())); + } + + private static ParagraphSection summary() { + return new ParagraphSection("PROFESSIONAL SUMMARY", String.join(NEWLINE, + "Senior Architect with over 8 years of experience delivering residential, " + + "mixed-use, and commercial projects across all RIBA work stages.", + "Proven expertise in design development, planning applications, and technical " + + "delivery with a strong focus on sustainability, quality, and user " + + "experience.", + "Collaborative communicator skilled in coordinating consultants, engaging " + + "stakeholders, and leading multidisciplinary teams to achieve " + + "successful outcomes.")); + } + + private static EntriesSection experience() { + return new EntriesSection("PROFESSIONAL EXPERIENCE", List.of( + CvEntry.builder("Senior Architect") + .subtitle("Northline Studio, Bristol, UK") + .date("2021" + EN_DASH + "Present") + .body(String.join(NEWLINE, + "Lead design packages from concept through to detailed design " + + "across mid-scale residential and mixed-use projects.", + "Coordinate structural, M&E, landscape and planning consultants " + + "to ensure integrated and buildable solutions.", + "Prepare and manage planning applications, design and access " + + "statements, and supporting documentation.", + "Present and communicate design proposals to clients and " + + "stakeholders, securing approvals and driving projects " + + "forward.")) + .build(), + CvEntry.builder("Architect") + .subtitle("Urban Form Partners, Bath, UK") + .date("2018" + EN_DASH + "2021") + .body(String.join(NEWLINE, + "Developed concept and technical designs for a range of " + + "residential, commercial, and education projects.", + "Prepared coordinated drawing sets, schedules, and " + + "specifications to support planning and construction.", + "Supported project delivery on site, resolving design queries " + + "and ensuring quality outcomes.", + "Coordinated with contractors and consultants to maintain " + + "programme, budget and design intent.")) + .build(), + CvEntry.builder("Part II Architectural Assistant") + .subtitle("Axis Design Workshop, Cardiff, UK") + .date("2016" + EN_DASH + "2018") + .body(String.join(NEWLINE, + "Supported senior architects across all RIBA stages on a " + + "variety of project types.", + "Produced CAD and Revit drawings, models, and visualisations to " + + "communicate design intent.", + "Undertook research, prepared presentation boards, and assisted " + + "with planning documentation.")) + .build())); + } + + private static EntriesSection projects() { + return new EntriesSection("SELECTED PROJECTS", List.of( + CvEntry.builder("Harbour Point") + .subtitle("Mixed-Use Regeneration") + .place("Bristol") + .icon("building") + .body("Mixed-use development delivering 142 homes, retail space and " + + "public realm improvements; secured planning consent and is " + + "now on site.") + .build(), + CvEntry.builder("The Assembly Hotel") + .subtitle("Boutique Hotel Refurbishment") + .place("Bath") + .icon("hotel") + .body("Sensitive refurbishment of listed building to create a " + + "36-bedroom boutique hotel; enhanced heritage features and " + + "guest experience.") + .build(), + CvEntry.builder("Elmwood Mews") + .subtitle("Residential Development") + .place("Clifton, Bristol") + .icon("house") + .body("Design of 28 high-quality homes within a sustainable masterplan; " + + "achieved high environmental standards and strong sales " + + "performance.") + .build())); + } + + private static EntriesSection education() { + return new EntriesSection("EDUCATION", List.of( + CvEntry.builder("MArch Architecture") + .subtitle("University of Sheffield") + .date("2014" + EN_DASH + "2016") + .build(), + CvEntry.builder("BA (Hons) Architecture") + .subtitle("University of the West of England") + .date("2011" + EN_DASH + "2014") + .build())); + } + + private static SkillsSection plainSkills(String title, String... names) { + List entries = new ArrayList<>(); + for (String name : names) { + entries.add(new CvSkill(name, OptionalDouble.empty())); + } + return new SkillsSection(title, List.of(new SkillGroup(title, entries))); + } +} diff --git a/examples/src/main/java/com/demcha/examples/templates/cv/v2/TerracottaRailExample.java b/examples/src/main/java/com/demcha/examples/templates/cv/v2/TerracottaRailExample.java new file mode 100644 index 000000000..6bce9e01d --- /dev/null +++ b/examples/src/main/java/com/demcha/examples/templates/cv/v2/TerracottaRailExample.java @@ -0,0 +1,57 @@ +package com.demcha.examples.templates.cv.v2; + +import com.demcha.compose.GraphCompose; +import com.demcha.compose.document.api.DocumentPageSize; +import com.demcha.compose.document.api.DocumentSession; +import com.demcha.compose.document.templates.api.DocumentTemplate; +import com.demcha.compose.document.templates.cv.data.CvDocument; +import com.demcha.compose.document.templates.cv.presets.TerracottaRail; +import com.demcha.examples.support.ExampleOutputPaths; +import com.demcha.examples.support.TerracottaRailSampleData; + +import java.nio.file.Path; + +/** + * Renders the layered {@code cv.v2} Terracotta Rail preset against the + * architect sample. + * + *

Output: + * {@code examples/target/generated-pdfs/templates/cv/cv-terracotta-rail-v2.pdf}.

+ * + *

The preset leaves the page to the caller, so the session sets A4 with + * no margin: both columns run to the paper edge and each carries its own + * padding.

+ */ +public final class TerracottaRailExample { + + private TerracottaRailExample() { + } + + /** + * @return absolute path of the rendered PDF + * @throws Exception if rendering fails + */ + public static Path generate() throws Exception { + Path outputFile = ExampleOutputPaths.prepare( + "templates/cv", "cv-terracotta-rail-v2.pdf"); + CvDocument doc = TerracottaRailSampleData.sample(); + DocumentTemplate template = TerracottaRail.create(); + + try (DocumentSession document = GraphCompose.document(outputFile) + .pageSize(DocumentPageSize.A4) + .margin(0f, 0f, 0f, 0f) + .create()) { + template.compose(document, doc); + document.buildPdf(); + } + return outputFile; + } + + /** + * @param args ignored + * @throws Exception if rendering fails + */ + public static void main(String[] args) throws Exception { + System.out.println("Generated: " + generate()); + } +} diff --git a/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailFixtures.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailFixtures.java new file mode 100644 index 000000000..6b8271bd5 --- /dev/null +++ b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailFixtures.java @@ -0,0 +1,205 @@ +package com.demcha.compose.document.templates.cv.presets; + +import com.demcha.compose.document.templates.core.identity.Contact; +import com.demcha.compose.document.templates.core.identity.Link; +import com.demcha.compose.document.templates.cv.data.CvDocument; +import com.demcha.compose.document.templates.cv.data.CvEntry; +import com.demcha.compose.document.templates.cv.data.CvIdentity; +import com.demcha.compose.document.templates.cv.data.CvName; +import com.demcha.compose.document.templates.cv.data.CvSkill; +import com.demcha.compose.document.templates.cv.data.EntriesSection; +import com.demcha.compose.document.templates.cv.data.ParagraphSection; +import com.demcha.compose.document.templates.cv.data.SkillGroup; +import com.demcha.compose.document.templates.cv.data.SkillsSection; +import com.demcha.compose.document.templates.cv.data.Slot; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.OptionalDouble; + +/** + * Shared fixture data for the {@link TerracottaRail} gates — the SAME + * document feeds the pixel parity test and the layout snapshot test, so a + * geometry shift the pixel budget absorbs still trips the exact snapshot, + * and vice versa. + */ +final class TerracottaRailFixtures { + + /** The break a fact stacks its values on. */ + private static final String NEWLINE = String.valueOf((char) 10); + + /** The dash this sheet writes a date range with. */ + private static final String EN_DASH = String.valueOf((char) 0x2013); + + private TerracottaRailFixtures() { + } + + /** + * The canonical one-page CV — the monogram, four contact rows including + * a link, two bulleted lists, two credentials, three facts behind their + * marks, a three-paragraph summary, three roles on the rail, three + * marked projects and two degrees. + */ + static CvDocument canonicalCv() { + List placements = new ArrayList<>(); + placements.add(new CvDocument.Placement(Slot.SIDEBAR, competencies())); + placements.add(new CvDocument.Placement(Slot.SIDEBAR, software())); + placements.add(new CvDocument.Placement(Slot.SIDEBAR, certifications())); + placements.add(new CvDocument.Placement(Slot.SIDEBAR, facts())); + placements.add(new CvDocument.Placement(Slot.MAIN, summary())); + placements.add(new CvDocument.Placement(Slot.MAIN, experience())); + placements.add(new CvDocument.Placement(Slot.MAIN, projects())); + placements.add(new CvDocument.Placement(Slot.MAIN, education())); + return new CvDocument(identity(), placements); + } + + static CvIdentity identity() { + return new CvIdentity( + CvName.of("OLIVER", "BENNETT"), + "SENIOR ARCHITECT", + new Contact("+44 7700 900123", "oliver.bennett@email.com", + "Bristol, United Kingdom"), + List.of(new Link("linkedin.com/in/oliverbennett-architect", + "https://linkedin.com/in/oliverbennett-architect")), + Optional.empty()); + } + + static SkillsSection competencies() { + return plainSkills("CORE COMPETENCIES", + "Architectural Design", "Concept Development", "Planning Applications", + "Technical Drawings", "Revit", "AutoCAD", "BIM Coordination", + "Design Presentations", "Project Delivery", "Stakeholder Management", + "Sustainable Design", "Building Regulations"); + } + + static SkillsSection software() { + return plainSkills("SOFTWARE", + "Revit", "AutoCAD", "Rhino", "SketchUp", "Adobe InDesign", "Photoshop", + "Microsoft Office"); + } + + static EntriesSection certifications() { + return new EntriesSection("CERTIFICATIONS", List.of( + CvEntry.builder("ARB Registered Architect").build(), + CvEntry.builder("RIBA Chartered Member").build())); + } + + static EntriesSection facts() { + return new EntriesSection("ADDITIONAL INFORMATION", List.of( + CvEntry.builder("Languages:") + .icon("globe") + .body("English (Native)," + NEWLINE + "Spanish (Conversational)") + .build(), + CvEntry.builder("Right to Work:") + .icon("badge") + .body("United Kingdom") + .build(), + CvEntry.builder("Availability:") + .icon("clock") + .body("1 month notice") + .build())); + } + + static ParagraphSection summary() { + return new ParagraphSection("PROFESSIONAL SUMMARY", String.join(NEWLINE, + "Senior Architect with over 8 years of experience delivering residential, " + + "mixed-use, and commercial projects across all RIBA work stages.", + "Proven expertise in design development, planning applications, and technical " + + "delivery with a strong focus on sustainability, quality, and user " + + "experience.", + "Collaborative communicator skilled in coordinating consultants, engaging " + + "stakeholders, and leading multidisciplinary teams to achieve " + + "successful outcomes.")); + } + + static EntriesSection experience() { + return new EntriesSection("PROFESSIONAL EXPERIENCE", List.of( + CvEntry.builder("Senior Architect") + .subtitle("Northline Studio, Bristol, UK") + .date("2021" + EN_DASH + "Present") + .body(String.join(NEWLINE, + "Lead design packages from concept through to detailed design " + + "across mid-scale residential and mixed-use projects.", + "Coordinate structural, M&E, landscape and planning consultants " + + "to ensure integrated and buildable solutions.", + "Prepare and manage planning applications, design and access " + + "statements, and supporting documentation.", + "Present and communicate design proposals to clients and " + + "stakeholders, securing approvals and driving projects " + + "forward.")) + .build(), + CvEntry.builder("Architect") + .subtitle("Urban Form Partners, Bath, UK") + .date("2018" + EN_DASH + "2021") + .body(String.join(NEWLINE, + "Developed concept and technical designs for a range of " + + "residential, commercial, and education projects.", + "Prepared coordinated drawing sets, schedules, and " + + "specifications to support planning and construction.", + "Supported project delivery on site, resolving design queries " + + "and ensuring quality outcomes.", + "Coordinated with contractors and consultants to maintain " + + "programme, budget and design intent.")) + .build(), + CvEntry.builder("Part II Architectural Assistant") + .subtitle("Axis Design Workshop, Cardiff, UK") + .date("2016" + EN_DASH + "2018") + .body(String.join(NEWLINE, + "Supported senior architects across all RIBA stages on a " + + "variety of project types.", + "Produced CAD and Revit drawings, models, and visualisations to " + + "communicate design intent.", + "Undertook research, prepared presentation boards, and assisted " + + "with planning documentation.")) + .build())); + } + + static EntriesSection projects() { + return new EntriesSection("SELECTED PROJECTS", List.of( + CvEntry.builder("Harbour Point") + .subtitle("Mixed-Use Regeneration") + .place("Bristol") + .icon("building") + .body("Mixed-use development delivering 142 homes, retail space and " + + "public realm improvements; secured planning consent and is " + + "now on site.") + .build(), + CvEntry.builder("The Assembly Hotel") + .subtitle("Boutique Hotel Refurbishment") + .place("Bath") + .icon("hotel") + .body("Sensitive refurbishment of listed building to create a " + + "36-bedroom boutique hotel; enhanced heritage features and " + + "guest experience.") + .build(), + CvEntry.builder("Elmwood Mews") + .subtitle("Residential Development") + .place("Clifton, Bristol") + .icon("house") + .body("Design of 28 high-quality homes within a sustainable masterplan; " + + "achieved high environmental standards and strong sales " + + "performance.") + .build())); + } + + static EntriesSection education() { + return new EntriesSection("EDUCATION", List.of( + CvEntry.builder("MArch Architecture") + .subtitle("University of Sheffield") + .date("2014" + EN_DASH + "2016") + .build(), + CvEntry.builder("BA (Hons) Architecture") + .subtitle("University of the West of England") + .date("2011" + EN_DASH + "2014") + .build())); + } + + private static SkillsSection plainSkills(String title, String... names) { + List entries = new ArrayList<>(); + for (String name : names) { + entries.add(new CvSkill(name, OptionalDouble.empty())); + } + return new SkillsSection(title, List.of(new SkillGroup(title, entries))); + } +} diff --git a/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailLayoutSnapshotTest.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailLayoutSnapshotTest.java new file mode 100644 index 000000000..bb2a3af80 --- /dev/null +++ b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailLayoutSnapshotTest.java @@ -0,0 +1,38 @@ +package com.demcha.compose.document.templates.cv.presets; + +import com.demcha.compose.GraphCompose; +import com.demcha.compose.document.api.DocumentPageSize; +import com.demcha.compose.document.api.DocumentSession; +import com.demcha.compose.document.templates.TemplateTestSupport; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Exact layout snapshot gate for {@link TerracottaRail} — freezes the + * resolved geometry of the canonical one-page CV, which the pixel budget + * cannot see: a small column or spacing shift stays under the visual-diff + * budget but changes the snapshot. + * + *

This preset leaves the page to the caller, so the session sets A4 with + * no margin: both columns run to the paper edge and each carries its own + * padding.

+ * + *

Refresh with {@code -Dgraphcompose.updateSnapshots=true} after a + * deliberate layout change, and commit the JSON with the change.

+ */ +class TerracottaRailLayoutSnapshotTest { + + @Test + void canonicalCvMatchesLayoutSnapshot() throws Exception { + try (DocumentSession session = GraphCompose.document() + .pageSize(DocumentPageSize.A4) + .margin(0f, 0f, 0f, 0f) + .create()) { + TerracottaRail.create().compose(session, TerracottaRailFixtures.canonicalCv()); + assertThat(session.layoutSnapshot().totalPages()).isEqualTo(1); + TemplateTestSupport.assertCanonicalSnapshot( + session, "terracotta_rail_layout", "cv-v2"); + } + } +} diff --git a/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailSmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailSmokeTest.java new file mode 100644 index 000000000..d443008f6 --- /dev/null +++ b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailSmokeTest.java @@ -0,0 +1,225 @@ +package com.demcha.compose.document.templates.cv.presets; + +import com.demcha.compose.GraphCompose; +import com.demcha.compose.document.api.DocumentPageSize; +import com.demcha.compose.document.api.DocumentSession; +import com.demcha.compose.document.templates.api.DocumentTemplate; +import com.demcha.compose.document.templates.core.identity.Contact; +import com.demcha.compose.document.templates.core.identity.Link; +import com.demcha.compose.document.templates.cv.data.CvDocument; +import com.demcha.compose.document.templates.cv.data.CvEntry; +import com.demcha.compose.document.templates.cv.data.CvIdentity; +import com.demcha.compose.document.templates.cv.data.CvName; +import com.demcha.compose.document.templates.cv.data.EntriesSection; +import com.demcha.compose.document.templates.cv.data.Slot; +import org.apache.pdfbox.Loader; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionURI; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLink; +import org.apache.pdfbox.text.PDFTextStripper; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +/** + * Smoke test for {@link TerracottaRail} — proves the preset renders a + * {@link CvDocument} end-to-end with its packaged marks, draws the monogram + * from the name, reports an unknown icon token as a data error, refuses a CV + * longer than its sheet rather than losing an entry, and carries the contact + * channels and a project title as link annotations, which move no pixel and + * no layout node so neither gate would notice them going missing. + */ +class TerracottaRailSmokeTest { + + private static byte[] render(CvDocument doc) throws Exception { + try (DocumentSession session = GraphCompose.document() + .pageSize(DocumentPageSize.A4) + .margin(0f, 0f, 0f, 0f) + .create()) { + TerracottaRail.create().compose(session, doc); + assertThat(session.roots()).isNotEmpty(); + byte[] pdfBytes = session.toPdfBytes(); + assertThat(pdfBytes).isNotEmpty(); + return pdfBytes; + } + } + + private static String textOf(byte[] pdfBytes) throws Exception { + try (PDDocument document = Loader.loadPDF(pdfBytes)) { + return new PDFTextStripper().getText(document); + } + } + + /** + * The text with its spaces removed. The sheet's headings and its masthead + * are letter-spaced with real space characters, so what is being asserted + * is the wording, not the tracking. + */ + private static String compact(String text) { + return text.replaceAll("(?U)\\s", ""); + } + + private static List linkTargets(byte[] pdfBytes) throws Exception { + List targets = new ArrayList<>(); + try (PDDocument document = Loader.loadPDF(pdfBytes)) { + for (PDPage page : document.getPages()) { + for (PDAnnotation annotation : page.getAnnotations()) { + if (annotation instanceof PDAnnotationLink link + && link.getAction() instanceof PDActionURI uri) { + targets.add(uri.getURI()); + } + } + } + } + return targets; + } + + /** The canonical document with one section replaced. */ + private static CvDocument withSection(Slot slot, EntriesSection replacement, + String replacedTitle) { + List placements = new ArrayList<>(); + for (CvDocument.Placement placement : TerracottaRailFixtures.canonicalCv().placements()) { + if (placement.section().title().equals(replacedTitle)) { + placements.add(new CvDocument.Placement(slot, replacement)); + } else { + placements.add(placement); + } + } + return new CvDocument(TerracottaRailFixtures.identity(), placements); + } + + @Test + void exposesStableIdentity() { + DocumentTemplate template = TerracottaRail.create(); + assertThat(template.id()).isEqualTo(TerracottaRail.ID); + assertThat(template.displayName()).isEqualTo(TerracottaRail.DISPLAY_NAME); + } + + @Test + void rendersCanonicalCvWithPackagedMarks() throws Exception { + render(TerracottaRailFixtures.canonicalCv()); + } + + @Test + void canonicalRenderCarriesEveryColumnsText() throws Exception { + String text = textOf(render(TerracottaRailFixtures.canonicalCv())); + assertThat(text) + .contains("oliver.bennett@email.com") + .contains("Architectural Design") + .contains("Microsoft Office") + .contains("ARB Registered Architect") + .contains("Northline Studio, Bristol, UK") + .contains("Harbour Point") + .contains("University of Sheffield"); + assertThat(compact(text)) + .contains("OLIVERBENNETT") + .contains("SENIORARCHITECT") + .contains("PROFESSIONALEXPERIENCE"); + } + + @Test + void theMonogramIsDrawnFromTheName() throws Exception { + // Two capitals on their own line, and no field of their own in the + // model: the initials are the whole source. + String text = textOf(render(TerracottaRailFixtures.canonicalCv())); + assertThat(text.lines().map(String::strip).toList()).contains("OB"); + } + + @Test + void contactChannelsAndLinksAreClickable() throws Exception { + List targets = linkTargets(render(TerracottaRailFixtures.canonicalCv())); + assertThat(targets) + .contains("mailto:oliver.bennett@email.com") + .contains("tel:+447700900123") + .contains("https://linkedin.com/in/oliverbennett-architect"); + } + + @Test + void aProjectTitleBecomesALinkWhenItsEntryCarriesOne() throws Exception { + EntriesSection linked = new EntriesSection("SELECTED PROJECTS", List.of( + CvEntry.builder("Harbour Point") + .subtitle("Mixed-Use Regeneration") + .place("Bristol") + .icon("building") + .link("https://example.test/harbour-point") + .body("Mixed-use development delivering 142 homes.") + .build())); + + List targets = linkTargets( + render(withSection(Slot.MAIN, linked, "SELECTED PROJECTS"))); + assertThat(targets).contains("https://example.test/harbour-point"); + } + + @Test + void anEntryWithoutAMarkIsDrawnWithoutOne() throws Exception { + EntriesSection unmarked = new EntriesSection("ADDITIONAL INFORMATION", List.of( + CvEntry.builder("Right to Work:").body("United Kingdom").build())); + + String text = textOf(render(withSection(Slot.SIDEBAR, unmarked, + "ADDITIONAL INFORMATION"))); + assertThat(text).contains("Right to Work:").contains("United Kingdom"); + } + + @Test + void anUnknownMarkIsReportedAsADataError() { + EntriesSection wrong = new EntriesSection("ADDITIONAL INFORMATION", List.of( + CvEntry.builder("Languages:").icon("telescope").body("English").build())); + + assertThatThrownBy(() -> render(withSection(Slot.SIDEBAR, wrong, + "ADDITIONAL INFORMATION"))) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("telescope") + .hasMessageContaining("badge"); + } + + @Test + void aDocumentWithNothingButAnIdentityStillRenders() throws Exception { + // Every berth empty: no heading, no divider, and nothing drawn but + // the monogram, its rule and the masthead. + render(new CvDocument(TerracottaRailFixtures.identity(), List.of())); + } + + @Test + void anIdentityWithoutLinksDrawsTheThreeChannelsAndNothingElse() throws Exception { + // The contact triple is non-blank by construction, so the three + // channels are always there; the links are what a document may omit. + CvIdentity noLinks = new CvIdentity(CvName.of("Ada", "Lovelace"), "Analyst", + new Contact("+44 20 7946 0000", "ada@example.test", "London, UK"), + List.of(), Optional.empty()); + + // A run that wraps or breaks at a space carries one annotation per + // piece, so it is the set of targets that is asserted, not the count. + byte[] pdfBytes = render(new CvDocument(noLinks, List.of())); + assertThat(Set.copyOf(linkTargets(pdfBytes))) + .containsExactlyInAnyOrder("mailto:ada@example.test", "tel:+442079460000"); + assertThat(textOf(pdfBytes).lines().map(String::strip).toList()).contains("AL"); + } + + @Test + void refusesACvLongerThanTheSheet() { + // The two columns are one row, and a row is atomic: a CV that outgrows + // the sheet raises rather than losing an entry to a silent cap. + List many = new ArrayList<>(); + for (int index = 0; index < 14; index++) { + many.add(CvEntry.builder("Senior Architect " + index) + .subtitle("Northline Studio, Bristol, UK") + .date("2021") + .body("Lead design packages from concept through to detailed design.") + .build()); + } + CvDocument tooLong = withSection(Slot.MAIN, + new EntriesSection("PROFESSIONAL EXPERIENCE", many), + "PROFESSIONAL EXPERIENCE"); + + assertThatThrownBy(() -> render(tooLong)) + .hasMessageContaining("Body"); + } +} diff --git a/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailVisualParityTest.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailVisualParityTest.java new file mode 100644 index 000000000..e4833448e --- /dev/null +++ b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailVisualParityTest.java @@ -0,0 +1,45 @@ +package com.demcha.compose.document.templates.cv.presets; + +import com.demcha.compose.GraphCompose; +import com.demcha.compose.document.api.DocumentPageSize; +import com.demcha.compose.document.api.DocumentSession; +import com.demcha.compose.testing.visual.PdfVisualRegression; +import org.junit.jupiter.api.Test; + +import java.nio.file.Path; + +/** + * Pixel-diff visual parity gate for {@link TerracottaRail} — the canonical + * one-page CV against a checked-in baseline. + * + *

Re-blessing baselines — after a deliberate visual + * change, re-run with {@code -Dgraphcompose.visual.approve=true} and commit + * the updated PNG with the change. Baselines live under + * {@code src/test/resources/visual-baselines/cv-v2-layered/}.

+ */ +class TerracottaRailVisualParityTest { + + private static final Path BASELINE_ROOT = Path.of( + "src", "test", "resources", "visual-baselines", "cv-v2-layered"); + + private static final long PIXEL_DIFF_BUDGET = 50_000L; + private static final int PER_PIXEL_TOLERANCE = 8; + + @Test + void rendersWithinPixelDiffBudget() throws Exception { + byte[] pdfBytes; + try (DocumentSession document = GraphCompose.document() + .pageSize(DocumentPageSize.A4) + .margin(0f, 0f, 0f, 0f) + .create()) { + TerracottaRail.create().compose(document, TerracottaRailFixtures.canonicalCv()); + pdfBytes = document.toPdfBytes(); + } + + PdfVisualRegression.standard() + .baselineRoot(BASELINE_ROOT) + .perPixelTolerance(PER_PIXEL_TOLERANCE) + .mismatchedPixelBudget(PIXEL_DIFF_BUDGET) + .assertMatchesBaseline("terracotta_rail", pdfBytes); + } +} diff --git a/qa/src/test/resources/layout-snapshots/canonical-templates/cv-v2/terracotta_rail_layout.json b/qa/src/test/resources/layout-snapshots/canonical-templates/cv-v2/terracotta_rail_layout.json new file mode 100644 index 000000000..4e6f57818 --- /dev/null +++ b/qa/src/test/resources/layout-snapshots/canonical-templates/cv-v2/terracotta_rail_layout.json @@ -0,0 +1,4637 @@ +{ + "formatVersion" : "2.0", + "canvas" : { + "pageWidth" : 595.276, + "pageHeight" : 841.89, + "innerWidth" : 595.276, + "innerHeight" : 841.89, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, + "totalPages" : 1, + "nodes" : [ { + "path" : "TerracottaRailCv[0]", + "entityName" : "TerracottaRailCv", + "entityKind" : "ContainerNode", + "parentPath" : null, + "childIndex" : 0, + "depth" : 1, + "layer" : 1, + "computedX" : 0.0, + "computedY" : 47.306, + "placementX" : 0.0, + "placementY" : 47.306, + "placementWidth" : 595.276, + "placementHeight" : 794.584, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 595.276, + "contentHeight" : 794.584, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]", + "entityName" : "Body", + "entityKind" : "RowNode", + "parentPath" : "TerracottaRailCv[0]", + "childIndex" : 0, + "depth" : 2, + "layer" : 2, + "computedX" : 0.0, + "computedY" : 47.306, + "placementX" : 0.0, + "placementY" : 47.306, + "placementWidth" : 595.276, + "placementHeight" : 794.584, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 595.276, + "contentHeight" : 794.584, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]", + "entityName" : "Sidebar", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]", + "childIndex" : 0, + "depth" : 3, + "layer" : 3, + "computedX" : 0.0, + "computedY" : 100.839, + "placementX" : 0.0, + "placementY" : 100.839, + "placementWidth" : 183.345, + "placementHeight" : 741.051, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 183.345, + "contentHeight" : 741.051, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 20.0, + "right" : 11.4, + "bottom" : 5.0, + "left" : 25.4 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Monogram[0]", + "entityName" : "Monogram", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]", + "childIndex" : 0, + "depth" : 4, + "layer" : 4, + "computedX" : 25.4, + "computedY" : 774.19, + "placementX" : 25.4, + "placementY" : 774.19, + "placementWidth" : 48.78, + "placementHeight" : 47.7, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 48.78, + "contentHeight" : 47.7, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 8.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/MonogramRule[1]", + "entityName" : "MonogramRule", + "entityKind" : "LineNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]", + "childIndex" : 1, + "depth" : 4, + "layer" : 4, + "computedX" : 25.4, + "computedY" : 764.79, + "placementX" : 25.4, + "placementY" : 764.79, + "placementWidth" : 48.0, + "placementHeight" : 1.4, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 48.0, + "contentHeight" : 1.4, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 10.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Contact[2]", + "entityName" : "Contact", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]", + "childIndex" : 2, + "depth" : 4, + "layer" : 4, + "computedX" : 25.4, + "computedY" : 684.99, + "placementX" : 25.4, + "placementY" : 684.99, + "placementWidth" : 138.313, + "placementHeight" : 69.8, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 138.313, + "contentHeight" : 69.8, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Contact[2]/Contact_0[0]", + "entityName" : "Contact_0", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Contact[2]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 741.84, + "placementX" : 25.4, + "placementY" : 741.84, + "placementWidth" : 113.88, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 113.88, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 4.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Contact[2]/Contact_1[1]", + "entityName" : "Contact_1", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Contact[2]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 724.39, + "placementX" : 25.4, + "placementY" : 724.39, + "placementWidth" : 85.646, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 85.646, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 4.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Contact[2]/Contact_2[2]", + "entityName" : "Contact_2", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Contact[2]", + "childIndex" : 2, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 706.94, + "placementX" : 25.4, + "placementY" : 706.94, + "placementWidth" : 106.253, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 106.253, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 4.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Contact[2]/Contact_3[3]", + "entityName" : "Contact_3", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Contact[2]", + "childIndex" : 3, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 689.49, + "placementX" : 25.4, + "placementY" : 689.49, + "placementWidth" : 138.313, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 138.313, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 4.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Divider_AfterContact[3]", + "entityName" : "Divider_AfterContact", + "entityKind" : "LineNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]", + "childIndex" : 3, + "depth" : 4, + "layer" : 4, + "computedX" : 25.4, + "computedY" : 675.99, + "placementX" : 25.4, + "placementY" : 675.99, + "placementWidth" : 146.545, + "placementHeight" : 1.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 146.545, + "contentHeight" : 1.0, + "margin" : { + "top" : 8.0, + "right" : 0.0, + "bottom" : 8.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]", + "entityName" : "CoreCompetencies", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]", + "childIndex" : 4, + "depth" : 4, + "layer" : 4, + "computedX" : 25.4, + "computedY" : 457.063, + "placementX" : 25.4, + "placementY" : 457.063, + "placementWidth" : 106.829, + "placementHeight" : 210.926, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 106.829, + "contentHeight" : 210.926, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]/Heading_CORECOMPETENCIES[0]", + "entityName" : "Heading_CORECOMPETENCIES", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 657.463, + "placementX" : 25.4, + "placementY" : 657.463, + "placementWidth" : 101.553, + "placementHeight" : 10.526, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 101.553, + "contentHeight" : 10.526, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 9.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]/Competency_0[1]", + "entityName" : "Competency_0", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 635.513, + "placementX" : 25.4, + "placementY" : 635.513, + "placementWidth" : 87.369, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 87.369, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]/Competency_1[2]", + "entityName" : "Competency_1", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]", + "childIndex" : 2, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 619.563, + "placementX" : 25.4, + "placementY" : 619.563, + "placementWidth" : 95.358, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 95.358, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]/Competency_2[3]", + "entityName" : "Competency_2", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]", + "childIndex" : 3, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 603.613, + "placementX" : 25.4, + "placementY" : 603.613, + "placementWidth" : 91.068, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 91.068, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]/Competency_3[4]", + "entityName" : "Competency_3", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]", + "childIndex" : 4, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 587.663, + "placementX" : 25.4, + "placementY" : 587.663, + "placementWidth" : 83.888, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 83.888, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]/Competency_4[5]", + "entityName" : "Competency_4", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]", + "childIndex" : 5, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 571.713, + "placementX" : 25.4, + "placementY" : 571.713, + "placementWidth" : 30.716, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 30.716, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]/Competency_5[6]", + "entityName" : "Competency_5", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]", + "childIndex" : 6, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 555.763, + "placementX" : 25.4, + "placementY" : 555.763, + "placementWidth" : 47.546, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 47.546, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]/Competency_6[7]", + "entityName" : "Competency_6", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]", + "childIndex" : 7, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 539.813, + "placementX" : 25.4, + "placementY" : 539.813, + "placementWidth" : 77.803, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 77.803, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]/Competency_7[8]", + "entityName" : "Competency_7", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]", + "childIndex" : 8, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 523.863, + "placementX" : 25.4, + "placementY" : 523.863, + "placementWidth" : 90.141, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 90.141, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]/Competency_8[9]", + "entityName" : "Competency_8", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]", + "childIndex" : 9, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 507.913, + "placementX" : 25.4, + "placementY" : 507.913, + "placementWidth" : 71.271, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 71.271, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]/Competency_9[10]", + "entityName" : "Competency_9", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]", + "childIndex" : 10, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 491.963, + "placementX" : 25.4, + "placementY" : 491.963, + "placementWidth" : 106.829, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 106.829, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]/Competency_10[11]", + "entityName" : "Competency_10", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]", + "childIndex" : 11, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 476.013, + "placementX" : 25.4, + "placementY" : 476.013, + "placementWidth" : 81.579, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 81.579, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]/Competency_11[12]", + "entityName" : "Competency_11", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/CoreCompetencies[4]", + "childIndex" : 12, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 460.063, + "placementX" : 25.4, + "placementY" : 460.063, + "placementWidth" : 86.913, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 86.913, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Divider_AfterCompetencies[5]", + "entityName" : "Divider_AfterCompetencies", + "entityKind" : "LineNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]", + "childIndex" : 5, + "depth" : 4, + "layer" : 4, + "computedX" : 25.4, + "computedY" : 448.063, + "placementX" : 25.4, + "placementY" : 448.063, + "placementWidth" : 146.545, + "placementHeight" : 1.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 146.545, + "contentHeight" : 1.0, + "margin" : { + "top" : 8.0, + "right" : 0.0, + "bottom" : 8.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Software[6]", + "entityName" : "Software", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]", + "childIndex" : 6, + "depth" : 4, + "layer" : 4, + "computedX" : 25.4, + "computedY" : 307.487, + "placementX" : 25.4, + "placementY" : 307.487, + "placementWidth" : 72.249, + "placementHeight" : 132.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 72.249, + "contentHeight" : 132.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Software[6]/Heading_SOFTWARE[0]", + "entityName" : "Heading_SOFTWARE", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Software[6]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 429.537, + "placementX" : 25.4, + "placementY" : 429.537, + "placementWidth" : 52.0, + "placementHeight" : 10.526, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 52.0, + "contentHeight" : 10.526, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Software[6]/AccentLine_SOFTWARE[1]", + "entityName" : "AccentLine_SOFTWARE", + "entityKind" : "LineNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Software[6]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 424.637, + "placementX" : 25.4, + "placementY" : 424.637, + "placementWidth" : 20.0, + "placementHeight" : 1.4, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 20.0, + "contentHeight" : 1.4, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 5.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Software[6]/Software_0[2]", + "entityName" : "Software_0", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Software[6]", + "childIndex" : 2, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 406.187, + "placementX" : 25.4, + "placementY" : 406.187, + "placementWidth" : 29.916, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 29.916, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Software[6]/Software_1[3]", + "entityName" : "Software_1", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Software[6]", + "childIndex" : 3, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 390.237, + "placementX" : 25.4, + "placementY" : 390.237, + "placementWidth" : 46.746, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 46.746, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Software[6]/Software_2[4]", + "entityName" : "Software_2", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Software[6]", + "childIndex" : 4, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 374.287, + "placementX" : 25.4, + "placementY" : 374.287, + "placementWidth" : 32.275, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 32.275, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Software[6]/Software_3[5]", + "entityName" : "Software_3", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Software[6]", + "childIndex" : 5, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 358.337, + "placementX" : 25.4, + "placementY" : 358.337, + "placementWidth" : 46.78, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 46.78, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Software[6]/Software_4[6]", + "entityName" : "Software_4", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Software[6]", + "childIndex" : 6, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 342.387, + "placementX" : 25.4, + "placementY" : 342.387, + "placementWidth" : 69.999, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 69.999, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Software[6]/Software_5[7]", + "entityName" : "Software_5", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Software[6]", + "childIndex" : 7, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 326.437, + "placementX" : 25.4, + "placementY" : 326.437, + "placementWidth" : 50.994, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 50.994, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Software[6]/Software_6[8]", + "entityName" : "Software_6", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Software[6]", + "childIndex" : 8, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 310.487, + "placementX" : 25.4, + "placementY" : 310.487, + "placementWidth" : 72.249, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 72.249, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Divider_AfterSoftware[7]", + "entityName" : "Divider_AfterSoftware", + "entityKind" : "LineNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]", + "childIndex" : 7, + "depth" : 4, + "layer" : 4, + "computedX" : 25.4, + "computedY" : 298.487, + "placementX" : 25.4, + "placementY" : 298.487, + "placementWidth" : 146.545, + "placementHeight" : 1.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 146.545, + "contentHeight" : 1.0, + "margin" : { + "top" : 8.0, + "right" : 0.0, + "bottom" : 8.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Certifications[8]", + "entityName" : "Certifications", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]", + "childIndex" : 8, + "depth" : 4, + "layer" : 4, + "computedX" : 25.4, + "computedY" : 237.661, + "placementX" : 25.4, + "placementY" : 237.661, + "placementWidth" : 105.102, + "placementHeight" : 52.826, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 105.102, + "contentHeight" : 52.826, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Certifications[8]/Heading_CERTIFICATIONS[0]", + "entityName" : "Heading_CERTIFICATIONS", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Certifications[8]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 279.961, + "placementX" : 25.4, + "placementY" : 279.961, + "placementWidth" : 77.553, + "placementHeight" : 10.526, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 77.553, + "contentHeight" : 10.526, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Certifications[8]/AccentLine_CERTIFICATIONS[1]", + "entityName" : "AccentLine_CERTIFICATIONS", + "entityKind" : "LineNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Certifications[8]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 275.061, + "placementX" : 25.4, + "placementY" : 275.061, + "placementWidth" : 20.0, + "placementHeight" : 1.4, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 20.0, + "contentHeight" : 1.4, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 5.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Certifications[8]/Certification_0[2]", + "entityName" : "Certification_0", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Certifications[8]", + "childIndex" : 2, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 256.611, + "placementX" : 25.4, + "placementY" : 256.611, + "placementWidth" : 105.102, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 105.102, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Certifications[8]/Certification_1[3]", + "entityName" : "Certification_1", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Certifications[8]", + "childIndex" : 3, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 240.661, + "placementX" : 25.4, + "placementY" : 240.661, + "placementWidth" : 102.658, + "placementHeight" : 12.95, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 102.658, + "contentHeight" : 12.95, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/Divider_AfterCertifications[9]", + "entityName" : "Divider_AfterCertifications", + "entityKind" : "LineNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]", + "childIndex" : 9, + "depth" : 4, + "layer" : 4, + "computedX" : 25.4, + "computedY" : 228.661, + "placementX" : 25.4, + "placementY" : 228.661, + "placementWidth" : 146.545, + "placementHeight" : 1.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 146.545, + "contentHeight" : 1.0, + "margin" : { + "top" : 8.0, + "right" : 0.0, + "bottom" : 8.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]", + "entityName" : "AdditionalInformation", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]", + "childIndex" : 10, + "depth" : 4, + "layer" : 4, + "computedX" : 25.4, + "computedY" : 105.839, + "placementX" : 25.4, + "placementY" : 105.839, + "placementWidth" : 146.545, + "placementHeight" : 114.822, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 146.545, + "contentHeight" : 114.822, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/Heading_ADDITIONALINFORMATION[0]", + "entityName" : "Heading_ADDITIONALINFORMATION", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 210.134, + "placementX" : 25.4, + "placementY" : 210.134, + "placementWidth" : 131.334, + "placementHeight" : 10.526, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 131.334, + "contentHeight" : 10.526, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 9.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_0Stack[1]", + "entityName" : "AddInfo_0Stack", + "entityKind" : "LayerStackNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 169.293, + "placementX" : 25.4, + "placementY" : 169.293, + "placementWidth" : 146.545, + "placementHeight" : 31.841, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 146.545, + "contentHeight" : 31.841, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 7.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_0Stack[1]/AddInfo_0Layer[0]", + "entityName" : "AddInfo_0Layer", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_0Stack[1]", + "childIndex" : 0, + "depth" : 6, + "layer" : 6, + "computedX" : 25.4, + "computedY" : 169.293, + "placementX" : 25.4, + "placementY" : 169.293, + "placementWidth" : 146.545, + "placementHeight" : 31.841, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 146.545, + "contentHeight" : 31.841, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_0Stack[1]/AddInfo_0Layer[0]/AddInfo_0[0]", + "entityName" : "AddInfo_0", + "entityKind" : "RowNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_0Stack[1]/AddInfo_0Layer[0]", + "childIndex" : 0, + "depth" : 7, + "layer" : 7, + "computedX" : 25.4, + "computedY" : 169.293, + "placementX" : 25.4, + "placementY" : 169.293, + "placementWidth" : 146.545, + "placementHeight" : 31.841, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 146.545, + "contentHeight" : 31.841, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_0Stack[1]/AddInfo_0Layer[0]/AddInfo_0[0]/Icon_0[0]", + "entityName" : "Icon_0", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_0Stack[1]/AddInfo_0Layer[0]/AddInfo_0[0]", + "childIndex" : 0, + "depth" : 8, + "layer" : 8, + "computedX" : 25.4, + "computedY" : 185.134, + "placementX" : 25.4, + "placementY" : 185.134, + "placementWidth" : 16.0, + "placementHeight" : 16.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 16.0, + "contentHeight" : 16.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_0Stack[1]/AddInfo_0Layer[0]/AddInfo_0[0]/Text_0[1]", + "entityName" : "Text_0", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_0Stack[1]/AddInfo_0Layer[0]/AddInfo_0[0]", + "childIndex" : 1, + "depth" : 8, + "layer" : 8, + "computedX" : 51.778, + "computedY" : 169.293, + "placementX" : 51.778, + "placementY" : 169.293, + "placementWidth" : 90.753, + "placementHeight" : 31.841, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 90.753, + "contentHeight" : 31.841, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_0Stack[1]/AddInfo_0Layer[0]/AddInfo_0[0]/Text_0[1]/Label_0[0]", + "entityName" : "Label_0", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_0Stack[1]/AddInfo_0Layer[0]/AddInfo_0[0]/Text_0[1]", + "childIndex" : 0, + "depth" : 9, + "layer" : 9, + "computedX" : 51.778, + "computedY" : 191.021, + "placementX" : 51.778, + "placementY" : 191.021, + "placementWidth" : 41.735, + "placementHeight" : 10.114, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 41.735, + "contentHeight" : 10.114, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_0Stack[1]/AddInfo_0Layer[0]/AddInfo_0[0]/Text_0[1]/Val_0[1]", + "entityName" : "Val_0", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_0Stack[1]/AddInfo_0Layer[0]/AddInfo_0[0]/Text_0[1]", + "childIndex" : 1, + "depth" : 9, + "layer" : 9, + "computedX" : 51.778, + "computedY" : 180.407, + "placementX" : 51.778, + "placementY" : 180.407, + "placementWidth" : 59.367, + "placementHeight" : 10.114, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 59.367, + "contentHeight" : 10.114, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_0Stack[1]/AddInfo_0Layer[0]/AddInfo_0[0]/Text_0[1]/Val_0[2]", + "entityName" : "Val_0", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_0Stack[1]/AddInfo_0Layer[0]/AddInfo_0[0]/Text_0[1]", + "childIndex" : 2, + "depth" : 9, + "layer" : 9, + "computedX" : 51.778, + "computedY" : 169.793, + "placementX" : 51.778, + "placementY" : 169.793, + "placementWidth" : 90.753, + "placementHeight" : 10.114, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 90.753, + "contentHeight" : 10.114, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_1Stack[2]", + "entityName" : "AddInfo_1Stack", + "entityKind" : "LayerStackNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]", + "childIndex" : 2, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 141.066, + "placementX" : 25.4, + "placementY" : 141.066, + "placementWidth" : 146.545, + "placementHeight" : 21.227, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 146.545, + "contentHeight" : 21.227, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 7.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_1Stack[2]/AddInfo_1Layer[0]", + "entityName" : "AddInfo_1Layer", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_1Stack[2]", + "childIndex" : 0, + "depth" : 6, + "layer" : 6, + "computedX" : 25.4, + "computedY" : 141.066, + "placementX" : 25.4, + "placementY" : 141.066, + "placementWidth" : 146.545, + "placementHeight" : 21.227, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 146.545, + "contentHeight" : 21.227, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_1Stack[2]/AddInfo_1Layer[0]/AddInfo_1[0]", + "entityName" : "AddInfo_1", + "entityKind" : "RowNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_1Stack[2]/AddInfo_1Layer[0]", + "childIndex" : 0, + "depth" : 7, + "layer" : 7, + "computedX" : 25.4, + "computedY" : 141.066, + "placementX" : 25.4, + "placementY" : 141.066, + "placementWidth" : 146.545, + "placementHeight" : 21.227, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 146.545, + "contentHeight" : 21.227, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_1Stack[2]/AddInfo_1Layer[0]/AddInfo_1[0]/Icon_1[0]", + "entityName" : "Icon_1", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_1Stack[2]/AddInfo_1Layer[0]/AddInfo_1[0]", + "childIndex" : 0, + "depth" : 8, + "layer" : 8, + "computedX" : 25.4, + "computedY" : 146.293, + "placementX" : 25.4, + "placementY" : 146.293, + "placementWidth" : 16.0, + "placementHeight" : 16.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 16.0, + "contentHeight" : 16.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_1Stack[2]/AddInfo_1Layer[0]/AddInfo_1[0]/Text_1[1]", + "entityName" : "Text_1", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_1Stack[2]/AddInfo_1Layer[0]/AddInfo_1[0]", + "childIndex" : 1, + "depth" : 8, + "layer" : 8, + "computedX" : 51.778, + "computedY" : 141.066, + "placementX" : 51.778, + "placementY" : 141.066, + "placementWidth" : 60.412, + "placementHeight" : 21.227, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 60.412, + "contentHeight" : 21.227, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_1Stack[2]/AddInfo_1Layer[0]/AddInfo_1[0]/Text_1[1]/Label_1[0]", + "entityName" : "Label_1", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_1Stack[2]/AddInfo_1Layer[0]/AddInfo_1[0]/Text_1[1]", + "childIndex" : 0, + "depth" : 9, + "layer" : 9, + "computedX" : 51.778, + "computedY" : 152.18, + "placementX" : 51.778, + "placementY" : 152.18, + "placementWidth" : 55.507, + "placementHeight" : 10.114, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 55.507, + "contentHeight" : 10.114, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_1Stack[2]/AddInfo_1Layer[0]/AddInfo_1[0]/Text_1[1]/Val_1[1]", + "entityName" : "Val_1", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_1Stack[2]/AddInfo_1Layer[0]/AddInfo_1[0]/Text_1[1]", + "childIndex" : 1, + "depth" : 9, + "layer" : 9, + "computedX" : 51.778, + "computedY" : 141.566, + "placementX" : 51.778, + "placementY" : 141.566, + "placementWidth" : 60.412, + "placementHeight" : 10.114, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 60.412, + "contentHeight" : 10.114, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_2Stack[3]", + "entityName" : "AddInfo_2Stack", + "entityKind" : "LayerStackNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]", + "childIndex" : 3, + "depth" : 5, + "layer" : 5, + "computedX" : 25.4, + "computedY" : 112.839, + "placementX" : 25.4, + "placementY" : 112.839, + "placementWidth" : 146.545, + "placementHeight" : 21.227, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 146.545, + "contentHeight" : 21.227, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 7.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_2Stack[3]/AddInfo_2Layer[0]", + "entityName" : "AddInfo_2Layer", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_2Stack[3]", + "childIndex" : 0, + "depth" : 6, + "layer" : 6, + "computedX" : 25.4, + "computedY" : 112.839, + "placementX" : 25.4, + "placementY" : 112.839, + "placementWidth" : 146.545, + "placementHeight" : 21.227, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 146.545, + "contentHeight" : 21.227, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_2Stack[3]/AddInfo_2Layer[0]/AddInfo_2[0]", + "entityName" : "AddInfo_2", + "entityKind" : "RowNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_2Stack[3]/AddInfo_2Layer[0]", + "childIndex" : 0, + "depth" : 7, + "layer" : 7, + "computedX" : 25.4, + "computedY" : 112.839, + "placementX" : 25.4, + "placementY" : 112.839, + "placementWidth" : 146.545, + "placementHeight" : 21.227, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 146.545, + "contentHeight" : 21.227, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_2Stack[3]/AddInfo_2Layer[0]/AddInfo_2[0]/Icon_2[0]", + "entityName" : "Icon_2", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_2Stack[3]/AddInfo_2Layer[0]/AddInfo_2[0]", + "childIndex" : 0, + "depth" : 8, + "layer" : 8, + "computedX" : 25.4, + "computedY" : 118.066, + "placementX" : 25.4, + "placementY" : 118.066, + "placementWidth" : 16.0, + "placementHeight" : 16.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 16.0, + "contentHeight" : 16.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_2Stack[3]/AddInfo_2Layer[0]/AddInfo_2[0]/Text_2[1]", + "entityName" : "Text_2", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_2Stack[3]/AddInfo_2Layer[0]/AddInfo_2[0]", + "childIndex" : 1, + "depth" : 8, + "layer" : 8, + "computedX" : 51.778, + "computedY" : 112.839, + "placementX" : 51.778, + "placementY" : 112.839, + "placementWidth" : 56.358, + "placementHeight" : 21.227, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 56.358, + "contentHeight" : 21.227, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_2Stack[3]/AddInfo_2Layer[0]/AddInfo_2[0]/Text_2[1]/Label_2[0]", + "entityName" : "Label_2", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_2Stack[3]/AddInfo_2Layer[0]/AddInfo_2[0]/Text_2[1]", + "childIndex" : 0, + "depth" : 9, + "layer" : 9, + "computedX" : 51.778, + "computedY" : 123.953, + "placementX" : 51.778, + "placementY" : 123.953, + "placementWidth" : 44.036, + "placementHeight" : 10.114, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 44.036, + "contentHeight" : 10.114, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_2Stack[3]/AddInfo_2Layer[0]/AddInfo_2[0]/Text_2[1]/Val_2[1]", + "entityName" : "Val_2", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/Sidebar[0]/AdditionalInformation[10]/AddInfo_2Stack[3]/AddInfo_2Layer[0]/AddInfo_2[0]/Text_2[1]", + "childIndex" : 1, + "depth" : 9, + "layer" : 9, + "computedX" : 51.778, + "computedY" : 113.339, + "placementX" : 51.778, + "placementY" : 113.339, + "placementWidth" : 56.358, + "placementHeight" : 10.114, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 56.358, + "contentHeight" : 10.114, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]", + "entityName" : "MainColumn", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]", + "childIndex" : 1, + "depth" : 3, + "layer" : 3, + "computedX" : 183.345, + "computedY" : 47.306, + "placementX" : 183.345, + "placementY" : 47.306, + "placementWidth" : 411.931, + "placementHeight" : 794.584, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 411.931, + "contentHeight" : 794.584, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 20.0, + "right" : 24.0, + "bottom" : 5.0, + "left" : 22.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Masthead[0]", + "entityName" : "Masthead", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]", + "childIndex" : 0, + "depth" : 4, + "layer" : 4, + "computedX" : 205.345, + "computedY" : 759.69, + "placementX" : 205.345, + "placementY" : 759.69, + "placementWidth" : 321.748, + "placementHeight" : 62.2, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 321.748, + "contentHeight" : 62.2, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Masthead[0]/FullName[0]", + "entityName" : "FullName", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Masthead[0]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 205.345, + "computedY" : 788.29, + "placementX" : 205.345, + "placementY" : 788.29, + "placementWidth" : 321.748, + "placementHeight" : 33.6, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 321.748, + "contentHeight" : 33.6, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 8.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Masthead[0]/JobTitle[1]", + "entityName" : "JobTitle", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Masthead[0]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 205.345, + "computedY" : 764.69, + "placementX" : 205.345, + "placementY" : 764.69, + "placementWidth" : 169.468, + "placementHeight" : 15.6, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 169.468, + "contentHeight" : 15.6, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 5.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Divider_AfterMasthead[1]", + "entityName" : "Divider_AfterMasthead", + "entityKind" : "LineNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]", + "childIndex" : 1, + "depth" : 4, + "layer" : 4, + "computedX" : 205.345, + "computedY" : 754.69, + "placementX" : 205.345, + "placementY" : 754.69, + "placementWidth" : 365.931, + "placementHeight" : 1.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.931, + "contentHeight" : 1.0, + "margin" : { + "top" : 4.0, + "right" : 0.0, + "bottom" : 6.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Summary[2]", + "entityName" : "Summary", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]", + "childIndex" : 2, + "depth" : 4, + "layer" : 4, + "computedX" : 205.345, + "computedY" : 654.443, + "placementX" : 205.345, + "placementY" : 654.443, + "placementWidth" : 346.356, + "placementHeight" : 94.246, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 346.356, + "contentHeight" : 94.246, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Summary[2]/Heading_PROFESSIONALSUMMARY[0]", + "entityName" : "Heading_PROFESSIONALSUMMARY", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Summary[2]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 205.345, + "computedY" : 738.163, + "placementX" : 205.345, + "placementY" : 738.163, + "placementWidth" : 133.212, + "placementHeight" : 10.526, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 133.212, + "contentHeight" : 10.526, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Summary[2]/AccentLine_PROFESSIONALSUMMARY[1]", + "entityName" : "AccentLine_PROFESSIONALSUMMARY", + "entityKind" : "LineNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Summary[2]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 205.345, + "computedY" : 733.263, + "placementX" : 205.345, + "placementY" : 733.263, + "placementWidth" : 22.0, + "placementHeight" : 1.4, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 22.0, + "contentHeight" : 1.4, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 5.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Summary[2]/SummaryPara_0[2]", + "entityName" : "SummaryPara_0", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Summary[2]", + "childIndex" : 2, + "depth" : 5, + "layer" : 5, + "computedX" : 205.345, + "computedY" : 705.823, + "placementX" : 205.345, + "placementY" : 705.823, + "placementWidth" : 323.91, + "placementHeight" : 21.94, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 323.91, + "contentHeight" : 21.94, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 2.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Summary[2]/SummaryPara_1[3]", + "entityName" : "SummaryPara_1", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Summary[2]", + "childIndex" : 3, + "depth" : 5, + "layer" : 5, + "computedX" : 205.345, + "computedY" : 681.383, + "placementX" : 205.345, + "placementY" : 681.383, + "placementWidth" : 346.356, + "placementHeight" : 21.94, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 346.356, + "contentHeight" : 21.94, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 2.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Summary[2]/SummaryPara_2[4]", + "entityName" : "SummaryPara_2", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Summary[2]", + "childIndex" : 4, + "depth" : 5, + "layer" : 5, + "computedX" : 205.345, + "computedY" : 656.943, + "placementX" : 205.345, + "placementY" : 656.943, + "placementWidth" : 342.787, + "placementHeight" : 21.94, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 342.787, + "contentHeight" : 21.94, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 2.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Divider_AfterSummary[3]", + "entityName" : "Divider_AfterSummary", + "entityKind" : "LineNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]", + "childIndex" : 3, + "depth" : 4, + "layer" : 4, + "computedX" : 205.345, + "computedY" : 647.443, + "placementX" : 205.345, + "placementY" : 647.443, + "placementWidth" : 365.931, + "placementHeight" : 1.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.931, + "contentHeight" : 1.0, + "margin" : { + "top" : 6.0, + "right" : 0.0, + "bottom" : 6.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]", + "entityName" : "Experience", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]", + "childIndex" : 4, + "depth" : 4, + "layer" : 4, + "computedX" : 205.345, + "computedY" : 303.313, + "placementX" : 205.345, + "placementY" : 303.313, + "placementWidth" : 365.921, + "placementHeight" : 337.631, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.921, + "contentHeight" : 337.631, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/Heading_PROFESSIONALEXPERIENCE[0]", + "entityName" : "Heading_PROFESSIONALEXPERIENCE", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 205.345, + "computedY" : 630.417, + "placementX" : 205.345, + "placementY" : 630.417, + "placementWidth" : 143.475, + "placementHeight" : 10.526, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 143.475, + "contentHeight" : 10.526, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 9.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_0[1]", + "entityName" : "ExperienceEntry_0", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 205.345, + "computedY" : 497.072, + "placementX" : 205.345, + "placementY" : 497.072, + "placementWidth" : 365.921, + "placementHeight" : 124.345, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.921, + "contentHeight" : 124.345, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 9.0, + "left" : 13.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_0[1]/RoleLine_0[0]", + "entityName" : "RoleLine_0", + "entityKind" : "LayerStackNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_0[1]", + "childIndex" : 0, + "depth" : 6, + "layer" : 6, + "computedX" : 218.345, + "computedY" : 609.652, + "placementX" : 218.345, + "placementY" : 609.652, + "placementWidth" : 352.921, + "placementHeight" : 11.765, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 352.921, + "contentHeight" : 11.765, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_0[1]/RoleLine_0[0]/RoleTable_0[0]", + "entityName" : "RoleTable_0", + "entityKind" : "TableNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_0[1]/RoleLine_0[0]", + "childIndex" : 0, + "depth" : 7, + "layer" : 7, + "computedX" : 218.345, + "computedY" : 609.652, + "placementX" : 218.345, + "placementY" : 609.652, + "placementWidth" : 352.921, + "placementHeight" : 11.765, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 352.921, + "contentHeight" : 11.765, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_0[1]/RoleLine_0[0]/RoleMarker_0[1]", + "entityName" : "RoleMarker_0", + "entityKind" : "EllipseNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_0[1]/RoleLine_0[0]", + "childIndex" : 1, + "depth" : 7, + "layer" : 7, + "computedX" : 202.245, + "computedY" : 615.217, + "placementX" : 202.245, + "placementY" : 615.217, + "placementWidth" : 6.2, + "placementHeight" : 6.2, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 6.2, + "contentHeight" : 6.2, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_0[1]/Employer_0[1]", + "entityName" : "Employer_0", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_0[1]", + "childIndex" : 1, + "depth" : 6, + "layer" : 6, + "computedX" : 218.345, + "computedY" : 599.332, + "placementX" : 218.345, + "placementY" : 599.332, + "placementWidth" : 100.783, + "placementHeight" : 10.32, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 100.783, + "contentHeight" : 10.32, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 2.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_0[1]/Highlights_0[2]", + "entityName" : "Highlights_0", + "entityKind" : "ListNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_0[1]", + "childIndex" : 2, + "depth" : 6, + "layer" : 6, + "computedX" : 218.345, + "computedY" : 506.072, + "placementX" : 218.345, + "placementY" : 506.072, + "placementWidth" : 348.171, + "placementHeight" : 90.76, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 348.171, + "contentHeight" : 90.76, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_1[2]", + "entityName" : "ExperienceEntry_1", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]", + "childIndex" : 2, + "depth" : 5, + "layer" : 5, + "computedX" : 205.345, + "computedY" : 384.197, + "placementX" : 205.345, + "placementY" : 384.197, + "placementWidth" : 365.921, + "placementHeight" : 112.875, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.921, + "contentHeight" : 112.875, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 9.0, + "left" : 13.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_1[2]/RoleLine_1[0]", + "entityName" : "RoleLine_1", + "entityKind" : "LayerStackNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_1[2]", + "childIndex" : 0, + "depth" : 6, + "layer" : 6, + "computedX" : 218.345, + "computedY" : 485.307, + "placementX" : 218.345, + "placementY" : 485.307, + "placementWidth" : 352.921, + "placementHeight" : 11.765, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 352.921, + "contentHeight" : 11.765, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_1[2]/RoleLine_1[0]/RoleTable_1[0]", + "entityName" : "RoleTable_1", + "entityKind" : "TableNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_1[2]/RoleLine_1[0]", + "childIndex" : 0, + "depth" : 7, + "layer" : 7, + "computedX" : 218.345, + "computedY" : 485.307, + "placementX" : 218.345, + "placementY" : 485.307, + "placementWidth" : 352.921, + "placementHeight" : 11.765, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 352.921, + "contentHeight" : 11.765, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_1[2]/RoleLine_1[0]/RoleMarker_1[1]", + "entityName" : "RoleMarker_1", + "entityKind" : "EllipseNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_1[2]/RoleLine_1[0]", + "childIndex" : 1, + "depth" : 7, + "layer" : 7, + "computedX" : 202.245, + "computedY" : 490.872, + "placementX" : 202.245, + "placementY" : 490.872, + "placementWidth" : 6.2, + "placementHeight" : 6.2, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 6.2, + "contentHeight" : 6.2, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_1[2]/Employer_1[1]", + "entityName" : "Employer_1", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_1[2]", + "childIndex" : 1, + "depth" : 6, + "layer" : 6, + "computedX" : 218.345, + "computedY" : 474.987, + "placementX" : 218.345, + "placementY" : 474.987, + "placementWidth" : 111.654, + "placementHeight" : 10.32, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 111.654, + "contentHeight" : 10.32, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 2.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_1[2]/Highlights_1[2]", + "entityName" : "Highlights_1", + "entityKind" : "ListNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_1[2]", + "childIndex" : 2, + "depth" : 6, + "layer" : 6, + "computedX" : 218.345, + "computedY" : 393.197, + "placementX" : 218.345, + "placementY" : 393.197, + "placementWidth" : 349.599, + "placementHeight" : 79.29, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 349.599, + "contentHeight" : 79.29, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_2[3]", + "entityName" : "ExperienceEntry_2", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]", + "childIndex" : 3, + "depth" : 5, + "layer" : 5, + "computedX" : 205.345, + "computedY" : 303.313, + "placementX" : 205.345, + "placementY" : 303.313, + "placementWidth" : 365.921, + "placementHeight" : 80.885, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.921, + "contentHeight" : 80.885, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 13.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_2[3]/RoleLine_2[0]", + "entityName" : "RoleLine_2", + "entityKind" : "LayerStackNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_2[3]", + "childIndex" : 0, + "depth" : 6, + "layer" : 6, + "computedX" : 218.345, + "computedY" : 372.433, + "placementX" : 218.345, + "placementY" : 372.433, + "placementWidth" : 352.921, + "placementHeight" : 11.765, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 352.921, + "contentHeight" : 11.765, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_2[3]/RoleLine_2[0]/RoleTable_2[0]", + "entityName" : "RoleTable_2", + "entityKind" : "TableNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_2[3]/RoleLine_2[0]", + "childIndex" : 0, + "depth" : 7, + "layer" : 7, + "computedX" : 218.345, + "computedY" : 372.433, + "placementX" : 218.345, + "placementY" : 372.433, + "placementWidth" : 352.921, + "placementHeight" : 11.765, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 352.921, + "contentHeight" : 11.765, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_2[3]/RoleLine_2[0]/RoleMarker_2[1]", + "entityName" : "RoleMarker_2", + "entityKind" : "EllipseNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_2[3]/RoleLine_2[0]", + "childIndex" : 1, + "depth" : 7, + "layer" : 7, + "computedX" : 202.245, + "computedY" : 377.997, + "placementX" : 202.245, + "placementY" : 377.997, + "placementWidth" : 6.2, + "placementHeight" : 6.2, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 6.2, + "contentHeight" : 6.2, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_2[3]/Employer_2[1]", + "entityName" : "Employer_2", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_2[3]", + "childIndex" : 1, + "depth" : 6, + "layer" : 6, + "computedX" : 218.345, + "computedY" : 362.113, + "placementX" : 218.345, + "placementY" : 362.113, + "placementWidth" : 123.771, + "placementHeight" : 10.32, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 123.771, + "contentHeight" : 10.32, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 2.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_2[3]/Highlights_2[2]", + "entityName" : "Highlights_2", + "entityKind" : "ListNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Experience[4]/ExperienceEntry_2[3]", + "childIndex" : 2, + "depth" : 6, + "layer" : 6, + "computedX" : 218.345, + "computedY" : 303.313, + "placementX" : 218.345, + "placementY" : 303.313, + "placementWidth" : 329.019, + "placementHeight" : 56.3, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 329.019, + "contentHeight" : 56.3, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Divider_AfterExperience[5]", + "entityName" : "Divider_AfterExperience", + "entityKind" : "LineNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]", + "childIndex" : 5, + "depth" : 4, + "layer" : 4, + "computedX" : 205.345, + "computedY" : 296.313, + "placementX" : 205.345, + "placementY" : 296.313, + "placementWidth" : 365.931, + "placementHeight" : 1.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.931, + "contentHeight" : 1.0, + "margin" : { + "top" : 6.0, + "right" : 0.0, + "bottom" : 6.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]", + "entityName" : "SelectedProjects", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]", + "childIndex" : 6, + "depth" : 4, + "layer" : 4, + "computedX" : 205.345, + "computedY" : 139.902, + "placementX" : 205.345, + "placementY" : 139.902, + "placementWidth" : 365.931, + "placementHeight" : 149.91, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.931, + "contentHeight" : 149.91, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Heading_SELECTEDPROJECTS[0]", + "entityName" : "Heading_SELECTEDPROJECTS", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 205.345, + "computedY" : 279.286, + "placementX" : 205.345, + "placementY" : 279.286, + "placementWidth" : 104.79, + "placementHeight" : 10.526, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 104.79, + "contentHeight" : 10.526, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/AccentLine_SELECTEDPROJECTS[1]", + "entityName" : "AccentLine_SELECTEDPROJECTS", + "entityKind" : "LineNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 205.345, + "computedY" : 274.386, + "placementX" : 205.345, + "placementY" : 274.386, + "placementWidth" : 22.0, + "placementHeight" : 1.4, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 22.0, + "contentHeight" : 1.4, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 5.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_0Stack[2]", + "entityName" : "Project_0Stack", + "entityKind" : "LayerStackNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]", + "childIndex" : 2, + "depth" : 5, + "layer" : 5, + "computedX" : 205.345, + "computedY" : 234.894, + "placementX" : 205.345, + "placementY" : 234.894, + "placementWidth" : 365.931, + "placementHeight" : 33.992, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.931, + "contentHeight" : 33.992, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 2.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_0Stack[2]/Project_0Layer[0]", + "entityName" : "Project_0Layer", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_0Stack[2]", + "childIndex" : 0, + "depth" : 6, + "layer" : 6, + "computedX" : 205.345, + "computedY" : 234.894, + "placementX" : 205.345, + "placementY" : 234.894, + "placementWidth" : 365.931, + "placementHeight" : 33.992, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.931, + "contentHeight" : 33.992, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_0Stack[2]/Project_0Layer[0]/Project_0[0]", + "entityName" : "Project_0", + "entityKind" : "RowNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_0Stack[2]/Project_0Layer[0]", + "childIndex" : 0, + "depth" : 7, + "layer" : 7, + "computedX" : 205.345, + "computedY" : 234.894, + "placementX" : 205.345, + "placementY" : 234.894, + "placementWidth" : 365.931, + "placementHeight" : 33.992, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.931, + "contentHeight" : 33.992, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_0Stack[2]/Project_0Layer[0]/Project_0[0]/ProjIcon_0[0]", + "entityName" : "ProjIcon_0", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_0Stack[2]/Project_0Layer[0]/Project_0[0]", + "childIndex" : 0, + "depth" : 8, + "layer" : 8, + "computedX" : 205.345, + "computedY" : 246.886, + "placementX" : 205.345, + "placementY" : 246.886, + "placementWidth" : 22.0, + "placementHeight" : 22.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 22.0, + "contentHeight" : 22.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_0Stack[2]/Project_0Layer[0]/Project_0[0]/ProjMeta_0[1]", + "entityName" : "ProjMeta_0", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_0Stack[2]/Project_0Layer[0]/Project_0[0]", + "childIndex" : 1, + "depth" : 8, + "layer" : 8, + "computedX" : 234.619, + "computedY" : 234.894, + "placementX" : 234.619, + "placementY" : 234.894, + "placementWidth" : 98.269, + "placementHeight" : 33.992, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 98.269, + "contentHeight" : 33.992, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 8.0, + "bottom" : 0.0, + "left" : 4.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_0Stack[2]/Project_0Layer[0]/Project_0[0]/ProjMeta_0[1]/ProjTitle_0[0]", + "entityName" : "ProjTitle_0", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_0Stack[2]/Project_0Layer[0]/Project_0[0]/ProjMeta_0[1]", + "childIndex" : 0, + "depth" : 9, + "layer" : 9, + "computedX" : 238.619, + "computedY" : 257.121, + "placementX" : 238.619, + "placementY" : 257.121, + "placementWidth" : 62.344, + "placementHeight" : 11.765, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 62.344, + "contentHeight" : 11.765, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 1.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_0Stack[2]/Project_0Layer[0]/Project_0[0]/ProjMeta_0[1]/ProjSub_0[1]", + "entityName" : "ProjSub_0", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_0Stack[2]/Project_0Layer[0]/Project_0[0]/ProjMeta_0[1]", + "childIndex" : 1, + "depth" : 9, + "layer" : 9, + "computedX" : 238.619, + "computedY" : 246.008, + "placementX" : 238.619, + "placementY" : 246.008, + "placementWidth" : 86.269, + "placementHeight" : 10.114, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 86.269, + "contentHeight" : 10.114, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 1.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_0Stack[2]/Project_0Layer[0]/Project_0[0]/ProjMeta_0[1]/ProjLoc_0[2]", + "entityName" : "ProjLoc_0", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_0Stack[2]/Project_0Layer[0]/Project_0[0]/ProjMeta_0[1]", + "childIndex" : 2, + "depth" : 9, + "layer" : 9, + "computedX" : 238.619, + "computedY" : 234.894, + "placementX" : 238.619, + "placementY" : 234.894, + "placementWidth" : 23.986, + "placementHeight" : 10.114, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 23.986, + "contentHeight" : 10.114, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_0Stack[2]/Project_0Layer[0]/Project_0[0]/ProjDesc_0[2]", + "entityName" : "ProjDesc_0", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_0Stack[2]/Project_0Layer[0]/Project_0[0]", + "childIndex" : 2, + "depth" : 8, + "layer" : 8, + "computedX" : 366.354, + "computedY" : 235.446, + "placementX" : 366.354, + "placementY" : 235.446, + "placementWidth" : 187.16, + "placementHeight" : 33.44, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 187.16, + "contentHeight" : 33.44, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 10.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_0Stack[2]/Project_0Layer[0]/Project_0[0]/ProjDesc_0[2]/ProjDescText_0[0]", + "entityName" : "ProjDescText_0", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_0Stack[2]/Project_0Layer[0]/Project_0[0]/ProjDesc_0[2]", + "childIndex" : 0, + "depth" : 9, + "layer" : 9, + "computedX" : 376.354, + "computedY" : 235.446, + "placementX" : 376.354, + "placementY" : 235.446, + "placementWidth" : 177.16, + "placementHeight" : 33.44, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 177.16, + "contentHeight" : 33.44, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/ProjDiv_0[3]", + "entityName" : "ProjDiv_0", + "entityKind" : "LineNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]", + "childIndex" : 3, + "depth" : 5, + "layer" : 5, + "computedX" : 205.345, + "computedY" : 229.894, + "placementX" : 205.345, + "placementY" : 229.894, + "placementWidth" : 365.931, + "placementHeight" : 1.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.931, + "contentHeight" : 1.0, + "margin" : { + "top" : 2.0, + "right" : 0.0, + "bottom" : 2.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_1Stack[4]", + "entityName" : "Project_1Stack", + "entityKind" : "LayerStackNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]", + "childIndex" : 4, + "depth" : 5, + "layer" : 5, + "computedX" : 205.345, + "computedY" : 193.902, + "placementX" : 205.345, + "placementY" : 193.902, + "placementWidth" : 365.931, + "placementHeight" : 33.992, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.931, + "contentHeight" : 33.992, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 2.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_1Stack[4]/Project_1Layer[0]", + "entityName" : "Project_1Layer", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_1Stack[4]", + "childIndex" : 0, + "depth" : 6, + "layer" : 6, + "computedX" : 205.345, + "computedY" : 193.902, + "placementX" : 205.345, + "placementY" : 193.902, + "placementWidth" : 365.931, + "placementHeight" : 33.992, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.931, + "contentHeight" : 33.992, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_1Stack[4]/Project_1Layer[0]/Project_1[0]", + "entityName" : "Project_1", + "entityKind" : "RowNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_1Stack[4]/Project_1Layer[0]", + "childIndex" : 0, + "depth" : 7, + "layer" : 7, + "computedX" : 205.345, + "computedY" : 193.902, + "placementX" : 205.345, + "placementY" : 193.902, + "placementWidth" : 365.931, + "placementHeight" : 33.992, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.931, + "contentHeight" : 33.992, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_1Stack[4]/Project_1Layer[0]/Project_1[0]/ProjIcon_1[0]", + "entityName" : "ProjIcon_1", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_1Stack[4]/Project_1Layer[0]/Project_1[0]", + "childIndex" : 0, + "depth" : 8, + "layer" : 8, + "computedX" : 205.345, + "computedY" : 205.894, + "placementX" : 205.345, + "placementY" : 205.894, + "placementWidth" : 22.0, + "placementHeight" : 22.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 22.0, + "contentHeight" : 22.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_1Stack[4]/Project_1Layer[0]/Project_1[0]/ProjMeta_1[1]", + "entityName" : "ProjMeta_1", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_1Stack[4]/Project_1Layer[0]/Project_1[0]", + "childIndex" : 1, + "depth" : 8, + "layer" : 8, + "computedX" : 234.619, + "computedY" : 193.902, + "placementX" : 234.619, + "placementY" : 193.902, + "placementWidth" : 118.269, + "placementHeight" : 33.992, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 118.269, + "contentHeight" : 33.992, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 8.0, + "bottom" : 0.0, + "left" : 4.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_1Stack[4]/Project_1Layer[0]/Project_1[0]/ProjMeta_1[1]/ProjTitle_1[0]", + "entityName" : "ProjTitle_1", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_1Stack[4]/Project_1Layer[0]/Project_1[0]/ProjMeta_1[1]", + "childIndex" : 0, + "depth" : 9, + "layer" : 9, + "computedX" : 238.619, + "computedY" : 216.129, + "placementX" : 238.619, + "placementY" : 216.129, + "placementWidth" : 88.011, + "placementHeight" : 11.765, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 88.011, + "contentHeight" : 11.765, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 1.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_1Stack[4]/Project_1Layer[0]/Project_1[0]/ProjMeta_1[1]/ProjSub_1[1]", + "entityName" : "ProjSub_1", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_1Stack[4]/Project_1Layer[0]/Project_1[0]/ProjMeta_1[1]", + "childIndex" : 1, + "depth" : 9, + "layer" : 9, + "computedX" : 238.619, + "computedY" : 205.016, + "placementX" : 238.619, + "placementY" : 205.016, + "placementWidth" : 106.269, + "placementHeight" : 10.114, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 106.269, + "contentHeight" : 10.114, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 1.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_1Stack[4]/Project_1Layer[0]/Project_1[0]/ProjMeta_1[1]/ProjLoc_1[2]", + "entityName" : "ProjLoc_1", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_1Stack[4]/Project_1Layer[0]/Project_1[0]/ProjMeta_1[1]", + "childIndex" : 2, + "depth" : 9, + "layer" : 9, + "computedX" : 238.619, + "computedY" : 193.902, + "placementX" : 238.619, + "placementY" : 193.902, + "placementWidth" : 17.37, + "placementHeight" : 10.114, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 17.37, + "contentHeight" : 10.114, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_1Stack[4]/Project_1Layer[0]/Project_1[0]/ProjDesc_1[2]", + "entityName" : "ProjDesc_1", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_1Stack[4]/Project_1Layer[0]/Project_1[0]", + "childIndex" : 2, + "depth" : 8, + "layer" : 8, + "computedX" : 366.354, + "computedY" : 194.454, + "placementX" : 366.354, + "placementY" : 194.454, + "placementWidth" : 200.327, + "placementHeight" : 33.44, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 200.327, + "contentHeight" : 33.44, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 10.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_1Stack[4]/Project_1Layer[0]/Project_1[0]/ProjDesc_1[2]/ProjDescText_1[0]", + "entityName" : "ProjDescText_1", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_1Stack[4]/Project_1Layer[0]/Project_1[0]/ProjDesc_1[2]", + "childIndex" : 0, + "depth" : 9, + "layer" : 9, + "computedX" : 376.354, + "computedY" : 194.454, + "placementX" : 376.354, + "placementY" : 194.454, + "placementWidth" : 190.327, + "placementHeight" : 33.44, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 190.327, + "contentHeight" : 33.44, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/ProjDiv_1[5]", + "entityName" : "ProjDiv_1", + "entityKind" : "LineNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]", + "childIndex" : 5, + "depth" : 5, + "layer" : 5, + "computedX" : 205.345, + "computedY" : 188.902, + "placementX" : 205.345, + "placementY" : 188.902, + "placementWidth" : 365.931, + "placementHeight" : 1.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.931, + "contentHeight" : 1.0, + "margin" : { + "top" : 2.0, + "right" : 0.0, + "bottom" : 2.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_2Stack[6]", + "entityName" : "Project_2Stack", + "entityKind" : "LayerStackNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]", + "childIndex" : 6, + "depth" : 5, + "layer" : 5, + "computedX" : 205.345, + "computedY" : 141.902, + "placementX" : 205.345, + "placementY" : 141.902, + "placementWidth" : 365.931, + "placementHeight" : 45.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.931, + "contentHeight" : 45.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 2.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_2Stack[6]/Project_2Layer[0]", + "entityName" : "Project_2Layer", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_2Stack[6]", + "childIndex" : 0, + "depth" : 6, + "layer" : 6, + "computedX" : 205.345, + "computedY" : 141.902, + "placementX" : 205.345, + "placementY" : 141.902, + "placementWidth" : 365.931, + "placementHeight" : 45.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.931, + "contentHeight" : 45.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_2Stack[6]/Project_2Layer[0]/Project_2[0]", + "entityName" : "Project_2", + "entityKind" : "RowNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_2Stack[6]/Project_2Layer[0]", + "childIndex" : 0, + "depth" : 7, + "layer" : 7, + "computedX" : 205.345, + "computedY" : 141.902, + "placementX" : 205.345, + "placementY" : 141.902, + "placementWidth" : 365.931, + "placementHeight" : 45.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.931, + "contentHeight" : 45.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_2Stack[6]/Project_2Layer[0]/Project_2[0]/ProjIcon_2[0]", + "entityName" : "ProjIcon_2", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_2Stack[6]/Project_2Layer[0]/Project_2[0]", + "childIndex" : 0, + "depth" : 8, + "layer" : 8, + "computedX" : 205.345, + "computedY" : 164.902, + "placementX" : 205.345, + "placementY" : 164.902, + "placementWidth" : 22.0, + "placementHeight" : 22.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 22.0, + "contentHeight" : 22.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_2Stack[6]/Project_2Layer[0]/Project_2[0]/ProjMeta_2[1]", + "entityName" : "ProjMeta_2", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_2Stack[6]/Project_2Layer[0]/Project_2[0]", + "childIndex" : 1, + "depth" : 8, + "layer" : 8, + "computedX" : 234.619, + "computedY" : 152.91, + "placementX" : 234.619, + "placementY" : 152.91, + "placementWidth" : 99.272, + "placementHeight" : 33.992, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 99.272, + "contentHeight" : 33.992, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 8.0, + "bottom" : 0.0, + "left" : 4.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_2Stack[6]/Project_2Layer[0]/Project_2[0]/ProjMeta_2[1]/ProjTitle_2[0]", + "entityName" : "ProjTitle_2", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_2Stack[6]/Project_2Layer[0]/Project_2[0]/ProjMeta_2[1]", + "childIndex" : 0, + "depth" : 9, + "layer" : 9, + "computedX" : 238.619, + "computedY" : 175.137, + "placementX" : 238.619, + "placementY" : 175.137, + "placementWidth" : 70.079, + "placementHeight" : 11.765, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 70.079, + "contentHeight" : 11.765, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 1.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_2Stack[6]/Project_2Layer[0]/Project_2[0]/ProjMeta_2[1]/ProjSub_2[1]", + "entityName" : "ProjSub_2", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_2Stack[6]/Project_2Layer[0]/Project_2[0]/ProjMeta_2[1]", + "childIndex" : 1, + "depth" : 9, + "layer" : 9, + "computedX" : 238.619, + "computedY" : 164.024, + "placementX" : 238.619, + "placementY" : 164.024, + "placementWidth" : 87.272, + "placementHeight" : 10.114, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 87.272, + "contentHeight" : 10.114, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 1.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_2Stack[6]/Project_2Layer[0]/Project_2[0]/ProjMeta_2[1]/ProjLoc_2[2]", + "entityName" : "ProjLoc_2", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_2Stack[6]/Project_2Layer[0]/Project_2[0]/ProjMeta_2[1]", + "childIndex" : 2, + "depth" : 9, + "layer" : 9, + "computedX" : 238.619, + "computedY" : 152.91, + "placementX" : 238.619, + "placementY" : 152.91, + "placementWidth" : 53.164, + "placementHeight" : 10.114, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 53.164, + "contentHeight" : 10.114, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_2Stack[6]/Project_2Layer[0]/Project_2[0]/ProjDesc_2[2]", + "entityName" : "ProjDesc_2", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_2Stack[6]/Project_2Layer[0]/Project_2[0]", + "childIndex" : 2, + "depth" : 8, + "layer" : 8, + "computedX" : 366.354, + "computedY" : 141.902, + "placementX" : 366.354, + "placementY" : 141.902, + "placementWidth" : 166.176, + "placementHeight" : 45.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 166.176, + "contentHeight" : 45.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 10.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_2Stack[6]/Project_2Layer[0]/Project_2[0]/ProjDesc_2[2]/ProjDescText_2[0]", + "entityName" : "ProjDescText_2", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/SelectedProjects[6]/Project_2Stack[6]/Project_2Layer[0]/Project_2[0]/ProjDesc_2[2]", + "childIndex" : 0, + "depth" : 9, + "layer" : 9, + "computedX" : 376.354, + "computedY" : 141.902, + "placementX" : 376.354, + "placementY" : 141.902, + "placementWidth" : 156.176, + "placementHeight" : 45.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 156.176, + "contentHeight" : 45.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Divider_AfterProjects[7]", + "entityName" : "Divider_AfterProjects", + "entityKind" : "LineNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]", + "childIndex" : 7, + "depth" : 4, + "layer" : 4, + "computedX" : 205.345, + "computedY" : 132.902, + "placementX" : 205.345, + "placementY" : 132.902, + "placementWidth" : 365.931, + "placementHeight" : 1.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.931, + "contentHeight" : 1.0, + "margin" : { + "top" : 6.0, + "right" : 0.0, + "bottom" : 6.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]", + "entityName" : "Education", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]", + "childIndex" : 8, + "depth" : 4, + "layer" : 4, + "computedX" : 205.345, + "computedY" : 52.306, + "placementX" : 205.345, + "placementY" : 52.306, + "placementWidth" : 365.931, + "placementHeight" : 74.096, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.931, + "contentHeight" : 74.096, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/Heading_EDUCATION[0]", + "entityName" : "Heading_EDUCATION", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 205.345, + "computedY" : 115.876, + "placementX" : 205.345, + "placementY" : 115.876, + "placementWidth" : 60.632, + "placementHeight" : 10.526, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 60.632, + "contentHeight" : 10.526, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 3.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/AccentLine_EDUCATION[1]", + "entityName" : "AccentLine_EDUCATION", + "entityKind" : "LineNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 205.345, + "computedY" : 110.976, + "placementX" : 205.345, + "placementY" : 110.976, + "placementWidth" : 22.0, + "placementHeight" : 1.4, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 22.0, + "contentHeight" : 1.4, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 5.5, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]", + "entityName" : "EducationBandStack", + "entityKind" : "LayerStackNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]", + "childIndex" : 2, + "depth" : 5, + "layer" : 5, + "computedX" : 205.345, + "computedY" : 52.306, + "placementX" : 205.345, + "placementY" : 52.306, + "placementWidth" : 365.931, + "placementHeight" : 53.17, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.931, + "contentHeight" : 53.17, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]", + "entityName" : "EducationBandLayer", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]", + "childIndex" : 0, + "depth" : 6, + "layer" : 6, + "computedX" : 205.345, + "computedY" : 52.306, + "placementX" : 205.345, + "placementY" : 52.306, + "placementWidth" : 365.931, + "placementHeight" : 53.17, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.931, + "contentHeight" : 53.17, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]", + "entityName" : "EducationBand", + "entityKind" : "RowNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]", + "childIndex" : 0, + "depth" : 7, + "layer" : 7, + "computedX" : 205.345, + "computedY" : 52.306, + "placementX" : 205.345, + "placementY" : 52.306, + "placementWidth" : 365.931, + "placementHeight" : 53.17, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 365.931, + "contentHeight" : 53.17, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationEntries[0]", + "entityName" : "EducationEntries", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]", + "childIndex" : 0, + "depth" : 8, + "layer" : 8, + "computedX" : 205.345, + "computedY" : 52.306, + "placementX" : 205.345, + "placementY" : 52.306, + "placementWidth" : 256.142, + "placementHeight" : 53.17, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 256.142, + "contentHeight" : 53.17, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 8.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationEntries[0]/EducationEntry_0[0]", + "entityName" : "EducationEntry_0", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationEntries[0]", + "childIndex" : 0, + "depth" : 9, + "layer" : 9, + "computedX" : 205.345, + "computedY" : 74.391, + "placementX" : 205.345, + "placementY" : 74.391, + "placementWidth" : 248.142, + "placementHeight" : 31.085, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 248.142, + "contentHeight" : 31.085, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 9.0, + "left" : 13.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationEntries[0]/EducationEntry_0[0]/EduLine_0[0]", + "entityName" : "EduLine_0", + "entityKind" : "LayerStackNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationEntries[0]/EducationEntry_0[0]", + "childIndex" : 0, + "depth" : 10, + "layer" : 10, + "computedX" : 218.345, + "computedY" : 93.711, + "placementX" : 218.345, + "placementY" : 93.711, + "placementWidth" : 235.142, + "placementHeight" : 11.765, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 235.142, + "contentHeight" : 11.765, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationEntries[0]/EducationEntry_0[0]/EduLine_0[0]/EduTable_0[0]", + "entityName" : "EduTable_0", + "entityKind" : "TableNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationEntries[0]/EducationEntry_0[0]/EduLine_0[0]", + "childIndex" : 0, + "depth" : 11, + "layer" : 11, + "computedX" : 218.345, + "computedY" : 93.711, + "placementX" : 218.345, + "placementY" : 93.711, + "placementWidth" : 235.142, + "placementHeight" : 11.765, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 235.142, + "contentHeight" : 11.765, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationEntries[0]/EducationEntry_0[0]/EduLine_0[0]/EduMarker_0[1]", + "entityName" : "EduMarker_0", + "entityKind" : "EllipseNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationEntries[0]/EducationEntry_0[0]/EduLine_0[0]", + "childIndex" : 1, + "depth" : 11, + "layer" : 11, + "computedX" : 202.245, + "computedY" : 99.276, + "placementX" : 202.245, + "placementY" : 99.276, + "placementWidth" : 6.2, + "placementHeight" : 6.2, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 6.2, + "contentHeight" : 6.2, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationEntries[0]/EducationEntry_0[0]/Institution_0[1]", + "entityName" : "Institution_0", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationEntries[0]/EducationEntry_0[0]", + "childIndex" : 1, + "depth" : 10, + "layer" : 10, + "computedX" : 218.345, + "computedY" : 83.391, + "placementX" : 218.345, + "placementY" : 83.391, + "placementWidth" : 78.604, + "placementHeight" : 10.32, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 78.604, + "contentHeight" : 10.32, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationEntries[0]/EducationEntry_1[1]", + "entityName" : "EducationEntry_1", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationEntries[0]", + "childIndex" : 1, + "depth" : 9, + "layer" : 9, + "computedX" : 205.345, + "computedY" : 52.306, + "placementX" : 205.345, + "placementY" : 52.306, + "placementWidth" : 248.142, + "placementHeight" : 22.085, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 248.142, + "contentHeight" : 22.085, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 13.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationEntries[0]/EducationEntry_1[1]/EduLine_1[0]", + "entityName" : "EduLine_1", + "entityKind" : "LayerStackNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationEntries[0]/EducationEntry_1[1]", + "childIndex" : 0, + "depth" : 10, + "layer" : 10, + "computedX" : 218.345, + "computedY" : 62.626, + "placementX" : 218.345, + "placementY" : 62.626, + "placementWidth" : 235.142, + "placementHeight" : 11.765, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 235.142, + "contentHeight" : 11.765, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationEntries[0]/EducationEntry_1[1]/EduLine_1[0]/EduTable_1[0]", + "entityName" : "EduTable_1", + "entityKind" : "TableNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationEntries[0]/EducationEntry_1[1]/EduLine_1[0]", + "childIndex" : 0, + "depth" : 11, + "layer" : 11, + "computedX" : 218.345, + "computedY" : 62.626, + "placementX" : 218.345, + "placementY" : 62.626, + "placementWidth" : 235.142, + "placementHeight" : 11.765, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 235.142, + "contentHeight" : 11.765, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationEntries[0]/EducationEntry_1[1]/EduLine_1[0]/EduMarker_1[1]", + "entityName" : "EduMarker_1", + "entityKind" : "EllipseNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationEntries[0]/EducationEntry_1[1]/EduLine_1[0]", + "childIndex" : 1, + "depth" : 11, + "layer" : 11, + "computedX" : 202.245, + "computedY" : 68.191, + "placementX" : 202.245, + "placementY" : 68.191, + "placementWidth" : 6.2, + "placementHeight" : 6.2, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 6.2, + "contentHeight" : 6.2, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationEntries[0]/EducationEntry_1[1]/Institution_1[1]", + "entityName" : "Institution_1", + "entityKind" : "ParagraphNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationEntries[0]/EducationEntry_1[1]", + "childIndex" : 1, + "depth" : 10, + "layer" : 10, + "computedX" : 218.345, + "computedY" : 52.306, + "placementX" : 218.345, + "placementY" : 52.306, + "placementWidth" : 120.056, + "placementHeight" : 10.32, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 120.056, + "contentHeight" : 10.32, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]/EducationBandRight[1]", + "entityName" : "EducationBandRight", + "entityKind" : "SectionNode", + "parentPath" : "TerracottaRailCv[0]/Body[0]/MainColumn[1]/Education[8]/EducationBandStack[2]/EducationBandLayer[0]/EducationBand[0]", + "childIndex" : 1, + "depth" : 8, + "layer" : 8, + "computedX" : 461.496, + "computedY" : 105.476, + "placementX" : 461.496, + "placementY" : 105.476, + "placementWidth" : 0.0, + "placementHeight" : 0.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 0.0, + "contentHeight" : 0.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + } ] +} diff --git a/qa/src/test/resources/visual-baselines/cv-v2-layered/terracotta_rail-page-0.png b/qa/src/test/resources/visual-baselines/cv-v2-layered/terracotta_rail-page-0.png new file mode 100644 index 0000000000000000000000000000000000000000..67030d567b248940607ef41c525a5ca4cbbe65aa GIT binary patch literal 143214 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 z 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 columns are divided by a hairline the sidebar carries as its own + * right border, so it is as tall as the sidebar rather than as tall as the + * page. The preset paints nothing: the sheet is drawn on white paper and + * leaves the page size and the margin to the caller — the geometry follows + * the page's own width, so another page rescales rather than breaks.

+ * + *

One page, and what happens past it

+ * + *

The two columns are a single row, and a row is atomic — it cannot be + * split — so a CV longer than the sheet does not flow onto a second page: + * composing it raises {@code AtomicNodeTooLargeException}, naming the node + * and the height it needed. It draws no cap of its own, because a CV that + * quietly loses a job is worse than one that refuses to compose. + * {@link TimelineMinimal} is the preset in this package that splits its own + * columns across pages.

+ * + *

How a document reaches its berth

+ * + *

The columns are fixed, so the preset assigns each section a berth by + * title rather than reading {@link + * com.demcha.compose.document.templates.cv.data.Slot}. It has eight:

+ * + *
    + *
  • competencies and software, {@link SkillsSection}s; certifications, + * an {@link EntriesSection} of one-line entries; and the closing + * facts, an {@link EntriesSection} whose bodies are one line per + * value — in the sidebar;
  • + *
  • the summary, a {@link ParagraphSection} of one paragraph per line; + * experience, projects and education, {@link EntriesSection}s — in the + * main column.
  • + *
+ * + *

A section whose title matches no berth is not drawn, a berth with no + * section takes its heading and the divider above it with it, and a berth is + * filled by the first section that names it. The two bulleted lists are + * skills without levels: this design writes them as plain lines, so a rating + * would have nowhere to go — one takes a terracotta square and no dash under + * its heading, the other a disc and a dash, which is how the sheet tells two + * lists of one-liners apart.

+ * + *

The monogram, the marks and the links

+ * + *

The monogram is drawn from the name's own initials rather than a field + * of its own: a document states its name once, and a monogram that could + * disagree with it would be a second place to keep true.

+ * + *

Each fact and each project takes the mark its entry names in + * {@code CvEntry.icon()}, from this preset's own vocabulary — + * {@code globe}, {@code badge}, {@code clock}, {@code building}, + * {@code hotel}, {@code house} — and an unknown token is reported as a data + * error naming the set. An entry with no token is drawn without a mark, and + * a project title becomes a link when its entry carries + * {@code CvEntry.link()}.

+ * + *

The email, the phone and each link are reachable from the PDF, with the + * {@code mailto:} and {@code tel:} targets built from the values. A link is + * set smaller than a channel above it, because a URL is one long token that + * cannot be broken and is the line that outgrows this column first; it takes + * the mark of the network it points at, or a globe.

+ * + *

Fonts

+ * + *

The sheet is set in Lato, with PT Serif for the monogram. The templates + * artifact carries neither — register them on the session, or the engine + * substitutes and the measured geometry here no longer matches the type + * sitting in it.

+ * + *

Usage:

+ *
{@code
+ * DocumentTemplate template = TerracottaRail.create();
+ * template.compose(session, cv);
+ * }
+ * + * @since 2.2.3 + */ +public final class TerracottaRail { + + /** Stable identifier of this preset. */ + public static final String ID = "terracotta-rail"; + + /** Human-readable name of this preset. */ + public static final String DISPLAY_NAME = "Terracotta Rail"; + + /** + * The margin this preset expects: none. Both columns run to the paper + * edge and each carries its own padding. + */ + public static final double RECOMMENDED_MARGIN = 0.0; + + private static final List COMPETENCY_KEYS = + List.of("competencies", "competency", "skills", "expertise"); + private static final List SOFTWARE_KEYS = + List.of("software", "tools", "stack"); + private static final List CERTIFICATION_KEYS = + List.of("certifications", "certification", "licences", "licenses"); + private static final List FACT_KEYS = + List.of("additional", "details", "other"); + private static final List SUMMARY_KEYS = + List.of("summary", "profile", "about"); + private static final List EXPERIENCE_KEYS = + List.of("experience", "employment", "work history", "career"); + private static final List PROJECT_KEYS = + List.of("projects", "project", "portfolio", "selected work"); + private static final List EDUCATION_KEYS = + List.of("education", "qualifications"); + + private TerracottaRail() { + } + + /** + * Creates the template. + * + * @return a template composing a {@link CvDocument} + */ + public static DocumentTemplate create() { + return new Template(); + } + + private record Template() implements DocumentTemplate { + + @Override + public String id() { + return ID; + } + + @Override + public String displayName() { + return DISPLAY_NAME; + } + + @Override + public void compose(DocumentSession document, CvDocument doc) { + Objects.requireNonNull(document, "document"); + Objects.requireNonNull(doc, "doc"); + List sections = doc.sections(); + + // Software first, and the competency berth then skips whatever it + // claimed: a section titled for both — "Software Skills" — would + // otherwise fill the two berths and be drawn twice. + SkillsSection software = berth(sections, SkillsSection.class, SOFTWARE_KEYS); + SkillsSection competencies = + berthExcept(sections, SkillsSection.class, COMPETENCY_KEYS, software); + EntriesSection certifications = + berth(sections, EntriesSection.class, CERTIFICATION_KEYS); + EntriesSection facts = berth(sections, EntriesSection.class, FACT_KEYS); + ParagraphSection summary = berth(sections, ParagraphSection.class, SUMMARY_KEYS); + EntriesSection experience = berth(sections, EntriesSection.class, EXPERIENCE_KEYS); + EntriesSection projects = berth(sections, EntriesSection.class, PROJECT_KEYS); + EntriesSection education = berth(sections, EntriesSection.class, EDUCATION_KEYS); + + document.pageFlow(page -> page + .name("TerracottaRailCv") + .spacing(0) + .addRow("Body", row -> { + row.name("Body"); + row.spacing(0); + row.weights(SIDEBAR_WEIGHT, MAIN_WEIGHT); + row.addSection("Sidebar", side -> + TerracottaRailAside.compose(side, doc.identity(), competencies, + software, certifications, facts)); + row.addSection("MainColumn", main -> + TerracottaRailMain.compose(main, doc.identity(), summary, + experience, projects, education)); + })); + } + + /** + * The first section of the wanted shape whose title names this berth, + * or {@code null} when the document fills no such berth. + */ + private static T berth(List sections, + Class type, + List keys) { + return berthExcept(sections, type, keys, null); + } + + /** The same, skipping a section another berth has already claimed. */ + private static T berthExcept(List sections, + Class type, + List keys, + CvSection taken) { + for (CvSection section : sections) { + if (!type.isInstance(section) || section == taken) { + continue; + } + for (String key : keys) { + if (SectionLookup.titleContains(section.title(), key)) { + return type.cast(section); + } + } + } + return null; + } + } +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailAside.java b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailAside.java new file mode 100644 index 000000000..3a8749596 --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailAside.java @@ -0,0 +1,306 @@ +package com.demcha.compose.document.templates.cv.presets; + +import com.demcha.compose.document.dsl.SectionBuilder; +import com.demcha.compose.document.node.DocumentLinkOptions; +import com.demcha.compose.document.style.DocumentInsets; +import com.demcha.compose.document.templates.core.identity.Contact; +import com.demcha.compose.document.templates.core.identity.Link; +import com.demcha.compose.document.templates.cv.data.CvEntry; +import com.demcha.compose.document.templates.cv.data.CvIdentity; +import com.demcha.compose.document.templates.cv.data.CvSkill; +import com.demcha.compose.document.templates.cv.data.EntriesSection; +import com.demcha.compose.document.templates.cv.data.SkillGroup; +import com.demcha.compose.document.templates.cv.data.SkillsSection; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.ACCENT; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.ACCENT_RULE_THICKNESS; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.COLUMN_PAD_BOTTOM; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.CONTACT_ROW_GAP; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.DETAIL_SIZE; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.INFO_BLOCK_GAP; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.INFO_LINE_GAP; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.INFO_WEIGHTS; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.INK; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.LINK_SCALE; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.MONOGRAM_RULE_TO_CONTACT_GAP; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.MONOGRAM_RULE_WIDTH; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.MONOGRAM_SIZE; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.MONOGRAM_TO_RULE_GAP; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.RULE; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.RULE_THICKNESS; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.SIDEBAR_DASH_WIDTH; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.SIDEBAR_DIVIDER_GAP; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.SIDEBAR_HEADING_SPACER; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.SIDEBAR_PAD_LEFT; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.SIDEBAR_PAD_RIGHT; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.SIDEBAR_PAD_TOP; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.serif; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.text; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailWidgets.bulletLine; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailWidgets.divider; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailWidgets.heading; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailWidgets.headingWithDash; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailWidgets.inlineIcon; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailWidgets.layeredRow; + +/** + * The narrow column: the monogram, the contact channels, the two bulleted + * lists, the credentials and the closing facts. + */ +final class TerracottaRailAside { + + private TerracottaRailAside() { + } + + static void compose(SectionBuilder side, CvIdentity identity, SkillsSection competencies, + SkillsSection software, EntriesSection certifications, + EntriesSection facts) { + side.name("Sidebar"); + side.spacing(0); + side.accentRight(RULE, RULE_THICKNESS); + side.padding((float) SIDEBAR_PAD_TOP, (float) SIDEBAR_PAD_RIGHT, + (float) COLUMN_PAD_BOTTOM, (float) SIDEBAR_PAD_LEFT); + + renderMonogram(side, identity); + renderContact(side, identity); + + if (hasSkills(competencies)) { + divider(side, "AfterContact", SIDEBAR_DIVIDER_GAP, SIDEBAR_DIVIDER_GAP); + renderBulletedSkills(side, competencies, "CoreCompetencies", "Competency", false); + } + if (hasSkills(software)) { + divider(side, "AfterCompetencies", SIDEBAR_DIVIDER_GAP, SIDEBAR_DIVIDER_GAP); + renderBulletedSkills(side, software, "Software", "Software", true); + } + if (hasEntries(certifications)) { + divider(side, "AfterSoftware", SIDEBAR_DIVIDER_GAP, SIDEBAR_DIVIDER_GAP); + renderCertifications(side, certifications); + } + if (hasEntries(facts)) { + divider(side, "AfterCertifications", SIDEBAR_DIVIDER_GAP, SIDEBAR_DIVIDER_GAP); + renderFacts(side, facts); + } + } + + // -- the lockup -------------------------------------------------------- + + /** + * The monogram over its terracotta rule. It is drawn from the name's own + * initials rather than a field of its own — a document states the name + * once, and a monogram that could disagree with it would be a second + * place to keep true. + */ + private static void renderMonogram(SectionBuilder side, CvIdentity identity) { + side.addParagraph(p -> p + .name("Monogram") + .text(monogram(identity)) + .textStyle(serif(MONOGRAM_SIZE, ACCENT)) + .margin(0f, 0f, (float) MONOGRAM_TO_RULE_GAP, 0f)); + side.addLine(line -> line + .name("MonogramRule") + .horizontal(MONOGRAM_RULE_WIDTH) + .thickness(ACCENT_RULE_THICKNESS) + .color(ACCENT) + .margin(new DocumentInsets(0, 0, MONOGRAM_RULE_TO_CONTACT_GAP, 0))); + } + + /** The initials of the given and the family name, in capitals. */ + private static String monogram(CvIdentity identity) { + StringBuilder out = new StringBuilder(2); + appendInitial(out, identity.name().first()); + appendInitial(out, identity.name().last()); + return out.toString(); + } + + private static void appendInitial(StringBuilder out, String part) { + if (!part.isBlank()) { + out.append(Character.toUpperCase(part.charAt(0))); + } + } + + // -- the channels ------------------------------------------------------ + + /** + * The contact block: each channel behind its mark, and the links beneath + * them. + * + *

A link is set smaller than a channel. A URL is one long token that + * cannot be broken, so it is the line that outgrows this column first, + * while a phone, an address or a city is short enough at full size.

+ */ + private static void renderContact(SectionBuilder side, CvIdentity identity) { + side.addSection("Contact", block -> { + block.spacing(0); + // The contact triple is non-blank by construction, so the three + // channels are always drawn; only the links are optional. + Contact contact = identity.contact(); + channel(block, 0, TerracottaRailIcons.EMAIL, contact.email(), + "mailto:" + contact.email(), false); + channel(block, 1, TerracottaRailIcons.PHONE, contact.phone(), + telUri(contact.phone()), false); + channel(block, 2, TerracottaRailIcons.LOCATION, contact.address(), null, false); + int index = 3; + for (Link link : identity.links()) { + channel(block, index++, markFor(link), link.label(), link.url(), true); + } + }); + } + + private static void channel(SectionBuilder block, int index, String token, String value, + String href, boolean compact) { + block.addParagraph(p -> { + p.name("Contact_" + index); + inlineIcon(p, token, TerracottaRailIcons.CONTACT_SIZE); + p.inlineText(compact ? " " : " "); + double size = compact ? DETAIL_SIZE * LINK_SCALE : DETAIL_SIZE; + if (href == null || href.isBlank()) { + p.inlineText(value, text(size, INK, false)); + } else { + p.inlineText(value, text(size, INK, false), new DocumentLinkOptions(href)); + } + p.margin(0f, 0f, (float) CONTACT_ROW_GAP, 0f); + }); + } + + /** A link takes the mark of the network it points at, or a globe. */ + private static String markFor(Link link) { + String target = (link.url() + " " + link.label()).toLowerCase(Locale.ROOT); + return target.contains("linkedin") + ? TerracottaRailIcons.LINKEDIN + : TerracottaRailIcons.GLOBE; + } + + /** + * The dial target for a phone number: its digits, keeping a leading + * {@code +} so an international number stays international, and dropping + * a parenthesised trunk prefix the way a caller dialling from abroad + * drops it. + */ + private static String telUri(String phone) { + String dialled = phone.replaceAll("\\(0+\\)", ""); + String digits = dialled.replaceAll("[^0-9]", ""); + return digits.isEmpty() + ? null + : "tel:" + (phone.trim().startsWith("+") ? "+" : "") + digits; + } + + // -- the lists --------------------------------------------------------- + + /** + * A bulleted list of skills. The competencies take a terracotta square + * and no dash under their heading; the software list takes a disc and a + * dash — the design's own way of telling two lists of one-liners apart. + */ + private static void renderBulletedSkills(SectionBuilder side, SkillsSection section, + String blockName, String prefix, + boolean discBullet) { + side.addSection(blockName, block -> { + block.spacing(0); + if (discBullet) { + headingWithDash(block, section.title(), SIDEBAR_HEADING_SPACER, + SIDEBAR_DASH_WIDTH); + } else { + heading(block, section.title(), SIDEBAR_HEADING_SPACER); + } + int index = 0; + for (SkillGroup group : section.groups()) { + for (CvSkill skill : group.entries()) { + String name = prefix + "_" + index++; + if (discBullet) { + bulletLine(block, name, p -> p.dot(3.0, ACCENT), skill.name(), + INK, DETAIL_SIZE); + } else { + bulletLine(block, name, + p -> inlineIcon(p, TerracottaRailIcons.SQUARE, + TerracottaRailIcons.BULLET_SIZE), + skill.name(), INK, DETAIL_SIZE); + } + } + } + }); + } + + /** The credentials: one disc-bulleted line each. */ + private static void renderCertifications(SectionBuilder side, EntriesSection section) { + side.addSection("Certifications", block -> { + block.spacing(0); + headingWithDash(block, section.title(), SIDEBAR_HEADING_SPACER, SIDEBAR_DASH_WIDTH); + List entries = section.entries(); + for (int index = 0; index < entries.size(); index++) { + bulletLine(block, "Certification_" + index, p -> p.dot(3.0, ACCENT), + entries.get(index).title(), INK, DETAIL_SIZE); + } + }); + } + + /** + * The closing facts: a mark beside a label and the lines under it. + * + *

The mark is an inline run inside a paragraph rather than a block + * icon node: a block icon in a row cell makes the whole row lay its cells + * out vertically.

+ */ + private static void renderFacts(SectionBuilder side, EntriesSection section) { + side.addSection("AdditionalInformation", block -> { + block.spacing(0); + heading(block, section.title(), SIDEBAR_HEADING_SPACER); + List entries = section.entries(); + for (int i = 0; i < entries.size(); i++) { + CvEntry entry = entries.get(i); + int index = i; + layeredRow(block, "AddInfo_" + index, 0.0, INFO_BLOCK_GAP, row -> { + row.weights(INFO_WEIGHTS[0], INFO_WEIGHTS[1]); + row.addParagraph(p -> { + p.name("Icon_" + index); + if (!entry.icon().isBlank()) { + inlineIcon(p, entry.icon(), TerracottaRailIcons.FACT_SIZE); + } + }); + row.addSection("Text_" + index, cell -> { + cell.spacing(0); + cell.addParagraph(p -> p + .name("Label_" + index) + .text(entry.title()) + .textStyle(text(DETAIL_SIZE, INK, true)) + .margin(0f, 0f, (float) INFO_LINE_GAP, 0f)); + for (String line : lines(entry.body())) { + cell.addParagraph(p -> p + .name("Val_" + index) + .text(line) + .textStyle(text(DETAIL_SIZE, INK, false)) + .margin(0f, 0f, (float) INFO_LINE_GAP, 0f)); + } + }); + }); + } + }); + } + + /** A fact's body, one line per line the document wrote. */ + private static List lines(String body) { + List out = new ArrayList<>(); + for (String line : body.split(String.valueOf((char) 10))) { + if (!line.isBlank()) { + out.add(line.strip()); + } + } + return out; + } + + // -- presence ---------------------------------------------------------- + + private static boolean hasSkills(SkillsSection section) { + if (section == null) { + return false; + } + return section.groups().stream().anyMatch(group -> !group.entries().isEmpty()); + } + + private static boolean hasEntries(EntriesSection section) { + return section != null && !section.entries().isEmpty(); + } +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailIcons.java b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailIcons.java new file mode 100644 index 000000000..24f8795af --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailIcons.java @@ -0,0 +1,97 @@ +package com.demcha.compose.document.templates.cv.presets; + +import com.demcha.compose.document.svg.SvgIcon; + +import java.io.IOException; +import java.io.InputStream; +import java.io.UncheckedIOException; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Classpath loader for the Terracotta Rail CV marks — the four contact + * glyphs and the bullet in the sidebar, the three marks a fact block may + * name, and the three a project may. + * + *

They ship inside the templates artifact under + * {@code templates/cv/terracotta-rail/icons/} as SVG, so they scale with the + * box they are drawn into rather than being resampled. Parsed icons are + * cached per token, so a sheet that repeats a mark reads each file once per + * JVM.

+ * + *

{@link #ENTRY_TOKENS} is the vocabulary a document names through + * {@code CvEntry.icon()}. It is scoped to this preset — another preset + * packages its own set — and an entry that names none is drawn without a + * mark.

+ */ +final class TerracottaRailIcons { + + static final String EMAIL = "email"; + static final String PHONE = "phone"; + static final String LOCATION = "location"; + static final String LINKEDIN = "linkedin"; + static final String GLOBE = "globe"; + static final String SQUARE = "square"; + + private static final String ICON_ROOT = "/templates/cv/terracotta-rail/icons/"; + + /** A contact glyph is set at the size of the line beside it. */ + static final double CONTACT_SIZE = 10.0; + + /** The competency bullet — a terracotta square, not a disc. */ + static final double BULLET_SIZE = 3.8; + + /** A fact's mark stands beside a two-line block, so it is drawn larger. */ + static final double FACT_SIZE = 16.0; + + /** A project's mark is the sketch that opens its row. */ + static final double PROJECT_SIZE = 22.0; + + /** The marks a document may name on a fact or a project entry. */ + static final Set ENTRY_TOKENS = + Set.of(GLOBE, "badge", "clock", "building", "hotel", "house"); + + private static final Set TOKENS = + Set.of(EMAIL, PHONE, LOCATION, LINKEDIN, SQUARE, + GLOBE, "badge", "clock", "building", "hotel", "house"); + + private static final Map CACHE = new ConcurrentHashMap<>(); + + private TerracottaRailIcons() { + } + + /** + * Reads one mark. + * + * @param token one of the packaged tokens + * @return the parsed icon + * @throws IllegalArgumentException when the token names no packaged mark, + * listing the ones a document may choose — an icon token is data, + * so a wrong one is a data error + */ + static SvgIcon icon(String token) { + if (!TOKENS.contains(token)) { + throw new IllegalArgumentException( + "Unknown terracotta rail CV icon token '" + token + + "'. This preset packages " + ENTRY_TOKENS.stream().sorted().toList() + + " for an entry mark."); + } + return CACHE.computeIfAbsent(token, TerracottaRailIcons::read); + } + + private static SvgIcon read(String token) { + String resourcePath = ICON_ROOT + token + ".svg"; + try (InputStream input = TerracottaRailIcons.class.getResourceAsStream(resourcePath)) { + if (input == null) { + throw new IllegalStateException( + "Missing terracotta rail CV icon: " + resourcePath); + } + return SvgIcon.parse(new String(input.readAllBytes(), StandardCharsets.UTF_8)); + } catch (IOException e) { + throw new UncheckedIOException( + "Failed to read terracotta rail CV icon: " + resourcePath, e); + } + } +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailMain.java b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailMain.java new file mode 100644 index 000000000..985c12538 --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailMain.java @@ -0,0 +1,337 @@ +package com.demcha.compose.document.templates.cv.presets; + +import com.demcha.compose.document.dsl.SectionBuilder; +import com.demcha.compose.document.node.DocumentLinkOptions; +import com.demcha.compose.document.node.ListMarker; +import com.demcha.compose.document.style.DocumentInsets; +import com.demcha.compose.document.templates.cv.data.CvEntry; +import com.demcha.compose.document.templates.cv.data.CvIdentity; +import com.demcha.compose.document.templates.cv.data.EntriesSection; +import com.demcha.compose.document.templates.cv.data.ParagraphSection; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.ACCENT; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.BODY_SIZE; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.COLUMN_PAD_BOTTOM; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.DETAIL_SIZE; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.EDUCATION_BAND_PAD_RIGHT; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.EDUCATION_BAND_WEIGHT; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.EDUCATION_ENTRY_WIDTH; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.EDUCATION_PERIOD_SHARE; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.EMPLOYER_GAP; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.ENTRY_GAP; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.ENTRY_INDENT; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.ENTRY_WIDTH; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.HIGHLIGHT_ITEM_SPACING; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.HIGHLIGHT_LINE_SPACING; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.INK; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.ITEM_TITLE_SIZE; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.MAIN_DASH_WIDTH; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.MAIN_DIVIDER_BOTTOM; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.MAIN_DIVIDER_TOP; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.MAIN_HEADING_SPACER; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.MAIN_PAD_LEFT; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.MAIN_PAD_RIGHT; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.MAIN_PAD_TOP; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.MASTHEAD_DIVIDER_BOTTOM; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.MASTHEAD_DIVIDER_TOP; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.MUTED; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.NAME_SIZE; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.NAME_TO_SUBTITLE_GAP; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.PROJECT_DESCRIPTION_PAD_LEFT; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.PROJECT_DIVIDER_GAP; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.PROJECT_LINE_SPACING; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.PROJECT_META_PAD_LEFT; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.PROJECT_META_PAD_RIGHT; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.PROJECT_ROW_GAP; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.PROJECT_WEIGHTS; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.ROLE_PERIOD_SHARE; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.RULE; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.RULE_THICKNESS; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.SUBTITLE_SIZE; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.SUBTITLE_TO_RULE_GAP; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.SUMMARY_LINE_GAP; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.SUMMARY_LINE_SPACING; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.italic; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.text; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailWidgets.divider; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailWidgets.heading; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailWidgets.headingWithDash; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailWidgets.inlineIcon; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailWidgets.layeredRow; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailWidgets.railedLine; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailWidgets.titleAndDate; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailWidgets.trackedWide; + +/** + * The wide column: the masthead, the summary, the roles held on a rail, the + * projects grid and the degrees. + */ +final class TerracottaRailMain { + + private TerracottaRailMain() { + } + + static void compose(SectionBuilder main, CvIdentity identity, ParagraphSection summary, + EntriesSection experience, EntriesSection projects, + EntriesSection education) { + main.name("MainColumn"); + main.spacing(0); + main.padding((float) MAIN_PAD_TOP, (float) MAIN_PAD_RIGHT, + (float) COLUMN_PAD_BOTTOM, (float) MAIN_PAD_LEFT); + + renderMasthead(main, identity); + + if (hasBody(summary)) { + divider(main, "AfterMasthead", MASTHEAD_DIVIDER_TOP, + MASTHEAD_DIVIDER_BOTTOM); + renderSummary(main, summary); + } + if (hasEntries(experience)) { + mainDivider(main, "AfterSummary"); + renderExperience(main, experience); + } + if (hasEntries(projects)) { + mainDivider(main, "AfterExperience"); + renderProjects(main, projects); + } + if (hasEntries(education)) { + mainDivider(main, "AfterProjects"); + renderEducation(main, education); + } + } + + private static void mainDivider(SectionBuilder main, String name) { + divider(main, name, MAIN_DIVIDER_TOP, + MAIN_DIVIDER_BOTTOM); + } + + // -- masthead ---------------------------------------------------------- + + /** The name over its role, both letter-spaced, the role in terracotta. */ + private static void renderMasthead(SectionBuilder main, CvIdentity identity) { + main.addSection("Masthead", block -> { + block.spacing(0); + block.addParagraph(p -> p + .name("FullName") + .text(trackedWide(identity.name().full().toUpperCase(Locale.ROOT))) + .textStyle(text(NAME_SIZE, INK, true)) + .margin(0f, 0f, (float) NAME_TO_SUBTITLE_GAP, 0f)); + block.addParagraph(p -> p + .name("JobTitle") + .text(trackedWide(identity.jobTitle().toUpperCase(Locale.ROOT))) + .textStyle(text(SUBTITLE_SIZE, ACCENT, true)) + .margin(0f, 0f, (float) SUBTITLE_TO_RULE_GAP, 0f)); + }); + } + + // -- summary ----------------------------------------------------------- + + /** The summary, one paragraph per line the document wrote. */ + private static void renderSummary(SectionBuilder main, ParagraphSection summary) { + main.addSection("Summary", block -> { + block.spacing(0); + headingWithDash(block, summary.title(), MAIN_HEADING_SPACER, MAIN_DASH_WIDTH); + List paragraphs = lines(summary.body()); + for (int i = 0; i < paragraphs.size(); i++) { + int index = i; + block.addParagraph(p -> p + .name("SummaryPara_" + index) + .text(paragraphs.get(index)) + .textStyle(text(BODY_SIZE, INK, false)) + .lineSpacing(SUMMARY_LINE_SPACING) + .margin(0f, 0f, (float) SUMMARY_LINE_GAP, 0f)); + } + }); + } + + // -- experience -------------------------------------------------------- + + /** + * The roles held, each on a rail: a ringed marker on a grey hairline that + * runs from one entry to the next. The last entry carries no rail, so the + * line stops at the last marker instead of running past it. + */ + private static void renderExperience(SectionBuilder main, EntriesSection experience) { + main.addSection("Experience", block -> { + block.spacing(0); + heading(block, experience.title(), MAIN_HEADING_SPACER); + List entries = experience.entries(); + for (int i = 0; i < entries.size(); i++) { + CvEntry entry = entries.get(i); + boolean last = i == entries.size() - 1; + int index = i; + block.addSection("ExperienceEntry_" + index, body -> { + body.spacing(0); + if (!last) { + body.accentLeft(RULE, RULE_THICKNESS); + } + body.padding(0f, 0f, last ? 0f : (float) ENTRY_GAP, (float) ENTRY_INDENT); + railedLine(body, "Role", index, + titleAndDate("RoleTable_" + index, entry.title(), entry.date(), + ENTRY_WIDTH, ROLE_PERIOD_SHARE)); + body.addParagraph(p -> p + .name("Employer_" + index) + .text(entry.subtitle()) + .textStyle(italic(BODY_SIZE, MUTED)) + .margin(0f, 0f, (float) EMPLOYER_GAP, 0f)); + List highlights = lines(entry.body()); + if (!highlights.isEmpty()) { + body.addList(list -> list + .name("Highlights_" + index) + .items(highlights) + .marker(ListMarker.bullet()) + .textStyle(text(BODY_SIZE, INK, false)) + .itemSpacing(HIGHLIGHT_ITEM_SPACING) + .lineSpacing(HIGHLIGHT_LINE_SPACING)); + } + }); + } + }); + } + + // -- projects ---------------------------------------------------------- + + /** + * The projects grid: a sketch, the project's own three lines, and its + * description across a hairline. + * + *

The mark is an inline run inside a paragraph rather than a block + * icon node: a block icon in a row cell makes the whole row lay its cells + * out vertically.

+ */ + private static void renderProjects(SectionBuilder main, EntriesSection projects) { + main.addSection("SelectedProjects", block -> { + block.spacing(0); + headingWithDash(block, projects.title(), MAIN_HEADING_SPACER, MAIN_DASH_WIDTH); + List entries = projects.entries(); + for (int i = 0; i < entries.size(); i++) { + CvEntry entry = entries.get(i); + boolean last = i == entries.size() - 1; + int index = i; + layeredRow(block, "Project_" + index, 0.0, PROJECT_ROW_GAP, row -> { + row.weights(PROJECT_WEIGHTS[0], PROJECT_WEIGHTS[1], PROJECT_WEIGHTS[2]); + row.addParagraph(p -> { + p.name("ProjIcon_" + index); + if (!entry.icon().isBlank()) { + inlineIcon(p, entry.icon(), TerracottaRailIcons.PROJECT_SIZE); + } + }); + row.addSection("ProjMeta_" + index, meta -> { + meta.spacing(0); + meta.padding(0f, (float) PROJECT_META_PAD_RIGHT, 0f, + (float) PROJECT_META_PAD_LEFT); + meta.addParagraph(p -> { + p.name("ProjTitle_" + index) + .text(entry.title()) + .textStyle(text(ITEM_TITLE_SIZE, INK, true)) + .margin(0f, 0f, 1.0f, 0f); + if (!entry.link().isBlank()) { + p.link(new DocumentLinkOptions(entry.link())); + } + }); + meta.addParagraph(p -> p + .name("ProjSub_" + index) + .text(entry.subtitle()) + .textStyle(italic(DETAIL_SIZE, MUTED)) + .margin(0f, 0f, 1.0f, 0f)); + meta.addParagraph(p -> p + .name("ProjLoc_" + index) + .text(entry.place()) + .textStyle(text(DETAIL_SIZE, INK, false))); + }); + row.addSection("ProjDesc_" + index, description -> { + description.spacing(0); + description.accentLeft(RULE, RULE_THICKNESS); + description.padding(0f, 0f, 0f, (float) PROJECT_DESCRIPTION_PAD_LEFT); + description.addParagraph(p -> p + .name("ProjDescText_" + index) + .text(entry.body()) + .textStyle(text(BODY_SIZE, INK, false)) + .lineSpacing(PROJECT_LINE_SPACING)); + }); + }); + if (!last) { + block.addLine(line -> line + .name("ProjDiv_" + index) + .fill() + .thickness(RULE_THICKNESS) + .color(RULE) + .margin(new DocumentInsets( + PROJECT_DIVIDER_GAP, 0, PROJECT_DIVIDER_GAP, 0))); + } + } + }); + } + + // -- education --------------------------------------------------------- + + /** + * The degrees, on a rail of their own. + * + *

Their rail is terracotta where the roles' is grey, and the block + * stops short of the column: the design closes it with a hairline at + * about seven tenths of the main column, which is what the empty band + * beside it is for.

+ */ + private static void renderEducation(SectionBuilder main, EntriesSection education) { + main.addSection("Education", block -> { + block.spacing(0); + headingWithDash(block, education.title(), MAIN_HEADING_SPACER, MAIN_DASH_WIDTH); + layeredRow(block, "EducationBand", 0.0, 0.0, band -> { + band.weights(EDUCATION_BAND_WEIGHT, 1.0 - EDUCATION_BAND_WEIGHT); + band.addSection("EducationEntries", cell -> { + cell.spacing(0); + cell.accentRight(RULE, RULE_THICKNESS); + cell.padding(0f, (float) EDUCATION_BAND_PAD_RIGHT, 0f, 0f); + List entries = education.entries(); + for (int i = 0; i < entries.size(); i++) { + CvEntry entry = entries.get(i); + boolean last = i == entries.size() - 1; + int index = i; + cell.addSection("EducationEntry_" + index, body -> { + body.spacing(0); + if (!last) { + body.accentLeft(ACCENT, RULE_THICKNESS); + } + body.padding(0f, 0f, last ? 0f : (float) ENTRY_GAP, + (float) ENTRY_INDENT); + railedLine(body, "Edu", index, + titleAndDate("EduTable_" + index, entry.title(), entry.date(), + EDUCATION_ENTRY_WIDTH, EDUCATION_PERIOD_SHARE)); + body.addParagraph(p -> p + .name("Institution_" + index) + .text(entry.subtitle()) + .textStyle(italic(BODY_SIZE, MUTED))); + }); + } + }); + band.addSection("EducationBandRight", empty -> empty.spacing(0)); + }); + }); + } + + // -- shared ------------------------------------------------------------ + + /** A body, one entry per line the document wrote. */ + private static List lines(String body) { + List out = new ArrayList<>(); + for (String line : body.split(String.valueOf((char) 10))) { + if (!line.isBlank()) { + out.add(line.strip()); + } + } + return out; + } + + private static boolean hasBody(ParagraphSection section) { + return section != null && !section.body().isBlank(); + } + + private static boolean hasEntries(EntriesSection section) { + return section != null && !section.entries().isEmpty(); + } +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailStyles.java b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailStyles.java new file mode 100644 index 000000000..83e5a3960 --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailStyles.java @@ -0,0 +1,182 @@ +package com.demcha.compose.document.templates.cv.presets; + +import com.demcha.compose.document.style.DocumentColor; +import com.demcha.compose.document.style.DocumentStroke; +import com.demcha.compose.document.style.DocumentTextDecoration; +import com.demcha.compose.document.style.DocumentTextStyle; +import com.demcha.compose.font.FontName; + +/** + * The measured geometry, palette and type scale of the Terracotta Rail CV. + * + *

Every size here is derived from one body size and every width from the + * page's own, so the sheet is one edit rather than a walk through the + * regions that draw it.

+ */ +final class TerracottaRailStyles { + + private TerracottaRailStyles() { + } + + // -- the two columns -------------------------------------------------- + + /** + * The width every horizontal measure here is a share of: A4's, as the + * design drew it. It is a constant rather than the session's own page, + * because the sheet is a fixed composition — the columns and the bands + * inside them are shares of this number, and a caller who sets another + * page gets the same sheet on it rather than a rescaled one. + */ + static final double PAGE_WIDTH = 595.276; + + static final double SIDEBAR_WEIGHT = 0.308; + static final double MAIN_WEIGHT = 1.0 - SIDEBAR_WEIGHT; + + static final double SIDEBAR_PAD_LEFT = 25.4; + static final double SIDEBAR_PAD_RIGHT = 11.4; + static final double SIDEBAR_PAD_TOP = 20.0; + static final double COLUMN_PAD_BOTTOM = 5.0; + static final double MAIN_PAD_LEFT = 22.0; + static final double MAIN_PAD_RIGHT = 24.0; + static final double MAIN_PAD_TOP = 20.0; + + static final double MAIN_CONTENT_WIDTH = + PAGE_WIDTH * MAIN_WEIGHT - MAIN_PAD_LEFT - MAIN_PAD_RIGHT; + + // -- type ------------------------------------------------------------- + + static final FontName SANS = FontName.LATO; + static final FontName SERIF = FontName.PT_SERIF; + + static final double BODY_SIZE = 8.6; + static final double DETAIL_SIZE = BODY_SIZE * 0.98; + static final double ITEM_TITLE_SIZE = BODY_SIZE * 1.14; + static final double SECTION_HEADING_SIZE = BODY_SIZE * 1.02; + static final double MONOGRAM_SIZE = 36.0; + static final double NAME_SIZE = 28.0; + static final double SUBTITLE_SIZE = 13.0; + + /** + * How much smaller a link is set than the channels above it. A URL is one + * long token that cannot be broken, so it is the line that outgrows this + * sidebar first. + */ + static final double LINK_SCALE = 0.85; + + // -- palette ---------------------------------------------------------- + + static final DocumentColor ACCENT = DocumentColor.rgb(201, 74, 41); + static final DocumentColor INK = DocumentColor.rgb(26, 29, 32); + static final DocumentColor MUTED = DocumentColor.rgb(85, 90, 96); + static final DocumentColor RULE = DocumentColor.rgb(216, 216, 216); + static final DocumentColor PAPER = DocumentColor.WHITE; + + static final DocumentStroke NO_BORDER = DocumentStroke.of(PAPER, 0.0); + + // -- rules, rails and the rhythm between blocks ------------------------ + + static final double RULE_THICKNESS = 0.6; + static final double ACCENT_RULE_THICKNESS = 1.4; + static final double MARKER_DIAMETER = 6.2; + + /** How far an entry sits from the rail its marker rides. */ + static final double ENTRY_INDENT = 13.0; + static final double ENTRY_GAP = 9.0; + + static final double HEADING_TO_BODY_GAP = 9.0; + static final double HEADING_TO_DASH_GAP = 3.5; + static final double SIDEBAR_DASH_WIDTH = 20.0; + static final double MAIN_DASH_WIDTH = 22.0; + + static final double SIDEBAR_DIVIDER_GAP = 8.0; + static final double MAIN_DIVIDER_TOP = 6.0; + static final double MAIN_DIVIDER_BOTTOM = 6.5; + static final double MASTHEAD_DIVIDER_TOP = 4.0; + static final double MASTHEAD_DIVIDER_BOTTOM = 6.0; + + static final double MONOGRAM_RULE_WIDTH = 48.0; + static final double MONOGRAM_TO_RULE_GAP = 8.0; + static final double MONOGRAM_RULE_TO_CONTACT_GAP = 10.0; + static final double NAME_TO_SUBTITLE_GAP = 8.0; + static final double SUBTITLE_TO_RULE_GAP = 5.0; + + static final double CONTACT_ROW_GAP = 4.5; + static final double BULLET_ROW_GAP = 3.0; + static final double INFO_BLOCK_GAP = 7.0; + static final double INFO_LINE_GAP = 0.5; + static final double PROJECT_ROW_GAP = 2.0; + static final double PROJECT_DIVIDER_GAP = 2.0; + static final double SUMMARY_LINE_GAP = 2.5; + static final double SUMMARY_LINE_SPACING = 1.30; + static final double EMPLOYER_GAP = 2.5; + static final double HIGHLIGHT_ITEM_SPACING = 1.2; + static final double HIGHLIGHT_LINE_SPACING = 1.15; + + // -- the bands the entries are laid on --------------------------------- + + /** + * The slack a fixed table needs inside the cell it spans. Without it a + * table exactly as wide as its cell is one rounding step too wide. + */ + static final double TABLE_SLACK = 0.01; + + static final double ENTRY_WIDTH = MAIN_CONTENT_WIDTH - ENTRY_INDENT - TABLE_SLACK; + static final double ROLE_PERIOD_SHARE = 0.30; + static final double EDUCATION_PERIOD_SHARE = 0.34; + + /** Education stops short of the column and closes on a hairline. */ + static final double EDUCATION_BAND_WEIGHT = 0.70; + static final double EDUCATION_BAND_PAD_RIGHT = 8.0; + static final double EDUCATION_ENTRY_WIDTH = + MAIN_CONTENT_WIDTH * EDUCATION_BAND_WEIGHT - EDUCATION_BAND_PAD_RIGHT + - ENTRY_INDENT - TABLE_SLACK; + + static final double[] PROJECT_WEIGHTS = {0.08, 0.36, 0.56}; + static final double PROJECT_META_PAD_RIGHT = 8.0; + static final double PROJECT_META_PAD_LEFT = 4.0; + static final double PROJECT_DESCRIPTION_PAD_LEFT = 10.0; + static final double PROJECT_LINE_SPACING = 1.24; + static final double[] INFO_WEIGHTS = {0.18, 0.82}; + + // -- tracking ---------------------------------------------------------- + + /** + * The gaps a heading is letter-spaced with. A text style carries no + * tracking, so a tracked line is written with a space character between + * the letters, and which space is the whole choice: the sidebar takes a + * hair space (a tenth of an em) because a full one would set ADDITIONAL + * INFORMATION wider than the column and wrap it, and the main column, + * being wider, takes a thin space (a fifth). + */ + static final char SIDEBAR_HEADING_SPACER = '\u200A'; + static final char MAIN_HEADING_SPACER = '\u2009'; + + // -- helpers ------------------------------------------------------------ + + static DocumentTextStyle text(double size, DocumentColor color, boolean bold) { + return DocumentTextStyle.builder() + .fontName(SANS) + .size(size) + .color(color) + .decoration(bold ? DocumentTextDecoration.BOLD : DocumentTextDecoration.DEFAULT) + .build(); + } + + static DocumentTextStyle italic(double size, DocumentColor color) { + return DocumentTextStyle.builder() + .fontName(SANS) + .size(size) + .color(color) + .decoration(DocumentTextDecoration.ITALIC) + .build(); + } + + static DocumentTextStyle serif(double size, DocumentColor color) { + return DocumentTextStyle.builder() + .fontName(SERIF) + .size(size) + .color(color) + .decoration(DocumentTextDecoration.DEFAULT) + .build(); + } +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailWidgets.java b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailWidgets.java new file mode 100644 index 000000000..590883f1a --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/TerracottaRailWidgets.java @@ -0,0 +1,260 @@ +package com.demcha.compose.document.templates.cv.presets; + +import com.demcha.compose.document.dsl.EllipseBuilder; +import com.demcha.compose.document.dsl.ParagraphBuilder; +import com.demcha.compose.document.dsl.RowBuilder; +import com.demcha.compose.document.dsl.SectionBuilder; +import com.demcha.compose.document.dsl.TableBuilder; +import com.demcha.compose.document.node.DocumentNode; +import com.demcha.compose.document.node.InlineImageAlignment; +import com.demcha.compose.document.node.LayerAlign; +import com.demcha.compose.document.node.TextAlign; +import com.demcha.compose.document.style.DocumentColor; +import com.demcha.compose.document.style.DocumentInsets; +import com.demcha.compose.document.style.DocumentStroke; +import com.demcha.compose.document.table.DocumentTableCell; +import com.demcha.compose.document.table.DocumentTableColumn; +import com.demcha.compose.document.table.DocumentTableStyle; +import com.demcha.compose.document.table.DocumentTableTextAnchor; + +import java.util.function.Consumer; + +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.ACCENT; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.ACCENT_RULE_THICKNESS; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.BULLET_ROW_GAP; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.ENTRY_INDENT; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.HEADING_TO_BODY_GAP; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.HEADING_TO_DASH_GAP; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.INK; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.ITEM_TITLE_SIZE; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.MARKER_DIAMETER; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.NO_BORDER; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.PAPER; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.RULE; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.RULE_THICKNESS; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.SECTION_HEADING_SIZE; +import static com.demcha.compose.document.templates.cv.presets.TerracottaRailStyles.text; + +/** + * The idioms this sheet repeats: the tracked heading, the rule between + * blocks, the marker riding a rail, the title-and-date line, and the row a + * column has to wrap to hold. + */ +final class TerracottaRailWidgets { + + private TerracottaRailWidgets() { + } + + // -- headings ---------------------------------------------------------- + + /** + * A letter-spaced heading. + * + *

A text style carries no tracking, so the gap between letters is a + * space character — which one is the whole choice, and the caller makes + * it. The word gap stays clearly wider than the letter gap, or a tracked + * heading reads as one long word.

+ * + * @param text the heading + * @param spacer the space to set between letters + * @return the tracked string + */ + static String tracked(String text, char spacer) { + if (text == null || text.isEmpty()) { + return ""; + } + StringBuilder out = new StringBuilder(text.length() * 2); + for (int index = 0; index < text.length(); index++) { + char letter = text.charAt(index); + if (letter == ' ') { + out.append(spacer).append(' ').append(spacer); + continue; + } + if (index > 0 && text.charAt(index - 1) != ' ') { + out.append(spacer); + } + out.append(letter); + } + return out.toString(); + } + + /** The masthead's own tracking: a full space between letters. */ + static String trackedWide(String text) { + if (text == null || text.isEmpty()) { + return ""; + } + StringBuilder out = new StringBuilder(text.length() * 2); + boolean startOfWord = true; + for (int index = 0; index < text.length(); index++) { + char letter = text.charAt(index); + if (letter == ' ') { + out.append(" "); + startOfWord = true; + continue; + } + if (!startOfWord) { + out.append(' '); + } + out.append(letter); + startOfWord = false; + } + return out.toString(); + } + + /** A heading with nothing under it. */ + static void heading(SectionBuilder block, String title, char spacer) { + block.addParagraph(p -> p + .name("Heading_" + compact(title)) + .text(tracked(title, spacer)) + .textStyle(text(SECTION_HEADING_SIZE, INK, true)) + .margin(0f, 0f, (float) HEADING_TO_BODY_GAP, 0f)); + } + + /** A heading over a short terracotta dash. */ + static void headingWithDash(SectionBuilder block, String title, char spacer, double dashWidth) { + block.addParagraph(p -> p + .name("Heading_" + compact(title)) + .text(tracked(title, spacer)) + .textStyle(text(SECTION_HEADING_SIZE, INK, true)) + .margin(0f, 0f, (float) HEADING_TO_DASH_GAP, 0f)); + block.addLine(line -> line + .name("AccentLine_" + compact(title)) + .horizontal(dashWidth) + .thickness(ACCENT_RULE_THICKNESS) + .color(ACCENT) + .margin(new DocumentInsets( + 0, 0, HEADING_TO_BODY_GAP - HEADING_TO_DASH_GAP, 0))); + } + + /** A node name built from a heading, with the spacing taken out of it. */ + static String compact(String value) { + StringBuilder out = new StringBuilder(value.length()); + for (int index = 0; index < value.length(); index++) { + char letter = value.charAt(index); + if (Character.isLetterOrDigit(letter)) { + out.append(letter); + } + } + return out.toString(); + } + + // -- rules ------------------------------------------------------------- + + /** The hairline that separates two blocks in a column. */ + static void divider(SectionBuilder column, String name, double top, double bottom) { + column.addLine(line -> line + .name("Divider_" + name) + .fill() + .thickness(RULE_THICKNESS) + .color(RULE) + .margin(new DocumentInsets(top, 0, bottom, 0))); + } + + // -- marks ------------------------------------------------------------- + + /** An inline mark, drawn at the size the preset gives its kind. */ + static void inlineIcon(ParagraphBuilder paragraph, String token, double size) { + paragraph.inlineSvgIcon(TerracottaRailIcons.icon(token), size, + InlineImageAlignment.CENTER); + } + + // -- the rail ---------------------------------------------------------- + + /** The marker an entry rides: a terracotta ring with the paper inside. */ + private static DocumentNode marker(String prefix, int index) { + return new EllipseBuilder() + .name(prefix + "Marker_" + index) + .circle(MARKER_DIAMETER) + .fillColor(PAPER) + .stroke(DocumentStroke.of(ACCENT, 1.0)) + .build(); + } + + /** + * An entry's first line, with its marker sitting ON the rail. + * + *

The marker is nudged left by the entry's own indent plus half the + * ring, so the ring's centre lands on the rail rather than beside it. + * Both terms are geometry the sheet already holds, not offsets tuned by + * eye.

+ */ + static void railedLine(SectionBuilder body, String prefix, int index, DocumentNode line) { + body.addLayerStack(stack -> stack + .name(prefix + "Line_" + index) + .layer(line, LayerAlign.TOP_LEFT, 0) + .position(marker(prefix, index), + -(ENTRY_INDENT + MARKER_DIAMETER / 2.0), 0.0, + LayerAlign.TOP_LEFT, 1)); + } + + /** + * A title with its date flush right on the same line. + * + *

A table, not a row: a row cannot nest in a row cell and a table can + * — it spans the cell and its columns lay out. Both cells hold a + * paragraph, because a table inside a row cell draws only leaf + * content.

+ */ + static DocumentNode titleAndDate(String name, String title, String date, + double width, double dateShare) { + double dateColumn = width * dateShare; + return new TableBuilder() + .name(name) + .width(width) + .columns(DocumentTableColumn.fixed(width - dateColumn), + DocumentTableColumn.fixed(dateColumn)) + .defaultCellStyle(DocumentTableStyle.builder() + .padding(DocumentInsets.zero()) + .textAnchor(DocumentTableTextAnchor.BOTTOM_LEFT) + .stroke(NO_BORDER) + .build()) + .rowCells( + DocumentTableCell.node(new ParagraphBuilder() + .name(name + "_Title") + .text(title) + .lineSpacing(0) + .textStyle(text(ITEM_TITLE_SIZE, INK, true)) + .build()), + DocumentTableCell.node(new ParagraphBuilder() + .name(name + "_Period") + .text(date) + .align(TextAlign.RIGHT) + .lineSpacing(0) + .textStyle(text(ITEM_TITLE_SIZE, ACCENT, false)) + .build())) + .build(); + } + + // -- rows -------------------------------------------------------------- + + /** + * A row inside a column. + * + *

A row cannot nest in a row cell on this engine, and both of this + * sheet's columns are cells of the body row — so every horizontal pair + * inside one is wrapped in a layer stack, which can.

+ */ + static void layeredRow(SectionBuilder parent, String name, double marginTop, + double marginBottom, Consumer spec) { + SectionBuilder layer = new SectionBuilder(); + layer.name(name + "Layer"); + layer.spacing(0); + layer.addRow(name, spec); + parent.addLayerStack(stack -> stack + .name(name + "Stack") + .margin(new DocumentInsets(marginTop, 0, marginBottom, 0)) + .layer(layer.build(), LayerAlign.TOP_LEFT, 0)); + } + + /** A bullet line: a mark, a gap, and the item beside it. */ + static void bulletLine(SectionBuilder block, String name, Consumer mark, + String item, DocumentColor color, double size) { + block.addParagraph(p -> { + p.name(name); + mark.accept(p); + p.inlineText(" "); + p.inlineText(item, text(size, color, false)); + p.margin(0f, 0f, (float) BULLET_ROW_GAP, 0f); + }); + } +} diff --git a/templates/src/main/resources/templates/cv/terracotta-rail/icons/badge.svg b/templates/src/main/resources/templates/cv/terracotta-rail/icons/badge.svg new file mode 100644 index 000000000..0d35d8d18 --- /dev/null +++ b/templates/src/main/resources/templates/cv/terracotta-rail/icons/badge.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/src/main/resources/templates/cv/terracotta-rail/icons/building.svg b/templates/src/main/resources/templates/cv/terracotta-rail/icons/building.svg new file mode 100644 index 000000000..9a6de887c --- /dev/null +++ b/templates/src/main/resources/templates/cv/terracotta-rail/icons/building.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/src/main/resources/templates/cv/terracotta-rail/icons/clock.svg b/templates/src/main/resources/templates/cv/terracotta-rail/icons/clock.svg new file mode 100644 index 000000000..f06099851 --- /dev/null +++ b/templates/src/main/resources/templates/cv/terracotta-rail/icons/clock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/src/main/resources/templates/cv/terracotta-rail/icons/email.svg b/templates/src/main/resources/templates/cv/terracotta-rail/icons/email.svg new file mode 100644 index 000000000..817215132 --- /dev/null +++ b/templates/src/main/resources/templates/cv/terracotta-rail/icons/email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/src/main/resources/templates/cv/terracotta-rail/icons/globe.svg b/templates/src/main/resources/templates/cv/terracotta-rail/icons/globe.svg new file mode 100644 index 000000000..4a6528580 --- /dev/null +++ b/templates/src/main/resources/templates/cv/terracotta-rail/icons/globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/src/main/resources/templates/cv/terracotta-rail/icons/hotel.svg b/templates/src/main/resources/templates/cv/terracotta-rail/icons/hotel.svg new file mode 100644 index 000000000..13fb4cd92 --- /dev/null +++ b/templates/src/main/resources/templates/cv/terracotta-rail/icons/hotel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/src/main/resources/templates/cv/terracotta-rail/icons/house.svg b/templates/src/main/resources/templates/cv/terracotta-rail/icons/house.svg new file mode 100644 index 000000000..9c1299801 --- /dev/null +++ b/templates/src/main/resources/templates/cv/terracotta-rail/icons/house.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/src/main/resources/templates/cv/terracotta-rail/icons/linkedin.svg b/templates/src/main/resources/templates/cv/terracotta-rail/icons/linkedin.svg new file mode 100644 index 000000000..d955b83d5 --- /dev/null +++ b/templates/src/main/resources/templates/cv/terracotta-rail/icons/linkedin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/src/main/resources/templates/cv/terracotta-rail/icons/location.svg b/templates/src/main/resources/templates/cv/terracotta-rail/icons/location.svg new file mode 100644 index 000000000..6564329cc --- /dev/null +++ b/templates/src/main/resources/templates/cv/terracotta-rail/icons/location.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/src/main/resources/templates/cv/terracotta-rail/icons/phone.svg b/templates/src/main/resources/templates/cv/terracotta-rail/icons/phone.svg new file mode 100644 index 000000000..b8c11ac2d --- /dev/null +++ b/templates/src/main/resources/templates/cv/terracotta-rail/icons/phone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/src/main/resources/templates/cv/terracotta-rail/icons/square.svg b/templates/src/main/resources/templates/cv/terracotta-rail/icons/square.svg new file mode 100644 index 000000000..ee5989d1e --- /dev/null +++ b/templates/src/main/resources/templates/cv/terracotta-rail/icons/square.svg @@ -0,0 +1 @@ + \ No newline at end of file