Logo

Design System for the Wattlink Family of Applications

Color Palette

Our color system uses CSS custom properties for easy theming and consistency.

Brand Colors

Brand Primary
--brand-primary
Brand Secondary
--brand-secondary
Brand Accent
--brand-accent
Brand Dark
--brand-dark

Semantic Colors

Success
--semantic-success
Warning
--semantic-warning
Danger
--semantic-danger
Info
--semantic-info

Typography

Our typography scale uses CSS custom properties for consistent sizing.

XXL Heading (3.5rem)

XL Heading (2.75rem)

Large Heading (1.75rem)

Medium Heading (1.25rem)

Small Text (1rem)

Extra Small Text (0.875rem)

Double Extra Small Text (0.75rem)

Buttons

Buttons come in various styles and sizes to suit different use cases.

Primary Variants

Outlined Buttons

Button Sizes

Small Button Variants

Small Outlined Variants

Rounded Buttons

Disabled State

Usage Example

<!-- Default Button -->
<button class="Button Button--primary">Click Me</button>

<!-- Outlined Button -->
<button class="Button Button--outlined Button--primary">Outlined</button>

<!-- Small Button -->
<button class="Button Button--primary Button--small">Small</button>

<!-- Small Outlined Button -->
<button class="Button Button--outlined Button--success Button--small">Small Outlined</button>

Badges

Badges are used to highlight status, counts, or labels.

Semantic Badges

Primary Secondary Success Warning Danger Info

Badge Sizes

Small Default Large

Pill Badges

Active Pending Inactive Draft

Usage Example

<span class="Badge Badge--success">Active</span>
<span class="Badge Badge--warning Badge--pill">Pending</span>

Alerts

Alerts provide contextual feedback messages for typical user actions.

Alert Types

Success! Your changes have been saved successfully.
Warning! Please review your input before submitting.
Error! Something went wrong. Please try again.
Info: This feature is currently in beta.
Notice: Your trial period ends in 7 days.

Usage Example

<div class="Alert Alert--success">
  <strong>Success!</strong> Operation completed.
</div>

Cards

Cards are flexible content containers with multiple variants.

Basic Card

Card Title

This is a basic card component with a title and content. Cards are great for organizing related information and actions.

Card with Metrics

Dashboard Stats
📊
Total Users
1,234
💰
Revenue
$45,678

Usage Example

<div class="Card">
  <div class="Card__title">Card Title</div>
  <p>Card content goes here.</p>
</div>

Tables

Tables for displaying tabular data with various states and styles.

Basic Table

Name Email Role Status
John Doe john@example.com Admin Active
Jane Smith jane@example.com User Active
Bob Johnson bob@example.com User Pending

Usage Example

<table class="Table">
  <thead>
    <tr>
      <th>Header 1</th>
      <th>Header 2</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Data 1</td>
      <td>Data 2</td>
    </tr>
  </tbody>
</table>

CSS Custom Properties

All colors and sizes are defined as CSS custom properties for easy theming.

Brand Colors

--brand-primary
--brand-secondary
--brand-accent
--brand-dark

Semantic Colors

--semantic-success
--semantic-warning
--semantic-danger
--semantic-info

Typography Scale

--fs-xxl: 3.5rem
--fs-xl: 2.75rem
--fs-lg: 1.75rem
--fs-md: 1.25rem
--fs-sm: 1rem
--fs-xs: 0.875rem
--fs-xxs: 0.75rem

Component Classes

All components follow BEM naming convention for consistency.

Available Components

  • .Button - Button component
  • .Badge - Badge component
  • .Alert - Alert component
  • .Card - Card component
  • .Table - Table component
  • .Form - Form component
  • .Modal - Modal component
  • .Nav - Navigation component

Modifier Pattern

.Button--primary
.Button--secondary
.Button--outlined
.Button--small
.Button--large
.Button--rounded

.Badge--success
.Badge--warning
.Badge--pill
.Badge--small

Forms

Form components for dark-themed interfaces with floating labels, validation, and specialized controls.

Dark Form Inputs

