AuthorBuddy/wwwroot/app.css

838 lines
14 KiB
CSS
Raw Normal View History

2026-05-14 12:31:35 +02:00
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background: var(--window-bg);
color: var(--text-color);
height: 100vh;
overflow: hidden;
}
/* Navigation panel (sidebar accordion) */
.nav-section {
margin-bottom: 2px;
}
.nav-section-header {
display: flex;
align-items: center;
gap: 6px;
width: 100%;
padding: 6px 8px;
background: var(--menu-bg);
border: 1px solid var(--border-color);
cursor: pointer;
font-size: 13px;
font-weight: bold;
text-align: left;
user-select: none;
}
.nav-section-header:hover {
background: var(--accent-color);
color: white;
}
.nav-icon {
font-size: 10px;
width: 12px;
}
.nav-section-body {
border: 1px solid var(--border-color);
border-top: none;
background: var(--card-bg);
}
.nav-item {
display: block;
width: 100%;
padding: 6px 16px;
background: none;
border: none;
cursor: pointer;
font-size: 13px;
text-align: left;
color: var(--text-color);
}
.nav-item:hover {
background: var(--accent-color);
color: white;
}
.nav-separator {
height: 1px;
background: var(--border-color);
margin: 4px 8px;
}
.nav-hint {
display: block;
padding: 6px 16px;
font-size: 12px;
color: var(--border-color);
}
2026-05-14 12:42:37 +02:00
.nav-item-toggle {
display: flex;
align-items: center;
gap: 4px;
font-weight: bold;
}
.nav-item-toggle .nav-icon {
font-size: 10px;
width: 12px;
}
.nav-sublist {
padding-left: 8px;
}
.nav-item-sub {
padding: 4px 16px;
font-size: 12px;
}
2026-05-14 12:31:35 +02:00
/* Status bar */
.status-bar {
background: var(--status-bar-bg);
border-top: 2px solid var(--border-color);
display: flex;
align-items: center;
padding: 3px 8px;
font-size: 12px;
min-height: 28px;
gap: 8px;
}
.status-bar .status-dot {
width: 10px;
height: 10px;
border-radius: 50%;
display: inline-block;
}
.status-bar .status-dot.connected {
background: #00cc00;
}
.status-bar .status-dot.disconnected {
background: #cc0000;
}
.status-bar .status-text {
flex: 1;
}
.status-bar progress {
width: 80px;
height: 12px;
}
/* Main content area */
.main-content {
display: flex;
flex: 1;
overflow: hidden;
}
/* Sidebar */
.sidebar {
width: 250px;
min-width: 150px;
border-right: 2px solid var(--border-color);
padding: 4px;
overflow-y: auto;
background: var(--window-bg);
}
/* Detail panel */
.detail-panel {
flex: 1;
padding: 12px;
overflow-y: auto;
}
.detail-panel .tab-bar {
display: flex;
border-bottom: 2px solid var(--border-color);
margin-bottom: 12px;
}
.detail-panel .tab-bar .tab {
padding: 8px 16px;
cursor: pointer;
border: 1px solid transparent;
margin-bottom: -2px;
}
.detail-panel .tab-bar .tab.active {
border: 1px solid var(--border-color);
border-bottom-color: var(--window-bg);
background: var(--card-bg);
}
.detail-panel .tab-content {
padding: 8px;
}
/* Cards for RAG facts */
.fact-card {
background: var(--card-bg);
border-left: 3px solid var(--accent-color);
padding: 12px;
margin-bottom: 8px;
border-radius: 2px;
font-size: 14px;
line-height: 1.5;
}
2026-05-20 06:12:54 +02:00
.fact-similarity {
font-size: 11px;
color: var(--accent-color);
font-weight: bold;
margin-bottom: 4px;
}
.fact-path {
font-size: 11px;
color: var(--border-color);
margin-bottom: 6px;
font-family: monospace;
}
.fact-text {
font-size: 13px;
white-space: pre-wrap;
word-break: break-word;
}
.fact-extract {
font-size: 12px;
margin-top: 6px;
padding-top: 6px;
border-top: 1px solid var(--border-color);
white-space: pre-wrap;
word-break: break-word;
}
.fact-card a {
color: var(--accent-color);
text-decoration: none;
}
.fact-card a:hover {
text-decoration: underline;
}
.fact-actions {
display: flex;
gap: 6px;
margin-top: 8px;
padding-top: 8px;
border-top: 1px solid var(--border-color);
}
.fact-actions button {
font-size: 12px;
padding: 4px 10px;
}
/* Editor page - no scroll */
.editor-page {
2026-05-14 12:31:35 +02:00
display: flex;
flex-direction: column;
height: 100%;
2026-05-20 06:12:54 +02:00
overflow: hidden;
2026-05-14 12:31:35 +02:00
}
2026-05-20 06:12:54 +02:00
.editor-area {
2026-05-14 12:31:35 +02:00
flex: 1;
2026-05-20 06:12:54 +02:00
min-height: 0;
2026-05-14 12:31:35 +02:00
font-family: 'Consolas', 'Courier New', monospace;
font-size: 14pt;
padding: 20px;
border: none;
outline: none;
resize: none;
background: var(--editor-bg);
color: var(--text-color);
line-height: 1.6;
}
2026-05-20 06:12:54 +02:00
.editor-toolbar {
2026-05-14 12:31:35 +02:00
display: flex;
justify-content: flex-end;
padding: 8px 16px;
gap: 8px;
border-top: 1px solid var(--border-color);
2026-05-20 06:12:54 +02:00
border-bottom: 1px solid var(--border-color);
2026-05-14 12:31:35 +02:00
background: var(--menu-bg);
2026-05-20 06:12:54 +02:00
flex-shrink: 0;
}
/* Results area - scrollable box */
.results-area {
max-height: 140px;
overflow-y: auto;
border-top: 1px solid var(--border-color);
background: var(--window-bg);
flex-shrink: 0;
}
/* Version list */
.version-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 6px 8px;
border-bottom: 1px solid var(--border-color);
font-size: 13px;
}
.version-item:last-child {
border-bottom: none;
}
.version-meta {
display: flex;
gap: 8px;
align-items: center;
}
.version-date {
font-weight: bold;
color: var(--accent-color);
font-family: monospace;
}
.version-comment {
color: var(--border-color);
font-style: italic;
2026-05-14 12:31:35 +02:00
}
/* Buttons */
button {
padding: 8px 16px;
cursor: pointer;
border: 1px solid var(--border-color);
background: var(--menu-bg);
color: var(--text-color);
font-size: 13px;
}
button:hover {
background: var(--accent-color);
color: white;
}
2026-05-20 06:12:54 +02:00
button:disabled {
background: var(--disabled-bg);
color: var(--disabled-text);
cursor: default;
border-color: var(--border-color);
}
button:disabled:hover {
background: var(--disabled-bg);
color: var(--disabled-text);
}
2026-05-14 12:31:35 +02:00
button.primary {
background: var(--accent-color);
color: white;
border-color: var(--accent-color);
}
/* Forms */
.form-group {
margin-bottom: 16px;
}
.form-group label {
display: block;
font-weight: bold;
margin-bottom: 4px;
font-size: 13px;
}
.form-group input,
.form-group select,
.form-group textarea {
width: 100%;
padding: 6px 8px;
border: 1px solid var(--border-color);
background: var(--editor-bg);
color: var(--text-color);
font-size: 13px;
}
.form-actions {
display: flex;
gap: 8px;
margin-top: 16px;
}
/* Project tree */
.tree-node {
padding: 4px 8px;
cursor: pointer;
font-size: 13px;
}
.tree-node:hover {
background: var(--accent-color);
color: white;
}
.tree-node .children {
padding-left: 20px;
}
/* Grid splitter simulation */
.grid-splitter {
width: 5px;
cursor: col-resize;
background: transparent;
}
2026-05-20 06:12:54 +02:00
/* Search section below editor */
.search-section {
display: flex;
gap: 8px;
align-items: center;
padding: 6px 12px;
background: var(--menu-bg);
flex-shrink: 0;
}
.search-section input {
flex: 1;
padding: 6px 10px;
border: 1px solid var(--border-color);
background: var(--editor-bg);
color: var(--text-color);
font-size: 13px;
}
.search-section input::placeholder {
color: var(--border-color);
}
/* Modal overlay */
.modal-overlay {
position: fixed;
top: 0; left: 0; right: 0; bottom: 0;
background: rgba(0,0,0,0.4);
display: flex;
align-items: center;
justify-content: center;
z-index: 1000;
}
.modal-dialog {
background: var(--window-bg);
border: 2px solid var(--border-color);
min-width: 400px;
box-shadow: 4px 4px 8px rgba(0,0,0,0.3);
}
.modal-title {
background: var(--accent-color);
color: white;
padding: 6px 12px;
font-weight: bold;
font-size: 14px;
}
.modal-body {
padding: 16px;
}
.modal-actions {
display: flex;
gap: 8px;
justify-content: flex-end;
padding: 12px 16px;
border-top: 1px solid var(--border-color);
}
.modal-dialog .form-group {
margin-bottom: 12px;
}
.modal-dialog .form-group:last-child {
margin-bottom: 0;
}
.modal-dialog .form-group label {
display: block;
font-weight: bold;
margin-bottom: 4px;
font-size: 13px;
}
.modal-dialog .form-group input {
width: 100%;
padding: 6px 8px;
border: 1px solid var(--border-color);
background: var(--editor-bg);
color: var(--text-color);
font-size: 13px;
}
/* File tree in sidebar */
.tree-item {
display: flex;
align-items: center;
gap: 4px;
padding: 3px 12px;
cursor: pointer;
font-size: 12px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.tree-item:hover {
background: var(--accent-color);
color: white;
}
.tree-item.active {
background: var(--accent-color);
color: white;
font-weight: bold;
}
.tree-item.file {
padding-left: 28px;
}
.tree-item.tree-child {
padding-left: 44px;
}
.tree-icon {
flex-shrink: 0;
font-size: 11px;
}
.tree-name {
overflow: hidden;
text-overflow: ellipsis;
flex: 1;
}
.tree-rename {
background: none;
border: none;
cursor: pointer;
font-size: 12px;
padding: 0 4px;
opacity: 0.4;
color: inherit;
flex-shrink: 0;
}
.tree-rename:hover {
opacity: 1;
}
.nav-header-actions {
margin-left: auto;
display: flex;
gap: 2px;
}
.nav-item-icon {
background: none;
border: none;
cursor: pointer;
font-size: 14px;
padding: 0 4px;
opacity: 0.5;
color: inherit;
}
.nav-item-icon:hover {
opacity: 1;
}
.nav-item-sub.active {
background: var(--accent-color);
color: white;
}
2026-05-14 12:31:35 +02:00
/* Progress */
.progress-bar {
width: 100%;
height: 20px;
background: var(--border-color);
border-radius: 2px;
overflow: hidden;
}
.progress-bar .progress-fill {
height: 100%;
background: var(--accent-color);
transition: width 0.3s;
}
/* Model list */
.model-list {
display: grid;
gap: 8px;
}
.model-card {
background: var(--card-bg);
border: 1px solid var(--border-color);
padding: 12px;
border-radius: 4px;
}
.model-card .model-name {
font-weight: bold;
font-size: 14px;
}
.model-card .model-details {
font-size: 12px;
color: var(--border-color);
margin-top: 4px;
}
/* Settings page */
.settings-page {
2026-05-20 07:27:41 +02:00
width: 100%;
2026-05-16 16:13:59 +02:00
}
.settings-layout {
2026-05-20 06:12:54 +02:00
display: grid;
2026-05-20 07:27:41 +02:00
grid-template-columns: 1fr 2fr 2fr;
2026-05-16 16:13:59 +02:00
gap: 16px;
}
2026-05-20 06:12:54 +02:00
.settings-column {
2026-05-16 16:13:59 +02:00
min-width: 0;
}
2026-05-20 06:12:54 +02:00
.settings-column .form-group textarea {
2026-05-16 16:13:59 +02:00
min-height: 120px;
font-family: monospace;
font-size: 12px;
resize: vertical;
}
.settings-actions {
display: flex;
gap: 8px;
align-items: center;
margin-top: 16px;
2026-05-14 12:31:35 +02:00
}
.settings-section {
background: var(--card-bg);
border: 1px solid var(--border-color);
padding: 16px;
margin-bottom: 12px;
}
.settings-section-title {
font-size: 14px;
font-weight: bold;
margin-bottom: 12px;
color: var(--accent-color);
border-bottom: 1px solid var(--border-color);
padding-bottom: 6px;
}
.form-hint {
font-size: 11px;
color: var(--border-color);
margin-top: 4px;
}
.settings-status {
margin-top: 16px;
padding: 10px;
background: var(--card-bg);
border: 1px solid var(--accent-color);
font-size: 13px;
}
2026-05-17 07:27:18 +02:00
/* Diff view */
.diff-panel {
border-top: 2px solid var(--border-color);
padding: 12px;
max-height: 400px;
overflow-y: auto;
}
.diff-panel h4, .result-panel h4 {
margin-bottom: 8px;
font-size: 14px;
}
.diff-view {
font-family: monospace;
font-size: 13px;
line-height: 1.5;
}
.diff-line {
display: flex;
gap: 8px;
padding: 1px 4px;
}
.diff-line-num {
color: var(--border-color);
min-width: 32px;
text-align: right;
user-select: none;
}
.diff-line-text {
white-space: pre-wrap;
word-break: break-word;
}
.diff-inserted {
background: rgba(0, 200, 0, 0.15);
}
.diff-deleted {
background: rgba(200, 0, 0, 0.15);
}
.diff-modified {
background: rgba(200, 200, 0, 0.15);
}
.result-panel {
border-top: 2px solid var(--border-color);
padding: 12px;
2026-05-20 06:12:54 +02:00
max-height: 400px;
2026-05-17 07:27:18 +02:00
overflow-y: auto;
}
.result-text {
white-space: pre-wrap;
font-size: 13px;
line-height: 1.5;
}
2026-05-14 12:31:35 +02:00
/* Scrollbar styling */
::-webkit-scrollbar {
width: 8px;
}
2026-05-20 06:12:54 +02:00
/* Assistant page */
.assistant-page {
display: flex;
flex-direction: column;
height: 100%;
}
.assistant-toolbar {
display: flex;
gap: 8px;
align-items: center;
padding: 8px 0;
border-bottom: 1px solid var(--border-color);
margin-bottom: 8px;
}
.assistant-toolbar select {
padding: 4px 8px;
border: 1px solid var(--border-color);
background: var(--input-bg);
color: var(--text-color);
font-size: 13px;
}
.assistant-panels {
display: flex;
gap: 12px;
flex: 1;
min-height: 0;
}
.assistant-input-panel,
.assistant-output-panel {
flex: 1;
display: flex;
flex-direction: column;
}
.assistant-input-panel h4,
.assistant-output-panel h4 {
margin: 0 0 6px 0;
font-size: 13px;
font-weight: bold;
}
.assistant-textarea {
flex: 1;
resize: none;
padding: 8px;
border: 1px solid var(--border-color);
background: var(--input-bg);
color: var(--text-color);
font-family: monospace;
font-size: 13px;
min-height: 200px;
}
.assistant-output {
flex: 1;
padding: 8px;
border: 1px solid var(--border-color);
background: var(--card-bg);
color: var(--text-color);
font-family: monospace;
font-size: 13px;
overflow-y: auto;
white-space: pre-wrap;
min-height: 200px;
}
.assistant-output pre {
margin: 0;
white-space: pre-wrap;
font-family: inherit;
font-size: inherit;
}
.assistant-error {
color: red;
}
.assistant-hint {
color: var(--border-color);
font-style: italic;
}
2026-05-14 12:31:35 +02:00
::-webkit-scrollbar-track {
background: var(--window-bg);
}
::-webkit-scrollbar-thumb {
background: var(--border-color);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--accent-color);
}