# Content Item Types All `content.json` files use an `items` array of typed objects. Every object has a `type` field; all other fields depend on the type. Optional fields are marked with `?`. Token substitution is available in most string fields: any `%TOKEN%` placeholder is replaced with the corresponding value. Where noted, a string that resolves to a JSON array or object is automatically parsed back into the appropriate structure. --- ## Access control Any item (and any table column or row action) can carry a `client_requirement` field. Items whose requirement is not satisfied are omitted entirely from the rendered output. Roles are ranked from lowest to highest: | Rank | Role | Description | |------|------|-------------| | 3 | `manager` | Superuser; can manage accounts and administrators | | 2 | `administrator` | Full configuration access | | 1 | `viewer` | Read-only authenticated user | | 0 | `nothing` | Unauthenticated (no session) | The value is a role name with a suffix that controls the comparison: | Suffix | Meaning | |--------|---------| | `+` | Client rank must be greater than or equal to the named role | | `=` | Client rank must equal the named role exactly | | `-` | Client rank must be less than or equal to the named role | Possible values for `client_requirement` field: | Value | Meaning | |----------|-------------| | `client_is_manager=` | Client must be manager | | `client_is_manager-` | Client must be manager or lower | | `client_is_administrator+` | Client must be administrator or higher | | `client_is_administrator=` | Client must be administrator | | `client_is_administrator-` | Client must be administrator or lower | | `client_is_viewer+` | Client must be viewer or higher | | `client_is_viewer=` | Client must be viewer | | `client_is_viewer-` | Client must be viewer or lower | | `client_is_nothing+` | Client may be anybody (logged in or not logged in) | | `client_is_nothing=` | Client must be nothing (not logged in) | Example: ```json { "client_requirement": "client_is_administrator+", "type": "card", "items": [] } ``` --- ## Layout / structure ### `h1` ```json { "type": "h1", "text": "Page Title" } ``` Renders as `