feat: modernize Lumière sidebar and navbar styling
Build and Deploy Verso / deploy (push) Successful in 14m36s

- Navbar: teal-to-blue gradient accent stripe, soft shadow replacing
  hard border, pill-shaped hover on nav links
- New Project button: gradient teal fill, elevated shadow on hover
- Filter buttons: pill shape, solid teal active state, teal tint hover
- Tags section: uppercase teal section header, refined tag items
- Account/help icons: circular buttons with teal hover ring and glow
- Theme toggle: teal selected indicator
- Verso logo: subtle top separator with hover opacity transition

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
claude
2026-06-11 11:02:36 +00:00
parent 13577693f2
commit 10a17c5443
@@ -1,18 +1,258 @@
// Verso Lumière — card-based project dashboard theme.
// Verso Lumière — modern card-based project dashboard theme.
//
// The outer element carries both project-ds-nav-page (for sidebar/navbar CSS)
// and project-list-lumiere (our hook). We only override what differs from the
// classic light theme: the content area background and the card grid layout.
// The outer element carries both project-ds-nav-page + website-redesign
// (for sidebar/navbar CSS) and project-list-lumiere (our styling hook).
// Everything here is additive or override-only — zero impact on Classic themes.
// ── Brand colours ──────────────────────────────────────────────────────────
$lum-teal: #2a9d8f;
$lum-teal-dark: #21867a;
$lum-blue: #3d7ebf;
$lum-text: #1a2e3b;
$lum-text-sub: #64748b;
$lum-text-muted: #94a3b8;
$lum-bg: #f0f4f8;
$lum-border: #e2eaf2;
.project-list-lumiere {
// ── Content-area background ─────────────────────────────────────────────
// The classic theme uses --ds-nav-content-bg-secondary (a light grey).
// Lumière uses a cooler, airier blue-grey.
.project-ds-nav-content {
background-color: #f0f4f8;
// ══════════════════════════════════════════════════════════════════════════
// NAVBAR
// ══════════════════════════════════════════════════════════════════════════
.navbar-default {
// Lift the hard border; replace with soft shadow
border-bottom: none !important;
box-shadow: 0 1px 0 rgba(0, 0, 0, 0.06), 0 2px 8px rgba(0, 0, 0, 0.04);
background-color: #ffffff !important;
// Teal-to-blue gradient accent stripe at the very top
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: linear-gradient(90deg, $lum-teal 0%, $lum-blue 100%);
z-index: 10;
}
// ── Header ──────────────────────────────────────────────────────────────
// Nav link pill hover
.navbar-nav > li > .nav-link,
.navbar-nav > li > .dropdown-toggle {
border-color: transparent !important;
border-radius: 20px;
transition:
background-color 0.15s ease,
color 0.15s ease;
&:hover,
&:focus,
&.show {
background-color: rgba($lum-teal, 0.08) !important;
color: $lum-teal !important;
border-color: transparent !important;
}
}
// The instance title (e.g. "Verso V0.185 Alpha")
.navbar-title {
color: $lum-text !important;
font-weight: 600;
}
}
// ══════════════════════════════════════════════════════════════════════════
// SIDEBAR — shell
// ══════════════════════════════════════════════════════════════════════════
.project-list-sidebar-wrapper-react {
background: #ffffff !important;
border-right: 1px solid $lum-border;
}
// ══════════════════════════════════════════════════════════════════════════
// SIDEBAR — New Project button
// ══════════════════════════════════════════════════════════════════════════
.new-project-dropdown {
padding-bottom: 0.75rem;
.new-project-button.btn {
width: 100%;
background: linear-gradient(135deg, $lum-teal 0%, $lum-blue 100%) !important;
border: none !important;
color: #ffffff !important;
font-weight: 600;
border-radius: 10px !important;
box-shadow: 0 2px 8px rgba($lum-teal, 0.25);
transition:
box-shadow 0.18s ease,
filter 0.18s ease;
&:hover,
&:focus {
filter: brightness(1.08);
box-shadow: 0 4px 14px rgba($lum-teal, 0.38) !important;
color: #ffffff !important;
}
// Caret color
&::after {
border-top-color: rgba(255, 255, 255, 0.8);
}
}
}
// ══════════════════════════════════════════════════════════════════════════
// SIDEBAR — filter list
// ══════════════════════════════════════════════════════════════════════════
.project-list-wrapper ul.project-list-filters {
> li > button {
border-radius: 8px;
padding: 0.45rem 0.75rem;
font-size: 0.875rem;
font-weight: 500;
color: $lum-text-sub;
transition:
background-color 0.15s ease,
color 0.15s ease;
}
> li:hover button {
background-color: rgba($lum-teal, 0.07) !important;
color: $lum-teal;
}
> li.active button {
background: $lum-teal !important;
color: #ffffff !important;
font-weight: 600;
}
// Tags section header
.dropdown-header {
font-size: 0.7rem;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
color: $lum-teal !important;
padding: 0.85rem 0.75rem 0.35rem;
}
// Individual tag items
> li.tag {
button.tag-name {
border-radius: 8px;
font-size: 0.83rem;
color: $lum-text-sub;
display: flex;
align-items: center;
gap: 0.45rem;
&:hover {
color: $lum-teal;
}
}
&.active button.tag-name {
color: #ffffff !important;
// The colored dot inherits white from the active button — keep it visible
.badge {
opacity: 0.9;
}
}
// Overflow "..." menu button
.tag-menu button.dropdown-toggle {
border-radius: 50%;
transition: background-color 0.15s ease;
&:hover,
&:active,
&[aria-expanded='true'] {
background-color: rgba($lum-teal, 0.1) !important;
color: $lum-teal;
}
}
}
hr {
border-color: $lum-border;
}
}
// ══════════════════════════════════════════════════════════════════════════
// SIDEBAR — lower section (help / account icons + Verso logo)
// ══════════════════════════════════════════════════════════════════════════
.ds-nav-sidebar-lower {
border-top-color: $lum-border !important;
padding-top: 0.75rem;
}
.ds-nav-icon-dropdown {
.dropdown-toggle {
border-radius: 50% !important;
color: $lum-text-sub !important;
transition:
background-color 0.15s ease,
color 0.15s ease,
box-shadow 0.15s ease;
&:hover {
background-color: rgba($lum-teal, 0.09) !important;
color: $lum-teal !important;
box-shadow: 0 0 0 3px rgba($lum-teal, 0.12);
}
&.show {
background-color: rgba($lum-teal, 0.15) !important;
color: $lum-teal !important;
box-shadow: 0 0 0 3px rgba($lum-teal, 0.18);
}
}
}
// Verso wordmark at the very bottom — subtle separator + gentle fade
.ds-nav-verso-logo {
border-top: 1px solid $lum-border;
padding-top: 0.6rem;
margin-top: 0.25rem;
opacity: 0.7;
transition: opacity 0.15s ease;
&:hover {
opacity: 1;
}
}
// Theme toggle: teal selected indicator
.theme-toggle-radios {
background-color: rgba($lum-teal, 0.07);
}
.theme-toggle-radio input:checked + label {
background-color: $lum-teal !important;
color: #ffffff;
.material-symbols {
color: #ffffff;
}
}
// ══════════════════════════════════════════════════════════════════════════
// MAIN CONTENT AREA
// ══════════════════════════════════════════════════════════════════════════
.project-ds-nav-content {
background-color: $lum-bg;
}
// ── Page header ────────────────────────────────────────────────────────────
.lumiere-header {
display: flex;
@@ -31,12 +271,11 @@
flex-wrap: wrap;
}
// Override ProjectListTitle styling for the Lumière serif look
.lumiere-title {
font-family: Georgia, 'Times New Roman', 'DejaVu Serif', serif !important;
font-size: 2rem !important;
font-weight: 700 !important;
color: #1a2e3b !important;
color: $lum-text !important;
line-height: 1.15 !important;
margin: 0 !important;
}
@@ -44,12 +283,12 @@
// ── Empty state ─────────────────────────────────────────────────────────
.lumiere-empty {
color: #64748b;
color: $lum-text-sub;
font-size: 0.95rem;
margin-top: 2rem;
}
// ── Card grid ───────────────────────────────────────────────────────────
// ── Card grid ─────────────────────────────────────────────────────────────
.lumiere-card-grid {
display: grid;
@@ -58,7 +297,7 @@
margin-top: 0.5rem;
}
// ── Individual card ──────────────────────────────────────────────────────
// ── Individual card ──────────────────────────────────────────────────────
.lumiere-card {
display: flex;
@@ -82,7 +321,7 @@
}
}
// ── Card thumbnail ───────────────────────────────────────────────────────
// ── Card thumbnail ───────────────────────────────────────────────────────
.lumiere-card-thumb {
position: relative;
@@ -92,7 +331,6 @@
justify-content: center;
overflow: hidden;
// Folded corner effect
&::after {
content: '';
position: absolute;
@@ -116,24 +354,23 @@
user-select: none;
}
// Format-specific gradients
.lumiere-card--latex .lumiere-card-thumb {
background: linear-gradient(135deg, #4caf7d 0%, #2a9d8f 100%);
background: linear-gradient(135deg, #4caf7d 0%, $lum-teal 100%);
}
.lumiere-card--typst .lumiere-card-thumb {
background: linear-gradient(135deg, #2a9d8f 0%, #3d7ebf 100%);
background: linear-gradient(135deg, $lum-teal 0%, $lum-blue 100%);
}
.lumiere-card--quarto .lumiere-card-thumb {
background: linear-gradient(135deg, #7c4dff 0%, #3d7ebf 100%);
background: linear-gradient(135deg, #7c4dff 0%, $lum-blue 100%);
}
.lumiere-card--quarto-slides .lumiere-card-thumb {
background: linear-gradient(135deg, #e67e22 0%, #e74c3c 100%);
}
// ── Card body ────────────────────────────────────────────────────────────
// ── Card body ────────────────────────────────────────────────────────────
.lumiere-card-body {
display: flex;
@@ -146,7 +383,7 @@
.lumiere-card-name {
font-size: 0.875rem;
font-weight: 600;
color: #1a2e3b;
color: $lum-text;
line-height: 1.3;
display: -webkit-box;
-webkit-line-clamp: 2;
@@ -163,7 +400,7 @@
.lumiere-card-owner {
font-size: 0.72rem;
color: #64748b;
color: $lum-text-sub;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
@@ -172,11 +409,11 @@
.lumiere-card-date {
font-size: 0.72rem;
color: #94a3b8;
color: $lum-text-muted;
margin-top: auto;
}
// ── Format badges ────────────────────────────────────────────────────────
// ── Format badges ────────────────────────────────────────────────────────
.lumiere-format-badge {
display: inline-block;
@@ -191,12 +428,12 @@
.lumiere-format-badge--latex {
background: #e8f5ee;
color: #2a9d8f;
color: $lum-teal;
}
.lumiere-format-badge--typst {
background: #e0f2fe;
color: #3d7ebf;
color: $lum-blue;
}
.lumiere-format-badge--quarto,