# Instructions

- Following Playwright test failed.
- Explain why, be concise, respect Playwright best practices.
- Provide a snippet of code with the fix, if possible.

# Test info

- Name: homePage.test.ts >> přepnutí ze světlého startu do tmavého režimu
- Location: tests/homePage.test.ts:137:5

# Error details

```
Test timeout of 30000ms exceeded.
```

```
Error: locator.click: Test timeout of 30000ms exceeded.
Call log:
  - waiting for locator('button.theme-switcher, .mode-switcher')

```

# Page snapshot

```yaml
- generic [active] [ref=e1]:
  - banner [ref=e2]:
    - generic [ref=e3]:
      - link "EndeavourOS Logo CZ" [ref=e4] [cursor=pointer]:
        - /url: /index.php
        - img "EndeavourOS Logo" [ref=e5]
        - generic [ref=e6]: CZ
      - navigation [ref=e7]:
        - list [ref=e8]:
          - listitem [ref=e9]:
            - link "Domů" [ref=e10] [cursor=pointer]:
              - /url: /index.php
          - listitem [ref=e11]:
            - link "EndeavourOS" [ref=e12] [cursor=pointer]:
              - /url: /endeavouros.php
          - listitem [ref=e13]:
            - link "Články" [ref=e14] [cursor=pointer]:
              - /url: /rozcestnik.php
          - listitem [ref=e15]:
            - link "Krátké návody" [ref=e16] [cursor=pointer]:
              - /url: /cheatsheet.php
          - listitem [ref=e17]:
            - link "Fórum" [ref=e18] [cursor=pointer]:
              - /url: https://forum.arch-linux.cz/
          - listitem [ref=e19]:
            - link "O nás" [ref=e20] [cursor=pointer]:
              - /url: /o-nas.php
      - generic [ref=e21]:
        - textbox "Hledat v článcích..." [ref=e23]
        - button "Sdílet stránku" [ref=e24] [cursor=pointer]:
          - generic [ref=e25]: 
          - text: Sdílet
        - button "Přepnout téma" [ref=e26] [cursor=pointer]:
          - generic [ref=e27]: 
  - main [ref=e28]:
    - generic [ref=e29]:
      - heading "🇨🇿 Vítám Tě na webu České komunity EndeavourOS! 🇨🇿" [level=1] [ref=e30]
      - paragraph [ref=e31]: Lehká, rychlá a moderní distribuce založená na Arch Linuxu.
    - heading "Je navržena tak, aby poskytovala uživatelům přístup k nejnovějším technologiím a softwaru, přičemž zachovává jednoduchost a stabilitu. Distribuce nabízí několik předinstalovaných prostředí." [level=4] [ref=e32]
    - heading "👇 Začínáme 👇" [level=2] [ref=e33]
    - generic [ref=e34]:
      - 'link "🚀 Přecházíme na Linux: Kompletní průvodce světem EndeavourOS a GNOME Máte pocit, že váš počítač s Windows je čím dál pomalejší? Štve vás, že si systém dělá, co chce, a vy nad ním nemáte kon... 2026-04-28" [ref=e35] [cursor=pointer]':
        - /url: "/article.php?slug=🚀 Přecházíme na Linux: Kompletní průvodce světem EndeavourOS a GNOME"
        - 'heading "🚀 Přecházíme na Linux: Kompletní průvodce světem EndeavourOS a GNOME" [level=3] [ref=e36]'
        - paragraph [ref=e37]: Máte pocit, že váš počítač s Windows je čím dál pomalejší? Štve vás, že si systém dělá, co chce, a vy nad ním nemáte kon...
        - generic [ref=e38]: 2026-04-28
      - link "⛵ Co je to ten Linux, EndeavourOS a GNOME? Malý slovníček pro úplné začátečníky Rozhodli jste se zkusit Linux, ale točí se vám hlava z názvů jako distribuce, prostředí, balíčky nebo AUR? Nebojte se. Ve světě Windows... 2026-04-28" [ref=e39] [cursor=pointer]:
        - /url: /article.php?slug=⛵ Co je to ten Linux, EndeavourOS a GNOME? Malý slovníček pro úplné začátečníky
        - heading "⛵ Co je to ten Linux, EndeavourOS a GNOME? Malý slovníček pro úplné začátečníky" [level=3] [ref=e40]
        - paragraph [ref=e41]: Rozhodli jste se zkusit Linux, ale točí se vám hlava z názvů jako distribuce, prostředí, balíčky nebo AUR? Nebojte se. Ve světě Windows...
        - generic [ref=e42]: 2026-04-28
      - 'link "🚀 Jak oživit počítač moderním systémem: Instalujeme EndeavourOS s GNOME Láká vás svět Linuxu, konkrétně pověstná rychlost a aktuálnost Arch Linuxu, ale odrazuje vás složitá instalace přes č... 2026-04-28" [ref=e43] [cursor=pointer]':
        - /url: "/article.php?slug=🚀 Jak oživit počítač moderním systémem: Instalujeme EndeavourOS s GNOME"
        - 'heading "🚀 Jak oživit počítač moderním systémem: Instalujeme EndeavourOS s GNOME" [level=3] [ref=e44]'
        - paragraph [ref=e45]: Láká vás svět Linuxu, konkrétně pověstná rychlost a aktuálnost Arch Linuxu, ale odrazuje vás složitá instalace přes č...
        - generic [ref=e46]: 2026-04-28
      - 'link "🔥 Záchranná brzda pro váš systém: Co je to LTS jádro a proč ho mít nainstalované Užíváte si rychlost EndeavourOS? Skvělé. Ale co když jednoho dne po aktualizaci zapnete počítač a nenaběhne grafika, nebo přesta... 2026-04-28" [ref=e47] [cursor=pointer]':
        - /url: "/article.php?slug=🔥 Záchranná brzda pro váš systém: Co je to LTS jádro a proč ho mít nainstalované"
        - 'heading "🔥 Záchranná brzda pro váš systém: Co je to LTS jádro a proč ho mít nainstalované" [level=3] [ref=e48]'
        - paragraph [ref=e49]: Užíváte si rychlost EndeavourOS? Skvělé. Ale co když jednoho dne po aktualizaci zapnete počítač a nenaběhne grafika, nebo přesta...
        - generic [ref=e50]: 2026-04-28
      - link "💽 Jak připojit nový SSD disk v EndeavourOS Určíme přidaný disk (dle názvu či velikosti), v mém případě ... 2026-04-28" [ref=e51] [cursor=pointer]:
        - /url: /article.php?slug=💽 Jak připojit nový SSD disk v EndeavourOS
        - heading "💽 Jak připojit nový SSD disk v EndeavourOS" [level=3] [ref=e52]
        - paragraph [ref=e53]: Určíme přidaný disk (dle názvu či velikosti), v mém případě ...
        - generic [ref=e54]: 2026-04-28
      - link "🧰 Jak lehce instalovat aplikace pomocí grafického správce Pamac Jak lehce instalovat aplikace pomocí grafického správce Pamac... 2026-04-28" [ref=e55] [cursor=pointer]:
        - /url: /article.php?slug=Jak lehce instalovat aplikace pomocí grafického správce Pamac
        - heading "🧰 Jak lehce instalovat aplikace pomocí grafického správce Pamac" [level=3] [ref=e56]
        - paragraph [ref=e57]: Jak lehce instalovat aplikace pomocí grafického správce Pamac...
        - generic [ref=e58]: 2026-04-28
      - link "💾 AUR packages a jak nainstalovat aplikaci pomocí YAY EndeavourOS jako všechny ostatní distribuce rodiny Arch Linuxnabízí obří seznam balíčků... 2026-04-28" [ref=e59] [cursor=pointer]:
        - /url: /article.php?slug=AUR packages a jak nainstalovat aplikaci pomocí YAY
        - heading "💾 AUR packages a jak nainstalovat aplikaci pomocí YAY" [level=3] [ref=e60]
        - paragraph [ref=e61]: EndeavourOS jako všechny ostatní distribuce rodiny Arch Linuxnabízí obří seznam balíčků...
        - generic [ref=e62]: 2026-04-28
      - link "🚨 Jak zapnout upozornění na nové aktualizace Jak zapnout upozornění na nové aktualizace... 2026-04-28" [ref=e63] [cursor=pointer]:
        - /url: /article.php?slug=Jak zapnout upozornění na nové aktualizace
        - heading "🚨 Jak zapnout upozornění na nové aktualizace" [level=3] [ref=e64]
        - paragraph [ref=e65]: Jak zapnout upozornění na nové aktualizace...
        - generic [ref=e66]: 2026-04-28
      - link "🐧 Linux pacman příkazy Linux pacman příkazy. Pacman je nedílnou součástí Arch Linuxu a distribucí na Arc... 2026-04-28" [ref=e67] [cursor=pointer]:
        - /url: /article.php?slug=🐧 Linux pacman příkazy
        - heading "🐧 Linux pacman příkazy" [level=3] [ref=e68]
        - paragraph [ref=e69]: Linux pacman příkazy. Pacman je nedílnou součástí Arch Linuxu a distribucí na Arc...
        - generic [ref=e70]: 2026-04-28
  - contentinfo [ref=e71]:
    - generic [ref=e72]:
      - paragraph [ref=e73]: © 2026 EndeavourOS CZ Komunita. Vytvořeno s láskou k Linuxu ❤️.
      - paragraph [ref=e74]:
        - link "Zásady ochrany osobních údajů" [ref=e75] [cursor=pointer]:
          - /url: /privacy-policy.php
```

