Skip to content

Commit 4d80809

Browse files
committed
feat: sidebar-driven navigation — remove top tabs, VS Code-style activity bar
Layout restructure: - Removed top folder-tab-strip entirely - Shell-topbar reduced to thin drag region (macOS Tauri) - Cleaned up unused state (tabRefs, tabContainerRef, indicatorStyle) Sidebar — Collapsed (activity bar): - 5 view icons: Chat, Editor, Git, MCP, Skills - Active state: 2px left border in brand color + subtle bg - Git icon shows dirty file count badge - Settings gear at bottom - 24px icons, 48x48 hit targets Sidebar — Expanded: - Labeled view navigation above thread list - Active view highlighted with bg + left border - Git badge inline with label Mobile: bottom tabs unchanged
1 parent 9937b2b commit 4d80809

12 files changed

Lines changed: 1705 additions & 338 deletions

app/globals.css

Lines changed: 149 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -3370,7 +3370,7 @@ p {
33703370

33713371
.shell-sidebar--expanded {
33723372
background: var(--shell-panel-bg);
3373-
border-radius: 28px;
3373+
border-radius: 20px;
33743374
box-shadow: var(--shell-panel-shadow);
33753375
}
33763376

@@ -3388,53 +3388,145 @@ p {
33883388
width: 40px;
33893389
height: 40px;
33903390
border: 1px solid transparent;
3391-
border-radius: 16px;
3391+
border-radius: 10px;
33923392
background: transparent;
33933393
color: var(--text-tertiary);
33943394
cursor: pointer;
33953395
transition:
3396-
transform 180ms ease,
33973396
color 180ms ease,
33983397
border-color 180ms ease,
33993398
background 180ms ease;
34003399
}
34013400

34023401
.codex-sidebar-icon-btn:hover {
3403-
transform: translateY(-1px);
34043402
color: var(--text-primary);
3405-
border-color: var(--shell-chip-border);
3406-
background: var(--shell-chip-hover);
3403+
background: var(--bg-subtle);
3404+
}
3405+
3406+
/* ══════════════════════════════════════════════════════════════════
3407+
Activity Bar — VS Code-style sidebar navigation (collapsed state)
3408+
══════════════════════════════════════════════════════════════════ */
3409+
.activity-bar-btn {
3410+
position: relative;
3411+
display: flex;
3412+
align-items: center;
3413+
justify-content: center;
3414+
width: 48px;
3415+
height: 48px;
3416+
color: var(--text-secondary);
3417+
border-radius: 8px;
3418+
transition: all 180ms ease;
3419+
cursor: pointer;
3420+
flex-shrink: 0;
3421+
}
3422+
3423+
.activity-bar-btn:hover {
3424+
color: var(--text-primary);
3425+
background: rgba(255, 255, 255, 0.06);
3426+
}
3427+
3428+
.activity-bar-btn--active {
3429+
color: var(--brand);
3430+
background: rgba(255, 255, 255, 0.08);
3431+
}
3432+
3433+
.activity-bar-btn--active::before {
3434+
content: '';
3435+
position: absolute;
3436+
left: 0;
3437+
top: 50%;
3438+
transform: translateY(-50%);
3439+
width: 2px;
3440+
height: 24px;
3441+
background: var(--brand);
3442+
border-radius: 0 2px 2px 0;
3443+
}
3444+
3445+
.activity-bar-badge {
3446+
position: absolute;
3447+
top: 4px;
3448+
right: 4px;
3449+
min-width: 16px;
3450+
height: 16px;
3451+
padding: 0 4px;
3452+
display: flex;
3453+
align-items: center;
3454+
justify-content: center;
3455+
font-size: 9px;
3456+
font-weight: 700;
3457+
color: var(--brand-contrast);
3458+
background: var(--brand);
3459+
border-radius: 8px;
3460+
line-height: 1;
3461+
}
3462+
3463+
.activity-bar-divider {
3464+
width: 32px;
3465+
height: 1px;
3466+
background: var(--border);
3467+
margin: 8px auto;
3468+
flex-shrink: 0;
3469+
}
3470+
3471+
/* Expanded sidebar view navigation */
3472+
.sidebar-view-nav {
3473+
display: flex;
3474+
align-items: center;
3475+
gap: 12px;
3476+
width: 100%;
3477+
padding: 8px 12px;
3478+
border-radius: 8px;
3479+
font-size: 14px;
3480+
color: var(--text-secondary);
3481+
transition: all 180ms ease;
3482+
cursor: pointer;
3483+
position: relative;
3484+
text-align: left;
3485+
}
3486+
3487+
.sidebar-view-nav:hover {
3488+
color: var(--text-primary);
3489+
background: rgba(255, 255, 255, 0.04);
3490+
}
3491+
3492+
.sidebar-view-nav--active {
3493+
color: var(--text-primary);
3494+
background: var(--bg-subtle);
3495+
}
3496+
3497+
.sidebar-view-nav--active::before {
3498+
content: '';
3499+
position: absolute;
3500+
left: 0;
3501+
top: 50%;
3502+
transform: translateY(-50%);
3503+
width: 2px;
3504+
height: 18px;
3505+
background: var(--brand);
3506+
border-radius: 0 2px 2px 0;
34073507
}
34083508

34093509
.codex-sidebar-hero {
34103510
display: flex;
34113511
align-items: center;
34123512
justify-content: space-between;
3413-
gap: 0.75rem;
3414-
margin-bottom: 0.75rem;
3415-
padding: 0.9rem 0.95rem;
3416-
border: 1px solid var(--shell-chip-border);
3417-
border-radius: 22px;
3418-
background:
3419-
radial-gradient(
3420-
circle at top left,
3421-
color-mix(in srgb, var(--brand) 10%, transparent),
3422-
transparent 34%
3423-
),
3424-
color-mix(in srgb, var(--shell-chip-bg) 92%, transparent);
3425-
box-shadow: var(--shadow-sm);
3513+
gap: 0.5rem;
3514+
margin-bottom: 0.25rem;
3515+
padding: 0.65rem 0.75rem;
3516+
border: 1px solid var(--border);
3517+
border-radius: 12px;
3518+
background: var(--bg-elevated);
34263519
}
34273520

34283521
.codex-sidebar-hero__icon {
34293522
display: flex;
3430-
width: 38px;
3431-
height: 38px;
3523+
width: 28px;
3524+
height: 28px;
34323525
align-items: center;
34333526
justify-content: center;
3434-
border-radius: 16px;
3435-
background: color-mix(in srgb, var(--brand) 12%, transparent);
3436-
color: var(--brand);
3437-
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08);
3527+
border-radius: 8px;
3528+
background: var(--bg-subtle);
3529+
color: var(--text-secondary);
34383530
}
34393531

