fix(ui): lift muted meta text off the sub-xs floor

Bump text-[10px]/text-[11px] to text-xs on muted description, hint, and
status-label surfaces that had drifted below the type-scale floor —
coach conversation captions, settings/admin status badges, mood
confidence pills, side-effect and cycle meta lines. Tabular-nums
badges, chart-plot legend/axis chrome, ring geometry, and
width-constrained tag tiles keep their compact size by design.
This commit is contained in:
Marc-André Bombeck committed 2026-07-18 10:27:55 +02:00
1 parent b6a1fc1c2b
commit e1c6941b20
23 files changed
+38 -40

No files matched your search

@@ -328,13 +328,13 @@ export function ApiTokenOverviewSection() {
</Badge>
))}
</div>
<p className="text-muted-foreground mt-2 text-[11px]">
<p className="text-muted-foreground mt-2 text-xs">
{t("admin.tokenLastUsed")}:{" "}
{token.lastUsedAt
? formatDateTime(token.lastUsedAt)
: t("admin.tokenNeverUsed")}
</p>
<p className="text-muted-foreground text-[11px]">
<p className="text-muted-foreground text-xs">
{t("admin.tokenCreated")}: {formatDate(token.createdAt)}
</p>
</li>
+2 -2
View File
@@ -578,11 +578,11 @@ export function BackupsSection() {
<li>
<div className="flex items-center gap-2">
<span className="truncate font-medium">{row.username}</span>
<Badge variant="secondary" className="text-[10px]">
<Badge variant="secondary" className="text-xs">
{formatBackupType(row.type, t)}
</Badge>
</div>
<p className="text-muted-foreground text-[11px]">
<p className="text-muted-foreground text-xs">
{t("admin.section.backups.colSize")}:{" "}
{formatBytes(row.sizeBytes, fmt)} ·{" "}
{fmt.dateTime(row.createdAt)}
@@ -411,7 +411,7 @@ export function UserManagementSection() {
variant={
u.role === "ADMIN" ? "default" : "secondary"
}
className="text-[10px]"
className="text-xs"
>
{u.role}
</Badge>
@@ -419,7 +419,7 @@ export function UserManagementSection() {
<p className="text-muted-foreground truncate text-xs">
{u.email || "—"}
</p>
<p className="text-muted-foreground text-[11px]">
<p className="text-muted-foreground text-xs">
{t("admin.userPasskeys")}: {u.passkeyCount} ·{" "}
{formatDate(u.createdAt)}
</p>
@@ -248,7 +248,7 @@ export function ChartOverlayControlsBody({
prefs.comparisonBaseline === value ? "default" : "outline"
}
size="sm"
className={`min-h-11 px-2 text-[11px] sm:min-h-9 ${isGreyed ? "opacity-50" : ""}`.trim()}
className={`min-h-11 px-2 text-xs sm:min-h-9 ${isGreyed ? "opacity-50" : ""}`.trim()}
onClick={() => setComparisonBaseline(value)}
aria-pressed={prefs.comparisonBaseline === value}
aria-disabled={isGreyed || undefined}
@@ -263,7 +263,7 @@ export function ChartOverlayControlsBody({
</div>
{comparisonGreyOut && (
<p
className="text-muted-foreground text-[10px] leading-snug"
className="text-muted-foreground text-xs leading-snug"
data-slot="chart-overlay-comparison-unavailable-hint"
>
{disabledTooltip}
+1 -1
View File
@@ -360,7 +360,7 @@ function StatChip({
style={{ backgroundColor: hue }}
/>
<span className="flex flex-col">
<span className="text-muted-foreground text-[11px] leading-tight">
<span className="text-muted-foreground text-xs leading-tight">
{label}
</span>
<span className="text-foreground text-sm font-semibold tabular-nums">
@@ -187,7 +187,7 @@ export function CyclePhaseCrosstab({
</span>
<span
className={cn(
"shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium",
"shrink-0 rounded-full px-2 py-0.5 text-xs font-medium",
CONFIDENCE_CLASS[row.confidence],
)}
>
@@ -1040,11 +1040,11 @@ export function CoachConversation({
<span className="truncate">{docScopeText}</span>
</span>
</div>
<p className="text-muted-foreground text-[11px] leading-snug">
<p className="text-muted-foreground text-xs leading-snug">
{t("insights.coach.attach.fencedHint")}
</p>
{anyPendingUnindexed ? (
<p className="text-muted-foreground text-[11px] leading-snug">
<p className="text-muted-foreground text-xs leading-snug">
{t("insights.coach.attach.indexingHint")}
</p>
) : null}
@@ -1143,9 +1143,7 @@ export function CoachConversation({
{renderDescription ? (
renderDescription(tagline)
) : (
<p className="text-muted-foreground truncate text-[11px]">
{tagline}
</p>
<p className="text-muted-foreground truncate text-xs">{tagline}</p>
)}
</div>
<Button
@@ -216,7 +216,7 @@ export function CoachDrawer({
</SheetTitle>
)}
renderDescription={(tagline) => (
<SheetDescription className="text-muted-foreground truncate text-[11px]">
<SheetDescription className="text-muted-foreground truncate text-xs">
{tagline}
</SheetDescription>
)}
@@ -133,7 +133,7 @@ export function GuidedQuestionBubble({
<>
<p
data-slot="coach-guided-progress"
className="text-primary mb-1 flex items-center gap-2 text-[10px] font-semibold tracking-wider uppercase"
className="text-primary mb-1 flex items-center gap-2 text-xs font-semibold tracking-wider uppercase"
>
{t("insights.coach.guided.progress", {
current: progress.current,
@@ -88,7 +88,7 @@ export function SourceChips({ provenance, className }: SourceChipsProps) {
className={cn(
"border-info/25 text-info/90",
"inline-flex items-center gap-1 rounded-full border bg-transparent",
"px-2 py-0.5 text-[11px] leading-none",
"px-2 py-0.5 text-xs leading-none",
)}
>
<Link2 className="h-2.5 w-2.5" aria-hidden="true" />
+1 -1
View File
@@ -76,7 +76,7 @@ function DraftPill({ ariaLabel }: { ariaLabel: string }) {
data-confidence-band="draft"
role="img"
aria-label={ariaLabel}
className="bg-destructive/10 text-destructive border-destructive/25 inline-flex items-center rounded-full border px-2 py-0.5 text-[10px] font-medium tracking-wide uppercase"
className="bg-destructive/10 text-destructive border-destructive/25 inline-flex items-center rounded-full border px-2 py-0.5 text-xs font-medium tracking-wide uppercase"
>
{t("insights.recommendation.confidenceDraft")}
</span>
@@ -147,7 +147,7 @@ export function MoodBetterDays({
</span>
<span
className={cn(
"shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium",
"shrink-0 rounded-full px-2 py-0.5 text-xs font-medium",
CONFIDENCE_CLASS[factor.confidence],
)}
>
@@ -138,7 +138,7 @@ export function MoodFactorMetricCrosstab({
</span>
<span
className={cn(
"shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium",
"shrink-0 rounded-full px-2 py-0.5 text-xs font-medium",
CONFIDENCE_CLASS[row.confidence],
)}
>
@@ -101,7 +101,7 @@ export function MoodTagInfluence({ rows }: { rows: MoodTagInfluenceRow[] }) {
</span>
<span
className={cn(
"shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium",
"shrink-0 rounded-full px-2 py-0.5 text-xs font-medium",
CONFIDENCE_CLASS[row.confidence],
)}
>
@@ -137,7 +137,7 @@ export function MoodTagMetricCrosstab({
</span>
<span
className={cn(
"shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium",
"shrink-0 rounded-full px-2 py-0.5 text-xs font-medium",
CONFIDENCE_CLASS[row.confidence],
)}
>
+1 -1
View File
@@ -194,7 +194,7 @@ export function TrendAnnotation({
<Badge
data-slot="trend-annotation-confidence"
variant="outline"
className={cn("text-[10px]", CONFIDENCE_BADGE_CLASS[confidence])}
className={cn("text-xs", CONFIDENCE_BADGE_CLASS[confidence])}
>
{t(CONFIDENCE_LABEL_KEY[confidence])}
</Badge>
@@ -201,7 +201,7 @@ export function ScheduleHistoryTimeline({
: t("medications.detail.zeitplan.history.noTimes")}
{revision.source === "MANUAL" && (
<span
className="border-primary/30 bg-primary/10 text-primary ml-2 inline-flex rounded-full border px-2 py-px align-middle text-[11px] font-medium"
className="border-primary/30 bg-primary/10 text-primary ml-2 inline-flex rounded-full border px-2 py-px align-middle text-xs font-medium"
data-slot="zeitplan-history-manual-chip"
>
{t("medications.detail.zeitplan.history.manualChip")}
@@ -492,7 +492,7 @@ export function SideEffectsSection({ medicationId }: SideEffectsSectionProps) {
<span aria-hidden className="block text-sm">
{value}
</span>
<span className="block text-[10px] opacity-80">
<span className="block text-xs opacity-80">
{t(`medications.sideEffects.severity.${label}`)}
</span>
</button>
@@ -517,7 +517,7 @@ export function SideEffectsSection({ medicationId }: SideEffectsSectionProps) {
// px-3 py-2 is too tall inside the side-effect modal.
className="px-2 py-1.5"
/>
<p className="text-muted-foreground text-right text-[10px]">
<p className="text-muted-foreground text-right text-xs">
{notes.length} / {NOTES_MAX}
</p>
</div>
+1 -1
View File
@@ -1107,7 +1107,7 @@ function MoodNoteText({
aria-expanded={expanded}
aria-controls={noteId}
data-testid="mood-note-toggle"
className="text-primary cursor-pointer text-[11px] font-medium"
className="text-primary cursor-pointer text-xs font-medium"
>
{expanded ? t("mood.noteCollapse") : t("mood.noteExpand")}
</button>
@@ -323,7 +323,7 @@ function SourceCardItem({
<div className="min-w-0 flex-1">
<h2 className="text-base font-semibold tracking-tight">{titleLabel}</h2>
{recommendedLabel ? (
<span className="bg-primary/10 text-primary mt-1 inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium tracking-wide uppercase">
<span className="bg-primary/10 text-primary mt-1 inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium tracking-wide uppercase">
{recommendedLabel}
</span>
) : null}
+3 -3
View File
@@ -119,7 +119,7 @@ function ApiEndpointsCard() {
className="bg-muted/30 border-border space-y-1.5 rounded-lg border p-3 text-xs"
>
<div className="flex flex-wrap items-center gap-2">
<Badge variant="secondary" className="text-[10px]">
<Badge variant="secondary" className="text-xs">
{endpoint.method}
</Badge>
<code className="font-mono break-all">{endpoint.path}</code>
@@ -457,11 +457,11 @@ function ApiTokensCard() {
{tok.name}
</p>
{isExpired ? (
<Badge variant="destructive" className="text-[10px]">
<Badge variant="destructive" className="text-xs">
{t("settings.tokenExpired")}
</Badge>
) : (
<Badge className="bg-success/15 text-success text-[10px]">
<Badge className="bg-success/15 text-success text-xs">
{t("settings.tokenActive")}
</Badge>
)}
+3 -3
View File
@@ -124,7 +124,7 @@ function McpConnectionsCard() {
<p className="min-w-0 flex-1 text-sm font-medium break-all">
{conn.clientName}
</p>
<Badge className="bg-success/15 text-success text-[10px]">
<Badge className="bg-success/15 text-success text-xs">
{t("settings.mcp.connectionConnected")}
</Badge>
</div>
@@ -438,11 +438,11 @@ function McpTokensCard() {
{tok.name}
</p>
{isExpired ? (
<Badge variant="destructive" className="text-[10px]">
<Badge variant="destructive" className="text-xs">
{t("settings.tokenExpired")}
</Badge>
) : (
<Badge className="bg-success/15 text-success text-[10px]">
<Badge className="bg-success/15 text-success text-xs">
{t("settings.tokenActive")}
</Badge>
)}
+5 -5
View File
@@ -125,13 +125,13 @@ function ShareLinksCard() {
{link.label}
</p>
<div className="flex flex-wrap items-center gap-1.5">
<Badge className="bg-success/15 text-success text-[10px]">
<Badge className="bg-success/15 text-success text-xs">
{t("settings.sharing.statusActive")}
</Badge>
{link.protected && (
<Badge
variant="outline"
className="gap-1 text-[10px]"
className="gap-1 text-xs"
data-testid="share-protected-badge"
>
<KeyRound className="h-2.5 w-2.5" />
@@ -141,7 +141,7 @@ function ShareLinksCard() {
{link.documentCount > 0 && (
<Badge
variant="outline"
className="gap-1 text-[10px]"
className="gap-1 text-xs"
data-testid="share-doc-count-badge"
aria-label={t("settings.sharing.documentCount", {
count: link.documentCount,
@@ -152,7 +152,7 @@ function ShareLinksCard() {
</Badge>
)}
{link.allowFhirApi && (
<Badge variant="outline" className="text-[10px]">
<Badge variant="outline" className="text-xs">
FHIR
</Badge>
)}
@@ -240,7 +240,7 @@ function ShareLinksCard() {
<p className="min-w-0 flex-1 text-sm font-medium break-words">
{link.label}
</p>
<Badge variant="secondary" className="text-[10px]">
<Badge variant="secondary" className="text-xs">
{link.revokedAt
? t("settings.sharing.statusRevoked")
: t("settings.sharing.statusExpired")}