:root {
    --pink: #ff72b2;
    --pink2: #ff9ed0;
    --pink3: #ffd3e8;

    --purple: #9c83ff;
    --purple2: #c0aaff;

    --blue: #7ccfff;
    --yellow: #ffe28a;

    --text: #59465f;
    --text2: #816f87;
    --sub: #a697ab;
}


/* =========================
   Reset
========================= */

* {
    box-sizing: border-box;
    -webkit-tap-highlight-color: transparent;
}


html {
    width: 100%;
    min-height: 100%;
    background: #f9d8e9;
}


body {
    margin: 0;
    padding: 0;

    width: 100%;
    min-height: 100vh;
    min-height: 100dvh;

    overflow-x: hidden;

    color: var(--text);

    font-family:
        -apple-system,
        BlinkMacSystemFont,
        "PingFang SC",
        "Hiragino Sans GB",
        "Microsoft YaHei",
        sans-serif;

    -webkit-font-smoothing: antialiased;

    background:
        linear-gradient(
            135deg,
            #ffd5e7 0%,
            #ead9ff 48%,
            #cbeeff 100%
        );
}


/* =========================
   背景
========================= */

#serverBackground {
    position: fixed;
    inset: -18px;

    z-index: 0;

    overflow: hidden;

    pointer-events: none;
}


#serverBackground::before {
    content: "";

    position: absolute;
    inset: -20px;

    background:
        url("/background.webp")
        center / cover
        no-repeat;

    filter: blur(12px);

    transform: scale(1.05);
}


#serverBackground::after {
    content: "";

    position: absolute;
    inset: 0;

    background:
        linear-gradient(
            135deg,
            rgba(255,255,255,.08),
            rgba(255,220,237,.05),
            rgba(225,215,255,.06),
            rgba(205,237,255,.04)
        );
}


/* =========================
   页面后台
========================= */

body.page-hidden .particle,
body.page-hidden .sakura,
body.page-hidden .star,
body.page-hidden .logo,
body.page-hidden .heart {
    animation-play-state: paused !important;
}


/* =========================
   粒子
========================= */

#particles,
#sakura {
    position: fixed;
    inset: 0;

    z-index: 1;

    overflow: hidden;

    pointer-events: none;

    contain: strict;
}


.particle {
    position: absolute;
    bottom: -30px;

    width: 5px;
    height: 5px;

    border-radius: 50%;

    background: rgba(255,255,255,.75);

    box-shadow:
        0 0 5px rgba(255,255,255,.65);

    animation:
        particleUp
        linear
        infinite;

    will-change: transform, opacity;
}


@keyframes particleUp {

    0% {
        transform:
            translate3d(0,0,0)
            scale(.5);

        opacity: 0;
    }

    12% {
        opacity: .8;
    }

    50% {
        transform:
            translate3d(25px,-50vh,0)
            scale(.9);
    }

    90% {
        opacity: .45;
    }

    100% {
        transform:
            translate3d(60px,-115vh,0)
            scale(1.2);

        opacity: 0;
    }
}


/* =========================
   樱花
========================= */

.sakura {
    position: absolute;
    top: -30px;

    width: 12px;
    height: 9px;

    background:
        linear-gradient(
            135deg,
            #fff,
            #ff9fc9
        );

    border-radius:
        80% 20% 80% 20%;

    opacity: .75;

    animation:
        sakuraFall
        linear
        infinite;

    will-change: transform;
}


@keyframes sakuraFall {

    0% {
        transform:
            translate3d(0,-20px,0)
            rotate(0deg);
    }

    25% {
        transform:
            translate3d(28px,25vh,0)
            rotate(70deg);
    }

    50% {
        transform:
            translate3d(-20px,50vh,0)
            rotate(150deg);
    }

    75% {
        transform:
            translate3d(32px,75vh,0)
            rotate(230deg);
    }

    100% {
        transform:
            translate3d(-15px,110vh,0)
            rotate(310deg);
    }
}


/* =========================
   星星
========================= */

.star {
    position: fixed;

    z-index: 1;

    pointer-events: none;

    color: #fff;

    font-size: 17px;

    text-shadow:
        0 0 6px rgba(255,255,255,.8);

    animation:
        twinkle
        6s
        ease-in-out
        infinite;

    will-change: transform, opacity;
}


