> ## Documentation Index
> Fetch the complete documentation index at: https://docs.loft.build/llms.txt
> Use this file to discover all available pages before exploring further.

# The graphics standard

Presentation lives outside the model: geometry carries meaning, and this page is the stylesheet turning meaning into width.

A **line class** says what a line means. Twelve, closed, owned by the language: cut, beyond, hidden, above, centerline, datum, boundary, break, match, section, annotation, symbol. The view assigns the class, never the author — a wall outline is `cut` where a plan slices it, `beyond` where it only sees it.

A **role** is a finer label a component author may put on part of an element — open, meaningless, there only to be selected. Rows are addressed `class.role` — `cut.layer`, `cut.hatch`, `annotation.terminator` — or `category.class`, like `door.cut`, when a category's cut or projection differs from the host default. An unknown selector falls back to the class pen, so it still draws.

A **pen** is a width in millimetres from the National CAD Standard table: nine pens, from extra fine (0.13 mm) to xxxx wide (2.0 mm). Every cell below is a pen name; no element, component, or emit site carries a number.

NCS's table is scale-blind; Revit's Model Line Weights table gives a width per view scale. We keep NCS's vocabulary and take Revit's axis: a pen per column over Revit's six scales, 1" through 1/32" per foot. Each row records its basis — `cited` (NCS names that use at that pen), `revit-parity` (Revit's default, snapped to the nearest NCS pen), `practice` (convention neither names: our ruling, labelled).

The HTML mapping is exact, the names crossed. Our class is the *tag*: fixed vocabulary, carries meaning, behaviour set by context. Our role is the CSS *class*: a free label, meaningless alone, there to be styled. Drafting named its semantic layer "class" first, so web readers hear the word backwards here.

In Revit, an Object Styles subcategory is close to a role, the projection and cut columns to the class — except you fill both in advance, where here the view computes which applies. A Revit line weight is an index into the project's table, so a family looks different in two projects; an NCS pen is a width. The real difference is authority: a family author assigns weights, invents subcategories, and bakes appearance into the family. A loft component author assigns roles, never a weight.

The component spelling of roles shown here is illustrative until the component definition language ships.

*The model says what a line means; the standard says how it looks. Components and the compiler emit classes and roles, never weights — so no package can change how a firm draws.*

## Pens

The NCS pen set (M4 §4.2.7), all nine rows. Every cell in the tables below is one of these names, never a free number. The three heaviest are sheet furniture — titles, borders — and no class draws them yet; they are here so the set is the standard's, not a subset of it.

| Pen         | Width (mm) |
| ----------- | ---------- |
| `extraFine` | 0.13       |
| `fine`      | 0.18       |
| `thin`      | 0.25       |
| `medium`    | 0.35       |
| `wide`      | 0.50       |
| `extraWide` | 0.70       |
| `xxWide`    | 1.00       |
| `xxxWide`   | 1.40       |
| `xxxxWide`  | 2.00       |

## Line classes

