Secondary shell text was muted text dimmed further with opacity: the
section labels, the projects caption, the sidebar "+" icons, the privacy
panel, the trading subtitle and the Heute brief's Mission Control link.
Muted text measures 4.4:1 on the light sidebar, so these fell to 1.9 to
3.4:1 in the light theme; a few were below 4.5:1 in dark as well.
- Secondary sidebar text and icons share `rk-sidebar-muted`, the sidebar
foreground at 65% that row times already used (5.0:1 on the light
sidebar). Row times now use the class too.
- Section labels and space or project group titles use the dimmed
foreground in light and keep the 80% muted color in dark; group titles
move up from 60%, which was 3.4:1 in dark.
- The privacy panel heading is plain text with a success-colored check
instead of emerald text, and its details pass 4.5:1 in both themes.
- Needs-you chips keep the warning tint and border; their label uses the
foreground color in light.
- The Mission Control link uses the full muted color.
- E2E: the shell test checks every text in the sidebar except the logo,
and the Heute brief, in both themes, and captures
`shell-contrast-{light,dark}-heute`.
- AGENTS.md: agents make routine calls themselves, verify the result and
report it, and ask only before irreversible actions or for product
decisions without a sensible default.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SSVQGR4WU92LaddTP19GcQ
29 lines
1.2 KiB
TypeScript
29 lines
1.2 KiB
TypeScript
import { CheckCircle2, Database, EyeOff, Lock } from "lucide-react";
|
|
import { memo } from "react";
|
|
|
|
const TRUST_ITEMS = [
|
|
{ icon: Lock, label: "Verschlüsselt", desc: "AES-256 für sensible Daten" },
|
|
{ icon: Database, label: "Lokal gespeichert", desc: "Eigene PostgreSQL-Datenbank" },
|
|
{ icon: EyeOff, label: "Kein Tracking", desc: "Keine Analytics, kein Telemetry" },
|
|
] as const;
|
|
|
|
export const DataTrustPanel = memo(function DataTrustPanel() {
|
|
return (
|
|
<div className="hidden xl:flex flex-col items-start gap-1.5 rounded-xl border border-border/40 bg-muted/30 px-3 py-2.5">
|
|
<div className="flex items-center gap-1.5 text-xs font-medium text-sidebar-foreground">
|
|
<CheckCircle2 className="size-3.5 text-success" />
|
|
<span>Datenschutz aktiv</span>
|
|
</div>
|
|
<div className="flex flex-col gap-1">
|
|
{TRUST_ITEMS.map(({ icon: Icon, label, desc }) => (
|
|
<div key={label} className="flex items-center gap-1.5 rk-sidebar-muted">
|
|
<Icon className="size-3" />
|
|
<span className="text-[11px] leading-tight">{label}</span>
|
|
<span className="text-[10px] leading-tight">· {desc}</span>
|
|
</div>
|
|
))}
|
|
</div>
|
|
</div>
|
|
);
|
|
});
|