+ {/* Mobile overlay */}
+ {open && (
+
setOpen(false)}
+ />
+ )}
+
+ {/* Sidebar */}
+
+
+ {/* Main area */}
+
+ {/* Topbar */}
+
+
+ {/* Page content */}
+
+
+
+
+
+ )
+}
diff --git a/src/pages/CpLoginPage.tsx b/src/pages/CpLoginPage.tsx
new file mode 100644
index 0000000..3c0a169
--- /dev/null
+++ b/src/pages/CpLoginPage.tsx
@@ -0,0 +1,144 @@
+import { useState, FormEvent } from 'react'
+import { useNavigate } from 'react-router-dom'
+import { Eye, EyeOff, Shield, AlertCircle } from 'lucide-react'
+import { cn } from '../lib/utils'
+
+const ADMIN_EMAIL = 'admin@hotelsync.io'
+const ADMIN_PASSWORD = 'demo'
+
+export function CpLoginPage() {
+ const navigate = useNavigate()
+ const [email, setEmail] = useState('')
+ const [password, setPassword] = useState('')
+ const [showPass, setShowPass] = useState(false)
+ const [error, setError] = useState('')
+ const [loading, setLoading] = useState(false)
+
+ const handleSubmit = async (e: FormEvent) => {
+ e.preventDefault()
+ setError('')
+ setLoading(true)
+
+ await new Promise(r => setTimeout(r, 600))
+
+ if (email.trim() === ADMIN_EMAIL && password === ADMIN_PASSWORD) {
+ localStorage.setItem('cpAuth', JSON.stringify({ email, ts: Date.now() }))
+ navigate('/', { replace: true })
+ } else {
+ setError('Неверный email или пароль')
+ }
+ setLoading(false)
+ }
+
+ return (
+
+ {/* Subtle grid background */}
+
+
+
+ {/* Logo */}
+
+
+
+
+
HotelSync
+
Control Panel · Только для команды
+
+
+ {/* Card */}
+
+
+
+ Доступ только для сотрудников HotelSync Inc.
+
+
+
+ )
+}