# Typography

Please prefer our Constructable `%placeholder` styles over singular CSS
properties. If you need to drop back, to something not covered there then you
can also use CSS properties directly. Our constructable `%placeholder` should be
revisted every so often to re-evaluate any areas we we use CSS properties over
constructables. Naming is mostly set out to allow for future scales that land
'inbetween' currently scales to aid in continously re-evaluating without getting
stuck having to change everything every time we need to.

The `%placeholder`s are currently a little inconsistent and styled following
past specifications. Moving forwards these will become more consistent.

## Constructable %placeholders

### %h000 (headers)

When authoring headers in markup, the correct semantic HTML tag should be used taking into account page order. Following that the correct `%placeholder` can be used to make that header look how it should.

```html
<h2>H2 Level meaning that looks like a h3 visually</h2>
```
```css
.top-level-selector h2 {
  /* make the h2 look like a h3 */
  @extend %h300;
}
```

```hbs preview-template
<ul
>
{{#each (array 'h000' 'h100' 'h200' 'h300' 'h400' 'h500' 'h600') as |prop|}}
  <li>
    <figure
      {{with-copyable (concat "@extend %" prop ";")}}
      class={{concat 'debug-' prop}}
    >
        Ab
      <figcaption>%{{prop}}</figcaption>
    </figure>
  </li>
{{/each}}
</ul>
```

### %p (body copy)

```hbs preview-template
<ul
>
{{#each (array 'p' 'p1' 'p2' 'p3') as |prop|}}
  <li>
    <figure
      {{with-copyable (concat "@extend %" prop ";")}}
      class={{concat 'debug-' prop}}
    >
        Ab
      <figcaption>%{{prop}}</figcaption>
    </figure>
  </li>
{{/each}}
</ul>
```


## CSS props


### Font sizes

```hbs preview-template
<ul
  {{css-props (set this 'sizes')
    prefix='typo-size'
    group='[-]'
  }}
>
{{#each-in this.sizes as |prop value|}}
    {{#each-in value as |prop value|}}
  <li>
    <figure
      {{with-copyable (concat "var(" prop ");")}}
      style={{concat "font-size: var(" prop ")"}}
    >
        Ab
      <figcaption style="font-size: 12px !important;">{{prop}} ({{value}})</figcaption>
    </figure>
  </li>
    {{/each-in}}
{{/each-in}}
</ul>
```

### Font weights

```hbs preview-template
<ul
  {{css-props (set this 'weights')
    prefix='typo-weight'
    group='[-]'
  }}
>
{{#each-in this.weights as |prop value|}}
    {{#each-in value as |prop value|}}
  <li>
    <figure
      {{with-copyable (concat "var(" prop ");")}}
      style={{concat "font-weight: var(" prop ")"}}
    >
        Ab
      <figcaption style="font-weight: normal !important;">{{prop}} ({{value}})</figcaption>
    </figure>
  </li>
    {{/each-in}}
{{/each-in}}
</ul>
```

### Font families

```hbs preview-template
<ul
  {{css-props (set this 'families')
    prefix='typo-family'
    group='[-]'
  }}
>
{{#each-in this.families as |prop value|}}
    {{#each-in value as |prop value|}}
  <li>
    <figure
      {{with-copyable (concat "var(" prop ");")}}
      style={{concat "font-family: var(" prop ")"}}
    >
        Ab
      <figcaption style="font-family: monospace !important;">{{prop}} ({{value}})</figcaption>
    </figure>
  </li>
    {{/each-in}}
{{/each-in}}
</ul>
```
