Skip to content

Commit 3771570

Browse files
committed
UI: flatter, more native-macOS look across panes
- Drop the heavy borders that made the app feel Total-Commander-ish: function-key bar top border, selection info top border, file-pane outer outline, path bar / tab bar bottom borders, column-header borders - New `--color-bg-info-bar` token (darker in light, lighter in dark) for the `SelectionInfo` band so it lifts off the function-key bar below - Column headers now use `--color-bg-secondary` (same as tabs and path bar); `SortableHeader` gets `--radius-sm` + 100 ms hover transition - Tab bar background back to `--color-bg-secondary`; tabs sit flush with the window title bar (no more 3 px spacer) - Pane resizer widened from 5 px to 4 px and the file-pane outline removed so the divider is uniform at both the tabs and panes levels - Cursor row picks up `--radius-sm`; disk-usage fill rounds its right edge - `data-size-colors='none'` and cursor-row both collapse the size-tier "selected" gradient to `--color-selection-fg` so name/ext/size/date stay one color - 100 ms hover transitions on column headers, F-bar buttons, tab close button, volume breadcrumb, breadcrumb options trigger, pane resizer - F2/F3/…/F8 `kbd` chips lose their background - Drop the now-unused `--color-bg-header` token
1 parent a093e1a commit 3771570

11 files changed

Lines changed: 62 additions & 38 deletions

File tree

apps/desktop/src/app.css

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@
1515
--color-bg-primary: #ffffff;
1616
--color-bg-secondary: #f5f5f5;
1717
--color-bg-tertiary: #e8e8e8;
18-
--color-bg-header: #f0f0f0;
18+
/* Status-bar surface that contrasts gently with `--color-bg-secondary`.
19+
Light: a touch darker than secondary. Dark: a touch lighter. Used by
20+
`SelectionInfo` so the status band reads as distinct from the
21+
function-key bar below (which keeps `--color-bg-secondary`). */
22+
--color-bg-info-bar: #ececec;
1923

2024
/* === Borders === */
2125
--color-border-strong: #bbb;
@@ -316,13 +320,20 @@
316320
}
317321

318322
/* === Size tier palette: None ===
319-
All tiers fall back to the secondary text color (no coloring). */
323+
All tiers fall back to the secondary text color (no coloring). The
324+
selected variants also flatten so a selected row doesn't fall back to
325+
the gradient otherwise baked into `--color-size-*-selected`. */
320326
:root[data-size-colors='none'] {
321327
--color-size-bytes: var(--color-text-secondary);
322328
--color-size-kb: var(--color-text-secondary);
323329
--color-size-mb: var(--color-text-secondary);
324330
--color-size-gb: var(--color-text-secondary);
325331
--color-size-tb: var(--color-text-secondary);
332+
--color-size-bytes-selected: var(--color-selection-fg);
333+
--color-size-kb-selected: var(--color-selection-fg);
334+
--color-size-mb-selected: var(--color-selection-fg);
335+
--color-size-gb-selected: var(--color-selection-fg);
336+
--color-size-tb-selected: var(--color-selection-fg);
326337
}
327338

328339
/* === Date age palette: Wilting (light) ===
@@ -451,7 +462,9 @@
451462
--color-bg-primary: #1e1e1e;
452463
--color-bg-secondary: #2a2a2a;
453464
--color-bg-tertiary: #333333;
454-
--color-bg-header: #252525;
465+
/* Dark mode: lighter than secondary (opposite of light mode) so the
466+
status band lifts away from the function-key bar below. */
467+
--color-bg-info-bar: #323232;
455468

456469
/* === Borders === */
457470
--color-border-strong: #555555;

apps/desktop/src/lib/file-explorer/navigation/VolumeBreadcrumb.svelte

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,7 @@
659659
display: inline-flex;
660660
align-items: center;
661661
gap: var(--spacing-xs);
662+
transition: background-color var(--transition-fast);
662663
}
663664
664665
.volume-name:hover {
@@ -1108,6 +1109,9 @@
11081109
align-items: center;
11091110
gap: var(--spacing-xs);
11101111
margin-left: var(--spacing-xxs);
1112+
transition:
1113+
background-color var(--transition-fast),
1114+
color var(--transition-fast);
11111115
}
11121116
11131117
.breadcrumb-options-trigger:hover,

