Chitra Design System
The Official Brand Design System of subhankarrout.in
A unified design framework that brings together design, storytelling, creativity, and technology through a shared visual language. Every token, component, and pattern — the single source of truth for all of Subhankar Rout's creative work.
In Sanskrit, Chitra means "image", "picture", or "a wonderful work" — one of the oldest words in the Indian vocabulary for visual creation. It encompasses everything drawn, painted, imagined, or seen.
Chitra is history — from the cave painting to the canvas, from the canvas to the film reel, and from film to the pixel. The word didn't change; the medium evolved. Subhankar lives at that same frontier: a Product Designer who makes still frames feel alive, an Author who puts images into words, and a Filmmaker who turns images into motion.
This design system carries that same spirit — not just a style guide, but the visual language that carries every idea from thought to experience. Every token, component, and pattern is guided by one journey:
The visual mark of the Chitra Design System — used only on this page, not on any other page of subhankarrout.in.
Two variants used across all 9 pages — header, footer, and offcanvas menu. Class: .tp-logo.
nav items
Portfolio
logo-blue.png · height 36–40px · .tp-logo
social icons
logo-white.png · height 36–40px · .black-bg footer
nav items
Portfolio
logo-white.png · transparent header · swaps to blue on scroll
logo-white.png · .tpoffcanvas top-left · always white on dark panel:root in styles.css.--transition
0.35s cubic-bezier(0.16, 1, 0.3, 1) — Default. Smooth spring feel. Used on cards, hover states.
--transition-fast
0.2s ease-out — Quick micro-interactions. Links, icon hovers.
--transition-btn
0.3s cubic-bezier(0.785, 0.135, 0.15, 0.86) — Snappy button fill animation (tp-btn split fill).
Mobile menu
0.25s — .tpoffcanvas slide-in. Intentionally fast to avoid UX lag.
<em> inside headlines always takes color: var(--accent-violet). Exception on dark sections: color: var(--accent-yellow). Never italic for body copy — only headlines.
.tp-btn
.hm-btn-yellow
.hm-btn-primary
.hm-btn-ghost
.hm-btn-outline
.btn-primary-hero + .btn-ghost-hero
.hm-btn-yellow + .bk-form override
.pr-hero__kicker / .hm-hero__kicker — 12px uppercase, violet bg + border, pulsing dot. Hero kicker on light pages..pr-hero__kicker--yellow — Same shape, amber text, yellow tint bg. Used for achievement / book context badges..pr-section-label — 12px uppercase violet text with a 20px violet rule on the left. Appears above every section title on pr.html and portfolio.html..hm-label — Violet text, yellow left-rule (not violet). Unique to index.html section openers. Slightly warmer feel than .pr-section-label..pr-hero__tag — White card, pill shape, colored dot, shadow. Float on portrait image in pr.html hero. 3 variants: violet, green, Figma-icon. Each animates independently (floatA / floatB / floatC)..pr-filter-tab — Pill-shaped isotope filter. Active state: solid violet fill, white text. Used in portfolio.html to filter project cards by category..pr-hero__links — 4-column grid below the pr.html hero. White bg, shared border, each link has brand icon color. Hover: violet text + very faint violet bg tint. On mobile: collapses to 2×2 grid..hm-skill-chip — Pill border, icon + label. Used in the skills marquee strip (currently commented out). Two rows — row 1 scrolls left, row 2 scrolls right.
.bk-hero__single-cover — 320px wide, border-radius 12px, default rotate(-3deg). Hover: straightens + lifts 8px. Only on books.html hero..tp-footer-widget__input — Dark bg, white-tinted border, plane icon submit. Posts to Google Forms. Used in footer "Get Update" column on all pages..hm-name::after — Grows from 0→100% via hm-lineGrow (1.2s, 1s delay). Height 3px, yellow, border-radius 2px. Lives in styles.css.
bootstrap.bundle.min.js. Key grid classes used: col-xl-3 col-lg-4 col-md-6 pattern for footer · container-fluid for header · container for content sections. Custom grid overrides live in styles.css for hero sections (CSS Grid, not Bootstrap).
Skip Link
<a class="skip-link" href="#hm-main"> — Visually hidden until focused. Appears at top-left with violet bg on Tab key. On all pages.
Focus Styles
All interactive elements (a, button, input, [tabindex]) get outline: 2px solid var(--accent-violet); outline-offset: 3px on :focus-visible. Defined globally in styles.css §03.
ARIA Labels
All nav elements have aria-label. Images have descriptive alt. Decorative elements use aria-hidden="true". Offcanvas: role="dialog" aria-modal="true". Hamburger: aria-expanded toggled by JS.
Image Loading
Hero LCP image: loading="eager" fetchpriority="high" + <link rel="preload">. All below-fold images: loading="lazy". Width + height attributes on logo images to prevent CLS.
Performance (Lighthouse)
Non-critical CSS deferred via media="print" onload="this.media='all'" + noscript fallback. All JS (except jQuery + Bootstrap) uses defer in dependency order: plugins first, then main.js, then script.js. Clarity + Chatbase at bottom. DNS prefetch for third-party domains.
| Page | File | Hero Theme | Primary CTA | Secondary CTA |
|---|---|---|---|---|
| Home | index.html |
Dark gradient | .hm-btn-yellow |
.hm-btn-ghost |
| Portfolio | portfolio.html |
Light white | .btn-primary-hero |
.btn-ghost-hero |
| About | about.html |
Light white | .ab-btn-primary |
.ab-btn-ghost |
| Books | books.html |
Dark gradient | .hm-btn-yellow |
— |
| The Uncharted Romance | the_uncharted_romance.html |
Dark book hero | .tp-btn (Buy) |
.hm-btn-yellow (Review form) |
| One Year, Many Lessons | one_year_many_lessons.html |
Dark book hero | .tp-btn (Buy) |
.hm-btn-yellow (Review form) |
| Press Release | pr.html |
Light / grid bg | .btn-primary-hero |
.btn-ghost-hero |
| S4 Cinesphere | s4cinesphere.html |
Dark cinematic | .dx-btn-primary (red) |
.dx-btn-ghost |
| Privacy Policy | privacy-policy.html |
Dark hero strip | — | — |
.pr-card — wrapper (white bg, 18px radius, hover lift).pr-card__fig — image container (aspect-ratio 4/3).pr-card__img — cover image (scale on hover).pr-card__overlay — dark overlay with action icons (opacity 0→1 on hover).pr-card__act — glassmorphism action button (36×36, blur backdrop).pr-card__badge — top-left pill badge.pr-badge--pr / .pr-badge--awd / .pr-badge--video — badge color variants.pr-card__body — text content padding.pr-card__title — 15px/700, hover→violet.pr-card__meta — 12px, icon+text, tertiary colorFilter:
.pr-filter, .pr-filter.active — pill tabs, active=violet fill
.pr-ai-card — dark glass card (dark bg, rgba border, hover lifts + border glows violet)Icon wrapper: 44×44px, 12px radius,
rgba(89,86,233,.15) bg6 icon variants: wand-magic-sparkles, brain, robot, microchip, code, film
.pr-ai-tag — tiny pill badge, violet tint, used for tool category labelsGrid: 3-col on desktop, collapses to 1-col mobile
.pr-story-card — dark glass card (rgba bg + border). Hover: border turns violet. Tags: category pill (violet, yellow, or teal tint). Pagination: .pr-chronicles-dots — custom elongated active dot. Carousel: Swiper (slidesPerView: 1.15 mobile → 2 at 576px → 3 at 992px → 4 at 1200px). Active slide: border glows. 6 slides total: Short Film · Novel · Non-Fiction · Figma MCP Training at Capgemini (delivering_Figma mcp_training_capgemni.jpg) · SAP Impulse India '25 Event Coordinator & Volunteer (sap_impluse_2025.jpg). Images in assets/img/pr/details/. No external link on image — body tag only.
.ab-highlight-card — white card, 16px radius, icon + title + body. Hover: soft violet shadow + lift 3px. Icon box: 40×40, rounded, tinted bg matching icon color..ab-meta-item — label (uppercase/tertiary) + value + sub-label. Used for location, availability, etc.
.pr-step — 4-col dark grid. Step number: large, faded violet. Active step: brighter border. Used in index.html "Process" section.
.bk-hero__single-cover (book.css) — 320px wide, rotate(-3deg), hover straightens + lifts 8px.Genre chips: pill badge above title. Price row: yellow Kindle price, white Paperback price.
Buy bar: 2→4 col responsive grid of retailer buttons. Review form below:
.bk-form with .hm-btn-yellow (hover overridden to blue in book.css).
fas fa-star (filled, yellow #FFDC60) + far fa-star (empty, #E8ECF2). Reviewer avatar: 32px circle gradient. Quote in italic. Platform label in tertiary grey. Submit form below reviews uses .bk-form with name/email/review textarea + .hm-btn-yellow (hover turns blue in book.css).
.hm-yt-card — white card, 16px radius, thumbnail (16/9 aspect-ratio) + red play button + title + meta. Hover: lifts + shadow. Used in index.html "S4 Cinesphere" section and s4cinesphere.html.
.rj-card — dark glass card, year in large faded violet, badge pill, title, description..rj-card-year / .rj-card-badge — year display + colored milestone badge.Desktop: horizontal sticky scroll (CSS overflow-x scroll pinned). Mobile:
.rj-mobile-timeline — vertical stacked cards.
.pr-skill-group — white card with icon + group title + chip tags. .pr-skill-tag — pill chip (light grey bg, border, dark text). Used in index.html "Skills" section grid.
.pr-client-chip — semi-transparent pill (dark bg), brand name in muted white, subtle border. Track: .pr-marquee-track with animation: prClientScroll 24s linear infinite. Mask fades edges. Pauses on hover. Used in index.html below hero.
.pr-featured wrapper — light grey bg (#f7f8fc), overflow:hidden. .pr-marquee — edge-faded mask. .pr-marquee__track — animates prScroll 24s linear infinite. .pr-marquee__item — 16px/700, grey text, right divider border, icon + label. Hover: text turns violet. Used in pr.html "Featured In" section.
.pr-stats — dark bg (#0D0D12), top border. .pr-stats__grid — 4-col grid, dividers between cols. .pr-stat__num — 54px/800, gradient text-clip (violet → yellow → teal). .pr-stat__lbl — 12px/600, uppercase, muted. Animated via CounterUp.js on scroll.
.ab-stat-item — white bg, yellow number (#FFDC60), grey label. 4-col grid, divider borders. Animated via CounterUp.js on scroll.