Sindh IT Portal — Facilitation DeskSpecification documents
Englishاردوسنڌي
← All documents

Branding & Design System

The visual identity, logo system, colour palette, typography, Ajrak iconography, component theming, layout, letterhead templates, and Brand & Officials CMS specification for the Sindh IT Portal — Facilitation Desk (SITP).

Field Value
Doc ID 16
Status Draft
Owner S&ITD / MAAHIR
Languages EN (master) · UR · SD
Applies to modules P (OFC), A (PUB), B (TKT), L (DOC), I (ANL)
Depends on _context.md §7, /specs/en/03-non-functional-reqs/ §Accessibility, /specs/en/05-data-model/ (officials, official_terms, media_library), /specs/en/09-i18n-localization/, 12-docgen-esign/en.md
Traces to FR-OFC-001FR-OFC-007, US-OFC-001US-OFC-004

1. Scope & Definitions

This document is the single source of truth for how the Sindh IT Portal — Facilitation Desk looks, reads, and feels across every surface: the public Next.js portal, the staff/facilitator console, the embedded Metabase dashboards, the Docusaurus docs site, the future PWA / React Native app, generated official letters and certificates, email/SMS/WhatsApp templates, and printed letterhead. Every component shipped in the product MUST be built from the tokens and rules defined here; the NFR on design-system coverage (NFR-USA-… ≥ 95 % from library components) is enforced against this document.

Glossary (short form; see _glossary.md):

Term Meaning
SITP Sindh IT Portal — Facilitation Desk (the product).
S&ITD Science & Information Technology Department, Government of Sindh (the owning department, not a "Ministry").
Ajrak The block-printed textile of Sindh — geometric, symmetric, indigo/maroon/black. The cultural source of this brand.
Ajrak motif A single tile / border / rosette derived from Ajrak geometry, used as a decorative accent.
Sindhi cap The topi (Ajrak-patterned or plain) worn in Sindh; used as a pictogram in iconography.
Co-primary marks The Government of Sindh seal and the S&ITD logo — always shown alongside the SITP mark on official surfaces.
Lockup A fixed spatial arrangement of two or more marks with a rule for clear space and minimum size.
Officials CMS Module P — the date-aware records of Minister/SACM, Secretary, and DG that propagate across surfaces.
Token A named design decision (colour, type, space, radius) consumed by code as a CSS variable / Tailwind token.

All visual decisions below are configurable at runtime through the Brand & Officials CMS (FR-OFC-007), versioned on publish, and propagated atomically (FR-OFC-003). The values stated here are the locked defaults.


2. Brand Identity Overview

The SITP brand is Ajrak-inspired and unmistakably Sindh. It is not a generic government portal skin; it is the digital continuation of a centuries-old craft tradition. Three commitments define the identity:

  1. Cultural resonance. The palette (indigo / maroon / black), the geometry (symmetric tessellation, the trefoil and eight-point star), and the iconography (Sindhi cap, reed-pen, river) are drawn from Sindh's visual vocabulary. The brand reads as of this place in the first second of contact.
  2. Governmental gravity. The product is operated under the authority of S&ITD, Government of Sindh. The co-primary marks (Govt of Sindh seal, S&ITD logo) and the senior-official records (Minister/SACM, Secretary, DG) carry that authority. Letterhead, certificates, and dashboards never appear without the seal and the current official.
  3. Modern service clarity. The brand is calm, legible, and digital-first. Ajrak is an accent, never a noise layer. Body copy is set on plain surfaces; motifs live on edges, headers, and dividers. Accessibility (WCAG 2.1 AA across EN/UR/SD, RTL-native) is a brand commitment, not a checklist.

Tagline (EN). A single window for IT companies to resolve problems with Government of Sindh departments.

Tagline (UR / SD). Approved translations are held in _glossary.md and surfaced through the i18n catalog; never re-translate ad hoc.

Brand promise (internal). Facilitation before bureaucracy. Every screen, letter, and notification should make the company feel helped, not processed.


3. Logo System

3.1 Primary mark

The primary SITP mark is aAjrak-rosette logogram — an eight-point star (the central motif of Ajrak block printing) rendered as a single continuous indigo line, with the maroon trefoil inset. To its right sits the wordmark:

Sindh IT Portal (Inter/Poppins, Semibold) Facilitation Desk (Inter/Poppins, Regular, smaller, maroon)

The lockup exists in three orientations:

Orientation Use Aspect
Horizontal (mark left, wordmark right) Default. App bars, headers, letterheads, email headers. ≈ 5:1
Stacked (mark above, wordmark below, centred) Square footprints: login screen, splash, favicon-adjacent, document footer. ≈ 1:1.4
Wordmark only (no rosette) Tight horizontal spaces: navbar on mobile, invoice footer, SMS sender profile. set by type

3.2 Monochrome

