INBOX/adhd-friendly-dashboard-variants-v2 (1)/adhd-friendly-colour-variants/smoky-teal-signal/smoky-teal-signal-dashboard.html
2026-08-07 15:50:54 +02:00

588 lines
26 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" data-theme="light">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="color-scheme" content="light dark">
<title>Smoky Teal Signal — Dashboard Demo</title>
<style>
@import url("https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:wght@400;700&family=Lexend:wght@400;500;600;700&display=swap");
:root {
color-scheme: light;
--font-body: "Atkinson Hyperlegible", "Segoe UI", Arial, sans-serif;
--font-ui: "Lexend", "Segoe UI", Arial, sans-serif;
--page: #F6F2F4;
--page-accent: #ECE5E8;
--surface: #FFFEFE;
--surface-alt: #F2ECEF;
--surface-strong: #E1D7DC;
--text: #2F2529;
--muted: #6E5C63;
--border: #D4C8CD;
--primary: #10B3BB;
--primary-hover: #0B99A0;
--on-primary: #FFFFFF;
--secondary: #E4DCE0;
--secondary-hover: #D8CDD2;
--on-secondary: #2F2529;
--accent-1: #7A676F;
--accent-2: #10B3BB;
--accent-3: #E51A22;
--danger: #E51A22;
--danger-soft: #F9E4E5;
--success: #5B827F;
--success-soft: #EAF2F1;
--focus: #8AD9DE;
--shadow-lg: 0 28px 70px rgb(99 77 88 / 14%);
--shadow-md: 0 14px 34px rgb(99 77 88 / 10%);
--shadow-sm: 0 8px 20px rgb(99 77 88 / 7%);
--radius-sm: 0.7rem;
--radius-md: 1rem;
--radius-lg: 1.45rem;
--radius-xl: 1.8rem;
}
html[data-theme="dark"] {
color-scheme: dark;
--page: #0F0C0D;
--page-accent: #171214;
--surface: #1B1618;
--surface-alt: #272023;
--surface-strong: #383034;
--text: #FFFDFD;
--muted: #CBBEC4;
--border: #51464B;
--primary: #22C2CA;
--primary-hover: #10B3BB;
--on-primary: #092729;
--secondary: #433A3E;
--secondary-hover: #584D52;
--on-secondary: #FFFDFD;
--accent-1: #9B8A91;
--accent-2: #22C2CA;
--accent-3: #F06066;
--danger: #F06066;
--danger-soft: #41272A;
--success: #8CB1AE;
--success-soft: #283330;
--focus: #A8E8EB;
--shadow-lg: 0 38px 96px rgb(0 0 0 / 58%);
--shadow-md: 0 18px 44px rgb(0 0 0 / 34%);
--shadow-sm: 0 10px 24px rgb(0 0 0 / 22%);
}
* { box-sizing: border-box; }
html, body {
margin: 0;
min-height: 100%;
font-family: var(--font-body);
font-size: 18px;
line-height: 1.6;
color: var(--text);
background:
radial-gradient(circle at 10% 10%, color-mix(in srgb, var(--accent-1) 14%, transparent), transparent 30%),
radial-gradient(circle at 88% 18%, color-mix(in srgb, var(--accent-2) 10%, transparent), transparent 26%),
linear-gradient(145deg, var(--page), var(--page-accent));
}
body { min-height: 100vh; }
button, input, select { font: inherit; }
a { color: inherit; text-decoration: none; }
:focus-visible { outline: 3px solid var(--focus); outline-offset: 3px; }
.app { min-height: 100vh; display: grid; grid-template-columns: 280px minmax(0, 1fr); }
.sidebar {
position: sticky; top: 0; height: 100vh; display: flex; flex-direction: column;
gap: 1.4rem; padding: 1.25rem; background: color-mix(in srgb, var(--surface) 88%, transparent);
border-right: 1px solid var(--border); backdrop-filter: blur(12px);
}
.brand {
display: flex; gap: 0.85rem; align-items: center; padding: 0.8rem 0.9rem;
border-radius: var(--radius-md); background: var(--surface-alt); border: 1px solid var(--border);
box-shadow: var(--shadow-sm);
}
.brand-mark {
display: grid; place-items: center; width: 2.6rem; aspect-ratio: 1; border-radius: 0.9rem;
color: var(--primary); background: color-mix(in srgb, var(--primary) 12%, var(--surface));
border: 1px solid color-mix(in srgb, var(--primary) 24%, var(--border));
}
.brand-mark svg { width: 1.35rem; height: 1.35rem; }
.brand-text strong, .brand-text span { display: block; }
.brand-text strong { font-family: var(--font-ui); font-size: 0.98rem; letter-spacing: -0.02em; }
.brand-text span { color: var(--muted); font-size: 0.82rem; }
.nav-group { display: grid; gap: 0.35rem; }
.nav-title {
margin: 0 0 0.2rem; padding: 0 0.85rem; color: var(--muted); font-family: var(--font-ui);
font-size: 0.76rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase;
}
.nav-link {
display: flex; align-items: center; gap: 0.75rem; padding: 0.78rem 0.88rem;
border-radius: var(--radius-sm); color: var(--muted); font-family: var(--font-ui);
font-size: 0.95rem; font-weight: 500; transition: background-color 140ms ease, color 140ms ease;
}
.nav-link svg { width: 1.1rem; height: 1.1rem; flex: 0 0 auto; }
.nav-link:hover { color: var(--text); background: var(--surface-alt); }
.nav-link.active {
color: var(--primary); background: color-mix(in srgb, var(--primary) 10%, var(--surface));
border: 1px solid color-mix(in srgb, var(--primary) 20%, var(--border)); box-shadow: var(--shadow-sm);
}
.sidebar-card {
margin-top: auto; padding: 1rem; background: linear-gradient(145deg, color-mix(in srgb, var(--surface-alt) 96%, transparent), color-mix(in srgb, var(--surface) 96%, transparent));
border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--shadow-sm);
}
.sidebar-card p { margin: 0.35rem 0 0; color: var(--muted); font-size: 0.9rem; }
.sidebar-card strong { display: block; font-family: var(--font-ui); font-size: 1rem; letter-spacing: -0.02em; }
.sidebar-card button {
margin-top: 0.95rem; width: 100%; min-height: 2.8rem; border: 1px solid var(--primary);
border-radius: var(--radius-sm); background: var(--primary); color: var(--on-primary);
font-family: var(--font-ui); font-weight: 700; cursor: pointer;
}
.main { min-width: 0; padding: 1.3rem; }
.topbar {
display: flex; flex-wrap: wrap; justify-content: space-between; gap: 1rem; align-items: center;
margin-bottom: 1.15rem; padding: 1rem 1.1rem; background: color-mix(in srgb, var(--surface) 94%, transparent);
border: 1px solid var(--border); border-radius: var(--radius-xl); box-shadow: var(--shadow-sm); backdrop-filter: blur(10px);
}
.topbar-copy h1 {
margin: 0; font-family: var(--font-ui); font-size: clamp(1.7rem, 3vw, 2.45rem);
line-height: 1.12; letter-spacing: -0.035em;
}
.topbar-copy p { margin: 0.35rem 0 0; color: var(--muted); font-size: 0.95rem; }
.topbar-actions { display: flex; flex-wrap: wrap; gap: 0.7rem; align-items: center; }
.search {
display: flex; align-items: center; gap: 0.55rem; min-width: min(100%, 280px);
padding: 0.7rem 0.85rem; background: var(--surface-alt); border: 1px solid var(--border); border-radius: 999px;
}
.search input { width: 100%; border: 0; background: transparent; color: var(--text); outline: none; }
.search input::placeholder { color: var(--muted); }
.topbar-button, .theme-button {
min-height: 2.7rem; padding: 0.72rem 1rem; border-radius: 999px; border: 1px solid var(--border);
background: var(--surface-alt); color: var(--text); font-family: var(--font-ui); font-weight: 600; cursor: pointer;
}
.topbar-button.primary {
border-color: var(--primary); background: var(--primary); color: var(--on-primary);
box-shadow: 0 10px 22px color-mix(in srgb, var(--primary) 20%, transparent);
}
.dashboard-grid { display: grid; gap: 1rem; grid-template-columns: repeat(12, minmax(0, 1fr)); }
.card {
min-width: 0; padding: 1.1rem; background: color-mix(in srgb, var(--surface) 97%, transparent);
border: 1px solid var(--border); border-radius: var(--radius-xl); box-shadow: var(--shadow-sm);
}
.card-header {
display: flex; justify-content: space-between; gap: 1rem; align-items: start; margin-bottom: 0.95rem;
}
.card-header h2, .card-header h3, .card h3 {
margin: 0; font-family: var(--font-ui); line-height: 1.18; letter-spacing: -0.03em;
}
.card-header p, .card p.card-subtitle { margin: 0.3rem 0 0; color: var(--muted); font-size: 0.9rem; }
.metric-grid {
grid-column: 1 / -1; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1rem;
}
.metric-card {
padding: 1rem; background: linear-gradient(160deg, color-mix(in srgb, var(--surface-alt) 92%, transparent), color-mix(in srgb, var(--surface) 98%, transparent));
border: 1px solid var(--border); border-radius: var(--radius-xl); box-shadow: var(--shadow-sm);
}
.metric-card .label { color: var(--muted); font-family: var(--font-ui); font-size: 0.82rem; font-weight: 600; }
.metric-card .value {
margin-top: 0.4rem; font-family: var(--font-ui); font-size: clamp(1.8rem, 3vw, 2.25rem); line-height: 1.05; letter-spacing: -0.04em;
}
.metric-card .meta {
margin-top: 0.45rem; display: inline-flex; align-items: center; gap: 0.4rem; font-size: 0.84rem; color: var(--muted);
}
.chip {
display: inline-flex; align-items: center; gap: 0.35rem; padding: 0.26rem 0.55rem; border-radius: 999px;
font-family: var(--font-ui); font-size: 0.74rem; font-weight: 600;
}
.chip.success { color: var(--success); background: var(--success-soft); }
.chip.primary { color: var(--primary); background: color-mix(in srgb, var(--primary) 12%, var(--surface)); }
.chip.danger { color: var(--danger); background: var(--danger-soft); }
.overview-card { grid-column: span 8; }
.split-card { grid-column: span 4; }
.chart {
display: grid; grid-template-columns: repeat(7, 1fr); align-items: end; gap: 0.8rem; min-height: 230px; margin-top: 1.2rem;
}
.bar-group { display: grid; gap: 0.55rem; justify-items: center; }
.bar-stack { width: 100%; max-width: 2.2rem; height: 180px; display: flex; align-items: end; }
.bar {
width: 100%; border-radius: 999px 999px 0 0;
background: linear-gradient(180deg, color-mix(in srgb, var(--accent-1) 60%, var(--primary)), var(--primary));
box-shadow: inset 0 1px 0 rgb(255 255 255 / 18%);
}
.bar-label { color: var(--muted); font-size: 0.78rem; }
.progress-list { display: grid; gap: 0.95rem; margin-top: 1rem; }
.progress-item { display: grid; gap: 0.4rem; }
.progress-item strong { font-family: var(--font-ui); font-size: 0.95rem; }
.progress-meta { display: flex; justify-content: space-between; gap: 1rem; color: var(--muted); font-size: 0.82rem; }
.progress-track {
width: 100%; height: 0.65rem; overflow: hidden; background: var(--surface-alt);
border-radius: 999px; border: 1px solid var(--border);
}
.progress-fill {
height: 100%; border-radius: inherit; background: linear-gradient(90deg, var(--primary), var(--accent-1));
}
.tasks-card { grid-column: span 5; }
.activity-card { grid-column: span 7; }
.list { display: grid; gap: 0.75rem; margin-top: 1rem; }
.task {
display: flex; align-items: start; gap: 0.75rem; padding: 0.85rem; background: var(--surface-alt);
border: 1px solid var(--border); border-radius: var(--radius-md);
}
.task input[type="checkbox"] { margin-top: 0.18rem; width: 1rem; height: 1rem; accent-color: var(--primary); }
.task strong { display: block; font-family: var(--font-ui); font-size: 0.95rem; }
.task p { margin: 0.2rem 0 0; color: var(--muted); font-size: 0.85rem; }
.activity-item {
display: flex; justify-content: space-between; gap: 1rem; align-items: start; padding: 0.85rem 0; border-bottom: 1px solid var(--border);
}
.activity-item:last-child { border-bottom: 0; padding-bottom: 0; }
.activity-item strong { display: block; font-family: var(--font-ui); font-size: 0.95rem; }
.activity-item p { margin: 0.2rem 0 0; color: var(--muted); font-size: 0.85rem; max-width: 46ch; }
.activity-time { white-space: nowrap; color: var(--muted); font-size: 0.8rem; }
.team-card { grid-column: span 4; }
.typography-card { grid-column: span 8; }
.avatars { display: flex; margin-top: 1rem; }
.avatar {
width: 2.6rem; height: 2.6rem; margin-left: -0.45rem; display: grid; place-items: center;
border-radius: 999px; border: 2px solid var(--surface); color: var(--on-primary);
font-family: var(--font-ui); font-size: 0.82rem; font-weight: 700;
background: linear-gradient(145deg, var(--primary), var(--accent-1));
}
.avatar:first-child { margin-left: 0; }
.sample-card {
margin-top: 1rem; padding: 1.1rem; background: linear-gradient(160deg, color-mix(in srgb, var(--surface-alt) 92%, transparent), color-mix(in srgb, var(--surface) 98%, transparent));
border: 1px solid var(--border); border-radius: var(--radius-lg);
}
.sample-card__eyebrow {
margin: 0 0 0.45rem; color: var(--primary); font-family: var(--font-ui);
font-size: 0.76rem; font-weight: 700; letter-spacing: 0.09em; text-transform: uppercase;
}
.sample-card h3 {
margin: 0; font-family: var(--font-ui); font-size: 1.35rem; line-height: 1.18; letter-spacing: -0.03em;
}
.sample-card__subheading {
margin: 0.42rem 0 0; color: var(--muted); font-family: var(--font-ui); font-size: 0.96rem; font-weight: 500;
}
.sample-card__body {
margin: 0.9rem 0 0; color: var(--text); font-family: var(--font-body); font-size: 1rem; line-height: 1.68; max-width: 64ch;
}
@media (max-width: 1180px) {
.metric-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.overview-card, .split-card, .tasks-card, .activity-card, .team-card, .typography-card { grid-column: 1 / -1; }
}
@media (max-width: 960px) {
.app { grid-template-columns: 1fr; }
.sidebar { position: static; height: auto; }
.main { padding-top: 0; }
}
@media (max-width: 720px) {
html { font-size: 17px; }
.metric-grid { grid-template-columns: 1fr; }
.topbar { padding: 0.95rem; }
.search { min-width: 100%; }
.chart { gap: 0.45rem; }
.bar-stack { max-width: 1.5rem; }
.sample-card h3 { font-size: 1.2rem; }
}
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: .01ms !important;
animation-iteration-count: 1 !important;
transition-duration: .01ms !important;
scroll-behavior: auto !important;
}
}
</style>
</head>
<body>
<div class="app">
<aside class="sidebar">
<div class="brand">
<div class="brand-mark" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none">
<path d="M5 15.5 12 4l7 11.5-7 4.5-7-4.5Z" stroke="currentColor" stroke-width="1.7"></path>
<circle cx="12" cy="12" r="2.2" fill="currentColor"></circle>
</svg>
</div>
<div class="brand-text">
<strong>Signal Panel</strong>
<span>Dashboard system</span>
</div>
</div>
<nav aria-label="Primary navigation">
<div class="nav-group">
<p class="nav-title">Workspace</p>
<a class="nav-link active" href="#"><svg viewBox="0 0 24 24" fill="none"><path d="M3 10.5 12 4l9 6.5V20H3v-9.5Z" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"></path></svg>Overview</a>
<a class="nav-link" href="#"><svg viewBox="0 0 24 24" fill="none"><rect x="4" y="5" width="16" height="14" rx="2" stroke="currentColor" stroke-width="1.8"></rect><path d="M8 9h8M8 13h5" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"></path></svg>Projects</a>
<a class="nav-link" href="#"><svg viewBox="0 0 24 24" fill="none"><path d="M8 7h8M8 12h8M8 17h8" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"></path><circle cx="5" cy="7" r="1" fill="currentColor"></circle><circle cx="5" cy="12" r="1" fill="currentColor"></circle><circle cx="5" cy="17" r="1" fill="currentColor"></circle></svg>Tasks</a>
<a class="nav-link" href="#"><svg viewBox="0 0 24 24" fill="none"><path d="M5 19V9m7 10V5m7 14v-7" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"></path></svg>Reports</a>
</div>
<div class="nav-group" style="margin-top: 1rem;">
<p class="nav-title">Library</p>
<a class="nav-link" href="#"><svg viewBox="0 0 24 24" fill="none"><path d="M7 4h10a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H7V4Z" stroke="currentColor" stroke-width="1.8"></path><path d="M7 4a2 2 0 0 0-2 2v12a2 2 0 0 1 2-2h10" stroke="currentColor" stroke-width="1.8"></path></svg>Style guide</a>
<a class="nav-link" href="#"><svg viewBox="0 0 24 24" fill="none"><circle cx="12" cy="8" r="4" stroke="currentColor" stroke-width="1.8"></circle><path d="M4 20a8 8 0 0 1 16 0" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"></path></svg>Team</a>
</div>
</nav>
<div class="sidebar-card">
<strong>Design note</strong>
<p>
The smoky mauve foundation keeps the interface calm, teal shows the
main action, and red appears only where real urgency or risk exists.
</p>
<button type="button">Create report</button>
</div>
</aside>
<main class="main">
<header class="topbar">
<div class="topbar-copy">
<h1>Dashboard overview</h1>
<p>A modern application example using the Smoky Teal Signal system.</p>
</div>
<div class="topbar-actions">
<label class="search" aria-label="Search">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" aria-hidden="true">
<circle cx="11" cy="11" r="7" stroke="currentColor" stroke-width="1.8"></circle>
<path d="m20 20-3.5-3.5" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"></path>
</svg>
<input type="search" placeholder="Search projects, tasks or notes">
</label>
<button class="theme-button" id="theme-toggle" type="button">Toggle theme</button>
<button class="topbar-button primary" type="button">New workspace</button>
</div>
</header>
<section class="metric-grid">
<article class="metric-card">
<span class="label">Active projects</span>
<div class="value">12</div>
<div class="meta"><span class="chip primary">+2 this week</span></div>
</article>
<article class="metric-card">
<span class="label">Tasks completed</span>
<div class="value">84%</div>
<div class="meta"><span class="chip success">On track</span></div>
</article>
<article class="metric-card">
<span class="label">Alerts waiting</span>
<div class="value">3</div>
<div class="meta"><span class="chip danger">Needs review</span></div>
</article>
<article class="metric-card">
<span class="label">Focus hours</span>
<div class="value">26.4</div>
<div class="meta">Compared with 22.8 last week</div>
</article>
</section>
<section class="dashboard-grid" style="margin-top: 1rem;">
<article class="card overview-card">
<div class="card-header">
<div>
<h2>Weekly progress</h2>
<p>Testing surfaces, chart accents and typography hierarchy.</p>
</div>
<span class="chip primary">Updated today</span>
</div>
<div class="chart" aria-label="Weekly progress chart">
<div class="bar-group"><div class="bar-stack"><div class="bar" style="height: 54%;"></div></div><span class="bar-label">Mon</span></div>
<div class="bar-group"><div class="bar-stack"><div class="bar" style="height: 72%;"></div></div><span class="bar-label">Tue</span></div>
<div class="bar-group"><div class="bar-stack"><div class="bar" style="height: 63%;"></div></div><span class="bar-label">Wed</span></div>
<div class="bar-group"><div class="bar-stack"><div class="bar" style="height: 81%;"></div></div><span class="bar-label">Thu</span></div>
<div class="bar-group"><div class="bar-stack"><div class="bar" style="height: 68%;"></div></div><span class="bar-label">Fri</span></div>
<div class="bar-group"><div class="bar-stack"><div class="bar" style="height: 44%;"></div></div><span class="bar-label">Sat</span></div>
<div class="bar-group"><div class="bar-stack"><div class="bar" style="height: 58%;"></div></div><span class="bar-label">Sun</span></div>
</div>
</article>
<article class="card split-card">
<div class="card-header">
<div>
<h3>Project status</h3>
<p>Simple progress indicators</p>
</div>
</div>
<div class="progress-list">
<div class="progress-item">
<div class="progress-meta"><strong>Website refresh</strong><span>72%</span></div>
<div class="progress-track"><div class="progress-fill" style="width:72%"></div></div>
</div>
<div class="progress-item">
<div class="progress-meta"><strong>Volunteer onboarding</strong><span>48%</span></div>
<div class="progress-track"><div class="progress-fill" style="width:48%"></div></div>
</div>
<div class="progress-item">
<div class="progress-meta"><strong>Event planning</strong><span>86%</span></div>
<div class="progress-track"><div class="progress-fill" style="width:86%"></div></div>
</div>
</div>
</article>
<article class="card tasks-card">
<div class="card-header">
<div>
<h3>Todays priorities</h3>
<p>One section for focused next steps</p>
</div>
<span class="chip primary">3 urgent</span>
</div>
<div class="list">
<label class="task">
<input type="checkbox">
<span>
<strong>Review dashboard copy</strong>
<p>Check hierarchy, clarity and whether the teal focus remains clear.</p>
</span>
</label>
<label class="task">
<input type="checkbox" checked>
<span>
<strong>Test error states</strong>
<p>Make sure the red alert colour stays limited to meaningful moments.</p>
</span>
</label>
<label class="task">
<input type="checkbox">
<span>
<strong>Refine spacing</strong>
<p>Use layout rhythm to support focus rather than adding more colour.</p>
</span>
</label>
</div>
</article>
<article class="card activity-card">
<div class="card-header">
<div>
<h3>Recent activity</h3>
<p>Readable event feed for longer body text</p>
</div>
</div>
<div class="list" style="gap: 0;">
<div class="activity-item">
<div>
<strong>Palette mapped</strong>
<p>The four source colours were converted into a balanced interface system with smoky neutrals, teal actions and restrained signal red.</p>
</div>
<span class="activity-time">10 min ago</span>
</div>
<div class="activity-item">
<div>
<strong>Accessibility review</strong>
<p>Contrast, focus states and readable surface layering were checked in both light and dark mode.</p>
</div>
<span class="activity-time">45 min ago</span>
</div>
<div class="activity-item">
<div>
<strong>Typography sample approved</strong>
<p>Lexend and Atkinson Hyperlegible remain the pairing for interface structure and reading text.</p>
</div>
<span class="activity-time">2 h ago</span>
</div>
</div>
</article>
<article class="card team-card">
<div class="card-header">
<div>
<h3>Team snapshot</h3>
<p>Compact people module</p>
</div>
</div>
<div class="avatars" aria-label="Team members">
<div class="avatar">AJ</div>
<div class="avatar">PM</div>
<div class="avatar">KM</div>
<div class="avatar">LV</div>
</div>
<p class="card-subtitle" style="margin-top: 1rem;">
Four collaborators currently active in this workspace.
</p>
</article>
<article class="card typography-card">
<div class="card-header">
<div>
<h3>Typography sample card</h3>
<p>To test the dashboard with headings, subheadings and paragraph text.</p>
</div>
</div>
<article class="sample-card" aria-labelledby="sample-heading">
<p class="sample-card__eyebrow">Typography sample</p>
<h3 id="sample-heading">A modern high-clarity dashboard card heading</h3>
<p class="sample-card__subheading">
A concise subheading shows how Lexend behaves within the smoky neutral and teal interface.
</p>
<p class="sample-card__body">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere,
neque vitae facilisis luctus, justo sapien posuere lorem, sed cursus mauris
erat vel sem. Donec vitae lectus at mi tincidunt suscipit. Suspendisse
potenti. Sed porttitor, libero ac faucibus suscipit, mauris turpis pharetra
quam, ac consequat nisl ligula non justo.
</p>
</article>
</article>
</section>
</main>
</div>
<script>
const root = document.documentElement;
const themeToggle = document.getElementById("theme-toggle");
const storageKey = "smoky-teal-signal-dashboard-theme";
const setTheme = (theme) => {
root.dataset.theme = theme;
localStorage.setItem(storageKey, theme);
themeToggle.textContent = theme === "dark" ? "Use light mode" : "Use dark mode";
};
const storedTheme = localStorage.getItem(storageKey);
const preferredTheme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
setTheme(storedTheme || preferredTheme);
themeToggle.addEventListener("click", () => {
setTheme(root.dataset.theme === "dark" ? "light" : "dark");
});
</script>
</body>
</html>