- |
+ |
Document
|
{allClauseTypes.map(type => (
-
+
{formatClauseType(type)}
|
))}
-
+ |
Overall
|
@@ -359,7 +359,7 @@ export default function AnalyticsPage() {
initial={{ scale: 0 }}
animate={{ scale: 1 }}
transition={{ delay: rowIdx * 0.02 + allClauseTypes.indexOf(type) * 0.01 }}
- className={`w-8 h-8 rounded-md mx-auto flex items-center justify-center text-[10px] font-mono font-bold
+ className={`w-8 h-8 rounded-md mx-auto flex items-center justify-center text-[11px] font-mono font-bold
${topRisk ? riskCellColors[topRisk] : riskCellColors.none}
${topRisk ? 'text-ink-100' : 'text-ink-700'}`}
title={clauseData ? `${clauseData.total} clause(s) - ${topRisk || 'unknown'} risk` : 'Not found'}
@@ -370,7 +370,7 @@ export default function AnalyticsPage() {
)
})}
-
{summary?.overall_risk || '?'}
@@ -415,7 +415,7 @@ export default function AnalyticsPage() {
{formatClauseType(type)}
-
+
{topRisk?.toUpperCase() || 'N/A'}
{data.total}
@@ -423,10 +423,10 @@ export default function AnalyticsPage() {
@@ -480,7 +480,7 @@ export default function AnalyticsPage() {
{formatClauseType(highlight.clause_type)}
-
-
+
{entity.entity_type}
{entity.normalized_name}
@@ -598,15 +598,15 @@ export default function AnalyticsPage() {
- | Document |
- Clauses |
- Crit |
- High |
- Med |
- Low |
- Overall |
- Risk Bar |
- |
+ Document |
+ Clauses |
+ Crit |
+ High |
+ Med |
+ Low |
+ Overall |
+ Risk Bar |
+ |
@@ -634,7 +634,7 @@ export default function AnalyticsPage() {
{summary?.risk_summary.medium || 0} |
{summary?.risk_summary.low || 0} |
-
{summary?.overall_risk || '?'}
diff --git a/frontend/src/app/compare/page.tsx b/frontend/src/app/compare/page.tsx
index a956bba..82bb5bb 100644
--- a/frontend/src/app/compare/page.tsx
+++ b/frontend/src/app/compare/page.tsx
@@ -196,7 +196,7 @@ function ComparePageContent() {
)}
{cd.doc.filename}
{cd.summary && (
-
{cd.summary.overall_risk}
@@ -251,7 +251,7 @@ function ComparePageContent() {
{doc.filename}
-
+
{doc.page_count ? `${doc.page_count} pages` : 'Unknown pages'} · {doc.chunk_count} chunks
@@ -333,17 +333,17 @@ function ComparePageContent() {
- |
+ |
Clause Type
|
{compareDocs.map(cd => (
-
+
{cd.doc.filename}
{cd.summary && (
-
{cd.summary.overall_risk}
@@ -384,12 +384,12 @@ function ComparePageContent() {
cellData.topRisk === 'medium' ? 'bg-amber-500/40' :
'bg-emerald-500/30'
}`} />
- {cellData.topRisk}
+ {cellData.topRisk}
- {cellData.breakdown.total} clause(s)
+ {cellData.breakdown.total} clause(s)
) : (
-
+
Not found
@@ -412,7 +412,7 @@ function ComparePageContent() {
{cellData.clauses.slice(0, 3).map((clause) => (
{clause.risk_level && (
-
{clause.risk_level}
@@ -426,7 +426,7 @@ function ComparePageContent() {
View Full Document
@@ -483,7 +483,7 @@ function ComparePageContent() {
{doc.filename}
-
+
missing {missing.length} clause type{missing.length !== 1 ? 's' : ''}
@@ -491,7 +491,7 @@ function ComparePageContent() {
{missing.map(type => (
{formatClauseType(type)}
diff --git a/frontend/src/app/dashboard/page.tsx b/frontend/src/app/dashboard/page.tsx
index 2f4d900..4e2c9de 100644
--- a/frontend/src/app/dashboard/page.tsx
+++ b/frontend/src/app/dashboard/page.tsx
@@ -22,12 +22,6 @@ const riskColors: Record = {
low: 'text-emerald-400 bg-emerald-500/10 border-emerald-500/20',
}
-const riskAccentBorder: Record = {
- critical: 'border-l-red-500',
- high: 'border-l-orange-500',
- medium: 'border-l-amber-500',
- low: 'border-l-emerald-500',
-}
function formatRelativeTime(iso: string): string {
const now = Date.now()
@@ -469,6 +463,7 @@ function DashboardContent() {
{/* Search Results */}
+
{searchResults.length > 0 && (
{result.document_name}
- Relevance
+ Relevance
{(result.combined_score * 100).toFixed(0)}%
@@ -518,6 +513,7 @@ function DashboardContent() {
)}
+
{/* Main Grid */}
@@ -578,7 +574,7 @@ function DashboardContent() {
{/* Value outcome steps */}
- What you get
+ What you get
@@ -619,8 +615,8 @@ function DashboardContent() {
className={`px-6 py-5 cursor-pointer transition-all duration-200 relative group
focus:outline-none focus-visible:ring-2 focus-visible:ring-accent/50
${selectedDoc === doc.id
- ? 'bg-accent/5 border-l-3 border-accent'
- : 'hover:bg-ink-900/30 border-l-3 border-transparent hover:border-ink-600'
+ ? 'bg-accent/5 ring-1 ring-inset ring-accent/25'
+ : 'hover:bg-ink-900/30'
}`}
>
@@ -668,7 +664,7 @@ function DashboardContent() {
}[risk]
return (
- {/* Risk Analysis Panel - Enhanced & Data Dense */}
-
+ {/* Risk Analysis Panel */}
+
{(selectedDoc && selectedAnalysis) || (!selectedDoc && portfolioRisk) ? (
- {/* Overall Risk - Left-border treatment */}
+ {/* Overall Risk */}
+
{riskCounts[level]}
- {level}
+ {level}
))}
diff --git a/frontend/src/app/deals/[id]/page.tsx b/frontend/src/app/deals/[id]/page.tsx
index 4dbdbb1..5f32d4d 100644
--- a/frontend/src/app/deals/[id]/page.tsx
+++ b/frontend/src/app/deals/[id]/page.tsx
@@ -249,7 +249,7 @@ export default function DealDetailPage() {
{(['critical', 'high', 'medium', 'low'] as RiskLevel[]).map((level) => (
-
+
{level}: {deal.risk_summary[level] || 0}
))}
diff --git a/frontend/src/app/deals/page.tsx b/frontend/src/app/deals/page.tsx
index 1c75539..1c85462 100644
--- a/frontend/src/app/deals/page.tsx
+++ b/frontend/src/app/deals/page.tsx
@@ -152,7 +152,7 @@ export default function DealsPage() {
].map(({ label, icon: Icon }) => (
))}
@@ -198,12 +198,12 @@ export default function DealsPage() {
{deal.documents.length > 0 && (
{deal.documents.slice(0, 3).map((doc) => (
-
+
{doc.filename}
))}
{deal.document_count > 3 && (
- +{deal.document_count - 3} more
+ +{deal.document_count - 3} more
)}
)}
diff --git a/frontend/src/app/documents/[id]/chat-panel.tsx b/frontend/src/app/documents/[id]/chat-panel.tsx
index 164b47f..4e22ef3 100644
--- a/frontend/src/app/documents/[id]/chat-panel.tsx
+++ b/frontend/src/app/documents/[id]/chat-panel.tsx
@@ -146,7 +146,7 @@ export function ChatPanel({ documentId }: { documentId: string }) {
diff --git a/frontend/src/app/documents/[id]/graph/page.tsx b/frontend/src/app/documents/[id]/graph/page.tsx
index 27dd272..7c7f13b 100644
--- a/frontend/src/app/documents/[id]/graph/page.tsx
+++ b/frontend/src/app/documents/[id]/graph/page.tsx
@@ -885,7 +885,7 @@ export default function GraphPage() {
-
+
{otherNode.type}
{edge.label && edge.label !== 'relates_to' && (
<>
@@ -933,11 +933,11 @@ export default function GraphPage() {
{connectedCount}
- Connections
+ Connections
{sameTypeCount}
- Same Type
+ Same Type
)
@@ -1076,7 +1076,7 @@ export default function GraphPage() {
{edge.label && edge.label !== 'relates_to' && (
- {edge.label.replace(/_/g, ' ')}
+ {edge.label.replace(/_/g, ' ')}
)}
)
@@ -1102,11 +1102,11 @@ export default function GraphPage() {
{connectedCount}
- Connections
+ Connections
{sameTypeCount}
- Same Type
+ Same Type
)
diff --git a/frontend/src/app/documents/[id]/page.tsx b/frontend/src/app/documents/[id]/page.tsx
index 5fa99da..e6a21c3 100644
--- a/frontend/src/app/documents/[id]/page.tsx
+++ b/frontend/src/app/documents/[id]/page.tsx
@@ -58,7 +58,7 @@ function ByokForm({ onSubmit, initialKey, onCancel }: {
}`}
/>
{showValidationHint && (
- Key must start with "sk-ant-"
+ Key must start with "sk-ant-"
)}
{!showValidationHint && }
@@ -69,7 +69,7 @@ function ByokForm({ onSubmit, initialKey, onCancel }: {
Cancel
-
+
Get your key at console.anthropic.com
@@ -942,7 +942,7 @@ export default function DocumentDetailPage() {
const risk = riskConfig[clause.risk_level as RiskLevel] || riskConfig.low
return (
-
+
{clause.risk_level}
diff --git a/frontend/src/app/documents/[id]/pdf-viewer.tsx b/frontend/src/app/documents/[id]/pdf-viewer.tsx
index 6f0aa4b..68870e5 100644
--- a/frontend/src/app/documents/[id]/pdf-viewer.tsx
+++ b/frontend/src/app/documents/[id]/pdf-viewer.tsx
@@ -61,7 +61,7 @@ export function PdfViewer({ documentId, clauses, activeClauseId, onClauseClick }
) : (
sortedPages.map((page) => (
-
+
{page === 0 ? 'Unknown Page' : `Page ${page}`}
{clausesByPage[page].map((clause) => {
diff --git a/frontend/src/app/documents/[id]/timeline.tsx b/frontend/src/app/documents/[id]/timeline.tsx
index 7bcabaa..def2014 100644
--- a/frontend/src/app/documents/[id]/timeline.tsx
+++ b/frontend/src/app/documents/[id]/timeline.tsx
@@ -60,7 +60,7 @@ export function Timeline({ documentId }: { documentId: string }) {
{Object.entries(typeConfig)
.filter(([type]) => events.some(e => e.type === type))
.map(([type, config]) => (
-
+
{config.label}
@@ -102,7 +102,7 @@ export function Timeline({ documentId }: { documentId: string }) {
)}
{event.page_number != null && (
- p.{event.page_number}
+ p.{event.page_number}
)}
diff --git a/frontend/src/app/globals.css b/frontend/src/app/globals.css
index b1130b0..372726f 100644
--- a/frontend/src/app/globals.css
+++ b/frontend/src/app/globals.css
@@ -7,27 +7,27 @@
--font-body: 'DM Sans', -apple-system, sans-serif;
--font-mono: 'JetBrains Mono', 'Fira Code', monospace;
- /* Dark theme (default) — RGB triplets for Tailwind opacity support */
- --ink-50: 247 247 248;
- --ink-100: 238 238 240;
- --ink-200: 217 217 222;
- --ink-300: 184 184 193;
- --ink-400: 145 145 159;
- --ink-500: 140 140 158;
- --ink-600: 93 93 108;
- --ink-700: 76 76 88;
- --ink-800: 65 65 75;
- --ink-900: 57 57 65;
- --ink-925: 40 40 48;
- --ink-950: 24 24 27;
-
- --bg-primary: #0a0a0c;
- --bg-secondary: #111114;
- --bg-tertiary: #18181b;
- --text-primary: #f4f4f5;
- --text-secondary: #a1a1aa;
- --text-muted: #71717a;
- --border: #27272a;
+ /* Dark theme (default) — warm ink palette echoing gold/cream editorial identity */
+ --ink-50: 248 247 244;
+ --ink-100: 240 238 234;
+ --ink-200: 222 219 213;
+ --ink-300: 190 186 178;
+ --ink-400: 154 148 138;
+ --ink-500: 148 143 132;
+ --ink-600: 138 133 124;
+ --ink-700: 84 79 70;
+ --ink-800: 72 67 58;
+ --ink-900: 62 58 52;
+ --ink-925: 44 41 36;
+ --ink-950: 26 24 21;
+
+ --bg-primary: #0d0b08;
+ --bg-secondary: #14120e;
+ --bg-tertiary: #1c1a15;
+ --text-primary: #f5f4f1;
+ --text-secondary: #a8a49c;
+ --text-muted: #7a7770;
+ --border: #2c2922;
--accent: #c9a227;
}
@@ -62,8 +62,8 @@ html.light {
--ink-200: 52 52 78;
--ink-300: 74 74 106;
--ink-400: 100 100 130;
- --ink-500: 122 122 142;
- --ink-600: 165 165 180;
+ --ink-500: 105 105 125;
+ --ink-600: 140 140 155;
--ink-700: 200 196 188;
--ink-800: 212 207 197;
--ink-900: 240 237 230;
@@ -96,20 +96,20 @@ html.light {
animation: shimmer 1.8s ease-in-out infinite;
}
-/* Dark frame — preserves dark palette for product previews on light pages */
+/* Dark frame — preserves warm dark palette for product previews on light pages */
.theme-dark-frame {
- --ink-50: 247 247 248;
- --ink-100: 238 238 240;
- --ink-200: 217 217 222;
- --ink-300: 184 184 193;
- --ink-400: 145 145 159;
- --ink-500: 140 140 158;
- --ink-600: 93 93 108;
- --ink-700: 76 76 88;
- --ink-800: 65 65 75;
- --ink-900: 57 57 65;
- --ink-925: 40 40 48;
- --ink-950: 24 24 27;
+ --ink-50: 248 247 244;
+ --ink-100: 240 238 234;
+ --ink-200: 222 219 213;
+ --ink-300: 190 186 178;
+ --ink-400: 154 148 138;
+ --ink-500: 148 143 132;
+ --ink-600: 138 133 124;
+ --ink-700: 84 79 70;
+ --ink-800: 72 67 58;
+ --ink-900: 62 58 52;
+ --ink-925: 44 41 36;
+ --ink-950: 26 24 21;
--accent: #c9a227;
}
@@ -188,7 +188,7 @@ body {
}
::-webkit-scrollbar-thumb:hover {
- background: #3f3f46;
+ background: #46433c;
}
/* Risk glow effects */
@@ -296,9 +296,9 @@ body {
.skeleton {
background: linear-gradient(
90deg,
- rgba(39, 39, 42, 0.4) 25%,
- rgba(63, 63, 70, 0.4) 50%,
- rgba(39, 39, 42, 0.4) 75%
+ rgba(44, 41, 36, 0.4) 25%,
+ rgba(62, 58, 52, 0.4) 50%,
+ rgba(44, 41, 36, 0.4) 75%
);
background-size: 200% 100%;
animation: shimmer 1.8s ease-in-out infinite;
diff --git a/frontend/src/app/hero-visual.tsx b/frontend/src/app/hero-visual.tsx
index 290c8af..842d8d2 100644
--- a/frontend/src/app/hero-visual.tsx
+++ b/frontend/src/app/hero-visual.tsx
@@ -59,10 +59,8 @@ export function HeroVisual() {
transition={{ delay: 0.5, duration: 0.8, ease: [0.22, 1, 0.36, 1] }}
className="relative"
>
-
-
+ shadow-[0_20px_60px_rgba(0,0,0,0.5),0_0_80px_rgba(201,162,39,0.08)]">
{/* Browser chrome */}
@@ -71,7 +69,7 @@ export function HeroVisual() {
-
+
brightclause.com/documents/acme-techstart-ma
@@ -83,10 +81,10 @@ export function HeroVisual() {
- Document Analysis
+ Document Analysis
Acme Corp – TechStart Service Agreement
-
HIGH RISK
@@ -104,13 +102,13 @@ export function HeroVisual() {
>
{r.count}
- {r.level}
+ {r.level}
@@ -119,7 +117,7 @@ export function HeroVisual() {
{/* Clause list */}
- Extracted Clauses
+ Extracted Clauses
{mockClauses.map((c, i) => (
- {c.section}
+ {c.section}
{c.type}
-
+
{c.risk}
@@ -144,8 +142,8 @@ export function HeroVisual() {
{/* Right: Knowledge Graph */}
- Knowledge Graph
- 6 entities · 7 relations
+ Knowledge Graph
+ 6 entities · 7 relations
@@ -198,7 +196,7 @@ export function HeroVisual() {
{entityLegend.map(t => (
))}
diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx
index 3efbc15..c241ac9 100644
--- a/frontend/src/app/layout.tsx
+++ b/frontend/src/app/layout.tsx
@@ -59,7 +59,7 @@ export const metadata: Metadata = {
alternates: { canonical: 'https://brightclause.com' },
robots: { index: true, follow: true },
verification: { google: 'hjZkahLqQJUWRBpHS6iz4i4zyuy4MEC5WqFCRmbgFek' },
- other: { 'theme-color': '#0a0a1a' },
+ other: { 'theme-color': '#0d0b08' },
manifest: '/manifest.json',
appleWebApp: {
capable: true,
diff --git a/frontend/src/app/obligations/page.tsx b/frontend/src/app/obligations/page.tsx
index b9396cb..67a3378 100644
--- a/frontend/src/app/obligations/page.tsx
+++ b/frontend/src/app/obligations/page.tsx
@@ -258,10 +258,10 @@ export default function ObligationsPage() {
{ob.description}
-
+
{sCfg.label}
-
+
{cfg.label}
{ob.due_date && (
diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx
index aa81c89..68b9b21 100644
--- a/frontend/src/app/page.tsx
+++ b/frontend/src/app/page.tsx
@@ -161,22 +161,19 @@ function TrustCard({ signal, index }: { signal: typeof trustSignals[number]; ind
transition={{ delay: index * 0.1 }}
className="p-6 bg-ink-900/30 border border-ink-800/40 rounded-xl group hover:border-accent/30 transition-all"
>
-
-
-
-
-
- {signal.statPrefix ?? ''}{signal.statDisplay ?? count}{signal.statSuffix}
-
-
- {signal.statLabel}
-
+
+
+
+
+
+ {signal.title}
+
+ {signal.statPrefix ?? ''}{signal.statDisplay ?? count}{signal.statSuffix} {signal.statLabel}
+
+
- {signal.title}
{signal.description}
)
@@ -357,7 +354,7 @@ export default function LandingPage() {
- {String(i + 1).padStart(2, '0')}
+ {String(i + 1).padStart(2, '0')}
{item.title}
@@ -436,26 +433,32 @@ export default function LandingPage() {
- {/* Remaining 9 features — compact */}
-
- {features.slice(3).map((feature, i) => (
-
-
-
-
-
- {feature.title}
- {feature.description}
-
-
- ))}
+ {/* Remaining 9 features — alternating wide/compact rhythm */}
+
+ {features.slice(3).map((feature, i) => {
+ const isWide = i % 3 === 0
+ return (
+
+
+
+
+
+ {feature.title}
+ {feature.description}
+
+
+ )
+ })}
@@ -605,7 +608,7 @@ export default function LandingPage() {
>
-
+
{tier.label}
diff --git a/frontend/src/app/providers.tsx b/frontend/src/app/providers.tsx
index b194816..3837730 100644
--- a/frontend/src/app/providers.tsx
+++ b/frontend/src/app/providers.tsx
@@ -1,12 +1,15 @@
'use client'
+import { MotionConfig } from 'framer-motion'
import { ToastProvider } from '@/lib/toast'
import { ThemeProvider } from '@/lib/theme'
export function Providers({ children }: { children: React.ReactNode }) {
return (
- {children}
+
+ {children}
+
)
}
diff --git a/frontend/src/components/DemoVideoModal.tsx b/frontend/src/components/DemoVideoModal.tsx
index 8054787..60a600a 100644
--- a/frontend/src/components/DemoVideoModal.tsx
+++ b/frontend/src/components/DemoVideoModal.tsx
@@ -144,7 +144,7 @@ export const DemoVideoModal: React.FC = ({ open, onClose })
)}
{/* Player container */}
-
+
= ({ open, onClose })
{isActive && (
)}
{i > 0 && }
@@ -200,7 +200,7 @@ export const DemoVideoModal: React.FC = ({ open, onClose })
| | |