What a line means, and the pen it takes at each view scale (paper inches per model foot — Revit's six columns). A scale-blind row repeats one pen across; a view at a scale between columns reads the nearest column. **Basis:** `cited` — NCS names this use at this pen; `revit-parity` — Revit's default tables, the named pen at each scale, snapped to the nearest NCS pen; `practice` — drafting convention neither names, our ruling, labelled as such. A reserved class has a row so the table is complete, and nothing draws it.

| Class              | 1"          | 1/2"        | 1/4"        | 1/8"        | 1/16"       | 1/32"       | Basis        | Source                                                                                |
| ------------------ | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ------------ | ------------------------------------------------------------------------------------- |
| `cut`              | `extraWide` | `extraWide` | `wide`      | `wide`      | `thin`      | `thin`      | revit-parity | Object Styles Walls · cut = pen 5; Line Weights pen 5 snapped to NCS, floored at thin |
| `beyond`           | `fine`      | `fine`      | `fine`      | `extraFine` | `extraFine` | `extraFine` | revit-parity | Object Styles Walls · projection = pen 2; Line Weights pen 2 snapped to NCS           |
| `hidden`           | `thin`      | `thin`      | `thin`      | `thin`      | `thin`      | `thin`      | cited        | 0.25 thin — hidden objects, dashed lines; §4.2.7.1.7                                  |
| `above`            | `thin`      | `thin`      | `thin`      | `thin`      | `thin`      | `thin`      | cited        | 0.25 thin — dashed lines; NCS\_Linetypes.lin 014200-005                               |
| `centerline`       | `thin`      | `thin`      | `thin`      | `thin`      | `thin`      | `thin`      | cited        | 0.25 thin — center lines; §4.2.7.1.3                                                  |
| `datum`            | `thin`      | `thin`      | `thin`      | `thin`      | `thin`      | `thin`      | cited        | 0.25 thin — grid lines                                                                |
| `boundary`         | `thin`      | `thin`      | `thin`      | `thin`      | `thin`      | `thin`      | practice     | —                                                                                     |
| `break` (reserved) | `thin`      | `thin`      | `thin`      | `thin`      | `thin`      | `thin`      | cited        | 0.25 thin — break lines; §4.2.7.1.2                                                   |
| `match` (reserved) | `extraWide` | `extraWide` | `extraWide` | `extraWide` | `extraWide` | `extraWide` | cited        | 0.70 extra wide — match lines; §4.2.7.1.6                                             |
| `section`          | `wide`      | `wide`      | `wide`      | `wide`      | `wide`      | `wide`      | cited        | 0.50 wide — section cutting plane lines                                               |
| `annotation`       | `thin`      | `thin`      | `thin`      | `thin`      | `thin`      | `thin`      | cited        | 0.25 thin — dimension lines, leaders, extension lines                                 |
| `symbol`           | `fine`      | `fine`      | `fine`      | `extraFine` | `extraFine` | `extraFine` | revit-parity | Object Styles Doors · projection = pen 2; Line Weights pen 2 snapped to NCS           |

## Overrides

The selectors finer than class. `class.role` names a part of a class the standard gives its own pen (Revit's subcategory): layer separators, hatch, terminators, the section's profile. `category.class` names a category whose cut or projection differs from the host default (Revit's per-category Object Styles): a door's jambs cut three pens below the wall they sit in. A selector the table does not know falls back to the class pen.

| Selector                | 1"          | 1/2"        | 1/4"     | 1/8"        | 1/16"       | 1/32"       | Basis        | Source                                                                                        |
| ----------------------- | ----------- | ----------- | -------- | ----------- | ----------- | ----------- | ------------ | --------------------------------------------------------------------------------------------- |
| `cut.layer`             | `fine`      | `fine`      | `fine`   | `extraFine` | `extraFine` | `extraFine` | revit-parity | Object Styles Walls · Common Edges = pen 2; NCS 0.18 fine — material indications, at 1/4"     |
| `cut.hatch`             | `fine`      | `fine`      | `fine`   | `extraFine` | `extraFine` | `extraFine` | revit-parity | As cut.layer; NCS 0.18 fine — hatch lines, patterns, at 1/4"                                  |
| `annotation.terminator` | `medium`    | `medium`    | `medium` | `medium`    | `medium`    | `medium`    | cited        | 0.35 medium — terminator marks                                                                |
| `door.cut`              | `fine`      | `fine`      | `fine`   | `extraFine` | `extraFine` | `extraFine` | revit-parity | Object Styles Doors · cut = pen 2; Line Weights pen 2 snapped to NCS                          |
| `window.cut`            | `fine`      | `fine`      | `fine`   | `extraFine` | `extraFine` | `extraFine` | revit-parity | Object Styles Windows · cut = pen 2 (as Doors); Line Weights pen 2 snapped to NCS             |
| `cut.profile`           | `extraWide` | `extraWide` | `wide`   | `wide`      | `thin`      | `thin`      | cited        | 0.50 wide — cut lines, section cutting plane lines, profiling, edges of elevations; M4 §4.2.7 |
