# BEM Specification
## General Format
- The BEM structure is composed of a single block followed by zero or more elements.
- Each block and element can optionally have modifiers.
- The entire structure must occupy the full input without any unexpected or trailing characters or sequences.
## Block
- A block starts at the beginning of the input.
- It is composed of a name optionally followed by modifiers.
- The name must start with a lowercase ASCII alphabetic character and can be followed by any combination of ASCII alphanumeric characters. Single dashes are allowed between characters but cannot start or end the name.
- Modifiers for a block are enclosed in parentheses and separated by the pipe (`|`) character. Each modifier also adheres to the naming conventions of blocks.
## Element
- Each element starts on a new line.
- Like blocks, an element is composed of a name optionally followed by modifiers.
- The naming convention for elements is the same as blocks: it starts with a lowercase ASCII alphabetic character, followed by any combination of ASCII alphanumeric characters. Single dashes are permitted between characters but not at the beginning or end.
- Modifiers for an element are structured in the same way as those for blocks.
## Examples
### media-player.bem
```
media-player(dark)
```
- `media-player(dark)`- Represents a block named `media-player` with one modifier: `dark`.
- `button(fast-forward|rewind)` on a new line after a block represents an element named `button` with two modifiers: `fast-forward` and `rewind`.
- `timeline` on another line represents another element named `timeline` with no modifiers.
## Constraints
- The input must start with a block.
- Names cannot start or end with dashes and cannot have consecutive dashes.
- Modifiers are optional for both blocks and elements.
- The entire structure must fit the provided input. There shouldn't be any characters or sequences after the last element.