Repository navigation
Report Themes
A report opens in a light or a dark theme (5.0.0). Every colour it draws comes from a set of CSS custom properties, its tokens, so a stylesheet of your own can restyle it by setting them again.
A report follows the system's light or dark setting, and keeps following it as it changes, until the reader picks a theme with the switch at the right of the report's title. The pick then holds, over a reload and over the system's setting. The theme is chosen in the page's head, before anything is drawn, so the page never flashes the other theme.
The pick is the one thing a report keeps in the browser's storage, in local storage as kronikol.theme. Where the
browser refuses the page its storage, the pick holds while the page is open, over the system's setting too, and the
next load follows the system's setting again.
The page's link holds the filters: the search (q), status, deps, depx, depmode, depstates, hp,
hpx, tags, tagx, tagmode, tagstates, dur and pctl
(Generated Reports › Deep links), beside a scenario's address,
which opens the Features tab, from 5.2.0 the tab (tab=) and the Features tab's view (view=), and from 5.11.0 the
Search tab's state (type=, in=, s=, o=, p=) and the match a search result went to (hit=), each written only
where it says something the link would not say without it. The query builder lists the searches run since the page
opened, in memory only. The browser's history of the page keeps where the reader was scrolled and what had the focus,
for Back, Forward and a reload (Generated Reports › Back and Forward).
Nothing else is kept: the display toggles, the payload controls and what is open start from the report's settings on
each load (Report Configuration › Toggle Default Start States).
A copy of the page opened without its scripts still follows the system's setting, through a
prefers-color-scheme block in the token sheet.
The labs page (TestRunReport.labs.html) and the Specifications report take the theme the same way, with the same
switch on their title line. From 5.11.0 the search button sits left of the switch on the report and the Specifications
report; the labs page, which has nothing to search, has none.
The page draws a diagram in the theme's colours: participants, arrows, notes, step bars, lanes and labels read their
colours from the --dg-* tokens. A copy of a diagram (the right-click menu's Copy, Save and Open in new tab, as SVG
or PNG) carries the look in the light theme's colours, whichever theme the page shows, so a pasted diagram reads on a
white document.
From 5.8.0 a loop (a run of identical calls collapsed into loop ×N) and the Setup box take the theme's colours too:
a loop is a rounded box shaded --dg-loop with a thin --dg-loop-edge line, the tab holding the word "loop" shaded
--dg-loop-tab, and the Setup box is a rounded frame shaded --dg-setup with a thin --dg-setup-edge line. A Setup
box in a colour you name with SetupHighlightColor keeps that colour in both themes. A diagram drawn with your own
PlantUmlTheme keeps the theme's loops.
From 5.35.0 a failed answer's reason, drawn in the note on its return, is painted --dg-fail-ink, the report's own
failure red (--kron-fail). The engine draws it firebrick, which a diagram drawn away from the page keeps.
Set the tokens again in a sheet of your own, given as CustomCss (see Report Configuration).
That sheet comes after the report's own sheets, so its values win. Set the light values on :root, and the dark
values twice, as the token sheet does: on :root[data-theme="dark"], which the script in the page's head sets for a
reader who picked dark and for a page following a dark system setting, and again on :root:not([data-theme]) under
prefers-color-scheme: dark, for a copy of the page opened without its scripts. A value set on :root alone shows
in the light theme only.
:root {
--kron-accent: #0b6e4f;
--kron-selected: #d7efe5;
--kron-selected-ink: #0a5c42;
}
:root[data-theme="dark"] {
--kron-accent: #5fd0a8;
--kron-selected: #17362b;
--kron-selected-ink: #a8e6cf;
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme]) {
--kron-accent: #5fd0a8;
--kron-selected: #17362b;
--kron-selected-ink: #a8e6cf;
}
}Keep text at 4.5:1 or more on the grounds it sits on (--kron-card, --kron-ground, --kron-strip), in both themes.
From 5.11.0 the words a search result takes you to are marked in two tokens, in the page and in the diagrams it draws:
--kron-mark, the ground under the matched words, and --kron-mark-edge, the line under them and the outline of the
one the result named
(Search and Filter Syntax › The search and its results).
The defaults keep the edge at 3:1 or more against a payload's note, an event's note, a step bar and the card, and every
ink a marked word is drawn in at 4.5:1 on the ground, in both themes. Keep that if you set them.
A sheet written against 4.x's rules or colours may no longer apply where 5.0.0 changed the markup: the features and their steps, the failure diff, the parameter table, the run band, the filter rows and the payload controls. Where it still applies, it paints the same colours in both themes. Set the tokens instead. Migrating to v5: the report lists the classes and functions 5.0.0 took out.
The Specifications report's default sheet, Stylesheets.VioletThemeStyleSheet (the default of
HtmlSpecificationsCustomStyleSheet), is a theme written this way. It sets the report's tokens for the light and the
dark theme in the three blocks above, adds a few variables of its own (--violet-card, --violet-rail,
--violet-edge, --violet-solid, --violet-solid-hover) for its cards and its solid violet, and then gives a short
list of rules their colours from those variables: the violet cards, the hover edges, and the chosen controls in solid
violet under white. Set HtmlSpecificationsCustomStyleSheet to null for the Specifications report in the default
blue.
Every token, with its value in each theme. The page tokens colour the report itself; the diagram tokens colour what the page draws in a diagram.
| Token | Light | Dark |
|---|---|---|
--kron-accent |
#2559c7 |
#7ea6f2 |
--kron-selected |
#dce8fb |
#1f3254 |
--kron-selected-ink |
#1d4fb0 |
#b0c9fb |
--kron-selected-edge |
#6a8fd9 |
#5b82cf |
--kron-accent-rail |
rgba(37, 89, 199, .18) |
rgba(126, 166, 242, .30) |
--kron-hover |
#edf1f8 |
#222b38 |
--kron-ground |
#ebeef4 |
#0e131a |
--kron-card |
#ffffff |
#171d26 |
--kron-strip |
#f8fafd |
#1b222c |
--kron-strip-edge |
#d3d9e3 |
#323c4b |
--kron-field |
#f2f5f9 |
#1f2732 |
--kron-quiet |
#f7f9fc |
#1b222c |
--kron-quiet-edge |
#d3d9e3 |
#323c4b |
--kron-hairline |
#d0d7e2 |
#343e4d |
--kron-hairline-soft |
#e2e7ee |
#262f3b |
--kron-divider |
#cdd4df |
#384354 |
--kron-divider-soft |
#dde2ea |
#2b3440 |
--kron-control-border |
#aeb7c6 |
#4a5568 |
--kron-select-border |
#7a8496 |
#748093 |
--kron-dot |
#8a94a5 |
#7d899b |
--kron-shadow |
rgba(20, 30, 60, .06) |
rgba(0, 0, 0, .45) |
--kron-card-shadow |
0 1px 2px rgba(20, 30, 60, .07), 0 2px 6px rgba(20, 30, 60, .05) |
0 1px 2px rgba(0, 0, 0, .5), 0 2px 8px rgba(0, 0, 0, .3) |
--kron-panel |
#f4f6fa |
#12181f |
--kron-ink |
#242b36 |
#e4e9f0 |
--kron-ink-soft |
#4a5361 |
#c5cdd8 |
--kron-ink-quiet |
#545c6a |
#b3bcc8 |
--kron-muted |
#5b6474 |
#a0aab7 |
--kron-label |
#5f6878 |
#9ba5b3 |
--kron-label-soft |
#616a7a |
#98a2b0 |
--kron-faint |
#626b7a |
#949eac |
--kron-on-solid |
#ffffff |
#ffffff |
--kron-on-accent |
#ffffff |
#10161e |
--kron-pass |
#276c44 |
#62cd8f |
--kron-pass-soft |
#e6f3ec |
#15301f |
--kron-pass-ring |
#3f9a62 |
#3fa66a |
--kron-fail |
#b3372e |
#f28b81 |
--kron-fail-soft |
#fbecea |
#3b1d1b |
--kron-fail-edge |
#efc7c2 |
#6e302b |
--kron-fail-ink |
#7c2a24 |
#f6b3ab |
--kron-fail-shadow |
rgba(120, 30, 25, .25) |
rgba(0, 0, 0, .45) |
--kron-fail-solid |
#b3372e |
#b8433a |
--kron-exclude-soft |
#fbf1f0 |
#351f1d |
--kron-exclude-edge |
#e6c9c5 |
#6a3934 |
--kron-exclude-ink |
#8a4a43 |
#eea69d |
--kron-exception-soft |
#f8dcd9 |
#4a2220 |
--kron-warn |
#8a5a17 |
#e5b066 |
--kron-warn-soft |
#fbf3e7 |
#2d2415 |
--kron-warn-edge |
#ecd3ae |
#66502a |
--kron-mark |
#fff1a8 |
#4a3800 |
--kron-mark-edge |
#9a6700 |
#d29922 |
--kron-skip |
#5b6170 |
#a9b1be |
--kron-skip-soft |
#eef0f3 |
#262e39 |
--kron-bypass |
#285fba |
#8ab1f6 |
--kron-bypass-soft |
#e8f0fc |
#1c2a45 |
--kron-code-bg |
#e9edf3 |
#262f3c |
--kron-track |
#edf0f5 |
#232b37 |
--kron-prop-key |
#7d3c98 |
#c99be3 |
--kron-prop-val |
#1a5276 |
#8fc3ec |
--kron-overlay |
rgba(0, 0, 0, .4) |
rgba(0, 0, 0, .6) |
--kron-font |
-apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Roboto, "Helvetica Neue", Arial, sans-serif |
(the light value) |
--kron-mono |
ui-monospace, SFMono-Regular, "SF Mono", Menlo, "Cascadia Mono", Consolas, "Liberation Mono", monospace |
(the light value) |
--kron-fs-label |
11px |
(the light value) |
--kron-fs-meta |
12px |
(the light value) |
--kron-fs-control |
13px |
(the light value) |
--kron-fs-body |
14px |
(the light value) |
--kron-fs-feature |
16px |
(the light value) |
--kron-fs-title |
22px |
(the light value) |
--kron-label-track |
.06em |
(the light value) |
| Token | Light | Dark |
|---|---|---|
--dg-bg |
#ffffff |
#171d26 |
--dg-ink |
#242b36 |
#e4e9f0 |
--dg-ink-soft |
#5b6474 |
#aab3c0 |
--dg-line |
#4a5361 |
#8792a3 |
--dg-participant |
#e9eef6 |
#253041 |
--dg-participant-edge |
#b6c2d5 |
#4d5d76 |
--dg-lifeline |
#cdd5e0 |
#334052 |
--dg-note |
#fdf6e4 |
#2b2618 |
--dg-note-edge |
#b9a57a |
#75653f |
--dg-card-edge |
#e0cf9f |
#5e5236 |
--dg-event |
#eee1f7 |
#2a2140 |
--dg-event-edge |
#b48cc8 |
#7d5c9c |
--dg-event-card-edge |
#cfb6e6 |
#5d4780 |
--dg-pass |
#e3f1e8 |
#15301f |
--dg-pass-edge |
#8cbf9f |
#33724d |
--dg-fail |
#fbe8e6 |
#3b1d1b |
--dg-fail-edge |
#dc9f97 |
#7c3b34 |
--dg-fail-ink |
#b3372e |
#f28b81 |
--dg-bar |
#2f3b4f |
#3d4d69 |
--dg-step |
#e9eef6 |
#222c3a |
--dg-step-edge |
#c4cfdf |
#3b4a60 |
--dg-step-ink |
#2f3b4f |
#dbe3ee |
--dg-step-table |
#ffffff |
#131a24 |
--dg-loop |
#f4f7fb |
#1d2632 |
--dg-loop-edge |
#cdd5e0 |
#334052 |
--dg-loop-tab |
#e9eef6 |
#253041 |
--dg-setup |
#f6f6f6 |
#1a212b |
--dg-setup-edge |
#d5dbe4 |
#2c3646 |
--dg-flame-fill |
58% 93% |
26% 21% |
--dg-flame-edge |
42% 54% |
48% 60% |
--dg-flame-hover |
62% 87% |
30% 27% |
--dg-activity |
#eef3fc |
#1d2638 |
--dg-activity-edge |
#5f6878 |
#7d899b |
--dg-lane |
#c9d1de |
#3a4656 |
--dg-http |
#438dd5 |
#6aa5e4 |
--dg-http-fill |
#2b6cb0 |
(the light value) |
--dg-db |
#0e7c86 |
#45b3bf |
--dg-db-fill |
#0b6c75 |
(the light value) |
--dg-db-edge |
#09616a |
#2f8f99 |
--dg-msg |
#9b59b6 |
#c18fdc |
--dg-msg-fill |
#8e44ad |
(the light value) |
--dg-person |
#08427b |
#2f6db0 |
--dg-icon |
#ffffff |
#222b38 |
--dg-icon-edge |
#8a94a5 |
#7d899b |
--dg-icon-ink |
#5b6474 |
#c5cdd8 |
--dg-badge |
#2f3b4e |
#c5cdd8 |
--dg-badge-ink |
#ffffff |
#171d26 |
Home · 🔍 Search this wiki Full-text search across every page. The “Pages” list above matches page and heading names, not page content.
Getting Started
- Quick Start (xUnit)
- Project Templates
- AI Integration Prompt
- Framework Integration Guides
- Migrating to v5
- Migrating to v4
Common Tasks
Integration Guides
- Integration xUnit3
- Integration xUnit2
- Integration NUnit
- Integration MSTest
- Integration TUnit
- Integration BDDfy xUnit3
- Integration LightBDD xUnit2
- Integration LightBDD xUnit3
- Integration LightBDD TUnit
- Integration ReqNRoll xUnit2
- Integration ReqNRoll xUnit3
- Integration ReqNRoll TUnit
- Integration Playwright
Uninstrumentable / polyglot backends
- Integration ProxyTap Extension
- Integration TcpTap Extension
- Integration Otlp Extension
- Exporting to OpenTelemetry
- Ingesting External Captures
- Ingesting from Jest
- Integration Cucumber Messages
- Capture-Time Redaction
Extensions
- Integration AtlasDataApi Extension
- Integration BigQuery Extension
- Integration Bigtable Extension
- Integration BlobStorage Extension
- Integration ClickHouse Extension
- Integration CloudStorage Extension
- Integration CosmosDB Extension
- Integration Dapper Extension
- Integration DynamoDB Extension
- Integration EF Core Relational Extension
- Integration Elasticsearch Extension
- Integration EventBridge Extension
- Integration EventHubs Extension
- Integration Grpc Extension
- Integration Kafka Extension
- Integration MassTransit Extension
- Integration MongoDB Extension
- Integration MySqlConnector Extension
- Integration Npgsql Extension
- Integration Oracle Extension
- Integration PubSub Extension
- Integration Redis Extension
- Integration S3 Extension
- Integration ServiceBus Extension
- Integration SNS Extension
- Integration Spanner Extension
- Integration SqlClient Extension
- Integration Sqlite Extension
- Integration SQS Extension
- Integration StorageQueues Extension
- Integration OpenTelemetry Extension
- Integration DispatchProxy Extension
- Integration MediatR Extension
- Integration PlantUML IKVM
Configuration
- Tracking Dependencies
- Tracking Custom Dependencies
- HTTP Tracking Setup
- Report Configuration
- Diagram Customisation
- Phase-Aware Tracking
- Content Formatting
- PlantUML Server Configuration
Features
- Generated Reports
- Report Themes
- Search and Filter Syntax
- Component Diagrams
- PlantUML Browser Rendering
- Inline SVG Rendering
- Internal Flow Tracking
- Tags and Attributes
- Excluding Requests
- Excluded Headers
- Multi-Host Test Architectures
- Event-Driven Architecture Testing
- Service Bus Tracking Patterns
- Background Thread Correlation
- Parallel-Safe Background Correlation
- Event & Message Tracking
- Assertion Tracking
- Step Tracking
- Tabular Attributes
- Large Response and Diagram Handling
- Querying Reports
- Service Card
- Cross-Run History
- Diagnostics and Debugging
- CI Summary Integration
- CI Artifact Upload
- Merging Parallel Reports
Reference