Files
perfil/nuxt4/app/app.vue
josedario87 01139f4415
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 54s
Feature: Rediseño completo con tema día/noche y fondos animados
- Implementar sistema de tema día/noche con persistencia en localStorage
- Crear componente AnimatedBackground con paisajes SVG animados
- Generar todos los assets SVG desde cero (sol, luna, estrellas, nubes, montañas)
- Añadir animaciones suaves para nubes, estrellas y elementos del paisaje
- Rediseñar UserHeader como componente principal clickeable
- Integrar modal de edición de perfil en el header
- Reorganizar layout principal mostrando solo aplicaciones
- Mejorar diseño de ApplicationsList con glassmorphism
- Implementar efectos hover y transiciones elegantes
- Diseño responsive mobile-first
- Diferencias visuales notorias entre modo día y noche
2025-10-16 21:46:22 -06:00

114 lines
2.7 KiB
Vue

<template>
<UApp>
<NuxtRouteAnnouncer />
<UNotifications />
<!-- Fondo animado -->
<AnimatedBackground />
<!-- Contenido principal -->
<div class="main-content">
<UContainer class="py-8">
<div v-if="isAuthenticated" class="space-y-6">
<!-- Header principal con info del usuario -->
<UserHeader />
<!-- Lista de aplicaciones -->
<AuthApplicationsList />
<!-- Acciones rápidas en footer transparente -->
<div class="quick-actions">
<AuthSessionStatusButton />
<AuthProfileButton />
<AuthLogoutButton />
</div>
</div>
<!-- Mensaje si no está autenticado -->
<div v-else class="auth-message">
<UCard class="text-center">
<div class="py-12">
<UIcon name="i-heroicons-shield-exclamation" class="w-20 h-20 mx-auto mb-6 text-gray-400" />
<h2 class="text-3xl font-bold mb-3">No autenticado</h2>
<p class="text-gray-600 dark:text-gray-400 text-lg">
Authentik Proxy Outpost debería redirigirte automáticamente.
</p>
</div>
</UCard>
</div>
</UContainer>
</div>
</UApp>
</template>
<script setup lang="ts">
const { isAuthenticated } = useAuthentik()
const { isNight } = useTheme()
// Configurar meta tags para PWA
useHead({
link: [
{ rel: 'manifest', href: '/manifest.webmanifest' },
{ rel: 'icon', type: 'image/svg+xml', href: '/icon.svg' },
{ rel: 'apple-touch-icon', href: '/apple-touch-icon.png' }
],
meta: [
{ name: 'theme-color', content: '#00DC82' },
{ name: 'mobile-web-app-capable', content: 'yes' },
{ name: 'apple-mobile-web-app-capable', content: 'yes' },
{ name: 'apple-mobile-web-app-status-bar-style', content: 'default' }
]
})
</script>
<style scoped>
.main-content {
position: relative;
z-index: 1;
min-height: 100vh;
padding-top: 2rem;
}
.quick-actions {
display: flex;
justify-content: center;
gap: 1rem;
flex-wrap: wrap;
padding: 1.5rem;
background: rgba(255, 255, 255, 0.7);
backdrop-filter: blur(10px);
border-radius: 1rem;
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
}
:global(.dark) .quick-actions {
background: rgba(30, 30, 40, 0.7);
}
.auth-message {
display: flex;
align-items: center;
justify-content: center;
min-height: 60vh;
}
/* Mejorar estilos de las cards en el tema oscuro */
:global(.dark) :global(.card) {
background: rgba(30, 30, 40, 0.8);
backdrop-filter: blur(10px);
}
/* Responsive */
@media (max-width: 768px) {
.main-content {
padding-top: 1rem;
}
.quick-actions {
flex-direction: column;
align-items: stretch;
}
}
</style>