@keyframes twinkle {

    0%,
    100% {
        opacity: .3;

        transform:
            scale(.8)
            rotate(0deg);
    }

    50% {
        opacity: .9;

        transform:
            scale(1.15)
            rotate(30deg);
    }
}


/* =========================
   气泡
========================= */

.bubble {
    position: fixed;

    z-index: 0;

    width: 45px;
    height: 45px;

    border-radius: 50%;

    border:
        1px solid
        rgba(255,255,255,.35);

    box-shadow:
        inset
        2px 2px 5px
        rgba(255,255,255,.2);

    pointer-events: none;
}


/* =========================
   爱心
========================= */

.heart {
    position: fixed;

    z-index: 9999;

    pointer-events: none;

    font-size: 20px;

    transform:
        translate(-50%,-50%);

    animation:
        heartFloat
        .9s
        ease-out
        forwards;

    will-change:
        transform,
        opacity;
}


@keyframes heartFloat {

    0% {
        opacity: 1;

        transform:
            translate(-50%,-50%)
            scale(.4)
            rotate(-10deg);
    }

    60% {
        opacity: 1;
    }

    100% {
        opacity: 0;

        transform:
            translate(
                calc(-50% + var(--x)),
                calc(-50% - 90px)
            )
            scale(1.35)
            rotate(20deg);
    }
}


/* =========================
   页面
========================= */

.page {
    position: relative;

    z-index: 5;

    width: 100%;
    max-width: 540px;

    min-height: 100vh;
    min-height: 100dvh;

    margin: auto;

    padding:
        24px
        14px
        calc(30px + env(safe-area-inset-bottom));
}


/* =========================
   Header
========================= */

.header {
    position: relative;

    text-align: center;

    padding:
        12px
        10px
        8px;
}


/* =========================
   Logo
========================= */

.logo {
    position: relative;

    width: 94px;
    height: 94px;

    margin:
        0 auto 14px;

    display: flex;

    align-items: center;
    justify-content: center;

    border-radius: 30px;

    background:
        linear-gradient(
            135deg,
            rgba(255,114,174,.75),
            rgba(178,138,255,.65) 60%,
            rgba(121,215,255,.65)
        );

    border:
        3px solid
        rgba(255,255,255,.5);

    box-shadow:
        0 12px 30px
        rgba(214,91,163,.15),

        0 0 0 5px
        rgba(255,255,255,.06),

        inset
        0 1px 0
        rgba(255,255,255,.4);

    animation:
        logoFloat
        6s
        ease-in-out
        infinite;

    will-change: transform;

    overflow: visible;
}


.logo-image {
    position: relative;

    z-index: 2;

    width: 100%;
    height: 100%;

    display: block;

    object-fit: cover;

    border-radius: inherit;

    user-select: none;

    -webkit-user-drag: none;
}


.logo::before {
    content: "";

    position: absolute;

    width: 14px;
    height: 14px;

    top: -7px;
    left: 10px;

    z-index: 3;

    border-radius: 50%;

    background: #fff;

    opacity: .6;

    pointer-events: none;
}


.logo::after {
    content: "✦";

    position: absolute;

    top: -18px;
    right: -14px;

    z-index: 4;

    color: #fff;

    font-size: 24px;

    text-shadow:
        0 0 8px
        rgba(255,255,255,.8);

    animation:
        twinkle
        5s
        infinite;

    pointer-events: none;
}


@keyframes logoFloat {

    0%,
    100% {
        transform:
            translateY(0)
            rotate(-2deg);
    }

    50% {
        transform:
            translateY(-6px)
            rotate(2deg);
    }
}


/* =========================
   微信入口
   Logo 右侧并明显错开
========================= */

