tema Acampada: blanco, negro y cian sobre el lanzador de la 1.3.3

Trae el tema del 10 de octubre (que se quedo fuera de PRUEBAS) y lo pone
por defecto en el movil. Acampada.css importa OasisMobile.css, asi que el
lanzador, la barra de 4 atajos y el workflow de activistas siguen igual;
hive_acampada.css va detras del tema y repinta lanzador, fichas de filtro,
hilos del foro, burbujas del chat, iconos de las tarjetas e identidades.

Quien ya tenia OasisMobile conserva su workflow reconocido.
This commit is contained in:
oasis-bot 2026-10-19 01:59:04 +02:00
parent 7d281902fb
commit 101bdfe4e8
8 changed files with 834 additions and 18 deletions

Binary file not shown.

View file

@ -0,0 +1,93 @@
Copyright 2020 The Anton Project Authors (https://github.com/googlefonts/AntonFont.git)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

View file

@ -0,0 +1,518 @@
/* Lanzador, barras, tarjetas e identidades con el tema Acampada (rama movil).
*
* OasisMobile.css (importado por 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. */
body { background: var(--a26-bg) !important; }
/* ---------- barra de arriba ---------- */
.oasis-mobile-topbar {
background: var(--a26-bg) !important;
border: 0 !important;
border-bottom: var(--a26-bd) !important;
box-shadow: none !important;
}
.oasis-mobile-topbar .omt-menus { background: transparent !important; border: 0 !important; box-shadow: none !important; gap: 10px; }
.oasis-mobile-topbar .omt-menus .oasis-menu-btn {
font-family: var(--a26-tit) !important;
font-weight: 400 !important;
text-transform: uppercase;
font-size: 20px !important;
letter-spacing: .02em;
min-height: 44px !important;
padding: 4px 16px !important;
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;
}
.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; }
.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-logo img, .oasis-mobile-topbar .omt-avatar img {
border: var(--a26-bd) !important;
border-radius: 50%;
}
/* la cabecera de escritorio de upstream no pinta nada en el movil */
.header { background: transparent !important; border: 0 !important; box-shadow: none !important; padding: 0 !important; }
.header .top-bar-left, .header .top-bar-right { display: none !important; }
/* ---------- lanzador de modulos (views/hive_views.js) ---------- */
.launcher, .ln-group, .ln-grid { background: transparent !important; border: 0 !important; box-shadow: none !important; }
.header .launcher { margin: 18px auto 10px !important; }
.ln-group + .ln-group { margin-top: 22px !important; }
.ln-title {
font-family: var(--a26-tit) !important;
font-weight: 400 !important;
font-size: 17px !important;
letter-spacing: .03em !important;
color: var(--a26-fg) !important;
border-bottom: var(--a26-bd) !important;
padding: 0 0 4px !important;
margin: 0 2px 14px !important;
}
.ln-grid { gap: 16px 10px !important; }
.ln-ico {
width: 58px !important; height: 58px !important;
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;
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;
background: var(--a26-neon) !important;
border-color: var(--a26-fg) !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; }
/* ---------- barra de abajo ---------- */
.oasis-bottombar {
background: var(--a26-bg) !important;
border: 0 !important;
border-top: var(--a26-bd) !important;
box-shadow: none !important;
}
.oasis-bottombar { padding: 6px 4px calc(6px + env(safe-area-inset-bottom, 0px)) !important; gap: 2px !important; }
.oasis-bottombar .bb-item { gap: 2px !important; }
.oasis-bottombar .bb-ico { color: var(--a26-fg) !important; font-size: 21px !important; }
.oasis-bottombar .bb-lbl {
color: var(--a26-fg) !important;
font-size: 10.5px !important;
font-weight: 600;
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
}
.oasis-bottombar a.bb-item.current .bb-ico { background: var(--a26-neon) !important; color: var(--a26-fg) !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-fg) !important; border: 2px solid var(--a26-fg) !important; }
.oasis-bottombar .bb-add .bb-ico, .oasis-bottombar .bb-fab .bb-ico {
background: var(--a26-fg) !important;
color: var(--a26-bg) !important;
box-shadow: 0 3px 0 var(--a26-neon) !important;
}
.oasis-bottombar .bb-add .bb-lbl, .oasis-bottombar .bb-fab .bb-lbl { color: var(--a26-fg) !important; }
/* Nodos e Invitaciones: juntos y estrechos, que la barra quepa en 360px */
.oasis-bottombar .bb-pair {
background: var(--a26-bg) !important;
border: var(--a26-bd-fino) !important;
border-radius: var(--a26-radius) !important;
padding: 2px !important;
gap: 0 !important;
}
.oasis-bottombar .bb-pair .bb-item { padding: 2px 4px !important; min-height: 44px !important; }
.oasis-bottombar .bb-pair .bb-ico { font-size: 18px !important; }
.oasis-bottombar .bb-pair .bb-lbl { font-size: 9.5px !important; }
/* ---------- personalizar la barra ---------- */
.bb-manage-btn, .bb-pick-btn {
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;
font-family: var(--a26-txt) !important;
text-transform: none;
}
.bb-manage-ico, .bb-manage-x, .bb-pick-ico { color: var(--a26-fg) !important; }
.bb-manage-lbl, .bb-pick-lbl { color: var(--a26-fg) !important; font-weight: 600; }
.bb-manage h3, .bb-manage-add h3 { color: var(--a26-fg) !important; }
.bb-manage-empty, .bb-manage-full { color: var(--a26-muted) !important; }
/* ---------- menu desplegable de upstream (si se abre) ---------- */
.oasis-nav-header { background: var(--a26-bg) !important; color: var(--a26-fg) !important; border: var(--a26-bd-fino) !important; }
.oasis-nav-list li a, .oasis-nav-list li a .emoji { color: var(--a26-fg) !important; }
.oasis-nav-list li a.current { background: var(--a26-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.highlighted-reply { background: #e5fcff !important; border-left: 5px solid var(--a26-neon) !important; }
.chat-message-form .filter-btn::before, .forum-send-btn::before { color: var(--a26-fg) !important; }
.card-spread-centered .spread-btn, .card-spread-left .spread-btn, .spread-row .spread-btn, .card-chips-row .spread-btn {
background: var(--a26-bg) !important; color: var(--a26-fg) !important; border: var(--a26-bd-fino) !important; box-shadow: none !important;
}
.card-spread-centered .spread-btn.spread-btn-on, .card-spread-left .spread-btn.spread-btn-on { background: var(--a26-neon) !important; }
.activity-filter-btn { background: var(--a26-bg) !important; color: var(--a26-fg) !important; border: var(--a26-bd) !important; }
#activity-filter-toggle:checked ~ .activity-filter-btn { background: var(--a26-neon) !important; 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;
}
.filter-btn.active { background-color: var(--a26-neon) !important; border-color: var(--a26-fg) !important; color: var(--a26-fg) !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; }
/* aviso de bienvenida: el boton de empezar en negro 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;
border: var(--a26-bd) !important;
}
.welcome-banner .welcome-banner-close-btn {
background: transparent !important;
border: 0 !important;
box-shadow: none !important;
color: var(--a26-fg) !important;
font-size: 22px !important;
opacity: 1 !important;
}
/* pie: gris y subrayado, sin amarillos */
.oasis-footer .oasis-footer-center a, .oasis-footer .oasis-footer-center span,
.oasis-footer .oasis-footer-center a span { color: var(--a26-muted) !important; }
/* la columna de contenido sin marco: el marco lo llevan las tarjetas */
.main-column { border: 0 !important; box-shadow: none !important; border-radius: 0 !important; }
/* la sombra de Personal/Social no se corta contra la raya de la barra */
.oasis-mobile-topbar { padding-bottom: 12px !important; }
/* ---------- asistente de bienvenida: botones grandes de un toque ---------- */
.welcome-step { border: var(--a26-bd) !important; border-radius: var(--a26-radius) !important; }
.welcome-step-title { font-family: var(--a26-tit) !important; font-weight: 400 !important; text-transform: uppercase; font-size: 24px !important; }
.welcome-step-number { border: var(--a26-bd-fino) !important; font-weight: 700; }
.welcome-choices { gap: 14px !important; }
.welcome-choice.tap-choice, .welcome-ux-option.tap-choice {
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;
font-family: var(--a26-txt) !important;
text-transform: none !important;
letter-spacing: 0 !important;
font-size: 16px !important;
min-height: 64px !important;
padding: 14px 16px !important;
margin: 0 0 4px !important;
}
.tap-choice .welcome-choice-name, .tap-choice .welcome-ux-label {
font-family: var(--a26-tit) !important;
font-weight: 400 !important;
text-transform: uppercase;
font-size: 22px !important;
letter-spacing: .02em;
line-height: 1.1;
}
.tap-choice .welcome-choice-hint { color: var(--a26-muted) !important; opacity: 1 !important; }
.tap-choice.is-current { background: var(--a26-neon) !important; }
.tap-choice.is-current .welcome-choice-hint { color: var(--a26-fg) !important; }
.tap-choice:active { transform: translateY(4px); box-shadow: 0 1px 0 var(--a26-fg) !important; background: var(--a26-neon) !important; }
.welcome-ux-option.tap-choice .welcome-ux-shot { border: var(--a26-bd-fino) !important; }
.welcome-banner .welcome-banner-start { font-size: 20px !important; min-height: 48px !important; padding: 8px 22px !important; }
/* mobile.css pinta en naranja los botones sin clase y todos los .filter-btn */
button:not([class]), input[type="submit"]:not([class]), input[type="button"]:not([class]),
.filter-btn, a.filter-btn, .conn-actions button, .peers-conn-actions button, .filter-box__button {
background-color: var(--a26-bg) !important;
color: var(--a26-fg) !important;
border: var(--a26-bd) !important;
border-radius: var(--a26-radius) !important;
font-weight: 400 !important;
font-size: 18px !important;
height: auto !important;
min-height: 48px !important;
}
.filter-btn.active, a.filter-btn.active { background-color: var(--a26-neon) !important; }
/* pantallas estrechas (360px): Nodos e Invitaciones solo con icono, para que
los cuatro atajos no se corten */
@media (max-width: 380px) {
.oasis-bottombar .bb-pair .bb-lbl { display: none !important; }
.oasis-bottombar .bb-pair .bb-ico { font-size: 22px !important; }
.oasis-bottombar .bb-pair .bb-item { padding: 2px 6px !important; }
.oasis-bottombar .bb-lbl { font-size: 10px !important; }
.welcome-banner .update-banner-icon { display: none !important; }
}
/* ---------- identidades (views/identities_view.js): una tarjeta por identidad ---------- */
.identities .identity-list { list-style: none; margin: 0 0 16px; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.identities .identity-row { display: flex; flex-direction: column; align-items: stretch; gap: 10px; padding: 12px 14px; }
.identities .identity-info { display: flex; flex-direction: column; gap: 2px; min-width: 0; border: 0; background: transparent; padding: 0; margin: 0; box-shadow: none; }
.identities .identity-feed { font-family: monospace; font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.identities .identity-warn { font-size: 12px; }
.identities .identity-row form { margin: 0; }
.identities .identity-row button { width: 100%; margin: 0; }
.identities .identity-active { text-align: center; font-weight: bold; padding: 10px 12px; border-radius: var(--a26-radius); }
.identities .identity-create { display: flex; flex-direction: column; gap: 10px; margin: 0 0 16px; }
.identities .identity-create input { width: 100%; box-sizing: border-box; margin: 0; }
.identities .identity-create button { width: 100%; margin: 0; }
.identities .identity-actions { display: flex; flex-direction: column; gap: 12px; align-items: stretch; border: 0; background: transparent; padding: 0; }
.identities .identity-actions form { margin: 0; }
.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-feed { color: var(--a26-muted) !important; }
.identities .identity-active { background: var(--a26-neon) !important; border: var(--a26-bd-fino) !important; color: var(--a26-fg) !important; }
.identities .identity-warn { color: #c4003b !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 */
.tribe-mode-buttons .create-button, .ui-toolbar--filters .create-button, .mode-buttons .create-button,
.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;
padding: 8px 16px !important;
min-height: 48px !important;
border-radius: var(--a26-radius) !important;
line-height: 1.2 !important;
}
.tribe-mode-buttons .filter-btn, .ui-toolbar--filters .filter-btn, .mode-buttons .filter-btn,
.mode-buttons-row .filter-btn, .mode-buttons-cols .filter-btn, .filters .filter-btn,
.filter-group .filter-btn, .activity-sub-filter .filter-btn, .activity-filter-grid .filter-btn {
border: var(--a26-bd) !important;
font-size: 16px !important;
padding: 6px 14px !important;
min-height: 44px !important;
border-radius: var(--a26-radius) !important;
line-height: 1.2 !important;
}
.welcome-choices:not(.welcome-langs) .tap-choice, .welcome-choices:not(.welcome-langs) .tap-choice * { text-align: left !important; }
/* ---------- lo que tiene que seguir siendo pequeño ---------- */
/* los iconos de accion de cada tarjeta (borrar, fijar, enlace...): en fila y redondos */
.content-actions {
display: flex !important; flex-direction: row !important; flex-wrap: wrap !important;
justify-content: flex-end !important; align-items: center !important; gap: 6px !important;
}
.main-column .content-actions form, .content-actions .content-action-form { display: inline-flex !important; margin: 0 !important; width: auto !important; }
.btn-singleview, button.btn-singleview, a.btn-singleview {
width: 34px !important; height: 34px !important; min-width: 34px !important; min-height: 34px !important;
padding: 0 !important; margin: 0 !important;
display: inline-flex !important; align-items: center !important; justify-content: center !important;
font-family: var(--a26-txt) !important; font-size: 15px !important; text-transform: none !important;
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; }
/* 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 {
display: flex !important; flex-direction: row !important; flex-wrap: wrap !important;
justify-content: center !important; gap: 8px !important; margin: 0 0 14px !important;
}
.mode-buttons form, .mode-buttons-row form, .mode-buttons-cols form, .tribe-mode-buttons form, .filters > form:not(.filter-box) {
display: flex !important; flex-direction: row !important; flex-wrap: wrap !important;
justify-content: center !important; gap: 8px !important; width: auto !important; max-width: 100% !important; margin: 0 !important;
}
.mode-buttons .filter-btn, .mode-buttons-row .filter-btn, .mode-buttons-cols .filter-btn, .tribe-mode-buttons .filter-btn,
.ui-toolbar--filters .filter-btn, .filters .filter-btn, .activity-filter-grid .filter-btn, .activity-sub-filter .filter-btn {
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;
border: var(--a26-bd-fino) !important;
}
.mode-buttons .create-button, .mode-buttons-row .create-button, .tribe-mode-buttons .create-button, .filters .create-button {
flex: 1 1 100% !important; width: 100% !important; margin-top: 4px !important;
}
/* chips de la actividad (activity-filter-*) */
.activity-filter-chips button, .activity-filter-grid button, .activity-sub-filter button, .activity-filter-col button {
background: var(--a26-bg) !important; color: var(--a26-fg) !important; border: var(--a26-bd-fino) !important;
}
.activity-filter-chips button.active, .activity-filter-grid button.active, .activity-sub-filter button.active, .activity-filter-col button.active {
background: var(--a26-neon) !important;
}
/* fechas y autores al pie de cada tarjeta: texto, no botones */
.card-footer .date-link, .card-footer a.user-link, a.user-link, .date-link {
font-family: var(--a26-txt) !important; text-transform: none !important; letter-spacing: 0 !important;
font-size: 13px !important; box-shadow: none !important; border: 0 !important;
background: transparent !important; padding: 0 !important; min-height: 0 !important;
}
a.user-link { font-weight: 700 !important; text-decoration: underline !important; }
.card-footer { display: flex !important; flex-wrap: wrap; gap: 10px; align-items: center; color: var(--a26-muted) !important; }
/* buscador de cada modulo */
.filter-box { display: flex !important; gap: 8px !important; align-items: stretch !important; }
.filter-box__input::placeholder, input::placeholder, textarea::placeholder { color: #777 !important; }
.filter-box__button { font-size: 15px !important; padding: 4px 14px !important; box-shadow: none !important; }
/* el pie de cada pagina y el id del perfil, en gris */
.main-column [class*="feed-id"], .profile-id, .profile .feed-id, code { color: var(--a26-muted) !important; }
/* una sola caja por tarjeta: lo de dentro (cabecera, titulo, texto) sin marco */
.main-column section, .main-column [class*="-card-"], .main-column .card-section, .main-column .card-header,
.main-column .card-meta-row, .main-column .shop-title-row, .main-column [class*="-grid"],
.main-column .feed-container, .main-column [class$="-card"] [class$="-card"] {
border: 0 !important; box-shadow: none !important; background: transparent !important; border-radius: 0 !important;
}
.main-column [class$="-card"], .main-column [class*="-card "] {
border: var(--a26-bd) !important; border-radius: var(--a26-radius) !important;
background: var(--a26-bg) !important; padding: 12px !important; margin: 0 0 14px !important;
}
.main-column .card-header { padding: 0 0 8px !important; border-bottom: var(--a26-bd-fino) !important; margin-bottom: 8px !important; }
.main-column [class$="-card"] .card-footer { border-top: var(--a26-bd-fino) !important; padding-top: 8px !important; margin-top: 8px !important; }
.main-column hr { border: 0 !important; border-top: var(--a26-bd-fino) !important; }
/* titulos de las tarjetas: enlaces en negro */
.main-column h1 a, .main-column h2 a, .main-column h3 a, .main-column [class*="title"] a {
color: var(--a26-fg) !important; text-decoration: none !important;
}
.main-column [class*="-card"] .tribe-card-title, .main-column [class*="-card"] h2 { font-size: 22px !important; margin: 4px 0 8px !important; }
/* la etiqueta del tipo (IMAGENES, FOROS...) y los chips de estado */
.pm-exposition-chip, .card-chips-row > span {
background: var(--a26-fg) !important; color: var(--a26-bg) !important;
border: 0 !important; border-radius: 8px !important; padding: 2px 8px !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; }
/* opiniones y votos */
.opinions-summary, .vote-btn, .feed-action-btn, .score-btn {
background: var(--a26-bg) !important; color: var(--a26-fg) !important;
border: var(--a26-bd-fino) !important; border-radius: 10px !important; box-shadow: none !important;
font-family: var(--a26-txt) !important; text-transform: none !important; font-size: 14px !important;
}
.post-image { border: var(--a26-bd-fino) !important; border-radius: 10px; }
/* 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;
}
.main-column table { border: var(--a26-bd-fino) !important; border-radius: 10px !important; }
.main-column table tr + tr td { border-top: 1px solid #ccc !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;
}
/* perfil: los datos del habitante como lineas claras, sin cajas negras */
.profile-sensors-box, .profile-sensors-box > span, .karma-line, .inhabitant-last-activity, .gpg-line,
.inhabitant-stats-box, .inhabitant-stat, .profile-side-relationship .status {
background: transparent !important; color: var(--a26-fg) !important; border: 0 !important; box-shadow: none !important;
}
.profile-sensors-box { display: flex !important; flex-direction: column !important; gap: 4px !important; align-items: center !important; }
.profile-sensors-box strong, .profile-sensors-box a, .device-mobile { color: var(--a26-fg) !important; }
.inhabitant-stat { border: var(--a26-bd-fino) !important; border-radius: 10px !important; padding: 4px 10px !important; }
.profile-side-relationship .status { background: var(--a26-neon) !important; border: var(--a26-bd-fino) !important; border-radius: 8px !important; padding: 2px 10px !important; }
.main-column [class*="feed-id"], .main-column a[href^="/author/"]:not(.user-link) { color: var(--a26-muted) !important; }
.profile-avatar, .profile img.avatar, .inhabitant-photo { border: var(--a26-bd) !important; }
/* etiquetas (#asamblea) y la tasa ECO: chips claros */
.card-tags { background: transparent !important; border: 0 !important; padding: 0 !important; display: flex !important; flex-wrap: wrap; gap: 6px; }
.card-tags .tag-link, a.tag-link {
background: var(--a26-bg) !important; color: var(--a26-fg) !important;
border: var(--a26-bd-fino) !important; border-radius: 8px !important; padding: 2px 8px !important;
text-decoration: none !important; font-weight: 700;
}
.eco-tax-chip, [class*="eco-tax-chip-"] {
background: var(--a26-soft) !important; color: var(--a26-muted) !important;
border: 1px solid #bbb !important; border-radius: 8px !important;
}
/* los filtros de la actividad son enlaces .activity-chip */
.activity-chip {
background: var(--a26-bg) !important; color: var(--a26-fg) !important;
border: var(--a26-bd-fino) !important; border-radius: 10px !important;
padding: 4px 10px !important; font-weight: 700 !important; text-decoration: none !important;
}
.activity-chip.active { background: var(--a26-neon) !important; }
.activity-chip:hover { color: var(--a26-fg) !important; border-color: var(--a26-fg) !important; }
/* ---------- fichas de filtro de 1.3.3 (OasisMobile.css las pinta en amarillo y gris) ---------- */
/* mismo selector que alli: gana por ir detras */
.main-column :is(.tribe-mode-buttons, .mode-buttons, .mode-buttons-row, .filter-group) {
justify-content: center !important;
gap: 8px !important;
padding: 4px 0 !important;
}
.main-column :is(.tribe-mode-buttons, .mode-buttons, .mode-buttons-row, .filter-group) .filter-btn:not(.create-button) {
font-family: var(--a26-tit) !important;
font-weight: 400 !important;
font-size: 15px !important;
letter-spacing: .02em !important;
padding: 4px 12px !important;
min-height: 38px !important;
border: var(--a26-bd-fino) !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;
}
.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;
color: var(--a26-fg) !important;
}
.main-column :is(.tribe-mode-buttons, .mode-buttons, .mode-buttons-row, .filter-group) .create-button { min-height: 48px !important; }
/* acciones de la tarjeta: iconos SVG en negro dentro del circulo */
.main-column .content-actions .btn-singleview { width: 36px !important; height: 36px !important; }
.btn-singleview .btn-icon { width: 18px !important; height: 18px !important; }
.btn-singleview.btn-pin-on { background: var(--a26-neon) !important; }
/* hilos del foro (lista tipo archivo de 1.3.3): tarjeta negra sin la raya naranja */
.main-column .mailing-archive-item {
border: var(--a26-bd-fino) !important;
border-radius: var(--a26-radius) !important;
background: var(--a26-bg) !important;
padding: 12px !important;
margin: 0 0 14px !important;
}
.main-column .mailing-archive-item a { color: var(--a26-fg) !important; }
.main-column a.forum-category {
background: var(--a26-fg) !important; color: var(--a26-bg) !important;
border: 0 !important; border-radius: 8px !important; padding: 2px 8px !important;
font-family: var(--a26-tit) !important; text-decoration: none !important; letter-spacing: .03em;
}
/* restos de naranja de style.css y mobile.css */
.oasis-id-copy, input.oasis-id-copy, input.oasis-id-copy[readonly] {
background: var(--a26-soft) !important; border: var(--a26-bd-fino) !important; color: var(--a26-muted) !important;
}
.oasis-menu-btn.oasis-menu-open, .oasis-menu-btn.oasis-menu-close {
background: var(--a26-bg) !important; border: var(--a26-bd-fino) !important; color: var(--a26-fg) !important;
}
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;
}
label.welcome-ux-option:has(input:checked) { background: var(--a26-neon) !important; }
/* chat: burbujas con marco negro y las reacciones como chips pequeños
(el estilo general de botones de Acampada las hacia de 48px a ancho completo) */
.chat-bubble-row .chat-message {
background: var(--a26-bg) !important; color: var(--a26-fg) !important;
border: var(--a26-bd-fino) !important; border-radius: 14px 14px 14px 4px !important;
}
.chat-bubble-row-self .chat-message { background: #e5fcff !important; border-radius: 14px 14px 4px 14px !important; }
.chat-bubble-sender, .chat-bubble-sender-owner { color: var(--a26-fg) !important; }
.chat-bubble-time { color: var(--a26-muted) !important; }
.main-column .chat-msg-actions { display: flex !important; flex-wrap: wrap !important; gap: 4px !important; }
.main-column .chat-msg-actions form, .main-column form.chat-react-form { display: inline-flex !important; width: auto !important; margin: 0 !important; }
.main-column button.chat-react-btn, button.chat-react-btn {
width: auto !important; min-height: 0 !important; height: auto !important;
padding: 1px 8px !important; margin: 0 !important;
font-size: 13px !important; line-height: 1.4 !important;
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;
}
/* 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; }
.chat-day-chip { background: var(--a26-fg) !important; color: var(--a26-bg) !important; border: 0 !important; }

View file

@ -0,0 +1,196 @@
/* Tema Acampada (rama movil): blanco, negro y cian neon, titulos en Anton.
*
* 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.
*
* La maqueta de movil es la de OasisMobile.css de upstream, que se importa entera;
* aqui solo se cambian colores, letra y formas encima. Por eso casi todo lleva
* !important: OasisMobile.css tambien lo usa. Las piezas propias de la rama
* (panal, barras) se ajustan en styles/hive_acampada.css. */
@import url("OasisMobile.css");
@font-face {
font-family: "Anton";
src: url("../fonts/Anton-Regular.ttf") format("truetype");
font-display: swap;
}
:root {
--a26-bg: #fff;
--a26-fg: #000;
--a26-neon: #00e5ff;
--a26-soft: #f2f2f2;
--a26-muted: #555;
--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-txt: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
color-scheme: light;
}
/* --- fondo y texto --- */
html, body {
background: var(--a26-bg) !important;
color: var(--a26-fg) !important;
font-family: var(--a26-txt) !important;
}
body { font-size: 17px; line-height: 1.5; }
header, footer, .header, .main-content, .main-column, .sidebar-left, .sidebar-right,
section, article, div, table, .profile, .action-container {
background-color: transparent !important;
color: var(--a26-fg) !important;
border-color: var(--a26-fg) !important;
}
div { border: 0 !important; box-shadow: none !important; }
span, p, li, td, th, label, small, strong, em, h4, h5, h6 { color: inherit !important; }
a { color: var(--a26-fg) !important; }
a:hover, a:focus-visible { color: var(--a26-fg) !important; background-color: var(--a26-neon); }
/* --- titulos: Anton en 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;
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; }
/* cabecera de cada modulo: titulo con raya gorda debajo, como los h2 de la web */
.tags-header {
background: transparent !important;
border: 0 !important;
border-bottom: var(--a26-bd) !important;
border-radius: 0 !important;
padding: 0 0 8px !important;
margin: 0 0 16px !important;
text-align: left !important;
}
.tags-header p { color: var(--a26-muted) !important; font-size: 15px !important; margin: 4px 0 0 !important; }
/* --- tarjetas: recuadro negro, sin sombras difusas --- */
.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-radius: var(--a26-radius) !important;
box-shadow: none !important;
}
.main-column > section { border: 0 !important; padding: 0 !important; }
/* --- botones: los .bt de acampada --- */
button, input[type="submit"], input[type="button"],
.filter-btn, .create-button, .edit-btn, .join-btn, .leave-btn, .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;
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;
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;
padding: 8px 16px !important;
font-size: 18px !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;
}
/* 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;
color: var(--a26-fg) !important;
}
/* el boton de crear: negro, para que se vea primero */
.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;
padding: 8px 16px !important;
min-height: 48px !important;
}
.delete-btn { box-shadow: 0 5px 0 #e0004d !important; }
/* --- formularios --- */
input, textarea, select {
background: var(--a26-bg) !important;
color: var(--a26-fg) !important;
border: var(--a26-bd-fino) !important;
border-radius: 10px !important;
font-family: var(--a26-txt) !important;
font-size: 16px !important;
min-height: 44px;
}
input:focus, textarea:focus, select:focus {
outline: 3px solid var(--a26-neon) !important;
outline-offset: 1px;
}
input[type="checkbox"], input[type="radio"] { min-height: 0; accent-color: var(--a26-fg); }
/* --- 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; }
/* --- avisos de upstream (bienvenida, actualizaciones) --- */
.update-banner, .welcome-banner {
background: var(--a26-neon) !important;
color: var(--a26-fg) !important;
border: var(--a26-bd) !important;
border-radius: var(--a26-radius) !important;
margin: 8px 10px !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;
}
/* --- colores sueltos de OasisMobile que se quedaban en amarillo o naranja --- */
.avatar, .article img, .post-preview img { border-color: var(--a26-fg) !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-list-hide-btn,
.chat-topic-meta, .chat-topic-last-author, .chat-workspace-details > .tribe-side .tribe-card-members {
color: var(--a26-fg) !important;
}
.chat-topic-active { background: var(--a26-neon) !important; }
a.hashtag { text-decoration: underline !important; }
.pdf-maximized { background: var(--a26-bg) !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 a { text-decoration: underline !important; }
::-webkit-scrollbar-thumb { background-color: var(--a26-fg) !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; }
}

View file

@ -1,6 +1,6 @@
{
"themes": {
"current": "OasisMobile"
"current": "Acampada"
},
"ux": {
"current": "blocks"

View file

@ -80,7 +80,7 @@ const WORKFLOWS = [
},
{
key: 'mobile',
theme: 'OasisMobile',
theme: 'Acampada',
homePage: 'activity',
modules: MOBILE_MODULES
}
@ -89,7 +89,11 @@ const WORKFLOWS = [
const WORKFLOW_KEYS = WORKFLOWS.map(w => w.key);
const isMobile = () => process.env.OASIS_MOBILE === '1';
const themeOf = (workflow) => (isMobile() ? 'OasisMobile' : workflow.theme);
// en el movil todos los workflows llevan el tema Acampada; quien venga de OasisMobile
// sigue reconociendo su workflow (Acampada es OasisMobile con otros colores)
const MOBILE_THEMES = ['Acampada', 'OasisMobile'];
const themeOf = (workflow) => (isMobile() ? 'Acampada' : workflow.theme);
const sameTheme = (theme, workflow) => (isMobile() ? MOBILE_THEMES.includes(theme) : theme === workflow.theme);
const getWorkflow = (key) => WORKFLOWS.find(w => w.key === String(key || '')) || null;
@ -103,7 +107,7 @@ const currentWorkflow = (config) => {
const theme = (config && config.themes && config.themes.current) || '';
return WORKFLOW_KEYS.find(key => {
const w = getWorkflow(key);
if (theme !== themeOf(w)) return false;
if (!sameTheme(theme, w)) return false;
const on = new Set(modulesOf(w));
return ALL_MODULES.every(m => (modules[`${m}Mod`] === 'on') === on.has(m));
}) || null;

View file

@ -50,20 +50,22 @@ module.exports = ({ i18n, html }) => {
button({ type: "submit" }, i18n.identitiesRestart))
: null;
return section(
return section({ class: "identities" },
div({ class: "tags-header" },
h2(i18n.identitiesTitle),
p(i18n.identitiesDescription),
p(i18n.identitiesDescription)
),
ul({ class: "identity-list" }, names.map(row)),
form({ method: "POST", action: "/settings/identity/create" },
form({ method: "POST", action: "/settings/identity/create", class: "identity-create" },
input({ type: "text", name: "account", placeholder: i18n.identitiesNewName,
maxlength: "32", autocomplete: "off" }),
button({ type: "submit" }, i18n.identitiesCreate)
),
div({ class: "identity-actions" },
restart,
// sacar o meter una identidad ya existente es cosa del modulo legacy, que
// es el que sabe cifrar el secret con una contraseña
p(a({ href: "/legacy", class: "identity-legacy" }, i18n.identitiesBackup)),
restart
a({ href: "/legacy", class: "identity-legacy" }, i18n.identitiesBackup)
)
);
};

View file

@ -437,8 +437,11 @@ exports.CONTENT_FAV_KIND = CONTENT_FAV_KIND;
exports.CONTENT_SPREADABLE = CONTENT_SPREADABLE;
exports.CONTENT_TORRENTABLE = CONTENT_TORRENTABLE;
exports.contentDeleteAction = contentDeleteAction;
exports.THEMES = [['Dark-SNH', 'Dark-SNH'], ['Clear-SNH', 'Clear-SNH'], ['Purple-SNH', 'Purple-SNH'], ['Matrix-SNH', 'Matrix-SNH'], ['OasisMobile', 'Oasis-Mobile']];
exports.WIZARD_THEMES = exports.THEMES.filter(([value]) => value !== 'OasisMobile');
exports.THEMES = [['Acampada', 'Acampada'], ['Dark-SNH', 'Dark-SNH'], ['Clear-SNH', 'Clear-SNH'], ['Purple-SNH', 'Purple-SNH'], ['Matrix-SNH', 'Matrix-SNH'], ['OasisMobile', 'Oasis-Mobile']];
// Acampada importa la maqueta de OasisMobile.css: los dos son solo de movil
exports.WIZARD_THEMES = exports.THEMES.filter(([value]) => value !== 'OasisMobile' && value !== 'Acampada');
// con el tema Acampada, hive_acampada.css va detras del tema: pinta lanzador, barras y tarjetas
const acampadaLink = (theme) => theme === 'Acampada' ? link({ rel: "stylesheet", href: `/assets/styles/hive_acampada.css?v=${assetVersion()}` }) : null;
const renderDocumentActions = (kind, id, leadingNodes = []) => {
const base = id ? `/${kind}/${encodeURIComponent(id)}` : `/${kind}`;
@ -2003,7 +2006,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()}` }), themeLink ]
? [ link({ rel: "stylesheet", href: `/assets/styles/mobile.css?v=${assetVersion()}` }), themeLink, acampadaLink(theme) ]
: [ themeLink, link({ rel: "stylesheet", href: `/assets/styles/mobile.css?v=${assetVersion()}`, media: "(max-width: 768px)" }) ]),
// el modulo Karvan trae su propia hoja: asi se ve igual en cualquier tema
// y tambien en escritorio, donde no se carga OasisMobile.css
@ -2392,7 +2395,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()}` }), link({ rel: "stylesheet", href: `/assets/themes/${theme}.css?v=${assetVersion()}` }) ]
? [ link({ rel: "stylesheet", href: `/assets/styles/mobile.css?v=${assetVersion()}` }), link({ rel: "stylesheet", href: `/assets/themes/${theme}.css?v=${assetVersion()}` }), acampadaLink(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)" }) ]),
// el modulo Karvan trae su propia hoja: asi se ve igual en cualquier tema
// y tambien en escritorio, donde no se carga OasisMobile.css