diff --git a/CHANGELOG.md b/CHANGELOG.md
index 568c15476..f49987303 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,42 @@ follow semantic versioning; release dates are ISO 8601.
### Public API
+- **A DOCX export stands the first line of a panel, a table's composed cell and a row's column where
+ the page sets it, where nothing was written above the line to raise it into.** Word and LibreOffice
+ stand an exact line's baseline four fifths of the way down it, and a line the page sets higher is
+ moved up into the space written above it; under half a point, a line with no such space was left
+ as low as Word set it. A line opening a cell has none of its own: a panel's padding and a table
+ cell's are the cell's margin, and a row's columns have their space above written above the row's
+ table. By the export's own measure of Word's seat, 250 lines of the corpus stood so, a median
+ 0.22pt low; measured, `ClassicInvoice`'s "TOTAL DUE" stood 0.18pt low in its panel in Word and
+ 0.2pt in LibreOffice. Under half a point, a line opening a cell now takes what its space above
+ cannot give from the top padding of the cell it opens — a panel's, less what its top border takes,
+ the panel's row held as much taller, as Word adds the margin left to the height a row is held at;
+ a table's composed cell's, in a row whose margins even, the cells beside it taking the margin back
+ above their first lines — and a row of columns' first row is lifted out of the space above its
+ table by the most its cells' first lines call for, each line rising by its own and the space under
+ it taking that back, so what follows stays. Not a row the layout moves to a new page, whose space
+ above stays on the page above, a row held to a height, or one whose column opens with a panel or a
+ table, which would rise whole. A paragraph in a table's composed cell, in a row the layout placed,
+ is raised into the space above it as anywhere else: the cell has no placement of its own, but its
+ row is kept on one page; one in a table nested in that cell is not yet.
+ Half a point and more is the position's, as before: taken from the padding, `CobaltRota`'s
+ masthead, whose position LibreOffice moves further than it says, came out 0.5 to 0.7pt lower there.
+ LibreOffice 24.2 counts a row's margins inside the height it is held at, so a panel or a table
+ row held taller than its text — a drawing set where the page puts it — comes out taller there by
+ the raise.
+
+ `ClassicInvoice`'s header, "BILL TO", "FROM" and "TOTAL DUE" moved up 0.24 to 0.36pt in Word and
+ 0.2 to 0.4pt in LibreOffice, `ConsultingInvoice`'s line items 0.24 to 0.36pt and 0.35pt,
+ `ModernProfessional`'s entries 0.24pt and 0.2pt, everything under them where it was. By median,
+ 12 documents moved nearer the page in Word and none further, 10 in LibreOffice on Windows and 9 in
+ LibreOffice 24.2, one further in each: `LumaStudioInvoice`, from 0.12pt to 0.14pt, whose line-items
+ table stands 0.13 to 0.16pt high in LibreOffice at its header's fill and its rules, which its
+ first lines, set low, made up for. In Word, a text cell beside a composed one that rose can stand a
+ step of Word's 0.12pt grid off, either way, its share of the row's margin written as space above
+ it. `ClassicInvoice`'s notes and payment terms still stand 0.2 to 0.26pt low in their rows: their
+ columns are ruled down their left side, panels in their cells, with no padding above their lines.
+
- **A DOCX export stands a table text cell's text where the page sets it by the height of its
lines, where its row's margins leave less than half a point of what it calls for.** Word and
LibreOffice stand an exact line's baseline four fifths of the way down it, and the page sets a
diff --git a/assets/readme/examples/word-export-companion.docx b/assets/readme/examples/word-export-companion.docx
index f4c27f481..fe15fa70a 100644
Binary files a/assets/readme/examples/word-export-companion.docx and b/assets/readme/examples/word-export-companion.docx differ
diff --git a/docs/architecture/backend-capability-matrix.md b/docs/architecture/backend-capability-matrix.md
index 0037a5f4d..b17055745 100644
--- a/docs/architecture/backend-capability-matrix.md
+++ b/docs/architecture/backend-capability-matrix.md
@@ -63,7 +63,7 @@ Payload records live in `core` under
| Capability (payload) | PDF (fixed) | PPTX (fixed) | DOCX (semantic) |
|---|---|---|---|
-| Paragraph — pre-wrapped lines, runs, alignment (`ParagraphFragmentPayload`) | ✅ `PdfParagraphFragmentRenderHandler` | ✅ `PptxParagraphFragmentRenderHandler` (one absolute, wrap-disabled frame per measured line) | ⚠️ semantic paragraphs (`DocxSemanticBackend`) — each run keeps its own style, falling back to the paragraph's when it has none; a centred or right-aligned left-to-right line of its own, of text alone and untracked, that Word sets a point or more wider or narrower at its half-point size has its letters spaced by the difference (`w:spacing`) and its room reckoned from the page's width; a `linkTarget` becomes a `w:hyperlink`, with a relationship for an address or `w:anchor` for one of the document's own anchors, and a run's own link wins over the paragraph's; a paragraph seated off its baseline (`TextVerticalAlign`) has its runs raised or lowered in the line (`w:position`) by the PDF backend's own correction (`ParagraphSeating`), one shift for the paragraph where the page seats each line by its own; Word and LibreOffice stand an exact line's baseline four fifths of the way down it whatever the face, where the page sets it the face's ascent down, matched at a paragraph's middle line: a line of its own Word sets a tenth of a point or more low is moved up into the space written above it and that space owed below it, in the flow and in cells, not in an overlay, a paragraph the layout moves to a new page or breaks over one, nor the space a panel's top border takes above its first line; what that space cannot give, and a line Word sets high, is moved in the same position where the two are half a point or more apart — Spectral's, not Lato's — which LibreOffice moves further by the face's height over its em (not yet a list item's; a table text cell's by its row's margins, see Table rows; a picture among it moves with it in Word and stays on its own baseline in LibreOffice); lines a container stacks over one another tighter than their face each end halfway between their letters and the next line's (Word draws an exact line's text on screen only inside the line; its PDF export does not cut it), and the last layer of a shape container on one page, where its line runs past the foot, ends at the foot or below its letters; letters two lines share are split halfway so the page does not move, and a stack that holds a picture keeps its lines' own heights; a `bulletOffset` of spaces becomes the paragraph's indent (`w:ind` left, hanging or first line, by `indentStrategy`) in the flow and in cells, not yet over the flow, in an overlay's left-and-right pair, as a badge's initials or in a header or footer; one with letters in it is not written, its wrapped lines still set after the spaces that cover it; an auto-sized paragraph's text that takes its style is written at the size the page fits it to, read off the laid-out lines, a run with a style of its own keeping it, on every path that writes a paragraph — at its style's size where the lines do not tell the fitted size (no lines read, lines in sizes that do not say which is the paragraph's, or one paragraph added at more than one place); a paragraph a session reads as markdown — the default, unless `markdown(false)` — is written as the page sets it, read through the page's own parser, one run a piece in the face, family, colour, tracking and size the page's laid-out lines hold (an auto-sized one's read at the size the page fits it to, a heading at its multiple of it), its marks dropped, wherever the lines hold the pieces' letters so; where they are not read, or hold other letters or none (text the parser reads into nothing, which the page sets as nothing), as authored, its marks as letters; a `bookmark(...)` is Word's `HeadingN`, which Word's outline lists by the text of its Word paragraph — an overlay's pair's whole line, one level for both sides — at no level past the ninth. Outside a header or footer, the paragraph's report note (`ParagraphNode`) names each of these where it moves or renames something: the prefix's letters, and the room a path that writes no prefix leaves out where it moves a line; the size an auto-sized paragraph's text is written at, where the size the page fits it to is not measured; the marks of a paragraph the page read as markdown and the file holds as letters, where its laid-out lines hold fewer of them than its text, not measured where its lines are not read; a markdown heading written taller than the line the page sets it in, which Word cuts on screen; an outline title that is not the text Word lists, a level past the ninth that shares it with another, and the right side's entry where the left holds the line's level |
+| Paragraph — pre-wrapped lines, runs, alignment (`ParagraphFragmentPayload`) | ✅ `PdfParagraphFragmentRenderHandler` | ✅ `PptxParagraphFragmentRenderHandler` (one absolute, wrap-disabled frame per measured line) | ⚠️ semantic paragraphs (`DocxSemanticBackend`) — each run keeps its own style, falling back to the paragraph's when it has none; a centred or right-aligned left-to-right line of its own, of text alone and untracked, that Word sets a point or more wider or narrower at its half-point size has its letters spaced by the difference (`w:spacing`) and its room reckoned from the page's width; a `linkTarget` becomes a `w:hyperlink`, with a relationship for an address or `w:anchor` for one of the document's own anchors, and a run's own link wins over the paragraph's; a paragraph seated off its baseline (`TextVerticalAlign`) has its runs raised or lowered in the line (`w:position`) by the PDF backend's own correction (`ParagraphSeating`), one shift for the paragraph where the page seats each line by its own; Word and LibreOffice stand an exact line's baseline four fifths of the way down it whatever the face, where the page sets it the face's ascent down, matched at a paragraph's middle line: a line of its own Word sets a tenth of a point or more low is moved up into the space written above it and that space owed below it, in the flow and in cells, not in an overlay, a paragraph the layout moves to a new page or breaks over one, nor the space a panel's top border takes above its first line; a line opening a cell, under half a point low, takes what that space cannot give from the cell's top padding — a panel's, its row held as much taller, and a table's composed cell's in a row whose margins even — and a row of columns' first row is lifted out of the space above its table by the most its cells' first lines call for, what follows kept in place (not a row the layout moves to a new page, held to a height, or whose column opens with a panel or a table); a paragraph in a composed table cell of a placed row is raised as anywhere, its row kept on one page; what that space cannot give, and a line Word sets high, is moved in the same position where the two are half a point or more apart — Spectral's, not Lato's — which LibreOffice moves further by the face's height over its em (not yet a list item's; a table text cell's by its row's margins, see Table rows; a picture among it moves with it in Word and stays on its own baseline in LibreOffice); lines a container stacks over one another tighter than their face each end halfway between their letters and the next line's (Word draws an exact line's text on screen only inside the line; its PDF export does not cut it), and the last layer of a shape container on one page, where its line runs past the foot, ends at the foot or below its letters; letters two lines share are split halfway so the page does not move, and a stack that holds a picture keeps its lines' own heights; a `bulletOffset` of spaces becomes the paragraph's indent (`w:ind` left, hanging or first line, by `indentStrategy`) in the flow and in cells, not yet over the flow, in an overlay's left-and-right pair, as a badge's initials or in a header or footer; one with letters in it is not written, its wrapped lines still set after the spaces that cover it; an auto-sized paragraph's text that takes its style is written at the size the page fits it to, read off the laid-out lines, a run with a style of its own keeping it, on every path that writes a paragraph — at its style's size where the lines do not tell the fitted size (no lines read, lines in sizes that do not say which is the paragraph's, or one paragraph added at more than one place); a paragraph a session reads as markdown — the default, unless `markdown(false)` — is written as the page sets it, read through the page's own parser, one run a piece in the face, family, colour, tracking and size the page's laid-out lines hold (an auto-sized one's read at the size the page fits it to, a heading at its multiple of it), its marks dropped, wherever the lines hold the pieces' letters so; where they are not read, or hold other letters or none (text the parser reads into nothing, which the page sets as nothing), as authored, its marks as letters; a `bookmark(...)` is Word's `HeadingN`, which Word's outline lists by the text of its Word paragraph — an overlay's pair's whole line, one level for both sides — at no level past the ninth. Outside a header or footer, the paragraph's report note (`ParagraphNode`) names each of these where it moves or renames something: the prefix's letters, and the room a path that writes no prefix leaves out where it moves a line; the size an auto-sized paragraph's text is written at, where the size the page fits it to is not measured; the marks of a paragraph the page read as markdown and the file holds as letters, where its laid-out lines hold fewer of them than its text, not measured where its lines are not read; a markdown heading written taller than the line the page sets it in, which Word cuts on screen; an outline title that is not the text Word lists, a level past the ninth that shares it with another, and the right side's entry where the left holds the line's level |
| List hanging indent — a marker column and a content column (`ListBuilder.hangingIndent(true)`, `markerGap(...)`) | ✅ marker and content emitted as separate `ParagraphFragmentPayload` fragments at the resolved `markerX` / `contentX` | ✅ the same fragments — the fixed-layout pipeline resolves the geometry before either backend sees it | ⚠️ the top level only. `DocxSemanticBackend` exports a list as a real Word list — `numbering.xml`, `w:numPr` per item, the level carrying the marker — or, with rich items or a drawn marker, as paragraphs; content and nesting are unaffected. With the flag, the top level's marker column is the layout's — the marker's width and `markerGap`, the text and its wrapped lines where the page sets them — where the gap covers what Word may set the marker wider: a picture at its written size, its edges included, or text in the page's face (embedded, or a standard one Word sets in the same widths) grown to its half-point size, half a point clear. A Word list's level then indents and hangs by that column; a list of paragraphs writes the marker, a tab to a stop there, and hangs the item there. Word places content at absolute indents and has no relative-advance primitive, so without the layout's measure the gap could not be honoured; a Word list without the flag that the layout placed and that does not nest takes the page's column too, the spaces the page sets its wrapped lines after, its marker followed by a space (`w:suff`) and an item that wraps measured at Word's half-point size; a list that nests items, a list built as a tree of items (laid out flattened), and a marker the gap does not clear keep the stated column (180 twips, plus 120 per nesting level) — except, in a list of paragraphs, a nested rich item with no marker, which stands where the layout set its text, its measure weighed at Word's half-point sizes, where the layout's items are matched to the list's; a list that nests only such items sets its top level at the page's column too. The report counts, on the list, the items that stand at a stated column, a space past their marker or two spaces a level in, and names a centred or right-aligned list written flush left, a lineSpacing not written where the layout's items are not the list's own and one wraps (in a list composed in a table cell, its wrapping not measured), a continuationIndent not written where an item of a markerless list or a tree of items without the flag wraps or its wrapping is not measured, the rows the page draws as a marker alone for blank items of a flagged list, which are not written, and what items the page reads as markdown lose. An item of plain text the page reads as markdown — the default, unless `markdown(false)` — is written as the page sets it, matched to the lines the page laid it out in and read as the page lays it out (a flat item after the marker the page sets before it; a flagged item as its text alone; an item of a list built as a tree of items without the flag after the indent and marker the page reads with it), one run a piece in the face, family, colour, tracking and size those lines hold, Word or the file drawing the marker where it did (Word draws a tree's bullets regular, as the parser sets the marker it reads), the font table shipping the faces the page sets the pieces in; it is written as authored, its marks as letters, where its list's items are not matched one by one to the layout's (no layout, composed in a table cell, an item run onto the next page, a flagged list with a blank item), where its lines hold other letters, where the parser reads a tree's marker as markdown with the item (`*a*`), and where the parser reads it into nothing, and named where the page drops a mark from it or sets none of its text — not where it changes only its face or letters no mark is made of (`1.`); a markdown heading written taller than its item's line is named |
| Inline code/badge chips (`InlineBackground` on text spans) | ✅ `PdfParagraphFragmentRenderHandler` | ✅ `PptxParagraphFragmentRenderHandler` | ⚠️ `DocxSemanticBackend` — the fill becomes the run's own `w:shd`, in a paragraph and in a list item alike, so a badge still reads as a badge. What Word has no way to say is the shape: shading covers the glyph box, so the corner radius and the padding above and below the letters are not in the file, and the export records them. The padding beside the letters is written as the room it takes (`spaceAfterTheLastLetter`): character spacing after the chip's last letter, shaded with it, and after the letter before the chip, unshaded. A chip opening its line or following a picture has no letter before it, so its left padding is not in the file; no space is written after right-to-left letters or after a symbol or emoji. The export records, chip by chip, how each side was written. LibreOffice sets no spacing after a line's last letter, so it does not apply the right padding of a chip that ends a line. A `w:shd` fill is opaque, so a translucent chip is flattened first against what Word paints underneath it — the paragraph's shading, the cell's, or else the colour the page paints under the paragraph, a page background included — so the chip agrees with the file it is in and shows the colour the PDF shows. It stops being translucent, and that is recorded with the rest |
| Inline images (`ParagraphImageSpan`) | ✅ `PdfParagraphFragmentRenderHandler` | ✅ `PptxParagraphFragmentRenderHandler` | ✅ `DocxSemanticBackend.writeInlinePicture` (a picture in its own run where it sits among the words, at its size, inside the run's or the paragraph's link; raised or lowered by `w:position` to where the page's alignment and `baselineOffset` put it, from the layout's measure of the paragraph's first line — in a list, the list's text on a line as tall as the item's own tallest picture; LibreOffice ignores `w:position` on a picture and stands it on the baseline, so a picture the export draws itself (icon, emoji, shape) that the page raises carries the rise as transparent rows and needs no `w:position`, while one the page lowers stands in LibreOffice higher than on the page by as much as the page lowers it — up to the text's descent for a centred icon as tall as its line; the editor clips a picture to an exact line height, so a paragraph holding a picture that leaves its text — past the ascent or the descent, in Word's placement or on the baseline — has its lines written at least the height the picture reaches, grown by the editor rather than clipped, every line of the paragraph since Word has one line height for it, and each as tall as the editor's font makes it — for 14pt text about 2.5pt taller than the page's in LibreOffice; a picture inside its text in both editors keeps the exact height; a paragraph of one line of text in a Word paragraph of its own, with room above for its pictures' reach, keeps an exact line at the page's height of it, the pictures set in it where the page puts them in Word and what their ink reaches past it taken from the gaps around it, and in LibreOffice a lowered picture there stands higher and loses what passes the line's top; its description is the text it stands for or empty) |
diff --git a/docs/recipes/docx-export.md b/docs/recipes/docx-export.md
index c80069bdc..2de9c229a 100644
--- a/docs/recipes/docx-export.md
+++ b/docs/recipes/docx-export.md
@@ -185,7 +185,7 @@ it cannot work out for itself:
| What | Where it lands |
|---|---|
-| Line height | `w:spacing w:lineRule="exact"` on every paragraph, cells and list items included — the height the engine measured, not a multiple Word would measure again against a substituted font. Word has one height for a paragraph's lines: it is the tallest line's text, or, where the page sets lines of different heights further apart than that, the page's mean distance between their baselines, with what a paragraph on one page then falls short of the page owed below it, and what it passes the page by — written at its tallest line, a wrapped line after a large first one, which the page sets at its own height — hung below it, as a line held to its icon is: the space below takes it, and what it cannot take is named (`space above`) (not yet a list item's, or text set over the flow; measured: `CompactMono`'s sidebar, whose skills are two lines a paragraph and each written 0.12pt taller than the page, ended a point low in Word). Lines rounded up to the twip, over enough of them, hang the same way; what rounding takes from a paragraph written at its tallest line is owed below it as well (measured: `ModernInvoice`'s address blocks, six lines of 11.475pt written at 11.45, stood the table under them 0.15pt high in Word and LibreOffice). A tenth of a point or less is left either way: Word sets lines on a grid of its own, 0.12pt apart (measured). In a paragraph of more than one line on one page, the spaces a `bulletOffset` sets before a line, written as an indent, do not count towards that line's text. A paragraph of lines as tall as their text, on one page, opening a table cell takes the gap above its first line from the cell's top padding, no more than steps its lines the page's distance apart — not in a row beside a merged cell or a cell opening with a table, whose margin Word would set the whole row at, nor in a panel. One with no room above it for the gap (opening a column, or a cell padded less) shares the gaps out over all its lines, so its lines stand a little closer than on the page. A paragraph the layout did not measure — one in a composed table cell — is left to the editor, and a line holding a picture above its text is written "at least" that height — except a paragraph of one line of text with room above for its pictures' reach, held exact at the page's height (see "Inline pictures"); in both the paragraph mark is set in the text's size and face, since the mark counts towards the last line's height. A line holding pictures and no text, where they fill the page's line, has its mark and its pictures' runs set at a point instead, so Word makes the line as tall as the pictures and no taller: in the paragraph's own size the mark's depth went under the picture (measured: `SlateOrange`'s skills, a 12.4pt icon beside each label, stood 0.2pt taller each in Word). A smaller picture in a line the page sets at its font's height keeps its mark, and so does a line holding a letter, a break, a tab, a field or a link's text. A paragraph's own line of drawn shapes and no text written at least their reach, which Word grows to the pictures and the transparent frame each keeps around its ink, has that frame taken from the space above the line and above what follows, where it passes the height written: the ink stands where the page draws it, and what follows where the page sets it. Both editors stand the baseline of an exact line four fifths of the way down it whatever the face (measured in Word and LibreOffice on the fifteen faces the templates use and JetBrains Mono, 8 to 36pt), and the page sets it the face's ascent below the line's top, matched at a paragraph's middle line. A line Word sets lower than the page by a tenth of a point or more is moved up into the space written above it, written to the twip, and that space is owed below it, so what follows stays where it was; both editors keep a paragraph's space above as written (by its position alone, Helvetica's lines, which the page seats 0.78 of the way down, stood 0.12 to 0.38pt low in Word). A column's later layer, which measures the space to itself from the page, takes back the raise of the line above it. Not a line pair's shared line, which moved would move its other half; not a line in an overlay — a band, a layer stack, a shape container, a canvas, a text box — whose writers measure what follows them from the page; not a line cut to fit, a container's stacked lines or one held to its pictures; not a paragraph the layout moves to a new page, whose space above Word drops there, or breaks over one; and not into the space above a panel's first line that its top border takes. What that space cannot give, and a line Word sets higher than the page — moved down, it would take its room out of the space below it, not known when it is written — is raised or lowered to the page's baseline by `w:position` where the whole difference is half a point or more, a face with a deep descent, as Spectral's is. A list item's lines are not seated yet; a table text cell's are seated by its row's margins where its row allows (see "Tables"). LibreOffice moves text by `w:position` further than it is raised, by the face's height over its em — Spectral's 1.53 times, Poppins' 1.49, Volkhov's 1.31 (measured) — so a line raised by its position stands where the page sets it in Word only: Spectral's 24pt line, raised 4pt, stood 2.4pt high in LibreOffice. A picture among such text moves with it in Word; LibreOffice keeps a picture on its own baseline, where it stood before. Lines a container stacks tighter than their face — a title's lines a pitch apart — each end halfway between their letters and the next line's, since Word draws an exact line's text on screen only inside the line, and the last layer of a shape container, where its line runs past the foot, ends at the foot or below its letters |
+| Line height | `w:spacing w:lineRule="exact"` on every paragraph, cells and list items included — the height the engine measured, not a multiple Word would measure again against a substituted font. Word has one height for a paragraph's lines: it is the tallest line's text, or, where the page sets lines of different heights further apart than that, the page's mean distance between their baselines, with what a paragraph on one page then falls short of the page owed below it, and what it passes the page by — written at its tallest line, a wrapped line after a large first one, which the page sets at its own height — hung below it, as a line held to its icon is: the space below takes it, and what it cannot take is named (`space above`) (not yet a list item's, or text set over the flow; measured: `CompactMono`'s sidebar, whose skills are two lines a paragraph and each written 0.12pt taller than the page, ended a point low in Word). Lines rounded up to the twip, over enough of them, hang the same way; what rounding takes from a paragraph written at its tallest line is owed below it as well (measured: `ModernInvoice`'s address blocks, six lines of 11.475pt written at 11.45, stood the table under them 0.15pt high in Word and LibreOffice). A tenth of a point or less is left either way: Word sets lines on a grid of its own, 0.12pt apart (measured). In a paragraph of more than one line on one page, the spaces a `bulletOffset` sets before a line, written as an indent, do not count towards that line's text. A paragraph of lines as tall as their text, on one page, opening a table cell takes the gap above its first line from the cell's top padding, no more than steps its lines the page's distance apart — not in a row beside a merged cell or a cell that may open with a table — anything but text, a paragraph, a list, a picture or a spacer: a table, a row of columns, a painted container, a shape — whose margin Word would set the whole row at, nor in a panel. One with no room above it for the gap (opening a column, or a cell padded less) shares the gaps out over all its lines, so its lines stand a little closer than on the page. A paragraph the layout did not measure — one an export without a layout writes — is left to the editor, and a line holding a picture above its text is written "at least" that height — except a paragraph of one line of text with room above for its pictures' reach, held exact at the page's height (see "Inline pictures"); in both the paragraph mark is set in the text's size and face, since the mark counts towards the last line's height. A line holding pictures and no text, where they fill the page's line, has its mark and its pictures' runs set at a point instead, so Word makes the line as tall as the pictures and no taller: in the paragraph's own size the mark's depth went under the picture (measured: `SlateOrange`'s skills, a 12.4pt icon beside each label, stood 0.2pt taller each in Word). A smaller picture in a line the page sets at its font's height keeps its mark, and so does a line holding a letter, a break, a tab, a field or a link's text. A paragraph's own line of drawn shapes and no text written at least their reach, which Word grows to the pictures and the transparent frame each keeps around its ink, has that frame taken from the space above the line and above what follows, where it passes the height written: the ink stands where the page draws it, and what follows where the page sets it. Both editors stand the baseline of an exact line four fifths of the way down it whatever the face (measured in Word and LibreOffice on the fifteen faces the templates use and JetBrains Mono, 8 to 36pt), and the page sets it the face's ascent below the line's top, matched at a paragraph's middle line. A line Word sets lower than the page by a tenth of a point or more is moved up into the space written above it, written to the twip, and that space is owed below it, so what follows stays where it was; both editors keep a paragraph's space above as written (by its position alone, Helvetica's lines, which the page seats 0.78 of the way down, stood 0.12 to 0.38pt low in Word). A column's later layer, which measures the space to itself from the page, takes back the raise of the line above it. Not a line pair's shared line, which moved would move its other half; not a line in an overlay — a band, a layer stack, a shape container, a canvas, a text box — whose writers measure what follows them from the page; not a line cut to fit, a container's stacked lines or one held to its pictures; not a paragraph the layout moves to a new page, whose space above Word drops there, or breaks over one; and not into the space above a panel's first line that its top border takes. A line opening a cell has no space above it of its own: a panel's padding and a table cell's are the cell's margin, and a row's columns have their space above written above the row's table. One Word sets less than half a point low takes what its space above cannot give from the top padding of the cell it opens: a table's composed cell's, in a row whose margins all even, as the gap above a first line does, the cells beside it taking the margin back above their first lines; and a panel's, which the gap does not take, less what its top border takes, the panel's row then held as much taller, as Word adds the margin left to the height a row is held at. A row of columns' first row is lifted out of the space above its table by the most its cells' first lines call for, each line rising by its own and the space under it taking that back, so what follows stays (measured: `ModernProfessional`'s entries, a title beside its dates in a row of their own, moved up 0.24pt in Word and 0.2pt in LibreOffice, `ConsultingInvoice`'s line items, composed cells, 0.24 to 0.36pt and 0.35pt, everything under them where it was). Not a row the layout moves to a new page, whose space above stays on the page above, a row held to a height, or one whose column opens with a panel or a table — a column with a fill or a border is a panel in its cell — which would rise whole; LibreOffice 24.2 counts a row's margins inside the height it is held at, so a panel or a table row held taller than its text — a drawing set where the page puts it — comes out taller there by the raise. A paragraph in a table's composed cell, in a row the layout placed, is raised into the space above it as anywhere else: the cell has no placement of its own, but its row is kept on one page; one in a table nested in that cell is not yet. What that space cannot give, and a line Word sets higher than the page — moved down, it would take its room out of the space below it, not known when it is written — is raised or lowered to the page's baseline by `w:position` where the whole difference is half a point or more, a face with a deep descent, as Spectral's is. A list item's lines are not seated yet; a table text cell's are seated by its row's margins where its row allows (see "Tables"). LibreOffice moves text by `w:position` further than it is raised, by the face's height over its em — Spectral's 1.53 times, Poppins' 1.49, Volkhov's 1.31 (measured) — so a line raised by its position stands where the page sets it in Word only: Spectral's 24pt line, raised 4pt, stood 2.4pt high in LibreOffice. A picture among such text moves with it in Word; LibreOffice keeps a picture on its own baseline, where it stood before. Lines a container stacks tighter than their face — a title's lines a pitch apart — each end halfway between their letters and the next line's, since Word draws an exact line's text on screen only inside the line, and the last layer of a shape container, where its line runs past the foot, ends at the foot or below its letters |
| Table columns | the resolved cell widths as `w:gridCol`, with `w:tblLayout` fixed so Word does not re-fit them |
| Row columns | where the layout placed each child, with the row's gap and padding folded into the neighbouring column and taken back out as that cell's margin — in a painted row's panel the padding is the panel cell's margins instead, and the columns are without it. A column sized to its content (`DocumentRowColumn.auto()`) gets a point more, taken from the row's weight columns so the row keeps its width, for the reason a table's does: the editor's substitute font would wrap it — a table of contents' labels broke mid-word ("Intr" / "o") in LibreOffice without it. A row with no auto column, no weight column, or no stated columns (weights, an even split) is written as placed |
diff --git a/qa/src/test/resources/docx-fidelity/libreoffice-windows-lines.tsv b/qa/src/test/resources/docx-fidelity/libreoffice-windows-lines.tsv
index a8684d00e..c1778c7f6 100644
--- a/qa/src/test/resources/docx-fidelity/libreoffice-windows-lines.tsv
+++ b/qa/src/test/resources/docx-fidelity/libreoffice-windows-lines.tsv
@@ -52,32 +52,32 @@ cv-blue_banner 0:88b226d51fe1 0.01 0.10 pngdiffing,side-by-sidelayout,ba
cv-blue_banner 0:339245d63103 -0.28 0.10 layoutlint(java21,javaparser,spo
cv-blue_banner 0:8c87b84946f3 0.02 0.10 beforetheyshiptoproduction.
cv-boxed_sections 0:8f1010120ed6 0.46 2.20 jordanrivera
-cv-boxed_sections 0:8d7a2cca3060 0.23 0.22 +442055551000|jordan.rivera@exam
-cv-boxed_sections 0:b944906ed84c 0.28 1.49 professionalsummary
+cv-boxed_sections 0:8d7a2cca3060 0.08 0.22 +442055551000|jordan.rivera@exam
+cv-boxed_sections 0:b944906ed84c 0.08 1.49 professionalsummary
cv-boxed_sections 0:80cc87fdc4c4 -0.05 0.10 platformengineerwith10+yearsbuil
cv-boxed_sections 0:bddc0bd093ce -0.05 0.10 systems.specialisedinhigh-throug
cv-boxed_sections 0:95a43d7b3df0 -0.04 0.10 snapshot-testedlibrariesthatscal
-cv-boxed_sections 0:5f94c50dc5bf 0.27 1.32 technicalskills
+cv-boxed_sections 0:5f94c50dc5bf 0.07 1.32 technicalskills
cv-boxed_sections 0:eea537278f83 0.24 0.10 •languages:java21,kotlin,groovy,
cv-boxed_sections 0:9c2cd7231a53 0.25 0.10 •document&print:pdfbox,apachepoi
cv-boxed_sections 0:7bf8639ec5d3 0.25 0.10 •layoutengines:customdsldesign,s
cv-boxed_sections 0:8e66776d28d7 0.26 0.10 •build&infrastructure:maven,grad
cv-boxed_sections 0:1ed4fc7d7768 0.26 0.10 •testing:junit5,assertj,pdfbox-b
cv-boxed_sections 0:26671c309eb9 0.27 0.10 •distribution:mavencentral,sonat
-cv-boxed_sections 0:68bf0109c6f8 0.28 1.23 education
-cv-boxed_sections 0:0ad1957d6bab 0.28 0.10 msccomputerscience
-cv-boxed_sections 0:3fa772117260 0.24 -0.76 2019-2021
+cv-boxed_sections 0:68bf0109c6f8 0.08 1.23 education
+cv-boxed_sections 0:0ad1957d6bab 0.08 0.10 msccomputerscience
+cv-boxed_sections 0:3fa772117260 0.04 -0.76 2019-2021
cv-boxed_sections 0:47ce0218bbea 0.07 0.10 universityofmanchester
cv-boxed_sections 0:2ffe115b06e5 0.08 0.10 distinction.thesis:composablelay
-cv-boxed_sections 0:b6749d0b616b 0.31 0.10 bscsoftwareengineering
-cv-boxed_sections 0:30f9262640a0 0.28 -0.76 2015-2019
+cv-boxed_sections 0:b6749d0b616b 0.11 0.10 bscsoftwareengineering
+cv-boxed_sections 0:30f9262640a0 0.08 -0.76 2015-2019
cv-boxed_sections 0:89ad9656f393 0.10 0.10 imperialcollegelondon
cv-boxed_sections 0:baa173b4a82e 0.12 0.10 first-classhonours.specialisatio
-cv-boxed_sections 0:6d3d5673c39f 0.35 0.10 oraclejavacertification
-cv-boxed_sections 0:d40b22f00acb 0.31 -0.76 2023-2024
+cv-boxed_sections 0:6d3d5673c39f 0.15 0.10 oraclejavacertification
+cv-boxed_sections 0:d40b22f00acb 0.11 -0.76 2023-2024
cv-boxed_sections 0:2669e1f6d55c 0.14 0.10 professionaltrack
cv-boxed_sections 0:3857373829c1 0.15 0.10 java17platformdeep-dive:records,
-cv-boxed_sections 0:2577c0f557b2 0.37 1.18 projects
+cv-boxed_sections 0:2577c0f557b2 0.17 1.18 projects
cv-boxed_sections 0:b2b029995203 0.34 0.10 •graphcompose(java21,pdfbox,mave
cv-boxed_sections 0:67593a76ef70 0.04 0.11 declarativejavapdflayoutengine.s
cv-boxed_sections 0:b9292cbd1454 0.05 0.11 pipelinesforhiringtoolsandbillin
@@ -88,23 +88,23 @@ cv-boxed_sections 0:7488006d7864 0.07 0.11 staticanalyserthatflagsfragileau
cv-boxed_sections 0:c4d0c415b4f8 0.07 0.11 production.
cv-boxed_sections 0:fb1927f88597 0.38 0.10 •chromeforge(java,graphcompose,p
cv-boxed_sections 0:e7e62230eb1f 0.38 0.11 editorial-magazinedocumenttoolki
-cv-boxed_sections 0:c2f296ef30a3 0.40 1.51 professionalexperience
-cv-boxed_sections 0:a76f47480818 0.39 0.10 seniorplatformengineer
-cv-boxed_sections 0:060300b18051 0.36 0.01 2024-present
+cv-boxed_sections 0:c2f296ef30a3 0.20 1.51 professionalexperience
+cv-boxed_sections 0:a76f47480818 0.19 0.10 seniorplatformengineer
+cv-boxed_sections 0:060300b18051 0.16 0.01 2024-present
cv-boxed_sections 0:f890faef907f 0.18 0.10 northwindsystems
cv-boxed_sections 1:49faf14f1f56 -0.13 0.10 ledthereusabledocument-generatio
cv-boxed_sections 1:6bd3f168e89e -0.13 0.10 maintenancetimeby70%byretiringpe
-cv-boxed_sections 1:daf65306b3b6 0.20 0.10 softwareengineer
-cv-boxed_sections 1:e7cc1822c6dc 0.17 -0.76 2021-2024
+cv-boxed_sections 1:daf65306b3b6 0.00 0.10 softwareengineer
+cv-boxed_sections 1:e7cc1822c6dc -0.03 -0.76 2021-2024
cv-boxed_sections 1:998c1a985022 -0.01 0.10 brightleaflabs
cv-boxed_sections 1:e55664011cda -0.09 0.10 builtbackendservicesandproductio
cv-boxed_sections 1:e80236b6d2b1 -0.09 0.10 itexttoacustomlayoutengine,elimi
-cv-boxed_sections 1:41bb54fbae8d 0.24 0.10 backendengineer
-cv-boxed_sections 1:3fa772117260 0.21 -0.76 2019-2021
+cv-boxed_sections 1:41bb54fbae8d 0.04 0.10 backendengineer
+cv-boxed_sections 1:3fa772117260 0.01 -0.76 2019-2021
cv-boxed_sections 1:ef148f221e31 0.03 0.10 helixprintco
cv-boxed_sections 1:9d31a6bfbc69 -0.05 0.10 maintainedahigh-volumeinvoice-pr
cv-boxed_sections 1:03af8a628309 -0.05 0.10 change.
-cv-boxed_sections 1:676dfdd56ad2 0.27 1.49 additionalinformation
+cv-boxed_sections 1:676dfdd56ad2 0.07 1.49 additionalinformation
cv-boxed_sections 1:f20997652453 0.04 0.10 languages:english(fluent),german
cv-boxed_sections 1:ec9d3622395e 0.04 0.10 workeligibility:eligibletoworkin
cv-boxed_sections 1:dd20ae01c3cf 0.05 0.10 opensource:maintainerofgraphcomp
@@ -250,7 +250,7 @@ cv-charcoal_gold 0:3def82282260 0.10 -0.71 technicaltools
cv-charcoal_gold 0:eb04bd42c7fb 0.16 -0.94 microsoft365|jira|confluence|asa
cv-classic_serif 0:8f1010120ed6 -0.15 2.65 jordanrivera
cv-classic_serif 0:8d7a2cca3060 -0.01 -0.42 +442055551000|jordan.rivera@exam
-cv-classic_serif 0:3c69d6bb4892 0.24 2.27 professionalprofile
+cv-classic_serif 0:3c69d6bb4892 0.04 2.27 professionalprofile
cv-classic_serif 0:32c1cf49a2fe 0.19 0.10 skills
cv-classic_serif 0:873a24d153c8 0.21 0.10 languages:java21,kotlin,groovy,p
cv-classic_serif 0:05e907ef2b18 0.19 0.10 document&print:pdfbox,apachepoi(
@@ -259,19 +259,19 @@ cv-classic_serif 0:1cd141fef347 0.14 0.10 build&infrastructure:maven,gradl
cv-classic_serif 0:181ddda7f959 0.11 0.10 testing:junit5,assertj,pdfbox-ba
cv-classic_serif 0:c40c656d9558 0.09 0.10 distribution:mavencentral,sonaty
cv-classic_serif 0:53e5e7c5a884 0.05 0.10 experience
-cv-classic_serif 0:a76f47480818 0.26 0.10 seniorplatformengineer
-cv-classic_serif 0:060300b18051 0.23 0.31 2024-present
+cv-classic_serif 0:a76f47480818 0.06 0.10 seniorplatformengineer
+cv-classic_serif 0:060300b18051 0.03 0.31 2024-present
cv-classic_serif 0:f890faef907f 0.04 0.10 northwindsystems
cv-classic_serif 0:49faf14f1f56 0.01 0.10 ledthereusabledocument-generatio
cv-classic_serif 0:6bd3f168e89e 0.00 0.10 maintenancetimeby70%byretiringpe
-cv-classic_serif 0:daf65306b3b6 0.28 0.10 softwareengineer
-cv-classic_serif 0:e7cc1822c6dc 0.25 1.12 2021-2024
+cv-classic_serif 0:daf65306b3b6 0.08 0.10 softwareengineer
+cv-classic_serif 0:e7cc1822c6dc 0.05 1.12 2021-2024
cv-classic_serif 0:998c1a985022 0.06 0.10 brightleaflabs
cv-classic_serif 0:e55664011cda 0.03 0.10 builtbackendservicesandproductio
cv-classic_serif 0:e80236b6d2b1 0.02 0.10 itexttoacustomlayoutengine,elimi
-cv-classic_serif 0:41bb54fbae8d 0.29 0.10 backendengineer
-cv-classic_serif 0:3fa772117260 0.26 1.12 2019-2021
-cv-classic_serif 0:3fa772117260#1 0.28 1.12 2019-2021
+cv-classic_serif 0:41bb54fbae8d 0.09 0.10 backendengineer
+cv-classic_serif 0:3fa772117260 0.06 1.12 2019-2021
+cv-classic_serif 0:3fa772117260#1 0.08 1.12 2019-2021
cv-classic_serif 0:ef148f221e31 0.07 0.10 helixprintco
cv-classic_serif 0:9d31a6bfbc69 0.04 0.10 maintainedahigh-volumeinvoice-pr
cv-classic_serif 0:03af8a628309 0.03 0.10 change.
@@ -286,15 +286,15 @@ cv-classic_serif 0:dc31b6a18325 0.08 0.10 staticanalyserthatflagsfragileau
cv-classic_serif 0:ee180ea1e0a5 0.10 0.10 chromeforge(java,graphcompose,pa
cv-classic_serif 0:e7e62230eb1f 0.08 0.10 editorial-magazinedocumenttoolki
cv-classic_serif 0:68bf0109c6f8 0.10 0.10 education
-cv-classic_serif 0:0ad1957d6bab 0.31 0.10 msccomputerscience
+cv-classic_serif 0:0ad1957d6bab 0.11 0.10 msccomputerscience
cv-classic_serif 0:47ce0218bbea 0.09 0.10 universityofmanchester
cv-classic_serif 0:2ffe115b06e5 0.11 0.10 distinction.thesis:composablelay
-cv-classic_serif 0:b6749d0b616b 0.33 0.10 bscsoftwareengineering
-cv-classic_serif 0:30f9262640a0 0.30 1.12 2015-2019
+cv-classic_serif 0:b6749d0b616b 0.13 0.10 bscsoftwareengineering
+cv-classic_serif 0:30f9262640a0 0.10 1.12 2015-2019
cv-classic_serif 1:89ad9656f393 0.16 0.10 imperialcollegelondon
cv-classic_serif 1:baa173b4a82e -0.02 0.10 first-classhonours.specialisatio
-cv-classic_serif 1:6d3d5673c39f 0.20 0.10 oraclejavacertification
-cv-classic_serif 1:d40b22f00acb 0.17 1.12 2023-2024
+cv-classic_serif 1:6d3d5673c39f 0.00 0.10 oraclejavacertification
+cv-classic_serif 1:d40b22f00acb -0.03 1.12 2023-2024
cv-classic_serif 1:2669e1f6d55c -0.02 0.10 professionaltrack
cv-classic_serif 1:3857373829c1 0.00 0.10 java17platformdeep-dive:records,
cv-classic_serif 1:7b476727faf3 0.03 0.10 additional
@@ -302,7 +302,7 @@ cv-classic_serif 1:f20997652453 0.04 0.10 languages:english(fluent),german
cv-classic_serif 1:ec9d3622395e 0.02 0.10 workeligibility:eligibletoworkin
cv-classic_serif 1:dd20ae01c3cf -0.01 0.10 opensource:maintainerofgraphcomp
cv-classic_serif 1:33c35e9d236d -0.03 0.10 speaking:jvmsummit2024,devoxxuk2
-cv-compact_mono 0:8f1010120ed6 0.31 0.10 jordanrivera
+cv-compact_mono 0:8f1010120ed6 -0.04 0.10 jordanrivera
cv-compact_mono 0:f9e4560bd641 -0.24 0.10 london,uk/+442055551000/jordan.r
cv-compact_mono 0:32c1cf49a2fe 0.14 0.10 skills
cv-compact_mono 0:551282493299 -0.11 0.10 languagesjava21,kotlin,groovy,py
@@ -644,32 +644,32 @@ cv-midnight_navy 0:86e529fac99d -0.07 0.65 hubspotcontentmarketingcertified
cv-midnight_navy 0:200b36afcfde -0.09 0.09 hubspotacademy
cv-midnight_navy 0:1bea20e1df19 -0.11 0.09 2021
cv-minimal_underlined 0:8f1010120ed6 0.46 2.20 jordanrivera
-cv-minimal_underlined 0:8d7a2cca3060 0.18 0.22 +442055551000|jordan.rivera@exam
-cv-minimal_underlined 0:b944906ed84c 0.24 0.10 professionalsummary
+cv-minimal_underlined 0:8d7a2cca3060 0.03 0.22 +442055551000|jordan.rivera@exam
+cv-minimal_underlined 0:b944906ed84c 0.04 0.10 professionalsummary
cv-minimal_underlined 0:80cc87fdc4c4 -0.02 0.10 platformengineerwith10+yearsbuil
cv-minimal_underlined 0:bddc0bd093ce -0.02 0.10 systems.specialisedinhigh-throug
cv-minimal_underlined 0:95a43d7b3df0 -0.01 0.10 snapshot-testedlibrariesthatscal
-cv-minimal_underlined 0:5f94c50dc5bf 0.32 0.10 technicalskills
+cv-minimal_underlined 0:5f94c50dc5bf 0.12 0.10 technicalskills
cv-minimal_underlined 0:eea537278f83 0.35 0.10 •languages:java21,kotlin,groovy,
cv-minimal_underlined 0:9c2cd7231a53 0.36 0.10 •document&print:pdfbox,apachepoi
cv-minimal_underlined 0:7bf8639ec5d3 0.36 0.10 •layoutengines:customdsldesign,s
cv-minimal_underlined 0:8e66776d28d7 0.37 0.10 •build&infrastructure:maven,grad
cv-minimal_underlined 0:1ed4fc7d7768 0.37 0.10 •testing:junit5,assertj,pdfbox-b
cv-minimal_underlined 0:26671c309eb9 0.38 0.10 •distribution:mavencentral,sonat
-cv-minimal_underlined 0:68bf0109c6f8 0.41 0.10 education
-cv-minimal_underlined 0:0ad1957d6bab 0.47 0.10 msccomputerscience
-cv-minimal_underlined 0:3fa772117260 0.43 -0.76 2019-2021
+cv-minimal_underlined 0:68bf0109c6f8 0.21 0.10 education
+cv-minimal_underlined 0:0ad1957d6bab 0.27 0.10 msccomputerscience
+cv-minimal_underlined 0:3fa772117260 0.23 -0.76 2019-2021
cv-minimal_underlined 0:47ce0218bbea 0.26 0.10 universityofmanchester
cv-minimal_underlined 0:2ffe115b06e5 0.27 0.10 distinction.thesis:composablelay
-cv-minimal_underlined 0:b6749d0b616b 0.50 0.10 bscsoftwareengineering
-cv-minimal_underlined 0:30f9262640a0 0.47 -0.76 2015-2019
+cv-minimal_underlined 0:b6749d0b616b 0.30 0.10 bscsoftwareengineering
+cv-minimal_underlined 0:30f9262640a0 0.27 -0.76 2015-2019
cv-minimal_underlined 0:89ad9656f393 0.29 0.10 imperialcollegelondon
cv-minimal_underlined 0:baa173b4a82e 0.31 0.10 first-classhonours.specialisatio
-cv-minimal_underlined 0:6d3d5673c39f 0.54 0.10 oraclejavacertification
-cv-minimal_underlined 0:d40b22f00acb 0.50 -0.76 2023-2024
+cv-minimal_underlined 0:6d3d5673c39f 0.34 0.10 oraclejavacertification
+cv-minimal_underlined 0:d40b22f00acb 0.30 -0.76 2023-2024
cv-minimal_underlined 0:2669e1f6d55c 0.33 0.10 professionaltrack
cv-minimal_underlined 0:3857373829c1 0.34 0.10 java17platformdeep-dive:records,
-cv-minimal_underlined 0:2577c0f557b2 0.57 0.10 projects
+cv-minimal_underlined 0:2577c0f557b2 0.37 0.10 projects
cv-minimal_underlined 0:b2b029995203 0.61 0.10 •graphcompose(java21,pdfbox,mave
cv-minimal_underlined 0:67593a76ef70 0.31 0.11 declarativejavapdflayoutengine.s
cv-minimal_underlined 0:b9292cbd1454 0.32 0.11 pipelinesforhiringtoolsandbillin
@@ -681,23 +681,23 @@ cv-minimal_underlined 0:7488006d7864 0.34 0.11 staticanalyserthatflagsfragileau
cv-minimal_underlined 0:c4d0c415b4f8 0.35 0.11 production.
cv-minimal_underlined 0:fb1927f88597 0.65 0.10 •chromeforge(java,graphcompose,p
cv-minimal_underlined 0:e7e62230eb1f 0.66 0.11 editorial-magazinedocumenttoolki
-cv-minimal_underlined 0:c2f296ef30a3 0.69 0.10 professionalexperience
-cv-minimal_underlined 0:a76f47480818 0.75 0.10 seniorplatformengineer
-cv-minimal_underlined 0:060300b18051 0.71 0.01 2024-present
+cv-minimal_underlined 0:c2f296ef30a3 0.49 0.10 professionalexperience
+cv-minimal_underlined 0:a76f47480818 0.55 0.10 seniorplatformengineer
+cv-minimal_underlined 0:060300b18051 0.51 0.01 2024-present
cv-minimal_underlined 0:f890faef907f 0.54 0.10 northwindsystems
cv-minimal_underlined 1:49faf14f1f56 -0.13 0.10 ledthereusabledocument-generatio
cv-minimal_underlined 1:6bd3f168e89e -0.13 0.10 maintenancetimeby70%byretiringpe
-cv-minimal_underlined 1:daf65306b3b6 0.20 0.10 softwareengineer
-cv-minimal_underlined 1:e7cc1822c6dc 0.17 -0.76 2021-2024
+cv-minimal_underlined 1:daf65306b3b6 0.00 0.10 softwareengineer
+cv-minimal_underlined 1:e7cc1822c6dc -0.03 -0.76 2021-2024
cv-minimal_underlined 1:998c1a985022 -0.01 0.10 brightleaflabs
cv-minimal_underlined 1:e55664011cda -0.09 0.10 builtbackendservicesandproductio
cv-minimal_underlined 1:e80236b6d2b1 -0.09 0.10 itexttoacustomlayoutengine,elimi
-cv-minimal_underlined 1:41bb54fbae8d 0.24 0.10 backendengineer
-cv-minimal_underlined 1:3fa772117260 0.21 -0.76 2019-2021
+cv-minimal_underlined 1:41bb54fbae8d 0.04 0.10 backendengineer
+cv-minimal_underlined 1:3fa772117260 0.01 -0.76 2019-2021
cv-minimal_underlined 1:ef148f221e31 0.03 0.10 helixprintco
cv-minimal_underlined 1:9d31a6bfbc69 -0.05 0.10 maintainedahigh-volumeinvoice-pr
cv-minimal_underlined 1:03af8a628309 -0.05 0.10 change.
-cv-minimal_underlined 1:676dfdd56ad2 0.28 0.10 additionalinformation
+cv-minimal_underlined 1:676dfdd56ad2 0.08 0.10 additionalinformation
cv-minimal_underlined 1:f20997652453 0.12 0.10 languages:english(fluent),german
cv-minimal_underlined 1:ec9d3622395e 0.12 0.10 workeligibility:eligibletoworkin
cv-minimal_underlined 1:dd20ae01c3cf 0.13 0.10 opensource:maintainerofgraphcomp
@@ -774,17 +774,17 @@ cv-modern_professional 0:8e66776d28d7 0.28 0.10 •build&infrastructure:maven,gr
cv-modern_professional 0:1ed4fc7d7768 0.28 0.10 •testing:junit5,assertj,pdfbox-b
cv-modern_professional 0:26671c309eb9 0.28 0.10 •distribution:mavencentral,sonat
cv-modern_professional 0:68bf0109c6f8 0.02 0.10 education
-cv-modern_professional 0:0ad1957d6bab 0.28 0.10 msccomputerscience
-cv-modern_professional 0:3fa772117260 0.29 0.18 2019-2021
-cv-modern_professional 0:3fa772117260#1 0.30 0.18 2019-2021
+cv-modern_professional 0:0ad1957d6bab 0.08 0.10 msccomputerscience
+cv-modern_professional 0:3fa772117260 0.09 0.18 2019-2021
+cv-modern_professional 0:3fa772117260#1 0.10 0.18 2019-2021
cv-modern_professional 0:47ce0218bbea 0.03 0.10 universityofmanchester
cv-modern_professional 0:2ffe115b06e5 0.09 0.10 distinction.thesis:composablelay
-cv-modern_professional 0:b6749d0b616b 0.28 0.10 bscsoftwareengineering
-cv-modern_professional 0:30f9262640a0 0.29 0.18 2015-2019
+cv-modern_professional 0:b6749d0b616b 0.08 0.10 bscsoftwareengineering
+cv-modern_professional 0:30f9262640a0 0.09 0.18 2015-2019
cv-modern_professional 0:89ad9656f393 0.03 0.10 imperialcollegelondon
cv-modern_professional 0:baa173b4a82e 0.09 0.10 first-classhonours.specialisatio
-cv-modern_professional 0:6d3d5673c39f 0.28 0.10 oraclejavacertification
-cv-modern_professional 0:d40b22f00acb 0.29 0.18 2023-2024
+cv-modern_professional 0:6d3d5673c39f 0.08 0.10 oraclejavacertification
+cv-modern_professional 0:d40b22f00acb 0.09 0.18 2023-2024
cv-modern_professional 0:2669e1f6d55c 0.03 0.10 professionaltrack
cv-modern_professional 0:3857373829c1 0.09 0.10 java17platformdeep-dive:records,
cv-modern_professional 0:2577c0f557b2 0.02 0.10 projects
@@ -801,17 +801,17 @@ cv-modern_professional 0:fb1927f88597 0.29 0.10 •chromeforge(java,graphcompose
cv-modern_professional 0:cda7db6c6ea6 -0.01 0.10 editorial-magazinedocumenttoolki
cv-modern_professional 0:fe63fe18585a -0.01 0.10 callouts.
cv-modern_professional 0:c2f296ef30a3 0.03 0.10 professionalexperience
-cv-modern_professional 0:a76f47480818 0.29 0.10 seniorplatformengineer
-cv-modern_professional 0:060300b18051 0.30 0.20 2024-present
+cv-modern_professional 0:a76f47480818 0.09 0.10 seniorplatformengineer
+cv-modern_professional 0:060300b18051 0.10 0.20 2024-present
cv-modern_professional 0:f890faef907f 0.04 0.10 northwindsystems
cv-modern_professional 0:a6525dacbac7 0.00 0.10 ledthereusabledocument-generatio
cv-modern_professional 0:15e3905f4890 0.00 0.10 reducedtemplatemaintenancetimeby
-cv-modern_professional 0:daf65306b3b6 0.29 0.10 softwareengineer
-cv-modern_professional 0:e7cc1822c6dc 0.30 0.18 2021-2024
+cv-modern_professional 0:daf65306b3b6 0.09 0.10 softwareengineer
+cv-modern_professional 0:e7cc1822c6dc 0.10 0.18 2021-2024
cv-modern_professional 0:998c1a985022 0.04 0.10 brightleaflabs
cv-modern_professional 0:e86691b0219f 0.00 0.10 builtbackendservicesandproductio
cv-modern_professional 0:4ec57434564a 0.00 0.10 migrationfromitexttoacustomlayou
-cv-modern_professional 0:41bb54fbae8d 0.29 0.10 backendengineer
+cv-modern_professional 0:41bb54fbae8d 0.09 0.10 backendengineer
cv-modern_professional 0:ef148f221e31 0.04 0.10 helixprintco
cv-modern_professional 0:a32c7f2401d9 0.00 0.10 maintainedahigh-volumeinvoice-pr
cv-modern_professional 0:7068c1d7034b 0.00 0.10 everytemplatechange.
@@ -1704,23 +1704,23 @@ cv-violet_grid 0:9c9b13446cd9 -1.54 0.02 spanish
cv-violet_grid 0:e35242c809c8 -1.51 0.02 portuguese
cv-violet_grid 0:c5d1de4964d6 -1.51 -0.03 conversational
cv-violet_grid 0:1de4fede4f63 -1.26 -0.17 idesignwithempathy,iteratewithpu
-invoice-classic 0:c26c22b94338 0.49 0.10 graphcomposestudio
+invoice-classic 0:c26c22b94338 0.09 0.10 graphcomposestudio
invoice-classic 0:c26c22b94338#1 0.10 0.06 graphcomposestudio
invoice-classic 0:2a08ce5567fb 0.15 0.10 18layoutstreet
invoice-classic 0:2a08ce5567fb#1 0.03 0.06 18layoutstreet
invoice-classic 0:52d6e3de4fa0 0.10 0.06 invoice
invoice-classic 0:38e9951985e4 0.12 0.06 gc-2026-041
invoice-classic 0:20fe884effee 0.12 0.06 issued02apr2026
-invoice-classic 0:57a66d21eb1b 0.30 0.10 totaldue
+invoice-classic 0:57a66d21eb1b 0.10 0.10 totaldue
invoice-classic 0:30d85a94548c 0.07 0.10 invoicegc-2026-041issued02apr202
-invoice-classic 0:aeba3a7b3598 0.33 0.10 billto
+invoice-classic 0:aeba3a7b3598 0.13 0.10 billto
invoice-classic 0:f890faef907f 0.10 0.10 northwindsystems
invoice-classic 0:1b405eb431ca 0.03 0.10 attn:financeteam
invoice-classic 0:91eefd794f79 0.00 0.10 410marketavenue
invoice-classic 0:00a97da4e243 -0.02 0.10 manchester,uk
invoice-classic 0:62fcfa8745fc -0.05 0.10 ap@northwind.example
invoice-classic 0:2081a41a7764 -0.07 0.10 +441615552200
-invoice-classic 0:75857a458999 0.33 0.06 from
+invoice-classic 0:75857a458999 0.13 0.06 from
invoice-classic 0:fbeea547d99e 0.00 0.06 london,uk
invoice-classic 0:faf1569a98e9 -0.02 0.06 ec1a4gc
invoice-classic 0:befc6e9b5c24 -0.05 0.06 billing@graphcompose.dev
@@ -1760,23 +1760,23 @@ invoice-classic 0:8822ea375315 0.27 0.09 remittancedetails.
invoice-classic 0:1a7b5c840e25 0.27 0.06 •latepaymentsmaydelayadditional
invoice-classic 0:1631a06d245f 0.27 0.09 templatecustomizationwork.
invoice-classic 0:e3337beaa171 0.05 0.10 thankyouforchoosinggraphcomposef
-invoice-classic_long 0:c26c22b94338 0.49 0.10 graphcomposestudio
+invoice-classic_long 0:c26c22b94338 0.09 0.10 graphcomposestudio
invoice-classic_long 0:c26c22b94338#1 0.10 0.06 graphcomposestudio
invoice-classic_long 0:2a08ce5567fb 0.15 0.10 18layoutstreet
invoice-classic_long 0:2a08ce5567fb#1 0.03 0.06 18layoutstreet
invoice-classic_long 0:52d6e3de4fa0 0.10 0.06 invoice
invoice-classic_long 0:3594d2085950 0.12 0.06 gc-2026-042
invoice-classic_long 0:25851a973edd 0.12 0.06 issued04may2026
-invoice-classic_long 0:57a66d21eb1b 0.30 0.10 totaldue
+invoice-classic_long 0:57a66d21eb1b 0.10 0.10 totaldue
invoice-classic_long 0:9eea1e05ff47 0.07 0.10 invoicegc-2026-042issued04may202
-invoice-classic_long 0:aeba3a7b3598 0.33 0.10 billto
+invoice-classic_long 0:aeba3a7b3598 0.13 0.10 billto
invoice-classic_long 0:f890faef907f 0.10 0.10 northwindsystems
invoice-classic_long 0:1b405eb431ca 0.03 0.10 attn:financeteam
invoice-classic_long 0:91eefd794f79 0.00 0.10 410marketavenue
invoice-classic_long 0:00a97da4e243 -0.02 0.10 manchester,uk
invoice-classic_long 0:62fcfa8745fc -0.05 0.10 ap@northwind.example
invoice-classic_long 0:2081a41a7764 -0.07 0.10 +441615552200
-invoice-classic_long 0:75857a458999 0.33 0.06 from
+invoice-classic_long 0:75857a458999 0.13 0.06 from
invoice-classic_long 0:fbeea547d99e 0.00 0.06 london,uk
invoice-classic_long 0:faf1569a98e9 -0.02 0.06 ec1a4gc
invoice-classic_long 0:befc6e9b5c24 -0.05 0.06 billing@graphcompose.dev
@@ -1967,32 +1967,32 @@ invoice-consulting 0:4e9682fa850e 0.12 -0.13 hrs
invoice-consulting 0:4e9682fa850e#1 0.18 -0.13 hrs
invoice-consulting 0:aa92f0e23a97 0.11 0.18 250.00
invoice-consulting 0:e48d9b7a2993 0.11 0.31 2,500.00
-invoice-consulting 0:1bcfde966d94 0.59 -0.21 strategicconsultation
-invoice-consulting 0:fd3ca268f319 0.62 -0.21 leadershipalignmentworkshops
+invoice-consulting 0:1bcfde966d94 0.24 -0.21 strategicconsultation
+invoice-consulting 0:fd3ca268f319 0.27 -0.21 leadershipalignmentworkshops
invoice-consulting 0:8d93e0c47a8c 0.13 0.16 1–15may2025
invoice-consulting 0:cf9dcf6da8a8 0.13 -0.07 1.00
invoice-consulting 0:cf9dcf6da8a8#1 0.15 -0.07 1.00
invoice-consulting 0:cf9dcf6da8a8#2 0.19 -0.07 1.00
invoice-consulting 0:97e47b250054 0.13 0.27 3,500.00
invoice-consulting 0:97e47b250054#1 0.13 0.32 3,500.00
-invoice-consulting 0:5581aef375ff 0.61 -0.21 market&competitiveanalysis
-invoice-consulting 0:957080ea09d9 0.64 -0.21 researchandanalysisreport
+invoice-consulting 0:5581aef375ff 0.26 -0.21 market&competitiveanalysis
+invoice-consulting 0:957080ea09d9 0.29 -0.21 researchandanalysisreport
invoice-consulting 0:47102c31f226 0.15 0.19 5–20may2025
invoice-consulting 0:ec6305055be9 0.15 0.25 4,800.00
invoice-consulting 0:ec6305055be9#1 0.15 0.29 4,800.00
-invoice-consulting 0:53dea97cf116 0.63 -0.21 digitalroadmapdevelopment
-invoice-consulting 0:acf357e68297 0.66 -0.21 strategyandroadmapcreation
+invoice-consulting 0:53dea97cf116 0.28 -0.21 digitalroadmapdevelopment
+invoice-consulting 0:acf357e68297 0.31 -0.21 strategyandroadmapcreation
invoice-consulting 0:c947fb16eab2 0.17 0.21 15–22may2025
invoice-consulting 0:017144e2271f 0.17 -0.08 6.00
invoice-consulting 0:be6012a47af0 0.17 0.18 220.00
invoice-consulting 0:172c0a785bc7 0.17 0.27 1,320.00
-invoice-consulting 0:fe04037aa850 0.65 -0.21 stakeholderreviewsessions
-invoice-consulting 0:4658a1bff292 0.68 -0.21 facilitationanddocumentation
+invoice-consulting 0:fe04037aa850 0.30 -0.21 stakeholderreviewsessions
+invoice-consulting 0:4658a1bff292 0.33 -0.21 facilitationanddocumentation
invoice-consulting 0:86f73207c794 0.19 0.23 20–25may2025
invoice-consulting 0:55907ef405f6 0.19 0.22 1,880.00
invoice-consulting 0:55907ef405f6#1 0.19 0.27 1,880.00
-invoice-consulting 0:f2e12ad6cc9f 0.67 -0.21 presentation&finalreport
-invoice-consulting 0:50de6dc61b80 0.70 -0.21 executivepresentationanddelivery
+invoice-consulting 0:f2e12ad6cc9f 0.32 -0.21 presentation&finalreport
+invoice-consulting 0:50de6dc61b80 0.35 -0.21 executivepresentationanddelivery
invoice-consulting 0:d6577e95efba -0.11 0.12 subtotal
invoice-consulting 0:6311b1798398 0.23 0.63 14,000.00
invoice-consulting 0:e370855bde0c -0.11 0.12 gst(10%)
@@ -2070,12 +2070,12 @@ invoice-consulting_long 0:aa92f0e23a97#2 0.31 0.18 250.00
invoice-consulting_long 0:e48d9b7a2993 0.11 0.31 2,500.00
invoice-consulting_long 0:e48d9b7a2993#1 0.21 0.31 2,500.00
invoice-consulting_long 0:e48d9b7a2993#2 0.31 0.31 2,500.00
-invoice-consulting_long 0:1bcfde966d94 0.59 -0.21 strategicconsultation
-invoice-consulting_long 0:1bcfde966d94#1 0.69 -0.21 strategicconsultation
-invoice-consulting_long 0:1bcfde966d94#2 0.79 -0.21 strategicconsultation
-invoice-consulting_long 0:fd3ca268f319 0.62 -0.21 leadershipalignmentworkshops
-invoice-consulting_long 0:fd3ca268f319#1 0.72 -0.21 leadershipalignmentworkshops
-invoice-consulting_long 0:fd3ca268f319#2 0.82 -0.21 leadershipalignmentworkshops
+invoice-consulting_long 0:1bcfde966d94 0.24 -0.21 strategicconsultation
+invoice-consulting_long 0:1bcfde966d94#1 0.34 -0.21 strategicconsultation
+invoice-consulting_long 0:1bcfde966d94#2 0.44 -0.21 strategicconsultation
+invoice-consulting_long 0:fd3ca268f319 0.27 -0.21 leadershipalignmentworkshops
+invoice-consulting_long 0:fd3ca268f319#1 0.37 -0.21 leadershipalignmentworkshops
+invoice-consulting_long 0:fd3ca268f319#2 0.47 -0.21 leadershipalignmentworkshops
invoice-consulting_long 0:8d93e0c47a8c 0.13 0.16 1–15may2025
invoice-consulting_long 0:8d93e0c47a8c#1 0.23 0.16 1–15may2025
invoice-consulting_long 0:8d93e0c47a8c#2 0.33 0.16 1–15may2025
@@ -2094,12 +2094,12 @@ invoice-consulting_long 0:97e47b250054#2 0.23 0.27 3,500.00
invoice-consulting_long 0:97e47b250054#3 0.23 0.32 3,500.00
invoice-consulting_long 0:97e47b250054#4 0.33 0.27 3,500.00
invoice-consulting_long 0:97e47b250054#5 0.33 0.32 3,500.00
-invoice-consulting_long 0:5581aef375ff 0.61 -0.21 market&competitiveanalysis
-invoice-consulting_long 0:5581aef375ff#1 0.71 -0.21 market&competitiveanalysis
-invoice-consulting_long 0:5581aef375ff#2 0.81 -0.21 market&competitiveanalysis
-invoice-consulting_long 0:957080ea09d9 0.64 -0.21 researchandanalysisreport
-invoice-consulting_long 0:957080ea09d9#1 0.74 -0.21 researchandanalysisreport
-invoice-consulting_long 0:957080ea09d9#2 0.84 -0.21 researchandanalysisreport
+invoice-consulting_long 0:5581aef375ff 0.26 -0.21 market&competitiveanalysis
+invoice-consulting_long 0:5581aef375ff#1 0.36 -0.21 market&competitiveanalysis
+invoice-consulting_long 0:5581aef375ff#2 0.46 -0.21 market&competitiveanalysis
+invoice-consulting_long 0:957080ea09d9 0.29 -0.21 researchandanalysisreport
+invoice-consulting_long 0:957080ea09d9#1 0.39 -0.21 researchandanalysisreport
+invoice-consulting_long 0:957080ea09d9#2 0.49 -0.21 researchandanalysisreport
invoice-consulting_long 0:47102c31f226 0.15 0.19 5–20may2025
invoice-consulting_long 0:47102c31f226#1 0.25 0.19 5–20may2025
invoice-consulting_long 0:47102c31f226#2 0.35 0.19 5–20may2025
@@ -2109,12 +2109,12 @@ invoice-consulting_long 0:ec6305055be9#2 0.25 0.25 4,800.00
invoice-consulting_long 0:ec6305055be9#3 0.25 0.29 4,800.00
invoice-consulting_long 0:ec6305055be9#4 0.35 0.25 4,800.00
invoice-consulting_long 0:ec6305055be9#5 0.35 0.29 4,800.00
-invoice-consulting_long 0:53dea97cf116 0.63 -0.21 digitalroadmapdevelopment
-invoice-consulting_long 0:53dea97cf116#1 0.73 -0.21 digitalroadmapdevelopment
-invoice-consulting_long 0:53dea97cf116#2 0.83 -0.21 digitalroadmapdevelopment
-invoice-consulting_long 0:acf357e68297 0.66 -0.21 strategyandroadmapcreation
-invoice-consulting_long 0:acf357e68297#1 0.76 -0.21 strategyandroadmapcreation
-invoice-consulting_long 0:acf357e68297#2 0.86 -0.21 strategyandroadmapcreation
+invoice-consulting_long 0:53dea97cf116 0.28 -0.21 digitalroadmapdevelopment
+invoice-consulting_long 0:53dea97cf116#1 0.38 -0.21 digitalroadmapdevelopment
+invoice-consulting_long 0:53dea97cf116#2 0.48 -0.21 digitalroadmapdevelopment
+invoice-consulting_long 0:acf357e68297 0.31 -0.21 strategyandroadmapcreation
+invoice-consulting_long 0:acf357e68297#1 0.41 -0.21 strategyandroadmapcreation
+invoice-consulting_long 0:acf357e68297#2 0.51 -0.21 strategyandroadmapcreation
invoice-consulting_long 0:c947fb16eab2 0.17 0.21 15–22may2025
invoice-consulting_long 0:c947fb16eab2#1 0.27 0.21 15–22may2025
invoice-consulting_long 0:c947fb16eab2#2 0.37 0.21 15–22may2025
@@ -2127,12 +2127,12 @@ invoice-consulting_long 0:be6012a47af0#2 0.37 0.18 220.00
invoice-consulting_long 0:172c0a785bc7 0.17 0.27 1,320.00
invoice-consulting_long 0:172c0a785bc7#1 0.27 0.27 1,320.00
invoice-consulting_long 0:172c0a785bc7#2 0.37 0.27 1,320.00
-invoice-consulting_long 0:fe04037aa850 0.65 -0.21 stakeholderreviewsessions
-invoice-consulting_long 0:fe04037aa850#1 0.75 -0.21 stakeholderreviewsessions
-invoice-consulting_long 0:fe04037aa850#2 0.85 -0.21 stakeholderreviewsessions
-invoice-consulting_long 0:4658a1bff292 0.68 -0.21 facilitationanddocumentation
-invoice-consulting_long 0:4658a1bff292#1 0.78 -0.21 facilitationanddocumentation
-invoice-consulting_long 0:4658a1bff292#2 0.88 -0.21 facilitationanddocumentation
+invoice-consulting_long 0:fe04037aa850 0.30 -0.21 stakeholderreviewsessions
+invoice-consulting_long 0:fe04037aa850#1 0.40 -0.21 stakeholderreviewsessions
+invoice-consulting_long 0:fe04037aa850#2 0.50 -0.21 stakeholderreviewsessions
+invoice-consulting_long 0:4658a1bff292 0.33 -0.21 facilitationanddocumentation
+invoice-consulting_long 0:4658a1bff292#1 0.43 -0.21 facilitationanddocumentation
+invoice-consulting_long 0:4658a1bff292#2 0.53 -0.21 facilitationanddocumentation
invoice-consulting_long 0:86f73207c794 0.19 0.23 20–25may2025
invoice-consulting_long 0:86f73207c794#1 0.29 0.23 20–25may2025
invoice-consulting_long 0:86f73207c794#2 0.39 0.23 20–25may2025
@@ -2142,12 +2142,12 @@ invoice-consulting_long 0:55907ef405f6#2 0.29 0.22 1,880.00
invoice-consulting_long 0:55907ef405f6#3 0.29 0.27 1,880.00
invoice-consulting_long 0:55907ef405f6#4 0.39 0.22 1,880.00
invoice-consulting_long 0:55907ef405f6#5 0.39 0.27 1,880.00
-invoice-consulting_long 0:f2e12ad6cc9f 0.67 -0.21 presentation&finalreport
-invoice-consulting_long 0:f2e12ad6cc9f#1 0.77 -0.21 presentation&finalreport
-invoice-consulting_long 0:f2e12ad6cc9f#2 0.87 -0.21 presentation&finalreport
-invoice-consulting_long 0:50de6dc61b80 0.70 -0.21 executivepresentationanddelivery
-invoice-consulting_long 0:50de6dc61b80#1 0.80 -0.21 executivepresentationanddelivery
-invoice-consulting_long 0:50de6dc61b80#2 0.90 -0.21 executivepresentationanddelivery
+invoice-consulting_long 0:f2e12ad6cc9f 0.32 -0.21 presentation&finalreport
+invoice-consulting_long 0:f2e12ad6cc9f#1 0.42 -0.21 presentation&finalreport
+invoice-consulting_long 0:f2e12ad6cc9f#2 0.52 -0.21 presentation&finalreport
+invoice-consulting_long 0:50de6dc61b80 0.35 -0.21 executivepresentationanddelivery
+invoice-consulting_long 0:50de6dc61b80#1 0.45 -0.21 executivepresentationanddelivery
+invoice-consulting_long 0:50de6dc61b80#2 0.55 -0.21 executivepresentationanddelivery
invoice-consulting_long 0:55ee5fe62c33 0.01 0.13 northpointconsultingptyltd|abn12
invoice-consulting_long 0:c843aa25b80f 0.01 0.29 page1/2
invoice-consulting_long 1:c9046f7a37ad -0.02 -0.70 description
@@ -2174,12 +2174,12 @@ invoice-consulting_long 1:aa92f0e23a97#2 0.02 0.18 250.00
invoice-consulting_long 1:e48d9b7a2993 -0.18 0.31 2,500.00
invoice-consulting_long 1:e48d9b7a2993#1 -0.08 0.31 2,500.00
invoice-consulting_long 1:e48d9b7a2993#2 0.02 0.31 2,500.00
-invoice-consulting_long 1:1bcfde966d94 0.30 -0.21 strategicconsultation
-invoice-consulting_long 1:1bcfde966d94#1 0.40 -0.21 strategicconsultation
-invoice-consulting_long 1:1bcfde966d94#2 0.50 -0.21 strategicconsultation
-invoice-consulting_long 1:fd3ca268f319 0.33 -0.21 leadershipalignmentworkshops
-invoice-consulting_long 1:fd3ca268f319#1 0.43 -0.21 leadershipalignmentworkshops
-invoice-consulting_long 1:fd3ca268f319#2 0.53 -0.21 leadershipalignmentworkshops
+invoice-consulting_long 1:1bcfde966d94 -0.05 -0.21 strategicconsultation
+invoice-consulting_long 1:1bcfde966d94#1 0.05 -0.21 strategicconsultation
+invoice-consulting_long 1:1bcfde966d94#2 0.15 -0.21 strategicconsultation
+invoice-consulting_long 1:fd3ca268f319 -0.02 -0.21 leadershipalignmentworkshops
+invoice-consulting_long 1:fd3ca268f319#1 0.08 -0.21 leadershipalignmentworkshops
+invoice-consulting_long 1:fd3ca268f319#2 0.18 -0.21 leadershipalignmentworkshops
invoice-consulting_long 1:8d93e0c47a8c -0.16 0.16 1–15may2025
invoice-consulting_long 1:8d93e0c47a8c#1 -0.06 0.16 1–15may2025
invoice-consulting_long 1:cf9dcf6da8a8 -0.16 -0.07 1.00
@@ -2192,20 +2192,20 @@ invoice-consulting_long 1:97e47b250054 -0.16 0.27 3,500.00
invoice-consulting_long 1:97e47b250054#1 -0.16 0.32 3,500.00
invoice-consulting_long 1:97e47b250054#2 -0.06 0.27 3,500.00
invoice-consulting_long 1:97e47b250054#3 -0.06 0.32 3,500.00
-invoice-consulting_long 1:5581aef375ff 0.32 -0.21 market&competitiveanalysis
-invoice-consulting_long 1:5581aef375ff#1 0.42 -0.21 market&competitiveanalysis
-invoice-consulting_long 1:957080ea09d9 0.35 -0.21 researchandanalysisreport
-invoice-consulting_long 1:957080ea09d9#1 0.45 -0.21 researchandanalysisreport
+invoice-consulting_long 1:5581aef375ff -0.03 -0.21 market&competitiveanalysis
+invoice-consulting_long 1:5581aef375ff#1 0.07 -0.21 market&competitiveanalysis
+invoice-consulting_long 1:957080ea09d9 0.00 -0.21 researchandanalysisreport
+invoice-consulting_long 1:957080ea09d9#1 0.10 -0.21 researchandanalysisreport
invoice-consulting_long 1:47102c31f226 -0.14 0.19 5–20may2025
invoice-consulting_long 1:47102c31f226#1 -0.04 0.19 5–20may2025
invoice-consulting_long 1:ec6305055be9 -0.14 0.25 4,800.00
invoice-consulting_long 1:ec6305055be9#1 -0.14 0.29 4,800.00
invoice-consulting_long 1:ec6305055be9#2 -0.04 0.25 4,800.00
invoice-consulting_long 1:ec6305055be9#3 -0.04 0.29 4,800.00
-invoice-consulting_long 1:53dea97cf116 0.34 -0.21 digitalroadmapdevelopment
-invoice-consulting_long 1:53dea97cf116#1 0.44 -0.21 digitalroadmapdevelopment
-invoice-consulting_long 1:acf357e68297 0.37 -0.21 strategyandroadmapcreation
-invoice-consulting_long 1:acf357e68297#1 0.47 -0.21 strategyandroadmapcreation
+invoice-consulting_long 1:53dea97cf116 -0.01 -0.21 digitalroadmapdevelopment
+invoice-consulting_long 1:53dea97cf116#1 0.09 -0.21 digitalroadmapdevelopment
+invoice-consulting_long 1:acf357e68297 0.02 -0.21 strategyandroadmapcreation
+invoice-consulting_long 1:acf357e68297#1 0.12 -0.21 strategyandroadmapcreation
invoice-consulting_long 1:c947fb16eab2 -0.12 0.21 15–22may2025
invoice-consulting_long 1:c947fb16eab2#1 -0.02 0.21 15–22may2025
invoice-consulting_long 1:017144e2271f -0.12 -0.08 6.00
@@ -2214,20 +2214,20 @@ invoice-consulting_long 1:be6012a47af0 -0.12 0.18 220.00
invoice-consulting_long 1:be6012a47af0#1 -0.02 0.18 220.00
invoice-consulting_long 1:172c0a785bc7 -0.12 0.27 1,320.00
invoice-consulting_long 1:172c0a785bc7#1 -0.02 0.27 1,320.00
-invoice-consulting_long 1:fe04037aa850 0.36 -0.21 stakeholderreviewsessions
-invoice-consulting_long 1:fe04037aa850#1 0.46 -0.21 stakeholderreviewsessions
-invoice-consulting_long 1:4658a1bff292 0.39 -0.21 facilitationanddocumentation
-invoice-consulting_long 1:4658a1bff292#1 0.49 -0.21 facilitationanddocumentation
+invoice-consulting_long 1:fe04037aa850 0.01 -0.21 stakeholderreviewsessions
+invoice-consulting_long 1:fe04037aa850#1 0.11 -0.21 stakeholderreviewsessions
+invoice-consulting_long 1:4658a1bff292 0.04 -0.21 facilitationanddocumentation
+invoice-consulting_long 1:4658a1bff292#1 0.14 -0.21 facilitationanddocumentation
invoice-consulting_long 1:86f73207c794 -0.10 0.23 20–25may2025
invoice-consulting_long 1:86f73207c794#1 0.00 0.23 20–25may2025
invoice-consulting_long 1:55907ef405f6 -0.10 0.22 1,880.00
invoice-consulting_long 1:55907ef405f6#1 -0.10 0.27 1,880.00
invoice-consulting_long 1:55907ef405f6#2 0.00 0.22 1,880.00
invoice-consulting_long 1:55907ef405f6#3 0.00 0.27 1,880.00
-invoice-consulting_long 1:f2e12ad6cc9f 0.38 -0.21 presentation&finalreport
-invoice-consulting_long 1:f2e12ad6cc9f#1 0.48 -0.21 presentation&finalreport
-invoice-consulting_long 1:50de6dc61b80 0.41 -0.21 executivepresentationanddelivery
-invoice-consulting_long 1:50de6dc61b80#1 0.51 -0.21 executivepresentationanddelivery
+invoice-consulting_long 1:f2e12ad6cc9f 0.03 -0.21 presentation&finalreport
+invoice-consulting_long 1:f2e12ad6cc9f#1 0.13 -0.21 presentation&finalreport
+invoice-consulting_long 1:50de6dc61b80 0.06 -0.21 executivepresentationanddelivery
+invoice-consulting_long 1:50de6dc61b80#1 0.16 -0.21 executivepresentationanddelivery
invoice-consulting_long 1:d6577e95efba -0.28 0.12 subtotal
invoice-consulting_long 1:6311b1798398 0.06 0.63 14,000.00
invoice-consulting_long 1:e370855bde0c -0.28 0.12 gst(10%)
@@ -2289,11 +2289,11 @@ invoice-luma_studio 0:725a8f5062e7 0.04 -0.01 shipto
invoice-luma_studio 0:254289ce0191 -0.10 -0.01 thefoundry,2ndfloor
invoice-luma_studio 0:84db1f48facb -0.14 -0.01 17-19greatsuffolkstreet
invoice-luma_studio 0:e7a5f0717d99 -0.18 -0.01 londonse10ns
-invoice-luma_studio 0:c9046f7a37ad 0.04 0.10 description
-invoice-luma_studio 0:32e8369a9c4f 0.04 0.80 qty
-invoice-luma_studio 0:d1062d072acd 0.04 0.78 unitprice
-invoice-luma_studio 0:7c512b48ba8a 0.04 0.84 vat
-invoice-luma_studio 0:cf38d95c9c6b 0.04 1.54 amount
+invoice-luma_studio 0:c9046f7a37ad -0.16 0.10 description
+invoice-luma_studio 0:32e8369a9c4f -0.16 0.80 qty
+invoice-luma_studio 0:d1062d072acd -0.16 0.78 unitprice
+invoice-luma_studio 0:7c512b48ba8a -0.16 0.84 vat
+invoice-luma_studio 0:cf38d95c9c6b -0.16 1.54 amount
invoice-luma_studio 0:7b420577e50f -0.13 -0.10 £1,200.00
invoice-luma_studio 0:7b420577e50f#1 -0.13 -0.25 £1,200.00
invoice-luma_studio 0:dc934fe30a94 -0.13 0.00 20%
@@ -2301,25 +2301,25 @@ invoice-luma_studio 0:dc934fe30a94#1 -0.12 0.00 20%
invoice-luma_studio 0:dc934fe30a94#2 -0.12 0.00 20%
invoice-luma_studio 0:dc934fe30a94#3 -0.11 0.00 20%
invoice-luma_studio 0:dc934fe30a94#4 -0.10 0.00 20%
-invoice-luma_studio 0:d8f4e3a46d2d 0.01 0.03 brandstrategyworkshop
+invoice-luma_studio 0:d8f4e3a46d2d -0.19 0.03 brandstrategyworkshop
invoice-luma_studio 0:be624d692600 -0.56 0.03 discoverysession,research&brand
invoice-luma_studio 0:40ca2aad940f -0.55 0.03 positioning.
invoice-luma_studio 0:07bcffc86e95 -0.12 -0.10 £2,650.00
invoice-luma_studio 0:07bcffc86e95#1 -0.12 -0.25 £2,650.00
-invoice-luma_studio 0:e302dd04d528 0.02 0.03 visualidentitydesign
+invoice-luma_studio 0:e302dd04d528 -0.18 0.03 visualidentitydesign
invoice-luma_studio 0:40e412f627fb -0.55 0.03 logosuite,colourpalette,typograp
invoice-luma_studio 0:9c17d116fe08 -0.54 0.03 &guidelines.
invoice-luma_studio 0:a20d66947acc -0.12 -0.10 £3,200.00
invoice-luma_studio 0:a20d66947acc#1 -0.12 -0.25 £3,200.00
-invoice-luma_studio 0:b25ac9cd66bd 0.03 0.03 websitedesign(upto8pages)
+invoice-luma_studio 0:b25ac9cd66bd -0.17 0.03 websitedesign(upto8pages)
invoice-luma_studio 0:dab758788e6f -0.19 0.03 ux/uidesignfordesktopandmobile.
invoice-luma_studio 0:f916278cb74c -0.11 -0.05 £850.00
invoice-luma_studio 0:f916278cb74c#1 -0.11 -0.19 £850.00
-invoice-luma_studio 0:4a1359f78476 0.04 0.03 copywriting
+invoice-luma_studio 0:4a1359f78476 -0.16 0.03 copywriting
invoice-luma_studio 0:69afea703455 -0.18 0.03 websitecopy&keymessaging.
invoice-luma_studio 0:07b417914317 -0.10 -0.05 £600.00
invoice-luma_studio 0:07b417914317#1 -0.10 -0.19 £600.00
-invoice-luma_studio 0:340455fbac25 0.05 0.03 projectmanagement
+invoice-luma_studio 0:340455fbac25 -0.15 0.03 projectmanagement
invoice-luma_studio 0:72534f9863ad -0.52 0.03 planning,coordination&client
invoice-luma_studio 0:4df00f9a2b20 -0.52 0.03 liaison.
invoice-luma_studio 0:d6577e95efba 0.11 0.10 subtotal
@@ -2386,11 +2386,11 @@ invoice-luma_studio_long 0:725a8f5062e7 0.04 -0.01 shipto
invoice-luma_studio_long 0:254289ce0191 -0.10 -0.01 thefoundry,2ndfloor
invoice-luma_studio_long 0:84db1f48facb -0.14 -0.01 17-19greatsuffolkstreet
invoice-luma_studio_long 0:e7a5f0717d99 -0.18 -0.01 londonse10ns
-invoice-luma_studio_long 0:c9046f7a37ad 0.04 0.10 description
-invoice-luma_studio_long 0:32e8369a9c4f 0.04 0.80 qty
-invoice-luma_studio_long 0:d1062d072acd 0.04 0.78 unitprice
-invoice-luma_studio_long 0:7c512b48ba8a 0.04 0.84 vat
-invoice-luma_studio_long 0:cf38d95c9c6b 0.04 1.54 amount
+invoice-luma_studio_long 0:c9046f7a37ad -0.16 0.10 description
+invoice-luma_studio_long 0:32e8369a9c4f -0.16 0.80 qty
+invoice-luma_studio_long 0:d1062d072acd -0.16 0.78 unitprice
+invoice-luma_studio_long 0:7c512b48ba8a -0.16 0.84 vat
+invoice-luma_studio_long 0:cf38d95c9c6b -0.16 1.54 amount
invoice-luma_studio_long 0:7b420577e50f -0.13 -0.10 £1,200.00
invoice-luma_studio_long 0:7b420577e50f#1 -0.13 -0.25 £1,200.00
invoice-luma_studio_long 0:7b420577e50f#2 -0.08 -0.10 £1,200.00
@@ -2403,8 +2403,8 @@ invoice-luma_studio_long 0:dc934fe30a94#4 -0.09 0.00 20%
invoice-luma_studio_long 0:dc934fe30a94#5 -0.08 0.00 20%
invoice-luma_studio_long 0:dc934fe30a94#6 -0.07 0.00 20%
invoice-luma_studio_long 0:dc934fe30a94#7 -0.06 0.00 20%
-invoice-luma_studio_long 0:d8f4e3a46d2d 0.01 0.03 brandstrategyworkshop
-invoice-luma_studio_long 0:d8f4e3a46d2d#1 0.06 0.03 brandstrategyworkshop
+invoice-luma_studio_long 0:d8f4e3a46d2d -0.19 0.03 brandstrategyworkshop
+invoice-luma_studio_long 0:d8f4e3a46d2d#1 -0.14 0.03 brandstrategyworkshop
invoice-luma_studio_long 0:be624d692600 -0.56 0.03 discoverysession,research&brand
invoice-luma_studio_long 0:be624d692600#1 -0.51 0.03 discoverysession,research&brand
invoice-luma_studio_long 0:d6def76ba3d1 -0.55 0.03 positioning.phase1.
@@ -2412,8 +2412,8 @@ invoice-luma_studio_long 0:07bcffc86e95 -0.12 -0.10 £2,650.00
invoice-luma_studio_long 0:07bcffc86e95#1 -0.12 -0.25 £2,650.00
invoice-luma_studio_long 0:07bcffc86e95#2 -0.07 -0.10 £2,650.00
invoice-luma_studio_long 0:07bcffc86e95#3 -0.07 -0.25 £2,650.00
-invoice-luma_studio_long 0:e302dd04d528 0.02 0.03 visualidentitydesign
-invoice-luma_studio_long 0:e302dd04d528#1 0.07 0.03 visualidentitydesign
+invoice-luma_studio_long 0:e302dd04d528 -0.18 0.03 visualidentitydesign
+invoice-luma_studio_long 0:e302dd04d528#1 -0.13 0.03 visualidentitydesign
invoice-luma_studio_long 0:40e412f627fb -0.55 0.03 logosuite,colourpalette,typograp
invoice-luma_studio_long 0:40e412f627fb#1 -0.50 0.03 logosuite,colourpalette,typograp
invoice-luma_studio_long 0:270a9e26d2e0 -0.54 0.03 &guidelines.phase1.
@@ -2421,29 +2421,29 @@ invoice-luma_studio_long 0:a20d66947acc -0.11 -0.10 £3,200.00
invoice-luma_studio_long 0:a20d66947acc#1 -0.11 -0.25 £3,200.00
invoice-luma_studio_long 0:a20d66947acc#2 -0.06 -0.10 £3,200.00
invoice-luma_studio_long 0:a20d66947acc#3 -0.06 -0.25 £3,200.00
-invoice-luma_studio_long 0:b25ac9cd66bd 0.03 0.03 websitedesign(upto8pages)
-invoice-luma_studio_long 0:b25ac9cd66bd#1 0.08 0.03 websitedesign(upto8pages)
+invoice-luma_studio_long 0:b25ac9cd66bd -0.17 0.03 websitedesign(upto8pages)
+invoice-luma_studio_long 0:b25ac9cd66bd#1 -0.12 0.03 websitedesign(upto8pages)
invoice-luma_studio_long 0:dab758788e6f -0.54 0.03 ux/uidesignfordesktopandmobile.
invoice-luma_studio_long 0:dab758788e6f#1 -0.49 0.03 ux/uidesignfordesktopandmobile.
invoice-luma_studio_long 0:bb1a79cda1ae -0.53 0.03 phase1.
invoice-luma_studio_long 0:f916278cb74c -0.10 -0.05 £850.00
invoice-luma_studio_long 0:f916278cb74c#1 -0.10 -0.19 £850.00
-invoice-luma_studio_long 0:4a1359f78476 0.04 0.03 copywriting
+invoice-luma_studio_long 0:4a1359f78476 -0.16 0.03 copywriting
invoice-luma_studio_long 0:e6a181326fc9 -0.53 0.03 websitecopy&keymessaging.phase
invoice-luma_studio_long 0:07b417914317 -0.09 -0.05 £600.00
invoice-luma_studio_long 0:07b417914317#1 -0.09 -0.19 £600.00
-invoice-luma_studio_long 0:340455fbac25 0.05 0.03 projectmanagement
+invoice-luma_studio_long 0:340455fbac25 -0.15 0.03 projectmanagement
invoice-luma_studio_long 0:72534f9863ad -0.52 0.03 planning,coordination&client
invoice-luma_studio_long 0:8f09113ca513 -0.51 0.03 liaison.phase1.
invoice-luma_studio_long 0:532160121f5f -0.50 0.03 positioning.phase2.
invoice-luma_studio_long 0:82ed33a90b4e -0.49 0.03 &guidelines.phase2.
invoice-luma_studio_long 0:81deaef85fed -0.48 0.03 phase2.
invoice-luma_studio_long 0:cc6f3d44f8c5 0.01 1.24 page1of3
-invoice-luma_studio_long 1:c9046f7a37ad 0.18 0.10 description
-invoice-luma_studio_long 1:32e8369a9c4f 0.18 0.80 qty
-invoice-luma_studio_long 1:d1062d072acd 0.18 0.78 unitprice
-invoice-luma_studio_long 1:7c512b48ba8a 0.18 0.84 vat
-invoice-luma_studio_long 1:cf38d95c9c6b 0.18 1.54 amount
+invoice-luma_studio_long 1:c9046f7a37ad -0.02 0.10 description
+invoice-luma_studio_long 1:32e8369a9c4f -0.02 0.80 qty
+invoice-luma_studio_long 1:d1062d072acd -0.02 0.78 unitprice
+invoice-luma_studio_long 1:7c512b48ba8a -0.02 0.84 vat
+invoice-luma_studio_long 1:cf38d95c9c6b -0.02 1.54 amount
invoice-luma_studio_long 1:f916278cb74c 0.01 -0.05 £850.00
invoice-luma_studio_long 1:f916278cb74c#1 0.01 -0.19 £850.00
invoice-luma_studio_long 1:f916278cb74c#2 0.06 -0.05 £850.00
@@ -2462,9 +2462,9 @@ invoice-luma_studio_long 1:dc934fe30a94#8 0.09 0.00 20%
invoice-luma_studio_long 1:dc934fe30a94#9 0.10 0.00 20%
invoice-luma_studio_long 1:dc934fe30a94#10 0.11 0.00 20%
invoice-luma_studio_long 1:dc934fe30a94#11 0.12 0.00 20%
-invoice-luma_studio_long 1:4a1359f78476 0.15 0.03 copywriting
-invoice-luma_studio_long 1:4a1359f78476#1 0.20 0.03 copywriting
-invoice-luma_studio_long 1:4a1359f78476#2 0.25 0.03 copywriting
+invoice-luma_studio_long 1:4a1359f78476 -0.05 0.03 copywriting
+invoice-luma_studio_long 1:4a1359f78476#1 0.00 0.03 copywriting
+invoice-luma_studio_long 1:4a1359f78476#2 0.05 0.03 copywriting
invoice-luma_studio_long 1:e6a181326fc9 -0.41 0.03 websitecopy&keymessaging.phase
invoice-luma_studio_long 1:e6a181326fc9#1 -0.36 0.03 websitecopy&keymessaging.phase
invoice-luma_studio_long 1:e6a181326fc9#2 -0.31 0.03 websitecopy&keymessaging.phase
@@ -2474,9 +2474,9 @@ invoice-luma_studio_long 1:07b417914317#2 0.07 -0.05 £600.00
invoice-luma_studio_long 1:07b417914317#3 0.07 -0.19 £600.00
invoice-luma_studio_long 1:07b417914317#4 0.12 -0.05 £600.00
invoice-luma_studio_long 1:07b417914317#5 0.12 -0.19 £600.00
-invoice-luma_studio_long 1:340455fbac25 0.16 0.03 projectmanagement
-invoice-luma_studio_long 1:340455fbac25#1 0.21 0.03 projectmanagement
-invoice-luma_studio_long 1:340455fbac25#2 0.26 0.03 projectmanagement
+invoice-luma_studio_long 1:340455fbac25 -0.04 0.03 projectmanagement
+invoice-luma_studio_long 1:340455fbac25#1 0.01 0.03 projectmanagement
+invoice-luma_studio_long 1:340455fbac25#2 0.07 0.03 projectmanagement
invoice-luma_studio_long 1:72534f9863ad -0.40 0.03 planning,coordination&client
invoice-luma_studio_long 1:72534f9863ad#1 -0.35 0.03 planning,coordination&client
invoice-luma_studio_long 1:72534f9863ad#2 -0.30 0.03 planning,coordination&client
@@ -2485,8 +2485,8 @@ invoice-luma_studio_long 1:7b420577e50f 0.03 -0.10 £1,200.00
invoice-luma_studio_long 1:7b420577e50f#1 0.03 -0.25 £1,200.00
invoice-luma_studio_long 1:7b420577e50f#2 0.08 -0.10 £1,200.00
invoice-luma_studio_long 1:7b420577e50f#3 0.08 -0.25 £1,200.00
-invoice-luma_studio_long 1:d8f4e3a46d2d 0.17 0.03 brandstrategyworkshop
-invoice-luma_studio_long 1:d8f4e3a46d2d#1 0.22 0.03 brandstrategyworkshop
+invoice-luma_studio_long 1:d8f4e3a46d2d -0.03 0.03 brandstrategyworkshop
+invoice-luma_studio_long 1:d8f4e3a46d2d#1 0.02 0.03 brandstrategyworkshop
invoice-luma_studio_long 1:be624d692600 -0.39 0.03 discoverysession,research&brand
invoice-luma_studio_long 1:be624d692600#1 -0.34 0.03 discoverysession,research&brand
invoice-luma_studio_long 1:b95a82d5055c -0.39 0.03 positioning.phase3.
@@ -2494,8 +2494,8 @@ invoice-luma_studio_long 1:07bcffc86e95 0.04 -0.10 £2,650.00
invoice-luma_studio_long 1:07bcffc86e95#1 0.04 -0.25 £2,650.00
invoice-luma_studio_long 1:07bcffc86e95#2 0.09 -0.10 £2,650.00
invoice-luma_studio_long 1:07bcffc86e95#3 0.09 -0.25 £2,650.00
-invoice-luma_studio_long 1:e302dd04d528 0.18 0.03 visualidentitydesign
-invoice-luma_studio_long 1:e302dd04d528#1 0.23 0.03 visualidentitydesign
+invoice-luma_studio_long 1:e302dd04d528 -0.02 0.03 visualidentitydesign
+invoice-luma_studio_long 1:e302dd04d528#1 0.03 0.03 visualidentitydesign
invoice-luma_studio_long 1:40e412f627fb -0.38 0.03 logosuite,colourpalette,typograp
invoice-luma_studio_long 1:40e412f627fb#1 -0.33 0.03 logosuite,colourpalette,typograp
invoice-luma_studio_long 1:708bc0c2e87c -0.38 0.03 &guidelines.phase3.
@@ -2503,8 +2503,8 @@ invoice-luma_studio_long 1:a20d66947acc 0.05 -0.10 £3,200.00
invoice-luma_studio_long 1:a20d66947acc#1 0.05 -0.25 £3,200.00
invoice-luma_studio_long 1:a20d66947acc#2 0.10 -0.10 £3,200.00
invoice-luma_studio_long 1:a20d66947acc#3 0.10 -0.25 £3,200.00
-invoice-luma_studio_long 1:b25ac9cd66bd 0.19 0.03 websitedesign(upto8pages)
-invoice-luma_studio_long 1:b25ac9cd66bd#1 0.24 0.03 websitedesign(upto8pages)
+invoice-luma_studio_long 1:b25ac9cd66bd -0.01 0.03 websitedesign(upto8pages)
+invoice-luma_studio_long 1:b25ac9cd66bd#1 0.04 0.03 websitedesign(upto8pages)
invoice-luma_studio_long 1:dab758788e6f -0.37 0.03 ux/uidesignfordesktopandmobile.
invoice-luma_studio_long 1:dab758788e6f#1 -0.32 0.03 ux/uidesignfordesktopandmobile.
invoice-luma_studio_long 1:155500f32e83 -0.37 0.03 phase3.
@@ -2734,7 +2734,7 @@ invoice-metered 0:985e43c2de34 -0.04 0.12 120riversideway,bristol,bs16qt,u
invoice-metered 0:7b14b8d2c5c4 -0.04 0.16 page1of1
invoice-modern 0:52d6e3de4fa0 0.00 0.10 invoice
invoice-modern 0:30d85a94548c 0.00 0.10 invoicegc-2026-041issued02apr202
-invoice-modern 0:75857a458999 0.20 0.10 from
+invoice-modern 0:75857a458999 0.00 0.10 from
invoice-modern 0:c26c22b94338 -0.02 0.10 graphcomposestudio
invoice-modern 0:2a08ce5567fb -0.10 0.10 18layoutstreet
invoice-modern 0:fbeea547d99e -0.12 0.10 london,uk
@@ -2742,7 +2742,7 @@ invoice-modern 0:faf1569a98e9 -0.15 0.10 ec1a4gc
invoice-modern 0:befc6e9b5c24 -0.17 0.10 billing@graphcompose.dev
invoice-modern 0:89674e6f130e -0.20 0.10 +442055551000
invoice-modern 0:a2b2e7d2906f -0.22 0.10 taxidgb-99887766
-invoice-modern 0:aeba3a7b3598 0.20 0.11 billto
+invoice-modern 0:aeba3a7b3598 0.00 0.11 billto
invoice-modern 0:f890faef907f -0.02 0.11 northwindsystems
invoice-modern 0:1b405eb431ca -0.10 0.11 attn:financeteam
invoice-modern 0:91eefd794f79 -0.12 0.11 410marketavenue
@@ -2789,14 +2789,14 @@ invoice-modern 0:e3337beaa171 -0.05 0.10 thankyouforchoosinggraphcomposef
invoice-modern_long 0:52d6e3de4fa0 0.00 0.10 invoice
invoice-modern_long 0:61a964e78950 0.00 0.10 invoicegc-2026-042issued04may202
invoice-modern_long 0:62a2fed3d6e0 0.00 0.10 pending
-invoice-modern_long 0:75857a458999 0.20 0.10 from
+invoice-modern_long 0:75857a458999 0.00 0.10 from
invoice-modern_long 0:c26c22b94338 -0.02 0.10 graphcomposestudio
invoice-modern_long 0:2a08ce5567fb -0.10 0.10 18layoutstreet
invoice-modern_long 0:fbeea547d99e -0.12 0.10 london,uk
invoice-modern_long 0:faf1569a98e9 -0.15 0.10 ec1a4gc
invoice-modern_long 0:befc6e9b5c24 -0.17 0.10 billing@graphcompose.dev
invoice-modern_long 0:89674e6f130e -0.20 0.10 +442055551000
-invoice-modern_long 0:aeba3a7b3598 0.20 0.11 billto
+invoice-modern_long 0:aeba3a7b3598 0.00 0.11 billto
invoice-modern_long 0:f890faef907f -0.02 0.11 northwindsystems
invoice-modern_long 0:1b405eb431ca -0.10 0.11 attn:financeteam
invoice-modern_long 0:91eefd794f79 -0.12 0.11 410marketavenue
@@ -3427,7 +3427,7 @@ letter-blue_banner 0:a71e98216baa -0.08 0.10 iwouldwelcometheopportunitytobri
letter-blue_banner 0:80a6a628ad52 -0.05 0.10 sincerely,
letter-boxed_sections 0:8f1010120ed6 0.46 2.20 jordanrivera
letter-boxed_sections 0:8f1010120ed6#1 0.13 0.10 jordanrivera
-letter-boxed_sections 0:8d7a2cca3060 0.23 0.22 +442055551000|jordan.rivera@exam
+letter-boxed_sections 0:8d7a2cca3060 0.08 0.22 +442055551000|jordan.rivera@exam
letter-boxed_sections 0:bef81b541365 0.09 0.10 dearhiringteamatnorthwindsystems
letter-boxed_sections 0:ab54410ead82 -0.01 0.10 iamexcitedtosharemyinterestinthe
letter-boxed_sections 0:9185168d2cf8 0.00 0.10 document-generationsystemsthatba
@@ -3456,7 +3456,7 @@ letter-classic_serif 0:a463bced3db2 -0.13 0.10 ienjoytranslatingfuzzyworkflowre
letter-classic_serif 0:dd474e249222 -0.15 0.10 makeadoptioneasierfortherestofth
letter-classic_serif 0:a71e98216baa -0.08 0.10 iwouldwelcometheopportunitytobri
letter-classic_serif 0:80a6a628ad52 -0.10 0.10 sincerely,
-letter-compact_mono 0:8f1010120ed6 0.31 0.10 jordanrivera
+letter-compact_mono 0:8f1010120ed6 -0.04 0.10 jordanrivera
letter-compact_mono 0:8f1010120ed6#1 -0.13 0.10 jordanrivera
letter-compact_mono 0:f9e4560bd641 -0.24 0.10 london,uk/+442055551000/jordan.r
letter-compact_mono 0:bef81b541365 -0.08 0.10 dearhiringteamatnorthwindsystems
@@ -3654,8 +3654,8 @@ proposal-editorial 1:aaa2a6073d69 -45.38 0.57 refinedlogosuite&brandguidelines
proposal-editorial 1:d626f7532564 -45.38 0.57 color,typography&designsystem
proposal-editorial 1:018ec557a513 -45.38 0.57 websiteuxwireframes
proposal-editorial 1:5ed4970fa285 -45.38 0.57 high-fidelitywebsitedesigns
-proposal-editorial 1:a579d6d1c12e -44.88 0.55 responsivedesignfordesktop,table
-proposal-editorial 1:d524c1a0811d -45.28 0.10 mobile
+proposal-editorial 1:a579d6d1c12e -45.03 0.55 responsivedesignfordesktop,table
+proposal-editorial 1:d524c1a0811d -45.43 0.10 mobile
proposal-editorial 1:8b712e7e93bf -45.40 0.55 contentstrategy&pagetemplates
proposal-editorial 1:e9bf06d9b130 -45.40 0.55 developer-readyassets&specificat
proposal-editorial 1:e93e7ba95ceb -45.40 0.55 launchchecklist&trainingsession
@@ -3794,9 +3794,9 @@ proposal-indigo 0:29208032c874 0.72 0.05 kestrel.example/business|busines
proposal-modern 0:ecd1378bc9dc 0.00 0.10 proposal
proposal-modern 0:f592a683c61d -0.03 0.10 documentplatformconsolidation
proposal-modern 0:bbe07492ee1f 0.02 0.10 proposalgc-p-2026-014prepared02a
-proposal-modern 0:566835ed7fba 0.23 0.10 executivesummary
+proposal-modern 0:566835ed7fba 0.03 0.10 executivesummary
proposal-modern 0:7ccf0e6c59fa 0.00 0.10 aphasedengagementtoretireper-tea
-proposal-modern 0:75857a458999 0.23 0.10 from
+proposal-modern 0:75857a458999 0.03 0.10 from
proposal-modern 0:c26c22b94338 0.00 0.10 graphcomposestudio
proposal-modern 0:2a08ce5567fb -0.07 0.10 18layoutstreet
proposal-modern 0:fbeea547d99e -0.10 0.10 london,uk
@@ -3973,8 +3973,8 @@ receipt-modern 0:e885a92f5bb7 -0.02 0.03 generatedon09august2026
receipt-modern 0:c288dd6df716 -0.01 -0.20 referencenwp-4821-0067
receipt-modern 0:9de2a2d7cd7a 0.18 0.10 amountcollected
receipt-modern 0:465691680b99 0.03 0.10 £66.62
-receipt-modern 0:465691680b99#1 0.29 -0.90 £66.62
-receipt-modern 0:465691680b99#2 0.29 -0.90 £66.62
+receipt-modern 0:465691680b99#1 0.09 -0.90 £66.62
+receipt-modern 0:465691680b99#2 0.09 -0.90 £66.62
receipt-modern 0:4260e5ae365d 0.00 0.10 directdebitcollectedbyharbourfin
receipt-modern 0:4ddb3e96801a 0.18 9.26 completed
receipt-modern 0:a22e6dacae05 0.04 0.19 valuedate07jul2026
@@ -3994,31 +3994,31 @@ receipt-modern 0:f05e0b2f4fe3 -0.01 0.06 manchesterm00aa
receipt-modern 0:597533badf94 0.09 0.06 account••••5604
receipt-modern 0:a5938b687682 0.09 0.06 sortcode00-00-11
receipt-modern 0:5434155c0fda 0.03 0.10 transferdetails
-receipt-modern 0:a4d7978db2aa 0.29 0.10 mandatereference
-receipt-modern 0:0123b9cf310f 0.29 -0.95 mnd-0110-8054-5652
-receipt-modern 0:3840804e6235 0.29 0.10 transactionid
-receipt-modern 0:60e01e42bb33 0.29 -0.92 b71f0c2e-9a44-4f18-bd30-51c7a2e9
-receipt-modern 0:2cbaa23e0a56 0.29 0.10 paymentscheme
-receipt-modern 0:1477cb720a28 0.29 -0.94 bacsdirectdebit
-receipt-modern 0:1fa78044a7da 0.29 0.10 statementdescription
-receipt-modern 0:b77918146dd3 0.29 -0.92 harbourfin4821
+receipt-modern 0:a4d7978db2aa 0.09 0.10 mandatereference
+receipt-modern 0:0123b9cf310f 0.09 -0.95 mnd-0110-8054-5652
+receipt-modern 0:3840804e6235 0.09 0.10 transactionid
+receipt-modern 0:60e01e42bb33 0.09 -0.92 b71f0c2e-9a44-4f18-bd30-51c7a2e9
+receipt-modern 0:2cbaa23e0a56 0.09 0.10 paymentscheme
+receipt-modern 0:1477cb720a28 0.09 -0.94 bacsdirectdebit
+receipt-modern 0:1fa78044a7da 0.09 0.10 statementdescription
+receipt-modern 0:b77918146dd3 0.09 -0.92 harbourfin4821
receipt-modern 0:c72294b34f1a 0.03 0.10 amountbreakdown
-receipt-modern 0:cf38d95c9c6b 0.29 0.10 amount
-receipt-modern 0:dc40efafaeb3 0.29 0.10 transferfee
-receipt-modern 0:3a82ba6903c6 0.29 -0.86 £0.00
-receipt-modern 0:1cdd81427c35 0.29 0.10 exchangerate
-receipt-modern 0:0311534a9954 0.29 -0.91 1.00gbp/gbp
-receipt-modern 0:c1dc9f641ca3 0.29 0.10 totaldebited
+receipt-modern 0:cf38d95c9c6b 0.09 0.10 amount
+receipt-modern 0:dc40efafaeb3 0.09 0.10 transferfee
+receipt-modern 0:3a82ba6903c6 0.09 -0.86 £0.00
+receipt-modern 0:1cdd81427c35 0.09 0.10 exchangerate
+receipt-modern 0:0311534a9954 0.09 -0.91 1.00gbp/gbp
+receipt-modern 0:c1dc9f641ca3 0.09 0.10 totaldebited
receipt-modern 0:de149c2431a2 0.03 0.10 paymentprogress
-receipt-modern 0:4568e72e6bfd 0.29 0.06 instructed
+receipt-modern 0:4568e72e6bfd 0.09 0.06 instructed
receipt-modern 0:c5f62da028cc 0.05 0.06 07jul2026,08:12bst·collectionreq
-receipt-modern 0:788d0109e065 0.30 0.06 inclearing
+receipt-modern 0:788d0109e065 0.10 0.06 inclearing
receipt-modern 0:7cb44e46733a 0.06 0.06 08jul2026,09:00bst·three-working
-receipt-modern 0:d31e014808ec 0.31 0.06 settled
+receipt-modern 0:d31e014808ec 0.11 0.06 settled
receipt-modern 0:06cb75439693 0.07 0.06 09jul2026,06:30bst·fundsdebiteda
receipt-modern 0:ab5aa97074c4 0.06 0.10 notes
receipt-modern 0:a8da22f90eac 0.06 0.10 keepthisconfirmationforyourrecor
-receipt-modern 0:59941ac03c12 0.29 0.05 scantocheckthisconfirmationagain
+receipt-modern 0:59941ac03c12 0.09 0.05 scantocheckthisconfirmationagain
receipt-modern 0:868e2517782a 0.03 0.05 support+442000000000
receipt-modern 0:94d25770d489 0.03 0.05 help@northwind-pay.example
receipt-modern 0:d613d9566d09 0.03 0.05 northwindpayisafictionalinstitut
@@ -4026,13 +4026,13 @@ receipt-modern 0:403a860bfc00 0.03 0.05 invented.
receipt-modern 0:7b14b8d2c5c4 -0.04 0.24 page1of1
rota-cobalt 0:33888e306262 -0.07 -0.38 quay
rota-cobalt 0:f5f481423c57 -0.22 -0.38 quaysidebar
-rota-cobalt 0:d457d4238a16 0.18 -0.12 monday31st
-rota-cobalt 0:916a90a10237 0.18 -0.16 tuesday1st
-rota-cobalt 0:c602d130bfde 0.18 -0.08 wednesday2nd
-rota-cobalt 0:74cf6babb6f6 0.18 -0.17 thursday3rd
-rota-cobalt 0:ae6aa379ad0c 0.18 -0.17 friday4th
-rota-cobalt 0:a6643f169bfd 0.18 -0.18 saturday5th
-rota-cobalt 0:58752a3c0543 0.18 -0.17 sunday6th
+rota-cobalt 0:d457d4238a16 -0.02 -0.12 monday31st
+rota-cobalt 0:916a90a10237 -0.02 -0.16 tuesday1st
+rota-cobalt 0:c602d130bfde -0.02 -0.08 wednesday2nd
+rota-cobalt 0:74cf6babb6f6 -0.02 -0.17 thursday3rd
+rota-cobalt 0:ae6aa379ad0c -0.02 -0.17 friday4th
+rota-cobalt 0:a6643f169bfd -0.02 -0.18 saturday5th
+rota-cobalt 0:58752a3c0543 -0.02 -0.17 sunday6th
rota-cobalt 0:c4aee96677b0 -0.08 -0.24 /cleancrushedice
rota-cobalt 0:2895e01ceae0 -0.09 -0.27 machine&area
rota-cobalt 0:f4e7df025c89 -0.08 -0.20 pianist18:30/clean
@@ -4042,7 +4042,7 @@ rota-cobalt 0:b913ee5e077a -0.08 -0.22 privatedinner44pax/
rota-cobalt 0:d89987d22df9 -0.09 -0.21 soulgf/pianist18:30
rota-cobalt 0:fb980282ae0a -0.08 -0.22 pianist18:30/partner
rota-cobalt 0:3c1fc038017e -0.09 -0.26 meeting3:30pm
-rota-cobalt 0:cc96b22615e5 0.22 -0.30 pianist19:00
+rota-cobalt 0:cc96b22615e5 0.02 -0.30 pianist19:00
rota-cobalt 0:bc14a4ce6407 -0.03 0.36 statuslegend
rota-cobalt 0:1f58b9145b24 -0.07 -0.02 request
rota-cobalt 0:b4dc66dde806 -0.07 -0.17 off
@@ -4087,13 +4087,13 @@ rota-cobalt 0:f8f8922da592 0.18 -0.09 standby
rota-cobalt 0:c2fb788c7dee 0.18 -0.05 training
rota-cobalt 0:a18603086e5b -0.07 -0.04 support
rota-cobalt 0:17ae69cc7e46 0.01 -0.38 covers
-rota-cobalt 0:412a5c513322 0.27 -0.21 l104/d50
-rota-cobalt 0:304560bf3205 0.27 -0.15 l33/d57
-rota-cobalt 0:ca6ce47ada53 0.27 -0.19 l32/d76
-rota-cobalt 0:e594a1e64b7d 0.27 -0.19 l22/d48
-rota-cobalt 0:7062fafe1dab 0.27 -0.25 l65/d112
-rota-cobalt 0:778cb57b62fa 0.27 -0.25 l73/d112
-rota-cobalt 0:1b4471920f01 0.27 -0.18 l72/d83
+rota-cobalt 0:412a5c513322 0.02 -0.21 l104/d50
+rota-cobalt 0:304560bf3205 0.02 -0.15 l33/d57
+rota-cobalt 0:ca6ce47ada53 0.02 -0.19 l32/d76
+rota-cobalt 0:e594a1e64b7d 0.02 -0.19 l22/d48
+rota-cobalt 0:7062fafe1dab 0.02 -0.25 l65/d112
+rota-cobalt 0:778cb57b62fa 0.02 -0.25 l73/d112
+rota-cobalt 0:1b4471920f01 0.02 -0.18 l72/d83
rota-cobalt 0:288965a1f2c8 0.22 -0.37 management
rota-cobalt 0:6a61eb7383e8 0.03 -0.09 rosa
rota-cobalt 0:3bb0f0bb5552 -0.01 -0.64 09:00-18:00
diff --git a/qa/src/test/resources/docx-fidelity/libreoffice-windows.tsv b/qa/src/test/resources/docx-fidelity/libreoffice-windows.tsv
index 49ee62e39..0660c00ff 100644
--- a/qa/src/test/resources/docx-fidelity/libreoffice-windows.tsv
+++ b/qa/src/test/resources/docx-fidelity/libreoffice-windows.tsv
@@ -1,18 +1,18 @@
# libreoffice build bf6ef2662401 on windows
document engine_pages editor_pages lines matched median p90 over2
cv-blue_banner 2 2 54 52 0.13 0.45 0
-cv-boxed_sections 2 2 58 58 0.23 0.36 0
+cv-boxed_sections 2 2 58 58 0.09 0.34 0
cv-centered_headline 2 2 58 56 0.13 0.31 0
cv-charcoal_gold 1 1 85 83 0.17 0.24 0
-cv-classic_serif 2 2 57 54 0.10 0.28 0
-cv-compact_mono 1 1 58 58 0.17 0.30 0
+cv-classic_serif 2 2 57 54 0.07 0.15 0
+cv-compact_mono 1 1 58 58 0.17 0.29 0
cv-editorial_blue 2 2 82 82 0.14 0.30 0
cv-engineering_resume 1 1 57 57 0.26 0.38 0
cv-executive 2 2 60 60 0.26 0.50 0
cv-midnight_navy 1 1 86 84 0.28 0.87 0
-cv-minimal_underlined 2 2 59 59 0.33 0.62 0
+cv-minimal_underlined 2 2 59 59 0.29 0.54 0
cv-mint_editorial 2 2 59 59 0.07 0.30 0
-cv-modern_professional 2 2 61 59 0.04 0.29 0
+cv-modern_professional 2 2 61 59 0.04 0.28 0
cv-monogram_sidebar 1 1 53 50 0.20 0.44 0
cv-navy_sidebar 1 1 71 71 0.20 0.45 0
cv-nordic_clean 1 1 63 58 0.21 0.38 0
@@ -27,25 +27,25 @@ cv-terracotta_rail 1 1 102 102 0.44 0.94 0
cv-timeline_minimal 2 2 89 87 0.45 0.49 0
cv-violet_grid 1 1 80 78 0.26 0.54 0
invoice-classic 1 1 56 56 0.05 0.27 0
-invoice-classic_long 2 2 166 166 0.03 0.12 0
+invoice-classic_long 2 2 166 166 0.03 0.10 0
invoice-consulting 1 1 92 92 0.19 1.01 0
-invoice-consulting_long 2 2 236 236 0.23 0.78 0
-invoice-luma_studio 1 1 97 97 0.12 0.46 2
-invoice-luma_studio_long 3 3 192 192 0.12 0.41 2
+invoice-consulting_long 2 2 236 236 0.18 0.51 0
+invoice-luma_studio 1 1 97 97 0.14 0.46 2
+invoice-luma_studio_long 3 3 192 192 0.11 0.41 2
invoice-merchant 1 2 94 90 0.07 0.21 0
invoice-metered 1 1 99 99 0.10 0.83 0
-invoice-modern 1 1 54 54 0.10 0.20 0
-invoice-modern_long 2 2 162 162 0.10 0.15 0
+invoice-modern 1 1 54 54 0.08 0.17 0
+invoice-modern_long 2 2 162 162 0.07 0.12 0
invoice-obsidian 1 1 81 81 0.26 0.99 0
invoice-payments 1 1 104 104 0.05 0.21 0
invoice-platform 1 1 111 111 0.32 0.43 0
invoice-subscription 1 1 81 81 0.24 0.51 0
invoice-workspace 1 1 90 90 0.18 0.38 0
letter-blue_banner 1 1 10 10 0.21 0.46 0
-letter-boxed_sections 1 1 10 10 0.11 0.23 0
+letter-boxed_sections 1 1 10 10 0.09 0.13 0
letter-centered_headline 1 1 11 11 0.10 0.23 0
letter-classic_serif 1 1 10 10 0.10 0.15 0
-letter-compact_mono 1 1 10 8 0.24 0.35 0
+letter-compact_mono 1 1 10 8 0.13 0.35 0
letter-editorial_blue 1 1 12 12 0.07 0.16 0
letter-engineering_resume 1 1 15 15 0.19 0.41 0
letter-executive 1 1 12 12 0.18 0.30 0
@@ -58,7 +58,7 @@ letter-sidebar_portrait 1 1 12 12 0.41 0.49 0
letter-timeline_minimal 1 1 15 15 0.33 0.53 0
proposal-editorial 2 2 132 129 44.75 45.38 72
proposal-indigo 1 1 72 70 0.26 0.65 0
-proposal-modern 1 1 44 44 0.05 0.17 0
+proposal-modern 1 1 44 44 0.05 0.12 0
proposal-northline 2 2 132 132 0.17 0.45 0
-receipt-modern 1 1 57 57 0.09 0.29 0
-rota-cobalt 1 1 154 151 0.06 0.22 0
+receipt-modern 1 1 57 57 0.09 0.11 0
+rota-cobalt 1 1 154 151 0.04 0.19 0
diff --git a/qa/src/test/resources/docx-fidelity/word-windows-lines.tsv b/qa/src/test/resources/docx-fidelity/word-windows-lines.tsv
index 63f080e1b..eea5ab9a4 100644
--- a/qa/src/test/resources/docx-fidelity/word-windows-lines.tsv
+++ b/qa/src/test/resources/docx-fidelity/word-windows-lines.tsv
@@ -52,32 +52,32 @@ cv-blue_banner 0:88b226d51fe1 0.18 -0.08 pngdiffing,side-by-sidelayout,ba
cv-blue_banner 0:339245d63103 -0.12 -0.08 layoutlint(java21,javaparser,spo
cv-blue_banner 0:8c87b84946f3 0.22 -0.08 beforetheyshiptoproduction.
cv-boxed_sections 0:8f1010120ed6 0.54 0.10 jordanrivera
-cv-boxed_sections 0:8d7a2cca3060 0.20 -0.05 +442055551000|jordan.rivera@exam
-cv-boxed_sections 0:b944906ed84c 0.34 0.56 professionalsummary
+cv-boxed_sections 0:8d7a2cca3060 0.08 -0.05 +442055551000|jordan.rivera@exam
+cv-boxed_sections 0:b944906ed84c 0.10 0.56 professionalsummary
cv-boxed_sections 0:80cc87fdc4c4 0.05 -0.08 platformengineerwith10+yearsbuil
cv-boxed_sections 0:bddc0bd093ce 0.10 -0.08 systems.specialisedinhigh-throug
cv-boxed_sections 0:95a43d7b3df0 0.02 -0.08 snapshot-testedlibrariesthatscal
-cv-boxed_sections 0:5f94c50dc5bf 0.27 0.39 technicalskills
+cv-boxed_sections 0:5f94c50dc5bf 0.15 0.39 technicalskills
cv-boxed_sections 0:eea537278f83 0.23 -0.08 •languages:java21,kotlin,groovy,
cv-boxed_sections 0:9c2cd7231a53 0.23 -0.08 •document&print:pdfbox,apachepoi
cv-boxed_sections 0:7bf8639ec5d3 0.24 -0.08 •layoutengines:customdsldesign,s
cv-boxed_sections 0:8e66776d28d7 0.27 -0.08 •build&infrastructure:maven,grad
cv-boxed_sections 0:1ed4fc7d7768 0.28 -0.08 •testing:junit5,assertj,pdfbox-b
cv-boxed_sections 0:26671c309eb9 0.28 -0.08 •distribution:mavencentral,sonat
-cv-boxed_sections 0:68bf0109c6f8 0.41 0.29 education
-cv-boxed_sections 0:0ad1957d6bab 0.43 0.04 msccomputerscience
-cv-boxed_sections 0:3fa772117260 0.36 -0.87 2019-2021
+cv-boxed_sections 0:68bf0109c6f8 0.17 0.29 education
+cv-boxed_sections 0:0ad1957d6bab 0.07 0.04 msccomputerscience
+cv-boxed_sections 0:3fa772117260 0.12 -0.87 2019-2021
cv-boxed_sections 0:47ce0218bbea 0.07 -0.08 universityofmanchester
cv-boxed_sections 0:2ffe115b06e5 0.13 -0.08 distinction.thesis:composablelay
-cv-boxed_sections 0:b6749d0b616b 0.39 0.04 bscsoftwareengineering
-cv-boxed_sections 0:30f9262640a0 0.33 -0.87 2015-2019
+cv-boxed_sections 0:b6749d0b616b 0.15 0.04 bscsoftwareengineering
+cv-boxed_sections 0:30f9262640a0 0.21 -0.87 2015-2019
cv-boxed_sections 0:89ad9656f393 0.17 -0.08 imperialcollegelondon
cv-boxed_sections 0:baa173b4a82e 0.23 -0.08 first-classhonours.specialisatio
-cv-boxed_sections 0:6d3d5673c39f 0.50 0.04 oraclejavacertification
-cv-boxed_sections 0:d40b22f00acb 0.43 -0.87 2023-2024
+cv-boxed_sections 0:6d3d5673c39f 0.14 0.04 oraclejavacertification
+cv-boxed_sections 0:d40b22f00acb 0.19 -0.87 2023-2024
cv-boxed_sections 0:2669e1f6d55c 0.14 -0.08 professionaltrack
cv-boxed_sections 0:3857373829c1 0.20 -0.08 java17platformdeep-dive:records,
-cv-boxed_sections 0:2577c0f557b2 0.45 0.15 projects
+cv-boxed_sections 0:2577c0f557b2 0.33 0.15 projects
cv-boxed_sections 0:b2b029995203 0.40 -0.08 •graphcompose(java21,pdfbox,mave
cv-boxed_sections 0:67593a76ef70 0.13 -0.06 declarativejavapdflayoutengine.s
cv-boxed_sections 0:b9292cbd1454 0.17 -0.06 pipelinesforhiringtoolsandbillin
@@ -88,23 +88,23 @@ cv-boxed_sections 0:7488006d7864 0.18 -0.06 staticanalyserthatflagsfragileau
cv-boxed_sections 0:c4d0c415b4f8 0.23 -0.06 production.
cv-boxed_sections 0:fb1927f88597 0.43 -0.08 •chromeforge(java,graphcompose,p
cv-boxed_sections 0:e7e62230eb1f 0.40 -0.06 editorial-magazinedocumenttoolki
-cv-boxed_sections 0:c2f296ef30a3 0.52 0.54 professionalexperience
-cv-boxed_sections 0:a76f47480818 0.54 0.04 seniorplatformengineer
-cv-boxed_sections 0:060300b18051 0.47 0.07 2024-present
+cv-boxed_sections 0:c2f296ef30a3 0.28 0.54 professionalexperience
+cv-boxed_sections 0:a76f47480818 0.30 0.04 seniorplatformengineer
+cv-boxed_sections 0:060300b18051 0.35 0.07 2024-present
cv-boxed_sections 0:f890faef907f 0.32 -0.08 northwindsystems
cv-boxed_sections 1:49faf14f1f56 -0.06 -0.08 ledthereusabledocument-generatio
cv-boxed_sections 1:6bd3f168e89e -0.01 -0.08 maintenancetimeby70%byretiringpe
-cv-boxed_sections 1:daf65306b3b6 0.25 0.04 softwareengineer
-cv-boxed_sections 1:e7cc1822c6dc 0.19 -0.87 2021-2024
+cv-boxed_sections 1:daf65306b3b6 0.01 0.04 softwareengineer
+cv-boxed_sections 1:e7cc1822c6dc 0.07 -0.87 2021-2024
cv-boxed_sections 1:998c1a985022 0.03 -0.08 brightleaflabs
cv-boxed_sections 1:e55664011cda -0.03 -0.08 builtbackendservicesandproductio
cv-boxed_sections 1:e80236b6d2b1 0.02 -0.08 itexttoacustomlayoutengine,elimi
-cv-boxed_sections 1:41bb54fbae8d 0.28 0.04 backendengineer
-cv-boxed_sections 1:3fa772117260 0.34 -0.87 2019-2021
+cv-boxed_sections 1:41bb54fbae8d 0.04 0.04 backendengineer
+cv-boxed_sections 1:3fa772117260 0.10 -0.87 2019-2021
cv-boxed_sections 1:ef148f221e31 0.04 -0.08 helixprintco
cv-boxed_sections 1:9d31a6bfbc69 0.10 -0.08 maintainedahigh-volumeinvoice-pr
cv-boxed_sections 1:03af8a628309 0.03 -0.08 change.
-cv-boxed_sections 1:676dfdd56ad2 0.28 0.55 additionalinformation
+cv-boxed_sections 1:676dfdd56ad2 0.16 0.55 additionalinformation
cv-boxed_sections 1:f20997652453 0.11 -0.08 languages:english(fluent),german
cv-boxed_sections 1:ec9d3622395e 0.15 -0.08 workeligibility:eligibletoworkin
cv-boxed_sections 1:dd20ae01c3cf 0.15 -0.08 opensource:maintainerofgraphcomp
@@ -250,7 +250,7 @@ cv-charcoal_gold 0:3def82282260 0.16 -0.72 technicaltools
cv-charcoal_gold 0:eb04bd42c7fb 0.22 -1.03 microsoft365|jira|confluence|asa
cv-classic_serif 0:8f1010120ed6 0.19 0.09 jordanrivera
cv-classic_serif 0:8d7a2cca3060 0.15 -0.53 +442055551000|jordan.rivera@exam
-cv-classic_serif 0:3c69d6bb4892 0.28 1.37 professionalprofile
+cv-classic_serif 0:3c69d6bb4892 0.16 1.37 professionalprofile
cv-classic_serif 0:32c1cf49a2fe 0.31 0.04 skills
cv-classic_serif 0:873a24d153c8 0.25 0.04 languages:java21,kotlin,groovy,p
cv-classic_serif 0:05e907ef2b18 0.17 0.04 document&print:pdfbox,apachepoi(
@@ -259,19 +259,19 @@ cv-classic_serif 0:1cd141fef347 0.12 0.04 build&infrastructure:maven,gradl
cv-classic_serif 0:181ddda7f959 0.06 0.04 testing:junit5,assertj,pdfbox-ba
cv-classic_serif 0:c40c656d9558 0.10 0.04 distribution:mavencentral,sonaty
cv-classic_serif 0:53e5e7c5a884 0.16 0.04 experience
-cv-classic_serif 0:a76f47480818 0.37 0.04 seniorplatformengineer
-cv-classic_serif 0:060300b18051 0.29 0.07 2024-present
+cv-classic_serif 0:a76f47480818 0.13 0.04 seniorplatformengineer
+cv-classic_serif 0:060300b18051 0.17 0.07 2024-present
cv-classic_serif 0:f890faef907f 0.18 0.04 northwindsystems
cv-classic_serif 0:49faf14f1f56 -0.01 0.04 ledthereusabledocument-generatio
cv-classic_serif 0:6bd3f168e89e 0.06 0.04 maintenancetimeby70%byretiringpe
-cv-classic_serif 0:daf65306b3b6 0.39 0.04 softwareengineer
-cv-classic_serif 0:e7cc1822c6dc 0.31 1.06 2021-2024
+cv-classic_serif 0:daf65306b3b6 0.15 0.04 softwareengineer
+cv-classic_serif 0:e7cc1822c6dc 0.19 1.06 2021-2024
cv-classic_serif 0:998c1a985022 0.20 0.04 brightleaflabs
cv-classic_serif 0:e55664011cda 0.00 0.04 builtbackendservicesandproductio
cv-classic_serif 0:e80236b6d2b1 0.09 0.04 itexttoacustomlayoutengine,elimi
-cv-classic_serif 0:41bb54fbae8d 0.42 0.04 backendengineer
-cv-classic_serif 0:3fa772117260 0.34 1.06 2019-2021
-cv-classic_serif 0:3fa772117260#1 0.43 1.06 2019-2021
+cv-classic_serif 0:41bb54fbae8d 0.18 0.04 backendengineer
+cv-classic_serif 0:3fa772117260 0.22 1.06 2019-2021
+cv-classic_serif 0:3fa772117260#1 0.19 1.06 2019-2021
cv-classic_serif 0:ef148f221e31 0.23 0.04 helixprintco
cv-classic_serif 0:9d31a6bfbc69 0.04 0.04 maintainedahigh-volumeinvoice-pr
cv-classic_serif 0:03af8a628309 0.11 0.04 change.
@@ -286,15 +286,15 @@ cv-classic_serif 0:dc31b6a18325 0.19 0.04 staticanalyserthatflagsfragileau
cv-classic_serif 0:ee180ea1e0a5 0.23 0.04 chromeforge(java,graphcompose,pa
cv-classic_serif 0:e7e62230eb1f 0.18 0.04 editorial-magazinedocumenttoolki
cv-classic_serif 0:68bf0109c6f8 0.30 0.04 education
-cv-classic_serif 0:0ad1957d6bab 0.51 0.04 msccomputerscience
+cv-classic_serif 0:0ad1957d6bab 0.15 0.04 msccomputerscience
cv-classic_serif 0:47ce0218bbea 0.20 0.04 universityofmanchester
cv-classic_serif 0:2ffe115b06e5 0.25 0.04 distinction.thesis:composablelay
-cv-classic_serif 0:b6749d0b616b 0.47 0.04 bscsoftwareengineering
-cv-classic_serif 0:30f9262640a0 0.51 1.06 2015-2019
+cv-classic_serif 0:b6749d0b616b 0.23 0.04 bscsoftwareengineering
+cv-classic_serif 0:30f9262640a0 0.27 1.06 2015-2019
cv-classic_serif 1:89ad9656f393 0.24 0.04 imperialcollegelondon
cv-classic_serif 1:baa173b4a82e 0.05 0.04 first-classhonours.specialisatio
-cv-classic_serif 1:6d3d5673c39f 0.25 0.04 oraclejavacertification
-cv-classic_serif 1:d40b22f00acb 0.17 1.06 2023-2024
+cv-classic_serif 1:6d3d5673c39f 0.01 0.04 oraclejavacertification
+cv-classic_serif 1:d40b22f00acb 0.05 1.06 2023-2024
cv-classic_serif 1:2669e1f6d55c 0.08 0.04 professionaltrack
cv-classic_serif 1:3857373829c1 0.13 0.04 java17platformdeep-dive:records,
cv-classic_serif 1:7b476727faf3 0.14 0.04 additional
@@ -302,7 +302,7 @@ cv-classic_serif 1:f20997652453 0.03 0.04 languages:english(fluent),german
cv-classic_serif 1:ec9d3622395e -0.01 0.04 workeligibility:eligibletoworkin
cv-classic_serif 1:dd20ae01c3cf 0.06 0.04 opensource:maintainerofgraphcomp
cv-classic_serif 1:33c35e9d236d 0.02 0.04 speaking:jvmsummit2024,devoxxuk2
-cv-compact_mono 0:8f1010120ed6 0.39 0.00 jordanrivera
+cv-compact_mono 0:8f1010120ed6 0.03 0.00 jordanrivera
cv-compact_mono 0:f9e4560bd641 -0.26 0.00 london,uk/+442055551000/jordan.r
cv-compact_mono 0:32c1cf49a2fe 0.19 -0.04 skills
cv-compact_mono 0:551282493299 -0.10 -0.04 languagesjava21,kotlin,groovy,py
@@ -644,32 +644,32 @@ cv-midnight_navy 0:86e529fac99d -0.02 0.51 hubspotcontentmarketingcertified
cv-midnight_navy 0:200b36afcfde -0.07 0.04 hubspotacademy
cv-midnight_navy 0:1bea20e1df19 -0.02 0.04 2021
cv-minimal_underlined 0:8f1010120ed6 0.50 0.22 jordanrivera
-cv-minimal_underlined 0:8d7a2cca3060 0.18 0.07 +442055551000|jordan.rivera@exam
-cv-minimal_underlined 0:b944906ed84c 0.27 0.04 professionalsummary
+cv-minimal_underlined 0:8d7a2cca3060 0.06 0.07 +442055551000|jordan.rivera@exam
+cv-minimal_underlined 0:b944906ed84c 0.03 0.04 professionalsummary
cv-minimal_underlined 0:80cc87fdc4c4 -0.02 0.00 platformengineerwith10+yearsbuil
cv-minimal_underlined 0:bddc0bd093ce 0.03 0.00 systems.specialisedinhigh-throug
cv-minimal_underlined 0:95a43d7b3df0 0.07 0.00 snapshot-testedlibrariesthatscal
-cv-minimal_underlined 0:5f94c50dc5bf 0.42 0.04 technicalskills
+cv-minimal_underlined 0:5f94c50dc5bf 0.06 0.04 technicalskills
cv-minimal_underlined 0:eea537278f83 0.37 0.00 •languages:java21,kotlin,groovy,
cv-minimal_underlined 0:9c2cd7231a53 0.37 0.00 •document&print:pdfbox,apachepoi
cv-minimal_underlined 0:7bf8639ec5d3 0.38 0.00 •layoutengines:customdsldesign,s
cv-minimal_underlined 0:8e66776d28d7 0.41 0.00 •build&infrastructure:maven,grad
cv-minimal_underlined 0:1ed4fc7d7768 0.42 0.00 •testing:junit5,assertj,pdfbox-b
cv-minimal_underlined 0:26671c309eb9 0.42 0.00 •distribution:mavencentral,sonat
-cv-minimal_underlined 0:68bf0109c6f8 0.53 0.04 education
-cv-minimal_underlined 0:0ad1957d6bab 0.54 0.00 msccomputerscience
-cv-minimal_underlined 0:3fa772117260 0.59 -0.95 2019-2021
+cv-minimal_underlined 0:68bf0109c6f8 0.17 0.04 education
+cv-minimal_underlined 0:0ad1957d6bab 0.30 0.00 msccomputerscience
+cv-minimal_underlined 0:3fa772117260 0.35 -0.95 2019-2021
cv-minimal_underlined 0:47ce0218bbea 0.30 0.00 universityofmanchester
cv-minimal_underlined 0:2ffe115b06e5 0.36 0.00 distinction.thesis:composablelay
-cv-minimal_underlined 0:b6749d0b616b 0.62 0.00 bscsoftwareengineering
-cv-minimal_underlined 0:30f9262640a0 0.56 -0.95 2015-2019
+cv-minimal_underlined 0:b6749d0b616b 0.26 0.00 bscsoftwareengineering
+cv-minimal_underlined 0:30f9262640a0 0.32 -0.95 2015-2019
cv-minimal_underlined 0:89ad9656f393 0.26 0.00 imperialcollegelondon
cv-minimal_underlined 0:baa173b4a82e 0.34 0.00 first-classhonours.specialisatio
-cv-minimal_underlined 0:6d3d5673c39f 0.61 0.00 oraclejavacertification
-cv-minimal_underlined 0:d40b22f00acb 0.66 -0.95 2023-2024
+cv-minimal_underlined 0:6d3d5673c39f 0.37 0.00 oraclejavacertification
+cv-minimal_underlined 0:d40b22f00acb 0.42 -0.95 2023-2024
cv-minimal_underlined 0:2669e1f6d55c 0.37 0.00 professionaltrack
cv-minimal_underlined 0:3857373829c1 0.43 0.00 java17platformdeep-dive:records,
-cv-minimal_underlined 0:2577c0f557b2 0.65 0.04 projects
+cv-minimal_underlined 0:2577c0f557b2 0.41 0.04 projects
cv-minimal_underlined 0:b2b029995203 0.60 0.00 •graphcompose(java21,pdfbox,mave
cv-minimal_underlined 0:67593a76ef70 0.45 0.02 declarativejavapdflayoutengine.s
cv-minimal_underlined 0:b9292cbd1454 0.49 0.02 pipelinesforhiringtoolsandbillin
@@ -681,23 +681,23 @@ cv-minimal_underlined 0:7488006d7864 0.43 0.02 staticanalyserthatflagsfragileau
cv-minimal_underlined 0:c4d0c415b4f8 0.47 0.02 production.
cv-minimal_underlined 0:fb1927f88597 0.80 0.00 •chromeforge(java,graphcompose,p
cv-minimal_underlined 0:e7e62230eb1f 0.88 0.02 editorial-magazinedocumenttoolki
-cv-minimal_underlined 0:c2f296ef30a3 0.86 0.04 professionalexperience
-cv-minimal_underlined 0:a76f47480818 0.87 0.00 seniorplatformengineer
-cv-minimal_underlined 0:060300b18051 0.81 -0.01 2024-present
+cv-minimal_underlined 0:c2f296ef30a3 0.50 0.04 professionalexperience
+cv-minimal_underlined 0:a76f47480818 0.63 0.00 seniorplatformengineer
+cv-minimal_underlined 0:060300b18051 0.69 -0.01 2024-present
cv-minimal_underlined 0:f890faef907f 0.66 0.00 northwindsystems
cv-minimal_underlined 1:49faf14f1f56 -0.10 0.00 ledthereusabledocument-generatio
cv-minimal_underlined 1:6bd3f168e89e -0.05 0.00 maintenancetimeby70%byretiringpe
-cv-minimal_underlined 1:daf65306b3b6 0.21 0.00 softwareengineer
-cv-minimal_underlined 1:e7cc1822c6dc 0.27 -0.95 2021-2024
+cv-minimal_underlined 1:daf65306b3b6 -0.03 0.00 softwareengineer
+cv-minimal_underlined 1:e7cc1822c6dc 0.03 -0.95 2021-2024
cv-minimal_underlined 1:998c1a985022 -0.01 0.00 brightleaflabs
cv-minimal_underlined 1:e55664011cda 0.05 0.00 builtbackendservicesandproductio
cv-minimal_underlined 1:e80236b6d2b1 -0.02 0.00 itexttoacustomlayoutengine,elimi
-cv-minimal_underlined 1:41bb54fbae8d 0.36 0.00 backendengineer
-cv-minimal_underlined 1:3fa772117260 0.30 -0.95 2019-2021
+cv-minimal_underlined 1:41bb54fbae8d 0.00 0.00 backendengineer
+cv-minimal_underlined 1:3fa772117260 0.06 -0.95 2019-2021
cv-minimal_underlined 1:ef148f221e31 0.00 0.00 helixprintco
cv-minimal_underlined 1:9d31a6bfbc69 0.06 0.00 maintainedahigh-volumeinvoice-pr
cv-minimal_underlined 1:03af8a628309 0.11 0.00 change.
-cv-minimal_underlined 1:676dfdd56ad2 0.33 0.04 additionalinformation
+cv-minimal_underlined 1:676dfdd56ad2 0.09 0.04 additionalinformation
cv-minimal_underlined 1:f20997652453 0.16 0.00 languages:english(fluent),german
cv-minimal_underlined 1:ec9d3622395e 0.20 0.00 workeligibility:eligibletoworkin
cv-minimal_underlined 1:dd20ae01c3cf 0.20 0.00 opensource:maintainerofgraphcomp
@@ -774,17 +774,17 @@ cv-modern_professional 0:8e66776d28d7 0.30 0.00 •build&infrastructure:maven,gr
cv-modern_professional 0:1ed4fc7d7768 0.33 0.00 •testing:junit5,assertj,pdfbox-b
cv-modern_professional 0:26671c309eb9 0.36 0.00 •distribution:mavencentral,sonat
cv-modern_professional 0:68bf0109c6f8 0.11 0.00 education
-cv-modern_professional 0:0ad1957d6bab 0.41 0.00 msccomputerscience
-cv-modern_professional 0:3fa772117260 0.40 0.07 2019-2021
-cv-modern_professional 0:3fa772117260#1 0.41 0.07 2019-2021
+cv-modern_professional 0:0ad1957d6bab 0.17 0.00 msccomputerscience
+cv-modern_professional 0:3fa772117260 0.16 0.07 2019-2021
+cv-modern_professional 0:3fa772117260#1 0.29 0.07 2019-2021
cv-modern_professional 0:47ce0218bbea 0.05 0.00 universityofmanchester
cv-modern_professional 0:2ffe115b06e5 0.18 0.00 distinction.thesis:composablelay
-cv-modern_professional 0:b6749d0b616b 0.32 0.00 bscsoftwareengineering
-cv-modern_professional 0:30f9262640a0 0.43 0.07 2015-2019
+cv-modern_professional 0:b6749d0b616b 0.20 0.00 bscsoftwareengineering
+cv-modern_professional 0:30f9262640a0 0.19 0.07 2015-2019
cv-modern_professional 0:89ad9656f393 0.08 0.00 imperialcollegelondon
cv-modern_professional 0:baa173b4a82e 0.21 0.00 first-classhonours.specialisatio
-cv-modern_professional 0:6d3d5673c39f 0.35 0.00 oraclejavacertification
-cv-modern_professional 0:d40b22f00acb 0.35 0.07 2023-2024
+cv-modern_professional 0:6d3d5673c39f 0.23 0.00 oraclejavacertification
+cv-modern_professional 0:d40b22f00acb 0.22 0.07 2023-2024
cv-modern_professional 0:2669e1f6d55c 0.11 0.00 professionaltrack
cv-modern_professional 0:3857373829c1 0.24 0.00 java17platformdeep-dive:records,
cv-modern_professional 0:2577c0f557b2 0.10 0.00 projects
@@ -801,17 +801,17 @@ cv-modern_professional 0:fb1927f88597 0.44 0.00 •chromeforge(java,graphcompose
cv-modern_professional 0:cda7db6c6ea6 0.07 0.00 editorial-magazinedocumenttoolki
cv-modern_professional 0:fe63fe18585a 0.15 0.00 callouts.
cv-modern_professional 0:c2f296ef30a3 0.14 0.00 professionalexperience
-cv-modern_professional 0:a76f47480818 0.44 0.00 seniorplatformengineer
-cv-modern_professional 0:060300b18051 0.43 0.17 2024-present
+cv-modern_professional 0:a76f47480818 0.20 0.00 seniorplatformengineer
+cv-modern_professional 0:060300b18051 0.20 0.17 2024-present
cv-modern_professional 0:f890faef907f 0.20 0.00 northwindsystems
cv-modern_professional 0:a6525dacbac7 0.09 0.00 ledthereusabledocument-generatio
cv-modern_professional 0:15e3905f4890 0.17 0.00 reducedtemplatemaintenancetimeby
-cv-modern_professional 0:daf65306b3b6 0.43 0.00 softwareengineer
-cv-modern_professional 0:e7cc1822c6dc 0.42 0.07 2021-2024
+cv-modern_professional 0:daf65306b3b6 0.19 0.00 softwareengineer
+cv-modern_professional 0:e7cc1822c6dc 0.18 0.07 2021-2024
cv-modern_professional 0:998c1a985022 0.19 0.00 brightleaflabs
cv-modern_professional 0:e86691b0219f 0.09 0.00 builtbackendservicesandproductio
cv-modern_professional 0:4ec57434564a 0.16 0.00 migrationfromitexttoacustomlayou
-cv-modern_professional 0:41bb54fbae8d 0.41 0.00 backendengineer
+cv-modern_professional 0:41bb54fbae8d 0.29 0.00 backendengineer
cv-modern_professional 0:ef148f221e31 0.18 0.00 helixprintco
cv-modern_professional 0:a32c7f2401d9 0.07 0.00 maintainedahigh-volumeinvoice-pr
cv-modern_professional 0:7068c1d7034b 0.17 0.00 everytemplatechange.
@@ -1802,23 +1802,23 @@ cv-violet_grid 0:9c9b13446cd9 -1.42 0.04 spanish
cv-violet_grid 0:e35242c809c8 -1.45 0.04 portuguese
cv-violet_grid 0:c5d1de4964d6 -1.32 0.08 conversational
cv-violet_grid 0:1de4fede4f63 -1.21 -0.38 idesignwithempathy,iteratewithpu
-invoice-classic 0:c26c22b94338 0.51 0.00 graphcomposestudio
+invoice-classic 0:c26c22b94338 0.15 0.00 graphcomposestudio
invoice-classic 0:c26c22b94338#1 0.10 0.01 graphcomposestudio
invoice-classic 0:2a08ce5567fb 0.17 0.00 18layoutstreet
invoice-classic 0:2a08ce5567fb#1 0.05 0.01 18layoutstreet
invoice-classic 0:52d6e3de4fa0 0.30 0.01 invoice
invoice-classic 0:38e9951985e4 0.20 0.01 gc-2026-041
invoice-classic 0:20fe884effee 0.23 0.01 issued02apr2026
-invoice-classic 0:57a66d21eb1b 0.36 0.04 totaldue
+invoice-classic 0:57a66d21eb1b 0.12 0.04 totaldue
invoice-classic 0:30d85a94548c 0.03 0.04 invoicegc-2026-041issued02apr202
-invoice-classic 0:aeba3a7b3598 0.40 0.00 billto
+invoice-classic 0:aeba3a7b3598 0.16 0.00 billto
invoice-classic 0:f890faef907f 0.10 0.00 northwindsystems
invoice-classic 0:1b405eb431ca 0.05 0.00 attn:financeteam
invoice-classic 0:91eefd794f79 -0.03 0.00 410marketavenue
invoice-classic 0:00a97da4e243 0.02 0.00 manchester,uk
invoice-classic 0:62fcfa8745fc -0.06 0.00 ap@northwind.example
invoice-classic 0:2081a41a7764 -0.13 0.00 +441615552200
-invoice-classic 0:75857a458999 0.40 0.01 from
+invoice-classic 0:75857a458999 0.16 0.01 from
invoice-classic 0:fbeea547d99e -0.03 0.01 london,uk
invoice-classic 0:faf1569a98e9 0.02 0.01 ec1a4gc
invoice-classic 0:befc6e9b5c24 -0.06 0.01 billing@graphcompose.dev
@@ -1858,23 +1858,23 @@ invoice-classic 0:8822ea375315 0.27 0.04 remittancedetails.
invoice-classic 0:1a7b5c840e25 0.28 0.07 •latepaymentsmaydelayadditional
invoice-classic 0:1631a06d245f 0.29 0.04 templatecustomizationwork.
invoice-classic 0:e3337beaa171 0.16 0.00 thankyouforchoosinggraphcomposef
-invoice-classic_long 0:c26c22b94338 0.51 0.00 graphcomposestudio
+invoice-classic_long 0:c26c22b94338 0.15 0.00 graphcomposestudio
invoice-classic_long 0:c26c22b94338#1 0.10 0.01 graphcomposestudio
invoice-classic_long 0:2a08ce5567fb 0.17 0.00 18layoutstreet
invoice-classic_long 0:2a08ce5567fb#1 0.05 0.01 18layoutstreet
invoice-classic_long 0:52d6e3de4fa0 0.30 0.01 invoice
invoice-classic_long 0:3594d2085950 0.20 0.01 gc-2026-042
invoice-classic_long 0:25851a973edd 0.23 0.01 issued04may2026
-invoice-classic_long 0:57a66d21eb1b 0.36 0.04 totaldue
+invoice-classic_long 0:57a66d21eb1b 0.12 0.04 totaldue
invoice-classic_long 0:9eea1e05ff47 0.03 0.04 invoicegc-2026-042issued04may202
-invoice-classic_long 0:aeba3a7b3598 0.40 0.00 billto
+invoice-classic_long 0:aeba3a7b3598 0.16 0.00 billto
invoice-classic_long 0:f890faef907f 0.10 0.00 northwindsystems
invoice-classic_long 0:1b405eb431ca 0.05 0.00 attn:financeteam
invoice-classic_long 0:91eefd794f79 -0.03 0.00 410marketavenue
invoice-classic_long 0:00a97da4e243 0.02 0.00 manchester,uk
invoice-classic_long 0:62fcfa8745fc -0.06 0.00 ap@northwind.example
invoice-classic_long 0:2081a41a7764 -0.13 0.00 +441615552200
-invoice-classic_long 0:75857a458999 0.40 0.01 from
+invoice-classic_long 0:75857a458999 0.16 0.01 from
invoice-classic_long 0:fbeea547d99e -0.03 0.01 london,uk
invoice-classic_long 0:faf1569a98e9 0.02 0.01 ec1a4gc
invoice-classic_long 0:befc6e9b5c24 -0.06 0.01 billing@graphcompose.dev
@@ -2065,32 +2065,32 @@ invoice-consulting 0:4e9682fa850e 0.35 0.08 hrs
invoice-consulting 0:4e9682fa850e#1 0.38 0.08 hrs
invoice-consulting 0:aa92f0e23a97 0.36 0.51 250.00
invoice-consulting 0:e48d9b7a2993 0.36 0.50 2,500.00
-invoice-consulting 0:1bcfde966d94 0.59 0.09 strategicconsultation
-invoice-consulting 0:fd3ca268f319 0.55 0.09 leadershipalignmentworkshops
+invoice-consulting 0:1bcfde966d94 0.23 0.09 strategicconsultation
+invoice-consulting 0:fd3ca268f319 0.31 0.09 leadershipalignmentworkshops
invoice-consulting 0:8d93e0c47a8c 0.37 0.40 1–15may2025
invoice-consulting 0:cf9dcf6da8a8 0.39 0.08 1.00
invoice-consulting 0:cf9dcf6da8a8#1 0.40 0.08 1.00
invoice-consulting 0:cf9dcf6da8a8#2 0.44 0.08 1.00
invoice-consulting 0:97e47b250054 0.37 0.54 3,500.00
invoice-consulting 0:97e47b250054#1 0.37 0.49 3,500.00
-invoice-consulting 0:5581aef375ff 0.60 0.09 market&competitiveanalysis
-invoice-consulting 0:957080ea09d9 0.56 0.09 researchandanalysisreport
+invoice-consulting 0:5581aef375ff 0.24 0.09 market&competitiveanalysis
+invoice-consulting 0:957080ea09d9 0.32 0.09 researchandanalysisreport
invoice-consulting 0:47102c31f226 0.38 0.37 5–20may2025
invoice-consulting 0:ec6305055be9 0.38 0.63 4,800.00
invoice-consulting 0:ec6305055be9#1 0.38 0.57 4,800.00
-invoice-consulting 0:53dea97cf116 0.61 0.09 digitalroadmapdevelopment
-invoice-consulting 0:acf357e68297 0.57 0.09 strategyandroadmapcreation
+invoice-consulting 0:53dea97cf116 0.25 0.09 digitalroadmapdevelopment
+invoice-consulting 0:acf357e68297 0.33 0.09 strategyandroadmapcreation
invoice-consulting 0:c947fb16eab2 0.39 0.43 15–22may2025
invoice-consulting 0:017144e2271f 0.41 0.07 6.00
invoice-consulting 0:be6012a47af0 0.39 0.47 220.00
invoice-consulting 0:172c0a785bc7 0.39 0.50 1,320.00
-invoice-consulting 0:fe04037aa850 0.62 0.09 stakeholderreviewsessions
-invoice-consulting 0:4658a1bff292 0.70 0.09 facilitationanddocumentation
+invoice-consulting 0:fe04037aa850 0.26 0.09 stakeholderreviewsessions
+invoice-consulting 0:4658a1bff292 0.34 0.09 facilitationanddocumentation
invoice-consulting 0:86f73207c794 0.42 0.40 20–25may2025
invoice-consulting 0:55907ef405f6 0.42 0.58 1,880.00
invoice-consulting 0:55907ef405f6#1 0.42 0.53 1,880.00
-invoice-consulting 0:f2e12ad6cc9f 0.65 0.09 presentation&finalreport
-invoice-consulting 0:50de6dc61b80 0.73 0.09 executivepresentationanddelivery
+invoice-consulting 0:f2e12ad6cc9f 0.29 0.09 presentation&finalreport
+invoice-consulting 0:50de6dc61b80 0.37 0.09 executivepresentationanddelivery
invoice-consulting 0:d6577e95efba 0.21 0.09 subtotal
invoice-consulting 0:6311b1798398 0.43 0.59 14,000.00
invoice-consulting 0:e370855bde0c 0.17 0.09 gst(10%)
@@ -2113,7 +2113,7 @@ invoice-consulting 0:7c6ab37d83ef 0.53 0.10 thankyouforyourbusiness.
invoice-consulting 0:4a699e29a3bb 0.45 0.10 ifyouhaveanyquestionsregardingth
invoice-consulting 0:c766251af1f4 0.51 0.10 contactusataccounts@northpoint.c
invoice-consulting 0:3d32fa219332 0.60 0.10 +61398765432.
-invoice-consulting 0:a6f6e2ddab6d 1.12 0.10 paymentisduewithin30daysfromthei
+invoice-consulting 0:a6f6e2ddab6d 1.00 0.10 paymentisduewithin30daysfromthei
invoice-consulting 0:55ee5fe62c33 0.15 0.06 northpointconsultingptyltd|abn12
invoice-consulting 0:bdbada284e80 0.15 0.16 page1/1
invoice-consulting_long 0:d44ceaea97d1 0.26 0.02 level8,1collinsstreet
@@ -2152,28 +2152,28 @@ invoice-consulting_long 0:3ff0b4a2706b#1 0.25 -0.11 (aud)
invoice-consulting_long 0:cf38d95c9c6b 0.27 -0.24 amount
invoice-consulting_long 0:b344321f5471 0.36 0.40 1–10may2025
invoice-consulting_long 0:b344321f5471#1 0.43 0.40 1–10may2025
-invoice-consulting_long 0:b344321f5471#2 0.63 0.40 1–10may2025
+invoice-consulting_long 0:b344321f5471#2 0.51 0.40 1–10may2025
invoice-consulting_long 0:a8994a9020c4 0.38 0.06 10.00
invoice-consulting_long 0:a8994a9020c4#1 0.45 0.06 10.00
invoice-consulting_long 0:a8994a9020c4#2 0.53 0.06 10.00
invoice-consulting_long 0:4e9682fa850e 0.35 0.08 hrs
invoice-consulting_long 0:4e9682fa850e#1 0.38 0.08 hrs
invoice-consulting_long 0:4e9682fa850e#2 0.42 0.08 hrs
-invoice-consulting_long 0:4e9682fa850e#3 0.57 0.08 hrs
+invoice-consulting_long 0:4e9682fa850e#3 0.45 0.08 hrs
invoice-consulting_long 0:4e9682fa850e#4 0.62 0.08 hrs
invoice-consulting_long 0:4e9682fa850e#5 0.64 0.08 hrs
invoice-consulting_long 0:aa92f0e23a97 0.36 0.51 250.00
invoice-consulting_long 0:aa92f0e23a97#1 0.43 0.51 250.00
-invoice-consulting_long 0:aa92f0e23a97#2 0.63 0.51 250.00
+invoice-consulting_long 0:aa92f0e23a97#2 0.51 0.51 250.00
invoice-consulting_long 0:e48d9b7a2993 0.36 0.50 2,500.00
invoice-consulting_long 0:e48d9b7a2993#1 0.43 0.50 2,500.00
-invoice-consulting_long 0:e48d9b7a2993#2 0.63 0.50 2,500.00
-invoice-consulting_long 0:1bcfde966d94 0.59 0.09 strategicconsultation
-invoice-consulting_long 0:1bcfde966d94#1 0.66 0.09 strategicconsultation
-invoice-consulting_long 0:1bcfde966d94#2 0.86 0.09 strategicconsultation
-invoice-consulting_long 0:fd3ca268f319 0.55 0.09 leadershipalignmentworkshops
-invoice-consulting_long 0:fd3ca268f319#1 0.74 0.09 leadershipalignmentworkshops
-invoice-consulting_long 0:fd3ca268f319#2 0.82 0.09 leadershipalignmentworkshops
+invoice-consulting_long 0:e48d9b7a2993#2 0.51 0.50 2,500.00
+invoice-consulting_long 0:1bcfde966d94 0.23 0.09 strategicconsultation
+invoice-consulting_long 0:1bcfde966d94#1 0.30 0.09 strategicconsultation
+invoice-consulting_long 0:1bcfde966d94#2 0.50 0.09 strategicconsultation
+invoice-consulting_long 0:fd3ca268f319 0.31 0.09 leadershipalignmentworkshops
+invoice-consulting_long 0:fd3ca268f319#1 0.38 0.09 leadershipalignmentworkshops
+invoice-consulting_long 0:fd3ca268f319#2 0.58 0.09 leadershipalignmentworkshops
invoice-consulting_long 0:8d93e0c47a8c 0.37 0.40 1–15may2025
invoice-consulting_long 0:8d93e0c47a8c#1 0.44 0.40 1–15may2025
invoice-consulting_long 0:8d93e0c47a8c#2 0.64 0.40 1–15may2025
@@ -2192,12 +2192,12 @@ invoice-consulting_long 0:97e47b250054#2 0.44 0.54 3,500.00
invoice-consulting_long 0:97e47b250054#3 0.44 0.49 3,500.00
invoice-consulting_long 0:97e47b250054#4 0.64 0.54 3,500.00
invoice-consulting_long 0:97e47b250054#5 0.64 0.49 3,500.00
-invoice-consulting_long 0:5581aef375ff 0.60 0.09 market&competitiveanalysis
-invoice-consulting_long 0:5581aef375ff#1 0.67 0.09 market&competitiveanalysis
-invoice-consulting_long 0:5581aef375ff#2 0.87 0.09 market&competitiveanalysis
-invoice-consulting_long 0:957080ea09d9 0.56 0.09 researchandanalysisreport
-invoice-consulting_long 0:957080ea09d9#1 0.75 0.09 researchandanalysisreport
-invoice-consulting_long 0:957080ea09d9#2 0.83 0.09 researchandanalysisreport
+invoice-consulting_long 0:5581aef375ff 0.24 0.09 market&competitiveanalysis
+invoice-consulting_long 0:5581aef375ff#1 0.31 0.09 market&competitiveanalysis
+invoice-consulting_long 0:5581aef375ff#2 0.51 0.09 market&competitiveanalysis
+invoice-consulting_long 0:957080ea09d9 0.32 0.09 researchandanalysisreport
+invoice-consulting_long 0:957080ea09d9#1 0.39 0.09 researchandanalysisreport
+invoice-consulting_long 0:957080ea09d9#2 0.59 0.09 researchandanalysisreport
invoice-consulting_long 0:47102c31f226 0.38 0.37 5–20may2025
invoice-consulting_long 0:47102c31f226#1 0.45 0.37 5–20may2025
invoice-consulting_long 0:47102c31f226#2 0.65 0.37 5–20may2025
@@ -2207,12 +2207,12 @@ invoice-consulting_long 0:ec6305055be9#2 0.45 0.63 4,800.00
invoice-consulting_long 0:ec6305055be9#3 0.45 0.57 4,800.00
invoice-consulting_long 0:ec6305055be9#4 0.65 0.63 4,800.00
invoice-consulting_long 0:ec6305055be9#5 0.65 0.57 4,800.00
-invoice-consulting_long 0:53dea97cf116 0.61 0.09 digitalroadmapdevelopment
-invoice-consulting_long 0:53dea97cf116#1 0.68 0.09 digitalroadmapdevelopment
-invoice-consulting_long 0:53dea97cf116#2 0.88 0.09 digitalroadmapdevelopment
-invoice-consulting_long 0:acf357e68297 0.57 0.09 strategyandroadmapcreation
-invoice-consulting_long 0:acf357e68297#1 0.76 0.09 strategyandroadmapcreation
-invoice-consulting_long 0:acf357e68297#2 0.84 0.09 strategyandroadmapcreation
+invoice-consulting_long 0:53dea97cf116 0.25 0.09 digitalroadmapdevelopment
+invoice-consulting_long 0:53dea97cf116#1 0.32 0.09 digitalroadmapdevelopment
+invoice-consulting_long 0:53dea97cf116#2 0.52 0.09 digitalroadmapdevelopment
+invoice-consulting_long 0:acf357e68297 0.33 0.09 strategyandroadmapcreation
+invoice-consulting_long 0:acf357e68297#1 0.40 0.09 strategyandroadmapcreation
+invoice-consulting_long 0:acf357e68297#2 0.60 0.09 strategyandroadmapcreation
invoice-consulting_long 0:c947fb16eab2 0.39 0.43 15–22may2025
invoice-consulting_long 0:c947fb16eab2#1 0.46 0.43 15–22may2025
invoice-consulting_long 0:c947fb16eab2#2 0.66 0.43 15–22may2025
@@ -2225,12 +2225,12 @@ invoice-consulting_long 0:be6012a47af0#2 0.66 0.47 220.00
invoice-consulting_long 0:172c0a785bc7 0.39 0.50 1,320.00
invoice-consulting_long 0:172c0a785bc7#1 0.46 0.50 1,320.00
invoice-consulting_long 0:172c0a785bc7#2 0.66 0.50 1,320.00
-invoice-consulting_long 0:fe04037aa850 0.62 0.09 stakeholderreviewsessions
-invoice-consulting_long 0:fe04037aa850#1 0.69 0.09 stakeholderreviewsessions
-invoice-consulting_long 0:fe04037aa850#2 0.89 0.09 stakeholderreviewsessions
-invoice-consulting_long 0:4658a1bff292 0.70 0.09 facilitationanddocumentation
-invoice-consulting_long 0:4658a1bff292#1 0.77 0.09 facilitationanddocumentation
-invoice-consulting_long 0:4658a1bff292#2 0.84 0.09 facilitationanddocumentation
+invoice-consulting_long 0:fe04037aa850 0.26 0.09 stakeholderreviewsessions
+invoice-consulting_long 0:fe04037aa850#1 0.33 0.09 stakeholderreviewsessions
+invoice-consulting_long 0:fe04037aa850#2 0.53 0.09 stakeholderreviewsessions
+invoice-consulting_long 0:4658a1bff292 0.34 0.09 facilitationanddocumentation
+invoice-consulting_long 0:4658a1bff292#1 0.41 0.09 facilitationanddocumentation
+invoice-consulting_long 0:4658a1bff292#2 0.60 0.09 facilitationanddocumentation
invoice-consulting_long 0:86f73207c794 0.42 0.40 20–25may2025
invoice-consulting_long 0:86f73207c794#1 0.47 0.40 20–25may2025
invoice-consulting_long 0:86f73207c794#2 0.67 0.40 20–25may2025
@@ -2240,12 +2240,12 @@ invoice-consulting_long 0:55907ef405f6#2 0.47 0.58 1,880.00
invoice-consulting_long 0:55907ef405f6#3 0.47 0.53 1,880.00
invoice-consulting_long 0:55907ef405f6#4 0.67 0.58 1,880.00
invoice-consulting_long 0:55907ef405f6#5 0.67 0.53 1,880.00
-invoice-consulting_long 0:f2e12ad6cc9f 0.65 0.09 presentation&finalreport
-invoice-consulting_long 0:f2e12ad6cc9f#1 0.70 0.09 presentation&finalreport
-invoice-consulting_long 0:f2e12ad6cc9f#2 0.90 0.09 presentation&finalreport
-invoice-consulting_long 0:50de6dc61b80 0.73 0.09 executivepresentationanddelivery
-invoice-consulting_long 0:50de6dc61b80#1 0.81 0.09 executivepresentationanddelivery
-invoice-consulting_long 0:50de6dc61b80#2 0.85 0.09 executivepresentationanddelivery
+invoice-consulting_long 0:f2e12ad6cc9f 0.29 0.09 presentation&finalreport
+invoice-consulting_long 0:f2e12ad6cc9f#1 0.46 0.09 presentation&finalreport
+invoice-consulting_long 0:f2e12ad6cc9f#2 0.54 0.09 presentation&finalreport
+invoice-consulting_long 0:50de6dc61b80 0.37 0.09 executivepresentationanddelivery
+invoice-consulting_long 0:50de6dc61b80#1 0.57 0.09 executivepresentationanddelivery
+invoice-consulting_long 0:50de6dc61b80#2 0.61 0.09 executivepresentationanddelivery
invoice-consulting_long 0:55ee5fe62c33 0.15 0.06 northpointconsultingptyltd|abn12
invoice-consulting_long 0:c843aa25b80f 0.15 0.16 page1/2
invoice-consulting_long 1:c9046f7a37ad 0.05 -0.54 description
@@ -2272,15 +2272,15 @@ invoice-consulting_long 1:aa92f0e23a97#2 0.30 0.51 250.00
invoice-consulting_long 1:e48d9b7a2993 0.03 0.50 2,500.00
invoice-consulting_long 1:e48d9b7a2993#1 0.22 0.50 2,500.00
invoice-consulting_long 1:e48d9b7a2993#2 0.30 0.50 2,500.00
-invoice-consulting_long 1:1bcfde966d94 0.26 0.09 strategicconsultation
-invoice-consulting_long 1:1bcfde966d94#1 0.45 0.09 strategicconsultation
-invoice-consulting_long 1:1bcfde966d94#2 0.53 0.09 strategicconsultation
-invoice-consulting_long 1:fd3ca268f319 0.34 0.09 leadershipalignmentworkshops
-invoice-consulting_long 1:fd3ca268f319#1 0.41 0.09 leadershipalignmentworkshops
-invoice-consulting_long 1:fd3ca268f319#2 0.61 0.09 leadershipalignmentworkshops
+invoice-consulting_long 1:1bcfde966d94 0.02 0.09 strategicconsultation
+invoice-consulting_long 1:1bcfde966d94#1 0.09 0.09 strategicconsultation
+invoice-consulting_long 1:1bcfde966d94#2 0.17 0.09 strategicconsultation
+invoice-consulting_long 1:fd3ca268f319 0.10 0.09 leadershipalignmentworkshops
+invoice-consulting_long 1:fd3ca268f319#1 0.17 0.09 leadershipalignmentworkshops
+invoice-consulting_long 1:fd3ca268f319#2 0.25 0.09 leadershipalignmentworkshops
invoice-consulting_long 1:8d93e0c47a8c 0.18 0.40 1–15may2025
invoice-consulting_long 1:8d93e0c47a8c#1 0.26 0.40 1–15may2025
-invoice-consulting_long 1:cf9dcf6da8a8 0.08 0.08 1.00
+invoice-consulting_long 1:cf9dcf6da8a8 0.20 0.08 1.00
invoice-consulting_long 1:cf9dcf6da8a8#1 0.21 0.08 1.00
invoice-consulting_long 1:cf9dcf6da8a8#2 0.23 0.08 1.00
invoice-consulting_long 1:cf9dcf6da8a8#3 0.25 0.08 1.00
@@ -2290,20 +2290,20 @@ invoice-consulting_long 1:97e47b250054 0.18 0.54 3,500.00
invoice-consulting_long 1:97e47b250054#1 0.18 0.49 3,500.00
invoice-consulting_long 1:97e47b250054#2 0.26 0.54 3,500.00
invoice-consulting_long 1:97e47b250054#3 0.26 0.49 3,500.00
-invoice-consulting_long 1:5581aef375ff 0.41 0.09 market&competitiveanalysis
-invoice-consulting_long 1:5581aef375ff#1 0.46 0.09 market&competitiveanalysis
-invoice-consulting_long 1:957080ea09d9 0.37 0.09 researchandanalysisreport
-invoice-consulting_long 1:957080ea09d9#1 0.57 0.09 researchandanalysisreport
+invoice-consulting_long 1:5581aef375ff 0.05 0.09 market&competitiveanalysis
+invoice-consulting_long 1:5581aef375ff#1 0.10 0.09 market&competitiveanalysis
+invoice-consulting_long 1:957080ea09d9 0.13 0.09 researchandanalysisreport
+invoice-consulting_long 1:957080ea09d9#1 0.21 0.09 researchandanalysisreport
invoice-consulting_long 1:47102c31f226 0.19 0.37 5–20may2025
invoice-consulting_long 1:47102c31f226#1 0.27 0.37 5–20may2025
invoice-consulting_long 1:ec6305055be9 0.19 0.63 4,800.00
invoice-consulting_long 1:ec6305055be9#1 0.19 0.57 4,800.00
invoice-consulting_long 1:ec6305055be9#2 0.27 0.63 4,800.00
invoice-consulting_long 1:ec6305055be9#3 0.27 0.57 4,800.00
-invoice-consulting_long 1:53dea97cf116 0.42 0.09 digitalroadmapdevelopment
-invoice-consulting_long 1:53dea97cf116#1 0.50 0.09 digitalroadmapdevelopment
-invoice-consulting_long 1:acf357e68297 0.38 0.09 strategyandroadmapcreation
-invoice-consulting_long 1:acf357e68297#1 0.58 0.09 strategyandroadmapcreation
+invoice-consulting_long 1:53dea97cf116 0.06 0.09 digitalroadmapdevelopment
+invoice-consulting_long 1:53dea97cf116#1 0.14 0.09 digitalroadmapdevelopment
+invoice-consulting_long 1:acf357e68297 0.14 0.09 strategyandroadmapcreation
+invoice-consulting_long 1:acf357e68297#1 0.22 0.09 strategyandroadmapcreation
invoice-consulting_long 1:c947fb16eab2 0.20 0.43 15–22may2025
invoice-consulting_long 1:c947fb16eab2#1 0.28 0.43 15–22may2025
invoice-consulting_long 1:017144e2271f 0.22 0.07 6.00
@@ -2312,27 +2312,27 @@ invoice-consulting_long 1:be6012a47af0 0.20 0.47 220.00
invoice-consulting_long 1:be6012a47af0#1 0.28 0.47 220.00
invoice-consulting_long 1:172c0a785bc7 0.20 0.50 1,320.00
invoice-consulting_long 1:172c0a785bc7#1 0.28 0.50 1,320.00
-invoice-consulting_long 1:fe04037aa850 0.43 0.09 stakeholderreviewsessions
-invoice-consulting_long 1:fe04037aa850#1 0.51 0.09 stakeholderreviewsessions
-invoice-consulting_long 1:4658a1bff292 0.39 0.09 facilitationanddocumentation
-invoice-consulting_long 1:4658a1bff292#1 0.59 0.09 facilitationanddocumentation
+invoice-consulting_long 1:fe04037aa850 0.07 0.09 stakeholderreviewsessions
+invoice-consulting_long 1:fe04037aa850#1 0.15 0.09 stakeholderreviewsessions
+invoice-consulting_long 1:4658a1bff292 0.15 0.09 facilitationanddocumentation
+invoice-consulting_long 1:4658a1bff292#1 0.23 0.09 facilitationanddocumentation
invoice-consulting_long 1:86f73207c794 0.21 0.40 20–25may2025
invoice-consulting_long 1:86f73207c794#1 0.29 0.40 20–25may2025
invoice-consulting_long 1:55907ef405f6 0.21 0.58 1,880.00
invoice-consulting_long 1:55907ef405f6#1 0.21 0.53 1,880.00
invoice-consulting_long 1:55907ef405f6#2 0.29 0.58 1,880.00
invoice-consulting_long 1:55907ef405f6#3 0.29 0.53 1,880.00
-invoice-consulting_long 1:f2e12ad6cc9f 0.44 0.09 presentation&finalreport
-invoice-consulting_long 1:f2e12ad6cc9f#1 0.52 0.09 presentation&finalreport
-invoice-consulting_long 1:50de6dc61b80 0.40 0.09 executivepresentationanddelivery
-invoice-consulting_long 1:50de6dc61b80#1 0.60 0.09 executivepresentationanddelivery
+invoice-consulting_long 1:f2e12ad6cc9f 0.08 0.09 presentation&finalreport
+invoice-consulting_long 1:f2e12ad6cc9f#1 0.16 0.09 presentation&finalreport
+invoice-consulting_long 1:50de6dc61b80 0.16 0.09 executivepresentationanddelivery
+invoice-consulting_long 1:50de6dc61b80#1 0.24 0.09 executivepresentationanddelivery
invoice-consulting_long 1:d6577e95efba 0.09 0.09 subtotal
invoice-consulting_long 1:6311b1798398 0.31 0.59 14,000.00
-invoice-consulting_long 1:e370855bde0c 0.17 0.09 gst(10%)
-invoice-consulting_long 1:b87e26fb8fac 0.39 0.55 1,400.00
+invoice-consulting_long 1:e370855bde0c 0.05 0.09 gst(10%)
+invoice-consulting_long 1:b87e26fb8fac 0.27 0.55 1,400.00
invoice-consulting_long 1:713a1893d967 0.45 0.09 totaldue(aud)
invoice-consulting_long 1:d4464a725927 0.36 0.96 15,400.00
-invoice-consulting_long 1:13000a5d442c 0.63 -0.02 paymentinformation
+invoice-consulting_long 1:13000a5d442c 0.51 -0.02 paymentinformation
invoice-consulting_long 1:944d398aea60 0.92 -0.04 bankname:
invoice-consulting_long 1:97fa113746b9 0.92 0.04 examplebank
invoice-consulting_long 1:0ecb5847ffa7 0.92 -0.04 accountname:
@@ -2344,7 +2344,7 @@ invoice-consulting_long 1:ef797c8118f0 0.92 0.04 12345678
invoice-consulting_long 1:c608665436db 0.92 -0.04 reference:
invoice-consulting_long 1:7d66eb3c1070 0.92 0.04 inv-2025-0478
invoice-consulting_long 1:010450dee1ff 0.47 -0.02 pleaseensuretheinvoicenumberisin
-invoice-consulting_long 1:ab5aa97074c4 0.63 0.10 notes
+invoice-consulting_long 1:ab5aa97074c4 0.51 0.10 notes
invoice-consulting_long 1:7c6ab37d83ef 0.43 0.10 thankyouforyourbusiness.
invoice-consulting_long 1:4a699e29a3bb 0.47 0.10 ifyouhaveanyquestionsregardingth
invoice-consulting_long 1:c766251af1f4 0.41 0.10 contactusataccounts@northpoint.c
@@ -2387,38 +2387,38 @@ invoice-luma_studio 0:725a8f5062e7 0.08 -0.01 shipto
invoice-luma_studio 0:254289ce0191 -0.06 -0.01 thefoundry,2ndfloor
invoice-luma_studio 0:84db1f48facb -0.11 -0.01 17-19greatsuffolkstreet
invoice-luma_studio 0:e7a5f0717d99 -0.16 -0.01 londonse10ns
-invoice-luma_studio 0:c9046f7a37ad 0.03 0.02 description
-invoice-luma_studio 0:32e8369a9c4f 0.03 -0.04 qty
-invoice-luma_studio 0:d1062d072acd 0.03 0.00 unitprice
-invoice-luma_studio 0:7c512b48ba8a 0.03 0.06 vat
-invoice-luma_studio 0:cf38d95c9c6b 0.03 -0.12 amount
+invoice-luma_studio 0:c9046f7a37ad -0.09 0.02 description
+invoice-luma_studio 0:32e8369a9c4f -0.09 -0.04 qty
+invoice-luma_studio 0:d1062d072acd -0.09 0.00 unitprice
+invoice-luma_studio 0:7c512b48ba8a -0.09 0.06 vat
+invoice-luma_studio 0:cf38d95c9c6b -0.09 -0.12 amount
invoice-luma_studio 0:7b420577e50f -0.01 -0.13 £1,200.00
invoice-luma_studio 0:7b420577e50f#1 -0.01 -0.31 £1,200.00
invoice-luma_studio 0:dc934fe30a94 -0.01 -0.04 20%
-invoice-luma_studio 0:dc934fe30a94#1 -0.08 -0.04 20%
-invoice-luma_studio 0:dc934fe30a94#2 -0.05 -0.04 20%
+invoice-luma_studio 0:dc934fe30a94#1 0.04 -0.04 20%
+invoice-luma_studio 0:dc934fe30a94#2 0.07 -0.04 20%
invoice-luma_studio 0:dc934fe30a94#3 0.04 -0.04 20%
invoice-luma_studio 0:dc934fe30a94#4 0.05 -0.04 20%
-invoice-luma_studio 0:d8f4e3a46d2d 0.07 0.02 brandstrategyworkshop
-invoice-luma_studio 0:be624d692600 -0.47 0.02 discoverysession,research&brand
+invoice-luma_studio 0:d8f4e3a46d2d -0.17 0.02 brandstrategyworkshop
+invoice-luma_studio 0:be624d692600 -0.59 0.02 discoverysession,research&brand
invoice-luma_studio 0:40ca2aad940f -0.50 0.02 positioning.
-invoice-luma_studio 0:07bcffc86e95 -0.08 -0.13 £2,650.00
-invoice-luma_studio 0:07bcffc86e95#1 -0.08 -0.31 £2,650.00
-invoice-luma_studio 0:e302dd04d528 0.12 0.02 visualidentitydesign
-invoice-luma_studio 0:40e412f627fb -0.42 0.02 logosuite,colourpalette,typograp
+invoice-luma_studio 0:07bcffc86e95 0.04 -0.13 £2,650.00
+invoice-luma_studio 0:07bcffc86e95#1 0.04 -0.31 £2,650.00
+invoice-luma_studio 0:e302dd04d528 -0.12 0.02 visualidentitydesign
+invoice-luma_studio 0:40e412f627fb -0.54 0.02 logosuite,colourpalette,typograp
invoice-luma_studio 0:9c17d116fe08 -0.45 0.02 &guidelines.
-invoice-luma_studio 0:a20d66947acc -0.05 -0.13 £3,200.00
-invoice-luma_studio 0:a20d66947acc#1 -0.05 -0.31 £3,200.00
-invoice-luma_studio 0:b25ac9cd66bd 0.07 0.02 websitedesign(upto8pages)
-invoice-luma_studio 0:dab758788e6f -0.11 0.02 ux/uidesignfordesktopandmobile.
+invoice-luma_studio 0:a20d66947acc 0.07 -0.13 £3,200.00
+invoice-luma_studio 0:a20d66947acc#1 0.07 -0.31 £3,200.00
+invoice-luma_studio 0:b25ac9cd66bd -0.05 0.02 websitedesign(upto8pages)
+invoice-luma_studio 0:dab758788e6f 0.01 0.02 ux/uidesignfordesktopandmobile.
invoice-luma_studio 0:f916278cb74c 0.04 -0.08 £850.00
invoice-luma_studio 0:f916278cb74c#1 0.04 -0.30 £850.00
-invoice-luma_studio 0:4a1359f78476 0.16 0.02 copywriting
+invoice-luma_studio 0:4a1359f78476 -0.08 0.02 copywriting
invoice-luma_studio 0:69afea703455 -0.02 0.02 websitecopy&keymessaging.
invoice-luma_studio 0:07b417914317 0.05 -0.08 £600.00
invoice-luma_studio 0:07b417914317#1 0.05 -0.30 £600.00
-invoice-luma_studio 0:340455fbac25 0.13 0.02 projectmanagement
-invoice-luma_studio 0:72534f9863ad -0.41 0.02 planning,coordination&client
+invoice-luma_studio 0:340455fbac25 -0.11 0.02 projectmanagement
+invoice-luma_studio 0:72534f9863ad -0.53 0.02 planning,coordination&client
invoice-luma_studio 0:4df00f9a2b20 -0.45 0.02 liaison.
invoice-luma_studio 0:d6577e95efba 0.22 0.11 subtotal
invoice-luma_studio 0:b504edd8ea39 0.22 0.44 £8,500.00
@@ -2484,126 +2484,126 @@ invoice-luma_studio_long 0:725a8f5062e7 0.08 -0.01 shipto
invoice-luma_studio_long 0:254289ce0191 -0.06 -0.01 thefoundry,2ndfloor
invoice-luma_studio_long 0:84db1f48facb -0.11 -0.01 17-19greatsuffolkstreet
invoice-luma_studio_long 0:e7a5f0717d99 -0.16 -0.01 londonse10ns
-invoice-luma_studio_long 0:c9046f7a37ad 0.03 0.02 description
-invoice-luma_studio_long 0:32e8369a9c4f 0.03 -0.04 qty
-invoice-luma_studio_long 0:d1062d072acd 0.03 0.00 unitprice
-invoice-luma_studio_long 0:7c512b48ba8a 0.03 0.06 vat
-invoice-luma_studio_long 0:cf38d95c9c6b 0.03 -0.12 amount
+invoice-luma_studio_long 0:c9046f7a37ad -0.09 0.02 description
+invoice-luma_studio_long 0:32e8369a9c4f -0.09 -0.04 qty
+invoice-luma_studio_long 0:d1062d072acd -0.09 0.00 unitprice
+invoice-luma_studio_long 0:7c512b48ba8a -0.09 0.06 vat
+invoice-luma_studio_long 0:cf38d95c9c6b -0.09 -0.12 amount
invoice-luma_studio_long 0:7b420577e50f -0.01 -0.13 £1,200.00
invoice-luma_studio_long 0:7b420577e50f#1 -0.01 -0.31 £1,200.00
invoice-luma_studio_long 0:7b420577e50f#2 0.05 -0.13 £1,200.00
invoice-luma_studio_long 0:7b420577e50f#3 0.05 -0.31 £1,200.00
invoice-luma_studio_long 0:dc934fe30a94 -0.01 -0.04 20%
-invoice-luma_studio_long 0:dc934fe30a94#1 -0.08 -0.04 20%
+invoice-luma_studio_long 0:dc934fe30a94#1 0.04 -0.04 20%
invoice-luma_studio_long 0:dc934fe30a94#2 -0.01 -0.04 20%
invoice-luma_studio_long 0:dc934fe30a94#3 0.04 -0.04 20%
-invoice-luma_studio_long 0:dc934fe30a94#4 -0.03 -0.04 20%
+invoice-luma_studio_long 0:dc934fe30a94#4 0.09 -0.04 20%
invoice-luma_studio_long 0:dc934fe30a94#5 0.05 -0.04 20%
invoice-luma_studio_long 0:dc934fe30a94#6 0.10 -0.04 20%
-invoice-luma_studio_long 0:dc934fe30a94#7 0.03 -0.04 20%
-invoice-luma_studio_long 0:d8f4e3a46d2d 0.07 0.02 brandstrategyworkshop
-invoice-luma_studio_long 0:d8f4e3a46d2d#1 0.10 0.02 brandstrategyworkshop
-invoice-luma_studio_long 0:be624d692600 -0.47 0.02 discoverysession,research&brand
+invoice-luma_studio_long 0:dc934fe30a94#7 0.15 -0.04 20%
+invoice-luma_studio_long 0:d8f4e3a46d2d -0.17 0.02 brandstrategyworkshop
+invoice-luma_studio_long 0:d8f4e3a46d2d#1 -0.02 0.02 brandstrategyworkshop
+invoice-luma_studio_long 0:be624d692600 -0.59 0.02 discoverysession,research&brand
invoice-luma_studio_long 0:be624d692600#1 -0.41 0.02 discoverysession,research&brand
invoice-luma_studio_long 0:d6def76ba3d1 -0.50 0.02 positioning.phase1.
-invoice-luma_studio_long 0:07bcffc86e95 -0.08 -0.13 £2,650.00
-invoice-luma_studio_long 0:07bcffc86e95#1 -0.08 -0.31 £2,650.00
+invoice-luma_studio_long 0:07bcffc86e95 0.04 -0.13 £2,650.00
+invoice-luma_studio_long 0:07bcffc86e95#1 0.04 -0.31 £2,650.00
invoice-luma_studio_long 0:07bcffc86e95#2 0.10 -0.13 £2,650.00
invoice-luma_studio_long 0:07bcffc86e95#3 0.10 -0.31 £2,650.00
-invoice-luma_studio_long 0:e302dd04d528 0.12 0.02 visualidentitydesign
-invoice-luma_studio_long 0:e302dd04d528#1 0.18 0.02 visualidentitydesign
-invoice-luma_studio_long 0:40e412f627fb -0.42 0.02 logosuite,colourpalette,typograp
-invoice-luma_studio_long 0:40e412f627fb#1 -0.36 0.02 logosuite,colourpalette,typograp
+invoice-luma_studio_long 0:e302dd04d528 -0.12 0.02 visualidentitydesign
+invoice-luma_studio_long 0:e302dd04d528#1 -0.06 0.02 visualidentitydesign
+invoice-luma_studio_long 0:40e412f627fb -0.54 0.02 logosuite,colourpalette,typograp
+invoice-luma_studio_long 0:40e412f627fb#1 -0.48 0.02 logosuite,colourpalette,typograp
invoice-luma_studio_long 0:270a9e26d2e0 -0.45 0.02 &guidelines.phase1.
invoice-luma_studio_long 0:a20d66947acc -0.01 -0.13 £3,200.00
invoice-luma_studio_long 0:a20d66947acc#1 -0.01 -0.31 £3,200.00
-invoice-luma_studio_long 0:a20d66947acc#2 0.03 -0.13 £3,200.00
-invoice-luma_studio_long 0:a20d66947acc#3 0.03 -0.31 £3,200.00
-invoice-luma_studio_long 0:b25ac9cd66bd 0.07 0.02 websitedesign(upto8pages)
-invoice-luma_studio_long 0:b25ac9cd66bd#1 0.23 0.02 websitedesign(upto8pages)
+invoice-luma_studio_long 0:a20d66947acc#2 0.15 -0.13 £3,200.00
+invoice-luma_studio_long 0:a20d66947acc#3 0.15 -0.31 £3,200.00
+invoice-luma_studio_long 0:b25ac9cd66bd -0.05 0.02 websitedesign(upto8pages)
+invoice-luma_studio_long 0:b25ac9cd66bd#1 -0.01 0.02 websitedesign(upto8pages)
invoice-luma_studio_long 0:dab758788e6f -0.47 0.02 ux/uidesignfordesktopandmobile.
-invoice-luma_studio_long 0:dab758788e6f#1 -0.31 0.02 ux/uidesignfordesktopandmobile.
+invoice-luma_studio_long 0:dab758788e6f#1 -0.43 0.02 ux/uidesignfordesktopandmobile.
invoice-luma_studio_long 0:bb1a79cda1ae -0.38 0.02 phase1.
invoice-luma_studio_long 0:f916278cb74c 0.04 -0.08 £850.00
invoice-luma_studio_long 0:f916278cb74c#1 0.04 -0.30 £850.00
-invoice-luma_studio_long 0:4a1359f78476 0.12 0.02 copywriting
-invoice-luma_studio_long 0:e6a181326fc9 -0.42 0.02 websitecopy&keymessaging.phase
-invoice-luma_studio_long 0:07b417914317 -0.03 -0.08 £600.00
-invoice-luma_studio_long 0:07b417914317#1 -0.03 -0.30 £600.00
-invoice-luma_studio_long 0:340455fbac25 0.17 0.02 projectmanagement
-invoice-luma_studio_long 0:72534f9863ad -0.37 0.02 planning,coordination&client
+invoice-luma_studio_long 0:4a1359f78476 -0.12 0.02 copywriting
+invoice-luma_studio_long 0:e6a181326fc9 -0.54 0.02 websitecopy&keymessaging.phase
+invoice-luma_studio_long 0:07b417914317 0.09 -0.08 £600.00
+invoice-luma_studio_long 0:07b417914317#1 0.09 -0.30 £600.00
+invoice-luma_studio_long 0:340455fbac25 -0.07 0.02 projectmanagement
+invoice-luma_studio_long 0:72534f9863ad -0.49 0.02 planning,coordination&client
invoice-luma_studio_long 0:8f09113ca513 -0.40 0.02 liaison.phase1.
invoice-luma_studio_long 0:532160121f5f -0.32 0.02 positioning.phase2.
invoice-luma_studio_long 0:82ed33a90b4e -0.39 0.02 &guidelines.phase2.
invoice-luma_studio_long 0:81deaef85fed -0.34 0.02 phase2.
invoice-luma_studio_long 0:cc6f3d44f8c5 0.17 1.15 page1of3
-invoice-luma_studio_long 1:c9046f7a37ad 0.20 0.02 description
-invoice-luma_studio_long 1:32e8369a9c4f 0.20 -0.04 qty
-invoice-luma_studio_long 1:d1062d072acd 0.20 0.00 unitprice
-invoice-luma_studio_long 1:7c512b48ba8a 0.20 0.06 vat
-invoice-luma_studio_long 1:cf38d95c9c6b 0.20 -0.12 amount
+invoice-luma_studio_long 1:c9046f7a37ad -0.04 0.02 description
+invoice-luma_studio_long 1:32e8369a9c4f -0.04 -0.04 qty
+invoice-luma_studio_long 1:d1062d072acd -0.04 0.00 unitprice
+invoice-luma_studio_long 1:7c512b48ba8a -0.04 0.06 vat
+invoice-luma_studio_long 1:cf38d95c9c6b -0.04 -0.12 amount
invoice-luma_studio_long 1:f916278cb74c 0.07 -0.08 £850.00
invoice-luma_studio_long 1:f916278cb74c#1 0.07 -0.30 £850.00
-invoice-luma_studio_long 1:f916278cb74c#2 0.11 -0.08 £850.00
-invoice-luma_studio_long 1:f916278cb74c#3 0.11 -0.30 £850.00
+invoice-luma_studio_long 1:f916278cb74c#2 0.23 -0.08 £850.00
+invoice-luma_studio_long 1:f916278cb74c#3 0.23 -0.30 £850.00
invoice-luma_studio_long 1:f916278cb74c#4 0.26 -0.08 £850.00
invoice-luma_studio_long 1:f916278cb74c#5 0.26 -0.30 £850.00
invoice-luma_studio_long 1:dc934fe30a94 0.07 -0.04 20%
invoice-luma_studio_long 1:dc934fe30a94#1 0.12 -0.04 20%
-invoice-luma_studio_long 1:dc934fe30a94#2 0.05 -0.04 20%
+invoice-luma_studio_long 1:dc934fe30a94#2 0.17 -0.04 20%
invoice-luma_studio_long 1:dc934fe30a94#3 0.10 -0.04 20%
invoice-luma_studio_long 1:dc934fe30a94#4 0.18 -0.04 20%
-invoice-luma_studio_long 1:dc934fe30a94#5 0.11 -0.04 20%
+invoice-luma_studio_long 1:dc934fe30a94#5 0.23 -0.04 20%
invoice-luma_studio_long 1:dc934fe30a94#6 0.16 -0.04 20%
invoice-luma_studio_long 1:dc934fe30a94#7 0.23 -0.04 20%
-invoice-luma_studio_long 1:dc934fe30a94#8 0.16 -0.04 20%
+invoice-luma_studio_long 1:dc934fe30a94#8 0.28 -0.04 20%
invoice-luma_studio_long 1:dc934fe30a94#9 0.21 -0.04 20%
invoice-luma_studio_long 1:dc934fe30a94#10 0.26 -0.04 20%
-invoice-luma_studio_long 1:dc934fe30a94#11 0.22 -0.04 20%
-invoice-luma_studio_long 1:4a1359f78476 0.14 0.02 copywriting
-invoice-luma_studio_long 1:4a1359f78476#1 0.30 0.02 copywriting
-invoice-luma_studio_long 1:4a1359f78476#2 0.33 0.02 copywriting
+invoice-luma_studio_long 1:dc934fe30a94#11 0.34 -0.04 20%
+invoice-luma_studio_long 1:4a1359f78476 0.02 0.02 copywriting
+invoice-luma_studio_long 1:4a1359f78476#1 0.06 0.02 copywriting
+invoice-luma_studio_long 1:4a1359f78476#2 0.09 0.02 copywriting
invoice-luma_studio_long 1:e6a181326fc9 -0.40 0.02 websitecopy&keymessaging.phase
-invoice-luma_studio_long 1:e6a181326fc9#1 -0.24 0.02 websitecopy&keymessaging.phase
-invoice-luma_studio_long 1:e6a181326fc9#2 -0.21 0.02 websitecopy&keymessaging.phase
+invoice-luma_studio_long 1:e6a181326fc9#1 -0.36 0.02 websitecopy&keymessaging.phase
+invoice-luma_studio_long 1:e6a181326fc9#2 -0.33 0.02 websitecopy&keymessaging.phase
invoice-luma_studio_long 1:07b417914317 0.12 -0.08 £600.00
invoice-luma_studio_long 1:07b417914317#1 0.12 -0.30 £600.00
invoice-luma_studio_long 1:07b417914317#2 0.16 -0.08 £600.00
invoice-luma_studio_long 1:07b417914317#3 0.16 -0.30 £600.00
-invoice-luma_studio_long 1:07b417914317#4 0.22 -0.08 £600.00
-invoice-luma_studio_long 1:07b417914317#5 0.22 -0.30 £600.00
-invoice-luma_studio_long 1:340455fbac25 0.19 0.02 projectmanagement
-invoice-luma_studio_long 1:340455fbac25#1 0.23 0.02 projectmanagement
-invoice-luma_studio_long 1:340455fbac25#2 0.41 0.02 projectmanagement
-invoice-luma_studio_long 1:72534f9863ad -0.35 0.02 planning,coordination&client
+invoice-luma_studio_long 1:07b417914317#4 0.34 -0.08 £600.00
+invoice-luma_studio_long 1:07b417914317#5 0.34 -0.30 £600.00
+invoice-luma_studio_long 1:340455fbac25 -0.05 0.02 projectmanagement
+invoice-luma_studio_long 1:340455fbac25#1 0.11 0.02 projectmanagement
+invoice-luma_studio_long 1:340455fbac25#2 0.17 0.02 projectmanagement
+invoice-luma_studio_long 1:72534f9863ad -0.47 0.02 planning,coordination&client
invoice-luma_studio_long 1:72534f9863ad#1 -0.31 0.02 planning,coordination&client
-invoice-luma_studio_long 1:72534f9863ad#2 -0.13 0.02 planning,coordination&client
+invoice-luma_studio_long 1:72534f9863ad#2 -0.25 0.02 planning,coordination&client
invoice-luma_studio_long 1:ad05c4b80bfe -0.38 0.02 liaison.phase2.
-invoice-luma_studio_long 1:7b420577e50f 0.05 -0.13 £1,200.00
-invoice-luma_studio_long 1:7b420577e50f#1 0.05 -0.31 £1,200.00
+invoice-luma_studio_long 1:7b420577e50f 0.17 -0.13 £1,200.00
+invoice-luma_studio_long 1:7b420577e50f#1 0.17 -0.31 £1,200.00
invoice-luma_studio_long 1:7b420577e50f#2 0.23 -0.13 £1,200.00
invoice-luma_studio_long 1:7b420577e50f#3 0.23 -0.31 £1,200.00
-invoice-luma_studio_long 1:d8f4e3a46d2d 0.24 0.02 brandstrategyworkshop
-invoice-luma_studio_long 1:d8f4e3a46d2d#1 0.28 0.02 brandstrategyworkshop
-invoice-luma_studio_long 1:be624d692600 -0.30 0.02 discoverysession,research&brand
-invoice-luma_studio_long 1:be624d692600#1 -0.24 0.02 discoverysession,research&brand
+invoice-luma_studio_long 1:d8f4e3a46d2d 0.00 0.02 brandstrategyworkshop
+invoice-luma_studio_long 1:d8f4e3a46d2d#1 0.04 0.02 brandstrategyworkshop
+invoice-luma_studio_long 1:be624d692600 -0.42 0.02 discoverysession,research&brand
+invoice-luma_studio_long 1:be624d692600#1 -0.36 0.02 discoverysession,research&brand
invoice-luma_studio_long 1:b95a82d5055c -0.33 0.02 positioning.phase3.
invoice-luma_studio_long 1:07bcffc86e95 0.10 -0.13 £2,650.00
invoice-luma_studio_long 1:07bcffc86e95#1 0.10 -0.31 £2,650.00
-invoice-luma_studio_long 1:07bcffc86e95#2 0.16 -0.13 £2,650.00
-invoice-luma_studio_long 1:07bcffc86e95#3 0.16 -0.31 £2,650.00
-invoice-luma_studio_long 1:e302dd04d528 0.17 0.02 visualidentitydesign
-invoice-luma_studio_long 1:e302dd04d528#1 0.35 0.02 visualidentitydesign
+invoice-luma_studio_long 1:07bcffc86e95#2 0.28 -0.13 £2,650.00
+invoice-luma_studio_long 1:07bcffc86e95#3 0.28 -0.31 £2,650.00
+invoice-luma_studio_long 1:e302dd04d528 0.05 0.02 visualidentitydesign
+invoice-luma_studio_long 1:e302dd04d528#1 0.11 0.02 visualidentitydesign
invoice-luma_studio_long 1:40e412f627fb -0.37 0.02 logosuite,colourpalette,typograp
-invoice-luma_studio_long 1:40e412f627fb#1 -0.19 0.02 logosuite,colourpalette,typograp
+invoice-luma_studio_long 1:40e412f627fb#1 -0.31 0.02 logosuite,colourpalette,typograp
invoice-luma_studio_long 1:708bc0c2e87c -0.28 0.02 &guidelines.phase3.
invoice-luma_studio_long 1:a20d66947acc 0.18 -0.13 £3,200.00
invoice-luma_studio_long 1:a20d66947acc#1 0.18 -0.31 £3,200.00
invoice-luma_studio_long 1:a20d66947acc#2 0.21 -0.13 £3,200.00
invoice-luma_studio_long 1:a20d66947acc#3 0.21 -0.31 £3,200.00
-invoice-luma_studio_long 1:b25ac9cd66bd 0.25 0.02 websitedesign(upto8pages)
-invoice-luma_studio_long 1:b25ac9cd66bd#1 0.28 0.02 websitedesign(upto8pages)
-invoice-luma_studio_long 1:dab758788e6f -0.29 0.02 ux/uidesignfordesktopandmobile.
+invoice-luma_studio_long 1:b25ac9cd66bd 0.01 0.02 websitedesign(upto8pages)
+invoice-luma_studio_long 1:b25ac9cd66bd#1 0.16 0.02 websitedesign(upto8pages)
+invoice-luma_studio_long 1:dab758788e6f -0.41 0.02 ux/uidesignfordesktopandmobile.
invoice-luma_studio_long 1:dab758788e6f#1 -0.26 0.02 ux/uidesignfordesktopandmobile.
invoice-luma_studio_long 1:155500f32e83 -0.32 0.02 phase3.
invoice-luma_studio_long 1:82f971bee7f8 -0.22 0.02 liaison.phase3.
@@ -2836,7 +2836,7 @@ invoice-metered 0:985e43c2de34 0.01 0.01 120riversideway,bristol,bs16qt,u
invoice-metered 0:7b14b8d2c5c4 0.11 0.11 page1of1
invoice-modern 0:52d6e3de4fa0 0.18 0.00 invoice
invoice-modern 0:30d85a94548c -0.05 0.00 invoicegc-2026-041issued02apr202
-invoice-modern 0:75857a458999 0.27 -0.04 from
+invoice-modern 0:75857a458999 0.03 -0.04 from
invoice-modern 0:c26c22b94338 -0.02 -0.04 graphcomposestudio
invoice-modern 0:2a08ce5567fb -0.08 -0.04 18layoutstreet
invoice-modern 0:fbeea547d99e -0.15 -0.04 london,uk
@@ -2844,7 +2844,7 @@ invoice-modern 0:faf1569a98e9 -0.11 -0.04 ec1a4gc
invoice-modern 0:befc6e9b5c24 -0.18 -0.04 billing@graphcompose.dev
invoice-modern 0:89674e6f130e -0.26 -0.04 +442055551000
invoice-modern 0:a2b2e7d2906f -0.09 -0.04 taxidgb-99887766
-invoice-modern 0:aeba3a7b3598 0.27 0.01 billto
+invoice-modern 0:aeba3a7b3598 0.03 0.01 billto
invoice-modern 0:f890faef907f -0.02 0.01 northwindsystems
invoice-modern 0:1b405eb431ca -0.08 0.01 attn:financeteam
invoice-modern 0:91eefd794f79 -0.15 0.01 410marketavenue
@@ -2891,14 +2891,14 @@ invoice-modern 0:e3337beaa171 0.09 -0.04 thankyouforchoosinggraphcomposef
invoice-modern_long 0:52d6e3de4fa0 0.18 0.00 invoice
invoice-modern_long 0:61a964e78950 -0.05 0.00 invoicegc-2026-042issued04may202
invoice-modern_long 0:62a2fed3d6e0 -0.04 0.00 pending
-invoice-modern_long 0:75857a458999 0.28 -0.04 from
+invoice-modern_long 0:75857a458999 0.04 -0.04 from
invoice-modern_long 0:c26c22b94338 -0.01 -0.04 graphcomposestudio
invoice-modern_long 0:2a08ce5567fb -0.07 -0.04 18layoutstreet
invoice-modern_long 0:fbeea547d99e -0.14 -0.04 london,uk
invoice-modern_long 0:faf1569a98e9 -0.22 -0.04 ec1a4gc
invoice-modern_long 0:befc6e9b5c24 -0.17 -0.04 billing@graphcompose.dev
invoice-modern_long 0:89674e6f130e -0.25 -0.04 +442055551000
-invoice-modern_long 0:aeba3a7b3598 0.28 0.01 billto
+invoice-modern_long 0:aeba3a7b3598 0.04 0.01 billto
invoice-modern_long 0:f890faef907f -0.01 0.01 northwindsystems
invoice-modern_long 0:1b405eb431ca -0.07 0.01 attn:financeteam
invoice-modern_long 0:91eefd794f79 -0.14 0.01 410marketavenue
@@ -3529,7 +3529,7 @@ letter-blue_banner 0:a71e98216baa -0.05 0.00 iwouldwelcometheopportunitytobri
letter-blue_banner 0:80a6a628ad52 -0.08 0.00 sincerely,
letter-boxed_sections 0:8f1010120ed6 0.58 0.22 jordanrivera
letter-boxed_sections 0:8f1010120ed6#1 0.13 0.00 jordanrivera
-letter-boxed_sections 0:8d7a2cca3060 0.26 0.07 +442055551000|jordan.rivera@exam
+letter-boxed_sections 0:8d7a2cca3060 0.14 0.07 +442055551000|jordan.rivera@exam
letter-boxed_sections 0:bef81b541365 0.13 0.00 dearhiringteamatnorthwindsystems
letter-boxed_sections 0:ab54410ead82 0.07 0.00 iamexcitedtosharemyinterestinthe
letter-boxed_sections 0:9185168d2cf8 0.11 0.00 document-generationsystemsthatba
@@ -3558,7 +3558,7 @@ letter-classic_serif 0:a463bced3db2 -0.06 0.00 ienjoytranslatingfuzzyworkflowre
letter-classic_serif 0:dd474e249222 -0.13 0.00 makeadoptioneasierfortherestofth
letter-classic_serif 0:a71e98216baa -0.03 0.00 iwouldwelcometheopportunitytobri
letter-classic_serif 0:80a6a628ad52 -0.04 0.00 sincerely,
-letter-compact_mono 0:8f1010120ed6 0.37 -0.02 jordanrivera
+letter-compact_mono 0:8f1010120ed6 0.01 -0.02 jordanrivera
letter-compact_mono 0:8f1010120ed6#1 -0.04 0.00 jordanrivera
letter-compact_mono 0:f9e4560bd641 -0.28 -0.02 london,uk/+442055551000/jordan.r
letter-compact_mono 0:bef81b541365 -0.06 0.00 dearhiringteamatnorthwindsystems
@@ -3759,8 +3759,8 @@ proposal-editorial 1:aaa2a6073d69 0.10 0.36 refinedlogosuite&brandguidelines
proposal-editorial 1:d626f7532564 0.06 0.48 color,typography&designsystem
proposal-editorial 1:018ec557a513 0.14 0.36 websiteuxwireframes
proposal-editorial 1:5ed4970fa285 0.10 0.48 high-fidelitywebsitedesigns
-proposal-editorial 1:a579d6d1c12e 0.62 0.39 responsivedesignfordesktop,table
-proposal-editorial 1:d524c1a0811d 0.17 -0.01 mobile
+proposal-editorial 1:a579d6d1c12e 0.50 0.39 responsivedesignfordesktop,table
+proposal-editorial 1:d524c1a0811d 0.05 -0.01 mobile
proposal-editorial 1:8b712e7e93bf 0.08 0.51 contentstrategy&pagetemplates
proposal-editorial 1:e9bf06d9b130 0.04 0.39 developer-readyassets&specificat
proposal-editorial 1:e93e7ba95ceb 0.12 0.39 launchchecklist&trainingsession
@@ -3897,9 +3897,9 @@ proposal-indigo 0:29208032c874 0.77 -0.01 kestrel.example/business|busines
proposal-modern 0:ecd1378bc9dc 0.18 0.00 proposal
proposal-modern 0:f592a683c61d 0.05 0.00 documentplatformconsolidation
proposal-modern 0:bbe07492ee1f 0.04 0.00 proposalgc-p-2026-014prepared02a
-proposal-modern 0:566835ed7fba 0.25 -0.04 executivesummary
-proposal-modern 0:7ccf0e6c59fa 0.11 -0.04 aphasedengagementtoretireper-tea
-proposal-modern 0:75857a458999 0.30 -0.04 from
+proposal-modern 0:566835ed7fba 0.01 -0.04 executivesummary
+proposal-modern 0:7ccf0e6c59fa -0.01 -0.04 aphasedengagementtoretireper-tea
+proposal-modern 0:75857a458999 0.06 -0.04 from
proposal-modern 0:c26c22b94338 0.00 -0.04 graphcomposestudio
proposal-modern 0:2a08ce5567fb -0.05 -0.04 18layoutstreet
proposal-modern 0:fbeea547d99e -0.13 -0.04 london,uk
@@ -3911,7 +3911,7 @@ proposal-modern 0:577a7fcdaa02 -0.05 0.01 attn:procurement
proposal-modern 0:91eefd794f79 -0.13 0.01 410marketavenue
proposal-modern 0:3daace874084 -0.08 0.01 procurement@northwind.example
proposal-modern 0:5f161c914988 0.07 -0.04 scope
-proposal-modern 0:9e580657f485 0.10 -0.04 discovery,architecture,andarefer
+proposal-modern 0:9e580657f485 -0.02 -0.04 discovery,architecture,andarefer
proposal-modern 0:cec9111de36d 0.01 -0.04 approach
proposal-modern 0:3215ea3be6d9 0.04 -0.04 iterativedeliverywithweeklycheck
proposal-modern 0:94d192b3a326 0.07 -0.04 timeline
@@ -4076,8 +4076,8 @@ receipt-modern 0:e885a92f5bb7 -0.07 0.01 generatedon09august2026
receipt-modern 0:c288dd6df716 -0.01 -0.08 referencenwp-4821-0067
receipt-modern 0:9de2a2d7cd7a 0.21 0.04 amountcollected
receipt-modern 0:465691680b99 0.05 0.04 £66.62
-receipt-modern 0:465691680b99#1 0.35 -0.92 £66.62
-receipt-modern 0:465691680b99#2 0.34 -0.92 £66.62
+receipt-modern 0:465691680b99#1 0.23 -0.92 £66.62
+receipt-modern 0:465691680b99#2 0.22 -0.92 £66.62
receipt-modern 0:4260e5ae365d 0.00 0.04 directdebitcollectedbyharbourfin
receipt-modern 0:4ddb3e96801a 0.21 0.16 completed
receipt-modern 0:a22e6dacae05 0.05 0.05 valuedate07jul2026
@@ -4096,32 +4096,32 @@ receipt-modern 0:995c51cebabe -0.06 0.10 1samplequay
receipt-modern 0:f05e0b2f4fe3 -0.07 0.10 manchesterm00aa
receipt-modern 0:597533badf94 0.11 0.10 account••••5604
receipt-modern 0:a5938b687682 0.26 0.10 sortcode00-00-11
-receipt-modern 0:5434155c0fda 0.11 -0.04 transferdetails
-receipt-modern 0:a4d7978db2aa 0.35 -0.04 mandatereference
-receipt-modern 0:0123b9cf310f 0.35 -0.90 mnd-0110-8054-5652
-receipt-modern 0:3840804e6235 0.42 -0.04 transactionid
-receipt-modern 0:60e01e42bb33 0.42 -0.93 b71f0c2e-9a44-4f18-bd30-51c7a2e9
-receipt-modern 0:2cbaa23e0a56 0.37 -0.04 paymentscheme
-receipt-modern 0:1477cb720a28 0.37 -0.94 bacsdirectdebit
-receipt-modern 0:1fa78044a7da 0.32 -0.04 statementdescription
-receipt-modern 0:b77918146dd3 0.32 -0.83 harbourfin4821
+receipt-modern 0:5434155c0fda 0.23 -0.04 transferdetails
+receipt-modern 0:a4d7978db2aa 0.23 -0.04 mandatereference
+receipt-modern 0:0123b9cf310f 0.23 -0.90 mnd-0110-8054-5652
+receipt-modern 0:3840804e6235 0.18 -0.04 transactionid
+receipt-modern 0:60e01e42bb33 0.18 -0.93 b71f0c2e-9a44-4f18-bd30-51c7a2e9
+receipt-modern 0:2cbaa23e0a56 0.13 -0.04 paymentscheme
+receipt-modern 0:1477cb720a28 0.13 -0.94 bacsdirectdebit
+receipt-modern 0:1fa78044a7da 0.20 -0.04 statementdescription
+receipt-modern 0:b77918146dd3 0.20 -0.83 harbourfin4821
receipt-modern 0:c72294b34f1a 0.23 -0.04 amountbreakdown
-receipt-modern 0:cf38d95c9c6b 0.35 -0.04 amount
-receipt-modern 0:dc40efafaeb3 0.44 -0.04 transferfee
-receipt-modern 0:3a82ba6903c6 0.44 -0.84 £0.00
-receipt-modern 0:1cdd81427c35 0.39 -0.04 exchangerate
-receipt-modern 0:0311534a9954 0.39 -0.80 1.00gbp/gbp
-receipt-modern 0:c1dc9f641ca3 0.34 -0.04 totaldebited
-receipt-modern 0:de149c2431a2 0.25 -0.04 paymentprogress
-receipt-modern 0:4568e72e6bfd 0.45 0.04 instructed
+receipt-modern 0:cf38d95c9c6b 0.23 -0.04 amount
+receipt-modern 0:dc40efafaeb3 0.20 -0.04 transferfee
+receipt-modern 0:3a82ba6903c6 0.20 -0.84 £0.00
+receipt-modern 0:1cdd81427c35 0.15 -0.04 exchangerate
+receipt-modern 0:0311534a9954 0.15 -0.80 1.00gbp/gbp
+receipt-modern 0:c1dc9f641ca3 0.22 -0.04 totaldebited
+receipt-modern 0:de149c2431a2 0.13 -0.04 paymentprogress
+receipt-modern 0:4568e72e6bfd 0.21 0.04 instructed
receipt-modern 0:c5f62da028cc 0.14 0.04 07jul2026,08:12bst·collectionreq
-receipt-modern 0:788d0109e065 0.38 0.04 inclearing
-receipt-modern 0:7cb44e46733a 0.07 0.04 08jul2026,09:00bst·three-working
-receipt-modern 0:d31e014808ec 0.43 0.04 settled
+receipt-modern 0:788d0109e065 0.26 0.04 inclearing
+receipt-modern 0:7cb44e46733a 0.19 0.04 08jul2026,09:00bst·three-working
+receipt-modern 0:d31e014808ec 0.19 0.04 settled
receipt-modern 0:06cb75439693 0.12 0.04 09jul2026,06:30bst·fundsdebiteda
receipt-modern 0:ab5aa97074c4 0.20 -0.04 notes
receipt-modern 0:a8da22f90eac 0.09 -0.04 keepthisconfirmationforyourrecor
-receipt-modern 0:59941ac03c12 0.39 0.02 scantocheckthisconfirmationagain
+receipt-modern 0:59941ac03c12 0.15 0.02 scantocheckthisconfirmationagain
receipt-modern 0:868e2517782a 0.06 0.02 support+442000000000
receipt-modern 0:94d25770d489 0.07 0.02 help@northwind-pay.example
receipt-modern 0:d613d9566d09 0.03 0.02 northwindpayisafictionalinstitut
@@ -4129,13 +4129,13 @@ receipt-modern 0:403a860bfc00 0.07 0.02 invented.
receipt-modern 0:7b14b8d2c5c4 0.07 0.06 page1of1
rota-cobalt 0:33888e306262 -0.28 0.00 quay
rota-cobalt 0:f5f481423c57 0.02 0.00 quaysidebar
-rota-cobalt 0:d457d4238a16 0.38 0.14 monday31st
-rota-cobalt 0:916a90a10237 0.38 0.06 tuesday1st
-rota-cobalt 0:c602d130bfde 0.38 0.24 wednesday2nd
-rota-cobalt 0:74cf6babb6f6 0.38 0.20 thursday3rd
-rota-cobalt 0:ae6aa379ad0c 0.38 0.20 friday4th
-rota-cobalt 0:a6643f169bfd 0.38 0.32 saturday5th
-rota-cobalt 0:58752a3c0543 0.38 0.24 sunday6th
+rota-cobalt 0:d457d4238a16 0.14 0.14 monday31st
+rota-cobalt 0:916a90a10237 0.14 0.06 tuesday1st
+rota-cobalt 0:c602d130bfde 0.14 0.24 wednesday2nd
+rota-cobalt 0:74cf6babb6f6 0.14 0.20 thursday3rd
+rota-cobalt 0:ae6aa379ad0c 0.14 0.20 friday4th
+rota-cobalt 0:a6643f169bfd 0.14 0.32 saturday5th
+rota-cobalt 0:58752a3c0543 0.14 0.24 sunday6th
rota-cobalt 0:c4aee96677b0 -0.04 0.05 /cleancrushedice
rota-cobalt 0:2895e01ceae0 -0.07 0.13 machine&area
rota-cobalt 0:f4e7df025c89 -0.04 0.02 pianist18:30/clean
@@ -4145,8 +4145,8 @@ rota-cobalt 0:b913ee5e077a -0.04 0.05 privatedinner44pax/
rota-cobalt 0:d89987d22df9 -0.07 0.03 soulgf/pianist18:30
rota-cobalt 0:fb980282ae0a -0.04 0.09 pianist18:30/partner
rota-cobalt 0:3c1fc038017e -0.07 0.07 meeting3:30pm
-rota-cobalt 0:cc96b22615e5 0.32 0.09 pianist19:00
-rota-cobalt 0:ffe6874516db 0.32 0.17 mc10pax/pianist19:00mc2pax//60pa
+rota-cobalt 0:cc96b22615e5 0.08 0.09 pianist19:00
+rota-cobalt 0:ffe6874516db 0.08 0.17 mc10pax/pianist19:00mc2pax//60pa
rota-cobalt 0:cd49e19a7e3e -0.07 0.21 /ffexhire/cleancubed
rota-cobalt 0:672c5d949aee -0.10 0.26 icemachine&area
rota-cobalt 0:bc14a4ce6407 0.08 0.71 statuslegend
@@ -4193,13 +4193,13 @@ rota-cobalt 0:f8f8922da592 0.33 0.37 standby
rota-cobalt 0:c2fb788c7dee 0.33 0.36 training
rota-cobalt 0:a18603086e5b 0.09 0.43 support
rota-cobalt 0:17ae69cc7e46 0.06 -0.11 covers
-rota-cobalt 0:412a5c513322 0.28 0.09 l104/d50
-rota-cobalt 0:304560bf3205 0.28 -0.01 l33/d57
-rota-cobalt 0:ca6ce47ada53 0.28 0.05 l32/d76
-rota-cobalt 0:e594a1e64b7d 0.28 0.09 l22/d48
-rota-cobalt 0:7062fafe1dab 0.28 0.11 l65/d112
-rota-cobalt 0:778cb57b62fa 0.28 0.16 l73/d112
-rota-cobalt 0:1b4471920f01 0.28 0.19 l72/d83
+rota-cobalt 0:412a5c513322 0.04 0.09 l104/d50
+rota-cobalt 0:304560bf3205 0.04 -0.01 l33/d57
+rota-cobalt 0:ca6ce47ada53 0.04 0.05 l32/d76
+rota-cobalt 0:e594a1e64b7d 0.04 0.09 l22/d48
+rota-cobalt 0:7062fafe1dab 0.04 0.11 l65/d112
+rota-cobalt 0:778cb57b62fa 0.04 0.16 l73/d112
+rota-cobalt 0:1b4471920f01 0.04 0.19 l72/d83
rota-cobalt 0:288965a1f2c8 0.19 -0.03 management
rota-cobalt 0:6a61eb7383e8 0.06 0.17 rosa
rota-cobalt 0:3bb0f0bb5552 0.05 -0.35 09:00-18:00
diff --git a/qa/src/test/resources/docx-fidelity/word-windows.tsv b/qa/src/test/resources/docx-fidelity/word-windows.tsv
index b2dba33ca..845c57397 100644
--- a/qa/src/test/resources/docx-fidelity/word-windows.tsv
+++ b/qa/src/test/resources/docx-fidelity/word-windows.tsv
@@ -1,18 +1,18 @@
# word 16.0 (16.0.20430) on windows
document engine_pages editor_pages lines matched median p90 over2
cv-blue_banner 2 2 54 52 0.11 0.35 0
-cv-boxed_sections 2 2 58 58 0.24 0.45 0
+cv-boxed_sections 2 2 58 58 0.16 0.37 0
cv-centered_headline 2 2 58 56 0.11 0.26 0
cv-charcoal_gold 1 1 85 83 0.18 0.27 0
-cv-classic_serif 2 2 57 54 0.19 0.39 0
-cv-compact_mono 1 1 58 58 0.15 0.32 0
+cv-classic_serif 2 2 57 54 0.16 0.24 0
+cv-compact_mono 1 1 58 58 0.15 0.30 0
cv-editorial_blue 2 2 82 82 0.08 0.21 0
cv-engineering_resume 1 1 57 57 0.22 0.34 0
cv-executive 2 2 60 60 0.19 0.34 0
cv-midnight_navy 1 1 86 84 0.22 0.82 0
-cv-minimal_underlined 2 2 59 59 0.38 0.70 0
+cv-minimal_underlined 2 2 59 59 0.34 0.63 0
cv-mint_editorial 2 2 59 59 0.08 0.19 0
-cv-modern_professional 2 2 61 59 0.18 0.43 0
+cv-modern_professional 2 2 61 59 0.17 0.36 0
cv-monogram_sidebar 1 1 53 50 0.19 0.39 0
cv-navy_sidebar 1 1 71 69 0.13 0.36 0
cv-nordic_clean 1 1 63 58 0.16 0.35 0
@@ -26,26 +26,26 @@ cv-teal_pulse 1 1 57 57 0.11 0.38 0
cv-terracotta_rail 1 1 102 102 0.36 0.87 0
cv-timeline_minimal 2 2 89 87 0.36 0.47 0
cv-violet_grid 1 1 80 78 0.23 0.42 0
-invoice-classic 1 1 56 56 0.10 0.36 0
-invoice-classic_long 2 2 166 166 0.05 0.20 0
-invoice-consulting 1 1 92 92 0.38 1.02 0
-invoice-consulting_long 2 2 236 236 0.40 0.76 0
-invoice-luma_studio 1 1 97 97 0.11 0.41 0
-invoice-luma_studio_long 3 3 192 192 0.17 0.37 0
+invoice-classic 1 1 56 56 0.10 0.29 0
+invoice-classic_long 2 2 166 166 0.05 0.16 0
+invoice-consulting 1 1 92 92 0.36 1.02 0
+invoice-consulting_long 2 2 236 236 0.30 0.65 0
+invoice-luma_studio 1 1 97 97 0.09 0.41 0
+invoice-luma_studio_long 3 3 192 192 0.16 0.40 0
invoice-merchant 1 1 94 94 0.13 0.22 0
invoice-metered 1 1 99 99 0.09 0.69 0
-invoice-modern 1 1 54 54 0.11 0.26 0
-invoice-modern_long 2 2 162 162 0.05 0.18 0
+invoice-modern 1 1 54 54 0.09 0.25 0
+invoice-modern_long 2 2 162 162 0.05 0.17 0
invoice-obsidian 1 1 81 81 0.21 0.84 0
invoice-payments 1 1 104 104 0.10 0.20 0
invoice-platform 1 1 111 111 0.21 0.41 0
invoice-subscription 1 1 81 81 0.33 0.59 0
invoice-workspace 1 1 90 90 0.10 0.29 0
letter-blue_banner 1 1 10 10 0.18 0.41 0
-letter-boxed_sections 1 1 10 10 0.13 0.26 0
+letter-boxed_sections 1 1 10 10 0.13 0.20 0
letter-centered_headline 1 1 11 11 0.03 0.19 0
letter-classic_serif 1 1 10 10 0.09 0.15 0
-letter-compact_mono 1 1 10 8 0.28 0.35 0
+letter-compact_mono 1 1 10 8 0.16 0.31 0
letter-editorial_blue 1 1 12 12 0.08 0.13 0
letter-engineering_resume 1 1 15 15 0.13 0.31 0
letter-executive 1 1 12 12 0.12 0.24 0
@@ -58,7 +58,7 @@ letter-sidebar_portrait 1 1 12 12 0.41 0.52 0
letter-timeline_minimal 1 1 15 15 0.29 0.53 0
proposal-editorial 2 2 132 130 0.50 0.81 0
proposal-indigo 1 1 72 70 0.40 0.62 0
-proposal-modern 1 1 44 44 0.05 0.20 0
+proposal-modern 1 1 44 44 0.05 0.13 0
proposal-northline 2 2 132 132 0.20 0.43 0
-receipt-modern 1 1 57 57 0.21 0.39 0
-rota-cobalt 1 1 154 154 0.15 0.31 0
+receipt-modern 1 1 57 57 0.15 0.23 0
+rota-cobalt 1 1 154 154 0.14 0.26 0
diff --git a/render-docx/src/main/java/com/demcha/compose/document/backend/semantic/docx/DocxSemanticBackend.java b/render-docx/src/main/java/com/demcha/compose/document/backend/semantic/docx/DocxSemanticBackend.java
index b013af938..1623a2081 100644
--- a/render-docx/src/main/java/com/demcha/compose/document/backend/semantic/docx/DocxSemanticBackend.java
+++ b/render-docx/src/main/java/com/demcha/compose/document/backend/semantic/docx/DocxSemanticBackend.java
@@ -289,6 +289,12 @@ public final class DocxSemanticBackend implements SemanticBackend A row of columns whose cells open with a line Word sets low, by what neither the space
+ * above it nor a padding could take ({@link #noteAFirstLineLow}), is lifted by the most any
+ * calls for too, and only that line rises: the space under it takes back what it rose
+ * ({@link #liftEachCell}). {@code ModernProfessional}'s entries, a title beside its dates in a
+ * row of their own, rose 0.24pt in Word and 0.2pt in LibreOffice, nearer the page by as much,
+ * all under them where it was (measured). Word gives every cell of a row the row's largest top margin. Where one stays as it is,
* a cell whose paragraph took the gap from its padding would be set at that margin
* whatever its own says: the padding would come back, and the line grown for it stand that
* much low. Such a row is written as before.
Only a table's cell gives its padding, in a row whose margins all even - * ({@link #everyMarginEvens}). A panel's cell keeps its: its margin is the padding less half - * its border, and Word sets the content its whole border and then that margin inside the row - * ({@link #outsideTheRow}).
+ * ({@link #everyMarginEvens}). A panel's cell keeps its for the gap: its margin is the padding + * less half its border, and Word sets the content its whole border and then that margin inside + * the row ({@link #outsideTheRow}). A first line under half a point low takes it all the same + * ({@link #paddingAbove}). * * @return the twips taken, 0 when the paragraph does not open a padded cell */ @@ -9682,8 +9812,10 @@ private double seatShift(ParagraphNode node) { * then seats it by its own measure of the face. * *A line of its own Word sets low is raised first by moving it up into the space written - * above it, where that space can take it ({@link #raiseIntoTheSpaceAbove}). What that space - * cannot give, and a line set + * above it, where that space can take it ({@link #raiseIntoTheSpaceAbove}); under half a point, + * what that space cannot give the top padding of the cell it opens takes ({@link #paddingAbove}), + * or the space above a row of columns' table ({@link #noteAFirstLineLow}). What none of them + * gives, and a line set * high, is left to the text's position, which counts in half points: a line whose difference * is under {@link #LEAST_BASELINE_SHIFT_POINTS} — a quarter point for a line of Lato body text * — keeps no position, as every line of body text moved by one would win a quarter point at @@ -9727,7 +9859,11 @@ private double shiftToThePagesBaseline(XWPFParagraph para, ParagraphNode node, d // off by its position, not four tenths. boolean moved = Math.abs(shift) >= LEAST_BASELINE_SHIFT_POINTS || cutToFit; if (ownsItsLine && !cutToFit) { - shift -= raiseIntoTheSpaceAbove(para, node, spacing, shift); + // Under half a point the position moves nothing, so the cell's padding may. + shift -= raiseIntoTheSpaceAbove(para, node, spacing, shift, !moved); + if (!moved) { + noteAFirstLineLow(para, shift); + } } return moved ? shift : 0; } @@ -9763,37 +9899,137 @@ private double shiftToThePagesBaseline(XWPFParagraph para, ParagraphNode node, d * ({@link #holdAParagraphsTopEdgeOnItsPage}), and what the line owed would stand all below it * lower. Not a paragraph the layout breaks over a page: its lines on the next page start at * that page's top, where the space above moves none of them, and what it owed would stand - * what follows them lower. Not the space above a panel's first paragraph that the panel's top - * border takes ({@link #takeTheTopBorderInside}): raised into it, the line would give it back - * and the panel grow by what it owed. Less than {@link #LEAST_RAISE_INTO_THE_SPACE_ABOVE} is - * not moved.
- * - * @param para the Word paragraph - * @param node the paragraph it is written for - * @param spacing the paragraph's spacing, its space above already written - * @param raise how far Word sets the line below the page's, in points + * what follows them lower. A paragraph in a cell of a row Word keeps whole is on one page + * wherever the row lands, though a table's composed cell has no placement of its own to say + * so ({@link #inARowKeptWhole}). Not the space above a panel's first paragraph that the + * panel's top border takes ({@link #takeTheTopBorderInside}): raised into it, the line would + * give it back and the panel grow by what it owed. Less than + * {@link #LEAST_RAISE_INTO_THE_SPACE_ABOVE} is not moved. + * + *A paragraph opening a cell has no space above it where the cell's padding is its own + * margin, and its line was left as low as Word set it under half a point. What its space above + * cannot give, it takes from that padding, where the position would move nothing + * ({@link #paddingAbove}): {@code ConsultingInvoice}'s line items, composed cells whose first + * lines Word set 0.33pt low, moved up 0.35pt in both LibreOffice builds and 0.24 to 0.36pt on + * Word's grid (measured). Half a point and more is the position's, as + * before: taken from the padding, the 3.4pt raise of {@code CobaltRota}'s masthead, whose + * position LibreOffice moves further than it is raised, came out 0.5 to 0.7pt lower there + * (measured).
+ * + * @param para the Word paragraph + * @param node the paragraph it is written for + * @param spacing the paragraph's spacing, its space above already written + * @param raise how far Word sets the line below the page's, in points + * @param intoThePadding whether the cell's padding may give what the space above cannot * @return how far the line was raised, in points */ private double raiseIntoTheSpaceAbove(XWPFParagraph para, ParagraphNode node, CTSpacing spacing, - double raise) { + double raise, boolean intoThePadding) { // A band and the text laid over the flow are overlays too (writeOverlayBand, writeOverTheFlow). if (!(raise >= LEAST_RAISE_INTO_THE_SPACE_ABOVE) || overlayDepth > 0 - || node == paragraphOpeningItsPage || !layout.onOnePage(node)) { + || node == paragraphOpeningItsPage || !layout.onOnePage(node) && !inARowKeptWhole()) { return 0; } long room = twipsOf(spacing.isSetBefore() ? spacing.getBefore() : null) - (opensThePanel(para) ? panelsFirstLineKeeps : 0); - long raised = Math.min(room, Math.round(raise * POINT_TO_TWIP)); + long wanted = Math.round(raise * POINT_TO_TWIP); + long fromAbove = Math.max(0, Math.min(room, wanted)); + long fromTheCell = intoThePadding ? Math.min(wanted - fromAbove, paddingAbove(para)) : 0; + long raised = fromAbove + fromTheCell; if (raised < Math.round(LEAST_RAISE_INTO_THE_SPACE_ABOVE * POINT_TO_TWIP)) { return 0; } - spacing.setBefore(BigInteger.valueOf(twipsOf(spacing.getBefore()) - raised)); + if (fromAbove > 0) { + spacing.setBefore(BigInteger.valueOf(twipsOf(spacing.getBefore()) - fromAbove)); + } + if (fromTheCell > 0) { + setCellMarginTwips(currentCell, true, cellMargin(currentCell, true) - fromTheCell); + if (currentCell == panelCell) { + panelRaisedFromItsPadding += fromTheCell; + } + } owePendingSpacingAfter(raised / POINT_TO_TWIP); lastRaise = raised / POINT_TO_TWIP; blocksAtTheLastRaise = blocksWritten; return raised / POINT_TO_TWIP; } + /** + * Whether the cell being written is in a row Word keeps whole on one page: a row the layout + * placed, kept so ({@link #breakRowsWhereTheLayoutDoes}, {@link #rowsPlacedWhole}), or one + * already marked so. + */ + private boolean inARowKeptWhole() { + return currentCell != null && (currentCell.getTableRow().isCantSplitRow() + || rowsPlacedWhole.contains(currentCell.getTableRow().getCtRow())); + } + + /** + * How much of the top padding of the cell a paragraph opens a raise may take, in twips + * ({@link #raiseIntoTheSpaceAbove}). + * + *A table's cell gives its padding where every margin of its row evens + * ({@link #takeFromTheTopOfItsCell}): the row then gives each cell the least top margin and + * the rest as space above its first paragraph ({@link #evenTheRowsMargins}), so the cells + * beside one raised keep their places — in Word to a step of its 0.12pt grid, set from the + * top, the middle or the bottom alike (measured). A panel written whole gives what of its padding its + * top border does not take ({@link #panelsMarginKeeps}), and its row is held as much taller + * ({@link #writePanelPiece}), as Word adds the margin left to the height a row is held at. + * A table's row is held at its height less the margins left too ({@link #holdRowHeight}), as + * much taller. LibreOffice 24.2 counts the margins inside that height + * ({@link #seatTheLabelByItsLine}): a panel or a table row held taller than its text — a + * drawing set where the page puts it — comes out taller there by the raise, under half a + * point. A shape's layers are centred in it, and none rises.
+ */ + private long paddingAbove(XWPFParagraph para) { + if (panelsPaddingGives && opensThePanel(para)) { + return Math.max(0, cellMargin(panelCell, true) - panelsMarginKeeps); + } + if (opensTheCell(para) && cellsGivingTheirPadding.contains(currentCell.getCTTc())) { + return cellMargin(currentCell, true); + } + return 0; + } + + /** Whether a paragraph is the first thing written in the cell being written. */ + private boolean opensTheCell(XWPFParagraph para) { + return currentCell != null && !currentCell.getBodyElements().isEmpty() + && currentCell.getBodyElements().get(0) instanceof XWPFParagraph first + && first.getCTP() == para.getCTP(); + } + + /** + * Notes a cell's first line that Word still sets low after its raise, for {@link #raiseRows} to + * lift its row out of the space above its table. + * + *A cell of a row of columns has no padding of its own above its first paragraph: the + * columns' space above is the row's, written above its table. Only a first row the export + * wrote for a row of columns ({@link #rowsLiftedForTheirLines}), and only where its line is not + * in an overlay — a band, a layer stack, a shape container, a canvas, the text laid over the + * flow — whose writers measure what follows from the page.
+ * + * @param low how far Word still sets the line below the page's, in points + */ + private void noteAFirstLineLow(XWPFParagraph para, double low) { + if (!(low >= LEAST_RAISE_INTO_THE_SPACE_ABOVE) || overlayDepth > 0 || !opensTheCell(para)) { + return; + } + XWPFTable table = currentCell.getTableRow().getTable(); + if (table.getRow(0) == currentCell.getTableRow() && rowsLiftedForTheirLines.contains(table)) { + firstLinesUnderTheRow.computeIfAbsent(table, key -> new java.util.LinkedHashMap<>()) + .put(currentCell, new FirstLine(para, low)); + } + } + + /** + * A cell's first paragraph, and how far Word sets its line below the page's, in points. + * + * @param paragraph the cell's first paragraph + * @param low how far below, in points + */ + private record FirstLine(XWPFParagraph paragraph, double low) { + } + /** Whether a paragraph is the first thing written in the panel's cell being written. */ private boolean opensThePanel(XWPFParagraph para) { return panelCell != null && currentCell == panelCell && !panelCell.getBodyElements().isEmpty() @@ -11309,6 +11545,8 @@ private void writeTableWithItsOwnSpacing(XWPFDocument document, DocumentNode nod boolean table = node instanceof TableNode; insetLeft += (node == leftMarginInCell ? 0 : node.margin().left()) + (table ? node.padding().left() : 0); insetRight += node.margin().right() + (table ? node.padding().right() : 0); + boolean outerOpening = rowOpeningItsPage; + rowOpeningItsPage = onANewPage; try { if (node instanceof RowNode row) { writeRow(document, row, false); @@ -11318,6 +11556,7 @@ private void writeTableWithItsOwnSpacing(XWPFDocument document, DocumentNode nod } finally { insetLeft = outerLeft; insetRight = outerRight; + rowOpeningItsPage = outerOpening; } owePendingSpacingAfter(node.margin().bottom() + node.padding().bottom()); } @@ -12048,6 +12287,9 @@ private void writeTableRows(XWPFDocument document, TableNode node) throws Except if (marginsEven) { cellsGivingTheirPadding.add(cell.getCTTc()); } + if (layout.placedRow(node, rowIdx)) { + rowsPlacedWhole.add(row.getCtRow()); + } // What the cell holds sits on the cell's fill — a stripe, not the card around // the table — wherever it has no shading of its own. DocumentColor outerSurface = surfaceBehind; @@ -13065,6 +13307,9 @@ private void writeRow(XWPFDocument document, RowNode node, boolean inItsPanel) t return; } XWPFTable table = newTable(document, 1, node.children().size()); + if (!rowOpeningItsPage) { + rowsLiftedForTheirLines.add(table); + } // A row is a layout device, not a table anybody asked to see. POI's createTable // ships Word's default single-line grid, so without this every two-column block — // a header pair, a label beside a value — exported with visible rules the PDF diff --git a/render-docx/src/test/java/com/demcha/compose/document/backend/semantic/docx/DocxComposedCellTest.java b/render-docx/src/test/java/com/demcha/compose/document/backend/semantic/docx/DocxComposedCellTest.java index 4a1e6ff43..6ac1f7606 100644 --- a/render-docx/src/test/java/com/demcha/compose/document/backend/semantic/docx/DocxComposedCellTest.java +++ b/render-docx/src/test/java/com/demcha/compose/document/backend/semantic/docx/DocxComposedCellTest.java @@ -813,8 +813,10 @@ void aRowsHeightIsWrittenLessTheMarginsItsCellsHold() throws Exception { int asTheCell = heightOf(document.getTables().get(1)); // 12pt above and below, less the default 1pt rule on each side that Word gives - // room of its own. - assertThat(inside - asTheCell).as("the second cell's 22pt of margins").isEqualTo(22 * 20); + // room of its own, and less what the second cell's first line rose into its + // padding: the margin left is that much less, and the row's height that much more. + assertThat(inside - asTheCell).as("the second cell's 22pt of margins") + .isEqualTo(22 * 20 - DocxExports.DEFAULT_LINE_RAISE); } } } diff --git a/render-docx/src/test/java/com/demcha/compose/document/backend/semantic/docx/DocxContainerPaintTest.java b/render-docx/src/test/java/com/demcha/compose/document/backend/semantic/docx/DocxContainerPaintTest.java index aa9bb3e02..04ad461db 100644 --- a/render-docx/src/test/java/com/demcha/compose/document/backend/semantic/docx/DocxContainerPaintTest.java +++ b/render-docx/src/test/java/com/demcha/compose/document/backend/semantic/docx/DocxContainerPaintTest.java @@ -132,7 +132,8 @@ void thePaddingIsTheCellsMarginsAndTheTableStartsAtTheCardsEdge() throws Excepti XWPFTable table = document.getTables().get(0); var margins = onlyCell(document).getCTTc().getTcPr().getTcMar(); - assertThat(DocxTwips.of(margins.getTop().getW())).isEqualTo(10 * 20L); + // Less what its first line rises into it, as Word sets that line low. + assertThat(DocxTwips.of(margins.getTop().getW())).isEqualTo(10 * 20L - DocxExports.DEFAULT_LINE_RAISE); assertThat(DocxTwips.of(margins.getRight().getW())).isEqualTo(14 * 20L); assertThat(DocxTwips.of(margins.getBottom().getW())).isEqualTo(12 * 20L); assertThat(DocxTwips.of(margins.getLeft().getW())).isEqualTo(16 * 20L); @@ -182,7 +183,8 @@ void aBorderStraddlesThePanelsEdgeAsOnThePage() throws Exception { var margins = onlyCell(document).getCTTc().getTcPr().getTcMar(); assertThat(DocxTwips.of(margins.getLeft().getW())).as("the padding, all of it").isEqualTo(280L); - assertThat(DocxTwips.of(margins.getTop().getW())).as("no border on top").isEqualTo(280L); + assertThat(DocxTwips.of(margins.getTop().getW())).as("no border on top, less what its first line rises into") + .isEqualTo(280L - DocxExports.DEFAULT_LINE_RAISE); assertThat(DocxTwips.of(table.getCTTbl().getTblPr().getTblW().getW())) .as("no wider on its left, where its border is centred on its edge") .isEqualTo(Math.round((placed + DocxSemanticBackend.EDITOR_COLUMN_SLACK_POINTS) * 20)); diff --git a/render-docx/src/test/java/com/demcha/compose/document/backend/semantic/docx/DocxContainerSpacingTest.java b/render-docx/src/test/java/com/demcha/compose/document/backend/semantic/docx/DocxContainerSpacingTest.java index 965f5090d..60b582e6c 100644 --- a/render-docx/src/test/java/com/demcha/compose/document/backend/semantic/docx/DocxContainerSpacingTest.java +++ b/render-docx/src/test/java/com/demcha/compose/document/backend/semantic/docx/DocxContainerSpacingTest.java @@ -81,7 +81,9 @@ void aPanelsSpacingStandsBetweenTheChildrenInItsCell() throws Exception { ListWord stands an exact line's baseline four fifths of the way down it, and the default text, + * Helvetica at 14pt, {@link DocxExports#DEFAULT_LINE_RAISE} twips lower than the page. A line + * opening a cell has no space above it of its own: the cell's padding is its margin, and a row + * of columns' space above is written above its table. What the space above cannot give, the + * padding gives, and above a row of columns the space above its table; what follows the line + * keeps its place.
+ */ +class DocxFirstLineSeatTest { + + private static final long RAISE = DocxExports.DEFAULT_LINE_RAISE; + private static final long SMALL_RAISE = DocxExports.SMALL_LINE_RAISE; + private static final DocumentColor SURFACE = DocumentColor.rgb(238, 243, 249); + private static final DocumentStroke RULE = DocumentStroke.of(DocumentColor.rgb(26, 86, 148), 2); + private static final DocumentTextStyle SMALL = DocumentTextStyle.DEFAULT.withSize(7); + + @Test + void aPanelsFirstLineRisesIntoItsPadding() throws Exception { + Exported exported = export(page -> page.addParagraph("Before").addSection("Card", card -> card + .fillColor(SURFACE).padding(DocumentInsets.of(8)).addParagraph("Inside"))); + XWPFTableCell panel = onlyTable(exported.document()).getRow(0).getCell(0); + XWPFParagraph inside = panel.getParagraphs().get(0); + + assertThat(topMargin(panel)).as("its padding, less what its line rose into").isEqualTo(8 * 20 - RAISE); + assertThat(after(inside)).as("given back below the line, what follows where it was").isEqualTo(RAISE); + assertThat(position(inside)).isZero(); + assertThat((long) panel.getTableRow().getHeight()).as("held as much taller as Word adds the margin left") + .isEqualTo(Math.round((exported.heights().get("Card") - 16) * 20) + RAISE); + } + + @Test + void aPanelsTopBorderKeepsWhatItTakesOfThePadding() throws Exception { + // Padded as far as its top border reaches past its box: the border takes the padding. + Exported exported = export(page -> page.addParagraph("Before").addSection("Card", card -> card + .fillColor(SURFACE).borders(DocumentBorders.top(RULE)).padding(DocumentInsets.of(2)) + .addParagraph("Inside"))); + XWPFTableCell panel = onlyTable(exported.document()).getRow(0).getCell(0); + + assertThat(topMargin(panel)).isZero(); + assertThat(after(panel.getParagraphs().get(0))).as("nothing risen, nothing owed").isZero(); + assertThat(exported.report().bySubject()).doesNotContainKey("SectionNode"); + } + + @Test + void aLineHalfAPointLowAndMoreKeepsItsPosition() throws Exception { + // Spectral's 30pt line stands 4.9pt low in Word: the position moves it, as before. + Exported exported = export(page -> page.addSection("Card", card -> card.fillColor(SURFACE) + .padding(DocumentInsets.of(8)).addParagraph(p -> p.text("Title").textStyle(spectral(30))))); + XWPFTableCell panel = onlyTable(exported.document()).getRow(0).getCell(0); + + assertThat(topMargin(panel)).as("its padding, all of it").isEqualTo(8 * 20); + assertThat(position(panel.getParagraphs().get(0))).isPositive(); + } + + @Test + void aComposedCellsFirstLineRisesIntoItsCellsPadding() throws Exception { + try (XWPFDocument document = DocxExports.withLayout(400, 600, 20, page -> page.addTable(t -> t + .columns(DocumentTableColumn.fixed(160)) + .rowCells(composed(new ParagraphBuilder().text("Inside").build()))) + .addParagraph("After"))) { + XWPFTableCell cell = onlyTable(document).getRow(0).getCell(0); + XWPFParagraph inside = cell.getParagraphs().get(0); + + assertThat(topMargin(cell)).as("its padding, less what its line rose into").isEqualTo(4 * 20 - RAISE); + assertThat(after(inside)).isEqualTo(RAISE); + assertThat(position(inside)).isZero(); + } + } + + @Test + void aCellBesideOneOpeningWithAPanelKeepsItsPadding() throws Exception { + // A badge, a painted section, is a table in its cell, which keeps its margin; Word gives the + // row's cells its margin, the largest, and a line risen into a smaller one would not rise. + try (XWPFDocument document = DocxExports.withLayout(400, 600, 20, page -> page.addTable(t -> t + .columns(DocumentTableColumn.fixed(160), DocumentTableColumn.fixed(160)) + .rowCells(composed(new ParagraphBuilder().text("Inside").build()), + composed(new SectionBuilder().name("Badge").fillColor(SURFACE) + .padding(DocumentInsets.of(4)).addParagraph("Paid").build()))) + .addParagraph("After"))) { + XWPFTableCell inside = onlyTable(document).getRow(0).getCell(0); + + assertThat(onlyTable(document).getRow(0).getCell(1).getBodyElements().get(0)) + .as("the premise: the badge is a table").isInstanceOf(XWPFTable.class); + assertThat(topMargin(inside)).as("its padding, all of it").isEqualTo(4 * 20); + assertThat(after(inside.getParagraphs().get(0))).isZero(); + } + } + + @Test + void aCellBesideAPictureRisesIntoItsPadding() throws Exception { + // A picture leaves its cell a paragraph to hold it: the row's margins even. + try (XWPFDocument document = DocxExports.withLayout(400, 600, 20, page -> page.addTable(t -> t + .columns(DocumentTableColumn.fixed(160), DocumentTableColumn.fixed(160)) + .rowCells(composed(new ParagraphBuilder().text("Inside").build()), + composed(new com.demcha.compose.document.dsl.ImageBuilder() + .source(com.demcha.compose.document.image.DocumentImageData.fromBytes(png())) + .size(12, 12).build()))) + .addParagraph("After"))) { + XWPFTableCell inside = onlyTable(document).getRow(0).getCell(0); + + assertThat(onlyTable(document).getRow(0).getCell(1).getBodyElements().get(0)) + .as("the premise: the picture's cell opens with a paragraph").isInstanceOf(XWPFParagraph.class); + assertThat(topMargin(inside)).as("its padding, less what its line rose into").isEqualTo(4 * 20 - RAISE); + assertThat(after(inside.getParagraphs().get(0))).isEqualTo(RAISE); + } + } + + @Test + void aPanelSplitOverAPageKeepsItsPadding() throws Exception { + // Only a panel written whole is held to a height its raise can be added to. + try (XWPFDocument document = DocxExports.withLayout(400, 600, 20, page -> page.addSection("Card", card -> card + .fillColor(SURFACE).padding(DocumentInsets.of(8)).addParagraph("First") + .addPageBreak(b -> b.name("Break")).addParagraph("Second")))) { + XWPFTableCell first = document.getTables().get(0).getRow(0).getCell(0); + + assertThat(document.getTables()).as("the premise: a table a piece").hasSize(2); + assertThat(topMargin(first)).as("its padding, all of it").isEqualTo(8 * 20); + assertThat(after(first.getParagraphs().get(0))).isZero(); + } + } + + @Test + void theCellBesideOneThatRoseKeepsItsPlace() throws Exception { + // Lato at 10pt Word sets high: it does not rise, and takes the row's margin back above it. + try (XWPFDocument document = DocxExports.withLayout(400, 600, 20, page -> page.addTable(t -> t + .columns(DocumentTableColumn.fixed(160), DocumentTableColumn.fixed(160)) + .rowCells(composed(new ParagraphBuilder().text("Inside").build()), + composed(new ParagraphBuilder().text("Beside").textStyle(lato(10)).build()))) + .addParagraph("After"))) { + XWPFTableCell beside = onlyTable(document).getRow(0).getCell(1); + + assertThat(topMargin(beside)).as("the row's margin").isEqualTo(4 * 20 - RAISE); + assertThat(before(beside.getParagraphs().get(0))).as("what it gave, above its line").isEqualTo(RAISE); + assertThat(after(beside.getParagraphs().get(0))).isZero(); + } + } + + @Test + void aLineInAComposedCellRisesIntoTheSpaceAboveIt() throws Exception { + // A composed cell has no placement of its own, but its row is kept on one page. + DocumentTableCell cell = DocumentTableCell.node(new SectionBuilder().name("Two").spacing(9) + .addParagraph("First").addParagraph("Second").build()) + .withStyle(DocumentTableStyle.builder().padding(DocumentInsets.zero()).build()); + try (XWPFDocument document = DocxExports.withLayout(400, 600, 20, page -> page.addTable(t -> t + .columns(DocumentTableColumn.fixed(160)).rowCells(cell)) + .addParagraph("After"))) { + List