@nyuchi/mzizi-mcp 0.11.1 → 0.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,18 +1,18 @@
1
1
  /**
2
2
  * GENERATED by scripts/generate-registry.mjs — do not edit, do not commit.
3
3
  *
4
- * The mzizi registry at https://github.com/mzizi-dev/mzizi-registry/tree/9b86e034ffd84cff9ae0214201dc4bc4b15b2885
4
+ * The mzizi registry at https://github.com/mzizi-dev/mzizi-registry/tree/e1c1c89ed98f7222db702cf25fdb7f88419f5bcb
5
5
  * (pinned in registry.pin.json), produced by calling the registry's own API
6
6
  * route handlers at build time. Every value is a JSON string, parsed lazily by
7
7
  * src/registry.ts, so a cold start pays only for what a request reads.
8
8
  */
9
- // stamp: ref=9b86e034ffd84cff9ae0214201dc4bc4b15b2885 generator=fbbfe3205035b229
10
- export const REGISTRY_PIN = { "repository": "https://github.com/mzizi-dev/mzizi-registry", "ref": "9b86e034ffd84cff9ae0214201dc4bc4b15b2885" };
9
+ // stamp: ref=e1c1c89ed98f7222db702cf25fdb7f88419f5bcb generator=fbbfe3205035b229
10
+ export const REGISTRY_PIN = { "repository": "https://github.com/mzizi-dev/mzizi-registry", "ref": "e1c1c89ed98f7222db702cf25fdb7f88419f5bcb" };
11
11
  /** Whole-resource payloads, keyed by section. */
12
12
  export const SECTIONS = {
13
13
  "index": "{\"$schema\":\"https://ui.shadcn.com/schema/registry.json\",\"name\":\"mzizi\",\"homepage\":\"https://mzizi.dev\",\"items\":[{\"name\":\"accessibility-audit\",\"type\":\"registry:ui\",\"title\":\"Accessibility Audit\",\"description\":\"N8 assurance probe that validates WCAG compliance and color-blindness safety across every semantic-color pair. Runs daily via pg_cron, detects regressions, and files a Fundi issue for each. Uses Machado/Oliveira/Fernandes (2009) linear-RGB simulation matrices for protanopia, deuteranopia, tritanopia, and achromatopsia. Includes an audit_exempt flag so decorative borders covered by WCAG 1.4.11 non-text-contrast exemption are correctly skipped.\",\"categories\":[\"documentation\",\"assurance\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":8,\"nodeLabel\":\"assurance\",\"owner\":\"mzizi\",\"collection\":\"documentation\"},{\"name\":\"accordion\",\"type\":\"registry:ui\",\"title\":\"Accordion\",\"description\":\"A vertically stacked set of interactive headings that reveal content.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"activity-feed\",\"type\":\"registry:ui\",\"title\":\"Activity Feed\",\"description\":\"Chronological action list with timeline pattern for dashboards and profiles.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"address-input\",\"type\":\"registry:ui\",\"title\":\"Address Input\",\"description\":\"Structured address form with street, city, state, postal code, and country fields with African countries prioritized.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/input\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"admin-page\",\"type\":\"registry:ui\",\"title\":\"Admin Page\",\"description\":\"Admin/back-office page. Tabbed admin interface with sidebar navigation, content area, and action bar. For Mukoko Console admin, B2B partner dashboards, org management.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"agenda-view\",\"type\":\"registry:ui\",\"title\":\"Agenda View\",\"description\":\"Chronological event list grouped by date.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"ai-chat\",\"type\":\"registry:ui\",\"title\":\"AI Chat\",\"description\":\"Complete AI conversation interface with message history, streaming, and suggested prompts.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"ai-feedback\",\"type\":\"registry:ui\",\"title\":\"AI Feedback\",\"description\":\"Thumbs up/down rating for AI responses with optional text feedback.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"ai-response-card\",\"type\":\"registry:ui\",\"title\":\"AI Response Card\",\"description\":\"Structured AI output card with markdown rendering and action buttons.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"ai-safety\",\"type\":\"registry:lib\",\"title\":\"AI Safety\",\"description\":\"AI safety utilities: input validation, prompt injection detection, and rate limiting.\",\"categories\":[\"safety\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/observability\"],\"node\":4,\"nodeLabel\":\"safety\",\"owner\":\"mzizi\",\"collection\":\"safety\"},{\"name\":\"alert\",\"type\":\"registry:ui\",\"title\":\"Alert\",\"description\":\"Displays a callout for important information.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"class-variance-authority\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"alert-dialog\",\"type\":\"registry:ui\",\"title\":\"Alert Dialog\",\"description\":\"A modal dialog that interrupts the user with important content and expects a response.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"analytics-dashboard-card\",\"type\":\"registry:ui\",\"title\":\"Analytics Dashboard Card\",\"description\":\"KPI metric card with sparkline chart, period comparison (vs last week/month/year), and drill-down action. The standard analytics widget for the Nyuchi Console and all 7 Nyuchi product dashboards.\",\"categories\":[\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"analytics-dashboard-page\",\"type\":\"registry:ui\",\"title\":\"Analytics Dashboard Page\",\"description\":\"Analytics dashboard page. KPI cards, time-series charts, data tables, date range picker, export controls. Used by Mukoko Console, Nyuchi Web Services, and B2B partners. Open data compatible — sections can be made public. Competitors: Grafana, Google Analytics, Metabase.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"ancestry-memorial\",\"type\":\"registry:ui\",\"title\":\"Ancestry Memorial\",\"description\":\"Ancestral MIT display for deceased community members. Shows the person's fixed age, memorial badge, heritage data contribution status, and ancestral pool participation. Implements the visual layer of the MIT Ancestral Lifecycle Protocol.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/badge\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"announcement-bar\",\"type\":\"registry:ui\",\"title\":\"Announcement Bar\",\"description\":\"Dismissible top-of-page banner for announcements with mineral-colored variants.\",\"categories\":[\"primitives\"],\"dependencies\":[\"class-variance-authority\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"api-explorer-page\",\"type\":\"registry:ui\",\"title\":\"API Explorer Page\",\"description\":\"API explorer/playground page. Endpoint browser, request builder, response viewer, auth token input. For Nyuchi Web Services API docs. Competitors: Swagger UI, Postman, Stripe API Reference.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"api-key-display\",\"type\":\"registry:ui\",\"title\":\"API Key Display\",\"description\":\"Masked/revealable API key with copy and regenerate actions.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"api-usage-meter\",\"type\":\"registry:ui\",\"title\":\"API Usage Meter\",\"description\":\"API quota visualization with current usage, rate limit status, and throttling indicator. Shows requests/second, daily quota, and monthly billing period. Used in Nyuchi API Platform dashboard and developer portal.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/progress\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"app-switcher\",\"type\":\"registry:ui\",\"title\":\"App Switcher\",\"description\":\"Ecosystem app selector popover with grid of Nyuchi app icons.\",\"categories\":[\"shell\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/popover\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":7,\"nodeLabel\":\"shell\",\"owner\":\"nyuchi\",\"collection\":\"shell\"},{\"name\":\"appointment-card\",\"type\":\"registry:ui\",\"title\":\"Appointment Card\",\"description\":\"Medical appointment card showing provider name, specialty, date/time, location, and join/cancel actions. Maps to health.medical_appointment (Schema.org ScheduleAction). Used in Health mini-app and Nyuchi Medical provider views.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/badge\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"arc-gauge\",\"type\":\"registry:ui\",\"title\":\"Arc Gauge\",\"description\":\"SVG radial arc gauge (270° sweep, open at bottom). Displays a percentage value as a filled arc with the value text centered inside. Uses stroke-dasharray animation. Proper role=\\\"meter\\\" with aria-valuenow/min/max. Used for UV index, trust scores, completion percentages, health metrics, battery levels — any bounded numeric value. Production-proven in mukoko-weather MetricCard.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/utils\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"architecture\",\"type\":\"registry:lib\",\"title\":\"Architecture\",\"description\":\"Nyuchi ecosystem architecture specification — local-first data strategy and sovereignty assessment.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"article-page\",\"type\":\"registry:ui\",\"title\":\"Article Page\",\"description\":\"Article/news reading page. Hero image, headline, author, read time, content body, source badge, related articles. Competitors: Medium, BBC, Al Jazeera.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"aspect-ratio\",\"type\":\"registry:ui\",\"title\":\"Aspect Ratio\",\"description\":\"Displays content within a desired ratio.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"assignee-picker\",\"type\":\"registry:ui\",\"title\":\"Assignee Picker\",\"description\":\"User/team member selector for task assignment. Shows avatar, name, and availability indicator. Supports single and multi-select. Used in task assignment, event organiser roles, Circle admin assignment, and any workflow where items are assigned to people.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/combobox\",\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/badge\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"audio-player\",\"type\":\"registry:ui\",\"title\":\"Audio Player\",\"description\":\"Audio playback with progress bar, play/pause, and speed control.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"audio-waveform\",\"type\":\"registry:ui\",\"title\":\"Audio Waveform\",\"description\":\"Waveform visualization for audio recording, playback, and editing. Shows amplitude over time with playhead position. Used for voice notes in Campfire, audio content in Bytes, and podcast previews.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"audit-log-entry\",\"type\":\"registry:ui\",\"title\":\"Audit Log Entry\",\"description\":\"Audit event display with actor, action, target, timestamp.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"author-bio-card\",\"type\":\"registry:ui\",\"title\":\"Author Bio Card\",\"description\":\"Author profile card with avatar, bio, works count, subscriber count, revenue sharing indicator, and follow button. Maps to identity.person + novels.work tables. Used on novel detail pages and author directory.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/mzizi-verified-badge\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"autocomplete\",\"type\":\"registry:ui\",\"title\":\"Autocomplete\",\"description\":\"Text input with async suggestion dropdown, loading states, and keyboard navigation.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"avatar\",\"type\":\"registry:ui\",\"title\":\"Avatar\",\"description\":\"An image element with a fallback for representing the user.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"avatar-group\",\"type\":\"registry:ui\",\"title\":\"Avatar Group\",\"description\":\"Overlapping avatar stack with +N overflow indicator for team displays.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"badge\",\"type\":\"registry:ui\",\"title\":\"Badge\",\"description\":\"Displays a badge or a component that looks like a badge.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"class-variance-authority\",\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"batch-action-bar\",\"type\":\"registry:ui\",\"title\":\"Batch Action Bar\",\"description\":\"Multi-select action toolbar that appears when items are selected in a table or list. Shows selected count with approve-all, reject-all, export, and custom action buttons. Used across all Nyuchi Console moderation and management views.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button-group\",\"https://api.mzizi.dev/v1/ui/badge\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"bento-grid\",\"type\":\"registry:ui\",\"title\":\"Bento Grid\",\"description\":\"Asymmetric grid layout with varying tile sizes. Japanese-inspired content layout pattern for dashboards, feature showcases, and landing pages. Supports responsive breakpoint-aware tile resizing. Audit flagged as missing UX pattern. ALPHA — awaiting frontend implementation.\",\"categories\":[\"primitives\"],\"dependencies\":[\"class-variance-authority\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"billing-page\",\"type\":\"registry:ui\",\"title\":\"Billing Page\",\"description\":\"Billing & subscription management page. Current plan, usage meters, invoices, payment methods, upgrade CTA. Used by Nyuchi Web Services, B2B partners, and Mukoko premium subscribers.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"booking-calendar\",\"type\":\"registry:ui\",\"title\":\"Booking Calendar\",\"description\":\"Date/time availability grid for bookings. Shows available, partially available, and unavailable slots with mineral color coding. Used for vehicle booking (Transport), venue booking (Nhimbe), and appointment scheduling (Health).\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/calendar\",\"https://api.mzizi.dev/v1/ui/time-slot-picker\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"booking-confirmation\",\"type\":\"registry:ui\",\"title\":\"Booking Confirmation\",\"description\":\"Booking success card with full details, QR code, calendar-add button, and share action. The standard post-booking confirmation pattern across Nhimbe events, Transport bookings, and Health appointments. Maps to planner.reservation table.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/separator\",\"https://api.mzizi.dev/v1/ui/badge\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"booking-page\",\"type\":\"registry:ui\",\"title\":\"Booking Page\",\"description\":\"Booking/reservation page. Service/ride selection, date/time picker, provider selection, confirmation. Used by transport, health, events.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"bottom-sheet\",\"type\":\"registry:ui\",\"title\":\"Bottom Sheet\",\"description\":\"Mobile slide-up panel with drag handle, backdrop, and slide-up animation.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"breadcrumb\",\"type\":\"registry:ui\",\"title\":\"Breadcrumb\",\"description\":\"Displays the path to the current resource using a hierarchy of links.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"bulkhead\",\"type\":\"registry:lib\",\"title\":\"Bulkhead\",\"description\":\"Concurrency isolation pattern inspired by Resilience4j Bulkhead. Limits how many concurrent calls can hit a single dependency so one slow service cannot consume all available connections and starve other operations. Named after ship bulkheads that prevent a single hull breach from sinking the whole vessel. Supports both semaphore-style (max concurrent) and queue-style (max waiting) isolation. Integrates with observability for tracking concurrent call counts and rejection rates.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/observability\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"button\",\"type\":\"registry:ui\",\"title\":\"Button\",\"description\":\"Displays a button or a component that looks like a button.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\",\"class-variance-authority\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"button-group\",\"type\":\"registry:ui\",\"title\":\"Button Group\",\"description\":\"Groups related buttons together.\",\"categories\":[\"primitives\"],\"dependencies\":[\"class-variance-authority\",\"radix-ui\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/separator\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"calendar\",\"type\":\"registry:ui\",\"title\":\"Calendar\",\"description\":\"A date field component that allows users to enter and edit dates.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"react-day-picker\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"calendar-day-view\",\"type\":\"registry:ui\",\"title\":\"Calendar Day View\",\"description\":\"Single-day time grid with hourly slots and event blocks.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"calendar-month-view\",\"type\":\"registry:ui\",\"title\":\"Calendar Month View\",\"description\":\"Full month calendar grid with event dots, today indicator, and day cell click handler. Complements calendar-day-view and calendar-week-view to complete the three standard calendar views. The month grid is the most common calendar entry point across all apps.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/calendar\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"calendar-week-view\",\"type\":\"registry:ui\",\"title\":\"Calendar Week View\",\"description\":\"7-column weekly calendar view with hourly time slots.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"camera-viewfinder\",\"type\":\"registry:ui\",\"title\":\"Camera Viewfinder\",\"description\":\"Camera preview overlay with branded recording indicator, timer display, and effects panel trigger. The creation entry point for Bytes short-form video and Campfire media messages. Pill-shaped record button with malachite accent.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"canvas-chart\",\"type\":\"registry:ui\",\"title\":\"Canvas Chart\",\"description\":\"Chart.js Canvas-based chart renderer for data-heavy dashboards. Use INSTEAD of the Recharts chart when you have 100+ data points per chart or multiple charts per page. Canvas renders everything to a single DOM element regardless of data volume, while SVG (Recharts) creates a DOM node per data point. Includes CSS variable resolution for Canvas 2D context (which cannot read var() natively), theme-aware color fallbacks, mobile performance optimisation (reduced DPR, disabled animations), and automatic Chart.js instance cleanup on unmount to prevent canvas memory leaks. Production-proven in mukoko-weather with 7 charts × 365 data points.\",\"categories\":[\"primitives\"],\"dependencies\":[\"chart.js\",\"react-chartjs-2\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-tokens\",\"https://api.mzizi.dev/v1/ui/mzizi-tokens-typescript\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"caption-editor\",\"type\":\"registry:ui\",\"title\":\"Caption Editor\",\"description\":\"Overlay text editor for video captions and story text. Supports font selection (Noto Sans/Serif), text color from mineral palette, position dragging, and size adjustment. Used in Bytes and story creation.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/color-picker\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"card\",\"type\":\"registry:ui\",\"title\":\"Card\",\"description\":\"Displays a card with header, content, and footer.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"carousel\",\"type\":\"registry:ui\",\"title\":\"Carousel\",\"description\":\"A carousel with motion and swipe built using Embla.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"embla-carousel-react\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"cart-item\",\"type\":\"registry:ui\",\"title\":\"Cart Item\",\"description\":\"Shopping cart line item with quantity controls and remove action.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"category-browser\",\"type\":\"registry:ui\",\"title\":\"Category Browser\",\"description\":\"Grid of browsable categories with icons, counts, and mineral-colored accents.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"changelog-entry\",\"type\":\"registry:ui\",\"title\":\"Changelog Entry\",\"description\":\"Version update card with categorized changes.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"chaos\",\"type\":\"registry:lib\",\"title\":\"Chaos\",\"description\":\"Chaos testing utilities for injecting random errors and latency to test resilience.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/observability\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"chapter-list\",\"type\":\"registry:ui\",\"title\":\"Chapter List\",\"description\":\"Table of contents / chapter navigation for serialized works. Shows chapter titles, word counts, publish dates, and locked/unlocked status for subscription-gated content. Maps to novels.chapter table.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/accordion\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"chapter-reader\",\"type\":\"registry:ui\",\"title\":\"Chapter Reader\",\"description\":\"Optimized long-form reading view with page/scroll modes, bookmark, highlight, and note-in-margin functionality. Adjustable Noto Serif typography. The core reading experience for Novels, competing with Wattpad and Tapas reader quality.\",\"categories\":[\"primitives\"],\"dependencies\":[\"dompurify\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/scroll-area\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"chart\",\"type\":\"registry:ui\",\"title\":\"Chart\",\"description\":\"Beautiful charts built using Recharts. Copy and paste into your apps.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-area-axes\",\"type\":\"registry:block\",\"title\":\"Chart Area Axes\",\"description\":\"Area chart — axes variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-area-default\",\"type\":\"registry:block\",\"title\":\"Chart Area Default\",\"description\":\"Area chart — default variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-area-gradient\",\"type\":\"registry:block\",\"title\":\"Chart Area Gradient\",\"description\":\"Area chart — gradient variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-area-icons\",\"type\":\"registry:block\",\"title\":\"Chart Area Icons\",\"description\":\"Area chart — icons variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-area-interactive\",\"type\":\"registry:block\",\"title\":\"Chart Area Interactive\",\"description\":\"Area chart — interactive variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-area-legend\",\"type\":\"registry:block\",\"title\":\"Chart Area Legend\",\"description\":\"Area chart — legend variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-area-linear\",\"type\":\"registry:block\",\"title\":\"Chart Area Linear\",\"description\":\"Area chart — linear variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-area-stacked\",\"type\":\"registry:block\",\"title\":\"Chart Area Stacked\",\"description\":\"Area chart — stacked variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-area-stacked-expand\",\"type\":\"registry:block\",\"title\":\"Chart Area Stacked Expand\",\"description\":\"Area chart — stacked expand variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-area-step\",\"type\":\"registry:block\",\"title\":\"Chart Area Step\",\"description\":\"Area chart — step variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-bar-active\",\"type\":\"registry:block\",\"title\":\"Chart Bar Active\",\"description\":\"Bar chart — active variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-bar-default\",\"type\":\"registry:block\",\"title\":\"Chart Bar Default\",\"description\":\"Bar chart — default variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-bar-horizontal\",\"type\":\"registry:block\",\"title\":\"Chart Bar Horizontal\",\"description\":\"Bar chart — horizontal variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-bar-interactive\",\"type\":\"registry:block\",\"title\":\"Chart Bar Interactive\",\"description\":\"Bar chart — interactive variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-bar-label\",\"type\":\"registry:block\",\"title\":\"Chart Bar Label\",\"description\":\"Bar chart — label variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-bar-label-custom\",\"type\":\"registry:block\",\"title\":\"Chart Bar Label Custom\",\"description\":\"Bar chart — label custom variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-bar-mixed\",\"type\":\"registry:block\",\"title\":\"Chart Bar Mixed\",\"description\":\"Bar chart — mixed variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-bar-multiple\",\"type\":\"registry:block\",\"title\":\"Chart Bar Multiple\",\"description\":\"Bar chart — multiple variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-bar-negative\",\"type\":\"registry:block\",\"title\":\"Chart Bar Negative\",\"description\":\"Bar chart — negative variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-bar-stacked\",\"type\":\"registry:block\",\"title\":\"Chart Bar Stacked\",\"description\":\"Bar chart — stacked variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-line-default\",\"type\":\"registry:block\",\"title\":\"Chart Line Default\",\"description\":\"Line chart — default variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-line-dots\",\"type\":\"registry:block\",\"title\":\"Chart Line Dots\",\"description\":\"Line chart — dots variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-line-dots-colors\",\"type\":\"registry:block\",\"title\":\"Chart Line Dots Colors\",\"description\":\"Line chart — dots colors variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-line-dots-custom\",\"type\":\"registry:block\",\"title\":\"Chart Line Dots Custom\",\"description\":\"Line chart — dots custom variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-line-interactive\",\"type\":\"registry:block\",\"title\":\"Chart Line Interactive\",\"description\":\"Line chart — interactive variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-line-label\",\"type\":\"registry:block\",\"title\":\"Chart Line Label\",\"description\":\"Line chart — label variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-line-label-custom\",\"type\":\"registry:block\",\"title\":\"Chart Line Label Custom\",\"description\":\"Line chart — label custom variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-line-linear\",\"type\":\"registry:block\",\"title\":\"Chart Line Linear\",\"description\":\"Line chart — linear variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-line-multiple\",\"type\":\"registry:block\",\"title\":\"Chart Line Multiple\",\"description\":\"Line chart — multiple variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-line-step\",\"type\":\"registry:block\",\"title\":\"Chart Line Step\",\"description\":\"Line chart — step variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-pie-donut\",\"type\":\"registry:block\",\"title\":\"Chart Pie Donut\",\"description\":\"Pie chart — donut variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-pie-donut-active\",\"type\":\"registry:block\",\"title\":\"Chart Pie Donut Active\",\"description\":\"Pie chart — donut active variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-pie-donut-text\",\"type\":\"registry:block\",\"title\":\"Chart Pie Donut Text\",\"description\":\"Pie chart — donut text variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-pie-interactive\",\"type\":\"registry:block\",\"title\":\"Chart Pie Interactive\",\"description\":\"Pie chart — interactive variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-pie-label\",\"type\":\"registry:block\",\"title\":\"Chart Pie Label\",\"description\":\"Pie chart — label variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-pie-label-custom\",\"type\":\"registry:block\",\"title\":\"Chart Pie Label Custom\",\"description\":\"Pie chart — label custom variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-pie-label-list\",\"type\":\"registry:block\",\"title\":\"Chart Pie Label List\",\"description\":\"Pie chart — label list variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-pie-legend\",\"type\":\"registry:block\",\"title\":\"Chart Pie Legend\",\"description\":\"Pie chart — legend variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-pie-separator-none\",\"type\":\"registry:block\",\"title\":\"Chart Pie Separator None\",\"description\":\"Pie chart — separator none variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-pie-simple\",\"type\":\"registry:block\",\"title\":\"Chart Pie Simple\",\"description\":\"Pie chart — simple variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-pie-stacked\",\"type\":\"registry:block\",\"title\":\"Chart Pie Stacked\",\"description\":\"Pie chart — stacked variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-radar-default\",\"type\":\"registry:block\",\"title\":\"Chart Radar Default\",\"description\":\"Radar chart — default variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-radar-dots\",\"type\":\"registry:block\",\"title\":\"Chart Radar Dots\",\"description\":\"Radar chart — dots variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-radar-grid-circle\",\"type\":\"registry:block\",\"title\":\"Chart Radar Grid Circle\",\"description\":\"Radar chart — grid circle variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-radar-grid-circle-fill\",\"type\":\"registry:block\",\"title\":\"Chart Radar Grid Circle Fill\",\"description\":\"Radar chart — grid circle fill variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-radar-grid-circle-no-lines\",\"type\":\"registry:block\",\"title\":\"Chart Radar Grid Circle No Lines\",\"description\":\"Radar chart — grid circle no lines variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-radar-grid-custom\",\"type\":\"registry:block\",\"title\":\"Chart Radar Grid Custom\",\"description\":\"Radar chart — grid custom variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-radar-grid-fill\",\"type\":\"registry:block\",\"title\":\"Chart Radar Grid Fill\",\"description\":\"Radar chart — grid fill variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-radar-grid-none\",\"type\":\"registry:block\",\"title\":\"Chart Radar Grid None\",\"description\":\"Radar chart — grid none variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-radar-icons\",\"type\":\"registry:block\",\"title\":\"Chart Radar Icons\",\"description\":\"Radar chart — icons variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-radar-label-custom\",\"type\":\"registry:block\",\"title\":\"Chart Radar Label Custom\",\"description\":\"Radar chart — label custom variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-radar-legend\",\"type\":\"registry:block\",\"title\":\"Chart Radar Legend\",\"description\":\"Radar chart — legend variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-radar-lines-only\",\"type\":\"registry:block\",\"title\":\"Chart Radar Lines Only\",\"description\":\"Radar chart — lines only variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-radar-multiple\",\"type\":\"registry:block\",\"title\":\"Chart Radar Multiple\",\"description\":\"Radar chart — multiple variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-radar-radius\",\"type\":\"registry:block\",\"title\":\"Chart Radar Radius\",\"description\":\"Radar chart — radius variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-radial-grid\",\"type\":\"registry:block\",\"title\":\"Chart Radial Grid\",\"description\":\"Radial chart — grid variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-radial-label\",\"type\":\"registry:block\",\"title\":\"Chart Radial Label\",\"description\":\"Radial chart — label variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-radial-shape\",\"type\":\"registry:block\",\"title\":\"Chart Radial Shape\",\"description\":\"Radial chart — shape variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-radial-simple\",\"type\":\"registry:block\",\"title\":\"Chart Radial Simple\",\"description\":\"Radial chart — simple variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-radial-stacked\",\"type\":\"registry:block\",\"title\":\"Chart Radial Stacked\",\"description\":\"Radial chart — stacked variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-radial-text\",\"type\":\"registry:block\",\"title\":\"Chart Radial Text\",\"description\":\"Radial chart — text variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-tooltip-advanced\",\"type\":\"registry:block\",\"title\":\"Chart Tooltip Advanced\",\"description\":\"Tooltip chart — advanced variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-tooltip-default\",\"type\":\"registry:block\",\"title\":\"Chart Tooltip Default\",\"description\":\"Tooltip chart — default variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-tooltip-formatter\",\"type\":\"registry:block\",\"title\":\"Chart Tooltip Formatter\",\"description\":\"Tooltip chart — formatter variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-tooltip-icons\",\"type\":\"registry:block\",\"title\":\"Chart Tooltip Icons\",\"description\":\"Tooltip chart — icons variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-tooltip-indicator-line\",\"type\":\"registry:block\",\"title\":\"Chart Tooltip Indicator Line\",\"description\":\"Tooltip chart — indicator line variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-tooltip-indicator-none\",\"type\":\"registry:block\",\"title\":\"Chart Tooltip Indicator None\",\"description\":\"Tooltip chart — indicator none variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-tooltip-label-custom\",\"type\":\"registry:block\",\"title\":\"Chart Tooltip Label Custom\",\"description\":\"Tooltip chart — label custom variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-tooltip-label-formatter\",\"type\":\"registry:block\",\"title\":\"Chart Tooltip Label Formatter\",\"description\":\"Tooltip chart — label formatter variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chart-tooltip-label-none\",\"type\":\"registry:block\",\"title\":\"Chart Tooltip Label None\",\"description\":\"Tooltip chart — label none variant.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"chat-bubble\",\"type\":\"registry:ui\",\"title\":\"Chat Bubble\",\"description\":\"Single message display with sent/received variants, avatar, timestamp, and status.\",\"categories\":[\"primitives\"],\"dependencies\":[\"class-variance-authority\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"chat-input\",\"type\":\"registry:ui\",\"title\":\"Chat Input\",\"description\":\"Message composer with auto-growing textarea, send button, and keyboard shortcuts.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"chat-layout\",\"type\":\"registry:ui\",\"title\":\"Chat Layout\",\"description\":\"Full chat page layout with sidebar conversations and main chat area.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"chat-list\",\"type\":\"registry:ui\",\"title\":\"Chat List\",\"description\":\"Scrollable conversation list with unread counts and active highlight.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"chat-page\",\"type\":\"registry:ui\",\"title\":\"Chat Page\",\"description\":\"Chat/messaging page composition. Conversation list or active chat with message input, media attachments, read receipts. Competitors: WhatsApp, Telegram, WeChat.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"checkbox\",\"type\":\"registry:ui\",\"title\":\"Checkbox\",\"description\":\"A control that allows the user to toggle between checked and not checked.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"checklist\",\"type\":\"registry:ui\",\"title\":\"Checklist\",\"description\":\"Interactive checklist with add, reorder, and completion tracking.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"checkout-page\",\"type\":\"registry:ui\",\"title\":\"Checkout Page\",\"description\":\"Checkout/order page. Cart summary, shipping, payment method selection, order confirmation. Multi-step with progress indicator.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"circuit-breaker\",\"type\":\"registry:lib\",\"title\":\"Circuit Breaker\",\"description\":\"Netflix Hystrix-inspired circuit breaker with CLOSED/OPEN/HALF_OPEN state machine.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/timeout\",\"https://api.mzizi.dev/v1/ui/observability\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"co-author-strip\",\"type\":\"registry:ui\",\"title\":\"Co Author Strip\",\"description\":\"Multi-author display showing all co-authors with their revenue split percentages. Compact inline strip for novel headers and detail pages. Maps to novels.work_contributor with revenue_share_pct.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/avatar-group\",\"https://api.mzizi.dev/v1/ui/tooltip\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"code-block\",\"type\":\"registry:ui\",\"title\":\"Code Block\",\"description\":\"Enhanced code display with language badge, line numbers, copy button, and filename.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"code-editor\",\"type\":\"registry:ui\",\"title\":\"Code Editor\",\"description\":\"Code input with line numbers, monospace font, and tab key support.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"code-tabs\",\"type\":\"registry:ui\",\"title\":\"Code Tabs\",\"description\":\"Tabbed code display for multiple languages/frameworks.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"collapsible\",\"type\":\"registry:ui\",\"title\":\"Collapsible\",\"description\":\"An interactive component which expands and collapses a panel.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"color-picker\",\"type\":\"registry:ui\",\"title\":\"Color Picker\",\"description\":\"Color selector with hex input and preset swatches including the Seven African Minerals.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/input\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"combobox\",\"type\":\"registry:ui\",\"title\":\"Combobox\",\"description\":\"Autocomplete input and command palette with a list of suggestions.\",\"categories\":[\"primitives\"],\"dependencies\":[\"@base-ui/react\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/input-group\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"command\",\"type\":\"registry:ui\",\"title\":\"Command\",\"description\":\"Fast, composable, unstyled command menu for React.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"cmdk\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/dialog\",\"https://api.mzizi.dev/v1/ui/input-group\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"command-center\",\"type\":\"registry:block\",\"title\":\"Command Center\",\"description\":\"Spotlight-style command palette with search, grouped results, and keyboard hints.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/command\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"comment-on-paragraph\",\"type\":\"registry:ui\",\"title\":\"Comment On Paragraph\",\"description\":\"Inline paragraph-level commenting — the Medium-style annotation pattern. Users highlight text in a chapter and leave comments anchored to that specific passage. Maps to a future comments schema on novels.chapter.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/popover\",\"https://api.mzizi.dev/v1/ui/textarea\",\"https://api.mzizi.dev/v1/ui/avatar\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"comment-thread\",\"type\":\"registry:ui\",\"title\":\"Comment Thread\",\"description\":\"Threaded comments with nested replies and actions.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"console-dashboard-page\",\"type\":\"registry:ui\",\"title\":\"Console Dashboard Page\",\"description\":\"Nyuchi Console main dashboard. Project overview, resource usage, API traffic, deploy status, quick actions. The control center for Nyuchi Web Services. Competitors: Vercel Dashboard, AWS Console, Cloudflare Dashboard.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"contact-card\",\"type\":\"registry:ui\",\"title\":\"Contact Card\",\"description\":\"Contact information card with avatar, details, and action links for call and email.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"content-calendar\",\"type\":\"registry:ui\",\"title\":\"Content Calendar\",\"description\":\"Editorial calendar showing scheduled content across a week or month view. Drag-and-drop scheduling, content type color coding, and publish status indicators. Used in Mukoko News editorial management and Bytes creator scheduling.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/calendar-week-view\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/badge\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"context-menu\",\"type\":\"registry:ui\",\"title\":\"Context Menu\",\"description\":\"Displays a menu to the user triggered by a right click.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"contrast-mode-toggle\",\"type\":\"registry:ui\",\"title\":\"Contrast Mode Toggle\",\"description\":\"Accessibility mode switcher supporting light, dark, high-contrast, and system-preference modes. Goes beyond simple dark mode to include APCA 3.0 AAA high-contrast for users with visual impairments.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/toggle-group\",\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"cookie-consent\",\"type\":\"registry:ui\",\"title\":\"Cookie Consent\",\"description\":\"GDPR/POPIA-compliant consent banner with accept, decline, and manage options.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"copy-button\",\"type\":\"registry:ui\",\"title\":\"Copy Button\",\"description\":\"A button that copies text to the clipboard with visual feedback on success.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"currency-input\",\"type\":\"registry:ui\",\"title\":\"Currency Input\",\"description\":\"Multi-currency numeric input with currency switcher supporting MXT, ZWL, USD, ZAR, KES, and mobile money codes. Formats values per locale with proper decimal handling. The standard financial input for all payment flows across the ecosystem.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/select\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"dao-proposal-card\",\"type\":\"registry:ui\",\"title\":\"Dao Proposal Card\",\"description\":\"Governance proposal card with title, description, proposer, voting progress bar (for/against/abstain), deadline countdown, quorum status, and vote action. Maps to ubuntu.dao_proposals table. Used in the governance section of the Mukoko Foundation interface.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/progress\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/avatar\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"dashboard-01\",\"type\":\"registry:block\",\"title\":\"Dashboard 01\",\"description\":\"Full dashboard layout with stats, chart section, and activity feed.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"data-explorer-page\",\"type\":\"registry:ui\",\"title\":\"Data Explorer Page\",\"description\":\"Data explorer page for open data. Table browser, SQL/filter builder, column selection, pagination, CSV/JSON export. Used by Nyuchi Open Data platform and B2B partners. Competitors: Metabase, data.gov, Socrata.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"data-table\",\"type\":\"registry:ui\",\"title\":\"Data Table\",\"description\":\"A powerful table with sorting, filtering, pagination, and column visibility powered by TanStack Table.\",\"categories\":[\"primitives\"],\"dependencies\":[\"@tanstack/react-table\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/dropdown-menu\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/table\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"date-label\",\"type\":\"registry:ui\",\"title\":\"Date Label\",\"description\":\"Smart date display that shows relative time for recent dates (\\\"2 hours ago\\\", \\\"yesterday\\\") and absolute dates for older ones (\\\"15 May 2026\\\"). Respects locale from mzizi-locale. A micro-primitive used everywhere — message timestamps, card metadata, activity feeds, task due dates.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/tooltip\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"date-picker\",\"type\":\"registry:ui\",\"title\":\"Date Picker\",\"description\":\"A date picker component with calendar popover, supporting single date and date range selection.\",\"categories\":[\"primitives\"],\"dependencies\":[\"date-fns\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/calendar\",\"https://api.mzizi.dev/v1/ui/popover\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"date-range-picker\",\"type\":\"registry:ui\",\"title\":\"Date Range Picker\",\"description\":\"Dual-calendar popover for selecting date ranges with preset quick-selects.\",\"categories\":[\"primitives\"],\"dependencies\":[\"react-day-picker\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"dependency-graph\",\"type\":\"registry:ui\",\"title\":\"Dependency Graph\",\"description\":\"Visual dependency/relationship display between items — task depends on task, event requires event, etc. Shows directed edges between nodes. Used in project planning (Planner), workflow visualization (Console), and content relationship mapping.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"deployment-status-card\",\"type\":\"registry:ui\",\"title\":\"Deployment Status Card\",\"description\":\"Service health card showing uptime percentage, error rate, response time (p50/p95/p99), and last deploy timestamp. Mineral color coding: malachite=healthy, gold=degraded, terracotta=down. Used in the Nyuchi Console infrastructure dashboard.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/status-indicator\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"description-list\",\"type\":\"registry:ui\",\"title\":\"Description List\",\"description\":\"Semantic key-value display using dl/dt/dd elements.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"dialog\",\"type\":\"registry:ui\",\"title\":\"Dialog\",\"description\":\"A window overlaid on the primary window, rendering content underneath inert.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"direction\",\"type\":\"registry:ui\",\"title\":\"Direction\",\"description\":\"A provider to set the text direction for the application.\",\"categories\":[\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"drag-handle\",\"type\":\"registry:ui\",\"title\":\"Drag Handle\",\"description\":\"Grip indicator for drag-and-drop reordering.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"drawer\",\"type\":\"registry:ui\",\"title\":\"Drawer\",\"description\":\"A drawer component for React built on top of Vaul.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"vaul\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"driver-profile-card\",\"type\":\"registry:ui\",\"title\":\"Driver Profile Card\",\"description\":\"Driver/operator card with photo, rating, vehicle info, verification badge, and trip count. Maps to identity.person + transport tables via Nyuchi Logistics. Used in Transport booking confirmation and ride-matching.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/rating\",\"https://api.mzizi.dev/v1/ui/mzizi-verified-badge\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"dropdown-menu\",\"type\":\"registry:ui\",\"title\":\"Dropdown Menu\",\"description\":\"Displays a menu to the user triggered by a button.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"empty\",\"type\":\"registry:ui\",\"title\":\"Empty\",\"description\":\"Displays an empty state with an icon, title, and description.\",\"categories\":[\"primitives\"],\"dependencies\":[\"class-variance-authority\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"empty-state\",\"type\":\"registry:block\",\"title\":\"Empty State\",\"description\":\"Raw empty state primitive with icon, title, description, and call-to-action slots. No brand opinion. Use mzizi-empty-state (Layer 3) for the branded ecosystem version with mineral accents.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"endpoint-card\",\"type\":\"registry:ui\",\"title\":\"Endpoint Card\",\"description\":\"API endpoint display with method badge, path, and description.\",\"categories\":[\"primitives\"],\"dependencies\":[\"class-variance-authority\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"env-editor\",\"type\":\"registry:ui\",\"title\":\"Env Editor\",\"description\":\"Key-value environment variable editor with secret masking.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"error-boundary\",\"type\":\"registry:ui\",\"title\":\"Error Boundary\",\"description\":\"A React error boundary component that catches render errors and displays a fallback.\",\"categories\":[\"resilience\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/observability\"],\"node\":5,\"nodeLabel\":\"resilience\",\"owner\":\"mzizi\",\"collection\":\"resilience\"},{\"name\":\"error-page\",\"type\":\"registry:block\",\"title\":\"Error Page\",\"description\":\"Standard error page for 404, 500, and 503 states with mineral accent.\",\"categories\":[\"resilience\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\"],\"node\":5,\"nodeLabel\":\"resilience\",\"owner\":\"mzizi\",\"collection\":\"resilience\"},{\"name\":\"escrow-status\",\"type\":\"registry:ui\",\"title\":\"Escrow Status\",\"description\":\"BushTrade escrow payment status tracker. Shows payment lifecycle stages: initiated → held → released/disputed. Maps to wallet.payment_intents with escrow state. Used in BushTrade transaction views and seller dashboards.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/stepper\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/badge\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"event-block\",\"type\":\"registry:ui\",\"title\":\"Event Block\",\"description\":\"Time-ranged event block for rendering inside calendar day/week grids. Shows title, time span, and color category. Supports overlapping events with column stacking. The visual unit that populates calendar-day-view and calendar-week-view slots.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/badge\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"event-rsvp-inline\",\"type\":\"registry:ui\",\"title\":\"Event Rsvp Inline\",\"description\":\"In-chat event RSVP card shared in Campfire conversations. Compact event preview with date, venue, and quick RSVP buttons (Going/Maybe/Decline). Maps to events.rsvp_action. Bridges Nhimbe events into the Campfire messaging flow.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/button-group\",\"https://api.mzizi.dev/v1/ui/badge\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"exchange-rate\",\"type\":\"registry:ui\",\"title\":\"Exchange Rate\",\"description\":\"Currency pair display with live rate, conversion calculator, and trend indicator. Supports MXT ↔ fiat pairs across 42 African currencies. Used in Wallet swap interface and BushTrade cross-border commerce.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/currency-input\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"fallback-chain\",\"type\":\"registry:lib\",\"title\":\"Fallback Chain\",\"description\":\"Sequential fallback strategy — try stages in order, return first success.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/timeout\",\"https://api.mzizi.dev/v1/ui/observability\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"fare-calculator\",\"type\":\"registry:ui\",\"title\":\"Fare Calculator\",\"description\":\"Route fare display with breakdown by segment, applicable discounts, and total. Supports multi-currency display. Used in Transport for route cost estimation before booking.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/separator\",\"https://api.mzizi.dev/v1/ui/currency-input\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"feature-flag-toggle\",\"type\":\"registry:ui\",\"title\":\"Feature Flag Toggle\",\"description\":\"Feature flag row with name, description, environment toggles (dev/staging/production), and rollout percentage slider. Used in the Nyuchi Console feature management dashboard.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/switch\",\"https://api.mzizi.dev/v1/ui/slider\",\"https://api.mzizi.dev/v1/ui/badge\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"field\",\"type\":\"registry:ui\",\"title\":\"Field\",\"description\":\"A form field component with label, description, and message.\",\"categories\":[\"primitives\"],\"dependencies\":[\"class-variance-authority\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/label\",\"https://api.mzizi.dev/v1/ui/separator\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"file-preview\",\"type\":\"registry:ui\",\"title\":\"File Preview\",\"description\":\"File preview card with icon, name, and size display.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"file-upload\",\"type\":\"registry:ui\",\"title\":\"File Upload\",\"description\":\"A drag-and-drop file upload zone with file list, size validation, and remove actions.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"filter-bar\",\"type\":\"registry:ui\",\"title\":\"Filter Bar\",\"description\":\"A horizontal bar of toggleable filter chips with optional counts and a clear button.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"font-settings-panel\",\"type\":\"registry:ui\",\"title\":\"Font Settings Panel\",\"description\":\"Reader customization panel for font size, line height, theme (light/dark/sepia), font family (Noto Sans/Serif/system), and text alignment. Persisted per-user in the Digital Twin preferences. Used in Novels reader and News article reader mode.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/slider\",\"https://api.mzizi.dev/v1/ui/radio-group\",\"https://api.mzizi.dev/v1/ui/card\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"form\",\"type\":\"registry:ui\",\"title\":\"Form\",\"description\":\"Building forms with React Hook Form and Zod.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"@radix-ui/react-label\",\"@radix-ui/react-slot\",\"react-hook-form\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/label\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"gas-estimator\",\"type\":\"registry:ui\",\"title\":\"Gas Estimator\",\"description\":\"Transaction cost preview showing estimated gas fee in NHC with fiat equivalent. Highlights that MIT holders have static gas prices per Honeycomb protocol. Used before any on-chain transaction in Wallet.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"group-info-card\",\"type\":\"registry:ui\",\"title\":\"Group Info Card\",\"description\":\"Circle/group info header with cover image, name, description, member count, privacy status, rules summary, and admin list. Used at the top of Circle detail pages and group settings. Maps to circles.circle table.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/avatar-group\",\"https://api.mzizi.dev/v1/ui/badge\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"health-dashboard-page\",\"type\":\"registry:ui\",\"title\":\"Health Dashboard Page\",\"description\":\"Health dashboard page. Vitals overview, activity rings, medication reminders, upcoming appointments, health score. Competitors: Apple Health, MyFitnessPal, Babylon.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"health-record-summary\",\"type\":\"registry:ui\",\"title\":\"Health Record Summary\",\"description\":\"Encrypted health record summary card showing recent visits, active prescriptions, allergies, and conditions. Data sourced from the sovereign Digital Twin pod — NEVER from Supabase. Respects Covenant One.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/accordion\",\"https://api.mzizi.dev/v1/ui/badge\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"horizontal-scroll\",\"type\":\"registry:ui\",\"title\":\"Horizontal Scroll\",\"description\":\"Horizontal scroll container with CSS scroll-snap for mobile-friendly card browsing. Hides scrollbar, supports snap-to-item alignment. Used for hourly forecast cards, category browsers, story rings, product carousels, and any horizontal list that should swipe naturally on mobile. Proper role=\\\"list\\\" with keyboard navigation.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/utils\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"hover-card\",\"type\":\"registry:ui\",\"title\":\"Hover Card\",\"description\":\"For sighted users to preview content available behind a link.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"individual-profile-page\",\"type\":\"registry:ui\",\"title\":\"Individual Profile Page\",\"description\":\"Individual user profile page. Avatar, bio, verification tier, trust score, activity stats, content tabs (posts, media, listings, reviews). Competitors: LinkedIn, Instagram, WeChat.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"infinite-scroll\",\"type\":\"registry:ui\",\"title\":\"Infinite Scroll\",\"description\":\"IntersectionObserver-based scroll sentinel for loading more content.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"info-row\",\"type\":\"registry:ui\",\"title\":\"Info Row\",\"description\":\"Simple label + value display row with optional icon. Used on detail pages for key-value information: \\\"Temperature: 28°C\\\", \\\"Location: Harare\\\", \\\"Status: Active\\\". Compact single-line layout with icon left, label middle, value right-aligned. Production-proven in mukoko-weather for atmospheric details.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/utils\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"infrastructure-page\",\"type\":\"registry:ui\",\"title\":\"Infrastructure Page\",\"description\":\"Infrastructure monitoring page. Service health grid, deployment history, resource utilization gauges, incident timeline. For Nyuchi Web Services ops. Competitors: Datadog, New Relic.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"inline-edit\",\"type\":\"registry:ui\",\"title\":\"Inline Edit\",\"description\":\"Click-to-edit text field that transforms from display mode to input mode on interaction. Pattern for low-friction editing in admin tables, settings pages, and profile fields. Supports validation, optimistic save, and revert on escape. Audit flagged as missing UX pattern. ALPHA — awaiting frontend implementation.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"input\",\"type\":\"registry:ui\",\"title\":\"Input\",\"description\":\"Displays a form input field.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"input-group\",\"type\":\"registry:ui\",\"title\":\"Input Group\",\"description\":\"Groups input, button, and addon elements together.\",\"categories\":[\"primitives\"],\"dependencies\":[\"class-variance-authority\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/textarea\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"input-otp\",\"type\":\"registry:ui\",\"title\":\"Input OTP\",\"description\":\"Accessible one-time password component with copy paste functionality.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"input-otp\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"invite-link\",\"type\":\"registry:ui\",\"title\":\"Invite Link\",\"description\":\"Shareable invite card with QR code, copyable link, expiry countdown, and usage count. Used for Circle invitations, event invites (Nhimbe), and referral links. Mineral-colored QR code.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/copy-button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"invoice-row\",\"type\":\"registry:ui\",\"title\":\"Invoice Row\",\"description\":\"Invoice line item with date, amount, status badge, and download.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"item\",\"type\":\"registry:ui\",\"title\":\"Item\",\"description\":\"A flexible item component for lists, menus, and settings.\",\"categories\":[\"primitives\"],\"dependencies\":[\"class-variance-authority\",\"radix-ui\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/separator\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"itinerary-timeline\",\"type\":\"registry:ui\",\"title\":\"Itinerary Timeline\",\"description\":\"Multi-leg journey planner view showing sequential stops with transport modes, transfer points, and timing. Used in Transport for commute planning and in Planner for multi-event day views.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/timeline\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/separator\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"job-board-page\",\"type\":\"registry:ui\",\"title\":\"Job Board Page\",\"description\":\"Job board/listings page. Search, filters (location, type, salary, industry), list of job cards. Competitors: LinkedIn, Indeed, Glassdoor.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"json-viewer\",\"type\":\"registry:ui\",\"title\":\"Json Viewer\",\"description\":\"Collapsible JSON tree view with syntax coloring and type indicators.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"kanban-board\",\"type\":\"registry:ui\",\"title\":\"Kanban Board\",\"description\":\"Column-based board for organizing items by status with drag indicators.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"kbd\",\"type\":\"registry:ui\",\"title\":\"Kbd\",\"description\":\"Displays a keyboard shortcut or key combination.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"kpi-card\",\"type\":\"registry:ui\",\"title\":\"Kpi Card\",\"description\":\"Key Performance Indicator card. Displays a metric label, large value, optional change percentage with trend direction. Extracted from analytics-dashboard-page, console-dashboard-page, and wallet-page where the same pattern was repeated inline. Brand-agnostic — uses semantic CSS vars only.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"label\",\"type\":\"registry:ui\",\"title\":\"Label\",\"description\":\"Renders an accessible label associated with controls.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"language-switcher\",\"type\":\"registry:ui\",\"title\":\"Language Switcher\",\"description\":\"In-app language selector with locale display. Prioritizes the 16 Zimbabwean official languages (Shona, Ndebele first), then African languages, then global. Shows current language with flag/code indicator. Critical for a platform serving 54 countries and 2000+ languages.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/select\",\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"lazy-section\",\"type\":\"registry:ui\",\"title\":\"Lazy Section\",\"description\":\"TikTok-style progressive lazy section with sequential mount queue and bidirectional visibility. Only ONE section mounts at a time via a global FIFO queue, preventing DOM/Canvas surges that OOM mobile browsers. Sections unmount when scrolled far off-screen (1500px margin) to cap peak memory. Adaptive timing: 150ms settle on mobile, 50ms on desktop. Production-proven in mukoko-weather with 7 Chart.js sections. The registry's most critical performance primitive.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/use-mobile\",\"https://api.mzizi.dev/v1/ui/observability\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"learning-page\",\"type\":\"registry:ui\",\"title\":\"Learning Page\",\"description\":\"Learning/education page. Course content, lesson progress, quiz area, notes. Competitors: Duolingo, Coursera, Khan Academy.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"lightbox\",\"type\":\"registry:ui\",\"title\":\"Lightbox\",\"description\":\"Full-screen image viewer with gallery navigation.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"location-picker\",\"type\":\"registry:ui\",\"title\":\"Location Picker\",\"description\":\"Interactive map-based location selection form control. User taps/clicks map to set coordinates, with search input for address lookup. Returns lat/lng and formatted address. Used in event creation (Nhimbe), business listing (BushTrade/Places), and any form that needs a geographic input.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/map-view\",\"https://api.mzizi.dev/v1/ui/input\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"location-share\",\"type\":\"registry:ui\",\"title\":\"Location Share\",\"description\":\"Live/static location sharing card in chat. Shows a mini map preview with pin, address, and share duration (for live). Used in Campfire for meeting coordination, Transport for pickup points, and Places for recommendations.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/map-view\",\"https://api.mzizi.dev/v1/ui/card\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"log-viewer\",\"type\":\"registry:ui\",\"title\":\"Log Viewer\",\"description\":\"Scrollable filterable log output with severity coloring and auto-scroll.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"login-01\",\"type\":\"registry:block\",\"title\":\"Login 01\",\"description\":\"Centered card login with email/password and mineral accent stripe.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"login-02\",\"type\":\"registry:block\",\"title\":\"Login 02\",\"description\":\"Split layout login with brand image left, form right.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"login-03\",\"type\":\"registry:block\",\"title\":\"Login 03\",\"description\":\"Social login buttons (Google, GitHub) plus email/password form.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"login-04\",\"type\":\"registry:block\",\"title\":\"Login 04\",\"description\":\"OTP/magic link style login with code input.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"login-05\",\"type\":\"registry:block\",\"title\":\"Login 05\",\"description\":\"Two-column login with brand showcase and mineral colors.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"logs-page\",\"type\":\"registry:ui\",\"title\":\"Logs Page\",\"description\":\"Logs viewer page. Real-time log stream, severity filters, search, time range, structured log expansion. For Nyuchi Web Services debugging and compliance audit trails.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"maintenance-page\",\"type\":\"registry:ui\",\"title\":\"Maintenance Page\",\"description\":\"Full-page maintenance mode display with estimated return time.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"map-card\",\"type\":\"registry:ui\",\"title\":\"Map Card\",\"description\":\"Floating preview card that appears on map marker interaction. Shows a compact listing-card inside the map context with image, title, category, and action. Bridges the map view to the listing detail flow.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/map-view\",\"https://api.mzizi.dev/v1/ui/card\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"map-cluster\",\"type\":\"registry:ui\",\"title\":\"Map Cluster\",\"description\":\"Grouped marker display for high-density map areas. Shows count badge with mineral accent and expands on interaction. Used when multiple listings/places overlap at the current zoom level.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/map-view\",\"https://api.mzizi.dev/v1/ui/map-marker\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"map-marker\",\"type\":\"registry:ui\",\"title\":\"Map Marker\",\"description\":\"Custom branded map pin with mineral-colored variants and verification tier indicators. Supports default, verified, featured, and cluster states. The pin shape uses the Nyuchi pill radius for consistency. Maps to places.places and events.event tables.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/map-view\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"map-page\",\"type\":\"registry:ui\",\"title\":\"Map Page\",\"description\":\"Map/navigation page. Full-screen map with search, pin details, route overlay, bottom sheet for location info. Competitors: Google Maps, Uber, Bolt.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"map-route\",\"type\":\"registry:ui\",\"title\":\"Map Route\",\"description\":\"Route visualization overlay for map with waypoints, distance, and estimated time. Supports driving, walking, transit, and cycling modes. Used by Transport mini-app for commute planning and route display.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/map-view\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"map-view\",\"type\":\"registry:ui\",\"title\":\"Map View\",\"description\":\"Embeddable map container with design system tokens, mineral-colored controls, and branded attribution. Wraps Mapbox GL JS with Nyuchi theme integration. Supports tile layers, zoom controls, geolocation, and fullscreen toggle. The foundational map primitive for Places, Transport, BushTrade, Nhimbe, and any app that shows a geographic context.\",\"categories\":[\"primitives\"],\"dependencies\":[\"mapbox-gl\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"markdown-renderer\",\"type\":\"registry:ui\",\"title\":\"Markdown Renderer\",\"description\":\"Themed markdown-to-HTML renderer with design system typography and colors.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"marketplace-page\",\"type\":\"registry:ui\",\"title\":\"Marketplace Page\",\"description\":\"Marketplace/storefront browsing page. Search, category filters, grid/list toggle, product cards. Competitors: Jumia, Amazon, Alibaba, Facebook Marketplace.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"masonry-grid\",\"type\":\"registry:ui\",\"title\":\"Masonry Grid\",\"description\":\"CSS columns-based variable-height grid layout.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"media-filter-strip\",\"type\":\"registry:ui\",\"title\":\"Media Filter Strip\",\"description\":\"Horizontal scrollable filter/effect picker — the TikTok/Instagram paradigm. Shows filter previews as circular thumbnails with names. Applies visual effects to camera preview or captured media. Used in Bytes creation flow.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/scroll-area\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"media-player-page\",\"type\":\"registry:ui\",\"title\":\"Media Player Page\",\"description\":\"Full-screen media player page. Video/audio player with controls, comments, related content. Competitors: YouTube, TikTok, Netflix, Spotify.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"medication-reminder\",\"type\":\"registry:ui\",\"title\":\"Medication Reminder\",\"description\":\"Medication schedule card with drug name, dosage, timing intervals, adherence tracking, and snooze/take actions. Maps to health.medication_reminder table. Stores reminders in the sovereign Digital Twin pod.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/progress\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"mega-menu\",\"type\":\"registry:ui\",\"title\":\"Mega Menu\",\"description\":\"Full-width flyout navigation with columns of links grouped by section.\",\"categories\":[\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/popover\",\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"member-list\",\"type\":\"registry:ui\",\"title\":\"Member List\",\"description\":\"Scrollable member directory with role badges (admin/moderator/member), online status dots, join date, and search filtering. Used in Circle member management and event attendee lists. Maps to circles.circle_membership table.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/search-bar\",\"https://api.mzizi.dev/v1/ui/virtual-list\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"member-row\",\"type\":\"registry:ui\",\"title\":\"Member Row\",\"description\":\"User/member display row with avatar, name, email/subtitle, role badge, and status indicator. Extracted from team-management-page and chat-page. Brand-agnostic primitive.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"mention-input\",\"type\":\"registry:ui\",\"title\":\"Mention Input\",\"description\":\"Text input with @mention autocomplete for users.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"menubar\",\"type\":\"registry:ui\",\"title\":\"Menubar\",\"description\":\"A visually persistent menu common in desktop applications.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"message-thread\",\"type\":\"registry:ui\",\"title\":\"Message Thread\",\"description\":\"Nested reply thread with indentation and collapse/expand.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"mfa-setup\",\"type\":\"registry:ui\",\"title\":\"Mfa Setup\",\"description\":\"MFA enrollment card with QR code and verification step.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"mobile-money-selector\",\"type\":\"registry:ui\",\"title\":\"Mobile Money Selector\",\"description\":\"Payment method picker for African mobile money services — EcoCash, MTN MoMo, Airtel Money, M-Pesa, and Innbucks. Shows provider logo, phone number input, and USSD code reference. This is HOW Africa pays — the primary payment primitive for the continent.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/radio-group\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"moderation-queue-item\",\"type\":\"registry:ui\",\"title\":\"Moderation Queue Item\",\"description\":\"Content review item showing flagged content preview, report reason, reporter info, and approve/reject/escalate action buttons. Maps to system.content_moderation. Used in the Nyuchi Console moderation dashboard.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/button-group\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/avatar\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"music-selector\",\"type\":\"registry:ui\",\"title\":\"Music Selector\",\"description\":\"Audio track browser and selector for video creation. Search, preview, and attach music tracks to Bytes content. Shows track name, artist, duration, and waveform preview. Used in Bytes post-capture editing.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/search-bar\",\"https://api.mzizi.dev/v1/ui/audio-waveform\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"mzizi-a11y\",\"type\":\"registry:lib\",\"title\":\"mzizi a11y\",\"description\":\"Accessibility infrastructure for the Nyuchi ecosystem. Exports FocusTrap (modal/overlay focus containment), LiveRegion (screen reader announcements for dynamic content), SkipNav (keyboard skip-to-content link), VisuallyHidden (screen-reader-only text), and a11y token definitions (focus ring styles, minimum touch targets, contrast-safe mineral pairings). Also exports useAnnounce hook for imperatively announcing trust score changes, notification arrivals, loading completions, and other dynamic updates to screen readers. Target: Rust compiled to WebAssembly. wasm-bindgen exposes the interface to SvelteKit. One Rust codebase compiles to both WASM (browser) and native binary (server).\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-tokens\"],\"node\":1,\"nodeLabel\":\"tokens\",\"owner\":\"mzizi\",\"collection\":\"styling-libs\"},{\"name\":\"mzizi-a11y-audit\",\"type\":\"registry:lib\",\"title\":\"mzizi a11y Audit\",\"description\":\"Runtime accessibility compliance checker. Scans rendered DOM for WCAG violations: missing ARIA labels, insufficient contrast, missing alt text, broken focus order, touch target sizes. Can run on-demand or continuously in development. Competitors: Lighthouse, axe-core.\",\"categories\":[\"observability\",\"assurance\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":8,\"nodeLabel\":\"assurance\",\"owner\":\"mzizi\",\"collection\":\"observability\"},{\"name\":\"mzizi-abr-content\",\"type\":\"registry:ui\",\"title\":\"mzizi Abr Content\",\"description\":\"Adaptive Bitrate Content — adjusts content quality based on network conditions. Serves lower-resolution images, compressed text, and deferred media on slow connections. Based on TikTok ABR streaming but applied to all content types, not just video. Critical for Africa where 2G/3G is common.\",\"categories\":[\"resilience\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":5,\"nodeLabel\":\"resilience\",\"owner\":\"mzizi\",\"collection\":\"resilience\"},{\"name\":\"mzizi-action-sheet\",\"type\":\"registry:ui\",\"title\":\"mzizi Action Sheet\",\"description\":\"Universal branded bottom action sheet for contextual actions on any content across the ecosystem. Share, save, report, copy link, block, follow — the standard set of actions available on listings, posts, profiles, and messages. Renders as a bottom sheet on mobile with mineral accent on destructive/primary actions. Composes sheet and share-dialog primitives.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/sheet\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-ai-context\",\"type\":\"registry:lib\",\"title\":\"mzizi AI Context\",\"description\":\"AI context provider for N10. Generates context windows for AI assistants (Claude, Cursor, Copilot, Windsurf) with current ecosystem model, node architecture, and coding rules. No hardcoded counts — always accepts live values from get_system_counts(). Used by the MCP server and IDE integrations.\",\"categories\":[\"documentation-engine\",\"documentation\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":10,\"nodeLabel\":\"documentation\",\"owner\":\"nyuchi\",\"collection\":\"documentation-engine\"},{\"name\":\"mzizi-alert-banner\",\"type\":\"registry:ui\",\"title\":\"mzizi Alert Banner\",\"description\":\"Universal branded alert banner with mineral-coded severity levels. Used across all ecosystem apps for weather alerts, system notifications, security warnings, trust advisories, and any time-sensitive information. Severity maps to minerals: watch=cobalt, moderate=terracotta, severe=gold. Renders as a prominent banner with dismiss, detail action, and safety instructions.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/alert\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-alert-engine\",\"type\":\"registry:lib\",\"title\":\"mzizi Alert Engine\",\"description\":\"SLO/SLA tracking and threshold-based alerting with escalation. Defines budgets (error budget, latency budget), monitors them, and fires alerts when thresholds are breached. Supports severity escalation: warn → page → incident. Competitors: PagerDuty, Grafana Alerting.\",\"categories\":[\"observability\",\"assurance\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":8,\"nodeLabel\":\"assurance\",\"owner\":\"mzizi\",\"collection\":\"observability\"},{\"name\":\"mzizi-api-probe\",\"type\":\"registry:lib\",\"title\":\"mzizi API Probe\",\"description\":\"API endpoint health checker. Pings all Mzizi registry API endpoints (from component_backlinks) and reports status codes, latency, and error rates. Feeds into mzizi-platform-health. Uses the backlinks system built in v4.8.0.\",\"categories\":[\"observability\",\"assurance\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":8,\"nodeLabel\":\"assurance\",\"owner\":\"mzizi\",\"collection\":\"observability\"},{\"name\":\"mzizi-application-tracker\",\"type\":\"registry:ui\",\"title\":\"mzizi Application Tracker\",\"description\":\"Branded job application status timeline showing application stages (applied, reviewed, interview, offer, rejected) with timestamps and employer feedback. Gold mineral accent. Used in Jobs dashboard.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-article-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Article Card\",\"description\":\"News article card extending mzizi-listing-card with factcheck badge, source attribution, journalist byline, and read time. Maps to news.news_article (67 columns) and news.feed_source. Used in Mukoko News feeds, Pulse aggregation, and content discovery.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-listing-card\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/mzizi-verified-badge\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-auth-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Auth Card\",\"description\":\"Inline sign-in and registration rendered inside an AI surface (Claude, Claude Code, any MCP client) — never a browser tab. Drives the MCP inline-auth handoff (OAuth 2.1, Dynamic Client Registration, elicitation) and takes its accent from --brand-accent, so it carries the host brand's mineral.\",\"categories\":[\"agentic-components\",\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-harness\",\"https://api.mzizi.dev/v1/ui/utils\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"agentic-components\"},{\"name\":\"mzizi-auth-layout\",\"type\":\"registry:ui\",\"title\":\"mzizi Auth Layout\",\"description\":\"Default auth screen layout that services all login, signup, and onboarding flows. Provides the branded container: centered card with mineral gradient background, Mukoko logo, language selector, and legal links. Individual auth flows (login-01..05, signup-01..05) render inside this layout as children.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"mzizi-avatar-stack\",\"type\":\"registry:ui\",\"title\":\"mzizi Avatar Stack\",\"description\":\"Overlapping +N social-proof avatar stack — the going/attendee cue. Ring-separated avatars overlap with negative margin, each an image or an initials fallback, showing up to `max` before a +N overflow bubble, with an optional trailing <total> <label> in 13px muted. Purely presentational and server-safe (no harness, no client directive) so it renders inside React Server Components. The group carries an accessible summary label (e.g. \\\"128 going\\\") while the decorative avatars are aria-hidden. sm / md sizes.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/avatar\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-badge-display\",\"type\":\"registry:ui\",\"title\":\"mzizi Badge Display\",\"description\":\"Ubuntu achievement badge showcase. Displays earned badges in a grid or inline strip with mineral-colored badge icons, earned dates, and rarity indicators. Maps to ubuntu.badges and ubuntu.user_badges tables. Used on profile pages, leaderboards, and achievement notifications.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/tooltip\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-balance-display\",\"type\":\"registry:ui\",\"title\":\"mzizi Balance Display\",\"description\":\"Token balance display card for the Mukoko wallet. Shows primary balance with MIT currency, secondary fiat conversion, and quick action buttons (Send, Receive, Swap). Maps to wallet.balance table. Used at the top of wallet views and in mini wallet widgets.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-base\",\"type\":\"registry:base\",\"title\":\"mzizi Base\",\"description\":\"The whole Mzizi design system as one installable foundation. `shadcn init` writes the project configuration — new-york style, lucide icons, neutral base, the @/ aliases every component imports through — installs the runtime packages the registry depends on, and pulls N1's 324 design tokens via mzizi-tokens. Start a project with this and every one of the other 573 components installs into a project already shaped to receive it.\",\"categories\":[\"styling-libs\"],\"dependencies\":[\"class-variance-authority\",\"clsx\",\"tailwind-merge\",\"lucide-react\",\"tw-animate-css\",\"radix-ui\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-tokens\",\"https://api.mzizi.dev/v1/ui/utils\"],\"node\":1,\"nodeLabel\":\"tokens\",\"owner\":\"mzizi\",\"collection\":\"styling-libs\"},{\"name\":\"mzizi-bottom-nav\",\"type\":\"registry:ui\",\"title\":\"mzizi Bottom Nav\",\"description\":\"Mobile-only bottom navigation bar for Nyuchi ecosystem apps. Supports a center FAB (floating action button) — a raised button in the app mineral accent colour with a glow shadow. The center FAB is the primary creation entry point, making the \\\"create\\\" action instantly recognizable across all apps.\",\"categories\":[\"shell\"],\"dependencies\":[\"next\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":7,\"nodeLabel\":\"shell\",\"owner\":\"nyuchi\",\"collection\":\"shell\"},{\"name\":\"mzizi-calendar\",\"type\":\"registry:ui\",\"title\":\"mzizi Calendar\",\"description\":\"Brand calendar component wrapping react-day-picker with Mukoko event dot indicators, mineral-colored day highlights, and integrated agenda view for the selected day. Used by nhimbe (events), planner, and any Mukoko app that shows date-anchored content. The event dots are the key differentiator — small mineral-colored circles beneath dates that have associated content.\",\"categories\":[\"brand\"],\"dependencies\":[\"react-day-picker\",\"date-fns\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/calendar\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-chain-gate\",\"type\":\"registry:ui\",\"title\":\"mzizi Chain Gate\",\"description\":\"Blockchain network verification gate. Checks which chain the user is connected to before rendering chain-dependent features. Supports Nyuchi Network (Cosmos SDK), Polygon, and Ethereum. Shows branded switch-network CTA with chain logos.\",\"categories\":[\"safety\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":4,\"nodeLabel\":\"safety\",\"owner\":\"mzizi\",\"collection\":\"safety\"},{\"name\":\"mzizi-chain-resilience\",\"type\":\"registry:ui\",\"title\":\"mzizi Chain Resilience\",\"description\":\"Blockchain RPC failure handler. Handles chain disconnections, RPC timeouts, reorganizations, and wallet disconnections without crashing the UI. Auto-retries with exponential backoff. Shows branded chain status with recovery actions.\",\"categories\":[\"resilience\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":5,\"nodeLabel\":\"resilience\",\"owner\":\"mzizi\",\"collection\":\"resilience\"},{\"name\":\"mzizi-changelog-renderer\",\"type\":\"registry:ui\",\"title\":\"mzizi Changelog Renderer\",\"description\":\"Changelog renderer for N10. Reads from the public.changelog table and renders a visual timeline of releases with affected ecosystem nodes (colour-coded by axis), components added/modified/deprecated, and version labels.\",\"categories\":[\"documentation-engine\",\"documentation\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":10,\"nodeLabel\":\"documentation\",\"owner\":\"nyuchi\",\"collection\":\"documentation-engine\"},{\"name\":\"mzizi-chaos\",\"type\":\"registry:lib\",\"title\":\"mzizi Chaos\",\"description\":\"Reactive chaos diagnostics — N8 Assurance (Z-axis/depth). Runs through the entire 3D architecture, able to inject failures at any component on any horizontal layer, through any vertical spine. Two modes: (1) Injection — random error/latency at configurable probability per layer intersection. (2) Reactive — when a real error is caught anywhere in the 3D space, probe adjacent systems for blast radius. The depth dimension that proves X and Y axes work.\",\"categories\":[\"observability\",\"assurance\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":8,\"nodeLabel\":\"assurance\",\"owner\":\"mzizi\",\"collection\":\"observability\"},{\"name\":\"mzizi-command-palette\",\"type\":\"registry:ui\",\"title\":\"mzizi Command Palette\",\"description\":\"Global command palette (Cmd+K / Ctrl+K). Search across mini-apps, navigate to pages, run actions. Competitors: Vercel, Linear, Raycast. Overlay with fuzzy search, recent items, and categorized results.\",\"categories\":[\"shell\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":7,\"nodeLabel\":\"shell\",\"owner\":\"nyuchi\",\"collection\":\"shell\"},{\"name\":\"mzizi-commute-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Commute Card\",\"description\":\"Branded saved commute card showing a recurring route with estimated time, mode, and next departure. Gold mineral accent. Used in Transport home screen for quick access to daily commutes and in Planner as part of the daily schedule view. Renders inside MziziListView feeds.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-conformity-check\",\"type\":\"registry:lib\",\"title\":\"mzizi Conformity Check\",\"description\":\"Conformity monkey — verifies deployed components match the design registry. Scans the DOM for data-slot/data-portal attributes and cross-references with the component database. Flags: unregistered components, outdated versions, missing backlinks, components using deprecated patterns. Inspired by Netflix Conformity Monkey.\",\"categories\":[\"observability\",\"assurance\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":8,\"nodeLabel\":\"assurance\",\"owner\":\"mzizi\",\"collection\":\"observability\"},{\"name\":\"mzizi-connectivity-bar\",\"type\":\"registry:ui\",\"title\":\"mzizi Connectivity Bar\",\"description\":\"Network connectivity status bar. Shows connection state: online, syncing, cached, offline. Auto-hides when online. Uses L1 connection tokens and L5 offline-banner pattern. Placed at top of app by root layout.\",\"categories\":[\"shell\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":7,\"nodeLabel\":\"shell\",\"owner\":\"nyuchi\",\"collection\":\"shell\"},{\"name\":\"mzizi-content-composer\",\"type\":\"registry:ui\",\"title\":\"mzizi Content Composer\",\"description\":\"Universal freeform content creation component — the branded way to compose posts, updates, stories, and messages across the ecosystem. Combines text input, media attachment, mention tagging, and mineral-accented submit button. Used in Circles (posts), Pulse (updates), Campfire (messages), Novels (chapter drafts), and anywhere users create unstructured content. Distinct from mzizi-create-listing which handles structured form-based creation.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/textarea\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-content-gate\",\"type\":\"registry:ui\",\"title\":\"mzizi Content Gate\",\"description\":\"Content access gate with age verification, location restrictions, and content sensitivity filters. Renders children when all checks pass. Shows a branded explanation with the specific restriction reason when blocked. Supports multiple gate types that can be composed.\",\"categories\":[\"safety\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-harness\",\"https://api.mzizi.dev/v1/ui/utils\"],\"node\":4,\"nodeLabel\":\"safety\",\"owner\":\"mzizi\",\"collection\":\"safety\"},{\"name\":\"mzizi-conversation-row\",\"type\":\"registry:ui\",\"title\":\"mzizi Conversation Row\",\"description\":\"Chat conversation list row for Campfire messaging. Shows avatar, conversation name, last message preview, timestamp, unread count badge, and online status dot. Maps to campfire.conversation and campfire.participant tables. Used in the main chat list view.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-cover-header\",\"type\":\"registry:ui\",\"title\":\"mzizi Cover Header\",\"description\":\"Cover image header with overlapping avatar or logo. Used by individual and org profile pages. Branded with mineral accents and verification badge slot. Extracted from individual-profile-page and org-profile-page.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-cover-wash-header\",\"type\":\"registry:ui\",\"title\":\"mzizi Cover Wash Header\",\"description\":\"Event/detail header composite that derives the whole page tint and CTA colour from its cover — the 4.2.0 cover-wash signature. A full-bleed image or gradient cover with a legibility scrim carries an overlaid title, optional kicker/subtitle, a small inline meta row (date · location · host) and a CTA slot (children). From an accent (or mineral) prop it emits --event-primary and --wash as inline custom properties on the root, seeding the wash context that every descendant — and the rest of the detail page — inherits. Accent defaults to --brand-accent so each app swaps its own mineral; harness-wired for reduced-motion entry and observability.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-create-listing\",\"type\":\"registry:ui\",\"title\":\"mzizi Create Listing\",\"description\":\"Universal create/edit form layout for all Mukoko content types — events, products, news, bush trade listings, directories. Provides the standardized brand creation flow: cover theme picker, grouped form sections in cards, toggle/dropdown rows, description editor, and sticky publish CTA. Every \\\"Create\\\" or \\\"Edit\\\" screen across the super app uses this composition.\",\"categories\":[\"brand\"],\"dependencies\":[\"class-variance-authority\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/switch\",\"https://api.mzizi.dev/v1/ui/select\",\"https://api.mzizi.dev/v1/ui/textarea\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/separator\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-create-page\",\"type\":\"registry:ui\",\"title\":\"mzizi Create Page\",\"description\":\"Standard creation flow page orchestrator. Header with cancel/title/submit, stepped or single-form layout, cover theme picker slot, section cards, and sticky submit CTA. Every creation screen uses this: create event, create listing, create post, write chapter, post video caption. The developer provides form sections as children and handles submission.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-harness\",\"https://api.mzizi.dev/v1/ui/mzizi-create-listing\",\"https://api.mzizi.dev/v1/ui/stepper\"],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"mzizi-credential-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Credential Card\",\"description\":\"Professional credential display card showing qualification name, issuing body, status (active/expired/revoked/suspended/pending), expiry date, and verification tier. Maps to identity.credential (35 columns) and system.regulatory_body. Used on profile pages, professional directory, and credential verification screens.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/mzizi-verified-badge\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-crypto-fallback\",\"type\":\"registry:ui\",\"title\":\"mzizi Crypto Fallback\",\"description\":\"Post-quantum cryptography fallback handler. When PQC verification fails (library not loaded, algorithm not supported on device), falls back to classical verification with a \\\"reduced security\\\" visual indicator. Based on the QuantZen overlay pattern — adds quantum-safe layer without breaking existing UX.\",\"categories\":[\"resilience\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":5,\"nodeLabel\":\"resilience\",\"owner\":\"mzizi\",\"collection\":\"resilience\"},{\"name\":\"mzizi-crypto-gate\",\"type\":\"registry:ui\",\"title\":\"mzizi Crypto Gate\",\"description\":\"Quantum-safe cryptographic verification gate. Validates signature strength — in quantum-ready mode requires PQC dual-signature (CRYSTALS-Dilithium + classical ECDSA). Degrades gracefully showing \\\"reduced security\\\" indicator when only classical signatures are available. Based on the QuantZen dual-signature pattern.\",\"categories\":[\"safety\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":4,\"nodeLabel\":\"safety\",\"owner\":\"mzizi\",\"collection\":\"safety\"},{\"name\":\"mzizi-dashboard-layout\",\"type\":\"registry:ui\",\"title\":\"mzizi Dashboard Layout\",\"description\":\"Full app shell composing MziziHeader, MziziSidebar, and MziziBottomNav into a responsive dashboard layout.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-sidebar\",\"https://api.mzizi.dev/v1/ui/mzizi-header\",\"https://api.mzizi.dev/v1/ui/mzizi-bottom-nav\",\"https://api.mzizi.dev/v1/ui/sidebar\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"mzizi-data\",\"type\":\"registry:lib\",\"title\":\"mzizi Data\",\"description\":\"Data fetching and state management bridge between the 7-layer architecture and the UI. Exports useMziziQuery hook (local-first fetch: try SQLite/IndexedDB → edge D1 → cloud Supabase, with automatic background sync), MziziListView (declarative feed composition: listing-card + infinite scroll + pull-to-refresh + empty state + skeleton + error card), MziziSearchView (search input + filter bar + results + recent searches), and optimistic update utilities. Every data-driven screen in every Nyuchi app uses these patterns instead of raw fetch calls. Target: Rust compiled to WebAssembly. wasm-bindgen exposes the interface to SvelteKit. One Rust codebase compiles to both WASM (browser) and native binary (server).\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-listing-card\",\"https://api.mzizi.dev/v1/ui/mzizi-skeleton-set\",\"https://api.mzizi.dev/v1/ui/mzizi-error-set\",\"https://api.mzizi.dev/v1/ui/mzizi-a11y\"],\"node\":1,\"nodeLabel\":\"tokens\",\"owner\":\"mzizi\",\"collection\":\"styling-libs\"},{\"name\":\"mzizi-deep-link-handler\",\"type\":\"registry:ui\",\"title\":\"mzizi Deep Link Handler\",\"description\":\"Universal link and deep link routing handler. Maps external URLs, push notification taps, and share links to in-app routes. Handles: mukoko.com/{path}, mini-app deep links, push notification payloads, NFC/QR scan results.\",\"categories\":[\"shell\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":7,\"nodeLabel\":\"shell\",\"owner\":\"nyuchi\",\"collection\":\"shell\"},{\"name\":\"mzizi-degradation-chain\",\"type\":\"registry:ui\",\"title\":\"mzizi Degradation Chain\",\"description\":\"Configurable degradation fallback chain: personalized → cached → trending → default → static. Each level renders when the previous fails. Based on Netflix graceful degradation — the \\\"bookmark service\\\" pattern applied across all mini-apps.\",\"categories\":[\"resilience\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":5,\"nodeLabel\":\"resilience\",\"owner\":\"mzizi\",\"collection\":\"resilience\"},{\"name\":\"mzizi-detail-layout\",\"type\":\"registry:ui\",\"title\":\"mzizi Detail Layout\",\"description\":\"Shared detail page layout for all content types across the Nyuchi ecosystem — events, articles, products, bush trade listings, places. Supports a hero gradient variant with floating back/like/share action buttons, mineral-colored category badges, and verified badge display for the host/author. The detail-layout is the brand-standard way to present any single piece of content at full depth.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/separator\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/mzizi-verified-badge\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"mzizi-detail-page\",\"type\":\"registry:ui\",\"title\":\"mzizi Detail Page\",\"description\":\"Standard detail page orchestrator. Hero section with cover image, back/share/like actions, content body, related items section, and sticky bottom CTA. Every content detail screen uses this: event detail, article detail, product detail, place detail, job detail, profile detail, novel detail. The developer provides the hero content, body sections, and action handlers.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-harness\",\"https://api.mzizi.dev/v1/ui/mzizi-detail-layout\",\"https://api.mzizi.dev/v1/ui/mzizi-share-card\",\"https://api.mzizi.dev/v1/ui/mzizi-action-sheet\"],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"mzizi-did-gate\",\"type\":\"registry:ui\",\"title\":\"mzizi Did Gate\",\"description\":\"Decentralized Identifier (DID) credential gate. Verifies W3C Verifiable Credentials from the Nyuchi Honeycomb pod. Works offline by checking the local credential store first, then validates against the server when connectivity returns. Shows \\\"locally verified\\\" vs \\\"server confirmed\\\" status.\",\"categories\":[\"safety\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":4,\"nodeLabel\":\"safety\",\"owner\":\"mzizi\",\"collection\":\"safety\"},{\"name\":\"mzizi-docs-api\",\"type\":\"registry:lib\",\"title\":\"mzizi Docs API\",\"description\":\"Documentation read API for N10. Runs as a Supabase Deno edge function (`Deno.serve`, `jsr:@supabase/supabase-js@2`) — NOT a Cloudflare Worker and not Rust/WASM, which is what this description claimed while the file said otherwise. Serves documentation pages, AI instructions, architecture nodes and changelog entries over PostgREST: /docs, /ai-instructions, /architecture, /changelog, /counts. Public read, no auth. Deno-runtime source, so it is excluded from tsconfig and is not installable into a React app via the shadcn CLI.\",\"categories\":[\"documentation-engine\",\"documentation\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":10,\"nodeLabel\":\"documentation\",\"owner\":\"nyuchi\",\"collection\":\"documentation-engine\"},{\"name\":\"mzizi-docs-engine\",\"type\":\"registry:ui\",\"title\":\"mzizi Docs Engine\",\"description\":\"Documentation rendering engine for N10. Full-screen docs portal with sidebar navigation, search (title + description + keywords), MDX-delegate content rendering, related ecosystem node badges, and keyboard navigation. Reads from documentation_pages via mzizi-docs-api.\",\"categories\":[\"documentation-engine\",\"documentation\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":10,\"nodeLabel\":\"documentation\",\"owner\":\"nyuchi\",\"collection\":\"documentation-engine\"},{\"name\":\"mzizi-dx\",\"type\":\"registry:lib\",\"title\":\"mzizi DX\",\"description\":\"Developer experience infrastructure for the Nyuchi Design System. Exports component status definitions (alpha/beta/stable/deprecated with visual indicators), component documentation schema (usage guidelines, do/dont examples, accessibility notes, keyboard interactions, screen reader behavior stored in component_docs table), contribution guidelines (how to propose, build, review, and ship new brand components), migration utilities (deprecation warnings, codemod helpers), and usage analytics types (which components are used, by which apps, how frequently). Also exports a ComponentPlayground wrapper for interactive component previews. Target: Rust compiled to WebAssembly. wasm-bindgen exposes the interface to SvelteKit. One Rust codebase compiles to both WASM (browser) and native binary (server).\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-tokens\"],\"node\":1,\"nodeLabel\":\"tokens\",\"owner\":\"mzizi\",\"collection\":\"styling-libs\"},{\"name\":\"mzizi-empty-screen\",\"type\":\"registry:ui\",\"title\":\"mzizi Empty Screen\",\"description\":\"Default empty state screen for pages with no content yet. Used across mini-apps when a feed, list, or section has zero items. Branded illustration placeholder, message, and optional CTA.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"mzizi-empty-state\",\"type\":\"registry:ui\",\"title\":\"mzizi Empty State\",\"description\":\"Universal branded empty state with dynamic mineral accent, contextual illustration placeholder, title, description, and optional action CTA. Every screen across the ecosystem uses this when there is no content to display — \\\"No events yet\\\", \\\"Your wallet is empty\\\", \\\"No messages\\\", \\\"Start your first lesson\\\". The empty state guides users toward the creation action for that domain.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/empty\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-error-screen\",\"type\":\"registry:ui\",\"title\":\"mzizi Error Screen\",\"description\":\"Default full-page error screen for 404, 500, 503, and custom errors. Used by the App Router error.tsx and not-found.tsx pages. Branded with mineral gradient, retry action, and navigation back to safety.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"mzizi-error-set\",\"type\":\"registry:ui\",\"title\":\"mzizi Error Set\",\"description\":\"Brand error and resilience states for the Nyuchi ecosystem. Exports ErrorCard (inline error within feeds), NotFound (brand 404 page), OfflineBanner (local-first connection status indicator), SectionFallback (section-level error with retry). NOTE: PermissionGate is also currently exported here but architecturally belongs at Layer 4 (Safety & Trust) and should be extracted into a separate component in a future refactor. Each state uses mineral accents, brand typography, and matches the Nyuchi identity system.\",\"categories\":[\"resilience\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/mzizi-verified-badge\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":5,\"nodeLabel\":\"resilience\",\"owner\":\"mzizi\",\"collection\":\"resilience\"},{\"name\":\"mzizi-error-tracker\",\"type\":\"registry:lib\",\"title\":\"mzizi Error Tracker\",\"description\":\"Structured error collection, deduplication, and blast radius analysis. Catches errors from L5 error boundaries, enriches them with component backlinks (data-portal), calculates which mini-apps and layers are affected. Competitors: Sentry, Datadog Error Tracking.\",\"categories\":[\"observability\",\"assurance\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":8,\"nodeLabel\":\"assurance\",\"owner\":\"mzizi\",\"collection\":\"observability\"},{\"name\":\"mzizi-escalation-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Escalation Card\",\"description\":\"The UCP Embedded Checkout Protocol \\\"requires escalation\\\" mini-card: when an agentic flow needs a human choice, the agent pauses and renders this inline, then resumes on selection. Keeps a decision point in the conversation instead of handing off to a browser.\",\"categories\":[\"agentic-components\",\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-harness\",\"https://api.mzizi.dev/v1/ui/utils\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"agentic-components\"},{\"name\":\"mzizi-event-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Event Card\",\"description\":\"DEPRECATED: Use mzizi-ticket-card instead. This was an early pre-brand event card without harness, motion, or ARIA integration.\",\"categories\":[\"brand\"],\"dependencies\":[\"lucide-react\"],\"registryDependencies\":[],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-feature-gate\",\"type\":\"registry:ui\",\"title\":\"mzizi Feature Gate\",\"description\":\"Feature flag gate. Instantly show/hide features based on remote config without deployment. Supports kill switch for instant feature disable. Based on Netflix feature flag pattern + OpenFeature standard. Checks local flag cache first (device-first), then remote config.\",\"categories\":[\"safety\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":4,\"nodeLabel\":\"safety\",\"owner\":\"mzizi\",\"collection\":\"safety\"},{\"name\":\"mzizi-featured-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Featured Card\",\"description\":\"DEPRECATED: Use mzizi-listing-card instead. This was an early pre-brand featured listing without harness, motion, or ARIA integration.\",\"categories\":[\"brand\"],\"dependencies\":[\"class-variance-authority\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/badge\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-feed-page\",\"type\":\"registry:ui\",\"title\":\"mzizi Feed Page\",\"description\":\"Standard feed page orchestrator composing header, search/filter bar, MziziListView infinite scroll feed, pull-to-refresh, empty state, and FAB create button into a complete screen. Every feed screen across every mini-app uses this layout — Pulse home, News feed, Circles timeline, BushTrade listings, Jobs board, Nhimbe events, Places directory. The developer provides the data source, card renderer, and filter configuration. The orchestrator handles layout, loading, errors, and responsive behaviour.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-harness\",\"https://api.mzizi.dev/v1/ui/mzizi-listing-card\",\"https://api.mzizi.dev/v1/ui/mzizi-empty-state\",\"https://api.mzizi.dev/v1/ui/filter-bar\",\"https://api.mzizi.dev/v1/ui/infinite-scroll\",\"https://api.mzizi.dev/v1/ui/pull-to-refresh\",\"https://api.mzizi.dev/v1/ui/mzizi-skeleton-set\"],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"mzizi-footer\",\"type\":\"registry:ui\",\"title\":\"mzizi Footer\",\"description\":\"Standardized footer for all Nyuchi ecosystem apps with mineral color dots.\",\"categories\":[\"shell\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/separator\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":7,\"nodeLabel\":\"shell\",\"owner\":\"nyuchi\",\"collection\":\"shell\"},{\"name\":\"mzizi-forecast-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Forecast Card\",\"description\":\"Branded weather forecast display with cobalt mineral accent. Shows current conditions, temperature, humidity, 5-day outlook, and farming/agriculture advisory for African rural contexts. Mineral-coded severity levels for weather alerts. Used in Weather home and as an embedded widget in Nhimbe event pages and BushTrade logistics.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-fundi\",\"type\":\"registry:lib\",\"title\":\"mzizi fundi\",\"description\":\"Fundi — the self-healing intelligence engine. Swahili for fixer/mechanic/technician. N9 acts on what N8 observes. Built in Rust, deployed as a Cloudflare Worker (workers-rs crate, compiled to WebAssembly). NOT a Cloudflare Worker (Rust/WASM) — Fundi is independent of the database vendor. Reads fundi_issues and observability_events from Supabase via REST API. Classifies failure patterns, deduplicates against open GitHub issues, creates structured remediation tickets. Triggered by Cloudflare Cron Triggers and Cloudflare Queues.\",\"categories\":[\"fundi\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":9,\"nodeLabel\":\"fundi\",\"owner\":\"nyuchi\",\"collection\":\"fundi\"},{\"name\":\"mzizi-fundi-learning\",\"type\":\"registry:lib\",\"title\":\"mzizi fundi Learning\",\"description\":\"Fundi learning system. Tracks healing outcomes to improve future decisions. When an issue is resolved, records what failed, what Fundi suggested, what actually worked, and whether the same pattern recurs. Runs as part of the Fundi Cloudflare Worker — same Rust binary, different handler. Writes learned patterns to fundi_issues via Supabase REST API. Improves classification accuracy over time.\",\"categories\":[\"fundi\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":9,\"nodeLabel\":\"fundi\",\"owner\":\"nyuchi\",\"collection\":\"fundi\"},{\"name\":\"mzizi-fundi-reporter\",\"type\":\"registry:lib\",\"title\":\"mzizi fundi Reporter\",\"description\":\"Bridge from N8 Assurance to N9 Fundi. When N8 components detect failures, the reporter pushes a structured signal to the Cloudflare Queue that triggers Fundi. Signal payload: component name, ecosystem node, error type, severity, diagnostic data. The Queue decouples N8 (detection) from N9 (healing) — N8 never waits for Fundi to respond. Also creates a fundi_issues row in Supabase as the append-only audit trail.\",\"categories\":[\"fundi\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":9,\"nodeLabel\":\"fundi\",\"owner\":\"nyuchi\",\"collection\":\"fundi\"},{\"name\":\"mzizi-gauge-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Gauge Card\",\"description\":\"Branded metric card with radial arc gauge, value display, label, and contextual description. The universal pattern extracted from mukoko-weather MetricCard. Used for UV index, trust scores, completion percentages, health vitals, battery levels, signal strength — any bounded numeric value displayed as a gauge. Composes the arc-gauge primitive with brand styling.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/arc-gauge\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-geo-gate\",\"type\":\"registry:ui\",\"title\":\"mzizi Geo Gate\",\"description\":\"Data sovereignty and jurisdiction gate. Ensures content and features comply with the user's local data protection laws (GDPR, POPIA, Zimbabwe DPRA). Blocks region-restricted content with branded explanation and jurisdiction info.\",\"categories\":[\"safety\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":4,\"nodeLabel\":\"safety\",\"owner\":\"mzizi\",\"collection\":\"safety\"},{\"name\":\"mzizi-grid\",\"type\":\"registry:ui\",\"title\":\"mzizi Grid\",\"description\":\"Responsive grid system with breakpoints: mobile (0-639), tablet (640-1023), desktop (1024-1439), wide (1440+). Supports column count overrides per breakpoint. Used by all page layouts to arrange sections. The architecture doc specifies this as MukokoGrid.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"mzizi-group-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Group Card\",\"description\":\"Universal branded group/community card with dynamic mineral accent based on the parent app. Shows group name, member count, avatar strip, activity indicator, privacy level, topic tags, and join CTA. Used across Circles (communities), Campfire (group chats), BushTrade (seller groups), Nhimbe (event communities), and any app with group-based features.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-harness\",\"type\":\"registry:lib\",\"title\":\"mzizi Harness\",\"description\":\"The Nyuchi component harness — the vertical infrastructure spine (useMziziHarness hook + MziziHarness wrapper) giving N3 brand, N4 safety, and N5 resilience components scoped logging, motion, and an accessible shared live region. Self-contained; adapt the console logger to your app observability layer.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/utils\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-harness-prewire\",\"type\":\"registry:lib\",\"title\":\"mzizi Harness Prewire\",\"description\":\"Pre-wiring node that connects every brand component to the full Nyuchi infrastructure stack. Exports MziziHarness (declarative wrapper providing error boundary + skeleton + observability + motion + a11y) and useMziziHarness hook (imperative access to observability logger, motion config, locale, theme, and health reporting). When a component is wrapped in a harness, it automatically logs render timing, catches errors with branded fallback, applies entry animations, uses the correct focus ring tokens, respects reduced-motion preferences, and reports health to the global monitor. Zero manual configuration required — install the component and it works. Target: Rust compiled to WebAssembly. wasm-bindgen exposes the interface to SvelteKit. One Rust codebase compiles to both WASM (browser) and native binary (server).\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/observability\",\"https://api.mzizi.dev/v1/ui/mzizi-motion\",\"https://api.mzizi.dev/v1/ui/mzizi-a11y\",\"https://api.mzizi.dev/v1/ui/mzizi-tokens\",\"https://api.mzizi.dev/v1/ui/mzizi-theme-provider\",\"https://api.mzizi.dev/v1/ui/mzizi-resilience\"],\"node\":1,\"nodeLabel\":\"tokens\",\"owner\":\"mzizi\",\"collection\":\"styling-libs\"},{\"name\":\"mzizi-header\",\"type\":\"registry:ui\",\"title\":\"mzizi Header\",\"description\":\"Standardized sticky header for all Nyuchi ecosystem apps. Supports desktop nav links and mobile pill action group — a capsule-shaped container with 2–3 icon buttons in the brand accent color (dynamic per mini-app). The pill group is the primary brand identity marker in the header.\",\"categories\":[\"shell\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/sidebar\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":7,\"nodeLabel\":\"shell\",\"owner\":\"nyuchi\",\"collection\":\"shell\"},{\"name\":\"mzizi-health-dashboard\",\"type\":\"registry:ui\",\"title\":\"mzizi Health Dashboard\",\"description\":\"Branded health overview card composing vitals-display, medication-reminder, and appointment-card primitives with malachite mineral accent. Shows key health metrics, upcoming appointments, and medication schedule at a glance. Sovereign data — all health data stays in the user pod.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\",\"https://api.mzizi.dev/v1/ui/vitals-display\",\"https://api.mzizi.dev/v1/ui/appointment-card\",\"https://api.mzizi.dev/v1/ui/medication-reminder\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-hero-stat\",\"type\":\"registry:ui\",\"title\":\"mzizi Hero Stat\",\"description\":\"Branded large primary value display with condition label, secondary stats, icon, and share button. The universal pattern extracted from mukoko-weather CurrentConditions. Used for: temperature (Weather), portfolio value (Wallet), trust score (ID), daily steps (Health), total revenue (BushTrade). Any screen that needs a single large number as its hero.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-icons\",\"type\":\"registry:lib\",\"title\":\"mzizi Icons\",\"description\":\"Central icon registry for the Nyuchi Design System. Maps semantic icon names to Lucide React icons. All components should import icons from this registry, not directly from lucide-react. Provides: consistent sizing (16/20/24/32), brand icon overrides, semantic naming (icon-success vs CheckCircle), tree-shaking optimization, and custom Nyuchi icons. N1 infrastructure — consumed by all layers above. Target: Rust compiled to WebAssembly. wasm-bindgen exposes the interface to SvelteKit. One Rust codebase compiles to both WASM (browser) and native binary (server).\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":1,\"nodeLabel\":\"tokens\",\"owner\":\"mzizi\",\"collection\":\"styling-libs\"},{\"name\":\"mzizi-incident-manager\",\"type\":\"registry:lib\",\"title\":\"mzizi Incident Manager\",\"description\":\"Incident lifecycle management: detect → triage → mitigate → resolve → postmortem. Tracks incidents with severity, affected components (via backlinks), timeline of actions, and generates postmortem templates. Competitors: PagerDuty, incident.io.\",\"categories\":[\"observability\",\"assurance\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":8,\"nodeLabel\":\"assurance\",\"owner\":\"mzizi\",\"collection\":\"observability\"},{\"name\":\"mzizi-job-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Job Card\",\"description\":\"Branded job listing card with employer verification badge, salary range, location, skill tags, and apply CTA. Gold mineral accent. Renders inside MziziListView feeds. Appears in Jobs feed, Pulse aggregation, search results, and recommended listings. The job-specific data shape (salary, skills, match score, remote flag) makes this a distinct card type rather than a mzizi-listing-card variant.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\",\"https://api.mzizi.dev/v1/ui/mzizi-verified-badge\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-layout\",\"type\":\"registry:lib\",\"title\":\"mzizi Layout\",\"description\":\"Responsive and adaptive layout system for Nyuchi. Exports breakpoint tokens (mobile/tablet/desktop/wide), useBreakpoint hook, MziziGrid responsive grid component, canonical layout definitions for the five core page types (feed, detail, create, profile, dashboard), and adaptive density support (comfortable vs compact). Ensures consistent responsive behavior across all Nyuchi apps — same breakpoints, same grid, same content flow patterns. Target: Rust compiled to WebAssembly. wasm-bindgen exposes the interface to SvelteKit. One Rust codebase compiles to both WASM (browser) and native binary (server).\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-tokens\"],\"node\":1,\"nodeLabel\":\"tokens\",\"owner\":\"mzizi\",\"collection\":\"styling-libs\"},{\"name\":\"mzizi-leaderboard-row\",\"type\":\"registry:ui\",\"title\":\"mzizi Leaderboard Row\",\"description\":\"Ranked leaderboard row with position indicator, avatar, name, score, and trend. Maps to ubuntu.leaderboards table. Used in community rankings, Ubuntu point leaderboards, and competitive features. Top 3 positions get mineral-colored rank badges (Gold, Tanzanite, Cobalt).\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/mzizi-verified-badge\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-lesson-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Lesson Card\",\"description\":\"Branded language lesson card for Mukoko Lingo with cobalt mineral accent. Shows lesson title, language pair, progress percentage, streak indicator, difficulty level, and estimated time. Used in Lingo course listings and learning path displays.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/progress\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-listing-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Listing Card\",\"description\":\"Universal content card for all Mukoko listing types — events, products, news, bush trade, directories. Supports row, compact, and hero variants with mineral-colored category accents. The foundational brand component: every listing across the super app uses this pattern.\",\"categories\":[\"brand\"],\"dependencies\":[\"class-variance-authority\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-load-shedder\",\"type\":\"registry:ui\",\"title\":\"mzizi Load Shedder\",\"description\":\"Prioritized load shedding. Under pressure, critical requests (auth, payment) survive while non-critical (analytics, recommendations, media enrichment) are shed first. Shows degraded mode indicator. Based on Netflix prioritized load shedding.\",\"categories\":[\"resilience\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":5,\"nodeLabel\":\"resilience\",\"owner\":\"mzizi\",\"collection\":\"resilience\"},{\"name\":\"mzizi-locale\",\"type\":\"registry:lib\",\"title\":\"mzizi Locale\",\"description\":\"Internationalization infrastructure for the Pan-African Nyuchi platform. Exports MziziLocaleProvider (React context for locale, text direction, number/date/currency formatting), useLocale hook (access formatting functions), useDirection hook (RTL/LTR detection), locale-aware formatters for dates (relative and absolute), currencies (multi-currency with ZWL/ZAR/USD/KES support), numbers, and relative time. Supports all 16 Zimbabwean official languages. String token system for UI labels with locale variants so buttons, headings, and system text can be swapped without code changes. Bridges to the lingo schema in nyuchi_platform_db. Target: Rust compiled to WebAssembly. wasm-bindgen exposes the interface to SvelteKit. One Rust codebase compiles to both WASM (browser) and native binary (server).\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-tokens\"],\"node\":1,\"nodeLabel\":\"tokens\",\"owner\":\"mzizi\",\"collection\":\"styling-libs\"},{\"name\":\"mzizi-media\",\"type\":\"registry:ui\",\"title\":\"mzizi Media\",\"description\":\"Brand media components for the Nyuchi ecosystem. Exports MukokoMediaViewer (full-screen image/video viewer with swipe navigation, pinch-to-zoom, share), MukokoImageGallery (multi-image grid with lightbox expansion and count badge), MukokoReaderMode (long-form content reader with adjustable font size, line height, theme, and estimated reading time for articles and novel chapters), MukokoMediaMessage (standardized format for image/video/audio/document/location messages in Campfire chat), and MukokoStoryRing (ephemeral content avatar ring with gradient border and unseen indicator). Maps to bytes.video_object, novels.chapter, news.news_article, campfire.message, and content.creative_work.\",\"categories\":[\"brand\"],\"dependencies\":[\"dompurify\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/dialog\",\"https://api.mzizi.dev/v1/ui/carousel\",\"https://api.mzizi.dev/v1/ui/lightbox\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-message-bubble\",\"type\":\"registry:ui\",\"title\":\"mzizi Message Bubble\",\"description\":\"Brand-styled chat message bubble for Campfire messaging. Supports sent/received variants, delivery status indicators (sent/delivered/read), emoji reactions, reply threading, and verified sender badge. Maps to campfire.message and campfire.reaction tables. The Mukoko chat identity: pill-shaped bubbles with malachite accent on sent messages.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/mzizi-verified-badge\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-meta-tile\",\"type\":\"registry:ui\",\"title\":\"mzizi Meta Tile\",\"description\":\"Universal date/location signature tile — the 4.2.0 When/Where unit. A rounded-square chip (an icon tile OR a month-over-day date chip) paired with a bold 16px primary line and a 13px muted secondary line, with an optional caption and trailing action. Purely presentational and server-safe (no client directive, no harness) so it renders inside React Server Components. The chip tint defaults to the brand accent (--brand-accent) so each app swaps its own mineral. Used on event detail When/Where rows, place cards, and any listing that anchors a date or a location.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-mini-app-runtime\",\"type\":\"registry:ui\",\"title\":\"mzizi Mini App Runtime\",\"description\":\"Mini-app container for Mukoko super-app architecture. Manages mini-app lifecycle: load, mount, suspend, destroy. Provides isolated context per mini-app with shared token system. Architecture doc: \\\"13 Tier 2 web mini-apps\\\" + \\\"4 Tier 1 native mini-apps\\\".\",\"categories\":[\"shell\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":7,\"nodeLabel\":\"shell\",\"owner\":\"nyuchi\",\"collection\":\"shell\"},{\"name\":\"mzizi-mission-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Mission Card\",\"description\":\"Ubuntu mission/quest card with progress bar, reward badge preview, difficulty indicator, and completion state. Maps to ubuntu.missions and ubuntu.mission_progress tables. Used in the Ubuntu gamification system to drive community contribution through structured challenges.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/progress\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-moderation-gate\",\"type\":\"registry:ui\",\"title\":\"mzizi Moderation Gate\",\"description\":\"Content moderation status gate. Blocks rendering until content passes the Shamwari AI safety pipeline. Shows branded \\\"under review\\\" state with estimated wait time. Supports on-device moderation check (CoreML/NNAPI) before cloud verification. Based on TikTok two-stage AI moderation.\",\"categories\":[\"safety\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":4,\"nodeLabel\":\"safety\",\"owner\":\"mzizi\",\"collection\":\"safety\"},{\"name\":\"mzizi-motion\",\"type\":\"registry:lib\",\"title\":\"mzizi Motion\",\"description\":\"Motion token system defining the Nyuchi animation language. Includes four duration tiers (quick/standard/emphasis/dramatic), four easing curves (entrance/exit/spring/bounce), choreography patterns (list stagger, cascade, ripple), and reduced-motion fallbacks. Respects prefers-reduced-motion at the token level. Exports CSS keyframes, React transition presets, and a useMotion hook. Target: Rust compiled to WebAssembly. wasm-bindgen exposes the interface to SvelteKit. One Rust codebase compiles to both WASM (browser) and native binary (server).\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-tokens\"],\"node\":1,\"nodeLabel\":\"tokens\",\"owner\":\"mzizi\",\"collection\":\"styling-libs\"},{\"name\":\"mzizi-notification-center\",\"type\":\"registry:ui\",\"title\":\"mzizi Notification Center\",\"description\":\"App-wide notification drawer/panel. Displays notifications grouped by type (social, fintech, system, alerts), with read/unread state, actions, and swipe-to-dismiss. Competitors: Instagram, Slack, WeChat.\",\"categories\":[\"shell\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":7,\"nodeLabel\":\"shell\",\"owner\":\"nyuchi\",\"collection\":\"shell\"},{\"name\":\"mzizi-notification-item\",\"type\":\"registry:ui\",\"title\":\"mzizi Notification Item\",\"description\":\"Brand notification item for the Mukoko notification center. Displays a notification with action type icon, actor avatar, message, timestamp, and read/unread state. Mineral-colored icon backgrounds map to notification categories. Used across all Mukoko apps via the shared system.notifications schema.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-offer-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Offer Card\",\"description\":\"Commerce offer/product card for Bush Trade with price display, original/discount pricing, availability, seller verification badge, and inquiry CTA. Maps to commerce.offer and commerce.product tables. Used in Bush Trade marketplace, commerce listings, and deal displays.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-listing-card\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/mzizi-verified-badge\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-offline-gate\",\"type\":\"registry:ui\",\"title\":\"mzizi Offline Gate\",\"description\":\"Offline feature availability gate. Determines if a feature works offline, with cached data, or requires a connection. Shows branded \\\"available offline\\\" or \\\"requires connection\\\" state. Critical for local-first architecture — treats connectivity as a gradient, not a binary. Based on WhatsApp offline queuing but for all feature types.\",\"categories\":[\"safety\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":4,\"nodeLabel\":\"safety\",\"owner\":\"mzizi\",\"collection\":\"safety\"},{\"name\":\"mzizi-onboarding-step\",\"type\":\"registry:ui\",\"title\":\"mzizi Onboarding Step\",\"description\":\"Universal branded onboarding step card used across all ecosystem app first-use experiences. Shows an illustration area, title, description, progress dots, and next/skip actions. Dynamic mineral accent. The individual step within any onboarding flow — composable with swiper or stepper primitives for multi-step sequences.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/stepper\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-otel\",\"type\":\"registry:lib\",\"title\":\"mzizi Otel\",\"description\":\"OTLP exporter for N8 assurance signals. Turns probe results, tracked errors and fired alerts into OpenTelemetry spans and POSTs them to any OTLP/HTTP collector, so a Mzizi signal can be consumed by any agent or service that speaks OpenTelemetry. Zero dependencies and no Node built-ins - runs unchanged in Node, a Cloudflare Worker, Deno or a browser.\",\"categories\":[\"observability\",\"assurance\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-synthetic-probe\"],\"node\":8,\"nodeLabel\":\"assurance\",\"owner\":\"mzizi\",\"collection\":\"observability\"},{\"name\":\"mzizi-page\",\"type\":\"registry:ui\",\"title\":\"mzizi Page\",\"description\":\"Canonical page wrapper with SEO metadata, Open Graph, Schema.org structured data, and canonical layouts (feed, detail, settings, dashboard, auth). Architecture doc: MukokoPage. Every screen in the app is wrapped in MziziPage which handles head metadata, breadcrumbs, and the page-level section arrangement.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"mzizi-payment-mandate-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Payment Mandate Card\",\"description\":\"Inline payment authorization rendered in the AI client. Selects a payment handler (rail) and authorizes an AP2 Payment Mandate — no browser checkout, and no card details leaving the wallet.\",\"categories\":[\"agentic-components\",\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-harness\",\"https://api.mzizi.dev/v1/ui/utils\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"agentic-components\"},{\"name\":\"mzizi-payment-summary\",\"type\":\"registry:ui\",\"title\":\"mzizi Payment Summary\",\"description\":\"Universal branded payment summary and confirmation card. Shows what is being purchased, price breakdown, payment method, and confirm CTA. Used across all domains with financial transactions: BushTrade (product purchase), Nhimbe (ticket purchase), Transport (ride booking), Wallet (token transfer), Health (consultation fee), Novels (chapter unlock). Supports multi-currency (ZWL, USD, ZAR, KES) and MIT token payments.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-perf-probe\",\"type\":\"registry:lib\",\"title\":\"mzizi Perf Probe\",\"description\":\"Web Vitals and performance monitoring. Tracks LCP, FID, CLS, INP, TTFB per page and per component (using data-portal backlinks). Reports to analytics. Competitors: Lighthouse, Web Vitals library, Vercel Analytics.\",\"categories\":[\"observability\",\"assurance\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":8,\"nodeLabel\":\"assurance\",\"owner\":\"mzizi\",\"collection\":\"observability\"},{\"name\":\"mzizi-permission-gate\",\"type\":\"registry:ui\",\"title\":\"mzizi Permission Gate\",\"description\":\"Verification tier gate. Checks the user's verification tier against the required tier before rendering children. Shows a branded mineral-colored upgrade CTA if insufficient. Maps to system.verification_tier (5 tiers: unverified, community, OTP, government, licensed). Renders children when check passes, branded explanation when it doesn't.\",\"categories\":[\"safety\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-harness\",\"https://api.mzizi.dev/v1/ui/utils\"],\"node\":4,\"nodeLabel\":\"safety\",\"owner\":\"mzizi\",\"collection\":\"safety\"},{\"name\":\"mzizi-persistent-player\",\"type\":\"registry:ui\",\"title\":\"mzizi Persistent Player\",\"description\":\"Media player that persists across navigation. Mini-player bar at bottom when navigating away from media. Supports video, audio, and live streams. Competitors: YouTube mini-player, Spotify persistent bar, Netflix PiP.\",\"categories\":[\"shell\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":7,\"nodeLabel\":\"shell\",\"owner\":\"nyuchi\",\"collection\":\"shell\"},{\"name\":\"mzizi-phrase-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Phrase Card\",\"description\":\"Branded word/phrase learning card for Mukoko Lingo with cobalt mineral accent. Shows phrase in source and target languages, pronunciation guide, usage example, and practice/audio controls. Part of the commitment to treating African languages as first-class citizens.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-place-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Place Card\",\"description\":\"Place/location card extending mzizi-listing-card with map pin, verification badge, distance, rating, and opening hours. Maps to places.places (104 columns). Used in Mukoko Places, Shamwari location suggestions, hospitality listings, and any app that displays a physical location.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-listing-card\",\"https://api.mzizi.dev/v1/ui/mzizi-verified-badge\",\"https://api.mzizi.dev/v1/ui/rating\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-platform\",\"type\":\"registry:lib\",\"title\":\"mzizi Platform\",\"description\":\"Platform-specific utilities for PWA, native integration, and cross-platform behavior. Exports MziziInstallPrompt (branded PWA \\\"Add to Home Screen\\\" experience), MziziShareSheet (Web Share API with fallback), usePlatform hook (detect iOS/Android/web/PWA), useHaptics (haptic feedback with graceful degradation), and platform-aware navigation patterns. Makes every Nyuchi app feel native regardless of how it is accessed. Target: Rust compiled to WebAssembly. wasm-bindgen exposes the interface to SvelteKit. One Rust codebase compiles to both WASM (browser) and native binary (server).\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/mzizi-tokens\"],\"node\":1,\"nodeLabel\":\"tokens\",\"owner\":\"mzizi\",\"collection\":\"styling-libs\"},{\"name\":\"mzizi-platform-health\",\"type\":\"registry:ui\",\"title\":\"mzizi Platform Health\",\"description\":\"Transparent platform health dashboard — N8 Assurance (Z-axis/depth). Observes the full 3D architecture: every horizontal layer (L2-L7), every vertical spine (L1 tokens, L4 safety, L5 resilience), and reports which intersections are operational, degraded, or in outage. The depth view into the system.\",\"categories\":[\"observability\",\"assurance\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":8,\"nodeLabel\":\"assurance\",\"owner\":\"mzizi\",\"collection\":\"observability\"},{\"name\":\"mzizi-prefetch-boundary\",\"type\":\"registry:ui\",\"title\":\"mzizi Prefetch Boundary\",\"description\":\"Pre-loads the next screen critical data and components while user is on current screen. TikTok seamless swipe pattern for all navigation. Respects Save-Data header and low battery.\",\"categories\":[\"resilience\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":5,\"nodeLabel\":\"resilience\",\"owner\":\"mzizi\",\"collection\":\"resilience\"},{\"name\":\"mzizi-product-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Product Card\",\"description\":\"DEPRECATED: Use mzizi-offer-card instead. This was an early pre-brand product card without harness, motion, or ARIA integration.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-product-results\",\"type\":\"registry:ui\",\"title\":\"mzizi Product Results\",\"description\":\"The top 3–5 UCP product search results rendered inline in an AI surface, so a buyer can compare and choose without leaving the conversation.\",\"categories\":[\"agentic-components\",\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-harness\",\"https://api.mzizi.dev/v1/ui/utils\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"agentic-components\"},{\"name\":\"mzizi-profile-block\",\"type\":\"registry:ui\",\"title\":\"mzizi Profile Block\",\"description\":\"Standardized profile display block used across all Mukoko apps. Centers the avatar with verification badge, name with inline verified check, platform status indicator, trust score meter, and stat counters. The three trust indicators (verified badge, status pill, trust score) are always visible on the profile header — not just badges elsewhere in the app, but the full expanded view here.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/separator\",\"https://api.mzizi.dev/v1/ui/mzizi-verified-badge\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/progress\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-profile-header\",\"type\":\"registry:ui\",\"title\":\"mzizi Profile Header\",\"description\":\"Full-width profile banner with avatar, name, bio, stats, and actions.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-profile-page\",\"type\":\"registry:block\",\"title\":\"mzizi Profile Page\",\"description\":\"Standard profile page with cover image, avatar, stats, tabs, and action buttons.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/separator\",\"https://api.mzizi.dev/v1/ui/tabs\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-profile-page-layout\",\"type\":\"registry:ui\",\"title\":\"mzizi Profile Page Layout\",\"description\":\"Standard profile page orchestrator with cover image, avatar, name/verification display, stat counters, tab navigation, and content area. Every user, business, organisation, and group profile uses this layout across the ecosystem. The developer provides the tab content as children.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-harness\",\"https://api.mzizi.dev/v1/ui/mzizi-profile-block\",\"https://api.mzizi.dev/v1/ui/mzizi-verified-badge\",\"https://api.mzizi.dev/v1/ui/tabs\",\"https://api.mzizi.dev/v1/ui/avatar\"],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"mzizi-profile-settings\",\"type\":\"registry:block\",\"title\":\"mzizi Profile Settings\",\"description\":\"Standard settings page with sidebar navigation and content sections.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\",\"https://api.mzizi.dev/v1/ui/separator\",\"https://api.mzizi.dev/v1/ui/switch\",\"https://api.mzizi.dev/v1/ui/textarea\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-programme-item\",\"type\":\"registry:ui\",\"title\":\"mzizi Programme Item\",\"description\":\"Timeline-style programme/schedule item for event agendas. Shows time slot, title, speaker/host, and mineral-colored timeline dot. Maps to events.programme_item table. Used on event detail pages for agenda/programme display.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-provider-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Provider Card\",\"description\":\"Branded service provider card showing a professional or business with verification badge, specialty, availability, rating, and booking CTA. Dynamic mineral accent. Used across Health (doctors), Places (businesses), BushTrade (sellers), and any domain where verified service providers need display. Renders inside MziziListView feeds.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\",\"https://api.mzizi.dev/v1/ui/mzizi-verified-badge\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-rate-gate\",\"type\":\"registry:ui\",\"title\":\"mzizi Rate Gate\",\"description\":\"Client-side rate limiting gate. Shows \\\"too many attempts\\\" with cooldown timer BEFORE requests leave the device. Prevents unnecessary server load and gives immediate feedback. Based on WeChat gateway rate limiting pattern.\",\"categories\":[\"safety\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":4,\"nodeLabel\":\"safety\",\"owner\":\"mzizi\",\"collection\":\"safety\"},{\"name\":\"mzizi-registration-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Registration Card\",\"description\":\"Ticket registration panel — a labelled header, a selectable ticket-tier list, a clamped quantity stepper, and one saturated accent CTA. Tiers render as radios (role=radio / aria-checked) showing name + USD-formatted price (Free for 0) and disable with a Sold out label; the Minus/Plus stepper uses 48px pill targets and clamps to [min, max]. The accent CTA (pill, --brand-accent) shows the running total and a loading spinner. Harness-wired: tier and quantity changes are announced through the live region. Accent defaults to --brand-accent so each app swaps its own mineral.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-resilience\",\"type\":\"registry:lib\",\"title\":\"mzizi Resilience\",\"description\":\"Self-monitoring, self-healing resilience node that wires observability, circuit-breaker, bulkhead, rate-limiter, retry, timeout, fallback-chain, and chaos testing into a single composition for brand components. Implements all 7 Resilience4j patterns (Netflix Hystrix successor): CircuitBreaker, Retry, RateLimiter, Bulkhead, TimeLimiter, FallbackChain, and ChaosInjection. Exports MziziSection (wraps any UI section with error boundary + skeleton + observability + health tracking), useResilientFetch (data fetching with full resilience stack), MziziHealthMonitor (singleton aggregating health across all sections), MziziHealthPanel (admin health visualization), and the withResilience decorator that composes all patterns in the correct order. Every brand component renders inside a MziziSection so the infrastructure permanently monitors itself. Target: Rust compiled to WebAssembly. wasm-bindgen exposes the interface to SvelteKit. One Rust codebase compiles to both WASM (browser) and native binary (server).\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/observability\",\"https://api.mzizi.dev/v1/ui/circuit-breaker\",\"https://api.mzizi.dev/v1/ui/retry\",\"https://api.mzizi.dev/v1/ui/timeout\",\"https://api.mzizi.dev/v1/ui/fallback-chain\",\"https://api.mzizi.dev/v1/ui/bulkhead\",\"https://api.mzizi.dev/v1/ui/rate-limiter\",\"https://api.mzizi.dev/v1/ui/chaos\",\"https://api.mzizi.dev/v1/ui/section-error-boundary\",\"https://api.mzizi.dev/v1/ui/mzizi-skeleton-set\",\"https://api.mzizi.dev/v1/ui/mzizi-error-set\"],\"node\":1,\"nodeLabel\":\"tokens\",\"owner\":\"mzizi\",\"collection\":\"styling-libs\"},{\"name\":\"mzizi-review-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Review Card\",\"description\":\"Universal branded review card with trust-verified reviewer badge, star rating, review text, and helpful vote. Used across all domains where user reviews exist: Places (business reviews), BushTrade (seller reviews), Novels (book reviews), Health (provider reviews), Nhimbe (event reviews). The reviewer verification tier is always visible — Ubuntu principle: trust is earned and displayed.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/rating\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\",\"https://api.mzizi.dev/v1/ui/mzizi-verified-badge\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-root-layout\",\"type\":\"registry:ui\",\"title\":\"mzizi Root Layout\",\"description\":\"Next.js App Router root layout. Composes all providers: ThemeProvider, SidebarProvider, Harness, LiveRegion portal, and font loading. The outermost wrapper of the entire application. Architecture doc: \\\"Root layout with MukokoThemeProvider\\\".\",\"categories\":[\"shell\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":7,\"nodeLabel\":\"shell\",\"owner\":\"nyuchi\",\"collection\":\"shell\"},{\"name\":\"mzizi-route-guard\",\"type\":\"registry:ui\",\"title\":\"mzizi Route Guard\",\"description\":\"Route-level protection gate. Checks auth state, role, subscription tier, and verification level before rendering a route. Redirects to appropriate screen (login, upgrade, verification) if requirements not met. Composes L4 safety gates at the route level.\",\"categories\":[\"shell\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":7,\"nodeLabel\":\"shell\",\"owner\":\"nyuchi\",\"collection\":\"shell\"},{\"name\":\"mzizi-route-planner\",\"type\":\"registry:ui\",\"title\":\"mzizi Route Planner\",\"description\":\"Branded route planning display composing route-card, stop-card, and itinerary-timeline primitives with gold mineral accent. Shows origin, destination, transit mode, duration, fare estimate, and step-by-step route. Integrates with Harare Metro data backbone and Nyuchi Logistics fleet.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\",\"https://api.mzizi.dev/v1/ui/route-card\",\"https://api.mzizi.dev/v1/ui/stop-card\",\"https://api.mzizi.dev/v1/ui/itinerary-timeline\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-rsvp-button\",\"type\":\"registry:ui\",\"title\":\"mzizi Rsvp Button\",\"description\":\"Stateful RSVP button with confirmation status variants: pending, confirmed, waitlisted, declined. Pill-shaped with mineral accent, loading state, and capacity indicator. Maps to events.rsvp_action table. The standardized way to handle event registration across nhimbe.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-rum\",\"type\":\"registry:lib\",\"title\":\"mzizi Rum\",\"description\":\"Real User Monitoring. Collects page load timing, interaction delays, network quality, and navigation patterns from actual users. Aggregates by mini-app, page, device, and connection type. Privacy-respecting — no PII, only performance metrics. Competitors: Datadog RUM, Vercel Analytics.\",\"categories\":[\"observability\",\"assurance\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":8,\"nodeLabel\":\"assurance\",\"owner\":\"mzizi\",\"collection\":\"observability\"},{\"name\":\"mzizi-search-view\",\"type\":\"registry:ui\",\"title\":\"mzizi Search View\",\"description\":\"Universal branded search results view composing search-bar, filter-bar, and search-results primitives with mineral-accented category filters. Shows unified cross-app results: people, places, events, products, articles, groups. Each result type renders using its corresponding brand card (mzizi-listing-card, mzizi-place-card, user-card, mzizi-group-card). The standard search experience across the entire ecosystem.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/search-bar\",\"https://api.mzizi.dev/v1/ui/search-results\",\"https://api.mzizi.dev/v1/ui/filter-bar\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-section\",\"type\":\"registry:ui\",\"title\":\"mzizi Section\",\"description\":\"The workhorse section wrapper for every page. Combines error boundary, loading skeleton, health reporting, and optional lazy mounting into a single component. Every section of every page is wrapped in MziziSection. If one section fails, the rest keep working. Reports health status (healthy/degraded/error/loading) to the global health monitor. The architecture doc says: \\\"Every section of every page is wrapped in resilience.\\\"\",\"categories\":[\"resilience\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-harness\",\"https://api.mzizi.dev/v1/ui/utils\",\"https://api.mzizi.dev/v1/ui/error-boundary\",\"https://api.mzizi.dev/v1/ui/section-error-boundary\"],\"node\":5,\"nodeLabel\":\"resilience\",\"owner\":\"mzizi\",\"collection\":\"resilience\"},{\"name\":\"mzizi-seo\",\"type\":\"registry:lib\",\"title\":\"mzizi SEO\",\"description\":\"SEO metadata component for Next.js App Router. Generates head metadata, Open Graph tags, Twitter Cards, Schema.org JSON-LD structured data, and canonical URLs. Server component — runs at build/request time. Supports all Schema.org types used by the platform: JobPosting, VideoObject, MedicalWebPage, RentalCarReservation, Product, Event, Article, Recipe, etc.\",\"categories\":[\"pages\",\"discovery\"],\"dependencies\":[\"next\"],\"registryDependencies\":[],\"node\":11,\"nodeLabel\":\"discovery\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"mzizi-settings-page\",\"type\":\"registry:ui\",\"title\":\"mzizi Settings Page\",\"description\":\"Standard settings page orchestrator with sidebar navigation on desktop and accordion sections on mobile. Groups settings into titled sections with consistent row patterns (toggle, select, link, destructive). Every app and the global platform settings use this layout.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-harness\",\"https://api.mzizi.dev/v1/ui/mzizi-profile-settings\",\"https://api.mzizi.dev/v1/ui/switch\",\"https://api.mzizi.dev/v1/ui/select\"],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"mzizi-share-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Share Card\",\"description\":\"Universal branded share composition wrapping the share-dialog primitive. Shows a preview card of the shared content (title, image, source app), sharing options (copy link, share to Campfire, native share, social platforms), and a branded deep link. Every shareable piece of content across the ecosystem uses this pattern — listings, articles, profiles, places, events, videos, groups.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/sheet\",\"https://api.mzizi.dev/v1/ui/share-dialog\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-sidebar\",\"type\":\"registry:ui\",\"title\":\"mzizi Sidebar\",\"description\":\"Standardized sidebar for all Nyuchi ecosystem apps with mineral accent strip and section-based navigation.\",\"categories\":[\"shell\"],\"dependencies\":[\"next\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/sidebar\",\"https://api.mzizi.dev/v1/ui/separator\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/tooltip\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":7,\"nodeLabel\":\"shell\",\"owner\":\"nyuchi\",\"collection\":\"shell\"},{\"name\":\"mzizi-sidebar-nav\",\"type\":\"registry:ui\",\"title\":\"mzizi Sidebar Nav\",\"description\":\"Branded sidebar navigation with nav items, badges, and section headers. Extracted from admin-page, api-explorer-page, and logs-page. Uses mineral accents for active state.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-skeleton-set\",\"type\":\"registry:ui\",\"title\":\"mzizi Skeleton Set\",\"description\":\"DEPRECATED — Loading states are built into each component from Layer 2 up via the loading prop. Every component renders its own shaped skeleton matching its exact proportions. This top-down skeleton set is a legacy pattern. Use <MziziListingCard loading /> instead of <ListingSkeleton />. Will be removed in the next major version.\",\"categories\":[\"resilience\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/skeleton\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":5,\"nodeLabel\":\"resilience\",\"owner\":\"mzizi\",\"collection\":\"resilience\"},{\"name\":\"mzizi-source-badge\",\"type\":\"registry:ui\",\"title\":\"mzizi Source Badge\",\"description\":\"News source credibility indicator badge tied to verification tier. Shows the source name with a mineral-colored trust indicator. Maps to news.feed_source and news.news_media_organization verification status. Used inline on article cards and in source attribution lines.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/mzizi-verified-badge\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-splash-screen\",\"type\":\"registry:ui\",\"title\":\"mzizi Splash Screen\",\"description\":\"Default splash/loading screen shown on app launch or during major transitions. Branded with mukoko wordmark and mineral accent. Supports progress indication for initial data hydration.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"mzizi-stats-row\",\"type\":\"registry:ui\",\"title\":\"mzizi Stats Row\",\"description\":\"Horizontal compact stats bar for dashboards, home screens, and admin views. Displays 2–4 metric blocks inline with icon, label, value, and optional trend indicator. Uses mineral-colored icon backgrounds. The brand-standard way to show key metrics at a glance across all Mukoko apps.\",\"categories\":[\"brand\"],\"dependencies\":[\"class-variance-authority\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-success-screen\",\"type\":\"registry:ui\",\"title\":\"mzizi Success Screen\",\"description\":\"Branded success/confirmation screen with mineral-colored checkmark, title, message, and optional actions. Extracted from payment-page, checkout-page, and booking-page where the same checkmark + title pattern was repeated. Uses the Seven African Minerals for the success indicator.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-suitability-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Suitability Card\",\"description\":\"Branded suitability/recommendation card with score, icon, title, description, and mineral-colored score indicator. Universal pattern from mukoko-weather ActivityInsights. Used for: \\\"Good for farming\\\" (Weather), \\\"Good for families\\\" (Places), \\\"Good for outdoor exercise\\\" (Health), \\\"Safe to travel\\\" (Transport), \\\"Good match for you\\\" (Jobs). Any scored recommendation.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-sync-status\",\"type\":\"registry:ui\",\"title\":\"mzizi Sync Status\",\"description\":\"CouchDB sync state indicator. Shows sync progress, conflict count, and resolution status. The bridge between local-first data and cloud truth. Displays: synced, syncing (with progress), conflicts pending, sync error, and offline-queued states.\",\"categories\":[\"resilience\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":5,\"nodeLabel\":\"resilience\",\"owner\":\"mzizi\",\"collection\":\"resilience\"},{\"name\":\"mzizi-synthetic-probe\",\"type\":\"registry:lib\",\"title\":\"mzizi Synthetic Probe\",\"description\":\"Synthetic user journey probes that run on schedule. Defines step-by-step user flows (login → navigate → action → verify) and executes them against live or staging environments. Reports pass/fail with latency per step. Competitors: Datadog Synthetic Monitoring, Checkly.\",\"categories\":[\"observability\",\"assurance\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":8,\"nodeLabel\":\"assurance\",\"owner\":\"mzizi\",\"collection\":\"observability\"},{\"name\":\"mzizi-theme-provider\",\"type\":\"registry:ui\",\"title\":\"mzizi Theme Provider\",\"description\":\"Theme provider component that wraps the application and distributes design tokens via CSS custom properties and React context. Supports light/dark/high-contrast themes, per-brand accent overrides, system preference detection (prefers-color-scheme, prefers-contrast), and runtime theme switching. Every Nyuchi app wraps its root in this provider.\",\"categories\":[\"shell\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-tokens\",\"https://api.mzizi.dev/v1/ui/mzizi-tokens-typescript\"],\"node\":7,\"nodeLabel\":\"shell\",\"owner\":\"nyuchi\",\"collection\":\"shell\"},{\"name\":\"mzizi-ticket-card\",\"type\":\"registry:ui\",\"title\":\"mzizi Ticket Card\",\"description\":\"Event ticket display card with QR code area, ticket tier, status indicator (valid/used/cancelled/transferred), and event details. Maps to events.ticket and events.ticket_tier tables. Used in My Events, check-in flows, and digital wallet views.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/mzizi-verified-badge\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-timeline\",\"type\":\"registry:ui\",\"title\":\"mzizi Timeline\",\"description\":\"Universal date-railed discovery list — the 4.2.0 signature timeline. Groups items by day: each day is a left rail (weekday, big day numeral, month) beside a stack of tight horizontal rows. Each row reads time, title, host, location with an overlapping avatar stack and a right-edge thumbnail. Harness-wired for reduced-motion staggered entry and observability. Quiet rows, full 1px borders, 13px muted metadata — the 4.2.0 density. Used for event/agenda discovery across the ecosystem (nhimbe events, planner schedules, any date-anchored feed).\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-toast-provider\",\"type\":\"registry:ui\",\"title\":\"mzizi Toast Provider\",\"description\":\"App-level toast/notification stack. Manages positioning, stacking, auto-dismiss, and swipe-to-dismiss for transient notifications. Wraps the L2 toast primitive with app-level behavior.\",\"categories\":[\"shell\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":7,\"nodeLabel\":\"shell\",\"owner\":\"nyuchi\",\"collection\":\"shell\"},{\"name\":\"mzizi-tokens\",\"type\":\"registry:theme\",\"title\":\"mzizi Tokens\",\"description\":\"The Mzizi N1 design tokens as CSS custom properties — the Seven African Minerals and Seven Heritage colours with light/dark pairs, the four-level AAA surface system, radius scale, type scale, motion durations and touch targets. Generated from app/globals.css, so the registry and the site cannot disagree. Framework-agnostic by construction: the shadcn CLI merges these into whatever stylesheet the consuming project uses. Install this first — 431 of the registry's components reference these variables.\",\"categories\":[\"styling-libs\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":1,\"nodeLabel\":\"tokens\",\"owner\":\"mzizi\",\"collection\":\"styling-libs\"},{\"name\":\"mzizi-tokens-arkts\",\"type\":\"registry:lib\",\"title\":\"mzizi Tokens Arkts\",\"description\":\"Mzizi design tokens for ArkTS / HarmonyOS. Generated by `pnpm tokens:sync` from the same source that emits the web CSS custom properties — seven African Minerals + seven Heritage tones, both themes. Colour constants, spacing, radius and typography for HarmonyOS. Never hand-edited: adding a target means adding an emitter, never re-authoring the palette (CLAUDE.md §8.4.1).\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":1,\"nodeLabel\":\"tokens\",\"owner\":\"mzizi\",\"collection\":\"styling-libs\"},{\"name\":\"mzizi-tokens-globals\",\"type\":\"registry:lib\",\"title\":\"mzizi Tokens Globals\",\"description\":\"The combined Mzizi `globals.css` — one self-contained stylesheet, generated by `pnpm tokens:sync` from `lib/tokens/palette.source.ts`. It carries `@import \\\"tailwindcss\\\"`, its own `@theme` block, `:root`, `.dark`, the per-brand blocks and every non-colour ladder, so a repo copies it in as its `globals.css` with nothing else to fetch — a copy cannot follow an `@import` to a sibling that was not copied with it. Set `data-brand` on `<html>` to pick a brand. Twenty-one colour families in three arrays of seven (minerals, heritage, experimental). Never hand-edited: adding a target means adding an emitter, never re-authoring the palette.\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":1,\"nodeLabel\":\"tokens\",\"owner\":\"mzizi\",\"collection\":\"styling-libs\"},{\"name\":\"mzizi-tokens-kotlin\",\"type\":\"registry:lib\",\"title\":\"mzizi Tokens Kotlin\",\"description\":\"Mzizi design tokens for Kotlin / Jetpack Compose. Generated by `pnpm tokens:sync` from the same source that emits the web CSS custom properties — seven African Minerals + seven Heritage tones, both themes. Color objects, spacing Dp values, radius and typography constants for Android. Never hand-edited: adding a target means adding an emitter, never re-authoring the palette (CLAUDE.md §8.4.1).\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":1,\"nodeLabel\":\"tokens\",\"owner\":\"mzizi\",\"collection\":\"styling-libs\"},{\"name\":\"mzizi-tokens-python\",\"type\":\"registry:lib\",\"title\":\"mzizi Tokens Python\",\"description\":\"Mzizi design tokens for Python. Generated by `pnpm tokens:sync` from the same source that emits the web CSS custom properties — seven African Minerals + seven Heritage tones, both themes. Frozen dataclasses of colour values for analytics pipelines, data visualisation (matplotlib, plotly, altair), report generation and ML tooling. Never hand-edited: adding a target means adding an emitter, never re-authoring the palette (CLAUDE.md §8.4.1).\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":1,\"nodeLabel\":\"tokens\",\"owner\":\"mzizi\",\"collection\":\"styling-libs\"},{\"name\":\"mzizi-tokens-react-native\",\"type\":\"registry:lib\",\"title\":\"mzizi Tokens React Native\",\"description\":\"Mzizi design tokens for React Native. Generated by `pnpm tokens:sync` from the same source that emits the web CSS custom properties — seven African Minerals + seven Heritage tones, both themes. A StyleSheet-ready token object for React Native. Never hand-edited: adding a target means adding an emitter, never re-authoring the palette (CLAUDE.md §8.4.1).\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":1,\"nodeLabel\":\"tokens\",\"owner\":\"mzizi\",\"collection\":\"styling-libs\"},{\"name\":\"mzizi-tokens-rust\",\"type\":\"registry:lib\",\"title\":\"mzizi Tokens Rust\",\"description\":\"Mzizi design tokens for Rust. Generated by `pnpm tokens:sync` from the same source that emits the web CSS custom properties — seven African Minerals + seven Heritage tones, both themes, as `const` values plus `Palette`, `Spacing`, `Radius` and `Fonts`. This is what the Dioxus half of the registry consumes, via the `mzizi-tokens` crate. Never hand-edited: adding a target means adding an emitter, never re-authoring the palette (CLAUDE.md §8.4.1).\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":1,\"nodeLabel\":\"tokens\",\"owner\":\"mzizi\",\"collection\":\"styling-libs\"},{\"name\":\"mzizi-tokens-swift\",\"type\":\"registry:lib\",\"title\":\"mzizi Tokens Swift\",\"description\":\"Mzizi design tokens for Swift / SwiftUI. Generated by `pnpm tokens:sync` from the same source that emits the web CSS custom properties — seven African Minerals + seven Heritage tones, both themes. Color extensions, spacing, radius and typography constants for iOS, macOS, watchOS and tvOS. Never hand-edited: adding a target means adding an emitter, never re-authoring the palette (CLAUDE.md §8.4.1).\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":1,\"nodeLabel\":\"tokens\",\"owner\":\"mzizi\",\"collection\":\"styling-libs\"},{\"name\":\"mzizi-tokens-typescript\",\"type\":\"registry:lib\",\"title\":\"mzizi Tokens Typescript\",\"description\":\"TypeScript constants mirroring the Mzizi N1 token set: typed primitive/semantic/component values plus the helpers (resolveColor, hexWithAlpha, generateCSSVariables) that components need at runtime. The canonical token DATA is mzizi-tokens, which ships the CSS custom properties themselves; this is the typed accessor for code that must read a token value rather than reference it in CSS.\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-tokens\"],\"node\":1,\"nodeLabel\":\"tokens\",\"owner\":\"mzizi\",\"collection\":\"styling-libs\"},{\"name\":\"mzizi-transaction-row\",\"type\":\"registry:ui\",\"title\":\"mzizi Transaction Row\",\"description\":\"Transaction history row for the Mukoko wallet. Displays transaction type (send/receive/purchase/reward), amount with MIT currency formatting, counterparty, status, and timestamp. Maps to wallet.transaction table. Used in wallet history, payment confirmations, and financial reporting.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-trust-gate\",\"type\":\"registry:ui\",\"title\":\"mzizi Trust Gate\",\"description\":\"Trust score threshold gate. Blocks features that require a minimum trust score. Shows the user's current score, the required threshold, and actionable steps to improve. Maps to the Ubuntu Layer trust model: Status × Verification Tier → Trust Score. Used for: posting requires > 0.1, selling requires > 0.3, moderating requires > 0.5.\",\"categories\":[\"safety\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-harness\",\"https://api.mzizi.dev/v1/ui/utils\"],\"node\":4,\"nodeLabel\":\"safety\",\"owner\":\"mzizi\",\"collection\":\"safety\"},{\"name\":\"mzizi-trust-meter\",\"type\":\"registry:ui\",\"title\":\"mzizi Trust Meter\",\"description\":\"Full trust score visualization showing the three-signal breakdown: Verification Tier (are you real?), Platform Status (are you active?), and Ubuntu Contribution (are you helpful?). Displays the composite score as a meter bar with individual signal breakdowns. Used on profile detail pages, admin views, and trust audit screens. This is the expanded view of trust — the verified badge is the compact view.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/progress\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/mzizi-verified-badge\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-update-prompt\",\"type\":\"registry:ui\",\"title\":\"mzizi Update Prompt\",\"description\":\"App update / new version available prompt. Shows when a new version is detected via service worker. Dismissible with optional force-update for critical patches.\",\"categories\":[\"shell\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":7,\"nodeLabel\":\"shell\",\"owner\":\"nyuchi\",\"collection\":\"shell\"},{\"name\":\"mzizi-user-card\",\"type\":\"registry:ui\",\"title\":\"mzizi User Card\",\"description\":\"Compact user profile card with avatar, name, role, and actions.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-user-menu\",\"type\":\"registry:ui\",\"title\":\"mzizi User Menu\",\"description\":\"A user profile dropdown menu with avatar, name, email, navigation links, and sign-out action.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/dropdown-menu\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-verified-badge\",\"type\":\"registry:ui\",\"title\":\"mzizi Verified Badge\",\"description\":\"Verification badge tied to the three-axis Mukoko trust model: Status (platform lifecycle) × Verification Tier (identity ladder) → Trust Score. Renders the appropriate mineral-colored badge for each tier — Terracotta (Community 0.10), Cobalt (OTP 0.20), Gold (Government 0.30), Tanzanite (Licensed 0.50). Suspended/ancestral accounts show a dimmed or memorial variant. Used inline next to names, on profile headers, listing cards, and anywhere trust needs to be communicated.\",\"categories\":[\"brand\"],\"dependencies\":[\"class-variance-authority\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/tooltip\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"mzizi-wallet-gate\",\"type\":\"registry:ui\",\"title\":\"mzizi Wallet Gate\",\"description\":\"Web3 wallet connection gate. Verifies wallet is connected and optionally checks token balance (MIT soulbound, MXT transferable, NST storage, NHC utility). Shows branded connect CTA with mineral-colored wallet icon when not connected. Supports Cosmos SDK (Nyuchi Network), Polygon, and Ethereum wallets.\",\"categories\":[\"safety\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":4,\"nodeLabel\":\"safety\",\"owner\":\"mzizi\",\"collection\":\"safety\"},{\"name\":\"mzizi-washed-theme\",\"type\":\"registry:ui\",\"title\":\"mzizi Washed Theme\",\"description\":\"The one washed-theme mechanism — surface tinted by accent — that four independent implementations of the same idea collapse to. From a named palette family (the seven heritage tones or the seven minerals) or an explicit accent, it emits the full washed contract as inline custom properties every descendant inherits: --washed-accent, --wash, --washed-on-wash and --washed-gradient, plus the --event-primary / --event-on-wash / --event-gradient aliases existing call sites already read. Colours are var(--color-<family>, #canon) references, so the accent follows light/dark from the token layer for free and no hex is ever pasted bare; nothing is fetched at build or runtime. The wash is mixed surface-first in oklab, the same form and space as the repo's own --wash, with mix strengths read from --wash-surface / --wash-on-* so an app tunes dark mode in one rule. Exports resolveWashedTheme() for call sites that need the solved values rather than a wrapper element — a theme picker, an OG route, a stored event theme.\",\"categories\":[\"brand\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":3,\"nodeLabel\":\"brand\",\"owner\":\"nyuchi\",\"collection\":\"brand\"},{\"name\":\"native-select\",\"type\":\"registry:ui\",\"title\":\"Native Select\",\"description\":\"A native HTML select element styled to match the design system.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"navigation-menu\",\"type\":\"registry:ui\",\"title\":\"Navigation Menu\",\"description\":\"A collection of links for navigating websites.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"class-variance-authority\",\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"nearby-list\",\"type\":\"registry:ui\",\"title\":\"Nearby List\",\"description\":\"Proximity-sorted results list designed to pair with a map view. Shows distance, direction indicator, and listing preview. Standard split-view pattern for BushTrade browse, Places discovery, Nhimbe nearby events, and Transport nearby stops.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/map-view\",\"https://api.mzizi.dev/v1/ui/mzizi-listing-card\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"nft-card\",\"type\":\"registry:ui\",\"title\":\"Nft Card\",\"description\":\"NFT display card showing media (image/video), title, collection, owner, and marketplace actions. Used for Nhimbe ERC-1155 tickets, Novels chapter NFTs, Ubuntu badge NFTs, and creator content NFTs. Maps to wallet.nft_holdings.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"node-status-card\",\"type\":\"registry:ui\",\"title\":\"Node Status Card\",\"description\":\"Honeycomb node health and earnings display. Shows node type (consumer/business/infrastructure), uptime, storage contributed, NHC earned, and peer count. Used in the Honeycomb network dashboard.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/status-indicator\",\"https://api.mzizi.dev/v1/ui/progress\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"note-card\",\"type\":\"registry:ui\",\"title\":\"Note Card\",\"description\":\"Compact note display with title, excerpt, and timestamp.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"note-editor\",\"type\":\"registry:ui\",\"title\":\"Note Editor\",\"description\":\"Rich note editing interface with title, body (markdown or rich text), tags, and auto-save indicator. Supports inline images, checklists, and code blocks. The creation/editing counterpart to note-card (display). Reusable in any app that needs structured note capture.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/rich-text-editor\",\"https://api.mzizi.dev/v1/ui/tag-input\",\"https://api.mzizi.dev/v1/ui/input\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"notification-bell\",\"type\":\"registry:ui\",\"title\":\"Notification Bell\",\"description\":\"A notification bell icon with unread count badge and a popover panel listing notifications.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/popover\",\"https://api.mzizi.dev/v1/ui/scroll-area\",\"https://api.mzizi.dev/v1/ui/separator\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"notification-center\",\"type\":\"registry:block\",\"title\":\"Notification Center\",\"description\":\"Notification center with tabs for all, unread, and mentions with grouped items.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/scroll-area\",\"https://api.mzizi.dev/v1/ui/separator\",\"https://api.mzizi.dev/v1/ui/tabs\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"notification-center-full\",\"type\":\"registry:ui\",\"title\":\"Notification Center Full\",\"description\":\"Full-screen or drawer notification management surface. Extends notification-center (existing Layer 2 component) with filter/search, archive, bulk actions, and grouped conversations view. Audit flagged as missing UX pattern for mature notification UX. ALPHA — awaiting frontend implementation.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"notification-list\",\"type\":\"registry:ui\",\"title\":\"Notification List\",\"description\":\"Notification feed with read/unread states, timestamps, and date grouping.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"novel-cover\",\"type\":\"registry:ui\",\"title\":\"Novel Cover\",\"description\":\"Book/manga cover display with genre badge, rating, chapter count, and status indicator (ongoing/completed/hiatus). Aspect ratio optimized for book covers (2:3). Maps to novels.work table.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/rating\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"number-input\",\"type\":\"registry:ui\",\"title\":\"Number Input\",\"description\":\"Numeric input with increment and decrement buttons, min/max/step support.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"observability\",\"type\":\"registry:lib\",\"title\":\"Observability\",\"description\":\"Structured logging, performance measurement, and error tracking with the [mukoko] prefix.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"offline-banner\",\"type\":\"registry:ui\",\"title\":\"Offline Banner\",\"description\":\"Connection status indicator for the local-first architecture. Distinguishes between \\\"offline\\\" (no connection), \\\"showing cached data\\\" (offline but data available), and \\\"syncing\\\" (reconnecting). Persists at the top of the viewport. Dismissible but reappears on state change. Uses CouchDB sync status when available.\",\"categories\":[\"resilience\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-harness\",\"https://api.mzizi.dev/v1/ui/utils\"],\"node\":5,\"nodeLabel\":\"resilience\",\"owner\":\"mzizi\",\"collection\":\"resilience\"},{\"name\":\"onboarding-flow\",\"type\":\"registry:block\",\"title\":\"Onboarding Flow\",\"description\":\"Multi-step onboarding flow with progress indicator, profile setup, and interest selection.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"onboarding-tour\",\"type\":\"registry:ui\",\"title\":\"Onboarding Tour\",\"description\":\"Step-by-step spotlight overlay guiding users through UI features.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"order-summary\",\"type\":\"registry:ui\",\"title\":\"Order Summary\",\"description\":\"Order total breakdown with line items and total.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"org-profile-page\",\"type\":\"registry:ui\",\"title\":\"Org Profile Page\",\"description\":\"Organization/business profile page. Logo, description, verification status, team members, location, hours, products/services tabs. For businesses, NGOs, government entities on the platform.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"page-header\",\"type\":\"registry:ui\",\"title\":\"Page Header\",\"description\":\"Standard page header with breadcrumbs, title, description, and action slot.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"pagination\",\"type\":\"registry:ui\",\"title\":\"Pagination\",\"description\":\"Pagination with page navigation, previous and next links.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"password-strength\",\"type\":\"registry:ui\",\"title\":\"Password Strength\",\"description\":\"Visual password strength meter with requirement checklist.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"payment-method-card\",\"type\":\"registry:ui\",\"title\":\"Payment Method Card\",\"description\":\"Payment method display with card brand and last four digits.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"payment-page\",\"type\":\"registry:ui\",\"title\":\"Payment Page\",\"description\":\"Payment page composition. Amount input, recipient selection, payment method, confirmation. Supports fiat (EcoCash, bank), crypto (MXT, NHC), and cross-border via Nhimbe. Competitors: M-Pesa, Revolut.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"payment-pin-pad\",\"type\":\"registry:ui\",\"title\":\"Payment Pin Pad\",\"description\":\"Secure numeric keypad for transaction PIN confirmation. Full-screen overlay with biometric fallback option. Mineral accent on confirm button. Never logs PIN values. Used before any financial transaction in Wallet.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/dialog\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"permission-badge\",\"type\":\"registry:ui\",\"title\":\"Permission Badge\",\"description\":\"Role/permission indicator badge with color coding.\",\"categories\":[\"primitives\"],\"dependencies\":[\"class-variance-authority\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"phone-input\",\"type\":\"registry:ui\",\"title\":\"Phone Input\",\"description\":\"Phone number input with country code selector, African countries prioritized.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"pinned-message\",\"type\":\"registry:ui\",\"title\":\"Pinned Message\",\"description\":\"Pinned/starred message display banner in chat header area. Shows the pinned message content with unpin action and tap-to-scroll-to behavior. Used in Campfire conversations and Circles channels.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"pod-storage-meter\",\"type\":\"registry:ui\",\"title\":\"Pod Storage Meter\",\"description\":\"Personal sovereign pod storage usage visualization. Shows total allocation, used space by category (messages, media, documents, AI models), and upgrade path via NST. Data from Layer 1 (Pod) of the 7-layer data architecture.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/progress\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"poll\",\"type\":\"registry:ui\",\"title\":\"Poll\",\"description\":\"In-chat poll creation and voting interface. Supports single-choice and multi-choice with real-time vote counts and percentage bars. Used in Campfire group chats and Circles community channels. Mineral-colored progress bars.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/progress\",\"https://api.mzizi.dev/v1/ui/radio-group\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"popover\",\"type\":\"registry:ui\",\"title\":\"Popover\",\"description\":\"Displays rich content in a portal, triggered by a button.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"price-display\",\"type\":\"registry:ui\",\"title\":\"Price Display\",\"description\":\"Formatted price with currency, original price, and discount badge.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"pricing-card\",\"type\":\"registry:ui\",\"title\":\"Pricing Card\",\"description\":\"A pricing tier card with plan name, price, feature list, CTA button, and optional highlight badge.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/separator\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"priority-selector\",\"type\":\"registry:ui\",\"title\":\"Priority Selector\",\"description\":\"Task/item priority picker with visual indicators — none, low, medium, high, urgent. Mineral-colored dots: grey=none, cobalt=low, gold=medium, terracotta=high, destructive=urgent. Compact inline selector for use in task forms, issue trackers, and ticket systems.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/toggle-group\",\"https://api.mzizi.dev/v1/ui/badge\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"progress\",\"type\":\"registry:ui\",\"title\":\"Progress\",\"description\":\"Displays an indicator showing the completion progress of a task.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"prompt-input\",\"type\":\"registry:ui\",\"title\":\"Prompt Input\",\"description\":\"Expandable AI prompt input with send/stop buttons and streaming support.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"property-list\",\"type\":\"registry:ui\",\"title\":\"Property List\",\"description\":\"Key-value pair display with labels, values, and optional copy actions.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"pull-to-refresh\",\"type\":\"registry:ui\",\"title\":\"Pull To Refresh\",\"description\":\"Mobile pull-down-to-refresh gesture handler.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"quick-action-grid\",\"type\":\"registry:ui\",\"title\":\"Quick Action Grid\",\"description\":\"Grid of quick action buttons with icon and label. Extracted from wallet-page and console-dashboard-page.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"radio-group\",\"type\":\"registry:ui\",\"title\":\"Radio Group\",\"description\":\"A set of checkable buttons where only one can be checked at a time.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"rate-limiter\",\"type\":\"registry:lib\",\"title\":\"Rate Limiter\",\"description\":\"Token bucket rate limiter inspired by Resilience4j RateLimiter. Controls request frequency to protect API quotas (Tomorrow.io, Anthropic, government registries) and prevent thundering herd problems. Supports configurable limits per time window, burst allowance, and queue-based waiting. Integrates with observability for tracking request rates, rejections, and quota utilization. Critical for the Nyuchi 7-layer architecture where multiple data sources have different rate limits.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/observability\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"rating\",\"type\":\"registry:ui\",\"title\":\"Rating\",\"description\":\"An interactive star rating component with hover preview, read-only mode, and mineral gold accent.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"reaction-picker\",\"type\":\"registry:ui\",\"title\":\"Reaction Picker\",\"description\":\"Emoji reaction selector popover with counts.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"read-receipts\",\"type\":\"registry:ui\",\"title\":\"Read Receipts\",\"description\":\"Seen-by indicator with avatar stack showing who has read a message. Expandable to full list. Shows read timestamps. Maps to campfire.message read status. The WhatsApp blue-tick pattern.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/avatar-group\",\"https://api.mzizi.dev/v1/ui/tooltip\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"reading-progress\",\"type\":\"registry:ui\",\"title\":\"Reading Progress\",\"description\":\"Book/series progress bar with chapter markers. Shows current position in the overall work and estimated time remaining. Mineral-colored progress fill. Used at the top of the reader and on novel cards.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/progress\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"recording-controls\",\"type\":\"registry:ui\",\"title\":\"Recording Controls\",\"description\":\"Record/pause/stop button group with timer display and recording state indicators. The standard media capture control bar. Used in Bytes (video), Campfire (voice notes), and any creation flow involving recording.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button-group\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"recurrence-picker\",\"type\":\"registry:ui\",\"title\":\"Recurrence Picker\",\"description\":\"Recurrence pattern selector for scheduling — daily, weekly, monthly, yearly with day-of-week/month selectors and end-date or occurrence-count options. Used for recurring tasks, events, medication schedules, and any repeating item across the platform.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/select\",\"https://api.mzizi.dev/v1/ui/checkbox\",\"https://api.mzizi.dev/v1/ui/date-picker\",\"https://api.mzizi.dev/v1/ui/number-input\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"reminder-card\",\"type\":\"registry:ui\",\"title\":\"Reminder Card\",\"description\":\"Notification-style reminder card with title, due datetime, snooze/dismiss actions, and recurrence indicator. Used for task deadlines, appointment reminders, medication timing, and any time-triggered alert across the platform.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/badge\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"report-page\",\"type\":\"registry:ui\",\"title\":\"Report Page\",\"description\":\"Report/document page. Structured report with title, date, sections, charts, tables, and print/export actions. For generated analytics reports, compliance docs, audit trails.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"resizable\",\"type\":\"registry:ui\",\"title\":\"Resizable\",\"description\":\"Accessible resizable panel groups and layouts with keyboard support.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"react-resizable-panels\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"retry\",\"type\":\"registry:lib\",\"title\":\"Retry\",\"description\":\"Retry with exponential backoff, jitter, and configurable retry predicates.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/observability\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"revenue-dashboard-widget\",\"type\":\"registry:ui\",\"title\":\"Revenue Dashboard Widget\",\"description\":\"Creator and platform revenue metrics with earnings chart, payout history, next payout date, and revenue split visualization. Used in creator dashboards (Novels, Bytes) and Nyuchi Console financial overview.\",\"categories\":[\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"review-card\",\"type\":\"registry:ui\",\"title\":\"Review Card\",\"description\":\"Review or testimonial display with star rating, author info, and review text.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"rich-text-editor\",\"type\":\"registry:ui\",\"title\":\"Rich Text Editor\",\"description\":\"Simple WYSIWYG editor with toolbar for bold, italic, heading, list, and link formatting.\",\"categories\":[\"primitives\"],\"dependencies\":[\"dompurify\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"role-selector\",\"type\":\"registry:ui\",\"title\":\"Role Selector\",\"description\":\"Role picker with descriptions and permission previews.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"route-card\",\"type\":\"registry:ui\",\"title\":\"Route Card\",\"description\":\"Transit route display showing stops, estimated time, fare, and transport mode (bus, kombi, train). Maps to transport.transit_route. Used in Transport mini-app route search results.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/separator\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"rtl-conformity-check\",\"type\":\"registry:ui\",\"title\":\"Rtl Conformity Check\",\"description\":\"N8 assurance probe that validates RTL (right-to-left) layout correctness across deployed components. Checks: logical properties (start/end vs left/right), bidi text rendering, icon mirroring rules, text alignment consistency. Audit flagged as missing accessibility infrastructure. ALPHA — awaiting edge function implementation.\",\"categories\":[\"observability\",\"assurance\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":8,\"nodeLabel\":\"assurance\",\"owner\":\"mzizi\",\"collection\":\"observability\"},{\"name\":\"schema-viewer\",\"type\":\"registry:ui\",\"title\":\"Schema Viewer\",\"description\":\"JSON schema tree display with type badges.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"scroll-area\",\"type\":\"registry:ui\",\"title\":\"Scroll Area\",\"description\":\"Augments native scroll functionality for custom, cross-browser styling.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"search-bar\",\"type\":\"registry:ui\",\"title\":\"Search Bar\",\"description\":\"A search input with keyboard shortcut support, clear button, and command palette integration.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/kbd\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"search-results\",\"type\":\"registry:block\",\"title\":\"Search Results\",\"description\":\"Standard search results page with filters, result items, and pagination.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/separator\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"section-error-boundary\",\"type\":\"registry:ui\",\"title\":\"Section Error Boundary\",\"description\":\"Section-level error boundary for the 5-layer architecture with retry, named sections, and observability logging.\",\"categories\":[\"resilience\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/observability\",\"https://api.mzizi.dev/v1/ui/utils\",\"https://api.mzizi.dev/v1/ui/button\"],\"node\":5,\"nodeLabel\":\"resilience\",\"owner\":\"mzizi\",\"collection\":\"resilience\"},{\"name\":\"section-header\",\"type\":\"registry:ui\",\"title\":\"Section Header\",\"description\":\"Section divider with title, description, action, and mineral accent.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"segmented-control\",\"type\":\"registry:ui\",\"title\":\"Segmented Control\",\"description\":\"Connected multi-option selector as a single pill-shaped control. Inline alternative to radio-group for 2-4 mutually exclusive options like view mode switchers, time range selectors, or binary choices. Audit flagged as missing primitive. ALPHA — awaiting frontend implementation.\",\"categories\":[\"primitives\"],\"dependencies\":[\"class-variance-authority\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"select\",\"type\":\"registry:ui\",\"title\":\"Select\",\"description\":\"Displays a list of options for the user to pick from, triggered by a button.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"send-money-flow\",\"type\":\"registry:ui\",\"title\":\"Send Money Flow\",\"description\":\"Multi-step money transfer flow: recipient selection → amount entry → confirmation → receipt. Supports QR scan, contact picker, and recent recipients. The standard peer-to-peer transfer pattern for Wallet and Campfire bill splitting.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/currency-input\",\"https://api.mzizi.dev/v1/ui/stepper\",\"https://api.mzizi.dev/v1/ui/transaction-receipt\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"separator\",\"type\":\"registry:ui\",\"title\":\"Separator\",\"description\":\"Visually or semantically separates content.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"service-health-card\",\"type\":\"registry:ui\",\"title\":\"Service Health Card\",\"description\":\"Service health status card with name, status dot, uptime, and latency. Extracted from infrastructure-page.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"session-list\",\"type\":\"registry:ui\",\"title\":\"Session List\",\"description\":\"Active session display with device, location, and revoke.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"settings-layout\",\"type\":\"registry:ui\",\"title\":\"Settings Layout\",\"description\":\"Two-column settings page layout with sticky sidebar navigation.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"severity-badge\",\"type\":\"registry:ui\",\"title\":\"Severity Badge\",\"description\":\"Color-coded severity indicator with mineral-mapped colors. Levels: low (malachite), moderate (gold), high (terracotta/orange), severe (red), extreme (dark red), cold (cobalt). Used for weather alerts, health risk levels, trust warnings, content moderation flags, and any graduated severity display. Production-proven in mukoko-weather FrostAlertBanner.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/utils\",\"https://api.mzizi.dev/v1/ui/badge\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"share-dialog\",\"type\":\"registry:ui\",\"title\":\"Share Dialog\",\"description\":\"A share dialog with copy-to-clipboard, social media links, and native share support.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/dialog\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/separator\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"sheet\",\"type\":\"registry:ui\",\"title\":\"Sheet\",\"description\":\"Extends the Dialog component to display content that complements the main content of the screen.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"sidebar\",\"type\":\"registry:ui\",\"title\":\"Sidebar\",\"description\":\"A composable, themeable and customizable sidebar component.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"class-variance-authority\",\"radix-ui\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/separator\",\"https://api.mzizi.dev/v1/ui/sheet\",\"https://api.mzizi.dev/v1/ui/skeleton\",\"https://api.mzizi.dev/v1/ui/tooltip\",\"https://api.mzizi.dev/v1/ui/use-mobile\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"sidebar-01\",\"type\":\"registry:block\",\"title\":\"Sidebar 01\",\"description\":\"Basic sidebar with icon and text navigation items.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"sidebar-02\",\"type\":\"registry:block\",\"title\":\"Sidebar 02\",\"description\":\"Collapsible sidebar with grouped sections.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"sidebar-03\",\"type\":\"registry:block\",\"title\":\"Sidebar 03\",\"description\":\"Sidebar with search bar at top.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"sidebar-04\",\"type\":\"registry:block\",\"title\":\"Sidebar 04\",\"description\":\"Sidebar with user profile section.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"sidebar-05\",\"type\":\"registry:block\",\"title\":\"Sidebar 05\",\"description\":\"Sidebar with nested sub-navigation.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"sidebar-06\",\"type\":\"registry:block\",\"title\":\"Sidebar 06\",\"description\":\"Icon-only collapsed sidebar.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"sidebar-07\",\"type\":\"registry:block\",\"title\":\"Sidebar 07\",\"description\":\"Sidebar with badge notification counts.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"sidebar-08\",\"type\":\"registry:block\",\"title\":\"Sidebar 08\",\"description\":\"Sidebar with header and footer sections.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"sidebar-09\",\"type\":\"registry:block\",\"title\":\"Sidebar 09\",\"description\":\"Sidebar with grouped navigation categories.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"sidebar-10\",\"type\":\"registry:block\",\"title\":\"Sidebar 10\",\"description\":\"Floating sidebar detached from edge.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"sidebar-11\",\"type\":\"registry:block\",\"title\":\"Sidebar 11\",\"description\":\"Sidebar with accordion sections.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"sidebar-12\",\"type\":\"registry:block\",\"title\":\"Sidebar 12\",\"description\":\"Sidebar with breadcrumb trail.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"sidebar-13\",\"type\":\"registry:block\",\"title\":\"Sidebar 13\",\"description\":\"Sidebar with quick actions panel.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"sidebar-14\",\"type\":\"registry:block\",\"title\":\"Sidebar 14\",\"description\":\"Sidebar with theme toggle.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"sidebar-15\",\"type\":\"registry:block\",\"title\":\"Sidebar 15\",\"description\":\"Sidebar with workspace switcher.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"sidebar-16\",\"type\":\"registry:block\",\"title\":\"Sidebar 16\",\"description\":\"Full-featured sidebar combining all patterns.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"signup-01\",\"type\":\"registry:block\",\"title\":\"Signup 01\",\"description\":\"Basic signup with name, email, and password fields.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"signup-02\",\"type\":\"registry:block\",\"title\":\"Signup 02\",\"description\":\"Multi-step signup wizard with progress indicator.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"signup-03\",\"type\":\"registry:block\",\"title\":\"Signup 03\",\"description\":\"Split signup with features showcase panel.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"signup-04\",\"type\":\"registry:block\",\"title\":\"Signup 04\",\"description\":\"Invite-only signup with invite code input.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"signup-05\",\"type\":\"registry:block\",\"title\":\"Signup 05\",\"description\":\"Social and email signup with terms checkbox.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/input\",\"https://api.mzizi.dev/v1/ui/label\",\"https://api.mzizi.dev/v1/ui/mzizi-harness\"],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"skeleton\",\"type\":\"registry:ui\",\"title\":\"Skeleton\",\"description\":\"Used to show a placeholder while content is loading.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"slider\",\"type\":\"registry:ui\",\"title\":\"Slider\",\"description\":\"An input where the user selects a value from within a given range.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"social-feed-page\",\"type\":\"registry:ui\",\"title\":\"Social Feed Page\",\"description\":\"Social feed page. Infinite scroll content feed with stories/status bar, create post FAB, pull-to-refresh. Competitors: Instagram, TikTok, Twitter.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"sonner\",\"type\":\"registry:ui\",\"title\":\"Sonner\",\"description\":\"An opinionated toast component for React.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"sonner\",\"next-themes\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"source-citation\",\"type\":\"registry:ui\",\"title\":\"Source Citation\",\"description\":\"Citation card linking AI responses to source documents.\",\"categories\":[\"primitives\"],\"dependencies\":[\"class-variance-authority\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"spinner\",\"type\":\"registry:ui\",\"title\":\"Spinner\",\"description\":\"A loading spinner component.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"split-bill\",\"type\":\"registry:ui\",\"title\":\"Split Bill\",\"description\":\"Bill splitting interface for group payments in Campfire. Supports equal split, custom amounts per person, and tip. Shows each participant with their share and payment status. Maps to wallet.payment_intents.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/currency-input\",\"https://api.mzizi.dev/v1/ui/avatar-group\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"split-view\",\"type\":\"registry:ui\",\"title\":\"Split View\",\"description\":\"Responsive master-detail layout that collapses on mobile.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"stats-card\",\"type\":\"registry:ui\",\"title\":\"Stats Card\",\"description\":\"A metric card displaying a value with optional trend indicator, icon, and description.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"status-dot\",\"type\":\"registry:ui\",\"title\":\"Status Dot\",\"description\":\"Colored status dot with optional label. Uses semantic status tokens. Extracted from console-dashboard-page, infrastructure-page, and logs-page where colored dots indicated service health inline.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"status-indicator\",\"type\":\"registry:ui\",\"title\":\"Status Indicator\",\"description\":\"A status dot with optional label indicating online, offline, busy, away, or live states.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"step-progress\",\"type\":\"registry:ui\",\"title\":\"Step Progress\",\"description\":\"Horizontal step progress indicator for multi-step flows. Shows current progress as filled/unfilled segments. Extracted from payment-page, checkout-page, booking-page, and verification-page. Brand-agnostic.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"stepper\",\"type\":\"registry:ui\",\"title\":\"Stepper\",\"description\":\"Multi-step wizard navigation with horizontal/vertical orientation variants.\",\"categories\":[\"primitives\"],\"dependencies\":[\"class-variance-authority\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"sticky-bar\",\"type\":\"registry:ui\",\"title\":\"Sticky Bar\",\"description\":\"Position-sticky container for headers or action bars.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"stop-card\",\"type\":\"registry:ui\",\"title\":\"Stop Card\",\"description\":\"Transit stop card showing stop name, arriving vehicles with ETAs, and distance from user. Maps to transport.transit_stop (bus stops, train stations, kombi ranks, taxi ranks). Used in Transport stop detail and nearby-stops views.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/badge\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"story-creator\",\"type\":\"registry:ui\",\"title\":\"Story Creator\",\"description\":\"Ephemeral content creation interface combining camera viewfinder, text overlay, sticker placement, and drawing tools. Used for story/status content that expires after 24 hours. Maps to the Pulse content feed.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/camera-viewfinder\",\"https://api.mzizi.dev/v1/ui/caption-editor\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"streaming-text\",\"type\":\"registry:ui\",\"title\":\"Streaming Text\",\"description\":\"Typewriter effect text renderer for streaming LLM output.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"subscription-card\",\"type\":\"registry:ui\",\"title\":\"Subscription Card\",\"description\":\"Plan comparison card with features, price, and CTA.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"subscription-gate\",\"type\":\"registry:ui\",\"title\":\"Subscription Gate\",\"description\":\"Subscribe-to-read paywall with tier preview, price display, and CTA. Shows a blurred preview of gated content with clear upgrade path. Used in Novels for chapter unlocks and premium content across the platform.\",\"categories\":[\"safety\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/badge\"],\"node\":4,\"nodeLabel\":\"safety\",\"owner\":\"mzizi\",\"collection\":\"safety\"},{\"name\":\"suggested-prompts\",\"type\":\"registry:ui\",\"title\":\"Suggested Prompts\",\"description\":\"Scrollable prompt chips for AI conversations.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"switch\",\"type\":\"registry:ui\",\"title\":\"Switch\",\"description\":\"A control that allows the user to toggle between a checked and not checked state.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"symptom-checker\",\"type\":\"registry:ui\",\"title\":\"Symptom Checker\",\"description\":\"Guided symptom input with body region selector, severity scale, and duration fields. Not a diagnostic tool — produces a structured symptom summary for telemedicine consultations. Used in Health mini-app pre-appointment flow.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/checkbox\",\"https://api.mzizi.dev/v1/ui/slider\",\"https://api.mzizi.dev/v1/ui/stepper\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"table\",\"type\":\"registry:ui\",\"title\":\"Table\",\"description\":\"A responsive table component.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"tabs\",\"type\":\"registry:ui\",\"title\":\"Tabs\",\"description\":\"A set of layered sections of content that are displayed one at a time.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"class-variance-authority\",\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"tag-input\",\"type\":\"registry:ui\",\"title\":\"Tag Input\",\"description\":\"Token-based input for multiple values as dismissible badges.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"task-board\",\"type\":\"registry:ui\",\"title\":\"Task Board\",\"description\":\"Draggable task card for use in kanban boards, task lists, and project management views. Shows title, priority indicator, due date, assignee avatar, labels, and subtask progress. Composable into kanban-board columns, list views, or calendar day slots. A reusable building block for any task-driven interface.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/checkbox\",\"https://api.mzizi.dev/v1/ui/progress\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"team-management-page\",\"type\":\"registry:ui\",\"title\":\"Team Management Page\",\"description\":\"Team/organization management page. Member list, role assignment, invitations, permissions, activity log. For Mukoko orgs, Nyuchi Web Services teams, B2B partners.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"telemedicine-widget\",\"type\":\"registry:ui\",\"title\":\"Telemedicine Widget\",\"description\":\"Video call interface card for virtual consultations. Shows call status, timer, mute/camera toggle, and end call button. Integrates with the Health mini-app and Nyuchi Medical for scheduled and on-demand consultations.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/avatar\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"text-size-adjuster\",\"type\":\"registry:ui\",\"title\":\"Text Size Adjuster\",\"description\":\"Dynamic text sizing control for readability. Supports preset sizes (small/default/large/extra-large) and custom scaling. Persisted in user preferences. Critical for accessibility across diverse user needs.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/slider\",\"https://api.mzizi.dev/v1/ui/button-group\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"textarea\",\"type\":\"registry:ui\",\"title\":\"Textarea\",\"description\":\"Displays a form textarea.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"time-picker\",\"type\":\"registry:ui\",\"title\":\"Time Picker\",\"description\":\"Hour and minute selector with optional AM/PM toggle.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"time-series-chart\",\"type\":\"registry:ui\",\"title\":\"Time Series Chart\",\"description\":\"Reusable Canvas-based time series chart with multi-series support, dual Y-axes, mixed line/bar types, custom tooltip and tick formatters. Built on canvas-chart. Draws lines, areas, and bars on a single canvas element. Production-proven in mukoko-weather for temperature trends, precipitation, humidity, UV index, and wind speed charts. Use this instead of composing individual Recharts chart blocks when you need a data-driven chart with dynamic series.\",\"categories\":[\"primitives\"],\"dependencies\":[\"chart.js\",\"react-chartjs-2\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/canvas-chart\",\"https://api.mzizi.dev/v1/ui/mzizi-tokens\",\"https://api.mzizi.dev/v1/ui/mzizi-tokens-typescript\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"time-slot-picker\",\"type\":\"registry:ui\",\"title\":\"Time Slot Picker\",\"description\":\"Selectable grid of available time slots for booking.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"time-tracker\",\"type\":\"registry:ui\",\"title\":\"Time Tracker\",\"description\":\"Elapsed time display with start/stop/pause controls. Shows running timer, accumulated time, and optional description. Used for time tracking on tasks, billable hours in Nyuchi Tools, and focus sessions.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button-group\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"timeline\",\"type\":\"registry:ui\",\"title\":\"Timeline\",\"description\":\"A vertical timeline for displaying chronological events with mineral-colored dots.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"timeout\",\"type\":\"registry:lib\",\"title\":\"Timeout\",\"description\":\"Promise timeout wrapper. Rejects with TimeoutError if an async operation exceeds the specified duration.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"toast\",\"type\":\"registry:ui\",\"title\":\"Toast\",\"description\":\"A succinct message that is displayed temporarily.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"@radix-ui/react-toast\",\"class-variance-authority\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"toaster\",\"type\":\"registry:ui\",\"title\":\"Toaster\",\"description\":\"A toaster component to render toast notifications.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/toast\",\"https://api.mzizi.dev/v1/ui/use-toast\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"todo-item\",\"type\":\"registry:ui\",\"title\":\"Todo Item\",\"description\":\"Checkable task item with priority, due date, and assignee.\",\"categories\":[\"primitives\"],\"dependencies\":[\"class-variance-authority\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"toggle\",\"type\":\"registry:ui\",\"title\":\"Toggle\",\"description\":\"A two-state button that can be either on or off.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"class-variance-authority\",\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"toggle-group\",\"type\":\"registry:ui\",\"title\":\"Toggle Group\",\"description\":\"A set of two-state buttons that can be toggled on or off.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"class-variance-authority\",\"radix-ui\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/toggle\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"token-balance-card\",\"type\":\"registry:ui\",\"title\":\"Token Balance Card\",\"description\":\"Multi-token balance overview showing all four Mukoko tokens (MIT, MXT, NST, NHC) with individual balances, fiat equivalents, and combined portfolio value. Maps to wallet.balance and wallet.mit_token tables.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/separator\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"token-row\",\"type\":\"registry:ui\",\"title\":\"Token Row\",\"description\":\"Crypto token display row with symbol, balance, and optional fiat value. Extracted from wallet-page.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"toolbar\",\"type\":\"registry:ui\",\"title\":\"Toolbar\",\"description\":\"Horizontal container for grouped tool actions. Persistent action bar pattern for editors, content creation, and admin surfaces. Supports segmented groups, overflow menu, and responsive collapse. Audit flagged as missing UX pattern. ALPHA — awaiting frontend implementation.\",\"categories\":[\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"tooltip\",\"type\":\"registry:ui\",\"title\":\"Tooltip\",\"description\":\"A popup that displays information related to an element when it receives keyboard focus or the mouse hovers over it.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"radix-ui\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"transaction-history-page\",\"type\":\"registry:ui\",\"title\":\"Transaction History Page\",\"description\":\"Transaction history page. Filterable list of all transactions with date grouping, search, and export. Shows transaction type, status, amount, and counterparty.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"transaction-receipt\",\"type\":\"registry:ui\",\"title\":\"Transaction Receipt\",\"description\":\"Full payment receipt with QR code, transaction ID, amount, parties, timestamp, and shareable format. Maps to wallet.transaction table. Used after successful payments, transfers, and purchases across Wallet, BushTrade, and Nhimbe.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/separator\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"transfer-list\",\"type\":\"registry:ui\",\"title\":\"Transfer List\",\"description\":\"Dual-list selector with search filtering and arrow buttons to move items between panels.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/input\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"translation-indicator\",\"type\":\"registry:ui\",\"title\":\"Translation Indicator\",\"description\":\"Shows translation status and language of content. Indicates whether content is original, machine-translated, or community-translated. Links to Lingo for translation contribution. Used on articles, listings, and chat messages.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/tooltip\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"tree-view\",\"type\":\"registry:ui\",\"title\":\"Tree View\",\"description\":\"Hierarchical expandable/collapsible node list for nested data.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"typing-indicator\",\"type\":\"registry:ui\",\"title\":\"Typing Indicator\",\"description\":\"Animated dots showing someone is typing.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"typography\",\"type\":\"registry:ui\",\"title\":\"Typography\",\"description\":\"A set of typographic components for consistent text styling.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"use-memory-pressure\",\"type\":\"registry:hook\",\"title\":\"Use Memory Pressure\",\"description\":\"Monitor JS heap memory pressure via Performance Memory API.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"use-mobile\",\"type\":\"registry:hook\",\"title\":\"Use Mobile\",\"description\":\"A hook to detect if the current device is mobile.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"use-toast\",\"type\":\"registry:hook\",\"title\":\"Use Toast\",\"description\":\"A hook for managing toast notifications.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/toast\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"user-management-row\",\"type\":\"registry:ui\",\"title\":\"User Management Row\",\"description\":\"Admin user management table row with avatar, name, email, role badge, verification tier, last active timestamp, and action dropdown (edit role, suspend, delete). Used in all Nyuchi product admin panels.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/avatar\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/dropdown-menu\",\"https://api.mzizi.dev/v1/ui/mzizi-verified-badge\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"utils\",\"type\":\"registry:lib\",\"title\":\"Utils\",\"description\":\"Utility functions including the cn classname helper.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[\"clsx\",\"tailwind-merge\"],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"vehicle-card\",\"type\":\"registry:ui\",\"title\":\"Vehicle Card\",\"description\":\"Vehicle listing card with photo, specs, availability calendar, driver rating, and booking CTA. Maps to Nyuchi Logistics fleet data. Used in Transport vehicle booking and BushTrade delivery options.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/rating\",\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"verification-page\",\"type\":\"registry:ui\",\"title\":\"Verification Page\",\"description\":\"Identity verification page. Multi-step verification flow: phone/OTP, government ID upload, selfie, biometric. Shows current tier and what unlocks at each level.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"verification-review-card\",\"type\":\"registry:ui\",\"title\":\"Verification Review Card\",\"description\":\"Identity/business verification submission card with submitted evidence preview, tier requested, applicant info, and approve/reject/request-more actions. Maps to system.unified_submissions and system.verification_tier.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/badge\",\"https://api.mzizi.dev/v1/ui/button-group\",\"https://api.mzizi.dev/v1/ui/mzizi-verified-badge\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"video-player\",\"type\":\"registry:ui\",\"title\":\"Video Player\",\"description\":\"Themed video player wrapper with custom controls.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"video-trimmer\",\"type\":\"registry:ui\",\"title\":\"Video Trimmer\",\"description\":\"Timeline scrubber for video editing with frame preview thumbnails, start/end handles, and playhead. Supports pinch-to-zoom on mobile for precise trimming. Used in Bytes post-capture editing flow.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/slider\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"virtual-list\",\"type\":\"registry:ui\",\"title\":\"Virtual List\",\"description\":\"Virtualized list for large datasets using CSS transforms.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"vitals-display\",\"type\":\"registry:ui\",\"title\":\"Vitals Display\",\"description\":\"Health metrics visualization showing blood pressure, heart rate, BMI, temperature, and custom vitals. Chart-based trend view with mineral-colored ranges (normal=malachite, warning=gold, critical=terracotta). Data from sovereign pod.\",\"categories\":[\"primitives\"],\"dependencies\":[\"recharts\"],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/chart\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"voice-note-player\",\"type\":\"registry:ui\",\"title\":\"Voice Note Player\",\"description\":\"Inline voice message player with waveform visualization, play/pause, speed control (1x/1.5x/2x), and duration. The WhatsApp-standard voice message pattern adapted for the Nyuchi ecosystem with mineral accent on the waveform.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/audio-waveform\",\"https://api.mzizi.dev/v1/ui/button\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"vote-buttons\",\"type\":\"registry:ui\",\"title\":\"Vote Buttons\",\"description\":\"For/against/abstain voting interface with visual weight display. Shows current vote distribution and the user's selected option. Mineral colors: malachite=for, terracotta=against, gold=abstain. Used in DAO governance proposals.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button-group\",\"https://api.mzizi.dev/v1/ui/progress\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"wallet-card\",\"type\":\"registry:ui\",\"title\":\"Wallet Card\",\"description\":\"Visual card representation for digital wallet display. Shows token type (MIT/MXT/NST/NHC), balance, and card design with mineral gradient. Swipeable between multiple token cards. Maps to wallet.balance table.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/card\",\"https://api.mzizi.dev/v1/ui/carousel\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"},{\"name\":\"wallet-connect-button\",\"type\":\"registry:ui\",\"title\":\"Wallet Connect Button\",\"description\":\"Connect/disconnect wallet button with truncated address display and network indicator. Supports Nyuchi custodial wallet (default) and self-custody upgrade path. Used across all Web3-enabled features.\",\"categories\":[\"components\",\"primitives\"],\"dependencies\":[],\"registryDependencies\":[\"https://api.mzizi.dev/v1/ui/button\",\"https://api.mzizi.dev/v1/ui/dropdown-menu\"],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"framework\",\"collection\":\"components\"},{\"name\":\"wallet-page\",\"type\":\"registry:ui\",\"title\":\"Wallet Page\",\"description\":\"Wallet page composition. Balance display, quick actions (send/receive/scan), recent transactions, and token portfolio. Competitors: M-Pesa, Revolut, Cash App. Supports MXT, MIT, NST, NHC tokens alongside fiat currencies.\",\"categories\":[\"pages\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":6,\"nodeLabel\":\"pages\",\"owner\":\"nyuchi\",\"collection\":\"pages\"},{\"name\":\"webhook-card\",\"type\":\"registry:ui\",\"title\":\"Webhook Card\",\"description\":\"Webhook endpoint configuration display with status.\",\"categories\":[\"primitives\"],\"dependencies\":[],\"registryDependencies\":[],\"node\":2,\"nodeLabel\":\"primitives\",\"owner\":\"mzizi\",\"collection\":\"primitives\"}],\"meta\":{\"total\":577,\"count\":577,\"offset\":0,\"limit\":null,\"registryTotal\":577,\"filters\":{\"node\":null,\"owner\":null,\"collection\":null,\"type\":null}}}",
14
- "architecture": "{\"data\":{\"nodes\":[{\"node_number\":1,\"sub_label\":\"tokens\",\"title\":\"Design tokens\",\"type\":\"node\",\"strand\":\"swappable\",\"backbone\":\"engineering\",\"role\":\"N1 — the only node allowed to define CSS values\",\"covenant\":\"Design decisions are data, not code.\",\"description\":\"Design decisions expressed as CSS custom properties. The token generation toolchain reads the Supabase styling collections and writes the generated palette plus each target's token file; it is TypeScript today (pnpm tokens:sync, scripts/sync-tokens.ts), and a Rust CLI binary is the target. Every other node reads tokens via var() or its platform equivalent — no node above ever declares its own colour, radius, spacing or motion duration. N1 is target-agnostic: what it emits varies by target, what it guarantees does not.\",\"stakeholder\":\"Design system maintainer\",\"implementation_rules\":[\"Define every value in :root and .dark blocks.\",\"Register tokens in the Tailwind @theme inline block so utility classes resolve.\",\"No hardcoded hex values, rgba(), or inline style={{}} outside N1.\",\"Category-to-mineral mapping lives here, not in components.\"],\"sort_order\":1,\"component_count\":20},{\"node_number\":2,\"sub_label\":\"primitive\",\"title\":\"Primitives\",\"type\":\"node\",\"strand\":\"core-guarantee\",\"backbone\":\"engineering\",\"role\":\"N2 — smallest composable unit of UI\",\"covenant\":\"A primitive does one thing well.\",\"description\":\"The smallest composable unit of UI, and framework-specific by nature: a primitive is a contract plus a token set, not one source file shared across targets. Shipping today are React (the verified Mzizi baseline) and Svelte via shadcn-svelte, both Radix + CVA — Svelte is a supported way to build a primitive, no longer the primary one. The Rust path is Dioxus, whose 0.7 Tailwind + Radix support matches this exact stack; it is metadata_only today, with zero Dioxus primitives wired. Target: primitives read accessibility state and motion config from the shared Rust WASM core. No harness and no business logic here — the harness stays N3-only.\",\"stakeholder\":\"Component library author\",\"implementation_rules\":[\"One CVA variants block per primitive; no inline conditional classes.\",\"Expose asChild / Slot where composition matters.\",\"Use Radix UI for focus, keyboard, and screen-reader behaviour.\",\"56px default / 48px minimum touch target.\"],\"sort_order\":2,\"component_count\":371},{\"node_number\":3,\"sub_label\":\"brand\",\"title\":\"Brand components\",\"type\":\"node\",\"strand\":\"shipped\",\"backbone\":\"engineering\",\"role\":\"N3 — primitives wrapped in Ubuntu\",\"covenant\":\"A brand component is a primitive with Ubuntu in it.\",\"description\":\"Primitives wrapped in Ubuntu philosophy. Brand components consume the harness for observability, motion and accessibility — every one destructures { log, motion, LiveRegion } from it, and N2 primitives never do. The harness is TypeScript today (lib/harness in mzizi-dev/mzizi-registry); the target is one shared Rust WASM core behind that same interface, so the harness is implemented once instead of once per framework. The component shell stays framework-specific either way: Dioxus on the Rust path, Svelte optional, Swift / Kotlin / ArkTS / React Native idiomatic native.\",\"stakeholder\":\"Brand system steward\",\"implementation_rules\":[\"Always destructure { log, motion, LiveRegion } from useMziziHarness.\",\"N2 primitives never import useMziziHarness directly.\",\"Every brand component carries a data-slot attribute for stable targeting.\",\"Use mineral palette tokens, not raw colour values.\"],\"sort_order\":3,\"component_count\":68},{\"node_number\":4,\"sub_label\":\"safety\",\"title\":\"Safety rails\",\"type\":\"node\",\"strand\":\"core-guarantee\",\"backbone\":\"engineering\",\"role\":\"N4 — input validation, output sanitisation, AI guardrails\",\"covenant\":\"Nothing harmful reaches the user.\",\"description\":\"Validation, sanitisation and AI guardrails. TypeScript today — Zod schemas at the entry point and the ai-safety lib wrapping completions. Target: the gate logic (permission evaluation, content moderation, wallet state, trust-score validation) compiles to WebAssembly via wasm-bindgen for the browser and to a native binary for server-side API validation, with a thin framework shell rendering the visual gate — verification-required screens, blocked states — by reading state from the module. This is Rust-as-shared-core, not Rust-as-UI: one of the two nodes with a genuine Rust implementation, because a safety gate is logic and logic does not need rewriting per target.\",\"stakeholder\":\"Security + safety engineer\",\"implementation_rules\":[\"Validate all external input with Zod schemas at the entry point.\",\"Sanitise every rich-text or MDX payload before render.\",\"Wrap AI completions with the ai-safety lib (see registry:lib).\",\"Treat every third-party response as untrusted until it clears N4.\"],\"sort_order\":4,\"component_count\":14},{\"node_number\":5,\"sub_label\":\"resilience\",\"title\":\"Resilience patterns\",\"type\":\"node\",\"strand\":\"core-guarantee\",\"backbone\":\"engineering\",\"role\":\"N5 — circuit breakers, retries, timeouts, fallback chains\",\"covenant\":\"Failure in one part never breaks the whole.\",\"description\":\"Circuit breakers, retry logic, error boundaries and fallback chains. TypeScript today — circuit-breaker, retry, timeout, fallback-chain, bulkhead, rate-limiter and chaos live in lib/ and ship as registry:lib items consumers install. Target: the resilience STATE MACHINE (circuit state closed/open/half-open, failure counts, timeout budgets) is Rust compiled to WebAssembly via wasm-bindgen, while framework components render the visual fallback — error cards, skeletons, offline banners — by reading state from the module. This is Rust-as-shared-core, not Rust-as-UI: alongside N4 it is one of the two nodes with a genuine Rust implementation, because both hold logic rather than UI. The isolation is the point and it is genuine: a UI failure cannot corrupt resilience state, and a state transition cannot block the UI thread.\",\"stakeholder\":\"Reliability engineer\",\"implementation_rules\":[\"Wrap every async boundary in SectionErrorBoundary.\",\"Use the resilience lib primitives: circuit-breaker, retry, timeout, fallback-chain, bulkhead, rate-limiter.\",\"No global error handler swallows section-level failures silently.\",\"Chaos tests exercise the resilience paths before every release.\"],\"sort_order\":5,\"component_count\":14},{\"node_number\":6,\"sub_label\":\"pages\",\"title\":\"Pages\",\"type\":\"node\",\"strand\":\"shipped\",\"backbone\":\"engineering\",\"role\":\"N6 — composition of N2 and N3, nothing implemented\",\"covenant\":\"A page is a composition, not an implementation.\",\"description\":\"Pure composition of N2 and N3 — pages arrange brand components into full-screen experiences and implement nothing. That covenant is exactly what makes N6 the cheapest node in the helix to move across targets: porting a page re-expresses an arrangement, it does not re-derive behaviour. Framework-specific like every UI node — Dioxus on the Rust path, Svelte optional, React shipping — with no Rust implementation of its own, because there is nothing here to implement. Semantic tokens only, no inline primitives.\",\"stakeholder\":\"Product engineer\",\"implementation_rules\":[\"Pages import from N2 and N3, never define new primitives.\",\"All copy, data, and metadata come from the database or props — not hardcoded.\",\"Pages can be server components by default; promote to client only when hooks are required.\",\"A node that renders a spinner or a skeleton pulls it from N2, never inlines one.\"],\"sort_order\":6,\"component_count\":52},{\"node_number\":7,\"sub_label\":\"shell\",\"title\":\"Shell\",\"type\":\"node\",\"strand\":\"shipped\",\"backbone\":\"engineering\",\"role\":\"N7 — the app chrome: header, footer, navigation, theme\",\"covenant\":\"The shell holds the product.\",\"description\":\"The app chrome — navigation, routing, theme provision and global overlays, mounted once per app. N7 is the one node that is both things at once: as UI it is framework-specific and has a Rust alternative (Dioxus on the Rust path, Svelte optional, SwiftUI / Jetpack Compose / ArkTS / React Native native), and as the mount point it is where the shared Rust WASM core is initialised once per app and its state — N4's gates, N5's resilience — made available to the component tree. TypeScript today (app/layout.tsx plus next-themes), initialising nothing from WASM.\",\"stakeholder\":\"Platform engineer\",\"implementation_rules\":[\"One <Header /> + one <Footer /> per app — the shell is singular.\",\"Shell components are the only place sticky positioning, backdrop blur, and theme-provider wiring live.\",\"The shell surfaces authentication state but never implements auth logic.\",\"Responsive by default across every breakpoint from 320px to ultra-wide.\"],\"sort_order\":7,\"component_count\":16},{\"node_number\":8,\"sub_label\":\"assurance\",\"title\":\"Assurance\",\"type\":\"node\",\"strand\":\"core-guarantee\",\"backbone\":\"engineering\",\"role\":\"N8 — observability, health monitoring, SLO tracking\",\"covenant\":\"What breaks is seen before users feel it.\",\"description\":\"The node that watches, on the engineering backbone's core-guarantee strand. Observability signal collection, SLO tracking, chaos injection, accessibility auditing and conformity checking. TypeScript today (lib/observability.ts and lib/metrics.ts in mzizi-dev/mzizi-registry). Target: the collection layer compiles to WebAssembly so the browser gathers signals without blocking the UI thread, and the same Rust builds as a native binary aggregating signals across the fleet server-side. Writes to observability_events and fundi_issues. Never stores PII — in any language. Rate-limited at the application layer.\",\"stakeholder\":\"Observability engineer\",\"implementation_rules\":[\"Every brand component emits render timing + error events via the harness.\",\"Structured logs use the [mzizi] prefix for grep-ability.\",\"MCP / API usage flows into lib/metrics.ts.\",\"Health signals are exposed at /api/v1/health; assurance dashboards read from there.\"],\"sort_order\":8,\"component_count\":14}],\"rungs\":[{\"node_number\":9,\"sub_label\":\"fundi\",\"title\":\"Fundi\",\"type\":\"rung\",\"strand\":null,\"backbone\":null,\"role\":\"N9 — the self-healing rung: consumes N8 assurance signals and remediates the root cause\",\"covenant\":\"Failure is a learning event, not a user-facing incident.\",\"description\":\"The self-healing rung — a cross-cutting base pair that bridges both backbones. A Cloudflare Worker at fundi.nyuchi.dev, TypeScript today (fundi-tester in mzizi-dev/agent-tools: a FundiAgent durable object, a */5 cron and the fundi-signals queue); a workers-rs Rust/WASM Worker is the target. NOT a Supabase Edge Function — fundi runs independently of the database vendor on Cloudflare's global edge. Triggered by Cron Triggers and Cloudflare Queues pushed by N8 signals. Reads observability_events and fundi_issues from Supabase via REST API, classifies failure severity, deduplicates against open GitHub issues, and creates structured issues with fundi:node/{n} labels for human review. Never auto-merges fixes. Logs every healing action append-only.\",\"stakeholder\":\"Fundi operator\",\"implementation_rules\":[\"The fundi worker route POST /webhook ingests and deduplicates incoming failures, authenticated by an X-Hub-Signature-256 HMAC over the raw body. It replaced the fundi-webhook Supabase edge function, which had no signature check.\",\"Cron-driven heal pass promotes fingerprinted failures into labelled GitHub issues.\",\"Append-only audit trail in fundi_healing_log, surfaced by get_healing_log; fundi_issues holds the issues themselves.\",\"On by default for nyuchi / mukoko; opt-in for external consumers.\"],\"sort_order\":9,\"component_count\":3},{\"node_number\":10,\"sub_label\":\"documentation\",\"title\":\"Documentation\",\"type\":\"rung\",\"strand\":null,\"backbone\":null,\"role\":\"N10 — the ecosystem documents itself in code\",\"covenant\":\"Every document lives here. Documents, instructions, docs, documentation — one rung, no exceptions.\",\"description\":\"The doctrine rung, and the single home for everything document-shaped: documents, instructions (including ai_instructions), docs and documentation. Conventions, covenants, guides and reference all belong to N10 — held as MDX in the repo so a document referencing something that no longer exists fails the build rather than rotting unnoticed. If an artifact is prose meant to be read, it is N10; nothing else claims it and no other rung should.\",\"stakeholder\":\"Docs maintainer\",\"implementation_rules\":[\"Mzizi documentation lives in mzizi-dev/mzizi-docs and publishes to docs.mzizi.dev (Mintlify). This supersedes the Starlight split, where bundu-docs (docs.bundu.org) and nyuchi-docs (docs.nyuchi.com) each held part of the Mzizi material — a split is exactly what this rung's covenant forbids, and it is how the same thing came to be documented twice with neither copy authoritative. Those two sites keep their own non-Mzizi content. /api/v1/docs* still returns HTTP 410 with a migrated_to map.\",\"Once docs.mzizi.dev resolves it exposes its own MCP endpoint, reachable THROUGH the main Mzizi MCP rather than as a second connection a consumer has to add. It does not resolve yet — do not document it as available until it does.\",\"Doctrine stays here, as .mdx in this repo, and that is not a contradiction of the rung above it. A doctrine page names components, nodes and rungs, so compiling it beside them is what makes a reference to something deleted fail the build. Long-form guides have no such coupling and belong in mzizi-docs. The test is whether the prose would still be checkable if it moved.\",\"Component source lives in git under components/registry/n<N>-<label>/; Supabase holds only the metadata around it, served over /api/v1/*.\",\"registry.json is a CI-verified snapshot of the registry, never hand-edited (pnpm registry:verify).\",\"MCP tools and /api/v1/stats surface live counts from the DB; never quote a hardcoded count.\"],\"sort_order\":10,\"component_count\":4},{\"node_number\":11,\"sub_label\":\"discovery\",\"title\":\"Discovery\",\"type\":\"rung\",\"strand\":null,\"backbone\":null,\"role\":\"N11 — SEO + AIO: preview images, structured data, agent-readiness; entwined through the double helix, not an outside actor\",\"covenant\":\"If the machine can't see it, it doesn't exist.\",\"description\":\"Search-engine and AI/agent optimisation — the machine-facing surface of every site. Owns social/preview images, structured data (schema.org JSON-LD), llms.txt, robots + sitemap, canonical and meta tags, and agent-readiness (MCP server-card, .well-known). N11 has no Rust implementation and no Rust alternative of its own: it holds no shared logic and no components, and rides whatever the shell renders. What it does hold is a constraint on the Rust direction — a client-rendered WASM target must prerender or server-render, or crawlers receive an empty document. A missing preview image or absent structured data is the biggest discoverability no-go: if crawlers, social scrapers and AI agents cannot parse a surface, it may as well not exist.\",\"stakeholder\":\"Growth / discoverability engineer\",\"implementation_rules\":[\"Every route ships a title, a meta description, and a dynamic OpenGraph/preview image carrying that page's title + description + site icon — never a missing or 404 image.\",\"Preview images come from ONE shared template so they stay dynamic and brand-agnostic; the site icon parameterises the brand (nyuchi / mukoko / bundu / shamwari).\",\"Emit schema.org JSON-LD for the page's primary entity; keep llms.txt and the MCP server-card current.\",\"robots.txt and sitemap.xml are generated, not hand-maintained; canonical URLs are absolute via a set metadataBase.\"],\"sort_order\":11,\"component_count\":1},{\"node_number\":12,\"sub_label\":\"skills\",\"title\":\"Skills\",\"type\":\"rung\",\"strand\":null,\"backbone\":null,\"role\":\"N12 — the skills rung: what the system knows how to do, authored in git and projected to the registry\",\"covenant\":\"What the system knows how to do is teachable, not tribal.\",\"description\":\"The skills rung. Agent skills are authored in git (mzizi-tools/mzizi-skills, published as @nyuchi/mzizi-skills) and projected into the `skills` collection, which the registry serves at /api/v1/skills* and the MCP serves as get_skill / list_skills. A rung rather than a node: skills bridge both backbones — engineering practice and meaning at once — and no node imports them.\",\"stakeholder\":\"Agent-skills author\",\"implementation_rules\":[\"Skills are authored in git as mzizi-skills/skills/<name>/SKILL.md in mzizi-dev/agent-tools and published as the public npm package @nyuchi/mzizi-skills.\",\"pnpm skills:validate is the offline pre-publish gate: index.json and package.json version lockstep, frontmatter name matching the index, no unlisted skill directory.\",\"pnpm skills:sync projects the committed bundle into this collection through RLS (disk to DB). The DB rows are a read-only projection; git is the source of truth.\",\"mzizi.dev serves skills at /api/v1/skills* and over MCP; consumers install with npx skills add @nyuchi/mzizi-skills.\"],\"sort_order\":12,\"component_count\":0}],\"strands\":[{\"name\":\"core-guarantee\",\"title\":\"Core guarantee\",\"backbone\":\"engineering\",\"covenant\":\"The guarantees travel unchanged, always.\",\"description\":\"The fixed contract — accessibility, data, resilience, observability, safety, and primitives. Every adopter, on any framework, with any visual identity, gets these unchanged; they are not configurable because they are the reason to trust Mzizi at all. An accessibility layer you can turn off is a suggestion, not a guarantee.\",\"sort_order\":1},{\"name\":\"shipped\",\"title\":\"Shipped\",\"backbone\":\"engineering\",\"covenant\":\"In the box, but free to evolve.\",\"description\":\"Nyuchi-authored components that come in the box — brand, pages, shell. Part of the framework (not app code), but unlike the core they carry no permanence promise: they evolve at product speed.\",\"sort_order\":2},{\"name\":\"swappable\",\"title\":\"Swappable\",\"backbone\":\"engineering\",\"covenant\":\"Fork along the seams, not everywhere.\",\"description\":\"The only defined fork seams — styling/tokens, the icon library, and the framework (React today, SvelteKit the declared migration target). An adopter swaps exactly these three layers and inherits everything else — forkable along seams, not forkable everywhere.\",\"sort_order\":3},{\"name\":\"spine\",\"title\":\"Spine\",\"backbone\":\"engineering\",\"covenant\":\"What makes the parts one body.\",\"description\":\"The harness — the pre-wiring backbone. Not a styling layer; a structural one. The spine holds the bindings between components and their conventions, the way the sugar-phosphate backbone holds the bases: it is what makes the strands one framework instead of a parts list.\",\"sort_order\":4},{\"name\":\"genetic-code\",\"title\":\"Genetic code\",\"backbone\":\"meaning\",\"covenant\":\"The sequence everything is read from.\",\"description\":\"The Ubuntu principles and Mzizi conventions — the sequence everything else is read from. Not documentation about the framework; instruction to it: the five Ubuntu questions, the naming conventions, the mathematical pattern language (why sizes are primes, why sets come in sevens), and Schema.org compliance.\",\"sort_order\":5},{\"name\":\"transcription\",\"title\":\"Transcription\",\"backbone\":\"meaning\",\"covenant\":\"Doctrine is data, not tribal knowledge.\",\"description\":\"Every piece of doctrine, every convention, every architectural decision stored as queryable documents in mzizi_db (component_documents) and served by the MCP. Doctrine is not tribal knowledge; it is versioned data with an audit trail that both humans and AI coding assistants query.\",\"sort_order\":6}]},\"meta\":{\"model\":\"mzizi-dna-helix\",\"node_count\":8,\"rung_count\":4,\"strand_count\":6,\"empty\":false,\"source\":\"component_documents/documentation-architecture-{nodes,strands}\",\"version\":\"v1\"}}",
15
- "brand": "{\"$schema\":\"https://mzizi.dev/schema/brand.json\",\"@context\":\"https://schema.org\",\"@type\":\"Brand\",\"version\":\"4.0.31\",\"name\":\"The Mzizi Brand System\",\"lastUpdated\":\"2026-07-13\",\"homepage\":\"https://mzizi.dev/brand\",\"minerals\":[{\"name\":\"cobalt\",\"hex\":\"#0047AB\",\"lightHex\":\"#0047AB\",\"darkHex\":\"#00B0FF\",\"containerLight\":\"#E3F2FD\",\"containerDark\":\"#001F3F\",\"cssVar\":\"--color-cobalt\",\"origin\":\"Katanga (DRC) and Zambian Copperbelt\",\"symbolism\":\"Digital future, trust, knowledge\",\"usage\":\"Primary blue, links, CTAs\"},{\"name\":\"tanzanite\",\"hex\":\"#B388FF\",\"lightHex\":\"#4B0082\",\"darkHex\":\"#B388FF\",\"containerLight\":\"#F3E5F5\",\"containerDark\":\"#1A0033\",\"cssVar\":\"--color-tanzanite\",\"origin\":\"Merelani Hills, Tanzania\",\"symbolism\":\"Premium, creativity, connection\",\"usage\":\"Purple accent, brand/logo, social features\"},{\"name\":\"malachite\",\"hex\":\"#64FFDA\",\"lightHex\":\"#004D40\",\"darkHex\":\"#64FFDA\",\"containerLight\":\"#E0F2F1\",\"containerDark\":\"#00251A\",\"cssVar\":\"--color-malachite\",\"origin\":\"Congo Copper Belt\",\"symbolism\":\"Growth, nature, success\",\"usage\":\"Success states, positive actions\"},{\"name\":\"gold\",\"hex\":\"#FFD740\",\"lightHex\":\"#5D4037\",\"darkHex\":\"#FFD740\",\"containerLight\":\"#FFF8E1\",\"containerDark\":\"#332200\",\"cssVar\":\"--color-gold\",\"origin\":\"Ghana, South Africa, Mali\",\"symbolism\":\"Honey, rewards, warmth\",\"usage\":\"Achievements, rewards, highlights\"},{\"name\":\"terracotta\",\"hex\":\"#A0522D\",\"lightHex\":\"#A0522D\",\"darkHex\":\"#E1B07E\",\"containerLight\":\"#F5E6D3\",\"containerDark\":\"#3E2817\",\"cssVar\":\"--color-terracotta\",\"origin\":\"Pan-African Sahel\",\"symbolism\":\"Earth, community, grounding\",\"usage\":\"Community features, warmth\"},{\"name\":\"sodalite\",\"hex\":\"#283593\",\"lightHex\":\"#283593\",\"darkHex\":\"#3D5AFE\",\"containerLight\":\"#E8EAF6\",\"containerDark\":\"#0D1442\",\"cssVar\":\"--color-sodalite\",\"origin\":\"Kunene River, Namibia & South Africa\",\"symbolism\":\"Intelligence, depth, reasoning\",\"usage\":\"AI/Shamwari surfaces, deep-reasoning states\"},{\"name\":\"copper\",\"hex\":\"#BF5A36\",\"lightHex\":\"#BF5A36\",\"darkHex\":\"#FF8A65\",\"containerLight\":\"#FBE4DA\",\"containerDark\":\"#3A1A0E\",\"cssVar\":\"--color-copper\",\"origin\":\"Central African Copperbelt, Zambia & DRC\",\"symbolism\":\"Connection, foundation, stewardship\",\"usage\":\"Bundu ecosystem identity, the commons\"}],\"ecosystem\":[{\"name\":\"bundu\",\"meaning\":\"Wilderness\",\"language\":\"Shona\",\"role\":\"The ecosystem\",\"description\":\"The complete ecosystem built by Nyuchi Africa. Three pillars — mukoko (consumer super app), nyuchi (enterprise layer), and sister brands (specialist verticals) — all connected through one identity, one design system, and one open data commons.\",\"voice\":\"Visionary, grounded, inclusive\",\"mineral\":\"copper\",\"url\":\"https://www.bundu.org\"},{\"name\":\"nyuchi\",\"meaning\":\"Bee\",\"language\":\"Shona\",\"role\":\"Infrastructure & enterprise\",\"description\":\"Seven enterprise products, each with its own consumer interface and business-facing tools. API platform, web services, learning, medical, rentals, tools, and SEO manager. Every nyuchi product is a standalone product, a door into the mukoko platform, and a professional surface for the same ecosystem.\",\"voice\":\"Technical, reliable, industrious\",\"mineral\":\"gold\",\"url\":\"https://nyuchi.com\"},{\"name\":\"mukoko\",\"meaning\":\"Beehive\",\"language\":\"Shona\",\"role\":\"Africa's super app\",\"description\":\"A growing net of mini-apps — founded seventeen, four substrate components, one unified identity — grown under the Bundu Order. The digital home where a billion Africans' social, creative, commercial, civic, and economic lives belong.\",\"voice\":\"Welcoming, structured, protective\",\"mineral\":\"tanzanite\",\"url\":\"https://mukoko.com\"},{\"name\":\"shamwari\",\"meaning\":\"Friend\",\"language\":\"Shona\",\"role\":\"Sovereign AI companion\",\"description\":\"The Digital Twin's conversational interface. Three layers of intelligence — personal (your pod data), community (anonymised platform data), and platform (base mukoko knowledge). A friend that serves; a friend that does not control.\",\"voice\":\"Helpful, warm, intelligent\",\"mineral\":\"sodalite\",\"url\":\"https://shamwari.ai\"},{\"name\":\"nhimbe\",\"meaning\":\"Gathering\",\"language\":\"Shona\",\"role\":\"Events & gatherings\",\"description\":\"Community events and cultural gatherings. Standalone brand calling the same platform API. Edge-first check-in via geographic Durable Objects for sub-10ms ticket validation at venue doors.\",\"voice\":\"Celebratory, communal, vibrant\",\"mineral\":\"malachite\",\"url\":\"https://nhimbe.com\"},{\"name\":\"bushtrade\",\"meaning\":\"Bush trade\",\"language\":\"English/Shona\",\"role\":\"Marketplace\",\"description\":\"Rentals-first marketplace for Zimbabwe and beyond. Business verification through the platform's unified submissions pipeline. Escrow-backed payments via mukoko wallet. Seller conversations flow through Campfire.\",\"voice\":\"Practical, trustworthy, local\",\"mineral\":\"gold\",\"url\":\"https://bushtrade.co.zw\"},{\"name\":\"lingo\",\"meaning\":\"Language\",\"language\":\"English\",\"role\":\"Language learning\",\"description\":\"African language learning. Shona and Ndebele as primaries, English, French, Portuguese, and travel phrases. The product expression of mukoko's commitment to treating African languages as first-class citizens.\",\"voice\":\"Encouraging, cultural, playful\",\"mineral\":\"cobalt\",\"url\":\"https://lingo.mukoko.com\"},{\"name\":\"campfire\",\"meaning\":\"Campfire\",\"language\":\"English\",\"role\":\"Platform messaging anchor\",\"description\":\"All messaging and cross-app communications. The architectural anchor of the ecosystem.\",\"voice\":\"Direct, warm, always present\",\"mineral\":\"malachite\",\"url\":\"https://campfire.mukoko.com\"},{\"name\":\"bytes\",\"meaning\":\"Bytes\",\"language\":\"English\",\"role\":\"Short-form creator video\",\"description\":\"African creator video platform competing with TikTok.\",\"voice\":\"Energetic, creative, youthful\",\"mineral\":\"tanzanite\",\"url\":\"https://bytes.mukoko.com\"},{\"name\":\"novels\",\"meaning\":\"Novels\",\"language\":\"English\",\"role\":\"Publishing platform\",\"description\":\"Long-form publishing with 10 work types, co-authorship, and revenue splitting.\",\"voice\":\"Literary, thoughtful, immersive\",\"mineral\":\"malachite\",\"url\":\"https://novels.mukoko.com\"},{\"name\":\"places\",\"meaning\":\"Places\",\"language\":\"English\",\"role\":\"Geographic knowledge graph\",\"description\":\"Africa's rival to Google Business Profile + Maps for formal and informal economies.\",\"voice\":\"Authoritative, helpful, discoverable\",\"mineral\":\"gold\",\"url\":\"https://places.mukoko.com\"},{\"name\":\"transport\",\"meaning\":\"Transport\",\"language\":\"English\",\"role\":\"Public transit and booking\",\"description\":\"Public transit routing, vehicle booking, commute planning for African cities.\",\"voice\":\"Efficient, reliable, practical\",\"mineral\":\"gold\",\"url\":\"https://transport.mukoko.com\"},{\"name\":\"planner\",\"meaning\":\"Planner\",\"language\":\"English\",\"role\":\"Productivity hub\",\"description\":\"Calendar, tasks, notes, bookings — single source of truth for scheduling.\",\"voice\":\"Organised, clear, supportive\",\"mineral\":\"cobalt\",\"url\":\"https://planner.mukoko.com\"},{\"name\":\"wallet\",\"meaning\":\"Wallet\",\"language\":\"English\",\"role\":\"Payments and tokens\",\"description\":\"MUKOKO tokens, mobile money, bank transfers. No bank account required.\",\"voice\":\"Trustworthy, precise, secure\",\"mineral\":\"gold\",\"url\":\"https://wallet.mukoko.com\"},{\"name\":\"pulse\",\"meaning\":\"Pulse\",\"language\":\"English\",\"role\":\"Feed and Mukoko Home\",\"description\":\"Personalised content feed and agentic dashboard.\",\"voice\":\"Personal, adaptive, ambient\",\"mineral\":\"tanzanite\",\"url\":\"https://pulse.mukoko.com\"},{\"name\":\"health\",\"meaning\":\"Health\",\"language\":\"English\",\"role\":\"Wellness and telemedicine\",\"description\":\"Health info, telemedicine booking, medication reminders. Connected to Nyuchi Medical.\",\"voice\":\"Caring, accurate, private\",\"mineral\":\"malachite\",\"url\":\"https://health.mukoko.com\"},{\"name\":\"circles\",\"meaning\":\"Circles\",\"language\":\"English\",\"role\":\"Community messaging\",\"description\":\"Community channels — WhatsApp groups, Discord servers for Africa.\",\"voice\":\"Inclusive, moderated, community-driven\",\"mineral\":\"terracotta\",\"url\":\"https://circles.mukoko.com\"}],\"typography\":{\"fonts\":{\"sans\":{\"family\":\"Noto Sans\",\"usage\":\"All body text, UI labels\",\"reason\":\"Broad language support including African languages and diacritics\"},\"serif\":{\"family\":\"Noto Serif\",\"usage\":\"Page titles, hero text, display headings\",\"reason\":\"Elegant display type with matching language coverage\"},\"mono\":{\"family\":\"JetBrains Mono\",\"usage\":\"Code blocks, terminal output, technical content\",\"reason\":\"Purpose-built for developer readability\"}},\"scale\":[{\"name\":\"Display\",\"sizePx\":72,\"sizeRem\":\"4.5rem\",\"lineHeight\":\"1.1\",\"weight\":700,\"font\":\"serif\",\"usage\":\"Hero headlines, landing pages\"},{\"name\":\"Display Small\",\"sizePx\":60,\"sizeRem\":\"3.75rem\",\"lineHeight\":\"1.1\",\"weight\":700,\"font\":\"serif\",\"usage\":\"Secondary hero headlines, landing page sub-hero sections\"},{\"name\":\"H1\",\"sizePx\":48,\"sizeRem\":\"3rem\",\"lineHeight\":\"1.15\",\"weight\":700,\"font\":\"serif\",\"usage\":\"Page titles\"},{\"name\":\"H2\",\"sizePx\":36,\"sizeRem\":\"2.25rem\",\"lineHeight\":\"1.2\",\"weight\":600,\"font\":\"serif\",\"usage\":\"Section headings\"},{\"name\":\"H3\",\"sizePx\":30,\"sizeRem\":\"1.875rem\",\"lineHeight\":\"1.25\",\"weight\":600,\"font\":\"serif\",\"usage\":\"Sub-section headings\"},{\"name\":\"H4\",\"sizePx\":24,\"sizeRem\":\"1.5rem\",\"lineHeight\":\"1.3\",\"weight\":600,\"font\":\"sans\",\"usage\":\"Card titles, group headings\"},{\"name\":\"H5\",\"sizePx\":20,\"sizeRem\":\"1.25rem\",\"lineHeight\":\"1.4\",\"weight\":600,\"font\":\"sans\",\"usage\":\"Small headings\"},{\"name\":\"H6\",\"sizePx\":16,\"sizeRem\":\"1rem\",\"lineHeight\":\"1.4\",\"weight\":600,\"font\":\"sans\",\"usage\":\"Nested headings in long-form content, legal pages, deep documentation\"},{\"name\":\"Body Large\",\"sizePx\":18,\"sizeRem\":\"1.125rem\",\"lineHeight\":\"1.6\",\"weight\":400,\"font\":\"sans\",\"usage\":\"Lead paragraphs\"},{\"name\":\"Body\",\"sizePx\":16,\"sizeRem\":\"1rem\",\"lineHeight\":\"1.6\",\"weight\":400,\"font\":\"sans\",\"usage\":\"Default body text\"},{\"name\":\"Body Small\",\"sizePx\":14,\"sizeRem\":\"0.875rem\",\"lineHeight\":\"1.5\",\"weight\":400,\"font\":\"sans\",\"usage\":\"Secondary text, descriptions\"},{\"name\":\"Caption\",\"sizePx\":12,\"sizeRem\":\"0.75rem\",\"lineHeight\":\"1.5\",\"weight\":400,\"font\":\"sans\",\"usage\":\"Labels, metadata, timestamps\"},{\"name\":\"Code\",\"sizePx\":14,\"sizeRem\":\"0.875rem\",\"lineHeight\":\"1.6\",\"weight\":400,\"font\":\"mono\",\"usage\":\"Code blocks, terminal output\"}]},\"spacing\":[{\"name\":\"xxs\",\"px\":2,\"rem\":\"0.125rem\",\"usage\":\"Hairline gaps — chip-in-chip, icon-to-badge, inline meta separators\"},{\"name\":\"xs\",\"px\":4,\"rem\":\"0.25rem\",\"usage\":\"Tight gaps, icon padding\"},{\"name\":\"xs-plus\",\"px\":6,\"rem\":\"0.375rem\",\"usage\":\"Icon-to-text offset, tight inline spacing\"},{\"name\":\"sm\",\"px\":8,\"rem\":\"0.5rem\",\"usage\":\"Compact spacing, inline gaps\"},{\"name\":\"sm-plus\",\"px\":10,\"rem\":\"0.625rem\",\"usage\":\"Dense tag padding, compact button icons\"},{\"name\":\"md\",\"px\":12,\"rem\":\"0.75rem\",\"usage\":\"Compact component padding — dense layouts, secondary surfaces\"},{\"name\":\"base\",\"px\":16,\"rem\":\"1rem\",\"usage\":\"Default component padding — cards, inputs, comfortable density\"},{\"name\":\"base-plus\",\"px\":20,\"rem\":\"1.25rem\",\"usage\":\"Comfortable component padding — the modern SaaS default (Linear, Vercel, Stripe)\"},{\"name\":\"lg\",\"px\":24,\"rem\":\"1.5rem\",\"usage\":\"Section padding, card gaps\"},{\"name\":\"xl\",\"px\":32,\"rem\":\"2rem\",\"usage\":\"Page margins, large gaps\"},{\"name\":\"xl-plus\",\"px\":40,\"rem\":\"2.5rem\",\"usage\":\"Section-header-to-content gap, large card spacing\"},{\"name\":\"2xl\",\"px\":48,\"rem\":\"3rem\",\"usage\":\"Section margins\"},{\"name\":\"2xl-plus\",\"px\":56,\"rem\":\"3.5rem\",\"usage\":\"Between major content blocks\"},{\"name\":\"3xl\",\"px\":64,\"rem\":\"4rem\",\"usage\":\"Page section spacing\"},{\"name\":\"4xl\",\"px\":80,\"rem\":\"5rem\",\"usage\":\"Page section spacing on desktop — hero breathing room\"},{\"name\":\"5xl\",\"px\":96,\"rem\":\"6rem\",\"usage\":\"Hero section spacing — prominent landing blocks\"},{\"name\":\"6xl\",\"px\":128,\"rem\":\"8rem\",\"usage\":\"Page hero spacing — full-viewport feature sections\"}],\"radii\":{\"lg\":\"14px\",\"md\":\"12px\",\"sm\":\"7px\",\"xl\":\"17px\",\"2xl\":\"17px\",\"base\":\"14px\",\"full\":\"9999px\",\"system\":\"Ecosystem numbers: 7, 12, 14, 17. Buttons are always pill (rounded-full).\"},\"semanticColors\":[{\"name\":\"accent\",\"light\":\"#E3F2FD\",\"dark\":\"#001F3F\",\"usage\":\"Hover fills, selected rows, soft highlights. Cobalt container.\"},{\"name\":\"border\",\"light\":\"#E7E5E0\",\"dark\":\"#2A2927\",\"usage\":\"Canonical border color — cards, inputs, dividers, tables. Warm stone, not cool gray.\"},{\"name\":\"brand-accent\",\"light\":\"#4B0082\",\"dark\":\"#B388FF\",\"usage\":\"Per-app/per-context saturated brand mineral for accent fills and CTAs. Defaults to tanzanite — the Mukoko/Nyuchi brand mineral. Swappable per app or per-event/category (nhimbe). Distinct from the semantic --accent (a pale container for hover/selected states).\"},{\"name\":\"destructive-container\",\"light\":\"#FDEDED\",\"dark\":\"#3E1818\",\"usage\":\"Soft background behind destructive content. Follows mineral container pattern.\"},{\"name\":\"error\",\"light\":\"#B3261E\",\"dark\":\"#F2B8B5\",\"usage\":\"Error states, destructive actions\"},{\"name\":\"info\",\"light\":\"#0047AB\",\"dark\":\"#00B0FF\",\"usage\":\"Informational states\"},{\"name\":\"input\",\"light\":\"#FFFFFF\",\"dark\":\"#100F0E\",\"usage\":\"Form input background — same as surface. Pill-shape provides visual distinction.\"},{\"name\":\"neutral\",\"light\":\"#55514B\",\"dark\":\"#A09C93\",\"usage\":\"Neutral / inactive status, secondary data series\"},{\"name\":\"offline\",\"light\":\"#674C32\",\"dark\":\"#BA9570\",\"usage\":\"Offline / disconnected state\"},{\"name\":\"primary\",\"light\":\"#4B0082\",\"dark\":\"#B388FF\",\"usage\":\"Primary brand action color — tanzanite (the Mukoko/Nyuchi brand mineral). Maps to --color-tanzanite. Cobalt is the exceptional mineral for links/info only (see the info token) — do not use it as --primary.\"},{\"name\":\"ring\",\"light\":\"#0047AB\",\"dark\":\"#00B0FF\",\"usage\":\"Focus ring color — cobalt. 2px width, 2px offset (see brand_meta.accessibility).\"},{\"name\":\"success\",\"light\":\"#004D40\",\"dark\":\"#64FFDA\",\"usage\":\"Success states, positive actions\"},{\"name\":\"syncing\",\"light\":\"#1C5962\",\"dark\":\"#36ABBA\",\"usage\":\"In-progress sync / pending state\"},{\"name\":\"warning\",\"light\":\"#7A5C00\",\"dark\":\"#FFD866\",\"usage\":\"Warning states, caution\"}],\"backgrounds\":[{\"name\":\"base\",\"light\":\"#F3F3F1\",\"dark\":\"#0E0D0C\",\"usage\":\"Page background — ambient base surface (prime step P5)\"},{\"name\":\"container\",\"light\":\"#E5E4E1\",\"dark\":\"#1E1D1A\",\"usage\":\"Neutral containers, grouped content (prime step P11)\"},{\"name\":\"muted\",\"light\":\"#FAF9F5\",\"dark\":\"#050504\",\"usage\":\"Deepest fill — inset sections, metadata rows, maximum text contrast\"},{\"name\":\"overlay\",\"light\":\"#E0DFDC\",\"dark\":\"#23221F\",\"usage\":\"Overlays and dialogs (prime step P13)\"},{\"name\":\"pitch\",\"light\":\"#FAFAFA\",\"dark\":\"#050505\",\"usage\":\"Deepest surface — media wells, splash (prime step P2)\"},{\"name\":\"raised\",\"light\":\"#D6D5D1\",\"dark\":\"#2E2C29\",\"usage\":\"Raised elements above overlay — menus, toasts (prime step P17)\"},{\"name\":\"scrim\",\"light\":\"rgba(0,0,0,0.40)\",\"dark\":\"rgba(0,0,0,0.60)\",\"usage\":\"Semi-transparent backdrop behind overlays\"},{\"name\":\"surface\",\"light\":\"#EEEEEC\",\"dark\":\"#131211\",\"usage\":\"Card / panel surface (prime step P7)\"},{\"name\":\"void\",\"light\":\"#F8F8F7\",\"dark\":\"#080807\",\"usage\":\"App shell behind base (prime step P3)\"},{\"name\":\"wash\",\"light\":\"color-mix(in oklab, var(--surface) 93%, var(--brand-accent))\",\"dark\":\"color-mix(in oklab, var(--surface) 88%, var(--brand-accent))\",\"usage\":\"Cover-colour page wash — surface tinted with the active brand accent (~7% light / ~12% dark)\"}],\"heritage\":[{\"name\":\"indigo\",\"hex\":\"#7986CB\",\"lightHex\":\"#4527A0\",\"darkHex\":\"#7986CB\",\"cssVar\":\"--color-indigo\",\"origin\":\"Indigofera, West Africa textile tradition\",\"symbolism\":\"Dusk, depth, the dyer's craft\",\"usage\":\"Twilight surfaces, deep atmosphere, mini-app moods\"},{\"name\":\"savanna\",\"hex\":\"#E5C158\",\"lightHex\":\"#8D6E1A\",\"darkHex\":\"#E5C158\",\"cssVar\":\"--color-savanna\",\"origin\":\"Sub-Saharan grasslands\",\"symbolism\":\"Sun-dried grass, open land, the dry season\",\"usage\":\"Warm grassland surfaces, daylight atmosphere\"},{\"name\":\"baobab\",\"hex\":\"#A1887F\",\"lightHex\":\"#4E342E\",\"darkHex\":\"#A1887F\",\"cssVar\":\"--color-baobab\",\"origin\":\"Adansonia, across the African continent\",\"symbolism\":\"The tree of life, age, shelter\",\"usage\":\"Earthy surfaces, grounded atmosphere, bark tones\"},{\"name\":\"sunset\",\"hex\":\"#FF7043\",\"lightHex\":\"#D84315\",\"darkHex\":\"#FF7043\",\"cssVar\":\"--color-sunset\",\"origin\":\"The African horizon at dusk\",\"symbolism\":\"Day's end, warmth, the gathering hour\",\"usage\":\"Warm accent surfaces, golden-hour atmosphere\"},{\"name\":\"river\",\"hex\":\"#4DD0E1\",\"lightHex\":\"#006064\",\"darkHex\":\"#4DD0E1\",\"cssVar\":\"--color-river\",\"origin\":\"The great African rivers — Zambezi, Nile, Congo\",\"symbolism\":\"Flow, life, the journey\",\"usage\":\"Cool surfaces, flowing atmosphere, water tones\"},{\"name\":\"hematite\",\"hex\":\"#90A4AE\",\"lightHex\":\"#546E7A\",\"darkHex\":\"#90A4AE\",\"cssVar\":\"--color-hematite\",\"origin\":\"Sishen & Thabazimbi, South Africa\",\"symbolism\":\"Foundation, endurance, the substrate\",\"usage\":\"Neutral anchor, mini-app surfaces, atmosphere\"},{\"name\":\"kalahari\",\"hex\":\"#E8D9B5\",\"lightHex\":\"#C9B589\",\"darkHex\":\"#E8D9B5\",\"cssVar\":\"--color-kalahari\",\"origin\":\"Kalahari & Namib, Southern Africa\",\"symbolism\":\"Openness, space, the light pole\",\"usage\":\"Light anchor, warm backgrounds, mini-app surfaces\"}],\"experimental\":[{\"name\":\"ember\",\"hex\":\"#DA8766\",\"lightHex\":\"#843D20\",\"darkHex\":\"#DA8766\",\"containerLight\":\"#EBDFDB\",\"containerDark\":\"#352721\",\"onContainerLight\":\"#7A3115\",\"onContainerDark\":\"#EBA68A\",\"uiLight\":\"#CD5F33\",\"uiDark\":\"#BB562D\",\"cssVar\":\"--color-ember\",\"heptagonIndex\":0},{\"name\":\"acacia\",\"hex\":\"#93A528\",\"lightHex\":\"#4D5615\",\"darkHex\":\"#93A528\",\"containerLight\":\"#E9EBDB\",\"containerDark\":\"#333521\",\"onContainerLight\":\"#48510E\",\"onContainerDark\":\"#B6CE23\",\"uiLight\":\"#7E8C22\",\"uiDark\":\"#768420\",\"cssVar\":\"--color-acacia\",\"heptagonIndex\":1},{\"name\":\"fern\",\"hex\":\"#2CB42B\",\"lightHex\":\"#175E17\",\"darkHex\":\"#2CB42B\",\"containerLight\":\"#DBEBDB\",\"containerDark\":\"#213521\",\"onContainerLight\":\"#0F570F\",\"onContainerDark\":\"#28DB28\",\"uiLight\":\"#259725\",\"uiDark\":\"#228D22\",\"cssVar\":\"--color-fern\",\"heptagonIndex\":2},{\"name\":\"lagoon\",\"hex\":\"#2AAE9B\",\"lightHex\":\"#165B51\",\"darkHex\":\"#2AAE9B\",\"containerLight\":\"#DBEBE9\",\"containerDark\":\"#213532\",\"onContainerLight\":\"#0E554B\",\"onContainerDark\":\"#24D6BC\",\"uiLight\":\"#249383\",\"uiDark\":\"#218A7A\",\"cssVar\":\"--color-lagoon\",\"heptagonIndex\":3},{\"name\":\"storm\",\"hex\":\"#7E9BE0\",\"lightHex\":\"#284CA6\",\"darkHex\":\"#7E9BE0\",\"containerLight\":\"#DBE0EB\",\"containerDark\":\"#212735\",\"onContainerLight\":\"#1A409B\",\"onContainerDark\":\"#99B2EE\",\"uiLight\":\"#577BD6\",\"uiDark\":\"#426CD1\",\"cssVar\":\"--color-storm\",\"heptagonIndex\":4},{\"name\":\"dusk\",\"hex\":\"#BA87E2\",\"lightHex\":\"#742AAD\",\"darkHex\":\"#BA87E2\",\"containerLight\":\"#E4DBEB\",\"containerDark\":\"#2D2135\",\"onContainerLight\":\"#661B9E\",\"onContainerDark\":\"#CC9FEF\",\"uiLight\":\"#A35DD8\",\"uiDark\":\"#9749D3\",\"cssVar\":\"--color-dusk\",\"heptagonIndex\":5},{\"name\":\"protea\",\"hex\":\"#DF7BB4\",\"lightHex\":\"#932464\",\"darkHex\":\"#DF7BB4\",\"containerLight\":\"#EBDBE4\",\"containerDark\":\"#35212D\",\"onContainerLight\":\"#841656\",\"onContainerDark\":\"#ED98C9\",\"uiLight\":\"#D34998\",\"uiDark\":\"#CA3188\",\"cssVar\":\"--color-protea\",\"heptagonIndex\":6}],\"componentSpecs\":[{\"name\":\"button\",\"note\":\"Buttons are ALWAYS pill-shaped (rounded-full). Brand identity decision.\",\"heights\":{\"lg\":56,\"sm\":48,\"icon\":48,\"default\":56},\"padding\":\"px-4 (sm), px-5 (default), px-6 (lg)\",\"variants\":[\"default\",\"destructive\",\"outline\",\"secondary\",\"ghost\",\"link\"],\"borderRadius\":9999,\"minTouchTarget\":48},{\"name\":\"input\",\"note\":\"Inputs are pill-shaped to match buttons.\",\"heights\":{\"sm\":48,\"default\":56},\"padding\":\"px-4\",\"variants\":[\"default\",\"error\"],\"borderRadius\":9999,\"minTouchTarget\":48},{\"name\":\"avatar\",\"heights\":{\"lg\":48,\"sm\":32,\"xl\":64,\"xs\":24,\"default\":40},\"padding\":\"none\",\"variants\":[\"image\",\"fallback\"],\"borderRadius\":9999,\"minTouchTarget\":48},{\"name\":\"badge\",\"heights\":{\"default\":22},\"padding\":\"px-2.5 py-0.5\",\"variants\":[\"default\",\"secondary\",\"destructive\",\"outline\"],\"borderRadius\":9999,\"minTouchTarget\":48},{\"name\":\"card\",\"note\":\"Cards use --radius-lg (14px) with a full 1px border and compact 14px padding (4.2.0 density refresh).\",\"heights\":{\"auto\":0},\"padding\":\"p-3.5\",\"variants\":[\"default\",\"accented\",\"clickable\"],\"borderRadius\":14,\"minTouchTarget\":48},{\"name\":\"dialog\",\"note\":\"Dialogs use --radius-xl (17px).\",\"heights\":{\"auto\":0},\"padding\":\"p-5\",\"variants\":[\"default\"],\"borderRadius\":17,\"minTouchTarget\":48},{\"name\":\"toggle\",\"heights\":{\"default\":24},\"padding\":\"none\",\"variants\":[\"on\",\"off\"],\"borderRadius\":9999,\"minTouchTarget\":48},{\"name\":\"checkbox\",\"note\":\"Checkboxes use --radius-sm (7px).\",\"heights\":{\"default\":20},\"padding\":\"none\",\"variants\":[\"checked\",\"unchecked\",\"indeterminate\"],\"borderRadius\":7,\"minTouchTarget\":48},{\"name\":\"tabs\",\"note\":\"Tab triggers use --radius-xl (17px).\",\"heights\":{\"default\":48},\"padding\":\"px-4\",\"variants\":[\"default\",\"underline\"],\"borderRadius\":17,\"minTouchTarget\":48}],\"accessibility\":{\"standard\":\"APCA 3.0 AAA\",\"screenReaders\":\"Semantic HTML with ARIA attributes where needed\",\"focusIndicator\":\"2px ring with ring-offset-2, using --ring token\",\"minTouchTarget\":48,\"defaultTouchTarget\":56,\"keyboardNavigation\":\"Full keyboard support via Radix UI primitives\",\"contrastDescription\":\"Advanced Perceptual Contrast Algorithm for superior readability across all mineral colors\"},\"voiceAndTone\":{\"doList\":[\"Use lowercase for all brand wordmarks (mukoko, nyuchi, shamwari, bundu, nhimbe)\",\"Reference African origins and meanings when contextually appropriate\",\"Write in a way that welcomes both technical and non-technical readers\",\"Use inclusive language that reflects Ubuntu philosophy\"],\"dontList\":[\"Don't capitalize brand wordmarks (not Mukoko, not NYUCHI)\",\"Don't use overly formal or corporate language\",\"Don't assume Western-centric cultural references\",\"Don't use jargon without explanation\"],\"principles\":[\"Speak like a knowledgeable friend, not a corporation\",\"Use simple, clear language — avoid jargon\",\"Be warm and encouraging, never condescending\",\"Respect African cultural context and diversity\",\"Prefer active voice and direct address\"]},\"philosophy\":{\"name\":\"Ubuntu\",\"shona\":\"Ndiri nekuti tiri\",\"meaning\":\"I am because we are\",\"triMode\":[{\"name\":\"Musha\",\"meaning\":\"Home\",\"description\":\"The foreground experience — the app you open and dwell in.\"},{\"name\":\"Basa\",\"meaning\":\"Work\",\"description\":\"The background service — data and capabilities other apps consume.\"},{\"name\":\"Nhaka\",\"meaning\":\"Heritage\",\"description\":\"The open data contribution — anonymised data flowing into the continental knowledge commons.\"}],\"covenants\":[\"We will never sell your personal data.\",\"We will never design for addiction.\",\"We will never let advertisers control what you see.\",\"We will never abandon African creators.\",\"We will never choose proprietary when open source is adequate.\",\"We will never treat African languages as an afterthought.\",\"We will never abandon our values when growth demands it.\"],\"description\":\"Every decision we make, every feature we build, every line of code we write runs through a single filter: does this strengthen the community, or does it extract from it?\",\"ubuntuPillars\":[{\"name\":\"family\",\"shona\":\"Mhuri\",\"title\":\"Family\"},{\"name\":\"community\",\"shona\":\"Nharaunda\",\"title\":\"Community\"},{\"name\":\"society\",\"shona\":\"Vanhu\",\"title\":\"Society\"},{\"name\":\"environment\",\"shona\":\"Zvakatipoteredza\",\"title\":\"Environment\"},{\"name\":\"spirituality\",\"shona\":\"Unhu\",\"title\":\"Spirituality\"}],\"ubuntuQuestions\":[\"Does this strengthen community?\",\"Does this respect human dignity?\",\"Does this serve the collective good?\",\"Would we explain this proudly to our elders?\",\"Does this align with 'I am because we are'?\"],\"ubuntuPrinciples\":[{\"name\":\"survival\",\"shona\":\"Kurarama\",\"title\":\"Survival\"},{\"name\":\"solidarity\",\"shona\":\"Kubatana\",\"title\":\"Solidarity\"},{\"name\":\"compassion\",\"shona\":\"Tsitsi\",\"title\":\"Compassion\"},{\"name\":\"respect\",\"shona\":\"Ruremekedzo\",\"title\":\"Respect\"},{\"name\":\"dignity\",\"shona\":\"Chiremerera\",\"title\":\"Dignity\"}],\"architecturalPillars\":[{\"name\":\"Local-First\",\"description\":\"The device is the primary processing surface. Works in a village with 2G.\"},{\"name\":\"Mobile-First\",\"description\":\"Built for the reality of the African smartphone market, not San Francisco.\"},{\"name\":\"Open Source\",\"description\":\"Every critical dependency is sovereign. Speed is rented, truth is owned.\"},{\"name\":\"Open Data\",\"description\":\"Platform data belongs to Africa. Personal data stays sovereign in your pod.\"}]}}",
14
+ "architecture": "{\"data\":{\"nodes\":[{\"node_number\":1,\"sub_label\":\"tokens\",\"title\":\"Design tokens\",\"type\":\"node\",\"strand\":\"swappable\",\"backbone\":\"engineering\",\"role\":\"N1 — the only node allowed to define CSS values\",\"covenant\":\"Design decisions are data, not code.\",\"description\":\"Design decisions expressed as CSS custom properties. The token generation toolchain reads the Supabase styling collections and writes the generated palette plus each target's token file; it is TypeScript today (pnpm tokens:sync, scripts/sync-tokens.ts), and a Rust CLI binary is the target. Every other node reads tokens via var() or its platform equivalent — no node above ever declares its own colour, radius, spacing or motion duration. N1 is target-agnostic: what it emits varies by target, what it guarantees does not.\",\"stakeholder\":\"Design system maintainer\",\"implementation_rules\":[\"Define every value in :root and .dark blocks.\",\"Register tokens in the Tailwind @theme inline block so utility classes resolve.\",\"No hardcoded hex values, rgba(), or inline style={{}} outside N1.\",\"Category-to-mineral mapping lives here, not in components.\"],\"sort_order\":1,\"component_count\":20},{\"node_number\":2,\"sub_label\":\"primitive\",\"title\":\"Primitives\",\"type\":\"node\",\"strand\":\"core-guarantee\",\"backbone\":\"engineering\",\"role\":\"N2 — smallest composable unit of UI\",\"covenant\":\"A primitive does one thing well.\",\"description\":\"The smallest composable unit of UI, and framework-specific by nature: a primitive is a contract plus a token set, not one source file shared across targets. Shipping today are React (the verified Mzizi baseline) and Svelte via shadcn-svelte, both Radix + CVA — Svelte is a supported way to build a primitive, no longer the primary one. The Rust path is Dioxus, whose 0.7 Tailwind + Radix support matches this exact stack; it is metadata_only today, with zero Dioxus primitives wired. Target: primitives read accessibility state and motion config from the shared Rust WASM core. No harness and no business logic here — the harness stays N3-only.\",\"stakeholder\":\"Component library author\",\"implementation_rules\":[\"One CVA variants block per primitive; no inline conditional classes.\",\"Expose asChild / Slot where composition matters.\",\"Use Radix UI for focus, keyboard, and screen-reader behaviour.\",\"56px default / 48px minimum touch target.\"],\"sort_order\":2,\"component_count\":371},{\"node_number\":3,\"sub_label\":\"brand\",\"title\":\"Brand components\",\"type\":\"node\",\"strand\":\"shipped\",\"backbone\":\"engineering\",\"role\":\"N3 — primitives wrapped in Ubuntu\",\"covenant\":\"A brand component is a primitive with Ubuntu in it.\",\"description\":\"Primitives wrapped in Ubuntu philosophy. Brand components consume the harness for observability, motion and accessibility — every one destructures { log, motion, LiveRegion } from it, and N2 primitives never do. The harness is TypeScript today (lib/harness in mzizi-dev/mzizi-registry); the target is one shared Rust WASM core behind that same interface, so the harness is implemented once instead of once per framework. The component shell stays framework-specific either way: Dioxus on the Rust path, Svelte optional, Swift / Kotlin / ArkTS / React Native idiomatic native.\",\"stakeholder\":\"Brand system steward\",\"implementation_rules\":[\"Always destructure { log, motion, LiveRegion } from useMziziHarness.\",\"N2 primitives never import useMziziHarness directly.\",\"Every brand component carries a data-slot attribute for stable targeting.\",\"Use mineral palette tokens, not raw colour values.\"],\"sort_order\":3,\"component_count\":68},{\"node_number\":4,\"sub_label\":\"safety\",\"title\":\"Safety rails\",\"type\":\"node\",\"strand\":\"core-guarantee\",\"backbone\":\"engineering\",\"role\":\"N4 — input validation, output sanitisation, AI guardrails\",\"covenant\":\"Nothing harmful reaches the user.\",\"description\":\"Validation, sanitisation and AI guardrails. TypeScript today — Zod schemas at the entry point and the ai-safety lib wrapping completions. Target: the gate logic (permission evaluation, content moderation, wallet state, trust-score validation) compiles to WebAssembly via wasm-bindgen for the browser and to a native binary for server-side API validation, with a thin framework shell rendering the visual gate — verification-required screens, blocked states — by reading state from the module. This is Rust-as-shared-core, not Rust-as-UI: one of the two nodes with a genuine Rust implementation, because a safety gate is logic and logic does not need rewriting per target.\",\"stakeholder\":\"Security + safety engineer\",\"implementation_rules\":[\"Validate all external input with Zod schemas at the entry point.\",\"Sanitise every rich-text or MDX payload before render.\",\"Wrap AI completions with the ai-safety lib (see registry:lib).\",\"Treat every third-party response as untrusted until it clears N4.\"],\"sort_order\":4,\"component_count\":14},{\"node_number\":5,\"sub_label\":\"resilience\",\"title\":\"Resilience patterns\",\"type\":\"node\",\"strand\":\"core-guarantee\",\"backbone\":\"engineering\",\"role\":\"N5 — circuit breakers, retries, timeouts, fallback chains\",\"covenant\":\"Failure in one part never breaks the whole.\",\"description\":\"Circuit breakers, retry logic, error boundaries and fallback chains. TypeScript today — circuit-breaker, retry, timeout, fallback-chain, bulkhead, rate-limiter and chaos live in lib/ and ship as registry:lib items consumers install. Target: the resilience STATE MACHINE (circuit state closed/open/half-open, failure counts, timeout budgets) is Rust compiled to WebAssembly via wasm-bindgen, while framework components render the visual fallback — error cards, skeletons, offline banners — by reading state from the module. This is Rust-as-shared-core, not Rust-as-UI: alongside N4 it is one of the two nodes with a genuine Rust implementation, because both hold logic rather than UI. The isolation is the point and it is genuine: a UI failure cannot corrupt resilience state, and a state transition cannot block the UI thread.\",\"stakeholder\":\"Reliability engineer\",\"implementation_rules\":[\"Wrap every async boundary in SectionErrorBoundary.\",\"Use the resilience lib primitives: circuit-breaker, retry, timeout, fallback-chain, bulkhead, rate-limiter.\",\"No global error handler swallows section-level failures silently.\",\"Chaos tests exercise the resilience paths before every release.\"],\"sort_order\":5,\"component_count\":14},{\"node_number\":6,\"sub_label\":\"pages\",\"title\":\"Pages\",\"type\":\"node\",\"strand\":\"shipped\",\"backbone\":\"engineering\",\"role\":\"N6 — composition of N2 and N3, nothing implemented\",\"covenant\":\"A page is a composition, not an implementation.\",\"description\":\"Pure composition of N2 and N3 — pages arrange brand components into full-screen experiences and implement nothing. That covenant is exactly what makes N6 the cheapest node in the helix to move across targets: porting a page re-expresses an arrangement, it does not re-derive behaviour. Framework-specific like every UI node — Dioxus on the Rust path, Svelte optional, React shipping — with no Rust implementation of its own, because there is nothing here to implement. Semantic tokens only, no inline primitives.\",\"stakeholder\":\"Product engineer\",\"implementation_rules\":[\"Pages import from N2 and N3, never define new primitives.\",\"All copy, data, and metadata come from the database or props — not hardcoded.\",\"Pages can be server components by default; promote to client only when hooks are required.\",\"A node that renders a spinner or a skeleton pulls it from N2, never inlines one.\"],\"sort_order\":6,\"component_count\":52},{\"node_number\":7,\"sub_label\":\"shell\",\"title\":\"Shell\",\"type\":\"node\",\"strand\":\"shipped\",\"backbone\":\"engineering\",\"role\":\"N7 — the app chrome: header, footer, navigation, theme\",\"covenant\":\"The shell holds the product.\",\"description\":\"The app chrome — navigation, routing, theme provision and global overlays, mounted once per app. N7 is the one node that is both things at once: as UI it is framework-specific and has a Rust alternative (Dioxus on the Rust path, Svelte optional, SwiftUI / Jetpack Compose / ArkTS / React Native native), and as the mount point it is where the shared Rust WASM core is initialised once per app and its state — N4's gates, N5's resilience — made available to the component tree. TypeScript today (app/layout.tsx plus next-themes), initialising nothing from WASM.\",\"stakeholder\":\"Platform engineer\",\"implementation_rules\":[\"One <Header /> + one <Footer /> per app — the shell is singular.\",\"Shell components are the only place sticky positioning, backdrop blur, and theme-provider wiring live.\",\"The shell surfaces authentication state but never implements auth logic.\",\"Responsive by default across every breakpoint from 320px to ultra-wide.\"],\"sort_order\":7,\"component_count\":16},{\"node_number\":8,\"sub_label\":\"assurance\",\"title\":\"Assurance\",\"type\":\"node\",\"strand\":\"core-guarantee\",\"backbone\":\"engineering\",\"role\":\"N8 — observability, health monitoring, SLO tracking\",\"covenant\":\"What breaks is seen before users feel it.\",\"description\":\"The node that watches, on the engineering backbone's core-guarantee strand. Observability signal collection, SLO tracking, chaos injection, accessibility auditing and conformity checking. TypeScript today (lib/observability.ts and lib/metrics.ts in mzizi-dev/mzizi-registry). Target: the collection layer compiles to WebAssembly so the browser gathers signals without blocking the UI thread, and the same Rust builds as a native binary aggregating signals across the fleet server-side. Writes to observability_events and fundi_issues. Never stores PII — in any language. Rate-limited at the application layer.\",\"stakeholder\":\"Observability engineer\",\"implementation_rules\":[\"Every brand component emits render timing + error events via the harness.\",\"Structured logs use the [mzizi] prefix for grep-ability.\",\"MCP / API usage flows into lib/metrics.ts.\",\"Health signals are exposed at /api/v1/health; assurance dashboards read from there.\"],\"sort_order\":8,\"component_count\":14}],\"rungs\":[{\"node_number\":9,\"sub_label\":\"fundi\",\"title\":\"Fundi\",\"type\":\"rung\",\"strand\":null,\"backbone\":null,\"role\":\"N9 — the self-healing rung: consumes N8 assurance signals and remediates the root cause\",\"covenant\":\"Failure is a learning event, not a user-facing incident.\",\"description\":\"The self-healing rung — a cross-cutting base pair that bridges both backbones. A Cloudflare Worker at fundi.nyuchi.dev, TypeScript today (fundi-tester in mzizi-dev/agent-tools: a FundiAgent durable object, a */5 cron and the fundi-signals queue); a workers-rs Rust/WASM Worker is the target. NOT a Supabase Edge Function — fundi runs independently of the database vendor on Cloudflare's global edge. Triggered by Cron Triggers and Cloudflare Queues pushed by N8 signals. Reads observability_events and fundi_issues from Supabase via REST API, classifies failure severity, deduplicates against open GitHub issues, and creates structured issues with fundi:node/{n} labels for human review. Never auto-merges fixes. Logs every healing action append-only.\",\"stakeholder\":\"Fundi operator\",\"implementation_rules\":[\"The fundi worker route POST /webhook ingests and deduplicates incoming failures, authenticated by an X-Hub-Signature-256 HMAC over the raw body. It replaced the fundi-webhook Supabase edge function, which had no signature check.\",\"Cron-driven heal pass promotes fingerprinted failures into labelled GitHub issues.\",\"Append-only audit trail in fundi_healing_log, surfaced by get_healing_log; fundi_issues holds the issues themselves.\",\"On by default for nyuchi / mukoko; opt-in for external consumers.\"],\"sort_order\":9,\"component_count\":3},{\"node_number\":10,\"sub_label\":\"documentation\",\"title\":\"Documentation\",\"type\":\"rung\",\"strand\":null,\"backbone\":null,\"role\":\"N10 — the ecosystem documents itself in code\",\"covenant\":\"Every document lives here. Documents, instructions, docs, documentation — one rung, no exceptions.\",\"description\":\"The doctrine rung, and the single home for everything document-shaped: documents, instructions (including ai_instructions), docs and documentation. Conventions, covenants, guides and reference all belong to N10 — held as MDX in the repo so a document referencing something that no longer exists fails the build rather than rotting unnoticed. If an artifact is prose meant to be read, it is N10; nothing else claims it and no other rung should.\",\"stakeholder\":\"Docs maintainer\",\"implementation_rules\":[\"Mzizi documentation lives in mzizi-dev/mzizi-docs and publishes to docs.mzizi.dev (Mintlify). This supersedes the Starlight split, where bundu-docs (docs.bundu.org) and nyuchi-docs (docs.nyuchi.com) each held part of the Mzizi material — a split is exactly what this rung's covenant forbids, and it is how the same thing came to be documented twice with neither copy authoritative. Those two sites keep their own non-Mzizi content. /api/v1/docs* still returns HTTP 410 with a migrated_to map.\",\"Once docs.mzizi.dev resolves it exposes its own MCP endpoint, reachable THROUGH the main Mzizi MCP rather than as a second connection a consumer has to add. It does not resolve yet — do not document it as available until it does.\",\"Doctrine stays here, as .mdx in this repo, and that is not a contradiction of the rung above it. A doctrine page names components, nodes and rungs, so compiling it beside them is what makes a reference to something deleted fail the build. Long-form guides have no such coupling and belong in mzizi-docs. The test is whether the prose would still be checkable if it moved.\",\"Component source lives in git under components/registry/n<N>-<label>/; Supabase holds only the metadata around it, served over /api/v1/*.\",\"registry.json is a CI-verified snapshot of the registry, never hand-edited (pnpm registry:verify).\",\"MCP tools and /api/v1/stats surface live counts from the DB; never quote a hardcoded count.\"],\"sort_order\":10,\"component_count\":4},{\"node_number\":11,\"sub_label\":\"discovery\",\"title\":\"Discovery\",\"type\":\"rung\",\"strand\":null,\"backbone\":null,\"role\":\"N11 — SEO + AIO: preview images, structured data, agent-readiness; entwined through the double helix, not an outside actor\",\"covenant\":\"If the machine can't see it, it doesn't exist.\",\"description\":\"Search-engine and AI/agent optimisation — the machine-facing surface of every site. Owns social/preview images, structured data (schema.org JSON-LD), llms.txt, robots + sitemap, canonical and meta tags, and agent-readiness (MCP server-card, .well-known). N11 has no Rust implementation and no Rust alternative of its own: it holds no shared logic and no components, and rides whatever the shell renders. What it does hold is a constraint on the Rust direction — a client-rendered WASM target must prerender or server-render, or crawlers receive an empty document. A missing preview image or absent structured data is the biggest discoverability no-go: if crawlers, social scrapers and AI agents cannot parse a surface, it may as well not exist.\",\"stakeholder\":\"Growth / discoverability engineer\",\"implementation_rules\":[\"Every route ships a title, a meta description, and a dynamic OpenGraph/preview image carrying that page's title + description + site icon — never a missing or 404 image.\",\"Preview images come from ONE shared template so they stay dynamic and brand-agnostic; the site icon parameterises the brand (nyuchi / mukoko / bundu / shamwari).\",\"Emit schema.org JSON-LD for the page's primary entity; keep llms.txt and the MCP server-card current.\",\"robots.txt and sitemap.xml are generated, not hand-maintained; canonical URLs are absolute via a set metadataBase.\"],\"sort_order\":11,\"component_count\":1},{\"node_number\":12,\"sub_label\":\"skills\",\"title\":\"Skills\",\"type\":\"rung\",\"strand\":null,\"backbone\":null,\"role\":\"N12 — the skills rung: what the system knows how to do, authored in git and served from the published package\",\"covenant\":\"What the system knows how to do is teachable, not tribal.\",\"description\":\"The skills rung. Agent skills are authored in git (mzizi-dev/agent-tools, mzizi-skills/) and published as @nyuchi/mzizi-skills. The registry inlines the package at build time and serves it at /v1/skills*; the MCP bundles the same files and serves them as mzizi_get_skills; the public mzizi Claude Code plugin carries a generated copy. There is no database copy. A rung rather than a node: skills bridge both backbones — engineering practice and meaning at once — and no node imports them.\",\"stakeholder\":\"Agent-skills author\",\"implementation_rules\":[\"Skills are authored in git as mzizi-skills/skills/<name>/SKILL.md in mzizi-dev/agent-tools and published as the public npm package @nyuchi/mzizi-skills.\",\"pnpm skills:validate is the offline pre-publish gate: index.json and package.json version lockstep, frontmatter name matching the index, no unlisted skill directory.\",\"There is no database projection. The registry generates lib/skills.generated.ts and plugin/skills/ from the npm package (pnpm skills:generate, pnpm plugin:skills), each with a --check gate in CI; mcp.mzizi.dev bundles the same files at build time. A skills release reaches the API when the registry's dependency is bumped and the gateway re-pinned.\",\"api.mzizi.dev serves skills at /v1/skills* and mcp.mzizi.dev as mzizi_get_skills; consumers install with npm i -D @nyuchi/mzizi-skills and npx skills experimental_sync, or the public plugin (/plugin marketplace add mzizi-dev/mzizi-registry, /plugin install mzizi@mzizi).\"],\"sort_order\":12,\"component_count\":0}],\"strands\":[{\"name\":\"core-guarantee\",\"title\":\"Core guarantee\",\"backbone\":\"engineering\",\"covenant\":\"The guarantees travel unchanged, always.\",\"description\":\"The fixed contract — accessibility, data, resilience, observability, safety, and primitives. Every adopter, on any framework, with any visual identity, gets these unchanged; they are not configurable because they are the reason to trust Mzizi at all. An accessibility layer you can turn off is a suggestion, not a guarantee.\",\"sort_order\":1},{\"name\":\"shipped\",\"title\":\"Shipped\",\"backbone\":\"engineering\",\"covenant\":\"In the box, but free to evolve.\",\"description\":\"Nyuchi-authored components that come in the box — brand, pages, shell. Part of the framework (not app code), but unlike the core they carry no permanence promise: they evolve at product speed.\",\"sort_order\":2},{\"name\":\"swappable\",\"title\":\"Swappable\",\"backbone\":\"engineering\",\"covenant\":\"Fork along the seams, not everywhere.\",\"description\":\"The only defined fork seams — styling/tokens, the icon library, and the framework (React today, SvelteKit the declared migration target). An adopter swaps exactly these three layers and inherits everything else — forkable along seams, not forkable everywhere.\",\"sort_order\":3},{\"name\":\"spine\",\"title\":\"Spine\",\"backbone\":\"engineering\",\"covenant\":\"What makes the parts one body.\",\"description\":\"The harness — the pre-wiring backbone. Not a styling layer; a structural one. The spine holds the bindings between components and their conventions, the way the sugar-phosphate backbone holds the bases: it is what makes the strands one framework instead of a parts list.\",\"sort_order\":4},{\"name\":\"genetic-code\",\"title\":\"Genetic code\",\"backbone\":\"meaning\",\"covenant\":\"The sequence everything is read from.\",\"description\":\"The Ubuntu principles and Mzizi conventions — the sequence everything else is read from. Not documentation about the framework; instruction to it: the five Ubuntu questions, the naming conventions, the mathematical pattern language (why sizes are primes, why sets come in sevens), and Schema.org compliance.\",\"sort_order\":5},{\"name\":\"transcription\",\"title\":\"Transcription\",\"backbone\":\"meaning\",\"covenant\":\"Doctrine is data, not tribal knowledge.\",\"description\":\"Every piece of doctrine, every convention, every architectural decision stored as queryable documents in mzizi_db (component_documents) and served by the MCP. Doctrine is not tribal knowledge; it is versioned data with an audit trail that both humans and AI coding assistants query.\",\"sort_order\":6}]},\"meta\":{\"model\":\"mzizi-dna-helix\",\"node_count\":8,\"rung_count\":4,\"strand_count\":6,\"empty\":false,\"source\":\"component_documents/documentation-architecture-{nodes,strands}\",\"version\":\"v1\"}}",
15
+ "brand": "{\"$schema\":\"https://mzizi.dev/schema/brand.json\",\"@context\":\"https://schema.org\",\"@type\":\"Brand\",\"version\":\"4.0.31\",\"name\":\"The Mzizi Brand System\",\"lastUpdated\":\"2026-07-13\",\"homepage\":\"https://mzizi.dev/brand\",\"minerals\":[{\"name\":\"cobalt\",\"hex\":\"#0047AB\",\"lightHex\":\"#0047AB\",\"darkHex\":\"#00B0FF\",\"containerLight\":\"#E3F2FD\",\"containerDark\":\"#001F3F\",\"cssVar\":\"--color-cobalt\",\"origin\":\"Katanga (DRC) and Zambian Copperbelt\",\"symbolism\":\"Digital future, trust, knowledge\",\"usage\":\"Primary blue, links, CTAs\"},{\"name\":\"tanzanite\",\"hex\":\"#B388FF\",\"lightHex\":\"#4B0082\",\"darkHex\":\"#B388FF\",\"containerLight\":\"#F3E5F5\",\"containerDark\":\"#1A0033\",\"cssVar\":\"--color-tanzanite\",\"origin\":\"Merelani Hills, Tanzania\",\"symbolism\":\"Premium, creativity, connection\",\"usage\":\"Purple accent, brand/logo, social features\"},{\"name\":\"malachite\",\"hex\":\"#64FFDA\",\"lightHex\":\"#004D40\",\"darkHex\":\"#64FFDA\",\"containerLight\":\"#E0F2F1\",\"containerDark\":\"#00251A\",\"cssVar\":\"--color-malachite\",\"origin\":\"Congo Copper Belt\",\"symbolism\":\"Growth, nature, success\",\"usage\":\"Success states, positive actions\"},{\"name\":\"gold\",\"hex\":\"#FFD740\",\"lightHex\":\"#5D4037\",\"darkHex\":\"#FFD740\",\"containerLight\":\"#FFF8E1\",\"containerDark\":\"#332200\",\"cssVar\":\"--color-gold\",\"origin\":\"Ghana, South Africa, Mali\",\"symbolism\":\"Honey, rewards, warmth\",\"usage\":\"Achievements, rewards, highlights\"},{\"name\":\"terracotta\",\"hex\":\"#A0522D\",\"lightHex\":\"#A0522D\",\"darkHex\":\"#E1B07E\",\"containerLight\":\"#F5E6D3\",\"containerDark\":\"#3E2817\",\"cssVar\":\"--color-terracotta\",\"origin\":\"Pan-African Sahel\",\"symbolism\":\"Earth, community, grounding\",\"usage\":\"Community features, warmth\"},{\"name\":\"sodalite\",\"hex\":\"#283593\",\"lightHex\":\"#283593\",\"darkHex\":\"#3D5AFE\",\"containerLight\":\"#E8EAF6\",\"containerDark\":\"#0D1442\",\"cssVar\":\"--color-sodalite\",\"origin\":\"Kunene River, Namibia & South Africa\",\"symbolism\":\"Intelligence, depth, reasoning\",\"usage\":\"AI/Shamwari surfaces, deep-reasoning states\"},{\"name\":\"copper\",\"hex\":\"#BF5A36\",\"lightHex\":\"#BF5A36\",\"darkHex\":\"#FF8A65\",\"containerLight\":\"#FBE4DA\",\"containerDark\":\"#3A1A0E\",\"cssVar\":\"--color-copper\",\"origin\":\"Central African Copperbelt, Zambia & DRC\",\"symbolism\":\"Connection, foundation, stewardship\",\"usage\":\"Bundu ecosystem identity, the commons\"}],\"ecosystem\":[{\"name\":\"bundu\",\"meaning\":\"Wilderness\",\"language\":\"Shona\",\"role\":\"The ecosystem\",\"description\":\"The complete ecosystem built by Nyuchi Africa. Three pillars — mukoko (consumer super app), nyuchi (enterprise layer), and sister brands (specialist verticals) — all connected through one identity, one design system, and one open data commons.\",\"voice\":\"Visionary, grounded, inclusive\",\"mineral\":\"copper\",\"url\":\"https://www.bundu.org\"},{\"name\":\"nyuchi\",\"meaning\":\"Bee\",\"language\":\"Shona\",\"role\":\"Infrastructure & enterprise\",\"description\":\"Seven enterprise products, each with its own consumer interface and business-facing tools. API platform, web services, learning, medical, rentals, tools, and SEO manager. Every nyuchi product is a standalone product, a door into the mukoko platform, and a professional surface for the same ecosystem.\",\"voice\":\"Technical, reliable, industrious\",\"mineral\":\"gold\",\"url\":\"https://nyuchi.com\"},{\"name\":\"mukoko\",\"meaning\":\"Beehive\",\"language\":\"Shona\",\"role\":\"Africa's super app\",\"description\":\"A growing net of mini-apps — founded seventeen, four substrate components, one unified identity — grown under the Bundu Order. The digital home where a billion Africans' social, creative, commercial, civic, and economic lives belong.\",\"voice\":\"Welcoming, structured, protective\",\"mineral\":\"tanzanite\",\"url\":\"https://mukoko.com\"},{\"name\":\"shamwari\",\"meaning\":\"Friend\",\"language\":\"Shona\",\"role\":\"Sovereign AI companion\",\"description\":\"The Digital Twin's conversational interface. Three layers of intelligence — personal (your pod data), community (anonymised platform data), and platform (base mukoko knowledge). A friend that serves; a friend that does not control.\",\"voice\":\"Helpful, warm, intelligent\",\"mineral\":\"sodalite\",\"url\":\"https://shamwari.ai\"},{\"name\":\"nhimbe\",\"meaning\":\"Gathering\",\"language\":\"Shona\",\"role\":\"Events & gatherings\",\"description\":\"Community events and cultural gatherings. Standalone brand calling the same platform API. Edge-first check-in via geographic Durable Objects for sub-10ms ticket validation at venue doors.\",\"voice\":\"Celebratory, communal, vibrant\",\"mineral\":\"malachite\",\"url\":\"https://nhimbe.com\"},{\"name\":\"bushtrade\",\"meaning\":\"Bush trade\",\"language\":\"English/Shona\",\"role\":\"Marketplace\",\"description\":\"Rentals-first marketplace for Zimbabwe and beyond. Business verification through the platform's unified submissions pipeline. Escrow-backed payments via mukoko wallet. Seller conversations flow through Campfire.\",\"voice\":\"Practical, trustworthy, local\",\"mineral\":\"gold\",\"url\":\"https://bushtrade.co.zw\"},{\"name\":\"lingo\",\"meaning\":\"Language\",\"language\":\"English\",\"role\":\"Language learning\",\"description\":\"African language learning. Shona and Ndebele as primaries, English, French, Portuguese, and travel phrases. The product expression of mukoko's commitment to treating African languages as first-class citizens.\",\"voice\":\"Encouraging, cultural, playful\",\"mineral\":\"cobalt\",\"url\":\"https://lingo.mukoko.com\"},{\"name\":\"campfire\",\"meaning\":\"Campfire\",\"language\":\"English\",\"role\":\"Platform messaging anchor\",\"description\":\"All messaging and cross-app communications. The architectural anchor of the ecosystem.\",\"voice\":\"Direct, warm, always present\",\"mineral\":\"malachite\",\"url\":\"https://campfire.mukoko.com\"},{\"name\":\"bytes\",\"meaning\":\"Bytes\",\"language\":\"English\",\"role\":\"Short-form creator video\",\"description\":\"African creator video platform competing with TikTok.\",\"voice\":\"Energetic, creative, youthful\",\"mineral\":\"tanzanite\",\"url\":\"https://bytes.mukoko.com\"},{\"name\":\"novels\",\"meaning\":\"Novels\",\"language\":\"English\",\"role\":\"Publishing platform\",\"description\":\"Long-form publishing with 10 work types, co-authorship, and revenue splitting.\",\"voice\":\"Literary, thoughtful, immersive\",\"mineral\":\"malachite\",\"url\":\"https://novels.mukoko.com\"},{\"name\":\"places\",\"meaning\":\"Places\",\"language\":\"English\",\"role\":\"Geographic knowledge graph\",\"description\":\"Africa's rival to Google Business Profile + Maps for formal and informal economies.\",\"voice\":\"Authoritative, helpful, discoverable\",\"mineral\":\"gold\",\"url\":\"https://places.mukoko.com\"},{\"name\":\"transport\",\"meaning\":\"Transport\",\"language\":\"English\",\"role\":\"Public transit and booking\",\"description\":\"Public transit routing, vehicle booking, commute planning for African cities.\",\"voice\":\"Efficient, reliable, practical\",\"mineral\":\"gold\",\"url\":\"https://transport.mukoko.com\"},{\"name\":\"planner\",\"meaning\":\"Planner\",\"language\":\"English\",\"role\":\"Productivity hub\",\"description\":\"Calendar, tasks, notes, bookings — single source of truth for scheduling.\",\"voice\":\"Organised, clear, supportive\",\"mineral\":\"cobalt\",\"url\":\"https://planner.mukoko.com\"},{\"name\":\"wallet\",\"meaning\":\"Wallet\",\"language\":\"English\",\"role\":\"Payments and tokens\",\"description\":\"MUKOKO tokens, mobile money, bank transfers. No bank account required.\",\"voice\":\"Trustworthy, precise, secure\",\"mineral\":\"gold\",\"url\":\"https://wallet.mukoko.com\"},{\"name\":\"pulse\",\"meaning\":\"Pulse\",\"language\":\"English\",\"role\":\"Feed and Mukoko Home\",\"description\":\"Personalised content feed and agentic dashboard.\",\"voice\":\"Personal, adaptive, ambient\",\"mineral\":\"tanzanite\",\"url\":\"https://pulse.mukoko.com\"},{\"name\":\"health\",\"meaning\":\"Health\",\"language\":\"English\",\"role\":\"Wellness and telemedicine\",\"description\":\"Health info, telemedicine booking, medication reminders. Connected to Nyuchi Medical.\",\"voice\":\"Caring, accurate, private\",\"mineral\":\"malachite\",\"url\":\"https://health.mukoko.com\"},{\"name\":\"circles\",\"meaning\":\"Circles\",\"language\":\"English\",\"role\":\"Community messaging\",\"description\":\"Community channels — WhatsApp groups, Discord servers for Africa.\",\"voice\":\"Inclusive, moderated, community-driven\",\"mineral\":\"terracotta\",\"url\":\"https://circles.mukoko.com\"},{\"name\":\"mzizi\",\"meaning\":\"Root\",\"language\":\"Swahili\",\"role\":\"Language, registry and design system\",\"description\":\"The Mzizi language, component registry and design system — owned and governed by Mzizi, operated by Nyuchi. The language is a research-stage prototype designed for machine authorship, where everything built carries a contract.\",\"voice\":\"Precise, honest, grounded\",\"mineral\":\"hematite\",\"url\":\"https://mzizi.dev\"}],\"typography\":{\"fonts\":{\"sans\":{\"family\":\"Noto Sans\",\"usage\":\"All body text, UI labels\",\"reason\":\"Broad language support including African languages and diacritics\"},\"serif\":{\"family\":\"Noto Serif\",\"usage\":\"Page titles, hero text, display headings\",\"reason\":\"Elegant display type with matching language coverage\"},\"mono\":{\"family\":\"JetBrains Mono\",\"usage\":\"Code blocks, terminal output, technical content\",\"reason\":\"Purpose-built for developer readability\"}},\"scale\":[{\"name\":\"Display\",\"sizePx\":72,\"sizeRem\":\"4.5rem\",\"lineHeight\":\"1.1\",\"weight\":700,\"font\":\"serif\",\"usage\":\"Hero headlines, landing pages\"},{\"name\":\"Display Small\",\"sizePx\":60,\"sizeRem\":\"3.75rem\",\"lineHeight\":\"1.1\",\"weight\":700,\"font\":\"serif\",\"usage\":\"Secondary hero headlines, landing page sub-hero sections\"},{\"name\":\"H1\",\"sizePx\":48,\"sizeRem\":\"3rem\",\"lineHeight\":\"1.15\",\"weight\":700,\"font\":\"serif\",\"usage\":\"Page titles\"},{\"name\":\"H2\",\"sizePx\":36,\"sizeRem\":\"2.25rem\",\"lineHeight\":\"1.2\",\"weight\":600,\"font\":\"serif\",\"usage\":\"Section headings\"},{\"name\":\"H3\",\"sizePx\":30,\"sizeRem\":\"1.875rem\",\"lineHeight\":\"1.25\",\"weight\":600,\"font\":\"serif\",\"usage\":\"Sub-section headings\"},{\"name\":\"H4\",\"sizePx\":24,\"sizeRem\":\"1.5rem\",\"lineHeight\":\"1.3\",\"weight\":600,\"font\":\"sans\",\"usage\":\"Card titles, group headings\"},{\"name\":\"H5\",\"sizePx\":20,\"sizeRem\":\"1.25rem\",\"lineHeight\":\"1.4\",\"weight\":600,\"font\":\"sans\",\"usage\":\"Small headings\"},{\"name\":\"H6\",\"sizePx\":16,\"sizeRem\":\"1rem\",\"lineHeight\":\"1.4\",\"weight\":600,\"font\":\"sans\",\"usage\":\"Nested headings in long-form content, legal pages, deep documentation\"},{\"name\":\"Body Large\",\"sizePx\":18,\"sizeRem\":\"1.125rem\",\"lineHeight\":\"1.6\",\"weight\":400,\"font\":\"sans\",\"usage\":\"Lead paragraphs\"},{\"name\":\"Body\",\"sizePx\":16,\"sizeRem\":\"1rem\",\"lineHeight\":\"1.6\",\"weight\":400,\"font\":\"sans\",\"usage\":\"Default body text\"},{\"name\":\"Body Small\",\"sizePx\":14,\"sizeRem\":\"0.875rem\",\"lineHeight\":\"1.5\",\"weight\":400,\"font\":\"sans\",\"usage\":\"Secondary text, descriptions\"},{\"name\":\"Caption\",\"sizePx\":12,\"sizeRem\":\"0.75rem\",\"lineHeight\":\"1.5\",\"weight\":400,\"font\":\"sans\",\"usage\":\"Labels, metadata, timestamps\"},{\"name\":\"Code\",\"sizePx\":14,\"sizeRem\":\"0.875rem\",\"lineHeight\":\"1.6\",\"weight\":400,\"font\":\"mono\",\"usage\":\"Code blocks, terminal output\"}]},\"spacing\":[{\"name\":\"xxs\",\"px\":2,\"rem\":\"0.125rem\",\"usage\":\"Hairline gaps — chip-in-chip, icon-to-badge, inline meta separators\"},{\"name\":\"xs\",\"px\":4,\"rem\":\"0.25rem\",\"usage\":\"Tight gaps, icon padding\"},{\"name\":\"xs-plus\",\"px\":6,\"rem\":\"0.375rem\",\"usage\":\"Icon-to-text offset, tight inline spacing\"},{\"name\":\"sm\",\"px\":8,\"rem\":\"0.5rem\",\"usage\":\"Compact spacing, inline gaps\"},{\"name\":\"sm-plus\",\"px\":10,\"rem\":\"0.625rem\",\"usage\":\"Dense tag padding, compact button icons\"},{\"name\":\"md\",\"px\":12,\"rem\":\"0.75rem\",\"usage\":\"Compact component padding — dense layouts, secondary surfaces\"},{\"name\":\"base\",\"px\":16,\"rem\":\"1rem\",\"usage\":\"Default component padding — cards, inputs, comfortable density\"},{\"name\":\"base-plus\",\"px\":20,\"rem\":\"1.25rem\",\"usage\":\"Comfortable component padding — the modern SaaS default (Linear, Vercel, Stripe)\"},{\"name\":\"lg\",\"px\":24,\"rem\":\"1.5rem\",\"usage\":\"Section padding, card gaps\"},{\"name\":\"xl\",\"px\":32,\"rem\":\"2rem\",\"usage\":\"Page margins, large gaps\"},{\"name\":\"xl-plus\",\"px\":40,\"rem\":\"2.5rem\",\"usage\":\"Section-header-to-content gap, large card spacing\"},{\"name\":\"2xl\",\"px\":48,\"rem\":\"3rem\",\"usage\":\"Section margins\"},{\"name\":\"2xl-plus\",\"px\":56,\"rem\":\"3.5rem\",\"usage\":\"Between major content blocks\"},{\"name\":\"3xl\",\"px\":64,\"rem\":\"4rem\",\"usage\":\"Page section spacing\"},{\"name\":\"4xl\",\"px\":80,\"rem\":\"5rem\",\"usage\":\"Page section spacing on desktop — hero breathing room\"},{\"name\":\"5xl\",\"px\":96,\"rem\":\"6rem\",\"usage\":\"Hero section spacing — prominent landing blocks\"},{\"name\":\"6xl\",\"px\":128,\"rem\":\"8rem\",\"usage\":\"Page hero spacing — full-viewport feature sections\"}],\"radii\":{\"lg\":\"14px\",\"md\":\"12px\",\"sm\":\"7px\",\"xl\":\"17px\",\"2xl\":\"17px\",\"base\":\"14px\",\"full\":\"9999px\",\"system\":\"Ecosystem numbers: 7, 12, 14, 17. Buttons are always pill (rounded-full).\"},\"semanticColors\":[{\"name\":\"accent\",\"light\":\"#E3F2FD\",\"dark\":\"#001F3F\",\"usage\":\"Hover fills, selected rows, soft highlights. Cobalt container.\"},{\"name\":\"border\",\"light\":\"#E7E5E0\",\"dark\":\"#2A2927\",\"usage\":\"Canonical border color — cards, inputs, dividers, tables. Warm stone, not cool gray.\"},{\"name\":\"brand-accent\",\"light\":\"#4B0082\",\"dark\":\"#B388FF\",\"usage\":\"Per-app/per-context saturated brand mineral for accent fills and CTAs. Defaults to tanzanite — the Mukoko/Nyuchi brand mineral. Swappable per app or per-event/category (nhimbe). Distinct from the semantic --accent (a pale container for hover/selected states).\"},{\"name\":\"destructive-container\",\"light\":\"#FDEDED\",\"dark\":\"#3E1818\",\"usage\":\"Soft background behind destructive content. Follows mineral container pattern.\"},{\"name\":\"error\",\"light\":\"#B3261E\",\"dark\":\"#F2B8B5\",\"usage\":\"Error states, destructive actions\"},{\"name\":\"info\",\"light\":\"#0047AB\",\"dark\":\"#00B0FF\",\"usage\":\"Informational states\"},{\"name\":\"input\",\"light\":\"#FFFFFF\",\"dark\":\"#100F0E\",\"usage\":\"Form input background — same as surface. Pill-shape provides visual distinction.\"},{\"name\":\"neutral\",\"light\":\"#55514B\",\"dark\":\"#A09C93\",\"usage\":\"Neutral / inactive status, secondary data series\"},{\"name\":\"offline\",\"light\":\"#674C32\",\"dark\":\"#BA9570\",\"usage\":\"Offline / disconnected state\"},{\"name\":\"primary\",\"light\":\"#4B0082\",\"dark\":\"#B388FF\",\"usage\":\"Primary brand action color — tanzanite (the Mukoko/Nyuchi brand mineral). Maps to --color-tanzanite. Cobalt is the exceptional mineral for links/info only (see the info token) — do not use it as --primary.\"},{\"name\":\"ring\",\"light\":\"#0047AB\",\"dark\":\"#00B0FF\",\"usage\":\"Focus ring color — cobalt. 2px width, 2px offset (see brand_meta.accessibility).\"},{\"name\":\"success\",\"light\":\"#004D40\",\"dark\":\"#64FFDA\",\"usage\":\"Success states, positive actions\"},{\"name\":\"syncing\",\"light\":\"#1C5962\",\"dark\":\"#36ABBA\",\"usage\":\"In-progress sync / pending state\"},{\"name\":\"warning\",\"light\":\"#7A5C00\",\"dark\":\"#FFD866\",\"usage\":\"Warning states, caution\"}],\"backgrounds\":[{\"name\":\"base\",\"light\":\"#F3F3F1\",\"dark\":\"#0E0D0C\",\"usage\":\"Page background — ambient base surface (prime step P5)\"},{\"name\":\"container\",\"light\":\"#E5E4E1\",\"dark\":\"#1E1D1A\",\"usage\":\"Neutral containers, grouped content (prime step P11)\"},{\"name\":\"muted\",\"light\":\"#FAF9F5\",\"dark\":\"#050504\",\"usage\":\"Deepest fill — inset sections, metadata rows, maximum text contrast\"},{\"name\":\"overlay\",\"light\":\"#E0DFDC\",\"dark\":\"#23221F\",\"usage\":\"Overlays and dialogs (prime step P13)\"},{\"name\":\"pitch\",\"light\":\"#FAFAFA\",\"dark\":\"#050505\",\"usage\":\"Deepest surface — media wells, splash (prime step P2)\"},{\"name\":\"raised\",\"light\":\"#D6D5D1\",\"dark\":\"#2E2C29\",\"usage\":\"Raised elements above overlay — menus, toasts (prime step P17)\"},{\"name\":\"scrim\",\"light\":\"rgba(0,0,0,0.40)\",\"dark\":\"rgba(0,0,0,0.60)\",\"usage\":\"Semi-transparent backdrop behind overlays\"},{\"name\":\"surface\",\"light\":\"#EEEEEC\",\"dark\":\"#131211\",\"usage\":\"Card / panel surface (prime step P7)\"},{\"name\":\"void\",\"light\":\"#F8F8F7\",\"dark\":\"#080807\",\"usage\":\"App shell behind base (prime step P3)\"},{\"name\":\"wash\",\"light\":\"color-mix(in oklab, var(--surface) 93%, var(--brand-accent))\",\"dark\":\"color-mix(in oklab, var(--surface) 88%, var(--brand-accent))\",\"usage\":\"Cover-colour page wash — surface tinted with the active brand accent (~7% light / ~12% dark)\"}],\"heritage\":[{\"name\":\"indigo\",\"hex\":\"#7986CB\",\"lightHex\":\"#4527A0\",\"darkHex\":\"#7986CB\",\"cssVar\":\"--color-indigo\",\"origin\":\"Indigofera, West Africa textile tradition\",\"symbolism\":\"Dusk, depth, the dyer's craft\",\"usage\":\"Twilight surfaces, deep atmosphere, mini-app moods\"},{\"name\":\"savanna\",\"hex\":\"#E5C158\",\"lightHex\":\"#8D6E1A\",\"darkHex\":\"#E5C158\",\"cssVar\":\"--color-savanna\",\"origin\":\"Sub-Saharan grasslands\",\"symbolism\":\"Sun-dried grass, open land, the dry season\",\"usage\":\"Warm grassland surfaces, daylight atmosphere\"},{\"name\":\"baobab\",\"hex\":\"#A1887F\",\"lightHex\":\"#4E342E\",\"darkHex\":\"#A1887F\",\"cssVar\":\"--color-baobab\",\"origin\":\"Adansonia, across the African continent\",\"symbolism\":\"The tree of life, age, shelter\",\"usage\":\"Earthy surfaces, grounded atmosphere, bark tones\"},{\"name\":\"sunset\",\"hex\":\"#FF7043\",\"lightHex\":\"#D84315\",\"darkHex\":\"#FF7043\",\"cssVar\":\"--color-sunset\",\"origin\":\"The African horizon at dusk\",\"symbolism\":\"Day's end, warmth, the gathering hour\",\"usage\":\"Warm accent surfaces, golden-hour atmosphere\"},{\"name\":\"river\",\"hex\":\"#4DD0E1\",\"lightHex\":\"#006064\",\"darkHex\":\"#4DD0E1\",\"cssVar\":\"--color-river\",\"origin\":\"The great African rivers — Zambezi, Nile, Congo\",\"symbolism\":\"Flow, life, the journey\",\"usage\":\"Cool surfaces, flowing atmosphere, water tones\"},{\"name\":\"hematite\",\"hex\":\"#90A4AE\",\"lightHex\":\"#546E7A\",\"darkHex\":\"#90A4AE\",\"cssVar\":\"--color-hematite\",\"origin\":\"Sishen & Thabazimbi, South Africa\",\"symbolism\":\"Foundation, endurance, the substrate\",\"usage\":\"Neutral anchor, mini-app surfaces, atmosphere\"},{\"name\":\"kalahari\",\"hex\":\"#E8D9B5\",\"lightHex\":\"#C9B589\",\"darkHex\":\"#E8D9B5\",\"cssVar\":\"--color-kalahari\",\"origin\":\"Kalahari & Namib, Southern Africa\",\"symbolism\":\"Openness, space, the light pole\",\"usage\":\"Light anchor, warm backgrounds, mini-app surfaces\"}],\"experimental\":[{\"name\":\"ember\",\"hex\":\"#DA8766\",\"lightHex\":\"#843D20\",\"darkHex\":\"#DA8766\",\"containerLight\":\"#EBDFDB\",\"containerDark\":\"#352721\",\"onContainerLight\":\"#7A3115\",\"onContainerDark\":\"#EBA68A\",\"uiLight\":\"#CD5F33\",\"uiDark\":\"#BB562D\",\"cssVar\":\"--color-ember\",\"heptagonIndex\":0},{\"name\":\"acacia\",\"hex\":\"#93A528\",\"lightHex\":\"#4D5615\",\"darkHex\":\"#93A528\",\"containerLight\":\"#E9EBDB\",\"containerDark\":\"#333521\",\"onContainerLight\":\"#48510E\",\"onContainerDark\":\"#B6CE23\",\"uiLight\":\"#7E8C22\",\"uiDark\":\"#768420\",\"cssVar\":\"--color-acacia\",\"heptagonIndex\":1},{\"name\":\"fern\",\"hex\":\"#2CB42B\",\"lightHex\":\"#175E17\",\"darkHex\":\"#2CB42B\",\"containerLight\":\"#DBEBDB\",\"containerDark\":\"#213521\",\"onContainerLight\":\"#0F570F\",\"onContainerDark\":\"#28DB28\",\"uiLight\":\"#259725\",\"uiDark\":\"#228D22\",\"cssVar\":\"--color-fern\",\"heptagonIndex\":2},{\"name\":\"lagoon\",\"hex\":\"#2AAE9B\",\"lightHex\":\"#165B51\",\"darkHex\":\"#2AAE9B\",\"containerLight\":\"#DBEBE9\",\"containerDark\":\"#213532\",\"onContainerLight\":\"#0E554B\",\"onContainerDark\":\"#24D6BC\",\"uiLight\":\"#249383\",\"uiDark\":\"#218A7A\",\"cssVar\":\"--color-lagoon\",\"heptagonIndex\":3},{\"name\":\"storm\",\"hex\":\"#7E9BE0\",\"lightHex\":\"#284CA6\",\"darkHex\":\"#7E9BE0\",\"containerLight\":\"#DBE0EB\",\"containerDark\":\"#212735\",\"onContainerLight\":\"#1A409B\",\"onContainerDark\":\"#99B2EE\",\"uiLight\":\"#577BD6\",\"uiDark\":\"#426CD1\",\"cssVar\":\"--color-storm\",\"heptagonIndex\":4},{\"name\":\"dusk\",\"hex\":\"#BA87E2\",\"lightHex\":\"#742AAD\",\"darkHex\":\"#BA87E2\",\"containerLight\":\"#E4DBEB\",\"containerDark\":\"#2D2135\",\"onContainerLight\":\"#661B9E\",\"onContainerDark\":\"#CC9FEF\",\"uiLight\":\"#A35DD8\",\"uiDark\":\"#9749D3\",\"cssVar\":\"--color-dusk\",\"heptagonIndex\":5},{\"name\":\"protea\",\"hex\":\"#DF7BB4\",\"lightHex\":\"#932464\",\"darkHex\":\"#DF7BB4\",\"containerLight\":\"#EBDBE4\",\"containerDark\":\"#35212D\",\"onContainerLight\":\"#841656\",\"onContainerDark\":\"#ED98C9\",\"uiLight\":\"#D34998\",\"uiDark\":\"#CA3188\",\"cssVar\":\"--color-protea\",\"heptagonIndex\":6}],\"componentSpecs\":[{\"name\":\"button\",\"note\":\"Buttons are ALWAYS pill-shaped (rounded-full). Brand identity decision.\",\"heights\":{\"lg\":56,\"sm\":48,\"icon\":48,\"default\":56},\"padding\":\"px-4 (sm), px-5 (default), px-6 (lg)\",\"variants\":[\"default\",\"destructive\",\"outline\",\"secondary\",\"ghost\",\"link\"],\"borderRadius\":9999,\"minTouchTarget\":48},{\"name\":\"input\",\"note\":\"Inputs are pill-shaped to match buttons.\",\"heights\":{\"sm\":48,\"default\":56},\"padding\":\"px-4\",\"variants\":[\"default\",\"error\"],\"borderRadius\":9999,\"minTouchTarget\":48},{\"name\":\"avatar\",\"heights\":{\"lg\":48,\"sm\":32,\"xl\":64,\"xs\":24,\"default\":40},\"padding\":\"none\",\"variants\":[\"image\",\"fallback\"],\"borderRadius\":9999,\"minTouchTarget\":48},{\"name\":\"badge\",\"heights\":{\"default\":22},\"padding\":\"px-2.5 py-0.5\",\"variants\":[\"default\",\"secondary\",\"destructive\",\"outline\"],\"borderRadius\":9999,\"minTouchTarget\":48},{\"name\":\"card\",\"note\":\"Cards use --radius-lg (14px) with a full 1px border and compact 14px padding (4.2.0 density refresh).\",\"heights\":{\"auto\":0},\"padding\":\"p-3.5\",\"variants\":[\"default\",\"accented\",\"clickable\"],\"borderRadius\":14,\"minTouchTarget\":48},{\"name\":\"dialog\",\"note\":\"Dialogs use --radius-xl (17px).\",\"heights\":{\"auto\":0},\"padding\":\"p-5\",\"variants\":[\"default\"],\"borderRadius\":17,\"minTouchTarget\":48},{\"name\":\"toggle\",\"heights\":{\"default\":24},\"padding\":\"none\",\"variants\":[\"on\",\"off\"],\"borderRadius\":9999,\"minTouchTarget\":48},{\"name\":\"checkbox\",\"note\":\"Checkboxes use --radius-sm (7px).\",\"heights\":{\"default\":20},\"padding\":\"none\",\"variants\":[\"checked\",\"unchecked\",\"indeterminate\"],\"borderRadius\":7,\"minTouchTarget\":48},{\"name\":\"tabs\",\"note\":\"Tab triggers use --radius-xl (17px).\",\"heights\":{\"default\":48},\"padding\":\"px-4\",\"variants\":[\"default\",\"underline\"],\"borderRadius\":17,\"minTouchTarget\":48}],\"accessibility\":{\"standard\":\"APCA 3.0 AAA\",\"screenReaders\":\"Semantic HTML with ARIA attributes where needed\",\"focusIndicator\":\"2px ring with ring-offset-2, using --ring token\",\"minTouchTarget\":48,\"defaultTouchTarget\":56,\"keyboardNavigation\":\"Full keyboard support via Radix UI primitives\",\"contrastDescription\":\"Advanced Perceptual Contrast Algorithm for superior readability across all mineral colors\"},\"voiceAndTone\":{\"doList\":[\"Use lowercase for all brand wordmarks (mukoko, nyuchi, shamwari, bundu, nhimbe)\",\"Reference African origins and meanings when contextually appropriate\",\"Write in a way that welcomes both technical and non-technical readers\",\"Use inclusive language that reflects Ubuntu philosophy\"],\"dontList\":[\"Don't capitalize brand wordmarks (not Mukoko, not NYUCHI)\",\"Don't use overly formal or corporate language\",\"Don't assume Western-centric cultural references\",\"Don't use jargon without explanation\"],\"principles\":[\"Speak like a knowledgeable friend, not a corporation\",\"Use simple, clear language — avoid jargon\",\"Be warm and encouraging, never condescending\",\"Respect African cultural context and diversity\",\"Prefer active voice and direct address\"]},\"philosophy\":{\"name\":\"Ubuntu\",\"shona\":\"Ndiri nekuti tiri\",\"meaning\":\"I am because we are\",\"triMode\":[{\"name\":\"Musha\",\"meaning\":\"Home\",\"description\":\"The foreground experience — the app you open and dwell in.\"},{\"name\":\"Basa\",\"meaning\":\"Work\",\"description\":\"The background service — data and capabilities other apps consume.\"},{\"name\":\"Nhaka\",\"meaning\":\"Heritage\",\"description\":\"The open data contribution — anonymised data flowing into the continental knowledge commons.\"}],\"covenants\":[\"We will never sell your personal data.\",\"We will never design for addiction.\",\"We will never let advertisers control what you see.\",\"We will never abandon African creators.\",\"We will never choose proprietary when open source is adequate.\",\"We will never treat African languages as an afterthought.\",\"We will never abandon our values when growth demands it.\"],\"description\":\"Every decision we make, every feature we build, every line of code we write runs through a single filter: does this strengthen the community, or does it extract from it?\",\"ubuntuPillars\":[{\"name\":\"family\",\"shona\":\"Mhuri\",\"title\":\"Family\"},{\"name\":\"community\",\"shona\":\"Nharaunda\",\"title\":\"Community\"},{\"name\":\"society\",\"shona\":\"Vanhu\",\"title\":\"Society\"},{\"name\":\"environment\",\"shona\":\"Zvakatipoteredza\",\"title\":\"Environment\"},{\"name\":\"spirituality\",\"shona\":\"Unhu\",\"title\":\"Spirituality\"}],\"ubuntuQuestions\":[\"Does this strengthen community?\",\"Does this respect human dignity?\",\"Does this serve the collective good?\",\"Would we explain this proudly to our elders?\",\"Does this align with 'I am because we are'?\"],\"ubuntuPrinciples\":[{\"name\":\"survival\",\"shona\":\"Kurarama\",\"title\":\"Survival\"},{\"name\":\"solidarity\",\"shona\":\"Kubatana\",\"title\":\"Solidarity\"},{\"name\":\"compassion\",\"shona\":\"Tsitsi\",\"title\":\"Compassion\"},{\"name\":\"respect\",\"shona\":\"Ruremekedzo\",\"title\":\"Respect\"},{\"name\":\"dignity\",\"shona\":\"Chiremerera\",\"title\":\"Dignity\"}],\"architecturalPillars\":[{\"name\":\"Local-First\",\"description\":\"The device is the primary processing surface. Works in a village with 2G.\"},{\"name\":\"Mobile-First\",\"description\":\"Built for the reality of the African smartphone market, not San Francisco.\"},{\"name\":\"Open Source\",\"description\":\"Every critical dependency is sovereign. Speed is rented, truth is owned.\"},{\"name\":\"Open Data\",\"description\":\"Platform data belongs to Africa. Personal data stays sovereign in your pod.\"}]}}",
16
16
  "ubuntuPillars": "{\"@context\":\"https://schema.org\",\"@type\":\"ItemList\",\"name\":\"Ubuntu Pillars\",\"description\":\"The five pillars — spheres in which Ubuntu is lived. Each pillar maps a region of life to a platform surface so the doctrine translates to software.\",\"itemListElement\":[{\"name\":\"family\",\"shona\":\"Mhuri\",\"title\":\"Family\",\"description\":\"The first sphere of Ubuntu — the household and kin who form a person's primary web of belonging. Ubuntu begins here: identity is given by family before it is given by any institution.\",\"sphere\":\"Immediate relationships — kin, household\",\"platformSurface\":\"User accounts, personal data, Digital Twin, account switching for shared devices\",\"source\":\"Mugumbate et al. (2023)\",\"sortOrder\":1},{\"name\":\"community\",\"shona\":\"Nharaunda\",\"title\":\"Community\",\"description\":\"The extended sphere of neighbours, peers, and chosen kin. Where the family ends, the community begins; the two are continuous, not opposed. Ubuntu treats community as the medium through which a person grows into society.\",\"sphere\":\"Extended relationships — neighbours, peers, chosen kin\",\"platformSurface\":\"Social features, Circles, Nhimbe gatherings, collaboration tools, contribution types\",\"source\":\"Mugumbate et al. (2023)\",\"sortOrder\":2},{\"name\":\"society\",\"shona\":\"Vanhu\",\"title\":\"Society\",\"description\":\"The broader human web — strangers, institutions, the polity. Ubuntu does not stop at the village wall; vanhu means people, all people. A person who treats strangers as strangers has not yet practised Ubuntu.\",\"sphere\":\"Broader human web — strangers, institutions\",\"platformSurface\":\"Platform ecosystem, public features, marketplace, multi-language parity\",\"source\":\"Mugumbate et al. (2023)\",\"sortOrder\":3},{\"name\":\"environment\",\"shona\":\"Zvakatipoteredza\",\"title\":\"Environment\",\"description\":\"The natural world that holds all relationships. Ubuntu is ecological before it is social — soil, water, and weather are kin too. A person who exhausts the environment has broken Ubuntu, even if they have wronged no human directly.\",\"sphere\":\"The natural world that holds all relationships\",\"platformSurface\":\"Digital footprint, sustainability, resource cost, offline-first architecture, budget-hardware performance budgets\",\"source\":\"Mugumbate et al. (2023)\",\"sortOrder\":4},{\"name\":\"spirituality\",\"shona\":\"Unhu\",\"title\":\"Spirituality\",\"description\":\"The vertical axis of being human — meaning, purpose, ancestry, and the sacred. Unhu names the inner quality from which Ubuntu flows outward. Without unhu, the four horizontal pillars are scaffolding without a soul.\",\"sphere\":\"Meaning, purpose, the vertical axis of being human\",\"platformSurface\":\"Mission alignment, cultural preservation, legacy, memorial states for ancestral accounts\",\"source\":\"Mugumbate et al. (2023)\",\"sortOrder\":5}]}",
17
17
  "ubuntuPrinciples": "{\"@context\":\"https://schema.org\",\"@type\":\"ItemList\",\"name\":\"Ubuntu Principles\",\"description\":\"The five operating principles — rules that translate Ubuntu to software engineering decisions.\",\"itemListElement\":[{\"name\":\"survival\",\"shona\":\"Kurarama\",\"title\":\"Survival\",\"description\":\"Collective endurance. No one survives alone; basic needs are met through one another. Reciprocal care sustains the community before any individual can flourish.\",\"expression\":\"Offline-first architecture, shared-device support, budget-hardware performance budget, open data commons, works in a village with 2G\",\"source\":\"Mbigi (1997), Collective Fingers Theory\",\"sortOrder\":1},{\"name\":\"solidarity\",\"shona\":\"Kubatana\",\"title\":\"Solidarity\",\"description\":\"A firm and persevering commitment to the common good. Not vague compassion but active allegiance to the welfare of the whole — kubatana means to hold together.\",\"expression\":\"Circles, Nhimbe gatherings, Ubuntu contribution types (moderation, translation, curation, mentorship), collective ownership of the open data commons\",\"source\":\"Mbigi (1997), Collective Fingers Theory\",\"sortOrder\":2},{\"name\":\"compassion\",\"shona\":\"Tsitsi\",\"title\":\"Compassion\",\"description\":\"Active care, sympathy, and concern shown through helping, sharing, and welcoming. Tsitsi extends beyond kin to all — a stranger in need is not a stranger to compassion. (Also: Du Toit, Poovan & Engelbretch 2006.)\",\"expression\":\"Hospitality to newcomers, help-first interaction patterns, welcome flows, accessible defaults that do not punish people for the device they own\",\"source\":\"Mbigi (1997), Collective Fingers Theory; Du Toit, Poovan & Engelbretch (2006)\",\"sortOrder\":3},{\"name\":\"respect\",\"shona\":\"Ruremekedzo\",\"title\":\"Respect\",\"description\":\"Unprejudiced consideration of another's privileges, beliefs, and norms. Encompasses elder-respect (ukuhlonipha) but applies to every person, every age, every belief. (Also: Poovan et al. 2006.)\",\"expression\":\"Account switching for shared devices, multi-language parity with no second-class language, no age-gate assumptions, elder-respect in greeting patterns and tone\",\"source\":\"Mbigi (1997), Collective Fingers Theory; Poovan et al. (2006)\",\"sortOrder\":4},{\"name\":\"dignity\",\"shona\":\"Chiremerera\",\"title\":\"Dignity\",\"description\":\"Inherent worth held by virtue of existence — irrespective of status, ethnicity, age, or background. Humanity is sacred. Dignity is not earned and cannot be revoked. (Also: Ramose 2002.)\",\"expression\":\"No dark patterns, data sovereignty, verification without stigma, memorial states for ancestral accounts, never selling user attention\",\"source\":\"Mbigi (1997), Collective Fingers Theory; Ramose (2002)\",\"sortOrder\":5}]}",
18
18
  "aiInstructions": "{\"data\":[{\"name\":\"nyuchi-claude-project-prompt\",\"target\":\"claude-system-prompt\",\"description\":\"System prompt for Claude projects working on Mzizi — the Mzizi design system and DNA-double-helix frontend architecture.\",\"version\":\"2.4\"},{\"name\":\"nyuchi-copilot-instructions\",\"target\":\"github-copilot\",\"description\":\"Instructions for GitHub Copilot when working in the mzizi repository.\",\"version\":\"1.3\"},{\"name\":\"nyuchi-mcp-system-prompt\",\"target\":\"mcp-server\",\"description\":\"System prompt for the Mzizi MCP server. Tells AI assistants how to use the design-system tools.\",\"version\":\"2.4\"}],\"meta\":{\"total\":3}}",
@@ -418,7 +418,7 @@ export const COMPONENTS = {
418
418
  "mzizi-toast-provider": "{\"status\":200,\"body\":{\"$schema\":\"https://ui.shadcn.com/schema/registry-item.json\",\"name\":\"mzizi-toast-provider\",\"type\":\"registry:ui\",\"title\":\"mzizi Toast Provider\",\"description\":\"App-level toast/notification stack. Manages positioning, stacking, auto-dismiss, and swipe-to-dismiss for transient notifications. Wraps the L2 toast primitive with app-level behavior.\",\"author\":\"Mzizi, operated by Nyuchi Africa (Pvt) Ltd — https://mzizi.dev\",\"categories\":[\"shell\"],\"docs\":\"Use it for: pulse, shamwari, campfire, circles, bytes.\\nVariants: default.\\nIncludes: App shell infrastructure, Cross-layer wiring (L7→L8→L9), data-slot + data-portal DOM attributes, Harness integration.\\nAccessibility: Focus-visible ring on interactive elements, ARIA role, ARIA attributes.\\nInstall: npx shadcn@latest add https://api.mzizi.dev/v1/ui/mzizi-toast-provider\",\"dependencies\":[],\"registryDependencies\":[],\"files\":[{\"path\":\"components/registry/n7-shell/mzizi-toast-provider.tsx\",\"type\":\"registry:ui\",\"target\":\"components/ui/mzizi-toast-provider.tsx\",\"content\":\"\\\"use client\\\"\\nimport * as React from \\\"react\\\"\\nimport { cn } from \\\"@/lib/utils\\\"\\nimport { useMziziHarness } from \\\"@/lib/harness\\\"\\n\\ninterface ToastItem {\\n id: string\\n type?: \\\"default\\\" | \\\"success\\\" | \\\"error\\\" | \\\"warning\\\" | \\\"info\\\"\\n title: string\\n message?: string\\n duration?: number\\n action?: { label: string; onClick: () => void }\\n dismissible?: boolean\\n}\\n\\ninterface MziziToastProviderProps {\\n position?: \\\"top-right\\\" | \\\"top-center\\\" | \\\"bottom-right\\\" | \\\"bottom-center\\\"\\n maxVisible?: number\\n defaultDuration?: number\\n children: React.ReactNode\\n}\\n\\nconst ToastContext = React.createContext<{\\n addToast: (toast: Omit<ToastItem, \\\"id\\\">) => void\\n removeToast: (id: string) => void\\n} | null>(null)\\n\\nexport function useToast() {\\n const ctx = React.useContext(ToastContext)\\n if (!ctx) throw new Error(\\\"useToast must be used within MziziToastProvider\\\")\\n return ctx\\n}\\n\\nconst POSITION_CLASSES = {\\n \\\"top-right\\\": \\\"top-4 right-4\\\",\\n \\\"top-center\\\": \\\"top-4 left-1/2 -translate-x-1/2\\\",\\n \\\"bottom-right\\\": \\\"bottom-20 right-4\\\",\\n \\\"bottom-center\\\": \\\"bottom-20 left-1/2 -translate-x-1/2\\\",\\n}\\n\\nconst TYPE_STYLES: Record<string, string> = {\\n default: \\\"border-border\\\",\\n success: \\\"border-l-4 border-l-[var(--status-success,#64FFDA)]\\\",\\n error: \\\"border-l-4 border-l-[var(--status-error,#FF5252)]\\\",\\n warning: \\\"border-l-4 border-l-[var(--status-warning,#FFD740)]\\\",\\n info: \\\"border-l-4 border-l-[var(--status-info,#00B0FF)]\\\",\\n}\\n\\nexport function MziziToastProvider({\\n position = \\\"bottom-right\\\",\\n maxVisible = 3,\\n defaultDuration = 5000,\\n children,\\n}: MziziToastProviderProps) {\\n const { log } = useMziziHarness(\\\"toast-provider\\\")\\n const [toasts, setToasts] = React.useState<ToastItem[]>([])\\n\\n const addToast = React.useCallback(\\n (toast: Omit<ToastItem, \\\"id\\\">) => {\\n const id = Date.now().toString(36) + Math.random().toString(36).slice(2)\\n const item: ToastItem = {\\n id,\\n duration: defaultDuration,\\n dismissible: true,\\n type: \\\"default\\\",\\n ...toast,\\n }\\n setToasts((prev) => [...prev.slice(-(maxVisible - 1)), item])\\n log.info(`toast: ${item.type} — ${item.title}`)\\n if (item.duration && item.duration > 0) {\\n setTimeout(() => setToasts((prev) => prev.filter((t) => t.id !== id)), item.duration)\\n }\\n },\\n [defaultDuration, maxVisible, log]\\n )\\n\\n const removeToast = React.useCallback((id: string) => {\\n setToasts((prev) => prev.filter((t) => t.id !== id))\\n }, [])\\n\\n return (\\n <ToastContext.Provider value={{ addToast, removeToast }}>\\n {children}\\n <div\\n data-slot=\\\"mzizi-toast-provider\\\"\\n data-portal=\\\"https://mzizi.dev/components/mzizi-toast-provider\\\"\\n aria-live=\\\"polite\\\"\\n aria-atomic=\\\"false\\\"\\n className={cn(\\n \\\"pointer-events-none fixed z-50 flex w-full max-w-sm flex-col gap-2\\\",\\n POSITION_CLASSES[position]\\n )}\\n >\\n {toasts.map((toast) => (\\n <div\\n key={toast.id}\\n role=\\\"alert\\\"\\n className={cn(\\n \\\"pointer-events-auto rounded-[var(--radius-lg,14px)] border bg-card p-4 shadow-lg\\\",\\n TYPE_STYLES[toast.type || \\\"default\\\"]\\n )}\\n >\\n <div className=\\\"flex items-start justify-between gap-2\\\">\\n <div className=\\\"min-w-0\\\">\\n <p className=\\\"text-sm font-medium\\\">{toast.title}</p>\\n {toast.message && (\\n <p className=\\\"mt-0.5 text-xs text-muted-foreground\\\">{toast.message}</p>\\n )}\\n </div>\\n {toast.dismissible && (\\n <button\\n onClick={() => removeToast(toast.id)}\\n aria-label=\\\"Dismiss\\\"\\n className=\\\"flex min-h-[44px] min-w-[44px] shrink-0 items-center justify-center text-muted-foreground hover:text-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\\\"\\n >\\n <svg\\n width=\\\"14\\\"\\n height=\\\"14\\\"\\n viewBox=\\\"0 0 24 24\\\"\\n fill=\\\"none\\\"\\n stroke=\\\"currentColor\\\"\\n strokeWidth=\\\"2\\\"\\n aria-hidden=\\\"true\\\"\\n >\\n <path d=\\\"M18 6L6 18M6 6l12 12\\\" />\\n </svg>\\n </button>\\n )}\\n </div>\\n {toast.action && (\\n <button\\n onClick={toast.action.onClick}\\n className=\\\"mt-2 text-xs font-medium text-primary hover:underline\\\"\\n >\\n {toast.action.label}\\n </button>\\n )}\\n </div>\\n ))}\\n </div>\\n </ToastContext.Provider>\\n )\\n}\\n\\nexport type { ToastItem, MziziToastProviderProps }\\n\"}]}}",
419
419
  "mzizi-tokens": "{\"status\":200,\"body\":{\"$schema\":\"https://ui.shadcn.com/schema/registry-item.json\",\"name\":\"mzizi-tokens\",\"type\":\"registry:theme\",\"title\":\"mzizi Tokens\",\"description\":\"The Mzizi N1 design tokens as CSS custom properties — the Seven African Minerals and Seven Heritage colours with light/dark pairs, the four-level AAA surface system, radius scale, type scale, motion durations and touch targets. Generated from app/globals.css, so the registry and the site cannot disagree. Framework-agnostic by construction: the shadcn CLI merges these into whatever stylesheet the consuming project uses. Install this first — 431 of the registry's components reference these variables.\",\"author\":\"Mzizi, operated by Nyuchi Africa (Pvt) Ltd — https://mzizi.dev\",\"categories\":[\"styling-libs\"],\"docs\":\"Use it for: Design token provider for all Nyuchi apps, CSS custom properties for colors, spacing, radii, motion, Multi-platform export: Swift, Kotlin, ArkTS, Rust, Python, Brand overrides per mini-app.\\nVariants: light, dark, high-contrast.\\nIncludes: Seven African Minerals palette with light/dark pairs, Four-level AAA surface system, 8 semantic token categories, Brand override per mini-app, Multi-platform generators.\\nAccessibility: AAA contrast on all text-surface combinations, prefers-contrast: more support, prefers-reduced-motion: respects motion tokens.\\nInstall: npx shadcn@latest add https://api.mzizi.dev/v1/ui/mzizi-tokens\",\"dependencies\":[],\"registryDependencies\":[],\"cssVars\":{\"dark\":{\"accent\":\"#050504\",\"accent-foreground\":\"#f5f5f4\",\"background\":\"#1b1a17\",\"border\":\"rgba(255, 255, 255, 0.06)\",\"brand-accent\":\"#ffd740\",\"brand-accent-foreground\":\"#3e2723\",\"card\":\"#100f0e\",\"card-foreground\":\"#f5f5f4\",\"chart-1\":\"#b388ff\",\"chart-2\":\"#00b0ff\",\"chart-3\":\"#64ffda\",\"chart-4\":\"#ffd740\",\"chart-5\":\"#e1b07e\",\"container\":\"#1e1d1a\",\"destructive\":\"#f2b8b5\",\"dot-color\":\"rgba(255, 255, 255, 0.05)\",\"exp-acacia\":\"#93a528\",\"exp-acacia-container\":\"#333521\",\"exp-acacia-on\":\"#b6ce23\",\"exp-acacia-ui\":\"#768420\",\"exp-dusk\":\"#ba87e2\",\"exp-dusk-container\":\"#2d2135\",\"exp-dusk-on\":\"#cc9fef\",\"exp-dusk-ui\":\"#9749d3\",\"exp-ember\":\"#da8766\",\"exp-ember-container\":\"#352721\",\"exp-ember-on\":\"#eba68a\",\"exp-ember-ui\":\"#bb562d\",\"exp-fern\":\"#2cb42b\",\"exp-fern-container\":\"#213521\",\"exp-fern-on\":\"#28db28\",\"exp-fern-ui\":\"#228d22\",\"exp-lagoon\":\"#2aae9b\",\"exp-lagoon-container\":\"#213532\",\"exp-lagoon-on\":\"#24d6bc\",\"exp-lagoon-ui\":\"#218a7a\",\"exp-protea\":\"#df7bb4\",\"exp-protea-container\":\"#35212d\",\"exp-protea-on\":\"#ed98c9\",\"exp-protea-ui\":\"#ca3188\",\"exp-storm\":\"#7e9be0\",\"exp-storm-container\":\"#212735\",\"exp-storm-on\":\"#99b2ee\",\"exp-storm-ui\":\"#426cd1\",\"foreground\":\"#f5f5f4\",\"heritage-baobab\":\"#a1887f\",\"heritage-hematite\":\"#90a4ae\",\"heritage-indigo\":\"#7986cb\",\"heritage-kalahari\":\"#e8d9b5\",\"heritage-river\":\"#4dd0e1\",\"heritage-savanna\":\"#e5c158\",\"heritage-sunset\":\"#ff7043\",\"info\":\"#00b0ff\",\"input\":\"rgba(255, 255, 255, 0.06)\",\"mineral-cobalt\":\"#00b0ff\",\"mineral-cobalt-container\":\"#001f3f\",\"mineral-cobalt-on-container\":\"#b3e5fc\",\"mineral-copper\":\"#ff8a65\",\"mineral-copper-container\":\"#3a1a0e\",\"mineral-copper-on-container\":\"#ffd3c2\",\"mineral-gold\":\"#ffd740\",\"mineral-gold-container\":\"#332200\",\"mineral-gold-on-container\":\"#ffecb3\",\"mineral-malachite\":\"#64ffda\",\"mineral-malachite-container\":\"#00251a\",\"mineral-malachite-on-container\":\"#a7ffeb\",\"mineral-sodalite\":\"#3d5afe\",\"mineral-sodalite-container\":\"#0d1442\",\"mineral-sodalite-on-container\":\"#c5cae9\",\"mineral-tanzanite\":\"#b388ff\",\"mineral-tanzanite-container\":\"#1a0033\",\"mineral-tanzanite-on-container\":\"#e1bee7\",\"mineral-terracotta\":\"#e1b07e\",\"mineral-terracotta-container\":\"#3e2817\",\"mineral-terracotta-on-container\":\"#f5e6d3\",\"muted\":\"#050504\",\"muted-foreground\":\"#b2afa8\",\"neutral\":\"#a09c93\",\"offline\":\"#ba9570\",\"overlay\":\"#23221f\",\"overlay-foreground\":\"#f5f5f4\",\"pitch\":\"#050505\",\"popover\":\"#100f0e\",\"popover-foreground\":\"#f5f5f4\",\"primary\":\"#f5f5f4\",\"primary-foreground\":\"#1b1a17\",\"raised\":\"#2e2c29\",\"ring\":\"#f5f5f4\",\"scrim\":\"rgba(0, 0, 0, 0.6)\",\"secondary\":\"#050504\",\"secondary-foreground\":\"#f5f5f4\",\"sidebar\":\"#100f0e\",\"sidebar-accent\":\"#050504\",\"sidebar-accent-foreground\":\"#f5f5f4\",\"sidebar-border\":\"rgba(255, 255, 255, 0.06)\",\"sidebar-foreground\":\"#f5f5f4\",\"sidebar-primary\":\"#f5f5f4\",\"sidebar-primary-foreground\":\"#1b1a17\",\"sidebar-ring\":\"#f5f5f4\",\"status-error\":\"var(--destructive)\",\"status-info\":\"var(--info)\",\"status-neutral\":\"var(--neutral)\",\"status-success\":\"var(--success)\",\"status-warning\":\"var(--warning)\",\"success\":\"#64ffda\",\"surface\":\"#131211\",\"syncing\":\"#36abba\",\"void\":\"#080807\",\"warning\":\"#ffd866\",\"wash\":\"color-mix(in oklab, var(--surface) 88%, var(--brand-accent))\"},\"light\":{\"accent\":\"#faf9f5\",\"accent-foreground\":\"#141413\",\"background\":\"#f3f2ee\",\"border\":\"rgba(10, 10, 10, 0.06)\",\"brand-accent\":\"#7a5c00\",\"brand-accent-foreground\":\"#ffffff\",\"card\":\"#ffffff\",\"card-foreground\":\"#141413\",\"chart-1\":\"#4b0082\",\"chart-2\":\"#0047ab\",\"chart-3\":\"#004d40\",\"chart-4\":\"#5d4037\",\"chart-5\":\"#a0522d\",\"container\":\"#e5e4e1\",\"destructive\":\"#b3261e\",\"dot-color\":\"rgba(10, 10, 10, 0.05)\",\"exp-acacia\":\"#4d5615\",\"exp-acacia-container\":\"#e9ebdb\",\"exp-acacia-on\":\"#48510e\",\"exp-acacia-ui\":\"#7e8c22\",\"exp-dusk\":\"#742aad\",\"exp-dusk-container\":\"#e4dbeb\",\"exp-dusk-on\":\"#661b9e\",\"exp-dusk-ui\":\"#a35dd8\",\"exp-ember\":\"#843d20\",\"exp-ember-container\":\"#ebdfdb\",\"exp-ember-on\":\"#7a3115\",\"exp-ember-ui\":\"#cd5f33\",\"exp-fern\":\"#175e17\",\"exp-fern-container\":\"#dbebdb\",\"exp-fern-on\":\"#0f570f\",\"exp-fern-ui\":\"#259725\",\"exp-lagoon\":\"#165b51\",\"exp-lagoon-container\":\"#dbebe9\",\"exp-lagoon-on\":\"#0e554b\",\"exp-lagoon-ui\":\"#249383\",\"exp-protea\":\"#932464\",\"exp-protea-container\":\"#ebdbe4\",\"exp-protea-on\":\"#841656\",\"exp-protea-ui\":\"#d34998\",\"exp-storm\":\"#284ca6\",\"exp-storm-container\":\"#dbe0eb\",\"exp-storm-on\":\"#1a409b\",\"exp-storm-ui\":\"#577bd6\",\"foreground\":\"#141413\",\"heritage-baobab\":\"#4e342e\",\"heritage-hematite\":\"#546e7a\",\"heritage-indigo\":\"#4527a0\",\"heritage-kalahari\":\"#c9b589\",\"heritage-river\":\"#006064\",\"heritage-savanna\":\"#8d6e1a\",\"heritage-sunset\":\"#d84315\",\"info\":\"#0047ab\",\"input\":\"rgba(10, 10, 10, 0.06)\",\"mineral-cobalt\":\"#0047ab\",\"mineral-cobalt-container\":\"#e3f2fd\",\"mineral-cobalt-on-container\":\"#002966\",\"mineral-copper\":\"#bf5a36\",\"mineral-copper-container\":\"#fbe4da\",\"mineral-copper-on-container\":\"#5c2410\",\"mineral-gold\":\"#5d4037\",\"mineral-gold-container\":\"#fff8e1\",\"mineral-gold-on-container\":\"#3e2723\",\"mineral-malachite\":\"#004d40\",\"mineral-malachite-container\":\"#e0f2f1\",\"mineral-malachite-on-container\":\"#00332b\",\"mineral-sodalite\":\"#283593\",\"mineral-sodalite-container\":\"#e8eaf6\",\"mineral-sodalite-on-container\":\"#141a5c\",\"mineral-tanzanite\":\"#4b0082\",\"mineral-tanzanite-container\":\"#f3e5f5\",\"mineral-tanzanite-on-container\":\"#2e004d\",\"mineral-terracotta\":\"#a0522d\",\"mineral-terracotta-container\":\"#f5e6d3\",\"mineral-terracotta-on-container\":\"#5d2906\",\"muted\":\"#faf9f5\",\"muted-foreground\":\"#494840\",\"neutral\":\"#55514b\",\"offline\":\"#674c32\",\"overlay\":\"#e0dfdc\",\"overlay-foreground\":\"#141413\",\"pitch\":\"#fafafa\",\"popover\":\"#ffffff\",\"popover-foreground\":\"#141413\",\"primary\":\"#141413\",\"primary-foreground\":\"#ffffff\",\"radius\":\"calc(var(--radius-unit) * 2)\",\"raised\":\"#d6d5d1\",\"ring\":\"#141413\",\"scrim\":\"rgba(0, 0, 0, 0.4)\",\"secondary\":\"#faf9f5\",\"secondary-foreground\":\"#141413\",\"sidebar\":\"#faf9f5\",\"sidebar-accent\":\"#f3f2ee\",\"sidebar-accent-foreground\":\"#141413\",\"sidebar-border\":\"rgba(10, 10, 10, 0.06)\",\"sidebar-foreground\":\"#141413\",\"sidebar-primary\":\"#141413\",\"sidebar-primary-foreground\":\"#ffffff\",\"sidebar-ring\":\"#141413\",\"status-error\":\"var(--destructive)\",\"status-info\":\"var(--info)\",\"status-neutral\":\"var(--neutral)\",\"status-success\":\"var(--success)\",\"status-warning\":\"var(--warning)\",\"success\":\"#004d40\",\"surface\":\"#eeeeec\",\"syncing\":\"#1c5962\",\"void\":\"#f8f8f7\",\"warning\":\"#7a5c00\",\"wash\":\"color-mix(in oklab, var(--surface) 93%, var(--brand-accent))\"},\"theme\":{\"aspect-media\":\"1 / 1\",\"aspect-media-portrait\":\"4 / 5\",\"aspect-media-wide\":\"16 / 9\",\"color-acacia\":\"var(--exp-acacia)\",\"color-accent\":\"var(--accent)\",\"color-accent-foreground\":\"var(--accent-foreground)\",\"color-background\":\"var(--background)\",\"color-baobab\":\"var(--heritage-baobab)\",\"color-border\":\"var(--border)\",\"color-brand-accent\":\"var(--brand-accent)\",\"color-brand-accent-foreground\":\"var(--brand-accent-foreground)\",\"color-card\":\"var(--card)\",\"color-card-foreground\":\"var(--card-foreground)\",\"color-chart-1\":\"var(--chart-1)\",\"color-chart-2\":\"var(--chart-2)\",\"color-chart-3\":\"var(--chart-3)\",\"color-chart-4\":\"var(--chart-4)\",\"color-chart-5\":\"var(--chart-5)\",\"color-cobalt\":\"var(--mineral-cobalt)\",\"color-cobalt-container\":\"var(--mineral-cobalt-container)\",\"color-cobalt-on-container\":\"var(--mineral-cobalt-on-container)\",\"color-container\":\"var(--container)\",\"color-copper\":\"var(--mineral-copper)\",\"color-copper-container\":\"var(--mineral-copper-container)\",\"color-copper-on-container\":\"var(--mineral-copper-on-container)\",\"color-destructive\":\"var(--destructive)\",\"color-destructive-foreground\":\"var(--destructive-foreground)\",\"color-dusk\":\"var(--exp-dusk)\",\"color-ember\":\"var(--exp-ember)\",\"color-fern\":\"var(--exp-fern)\",\"color-foreground\":\"var(--foreground)\",\"color-gold\":\"var(--mineral-gold)\",\"color-gold-container\":\"var(--mineral-gold-container)\",\"color-gold-on-container\":\"var(--mineral-gold-on-container)\",\"color-hematite\":\"var(--heritage-hematite)\",\"color-indigo\":\"var(--heritage-indigo)\",\"color-info\":\"var(--info)\",\"color-input\":\"var(--input)\",\"color-kalahari\":\"var(--heritage-kalahari)\",\"color-lagoon\":\"var(--exp-lagoon)\",\"color-malachite\":\"var(--mineral-malachite)\",\"color-malachite-container\":\"var(--mineral-malachite-container)\",\"color-malachite-on-container\":\"var(--mineral-malachite-on-container)\",\"color-muted\":\"var(--muted)\",\"color-muted-foreground\":\"var(--muted-foreground)\",\"color-neutral\":\"var(--neutral)\",\"color-offline\":\"var(--offline)\",\"color-overlay\":\"var(--overlay)\",\"color-overlay-foreground\":\"var(--overlay-foreground)\",\"color-pitch\":\"var(--pitch)\",\"color-popover\":\"var(--popover)\",\"color-popover-foreground\":\"var(--popover-foreground)\",\"color-primary\":\"var(--primary)\",\"color-primary-foreground\":\"var(--primary-foreground)\",\"color-protea\":\"var(--exp-protea)\",\"color-raised\":\"var(--raised)\",\"color-ring\":\"var(--ring)\",\"color-river\":\"var(--heritage-river)\",\"color-savanna\":\"var(--heritage-savanna)\",\"color-scrim\":\"var(--scrim)\",\"color-secondary\":\"var(--secondary)\",\"color-secondary-foreground\":\"var(--secondary-foreground)\",\"color-sidebar\":\"var(--sidebar)\",\"color-sidebar-accent\":\"var(--sidebar-accent)\",\"color-sidebar-accent-foreground\":\"var(--sidebar-accent-foreground)\",\"color-sidebar-border\":\"var(--sidebar-border)\",\"color-sidebar-foreground\":\"var(--sidebar-foreground)\",\"color-sidebar-primary\":\"var(--sidebar-primary)\",\"color-sidebar-primary-foreground\":\"var(--sidebar-primary-foreground)\",\"color-sidebar-ring\":\"var(--sidebar-ring)\",\"color-sodalite\":\"var(--mineral-sodalite)\",\"color-sodalite-container\":\"var(--mineral-sodalite-container)\",\"color-sodalite-on-container\":\"var(--mineral-sodalite-on-container)\",\"color-status-error\":\"var(--status-error)\",\"color-status-info\":\"var(--status-info)\",\"color-status-neutral\":\"var(--status-neutral)\",\"color-status-success\":\"var(--status-success)\",\"color-status-warning\":\"var(--status-warning)\",\"color-storm\":\"var(--exp-storm)\",\"color-success\":\"var(--success)\",\"color-sunset\":\"var(--heritage-sunset)\",\"color-surface\":\"var(--surface)\",\"color-syncing\":\"var(--syncing)\",\"color-tanzanite\":\"var(--mineral-tanzanite)\",\"color-tanzanite-container\":\"var(--mineral-tanzanite-container)\",\"color-tanzanite-on-container\":\"var(--mineral-tanzanite-on-container)\",\"color-terracotta\":\"var(--mineral-terracotta)\",\"color-terracotta-container\":\"var(--mineral-terracotta-container)\",\"color-terracotta-on-container\":\"var(--mineral-terracotta-on-container)\",\"color-void\":\"var(--void)\",\"color-warning\":\"var(--warning)\",\"color-wash\":\"var(--wash)\",\"font-mono\":\"\\\"JetBrains Mono\\\", \\\"JetBrains Mono Fallback\\\", monospace\",\"font-sans\":\"\\\"Noto Sans\\\", \\\"Noto Sans Fallback\\\", system-ui, sans-serif\",\"font-serif\":\"\\\"Noto Serif\\\", \\\"Noto Serif Fallback\\\", Georgia, serif\",\"radius-2xl\":\"calc(var(--radius-unit) + 10px)\",\"radius-3xl\":\"9999px\",\"radius-4xl\":\"9999px\",\"radius-lg\":\"calc(var(--radius-unit) * 2)\",\"radius-md\":\"calc(var(--radius-unit) + 5px)\",\"radius-sm\":\"var(--radius-unit)\",\"radius-unit\":\"7px\",\"radius-xl\":\"calc(var(--radius-unit) + 10px)\"}}}}",
420
420
  "mzizi-tokens-arkts": "{\"status\":200,\"body\":{\"$schema\":\"https://ui.shadcn.com/schema/registry-item.json\",\"name\":\"mzizi-tokens-arkts\",\"type\":\"registry:lib\",\"title\":\"mzizi Tokens Arkts\",\"description\":\"Mzizi design tokens for ArkTS / HarmonyOS. Generated by `pnpm tokens:sync` from the same source that emits the web CSS custom properties — seven African Minerals + seven Heritage tones, both themes. Colour constants, spacing, radius and typography for HarmonyOS. Never hand-edited: adding a target means adding an emitter, never re-authoring the palette (CLAUDE.md §8.4.1).\",\"author\":\"Mzizi, operated by Nyuchi Africa (Pvt) Ltd — https://mzizi.dev\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[],\"files\":[{\"path\":\"components/registry/n1-tokens/mzizi-tokens-arkts.ets\",\"type\":\"registry:lib\",\"target\":\"lib/tokens/mzizi-tokens-arkts.ets\",\"content\":\"// NYUCHI DESIGN TOKENS — N1\\n// ArkTS / ArkUI (HarmonyOS) — generated by scripts/sync-tokens.ts from\\n// lib/tokens/palette.source.ts, the canonical palette in this repo.\\n//\\n// Carries all 21 families: seven minerals, seven heritage tones and\\n// the seven experimental — the same set /v1/brand and the MCP serve.\\n//\\n// DO NOT EDIT BY HAND. Run `pnpm tokens:sync`; `pnpm tokens:verify`\\n// fails the build if this file drifts from the source.\\n\\nexport const MziziColors = {\\n // Seven African Minerals\\n cobaltDark: \\\"#00B0FF\\\",\\n cobaltLight: \\\"#0047AB\\\",\\n tanzaniteDark: \\\"#B388FF\\\",\\n tanzaniteLight: \\\"#4B0082\\\",\\n malachiteDark: \\\"#64FFDA\\\",\\n malachiteLight: \\\"#004D40\\\",\\n goldDark: \\\"#FFD740\\\",\\n goldLight: \\\"#5D4037\\\",\\n terracottaDark: \\\"#E1B07E\\\",\\n terracottaLight: \\\"#A0522D\\\",\\n sodaliteDark: \\\"#3D5AFE\\\",\\n sodaliteLight: \\\"#283593\\\",\\n copperDark: \\\"#FF8A65\\\",\\n copperLight: \\\"#BF5A36\\\",\\n\\n // Seven Heritage Colors\\n indigoDark: \\\"#7986CB\\\",\\n indigoLight: \\\"#4527A0\\\",\\n savannaDark: \\\"#E5C158\\\",\\n savannaLight: \\\"#8D6E1A\\\",\\n baobabDark: \\\"#A1887F\\\",\\n baobabLight: \\\"#4E342E\\\",\\n sunsetDark: \\\"#FF7043\\\",\\n sunsetLight: \\\"#D84315\\\",\\n riverDark: \\\"#4DD0E1\\\",\\n riverLight: \\\"#006064\\\",\\n hematiteDark: \\\"#90A4AE\\\",\\n hematiteLight: \\\"#546E7A\\\",\\n kalahariDark: \\\"#E8D9B5\\\",\\n kalahariLight: \\\"#C9B589\\\",\\n\\n // Seven Experimental tones\\n emberDark: \\\"#DA8766\\\",\\n emberLight: \\\"#843D20\\\",\\n acaciaDark: \\\"#93A528\\\",\\n acaciaLight: \\\"#4D5615\\\",\\n fernDark: \\\"#2CB42B\\\",\\n fernLight: \\\"#175E17\\\",\\n lagoonDark: \\\"#2AAE9B\\\",\\n lagoonLight: \\\"#165B51\\\",\\n stormDark: \\\"#7E9BE0\\\",\\n stormLight: \\\"#284CA6\\\",\\n duskDark: \\\"#BA87E2\\\",\\n duskLight: \\\"#742AAD\\\",\\n proteaDark: \\\"#DF7BB4\\\",\\n proteaLight: \\\"#932464\\\",\\n} as const\\n\\nexport const MziziSpacing = {\\n xs: 4,\\n sm: 8,\\n md: 12,\\n base: 16,\\n lg: 24,\\n xl: 32,\\n} as const\\n\\nexport const MziziRadius = {\\n sm: 7,\\n md: 12,\\n lg: 14,\\n xl: 17,\\n full: 9999,\\n} as const\\n\\nexport const MziziFonts = {\\n sans: \\\"Noto Sans\\\",\\n serif: \\\"Noto Serif\\\",\\n mono: \\\"JetBrains Mono\\\",\\n} as const\\n\"}]}}",
421
- "mzizi-tokens-globals": "{\"status\":200,\"body\":{\"$schema\":\"https://ui.shadcn.com/schema/registry-item.json\",\"name\":\"mzizi-tokens-globals\",\"type\":\"registry:lib\",\"title\":\"mzizi Tokens Globals\",\"description\":\"The combined Mzizi `globals.css` — one self-contained stylesheet, generated by `pnpm tokens:sync` from `lib/tokens/palette.source.ts`. It carries `@import \\\"tailwindcss\\\"`, its own `@theme` block, `:root`, `.dark`, the per-brand blocks and every non-colour ladder, so a repo copies it in as its `globals.css` with nothing else to fetch — a copy cannot follow an `@import` to a sibling that was not copied with it. Set `data-brand` on `<html>` to pick a brand. Twenty-one colour families in three arrays of seven (minerals, heritage, experimental). Never hand-edited: adding a target means adding an emitter, never re-authoring the palette.\",\"author\":\"Mzizi, operated by Nyuchi Africa (Pvt) Ltd — https://mzizi.dev\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[],\"files\":[{\"path\":\"components/registry/n1-tokens/mzizi-tokens-globals.css\",\"type\":\"registry:file\",\"target\":\"app/globals.css\",\"content\":\"/* ════════════════════════════════════════════════════════════════════════════\\n * MZIZI — THE DEFAULT globals.css\\n *\\n * GENERATED. Do not edit this file; edit `lib/tokens/palette.source.ts` and run\\n * `pnpm tokens:sync`. `pnpm tokens:verify` fails CI when this has drifted.\\n *\\n * This is the combined stylesheet across the estate, served from the shadcn\\n * registry (`npx shadcn@latest add https://api.mzizi.dev/v1/ui/nyuchi-globals`)\\n * and carried into the crates registry through `mzizi-tokens`. A repo that\\n * needs styling COPIES it. That is why it is self-contained: it imports\\n * Tailwind, declares its own `@theme`, and references no sibling file. There is\\n * nothing to install alongside it and nothing for a copy to lose.\\n *\\n * WHAT IS IN IT\\n * 21 brand families 7 minerals, 7 heritage tones, 7 experimental\\n * accessibility tier an AA/APCA-safe `-aa` variant beside every canonical\\n * hex — added, never substituted\\n * surface ladder 9 steps, pitch → wash, plus `muted`\\n * text ramp 3 tiers, measured on `--base`, plus `--hero-text`\\n * status / chart / sidebar / the shadcn semantic set\\n * non-colour ladders spacing 17, motion 4+4+3, type 13+9, shadow 8,\\n * radius 7, touch targets, control heights, z-index\\n * brand blocks 8 `[data-brand]` selectors, each moving `--primary`\\n * and `--ring` only\\n *\\n * HOW TO USE IT\\n * Copy it in as your `globals.css`. Set `data-brand` on <html> to pick a\\n * brand; set `.dark` or `data-theme=\\\"dark\\\"` to pick a theme. Local divergence\\n * goes in the LOCAL OVERRIDES block at the foot of the file, where a reviewer\\n * can see it and `pnpm tokens:sync` will not overwrite your copy.\\n *\\n * ════════════════════════════════════════════════════════════════════════════ */\\n\\n@import \\\"tailwindcss\\\";\\n\\n@custom-variant dark (&:is(.dark *), &:is([data-theme=\\\"dark\\\"] *));\\n\\n@theme inline {\\n --font-sans: \\\"Noto Sans\\\", ui-sans-serif, system-ui, sans-serif;\\n --font-serif: \\\"Noto Serif\\\", ui-serif, Georgia, serif;\\n --font-mono: \\\"JetBrains Mono\\\", ui-monospace, Menlo, monospace;\\n\\n /* ── FAMILIES ────────────────────────────────────────────────────────────── */\\n --color-cobalt: var(--mineral-cobalt);\\n --color-cobalt-container: var(--mineral-cobalt-container);\\n --color-cobalt-on-container: var(--mineral-cobalt-on-container);\\n --color-cobalt-aa: var(--mineral-cobalt-aa);\\n --color-tanzanite: var(--mineral-tanzanite);\\n --color-tanzanite-container: var(--mineral-tanzanite-container);\\n --color-tanzanite-on-container: var(--mineral-tanzanite-on-container);\\n --color-tanzanite-aa: var(--mineral-tanzanite-aa);\\n --color-malachite: var(--mineral-malachite);\\n --color-malachite-container: var(--mineral-malachite-container);\\n --color-malachite-on-container: var(--mineral-malachite-on-container);\\n --color-malachite-aa: var(--mineral-malachite-aa);\\n --color-gold: var(--mineral-gold);\\n --color-gold-container: var(--mineral-gold-container);\\n --color-gold-on-container: var(--mineral-gold-on-container);\\n --color-gold-aa: var(--mineral-gold-aa);\\n --color-terracotta: var(--mineral-terracotta);\\n --color-terracotta-container: var(--mineral-terracotta-container);\\n --color-terracotta-on-container: var(--mineral-terracotta-on-container);\\n --color-terracotta-aa: var(--mineral-terracotta-aa);\\n --color-sodalite: var(--mineral-sodalite);\\n --color-sodalite-container: var(--mineral-sodalite-container);\\n --color-sodalite-on-container: var(--mineral-sodalite-on-container);\\n --color-sodalite-aa: var(--mineral-sodalite-aa);\\n --color-copper: var(--mineral-copper);\\n --color-copper-container: var(--mineral-copper-container);\\n --color-copper-on-container: var(--mineral-copper-on-container);\\n --color-copper-aa: var(--mineral-copper-aa);\\n --color-indigo: var(--heritage-indigo);\\n --color-indigo-aa: var(--heritage-indigo-aa);\\n --color-savanna: var(--heritage-savanna);\\n --color-savanna-aa: var(--heritage-savanna-aa);\\n --color-baobab: var(--heritage-baobab);\\n --color-baobab-aa: var(--heritage-baobab-aa);\\n --color-sunset: var(--heritage-sunset);\\n --color-sunset-aa: var(--heritage-sunset-aa);\\n --color-river: var(--heritage-river);\\n --color-river-aa: var(--heritage-river-aa);\\n --color-hematite: var(--heritage-hematite);\\n --color-hematite-aa: var(--heritage-hematite-aa);\\n --color-kalahari: var(--heritage-kalahari);\\n --color-kalahari-aa: var(--heritage-kalahari-aa);\\n --color-ember: var(--exp-ember);\\n --color-ember-container: var(--exp-ember-container);\\n --color-ember-on-container: var(--exp-ember-on-container);\\n --color-ember-ui: var(--exp-ember-ui);\\n --color-ember-aa: var(--exp-ember-aa);\\n --color-acacia: var(--exp-acacia);\\n --color-acacia-container: var(--exp-acacia-container);\\n --color-acacia-on-container: var(--exp-acacia-on-container);\\n --color-acacia-ui: var(--exp-acacia-ui);\\n --color-acacia-aa: var(--exp-acacia-aa);\\n --color-fern: var(--exp-fern);\\n --color-fern-container: var(--exp-fern-container);\\n --color-fern-on-container: var(--exp-fern-on-container);\\n --color-fern-ui: var(--exp-fern-ui);\\n --color-fern-aa: var(--exp-fern-aa);\\n --color-lagoon: var(--exp-lagoon);\\n --color-lagoon-container: var(--exp-lagoon-container);\\n --color-lagoon-on-container: var(--exp-lagoon-on-container);\\n --color-lagoon-ui: var(--exp-lagoon-ui);\\n --color-lagoon-aa: var(--exp-lagoon-aa);\\n --color-storm: var(--exp-storm);\\n --color-storm-container: var(--exp-storm-container);\\n --color-storm-on-container: var(--exp-storm-on-container);\\n --color-storm-ui: var(--exp-storm-ui);\\n --color-storm-aa: var(--exp-storm-aa);\\n --color-dusk: var(--exp-dusk);\\n --color-dusk-container: var(--exp-dusk-container);\\n --color-dusk-on-container: var(--exp-dusk-on-container);\\n --color-dusk-ui: var(--exp-dusk-ui);\\n --color-dusk-aa: var(--exp-dusk-aa);\\n --color-protea: var(--exp-protea);\\n --color-protea-container: var(--exp-protea-container);\\n --color-protea-on-container: var(--exp-protea-on-container);\\n --color-protea-ui: var(--exp-protea-ui);\\n --color-protea-aa: var(--exp-protea-aa);\\n\\n /* ── SURFACES, TEXT, STATUS, SEMANTICS ───────────────────────────────────── */\\n --color-pitch: var(--pitch);\\n --color-void: var(--void);\\n --color-base: var(--base);\\n --color-surface: var(--surface);\\n --color-container: var(--container);\\n --color-overlay: var(--overlay);\\n --color-raised: var(--raised);\\n --color-scrim: var(--scrim);\\n --color-wash: var(--wash);\\n --color-muted: var(--muted);\\n --color-text-primary: var(--text-primary);\\n --color-text-secondary: var(--text-secondary);\\n --color-text-tertiary: var(--text-tertiary);\\n --color-hero-text: var(--hero-text);\\n --color-success: var(--success);\\n --color-warning: var(--warning);\\n --color-error: var(--error);\\n --color-info: var(--info);\\n --color-neutral: var(--neutral);\\n --color-offline: var(--offline);\\n --color-syncing: var(--syncing);\\n --color-destructive-container: var(--destructive-container);\\n --color-background: var(--background);\\n --color-foreground: var(--foreground);\\n --color-card: var(--card);\\n --color-card-foreground: var(--card-foreground);\\n --color-popover: var(--popover);\\n --color-popover-foreground: var(--popover-foreground);\\n --color-primary: var(--primary);\\n --color-primary-foreground: var(--primary-foreground);\\n --color-secondary: var(--secondary);\\n --color-secondary-foreground: var(--secondary-foreground);\\n --color-muted-foreground: var(--muted-foreground);\\n --color-accent: var(--accent);\\n --color-accent-foreground: var(--accent-foreground);\\n --color-destructive: var(--destructive);\\n --color-destructive-foreground: var(--destructive-foreground);\\n --color-overlay-foreground: var(--overlay-foreground);\\n --color-border: var(--border);\\n --color-input: var(--input);\\n --color-ring: var(--ring);\\n --color-brand-accent: var(--brand-accent);\\n --color-brand-accent-foreground: var(--brand-accent-foreground);\\n --color-chart-1: var(--chart-1);\\n --color-chart-2: var(--chart-2);\\n --color-chart-3: var(--chart-3);\\n --color-chart-4: var(--chart-4);\\n --color-chart-5: var(--chart-5);\\n --color-chart-6: var(--chart-6);\\n --color-chart-7: var(--chart-7);\\n --color-chart-positive: var(--chart-positive);\\n --color-chart-negative: var(--chart-negative);\\n --color-chart-neutral: var(--chart-neutral);\\n --color-sidebar: var(--sidebar);\\n --color-sidebar-foreground: var(--sidebar-foreground);\\n --color-sidebar-primary: var(--sidebar-primary);\\n --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);\\n --color-sidebar-accent: var(--sidebar-accent);\\n --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);\\n --color-sidebar-border: var(--sidebar-border);\\n --color-sidebar-ring: var(--sidebar-ring);\\n\\n /* ── SPACING / RADIUS / TYPE / SHADOW / EASING ───────────────────────────── */\\n --spacing-xxs: var(--space-xxs);\\n --spacing-xs: var(--space-xs);\\n --spacing-xs-plus: var(--space-xs-plus);\\n --spacing-sm: var(--space-sm);\\n --spacing-sm-plus: var(--space-sm-plus);\\n --spacing-md: var(--space-md);\\n --spacing-base: var(--space-base);\\n --spacing-base-plus: var(--space-base-plus);\\n --spacing-lg: var(--space-lg);\\n --spacing-xl: var(--space-xl);\\n --spacing-xl-plus: var(--space-xl-plus);\\n --spacing-2xl: var(--space-2xl);\\n --spacing-2xl-plus: var(--space-2xl-plus);\\n --spacing-3xl: var(--space-3xl);\\n --spacing-4xl: var(--space-4xl);\\n --spacing-5xl: var(--space-5xl);\\n --spacing-6xl: var(--space-6xl);\\n --radius-sm: var(--r-sm);\\n --radius-md: var(--r-md);\\n --radius-base: var(--r-base);\\n --radius-lg: var(--r-lg);\\n --radius-xl: var(--r-xl);\\n --radius-2xl: var(--r-2xl);\\n --radius-full: var(--r-full);\\n --text-display: var(--fs-display);\\n --text-display-sm: var(--fs-display-sm);\\n --text-h1: var(--fs-h1);\\n --text-h2: var(--fs-h2);\\n --text-h3: var(--fs-h3);\\n --text-h4: var(--fs-h4);\\n --text-h5: var(--fs-h5);\\n --text-h6: var(--fs-h6);\\n --text-body-lg: var(--fs-body-lg);\\n --text-body: var(--fs-body);\\n --text-small: var(--fs-small);\\n --text-caption: var(--fs-caption);\\n --text-code: var(--fs-code);\\n --shadow-none: var(--elevation-none);\\n --shadow-xs: var(--elevation-xs);\\n --shadow-sm: var(--elevation-sm);\\n --shadow-md: var(--elevation-md);\\n --shadow-lg: var(--elevation-lg);\\n --shadow-xl: var(--elevation-xl);\\n --shadow-inner: var(--elevation-inner);\\n --shadow-focus-ring: var(--elevation-focus-ring);\\n --ease-entrance: var(--easing-entrance);\\n --ease-exit: var(--easing-exit);\\n --ease-standard: var(--easing-standard);\\n --ease-spring: var(--easing-spring);\\n}\\n\\n/* ════ LIGHT — the default theme ════ */\\n:root {\\n /* ── SEVEN MINERALS ──────────────────────────────────────────────────────── */\\n /* cobalt — Knowledge. Digital future, trust, knowledge */\\n --mineral-cobalt: #0047ab;\\n --mineral-cobalt-container: #e3f2fd;\\n --mineral-cobalt-on-container: #002966; /* APCA Lc 90.9 on the container */\\n --mineral-cobalt-aa: #0047ab; /* canonical value already clears the bar */\\n /* tanzanite — Identity. Premium, creativity, connection */\\n --mineral-tanzanite: #4b0082;\\n --mineral-tanzanite-container: #f3e5f5;\\n --mineral-tanzanite-on-container: #2e004d; /* APCA Lc 90.1 on the container */\\n --mineral-tanzanite-aa: #4b0082; /* canonical value already clears the bar */\\n /* malachite — Growth. Growth, nature, success */\\n --mineral-malachite: #004d40;\\n --mineral-malachite-container: #e0f2f1;\\n --mineral-malachite-on-container: #00332b; /* APCA Lc 90.3 on the container */\\n --mineral-malachite-aa: #004d40; /* canonical value already clears the bar */\\n /* gold — Value. Honey, rewards, warmth */\\n --mineral-gold: #5d4037;\\n --mineral-gold-container: #fff8e1;\\n --mineral-gold-on-container: #3e2723; /* APCA Lc 96.1 on the container */\\n --mineral-gold-aa: #5d4037; /* canonical value already clears the bar */\\n /* terracotta — Community. Earth, community, grounding */\\n --mineral-terracotta: #a0522d;\\n --mineral-terracotta-container: #f5e6d3;\\n --mineral-terracotta-on-container: #5d2906; /* APCA Lc 82.9 on the container */\\n --mineral-terracotta-aa: #a0522d; /* canonical value already clears the bar */\\n /* sodalite — Intelligence. Intelligence, depth, reasoning */\\n --mineral-sodalite: #283593;\\n --mineral-sodalite-container: #e8eaf6;\\n --mineral-sodalite-on-container: #141a5c; /* APCA Lc 90.1 on the container */\\n --mineral-sodalite-aa: #283593; /* canonical value already clears the bar */\\n /* copper — Stewardship. Connection, foundation, stewardship */\\n --mineral-copper: #bf5a36;\\n --mineral-copper-container: #fbe4da;\\n --mineral-copper-on-container: #5c2410; /* APCA Lc 84 on the container */\\n --mineral-copper-aa: #b4532f; /* #BF5A36 measures 4.44 — WCAG 2.2 AA on #FFFFFF. bundu-labs/marketing/apps/bundu/src/styles/global.css:11 */\\n\\n /* ── SEVEN HERITAGE TONES ────────────────────────────────────────────────── */\\n --heritage-indigo: #4527a0; /* Dusk, depth, the dyer's craft */\\n --heritage-indigo-aa: #4527a0; /* canonical value already clears the bar */\\n --heritage-savanna: #8d6e1a; /* Sun-dried grass, open land, the dry season */\\n --heritage-savanna-aa: #8d6e1a; /* canonical value already clears the bar */\\n --heritage-baobab: #4e342e; /* The tree of life, age, shelter */\\n --heritage-baobab-aa: #4e342e; /* canonical value already clears the bar */\\n --heritage-sunset: #d84315; /* Day's end, warmth, the gathering hour */\\n --heritage-sunset-aa: #d64215; /* #D84315 measures 4.44 — WCAG 2.2 AA on #FFFFFF. derived — canon lightHex toward #000000 */\\n --heritage-river: #006064; /* Flow, life, the journey */\\n --heritage-river-aa: #006064; /* canonical value already clears the bar */\\n --heritage-hematite: #546e7a; /* Foundation, endurance, the substrate */\\n --heritage-hematite-aa: #546e7a; /* canonical value already clears the bar */\\n --heritage-kalahari: #c9b589; /* Openness, space, the light pole */\\n --heritage-kalahari-aa: #817458; /* #C9B589 measures 2.01 — WCAG 2.2 AA on #FFFFFF. derived — canon lightHex toward #000000 */\\n\\n /* ── SEVEN EXPERIMENTAL — the computed heptagon ──────────────────────────── */\\n /* ember — heptagon index 0 */\\n --exp-ember: #843d20;\\n --exp-ember-container: #ebdfdb;\\n --exp-ember-on-container: #7a3115;\\n --exp-ember-ui: #cd5f33;\\n --exp-ember-aa: #843d20; /* canonical value already clears the bar */\\n /* acacia — heptagon index 1 */\\n --exp-acacia: #4d5615;\\n --exp-acacia-container: #e9ebdb;\\n --exp-acacia-on-container: #48510e;\\n --exp-acacia-ui: #7e8c22;\\n --exp-acacia-aa: #4d5615; /* canonical value already clears the bar */\\n /* fern — heptagon index 2 */\\n --exp-fern: #175e17;\\n --exp-fern-container: #dbebdb;\\n --exp-fern-on-container: #0f570f;\\n --exp-fern-ui: #259725;\\n --exp-fern-aa: #175e17; /* canonical value already clears the bar */\\n /* lagoon — heptagon index 3 */\\n --exp-lagoon: #165b51;\\n --exp-lagoon-container: #dbebe9;\\n --exp-lagoon-on-container: #0e554b;\\n --exp-lagoon-ui: #249383;\\n --exp-lagoon-aa: #165b51; /* canonical value already clears the bar */\\n /* storm — heptagon index 4 */\\n --exp-storm: #284ca6;\\n --exp-storm-container: #dbe0eb;\\n --exp-storm-on-container: #1a409b;\\n --exp-storm-ui: #577bd6;\\n --exp-storm-aa: #284ca6; /* canonical value already clears the bar */\\n /* dusk — heptagon index 5 */\\n --exp-dusk: #742aad;\\n --exp-dusk-container: #e4dbeb;\\n --exp-dusk-on-container: #661b9e;\\n --exp-dusk-ui: #a35dd8;\\n --exp-dusk-aa: #742aad; /* canonical value already clears the bar */\\n /* protea — heptagon index 6 */\\n --exp-protea: #932464;\\n --exp-protea-container: #ebdbe4;\\n --exp-protea-on-container: #841656;\\n --exp-protea-ui: #d34998;\\n --exp-protea-aa: #932464; /* canonical value already clears the bar */\\n\\n /* ── SURFACE LADDER — nine steps, deepest to highest ─────────────────────── */\\n --pitch: #fafafa; /* Deepest surface — media wells, splash (prime step P2) */\\n --void: #f8f8f7; /* App shell behind base (prime step P3) */\\n --base: #f3f3f1; /* Page background — ambient base surface (prime step P5) */\\n --surface: #eeeeec; /* Card / panel surface (prime step P7) */\\n --container: #e5e4e1; /* Neutral containers, grouped content (prime step P11) */\\n --overlay: #e0dfdc; /* Overlays and dialogs (prime step P13) */\\n --raised: #d6d5d1; /* Raised elements above overlay — menus, toasts (prime step P17) */\\n --scrim: rgba(0, 0, 0, 0.4); /* Semi-transparent backdrop behind overlays */\\n --wash: color-mix(\\n in oklab,\\n var(--surface) 93%,\\n var(--brand-accent)\\n ); /* Cover-colour page wash — surface tinted with the active brand accent */\\n --muted: #faf9f5; /* Deepest inset fill — not a ladder rung */\\n\\n /* ── TEXT RAMP — three tiers, APCA-measured on --base ────────────────────── */\\n --text-primary: #373635; /* APCA Lc 90.4 on --base */\\n --text-secondary: #5d5d5b; /* APCA Lc 75.4 on --base */\\n --text-tertiary: #7f7f7d; /* APCA Lc 60.2 on --base */\\n --hero-text: #ffffff; /* Text over photography — pair with --hero-text-shadow, never bare */\\n --hero-text-shadow:\\n 0 1px 3px rgba(0, 0, 0, 0.6), 0 2px 12px rgba(0, 0, 0, 0.4);\\n --muted-foreground: var(--text-secondary);\\n\\n /* ── STATUS ──────────────────────────────────────────────────────────────── */\\n --success: #004d40; /* Success states, positive actions */\\n --warning: #7a5c00; /* Warning states, caution */\\n --error: #b3261e; /* Error states, destructive actions */\\n --info: #0047ab; /* Informational states */\\n --neutral: #55514b; /* Neutral / inactive status, secondary data series */\\n --offline: #674c32; /* Offline / disconnected state */\\n --syncing: #1c5962; /* In-progress sync / pending state */\\n --destructive-container: #fdeded; /* Soft background behind destructive content */\\n\\n /* ── CHART — the seven minerals, in palette order ────────────────────────── */\\n --chart-1: var(--mineral-cobalt);\\n --chart-2: var(--mineral-tanzanite);\\n --chart-3: var(--mineral-malachite);\\n --chart-4: var(--mineral-gold);\\n --chart-5: var(--mineral-terracotta);\\n --chart-6: var(--mineral-sodalite);\\n --chart-7: var(--mineral-copper);\\n /* Semantic series. These must NOT change hue between themes — a negative\\n series that is orange in light and rose in dark is the defect found in\\n mukoko-news, where all twelve chart values were raw Tailwind palette. */\\n --chart-positive: var(--success);\\n --chart-negative: var(--error);\\n --chart-neutral: var(--neutral);\\n\\n /* ── SHADCN SEMANTIC SET ─────────────────────────────────────────────────── */\\n --background: var(\\n --base\\n ); /* ALIAS. /v1/brand calls this step `base`; shadcn calls it `background`. */\\n --foreground: var(--text-primary);\\n --card: var(--surface);\\n --card-foreground: var(--text-primary);\\n --popover: var(--overlay);\\n --popover-foreground: var(--text-primary);\\n --primary-foreground: #ffffff;\\n --secondary: var(--container);\\n --secondary-foreground: var(--text-primary);\\n --destructive: var(--error);\\n --destructive-foreground: #ffffff;\\n --overlay-foreground: var(--text-primary);\\n --accent-foreground: var(--text-primary);\\n --brand-accent-foreground: #ffffff;\\n\\n /* ── SIDEBAR ─────────────────────────────────────────────────────────────── */\\n --sidebar: var(--surface);\\n --sidebar-foreground: var(--text-primary);\\n --sidebar-primary: var(--primary);\\n --sidebar-primary-foreground: var(--primary-foreground);\\n --sidebar-accent: var(--container);\\n --sidebar-accent-foreground: var(--text-primary);\\n --sidebar-border: var(--border);\\n --sidebar-ring: var(--ring);\\n\\n /* ── UNRESOLVED — the registry and /v1/brand disagree; this is NOT a ruling ── */\\n /* --primary registry: ink #141413 | /v1/brand: tanzanite #4B0082\\n Genuinely per-brand — bundu is copper, shamwari sodalite, nyuchi gold — so\\n it is NOT defined as a value here. It resolves through the [data-brand]\\n block at the foot of this file. `mzizi` is the default because this is the\\n mzizi default stylesheet; set data-brand on <html> to change it.\\n TO REVERSE: if the owner rules for ink, that is a new neutral family in\\n palette.source.ts and a [data-brand] row, not an edit here. */\\n --primary: var(--mineral-gold-aa);\\n /* --ring registry: ink #141413 | /v1/brand: cobalt #0047AB\\n /v1/brand ties the focus ring to cobalt for every brand and the\\n accessibility record says \\\"2px ring with ring-offset-2, using --ring\\\".\\n The brand blocks below keep it cobalt; one that needs otherwise overrides. */\\n --ring: var(--mineral-cobalt-aa);\\n /* --accent registry: #faf9f5 | /v1/brand: #E3F2FD (cobalt container)\\n Both readings are a pale container; they disagree on WHOSE. Deriving it\\n from --primary takes neither side and follows the brand automatically.\\n color-mix is already how /v1/brand defines --wash, so this is the system's\\n own technique, not a new one.\\n TO REVERSE: assign var(--mineral-<x>-container) in the brand block. */\\n --accent: color-mix(in oklab, var(--primary) 12%, var(--base));\\n /* --brand-accent registry: gold #7a5c00 | /v1/brand: tanzanite #4B0082\\n Both are \\\"the app's saturated brand mineral\\\" — which is what --primary is.\\n Aliasing it picks no brand and keeps the two from drifting apart. */\\n --brand-accent: var(--primary);\\n /* --border registry: rgba(10,10,10,0.06) | /v1/brand: #E7E5E0\\n A translucent hairline versus warm stone. Not per-brand — a skin choice.\\n /v1/brand's value ships because this file's other surface values are\\n /v1/brand's and mixing the two vocabularies is what produced the drift.\\n TO REVERSE: one line in LOCAL OVERRIDES. */\\n --border: #e7e5e0;\\n /* --input registry: rgba(10,10,10,0.06) | /v1/brand: #FFFFFF */\\n --input: #ffffff;\\n /* --background registry: #f3f2ee | /v1/brand: #F3F3F1 (the `base` step)\\n Emitted above as an ALIAS of --base rather than a value of its own, so the\\n ladder has one definition and the shadcn name resolves to it. The disputed\\n hex is --base itself; /v1/brand's is used because --base is a rung of the\\n nine-step ladder and the rest of that ladder is /v1/brand's. */\\n\\n /* ── SPACING — 17 rungs ──────────────────────────────────────────────────── */\\n --space-xxs: 0.125rem; /* 2px */\\n --space-xs: 0.25rem; /* 4px */\\n --space-xs-plus: 0.375rem; /* 6px */\\n --space-sm: 0.5rem; /* 8px */\\n --space-sm-plus: 0.625rem; /* 10px */\\n --space-md: 0.75rem; /* 12px */\\n --space-base: 1rem; /* 16px */\\n --space-base-plus: 1.25rem; /* 20px */\\n --space-lg: 1.5rem; /* 24px */\\n --space-xl: 2rem; /* 32px */\\n --space-xl-plus: 2.5rem; /* 40px */\\n --space-2xl: 3rem; /* 48px */\\n --space-2xl-plus: 3.5rem; /* 56px */\\n --space-3xl: 4rem; /* 64px */\\n --space-4xl: 5rem; /* 80px */\\n --space-5xl: 6rem; /* 96px */\\n --space-6xl: 8rem; /* 128px */\\n\\n /* ── MOTION — dual-named, so both vocabularies resolve ───────────────────── */\\n --motion-quick: 100ms;\\n --motion-standard: 200ms;\\n --motion-emphasis: 350ms;\\n --motion-dramatic: 500ms;\\n --motion-duration-quick: var(--motion-quick);\\n --motion-duration-standard: var(--motion-standard);\\n --motion-duration-emphasis: var(--motion-emphasis);\\n --motion-duration-dramatic: var(--motion-dramatic);\\n --easing-entrance: cubic-bezier(0, 0, 0.2, 1);\\n --easing-exit: cubic-bezier(0.4, 0, 1, 1);\\n --easing-standard: cubic-bezier(0.4, 0, 0.2, 1);\\n --easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);\\n --motion-ease-entrance: var(--easing-entrance);\\n --motion-ease-exit: var(--easing-exit);\\n --motion-ease-standard: var(--easing-standard);\\n --motion-ease-spring: var(--easing-spring);\\n --motion-stagger-tight: 30ms;\\n --motion-stagger-base: 50ms;\\n --motion-stagger-loose: 80ms;\\n\\n /* ── TYPOGRAPHY — 13 sizes, 9 line-heights ───────────────────────────────── */\\n --font-family-sans: \\\"Noto Sans\\\", ui-sans-serif, system-ui, sans-serif;\\n --font-family-serif: \\\"Noto Serif\\\", ui-serif, Georgia, serif;\\n --font-family-mono: \\\"JetBrains Mono\\\", ui-monospace, Menlo, monospace;\\n --fs-display: 4.5rem; /* 72 — serif 700, line-height 1.1 */\\n --fs-display-sm: 3.75rem; /* 60 — serif 700, line-height 1.1 */\\n --fs-h1: 3rem; /* 48 — serif 700, line-height 1.15 */\\n --fs-h2: 2.25rem; /* 36 — serif 600, line-height 1.2 */\\n --fs-h3: 1.875rem; /* 30 — serif 600, line-height 1.25 */\\n --fs-h4: 1.5rem; /* 24 — sans 600, line-height 1.3 */\\n --fs-h5: 1.25rem; /* 20 — sans 600, line-height 1.4 */\\n --fs-h6: 1rem; /* 16 — sans 600, line-height 1.4 */\\n --fs-body-lg: 1.125rem; /* 18 — sans 400, line-height 1.6 */\\n --fs-body: 1rem; /* 16 — sans 400, line-height 1.6 */\\n --fs-small: 0.875rem; /* 14 — sans 400, line-height 1.5 */\\n --fs-caption: 0.75rem; /* 12 — sans 400, line-height 1.5 */\\n --fs-code: 0.875rem; /* 14 — mono 400, line-height 1.6 */\\n --lh-display: 1.1;\\n --lh-h1: 1.15;\\n --lh-h2: 1.2;\\n --lh-h3: 1.25;\\n --lh-h4: 1.3;\\n --lh-h5: 1.4;\\n --lh-h6: 1.4;\\n --lh-body: 1.6;\\n --lh-small: 1.5;\\n --fw-display: 700;\\n --fw-display-sm: 700;\\n --fw-h1: 700;\\n --fw-h2: 600;\\n --fw-h3: 600;\\n --fw-h4: 600;\\n --fw-h5: 600;\\n --fw-h6: 600;\\n --fw-body-lg: 400;\\n --fw-body: 400;\\n --fw-small: 400;\\n --fw-caption: 400;\\n --fw-code: 400;\\n\\n /* ── RADIUS — every rung derives from a 7px unit ─────────────────────────── */\\n --radius-unit: 7px; /* CLAUDE.md §7.5. Apps running a 10px or 12px unit have the whole calc() scale wrong. */\\n --r-sm: 7px;\\n --r-md: 12px;\\n --r-base: 14px;\\n --r-lg: 14px;\\n --r-xl: 17px;\\n --r-2xl: 17px;\\n --r-full: 9999px;\\n --radius: calc(var(--radius-unit) * 2); /* 14px */\\n --r-circle: 50%;\\n /* Semantic aliases — /v1/brand componentSpecs: buttons and inputs are ALWAYS pill. */\\n --r-button: var(--r-full);\\n --r-input: var(--r-full);\\n --r-badge: var(--r-full);\\n --r-card: var(--r-base);\\n\\n /* ── ELEVATION — 8 rungs ─────────────────────────────────────────────────── */\\n --elevation-none: none;\\n --elevation-xs: 0 1px 2px rgba(20, 20, 19, 0.04);\\n --elevation-sm: 0 1px 2px rgba(0, 0, 0, 0.15);\\n --elevation-md: 0 4px 12px rgba(0, 0, 0, 0.2);\\n --elevation-lg: 0 8px 24px rgba(0, 0, 0, 0.25);\\n --elevation-xl: 0 20px 60px rgba(0, 0, 0, 0.4);\\n --elevation-inner: inset 0 2px 4px rgba(20, 20, 19, 0.06);\\n --elevation-focus-ring: 0 0 0 2px var(--background), 0 0 0 4px var(--ring);\\n\\n /* ── TOUCH TARGETS AND CONTROL HEIGHTS ───────────────────────────────────── */\\n --touch-target-lg: 56px; /* Default touch target — /v1/brand defaultTouchTarget */\\n --touch-target: 48px; /* Minimum touch target — /v1/brand minTouchTarget */\\n --touch-target-sm: 40px; /* Dense secondary actions; below the 48px floor, so not for primary controls */\\n --h-button-default: 3.5rem; /* 56px — componentSpecs.button.heights.default */\\n --h-button-sm: 3rem; /* 48px — componentSpecs.button.heights.sm */\\n --h-input: 3.5rem; /* 56px — inputs match the default button */\\n\\n /* ── Z-INDEX ─────────────────────────────────────────────────────────────── */\\n --z-base: 0;\\n --z-dropdown: 10;\\n --z-sticky: 20;\\n --z-overlay: 30;\\n --z-modal: 40;\\n --z-toast: 50;\\n --z-tooltip: 60;\\n}\\n\\n/* ════ DARK ════\\n * Both selectors, because the estate uses both: next-themes writes `.dark`,\\n * and several apps drive the theme from `data-theme`. A file that carried only\\n * one of them rendered the light value in dark mode wherever the other was in\\n * use — which is the single defect the completeness test exists to catch. */\\n.dark,\\n[data-theme=\\\"dark\\\"] {\\n /* ── SEVEN MINERALS ──────────────────────────────────────────────────────── */\\n /* cobalt — Knowledge. Digital future, trust, knowledge */\\n --mineral-cobalt: #00b0ff;\\n --mineral-cobalt-container: #001f3f;\\n --mineral-cobalt-on-container: #b3e5fc; /* APCA Lc -84.2 on the container */\\n --mineral-cobalt-aa: #86dcff; /* #00B0FF measures -54.7 — APCA Silver on #0E0D0C. nyuchi/bushtrade/src/app/globals.css:171 (nudged from #80DAFF, Lc -77.0 — its comment claims 78) */\\n /* tanzanite — Identity. Premium, creativity, connection */\\n --mineral-tanzanite: #b388ff;\\n --mineral-tanzanite-container: #1a0033;\\n --mineral-tanzanite-on-container: #e1bee7; /* APCA Lc -73.3 on the container */\\n --mineral-tanzanite-aa: #dcc8ff; /* #B388FF measures -50 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n /* malachite — Growth. Growth, nature, success */\\n --mineral-malachite: #64ffda;\\n --mineral-malachite-container: #00251a;\\n --mineral-malachite-on-container: #a7ffeb; /* APCA Lc -94.8 on the container */\\n --mineral-malachite-aa: #64ffda; /* canonical value already clears the bar */\\n /* gold — Value. Honey, rewards, warmth */\\n --mineral-gold: #ffd740;\\n --mineral-gold-container: #332200;\\n --mineral-gold-on-container: #ffecb3; /* APCA Lc -93 on the container */\\n --mineral-gold-aa: #ffd740; /* canonical value already clears the bar */\\n /* terracotta — Community. Earth, community, grounding */\\n --mineral-terracotta: #e1b07e;\\n --mineral-terracotta-container: #3e2817;\\n --mineral-terracotta-on-container: #f5e6d3; /* APCA Lc -88.4 on the container */\\n --mineral-terracotta-aa: #ebcca3; /* #E1B07E measures -64.5 — APCA Silver on #0E0D0C. nyuchi/bushtrade/src/app/globals.css:166 (nudged from #EAC99E, Lc -76.7 — its comment claims 78) */\\n /* sodalite — Intelligence. Intelligence, depth, reasoning */\\n --mineral-sodalite: #3d5afe;\\n --mineral-sodalite-container: #0d1442;\\n --mineral-sodalite-on-container: #c5cae9; /* APCA Lc -73.9 on the container */\\n --mineral-sodalite-aa: #c6cfff; /* #3D5AFE measures -26.9 — APCA Silver on #0E0D0C. shamwari-ai/docs/style.css:32 */\\n /* copper — Stewardship. Connection, foundation, stewardship */\\n --mineral-copper: #ff8a65;\\n --mineral-copper-container: #3a1a0e;\\n --mineral-copper-on-container: #ffd3c2; /* APCA Lc -82.8 on the container */\\n --mineral-copper-aa: #ffc3b0; /* #FF8A65 measures -56.6 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n\\n /* ── SEVEN HERITAGE TONES ────────────────────────────────────────────────── */\\n --heritage-indigo: #7986cb; /* Dusk, depth, the dyer's craft */\\n --heritage-indigo-aa: #cbd0eb; /* #7986CB measures -39.4 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n --heritage-savanna: #e5c158; /* Sun-dried grass, open land, the dry season */\\n --heritage-savanna-aa: #ebcf7d; /* #E5C158 measures -71.1 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n --heritage-baobab: #a1887f; /* The tree of life, age, shelter */\\n --heritage-baobab-aa: #d9cfcc; /* #A1887F measures -40.9 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n --heritage-sunset: #ff7043; /* Day's end, warmth, the gathering hour */\\n --heritage-sunset-aa: #ffc3b0; /* #FF7043 measures -49.3 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n --heritage-river: #4dd0e1; /* Flow, life, the journey */\\n --heritage-river-aa: #84dfea; /* #4DD0E1 measures -68.2 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n --heritage-hematite: #90a4ae; /* Foundation, endurance, the substrate */\\n --heritage-hematite-aa: #c9d2d7; /* #90A4AE measures -51 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n --heritage-kalahari: #e8d9b5; /* Openness, space, the light pole */\\n --heritage-kalahari-aa: #e8d9b5; /* canonical value already clears the bar */\\n\\n /* ── SEVEN EXPERIMENTAL — the computed heptagon ──────────────────────────── */\\n /* ember — heptagon index 0 */\\n --exp-ember: #da8766;\\n --exp-ember-container: #352721;\\n --exp-ember-on-container: #eba68a;\\n --exp-ember-ui: #bb562d;\\n --exp-ember-aa: #eec9ba; /* #DA8766 measures -48.7 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n /* acacia — heptagon index 1 */\\n --exp-acacia: #93a528;\\n --exp-acacia-container: #333521;\\n --exp-acacia-on-container: #b6ce23;\\n --exp-acacia-ui: #768420;\\n --exp-acacia-aa: #cdd69c; /* #93A528 measures -48.7 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n /* fern — heptagon index 2 */\\n --exp-fern: #2cb42b;\\n --exp-fern-container: #213521;\\n --exp-fern-on-container: #28db28;\\n --exp-fern-ui: #228d22;\\n --exp-fern-aa: #a4dfa4; /* #2CB42B measures -49.2 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n /* lagoon — heptagon index 3 */\\n --exp-lagoon: #2aae9b;\\n --exp-lagoon-container: #213532;\\n --exp-lagoon-on-container: #24d6bc;\\n --exp-lagoon-ui: #218a7a;\\n --exp-lagoon-aa: #a3dcd4; /* #2AAE9B measures -48.8 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n /* storm — heptagon index 4 */\\n --exp-storm: #7e9be0;\\n --exp-storm-container: #212735;\\n --exp-storm-on-container: #99b2ee;\\n --exp-storm-ui: #426cd1;\\n --exp-storm-aa: #c4d1f1; /* #7E9BE0 measures -48.6 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n /* dusk — heptagon index 5 */\\n --exp-dusk: #ba87e2;\\n --exp-dusk-container: #2d2135;\\n --exp-dusk-on-container: #cc9fef;\\n --exp-dusk-ui: #9749d3;\\n --exp-dusk-aa: #dfc8f2; /* #BA87E2 measures -48.7 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n /* protea — heptagon index 6 */\\n --exp-protea: #df7bb4;\\n --exp-protea-container: #35212d;\\n --exp-protea-on-container: #ed98c9;\\n --exp-protea-ui: #ca3188;\\n --exp-protea-aa: #f1c4dd; /* #DF7BB4 measures -48.7 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n\\n /* ── SURFACE LADDER — nine steps, deepest to highest ─────────────────────── */\\n --pitch: #050505; /* Deepest surface — media wells, splash (prime step P2) */\\n --void: #080807; /* App shell behind base (prime step P3) */\\n --base: #0e0d0c; /* Page background — ambient base surface (prime step P5) */\\n --surface: #131211; /* Card / panel surface (prime step P7) */\\n --container: #1e1d1a; /* Neutral containers, grouped content (prime step P11) */\\n --overlay: #23221f; /* Overlays and dialogs (prime step P13) */\\n --raised: #2e2c29; /* Raised elements above overlay — menus, toasts (prime step P17) */\\n --scrim: rgba(0, 0, 0, 0.6); /* Semi-transparent backdrop behind overlays */\\n --wash: color-mix(\\n in oklab,\\n var(--surface) 88%,\\n var(--brand-accent)\\n ); /* Cover-colour page wash — surface tinted with the active brand accent */\\n --muted: #050504; /* Deepest inset fill — not a ladder rung */\\n\\n /* ── TEXT RAMP — three tiers, APCA-measured on --base ────────────────────── */\\n --text-primary: #e5e5e3; /* APCA Lc -90.7 on --base */\\n --text-secondary: #ccccca; /* APCA Lc -75.3 on --base */\\n --text-tertiary: #b3b3b1; /* APCA Lc -60.9 on --base */\\n --hero-text: #ffffff; /* Text over photography — pair with --hero-text-shadow, never bare */\\n --hero-text-shadow:\\n 0 1px 3px rgba(0, 0, 0, 0.6), 0 2px 12px rgba(0, 0, 0, 0.4);\\n --muted-foreground: var(--text-secondary);\\n\\n /* ── STATUS ──────────────────────────────────────────────────────────────── */\\n --success: #64ffda; /* Success states, positive actions */\\n --warning: #ffd866; /* Warning states, caution */\\n --error: #f2b8b5; /* Error states, destructive actions */\\n --info: #00b0ff; /* Informational states */\\n --neutral: #a09c93; /* Neutral / inactive status, secondary data series */\\n --offline: #ba9570; /* Offline / disconnected state */\\n --syncing: #36abba; /* In-progress sync / pending state */\\n --destructive-container: #3e1818; /* Soft background behind destructive content */\\n\\n /* ── CHART — the seven minerals, in palette order ────────────────────────── */\\n --chart-1: var(--mineral-cobalt);\\n --chart-2: var(--mineral-tanzanite);\\n --chart-3: var(--mineral-malachite);\\n --chart-4: var(--mineral-gold);\\n --chart-5: var(--mineral-terracotta);\\n --chart-6: var(--mineral-sodalite);\\n --chart-7: var(--mineral-copper);\\n /* Semantic series. These must NOT change hue between themes — a negative\\n series that is orange in light and rose in dark is the defect found in\\n mukoko-news, where all twelve chart values were raw Tailwind palette. */\\n --chart-positive: var(--success);\\n --chart-negative: var(--error);\\n --chart-neutral: var(--neutral);\\n\\n /* ── SHADCN SEMANTIC SET ─────────────────────────────────────────────────── */\\n --background: var(\\n --base\\n ); /* ALIAS. /v1/brand calls this step `base`; shadcn calls it `background`. */\\n --foreground: var(--text-primary);\\n --card: var(--surface);\\n --card-foreground: var(--text-primary);\\n --popover: var(--overlay);\\n --popover-foreground: var(--text-primary);\\n --primary-foreground: #0e0d0c;\\n --secondary: var(--container);\\n --secondary-foreground: var(--text-primary);\\n --destructive: var(--error);\\n --destructive-foreground: #0e0d0c;\\n --overlay-foreground: var(--text-primary);\\n --accent-foreground: var(--text-primary);\\n --brand-accent-foreground: #0e0d0c;\\n\\n /* ── SIDEBAR ─────────────────────────────────────────────────────────────── */\\n --sidebar: var(--surface);\\n --sidebar-foreground: var(--text-primary);\\n --sidebar-primary: var(--primary);\\n --sidebar-primary-foreground: var(--primary-foreground);\\n --sidebar-accent: var(--container);\\n --sidebar-accent-foreground: var(--text-primary);\\n --sidebar-border: var(--border);\\n --sidebar-ring: var(--ring);\\n\\n /* ── UNRESOLVED — the registry and /v1/brand disagree; this is NOT a ruling ── */\\n /* --border registry: rgba(10,10,10,0.06) | /v1/brand: #2A2927\\n A translucent hairline versus warm stone. Not per-brand — a skin choice.\\n /v1/brand's value ships because this file's other surface values are\\n /v1/brand's and mixing the two vocabularies is what produced the drift.\\n TO REVERSE: one line in LOCAL OVERRIDES. */\\n --border: #2a2927;\\n /* --input registry: rgba(10,10,10,0.06) | /v1/brand: #100F0E */\\n --input: #100f0e;\\n}\\n\\n/* ════════════════════════════════════════════════════════════════════════════\\n * BRAND BLOCKS\\n *\\n * The per-brand variance, in the same file, because consumption is copy-in: a\\n * second artifact to install beside this one is a second thing that can drift,\\n * and killing that drift is why this file exists. They are inert until\\n * `data-brand` is set, so a repo that wants one edits nothing and a repo that\\n * wants none is unaffected.\\n *\\n * Each block moves `--primary` and `--ring` ONLY — the pattern\\n * `bundu-labs/marketing` proved — and assigns `var(--mineral-*)`, never a hex.\\n * `--accent` and `--brand-accent` follow `--primary` automatically. Each block\\n * references the `-aa` variant, so a brand whose mineral fails contrast gets\\n * the measured-safe value rather than each team rediscovering the problem.\\n *\\n * Every mineral below is sourced, none guessed — the comment names where.\\n * ════════════════════════════════════════════════════════════════════════════ */\\n\\n/* mzizi — gold.\\n * app/globals.css:256 — \\\"Per-brand accent — nyuchi = gold\\\"; mzizi.dev is a nyuchi-operated portal. No `mzizi` ecosystem record in /v1/brand. */\\n[data-brand=\\\"mzizi\\\"] {\\n --primary: var(--mineral-gold-aa);\\n --ring: var(--mineral-cobalt-aa);\\n}\\n\\n/* mukoko — tanzanite.\\n * /v1/brand ecosystem[name=mukoko].mineral */\\n[data-brand=\\\"mukoko\\\"] {\\n --primary: var(--mineral-tanzanite-aa);\\n --ring: var(--mineral-cobalt-aa);\\n}\\n\\n/* nyuchi — gold.\\n * /v1/brand ecosystem[name=nyuchi].mineral */\\n[data-brand=\\\"nyuchi\\\"] {\\n --primary: var(--mineral-gold-aa);\\n --ring: var(--mineral-cobalt-aa);\\n}\\n\\n/* bundu — copper.\\n * /v1/brand ecosystem[name=bundu].mineral */\\n[data-brand=\\\"bundu\\\"] {\\n --primary: var(--mineral-copper-aa);\\n --ring: var(--mineral-cobalt-aa);\\n}\\n\\n/* shamwari — sodalite.\\n * /v1/brand ecosystem[name=shamwari].mineral */\\n[data-brand=\\\"shamwari\\\"] {\\n --primary: var(--mineral-sodalite-aa);\\n --ring: var(--mineral-cobalt-aa);\\n}\\n\\n/* news — cobalt.\\n * lib/tokens/index.ts:696 — mukoko.news. No `news` ecosystem record in /v1/brand. */\\n[data-brand=\\\"news\\\"] {\\n --primary: var(--mineral-cobalt-aa);\\n --ring: var(--mineral-cobalt-aa);\\n}\\n\\n/* nhimbe — malachite.\\n * /v1/brand ecosystem[name=nhimbe].mineral (agrees with lib/tokens/index.ts mukoko.events) */\\n[data-brand=\\\"nhimbe\\\"] {\\n --primary: var(--mineral-malachite-aa);\\n --ring: var(--mineral-cobalt-aa);\\n}\\n\\n/* bushtrade — gold.\\n * /v1/brand ecosystem[name=bushtrade].mineral (agrees with lib/tokens/index.ts mukoko.commerce) */\\n[data-brand=\\\"bushtrade\\\"] {\\n --primary: var(--mineral-gold-aa);\\n --ring: var(--mineral-cobalt-aa);\\n}\\n\\n/* ════════════════════════════════════════════════════════════════════════════\\n * LOCAL OVERRIDES — the only block a consuming repo edits.\\n *\\n * Put divergence here, with a comment saying why and what would reverse it, the\\n * way nhimbe's control-height block does. Everything above is generated and a\\n * re-copy overwrites it; this block is where your copy stays yours.\\n * ════════════════════════════════════════════════════════════════════════════ */\\n\"}]}}",
421
+ "mzizi-tokens-globals": "{\"status\":200,\"body\":{\"$schema\":\"https://ui.shadcn.com/schema/registry-item.json\",\"name\":\"mzizi-tokens-globals\",\"type\":\"registry:lib\",\"title\":\"mzizi Tokens Globals\",\"description\":\"The combined Mzizi `globals.css` — one self-contained stylesheet, generated by `pnpm tokens:sync` from `lib/tokens/palette.source.ts`. It carries `@import \\\"tailwindcss\\\"`, its own `@theme` block, `:root`, `.dark`, the per-brand blocks and every non-colour ladder, so a repo copies it in as its `globals.css` with nothing else to fetch — a copy cannot follow an `@import` to a sibling that was not copied with it. Set `data-brand` on `<html>` to pick a brand. Twenty-one colour families in three arrays of seven (minerals, heritage, experimental). Never hand-edited: adding a target means adding an emitter, never re-authoring the palette.\",\"author\":\"Mzizi, operated by Nyuchi Africa (Pvt) Ltd — https://mzizi.dev\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[],\"files\":[{\"path\":\"components/registry/n1-tokens/mzizi-tokens-globals.css\",\"type\":\"registry:file\",\"target\":\"app/globals.css\",\"content\":\"/* ════════════════════════════════════════════════════════════════════════════\\n * MZIZI — THE DEFAULT globals.css\\n *\\n * GENERATED. Do not edit this file; edit `lib/tokens/palette.source.ts` and run\\n * `pnpm tokens:sync`. `pnpm tokens:verify` fails CI when this has drifted.\\n *\\n * This is the combined stylesheet across the estate, served from the shadcn\\n * registry (`npx shadcn@latest add https://api.mzizi.dev/v1/ui/nyuchi-globals`)\\n * and carried into the crates registry through `mzizi-tokens`. A repo that\\n * needs styling COPIES it. That is why it is self-contained: it imports\\n * Tailwind, declares its own `@theme`, and references no sibling file. There is\\n * nothing to install alongside it and nothing for a copy to lose.\\n *\\n * WHAT IS IN IT\\n * 21 brand families 7 minerals, 7 heritage tones, 7 experimental\\n * accessibility tier an AA/APCA-safe `-aa` variant beside every canonical\\n * hex — added, never substituted\\n * surface ladder 9 steps, pitch → wash, plus `muted`\\n * text ramp 3 tiers, measured on `--base`, plus `--hero-text`\\n * status / chart / sidebar / the shadcn semantic set\\n * non-colour ladders spacing 17, motion 4+4+3, type 13+9, shadow 8,\\n * radius 7, touch targets, control heights, z-index\\n * brand blocks 8 `[data-brand]` selectors, each moving `--primary`\\n * and `--ring` only\\n *\\n * HOW TO USE IT\\n * Copy it in as your `globals.css`. Set `data-brand` on <html> to pick a\\n * brand; set `.dark` or `data-theme=\\\"dark\\\"` to pick a theme. Local divergence\\n * goes in the LOCAL OVERRIDES block at the foot of the file, where a reviewer\\n * can see it and `pnpm tokens:sync` will not overwrite your copy.\\n *\\n * ════════════════════════════════════════════════════════════════════════════ */\\n\\n@import \\\"tailwindcss\\\";\\n\\n@custom-variant dark (&:is(.dark *), &:is([data-theme=\\\"dark\\\"] *));\\n\\n@theme inline {\\n --font-sans: \\\"Noto Sans\\\", ui-sans-serif, system-ui, sans-serif;\\n --font-serif: \\\"Noto Serif\\\", ui-serif, Georgia, serif;\\n --font-mono: \\\"JetBrains Mono\\\", ui-monospace, Menlo, monospace;\\n\\n /* ── FAMILIES ────────────────────────────────────────────────────────────── */\\n --color-cobalt: var(--mineral-cobalt);\\n --color-cobalt-container: var(--mineral-cobalt-container);\\n --color-cobalt-on-container: var(--mineral-cobalt-on-container);\\n --color-cobalt-aa: var(--mineral-cobalt-aa);\\n --color-tanzanite: var(--mineral-tanzanite);\\n --color-tanzanite-container: var(--mineral-tanzanite-container);\\n --color-tanzanite-on-container: var(--mineral-tanzanite-on-container);\\n --color-tanzanite-aa: var(--mineral-tanzanite-aa);\\n --color-malachite: var(--mineral-malachite);\\n --color-malachite-container: var(--mineral-malachite-container);\\n --color-malachite-on-container: var(--mineral-malachite-on-container);\\n --color-malachite-aa: var(--mineral-malachite-aa);\\n --color-gold: var(--mineral-gold);\\n --color-gold-container: var(--mineral-gold-container);\\n --color-gold-on-container: var(--mineral-gold-on-container);\\n --color-gold-aa: var(--mineral-gold-aa);\\n --color-terracotta: var(--mineral-terracotta);\\n --color-terracotta-container: var(--mineral-terracotta-container);\\n --color-terracotta-on-container: var(--mineral-terracotta-on-container);\\n --color-terracotta-aa: var(--mineral-terracotta-aa);\\n --color-sodalite: var(--mineral-sodalite);\\n --color-sodalite-container: var(--mineral-sodalite-container);\\n --color-sodalite-on-container: var(--mineral-sodalite-on-container);\\n --color-sodalite-aa: var(--mineral-sodalite-aa);\\n --color-copper: var(--mineral-copper);\\n --color-copper-container: var(--mineral-copper-container);\\n --color-copper-on-container: var(--mineral-copper-on-container);\\n --color-copper-aa: var(--mineral-copper-aa);\\n --color-indigo: var(--heritage-indigo);\\n --color-indigo-aa: var(--heritage-indigo-aa);\\n --color-savanna: var(--heritage-savanna);\\n --color-savanna-aa: var(--heritage-savanna-aa);\\n --color-baobab: var(--heritage-baobab);\\n --color-baobab-aa: var(--heritage-baobab-aa);\\n --color-sunset: var(--heritage-sunset);\\n --color-sunset-aa: var(--heritage-sunset-aa);\\n --color-river: var(--heritage-river);\\n --color-river-aa: var(--heritage-river-aa);\\n --color-hematite: var(--heritage-hematite);\\n --color-hematite-aa: var(--heritage-hematite-aa);\\n --color-kalahari: var(--heritage-kalahari);\\n --color-kalahari-aa: var(--heritage-kalahari-aa);\\n --color-ember: var(--exp-ember);\\n --color-ember-container: var(--exp-ember-container);\\n --color-ember-on-container: var(--exp-ember-on-container);\\n --color-ember-ui: var(--exp-ember-ui);\\n --color-ember-aa: var(--exp-ember-aa);\\n --color-acacia: var(--exp-acacia);\\n --color-acacia-container: var(--exp-acacia-container);\\n --color-acacia-on-container: var(--exp-acacia-on-container);\\n --color-acacia-ui: var(--exp-acacia-ui);\\n --color-acacia-aa: var(--exp-acacia-aa);\\n --color-fern: var(--exp-fern);\\n --color-fern-container: var(--exp-fern-container);\\n --color-fern-on-container: var(--exp-fern-on-container);\\n --color-fern-ui: var(--exp-fern-ui);\\n --color-fern-aa: var(--exp-fern-aa);\\n --color-lagoon: var(--exp-lagoon);\\n --color-lagoon-container: var(--exp-lagoon-container);\\n --color-lagoon-on-container: var(--exp-lagoon-on-container);\\n --color-lagoon-ui: var(--exp-lagoon-ui);\\n --color-lagoon-aa: var(--exp-lagoon-aa);\\n --color-storm: var(--exp-storm);\\n --color-storm-container: var(--exp-storm-container);\\n --color-storm-on-container: var(--exp-storm-on-container);\\n --color-storm-ui: var(--exp-storm-ui);\\n --color-storm-aa: var(--exp-storm-aa);\\n --color-dusk: var(--exp-dusk);\\n --color-dusk-container: var(--exp-dusk-container);\\n --color-dusk-on-container: var(--exp-dusk-on-container);\\n --color-dusk-ui: var(--exp-dusk-ui);\\n --color-dusk-aa: var(--exp-dusk-aa);\\n --color-protea: var(--exp-protea);\\n --color-protea-container: var(--exp-protea-container);\\n --color-protea-on-container: var(--exp-protea-on-container);\\n --color-protea-ui: var(--exp-protea-ui);\\n --color-protea-aa: var(--exp-protea-aa);\\n\\n /* ── SURFACES, TEXT, STATUS, SEMANTICS ───────────────────────────────────── */\\n --color-pitch: var(--pitch);\\n --color-void: var(--void);\\n --color-base: var(--base);\\n --color-surface: var(--surface);\\n --color-container: var(--container);\\n --color-overlay: var(--overlay);\\n --color-raised: var(--raised);\\n --color-scrim: var(--scrim);\\n --color-wash: var(--wash);\\n --color-muted: var(--muted);\\n --color-text-primary: var(--text-primary);\\n --color-text-secondary: var(--text-secondary);\\n --color-text-tertiary: var(--text-tertiary);\\n --color-hero-text: var(--hero-text);\\n --color-success: var(--success);\\n --color-warning: var(--warning);\\n --color-error: var(--error);\\n --color-info: var(--info);\\n --color-neutral: var(--neutral);\\n --color-offline: var(--offline);\\n --color-syncing: var(--syncing);\\n --color-destructive-container: var(--destructive-container);\\n --color-background: var(--background);\\n --color-foreground: var(--foreground);\\n --color-card: var(--card);\\n --color-card-foreground: var(--card-foreground);\\n --color-popover: var(--popover);\\n --color-popover-foreground: var(--popover-foreground);\\n --color-primary: var(--primary);\\n --color-primary-foreground: var(--primary-foreground);\\n --color-secondary: var(--secondary);\\n --color-secondary-foreground: var(--secondary-foreground);\\n --color-muted-foreground: var(--muted-foreground);\\n --color-accent: var(--accent);\\n --color-accent-foreground: var(--accent-foreground);\\n --color-destructive: var(--destructive);\\n --color-destructive-foreground: var(--destructive-foreground);\\n --color-overlay-foreground: var(--overlay-foreground);\\n --color-border: var(--border);\\n --color-input: var(--input);\\n --color-ring: var(--ring);\\n --color-brand-accent: var(--brand-accent);\\n --color-brand-accent-foreground: var(--brand-accent-foreground);\\n --color-chart-1: var(--chart-1);\\n --color-chart-2: var(--chart-2);\\n --color-chart-3: var(--chart-3);\\n --color-chart-4: var(--chart-4);\\n --color-chart-5: var(--chart-5);\\n --color-chart-6: var(--chart-6);\\n --color-chart-7: var(--chart-7);\\n --color-chart-positive: var(--chart-positive);\\n --color-chart-negative: var(--chart-negative);\\n --color-chart-neutral: var(--chart-neutral);\\n --color-sidebar: var(--sidebar);\\n --color-sidebar-foreground: var(--sidebar-foreground);\\n --color-sidebar-primary: var(--sidebar-primary);\\n --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);\\n --color-sidebar-accent: var(--sidebar-accent);\\n --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);\\n --color-sidebar-border: var(--sidebar-border);\\n --color-sidebar-ring: var(--sidebar-ring);\\n\\n /* ── SPACING / RADIUS / TYPE / SHADOW / EASING ───────────────────────────── */\\n --spacing-xxs: var(--space-xxs);\\n --spacing-xs: var(--space-xs);\\n --spacing-xs-plus: var(--space-xs-plus);\\n --spacing-sm: var(--space-sm);\\n --spacing-sm-plus: var(--space-sm-plus);\\n --spacing-md: var(--space-md);\\n --spacing-base: var(--space-base);\\n --spacing-base-plus: var(--space-base-plus);\\n --spacing-lg: var(--space-lg);\\n --spacing-xl: var(--space-xl);\\n --spacing-xl-plus: var(--space-xl-plus);\\n --spacing-2xl: var(--space-2xl);\\n --spacing-2xl-plus: var(--space-2xl-plus);\\n --spacing-3xl: var(--space-3xl);\\n --spacing-4xl: var(--space-4xl);\\n --spacing-5xl: var(--space-5xl);\\n --spacing-6xl: var(--space-6xl);\\n --radius-sm: var(--r-sm);\\n --radius-md: var(--r-md);\\n --radius-base: var(--r-base);\\n --radius-lg: var(--r-lg);\\n --radius-xl: var(--r-xl);\\n --radius-2xl: var(--r-2xl);\\n --radius-full: var(--r-full);\\n --text-display: var(--fs-display);\\n --text-display-sm: var(--fs-display-sm);\\n --text-h1: var(--fs-h1);\\n --text-h2: var(--fs-h2);\\n --text-h3: var(--fs-h3);\\n --text-h4: var(--fs-h4);\\n --text-h5: var(--fs-h5);\\n --text-h6: var(--fs-h6);\\n --text-body-lg: var(--fs-body-lg);\\n --text-body: var(--fs-body);\\n --text-small: var(--fs-small);\\n --text-caption: var(--fs-caption);\\n --text-code: var(--fs-code);\\n --shadow-none: var(--elevation-none);\\n --shadow-xs: var(--elevation-xs);\\n --shadow-sm: var(--elevation-sm);\\n --shadow-md: var(--elevation-md);\\n --shadow-lg: var(--elevation-lg);\\n --shadow-xl: var(--elevation-xl);\\n --shadow-inner: var(--elevation-inner);\\n --shadow-focus-ring: var(--elevation-focus-ring);\\n --ease-entrance: var(--easing-entrance);\\n --ease-exit: var(--easing-exit);\\n --ease-standard: var(--easing-standard);\\n --ease-spring: var(--easing-spring);\\n}\\n\\n/* ════ LIGHT — the default theme ════ */\\n:root {\\n /* ── SEVEN MINERALS ──────────────────────────────────────────────────────── */\\n /* cobalt — Knowledge. Digital future, trust, knowledge */\\n --mineral-cobalt: #0047ab;\\n --mineral-cobalt-container: #e3f2fd;\\n --mineral-cobalt-on-container: #002966; /* APCA Lc 90.9 on the container */\\n --mineral-cobalt-aa: #0047ab; /* canonical value already clears the bar */\\n /* tanzanite — Identity. Premium, creativity, connection */\\n --mineral-tanzanite: #4b0082;\\n --mineral-tanzanite-container: #f3e5f5;\\n --mineral-tanzanite-on-container: #2e004d; /* APCA Lc 90.1 on the container */\\n --mineral-tanzanite-aa: #4b0082; /* canonical value already clears the bar */\\n /* malachite — Growth. Growth, nature, success */\\n --mineral-malachite: #004d40;\\n --mineral-malachite-container: #e0f2f1;\\n --mineral-malachite-on-container: #00332b; /* APCA Lc 90.3 on the container */\\n --mineral-malachite-aa: #004d40; /* canonical value already clears the bar */\\n /* gold — Value. Honey, rewards, warmth */\\n --mineral-gold: #5d4037;\\n --mineral-gold-container: #fff8e1;\\n --mineral-gold-on-container: #3e2723; /* APCA Lc 96.1 on the container */\\n --mineral-gold-aa: #5d4037; /* canonical value already clears the bar */\\n /* terracotta — Community. Earth, community, grounding */\\n --mineral-terracotta: #a0522d;\\n --mineral-terracotta-container: #f5e6d3;\\n --mineral-terracotta-on-container: #5d2906; /* APCA Lc 82.9 on the container */\\n --mineral-terracotta-aa: #a0522d; /* canonical value already clears the bar */\\n /* sodalite — Intelligence. Intelligence, depth, reasoning */\\n --mineral-sodalite: #283593;\\n --mineral-sodalite-container: #e8eaf6;\\n --mineral-sodalite-on-container: #141a5c; /* APCA Lc 90.1 on the container */\\n --mineral-sodalite-aa: #283593; /* canonical value already clears the bar */\\n /* copper — Stewardship. Connection, foundation, stewardship */\\n --mineral-copper: #bf5a36;\\n --mineral-copper-container: #fbe4da;\\n --mineral-copper-on-container: #5c2410; /* APCA Lc 84 on the container */\\n --mineral-copper-aa: #b4532f; /* #BF5A36 measures 4.44 — WCAG 2.2 AA on #FFFFFF. bundu-labs/marketing/apps/bundu/src/styles/global.css:11 */\\n\\n /* ── SEVEN HERITAGE TONES ────────────────────────────────────────────────── */\\n --heritage-indigo: #4527a0; /* Dusk, depth, the dyer's craft */\\n --heritage-indigo-aa: #4527a0; /* canonical value already clears the bar */\\n --heritage-savanna: #8d6e1a; /* Sun-dried grass, open land, the dry season */\\n --heritage-savanna-aa: #8d6e1a; /* canonical value already clears the bar */\\n --heritage-baobab: #4e342e; /* The tree of life, age, shelter */\\n --heritage-baobab-aa: #4e342e; /* canonical value already clears the bar */\\n --heritage-sunset: #d84315; /* Day's end, warmth, the gathering hour */\\n --heritage-sunset-aa: #d64215; /* #D84315 measures 4.44 — WCAG 2.2 AA on #FFFFFF. derived — canon lightHex toward #000000 */\\n --heritage-river: #006064; /* Flow, life, the journey */\\n --heritage-river-aa: #006064; /* canonical value already clears the bar */\\n --heritage-hematite: #546e7a; /* Foundation, endurance, the substrate */\\n --heritage-hematite-aa: #546e7a; /* canonical value already clears the bar */\\n --heritage-kalahari: #c9b589; /* Openness, space, the light pole */\\n --heritage-kalahari-aa: #817458; /* #C9B589 measures 2.01 — WCAG 2.2 AA on #FFFFFF. derived — canon lightHex toward #000000 */\\n\\n /* ── SEVEN EXPERIMENTAL — the computed heptagon ──────────────────────────── */\\n /* ember — heptagon index 0 */\\n --exp-ember: #843d20;\\n --exp-ember-container: #ebdfdb;\\n --exp-ember-on-container: #7a3115;\\n --exp-ember-ui: #cd5f33;\\n --exp-ember-aa: #843d20; /* canonical value already clears the bar */\\n /* acacia — heptagon index 1 */\\n --exp-acacia: #4d5615;\\n --exp-acacia-container: #e9ebdb;\\n --exp-acacia-on-container: #48510e;\\n --exp-acacia-ui: #7e8c22;\\n --exp-acacia-aa: #4d5615; /* canonical value already clears the bar */\\n /* fern — heptagon index 2 */\\n --exp-fern: #175e17;\\n --exp-fern-container: #dbebdb;\\n --exp-fern-on-container: #0f570f;\\n --exp-fern-ui: #259725;\\n --exp-fern-aa: #175e17; /* canonical value already clears the bar */\\n /* lagoon — heptagon index 3 */\\n --exp-lagoon: #165b51;\\n --exp-lagoon-container: #dbebe9;\\n --exp-lagoon-on-container: #0e554b;\\n --exp-lagoon-ui: #249383;\\n --exp-lagoon-aa: #165b51; /* canonical value already clears the bar */\\n /* storm — heptagon index 4 */\\n --exp-storm: #284ca6;\\n --exp-storm-container: #dbe0eb;\\n --exp-storm-on-container: #1a409b;\\n --exp-storm-ui: #577bd6;\\n --exp-storm-aa: #284ca6; /* canonical value already clears the bar */\\n /* dusk — heptagon index 5 */\\n --exp-dusk: #742aad;\\n --exp-dusk-container: #e4dbeb;\\n --exp-dusk-on-container: #661b9e;\\n --exp-dusk-ui: #a35dd8;\\n --exp-dusk-aa: #742aad; /* canonical value already clears the bar */\\n /* protea — heptagon index 6 */\\n --exp-protea: #932464;\\n --exp-protea-container: #ebdbe4;\\n --exp-protea-on-container: #841656;\\n --exp-protea-ui: #d34998;\\n --exp-protea-aa: #932464; /* canonical value already clears the bar */\\n\\n /* ── SURFACE LADDER — nine steps, deepest to highest ─────────────────────── */\\n --pitch: #fafafa; /* Deepest surface — media wells, splash (prime step P2) */\\n --void: #f8f8f7; /* App shell behind base (prime step P3) */\\n --base: #f3f3f1; /* Page background — ambient base surface (prime step P5) */\\n --surface: #eeeeec; /* Card / panel surface (prime step P7) */\\n --container: #e5e4e1; /* Neutral containers, grouped content (prime step P11) */\\n --overlay: #e0dfdc; /* Overlays and dialogs (prime step P13) */\\n --raised: #d6d5d1; /* Raised elements above overlay — menus, toasts (prime step P17) */\\n --scrim: rgba(0, 0, 0, 0.4); /* Semi-transparent backdrop behind overlays */\\n --wash: color-mix(\\n in oklab,\\n var(--surface) 93%,\\n var(--brand-accent)\\n ); /* Cover-colour page wash — surface tinted with the active brand accent */\\n --muted: #faf9f5; /* Deepest inset fill — not a ladder rung */\\n\\n /* ── TEXT RAMP — three tiers, APCA-measured on --base ────────────────────── */\\n --text-primary: #373635; /* APCA Lc 90.4 on --base */\\n --text-secondary: #5d5d5b; /* APCA Lc 75.4 on --base */\\n --text-tertiary: #7f7f7d; /* APCA Lc 60.2 on --base */\\n --hero-text: #ffffff; /* Text over photography — pair with --hero-text-shadow, never bare */\\n --hero-text-shadow:\\n 0 1px 3px rgba(0, 0, 0, 0.6), 0 2px 12px rgba(0, 0, 0, 0.4);\\n --muted-foreground: var(--text-secondary);\\n\\n /* ── STATUS ──────────────────────────────────────────────────────────────── */\\n --success: #004d40; /* Success states, positive actions */\\n --warning: #7a5c00; /* Warning states, caution */\\n --error: #b3261e; /* Error states, destructive actions */\\n --info: #0047ab; /* Informational states */\\n --neutral: #55514b; /* Neutral / inactive status, secondary data series */\\n --offline: #674c32; /* Offline / disconnected state */\\n --syncing: #1c5962; /* In-progress sync / pending state */\\n --destructive-container: #fdeded; /* Soft background behind destructive content */\\n\\n /* ── CHART — the seven minerals, in palette order ────────────────────────── */\\n --chart-1: var(--mineral-cobalt);\\n --chart-2: var(--mineral-tanzanite);\\n --chart-3: var(--mineral-malachite);\\n --chart-4: var(--mineral-gold);\\n --chart-5: var(--mineral-terracotta);\\n --chart-6: var(--mineral-sodalite);\\n --chart-7: var(--mineral-copper);\\n /* Semantic series. These must NOT change hue between themes — a negative\\n series that is orange in light and rose in dark is the defect found in\\n mukoko-news, where all twelve chart values were raw Tailwind palette. */\\n --chart-positive: var(--success);\\n --chart-negative: var(--error);\\n --chart-neutral: var(--neutral);\\n\\n /* ── SHADCN SEMANTIC SET ─────────────────────────────────────────────────── */\\n --background: var(\\n --base\\n ); /* ALIAS. /v1/brand calls this step `base`; shadcn calls it `background`. */\\n --foreground: var(--text-primary);\\n --card: var(--surface);\\n --card-foreground: var(--text-primary);\\n --popover: var(--overlay);\\n --popover-foreground: var(--text-primary);\\n --primary-foreground: #ffffff;\\n --secondary: var(--container);\\n --secondary-foreground: var(--text-primary);\\n --destructive: var(--error);\\n --destructive-foreground: #ffffff;\\n --overlay-foreground: var(--text-primary);\\n --accent-foreground: var(--text-primary);\\n --brand-accent-foreground: #ffffff;\\n\\n /* ── SIDEBAR ─────────────────────────────────────────────────────────────── */\\n --sidebar: var(--surface);\\n --sidebar-foreground: var(--text-primary);\\n --sidebar-primary: var(--primary);\\n --sidebar-primary-foreground: var(--primary-foreground);\\n --sidebar-accent: var(--container);\\n --sidebar-accent-foreground: var(--text-primary);\\n --sidebar-border: var(--border);\\n --sidebar-ring: var(--ring);\\n\\n /* ── UNRESOLVED — the registry and /v1/brand disagree; this is NOT a ruling ── */\\n /* --primary registry: ink #141413 | /v1/brand: tanzanite #4B0082\\n Genuinely per-brand — bundu is copper, shamwari sodalite, nyuchi gold — so\\n it is NOT defined as a value here. It resolves through the [data-brand]\\n block at the foot of this file. `mzizi` is the default because this is the\\n mzizi default stylesheet, and mzizi is hematite by owner decision\\n (2026-09-30), read from /v1/brand ecosystem[name=mzizi]. Until then this\\n default was gold. Set data-brand on <html> to change it.\\n TO REVERSE: if the owner rules for ink, that is a new neutral family in\\n palette.source.ts and a [data-brand] row, not an edit here. */\\n --primary: var(--heritage-hematite-aa);\\n /* --ring registry: ink #141413 | /v1/brand: cobalt #0047AB\\n /v1/brand ties the focus ring to cobalt for every brand and the\\n accessibility record says \\\"2px ring with ring-offset-2, using --ring\\\".\\n The brand blocks below keep it cobalt; one that needs otherwise overrides. */\\n --ring: var(--mineral-cobalt-aa);\\n /* --accent registry: #faf9f5 | /v1/brand: #E3F2FD (cobalt container)\\n Both readings are a pale container; they disagree on WHOSE. Deriving it\\n from --primary takes neither side and follows the brand automatically.\\n color-mix is already how /v1/brand defines --wash, so this is the system's\\n own technique, not a new one.\\n TO REVERSE: assign var(--mineral-<x>-container) in the brand block. */\\n --accent: color-mix(in oklab, var(--primary) 12%, var(--base));\\n /* --brand-accent registry: gold #7a5c00 | /v1/brand: tanzanite #4B0082\\n Both are \\\"the app's saturated brand mineral\\\" — which is what --primary is.\\n Aliasing it picks no brand and keeps the two from drifting apart. */\\n --brand-accent: var(--primary);\\n /* --border registry: rgba(10,10,10,0.06) | /v1/brand: #E7E5E0\\n A translucent hairline versus warm stone. Not per-brand — a skin choice.\\n /v1/brand's value ships because this file's other surface values are\\n /v1/brand's and mixing the two vocabularies is what produced the drift.\\n TO REVERSE: one line in LOCAL OVERRIDES. */\\n --border: #e7e5e0;\\n /* --input registry: rgba(10,10,10,0.06) | /v1/brand: #FFFFFF */\\n --input: #ffffff;\\n /* --background registry: #f3f2ee | /v1/brand: #F3F3F1 (the `base` step)\\n Emitted above as an ALIAS of --base rather than a value of its own, so the\\n ladder has one definition and the shadcn name resolves to it. The disputed\\n hex is --base itself; /v1/brand's is used because --base is a rung of the\\n nine-step ladder and the rest of that ladder is /v1/brand's. */\\n\\n /* ── SPACING — 17 rungs ──────────────────────────────────────────────────── */\\n --space-xxs: 0.125rem; /* 2px */\\n --space-xs: 0.25rem; /* 4px */\\n --space-xs-plus: 0.375rem; /* 6px */\\n --space-sm: 0.5rem; /* 8px */\\n --space-sm-plus: 0.625rem; /* 10px */\\n --space-md: 0.75rem; /* 12px */\\n --space-base: 1rem; /* 16px */\\n --space-base-plus: 1.25rem; /* 20px */\\n --space-lg: 1.5rem; /* 24px */\\n --space-xl: 2rem; /* 32px */\\n --space-xl-plus: 2.5rem; /* 40px */\\n --space-2xl: 3rem; /* 48px */\\n --space-2xl-plus: 3.5rem; /* 56px */\\n --space-3xl: 4rem; /* 64px */\\n --space-4xl: 5rem; /* 80px */\\n --space-5xl: 6rem; /* 96px */\\n --space-6xl: 8rem; /* 128px */\\n\\n /* ── MOTION — dual-named, so both vocabularies resolve ───────────────────── */\\n --motion-quick: 100ms;\\n --motion-standard: 200ms;\\n --motion-emphasis: 350ms;\\n --motion-dramatic: 500ms;\\n --motion-duration-quick: var(--motion-quick);\\n --motion-duration-standard: var(--motion-standard);\\n --motion-duration-emphasis: var(--motion-emphasis);\\n --motion-duration-dramatic: var(--motion-dramatic);\\n --easing-entrance: cubic-bezier(0, 0, 0.2, 1);\\n --easing-exit: cubic-bezier(0.4, 0, 1, 1);\\n --easing-standard: cubic-bezier(0.4, 0, 0.2, 1);\\n --easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);\\n --motion-ease-entrance: var(--easing-entrance);\\n --motion-ease-exit: var(--easing-exit);\\n --motion-ease-standard: var(--easing-standard);\\n --motion-ease-spring: var(--easing-spring);\\n --motion-stagger-tight: 30ms;\\n --motion-stagger-base: 50ms;\\n --motion-stagger-loose: 80ms;\\n\\n /* ── TYPOGRAPHY — 13 sizes, 9 line-heights ───────────────────────────────── */\\n --font-family-sans: \\\"Noto Sans\\\", ui-sans-serif, system-ui, sans-serif;\\n --font-family-serif: \\\"Noto Serif\\\", ui-serif, Georgia, serif;\\n --font-family-mono: \\\"JetBrains Mono\\\", ui-monospace, Menlo, monospace;\\n --fs-display: 4.5rem; /* 72 — serif 700, line-height 1.1 */\\n --fs-display-sm: 3.75rem; /* 60 — serif 700, line-height 1.1 */\\n --fs-h1: 3rem; /* 48 — serif 700, line-height 1.15 */\\n --fs-h2: 2.25rem; /* 36 — serif 600, line-height 1.2 */\\n --fs-h3: 1.875rem; /* 30 — serif 600, line-height 1.25 */\\n --fs-h4: 1.5rem; /* 24 — sans 600, line-height 1.3 */\\n --fs-h5: 1.25rem; /* 20 — sans 600, line-height 1.4 */\\n --fs-h6: 1rem; /* 16 — sans 600, line-height 1.4 */\\n --fs-body-lg: 1.125rem; /* 18 — sans 400, line-height 1.6 */\\n --fs-body: 1rem; /* 16 — sans 400, line-height 1.6 */\\n --fs-small: 0.875rem; /* 14 — sans 400, line-height 1.5 */\\n --fs-caption: 0.75rem; /* 12 — sans 400, line-height 1.5 */\\n --fs-code: 0.875rem; /* 14 — mono 400, line-height 1.6 */\\n --lh-display: 1.1;\\n --lh-h1: 1.15;\\n --lh-h2: 1.2;\\n --lh-h3: 1.25;\\n --lh-h4: 1.3;\\n --lh-h5: 1.4;\\n --lh-h6: 1.4;\\n --lh-body: 1.6;\\n --lh-small: 1.5;\\n --fw-display: 700;\\n --fw-display-sm: 700;\\n --fw-h1: 700;\\n --fw-h2: 600;\\n --fw-h3: 600;\\n --fw-h4: 600;\\n --fw-h5: 600;\\n --fw-h6: 600;\\n --fw-body-lg: 400;\\n --fw-body: 400;\\n --fw-small: 400;\\n --fw-caption: 400;\\n --fw-code: 400;\\n\\n /* ── RADIUS — every rung derives from a 7px unit ─────────────────────────── */\\n --radius-unit: 7px; /* CLAUDE.md §7.5. Apps running a 10px or 12px unit have the whole calc() scale wrong. */\\n --r-sm: 7px;\\n --r-md: 12px;\\n --r-base: 14px;\\n --r-lg: 14px;\\n --r-xl: 17px;\\n --r-2xl: 17px;\\n --r-full: 9999px;\\n --radius: calc(var(--radius-unit) * 2); /* 14px */\\n --r-circle: 50%;\\n /* Semantic aliases — /v1/brand componentSpecs: buttons and inputs are ALWAYS pill. */\\n --r-button: var(--r-full);\\n --r-input: var(--r-full);\\n --r-badge: var(--r-full);\\n --r-card: var(--r-base);\\n\\n /* ── ELEVATION — 8 rungs ─────────────────────────────────────────────────── */\\n --elevation-none: none;\\n --elevation-xs: 0 1px 2px rgba(20, 20, 19, 0.04);\\n --elevation-sm: 0 1px 2px rgba(0, 0, 0, 0.15);\\n --elevation-md: 0 4px 12px rgba(0, 0, 0, 0.2);\\n --elevation-lg: 0 8px 24px rgba(0, 0, 0, 0.25);\\n --elevation-xl: 0 20px 60px rgba(0, 0, 0, 0.4);\\n --elevation-inner: inset 0 2px 4px rgba(20, 20, 19, 0.06);\\n --elevation-focus-ring: 0 0 0 2px var(--background), 0 0 0 4px var(--ring);\\n\\n /* ── TOUCH TARGETS AND CONTROL HEIGHTS ───────────────────────────────────── */\\n --touch-target-lg: 56px; /* Default touch target — /v1/brand defaultTouchTarget */\\n --touch-target: 48px; /* Minimum touch target — /v1/brand minTouchTarget */\\n --touch-target-sm: 40px; /* Dense secondary actions; below the 48px floor, so not for primary controls */\\n --h-button-default: 3.5rem; /* 56px — componentSpecs.button.heights.default */\\n --h-button-sm: 3rem; /* 48px — componentSpecs.button.heights.sm */\\n --h-input: 3.5rem; /* 56px — inputs match the default button */\\n\\n /* ── Z-INDEX ─────────────────────────────────────────────────────────────── */\\n --z-base: 0;\\n --z-dropdown: 10;\\n --z-sticky: 20;\\n --z-overlay: 30;\\n --z-modal: 40;\\n --z-toast: 50;\\n --z-tooltip: 60;\\n}\\n\\n/* ════ DARK ════\\n * Both selectors, because the estate uses both: next-themes writes `.dark`,\\n * and several apps drive the theme from `data-theme`. A file that carried only\\n * one of them rendered the light value in dark mode wherever the other was in\\n * use — which is the single defect the completeness test exists to catch. */\\n.dark,\\n[data-theme=\\\"dark\\\"] {\\n /* ── SEVEN MINERALS ──────────────────────────────────────────────────────── */\\n /* cobalt — Knowledge. Digital future, trust, knowledge */\\n --mineral-cobalt: #00b0ff;\\n --mineral-cobalt-container: #001f3f;\\n --mineral-cobalt-on-container: #b3e5fc; /* APCA Lc -84.2 on the container */\\n --mineral-cobalt-aa: #86dcff; /* #00B0FF measures -54.7 — APCA Silver on #0E0D0C. nyuchi/bushtrade/src/app/globals.css:171 (nudged from #80DAFF, Lc -77.0 — its comment claims 78) */\\n /* tanzanite — Identity. Premium, creativity, connection */\\n --mineral-tanzanite: #b388ff;\\n --mineral-tanzanite-container: #1a0033;\\n --mineral-tanzanite-on-container: #e1bee7; /* APCA Lc -73.3 on the container */\\n --mineral-tanzanite-aa: #dcc8ff; /* #B388FF measures -50 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n /* malachite — Growth. Growth, nature, success */\\n --mineral-malachite: #64ffda;\\n --mineral-malachite-container: #00251a;\\n --mineral-malachite-on-container: #a7ffeb; /* APCA Lc -94.8 on the container */\\n --mineral-malachite-aa: #64ffda; /* canonical value already clears the bar */\\n /* gold — Value. Honey, rewards, warmth */\\n --mineral-gold: #ffd740;\\n --mineral-gold-container: #332200;\\n --mineral-gold-on-container: #ffecb3; /* APCA Lc -93 on the container */\\n --mineral-gold-aa: #ffd740; /* canonical value already clears the bar */\\n /* terracotta — Community. Earth, community, grounding */\\n --mineral-terracotta: #e1b07e;\\n --mineral-terracotta-container: #3e2817;\\n --mineral-terracotta-on-container: #f5e6d3; /* APCA Lc -88.4 on the container */\\n --mineral-terracotta-aa: #ebcca3; /* #E1B07E measures -64.5 — APCA Silver on #0E0D0C. nyuchi/bushtrade/src/app/globals.css:166 (nudged from #EAC99E, Lc -76.7 — its comment claims 78) */\\n /* sodalite — Intelligence. Intelligence, depth, reasoning */\\n --mineral-sodalite: #3d5afe;\\n --mineral-sodalite-container: #0d1442;\\n --mineral-sodalite-on-container: #c5cae9; /* APCA Lc -73.9 on the container */\\n --mineral-sodalite-aa: #c6cfff; /* #3D5AFE measures -26.9 — APCA Silver on #0E0D0C. shamwari-ai/docs/style.css:32 */\\n /* copper — Stewardship. Connection, foundation, stewardship */\\n --mineral-copper: #ff8a65;\\n --mineral-copper-container: #3a1a0e;\\n --mineral-copper-on-container: #ffd3c2; /* APCA Lc -82.8 on the container */\\n --mineral-copper-aa: #ffc3b0; /* #FF8A65 measures -56.6 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n\\n /* ── SEVEN HERITAGE TONES ────────────────────────────────────────────────── */\\n --heritage-indigo: #7986cb; /* Dusk, depth, the dyer's craft */\\n --heritage-indigo-aa: #cbd0eb; /* #7986CB measures -39.4 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n --heritage-savanna: #e5c158; /* Sun-dried grass, open land, the dry season */\\n --heritage-savanna-aa: #ebcf7d; /* #E5C158 measures -71.1 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n --heritage-baobab: #a1887f; /* The tree of life, age, shelter */\\n --heritage-baobab-aa: #d9cfcc; /* #A1887F measures -40.9 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n --heritage-sunset: #ff7043; /* Day's end, warmth, the gathering hour */\\n --heritage-sunset-aa: #ffc3b0; /* #FF7043 measures -49.3 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n --heritage-river: #4dd0e1; /* Flow, life, the journey */\\n --heritage-river-aa: #84dfea; /* #4DD0E1 measures -68.2 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n --heritage-hematite: #90a4ae; /* Foundation, endurance, the substrate */\\n --heritage-hematite-aa: #c9d2d7; /* #90A4AE measures -51 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n --heritage-kalahari: #e8d9b5; /* Openness, space, the light pole */\\n --heritage-kalahari-aa: #e8d9b5; /* canonical value already clears the bar */\\n\\n /* ── SEVEN EXPERIMENTAL — the computed heptagon ──────────────────────────── */\\n /* ember — heptagon index 0 */\\n --exp-ember: #da8766;\\n --exp-ember-container: #352721;\\n --exp-ember-on-container: #eba68a;\\n --exp-ember-ui: #bb562d;\\n --exp-ember-aa: #eec9ba; /* #DA8766 measures -48.7 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n /* acacia — heptagon index 1 */\\n --exp-acacia: #93a528;\\n --exp-acacia-container: #333521;\\n --exp-acacia-on-container: #b6ce23;\\n --exp-acacia-ui: #768420;\\n --exp-acacia-aa: #cdd69c; /* #93A528 measures -48.7 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n /* fern — heptagon index 2 */\\n --exp-fern: #2cb42b;\\n --exp-fern-container: #213521;\\n --exp-fern-on-container: #28db28;\\n --exp-fern-ui: #228d22;\\n --exp-fern-aa: #a4dfa4; /* #2CB42B measures -49.2 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n /* lagoon — heptagon index 3 */\\n --exp-lagoon: #2aae9b;\\n --exp-lagoon-container: #213532;\\n --exp-lagoon-on-container: #24d6bc;\\n --exp-lagoon-ui: #218a7a;\\n --exp-lagoon-aa: #a3dcd4; /* #2AAE9B measures -48.8 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n /* storm — heptagon index 4 */\\n --exp-storm: #7e9be0;\\n --exp-storm-container: #212735;\\n --exp-storm-on-container: #99b2ee;\\n --exp-storm-ui: #426cd1;\\n --exp-storm-aa: #c4d1f1; /* #7E9BE0 measures -48.6 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n /* dusk — heptagon index 5 */\\n --exp-dusk: #ba87e2;\\n --exp-dusk-container: #2d2135;\\n --exp-dusk-on-container: #cc9fef;\\n --exp-dusk-ui: #9749d3;\\n --exp-dusk-aa: #dfc8f2; /* #BA87E2 measures -48.7 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n /* protea — heptagon index 6 */\\n --exp-protea: #df7bb4;\\n --exp-protea-container: #35212d;\\n --exp-protea-on-container: #ed98c9;\\n --exp-protea-ui: #ca3188;\\n --exp-protea-aa: #f1c4dd; /* #DF7BB4 measures -48.7 — APCA Silver on #0E0D0C. derived — canon darkHex toward #FFFFFF */\\n\\n /* ── SURFACE LADDER — nine steps, deepest to highest ─────────────────────── */\\n --pitch: #050505; /* Deepest surface — media wells, splash (prime step P2) */\\n --void: #080807; /* App shell behind base (prime step P3) */\\n --base: #0e0d0c; /* Page background — ambient base surface (prime step P5) */\\n --surface: #131211; /* Card / panel surface (prime step P7) */\\n --container: #1e1d1a; /* Neutral containers, grouped content (prime step P11) */\\n --overlay: #23221f; /* Overlays and dialogs (prime step P13) */\\n --raised: #2e2c29; /* Raised elements above overlay — menus, toasts (prime step P17) */\\n --scrim: rgba(0, 0, 0, 0.6); /* Semi-transparent backdrop behind overlays */\\n --wash: color-mix(\\n in oklab,\\n var(--surface) 88%,\\n var(--brand-accent)\\n ); /* Cover-colour page wash — surface tinted with the active brand accent */\\n --muted: #050504; /* Deepest inset fill — not a ladder rung */\\n\\n /* ── TEXT RAMP — three tiers, APCA-measured on --base ────────────────────── */\\n --text-primary: #e5e5e3; /* APCA Lc -90.7 on --base */\\n --text-secondary: #ccccca; /* APCA Lc -75.3 on --base */\\n --text-tertiary: #b3b3b1; /* APCA Lc -60.9 on --base */\\n --hero-text: #ffffff; /* Text over photography — pair with --hero-text-shadow, never bare */\\n --hero-text-shadow:\\n 0 1px 3px rgba(0, 0, 0, 0.6), 0 2px 12px rgba(0, 0, 0, 0.4);\\n --muted-foreground: var(--text-secondary);\\n\\n /* ── STATUS ──────────────────────────────────────────────────────────────── */\\n --success: #64ffda; /* Success states, positive actions */\\n --warning: #ffd866; /* Warning states, caution */\\n --error: #f2b8b5; /* Error states, destructive actions */\\n --info: #00b0ff; /* Informational states */\\n --neutral: #a09c93; /* Neutral / inactive status, secondary data series */\\n --offline: #ba9570; /* Offline / disconnected state */\\n --syncing: #36abba; /* In-progress sync / pending state */\\n --destructive-container: #3e1818; /* Soft background behind destructive content */\\n\\n /* ── CHART — the seven minerals, in palette order ────────────────────────── */\\n --chart-1: var(--mineral-cobalt);\\n --chart-2: var(--mineral-tanzanite);\\n --chart-3: var(--mineral-malachite);\\n --chart-4: var(--mineral-gold);\\n --chart-5: var(--mineral-terracotta);\\n --chart-6: var(--mineral-sodalite);\\n --chart-7: var(--mineral-copper);\\n /* Semantic series. These must NOT change hue between themes — a negative\\n series that is orange in light and rose in dark is the defect found in\\n mukoko-news, where all twelve chart values were raw Tailwind palette. */\\n --chart-positive: var(--success);\\n --chart-negative: var(--error);\\n --chart-neutral: var(--neutral);\\n\\n /* ── SHADCN SEMANTIC SET ─────────────────────────────────────────────────── */\\n --background: var(\\n --base\\n ); /* ALIAS. /v1/brand calls this step `base`; shadcn calls it `background`. */\\n --foreground: var(--text-primary);\\n --card: var(--surface);\\n --card-foreground: var(--text-primary);\\n --popover: var(--overlay);\\n --popover-foreground: var(--text-primary);\\n --primary-foreground: #0e0d0c;\\n --secondary: var(--container);\\n --secondary-foreground: var(--text-primary);\\n --destructive: var(--error);\\n --destructive-foreground: #0e0d0c;\\n --overlay-foreground: var(--text-primary);\\n --accent-foreground: var(--text-primary);\\n --brand-accent-foreground: #0e0d0c;\\n\\n /* ── SIDEBAR ─────────────────────────────────────────────────────────────── */\\n --sidebar: var(--surface);\\n --sidebar-foreground: var(--text-primary);\\n --sidebar-primary: var(--primary);\\n --sidebar-primary-foreground: var(--primary-foreground);\\n --sidebar-accent: var(--container);\\n --sidebar-accent-foreground: var(--text-primary);\\n --sidebar-border: var(--border);\\n --sidebar-ring: var(--ring);\\n\\n /* ── UNRESOLVED — the registry and /v1/brand disagree; this is NOT a ruling ── */\\n /* --border registry: rgba(10,10,10,0.06) | /v1/brand: #2A2927\\n A translucent hairline versus warm stone. Not per-brand — a skin choice.\\n /v1/brand's value ships because this file's other surface values are\\n /v1/brand's and mixing the two vocabularies is what produced the drift.\\n TO REVERSE: one line in LOCAL OVERRIDES. */\\n --border: #2a2927;\\n /* --input registry: rgba(10,10,10,0.06) | /v1/brand: #100F0E */\\n --input: #100f0e;\\n}\\n\\n/* ════════════════════════════════════════════════════════════════════════════\\n * BRAND BLOCKS\\n *\\n * The per-brand variance, in the same file, because consumption is copy-in: a\\n * second artifact to install beside this one is a second thing that can drift,\\n * and killing that drift is why this file exists. They are inert until\\n * `data-brand` is set, so a repo that wants one edits nothing and a repo that\\n * wants none is unaffected.\\n *\\n * Each block moves `--primary` and `--ring` ONLY — the pattern\\n * `bundu-labs/marketing` proved — and assigns a palette variable\\n * (`var(--mineral-*)`, or `var(--heritage-*)` for mzizi's hematite), never a hex.\\n * `--accent` and `--brand-accent` follow `--primary` automatically. Each block\\n * references the `-aa` variant, so a brand whose mineral fails contrast gets\\n * the measured-safe value rather than each team rediscovering the problem.\\n *\\n * Every family below is sourced, none guessed — the comment names where.\\n * ════════════════════════════════════════════════════════════════════════════ */\\n\\n/* mzizi — hematite.\\n * /v1/brand ecosystem[name=mzizi].mineral (owner decision, 2026-09-30) */\\n[data-brand=\\\"mzizi\\\"] {\\n --primary: var(--heritage-hematite-aa);\\n --ring: var(--mineral-cobalt-aa);\\n}\\n\\n/* mukoko — tanzanite.\\n * /v1/brand ecosystem[name=mukoko].mineral */\\n[data-brand=\\\"mukoko\\\"] {\\n --primary: var(--mineral-tanzanite-aa);\\n --ring: var(--mineral-cobalt-aa);\\n}\\n\\n/* nyuchi — gold.\\n * /v1/brand ecosystem[name=nyuchi].mineral */\\n[data-brand=\\\"nyuchi\\\"] {\\n --primary: var(--mineral-gold-aa);\\n --ring: var(--mineral-cobalt-aa);\\n}\\n\\n/* bundu — copper.\\n * /v1/brand ecosystem[name=bundu].mineral */\\n[data-brand=\\\"bundu\\\"] {\\n --primary: var(--mineral-copper-aa);\\n --ring: var(--mineral-cobalt-aa);\\n}\\n\\n/* shamwari — sodalite.\\n * /v1/brand ecosystem[name=shamwari].mineral */\\n[data-brand=\\\"shamwari\\\"] {\\n --primary: var(--mineral-sodalite-aa);\\n --ring: var(--mineral-cobalt-aa);\\n}\\n\\n/* news — cobalt.\\n * lib/tokens/index.ts:696 — mukoko.news. No `news` ecosystem record in /v1/brand. */\\n[data-brand=\\\"news\\\"] {\\n --primary: var(--mineral-cobalt-aa);\\n --ring: var(--mineral-cobalt-aa);\\n}\\n\\n/* nhimbe — malachite.\\n * /v1/brand ecosystem[name=nhimbe].mineral (agrees with lib/tokens/index.ts mukoko.events) */\\n[data-brand=\\\"nhimbe\\\"] {\\n --primary: var(--mineral-malachite-aa);\\n --ring: var(--mineral-cobalt-aa);\\n}\\n\\n/* bushtrade — gold.\\n * /v1/brand ecosystem[name=bushtrade].mineral (agrees with lib/tokens/index.ts mukoko.commerce) */\\n[data-brand=\\\"bushtrade\\\"] {\\n --primary: var(--mineral-gold-aa);\\n --ring: var(--mineral-cobalt-aa);\\n}\\n\\n/* ════════════════════════════════════════════════════════════════════════════\\n * LOCAL OVERRIDES — the only block a consuming repo edits.\\n *\\n * Put divergence here, with a comment saying why and what would reverse it, the\\n * way nhimbe's control-height block does. Everything above is generated and a\\n * re-copy overwrites it; this block is where your copy stays yours.\\n * ════════════════════════════════════════════════════════════════════════════ */\\n\"}]}}",
422
422
  "mzizi-tokens-kotlin": "{\"status\":200,\"body\":{\"$schema\":\"https://ui.shadcn.com/schema/registry-item.json\",\"name\":\"mzizi-tokens-kotlin\",\"type\":\"registry:lib\",\"title\":\"mzizi Tokens Kotlin\",\"description\":\"Mzizi design tokens for Kotlin / Jetpack Compose. Generated by `pnpm tokens:sync` from the same source that emits the web CSS custom properties — seven African Minerals + seven Heritage tones, both themes. Color objects, spacing Dp values, radius and typography constants for Android. Never hand-edited: adding a target means adding an emitter, never re-authoring the palette (CLAUDE.md §8.4.1).\",\"author\":\"Mzizi, operated by Nyuchi Africa (Pvt) Ltd — https://mzizi.dev\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[],\"files\":[{\"path\":\"components/registry/n1-tokens/mzizi-tokens-kotlin.kt\",\"type\":\"registry:lib\",\"target\":\"lib/tokens/mzizi-tokens-kotlin.kt\",\"content\":\"// NYUCHI DESIGN TOKENS — N1\\n// Kotlin / Jetpack Compose — generated by scripts/sync-tokens.ts from\\n// lib/tokens/palette.source.ts, the canonical palette in this repo.\\n//\\n// Carries all 21 families: seven minerals, seven heritage tones and\\n// the seven experimental — the same set /v1/brand and the MCP serve.\\n//\\n// DO NOT EDIT BY HAND. Run `pnpm tokens:sync`; `pnpm tokens:verify`\\n// fails the build if this file drifts from the source.\\n\\npackage com.nyuchi.design.tokens\\n\\nimport androidx.compose.ui.graphics.Color\\nimport androidx.compose.ui.unit.dp\\n\\nobject MziziColors {\\n // Seven African Minerals\\n val CobaltDark = Color(0xFF00B0FF)\\n val CobaltLight = Color(0xFF0047AB)\\n val TanzaniteDark = Color(0xFFB388FF)\\n val TanzaniteLight = Color(0xFF4B0082)\\n val MalachiteDark = Color(0xFF64FFDA)\\n val MalachiteLight = Color(0xFF004D40)\\n val GoldDark = Color(0xFFFFD740)\\n val GoldLight = Color(0xFF5D4037)\\n val TerracottaDark = Color(0xFFE1B07E)\\n val TerracottaLight = Color(0xFFA0522D)\\n val SodaliteDark = Color(0xFF3D5AFE)\\n val SodaliteLight = Color(0xFF283593)\\n val CopperDark = Color(0xFFFF8A65)\\n val CopperLight = Color(0xFFBF5A36)\\n\\n // Seven Heritage Colors\\n val IndigoDark = Color(0xFF7986CB)\\n val IndigoLight = Color(0xFF4527A0)\\n val SavannaDark = Color(0xFFE5C158)\\n val SavannaLight = Color(0xFF8D6E1A)\\n val BaobabDark = Color(0xFFA1887F)\\n val BaobabLight = Color(0xFF4E342E)\\n val SunsetDark = Color(0xFFFF7043)\\n val SunsetLight = Color(0xFFD84315)\\n val RiverDark = Color(0xFF4DD0E1)\\n val RiverLight = Color(0xFF006064)\\n val HematiteDark = Color(0xFF90A4AE)\\n val HematiteLight = Color(0xFF546E7A)\\n val KalahariDark = Color(0xFFE8D9B5)\\n val KalahariLight = Color(0xFFC9B589)\\n\\n // Seven Experimental tones\\n val EmberDark = Color(0xFFDA8766)\\n val EmberLight = Color(0xFF843D20)\\n val AcaciaDark = Color(0xFF93A528)\\n val AcaciaLight = Color(0xFF4D5615)\\n val FernDark = Color(0xFF2CB42B)\\n val FernLight = Color(0xFF175E17)\\n val LagoonDark = Color(0xFF2AAE9B)\\n val LagoonLight = Color(0xFF165B51)\\n val StormDark = Color(0xFF7E9BE0)\\n val StormLight = Color(0xFF284CA6)\\n val DuskDark = Color(0xFFBA87E2)\\n val DuskLight = Color(0xFF742AAD)\\n val ProteaDark = Color(0xFFDF7BB4)\\n val ProteaLight = Color(0xFF932464)\\n}\\n\\nobject MziziSpacing {\\n val xs = 4.dp\\n val sm = 8.dp\\n val md = 12.dp\\n val base = 16.dp\\n val lg = 24.dp\\n val xl = 32.dp\\n}\\n\\nobject MziziRadius {\\n val sm = 7.dp\\n val md = 12.dp\\n val lg = 14.dp\\n val xl = 17.dp\\n val full = 9999.dp\\n}\\n\\nobject MziziFonts {\\n const val sans = \\\"Noto Sans\\\"\\n const val serif = \\\"Noto Serif\\\"\\n const val mono = \\\"JetBrains Mono\\\"\\n}\\n\"}]}}",
423
423
  "mzizi-tokens-python": "{\"status\":200,\"body\":{\"$schema\":\"https://ui.shadcn.com/schema/registry-item.json\",\"name\":\"mzizi-tokens-python\",\"type\":\"registry:lib\",\"title\":\"mzizi Tokens Python\",\"description\":\"Mzizi design tokens for Python. Generated by `pnpm tokens:sync` from the same source that emits the web CSS custom properties — seven African Minerals + seven Heritage tones, both themes. Frozen dataclasses of colour values for analytics pipelines, data visualisation (matplotlib, plotly, altair), report generation and ML tooling. Never hand-edited: adding a target means adding an emitter, never re-authoring the palette (CLAUDE.md §8.4.1).\",\"author\":\"Mzizi, operated by Nyuchi Africa (Pvt) Ltd — https://mzizi.dev\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[],\"files\":[{\"path\":\"components/registry/n1-tokens/mzizi-tokens-python.py\",\"type\":\"registry:lib\",\"target\":\"lib/tokens/mzizi-tokens-python.py\",\"content\":\"# NYUCHI DESIGN TOKENS — N1\\n# Python — generated by scripts/sync-tokens.ts from\\n# lib/tokens/palette.source.ts, the canonical palette in this repo.\\n#\\n# Carries all 21 families: seven minerals, seven heritage tones and\\n# the seven experimental — the same set /v1/brand and the MCP serve.\\n#\\n# DO NOT EDIT BY HAND. Run `pnpm tokens:sync`; `pnpm tokens:verify`\\n# fails the build if this file drifts from the source.\\n\\nfrom dataclasses import dataclass\\n\\n\\n@dataclass(frozen=True)\\nclass MziziMinerals:\\n \\\"\\\"\\\"Seven African Minerals — the brand accents, dark and light themes.\\\"\\\"\\\"\\n COBALT_DARK: str = \\\"#00B0FF\\\"\\n COBALT_LIGHT: str = \\\"#0047AB\\\"\\n TANZANITE_DARK: str = \\\"#B388FF\\\"\\n TANZANITE_LIGHT: str = \\\"#4B0082\\\"\\n MALACHITE_DARK: str = \\\"#64FFDA\\\"\\n MALACHITE_LIGHT: str = \\\"#004D40\\\"\\n GOLD_DARK: str = \\\"#FFD740\\\"\\n GOLD_LIGHT: str = \\\"#5D4037\\\"\\n TERRACOTTA_DARK: str = \\\"#E1B07E\\\"\\n TERRACOTTA_LIGHT: str = \\\"#A0522D\\\"\\n SODALITE_DARK: str = \\\"#3D5AFE\\\"\\n SODALITE_LIGHT: str = \\\"#283593\\\"\\n COPPER_DARK: str = \\\"#FF8A65\\\"\\n COPPER_LIGHT: str = \\\"#BF5A36\\\"\\n\\n\\n@dataclass(frozen=True)\\nclass MziziHeritage:\\n \\\"\\\"\\\"Seven Heritage tones — atmospheric anchors, dark and light themes.\\\"\\\"\\\"\\n INDIGO_DARK: str = \\\"#7986CB\\\"\\n INDIGO_LIGHT: str = \\\"#4527A0\\\"\\n SAVANNA_DARK: str = \\\"#E5C158\\\"\\n SAVANNA_LIGHT: str = \\\"#8D6E1A\\\"\\n BAOBAB_DARK: str = \\\"#A1887F\\\"\\n BAOBAB_LIGHT: str = \\\"#4E342E\\\"\\n SUNSET_DARK: str = \\\"#FF7043\\\"\\n SUNSET_LIGHT: str = \\\"#D84315\\\"\\n RIVER_DARK: str = \\\"#4DD0E1\\\"\\n RIVER_LIGHT: str = \\\"#006064\\\"\\n HEMATITE_DARK: str = \\\"#90A4AE\\\"\\n HEMATITE_LIGHT: str = \\\"#546E7A\\\"\\n KALAHARI_DARK: str = \\\"#E8D9B5\\\"\\n KALAHARI_LIGHT: str = \\\"#C9B589\\\"\\n\\n\\n@dataclass(frozen=True)\\nclass MziziExperimental:\\n \\\"\\\"\\\"Seven Experimental tones — the heptagon, dark and light themes.\\\"\\\"\\\"\\n EMBER_DARK: str = \\\"#DA8766\\\"\\n EMBER_LIGHT: str = \\\"#843D20\\\"\\n ACACIA_DARK: str = \\\"#93A528\\\"\\n ACACIA_LIGHT: str = \\\"#4D5615\\\"\\n FERN_DARK: str = \\\"#2CB42B\\\"\\n FERN_LIGHT: str = \\\"#175E17\\\"\\n LAGOON_DARK: str = \\\"#2AAE9B\\\"\\n LAGOON_LIGHT: str = \\\"#165B51\\\"\\n STORM_DARK: str = \\\"#7E9BE0\\\"\\n STORM_LIGHT: str = \\\"#284CA6\\\"\\n DUSK_DARK: str = \\\"#BA87E2\\\"\\n DUSK_LIGHT: str = \\\"#742AAD\\\"\\n PROTEA_DARK: str = \\\"#DF7BB4\\\"\\n PROTEA_LIGHT: str = \\\"#932464\\\"\\n\\n\\n@dataclass(frozen=True)\\nclass MziziSpacing:\\n \\\"\\\"\\\"Spacing scale, in pixels.\\\"\\\"\\\"\\n XS: int = 4\\n SM: int = 8\\n MD: int = 12\\n BASE: int = 16\\n LG: int = 24\\n XL: int = 32\\n\\n\\n@dataclass(frozen=True)\\nclass MziziRadius:\\n \\\"\\\"\\\"Radius scale, in pixels. Derived from the 7px unit.\\\"\\\"\\\"\\n SM: int = 7\\n MD: int = 12\\n LG: int = 14\\n XL: int = 17\\n FULL: int = 9999\\n\\n\\nminerals = MziziMinerals()\\nheritage = MziziHeritage()\\nexperimental = MziziExperimental()\\nspacing = MziziSpacing()\\nradius = MziziRadius()\\n\\n# Ordered chart series for matplotlib / plotly / altair — dark theme.\\n# Minerals then heritage, deliberately: this is a series ordering for plots, not\\n# a list of the families that exist. The experimental seven are exported above\\n# as `experimental` and are left out of the default series on purpose — they\\n# are a heptagon of neighbouring hues, which is a poor categorical scale.\\nCHART_COLORS = [\\n minerals.COBALT_DARK,\\n minerals.TANZANITE_DARK,\\n minerals.MALACHITE_DARK,\\n minerals.GOLD_DARK,\\n minerals.TERRACOTTA_DARK,\\n minerals.SODALITE_DARK,\\n minerals.COPPER_DARK,\\n heritage.INDIGO_DARK,\\n heritage.SAVANNA_DARK,\\n heritage.BAOBAB_DARK,\\n heritage.SUNSET_DARK,\\n heritage.RIVER_DARK,\\n heritage.HEMATITE_DARK,\\n heritage.KALAHARI_DARK,\\n]\\n\"}]}}",
424
424
  "mzizi-tokens-react-native": "{\"status\":200,\"body\":{\"$schema\":\"https://ui.shadcn.com/schema/registry-item.json\",\"name\":\"mzizi-tokens-react-native\",\"type\":\"registry:lib\",\"title\":\"mzizi Tokens React Native\",\"description\":\"Mzizi design tokens for React Native. Generated by `pnpm tokens:sync` from the same source that emits the web CSS custom properties — seven African Minerals + seven Heritage tones, both themes. A StyleSheet-ready token object for React Native. Never hand-edited: adding a target means adding an emitter, never re-authoring the palette (CLAUDE.md §8.4.1).\",\"author\":\"Mzizi, operated by Nyuchi Africa (Pvt) Ltd — https://mzizi.dev\",\"categories\":[\"styling-libs\",\"tokens\"],\"dependencies\":[],\"registryDependencies\":[],\"files\":[{\"path\":\"components/registry/n1-tokens/mzizi-tokens-react-native.ts\",\"type\":\"registry:lib\",\"target\":\"lib/tokens/mzizi-tokens-react-native.ts\",\"content\":\"// NYUCHI DESIGN TOKENS — N1\\n// React Native — generated by scripts/sync-tokens.ts from\\n// lib/tokens/palette.source.ts, the canonical palette in this repo.\\n//\\n// Carries all 21 families: seven minerals, seven heritage tones and\\n// the seven experimental — the same set /v1/brand and the MCP serve.\\n//\\n// DO NOT EDIT BY HAND. Run `pnpm tokens:sync`; `pnpm tokens:verify`\\n// fails the build if this file drifts from the source.\\n\\nexport const MziziColors = {\\n // Seven African Minerals\\n cobaltDark: \\\"#00B0FF\\\",\\n cobaltLight: \\\"#0047AB\\\",\\n tanzaniteDark: \\\"#B388FF\\\",\\n tanzaniteLight: \\\"#4B0082\\\",\\n malachiteDark: \\\"#64FFDA\\\",\\n malachiteLight: \\\"#004D40\\\",\\n goldDark: \\\"#FFD740\\\",\\n goldLight: \\\"#5D4037\\\",\\n terracottaDark: \\\"#E1B07E\\\",\\n terracottaLight: \\\"#A0522D\\\",\\n sodaliteDark: \\\"#3D5AFE\\\",\\n sodaliteLight: \\\"#283593\\\",\\n copperDark: \\\"#FF8A65\\\",\\n copperLight: \\\"#BF5A36\\\",\\n\\n // Seven Heritage Colors\\n indigoDark: \\\"#7986CB\\\",\\n indigoLight: \\\"#4527A0\\\",\\n savannaDark: \\\"#E5C158\\\",\\n savannaLight: \\\"#8D6E1A\\\",\\n baobabDark: \\\"#A1887F\\\",\\n baobabLight: \\\"#4E342E\\\",\\n sunsetDark: \\\"#FF7043\\\",\\n sunsetLight: \\\"#D84315\\\",\\n riverDark: \\\"#4DD0E1\\\",\\n riverLight: \\\"#006064\\\",\\n hematiteDark: \\\"#90A4AE\\\",\\n hematiteLight: \\\"#546E7A\\\",\\n kalahariDark: \\\"#E8D9B5\\\",\\n kalahariLight: \\\"#C9B589\\\",\\n\\n // Seven Experimental tones\\n emberDark: \\\"#DA8766\\\",\\n emberLight: \\\"#843D20\\\",\\n acaciaDark: \\\"#93A528\\\",\\n acaciaLight: \\\"#4D5615\\\",\\n fernDark: \\\"#2CB42B\\\",\\n fernLight: \\\"#175E17\\\",\\n lagoonDark: \\\"#2AAE9B\\\",\\n lagoonLight: \\\"#165B51\\\",\\n stormDark: \\\"#7E9BE0\\\",\\n stormLight: \\\"#284CA6\\\",\\n duskDark: \\\"#BA87E2\\\",\\n duskLight: \\\"#742AAD\\\",\\n proteaDark: \\\"#DF7BB4\\\",\\n proteaLight: \\\"#932464\\\",\\n} as const;\\n\\nexport const MziziSpacing = {\\n xs: 4,\\n sm: 8,\\n md: 12,\\n base: 16,\\n lg: 24,\\n xl: 32,\\n} as const;\\n\\nexport const MziziRadius = {\\n sm: 7,\\n md: 12,\\n lg: 14,\\n xl: 17,\\n full: 9999,\\n} as const;\\n\\nexport const MziziFonts = {\\n sans: \\\"Noto Sans\\\",\\n serif: \\\"Noto Serif\\\",\\n mono: \\\"JetBrains Mono\\\",\\n} as const;\\n\"}]}}",
@@ -1259,7 +1259,7 @@ export const NODES = {
1259
1259
  "9": "{\"data\":{\"node_number\":9,\"sub_label\":\"fundi\",\"title\":\"Fundi\",\"type\":\"rung\",\"strand\":null,\"backbone\":null,\"role\":\"N9 — the self-healing rung: consumes N8 assurance signals and remediates the root cause\",\"covenant\":\"Failure is a learning event, not a user-facing incident.\",\"description\":\"The self-healing rung — a cross-cutting base pair that bridges both backbones. A Cloudflare Worker at fundi.nyuchi.dev, TypeScript today (fundi-tester in mzizi-dev/agent-tools: a FundiAgent durable object, a */5 cron and the fundi-signals queue); a workers-rs Rust/WASM Worker is the target. NOT a Supabase Edge Function — fundi runs independently of the database vendor on Cloudflare's global edge. Triggered by Cron Triggers and Cloudflare Queues pushed by N8 signals. Reads observability_events and fundi_issues from Supabase via REST API, classifies failure severity, deduplicates against open GitHub issues, and creates structured issues with fundi:node/{n} labels for human review. Never auto-merges fixes. Logs every healing action append-only.\",\"stakeholder\":\"Fundi operator\",\"implementation_rules\":[\"The fundi worker route POST /webhook ingests and deduplicates incoming failures, authenticated by an X-Hub-Signature-256 HMAC over the raw body. It replaced the fundi-webhook Supabase edge function, which had no signature check.\",\"Cron-driven heal pass promotes fingerprinted failures into labelled GitHub issues.\",\"Append-only audit trail in fundi_healing_log, surfaced by get_healing_log; fundi_issues holds the issues themselves.\",\"On by default for nyuchi / mukoko; opt-in for external consumers.\"],\"sort_order\":9,\"component_count\":3},\"meta\":{\"model\":\"mzizi-dna-helix\",\"version\":\"v1\"}}",
1260
1260
  "10": "{\"data\":{\"node_number\":10,\"sub_label\":\"documentation\",\"title\":\"Documentation\",\"type\":\"rung\",\"strand\":null,\"backbone\":null,\"role\":\"N10 — the ecosystem documents itself in code\",\"covenant\":\"Every document lives here. Documents, instructions, docs, documentation — one rung, no exceptions.\",\"description\":\"The doctrine rung, and the single home for everything document-shaped: documents, instructions (including ai_instructions), docs and documentation. Conventions, covenants, guides and reference all belong to N10 — held as MDX in the repo so a document referencing something that no longer exists fails the build rather than rotting unnoticed. If an artifact is prose meant to be read, it is N10; nothing else claims it and no other rung should.\",\"stakeholder\":\"Docs maintainer\",\"implementation_rules\":[\"Mzizi documentation lives in mzizi-dev/mzizi-docs and publishes to docs.mzizi.dev (Mintlify). This supersedes the Starlight split, where bundu-docs (docs.bundu.org) and nyuchi-docs (docs.nyuchi.com) each held part of the Mzizi material — a split is exactly what this rung's covenant forbids, and it is how the same thing came to be documented twice with neither copy authoritative. Those two sites keep their own non-Mzizi content. /api/v1/docs* still returns HTTP 410 with a migrated_to map.\",\"Once docs.mzizi.dev resolves it exposes its own MCP endpoint, reachable THROUGH the main Mzizi MCP rather than as a second connection a consumer has to add. It does not resolve yet — do not document it as available until it does.\",\"Doctrine stays here, as .mdx in this repo, and that is not a contradiction of the rung above it. A doctrine page names components, nodes and rungs, so compiling it beside them is what makes a reference to something deleted fail the build. Long-form guides have no such coupling and belong in mzizi-docs. The test is whether the prose would still be checkable if it moved.\",\"Component source lives in git under components/registry/n<N>-<label>/; Supabase holds only the metadata around it, served over /api/v1/*.\",\"registry.json is a CI-verified snapshot of the registry, never hand-edited (pnpm registry:verify).\",\"MCP tools and /api/v1/stats surface live counts from the DB; never quote a hardcoded count.\"],\"sort_order\":10,\"component_count\":4},\"meta\":{\"model\":\"mzizi-dna-helix\",\"version\":\"v1\"}}",
1261
1261
  "11": "{\"data\":{\"node_number\":11,\"sub_label\":\"discovery\",\"title\":\"Discovery\",\"type\":\"rung\",\"strand\":null,\"backbone\":null,\"role\":\"N11 — SEO + AIO: preview images, structured data, agent-readiness; entwined through the double helix, not an outside actor\",\"covenant\":\"If the machine can't see it, it doesn't exist.\",\"description\":\"Search-engine and AI/agent optimisation — the machine-facing surface of every site. Owns social/preview images, structured data (schema.org JSON-LD), llms.txt, robots + sitemap, canonical and meta tags, and agent-readiness (MCP server-card, .well-known). N11 has no Rust implementation and no Rust alternative of its own: it holds no shared logic and no components, and rides whatever the shell renders. What it does hold is a constraint on the Rust direction — a client-rendered WASM target must prerender or server-render, or crawlers receive an empty document. A missing preview image or absent structured data is the biggest discoverability no-go: if crawlers, social scrapers and AI agents cannot parse a surface, it may as well not exist.\",\"stakeholder\":\"Growth / discoverability engineer\",\"implementation_rules\":[\"Every route ships a title, a meta description, and a dynamic OpenGraph/preview image carrying that page's title + description + site icon — never a missing or 404 image.\",\"Preview images come from ONE shared template so they stay dynamic and brand-agnostic; the site icon parameterises the brand (nyuchi / mukoko / bundu / shamwari).\",\"Emit schema.org JSON-LD for the page's primary entity; keep llms.txt and the MCP server-card current.\",\"robots.txt and sitemap.xml are generated, not hand-maintained; canonical URLs are absolute via a set metadataBase.\"],\"sort_order\":11,\"component_count\":1},\"meta\":{\"model\":\"mzizi-dna-helix\",\"version\":\"v1\"}}",
1262
- "12": "{\"data\":{\"node_number\":12,\"sub_label\":\"skills\",\"title\":\"Skills\",\"type\":\"rung\",\"strand\":null,\"backbone\":null,\"role\":\"N12 — the skills rung: what the system knows how to do, authored in git and projected to the registry\",\"covenant\":\"What the system knows how to do is teachable, not tribal.\",\"description\":\"The skills rung. Agent skills are authored in git (mzizi-tools/mzizi-skills, published as @nyuchi/mzizi-skills) and projected into the `skills` collection, which the registry serves at /api/v1/skills* and the MCP serves as get_skill / list_skills. A rung rather than a node: skills bridge both backbones — engineering practice and meaning at once — and no node imports them.\",\"stakeholder\":\"Agent-skills author\",\"implementation_rules\":[\"Skills are authored in git as mzizi-skills/skills/<name>/SKILL.md in mzizi-dev/agent-tools and published as the public npm package @nyuchi/mzizi-skills.\",\"pnpm skills:validate is the offline pre-publish gate: index.json and package.json version lockstep, frontmatter name matching the index, no unlisted skill directory.\",\"pnpm skills:sync projects the committed bundle into this collection through RLS (disk to DB). The DB rows are a read-only projection; git is the source of truth.\",\"mzizi.dev serves skills at /api/v1/skills* and over MCP; consumers install with npx skills add @nyuchi/mzizi-skills.\"],\"sort_order\":12,\"component_count\":0},\"meta\":{\"model\":\"mzizi-dna-helix\",\"version\":\"v1\"}}",
1262
+ "12": "{\"data\":{\"node_number\":12,\"sub_label\":\"skills\",\"title\":\"Skills\",\"type\":\"rung\",\"strand\":null,\"backbone\":null,\"role\":\"N12 — the skills rung: what the system knows how to do, authored in git and served from the published package\",\"covenant\":\"What the system knows how to do is teachable, not tribal.\",\"description\":\"The skills rung. Agent skills are authored in git (mzizi-dev/agent-tools, mzizi-skills/) and published as @nyuchi/mzizi-skills. The registry inlines the package at build time and serves it at /v1/skills*; the MCP bundles the same files and serves them as mzizi_get_skills; the public mzizi Claude Code plugin carries a generated copy. There is no database copy. A rung rather than a node: skills bridge both backbones — engineering practice and meaning at once — and no node imports them.\",\"stakeholder\":\"Agent-skills author\",\"implementation_rules\":[\"Skills are authored in git as mzizi-skills/skills/<name>/SKILL.md in mzizi-dev/agent-tools and published as the public npm package @nyuchi/mzizi-skills.\",\"pnpm skills:validate is the offline pre-publish gate: index.json and package.json version lockstep, frontmatter name matching the index, no unlisted skill directory.\",\"There is no database projection. The registry generates lib/skills.generated.ts and plugin/skills/ from the npm package (pnpm skills:generate, pnpm plugin:skills), each with a --check gate in CI; mcp.mzizi.dev bundles the same files at build time. A skills release reaches the API when the registry's dependency is bumped and the gateway re-pinned.\",\"api.mzizi.dev serves skills at /v1/skills* and mcp.mzizi.dev as mzizi_get_skills; consumers install with npm i -D @nyuchi/mzizi-skills and npx skills experimental_sync, or the public plugin (/plugin marketplace add mzizi-dev/mzizi-registry, /plugin install mzizi@mzizi).\"],\"sort_order\":12,\"component_count\":0},\"meta\":{\"model\":\"mzizi-dna-helix\",\"version\":\"v1\"}}",
1263
1263
  };
1264
1264
  /** `/ai/instructions/{name}` per instruction set. */
1265
1265
  export const AI_INSTRUCTIONS = {