Account Settings
Update your account information below.

Granularity Buttons

Time Period

Role Selector

Checkbox Group

Notifications

Form Actions

Usage Example

<div class="Form">
  <div class="Form__group">
    <label class="Form__label Form__label--required">Name</label>
    <input type="text" class="Form__input" placeholder="...">
  </div>
  <div class="Form__granularity-buttons">
    <label class="Form__granularity-btn active">Daily</label>
    <label class="Form__granularity-btn">Monthly</label>
  </div>
</div>

Modals

Modal dialogs for confirmations, forms, and payment details. Shown inline for preview.

Basic Modal

Modal with Form

Payment Details Modal

Tabs

Tab navigation for switching between views, with primary and secondary styles.

Primary Tabs

Tab content area. The active tab is highlighted with a bottom border.

Secondary Tabs

Tabs with Content

A
Jana Svobodova
Active
U
Petr Dvorak
Pending

Usage Example

<div class="Tabs">
  <nav class="nav-tabs">
    <a class="nav-link active">Tab 1</a>
    <a class="nav-link">Tab 2</a>
  </nav>
  <div class="Tabs__content">...</div>
</div>

Navigation

Horizontal and vertical navigation patterns for application menus.

Horizontal Navigation

Vertical Navigation

Pagination

Pagination controls for navigating through data lists and tables.

Default Pagination

Icons

Icon containers with size variants and semantic color backgrounds.

Icon Sizes

S
Small
M
Medium
L
Large
XL
X-Large

Semantic Color Icons

P
Production
C
Consumption
Sharing
Success
!
Warning
Danger
i
Info

Usage Example

<div class="Icon Icon--circular Icon--medium Icon--success">
  <i class="bi bi-check"></i>
</div>

Stat Cards

Metric display cards used in dashboards to show key statistics.

Stat Card Grid

Total Production
1,234 kWh
Total Consumption
987 kWh
Energy Shared
456 kWh

Compact Stat Cards

Active
24
Pending
7
Errors
2

Border Variants

Revenue
+12,450 CZK
Pending Payments
3,200 CZK
Overdue
1,800 CZK
Total Balance
45,670 CZK

Status Buttons

Outlined buttons indicating process states with semantic colors.

Status Button States

Usage Example

<button class="StatusButton StatusButton--success">
  <i class="bi bi-check-circle"></i> Success
</button>

Box

Content containers with items, icons, and actions. Multiple density levels.

Default Box

Energy Sources
Solar
Rooftop solar panels - 12.5 kWp installed capacity producing an average of 35 kWh/day.
🌀 Wind
Small wind turbine - 3 kW rated power, suitable for supplementary generation.

Compact Box

Notifications
New member joined your energy community.
Monthly report is ready for download.
System maintenance scheduled for Sunday.

Box Variants

Accent Background
Content on accent background.
Supercompact
Item one
Item two
Item three

Box with Warning Title

⚠ Attention Required
Your energy sharing agreement expires in 14 days. Please renew to continue.

Listings

List components for partners, invoices, metering points, and data items with status indicators, badges, actions, and advanced interaction patterns.

Partner Listing with Full Details

S
Solar Park Moravsko
Active Premium
Moravská Energetika s.r.o.
⚲ Brno, Czech Republic 📅 Since Jan 2024 ID: SPM-00142
12,840 kWh
⚡ Producing Tier 1
C
Bytový dům Vinohrady
Pending
SVJ Vinohrady 1842
⚲ Prague 2 📅 Since Mar 2024 ID: BDV-00087
3,210 kWh
⌛ Awaiting contract Standard
Komunitní Energetika Olomouc
Active Combined
KEO Energy a.s.
⚲ Olomouc 📅 Since Nov 2023 ID: KEO-00031
8,460 kWh
⚡ Producing ⚡ Consuming
S
Větrný park Krušné hory
Active
Wind CZ s.r.o.
⚲ Ústí nad Labem 📅 Since Jun 2023 ID: VPK-00009
41,200 kWh
⚡ Producing Tier 2 Wind

Selectable Listing

