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
This commit is contained in:
Research Assistant 2026-05-10 14:04:14 +08:00
parent 365fa57153
commit 36c26c6d5d

View file

@ -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;
}