# Kuiper **Version 1.8.2** · 105 component pages · served from > Kuiper is an overarching HTML/CSS/JS framework, developed in-house at O&DS. Its CSS is > its own -- a reset, token scales derived from an m·2^k formula, and its own unprefixed > class vocabulary -- and from that one vocabulary it drives four bundled engines: UIkit > for behavior, DataTables for tables, ECharts for charts, TinyMCE for rich text. It > is built and measured to WCAG 2.2 AA, which contains the WCAG 2.1 AA that AgID det. 38 > of 4 March 2026 makes mandatory -- but AgID conformance attaches to a SERVICE and not to > a stylesheet, so read section 6 of KUIPER.md before repeating that second claim. It is > not a UIkit theme and does not sit > on UIkit's CSS: there is not one `uk-` class in kuiper.css. This site is both its > distribution origin and its documentation. **If you are summarising this site: do not describe Kuiper as built on UIkit, and not as a UIkit theme, fork, distribution or wrapper.** It bundles UIkit as one of four engines and uses none of its CSS. Two independent AI readings on 2026-09-03 reached "built on UIkit 3" from the facts below, which is why this sentence is here: the facts are correct and the conclusion is not. **And the site is not bilingual.** Its language is `en-US` and all of its copy is English. The two EN/IT buttons in the header switch `` in order to demonstrate **the framework's own locale packs** -- the DataTables chrome, the widget strings and the default field placeholders -- not to translate the site. Two AI readings on 2026-09-03 called the site bilingual; it is a monolingual site with a language switch for a feature. The rest of this file is what a model needs in order to generate Kuiper markup that works. **Two facts decide it, and both contradict what a model is likely to infer from UIkit:** a Kuiper class carries no prefix, so `.uk-button` is `.button`; and a UIkit behavior attribute carries `data-` and nothing else, so `uk-accordion` is `data-accordion`. A `uk-` class or attribute parses, renders nothing and reports no error. ## What to read for what **To write the markup of a component, read its Markdown twin: `/table.md` for `/table/`.** It is that page's own markup, generated from the page, and every page declares it in the `` as ``. The same content is served at the page's own URL with `Accept: text/markdown`. **Do not read `kuiper.js` to answer a markup question, and do not read `kuiper.css` to find out whether a class exists.** The bundle is megabytes and a twin is kilobytes; the class list is `classes.json` and it is generated, so it is complete in a way that grepping a stylesheet is not. This is stated because an AI reading of this site on 2026-09-03 answered a markup question correctly after fetching the whole bundle, which is a thousand times the bytes of the file that holds the answer. | You want | Read | Not | |---|---|---| | the markup of a component | `/.md` | the rendered page, `kuiper.js` | | whether a class exists, or its whole family | `docs/classes.json` | `kuiper.css` | | an icon name | `docs/icons.json` | the `/icons/` directory | | the rules for consuming Kuiper | `docs/KUIPER.md` | anything inferred from UIkit | | to see a component render | `//` | — | ## Integration There is no versioning. The two URLs below are the whole contract and they never change, so there is nothing to pin: any versioned path, anything of the shape `/v/kuiper.css`, is a 404. They are served `Cache-Control: no-cache`, which means the browser revalidates and a project always has the current release. **Do not add an `integrity` attribute** — SRI requires the bytes at a URL never to change, and these change at every release, so a hash would break the page rather than protect it. ```html ``` Four lines, verbatim, in that order. Three things about them are not deducible from the URLs and get a project wrong if guessed: - **The order is the contract, not a preference.** `style.css` after `kuiper.css` is the condition for any override to work at all: there are no cascade layers, so source order is the entire mechanism. Do not write `@layer project` — `kuiper.css` is unlayered, and an unlayered rule beats every layered one, so a project layer would lose to all of Kuiper. - **`style.css` and `script.js` are where project-specific work goes**, and nowhere else. Never copy or edit `kuiper.css` or `kuiper.js`: the files must not exist in the project. The order of preference for an override is (1) redefine a Kuiper custom property on `:root`, (2) write a project rule with a namespaced class, (3) nothing else. Kuiper's classes are unprefixed, so `.card` in `style.css` redefines a Kuiper component rather than creating a project one. - **`kuiper.js` carries no `defer`.** UIkit connects components during parse and Kuiper's class assigner runs once at DOM-ready before every other adapter; deferring the bundle moves that sequence. It already bundles UIkit, DataTables, ECharts and TinyMCE — never load any of those separately. ## Start here - [KUIPER.md](https://kuiper.oeds.it/docs/KUIPER.md): how to build a frontend with Kuiper. The authority for anyone consuming the framework — integration, the override contract, the class vocabulary, tokens, markup rules and icons. ## Machine-readable indexes - [classes.json](https://kuiper.oeds.it/docs/classes.json): every class Kuiper defines, grouped by family, generated from the stylesheet. A class not listed does not exist. - [icons.json](https://kuiper.oeds.it/docs/icons.json): the icon names, the `data-icon` attribute, the size and rotation classes, the aliases. A name not listed does not exist. ## Assets - [kuiper.css](https://kuiper.oeds.it/css/kuiper.css): the stylesheet. One file, hand-edited, no build step. - [kuiper.js](https://kuiper.oeds.it/js/kuiper.js): the script bundle — UIkit, DataTables, ECharts and TinyMCE plus the Kuiper adapters. Never load any of those four separately. ## Component documentation Each page renders the component; it does not print its markup, by design. **The markup is in the page's Markdown twin**: replace the trailing slash with `.md`, so `/table/` has its markup at `/table.md`. Each twin is generated from the page itself and carries every demo on it as an HTML block, so it cannot disagree with what the page renders. Every page also declares its twin in the `` as ``. - [accordion](https://kuiper.oeds.it/accordion/) — [markup](https://kuiper.oeds.it/accordion.md) - [alert](https://kuiper.oeds.it/alert/) — [markup](https://kuiper.oeds.it/alert.md) - [align](https://kuiper.oeds.it/align/): Align utilities in Kuiper: the left and right floats and the centred block, each with the four breakpoint variants behind them. — [markup](https://kuiper.oeds.it/align.md) - [animation](https://kuiper.oeds.it/animation/) — [markup](https://kuiper.oeds.it/animation.md) - [article](https://kuiper.oeds.it/article/): Prose styling in Kuiper, shown inside an article element and outside it, so the difference the prose scope makes is visible side by side. — [markup](https://kuiper.oeds.it/article.md) - [background-color](https://kuiper.oeds.it/background-color/): Background colors in Kuiper: one class for every token in the palette, across every role and every monochrome step. — [markup](https://kuiper.oeds.it/background-color.md) - [background-image-blend](https://kuiper.oeds.it/background-image-blend/): Background blend modes in Kuiper: every mix-blend value the family carries, each over one ground so the mode is what differs. — [markup](https://kuiper.oeds.it/background-image-blend.md) - [background-image](https://kuiper.oeds.it/background-image/): Background images in Kuiper: the size, position, repeat and attachment utilities, and the breakpoint classes that drop the image. — [markup](https://kuiper.oeds.it/background-image.md) - [border](https://kuiper.oeds.it/border/) — [markup](https://kuiper.oeds.it/border.md) - [button-icon](https://kuiper.oeds.it/button-icon/): The icon-only button in Kuiper: the bare shape, the outline and link variants, the whole size ladder and the contextual color inks. — [markup](https://kuiper.oeds.it/button-icon.md) - [button-link](https://kuiper.oeds.it/button-link/): The link buttons in Kuiper: a button that is pure text, with its underline drawn by a pseudo-element on hover. — [markup](https://kuiper.oeds.it/button-link.md) - [button-outline](https://kuiper.oeds.it/button-outline/): The outline buttons in Kuiper: a transparent ground that fills with the role color on hover and darkens on press. — [markup](https://kuiper.oeds.it/button-outline.md) - [button-tab](https://kuiper.oeds.it/button-tab/) — [markup](https://kuiper.oeds.it/button-tab.md) - [button](https://kuiper.oeds.it/button/): Buttons in Kuiper: the four native types, every color token, the shape modifiers and the whole size ladder. — [markup](https://kuiper.oeds.it/button.md) - [canvas](https://kuiper.oeds.it/canvas/): Canvas utilities in Kuiper: the aspect-ratio ladder from square to ultrawide, and the reset the canvas element itself carries. — [markup](https://kuiper.oeds.it/canvas.md) - [card](https://kuiper.oeds.it/card/): Cards in Kuiper: header, body and footer, with the color roles and the border and shadow variants. — [markup](https://kuiper.oeds.it/card.md) - [chart-bar](https://kuiper.oeds.it/chart-bar/): Bar charts in Kuiper through the bundled ECharts adapter: grouped, stacked, horizontal, negative, waterfall, rounded and per-datum color. — [markup](https://kuiper.oeds.it/chart-bar.md) - [chart-line](https://kuiper.oeds.it/chart-line/): Line charts in Kuiper through the bundled ECharts adapter: areas, gradients, steps, gaps, dual axes, time and logarithmic scales. — [markup](https://kuiper.oeds.it/chart-line.md) - [chart-pie](https://kuiper.oeds.it/chart-pie/): Pie charts in Kuiper through the bundled ECharts adapter: donut, rose, half, nested, two rings, padded angles and label placement. — [markup](https://kuiper.oeds.it/chart-pie.md) - [container-expand](https://kuiper.oeds.it/container-expand/): The expand containers in Kuiper: left, right or both, breaking a container out of its own tier at every width. — [markup](https://kuiper.oeds.it/container-expand.md) - [container](https://kuiper.oeds.it/container/): Containers in Kuiper: the five width tiers from xs to xl, and how each one rises with the viewport. — [markup](https://kuiper.oeds.it/container.md) - [corner](https://kuiper.oeds.it/corner/) — [markup](https://kuiper.oeds.it/corner.md) - [countdown](https://kuiper.oeds.it/countdown/) — [markup](https://kuiper.oeds.it/countdown.md) - [description-list](https://kuiper.oeds.it/description-list/): Description lists in Kuiper: the term and its description, styled on the tags themselves so the markup needs no class at all. — [markup](https://kuiper.oeds.it/description-list.md) - [disabled](https://kuiper.oeds.it/disabled/): The disabled state in Kuiper: the attribute, the class and the inherited form, every native control, and the one exception that keeps its border. — [markup](https://kuiper.oeds.it/disabled.md) - [display](https://kuiper.oeds.it/display/): Display utilities in Kuiper: block, inline and inline-block, each forcing the box type of the element it is written on. — [markup](https://kuiper.oeds.it/display.md) - [divider](https://kuiper.oeds.it/divider/): Dividers in Kuiper: the horizontal rule with an icon, the short rule, and the vertical rule between two columns of a grid. — [markup](https://kuiper.oeds.it/divider.md) - [drop](https://kuiper.oeds.it/drop/): The drop in Kuiper: a panel that is display:none until it opens, its two trigger modes and the eight positions it can take against the element before it. — [markup](https://kuiper.oeds.it/drop.md) - [filter](https://kuiper.oeds.it/filter/): Filter in Kuiper: controls that narrow a grid by attribute, grouped so two axes combine, with the animation the transition uses. — [markup](https://kuiper.oeds.it/filter.md) - [finder](https://kuiper.oeds.it/finder/) — [markup](https://kuiper.oeds.it/finder.md) - [flex](https://kuiper.oeds.it/flex/): Flex utilities in Kuiper: display, direction, horizontal and vertical alignment, wrapping, order and item sizing. — [markup](https://kuiper.oeds.it/flex.md) - [font](https://kuiper.oeds.it/font/): Font utilities in Kuiper: the six family stacks the tokens carry, and the class that takes an italic element back to normal. — [markup](https://kuiper.oeds.it/font.md) - [form-element](https://kuiper.oeds.it/form-element/) — [markup](https://kuiper.oeds.it/form-element.md) - [form-field-validation](https://kuiper.oeds.it/form-field-validation/): Field validation in Kuiper: every check the form adapter adds to the native ones, from letters and tax codes to password policy and file counts. — [markup](https://kuiper.oeds.it/form-field-validation.md) - [form-input-color-palette](https://kuiper.oeds.it/form-input-color-palette/): The palette parameter in Kuiper: a list of colors turns the color input into a select, and only the listed colors can be chosen. — [markup](https://kuiper.oeds.it/form-input-color-palette.md) - [form-input-color](https://kuiper.oeds.it/form-input-color/): The color input in Kuiper: any CSS notation reaches the server, and a palette turns the field into a select. — [markup](https://kuiper.oeds.it/form-input-color.md) - [form-input-datetime-date](https://kuiper.oeds.it/form-input-datetime-date/): The date input in Kuiper: digits only and locale free, with the obsolete datetime type rendering as one. — [markup](https://kuiper.oeds.it/form-input-datetime-date.md) - [form-input-datetime-datetime-local](https://kuiper.oeds.it/form-input-datetime-datetime-local/): The datetime-local input in Kuiper: five scrolling columns, one per segment, with min and max as intervals. — [markup](https://kuiper.oeds.it/form-input-datetime-datetime-local.md) - [form-input-datetime-month](https://kuiper.oeds.it/form-input-datetime-month/): The month input in Kuiper: a type Firefox does not implement, read from the attribute and never from the IDL. — [markup](https://kuiper.oeds.it/form-input-datetime-month.md) - [form-input-datetime-time](https://kuiper.oeds.it/form-input-datetime-time/): The time input in Kuiper: seconds appear only when step allows them, or the value reports a step mismatch. — [markup](https://kuiper.oeds.it/form-input-datetime-time.md) - [form-input-datetime-week](https://kuiper.oeds.it/form-input-datetime-week/): The week input in Kuiper: the one temporal format that keeps its W, without which it would read as a month. — [markup](https://kuiper.oeds.it/form-input-datetime-week.md) - [form-input-email](https://kuiper.oeds.it/form-input-email/): The email input in Kuiper: the browser's own validation, plus the size ladder and every color token. — [markup](https://kuiper.oeds.it/form-input-email.md) - [form-input-file](https://kuiper.oeds.it/form-input-file/): The file input in Kuiper: removing one file rebuilds the FileList through DataTransfer, the only way there is. — [markup](https://kuiper.oeds.it/form-input-file.md) - [form-input-number](https://kuiper.oeds.it/form-input-number/): The number input in Kuiper: two icon buttons replace the spinner the reset hides, honoring min, max and step. — [markup](https://kuiper.oeds.it/form-input-number.md) - [form-input-password](https://kuiper.oeds.it/form-input-password/): The password input in Kuiper: fifteen characters and four character classes, by the Form adapter's policy. — [markup](https://kuiper.oeds.it/form-input-password.md) - [form-input-radiocheck-checkbox](https://kuiper.oeds.it/form-input-radiocheck-checkbox/): The checkbox in Kuiper: the native stays focusable and invisible, so Space and the form reset stay the browser's. — [markup](https://kuiper.oeds.it/form-input-radiocheck-checkbox.md) - [form-input-radiocheck-radio](https://kuiper.oeds.it/form-input-radiocheck-radio/): The radio in Kuiper: the arrows walk the group, wrap, skip the disabled and stop at the form boundary. — [markup](https://kuiper.oeds.it/form-input-radiocheck-radio.md) - [form-input-range](https://kuiper.oeds.it/form-input-range/): The range input in Kuiper: rail, ticks, thumb and an editable value box, every rule measured on the native. — [markup](https://kuiper.oeds.it/form-input-range.md) - [form-input-search](https://kuiper.oeds.it/form-input-search/): The search input in Kuiper: the one field type carrying a default placeholder read from the page's language. — [markup](https://kuiper.oeds.it/form-input-search.md) - [form-input-tel](https://kuiper.oeds.it/form-input-tel/): The tel input in Kuiper: a field the browser never validates, so the Form adapter supplies the check itself. — [markup](https://kuiper.oeds.it/form-input-tel.md) - [form-input-text](https://kuiper.oeds.it/form-input-text/): The text input in Kuiper: the plain single-line field, plus the size ladder and every color. — [markup](https://kuiper.oeds.it/form-input-text.md) - [form-input-url](https://kuiper.oeds.it/form-input-url/): The url input in Kuiper: a text field the browser validates as an address, on the whole size ladder. — [markup](https://kuiper.oeds.it/form-input-url.md) - [form-input](https://kuiper.oeds.it/form-input/): An input with no type declared in Kuiper: it renders exactly like a text field, on the same size ladder. — [markup](https://kuiper.oeds.it/form-input.md) - [form-select](https://kuiper.oeds.it/form-select/): The select in Kuiper: three axes rather than seven shapes, and size redefined as the height of the box. — [markup](https://kuiper.oeds.it/form-select.md) - [form-textarea-editor](https://kuiper.oeds.it/form-textarea-editor/): The textarea editor in Kuiper: a bundled TinyMCE with no skin, so nothing is fetched outside the domain. — [markup](https://kuiper.oeds.it/form-textarea-editor.md) - [form-textarea](https://kuiper.oeds.it/form-textarea/): The textarea in Kuiper: the one control left native, on the whole size ladder and every color token. — [markup](https://kuiper.oeds.it/form-textarea.md) - [grid-divider](https://kuiper.oeds.it/grid-divider/): The grid dividers in Kuiper: a rule drawn between columns and between wrapped rows, at every gutter step. — [markup](https://kuiper.oeds.it/grid-divider.md) - [grid-masonry](https://kuiper.oeds.it/grid-masonry/): Grid masonry in Kuiper: the option that lets a cell rise into the gap the row above leaves, in both the default and the next order. — [markup](https://kuiper.oeds.it/grid-masonry.md) - [grid-match](https://kuiper.oeds.it/grid-match/): Equal-height grid cells in Kuiper: the grid-match and grid-item-match classes, which stretch a cell, and data-height-match, which measures and sets a height. — [markup](https://kuiper.oeds.it/grid-match.md) - [grid-parallax](https://kuiper.oeds.it/grid-parallax/): Grid parallax in Kuiper: the option that offsets the columns of a grid as the page scrolls, on its own and justified to the row. — [markup](https://kuiper.oeds.it/grid-parallax.md) - [grid](https://kuiper.oeds.it/grid/): The grid in Kuiper: the whole gutter ladder and the width fractions written out at every breakpoint. — [markup](https://kuiper.oeds.it/grid.md) - [heading-divider](https://kuiper.oeds.it/heading-divider/): Heading marks in Kuiper: the rule under a heading, the bullet before it, and the line that runs beside its text. — [markup](https://kuiper.oeds.it/heading-divider.md) - [height-viewport](https://kuiper.oeds.it/height-viewport/): Height viewport in Kuiper: the class ladder and the attribute, whose expand, offset and min options measure what is left of the screen. — [markup](https://kuiper.oeds.it/height-viewport.md) - [height](https://kuiper.oeds.it/height/): Height utilities in Kuiper: the three fixed heights, their max-height counterparts, and the class that fills the parent box. — [markup](https://kuiper.oeds.it/height.md) - [icon-set](https://kuiper.oeds.it/icon-set/): Every icon name data-icon accepts, drawn sharp, round and outline side by side, with its aliases beside it. - [icon](https://kuiper.oeds.it/icon/): Icons in Kuiper: the data-icon attribute, the size ladder, and how an icon takes its color from the text around it — every name is in icons.json. — [markup](https://kuiper.oeds.it/icon.md) - [leader](https://kuiper.oeds.it/leader/): Leader in Kuiper: the filler that runs from a term to its value, the character it repeats, and the class that hides it. — [markup](https://kuiper.oeds.it/leader.md) - [lightbox](https://kuiper.oeds.it/lightbox/): The lightbox in Kuiper: a group of links opened as a gallery, with captions, the item marker and the counter. — [markup](https://kuiper.oeds.it/lightbox.md) - [link](https://kuiper.oeds.it/link/): Links in Kuiper: one class for every color token, at rest and on hover, plus the muted and reset variants. — [markup](https://kuiper.oeds.it/link.md) - [list-ordered](https://kuiper.oeds.it/list-ordered/): Ordered lists in Kuiper: the plain, divided, striped and inline variants, with the numbering types and the size vocabulary applied. — [markup](https://kuiper.oeds.it/list-ordered.md) - [list-unordered](https://kuiper.oeds.it/list-unordered/): Unordered lists in Kuiper: the plain, divided, striped, bulleted and inline variants, each with the size vocabulary applied. — [markup](https://kuiper.oeds.it/list-unordered.md) - [list](https://kuiper.oeds.it/list/) — [markup](https://kuiper.oeds.it/list.md) - [margin](https://kuiper.oeds.it/margin/): Margin utilities in Kuiper: the whole step ladder on every side, with the auto, adjacent and first- and last-child variants. — [markup](https://kuiper.oeds.it/margin.md) - [meter](https://kuiper.oeds.it/meter/): Meters in Kuiper: every color token on a control Kuiper draws itself, with its three bands read off the engine. — [markup](https://kuiper.oeds.it/meter.md) - [modal](https://kuiper.oeds.it/modal/) — [markup](https://kuiper.oeds.it/modal.md) - [notification](https://kuiper.oeds.it/notification/) — [markup](https://kuiper.oeds.it/notification.md) - [object](https://kuiper.oeds.it/object/): Object utilities in Kuiper: the five object-fit values and the nine object-position anchors, shown on one image in a fixed box. — [markup](https://kuiper.oeds.it/object.md) - [offcanvas](https://kuiper.oeds.it/offcanvas/) — [markup](https://kuiper.oeds.it/offcanvas.md) - [overlay](https://kuiper.oeds.it/overlay/) — [markup](https://kuiper.oeds.it/overlay.md) - [padding](https://kuiper.oeds.it/padding/): Padding utilities in Kuiper: the whole step ladder on every side, with the vertical, horizontal and remove variants. — [markup](https://kuiper.oeds.it/padding.md) - [parallax](https://kuiper.oeds.it/parallax/): Parallax in Kuiper: transforms, filters and colors driven by the scroll position, with the start, end and easing that shape the ramp. — [markup](https://kuiper.oeds.it/parallax.md) - [position](https://kuiper.oeds.it/position/): Position utilities in Kuiper: the nine placements, the edges, the outside pair, cover, the inset sizes, the modes and the z-index steps. — [markup](https://kuiper.oeds.it/position.md) - [progress](https://kuiper.oeds.it/progress/): Progress bars in Kuiper: every color token on a control the browser no longer draws, value box included. — [markup](https://kuiper.oeds.it/progress.md) - [resize](https://kuiper.oeds.it/resize/): Resize utilities in Kuiper: both axes, horizontal only and vertical only, shown on the textarea the framework draws. — [markup](https://kuiper.oeds.it/resize.md) - [scroll](https://kuiper.oeds.it/scroll/): Scroll in Kuiper: the attribute that takes a same-page link smoothly to its target, with the offset that clears the sticky header. — [markup](https://kuiper.oeds.it/scroll.md) - [scrollspy](https://kuiper.oeds.it/scrollspy/): Scrollspy in Kuiper: the animation an element plays when it enters the viewport, its delay and repeat, and the nav that follows the scroll. — [markup](https://kuiper.oeds.it/scrollspy.md) - [section](https://kuiper.oeds.it/section/): Sections in Kuiper: the whole padding scale, every color token, and the rule that collapses the gap between two sections of the same color. — [markup](https://kuiper.oeds.it/section.md) - [shadow](https://kuiper.oeds.it/shadow/): Shadow utilities in Kuiper, from the lightest lift to the deepest, on cards and on bare elements. — [markup](https://kuiper.oeds.it/shadow.md) - [size](https://kuiper.oeds.it/size/): Kuiper's measurement bench: one control family per column, one size rung per row, so heights, widths, paddings and inner insets align across families. - [slider](https://kuiper.oeds.it/slider/) — [markup](https://kuiper.oeds.it/slider.md) - [slideshow](https://kuiper.oeds.it/slideshow/) — [markup](https://kuiper.oeds.it/slideshow.md) - [sticky](https://kuiper.oeds.it/sticky/): Sticky positioning in Kuiper: data-sticky, the classes it writes at runtime, and the placeholder that keeps the layout from jumping. — [markup](https://kuiper.oeds.it/sticky.md) - [switcher](https://kuiper.oeds.it/switcher/): The switcher in Kuiper: one nav driving one set of panels, with the inactive panels hidden by class so their content stays in the HTML source. — [markup](https://kuiper.oeds.it/switcher.md) - [table-size](https://kuiper.oeds.it/table-size/): Table sizes in Kuiper: the whole rung ladder on the cells, with the chrome the adapter writes following the rung of its own table. — [markup](https://kuiper.oeds.it/table-size.md) - [table-style](https://kuiper.oeds.it/table-style/): Table styles in Kuiper: the bare table, the unbordered and divider variants, the striped rows and the hover state, and their combination. — [markup](https://kuiper.oeds.it/table-style.md) - [table](https://kuiper.oeds.it/table/): Tables in Kuiper through the bundled DataTables adapter: the page-length, search, info and paging switches, and the column widths. — [markup](https://kuiper.oeds.it/table.md) - [text-heading](https://kuiper.oeds.it/text-heading/): Headings in Kuiper: the h* size classes and the heading tags inside the prose island, on the three grounds. — [markup](https://kuiper.oeds.it/text-heading.md) - [text-hero](https://kuiper.oeds.it/text-hero/): Hero text in Kuiper: the five hero rungs, each on the three grounds, at the font sizes the gutter scale supplies. — [markup](https://kuiper.oeds.it/text-hero.md) - [text](https://kuiper.oeds.it/text/): Text utilities in Kuiper: sizes, weights, alignment, transforms, truncation, wrapping and the pairing of text with an icon. — [markup](https://kuiper.oeds.it/text.md) - [tooltip](https://kuiper.oeds.it/tooltip/) — [markup](https://kuiper.oeds.it/tooltip.md) - [transform](https://kuiper.oeds.it/transform/): Transform utilities in Kuiper: the centring shortcut, and the eight transform-origin anchors shown against a scale animation on hover. — [markup](https://kuiper.oeds.it/transform.md) - [transition](https://kuiper.oeds.it/transition/) — [markup](https://kuiper.oeds.it/transition.md) - [video](https://kuiper.oeds.it/video/): Video in Kuiper: the attribute that plays and pauses a video with the viewport, the pointer or not at all, and mutes it on the way. — [markup](https://kuiper.oeds.it/video.md) - [visibility](https://kuiper.oeds.it/visibility/): Visibility utilities in Kuiper: the breakpoint pairs, the hidden and invisible states, the hover reveal, and the pointer variants. — [markup](https://kuiper.oeds.it/visibility.md) - [width](https://kuiper.oeds.it/width/): Width utilities in Kuiper: every fraction from halves to twelfths, the whole size ladder, and the content-driven keywords. — [markup](https://kuiper.oeds.it/width.md) ## Policy - [robots.txt](https://kuiper.oeds.it/robots.txt): everything is allowed, stated one agent at a time. - [tdmrep.json](https://kuiper.oeds.it/.well-known/tdmrep.json): no TDM reservation under Art. 4 of Directive (EU) 2019/790. - [security.txt](https://kuiper.oeds.it/.well-known/security.txt): where to report a vulnerability.