Admin — Jan Novák
System administrator · Full access
User — Petra Kovářová
Community member · Read & write
S
Supplier — Solárna Jihlava
Energy supplier · Vysočina

Single-Line Invoices

INV-2026-0142
Paid
24,800 CZK
!
INV-2026-0143
Overdue
18,350 CZK
INV-2026-0144
Paid
9,620 CZK
INV-2026-0145
Draft
5,100 CZK
INV-2026-0146
Sent
31,400 CZK

Compact Metering Points

FVE Střešovice — 42 kWp
Last: 14:32
● Online
Byt Praha 3 — 8.2 kW
Last: 14:30
● Online
🌀
Větrná turbína Karlov — 120 kW
Last: 14:28
↻ Syncing
🔋
Baterie Hostivař — 25 kWh
Last: 12:05
○ Offline

Listing with Details Panel

FVE Pardubice — Rooftop Array
Solar photovoltaic · 68 kWp installed
6,480 kWh
EAN
859182400107284561
Capacity
68 kWp (DC) / 60 kW (AC)
Billing Period
01.01.2026 – 31.01.2026
Last Reading
16.02.2026, 14:22 CET
Meter Type
Landis+Gyr E450 (smart meter)
Grid Operator
ČEZ Distribuce, a.s.
Administrativní budova CTPark
Commercial consumer · 145 kW peak demand
11,920 kWh
Komunita Zábřeh — prosumer
Energy community · 12 members
4,150 kWh
EAN
859182400209385102
Members
12 active / 2 pending
Billing Period
01.02.2026 – 28.02.2026
Last Reading
16.02.2026, 13:55 CET
Net Balance
+1,240 kWh (surplus)

Listing with Inline Progress

Data import — January 2026
Complete
100%
Data import — February 2026
In progress
64%
Capacity utilization — FVE Brno
87% of peak
87%
🔋
Battery storage — Hostivař
23% charged
23%

Listing with Drag Handles

1
Self-consumption Priority
100%
2
Community Sharing Pool
75%
3
Battery Storage Charge
60%
4
Grid Export Surplus
40%

Status Variant Gallery

--admin — System administrator
--accountant — Finance & billing
--sales — Sales representative
--superadmin — Super administrator
--user — Standard user
S
--supplier — Energy supplier
C
--customer — Energy customer
--combined — Supplier + customer (gradient)
--confirmed — Confirmed / paid
--pending — Awaiting action

Empty State

🔍
No Results Found
Try adjusting your search or filter criteria to find what you're looking for.

Listing with Pagination

FVE Liberec — 32 kWp
2,840 kWh
Bytový dům Plzeň
1,650 kWh
Komunita Jihlava — prosumer
5,100 kWh

Responsive Listing

Add Listing--responsive to stack content vertically on mobile. Actions become a full-width toolbar. Resize your browser to see the effect.

S
Solar Park Moravsko
Active
Moravská Energetika s.r.o.
⚲ Brno ⚡ 68 kWp ID: SPM-00142
12,840 kWh
C
Bytový dům Vinohrady
Pending
SVJ Vinohrady 1842
⚲ Prague 2 ⚡ 8.2 kW
3,210 kWh
Komunita Zábřeh
Active Combined
KEO Energy a.s.
⚲ Olomouc ⚡ 120 kW 12 members
8,460 kWh

Compact Responsive Listing

Combine Listing--compact with Listing--responsive for a space-efficient mobile layout. Content stays inline on one row with the name truncated via ellipsis, while actions form a compact footer. Resize to see.

INV-2026-0142
Paid
24,800 CZK
!
INV-2026-0143
Overdue
18,350 CZK
INV-2026-0144
Paid
9,620 CZK
INV-2026-0145
Draft
5,100 CZK

Listing with Info Lines

Use Listing__info-primary and Listing__info-secondary for two-line item descriptions with emphasis hierarchy.

S
Solar Park Moravsko
Moravská Energetika s.r.o. · Brno
12,840 kWh
C
Obec Šitbořice · Member since 2024
4,210 kWh

