      .login-wrapper {
        --login-img-colorize: hue-rotate(0deg);
        min-height: 100vh;
        min-height: 100dvh;
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        position: relative;
        overflow: hidden;
      }

      /* 左右布局时的插画图片 */
      .login-wrapper .login-image {
        max-width: 100%;
        max-height: 100%;
        position: absolute;
        left: 0;
        top: 50%;
        transform: translateY(-50%);
        mask-image: radial-gradient(
          farthest-side at 50% 50.6%,
          black 86%,
          transparent
        );
        filter: var(--login-img-colorize);
        pointer-events: none;
        user-select: none;
        z-index: 2;
      }

      /* 背景图片 */
      .login-wrapper .login-bg-image {
        width: 100%;
        height: 100%;
        mask-image: radial-gradient(
          ellipse 116% 148% at 32% 51%,
          transparent 18%,
          black 22%
        );
        display: block;
      }

      .login-wrapper .login-background {
        width: 100%;
        height: 100%;
        position: absolute;
        left: 0;
        top: 0;
        filter: var(--login-img-colorize) blur(18px);
        background: #dee5f0;
        pointer-events: none;
        user-select: none;
      }

      /* 顶栏 */
      .login-wrapper .login-header {
        width: 100%;
        padding: 8px 8px 0 16px;
        display: flex;
        align-items: center;
        box-sizing: border-box;
        position: absolute;
        left: 0;
        top: 0;
        z-index: 4;
      }

      /* logo */
      .login-wrapper .login-logo {
        display: flex;
        align-items: center;
      }

      .login-wrapper .login-logo > img {
        width: 30px;
        height: 30px;
      }

      .login-wrapper .login-title {
        font-size: 20px;
        font-weight: 500;
        font-family:
          -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
          'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji',
          'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
        margin: 0 0 0 6px;
      }

      /* 顶栏右侧 */
      .login-wrapper .login-tools {
        display: flex;
        align-items: center;
        padding: 4px 5px;
        margin-left: auto;
        border-radius: 42px;
        background: rgba(255, 255, 255, 0.28);
        box-shadow:
          0 0 0 1px rgba(255, 255, 255, 0.98) inset,
          0 0 2px rgba(0, 0, 0, 0.08);
      }

      .login-wrapper .login-tool {
        height: 34px;
        min-width: 34px;
        display: flex;
        align-items: center;
        justify-content: center;
        box-sizing: border-box;
        border-radius: 30px;
        transition: all 0.2s;
        cursor: pointer;
      }

      .login-wrapper .login-tool:hover {
        background: hsla(0, 0%, 60%, 0.15);
      }

      /* 底栏 */
      .login-wrapper .ele-footer {
        padding-top: 0;
        position: relative;
        z-index: 3;
      }

      /* 主体 */
      .login-wrapper .login-main {
        flex: auto;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        box-sizing: border-box;
        padding: 68px 20px 20px 20px;
        position: relative;
        z-index: 3;
      }

      /* 主体卡片 */
      .login-wrapper .login-card {
        width: 100%;
        max-width: 900px;
        display: flex;
        background: #fff;
        box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.06);
        border-radius: 12px;
        position: relative;
      }

      .login-wrapper .login-card::after {
        content: '';
        width: 100%;
        height: 100%;
        border-radius: inherit;
        box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.98) inset;
        position: absolute;
        left: 0;
        top: 0;
        pointer-events: none;
      }

      /* 居中布局时卡片左侧插画 */
      .login-wrapper .login-cover {
        flex-shrink: 0;
        width: 56.8%;
        height: 480px;
        display: flex;
        border-top-left-radius: inherit;
        border-bottom-left-radius: inherit;
        filter: var(--login-img-colorize);
        position: relative;
        overflow: hidden;
      }

      .login-wrapper .login-cover::after {
        content: '';
        height: 100%;
        border-left: 1px solid rgba(0, 0, 0, 0.02);
        position: absolute;
        right: 0;
        top: 0;
      }

      .login-wrapper .login-cover-image {
        height: 100%;
        transform: scaleX(0.9);
        transform-origin: center left;
        pointer-events: none;
        user-select: none;
      }

      /* 登录表单 */
      .login-wrapper .login-body {
        flex: 1;
        display: flex;
        align-items: flex-start;
        justify-content: center;
        box-sizing: border-box;
        padding-top: 32px;
      }

      .login-wrapper .login-content {
        width: 76%;
        min-height: 394px;
        box-sizing: border-box;
      }

      /* 验证码 */
      .login-wrapper .login-captcha-group {
        width: 100%;
        display: flex;
        align-items: center;
      }

      .login-wrapper .login-captcha-group > .layui-input-wrap {
        flex: 1;
      }

      .login-wrapper .login-captcha-group .login-captcha {
        flex-shrink: 0;
        width: 120px;
        height: 40px;
        line-height: 40px;
        font-size: 13px;
        margin-left: 12px;
        border-radius: 6px;
        border: 1px solid rgba(0, 0, 0, 0.14);
        transition: all 0.2s;
        box-sizing: border-box;
        background: #fff;
        text-align: center;
        user-select: none;
        overflow: hidden;
        cursor: pointer;
      }

      .login-wrapper .login-captcha-group .login-captcha img {
        width: 100%;
        height: 100%;
        object-fit: contain;
        display: block;
      }

      .login-wrapper .login-captcha-group .login-captcha:hover {
        border-color: #2f54eb;
      }

      /* 居左居右 */
      .login-wrapper.is-left,
      .login-wrapper.is-right {
        align-items: flex-end;
      }

      .login-wrapper.is-left .login-main,
      .login-wrapper.is-right .login-main {
        width: 32%;
        padding: 0;
      }

      .login-wrapper.is-left .login-card,
      .login-wrapper.is-right .login-card {
        flex: auto;
        max-width: none;
        flex-direction: column;
        box-shadow: none;
        border-radius: 0;
      }

      .login-wrapper.is-left .login-cover,
      .login-wrapper.is-right .login-cover {
        display: none;
      }

      .login-wrapper.is-left .login-body,
      .login-wrapper.is-right .login-body {
        flex: auto;
        align-items: center;
        padding-top: 58px;
      }

      .login-wrapper.is-left {
        align-items: flex-start;
      }

      .login-wrapper.is-left .login-image {
        right: 0;
        left: auto;
        transform: translateX(28%) translateY(-50%);
      }

      .login-wrapper.is-left .login-background {
        transform: scaleX(-1);
      }

      .login-wrapper.is-left .login-card::after {
        box-shadow: -1px 0 0 0 rgba(255, 255, 255, 0.98) inset;
      }

      .login-wrapper.is-right .login-card::after {
        box-shadow: 1px 0 0 0 rgba(255, 255, 255, 0.98) inset;
      }

      .login-wrapper.is-right .login-tools {
        box-shadow: 0 0 0 0.68px rgba(0, 0, 0, 0.08);
      }

      .login-wrapper:not(.is-left):not(.is-right) .login-image {
        display: none;
      }

      /* 小屏幕适应 */
      @media screen and (max-width: 908px) {
        .login-wrapper.is-left .login-main,
        .login-wrapper.is-right .login-main {
          width: 100%;
        }

        .login-wrapper.is-left .login-image,
        .login-wrapper.is-right .login-image {
          top: 7%;
          transform: translateX(16%) scaleX(-1);
        }

        .login-wrapper .login-card {
          background: rgba(255, 255, 255, 0.8);
        }
      }

      @media screen and (max-width: 780px) {
        .login-wrapper .login-card .login-cover {
          display: none;
        }

        .login-wrapper:not(.is-left):not(.is-right) .login-card {
          max-width: 480px;
        }

        .login-wrapper:not(.is-left):not(.is-right) .login-body {
          padding-bottom: 52px;
        }
      }

      /* 第三方应用 */
      .auth-app-list {
        display: flex;
        align-items: center;
        justify-content: center;
        margin-bottom: 18px;
      }

      .auth-app-list .auth-app-item {
        margin-left: 22px;
        display: flex;
        align-items: center;
        justify-content: center;
        transition: opacity 0.2s;
        cursor: pointer;
      }

      .auth-app-list .auth-app-item:hover {
        opacity: 0.68;
      }

      .auth-app-list .auth-app-item .layui-icon {
        font-size: 26px;
      }

      /* 页脚 */
      .login-wrapper .ele-footer {
        color: rgba(0, 0, 0, 0.38);
        padding-bottom: 16px;
        text-align: center;
      }

      .login-wrapper .ele-footer a:not(:hover) {
        color: inherit;
      }

      .login-wrapper .ele-footer a + a {
        margin-left: 24px;
      }

      .login-wrapper.is-left > .ele-footer,
      .login-wrapper.is-right > .ele-footer,
      .login-wrapper:not(.is-left):not(.is-right) .login-card > .ele-footer {
        display: none;
      }

      /* 表单尺寸修改 */
      .login-wrapper .layui-input {
        height: 40px;
        background: transparent !important;
      }

      .login-wrapper .layui-input-wrap,
      .login-wrapper .layui-input-affix {
        line-height: 40px;
      }

      .login-wrapper .layui-input-block {
        min-height: 40px;
      }

      .login-wrapper .layui-form-item {
        margin-bottom: 22px;
      }

      .layui-btn:not(.layui-btn-lg):not(.layui-btn-sm):not(.layui-btn-xs) {
        height: 40px;
        line-height: 40px;
      }

      /* 暗黑切换开关 */
      .ele-dark-switch .layui-form-switch {
        margin: 0;
      }

      .ele-dark-switch .layui-form-onswitch {
        border-color: rgba(255, 255, 255, 0.12);
        background: hsla(0, 0%, 60%, 0.13);
      }

      /* 适配暗黑模式 */
      html.ele-login-dark .login-wrapper .login-tools {
        background: rgba(255, 255, 255, 0.04);
        box-shadow:
          0 0 0 1px rgba(255, 255, 255, 0.08) inset,
          0 0 6px rgba(0, 0, 0, 0.6);
      }

      html.ele-login-dark .login-wrapper .login-card {
        background: rgba(13, 15, 21, 0.6);
        box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.4);
      }

      html.ele-login-dark .login-wrapper .login-card::after {
        box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.1) inset;
      }

      html.ele-login-dark .login-wrapper .login-cover {
        filter: var(--login-img-colorize) contrast(1.02) url(#darken-image);
      }

      html.ele-login-dark .login-wrapper .login-cover::after {
        border-left-color: rgba(0, 0, 0, 0.08);
      }

      html.ele-login-dark .login-wrapper .login-background {
        filter: var(--login-img-colorize) url(#darken-image) blur(120px);
      }

      html.ele-login-dark .login-wrapper.is-left .login-image,
      html.ele-login-dark .login-wrapper.is-right .login-image {
        filter: var(--login-img-colorize) url(#darken-image);
      }

      html.ele-login-dark .login-wrapper.is-left .login-card::after {
        box-shadow: -1px 0 0 0 rgba(255, 255, 255, 0.08) inset;
      }

      html.ele-login-dark .login-wrapper.is-right .login-card::after {
        box-shadow: 1px 0 0 0 rgba(255, 255, 255, 0.08) inset;
      }

      html.ele-login-dark .login-wrapper.is-right .login-tools {
        box-shadow: 0 0 0 0.68px rgba(255, 255, 255, 0.12);
      }

      html.ele-login-dark .login-wrapper .ele-footer {
        color: rgba(255, 255, 255, 0.28);
      }

      html.ele-login-dark .login-title,
      html.ele-login-dark .login-tool {
        color: rgba(255, 255, 255, 0.9);
      }

      html.ele-login-dark .layui-btn:not(.layui-btn-primary),
      html.ele-login-dark .layui-form-checked[lay-skin='primary'] > i,
      html.ele-login-dark .auth-app-list > .auth-app-item:not(:last-child) {
        filter: invert(1) hue-rotate(192deg);
      }

      html.ele-login-dark {
        color-scheme: dark;
      }

      /* 主题切换过渡 */
      ::view-transition-old(root),
      ::view-transition-new(root),
      ::view-transition-old(body),
      ::view-transition-new(body) {
        animation: none;
        mix-blend-mode: normal;
      }

      ::view-transition-new(root),
      html.ele-login-dark::view-transition-old(root),
      html.ele-admin-weak::view-transition-old(root),
      html.ele-login-dark.ele-admin-weak::view-transition-new(root),
      ::view-transition-new(body) {
        z-index: 1;
      }

      ::view-transition-old(root),
      html.ele-login-dark::view-transition-new(root),
      html.ele-admin-weak::view-transition-new(root),
      html.ele-login-dark.ele-admin-weak::view-transition-old(root),
      ::view-transition-old(body) {
        z-index: 2147483646;
      }

      html.disabled-transition,
      html.disabled-transition * {
        transition: none !important;
      }
