diff options
Diffstat (limited to 'src/renderer/src/App.css')
| -rw-r--r-- | src/renderer/src/App.css | 625 |
1 files changed, 528 insertions, 97 deletions
diff --git a/src/renderer/src/App.css b/src/renderer/src/App.css index 906bf36..6601e57 100644 --- a/src/renderer/src/App.css +++ b/src/renderer/src/App.css @@ -945,71 +945,290 @@ html, body, #root { flex-shrink: 0; } -.projects-container { +.projects-search { flex: 1; - max-width: 860px; + padding: 8px 12px; + border: 1px solid var(--border); + border-radius: var(--radius); + background: var(--bg-primary); + font-size: 13px; + color: var(--text-primary); + font-family: var(--font-sans); + outline: none; +} +.projects-search:focus { + border-color: var(--accent); +} + +.btn-sm { + padding: 6px 14px; + font-size: 12px; +} + +.projects-updated-by { + font-size: 10px; + color: var(--text-muted); +} + +/* ── Project Dashboard (Overleaf-style sidebar + table) ───────── */ + +.pl-layout { + flex: 1; + display: flex; + min-height: 0; + overflow: hidden; +} + +.pl-sidebar { + width: 220px; + flex-shrink: 0; + display: flex; + flex-direction: column; + padding: 0 12px 16px 16px; + border-right: 1px solid var(--border); + background: var(--bg-secondary); + overflow-y: auto; +} + +.pl-sidebar-brand h1 { + font-size: 20px; + font-weight: 700; + color: var(--accent); + font-family: "Georgia", "Times New Roman", serif; + margin: 0 0 14px 4px; +} + +.pl-new-project-wrap { + position: relative; + margin-bottom: 14px; +} +.pl-new-project-btn { + width: 100%; + padding: 8px 12px; + font-size: 13px; +} + +.pl-filters { + display: flex; + flex-direction: column; + gap: 1px; +} + +.pl-filter-item { + display: flex; + align-items: center; + gap: 6px; width: 100%; - margin: 0 auto; - padding: 0 32px 32px; + text-align: left; + padding: 6px 10px; + font-size: 12.5px; + color: var(--text-secondary); + background: none; + border: none; + border-radius: var(--radius); + cursor: pointer; + font-family: var(--font-sans); +} +.pl-filter-item:hover { + background: var(--bg-hover); + color: var(--text-primary); +} +.pl-filter-item.active { + background: var(--bg-active); + color: var(--text-primary); + font-weight: 600; +} + +.pl-sidebar-divider { + border: none; + border-top: 1px solid var(--border); + margin: 12px 4px; +} + +.pl-tags-section { + flex: 1; + min-height: 0; +} + +.pl-tags-header { + font-size: 10.5px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.6px; + color: var(--text-muted); + padding: 0 10px 6px; +} + +.pl-new-tag { + color: var(--text-muted); +} + +.pl-tag-row { + display: flex; + align-items: center; + border-radius: var(--radius); +} +.pl-tag-row:hover { + background: var(--bg-hover); +} +.pl-tag-row.active { + background: var(--bg-active); +} +.pl-tag-row.active .pl-tag-name { + font-weight: 600; +} + +.pl-tag-main { + flex: 1; + min-width: 0; + display: flex; + align-items: center; + gap: 7px; + padding: 6px 10px; + background: none; + border: none; + cursor: pointer; + font-family: var(--font-sans); + font-size: 12.5px; + color: var(--text-secondary); +} + +.pl-tag-dot { + width: 9px; + height: 9px; + border-radius: 50%; + flex-shrink: 0; +} + +.pl-tag-name { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: var(--text-primary); +} + +.pl-tag-count { + color: var(--text-muted); + font-size: 11px; + flex-shrink: 0; +} + +.pl-tag-kebab-wrap { + position: relative; + flex-shrink: 0; +} +.pl-tag-kebab { + opacity: 0; +} +.pl-tag-row:hover .pl-tag-kebab { + opacity: 1; +} + +.pl-uncategorized { + font-style: italic; + color: var(--text-muted); +} + +.pl-sidebar-footer { + display: flex; + gap: 6px; + padding-top: 12px; +} + +.pl-main { + flex: 1; + min-width: 0; + display: flex; + flex-direction: column; + padding: 0 24px 24px; overflow-y: auto; } -.projects-header { +.pl-main-header { display: flex; align-items: center; justify-content: space-between; - margin-bottom: 24px; + margin-bottom: 14px; + min-height: 34px; } -.projects-header h1 { - font-size: 22px; +.pl-title { + font-size: 19px; font-weight: 700; - color: var(--accent); - font-family: "Georgia", "Times New Roman", serif; + color: var(--text-primary); + margin: 0; } -.projects-header-actions { +.pl-header-actions { display: flex; - gap: 8px; + align-items: center; + gap: 6px; } -.projects-toolbar { +.pl-bulk-tools { display: flex; - gap: 8px; - margin-bottom: 16px; align-items: center; + gap: 6px; } -.projects-search { - flex: 1; - padding: 8px 12px; - border: 1px solid var(--border); +.pl-tags-dropdown-wrap { + position: relative; +} + +.pl-icon-btn { + display: inline-flex; + align-items: center; + justify-content: center; + width: 28px; + height: 28px; + padding: 0; + border: none; border-radius: var(--radius); - background: var(--bg-primary); - font-size: 13px; + background: none; + color: var(--text-secondary); + cursor: pointer; +} +.pl-icon-btn:hover { + background: var(--bg-hover); color: var(--text-primary); - font-family: var(--font-sans); - outline: none; } -.projects-search:focus { - border-color: var(--accent); +.pl-icon-btn-danger:hover { + color: #B3402F; } -.btn-sm { - padding: 6px 14px; - font-size: 12px; +.pl-search-row { + position: relative; + display: flex; + align-items: center; + margin-bottom: 14px; +} +.pl-search-icon { + position: absolute; + left: 10px; + display: flex; + color: var(--text-muted); + pointer-events: none; +} +.pl-search-input { + padding-left: 32px; + padding-right: 32px; +} +.pl-search-clear { + position: absolute; + right: 4px; } -.projects-list { +.pl-table { border: 1px solid var(--border); border-radius: var(--radius); - overflow: hidden; + overflow: visible; + background: var(--bg-primary); } -.projects-table-header { +.pl-table-header { display: flex; align-items: center; - padding: 8px 16px; + padding: 8px 12px; font-size: 11px; font-weight: 600; color: var(--text-muted); @@ -1017,86 +1236,308 @@ html, body, #root { letter-spacing: 0.5px; border-bottom: 1px solid var(--border); user-select: none; + gap: 10px; } -.projects-table-header span { +.pl-sortable { cursor: pointer; } -.projects-table-header span:hover { +.pl-sortable:hover { color: var(--text-primary); } -.projects-col-name { +.pl-col-check { + width: 22px; + flex-shrink: 0; + display: flex; + align-items: center; +} +.pl-col-check input { + accent-color: var(--accent); + cursor: pointer; +} + +.pl-col-name { flex: 1; min-width: 0; display: flex; align-items: center; gap: 8px; + flex-wrap: wrap; } -.projects-col-owner { - width: 140px; + +.pl-col-owner { + width: 130px; flex-shrink: 0; font-size: 12px; color: var(--text-muted); + display: flex; + align-items: center; + gap: 4px; } -.projects-col-updated { - width: 160px; + +.pl-col-updated { + width: 150px; flex-shrink: 0; font-size: 12px; - color: var(--text-muted); + color: var(--text-secondary); text-align: right; + justify-content: flex-end; +} + +.pl-col-actions { + width: 168px; + flex-shrink: 0; display: flex; - flex-direction: column; - align-items: flex-end; + align-items: center; + justify-content: flex-end; + gap: 2px; } -.projects-item { +.pl-row { display: flex; align-items: center; - padding: 10px 16px; - cursor: pointer; + gap: 10px; + padding: 8px 12px; border-bottom: 1px solid var(--border); transition: background 0.1s; } -.projects-item:last-child { +.pl-row:last-child { border-bottom: none; } -.projects-item:hover { +.pl-row:hover { background: var(--bg-secondary); } - -.projects-item .projects-col-name { - display: flex; - align-items: center; - gap: 8px; +.pl-row.selected { + background: var(--bg-tertiary); +} +.pl-row .pl-icon-btn { + opacity: 0; +} +.pl-row:hover .pl-icon-btn, +.pl-row.selected .pl-icon-btn { + opacity: 1; } -.projects-item-name { +.pl-project-link { + background: none; + border: none; + padding: 0; + font-family: var(--font-sans); font-size: 13px; font-weight: 500; color: var(--text-primary); + cursor: pointer; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; + max-width: 100%; + text-align: left; +} +.pl-project-link:hover { + color: var(--accent-blue); + text-decoration: underline; } -.projects-access-badge { - font-size: 10px; - padding: 1px 6px; - border-radius: 3px; - background: var(--bg-tertiary, #3a3730); +.pl-row-tags { + display: inline-flex; + align-items: center; + gap: 4px; + flex-wrap: wrap; +} + +.pl-chip { + display: inline-flex; + align-items: center; + gap: 4px; + padding: 1px 4px 1px 6px; + border-radius: 10px; + background: var(--bg-tertiary); + font-size: 11px; + line-height: 16px; +} +.pl-chip-name { + background: none; + border: none; + padding: 0; + font-size: 11px; + color: var(--text-secondary); + cursor: pointer; + font-family: var(--font-sans); +} +.pl-chip-name:hover { + color: var(--text-primary); +} +.pl-chip-x { + display: inline-flex; + align-items: center; + background: none; + border: none; + padding: 1px; color: var(--text-muted); + cursor: pointer; + border-radius: 50%; +} +.pl-chip-x:hover { + color: var(--text-primary); + background: var(--bg-hover); +} + +.pl-link-icon { + display: inline-flex; + color: var(--text-muted); +} + +.pl-load-more { + display: flex; + align-items: center; + gap: 12px; + margin-top: 14px; + justify-content: center; +} +.pl-load-more-info { + font-size: 12px; + color: var(--text-muted); +} +.pl-link-btn { + background: none; + border: none; + padding: 0; + font-size: 12px; + color: var(--accent-blue); + cursor: pointer; + text-decoration: underline; + font-family: var(--font-sans); +} + +.pl-dropdown { + position: absolute; + top: calc(100% + 4px); + left: 0; + min-width: 180px; + background: var(--bg-primary); + border: 1px solid var(--border); + border-radius: var(--radius); + box-shadow: 0 4px 16px rgba(59, 50, 40, 0.18); + padding: 4px; + z-index: 100; +} +.pl-dropdown-right { + left: auto; + right: 0; +} +.pl-dropdown-header { + font-size: 10.5px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.5px; + color: var(--text-muted); + padding: 6px 10px 4px; +} +.pl-dropdown-item { + display: flex; + align-items: center; + gap: 8px; + width: 100%; + text-align: left; + padding: 7px 10px; + background: none; + border: none; + border-radius: calc(var(--radius) - 2px); + font-size: 12.5px; + color: var(--text-primary); + cursor: pointer; + font-family: var(--font-sans); +} +.pl-dropdown-item:hover { + background: var(--bg-hover); +} +.pl-dropdown-label { + flex: 1; + min-width: 0; white-space: nowrap; - flex-shrink: 0; + overflow: hidden; + text-overflow: ellipsis; +} +.pl-dropdown-divider { + border: none; + border-top: 1px solid var(--border); + margin: 4px 0; +} +.pl-danger { + color: #B3402F; } -.projects-date { +.pl-modal-title { + margin: 0 0 14px; + font-size: 16px; +} +.pl-modal-label { + display: block; font-size: 12px; + font-weight: 500; + margin: 10px 0 4px; color: var(--text-secondary); } - -.projects-updated-by { - font-size: 10px; +.pl-modal-text { + margin: 0 0 10px; + font-size: 13px; + color: var(--text-primary); +} +.pl-modal-list { + margin: 0 0 10px; + padding-left: 22px; + font-size: 13px; + max-height: 180px; + overflow-y: auto; +} +.pl-modal-note { + font-size: 12px; color: var(--text-muted); + margin: 0 0 6px; +} +.pl-modal-note.pl-danger { + color: #B3402F; + font-weight: 600; +} +.pl-modal-error { + margin: 10px 0 0; +} +.pl-modal-actions { + display: flex; + gap: 8px; + justify-content: flex-end; + margin-top: 16px; +} + +.pl-color-row { + display: flex; + align-items: center; + gap: 6px; + flex-wrap: wrap; +} +.pl-color-swatch { + width: 26px; + height: 26px; + border-radius: 50%; + border: 2px solid transparent; + cursor: pointer; + display: inline-flex; + align-items: center; + justify-content: center; + color: white; + padding: 0; +} +.pl-color-swatch.selected { + border-color: var(--text-primary); +} +.pl-color-custom { + width: 26px; + height: 26px; + padding: 0; + border: 1px solid var(--border); + border-radius: 50%; + cursor: pointer; + background: none; } .projects-empty { @@ -2192,40 +2633,8 @@ html, body, #root { /* ── Remote Cursors ──────────────────────────────────────────── */ -.cm-remote-cursor { - position: relative; - display: inline; - pointer-events: none; -} - -.cm-remote-cursor-line { - position: absolute; - top: 0; - height: 1.2em; - border-left: 2px solid; - z-index: 10; -} - -.cm-remote-cursor-label { - position: absolute; - top: -1.4em; - left: -1px; - font-size: 10px; - line-height: 1.4; - padding: 0 4px; - border-radius: 3px 3px 3px 0; - color: white; - white-space: nowrap; - z-index: 11; - font-family: var(--font-sans); - font-weight: 500; - transition: opacity 0.5s; - pointer-events: none; -} - -.cm-remote-cursor-label.faded { - opacity: 0; -} +/* Remote collaborator cursors are styled by the remoteCursors extension + (layer-based, ported from Overleaf's cursor-highlights). */ /* ── Toolbar Users Count ─────────────────────────────────────── */ @@ -2468,6 +2877,28 @@ html, body, #root { padding: 3px 8px !important; color: var(--text-primary) !important; line-height: 1.5; + display: flex !important; + align-items: center; + justify-content: space-between; + gap: 12px; + min-width: 0; +} + +.cm-tooltip-autocomplete .cm-completionLabel { + flex-shrink: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* Completion type tag, right-aligned (Overleaf's ol-cm-completionType) */ +.ol-cm-completionType { + margin-left: auto; + opacity: 0.5; + font-size: 10.5px; + font-family: var(--font-sans); + flex-shrink: 0; } .cm-tooltip-autocomplete > ul > li[aria-selected] { |
