XENXOS / assets /CSS /login.css
JSWAI's picture
Rename assets/css/login.css to assets/CSS/login.css
ea00e97 verified
Raw
History Blame Contribute Delete
10.1 kB
/* ==========================================================================
XENEX GLASS OS — Login Screen
assets/CSS/login.css
========================================================================== */
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=IBM+Plex+Sans:wght@400;500;600&display=swap');
:root {
/* Color */
--xenex-bg: #050608;
--xenex-bg-deep: #020203;
--xenex-glass-fill: rgba(18, 21, 27, 0.52);
--xenex-glass-fill-soft: rgba(255, 255, 255, 0.035);
--xenex-glass-border: rgba(255, 255, 255, 0.14);
--xenex-glass-highlight: rgba(255, 255, 255, 0.55);
--xenex-text-primary: #eef1f5;
--xenex-text-secondary: #9aa3b0;
--xenex-text-tertiary: #5c6470;
--xenex-blue: #3f7cff;
--xenex-orange: #ff8a42;
--xenex-red: #ff3b4e;
--xenex-focus: #7db0ff;
--xenex-danger: #ff5468;
/* Type */
--font-display: 'Space Grotesk', 'Segoe UI', system-ui, sans-serif;
--font-body: 'IBM Plex Sans', 'Segoe UI', system-ui, sans-serif;
/* Layout */
--xenex-card-radius: 22px;
--xenex-field-radius: 12px;
--xenex-safe-top: env(safe-area-inset-top, 0px);
--xenex-safe-bottom: env(safe-area-inset-bottom, 0px);
--xenex-safe-left: env(safe-area-inset-left, 0px);
--xenex-safe-right: env(safe-area-inset-right, 0px);
}
/* ---- Reset ---- */
*,
*::before,
*::after {
box-sizing: border-box;
}
html,
body {
height: 100%;
}
body {
margin: 0;
}
/* ---- Base ---- */
.xenex-body {
background: var(--xenex-bg);
font-family: var(--font-body);
color: var(--xenex-text-primary);
min-height: 100vh;
min-height: 100dvh;
overflow-x: hidden;
position: relative;
}
/* ---- Background light field ----
Soft radial gradients rather than filter:blur on large elements —
cheaper to render and animate on phones/tablets. */
.xenex-light-field {
position: fixed;
inset: 0;
overflow: hidden;
z-index: 0;
background: radial-gradient(120% 90% at 50% 0%, #0a0c10 0%, var(--xenex-bg-deep) 60%);
}
.xenex-light {
position: absolute;
width: 70vmax;
height: 70vmax;
border-radius: 50%;
filter: blur(2px);
opacity: 0.55;
will-change: transform;
animation: xenex-drift 34s ease-in-out infinite alternate;
}
.xenex-light--blue {
top: -20vmax;
left: -18vmax;
background: radial-gradient(circle, var(--xenex-blue) 0%, rgba(63, 124, 255, 0) 68%);
animation-duration: 38s;
}
.xenex-light--orange {
bottom: -26vmax;
right: -16vmax;
background: radial-gradient(circle, var(--xenex-orange) 0%, rgba(255, 138, 66, 0) 65%);
animation-duration: 30s;
animation-delay: -6s;
}
.xenex-light--red {
bottom: 10vh;
left: 20vw;
width: 55vmax;
height: 55vmax;
background: radial-gradient(circle, var(--xenex-red) 0%, rgba(255, 59, 78, 0) 62%);
opacity: 0.4;
animation-duration: 42s;
animation-delay: -18s;
}
@keyframes xenex-drift {
0% {
transform: translate3d(0, 0, 0) scale(1);
}
50% {
transform: translate3d(4vmax, 3vmax, 0) scale(1.08);
}
100% {
transform: translate3d(-3vmax, 5vmax, 0) scale(0.97);
}
}
/* ---- Screen layout ---- */
.login-screen {
position: relative;
z-index: 1;
min-height: 100vh;
min-height: 100dvh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 28px;
padding: calc(28px + var(--xenex-safe-top)) calc(20px + var(--xenex-safe-right))
calc(28px + var(--xenex-safe-bottom)) calc(20px + var(--xenex-safe-left));
}
/* ---- Glass card ---- */
.login-card {
position: relative;
width: 100%;
max-width: 400px;
padding: 36px 28px 32px;
border-radius: var(--xenex-card-radius);
background:
linear-gradient(180deg, var(--xenex-glass-fill-soft) 0%, transparent 40%),
var(--xenex-glass-fill);
border: 1px solid var(--xenex-glass-border);
backdrop-filter: blur(22px) saturate(150%);
-webkit-backdrop-filter: blur(22px) saturate(150%);
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, 0.08),
inset 0 0 40px rgba(255, 255, 255, 0.015),
0 24px 70px rgba(0, 0, 0, 0.55);
}
/* Thin lit edge along the top — simulates light catching a glass rim */
.login-card::before {
content: '';
position: absolute;
top: 0;
left: 12%;
right: 12%;
height: 1px;
background: linear-gradient(90deg, transparent, var(--xenex-glass-highlight), transparent);
opacity: 0.6;
}
/* ---- Brand ---- */
.login-brand {
display: flex;
align-items: baseline;
justify-content: center;
gap: 8px;
margin-bottom: 22px;
font-family: var(--font-display);
}
.login-brand__mark {
width: 9px;
height: 9px;
border-radius: 50%;
align-self: center;
background: linear-gradient(135deg, var(--xenex-blue), var(--xenex-red));
box-shadow: 0 0 10px rgba(63, 124, 255, 0.7);
}
.login-brand__name {
font-size: 19px;
font-weight: 700;
letter-spacing: 0.01em;
color: var(--xenex-text-primary);
}
.login-brand__suffix {
font-size: 13px;
font-weight: 500;
color: var(--xenex-text-secondary);
}
/* ---- Heading / description ---- */
.login-heading {
font-family: var(--font-display);
font-size: 24px;
font-weight: 600;
line-height: 1.25;
text-align: center;
margin: 0 0 8px;
color: var(--xenex-text-primary);
}
.login-description {
font-size: 14px;
line-height: 1.5;
text-align: center;
color: var(--xenex-text-secondary);
margin: 0 0 28px;
}
/* ---- Form ---- */
.login-form {
display: flex;
flex-direction: column;
gap: 16px;
}
.login-field {
display: flex;
flex-direction: column;
gap: 7px;
}
.login-field__label {
font-size: 13px;
font-weight: 500;
color: var(--xenex-text-secondary);
}
.login-field__control {
position: relative;
display: flex;
align-items: stretch;
}
.login-field__input {
width: 100%;
min-height: 48px;
padding: 12px 14px;
font-family: var(--font-body);
font-size: 15px;
color: var(--xenex-text-primary);
background: rgba(255, 255, 255, 0.04);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: var(--xenex-field-radius);
outline: none;
transition: border-color 0.15s ease, background-color 0.15s ease;
}
.login-field__control .login-field__input {
padding-right: 64px;
}
.login-field__input::placeholder {
color: var(--xenex-text-tertiary);
}
.login-field__input:hover {
border-color: rgba(255, 255, 255, 0.18);
}
.login-field__input:focus-visible {
border-color: var(--xenex-focus);
background: rgba(255, 255, 255, 0.06);
box-shadow: 0 0 0 3px rgba(125, 176, 255, 0.22);
}
.login-field__toggle {
position: absolute;
right: 6px;
top: 50%;
transform: translateY(-50%);
min-width: 44px;
min-height: 36px;
padding: 0 10px;
display: flex;
align-items: center;
justify-content: center;
background: transparent;
border: none;
border-radius: 8px;
font-family: var(--font-body);
font-size: 12.5px;
font-weight: 500;
color: var(--xenex-text-secondary);
cursor: pointer;
transition: color 0.15s ease, background-color 0.15s ease;
}
.login-field__toggle:hover {
color: var(--xenex-text-primary);
background: rgba(255, 255, 255, 0.06);
}
.login-field__toggle:focus-visible {
outline: 2px solid var(--xenex-focus);
outline-offset: 2px;
}
/* ---- Form meta / links ---- */
.login-form__meta {
display: flex;
justify-content: flex-end;
margin-top: -4px;
}
.login-link {
color: var(--xenex-text-secondary);
font-size: 13px;
text-decoration: none;
border-bottom: 1px solid transparent;
transition: color 0.15s ease, border-color 0.15s ease;
}
.login-link:hover {
color: var(--xenex-focus);
border-bottom-color: currentColor;
}
.login-link:focus-visible {
outline: 2px solid var(--xenex-focus);
outline-offset: 3px;
border-radius: 2px;
}
/* ---- Primary action ---- */
.login-submit {
min-height: 48px;
margin-top: 6px;
border: 1px solid rgba(255, 255, 255, 0.16);
border-radius: var(--xenex-field-radius);
background: linear-gradient(180deg, rgba(63, 124, 255, 0.9), rgba(63, 124, 255, 0.72));
color: #f5f8ff;
font-family: var(--font-body);
font-size: 15px;
font-weight: 600;
cursor: pointer;
transition: transform 0.12s ease, box-shadow 0.15s ease, background 0.15s ease;
box-shadow: 0 10px 24px rgba(63, 124, 255, 0.28);
}
.login-submit:hover {
background: linear-gradient(180deg, rgba(78, 135, 255, 0.95), rgba(63, 124, 255, 0.8));
}
.login-submit:active {
transform: translateY(1px);
}
.login-submit:focus-visible {
outline: 2px solid var(--xenex-focus);
outline-offset: 3px;
}
/* ---- Signup line ---- */
.login-signup {
text-align: center;
font-size: 13.5px;
color: var(--xenex-text-secondary);
margin: 22px 0 0;
}
.login-signup .login-link {
color: var(--xenex-text-primary);
font-weight: 500;
}
/* ---- Footer ---- */
.login-footer {
position: relative;
z-index: 1;
display: flex;
align-items: center;
gap: 10px;
}
.login-link--footer {
font-size: 12.5px;
color: var(--xenex-text-tertiary);
}
.login-footer__divider {
width: 3px;
height: 3px;
border-radius: 50%;
background: var(--xenex-text-tertiary);
}
/* ==========================================================================
Responsive
========================================================================== */
/* Small phones (360–389px) */
@media (max-width: 389px) {
.login-card {
padding: 28px 20px 26px;
border-radius: 18px;
}
.login-heading {
font-size: 21px;
}
}
/* Tablets and up */
@media (min-width: 700px) {
.login-card {
max-width: 420px;
padding: 44px 40px 38px;
}
.login-heading {
font-size: 26px;
}
}
/* Landscape phones — shorter viewport, avoid vertical overflow */
@media (max-height: 480px) and (orientation: landscape) {
.login-screen {
justify-content: flex-start;
padding-top: calc(18px + var(--xenex-safe-top));
padding-bottom: calc(18px + var(--xenex-safe-bottom));
}
.login-card {
padding: 22px 26px;
}
.login-brand {
margin-bottom: 14px;
}
.login-description {
margin-bottom: 18px;
}
}
/* ---- Reduced motion ---- */
@media (prefers-reduced-motion: reduce) {
.xenex-light {
animation: none;
}
}