Files
gott/wwwroot/css/file-explorer.css
T
Meleki 9e4ed6dada Add image preview support: Krea-tag parsing with modal, file-explorer preview, skill output endpoint, increase execute timeout to 180s
- SkillEndpoint: GET /api/skills/{slug}/output/{filename} for skill output files
- WorkspaceEndpoint: GET /api/workspace/raw for raw file serving (images)
- File-Explorer: Image preview for png/jpg/gif/webp/svg/bmp/ico
- Chat UI: Parse [Krea: filename] tags into clickable chips with image modal
- ToolService: Increase execute timeout from 30s to 180s for long-running skills
2026-03-01 20:00:35 +01:00

345 lines
7.4 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ── File Explorer Modal ── */
.fe-overlay {
position: fixed;
inset: 0;
background: rgb(from var(--f1-bg) r g b / var(--semi-transparent));
display: flex;
align-items: center;
justify-content: center;
z-index: 1000;
}
.fe-modal {
background: var(--f2-bg);
border: var(--border-width) solid var(--f2-border);
border-radius: var(--border-radius);
overflow: hidden;
width: 90vw;
max-width: 1100px;
height: 80vh;
display: flex;
flex-direction: column;
}
.fe-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: .5em;
border-bottom: var(--border-width) solid var(--f1-border);
background: var(--f1-bg);
flex-shrink: 0;
}
.fe-nav {
display: flex;
align-items: center;
gap: .5em;
flex: 1;
overflow: hidden;
}
.fe-path {
opacity: var(--semi-transparent);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.fe-body {
display: flex;
flex: 1;
overflow: hidden;
}
.fe-sidebar {
width: 280px;
min-width: 200px;
border-right: var(--border-width) solid var(--f1-border);
overflow-y: auto;
background: var(--f1-bg);
flex-shrink: 0;
}
.fe-sidebar-full {
width: 100%;
}
.fe-main {
flex: 1;
overflow: hidden;
display: flex;
}
.fe-item {
padding: .5em 1em;
cursor: pointer;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.fe-item:hover {
background: var(--f2-bg);
}
.fe-item.active {
background: var(--f3-bg);
border-left: 2px solid var(--primary);
}
.fe-dir {
color: var(--text);
}
.fe-file {
color: var(--text);
}
.fe-loading, .fe-error, .fe-empty, .fe-placeholder {
padding: 1em;
text-align: center;
opacity: var(--semi-transparent);
align-self: center;
margin: auto;
}
.fe-image-preview {
display: flex;
align-items: center;
justify-content: center;
flex: 1;
padding: 1em;
overflow: auto;
}
.fe-image-preview img {
max-width: 100%;
max-height: 100%;
object-fit: contain;
border-radius: 4px;
}
/* ── CodeMirror / EasyMDE gemeinsame Wrapper-Basis ── */
.fe-cm-wrap,
.fe-mde-wrap {
display: flex;
flex: 1;
overflow: hidden;
height: 100%;
}
.fe-cm-wrap > div {
display: flex;
flex: 1;
/* kein overflow:hidden – CodeMirror positioniert sein internes textarea
mit negativem Offset; overflow:hidden würde es clippen → kein Input */
position: relative;
height: 100%;
}
.fe-mde-wrap .EasyMDEContainer {
display: flex;
flex: 1;
flex-direction: column;
overflow: hidden;
height: 100%;
}
.fe-cm-wrap .CodeMirror,
.fe-mde-wrap .CodeMirror,
.fe-mde-wrap .EasyMDEContainer .CodeMirror {
flex: 1;
height: 100% !important;
font-family: var(--mono) !important;
line-height: 1.5;
background: var(--f2-bg) !important;
color: var(--text) !important;
border: none !important;
border-radius: 0 !important;
padding: 0 !important;
}
.fe-cm-wrap .CodeMirror-scroll,
.fe-mde-wrap .CodeMirror-scroll {
overflow: auto !important;
}
.fe-cm-wrap .CodeMirror-gutters,
.fe-mde-wrap .CodeMirror-gutters {
background: var(--f1-bg) !important;
border-right: var(--border-width) solid var(--f1-border) !important;
}
.fe-cm-wrap .CodeMirror-linenumber,
.fe-mde-wrap .CodeMirror-linenumber {
color: var(--text) !important;
opacity: var(--semi-transparent);
}
.fe-cm-wrap .CodeMirror-cursor,
.fe-mde-wrap .CodeMirror-cursor {
border-left-color: var(--primary) !important;
}
.fe-cm-wrap .CodeMirror-selected,
.fe-mde-wrap .CodeMirror-selected {
background: rgba(180, 68, 17, 0.3) !important;
}
/* ── Syntax Highlighting (theme: default übersteuern) ── */
.fe-cm-wrap .cm-keyword,
.fe-mde-wrap .cm-keyword { color: #c678dd !important; }
.fe-cm-wrap .cm-def,
.fe-mde-wrap .cm-def { color: #61afef !important; }
.fe-cm-wrap .cm-variable,
.fe-mde-wrap .cm-variable { color: var(--text) !important; }
.fe-cm-wrap .cm-variable-2,
.fe-mde-wrap .cm-variable-2 { color: #e06c75 !important; }
.fe-cm-wrap .cm-variable-3,
.fe-mde-wrap .cm-variable-3 { color: #56b6c2 !important; }
.fe-cm-wrap .cm-property,
.fe-mde-wrap .cm-property { color: #e06c75 !important; }
.fe-cm-wrap .cm-operator,
.fe-mde-wrap .cm-operator { color: #56b6c2 !important; }
.fe-cm-wrap .cm-string,
.fe-mde-wrap .cm-string { color: #98c379 !important; }
.fe-cm-wrap .cm-string-2,
.fe-mde-wrap .cm-string-2 { color: #98c379 !important; }
.fe-cm-wrap .cm-number,
.fe-mde-wrap .cm-number { color: #d19a66 !important; }
.fe-cm-wrap .cm-atom,
.fe-mde-wrap .cm-atom { color: #d19a66 !important; }
.fe-cm-wrap .cm-comment,
.fe-mde-wrap .cm-comment { color: #5c6370 !important; font-style: italic; }
.fe-cm-wrap .cm-meta,
.fe-mde-wrap .cm-meta { color: #c678dd !important; }
.fe-cm-wrap .cm-qualifier,
.fe-mde-wrap .cm-qualifier { color: #e5c07b !important; }
.fe-cm-wrap .cm-builtin,
.fe-mde-wrap .cm-builtin { color: #e5c07b !important; }
.fe-cm-wrap .cm-tag,
.fe-mde-wrap .cm-tag { color: #e06c75 !important; }
.fe-cm-wrap .cm-attribute,
.fe-mde-wrap .cm-attribute { color: #d19a66 !important; }
.fe-cm-wrap .cm-type,
.fe-mde-wrap .cm-type { color: #56b6c2 !important; }
.fe-cm-wrap .cm-error,
.fe-mde-wrap .cm-error { color: #f44 !important; }
/* Markdown spezifisch (EasyMDE) */
.fe-mde-wrap .cm-header { color: #e5c07b !important; font-weight: bold; }
.fe-mde-wrap .cm-strong { color: var(--text-accent) !important; font-weight: bold; }
.fe-mde-wrap .cm-em { color: #c678dd !important; font-style: italic; }
.fe-mde-wrap .cm-link { color: #61afef !important; }
.fe-mde-wrap .cm-url { color: #98c379 !important; }
.fe-mde-wrap .cm-quote { color: #5c6370 !important; font-style: italic; }
/* EasyMDE Toolbar */
.fe-mde-wrap .editor-toolbar {
background: var(--f1-bg) !important;
border-bottom: var(--border-width) solid var(--f1-border) !important;
border-top: none !important;
padding: 4px !important;
opacity: 1 !important;
}
.fe-mde-wrap .editor-toolbar button {
color: var(--text) !important;
border: none !important;
border-radius: 3px !important;
opacity: var(--semi-transparent);
}
.fe-mde-wrap .editor-toolbar button:hover {
background: var(--f3-bg) !important;
opacity: 1;
}
.fe-mde-wrap .editor-toolbar button.active {
background: var(--f3-bg) !important;
opacity: 1;
}
.fe-mde-wrap .editor-toolbar i.separator {
border-left-color: var(--f1-border) !important;
border-right: none !important;
}
/* EasyMDE Statusbar ausblenden */
.fe-mde-wrap .editor-statusbar {
display: none !important;
}
/* EasyMDE Preview */
.fe-mde-wrap .editor-preview,
.fe-mde-wrap .editor-preview-side {
background: var(--f2-bg) !important;
color: var(--text) !important;
font-family: var(--font) !important;
}
.fe-mde-wrap .editor-preview-active-side {
border-left: var(--border-width) solid var(--f1-border);
}
/* Footer */
.fe-footer {
display: flex;
align-items: center;
justify-content: space-between;
padding: .5em .5em .5em 1em;
border-top: var(--border-width) solid var(--f1-border);
background: var(--f1-bg);
flex-shrink: 0;
gap: .5em;
}
.fe-info {
opacity: var(--semi-transparent);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
flex: 1;
}
.fe-footer-actions {
display: flex;
gap: .5em;
flex-shrink: 0;
}
.fe-save-btn:not(:disabled) {
background: var(--primary);
color: #fff;
border-color: var(--primary);
}
.fe-save-btn:not(:disabled):hover {
opacity: var(--semi-transparent);
}