All six heading levels, plus the UA-default margins.
Four text-align values plus the inherited line-height.
Left-aligned. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Centered. The quick brown fox jumps over the lazy dog three times in a row to test inline measurement.
Right-aligned. Sphinx of black quartz, judge my vow -- a pangram that uses every letter of the English alphabet at least once.
Justified. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
UA-default block display for every structural element. Each row prefixed with the tag name so a visual sweep tells you which boxes the engine actually stacked vertically.
p:p
blockquote:blockquote
pre:pre (whitespace preserved)
address:address
display:block per UA. attr() in content is NOT implemented yet, so the tag labels are stamped as literal text instead of generated.Every inline element handled by the parser, in a single paragraph.
bold, strong, italic, emphasis, underline, strikeS, strike, del, mark, small, big, sup, sub, HTML, code, Ctrl+S, output, variable, teletype, span-styled, link, q-quoted
, font.
Triple-stack: bold italic underlined. NOBR:
Named, numeric decimal, numeric hex.
Named: & < > " (C) (R) (TM) * * <<guillemets>> -- - ... deg +/- x / P sec. + ++ (nbsp)
Numeric decimal: ABC = ABC. Star *, heart (heart), music (music).
Numeric hex: ABC = ABC. Star *, smile :).
Polish: orzel -- bialy, czarny, labedz.
Plain links, button-styled, anchor jumps, link in image. a:link CSS rule applied to the button.
Plain link: juen.in * Bold: Aminet * Italic: RastPort * Image link:
back to top
Internal anchor: jump to tables >> * Bare #: scrolls to top
All list-style-type values + nested lists + list-style-position.
Amelinium_low).Data table with header, body, footer, zebra rows (via :nth-child(even)), colspan / rowspan.
| Name | Version | Size | Description |
|---|---|---|---|
| program1.lha | 1.0 | 45 K | A demonstration program |
| utility2.lha | 2.3 | 128 K | Useful utility with many features |
| game3.lha | 0.9 | 1.2 M | Simple but addictive |
| tool4.lha | 3.1 | 22 K | Small command-line tool |
| Total entries: | 4 | ||
| R0C0 | R0-R1 / C1 (rowspan=2) | R0C2 |
| R1C0 | R1C2 | |
| R2 spans 3 columns | ||
| Sidebar Navigation column. Per CSS 2.1 sec.17.5.3 every cell in a row stretches to the row's height. |
Main The body of the layout. This pattern is still common on Amiga-era pages and works without flex/grid. |
CSS 2.1 sec.17.6.2.1 border conflict resolution (0.6); caption-side: bottom (0.6); explicit column widths via <col> (0.6).
Middle column declares a thicker double border. Per sec.17.6.2.1 that border wins over the neighbour's thinner solid border -- pre-0.6 the engine drew both, doubling the line.
| A1 | B1 thick double | C1 |
| A2 | B2 thick double | C2 |
| A3 | B3 thick double | C3 |
| Year | Event |
|---|---|
| 1985 | Amiga 1000 launched |
| 1992 | AmigaOS 3.0 / AGA chipset |
| 2026 | Amelinium 0.6 ships |
| narrow | medium | auto fills the rest |
| 80px | 200px | flexible -- takes whatever's left |
| A | B short | C with much longer header text that overflows |
|---|---|---|
| 1 | 2 | 3 truncated content because table-layout:fixed + overflow:hidden |
| X | X | |
| X |
empty-cells:hide render without a border. Implementation in 0.6 may treat this as parse-only.Every input type the engine renders. The hidden input below the heading should produce no visible box.
Explicit size, scaled, with border, HTML4 align attribute, image-link.