apps/desktop/src/lib/file-explorer/pane/FilePane.svelte

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2571,13 +2571,11 @@
25712571
display: flex;
25722572
flex-direction: column;
25732573
overflow: hidden;
2574-
border: 1px solid var(--color-border-strong);
25752574
}
25762575
25772576
.header {
25782577
padding: var(--spacing-xxs) var(--spacing-sm);
25792578
background-color: var(--color-bg-secondary);
2580-
border-bottom: 1px solid var(--color-border-strong);
25812579
font-size: var(--font-size-sm);
25822580
white-space: nowrap;
25832581
display: flex;
@@ -2597,6 +2595,7 @@
25972595
height: 100%;
25982596
transition: none;
25992597
pointer-events: none;
2598+
border-radius: 0 var(--radius-xs) var(--radius-xs) 0;
26002599
}
26012600
26022601
.path {

apps/desktop/src/lib/file-explorer/pane/FunctionKeyBar.svelte

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@
104104
display: flex;
105105
flex-shrink: 0;
106106
background: var(--color-bg-secondary);
107-
border-top: 1px solid var(--color-border-strong);
108107
}
109108
110109
button {
@@ -120,6 +119,7 @@
120119
font-family: var(--font-system) sans-serif;
121120
font-size: var(--font-size-sm);
122121
color: var(--color-text-primary);
122+
transition: background-color var(--transition-fast);
123123
}
124124
125125
button:last-child {
@@ -138,9 +138,7 @@
138138
kbd {
139139
font-family: var(--font-system) sans-serif;
140140
font-size: var(--font-size-xs);
141-
background: var(--color-bg-tertiary);
142141
color: var(--color-text-secondary);
143-
border-radius: var(--radius-sm);
144142
/* stylelint-disable-next-line declaration-property-value-disallowed-list */
145143
padding: 1px var(--spacing-xs);
146144
}

apps/desktop/src/lib/file-explorer/pane/PaneResizer.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,14 @@
5555

5656
<style>
5757
.pane-resizer {
58-
width: 5px;
58+
width: 4px;
5959
cursor: col-resize;
6060
display: flex;
6161
align-items: center;
6262
justify-content: center;
6363
background: var(--color-border-strong);
6464
flex-shrink: 0;
65-
transition: background-color var(--transition-base);
65+
transition: background-color var(--transition-fast);
6666
}
6767
6868
.pane-resizer:hover,

apps/desktop/src/lib/file-explorer/selection/SelectionInfo.svelte

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -302,8 +302,7 @@
302302
font-family: var(--font-system), sans-serif;
303303
font-size: calc(var(--font-size-sm) * 0.95);
304304
color: var(--color-text-secondary);
305-
background-color: var(--color-bg-secondary);
306-
border-top: 1px solid var(--color-border-strong);
305+
background-color: var(--color-bg-info-bar);
307306
min-height: 1.5em;
308307
}
309308

