[
  {
    "id": "heading",
    "title": "Nagłówek",
    "source": {
      "url": "https://audyt.dealyo.io/",
      "path": "dealyo-audyt-cloudflare/public/index.html",
      "selector": "#hero > .lp-hero-copy; #problem > .lp-section-head"
    },
    "preview": "heading.html",
    "snippetFile": "heading.snippet.html",
    "dependencies": [
      "source-critical.css",
      "landing.css",
      "booking.css",
      "preview.css",
      "assets/general-sans-400.woff2",
      "assets/general-sans-500.woff2",
      "assets/general-sans-600.woff2",
      "assets/general-sans-700.woff2"
    ],
    "motion": {
      "component": "Statyczny nagłówek. Bieżący loader celowo nie uruchamia animacji wejścia przy przewijaniu.",
      "sourceEvidence": "motion-loader.js: Graphic loops and disclosure interactions only; page content stays static on scroll. motion.js nie jest importowany.",
      "scripts": [],
      "reducedMotion": "Źródłowe media queries zachowane w pełnej kaskadzie; FAQ odczytuje prefers-reduced-motion i pomija WAAPI. Żadne nowe animacje nie zostały dodane."
    },
    "content": "Struktura i klasy z bieżącego audytu. Treści oferty, wyniki i deklaracje zastąpione neutralnymi polami. Pola oraz opcje formularza zachowane. Demo nie wysyła danych.",
    "status": "Istniejący komponent — kopia źródła; CTA radius 0 według decyzji Daniela."
  },
  {
    "id": "cta",
    "title": "CTA",
    "source": {
      "url": "https://audyt.dealyo.io/",
      "path": "dealyo-audyt-cloudflare/public/index.html",
      "selector": "#hero .lp-hero-action"
    },
    "preview": "cta.html",
    "snippetFile": "cta.snippet.html",
    "dependencies": [
      "source-critical.css",
      "landing.css",
      "booking.css",
      "preview.css",
      "assets/general-sans-400.woff2",
      "assets/general-sans-500.woff2",
      "assets/general-sans-600.woff2",
      "assets/general-sans-700.woff2",
      "form-demo.js",
      "assets/dealyo-logo.svg"
    ],
    "motion": {
      "component": "CTA hero ma transition:none i transform:none przy hover w końcowej kaskadzie. Kliknięcie otwiera lokalny podgląd źródłowego formularza.",
      "sourceEvidence": "Wynik live: transition none; final firecrawl-ui cascade disables .lp-redesign .button hover transform.",
      "scripts": [
        "form-demo.js"
      ],
      "reducedMotion": "Źródłowe media queries zachowane w pełnej kaskadzie; FAQ odczytuje prefers-reduced-motion i pomija WAAPI. Żadne nowe animacje nie zostały dodane."
    },
    "content": "Struktura i klasy z bieżącego audytu. Treści oferty, wyniki i deklaracje zastąpione neutralnymi polami. Pola oraz opcje formularza zachowane. Demo nie wysyła danych.",
    "status": "Istniejący komponent — kopia źródła; CTA radius 0 według decyzji Daniela.",
    "presentationAdaptation": "W podglądzie do 480 px opcje budżetu są w jednej kolumnie, a etykiety kwot mają spacje nierozdzielające. Wartości opcji i logika formularza pozostają niezmienione. Pola select zachowują wysokość 50 px i proste narożniki również w WebKit; wybór opcji pozostaje natywny. Długa wybrana odpowiedź jest pokazana w całości pod selectem, gdy nie mieści się w polu. Błędy walidacji są wyświetlane przy polach i powiązane przez aria-describedby; nie zmieniono wymaganych danych. Obsługa ograniczonej wysokości nad klawiaturą: modal dopasowany do visualViewport, jeden rząd akcji i przewijanie pola wraz z błędem. Podgląd w katalogu zachowuje przewijanie strony. Adaptacja użytkowa, bez zmiany pól ani danych."
  },
  {
    "id": "faq",
    "title": "FAQ",
    "source": {
      "url": "https://audyt.dealyo.io/",
      "path": "dealyo-audyt-cloudflare/public/index.html",
      "selector": "#pytania.lp-faq"
    },
    "preview": "faq.html",
    "snippetFile": "faq.snippet.html",
    "dependencies": [
      "source-critical.css",
      "landing.css",
      "booking.css",
      "preview.css",
      "assets/general-sans-400.woff2",
      "assets/general-sans-500.woff2",
      "assets/general-sans-600.woff2",
      "assets/general-sans-700.woff2",
      "motion-loader.js",
      "disclosure-motion.js"
    ],
    "motion": {
      "component": "Oryginalny disclosure-motion.js: odpowiedź wchodzi z translateY(16px), opacity .6→1; zamknięcie translateY(-8px), 120ms; panel i przesunięcia rodzeństwa 320ms, dalsze sekcje 500ms; cubic-bezier(.2,.7,.2,1). Jedna odpowiedź otwarta.",
      "sourceEvidence": "Exact copy disclosure-motion.js?v=6; initialized through exact motion-loader.js?v=9.",
      "scripts": [
        "motion-loader.js",
        "disclosure-motion.js"
      ],
      "reducedMotion": "Źródłowe media queries zachowane w pełnej kaskadzie; FAQ odczytuje prefers-reduced-motion i pomija WAAPI. Żadne nowe animacje nie zostały dodane."
    },
    "content": "Struktura i klasy z bieżącego audytu. Treści oferty, wyniki i deklaracje zastąpione neutralnymi polami. Pola oraz opcje formularza zachowane. Demo nie wysyła danych.",
    "status": "Istniejący komponent — kopia źródła; CTA radius 0 według decyzji Daniela."
  },
  {
    "id": "formularz",
    "title": "Formularz",
    "source": {
      "url": "https://audyt.dealyo.io/",
      "path": "dealyo-audyt-cloudflare/public/index.html",
      "selector": "#lead-dialog + app.js renderStep()"
    },
    "preview": "formularz.html",
    "snippetFile": "formularz.snippet.html",
    "dependencies": [
      "source-critical.css",
      "landing.css",
      "booking.css",
      "preview.css",
      "assets/general-sans-400.woff2",
      "assets/general-sans-500.woff2",
      "assets/general-sans-600.woff2",
      "assets/general-sans-700.woff2",
      "form-demo.js",
      "assets/dealyo-logo.svg"
    ],
    "motion": {
      "component": "Cztery rzeczywiste kroki, walidacja i pasek postępu z bieżącego renderera. Brak dodanych animacji przejścia między krokami. Źródłowa kaskada zachowana; wynik live dla pól obejmuje transform .2s i opacity .2s. Demo kończy się lokalnym podsumowaniem.",
      "sourceEvidence": "app.js renderStep(), attachPhoneValidation(), renderPreviewSummary(); pełny landing.css zachowuje wszystkie reguły formularza i ich kolejność. W źródłowym rendererze przycisk Dalej używa znaku → przez next.textContent.",
      "scripts": [
        "form-demo.js"
      ],
      "reducedMotion": "Źródłowe media queries zachowane w pełnej kaskadzie; FAQ odczytuje prefers-reduced-motion i pomija WAAPI. Żadne nowe animacje nie zostały dodane."
    },
    "content": "Struktura i klasy z bieżącego audytu. Treści oferty, wyniki i deklaracje zastąpione neutralnymi polami. Pola oraz opcje formularza zachowane. Demo nie wysyła danych.",
    "status": "Istniejący komponent — kopia źródła; CTA radius 0 według decyzji Daniela.",
    "presentationAdaptation": "W podglądzie do 480 px opcje budżetu są w jednej kolumnie, a etykiety kwot mają spacje nierozdzielające. Wartości opcji i logika formularza pozostają niezmienione. Pola select zachowują wysokość 50 px i proste narożniki również w WebKit; wybór opcji pozostaje natywny. Długa wybrana odpowiedź jest pokazana w całości pod selectem, gdy nie mieści się w polu. Błędy walidacji są wyświetlane przy polach i powiązane przez aria-describedby; nie zmieniono wymaganych danych. Obsługa ograniczonej wysokości nad klawiaturą: modal dopasowany do visualViewport, jeden rząd akcji i przewijanie pola wraz z błędem. Podgląd w katalogu zachowuje przewijanie strony. Adaptacja użytkowa, bez zmiany pól ani danych."
  }
]
