diff --git a/src/JobsMedical.Web/Pages/Jobs/Details.cshtml b/src/JobsMedical.Web/Pages/Jobs/Details.cshtml index 6dadbcc..74b3a67 100644 --- a/src/JobsMedical.Web/Pages/Jobs/Details.cshtml +++ b/src/JobsMedical.Web/Pages/Jobs/Details.cshtml @@ -30,7 +30,7 @@ -
+
@if (Model.ShowContact) @@ -77,10 +77,12 @@
@salary

@empLabel

-
- -
+
+
+ +
+
@@ -147,6 +149,30 @@
+@* Sticky bottom action bar — mobile only. *@ +
+ @if (Model.ShowContact) + { + @if (!string.IsNullOrEmpty(f.Phone)) + { + 📞 تماس با مرکز + } + else + { + اطلاعات تماس در بالای صفحه + } + } + else + { + + + +
+ +
+ } +
+ @if (!string.IsNullOrEmpty(Model.MapKey) && Model.Job?.Facility?.Lat is not null) { diff --git a/src/JobsMedical.Web/Pages/Shifts/Details.cshtml b/src/JobsMedical.Web/Pages/Shifts/Details.cshtml index e81efc0..8369da2 100644 --- a/src/JobsMedical.Web/Pages/Shifts/Details.cshtml +++ b/src/JobsMedical.Web/Pages/Shifts/Details.cshtml @@ -28,7 +28,7 @@
-
+
@if (Model.ShowContact) @@ -93,11 +93,13 @@ {
✓ این فرصت ذخیره شد و در پیشنهادهای شما لحاظ می‌شود.
} -
- -
-

با اعلام تمایل، اطلاعات تماس مرکز نمایش داده می‌شود.

+
+
+ +
+

با اعلام تمایل، اطلاعات تماس مرکز نمایش داده می‌شود.

+
+@* Sticky bottom action bar — mobile only. Always-reachable primary action (native-app feel). *@ +
+ @if (Model.ShowContact) + { + @if (!string.IsNullOrEmpty(f.Phone)) + { + 📞 تماس با مرکز + } + else + { + اطلاعات تماس در بالای صفحه + } + } + else + { + + + +
+ +
+ } +
+ @if (!string.IsNullOrEmpty(Model.MapKey) && Model.Shift?.Facility?.Lat is not null) { diff --git a/src/JobsMedical.Web/wwwroot/css/site.css b/src/JobsMedical.Web/wwwroot/css/site.css index 47fc642..bbcae90 100644 --- a/src/JobsMedical.Web/wwwroot/css/site.css +++ b/src/JobsMedical.Web/wwwroot/css/site.css @@ -256,6 +256,25 @@ label { font-size: 13px; } .tour-count { font-size: 12px; color: var(--muted); } .tour-btns { display: flex; gap: 6px; } +/* ---------- Mobile sticky action bar (detail pages feel like a native app) ---------- */ +.mobile-action-bar { display: none; } +@media (max-width: 860px) { + .mobile-action-bar { + display: flex; gap: 8px; align-items: stretch; + position: fixed; inset-inline: 0; bottom: 0; z-index: 95; + padding: 10px 14px; padding-bottom: calc(10px + env(safe-area-inset-bottom, 0px)); + background: var(--surface); border-top: 1px solid var(--line); + box-shadow: 0 -8px 24px rgba(0,0,0,.10); + } + .mobile-action-bar form { margin: 0; } + .mobile-action-bar .cta-main { flex: 1; } + .mobile-action-bar .btn { margin: 0; } + /* breathing room so the fixed bar never covers page content */ + .has-action-bar { padding-bottom: 92px; } + /* the in-aside primary CTA is redundant on mobile — the sticky bar replaces it */ + .aside-apply { display: none; } +} + /* ---------- Admin settings: sidebar tabs ---------- */ .settings-layout { display: grid; grid-template-columns: 220px 1fr; gap: 18px; align-items: start; } .settings-tabs {