.header-wechat-entry {
    position: absolute;

    left: calc(50% + 90px);

    top: 62px;

    width: 122px;
    height: 42px;
    min-height: 42px;

    margin: 0;
    padding: 0 12px;

    display: flex;

    align-items: center;
    justify-content: center;

    gap: 6px;

    border:
        1px solid
        rgba(255,255,255,.42);

    border-radius: 15px;

    background:
        linear-gradient(
            135deg,
            rgba(7,193,96,.18),
            rgba(39,211,106,.10)
        );

    box-shadow:
        0 5px 14px
        rgba(7,193,96,.08),

        inset
        0 1px 0
        rgba(255,255,255,.35);

    color: #fff;

    font-size: 12px;

    font-weight: 900;

    line-height: 1;

    text-shadow:
        0 1px 3px
        rgba(0,80,40,.18);

    white-space: nowrap;

    z-index: 20;
}


.header-wechat-entry:active {
    transform: scale(.96);
}


.wechat-icon {
    display: inline-flex;

    flex: 0 0 auto;

    width: 17px;
    height: 17px;

    align-items: center;
    justify-content: center;

    border-radius: 5px;

    background: #fff;

    color: #07c160;

    font-size: 11px;

    line-height: 1;

    text-shadow: none;
}


/* =========================
   APP 展示
========================= */

.app-showcase {
    position: relative;

    width: 100%;

    margin:
        2px auto 14px;

    display: flex;

    gap: 10px;

    overflow-x: auto;
    overflow-y: hidden;

    padding:
        4px
        4px
        8px;

    -webkit-overflow-scrolling: touch;

    scrollbar-width: none;

    overscroll-behavior-x: contain;

    scroll-behavior: auto;

    touch-action: pan-x;

    scroll-snap-type: none;

    cursor: grab;
}


.app-showcase:active {
    cursor: grabbing;
}


.app-showcase::-webkit-scrollbar {
    display: none;
}


.app-showcase img {
    pointer-events: none;

    user-select: none;

    -webkit-user-select: none;

    -webkit-user-drag: none;
}


.app-showcase-card {
    position: relative;

    flex: 0 0 105px;

    min-height: 135px;

    padding:
        8px
        5px;

    display: flex;

    flex-direction: column;

    align-items: center;
    justify-content: center;

    gap: 7px;

    border: none;

    background: transparent;

    box-shadow: none;

    color: #fff;

    transition:
        transform .15s ease;

    user-select: none;

    -webkit-user-select: none;
}


.app-showcase-card:active {
    transform: scale(.96);
}


.app-showcase-icon {
    width: 70px;
    height: 70px;

    border-radius: 19px;

    object-fit: cover;

    box-shadow:
        0 5px 12px
        rgba(70,40,100,.15),

        0 0 0 2px
        rgba(255,255,255,.4);

    pointer-events: none;
}


.app-showcase-name {
    color: #fff;

    font-size: 12px;

    font-weight: 900;

    white-space: nowrap;

    text-shadow:
        0 2px 5px
        rgba(70,40,90,.35);
}


/* =========================
   主卡片
========================= */

.box {
    position: relative;

    padding:
        20px
        17px
        30px;

    border-radius: 30px;

    border:
        1px solid
        rgba(255,255,255,.25);

    overflow: hidden;

    contain: paint;
}


.box::before,
.box::after {
    content: "";

    position: absolute;

    border-radius: 50%;

    pointer-events: none;
}


.box::before {
    width: 180px;
    height: 180px;

    right: -90px;
    top: -90px;

    background:
        radial-gradient(
            circle,
            rgba(255,132,193,.08),
            transparent 70%
        );
}


.box::after {
    width: 150px;
    height: 150px;

    left: -75px;
    bottom: -75px;

    background:
        radial-gradient(
            circle,
            rgba(139,190,255,.07),
            transparent 70%
        );
}


/* =========================
   标题
========================= */

.section-title {
    position: relative;

    display: flex;

    align-items: center;

    gap: 8px;

    margin:
        9px
        0
        10px;

    color: #fff;

    font-size: 14px;

    font-weight: 900;

    text-shadow:
        0 2px 7px
        rgba(70,40,90,.35);
}


.section-title::before {
    content: "";

    width: 6px;
    height: 20px;

    flex: none;

    border-radius: 20px;

    background:
        linear-gradient(
            180deg,
            #ff73b4,
            #a78cff,
            #78d7ff
        );

    box-shadow:
        0 0 8px
        rgba(255,255,255,.25);
}


