feat: sidebar cleanup + fixes

This commit is contained in:
2026-07-21 09:20:53 +09:30
parent c439d8d88f
commit e732011f1e
11 changed files with 218 additions and 230 deletions
+30 -27
View File
@@ -635,16 +635,14 @@ html.bsplus-custom-sidebar-pending #menu > .icon-cover,
clip: rect(0, 0, 0, 0) !important;
}
/* Custom Svelte sidebar: SEQTA-like `#menu > ul > li.item` / `.sub` for theme CSS. */
/* Custom Svelte sidebar: keep `#menu > ul > li.item` / `.sub` shape for theme CSS. */
#menu.bsplus-custom-sidebar {
/* SEQTA uses absolute top/bottom:0 — do not switch to relative or height collapses. */
position: absolute !important;
top: 0 !important;
bottom: 0 !important;
left: 0 !important;
display: flex !important;
flex-direction: column !important;
/* No padding-top: logo `ul::before` + theme `.sub { top: 71.5px }` match native. */
box-sizing: border-box !important;
height: auto !important;
max-height: none !important;
@@ -659,23 +657,20 @@ html.bsplus-custom-sidebar-pending #menu > .icon-cover,
position: relative;
}
/* Theme drill panels assume static hasChildren + absolute .sub filling #menu. */
li.hasChildren {
position: static !important;
}
/*
* Native SEQTA leaves `li.hasChildren.active` on the hidden list after click-through.
* Global `#menu:has(> ul > li.hasChildren.active) > ul > li:not(.hasChildren.active)`
* then sets pointer-events:none on our custom root rows. Override that here; drill
* locking only follows the custom list's own active folder.
*/
/* Native list may keep `.active` after click-through; force our rows clickable,
then lock siblings only while a custom drill `.sub` is open. */
> #bsplus-sidebar-root > li.item {
pointer-events: auto !important;
width: auto !important;
max-width: none !important;
margin: 2px 6px !important;
box-sizing: border-box !important;
}
/* Only lock siblings while a drill `.sub` is open — not when a folder is
merely route-highlighted with `.active` at the root list. */
&:has(> #bsplus-sidebar-root > li.hasChildren.active > .sub)
> #bsplus-sidebar-root
> li:not(.hasChildren.active),
@@ -692,40 +687,42 @@ html.bsplus-custom-sidebar-pending #menu > .icon-cover,
> #bsplus-sidebar-root li.hasChildren.active > .sub {
pointer-events: auto;
/* Let the #menu chrome (gradient / theme) show through — themes often paint
`.sub` with flat `--background-primary` which reads as a white slab. */
background: transparent !important;
background-image: none !important;
animation: bsplus-submenu-enter 0.32s cubic-bezier(0.22, 1, 0.36, 1);
}
> #bsplus-sidebar-root li.hasChildren.active > .sub:has(.hasChildren.active) {
pointer-events: none !important;
animation: none;
}
> #bsplus-sidebar-root li.hasChildren.active .hasChildren.active > .sub {
pointer-events: auto !important;
background: transparent !important;
background-image: none !important;
}
/* One-shot enter — not tied to `.active` (SEQTA strips/restores that on every
nested click, which would restart the animation). */
> #bsplus-sidebar-root .sub.bsplus-sub-enter {
animation: bsplus-submenu-enter 0.32s cubic-bezier(0.22, 1, 0.36, 1);
}
/* Keep folder + leaf rows on the same rhythm (themes often only style
`:not(.hasChildren)`, which left folders centred / differently spaced). */
> #bsplus-sidebar-root li.item {
width: auto !important;
max-width: none !important;
margin: 2px 6px !important;
box-sizing: border-box !important;
}
/* Folder label stays in flow so sidebar-animation translateX can run.
Visually covered by the absolute `.sub` panel. */
> #bsplus-sidebar-root > li.hasChildren.active > label {
pointer-events: none !important;
}
/* Theme decorations on root leaves (Beach palm/sand) must not show through
the transparent drill `.sub` panel. */
> #bsplus-sidebar-root:has(> li.hasChildren.active > .sub)
> li:not(.hasChildren.active)::before,
> #bsplus-sidebar-root:has(> li.hasChildren.active > .sub)
> li:not(.hasChildren.active)::after {
content: none !important;
display: none !important;
animation: none !important;
opacity: 0 !important;
}
#bsplus-sidebar-root .sub .back {
display: flex;
align-items: center;
@@ -849,6 +846,12 @@ body.icon-only-sidebar:not(:has(#menu li.hasChildren.active)) {
display: none !important;
}
/* Compact BetterSEQTA mark instead of the full wordmark. */
&.student #menu > ul::before {
background-size: 36px 36px !important;
background-position: center center !important;
}
}
[class*="notifications__items___"] {
-ms-overflow-style: none !important;
+5 -1
View File
@@ -8,12 +8,16 @@
}
#menu > ul:has(li.hasChildren.active) > li::before,
#menu > ul:has(li.hasChildren.active) > li::after,
#menu > ul ul:has(li.hasChildren.active) > li::before,
#menu > ul ul:has(li.hasChildren.active) > li::after,
#menu > ul:has(li.hasChildren.active) > li > label,
#menu > ul:has(li.hasChildren.active) > li > svg,
#menu > ul ul:has(li.hasChildren.active) > li > label,
#menu > ul ul:has(li.hasChildren.active) > li > svg {
transform: translateX(-320px);
/* !important beats theme animations (e.g. Beach palm-slide forwards). */
transform: translateX(-320px) !important;
animation: none !important;
}
#menu li.hasChildren:not(.active) li .sub {