# Transiciones de navegación (Kasy Kit)

## Resumen

Las transiciones de pantalla están centralizadas en `lib/core/navigation/`.
**Android, iOS y Web usan la misma animación** — nada de `Zoom` en Android y `Cupertino` en iOS.

## Cambiar el valor por defecto de todo el app

Edita [`lib/core/navigation/kasy_navigation_config.dart`](../lib/core/navigation/kasy_navigation_config.dart):

```dart
class KasyNavigationConfig {
  static KasyTransitionKind push = KasyTransitionKind.fade; // cambia aquí
  static const Duration duration = Duration(milliseconds: 250);
  // ...
}
```

| Campo de config | Usado para |
|-----------------|------------|
| `push` | Mayoría de las rutas GoRouter (`kasyTransitionPage` sin override) |
| `replace` | Reservado para navegación estilo replace |
| `authPeer` | Login ↔ registro |
| `bottomTab` | Pestañas del menú inferior (Bart) |
| `onboardingStep` | Navegador interno del onboarding |

## Agregar una nueva ruta GoRouter

Usa `pageBuilder`, no `builder`:

```dart
GoRoute(
  path: '/my_feature',
  pageBuilder: (context, state) => kasyTransitionPage(
    key: state.pageKey,
    child: const MyFeaturePage(),
  ),
),
```

### Override para una sola ruta

```dart
pageBuilder: (context, state) => kasyTransitionPage(
  key: state.pageKey,
  transition: KasyTransitionKind.none,
  child: const MyFeaturePage(),
),
```

## `Navigator.push` legado

Usa `KasyMaterialPageRoute` en lugar de `MaterialPageRoute`:

```dart
Navigator.of(context).push(
  KasyMaterialPageRoute(builder: (_) => const MyPage()),
);
```

## Tipos de transición

| Tipo | Descripción |
|------|-------------|
| `fade` | Crossfade (por defecto en push) |
| `fadeThrough` | Fade-through de Material |
| `sharedAxisScaled` | Profundidad / escala |
| `sharedAxisHorizontal` | Shared axis horizontal |
| `none` | Sin animación |

## Lo que NO cubre

- Diálogos (`showAppDialog`, `showGeneralDialog`)
- Bottom sheets (`showModalBottomSheet`)
- Animaciones internas de widget (`AnimatedSwitcher`, etc.)

## Tema de fallback

[`universal_theme.dart`](../lib/core/theme/universal_theme.dart) usa `kasyPageTransitionsTheme` para que cualquier `MaterialPageRoute` restante siga haciendo fade de forma consistente. Prefiere `kasyTransitionPage` / `KasyMaterialPageRoute` en código nuevo.
