How this page works · How to use, step by step · What is new · Privacy
The drawing is the toolkit's invented sample flat (samples/synthetic_flat.dxf). Open your own plan file to work on your drawing.
Installationsplan-Symbole, erster Entwurf (UNGEPRÜFT) (version 0.1.0): UNVERIFIED — not yet checked against the standard text or the Elektroplaner.
Files you open are read in this browser only; Save writes to your computer. Nothing is uploaded.
UNVERIFIED Installationsplan-Symbole, erster Entwurf (UNGEPRÜFT)
Licht / Lighting
Schalter / Switches
Steckdosen / Sockets
Küche/Geräte / Kitchen/appliances
Daten/TV / Data/TV
Sicherheit / Safety
Verteiler / Distribution
What the editor does, and the fastest way in.
Short answer: drag symbols onto the plan, connect each switch to its lights, then save the layout or print it.
Plan where the outlets, switches and lights of a flat go, on top of the architect's drawing. Your plan file is read in this browser and never sent anywhere.
One tab per task: the steps first, the details folded below.
From the placement rules (presets/el_parameters.json).
| Suggestion | Symbols | Values |
|---|---|---|
| Switch beside a door | SA, SW, SK, ST | switch_from_frame_m, switch_inset_m, switch_inset_other_m |
| Socket at the centre of a wall piece | SO, SS1, SS2 | socket_min_piece_m, socket_inset_m, door_cut_max_m, window_margin_m |
| Ceiling light at the room centre | LD | ceiling_light_at |
| Kitchen outlets along the walls of a kitchen | HE, GS, BO, KS, WM | kitchen_keywords, kitchen_spacing_m, kitchen_end_margin_m, socket_inset_m, door_cut_max_m, window_margin_m |
Every button of the drawing viewer, what it does and its keys.
| Control | What it does | Keys |
|---|---|---|
| Zoom in (+) | Zooms in on the centre of the drawing. | pinch, or Ctrl/⌘ + wheel: around the pointer |
| Zoom out (−) | Zooms out from the centre of the drawing. | pinch, or Ctrl/⌘ + wheel: around the pointer |
| Pan and zoom | Drag the empty drawing to move it. The view never leaves the storey. | drag; pinch or Ctrl/⌘ + wheel; plain wheel scrolls the page |
| Reset view | Shows the whole storey again; layer ticks stay. | |
| All layers on | Ticks every drawing layer, also those off in the DXF. | |
| All layers off | Unticks every drawing layer; then tick only what you want. | |
| Filter layers | Shortens the layer list; the drawing is not changed. | type part of a name |
| Layers panel (fold) | Folds the layer panel away; remembered when the browser allows. | click the title |
| Print view | One A3 landscape page: ticked layers, placed symbols, title row, scale note, legend. | then ⌘P / Ctrl+P |
| Fit storey / Current view | In the print view: the whole storey, or the window you zoomed to. | |
| Exit print view | Back to the editor, layers and zoom as before. | Escape |
| Rotate 90° | Turns the selected symbol 90° counter-clockwise. | R |
| Delete | Deletes the selected symbol (with its links) or link. | Delete, Backspace |
| Undo / Redo | Takes back, or does again, the last change. | Ctrl/⌘ + Z, Ctrl/⌘ + Shift + Z |
| Cancel / stop | Cancels a picked symbol, stops Connect, deselects. | Escape |
| Place with the keyboard | Enter on a palette symbol, then Enter on the drawing: placed mid-view. | Enter |
The symbol set the palette offers. Hover a code for its links.
UNVERIFIED: every symbol was drawn by us and not checked against the standard. Ask the Elektroplaner to confirm them.
From presets/el_symbols_at.json.
| Symbol | Code | Name (DE) | Name (EN) | Category | Layer | Connects to | Status |
|---|---|---|---|---|---|---|---|
LD | Deckenleuchte | Ceiling light | Licht | Elektro – Licht | SA, SW, SK, ST | UNVERIFIED | |
LW | Wandleuchte | Wall light | Licht | Elektro – Licht | SA, SW, SK, ST | UNVERIFIED | |
SA | Ausschalter | Switch (one-way) | Schalter | Elektro – Schalter | LD, LW | UNVERIFIED | |
SW | Wechselschalter | Two-way switch | Schalter | Elektro – Schalter | LD, LW | UNVERIFIED | |
SK | Kreuzschalter | Intermediate switch | Schalter | Elektro – Schalter | LD, LW | UNVERIFIED | |
ST | Taster | Push-button | Schalter | Elektro – Schalter | LD, LW | UNVERIFIED | |
SO | Steckdose ohne Schutzkontakt | Socket without protective earth | Steckdosen | Elektro – Steckdosen | none | UNVERIFIED | |
SS1 | Schutzkontakt-Steckdose 1-fach | Socket with protective earth, single | Steckdosen | Elektro – Steckdosen | none | UNVERIFIED | |
SS2 | Schutzkontakt-Steckdose 2-fach | Socket with protective earth, double | Steckdosen | Elektro – Steckdosen | none | UNVERIFIED | |
HE | Herdanschluss 400 V | Cooker outlet 400 V | Küche/Geräte | Elektro – Küche/Geräte | none | UNVERIFIED | |
GS | Steckdose Geschirrspüler | Dishwasher socket | Küche/Geräte | Elektro – Küche/Geräte | none | UNVERIFIED | |
BO | Anschluss Backofen | Oven outlet | Küche/Geräte | Elektro – Küche/Geräte | none | UNVERIFIED | |
KS | Steckdose Kühlschrank | Fridge socket | Küche/Geräte | Elektro – Küche/Geräte | none | UNVERIFIED | |
WM | Steckdose Waschmaschine | Washing machine socket | Küche/Geräte | Elektro – Küche/Geräte | none | UNVERIFIED | |
DN | Datendose RJ45 | Network outlet RJ45 | Daten/TV | Elektro – Daten/TV | none | UNVERIFIED | |
TV | Antennendose TV/SAT | TV/SAT outlet | Daten/TV | Elektro – Daten/TV | none | UNVERIFIED | |
RM | Rauchwarnmelder | Smoke alarm | Sicherheit | Elektro – Sicherheit | none | UNVERIFIED | |
VT | Verteiler | Distribution board | Verteiler | Elektro – Verteiler | none | UNVERIFIED |
From presets/el_symbols_at.json.
| Field | Value |
|---|---|
| Id | at-iec60617-draft1 |
| Version | 0.1.0 |
| Name | Installationsplan-Symbole, erster Entwurf (UNGEPRÜFT) / Installation-plan symbols, first draft (UNVERIFIED) |
| Standard claimed | ÖVE/ÖNORM EN 60617 (graphical symbols for diagrams; the part with the symbols for installation plans) |
| Installation standard | OVE E 8101 (low-voltage electrical installations in Austria) |
| Edition | not checked: the symbols were drawn without the standard text, so no edition can be claimed |
| Status | UNVERIFIED — not yet checked against the standard text or the Elektroplaner |
| Verified | no |
| Verified against | nothing yet |
| Provenance | Drawn for the vienna_planning_toolkit by Claude (an AI assistant) from general knowledge of the IEC 60617 installation-plan conventions as used on German and Austrian plans. Plain lines, arcs and letters only. Not copied from any file, website or catalogue, and not checked against the standard text. |
| To verify | Obtain the symbol table of ÖVE/ÖNORM EN 60617 (installation-plan symbols) or the Elektroplaner's legend, compare every symbol, then set verified to true and verified_against to the document and edition for each symbol that matches (and redraw the ones that do not). |
| Units | Millimetres on the storey sheet (the architect's plan at its print scale). The symbol's insertion point is 0,0; +y (down) is the wall side: a socket's stem points to the wall it sits on. Rotation turns the symbol about 0,0. |
| Symbols | 18 |
The values behind the suggestions, hints, colours and widths.
Values we chose to get started. None is taken from a standard: each says where the …
From presets/el_parameters.json (rules), the one home of these values.
| Rule | Value | Unit | Status | What it does | Source |
|---|---|---|---|---|---|
Switch: distance from the door frameswitch_from_frame_m | 0.1 – 0.2 | m (range: from, to) | to confirm | A switch or push-button is suggested beside each door of … | Idea: on German and Austrian plans a light switch usually … |
Switch: into the room (swing side)switch_inset_m | 0.15 | m | to confirm | How far from the door's opening line (the chord of … | Our choice, so that the symbol stands just inside the … |
Switch: into the room (other side)switch_inset_other_m | 0.35 | m | to confirm | The same on the other side of the door, where … | Our guess: a typical inner wall (about 0.12 to 0.25 … |
Socket: shortest wall piecesocket_min_piece_m | 0.6 | m | to confirm | A socket is suggested at the centre of every piece … | Our guess: shorter pieces are usually returns and niches. Not … |
Socket: off the wall facesocket_inset_m | 0.1 | m | to confirm | How far into the room from the outline (the wall … | Our choice, so that the symbol sits on the wall … |
Door opening cuts a wall piece withindoor_cut_max_m | 0.5 | m | to confirm | A door's or window's opening cuts a piece of the … | Our guess at a thick Altbau wall plus a margin; … |
Window: sockets keep clear bywindow_margin_m | 0.2 | m | to confirm | Socket and kitchen suggestions keep clear of each window opening … | Our guess: room for the window reveal and a curtain; … |
Ceiling light: whereceiling_light_at | centre | to confirm | A ceiling light is suggested at the room's centre: the … | Idea: one ceiling outlet in the middle of the room … | |
Kitchen: label wordskitchen_keywords | küche, kueche, kochen, kochnische, teeküche, kitchen | words (case ignored) | to confirm | A room whose label contains one of these words is … | Our list of German and English words for a kitchen; … |
Kitchen outlets: spacingkitchen_spacing_m | 0.6 | m | to confirm | Kitchen and appliance outlets are suggested along each wall piece … | Idea: the usual kitchen cabinet module is 60 cm wide, … |
Kitchen outlets: from the piece's endskitchen_end_margin_m | 0.3 | m | to confirm | The first and last kitchen suggestion of a wall piece … | Idea: half a 60 cm cabinet module. Not from an … |
Check: a switch counts for a door withinhint_switch_near_door_m | 1 | m | to confirm | Layout check H3 'door without a switch': a door of … | Our choice: a switch more than about an arm's length … |
Room type living: label wordsroom_words_living | wohn, living, salon, esszimmer | words (case ignored) | to confirm | A room whose label contains one of these words is … | Our list of German and English words; check it against … |
Room type bedroom: label wordsroom_words_bedroom | schlaf, kinder, gäste, gaeste, bedroom | words (case ignored) | to confirm | A room whose label contains one of these words is … | Our list of German and English words; check it against … |
Room type hall: label wordsroom_words_hall | vorraum, vorzimmer, flur, diele, gang, hall | words (case ignored) | to confirm | A room whose label contains one of these words is … | Our list of German and English words; check it against … |
Room type storage: label wordsroom_words_storage | abstell, speis, lager, storage | words (case ignored) | to confirm | A room whose label contains one of these words is … | Our list of German and English words; check it against … |
Check: rooms that need a lightcheck_light_room_types | kitchen, wet, living, bedroom, hall | room types | to confirm | Layout check: every room of these types has at least … | Our starting value, not from a standard; most rooms of … |
Check: sockets in a living room, at leastcheck_min_sockets_living | 4 | outlets | to confirm | Layout check: a living room has at least this many … | Our starting value, not from a standard; ÖVE and DIN … |
Check: sockets in a bedroom, at leastcheck_min_sockets_bedroom | 3 | outlets | to confirm | Layout check: a bedroom has at least this many socket … | Our starting value, not from a standard; ÖVE and DIN … |
Check: sockets in a kitchen, at leastcheck_min_sockets_kitchen | 4 | outlets | to confirm | Layout check: a kitchen has at least this many socket … | Our starting value, not from a standard; ÖVE and DIN … |
Check: sockets in a wet room, at leastcheck_min_sockets_wet | 1 | outlets | to confirm | Layout check: a wet room (bath, WC) has at least … | Our starting value, not from a standard; ÖVE and DIN … |
Check: sockets in a hall, at leastcheck_min_sockets_hall | 1 | outlets | to confirm | Layout check: a hall has at least this many socket … | Our starting value, not from a standard; ÖVE and DIN … |
Check: appliance outlets in a kitchen, at leastcheck_min_appliance_outlets_kitchen | 2 | outlets | to confirm | Layout check: a kitchen has at least this many appliance … | Our starting value, not from a standard: a cooker and … |
Check: rooms that need a smoke alarmcheck_smoke_room_types | bedroom, hall | room types | to confirm | Layout check: every room of these types has a smoke … | Our starting value, not from a standard; the Austrian rules … |
Snap radius (both rule sets)snap_radius_m | 0.5 | m | to confirm | Starting value – confirm. A symbol let go within this … |
Every value is null until the Elektroplaner gives one; fill in value and source here. While …
From presets/el_parameters.json (rules), the one home of these values.
| Rule | Value | Unit | Status | What it does | Source |
|---|---|---|---|---|---|
Switch: distance from the door frameswitch_from_frame_m | no value yet | m (range: from, to) | no value yet | A switch or push-button is suggested beside each door of … | |
Switch: into the room (swing side)switch_inset_m | no value yet | m | no value yet | How far from the door's opening line (the chord of … | |
Switch: into the room (other side)switch_inset_other_m | no value yet | m | no value yet | The same on the other side of the door, where … | |
Socket: shortest wall piecesocket_min_piece_m | no value yet | m | no value yet | A socket is suggested at the centre of every piece … | |
Socket: off the wall facesocket_inset_m | no value yet | m | no value yet | How far into the room from the outline (the wall … | |
Door opening cuts a wall piece withindoor_cut_max_m | no value yet | m | no value yet | A door's or window's opening cuts a piece of the … | |
Window: sockets keep clear bywindow_margin_m | no value yet | m | no value yet | Socket and kitchen suggestions keep clear of each window opening … | |
Ceiling light: whereceiling_light_at | no value yet | no value yet | A ceiling light is suggested at the room's centre: the … | ||
Kitchen: label wordskitchen_keywords | no value yet | words (case ignored) | no value yet | A room whose label contains one of these words is … | |
Kitchen outlets: spacingkitchen_spacing_m | no value yet | m | no value yet | Kitchen and appliance outlets are suggested along each wall piece … | |
Kitchen outlets: from the piece's endskitchen_end_margin_m | no value yet | m | no value yet | The first and last kitchen suggestion of a wall piece … | |
Check: a switch counts for a door withinhint_switch_near_door_m | no value yet | m | no value yet | Layout check H3 'door without a switch': a door of … | |
Room type living: label wordsroom_words_living | no value yet | words (case ignored) | no value yet | A room whose label contains one of these words is … | |
Room type bedroom: label wordsroom_words_bedroom | no value yet | words (case ignored) | no value yet | A room whose label contains one of these words is … | |
Room type hall: label wordsroom_words_hall | no value yet | words (case ignored) | no value yet | A room whose label contains one of these words is … | |
Room type storage: label wordsroom_words_storage | no value yet | words (case ignored) | no value yet | A room whose label contains one of these words is … | |
Check: rooms that need a lightcheck_light_room_types | no value yet | room types | no value yet | Layout check: every room of these types has at least … | |
Check: sockets in a living room, at leastcheck_min_sockets_living | no value yet | outlets | no value yet | Layout check: a living room has at least this many … | |
Check: sockets in a bedroom, at leastcheck_min_sockets_bedroom | no value yet | outlets | no value yet | Layout check: a bedroom has at least this many socket … | |
Check: sockets in a kitchen, at leastcheck_min_sockets_kitchen | no value yet | outlets | no value yet | Layout check: a kitchen has at least this many socket … | |
Check: sockets in a wet room, at leastcheck_min_sockets_wet | no value yet | outlets | no value yet | Layout check: a wet room (bath, WC) has at least … | |
Check: sockets in a hall, at leastcheck_min_sockets_hall | no value yet | outlets | no value yet | Layout check: a hall has at least this many socket … | |
Check: appliance outlets in a kitchen, at leastcheck_min_appliance_outlets_kitchen | no value yet | outlets | no value yet | Layout check: a kitchen has at least this many appliance … | |
Check: rooms that need a smoke alarmcheck_smoke_room_types | no value yet | room types | no value yet | Layout check: every room of these types has a smoke … | |
Snap radius (both rule sets)snap_radius_m | 0.5 | m | to confirm | Starting value – confirm. A symbol let go within this … |
From presets/el_parameters.json (the one home of these colours); contrast checked by the tests.
| Palette | Colour of | Colour | Background | Contrast |
|---|---|---|---|---|
| Colours on screen (black background) | Licht / lighting | #ffd54f | #000000 | 14.9 : 1 |
| Colours on screen (black background) | Schalter / switches | #64b5f6 | #000000 | 9.5 : 1 |
| Colours on screen (black background) | Steckdosen / sockets | #ff6b6b | #000000 | 7.6 : 1 |
| Colours on screen (black background) | Küche/Geräte / kitchen, appliances | #ce93d8 | #000000 | 8.8 : 1 |
| Colours on screen (black background) | Daten/TV / data, TV | #69f0ae | #000000 | 14.7 : 1 |
| Colours on screen (black background) | Sicherheit / safety | #ffab40 | #000000 | 11.2 : 1 |
| Colours on screen (black background) | Verteiler / distribution | #eeff41 | #000000 | 19.0 : 1 |
| Colours on screen (black background) | Links (Wirkungslinien) | #00e5ff | #000000 | 13.7 : 1 |
| Colours on screen (black background) | Suggestion marker | #ffffff | #000000 | 14.9 : 1 |
| Colours on screen (black background) | Suggestion it would snap to | #ffea00 | #000000 | 17.0 : 1 |
| Colours on screen (black background) | Selection box | #ffea00 | #000000 | 17.0 : 1 |
| Colours on screen (black background) | Connect: symbols the switch may control | #00e676 | #000000 | 12.6 : 1 |
| Colours on screen (black background) | Connect: the switch picked | #ffea00 | #000000 | 17.0 : 1 |
| Colours in the print (white paper) | Licht / lighting | #7a5200 | #ffffff | 6.9 : 1 |
| Colours in the print (white paper) | Schalter / switches | #1a4f9c | #ffffff | 7.9 : 1 |
| Colours in the print (white paper) | Steckdosen / sockets | #b0141f | #ffffff | 7.1 : 1 |
| Colours in the print (white paper) | Küche/Geräte / kitchen, appliances | #6d2f86 | #ffffff | 8.7 : 1 |
| Colours in the print (white paper) | Daten/TV / data, TV | #1d6b44 | #ffffff | 6.5 : 1 |
| Colours in the print (white paper) | Sicherheit / safety | #8a3a00 | #ffffff | 7.8 : 1 |
| Colours in the print (white paper) | Verteiler / distribution | #000000 | #ffffff | 21.0 : 1 |
| Colours in the print (white paper) | Links (Wirkungslinien) | #1a4f9c | #ffffff | 7.9 : 1 |
| Colours in the print (white paper) | Suggestion marker (never printed) | #5f6368 | #ffffff | 4.3 : 1 |
| Colours in the print (white paper) | Suggestion it would snap to (never printed) | #0b57d0 | #ffffff | 6.4 : 1 |
| Colours in the print (white paper) | Selection box (never printed) | #0b57d0 | #ffffff | 6.4 : 1 |
| Colours in the print (white paper) | Connect highlight (never printed) | #137333 | #ffffff | 6.0 : 1 |
| Colours in the print (white paper) | Connect: the switch picked (never printed) | #0b57d0 | #ffffff | 6.4 : 1 |
No Austrian colour standard for the colours of installation-plan symbols was checked: these colours … WCAG 2.1 success criterion 1.4.11 (non-text contrast): 3:1 for graphical objects. Every …
From presets/el_parameters.json (SHA-256 17cbe4be554e…), the one home of these values.
| Group | Parameter | Value | Unit | Status | Applies | Source |
|---|---|---|---|---|---|---|
| Snapping | Snap radiussnap.snap_radius_m | 0.5 | m | to confirm | Live | Our choice; the same for both rule sets. |
| Symbols on the drawing | Symbol size factorpage.symbol_scale | 1 | x nominal mm | to confirm | Live | Our choice. |
| Symbols on the drawing | Room label within (no outline)page.room_label_max_m | 2 | m | to confirm | Live | Our choice. |
| Colours on screen (black background) | Background (stage)colours_screen.background | #000000 | to confirm | Live | Our choice for contrast on black: saturated, one hue per … | |
| Colours on screen (black background) | Licht / lightingcolours_screen.licht | #ffd54f | to confirm | Live | Our choice for contrast on black: saturated, one hue per … | |
| Colours on screen (black background) | Schalter / switchescolours_screen.schalter | #64b5f6 | to confirm | Live | Our choice for contrast on black: saturated, one hue per … | |
| Colours on screen (black background) | Steckdosen / socketscolours_screen.steckdosen | #ff6b6b | to confirm | Live | Our choice for contrast on black: saturated, one hue per … | |
| Colours on screen (black background) | Küche/Geräte / kitchen, appliancescolours_screen.kueche | #ce93d8 | to confirm | Live | Our choice for contrast on black: saturated, one hue per … | |
| Colours on screen (black background) | Daten/TV / data, TVcolours_screen.daten | #69f0ae | to confirm | Live | Our choice for contrast on black: saturated, one hue per … | |
| Colours on screen (black background) | Sicherheit / safetycolours_screen.sicherheit | #ffab40 | to confirm | Live | Our choice for contrast on black: saturated, one hue per … | |
| Colours on screen (black background) | Verteiler / distributioncolours_screen.verteiler | #eeff41 | to confirm | Live | Our choice for contrast on black: saturated, one hue per … | |
| Colours on screen (black background) | Links (Wirkungslinien)colours_screen.link | #00e5ff | to confirm | Live | Our choice for contrast on black: saturated, one hue per … | |
| Colours on screen (black background) | Suggestion markercolours_screen.marker | #ffffff | to confirm | Live | Our choice for contrast on black: saturated, one hue per … | |
| Colours on screen (black background) | Suggestion it would snap tocolours_screen.marker_hit | #ffea00 | to confirm | Live | Our choice for contrast on black: saturated, one hue per … | |
| Colours on screen (black background) | Selection boxcolours_screen.selection | #ffea00 | to confirm | Live | Our choice for contrast on black: saturated, one hue per … | |
| Colours on screen (black background) | Connect: symbols the switch may controlcolours_screen.connect_allowed | #00e676 | to confirm | Live | Our choice for contrast on black: saturated, one hue per … | |
| Colours on screen (black background) | Connect: the switch pickedcolours_screen.connect_source | #ffea00 | to confirm | Live | Our choice for contrast on black: saturated, one hue per … | |
| Colours in the print (white paper) | Papercolours_print.background | #ffffff | to confirm | Live | Dark and saturated colours for paper, at least 3:1 against … | |
| Colours in the print (white paper) | Licht / lightingcolours_print.licht | #7a5200 | to confirm | Live | Dark and saturated colours for paper, at least 3:1 against … | |
| Colours in the print (white paper) | Schalter / switchescolours_print.schalter | #1a4f9c | to confirm | Live | Dark and saturated colours for paper, at least 3:1 against … | |
| Colours in the print (white paper) | Steckdosen / socketscolours_print.steckdosen | #b0141f | to confirm | Live | Dark and saturated colours for paper, at least 3:1 against … | |
| Colours in the print (white paper) | Küche/Geräte / kitchen, appliancescolours_print.kueche | #6d2f86 | to confirm | Live | Dark and saturated colours for paper, at least 3:1 against … | |
| Colours in the print (white paper) | Daten/TV / data, TVcolours_print.daten | #1d6b44 | to confirm | Live | Dark and saturated colours for paper, at least 3:1 against … | |
| Colours in the print (white paper) | Sicherheit / safetycolours_print.sicherheit | #8a3a00 | to confirm | Live | Dark and saturated colours for paper, at least 3:1 against … | |
| Colours in the print (white paper) | Verteiler / distributioncolours_print.verteiler | #000000 | to confirm | Live | Dark and saturated colours for paper, at least 3:1 against … | |
| Colours in the print (white paper) | Links (Wirkungslinien)colours_print.link | #1a4f9c | to confirm | Live | Dark and saturated colours for paper, at least 3:1 against … | |
| Colours in the print (white paper) | Suggestion marker (never printed)colours_print.marker | #5f6368 | to confirm | Live | Dark and saturated colours for paper, at least 3:1 against … | |
| Colours in the print (white paper) | Suggestion it would snap to (never printed)colours_print.marker_hit | #0b57d0 | to confirm | Live | Dark and saturated colours for paper, at least 3:1 against … | |
| Colours in the print (white paper) | Selection box (never printed)colours_print.selection | #0b57d0 | to confirm | Live | Dark and saturated colours for paper, at least 3:1 against … | |
| Colours in the print (white paper) | Connect highlight (never printed)colours_print.connect_allowed | #137333 | to confirm | Live | Dark and saturated colours for paper, at least 3:1 against … | |
| Colours in the print (white paper) | Connect: the switch picked (never printed)colours_print.connect_source | #0b57d0 | to confirm | Live | Dark and saturated colours for paper, at least 3:1 against … | |
| Drawing on screen (light on black) | Lines: lightest-in-CAD becomesdrawing_screen.stroke_lightness_min | 0.62 | HSL lightness 0–1 | to confirm | Live | Our choice. Each CAD colour keeps its hue (so Bestand, … |
| Drawing on screen (light on black) | Lines: darkest-in-CAD becomesdrawing_screen.stroke_lightness_max | 0.9 | HSL lightness 0–1 | to confirm | Live | Our choice. Each CAD colour keeps its hue (so Bestand, … |
| Drawing on screen (light on black) | Fills: lightest-in-CAD becomesdrawing_screen.fill_lightness_min | 0 | HSL lightness 0–1 | to confirm | Live | Our choice. Each CAD colour keeps its hue (so Bestand, … |
| Drawing on screen (light on black) | Fills: darkest-in-CAD becomesdrawing_screen.fill_lightness_max | 0.4 | HSL lightness 0–1 | to confirm | Live | Our choice. Each CAD colour keeps its hue (so Bestand, … |
| Drawing on screen (light on black) | Saturation keptdrawing_screen.saturation | 0.55 | factor 0–1 | to confirm | Live | Our choice. Each CAD colour keeps its hue (so Bestand, … |
| Drawing in the print (dark on white) | Lines: darkest-in-CAD becomesdrawing_print.stroke_lightness_min | 0 | HSL lightness 0–1 | to confirm | Live | Our choice: the drawing printed in dark, muted colours so … |
| Drawing in the print (dark on white) | Lines: lightest-in-CAD becomesdrawing_print.stroke_lightness_max | 0.45 | HSL lightness 0–1 | to confirm | Live | Our choice: the drawing printed in dark, muted colours so … |
| Drawing in the print (dark on white) | Fills: darkest-in-CAD becomesdrawing_print.fill_lightness_min | 0.72 | HSL lightness 0–1 | to confirm | Live | Our choice: the drawing printed in dark, muted colours so … |
| Drawing in the print (dark on white) | Fills: lightest-in-CAD becomesdrawing_print.fill_lightness_max | 1 | HSL lightness 0–1 | to confirm | Live | Our choice: the drawing printed in dark, muted colours so … |
| Drawing in the print (dark on white) | Saturation keptdrawing_print.saturation | 0.5 | factor 0–1 | to confirm | Live | Our choice: the drawing printed in dark, muted colours so … |
| Line widths and marker size on screen | Symbol linesscreen_lines.symbol_stroke_px | 1.75 | px | to confirm | Live | Our choice. Screen pixels at every zoom (non-scaling strokes), so … |
| Line widths and marker size on screen | Link linesscreen_lines.link_stroke_px | 2 | px | to confirm | Live | Our choice. Screen pixels at every zoom (non-scaling strokes), so … |
| Line widths and marker size on screen | Link dash (on, off)screen_lines.link_dash_px | 8 – 5 | px | to confirm | Live | Our choice. Screen pixels at every zoom (non-scaling strokes), so … |
| Line widths and marker size on screen | Suggestion marker radiusscreen_lines.marker_radius_px | 10 | px | to confirm | Live | Our choice. Screen pixels at every zoom (non-scaling strokes), so … |
| Line widths and marker size on screen | Suggestion marker linescreen_lines.marker_stroke_px | 2 | px | to confirm | Live | Our choice. Screen pixels at every zoom (non-scaling strokes), so … |
| Line widths and marker size on screen | Suggestion marker opacity (other rooms)screen_lines.marker_opacity | 0.85 | 0–1 | to confirm | Live | Our choice. Screen pixels at every zoom (non-scaling strokes), so … |
| Line widths and marker size on screen | Selection box linescreen_lines.selection_stroke_px | 1.5 | px | to confirm | Live | Our choice. Screen pixels at every zoom (non-scaling strokes), so … |
| Line widths and marker size on screen | Connect: symbols the switch cannot controlscreen_lines.dim_opacity | 0.3 | 0–1 | to confirm | Live | Our choice. Screen pixels at every zoom (non-scaling strokes), so … |
| Link lines in the print | Link lineprint_lines.link_stroke_mm | 0.25 | mm | to confirm | Live | Our choice: a thin dashed line on the A3 sheet, … |
| Link lines in the print | Link dash (on, off)print_lines.link_dash_mm | 1.5 – 1 | mm | to confirm | Live | Our choice: a thin dashed line on the A3 sheet, … |
| Examples (generated) | Simple example: socketsexamples.simple_sockets | 2 | count | to confirm | Needs re-export | Our choice of symbols for the generated examples (vpt/el_examples.py); positions … |
| Examples (generated) | Simple example: doors of its roomexamples.simple_doors | 2 | count | to confirm | Needs re-export | Our choice of symbols for the generated examples (vpt/el_examples.py); positions … |
| Examples (generated) | Socket symbolexamples.socket_code | SS2 | symbol code | to confirm | Needs re-export | Our choice of symbols for the generated examples (vpt/el_examples.py); positions … |
| Examples (generated) | Kitchen outlets, in turnexamples.kitchen_codes | HE, GS, BO, KS | symbol codes | to confirm | Needs re-export | Our choice of symbols for the generated examples (vpt/el_examples.py); positions … |
| Examples (generated) | Smoke alarm symbolexamples.smoke_code | RM | symbol code | to confirm | Needs re-export | Our choice of symbols for the generated examples (vpt/el_examples.py); positions … |
| Examples (generated) | Smoke alarm: beside the ceiling lightexamples.smoke_offset_m | 0.6 | m | to confirm | Needs re-export | Our choice of symbols for the generated examples (vpt/el_examples.py); positions … |
| Examples (generated) | Distribution board symbolexamples.board_code | VT | symbol code | to confirm | Needs re-export | Our choice of symbols for the generated examples (vpt/el_examples.py); positions … |
| Placement rules: starting values (to confirm) | Switch: distance from the door framerules.starting.switch_from_frame_m | 0.1 – 0.2 | m (range: from, to) | to confirm | Needs re-export | Idea: on German and Austrian plans a light switch usually … |
| Placement rules: starting values (to confirm) | Switch: into the room (swing side)rules.starting.switch_inset_m | 0.15 | m | to confirm | Needs re-export | Our choice, so that the symbol stands just inside the … |
| Placement rules: starting values (to confirm) | Switch: into the room (other side)rules.starting.switch_inset_other_m | 0.35 | m | to confirm | Needs re-export | Our guess: a typical inner wall (about 0.12 to 0.25 … |
| Placement rules: starting values (to confirm) | Socket: shortest wall piecerules.starting.socket_min_piece_m | 0.6 | m | to confirm | Needs re-export | Our guess: shorter pieces are usually returns and niches. Not … |
| Placement rules: starting values (to confirm) | Socket: off the wall facerules.starting.socket_inset_m | 0.1 | m | to confirm | Needs re-export | Our choice, so that the symbol sits on the wall … |
| Placement rules: starting values (to confirm) | Door opening cuts a wall piece withinrules.starting.door_cut_max_m | 0.5 | m | to confirm | Needs re-export | Our guess at a thick Altbau wall plus a margin; … |
| Placement rules: starting values (to confirm) | Window: sockets keep clear byrules.starting.window_margin_m | 0.2 | m | to confirm | Needs re-export | Our guess: room for the window reveal and a curtain; … |
| Placement rules: starting values (to confirm) | Ceiling light: whererules.starting.ceiling_light_at | centre | to confirm | Needs re-export | Idea: one ceiling outlet in the middle of the room … | |
| Placement rules: starting values (to confirm) | Kitchen: label wordsrules.starting.kitchen_keywords | küche, kueche, kochen, kochnische, teeküche, kitchen | words (case ignored) | to confirm | Needs re-export | Our list of German and English words for a kitchen; … |
| Placement rules: starting values (to confirm) | Kitchen outlets: spacingrules.starting.kitchen_spacing_m | 0.6 | m | to confirm | Needs re-export | Idea: the usual kitchen cabinet module is 60 cm wide, … |
| Placement rules: starting values (to confirm) | Kitchen outlets: from the piece's endsrules.starting.kitchen_end_margin_m | 0.3 | m | to confirm | Needs re-export | Idea: half a 60 cm cabinet module. Not from an … |
| Placement rules: starting values (to confirm) | Check: a switch counts for a door withinrules.starting.hint_switch_near_door_m | 1 | m | to confirm | Live | Our choice: a switch more than about an arm's length … |
| Placement rules: starting values (to confirm) | Room type living: label wordsrules.starting.room_words_living | wohn, living, salon, esszimmer | words (case ignored) | to confirm | Live | Our list of German and English words; check it against … |
| Placement rules: starting values (to confirm) | Room type bedroom: label wordsrules.starting.room_words_bedroom | schlaf, kinder, gäste, gaeste, bedroom | words (case ignored) | to confirm | Live | Our list of German and English words; check it against … |
| Placement rules: starting values (to confirm) | Room type hall: label wordsrules.starting.room_words_hall | vorraum, vorzimmer, flur, diele, gang, hall | words (case ignored) | to confirm | Live | Our list of German and English words; check it against … |
| Placement rules: starting values (to confirm) | Room type storage: label wordsrules.starting.room_words_storage | abstell, speis, lager, storage | words (case ignored) | to confirm | Live | Our list of German and English words; check it against … |
| Placement rules: starting values (to confirm) | Check: rooms that need a lightrules.starting.check_light_room_types | kitchen, wet, living, bedroom, hall | room types | to confirm | Live | Our starting value, not from a standard; most rooms of … |
| Placement rules: starting values (to confirm) | Check: sockets in a living room, at leastrules.starting.check_min_sockets_living | 4 | outlets | to confirm | Live | Our starting value, not from a standard; ÖVE and DIN … |
| Placement rules: starting values (to confirm) | Check: sockets in a bedroom, at leastrules.starting.check_min_sockets_bedroom | 3 | outlets | to confirm | Live | Our starting value, not from a standard; ÖVE and DIN … |
| Placement rules: starting values (to confirm) | Check: sockets in a kitchen, at leastrules.starting.check_min_sockets_kitchen | 4 | outlets | to confirm | Live | Our starting value, not from a standard; ÖVE and DIN … |
| Placement rules: starting values (to confirm) | Check: sockets in a wet room, at leastrules.starting.check_min_sockets_wet | 1 | outlets | to confirm | Live | Our starting value, not from a standard; ÖVE and DIN … |
| Placement rules: starting values (to confirm) | Check: sockets in a hall, at leastrules.starting.check_min_sockets_hall | 1 | outlets | to confirm | Live | Our starting value, not from a standard; ÖVE and DIN … |
| Placement rules: starting values (to confirm) | Check: appliance outlets in a kitchen, at leastrules.starting.check_min_appliance_outlets_kitchen | 2 | outlets | to confirm | Live | Our starting value, not from a standard: a cooker and … |
| Placement rules: starting values (to confirm) | Check: rooms that need a smoke alarmrules.starting.check_smoke_room_types | bedroom, hall | room types | to confirm | Live | Our starting value, not from a standard; the Austrian rules … |
| Placement rules: Elektroplaner values | Switch: distance from the door framerules.elektroplaner.switch_from_frame_m | no value yet | m (range: from, to) | no value yet | Needs re-export | |
| Placement rules: Elektroplaner values | Switch: into the room (swing side)rules.elektroplaner.switch_inset_m | no value yet | m | no value yet | Needs re-export | |
| Placement rules: Elektroplaner values | Switch: into the room (other side)rules.elektroplaner.switch_inset_other_m | no value yet | m | no value yet | Needs re-export | |
| Placement rules: Elektroplaner values | Socket: shortest wall piecerules.elektroplaner.socket_min_piece_m | no value yet | m | no value yet | Needs re-export | |
| Placement rules: Elektroplaner values | Socket: off the wall facerules.elektroplaner.socket_inset_m | no value yet | m | no value yet | Needs re-export | |
| Placement rules: Elektroplaner values | Door opening cuts a wall piece withinrules.elektroplaner.door_cut_max_m | no value yet | m | no value yet | Needs re-export | |
| Placement rules: Elektroplaner values | Window: sockets keep clear byrules.elektroplaner.window_margin_m | no value yet | m | no value yet | Needs re-export | |
| Placement rules: Elektroplaner values | Ceiling light: whererules.elektroplaner.ceiling_light_at | no value yet | no value yet | Needs re-export | ||
| Placement rules: Elektroplaner values | Kitchen: label wordsrules.elektroplaner.kitchen_keywords | no value yet | words (case ignored) | no value yet | Needs re-export | |
| Placement rules: Elektroplaner values | Kitchen outlets: spacingrules.elektroplaner.kitchen_spacing_m | no value yet | m | no value yet | Needs re-export | |
| Placement rules: Elektroplaner values | Kitchen outlets: from the piece's endsrules.elektroplaner.kitchen_end_margin_m | no value yet | m | no value yet | Needs re-export | |
| Placement rules: Elektroplaner values | Check: a switch counts for a door withinrules.elektroplaner.hint_switch_near_door_m | no value yet | m | no value yet | Live | |
| Placement rules: Elektroplaner values | Room type living: label wordsrules.elektroplaner.room_words_living | no value yet | words (case ignored) | no value yet | Live | |
| Placement rules: Elektroplaner values | Room type bedroom: label wordsrules.elektroplaner.room_words_bedroom | no value yet | words (case ignored) | no value yet | Live | |
| Placement rules: Elektroplaner values | Room type hall: label wordsrules.elektroplaner.room_words_hall | no value yet | words (case ignored) | no value yet | Live | |
| Placement rules: Elektroplaner values | Room type storage: label wordsrules.elektroplaner.room_words_storage | no value yet | words (case ignored) | no value yet | Live | |
| Placement rules: Elektroplaner values | Check: rooms that need a lightrules.elektroplaner.check_light_room_types | no value yet | room types | no value yet | Live | |
| Placement rules: Elektroplaner values | Check: sockets in a living room, at leastrules.elektroplaner.check_min_sockets_living | no value yet | outlets | no value yet | Live | |
| Placement rules: Elektroplaner values | Check: sockets in a bedroom, at leastrules.elektroplaner.check_min_sockets_bedroom | no value yet | outlets | no value yet | Live | |
| Placement rules: Elektroplaner values | Check: sockets in a kitchen, at leastrules.elektroplaner.check_min_sockets_kitchen | no value yet | outlets | no value yet | Live | |
| Placement rules: Elektroplaner values | Check: sockets in a wet room, at leastrules.elektroplaner.check_min_sockets_wet | no value yet | outlets | no value yet | Live | |
| Placement rules: Elektroplaner values | Check: sockets in a hall, at leastrules.elektroplaner.check_min_sockets_hall | no value yet | outlets | no value yet | Live | |
| Placement rules: Elektroplaner values | Check: appliance outlets in a kitchen, at leastrules.elektroplaner.check_min_appliance_outlets_kitchen | no value yet | outlets | no value yet | Live | |
| Placement rules: Elektroplaner values | Check: rooms that need a smoke alarmrules.elektroplaner.check_smoke_room_types | no value yet | room types | no value yet | Live |
The three file kinds the page reads and writes, field by field.
From schema/el_layout.schema.json.
| Field | Type | Required | What it is |
|---|---|---|---|
| schema | = "el_layout" | yes | Always el_layout: says what kind of file this is. |
| schema_version | one of 1, 2 | yes | Version of this format: 2 (switch-light links, rule set). Files of version 1 still open: they are migrated to 2 with no links and the default rule set; a version-1 file with links is refused. |
| drawing | object | yes | Which drawing and storey the layout belongs to. Opening it on another drawing or storey is refused. |
| drawing.file | string | yes | File name of the drawing (DWG/DXF) the plan file was exported from (no folder). |
| drawing.sha256 | string | yes | SHA-256 checksum of that drawing file (plan file drawing.sha256): the drawing's identity. |
| drawing.storey | string | yes | Storey key (plan file storeys[].key). |
| drawing.storey_label | string | no | Storey name, for people reading the file. |
| model_units_mm | number/null | yes | Millimetres per model unit of the drawing (plan file drawing.mm_per_unit); null when unknown. |
| symbol_set | object | yes | The symbol set the codes belong to (presets/el_symbols_at.json). |
| symbol_set.id | string | yes | Set id. |
| symbol_set.version | string | yes | Set version. |
| symbol_set.verified | boolean | no | Whether the set was checked against the standard (false for the first set). |
| background | object | yes | The drawing layers that were shown when the layout was saved. Applied again when the file is opened (layers the plan does not have are left out and counted). |
| background.layers | array | yes | Names of the shown drawing layers (empty: the plan's default layers). |
| background.hidden_layers | integer | yes | How many layers of the storey were hidden. |
| background.copied | string | no | When the layer choice was recorded (ISO 8601), or 'example'. |
| symbols | array | yes | The placed symbols. |
| symbols[].id | string | yes | Symbol id in this layout (s1, s2, ...); links refer to it. |
| symbols[].code | string | yes | Symbol code in the set (e.g. SS2). |
| symbols[].x | number | yes | Insertion point, model x (drawing units: independent of zoom; the same coordinates as the DXF). |
| symbols[].y | number | yes | Insertion point, model y. |
| symbols[].rotation | one of 0, 90, 180, 270 | yes | Degrees, counter-clockwise in the model (as in CAD). |
| symbols[].room | string/null | yes | Room id from the plan file the point lies in, or null (could not tell). |
| symbols[].room_method | one of "outline", "nearest label", "could-not-tell" | yes | How the room was found: inside its outline; nearest label of a room without an outline (within room_label_max_m); could-not-tell. |
| links | array | yes | Which switch or push-button works which light: one entry per switch-light pair. Every from must be a switch-category symbol of this file and every to a symbol whose code is in that switch's connectable_to list (checked when the file is opened). Empty in version 1. |
| links[].id | string | yes | Link id in this layout (l1, l2, ...). |
| links[].from | string | yes | Id of the switch or push-button. |
| links[].to | string | yes | Id of the light it works. |
| rule_set | string | no | The placement rule set chosen on the page (presets/el_parameters.json rules: starting or elektroplaner). Missing in version 1 (then the default). |
| parameters | object | no | The parameter file used when this layout was saved (presets/el_parameters.json): its id, version and SHA-256; edited = changed in the page's Parameters panel (then the SHA-256 is of the edited parameters as the panel writes them). Optional. |
| parameters.id | string | yes | |
| parameters.version | string | yes | |
| parameters.sha256 | string | yes | |
| parameters.edited | boolean | yes | |
| example | object | no | Present only in an EXAMPLE layout generated by vpt/el_examples.py (not the user's own layout): which example, the rule that chose its storey and rooms, and those rooms. |
| example.id | one of "simple", "complex" | yes | |
| example.label | string | yes | |
| example.generated_by | string | yes | |
| example.storey_rule | string | yes | |
| example.rooms | array | yes | |
| saved | string | yes | When the file was written (ISO 8601). |
| app | string | no | What wrote the file. |
From schema/plan.schema.json.
| Field | Type | Required | What it is |
|---|---|---|---|
| schema | = "vpt_plan" | yes | Always vpt_plan: says what kind of file this is. |
| schema_version | one of 1, 2 | yes | Version of this format: 2 adds the windows of every storey (required in version 2, absent in version 1: an older file still opens, its windows are then unknown). |
| drawing | object | yes | The drawing the plan was exported from. Only its file name and checksum: no folder, no content beyond what the editor draws. |
| drawing.file | string | yes | File name of the DXF (no folder). |
| drawing.sha256 | string | yes | SHA-256 of the DXF file: the drawing's identity; every layout file records it. |
| drawing.mm_per_unit | number/null | yes | Millimetres per drawing unit ($INSUNITS); null when unknown. |
| drawing.units_per_m | number/null | yes | Drawing units per metre (1000 / mm_per_unit); null when unknown. |
| synthetic | boolean | yes | True for the toolkit's synthetic sample flat (the page then says so), false for a real drawing. |
| exported_by | string | yes | What wrote the file. |
| extract | object | yes | The result of reading rooms, doors and walls (vpt/plan_extract.py): PASS, FAIL or INDETERMINATE, with the reasons. |
| extract.status | one of "PASS", "FAIL", "INDETERMINATE" | yes | |
| extract.failures | array | yes | |
| extract.unknowns | array | yes | |
| parameters | object | yes | The parameter file the suggestions and examples were computed with (presets/el_parameters.json). |
| parameters.id | string | yes | |
| parameters.version | string | yes | |
| parameters.sha256 | string | yes | |
| example_rule | string | no | Which storey and room the examples use, and the rule that chose them (or why there is none). |
| storeys | array | yes | One entry per storey. |
| storeys[].key | string | yes | Storey key (from the layer names). |
| storeys[].label | string | yes | Storey name. |
| storeys[].svg | string | yes | The storey drawn as SVG (vpt/dxf_svg.py): one <g data-layer> group per DXF layer, a prefixed <style>, no raster images. |
| storeys[].layers | array | yes | The storey's drawing layers, as in the layer panel. |
| storeys[].layers[].layer | string | yes | |
| storeys[].layers[].base | string | yes | |
| storeys[].layers[].status | string | yes | Bestand (no status in the name), Abbruch or Neubau. |
| storeys[].layers[].paths | integer | yes | |
| storeys[].layers[].default_on | boolean | yes | Shown when the plan opens (false for layers off or frozen in the DXF). |
| storeys[].affine | array | yes | Model (drawing units) -> SVG viewBox: X = a*x + c*y + e, Y = b*x + d*y + f. |
| storeys[].view_box | array | yes | The SVG's viewBox. |
| storeys[].page_mm | array | yes | Page size in mm at scale_1_to (symbols are sized in mm on this page). |
| storeys[].scale_1_to | number | yes | The page's scale 1:n. |
| storeys[].rooms | array | yes | |
| storeys[].rooms[].id | string | yes | |
| storeys[].rooms[].name | string/null | yes | |
| storeys[].rooms[].area_text | string/null | yes | |
| storeys[].rooms[].area_outline_m2 | number/null | no | |
| storeys[].rooms[].wet | boolean | yes | |
| storeys[].rooms[].outline | array/null | yes | The room outline in model coordinates, or null (could not tell). |
| storeys[].rooms[].anchor | array | yes | |
| storeys[].doors | array | yes | |
| storeys[].doors[].id | string | yes | |
| storeys[].doors[].hinge | array | yes | |
| storeys[].doors[].ends | object | yes | |
| storeys[].doors[].ends.a | array | yes | |
| storeys[].doors[].ends.b | array | yes | |
| storeys[].doors[].closed_end | one of "a", "b", null | yes | |
| storeys[].doors[].opens_into | string/null | yes | |
| storeys[].doors[].opens_from | string/null | yes | |
| storeys[].doors[].rooms | array | yes | |
| storeys[].doors[].width_m | number | no | |
| storeys[].doors[].swing_method | string | no | |
| storeys[].doors[].leads_to | string | no | |
| storeys[].doors[].pair | string | no | |
| storeys[].walls | array | yes | |
| storeys[].walls[].id | string | yes | |
| storeys[].walls[].base | string | no | |
| storeys[].walls[].status | string | no | |
| storeys[].walls[].p | array | yes | |
| storeys[].walls[].q | array | yes | |
| storeys[].walls[].rooms | array | no | |
| storeys[].windows | array | no | The window openings (version 2): socket and kitchen suggestions keep clear of them. |
| storeys[].windows[].id | string | yes | <storey>-F<n>. |
| storeys[].windows[].p | array | yes | |
| storeys[].windows[].q | array | yes | |
| storeys[].windows[].width_m | number | yes | Width of the opening in metres. |
| storeys[].windows[].depth_m | number | no | Depth of the window's lines across the wall in metres. |
| storeys[].windows[].wall_ids | array | no | The wall pieces that end at the opening. |
| storeys[].windows[].rooms | array | yes | The rooms on its two sides (one: an outer wall; none: could not tell). |
| storeys[].checks | array | yes | R1-R6 for this storey (R1-R5 in version 1). |
| storeys[].checks[].id | string | yes | |
| storeys[].checks[].title | string | yes | |
| storeys[].checks[].status | one of "match", "different", "could-not-tell" | yes | |
| storeys[].checks[].detail | string | yes | |
| storeys[].suggest | object | yes | Placement suggestions per rule set (vpt/el_rules.py), in model coordinates. |
| storeys[].examples | object/null | yes | The generated example layouts (simple, complex) when this storey is the example storey, else null. |
From schema/el_parameters.schema.json.
| Field | Type | Required | What it is |
|---|---|---|---|
| name | = "el_parameters" | yes | Always el_parameters. |
| id | string | yes | Which parameter family this is (el-params-at); a file of another id is refused. |
| version | string | yes | Version of the parameter file's layout (semver). |
| description | string | no | |
| standard_note | string | no | |
| contrast_min | number | yes | Least contrast of every symbol, link, marker and selection colour against its background. |
| contrast_min_note | string | no | |
| saved | string | no | When the page wrote this file (ISO time); absent in the toolkit's own file. |
| saved_from | string | no | Which page wrote it. |
| sections | object | yes | |
| rules | object | yes | |
| rules.label | string | yes | |
| rules.note | string | yes | |
| rules.default_rule_set | string | yes | |
| rules.rule_sets | array | yes | |
| rules.rule_sets[].id | string | yes | |
| rules.rule_sets[].name | string | yes | |
| rules.rule_sets[].status | string | yes | |
| rules.rule_sets[].note | string | yes | |
| rules.definitions | object | yes | |
| rules.values | object | yes |
Privacy, what is new, how it is built.