Responsive Listing Usage

<!-- Full responsive listing with actions -->
<div class="Listing Listing--responsive">
  <div class="Listing__item">
    <div class="Listing__content Listing__content--single-line">
      <div class="Listing__main">
        <div class="Listing__status Listing__status--supplier">S</div>
        <div class="Listing__info">
          <div class="Listing__name">Item Name</div>
        </div>
      </div>
      <div class="Listing__amount">1,234 kWh</div>
      <div class="Listing__actions">
        <a class="Listing__action Listing__action--primary">View</a>
        <a class="Listing__action Listing__action--secondary">Edit</a>
      </div>
    </div>
  </div>
</div>

<!-- Compact + responsive combo -->
<div class="Listing Listing--compact Listing--responsive">
  ...
</div>

Advanced Tables

Extended table features with row states, cell formatting, inline badges, and sortable headers.

Table with Row States & Badges

Name ↑ Type Status Production Balance
Community Alpha Supplier Active +1,245 kWh 24,500 CZK
Community Beta Customer Active 890 kWh 12,300 CZK
Community Gamma Supplier Pending 0 kWh -3,200 CZK
Community Delta Customer Error 0 kWh -1,800 CZK

Small & Hoverable Table

Date Code Amount Actions
2026-02-15 INV-0042 4,520 CZK
2026-02-10 INV-0041 2,180 CZK
2026-02-01 INV-0040 8,900 CZK

Responsive Table

Add Table--responsive to convert rows into stacked cards on mobile. Each <td> uses data-label to show the column header. Resize your browser to see the effect.

Name Type Status Production Actions
Solar Park Moravsko Supplier Active +1,245 kWh
Bytový dům Vinohrady Customer Pending 890 kWh
Komunita Zábřeh Supplier Error 0 kWh

Usage Example

<!-- Standard table with row states -->
<table class="Table Table--small Table--hoverable">
  <thead>
    <tr class="Table__header">
      <th class="Table__header--sortable">Name</th>
    </tr>
  </thead>
  <tbody>
    <tr class="Table__row Table__row--success">
      <td class="Table__cell--positive">+100</td>
    </tr>
  </tbody>
</table>

<!-- Responsive table (cards on mobile) -->
<table class="Table Table--responsive">
  <thead>
    <tr class="Table__header">
      <th>Name</th>
      <th>Status</th>
      <th>Amount</th>
      <th class="Table__cell--actions">Actions</th>
    </tr>
  </thead>
  <tbody>
    <tr class="Table__row">
      <td data-label="Name">Item Name</td>
      <td data-label="Status">Active</td>
      <td data-label="Amount">1,234 CZK</td>
      <td class="Table__cell--actions">
        <button class="Button Button--primary">View</button>
      </td>
    </tr>
  </tbody>
</table>

Advanced Cards

Card variants with metric displays, accent backgrounds, and combined content.

Card with Metric Grid

Energy Metrics
Production
1,245 kWh
+12% vs last month
Consumption
987 kWh
-3% vs last month
Shared
258 kWh
+8% vs last month

Accent Card Variants

Accent Card

Card with solid accent background color for emphasis.

Transparent Accent

Card with transparent accent background for subtle highlighting.

No Data State

Historical Data
📊

No data available for the selected period.

Filter Panel

Sidebar filter panels for data views with toggles, groups, and search.

Filter Panel (Static Preview)

☰ Filters
View Mode
Community Groups
Solar Community A
12 members · Prague
Wind Farm B
8 members · Brno
Mixed Energy C
15 members · Ostrava

Combined Patterns

Real-world layout combinations showing how components work together.

Dashboard Overview

Production
1,245 kWh
Consumption
987 kWh
Shared
258 kWh
S
Solar Park Alpha
Active
4,520 kWh
C
Residence Beta
Pending
2,180 kWh

Card with Box Inside

Community Overview
Members
24
Active
21
Recent Activity
New member "Solar Farm D" joined the community.
Monthly allocation recalculated for February 2026.

Alert + Table Combination

