diff --git a/.env b/.env
index d3abb92..2a2b4ec 100644
--- a/.env
+++ b/.env
@@ -1,2 +1,3 @@
REACT_APP_YANDEX_GEOCODER_KEY=c2d3c717-a109-4494-8863-7edbc32044e3
-REACT_APP_YANDEX_MAPS_KEY=d4696cc8-6a1f-4356-9219-108ac474093b
\ No newline at end of file
+REACT_APP_YANDEX_MAPS_KEY=d4696cc8-6a1f-4356-9219-108ac474093b
+REACT_APP_API_URL=http://192.168.1.75:8080
\ No newline at end of file
diff --git a/public/index.html b/public/index.html
index a633612..0ffcf61 100644
--- a/public/index.html
+++ b/public/index.html
@@ -3,7 +3,7 @@
-
+
- +
+ +
{t('feed.createPost')}
}
diff --git a/src/index.css b/src/index.css
index 4b33d4d..99e7121 100644
--- a/src/index.css
+++ b/src/index.css
@@ -1,3 +1,8 @@
+html {
+ -webkit-text-size-adjust: 100%;
+ text-size-adjust: 100%;
+}
+
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
diff --git a/src/pages/ReviewsPage.jsx b/src/pages/ReviewsPage.jsx
index 9ce0793..edb54e4 100644
--- a/src/pages/ReviewsPage.jsx
+++ b/src/pages/ReviewsPage.jsx
@@ -6,6 +6,7 @@ import Sidebar from "../components/Sidebar";
import AppTopBar from "../components/layout/AppTopBar";
import { ProfileModal } from "../components/profile";
import AuthModal from "../components/AuthModal";
+import RulesModal from "../components/RulesModal";
import ReviewCard from "../components/reviews/ReviewCard";
import ReviewForm from "../components/reviews/ReviewForm";
import RatingSummary from "../components/reviews/RatingSummary";
@@ -21,6 +22,7 @@ export default function ReviewsPage() {
const [sidebarOpen, setSidebarOpen] = useState(false);
const [profileModalOpen, setProfileModalOpen] = useState(false);
const [authModalOpen, setAuthModalOpen] = useState(false);
+ const [rulesModalOpen, setRulesModalOpen] = useState(false);
const profileData = useMemo(() => {
if (!user) return {};
@@ -54,12 +56,10 @@ export default function ReviewsPage() {
open={sidebarOpen}
activeNav="reviews"
onClose={() => setSidebarOpen(false)}
- onNavClick={(label) => {
- if (label === "Главная") navigate("/feed");
- }}
+ onNavClick={(key) => navigate("/feed")}
isAuthenticated={isAuthenticated}
onLoginClick={() => setAuthModalOpen(true)}
- onRulesClick={() => {}}
+ onRulesClick={() => setRulesModalOpen(true)}
/>
@@ -123,6 +123,7 @@ export default function ReviewsPage() {
setProfileModalOpen(false)} initialData={profileData} />
)}
{authModalOpen && setAuthModalOpen(false)} />}
+ {rulesModalOpen && setRulesModalOpen(false)} />}
);
}
\ No newline at end of file
diff --git a/src/styles/layout.css b/src/styles/layout.css
index a1f7f09..702bcaa 100644
--- a/src/styles/layout.css
+++ b/src/styles/layout.css
@@ -266,10 +266,10 @@
padding: 10px 12px;
}
- /* Кнопка создания объявления — меньше */
+ /* Кнопка создания объявления — как «Войти» */
.f-post-btn {
- padding: 10px 16px;
- font-size: 0.85rem;
+ padding: 10px 14px;
+ font-size: 0.8rem;
}
.f-login-btn {
@@ -296,16 +296,16 @@
@media (max-width: 600px) {
.f-post-btn {
- padding: 4px 8px;
- font-size: 0.7rem;
- gap: 3px;
- border-radius: 10px;
+ padding: 8px 8px;
+ font-size: 0.68rem;
+ gap: 4px;
+ border-radius: 8px;
}
.f-post-btn span {
- width: 14px;
- height: 14px;
- font-size: 0.75rem;
+ width: 12px;
+ height: 12px;
+ font-size: 0.7rem;
}
.f-login-btn {
diff --git a/src/styles/ui.css b/src/styles/ui.css
index 7a50da1..9b4fb7b 100644
--- a/src/styles/ui.css
+++ b/src/styles/ui.css
@@ -1,28 +1,43 @@
/* ── Post Button (topbar CTA) ── */
.f-post-btn {
- display: flex; align-items: center; gap: 10px;
- padding: 12px 28px; border-radius: 16px;
- font-family: var(--font); font-weight: 900; font-size: 0.95rem; letter-spacing: 0.3px;
+ display: flex; align-items: center; gap: 6px;
+ padding: 14px 18px; border-radius: 14px;
+ font-family: var(--font); font-weight: 900; font-size: 0.85rem; letter-spacing: 0.3px;
color: var(--teal);
background: rgba(var(--teal-rgb), 0.12); backdrop-filter: blur(14px);
border: 1px solid rgba(var(--teal-rgb), 0.25);
- box-shadow: 0 8px 24px rgba(0,0,0,0.35), inset 0 0 12px rgba(var(--teal-rgb), 0.15), 0 0 18px rgba(var(--teal-rgb), 0.15);
+ box-shadow: 0 4px 12px rgba(0,0,0,0.35), inset 0 0 6px rgba(var(--teal-rgb), 0.15), 0 0 9px rgba(var(--teal-rgb), 0.15);
cursor: pointer; transition: all 0.25s ease;
position: relative; overflow: hidden;
+ animation: postBtnGlow 3s ease-in-out infinite;
}
.f-post-btn::before {
- content: ""; position: absolute; inset: 0;
- background: linear-gradient(120deg, rgba(255,255,255,0.25), rgba(255,255,255,0.05) 40%, transparent 60%);
- opacity: 0.4; pointer-events: none;
+ content: ""; position: absolute; top: 0; left: 0;
+ width: 60%; height: 100%;
+ background: linear-gradient(105deg, transparent, rgba(255,255,255,0.5) 45%, rgba(255,255,255,0.15) 62%, transparent);
+ transform: skewX(-20deg) translateX(-150%);
+ pointer-events: none;
+ animation: postBtnShine 2.6s ease-in-out infinite;
}
.f-post-btn:hover {
transform: translateY(-2px) scale(1.02);
border-color: rgba(var(--teal-rgb), 0.5);
- box-shadow: 0 12px 32px rgba(0,0,0,0.45), inset 0 0 18px rgba(var(--teal-rgb), 0.25), 0 0 26px rgba(var(--teal-rgb), 0.35);
+ box-shadow: 0 6px 16px rgba(0,0,0,0.45), inset 0 0 9px rgba(var(--teal-rgb), 0.25), 0 0 13px rgba(var(--teal-rgb), 0.35);
}
.f-post-btn:active {
transform: translateY(0) scale(0.98);
- box-shadow: 0 4px 12px rgba(0,0,0,0.4), inset 0 0 10px rgba(var(--teal-rgb), 0.2);
+ box-shadow: 0 2px 6px rgba(0,0,0,0.4), inset 0 0 5px rgba(var(--teal-rgb), 0.2);
+}
+
+@keyframes postBtnShine {
+ 0% { transform: skewX(-20deg) translateX(-150%); }
+ 55% { transform: skewX(-20deg) translateX(250%); }
+ 100% { transform: skewX(-20deg) translateX(250%); }
+}
+
+@keyframes postBtnGlow {
+ 0%, 100% { box-shadow: 0 4px 12px rgba(0,0,0,0.35), inset 0 0 6px rgba(var(--teal-rgb), 0.15), 0 0 8px rgba(var(--teal-rgb), 0.25); }
+ 50% { box-shadow: 0 4px 12px rgba(0,0,0,0.35), inset 0 0 12px rgba(var(--teal-rgb), 0.3), 0 0 18px rgba(var(--teal-rgb), 0.5); }
}
/* ── Login Button (topbar) ── */
.f-login-btn {
@@ -53,9 +68,9 @@
.f-post-btn span {
display: flex; align-items: center; justify-content: center;
- width: 22px; height: 22px; border-radius: 50%;
- background: rgba(var(--teal-rgb), 0.2); box-shadow: 0 0 10px rgba(var(--teal-rgb), 0.4);
- font-size: 1.2rem; transform: translateY(-2px);
+ width: 16px; height: 16px; border-radius: 50%;
+ background: rgba(var(--teal-rgb), 0.2); box-shadow: 0 0 6px rgba(var(--teal-rgb), 0.4);
+ font-size: 0.9rem; transform: translateY(-1px);
}
/* ── Feed Empty / Error States ── */