/* ========================================================================== 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; } }