//! Self-image domain attributes — the labels a self-image dataset
//! hangs on `mary::dataset` Samples.
//!
//! These are deliberately SEPARATE from the generic `mary::dataset` schema: that
//! namespace is modality-blind and domain-free, knowing nothing about any one
//! dataset's labels. The "open schema" pattern is exactly this — a consumer
//! extends the model by minting its *own* typed attributes and hanging them on
//! the shared Sample entities, never by forking the generic library.
//!
//! `style` and `expression` are real typed attributes (not a generic key→value
//! annotation): each is its own minted id with its own value schema, so "every
//! sample in this style" or "every joyful expression" is a single one-pattern
//! query, and content-addressed dedup still applies. Both are short labels, so
//! `ShortString` inline values (no blob).
use ShortString;
use *;
attributes!