.section-title::after {
    content: "✦";

    margin-left: auto;

    color:
        rgba(255,255,255,.7);

    font-size: 12px;
}


/* =========================
   上传
========================= */

.upload-box {
    position: relative;

    margin-top: 12px;

    padding: 15px;
}


input[type="file"] {
    width: 100%;

    min-height: 44px;

    padding: 9px;

    border:
        1px solid
        rgba(255,255,255,.35);

    border-radius: 14px;

    background: transparent;

    font-size: 12px;

    color: #fff;
}


.filename {
    margin-top: 8px;

    color:
        rgba(255,255,255,.82);

    font-size: 11px;

    line-height: 1.5;

    word-break: break-all;

    text-shadow:
        0 2px 5px
        rgba(70,40,90,.3);
}


/* =========================
   密码
========================= */

input[type="password"] {
    width: 100%;

    height: 50px;

    padding:
        0
        15px;

    border:
        1px solid
        rgba(255,255,255,.35);

    border-radius: 16px;

    outline: none;

    background: transparent;

    color: #fff;

    font-size: 14px;
}


input[type="password"]:focus {
    border-color:
        rgba(255,255,255,.75);

    background:
        rgba(255,255,255,.04);

    box-shadow:
        0 0 0 3px
        rgba(255,126,179,.08);
}


input::placeholder {
    color:
        rgba(255,255,255,.7);
}


/* =========================
   UDID 一键签名输入框（复用密码框风格）
   说明：桌面端字号 14px；移动端在下方 600px 媒体查询里加大到 16px，
   目的是和三个小按钮视觉平衡，同时防止 iOS 聚焦时自动放大页面。
========================= */

input[type="text"]#autoUdid {
    width: 100%;

    height: 50px;

    padding:
        0
        15px;

    border:
        1px solid
        rgba(255,255,255,.35);

    border-radius: 16px;

    outline: none;

    background: transparent;

    color: #fff;

    font-size: 14px;

    font-family: monospace;
}


input[type="text"]#autoUdid:focus {
    border-color:
        rgba(255,255,255,.75);

    background:
        rgba(255,255,255,.04);

    box-shadow:
        0 0 0 3px
        rgba(255,126,179,.08);
}


/* =========================
   Button
========================= */

button {
    position: relative;

    overflow: hidden;

    width: 100%;

    min-height: 48px;

    border: 0;

    border-radius: 17px;

    font-family: inherit;

    color: #fff;

    font-size: 15px;

    font-weight: 900;

    cursor: pointer;

    transition:
        transform .12s ease,
        box-shadow .15s ease;

    touch-action: manipulation;
}


button:active {
    transform: scale(.97);
}


button:disabled {
    opacity: .5;

    cursor: not-allowed;
}


/* =========================
   Lcsign
========================= */

.lcsign-btn {
    background:
        linear-gradient(
            135deg,
            rgba(255,118,178,.78),
            rgba(255,147,200,.72)
        );

    box-shadow:
        0 8px 18px
        rgba(255,105,170,.12),

        inset
        0 1px 0
        rgba(255,255,255,.4);
}


/* =========================
   UDID 一键签名：独立样式（不借用 .install-options）
========================= */

.auto-options {
    position: relative;

    display: grid;

    grid-template-columns:
        repeat(3,minmax(0,1fr));

    gap: 8px;

    margin-top: 10px;
}


.auto-options .app-install-btn {
    min-height: 56px;

    padding:
        10px
        4px;

    gap: 0;

    font-size: 13px;
}


.auto-options .app-install-name {
    font-size: 13px;

    white-space: nowrap;

    overflow: hidden;

    text-overflow: ellipsis;
}


/* iOS Safari 上 backdrop-filter 会把这几个小按钮渲染花，直接关掉 */
@supports (-webkit-touch-callout:none) {

    .auto-options .app-install-btn {
        -webkit-backdrop-filter: none;

        backdrop-filter: none;
    }

}


/* 小屏收窄：按钮字号和高度再缩一点，避免文字被截断 */
@media (max-width:380px) {

    input[type="text"]#autoUdid {
        height: 52px;

        font-size: 15px;
    }


    .auto-options {
        gap: 6px;
    }


    .auto-options .app-install-btn {
        min-height: 52px;

        padding:
            8px
            2px;

        font-size: 12px;
    }


    .auto-options .app-install-name {
        font-size: 12px;

        letter-spacing: 0;
    }

}


