Chat: Usage-Badge-Overlay mit Key-Switch-Modal

- Usage-Badge oben zentriert im Chat (nur Admin)
- Zeigt Sitzung/Woche-Balken des aktiven API-Keys
- Blendet bei Scroll-Up aus, bei Scroll-Down ein
- Klick auf Badge öffnet Key-Switch-Modal (via _createModal)
- Ganze Row klickbar für Key-Wechsel
- Refresh-Button neben Badge für manuellen Key-Check
- Badge aktualisiert sich automatisch bei neuen Nachrichten (pollHistory)
- Cleanup in destroy()
This commit is contained in:
Meleki committed 2026-03-12 20:03:30 +01:00
1 parent d33c1c370c
commit 3ec9ebba45
4 files changed
+274

No files matched your search

+85
View File
@@ -1,5 +1,52 @@
.chat-page .page-content {
align-items: stretch;
position: relative;
}
/* Usage Badge Overlay */
.chat-usage-overlay {
position: absolute;
top: var(--page-spacing);
left: 50%;
transform: translateX(-50%);
z-index: 50;
display: flex;
align-items: center;
gap: calc(var(--badge-spacing) / 2);
opacity: 1;
transition: opacity var(--transition-duration), transform var(--transition-duration);
cursor: pointer;
}
.chat-usage-overlay[hidden] {
display: none;
}
.chat-usage-overlay.hidden {
opacity: 0;
transform: translateX(-50%) translateY(-1em);
pointer-events: none;
}
.chat-usage-overlay .usage-badge {
margin-top: 0;
background: var(--chat-bg);
border-color: var(--f3-border);
}
.chat-usage-overlay .chat-usage-check {
background: var(--chat-bg);
border: var(--border-width) solid var(--f3-border);
border-radius: var(--border-radius);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
}
.chat-usage-overlay .chat-usage-check:hover {
background: var(--f2-bg);
}
#chat {
@@ -1328,3 +1375,41 @@
text-overflow: ellipsis;
white-space: nowrap;
}
/* ── Key Switch Modal ── */
.key-switch-list {
display: flex;
flex-direction: column;
gap: var(--badge-spacing);
}
.key-switch-row {
display: flex;
align-items: center;
gap: var(--badge-spacing);
padding: var(--badge-padding);
border: var(--border-width) solid var(--f3-border);
border-radius: var(--border-radius);
background: var(--f3-bg);
}
.key-switch-row.active {
border-color: var(--primary);
background: rgb(from var(--primary) r g b / .2);
}
.key-switch-info {
flex: 1;
min-width: 0;
}
.key-switch-name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.key-switch-meta {
opacity: var(--semi-transparent);
}