diff --git a/src/client/assets/fonts/Anton-Regular.ttf b/src/client/assets/fonts/Anton-Regular.ttf new file mode 100644 index 0000000..4d65707 Binary files /dev/null and b/src/client/assets/fonts/Anton-Regular.ttf differ diff --git a/src/client/assets/fonts/OFL.txt b/src/client/assets/fonts/OFL.txt new file mode 100644 index 0000000..93fedde --- /dev/null +++ b/src/client/assets/fonts/OFL.txt @@ -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. diff --git a/src/client/assets/styles/hive_acampada.css b/src/client/assets/styles/hive_acampada.css new file mode 100644 index 0000000..b54e2b1 --- /dev/null +++ b/src/client/assets/styles/hive_acampada.css @@ -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; } diff --git a/src/client/assets/themes/Acampada.css b/src/client/assets/themes/Acampada.css new file mode 100644 index 0000000..ddc297f --- /dev/null +++ b/src/client/assets/themes/Acampada.css @@ -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; } +} diff --git a/src/configs/oasis-config.json b/src/configs/oasis-config.json index 991c502..070715e 100644 --- a/src/configs/oasis-config.json +++ b/src/configs/oasis-config.json @@ -1,6 +1,6 @@ { "themes": { - "current": "OasisMobile" + "current": "Acampada" }, "ux": { "current": "blocks" diff --git a/src/models/workflows_model.js b/src/models/workflows_model.js index 8cef77e..947e8fd 100644 --- a/src/models/workflows_model.js +++ b/src/models/workflows_model.js @@ -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; diff --git a/src/views/identities_view.js b/src/views/identities_view.js index c1e09b2..956b54f 100644 --- a/src/views/identities_view.js +++ b/src/views/identities_view.js @@ -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), - ul({ class: "identity-list" }, names.map(row)), - form({ method: "POST", action: "/settings/identity/create" }, - input({ type: "text", name: "account", placeholder: i18n.identitiesNewName, - maxlength: "32", autocomplete: "off" }), - button({ type: "submit" }, i18n.identitiesCreate) - ), + p(i18n.identitiesDescription) + ), + ul({ class: "identity-list" }, names.map(row)), + 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) ) ); }; diff --git a/src/views/main_views.js b/src/views/main_views.js index d4e52a1..2ab5424 100644 --- a/src/views/main_views.js +++ b/src/views/main_views.js @@ -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