Documentation
How each report page is built, and exactly what to edit to plug in real student data.
1 Overview
Each report page is a single self-contained HTML file (e.g. 02 - AlignEd Cover Page.html).
A page is built from two stacked layers inside one fixed A4 frame:
- Background layer (
.bg-svg) — all the graphics: shapes, colours, charts, icons, dividers. This is a vector SVG. You normally never touch this. - Text layer (the
.absdivs) — every piece of editable text, positioned exactly on top of the graphics. This is what you edit.
Because text lives in real HTML (not baked into the image), you can change wording, plug in a student's name and scores, translate, or restyle — without any design tools.
2 Page anatomy
Open any page file and you'll see this skeleton:
<div class="page-container"> <!-- fixed A4 page, clips overflow -->
<div class="page"> <!-- rendered at 2x, scaled to 0.5 -->
<!-- LAYER 1: graphics (do not edit) -->
<div class="bg-svg">
<svg ...> ... shapes, charts, icons ... </svg>
</div>
<!-- LAYER 2: editable text overlays -->
<div class="abs" style="left:106px;top:1042px;...">John Doe</div>
<div class="abs" style="left:106px;top:1102px;...">Class 10</div>
...
</div>
</div>
0.5 lets tiny Figma fonts stay crisp and exact. You don't need to change anything for this to work.3 Editing text
Every editable string is the content between a <div class="abs" ...> and its closing </div>. To change it, edit only that inner text — leave the style="..." alone (it holds the exact position, font and colour).
<div class="abs" style="...z-index:2">John Doe</div>
<div class="abs" style="...z-index:2">Priya Sharma</div>
Multi-line text
Use <br> for a line break inside a label, exactly as the generator does:
<div class="abs" ...>Healthcare, Emergency &<br>Medical Services (Ops)</div>
John Doe).4 Binding live data
The pages ship with placeholder data. To generate a real report, replace the placeholders with the student's values. The cover page placeholders, for example, are:
John Doe → student full name
Class 10 → grade / class
Omega School → institution name
10.04.2026 → report date
Automating it (developers)
Because each value is plain text inside a uniquely-positioned div, you can bind data programmatically. Two common options:
- String replace — keep a copy with clear tokens and substitute server-side or in a script.
- Add an
idto the divs you need (e.g.id="student-name") and settextContentfrom JSON.
// give the div an id once: <div id="student-name" class="abs" ...>
const data = { name: "Priya Sharma", grade: "Class 10" };
document.getElementById("student-name").textContent = data.name;
5 Colours & styles
Each overlay's look is controlled by inline CSS in its style attribute. The most useful properties:
color— text colour (hex, e.g.#242a34).font-size/line-height— sizes are at 2x; the page scales to 0.5, so a52pxvalue shows as 26px.font-weight— 400 (regular), 600/700 (bold).left/top/width— exact position from Figma; change only to reposition.
6 Do & Don't
<div class="abs"> tags · change color on a text overlay · use <br> for line breaks · keep one report = one HTML file.<div class="bg-svg"> · change the .page transform:scale(0.5) · remove the Google Fonts <link> in the head (text would fall back to a different font and shift).7 Troubleshooting
Text looks like the wrong font
Ensure you're online (fonts load from Google Fonts) and the <link> in the page head is intact.
A label runs off its box
It likely needs a line break — insert <br> where it should wrap.
Text shifted after editing
You probably changed a value inside style="...". Undo and edit only the text between the tags.