Skip to content

Commit bfe6ece

Browse files
authored
Merge Redesign sidebar with IFK theme and sticky navigation pull request #4 from mjunaidca/003-sidebar-ifk-redesign
feat(ui): Redesign sidebar with IFK theme and sticky navigation
2 parents ecb2b95 + f001ff5 commit bfe6ece

File tree

15 files changed

+1767
-736
lines changed

15 files changed

+1767
-736
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
---
2+
id: phr-003-sidebar-ifk-redesign-pr
3+
title: Sidebar IFK Redesign PR Creation
4+
stage: misc
5+
feature: 003-sidebar-ifk-redesign
6+
date: 2025-11-29
7+
tags: [git, pr, sidebar, ifk-theme, sticky-navigation]
8+
---
9+
10+
# Sidebar IFK Redesign PR Creation
11+
12+
## Prompt
13+
14+
User requested `/sp.git.commit_pr` to commit work and create a PR for the sidebar redesign with IFK theme and sticky navigation fixes.
15+
16+
## Response
17+
18+
Executed autonomous git workflow:
19+
20+
1. **Context Gathered:**
21+
- Working tree clean, on `main` branch
22+
- 4 commits ahead of origin:
23+
- `92b1189` feat(ui): redesign sidebar with IFK theme and Lucide icons
24+
- `c8cb75f` fix(sidebar): make sidebar sticky during page scroll
25+
- `04ff5df` fix(ui): make navbar sticky and position sidebar below it
26+
- `d966890` fix(sidebar): remove extra top padding in sidebar content
27+
28+
2. **Decision:**
29+
- Created feature branch `003-sidebar-ifk-redesign` from current state
30+
- Pushed to origin with upstream tracking
31+
32+
3. **PR Created:**
33+
- URL: https://github.com/mjunaidca/robolearn/pull/4
34+
- Title: "feat(ui): Redesign sidebar with IFK theme and sticky navigation"
35+
- Comprehensive description with changes, technical details, and test plan
36+
37+
## Outcome
38+
39+
- Branch: `003-sidebar-ifk-redesign`
40+
- PR: https://github.com/mjunaidca/robolearn/pull/4
41+
- Status: Ready for review
42+
43+
## Key Changes in PR
44+
45+
- IFK theme implementation (cyan/amber accents)
46+
- Lucide React icons for sidebar toggle
47+
- Simplified 2-state theme toggle
48+
- Sticky navbar and sidebar (book-style interface)
49+
- Mobile improvements
50+
- Light theme icon visibility fixes

robolearn-interface/package-lock.json

Lines changed: 48 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

robolearn-interface/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
"@vercel/og": "^0.8.5",
4141
"autoprefixer": "^10.4.21",
4242
"dotenv": "^17.2.3",
43+
"playwright": "^1.57.0",
4344
"postcss": "^8.5.6",
4445
"satori": "^0.18.3",
4546
"sharp": "^0.34.4",

robolearn-interface/src/css/custom.css

Lines changed: 212 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,23 @@
7575
--ifk-shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.5);
7676
--ifk-shadow-cyan: 0 0 20px var(--ifk-cyan-glow);
7777
--ifk-shadow-amber: 0 0 20px var(--ifk-amber-glow);
78+
79+
/* ===== IFK Sidebar Tokens ===== */
80+
--ifk-sidebar-bg: rgba(14, 14, 18, 0.98);
81+
--ifk-sidebar-bg-gradient: linear-gradient(180deg, rgba(14, 14, 18, 0.98) 0%, rgba(20, 20, 24, 0.95) 100%);
82+
--ifk-sidebar-border: rgba(0, 212, 255, 0.12);
83+
--ifk-sidebar-border-glow: rgba(0, 212, 255, 0.25);
84+
--ifk-sidebar-item-bg: transparent;
85+
--ifk-sidebar-item-hover: rgba(0, 212, 255, 0.08);
86+
--ifk-sidebar-item-active: rgba(0, 212, 255, 0.15);
87+
--ifk-sidebar-item-active-border: var(--ifk-cyan);
88+
--ifk-sidebar-category-bg: rgba(0, 212, 255, 0.04);
89+
--ifk-sidebar-progress-complete: var(--ifk-amber);
90+
--ifk-sidebar-progress-current: var(--ifk-cyan);
91+
--ifk-sidebar-progress-pending: rgba(255, 255, 255, 0.2);
92+
--ifk-sidebar-scrollbar-track: rgba(0, 212, 255, 0.05);
93+
--ifk-sidebar-scrollbar-thumb: rgba(0, 212, 255, 0.2);
94+
--ifk-sidebar-scrollbar-thumb-hover: rgba(0, 212, 255, 0.35);
7895
}
7996