Notice: 2 partners have overdue invoices requiring attention.
Partner Invoice Amount Status
Community Delta INV-0038 -1,800 CZK Overdue
Community Epsilon INV-0039 3,200 CZK Pending

Energy Dashboard Mockup

A full dashboard page layout combining Toolbar, KPI cards, tabs, data table, and pagination into a realistic energy management view.

Complete Dashboard

⚡ Energy Dashboard Live
Production
3,842 kWh
Consumption
2,716 kWh
Sharing
1,126 kWh
Revenue
18,450 CZK
Metering Point ↑ Type Community Status Production Consumption Balance
CZ-MP-001-SOLAR Supplier Solar Community Prague Active +1,245 kWh 312 kWh +8,420 CZK
CZ-MP-002-ROOF Supplier Rooftop Collective Brno Active +987 kWh 154 kWh +5,930 CZK
CZ-MP-003-WIND Customer Wind Farm Ostrava Pending 0 kWh 1,890 kWh -3,200 CZK
CZ-MP-004-BATT Customer Solar Community Prague Active 0 kWh 360 kWh 2,100 CZK
CZ-MP-005-GRID Grid Rooftop Collective Brno Error 0 kWh 0 kWh -1,800 CZK

Settings Page Mockup

A settings page layout combining navigation, avatar, form inputs, checkbox preferences, and action buttons.

Account Settings

Profile Information
Notification Preferences
JN
Jan Novak
Community Administrator
Member since Mar 2024
Communities 3
Metering Points 7

Onboarding Wizard

A step-by-step wizard for onboarding new energy community members, showing step indicators, progress, and form content.

Community Registration Wizard

Community Info
2
Energy Sources
3
Members
4
Confirmation
Overall Progress 50%
☀ Step 2: Configure Energy Sources

Register the solar panels and other generation assets for your energy community.

Tip: You can add more energy sources after completing the wizard from the Dashboard settings.
Step 2 of 4

Progress Bars

Progress bars visualize completion, data import status, and energy usage levels.

Basic Progress Levels

25% Complete
50% Complete
75% Complete
100% Complete

Color Variants

Success
Warning
Danger
Info
Brand Primary

Striped Variant

Progress Bars with Labels

72%
48%
91%

Real-World: Data Import Progress

⚡ Data Import Progress
Meter Readings — Solar Park Alpha 100%
Consumption Data — Residence Beta 68%
Billing Records — Community Gamma 34%
Grid Export Logs — Wind Farm Delta 12%

Usage Example

<div class="ProgressBar">
  <div class="ProgressBar__fill ProgressBar__fill--success" style="width: 72%;">
    <span class="ProgressBar__label">72%</span>
  </div>
</div>

<!-- Striped variant -->
<div class="ProgressBar">
  <div class="ProgressBar__fill ProgressBar__fill--warning ProgressBar__fill--striped"
       style="width: 45%;"></div>
</div>

Loading Skeletons

Skeleton placeholders indicate loading states while content is being fetched.

Text Skeleton Lines

Circle Skeleton (Avatar Placeholder)

Small
Medium
Large

Rectangle Skeleton (Card Placeholder)

Loading Card Example

Loading List Example

Usage Example

<!-- Text lines -->
<div class="Skeleton Skeleton--text" style="width: 90%;"></div>
<div class="Skeleton Skeleton--text" style="width: 75%;"></div>

<!-- Circle (avatar placeholder) -->
<div class="Skeleton Skeleton--circle" style="width: 3rem; height: 3rem;"></div>

<!-- Rectangle (card placeholder) -->
<div class="Skeleton Skeleton--rect" style="width: 100%; height: 120px;"></div>

KPI Dashboard Cards

Specialized cards for key performance indicators with trend arrows and compact layouts.

KPI Card Row

Monthly Revenue
124,500 CZK
▲ +12%
Active Sites
47
▼ -2%
Energy Shared
8,640 kWh
▲ +24%
Cost Savings
31,200 CZK
▲ +8%

Compact KPI Cards

