Files
33ed942c16 feat(update): add per-cluster quality safeguards (#855)
* feat(update): add per-input actions and pipeline transparency

Squash feature/cluster-update-quality onto upstream/develop.

Include request-local update policies, persisted input and cluster status, library rescan and target rebuild integration, and the update-card view. Align the M3U request regression with the existing Force capability.

* del(build): temporary dev changes

* fix(update): address playlist review findings

* fix(update): rename Shows to Series

* Playlist update refactor

* Playlist update refactor

---------

Co-authored-by: euzu <euzu@proton.me>
2026-09-14 16:44:23 +02:00

150 lines
4.3 KiB
SCSS

// Touch browsers can retain :hover and :focus after a tap. Keep that
// highlight for mouse pointers, while preserving keyboard focus everywhere.
@mixin text-button-highlight {
&:focus-visible {
@content;
}
@media (hover: hover) and (pointer: fine) {
&:focus,
&:hover {
@content;
}
}
}
.tp__text-button {
display: flex;
justify-content: center;
align-items: center;
fill: var(--menu-icon-color);
background-color: var(--text-button-background-color);
color: var(--text-button-color);
border: 1px solid var(--text-button-border-color);
border-radius: var(--border-radius);
backdrop-filter: blur(6px);
-webkit-backdrop-filter: blur(6px);
cursor: pointer;
box-sizing: border-box;
max-height: 3rem;
min-height: 2.5rem;
gap: var(--gap-default);
padding: 0 var(--padding-default);
font-weight: bold;
font-size: var(--font-size-norm);
position: relative;
overflow: hidden;
svg {
min-width: 1.5rem;
width: 1.5rem;
}
span {
pointer-events: none;
}
@include text-button-highlight {
background-color: var(--text-button-hover-background-color);
color: var(--text-button-hover-color);
outline: none;
}
@media (prefers-reduced-motion: no-preference) {
transition:
background-color 160ms ease,
color 160ms ease,
transform 120ms ease;
&::after {
content: "";
position: absolute;
inset: 0;
pointer-events: none;
border-radius: inherit;
background-image: radial-gradient(circle, currentColor 10%, transparent 10.5%);
background-position: center;
background-repeat: no-repeat;
opacity: 0;
transform: scale(12);
transition:
transform 0.5s ease,
opacity 0.8s ease;
}
&:active:not(.disabled) {
transform: scale(0.98);
&::after {
opacity: 0.18;
transform: scale(0);
transition: 0s;
}
}
}
}
.tp__text-button.primary:not(.active) {
background-color: var(--text-button-primary-background-color);
border-color: var(--text-button-primary-border-color);
color: var(--text-button-primary-color);
fill: var(--text-button-primary-color);
@include text-button-highlight {
background-color: var(--text-button-primary-hover-background-color);
color: var(--text-button-primary-hover-color);
fill: var(--text-button-primary-hover-color);
outline: none;
}
}
.tp__text-button.secondary:not(.active) {
background-color: var(--text-button-secondary-background-color);
border-color: var(--text-button-secondary-border-color);
color: var(--text-button-secondary-color);
fill: var(--text-button-secondary-color);
@include text-button-highlight {
background-color: var(--text-button-secondary-hover-background-color);
color: var(--text-button-secondary-hover-color);
fill: var(--text-button-secondary-hover-color);
outline: none;
}
}
.tp__text-button.tertiary:not(.active) {
background-color: var(--text-button-tertiary-background-color);
border-color: var(--text-button-tertiary-border-color);
color: var(--text-button-tertiary-color);
fill: var(--text-button-tertiary-color);
@include text-button-highlight {
background-color: var(--text-button-tertiary-hover-background-color);
color: var(--text-button-tertiary-hover-color);
fill: var(--text-button-tertiary-hover-color);
outline: none;
}
}
.tp__text-button.active,
.tp__text-button.primary.active,
.tp__text-button.secondary.active,
.tp__text-button.tertiary.active {
background-color: var(--text-button-active-background-color);
border-color: var(--text-button-active-border-color);
color: var(--text-button-active-color);
fill: var(--text-button-active-color);
@include text-button-highlight {
background-color: var(--text-button-active-hover-background-color);
border-color: var(--text-button-active-border-color);
color: var(--text-button-active-hover-color);
fill: var(--text-button-active-hover-color);
outline: none;
}
}
.tp__text-button.primary.disabled,
.tp__text-button.secondary.disabled,
.tp__text-button.disabled {
border-color: var(--text-button-disabled-border-color);
background-color: var(--text-button-disabled-background-color);
color: var(--text-button-disabled-color);
fill: var(--text-button-disabled-color);
}