8097
/* ===== IFK Animation Keyframes ===== */
@@ -231,6 +248,20 @@
231248
--ifk-border-hover: rgba(0, 0, 0, 0.2);
232249
--ifk-border-color: rgba(0, 0, 0, 0.1);
233250
--ifk-blueprint: rgba(0, 119, 204, 0.1);
251+
252+
/* Sidebar tokens for light mode */
253+
--ifk-sidebar-bg: rgba(250, 250, 252, 0.98);
254+
--ifk-sidebar-bg-gradient: linear-gradient(180deg, rgba(250, 250, 252, 0.98) 0%, rgba(245, 245, 247, 0.95) 100%);
255+
--ifk-sidebar-border: rgba(0, 119, 204, 0.15);
256+
--ifk-sidebar-border-glow: rgba(0, 119, 204, 0.3);
257+
--ifk-sidebar-item-bg: transparent;
258+
--ifk-sidebar-item-hover: rgba(0, 119, 204, 0.06);
259+
--ifk-sidebar-item-active: rgba(0, 119, 204, 0.12);
260+
--ifk-sidebar-item-active-border: var(--ifk-cyan);
261+
--ifk-sidebar-category-bg: rgba(0, 119, 204, 0.04);
262+
--ifk-sidebar-scrollbar-track: rgba(0, 119, 204, 0.05);
263+
--ifk-sidebar-scrollbar-thumb: rgba(0, 119, 204, 0.2);
264+
--ifk-sidebar-scrollbar-thumb-hover: rgba(0, 119, 204, 0.35);
234265
}
235266

236267
/* ============================================================================
@@ -311,12 +342,13 @@ pre code {
311342
padding: 0;
312343
}
313344

314-
/* Enhance navbar */
345+
/* Enhance navbar - make it sticky */
315346
.navbar {
316347
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
317348
backdrop-filter: blur(10px);
318-
position: relative;
319-
z-index: 100;
349+
position: sticky !important;
350+
top: 0 !important;
351+
z-index: 200;
320352
}
321353

