.login-page { position: relative; min-height: var(--desktop-stage-height, 100dvh); display: grid; grid-template-columns: minmax(760px, 1fr) minmax(420px, 540px); align-items: center; gap: clamp(28px, 3.6vw, 58px); padding: 40px clamp(42px, 4vw, 58px) 30px; overflow: hidden; background: linear-gradient(112deg, rgba(var(--theme-primary-rgb, 58, 124, 165), 0.09), transparent 38%), linear-gradient(180deg, #f8fbfd 0%, #eef5f9 100%); } .login-page::before { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, rgba(15, 23, 42, 0.032) 1px, transparent 1px), linear-gradient(0deg, rgba(15, 23, 42, 0.028) 1px, transparent 1px); background-size: 72px 72px; mask-image: linear-gradient(105deg, rgba(0, 0, 0, 0.56), rgba(0, 0, 0, 0.14)); pointer-events: none; } .login-visual, .login-panel { position: relative; z-index: 1; } .login-visual { min-height: min(900px, calc(var(--desktop-stage-height, 100dvh) - 70px)); display: grid; grid-template-columns: minmax(360px, 0.96fr) minmax(420px, 1.04fr); grid-template-rows: auto auto minmax(230px, 1fr) auto auto; column-gap: clamp(16px, 2vw, 34px); align-items: start; animation: loginVisualIn 420ms cubic-bezier(0.16, 1, 0.3, 1) both; } .visual-brand, .visual-copy, .visual-feature-list, .visual-main-asset, .visual-chart-asset, .visual-footer { position: relative; } .visual-brand { grid-column: 1 / 3; display: inline-flex; width: fit-content; align-items: center; gap: 10px; color: #0f172a; font-size: 18px; font-weight: 800; z-index: 3; } :deep(.logo-mark) { width: 26px; height: 26px; display: inline-grid; place-items: center; color: var(--theme-primary-active); } :deep(.logo-mark svg) { width: 26px; height: 26px; fill: currentColor; } .visual-copy { grid-column: 1 / 3; grid-row: 2 / 3; width: min(660px, 70%); margin-top: 86px; z-index: 3; } .visual-copy p, .visual-copy h1, .visual-copy span { margin: 0; } .visual-copy p { color: #0f2f56; font-size: 24px; line-height: 1.25; font-weight: 900; } .visual-copy h1 { width: 100%; margin-top: 12px; color: #0f2f56; font-size: clamp(29px, 2.2vw, 35px); line-height: 1.28; font-weight: 900; letter-spacing: 0; } .visual-copy span { display: block; width: min(420px, 100%); margin-top: 18px; color: #475569; font-size: 15px; line-height: 1.85; } .visual-feature-list { grid-column: 1 / 2; grid-row: 3 / 4; display: grid; gap: 24px; margin-top: 46px; z-index: 3; } .visual-feature-list article { display: grid; grid-template-columns: 54px minmax(0, 1fr); gap: 18px; align-items: center; } .visual-feature-icon { width: 50px; height: 50px; display: grid; place-items: center; border: 1px solid rgba(var(--theme-primary-rgb, 58, 124, 165), 0.16); border-radius: 4px; background: rgba(255, 255, 255, 0.62); color: var(--theme-primary-active); box-shadow: 0 10px 24px rgba(15, 23, 42, 0.05); } .visual-feature-icon .el-icon { font-size: 25px; } .visual-feature-list strong { display: block; color: #0f2f56; font-size: 15px; line-height: 1.45; font-weight: 900; } .visual-feature-list p { margin: 5px 0 0; color: #64748b; font-size: 12px; line-height: 1.65; } .visual-main-asset { grid-column: 2 / 3; grid-row: 2 / 5; align-self: start; width: min(570px, 118%); justify-self: end; margin-top: 62px; object-fit: contain; filter: saturate(0.9) contrast(1.02); z-index: 1; } .visual-chart-asset { grid-column: 1 / 3; grid-row: 4 / 5; align-self: end; justify-self: start; width: min(590px, 64%); margin: 28px 0 30px; object-fit: contain; filter: saturate(0.9) contrast(1.02); z-index: 2; } .login-visual::after { content: ""; position: absolute; right: 0; top: 42px; width: min(560px, 55%); height: 78%; background: linear-gradient(135deg, rgba(var(--theme-primary-rgb, 58, 124, 165), 0.20), rgba(var(--theme-secondary-rgb, 79, 111, 159), 0.06)); mix-blend-mode: color; mask-image: radial-gradient(ellipse at 62% 50%, #000 0%, rgba(0, 0, 0, 0.76) 48%, transparent 78%); opacity: 0.36; z-index: 0; pointer-events: none; } .visual-footer { grid-column: 1 / 3; grid-row: 5 / 6; align-self: end; display: inline-flex; align-items: center; justify-content: center; gap: 14px; color: #64748b; font-size: 12px; z-index: 3; } .visual-footer i { width: 1px; height: 14px; background: #cbd5e1; } .login-panel { display: grid; align-items: center; } .login-card { width: 100%; min-height: 748px; display: grid; align-content: start; justify-self: center; padding: 56px 56px 38px; border: 1px solid rgba(203, 213, 225, 0.88); border-radius: 4px; background: rgba(255, 255, 255, 0.94); box-shadow: 0 24px 68px rgba(15, 23, 42, 0.10); backdrop-filter: blur(16px); animation: loginCardIn 420ms 80ms cubic-bezier(0.16, 1, 0.3, 1) both; } .card-brand { display: inline-flex; align-items: center; gap: 10px; color: #0f172a; font-size: 15px; font-weight: 800; } .card-brand :deep(.logo-mark), .card-brand :deep(.logo-mark svg) { width: 22px; height: 22px; } .card-head { margin-top: 34px; } .card-head h2 { margin: 0; color: #0f172a; font-size: 32px; line-height: 1.18; font-weight: 900; letter-spacing: 0; } .card-head p { margin: 10px 0 0; color: #475569; font-size: 16px; line-height: 1.5; } .login-form { display: grid; gap: 18px; margin-top: 32px; } .form-field { display: grid; } .login-input, .login-select { width: 100%; } :deep(.login-input .el-input__wrapper), :deep(.login-select .el-select__wrapper) { min-height: 50px; border-radius: 4px; background: rgba(255, 255, 255, 0.96); } :deep(.login-input .el-input__inner), :deep(.login-select .el-select__selected-item) { color: #0f172a; font-size: 14px; font-weight: 500; } :deep(.login-input .el-input__inner::placeholder) { color: #94a3b8; } :deep(.login-input .el-input__prefix), :deep(.login-input .el-input__suffix), :deep(.login-select .el-select__suffix) { color: #94a3b8; } .form-meta { display: flex; align-items: center; justify-content: space-between; gap: 16px; min-height: 28px; } :deep(.login-checkbox .el-checkbox__label) { color: #334155; font-size: 13px; font-weight: 600; } .link-button { min-height: 28px; padding: 0; border: 0; background: transparent; color: var(--theme-primary-active); font-size: 13px; font-weight: 700; cursor: pointer; } .link-button:hover { color: var(--theme-primary-hover); } .login-error { margin: 0; padding: 10px 12px; border: 1px solid rgba(var(--danger-rgb, 220, 38, 38), 0.22); border-radius: 4px; background: var(--danger-soft, #fef2f2); color: var(--danger-active, #991b1b); font-size: 13px; line-height: 1.55; } .login-submit, .login-sso { width: 100%; min-height: 50px; border-radius: 4px; font-weight: 800; } .login-submit { margin-top: 4px; box-shadow: 0 14px 28px rgba(var(--theme-primary-rgb, 58, 124, 165), 0.20); } .login-sso { margin-left: 0; color: var(--theme-primary-active); } .security-note { justify-self: center; margin-top: 42px; color: #64748b; font-size: 12px; line-height: 1.7; text-align: center; } .security-note button { padding: 0; border: 0; background: transparent; color: var(--theme-primary-active); font: inherit; font-weight: 700; cursor: pointer; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } @keyframes loginVisualIn { from { opacity: 0; transform: translateX(-18px); } to { opacity: 1; transform: translateX(0); } } @keyframes loginCardIn { from { opacity: 0; transform: scale3d(0.985, 0.985, 1) translateY(12px); } to { opacity: 1; transform: scale3d(1, 1, 1) translateY(0); } } @media (min-width: 1321px) { .login-page { --login-edge: clamp(42px, 3.6vw, 56px); --login-card-width: 535px; --login-card-left: min(calc(100vw - var(--login-card-width) - var(--login-edge)), 1002px); --login-visual-top: 56px; --login-visual-width: calc(var(--login-card-left) - var(--login-edge) - 24px); display: block; padding: 0; } .login-visual { position: absolute; left: var(--login-edge); top: var(--login-visual-top); width: var(--login-visual-width); height: calc(var(--desktop-stage-height, 100dvh) - 86px); min-height: 0; display: block; } .login-panel { position: absolute; left: var(--login-card-left); top: clamp(96px, 11.3vh, 112px); width: var(--login-card-width); display: block; } .login-card { width: 100%; height: min(748px, calc(var(--desktop-stage-height, 100dvh) - 80px)); min-height: 0; } .visual-brand { position: absolute; left: 0; top: 0; } .visual-copy { position: absolute; left: 0; top: 120px; width: min(660px, 72%); margin-top: 0; } .visual-feature-list { position: absolute; left: 0; top: 312px; width: 380px; margin-top: 0; } .visual-main-asset { position: absolute; left: 392px; top: 86px; width: min(585px, calc(var(--login-visual-width) - 360px)); margin-top: 0; } .visual-chart-asset { position: absolute; left: 0; top: 619px; width: min(585px, 66%); margin: 0; } .login-visual::after { right: -4px; top: 84px; width: min(620px, 58%); height: 70%; } .visual-footer { position: absolute; left: 0; right: 0; bottom: 14px; } } @media (max-width: 1320px) { .login-page { grid-template-columns: minmax(640px, 1fr) minmax(410px, 500px); gap: 28px; padding-inline: 38px; } .login-visual { grid-template-columns: minmax(320px, 0.92fr) minmax(380px, 1.08fr); } .visual-copy { margin-top: 72px; } .visual-main-asset { width: min(540px, 116%); } .visual-chart-asset { width: min(560px, 68%); } .login-card { min-height: 600px; padding: 44px 44px 30px; } } @media (max-height: 820px) and (min-width: 981px) { .login-page { padding-block: 28px 22px; } .login-visual { min-height: 620px; } .visual-copy { margin-top: 58px; } .visual-feature-list { gap: 18px; margin-top: 34px; } .visual-main-asset { width: min(500px, 108%); margin-top: 46px; } .visual-chart-asset { width: min(540px, 66%); margin-block: 18px 18px; } .login-card { min-height: 560px; padding-block: 38px 28px; } .card-head { margin-top: 24px; } .login-form { gap: 14px; margin-top: 24px; } .security-note { margin-top: 28px; } } @media (max-width: 980px) { .login-page { min-height: var(--desktop-stage-height, 100dvh); grid-template-columns: 1fr; align-content: start; gap: 18px; padding: 18px 22px 24px; overflow-x: hidden; overflow-y: auto; } .login-visual { min-height: 0; grid-template-columns: 1fr; grid-template-rows: auto auto auto auto auto auto; row-gap: 18px; } .visual-brand, .visual-copy, .visual-feature-list, .visual-main-asset, .visual-chart-asset, .visual-footer { grid-column: 1; } .visual-brand { grid-row: 1; } .visual-copy { grid-row: 2; width: 100%; margin-top: 12px; } .visual-main-asset { grid-row: 3; width: min(520px, 100%); margin-top: 0; justify-self: center; } .visual-feature-list { grid-row: 4; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin-top: 0; } .visual-feature-list article { grid-template-columns: 34px minmax(0, 1fr); gap: 9px; padding: 10px; border: 1px solid rgba(203, 213, 225, 0.62); border-radius: 4px; background: rgba(255, 255, 255, 0.66); } .visual-feature-icon { width: 32px; height: 32px; } .visual-feature-icon .el-icon { font-size: 18px; } .visual-feature-list p { display: none; } .visual-chart-asset { grid-row: 5; width: min(520px, 100%); margin: 0; justify-self: center; } .visual-footer { grid-row: 6; } .login-visual::after { top: auto; bottom: 86px; width: min(520px, 100%); height: 42%; } .login-card { max-width: 520px; min-height: 0; padding: 30px 24px 26px; } .card-brand { display: none; } .card-head { margin-top: 0; } .card-head h2 { font-size: 28px; } } @media (max-width: 620px) { .login-page { padding-inline: 16px; } .visual-copy h1 { font-size: 27px; } .visual-feature-list { grid-template-columns: 1fr; } .visual-feature-list p { display: block; } .login-card { padding: 24px 18px 20px; } .login-form { gap: 13px; margin-top: 22px; } :deep(.login-input .el-input__wrapper), :deep(.login-select .el-select__wrapper), .login-submit, .login-sso { min-height: 44px; } } @media (max-width: 420px) { .visual-copy p { font-size: 21px; } .visual-copy h1 { font-size: 24px; } .card-head h2 { font-size: 25px; } .form-meta { align-items: flex-start; flex-direction: column; gap: 8px; } } @media (prefers-reduced-motion: reduce) { .login-visual, .login-card { animation: none; } }