feat: landing refăcut + înveliș public unificat pentru login/register/book

Landing:
- hero cu un singur CTA (scoase „Vezi cum arată", „Rezervă fără cont" și nota)
- „Spații deschise rezervării acum" pe poziția 2, în bandă evidențiată cu accent;
  listează toate proprietățile publice active (fără filtrul list_on_landing)
- showcase-ul mutat în bandă neutră etichetată „Demonstrație" ca să nu se
  confunde cu controale reale

Pagini publice:
- PublicNav.vue + PublicFooter.vue extrase și refolosite de Landing, LegalPage
  și noul PublicShell.vue (login/register/book primesc header/footer de landing,
  cu cele 8 teme; tokenii --color-* remapați la paleta landing în scope-ul shell)
- pe mobil: nav compact cu meniu hamburger (drawer ancorat dreapta, iconițe
  lucide, închidere la tap în afară/Escape); logo-ul Romfast rămâne în footer

Fix-uri:
- QR-ul proprietății encodează URL-ul cu slug (fallback pe id)
- deep-link-urile către rutele manager/admin nu mai sar la /dashboard:
  guard-ul așteaptă authStore.ready înainte de verificarea rolurilor
- drawer-ul nu se mai închidea singur la tap pe iconiță (listener pe pointerdown
  + gardă pentru target detașat după re-render)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Claude Agent
2026-07-13 08:56:23 +00:00
parent 4a05b0887e
commit 0b497157ad
12 changed files with 555 additions and 300 deletions

View File

@@ -1,4 +1,5 @@
<template>
<PublicShell hide-register>
<div class="register-container">
<div class="register-card card">
<h2>Create Account</h2>
@@ -86,12 +87,14 @@
</p>
</div>
</div>
</PublicShell>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { useRouter } from 'vue-router'
import { authApi, handleApiError } from '@/services/api'
import PublicShell from '@/components/PublicShell.vue'
const router = useRouter()
@@ -130,11 +133,11 @@ const handleRegister = async () => {
<style scoped>
.register-container {
flex: 1;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
padding: 1rem;
padding: 3rem 1rem;
}
.register-card {