Add services page and make the portfolio carousel draggable

Port the /services page from the legacy site: hero, "Field of activity"
with the five expertise areas, the video feature image that straddles the
section boundary, the services slider, the stats row, and the capability
lists with the closing "architecture" watermark. Images come from the
legacy theme; they are also wired to Meshkee static-image slots
(services-hero/feature/cards/gallery) so they can be swapped from the panel.

The navbar Services link now points at /services instead of the homepage
anchor, and the sitemap picks the route up automatically.

PortfolioCarousel takes an optional `items` prop so the new page can reuse
it, and now supports pointer dragging. Two fixes were needed for that:

- Easing is toggled on the track imperatively with a forced style flush
  instead of via a class. Chrome decides whether to animate from the
  before-change style, so a class-based `transition: none` also suppressed
  the transition on the commit that removed it — the drag snap jumped, and
  the loop reset (which was driven by onTransitionEnd) never ran at all,
  letting the track drift off the end of the list. The loop now re-anchors
  on a timer and the reset hops instead of gliding.
- The gesture is tracked on the window rather than through pointer capture,
  so releasing outside the carousel or losing focus mid-drag still settles
  it instead of leaving the track parked at its dragged offset.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
amirhosein.ashourloo
2026-09-14 12:33:19 +03:30
co-authored by Claude Opus 5
parent a8454f37f0
commit 6bcbe73d81
15 changed files with 757 additions and 35 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB