From b84a8856dcaee915a213ca13a790b249bf9a62ee Mon Sep 17 00:00:00 2001 From: hacklab Date: Tue, 20 Oct 2026 14:23:26 +0200 Subject: [PATCH] skin Activista, colores en todo y barra de unirse a un pub Skin: uno solo en el movil, Activista, lo mas simple posible: letra del sistema, titulos en negrita sin mayusculas, bordes de 1px, sin sombras ni botones que se hunden; el principal con el color de resalte. Sale de Acampada (themes/Activista.css y styles/activista.css); fuera Acampada y OasisMobile del selector, la fuente Anton y las miniaturas. Quien tuviera otro skin pasa a Activista al abrir. Los colores se aplican siempre; rojo de texto que se lee en las paletas oscuras. Perfil de uso: Activismo por defecto en la config de serie. Pub: barra fija encima de la barra de abajo mientras se une y descarga la red, con la fase, el porcentaje y, si falla, por que (sin red o pub caido, pub sin copia, otro corte). Se pone al dia sin recargar (public/js/mobile_pub.js y /mobile/pub-status); sale al tocar unirse y, si no arranca nada, explica las causas habituales. Fuera la recarga cada 5s de la bienvenida y de Copias en el movil. backend.js pasa backupModel a fork_routes.js en la linea que lo monta. Actividad: fichas de filtro en rejilla de tres y botones de cada tarjeta en una fila. Enlaces web de 24px. --- GUIA_DE_DESARROLLO.md | 26 ++- docs/guia_pdf/guia.html | 2 +- src/backend/backend.js | 2 +- src/backend/fork_routes.js | 24 ++- src/backend/mobile_layer.js | 14 ++ src/client/assets/fonts/Anton-Regular.ttf | Bin 170812 -> 0 bytes src/client/assets/fonts/OFL.txt | 93 -------- src/client/assets/images/theme-acampada.png | Bin 53215 -> 0 bytes .../assets/images/theme-oasismobile.png | Bin 58602 -> 0 bytes .../{hive_acampada.css => activista.css} | 87 ++++---- src/client/assets/styles/mobile_base.css | 10 +- src/client/assets/styles/mobile_ux.css | 149 ++++++++----- .../themes/{Acampada.css => Activista.css} | 142 ++++++------- src/client/assets/translations/i18n_fork.js | 198 ++++++++++++++++-- src/client/public/js/mobile_pub.js | 72 +++++++ src/configs/oasis-config.json | 60 +++--- src/models/fork_workflows.js | 2 +- src/models/workflows_model.js | 12 +- src/views/backup_view.js | 3 +- src/views/hive_views.js | 5 +- src/views/main_views.js | 23 +- src/views/mobile_pubbar.js | 120 +++++++++++ src/views/mobile_settings.js | 24 +-- src/views/mobile_ui.js | 2 +- src/views/welcome_view.js | 3 +- 25 files changed, 702 insertions(+), 371 deletions(-) delete mode 100644 src/client/assets/fonts/Anton-Regular.ttf delete mode 100644 src/client/assets/fonts/OFL.txt delete mode 100644 src/client/assets/images/theme-acampada.png delete mode 100644 src/client/assets/images/theme-oasismobile.png rename src/client/assets/styles/{hive_acampada.css => activista.css} (91%) rename src/client/assets/themes/{Acampada.css => Activista.css} (59%) create mode 100644 src/client/public/js/mobile_pub.js create mode 100644 src/views/mobile_pubbar.js diff --git a/GUIA_DE_DESARROLLO.md b/GUIA_DE_DESARROLLO.md index 132b8ad..392cc6c 100644 --- a/GUIA_DE_DESARROLLO.md +++ b/GUIA_DE_DESARROLLO.md @@ -44,8 +44,9 @@ Dónde va cada cosa: | Quiero... | Va en | |---|---| -| Cambiar colores, tamaños, márgenes | `styles/mobile_ux.css` (los dos skins) o `hive_acampada.css` (solo Acampada) | -| Cambiar la paleta de Acampada | Variables `--a26-*` de `themes/Acampada.css`; las elegibles, en `mobile_settings.js` | +| Cambiar colores, tamaños, márgenes | `styles/mobile_ux.css` (piezas) o `styles/activista.css` (lanzador y barras) | +| Cambiar los colores de serie o las paletas | Variables `--a26-*` de `themes/Activista.css`; las paletas, en `mobile_settings.js` | +| La barra de unirse a un pub | `views/mobile_pubbar.js` y `public/js/mobile_pub.js` | | Otro HTML en una pantalla del dev | Función en `views/mobile_ui.js` + una línea en su vista | | Una pantalla nueva | Vista propia en `views/mobile_*.js` + ruta en `fork_routes.js` | | Algo en Ajustes del móvil | `views/mobile_settings.js` | @@ -144,13 +145,20 @@ Aquí se puede hacer lo que haga falta. tarjetas, formularios). Se carga siempre en el móvil, antes del skin. - `src/client/assets/styles/mobile_ux.css`: márgenes, letra, botones y todas las piezas nuevas. Vale para los dos skins de móvil. -- `src/client/assets/themes/Acampada.css` y `styles/hive_acampada.css`: el skin - Acampada. +- `src/client/assets/themes/Activista.css` y `styles/activista.css`: el skin + Activista, el único del móvil (Acampada y el OasisMobile del dev se quitaron del + selector el 20/10/2026). Lo más simple posible: letra del sistema, bordes finos y + sin sombras. El skin quita lo que sobra; los colores los pone cada cual. +- `src/views/mobile_pubbar.js` y `public/js/mobile_pub.js`: la barra fija de unirse a + un pub (y de restaurar una copia), encima de la barra de abajo. Se pone al día sin + recargar, preguntando a `/mobile/pub-status`; el estado sale de + `backupModel.restoreStatus()`, que `backend.js` le pasa a `fork_routes.js` en la + línea que lo monta. - `src/views/mobile_ui.js`: lo que se enchufa en vistas del dev. - `src/views/mobile_settings.js`: los seis accesos de arriba de Ajustes (identidad, perfil, portada, colores, comunidad y saludo) y los colores. Los colores se guardan en la config (`mobileColors`) y salen en `/mobile-colors.css`, la última hoja; son - las variables `--a26-*` de Acampada, así que solo valen con ese skin. + las variables `--a26-*` del skin Activista. - `src/views/mobile_modules_view.js`, `identities_view.js`: pantallas propias. - `src/views/hive_views.js`: lanzador y barras de arriba y abajo. - `src/views/mobile_icons.js`: los iconos. @@ -172,10 +180,10 @@ Aquí se puede hacer lo que haga falta. Cambiar cómo se ve algo. Se busca la clase en el HTML (servidor local e inspector) y se escribe la regla en `mobile_ux.css`. Para los colores usad las variables `--ux-*` (`--ux-bg`, `--ux-fg`, `--ux-accent`, `--ux-muted`, `--ux-line`, `--ux-danger`), que -tiran de Acampada si está y si no de la paleta de OasisMobile. Si la regla no gana, -es que `mobile.css` o `Acampada.css` mandan con `!important` y selectores largos: +tiran de las `--a26-*` del skin. Si la regla no gana, +es que `mobile.css` o `Activista.css` mandan con `!important` y selectores largos: hay que subir la especificidad y poner `!important` también. Ojo con una trampa: -`Acampada.css` quita el borde a todos los `div`, así que para ponérselo a uno hace +`Activista.css` quita fondo, borde y sombra a todos los `div`, así que para ponérselo a uno hace falta `.main-column div.la-clase`. Huecos de las barras del sistema: nada de `env(safe-area-inset-*)`. El contenedor de @@ -305,7 +313,7 @@ líneas (20/10/2026, contra el `nodejs-project` de la APK 1.3.3). Por tamaño: - `backend/blobHandler.js` (190): limpiar los metadatos de las fotos también en Android. Es una función nuestra metida en su fichero; habría que proponérsela al dev. - `configs/oasis-config.json` (87) y `configs/config-manager.js` (18): la config de - serie del móvil (tema Acampada, workflow acampada, barra de abajo). + serie del móvil (skin Activista, perfil Activismo, barra de abajo). - `views/main_views.js` (64), `settings_view.js` (33), `welcome_view.js` (20), `tribes_view.js` (9), `vote_view.js` (7): enganches a `mobile_ui.js` y el orden de carga de las hojas. Es lo que la guía permite, pero hay que revisarlo en cada versión. diff --git a/docs/guia_pdf/guia.html b/docs/guia_pdf/guia.html index bfbce40..fd1d932 100644 --- a/docs/guia_pdf/guia.html +++ b/docs/guia_pdf/guia.html @@ -242,7 +242,7 @@ table.tight td { padding: 1.1mm 2mm; } 1 · style.css y mobile.css (tuyas) 2 · mobile_base.css: maqueta de la rama 3 · skin: Acampada.css o tu OasisMobile.css - 4 · hive_acampada.css (solo con Acampada) + 4 · activista.css (solo con Acampada) 5 · mobile_ux.css: piezas comunes, la última diff --git a/src/backend/backend.js b/src/backend/backend.js index 39ef244..335bd71 100644 --- a/src/backend/backend.js +++ b/src/backend/backend.js @@ -15576,7 +15576,7 @@ const middleware = [ await next(); }, // la rama movil: su router y su capa de backend (ver GUIA_DE_DESARROLLO.md) - require('./fork_routes')({ checkMod, getViewerId, getConfig, saveConfig, isLoopbackRequest, sendErrorPage, about }), + require('./fork_routes')({ checkMod, getViewerId, getConfig, saveConfig, isLoopbackRequest, sendErrorPage, about, backupModel }), routes, async (ctx) => { if (ctx.body != null || (ctx.method !== 'GET' && ctx.method !== 'HEAD')) return; diff --git a/src/backend/fork_routes.js b/src/backend/fork_routes.js index 208febb..af05afc 100644 --- a/src/backend/fork_routes.js +++ b/src/backend/fork_routes.js @@ -20,7 +20,9 @@ require("../models/fork_workflows").register(); const isMobile = () => process.env.OASIS_MOBILE === '1'; -module.exports = ({ checkMod, getViewerId, getConfig, saveConfig, isLoopbackRequest, sendErrorPage, about }) => { +module.exports = ({ checkMod, getViewerId, getConfig, saveConfig, isLoopbackRequest, sendErrorPage, about, backupModel }) => { +const pubBar = require('../views/mobile_pubbar'); +pubBar.setSource(backupModel); const mobileLayer = require('./mobile_layer')({ getViewerId, about }); const forkRouter = new koaRouter(); @@ -38,21 +40,29 @@ const mobileLayer = require('./mobile_layer')({ getViewerId, about }); ctx.cookies.set('theme', theme, { httpOnly: true, sameSite: 'strict', secure: ctx.secure }); ctx.redirect('/settings#theme'); }) - // colores del movil (mobile_settings.js): se guardan en la config y el aspecto pasa - // a Acampada, que es el tema que lee esas variables + // colores del movil (mobile_settings.js): se guardan en la config .post('/settings/colors', koaBody(), async (ctx, next) => { if (!isMobile()) return next(); const body = ctx.request.body || {}; const cfg = getConfig(); cfg.mobileColors = require('../views/mobile_settings').colorsFromBody(body); - if ((cfg.themes || {}).current !== 'Acampada') { - cfg.themes = { ...(cfg.themes || {}), current: 'Acampada' }; - ctx.cookies.set('theme', 'Acampada', { httpOnly: true, sameSite: 'strict', secure: ctx.secure }); - } saveConfig(cfg); const back = String(body.returnTo || ''); ctx.redirect(/^\/(settings|welcome)(#[a-z-]+)?$/.test(back) ? back : '/settings#colors'); }) + // barra de unirse a un pub (mobile_pubbar.js): el estado para el script, sin + // recargar la pagina, y cerrar el aviso de terminado + .get('/mobile/pub-status', async (ctx, next) => { + if (!isMobile()) return next(); + ctx.set('Cache-Control', 'no-store'); + ctx.body = pubBar.status() || { kind: 'none', running: false }; + }) + .post('/mobile/pub-status/dismiss', koaBody(), async (ctx, next) => { + if (!isMobile()) return next(); + pubBar.dismiss(); + const back = String(ctx.get('referer') || '').replace(/^https?:\/\/[^/]+/, ''); + ctx.redirect(/^\/[\w\-/?=&%.#]*$/.test(back) ? back : '/activity'); + }) .get('/mobile-colors.css', async (ctx, next) => { if (!isMobile()) return next(); ctx.type = 'text/css'; diff --git a/src/backend/mobile_layer.js b/src/backend/mobile_layer.js index e33da94..6b4aac7 100644 --- a/src/backend/mobile_layer.js +++ b/src/backend/mobile_layer.js @@ -31,8 +31,22 @@ module.exports = ({ getViewerId, about }) => { } catch (_) {} }; + // un solo skin en el movil desde el 20/10/2026: quien venga de Acampada u + // OasisMobile pasa a Activista (su config se conserva al actualizar la APK) + let skinChecked = false; + const checkSkin = () => { + if (skinChecked) return; + skinChecked = true; + try { + const { getConfig, saveConfig } = require('../configs/config-manager.js'); + const cfg = getConfig(); + if ((cfg.themes || {}).current !== 'Activista') { cfg.themes = { ...(cfg.themes || {}), current: 'Activista' }; saveConfig(cfg); } + } catch (_) {} + }; + return async (ctx, next) => { if (!isMobile() || !isPage(ctx.path)) return next(); + checkSkin(); global.__OASIS_HIVE_FILTER__ = (ctx.path === '/activity' && (ctx.query.hive === 'personal' || ctx.query.hive === 'community')) ? ctx.query.hive : ''; // el lanzador ya no va en la portada: la portada es la actividad y los modulos // estan en la hoja de la pestaña Menu (docs/ESTUDIO_NAVEGACION.md) diff --git a/src/client/assets/fonts/Anton-Regular.ttf b/src/client/assets/fonts/Anton-Regular.ttf deleted file mode 100644 index 4d65707db9d8663ccfa99cd28cd3a4e0025be178..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170812 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

C!uM<99=HDKr{ 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 diff --git a/src/client/assets/images/theme-oasismobile.png b/src/client/assets/images/theme-oasismobile.png deleted file mode 100644 index 668009e9179ec9cbf58c900e48eaaed6abb2ba20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58602 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 ab8%@b?mp}+KwS7A>Y)wS*C>Noh5ZM>jeNEM diff --git a/src/client/assets/styles/hive_acampada.css b/src/client/assets/styles/activista.css similarity index 91% rename from src/client/assets/styles/hive_acampada.css rename to src/client/assets/styles/activista.css index 05e415f..40e1151 100644 --- a/src/client/assets/styles/hive_acampada.css +++ b/src/client/assets/styles/activista.css @@ -1,9 +1,8 @@ -/* Lanzador, barras, tarjetas e identidades con el tema Acampada (rama movil). +/* Lanzador, barras, tarjetas e identidades del skin Activista (rama movil). * - * OasisMobile.css (cargado antes que themes/Acampada.css) esta pensado para fondo - * oscuro; esta hoja va detras del tema, solo con Acampada, y cambia lo que alli - * es amarillo sobre negro por negro sobre blanco con el cian neon de - * acampada26s.net. Las variables --a26-* las define themes/Acampada.css. */ + * Va detras de themes/Activista.css y pinta las piezas propias de la rama con las + * variables --a26-* (las de serie estan en el tema; Colores las cambia). Hasta el + * 20/10/2026 era hive_acampada.css, del skin Acampada. */ body { background: var(--a26-bg) !important; } @@ -18,7 +17,7 @@ body { background: var(--a26-bg) !important; } .oasis-mobile-topbar .omt-menus .oasis-menu-btn { font-family: var(--a26-tit) !important; font-weight: 400 !important; - text-transform: uppercase; + text-transform: none; font-size: 20px !important; letter-spacing: .02em; min-height: 44px !important; @@ -27,11 +26,11 @@ body { background: var(--a26-bg) !important; } color: var(--a26-fg) !important; border: var(--a26-bd) !important; border-radius: var(--a26-radius) !important; - box-shadow: 0 4px 0 var(--a26-fg) !important; + box-shadow: none !important; } .oasis-mobile-topbar .omt-menus .oasis-menu-btn span { color: var(--a26-fg) !important; } .oasis-mobile-topbar .omt-menus .oasis-menu-btn.active { background: var(--a26-neon) !important; color: var(--a26-on-neon) !important; } -.oasis-mobile-topbar .omt-menus .oasis-menu-btn:active { transform: translateY(3px); box-shadow: 0 1px 0 var(--a26-fg) !important; } +.oasis-mobile-topbar .omt-menus .oasis-menu-btn:active { box-shadow: none !important; } .oasis-mobile-topbar .omt-logo img, .oasis-mobile-topbar .omt-avatar img { border: var(--a26-bd) !important; border-radius: 50%; @@ -62,15 +61,14 @@ body { background: var(--a26-bg) !important; } color: var(--a26-fg) !important; border: var(--a26-bd) !important; border-radius: var(--a26-radius) !important; - box-shadow: 0 4px 0 var(--a26-fg) !important; + box-shadow: none !important; font-size: 24px !important; transition: transform .12s ease-out, box-shadow .12s ease-out; } .ln-app:active .ln-ico, .ln-app:focus-visible .ln-ico { - transform: translateY(3px); - box-shadow: 0 1px 0 var(--a26-fg) !important; + box-shadow: none !important; background: var(--a26-neon) !important; - border-color: var(--a26-fg) !important; color: var(--a26-on-neon) !important; + border-color: var(--a26-edge) !important; color: var(--a26-on-neon) !important; } .ln-app:hover, .ln-app:focus-visible { background: transparent !important; } .ln-lbl { color: var(--a26-fg) !important; font-size: 12px !important; font-weight: 600 !important; } @@ -95,7 +93,7 @@ body { background: var(--a26-bg) !important; } } .oasis-bottombar a.bb-item.current .bb-ico { background: var(--a26-neon) !important; color: var(--a26-on-neon) !important; } .oasis-bottombar a.bb-item.current .bb-lbl { color: var(--a26-fg) !important; } -.oasis-bottombar .bb-badge { background: var(--a26-neon) !important; color: var(--a26-on-neon) !important; border: 2px solid var(--a26-fg) !important; } +.oasis-bottombar .bb-badge { background: var(--a26-neon) !important; color: var(--a26-on-neon) !important; border: 1px solid var(--a26-edge) !important; } /* Nodos e Invitaciones: juntos y estrechos { background: var(--a26-bg) !important; border: var(--a26-bd-fino) !important; @@ -110,7 +108,7 @@ body { background: var(--a26-bg) !important; } color: var(--a26-fg) !important; border: var(--a26-bd) !important; border-radius: var(--a26-radius) !important; - box-shadow: 0 4px 0 var(--a26-fg) !important; + box-shadow: none !important; font-family: var(--a26-txt) !important; text-transform: none; } @@ -125,28 +123,28 @@ body { background: var(--a26-bg) !important; } .oasis-nav-list li a.current { background: var(--a26-neon) !important; color: var(--a26-on-neon) !important; } /* ---------- foro y chat: los colores de hive.css pensados para fondo negro ---------- */ -.forum-comment.level-1, .forum-comment.level-2, .forum-comment.level-3, .forum-comment.level-4 { border-left: 3px solid var(--a26-fg) !important; } +.forum-comment.level-1, .forum-comment.level-2, .forum-comment.level-3, .forum-comment.level-4 { border-left: 1px solid var(--a26-edge) !important; } .forum-comment.highlighted-reply { background: var(--a26-tint) !important; border-left: 5px solid var(--a26-neon) !important; } .chat-message-form .filter-btn::before, .forum-send-btn::before { color: var(--a26-fg) !important; } /* ---------- lo que mobile.css de upstream pinta en amarillo con !important ---------- */ /* mobile.css va detras del tema, asi que estas reglas tienen que ir aqui */ .create-button, button.create-button, a.create-button { - background-color: var(--a26-fg) !important; - border-color: var(--a26-fg) !important; - color: var(--a26-bg) !important; + background-color: var(--a26-neon) !important; + border-color: var(--a26-neon) !important; + color: var(--a26-on-neon) !important; } -.filter-btn.active { background-color: var(--a26-neon) !important; border-color: var(--a26-fg) !important; color: var(--a26-on-neon) !important; } +.filter-btn.active { background-color: var(--a26-neon) !important; border-color: var(--a26-neon) !important; color: var(--a26-on-neon) !important; } .peers-conn-actions button, .filter-box__button { background-color: var(--a26-bg) !important; color: var(--a26-fg) !important; } .oasis-id-copy { background: var(--a26-soft) !important; } .gov-overview tbody tr { border: var(--a26-bd-fino) !important; } -button, input[type="submit"], input[type="button"], .filter-btn, .create-button { min-height: 48px !important; font-size: 18px !important; } +button, input[type="submit"], input[type="button"], .filter-btn, .create-button { min-height: 44px !important; font-size: 16px !important; text-transform: none !important; } -/* aviso de bienvenida: el boton de empezar en negro y la X sin caja */ +/* aviso de bienvenida: el boton de empezar con el resalte y la X sin caja */ .welcome-banner .welcome-banner-start { - background: var(--a26-fg) !important; - color: var(--a26-bg) !important; - box-shadow: 0 4px 0 var(--a26-bg) !important; + background: var(--a26-neon) !important; + color: var(--a26-on-neon) !important; + box-shadow: none !important; border: var(--a26-bd) !important; } .welcome-banner .welcome-banner-close-btn { @@ -213,10 +211,10 @@ button:not([class]), input[type="submit"]:not([class]), input[type="button"]:not .identities .identity-actions button { width: 100%; } .identities .identity-legacy { text-align: center; text-decoration: underline; } .identities .identity-row { border: var(--a26-bd) !important; border-radius: var(--a26-radius) !important; background: var(--a26-bg) !important; } -.identities .identity-name { font-family: var(--a26-tit) !important; font-weight: 400 !important; text-transform: uppercase; font-size: 22px !important; } +.identities .identity-name { font-family: var(--a26-tit) !important; font-weight: 400 !important; text-transform: none; font-size: 22px !important; } .identities .identity-feed { color: var(--a26-muted) !important; } .identities .identity-active { background: var(--a26-neon) !important; border: var(--a26-bd-fino) !important; color: var(--a26-on-neon) !important; } -.identities .identity-warn { color: #c4003b !important; } +.identities .identity-warn { color: var(--a26-danger-text) !important; } /* las barras de filtros de cada modulo: upstream las encoge (.75em) y les pone borde amarillo con selectores compuestos; aqui, del mismo tamaño que el resto */ @@ -224,10 +222,10 @@ button:not([class]), input[type="submit"]:not([class]), input[type="button"]:not .mode-buttons-row .create-button, .filters .create-button, .filter-group .create-button, .activity-sub-filter .create-button, .activity-filter-grid .create-button { border: var(--a26-bd) !important; - border-color: var(--a26-fg) !important; - background: var(--a26-fg) !important; - color: var(--a26-bg) !important; - font-size: 18px !important; + border-color: var(--a26-neon) !important; + background: var(--a26-neon) !important; + color: var(--a26-on-neon) !important; + font-size: 16px !important; padding: 8px 16px !important; min-height: 48px !important; border-radius: var(--a26-radius) !important; @@ -259,7 +257,7 @@ button:not([class]), input[type="submit"]:not([class]), input[type="button"]:not background: var(--a26-bg) !important; color: var(--a26-fg) !important; border: var(--a26-bd-fino) !important; border-radius: 50% !important; box-shadow: none !important; } -.btn-singleview.btn-delete { color: #c4003b !important; border-color: #c4003b !important; } +.btn-singleview.btn-delete { color: var(--a26-danger-text) !important; border-color: var(--a26-danger-text) !important; } /* barras de filtros: chips en fila que se reparten el ancho, no un boton por linea */ .mode-buttons, .mode-buttons-row, .mode-buttons-cols, .tribe-mode-buttons, .ui-toolbar--filters, .filters { @@ -275,7 +273,7 @@ button:not([class]), input[type="submit"]:not([class]), input[type="button"]:not width: auto !important; flex: 0 0 auto !important; min-height: 38px !important; height: auto !important; padding: 4px 12px !important; margin: 0 !important; - font-size: 15px !important; box-shadow: 0 3px 0 var(--a26-fg) !important; + font-size: 15px !important; box-shadow: none !important; border: var(--a26-bd-fino) !important; } .mode-buttons .create-button, .mode-buttons-row .create-button, .tribe-mode-buttons .create-button, .filters .create-button { @@ -330,7 +328,7 @@ a.user-link { font-weight: 700 !important; text-decoration: underline !important } .pm-exposition-chip *, .card-chips-row > span * { color: var(--a26-bg) !important; } .pm-exposition-text { font-family: var(--a26-tit) !important; letter-spacing: .04em; font-size: 13px !important; } -.content-actions .btn-singleview.btn-content, .content-actions a.btn-content { border-color: var(--a26-fg) !important; color: var(--a26-fg) !important; } +.content-actions .btn-singleview.btn-content, .content-actions a.btn-content { border-color: var(--a26-edge) !important; color: var(--a26-fg) !important; } /* opiniones y votos */ .opinions-summary, .vote-btn, .score-btn { @@ -342,13 +340,13 @@ a.user-link { font-weight: 700 !important; text-decoration: underline !important /* tablas de detalle (fecha, estado, lugar...): filas claras, la etiqueta en gris */ .main-column table, .main-column table tr, .main-column table td, .main-column table th, .main-column table tbody { - background: var(--a26-bg) !important; color: var(--a26-fg) !important; border-color: var(--a26-fg) !important; + background: var(--a26-bg) !important; color: var(--a26-fg) !important; border-color: var(--a26-edge) !important; } .main-column table { border: var(--a26-bd-fino) !important; border-radius: 10px !important; } .main-column table tr + tr td { border-top: 1px solid var(--a26-line) !important; } .main-column table td:first-child, .main-column table th, .main-column [class*="-info-label"] { color: var(--a26-muted) !important; font-weight: 700 !important; font-size: 13px !important; - text-transform: uppercase; letter-spacing: .03em; + text-transform: none; letter-spacing: .03em; } /* perfil: los datos del habitante como lineas claras, sin cajas negras */ @@ -382,7 +380,7 @@ a.user-link { font-weight: 700 !important; text-decoration: underline !important padding: 4px 10px !important; font-weight: 700 !important; text-decoration: none !important; } .activity-chip.active { background: var(--a26-neon) !important; color: var(--a26-on-neon) !important; } -.activity-chip:hover { color: var(--a26-fg) !important; border-color: var(--a26-fg) !important; } +.activity-chip:hover { color: var(--a26-fg) !important; border-color: var(--a26-edge) !important; } /* ---------- fichas de filtro de 1.3.3 (OasisMobile.css las pinta en amarillo y gris) ---------- */ /* mismo selector que alli: gana por ir detras */ @@ -402,11 +400,11 @@ a.user-link { font-weight: 700 !important; text-decoration: underline !important border-radius: var(--a26-radius) !important; background: var(--a26-bg) !important; color: var(--a26-fg) !important; - box-shadow: 0 3px 0 var(--a26-fg) !important; + box-shadow: none !important; } .main-column :is(.tribe-mode-buttons, .mode-buttons, .mode-buttons-row, .filter-group) .filter-btn.active:not(.create-button) { background: var(--a26-neon) !important; - border-color: var(--a26-fg) !important; + border-color: var(--a26-edge) !important; color: var(--a26-on-neon) !important; } .main-column :is(.tribe-mode-buttons, .mode-buttons, .mode-buttons-row, .filter-group) .create-button { min-height: 48px !important; } @@ -442,7 +440,7 @@ img.inhabitant-photo-details { border: var(--a26-bd) !important; } .welcome-action { color: var(--a26-fg) !important; } label.welcome-ux-option { background: var(--a26-bg) !important; border: var(--a26-bd-fino) !important; - border-radius: var(--a26-radius) !important; box-shadow: 0 4px 0 var(--a26-fg) !important; + border-radius: var(--a26-radius) !important; box-shadow: none !important; } label.welcome-ux-option:has(input:checked) { background: var(--a26-neon) !important; color: var(--a26-on-neon) !important; } @@ -464,7 +462,7 @@ label.welcome-ux-option:has(input:checked) { background: var(--a26-neon) !import font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", sans-serif !important; text-transform: none !important; letter-spacing: 0 !important; background: var(--a26-bg) !important; color: var(--a26-fg) !important; - border: 1px solid var(--a26-fg) !important; border-radius: 10px !important; box-shadow: none !important; + border: 1px solid var(--a26-edge) !important; border-radius: 10px !important; box-shadow: none !important; } /* el 📌 va en la esquina: el texto deja su hueco (el padding general de la burbuja lo pisaba) */ .chat-bubble-row .chat-message.chat-has-pin-toggle { position: relative !important; padding-right: 44px !important; } @@ -476,15 +474,15 @@ label.welcome-ux-option:has(input:checked) { background: var(--a26-neon) !import .skin-card { background: var(--a26-bg) !important; color: var(--a26-fg) !important; border: var(--a26-bd) !important; border-radius: var(--a26-radius) !important; - box-shadow: 0 5px 0 var(--a26-fg) !important; + box-shadow: none !important; } .skin-card .skin-shot { border: var(--a26-bd-fino); } .skin-card .skin-name { font-family: var(--a26-tit) !important; font-weight: 400 !important; - text-transform: uppercase; letter-spacing: .02em; font-size: 21px !important; + text-transform: none; letter-spacing: .02em; font-size: 21px !important; } .skin-card.is-current { background: var(--a26-neon) !important; color: var(--a26-on-neon) !important; border: var(--a26-bd) !important; } -.skin-card:active { transform: translateY(4px); box-shadow: 0 1px 0 var(--a26-fg) !important; background: var(--a26-neon) !important; color: var(--a26-on-neon) !important; } +.skin-card:active { box-shadow: none !important; background: var(--a26-neon) !important; color: var(--a26-on-neon) !important; } /* ---------- letra y botones mas grandes, para leer sin gafas ---------- */ body { font-size: 18px; } @@ -518,3 +516,6 @@ input, textarea, select { font-size: 18px !important; min-height: 50px; } /* el plegable de mensajes anteriores del buzon: gris claro sobre blanco */ summary.pm-thread-toggle { color: var(--a26-muted) !important; } .pm-thread-icon { font-size: 12px !important; } + +/* fichas de la actividad y de filtros: mobile.css del dev las pone en mayusculas */ +.activity-chip, a.activity-chip, .filter-btn, a.filter-btn { text-transform: none !important; } diff --git a/src/client/assets/styles/mobile_base.css b/src/client/assets/styles/mobile_base.css index f3e3e36..b49222e 100644 --- a/src/client/assets/styles/mobile_base.css +++ b/src/client/assets/styles/mobile_base.css @@ -157,7 +157,7 @@ body { padding-top: 74px; background: #121212; } min-height: 48px; padding: 0 var(--space-3); cursor: pointer; color: #FFD700; font-weight: bold; - text-transform: uppercase; letter-spacing: .04em; + text-transform: none; letter-spacing: .04em; font-size: var(--fs-caption); } .oasis-nav-header .nav-text { flex: 1 1 auto; } @@ -218,7 +218,7 @@ body { overscroll-behavior: none; } .bb-manage { margin: 8px 0 16px; } .bb-manage h3, .bb-manage-add h3 { - font-size: 13px; text-transform: uppercase; letter-spacing: .05em; + font-size: 13px; text-transform: none; letter-spacing: .05em; color: #FFD700; margin: 14px 0 8px; } .bb-manage-list { display: flex; flex-direction: column; gap: 8px; } @@ -246,7 +246,7 @@ body { overscroll-behavior: none; } .ln-group + .ln-group { margin-top: 20px; } .ln-title { margin: 0 2px 10px; padding: 0; border: 0; - font-size: 11px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; + font-size: 11px; font-weight: 600; letter-spacing: .08em; text-transform: none; color: var(--c-muted); } .ln-grid { @@ -377,7 +377,7 @@ button, input[type="submit"], input[type="button"], color: var(--c-muted, #8c8c8c); font-size: 11px; font-weight: 700; - text-transform: uppercase; + text-transform: none; letter-spacing: .03em; margin-bottom: 2px; padding-bottom: 0; @@ -395,7 +395,7 @@ button, input[type="submit"], input[type="button"], color: var(--c-muted, #8c8c8c); font-size: 10px; font-weight: 700; - text-transform: uppercase; + text-transform: none; letter-spacing: .03em; margin-bottom: 1px; white-space: nowrap; diff --git a/src/client/assets/styles/mobile_ux.css b/src/client/assets/styles/mobile_ux.css index 06ce6c1..430bc19 100644 --- a/src/client/assets/styles/mobile_ux.css +++ b/src/client/assets/styles/mobile_ux.css @@ -1,15 +1,12 @@ -/* Piezas de usabilidad de la rama movil, para los dos skins (Acampada y OasisMobile). +/* Piezas de usabilidad de la rama movil. * - * Va la ultima, detras del skin. Los colores salen de las variables de - * Acampada (--a26-*) si el tema las define y, si no, de la paleta oscura con oro - * de OasisMobile; asi cada pieza nueva se ve bien en los dos sin duplicarla. + * Va detras del skin (Activista, el unico del movil desde el 20/10/2026) y antes de + * /mobile-colors.css. Los colores salen de las variables --a26-* a traves de las + * --ux-*; los valores de reserva son los del OasisMobile.css del dev, por si algun + * dia se carga sin skin. * - * Letra: Anton (--ux-title) solo para titulos y para el boton principal de cada - * pantalla; todo lo demas (fichas, botones secundarios, etiquetas) en la letra del - * sistema en negrita. Antes habia Anton en botones, fichas, cabeceras de tabla y - * pestañas, y la pantalla parecia un cartel. - * - * Espacios: rejilla de 4/8. Zonas tactiles de 44px como minimo. */ + * Letra del sistema en todo; los titulos en negrita. Espacios: rejilla de 4/8. + * Zonas tactiles de 44px como minimo; enlaces dentro del texto, 24px. */ :root { --ux-bg: var(--a26-bg, #121212); @@ -18,7 +15,7 @@ --ux-on-accent: var(--a26-on-neon, #000); --ux-soft: var(--a26-soft, #1e1e1e); --ux-muted: var(--a26-muted, #a8a8a8); - --ux-line: var(--a26-fg, #3a3a3a); + --ux-line: var(--a26-edge, #3a3a3a); --ux-radius: var(--a26-radius, 12px); --ux-title: var(--a26-tit, inherit); --ux-text: var(--a26-txt, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif); @@ -39,7 +36,7 @@ } .main-column :is(.tribe-mode-buttons, .mode-buttons, .mode-buttons-row, .filter-group, .filters) .filter-btn:not(.create-button) { font-size: 15px !important; - text-transform: uppercase; + text-transform: none; } /* los formularios de cada modulo (crear tribu, votacion, sala...): etiquetas como texto, no como titulos; el h2 de la pregunta de una votacion era Anton de 28px */ @@ -144,19 +141,19 @@ .main-column a.tribe-row { display: flex !important; flex-wrap: nowrap !important; align-items: center; gap: 12px; width: auto !important; padding: 10px 12px !important; min-height: 72px; - border: 2px solid var(--ux-line) !important; border-radius: var(--ux-radius) !important; + border: 1px solid var(--ux-line) !important; border-radius: var(--ux-radius) !important; background: var(--ux-bg) !important; color: var(--ux-fg) !important; text-decoration: none !important; } .main-column a.tribe-row:active { background: var(--ux-accent) !important; color: var(--ux-on-accent) !important; } .tribe-row .tribe-row-thumb { flex: 0 0 52px; width: 52px !important; height: 52px !important; border-radius: 10px !important; - object-fit: cover; border: 2px solid var(--ux-line) !important; margin: 0 !important; + object-fit: cover; border: 1px solid var(--ux-line) !important; margin: 0 !important; } .tribe-row .tribe-row-icon { padding: 11px; background: var(--ux-soft); } .tribe-row .tribe-row-text { flex: 1 1 0; min-width: 0; overflow: hidden; display: flex; flex-direction: column; gap: 2px; } .tribe-row .tribe-row-text > span { display: block; max-width: 100%; margin: 0 !important; padding: 0 !important; line-height: 1.3; } .tribe-row .tribe-row-title { - font-family: var(--ux-title) !important; font-size: 21px; line-height: 1.1; text-transform: uppercase; + font-family: var(--ux-title) !important; font-size: 21px; line-height: 1.1; text-transform: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .tribe-row .tribe-row-facts { font-size: 13px; font-weight: 700; color: var(--ux-muted); } @@ -170,7 +167,7 @@ .vote-bar-count { font-weight: 700; font-size: 15px; min-width: 2ch; text-align: right; } .vote-bar-meter { grid-column: 1 / -1; width: 100%; height: 12px; appearance: none; -webkit-appearance: none; - border: 2px solid var(--ux-line); border-radius: 8px; overflow: hidden; background: var(--ux-soft); + border: 1px solid var(--ux-line); border-radius: 8px; overflow: hidden; background: var(--ux-soft); } .vote-bar-meter::-webkit-progress-bar { background: var(--ux-soft); } .vote-bar-meter::-webkit-progress-value { background: var(--ux-fg); } @@ -189,15 +186,15 @@ width: 100% !important; min-height: 52px !important; margin: 0 !important; font-family: var(--ux-text) !important; font-weight: 700 !important; font-size: 16px !important; } -.main-column .vote-buttons-row-single button[value="YES"], .main-column .vote-buttons-row-single button[value="GREEN"] { border-color: var(--ux-ok) !important; box-shadow: 0 4px 0 var(--ux-ok) !important; } -.main-column .vote-buttons-row-single button[value="NO"], .main-column .vote-buttons-row-single button[value="RED"] { border-color: var(--ux-danger) !important; box-shadow: 0 4px 0 var(--ux-danger) !important; } -.main-column .vote-buttons-row-single button[value="YELLOW"] { border-color: var(--ux-warn) !important; box-shadow: 0 4px 0 var(--ux-warn) !important; } +.main-column .vote-buttons-row-single button[value="YES"], .main-column .vote-buttons-row-single button[value="GREEN"] { border-color: var(--ux-ok) !important; box-shadow: none !important; } +.main-column .vote-buttons-row-single button[value="NO"], .main-column .vote-buttons-row-single button[value="RED"] { border-color: var(--ux-danger) !important; box-shadow: none !important; } +.main-column .vote-buttons-row-single button[value="YELLOW"] { border-color: var(--ux-warn) !important; box-shadow: none !important; } /* tipo de votacion: tarjetas de radio */ .vote-kind { display: flex; flex-direction: column; gap: 10px; margin: 4px 0 18px; } .vote-kind-title { font-weight: 700; font-size: 15px; } .vote-kind-option { display: grid !important; grid-template-columns: auto 1fr; gap: 2px 12px; align-items: center; - padding: 12px 14px; border: 2px solid var(--ux-line); border-radius: var(--ux-radius); cursor: pointer; + padding: 12px 14px; border: 1px solid var(--ux-line); border-radius: var(--ux-radius); cursor: pointer; } .main-column .vote-kind-option input[type="radio"] { grid-row: 1 / span 2; width: 22px !important; height: 22px !important; min-height: 0 !important; margin: 0 !important; accent-color: var(--ux-fg); } .vote-kind-option:has(input:checked) { background: var(--ux-accent); color: var(--ux-on-accent); } @@ -210,12 +207,12 @@ .module-group { display: flex; flex-direction: column; gap: 8px; } .module-group-title { font-family: var(--ux-title) !important; font-weight: 400 !important; font-size: 20px !important; - text-transform: uppercase; margin: 0 0 4px !important; padding-bottom: 4px; border-bottom: 3px solid var(--ux-line); + text-transform: none; margin: 0 0 4px !important; padding-bottom: 4px; border-bottom: 1px solid var(--ux-line); } .main-column label.module-switch { display: grid !important; grid-template-columns: 40px minmax(0, 1fr) 52px; align-items: center; gap: 12px; padding: 10px 12px; min-height: 64px; cursor: pointer; - border: 2px solid var(--ux-line); border-radius: var(--ux-radius); + border: 1px solid var(--ux-line); border-radius: var(--ux-radius); font-family: var(--ux-text) !important; text-transform: none !important; letter-spacing: 0 !important; } .module-switch-ico { width: 40px; height: 40px; padding: 8px; border-radius: 10px; background: var(--ux-soft); color: var(--ux-fg); } @@ -227,7 +224,7 @@ .main-column label.module-switch input.switch-input[type="checkbox"] { appearance: none; -webkit-appearance: none; flex: 0 0 auto; width: 52px !important; height: 30px !important; min-height: 0 !important; margin: 0 !important; padding: 0 !important; - border: 2px solid var(--ux-line) !important; border-radius: 16px !important; background: var(--ux-soft) !important; + border: 1px solid var(--ux-line) !important; border-radius: 16px !important; background: var(--ux-soft) !important; position: relative; cursor: pointer; transition: background .15s ease-out; } .main-column label.module-switch input.switch-input[type="checkbox"]::after { @@ -248,7 +245,7 @@ .main-column .lang-pick .lang-chip, .lang-pick .lang-chip { width: 100% !important; min-height: 48px !important; margin: 0 !important; padding: 6px 10px !important; font-size: 16px !important; text-transform: none !important; box-shadow: none !important; - border: 2px solid var(--ux-line) !important; background: var(--ux-bg) !important; color: var(--ux-fg) !important; + border: 1px solid var(--ux-line) !important; background: var(--ux-bg) !important; color: var(--ux-fg) !important; } .main-column .lang-pick .lang-chip.is-current, .lang-pick .lang-chip.is-current { background: var(--ux-accent) !important; color: var(--ux-on-accent) !important; } @@ -341,10 +338,10 @@ body .main-content > .main-column { padding-left: 0 !important; padding-right: 0 .tribe-tabs-strip::-webkit-scrollbar { display: none; } .main-column a.tribe-tab, .tribe-tabs-more > summary { flex: 0 0 auto; scroll-snap-align: start; display: inline-flex; align-items: center; justify-content: center; - min-height: 40px; padding: 4px 14px; border: 2px solid var(--ux-line) !important; border-radius: 20px !important; + min-height: 40px; padding: 4px 14px; border: 1px solid var(--ux-line) !important; border-radius: 20px !important; background: var(--ux-bg) !important; color: var(--ux-fg) !important; text-decoration: none !important; font-family: var(--ux-text) !important; font-weight: 700 !important; font-size: 14px !important; white-space: nowrap; - text-transform: uppercase; letter-spacing: .02em; + text-transform: none; letter-spacing: .02em; } .main-column a.tribe-tab.is-current { background: var(--ux-accent) !important; color: var(--ux-on-accent) !important; } .tribe-tabs-more > summary { list-style: none; cursor: pointer; margin-top: 2px; } @@ -393,7 +390,7 @@ body .main-content > .main-column { padding-left: 0 !important; padding-right: 0 .main-column :is(.tribe-mode-buttons, .mode-buttons, .mode-buttons-row, .filters, .forum-create-col) .create-button.create-button { width: 100% !important; min-height: 52px !important; margin: 4px 0 0 !important; padding: 8px 16px !important; font-family: var(--ux-title) !important; font-weight: 400 !important; font-size: 20px !important; - letter-spacing: .02em !important; text-transform: uppercase; + letter-spacing: .02em !important; text-transform: none; } /* ---------- estados vacios: icono, texto centrado, sin cajas ---------- */ @@ -414,14 +411,14 @@ body .main-content > .main-column { padding-left: 0 !important; padding-right: 0 /* ---------- el pie abajo del todo aunque la pagina sea corta ---------- */ body .main-content { min-height: calc(100dvh - 300px); } .main-column .tribe-grid:has(> p:only-child), .main-column .filters, .main-column .tribe-mode-buttons { padding-left: 0 !important; padding-right: 0 !important; margin-left: 0 !important; margin-right: 0 !important; } -.main-column :is(.tribe-mode-buttons, .mode-buttons, .mode-buttons-row, .filters, .forum-create-col) .create-button.create-button { box-shadow: 0 5px 0 var(--ux-accent) !important; } +.main-column :is(.tribe-mode-buttons, .mode-buttons, .mode-buttons-row, .filters, .forum-create-col) .create-button.create-button { box-shadow: none !important; } /* ---------- buzon: cada mensaje en pocas lineas ---------- */ /* era una tabla de seis filas (De, Fecha, Para, Asunto, Tasa ECO, Cifrado) dentro de dos cajas: un aviso ocupaba una pantalla. Para es siempre una misma, el asunto ya es el titulo, la tasa ECO no se entiende y el cifrado es igual en todos */ .main-column .pm-thread { border: 0 !important; padding: 0 !important; margin: 0 0 10px !important; background: transparent !important; } -.main-column div.pm-card { padding: 12px !important; margin: 0 !important; border: 2px solid var(--ux-line) !important; border-radius: var(--ux-radius) !important; } +.main-column div.pm-card { padding: 12px !important; margin: 0 !important; border: 1px solid var(--ux-line) !important; border-radius: var(--ux-radius) !important; } .main-column .pm-card .pm-info-table { display: flex !important; flex-wrap: wrap; align-items: center; gap: 4px 10px; border: 0 !important; margin: 0 0 6px !important; width: 100%; } .main-column .pm-card .pm-info-table tbody { display: contents !important; } .main-column .pm-card .pm-info-table tr { display: none !important; } @@ -481,7 +478,7 @@ form.oasis-phone-state .oasis-phone-state-btn { .main-column .vote-bar > * { margin: 0 !important; } .main-column .vote-bar-meter { height: 12px !important; min-height: 0 !important; } .main-column .vote-bar-label { text-transform: lowercase; } -.main-column .vote-bar-label::first-letter { text-transform: uppercase; } +.main-column .vote-bar-label::first-letter { text-transform: none; } /* personalizar la barra de abajo: una fila por atajo, como el resto de listas */ .main-column .bb-manage-list, .main-column .bb-pick-grid { display: flex !important; flex-direction: column !important; gap: 8px !important; align-items: stretch !important; } @@ -520,7 +517,7 @@ body > .welcome-banner { order: -1; margin-top: 10px !important; } margin: 0 !important; padding: 6px 8px !important; box-sizing: border-box; border: var(--a26-bd-fino, 2px solid var(--ux-line)) !important; border-radius: var(--ux-radius) !important; background: var(--ux-bg) !important; color: var(--ux-fg) !important; box-shadow: none !important; - font-family: var(--ux-text) !important; font-weight: 700 !important; font-size: 15px !important; text-transform: uppercase; text-decoration: none !important; + font-family: var(--ux-text) !important; font-weight: 700 !important; font-size: 15px !important; text-transform: none; text-decoration: none !important; } /* ---------- pestaña Menu y su hoja con todos los modulos ---------- */ @@ -538,34 +535,34 @@ body > .welcome-banner { order: -1; margin-top: 10px !important; } bottom: 0; max-height: 82vh; max-height: 82dvh; overflow-y: auto; overscroll-behavior: contain; padding: 8px 14px calc(18px + var(--inset-bottom)); background: var(--ux-bg); color: var(--ux-fg); - border-top: 3px solid var(--ux-line); border-radius: 22px 22px 0 0; + border-top: 1px solid var(--ux-line); border-radius: 22px 22px 0 0; box-shadow: 0 -6px 24px rgba(0, 0, 0, .25); } .menu-sheet-head { position: sticky; top: -8px; z-index: 1; display: flex; align-items: center; justify-content: space-between; - margin: 0 -14px 8px; padding: 12px 14px 10px; background: var(--ux-bg); border-bottom: 2px solid var(--ux-line); + margin: 0 -14px 8px; padding: 12px 14px 10px; background: var(--ux-bg); border-bottom: 1px solid var(--ux-line); } .menu-sheet-head::before { content: ""; position: absolute; top: 4px; left: 50%; width: 44px; height: 5px; margin-left: -22px; border-radius: 3px; background: var(--ux-muted); } -.menu-sheet-title { font-family: var(--ux-title); font-size: 26px; text-transform: uppercase; line-height: 1; } +.menu-sheet-title { font-family: var(--ux-title); font-size: 26px; text-transform: none; line-height: 1; } .menu-sheet-close { display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; cursor: pointer; - border: 2px solid var(--ux-line); border-radius: 50%; font-size: 20px; background: var(--ux-bg); + border: 1px solid var(--ux-line); border-radius: 50%; font-size: 20px; background: var(--ux-bg); } .menu-sheet .launcher { margin: 0 !important; padding: 0 !important; } /* cinco pestañas: que quepan a 360px */ .oasis-bottombar .bb-item { flex: 1 1 0 !important; min-width: 0 !important; } @media (max-width: 380px) { .oasis-bottombar .bb-lbl { font-size: 11px !important; } } -.oasis-bottombar .menu-toggle:checked ~ div.menu-sheet { background: var(--ux-bg) !important; bottom: calc(66px + var(--inset-bottom)); border-radius: 22px 22px 0 0 !important; border: 0 !important; border-top: 3px solid var(--ux-line) !important; } -.oasis-bottombar div.menu-sheet-head { background: var(--ux-bg) !important; border: 0 !important; border-bottom: 2px solid var(--ux-line) !important; } +.oasis-bottombar .menu-toggle:checked ~ div.menu-sheet { background: var(--ux-bg) !important; bottom: calc(66px + var(--inset-bottom)); border-radius: 22px 22px 0 0 !important; border: 0 !important; border-top: 1px solid var(--ux-line) !important; } +.oasis-bottombar div.menu-sheet-head { background: var(--ux-bg) !important; border: 0 !important; border-bottom: 1px solid var(--ux-line) !important; } .oasis-bottombar .menu-toggle:checked ~ .menu-sheet-backdrop { bottom: calc(66px + var(--inset-bottom)); } /* en la hoja todo tiene que caber sin deslizar: cinco iconos por fila y mas pequeños (con 20 modulos la rejilla del lanzador medía 1.200px para 690 de hoja) */ .menu-sheet .launcher .ln-grid { display: grid !important; grid-template-columns: repeat(5, 1fr) !important; gap: 8px 2px !important; } .menu-sheet .launcher .ln-app { min-width: 0 !important; padding: 0 !important; gap: 4px !important; } -.menu-sheet .launcher .ln-ico.has-svg { width: 48px !important; height: 48px !important; padding: 11px !important; box-shadow: 0 3px 0 var(--ux-line) !important; } +.menu-sheet .launcher .ln-ico.has-svg { width: 48px !important; height: 48px !important; padding: 11px !important; box-shadow: none !important; } .menu-sheet .launcher .ln-lbl { font-size: 11px !important; line-height: 1.1 !important; } .menu-sheet .launcher .ln-title { font-size: 15px !important; margin: 0 0 6px !important; padding: 0 0 2px !important; border-bottom-width: 2px !important; } .menu-sheet .launcher .ln-group + .ln-group { margin-top: 10px !important; } @@ -594,13 +591,13 @@ body:has(#oasis-menu-toggle:checked) form.oasis-phone-state { display: none !imp .main-column button.ux-pick-card { display: flex !important; flex-direction: row; align-items: center; text-align: left; width: 100% !important; min-width: 0 !important; min-height: 64px !important; height: auto !important; margin: 0 0 10px !important; padding: 8px 12px 8px 8px !important; - background: var(--ux-bg) !important; color: var(--ux-fg) !important; border: 2px solid var(--ux-line) !important; border-radius: 14px !important; - box-shadow: 0 3px 0 var(--ux-line) !important; text-transform: none !important; font-family: inherit !important; cursor: pointer; + background: var(--ux-bg) !important; color: var(--ux-fg) !important; border: 1px solid var(--ux-line) !important; border-radius: 14px !important; + box-shadow: none !important; text-transform: none !important; font-family: inherit !important; cursor: pointer; } .main-column button.ux-pick-card.is-current { background: var(--ux-accent) !important; color: var(--ux-on-accent) !important; } .main-column .ux-pick-shot { display: block; flex: 0 0 76px; width: 76px; height: auto; border-radius: 8px; margin: 0 12px 0 0; border: 1px solid rgba(0, 0, 0, .2); } .main-column .ux-pick-label { flex: 1 1 auto; min-width: 0; text-align: left; font-size: 16px; font-weight: 700; line-height: 1.2; } -.main-column .ux-pick-now { flex: 0 0 auto; margin-left: 8px; font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; } +.main-column .ux-pick-now { flex: 0 0 auto; margin-left: 8px; font-size: 12px; font-weight: 700; text-transform: none; letter-spacing: .04em; } /* perfil de uso: sin miniatura, nombre y una linea de para que sirve */ .main-column .ux-pick-text { flex: 1 1 auto; min-width: 0; display: block; text-align: left; } .main-column .ux-pick-text .ux-pick-label { display: block; } @@ -624,9 +621,9 @@ body:has(#oasis-menu-toggle:checked) form.oasis-phone-state { display: none !imp display: flex !important; flex-direction: column; align-items: center; justify-content: flex-start; text-align: center; min-height: 104px; min-width: 0; padding: 12px 6px 10px !important; box-sizing: border-box; text-decoration: none !important; background: var(--ux-bg) !important; color: var(--ux-fg) !important; - border: 2px solid var(--ux-line) !important; border-radius: 14px !important; box-shadow: 0 3px 0 var(--ux-line) !important; + border: 1px solid var(--ux-line) !important; border-radius: 14px !important; box-shadow: none !important; } -.main-column a.quick-tile:active { transform: translateY(3px); box-shadow: 0 0 0 var(--ux-line) !important; background: var(--ux-accent) !important; color: var(--ux-on-accent) !important; } +.main-column a.quick-tile:active { box-shadow: 0 0 0 var(--ux-line) !important; background: var(--ux-accent) !important; color: var(--ux-on-accent) !important; } .main-column .quick-tile .quick-ico.has-svg { display: block; width: 30px; height: 30px; margin: 0 0 6px; } .main-column .quick-tile .quick-ico svg { width: 100%; height: 100%; } .main-column .quick-tile .quick-name { display: block; font-size: 14px; font-weight: 700; line-height: 1.15; } @@ -635,7 +632,7 @@ body:has(#oasis-menu-toggle:checked) form.oasis-phone-state { display: none !imp .main-column div.quick-links { display: block !important; margin: 0 !important; padding: 0 !important; } .main-column div.quick-links a { display: block !important; text-align: center; margin: 0 0 10px !important; } .main-column div.quick-identity { display: flex !important; align-items: center; margin: 0 0 14px !important; padding: 0 !important; } -.main-column .quick-identity-avatar { width: 56px; height: 56px; border-radius: 50%; margin-right: 12px; border: 2px solid var(--ux-line); object-fit: cover; } +.main-column .quick-identity-avatar { width: 56px; height: 56px; border-radius: 50%; margin-right: 12px; border: 1px solid var(--ux-line); object-fit: cover; } .main-column .quick-identity-name { font-size: 18px; font-weight: 700; } .main-column section#identity a.create-button, .main-column section#greeting a.create-button { display: block !important; text-align: center; } @@ -647,27 +644,80 @@ body:has(#oasis-menu-toggle:checked) form.oasis-phone-state { display: none !imp .main-column button.pal-card { display: flex !important; flex-direction: row !important; flex-wrap: nowrap !important; align-items: center; width: 100% !important; min-width: 0 !important; min-height: 56px !important; height: auto !important; margin: 0 !important; padding: 8px 10px !important; text-align: left; text-transform: none !important; font-family: var(--ux-text) !important; - background: var(--ux-bg) !important; color: var(--ux-fg) !important; border: 2px solid var(--ux-line) !important; border-radius: 14px !important; box-shadow: 0 3px 0 var(--ux-line) !important; + background: var(--ux-bg) !important; color: var(--ux-fg) !important; border: 1px solid var(--ux-line) !important; border-radius: 14px !important; box-shadow: none !important; } -.main-column button.pal-card.is-current { border-width: 3px !important; box-shadow: 0 0 0 3px var(--ux-accent), 0 3px 0 var(--ux-line) !important; } +.main-column button.pal-card.is-current { border-width: 3px !important; box-shadow: 0 0 0 3px var(--ux-accent) !important; } .main-column button.pal-card { justify-content: flex-start !important; } .main-column .pal-card .pal-name { flex: 1 1 auto; min-width: 0; text-align: left; font-size: 15px; font-weight: 700; line-height: 1.15; } .main-column .pal-card .ux-pick-now { display: none; } -.pal-swatch { display: inline-flex; flex: 0 0 auto; width: 42px; height: 30px; margin-right: 10px; border-radius: 8px; overflow: hidden; border: 2px solid var(--ux-line); } +.pal-swatch { display: inline-flex; flex: 0 0 auto; width: 42px; height: 30px; margin-right: 10px; border-radius: 8px; overflow: hidden; border: 1px solid var(--ux-line); } .pal-swatch .pal-bg { flex: 2 1 0; } .pal-swatch .pal-fg { flex: 1 1 0; } .pal-swatch .pal-ac { flex: 1 1 0; } -.main-column details.color-custom { margin: 4px 0 0 !important; padding: 0 !important; border: 2px solid var(--ux-line) !important; border-radius: 14px !important; background: var(--ux-bg) !important; } +.main-column details.color-custom { margin: 4px 0 0 !important; padding: 0 !important; border: 1px solid var(--ux-line) !important; border-radius: 14px !important; background: var(--ux-bg) !important; } .main-column details.color-custom > summary { display: flex; align-items: center; min-height: 52px; padding: 8px 12px; font-weight: 700; cursor: pointer; list-style: none; } .main-column details.color-custom > summary::-webkit-details-marker { display: none; } .main-column details.color-custom > summary::after { content: "\25BE"; margin-left: auto; font-size: 18px; } .main-column details.color-custom[open] > summary::after { content: "\25B4"; } .main-column form.color-custom-form { padding: 4px 12px 14px !important; margin: 0 !important; border: 0 !important; background: transparent !important; box-shadow: none !important; } .main-column form.color-custom-form label.color-field { display: flex !important; align-items: center; justify-content: space-between; min-height: 52px; margin: 0 0 8px !important; } -.main-column label.color-field input[type="color"] { width: 64px !important; height: 44px !important; padding: 2px !important; border: 2px solid var(--ux-line) !important; border-radius: 10px !important; background: var(--ux-bg) !important; } +.main-column label.color-field input[type="color"] { width: 64px !important; height: 44px !important; padding: 2px !important; border: 1px solid var(--ux-line) !important; border-radius: 10px !important; background: var(--ux-bg) !important; } .main-column form.color-custom-form .create-button { width: 100% !important; margin-top: 6px !important; } .main-column .color-pick .welcome-action { margin-top: 4px !important; } +/* ---------- actividad (la portada): fichas en rejilla y tarjetas ordenadas ---------- */ +/* fichas de filtro: tres columnas iguales, texto centrado (antes cada una de su ancho y + el texto pegado arriba) */ +.main-column div.activity-filter-chips:not(.activity-toolbar-row) { + display: grid !important; grid-template-columns: repeat(3, minmax(0, 1fr)); grid-gap: 8px; + margin: 0 0 12px !important; padding: 0 !important; +} +.main-column div.activity-filter-chips:not(.activity-toolbar-row) a.activity-chip { + display: flex !important; align-items: center; justify-content: center; text-align: center; + width: auto !important; min-width: 0; min-height: 44px !important; margin: 0 !important; padding: 4px 6px !important; + font-size: 14px !important; line-height: 1.15 !important; overflow-wrap: anywhere; +} +/* cabecera de cada tarjeta: los botones en una fila arriba a la derecha y la etiqueta + (FEEDS, SALAS...) debajo a la izquierda; antes compartian fila y la X caia sola */ +.main-column div.card-header.activity-card-header { display: flex !important; flex-direction: column !important; align-items: stretch !important; padding: 0 !important; margin: 0 0 8px !important; } +.main-column div.activity-card-header > div.content-actions { order: 1; display: flex !important; justify-content: flex-end !important; align-items: center; gap: 8px; width: 100% !important; margin: 0 0 8px !important; padding: 0 !important; } +.main-column div.activity-card-header > div.card-chips-row { order: 2; display: flex !important; justify-content: flex-start !important; margin: 0 !important; padding: 0 !important; } +/* la X de borrar, cerrada, mide lo que su boton (algo le daba todo el ancho) */ +.main-column div.content-actions > details.content-action-confirm:not([open]) { width: auto !important; flex: 0 0 auto !important; margin: 0 !important; } +@supports not (inset: 0) { + .main-column div.activity-card-header > div.content-actions > * { margin-left: 8px !important; } +} + +/* ---------- barra de unirse a un pub (mobile_pubbar.js) ---------- */ +/* fija encima de la barra de abajo, en todas las pantallas; el color de la franja de + la izquierda dice el estado: resalte mientras va, verde al terminar, ambar si se + unio pero sin descarga y rojo si fallo */ +/* el skin quita fondo, borde y sombra a todos los div: aqui con especificidad alta */ +nav.oasis-bottombar div.pub-bar, body div.pub-bar { + position: fixed !important; left: 8px; right: 8px; bottom: calc(80px + var(--inset-bottom)); z-index: 90; + display: flex; align-items: flex-start; padding: 10px 6px 10px 14px !important; margin: 0 !important; border-radius: 12px !important; + background: var(--ux-bg) !important; color: var(--ux-fg) !important; + border: 1px solid var(--ux-line) !important; border-left: 6px solid var(--ux-accent) !important; + box-shadow: 0 4px 16px rgba(0, 0, 0, .22) !important; +} +nav.oasis-bottombar div.pub-bar[hidden], body div.pub-bar[hidden] { display: none !important; } +nav.oasis-bottombar div.pub-bar.is-done { border-left-color: var(--ux-ok) !important; } +nav.oasis-bottombar div.pub-bar.is-warn { border-left-color: var(--ux-warn) !important; } +nav.oasis-bottombar div.pub-bar.is-error { border-left-color: var(--ux-danger) !important; } +nav.oasis-bottombar div.pub-bar div.pub-bar-body { flex: 1 1 auto; min-width: 0; padding: 0 !important; margin: 0 !important; background: transparent !important; box-shadow: none !important; border: 0 !important; } +.pub-bar .pub-bar-text { margin: 0 !important; font-size: 15px; font-weight: 700; line-height: 1.35; } +.pub-bar .pub-bar-hint { margin: 2px 0 0 !important; font-size: 13px; color: var(--ux-muted); } +.pub-bar .pub-bar-hint:empty { display: none; } +.pub-bar .pub-bar-meter { display: block; width: 100%; height: 6px; margin-top: 8px; accent-color: var(--ux-accent); } +.pub-bar.is-done .pub-bar-meter, .pub-bar.is-warn .pub-bar-meter, .pub-bar.is-error .pub-bar-meter { display: none; } +.pub-bar .pub-bar-close { margin: 0 !important; padding: 0 !important; border: 0 !important; background: none !important; } +.pub-bar .pub-bar-close button { min-width: 44px; min-height: 44px !important; padding: 0 !important; margin: 0 !important; border: 0 !important; background: transparent !important; color: var(--ux-fg) !important; font-size: 18px !important; } +.pub-bar[data-running="1"] .pub-bar-close { display: none; } +/* que la barra no tape lo ultimo de la pagina */ +body.has-pub-bar { padding-bottom: calc(190px + var(--inset-bottom)) !important; } +/* con el menu abierto, la barra se va */ +body:has(#oasis-menu-toggle:checked) .pub-bar { display: none !important; } + /* ---------- zonas tactiles (pruebas de usabilidad del 20/10) ---------- */ /* en el Pixel 9 se midieron por debajo de 44px: logo y avatar de la barra de arriba (42), fichas de filtro (38), pasos de la bienvenida (33) y casillas del dev (16) */ @@ -687,6 +737,7 @@ body .oasis-mobile-topbar .omt-logo img, body .oasis-mobile-topbar .omt-avatar i .main-column .tribe-card-title > a { display: inline-block; padding: 6px 0; min-height: 44px; box-sizing: border-box; } .main-column a.user-link, .main-column a.tag-link { display: inline-block; min-height: 24px; line-height: 24px; } .main-column .message-text a { display: inline-block; min-height: 24px; line-height: 24px; } +.main-column a[href^="http"] { display: inline-block; min-height: 24px; line-height: 24px; } .main-column summary.pm-thread-toggle { min-height: 44px; display: flex; align-items: center; } .main-column form label:has(> input[type="radio"]) { min-height: 44px; display: flex !important; align-items: center; } .main-column input[type="checkbox"]:not(.switch-input):not(.pref-pill-input), .main-column input[type="radio"] { width: 24px !important; height: 24px !important; } diff --git a/src/client/assets/themes/Acampada.css b/src/client/assets/themes/Activista.css similarity index 59% rename from src/client/assets/themes/Acampada.css rename to src/client/assets/themes/Activista.css index 3bd4c88..caea6f4 100644 --- a/src/client/assets/themes/Acampada.css +++ b/src/client/assets/themes/Activista.css @@ -1,32 +1,31 @@ -/* Tema Acampada (rama movil): blanco, negro y cian neon, titulos en Anton. +/* Skin Activista (rama movil): el unico del movil, lo mas simple posible. * - * Los colores y las formas salen de acampada26s.net: bordes negros gruesos, - * botones con sombra solida que se hunden al pulsar y titulos en mayusculas. + * Letra del sistema, titulos en negrita sin mayusculas, bordes de 1px, sin sombras y + * el boton principal relleno con el color de resalte. Los colores salen de las + * variables --a26-* (el nombre viene del skin Acampada, que se quito el 20/10/2026): + * aqui van los de serie y Colores en Ajustes los cambia (mobile_settings.js, hoja + * /mobile-colors.css, que va la ultima). * - * La maqueta de movil es styles/mobile_base.css, que main_views.js carga justo antes - * con su propio versionado (no con @import: se quedaba en la cache del - * WebView); aqui solo se cambian colores, letra y formas encima. Por eso casi todo lleva - * !important: la maqueta tambien lo usa. Las piezas propias de la rama - * (panal, barras) se ajustan en styles/hive_acampada.css. */ -@font-face { - font-family: "Anton"; - src: url("../fonts/Anton-Regular.ttf") format("truetype"); - font-display: swap; -} + * La maqueta de movil es styles/mobile_base.css, que main_views.js carga justo antes; + * aqui solo se cambian colores, letra y formas encima. Por eso casi todo lleva + * !important: la maqueta tambien lo usa. Las piezas propias de la rama (lanzador, + * barras) se ajustan en styles/activista.css. */ :root { --a26-bg: #fff; - --a26-fg: #000; + --a26-fg: #111; --a26-neon: #00e5ff; --a26-soft: #f2f2f2; --a26-muted: #555; --a26-on-neon: #000; --a26-tint: #e5fcff; - --a26-line: #ccc; - --a26-bd: 3px solid var(--a26-fg); - --a26-bd-fino: 2px solid var(--a26-fg); - --a26-radius: 14px; - --a26-tit: "Anton", Impact, "Arial Narrow", sans-serif; + --a26-line: #d6d6d6; + --a26-edge: #8a8a8a; + --a26-danger-text: #c4003b; + --a26-bd: 1px solid var(--a26-edge); + --a26-bd-fino: 1px solid var(--a26-edge); + --a26-radius: 12px; + --a26-tit: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; --a26-txt: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; color-scheme: light; } @@ -43,7 +42,7 @@ header, footer, .header, .main-content, .main-column, .sidebar-left, .sidebar-ri section, article, div, table, .profile { background-color: transparent !important; color: var(--a26-fg) !important; - border-color: var(--a26-fg) !important; + border-color: var(--a26-line) !important; } div { border: 0 !important; box-shadow: none !important; } @@ -52,25 +51,25 @@ span, p, li, td, th, label, small, strong, em, h4, h5, h6 { color: inherit !impo a { color: var(--a26-fg) !important; } a:hover, a:focus-visible { color: var(--a26-on-neon) !important; background-color: var(--a26-neon); } -/* --- titulos: Anton en mayusculas --- */ +/* --- titulos: negrita, sin mayusculas --- */ h1, h2, h3, .card-label, .tags-header h2, .oasis-nav-header { font-family: var(--a26-tit) !important; - font-weight: 400 !important; - text-transform: uppercase; - letter-spacing: .01em; - line-height: 1.05 !important; + font-weight: 700 !important; + text-transform: none !important; + letter-spacing: 0; + line-height: 1.2 !important; color: var(--a26-fg) !important; } -h1 { font-size: 34px !important; } -h2 { font-size: 28px !important; } -h3 { font-size: 21px !important; } -.card-label { font-size: 15px !important; } +h1 { font-size: 26px !important; } +h2 { font-size: 22px !important; } +h3 { font-size: 18px !important; } +.card-label { font-size: 14px !important; } -/* cabecera de cada modulo: titulo con raya gorda debajo, como los h2 de la web */ +/* cabecera de cada modulo: titulo y una raya fina debajo */ .tags-header { background: transparent !important; border: 0 !important; - border-bottom: var(--a26-bd) !important; + border-bottom: 1px solid var(--a26-line) !important; border-radius: 0 !important; padding: 0 0 8px !important; margin: 0 0 16px !important; @@ -78,64 +77,61 @@ h3 { font-size: 21px !important; } } .tags-header p { color: var(--a26-muted) !important; font-size: 15px !important; margin: 4px 0 0 !important; } -/* --- tarjetas: recuadro negro, sin sombras difusas --- */ +/* --- tarjetas: borde fino, sin sombra --- */ .main-column article, .main-column [class$="-card"], .main-column [class*="-card "], .main-column .card, .forum-comment, .feed-row { background: var(--a26-bg) !important; - border: var(--a26-bd-fino) !important; + border: 1px solid var(--a26-line) !important; border-radius: var(--a26-radius) !important; box-shadow: none !important; } .main-column > section { border: 0 !important; padding: 0 !important; } -/* --- botones: los .bt de acampada --- */ +/* --- botones: contorno fino; el elegido y el principal, rellenos --- */ button, input[type="submit"], input[type="button"], .filter-btn, .create-button, .buy-btn, .delete-btn, a.user-link, button.user-link, .date-link, .welcome-banner-start, .update-download-link { - font-family: var(--a26-tit) !important; - font-weight: 400 !important; - text-transform: uppercase; - letter-spacing: .02em; + font-family: var(--a26-txt) !important; + font-weight: 600 !important; + text-transform: none !important; + letter-spacing: 0; background: var(--a26-bg) !important; color: var(--a26-fg) !important; border: var(--a26-bd) !important; border-radius: var(--a26-radius) !important; - box-shadow: 0 5px 0 var(--a26-fg) !important; + box-shadow: none !important; text-decoration: none !important; - transition: transform .12s ease-out, box-shadow .12s ease-out; } button, input[type="submit"], input[type="button"], .filter-btn, .create-button { - min-height: 48px; + min-height: 44px; padding: 8px 16px !important; - font-size: 18px !important; + font-size: 16px !important; margin-bottom: 6px; } button:active, input[type="submit"]:active, input[type="button"]:active, -.filter-btn:active, .create-button:active, a.user-link:active { - transform: translateY(4px); - box-shadow: 0 1px 0 var(--a26-fg) !important; - background: var(--a26-neon) !important; color: var(--a26-on-neon) !important; +.filter-btn:active, a.user-link:active { + background: var(--a26-soft) !important; } -/* el boton elegido (filtros, pestañas): relleno cian */ .filter-btn.active, .mode-buttons .filter-btn.active, .mode-buttons-row .filter-btn.active, .tribe-mode-buttons .filter-btn.active, .filters .filter-btn.active, .activity-filter-grid .filter-btn.active, .activity-sub-filter .filter-btn.active, .bank-range-tabs .filter-btn.active { background: var(--a26-neon) !important; - border-color: var(--a26-fg) !important; + border-color: var(--a26-neon) !important; color: var(--a26-on-neon) !important; } -/* el boton de crear: negro, para que se vea primero */ +/* el principal de cada pantalla (crear, escribir): relleno con el resalte */ .create-button, .mode-buttons .create-button, .mode-buttons-row .create-button, .tribe-mode-buttons .create-button, .filters .create-button { - background: var(--a26-fg) !important; - color: var(--a26-bg) !important; - box-shadow: 0 5px 0 var(--a26-neon) !important; - font-size: 18px !important; + background: var(--a26-neon) !important; + border-color: var(--a26-neon) !important; + color: var(--a26-on-neon) !important; + font-size: 16px !important; padding: 8px 16px !important; min-height: 48px !important; } -.delete-btn { box-shadow: 0 5px 0 #e0004d !important; } +.create-button:active { filter: brightness(.92); } +.delete-btn { border-color: var(--a26-danger-text) !important; color: var(--a26-danger-text) !important; } /* --- formularios --- */ input, textarea, select { @@ -148,33 +144,34 @@ input, textarea, select { min-height: 44px; } input:focus, textarea:focus, select:focus { - outline: 3px solid var(--a26-neon) !important; + outline: 2px solid var(--a26-neon) !important; outline-offset: 1px; } -input[type="checkbox"], input[type="radio"] { min-height: 0; accent-color: var(--a26-fg); } +input[type="checkbox"], input[type="radio"] { min-height: 0; accent-color: var(--a26-neon); } /* --- tablas --- */ -table { border: var(--a26-bd-fino) !important; border-radius: 10px; overflow: hidden; } -table th { background: var(--a26-fg) !important; color: var(--a26-bg) !important; } -table td { border-color: var(--a26-fg) !important; } +table { border: 1px solid var(--a26-line) !important; border-radius: 10px; overflow: hidden; } +table th { background: var(--a26-soft) !important; color: var(--a26-fg) !important; } +table td { border-color: var(--a26-line) !important; } /* --- avisos de upstream (bienvenida, actualizaciones) --- */ .update-banner, .welcome-banner { - background: var(--a26-neon) !important; - color: var(--a26-on-neon) !important; - border: var(--a26-bd) !important; - border-radius: var(--a26-radius) !important; + background: var(--a26-tint) !important; + color: var(--a26-fg) !important; + border: 0 !important; + border-left: 4px solid var(--a26-neon) !important; + border-radius: 10px !important; margin: 8px 10px !important; } -.update-banner-link, .update-banner-text { color: var(--a26-on-neon) !important; } +.update-banner-link, .update-banner-text { color: var(--a26-fg) !important; } .welcome-banner-close-btn { - background: var(--a26-bg) !important; - box-shadow: none !important; - min-height: 40px; width: 40px; padding: 0 !important; + background: transparent !important; + border: 0 !important; + min-height: 44px; width: 44px; padding: 0 !important; } /* --- colores sueltos de OasisMobile que se quedaban en amarillo o naranja --- */ -.avatar, .article img, .post-preview img { border-color: var(--a26-fg) !important; } +.avatar, .article img, .post-preview img { border-color: var(--a26-line) !important; } .profile .name, .snh-invite-code, .stats-kpi-label, .stats-kpi-value, .carbon-bar-formula, a.hashtag, .chat-topic-title, .chat-topic-active .chat-topic-title, .chat-topic-meta, .chat-topic-last-author, .chat-workspace-details > .tribe-side .tribe-card-members { @@ -186,13 +183,8 @@ a.hashtag { text-decoration: underline !important; } /* --- pie --- */ .oasis-footer, .oasis-footer * { color: var(--a26-muted) !important; background: transparent !important; } -.oasis-footer { border-top: var(--a26-bd) !important; margin-top: 32px; } +.oasis-footer { border-top: 1px solid var(--a26-line) !important; margin-top: 32px; } .oasis-footer a { text-decoration: underline !important; } -::-webkit-scrollbar-thumb { background-color: var(--a26-fg) !important; } +::-webkit-scrollbar-thumb { background-color: var(--a26-edge) !important; } ::-webkit-scrollbar-track { background-color: var(--a26-soft) !important; } - -@media (prefers-reduced-motion: reduce) { - button, .filter-btn, .create-button { transition: none; } - button:active, .filter-btn:active, .create-button:active { transform: none; } -} diff --git a/src/client/assets/translations/i18n_fork.js b/src/client/assets/translations/i18n_fork.js index 4378fd5..8b1d33e 100644 --- a/src/client/assets/translations/i18n_fork.js +++ b/src/client/assets/translations/i18n_fork.js @@ -22,6 +22,21 @@ module.exports = { bbMenuClose: "Close", uxPickHint: "Tap one and it is saved. You can change it any time in Settings.", uxPickCurrent: "In use", + pubBarJoining: "Joining the pub… it can take up to a minute. Keep the app open.", + pubBarJoinFailed: "If you did not get into the pub, the usual reasons are: no connection (wifi or data), the pub is down, or the invite was already used. Try another pub from the list, or later.", + pubBarDownload: "Downloading the network from {pub} ({tier})…", + pubBarTierRecent: "the latest", + pubBarTierFull: "everything before", + pubBarRestore: "Saving to your phone: {pct}% · {n} messages", + pubBarHint: "You can keep using the app meanwhile.", + pubBarDone: "You are in {pub}: {n} messages downloaded.", + pubBarErrNoSnap: "You joined {pub}, but it offers no copy to download at once. Posts will arrive little by little while the app is open.", + pubBarErrNet: "Cannot reach {pub}. Check that you have Internet (wifi or data) and try again later; if it keeps failing, the pub may be down.", + pubBarErrOther: "The download from {pub} stopped ({error}). You are in; the rest will arrive little by little.", + pubBarClose: "Close", + pubBarBackupRestore: "Restoring your backup: {pct}% · {n} messages", + pubBarBackupDone: "Backup restored: {n} messages.", + pubBarBackupErr: "The backup could not be restored: {error}. Check the file and the password.", quickTitle: "The basics", quickHint: "What you chose when you started, one tap away.", quick_identity: "Identity", @@ -37,7 +52,6 @@ module.exports = { quickWriteGreeting: "Write a greeting", welcomeHintColors: "Background, text and highlight colour of the app.", colorsHint: "Tap a palette and it is applied.", - colorsSkinNote: "Colours go with the Acampada look; choosing one switches to it.", colorsCustom: "Your own", colorsBg: "Background", colorsFg: "Text", @@ -45,7 +59,7 @@ module.exports = { colorsApply: "Apply", colorsFixed: "The text could not be read on that background, so it was set to black or white.", colorsKeep: "Keep these", - palette_acampada: "Acampada", + palette_acampada: "Light", palette_noche: "Night", palette_oro: "Gold", palette_bosque: "Forest", @@ -144,6 +158,21 @@ module.exports = { bbMenuClose: "Cerrar", uxPickHint: "Toca uno y queda guardado. Puedes cambiarlo cuando quieras en Ajustes.", uxPickCurrent: "En uso", + pubBarJoining: "Uniéndote al pub… puede tardar hasta un minuto. No cierres la app.", + pubBarJoinFailed: "Si no has entrado en el pub, lo más habitual es: no hay conexión (wifi o datos), el pub está caído o la invitación ya se ha usado. Prueba con otro pub de la lista o más tarde.", + pubBarDownload: "Descargando la red de {pub} ({tier})…", + pubBarTierRecent: "lo más reciente", + pubBarTierFull: "todo lo anterior", + pubBarRestore: "Guardando en tu móvil: {pct} % · {n} mensajes", + pubBarHint: "Puedes seguir usando la app mientras tanto.", + pubBarDone: "Ya estás en {pub}: {n} mensajes descargados.", + pubBarErrNoSnap: "Te has unido a {pub}, pero no ofrece una copia para descargar de golpe. Lo que publique la gente irá llegando poco a poco mientras la app esté abierta.", + pubBarErrNet: "No se puede conectar con {pub}. Comprueba que tienes Internet (wifi o datos) y vuelve a probar en un rato; si sigue igual, el pub puede estar caído.", + pubBarErrOther: "La descarga desde {pub} se ha cortado ({error}). Ya estás dentro; lo demás llegará poco a poco.", + pubBarClose: "Cerrar", + pubBarBackupRestore: "Restaurando tu copia: {pct} % · {n} mensajes", + pubBarBackupDone: "Copia restaurada: {n} mensajes.", + pubBarBackupErr: "No se ha podido restaurar la copia: {error}. Revisa el archivo y la contraseña.", quickTitle: "Lo básico", quickHint: "Lo que elegiste al empezar, a un toque.", quick_identity: "Identidad", @@ -159,7 +188,6 @@ module.exports = { quickWriteGreeting: "Escribir el saludo", welcomeHintColors: "Fondo, texto y color de resalte de la app.", colorsHint: "Toca una paleta y se aplica.", - colorsSkinNote: "Los colores van con el aspecto Acampada; al elegir uno se pasa a ese aspecto.", colorsCustom: "A tu gusto", colorsBg: "Fondo", colorsFg: "Texto", @@ -167,7 +195,7 @@ module.exports = { colorsApply: "Aplicar", colorsFixed: "El texto no se leía sobre ese fondo, así que se ha puesto en negro o blanco.", colorsKeep: "Dejar estos", - palette_acampada: "Acampada", + palette_acampada: "Claro", palette_noche: "Noche", palette_oro: "Oro", palette_bosque: "Bosque", @@ -272,6 +300,21 @@ module.exports = { bbMenuClose: "Fermer", uxPickHint: "Touchez-en un et c'est enregistré. Vous pouvez le changer à tout moment dans les Paramètres.", uxPickCurrent: "Actuel", + pubBarJoining: "Connexion au pub… cela peut prendre jusqu'à une minute. Gardez l'app ouverte.", + pubBarJoinFailed: "Si vous n'êtes pas entré dans le pub, c'est souvent : pas de connexion (wifi ou données), pub hors service, ou invitation déjà utilisée. Essayez un autre pub de la liste, ou plus tard.", + pubBarDownload: "Téléchargement du réseau depuis {pub} ({tier})…", + pubBarTierRecent: "le plus récent", + pubBarTierFull: "tout le reste", + pubBarRestore: "Enregistrement sur votre téléphone : {pct} % · {n} messages", + pubBarHint: "Vous pouvez continuer à utiliser l'app.", + pubBarDone: "Vous êtes dans {pub} : {n} messages téléchargés.", + pubBarErrNoSnap: "Vous avez rejoint {pub}, mais il ne propose pas de copie à télécharger d'un coup. Les publications arriveront peu à peu tant que l'app est ouverte.", + pubBarErrNet: "Impossible de joindre {pub}. Vérifiez votre connexion (wifi ou données) et réessayez plus tard ; si cela continue, le pub est peut-être hors service.", + pubBarErrOther: "Le téléchargement depuis {pub} s'est interrompu ({error}). Vous êtes dedans ; le reste arrivera peu à peu.", + pubBarClose: "Fermer", + pubBarBackupRestore: "Restauration de votre sauvegarde : {pct} % · {n} messages", + pubBarBackupDone: "Sauvegarde restaurée : {n} messages.", + pubBarBackupErr: "Impossible de restaurer la sauvegarde : {error}. Vérifiez le fichier et le mot de passe.", quickTitle: "L'essentiel", quickHint: "Ce que vous avez choisi au début, à portée de doigt.", quick_identity: "Identité", @@ -287,7 +330,6 @@ module.exports = { quickWriteGreeting: "Écrire un salut", welcomeHintColors: "Fond, texte et couleur d'accent de l'application.", colorsHint: "Touchez une palette et elle s'applique.", - colorsSkinNote: "Les couleurs vont avec l'aspect Acampada ; en choisir une passe à cet aspect.", colorsCustom: "À votre goût", colorsBg: "Fond", colorsFg: "Texte", @@ -295,7 +337,7 @@ module.exports = { colorsApply: "Appliquer", colorsFixed: "Le texte n'était pas lisible sur ce fond, il a été mis en noir ou en blanc.", colorsKeep: "Garder celles-ci", - palette_acampada: "Acampada", + palette_acampada: "Clair", palette_noche: "Nuit", palette_oro: "Or", palette_bosque: "Forêt", @@ -394,6 +436,21 @@ module.exports = { bbMenuClose: "Itxi", uxPickHint: "Bat ukitu eta gordeta geratzen da. Nahi duzunean alda dezakezu Ezarpenetan.", uxPickCurrent: "Erabiltzen", + pubBarJoining: "Pubera sartzen… minutu bat arte iraun dezake. Ez itxi aplikazioa.", + pubBarJoinFailed: "Pubean sartu ez bazara, ohikoena hau da: ez dago konexiorik (wifia edo datuak), puba eroria dago edo gonbidapena erabilita dago. Saiatu zerrendako beste pub batekin edo geroago.", + pubBarDownload: "{pub}-ren sarea deskargatzen ({tier})…", + pubBarTierRecent: "berriena", + pubBarTierFull: "aurreko guztia", + pubBarRestore: "Mugikorrean gordetzen: % {pct} · {n} mezu", + pubBarHint: "Bitartean aplikazioa erabiltzen jarrai dezakezu.", + pubBarDone: "{pub}-n zaude: {n} mezu deskargatuta.", + pubBarErrNoSnap: "{pub}-ra batu zara, baina ez du kopiarik eskaintzen behin betiko deskargatzeko. Jendeak argitaratzen duena pixkanaka iritsiko da aplikazioa irekita dagoen bitartean.", + pubBarErrNet: "Ezin da {pub}-rekin konektatu. Egiaztatu Interneta duzula (wifia edo datuak) eta saiatu berriro geroago; berdin jarraitzen badu, puba eroria egon daiteke.", + pubBarErrOther: "{pub}-tik deskarga eten da ({error}). Barruan zaude; gainerakoa pixkanaka iritsiko da.", + pubBarClose: "Itxi", + pubBarBackupRestore: "Zure kopia leheneratzen: % {pct} · {n} mezu", + pubBarBackupDone: "Kopia leheneratuta: {n} mezu.", + pubBarBackupErr: "Ezin izan da kopia leheneratu: {error}. Begiratu fitxategia eta pasahitza.", quickTitle: "Oinarrizkoa", quickHint: "Hasieran aukeratu zenuena, ukitu batera.", quick_identity: "Nortasuna", @@ -409,7 +466,6 @@ module.exports = { quickWriteGreeting: "Agurra idatzi", welcomeHintColors: "Aplikazioaren hondoa, testua eta nabarmentze-kolorea.", colorsHint: "Ukitu paleta bat eta aplikatzen da.", - colorsSkinNote: "Koloreak Acampada itxurarekin doaz; bat aukeratzean itxura horretara pasatzen da.", colorsCustom: "Zure gustura", colorsBg: "Hondoa", colorsFg: "Testua", @@ -417,7 +473,7 @@ module.exports = { colorsApply: "Aplikatu", colorsFixed: "Testua ez zen irakurtzen hondo horretan, beltzez edo zuriz jarri da.", colorsKeep: "Hauek utzi", - palette_acampada: "Acampada", + palette_acampada: "Argia", palette_noche: "Gaua", palette_oro: "Urrea", palette_bosque: "Basoa", @@ -516,6 +572,21 @@ module.exports = { bbMenuClose: "Schließen", uxPickHint: "Tippe eins an und es ist gespeichert. Du kannst es jederzeit in den Einstellungen ändern.", uxPickCurrent: "Aktiv", + pubBarJoining: "Beitritt zum Pub… das kann bis zu einer Minute dauern. Lass die App offen.", + pubBarJoinFailed: "Wenn du nicht in den Pub gekommen bist, liegt es meist daran: keine Verbindung (WLAN oder Daten), der Pub ist down oder die Einladung wurde schon benutzt. Probier einen anderen Pub aus der Liste oder später.", + pubBarDownload: "Netzwerk wird von {pub} geladen ({tier})…", + pubBarTierRecent: "das Neueste", + pubBarTierFull: "alles davor", + pubBarRestore: "Wird auf dein Handy gespeichert: {pct} % · {n} Nachrichten", + pubBarHint: "Du kannst die App solange weiter benutzen.", + pubBarDone: "Du bist in {pub}: {n} Nachrichten geladen.", + pubBarErrNoSnap: "Du bist {pub} beigetreten, aber es bietet keine Kopie zum Herunterladen. Beiträge kommen nach und nach, solange die App offen ist.", + pubBarErrNet: "{pub} ist nicht erreichbar. Prüfe deine Internetverbindung (WLAN oder Daten) und versuch es später; wenn es so bleibt, ist der Pub vielleicht down.", + pubBarErrOther: "Der Download von {pub} wurde unterbrochen ({error}). Du bist drin; der Rest kommt nach und nach.", + pubBarClose: "Schließen", + pubBarBackupRestore: "Sicherung wird wiederhergestellt: {pct} % · {n} Nachrichten", + pubBarBackupDone: "Sicherung wiederhergestellt: {n} Nachrichten.", + pubBarBackupErr: "Die Sicherung konnte nicht wiederhergestellt werden: {error}. Prüfe Datei und Passwort.", quickTitle: "Das Wichtigste", quickHint: "Was du am Anfang gewählt hast, mit einem Tipp.", quick_identity: "Identität", @@ -531,7 +602,6 @@ module.exports = { quickWriteGreeting: "Gruß schreiben", welcomeHintColors: "Hintergrund, Text und Akzentfarbe der App.", colorsHint: "Tippe auf eine Palette und sie wird angewendet.", - colorsSkinNote: "Die Farben gehören zum Acampada-Design; mit einer Auswahl wechselst du dorthin.", colorsCustom: "Eigene", colorsBg: "Hintergrund", colorsFg: "Text", @@ -539,7 +609,7 @@ module.exports = { colorsApply: "Anwenden", colorsFixed: "Der Text war auf diesem Hintergrund nicht lesbar, daher wurde er schwarz oder weiß gesetzt.", colorsKeep: "Diese behalten", - palette_acampada: "Acampada", + palette_acampada: "Hell", palette_noche: "Nacht", palette_oro: "Gold", palette_bosque: "Wald", @@ -638,6 +708,21 @@ module.exports = { bbMenuClose: "Chiudi", uxPickHint: "Toccane uno ed è salvato. Puoi cambiarlo quando vuoi nelle Impostazioni.", uxPickCurrent: "In uso", + pubBarJoining: "Ti stai unendo al pub… può volerci fino a un minuto. Tieni l'app aperta.", + pubBarJoinFailed: "Se non sei entrato nel pub, di solito è perché: non c'è connessione (wifi o dati), il pub è giù o l'invito è già stato usato. Prova un altro pub della lista, o più tardi.", + pubBarDownload: "Scaricamento della rete da {pub} ({tier})…", + pubBarTierRecent: "il più recente", + pubBarTierFull: "tutto il resto", + pubBarRestore: "Salvataggio sul telefono: {pct} % · {n} messaggi", + pubBarHint: "Puoi continuare a usare l'app nel frattempo.", + pubBarDone: "Sei in {pub}: {n} messaggi scaricati.", + pubBarErrNoSnap: "Ti sei unito a {pub}, ma non offre una copia da scaricare in un colpo. I post arriveranno poco a poco mentre l'app è aperta.", + pubBarErrNet: "Impossibile raggiungere {pub}. Controlla di avere Internet (wifi o dati) e riprova più tardi; se continua, il pub potrebbe essere giù.", + pubBarErrOther: "Lo scaricamento da {pub} si è interrotto ({error}). Sei dentro; il resto arriverà poco a poco.", + pubBarClose: "Chiudi", + pubBarBackupRestore: "Ripristino del backup: {pct} % · {n} messaggi", + pubBarBackupDone: "Backup ripristinato: {n} messaggi.", + pubBarBackupErr: "Impossibile ripristinare il backup: {error}. Controlla file e password.", quickTitle: "L'essenziale", quickHint: "Quello che hai scelto all'inizio, a portata di tocco.", quick_identity: "Identità", @@ -653,7 +738,6 @@ module.exports = { quickWriteGreeting: "Scrivi un saluto", welcomeHintColors: "Sfondo, testo e colore di risalto dell'app.", colorsHint: "Tocca una tavolozza e viene applicata.", - colorsSkinNote: "I colori vanno con l'aspetto Acampada; sceglierne uno passa a quell'aspetto.", colorsCustom: "A modo tuo", colorsBg: "Sfondo", colorsFg: "Testo", @@ -661,7 +745,7 @@ module.exports = { colorsApply: "Applica", colorsFixed: "Il testo non si leggeva su quello sfondo, quindi è stato messo nero o bianco.", colorsKeep: "Tieni questi", - palette_acampada: "Acampada", + palette_acampada: "Chiaro", palette_noche: "Notte", palette_oro: "Oro", palette_bosque: "Bosco", @@ -760,6 +844,21 @@ module.exports = { bbMenuClose: "Fechar", uxPickHint: "Toque num e fica guardado. Pode mudá-lo quando quiser nas Definições.", uxPickCurrent: "Em uso", + pubBarJoining: "A entrar no pub… pode demorar até um minuto. Não feche a app.", + pubBarJoinFailed: "Se não entrou no pub, o mais habitual é: não há ligação (wifi ou dados), o pub está em baixo ou o convite já foi usado. Tente outro pub da lista, ou mais tarde.", + pubBarDownload: "A descarregar a rede de {pub} ({tier})…", + pubBarTierRecent: "o mais recente", + pubBarTierFull: "tudo o anterior", + pubBarRestore: "A guardar no telemóvel: {pct} % · {n} mensagens", + pubBarHint: "Pode continuar a usar a app entretanto.", + pubBarDone: "Está em {pub}: {n} mensagens descarregadas.", + pubBarErrNoSnap: "Entrou em {pub}, mas não oferece uma cópia para descarregar de uma vez. As publicações vão chegando aos poucos enquanto a app estiver aberta.", + pubBarErrNet: "Não é possível ligar a {pub}. Verifique se tem Internet (wifi ou dados) e tente mais tarde; se continuar, o pub pode estar em baixo.", + pubBarErrOther: "A descarga de {pub} parou ({error}). Já está dentro; o resto chegará aos poucos.", + pubBarClose: "Fechar", + pubBarBackupRestore: "A restaurar a cópia: {pct} % · {n} mensagens", + pubBarBackupDone: "Cópia restaurada: {n} mensagens.", + pubBarBackupErr: "Não foi possível restaurar a cópia: {error}. Verifique o ficheiro e a palavra-passe.", quickTitle: "O essencial", quickHint: "O que escolheu ao começar, a um toque.", quick_identity: "Identidade", @@ -775,7 +874,6 @@ module.exports = { quickWriteGreeting: "Escrever a saudação", welcomeHintColors: "Fundo, texto e cor de destaque da app.", colorsHint: "Toque numa paleta e ela aplica-se.", - colorsSkinNote: "As cores vão com o aspeto Acampada; escolher uma passa para esse aspeto.", colorsCustom: "À sua maneira", colorsBg: "Fundo", colorsFg: "Texto", @@ -783,7 +881,7 @@ module.exports = { colorsApply: "Aplicar", colorsFixed: "O texto não se lia nesse fundo, por isso ficou preto ou branco.", colorsKeep: "Manter estas", - palette_acampada: "Acampada", + palette_acampada: "Claro", palette_noche: "Noite", palette_oro: "Ouro", palette_bosque: "Floresta", @@ -882,6 +980,21 @@ module.exports = { bbMenuClose: "关闭", uxPickHint: "点一下即保存。随时可以在设置中更改。", uxPickCurrent: "使用中", + pubBarJoining: "正在加入 pub……最多可能需要一分钟。请不要关闭应用。", + pubBarJoinFailed: "如果没有进入 pub,常见原因是:没有网络(wifi 或流量)、pub 已停止服务,或邀请已被使用。请尝试列表中的其他 pub,或稍后再试。", + pubBarDownload: "正在从 {pub} 下载网络({tier})……", + pubBarTierRecent: "最新内容", + pubBarTierFull: "之前的全部", + pubBarRestore: "正在保存到手机:{pct}% · {n} 条消息", + pubBarHint: "在此期间你可以继续使用应用。", + pubBarDone: "你已加入 {pub}:已下载 {n} 条消息。", + pubBarErrNoSnap: "你已加入 {pub},但它不提供可一次下载的副本。应用打开时,内容会陆续到达。", + pubBarErrNet: "无法连接 {pub}。请检查网络(wifi 或流量),稍后再试;如果仍然失败,pub 可能已停止服务。", + pubBarErrOther: "从 {pub} 的下载中断了({error})。你已加入,其余内容会陆续到达。", + pubBarClose: "关闭", + pubBarBackupRestore: "正在恢复备份:{pct}% · {n} 条消息", + pubBarBackupDone: "备份已恢复:{n} 条消息。", + pubBarBackupErr: "无法恢复备份:{error}。请检查文件和密码。", quickTitle: "基本设置", quickHint: "开始时的选择,一点即达。", quick_identity: "身份", @@ -897,7 +1010,6 @@ module.exports = { quickWriteGreeting: "写问候", welcomeHintColors: "应用的背景、文字和强调色。", colorsHint: "点一个配色即可应用。", - colorsSkinNote: "颜色配合 Acampada 外观;选择后会切换到该外观。", colorsCustom: "自定义", colorsBg: "背景", colorsFg: "文字", @@ -905,7 +1017,7 @@ module.exports = { colorsApply: "应用", colorsFixed: "文字在该背景上看不清,已改为黑色或白色。", colorsKeep: "保留这些", - palette_acampada: "Acampada", + palette_acampada: "浅色", palette_noche: "夜晚", palette_oro: "金色", palette_bosque: "森林", @@ -1004,6 +1116,21 @@ module.exports = { bbMenuClose: "إغلاق", uxPickHint: "المس واحدًا ويُحفظ. يمكنك تغييره في أي وقت من الإعدادات.", uxPickCurrent: "قيد الاستخدام", + pubBarJoining: "جارٍ الانضمام إلى الـ pub… قد يستغرق ذلك دقيقة. أبقِ التطبيق مفتوحًا.", + pubBarJoinFailed: "إن لم تدخل إلى الـ pub، فالأسباب المعتادة: لا يوجد اتصال (واي فاي أو بيانات)، أو الـ pub متوقف، أو الدعوة استُخدمت من قبل. جرّب pub آخر من القائمة أو لاحقًا.", + pubBarDownload: "جارٍ تنزيل الشبكة من {pub} ({tier})…", + pubBarTierRecent: "الأحدث", + pubBarTierFull: "كل ما سبق", + pubBarRestore: "جارٍ الحفظ على هاتفك: {pct}% · {n} رسالة", + pubBarHint: "يمكنك متابعة استخدام التطبيق في هذه الأثناء.", + pubBarDone: "أنت في {pub}: تم تنزيل {n} رسالة.", + pubBarErrNoSnap: "انضممت إلى {pub}، لكنه لا يقدم نسخة للتنزيل دفعة واحدة. ستصل المنشورات تدريجيًا ما دام التطبيق مفتوحًا.", + pubBarErrNet: "تعذّر الاتصال بـ {pub}. تحقق من اتصالك بالإنترنت (واي فاي أو بيانات) وحاول لاحقًا؛ إن استمر الأمر فقد يكون الـ pub متوقفًا.", + pubBarErrOther: "توقف التنزيل من {pub} ({error}). أنت منضم؛ وسيصل الباقي تدريجيًا.", + pubBarClose: "إغلاق", + pubBarBackupRestore: "جارٍ استعادة النسخة الاحتياطية: {pct}% · {n} رسالة", + pubBarBackupDone: "تمت استعادة النسخة: {n} رسالة.", + pubBarBackupErr: "تعذّرت استعادة النسخة: {error}. تحقق من الملف وكلمة المرور.", quickTitle: "الأساسيات", quickHint: "ما اخترته في البداية، بلمسة واحدة.", quick_identity: "الهوية", @@ -1019,7 +1146,6 @@ module.exports = { quickWriteGreeting: "كتابة التحية", welcomeHintColors: "لون الخلفية والنص والتمييز في التطبيق.", colorsHint: "المس لوحة ألوان فتُطبَّق.", - colorsSkinNote: "الألوان تأتي مع مظهر Acampada؛ اختيار لون ينقلك إليه.", colorsCustom: "على ذوقك", colorsBg: "الخلفية", colorsFg: "النص", @@ -1027,7 +1153,7 @@ module.exports = { colorsApply: "تطبيق", colorsFixed: "لم يكن النص مقروءًا على تلك الخلفية، فجُعل أسود أو أبيض.", colorsKeep: "الإبقاء على هذه", - palette_acampada: "Acampada", + palette_acampada: "فاتح", palette_noche: "ليل", palette_oro: "ذهب", palette_bosque: "غابة", @@ -1126,6 +1252,21 @@ module.exports = { bbMenuClose: "बंद करें", uxPickHint: "एक पर टैप करें और वह सेव हो जाएगा। सेटिंग्स में इसे कभी भी बदल सकते हैं।", uxPickCurrent: "चालू", + pubBarJoining: "pub से जुड़ रहे हैं… इसमें एक मिनट तक लग सकता है। ऐप खुला रखें।", + pubBarJoinFailed: "अगर आप pub में नहीं जा पाए, तो आम वजहें हैं: कनेक्शन नहीं है (वाई-फ़ाई या डेटा), pub बंद है, या निमंत्रण पहले ही इस्तेमाल हो चुका है। सूची से कोई दूसरा pub आज़माएँ, या बाद में।", + pubBarDownload: "{pub} से नेटवर्क डाउनलोड हो रहा है ({tier})…", + pubBarTierRecent: "सबसे नया", + pubBarTierFull: "पहले का सब कुछ", + pubBarRestore: "आपके फ़ोन में सहेजा जा रहा है: {pct}% · {n} संदेश", + pubBarHint: "इस बीच आप ऐप का उपयोग जारी रख सकते हैं।", + pubBarDone: "आप {pub} में हैं: {n} संदेश डाउनलोड हुए।", + pubBarErrNoSnap: "आप {pub} से जुड़ गए, पर यह एक बार में डाउनलोड करने के लिए कॉपी नहीं देता। ऐप खुला रहने पर पोस्ट धीरे-धीरे आएँगी।", + pubBarErrNet: "{pub} से जुड़ नहीं पा रहे। जाँचें कि इंटरनेट (वाई-फ़ाई या डेटा) है और बाद में फिर कोशिश करें; अगर ऐसा ही रहे तो pub बंद हो सकता है।", + pubBarErrOther: "{pub} से डाउनलोड रुक गया ({error})। आप जुड़ चुके हैं; बाकी धीरे-धीरे आएगा।", + pubBarClose: "बंद करें", + pubBarBackupRestore: "आपका बैकअप बहाल हो रहा है: {pct}% · {n} संदेश", + pubBarBackupDone: "बैकअप बहाल हुआ: {n} संदेश।", + pubBarBackupErr: "बैकअप बहाल नहीं हो सका: {error}। फ़ाइल और पासवर्ड जाँचें।", quickTitle: "मूल बातें", quickHint: "शुरुआत में जो चुना था, एक टैप पर।", quick_identity: "पहचान", @@ -1141,7 +1282,6 @@ module.exports = { quickWriteGreeting: "अभिवादन लिखें", welcomeHintColors: "ऐप का पृष्ठभूमि, टेक्स्ट और हाइलाइट रंग।", colorsHint: "किसी पैलेट पर टैप करें और वह लागू हो जाएगा।", - colorsSkinNote: "रंग Acampada रूप के साथ चलते हैं; कोई चुनने पर वही रूप लग जाता है।", colorsCustom: "अपनी पसंद", colorsBg: "पृष्ठभूमि", colorsFg: "टेक्स्ट", @@ -1149,7 +1289,7 @@ module.exports = { colorsApply: "लागू करें", colorsFixed: "उस पृष्ठभूमि पर टेक्स्ट पढ़ा नहीं जा रहा था, इसलिए काला या सफ़ेद कर दिया गया।", colorsKeep: "इन्हें रखें", - palette_acampada: "Acampada", + palette_acampada: "हल्का", palette_noche: "रात", palette_oro: "सोना", palette_bosque: "जंगल", @@ -1248,6 +1388,21 @@ module.exports = { bbMenuClose: "Закрыть", uxPickHint: "Нажмите на вариант, и он сохранится. Изменить можно в любой момент в Настройках.", uxPickCurrent: "Сейчас", + pubBarJoining: "Подключение к пабу… это может занять до минуты. Не закрывайте приложение.", + pubBarJoinFailed: "Если не удалось войти в паб, обычно причина такая: нет связи (wifi или мобильные данные), паб недоступен или приглашение уже использовано. Попробуйте другой паб из списка или позже.", + pubBarDownload: "Загрузка сети с {pub} ({tier})…", + pubBarTierRecent: "самое новое", + pubBarTierFull: "всё остальное", + pubBarRestore: "Сохранение на телефон: {pct} % · {n} сообщений", + pubBarHint: "Пока можно пользоваться приложением.", + pubBarDone: "Вы в {pub}: загружено {n} сообщений.", + pubBarErrNoSnap: "Вы присоединились к {pub}, но он не даёт копию для загрузки целиком. Публикации будут приходить постепенно, пока приложение открыто.", + pubBarErrNet: "Не удаётся связаться с {pub}. Проверьте интернет (wifi или мобильные данные) и попробуйте позже; если не получится, паб может быть недоступен.", + pubBarErrOther: "Загрузка с {pub} прервалась ({error}). Вы уже внутри; остальное придёт постепенно.", + pubBarClose: "Закрыть", + pubBarBackupRestore: "Восстановление резервной копии: {pct} % · {n} сообщений", + pubBarBackupDone: "Копия восстановлена: {n} сообщений.", + pubBarBackupErr: "Не удалось восстановить копию: {error}. Проверьте файл и пароль.", quickTitle: "Основное", quickHint: "То, что вы выбрали в начале, в одно касание.", quick_identity: "Личность", @@ -1263,7 +1418,6 @@ module.exports = { quickWriteGreeting: "Написать приветствие", welcomeHintColors: "Фон, текст и цвет выделения в приложении.", colorsHint: "Нажмите на палитру, и она применится.", - colorsSkinNote: "Цвета идут с оформлением Acampada; при выборе включается оно.", colorsCustom: "Свои", colorsBg: "Фон", colorsFg: "Текст", @@ -1271,7 +1425,7 @@ module.exports = { colorsApply: "Применить", colorsFixed: "Текст не читался на этом фоне, поэтому он стал чёрным или белым.", colorsKeep: "Оставить эти", - palette_acampada: "Acampada", + palette_acampada: "Светлая", palette_noche: "Ночь", palette_oro: "Золото", palette_bosque: "Лес", diff --git a/src/client/public/js/mobile_pub.js b/src/client/public/js/mobile_pub.js new file mode 100644 index 0000000..b016884 --- /dev/null +++ b/src/client/public/js/mobile_pub.js @@ -0,0 +1,72 @@ +// Barra de unirse a un pub (ver views/mobile_pubbar.js). Sin este script la barra se +// ve igual al cargar cada pagina; con el, se pone al dia sola y sale nada mas tocar +// "unirse", sin recargar la pagina. +(function () { + var bar = document.getElementById('pub-bar'); + if (!bar || !window.fetch) return; + var text = bar.querySelector('.pub-bar-text'); + var hint = bar.querySelector('.pub-bar-hint'); + var meter = bar.querySelector('.pub-bar-meter'); + var timer = null; + + function show(s) { + if (!s || s.kind === 'none') { bar.hidden = true; document.body.classList.remove('has-pub-bar'); return; } + bar.hidden = false; + document.body.classList.add('has-pub-bar'); + bar.className = 'pub-bar is-' + s.kind; + bar.setAttribute('data-running', s.running ? '1' : '0'); + text.textContent = s.text || ''; + hint.textContent = s.hint || ''; + if (s.pct == null) meter.removeAttribute('value'); else meter.value = s.pct; + } + + function poll() { + fetch('/mobile/pub-status', { credentials: 'same-origin', cache: 'no-store' }) + .then(function (r) { return r.json(); }) + .then(function (s) { + show(s); + clearTimeout(timer); + if (s && s.running) timer = setTimeout(poll, 2000); + }) + .catch(function () { clearTimeout(timer); timer = setTimeout(poll, 5000); }); + } + + if (!bar.hidden) document.body.classList.add('has-pub-bar'); + if (bar.getAttribute('data-running') === '1') timer = setTimeout(poll, 2000); + + // despues de intentar unirse: si no ha arrancado ninguna descarga, explicar las + // causas habituales (el aviso del dev a veces dice "codigo no valido" cuando lo + // que pasa es que no hay red). Solo se mira nuestro estado, no la pagina del dev + var tried = 0; + try { tried = Number(sessionStorage.getItem('oasisPubJoin')) || 0; sessionStorage.removeItem('oasisPubJoin'); } catch (_) {} + if (tried && Date.now() - tried < 3 * 60 * 1000 && bar.hidden) { + fetch('/mobile/pub-status', { credentials: 'same-origin', cache: 'no-store' }) + .then(function (r) { return r.json(); }) + .then(function (s) { + if (s && s.kind !== 'none') { show(s); if (s.running) timer = setTimeout(poll, 2000); return; } + show({ kind: 'error', running: false, pct: null, text: bar.getAttribute('data-failed'), hint: '' }); + }) + .catch(function () {}); + } + + // al tocar unirse (Invitaciones, bienvenida, Ajustes, importar pubs): la barra sale ya. El + // dev tarda en contestar mientras conecta con el pub y la pantalla se quedaba quieta + document.addEventListener('submit', function (e) { + var f = e.target; + var action = (f && f.getAttribute('action')) || ''; + var by = e.submitter && e.submitter.value; + if (!/^\/(invites\/join|invites\/import-pubs|settings\/invite\/accept|welcome\/community)$/.test(action) || by === 'skip') return; + // en la bienvenida, solo si hay algun pub marcado (sin e.submitter en WebView viejos) + if (action === '/welcome/community' && !f.querySelector('input[name="pub"]:checked')) return; + try { sessionStorage.setItem('oasisPubJoin', String(Date.now())); } catch (_) {} + show({ kind: 'joining', running: true, pct: null, text: bar.getAttribute('data-joining'), hint: '' }); + }); + + // cerrar sin cambiar de pagina + var close = bar.querySelector('.pub-bar-close'); + if (close) close.addEventListener('submit', function (e) { + e.preventDefault(); + fetch(close.getAttribute('action'), { method: 'POST', credentials: 'same-origin' }).catch(function () {}); + show(null); + }); +})(); diff --git a/src/configs/oasis-config.json b/src/configs/oasis-config.json index 2ee9846..a0514d2 100644 --- a/src/configs/oasis-config.json +++ b/src/configs/oasis-config.json @@ -1,39 +1,39 @@ { "themes": { - "current": "Acampada" + "current": "Activista" }, "ux": { "current": "blocks" }, "modules": { "blogsMod": "on", - "pollsMod": "off", - "fediverseMod": "off", + "pollsMod": "on", + "fediverseMod": "on", "invitesMod": "on", "walletMod": "off", "devMod": "off", - "cipherMod": "off", - "bookmarksMod": "off", + "cipherMod": "on", + "bookmarksMod": "on", "videosMod": "on", - "docsMod": "off", - "audiosMod": "off", - "tagsMod": "off", + "docsMod": "on", + "audiosMod": "on", + "tagsMod": "on", "imagesMod": "on", - "trendingMod": "off", + "trendingMod": "on", "eventsMod": "on", - "tasksMod": "off", + "tasksMod": "on", "marketMod": "off", "votesMod": "on", "tribesMod": "on", - "reportsMod": "off", - "opinionsMod": "off", + "reportsMod": "on", + "opinionsMod": "on", "padsMod": "on", - "calendarsMod": "off", + "calendarsMod": "on", "transfersMod": "off", "feedMod": "on", "pixeliaMod": "off", - "melodyMod": "off", - "agendaMod": "off", + "melodyMod": "on", + "agendaMod": "on", "aiMod": "off", "aiNavMod": "off", "forumMod": "on", @@ -41,28 +41,28 @@ "housingMod": "off", "jobsMod": "off", "shopsMod": "off", - "projectsMod": "off", + "projectsMod": "on", "industryMod": "off", "bankingMod": "off", - "schoolMod": "off", + "schoolMod": "on", "parliamentMod": "on", - "courtsMod": "off", - "favoritesMod": "off", - "logsMod": "off", - "mapsMod": "off", + "courtsMod": "on", + "favoritesMod": "on", + "logsMod": "on", + "mapsMod": "on", "chatsMod": "on", - "torrentsMod": "off", - "filesMod": "off", + "torrentsMod": "on", + "filesMod": "on", "phoneMod": "on", "roomsMod": "on", - "graphosMod": "off", - "larpMod": "off", + "graphosMod": "on", + "larpMod": "on", "backupMod": "on", - "campaignsMod": "off", - "emergenciesMod": "off", - "logisticsMod": "off", - "mailingMod": "off", - "podcastsMod": "off", + "campaignsMod": "on", + "emergenciesMod": "on", + "logisticsMod": "on", + "mailingMod": "on", + "podcastsMod": "on", "wikiMod": "on" }, "wallet": { diff --git a/src/models/fork_workflows.js b/src/models/fork_workflows.js index 4bc97ec..eb99b79 100644 --- a/src/models/fork_workflows.js +++ b/src/models/fork_workflows.js @@ -14,7 +14,7 @@ const FORK_WORKFLOWS = [ // una acampada: hablar (chats, telefono y salas de voz del dev), escribir juntos, // compartir lo que pasa y decidir (tribus = comisiones, parlamento y votaciones) key: 'acampada', - theme: 'Acampada', + theme: 'Activista', homePage: 'activity', modules: ['chats', 'phone', 'rooms', 'pads', 'forum', 'images', 'videos', 'wiki', 'blogs', 'feed', 'invites', 'backup', 'tribes', 'parliament', 'votes', 'events'] diff --git a/src/models/workflows_model.js b/src/models/workflows_model.js index 81ba66f..fe390ed 100644 --- a/src/models/workflows_model.js +++ b/src/models/workflows_model.js @@ -82,7 +82,7 @@ const WORKFLOWS = [ }, { key: 'mobile', - theme: 'Acampada', + theme: 'OasisMobile', homePage: 'activity', modules: MOBILE_MODULES } @@ -91,13 +91,9 @@ const WORKFLOWS = [ const WORKFLOW_KEYS = WORKFLOWS.map(w => w.key); const isMobile = () => process.env.OASIS_MOBILE === '1'; -// en el movil el workflow no toca el skin: se queda el que haya elegido cada cual -// (Acampada u OasisMobile); si no hay ninguno de movil, Acampada -const MOBILE_THEMES = ['Acampada', 'OasisMobile']; -const mobileSkin = (cfg) => { - const cur = cfg && cfg.themes && cfg.themes.current; - return MOBILE_THEMES.includes(cur) ? cur : 'Acampada'; -}; +// en el movil el workflow no toca el skin: hay uno solo, Activista +const MOBILE_THEMES = ['Activista']; +const mobileSkin = () => 'Activista'; const themeOf = (workflow, cfg) => (isMobile() ? mobileSkin(cfg) : workflow.theme); const sameTheme = (theme, workflow) => (isMobile() ? MOBILE_THEMES.includes(theme) : theme === workflow.theme); diff --git a/src/views/backup_view.js b/src/views/backup_view.js index f3e401c..08399ed 100644 --- a/src/views/backup_view.js +++ b/src/views/backup_view.js @@ -146,7 +146,8 @@ exports.backupView = async ({ type = "RECOVERY", options = null, restoreJob = nu div({ class: "div-center backup-wrap" }, body) ) ); - return restoreJob && restoreJob.running ? html.replace('', '') : html; + // movil: sin recargar cada 5s; la barra del pub (mobile_pubbar.js) se pone al dia sola + return restoreJob && restoreJob.running && !require('./mobile_ui').isMobile() ? html.replace('', '') : html; }; exports.renderRestoreStatus = renderRestoreStatus; diff --git a/src/views/hive_views.js b/src/views/hive_views.js index 6a5421e..651f3d0 100644 --- a/src/views/hive_views.js +++ b/src/views/hive_views.js @@ -132,7 +132,10 @@ module.exports = ({ i18n }) => { renderHiveNav() ), // atras cierra la hoja (sin este script el menu funciona igual) - script({ src: '/js/mobile_menu.js', defer: 'defer' }) + script({ src: '/js/mobile_menu.js', defer: 'defer' }), + // unirse a un pub: barra fija encima de esta, al dia sin recargar (mobile_pubbar.js) + require('./mobile_pubbar').pubBar(), + script({ src: '/js/mobile_pub.js', defer: 'defer' }) ); }; diff --git a/src/views/main_views.js b/src/views/main_views.js index d70acf4..82ff836 100644 --- a/src/views/main_views.js +++ b/src/views/main_views.js @@ -441,17 +441,18 @@ exports.CONTENT_FAV_KIND = CONTENT_FAV_KIND; exports.CONTENT_SPREADABLE = CONTENT_SPREADABLE; exports.CONTENT_TORRENTABLE = CONTENT_TORRENTABLE; exports.contentDeleteAction = contentDeleteAction; -exports.THEMES = [['Acampada', 'Acampada'], ['Dark-SNH', 'Dark-SNH'], ['Clear-SNH', 'Clear-SNH'], ['Purple-SNH', 'Purple-SNH'], ['Matrix-SNH', 'Matrix-SNH'], ['OasisMobile', 'Oasis-Mobile']]; -// los dos skins de movil; los de escritorio no estan pensados para la maqueta del movil -exports.MOBILE_THEMES = [['Acampada', 'Acampada'], ['OasisMobile', 'Oasis Mobile']]; +exports.THEMES = [['Activista', 'Activista'], ['Dark-SNH', 'Dark-SNH'], ['Clear-SNH', 'Clear-SNH'], ['Purple-SNH', 'Purple-SNH'], ['Matrix-SNH', 'Matrix-SNH'], ['OasisMobile', 'Oasis-Mobile']]; +// el skin del movil (uno solo desde el 20/10/2026); los de escritorio no estan pensados +// para la maqueta del movil +exports.MOBILE_THEMES = [['Activista', 'Activista']]; exports.WIZARD_THEMES = process.env.OASIS_MOBILE === '1' ? exports.MOBILE_THEMES - : exports.THEMES.filter(([value]) => value !== 'OasisMobile' && value !== 'Acampada'); -// en el movil la maqueta de la rama (styles/mobile_base.css) va antes de cualquier skin; -// encima, Acampada.css o el OasisMobile.css del dev. hive_acampada.css va detras del -// tema Acampada: pinta lanzador, barras y tarjetas. -const acampadaBase = () => process.env.OASIS_MOBILE === '1' ? link({ rel: "stylesheet", href: `/assets/styles/mobile_base.css?v=${assetVersion()}` }) : null; -const acampadaLink = (theme) => theme === 'Acampada' ? link({ rel: "stylesheet", href: `/assets/styles/hive_acampada.css?v=${assetVersion()}` }) : null; + : exports.THEMES.filter(([value]) => value !== 'OasisMobile' && value !== 'Activista'); +// en el movil la maqueta de la rama (styles/mobile_base.css) va antes del skin; +// encima, themes/Activista.css y detras styles/activista.css, que pinta lanzador, +// barras y tarjetas. +const mobileBase = () => process.env.OASIS_MOBILE === '1' ? link({ rel: "stylesheet", href: `/assets/styles/mobile_base.css?v=${assetVersion()}` }) : null; +const skinLink = (theme) => theme === 'Activista' ? link({ rel: "stylesheet", href: `/assets/styles/activista.css?v=${assetVersion()}` }) : null; const renderDocumentActions = (kind, id, leadingNodes = []) => { const base = id ? `/${kind}/${encodeURIComponent(id)}` : `/${kind}`; @@ -2007,7 +2008,7 @@ const template = (titlePrefix, ...elements) => { // movil: el tema va DESPUES de mobile.css para ganar por cascada sin !important; // escritorio: orden original de epsylon ...(process.env.OASIS_MOBILE === '1' - ? [ link({ rel: "stylesheet", href: `/assets/styles/mobile.css?v=${assetVersion()}` }), acampadaBase(theme), themeLink, acampadaLink(theme) ] + ? [ link({ rel: "stylesheet", href: `/assets/styles/mobile.css?v=${assetVersion()}` }), mobileBase(theme), themeLink, skinLink(theme) ] : [ themeLink, link({ rel: "stylesheet", href: `/assets/styles/mobile.css?v=${assetVersion()}`, media: "(max-width: 768px)" }) ]), process.env.OASIS_MOBILE === '1' ? link({ rel: "stylesheet", href: `/assets/styles/mobile_ux.css?v=${assetVersion()}` }) : null, process.env.OASIS_MOBILE === '1' ? require('./mobile_ui').colorsLink() : null, @@ -2396,7 +2397,7 @@ exports.ainavHomeView = ({ recentTags = [] } = {}) => { // movil: el tema va DESPUES de mobile.css para ganar por cascada sin !important; // escritorio: orden original de epsylon ...(process.env.OASIS_MOBILE === '1' - ? [ link({ rel: "stylesheet", href: `/assets/styles/mobile.css?v=${assetVersion()}` }), acampadaBase(theme), link({ rel: "stylesheet", href: `/assets/themes/${theme}.css?v=${assetVersion()}` }), acampadaLink(theme) ] + ? [ link({ rel: "stylesheet", href: `/assets/styles/mobile.css?v=${assetVersion()}` }), mobileBase(theme), link({ rel: "stylesheet", href: `/assets/themes/${theme}.css?v=${assetVersion()}` }), skinLink(theme) ] : [ link({ rel: "stylesheet", href: `/assets/themes/${theme}.css?v=${assetVersion()}` }), link({ rel: "stylesheet", href: `/assets/styles/mobile.css?v=${assetVersion()}`, media: "(max-width: 768px)" }) ]), process.env.OASIS_MOBILE === '1' ? link({ rel: "stylesheet", href: `/assets/styles/mobile_ux.css?v=${assetVersion()}` }) : null, process.env.OASIS_MOBILE === '1' ? require('./mobile_ui').colorsLink() : null, diff --git a/src/views/mobile_pubbar.js b/src/views/mobile_pubbar.js new file mode 100644 index 0000000..141b1c6 --- /dev/null +++ b/src/views/mobile_pubbar.js @@ -0,0 +1,120 @@ +"use strict"; +// Barra de "uniendote a un pub" (rama movil). +// +// Al unirse a un pub, el dev acepta la invitacion y arranca una descarga de la red +// desde el pub (backupModel.startBootstrap: bajar la copia y guardarla en el movil). +// Su pantalla de bienvenida lo enseñaba recargandose entera cada 5 segundos y, si +// fallaba, solo decia el error en ingles. Aqui va una barra fija encima de la barra +// de abajo, en todas las pantallas, que dice en claro que esta pasando y por que +// falla. La pinta hive_views.js (la barra de abajo es nuestra) y la mantiene al dia +// public/js/mobile_pub.js preguntando a /mobile/pub-status, sin recargar. +// +// El estado lo lee de backupModel.restoreStatus(), que le pasa fork_routes.js al +// montarse (es una funcion del dev; no se cambia nada suyo). + +const { button, div, form, p, progress, span } = require("../server/node_modules/hyperaxe"); + +const t = () => require("./main_views").i18n; + +let source = null; +const setSource = (backupModel) => { source = backupModel; }; + +// lo terminado se enseña un rato y se puede cerrar +const SHOW_DONE_MS = 15 * 60 * 1000; +let dismissedAt = null; +const dismiss = () => { const j = source && source.restoreStatus(); dismissedAt = j && j.finishedAt; }; + +// "net:pub.example.org:8008~shs:..." -> "pub.example.org" +const hostOf = (address) => { + const m = String(address || "").match(/^[a-z]+:([^:~]+)(?::\d+)?/i); + return m ? m[1] : String(address || "").slice(0, 40); +}; + +const errorKind = (err) => { + const e = String(err || ""); + if (/snapshot not available/i.test(e)) return "nosnap"; + if (/ECONNREFUSED|ETIMEDOUT|ENOTFOUND|EHOSTUNREACH|ENETUNREACH|EAI_AGAIN|timed? ?out|socket|connect/i.test(e)) return "net"; + return "other"; +}; + +const fill = (s, vars) => String(s || "").replace(/\{(\w+)\}/g, (_, k) => (vars[k] != null ? String(vars[k]) : "")); +const num = (n) => Number(n || 0).toLocaleString("es-ES"); + +// el estado, ya en palabras: { kind, text, hint, pct, running } +const status = () => { + const job = source && typeof source.restoreStatus === "function" ? source.restoreStatus() : null; + if (!job) return null; + const i18n = t(); + if (job.source !== "snapshot") return backupStatus(job, i18n); + const pub = hostOf(job.address); + const pr = job.progress || {}; + if (job.running) { + const pct = Math.max(0, Math.min(100, Number(pr.percent) || 0)); + if (job.phase === "restore") { + return { kind: "restore", running: true, pct, + text: fill(i18n.pubBarRestore || "Saving to your phone: {pct}% · {n} messages", { pct: Math.round(pct), n: num(pr.messages) }), + hint: i18n.pubBarHint || "You can keep using the app meanwhile." }; + } + const tier = job.tier === "full" ? (i18n.pubBarTierFull || "everything before") : (i18n.pubBarTierRecent || "the latest"); + return { kind: "download", running: true, pct: null, + text: fill(i18n.pubBarDownload || "Downloading the network from {pub} ({tier})…", { pub, tier }), + hint: i18n.pubBarHint || "You can keep using the app meanwhile." }; + } + if (job.finishedAt && job.finishedAt === dismissedAt) return null; + if (job.finishedAt && Date.now() - Date.parse(job.finishedAt) > SHOW_DONE_MS) return null; + if (job.error) { + const k = errorKind(job.error); + const key = { nosnap: "pubBarErrNoSnap", net: "pubBarErrNet", other: "pubBarErrOther" }[k]; + const fallback = { + nosnap: "You joined {pub}, but it offers no copy to download at once. Posts will arrive little by little while the app is open.", + net: "Cannot reach {pub}. Check that you have Internet (wifi or data) and try again later; if it keeps failing, the pub may be down.", + other: "The download from {pub} stopped ({error}). You are in; the rest will arrive little by little." + }[k]; + return { kind: k === "nosnap" ? "warn" : "error", running: false, pct: null, + text: fill(i18n[key] || fallback, { pub, error: String(job.error).slice(0, 80) }), hint: "" }; + } + const r = job.result || {}; + return { kind: "done", running: false, pct: 100, + text: fill(i18n.pubBarDone || "You are in {pub}: {n} messages downloaded.", { pub, n: num(r.messages) }), hint: "" }; +}; + +// restaurar una copia desde archivo (pantalla de Copias): la misma barra +const backupStatus = (job, i18n) => { + const pr = job.progress || {}; + if (job.running) { + const pct = Math.max(0, Math.min(100, Number(pr.percent) || 0)); + return { kind: "restore", running: true, pct, + text: fill(i18n.pubBarBackupRestore || "Restoring your backup: {pct}% · {n} messages", { pct: Math.round(pct), n: num(pr.messages) }), + hint: i18n.pubBarHint || "You can keep using the app meanwhile." }; + } + if (job.finishedAt && job.finishedAt === dismissedAt) return null; + if (job.finishedAt && Date.now() - Date.parse(job.finishedAt) > SHOW_DONE_MS) return null; + if (job.error) return { kind: "error", running: false, pct: null, hint: "", + text: fill(i18n.pubBarBackupErr || "The backup could not be restored: {error}. Check the file and the password.", { error: String(job.error).slice(0, 80) }) }; + return { kind: "done", running: false, pct: 100, hint: "", + text: fill(i18n.pubBarBackupDone || "Backup restored: {n} messages.", { n: num((job.result || {}).messages) }) }; +}; + +// la barra; siempre se pinta (oculta si no hay nada) para que el script la enseñe +// al tocar "unirse", antes de que conteste el dev +const pubBar = () => { + const i18n = t(); + const s = status(); + return div({ + id: "pub-bar", class: `pub-bar${s ? ` is-${s.kind}` : ""}`, role: "status", "aria-live": "polite", + "data-running": s && s.running ? "1" : "0", + "data-joining": i18n.pubBarJoining || "Joining the pub… it can take up to a minute. Keep the app open.", + "data-failed": i18n.pubBarJoinFailed || "If you did not get into the pub, the usual reasons are: no connection (wifi or data), the pub is down, or the invite was already used. Try another pub from the list, or later.", + ...(s ? {} : { hidden: true }) + }, + div({ class: "pub-bar-body" }, + p({ class: "pub-bar-text" }, s ? s.text : ""), + p({ class: "pub-bar-hint" }, s ? s.hint : ""), + progress({ class: "pub-bar-meter", max: "100", ...(s && s.pct != null ? { value: String(s.pct) } : {}) }) + ), + form({ method: "POST", action: "/mobile/pub-status/dismiss", class: "pub-bar-close" }, + button({ type: "submit", "aria-label": i18n.pubBarClose || "Close" }, "✕")) + ); +}; + +module.exports = { setSource, status, dismiss, pubBar, errorKind, hostOf }; diff --git a/src/views/mobile_settings.js b/src/views/mobile_settings.js index b15ccca..d5864e3 100644 --- a/src/views/mobile_settings.js +++ b/src/views/mobile_settings.js @@ -10,8 +10,8 @@ // /feed/create): no se reenvia nada a sus rutas ni se toca lo que contestan. Colores // es propio: /settings/colors y la hoja /mobile-colors.css, que va la ultima. // -// Los colores son las variables --a26-* del tema Acampada; por eso al elegir colores -// el aspecto pasa a Acampada (OasisMobile.css es del dev y lleva los suyos fijos). +// Los colores son las variables --a26-* del skin Activista, el unico del movil: el +// skin quita lo que sobra y los colores lo dejan a gusto de cada cual. const crypto = require("crypto"); const { a, button, details, div, form, img, input, label, p, section, span, summary, h2 } = require("../server/node_modules/hyperaxe"); @@ -22,7 +22,7 @@ const cfgNow = () => { try { return require("../configs/config-manager.js").getC // ---------- colores ---------- -// [clave, fondo, texto, acento]; la primera es la de Acampada tal cual +// [clave, fondo, texto, acento]; la primera es la de serie const PALETTES = [ ["acampada", "#ffffff", "#000000", "#00e5ff"], ["noche", "#101114", "#f2f2f2", "#00e5ff"], @@ -47,7 +47,7 @@ const contrast = (x, y) => { const p = lum(x), q = lum(y); return (Math.max(p, q // negro o blanco, el que mas se lea encima const readableOn = (hex) => contrast(hex, "#000000") >= contrast(hex, "#ffffff") ? "#000000" : "#ffffff"; -// lo guardado, ya comprobado; sin nada guardado, Acampada +// lo guardado, ya comprobado; sin nada guardado, la de serie const colorState = (cfg) => { const c = (cfg || cfgNow()).mobileColors; if (!c || typeof c !== "object" || ![c.bg, c.fg, c.accent].every(v => HEX.test(String(v || "")))) { @@ -79,15 +79,16 @@ const PREVIEW_CSS = PALETTES.map(([k, bg, fg, ac]) => // muestras de las paletas (la CSP no deja estilos en linea) const colorsCss = (cfg) => { const c = colorState(cfg); - // solo con Acampada: OasisMobile.css es del dev y lleva su paleta fija - const onAcampada = ((cfg || cfgNow()).themes || {}).current === "Acampada"; - const vars = c.chosen && onAcampada ? [ + const vars = c.chosen ? [ `--a26-bg:${c.bg}`, `--a26-fg:${c.fg}`, `--a26-neon:${c.accent}`, `--a26-on-neon:${readableOn(c.accent)}`, `--a26-soft:${mix(c.bg, c.fg, 0.06)}`, `--a26-muted:${mix(c.fg, c.bg, 0.35)}`, `--a26-tint:${mix(c.bg, c.accent, 0.2)}`, - `--a26-line:${mix(c.bg, c.fg, 0.25)}`, + `--a26-line:${mix(c.bg, c.fg, 0.18)}`, + `--a26-edge:${mix(c.bg, c.fg, 0.5)}`, + // rojo de texto (borrar): el de serie si se lee sobre el fondo; si no, uno claro + `--a26-danger-text:${contrast(c.bg, "#c4003b") >= 4.5 ? "#c4003b" : "#ff6b86"}`, `color-scheme:${lum(c.bg) < 0.2 ? "dark" : "light"}` ] : []; const custom = `.pal-custom .pal-bg{background:${c.bg}!important}.pal-custom .pal-fg{background:${c.fg}!important}.pal-custom .pal-ac{background:${c.accent}!important}`; @@ -104,12 +105,10 @@ const colorsPick = (returnTo, withKeep) => { const i18n = t(); const c = colorState(); const cur = c.chosen ? c.preset : DEFAULT[0]; - const theme = (cfgNow().themes || {}).current; return div({ class: "color-pick" }, form({ method: "POST", action: "/settings/colors", class: "ux-pick" }, input({ type: "hidden", name: "returnTo", value: returnTo }), p({ class: "ux-pick-hint" }, i18n.colorsHint || "Tap a palette and it is applied."), - theme && theme !== "Acampada" ? p({ class: "form-hint" }, i18n.colorsSkinNote || "Colours go with the Acampada look; choosing one switches to it.") : null, div({ class: "pal-grid" }, ...PALETTES.map(([k]) => button(Object.assign({ type: "submit", name: "preset", value: k, class: k === cur ? "pal-card is-current" : "pal-card" }, k === cur ? { "aria-current": "true" } : {}), swatch(k), @@ -220,7 +219,7 @@ const greetingSection = () => { // recibe las secciones de settings_view (pestaña Oasis) y devuelve la lista del movil: // la rejilla arriba, los bloques nuevos metidos en su sitio y el orden de los accesos -const ORDER = ["quick", "update", "language", "identity", "workflows", "ux", "colors", "theme", "community", "greeting", "home-page"]; +const ORDER = ["quick", "update", "language", "identity", "workflows", "ux", "colors", "community", "greeting", "home-page"]; const withQuick = (parts) => { const cfg = cfgNow(); const mods = cfg.modules || {}; @@ -230,7 +229,8 @@ const withQuick = (parts) => { mods.invitesMod !== "off" ? communitySection() : null, mods.feedMod !== "off" ? greetingSection() : null ].filter(Boolean); - const list = parts.filter(Boolean).concat(extra); + // el selector de skin no va: en el movil hay uno solo (Activista) + const list = parts.filter(el => el && el.id !== "theme").concat(extra); const ids = list.map(el => el && el.id); list.push(quickGrid(cfg, ids)); const rank = (el) => { const i = ORDER.indexOf(el && el.id); return i === -1 ? ORDER.length : i; }; diff --git a/src/views/mobile_ui.js b/src/views/mobile_ui.js index 777669d..fdd6373 100644 --- a/src/views/mobile_ui.js +++ b/src/views/mobile_ui.js @@ -153,7 +153,7 @@ const uxPick = (action, cfg, withHint) => { }; // perfil de uso (workflow): igual, un boton por opcion con una linea de para que -// sirve. Activismo y Acampada primero; el resto en el orden del dev +// sirve. Activismo (el de serie) y Acampada primero; el resto en el orden del dev const WORKFLOW_FIRST = ['activists', 'acampada']; const workflowPick = (action, current, keys, withHint) => { const i18n = t(); diff --git a/src/views/welcome_view.js b/src/views/welcome_view.js index 808fa10..32ba75d 100644 --- a/src/views/welcome_view.js +++ b/src/views/welcome_view.js @@ -149,5 +149,6 @@ exports.welcomeView = async (status, profile = {}) => { button({ type: "submit", class: "welcome-skip-btn" }, i18n.welcomeSkip))) : null ) - return status.bootstrap && status.bootstrap.running ? html.replace('', '') : html + // movil: sin recargar cada 5s; la barra del pub (mobile_pubbar.js) se pone al dia sola + return status.bootstrap && status.bootstrap.running && !mobileUi.isMobile() ? html.replace('', '') : html }