Same image at half size, border="2": 
Inline tiny:
mixed with text.
![]()
CSS 2.1 sec.9.5 -- text wraps around floats; clear moves past them.
Text flows around a left-floated image. The image is given explicit width and height so layout knows its box up-front. The paragraph keeps wrapping until the cleared bottom of the image. Then enough lines fill in to push past it and demonstrate CSS 2.1 sec.9.5 float behaviour. Floats are essential for old-school sidebars and Amiga-era page designs. Sphinx of black quartz, judge my vow.
Cleared by clear:both.
Right-floated image. Same idea, mirrored. The paragraph text fills the LEFT side instead. Useful for icons on the right margin, or for the classic Amiga-magazine layout. Pack my box with five dozen liquor jugs.
Cleared.
Containing block for position:absolute = nearest position:relative ancestor (CSS 2.1 sec.10.1). position:fixed currently treated as absolute (no scroll-aware fixed positioning).
Absolute with all four sides set -- fills CB minus 4px margin:
Fixed (treated as absolute) -- the corner badge in the top-right of the viewport is position:fixed.
Positioned boxes with explicit z-index. Visual order: green (z=2) sits behind red (z=3) but above blue (z=1).
Same declared width 200px + padding 10 + border 4. content-box total = 228; border-box total = 200.
All eight named border styles. groove/ridge/inset/outset render with the same two-tone shading in 0.6 (acceptable approximation).
Type, universal, class, ID, compound. Each row's selector is named in <span>.
Type p selector picks this up implicitly via UA defaults
Descendant (space), child (>), adjacent sibling (+), general sibling (~).
Direct child paragraph -- should be red bold (matched by .cmb-parent > p) AND italic (matched by .cmb-parent p descendant).
Grandchild paragraph inside a div -- should be italic ONLY (descendant matches, child does not).
Immediately after h3 -- should have yellow background from .cmb-host + p AND green color from .cmb-host ~ p.
Second sibling -- green only (general sibling ~ matches, adjacent + does not).
Third sibling -- green only.
CSS 2.1: [attr], [attr=val], [attr~=val], [attr|=val]. CSS 3: [attr^=val], [attr$=val], [attr*=val]. Demos use real HTML attributes only (target, type, title, lang) since the parser drops generic data-* attrs.
[attr] presence: target= present -> red * no target -> default color
[attr=val] exact: a text input below should be cream-coloured (matched by input[type="text"]):
[title~=val] word match: the word hot in space-separated list:
title="hot" -> bold *
title="cold hot extra" -> bold *
title="hotter" (not exact word) -> normal
[lang|=en] hyphen-prefix:
English (en) -> italic *
en-US -> italic (prefix match) *
pl -> normal
[title^="pre"] starts-with (CSS3): title="prefix-x" -> green
[title$="post"] ends-with (CSS3): title="x-post" -> red
[title*="mid"] substring (CSS3): title="x-mid-y" -> blue bg
Already used heavily in the table zebra rows. Standalone demo here for direct visual check.
| row 1 | :first-child -> green bg, bold |
| row 2 | :nth-child(2) -> cream bg |
| row 3 | :nth-child(3n) -> light blue bg |
| row 4 | default |
| row 5 | default |
| row 6 | :nth-child(3n) -> light blue bg again |
| row 7 | :last-child -> red bg, italic |
Compound class (.X.Y) requires BOTH classes on same element. ID beats class beats type.
.spec (no win class) -> grey
.spec.win -> navy (p.spec.win beats .spec.win on specificity)
#spec-id -> red (id beats class)
::before / ::after insert generated content. ::first-letter styles the first character (drop cap). ::first-line is currently parse-only (the rule is accepted but the styling does not apply visually).
prefix only
suffix only
both wrapping
He said: this is a quoted phrase
, and then continued.
The very first line of this paragraph SHOULD render bold and red if ::first-line were fully implemented. In 0.6 the rule is accepted by the parser but the layout does not apply it yet -- this is documented behaviour.
Auto-numbered headings via counter-reset + counter-increment + counter() inside content.
Counters give you numbered headings without typing the number yourself.
Reset happens on the container; each h3 bumps the counter.
Decimal only in 0.6. counters() (plural) and attr() not yet implemented.
RTG truecolor: per-pixel interpolation. Chipset / 8-bit RTG: 32 strip bands along the dominant axis.
Variables defined on :root, consumed via var(--name). Fallback resolves when the name is unbound. Scoped overrides inherit down the subtree.
--paper / --ink / --accent from :rootvar(--missing-name, #2d572c), falls back to green--accent as background, --paper as text.theme-dark -- same .var-card class but the three vars are re-bound on this ancestor. Demonstrates per-element scope inheritance.border-radius: 12px border-radius: 4px
text-shadow with amber offset
uppercase: the quick brown fox
LOWERCASE: THE QUICK BROWN FOX
capitalize: the quick brown fox
First line is indented by 32px. The wrapped second line returns to the left margin. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.
letter-spacing: 2px -- each character gets extra horizontal space.
word-spacing: 8px -- extra gap between words.
line-height: 28px -- taller-than-normal line. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
white-space:nowrap -- this paragraph should NOT wrap inside the 200px container, even though the text is long.
white-space:pre -- spaces and newlines preserved exactly. Tabs also kept.
white-space:pre-wrap -- newlines preserved AND wrapping happens when the line is too long for the container width which is 240px here.
white-space:pre-line -- newlines kept, multiple spaces collapse. Second line.
word-wrap:break-word -- a verylongunbreakableidentifierWithoutSpaces still wraps to stay inside the box.
Inside table cells: top, middle, bottom, baseline. In inline context: super, sub.
| top | middle | bottom | baseline | reference (60px tall) |
Inline: E = mc2 and H2O are super and sub.
BEFORE | [invisible but space reserved] | AFTER
BEFORE | [removed entirely] | AFTER (the two pipes are adjacent because the hidden span collapses)
The box below is GREEN on screens >=501px wide and RED on narrower (<=500px). Resize the window to toggle.
.imp-test.override sets color:#c63b1c !important, which beats an inline style="color:#0000ff".
Plain -- grey (from .imp-test {color:#444})
Override class -- RED (!important beats class default)
Inline-override too -- STILL RED because !important wins against inline non-!important
CSS 2.1 sec.5.11.4 -- matches by the closest ancestor with lang= attribute. Prefix-with-hyphen rule (en matches en, en-US, but not english).
Polski tekst * Deutscher Text * English text (default) * en-US (matches [lang|=en] from sec.20)
Amelinium-specific URL handling -- these don't generate visual output, just documentation.
RAM:test.html -- AmigaDOS volume pathWork:dir/page.html -- absolute path on Work:PROGDIR:start.html -- relative to the executablefile://Work:foo.html -- file:// URI wrapperhttp://juen.in/... -- HTTPhttps://... -- HTTPS via AmiSSL v5 (not in Amelinium_low)Binary-content sniff: any response without a text/* or image/* Content-Type that begins with an Amiga hunk / LHA / LZX / ZIP / gzip / 7z / ELF / MZ / PDF / IFF / ADF magic falls through to Save-As rather than rendering hexdump noise.