> ## Documentation Index
> Fetch the complete documentation index at: /llms.txt
> Use this file to discover all available pages before exploring further.

# Specs Checklist

> Left-aligned specs/traits checklist over footage or a board: rows slide in staggered with an accent underline sweep; light and dark schemes

# Specs Checklist

Left-aligned specs/traits checklist over footage or a board: rows slide in staggered with an accent underline sweep; light and dark schemes

**Specs Checklist**

```html mk-specs-list.html
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
    <style>
      *,
      *::before,
      *::after {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
      body {
        background: transparent;
        overflow: hidden;
      }
      #mk-sl-root {
        /* ---- mk tokens: override in the host to re-skin the family ---- */
        --mk-font: "Inter", -apple-system, sans-serif;
        --mk-ink: #1d1d1f;
        --mk-ink-dim: #6e6e73;
        --mk-ink-dark: #f5f5f7;
        --mk-ink-dim-dark: #a1a1a6;
        --mk-accent: #0071e3;
        --mk-accent-dark: #7d5cff;
        --mk-hairline: 2px;

        position: relative;
        width: 1920px;
        height: 1080px;
        overflow: hidden;
        background: transparent; /* overlays footage or mk-background */
      }
      #mk-sl-scrim {
        position: absolute;
        inset: 0;
        background: linear-gradient(90deg, rgba(0, 0, 0, 0.55) 0%, rgba(0, 0, 0, 0) 62%);
        opacity: 0;
      }
      #mk-sl-col {
        position: absolute;
        display: flex;
        flex-direction: column;
      }
      .mk-sl-row {
        font-family: var(--mk-font);
        line-height: 1;
        opacity: 0;
      }
      .mk-sl-text {
        display: flex;
        align-items: baseline;
        gap: 18px;
        white-space: nowrap;
      }
      .mk-sl-label {
        font-weight: 600;
        font-size: 46px;
        letter-spacing: -0.015em;
        color: var(--mk-ink);
      }
      .mk-sl-value {
        font-weight: 400;
        font-size: 40px;
        letter-spacing: -0.01em;
        color: var(--mk-ink-dim);
      }
      .mk-sl-line {
        position: relative;
        margin-top: 22px;
        height: var(--mk-hairline);
        background: rgba(0, 0, 0, 0.1);
        border-radius: 2px;
        overflow: hidden;
      }
      .mk-sl-line-fill {
        position: absolute;
        inset: 0;
        background: var(--mk-accent);
        transform-origin: left center;
      }
      /* dark scheme: white rows for use over footage (overlay look) */
      .mk-dark .mk-sl-label {
        color: var(--mk-ink-dark);
      }
      .mk-dark .mk-sl-value {
        color: var(--mk-ink-dim-dark);
      }
      .mk-dark .mk-sl-line {
        background: rgba(255, 255, 255, 0.18);
      }
      .mk-dark .mk-sl-line-fill {
        background: var(--mk-accent-dark);
      }
    </style>
  </head>
  <body>
    <div
      id="mk-sl-root"
      data-composition-id="mk-specs-list"
      data-start="0"
      data-duration="8"
      data-width="1920"
      data-height="1080"
    >
      <div id="mk-sl-scrim"></div>
      <div id="mk-sl-col"></div>
      <div
        id="mk-sl-drv"
        class="clip"
        data-start="0"
        data-duration="8"
        data-track-index="0"
        style="position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none"
      ></div>
    </div>
    <script>
      (function () {
        window.__timelines = window.__timelines || {};

        /* ---- published parameters (inspector-style CONFIG) ---- */
        var CONFIG = {
          scheme: "light", // "light" (ink rows) | "dark" (white rows, for footage)
          rows: [
            { label: "Design", value: "Minimal, clean lines" },
            { label: "Typography", value: "Inter SemiBold" },
            { label: "Motion", value: "Restrained, no bounce" },
            { label: "Color", value: "Stage + one accent" },
            { label: "Shapes", value: "Capsules & rounded cards" },
          ],
          underline: true, // accent sweep under each row
          lineWidth: 660, // px
          scrim: 0, // 0–1 left-edge dark scrim for readability over footage
          x: 160, // column left edge
          rowGap: 44, // px between rows
          stagger: 0.18, // s between row entrances
          animationIn: true,
          animationOut: true,
        };

        var DUR = 8;
        var root = document.getElementById("mk-sl-root");
        var col = document.getElementById("mk-sl-col");
        var scrim = document.getElementById("mk-sl-scrim");

        if (CONFIG.scheme === "dark") root.classList.add("mk-dark");
        scrim.style.opacity = String(CONFIG.scrim);

        /* build rows */
        CONFIG.rows.forEach(function (r, i) {
          var row = document.createElement("div");
          row.id = "mk-sl-row-" + i;
          row.className = "mk-sl-row";
          if (i > 0) row.style.marginTop = CONFIG.rowGap + "px";

          var text = document.createElement("div");
          text.className = "mk-sl-text";
          var label = document.createElement("span");
          label.className = "mk-sl-label";
          label.textContent = r.label;
          text.appendChild(label);
          if (r.value) {
            var value = document.createElement("span");
            value.className = "mk-sl-value";
            value.textContent = r.value;
            text.appendChild(value);
          }
          row.appendChild(text);

          if (CONFIG.underline) {
            var line = document.createElement("div");
            line.className = "mk-sl-line";
            line.style.width = CONFIG.lineWidth + "px";
            var fill = document.createElement("div");
            fill.id = "mk-sl-fill-" + i;
            fill.className = "mk-sl-line-fill";
            line.appendChild(fill);
            row.appendChild(line);
          }
          col.appendChild(row);
        });

        /* center the column vertically */
        var colH =
          CONFIG.rows.length * (46 + 22 + (CONFIG.underline ? 2 : 0)) +
          (CONFIG.rows.length - 1) * CONFIG.rowGap;
        col.style.left = CONFIG.x + "px";
        col.style.top = Math.round((1080 - colH) / 2) + "px";

        var tl = gsap.timeline({ paused: true });

        CONFIG.rows.forEach(function (r, i) {
          var row = document.getElementById("mk-sl-row-" + i);
          var t0 = (CONFIG.animationIn ? 0.3 : 0) + i * CONFIG.stagger;

          if (CONFIG.animationIn) {
            gsap.set(row, { opacity: 0, x: -36 });
            tl.to(row, { opacity: 1, x: 0, duration: 0.7, ease: "power3.out" }, t0);
          } else {
            gsap.set(row, { opacity: 1 });
          }

          if (CONFIG.underline) {
            var fill = document.getElementById("mk-sl-fill-" + i);
            gsap.set(fill, { scaleX: 0 });
            tl.to(fill, { scaleX: 1, duration: 0.8, ease: "power2.inOut" }, t0 + 0.15);
          }
        });

        /* exit + hard kill */
        if (CONFIG.animationOut) {
          tl.to(col, { opacity: 0, y: -20, duration: 0.4, ease: "power2.in" }, DUR - 0.5);
          tl.to(scrim, { opacity: 0, duration: 0.4, ease: "power2.in" }, DUR - 0.5);
        }
        tl.set(root, { visibility: "hidden" }, DUR - 0.02);

        window.__timelines["mk-specs-list"] = tl;
      })();
    </script>
  </body>
</html>
```

Copy npx hyperframes add mk-specs-list to the clipboard

That writes one file: `compositions/mk-specs-list.html`.

## Add it to your video

It runs for 8 seconds at 1920×1080. Paste this into your composition:

```html index.html
<div
  data-composition-id="mk-specs-list"
  data-composition-src="compositions/mk-specs-list.html"
  data-start="0"
  data-duration="8"
  data-track-index="1"
  data-width="1920"
  data-height="1080"
></div>
```

Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes.md) for the rest.

{/* hf:generated-footer */}

Tagged `data-viz` `list` `minimal` `professional`.

## Related topics

* [Browse the complete Catalog](/catalog.md)
* [Add assets and Catalog items in the browser editor](/studio/assets-and-blocks.md)
* [Put blocks together into one video](/concepts/compositions.md)
