Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added public/screenshots/archive.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/screenshots/describe.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/screenshots/review.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/screenshots/search.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/screenshots/upload-ocr.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 13 additions & 0 deletions src/components/ArchivalFlowVisualizer.css
Original file line number Diff line number Diff line change
Expand Up @@ -861,3 +861,16 @@
align-items: flex-start;
}
}

/* The showcase card is dark in both themes; keep its headings light when the
global light-theme heading colour would otherwise turn them dark. */
[data-theme="light"] .flow-showcase-card h3.showcase-title,
[data-theme="light"] .flow-showcase-card .step-footer-info h4.step-heading {
color: #ffffff;
}

@media (max-width: 640px) {
.flow-path-timeline {
flex-wrap: wrap;
}
}
32 changes: 16 additions & 16 deletions src/components/ArchivalFlowVisualizer.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -98,13 +98,13 @@ const ArchivalFlowVisualizer = () => {
<div className="step-number-circle step-1-circle">1</div>
<h4 className="step-heading">Ingest Scans</h4>
<p className="step-description">
Drag & drop PDFs, TIFFs, or batch scans.
Drop in PDFs, TIFFs, JPEGs or whole folders.
</p>
</div>
</div>

{/* -------------------------------------------------------------
STEP 2: AI CLEAN & DESKEW
STEP 2: AUTO-ROTATE
------------------------------------------------------------- */}
<div
className={`step-column ${activeStep === 2 ? 'active' : ''}`}
Expand Down Expand Up @@ -160,9 +160,9 @@ const ArchivalFlowVisualizer = () => {

<div className="step-footer-info">
<div className="step-number-circle step-2-circle">2</div>
<h4 className="step-heading">AI Clean & Deskew</h4>
<h4 className="step-heading">Auto-Rotate</h4>
<p className="step-description">
Auto rotation, skew correction, noise removal.
Sideways and upside-down pages are turned upright.
</p>
</div>
</div>
Expand Down Expand Up @@ -207,9 +207,9 @@ const ArchivalFlowVisualizer = () => {

<div className="step-footer-info">
<div className="step-number-circle step-3-circle">3</div>
<h4 className="step-heading">Dual-Pass OCR</h4>
<h4 className="step-heading">Local OCR</h4>
<p className="step-description">
Multi-language extraction with bounding boxes and confidence.
Text extraction in 10 languages, with word confidence.
</p>
</div>
</div>
Expand Down Expand Up @@ -241,15 +241,15 @@ const ArchivalFlowVisualizer = () => {
<div className="metadata-table-rows">
<div className="meta-row">
<span className="meta-key">Title</span>
<span className="meta-val">AI-inferred title</span>
<span className="meta-val">Suggested title</span>
</div>
<div className="meta-row">
<span className="meta-key">Author</span>
<span className="meta-val">AI-inferred author</span>
<span className="meta-val">Suggested author</span>
</div>
<div className="meta-row">
<span className="meta-key">Date</span>
<span className="meta-val highlight-year">1923 (inferred)</span>
<span className="meta-val highlight-year">1923 (from text)</span>
</div>
<div className="meta-row">
<span className="meta-key">Subject</span>
Expand All @@ -261,7 +261,7 @@ const ArchivalFlowVisualizer = () => {
</div>
<div className="meta-row">
<span className="meta-key">Schema</span>
<span className="meta-val schema-tag">Dublin Core / MARC21</span>
<span className="meta-val schema-tag">Dublin Core</span>
</div>
</div>
</div>
Expand All @@ -274,9 +274,9 @@ const ArchivalFlowVisualizer = () => {

<div className="step-footer-info">
<div className="step-number-circle step-4-circle">4</div>
<h4 className="step-heading">Metadata Tagging</h4>
<h4 className="step-heading">Describe</h4>
<p className="step-description">
Dublin Core / MARC21 tagging with AI inference.
Dublin Core fields, suggested from the text.
</p>
</div>
</div>
Expand Down Expand Up @@ -335,7 +335,7 @@ const ArchivalFlowVisualizer = () => {
<div className="step-number-circle step-5-circle">5</div>
<h4 className="step-heading">Index & Export</h4>
<p className="step-description">
Searchable PDF/A, full-text index, and flexible export options.
PDF/A-2b archive, full-text index and Dublin Core export.
</p>
</div>
</div>
Expand Down Expand Up @@ -375,14 +375,14 @@ const ArchivalFlowVisualizer = () => {
</div>
</div>

{/* 100% Private Air-Gapped Ready Badge */}
{/* Offline badge */}
<div className="air-gapped-security-pill">
<div className="security-icon-box">
<Lock size={12} className="text-emerald-400" />
</div>
<div className="security-text-box">
<span className="sec-title">100% PRIVATE</span>
<span className="sec-subtitle">AIR-GAPPED READY</span>
<span className="sec-title">WORKS OFFLINE</span>
<span className="sec-subtitle">NOTHING UPLOADED</span>
</div>
</div>
</div>
Expand Down
50 changes: 24 additions & 26 deletions src/context/Toast.css
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
min-width: 300px;
max-width: 450px;
background: var(--color-bg, rgba(255, 255, 255, 0.9));
color: var(--color-text, #1a1a1a);
color: #1a1a1a;
padding: 1rem;
border-radius: 10px;
box-shadow:
Expand Down Expand Up @@ -118,34 +118,32 @@
}
}

/* Dark mode */
@media (prefers-color-scheme: dark) {
.toast {
background: var(--color-bg-secondary, #1f2937);
color: var(--color-text, #f3f4f6);
}
/* Dark theme: follows the app's theme switch, not the OS setting */
:root[data-theme="dark"] .toast {
background: var(--color-bg-elevated, #2a2e35);
color: var(--color-text-primary, #f3f4f6);
}

.toast-success {
background: rgba(34, 197, 94, 0.15);
}
:root[data-theme="dark"] .toast-success {
background: rgba(34, 197, 94, 0.15);
}

.toast-error {
background: rgba(239, 68, 68, 0.15);
}
:root[data-theme="dark"] .toast-error {
background: rgba(239, 68, 68, 0.15);
}

.toast-warning {
background: rgba(245, 158, 11, 0.15);
}
:root[data-theme="dark"] .toast-warning {
background: rgba(245, 158, 11, 0.15);
}

.toast-info {
background: rgba(59, 130, 246, 0.15);
}
:root[data-theme="dark"] .toast-info {
background: rgba(59, 130, 246, 0.15);
}

.toast-close {
color: #9ca3af;
}
:root[data-theme="dark"] .toast-close {
color: #9ca3af;
}

.toast-close:hover {
color: #e5e7eb;
}
}
:root[data-theme="dark"] .toast-close:hover {
color: #e5e7eb;
}
Loading
Loading