From 66039028a51cab6bd19b9c07bbd29506e0bb0190 Mon Sep 17 00:00:00 2001 From: Bruno Charest Date: Tue, 16 Jun 2026 07:37:39 -0400 Subject: [PATCH] feat: panneau A propos elegant + retrait Editor POC - Remplace Editor POC par A propos (sparkles) dans le menu header - Modale About avec animation fade+scale, logo SVG, hero gradient - Stats live: fichiers, vaults (API /health), tests (285) - Stack techno: 12 badges (FastAPI, vanilla JS, Docker, etc.) - Footer: date livraison, blague aleatoire (10 variantes humour) - Touche d'humour: git push --force accidentels, CSS > backend - Fermeture: bouton X, clic overlay, Escape - initAboutModal dans sync.js + config.js export --- frontend/index.html | 69 +- frontend/js/app.js | 2 +- frontend/js/config.js | 57 + frontend/js/legacy.js | 2 +- frontend/js/sync.js | 3 +- frontend/style.css | 8353 +---------------------------------------- 6 files changed, 197 insertions(+), 8289 deletions(-) diff --git a/frontend/index.html b/frontend/index.html index 7ef9061..64a7792 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -611,7 +611,7 @@ @@ -4780,5 +4780,66 @@ curl -X POST https://votre-serveur.com/webhook \ + +
+
+ +
+ +

ObsiGate

+

Vos notes Obsidian,
simplement accessibles.

+ v2.0.0-dev +
+
+
+
+ β€” + Fichiers +
+
+ β€” + Vaults +
+
+ 285 + Tests +
+
+
+

Construit avec

