From cebcfcab719630c0d86b706102feaa6e2995f36b Mon Sep 17 00:00:00 2001 From: TheFlow Date: Fri, 17 Oct 2025 08:56:08 +1300 Subject: [PATCH] fix(i18n): completely rewrite language selector structure to fix desktop rendering MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Critical Issue: - Desktop showed NOTHING on initial load after cache clear - Then both dropdown AND icons appeared together - Expected: Desktop = dropdown ONLY, Mobile = icons ONLY Root Cause Analysis: 1. Wrapper div `language-selector` had no display control 2. Nested structure with `hidden md:block` on desktop container 3. Nested structure with `md:hidden` wrapping flex container on mobile 4. Tailwind `hidden` class uses `display: none !important` 5. Complex nesting caused CSS specificity and timing issues 6. Both containers fought for visibility control Previous Structure (BROKEN): ```html
...buttons...
``` New Structure (FIXED): ```html
...buttons...
``` Key Improvements: 1. Removed wrapper div - eliminated ambiguity 2. Made both containers direct siblings in parent 3. Desktop: `hidden md:flex md:relative` - hidden on mobile (display: none) - flex on desktop (display: flex at md+) - relative positioning only on desktop 4. Mobile: `flex gap-1 md:hidden` - flex with gap on mobile (display: flex) - hidden on desktop (display: none at md+) 5. Removed extra nested div wrappers 6. Each container explicitly controls own visibility AND layout Technical Details: - Tailwind mobile-first: base = mobile, md: = desktop (≥768px) - `hidden` = display: none !important (all sizes) - `md:flex` = display: flex at ≥768px - `md:hidden` = display: none at ≥768px - Using `flex` instead of `block` for better layout control - Siblings don't interfere with each other's display logic Result: - Desktop (≥768px): Dropdown visible (flex), Icons hidden ✓ - Mobile (<768px): Icons visible (flex), Dropdown hidden ✓ - Clean, predictable behavior with no timing issues 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- public/js/components/language-selector.js | 82 +++++++++++------------ 1 file changed, 39 insertions(+), 43 deletions(-) diff --git a/public/js/components/language-selector.js b/public/js/components/language-selector.js index e7ea27b5..c8b7c61a 100644 --- a/public/js/components/language-selector.js +++ b/public/js/components/language-selector.js @@ -18,51 +18,47 @@ const currentLang = (window.I18n && window.I18n.currentLang) || 'en'; const selectorHTML = ` -
- -