--- phase: 06-blog-pages plan: 04 type: execute wave: 3 depends_on: - 06-01 - 06-02 files_modified: - app/pages/blog/[slug].vue - app/components/BlogToc.vue - app/components/BlogPrevNext.vue autonomous: true requirements: - BLOG-03 - BLOG-06 tags: - blog - article-chrome - toc - prev-next - intersection-observer must_haves: truths: - "`curl localhost:3000/fr/blog/test-kotlin-syntax` retourne HTML SSR avec (ordre vertical) : UBreadcrumb (Accueil → Blog → titre) → H1 du titre → ligne meta (date formatée + · + reading time) → tags UBadge (si présents) → cover image NuxtImg (si frontmatter.image) → body markdown dans `.prose` → BlogPrevNext (en bas)" - "`curl localhost:3000/en/blog/test-kotlin-syntax` retourne la même structure avec textes EN (breadcrumb Home → Blog → title)" - "La page article filtre le `draft` dans la query de SURROUND (prev/next) — les articles draft:true ne viennent pas peupler la navigation. La query `.path(path).first()` n'a PAS le filtre (URL directe accessible pour les tests, D-14)" - "Sur desktop (>= lg), une `