+
+ 🐍 FastAPI + ⚑ vanilla JS + 🎨 CSS custom + 🐳 Docker + πŸ” TF-IDF + πŸ“ CodeMirror 6 + 🧜 Mermaid.js + 🧠 Argon2id + πŸ”„ Watchdog + πŸ“Š WeasyPrint + πŸ§ͺ Playwright + πŸ€– AI multi-provider +
+
+ +
+
+
diff --git a/frontend/js/app.js b/frontend/js/app.js index 03b0186..3e8dfb1 100644 --- a/frontend/js/app.js +++ b/frontend/js/app.js @@ -38,7 +38,7 @@ async function init() { Legacy.initSidebarTabs(); Legacy.initHelpModal(); Legacy.initConfigModal(); - Legacy.initEditorPocBtn(); + Legacy.initAboutModal(); Sidebar.initSidebarFilter(); UI.initSidebarResize(); Utils.initEditor(); diff --git a/frontend/js/config.js b/frontend/js/config.js index 1db9678..f8122a1 100644 --- a/frontend/js/config.js +++ b/frontend/js/config.js @@ -1386,6 +1386,7 @@ export { loadAbout as initAboutSection, loadHiddenFilesSettings as initHiddenFilesConfig, initThemePicker, + initAboutModal, switchSidebarTab, }; @@ -1451,3 +1452,59 @@ function initThemePicker() { renderCards(); }); } + +// ── About Modal ────────────────────────────────────────────────────── +function initAboutModal() { + var overlay = document.getElementById('about-overlay'); + var closeBtn = document.getElementById('about-close'); + if (!overlay) return; + + // Open button + var openBtn = document.getElementById('about-open-btn'); + if (openBtn) { + openBtn.addEventListener('click', function() { + overlay.classList.add('active'); + populateAbout(); + }); + } + + // Close + closeBtn.addEventListener('click', function() { overlay.classList.remove('active'); }); + overlay.addEventListener('click', function(e) { if (e.target === overlay) overlay.classList.remove('active'); }); + document.addEventListener('keydown', function(e) { if (e.key === 'Escape' && overlay.classList.contains('active')) overlay.classList.remove('active'); }); + + function populateAbout() { + // Live stats from health endpoint + fetch('/api/health') + .then(function(r) { return r.json(); }) + .then(function(d) { + var fEl = document.getElementById('about-stat-files'); + var vEl = document.getElementById('about-stat-vaults'); + if (fEl) fEl.textContent = d.total_files || 'β€”'; + if (vEl) vEl.textContent = d.vaults || 'β€”'; + }) + .catch(function() {}); + + // Build date (today) + var now = new Date(); + var months = ['Janvier','Fevrier','Mars','Avril','Mai','Juin','Juillet','Aout','Septembre','Octobre','Novembre','Decembre']; + var dateEl = document.getElementById('about-build-date'); + if (dateEl) dateEl.textContent = months[now.getMonth()] + ' ' + now.getFullYear(); + + // Random joke + var jokes = [ + '0 bug connu. Les autres sont timides.', + 'Compile du premier coup. (Sauf le lundi matin.)', + 'Ecrit par un humain. Probablement.', + 'Aucun LLM n\'a ete blesse durant ce developpement.', + 'Quand ca marche, on appelle ca une feature.', + 'CSS: 90% du temps de dev, 10% du code.', + 'Dark mode active depuis la naissance du projet.', + 'Ca marche sur ma machineβ„’', + 'Techniquement, tout est un edge case.', + 'Le CSS de ce panneau a pris plus de temps que le backend.' + ]; + var jokeEl = document.getElementById('about-joke'); + if (jokeEl) jokeEl.textContent = 'Β« ' + jokes[Math.floor(Math.random() * jokes.length)] + ' Β»'; + } +} diff --git a/frontend/js/legacy.js b/frontend/js/legacy.js index 3e29b2b..de57aac 100644 --- a/frontend/js/legacy.js +++ b/frontend/js/legacy.js @@ -25,7 +25,7 @@ import { } from './dashboard.js'; // --- Re-exports from modules that already have these functions --- -export { initSidebarTabs, initConfigModal, initHelpModal, initRecentTab, initEditorPocBtn } from './config.js'; +export { initSidebarTabs, initConfigModal, initHelpModal, initRecentTab, initAboutModal } from './config.js'; export { initSyncStatus } from './sync.js'; export { DashboardRecentWidget } from './dashboard.js'; diff --git a/frontend/js/sync.js b/frontend/js/sync.js index c1f803c..2a7ce70 100644 --- a/frontend/js/sync.js +++ b/frontend/js/sync.js @@ -3,7 +3,7 @@ import { state } from './state.js'; import { showToast } from './ui.js'; import { api } from './auth.js'; import { loadVaults, loadTags, refreshTagsForContext, refreshSidebarTreePreservingState } from './sidebar.js'; -import { loadRecentFiles } from './config.js'; +import { loadRecentFiles, initAboutModal } from './config.js'; import { openFile } from './viewer.js'; import { initOffline, syncFileIndexFromServer } from './offline.js'; import { initThemes } from './themes.js'; @@ -554,6 +554,7 @@ export function init() { registerServiceWorker(); initOffline(); initThemes(); + initAboutModal(); // Sync file index after a short delay (let vaults load first) setTimeout(() => syncFileIndexFromServer(), 3000); initDashboardTabs(); diff --git a/frontend/style.css b/frontend/style.css index d167c2f..78ddddf 100644 --- a/frontend/style.css +++ b/frontend/style.css @@ -1,8307 +1,96 @@ -@import url("https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&family=Lora:ital,wght@0,400;0,600;1,400&display=swap"); -/* ===== RESET ===== */ -*, -*::before, -*::after { - margin: 0; - padding: 0; - box-sizing: border-box; +/* ── About Modal ── */ +.about-overlay { + position: fixed; inset: 0; z-index: 1000; + background: rgba(0,0,0,0.7); backdrop-filter: blur(6px); + display: none; align-items: center; justify-content: center; } - -/* ── Editor save dot state colors ── */ -:root { - --ok: #34d399; - --warn: #fbbf24; - --ai: #8b5cf6; - --err: #f87171; -} - -/* ===== THEME β€” DARK (default) ===== */ -:root[data-theme="dark"] { - --bg-primary: #0f1117; - --bg-secondary: #161b22; - --bg-sidebar: #13161d; - --bg-hover: #1f2430; - --border: #21262d; - --text-primary: #e6edf3; - --text-secondary: #8b949e; - --text-muted: #484f58; - --accent: #58a6ff; - --accent-green: #3fb950; - --tag-bg: #1f2a3a; - --tag-text: #79c0ff; - --code-bg: #161b22; - --search-bg: #21262d; - --scrollbar: #30363d; - --resize-handle: #30363d; - --overlay-bg: rgba(0, 0, 0, 0.5); - --danger: #ff7b72; - --danger-bg: #3d1a18; - --success: #3fb950; - --success-bg: #1a3d1f; - - /* Accent Card variables */ - --accent-card: #58a6ff; - --accent-bg: #1f2a3a; - --accent-text: #79c0ff; - --green: #3fb950; - --green-bg: #1a3d1f; - --purple: #a371f7; - --purple-bg: #2d1b4e; - --surface: #161b22; - --surface2: #0f1117; - --surface3: #0d0f14; - --border-md: #30363d; - --text: #e6edf3; - --text-2: #8b949e; - --text-3: #484f58; - --mono: "JetBrains Mono", monospace; - --radius: 6px; - --radius-lg: 10px; -} - -/* ===== THEME β€” LIGHT ===== */ -:root[data-theme="light"] { - --bg-primary: #ffffff; - --bg-secondary: #f6f8fa; - --bg-sidebar: #f0f2f5; - --bg-hover: #e8ecf0; - --border: #d0d7de; - --text-primary: #1f2328; - --text-secondary: #57606a; - --text-muted: #9198a1; - --accent: #0969da; - --accent-green: #1a7f37; - --tag-bg: #ddf4ff; - --tag-text: #0969da; - --code-bg: #f6f8fa; - --search-bg: #ffffff; - --scrollbar: #d0d7de; - --resize-handle: #d0d7de; - --overlay-bg: rgba(0, 0, 0, 0.3); - --danger: #cf222e; - --danger-bg: #ffebe9; - --success: #1a7f37; - --success-bg: #dafbe1; - - /* Accent Card variables */ - --accent-card: #4f6ef7; - --accent-bg: #eef1fe; - --accent-text: #2540c9; - --green: #1a7f50; - --green-bg: #eaf5ee; - --purple: #6b40c4; - --purple-bg: #f1ecfd; - --surface: #ffffff; - --surface2: #f2f1ef; - --surface3: #ebe9e6; - --border-md: rgba(0, 0, 0, 0.13); - --text: #1a1917; - --text-2: #6b6a67; - --text-3: #a09e9b; - --mono: "JetBrains Mono", monospace; - --radius: 6px; - --radius-lg: 10px; -} - -/* ===== BASE ===== */ -html { - font-size: 16px; - scroll-behavior: smooth; -} - -body { - font-family: "Lora", Georgia, serif; - background: var(--bg-primary); - color: var(--text-primary); - line-height: 1.7; - transition: - background 200ms ease, - color 200ms ease; - overflow: hidden; - height: 100vh; -} - -a { - color: var(--accent); - text-decoration: none; -} -a:hover { - text-decoration: underline; -} - -/* ===== LAYOUT ===== */ -.app-container { - display: flex; - flex-direction: column; - height: 100vh; -} - -/* --- Header --- */ -.header { - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; - padding: 10px 20px; +.about-overlay.active { display: flex; } +.about-modal { background: var(--bg-secondary); - border-bottom: 1px solid var(--border); - flex-shrink: 0; - z-index: 100; - transition: background 200ms ease; -} - -.header-left { - display: flex; - align-items: center; - gap: 12px; - flex: 0 1 auto; -} - -.header-center { - display: flex; - justify-content: center; - flex: 1 1 auto; - max-width: 600px; -} - -.header-right { - display: flex; - align-items: center; - justify-content: flex-end; - gap: 12px; - flex: 0 1 auto; -} - -.vault-context-indicator { - display: flex; - align-items: center; - gap: 6px; - padding: 6px 12px; - border: 1px solid var(--border); - border-radius: 8px; - font-family: "JetBrains Mono", monospace; - font-size: 0.75rem; - font-weight: 600; - cursor: default; - transition: all 200ms ease; - /* Default: neutral (overridden by classes below) */ - background: var(--bg-tertiary); - color: var(--text-muted); -} -.vault-context-indicator:hover { - filter: brightness(1.15); -} -.vault-context-indicator i { - opacity: 0.8; -} - -/* ── Offline Indicator ── */ -.offline-indicator { - position: relative; - display: flex; - align-items: center; - justify-content: center; - margin-right: 8px; - cursor: default; -} -.offline-indicator.offline i { - color: var(--warning, #f59e0b); - opacity: 1; -} -.offline-pending { - position: absolute; - top: -4px; - right: -8px; - background: var(--danger, #ef4444); - color: #fff; - font-size: 0.6rem; - font-weight: 700; - min-width: 14px; - height: 14px; - line-height: 14px; - text-align: center; - border-radius: 7px; - padding: 0 3px; -} - -/* ── Offline Search Result Badge ── */ -.search-result-offline-badge { - display: inline-block; - background: var(--warning, #f59e0b); - color: #000; - font-size: 0.55rem; - font-weight: 700; - padding: 1px 5px; - border-radius: 3px; - margin-left: 6px; - vertical-align: middle; - text-transform: uppercase; -} - -/* ── Conflict Resolution Modal ── */ -.conflict-modal-overlay { - position: fixed; - inset: 0; - background: rgba(0,0,0,0.6); - z-index: 9999; - display: flex; - align-items: center; - justify-content: center; -} -.conflict-modal { - background: var(--bg-card, #1e1e2e); - border: 1px solid var(--border, #333); - border-radius: 8px; - padding: 24px; - max-width: 600px; - width: 90%; - max-height: 80vh; - overflow-y: auto; -} -.conflict-modal h3 { - margin: 0 0 8px; - font-size: 1.1rem; -} -.conflict-modal p { - color: var(--text-muted, #888); - font-size: 0.85rem; - margin: 0 0 16px; -} -.conflict-modal-actions { - display: flex; - gap: 8px; - justify-content: flex-end; -} -.conflict-modal-actions button { - padding: 8px 16px; - border-radius: 6px; - border: 1px solid var(--border, #333); - background: var(--bg-input, #2a2a3c); - color: var(--text, #ddd); - cursor: pointer; - font-size: 0.85rem; -} -.conflict-modal-actions .btn-primary { - background: var(--accent, #3b82f6); - border-color: var(--accent); - color: #fff; -} - -/* All vaults β€” blue */ -.vault-ctx-all { - background: color-mix(in srgb, #3b82f6 14%, transparent) !important; - border-color: color-mix(in srgb, #3b82f6 30%, var(--border)) !important; - color: #60a5fa !important; -} -.vault-ctx-all i { color: #60a5fa !important; } - -/* Specific vault β€” mauve/violet */ -.vault-ctx-vault { - background: color-mix(in srgb, #a855f7 14%, transparent) !important; - border-color: color-mix(in srgb, #a855f7 30%, var(--border)) !important; - color: #c084fc !important; -} -.vault-ctx-vault i { color: #c084fc !important; } - -/* Directory β€” amber/yellow */ -.vault-ctx-dir { - background: color-mix(in srgb, #f59e0b 14%, transparent) !important; - border-color: color-mix(in srgb, #f59e0b 30%, var(--border)) !important; - color: #fbbf24 !important; -} -.vault-ctx-dir i { color: #fbbf24 !important; } - -.hamburger-btn { - display: none; - background: none; - border: none; - color: var(--text-secondary); - cursor: pointer; - padding: 4px; - align-items: center; - justify-content: center; - flex-shrink: 0; -} -.hamburger-btn:hover { - color: var(--accent); -} - -.sidebar-toggle-btn { - display: flex; - background: none; - border: none; - color: var(--text-secondary); - cursor: pointer; - padding: 4px; - align-items: center; - justify-content: center; - flex-shrink: 0; - transition: color 200ms ease; -} -.sidebar-toggle-btn:hover { - color: var(--accent); -} -.sidebar-toggle-btn.active { - color: var(--accent); -} - -.header-logo { - font-family: "JetBrains Mono", monospace; - font-weight: 700; - font-size: 1.15rem; - color: var(--accent); - white-space: nowrap; - display: flex; - align-items: center; - gap: 8px; - cursor: pointer; - transition: opacity 200ms ease; - text-decoration: none; -} -.header-logo:hover { - opacity: 0.8; - text-decoration: none; -} - -.search-wrapper { - width: 100%; - max-width: 620px; - position: relative; - display: flex; - flex-direction: column; - gap: 4px; -} - -.search-wrapper .search-icon { - position: absolute; - left: 10px; - top: 14px; - color: var(--text-secondary); - pointer-events: none; - z-index: 1; -} - -.search-input-wrapper { - position: relative; - flex: 1; - display: flex; - align-items: center; -} - -.search-input-wrapper input { - flex: 1; - min-width: 0; - padding: 8px 14px 8px 38px; - border: 1px solid var(--border); - border-radius: 6px; - background: var(--bg-secondary); - color: var(--text-primary); - font-family: "JetBrains Mono", monospace; - font-size: 0.9rem; - outline: none; - transition: - border-color 200ms ease, - background 200ms ease; -} - -.search-input-wrapper input:focus { - border-color: var(--accent); -} - -.search-actions { - display: flex; - align-items: center; - gap: 2px; - flex-shrink: 0; - padding-left: 4px; -} - -.search-btn { - display: flex; - align-items: center; - justify-content: center; - min-width: 26px; - height: 26px; - padding: 0 4px; - border: 1px solid var(--border); - border-radius: 4px; - background: var(--bg-secondary); - color: var(--text-secondary); - cursor: pointer; - font-family: "JetBrains Mono", monospace; - font-size: 0.7rem; - font-weight: 600; - transition: all 150ms ease; - flex-shrink: 0; -} - -.search-btn:hover { - border-color: var(--accent); - color: var(--accent); - background: color-mix(in srgb, var(--accent) 10%, var(--bg-secondary)); -} - -.search-btn.active { - border-color: var(--accent); - background: color-mix(in srgb, var(--accent) 20%, var(--bg-secondary)); - color: var(--accent); -} - -.header-menu { - position: relative; -} - -.header-menu-btn { - background: transparent; - border: 1px solid color-mix(in srgb, var(--accent) 22%, var(--border)); - border-radius: 12px; - padding: 10px 12px; - cursor: pointer; - color: var(--text-secondary); - display: flex; - align-items: center; - justify-content: center; - transition: - color 200ms ease, - border-color 200ms ease, - background 200ms ease, - transform 180ms ease; -} -.header-menu-btn:hover { - color: var(--accent); - border-color: var(--accent); - transform: translateY(-1px); -} -.header-menu-btn.active { - color: var(--accent); - border-color: var(--accent); - background: color-mix(in srgb, var(--accent) 10%, transparent); -} - -.header-menu-dropdown { - display: none; - position: absolute; - top: calc(100% + 8px); - right: 0; - background: var(--bg-secondary); - border: 1px solid var(--border); - border-radius: 16px; - box-shadow: 0 16px 36px rgba(0, 0, 0, 0.28); - min-width: 260px; - z-index: 100; - padding: 8px; -} -.header-menu-dropdown.active { - display: block; -} - -.menu-list { - display: flex; - flex-direction: column; -} - -.menu-list-row { - width: 100%; - display: grid; - grid-template-columns: 28px minmax(0, 1fr); - align-items: center; - gap: 8px; - padding: 4px 8px; - border-radius: 6px; - text-align: left; -} - -.menu-list-button { - border: none; - background: transparent; - cursor: pointer; - transition: - background 160ms ease, - color 160ms ease; -} - -.menu-list-button:hover, -.menu-list-select-row:hover { - background: var(--bg-hover); -} - -.menu-list-button + .menu-list-button, -.menu-list-select-row + .menu-list-button { - margin-top: 2px; -} - -.menu-list-icon { - width: 18px; - height: 18px; - display: inline-flex; - align-items: center; - justify-content: center; - flex-shrink: 0; - color: var(--accent); -} - -.menu-list-content { - display: flex; - flex-direction: column; - gap: 1px; - min-width: 0; -} - -.menu-list-title { - font-family: "JetBrains Mono", monospace; - font-size: 0.8rem; - font-weight: 600; - color: var(--text-primary); -} - -.menu-list-subtitle { - font-size: 0.7rem; - color: var(--text-muted); -} - -.menu-select { - width: 100%; - padding: 4px 22px 4px 0; - border: none; - border-radius: 0; - background: inherit; - color: var(--text-primary); - font-family: "JetBrains Mono", monospace; - font-size: 0.78rem; - font-weight: 500; - outline: none; - cursor: pointer; - transition: color 160ms ease; - color-scheme: dark; - background-color: transparent; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} - -.menu-select option { - background-color: var(--bg-secondary); - color: var(--text-primary); -} - -[data-theme="dark"] .menu-select, -[data-theme="dark"] .menu-select option { - background-color: #1e1e1e; - color: #e0e0e0; -} -.menu-select:hover, -.menu-select:focus { - color: var(--accent); -} - -.menu-list-select { - margin-top: 1px; -} - -/* Force dark mode on all select elements */ -select { - color-scheme: dark; -} - -[data-theme="dark"] select, -[data-theme="dark"] select option { - background-color: #161b22 !important; - color: #e6edf3 !important; -} - -[data-theme="light"] select, -[data-theme="light"] select option { - background-color: #f6f8fa !important; - color: #1f2328 !important; -} - -/* Custom Dropdown Styles */ -.custom-dropdown { - position: relative; - width: 100%; -} - -.custom-dropdown-trigger { - width: 100%; - display: flex; - align-items: center; - justify-content: space-between; - gap: 8px; - padding: 8px 12px; - background: var(--bg-secondary); - border: 1px solid var(--border); - border-radius: 8px; - color: var(--text-primary); - font-family: "JetBrains Mono", monospace; - font-size: 0.8rem; - cursor: pointer; - transition: - border-color 200ms ease, - background 200ms ease; -} - -.custom-dropdown-trigger:hover { - border-color: var(--accent); - background: var(--bg-hover); -} - -.custom-dropdown-trigger[aria-expanded="true"] { - border-color: var(--accent); -} - -.custom-dropdown-selected { - flex: 1; - text-align: left; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.custom-dropdown-menu { - display: none; - position: absolute; - top: calc(100% + 4px); - left: 0; - right: 0; - background: var(--bg-secondary); - border: 1px solid var(--border); - border-radius: 6px; - box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4); - max-height: 240px; - overflow-y: auto; - z-index: 1000; - list-style: none; - padding: 3px; - margin: 0; -} - -.custom-dropdown.open .custom-dropdown-menu { - display: block; -} - -.custom-dropdown-option { - padding: 6px 10px; - border-radius: 4px; - cursor: pointer; - font-family: "JetBrains Mono", monospace; - font-size: 0.8rem; - color: var(--text-primary); - transition: - background 150ms ease, - color 150ms ease; -} - -.custom-dropdown-option:hover, -.custom-dropdown-option:focus { - background: var(--bg-hover); - color: var(--accent); -} - -.custom-dropdown-option.selected { - background: color-mix(in srgb, var(--accent) 15%, transparent); - color: var(--accent); -} - -/* Sidebar dropdown specific */ -.sidebar-dropdown { - padding: 0 16px 12px; - position: relative; -} - -.sidebar-dropdown .custom-dropdown-menu { - position: fixed; - z-index: 10000; - left: auto; - right: auto; - width: auto; - min-width: 200px; -} - -.sidebar-dropdown .custom-dropdown-trigger { - background: var(--bg-sidebar); -} - -/* Menu list dropdown specific */ -.menu-list-select-row .custom-dropdown { - margin-top: 4px; -} - -.menu-list-select-row .custom-dropdown-trigger { - padding: 6px 10px; - font-size: 0.78rem; - background: var(--bg-primary); -} - -.main-body { - display: flex; - flex: 1; - overflow: hidden; - position: relative; -} - -/* --- Mobile overlay --- */ -.sidebar-overlay { - display: none; - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: var(--overlay-bg); - z-index: 199; -} -.sidebar-overlay.active { - display: block; -} - -/* --- Sidebar --- */ -.sidebar { - width: 280px; - min-width: 200px; - max-width: 500px; - background: var(--bg-sidebar); - border-right: 1px solid var(--border); - display: flex; - flex-direction: column; - overflow: hidden; - transition: - background 200ms ease, - transform 300ms ease; - flex-shrink: 0; -} - -.sidebar.hidden { - transform: translateX(-100%); - width: 0; - min-width: 0; - border-right: none; -} - -/* --- Sidebar filter --- */ -.sidebar-filter { - padding: 10px 12px; - border-bottom: 1px solid var(--border); - position: relative; - flex-shrink: 0; - display: flex; - align-items: center; -} - -.sidebar-filter-input-wrapper { - position: relative; - flex: 1; - display: flex; - align-items: center; -} - -.sidebar-filter-input-wrapper input { - width: 100%; - padding: 6px 10px 6px 32px; - border: 1px solid var(--border); - border-radius: 6px; - background: var(--search-bg); - color: var(--text-primary); - font-family: "JetBrains Mono", monospace; - font-size: 0.78rem; - outline: none; - transition: border-color 200ms ease; -} - -.sidebar-filter-input-wrapper input:focus { - border-color: var(--accent); -} - -.sidebar-filter-icon { - position: absolute; - left: 10px; - top: 50%; - transform: translateY(-50%); - color: var(--text-muted); - pointer-events: none; - z-index: 1; -} - -.sidebar-filter-actions { - position: absolute; - right: 4px; - top: 50%; - transform: translateY(-50%); - display: flex; - align-items: center; - gap: 4px; -} - -.sidebar-filter-btn { - display: flex; - align-items: center; - justify-content: center; - width: 24px; - height: 24px; - border: 1px solid var(--border); - border-radius: 4px; - background: var(--bg-secondary); - color: var(--text-secondary); - cursor: pointer; - font-family: "JetBrains Mono", monospace; - font-size: 0.65rem; - font-weight: 600; - transition: all 150ms ease; - padding: 0; - flex-shrink: 0; -} - -.sidebar-filter-btn:hover { - border-color: var(--accent); - color: var(--accent); - background: color-mix(in srgb, var(--accent) 10%, var(--bg-secondary)); -} - -.sidebar-filter-btn.active { - border-color: var(--accent); - background: color-mix(in srgb, var(--accent) 20%, var(--bg-secondary)); - color: var(--accent); -} - -/* --- Sidebar tabs --- */ -.sidebar-tabs { - display: flex; - flex-shrink: 0; - border-bottom: 1px solid var(--border); - padding: 0 8px; - gap: 2px; - background: var(--bg-sidebar); -} - -.sidebar-tab { - flex: 1; - display: flex; - align-items: center; - justify-content: center; - padding: 8px 4px 6px; - border: none; - border-bottom: 2px solid transparent; - background: transparent; - color: var(--text-muted); - cursor: pointer; - transition: color 150ms ease, border-color 150ms ease; - margin-bottom: -1px; -} - -.sidebar-tab:hover { - color: var(--text-primary); -} - -.sidebar-tab.active { - color: var(--accent); - border-bottom-color: var(--accent); -} - -.sidebar-tab .icon { - flex-shrink: 0; - color: inherit; -} - -/* --- Sidebar tab panels --- */ -.sidebar-tab-panel { - display: none; - flex: 1 1 auto; - min-height: 0; - overflow-y: auto; - scroll-behavior: smooth; - flex-direction: column; -} - -.sidebar-tab-panel.active { - display: flex; - flex-direction: column; -} - -.sidebar-tab-panel::-webkit-scrollbar { - width: 6px; -} -.sidebar-tab-panel::-webkit-scrollbar-thumb { - background: var(--scrollbar); - border-radius: 3px; -} - -#sidebar-panel-vaults .sidebar-dropdown { - padding: 10px 12px 6px; -} - -.tree-item { - display: flex; - align-items: center; - gap: 6px; - padding: 5px 16px; - font-family: "JetBrains Mono", monospace; - font-size: 0.82rem; - color: var(--text-secondary); - cursor: pointer; - border-radius: 0; - transition: - background 120ms ease, - color 120ms ease; - white-space: nowrap; - min-width: 0; /* Allow flex item to shrink */ -} - -.tree-item > .tree-item-text { - flex: 1; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - min-width: 0; -} -.tree-item:hover { - background: var(--bg-hover); - color: var(--text-primary); -} -.tree-item > .badge-small { - margin-left: 4px; -} -.tree-item.active { - background: var(--bg-hover); - color: var(--accent); -} -.tree-item.focused { - background: color-mix(in srgb, var(--accent) 12%, transparent); - color: var(--text-primary); - box-shadow: inset 2px 0 0 var(--accent); -} -.tree-item.path-selected { - background: color-mix(in srgb, var(--accent) 20%, transparent); - color: var(--accent); - box-shadow: - inset 0 0 0 2px var(--accent), - inset 2px 0 0 var(--accent); - border-radius: 6px; - animation: pathPulse 1.5s ease-out; -} -@keyframes pathPulse { - 0% { - background: color-mix(in srgb, var(--accent) 40%, transparent); - } - 100% { - background: color-mix(in srgb, var(--accent) 20%, transparent); - } -} -.tree-item.filtered-out { - display: none; -} - -.tree-item .icon { - width: 16px; - height: 16px; - flex-shrink: 0; - color: var(--accent); -} -.tree-item.active .icon { - color: var(--accent); -} -.tree-item.vault-item .icon { - color: var(--accent); -} - -.tree-item-action-btn { - margin-left: auto; - width: 24px; - height: 24px; - display: inline-flex; - align-items: center; - justify-content: center; - border: 1px solid var(--border); - border-radius: 6px; - background: var(--bg-secondary); - color: var(--accent); - cursor: pointer; - opacity: 1; - pointer-events: auto; - transition: - opacity 140ms ease, - color 140ms ease, - background 140ms ease, - border-color 140ms ease; - flex-shrink: 0; - z-index: 1; -} - -.tree-item-action-btn:hover, -.tree-item-action-btn:focus-visible { - background: color-mix(in srgb, var(--accent) 10%, transparent); - border-color: color-mix(in srgb, var(--accent) 25%, var(--border)); - color: var(--accent); - outline: none; -} - -/* --------------------------------------------------------------------------- - Drag & Drop β€” tree items - --------------------------------------------------------------------------- */ - -/* Source item being dragged */ -.tree-item.drag-source { - opacity: 0.35; - outline: 1px dashed var(--border); -} - -/* Valid drop targets during drag β€” subtle pulse indicator */ -.tree-item.drag-valid-target { - outline: 1px dashed color-mix(in srgb, var(--accent) 30%, transparent); - outline-offset: -1px; -} - -/* Active drop target (hovering over) */ -.tree-item.drag-over { - background: color-mix(in srgb, var(--accent) 18%, transparent) !important; - outline: 2px solid var(--accent); - outline-offset: -2px; - border-radius: 4px; -} - -/* Vault item as drop target */ -.tree-item.vault-item.drag-over { - background: color-mix(in srgb, var(--accent) 15%, transparent) !important; - outline: 2px solid var(--accent); - outline-offset: -2px; -} - -.tree-children { - padding-left: 16px; - overflow: hidden; -} - -.tree-children.collapsed { - display: none; -} -.tree-children.filtered-out { - display: none; -} - -.filter-results-header { - margin-top: 8px; -} - -.filter-results-group { - display: flex; - flex-direction: column; - gap: 4px; - padding: 4px 0 10px 12px; -} - -.filter-result-item { - align-items: flex-start; - white-space: normal; - overflow: visible; - border-radius: 6px; -} - -.filter-result-text { - flex: 1; - min-width: 0; - display: flex; - flex-direction: column; - gap: 2px; - white-space: normal; -} - -.filter-result-primary { - color: var(--text-primary); - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.filter-result-secondary { - color: var(--text-muted); - font-size: 0.75rem; - word-break: break-all; - opacity: 0.8; -} - -.sidebar-filter-empty { - padding: 12px 16px; - color: var(--text-muted); - font-size: 0.85rem; -} - -.filter-highlight { - background: color-mix(in srgb, var(--accent) 22%, transparent); - color: var(--accent); - padding: 0 2px; - border-radius: 4px; -} - -/* --- Tag Cloud --- */ -.tag-cloud { - display: flex; - flex-wrap: wrap; - gap: 6px; - padding: 14px 16px 16px; - align-content: flex-start; -} - -.tag-item { - display: inline-block; - padding: 2px 8px; - background: var(--tag-bg); - color: var(--tag-text); - border-radius: 4px; - font-family: "JetBrains Mono", monospace; - cursor: pointer; - transition: opacity 150ms ease; - line-height: 1.4; -} -.tag-item:hover { - opacity: 0.8; -} -.tag-item.filtered-out { - display: none; -} - -/* --- Sidebar resize handle (horizontal) --- */ -.sidebar-resize-handle { - width: 5px; - cursor: ew-resize; - background: transparent; - flex-shrink: 0; - transition: - background 150ms ease, - opacity 300ms ease; - z-index: 10; -} -.sidebar-resize-handle:hover, -.sidebar-resize-handle.active { - background: var(--accent); - opacity: 0.5; -} -.sidebar-resize-handle.hidden { - width: 0; - opacity: 0; - pointer-events: none; -} - -/* --- Content Wrapper (tabs + content) --- */ -.content-wrapper { - flex: 1; - display: flex; - flex-direction: column; - min-width: 0; - overflow: hidden; -} - -/* --- Content Area --- */ -.content-area { - flex: 1; - overflow-y: auto; - overflow-x: hidden; - padding: clamp(16px, 3vw, 40px) clamp(16px, 4vw, 40px) 60px; - transition: - background 200ms ease, - margin 300ms ease; - min-width: 0; -} - -/* Center content when sidebar is hidden */ -.sidebar.hidden ~ .content-wrapper .content-area { - margin: 0 auto; - max-width: 1200px; -} -.content-area::-webkit-scrollbar { - width: 8px; -} -.content-area::-webkit-scrollbar-thumb { - background: var(--scrollbar); - border-radius: 4px; -} - -/* --- Right Sidebar Resize Handle --- */ -.right-sidebar-resize-handle { - width: 5px; - cursor: ew-resize; - background: transparent; - flex-shrink: 0; - transition: - background 150ms ease, - opacity 300ms ease; - z-index: 10; -} -.right-sidebar-resize-handle:hover, -.right-sidebar-resize-handle.active { - background: var(--accent); - opacity: 0.5; -} -.right-sidebar-resize-handle.hidden { - width: 0; - opacity: 0; - pointer-events: none; -} - -/* --- Right Sidebar (Outline/TOC) --- */ -.right-sidebar { - width: 280px; - min-width: 200px; - max-width: 400px; - background: var(--bg-sidebar); - border-left: 1px solid var(--border); - display: flex; - flex-direction: column; - overflow: hidden; - transition: - background 200ms ease, - transform 300ms ease, - width 300ms ease; - flex-shrink: 0; -} - -.right-sidebar.hidden { - transform: translateX(100%); - width: 0; - min-width: 0; - border-left: none; -} - -/* Right sidebar header */ -.right-sidebar-header { - display: flex; - align-items: center; - justify-content: space-between; - padding: 12px 16px; - border-bottom: 1px solid var(--border); - background: var(--bg-sidebar); - flex-shrink: 0; -} - -.right-sidebar-title { - font-family: "JetBrains Mono", monospace; - font-size: 0.7rem; - font-weight: 700; - text-transform: uppercase; - letter-spacing: 0.08em; - color: var(--text-muted); - margin: 0; -} - -.right-sidebar-toggle-btn { - display: flex; - align-items: center; - justify-content: center; - width: 24px; - height: 24px; - padding: 0; - background: transparent; - border: 1px solid var(--border); - border-radius: 4px; - color: var(--text-secondary); - cursor: pointer; - transition: all 150ms ease; -} - -.right-sidebar-toggle-btn:hover { - background: var(--bg-hover); - border-color: var(--accent); - color: var(--accent); -} - -.right-sidebar-toggle-btn i { - transition: transform 200ms ease; -} - -.right-sidebar.hidden .right-sidebar-toggle-btn i { - transform: rotate(180deg); -} - -/* Outline panel */ -.outline-panel { - flex: 1; - overflow-y: auto; - overflow-x: hidden; - padding: 8px 0; - min-height: 0; -} - -.outline-panel::-webkit-scrollbar { - width: 6px; -} - -.outline-panel::-webkit-scrollbar-thumb { - background: var(--scrollbar); - border-radius: 3px; -} - -.outline-list { - display: flex; - flex-direction: column; - gap: 2px; - padding: 0 8px; -} - -.outline-item { - display: flex; - align-items: center; - padding: 8px 12px; - border-radius: 6px; - font-family: "JetBrains Mono", monospace; - font-size: 0.82rem; - color: var(--text-secondary); - cursor: pointer; - transition: all 150ms ease; - position: relative; - text-decoration: none; - line-height: 1.4; - word-break: break-word; -} - -.outline-item:hover { - background: var(--bg-hover); - color: var(--text-primary); -} - -.outline-item.active { - background: color-mix(in srgb, var(--accent) 12%, transparent); - color: var(--accent); - font-weight: 500; -} - -.outline-item.active::before { - content: ""; - position: absolute; - left: 0; - top: 0; - bottom: 0; - width: 3px; - background: var(--accent); - border-radius: 0 2px 2px 0; -} - -/* Heading levels */ -.outline-item.level-2 { - font-weight: 600; - font-size: 0.85rem; - padding-left: 12px; -} - -.outline-item.level-3 { - font-weight: 400; - font-size: 0.8rem; - padding-left: 28px; - color: var(--text-muted); -} - -.outline-item.level-3:hover { - color: var(--text-secondary); -} - -.outline-item.level-3.active { - color: var(--accent); -} - -/* Empty state */ -.outline-empty { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - padding: 40px 20px; - gap: 12px; - color: var(--text-muted); - font-size: 0.85rem; - text-align: center; -} - -/* Reading progress */ -.reading-progress { - padding: 12px 16px; - border-top: 1px solid var(--border); - background: var(--bg-sidebar); - flex-shrink: 0; -} - -.reading-progress-bar { - width: 100%; - height: 6px; - background: color-mix(in srgb, var(--border) 50%, transparent); - border-radius: 3px; - overflow: hidden; - margin-bottom: 8px; -} - -.reading-progress-fill { - height: 100%; - background: var(--accent); - border-radius: 3px; - transition: width 150ms ease; - width: 0%; -} - -.reading-progress-text { - font-family: "JetBrains Mono", monospace; - font-size: 0.75rem; - font-weight: 600; - color: var(--text-muted); - text-align: center; -} - -/* Welcome */ -.welcome { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - height: 100%; - color: var(--text-muted); - text-align: center; - gap: 12px; -} -.welcome h2 { - font-family: "JetBrains Mono", monospace; - font-size: 1.6rem; - color: var(--text-secondary); -} -.welcome p { - font-size: 0.95rem; - max-width: 400px; -} - -/* Breadcrumb */ -.breadcrumb { - font-family: "JetBrains Mono", monospace; - font-size: 0.78rem; - color: var(--text-muted); - margin-bottom: 12px; - display: flex; - align-items: center; - flex-wrap: wrap; - gap: 4px; -} -.breadcrumb span { - cursor: pointer; - color: var(--text-secondary); - transition: color 120ms ease; -} -.breadcrumb span:hover { - color: var(--accent); -} -.breadcrumb .sep { - cursor: default; - color: var(--text-muted); -} -.breadcrumb .sep:hover { - color: var(--text-muted); -} - -/* File header */ -.file-header { - margin-bottom: 20px; -} -.file-title { - font-family: "JetBrains Mono", monospace; - font-size: 1.6rem; - font-weight: 700; - margin-bottom: 8px; -} -.file-tags { - display: flex; - flex-wrap: wrap; - gap: 6px; - margin-bottom: 6px; -} -.file-tag { - display: inline-block; - padding: 2px 8px; - background: var(--tag-bg); - color: var(--tag-text); - border-radius: 4px; - font-family: "JetBrains Mono", monospace; - font-size: 0.75rem; - margin-right: 6px; - margin-bottom: 4px; - cursor: pointer; - transition: - opacity 150ms ease, - transform 100ms ease; -} -.file-tag:hover { - opacity: 0.8; - transform: translateY(-1px); -} -.file-actions { - margin-top: 8px; - display: flex; - flex-wrap: wrap; - gap: 6px; - align-items: center; -} -.btn-action { - font-family: "JetBrains Mono", monospace; - font-size: 0.75rem; - padding: 4px 10px; - border: 1px solid var(--border); - border-radius: 6px; - background: transparent; - color: var(--text-secondary); - cursor: pointer; - transition: - color 150ms ease, - border-color 150ms ease; - display: inline-flex; - align-items: center; - gap: 4px; -} -.btn-action:hover { - color: var(--accent); - border-color: var(--accent); -} -.btn-action.active { - color: var(--accent); - border-color: var(--accent); - background: var(--tag-bg); -} - -/* ===== FRONTMATTER β€” ACCENT CARD ===== */ - -/* Frontmatter section wrapper */ -.fm-section { - margin-bottom: 20px; -} - -/* Header toggle */ -.fm-header { - font-family: "JetBrains Mono", monospace; - font-size: 0.78rem; - color: var(--text-muted); - cursor: pointer; - display: inline-flex; - align-items: center; - gap: 6px; - margin-bottom: 12px; - user-select: none; - transition: color 150ms ease; -} -.fm-header:hover { - color: var(--text-secondary); -} - -/* Chevron icon */ -.fm-chevron { - transition: transform 0.2s; - display: inline-flex; - align-items: center; - justify-content: center; -} -.fm-chevron.open { - transform: rotate(0deg); -} -.fm-chevron.closed { - transform: rotate(-90deg); -} - -/* Accent Card main container */ -.ac-card { border: 1px solid var(--border-md); - border-left: 3px solid var(--accent-card); - border-radius: 0 var(--radius-lg) var(--radius-lg) 0; - background: var(--surface); - overflow: hidden; -} - -/* ZONE 1 β€” Top strip */ -.ac-top { - padding: 12px 16px 10px; - border-bottom: 1px solid var(--border); - display: flex; - align-items: center; - gap: 10px; - flex-wrap: wrap; -} -.ac-title { - font-size: 14px; - font-weight: 600; - color: var(--text); - font-family: var(--mono); - letter-spacing: -0.01em; - flex-shrink: 0; -} -.ac-badge { - padding: 2px 9px; - border-radius: 99px; - font-size: 11px; - font-weight: 500; - display: inline-flex; - align-items: center; - gap: 4px; -} -.ac-badge.green { - background: var(--green-bg); - color: var(--green); -} -.ac-badge.blue { - background: var(--accent-bg); - color: var(--accent-text); -} -.ac-badge.purple { - background: var(--purple-bg); - color: var(--purple); -} -.ac-dot { - width: 6px; - height: 6px; - border-radius: 50%; - background: currentColor; - opacity: 0.7; -} - -/* ZONE 2 β€” Body 2 columns */ -.ac-body { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 0; -} -.ac-col { - padding: 12px 16px; -} -.ac-col + .ac-col { - border-left: 1px solid var(--border); -} -.ac-row { - display: flex; - align-items: baseline; - gap: 6px; - padding: 4px 0; - font-size: 12.5px; -} -.ac-row + .ac-row { - border-top: 1px solid var(--border); -} -.ac-k { - color: var(--text-3); - font-size: 11px; - font-family: var(--mono); - min-width: 110px; - flex-shrink: 0; -} -.ac-v { - color: var(--text); - font-weight: 500; - font-size: 12.5px; -} -.ac-v.mono { - font-family: var(--mono); - font-weight: 400; - color: var(--text-2); - font-size: 11px; -} -.ac-v.muted { - color: var(--text-3); - font-weight: 400; -} - -/* ZONE 3 β€” Tags row */ -.ac-tags-row { - padding: 10px 16px; - border-top: 1px solid var(--border); - display: flex; - align-items: center; - gap: 10px; -} -.ac-tags-k { - font-size: 11px; - font-family: var(--mono); - color: var(--text-3); - flex-shrink: 0; -} -.ac-tags-wrap { - display: flex; - flex-wrap: wrap; - gap: 4px; -} -.ac-tag { - padding: 2px 9px; - border-radius: 99px; - font-size: 11px; - font-weight: 500; - background: var(--accent-bg); - color: var(--accent-text); - border: 1px solid rgba(79, 110, 247, 0.18); -} - -/* ZONE 4 β€” Flags row */ -.ac-flags-row { - padding: 9px 16px; - border-top: 1px solid var(--border); - background: var(--surface2); - display: flex; - flex-wrap: wrap; - gap: 6px; - align-items: center; -} -.ac-flags-k { - font-size: 11px; - font-family: var(--mono); - color: var(--text-3); - margin-right: 2px; -} -.flag-chip { - display: inline-flex; - align-items: center; - gap: 4px; - padding: 2px 8px; - border-radius: var(--radius); - font-size: 11px; - font-weight: 500; - border: 1px solid var(--border-md); -} -.flag-chip.on { - background: var(--green-bg); - color: var(--green); - border-color: rgba(26, 127, 80, 0.2); -} -.flag-chip.off { - background: var(--surface3); - color: var(--text-3); -} -.flag-dot { - width: 5px; - height: 5px; - border-radius: 50%; - background: currentColor; - opacity: 0.7; -} - -/* --- Raw source view --- */ -.raw-source-view { - background: var(--code-bg); - border: 1px solid var(--border); - border-radius: 8px; - padding: 16px; - margin-top: 12px; - font-family: "JetBrains Mono", monospace; - font-size: 0.82rem; - color: var(--text-secondary); - white-space: pre-wrap; - word-break: break-word; - overflow-x: auto; - line-height: 1.55; - max-height: 70vh; - overflow-y: auto; -} - -/* --- Markdown Rendered Content --- */ -.md-content h1, -.md-content h2, -.md-content h3, -.md-content h4, -.md-content h5, -.md-content h6 { - font-family: "JetBrains Mono", monospace; - font-weight: 700; - margin: 1.4em 0 0.5em; - color: var(--text-primary); -} -.md-content h1 { - font-size: 1.5rem; - border-bottom: 1px solid var(--border); - padding-bottom: 6px; -} -.md-content h2 { - font-size: 1.25rem; -} -.md-content h3 { - font-size: 1.1rem; -} - -.md-content p { - margin: 0.6em 0; -} - -.md-content ul, -.md-content ol { - padding-left: 1.6em; - margin: 0.5em 0; -} - -.md-content li { - margin: 0.25em 0; -} - -.md-content blockquote { - border-left: 3px solid var(--accent); - padding: 4px 16px; - margin: 0.8em 0; - color: var(--text-secondary); - background: var(--bg-secondary); - border-radius: 0 6px 6px 0; -} - -.md-content code { - font-family: "JetBrains Mono", monospace; - background: var(--code-bg); - padding: 2px 6px; - border-radius: 4px; - font-size: 0.88em; - border: 1px solid var(--border); -} - -.md-content pre { - background: var(--code-bg); - border: 1px solid var(--border); - border-radius: 8px; - padding: 16px; - overflow-x: auto; - margin: 0.8em 0; -} -.md-content pre code { - background: none; - border: none; - padding: 0; - font-size: 0.85rem; - line-height: 1.55; -} - -.md-content table { - width: 100%; - border-collapse: collapse; - margin: 0.8em 0; - font-size: 0.92rem; -} -.md-content th, -.md-content td { - border: 1px solid var(--border); - padding: 8px 12px; - text-align: left; -} -.md-content th { - background: var(--bg-secondary); - font-family: "JetBrains Mono", monospace; - font-weight: 600; - font-size: 0.85rem; -} - -.md-content img { - max-width: 100%; - border-radius: 8px; - margin: 0.6em 0; -} - -.md-content hr { - border: none; - border-top: 1px solid var(--border); - margin: 1.5em 0; -} - -.md-content .task-list-item { - list-style: none; - margin-left: -1.2em; -} -.md-content .task-list-item input[type="checkbox"] { - margin-right: 6px; -} - -/* Wikilinks */ -.wikilink { - color: var(--accent); - border-bottom: 1px dashed var(--accent); - cursor: pointer; -} -.wikilink:hover { - opacity: 0.8; -} -.wikilink-missing { - color: var(--text-muted); - border-bottom: 1px dashed var(--text-muted); - cursor: default; -} - -/* Image placeholders */ -.image-not-found { - display: inline-block; - padding: 8px 12px; - background: var(--danger-bg); - color: var(--danger); - border: 1px dashed var(--danger); - border-radius: 4px; - font-family: "JetBrains Mono", monospace; - font-size: 0.85rem; - cursor: help; -} - -/* Markdown images */ -.file-content img { - max-width: 100%; - height: auto; - display: block; - margin: 16px 0; - border-radius: 6px; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); -} - -.file-content a img { - cursor: pointer; - transition: opacity 0.2s ease; -} - -.file-content a img:hover { - opacity: 0.85; -} - -/* --- Search Results --- */ -.search-results { - padding: 0; -} -.search-results-header { - font-family: "JetBrains Mono", monospace; - font-size: 0.85rem; - color: var(--text-muted); - margin-bottom: 16px; - display: flex; - flex-wrap: wrap; - align-items: center; - gap: 8px; -} -.search-results-summary-text { - display: inline; -} -.search-results-active-tags { - display: inline-flex; - flex-wrap: wrap; - gap: 6px; - align-items: center; -} -.search-results-active-tag { - display: inline-flex; - align-items: center; - gap: 4px; - padding: 3px 8px; - background: var(--tag-bg); - color: var(--tag-text); - border-radius: 999px; - font-family: "JetBrains Mono", monospace; - font-size: 0.75rem; - line-height: 1.2; -} -.search-results-active-tag-remove { - display: inline-flex; - align-items: center; - justify-content: center; - width: 16px; - height: 16px; - border: none; - background: transparent; - color: inherit; - cursor: pointer; - padding: 0; -} -.search-result-item { - padding: 14px 16px; - border: 1px solid var(--border); - border-radius: 8px; - margin-bottom: 10px; - cursor: pointer; - transition: - background 120ms ease, - border-color 120ms ease; - position: relative; -} -.search-result-item:hover { - background: var(--bg-hover); - border-color: var(--accent); -} -.search-result-ext { - position: absolute; - top: 8px; - right: 10px; - font-size: 0.65rem; - font-weight: 700; - text-transform: uppercase; - color: var(--accent); - background: var(--accent-bg, rgba(99, 102, 241, 0.12)); - padding: 2px 8px; - border-radius: 4px; - letter-spacing: 0.5px; - border: 1px solid rgba(99, 102, 241, 0.2); -} -.search-filters-row { - display: flex; - gap: 4px; - flex-wrap: wrap; - margin-top: 4px; -} -.search-filter-badge { - font-size: 0.65rem; - font-family: "JetBrains Mono", monospace; - padding: 1px 6px; - border-radius: 3px; - background: rgba(99, 102, 241, 0.1); - color: var(--accent); - font-weight: 600; -} -.search-filter-badge.path { - background: rgba(5, 150, 105, 0.1); - color: #059669; -} - -/* Save search button */ -.search-save-btn { - padding: 4px 10px; - font-size: 0.75rem; - border: 1px solid var(--border); - border-radius: 4px; - background: var(--bg-secondary); - color: var(--text-primary); - cursor: pointer; - display: flex; - align-items: center; - gap: 4px; -} -.search-save-btn:hover { background: var(--bg-hover); } - -/* Saved searches sidebar */ -.saved-search-item { - position: relative; - padding: 10px 12px; - cursor: pointer; - border-radius: 6px; - transition: background 0.15s; - border: 1px solid transparent; - margin-bottom: 4px; -} -.saved-search-item:hover { background: var(--bg-hover); border-color: var(--border); } -.saved-search-query { - font-size: 0.82rem; - font-family: "JetBrains Mono", monospace; - line-height: 1.4; - word-break: break-word; - overflow-wrap: anywhere; - margin-bottom: 6px; -} -.saved-search-meta { - display: flex; - gap: 4px; - align-items: center; - flex-wrap: wrap; - margin-bottom: 2px; -} -.saved-search-badges { - display: flex; - gap: 4px; - align-items: center; - flex-wrap: wrap; - flex: 1; - min-width: 0; -} -.saved-search-type-icon { - margin-left: auto; - flex-shrink: 0; - opacity: 0.6; -} -/* Saved filter bar */ -.saved-filter-bar { - display: flex; - gap: 6px; - padding: 8px 10px 10px; -} -.saved-filter-pill { - padding: 3px 10px; - font-size: 0.7rem; - font-weight: 500; - border: 1px solid var(--border); - border-radius: 12px; - background: transparent; - color: var(--text-secondary); - cursor: pointer; - transition: background 0.15s, color 0.15s, border-color 0.15s; -} -.saved-filter-pill:hover { background: var(--bg-hover); color: var(--text-primary); } -.saved-filter-pill.active { - background: var(--accent-bg, rgba(99,102,241,0.12)); - color: var(--accent); - border-color: var(--accent); -} -/* Offline indicator */ -.offline-indicator { - display: flex; - align-items: center; - gap: 6px; - padding: 2px 8px; - border-radius: 4px; - font-size: 0.7rem; - cursor: default; -} -.offline-indicator.offline { - background: var(--warn-bg, rgba(251,191,36,0.12)); - color: var(--warn); - border: 1px solid var(--warn); -} -.offline-pending { - display: inline-flex; - align-items: center; - justify-content: center; - min-width: 16px; - height: 16px; - padding: 0 4px; - border-radius: 8px; - background: var(--warn); - color: #000; - font-size: 0.6rem; - font-weight: 700; -} -/* Theme picker grid */ -.theme-grid { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); - gap: 10px; - margin-top: 12px; -} -.theme-card { - background: var(--bg-secondary); - border: 2px solid var(--border); - border-radius: 8px; - padding: 10px; - cursor: pointer; - transition: border-color 0.2s, transform 0.15s; -} -.theme-card:hover { border-color: var(--accent); transform: translateY(-1px); } -.theme-card.active { border-color: var(--accent-green); } -.theme-card-preview { - height: 40px; - border-radius: 4px; - margin-bottom: 8px; - overflow: hidden; - display: flex; - flex-direction: column; -} -.theme-card-preview-bar { - height: 14px; -} -.theme-card-preview-body { - flex: 1; - display: flex; - align-items: center; - padding: 0 6px; -} -.theme-card-preview-btn { - width: 50%; - height: 10px; - border-radius: 3px; -} -.theme-card-name { - font-size: 0.75rem; - font-weight: 600; - color: var(--text-primary); - margin-bottom: 2px; -} -.theme-card-desc { - font-size: 0.65rem; - color: var(--text-muted); -} -.theme-mode-toggle { - display: flex; - gap: 0; - margin-top: 16px; - border: 1px solid var(--border); - border-radius: 6px; - overflow: hidden; - width: fit-content; -} -.theme-mode-btn { - padding: 4px 14px; - font-size: 0.7rem; - border: none; - background: transparent; - color: var(--text-secondary); - cursor: pointer; -} -.theme-mode-btn.active { - background: var(--accent); - color: #fff; -} -.saved-search-vault { - font-size: 0.65rem; - color: var(--text-muted); - padding: 1px 5px; - background: var(--bg-secondary); - border-radius: 3px; -} -.saved-search-filters { - font-size: 0.65rem; - color: var(--accent); - display: flex; - gap: 4px; - flex-wrap: wrap; -} -.saved-search-path { - font-size: 0.6rem; - color: #059669; - background: rgba(5,150,105,0.08); - padding: 1px 5px; - border-radius: 3px; - max-width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.saved-search-delete { - position: absolute; - top: 6px; - right: 8px; - background: none; - border: none; - color: var(--text-muted); - cursor: pointer; - font-size: 0.9rem; - padding: 2px 6px; - opacity: 0; - transition: opacity 0.15s; -} -.saved-search-item:hover .saved-search-delete { opacity: 1; } -.saved-search-delete:hover { color: var(--text-error); } -.search-result-title { - font-family: "JetBrains Mono", monospace; - font-size: 0.92rem; - font-weight: 600; - color: var(--text-primary); - margin-bottom: 4px; -} -.search-result-vault { - font-family: "JetBrains Mono", monospace; - font-size: 0.72rem; - color: var(--accent-green); - margin-bottom: 4px; -} -.search-result-snippet { - font-size: 0.85rem; - color: var(--text-secondary); - line-height: 1.5; -} -.search-result-snippet .search-highlight { - background: color-mix(in srgb, var(--accent) 25%, transparent); - color: var(--accent); - font-weight: 600; - padding: 1px 3px; - border-radius: 3px; -} -.search-result-title .search-highlight { - background: color-mix(in srgb, var(--accent) 25%, transparent); - color: var(--accent); - font-weight: 700; - padding: 1px 3px; - border-radius: 3px; -} -.search-result-tags { - margin-top: 6px; - display: flex; - flex-wrap: wrap; - gap: 4px; -} -.search-result-tags .file-tag { - font-size: 0.7rem; - padding: 1px 6px; -} - -/* --- Loading indicator --- */ -.loading-indicator { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - padding: 40px 20px; - color: var(--text-muted); - gap: 12px; -} -.loading-spinner { - width: 32px; - height: 32px; - border: 3px solid var(--border); - border-top-color: var(--accent); - border-radius: 50%; - animation: spin 0.8s linear infinite; -} -@keyframes spin { - to { - transform: rotate(360deg); - } -} - -/* --- Search progress bar --- */ -.search-progress-bar { - position: fixed; - top: 0; - left: 0; - right: 0; - height: 3px; - z-index: 9999; - background: transparent; - pointer-events: none; - opacity: 0; - transition: opacity 0.15s; -} -.search-progress-bar.active { - opacity: 1; -} -.search-progress-bar .search-progress-bar__fill { - height: 100%; - background: var(--accent); - width: 0%; - animation: progress-indeterminate 1.5s ease-in-out infinite; -} -@keyframes progress-indeterminate { - 0% { - width: 0%; - margin-left: 0%; - } - 50% { - width: 40%; - margin-left: 30%; - } - 100% { - width: 0%; - margin-left: 100%; - } -} -.search-time-badge { - font-size: 0.7rem; - color: var(--text-muted); - margin-left: 8px; -} - -/* --- Editor Modal --- */ -.editor-modal { - display: none; - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: 1000; - background: var(--overlay-bg); - align-items: center; - justify-content: center; - padding: 20px; -} -.editor-modal.active { - display: flex; -} -.help-container { - max-width: 1320px; -} -.editor-container { - background: var(--bg-secondary); - border: 1px solid var(--border); - border-radius: 12px; - width: 100%; - max-width: 1200px; - max-height: 90vh; - display: flex; - flex-direction: column; - overflow: hidden; - box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4); -} -.editor-header { - display: flex; - align-items: center; - justify-content: space-between; - padding: 12px 16px; - border-bottom: 1px solid var(--border); - background: var(--bg-primary); - flex-shrink: 0; - position: sticky; - top: 0; - z-index: 10; -} - -/* AI processing indicator β€” shown inside editor header during AI calls */ -.ai-processing-indicator { - display: none; - align-items: center; - gap: 6px; - padding: 3px 10px; - border-radius: 12px; - font-size: 0.72rem; - font-weight: 500; - color: #ffffff; - background: rgba(59, 130, 246, 0.3); - border: 1px solid rgba(96, 165, 250, 0.4); - animation: ai-indicator-pulse 1s ease-in-out infinite; - margin-left: 12px; -} - -.ai-spinner { - width: 10px; - height: 10px; - border: 2px solid rgba(255,255,255,0.3); - border-top-color: #ffffff; - border-radius: 50%; - animation: ai-spinner-spin 0.6s linear infinite; -} - -@keyframes ai-spinner-spin { - to { transform: rotate(360deg); } -} - -@keyframes ai-indicator-pulse { - 0%, 100% { opacity: 1; } - 50% { opacity: 0.6; } -} - -.editor-title { - font-family: "JetBrains Mono", monospace; - font-size: 0.9rem; - color: var(--text-primary); - font-weight: 600; -} -.editor-brand { font-weight: 700; font-size: 12px; color: var(--accent); letter-spacing: 0.5px; white-space: nowrap; margin-right: 8px; } -.editor-title-input { flex: 1; min-width: 80px; background: transparent; border: 1px solid transparent; color: var(--text-primary); font-size: 13px; padding: 3px 6px; border-radius: 6px; outline: none; font-family: var(--font-sans); } -.editor-title-input:hover { border-color: var(--border); } -.editor-title-input:focus { border-color: var(--accent); background: var(--bg-input); } -.editor-sep { color: var(--text-muted); font-size: 13px; padding: 0 2px; user-select: none; } -.editor-filename-input { width: 140px; background: transparent; border: 1px solid transparent; color: var(--text-primary); font-size: 12px; padding: 3px 6px; border-radius: 6px; outline: none; font-family: var(--font-mono); } -.editor-filename-input:hover { border-color: var(--border); } -.editor-filename-input:focus { border-color: var(--ok); background: var(--bg-input); } -.editor-spacer { flex: 1; } -.editor-save-dot { display: flex; align-items: center; gap: 4px; font-size: 11px; padding: 0 4px; margin-right: 8px; } -.editor-btn + .editor-btn { margin-left: 6px; } -.editor-save-dot .dot { width: 6px; height: 6px; border-radius: 50%; } -.editor-save-dot.ok { color: var(--ok); } .editor-save-dot.ok .dot { background: var(--ok); } -.editor-save-dot.dirty { color: var(--warn); } .editor-save-dot.dirty .dot { background: var(--warn); } -.editor-save-dot.saving { color: var(--ai); } .editor-save-dot.saving .dot { background: var(--ai); } -@keyframes editor-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } } -.editor-save-dot.saving { animation: editor-pulse 0.8s infinite; } -.editor-save-dot.err { color: var(--err); } .editor-save-dot.err .dot { background: var(--err); } -.editor-body-cm { flex: 1; overflow: auto; } -.editor-body-cm .cm-editor { height: 100%; } -.editor-body-cm .cm-editor .cm-scroller { font-family: var(--font-mono); font-size: 13.5px; line-height: 1.75; } -.editor-footer { height: 26px; min-height: 26px; display: flex; align-items: center; justify-content: space-between; padding: 0 12px; background: var(--bg-secondary); border-top: 1px solid var(--border); font-size: 11px; color: var(--text-muted); flex-shrink: 0; } -.editor-stat-file { color: var(--text-secondary); max-width: 320px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } -.editor-actions { - display: flex; - gap: 6px; -} -.editor-btn { - width: 36px; - height: 36px; - padding: 0; - border: 1px solid var(--border); - border-radius: 6px; - background: transparent; - color: var(--text-secondary); - cursor: pointer; - transition: all 150ms ease; - display: inline-flex; - align-items: center; - justify-content: center; - flex: 0 0 auto; -} -.editor-btn:hover { - color: var(--accent); - border-color: var(--accent); -} -.editor-btn.primary { - background: var(--accent); - color: #ffffff; - border-color: var(--accent); -} -.editor-btn.primary:hover { - opacity: 0.9; -} -.editor-btn.danger:hover { - color: var(--danger); - border-color: var(--danger); -} -.editor-body { - flex: 1; - min-height: 0; - position: relative; - overflow-y: auto; - overflow-x: hidden; -} -.help-body { - padding: 0; - background: radial-gradient(circle at top right, color-mix(in srgb, var(--accent) 10%, transparent), transparent 30%), var(--bg-primary); - display: flex; - gap: 0; - overflow-y: auto; - overflow-x: hidden; - scroll-behavior: smooth; -} - -/* Help Navigation Menu */ -.help-hamburger { - display: none; - width: 36px; height: 36px; - padding: 0; - border: 1px solid var(--border); - border-radius: 6px; - background: transparent; - color: var(--text-secondary); - cursor: pointer; - align-items: center; - justify-content: center; - flex-shrink: 0; - margin-right: 8px; -} -.help-hamburger:hover { color: var(--accent); border-color: var(--accent); } -.help-nav { - width: 260px; - min-width: 260px; - background: color-mix(in srgb, var(--bg-secondary) 94%, var(--bg-primary)); - border-right: 1px solid color-mix(in srgb, var(--border) 85%, transparent); - display: flex; - flex-direction: column; - position: sticky; - top: 0; - align-self: flex-start; - height: 100%; - max-height: calc(90vh - 57px); - flex-shrink: 0; - backdrop-filter: blur(12px); - overflow: hidden; -} -.help-nav-header { - display: flex; - align-items: center; - justify-content: space-between; - padding: 20px 16px 10px; - flex-shrink: 0; -} -.help-nav-title { - font-family: "JetBrains Mono", monospace; - font-size: 0.75rem; - font-weight: 700; - text-transform: uppercase; - letter-spacing: 0.05em; - color: var(--text-muted); -} -.help-nav-search-wrap { - padding: 0 12px 8px; - flex-shrink: 0; - display: flex; - align-items: center; - gap: 0; -} -.help-nav-search { - flex: 1; - padding: 7px 10px; - border: 1px solid var(--border); - border-right: none; - border-radius: 8px 0 0 8px; - background: var(--bg-primary); - color: var(--text-primary); - font-size: 0.78rem; - outline: none; - transition: border-color 0.2s; - min-width: 0; -} -.help-nav-search:focus { - border-color: var(--accent); -} -.help-nav-search:focus + .help-search-clear { - border-color: var(--accent); - border-left-color: var(--accent); -} -.help-nav-search::placeholder { color: var(--text-muted); } -.help-search-clear { - padding: 7px 10px; - border: 1px solid var(--border); - border-left: none; - border-radius: 0 8px 8px 0; - background: var(--bg-primary); - color: var(--text-muted); - cursor: pointer; - font-size: 14px; - line-height: 1; - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; - transition: color 0.15s, background 0.15s; -} -.help-search-clear:hover { - color: var(--text-primary); - background: rgba(255,255,255,0.06); -} -.help-nav-list { - list-style: none; - margin: 0; - padding: 0 12px 20px; - flex: 1; - overflow-y: auto; - overflow-x: hidden; - scrollbar-width: thin; - scrollbar-color: var(--border) transparent; -} -.help-nav-list li { - margin: 0 0 3px; -} -.help-nav-link { - display: block; - padding: 8px 12px; - font-size: 0.85rem; - color: var(--text-secondary); - text-decoration: none; - transition: all 150ms ease; - border: 1px solid transparent; - border-radius: 8px; - outline: none; -} -.help-nav-link:hover { - color: var(--accent); - background: color-mix(in srgb, var(--bg-hover) 80%, transparent); - border-color: color-mix(in srgb, var(--accent) 16%, transparent); - text-decoration: none; - transform: translateX(2px); -} -.help-nav-link:focus-visible { - outline: 2px solid var(--accent); - outline-offset: -2px; - border-radius: 8px; -} -.help-nav-link.active { - color: var(--accent); - background: linear-gradient(135deg, color-mix(in srgb, var(--accent) 16%, transparent), color-mix(in srgb, var(--accent) 7%, transparent)); - border-color: color-mix(in srgb, var(--accent) 22%, transparent); - font-weight: 600; - box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent) 10%, transparent); -} -.help-nav-link.hidden { - display: none; -} -.help-section.help-hidden { - display: none; -} -.help-search-highlight { - background: rgba(250, 204, 21, 0.35); - color: inherit; - border-radius: 2px; - padding: 0 1px; -} - -.help-content { - flex: 1; - max-width: 980px; - margin: 0 auto; - padding: 32px 40px 56px; - overflow: visible; - min-width: 0; -} -.help-lead { - font-size: 1.08rem; - line-height: 1.75; - color: var(--text-primary); - margin-bottom: 18px; -} -.help-footer { - margin-top: 48px; - padding-top: 24px; - border-top: 1px solid var(--border); - text-align: center; - color: var(--text-muted); - font-size: 0.85rem; -} -.help-footer a { - color: var(--accent); - text-decoration: none; -} -.help-footer a:hover { - text-decoration: underline; -} -.help-content h1, -.help-content h2, -.help-content h3 { - font-family: "JetBrains Mono", monospace; - color: var(--text-primary); -} -.help-content h1 { - font-size: 2rem; - margin-bottom: 16px; - letter-spacing: -0.02em; -} -.help-content h2 { - font-size: 1.18rem; - margin: 0 0 14px; -} -.help-content h3 { - font-size: 0.95rem; - margin: 20px 0 8px; - color: var(--text-secondary); -} -.help-content p { - margin: 0 0 14px; - color: var(--text-secondary); - line-height: 1.7; -} -.help-content pre, -.help-content table { - max-width: 100%; - overflow-x: auto; -} -.help-content pre code { - white-space: pre; -} -.help-content ul, -.help-content ol { - margin: 10px 0 18px; - padding-left: 24px; - color: var(--text-secondary); -} -.help-content ul li, -.help-content ol li { - margin: 6px 0; - line-height: 1.6; -} -.help-content code { - font-family: "JetBrains Mono", monospace; - background: var(--code-bg); - border: 1px solid var(--border); - border-radius: 4px; - padding: 1px 5px; - color: var(--text-primary); - font-size: 0.88em; -} -.help-content strong { - color: var(--text-primary); - font-weight: 600; -} - -.help-section { - position: relative; - margin-bottom: 22px; - padding: 24px 26px; - border: 1px solid color-mix(in srgb, var(--border) 82%, transparent); - border-radius: 18px; - background: linear-gradient(180deg, color-mix(in srgb, var(--bg-secondary) 94%, var(--bg-primary)), color-mix(in srgb, var(--bg-secondary) 86%, var(--bg-primary))); - box-shadow: 0 14px 34px rgba(0, 0, 0, 0.18); -} - -.help-section::before { - content: ""; - position: absolute; - inset: 0; - border-radius: inherit; - pointer-events: none; - background: linear-gradient(135deg, color-mix(in srgb, var(--accent) 8%, transparent), transparent 35%); -} - -.help-hero { - display: grid; - grid-template-columns: minmax(0, 1.5fr) minmax(260px, 1fr); - gap: 22px; - align-items: stretch; - padding: 22px; - border: 1px solid color-mix(in srgb, var(--accent) 16%, var(--border)); - border-radius: 18px; - background: linear-gradient(135deg, color-mix(in srgb, var(--accent) 12%, transparent), transparent 45%), color-mix(in srgb, var(--bg-secondary) 92%, var(--bg-primary)); - margin-bottom: 26px; -} - -.help-kicker { - display: inline-flex; - align-items: center; - padding: 5px 10px; - border-radius: 999px; - background: color-mix(in srgb, var(--accent) 16%, transparent); - color: var(--accent); - font-family: "JetBrains Mono", monospace; - font-size: 0.72rem; - margin-bottom: 12px; -} - -.help-badges { - display: flex; - flex-wrap: wrap; - gap: 8px; - margin-top: 16px; -} - -.help-badge { - display: inline-flex; - align-items: center; - padding: 6px 10px; - border-radius: 999px; - background: color-mix(in srgb, var(--bg-primary) 72%, transparent); - border: 1px solid var(--border); - color: var(--text-primary); - font-size: 0.8rem; -} - -.help-hero-visual { - display: flex; - align-items: center; - justify-content: center; -} - -.help-mini-window { - width: 100%; - max-width: 320px; - border-radius: 18px; - overflow: hidden; - border: 1px solid color-mix(in srgb, var(--accent) 18%, var(--border)); - background: color-mix(in srgb, var(--bg-primary) 88%, black 12%); - box-shadow: 0 18px 44px rgba(0, 0, 0, 0.28); -} - -.help-mini-window-bar { - display: flex; - gap: 7px; - padding: 12px 14px; - border-bottom: 1px solid var(--border); -} - -.help-mini-window-bar span { - width: 9px; - height: 9px; - border-radius: 50%; - background: color-mix(in srgb, var(--accent) 45%, var(--text-muted)); -} - -.help-mini-window-body { - display: flex; - min-height: 190px; -} - -.help-mini-sidebar { - width: 72px; - background: color-mix(in srgb, var(--bg-secondary) 92%, black 8%); - border-right: 1px solid var(--border); -} - -.help-mini-content { - flex: 1; - padding: 16px; -} - -.help-mini-line { - height: 10px; - border-radius: 999px; - background: color-mix(in srgb, var(--text-muted) 28%, transparent); - margin-bottom: 10px; -} - -.help-mini-line.short { - width: 62%; -} - -.help-mini-tags { - display: flex; - flex-wrap: wrap; - gap: 6px; - margin: 14px 0; -} - -.help-mini-tags span { - padding: 3px 8px; - border-radius: 999px; - background: color-mix(in srgb, var(--accent) 16%, transparent); - color: var(--text-primary); - font-size: 0.72rem; -} - -.help-mini-card { - height: 64px; - border-radius: 12px; - border: 1px solid var(--border); - background: linear-gradient(180deg, color-mix(in srgb, var(--bg-secondary) 94%, white 6%), var(--bg-primary)); -} - -.help-grid { - display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); - gap: 16px; - margin-bottom: 26px; -} - -.help-card { - padding: 18px; border-radius: 16px; - border: 1px solid var(--border); - background: color-mix(in srgb, var(--bg-secondary) 92%, var(--bg-primary)); -} - -.help-card-icon { - width: 42px; - height: 42px; - display: inline-flex; - align-items: center; - justify-content: center; - border-radius: 12px; - background: color-mix(in srgb, var(--accent) 14%, transparent); - font-size: 1.2rem; - margin-bottom: 10px; -} - -.help-section { - margin-top: 26px; -} - -.help-feature-list, -.help-steps, -.help-checklist, -.help-tip-grid { - display: grid; - gap: 14px; -} - -.help-feature-item, -.help-step, -.help-check-item, -.help-tip-card { - border: 1px solid var(--border); - border-radius: 16px; - background: color-mix(in srgb, var(--bg-secondary) 92%, var(--bg-primary)); -} - -.help-feature-item { - display: grid; - grid-template-columns: 52px minmax(0, 1fr); - gap: 14px; - padding: 16px; -} - -.help-feature-emoji { - width: 52px; - height: 52px; - display: flex; - align-items: center; - justify-content: center; - border-radius: 14px; - background: color-mix(in srgb, var(--accent) 12%, transparent); - font-size: 1.4rem; -} - -.help-steps { - counter-reset: step; -} - -.help-step { - display: grid; - grid-template-columns: 44px minmax(0, 1fr); - gap: 14px; - padding: 16px; -} - -.help-step-number { - width: 44px; - height: 44px; - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; - background: color-mix(in srgb, var(--accent) 18%, transparent); - color: var(--accent); - font-family: "JetBrains Mono", monospace; - font-weight: 700; -} - -.help-check-item { - display: grid; - grid-template-columns: 28px minmax(0, 1fr); - gap: 12px; - padding: 14px 16px; - align-items: start; -} - -.help-check-item span { - font-size: 1rem; - line-height: 1.4; -} - -.help-check-item p { - margin-bottom: 0; -} - -.help-tip-panel { - margin-top: 28px; -} - -.help-tip-grid { - grid-template-columns: repeat(3, minmax(0, 1fr)); -} - -.help-tip-card { - padding: 16px; -} -.cm-editor { - height: auto; - min-height: 100%; - font-size: 0.9rem; -} -.cm-scroller { - font-family: "JetBrains Mono", monospace; - overflow-y: auto !important; - overflow-x: auto !important; - height: auto; - min-height: 100%; - max-width: 100%; -} -.fallback-editor { - width: 100%; - min-height: 100%; - height: auto; - border: none; - outline: none; - resize: none; - padding: 16px; - background: var(--code-bg); - color: var(--text-primary); - font-family: "JetBrains Mono", monospace; - font-size: 0.9rem; - line-height: 1.55; - box-sizing: border-box; + width: 480px; max-width: 92vw; max-height: 90vh; overflow-y: auto; - overflow-x: auto; - white-space: pre-wrap; - word-wrap: break-word; -} - -/* Mobile right sidebar - hide by default */ -@media (max-width: 768px) { - .right-sidebar { - display: none; - } - .right-sidebar-resize-handle { - display: none; - } -} - -/* Mobile help navigation */ -@media (max-width: 768px) { - .help-nav { - display: none; - } - .help-content { - padding: 20px 16px 32px; - } - .vault-context-indicator { - /* Keep visible on mobile β€” same look as desktop */ - padding: 4px 8px; - font-size: 0.7rem; - } -} - -/* Mobile editor */ -@media (max-width: 768px) { - .editor-modal { - padding: 0; - align-items: stretch; - } - .editor-container { - max-width: 100%; - max-height: 100vh; - border-radius: 0; - height: 100vh; - overflow: hidden; - } - .editor-header { - padding: 10px 12px; - position: sticky; - top: 0; - z-index: 20; - background: var(--bg-primary); - } - .editor-title { - font-size: 0.85rem; - min-width: 0; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - .editor-actions { - gap: 4px; - } - .editor-btn { - width: 36px; - height: 36px; - min-width: 36px; - } - .editor-body { - flex: 1; - min-height: 0; - overflow: auto; - } - .cm-editor { - height: auto; - min-height: 100%; - } - .cm-scroller { - overflow: auto !important; - height: auto; - min-height: 100%; - } - .fallback-editor { - min-height: 100%; - height: auto; - } - .search-results-header { - align-items: flex-start; - } -} - -/* --- No-select during resize --- */ -body.resizing { - user-select: none; - -webkit-user-select: none; - cursor: ew-resize; -} -body.resizing-v { - user-select: none; - -webkit-user-select: none; - cursor: ns-resize; -} - -/* --- Responsive β€” Tablet --- */ -@media (max-width: 1024px) { - .sidebar { - width: 240px; - min-width: 200px; - } -} - -/* --- Responsive β€” Mobile --- */ -@media (max-width: 768px) { - .hamburger-btn { - display: flex; - } - - .sidebar-toggle-btn { - display: none; - } - - .header { - flex-wrap: wrap; - gap: 8px 10px; - padding: 10px 12px; - } - - .header-left { - flex: 1; - gap: 12px; - } - - .header-center { - flex: 0 0 100%; - order: 3; - max-width: none; - padding: 4px 0; - } - - .header-right { - flex: 0 0 auto; - gap: 8px; - } - - .header-logo { - font-size: 1.05rem; - gap: 8px; - } - - .user-display-name { - display: none; /* Masquer le nom d'utilisateur sur mobile pour gagner de la place */ - } - - .search-wrapper { - max-width: none; - width: 100%; - } - - .search-input-wrapper input { - padding: 10px 40px 10px 40px; - font-size: 1rem; - border-radius: 12px; - } - - .search-wrapper .search-icon { - left: 14px; - top: 14px; - width: 18px !important; - height: 18px !important; - } - - /* Mobile: keep only filter + clear visible in header search */ - .search-actions .tog, - .search-actions .search-sep, - .search-actions .search-count { display: none; } - .search-actions { gap: 4px; } - .search-actions .search-btn#search-clear-btn { display: flex; } - - .search-dropdown { - position: fixed; - top: 100px; - left: 8px; - right: 8px; - width: calc(100vw - 16px); - max-height: calc(100vh - 120px); - border-radius: 12px; - box-shadow: 0 12px 40px rgba(0, 0, 0, 0.4); - } - - .search-dropdown__item { - padding: 14px 16px; - font-size: 0.95rem; - } - - .search-dropdown__icon { - width: 18px; - height: 18px; - margin-right: 8px; - } - - .header-menu-btn { - padding: 10px; - border-radius: 10px; - } - - .header-menu-dropdown { - position: fixed; - top: 60px; - right: 10px; - left: 10px; - width: auto; - min-width: 0; - border-radius: 16px; - } - - .sidebar-quick-select { - padding: 0 16px 12px; - } - - .sidebar-quick-select select { - color-scheme: dark; - background-color: var(--bg-secondary); - color: var(--text-primary); - } - - [data-theme="dark"] .sidebar-quick-select select { - background-color: #1e1e1e; - color: #e0e0e0; - } - - .sidebar-panel-toggle { - padding: 8px 12px 10px; - } - - .tag-cloud { - padding: 0 12px 12px; - } - - .sidebar { - position: fixed; - top: 0; - left: 0; - bottom: 0; - z-index: 200; - width: 280px !important; - min-width: 280px !important; - max-width: 85vw !important; - transform: translateX(-100%); - transition: - transform 250ms ease, - background 200ms ease; - box-shadow: none; - } - .sidebar.mobile-open { - transform: translateX(0); - box-shadow: 4px 0 20px rgba(0, 0, 0, 0.3); - } - - /* Mobile sidebar overlay */ - .sidebar-overlay { - display: none; - position: fixed; - inset: 0; - background: rgba(0,0,0,0.4); - z-index: 199; - } - .sidebar-overlay.active { display: block; } - - /* Right Sidebar handling on mobile */ - .right-sidebar { - position: fixed; - top: 0; - right: 0; - bottom: 0; - z-index: 200; - width: 280px !important; - min-width: 280px !important; - max-width: 85vw !important; - transform: translateX(100%); - transition: - transform 250ms ease, - background 200ms ease; - box-shadow: none; - border-left: 1px solid var(--border); - } - .right-sidebar.hidden { - transform: translateX(100%) !important; - width: 280px !important; - min-width: 280px !important; - display: flex; - } - .right-sidebar:not(.hidden) { - transform: translateX(0) !important; - box-shadow: -4px 0 20px rgba(0, 0, 0, 0.3) !important; - display: flex !important; - visibility: visible !important; - } - - .right-sidebar-resize-handle { - display: none; - } - - .sidebar-resize-handle { - display: none; - } - - .tag-resize-handle { - display: none; - } - - .tag-cloud-section { - height: auto; - max-height: 200px; - min-height: 80px; - } - - #vault-panel-content { - max-height: none; - } - #tag-panel-content { - max-height: none; - } - - .help-content { - padding: 20px 16px 28px; - } - - .help-hero { - grid-template-columns: 1fr; - padding: 18px; - } - - .help-grid, - .help-tip-grid { - grid-template-columns: 1fr; - } - - .content-area { - padding: 12px 8px 24px; - width: 100%; - } - - .file-title { - font-size: 1.15rem; - } - - .file-actions { - flex-wrap: wrap; - gap: 4px; - } - - .file-actions .btn-action { - padding: 6px 8px; - font-size: 0.75rem; - } - - /* Full-width search results */ - .search-result-item { - padding: 12px 14px; - border-radius: 8px; - margin-bottom: 8px; - } - - .search-result-title { - font-size: 0.9rem; - padding-right: 40px; - } - - .search-result-ext { - top: 6px; - right: 8px; - font-size: 0.6rem; - } - - .search-results-header { - flex-wrap: wrap; - gap: 6px; - } - - /* Full-width dashboard */ - .dashboard-stats-grid { - grid-template-columns: repeat(2, 1fr); - gap: 8px; - } - - .stat-card { - padding: 12px 8px; - } - - .dashboard-tab { - padding: 6px 5px !important; - font-size: 0 !important; - gap: 0 !important; - overflow: hidden; - min-width: 32px; - } - .dashboard-tab > *:not(i):not(svg) { display: none; } - .dashboard-tab i, .dashboard-tab svg { - width: 18px !important; - height: 18px !important; - flex-shrink: 0; - } - - .breadcrumb { - font-size: 0.75rem; - flex-wrap: wrap; - } - - /* Mobile tab bar */ - .tab-bar { - padding: 0 4px; - } - .tab-item { - padding: 6px 10px; - font-size: 0.7rem; - } - .tab-item .tab-name { max-width: 80px; } - .tab-item .tab-close { opacity: 0.6; width: 14px; height: 14px; } - - .md-content { - padding: 0 4px; - } - - .md-content h1 { font-size: 1.4rem; } - .md-content h2 { font-size: 1.15rem; } - .md-content h3 { font-size: 1rem; } - - .md-content pre { - margin: 8px -4px; - border-radius: 6px; - padding: 10px 12px; - font-size: 0.8rem; - } - - /* Full-width content wrapper */ - .content-wrapper { - margin-left: 0 !important; - } -} - -/* --- Configuration Modal --- */ -.config-content { - max-width: 720px; - margin: 0 auto; - padding: 28px 24px 40px; -} - -.config-section { - margin-bottom: 28px; -} - -.config-section h2 { - font-family: "JetBrains Mono", monospace; - font-size: 1.05rem; - font-weight: 600; - color: var(--text-primary); - margin-bottom: 8px; -} - -.config-description { - font-size: 0.85rem; - color: var(--text-secondary); - margin-bottom: 16px; - line-height: 1.5; -} - -.config-filters-list { - display: flex; - flex-wrap: wrap; - gap: 8px; - margin-bottom: 16px; - min-height: 32px; -} - -.config-filter-badge { - display: inline-flex; - align-items: center; - gap: 6px; - padding: 6px 12px; - background: var(--tag-bg); - color: var(--tag-text); - border-radius: 6px; - font-family: "JetBrains Mono", monospace; - font-size: 0.8rem; - border: 1px solid color-mix(in srgb, var(--tag-text) 30%, transparent); -} - -.config-filter-badge.disabled { - opacity: 0.5; -} - -.config-filter-remove { - display: inline-flex; - align-items: center; - justify-content: center; - width: 16px; - height: 16px; - border: none; - background: transparent; - color: inherit; - cursor: pointer; - padding: 0; - font-size: 1.1rem; - line-height: 1; -} - -.config-filter-remove:hover { - opacity: 0.7; -} - -.config-filter-toggle { - display: inline-flex; - align-items: center; - justify-content: center; - width: 16px; - height: 16px; - border: none; - background: transparent; - color: inherit; - cursor: pointer; - padding: 0; - font-size: 0.9rem; -} - -.config-add-pattern { - display: flex; - gap: 8px; - margin-bottom: 12px; -} - -.config-input { - flex: 1; - padding: 8px 12px; - border: 1px solid var(--border); - border-radius: 6px; - background: var(--bg-secondary); - color: var(--text-primary); - font-family: "JetBrains Mono", monospace; - font-size: 0.8rem; - outline: none; - transition: border-color 200ms ease; -} - -.config-input:focus { - border-color: var(--accent); -} - -.config-select { - padding: 8px 12px; - border: 1px solid var(--border); - border-radius: var(--r); - background: var(--bg-input); - color: var(--text-primary); - font-size: 0.86rem; - font-family: var(--mono); - cursor: pointer; -} - -.config-btn-add { - padding: 8px 16px; - border: 1px solid var(--accent); - border-radius: 6px; - background: var(--accent); - color: #ffffff; - font-family: "JetBrains Mono", monospace; - font-size: 0.8rem; - font-weight: 600; - cursor: pointer; - transition: opacity 150ms ease; -} - -.config-btn-add:hover { - opacity: 0.9; -} - -.config-regex-preview { - padding: 8px 12px; - background: var(--code-bg); - border: 1px solid var(--border); - border-radius: 6px; - font-size: 0.75rem; - color: var(--text-secondary); -} - -.config-regex-preview code { - font-family: "JetBrains Mono", monospace; - color: var(--accent); - background: transparent; - border: none; - padding: 0; -} - -/* --- Config rows & controls --- */ -.config-row { - display: grid; - grid-template-columns: 200px 120px 1fr; - align-items: center; - gap: 12px; - margin-bottom: 10px; -} -.config-label { - font-size: 0.82rem; - color: var(--text-primary); - font-weight: 500; -} -.config-input--num { - flex: none; - width: 120px; - text-align: right; -} -.config-hint { - font-size: 0.72rem; - color: var(--text-muted); -} -.config-badge-restart { - display: inline-block; - font-size: 0.65rem; - font-weight: 500; - padding: 2px 8px; - border-radius: 4px; - background: var(--danger-bg, #3d1a18); - color: var(--danger, #ff7b72); - vertical-align: middle; - margin-left: 6px; -} -.config-actions-row { - display: flex; - gap: 8px; - margin-top: 16px; - flex-wrap: wrap; -} -.config-btn-save { - padding: 8px 20px; - border: 1px solid var(--accent); - border-radius: 6px; - background: var(--accent); - color: #fff; - font-family: "JetBrains Mono", monospace; - font-size: 0.8rem; - font-weight: 600; - cursor: pointer; - transition: opacity 150ms; -} -.config-btn-save:hover { - opacity: 0.9; -} -.config-btn-save.config-btn-highlight { - background: var(--accent-green); - border-color: var(--accent-green); - animation: pulse 2s ease-in-out infinite; -} -@keyframes pulse { - 0%, - 100% { - opacity: 1; - } - 50% { - opacity: 0.8; - } -} -.config-btn-secondary { - padding: 8px 16px; - border: 1px solid var(--border); - border-radius: 6px; - background: var(--bg-secondary); - color: var(--text-primary); - font-family: "JetBrains Mono", monospace; - font-size: 0.8rem; - cursor: pointer; - transition: background 150ms; -} -.config-btn-secondary:hover { - background: var(--bg-hover); -} - -/* --- Config diagnostics panel --- */ -.config-diagnostics { - background: var(--code-bg); - border: 1px solid var(--border); - border-radius: 6px; - padding: 14px 16px; - font-family: "JetBrains Mono", monospace; - font-size: 0.78rem; - line-height: 1.7; - color: var(--text-secondary); -} -.config-diag-loading { - color: var(--text-muted); -} -.config-diag-row { - display: flex; - justify-content: space-between; -} -.config-diag-row .diag-label { - color: var(--text-secondary); -} -.config-diag-row .diag-value { - color: var(--text-primary); - font-weight: 500; -} -.config-diag-section { - margin-bottom: 8px; - padding-bottom: 8px; - border-bottom: 1px solid var(--border); -} -.config-diag-section:last-child { - margin-bottom: 0; - padding-bottom: 0; - border-bottom: none; -} -.config-diag-section-title { - font-weight: 600; - color: var(--accent); - margin-bottom: 4px; - font-size: 0.75rem; - text-transform: uppercase; - letter-spacing: 0.5px; -} - -@media (max-width: 768px) { - .config-row { - grid-template-columns: 1fr; - gap: 4px; - } - .config-input--num { - width: 100%; - } -} - -/* --- Toast notifications --- */ -.toast-container { - position: fixed; - bottom: 20px; - left: 50%; - transform: translateX(-50%); - z-index: 10000; - display: flex; - flex-direction: column; - align-items: center; - gap: 8px; - pointer-events: none; -} -.toast { - padding: 10px 20px; - border-radius: 8px; - font-family: "JetBrains Mono", monospace; - font-size: 0.82rem; - color: var(--text-primary); - background: var(--bg-secondary); - border: 1px solid var(--border); - box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3); - opacity: 0; - transform: translateY(12px); - transition: - opacity 250ms ease, - transform 250ms ease; - pointer-events: auto; - max-width: 420px; - text-align: center; -} -.toast.show { - opacity: 1; - transform: translateY(0); -} -.toast-error { - border-color: var(--danger); - background: var(--danger-bg); - color: var(--danger); -} -.toast-success { - border-color: var(--success); - background: var(--success-bg); - color: var(--success); -} - -/* --- Tree loading indicator --- */ -.tree-loading { - display: flex; - align-items: center; - justify-content: center; - padding: 8px 16px; -} - -/* --------------------------------------------------------------------------- - Advanced Search β€” Autocomplete Dropdown - --------------------------------------------------------------------------- */ -.search-dropdown { - position: absolute; - top: 100%; - left: 0; - right: 0; - margin-top: 4px; - background: var(--bg-secondary); - border: 1px solid var(--border); - border-radius: 8px; - box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25); - z-index: 200; -} -.search-dropdown[hidden] { - display: none; -} -.search-dropdown__section { - border-bottom: 1px solid var(--border); -} -.search-dropdown__section:last-child { - border-bottom: none; -} -.search-dropdown__section[hidden] { - display: none; -} -.search-dropdown__section-header { - display: flex; - align-items: center; - justify-content: space-between; - padding: 6px 12px; - font-size: 0.7rem; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.05em; - color: var(--text-muted); - background: var(--bg-primary); - position: sticky; - top: 0; - z-index: 1; -} -.search-dropdown__clear-btn { - background: none; - border: none; - color: var(--text-muted); - cursor: pointer; - padding: 2px 4px; - border-radius: 4px; - display: flex; - align-items: center; -} -.search-dropdown__clear-btn:hover { - color: var(--danger); - background: var(--danger-bg, rgba(255, 0, 0, 0.08)); -} -.search-dropdown__list { - list-style: none; - margin: 0; - padding: 0; -} -.search-dropdown__item { - display: flex; - align-items: center; - gap: 8px; - padding: 7px 12px; - cursor: pointer; - font-size: 0.82rem; - color: var(--text-primary); - transition: background 120ms ease; -} -.search-dropdown__item:hover, -.search-dropdown__item.active { - background: var(--bg-hover); -} -.search-dropdown__item--history { - color: var(--text-secondary); -} -.search-dropdown__item--history .search-dropdown__icon { - color: var(--text-muted); -} -.search-dropdown__item--title .search-dropdown__meta { - font-size: 0.72rem; - color: var(--text-muted); - margin-left: auto; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - max-width: 180px; -} -.search-dropdown__item--tag .search-dropdown__badge { - margin-left: auto; - font-size: 0.7rem; - color: var(--text-muted); - background: var(--bg-primary); - padding: 1px 6px; - border-radius: 10px; -} -.search-dropdown__icon { - flex-shrink: 0; - width: 14px; - height: 14px; - color: var(--text-muted); -} -.search-dropdown__text { - flex: 1; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.search-dropdown__text mark { - background: var(--accent); - color: var(--bg-primary); - border-radius: 2px; - padding: 0 1px; -} -.search-dropdown__empty { - padding: 16px 12px; - text-align: center; - font-size: 0.82rem; - color: var(--text-muted); -} -.search-dropdown__empty[hidden] { - display: none; -} - -/* --------------------------------------------------------------------------- - Advanced Search β€” Filter Chips - --------------------------------------------------------------------------- */ -.search-chips { - display: flex; - flex-wrap: wrap; - gap: 6px; - padding: 6px 0 0; -} -.search-chips[hidden] { - display: none; -} -.search-chip { - display: inline-flex; - align-items: center; - gap: 4px; - padding: 3px 8px; - font-size: 0.75rem; - font-family: "JetBrains Mono", monospace; - border-radius: 12px; - background: var(--accent); - color: var(--bg-primary); - cursor: default; - max-width: 200px; - white-space: nowrap; -} -.search-chip__label { - overflow: hidden; - text-overflow: ellipsis; -} -.search-chip__remove { - display: flex; - align-items: center; - justify-content: center; - background: none; - border: none; - color: inherit; - cursor: pointer; - padding: 0; - opacity: 0.7; - transition: opacity 120ms; -} -.search-chip__remove:hover { - opacity: 1; -} -.search-chip--tag { - background: var(--accent); - color: var(--bg-primary); -} -.search-chip--vault { - background: var(--success, #22c55e); - color: #fff; -} -.search-chip--title { - background: var(--warning, #f59e0b); - color: #1a1a1a; -} -.search-chip--path { - background: var(--text-muted); - color: var(--bg-primary); -} - -/* --------------------------------------------------------------------------- - Advanced Search β€” Snippet Highlights - --------------------------------------------------------------------------- */ -.search-result__snippet mark { - background: var(--accent); - color: var(--bg-primary); - border-radius: 2px; - padding: 0 2px; - font-weight: 600; -} - -/* --------------------------------------------------------------------------- - Advanced Search β€” Facets Panel - --------------------------------------------------------------------------- */ -.search-facets { - display: flex; - flex-wrap: wrap; - gap: 12px; - margin-bottom: 12px; - padding: 10px 12px; - background: var(--bg-primary); - border: 1px solid var(--border); - border-radius: 8px; -} -.search-facets[hidden] { - display: none; -} -.search-facets__group { - display: flex; - flex-wrap: wrap; - gap: 6px; - align-items: center; -} -.search-facets__label { - font-size: 0.72rem; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.05em; - color: var(--text-muted); - margin-right: 4px; -} -.search-facets__item { - display: inline-flex; - align-items: center; - gap: 4px; - padding: 2px 8px; - font-size: 0.75rem; - border: 1px solid var(--border); - border-radius: 12px; - color: var(--text-secondary); - background: var(--bg-secondary); - cursor: pointer; - transition: - border-color 120ms, - background 120ms; -} -.search-facets__item:hover { - border-color: var(--accent); - background: var(--bg-hover); -} -.search-facets__item .facet-count { - font-size: 0.68rem; - color: var(--text-muted); -} - -/* --------------------------------------------------------------------------- - Advanced Search β€” Pagination - --------------------------------------------------------------------------- */ -.search-pagination { - display: flex; - align-items: center; - justify-content: center; - gap: 8px; - padding: 12px 0; -} -.search-pagination__btn { - padding: 6px 14px; - font-size: 0.82rem; - border: 1px solid var(--border); - border-radius: 6px; - background: var(--bg-secondary); - color: var(--text-primary); - cursor: pointer; - transition: - border-color 120ms, - background 120ms; -} -.search-pagination__btn:hover:not(:disabled) { - border-color: var(--accent); - background: var(--bg-hover); -} -.search-pagination__btn:disabled { - opacity: 0.4; - cursor: not-allowed; -} -.search-pagination__info { - font-size: 0.78rem; - color: var(--text-muted); -} - -/* --------------------------------------------------------------------------- - Advanced Search β€” Sort Controls - --------------------------------------------------------------------------- */ -.search-sort { - display: flex; - align-items: center; - gap: 6px; - margin-left: auto; -} -.search-sort__btn { - padding: 3px 10px; - font-size: 0.75rem; - border: 1px solid var(--border); - border-radius: 6px; - background: var(--bg-secondary); - color: var(--text-secondary); - cursor: pointer; - transition: all 120ms; -} -.search-sort__btn.active { - border-color: var(--accent); - color: var(--accent); - background: var(--bg-hover); -} - -/* --------------------------------------------------------------------------- - Advanced Search β€” Responsive - --------------------------------------------------------------------------- */ -@media (max-width: 768px) { - .search-dropdown { - max-height: 280px; - } - .search-facets { - flex-direction: column; - gap: 8px; - } - .search-chip { - max-width: 150px; - } -} - -/* --------------------------------------------------------------------------- - Sync Badge β€” real-time connection status indicator - --------------------------------------------------------------------------- */ -.sync-badge { - display: inline-block; - width: 10px; - height: 10px; - border-radius: 50%; - margin-left: 8px; - cursor: pointer; - transition: - background 300ms, - box-shadow 300ms; - flex-shrink: 0; - vertical-align: middle; -} -.sync-badge--disconnected { - background: #ef4444; - box-shadow: 0 0 0 2px rgba(239, 68, 68, 0.25); -} -.sync-badge--connecting { - background: #f59e0b; - box-shadow: 0 0 0 2px rgba(245, 158, 11, 0.25); - animation: sync-pulse 1.5s ease-in-out infinite; -} -.sync-badge--connected { - background: #22c55e; - box-shadow: 0 0 0 2px rgba(34, 197, 94, 0.2); -} -.sync-badge--syncing { - background: #3b82f6; - box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.3); - animation: sync-pulse 0.8s ease-in-out infinite; -} -@keyframes sync-pulse { - 0%, - 100% { - opacity: 1; - } - 50% { - opacity: 0.4; - } -} - -/* AI processing β€” white flash on the sync badge */ -.sync-badge--ai-processing { - background: #ffffff !important; - box-shadow: 0 0 6px 3px rgba(255, 255, 255, 0.6) !important; - animation: ai-flash 0.6s ease-in-out infinite; -} - -@keyframes ai-flash { - 0%, 100% { opacity: 1; box-shadow: 0 0 6px 3px rgba(255,255,255,0.6); } - 50% { opacity: 0.3; box-shadow: 0 0 12px 6px rgba(255,255,255,0.9); } -} - -/* ── AI Status section inside sync panel ── */ - -.sync-panel__ai-section { - border-top: 1px solid var(--border); - padding: 10px 14px; -} - -.sync-panel__ai-header { - display: flex; - align-items: center; - justify-content: space-between; -} - -.sync-panel__ai-title { - font-size: 0.78rem; - font-weight: 600; - color: var(--text-primary); -} - -.sync-panel__ai-state { - font-size: 0.75rem; - display: flex; - align-items: center; - gap: 5px; - padding: 2px 8px; - border-radius: 4px; -} - -.sync-panel__ai-state i { - flex-shrink: 0; -} - -.sync-panel__ai--active { - color: #22c55e; - background: rgba(34, 197, 94, 0.1); -} - -.sync-panel__ai--inactive { - color: #f59e0b; - background: rgba(245, 158, 11, 0.1); -} - -.sync-panel__ai--processing { - color: #ffffff; - background: rgba(59, 130, 246, 0.2); - animation: ai-status-pulse 1s ease-in-out infinite; -} - -.sync-panel__ai--unknown { - color: var(--text-muted); - background: var(--bg-tertiary); -} - -@keyframes ai-status-pulse { - 0%, 100% { opacity: 1; } - 50% { opacity: 0.6; } -} - -/* --------------------------------------------------------------------------- - Vault Home Page - --------------------------------------------------------------------------- */ - -.vault-home { - padding: 16px 24px; - max-width: 900px; - margin: 0 auto; -} - -.vault-home-breadcrumb { - display: flex; - align-items: center; - flex-wrap: wrap; - gap: 2px; - font-size: 0.85rem; - margin-bottom: 16px; - padding: 8px 12px; - background: var(--bg-secondary); - border: 1px solid var(--border); - border-radius: 8px; -} - -.vault-home-breadcrumb-item { - display: inline-flex; - align-items: center; - gap: 4px; - padding: 2px 6px; - border-radius: 4px; - color: var(--text-secondary); - transition: background 0.15s, color 0.15s; - user-select: none; -} - -.vault-home-breadcrumb-item:hover { - background: color-mix(in srgb, var(--accent) 10%, transparent); - color: var(--text-primary); -} - -.vault-home-breadcrumb-root { - font-weight: 600; - color: var(--accent); -} - -.vault-home-breadcrumb-sep { - color: var(--text-muted); - user-select: none; - font-size: 0.8rem; -} - -.vault-home-header { - display: flex; - align-items: center; - gap: 12px; - margin-bottom: 12px; - padding-bottom: 8px; - border-bottom: 1px solid var(--border); -} - -.vault-home-count { - font-size: 0.8rem; - font-weight: 600; - color: var(--text-primary); - background: var(--bg-secondary); - padding: 3px 10px; - border-radius: 4px; -} - -.vault-home-recursive-badge { - font-size: 0.7rem; - font-weight: 600; - color: var(--accent); - background: color-mix(in srgb, var(--accent) 12%, transparent); - padding: 2px 8px; - border-radius: 4px; - text-transform: uppercase; - letter-spacing: 0.05em; -} - -.vault-home-dir-info { - font-size: 0.75rem; - color: var(--text-muted); - font-family: var(--font-mono); -} - -.vault-home-results { - min-height: 200px; -} - -.vault-home-empty { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - padding: 3rem; - color: var(--text-muted); - gap: 8px; -} - -.vault-home-empty p { - font-size: 0.85rem; - margin: 0; -} - -.vault-home-error { - padding: 2rem; - text-align: center; - color: var(--danger, #ef4444); - font-size: 0.85rem; -} - -/* ── Recent files section on vault home ── */ -.vault-home-recent { - margin-bottom: 20px; - padding: 12px 16px; - background: var(--bg-secondary); - border: 1px solid var(--border); - border-radius: 8px; -} - -.vault-home-recent-header { - display: flex; - align-items: center; - gap: 6px; - font-size: 0.75rem; - font-weight: 600; - color: var(--text-muted); - text-transform: uppercase; - letter-spacing: 0.05em; - margin-bottom: 8px; - padding-bottom: 6px; - border-bottom: 1px solid var(--border); -} - -.vault-home-recent-list { - display: flex; - flex-direction: column; - gap: 2px; -} - -.vault-home-recent-item { - display: flex; - align-items: center; - gap: 8px; - padding: 5px 6px; - border-radius: 4px; - cursor: pointer; - transition: background 0.12s; - font-size: 0.82rem; -} - -.vault-home-recent-item:hover { - background: color-mix(in srgb, var(--accent) 8%, transparent); -} - -.vault-home-recent-title { - color: var(--text-primary); - font-weight: 500; - flex: 1; - min-width: 0; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.vault-home-recent-dir { - color: var(--text-muted); - font-size: 0.72rem; - font-family: var(--font-mono); - max-width: 180px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.vault-home-recent-time { - color: var(--text-muted); - font-size: 0.7rem; - white-space: nowrap; - flex-shrink: 0; -} - -.vault-home-item { - cursor: pointer; -} - -.vault-home-item:hover { - background: var(--bg-secondary); -} - -/* --------------------------------------------------------------------------- - Sync Panel β€” event log overlay - --------------------------------------------------------------------------- */ -.sync-panel { - position: fixed; - top: 52px; - left: 16px; - width: 340px; - max-height: 400px; - background: var(--bg-secondary); - border: 1px solid var(--border); - border-radius: 10px; - box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); - z-index: 9999; - overflow: hidden; - font-size: 0.82rem; -} -.sync-panel__header { - display: flex; - justify-content: space-between; - align-items: center; - padding: 12px 14px; - border-bottom: 1px solid var(--border); -} -.sync-panel__title { - font-weight: 600; - color: var(--text-primary); -} -.sync-panel__state { - font-size: 0.72rem; - padding: 2px 8px; - border-radius: 8px; - font-weight: 500; -} -.sync-panel__state--connected { - background: rgba(34, 197, 94, 0.15); - color: #22c55e; -} -.sync-panel__state--disconnected { - background: rgba(239, 68, 68, 0.15); - color: #ef4444; -} -.sync-panel__state--connecting { - background: rgba(245, 158, 11, 0.15); - color: #f59e0b; -} -.sync-panel__state--syncing { - background: rgba(59, 130, 246, 0.15); - color: #3b82f6; -} -.sync-panel__empty { - padding: 20px 14px; - text-align: center; - color: var(--text-muted); -} -.sync-panel__events { - max-height: 320px; - overflow-y: auto; - padding: 4px 0; -} -.sync-panel__event { - display: flex; - align-items: center; - gap: 8px; - padding: 7px 14px; - border-bottom: 1px solid var(--border); -} -.sync-panel__event:last-child { - border-bottom: none; -} -.sync-panel__event-type { - font-weight: 500; - color: var(--text-primary); - white-space: nowrap; -} -.sync-panel__event-detail { - color: var(--text-secondary); - flex: 1; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.sync-panel__event-time { - font-size: 0.7rem; - color: var(--text-muted); - white-space: nowrap; -} - -/* --------------------------------------------------------------------------- - Toast β€” info variant (blue) - --------------------------------------------------------------------------- */ -.toast.toast-info { - background: #1e3a5f; - border-left: 4px solid #3b82f6; - color: #bfdbfe; -} -[data-theme="light"] .toast.toast-info { - background: #eff6ff; - border-left: 4px solid #3b82f6; - color: #1e40af; -} - -/* --------------------------------------------------------------------------- - Config Toggle Switch - --------------------------------------------------------------------------- */ -.config-toggle { position: relative; - display: inline-block; - width: 40px; - height: 22px; - flex-shrink: 0; + box-shadow: 0 20px 60px rgba(0,0,0,0.5), 0 0 0 1px rgba(255,255,255,0.05); + animation: about-in 0.35s ease; } -.config-toggle input { - opacity: 0; - width: 0; - height: 0; +@keyframes about-in { + from { opacity: 0; transform: translateY(20px) scale(0.97); } + to { opacity: 1; transform: translateY(0) scale(1); } } -.config-toggle-slider { - position: absolute; - cursor: pointer; - inset: 0; - background: var(--bg-hover); - border: 1px solid var(--border); - border-radius: 22px; - transition: - background 200ms, - border-color 200ms; -} -.config-toggle-slider::before { - content: ""; - position: absolute; - height: 16px; - width: 16px; - left: 2px; - bottom: 2px; - background: var(--text-muted); - border-radius: 50%; - transition: - transform 200ms, - background 200ms; -} -.config-toggle input:checked + .config-toggle-slider { - background: rgba(34, 197, 94, 0.2); - border-color: #22c55e; -} -.config-toggle input:checked + .config-toggle-slider::before { - transform: translateX(18px); - background: #22c55e; -} - -/* --------------------------------------------------------------------------- - Hidden Files Configuration - --------------------------------------------------------------------------- */ -.hidden-files-vault-card { - background: var(--bg-secondary); - border: 1px solid var(--border); - border-radius: 6px; - padding: 12px; - margin-bottom: 12px; - transition: border-color 200ms ease; -} - -.hidden-files-vault-card:hover { - border-color: var(--accent); -} - -.hidden-files-vault-header { - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 12px; - padding-bottom: 8px; - border-bottom: 1px solid var(--border); -} - -.hidden-files-vault-header h3 { - font-size: 0.95rem; - font-weight: 600; - color: var(--text-primary); - margin: 0; -} - -.hidden-files-vault-type { - font-size: 0.7rem; - padding: 2px 6px; - background: var(--tag-bg); - color: var(--tag-text); - border-radius: 3px; - font-family: var(--mono); - text-transform: uppercase; - letter-spacing: 0.5px; -} - -.hidden-files-whitelist { - margin-top: 12px; - padding-top: 12px; - border-top: 1px solid var(--border); -} - -.hidden-files-whitelist-items { - display: flex; - flex-wrap: wrap; - gap: 6px; - margin-bottom: 10px; - min-height: 28px; - padding: 4px; - background: var(--bg-primary); - border-radius: 4px; - border: 1px dashed var(--border); -} - -.hidden-files-whitelist-items:empty::before { - content: "Aucun dossier dans la liste blanche"; - color: var(--text-muted); - font-size: 0.85rem; - font-style: italic; -} - -.hidden-files-whitelist-item { - display: inline-flex; - align-items: center; - gap: 4px; - padding: 3px 6px 3px 8px; - background: var(--tag-bg); - color: var(--tag-text); - border-radius: 4px; - font-size: 0.85rem; - font-family: var(--mono); - border: 1px solid color-mix(in srgb, var(--tag-text) 30%, transparent); - transition: all 150ms ease; -} - -.hidden-files-whitelist-item:hover { - background: color-mix(in srgb, var(--tag-bg) 80%, var(--accent) 20%); - border-color: var(--accent); -} - -.whitelist-item-text { - user-select: none; -} - -.whitelist-item-remove { - background: none; - border: none; - color: var(--text-muted); - cursor: pointer; - font-size: 1.1rem; - line-height: 1; - padding: 0 2px; - transition: all 150ms ease; - border-radius: 2px; -} - -.whitelist-item-remove:hover { - color: var(--danger); - background: color-mix(in srgb, var(--danger) 15%, transparent); -} - -.hidden-files-add-row { - display: flex; - gap: 8px; - align-items: center; - margin-top: 4px; -} - -.hidden-files-add-row .config-input { - flex: 1; - max-width: 250px; - font-family: var(--mono); - font-size: 0.9rem; -} - -.config-btn-add { - padding: 6px 12px; - background: var(--accent); - color: white; - border: none; - border-radius: 4px; - cursor: pointer; - font-size: 0.875rem; - font-weight: 500; - transition: all 150ms ease; - white-space: nowrap; -} - -.config-btn-add:hover { - background: color-mix(in srgb, var(--accent) 85%, black); - transform: translateY(-1px); -} - -.config-btn-add:active { - transform: translateY(0); -} - -/* --------------------------------------------------------------------------- - Utility β€” hidden class - --------------------------------------------------------------------------- */ -.hidden { - display: none !important; -} - -/* --------------------------------------------------------------------------- - Login Screen - --------------------------------------------------------------------------- */ -.login-screen { - position: fixed; - inset: 0; - z-index: 10001; - display: flex; - align-items: center; - justify-content: center; - background: linear-gradient(135deg, #090e17 0%, #101827 50%, #1b2838 100%); -} -.login-card { - width: 380px; - max-width: 90vw; - background: rgba(30, 30, 46, 0.85); - backdrop-filter: blur(20px); - border: 1px solid rgba(255, 255, 255, 0.08); - border-radius: 16px; - padding: 40px 36px; - box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5); - animation: loginFadeIn 0.4s ease-out; -} -@keyframes loginFadeIn { - from { - opacity: 0; - transform: translateY(20px) scale(0.97); - } - to { - opacity: 1; - transform: translateY(0) scale(1); - } -} -.login-header { - text-align: center; - margin-bottom: 32px; -} -.login-logo { - display: flex; - align-items: center; - justify-content: center; - gap: 10px; - margin-bottom: 8px; -} -.login-logo-icon { - font-size: 2rem; -} -.login-logo-text { - font-size: 1.8rem; - font-weight: 700; - background: linear-gradient(135deg, #7dd3fc, #38bdf8, #0ea5e9); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; - letter-spacing: -0.02em; -} -.login-subtitle { - font-size: 0.88rem; - color: rgba(255, 255, 255, 0.45); - margin: 0; -} -.login-form .form-group { - margin-bottom: 20px; -} -.login-form .form-group label { - display: block; - font-size: 0.82rem; - font-weight: 500; - color: rgba(255, 255, 255, 0.6); - margin-bottom: 6px; -} -.login-form input[type="text"], -.login-form input[type="password"] { - width: 100%; - padding: 12px 14px; - border: 1px solid rgba(255, 255, 255, 0.1); - border-radius: 10px; - background: rgba(255, 255, 255, 0.06); - color: #e2e8f0; - font-size: 0.92rem; - font-family: inherit; - outline: none; - transition: - border-color 200ms, - box-shadow 200ms; - box-sizing: border-box; -} -.login-form input:focus { - border-color: #818cf8; - box-shadow: 0 0 0 3px rgba(129, 140, 248, 0.2); -} -.login-form input::placeholder { - color: rgba(255, 255, 255, 0.25); -} -.password-input-wrapper { - position: relative; -} -.password-toggle { - position: absolute; - right: 10px; - top: 50%; - transform: translateY(-50%); - background: none; - border: none; - cursor: pointer; - font-size: 1rem; - opacity: 0.5; - transition: opacity 150ms; - padding: 4px; -} -.password-toggle:hover { - opacity: 0.9; -} -.form-group--inline { - display: flex; - align-items: center; -} -.checkbox-label { - display: flex; - align-items: center; - gap: 8px; - cursor: pointer; - font-size: 0.82rem; - color: rgba(255, 255, 255, 0.5); -} -.checkbox-label input[type="checkbox"] { - accent-color: #818cf8; - width: 15px; - height: 15px; -} -.login-error { - padding: 10px 14px; - border-radius: 8px; - background: rgba(239, 68, 68, 0.12); - border: 1px solid rgba(239, 68, 68, 0.3); - color: #fca5a5; - font-size: 0.82rem; - margin-bottom: 16px; -} -.btn-login { - width: 100%; - padding: 13px 24px; - border: none; - border-radius: 10px; - background: linear-gradient(135deg, #3b82f6, #2563eb); - color: #fff; - font-size: 0.95rem; - font-weight: 600; - cursor: pointer; - transition: - opacity 200ms, - transform 100ms; - display: flex; - align-items: center; - justify-content: center; - gap: 8px; - font-family: inherit; -} -.btn-login:hover:not(:disabled) { - opacity: 0.92; -} -.btn-login:active:not(:disabled) { - transform: scale(0.98); -} -.btn-login:disabled { - opacity: 0.6; - cursor: not-allowed; -} -.btn-spinner { - font-size: 1rem; -} - -/* Light theme login */ -[data-theme="light"] .login-screen { - background: linear-gradient(135deg, #dbeafe, #eff6ff, #bfdbfe); -} -[data-theme="light"] .login-card { - background: rgba(255, 255, 255, 0.9); - border: 1px solid rgba(0, 0, 0, 0.08); - box-shadow: 0 20px 60px rgba(0, 0, 0, 0.12); -} -[data-theme="light"] .login-subtitle { - color: rgba(0, 0, 0, 0.45); -} -[data-theme="light"] .login-form .form-group label { - color: rgba(0, 0, 0, 0.6); -} -[data-theme="light"] .login-form input[type="text"], -[data-theme="light"] .login-form input[type="password"] { - background: rgba(0, 0, 0, 0.04); - border-color: rgba(0, 0, 0, 0.12); - color: #1e293b; -} -[data-theme="light"] .login-form input::placeholder { - color: rgba(0, 0, 0, 0.3); -} -[data-theme="light"] .checkbox-label { - color: rgba(0, 0, 0, 0.5); -} -[data-theme="light"] .login-error { - background: rgba(239, 68, 68, 0.08); - color: #dc2626; -} - -/* --------------------------------------------------------------------------- - User Menu (header) - --------------------------------------------------------------------------- */ -.user-menu { - display: flex; - align-items: center; - gap: 8px; -} -.user-display-name { - font-size: 0.8rem; - color: var(--text-secondary); - font-weight: 500; - max-width: 120px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.user-menu-link, -.btn-logout { - display: flex; - align-items: center; - justify-content: center; - background: none; - border: none; - color: var(--text-muted); - cursor: pointer; - padding: 4px; - border-radius: 4px; - transition: - color 150ms, - background 150ms; -} -.user-menu-link:hover, -.btn-logout:hover { - color: var(--text-primary); - background: var(--bg-hover); -} -.btn-logout:hover { - color: var(--danger); -} - -/* --------------------------------------------------------------------------- - Admin Panel - --------------------------------------------------------------------------- */ -.admin-toolbar { - padding: 16px; - display: flex; - justify-content: flex-end; -} -.admin-users-list { - padding: 0 16px 16px; -} -.admin-table { - width: 100%; - border-collapse: collapse; - font-size: 0.82rem; -} -.admin-table th, -.admin-table td { - padding: 10px 12px; - text-align: left; - border-bottom: 1px solid var(--border); -} -.admin-table th { - font-size: 0.72rem; - text-transform: uppercase; - letter-spacing: 0.05em; - color: var(--text-muted); - font-weight: 600; - background: var(--bg-primary); - position: sticky; - top: 0; -} -.admin-table td { - color: var(--text-primary); -} -.admin-role-badge { - display: inline-block; - padding: 2px 10px; - border-radius: 10px; - font-size: 0.72rem; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.03em; -} -.admin-role-admin { - background: rgba(59, 130, 246, 0.15); - color: #3b82f6; -} -.admin-role-user { - background: rgba(34, 197, 94, 0.12); - color: #22c55e; -} -.admin-vaults-text { - font-size: 0.78rem; - color: var(--text-secondary); -} -.admin-actions { - white-space: nowrap; -} -.admin-action-btn { - background: none; - border: none; - cursor: pointer; - padding: 4px 6px; - border-radius: 4px; - font-size: 0.9rem; - transition: background 150ms; -} -.admin-action-btn:hover { - background: var(--bg-hover); -} -.admin-action-btn.danger:hover { - background: rgba(239, 68, 68, 0.12); -} - -/* Admin form overlay */ -.admin-form-overlay { - position: absolute; - inset: 0; - background: rgba(0, 0, 0, 0.6); - display: flex; - align-items: center; - justify-content: center; - z-index: 10; - backdrop-filter: blur(4px); -} -.admin-form-card { - background: var(--bg-secondary); - border: 1px solid var(--border); - border-radius: 12px; - padding: 28px 24px; - width: 440px; - max-width: 90vw; - max-height: 80vh; - overflow-y: auto; - box-shadow: 0 12px 40px rgba(0, 0, 0, 0.3); -} -.admin-form-card h3 { - margin: 0 0 20px; - font-size: 1.05rem; - color: var(--text-primary); -} -.admin-form-card .form-group { - margin-bottom: 16px; -} -.admin-form-card .form-group label { - display: block; - font-size: 0.82rem; - font-weight: 500; - color: var(--text-secondary); - margin-bottom: 6px; -} -.admin-form-card input[type="text"], -.admin-form-card input[type="password"], -.admin-form-card select { - width: 100%; - padding: 10px 12px; - border: 1px solid var(--border); - border-radius: 8px; - background: var(--bg-primary); - color: var(--text-primary); - font-size: 0.88rem; - font-family: inherit; - outline: none; - transition: border-color 200ms; - box-sizing: border-box; -} -.admin-form-card input:focus, -.admin-form-card select:focus { - border-color: var(--accent); -} -.admin-vault-list { - display: flex; - flex-direction: column; - gap: 6px; - max-height: 160px; - overflow-y: auto; - padding: 8px; - background: var(--bg-primary); - border: 1px solid var(--border); - border-radius: 8px; -} -.admin-vault-list .checkbox-label { - color: var(--text-primary); - font-size: 0.82rem; -} -.admin-form-actions { - display: flex; - justify-content: flex-end; - gap: 8px; - margin-top: 20px; -} - -/* --------------------------------------------------------------------------- - Popup Mode (Nouvelle fenΓͺtre) - --------------------------------------------------------------------------- */ -body.popup-mode .top-nav, -body.popup-mode .sidebar, -body.popup-mode .resizer, -body.popup-mode .content-header { - display: none !important; -} -body.popup-mode .main-layout { - height: 100vh; -} -body.popup-mode .content-area { - margin: 15px auto; - padding: 30px; - border: 1px solid var(--border); - border-radius: 12px; - height: calc(100vh - 30px); - max-width: 1000px; - overflow-y: auto; - box-shadow: 0 8px 30px rgba(0, 0, 0, 0.15); - box-sizing: border-box; -} - -/* --------------------------------------------------------------------------- - Recent Tab Styles - --------------------------------------------------------------------------- */ - -/* Liste rΓ©cente */ -.recent-list { - display: flex; - flex-direction: column; - gap: 2px; - padding: 4px 0; -} - -/* Item */ -.recent-item { - padding: 10px 12px; - border-radius: 6px; - cursor: pointer; - border-left: 3px solid transparent; - transition: - background 0.15s, - border-color 0.15s; -} -.recent-item:hover { - background: var(--bg-secondary); - border-left-color: var(--accent); -} -.recent-item.active { - border-left-color: var(--accent); - background: var(--bg-secondary); -} - -/* Header: temps + badge vault */ -.recent-item-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 3px; -} -.recent-time { - font-size: 11px; - color: var(--text-muted); - display: flex; - align-items: center; - gap: 4px; -} -.recent-vault-badge { - font-size: 10px; - font-weight: 600; - padding: 1px 6px; - border-radius: 10px; - background: var(--accent); - color: #fff; - opacity: 0.85; -} - -/* Titre */ -.recent-item-title { - font-size: 13px; - font-weight: 600; - color: var(--text-primary); - margin-bottom: 2px; -} - -/* Breadcrumb path */ -.recent-item-path { - font-size: 11px; - color: var(--text-muted); - margin-bottom: 4px; - font-family: monospace; -} - -/* Preview */ -.recent-item-preview { - font-size: 12px; - color: var(--text-muted); - display: -webkit-box; - -webkit-line-clamp: 2; - line-clamp: 2; - -webkit-box-orient: vertical; - overflow: hidden; - line-height: 1.4; - margin-bottom: 5px; -} - -/* Tags */ -.recent-item-tags { - display: flex; - flex-wrap: wrap; - gap: 4px; -} -.recent-item-tags .tag-pill { - font-size: 10px; - padding: 1px 6px; - border-radius: 10px; - background: var(--bg-secondary); - color: var(--accent); - border: 1px solid var(--border); -} - -/* Filtre vault */ -.recent-filter-bar { - padding: 8px 12px 4px; -} -.recent-filter-bar select { - width: 100%; - padding: 4px 8px; - font-size: 12px; - background: var(--bg-secondary); - color: var(--text-primary); - border: 1px solid var(--border); - border-radius: 4px; - cursor: pointer; -} - -/* Γ‰tat vide */ -.recent-empty { - display: flex; - flex-direction: column; - align-items: center; - padding: 32px 16px; - color: var(--text-muted); - gap: 8px; - font-size: 13px; -} - -/* --------------------------------------------------------------------------- - Find in Page - --------------------------------------------------------------------------- */ - -/* Animation d'entrΓ©e */ -@keyframes slideUp { - from { - opacity: 0; - transform: translateY(20px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -/* Barre principale */ -.find-in-page-bar { - position: fixed; - bottom: 20px; - right: 20px; - background: var(--bg-secondary); - border: 1px solid var(--border); - border-radius: 12px; - padding: 12px 16px; - box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); - z-index: 1000; - animation: slideUp 200ms ease; - max-width: calc(100vw - 40px); -} - -.find-in-page-bar[hidden] { - display: none; -} - -/* Contenu de la barre */ -.find-in-page-content { - display: flex; - align-items: center; - gap: 10px; - flex-wrap: wrap; -} - -/* IcΓ΄ne de recherche */ -.find-icon { - color: var(--text-secondary); - flex-shrink: 0; -} - -/* Input de recherche */ -#find-input { - flex: 1; - min-width: 200px; - padding: 6px 10px; - border: 1px solid var(--border); - border-radius: 6px; - background: var(--bg-primary); - color: var(--text-primary); - font-family: "JetBrains Mono", monospace; - font-size: 0.85rem; - outline: none; - transition: border-color 200ms ease; -} - -#find-input:focus { - border-color: var(--accent); -} - -/* Compteur d'occurrences */ -.find-counter { - font-family: "JetBrains Mono", monospace; - font-size: 0.75rem; - color: var(--text-secondary); - white-space: nowrap; - min-width: 90px; - text-align: center; -} - -/* Boutons de navigation */ -.find-nav-buttons { - display: flex; - gap: 4px; -} - -/* Boutons gΓ©nΓ©riques */ -.find-btn { - display: flex; - align-items: center; - justify-content: center; - width: 28px; - height: 28px; - border: 1px solid var(--border); - border-radius: 6px; - background: var(--bg-primary); - color: var(--text-secondary); - cursor: pointer; - transition: all 150ms ease; - padding: 0; - flex-shrink: 0; -} - -.find-btn:hover:not(:disabled) { - border-color: var(--accent); - color: var(--accent); - background: color-mix(in srgb, var(--accent) 10%, var(--bg-primary)); -} - -.find-btn:disabled { - opacity: 0.4; - cursor: not-allowed; -} - -/* Options */ -.find-options { - display: flex; - gap: 4px; - border-left: 1px solid var(--border); - padding-left: 10px; -} - -.find-option-btn { - font-family: "JetBrains Mono", monospace; - font-size: 0.7rem; - font-weight: 600; -} - -.find-option-btn[aria-pressed="true"] { - border-color: var(--accent); - background: color-mix(in srgb, var(--accent) 20%, var(--bg-primary)); - color: var(--accent); -} - -.find-option-text { - pointer-events: none; -} - -/* Bouton fermer */ -.find-close { - border-left: 1px solid var(--border); - margin-left: 6px; -} - -.find-close:hover { - background: var(--danger-bg); - border-color: var(--danger); - color: var(--danger); -} - -/* Message d'erreur */ -.find-error { - margin-top: 8px; - padding: 6px 10px; - background: var(--danger-bg); - border: 1px solid var(--danger); - border-radius: 6px; - color: var(--danger); - font-size: 0.75rem; - font-family: "JetBrains Mono", monospace; -} - -.find-error[hidden] { - display: none; -} - -/* Highlights dans le contenu */ -.find-highlight { - background: rgba(255, 235, 59, 0.4); - padding: 0 2px; - border-radius: 2px; - transition: background 150ms ease; -} - -[data-theme="dark"] .find-highlight { - background: rgba(255, 193, 7, 0.35); -} - -.find-highlight-active { - background: rgba(255, 193, 7, 0.7); - box-shadow: 0 0 0 2px rgba(255, 193, 7, 0.3); -} - -[data-theme="dark"] .find-highlight-active { - background: rgba(255, 193, 7, 0.6); - box-shadow: 0 0 0 2px rgba(255, 193, 7, 0.4); -} - -/* Responsive mobile */ -@media (max-width: 768px) { - .find-in-page-bar { - bottom: 10px; - left: 10px; - right: 10px; - max-width: none; - padding: 10px 12px; - } - - .find-in-page-content { - gap: 6px; - } - - #find-input { - min-width: 120px; - font-size: 0.8rem; - } - - .find-counter { - font-size: 0.7rem; - min-width: 80px; - } - - .find-btn { - width: 32px; - height: 32px; - } - - .find-options { - padding-left: 6px; - } -} - -/* ===== PWA STYLES ===== */ - -/* PWA Update Notification */ -.pwa-update-notification { - position: fixed; - bottom: 20px; - right: 20px; - z-index: 10000; - animation: slideInUp 0.3s ease-out; -} - -.pwa-update-content { - background: var(--accent); - color: white; - padding: 16px 20px; - border-radius: var(--radius); - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); - display: flex; - align-items: center; - gap: 12px; - max-width: 400px; -} - -.pwa-update-content span { - flex: 1; - font-size: 0.9rem; - font-weight: 500; -} - -.pwa-update-btn { - background: white; - color: var(--accent); - border: none; - padding: 8px 16px; - border-radius: var(--radius); - font-size: 0.85rem; - font-weight: 600; - cursor: pointer; - transition: all 0.2s ease; - white-space: nowrap; -} - -.pwa-update-btn:hover { - transform: translateY(-1px); - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2); -} - -.pwa-update-dismiss { - background: transparent; - border: none; - color: white; - font-size: 1.5rem; - line-height: 1; - cursor: pointer; - padding: 0; - width: 24px; - height: 24px; - display: flex; - align-items: center; - justify-content: center; - opacity: 0.8; - transition: opacity 0.2s ease; -} - -.pwa-update-dismiss:hover { - opacity: 1; -} - -/* PWA Install Button (optional - can be added to header) */ -#pwa-install-btn { - display: none; - background: var(--accent); - color: white; - border: none; - padding: 8px 16px; - border-radius: var(--radius); - font-size: 0.85rem; - font-weight: 600; - cursor: pointer; - transition: all 0.2s ease; -} - -#pwa-install-btn:hover { - background: var(--accent-green); - transform: translateY(-1px); -} - -/* Animations */ -@keyframes slideInUp { - from { - transform: translateY(100%); - opacity: 0; - } - to { - transform: translateY(0); - opacity: 1; - } -} - -/* Mobile responsive */ -@media (max-width: 768px) { - .pwa-update-notification { - bottom: 10px; - right: 10px; - left: 10px; - } - - .pwa-update-content { - padding: 12px 16px; - font-size: 0.85rem; - } - - .pwa-update-btn { - padding: 6px 12px; - font-size: 0.8rem; - } -} - -/* --------------------------------------------------------------------------- - Dashboard Home - Recent Files Widget - --------------------------------------------------------------------------- */ - -.dashboard-home { - padding: 0; - width: 100%; - display: flex; - flex-direction: column; - gap: 32px; -} - -.dashboard-section { - display: flex; - flex-direction: column; -} - -.dashboard-header { - margin-bottom: 20px; -} - -.dashboard-title-row { - display: flex; - align-items: center; - gap: 12px; - margin-bottom: 16px; -} - -.dashboard-icon { - width: 28px; - height: 28px; - color: var(--accent); -} - -.dashboard-title-row h2 { - font-family: "JetBrains Mono", monospace; - font-size: 1.4rem; - font-weight: 600; - color: var(--text-primary); - margin: 0; -} - -.dashboard-filter-row { - display: flex; - align-items: center; - gap: 12px; -} - -.dashboard-select { - padding: 6px 12px; - font-size: 13px; - background: var(--bg-secondary); - color: var(--text-primary); - border: 1px solid var(--border); - border-radius: 6px; - cursor: pointer; - min-width: 160px; -} - -.dashboard-select:focus { - outline: none; - border-color: var(--accent); -} - -.dashboard-count { - font-size: 12px; - color: var(--text-muted); - padding: 4px 10px; - background: var(--bg-secondary); - border-radius: 12px; -} - -/* Grid */ -.dashboard-recent-grid { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); - gap: 16px; - flex: 1; - width: 100%; -} - -@media (max-width: 1200px) { - .dashboard-recent-grid { - grid-template-columns: repeat(2, 1fr); - } -} - -@media (max-width: 768px) { - .dashboard-home { - padding: 16px; - } - - .dashboard-recent-grid { - grid-template-columns: 1fr; - } - - .dashboard-title-row h2 { - font-size: 1.2rem; - } -} - -/* Card */ -.dashboard-card { - background: var(--bg-secondary); - border: 1px solid var(--border); - border-radius: 12px; - padding: 12px; - cursor: pointer; - transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); - position: relative; - display: flex; - flex-direction: column; - gap: 4px; - animation: fadeSlideIn 0.3s ease forwards; - opacity: 0; -} - -.dashboard-card:hover { - transform: translateY(-2px); - box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3); - border-color: var(--accent); -} - -.dashboard-card:active { - transform: translateY(0); -} - -@keyframes fadeSlideIn { - from { - opacity: 0; - transform: translateY(10px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -/* Staggered animation for cards */ -.dashboard-card:nth-child(1) { - animation-delay: 0ms; -} -.dashboard-card:nth-child(2) { - animation-delay: 50ms; -} -.dashboard-card:nth-child(3) { - animation-delay: 100ms; -} -.dashboard-card:nth-child(4) { - animation-delay: 150ms; -} -.dashboard-card:nth-child(5) { - animation-delay: 200ms; -} -.dashboard-card:nth-child(6) { - animation-delay: 250ms; -} -.dashboard-card:nth-child(7) { - animation-delay: 300ms; -} -.dashboard-card:nth-child(8) { - animation-delay: 350ms; -} -.dashboard-card:nth-child(9) { - animation-delay: 400ms; -} - -/* Card header */ -.dashboard-card-header { - display: flex; - align-items: flex-start; - justify-content: space-between; - gap: 8px; -} - -.dashboard-card-icon { - width: 40px; - height: 40px; - padding: 4px; - background: transparent; - border: 2px solid var(--accent); - border-radius: 8px; - color: var(--accent); - flex-shrink: 0; - display: flex; - align-items: center; - justify-content: center; -} - -.dashboard-card-icon svg { - width: 24px; - height: 24px; -} - -.dashboard-vault-badge { - font-size: 10px; - font-weight: 600; - padding: 3px 8px; - border-radius: 10px; - background: var(--bg-primary); - color: var(--text-secondary); - border: 1px solid var(--border); - margin-right: auto; -} - -.dashboard-card-bookmark-btn { - background: transparent; - border: none; - color: var(--text-muted); - cursor: pointer; - padding: 4px; - border-radius: 4px; - display: flex; - align-items: center; - justify-content: center; - transition: all 0.2s ease; -} - -.dashboard-card-bookmark-btn:hover { - background: var(--bg-primary); - color: var(--accent); -} - -.dashboard-card-bookmark-btn.active { - color: var(--accent-green); -} - -/* Card title */ -.dashboard-card-title { - font-size: 14px; - font-weight: 600; - color: var(--text-primary); - margin: 0; - line-height: 1.4; - overflow: hidden; - text-overflow: ellipsis; - display: -webkit-box; - -webkit-line-clamp: 2; - line-clamp: 2; - -webkit-box-orient: vertical; -} - -/* Card path */ -.dashboard-card-path { - font-size: 11px; - color: var(--text-muted); - font-family: "JetBrains Mono", monospace; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -/* Card preview */ -.dashboard-card-preview { - display: none; -} - -/* Card footer */ -.dashboard-card-footer { - display: flex; - align-items: center; - justify-content: space-between; - gap: 8px; - margin-top: 4px; - padding-top: 6px; - border-top: 1px solid color-mix(in srgb, var(--border) 50%, transparent); -} - -.dashboard-card-time { - font-size: 11px; - color: var(--text-muted); - display: flex; - align-items: center; - gap: 4px; -} - -.dashboard-card-time svg { - width: 12px; - height: 12px; -} - -/* Card tags */ -.dashboard-card-tags { - display: flex; - flex-wrap: wrap; - gap: 4px; -} - -.dashboard-card-tags .tag-pill { - font-size: 10px; - padding: 2px 6px; - border-radius: 8px; - background: var(--bg-tertiary); - color: var(--accent); - border: 1px solid var(--border); -} - -/* Empty state */ -.dashboard-recent-empty { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - padding: 48px 24px; - color: var(--text-muted); - gap: 12px; - text-align: center; - flex: 1; -} - -.dashboard-recent-empty svg { - width: 48px; - height: 48px; - opacity: 0.4; -} - -.dashboard-recent-empty span { - font-size: 16px; - font-weight: 500; -} - -.dashboard-recent-empty p { - font-size: 13px; - margin: 0; - opacity: 0.7; -} - -/* Loading skeletons */ -.dashboard-loading { - display: none; - grid-template-columns: repeat(3, 1fr); - gap: 16px; -} - -.dashboard-loading.active { - display: grid; -} - -@media (max-width: 1200px) { - .dashboard-loading { - grid-template-columns: repeat(2, 1fr); - } -} - -@media (max-width: 768px) { - .dashboard-loading { - grid-template-columns: 1fr; - } -} - -.skeleton-card { - background: var(--bg-secondary); - border: 1px solid var(--border); - border-radius: 12px; - padding: 16px; - height: 160px; - position: relative; - overflow: hidden; -} - -.skeleton-card::after { - content: ""; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.05), transparent); - animation: shimmer 1.5s infinite; -} - -@keyframes shimmer { - 0% { - transform: translateX(-100%); - } - 100% { - transform: translateX(100%); - } -} - -/* ===== CONTEXT MENU ===== */ -.context-menu { - position: fixed; - background: var(--bg-secondary); - border: 1px solid var(--border); - border-radius: 8px; - box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4); - min-width: 200px; - z-index: 10000; - padding: 4px; - display: none; -} - -.context-menu.active { - display: block; -} - -.context-menu-item { - display: flex; - align-items: center; - gap: 10px; - padding: 8px 12px; - border-radius: 6px; - cursor: pointer; - font-family: "JetBrains Mono", monospace; - font-size: 0.82rem; - color: var(--text-primary); - transition: all 150ms ease; -} - -.context-menu-item:hover:not(.disabled) { - background: var(--bg-hover); - color: var(--accent); -} - -.context-menu-item.disabled { - opacity: 0.4; - cursor: not-allowed; -} - -.context-menu-item .icon { - width: 16px; - height: 16px; - flex-shrink: 0; -} - -.context-menu-separator { - height: 1px; - background: var(--border); - margin: 4px 0; -} - -/* ===== INLINE RENAME ===== */ -.sidebar-item-input { - width: 100%; - padding: 4px 8px; - background: var(--bg-primary); - border: 1px solid var(--accent); - border-radius: 4px; - color: var(--text-primary); - font-family: "JetBrains Mono", monospace; - font-size: 0.82rem; - outline: none; -} - -/* ===== VAULT READONLY BADGE ===== */ -.vault-readonly-badge { - display: inline-flex; - align-items: center; - gap: 4px; - padding: 2px 6px; - background: var(--danger-bg); - color: var(--danger); - border-radius: 4px; - font-size: 0.7rem; - font-weight: 600; - margin-left: 6px; -} - -/* ===== OBSIGATE MODALS ===== */ -.obsigate-modal-overlay { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: var(--overlay-bg); - z-index: 9999; - display: flex; - align-items: center; - justify-content: center; - opacity: 0; - pointer-events: none; - transition: opacity 200ms ease; -} - -.obsigate-modal-overlay.active { - opacity: 1; - pointer-events: all; -} - -.obsigate-modal { - background: var(--bg-secondary); - border: 1px solid var(--border); - border-radius: 12px; - box-shadow: 0 16px 48px rgba(0, 0, 0, 0.5); - min-width: 400px; - max-width: 600px; - transform: scale(0.9); - transition: transform 200ms ease; -} - -.obsigate-modal-overlay.active .obsigate-modal { - transform: scale(1); -} - -.obsigate-modal-header { - padding: 16px 20px; - border-bottom: 1px solid var(--border); - display: flex; - align-items: center; - justify-content: space-between; -} - -.obsigate-modal-title { - font-family: "JetBrains Mono", monospace; - font-size: 1.1rem; - font-weight: 700; - color: var(--text-primary); -} - -.obsigate-modal-body { - padding: 20px; -} - -.obsigate-modal-footer { - padding: 16px 20px; - border-top: 1px solid var(--border); - display: flex; - gap: 10px; - justify-content: flex-end; -} - -.modal-input { - width: 100%; - padding: 10px 12px; - background: var(--bg-primary); - border: 1px solid var(--border); - border-radius: 6px; - color: var(--text-primary); - font-family: "JetBrains Mono", monospace; - font-size: 0.9rem; - outline: none; - transition: border-color 200ms ease; -} - -.modal-input:focus { - border-color: var(--accent); -} - -.modal-input.error { - border-color: var(--danger); -} - -.modal-label { - display: block; - font-family: "JetBrains Mono", monospace; - font-size: 0.85rem; - font-weight: 600; - color: var(--text-secondary); - margin-bottom: 8px; -} - -.modal-hint { - font-size: 0.75rem; - color: var(--text-muted); - margin-top: 6px; -} - -.modal-error { - font-size: 0.8rem; - color: var(--danger); - margin-top: 6px; -} - -.modal-select { - width: 100%; - padding: 10px 12px; - background: var(--bg-primary); - border: 1px solid var(--border); - border-radius: 6px; - color: var(--text-primary); - font-family: "JetBrains Mono", monospace; - font-size: 0.9rem; - outline: none; - cursor: pointer; - transition: border-color 200ms ease; -} - -.modal-select:focus { - border-color: var(--accent); -} - -.modal-btn { - padding: 8px 16px; - border: 1px solid var(--border); - border-radius: 6px; - background: var(--bg-primary); - color: var(--text-primary); - font-family: "JetBrains Mono", monospace; - font-size: 0.85rem; - cursor: pointer; - transition: all 150ms ease; -} - -.modal-btn:hover { - border-color: var(--accent); - color: var(--accent); -} - -.modal-btn.primary { - background: var(--accent); - color: white; - border-color: var(--accent); -} - -.modal-btn.primary:hover { - opacity: 0.9; -} - -.modal-btn.danger { - background: var(--danger); - color: white; - border-color: var(--danger); -} - -.modal-btn.danger:hover { - opacity: 0.9; -} - -.modal-btn:disabled { - opacity: 0.5; - cursor: not-allowed; -} - -.modal-form-group { - margin-bottom: 16px; -} - -.modal-form-group:last-child { - margin-bottom: 0; -} - -.modal-warning { - padding: 12px; - background: var(--danger-bg); - border: 1px solid var(--danger); - border-radius: 6px; - color: var(--danger); - font-size: 0.85rem; - margin-bottom: 16px; - display: flex; - align-items: flex-start; - gap: 10px; -} - -.modal-warning .icon { - flex-shrink: 0; - margin-top: 2px; -} - -/* ===== TAB BAR ===== */ -.tab-bar { - display: flex; - align-items: stretch; - background: var(--bg-secondary); - border-bottom: 1px solid var(--border); - overflow: hidden; - flex-shrink: 0; - min-height: 36px; -} - -.tab-bar[hidden] { - display: none; -} - -.tab-list { - display: flex; - align-items: stretch; - overflow-x: auto; - overflow-y: hidden; - flex: 1; - scrollbar-width: thin; -} - -.tab-list::-webkit-scrollbar { - height: 3px; -} - -.tab-item { - display: flex; - align-items: center; - gap: 6px; - padding: 6px 12px; - font-size: 0.8rem; - color: var(--text-muted); - cursor: pointer; - white-space: nowrap; - border-right: 1px solid var(--border); - background: transparent; - transition: background 0.15s, color 0.15s; - user-select: none; - position: relative; - min-width: 0; - flex-shrink: 0; -} - -.tab-item:hover { - background: var(--bg-hover); - color: var(--text-secondary); -} - -.tab-item.active { - background: var(--bg-primary); - color: var(--text-primary); - border-bottom: 2px solid var(--accent); - margin-bottom: -1px; -} - -.tab-item .tab-icon { - width: 14px; - height: 14px; - flex-shrink: 0; - opacity: 0.7; -} - -.tab-item .tab-name { - overflow: hidden; - text-overflow: ellipsis; - max-width: 150px; -} - -/* Preview tab (single-click) β€” italic title, slightly muted */ -.tab-item.preview .tab-name { - font-style: italic; - opacity: 0.75; -} -.tab-item.preview { - background: var(--bg-hover); -} - -.tab-item .tab-close { - width: 16px; - height: 16px; - display: flex; - align-items: center; - justify-content: center; - border-radius: 3px; - flex-shrink: 0; - opacity: 0; - transition: opacity 0.15s, background 0.15s; -} - -.tab-item:hover .tab-close, -.tab-item.active .tab-close { - opacity: 0.6; -} - -.tab-item .tab-close:hover { - opacity: 1; - background: var(--bg-hover); -} - -.tab-item.dragging { - opacity: 0.5; - background: var(--bg-hover); -} - -.tab-drop-indicator { - width: 2px; - background: var(--accent); - flex-shrink: 0; -} - -/* ── Backlinks panel ── */ -.backlinks-panel { - margin-top: 24px; - padding: 12px 16px; - background: var(--bg-card, var(--bg-secondary)); - border-radius: 8px; - border: 1px solid var(--border); -} -.backlinks-header { - font-size: 0.8rem; - font-weight: 600; - color: var(--text-muted); - display: flex; - align-items: center; - gap: 6px; - margin-bottom: 8px; - text-transform: uppercase; - letter-spacing: 0.5px; -} -.backlinks-list { - display: flex; - flex-direction: column; - gap: 4px; -} -.backlink-item { - display: flex; - align-items: center; - gap: 8px; - padding: 6px 8px; - border-radius: 4px; - cursor: pointer; - transition: background 0.15s; -} -.backlink-item:hover { - background: var(--bg-hover); -} -.backlink-vault { - font-size: 0.7rem; - color: var(--accent); - background: var(--accent-bg, rgba(99, 102, 241, 0.1)); - padding: 1px 6px; - border-radius: 3px; -} -.backlink-title { - font-size: 0.85rem; - color: var(--text-primary); - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -/* ── Unsupported file notice ── */ -.unsupported-file { - padding: 40px; - text-align: center; - color: var(--text-muted); -} -.unsupported-file i { - display: block; - margin: 0 auto 12px; - opacity: 0.4; -} -.unsupported-file .filename { - font-weight: 600; - color: var(--text-primary); - margin-bottom: 8px; - word-break: break-all; -} -.unsupported-file .btn-action { - margin-top: 12px; - display: inline-flex; -} - -/* ── Dashboard Stats Grid ── */ -.dashboard-stats-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); - gap: 12px; -} -.stat-card { - display: flex; - flex-direction: column; - align-items: center; - padding: 16px 12px; - background: var(--bg-card, var(--bg-secondary)); - border-radius: 8px; - border: 1px solid var(--border); -} -.stat-icon { - width: 24px; - height: 24px; - opacity: 0.6; - margin-bottom: 8px; - color: var(--accent); -} -.stat-value { - font-size: 1.4rem; - font-weight: 700; - color: var(--text-primary); -} -.stat-label { - font-size: 0.75rem; - color: var(--text-muted); - margin-top: 2px; -} -.dashboard-stats-loading { - padding: 16px; - text-align: center; - color: var(--text-muted); -} - -/* ── Dashboard Conflicts ── */ -.dashboard-conflicts-grid { - display: flex; - flex-direction: column; - gap: 8px; -} -.conflict-card { - display: flex; - align-items: center; - justify-content: space-between; - padding: 10px 14px; - background: var(--bg-card, var(--bg-secondary)); - border-radius: 6px; - border: 1px solid var(--border); - gap: 12px; -} -.conflict-info { - display: flex; - flex-direction: column; - gap: 2px; - min-width: 0; -} -.conflict-vault { - font-size: 0.7rem; - color: var(--accent); - background: var(--accent-bg, rgba(99,102,241,0.1)); - padding: 1px 6px; - border-radius: 3px; - align-self: flex-start; -} -.conflict-name { - font-size: 0.85rem; - font-weight: 500; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.conflict-date { - font-size: 0.7rem; - color: var(--text-muted); -} -.conflict-actions { - display: flex; - gap: 8px; - flex-shrink: 0; -} -.conflict-btn { - padding: 4px 10px; - font-size: 0.75rem; - border: 1px solid var(--border); - border-radius: 4px; - cursor: pointer; - background: var(--bg-primary); - color: var(--text-primary); - white-space: nowrap; -} -.conflict-btn:hover { background: var(--bg-hover); } - -/* ── Quick Help (Dashboard) ── */ -.quick-help { - margin-top: 16px; - background: var(--bg-card, var(--bg-secondary)); - border: 1px solid var(--border); - border-radius: var(--radius-lg); - overflow: hidden; -} -.qh-header { - display: flex; - align-items: center; - gap: 8px; - padding: 10px 14px; - font-size: 0.8rem; - font-weight: 600; - color: var(--text-secondary); - border-bottom: 1px solid var(--border); - user-select: none; -} -.qh-header i { color: var(--accent); opacity: 0.7; } -.qh-toggle { - margin-left: auto; - background: none; - border: none; - color: var(--text-muted); - cursor: pointer; - font-size: 1rem; - line-height: 1; - padding: 2px 6px; - border-radius: 4px; -} -.qh-toggle:hover { color: var(--text-secondary); background: var(--bg-hover); } -.qh-body { - padding: 10px 14px 14px; - display: grid; - grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); - gap: 6px 20px; -} -.qh-body.collapsed { display: none; } -.qh-row { - display: flex; - align-items: center; - gap: 10px; - padding: 4px 0; -} -.qh-kbd { - display: inline-flex; - align-items: center; - padding: 2px 8px; - font-family: var(--mono); - font-size: 0.7rem; - font-weight: 500; - color: var(--accent-text, #79c0ff); - background: var(--accent-bg, #1f2a3a); - border: 1px solid var(--border-md, #30363d); - border-radius: 4px; - white-space: nowrap; - min-width: 0; - letter-spacing: 0.3px; -} -.qh-desc { - font-size: 0.78rem; - color: var(--text-secondary); -} -.qh-divider { - grid-column: 1 / -1; - height: 1px; - background: var(--border); - margin: 6px 0 8px; -} -.qh-tip { - grid-column: 1 / -1; - display: flex; - align-items: flex-start; - gap: 8px; - font-size: 0.75rem; - color: var(--text-muted); - line-height: 1.5; -} -.qh-tip i { color: var(--warn); flex-shrink: 0; margin-top: 1px; } -.qh-tip strong { color: var(--text-secondary); } - -/* ── Webhooks UI ── */ -.webhook-item { - display: flex; - align-items: center; - gap: 10px; - padding: 8px 10px; - background: var(--bg-card, var(--bg-secondary)); - border-radius: 6px; - margin-bottom: 6px; - font-size: 0.8rem; -} -.webhook-name { font-weight: 500; min-width: 80px; } -.webhook-url { color: var(--accent); overflow: hidden; text-overflow: ellipsis; flex: 1; } -.webhook-events { color: var(--text-muted); font-size: 0.7rem; } -.webhook-delete { background: none; border: none; color: var(--text-error); cursor: pointer; font-size: 1rem; padding: 2px 6px; } -.config-add-row { display: flex; gap: 8px; margin-top: 8px; } -.config-btn-add { padding: 6px 14px; background: var(--accent); color: #fff; border: none; border-radius: 6px; cursor: pointer; font-size: 0.8rem; } - -/* ── Shares UI ── */ -.share-item { - display: flex; - align-items: center; - gap: 10px; - padding: 8px 10px; - background: var(--bg-card, var(--bg-secondary)); - border-radius: 6px; - margin-bottom: 6px; - font-size: 0.8rem; -} -.share-path { font-weight: 500; min-width: 0; overflow: hidden; text-overflow: ellipsis; } -.share-url a { color: var(--accent); font-size: 0.75rem; } -.share-meta { color: var(--text-muted); font-size: 0.7rem; } -.share-revoke { background: none; border: 1px solid var(--text-error); color: var(--text-error); cursor: pointer; padding: 2px 8px; border-radius: 4px; font-size: 0.7rem; } - -/* ── Share Dialog ── */ -.share-dialog-overlay { - position: fixed; - top: 0; left: 0; right: 0; bottom: 0; - background: rgba(0,0,0,0.5); - display: flex; - align-items: center; - justify-content: center; - z-index: 10000; -} -.share-dialog { - background: var(--bg-primary); - border-radius: 12px; - padding: 24px; - max-width: 480px; - width: 90%; - box-shadow: 0 8px 32px rgba(0,0,0,0.2); -} -.share-dialog h3 { margin: 0 0 4px; } -.share-url-input { - width: 100%; - padding: 8px 12px; - border: 1px solid var(--border); - border-radius: 6px; - font-size: 0.8rem; - background: var(--bg-secondary); - color: var(--text-primary); - box-sizing: border-box; -} -.share-dialog-actions { - display: flex; - gap: 8px; - margin-top: 12px; - justify-content: flex-end; -} -.share-copy-btn { - padding: 6px 16px; - background: var(--accent); - color: #fff; - border: none; - border-radius: 6px; - cursor: pointer; - font-size: 0.85rem; -} -.share-close-btn { - padding: 6px 16px; - background: var(--bg-secondary); - color: var(--text-primary); - border: 1px solid var(--border); - border-radius: 6px; - cursor: pointer; - font-size: 0.85rem; -} -.share-create-btn { - padding: 6px 16px; - background: var(--accent); - color: #fff; - border: none; - border-radius: 6px; - cursor: pointer; - font-size: 0.85rem; -} -.share-revoke-btn { - padding: 6px 16px; - background: none; - color: var(--text-error); - border: 1px solid var(--text-error); - border-radius: 6px; - cursor: pointer; - font-size: 0.85rem; -} - -/* ── Enhanced Search Bar Toggles ── */ -.search-actions .tog { - font-family: var(--font-mono, monospace); - font-size: 10px; - font-weight: 600; - padding: 2px 5px; - border-radius: 3px; - min-width: auto; - line-height: 1.4; -} -.search-actions .tog.active { - color: var(--accent); - border-color: var(--accent); - background: rgba(99, 102, 241, 0.12); -} -.search-actions .icon-only { - padding: 2px 4px; - min-width: auto; -} -.search-sep { - width: 1px; - height: 16px; - background: var(--border); - margin: 0 2px; - align-self: center; -} -.search-count { - font-size: 10px; - color: var(--text-muted); - font-family: var(--font-mono, monospace); - white-space: nowrap; - min-width: 28px; - text-align: center; -} -.search-filter-row, .search-replace-row { - display: flex; - gap: 6px; - align-items: center; - padding: 4px 0 0 0; -} -.search-filter-input { - flex: 1; - background: var(--bg-secondary); - border: 1px solid var(--border); - border-radius: 4px; - color: var(--text-primary); - font-family: var(--font-mono, monospace); - font-size: 11px; - padding: 4px 8px; - outline: none; -} -.search-filter-input:focus { border-color: var(--accent); } -.search-filter-input::placeholder { color: var(--text-muted); } - -/* ── Floating Results Bar ── */ -.results-bar { - position: fixed; - bottom: 20px; - left: 50%; - transform: translateX(-50%); - display: flex; - align-items: center; - gap: 2px; - margin: 0 auto; - padding: 6px 10px; - background: var(--bg-secondary); - border: 1px solid var(--border-md, var(--border)); - border-radius: 10px; - box-shadow: 0 2px 16px rgba(0,0,0,0.35); - width: fit-content; - max-width: 95%; - z-index: 50; - backdrop-filter: blur(8px); -} -.results-bar-count { - font-size: 10px; - color: var(--text-muted); - font-family: var(--mono); - white-space: nowrap; - min-width: 28px; - text-align: center; - padding: 0 4px; -} -.results-bar-btn { - display: inline-flex; - align-items: center; - justify-content: center; - width: 24px; - height: 24px; - border: 1px solid transparent; - border-radius: 4px; - background: transparent; - color: var(--text-secondary); - cursor: pointer; - font-size: 12px; - transition: background 0.15s, color 0.15s, border-color 0.15s; -} -.results-bar-btn:hover { background: var(--bg-hover); color: var(--text-primary); } -.results-bar-btn.tog { - font-family: var(--mono); - font-size: 10px; - font-weight: 600; - width: auto; - padding: 2px 5px; -} -.results-bar-btn.tog.active { - color: var(--accent); - border-color: var(--accent); - background: rgba(99,102,241,0.12); -} -.results-bar-sep { - width: 1px; - height: 16px; - background: var(--border); - margin: 0 6px; - align-self: center; -} -.search-replace-btn { - padding: 4px 10px; - font-size: 11px; - border: 1px solid var(--border); - border-radius: 4px; - background: var(--bg-secondary); - color: var(--text-primary); - cursor: pointer; - white-space: nowrap; -} -.search-replace-btn:hover { background: var(--bg-hover); } -.search-replace-btn.destructive { border-color: var(--text-error); color: var(--text-error); } - -/* ── Active search result highlight ── */ -.btn-bookmark.active { - color: #059669; - border-color: #059669; - background: rgba(5, 150, 105, 0.08); -} -.btn-bookmark.active:hover { - background: rgba(5, 150, 105, 0.15); -} - -.btn-share.shared { - color: #059669; - border-color: #059669; - background: rgba(5, 150, 105, 0.08); -} -.btn-share.shared:hover { - background: rgba(5, 150, 105, 0.15); -} - -/* ── Shared Cards ── */ -.shared-card { - padding: 10px 14px; - background: var(--bg-card, var(--bg-secondary)); - border-radius: 6px; - border: 1px solid var(--border); - cursor: pointer; - transition: background 0.15s; - display: flex; - flex-direction: column; - gap: 6px; -} -.shared-card:hover { background: var(--bg-hover); } -.shared-card-header { - display: flex; - align-items: center; - gap: 8px; -} -.shared-card-title { font-weight: 500; font-size: 0.85rem; } -.shared-card-vault { - font-size: 0.65rem; - color: var(--accent); - background: var(--accent-bg, rgba(99,102,241,0.1)); - padding: 1px 6px; - border-radius: 3px; - margin-left: auto; -} -.shared-card-meta { - font-size: 0.7rem; - color: var(--text-muted); - display: flex; - gap: 12px; -} -.shared-card-actions { - display: flex; - gap: 6px; -} -.shared-card-actions button { - font-size: 0.7rem; - padding: 2px 8px; - border: 1px solid var(--border); - border-radius: 4px; - background: var(--bg-primary); - color: var(--text-primary); - cursor: pointer; -} -.shared-card-actions button:hover { background: var(--bg-hover); } - -/* ── Dashboard Tab Navigation ── */ -.dashboard-tabs { - display: flex; - gap: 2px; - margin-bottom: 16px; - border-bottom: 2px solid var(--border); -} -.dashboard-tab { - padding: 8px 16px; - border: none; - background: none; - color: var(--text-muted); - cursor: pointer; - font-size: 0.85rem; - font-weight: 500; - display: flex; - align-items: center; - gap: 6px; - border-bottom: 2px solid transparent; - margin-bottom: -2px; - transition: color 0.15s, border-color 0.15s; -} -.dashboard-tab:hover { color: var(--text-primary); } -.dashboard-tab.active { - color: var(--accent); - border-bottom-color: var(--accent); -} -.dashboard-panel { - display: none; -} -.dashboard-panel.active { - display: block; -} - -/* ═══════════════════════════════════════════════════════════════════ - Command Palette (Ctrl+P) - ═══════════════════════════════════════════════════════════════════ */ - -.command-palette-overlay { - position: fixed; - top: 0; left: 0; right: 0; bottom: 0; - background: 0 0; - z-index: 10000; - display: flex; - justify-content: center; - padding-top: 12vh; - pointer-events: none; - opacity: 0; - transition: opacity 0.1s ease, background 0.1s ease; -} - -.command-palette-overlay.active { - opacity: 1; - background: var(--overlay-bg); - pointer-events: auto; -} - -.command-palette { - background: var(--bg-secondary); - border: 1px solid var(--border); - border-radius: 10px; - box-shadow: 0 8px 40px rgba(0,0,0,0.45), 0 0 0 1px rgba(255,255,255,0.03); - width: 580px; - max-width: calc(100vw - 40px); - max-height: 60vh; - display: flex; - flex-direction: column; - overflow: hidden; - animation: cp-slide-in 0.12s ease-out; -} - -@keyframes cp-slide-in { - from { transform: translateY(-12px); opacity: 0; } - to { transform: translateY(0); opacity: 1; } -} - -.cp-header { - display: flex; - align-items: center; - border-bottom: 1px solid var(--border); - padding: 0 14px; -} - -.cp-input { - flex: 1; - border: none; - background: none; - padding: 14px 0; - font-size: 16px; - color: var(--text-primary); - outline: none; - font-family: inherit; -} - -.cp-input::placeholder { - color: var(--text-muted); -} - -.cp-hint { - font-size: 11px; - color: var(--text-muted); - background: var(--bg-hover); - padding: 3px 8px; - border-radius: 4px; - font-family: "JetBrains Mono", monospace; - opacity: 0.7; -} - -.cp-results { - flex: 1; - overflow-y: auto; - padding: 6px 0; - max-height: 40vh; -} - -.cp-empty { - padding: 24px 16px; - text-align: center; - color: var(--text-muted); - font-size: 13px; -} - -.cp-error { - color: var(--accent-orange, #d29922); -} - -.cp-item { - display: flex; - justify-content: space-between; - align-items: center; - padding: 8px 14px; - cursor: pointer; - border-left: 3px solid transparent; -} - -.cp-item:hover { - background: var(--bg-hover); - border-left-color: var(--accent); -} - -.cp-item.cp-selected { - background: var(--accent-bg); - border-left-color: var(--accent); -} - -.cp-item-label { - font-size: 14px; - color: var(--text-primary); - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.cp-item-sublabel { - font-size: 11px; - color: var(--text-muted); - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - max-width: 45%; - text-align: right; - margin-left: 12px; -} - -.cp-footer { - display: flex; - gap: 14px; - padding: 8px 14px; - border-top: 1px solid var(--border); - font-size: 11px; - color: var(--text-muted); -} - -.cp-footer span { - display: flex; - align-items: center; - gap: 4px; -} - -.cp-footer span::before { - content: ''; - display: inline-block; - width: 3px; height: 3px; - background: var(--text-muted); - border-radius: 50%; - margin-right: 4px; -} - -.cp-footer span:first-child::before { display: none; } - -/* ── Breadcrumb ── */ -.cp-breadcrumb { - display: none; - align-items: center; - gap: 2px; - padding: 8px 14px; - font-size: 12px; - color: var(--text-secondary); - background: var(--bg-primary); - border-bottom: 1px solid var(--border); - overflow-x: auto; - white-space: nowrap; - scrollbar-width: none; -} -.cp-breadcrumb::-webkit-scrollbar { display: none; } -.cp-bc-root { font-weight: 600; color: var(--accent); } -.cp-bc-sep { color: var(--text-muted); padding: 0 2px; } -.cp-bc-item { cursor: pointer; padding: 1px 4px; border-radius: 3px; } -.cp-bc-item:hover { background: var(--bg-hover); } - -/* ── Name input ── */ -.cp-name-input { - display: flex; - flex-direction: column; - padding: 8px 14px; - border-bottom: 1px solid var(--border); - background: var(--bg-primary); -} -.cp-name-field { - width: 100%; - border: 1px solid var(--border); - background: var(--bg-secondary); - color: var(--text-primary); - padding: 10px 12px; - border-radius: 6px; - font-size: 14px; - font-family: inherit; - outline: none; - transition: border-color 0.15s; -} -.cp-name-field:focus { border-color: var(--accent); } -.cp-name-hint { - font-size: 11px; - color: var(--text-muted); - margin-top: 6px; -} - -/* Browse filter in command palette */ -.cp-browse-filter { - width: calc(100% - 24px); - margin: 8px 12px 4px; - padding: 7px 10px; - border: 1px solid var(--border); - border-radius: 6px; - background: var(--bg-primary); - color: var(--text-primary); - font-size: 0.8rem; - font-family: inherit; - outline: none; - transition: border-color 0.15s; -} -.cp-browse-filter:focus { border-color: var(--accent); } -.cp-browse-filter::placeholder { color: var(--text-muted); } - -/* ── Help Modal: Mobile responsive ── */ -@media (max-width: 768px) { - .help-container, - .editor-container.help-container { - max-width: 100vw; - width: 100vw; - height: 100vh; - max-height: 100vh; - border-radius: 0; - box-sizing: border-box; - } - - .help-hamburger { - display: inline-flex; - } - - /* TOC: collapsible block at top (not slide-over) */ - .help-nav { - position: static; - width: 100%; - min-width: 0; - max-width: 100%; - max-height: none; - height: auto; - z-index: auto; - transform: none; - transition: none; - border-right: none; - border-bottom: 1px solid var(--border); - box-shadow: none; - flex-shrink: 0; - display: none; - box-sizing: border-box; - } - .help-nav-header { - padding: 10px 16px 6px; - } - - /* Content full-width */ - .help-body { - flex-direction: column; - overflow-y: auto; - overflow-x: hidden; - padding: 0; - width: 100%; - box-sizing: border-box; - } - .help-content { - padding: 14px 14px 40px; - flex: 1; - overflow-y: auto; - overflow-x: hidden; - -webkit-overflow-scrolling: touch; - word-break: break-word; - width: 100%; - max-width: 100%; - box-sizing: border-box; - } - .help-content pre, .help-content code, .help-content table { - max-width: 100%; - overflow-x: auto; - } - .help-content:focus { outline: none; } - .help-hero { - flex-direction: column; - gap: 16px; - min-width: 0; - width: 100%; - box-sizing: border-box; - padding: 20px 16px; - } - .help-hero-copy { - min-width: 0; - width: 100%; - } - .help-badges { - flex-wrap: wrap; - gap: 6px; - } - .help-badge { - white-space: normal; - } - .help-hero-visual { display: none; } - .help-section { - padding: 20px 0 16px; - min-width: 0; - width: 100%; - box-sizing: border-box; - } - .help-nav-link { - padding: 10px 12px; - font-size: 0.88rem; - } -} - -/* ══════════════════════════════════════════ - Mobile Bottom Toolbar (Obsidian-style) - ══════════════════════════════════════════ */ -.mobile-toolbar { - display: none; -} -.vault-context-bar { - display: none; -} - -@media (max-width: 768px) { - .mobile-toolbar { - display: flex; - position: fixed; - bottom: 0; - left: 0; - right: 0; - height: 56px; - background: var(--bg-secondary); - border-top: 1px solid var(--border); - z-index: 900; - align-items: center; - justify-content: space-around; - padding: 0 4px; - padding-bottom: env(safe-area-inset-bottom, 0); - -webkit-backdrop-filter: blur(12px); - backdrop-filter: blur(12px); - } - - /* Push content up to avoid toolbar overlap */ - .main-layout { - padding-bottom: 56px; - padding-bottom: calc(56px + env(safe-area-inset-bottom, 0)); - } - .editor-modal.active ~ .main-layout { - padding-bottom: 0; - } - - /* Enable pull-to-refresh on mobile β€” unblock the overscroll chain */ - html { - overscroll-behavior-y: auto; - } - body { - overflow-y: auto; - overscroll-behavior-y: auto; - height: 100vh; - height: 100dvh; - } - .app-container { - overflow-y: visible; - } - .main-layout { - overflow-y: visible; - } - .content-wrapper { - overflow: visible; - } - .content-area { - overscroll-behavior-y: auto; - } - - /* Hide desktop tab bar on mobile (bottom toolbar has its own tab button) */ - .tab-bar { - display: none !important; - } - - /* Vault context indicator β€” hidden (now in header) */ - .vault-context-bar { - display: none !important; - } - .vault-context-pill { - display: none; - } - - .mt-btn { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - gap: 2px; - flex: 1; - height: 48px; - padding: 2px 4px; - border: none; - border-radius: 8px; - background: transparent; - color: var(--text-muted); - cursor: pointer; - transition: color 0.15s, background 0.15s; - position: relative; - -webkit-tap-highlight-color: transparent; - } - .mt-btn:active { - background: rgba(255,255,255,0.06); - } - .mt-btn svg { - flex-shrink: 0; - } - .mt-label { - font-size: 10px; - font-weight: 500; - line-height: 1; - } - .mt-btn-primary { - color: var(--accent); - } - .mt-btn-primary .mt-label { - color: var(--accent); - } - - /* Tab count badge */ - .mt-badge { - position: absolute; - top: 2px; - right: 50%; - transform: translateX(18px); - background: var(--accent); - color: #fff; - font-size: 9px; - font-weight: 700; - min-width: 16px; - height: 16px; - border-radius: 8px; - display: flex; - align-items: center; - justify-content: center; - padding: 0 4px; - line-height: 1; - } - - /* ── Tab Switcher Bottom Sheet ── */ - .mt-overlay { - display: none; - position: fixed; - inset: 0; - background: rgba(0,0,0,0.5); - z-index: 950; - opacity: 0; - transition: opacity 0.25s; - } - .mt-overlay.visible { - display: block; - opacity: 1; - } - - .mt-tab-switcher { - position: fixed; - bottom: 0; - left: 0; - right: 0; - max-height: 60vh; - background: var(--bg-secondary); - border-radius: 16px 16px 0 0; - z-index: 960; - transform: translateY(100%); - transition: transform 0.3s cubic-bezier(0.32, 0.72, 0, 1); - display: flex; - flex-direction: column; - box-shadow: 0 -4px 24px rgba(0,0,0,0.4); - padding-bottom: env(safe-area-inset-bottom, 0); - } - .mt-tab-switcher.open { - transform: translateY(0); - } - - .mt-sheet-handle { - width: 36px; - height: 4px; - background: var(--border); - border-radius: 2px; - margin: 10px auto 6px; - flex-shrink: 0; - } - - .mt-sheet-header { - display: flex; - align-items: center; - justify-content: space-between; - padding: 8px 16px 12px; - flex-shrink: 0; - } - .mt-sheet-title { - font-family: "JetBrains Mono", monospace; - font-size: 0.8rem; - font-weight: 700; - text-transform: uppercase; - letter-spacing: 0.05em; - color: var(--text-muted); - } - .mt-sheet-close { - width: 28px; height: 28px; - padding: 0; - border: 1px solid var(--border); - border-radius: 6px; - background: transparent; - color: var(--text-secondary); - cursor: pointer; - font-size: 12px; - display: flex; - align-items: center; - justify-content: center; - } - .mt-sheet-close:hover { color: var(--accent); border-color: var(--accent); } - .mt-sheet-actions { - display: flex; - align-items: center; - gap: 8px; - } - .mt-sheet-close-all { - padding: 5px 10px; - border: 1px solid var(--danger, #ef4444); - border-radius: 6px; - background: transparent; - color: var(--danger, #ef4444); - cursor: pointer; - font-size: 0.7rem; - font-weight: 600; - transition: background 0.15s; - } - .mt-sheet-close-all:hover { - background: rgba(239,68,68,0.1); - } - - .mt-sheet-list { - flex: 1; - overflow-y: auto; - padding: 0 12px 12px; - -webkit-overflow-scrolling: touch; - } - - .mt-tab-item { - display: flex; - align-items: center; - gap: 10px; - padding: 10px 12px; - border-radius: 8px; - cursor: pointer; - color: var(--text-primary); - font-size: 0.85rem; - transition: background 0.1s; - margin-bottom: 2px; - } - .mt-tab-item:active { - background: rgba(255,255,255,0.06); - } - .mt-tab-item.active { - background: color-mix(in srgb, var(--accent) 12%, transparent); - color: var(--accent); - font-weight: 600; - } - .mt-tab-item-icon { - flex-shrink: 0; - opacity: 0.6; - } - .mt-tab-item-name { - flex: 1; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - .mt-tab-item-close { - width: 24px; height: 24px; - padding: 0; - border: none; - border-radius: 4px; - background: transparent; - color: var(--text-muted); - cursor: pointer; - font-size: 14px; - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; - } - .mt-tab-item-close:hover { - color: var(--danger, #ef4444); - background: rgba(239,68,68,0.1); - } -} - -/* ========================================================================== - Backup / Diff Viewer Modal - ========================================================================== */ - -.backup-viewer-panel { - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - width: min(90vw, 960px); - height: min(85vh, 700px); - background: var(--bg-primary, #1e1e2e); - border: 1px solid var(--border); - border-radius: 12px; - box-shadow: 0 25px 60px rgba(0,0,0,0.5); - display: flex; - flex-direction: column; - overflow: hidden; - z-index: 1001; -} - -.backup-header { - display: flex; - align-items: center; - justify-content: space-between; - padding: 14px 18px; - border-bottom: 1px solid var(--border); - background: var(--bg-secondary); - flex-shrink: 0; -} - -.backup-header-left { - display: flex; - align-items: baseline; - gap: 10px; - min-width: 0; -} - -.backup-header h3 { - margin: 0; - font-size: 1rem; - font-weight: 600; - color: var(--text-primary); -} - -.backup-file-path { - font-size: 0.78rem; - color: var(--text-muted); - font-family: var(--font-mono, 'SF Mono', 'Fira Code', monospace); - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.backup-header-right { - display: flex; - align-items: center; - gap: 12px; - flex-shrink: 0; -} - -.backup-count { - font-size: 0.75rem; - color: var(--text-muted); - background: var(--bg-tertiary); - padding: 3px 8px; - border-radius: 4px; -} - -.backup-close-btn { - width: 36px; - height: 36px; - padding: 0; - border: 1px solid var(--border); - border-radius: 6px; - background: var(--bg-primary); - color: var(--text-secondary); - cursor: pointer; - transition: all 150ms ease; - display: inline-flex; - align-items: center; - justify-content: center; - flex: 0 0 auto; - box-shadow: 0 2px 8px rgba(0,0,0,0.15); -} - -.backup-close-btn:hover { - color: var(--accent); - border-color: var(--accent); -} - -.backup-toolbar { - display: flex; - align-items: center; - gap: 10px; - padding: 10px 18px; - border-bottom: 1px solid var(--border); - background: var(--bg-primary); - flex-shrink: 0; -} - -.backup-selector-group { - display: flex; - align-items: center; - gap: 6px; -} - -.backup-selector-group label { - font-size: 0.78rem; - color: var(--text-muted); - white-space: nowrap; -} - -.backup-select { - padding: 6px 10px; - border: 1px solid var(--border); - border-radius: 6px; - background: var(--bg-secondary); - color: var(--text-primary); - font-size: 0.8rem; - font-family: var(--font-mono); - max-width: 240px; - cursor: pointer; -} - -.backup-select:focus { - outline: none; - border-color: var(--accent); -} - -.backup-vs-label { - font-size: 0.75rem; - color: var(--text-muted); - font-weight: 600; - user-select: none; -} - -.backup-restore-btn { - margin-left: auto; - padding: 6px 14px; - border: 1px solid var(--accent); - border-radius: 6px; - background: color-mix(in srgb, var(--accent) 10%, transparent); - color: var(--accent); - font-size: 0.8rem; - font-weight: 500; - cursor: pointer; - display: flex; - align-items: center; - gap: 5px; - transition: background 0.15s, opacity 0.15s; - white-space: nowrap; -} - -.backup-restore-btn:hover { - background: color-mix(in srgb, var(--accent) 20%, transparent); -} - -.backup-restore-btn:disabled { - opacity: 0.5; - cursor: not-allowed; -} - -.backup-restore-btn .icon-sm { - width: 14px; - height: 14px; -} - -.backup-diff-container { - flex: 1; - overflow-y: auto; - background: var(--bg-primary); -} - -.backup-diff-loading, -.backup-diff-error, -.backup-diff-empty { - display: flex; - align-items: center; - justify-content: center; - height: 100%; - color: var(--text-muted); - font-size: 0.85rem; -} - -.backup-diff-error { - color: var(--danger, #ef4444); -} - -.backup-diff-output { - padding: 0; -} - -.backup-diff-table { - width: 100%; - border-collapse: collapse; - font-family: var(--font-mono, 'SF Mono', 'Fira Code', 'Cascadia Code', monospace); - font-size: 0.8rem; - line-height: 1.55; - table-layout: fixed; -} - -.backup-diff-table td { - padding: 0; -} - -.backup-diff-table td.diff-prefix { - width: 22px; - text-align: center; - user-select: none; - font-weight: 600; - padding: 1px 0; - vertical-align: top; -} - -.backup-diff-table td.diff-content { - padding: 1px 8px; - vertical-align: top; -} - -.backup-diff-table td.diff-content pre { - margin: 0; - white-space: pre-wrap; - word-break: break-all; - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - -.backup-diff-table tr.diff-add td { - background: rgba(34, 197, 94, 0.12); -} - -.backup-diff-table tr.diff-add td.diff-prefix { - color: #22c55e; -} - -.backup-diff-table tr.diff-del td { - background: rgba(239, 68, 68, 0.12); -} - -.backup-diff-table tr.diff-del td.diff-prefix { - color: #ef4444; -} - -.backup-diff-table tr.diff-hunk td { - background: color-mix(in srgb, var(--accent) 8%, transparent); - color: var(--accent); - font-weight: 600; -} - -.backup-diff-table tr.diff-header-line td { - background: var(--bg-secondary); - color: var(--text-muted); - font-weight: 600; -} - -.backup-diff-table tr.diff-context td { - color: var(--text-secondary); -} - -.backup-body { - flex: 1; - display: flex; - flex-direction: column; - overflow: auto; -} - -.backup-footer { - padding: 6px 18px; - border-top: 1px solid var(--border); - background: var(--bg-secondary); - flex-shrink: 0; -} - -.backup-footer-hint { - font-size: 0.7rem; - color: var(--text-muted); -} - -/* ── Side-by-side diff view ── */ -.backup-diff-sidebyside .sidebyside { - table-layout: fixed; -} - -.backup-diff-sidebyside td.sidebyside-left { - border-right: 1px solid var(--border); -} - -.backup-diff-sidebyside td.sidebyside-right { - border-left: 1px solid var(--border); -} - -.backup-diff-sidebyside td.diff-empty-cell { - background: var(--bg-tertiary); -} - -.backup-diff-mode-btn { - padding: 6px 10px; - border: 1px solid var(--border); - border-radius: 6px; - background: transparent; - color: var(--text-secondary); - cursor: pointer; - display: inline-flex; - align-items: center; - gap: 4px; - font-size: 0.8rem; - transition: all 150ms ease; -} - -.backup-diff-mode-btn:hover { - color: var(--accent); - border-color: var(--accent); -} - -.backup-diff-mode-btn .icon-sm { - width: 14px; - height: 14px; -} - -/* ── Backup Manager ── */ -.backup-manager { - padding: 16px 24px; - max-width: 1000px; - margin: 0 auto; -} - -.backup-manager-header { - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 12px; - gap: 12px; -} - -.backup-manager-header h2 { - margin: 0; - font-size: 1.1rem; - display: flex; - align-items: center; - gap: 8px; -} - -.backup-manager-actions { - display: flex; - gap: 6px; -} - -.backup-manager-filter { - padding: 6px 10px; - border: 1px solid var(--border); - border-radius: 6px; - background: var(--bg-primary); - color: var(--text-primary); - font-size: 0.8rem; - min-width: 200px; -} - -.backup-manager-btn { - width: 32px; height: 32px; - border: 1px solid var(--border); - border-radius: 6px; - background: transparent; - color: var(--text-secondary); - cursor: pointer; - display: inline-flex; - align-items: center; - justify-content: center; -} - -.backup-manager-btn:hover { color: var(--accent); border-color: var(--accent); } - -.backup-manager-stats { display: flex; gap: 16px; margin-bottom: 14px; } -.bm-stat { font-size: 0.8rem; color: var(--text-muted); } - -.bm-vault-group { margin-bottom: 16px; } -.bm-vault-name { - font-size: 0.85rem; font-weight: 600; margin: 0 0 6px 0; - display: flex; align-items: center; gap: 6px; -} - -.bm-file-group { - border: 1px solid var(--border); border-radius: 6px; - margin-bottom: 8px; overflow: hidden; -} - -.bm-file-header { - display: flex; align-items: center; gap: 12px; - padding: 8px 12px; background: var(--bg-secondary); - border-bottom: 1px solid var(--border); -} - -.bm-file-name { font-size: 0.8rem; font-weight: 500; display: flex; align-items: center; gap: 4px; } -.bm-file-meta { font-size: 0.7rem; color: var(--text-muted); flex: 1; } - -.bm-file-purge { - width: 28px; height: 28px; border: 1px solid var(--border); border-radius: 4px; - background: transparent; color: var(--text-muted); cursor: pointer; - display: flex; align-items: center; justify-content: center; -} -.bm-file-purge:hover { color: var(--danger); border-color: var(--danger); } - -.bm-backup-list { padding: 2px 0; } - -.bm-backup-item { - display: flex; align-items: center; gap: 12px; - padding: 4px 12px; font-size: 0.75rem; -} -.bm-backup-item:hover { background: var(--bg-secondary); } - -.bm-backup-date { color: var(--text-secondary); min-width: 130px; font-family: var(--font-mono); } -.bm-backup-size { color: var(--text-muted); flex: 1; } - -.bm-backup-delete { - width: 22px; height: 22px; border: none; border-radius: 4px; - background: transparent; color: var(--text-muted); cursor: pointer; - display: flex; align-items: center; justify-content: center; - opacity: 0; -} -.bm-backup-item:hover .bm-backup-delete { opacity: 1; } -.bm-backup-delete:hover { color: var(--danger); background: rgba(239,68,68,0.1); } - -.backup-footer-manage-btn { - background: none; border: 1px solid var(--border); - border-radius: 4px; color: var(--accent); - font-size: 0.7rem; cursor: pointer; padding: 3px 10px; - transition: all 150ms ease; -} -.backup-footer-manage-btn:hover { background: color-mix(in srgb, var(--accent) 10%, transparent); } - -.backup-manager-empty, -.backup-manager-error { - text-align: center; padding: 2rem; color: var(--text-muted); font-size: 0.85rem; -} -.backup-manager-error { color: var(--danger); } - -/* ========================================================================== - Mermaid.js Diagrams - ========================================================================== */ - -.mermaid-container { - margin: 12px 0; - border: 1px solid var(--border); - border-radius: 8px; - overflow: hidden; - background: var(--bg-secondary); -} - -/* ── Header bar ── */ -.mermaid-header { - display: flex; align-items: center; justify-content: space-between; - padding: 6px 10px; - background: var(--bg-hover); - border-bottom: 1px solid var(--border); - min-height: 34px; -} -.mermaid-diagram-type { - font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace; - font-size: 0.75rem; font-weight: 600; - color: var(--text-secondary); -} -.mermaid-header-actions { - display: flex; align-items: center; gap: 2px; -} - -/* ── Buttons ── */ -.mermaid-btn { - width: 28px; height: 28px; - border: 1px solid transparent; border-radius: 4px; - background: transparent; color: var(--text-secondary); +.about-close { + position: absolute; top: 12px; right: 14px; + background: var(--bg-hover); border: none; color: var(--text-secondary); + width: 30px; height: 30px; border-radius: 8px; font-size: 18px; cursor: pointer; display: flex; align-items: center; justify-content: center; - transition: background 0.12s, color 0.12s; + transition: background 0.15s, color 0.15s; z-index: 1; } -.mermaid-btn:hover { background: var(--bg-primary); color: var(--accent); border-color: var(--border); } - -/* ── Code / Preview toggle ── */ -.mermaid-toggle { - display: flex; margin-left: 8px; - border: 1px solid var(--border); border-radius: 5px; - overflow: hidden; +.about-close:hover { background: var(--danger-bg); color: var(--danger); } +.about-hero { + text-align: center; padding: 36px 24px 28px; + background: linear-gradient(160deg, var(--accent-bg) 0%, transparent 60%); + border-bottom: 1px solid var(--border); } -.mermaid-toggle-btn { - padding: 2px 10px; font-size: 0.7rem; font-weight: 500; - border: none; background: transparent; - color: var(--text-muted, #999); cursor: pointer; - transition: background 0.12s, color 0.12s; +.about-logo { margin-bottom: 14px; display: inline-block; } +.about-title { + font-size: 1.6rem; font-weight: 700; color: var(--text-primary); + letter-spacing: -0.5px; margin-bottom: 6px; } -.mermaid-toggle-btn.active { - background: var(--bg-primary); color: var(--text-primary); - box-shadow: 0 0 0 1px var(--border); +.about-tagline { + font-size: 0.85rem; color: var(--text-secondary); line-height: 1.5; + margin-bottom: 10px; } -.mermaid-toggle-btn:first-child { border-right: 1px solid var(--border); } - -/* ── Body ── */ -.mermaid-body { - position: relative; +.about-version { + display: inline-block; padding: 3px 12px; + background: var(--accent); color: #fff; + font-size: 0.7rem; font-weight: 600; font-family: var(--mono); + border-radius: 20px; letter-spacing: 0.5px; } -.mermaid-rendered { - padding: 16px; - overflow: hidden; - min-height: 80px; - display: flex; - justify-content: center; +.about-body { padding: 20px 24px 24px; } +.about-stats { + display: flex; gap: 0; justify-content: center; + margin-bottom: 20px; } -.mermaid-rendered svg { max-width: 100%; height: auto; } - -.mermaid-source { padding: 16px; overflow: auto; } -.mermaid-source pre { - margin: 0; padding: 12px; - background: var(--code-bg); - border-radius: 4px; - font-size: 0.78rem; line-height: 1.5; - color: var(--text-primary); +.about-stat { + flex: 1; text-align: center; padding: 12px 8px; + border-right: 1px solid var(--border); } - -/* ── Error ── */ -.mermaid-error { - margin: 12px 0; padding: 12px 16px; - border: 1px solid rgba(239,68,68,0.3); border-radius: 6px; - background: rgba(239,68,68,0.08); color: var(--danger); - font-size: 0.8rem; line-height: 1.5; +.about-stat:last-child { border-right: none; } +.about-stat-value { + display: block; font-size: 1.5rem; font-weight: 700; + color: var(--accent); font-family: var(--mono); } -.mermaid-error strong { display: block; margin-bottom: 4px; } - -/* ── Fullscreen ── */ -.mermaid-fullscreen-overlay { - position: fixed; top: 0; left: 0; right: 0; bottom: 0; - z-index: 10000; - display: flex; flex-direction: column; +.about-stat-label { + font-size: 0.65rem; color: var(--text-muted); + text-transform: uppercase; letter-spacing: 0.6px; margin-top: 2px; } -/* Light theme β€” clean white like the example */ -[data-theme="light"] .mermaid-fullscreen-overlay { - background: rgba(255,255,255,0.97); +.about-stack { margin-bottom: 18px; } +.about-stack h3 { + font-size: 0.7rem; color: var(--text-muted); text-transform: uppercase; + letter-spacing: 0.8px; margin-bottom: 10px; } -[data-theme="light"] .mermaid-fullscreen-header { - background: rgba(0,0,0,0.03); - border-bottom: 1px solid rgba(0,0,0,0.08); +.about-stack-grid { + display: flex; flex-wrap: wrap; gap: 6px; } -[data-theme="light"] .mermaid-fullscreen-header .mermaid-diagram-type { - color: rgba(0,0,0,0.5); +.about-stack-badge { + padding: 3px 10px; font-size: 0.68rem; + background: var(--bg-hover); color: var(--text-secondary); + border: 1px solid var(--border); border-radius: 6px; + font-family: var(--mono); } -[data-theme="light"] .mermaid-fullscreen-header .mermaid-btn { - color: rgba(0,0,0,0.4); +.about-footer { border-top: 1px solid var(--border); padding-top: 14px; } +.about-meta { + display: flex; gap: 16px; font-size: 0.7rem; color: var(--text-muted); + margin-bottom: 10px; flex-wrap: wrap; } -[data-theme="light"] .mermaid-fullscreen-header .mermaid-btn:hover { - background: rgba(0,0,0,0.05); - color: rgba(0,0,0,0.8); +.about-meta strong { color: var(--text-secondary); font-family: var(--mono); font-size: 0.68rem; } +.about-joke { + font-size: 0.7rem; color: var(--text-muted); font-style: italic; + margin-bottom: 8px; opacity: 0.7; } - -/* Dark theme */ -[data-theme="dark"] .mermaid-fullscreen-overlay { - background: rgba(18,18,24,0.97); -} -[data-theme="dark"] .mermaid-fullscreen-header { - background: rgba(255,255,255,0.06); - border-bottom: 1px solid rgba(255,255,255,0.08); -} -[data-theme="dark"] .mermaid-fullscreen-header .mermaid-diagram-type { - color: rgba(255,255,255,0.7); -} -[data-theme="dark"] .mermaid-fullscreen-header .mermaid-btn { - color: rgba(255,255,255,0.6); -} -[data-theme="dark"] .mermaid-fullscreen-header .mermaid-btn:hover { - background: rgba(255,255,255,0.1); - color: #fff; -} - -.mermaid-fullscreen-header { - display: flex; align-items: center; justify-content: space-between; - padding: 10px 16px; - min-height: 46px; - flex-shrink: 0; -} -.mermaid-fullscreen-content { - flex: 1; - display: flex; align-items: center; justify-content: center; - padding: 16px; - overflow: hidden; -} -.mermaid-fullscreen-content svg { - width: 100%; height: 100%; - max-width: 100%; max-height: 100%; -} - -/* ── Dark mode overrides for beta diagrams that ignore themeVariables ── */ - -/* packet-beta */ -[data-theme="dark"] .mermaid-rendered svg .row rect, -[data-theme="dark"] .mermaid-rendered svg g[id*="packet"] rect { - fill: #1e3a5f !important; - stroke: #4a7ab5 !important; -} -[data-theme="dark"] .mermaid-rendered svg .row text, -[data-theme="dark"] .mermaid-rendered svg g[id*="packet"] text { - fill: #c8daf0 !important; -} -[data-theme="dark"] .mermaid-fullscreen-content svg .row rect, -[data-theme="dark"] .mermaid-fullscreen-content svg g[id*="packet"] rect { - fill: #1e3a5f !important; - stroke: #4a7ab5 !important; -} -[data-theme="dark"] .mermaid-fullscreen-content svg .row text, -[data-theme="dark"] .mermaid-fullscreen-content svg g[id*="packet"] text { - fill: #c8daf0 !important; -} - -/* xychart-beta β€” bar fills and line color */ -[data-theme="dark"] .mermaid-rendered svg rect[class*="plot"], -[data-theme="dark"] .mermaid-rendered svg rect[id*="bar"] { - fill: #1e3a5f !important; - stroke: #4a7ab5 !important; -} -[data-theme="dark"] .mermaid-rendered svg path[class*="plot"], -[data-theme="dark"] .mermaid-rendered svg path[id*="line"] { - stroke: #6a9ad0 !important; -} -[data-theme="dark"] .mermaid-fullscreen-content svg rect[class*="plot"], -[data-theme="dark"] .mermaid-fullscreen-content svg rect[id*="bar"] { - fill: #1e3a5f !important; - stroke: #4a7ab5 !important; -} -[data-theme="dark"] .mermaid-fullscreen-content svg path[class*="plot"], -[data-theme="dark"] .mermaid-fullscreen-content svg path[id*="line"] { - stroke: #6a9ad0 !important; -} - -.mermaid-focus-panel { - position: fixed; top: 0; right: 0; bottom: 0; width: 480px; - z-index: 9998; background: var(--bg-secondary); - border-left: 1px solid var(--border); - box-shadow: -4px 0 24px rgba(0,0,0,0.3); - display: flex; flex-direction: column; -} -.mermaid-focus-header { - display: flex; align-items: center; justify-content: space-between; - padding: 10px 14px; border-bottom: 1px solid var(--border); - font-size: 0.85rem; font-weight: 600; -} -.mermaid-focus-close { - width: 28px; height: 28px; border: 1px solid var(--border); border-radius: 4px; - background: transparent; color: var(--text-muted); cursor: pointer; - display: flex; align-items: center; justify-content: center; -} -.mermaid-focus-close:hover { color: var(--accent); } -.mermaid-focus-content { flex: 1; overflow: auto; padding: 16px; } - -/* Mermaid editor live preview panel */ -.mermaid-live-preview { - border-top: 1px solid var(--border); - background: var(--bg-secondary); - min-height: 100px; max-height: 300px; - overflow: auto; padding: 12px; -} -.mermaid-live-preview .mermaid-error { margin: 0; } - -/* Manager body: list + preview side panel */ -.backup-manager-body { display: flex; gap: 0; min-height: 400px; } - -.backup-manager-list { flex: 1; min-width: 0; } - -.backup-manager-preview { - width: 400px; flex-shrink: 0; - border-left: 1px solid var(--border); - background: var(--bg-primary); - display: flex; flex-direction: column; -} -.bm-preview-header { - display: flex; align-items: center; justify-content: space-between; - padding: 10px 14px; border-bottom: 1px solid var(--border); -} -.bm-preview-header h3 { margin: 0; font-size: 0.85rem; } -.bm-preview-content { - flex: 1; overflow: auto; padding: 12px 14px; - font-family: var(--font-mono); font-size: 0.75rem; line-height: 1.55; - white-space: pre-wrap; word-break: break-all; - color: var(--text-secondary); margin: 0; -} - -/* Vault header with purge button */ -.bm-vault-header { - display: flex; align-items: center; gap: 12px; - padding: 8px 0; border-bottom: 1px solid var(--border); margin-bottom: 8px; -} -.bm-vault-meta { font-size: 0.7rem; color: var(--text-muted); flex: 1; } - -.bm-vault-purge { - padding: 3px 10px; border: 1px solid var(--border); border-radius: 4px; - background: transparent; color: var(--danger); cursor: pointer; - font-size: 0.7rem; display: flex; align-items: center; gap: 4px; - transition: all 150ms ease; -} -.bm-vault-purge:hover { background: rgba(239,68,68,0.08); border-color: var(--danger); } - -/* Backup item actions */ -.bm-backup-actions { display: flex; gap: 2px; opacity: 0; transition: opacity 0.12s; } -.bm-backup-item:hover .bm-backup-actions { opacity: 1; } - -.bm-backup-preview, -.bm-backup-restore { - width: 22px; height: 22px; border: none; border-radius: 4px; - background: transparent; color: var(--text-muted); cursor: pointer; - display: flex; align-items: center; justify-content: center; -} -.bm-backup-preview:hover { color: var(--accent); background: rgba(59,130,246,0.1); } -.bm-backup-restore:hover { color: #22c55e; background: rgba(34,197,94,0.1); } - -.bm-backup-item.active { - background: color-mix(in srgb, var(--accent) 10%, transparent); - border-radius: 4px; +.about-copy { + font-size: 0.65rem; color: var(--text-muted); opacity: 0.5; } +.about-copy code { font-family: var(--mono); font-size: 0.6rem; }