From 457deedb9169beecbbfe075aad85e7eeebe9afc7 Mon Sep 17 00:00:00 2001 From: TheFlow Date: Fri, 17 Oct 2025 09:00:32 +1300 Subject: [PATCH] fix(i18n): use block/hidden pattern to prevent both selectors showing on desktop MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue Confirmed by User: - After F12 cache clear, initial load works - BUT on desktop, both dropdown AND icons are rendering together - Expected: Desktop shows ONLY dropdown, Mobile shows ONLY icons Previous Attempt Failed: - Desktop: `hidden md:flex md:relative` - Mobile: `flex gap-1 md:hidden` - Problem: `flex` as base class on mobile container created specificity conflict - Both containers showed on desktop despite `md:hidden` Root Cause: - Mixing layout classes (flex) with visibility classes (hidden) on same element - Tailwind applies base styles first, then responsive modifiers - `flex` set display:flex, then `md:hidden` tried to override - CSS specificity and cascade caused unpredictable behavior Solution - Separate Display Control from Layout: Desktop Container: ```html ``` Mobile Container: ```html
...buttons...
``` Why This Works: 1. Parent divs ONLY control visibility (hidden/block/md:hidden/md:block) 2. Child divs ONLY control layout (relative/flex/gap) 3. No conflicting display properties on same element 4. Clean separation of concerns 5. Predictable Tailwind cascade behavior Behavior: - Mobile (<768px): - Desktop container: `hidden` (not visible) ✓ - Mobile container: `block` (visible) ✓ - Desktop (≥768px): - Desktop container: `md:block` (visible) ✓ - Mobile container: `md:hidden` (not visible) ✓ Technical Notes: - `hidden` = display: none !important (base) - `md:block` = display: block at ≥768px - `md:hidden` = display: none !important at ≥768px - No flex/relative on visibility-controlling elements - Nested structure ensures proper cascade 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- public/js/components/language-selector.js | 80 ++++++++++++----------- 1 file changed, 42 insertions(+), 38 deletions(-) diff --git a/public/js/components/language-selector.js b/public/js/components/language-selector.js index c8b7c61a..da18537e 100644 --- a/public/js/components/language-selector.js +++ b/public/js/components/language-selector.js @@ -18,47 +18,51 @@ const currentLang = (window.I18n && window.I18n.currentLang) || 'en'; const selectorHTML = ` - -