// Mobile horizontal swipe pager — tuning constants.
//
// The pager is only active on Capacitor + mobile + listing-root URLs
// (/direct/, /channels/, /bots/). Everywhere else MobileTabsLayout
// passes through to <Outlet/> and these values are inert.

// Direction-resolve dead-zone (px). The finger must travel at least
// this far on either axis before we resolve the gesture as horizontal
// (engage the pager) or vertical (bail, let curtain / horseshoes /
// scroll take over).
export const DEAD_ZONE_PX = 12;

// Edge-guard band (px). Touchstart inside this strip from the L or R
// viewport edge is ignored — that zone belongs to the Android system
// back-gesture in edge-to-edge mode, and reacting to it would steal
// the back-swipe.
export const EDGE_GUARD_PX = 24;

// Rubber-band attenuation factor applied when the user pulls past the
// leftmost or rightmost tab boundary. Soft pull, never commits.
export const RUBBER_BAND_FACTOR = 0.35;

// Commit threshold = max(MIN_COMMIT_PX, viewport_width × COMMIT_FRACTION).
// Tuned wide on purpose (≈40% of viewport, floor 150px) so accidental
// horizontal jitter on long DM rows doesn't flip tabs.
export const MIN_COMMIT_PX = 150;
export const COMMIT_FRACTION = 0.4;

// Snap-back / commit-slide animation. Same curve & duration as the
// curtain commit so the two motions feel consistent.
export const PAGER_TRANSITION_MS = 280;
export const PAGER_EASING = 'cubic-bezier(0.22, 1, 0.36, 1)';

// Visible gap between adjacent panes inside the strip. Surfaces the
// `SurfaceVariant.Container` (pagerRoot's backdrop) during a swipe,
// matching the design intent of a light-blue divider between screens.
// Roughly 2× the standard horseshoe seam (`VOJO_HORSESHOE_GAP_PX=12`)
// — the inter-pane gap reads as a transitional void rather than a
// horseshoe surface boundary, so it's tuned wider to feel breathing.
export const PANE_GAP_PX = 24;