apps/desktop/src/lib/file-explorer/selection/SortableHeader.svelte

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,16 @@
5454
margin: 0 calc(-1 * var(--spacing-xs));
5555
background: transparent;
5656
border: none;
57+
border-radius: var(--radius-sm);
5758
font: inherit;
5859
font-size: var(--font-size-sm);
5960
color: var(--color-text-secondary);
6061
white-space: nowrap;
6162
text-align: left;
6263
height: 100%;
64+
transition:
65+
background-color var(--transition-fast),
66+
color var(--transition-fast);
6367
}
6468
6569
.sortable-header:hover {

apps/desktop/src/lib/file-explorer/tabs/CLAUDE.md

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,12 @@ Per-pane tab system for the dual-pane file explorer. Each pane side (left/right)
1313

1414
## Key decisions
1515

16-
**Decision**: Tabs fill the entire bar height (`.tab { height: var(--spacing-tab-bar-height) }`) and the bar carries a
17-
non-scaled `padding-top: 3px` to push the colored top of the active tab below the (fixed-height) window title-bar.
18-
**Why**: tab and bar heights both scale with `--font-scale`, so any constant gap between them would scale too, making
19-
the colored top edge drift visibly across text sizes. Locking the tab to bar height eliminates the proportional gap; the
20-
3 px padding gives the static breathing room between title-bar and tab top, hidden inside the bar's own `bg-secondary`
21-
so it reads as a continuous strip. The active tab is `bar-height + 1px` with `margin-bottom: -1px` to cover the bar's
22-
bottom border (unchanged from the historical pattern).
16+
**Decision**: Tabs sit flush with the window title-bar — no top spacer. Tab and bar both use `--spacing-tab-bar-height`.
17+
**Why**: a fixed pixel spacer (e.g. `padding-top: 3px`) on the bar created a visible gap above the active tab; the user
18+
wants the colored top edge of the active tab to touch the title-bar at every text scale. With matching heights and
19+
`align-items: end`, tabs naturally land at the bar's bottom edge with no extra offset. The active tab still uses
20+
`bar-height + 1px` with `margin-bottom: -1px` so it hangs 1 px into the path bar below (covers any 1 px seam at the
21+
bar's lower edge).
2322

2423
**Decision**: Cold load on tab switch via `{#key activeTabId}`: destroys and recreates FilePane, no warm cache **Why**:
2524
Keeping inactive tabs alive would mean multiple FilePanes with active file watchers, listing caches, and scroll state in

apps/desktop/src/lib/file-explorer/tabs/TabBar.svelte

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -155,20 +155,14 @@
155155
.tab-bar {
156156
display: flex;
157157
align-items: end;
158-
/* Total height = scaled tab band + 3 px non-scaled top spacer.
159-
* The spacer is bg-secondary (same as the bar), so it visually reads
160-
* as a slim continuation of the (fixed-height) window title-bar above.
161-
* Tabs anchor to the bar's content-area bottom (align-items: end);
162-
* with `box-sizing: border-box`, the padding-top reduces the content
163-
* area to exactly `--spacing-tab-bar-height`, so the colored top edge
164-
* of the active tab sits 3 px below the title-bar at every scale. */
165-
height: calc(var(--spacing-tab-bar-height) + 3px);
166-
min-height: calc(var(--spacing-tab-bar-height) + 3px);
167-
max-height: calc(var(--spacing-tab-bar-height) + 3px);
158+
/* Tabs sit flush with the window title-bar — no top spacer. Tabs
159+
* anchor to the bar's content-area bottom (align-items: end) and
160+
* match the bar height exactly via `--spacing-tab-bar-height`. */
161+
height: var(--spacing-tab-bar-height);
162+
min-height: var(--spacing-tab-bar-height);
163+
max-height: var(--spacing-tab-bar-height);
168164
background-color: var(--color-bg-secondary);
169-
border-bottom: 1px solid var(--color-border);
170-
/* stylelint-disable-next-line declaration-property-value-disallowed-list -- 3px is a deliberate non-scaling visual offset, no spacing token fits */
171-
padding: 3px var(--spacing-xxs) 0;
165+
padding: 0 var(--spacing-xxs);
172166
overflow: hidden;
173167
}
174168
@@ -317,7 +311,10 @@
317311
line-height: 1;
318312
color: var(--color-text-tertiary);
319313
opacity: 0;
320-
transition: opacity var(--transition-fast);
314+
transition:
315+
opacity var(--transition-fast),
316+
background-color var(--transition-fast),
317+
color var(--transition-fast);
321318
}
322319
323320
/* Show close button on tab hover or when tab is active */

apps/desktop/src/lib/file-explorer/views/BriefList.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -917,8 +917,7 @@
917917
.header-row {
918918
display: flex;
919919
height: calc(22px * var(--font-scale));
920-
background: var(--color-bg-header);
921-
border-bottom: 1px solid var(--color-border);
920+
background: var(--color-bg-secondary);
922921
flex-shrink: 0;
923922
padding: 0 var(--spacing-xs);
924923
}
@@ -1026,6 +1025,7 @@
10261025
/* Faint accent-colored hairline outlining the cursor row. See
10271026
FullList.svelte for the rationale. */
10281027
box-shadow: inset 0 0 0 1px var(--color-cursor-outline);
1028+
border-radius: var(--radius-sm);
10291029
}
10301030
10311031
.brief-list-container.is-focused .file-entry.is-under-cursor {

0 commit comments

Comments
 (0)