# Test source

```ts
  55  |       await expect(page).toHaveURL(new RegExp(`.*${homePage.url}/rozcestnik`));
  56  |     });
  57  | 
  58  |     test('navigation to Krátké návody', async ({ page }) => {
  59  |       await homePage.clickMenuItem('Krátké návody');
  60  |       await expect(page).toHaveURL(new RegExp(`.*${homePage.url}/cheatsheet`));
  61  |     });
  62  | 
  63  |     // Seznam externích odkazů, které chceme prověřit
  64  |     // Nyní nejde nutno doopravit
  65  |     // test('externí odkazy v menu jsou platné', async ({ page, request }) => {
  66  |     //   const homePage = new HomePage(page);
  67  |     //   await homePage.navigate();
  68  |     
  69  |       // Seznam externích odkazů, které chceme prověřit
  70  |       // test('kontrola externích odkazů na zdraví (status 200)', async ({ page, request }) => {
  71  |       //   const homePage = new HomePage(page);
  72  |       //   await homePage.navigate();
  73  |       
  74  |       //   for (const link of externalLinks) {
  75  |       //     // Ověříme, že text tlačítka je na stránce vidět
  76  |       //     const href = await homePage.getMenuItemHref(link.name);
  77  |           
  78  |       //     // Ověříme, že href v HTML odpovídá tomu, co máme v datech
  79  |       //     expect(href).toBe(link.url);
  80  |       
  81  |       //     // Provedeme rychlou kontrolu, zda link není "mrtvý"
  82  |       //     const response = await request.get(link.url);
  83  |       //     expect(response.ok(), `Odkaz ${link.name} na adrese ${link.url} vrací chybu!`).toBeTruthy();
  84  |           
  85  |       //     console.log(`Log: Odkaz "${link.name}" je v pořádku.`);
  86  |       //   }
  87  |       // });
  88  | 
  89  |       //funkční řešení - otevře web
  90  |       test('externí Fórum -> odkaz má správnou adresu', async () => {
  91  |         const href = await homePage.getMenuItemLinkHref('Fórum'); // Příklad
  92  |         expect(href).toBe('https://forum.arch-linux.cz/'); 
  93  |       });
  94  |     
  95  |     test('navigation to O nás', async ({ page }) => {
  96  |       await homePage.clickMenuItem('O nás');
  97  |       await expect(page).toHaveURL(new RegExp(`.*${homePage.url}/o-nas`));
  98  |     });
  99  |   });
  100 | 
  101 |   test.describe('Theme', () => {
  102 |     let homePage: HomePage;
  103 | 
  104 |     test.beforeEach(async ({ page }) => {
  105 |       homePage = new HomePage(page);
  106 |       await homePage.navigate();
  107 |     });
  108 |     test('switch theme sun', async ({ page }) => {
  109 |       await homePage.switchThemeFunction()
  110 |     })
  111 |     
  112 |   })
  113 | 
  114 |   test.describe('Carts (Karty) na HomePage', () => {
  115 |     let homePage: HomePage;
  116 | 
  117 |     test.beforeEach(async ({ page }) => {
  118 |       homePage = new HomePage(page);
  119 |       await homePage.navigate();
  120 |     });
  121 | 
  122 |     // Otestuje textace na kartách
  123 |     test('should display all cards correctly', async () => {
  124 |       for (const card of homePageCards) {
  125 |         // Používáme naši POM metodu pro každou kartu
  126 |         await homePage.verifyCardContent(card.title, card.description);
  127 |       }
  128 |     });
  129 | 
  130 |   //   test('should navigate after clicking on a specific card', async ({ page }) => {
  131 |   //     // Příklad pro jednu konkrétní kartu
  132 |   //     await homePage.clickCardButton('Lehkost a rychlost');
  133 |   //     // Zde by následoval expect na novou URL
  134 |   //   });
  135 |    });
  136 | });
  137 | test('přepnutí ze světlého startu do tmavého režimu', async ({ page }) => {
  138 |   // 1. FÁZE: Vynucení světlého režimu před startem
  139 |   // EndeavourOS.cz je defaultně tmavý, takže mu musíme zakázat třídu 'dark'
  140 |   await page.addInitScript(() => {
  141 |     document.documentElement.classList.remove('dark');
  142 |     window.localStorage.setItem('theme', 'light');
  143 |   });
  144 | 
  145 |   // 2. FÁZE: Načtení stránky
  146 |   await page.goto('https://endeavouros.cz');
  147 | 
  148 |   // Kontrola, že jsme skutečně začali ve světlém (třída 'dark' chybí)
  149 |   await expect(page.locator('html')).not.toHaveClass(/dark/);
  150 | 
  151 |   // 3. FÁZE: Akce - kliknutí na přepínač
  152 |   // Na webu EndeavourOS.cz je to obvykle tlačítko v menu nebo záhlaví
  153 |   // Tip: Použijeme ARIA label nebo ikonu, pokud známe selektor
  154 |   const themeSwitcher = page.locator('button.theme-switcher, .mode-switcher'); 
> 155 |   await themeSwitcher.click();
      |                       ^ Error: locator.click: Test timeout of 30000ms exceeded.
  156 | 
  157 |   // 4. FÁZE: Ověření výsledku
  158 |   // Nyní by se měla třída 'dark' vrátit na své místo
  159 |   await expect(page.locator('html')).toHaveClass(/dark/);
  160 |   
  161 |   // A můžeme ověřit, že se změnila barva pozadí na tmavou
  162 |   await expect(page.locator('body')).toHaveCSS('background-color', 'rgb(25, 20, 36)');
  163 | });
  164 | 
  165 | 
  166 | 
```