Posts

Procwire documentation

Each section below shows a live rendering of the component followed by the exact markup to copy. The comment on the first line of each snippet — <!--[ Feature Name ]--> — is just a label; it's optional and safe to delete.

Typography

Bare <h1>–<h6> tags carry a default scale (used as a fallback anywhere a component doesn't set its own size). Alongside them, a set of utility classes — .subtitle1, .subtitle2, .body1, .body2, .text-button, .caption, .overline — cover the smaller in-between sizes, and .font-thin through .font-extrabold, .italic, .underline, and .line-through layer on style, weight, and decoration.

Type Scale

Heading - H1

Heading - H2

Heading - H3

Heading - H4

Heading - H5
Heading - H6

Subtitle 1

Subtitle 2

Body 1

Body 2

Button Caption
<!--[ Type Scale ]-->
<h1>Heading - H1</h1>
<h2>Heading - H2</h2>
<h3>Heading - H3</h3>
<h4>Heading - H4</h4>
<h5>Heading - H5</h5>
<h6>Heading - H6</h6>
<p class="subtitle1">Subtitle 1</p>
<p class="subtitle2">Subtitle 2</p>
<p class="body1">Body 1</p>
<p class="body2">Body 2</p>
<span class="text-button">Button</span>
<span class="caption">Caption</span>
Style, Weight & Decoration

Italic

Thin - 100

Extralight - 200

Light - 300

Normal - 400

Medium - 500

Semibold - 600

Bold - 700

Underline

Line Through

Overline

<!--[ Style, Weight & Decoration ]-->
<p class="body1 italic">Italic</p>
<p class="body1 font-thin">Thin - 100</p>
<p class="body1 font-extralight">Extralight - 200</p>
<p class="body1 font-light">Light - 300</p>
<p class="body1">Normal - 400</p>
<p class="body1 font-medium">Medium - 500</p>
<p class="body1 font-semibold">Semibold - 600</p>
<p class="body1 font-bold">Bold - 700</p>
<p class="body1 underline">Underline</p>
<p class="body1 line-through">Line Through</p>
<p class="overline">Overline</p>

Buttons

Five visual styles ship with the template: .btn-primary (contained), .btn-outline (outlined), .btn-pastel (tinted), .btn-text (text-only), and .btn-surface (text-only with a hover surface). Combine any of them with a size modifier — .btn-lg, the unmodified default (medium), .btn-sm, or .btn-tiny — and drop an inline <svg> before or after the label for a leading or trailing icon.

Button Variants
<!--[ Button Variants ]-->
<button type="button" class="btn btn-primary">Contained</button>
<button type="button" class="btn btn-outline">Outlined</button>
<button type="button" class="btn btn-pastel">Pastel</button>
<button type="button" class="btn btn-text">Text</button>
<button type="button" class="btn btn-surface">Surface</button>
Size — Large
<!--[ Size — Large ]-->
<button type="button" class="btn btn-primary btn-lg">Contained</button>
<button type="button" class="btn btn-outline btn-lg">Outlined</button>
<button type="button" class="btn btn-pastel btn-lg">Pastel</button>
<button type="button" class="btn btn-text btn-lg">Text</button>
<button type="button" class="btn btn-surface btn-lg">Surface</button>
Size — Medium
<!--[ Size — Medium ]-->
<button type="button" class="btn btn-primary">Contained</button>
<button type="button" class="btn btn-outline">Outlined</button>
<button type="button" class="btn btn-pastel">Pastel</button>
<button type="button" class="btn btn-text">Text</button>
<button type="button" class="btn btn-surface">Surface</button>
Size — Small
<!--[ Size — Small ]-->
<button type="button" class="btn btn-primary btn-sm">Contained</button>
<button type="button" class="btn btn-outline btn-sm">Outlined</button>
<button type="button" class="btn btn-pastel btn-sm">Pastel</button>
<button type="button" class="btn btn-text btn-sm">Text</button>
<button type="button" class="btn btn-surface btn-sm">Surface</button>
Size — Tiny
<!--[ Size — Tiny ]-->
<button type="button" class="btn btn-primary btn-tiny">Contained</button>
<button type="button" class="btn btn-outline btn-tiny">Outlined</button>
<button type="button" class="btn btn-pastel btn-tiny">Pastel</button>
<button type="button" class="btn btn-text btn-tiny">Text</button>
<button type="button" class="btn btn-surface btn-tiny">Surface</button>
Icon — Left
<!--[ Icon — Left ]-->
<button type="button" class="btn btn-primary"><svg width="18" height="18"><use href="#icon-search"></use></svg>Search</button>
<button type="button" class="btn btn-outline"><svg width="18" height="18"><use href="#icon-search"></use></svg>Search</button>
<button type="button" class="btn btn-pastel"><svg width="18" height="18"><use href="#icon-search"></use></svg>Search</button>
<button type="button" class="btn btn-text"><svg width="18" height="18"><use href="#icon-search"></use></svg>Search</button>
<button type="button" class="btn btn-surface"><svg width="18" height="18"><use href="#icon-search"></use></svg>Search</button>
Icon — Right
<!--[ Icon — Right ]-->
<button type="button" class="btn btn-primary">Continue<svg width="18" height="18"><use href="#icon-chevron-right-sm"></use></svg></button>
<button type="button" class="btn btn-outline">Continue<svg width="18" height="18"><use href="#icon-chevron-right-sm"></use></svg></button>
<button type="button" class="btn btn-pastel">Continue<svg width="18" height="18"><use href="#icon-chevron-right-sm"></use></svg></button>
<button type="button" class="btn btn-text">Continue<svg width="18" height="18"><use href="#icon-chevron-right-sm"></use></svg></button>
<button type="button" class="btn btn-surface">Continue<svg width="18" height="18"><use href="#icon-chevron-right-sm"></use></svg></button>

Blockquotes

Use inside .post-wrap (or any content column). Two variants ship with the template.

Standard Blockquote

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin vestibulum dignissim diam, et efficitur felis commodo et.

Anonymous
<!--[ Standard Blockquote ]-->
<blockquote>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin vestibulum dignissim diam, et efficitur felis commodo et.</p>
  <span>Anonymous</span>
</blockquote>
Blockquote — Style 1
"The best agents are the ones that know when to stop. Overconfidence is the most expensive mistake in automation." — FlowMind Engineering Team
<!--[ Blockquote — Style 1 ]-->
<blockquote class="bq-style1">
  "The best agents are the ones that know when to stop. Overconfidence is the most expensive mistake in automation."
  <span class="bq-author">— FlowMind Engineering Team</span>
</blockquote>

Alerts

Pill-shaped status banners for surfacing success, info, warning, and error states — three visual weights (standard, filled, outlined) built on one shared icon set. Each one is a single line: no inline SVG required, just alert plus a severity (success / info / warning / error) and, optionally, fill or outline. The icon is added automatically by CSS and always matches the alert's colour.

Success Alert — Pill-shaped
This is a success Alert.
<div class="alert success">This is a success Alert.</div>
Success Alert — Filled
This is a filled success Alert.
<div class="alert success fill">This is a filled success Alert.</div>
Success Alert — Outlined
This is an outlined success Alert.
<div class="alert success outline">This is an outlined success Alert.</div>
Info Alert — Pill-shaped
This is an info Alert.
<div class="alert info">This is an info Alert.</div>
Info Alert — Filled
This is a filled info Alert.
<div class="alert info fill">This is a filled info Alert.</div>
Info Alert — Outlined
This is an outlined info Alert.
<div class="alert info outline">This is an outlined info Alert.</div>
Warning Alert — Pill-shaped
This is a warning Alert.
<div class="alert warning">This is a warning Alert.</div>
Warning Alert — Filled
This is a filled warning Alert.
<div class="alert warning fill">This is a filled warning Alert.</div>
Warning Alert — Outlined
This is an outlined warning Alert.
<div class="alert warning outline">This is an outlined warning Alert.</div>
Error Alert — Pill-shaped
This is an error Alert.
<div class="alert error">This is an error Alert.</div>
Error Alert — Filled
This is a filled error Alert.
<div class="alert error fill">This is a filled error Alert.</div>
Error Alert — Outlined
This is an outlined error Alert.
<div class="alert error outline">This is an outlined error Alert.</div>

Code Block

Just write plain <pre><code> — no wrapper <div>, no language class, no header markup. script.js finds every code block on the page, wraps it, adds a copy button, and runs it through highlight.js, which auto-detects the language and colors it using the --hl-* tokens in styles.css.

Code Block
const tools = ['lookup_order', 'issue_refund', 'escalate_to_human'];

function pickTool(intent) {
  if (intent === 'order_status') return tools[0];
  return tools[2];
}
<pre><code>
const tools = ['lookup_order', 'issue_refund', 'escalate_to_human'];

function pickTool(intent) {
  if (intent === 'order_status') return tools[0];
  return tools[2];
}
</code></pre>

Table

A responsive, horizontally-scrollable data table. Just a plain semantic table — no wrapper <div>, no classes, no data-label attributes needed. It scrolls on its own if it doesn't fit a narrow screen.

Table
ToolRisk LevelWhen to Use
lookup_orderLowAlways — first step
issue_refundMediumOrder verified & in policy
<!--[ Table ]-->
<table>
  <thead>
    <tr><th>Tool</th><th>Risk Level</th><th>When to Use</th></tr>
  </thead>
  <tbody>
    <tr><td>lookup_order</td><td>Low</td><td>Always — first step</td></tr>
    <tr><td>issue_refund</td><td>Medium</td><td>Order verified & in policy</td></tr>
  </tbody>
</table>

Pulled Image

A full-width inset image with rounded corners — drop it between paragraphs to break up long sections. Add a <figcaption> below the image to caption it; it's optional and safe to remove.

Pulled Image
Descriptive alt text
Illustration of a connected network
<!--[ Pulled Image ]-->
<div class="pull-img">
  <img src="assets/thumb-network.svg" alt="Descriptive alt text">
  <figcaption>Illustration of a connected network</figcaption>
</div>

Spoiler

A single collapsed block, built on native <details>/<summary> — no JS required.

Spoiler
Spoiler: reveal details

Any content can go here — text, lists, images, or code blocks.

<!--[ Spoiler ]-->
<details class="spoiler">
  <summary>Spoiler: reveal details</summary>
  <div class="spoiler-body">
    <p>Any content can go here — text, lists, images, or code blocks.</p>
  </div>
</details>

Accordion

Several <details> elements grouped together — ideal for FAQs. Each item opens independently.

Accordion
How long does setup take?

Most teams have a working agent in 2-3 days.

Can I use this for sales or onboarding?

Yes — the same three-tool pattern works for any bounded-action domain.

<!--[ Accordion ]-->
<div class="accordion">
  <details>
    <summary>How long does setup take?</summary>
    <div class="acc-body"><p>Most teams have a working agent in 2-3 days.</p></div>
  </details>
  <details>
    <summary>Can I use this for sales or onboarding?</summary>
    <div class="acc-body"><p>Yes — the same three-tool pattern works for any bounded-action domain.</p></div>
  </details>
</div>

Steps

A numbered vertical timeline — just a plain <ol> or <ul> with the .steps class (numbering is generated by CSS, so it works the same either way). A solid line connects each circle to the next, all in your theme's primary color. Each item can be a plain line of text, or richer — a bold title, a description paragraph, and a muted timestamp.

Steps — simple
  1. step_1
  2. step_2
  3. step_3
<!--[ Steps — simple ]-->
<ol class="steps">
  <li>step_1</li>
  <li>step_2</li>
  <li>step_3</li>
</ol>
Steps — activity timeline
  1. Permission Updated

    Olivia updated user permissions for Elijah

    4 hours ago
  2. User Password Reset

    Olivia logged into the admin dashboard.

    4 hours ago
  3. Product Update

    Charlotte edited product details for Buck Rogers

    6 hours ago
  4. Refund Process

    James processed refund request for order #10234

    2 days ago
<!--[ Steps — activity timeline ]-->
<ol class="steps">
  <li>
    <strong>Permission Updated</strong>
    <p>Olivia updated user permissions for <a href="#">Elijah</a></p>
    <span class="steps-time">4 hours ago</span>
  </li>
  <li>
    <strong>User Password Reset</strong>
    <p><a href="#">Olivia</a> logged into the admin dashboard.</p>
    <span class="steps-time">4 hours ago</span>
  </li>
  <li>
    <strong>Product Update</strong>
    <p>Charlotte edited product details for <a href="#">Buck Rogers</a></p>
    <span class="steps-time">6 hours ago</span>
  </li>
</ol>

Checklist

A simple feature/benefit list with a checkmark — a plain <ul> (or <ol>) with the .pd-features class. The checkmark is added automatically by CSS in front of every <li>, colored with --success — no icon markup needed, just write the text.

Checklist
  • Full n8n workflow, ready to import
  • Retrieval layer pre-wired for your docs
  • Free updates for 12 months
<!--[ Checklist ]-->
<ul class="pd-features">
  <li>Full n8n workflow, ready to import</li>
  <li>Retrieval layer pre-wired for your docs</li>
  <li>Free updates for 12 months</li>
</ul>

In-Feed Ad Slot

A placeholder block for an in-article ad unit — drop it between sections, not inside one.

In-Feed Ad
Ad goes here
<!--[ In-Feed Ad ]-->
<div class="infeed-ad">Ad goes here</div>

Table of Contents

Drop this once near the top of an article. script.js scans .post-wrap for h2[id]/h3[id] and fills the .aToc div in automatically — you never hand-write the list.

Table of Contents
Table of Contents
<!--[ Table of Contents ]-->
<details class="spoiler toc">
  <summary>Table of Contents</summary>
  <div class="aToc"></div>
</details>

About the author

Stephano kambeta
Proudly African 🇲🇼. Modern life, shaped by the echoes of traditional drums.

Post a Comment