=============================================================== CAMBIO: MENU HAMBURGER + NAVEGACION MOVIL Fecha: 2026-05-01 =============================================================== -------------------------------------------------------------- PROBLEMA QUE SE RESOLVIA -------------------------------------------------------------- En movil las dos sidebars (izquierda y derecha) ocupaban espacio y hacian el layout inutilizable. El contenido principal quedaba comprimido o directamente fuera de pantalla. Ademas los links de navegacion (inbox, PM, publicar, buscar) estaban en el header pero sin espacio para verse bien. -------------------------------------------------------------- SOLUCION: MENU HAMBURGER PURO CSS -------------------------------------------------------------- Sin JavaScript. Mecanismo: checkbox oculto + selector CSS ~ input#mobile-menu-toggle (primer hijo de body) #mobile-menu-toggle:checked ~ .main-content .sidebar-panel { display: block; position: fixed; ... } El checkbox esta antes de .main-content en el DOM, por lo que el selector general sibling (~) puede alcanzarlo. -------------------------------------------------------------- ESTRUCTURA HTML (main_views.js ~linea 693) -------------------------------------------------------------- body input#mobile-menu-toggle.mobile-menu-checkbox <- oculto siempre div.header div.top-bar-left a.logo-icon (logo 38px) label.mobile-menu-btn [☰/✕] <- toggle nav > ul (inbox, PM, publicar) <- oculto en movil div.top-bar-right nav > ul (tags, search) <- oculto en movil div.panel-quicklinks <- VISIBLE en movil (2a fila header) a.panel-quicklink [☂ Inbox] a.panel-quicklink [ꕕ PM] a.panel-quicklink [❂ Publicar] a.panel-quicklink [ꔅ Buscar] div.main-content div.sidebar-panel <- DRAWER hamburger label.mobile-menu-close [✕ Cerrar] div.sidebar-left nav > ul > navGroups: Personal (perfil, cv, agenda, wallet, modules, settings) Content (mentions, latest, threads, topics, popular, multiverse) Governance (inhabitants, tribes, parliament, courts) Office (votations, events, tasks, reports) Tools (AI, stats, blockexplorer, cipher, legacy) div.sidebar-right nav > ul > navGroups: Network (activity, trending, opinions, forum, invites, peers) Creative (feed, pixelia) Economy (banking, market, jobs...) <- solo si modulos activos Media (audios, bookmarks, docs, images, videos) main.main-column <- contenido principal label.mobile-menu-backdrop <- capa oscura cierra el menu al tocar -------------------------------------------------------------- CSS DESKTOP (style.css) -------------------------------------------------------------- .sidebar-panel { display: contents; } /* display:contents hace que el div sea transparente — sus hijos actuan como flex items directos de .main-content */ /* Orden visual: izquierda | contenido | derecha */ .sidebar-left { order: 1; } .main-column { order: 2; } .sidebar-right { order: 3; } .panel-quicklinks { display: none; } /* oculto en desktop */ -------------------------------------------------------------- CSS MOVIL (mobile.css) -------------------------------------------------------------- /* Header: una sola fila */ .header { flex-wrap: wrap; } .top-bar-left { flex: 1; flex-wrap: nowrap; } .top-bar-left nav, .top-bar-right { display: none; } /* Segunda fila del header: quick links */ .panel-quicklinks { flex: 0 0 100%; /* fila completa */ display: flex; flex-wrap: nowrap; overflow-x: auto; } .panel-quicklink { border-radius: 20px; padding: 7px 12px; border: 1px solid #555; white-space: nowrap; } /* Sidebars ocultas por defecto */ .sidebar-panel { display: none; } .sidebar-panel .sidebar-left, .sidebar-panel .sidebar-right { display: block; background: none; border: none; } /* Panel abierto */ #mobile-menu-toggle:checked ~ .main-content .sidebar-panel { display: block; position: fixed; top: 0; left: 0; width: 82vw; max-width: 320px; height: 100vh; overflow-y: auto; z-index: 200; } /* Botones de grupo en el panel */ .sidebar-panel .oasis-nav-header { border-radius: 12px; padding: 11px 14px; font-weight: 700; font-size: 0.92rem; } -------------------------------------------------------------- THEMING (OasisMobile.css) -------------------------------------------------------------- .panel-quicklink -> background #2a2a2a, color #FFD700 .sidebar-panel .oasis-nav-header -> background #252500, color #FFD700 #mobile-menu-toggle:checked ~ .main-content .sidebar-panel -> background #1A1A1A -------------------------------------------------------------- COMPORTAMIENTO ACORDEON EN EL PANEL -------------------------------------------------------------- Los grupos de nav usan el mismo mecanismo de acordeon que el desktop (input[type=checkbox] + label). En movil: - Grupos colapsados por defecto al abrir el panel - Tap en el header del grupo lo expande - Flecha ▾ rota 180° cuando esta abierto - No hay forzado de expansion (se elimino el override de max-height) CSS nativo (style.css): .oasis-nav-list { max-height: 0; overflow: hidden; } .oasis-nav-toggle:checked + .oasis-nav-header + .oasis-nav-list { max-height: 1000px; } -------------------------------------------------------------- QR EN PUBS (invites_view.js) -------------------------------------------------------------- renderPubTable convertida a async. Por cada pub: QRCode.toString(pubItem.key, {type:'svg'}) Mostrado con
/ igual que el perfil y tribes. Solo visible cuando hay pubs conectados (gossip.json no vacio). -------------------------------------------------------------- NOTAS -------------------------------------------------------------- - Economy group no aparece -> modulos banking/market/jobs desactivados Se activan en /modules -> aparecen automaticamente - El selector ~ funciona porque el checkbox es el primer hijo de body y .main-content es su sibling (hermano) posterior - display:contents tiene soporte 96%+ (todos los navegadores modernos) - Sin JavaScript en ninguna parte del menu hamburger ni acordeon