From fd36483cf205119b886dbcd70a6e5a14c6a0a0a1 Mon Sep 17 00:00:00 2001 From: Claude Agent Date: Fri, 10 Jul 2026 18:02:53 +0000 Subject: [PATCH] =?UTF-8?q?feat(frontend):=20landing=20page=20ROA=20Space?= =?UTF-8?q?=20cu=20selector=20de=20tem=C4=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pagină de prezentare la ruta `/` (redirect la dashboard pentru utilizatorii autentificați), în stilul design system-ului Romfast, importată din Claude Design (ROA Space Landing). - Hero cu card de rezervare interactiv, secțiuni de beneficii, bandă CTA discretă și footer pe un singur rând (stil autopass) - Selector de temă în header cu aceleași 8 teme ca aplicația/autopass (light, dark, petrol, grafit, cobalt, cupru, hârtie, auto), persistat în localStorage; toată paleta e condusă de tema activă - Conținut încadrat la 1280px, centrat, cu margini în culoarea temei; mod `fullBleed` în App.vue pentru pagini edge-to-edge - Fonturi Plus Jakarta Sans / Manrope / Space Grotesk în index.html Co-Authored-By: Claude Opus 4.8 (1M context) --- frontend/index.html | 5 +- frontend/src/App.vue | 10 +- frontend/src/router/index.ts | 6 +- frontend/src/views/Landing.vue | 664 +++++++++++++++++++++++++++++++++ 4 files changed, 681 insertions(+), 4 deletions(-) create mode 100644 frontend/src/views/Landing.vue diff --git a/frontend/index.html b/frontend/index.html index 9cb5720..4742673 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,7 +4,10 @@ - Space Booking + + + + ROA Space — Rezervarea spațiilor, fără bătăi de cap
diff --git a/frontend/src/App.vue b/frontend/src/App.vue index bb93e46..1596e66 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -49,7 +49,7 @@ -
+
@@ -72,6 +72,7 @@ const route = useRoute() const isPublicRoute = computed(() => route.meta.isPublic === true) const showSidebar = computed(() => authStore.isAuthenticated && !isPublicRoute.value) +const fullBleed = computed(() => route.meta.fullBleed === true) const { collapsed, toggleMobile } = useSidebar() const notifications = ref([]) @@ -186,6 +187,13 @@ onUnmounted(() => { padding: 2rem 1.5rem; } +/* Full-bleed pages (e.g. landing) manage their own width/padding */ +.content-full { + max-width: none; + margin: 0; + padding: 0; +} + /* Mobile header */ .mobile-header { display: none; diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index 96a0877..1b3f188 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -8,7 +8,9 @@ const router = createRouter({ routes: [ { path: '/', - redirect: '/dashboard' + name: 'Landing', + component: () => import('@/views/Landing.vue'), + meta: { requiresAuth: false, fullBleed: true } }, { path: '/login', @@ -135,7 +137,7 @@ router.beforeEach((to, _from, next) => { next('/dashboard') } else if (to.meta.requiresManager && !authStore.isAdminOrManager) { next('/dashboard') - } else if (to.path === '/login' && authStore.isAuthenticated) { + } else if ((to.path === '/login' || to.path === '/') && authStore.isAuthenticated) { next('/dashboard') } else { next() diff --git a/frontend/src/views/Landing.vue b/frontend/src/views/Landing.vue new file mode 100644 index 0000000..bd2e680 --- /dev/null +++ b/frontend/src/views/Landing.vue @@ -0,0 +1,664 @@ + + + + +