umbau 1.0
This commit is contained in:
@ -53,6 +53,8 @@ button {
|
||||
cursor: pointer;
|
||||
}
|
||||
button:hover { filter: brightness(1.1); }
|
||||
button:disabled { opacity: 0.5; cursor: not-allowed; }
|
||||
button:disabled:hover { filter: none; }
|
||||
.error { color: var(--danger); font-size: 0.85rem; margin-top: 0.75rem; min-height: 1em; }
|
||||
.hint { color: var(--muted); font-size: 0.8rem; margin-top: 0.5rem; }
|
||||
.qr { display: block; margin: 1rem auto; border-radius: 6px; }
|
||||
@ -187,16 +189,90 @@ pre.log-view {
|
||||
.endpoint-row .summary { color: var(--muted); font-size: 0.8rem; margin-left: auto; }
|
||||
.endpoint-detail { padding: 0 0 0.75rem 4.1rem; }
|
||||
|
||||
.session-shell { display: flex; flex-direction: column; height: 100vh; }
|
||||
/* Aufgabe #11: Anker fuer .term-paste-menu weiter unten (position:absolute
|
||||
dagegen, statt gegen den ganzen Viewport) -- rein CSS-basierte
|
||||
Positionierung, siehe terminal.js::_showPasteMenu(). */
|
||||
.session-shell { display: flex; flex-direction: column; height: 100vh; position: relative; }
|
||||
.session-toolbar {
|
||||
display: flex; align-items: center; gap: 0.75rem; padding: 0.5rem 0.9rem;
|
||||
background: var(--panel); border-bottom: 1px solid var(--border);
|
||||
}
|
||||
.session-toolbar button { width: auto; margin: 0; padding: 0.35rem 0.8rem; font-size: 0.8rem; }
|
||||
.session-toolbar select { width: auto; margin: 0; padding: 0.3rem 0.5rem; font-size: 0.8rem; }
|
||||
.session-toolbar .spacer { flex: 1; }
|
||||
.session-toolbar .status { font-size: 0.8rem; color: var(--muted); }
|
||||
#terminal, #rdp-display { flex: 1; background: black; }
|
||||
#rdp-display canvas { display: block; margin: 0 auto; }
|
||||
|
||||
/* Aufgabe #11 (SSH Copy-Paste): Ruecksicherungs-Kontextmenue fuer Einfuegen
|
||||
per Rechtsklick, nur wenn der direkte Clipboard-Zugriff ohne explizite
|
||||
Benutzergeste verweigert wurde (terminal.js::_attemptDirectPaste()). Vier
|
||||
feste Ecken statt Cursor-Koordinaten -- CSP (style-src 'self') verbietet
|
||||
JS-gesetzte element.style-Werte, siehe Kommentar dort. */
|
||||
.term-paste-menu {
|
||||
position: absolute; z-index: 50; background: var(--panel); border: 1px solid var(--border);
|
||||
border-radius: 6px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4); padding: 0.25rem; min-width: 140px;
|
||||
}
|
||||
.term-paste-menu-top { top: 3.2rem; }
|
||||
.term-paste-menu-bottom { bottom: 0.5rem; }
|
||||
.term-paste-menu-left { left: 0.5rem; }
|
||||
.term-paste-menu-right { right: 0.5rem; }
|
||||
.term-paste-menu button {
|
||||
width: 100%; margin: 0; padding: 0.4rem 0.7rem; text-align: left; background: transparent;
|
||||
color: var(--text); font-weight: 400; font-size: 0.85rem; border-radius: 4px;
|
||||
}
|
||||
.term-paste-menu button:hover { background: var(--border); filter: none; }
|
||||
.session-toolbar .status.warning { color: #f5b942; }
|
||||
/* F1 (Umsetzungsauftrag_Sonnet5.md Teil F.3.1): vormals #terminal/#rdp-display
|
||||
(feste, dokumentweit eindeutige IDs -- eine Seite hatte immer genau eine
|
||||
Sitzung). Jetzt Klassen, weil static/js/terminal.js bzw. rdp.js ihr DOM
|
||||
dynamisch je Instanz bauen (SshTerminalSession/RdpSession) -- mit
|
||||
mehreren gleichzeitigen Instanzen (kuenftige Arbeitsflaeche /workspace,
|
||||
Teil F.3, spaetere Stufe) waeren feste IDs nicht mehr eindeutig. */
|
||||
.session-terminal, .session-rdp-display { flex: 1; background: black; }
|
||||
.session-rdp-display canvas { display: block; margin: 0 auto; }
|
||||
|
||||
/* B.1 (Umsetzungsauftrag Teil B): Fehler-Overlay ueber .session-rdp-display,
|
||||
statt einer 0,85rem-Randnotiz in der Toolbar auf sonst komplett schwarzem
|
||||
Grund (siehe .error weiter oben, .status.error unten). */
|
||||
.session-rdp-display { position: relative; }
|
||||
.rdp-error-overlay {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
z-index: 20;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: rgba(15, 17, 21, 0.92);
|
||||
padding: 1rem;
|
||||
}
|
||||
.rdp-error-panel {
|
||||
background: var(--panel);
|
||||
border: 1px solid var(--danger);
|
||||
border-radius: 10px;
|
||||
padding: 1.75rem 2rem;
|
||||
width: 100%;
|
||||
max-width: 480px;
|
||||
}
|
||||
.rdp-error-panel h2 {
|
||||
margin: 0 0 0.75rem;
|
||||
font-size: 1.15rem;
|
||||
color: var(--danger);
|
||||
}
|
||||
.rdp-error-message {
|
||||
margin: 0 0 1rem;
|
||||
font-size: 0.95rem;
|
||||
line-height: 1.4;
|
||||
word-break: break-word;
|
||||
}
|
||||
.rdp-error-meta {
|
||||
display: grid;
|
||||
grid-template-columns: auto 1fr;
|
||||
gap: 0.25rem 0.75rem;
|
||||
margin: 0 0 1.25rem;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
.rdp-error-meta dt { color: var(--muted); }
|
||||
.rdp-error-meta dd { margin: 0; font-family: monospace; word-break: break-all; }
|
||||
.rdp-error-panel button { margin-top: 0; }
|
||||
|
||||
/* --- Dateitransfer-Panel (Terminal-Sitzung) ---------------------------- */
|
||||
|
||||
@ -242,3 +318,67 @@ pre.log-view {
|
||||
.rec-controls input[type=range] { flex: 1; }
|
||||
.rec-controls select { width: auto; padding: 0.3rem 0.4rem; }
|
||||
.rec-controls .hint { margin: 0; white-space: nowrap; }
|
||||
|
||||
/* --- Arbeitsflaeche (F3, Umsetzungsauftrag_Sonnet5.md Teil F.3) --------- */
|
||||
|
||||
.workspace-layout { display: flex; height: calc(100vh - 53px); /* 53px ~ .topbar */ }
|
||||
.workspace-sidebar {
|
||||
width: 280px; flex-shrink: 0; background: var(--panel); border-right: 1px solid var(--border);
|
||||
display: flex; flex-direction: column; overflow-y: auto;
|
||||
}
|
||||
.workspace-sidebar-header { padding: 1rem 1rem 0.5rem; }
|
||||
.workspace-sidebar-header h2 {
|
||||
font-size: 0.9rem; margin: 0 0 0.4rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--muted);
|
||||
}
|
||||
.workspace-sidebar-header .hint { margin: 0; font-size: 0.75rem; }
|
||||
/* F5 (F.3.8): Obergrenzen-Anzeige -- normal wie jeder andere Hinweistext,
|
||||
nur bei erreichter Grenze in Warnfarbe (dann ist auch "+ Neue Sitzung"
|
||||
deaktiviert, siehe workspace.js renderLimitHint()). */
|
||||
.workspace-limit-hint { margin-top: 0.3rem; }
|
||||
.workspace-limit-hint--at-limit { color: var(--danger); }
|
||||
/* F5: Sammelzustand-Kennzeichnung -- fasst Hintergrundsitzungen mit Fehler
|
||||
oder Trennung zusammen, damit man sie nicht erst durch Umschalten auf
|
||||
jede einzelne Kachel entdeckt. */
|
||||
.workspace-attention-summary {
|
||||
margin: 0 0.5rem 0.5rem; padding: 0.4rem 0.6rem; border-radius: 6px;
|
||||
background: rgba(239, 68, 68, 0.15); border: 1px solid var(--danger);
|
||||
color: var(--danger); font-size: 0.75rem;
|
||||
}
|
||||
.workspace-tiles { flex: 1; padding: 0.5rem; display: flex; flex-direction: column; gap: 0.5rem; }
|
||||
.workspace-empty-hint { padding: 0.5rem; }
|
||||
.workspace-tile {
|
||||
background: var(--bg); border: 1px solid var(--border); border-radius: 8px; padding: 0.65rem 0.75rem;
|
||||
}
|
||||
.workspace-tile-active { border-color: var(--accent); }
|
||||
/* F4: eine offene, aber gerade nicht sichtbare Sitzung -- anklickbar
|
||||
(Umschalten), optisch etwas zurueckhaltender als die aktive Kachel. */
|
||||
.workspace-tile-background { cursor: pointer; }
|
||||
.workspace-tile-background:hover { border-color: var(--muted); }
|
||||
/* F5: eine Hintergrundsitzung mit Fehler/Trennung -- sichtbar markiert,
|
||||
ohne dass man erst umschalten muss (siehe workspace.js hasAttention()). */
|
||||
.workspace-tile-attention { border-color: var(--danger); box-shadow: 0 0 0 1px var(--danger); }
|
||||
.workspace-tile-remote { opacity: 0.85; }
|
||||
.workspace-tile-top { display: flex; align-items: center; gap: 0.4rem; }
|
||||
.workspace-tile-hostname { font-weight: 600; font-size: 0.85rem; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
||||
.workspace-status-dot {
|
||||
width: 0.55rem; height: 0.55rem; border-radius: 50%; flex-shrink: 0; background: var(--muted);
|
||||
}
|
||||
.workspace-status-dot.connecting { background: #f5b942; }
|
||||
.workspace-status-dot.connected { background: var(--ok); }
|
||||
.workspace-status-dot.error { background: var(--danger); }
|
||||
.workspace-status-dot.disconnected { background: var(--muted); }
|
||||
.workspace-tile-meta {
|
||||
display: flex; justify-content: space-between; gap: 0.5rem; color: var(--muted); font-size: 0.75rem;
|
||||
margin: 0.3rem 0 0.5rem;
|
||||
}
|
||||
.workspace-tile-close-btn { width: 100%; margin: 0; }
|
||||
.workspace-new-btn { margin: 0.5rem; width: calc(100% - 1rem); }
|
||||
.workspace-main { flex: 1; overflow: auto; background: var(--bg); position: relative; height: 100%; }
|
||||
.workspace-catalog-view, .workspace-sessions-area { height: 100%; }
|
||||
/* F4: mehrere Sitzungs-Elemente liegen gleichzeitig in
|
||||
#workspace-sessions-area -- jedes einzelne wird ueber die globale
|
||||
.hidden-Klasse (siehe oben) ein-/ausgeblendet (auf dem Element selbst,
|
||||
von workspace.js gesetzt), nicht der gemeinsame Container. */
|
||||
.workspace-sessions-area .session-instance { height: 100%; }
|
||||
.workspace-sessions-area .session-instance .session-shell { height: 100%; }
|
||||
.workspace-catalog { padding-top: 1.5rem; }
|
||||
|
||||
Reference in New Issue
Block a user