/* =========================
   APP 安装
========================= */

.install-options {
    position: relative;

    display: grid;

    grid-template-columns:
        repeat(2,minmax(0,1fr));

    gap: 12px;

    margin-top: 15px;
}


.app-install-btn {
    min-height: 165px;

    padding:
        17px
        9px
        15px;

    display: flex;

    flex-direction: column;

    align-items: center;
    justify-content: center;

    gap: 10px;

    color: #fff;

    border:
        1px solid
        rgba(255,255,255,.35);

    border-radius: 25px;

    background: transparent;

    box-shadow: none;

    text-shadow:
        0 2px 5px
        rgba(70,40,90,.35);
}


.app-install-btn.qnq {
    background:
        linear-gradient(
            135deg,
            rgba(167,139,255,.16),
            rgba(124,207,255,.12)
        );
}


.app-install-icon {
    position: relative;

    z-index: 2;

    width: 76px;
    height: 76px;

    flex: none;

    object-fit: cover;

    border-radius: 21px;

    box-shadow:
        0 7px 18px
        rgba(80,50,100,.12),

        0 0 0 2px
        rgba(255,255,255,.4);
}


.app-install-name {
    position: relative;

    z-index: 2;

    margin: 0;

    color: #fff;

    font-size: 16px;

    line-height: 1.2;

    font-weight: 900;
}


/* =========================
   微信弹窗
========================= */

.wechat-modal {
    position: fixed;

    inset: 0;

    z-index: 20000;

    display: none;

    align-items: center;
    justify-content: center;

    padding: 20px;

    background:
        rgba(25,15,35,.55);

    -webkit-backdrop-filter: blur(8px);

    backdrop-filter: blur(8px);

    opacity: 0;

    transition:
        opacity .18s ease;
}


.wechat-modal.show {
    display: flex;

    opacity: 1;
}


.wechat-dialog {
    position: relative;

    width:
        min(92vw,390px);

    max-height:
        calc(100dvh - 40px);

    overflow: auto;

    padding:
        24px
        22px
        20px;

    border:
        1px solid
        rgba(255,255,255,.7);

    border-radius: 28px;

    background:
        rgba(255,255,255,.96);

    box-shadow:
        0 25px 70px
        rgba(45,20,60,.28),

        0 0 0 1px
        rgba(255,255,255,.35);

    text-align: center;

    transform:
        translateY(10px)
        scale(.98);

    transition:
        transform .2s ease;
}


.wechat-modal.show .wechat-dialog {
    transform:
        translateY(0)
        scale(1);
}


.wechat-close {
    position: absolute;

    top: 10px;
    right: 10px;

    width: 38px;

    min-height: 38px;

    border-radius: 50%;

    background:
        rgba(100,90,110,.08);

    color: #766c7d;

    font-size: 25px;

    font-weight: 400;

    line-height: 1;
}


.wechat-title {
    margin:
        2px
        38px
        5px;

    color: #493b50;

    font-size: 22px;

    font-weight: 900;
}


.wechat-subtitle {
    margin-bottom: 14px;

    color: #9b919f;

    font-size: 13px;
}


.wechat-qr-wrap {
    width:
        min(78vw,310px);

    margin: 0 auto;

    padding: 8px;

    border-radius: 18px;

    background: #fff;

    box-shadow:
        0 7px 22px
        rgba(70,45,80,.10);
}


.wechat-qr {
    display: block;

    width: 100%;
    height: auto;

    border-radius: 10px;
}


.wechat-id {
    margin:
        13px
        0
        14px;

    color: #07a950;

    font-size: 20px;

    font-weight: 900;

    letter-spacing: .4px;
}


.wechat-actions {
    display: grid;

    grid-template-columns:
        1fr
        1fr;

    gap: 10px;
}


.wechat-action {
    min-height: 46px;

    border-radius: 15px;

    font-size: 13px;

    font-weight: 900;
}


.wechat-open {
    background: #07c160;

    box-shadow:
        0 7px 16px
        rgba(7,193,96,.18);
}


