Apply the Nocturne fidelity pass to the web UI

This commit is contained in:
Fisto
2026-09-21 19:31:29 +02:00
parent 267c31337c
commit a4d61781e9
10 changed files with 1336 additions and 100 deletions
+134 -73
View File
@@ -6,7 +6,7 @@
right: 0;
top: var(--media-top, 50px);
bottom: 0;
/* Below the settings slide-over (80); media modals stay above it. */
/* Chrome 40 · media 70 · settings 1000 · settings dialogs 1050 · toasts 1100 */
z-index: 70;
display: flex;
background: var(--color-bg);
@@ -38,7 +38,7 @@
.vk-media-title {
flex: 1;
font-weight: 600;
font-weight: 500;
}
.vk-media-toolbar {
@@ -71,7 +71,7 @@
gap: 6px;
aspect-ratio: 1;
overflow: hidden;
border-radius: var(--radius-sm, 6px);
border-radius: var(--radius-sm);
background: var(--color-neutral-900);
box-shadow: inset 0 0 0 1px var(--color-neutral-800);
color: var(--color-neutral-300);
@@ -99,7 +99,7 @@
justify-content: center;
aspect-ratio: 1;
overflow: hidden;
border-radius: var(--radius-sm, 6px);
border-radius: var(--radius-sm);
background: var(--color-neutral-900);
box-shadow: inset 0 0 0 1px var(--color-neutral-800);
cursor: pointer;
@@ -124,10 +124,10 @@
position: absolute;
top: 4px;
left: 6px;
font: 600 10px/1 ui-monospace, Menlo, monospace;
font: 500 10px/1 ui-monospace, Menlo, monospace;
letter-spacing: 0.08em;
color: rgba(255, 255, 255, 0.75);
text-shadow: 0 0 3px rgba(0, 0, 0, 0.8);
color: var(--color-neutral-100);
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.85);
pointer-events: none;
}
@@ -137,8 +137,8 @@
right: 6px;
font-size: 20px;
line-height: 1;
color: rgba(255, 255, 255, 0.72);
text-shadow: 0 0 3px rgba(0, 0, 0, 0.8);
color: var(--color-neutral-100);
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.85);
cursor: pointer;
}
@@ -149,7 +149,7 @@
max-height: 46vh;
overflow-y: auto;
padding: 10px 12px;
border-radius: var(--radius-sm, 6px);
border-radius: var(--radius-sm);
background: var(--color-neutral-900);
box-shadow: inset 0 0 0 1px var(--color-neutral-800);
}
@@ -212,7 +212,7 @@
flex-direction: column;
gap: 4px;
padding: 8px 10px;
border-radius: var(--radius-sm, 6px);
border-radius: var(--radius-sm);
background: var(--color-bg);
box-shadow: inset 0 0 0 1px var(--color-neutral-800);
}
@@ -258,14 +258,14 @@
.vk-media-viewer-media video {
max-width: 100%;
max-height: 100%;
border-radius: var(--radius-sm, 6px);
border-radius: var(--radius-sm);
}
.vk-media-viewer-media iframe {
width: min(880px, 100%);
aspect-ratio: 16 / 9;
border: 0;
border-radius: var(--radius-sm, 6px);
border-radius: var(--radius-sm);
}
.vk-media-viewer.vertical .vk-media-viewer-media {
@@ -297,7 +297,7 @@
padding: 0;
border: none;
background: none;
color: var(--color-accent-400, #7aa2ff);
color: var(--color-accent-300);
font: inherit;
text-align: left;
cursor: pointer;
@@ -310,9 +310,9 @@
}
.vk-media-card-kind {
font: 600 10px/1 ui-monospace, Menlo, monospace;
font: 500 10px/1 ui-monospace, Menlo, monospace;
letter-spacing: 0.08em;
color: var(--color-accent-400, var(--color-neutral-300));
color: var(--color-accent-300);
}
.vk-media-card-name {
@@ -354,7 +354,7 @@
border-radius: 50%;
background: var(--color-neutral-800);
color: var(--color-neutral-300);
font: 600 9px/1 ui-monospace, Menlo, monospace;
font: 500 9px/1 ui-monospace, Menlo, monospace;
cursor: help;
}
@@ -362,7 +362,7 @@
width: 90px;
padding: 3px 6px;
border: none;
border-radius: var(--radius-sm, 6px);
border-radius: var(--radius-sm);
background: var(--color-neutral-900);
color: var(--color-neutral-200);
box-shadow: inset 0 0 0 1px var(--color-neutral-800);
@@ -384,23 +384,23 @@
}
.vk-seg-image {
background: #4f8cff;
background: var(--color-data-1);
}
.vk-seg-gif {
background: #8a6cff;
background: var(--color-data-2);
}
.vk-seg-video {
background: #ff7a45;
background: var(--color-data-3);
}
.vk-seg-audio {
background: #2fbf71;
background: var(--color-data-4);
}
.vk-seg-other {
background: #6b7280;
background: var(--color-data-5);
}
.vk-media-modal {
@@ -424,7 +424,7 @@
gap: 10px;
width: min(520px, 92vw);
padding: 14px;
border-radius: var(--radius-lg, 12px);
border-radius: var(--radius-lg);
background: var(--color-bg);
box-shadow: inset 0 0 0 1px var(--color-neutral-800);
}
@@ -465,7 +465,8 @@
.vk-media-tree-head {
padding: 6px 8px;
border: none;
border-radius: var(--radius-sm, 6px);
border-radius: var(--radius-sm);
cursor: pointer;
background: var(--color-neutral-900);
color: var(--color-neutral-200);
font: 500 12px/1.2 inherit;
@@ -510,7 +511,7 @@
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--color-accent-400, #4f8cff);
background: var(--color-accent-400);
animation: vk-media-pulse 1.2s ease-in-out infinite;
}
@@ -531,21 +532,22 @@
}
.vk-media-error {
color: #ff8080;
color: var(--color-danger-300);
}
/* Tinted, not flooded — and 10px so the count is actually readable. */
.vk-media-badge {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 14px;
height: 14px;
min-width: 16px;
height: 16px;
margin-left: 4px;
padding: 0 4px;
border-radius: 7px;
background: #e5484d;
color: #fff;
font: 600 9px/1 ui-monospace, Menlo, monospace;
border-radius: 8px;
background: var(--color-danger-800);
color: var(--color-danger-200);
font: 500 10px/1 ui-monospace, Menlo, monospace;
}
/* Bot tab: backfill jobs, stats, and settings. */
@@ -565,11 +567,11 @@
.vk-bot-limited {
padding: 8px 10px;
border-radius: 6px;
font: 500 11px/1.4 ui-monospace, Menlo, monospace;
color: #ffb0b0;
background: color-mix(in srgb, #ff5555 14%, transparent);
border: 1px solid color-mix(in srgb, #ff5555 35%, transparent);
border-radius: var(--radius-sm);
font: 400 11px/1.4 ui-monospace, Menlo, monospace;
color: var(--color-danger-200);
background: var(--color-danger-900);
box-shadow: inset 0 0 0 1px var(--color-danger-700);
}
.vk-bot-limited[hidden] {
@@ -577,8 +579,8 @@
}
.vk-bot-section {
border: 1px solid var(--color-divider);
border-radius: 6px;
box-shadow: inset 0 0 0 1px var(--color-neutral-800);
border-radius: var(--radius-md);
padding: 8px 10px;
background: var(--color-surface);
}
@@ -592,7 +594,7 @@
}
.vk-bot-title {
font-weight: 600;
font-weight: 500;
font-size: 12px;
}
@@ -625,8 +627,8 @@
}
.vk-bot-job {
border: 1px solid var(--color-neutral-800);
border-radius: 5px;
box-shadow: inset 0 0 0 1px var(--color-neutral-800);
border-radius: var(--radius-sm);
padding: 6px 8px;
display: flex;
flex-direction: column;
@@ -634,7 +636,7 @@
}
.vk-bot-job-running {
border-color: color-mix(in srgb, var(--color-accent, #4f8cff) 45%, transparent);
box-shadow: inset 0 0 0 1px var(--color-accent-700);
}
.vk-bot-job-head {
@@ -646,7 +648,7 @@
.vk-bot-job-title {
flex: 1;
font-weight: 600;
font-weight: 500;
font-size: 11px;
}
@@ -656,27 +658,28 @@
}
.vk-bot-state {
font: 600 10px/1.4 ui-monospace, Menlo, monospace;
font: 500 10px/1.4 ui-monospace, Menlo, monospace;
letter-spacing: 0.06em;
text-transform: uppercase;
padding: 0 5px;
border-radius: 3px;
padding: 1px 6px;
border-radius: var(--radius-sm);
background: var(--color-neutral-800);
color: var(--color-neutral-300);
}
.vk-bot-state-running {
background: color-mix(in srgb, var(--color-accent, #4f8cff) 25%, transparent);
color: var(--color-accent-300, #9fc1ff);
background: var(--color-accent-900);
color: var(--color-accent-200);
}
.vk-bot-state-paused {
background: color-mix(in srgb, #ffaa33 20%, transparent);
color: #ffc880;
background: var(--color-warn-900);
color: var(--color-warn-200);
}
.vk-bot-state-done {
background: color-mix(in srgb, #44cc88 20%, transparent);
color: #8fe0b8;
background: var(--color-ok-900);
color: var(--color-ok-200);
}
.vk-bot-job-member {
@@ -687,14 +690,14 @@
.vk-bot-progress {
height: 4px;
border-radius: 2px;
border-radius: var(--radius-sm);
background: var(--color-neutral-800);
overflow: hidden;
}
.vk-bot-progress-fill {
height: 100%;
background: var(--color-accent-400, #4f8cff);
background: var(--color-accent-400);
}
.vk-bot-job-actions {
@@ -710,7 +713,7 @@
.vk-bot-group-title {
cursor: pointer;
font: 600 11px/1.6 ui-monospace, Menlo, monospace;
font: 500 11px/1.6 ui-monospace, Menlo, monospace;
color: var(--color-neutral-300);
}
@@ -739,11 +742,11 @@
}
.vk-media-limited {
color: #ff8080;
color: var(--color-danger-300);
}
.vk-media-done-note {
color: color-mix(in srgb, var(--color-neutral-400) 55%, transparent);
color: var(--color-neutral-500);
font-style: italic;
}
@@ -754,7 +757,7 @@
.vk-bot-eta {
cursor: help;
text-decoration: underline dotted color-mix(in srgb, var(--color-neutral-400) 60%, transparent);
text-decoration: underline dotted var(--color-neutral-600);
}
/* Stream buffer: scrollable room while the next page loads. */
@@ -778,7 +781,7 @@
/* Advanced drawer: the "Do not include" group. */
.vk-media-exclude-title {
cursor: pointer;
font: 600 11px/1.6 ui-monospace, Menlo, monospace;
font: 500 11px/1.6 ui-monospace, Menlo, monospace;
color: var(--color-neutral-300);
}
@@ -800,8 +803,8 @@
/* The YouTube title catch-up lane, inside the Bot tab backfill section. */
.vk-bot-lane {
border: 1px dashed var(--color-neutral-700);
border-radius: 5px;
box-shadow: inset 0 0 0 1px var(--color-neutral-800);
border-radius: var(--radius-sm);
padding: 6px 8px;
margin-bottom: 8px;
display: flex;
@@ -814,15 +817,15 @@
}
.vk-bot-progress-cached {
background: var(--color-accent-400, #4f8cff);
background: var(--color-accent-400);
}
.vk-bot-progress-pending {
background: var(--color-neutral-700);
background: var(--color-neutral-800);
}
.vk-bot-progress-failed {
background: #c04040;
background: var(--color-danger-700);
}
.vk-bot-history {
@@ -830,20 +833,20 @@
}
.vk-bot-history-title {
font: 600 11px/1.6 ui-monospace, Menlo, monospace;
font: 500 11px/1.6 ui-monospace, Menlo, monospace;
color: var(--color-neutral-300);
margin-bottom: 2px;
}
.vk-bot-history-entry {
font: 400 10px/1.5 ui-monospace, Menlo, monospace;
color: var(--color-neutral-500);
color: var(--color-neutral-400);
}
.vk-bot-hint {
margin-top: 8px;
font: 400 10px/1.5 ui-monospace, Menlo, monospace;
color: var(--color-neutral-500);
color: var(--color-neutral-400);
}
/* Infinite/page toggle and pager. */
@@ -856,7 +859,7 @@
.vk-media-toggle {
display: inline-flex;
border: 1px solid var(--color-divider);
border-radius: 5px;
border-radius: var(--radius-md);
overflow: hidden;
}
@@ -870,8 +873,14 @@
}
.vk-toggle-half.vk-toggle-on {
background: var(--color-accent-400, #4f8cff);
color: #fff;
background: var(--color-accent-900);
color: var(--color-accent-200);
box-shadow: inset 0 0 0 1px var(--color-accent-700);
}
.vk-toggle-half:focus-visible {
outline: 2px solid var(--color-accent);
outline-offset: -2px;
}
.vk-media-page-nav {
@@ -893,7 +902,59 @@
}
.vk-media-viewer-title {
font: 600 13px/1.5 ui-monospace, Menlo, monospace;
font: 500 13px/1.5 ui-monospace, Menlo, monospace;
color: var(--color-text);
margin-bottom: 6px;
}
/* ── Focus: these controls are bare <button>s with background and border
reset, so they need the accent ring pinned back on. ───────────────────── */
.vk-media-link:focus-visible,
.vk-media-tree-head:focus-visible,
.vk-media-play:focus-visible,
.vk-media-media:focus-visible,
.vk-bot-group-title:focus-visible,
.vk-media-exclude-title:focus-visible,
.vk-media-advanced summary:focus-visible {
outline: 2px solid var(--color-accent);
outline-offset: 2px;
border-radius: var(--radius-sm);
}
/* ── Storage bar legend: hue is never the only channel. Render one of these
per segment beside the bar so the categories survive a colour-blind
reader, a projector, and a screenshot. ────────────────────────────────── */
.vk-media-usage-legend {
display: flex;
flex-wrap: wrap;
gap: 4px 12px;
margin-top: 6px;
}
.vk-media-usage-key {
display: inline-flex;
align-items: center;
gap: 6px;
font: 400 10px/1.4 ui-monospace, Menlo, monospace;
color: var(--color-neutral-400);
}
.vk-media-usage-key i {
width: 8px;
height: 8px;
flex: none;
border-radius: 2px;
background: var(--color-data-5);
}
.vk-media-usage-key.image i { background: var(--color-data-1); }
.vk-media-usage-key.gif i { background: var(--color-data-2); }
.vk-media-usage-key.video i { background: var(--color-data-3); }
.vk-media-usage-key.audio i { background: var(--color-data-4); }
/* Over the warn threshold the bar itself should say so. */
.vk-media-usage.over {
box-shadow: inset 0 0 0 1px var(--color-warn-700);
}