From 36c26c6d5d88916d2e859cd17259e8ca3f147b63 Mon Sep 17 00:00:00 2001 From: Research Assistant Date: Sun, 10 May 2026 14:04:14 +0800 Subject: [PATCH] style(dashboard): add refined CSS for redesigned per-paper, collection, and global views - Status strip pills matching existing badge design (color-green/text-error) - Paper overview card with card-style hover border + accent left border via ::before - Discussion card with session-based Q&A styling + expand/truncate - Workflow overview funnel with centered stage pills and arrows - Issue summary with subtle error border + dot indicators - Library snapshot pills and system status grid for global view - Contextual button base style shared across all views - All new components use Obsidian CSS variables for dark/light theme support --- paperforge/plugin/styles.css | 565 +++++++++++++++++++++++++++++++++++ 1 file changed, 565 insertions(+) diff --git a/paperforge/plugin/styles.css b/paperforge/plugin/styles.css index 530dd5a9..4cc7bbbb 100644 --- a/paperforge/plugin/styles.css +++ b/paperforge/plugin/styles.css @@ -1567,3 +1567,568 @@ justify-content: flex-end; padding-top: 8px; } + +/* ========================================================================== + SECTION 39 — Dashboard Redesign: Shared Components + ========================================================================== */ + +/* ── Section Label (used across global / collection / paper) ── */ +.paperforge-section-label { + font-size: var(--font-ui-small); + font-weight: var(--font-semibold); + color: var(--text-normal); + margin: 0 0 10px 0; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +/* ── Contextual Button (card-action style, used across all views) ── */ +.paperforge-contextual-btn { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 6px 14px; + background: var(--background-secondary); + border: 1px solid var(--background-modifier-border); + border-radius: var(--radius-s); + color: var(--text-muted); + font-size: var(--font-ui-smaller); + font-weight: var(--font-medium); + cursor: pointer; + transition: background 0.15s, border-color 0.15s, color 0.15s; + white-space: nowrap; +} + +.paperforge-contextual-btn:hover { + background: var(--background-modifier-hover); + border-color: var(--interactive-accent); + color: var(--text-normal); +} + +.paperforge-contextual-btn.running { + opacity: 0.6; + pointer-events: none; +} + +.paperforge-contextual-btn-icon { + font-size: 14px; + line-height: 1; +} + +/* ========================================================================== + SECTION 40 — Dashboard Redesign: Per-Paper View (Reading Companion) + ========================================================================== */ + +/* ── Status Strip ── */ +.paperforge-status-strip { + display: flex; + gap: 8px; + padding: 8px 0; + border-top: 1px solid var(--background-modifier-border); + border-bottom: 1px solid var(--background-modifier-border); + margin: 10px 0; +} + +.paperforge-status-pill { + display: inline-flex; + align-items: center; + gap: 4px; + padding: 3px 12px; + border-radius: 10px; + font-size: 11px; + font-weight: var(--font-semibold); + background: var(--background-modifier-hover); + color: var(--text-muted); + line-height: 1.4; +} + +.paperforge-status-pill.ok { + background: var(--color-green); + color: var(--text-on-accent); +} + +.paperforge-status-pill.fail { + background: var(--text-error); + color: var(--text-on-accent); +} + +.paperforge-status-pill.pending { + background: var(--background-modifier-hover); + color: var(--text-muted); +} + +.paperforge-status-pill-icon { + font-size: 10px; + line-height: 1; +} + +/* ── Paper Overview Card ── */ +.paperforge-paper-overview { + margin: 12px 0; + padding: 14px; + background: var(--background-secondary); + border: 1px solid var(--background-modifier-border); + border-radius: var(--radius-m); + transition: border-color 0.15s; +} + +.paperforge-paper-overview:hover { + border-color: var(--interactive-accent); +} + +.paperforge-paper-overview-header { + margin-bottom: 8px; +} + +.paperforge-paper-overview-title { + font-size: var(--font-ui-small); + font-weight: var(--font-semibold); + color: var(--text-accent); + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.paperforge-paper-overview-body { + font-size: var(--font-ui-smaller); + color: var(--text-muted); + line-height: 1.6; +} + +.paperforge-paper-overview-excerpt { + white-space: pre-wrap; + word-break: break-word; +} + +.paperforge-paper-overview-expand { + display: inline-block; + margin-top: 6px; + padding: 2px 0; + background: none; + border: none; + color: var(--text-accent); + font-size: var(--font-ui-smaller); + font-weight: var(--font-medium); + cursor: pointer; + transition: color 0.15s; +} + +.paperforge-paper-overview-expand:hover { + color: var(--interactive-accent-hover); + text-decoration: underline; +} + +/* ── Discussion Card ── */ +.paperforge-discussion-card { + margin: 12px 0; + padding: 14px; + background: var(--background-secondary); + border: 1px solid var(--background-modifier-border); + border-radius: var(--radius-m); + transition: border-color 0.15s; +} + +.paperforge-discussion-card:hover { + border-color: var(--interactive-accent); +} + +.paperforge-discussion-header { + margin-bottom: 8px; +} + +.paperforge-discussion-title { + font-size: var(--font-ui-small); + font-weight: var(--font-semibold); + color: var(--text-accent); + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.paperforge-discussion-item { + margin-bottom: 8px; + padding-bottom: 8px; + border-bottom: 1px solid var(--background-modifier-border-hover); +} + +.paperforge-discussion-item:last-child { + border-bottom: none; + margin-bottom: 4px; + padding-bottom: 0; +} + +.paperforge-discussion-q { + font-size: var(--font-ui-smaller); + font-weight: var(--font-semibold); + color: var(--text-normal); + margin-bottom: 4px; + line-height: 1.5; +} + +.paperforge-discussion-a { + font-size: var(--font-ui-smaller); + color: var(--text-muted); + line-height: 1.5; +} + +.paperforge-discussion-expand { + display: inline; + padding: 0; + margin-left: 4px; + background: none; + border: none; + color: var(--text-accent); + font-size: var(--font-ui-smaller); + font-weight: var(--font-medium); + cursor: pointer; + transition: color 0.15s; +} + +.paperforge-discussion-expand:hover { + color: var(--interactive-accent-hover); + text-decoration: underline; +} + +.paperforge-discussion-viewall { + display: block; + text-align: right; + margin-top: 6px; + font-size: var(--font-ui-smaller); + font-weight: var(--font-medium); + color: var(--text-accent); + cursor: pointer; + text-decoration: none; + transition: color 0.15s; +} + +.paperforge-discussion-viewall:hover { + color: var(--interactive-accent-hover); +} + +/* ── Paper Files Row ── */ +.paperforge-paper-files { + display: flex; + gap: 8px; + margin: 12px 0; +} + +/* ── Technical Details ── */ +.paperforge-technical-details { + margin: 8px 0; +} + +.paperforge-technical-details-toggle { + width: 100%; + padding: 8px 12px; + background: var(--background-secondary); + border: 1px solid var(--background-modifier-border); + border-radius: var(--radius-s); + color: var(--text-muted); + font-size: var(--font-ui-smaller); + font-weight: var(--font-medium); + cursor: pointer; + text-align: left; + transition: background 0.15s, border-color 0.15s; +} + +.paperforge-technical-details-toggle:hover { + background: var(--background-modifier-hover); + border-color: var(--interactive-accent); + color: var(--text-normal); +} + +.paperforge-technical-details-body { + margin-top: 6px; + padding: 10px 14px; + background: var(--background-primary-alt); + border: 1px solid var(--background-modifier-border); + border-radius: var(--radius-s); + font-size: var(--font-ui-smaller); +} + +.paperforge-technical-row { + display: flex; + justify-content: space-between; + padding: 3px 0; +} + +.paperforge-technical-label { + color: var(--text-faint); + flex-shrink: 0; + margin-right: 12px; +} + +.paperforge-technical-value { + color: var(--text-muted); + max-width: 60%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + text-align: right; +} + +/* ========================================================================== + SECTION 41 — Dashboard Redesign: Collection / Base View (Batch Workspace) + ========================================================================== */ + +/* ── Collection Header ── */ +.paperforge-collection-header { + margin-bottom: 12px; +} + +.paperforge-collection-title { + font-size: var(--font-ui-medium); + font-weight: var(--font-bold); + color: var(--text-normal); + line-height: 1.3; +} + +.paperforge-collection-count { + font-size: var(--font-ui-smaller); + color: var(--text-muted); + margin-top: 2px; +} + +/* ── Workflow Overview (funnel) ── */ +.paperforge-workflow-overview { + margin: 12px 0; + padding: 16px; + background: var(--background-secondary); + border: 1px solid var(--background-modifier-border); + border-radius: var(--radius-m); + transition: border-color 0.15s; +} + +.paperforge-workflow-overview:hover { + border-color: var(--interactive-accent); +} + +.paperforge-workflow-funnel { + display: flex; + align-items: center; + gap: 4px; + flex-wrap: wrap; + justify-content: center; +} + +.paperforge-workflow-stage { + display: flex; + flex-direction: column; + align-items: center; + padding: 8px 14px; + background: var(--background-primary-alt); + border-radius: var(--radius-s); + min-width: 60px; +} + +.paperforge-workflow-stage-value { + font-size: clamp(16px, 3vw, 22px); + font-weight: var(--font-bold); + color: var(--text-accent); + line-height: 1.2; + letter-spacing: -0.3px; +} + +.paperforge-workflow-stage-label { + font-size: 10px; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.3px; + margin-top: 2px; + text-align: center; +} + +.paperforge-workflow-arrow { + color: var(--text-faint); + font-size: var(--font-ui-smaller); + flex-shrink: 0; +} + +/* ── OCR Pipeline in Base ── */ +.paperforge-collection-ocr-header { + display: flex; + align-items: center; + gap: 10px; + margin-bottom: 14px; +} + +/* ── Issue Summary ── */ +.paperforge-issue-summary { + margin: 12px 0; + padding: 12px 14px; + background: var(--background-secondary); + border: 1px solid var(--text-error); + border-radius: var(--radius-m); +} + +.paperforge-issue-summary .paperforge-section-label { + color: var(--text-error); +} + +.paperforge-issue-text { + font-size: var(--font-ui-smaller); + color: var(--text-muted); + line-height: 1.5; +} + +.paperforge-issue-list { + margin: 6px 0 8px 0; +} + +.paperforge-issue-item { + font-size: var(--font-ui-smaller); + color: var(--text-error); + padding: 2px 0; + padding-left: 12px; + position: relative; +} + +.paperforge-issue-item::before { + content: ''; + position: absolute; + left: 0; + top: 8px; + width: 5px; + height: 5px; + border-radius: 50%; + background: var(--text-error); +} + +.paperforge-issue-actions { + display: flex; + gap: 8px; + margin-top: 10px; +} + +/* ── Collection Actions ── */ +.paperforge-collection-actions { + display: flex; + gap: 8px; + margin-top: 12px; + padding-top: 12px; + border-top: 1px solid var(--background-modifier-border); +} + +/* ========================================================================== + SECTION 42 — Dashboard Redesign: Global / Home View (System Homepage) + ========================================================================== */ + +/* ── Library Snapshot ── */ +.paperforge-library-snapshot { + padding: 16px; + background: var(--background-secondary); + border: 1px solid var(--background-modifier-border); + border-radius: var(--radius-m); + transition: border-color 0.15s; +} + +.paperforge-library-snapshot:hover { + border-color: var(--interactive-accent); +} + +.paperforge-snapshot-pills { + display: flex; + gap: 8px; + flex-wrap: wrap; +} + +.paperforge-snapshot-pill { + display: flex; + flex-direction: column; + align-items: center; + padding: 10px 16px; + background: var(--background-primary-alt); + border-radius: var(--radius-s); + min-width: 64px; + flex: 1; +} + +.paperforge-snapshot-value { + font-size: clamp(16px, 3vw, 22px); + font-weight: var(--font-bold); + color: var(--text-accent); + line-height: 1.2; + letter-spacing: -0.3px; +} + +.paperforge-snapshot-label { + font-size: 10px; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.3px; + margin-top: 2px; + text-align: center; +} + +/* ── System Status ── */ +.paperforge-system-status { + padding: 16px; + background: var(--background-secondary); + border: 1px solid var(--background-modifier-border); + border-radius: var(--radius-m); + transition: border-color 0.15s; +} + +.paperforge-system-status:hover { + border-color: var(--interactive-accent); +} + +.paperforge-status-grid { + display: flex; + flex-direction: column; + gap: 2px; +} + +.paperforge-status-row { + display: flex; + align-items: center; + gap: 10px; + padding: 5px 0; +} + +.paperforge-status-dot { + width: 8px; + height: 8px; + border-radius: 50%; + flex-shrink: 0; + background: var(--background-modifier-border); + transition: background 0.3s; +} + +.paperforge-status-dot.ok { + background: var(--color-green); +} + +.paperforge-status-dot.fail { + background: var(--text-error); +} + +.paperforge-status-label { + font-size: var(--font-ui-smaller); + color: var(--text-muted); + min-width: 80px; +} + +.paperforge-status-detail { + font-size: var(--font-ui-smaller); + color: var(--text-faint); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* ── Global Actions ── */ +.paperforge-global-actions { + padding: 16px; + background: var(--background-secondary); + border: 1px solid var(--background-modifier-border); + border-radius: var(--radius-m); + transition: border-color 0.15s; +} + +.paperforge-global-actions:hover { + border-color: var(--interactive-accent); +} + +.paperforge-global-actions-row { + display: flex; + gap: 8px; +}