.wechat-copy {
    border:
        1px solid
        #7ccfff;

    background: #fff;

    color: #1684e8;
}


.wechat-tip {
    margin-top: 12px;

    color: #aaa1af;

    font-size: 11px;
}


body.wechat-opened {
    overflow: hidden;
}


/* =========================
   软件源
========================= */

.source-box {
    position: relative;

    margin-top: 15px;
}


.source-main-btn {
    background:
        linear-gradient(
            135deg,
            rgba(167,139,255,.75),
            rgba(124,207,255,.7)
        );

    box-shadow:
        0 8px 18px
        rgba(137,116,230,.12),

        inset
        0 1px 0
        rgba(255,255,255,.4);
}


.source-options {
    display: grid;

    grid-template-columns:
        repeat(2,minmax(0,1fr));

    gap: 10px;

    margin-top: 10px;

    animation:
        sourceShow
        .2s
        ease-out;
}


.source-options.hidden {
    display: none;
}


.source-option {
    min-height: 58px;

    color: #fff;

    border:
        1px solid
        rgba(255,255,255,.35);

    border-radius: 17px;

    background: transparent;

    font-size: 13px;

    font-weight: 900;
}


.source-option.lcsign {
    background:
        rgba(255,190,220,.08);
}


.source-option.qnq {
    background:
        rgba(190,210,255,.08);
}


.source-option:active {
    transform: scale(.96);
}


@keyframes sourceShow {

    from {
        opacity: 0;

        transform:
            translateY(-5px);
    }

    to {
        opacity: 1;

        transform:
            translateY(0);
    }
}


/* =========================
   UDID
========================= */

#udidMsg {
    margin-top: 10px;

    color:
        rgba(255,255,255,.82);

    font-size: 11px;

    line-height: 1.7;

    text-shadow:
        0 2px 5px
        rgba(70,40,90,.3);
}


.udid-success {
    margin-top: 12px;

    padding: 16px;

    border-radius: 20px;

    background: transparent;

    border:
        1px solid
        rgba(255,255,255,.35);
}


.udid-success-title {
    color: #fff;

    font-weight: 900;
}


.udid-row {
    margin: 7px 0;

    font-size: 12px;

    color: #fff;
}


.udid-value {
    display: block;

    margin-top: 5px;

    padding: 9px;

    border-radius: 11px;

    background: transparent;

    border:
        1px solid
        rgba(255,255,255,.3);

    color: #fff;

    font-family:
        ui-monospace,
        SFMono-Regular,
        Menlo,
        monospace;

    word-break: break-all;
}


/* =========================
   Progress
========================= */

.progress-box {
    margin-top: 17px;

    padding: 15px;

    border-radius: 20px;

    background: transparent;

    border:
        1px solid
        rgba(255,255,255,.3);
}


.progress-item {
    position: relative;

    padding: 10px 0;

    color:
        rgba(255,255,255,.65);

    font-size: 13px;

    text-shadow:
        0 2px 5px
        rgba(70,40,90,.3);
}


.progress-item.active {
    color: #fff;

    font-weight: 900;
}


.progress-item.done {
    color: #d8ffe9;

    font-weight: 700;
}


.progress-app-icon {
    width: 25px;
    height: 25px;

    display: inline-block;

    vertical-align: middle;

    margin-right: 7px;

    border-radius: 7px;

    object-fit: cover;
}


/* =========================
   成功
========================= */

.success-card {
    position: relative;

    margin-top: 17px;

    padding:
        23px
        15px
        20px;

    border-radius: 24px;

    background: transparent;

    text-align: center;

    border:
        1px solid
        rgba(255,255,255,.3);

    overflow: hidden;
}


.success-icon {
    position: relative;

    z-index: 2;

    font-size: 52px;
}


.app-icon {
    position: relative;

    z-index: 2;

    width: 84px;
    height: 84px;

    margin:
        10px
        auto
        12px;

    display: block;

    border-radius: 22px;

    object-fit: cover;

    box-shadow:
        0 8px 20px
        rgba(80,50,100,.12),

        0 0 0 2px
        rgba(255,255,255,.5);
}


