refactor: remove macOS vibrancy support and unify glass surfaces

Drops the macOS vibrancy toggle, IPC, and related settings copy
Updates dialogs, popovers, tooltips, and dropdowns to use shared glass styles
Adds sticky header fade behavior to model picker and sidebar lists
This commit is contained in:
Bohdan Triapitsyn
2026-08-10 15:10:37 +03:00
parent 90a16d1d44
commit 2c30af5807
36 changed files with 273 additions and 302 deletions
+3 -60
View File
@@ -52,63 +52,6 @@ button,
transition: background-color 180ms ease;
}
/* ── macOS vibrancy ───────────────────────────────────────────────────────
The window is created transparent with a native 'sidebar' NSVisualEffectView
behind it. We keep the whole app opaque (bg-background covers the window)
EXCEPT the left sidebar, which is the only translucent surface that lets the
native vibrancy show through. `data-oc-vibrancy` = vibrancy active;
`data-oc-vibrancy-ready` = native layer has settled (set from the main
process after show/restore) — until then the sidebar stays solid to avoid a
flash of raw transparency. */
html[data-oc-vibrancy] body,
html[data-oc-vibrancy] #root {
background: transparent !important;
background-color: transparent !important;
}
html[data-oc-vibrancy] .main-content-safe-area {
background: transparent !important;
background-color: transparent !important;
}
/* Left sidebar: solid until the native layer is ready, then a translucent
overlay so the vibrancy frosts through. */
html[data-oc-vibrancy] .oc-vibrancy-surface {
background: var(--sidebar) !important;
}
html[data-oc-vibrancy][data-oc-vibrancy-ready] .oc-vibrancy-surface {
background: var(--sidebar-vibrancy-overlay) !important;
}
/* Inner bg-sidebar elements inside the vibrant surface must not re-paint an
opaque fill, or they'd cover the frosted effect. */
html[data-oc-vibrancy] .oc-vibrancy-surface .bg-sidebar {
background: transparent !important;
background-color: transparent !important;
}
/* Project-actions pill over the open sidebar: drop its opaque surface so it
frosts to the exact same level as the sidebar (border keeps its outline). */
html[data-oc-vibrancy] .oc-vibrancy-pill {
background: transparent !important;
background-color: transparent !important;
}
/* Accessibility: drop translucency when the OS asks for reduced transparency. */
@media (prefers-reduced-transparency: reduce) {
html[data-oc-vibrancy] body,
html[data-oc-vibrancy] #root,
html[data-oc-vibrancy] .main-content-safe-area {
background: var(--surface-background) !important;
}
html[data-oc-vibrancy] .oc-vibrancy-surface,
html[data-oc-vibrancy][data-oc-vibrancy-ready] .oc-vibrancy-surface {
background: var(--sidebar) !important;
}
}
/* Ensure interactive controls consistently show pointer cursor */
:where(
button,
@@ -348,7 +291,7 @@ div[data-chat-input-footer="true"] {
);
}
/* Sticky-fade overlay (desktop sidebar): the crisp duplicate identity stays
/* Sticky-fade overlay: the crisp duplicate identity stays
mounted and its visibility is driven synchronously by the scroller's own
top-scroll data attribute — the same signal that engages the mask — so the
overlay appears in the exact frame the mask hides the real header (no blink).
@@ -358,8 +301,8 @@ div[data-chat-input-footer="true"] {
opacity: 0;
}
.oc-sticky-fade-root:has(.oc-sidebar-scroller[data-top-scroll="true"]) .oc-sticky-fade-overlay,
.oc-sticky-fade-root:has(.oc-sidebar-scroller[data-top-bottom-scroll="true"]) .oc-sticky-fade-overlay {
.oc-sticky-fade-root:has(.oc-sticky-fade-scroller[data-top-scroll="true"]) .oc-sticky-fade-overlay,
.oc-sticky-fade-root:has(.oc-sticky-fade-scroller[data-top-bottom-scroll="true"]) .oc-sticky-fade-overlay {
opacity: 1;
}