radionicapp / css /componentes /controles.css
Javier Villarroel
feat: piel de vidrio y paleta aurora en la app
113e479
Raw History Blame Contribute Delete
4.32 kB
/* Controles — botones, campos, pasos, miniaturas. */
/* Acción principal (Aplicar, Guardar) */
.accion {
width: 100%;
min-height: var(--m-accion-alto);
border: 0;
border-radius: var(--r-pastilla);
background: var(--accion-fondo);
color: var(--accion-texto);
font-size: var(--f-md);
font-weight: var(--f-peso-medio);
transition: background var(--t-rapido) var(--curva-resorte);
}
.accion:hover { background: var(--accion-fondo-hover); }
/* Apagada: la misma pastilla teal, solo que a media luz. */
.accion[disabled] { opacity: 0.4; cursor: default; }
.accion--secundaria {
position: relative;
background: var(--vidrio-fondo);
backdrop-filter: var(--vidrio-desenfoque);
-webkit-backdrop-filter: var(--vidrio-desenfoque);
color: var(--texto-principal);
box-shadow: var(--vidrio-sombra), inset 0 0 0 1px var(--accion-secundaria-borde);
}
/* En hover no se cambia el vidrio: se aclara el borde, nada más. */
.accion--secundaria:hover { box-shadow: var(--vidrio-sombra), inset 0 0 0 1px var(--texto-principal); }
.accion--secundaria::before,
.accion--secundaria::after {
content: "";
position: absolute;
inset: 0;
border-radius: inherit;
pointer-events: none;
}
.accion--secundaria::before {
padding: 1px;
background: var(--vidrio-borde-degradado);
-webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); /* token-libre: máscara, no es color de diseño */
-webkit-mask-composite: xor;
mask-composite: exclude;
}
.accion--secundaria::after {
background-image: var(--grano);
background-size: var(--vidrio-grano-tamano);
opacity: var(--vidrio-grano-opacidad);
mix-blend-mode: overlay;
}
/* Acción del umbral, sobre la noche */
.accion--umbral {
width: auto;
padding: 0 var(--e-10);
background: var(--accion-umbral-fondo);
color: var(--accion-umbral-texto);
transition: background var(--t-medio) var(--curva-planeo),
transform var(--t-medio) var(--curva-planeo);
}
.accion--umbral:hover {
background: var(--accion-umbral-hover);
transform: translateY(-1px);
}
/* Enlace discreto (Elegir del ordenador, Otra) */
.enlace {
background: none;
border: 0;
padding: 0;
font-size: var(--f-sm);
color: var(--texto-secundario);
border-bottom: 1px solid var(--borde-marcado);
transition: color var(--t-instante) var(--curva-suave),
border-color var(--t-instante) var(--curva-suave);
}
.enlace:hover { color: var(--texto-principal); border-color: var(--texto-principal); }
/* Paso numerado */
.paso {
display: flex;
flex-direction: column;
gap: var(--e-4);
}
.paso__titulo {
display: flex;
align-items: center;
font-size: var(--f-s);
color: var(--texto-tenue);
}
.paso__numero {
display: inline-flex;
align-items: center;
justify-content: center;
width: var(--m-numero);
height: var(--m-numero);
margin-right: var(--e-3);
border: 1px solid var(--borde-sutil);
border-radius: var(--r-circulo);
font-size: var(--f-xs);
color: var(--texto-tenue);
flex: 0 0 auto;
}
/* Campo de texto */
.campo {
width: 100%;
background: none;
border: 0;
border-bottom: 1px solid var(--borde-sutil);
padding: var(--e-3) 2px;
color: var(--texto-principal);
font-family: inherit;
font-size: var(--f-m);
}
.campo::placeholder { color: var(--texto-marcador); }
.campo:focus-visible { outline: none; border-bottom-color: var(--texto-principal); }
.campo--intencion {
min-height: var(--m-modal-texto);
resize: vertical;
line-height: var(--f-alto-normal);
}
/* Miniaturas de ejemplo */
.miniaturas { display: flex; gap: var(--e-2); }
.miniatura {
padding: 0;
border: 0;
background: none;
line-height: 0;
opacity: 0.6;
border-radius: var(--r-m);
overflow: hidden;
transition: opacity var(--t-instante) var(--curva-suave),
box-shadow var(--t-instante) var(--curva-suave);
}
.miniatura:hover { opacity: 0.9; }
.miniatura[aria-pressed="true"] {
opacity: 1;
box-shadow: 0 0 0 1.5px var(--texto-principal);
}
.miniatura img {
width: var(--m-miniatura-ancho);
height: var(--m-miniatura-alto);
object-fit: cover;
}
:where(button, input, textarea):focus-visible {
outline: 2px solid var(--texto-principal);
outline-offset: 2px;
}
@media (max-width: 640px) {
.miniatura img { height: var(--m-miniatura-alto-movil); }
}