Peak Output
12.4 kW
▲ +5%
Grid Feed-in
3,210 kWh
▼ -7%
Self-Consumption
78%
▲ +3%
CO₂ Offset
2.4 t
▲ +15%

KPI Card with Sparkline Area

Production This Week
1,845 kWh
▲ +18% vs last week
Consumption This Week
1,320 kWh
▼ -4% vs last week
Net Balance
+525 kWh
▲ +32% vs last week

Usage Example

<div class="KPICard">
  <div class="KPICard__label">Monthly Revenue</div>
  <div class="KPICard__value">124,500 CZK</div>
  <div class="KPICard__trend KPICard__trend--up">&#9650; +12%</div>
</div>

<!-- Compact variant -->
<div class="KPICard KPICard--compact">...</div>

<!-- With sparkline area -->
<div class="KPICard">
  ...
  <div class="KPICard__sparkline">
    <svg viewBox="0 0 120 32">...</svg>
  </div>
</div>

Toolbars

Toolbars group actions, search, and controls in a horizontal bar above content areas.

Basic Toolbar

Toolbar with Search, Filters & Actions

Toolbar with Tabs Below

Energy Overview

Content for the selected tab is displayed here. The toolbar provides global actions while tabs switch between data views.

Real-World: Data Management Toolbar

Usage Example

<div class="Toolbar">
  <div class="Toolbar__group">
    <button class="Button Button--primary Button--small">Add</button>
    <button class="Button Button--outlined Button--primary Button--small">Refresh</button>
  </div>
  <div class="Toolbar__separator"></div>
  <div class="Toolbar__group">
    <button class="Button Button--secondary Button--small">Export</button>
  </div>
</div>

Dark vs Light Comparison

Components support both dark (default) and light variants. Theming is driven by CSS custom properties defined on :root, making it straightforward to override brand colors or switch palettes per application.

Box — Dark vs Light

Default (Dark)
Energy Sources
Solar array — 12.5 kWp capacity
Wind turbine — 3 kW rated power
Light Variant
Energy Sources
Solar array — 12.5 kWp capacity
Wind turbine — 3 kW rated power

Card — Default vs Accent Variants

Default Card
Community Stats

Default dark background with subtle border. Ideal for dashboards and data-heavy views.

Accent Background
Community Stats

Solid accent background for emphasis and featured sections. High visual weight.

Accent Transparent
Community Stats

Translucent accent background for subtle highlighting without overpowering adjacent content.

Theming via CSS Custom Properties

/* Override brand colors per-application */
:root {
  --theme-brand-primary: hsla(33, 100%, 61%, 1);    /* Wattlink orange */
  --theme-brand-secondary: hsla(169, 47%, 49%, 1);  /* Wattlink teal   */
  --theme-brand-dark: hsla(240, 75%, 13%, 1);       /* Deep navy       */
  --theme-brand-accent: hsla(240, 93%, 29%, 1);     /* Royal blue      */
}

/* All components inherit from these properties automatically.
   Switch .Box--light for a white-background variant. */

Pricing Plans

Pricing card patterns for energy service tiers with feature comparison and call-to-action buttons.

Three-Tier Pricing

Basic
990 CZK/month
Billed annually at 11,880 CZK
Up to 5 metering points
Daily data granularity
Email support (48h SLA)
6-month data retention
API access
Custom reporting
Enterprise
6,990 CZK/month
Billed annually at 83,880 CZK
Unlimited metering points
15-minute interval data
Dedicated support (1h SLA)
Unlimited data retention
Full API + Webhooks
White-label & SSO

Activity Timeline

Chronological activity feed for energy community events, combining timeline markers with badges and avatars.

Energy Community Feed

Today, 14:32
New member joined the community
MK Martin Kovarik registered residence at Vinohrady, Prague. Verified
Today, 09:00
Monthly report generated
January 2026 energy allocation report is ready. Total shared: 12,480 kWh across 34 members. PDF
Yesterday, 16:45
Energy sharing activated
SP Solar Park Dejvice began sharing surplus production with 8 connected households. Active
Yesterday, 10:12
Payment received
Invoice INV-2026-0089 paid by Bytovy dum Karlin. Amount: 18,750 CZK Paid
Feb 14, 08:00
Maintenance scheduled
Planned inverter firmware update for Solar Park Dejvice on Feb 20, 02:00 - 04:00. Expect temporary production interruption. Scheduled
!
Feb 13, 22:15
Meter data sync delayed
RB Metering point RB-0047 at Residence Beta delayed by 3 hours. Auto-retry in progress. Retrying

