Skip to main content
Compendium / Pillars & Roles / Comparison / Maturity Rung Pip
#424

Maturity Rung Pip

Tiny indicator showing a single maturity rung (1 of 4) — the atom of any maturity ladder visualisation.

STABLE DE
#badge #real-content #dark-mode-tested #responsive
Live
Maturity Rung
Level 3/4
1
2
3
4
now Orchestrated
Spec

Intent

The maturity ladder has four canonical rungs (Augmented…Autonomous). This pip renders one rung — current level filled, prior levels hollow, future levels empty.

Acceptance Criteria

  • [ ] Four bars left-to-right, current rung emphasised
  • [ ] Numeric rung label and canonical name shown
  • [ ] Filled bars use pillar token, hollow bars keep border
  • [ ] Negative: does NOT exceed four rungs

Constraints

  • Pure CSS
  • Theme-aware via tokens
// maturity-rung-pip.astro
---
import type { CompendiumMeta } from '../../../data/types';

export const meta: CompendiumMeta = {
  id: 424,
  slug: 'maturity-rung-pip',
  name: 'Maturity Rung Pip',
  category: 'pillars-roles',
  subcategory: 'comparison',
  pillar: 'de',
  description: 'Tiny indicator showing a single maturity rung (1 of 4) — the atom of any maturity ladder visualisation.',
  spec: `## Intent
The maturity ladder has four canonical rungs (Augmented…Autonomous). This pip renders one rung — current level filled, prior levels hollow, future levels empty.

## Acceptance Criteria
- [ ] Four bars left-to-right, current rung emphasised
- [ ] Numeric rung label and canonical name shown
- [ ] Filled bars use pillar token, hollow bars keep border
- [ ] Negative: does NOT exceed four rungs

## Constraints
- Pure CSS
- Theme-aware via tokens`,
  tags: ['badge', 'real-content', 'dark-mode-tested', 'responsive'],
  status: 'stable',
  health: { ics: 87, a11y: 'aa', themed: true, animated: false },
};

const rung = 3;
const names = ['Augmented', 'Collaborative', 'Orchestrated', 'Autonomous'];
const current = names[rung - 1];
---

<div data-this-component class="w-full bg-paper text-black border-4 border-black p-3 overflow-hidden">
  <div class="flex items-baseline justify-between mb-2 gap-2">
    <div class="font-mono text-[9px] uppercase tracking-[0.25em] opacity-60 truncate">Maturity Rung</div>
    <div class="font-mono text-[9px] uppercase tracking-[0.25em] opacity-60 shrink-0">Level {rung}/4</div>
  </div>
  <div class="grid grid-cols-4 gap-1">
    {[1, 2, 3, 4].map((n) => (
      <div class:list={[
        'h-6 border-2 border-black flex items-center justify-center font-black text-[10px]',
        n < rung ? 'bg-ink text-paper' : n === rung ? 'bg-de text-black' : 'bg-paper text-black opacity-50',
      ]}>{n}</div>
    ))}
  </div>
  <div class="mt-2 flex items-baseline justify-between gap-2">
    <span class="font-mono text-[9px] uppercase tracking-widest opacity-60">now</span>
    <span class="font-black text-[11px] uppercase tracking-widest truncate">{current}</span>
  </div>
</div>