# `MishkaCmsCore.Runtime.PageBuilder.StylesheetRow`
[🔗](https://github.com/mishka-group/mishka_cms_core/blob/v0.0.1/lib/mishka_cms_core/runtime/page_builder/stylesheet_row.ex#L5)

The stylesheet row the page builder owns for one site, found by its reserved name: the reusable
classes (`MishkaCmsCore.Runtime.PageBuilder.Classes`) and an element's own CSS
(`MishkaCmsCore.Runtime.PageBuilder.ElementCss`) are each one row of `Stylesheet`.

## Scoped, not capped

The reserved name is the same constant on every site and the identity is `[:name, :site_id]`, so
the name alone matches one row per site. Asking for one row before saying which site it is for
hands back whichever rows the read reached, and the site's own row then reads as absent.

A master's read (`:master_read`) bypasses multitenancy, so every site's row is a candidate and the
site has to be in the query. A tenant's read is already scoped by Ash; the globals are the scope
whose `site_id` is `nil` (`site_id == ^nil` is a comparison that can never match), so the filter
is written once for both.

# `fetch`

```elixir
@spec fetch(map() | nil, String.t() | nil, String.t()) ::
  MishkaCmsCore.Runtime.Stylesheet.t() | nil
```

The row called `name` on `site_id` (`nil` for the globals), read as `actor`, or `nil` when there
is none or it cannot be read.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