Team / User Profiles

User profile patterns combining avatars, cards, badges, and listing components for team management views.

Avatar Sizes & Status

JN
Small
PD
Medium
KS
Large
LV
X-Large
JN
PD
KS
+5
Stacked

Profile Cards

JN
Jan Novak
jan.novak@wattlink.cz
Administrator Active
ES
Eva Svobodova
eva.svobodova@wattlink.cz
Manager Active
TD
Tomas Dvorak
tomas.dvorak@wattlink.cz
Technician Away

Team Member List

JN
Jan Novak
Last active: 2 minutes ago
Admin Online
ES
Eva Svobodova
Last active: 15 minutes ago
Manager Online
TD
Tomas Dvorak
Last active: 3 hours ago
Technician Away
LV
Lucie Veselova
Last active: 2 days ago
Viewer Offline
MK
Martin Kovarik
Last active: just now
User Online

Notification Center

Notification panel patterns with categorized items, read/unread states, and quick actions.

Notification Panel

Notifications 6
Grid overload detected
3 min ago
Metering point SP-0012 exceeded threshold at 98.5% capacity. Automatic load reduction initiated.
PD
Payment received
25 min ago
Petr Dvorak paid 8,450 CZK for invoice INV-2026-0091.
MK
New member application
1 hour ago
Martin Kovarik submitted a request to join Solar Community Vinohrady with 2 metering points.
Scheduled maintenance reminder
Yesterday
Inverter firmware update for Solar Park Dejvice on Feb 20, 02:00 - 04:00 CET.
Monthly report ready
2 days ago
January 2026 community energy allocation report has been generated and is available for download.
Sharing allocation completed
3 days ago
February energy sharing quotas have been calculated and distributed to all 34 community members.

Calendar

Full-page month calendar with multi-day event spanning, lane stacking for overlapping events, and inline actions. Server-rendered, no JavaScript required.

Month View with Events

Březen 2026
Po
Út
St
ÄŒt
Pá
So
Ne
23
24
25
26
27
28
1
2
3
4
5
6
7
8
Sprint planning
Energy audit
9
10
11
12
13
14
15
Maintenance window
👁
16
17
18
19
20
21
22
Billing cycle
Team retreat
23
24
25
26
27
28
29
Deadline
EDC data sync
30
31
1
2
3
4
5
Q2 energy contract renewal period

Event Color Variants

Primary (brand orange)
Secondary (brand teal)
Accent (brand navy)
Success (green)
Warning (amber)
Danger (red)
Info (blue)
Purple
Dark (brand dark)

Calendar Filters

Toggle buttons for filtering event types on the calendar. Each filter has a colored dot indicator.

Continuation Markers

Events spanning multiple weeks get split with visual continuation indicators (rounded corners removed on the continuation side).

Continues to next week →
← Continued from previous week
← Full-week span →

Events with Action Buttons

Event with view & edit actions
Event with delete action

Usage (Rails Helper)

<%= calendar_month(
  date: @date,
  events: @events,
  prev_path: my_path(date: @date.prev_month),
  next_path: my_path(date: @date.next_month)
) do |event| %>
  <span class="Calendar__event-title"><%= event.title %></span>
  <div class="Calendar__event-actions">
    <%= link_to icon("eye"), event, class: "Calendar__event-action" %>
    <%= link_to icon("pencil"), edit_event_path(event), class: "Calendar__event-action" %>
  </div>
<% end %>

Events must respond to:
  .starts_on  (Date)
  .ends_on    (Date)
  .color      (optional: "primary" | "secondary" | "accent" | "success" | "warning" | "danger" | "info" | "purple" | "dark")

