A pin on the title bar, and no more notch
Pointing at a tile's top edge already brings its bar back, which left the notch doing half a job: it could still hide a bar, but hiding one tile at a time stopped being the interesting question once the whole dashboard could fold its bars at once. It is gone. In its place, a pin beside each tile's label. Pinned, that tile keeps its bar while auto-hide is on — for the one or two tiles whose controls are wanted at a glance. It sits next to the label rather than out with the gear and ✕ because it is about the bar, not about the tile's contents, and it stays faint until the tile is pointed at or the pin is on, so a wall of unpinned tiles is not a wall of pins. Fullscreen keeps its own rule: every bar folds, pinned or not, because that is a mode for watching. What it loses with the notch it gets back better — the same hover at a tile's top edge peeks a bar there too, and now as an overlay, so peeking no longer pushes the tile's content down and disturbs the auto-fit. The peek timer the notch needed goes with it. Per-tile `headHidden` gives way to `headPinned` in the layout, on disk and on the server. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
68f0ba806d
commit
7f50fa0ba9
+31
-56
@@ -284,7 +284,7 @@ body.menu-hidden #topbar {
|
||||
Pointing at the tile's top edge slides it back in over the content
|
||||
(shell.js adds .head-peek) — and because it is the same element, its
|
||||
buttons click and its width drags the tile just as they always did. */
|
||||
body:not(.fullscreen) .tile.head-off > .tile-head {
|
||||
.tile.head-off > .tile-head {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
@@ -298,17 +298,14 @@ body:not(.fullscreen) .tile.head-off > .tile-head {
|
||||
pointer-events: none;
|
||||
transition: transform 0.18s ease, opacity 0.18s ease;
|
||||
}
|
||||
body:not(.fullscreen) .tile.head-off.head-peek > .tile-head {
|
||||
.tile.head-off.head-peek > .tile-head {
|
||||
transform: none;
|
||||
opacity: 1;
|
||||
pointer-events: auto;
|
||||
}
|
||||
body:not(.fullscreen) .tile.is-tinted.head-off > .tile-head {
|
||||
.tile.is-tinted.head-off > .tile-head {
|
||||
background: color-mix(in srgb, var(--tile-tint) 20%, var(--panel));
|
||||
}
|
||||
/* Auto-hide already reveals on hover, so the notch would be a dead control;
|
||||
a bar this tile hid by itself keeps its notch, which is how it comes back. */
|
||||
body.autohide-heads .tile-notch { display: none; }
|
||||
|
||||
.tile-head .dot {
|
||||
flex: none;
|
||||
@@ -323,7 +320,7 @@ body.autohide-heads .tile-notch { display: none; }
|
||||
.tile-head .dot.error { background: var(--danger); }
|
||||
|
||||
.tile-title {
|
||||
flex: 1;
|
||||
flex: 0 1 auto;
|
||||
min-width: 0;
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
@@ -354,6 +351,33 @@ body.autohide-heads .tile-notch { display: none; }
|
||||
.tile-btn.is-open,
|
||||
.tile-btn.is-open:hover { background: var(--accent); color: var(--accent-text); }
|
||||
|
||||
/* The pin: a state, not an action, so it stays quiet until it is on and
|
||||
sits closer to the label than to the buttons at the other end. It fades
|
||||
in with the rest of the tile's chrome so a wall of unpinned tiles is not
|
||||
a wall of pins. */
|
||||
.tile-btn.pin {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
margin-left: 2px;
|
||||
opacity: 0;
|
||||
transition: opacity 0.15s ease;
|
||||
}
|
||||
.tile-btn.pin svg { width: 12px; height: 12px; }
|
||||
.tile:hover .tile-btn.pin,
|
||||
.tile-btn.pin:focus-visible { opacity: 0.75; }
|
||||
.tile-btn.pin:hover { opacity: 1; }
|
||||
/* Pinned reads at a glance, whether or not anything is being pointed at. */
|
||||
.tile-btn.pin.is-pinned,
|
||||
.tile:hover .tile-btn.pin.is-pinned {
|
||||
opacity: 1;
|
||||
color: var(--accent);
|
||||
}
|
||||
.tile-btn.pin.is-pinned .pin-head { fill: currentColor; }
|
||||
.tile-btn.pin.is-pinned:hover { background: var(--border); }
|
||||
|
||||
/* Keeps the label hugging its pin however wide the tile is. */
|
||||
.tile-head-gap { flex: 1 1 auto; min-width: 0; }
|
||||
|
||||
/* the shell's tooltip: shown at once under the button the pointer is on */
|
||||
#tip {
|
||||
position: fixed;
|
||||
@@ -407,55 +431,6 @@ body.autohide-heads .tile-notch { display: none; }
|
||||
}
|
||||
.tile-menu[hidden] { display: none; }
|
||||
|
||||
/* notch on the title bar's bottom edge: click to hide/show the bar
|
||||
(same idea as the ProdCom Listener's pull-down menubar handle) */
|
||||
.tile-notch {
|
||||
position: absolute;
|
||||
top: 32px;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
width: 46px;
|
||||
height: 13px;
|
||||
padding: 0;
|
||||
background: var(--panel);
|
||||
border: 1px solid var(--border);
|
||||
border-top: none;
|
||||
border-radius: 0 0 10px 10px;
|
||||
cursor: pointer;
|
||||
z-index: 6;
|
||||
opacity: 0;
|
||||
transition: opacity 0.15s ease, top 0.22s ease;
|
||||
}
|
||||
.tile:hover .tile-notch { opacity: 0.6; }
|
||||
.tile .tile-notch:hover { opacity: 1; }
|
||||
body:not(.fullscreen) .tile.head-off .tile-notch { top: 0; }
|
||||
.tile-notch::after {
|
||||
content: "";
|
||||
display: block;
|
||||
width: 18px;
|
||||
height: 3px;
|
||||
margin: 4px auto 0;
|
||||
border-radius: 999px;
|
||||
background: var(--muted);
|
||||
}
|
||||
.tile-notch:hover::after { background: var(--text); }
|
||||
|
||||
/* Fullscreen is for watching, not arranging: every title bar folds away, and
|
||||
a tile's own hidden/shown preference is left untouched for when the screen
|
||||
comes back. The notch still peeks one open, and it folds back once the
|
||||
pointer has been off that tile for a while (PEEK_HIDE_MS in shell.js). */
|
||||
body.fullscreen .tile:not(.head-peek) .tile-head {
|
||||
height: 0;
|
||||
border-bottom-width: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
body.fullscreen .tile:not(.head-peek) .tile-notch { top: 0; }
|
||||
body.fullscreen .tile.head-peek .tile-head {
|
||||
height: 32px;
|
||||
border-bottom-width: 1px;
|
||||
}
|
||||
body.fullscreen .tile.head-peek .tile-notch { top: 32px; }
|
||||
|
||||
.tile-body {
|
||||
flex: 1;
|
||||
position: relative;
|
||||
|
||||
Reference in New Issue
Block a user