feat: landing page — Noveria Operations + Coming Soon
This commit is contained in:
Generated
+3088
File diff suppressed because it is too large
Load Diff
@@ -40,7 +40,7 @@ onMounted(() => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<RouterView v-if="route.name === 'Login' || route.name === 'Dashboard'" />
|
||||
<RouterView v-if="route.name === 'Login' || route.name === 'Dashboard' || route.name === 'Landing'" />
|
||||
<div v-else class="shell">
|
||||
<AppSidebar
|
||||
:active-view="activeView"
|
||||
|
||||
@@ -11,10 +11,11 @@ import IncidentsView from './views/IncidentsView.vue'
|
||||
import CalendarView from './views/CalendarView.vue'
|
||||
import NexusLayout from './layouts/NexusLayout.vue'
|
||||
import FlowBoard from './views/Dashboard/FlowBoard.vue'
|
||||
import LandingView from './views/LandingView.vue'
|
||||
|
||||
const routes = [
|
||||
{ path: '/login', name: 'Login', component: LoginView, meta: { public: true } },
|
||||
{ path: '/', redirect: '/dashboard' },
|
||||
{ path: '/', name: 'Landing', component: LandingView, meta: { public: true } },
|
||||
|
||||
// V2 Dashboard (neues NexusLayout + FlowBoard)
|
||||
{
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
<script setup lang="ts">
|
||||
/**
|
||||
* LandingView – Modern, mysterious landing page for Nexus.
|
||||
* Uses GalaxyBackground as the full-screen backdrop.
|
||||
* No sidebar, no navigation, no auth gate.
|
||||
*/
|
||||
import GalaxyBackground from '../components/background/GalaxyBackground.vue'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="landing-root">
|
||||
<GalaxyBackground />
|
||||
|
||||
<div class="landing-content">
|
||||
<h1 class="headline">Noveria Operations</h1>
|
||||
<p class="subtitle">Coming Soon</p>
|
||||
</div>
|
||||
|
||||
<footer class="landing-footer">Minh Bao</footer>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.landing-root {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100vh;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.landing-content {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 16px;
|
||||
animation: fadeIn 1.8s ease-out forwards;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.headline {
|
||||
font-family: 'Space Grotesk', sans-serif;
|
||||
font-size: clamp(2.5rem, 6vw, 5rem);
|
||||
font-weight: 500;
|
||||
letter-spacing: 0.04em;
|
||||
color: #ece9ff;
|
||||
text-shadow:
|
||||
0 0 20px rgba(124, 108, 255, 0.4),
|
||||
0 0 60px rgba(124, 108, 255, 0.15),
|
||||
0 0 120px rgba(124, 108, 255, 0.08);
|
||||
margin: 0;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
font-family: 'Manrope', sans-serif;
|
||||
font-size: clamp(0.95rem, 1.6vw, 1.25rem);
|
||||
font-weight: 300;
|
||||
letter-spacing: 0.3em;
|
||||
text-transform: uppercase;
|
||||
color: rgba(168, 163, 214, 0.65);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.landing-footer {
|
||||
position: absolute;
|
||||
bottom: 28px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 1;
|
||||
text-align: center;
|
||||
font-family: 'Manrope', sans-serif;
|
||||
font-size: 11px;
|
||||
font-weight: 300;
|
||||
letter-spacing: 0.15em;
|
||||
color: rgba(168, 163, 214, 0.35);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
@keyframes fadeIn {
|
||||
0% {
|
||||
opacity: 0;
|
||||
transform: translateY(16px);
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user