.app-name {
    position: relative;

    z-index: 2;

    font-size: 21px;

    font-weight: 900;

    color: #fff;

    text-shadow:
        0 2px 7px
        rgba(70,40,90,.35);
}


.bundle {
    position: relative;

    z-index: 2;

    margin-top: 5px;

    color:
        rgba(255,255,255,.75);

    font-size: 11px;

    word-break: break-all;
}


.install-btn {
    margin-top: 18px;

    background:
        linear-gradient(
            135deg,
            rgba(255,111,174,.8),
            rgba(154,123,255,.78)
        );

    box-shadow:
        0 10px 22px
        rgba(194,105,206,.15);
}


.download-btn {
    display: block;

    margin-top: 14px;

    color: #fff;

    text-decoration: none;

    font-size: 12px;

    font-weight: 700;

    text-shadow:
        0 2px 5px
        rgba(70,40,90,.35);
}


/* =========================
   安装弹窗
========================= */

.install-overlay {
    position: fixed;

    inset: 0;

    z-index: 99999;

    display: flex;

    align-items: center;
    justify-content: center;

    padding: 20px;

    background:
        rgba(80,55,95,.25);
}


.install-modal {
    width:
        min(330px,90vw);

    padding:
        26px
        20px
        22px;

    border-radius: 28px;

    text-align: center;

    background:
        rgba(255,255,255,.12);

    border:
        1px solid
        rgba(255,255,255,.45);

    box-shadow:
        0 20px 50px
        rgba(80,50,100,.16);

    backdrop-filter: blur(8px);

    -webkit-backdrop-filter: blur(8px);
}


.install-modal-icon {
    width: 68px;
    height: 68px;

    margin:
        0
        auto
        12px;

    display: flex;

    align-items: center;
    justify-content: center;

    border-radius: 22px;

    background:
        linear-gradient(
            135deg,
            rgba(255,118,178,.75),
            rgba(165,138,255,.7),
            rgba(121,215,255,.65)
        );

    font-size: 34px;
}


.install-modal-title {
    color: #fff;

    font-size: 20px;

    font-weight: 900;
}


.install-modal-text {
    margin-top: 9px;

    color:
        rgba(255,255,255,.82);

    font-size: 13px;

    line-height: 1.8;
}


.install-modal-tip {
    margin-top: 14px;

    padding:
        11px
        13px;

    border-radius: 16px;

    color: #fff;

    background:
        rgba(255,255,255,.08);

    border:
        1px solid
        rgba(255,255,255,.25);

    font-size: 12px;

    line-height: 1.6;

    font-weight: 800;
}


.install-modal-loading {
    width: 34px;
    height: 34px;

    margin:
        17px
        auto
        0;

    border-radius: 50%;

    border:
        3px solid
        rgba(255,255,255,.2);

    border-top-color: #ff72b2;

    border-right-color: #9c83ff;

    animation:
        installLoading
        .9s
        linear
        infinite;
}


@keyframes installLoading {

    to {
        transform: rotate(360deg);
    }
}


/* =========================
   Toast
========================= */

.cute-toast {
    position: fixed;

    z-index: 100000;

    left: 50%;

    bottom:
        calc(
            30px +
            env(safe-area-inset-bottom)
        );

    transform:
        translateX(-50%);

    padding:
        11px
        18px;

    border-radius: 999px;

    color: #fff;

    background:
        rgba(80,60,100,.5);

    border:
        1px solid
        rgba(255,255,255,.35);

    box-shadow:
        0 10px 28px
        rgba(90,60,110,.15);

    font-size: 12px;

    font-weight: 800;

    white-space: nowrap;

    transition:
        opacity .3s ease,
        transform .3s ease;
}


/* =========================
   Footer
========================= */

#msg {
    position: relative;

    margin-top: 16px;

    text-align: center;

    color: #fff;

    font-size: 12px;

    text-shadow:
        0 2px 6px
        rgba(70,40,90,.35);
}


.footer {
    padding:
        18px
        0
        5px;

    text-align: center;

    color:
        rgba(255,255,255,.9);

    font-size: 10px;

    background: transparent;
}


.footer-heart {
    color: #ff6da9;
}


