Skip to content

Commit 325e7ee

Browse files
authored
Merge pull request #29 from keaganstokoe/feat/light-theme
Add light theme with sidebar toggle
2 parents 1bcd816 + 0da2b58 commit 325e7ee

File tree

12 files changed

+659
-23
lines changed

12 files changed

+659
-23
lines changed

lib/public/css/explorer.css

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1880,3 +1880,51 @@
18801880
}
18811881

18821882
}
1883+
1884+
/* ── Light theme overrides ─────────────────────── */
1885+
1886+
[data-theme="light"] .sidebar-tab {
1887+
color: var(--text-muted);
1888+
}
1889+
1890+
[data-theme="light"] .sidebar-tab:hover {
1891+
color: var(--text-bright);
1892+
}
1893+
1894+
[data-theme="light"] .sidebar-tab.active {
1895+
color: #0e7490;
1896+
background: rgba(8, 145, 178, 0.1);
1897+
}
1898+
1899+
[data-theme="light"] .file-viewer-protected-banner {
1900+
background: rgba(234, 179, 8, 0.12);
1901+
}
1902+
1903+
[data-theme="light"] .file-viewer-protected-banner-text {
1904+
color: #92400e;
1905+
}
1906+
1907+
[data-theme="light"] .file-viewer-protected-banner-unlocked {
1908+
color: #a16207;
1909+
}
1910+
1911+
[data-theme="light"] .file-viewer-protected-banner.is-locked {
1912+
background: rgba(220, 38, 38, 0.1);
1913+
}
1914+
1915+
[data-theme="light"] .file-viewer-protected-banner.is-locked .file-viewer-protected-banner-text {
1916+
color: #b91c1c;
1917+
}
1918+
1919+
[data-theme="light"] .file-viewer-protected-banner.is-locked .file-viewer-protected-banner-icon {
1920+
color: #dc2626;
1921+
}
1922+
1923+
[data-theme="light"] .file-viewer-diff-banner {
1924+
background: rgba(59, 130, 246, 0.08);
1925+
}
1926+
1927+
[data-theme="light"] .file-viewer-diff-banner .file-viewer-protected-banner-text,
1928+
[data-theme="light"] .file-viewer-diff-banner {
1929+
color: #1d4ed8;
1930+
}

lib/public/css/shell.css

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,3 +491,152 @@
491491
pointer-events: auto;
492492
}
493493
}
494+
495+
/* ── Theme toggle dropdown ────────────────────── */
496+
497+
.theme-toggle-menu {
498+
position: relative;
499+
display: inline-flex;
500+
}
501+
502+
.theme-toggle-trigger {
503+
display: inline-flex;
504+
align-items: center;
505+
justify-content: center;
506+
width: 24px;
507+
height: 24px;
508+
border-radius: 6px;
509+
border: none;
510+
background: transparent;
511+
color: var(--text-dim);
512+
cursor: pointer;
513+
transition: color 0.15s, background 0.15s;
514+
}
515+
516+
.theme-toggle-trigger:hover {
517+
color: var(--text-muted);
518+
background: var(--bg-hover);
519+
}
520+
521+
.theme-toggle-dropdown {
522+
position: absolute;
523+
top: calc(100% + 4px);
524+
right: 0;
525+
min-width: 120px;
526+
padding: 4px;
527+
background: var(--bg-content);
528+
border: 1px solid var(--border);
529+
border-radius: 8px;
530+
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.35);
531+
z-index: 50;
532+
display: flex;
533+
flex-direction: column;
534+
}
535+
536+
[data-theme="light"] .theme-toggle-dropdown {
537+
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
538+
}
539+
540+
.theme-toggle-option {
541+
display: flex;
542+
align-items: center;
543+
gap: 8px;
544+
width: 100%;
545+
padding: 6px 10px;
546+
border: none;
547+
border-radius: 5px;
548+
background: transparent;
549+
color: var(--text-muted);
550+
font-size: 12px;
551+
font-family: inherit;
552+
cursor: pointer;
553+
transition: color 0.15s, background 0.15s;
554+
}
555+
556+
.theme-toggle-option:hover {
557+
background: var(--bg-hover);
558+
color: var(--text);
559+
}
560+
561+
.theme-toggle-option.active {
562+
color: var(--accent);
563+
}
564+
565+
/* ── Light theme overrides ─────────────────────── */
566+
567+
[data-theme="light"] .app-sidebar {
568+
background:
569+
linear-gradient(180deg, rgba(0, 0, 0, 0.02) 0%, rgba(0, 0, 0, 0.04) 100%),
570+
var(--bg-sidebar);
571+
border-right-color: rgba(0, 0, 0, 0.1);
572+
}
573+
574+
[data-theme="light"] .sidebar-brand {
575+
color: var(--text);
576+
}
577+
578+
[data-theme="light"] .sidebar-label {
579+
color: var(--text-muted);
580+
}
581+
582+
[data-theme="light"] .sidebar-nav a {
583+
color: var(--text);
584+
}
585+
586+
[data-theme="light"] .sidebar-nav a:hover {
587+
background: rgba(0, 0, 0, 0.06);
588+
color: var(--text-bright);
589+
}
590+
591+
[data-theme="light"] .sidebar-nav a.active {
592+
background: rgba(8, 145, 178, 0.1);
593+
color: #0e7490;
594+
}
595+
596+
[data-theme="light"] .sidebar-nav a.active::before {
597+
background: #0e7490;
598+
}
599+
600+
[data-theme="light"] .brand-dropdown {
601+
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
602+
}
603+
604+
[data-theme="light"] .global-restart-banner__content {
605+
background: rgba(254, 243, 199, 0.97);
606+
border: 1px solid rgba(202, 138, 4, 0.5);
607+
box-shadow: 0 18px 46px rgba(0, 0, 0, 0.12);
608+
}
609+
610+
[data-theme="light"] .global-restart-banner__text {
611+
color: #78350f;
612+
}
613+
614+
[data-theme="light"] .global-restart-banner__dismiss {
615+
color: #78350f;
616+
}
617+
618+
[data-theme="light"] .global-restart-banner__dismiss:hover {
619+
color: #451a03;
620+
}
621+
622+
[data-theme="light"] .sidebar-update-btn {
623+
border-color: rgba(202, 138, 4, 0.3);
624+
color: #a16207;
625+
background: rgba(202, 138, 4, 0.06);
626+
}
627+
628+
[data-theme="light"] .sidebar-update-btn:hover {
629+
background: rgba(202, 138, 4, 0.1);
630+
border-color: rgba(202, 138, 4, 0.4);
631+
}
632+
633+
[data-theme="light"] .sidebar-resizer:hover::after,
634+
[data-theme="light"] .sidebar-resizer.is-resizing::after {
635+
background: rgba(8, 145, 178, 0.55);
636+
}
637+
638+
@media (max-width: 768px) {
639+
[data-theme="light"] .app-sidebar {
640+
box-shadow: 0 8px 28px rgba(0, 0, 0, 0.15);
641+
}
642+
}

0 commit comments

Comments
 (0)