diff --git a/src/app/admin/layout.tsx b/src/app/admin/layout.tsx
index 5ce60f4..3fd476e 100644
--- a/src/app/admin/layout.tsx
+++ b/src/app/admin/layout.tsx
@@ -51,15 +51,11 @@ export default function AdminLayout({
const router = useRouter();
const [sidebarOpen, setSidebarOpen] = useState(false);
const [unreadTotal, setUnreadTotal] = useState(0);
-
- // Don't render admin shell on login page
- if (pathname === "/admin/login") {
- return <>{children}>;
- }
+ const isLoginPage = pathname === "/admin/login";
// Fetch unread counts — poll every 30s
- // eslint-disable-next-line react-hooks/rules-of-hooks
useEffect(() => {
+ if (isLoginPage) return;
function fetchCounts() {
adminFetch("/api/admin/unread-counts")
.then((r) => r.json())
@@ -69,7 +65,12 @@ export default function AdminLayout({
fetchCounts();
const interval = setInterval(fetchCounts, 30000);
return () => clearInterval(interval);
- }, []);
+ }, [isLoginPage]);
+
+ // Don't render admin shell on login page
+ if (isLoginPage) {
+ return <>{children}>;
+ }
async function handleLogout() {
await fetch("/api/logout", { method: "POST" });
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 2d0ac49..fb0837a 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -9,6 +9,7 @@ import { News } from "@/components/sections/News";
import { FAQ } from "@/components/sections/FAQ";
import { Contact } from "@/components/sections/Contact";
import { BackToTop } from "@/components/ui/BackToTop";
+import { FloatingContact } from "@/components/ui/FloatingContact";
import { Header } from "@/components/layout/Header";
import { Footer } from "@/components/layout/Footer";
import { getContent } from "@/lib/content";
@@ -42,6 +43,7 @@ export default function HomePage() {
+
>
diff --git a/src/components/sections/Pricing.tsx b/src/components/sections/Pricing.tsx
index 7f1d829..4ec1f5e 100644
--- a/src/components/sections/Pricing.tsx
+++ b/src/components/sections/Pricing.tsx
@@ -1,10 +1,9 @@
"use client";
import { useState } from "react";
-import { CreditCard, Building2, ScrollText, Crown, Sparkles, Instagram, Send, Phone } from "lucide-react";
+import { CreditCard, Building2, ScrollText, Crown, Sparkles } from "lucide-react";
import { SectionHeading } from "@/components/ui/SectionHeading";
import { Reveal } from "@/components/ui/Reveal";
-import { BRAND } from "@/lib/constants";
import type { SiteContent } from "@/types/content";
type Tab = "prices" | "rental" | "rules";
@@ -13,43 +12,8 @@ interface PricingProps {
data: SiteContent["pricing"];
}
-function ContactHint() {
- return (
-
- );
-}
-
export function Pricing({ data: pricing }: PricingProps) {
const [activeTab, setActiveTab] = useState("prices");
- const showHint = pricing.showContactHint !== false; // default true
-
const tabs: { id: Tab; label: string; icon: React.ReactNode }[] = [
{ id: "prices", label: "Абонементы", icon: },
{ id: "rental", label: "Аренда зала", icon: },
@@ -166,8 +130,7 @@ export function Pricing({ data: pricing }: PricingProps) {
)}
- {showHint && }
-
+
)}
@@ -196,8 +159,7 @@ export function Pricing({ data: pricing }: PricingProps) {
))}
- {showHint && }
-
+
)}
diff --git a/src/components/ui/BackToTop.tsx b/src/components/ui/BackToTop.tsx
index cfd2194..9c23136 100644
--- a/src/components/ui/BackToTop.tsx
+++ b/src/components/ui/BackToTop.tsx
@@ -19,7 +19,7 @@ export function BackToTop() {