File Upload

Drag-and-drop file upload area with states for empty, has-file, and current file display.

Empty State (Upload Prompt)

File Selected

📄
vyuctovani-2026-03.pdf

Current File Display

Current file: faktura-2026-02.pdf ⬇ Download

Period Range

Toggle buttons for selecting time period ranges. Active state highlights the selected period.

Period Selector

Usage Example

<div class="PeriodRange__buttons">
  <button class="PeriodRange__btn">Day</button>
  <button class="PeriodRange__btn active">
    <span class="PeriodRange__check">&#10003;</span>
    Week
  </button>
  <button class="PeriodRange__btn">Month</button>
</div>

Component Classes

All components follow BEM naming convention for consistency.

Available Components

  • .Button - Buttons & actions
  • .Badge - Status labels
  • .Alert - Feedback messages
  • .Card - Content containers
  • .Table - Data tables
  • .Form - Form elements
  • .Modal - Dialog overlays
  • .Tabs - Tab navigation
  • .Nav - App navigation
  • .Pagination - Page controls
  • .Icon - Icon containers
  • .StatCard - Metric cards
  • .StatusButton - State buttons
  • .Box - Content boxes
  • .Listing - List items
  • .FilterPanel - Filter sidebar
  • .ProgressBar - Progress indicators
  • .Skeleton - Loading placeholders
  • .KPICard - KPI dashboard cards
  • .Toolbar - Action toolbars
  • .Avatar - User avatars
  • .PricingCard - Pricing tiers
  • .Timeline - Activity feeds
  • .Calendar - Month calendar
  • .CalendarFilter - Calendar event filters
  • .FileUpload - File upload area
  • .PeriodRange - Period selectors

Modifier Pattern

.Button--primary / --secondary / --success / --danger / --warning / --info
.Button--outlined / --small / --large / --rounded

.Badge--success / --warning / --danger / --pill / --small / --large

.Table--transparent / --small / --hoverable / --collapsible
.Table__row--success / --warning / --danger / --highlighted / --grouped
.Table__cell--numeric / --positive / --negative / --code

.Card--accent-bg / --accent-bg-transparent
.Card__metric / __metric-icon / __metric-label / __metric-value

.StatCard--compact / --border-success / --border-warning / --border-danger
.StatusButton--pending / --running / --success / --error

.Icon--circular / --small / --medium / --large / --xlarge
.Icon--production / --consumption / --sharing / --success / --warning

.Box--compact / --supercompact / --light / --accent-bg
.Listing--compact / --responsive / .Listing__action--primary / --secondary / --danger
.Listing__badge--success / --warning / --info / --secondary

.Nav--vertical / .FilterPanel__toggle / .FilterPanel__group

.ProgressBar__fill--success / --warning / --danger / --info / --primary
.ProgressBar__fill--striped / .ProgressBar__label

.Skeleton--text / --circle / --rect

.KPICard--compact / .KPICard__trend--up / --down
.KPICard__sparkline

.Toolbar__group / .Toolbar__separator

.PricingCard / .PricingCard--featured
.Timeline / .Timeline__item / .Timeline__marker
.Avatar / .Avatar--small / --medium / --large / --xlarge

.Calendar / .Calendar__header / __title / __nav / __nav--placeholder
.Calendar__day--outside / --today / --weekend
.Calendar__event--primary / --secondary / --accent / --success / --warning / --danger / --info / --purple / --dark
.Calendar__event--continues-before / --continues-after
.Calendar__event-title / .Calendar__event-actions / .Calendar__event-action
.CalendarFilter__btn--success / --purple / --danger / --dark / --info
.CalendarFilter__dot

.Listing__info-primary / .Listing__info-secondary

.FileUpload__container / --has-file / --drag-over
.FileUpload__upload-button / __upload-icon / __upload-text / __upload-help
.FileUpload__file-info / __file-icon / __file-name / __file-actions
.FileUpload__current-file / __current-label / __current-name / __download-link

.PeriodRange__buttons / .PeriodRange__btn / .PeriodRange__check