Files
SuperCharged-Claude-Code-Up…/public/claude-ide/sessions-landing.css
uroma 0e413d4309 feat: group sessions by project on landing page
- Add loadSessionsAndProjects() to fetch sessions and projects in parallel
- Store projects in window.projectsMap for quick lookup
- Group sessions by projectId, separating assigned and unassigned
- Render collapsible project sections with icon, name, and session count
- Add toggleProjectSection() to collapse/expand sections (▼/▶)
- Display project badges on sessions when assigned to a project
- Unassigned sessions shown in separate section at bottom

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-19 17:07:45 +00:00

611 lines
12 KiB
CSS

/**
* Sessions Landing Page Styles
*/
body.sessions-page {
background: #0d0d0d;
min-height: 100vh;
}
/* === Hero Section === */
.hero-section {
min-height: 50vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 80px 20px 60px;
text-align: center;
}
.hero-title {
font-size: 56px;
font-weight: 700;
margin: 0 0 16px 0;
background: linear-gradient(135deg, #4a9eff 0%, #a78bfa 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.hero-subtitle {
font-size: 20px;
color: #888;
margin: 0 0 48px 0;
}
.project-input {
width: 100%;
max-width: 600px;
padding: 18px 24px;
font-size: 18px;
background: #1a1a1a;
border: 2px solid #333;
border-radius: 12px;
color: #e0e0e0;
outline: none;
transition: all 0.3s ease;
text-align: center;
}
.project-input:focus {
border-color: #4a9eff;
box-shadow: 0 0 0 4px rgba(74, 158, 255, 0.15);
}
.input-status {
height: 20px;
margin-top: 12px;
font-size: 14px;
color: #ff6b6b;
}
/* === Projects Section === */
.projects-section {
padding: 40px 20px 80px;
border-top: 1px solid #222;
}
.projects-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 24px;
max-width: 1200px;
margin-left: auto;
margin-right: auto;
}
.projects-title {
font-size: 24px;
font-weight: 600;
color: #e0e0e0;
margin: 0;
}
.btn-refresh {
padding: 8px 16px;
background: #1a1a1a;
border: 1px solid #333;
border-radius: 8px;
color: #e0e0e0;
font-size: 14px;
cursor: pointer;
transition: all 0.2s ease;
}
.btn-refresh:hover {
background: #252525;
border-color: #4a9eff;
}
.projects-empty {
max-width: 1200px;
margin: 0 auto;
text-align: center;
padding: 80px 40px;
color: #888;
font-size: 16px;
}
/* === Projects Table === */
.projects-table-wrapper {
max-width: 1200px;
margin: 0 auto;
background: #1a1a1a;
border: 1px solid #333;
border-radius: 12px;
overflow: hidden;
}
.projects-table {
width: 100%;
border-collapse: collapse;
}
.projects-table thead {
background: #0d0d0d;
border-bottom: 1px solid #333;
}
.projects-table th {
padding: 16px 20px;
text-align: left;
font-size: 13px;
font-weight: 600;
color: #888;
text-transform: uppercase;
}
.projects-table tbody tr {
border-bottom: 1px solid #252525;
transition: background 0.2s ease;
cursor: pointer;
}
.projects-table tbody tr:hover {
background: #252525;
}
.projects-table tbody tr:last-child {
border-bottom: none;
}
.projects-table td {
padding: 16px 20px;
vertical-align: middle;
}
/* Column Widths */
.col-name { width: 40%; }
.col-activity { width: 25%; }
.col-status { width: 15%; }
.col-actions { width: 20%; text-align: right; }
/* Project Name */
.project-name {
font-size: 16px;
font-weight: 600;
color: #e0e0e0;
margin: 0;
}
.project-name-input {
background: #0d0d0d;
border: 2px solid #4a9eff;
border-radius: 6px;
padding: 8px 12px;
color: #e0e0e0;
font-size: 16px;
font-weight: 600;
font-family: inherit;
width: 100%;
max-width: 300px;
outline: none;
transition: all 0.2s ease;
}
.project-name-input:focus {
box-shadow: 0 0 0 3px rgba(74, 158, 255, 0.15);
}
/* Last Activity */
.last-activity {
font-size: 14px;
color: #888;
}
/* Status Badges */
.status-badge {
display: inline-block;
padding: 6px 12px;
border-radius: 6px;
font-size: 12px;
font-weight: 600;
}
.status-badge.active { color: #51cf66; background: rgba(81, 207, 102, 0.15); }
.status-badge.done { color: #888; background: rgba(136, 136, 136, 0.15); }
.status-badge.archived { color: #ffa94d; background: rgba(255, 169, 77, 0.15); }
/* Buttons */
.btn-continue {
padding: 8px 20px;
background: linear-gradient(135deg, #4a9eff 0%, #a78bfa 100%);
border: none;
border-radius: 8px;
color: white;
font-size: 14px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
}
.btn-continue:hover {
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(74, 158, 255, 0.4);
}
.btn-menu {
background: #2a2a2a;
border: 1px solid #444;
color: #e0e0e0;
width: 36px;
height: 36px;
border-radius: 8px;
font-size: 20px;
cursor: pointer;
margin-left: 8px;
transition: all 0.2s ease;
}
.btn-menu:hover {
background: #3a3a3a;
border-color: #666;
}
/* Dropdown Menu */
.dropdown-menu {
position: absolute;
background: #2a2a2a;
border: 1px solid #444;
border-radius: 8px;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
z-index: 1000;
min-width: 180px;
}
.dropdown-menu-item {
display: flex;
align-items: center;
gap: 10px;
width: 100%;
padding: 12px 16px;
background: none;
border: none;
color: #e0e0e0;
font-size: 14px;
cursor: pointer;
transition: background 0.2s ease;
}
.dropdown-menu-item:hover { background: #3a3a3a; }
.dropdown-menu-item:first-child { border-radius: 8px 8px 0 0; }
.dropdown-menu-item:last-child { border-radius: 0 0 8px 8px; }
.dropdown-menu-item.danger { color: #ff6b6b; }
/* Loading State */
.loading {
text-align: center;
padding: 40px;
color: #888;
font-size: 16px;
}
/* Responsive Design */
@media (max-width: 768px) {
.hero-title { font-size: 40px; }
.hero-subtitle { font-size: 16px; }
.project-input { font-size: 16px; padding: 14px 20px; }
.projects-table th,
.projects-table td { padding: 12px 16px; }
.col-actions { display: none; }
}
@media (max-width: 480px) {
.hero-section { padding: 60px 16px 40px; }
.hero-title { font-size: 32px; }
.hero-subtitle { font-size: 14px; }
.project-input { font-size: 14px; padding: 12px 16px; }
.projects-section { padding: 24px 16px 60px; }
.projects-header { flex-direction: column; align-items: flex-start; gap: 12px; }
.projects-table thead { display: none; }
.projects-table tbody { display: flex; flex-direction: column; gap: 12px; }
.projects-table tr {
display: flex;
flex-direction: column;
border: 1px solid #333;
border-radius: 8px;
padding: 16px;
gap: 8px;
}
.projects-table td {
padding: 4px 0;
display: flex;
justify-content: space-between;
align-items: center;
border: none;
}
.projects-table td::before {
content: attr(data-label);
font-size: 12px;
color: #888;
font-weight: 600;
}
.col-actions { display: flex; justify-content: flex-end; gap: 8px; }
}
/**
* Loading Overlay
*/
.loading-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.8);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
z-index: 10000;
opacity: 0;
transition: opacity 0.3s ease;
pointer-events: none;
}
.loading-overlay.hidden {
display: none;
}
.loading-overlay.visible {
opacity: 1;
pointer-events: auto;
}
.loading-spinner {
width: 48px;
height: 48px;
border: 4px solid #333;
border-top-color: #4a9eff;
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
.loading-text {
margin-top: 20px;
color: #e0e0e0;
font-size: 16px;
font-weight: 500;
}
/**
* Toast Notifications
*/
.toast-notification {
position: fixed;
top: 20px;
right: 20px;
min-width: 300px;
max-width: 500px;
padding: 16px 20px;
background: #2a2a2a;
border: 1px solid #444;
border-radius: 8px;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
display: flex;
align-items: center;
gap: 12px;
z-index: 10001;
opacity: 0;
transform: translateX(400px);
transition: all 0.3s ease;
}
.toast-notification.visible {
opacity: 1;
transform: translateX(0);
}
.toast-icon {
font-size: 20px;
font-weight: bold;
flex-shrink: 0;
width: 28px;
height: 28px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
}
.toast-message {
flex: 1;
color: #e0e0e0;
font-size: 14px;
line-height: 1.4;
}
/* Toast Types */
.toast-success {
border-color: #51cf66;
}
.toast-success .toast-icon {
color: #51cf66;
background: rgba(81, 207, 102, 0.1);
}
.toast-error {
border-color: #ff6b6b;
}
.toast-error .toast-icon {
color: #ff6b6b;
background: rgba(255, 107, 107, 0.1);
}
.toast-info {
border-color: #4a9eff;
}
.toast-info .toast-icon {
color: #4a9eff;
background: rgba(74, 158, 255, 0.1);
}
.toast-warning {
border-color: #ffa94d;
}
.toast-warning .toast-icon {
color: #ffa94d;
background: rgba(255, 169, 77, 0.1);
}
/* Responsive Toast */
@media (max-width: 768px) {
.toast-notification {
top: 10px;
right: 10px;
left: 10px;
min-width: auto;
max-width: none;
}
}
/**
* Project Section Styles
*/
.project-section {
border-bottom: 1px solid #333;
}
.project-section:last-child {
border-bottom: none;
}
/* Project Section Header */
.project-section-header {
display: flex;
align-items: center;
gap: 12px;
padding: 16px 20px;
background: #151515;
cursor: pointer;
user-select: none;
transition: background 0.2s ease;
}
.project-section-header:hover {
background: #1a1a1a;
}
.project-section-toggle {
font-size: 12px;
color: #888;
transition: transform 0.2s ease;
flex-shrink: 0;
}
.project-section-icon {
font-size: 20px;
flex-shrink: 0;
}
.project-section-name {
font-size: 15px;
font-weight: 600;
color: #e0e0e0;
flex: 1;
}
.project-section-count {
font-size: 13px;
color: #888;
font-weight: 500;
flex-shrink: 0;
}
/* Project Section Sessions Container */
.project-section-sessions {
display: block;
transition: all 0.3s ease;
}
.project-section.collapsed .project-section-sessions {
display: none;
}
/* Session Rows within Project Sections */
.session-row {
border-bottom: 1px solid #252525;
transition: background 0.2s ease;
cursor: pointer;
}
.session-row:last-child {
border-bottom: none;
}
.session-row:hover {
background: #252525;
}
/* Session Project Badge */
.session-project-badge {
display: inline-block;
margin-top: 4px;
padding: 3px 8px;
background: rgba(74, 158, 255, 0.15);
color: #4a9eff;
border-radius: 4px;
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
}
/* Unassigned Section Special Styling */
.unassigned-section .project-section-header {
background: #1a1a1a;
border-top: 1px solid #333;
}
.unassigned-section .project-section-header:hover {
background: #222;
}
/* Collapsed state */
.project-section.collapsed .project-section-toggle {
transform: rotate(-90deg);
}
/* Responsive Design for Project Sections */
@media (max-width: 768px) {
.project-section-header {
padding: 14px 16px;
}
.project-section-toggle {
font-size: 11px;
}
.project-section-icon {
font-size: 18px;
}
.project-section-name {
font-size: 14px;
}
.project-section-count {
font-size: 12px;
}
.session-project-badge {
font-size: 10px;
padding: 2px 6px;
}
}