322354
[data-theme="dark"] .navbar {
@@ -926,6 +958,122 @@ pre code {
926958
.navbar--fixed-top.navbar-sidebar--show ~ footer {
927959
display: none !important;
928960
}
961+
962+
/* ===== Mobile Sidebar Header - Close & Theme Toggle ===== */
963+
964+
/* Container for the header buttons (brand area on mobile sidebar) */
965+
.navbar-sidebar__brand {
966+
display: flex !important;
967+
align-items: center !important;
968+
justify-content: space-between !important;
969+
padding: 0.75rem 1rem !important;
970+
background: linear-gradient(180deg, rgba(20, 20, 24, 0.98) 0%, rgba(26, 26, 30, 0.95) 100%) !important;
971+
border-bottom: 1px solid rgba(0, 212, 255, 0.15) !important;
972+
min-height: 60px !important;
973+
}
974+
975+
/* Close button (X icon) - IFK styled */
976+
.navbar-sidebar__close {
977+
display: flex !important;
978+
align-items: center !important;
979+
justify-content: center !important;
980+
width: 44px !important;
981+
height: 44px !important;
982+
border-radius: 8px !important;
983+
background: rgba(0, 212, 255, 0.08) !important;
984+
border: 1px solid rgba(0, 212, 255, 0.2) !important;
985+
color: rgba(255, 255, 255, 0.8) !important;
986+
transition: all 0.2s ease !important;
987+
cursor: pointer !important;
988+
}
989+
990+
.navbar-sidebar__close:hover,
991+
.navbar-sidebar__close:focus {
992+
background: rgba(0, 212, 255, 0.15) !important;
993+
border-color: rgba(0, 212, 255, 0.4) !important;
994+
color: #00d4ff !important;
995+
box-shadow: 0 0 12px rgba(0, 212, 255, 0.3) !important;
996+
}
997+
998+
.navbar-sidebar__close svg {
999+
width: 20px !important;
1000+
height: 20px !important;
1001+
}
1002+
1003+
/* Theme toggle button in mobile sidebar */
1004+
.navbar-sidebar__brand [class*='toggle'],
1005+
.navbar-sidebar__brand [class*='colorModeToggle'] {
1006+
display: flex !important;
1007+
align-items: center !important;
1008+
justify-content: center !important;
1009+
width: 44px !important;
1010+
height: 44px !important;
1011+
border-radius: 8px !important;
1012+
background: rgba(255, 149, 0, 0.08) !important;
1013+
border: 1px solid rgba(255, 149, 0, 0.2) !important;
1014+
transition: all 0.2s ease !important;
1015+
}
1016+
1017+
.navbar-sidebar__brand [class*='toggle']:hover,
1018+
.navbar-sidebar__brand [class*='toggle']:focus,
1019+
.navbar-sidebar__brand [class*='colorModeToggle']:hover,
1020+
.navbar-sidebar__brand [class*='colorModeToggle']:focus {
1021+
background: rgba(255, 149, 0, 0.15) !important;
1022+
border-color: rgba(255, 149, 0, 0.4) !important;
1023+
box-shadow: 0 0 12px rgba(255, 149, 0, 0.3) !important;
1024+
}
1025+
1026+
/* Theme toggle button styling */
1027+
.navbar-sidebar__brand [class*='toggleButton'] {
1028+
width: 100% !important;
1029+
height: 100% !important;
1030+
border-radius: 8px !important;
1031+
background: transparent !important;
1032+
}
1033+
1034+
.navbar-sidebar__brand [class*='toggleButton']:hover {
1035+
background: rgba(255, 149, 0, 0.1) !important;
1036+
}
1037+
1038+
/* Theme icons in mobile sidebar */
1039+
.navbar-sidebar__brand [class*='toggleButton'] svg {
1040+
width: 20px !important;
1041+
height: 20px !important;
1042+
color: rgba(255, 255, 255, 0.8) !important;
1043+
transition: color 0.2s ease !important;
1044+
}
1045+
1046+
.navbar-sidebar__brand [class*='toggleButton']:hover svg {
1047+
color: #ff9500 !important;
1048+
}
1049+
1050+
/* Clean button base reset for sidebar buttons */
1051+
.navbar-sidebar__brand .clean-btn {
1052+
background: rgba(0, 212, 255, 0.08) !important;
1053+
border: 1px solid rgba(0, 212, 255, 0.2) !important;
1054+
border-radius: 8px !important;
1055+
width: 44px !important;
1056+
height: 44px !important;
1057+
padding: 0 !important;
1058+
display: flex !important;
1059+
align-items: center !important;
1060+
justify-content: center !important;
1061+
}
1062+
1063+
.navbar-sidebar__brand .clean-btn:hover {
1064+
background: rgba(0, 212, 255, 0.15) !important;
1065+
border-color: rgba(0, 212, 255, 0.4) !important;
1066+
}
1067+
1068+
.navbar-sidebar__brand .clean-btn svg {
1069+
width: 20px !important;
1070+
height: 20px !important;
1071+
color: rgba(255, 255, 255, 0.8) !important;
1072+
}
1073+
1074+
.navbar-sidebar__brand .clean-btn:hover svg {
1075+
color: #00d4ff !important;
1076+
}
9291077
}
9301078

9311079
/* ============================================================================
@@ -1157,3 +1305,64 @@ pre code {
11571305
letter-spacing: -0.01em !important;
11581306
}
11591307
}
1308+
1309+
/* ============================================================================
1310+
MOBILE SIDEBAR - Light Mode Adjustments
1311+
============================================================================ */
1312+
@media (max-width: 996px) {
1313+
[data-theme='light'] .navbar-sidebar__brand {
1314+
background: linear-gradient(180deg, #f8f9fa 0%, #ffffff 100%) !important;
1315+
border-bottom: 1px solid rgba(0, 168, 204, 0.25) !important;
1316+
}
1317+
1318+
[data-theme='light'] .navbar-sidebar__close {
1319+
background: rgba(0, 168, 204, 0.1) !important;
1320+
border: 1px solid rgba(0, 168, 204, 0.3) !important;
1321+
color: #333 !important;
1322+
}
1323+
1324+
[data-theme='light'] .navbar-sidebar__close:hover,
1325+
[data-theme='light'] .navbar-sidebar__close:focus {
1326+
background: rgba(0, 168, 204, 0.2) !important;
1327+
border-color: rgba(0, 168, 204, 0.5) !important;
1328+
color: #00a8cc !important;
1329+
}
1330+
1331+
[data-theme='light'] .navbar-sidebar__brand [class*='toggle'],
1332+
[data-theme='light'] .navbar-sidebar__brand [class*='colorModeToggle'] {
1333+
background: rgba(204, 119, 0, 0.1) !important;
1334+
border: 1px solid rgba(204, 119, 0, 0.3) !important;
1335+
}
1336+
1337+
[data-theme='light'] .navbar-sidebar__brand [class*='toggle']:hover,
1338+
[data-theme='light'] .navbar-sidebar__brand [class*='colorModeToggle']:hover {
1339+
background: rgba(204, 119, 0, 0.2) !important;
1340+
border-color: rgba(204, 119, 0, 0.5) !important;
1341+
}
1342+
1343+
[data-theme='light'] .navbar-sidebar__brand [class*='toggleButton'] svg {
1344+
color: #333 !important;
1345+
}
1346+
1347+
[data-theme='light'] .navbar-sidebar__brand [class*='toggleButton']:hover svg {
1348+
color: #cc7700 !important;
1349+
}
1350+
1351+
[data-theme='light'] .navbar-sidebar__brand .clean-btn {
1352+
background: rgba(0, 168, 204, 0.1) !important;
1353+
border: 1px solid rgba(0, 168, 204, 0.3) !important;
1354+
}
1355+
1356+
[data-theme='light'] .navbar-sidebar__brand .clean-btn:hover {
1357+
background: rgba(0, 168, 204, 0.2) !important;
1358+
border-color: rgba(0, 168, 204, 0.5) !important;
1359+
}
1360+
1361+
[data-theme='light'] .navbar-sidebar__brand .clean-btn svg {
1362+
color: #333 !important;
1363+
}
1364+
1365+
[data-theme='light'] .navbar-sidebar__brand .clean-btn:hover svg {
1366+
color: #00a8cc !important;
1367+
}
1368+
}

0 commit comments

Comments
 (0)