3bfa54b4b3
- Nuxt 3 project with @nuxtjs/tailwindcss module - Tailwind CSS config with A0 Dark Theme design tokens (CSS custom properties) - AppHeader: sticky, logo, nav, phone, social icons, mobile burger menu - AppFooter: 4-column grid (Navigation, Kontakt, Rechtliches, Social) - HmsLogo: SVG with orange #EC6925 border - error.vue: 404 page with Seite nicht gefunden - robots.txt server route: Disallow: / - Meta: noindex, nofollow, noarchive, nosnippet - JSON-LD: LocalBusiness schema - OpenGraph tags - routeRules: SSR/CSR per route - Shared components: LoadingSkeleton, EmptyState, ErrorState, LegalContentPage, SpeakerIcon - 42 vitest tests passing - Build: 0 errors
31 lines
954 B
Vue
31 lines
954 B
Vue
<template>
|
|
<div class="flex flex-col items-center justify-center py-12 text-center">
|
|
<div class="w-16 h-16 mb-4 flex items-center justify-center rounded-full bg-surface">
|
|
<svg class="w-8 h-8 text-secondary" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24" aria-hidden="true">
|
|
<path stroke-linecap="round" stroke-linejoin="round" d="M9 17v-6a2 2 0 012-2h2a2 2 0 012 2v6m-6 0h6m-6 0H7m14 0a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v8a2 2 0 002 2h12z"/>
|
|
</svg>
|
|
</div>
|
|
<h2 class="text-lg font-bold text-text mb-2">{{ title }}</h2>
|
|
<p class="text-text-muted text-sm mb-6 max-w-sm">{{ message }}</p>
|
|
<button
|
|
v-if="ctaText"
|
|
class="btn-primary"
|
|
@click="$emit('action')"
|
|
>
|
|
{{ ctaText }}
|
|
</button>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
defineProps<{
|
|
title: string;
|
|
message: string;
|
|
ctaText?: string;
|
|
}>();
|
|
|
|
defineEmits<{
|
|
action: [];
|
|
}>();
|
|
</script>
|