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
30 lines
922 B
Vue
30 lines
922 B
Vue
<template>
|
|
<div class="max-w-3xl mx-auto">
|
|
<!-- Loading State -->
|
|
<div v-if="loading" class="space-y-4">
|
|
<div class="skeleton-shimmer rounded-md" style="height: 32px; width: 60%" />
|
|
<div class="skeleton-shimmer rounded-md" style="height: 20px" />
|
|
<div class="skeleton-shimmer rounded-md" style="height: 20px; width: 90%" />
|
|
<div class="skeleton-shimmer rounded-md" style="height: 20px" />
|
|
<div class="skeleton-shimmer rounded-md" style="height: 20px; width: 80%" />
|
|
</div>
|
|
|
|
<!-- Content State -->
|
|
<article v-else>
|
|
<h1 class="text-3xl font-bold text-text mb-6">{{ title }}</h1>
|
|
<div class="prose prose-invert max-w-none text-text-muted" v-html="content" />
|
|
</article>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
withDefaults(defineProps<{
|
|
title: string;
|
|
content?: string;
|
|
loading?: boolean;
|
|
}>(), {
|
|
content: "",
|
|
loading: false,
|
|
});
|
|
</script>
|