feat: standardize input styling with tier system, add depth and admin features

- Define 4 input tier CSS classes (input-standard, input-search, input-embedded, input-danger)
  in globals.css, migrating ~50 inputs across ~28 component files to use them
- Add subtle border and inset shadow to solid input tiers for resting-state visibility
- Fix focus ring clipping in settings panel scroll container
- Fix phantom Tailwind tokens (border-border-primary, placeholder-txt-muted)
- Add admin user management panel, storage management, and account deletion utilities
This commit is contained in:
Jannis Braun
2026-03-14 13:49:32 +01:00
parent afbc4b5e31
commit 836f0acef6
45 changed files with 1478 additions and 235 deletions
@@ -268,7 +268,7 @@ function AddFriendTab({
placeholder="You can add a friend with their username"
value={addUsername}
onChange={(e) => setAddUsername(e.target.value)}
className="w-full bg-surface-base text-txt-primary px-4 py-3 rounded-lg border border-transparent focus:border-txt-link outline-none transition-all placeholder:text-txt-tertiary/50"
className="input-search w-full px-4 py-3 rounded-lg"
/>
<button
type="submit"
@@ -301,7 +301,7 @@ function AddFriendTab({
placeholder="Search people..."
value={discoverQuery}
onChange={(e) => handleDiscoverSearch(e.target.value)}
className="w-full bg-surface-base text-txt-primary text-sm px-3 py-1.5 rounded-[4px] outline-none placeholder:text-txt-tertiary/50 focus:ring-1 focus:ring-accent-primary transition-all"
className="input-search w-full"
/>
{discoverQuery && (
<button
@@ -371,10 +371,10 @@ function UserDiscoverCard({
: null;
const avatarUrl = user.avatar
? (user.avatar.startsWith('http') ? user.avatar : `/api/uploads/${user.avatar}`)
? (user.avatar.startsWith('http') || user.avatar.startsWith('/') ? user.avatar : `/api/uploads/${user.avatar}`)
: null;
const bannerUrl = user.banner
? (user.banner.startsWith('http') ? user.banner : `/api/uploads/${user.banner}`)
? (user.banner.startsWith('http') || user.banner.startsWith('/') ? user.banner : `/api/uploads/${user.banner}`)
: null;
const handleSendRequest = async () => {