.rainbow-line {
    position: absolute;

    left: 12%;
    right: 12%;

    bottom: -1px;

    height: 3px;

    border-radius: 99px;

    background:
        linear-gradient(
            90deg,
            #ff80b8,
            #ffa6d2,
            #a88cff,
            #7ed5ff,
            #ff80b8
        );

    opacity: .7;
}


/* =========================
   Mobile
========================= */

@media (max-width:600px) {

    .page {
        max-width: 100%;

        padding:
            12px
            10px
            calc(
                24px +
                env(safe-area-inset-bottom)
            );
    }


    .header {
        padding:
            12px
            8px
            6px;
    }


    .logo {
        width: 80px;
        height: 80px;

        border-radius: 25px;

        margin-bottom: 10px;
    }


    /* =========================
       手机端微信入口
       Logo 右侧明显错开
    ========================== */

    .header-wechat-entry {
        left: calc(50% + 78px);

        top: 54px;

        width: 116px;
        height: 40px;
        min-height: 40px;

        padding:
            0
            10px;

        border-radius: 14px;

        font-size: 11px;

        gap: 5px;
    }


    .wechat-icon {
        width: 16px;
        height: 16px;

        font-size: 10px;
    }


    .app-showcase {
        margin-top: 0;

        gap: 9px;

        padding:
            3px
            3px
            7px;
    }


    .app-showcase-card {
        flex-basis: 100px;

        min-height: 130px;

        padding:
            6px
            4px;
    }


    .app-showcase-icon {
        width: 65px;
        height: 65px;

        border-radius: 18px;
    }


    .app-showcase-name {
        font-size: 11px;
    }


    .box {
        padding:
            17px
            13px
            25px;

        border-radius: 25px;
    }


    .app-install-btn {
        min-height: 145px;

        padding:
            14px
            7px;

        border-radius: 21px;
    }


    .app-install-icon {
        width: 65px;
        height: 65px;

        border-radius: 18px;
    }


    .app-install-name {
        font-size: 14px;
    }


    input[type="password"] {
        height: 48px;
    }


    /* UDID 输入框：移动端加高、字号放大（同时防 iOS 聚焦自动缩放） */
    input[type="text"]#autoUdid {
        height: 54px;

        font-size: 16px;
    }


    /* 三个小按钮在移动端与输入框视觉平衡：一排三个、矮一点 */
    .auto-options {
        gap: 8px;
    }


    .auto-options .app-install-btn {
        min-height: 54px;

        padding:
            10px
            4px;

        border-radius: 16px;
    }


    .auto-options .app-install-name {
        font-size: 13px;
    }


    .bubble {
        display: none;
    }


    #particles {
        opacity: .55;
    }


    #serverBackground::before {
        filter: blur(10px);

        transform: scale(1.04);
    }


    #serverBackground::after {
        background:
            linear-gradient(
                135deg,
                rgba(255,255,255,.06),
                rgba(255,220,237,.04),
                rgba(225,215,255,.05),
                rgba(205,237,255,.03)
            );
    }
}


/* =========================
   微信
========================= */

@media (max-width:420px) {

    .wechat-dialog {
        padding:
            20px
            16px
            17px;

        border-radius: 24px;
    }


    .wechat-qr-wrap {
        width:
            min(78vw,285px);
    }


    .wechat-title {
        font-size: 20px;
    }
}


/* =========================
   小屏 APP 单列
========================= */

@media (max-width:350px) {

    .install-options,
    .source-options {
        grid-template-columns: 1fr;
    }


    .header-wechat-entry {
        left: calc(50% + 68px);

        width: 108px;

        font-size: 10px;
    }
}


/* =========================
   Reduced Motion
========================= */

@media (prefers-reduced-motion: reduce) {

    *,
    *::before,
    *::after {
        animation: none !important;

        transition: none !important;

        scroll-behavior: auto !important;
    }
}


/* =========================
   iOS
========================= */

@supports (-webkit-touch-callout:none) {

    @media (max-width:600px) {

        .box,
        .app-install-btn {
            -webkit-backdrop-filter: none !important;

            backdrop-filter: none !important;
        }


        .particle,
        .sakura,
        .heart,
        .logo,
        .star {
            filter: none !important;
        }
    }
}