Files
obsidian-memex-chat/styles.css
svemagie a5b1ef8158 fresh
2026-03-31 14:20:47 +02:00

1025 lines
18 KiB
CSS

/* ─── Memex Chat Plugin Styles ───────────────────────────────────────── */
/* ─── Related Notes Panel ────────────────────────────────────────────── */
.vc-related-header {
padding: 10px 12px 6px;
border-bottom: 1px solid var(--background-modifier-border);
}
.vc-related-title {
font-weight: 600;
font-size: 13px;
color: var(--text-normal);
}
.vc-related-subtitle {
font-size: 11px;
color: var(--text-muted);
margin-top: 2px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.vc-related-status {
padding: 16px 12px;
font-size: 12px;
color: var(--text-muted);
}
.vc-related-list {
overflow-y: auto;
}
.vc-related-item {
display: flex;
align-items: center;
gap: 8px;
padding: 7px 12px;
cursor: pointer;
border-bottom: 1px solid var(--background-modifier-border);
transition: background 0.1s;
}
.vc-related-item:hover {
background: var(--background-modifier-hover);
}
.vc-related-info {
flex: 1;
min-width: 0;
}
.vc-related-name-row {
display: flex;
align-items: baseline;
gap: 5px;
min-width: 0;
}
.vc-related-name {
font-size: 12px;
font-weight: 500;
color: var(--text-normal);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
min-width: 0;
}
.vc-related-linked {
font-size: 9px;
font-weight: 600;
color: var(--color-accent);
background: color-mix(in srgb, var(--color-accent) 15%, transparent);
border-radius: 3px;
padding: 0 4px;
white-space: nowrap;
flex-shrink: 0;
text-transform: uppercase;
letter-spacing: 0.03em;
}
.vc-related-folder {
font-size: 10px;
color: var(--text-faint);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.vc-related-score-wrap {
display: flex;
flex-direction: column;
align-items: flex-end;
gap: 3px;
flex-shrink: 0;
}
.vc-related-bar {
width: 48px;
height: 3px;
background: var(--background-modifier-border);
border-radius: 2px;
overflow: hidden;
}
.vc-related-bar-fill {
height: 100%;
background: var(--interactive-accent);
border-radius: 2px;
}
.vc-related-pct {
font-size: 10px;
color: var(--text-muted);
}
.vc-root {
display: flex;
flex-direction: column;
height: 100%;
font-size: 14px;
overflow: hidden;
}
/* Header */
.vc-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px 12px 8px;
border-bottom: 1px solid var(--background-modifier-border);
flex-shrink: 0;
}
.vc-header-title {
font-weight: 600;
font-size: 15px;
color: var(--text-normal);
}
.vc-header-modes {
display: flex;
gap: 4px;
flex: 1;
justify-content: center;
}
.vc-mode-btn {
background: none;
border: 1px solid var(--background-modifier-border);
border-radius: 12px;
padding: 2px 10px;
font-size: 11px;
font-weight: 500;
color: var(--text-muted);
cursor: pointer;
transition: background 0.15s, color 0.15s, border-color 0.15s;
white-space: nowrap;
}
.vc-mode-btn:hover {
background: var(--background-modifier-hover);
color: var(--text-normal);
}
.vc-mode-btn--active {
background: var(--interactive-accent);
border-color: var(--interactive-accent);
color: var(--text-on-accent);
}
.vc-mode-btn--active:hover {
opacity: 0.9;
color: var(--text-on-accent);
background: var(--interactive-accent);
}
/* Mode hint panel */
.vc-mode-hint {
margin-bottom: 8px;
padding: 10px 12px;
background: var(--background-secondary);
border: 1px solid var(--background-modifier-border);
border-radius: 6px;
}
.vc-mode-hint-text {
margin: 0;
font-size: 12px;
line-height: 1.6;
color: var(--text-muted);
white-space: pre-wrap;
}
.vc-header-actions {
display: flex;
gap: 4px;
}
.vc-icon-btn {
background: none;
border: none;
cursor: pointer;
padding: 4px 6px;
border-radius: 4px;
color: var(--text-muted);
display: flex;
align-items: center;
justify-content: center;
font-size: 12px;
transition: background 0.15s, color 0.15s;
}
.vc-icon-btn:hover {
background: var(--background-modifier-hover);
color: var(--text-normal);
}
/* Main layout */
.vc-main {
display: flex;
flex: 1;
overflow: hidden;
}
/* Thread sidebar */
.vc-sidebar {
width: 140px;
flex-shrink: 0;
border-right: 1px solid var(--background-modifier-border);
display: flex;
flex-direction: column;
overflow: hidden;
}
.vc-sidebar-title {
padding: 8px 10px 6px;
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--text-muted);
flex-shrink: 0;
}
.vc-thread-list {
overflow-y: auto;
flex: 1;
}
.vc-thread-item {
display: flex;
align-items: center;
padding: 6px 10px;
cursor: pointer;
border-radius: 0;
gap: 4px;
transition: background 0.1s;
}
.vc-thread-item:hover {
background: var(--background-modifier-hover);
}
.vc-thread-item--active {
background: var(--background-modifier-active-hover);
border-left: 2px solid var(--interactive-accent);
}
.vc-thread-title {
flex: 1;
font-size: 12px;
color: var(--text-normal);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
cursor: pointer;
}
.vc-thread-del {
font-size: 10px;
opacity: 0;
transition: opacity 0.15s;
}
.vc-thread-item:hover .vc-thread-del {
opacity: 1;
}
/* Rename input */
.vc-thread-rename {
flex: 1;
font-size: 12px;
background: var(--background-primary);
border: 1px solid var(--interactive-accent);
border-radius: 3px;
color: var(--text-normal);
padding: 1px 4px;
width: 0; /* flex will expand it */
min-width: 0;
outline: none;
}
/* History section */
.vc-history-section {
flex-shrink: 0;
border-top: 1px solid var(--background-modifier-border);
}
.vc-history-toggle {
display: flex;
align-items: center;
gap: 4px;
padding: 6px 10px;
cursor: pointer;
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--text-muted);
user-select: none;
}
.vc-history-toggle:hover {
color: var(--text-normal);
}
.vc-history-arrow {
font-size: 10px;
}
.vc-history-label {
flex: 1;
}
.vc-history-list {
overflow-y: auto;
max-height: 180px;
}
.vc-history-item {
display: flex;
align-items: center;
padding: 5px 10px;
cursor: pointer;
font-size: 12px;
color: var(--text-muted);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.vc-history-item:hover {
background: var(--background-modifier-hover);
color: var(--text-normal);
}
.vc-history-empty {
padding: 6px 10px;
font-size: 11px;
color: var(--text-faint);
font-style: italic;
}
/* Chat area */
.vc-chat-area {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
min-width: 0;
}
/* Status */
.vc-status {
padding: 4px 12px;
font-size: 11px;
color: var(--text-accent);
background: var(--background-secondary);
flex-shrink: 0;
display: none;
border-bottom: 1px solid var(--background-modifier-border);
}
/* Messages */
.vc-messages {
flex: 1;
overflow-y: auto;
padding: 12px;
display: flex;
flex-direction: column;
gap: 12px;
}
.vc-empty {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100%;
gap: 8px;
color: var(--text-muted);
text-align: center;
padding: 20px;
}
.vc-empty-icon {
font-size: 32px;
margin-bottom: 8px;
}
.vc-empty-text {
font-size: 13px;
line-height: 1.5;
}
.vc-empty-hint {
font-size: 11px;
opacity: 0.7;
font-style: italic;
}
.vc-msg {
display: flex;
flex-direction: column;
gap: 4px;
}
.vc-msg--user {
align-items: flex-end;
}
.vc-msg--assistant {
align-items: flex-start;
}
.vc-bubble {
max-width: 90%;
padding: 8px 12px;
border-radius: 12px;
font-size: 13px;
line-height: 1.55;
user-select: text !important;
-webkit-user-select: text !important;
cursor: text;
}
.vc-bubble * {
user-select: text !important;
-webkit-user-select: text !important;
}
.vc-msg--user .vc-bubble {
background: var(--interactive-accent);
color: var(--text-on-accent);
border-bottom-right-radius: 4px;
white-space: pre-wrap;
}
.vc-msg--assistant .vc-bubble {
background: var(--background-secondary);
color: var(--text-normal);
border-bottom-left-radius: 4px;
width: 100%;
max-width: 100%;
}
/* Markdown rendering inside bubble */
.vc-md {
line-height: 1.65;
}
.vc-md p {
margin: 0 0 10px;
}
.vc-md p:last-child {
margin-bottom: 0;
}
.vc-md h1, .vc-md h2, .vc-md h3 {
margin: 16px 0 6px;
font-size: 1em;
font-weight: 600;
}
.vc-md h1:first-child, .vc-md h2:first-child, .vc-md h3:first-child {
margin-top: 4px;
}
.vc-md code {
background: var(--background-primary-alt);
padding: 1px 5px;
border-radius: 3px;
font-size: 0.88em;
}
.vc-md pre {
position: relative;
background: var(--background-primary-alt);
padding: 10px 12px;
border-radius: 6px;
overflow-x: auto;
font-size: 12px;
margin: 10px 0;
line-height: 1.5;
}
/* Hide Obsidian's injected copy-code button inside chat bubbles */
.vc-md .copy-code-button,
.vc-md pre > button,
.vc-md .code-block-flair {
display: none !important;
}
.vc-md pre code {
background: none;
padding: 0;
font-size: inherit;
}
.vc-md ul, .vc-md ol {
padding-left: 22px;
margin: 6px 0 10px;
}
.vc-md li {
margin: 4px 0;
}
.vc-md li > ul, .vc-md li > ol {
margin: 4px 0;
}
.vc-md a.internal-link {
color: var(--text-accent);
cursor: pointer;
text-decoration: none;
}
.vc-md a.internal-link:hover {
text-decoration: underline;
}
.vc-md blockquote {
border-left: 3px solid var(--text-muted);
margin: 10px 0;
padding: 6px 10px;
color: var(--text-muted);
}
.vc-md hr {
border: none;
border-top: 1px solid var(--background-modifier-border);
margin: 12px 0;
}
.vc-md table {
border-collapse: collapse;
width: 100%;
margin: 10px 0;
font-size: 12px;
}
.vc-md th, .vc-md td {
border: 1px solid var(--background-modifier-border);
padding: 5px 8px;
text-align: left;
}
/* Unresolved link suggestion */
.vc-link-hint {
display: inline;
font-size: 0.88em;
}
.vc-link-hint-label {
color: var(--text-muted);
}
.vc-link-hint-target {
color: var(--text-accent);
cursor: pointer;
text-decoration: none;
}
.vc-link-hint-target:hover {
text-decoration: underline;
}
/* Streaming cursor */
.vc-cursor {
animation: blink 1s step-end infinite;
opacity: 0.7;
font-size: 11px;
}
@keyframes blink {
0%, 100% { opacity: 0; }
50% { opacity: 0.7; }
}
/* Sources */
.vc-sources {
display: flex;
flex-wrap: wrap;
gap: 4px;
align-items: center;
padding: 4px 0 2px;
font-size: 11px;
}
.vc-sources-label {
color: var(--text-muted);
}
.vc-source-link {
color: var(--text-accent);
cursor: pointer;
background: var(--background-secondary);
padding: 1px 6px;
border-radius: 10px;
border: 1px solid var(--background-modifier-border);
transition: background 0.1s;
}
.vc-source-link:hover {
background: var(--background-modifier-hover);
}
/* Message action buttons (Copy, Save as Note) */
.vc-msg-actions {
display: flex;
gap: 6px;
margin-top: 6px;
opacity: 0;
transition: opacity 0.15s;
}
.vc-msg--assistant:hover .vc-msg-actions {
opacity: 1;
}
.vc-msg-action-btn {
display: inline-flex;
align-items: center;
gap: 4px;
background: none;
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
padding: 2px 8px;
font-size: 11px;
color: var(--text-muted);
cursor: pointer;
transition: background 0.1s, color 0.1s;
}
.vc-msg-action-btn:hover {
background: var(--background-modifier-hover);
color: var(--text-normal);
}
/* Context Preview */
.vc-context-preview {
padding: 8px 12px;
background: var(--background-secondary);
border-top: 1px solid var(--background-modifier-border);
flex-shrink: 0;
max-height: 200px;
overflow-y: auto;
}
.vc-ctx-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 6px;
}
.vc-ctx-title {
font-size: 12px;
font-weight: 600;
color: var(--text-normal);
}
.vc-ctx-actions {
display: flex;
gap: 6px;
}
.vc-ctx-list {
display: flex;
flex-direction: column;
gap: 4px;
}
.vc-ctx-item {
padding: 5px 8px;
background: var(--background-primary);
border-radius: 6px;
border: 1px solid var(--background-modifier-border);
font-size: 12px;
}
.vc-ctx-item-header {
display: flex;
align-items: center;
gap: 6px;
margin-bottom: 2px;
}
.vc-ctx-item-title {
flex: 1;
font-weight: 500;
color: var(--text-accent);
cursor: pointer;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.vc-ctx-item-title:hover {
text-decoration: underline;
}
.vc-ctx-score {
font-size: 10px;
color: var(--text-muted);
background: var(--background-modifier-hover);
padding: 1px 5px;
border-radius: 8px;
}
.vc-ctx-remove {
font-size: 10px;
color: var(--text-muted);
padding: 1px 4px;
}
.vc-ctx-excerpt {
color: var(--text-muted);
font-size: 11px;
line-height: 1.4;
}
/* Input area */
.vc-input-area {
padding: 8px 12px 12px;
border-top: 1px solid var(--background-modifier-border);
flex-shrink: 0;
}
.vc-input-wrapper {
position: relative;
margin-bottom: 6px;
}
.vc-mention-dropdown {
background: var(--background-primary);
border: 1px solid var(--background-modifier-border);
border-radius: 8px;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
max-height: 220px;
overflow-y: auto;
z-index: 9999;
}
.vc-mention-item {
padding: 7px 12px;
font-size: 13px;
cursor: pointer;
color: var(--text-normal);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.vc-mention-item:hover,
.vc-mention-item--active {
background: var(--background-modifier-hover);
color: var(--text-accent);
}
.vc-input {
width: 100%;
resize: none;
border: 1px solid var(--background-modifier-border);
border-radius: 8px;
padding: 8px 10px;
font-size: 13px;
font-family: var(--font-text);
background: var(--background-primary);
color: var(--text-normal);
outline: none;
transition: border-color 0.15s;
line-height: 1.5;
min-height: 60px;
max-height: 200px;
box-sizing: border-box;
}
.vc-input:focus {
border-color: var(--interactive-accent);
}
.vc-input-actions {
display: flex;
align-items: center;
justify-content: space-between;
}
.vc-ctx-btn {
font-size: 11px;
padding: 4px 8px;
border-radius: 5px;
background: var(--background-modifier-hover);
border: 1px solid var(--background-modifier-border);
color: var(--text-muted);
cursor: pointer;
display: flex;
align-items: center;
gap: 4px;
transition: background 0.1s, color 0.1s;
}
.vc-ctx-btn:hover {
background: var(--background-modifier-active-hover);
color: var(--text-normal);
}
.vc-send-btn {
padding: 6px 16px;
background: var(--interactive-accent);
color: var(--text-on-accent);
border: none;
border-radius: 6px;
font-size: 13px;
font-weight: 500;
cursor: pointer;
transition: opacity 0.15s;
}
.vc-send-btn:hover {
opacity: 0.9;
}
.vc-send-btn:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.vc-send-btn--sm {
padding: 3px 10px;
font-size: 11px;
}
/* Priority properties tag editor (Settings) */
.vc-prop-tags {
display: flex;
flex-wrap: wrap;
gap: 5px;
margin-bottom: 8px;
}
.vc-prop-tag {
display: inline-flex;
align-items: center;
gap: 4px;
background: var(--background-modifier-hover);
border: 1px solid var(--background-modifier-border);
border-radius: 12px;
padding: 2px 8px 2px 10px;
font-size: 12px;
color: var(--text-normal);
}
.vc-prop-tag-remove {
background: none;
border: none;
cursor: pointer;
color: var(--text-muted);
font-size: 14px;
line-height: 1;
padding: 0 1px;
border-radius: 50%;
}
.vc-prop-tag-remove:hover {
color: var(--text-error);
}
.vc-prop-add-row {
display: flex;
gap: 6px;
align-items: center;
}
.vc-prop-input {
flex: 1;
border: 1px solid var(--background-modifier-border);
border-radius: 6px;
padding: 4px 8px;
font-size: 12px;
background: var(--background-primary);
color: var(--text-normal);
outline: none;
min-width: 0;
}
.vc-prop-input:focus {
border-color: var(--interactive-accent);
}
.vc-prop-add-btn {
background: var(--interactive-accent);
color: var(--text-on-accent);
border: none;
border-radius: 6px;
padding: 4px 10px;
font-size: 16px;
font-weight: 500;
cursor: pointer;
line-height: 1;
}
.vc-prop-add-btn:hover {
opacity: 0.85;
}
/* Folder autocomplete */
.vc-folder-search-wrap {
position: relative;
flex: 1;
}
.vc-folder-dropdown {
position: absolute;
top: 100%;
left: 0;
right: 0;
z-index: 100;
background: var(--background-primary);
border: 1px solid var(--background-modifier-border);
border-radius: 6px;
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
max-height: 220px;
overflow-y: auto;
margin-top: 2px;
}
.vc-folder-item {
padding: 5px 10px;
font-size: 12px;
cursor: pointer;
color: var(--text-normal);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.vc-folder-item:hover {
background: var(--background-modifier-hover);
}
/* Prompt button settings list */
.vc-pbtn-list {
display: flex;
flex-direction: column;
gap: 6px;
margin-bottom: 8px;
}
.vc-pbtn-row,
.vc-pbtn-add-row {
display: flex;
gap: 6px;
align-items: center;
}
.vc-pbtn-input {
border: 1px solid var(--background-modifier-border);
border-radius: 6px;
padding: 4px 8px;
font-size: 12px;
background: var(--background-primary);
color: var(--text-normal);
outline: none;
width: 110px;
flex-shrink: 0;
}
.vc-pbtn-input:focus {
border-color: var(--interactive-accent);
}
.vc-pbtn-path {
flex: 1;
width: auto;
}
.vc-pbtn-card {
display: flex;
flex-direction: column;
gap: 4px;
padding: 8px;
background: var(--background-secondary);
border: 1px solid var(--background-modifier-border);
border-radius: 6px;
}
.vc-pbtn-row2 {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 6px;
}
.vc-pbtn-toggle-wrap {
display: flex;
align-items: center;
gap: 4px;
font-size: 12px;
color: var(--text-muted);
cursor: pointer;
white-space: nowrap;
}
.vc-pbtn-folders {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 4px;
}
.vc-pbtn-folder-label {
font-size: 11px;
color: var(--text-muted);
}