From e594b4be18b78ee9c9721f2578c1ca504a25a275 Mon Sep 17 00:00:00 2001 From: riyadhafraa <49757212-riyadhafraa@users.noreply.replit.com> Date: Mon, 20 Apr 2026 10:25:54 +0000 Subject: [PATCH] feat(ui): redesign TeaBoy OS to light premium SaaS theme MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Theme overhaul (artifacts/teaboy-os/src/index.css): - New light palette: background #F8FAFC, white cards, slate-200 borders - Typography: IBM Plex Sans Arabic loaded via Google Fonts (Arabic-first, RTL) - Soft glassmorphism: rgba(255,255,255,0.7) + 12px blur (vs heavy dark blur) - Box shadows: 0 8px 30px rgba(15,23,42,0.05) (very soft, premium) - .os-bg: light bg with two animated gradient blobs (soft purple top-left, soft teal bottom-right) — Apple/SaaS style backdrop - New helper classes: .topbar-glass (clean light header), .dock-glass (floating macOS-like dock, lighter blur), .card-hover (lift) - Gradient icon tiles: .icon-tile-{blue,purple,green,orange,pink,teal} using soft from→to gradients per spec Pages: - home.tsx: AppIcon now uses gradient icon tiles mapped from app.color; status bar uses .topbar-glass; bottom dock uses .dock-glass - All pages: bulk-replaced dark-glass utilities so they read on light bg: hover:bg-white/10 → hover:bg-slate-100, bg-white/10 → bg-white/70, border-white/10 → border-slate-200/70, border-white/20 → border-slate-200, bg-black/50 (modal backdrops) → bg-slate-900/30 --- artifacts/teaboy-os/index.html | 2 +- artifacts/teaboy-os/public/opengraph.jpg | Bin 17877 -> 20347 bytes artifacts/teaboy-os/src/index.css | 168 +++++++++++++----- artifacts/teaboy-os/src/pages/admin.tsx | 24 +-- artifacts/teaboy-os/src/pages/chat.tsx | 16 +- artifacts/teaboy-os/src/pages/home.tsx | 27 +-- artifacts/teaboy-os/src/pages/login.tsx | 4 +- .../teaboy-os/src/pages/notifications.tsx | 4 +- artifacts/teaboy-os/src/pages/register.tsx | 10 +- artifacts/teaboy-os/src/pages/services.tsx | 4 +- 10 files changed, 177 insertions(+), 82 deletions(-) diff --git a/artifacts/teaboy-os/index.html b/artifacts/teaboy-os/index.html index db7d31d8..30c8997e 100644 --- a/artifacts/teaboy-os/index.html +++ b/artifacts/teaboy-os/index.html @@ -7,7 +7,7 @@ - +
diff --git a/artifacts/teaboy-os/public/opengraph.jpg b/artifacts/teaboy-os/public/opengraph.jpg index 894cfe237cce1508d3674b3ec6cd89580e75ea0a..294918dc3149ee7daf10188dba7aca47b0f65895 100644 GIT binary patch literal 20347 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 literal 17877 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 UQu=R&Y@3vA<;!4laJ} * { + position: relative; + z-index: 1; +} + +@keyframes blobFloat { + 0% { transform: translate(0, 0) scale(1); } + 50% { transform: translate(30px, -20px) scale(1.05); } + 100% { transform: translate(-20px, 25px) scale(0.98); } +} + +/* Gradient icon tile helpers */ +.icon-tile { + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: 1rem; + box-shadow: 0 6px 18px rgba(59, 130, 246, 0.18); + transition: transform 0.2s ease, box-shadow 0.2s ease; +} +.icon-tile:hover { + transform: translateY(-2px); + box-shadow: 0 10px 24px rgba(59, 130, 246, 0.22); +} +.icon-tile-blue { background: linear-gradient(135deg, #60A5FA, #3B82F6); } +.icon-tile-purple { background: linear-gradient(135deg, #C084FC, #8B5CF6); } +.icon-tile-green { background: linear-gradient(135deg, #34D399, #10B981); } +.icon-tile-orange { background: linear-gradient(135deg, #FDBA74, #F59E0B); } +.icon-tile-pink { background: linear-gradient(135deg, #F9A8D4, #EC4899); } +.icon-tile-teal { background: linear-gradient(135deg, #5EEAD4, #14B8A6); } + +/* Top bar variant — flat very-light glass, no heavy border */ +.topbar-glass { + background: rgba(255, 255, 255, 0.75); + backdrop-filter: blur(16px) saturate(160%); + -webkit-backdrop-filter: blur(16px) saturate(160%); + border-bottom: 1px solid rgba(226, 232, 240, 0.7); +} + +/* Floating dock — macOS-like but lighter */ +.dock-glass { + background: rgba(255, 255, 255, 0.65); + backdrop-filter: blur(20px) saturate(180%); + -webkit-backdrop-filter: blur(20px) saturate(180%); + border: 1px solid rgba(226, 232, 240, 0.9); + box-shadow: 0 12px 40px rgba(15, 23, 42, 0.08); +} + +/* Card hover lift */ +.card-hover { + transition: transform 0.2s ease, box-shadow 0.2s ease; +} +.card-hover:hover { + transform: translateY(-2px); + box-shadow: 0 14px 36px rgba(15, 23, 42, 0.08); } diff --git a/artifacts/teaboy-os/src/pages/admin.tsx b/artifacts/teaboy-os/src/pages/admin.tsx index 2d3d2e0b..b1be35f2 100644 --- a/artifacts/teaboy-os/src/pages/admin.tsx +++ b/artifacts/teaboy-os/src/pages/admin.tsx @@ -159,10 +159,10 @@ export default function AdminPage() { return (
{/* Header */} -
+
@@ -174,7 +174,7 @@ export default function AdminPage() { {/* Edit App Modal */} {editingApp && ( -
+

{editingApp.id ? t("admin.editApp") : t("admin.addApp")} @@ -194,7 +194,7 @@ export default function AdminPage() { setEditingApp({ ...editingApp, form: { ...editingApp.form, [field]: e.target.value } })} - className="bg-white/10 border-white/20" + className="bg-white/70 border-slate-200" />

))} @@ -208,7 +208,7 @@ export default function AdminPage() { {/* Edit Service Modal */} {editingService && ( -
+

{editingService.id ? t("admin.editService") : t("admin.addService")} @@ -227,7 +227,7 @@ export default function AdminPage() { setEditingService({ ...editingService, form: { ...editingService.form, [field]: e.target.value } })} - className="bg-white/10 border-white/20" + className="bg-white/70 border-slate-200" />

))} @@ -248,7 +248,7 @@ export default function AdminPage() { {/* Create User Modal */} {newUserForm && ( -
+

{t("admin.addUser")}

@@ -256,7 +256,7 @@ export default function AdminPage() { setNewUserForm({ ...newUserForm, username: e.target.value })} - className="bg-white/10 border-white/20" + className="bg-white/70 border-slate-200" />
@@ -265,7 +265,7 @@ export default function AdminPage() { type="email" value={newUserForm.email} onChange={(e) => setNewUserForm({ ...newUserForm, email: e.target.value })} - className="bg-white/10 border-white/20" + className="bg-white/70 border-slate-200" />
@@ -274,7 +274,7 @@ export default function AdminPage() { type="password" value={newUserForm.password} onChange={(e) => setNewUserForm({ ...newUserForm, password: e.target.value })} - className="bg-white/10 border-white/20" + className="bg-white/70 border-slate-200" />
@@ -338,7 +338,7 @@ export default function AdminPage() { sortOrder: app.sortOrder ?? 0, }, })} - className="p-1.5 hover:bg-white/10 rounded-lg text-muted-foreground hover:text-foreground" + className="p-1.5 hover:bg-slate-100 rounded-lg text-muted-foreground hover:text-foreground" > @@ -398,7 +398,7 @@ export default function AdminPage() { isAvailable: service.isAvailable ?? true, }, })} - className="p-1.5 hover:bg-white/10 rounded-lg text-muted-foreground hover:text-foreground" + className="p-1.5 hover:bg-slate-100 rounded-lg text-muted-foreground hover:text-foreground" > diff --git a/artifacts/teaboy-os/src/pages/chat.tsx b/artifacts/teaboy-os/src/pages/chat.tsx index 727490f7..78de046b 100644 --- a/artifacts/teaboy-os/src/pages/chat.tsx +++ b/artifacts/teaboy-os/src/pages/chat.tsx @@ -162,10 +162,10 @@ export default function ChatPage() { return (
{/* Header */} -
+
@@ -178,7 +178,7 @@ export default function ChatPage() { {!selectedConvId && ( @@ -187,14 +187,14 @@ export default function ChatPage() { {/* New Conversation Dialog */} {showNewConv && ( -
+

{t("chat.createConversation")}

{t("chat.searchUsers")}

{users?.filter((u) => u.id !== user?.id).map((u) => ( -