Cards
Four card variants. All support hover lift, focus rings, and work in both themes.
Default
Gradient surface, lift on hover.
Glass
Frosted translucent backdrop.
Accent
Teal glow & gradient border.
Outline
Transparent, border only.
<div class="v-card">Default card content</div>
<div class="v-card v-card-glass">Glass card</div>
<div class="v-card v-card-accent">Accent card</div>
<div class="v-card v-card-outline">Outline card</div>
Badges
Small status indicators with semantic colour variants and optional leading dot.
<span class="v-badge">Default</span>
<span class="v-badge v-badge-success">Success</span>
<span class="v-badge v-badge-warning">Warning</span>
<span class="v-badge v-badge-danger">Danger</span>
<span class="v-badge v-badge-info">Info</span>
<span class="v-badge v-badge-dot">With dot</span>
Alerts
Left-bordered notification banners with icon, title and body text.
<div class="v-alert v-alert-success">
<i class="fa-solid fa-circle-check v-alert-icon"></i>
<div>
<div class="v-alert-title">Success</div>
<div class="v-alert-body">Your changes were saved.</div>
</div>
</div>
Modals
Bootstrap 5 modals with Vectra styling. Works in dark and light themes. Uses data-bs-toggle — no extra JS needed.
<!-- Trigger -->
<button class="v-btn v-btn-primary"
data-bs-toggle="modal"
data-bs-target="#myModal">Open</button>
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1"
aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="myModalLabel">Title</h5>
<button type="button" class="btn-close"
data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">Your content here.</div>
<div class="modal-footer">
<button class="v-btn v-btn-neutral v-btn-sm"
data-bs-dismiss="modal">Close</button>
<button class="v-btn v-btn-primary v-btn-sm">Save</button>
</div>
</div>
</div>
</div>
Tabs
Standard underline tabs and pill tabs. Driven by Bootstrap's tab plugin.
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" data-bs-toggle="tab"
data-bs-target="#tab1" type="button" role="tab">Tab 1</button>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane fade show active" id="tab1" role="tabpanel">Content</div>
</div>
<!-- Pill variant -->
<ul class="nav nav-pills" role="tablist"> ... </ul>
Accordion
Bootstrap accordion with Vectra card styling. Use accordion-flush for a bordered variant.
<div class="accordion" id="myAccordion">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button"
data-bs-toggle="collapse"
data-bs-target="#item1">Title</button>
</h2>
<div id="item1" class="accordion-collapse collapse show"
data-bs-parent="#myAccordion">
<div class="accordion-body">Content here.</div>
</div>
</div>
</div>
Tables
Responsive table with uppercase headers, row hover, and optional status badges.
| Name | Role | Status | Joined |
|---|---|---|---|
| Alice Johnson | Designer | Active | Jan 2024 |
| Bob Williams | Developer | Active | Mar 2024 |
| Carol Davis | Manager | Pending | Jun 2024 |
| David Brown | Analyst | Inactive | Sep 2023 |
<div class="v-table-wrap">
<table class="v-table">
<thead>
<tr><th>Name</th><th>Role</th><th>Status</th></tr>
</thead>
<tbody>
<tr>
<td>Alice Johnson</td>
<td>Designer</td>
<td><span class="v-badge v-badge-success v-badge-dot">Active</span></td>
</tr>
</tbody>
</table>
</div>
Progress Bars
Semantic colour variants and three height sizes.
<div class="v-progress-wrap">
<div class="v-progress-label"><span>Label</span><span>72%</span></div>
<div class="v-progress">
<div class="v-progress-bar" style="width:72%"></div>
</div>
</div>
<!-- Colour variants: v-progress-bar-success | v-progress-bar-warning | v-progress-bar-danger -->
<!-- Size variants: v-progress-sm | (default) | v-progress-lg -->
Spinners & Loaders
Ring spinner in three sizes and a bouncing dots variant.
<div class="v-spinner"></div>
<div class="v-spinner v-spinner-sm"></div>
<div class="v-spinner v-spinner-lg"></div>
<div class="v-dots-spinner"><span></span><span></span><span></span></div>
Pagination
Page navigation with active, hover, and disabled states.
<nav class="v-pagination" aria-label="Page navigation">
<a href="#" aria-label="Previous"><i class="fa-solid fa-chevron-left"></i></a>
<a href="#">1</a>
<span class="active" aria-current="page">2</span>
<a href="#">3</a>
<span class="disabled" aria-disabled="true">…</span>
<a href="#" aria-label="Next"><i class="fa-solid fa-chevron-right"></i></a>
</nav>
Timeline
Vertical event timeline with accent-coloured connector and dot markers.
Project Kickoff
Initial planning and design tokens defined.
v1.0 Released
First stable release with 20 components and dark theme.
v2.0 — Pro Edition
Full rebuild. Working scroll spy, 30+ components, light theme.
<div class="v-timeline">
<div class="v-timeline-item">
<div class="v-timeline-dot"></div>
<div class="v-timeline-date">January 2024</div>
<div class="v-timeline-card">
<h6>Event Title</h6>
<p>Event description.</p>
</div>
</div>
</div>
Steps
Auto-numbered step cards. Mark steps active or done.
<div class="v-steps">
<div class="v-step done">
<div class="v-step-title">Install</div>
<div class="v-step-desc">Add CSS and JS files to your project.</div>
</div>
<div class="v-step active">
<div class="v-step-title">Configure</div>
<div class="v-step-desc">Override design tokens to match your brand.</div>
</div>
<div class="v-step">
<div class="v-step-title">Build</div>
<div class="v-step-desc">Use components in your layouts.</div>
</div>
</div>
<!-- States: .done | .active | (default pending) -->
Code Blocks
Syntax-highlighted code with a copy button. Language label in header. Inline code also styled.
// Toggle theme with one line
document.documentElement.setAttribute('data-theme', 'light');
/* Override the accent colour */
:root {
--v-accent: #7c3aed; /* Purple */
}
Tooltips & Popovers
Bootstrap tooltips and popovers, auto-initialised by Vectra JS.
<!-- Tooltip (auto-initialised by Vectra JS) -->
<button data-bs-toggle="tooltip" title="Tooltip text">Hover me</button>
<button data-bs-toggle="tooltip" data-bs-placement="bottom" title="Bottom">Bottom</button>
<!-- Popover -->
<button tabindex="0" data-bs-toggle="popover"
title="Popover title"
data-bs-content="Popover body content.">Popover</button>
Testimonial Slider
Touch-enabled slider with dot navigation. Pass data-autoplay="4000" for auto-advance.
<div class="v-testimonial-slider" data-autoplay="5000">
<div class="v-testimonial-track">
<div class="v-testimonial-card">
<div class="v-testimonial-quote">Your quote here.</div>
<div class="v-testimonial-author">
<div class="v-testimonial-avatar">AJ</div>
<div>
<div class="v-testimonial-name">Alice Johnson</div>
<div class="v-testimonial-title">Lead Designer, Acme Corp</div>
</div>
</div>
</div>
</div>
<div class="v-slider-controls">
<button class="v-slider-btn" data-slider-prev aria-label="Previous"><i class="fa-solid fa-chevron-left"></i></button>
<div class="v-slider-dots"><div class="v-slider-dot active"></div></div>
<button class="v-slider-btn" data-slider-next aria-label="Next"><i class="fa-solid fa-chevron-right"></i></button>
</div>
</div>
Pricing Cards
Pricing layout with included/excluded features and a featured highlight state.
Starter
Perfect for side projects.
Pro
For teams and professionals.
Enterprise
Scale with confidence.
<div class="v-card v-pricing-card">
<h5 class="mb-1">Pro</h5>
<div class="v-price mb-3">$29 <span class="v-price-period">/ month</span></div>
<div class="v-pricing-feature included"><i class="fa-solid fa-check"></i> Feature one</div>
<div class="v-pricing-feature excluded"><i class="fa-solid fa-xmark"></i> Locked feature</div>
<button class="v-btn v-btn-primary w-100 mt-4">Get Started</button>
</div>
<!-- Add class "featured" to v-pricing-card for the highlighted variant -->
Stat Cards
Animated number counters triggered on scroll via data-counter.
<div class="v-card v-stat-card">
<div class="v-stat-value" data-counter="12849">0</div>
<div class="v-stat-label"><i class="fa-solid fa-users me-1"></i>Total Users</div>
</div>
<!-- data-counter triggers an animated number on scroll -->
<!-- Optional: data-counter-duration="2000" (ms) -->
File Upload Drop Zone
Draggable upload zone with filename display on selection.
<div class="v-drop-zone position-relative"
data-placeholder="Drop files here or click to browse">
<input type="file" class="position-absolute"
aria-label="File upload" multiple />
<i class="fa-solid fa-cloud-arrow-up fa-2x mb-2"></i>
<div class="fw-semibold mb-1">Drop files here or click to browse</div>
<div class="v-small v-text-muted" data-file-label>Max file size: 10 MB</div>
</div>
Floating Action Button
Expandable FAB group. Toggle child actions with data-fab-toggle.
<div class="v-fab-group">
<!-- Mini action buttons (hidden by default) -->
<button class="v-fab-mini" title="Share">
<i class="fa-solid fa-share-nodes"></i>
</button>
<button class="v-fab-mini" title="Edit">
<i class="fa-solid fa-pen"></i>
</button>
<!-- Main FAB button -->
<button class="v-fab" data-fab-toggle aria-label="Actions">
<i class="fa-solid fa-plus"></i>
</button>
</div>
Offcanvas Panel
Bootstrap offcanvas with Vectra styling. Opens from start, end, top, or bottom.
<button data-bs-toggle="offcanvas"
data-bs-target="#myPanel">Open</button>
<div class="offcanvas offcanvas-end" id="myPanel"
tabindex="-1"
aria-labelledby="myPanelLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="myPanelLabel">Panel</h5>
<button class="btn-close" data-bs-dismiss="offcanvas"></button>
</div>
<div class="offcanvas-body">
Content here.
</div>
</div>