A single-colour version exists for stamps, embossing, single-colour print, and low-ink contexts. The entire lockup collapses to --brand-black (#1a1a1a) on light, or --brand-paper (#ffffff) on dark. The internal maroon trefoil becomes a knockout (negative space), never a second grey.

3.3 Favicon and app icons

Asset Size Notes
Favicon (SVG) scalable The rosette only, single colour, on transparent.
favicon-32.png 32 × 32 Rosette on --brand-indigo-700.
favicon-16.png 16 × 16 Simplified rosette (4-point reduction).
Apple touch icon 180 × 180 Rosette on --brand-indigo-800, padded 16 % safe area.
Android adaptive icon 108 × 108 (foreground 72 × 72) Rosette on a masked adaptive background; safe zone respected.
PWA maskable 512 × 512 Full-bleed --brand-indigo-700, rosette within 80 % safe zone.

3.4 Clear space

The clear-space unit is X = the height of the rosette. No other element (text, image, edge, fold) may enter the margin of 1 X on all four sides of the primary lockup, 1.5 X when paired with a co-primary mark. Clear space is measured from the outermost pixel of the lockup, including the wordmark descenders.

3.5 Minimum size

Surface Min mark height Min wordmark cap height
Print 12 mm 3 mm
Digital (desktop) 32 px 14 px
Digital (mobile) 24 px 12 px
Favicon 16 px n/a

Below these sizes the rosette loses legibility; switch to the wordmark-only or monochrome variant as the surface allows.

3.6 Do / Don't

Do

Don't


4. Co-Primary Marks & Lockups

The SITP mark is never the sole authority on official surfaces. Two co-primary marks appear alongside it where the Government of Sindh's authority is being exercised: the Government of Sindh seal and the S&ITD logo.

4.1 Government of Sindh seal

The official provincial seal (crest, wheat sheaf, crescent-and-star, name ribbon). Used as-supplied by the Government of Sindh; never redrawn, never recoloured. Always the left-most mark in an official lockup (or right-most in RTL — see §15).

The departmental logo of the Science & Information Technology Department. Used as-supplied; the departmental colour rules take precedence inside its own bounding box.

4.3 Lockups

Lockup Composition Where
Tri-mark (official) Govt of Sindh seal · SITP mark · S&ITD logo, equal weights, divided by a 1 px --brand-indigo-300 rule. Letterhead, certificates, resolution letters, official email headers, the public site header on gov-authority pages.
Dual-mark (operational) SITP mark · S&ITD logo. Internal staff console, facilitator dashboards, KB articles, internal email.
Single-mark (product) SITP mark only. Marketing, the docs site, partner materials, the PWA splash, the API developer portal.

Co-primary marks carry their own clear-space rules; when combined, the larger clear-space governs. The vertical centre-line of all marks in a lockup is aligned to ±1 px.


5. Co-Branding Line — "Operated by MAAHIR · Powered by Server4Sale"

The PPP delivery model is reflected in a single, fixed attribution line that must appear wherever the product is publicly presented. The wording is locked in _context.md §1 and must not be paraphrased.

Operated by MAAHIR · Powered by Server4Sale

5.1 Placement rules

Surface Placement Treatment
Public site footer Bottom of every public page, centred or right-aligned per the footer grid. --brand-text-muted (#5b6770), 12 px / 0.75 rem, regular. Each name optionally hyperlinks to the partner's public site (target _blank, rel="noopener").
Staff console footer Same line, same treatment. Always visible; not collapsible.
Login / sign-up screen Below the primary action, above the copyright. Same treatment; never inside the auth card's primary visual hierarchy.
Official letters & certificates Footer of the letter, below the seal block, above the QR verification block (§13). 10 pt, --brand-black. MAAHIR and Server4Sale names set in semibold.
Email / SMS / WhatsApp templates Footer of email; appended to SMS only when character budget allows; WhatsApp footer card. Same wording; no logo lockup in SMS.
Press, partner, pitch materials Page 2 / colophon, alongside the SITP copyright. Full lockup with both partner logos permitted.
Mobile / PWA splash Below the SITP mark, above the version number. 11 px, --brand-text-muted.

5.2 Co-branding wording rules


6. Colour Palette

The palette is built around the three locked brand colours — Ajrak indigo, Ajrak maroon, and Sindh black — extended into functional scales (50–900), and completed with neutrals and semantic colours. Each token has a light-mode and dark-mode variant. All ratios are computed against the surface they are intended to sit on; the table lists the designed pairing and its contrast ratio. WCAG 2.1 AA requires ≥ 4.5:1 for normal text and ≥ 3:1 for large text and UI components.

6.1 Brand colours

Token Hex RGB Role Light surface Ratio Dark surface Ratio
--brand-indigo-50 #eef2f7 238 242 247 Tint backgrounds, hover wash on #1a1a1a 15.2:1 on #0f1419 17.0:1
--brand-indigo-100 #d6e0ec 214 224 236 Subtle borders, disabled fills on #1a1a1a 12.4:1 on #0f1419 13.9:1
--brand-indigo-300 #8aa3c2 138 163 194 Dividers over indigo fields on #ffffff 2.6:1 (decor only) on #0f1419 7.7:1
--brand-indigo-500 #345a86 52 90 134 Secondary text on light, links on #ffffff 6.4:1 on #0f1419 4.3:1 (large)
--brand-indigo-700 #1f3a5f 31 58 95 Primary brand. Buttons, header bar, focus ring on #ffffff 11.5:1 on #0f1419 7.7:1
--brand-indigo-800 #18304d 24 48 77 Pressed states, app icons on #ffffff 13.4:1 on #0f1419 8.9:1
--brand-indigo-900 #11233a 17 35 58 Dark-mode surfaces on #ffffff 15.0:1 on #eef2f7 13.5:1
--brand-maroon-50 #f6e9e8 246 233 232 Tint backgrounds, alert wash on #1a1a1a 15.8:1 on #0f1419 17.6:1
--brand-maroon-300 #c98a85 201 138 133 Decorative accents only on #ffffff 2.4:1 (decor) on #0f1419 8.1:1
--brand-maroon-500 #9a3a32 154 58 50 Secondary headings, secondary buttons on #ffffff 6.9:1 on #0f1419 4.8:1
--brand-maroon-700 #7b2d26 123 45 38 Secondary brand. Accent text, wordmark sub-line, maroon motifs on #ffffff 9.3:1 on #0f1419 6.5:1
--brand-maroon-900 #4d1b16 77 27 22 Deep accent on dark on #ffffff 13.8:1 on #eef2f7 12.3:1
--brand-black #1a1a1a 26 26 26 Body text, monochrome mark, footer on #ffffff 17.4:1 n/a (is surface)

6.2 Neutrals

Token Hex RGB Light role Dark role
--brand-paper #ffffff 255 255 255 Page surface (text on dark)
--brand-paper-2 #f7f8fa 247 248 250 Card surface, table stripe
--brand-paper-3 #eef0f3 238 240 243 Inset surface, code block
--brand-line #d8dce2 216 220 226 Hairline border
--brand-text #1a1a1a 26 26 26 Primary text
--brand-text-muted #5b6770 91 103 112 Secondary text (5.3:1 on paper)
--brand-text-subtle #7a848d 122 132 141 Tertiary text, captions (3.9:1 → large/UI only)
--brand-ink-dark #0f1419 15 20 25 Page surface (dark mode)
--brand-ink-card #161c24 22 28 36 Card surface (dark mode)
--brand-ink-line #2a3340 42 51 64 Hairline border (dark mode)
--brand-ink-text #e6eaf0 230 234 240 Primary text (15.1:1 on ink-dark)
--brand-ink-text-muted #9aa6b4 154 166 180 Secondary text (7.4:1 on ink-dark)

6.3 Semantic colours

Token Hex RGB Use Ratio on paper
--semantic-success #1f7a4d 31 122 77 Ticket Resolved, success toasts, verified badge 4.9:1
--semantic-success-bg #e3f3eb 227 243 235 Success wash
--semantic-warning #8a5a00 138 90 0 SLA near-breach, Awaiting Parties 5.1:1
--semantic-warning-bg #fbf0d8 251 240 216 Warning wash
--semantic-danger #9a2222 154 34 34 SLA breach, Escalated, error states 6.7:1
--semantic-danger-bg #f8e2e2 248 226 226 Danger wash
--semantic-info #1f4e8f 31 78 143 Informational banners, New ticket 7.9:1
--semantic-info-bg #e2ecf8 226 236 248 Info wash

Dark-mode semantic variants raise luminance by ~15 % (e.g. --semantic-success#3aa06b) to hold ratio on --brand-ink-dark.

6.4 Usage rules


7. Typography

Typography is trilingual by construction: a Latin family for English, a Nastaliq family for Urdu, and a Naskh family for Sindhi. The three are paired for visual parity in line length, x-height, and weight.

7.1 Families

Script Primary family Fallback Role
Latin (EN) Inter (UI/body) + Poppins (display/headings) system-ui, -apple-system, "Segoe UI", Roboto, Arial All English UI, headings, letters, dashboards.
Arabic — Nastaliq (UR) Noto Nastaliq Urdu "Jameel Noori Nastaliq", serif Urdu UI and letters. Line-height 2.0+ to accommodate the tall Nastaliq ascenders/descenders.
Arabic — Naskh (SD) Noto Naskh Arabic "Noto Sans Arabic", serif Sindhi UI and letters. Line-height 1.7.
Monospace (code, IDs) JetBrains Mono "Fira Code", "Cascadia Code", Consolas, monospace Ticket IDs (SITP-YYYY-DEPT-NNNNNN), code blocks, audit hashes.

Fonts are self-hosted (subset per locale, font-display: swap) from MinIO to satisfy data-residency and offline staging; no Google Fonts CDN call crosses the perimeter.

7.2 Type scale (modular 1.250 — major third)

Token Size (rem / px) Weight Line-height Family Use
--fs-display 4.766 / 76 Poppins 700 1.05 Latin Hero, login splash
--fs-h1 3.815 / 61 Poppins 700 1.1 Latin Page title (rare; one per page)
--fs-h2 3.052 / 49 Poppins 600 1.15 Latin Section heading
--fs-h3 2.441 / 39 Poppins 600 1.2 Latin Sub-section
--fs-h4 1.953 / 31 Poppins 600 1.25 Latin Card title
--fs-h5 1.563 / 25 Inter 600 1.3 Latin Panel title
--fs-h6 1.25 / 20 Inter 600 1.4 Latin Small heading
--fs-body-lg 1.125 / 18 Inter 400 1.6 Latin Letter body, lead paragraph
--fs-body 1 / 16 Inter 400 1.6 Latin Default body
--fs-small 0.875 / 14 Inter 400 1.5 Latin Secondary, table cells
--fs-caption 0.75 / 12 Inter 500 1.4 Latin Captions, labels, badges
--fs-overline 0.6875 / 11 Inter 600, uppercase, 0.08 em tracking 1.4 Latin Eyebrow, ticket-id overline

7.3 Weights

Only four weights are loaded per family to keep the payload bounded: 400 (regular), 500 (medium), 600 (semibold), 700 (bold). Italic is loaded for Inter only (used for the doc purpose statement and editorial notes); Nastaliq and Naskh have no italic.

7.4 RTL pairing rules

When the locale is ur or sd:

7.5 Numeric and date conventions

Ticket IDs, dates, and currency use tabular-figures (font-variant-numeric: tabular-nums) inside tables and dashboards so columns align. Dual calendar (Gregorian + Hijri) is rendered with the Hijri date in --brand-text-muted, one step smaller than the Gregorian.


8. Ajrak Motifs & Iconography

8.1 Motif library

A small, governed library of Ajrak-derived motifs is maintained in the brand-asset repository (§18). Each motif is an SVG with one or two colours drawn from the palette. The library contains:

Motif Use
Rosette (eight-point star) The logo core; also section dividers and the avatar default.
Trefoil Inline accent next to headings, bullet markers in ordered lists.
Border strip (horizontal tessellation) Top edge of cards, the header bar's lower border, footer divider, letterhead rule.
Corner motif L-shaped corner accent on modals and certificates.
Watermark (12 % opacity rosette field) Behind the login card, behind letterhead body, behind certificate seals.

Motifs are decorative. They never carry meaning that is not also conveyed in text, so a screen reader announces the same information without them. Motifs at < 3:1 contrast against their background are aria-hidden and excluded from the accessibility tree.

8.2 Where motifs appear

Surface Motif Treatment
Header bar Border strip, lower edge --brand-maroon-700 on --brand-indigo-700, 1 px.
Card Top border strip (4 px) --brand-indigo-700 on --brand-paper.
Primary button Trefoil bullet (optional, leading) --brand-paper on --brand-indigo-700.
Modal Corner motifs (two opposing corners) --brand-indigo-300 at 60 % opacity.
Login / splash Watermark field --brand-indigo-50 rosette at 12 % opacity.
Letterhead Border strip top + bottom, watermark behind seal --brand-indigo-700 rules, --brand-maroon-700 watermark.
Empty states Single rosette, large --brand-indigo-100, centred.

8.3 Iconography style

Functional icons (actions, status, navigation) come from a single icon set — Lucide (1.5 px stroke, 24 × 24 default, rounded line-caps) — recoloured via currentColor. Iconography does not mimic Ajrak geometry; motifs do. The two systems are deliberately separate so that functional clarity is never compromised by decoration.

A small set of cultural pictograms supplements Lucide where a Sindh-specific concept is needed:

Pictogram Concept
Sindhi cap (topi) "Facilitation Desk", "Help", the citizen-facing help centre.
Reed pen (qalam) "Compose", "Draft reply", "Letter".
River (Sindhu) wave "Workflow", "Status flow", the public dashboard.
Ajak (the textile square) "Brand / About", "Identity".

Cultural pictograms use a 2 px stroke to match Lucide's visual weight and are stored in the same icon component with an aria-label.

8.4 Icon rules


9. Component Theming

All components are shadcn/ui primitives themed by Tailwind tokens bound to the palette above. This section fixes the variant matrix and usage rules. Components not listed here are forbidden; a new component requires a design-system change request (§18).

9.1 Buttons

Variant Fill Text Border Use
primary --brand-indigo-700 --brand-paper none One per view: submit, file ticket, approve.
secondary --brand-paper --brand-indigo-700 --brand-indigo-700 1 px Alternate primary, cancel.
maroon --brand-maroon-700 --brand-paper none Approval actions on letters; rare; max one per view.
ghost transparent --brand-indigo-700 none Toolbar, in-table actions.
subtle --brand-indigo-50 --brand-indigo-700 none Filter chips, secondary nav.
danger --semantic-danger --brand-paper none Destructive only (withdraw, delete draft). Confirmed via modal.
disabled --brand-indigo-100 --brand-text-subtle none Not clickable; cursor not-allowed.

Sizes: sm (32 px), md (40 px, default), lg (48 px). Min touch target 44 × 44 px on mobile. Radius: 6 px (matches --radius-md). Focus ring per §6.4. No drop shadows on default state; elevation is reserved for hover on primary/secondary (1 px --brand-indigo-900 at 12 % opacity).

9.2 Cards

9.3 Navigation

Element Notes
Top app bar 64 px desktop / 56 px mobile. --brand-paper with 1 px --brand-line lower border carrying the Ajrak border-strip motif in --brand-maroon-700. Holds the SITP mark (left), primary nav (centre), user menu (right). In RTL the mark moves to the right edge.
Side nav (staff console) 256 px expanded, 72 px collapsed, drawer on mobile. Section labels use --fs-overline. Active item: --brand-indigo-50 fill + 3 px --brand-indigo-700 inline-start border + semibold text.
Breadcrumbs --brand-text-muted; current page in --brand-text. Separator: chevron (Lucide), flipped in RTL.
Tabs Underline style, 2 px active indicator in --brand-indigo-700; no pill tabs except in filter contexts.

9.4 Tables

9.5 Badges & status pills

Status Fill Text Border
New --semantic-info-bg --semantic-info 1 px --semantic-info
Triaged / Assigned / In Progress --brand-indigo-50 --brand-indigo-700 1 px --brand-indigo-300
Awaiting Parties / On Hold --semantic-warning-bg --semantic-warning 1 px --semantic-warning
Escalated --semantic-danger-bg --semantic-danger 1 px --semantic-danger
Resolved --semantic-success-bg --semantic-success 1 px --semantic-success
Closed --brand-paper-3 --brand-text-muted 1 px --brand-line
Reopened / Appealed --brand-maroon-50 --brand-maroon-700 1 px --brand-maroon-300
Verified (company) --semantic-success-bg --semantic-success check icon leading

Pills are 14 px caption text, 4 px × 8 px padding, full-radius. Never rely on colour alone: every pill includes its text label.

9.6 Ticket cards / list rows

9.7 Modals & dialogs

9.8 Forms


10. Layout & Grid

10.1 Breakpoints (mobile-first)

Token Min width Typical device
xs 360 px Small phone
sm 640 px Large phone / small tablet portrait
md 768 px Tablet
lg 1024 px Tablet landscape / small laptop
xl 1280 px Desktop
2xl 1536 px Large desktop

10.2 Containers

Container Max width Use
container-narrow 640 px Auth, letter preview, article body.
container-prose 768 px KB article, FAQ.
container-default 1280 px Public site, staff console.
container-wide 1440 px Dashboards, ticket board.
container-full 100 % Public transparency dashboard, GIS heatmap.

Gutters: 16 px mobile, 24 px md, 32 px xl. Content never touches the viewport edge below 16 px.

10.3 Grid

A 12-column grid on lg+, 8-column on md, single column below sm. Column gap = gutter. The staff console uses a persistent layout: side nav (256 px) + main (rest); on < md the side nav collapses to a drawer and the main becomes full width.

10.4 Spacing scale

Base unit 4 px. Tokens: --space-0 0, --space-1 4, --space-2 8, --space-3 12, --space-4 16, --space-5 20, --space-6 24, --space-8 32, --space-10 40, --space-12 48, --space-16 64, --space-20 80, --space-24 96. All paddings, margins, and gaps draw from this scale; arbitrary pixel values are a lint error.

10.5 Radii & elevation

Token Value Use
--radius-sm 4 px Badges, pills interior
--radius-md 6 px Inputs, buttons
--radius-lg 12 px Cards, panels
--radius-xl 16 px Modals, large cards
--radius-full 9999 px Avatars, status dots

Elevation: four steps only — shadow-flat (none), shadow-card (default), shadow-pop (hover, dropdowns), shadow-modal (modals, toasts). Shadows use --brand-black at 8/12/16/20 % opacity; no coloured glows.


11. Imagery & Illustration

11.1 Photography

11.2 Illustration

11.3 Charts (analytics)

Charts use the palette in a fixed series order so that the same metric always reads the same colour: indigo-700 → maroon-700 → indigo-500 → maroon-500 → indigo-300 → neutral. Semantic colours appear only when the metric is itself semantic (SLA breach = danger). Axis labels in --brand-text-muted; gridlines 1 px --brand-line; data labels --fs-caption. Every chart has a text alternative (data table or aria-label) per accessibility NFRs.


12. Tone of Voice

Dimension SITP sounds like SITP does not sound like
Authority Confident, plain, government-formal. Bureaucratic, hedging, legalistic.
Warmth Helpful, patient, respectful. Chirpy, slangy, marketing-fluffy.
Clarity Short sentences, one idea each, active voice. Passive constructions, nested clauses.
Cultural register Respectful of titles (Secretary, DG, SACM). Honourifics in UR/SD per catalog. Over-familiar, first-naming senior officials.
Person Second person ("you") to the company; third person for officials. "We the government…" editorialising.
Errors Say what happened and what to do next. "Something went wrong."

Microcopy rules. Button labels are verbs (File, Approve, Resolve). Empty states explain the state and offer the next action. Dates are dual-calendar with the user's locale leading. Amounts include the currency code (PKR). All numbers localise per §7.4. All strings live in the i18n catalog; no hard-coded English in components.


13. Letterhead & Official Document Templates

Official letters and certificates are produced by the Document Generation module (FR-DOC-*, see 12-docgen-esign/en.md). Every official document carries five mandatory zones, in the order below. Templates are trilingual: one source template per document type, rendered in the recipient's preferred locale, with the same layout grid mirrored for RTL (§15).

13.1 Letterhead zones

Zone Content Source
A — Masthead Tri-mark lockup (Govt of Sindh seal · SITP mark · S&ITD logo), centred or left-aligned. Ajrak border-strip rule beneath. Brand-asset repository.
B — Reference block Department name; designation of issuing officer; the official in office on the document's effective date (Minister/SACM, Secretary, DG) with portrait thumbnail; office address. Officials CMS, date-aware join (§14).
C — Body Subject line, salutation, numbered paragraphs, signature block. Dual-calendar date at top of body. Template + caller.
D — Seal & signature Issuing officer's signature line; Govt of Sindh seal (watermark, 25 % opacity) behind the signature area. Brand-asset repository + e-Sign.
E — Footer Co-branding line ("Operated by MAAHIR · Powered by Server4Sale"); QR verification block; document hash; page x of y; SITP-DOC-<id> identifier. Brand + qr_verifiable_documents.

13.2 Templates

Template Use Mandatory elements
Acknowledgement Sent to company on ticket filing. Ticket ID, tracking URL, expected FRT.
Resolution certificate Issued on Resolved. Evidence list, resolution note, proof-gate signature, QR.
TRI meeting notice Tripartite meeting invite. Date (dual-cal), venue/link, participants, agenda summary.
MoM cover letter Accompanies published MoM. MoM reference, action-item count, acknowledgment deadline.
Appeal decision Outcome of an appeal. Appeal ID, decision, rationale, next-tier reference.
Departmental directive Oversight tier → department. Directive text, SLA override (if any), escalation tier.
General official letter Catch-all formal correspondence. Standard zones only.

13.3 QR verification block

Every official document embeds a QR (per qr_verifiable_documents, see /specs/en/05-data-model/ §6). The QR resolves to https://sindhitportal.maahir.io/verify/<token> which displays the document hash, issue date, issuing official, and revocation status. The block sits in the footer, 32 × 32 mm on A4, with a one-line caption in --brand-text-muted: "Scan to verify authenticity".

13.4 Print and PDF

13.5 Date-aware officials on letters

The letter's effective date (the date the letter is issued for, which may differ from the print/regenerate date) drives the Officials CMS join. A letter dated 2024-06-15 regenerated in 2026 shows the 2024 Secretary, DG, and Minister — never the incumbents. This satisfies FR-OFC-004 and US-OFC-002.


14. Brand & Officials CMS Specification

Module P (OFC) is the system of record for everything in this document that is dynamic: officials, media, theme, motifs. Static brand assets (master SVGs, fonts) live in the repository (§18); dynamic brand state lives in the CMS.

14.1 Officials records

The CMS maintains three senior roles, plus optional extensions:

Role (enum) Held by (current incumbent, per _context.md) Surfaces
minister / sacm Special Assistant to CM Sindh on S&IT — Mr. Muhammad Ali Rashid Public site "Leadership", letter masthead, transparency dashboard.
secretary Secretary S&ITD Letter reference block, dashboards, S&ITD pages.
dg Director-General (S&ITD / facilitation desk) Letter reference block, facilitator console, MoM cover.
director (optional) Director-level officers per department Department-specific letters.

Each officials record (/specs/en/05-data-model/ §officials) carries: title, full_name_{en,ur,sd}, dept_id, portrait_media_id, message_{en,ur,sd}, is_current. Each official_terms row carries designation, effective_from, effective_to (NULL = incumbent), and metadata_json (notification reference, appointment letter).

14.2 Single source of truth

Officials records are the only source for names, portraits, and messages on any surface. Hard-coding an official's name in a component, email template, letter template, or dashboard is a defect. Every consumer — public site, staff console, document generator, dashboards, notification templates — reads from the OFC API:

Responses are locale-negotiated (Accept-Language) so the same call returns EN/UR/SD name and message.

14.3 Date-aware accuracy

The join official_terms WHERE effective_from <= :issue_date AND (effective_to IS NULL OR effective_to >= :issue_date) is the canonical rule (/specs/en/05-data-model/ §10.3). It is applied:

14.4 Activation and archival

14.5 Media library

The shared media_library table holds every brand asset consumed by the CMS: official portraits, the SITP mark and its variants, co-primary seals, Ajrak motifs, illustration files, email header images. Each asset carries bucket, object_key, mime_type, size_bytes, checksum_sha256, av_status, is_encrypted, plus brand-specific metadata: asset_type (logo / seal / motif / portrait / illustration / icon), valid_from / valid_to (for date-scoped assets such as a retiring seal), consent_ref (signed release for portraits), and tags for search.

Asset changes propagate to surfaces using them: updating the primary mark's SVG in the library re-renders every header on next page load; no deploy required (FR-OFC-006).

14.6 Photo crop and format standards

Asset Aspect Min dimensions Format Notes
Official portrait 1:1 (square) 600 × 600 px JPEG / WebP Head and shoulders; eyes on upper third; neutral background (--brand-paper-3).
Official portrait (letter) 1:1 240 × 240 px JPEG Auto-cropped from the master; 25 mm on A4.
SITP primary mark vector n/a SVG (primary), PNG @1×/@2×/@3× Never supply as JPEG.
Co-primary seal vector n/a SVG + PNG @ 512 As supplied by the Government.
Ajrak motif vector n/a SVG Two-colour max; recoloured via currentColor / CSS vars.
Email header 5:1 600 × 120 px PNG Masthead lockup on --brand-paper.
Social share card 1.91:1 1200 × 630 px PNG / WebP SITP mark + tagline + Ajrak border.

Portraits are auto-cropped to the 1:1 master on upload via the media library's crop UI; the letter-sized version is derived. Uncropped originals are retained for re-crop.

14.7 Brand & theme configuration

FR-OFC-007 exposes the palette, logo lockup, and motif set as runtime configuration in system_settings (category branding). On publish, the new theme version is stored, the previous is archived, and the change propagates to the public site and staff console on next render. Theming is atomic: a failed propagation rolls back (no half-applied theme). Brand Editors configure; Super Admins approve (§14.8).

14.8 Approval workflow

Changes to senior-official records and to the theme go through a two-step approval:

  1. Draft. A Brand Editor creates/edits; the change is saved as a pending revision, visible only in the CMS.
  2. Approval. A Super Admin reviews (diff view with before/after), approves or rejects with reason. On approval the change propagates atomically (FR-OFC-003, FR-OFC-005).

The workflow is itself audit-logged (actor, timestamp, before/after) into audit_logs for every state change.


15. Officials CMS Propagation

This diagram shows how a single approved change in the Officials CMS reaches every consumer surface, atomically and audit-logged, with date-aware reads on the way back out.

flowchart LR subgraph CMS["Brand & Officials CMS (Module P)"] BE["Brand Editor<br/>drafts change"] SA["Super Admin<br/>approves / rejects"] DB[("officials<br/>official_terms<br/>media_library<br/>system_settings")] end subgraph Approval["Approval workflow"] BE -->|save draft| PEND["Pending revision"] PEND --> SA SA -->|reject + reason| PEND SA -->|approve| TXN["Atomic propagation txn"] end subgraph Persist["Persistence (audit-logged)"] TXN -->|write + audit_log| DB TXN -->|fail| RB["Rollback"] end subgraph Consume["Consumers (read-only, via OFC API)"] API["OFC API<br/>/officials/current<br/>/officials/as-of"] PUB["Public site<br/>(leadership, letters)"] STAFF["Staff console<br/>(facilitator dashboards)"] DOC["Document generator<br/>(letterhead, certificates)"] NOTIF["Notification templates<br/>(email/SMS/WA)"] ANL["Analytics dashboards<br/>(Metabase + custom)"] end DB --> API API --> PUB API --> STAFF API --> DOC API --> NOTIF API --> ANL DOC -.->|"join on<br/>effective_from/effective_to<br/>by letter issue_date"| DATEAWARE["Date-aware render<br/>(historical accuracy)"] ANL -.-> DATEAWARE

Written description. A Brand Editor drafts a change to an officials record (a new DG, a portrait swap, a corrected name transliteration, a theme update). The draft is saved as a pending revision and does not propagate. A Super Admin reviews the diff and either rejects (with reason, returned to draft) or approves. On approval the change is written inside a single atomic transaction that also appends a row to audit_logs with the actor, timestamp, and before/after JSON; if any write fails the whole transaction rolls back, leaving every surface on the previous state. After commit, five consumer surfaces read from the same OFC API: the public site (leadership tiles, letter mastheads), the staff console (facilitator dashboards), the document generator (letterhead and certificates), the notification template engine, and the analytics dashboards. The document generator and the analytics dashboards apply the date-aware join — they pass the document's effective date or the reporting period to the API, which returns the official whose official_terms window contains that date. This guarantees that a letter dated 2024 still shows the 2024 Secretary even when regenerated in 2026, and that a historical dashboard for Q2-2024 lists the officials who held office that quarter. Past officials are never deleted: the join simply resolves to the historical term, and the row remains queryable for archival and transparency.


16. RTL Mirror Rules

Urdu and Sindhi are right-to-left. The mirror is applied at the document level (<html dir="rtl">) and propagated through logical CSS properties. The rules below fix what flips and what does not.

16.1 What flips

Element LTR RTL
Reading direction left-to-right right-to-left
App bar mark position inline-start (left) inline-start (right)
Side nav inline-start (left) inline-start (right)
Breadcrumb chevron points right (>) points left (<)
Primary button icon leading (left of label) leading (right of label)
Table numeric columns right-aligned left-aligned
Modal footer actions right-aligned left-aligned
Status pill inline-start border left right
Selected ticket-row border left 2 px right 2 px
Letterhead masthead left-aligned tri-mark right-aligned tri-mark
Letter body justified-left justified-right

16.2 What does NOT flip

16.3 Implementation


17. Accessibility & Contrast Rules

Accessibility is a brand commitment, not a post-launch audit. The rules below operationalise WCAG 2.1 AA (/specs/en/03-non-functional-reqs/ §Accessibility) for the brand specifically.

17.1 Contrast

17.2 Colour-only meaning

Status is never conveyed by colour alone. Every status pill carries a text label (§9.5); every chart series has a legend with text; every required-field marker has both colour and an asterisk and aria-required.

17.3 Focus

17.4 Motion

17.5 Language and screen readers

17.6 Verification in CI


18. Brand-Asset Repository & Governance

18.1 Repository

The brand-asset repository is a versioned store inside the OFC media library (media_library with asset_type filter) plus a read-only git mirror for design-tool integration (Figma library, source-controlled SVGs). It contains:

Folder Contents
/logos/sitp/ Primary, stacked, wordmark-only, monochrome, favicon set, app icons.
/logos/co-primary/ Govt of Sindh seal (as supplied), S&ITD logo (as supplied).
/logos/lockups/ Tri-mark, dual-mark, single-mark master lockups.
/motifs/ Rosette, trefoil, border-strip, corner, watermark — each as two-colour SVG.
/palette/ tokens.css, tokens.scss, tailwind-theme.js, figma-styles.json, Adobe ASE.
/typography/ Subsetted Inter, Poppins, Noto Nastaliq Urdu, Noto Naskh Arabic, JetBrains Mono; face-config JSON.
/templates/ Letterhead templates (all §13.2 types) in HTML/DOCX/PDF-A; email/SMS/WA templates.
/icons/ Lucide import + the four cultural pictograms.
/photography/ Approved Sindh photography library with releases.
/illustrations/ Empty-state and onboarding art.
/brand-guide/ This document, rendered PDF, one-page brand sheet.

18.2 Versioning

18.3 Governance

Role Rights
S&ITD Brand Owner (Secretary or nominee) Final authority on the brand; approves new motifs, palette changes, logo revisions.
MAAHIR Brand Editor Drafts officials records, theme changes, asset uploads; cannot self-approve.
Super Admin Approves officials/theme changes; propagates; cannot edit draft without leaving an audit trail.
Contributors (designers, agencies) Submit via pull request to the git mirror; reviewed by Brand Editor before merge.
All consumers Read-only via the OFC API and the CDN; never copy assets into repos.

18.4 Change process

  1. Propose. Contributor opens a change request (CR) describing the asset/theme delta and rationale.
  2. Review. Brand Editor reviews for palette, type, motif, and accessibility compliance; requests revisions or approves into a draft.
  3. Approve. Super Admin approves (officials/theme) or the S&ITD Brand Owner approves (logo/motif/palette).
  4. Propagate. The atomic propagation transaction (§15) publishes; consumers pick up on next render.
  5. Archive. The previous version is retained per §18.2; nothing is destroyed.

18.5 Misuse and enforcement


19. Traceability

Artifact IDs
Functional requirements FR-OFC-001 · FR-OFC-002 · FR-OFC-003 · FR-OFC-004 · FR-OFC-005 · FR-OFC-006 · FR-OFC-007
User stories US-OFC-001 · US-OFC-002 · US-OFC-003 · US-OFC-004
Related NFRs WCAG AA contrast (/specs/en/03-non-functional-reqs/ §Accessibility), design-system coverage ≥ 95 %, multi-tenant/env-driven branding
Related data officials, official_terms, media_library, system_settings (category branding), qr_verifiable_documents/specs/en/05-data-model/
Related docs /specs/en/00-vision-scope/ §Branding, /specs/en/01-prd/ Epic E16, /specs/en/02-functional-reqs/ OFC, /specs/en/09-i18n-localization/ (RTL), 12-docgen-esign/en.md (letterhead + QR), /specs/en/22-governance-legal/ (records retention), /specs/en/23-ppp-vendor-exit/ (brand-use licence)
Module codes OFC (P), PUB (A), TKT (B), DOC (L), ANL (I)