Install
openclaw skills install @monikazapisekstudio/line-length-optimizerUse when checking or fixing the measure (line length) of a text block — verifying a paragraph or container sits in the 45–75 character range (35–45 on mobile) per Bringhurst/Latin readability guidance, and producing a max-width/ch fix.
openclaw skills install @monikazapisekstudio/line-length-optimizerCheck whether a block of body text sits within a comfortable reading measure, and produce a concrete CSS fix (max-width in ch or px) when it doesn't. Based on the standard typographic range: 45–75 characters per line on desktop, 35–45 on mobile (Bringhurst, Latin — see References).
max-width/font-size and asks if it's in range.One of:
max-width rather than judging an existing one.Target device: desktop, mobile, or both (default: report both).
max-width: NNch; (preferred — ch scales with font, unlike a fixed px) or an equivalent px value if the codebase doesn't use ch.Get characters-per-line.
max-width + font-size (+ font-family if known): estimate using ch unit semantics — 1ch ≈ the width of "0" in the given font, so max-width: 65ch targets ~65 characters regardless of font-size. If the input uses px instead of ch, note that the actual character count will vary by font and flag it as a reason to prefer ch.Compare against target range.
Verdict + fix.
max-width: 65ch; (or narrower, e.g. 60ch, if the content is dense/technical) on the text container.max-width or padding, or increasing container width — narrow columns cause more line breaks and more ragged/hyphenation pressure, which interacts with microtypography's Rule 3.max-width values, or a ch-based value that already scales reasonably since mobile font-sizes are usually smaller too — call out if a media query is actually needed (e.g. desktop uses a much larger font-size, breaking the ch scaling assumption).Report, don't silently edit a stylesheet. Output the CSS as a suggestion in the response; only apply it to a file if the user explicitly asks you to edit that file.
When running with Figma access (Figma MCP / plugin context), read the selected node instead of asking the user to paste text:
textNode.textAutoResize — determines what "width" even means for this node:
NONE or HEIGHT → the node has a fixed width; read textNode.width (or the bounding box) directly and treat it as the measured container width.WIDTH_AND_HEIGHT (auto-width) → there is no fixed measure to check; the box grows with content. Flag this instead of computing a verdict — recommend switching to HEIGHT (auto-height, fixed width) if the intent is a readable paragraph column, since auto-width text has no line wrap at all.textNode.fontSize and textNode.fontName.family — needed to convert a pixel width into an estimated character count (characters-per-line ≈ width in px ÷ average glyph width, which scales with fontSize and varies by typeface — monospace and condensed faces need a different divisor than a default sans).textNode.resize(newWidth, textNode.height) or the equivalent plugin API call) to the pixel width corresponding to ~65 characters at the node's current fontSize/font — but only when the user has asked for a direct fix, not as a silent default. Otherwise, report the recommended width and let the user apply it.ch unless the codebase's existing convention is px/rem — match existing convention if shown in the input.microtypography Rule 3 when the fix affects ragged-edge risk (narrower column → more hyphenation/rag pressure).ch-based implementation for web body text, and the mobile 35–45 character range.TextNode.textAutoResize.microtypography — apply after fixing measure, since a corrected column width changes where ragged-edge and hyphenation risks actually occur.