This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
.nn-head{margin:1.3rem 0}.nn-head>span,.nn-chat small{color:var(--accent);font:700 .72rem/1 monospace;letter-spacing:.14em}.nn-head h1{margin:.4rem 0;color:var(--heading)}.nn-head p{color:var(--muted)}.nn-optin{max-width:700px}.nn-optin p{color:var(--muted);line-height:1.6}
|
||||
.nn-app{display:grid;grid-template-columns:minmax(270px,340px) minmax(0,1fr);gap:1rem;align-items:start}.nn-sidebar{display:grid;align-content:start;gap:1rem}.nn-request div{display:flex;gap:.45rem}.nn-request .mf-input{min-width:0}.nn-section{border-top:1px solid var(--border);padding-top:.85rem}.nn-section h2{font-size:.82rem;color:var(--heading);margin:0 0 .5rem}.nn-list{display:grid;gap:.45rem}.nn-item{display:flex;align-items:center;justify-content:space-between;gap:.5rem;border:1px solid var(--border);background:var(--surface-2);padding:.55rem .65rem;border-radius:8px;color:var(--text);font-size:.84rem}.nn-item button{border:0;background:none;color:var(--secondary);font:inherit;cursor:pointer}.nn-item button:hover,.nn-item button.active{color:var(--accent)}.nn-actions{display:flex;gap:.35rem}.nn-actions button{border:1px solid var(--border);padding:.22rem .38rem;border-radius:5px}
|
||||
.nn-chat{min-height:530px;display:flex;flex-direction:column}.nn-empty{flex:1;min-height:430px;display:grid;place-content:center;text-align:center;gap:.5rem;color:var(--muted)}.nn-empty strong{color:var(--heading);font-size:1.1rem}.nn-chat [data-nn-conversation]{display:flex;flex:1;flex-direction:column;min-height:494px}.nn-chat [data-nn-conversation][hidden]{display:none}.nn-chat header{border-bottom:1px solid var(--border);padding-bottom:.9rem}.nn-chat h2{margin:.25rem 0 0;color:var(--heading)}.nn-messages{display:flex;flex:1;flex-direction:column;gap:.6rem;min-height:340px;overflow:auto;padding:1rem 0}.nn-message{align-self:flex-start;max-width:min(80%,550px);padding:.65rem .8rem;border-radius:10px;background:var(--surface-2);border:1px solid var(--border);color:var(--text);line-height:1.45}.nn-message.mine{align-self:flex-end;border-color:var(--border-accent);background:color-mix(in srgb,var(--accent) 12%,var(--surface))}.nn-message small{display:block;margin-top:.35rem;color:var(--muted);font-size:.66rem}.nn-compose{display:grid;grid-template-columns:1fr auto;gap:.6rem;border-top:1px solid var(--border);padding-top:.85rem}.nn-compose textarea{min-height:52px;resize:vertical;background:var(--surface-2);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:.65rem;font:inherit}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
|
||||
.nn-chat{min-height:530px;display:flex;flex-direction:column}.nn-empty{flex:1;min-height:430px;display:grid;place-content:center;text-align:center;gap:.5rem;color:var(--muted)}.nn-empty[hidden]{display:none}.nn-empty strong{color:var(--heading);font-size:1.1rem}.nn-chat [data-nn-conversation]{display:flex;flex:1;flex-direction:column;min-height:494px}.nn-chat [data-nn-conversation][hidden]{display:none}.nn-chat header{border-bottom:1px solid var(--border);padding-bottom:.9rem}.nn-chat h2{margin:.25rem 0 0;color:var(--heading)}.nn-messages{display:flex;flex:1;flex-direction:column;gap:.6rem;min-height:340px;overflow:auto;padding:1rem 0}.nn-message{align-self:flex-start;max-width:min(80%,550px);padding:.65rem .8rem;border-radius:10px;background:var(--surface-2);border:1px solid var(--border);color:var(--text);line-height:1.45}.nn-message.mine{align-self:flex-end;border-color:var(--border-accent);background:color-mix(in srgb,var(--accent) 12%,var(--surface))}.nn-message small{display:block;margin-top:.35rem;color:var(--muted);font-size:.66rem}.nn-compose{display:grid;grid-template-columns:1fr auto;gap:.6rem;border-top:1px solid var(--border);padding-top:.85rem}.nn-compose textarea{min-height:52px;resize:vertical;background:var(--surface-2);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:.65rem;font:inherit}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
|
||||
@media(max-width:800px){.nn-app{grid-template-columns:1fr}.nn-chat{min-height:400px}.nn-chat [data-nn-conversation]{min-height:364px}.nn-messages{min-height:210px}.nn-request div{flex-wrap:wrap}.nn-request .mf-input{flex:1}}
|
||||
|
||||
@@ -38,12 +38,41 @@
|
||||
}).join('') : '<span class="mf-small-hint">Noch keine Verbindungen.</span>';
|
||||
bindConnectionActions();
|
||||
}
|
||||
function selectionKey() { return 'mindflux.neuralnet.selected.' + me; }
|
||||
function savedSelection() {
|
||||
try { return localStorage.getItem(selectionKey()); } catch (ignored) { return null; }
|
||||
}
|
||||
function saveSelection(user) {
|
||||
try { localStorage.setItem(selectionKey(), user); } catch (ignored) { }
|
||||
}
|
||||
function clearSelection() {
|
||||
try { localStorage.removeItem(selectionKey()); } catch (ignored) { }
|
||||
}
|
||||
function closeChat() {
|
||||
q('[data-nn-empty]').hidden = false;
|
||||
q('[data-nn-conversation]').hidden = true;
|
||||
}
|
||||
async function refresh() {
|
||||
var data = await api('/overview');
|
||||
me = data.username;
|
||||
q('#nnOptIn').hidden = data.enabled;
|
||||
q('#nnApp').hidden = !data.enabled;
|
||||
if (data.enabled) render(data);
|
||||
if (!data.enabled) return;
|
||||
var restored = false;
|
||||
if (!selected) {
|
||||
selected = savedSelection();
|
||||
restored = Boolean(selected);
|
||||
}
|
||||
if (selected && !data.connections.includes(selected)) {
|
||||
selected = null;
|
||||
clearSelection();
|
||||
closeChat();
|
||||
}
|
||||
render(data);
|
||||
if (restored && selected) {
|
||||
openChat(selected);
|
||||
loadChat().catch(function (error) { message(error.message); });
|
||||
}
|
||||
}
|
||||
async function loadChat() {
|
||||
if (!selected) return;
|
||||
@@ -63,6 +92,7 @@
|
||||
}
|
||||
async function selectChat(user) {
|
||||
openChat(user);
|
||||
saveSelection(user);
|
||||
try { await loadChat(); } catch (error) { message(error.message); }
|
||||
}
|
||||
function bindConnectionActions() {
|
||||
|
||||
@@ -25,13 +25,11 @@
|
||||
.status-details b { color:var(--text); font-weight:600; text-align:right; }
|
||||
.status-toggle { grid-column:1 / -1; justify-self:start; border:0; padding:0; background:transparent; color:var(--secondary); font:inherit; font-size:.72rem; cursor:pointer; }
|
||||
.status-toggle:hover { text-decoration:underline; }
|
||||
.nn-trigger { position:relative; color:var(--secondary); }
|
||||
.nn-trigger.unread { color:var(--accent); border-color:color-mix(in srgb,var(--accent) 72%,var(--border)); background:color-mix(in srgb,var(--accent) 16%,var(--surface)); box-shadow:0 0 18px var(--glow-s); animation:nn-notification-pulse 1.8s ease-in-out infinite; }
|
||||
.nn-trigger { position:relative; }
|
||||
.nn-trigger.unread { color:var(--surface); border-color:var(--secondary); background:var(--secondary); box-shadow:0 0 14px color-mix(in srgb,var(--secondary) 30%,transparent); }
|
||||
.nn-trigger svg { width:20px; height:20px; }
|
||||
.nn-unread { position:absolute; top:-6px; right:-7px; min-width:17px; height:17px; padding:0 4px; display:grid; place-items:center; border:2px solid var(--surface); border-radius:99px; background:var(--accent); color:var(--accent-ink); font-size:.62rem; font-weight:900; line-height:1; box-shadow:0 0 10px var(--glow-s); }
|
||||
.nn-unread { position:absolute; top:-6px; right:-7px; min-width:17px; height:17px; padding:0 4px; display:grid; place-items:center; border:2px solid var(--surface); border-radius:99px; background:var(--panel); color:var(--secondary); font-size:.62rem; font-weight:900; line-height:1; box-shadow:0 0 10px color-mix(in srgb,var(--secondary) 28%,transparent); }
|
||||
.nn-unread[hidden] { display:none; }
|
||||
@keyframes nn-notification-pulse { 50% { box-shadow:0 0 25px var(--glow-s); transform:translateY(-1px); } }
|
||||
@media (prefers-reduced-motion:reduce) { .nn-trigger.unread { animation:none; } }
|
||||
.prog-top { display:flex; justify-content:space-between; align-items:center; margin-bottom:.4rem; }
|
||||
.pill { font-size:.68rem; color:var(--muted); border:1px solid var(--border); border-radius:7px; padding:.2rem .5rem; }
|
||||
.prog-big { display:flex; align-items:baseline; gap:.5rem; }
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
<head>
|
||||
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>NeuralNet – SysnaptiK Neural</title>
|
||||
<link rel="stylesheet" href="/css/theme.css?v=3"><link rel="stylesheet" href="/css/neuralnet.css?v=2">
|
||||
<script src="/js/theme.js?v=3"></script><script src="/js/neuralnet.js?v=4" defer></script>
|
||||
<link rel="stylesheet" href="/css/theme.css?v=3"><link rel="stylesheet" href="/css/neuralnet.css?v=3">
|
||||
<script src="/js/theme.js?v=3"></script><script src="/js/neuralnet.js?v=5" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="mf-theme-float"><button class="mf-theme"></button></div>
|
||||
|
||||
Reference in New Issue
Block a user