diff --git a/apps/web/public/icon-192x192.png b/apps/web/public/icon-192x192.png
index 7cb8a480..ca3a5232 100644
Binary files a/apps/web/public/icon-192x192.png and b/apps/web/public/icon-192x192.png differ
diff --git a/apps/web/public/icon-512x512.png b/apps/web/public/icon-512x512.png
index 7cb8a480..ca3a5232 100644
Binary files a/apps/web/public/icon-512x512.png and b/apps/web/public/icon-512x512.png differ
diff --git a/apps/web/public/manifest.json b/apps/web/public/manifest.json
index 3f4142eb..453c7334 100644
--- a/apps/web/public/manifest.json
+++ b/apps/web/public/manifest.json
@@ -4,8 +4,7 @@
"description": "A collection of developer tools for everyday use.",
"start_url": "/",
"display": "standalone",
- "background_color": "#ffffff",
- "theme_color": "#000000",
+ "background_color": "#0a0b12",
"icons": [
{
"src": "/icon-192x192.png",
diff --git a/apps/web/src/app/globals.css b/apps/web/src/app/globals.css
index 34ad86ec..5ab536f3 100644
--- a/apps/web/src/app/globals.css
+++ b/apps/web/src/app/globals.css
@@ -1845,3 +1845,14 @@ html { overflow-x: hidden; }
/* dashboard editor caret */
.mdt-dash-caret { background: var(--mdt-cyan); box-shadow: 0 0 8px var(--mdt-cyan); border-radius: 1px; animation: mdt-caret-blink 1.1s steps(2) infinite; }
@keyframes mdt-caret-blink { 50% { opacity: 0; } }
+
+/* ============================================
+ iOS INPUT AUTO-ZOOM PREVENTION
+ ============================================ */
+@media (max-width: 640px) {
+ input,
+ textarea,
+ select {
+ font-size: 16px !important;
+ }
+}
diff --git a/apps/web/src/app/help/page.tsx b/apps/web/src/app/help/page.tsx
index 9c1274a2..4d1febab 100644
--- a/apps/web/src/app/help/page.tsx
+++ b/apps/web/src/app/help/page.tsx
@@ -108,7 +108,7 @@ export default function HelpPage() {
const tTools = useTranslations('Dashboard.tools')
return (
-
+
diff --git a/apps/web/src/app/profile/page.tsx b/apps/web/src/app/profile/page.tsx
index 90141c09..d8ecd35e 100644
--- a/apps/web/src/app/profile/page.tsx
+++ b/apps/web/src/app/profile/page.tsx
@@ -21,8 +21,10 @@ import {
AtSign,
Github,
ChevronDown,
+ ChevronRight,
FileDown,
} from 'lucide-react'
+import { useActiveOrg, useActiveWorkspace } from '@/store/workspace-store'
import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'
import Link from 'next/link'
import { Input } from '@/components/ui/input'
@@ -57,6 +59,8 @@ import {
export default function ProfilePage() {
const t = useTranslations('SettingsPage')
const { user } = useAuth()
+ const activeOrg = useActiveOrg()
+ const activeWorkspace = useActiveWorkspace()
const [mounted, setMounted] = useState(false)
const [username, setUsername] = useState(null)
const [editUsernameVal, setEditUsernameVal] = useState('')
@@ -253,10 +257,19 @@ export default function ProfilePage() {
{/* ── Page header ── */}
-
-
- Developer identity
-
+ {activeOrg && activeWorkspace ? (
+
+
+ {activeOrg.name}
+
+ {activeWorkspace.name}
+
+ ) : (
+
+
+ Developer identity
+
+ )}
Your Profile
Manage your identity and developer portfolio.
diff --git a/apps/web/src/app/settings/page.tsx b/apps/web/src/app/settings/page.tsx
index 3a55f17c..73c516bb 100644
--- a/apps/web/src/app/settings/page.tsx
+++ b/apps/web/src/app/settings/page.tsx
@@ -17,6 +17,8 @@ import { useRouter } from 'next/navigation'
import { COLOR_THEME_OPTIONS, type ColorTheme, useColorTheme } from '@/hooks/use-color-theme'
import { getToolMessageKey } from '@/lib/tool-i18n'
import { PasskeySection } from '@/components/settings/passkey-section'
+import { useActiveOrg, useActiveWorkspace } from '@/store/workspace-store'
+import { Briefcase, ChevronRight } from 'lucide-react'
const colorDisplay: Record
= {
cyan: { swatchClass: 'bg-cyan-500', name: 'Teal' },
blue: { swatchClass: 'bg-blue-500', name: 'Blue' },
@@ -36,6 +38,8 @@ export default function SettingsPage() {
const { theme, setTheme } = useTheme()
const { colorTheme, setColorTheme } = useColorTheme()
const { isToolEnabled, toggleTool } = useToolVisibility()
+ const activeOrg = useActiveOrg()
+ const activeWorkspace = useActiveWorkspace()
const [mounted, setMounted] = useState(false)
useEffect(() => {
@@ -54,10 +58,19 @@ export default function SettingsPage() {
return (
-
-
- Workspace
-
+ {activeOrg && activeWorkspace ? (
+
+
+ {activeOrg.name}
+
+ {activeWorkspace.name}
+
+ ) : (
+
+
+ Workspace
+
+ )}
{t('title')}
{t('subtitle')}
diff --git a/apps/web/src/components/header.tsx b/apps/web/src/components/header.tsx
index d576f3db..43840659 100644
--- a/apps/web/src/components/header.tsx
+++ b/apps/web/src/components/header.tsx
@@ -71,7 +71,7 @@ export function Header({ showThemeToggle = true }: HeaderProps) {
return (
setIsMenuOpen(!isMenuOpen)}
aria-expanded={isMenuOpen}
aria-label={isMenuOpen ? "Close menu" : "Open menu"}
diff --git a/apps/web/src/components/logo.tsx b/apps/web/src/components/logo.tsx
index 41df0f9a..f0018f86 100644
--- a/apps/web/src/components/logo.tsx
+++ b/apps/web/src/components/logo.tsx
@@ -27,7 +27,7 @@ export function Logo({ size = 32, className = '', showText = true }: LogoProps)
/>
{showText && (
-
+
{
+ if (!applies) return
+ setDismissed(sessionStorage.getItem(storageKey) === '1')
+ }, [applies, storageKey])
+
+ if (!applies || dismissed) return null
+
+ return (
+
+
+
+ This tool works best on a larger screen. You can keep going on mobile, but expect a tight fit.
+
+
+
+ )
+}
diff --git a/apps/web/src/components/mobile-nav.tsx b/apps/web/src/components/mobile-nav.tsx
index d11ddd19..9829e7f9 100644
--- a/apps/web/src/components/mobile-nav.tsx
+++ b/apps/web/src/components/mobile-nav.tsx
@@ -106,7 +106,7 @@ export function MobileNav() {
return (