Mobile-responsive admin nav/thread header, real dark theme pass

Nav overflowed the viewport on phones (confirmed via screenshot) — header
now wraps, nav row scrolls horizontally instead of pushing user/theme/
logout off-screen, ticket-thread's status/assignee selects stack full-width
below the subject on narrow screens.

Dark theme got a real pass instead of reusing near-identical values:
deeper/richer surfaces, punchier accent (#8b5cf6, matches the already-
validated dark chart-1), a subtle violet glow behind the page, and a
dark-appropriate card shadow (inset highlight + soft shadow — the flat
black shadow from light mode was invisible on a dark surface).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QcXH24ky6zjk2UyK5oZUPH
This commit is contained in:
ogrechkoandClaude Sonnet 5 committed 2026-07-26 15:10:57 +00:00
1 parent 9f1413f0b9
commit cda92de9d2
4 files changed
+42 -29

No files matched your search

@@ -82,8 +82,8 @@ export function TicketThread({
}
return (
<div className="flex h-[calc(100vh-6.5rem)] flex-col">
<div className="mb-4 flex items-start justify-between gap-4">
<div className="flex h-[calc(100vh-11rem)] flex-col sm:h-[calc(100vh-6.5rem)]">
<div className="mb-4 flex flex-wrap items-start justify-between gap-3">
<div className="min-w-0">
<Link href="/dashboard" className="mb-1 flex items-center gap-1 text-xs text-text-muted hover:text-text">
<ArrowLeft size={13} />
@@ -96,11 +96,11 @@ export function TicketThread({
</span>
</div>
<div className="flex shrink-0 items-center gap-2">
<div className="flex w-full shrink-0 items-center gap-2 sm:w-auto">
<select
value={ticket.status}
onChange={(e) => updateStatus(e.target.value as TicketStatus)}
className="rounded-md border border-border bg-surface px-2 py-1.5 text-sm outline-none focus:border-accent"
className="min-w-0 flex-1 rounded-md border border-border bg-surface px-2 py-1.5 text-sm outline-none focus:border-accent sm:flex-none"
>
{Object.entries(STATUS_LABEL).map(([value, label]) => (
<option key={value} value={value}>
@@ -111,7 +111,7 @@ export function TicketThread({
<select
value={ticket.assigneeId ?? ""}
onChange={(e) => updateAssignee(e.target.value)}
className="rounded-md border border-border bg-surface px-2 py-1.5 text-sm outline-none focus:border-accent"
className="min-w-0 flex-1 rounded-md border border-border bg-surface px-2 py-1.5 text-sm outline-none focus:border-accent sm:flex-none"
>
<option value="">Не назначено</option>
{agents.map((agent) => (