defface

defface is a Lisp macro in `custom.el'.

(defface FACE SPEC DOC &rest ARGS)

Declare FACE as a customizable face that defaults to SPEC.
FACE does not need to be quoted.

Third argument DOC is the face documentation.

If FACE has been set with `custom-theme-set-faces', set the face
attributes as specified by that function, otherwise set the face
attributes according to SPEC.

The remaining arguments should have the form [KEYWORD VALUE]...
For a list of valid keywords, see the common keywords listed in
`defcustom'.

SPEC should be a "face spec", i.e., an alist of the form

((DISPLAY . ATTS)...)

where DISPLAY is a form specifying conditions to match certain
terminals and ATTS is a property list (ATTR VALUE ATTR VALUE...)
specifying face attributes and values for frames on those
terminals. On each terminal, the first element with a matching
DISPLAY specification takes effect, and the remaining elements in
SPEC are disregarded.

As a special exception, in the first element of SPEC, DISPLAY can
be the special value `default'. Then the ATTS in that element
act as defaults for all the following elements.

For backward compatibility, elements of SPEC can be written
as (DISPLAY ATTS) instead of (DISPLAY . ATTS).

Each DISPLAY can have the following values:
- `default' (only in the first element).
- The symbol t, which matches all terminals.
- An alist of conditions. Each alist element must have the form
(REQ ITEM...). A matching terminal must satisfy each
specified condition by matching one of its ITEMs. Each REQ
must be one of the following:
- `type' (the terminal type).
Each ITEM must be one of the values returned by
`window-system'. Under X, additional allowed values are
`motif', `lucid', `gtk' and `x-toolkit'.
- `class' (the terminal's color support).
Each ITEM should be one of `color', `grayscale', or `mono'.
- `background' (what color is used for the background text)
Each ITEM should be one of `light' or `dark'.
- `min-colors' (the minimum number of supported colors)
Each ITEM should be an integer, which is compared with the
result of `display-color-cells'.
- `supports' (match terminals supporting certain attributes).
Each ITEM should be a list of face attributes. See
`display-supports-face-attributes-p' for more information on
exactly how testing is done.

In the ATTS property list, possible attributes are `:family',
`:width', `:height', `:weight', `:slant', `:underline',
`:overline', `:strike-through', `:box', `:foreground',
`:background', `:stipple', `:inverse-video', and `:inherit'.

See Info node `(elisp) Faces' in the Emacs Lisp manual for more
information.