OASIS_MOBILE/src/client/assets/themes/OasisMobile.css
oasis-bot 0baf85faa9 skins: elegir el aspecto en el movil con tarjetas de un toque
En Ajustes del movil, Tema y Flujos de trabajo dejan de ser desplegables:
cada skin es una tarjeta con su miniatura y cada workflow un boton grande,
y se aplican al tocarlos. Solo se ofrecen los skins que tienen maqueta de
movil (Acampada y Oasis Mobile); el servidor rechaza un tema de escritorio,
que dejaba la app sin maqueta. La bienvenida tambien ofrece elegir skin.

Aplicar un workflow ya no cambia el skin: se queda el que haya elegido cada
cual.

OasisMobile.css se carga con su propio <link> versionado antes de
Acampada.css, en vez de con @import: el @import sin ?v= se quedaba en la
cache del WebView y tras actualizar se veia la maqueta vieja.
2026-10-19 02:17:12 +02:00

1281 lines
54 KiB
CSS

html { overflow-x: clip; overflow-y: visible; height: auto; }
body { overflow-x: clip; overflow-y: visible; }
.oasis-bottombar {
display: flex;
position: fixed;
left: 0; right: 0; bottom: 0;
z-index: 1000;
justify-content: space-around;
align-items: center;
gap: 4px;
background: #1F1F1F;
border-top: 1px solid #333;
padding: 8px 6px calc(8px + env(safe-area-inset-bottom, 0px));
}
.oasis-bottombar .bb-item {
position: relative;
display: flex;
flex-direction: column;
align-items: center;
gap: 3px;
flex: 1 1 0;
min-width: 0;
padding: 2px 0;
text-decoration: none;
}
.oasis-bottombar .bb-ico { font-size: 18px; line-height: 1; color: #FFD700; }
.oasis-bottombar .bb-lbl { font-size: 9px; color: #FFD700; white-space: nowrap; }
.oasis-bottombar .bb-badge {
position: absolute;
top: -4px;
left: calc(50% + 6px);
min-width: 15px; height: 15px;
padding: 0 3px;
border-radius: 8px;
background: #FFD700;
color: #121212;
font-size: 9px; font-weight: bold;
display: flex; align-items: center; justify-content: center;
}
body { padding-bottom: calc(64px + env(safe-area-inset-bottom, 0px)); }
/* topbar FIJA arriba: [logo] [Personal] [Community] [avatar]; el lanzador scrollea por debajo */
.oasis-mobile-topbar {
position: fixed; top: 0; left: 0; right: 0; z-index: 100;
display: flex; align-items: center; gap: 8px;
padding: 8px 12px;
background: #121212;
border-bottom: 1px solid #333;
}
body { padding-top: 74px; background: #121212; }
.oasis-mobile-topbar .omt-logo, .oasis-mobile-topbar .omt-avatar { flex: 0 0 auto; }
.oasis-mobile-topbar .omt-logo img,
.oasis-mobile-topbar .omt-avatar img {
width: 42px; height: 42px;
border-radius: 50%;
border: 2px solid #FFD700;
object-fit: cover; display: block;
}
.oasis-mobile-topbar .omt-menus {
flex: 1 1 auto; min-width: 0;
display: flex; justify-content: center; gap: 8px;
}
.oasis-mobile-topbar .omt-menus .oasis-menu-btn {
display: flex; align-items: center; justify-content: center;
padding: 7px 14px;
border: 1px solid #FFD700; border-radius: 8px;
background: #161616; color: #FFD700;
font-weight: 600; letter-spacing: .5px; text-decoration: none;
font-size: 13px; white-space: nowrap; cursor: pointer;
}
.oasis-mobile-topbar .omt-menus .oasis-menu-btn.active {
background: #FFD700; color: #121212; border-color: #FFD700;
}
.oasis-mobile-topbar .omt-menus .oasis-menu-btn span { text-decoration: none; }
/* ANULAR el "card" global de style.css `div{background:#222;border-radius:10px;box-shadow;padding:20px;margin-bottom:20px}`
en nuestro chrome móvil propio: era el 2º color (caja mas clara) detras de los botones,
la caja redondeada de la topbar y el fondo #222 detras del lanzador. */
.header, .launcher, .ln-group, .ln-grid,
.oasis-mobile-topbar, .oasis-mobile-topbar .omt-menus {
background-color: transparent; box-shadow: none; border-radius: 0;
}
.oasis-mobile-topbar { background-color: #121212; } /* fija: fondo opaco (el contenido scrollea por debajo) */
.oasis-mobile-topbar .omt-menus { padding: 0; margin: 0; } /* sin caja ni relleno detras de los botones */
.header .top-bar-left > a.logo-icon { display: none; }
.oasis-mobile-menus { display: flex; gap: 8px; padding: 0 10px 6px; }
.oasis-mobile-menus .oasis-menu-ico { display: none; }
.oasis-mobile-menus .oasis-menu-btn {
flex: 1 1 0;
display: flex; align-items: center; justify-content: center;
padding: 10px 12px;
border: 1px solid #FFD700; border-radius: 8px;
background: #161616; color: #FFD700;
font-weight: 600; letter-spacing: 1px; text-decoration: none; cursor: pointer;
}
.oasis-mobile-menus .oasis-menu-btn span { text-decoration: none; }
.oasis-mobile-menus .oasis-menu-btn.active {
background: #FFD700; color: #121212; border-color: #FFD700;
}
:root {
--space-1: 4px; --space-2: 8px; --space-3: 16px; --space-4: 24px; --space-5: 32px;
--fs-caption: 12px; --fs-body: 14px; --fs-body-lg: 16px; --fs-title: 20px;
--lh-body: 1.5; --measure: 66ch;
--c-muted: #8c8c8c; --radius-md: 12px;
}
.oasis-bottombar .bb-fab .bb-ico {
width: 46px; height: 46px;
margin-top: -22px;
border-radius: 50%;
background: #FFD700; color: #121212;
display: flex; align-items: center; justify-content: center;
font-size: 22px;
box-shadow: 0 2px 8px rgba(0,0,0,.4);
}
.oasis-bottombar .bb-fab .bb-lbl { color: #FFD700; font-weight: bold; }
.main-column, .main-column p, .main-column li, .main-column a,
.main-column span, .main-column td, .main-column h1, .main-column h2, .main-column h3 {
overflow-wrap: anywhere;
word-break: break-word;
}
.main-column { padding: var(--space-3); }
.main-column p { line-height: var(--lh-body); }
.main-column > * + * { margin-top: var(--space-3); }
.main-column img, .main-column video, .main-column table, .main-column pre, .main-column iframe {
max-width: 100%; height: auto;
}
.main-column pre { white-space: pre-wrap; }
.oasis-nav-group {
list-style: none;
background: #1c1c1c;
border: 1px solid #333;
border-radius: var(--radius-md);
overflow: hidden;
margin-bottom: var(--space-2);
}
.oasis-nav-header {
display: flex; align-items: center; gap: var(--space-2);
min-height: 48px; padding: 0 var(--space-3);
cursor: pointer;
color: #FFD700; font-weight: bold;
text-transform: uppercase; letter-spacing: .04em;
font-size: var(--fs-caption);
}
.oasis-nav-header .nav-text { flex: 1 1 auto; }
.oasis-nav-header .oasis-nav-arrow { color: var(--c-muted); transition: transform 150ms ease; }
.oasis-nav-toggle:checked + .oasis-nav-header .oasis-nav-arrow { transform: rotate(180deg); }
.oasis-nav-header:active { background: #262626; }
.oasis-nav-list { list-style: none; padding: 0; margin: 0; }
.oasis-nav-list li a {
display: flex; align-items: center; gap: var(--space-3);
min-height: 48px; padding: 0 var(--space-3);
color: #FFD700; text-decoration: none;
border-top: 1px solid #262626;
}
.oasis-nav-list li a .emoji { flex: 0 0 auto; width: 22px; text-align: center; color: #FFD700; }
.oasis-nav-list li a .nav-text { font-size: var(--fs-body); }
.oasis-nav-list li a:active { background: #262626; }
.oasis-nav-list li a.current { color: #FFD700; font-weight: bold; }
.main-column h1 { font-size: var(--fs-title); font-weight: 700; line-height: 1.25; margin: 0 0 var(--space-2); }
.main-column h2 { font-size: 18px; font-weight: 700; line-height: 1.3; margin: 0 0 var(--space-2); }
.main-column h3 { font-size: var(--fs-body-lg); font-weight: 600; margin: 0 0 var(--space-1); }
.main-column p { font-size: var(--fs-body-lg); }
.main-column .created-at, .main-column .small, .main-column .time,
.main-column .meta, .main-column .author-meta, .main-column .subtitle {
color: var(--c-muted); font-size: var(--fs-caption);
}
/* solo las tarjetas (clase acabada en -card), no sus piezas: -card-header,
-card-hero-image... heredaban fondo, borde y relleno y salian como cajas */
.main-column article,
.main-column :is([class$="-card"], [class*="-card "]) {
background: #1c1c1c;
border: 1px solid #333;
border-radius: var(--radius-md);
padding: var(--space-3);
}
.main-column article:active,
.main-column :is([class$="-card"], [class*="-card "]):active { background: #202020; }
.btn, button, input[type="submit"], input[type="button"], .submit-button,
.filter-btn, .create-button, .edit-btn, .delete-btn, .join-btn, .leave-btn, .buy-btn {
min-height: 48px;
}
button:active, input[type="submit"]:active, .submit-button:active,
.filter-btn:active, .create-button:active, .edit-btn:active,
.delete-btn:active, .join-btn:active, .leave-btn:active, .buy-btn:active {
filter: brightness(.85);
}
.main-column a:active { opacity: .6; }
* { -webkit-tap-highlight-color: transparent; }
a, button, label, .tap, .oasis-menu-btn, .bb-item, .oasis-nav-header, .oasis-nav-list li a {
touch-action: manipulation;
}
body { overscroll-behavior: none; }
.main-content, .main-column, .header { overflow: visible; }
/* === Usabilidad 0.9.1: Personal/Community filtran el lanzador server-side (enlaces ?hive=) + desplegable FILTER === */
/* desplegable FILTER de la ristra de filtros de Activity (oculto por defecto) */
.activity-filter-toggle { position: absolute; opacity: 0; width: 1px; height: 1px; pointer-events: none; margin: 0; }
.activity-filter-btn {
display: flex; align-items: center; justify-content: center; gap: 8px;
width: 100%; min-height: 44px; margin: 4px 0 8px; padding: 10px 12px;
border: 1.5px solid #333; border-radius: 10px;
background: #121212; color: #FFD700;
font-weight: bold; letter-spacing: 1px; text-transform: uppercase; cursor: pointer;
}
.activity-filter-caret { transition: transform 150ms ease; }
#activity-filter-toggle:checked ~ .activity-filter-btn { background: #FFD700; color: #121212; border-color: #FFD700; }
#activity-filter-toggle:checked ~ .activity-filter-btn .activity-filter-caret { transform: rotate(180deg); }
.activity-filter-panel { display: none; }
#activity-filter-toggle:checked ~ .activity-filter-panel { display: block; }
.activity-filter-panel .activity-filter-grid { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px; margin-top: 8px; }
.activity-filter-panel .activity-filter-col { display: contents; }
.activity-filter-panel form { margin: 0; }
.bb-manage { margin: 8px 0 16px; }
.bb-manage h3, .bb-manage-add h3 {
font-size: 13px; text-transform: uppercase; letter-spacing: .05em;
color: #FFD700; margin: 14px 0 8px;
}
.bb-manage-list { display: flex; flex-direction: column; gap: 8px; }
.bb-manage-form { margin: 0; width: 100%; }
.bb-manage-btn {
width: 100%;
display: flex; align-items: center; gap: 12px;
min-height: 52px; padding: 0 14px;
background: #1c1c1c; border: 1px solid #333; border-radius: 10px;
color: #FFD700; cursor: pointer; text-align: left;
}
.bb-manage-ico { font-size: 20px; color: #FFD700; width: 26px; text-align: center; }
.bb-manage-lbl { flex: 1 1 auto; font-size: 15px; }
.bb-manage-x { font-size: 16px; color: #FFD700; font-weight: bold; }
.bb-manage-empty, .bb-manage-full { color: #999; font-size: 14px; padding: 8px 2px; }
.bb-manage-done {
display: block; text-align: center;
margin-top: 16px; min-height: 48px; line-height: 48px;
}
/* Lanzador de modulos de la home (sustituye a los hexagonos): secciones con un
rotulo discreto y una rejilla de baldosas, como el cajon de apps del movil */
.launcher { margin: 6px 0 20px; padding: 0; border: 0; }
.ln-group { margin: 0; padding: 0; border: 0; }
.ln-group + .ln-group { margin-top: 20px; }
.ln-title {
margin: 0 2px 10px; padding: 0; border: 0;
font-size: 11px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase;
color: var(--c-muted);
}
.ln-grid {
display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 14px 8px; margin: 0; padding: 0;
}
.ln-app {
display: flex; flex-direction: column; align-items: center; gap: 6px;
min-width: 0; text-decoration: none; -webkit-tap-highlight-color: transparent;
}
.ln-ico {
width: 54px; height: 54px; box-sizing: border-box;
display: flex; align-items: center; justify-content: center;
border-radius: 16px; background: #1c1c1c; border: 1px solid #333;
color: #FFD700; font-size: 22px; line-height: 1;
transition: background-color .12s, border-color .12s;
}
.ln-app:active .ln-ico, .ln-app:focus-visible .ln-ico { background: #2a2412; border-color: #FFD700; }
.ln-lbl {
max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
font-size: 11px; line-height: 1.2; text-align: center; color: #e6e6e6;
}
.header .top-bar-left nav,
.header .top-bar-right nav { display: none; }
.oasis-mobile-topbar { padding-top: calc(env(safe-area-inset-top, 0px) + 10px); }
.oasis-bottombar .bb-pair {
display: flex; align-items: center;
flex: 0 0 auto;
gap: 2px; padding: 3px;
background: #262626;
border: 1px solid #3a3a3a;
border-radius: 999px;
}
.oasis-bottombar .bb-pair .bb-item { flex: 0 0 auto; padding: 2px 8px; }
.oasis-bottombar .bb-pair .bb-lbl { font-size: 8px; }
.oasis-bottombar a.bb-item.current .bb-ico {
background: #FFD700; color: #121212;
border-radius: 999px; padding: 4px 12px;
}
.oasis-bottombar a.bb-item.current .bb-lbl { color: #FFD700; font-weight: bold; }
.oasis-bottombar a.bb-item.current .bb-badge { background: #121212; color: #FFD700; }
.main-column, .main-column p, .main-column li, .main-column a,
.main-column span, .main-column td, .main-column th, .main-column label,
.main-column h1, .main-column h2, .main-column h3, .main-column h4,
.main-column strong, .main-column em, .main-column small,
.created-at, .post-meta, .feed-post-meta,
.feed-row .small, .feed-row .time, .feed-row .created-at,
.profile-sensors-box > *,
.card-field .card-value, .card-field .card-label {
overflow-wrap: break-word;
word-break: normal;
-webkit-hyphens: none;
hyphens: none;
}
.main-column pre, .main-column code, kbd, samp,
.peer-key, .user-link.peer-key, .oasis-id-copy, .search-oasis-id,
.pm-sent-key-value, .kpi__value,
.block-info-table td .peer-key, .block-info-table td .user-link,
.pm-info-table td .user-link,
.main-column a[href*="ed25519"], .main-column a[href^="ssb:"],
.main-column a[href^="/author/"] {
overflow-wrap: anywhere;
word-break: break-all;
}
button, input[type="submit"], input[type="button"],
.filter-btn, a.filter-btn, .create-button, .edit-btn, .delete-btn,
.join-btn, .leave-btn, .buy-btn, .submit-button, .btn,
.conn-actions button, .peers-conn-actions button,
.mode-buttons button, .mode-buttons .filter-btn,
.filter-group button, .filter-group .filter-btn,
.main-column button, .main-column input[type="submit"] {
white-space: normal;
word-break: normal;
overflow-wrap: break-word;
-webkit-hyphens: none;
hyphens: none;
}
.conn-actions, .peers-conn-actions {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
align-items: stretch;
gap: 8px;
width: 100%;
max-width: 100%;
overflow-x: hidden;
}
.conn-actions > form, .peers-conn-actions > form {
flex: 0 1 auto;
width: auto;
min-width: 0;
margin: 0;
display: flex;
}
.pm-info-table, .pm-info-table tbody,
.block-info-table, .block-info-table tbody {
display: block;
width: 100%;
max-width: 100%;
border: 0;
background: transparent;
box-shadow: none;
table-layout: auto;
}
.pm-info-table thead, .block-info-table thead { display: none; }
.pm-info-table tr, .block-info-table tr {
display: block;
width: 100%;
box-sizing: border-box;
border: 0;
border-bottom: 1px solid rgba(255,215,0,0.18);
border-radius: 0;
margin: 0 0 8px 0;
padding: 6px 0;
background: transparent;
}
.pm-info-table td, .block-info-table td {
display: block;
width: 100%;
max-width: 100%;
box-sizing: border-box;
border: 0;
background: transparent;
padding: 1px 0;
text-align: left;
overflow-wrap: break-word;
word-break: normal;
}
.pm-info-table td.card-label, .block-info-table td.card-label {
color: var(--c-muted, #8c8c8c);
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: .03em;
margin-bottom: 2px;
padding-bottom: 0;
}
.pm-info-table td.card-value, .block-info-table td.card-value {
font-size: 15px;
line-height: 1.5;
margin-bottom: 6px;
}
.block-info-table tr:first-child:has(> td.card-label) { display: none; }
.block-info-table td[data-label]:not([data-label=""])::before {
content: attr(data-label);
display: block;
color: var(--c-muted, #8c8c8c);
font-size: 10px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: .03em;
margin-bottom: 1px;
white-space: nowrap;
word-break: normal;
}
.block-info-table td[data-label=""]::before { content: none; }
.peers-list .block-info-table td,
.peers-technical-block .block-info-table td,
.gov-overview tbody td {
word-break: normal;
overflow-wrap: break-word;
}
.pm-info-table td .user-link, .pm-info-table td .peer-key, .pm-info-table td a[href],
.block-info-table td .peer-key, .block-info-table td .user-link, .block-info-table td a[href] {
display: inline-block;
max-width: 100%;
overflow-wrap: anywhere;
word-break: break-all;
}
.pm-info-table td form, .block-info-table td form,
.pm-info-table td button, .block-info-table td button {
width: 100%;
margin: 0;
}
.main-content { width: 100%; max-width: 100%; }
.main-column {
width: 100%; max-width: 100%;
padding: 16px; box-sizing: border-box;
}
.main-column .card-field {
flex-direction: column;
align-items: stretch;
gap: 2px;
}
.main-column .card-field .card-value {
width: 100%; max-width: 100%; font-size: 15px;
}
.main-column .card-field .card-label {
color: var(--c-muted, #8c8c8c); font-size: 11px;
}
.main-column img, .main-column video, .main-column iframe, .main-column canvas {
max-width: 100%; height: auto;
}
.main-column hr {
width: 100%; border: 0;
border-top: 1px solid #333; margin: 16px 0;
}
.activity-filter-acc { width: 100%; margin-bottom: 8px; }
.activity-quick-modes {
display: flex; flex-wrap: nowrap; gap: 6px; margin-bottom: 8px;
}
.activity-quick-modes form { flex: 1 1 0; min-width: 0; margin: 0; display: flex; }
.activity-quick-modes .filter-btn {
flex: 1 1 0; width: 100%; min-height: 44px;
white-space: nowrap; word-break: keep-all; overflow-wrap: normal;
padding-left: 6px; padding-right: 6px; font-size: 14px;
}
.activity-groups { list-style: none; padding: 0; margin: 0; }
.activity-groups .oasis-nav-header .emoji { display: none; }
.activity-groups .oasis-nav-header .nav-text { flex: 1 1 auto; }
.activity-groups .act-count {
flex: 0 0 auto; min-width: 20px; text-align: center;
font-size: 11px; font-weight: 700; color: #121212;
background: #FFD700; border-radius: 999px; padding: 1px 7px;
margin: 0 8px 0 0;
}
.activity-groups .oasis-nav-list li { list-style: none; margin: 0; padding: 0; }
.activity-groups .oasis-nav-list form { margin: 0; display: block; width: 100%; }
.activity-groups .oasis-nav-list .filter-btn {
display: block; width: 100%; text-align: left;
min-height: 44px; margin: 2px 0; box-sizing: border-box;
}
.activity-groups .oasis-nav-list .filter-btn.active {
outline: 2px solid #FFD700; outline-offset: -2px;
}
.message-list { display: flex; flex-direction: column; gap: 4px; width: 100%; }
.message-list .pm-thread { display: flex; flex-direction: column; width: 100%; align-self: stretch; }
.pm-thread-replies { display: flex; flex-direction: column; gap: 4px; }
.pm-card.pm-bubble {
max-width: 82%; width: fit-content; min-width: 0;
box-sizing: border-box; padding: 8px 12px; margin: 2px 0;
border-radius: 16px; border: 1px solid #333;
background: #1e1e1e; box-shadow: none; cursor: default;
}
.pm-card.pm-bubble.pm-recv {
align-self: flex-start; margin-left: 0; margin-right: auto;
border-bottom-left-radius: 4px; background: #1e1e1e; border-color: #343434;
}
.pm-card.pm-bubble.pm-sent {
align-self: flex-end; margin-left: auto; margin-right: 0;
border-bottom-right-radius: 4px; background: #2a2413; border-color: #5c4c1f;
}
.pm-bubble .pm-bubble-sender { font-size: 11px; font-weight: 700; color: #FFD700; margin-bottom: 3px; }
.pm-bubble .pm-bubble-sender a { color: #FFD700; }
.pm-bubble .message-text { font-size: 15px; line-height: 1.42; color: #FFD700; margin: 0; }
.pm-bubble .message-text a { color: #FFD700; }
.pm-bubble .pm-bubble-meta {
display: flex; flex-wrap: wrap; align-items: center;
gap: 6px; margin-top: 4px; font-size: 10px; color: var(--c-muted, #8c8c8c);
}
.pm-card.pm-sent .pm-bubble-meta { justify-content: flex-end; }
.pm-card.pm-recv .pm-bubble-meta { justify-content: flex-start; }
.pm-bubble .pm-bubble-subject { font-style: italic; opacity: .75; max-width: 50%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pm-bubble .pm-bubble-lock { opacity: .85; }
.pm-bubble .pm-bubble-eco { font-size: 9px; opacity: .9; }
.pm-bubble .pm-bubble-eco * { font-size: 9px; }
.pm-bubble .pm-actions { margin-top: 6px; display: flex; gap: 6px; }
.pm-card.pm-sent .pm-actions { justify-content: flex-end; }
.pm-bubble .pm-actions .pm-btn { font-size: 10px; padding: 3px 8px; min-height: 28px; }
.pm-bubble .pm-actions form { margin: 0; }
.pm-bubble .pm-info-table { display: none; }
.pm-thread .pm-thread-details { width: 100%; }
.pm-thread .pm-thread-toggle { font-size: 12px; color: var(--c-muted, #8c8c8c); padding: 4px 0; cursor: pointer; }
.main-column h1, .main-column h2, .main-column h3, .main-column h4,
.tags-header h2, .tags-header h3, .title-with-chip h2, .pm-title, h2.pm-title,
.cn-name, h1.cn-name, .cn-section, h2.cn-section, .profile-side-name, h2.profile-side-name {
text-wrap: balance;
overflow-wrap: break-word;
word-break: keep-all;
-webkit-hyphens: none; hyphens: none;
text-align: left;
}
.main-column h1, .tags-header h2, .cn-name {
font-size: var(--fs-title, 20px); font-weight: 700;
line-height: 1.22; letter-spacing: -0.01em;
margin: 0 0 var(--space-2, 8px);
}
.main-column h2, .pm-title, .title-with-chip h2, .cn-section {
font-size: 18px; font-weight: 700;
line-height: 1.28; margin: var(--space-1, 4px) 0 var(--space-2, 8px);
}
.main-column h3 {
font-size: var(--fs-body-lg, 16px); font-weight: 600;
line-height: 1.35; margin: var(--space-1, 4px) 0;
}
.main-column h1, .main-column h2, .main-column h3,
.tags-header h2, .pm-title, .cn-name, .cn-section {
max-width: 40ch; width: auto; min-width: 0;
}
.main-column h1 code, .main-column h2 code, .main-column h3 code,
.tags-header h2 code, .pm-title code,
.main-column h1 a[href*="ed25519"], .main-column h2 a[href*="ed25519"],
.main-column h1 a[href^="ssb:"], .main-column h2 a[href^="ssb:"] {
word-break: break-all; overflow-wrap: anywhere;
}
.main-column .tags-header {
display: flex; flex-direction: column; align-items: flex-start;
gap: var(--space-1, 4px); width: 100%; max-width: 100%;
margin: 0 0 var(--space-2, 8px);
}
.main-column .tags-header h2 { margin: 0; }
.main-column .title-with-chip {
display: flex; flex-wrap: wrap; align-items: center;
gap: var(--space-2, 8px); width: 100%; max-width: 100%;
}
.main-column .title-with-chip h2 { flex: 1 1 auto; min-width: 0; margin: 0; max-width: none; }
.main-column .title-with-chip > :not(h2) { flex: 0 0 auto; }
.main-column p, .main-column li,
.tags-header p, .tags-header .prefs-help, .indexing-note, .indexing-percent,
.error-page-message, .welcome-text, .message-text, .pm-bubble .message-text {
text-wrap: pretty;
line-height: 1.55;
max-width: min(66ch, 100%);
overflow-wrap: anywhere;
word-break: normal;
min-width: 0;
-webkit-hyphens: none; hyphens: none;
}
.main-column p + p { margin-top: var(--space-3, 16px); }
.tags-header p, .tags-header .prefs-help, .indexing-note { line-height: 1.5; margin: 4px 0 0 0; }
.pm-bubble .message-text { line-height: 1.45; max-width: 100%; }
[style*="auto-fill"],
[style*="minmax(240px"], [style*="minmax(280px"], [style*="minmax(300px"],
[style*="minmax( 240px"], [style*="minmax( 280px"], [style*="minmax( 300px"],
.trending-container, .cn-hub-grid, .cn-products {
display: grid !important; grid-template-columns: 1fr !important; gap: 12px !important;
width: 100% !important; max-width: 100% !important;
}
.trending-container > *, .games-grid > *, .market-grid > *, .tribe-grid > *,
.feed-container, .feed-card, .trending-card,
.main-column article, .main-column [class*="-card"], .main-column [class*="-item"],
.main-column [class*="-entry"], .main-column .card {
width: 100%; max-width: 100%; min-width: 0;
box-sizing: border-box; margin-left: 0; margin-right: 0;
}
.feed-card .feed-text, .trending-card .feed-text,
.main-column article p, .main-column [class*="-card"] p { max-width: var(--measure, 66ch); }
.main-column form, .comment-form, .comment-form-wrapper, .market-form,
.new-message-form, .project-control-form, .filter-box {
display: block; width: 100%; max-width: 100%;
min-width: 0; box-sizing: border-box;
}
.main-column input:not([type="checkbox"]):not([type="radio"]):not(.oasis-nav-toggle):not(.oasis-nav-side-toggle),
.main-column textarea, .main-column select {
width: 100%; max-width: 100%; min-width: 0; box-sizing: border-box;
}
.main-column form > button:only-of-type, .main-column form > .create-button,
.comment-form button[type="submit"], .market-form button[type="submit"],
.new-message-form button[type="submit"] {
display: block; width: 100%; max-width: 100%;
box-sizing: border-box; margin-top: 8px;
}
[style*="width:33%"], [style*="width: 33%"], [style*="width:25%"], [style*="width: 25%"],
[style*="width:60%"], [style*="width: 60%"], [style*="width:40%"], [style*="width: 40%"] {
width: 100% !important; max-width: 100% !important;
}
.main-column [style*="max-width: 800px"], .main-column [style*="max-width:800px"],
.ai-response, .ai-train-bar {
max-width: 100% !important; width: 100% !important; margin-left: 0 !important; margin-right: 0 !important; box-sizing: border-box !important;
}
.message-list, .pm-thread, .pm-thread-replies { width: 100%; max-width: 100%; box-sizing: border-box; }
.main-column p .user-link, .main-column p a[href^="/author/"],
.main-column li .user-link, .main-column span .user-link,
.main-column .message-text .user-link, .main-column .message-text a[href^="/author/"],
.pm-bubble .message-text .user-link, .pm-bubble .message-text a[href^="/author/"],
.pm-quote a[href^="/author/"] {
display: inline; white-space: normal;
overflow-wrap: anywhere; word-break: keep-all;
-webkit-hyphens: none; hyphens: none;
}
.peer-key, .user-link.peer-key, .block-info-table td .peer-key, .pm-info-table td .peer-key,
.pm-info-table td .user-link, .block-info-table td .user-link,
.search-oasis-id, .pm-sent-key-value, .kpi__value {
display: inline-block; max-width: 100%;
overflow-wrap: anywhere; word-break: break-all;
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
font-variant-numeric: tabular-nums; line-height: 1.45;
}
.oasis-id-copy {
display: block; width: 100%; white-space: nowrap;
overflow: hidden; text-overflow: ellipsis;
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
.invites-list .user-link.peer-key, .peers-list .block-info-table td .peer-key {
display: block; max-width: 100%; white-space: nowrap;
overflow: hidden; text-overflow: ellipsis; word-break: normal;
}
.main-column .message-text a[href^="http"], .main-column p a[href^="http"],
.pm-bubble .message-text a[href^="http"], .main-column .message-text a.oasis-path-link,
.main-column .message-text a.job-link, .main-column .message-text a.project-link,
.main-column .message-text a.market-link {
overflow-wrap: anywhere; word-break: keep-all;
-webkit-hyphens: none; hyphens: none;
}
.main-column code:not(pre code), .pm-bubble .message-text code {
display: inline; max-width: 100%;
overflow-wrap: anywhere; word-break: break-word; white-space: pre-wrap;
}
.main-column .tags-header { margin-bottom: 6px; gap: 2px; }
.main-column .tags-header h2, .tags-header h2 {
font-size: 17px; line-height: 1.2; letter-spacing: 0;
}
.main-column .tags-header p { font-size: 13px; line-height: 1.35; margin: 0; }
.main-column { padding: 10px 12px 16px 12px; }
.activity-filter-acc { margin-bottom: 4px; }
.empty-state {
display: flex; flex-direction: column; align-items: center;
justify-content: center; text-align: center;
padding: 40px 16px; gap: 8px; width: 100%; box-sizing: border-box;
}
.empty-state-icon { font-size: 44px; line-height: 1; opacity: 0.55; }
.empty-state-title { font-size: 16px; font-weight: 700; margin: 4px 0 0 0; color: #FFD700; }
.empty-state-text { color: var(--c-muted, #8c8c8c); font-size: 14px; line-height: 1.4; max-width: 40ch; margin: 0; }
.empty-state-cta { margin-top: 10px; min-height: 48px; display: inline-flex; align-items: center; }
.activity-filter-collapsed {
display: flex; align-items: center; gap: 10px;
flex-wrap: wrap; margin-bottom: 8px; width: 100%;
}
.activity-back {
display: inline-flex; align-items: center; gap: 4px;
min-height: 44px; padding: 6px 14px 6px 10px; flex: 0 0 auto;
}
.activity-back-arrow { font-size: 22px; line-height: 1; font-weight: bold; }
.activity-active-filter {
font-weight: 700; color: #FFD700; text-transform: uppercase;
font-size: 13px; letter-spacing: .03em;
}
.oasis-bottombar .bb-item { min-height: 48px; }
.oasis-bottombar .bb-pair .bb-item { min-height: 44px; padding: 4px 10px; }
.oasis-mobile-menus .oasis-menu-btn { min-height: 48px; }
.pm-bubble .pm-actions .pm-btn { min-height: 40px; padding: 6px 12px; }
.score-btn, .vote-btn, .feed-action-btn {
min-height: 44px; min-width: 44px;
display: inline-flex; align-items: center; justify-content: center;
}
.score-btn:active, .vote-btn:active, .feed-action-btn:active { filter: brightness(.85); }
.oasis-bottombar .bb-add .bb-ico {
background: #FFD700; color: #121212; border-radius: 999px;
width: 30px; height: 30px; display: inline-flex;
align-items: center; justify-content: center;
font-weight: bold; font-size: 20px; line-height: 1;
}
.bb-pick-grid {
display: grid; grid-template-columns: repeat(3, 1fr);
gap: 8px; width: 100%; margin-top: 8px;
}
.bb-pick-form { margin: 0; display: block; }
.bb-pick-btn {
display: flex; flex-direction: column; align-items: center;
justify-content: center; gap: 6px; width: 100%;
min-height: 76px; padding: 10px 6px; box-sizing: border-box;
background: #1c1c1c; border: 1px solid #333; border-radius: 12px; color: #FFD700;
}
.bb-pick-btn.active { border-color: #FFD700; background: #2a2412; }
.bb-pick-ico { font-size: 26px; color: #FFD700; line-height: 1; }
.bb-pick-lbl { font-size: 11px; text-align: center; line-height: 1.2; }
/* Ocultar los checkboxes nativos del drawer (nav-left/right-toggle) — si no, salen 2 cuadrados blancos arriba */
.oasis-nav-side-toggle {
position: absolute;
width: 1px;
height: 1px;
opacity: 0;
pointer-events: none;
margin: 0;
}
/* ==========================================================================
Usabilidad 0.9.1 — Chats estilo Signal + widgets compactos + foros con hilos
Todo en NUESTRO tema (carga tras mobile.css → gana por cascada, sin !important)
========================================================================== */
/* --- Chats: burbujas tipo Signal (los hooks .chat-message-self/-author ya existen) --- */
.chat-messages-list { display: flex; flex-direction: column; gap: 4px; width: 100%; }
.chat-message {
max-width: 82%; width: fit-content; min-width: 0; box-sizing: border-box;
padding: 8px 12px; margin: 2px 0;
border: 1px solid #343434; background: #1e1e1e;
border-radius: 16px; border-bottom-left-radius: 4px;
align-self: flex-start;
}
.chat-message.chat-message-self {
align-self: flex-end; margin-left: auto; margin-right: 0;
background: #2a2413; border-color: #5c4c1f;
border-bottom-left-radius: 16px; border-bottom-right-radius: 4px;
}
.chat-message-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-bottom: 3px; font-size: 10px; color: var(--c-muted, #8c8c8c); }
.chat-message.chat-message-self .chat-message-meta { justify-content: flex-end; }
.chat-message-sender, .chat-message-sender a { font-size: 11px; font-weight: 700; color: #FFD700; }
.chat-message-date { opacity: .8; }
.chat-message-text {
display: block; font-size: 15px; line-height: 1.42; color: #FFD700; margin: 0;
word-break: break-word; overflow-wrap: anywhere;
}
.chat-message-text a { color: #FFD700; }
.chat-message-image-wrap { margin-top: 6px; }
.chat-message-image { max-width: 100%; border-radius: 10px; }
/* --- Compose de chat: caja redondeada + enviar como pill (no bloque naranja de ancho completo) --- */
.chat-message-form textarea {
width: 100%; box-sizing: border-box; border-radius: 14px;
padding: 10px 14px; resize: vertical; font-size: 15px;
}
.chat-message-form .filter-btn {
width: 46px !important; height: 46px !important; min-width: 46px !important; min-height: 46px !important;
padding: 0 !important; border-radius: 50% !important;
display: inline-flex !important; align-items: center !important; justify-content: center !important;
font-size: 0 !important; line-height: 0 !important;
}
.chat-message-form .filter-btn::before { content: "\27A4"; font-size: 18px; line-height: 1; color: #121212; }
.chat-message-form input[type="file"] { font-size: 12px; }
/* --- Reply a mensaje en chats (server-side ?replyTo=, sin JS) --- */
.chat-message-meta .chat-reply-btn { margin-left: auto; padding: 0 4px; color: #FFD700; text-decoration: none; font-size: 15px; opacity: .85; }
.chat-message-self .chat-message-meta .chat-reply-btn { margin-left: 8px; }
.chat-quote {
display: block; border-left: 3px solid #FFD700; padding: 3px 8px; margin: 0 0 5px;
background: rgba(255,215,0,.08); border-radius: 6px; font-size: 12px; line-height: 1.3;
}
.chat-quote-author, .chat-quote-author a { color: #FFD700; font-weight: 700; margin-right: 6px; }
.chat-quote-text { color: #FFDD44; }
.chat-replying-to {
display: flex; flex-wrap: wrap; align-items: center; gap: 6px;
border-left: 3px solid #FFD700; background: rgba(255,215,0,.10);
padding: 6px 10px; margin-bottom: 8px; border-radius: 8px; font-size: 12px;
}
.chat-replying-label { color: #FFD700; font-weight: 700; }
.chat-reply-cancel { margin-left: auto; color: #FFD700; text-decoration: none; font-weight: 700; font-size: 14px; }
/* --- Switcher de chats: tira horizontal para saltar entre conversaciones --- */
.chat-switcher {
display: flex; gap: 6px; overflow-x: auto; padding: 6px 0; margin: 4px 0 8px;
-webkit-overflow-scrolling: touch; scrollbar-width: none;
}
.chat-switcher::-webkit-scrollbar { display: none; }
.chat-switch-chip {
flex: 0 0 auto; max-width: 140px; padding: 6px 12px; border-radius: 999px;
background: #1c1c1c; border: 1px solid #333; color: #FFD700; text-decoration: none;
font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.chat-switch-chip.active { background: #FFD700; color: #121212; border-color: #FFD700; font-weight: 700; }
/* --- Subtopics de foro: tira de pestañas (topics con nombre) + input de topic en el compose --- */
.forum-topics {
display: flex; gap: 6px; overflow-x: auto; padding: 6px 0; margin: 4px 0 8px;
scrollbar-width: none;
}
.forum-topics::-webkit-scrollbar { display: none; }
.forum-topic-chip {
flex: 0 0 auto; max-width: 160px; padding: 6px 14px; border-radius: 999px;
background: #1c1c1c; border: 1px solid #333; color: #FFD700; text-decoration: none;
font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.forum-topic-chip.active { background: #FFD700; color: #121212; border-color: #FFD700; font-weight: 700; }
.new-message-form { flex-wrap: wrap; }
.forum-topic-input {
flex: 1 0 100%; box-sizing: border-box; border-radius: 12px;
padding: 8px 12px; font-size: 13px; margin: 0 0 6px;
}
/* --- #1: chat estilo Signal — compose ABAJO + mensajes arriba (el reply deja de "saltar") --- */
.tribe-main.chat-full-width { display: flex; flex-direction: column-reverse; }
#chatbox { scroll-margin-top: 8px; scroll-margin-bottom: 8px; }
/* --- Botón spread → pill compacto (vence button{min-height:48px}/ancho completo) --- */
.card-spread-centered, .card-spread-left, .spread-row { margin: 6px 0; }
.card-spread-centered .spread-btn, .card-spread-left .spread-btn,
.spread-row .spread-btn, .card-chips-row .spread-btn {
display: inline-flex; align-items: center; justify-content: center;
width: auto; min-width: 0; min-height: 30px; height: 30px;
padding: 2px 14px; font-size: 13px; line-height: 1;
border-radius: 999px; border: 1px solid #555; background: #1a1a1a; color: #FFD700;
}
.card-spread-centered .spread-btn.spread-btn-on,
.card-spread-left .spread-btn.spread-btn-on { background: #FFD700; color: #1a1a1a; border-color: #FFD700; }
/* --- Caja de votos (▲ n ▼): compacta y HORIZONTAL.
El problema era una cadena de flex-stretch (comment-vote-col flex → estiraba la caja a 135px).
Rompemos el estiramiento con height:auto + inline-flex en toda la cadena, con !important
para vencer el min-height:44px de .score-btn (762) y el !important de epsylon en mobile.css. --- */
.comment-vote-col { display: block; height: auto; min-height: 0; width: auto; }
.forum-score-box {
display: inline-flex; height: auto; min-height: 0;
min-width: 0; width: auto;
padding: 4px 8px; border-radius: 10px;
flex-direction: row; flex-wrap: nowrap; gap: 12px; align-items: center;
}
.forum-score-box .forum-score-form {
display: inline-flex; height: auto; width: auto;
flex-direction: row; flex-wrap: nowrap; gap: 12px; align-items: center;
}
.score-btn {
flex: 0 0 auto !important;
width: 30px !important; height: 30px !important; min-width: 30px !important; min-height: 30px !important;
font-size: 0.95em !important; border-radius: 8px !important; padding: 0 !important;
}
.score-total { flex: 0 0 auto; font-size: 1.15em; min-height: 0; height: auto; margin: 0; white-space: nowrap; }
.comment-votes .votes-count { font-size: 11px; }
/* Aplanar el comentario: quitar las cajas/recuadros internos para que sea UN bloque limpio
(cada sección salía como una tarjeta con padding enorme → mucho hueco muerto) */
.forum-comment .comment-header,
.forum-comment .comment-body-row,
.forum-comment .comment-vote-col,
.forum-comment .comment-text-col,
.forum-comment .new-reply {
background: transparent; border: none; box-shadow: none;
padding: 0; margin: 6px 0 0; border-radius: 0;
}
.forum-comment .comment-header { margin-top: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: 12px; }
/* la barra de votos de abajo ya muestra el score → ocultar el ▲:0 ▼:0 redundante de la cabecera */
.forum-comment .comment-header .comment-votes { display: none; }
.forum-comment .comment-text-col p { margin: 4px 0; }
.forum-comment .comment-text-col > div { background: transparent; border: none; padding: 0; }
.forum-comment { padding: 10px 12px; margin-bottom: 8px; }
/* barra de votos alineada a la izquierda, no centrada, para que ocupe poco.
`display:flex !important` es DE PELEA: vence a mobile.css:164 `.comment-body-row{display:block!important}` */
.forum-comment .comment-body-row { display: flex !important; flex-direction: column; align-items: flex-start; }
/* --- Reply/compose del foro estilo Signal: fila [textarea que crece] + [botón REDONDO con icono ↩] --- */
/* especificidad extra (.main-column …) para ganar a nuestra propia regla `.main-column form{display:block}` sin !important */
.main-column .new-reply .comment-form,
.main-column .new-message-form { display: flex; flex-direction: row; align-items: flex-end; gap: 8px; margin: 6px 0 0; }
.main-column .new-message-form br { display: none; }
.main-column .comment-textarea, .main-column .new-message-form textarea {
flex: 1 1 auto; box-sizing: border-box; border-radius: 14px;
padding: 9px 14px; min-height: 42px; resize: none; font-size: 14px; margin: 0;
}
.forum-send-btn {
flex: 0 0 auto !important;
width: 44px !important; height: 44px !important; min-width: 44px !important; min-height: 44px !important;
padding: 0 !important; margin: 0 !important; border-radius: 50% !important;
font-size: 0 !important; line-height: 0 !important;
display: inline-flex !important; align-items: center !important; justify-content: center !important;
}
.forum-send-btn::before { content: "\21A9"; font-size: 20px; line-height: 1; color: #121212; }
.new-reply { margin-top: 6px; }
/* --- Fase 2: hilos anidados. mobile.css fuerza margin-left:0 !important → necesitamos !important para ganar --- */
.forum-comment.level-1 { margin-left: 10px; border-left: 2px solid #333; }
.forum-comment.level-2 { margin-left: 20px; border-left: 2px solid #3a3a3a; }
.forum-comment.level-3 { margin-left: 28px; border-left: 2px solid #404040; }
.forum-comment.level-4 { margin-left: 34px; border-left: 2px solid #454545; }
/* comentario destacado: acento sutil a la izquierda en vez del marco naranja enorme */
.forum-comment.highlighted-reply { border: 1px solid #3a3a3a; border-left: 3px solid #FFD700; background: #1b1a16; }
/* --- Reply del foro SIN tocar la vista de epsylon: la cajita se agranda al enfocarla;
el botón redondo ↩ está SIEMPRE visible (el usuario pidió icono de reply, no gesto/JS). --- */
.new-reply .comment-textarea { min-height: 42px; }
.new-reply:focus-within .comment-textarea { min-height: 64px; }
/* ==========================================================================
Mejoras UI 0.9.1: fuente única + barra de búsqueda en topbar + hive global + bottombar fija
========================================================================== */
/* --- fuente única en todo el UI móvil (quitar el lío monospace/sans) --- */
.oasis-mobile-topbar, .oasis-mobile-menus, .launcher, .oasis-bottombar, .main-column,
.oasis-mobile-topbar input, .main-column input, .main-column textarea, .main-column select, button {
font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
}
/* (topbar sin barra de búsqueda: vuelve el título "OASIS" — CSS .omt-title más arriba) */
/* --- el lanzador va en el header (debajo de los 2 botones), solo en la home --- */
.header .launcher { width: 100%; max-width: 440px; box-sizing: border-box; margin: 4px auto 10px; padding: 0 14px; }
/* holgura bajo la topbar fija */
body { padding-top: 74px; }
/* ==========================================================================
FORK_IA_UX · Módulo KARVAN (mensajes temporales + WebRTC) — chat estilo burbujas
========================================================================== */
.karvan-intro h2 { color: #FFD700; margin: 0 0 6px; }
.karvan-sub { color: #FFDD44; font-size: 13px; }
.karvan-create input[type="text"] { width: 100%; box-sizing: border-box; padding: 10px 12px;
background: #161616; border: 1px solid #333; border-radius: 10px; color: #FFD700; }
.karvan-ttl { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin: 10px 0; }
.karvan-ttl-lbl { color: #FFDD44; font-size: 13px; }
.karvan-ttl-opt { display: inline-flex; align-items: center; gap: 4px; color: #FFD700; font-size: 13px; }
.karvan-create button, .karvan-compose button { padding: 10px 16px; border: 1px solid #FFD700;
border-radius: 10px; background: #FFD700; color: #121212; font-weight: 700; cursor: pointer; }
.karvan-rooms { list-style: none; margin: 8px 0 0; padding: 0; }
.karvan-rooms li { margin: 0 0 8px; }
.karvan-room-item { display: flex; justify-content: space-between; align-items: center; gap: 10px;
padding: 12px 14px; background: #161616; border: 1px solid #333; border-radius: 12px;
color: #FFD700; text-decoration: none; min-height: 48px; box-sizing: border-box; }
.karvan-room-item .kr-title { font-weight: 600; }
.karvan-room-item .kr-meta { color: #FFDD44; font-size: 12px; white-space: nowrap; }
.karvan-empty { color: #FFDD44; }
/* sala */
.karvan-room-head { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
.karvan-back { color: #FFD700; text-decoration: none; font-weight: 600; }
.karvan-room-title { flex: 1 1 auto; color: #FFD700; font-weight: 700; text-align: center;
overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.karvan-expire { color: #FFDD44; font-size: 12px; white-space: nowrap; }
.karvan-live { display: inline-flex; align-items: center; gap: 6px; color: #FFDD44; font-size: 12px; margin-bottom: 8px; }
.karvan-live .kl-dot { width: 8px; height: 8px; border-radius: 50%; background: #777; }
.karvan-live.on .kl-dot { background: #35d07f; }
.karvan-live.on .kl-txt { color: #35d07f; }
.karvan-msgs { list-style: none; margin: 0; padding: 6px 0; display: flex; flex-direction: column; gap: 6px;
max-height: 58vh; overflow-y: auto; }
.karvan-msg { max-width: 82%; align-self: flex-start; background: #1c1c1c; border: 1px solid #333;
border-radius: 14px; padding: 7px 11px; box-sizing: border-box; }
.karvan-msg-self { align-self: flex-end; background: #2a2412; border-color: #FFD700; }
.karvan-msg-live { border-left: 2px solid #35d07f; } /* recibido al instante por WebRTC (P2P) */
.karvan-msg .km-from { display: block; font-size: 10px; color: #FFDD44; margin-bottom: 2px; }
.karvan-msg .km-text { color: #FFD700; word-break: break-word; }
.karvan-compose { display: flex; gap: 8px; margin-top: 10px; }
.karvan-compose input[type="text"] { flex: 1 1 auto; min-width: 0; padding: 10px 12px;
background: #161616; border: 1px solid #333; border-radius: 10px; color: #FFD700; }
/* Fase 2: invitar a un contacto por feed id */
.karvan-invite { display: flex; gap: 8px; margin-top: 8px; }
.karvan-invite input[type="text"] { flex: 1 1 auto; min-width: 0; padding: 9px 12px;
background: #161616; border: 1px solid #333; border-radius: 10px; color: #FFD700; font-family: monospace; font-size: 12px; }
.karvan-invite button { flex: 0 0 auto; padding: 9px 14px; border: 1px solid #FFD700; background: #161616; color: #FFD700; border-radius: 10px; cursor: pointer; }
.karvan-invite-msg { font-size: 12px; margin: 6px 0 0; }
.karvan-invite-msg.ok { color: #35d07f; }
.karvan-invite-msg.err { color: #ff8a8a; }
/* --- Karvan videollamada (Fase 1): media P2P sobre el mismo WebRTC del chat --- */
.karvan-call, .karvan-videos, .karvan-call-bar, .kc-status {
background-color: transparent; box-shadow: none; border-radius: 0; padding: 0; margin: 0; /* anular div{#222} */
}
.karvan-call { margin: 10px 0; }
.karvan-videos { display: none; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 6px; margin-bottom: 8px; }
.karvan-call.active .karvan-videos { display: grid; }
.kc-video { width: 100%; aspect-ratio: 4 / 3; background: #000; border-radius: 10px; border: 1px solid #333; object-fit: cover; display: block; }
.kc-local { transform: scaleX(-1); } /* espejo, como cámara frontal */
.kc-remote { display: contents; } /* los vídeos remotos entran en la misma rejilla */
.karvan-call-bar { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.kc-btn { min-height: 44px; min-width: 44px; padding: 8px 12px; border-radius: 999px;
border: 1px solid #333; background: #161616; color: #FFD700; line-height: 1; cursor: pointer; }
.kc-btn.on { background: #FFD700; color: #121212; border-color: #FFD700; }
.kc-btn-start { font-weight: 600; }
.kc-btn-stop { background: #241414; border-color: #5a2a2a; }
.kc-status { font-size: 12px; color: #FFDD44; margin-top: 6px; min-height: 14px; }
/* ==========================================================================
1.3.x: upstream trae en mobile.css su propio chrome movil (cabecera fija, cajones
laterales y botones Personal/Community que los abren). La rama ya tiene el suyo
(topbar, lanzador y barra inferior), asi que aqui se apaga el de upstream sin
tocar mobile.css. Va con !important porque las reglas que anula lo llevan.
========================================================================== */
.oasis-nav-side-toggle ~ .header {
position: static !important;
display: flex !important; flex-direction: column !important; flex-wrap: nowrap !important;
align-items: stretch !important;
min-height: 0 !important; padding: 0 !important; gap: 0 !important;
z-index: auto !important;
}
body:has(.oasis-nav-side-toggle) { padding-top: 84px !important; }
.oasis-nav-side-toggle ~ .header .oasis-mobile-menus,
.oasis-nav-side-toggle ~ .header .top-bar-left nav,
.oasis-nav-side-toggle ~ .header .top-bar-right nav,
.oasis-nav-side-toggle ~ .header .top-bar-left a.logo-icon { display: none !important; }
/* ==========================================================================
Upstream 1.3.3: piezas nuevas (karma del perfil, directo a pantalla completa,
salas en vivo, graphos). Copiado tal cual del tema oficial: el resto de ese
tema es otro aspecto y no se trae.
========================================================================== */
.main-column .live-lightbox.live-fullscreen {
top: 0 !important;
bottom: 0 !important;
z-index: 10050 !important;
background: #000 !important;
}
.main-column .live-lightbox .live-fullscreen-btn {
top: 8px !important;
right: 64px !important;
z-index: 2 !important;
color: #FFD700 !important;
}
.profile-sensors-box span.karma-line.karma-line-stacked {
display: flex !important;
flex-direction: column !important;
align-items: center !important;
gap: 1px !important;
}
.profile-sensors-box span.karma-line .karma-line-main {
display: block !important;
line-height: 1.25 !important;
}
.profile-sensors-box span.karma-line .karma-received-row {
display: flex !important;
justify-content: center !important;
align-items: center !important;
gap: 14px !important;
margin-top: 0 !important;
line-height: 1.25 !important;
}
.profile-sensors-box span.karma-line .karma-received {
display: inline-flex !important;
align-items: center !important;
gap: 4px !important;
}
.main-column .room-live-panel .room-live-head {
gap: 6px !important;
}
.main-column .room-live-head .room-live-controls {
gap: 6px !important;
}
.main-column .room-live-controls .tribe-action-btn {
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
min-height: 0 !important;
height: auto !important;
padding: 5px 10px !important;
font-size: 12px !important;
line-height: 1.2 !important;
letter-spacing: 0 !important;
border-radius: 8px !important;
}
.main-column .room-live-controls .room-stream-input:invalid ~ .room-stream-go,
.main-column .room-live-controls .room-stream-input:valid ~ .room-stream-pick {
display: none !important;
}
.main-column .room-stream-chip {
display: inline-flex !important;
align-items: center !important;
gap: 4px !important;
max-width: 100% !important;
padding: 2px 10px !important;
border-radius: 12px !important;
font-size: 12px !important;
line-height: 1.4 !important;
background: rgba(255, 163, 0, 0.1) !important;
}
.main-column .room-live-panel .video-grid {
margin: 10px 0 !important;
}
.main-column .room-live-panel #room-video {
scroll-margin-top: 80px !important;
}
.main-column .room-live-panel .phone-contacts {
gap: 4px !important;
}
.main-column .phone-contact.room-peer {
min-height: 0 !important;
padding: 4px 6px !important;
gap: 6px !important;
}
.main-column .phone-contact.room-peer .user-link {
padding: 4px 10px !important;
font-size: 11px !important;
}
.main-column .phone-contact.room-peer :is(.room-peer-you, .room-peer-cam, .room-peer-muted, .room-peer-hand) {
padding: 1px 5px !important;
font-size: 10px !important;
}
.main-column .phone-contact.room-peer :is(button, .tribe-action-btn) {
min-height: 0 !important;
padding: 3px 8px !important;
font-size: 11px !important;
}
.main-column .live-lightbox.live-fullscreen {
top: 0 !important;
bottom: 0 !important;
left: 0 !important;
right: 0 !important;
width: 100vw !important;
height: 100vh !important;
}
.main-column .video-grid-solo .video-tile { width: 100% !important; }
.main-column .inhabitants-grid .inhabitant-card { padding-bottom: 12px !important; }
/* ==========================================================================
Filtros como fichas. Las reglas de botones grandes (48px, ancho completo)
tambien pillaban a los filtros de chats, feed, foros, pads...: en el foro
las 20 categorias llenaban la pantalla y el contenido quedaba debajo.
Ahora van en fila como los de Actividad; "Crear ..." sigue grande, aparte.
========================================================================== */
.main-column :is(.tribe-mode-buttons, .mode-buttons, .mode-buttons-row, .filter-group) {
display: flex !important;
flex-direction: row !important;
flex-wrap: wrap !important;
align-items: center !important;
gap: 6px !important;
padding: 10px 12px !important;
}
.main-column :is(.tribe-mode-buttons, .mode-buttons, .mode-buttons-row, .filter-group) > form {
display: block !important;
width: auto !important;
flex: 0 0 auto !important;
margin: 0 !important;
}
.main-column :is(.tribe-mode-buttons, .mode-buttons, .mode-buttons-row, .filter-group) .filter-btn:not(.create-button) {
min-height: 0 !important;
width: auto !important;
padding: 6px 12px !important;
font-size: 12px !important;
line-height: 1.3 !important;
letter-spacing: .3px !important;
border-radius: 16px !important;
border: 1px solid #555 !important;
background: transparent !important;
color: #ddd !important;
box-shadow: none !important;
white-space: nowrap !important;
}
.main-column :is(.tribe-mode-buttons, .mode-buttons, .mode-buttons-row, .filter-group) .filter-btn.active:not(.create-button) {
background: #FFD700 !important;
border-color: #FFD700 !important;
color: #121212 !important;
}
.main-column :is(.tribe-mode-buttons, .mode-buttons, .mode-buttons-row, .filter-group) > form:has(.create-button) {
flex: 1 1 100% !important;
margin-top: 6px !important;
}
.main-column :is(.tribe-mode-buttons, .mode-buttons, .mode-buttons-row, .filter-group) .create-button {
width: 100% !important;
min-height: 44px !important;
}
/* fichas de filtro vacias (el foro solo pinta las categorias con hilos) */
.main-column .filter-group:empty { display: none !important; }
/* acciones de la tarjeta (borrar, fijar, enlace, abrir): una fila a la derecha.
".main-column form" las ponia a ancho completo y partia la fila en dos */
.main-column .content-actions {
display: flex !important;
flex-wrap: nowrap !important;
justify-content: flex-end !important;
align-items: center !important;
gap: 6px !important;
width: auto !important;
margin-left: auto !important;
}
.main-column .content-actions > form {
display: inline-flex !important;
width: auto !important;
flex: 0 0 auto !important;
margin: 0 !important;
}
.main-column .content-actions .btn-singleview {
min-height: 0 !important;
width: 36px !important;
height: 36px !important;
padding: 0 !important;
border-radius: 50% !important;
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
}
/* Skins y workflows en Ajustes (views/settings_view.js): tarjetas de un toque */
.skin-pick { display: grid !important; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; margin: 0; }
.skin-card {
display: flex !important; flex-direction: column; align-items: stretch; gap: 8px;
width: 100% !important; height: auto !important; min-height: 0 !important; margin: 0 !important; padding: 8px !important;
background: #1c1c1c !important; color: #e6e6e6 !important;
border: 1px solid #444 !important; border-radius: 16px !important; cursor: pointer;
}
.skin-card .skin-shot { width: 100%; aspect-ratio: 3 / 4; object-fit: cover; object-position: top; border-radius: 10px; display: block; }
.skin-card .skin-name { font-size: 17px; font-weight: 700; text-align: center; }
.skin-card.is-current { border: 2px solid #FFD700 !important; background: #2a2412 !important; }
.skin-card.is-current .skin-name::after { content: " \2713"; }
.workflow-pick { display: flex !important; flex-direction: column; gap: 10px; margin: 0; }
.workflow-card {
width: 100% !important; min-height: 56px !important; margin: 0 !important; padding: 10px 16px !important;
font-size: 18px !important; text-align: left !important;
background: #1c1c1c !important; color: #e6e6e6 !important; border: 1px solid #444 !important; border-radius: 14px !important;
}
.workflow-card.is-current { border: 2px solid #FFD700 !important; background: #2a2412 !important; color: #FFD700 !important; }
.workflow-card.is-current::after { content: " \2713"; }