34403532
.codex-sidebar-hero__action {
@@ -3444,28 +3536,42 @@ p {
34443536
width: 32px;
34453537
height: 32px;
34463538
border: 1px solid transparent;
3447-
border-radius: 12px;
3539+
border-radius: 8px;
34483540
background: transparent;
34493541
color: var(--text-disabled);
34503542
cursor: pointer;
34513543
transition:
34523544
color 180ms ease,
3453-
border-color 180ms ease,
34543545
background 180ms ease;
34553546
}
34563547

34573548
.codex-sidebar-hero__action:hover {
34583549
color: var(--text-primary);
3459-
border-color: var(--shell-chip-border);
3460-
background: var(--shell-chip-hover);
3550+
background: var(--bg-subtle);
3551+
}
3552+
3553+
.codex-sidebar-section-label {
3554+
font-size: 11px;
3555+
font-weight: 500;
3556+
text-transform: uppercase;
3557+
letter-spacing: 0.06em;
3558+
color: var(--text-disabled);
3559+
padding: 0.25rem 0.5rem;
3560+
margin-bottom: 0.25rem;
3561+
}
3562+
3563+
.codex-sidebar-user-footer {
3564+
border-top: 1px solid var(--border);
3565+
margin-top: 0.25rem;
3566+
padding-top: 0.5rem;
34613567
}
34623568

34633569
.codex-sidebar-workspace {
3464-
border-radius: 14px;
3570+
border-radius: 8px;
34653571
}
34663572

34673573
.codex-sidebar-workspace:hover {
3468-
background: var(--shell-chip-hover);
3574+
background: var(--bg-subtle);
34693575
color: var(--text-primary);
34703576
}
34713577

@@ -5983,61 +6089,47 @@ p {
59836089
}
59846090

59856091
.codex-sidebar-new-thread {
5986-
border: 1px solid var(--shell-chip-border);
5987-
background:
5988-
radial-gradient(
5989-
circle at top left,
5990-
color-mix(in srgb, var(--brand) 10%, transparent),
5991-
transparent 32%
5992-
),
5993-
color-mix(in srgb, var(--shell-chip-bg) 92%, transparent);
5994-
box-shadow: var(--shadow-sm);
6092+
border: 1px solid var(--border);
6093+
background: var(--bg-elevated);
59956094
}
59966095

59976096
.codex-sidebar-new-thread:hover {
5998-
transform: translateY(-0.5px);
5999-
border-color: color-mix(in srgb, var(--brand) 24%, var(--shell-chip-border));
6000-
box-shadow: var(--shadow-md);
6097+
background: var(--bg-subtle);
60016098
}
60026099

60036100
.codex-sidebar-nav-item {
6004-
border: 1px solid transparent;
6101+
/* no border on default state */
60056102
}
60066103

60076104
.codex-sidebar-nav-item:hover {
6008-
border-color: var(--shell-chip-border);
6009-
background: var(--shell-chip-hover);
6105+
background: var(--bg-subtle);
60106106
}
60116107

60126108
.codex-sidebar-thread {
6013-
border: 1px solid transparent;
6014-
backdrop-filter: blur(10px);
6109+
/* clean, no blur */
60156110
}
60166111
.codex-sidebar-thread:hover {
6017-
border-color: var(--shell-chip-border);
6112+
background: var(--bg-subtle);
60186113
}
60196114

60206115
/* ─── Codex Layout: Git Sidebar Panel ────────────────────── */
60216116

60226117
.codex-git-sidebar {
60236118
position: relative;
6024-
background: color-mix(in srgb, var(--shell-panel-bg) 94%, transparent);
6025-
border-radius: 0 24px 24px 0;
6119+
background: var(--shell-panel-bg);
6120+
border-radius: 0 16px 16px 0;
60266121
overflow: hidden;
6027-
backdrop-filter: blur(16px) saturate(135%);
6028-
-webkit-backdrop-filter: blur(16px) saturate(135%);
60296122
}
60306123

60316124
.codex-git-tab {
6032-
border: 1px solid transparent;
60336125
transition: all 150ms;
60346126
}
60356127
.codex-git-tab:hover {
6036-
border-color: var(--border);
6128+
background: var(--bg-subtle);
60376129
}
60386130

60396131
.codex-git-file {
6040-
border: 1px solid transparent;
6132+
/* clean, no border */
60416133
}
60426134
.codex-git-file:hover {
60436135
border-color: var(--border);
@@ -6067,7 +6159,7 @@ p {
60676159
}
60686160

60696161
.codex-git-bottom-bar {
6070-
background: color-mix(in srgb, var(--bg-elevated) 95%, transparent);
6162+
background: var(--bg-elevated);
60716163
}
60726164

60736165
/* ─── Codex Layout: Header ───────────────────────────────── */

0 commit comments

Comments
 (0)