wiki/style.lisp
Palette and shared values
The palette's declarations for scheme, :light or :dark.
The font shorthand for the display face.
Layout rows shared by the dexp boxes
A row whose items flow and wrap, aligned on their baselines.
A grid of rows, each as wide as its content.
A row of a two-column table, its cells aligned with the table's columns.
The sheet
The main column; wide pages fill the viewport but their prose keeps a readable measure.
Each other status colours its own mark.
Lisp source as dexp boxes: every list is a box whose side borders are its parentheses; a list without body forms flows and wraps, one with body forms is a grid of rows (see the stacked group).
A name broken at a hyphen reads as two names; the box scrolls instead.
Source pages on wide screens: the sidebar of systems and files on the left, sticky under the status bar, the file itself as the main column.
A rule per colour of *DEFINITION-KIND-COLOURS* for the kinds it paints.
A list with body forms is a grid of rows: the .head row, then one row per body form, so the box hugs its widest row instead of stretching to its parent (#993QQQ).
COND, CASE, HANDLER-CASE and other clause forms are tables (#4175NC): each clause a row with its key or test in the first column and its body forms stacked in the second, aligned across the clauses.
Layouts: binding grids, clauses, loop rows. The selectors are the roles dexp.lisp assigns.
Keyword/value pairs stay together; in body position each pair is a row with keys loosely aligned. A SETF with several pairs is a place/value table: each pair a subgrid row of its two-column box.
The trail keeps its ends: the first crumb and the current page.
Each custom colour property with its light and dark values.
SELECTOR { declarations }, and nested rules and at-rules whose selectors combine with this one.
(scheme)One inspectable environment light, packed into raw per-frame GPU lanes.
(name &rest values)Constrain a quantity between compatible bounds.
(weight size/line-height)(&body body)The declarations BODY makes, read as a rule body, for a rule to include: the way to write a mixin.
(name &body body)Define the style group NAME: an optional docstring, then rules. A rule is (SELECTOR . BODY), SELECTOR a string or a list of strings. BODY alternates :property keywords with values -- bare symbols are CSS words, strings are written verbatim, numbers and 0.85rem quantities and --name references are themselves -- and…
(&rest families)(&optional (text *page*) (name "test"))The library band: eyebrow, site name, and the three doors.
(&rest colors)The CSS color-mix() of COLORS in the sRGB space, a percentage after a colour weighting it: (color-mix --paper 94% --accent).
The main column; wide pages fill the viewport but their prose keeps a readable measure.
Headings, paragraphs, figures and their IDs, mentions, marks.
(name)Code, tables, lists, images.
Lisp source as dexp boxes: every list is a box whose side borders are its parentheses; a list without body forms flows and wraps, one with body forms is a grid of rows (see the stacked group).
Code references and lisp: definition blocks.
Source browser: definition links, whole-file pages, source metadata.
Source pages on wide screens: the sidebar of systems and files on the left, sticky under the status bar, the file itself as the main column.
Subtraction or unary negation.
(text)The colour of a definition kind's badge in the definitions index.
(selector items)Definitions index: kind badge · name · signature · line.
Source index: files expand to their definitions in place; the systems table.
Docstrings and comments as prose inside the boxes.
A list with body forms is a grid of rows: the .head row, then one row per body form, so the box hugs its widest row instead of stretching to its parent (#993QQQ).
COND, CASE, HANDLER-CASE and other clause forms are tables (#4175NC): each clause a row with its key or test in the first column and its body forms stacked in the second, aligned across the clauses.
Layouts: binding grids, clauses, loop rows. The selectors are the roles dexp.lisp assigns.
Keyword/value pairs stay together; in body position each pair is a row with keys loosely aligned. A SETF with several pairs is a place/value table: each pair a subgrid row of its two-column box.
Narrow screens: one column, smaller title, ragged prose.
Figure and definition cards shown beside mentions.
Math and diagrams.
Definition cards.
Systems table: file entries and their popover buttons; the systems graph.
The Pages table.
The Work page: marks by status.
Intent. In the rendered source pages a nested body form stretches to its parent's full width (.body is flex-basis: 100%), and worse, a wrapping flex box's intrinsic width is the single-line sum of its children, so even an argument box like a multi-line (lambda …) comes out far wider than its tallest row. Closing…
Intent. A cond clause today stacks its test and its result as two identical rows, so (null vectors) and (find-shader-type :float) look like siblings and the reader cannot tell test from consequent. What the let grid did for bindings (#BGIM3I) should be done for clauses: a two-column table, key or test in the first…
The site's stylesheet, as style definitions compiled by css.lisp.
Groups follow the page from the outside in: palette, frame, type, the wiki's own elements, then the dexp code boxes and their layout roles, whose selectors are the roles dexp.lisp assigns. Under the CSS syntax 0.85rem is a quantity and --ink a reference; bare symbols are CSS words and lists are Lisp, so the palette, the mark colours, and the definition-kind colours below are computed from tables, and the layout rows every box shares are functions.