:root {
    color-scheme: light;
    --admin-bg: #f4f6fa;
    --admin-card: #ffffff;
    --admin-text: #172033;
    --admin-muted: #6b7280;
    --admin-line: #e5e7eb;
    --admin-primary: #2563eb;
    --admin-primary-hover: #1d4ed8;
    --admin-danger: #dc2626;
    --admin-danger-bg: #fef2f2;
    --admin-shadow: 0 18px 50px rgba(23, 32, 51, 0.10);
}

* {
    box-sizing: border-box;
}

html,
body {
    margin: 0;
    min-height: 100%;
}

body {
    font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
}

a {
    color: inherit;
    text-decoration: none;
}

button,
input {
    font: inherit;
}

/* ---------- 前台公共结构 ---------- */

.download-page {
    --page-bg: #f5f7fb;
    --card-bg: #ffffff;
    --card-text: #172033;
    --card-muted: #6b7280;
    --button-bg: #2563eb;
    --button-text: #ffffff;
    --button-shadow: 0 12px 26px rgba(37, 99, 235, .22);
    --card-border: rgba(229, 231, 235, .95);
    --card-shadow: 0 24px 65px rgba(23, 32, 51, .12);
    --icon-radius: 28px;
    min-height: 100vh;
    color: var(--card-text);
    background: var(--page-bg);
}

.single-download-wrap {
    min-height: 100vh;
    display: grid;
    place-items: center;
    padding: 28px 18px;
    overflow: hidden;
}

.single-download-card {
    position: relative;
    width: min(460px, 100%);
    padding: 46px 34px 34px;
    overflow: hidden;
    text-align: center;
    background: var(--card-bg);
    border: 1px solid var(--card-border);
    border-radius: 30px;
    box-shadow: var(--card-shadow);
}

.app-visual,
.app-copy {
    position: relative;
    z-index: 2;
}

.single-app-icon {
    display: block;
    width: 116px;
    height: 116px;
    margin: 0 auto 23px;
    object-fit: cover;
    border-radius: var(--icon-radius);
    border: 1px solid rgba(127, 127, 127, .18);
    background: rgba(255, 255, 255, .2);
    box-shadow: 0 14px 30px rgba(23, 32, 51, .15);
}

.eyebrow {
    display: inline-block;
    margin-bottom: 8px;
    color: var(--card-muted);
    font-size: 12px;
    font-weight: 800;
    letter-spacing: .16em;
    text-transform: uppercase;
}

.single-download-card h1 {
    margin: 0;
    font-size: clamp(26px, 7vw, 36px);
    line-height: 1.2;
    word-break: break-word;
}

.single-app-meta {
    display: flex;
    justify-content: center;
    flex-wrap: wrap;
    gap: 8px 18px;
    margin: 14px 0 28px;
    color: var(--card-muted);
    font-size: 14px;
}

.single-app-meta span + span::before {
    content: "•";
    margin-right: 18px;
    opacity: .45;
}

.single-download-button {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    min-height: 56px;
    padding: 12px 20px;
    border-radius: 16px;
    color: var(--button-text);
    background: var(--button-bg);
    box-shadow: var(--button-shadow);
    font-size: 17px;
    font-weight: 850;
    transition: transform .15s ease, filter .15s ease;
}

.single-download-button:hover {
    transform: translateY(-2px);
    filter: brightness(.96);
}

.download-tip,
.empty-download p {
    margin: 18px 0 0;
    color: var(--card-muted);
    font-size: 13px;
    line-height: 1.7;
    word-break: break-all;
}

.empty-icon {
    font-size: 52px;
}

.empty-download h1 {
    margin-top: 16px;
}

.decor {
    position: absolute;
    z-index: 1;
    pointer-events: none;
}

/* 模板 1：清爽白卡 */
.download-page.template1 {
    --page-bg: radial-gradient(circle at top, rgba(37, 99, 235, .11), transparent 38%), #f7f8fb;
}

/* 模板 2：深色科技 */
.download-page.template2 {
    --page-bg:
        radial-gradient(circle at 20% 10%, rgba(56, 189, 248, .18), transparent 28%),
        radial-gradient(circle at 80% 90%, rgba(129, 140, 248, .18), transparent 30%),
        #070b14;
    --card-bg: rgba(14, 20, 34, .92);
    --card-text: #f8fafc;
    --card-muted: #94a3b8;
    --button-bg: linear-gradient(135deg, #38bdf8, #6366f1);
    --card-border: rgba(148, 163, 184, .18);
    --card-shadow: 0 28px 80px rgba(0, 0, 0, .48);
    --icon-radius: 24px;
}

.download-page.template2 .single-download-card {
    backdrop-filter: blur(16px);
}

.download-page.template2 .single-download-card::before {
    content: "";
    position: absolute;
    inset: 0;
    background-image:
        linear-gradient(rgba(148, 163, 184, .04) 1px, transparent 1px),
        linear-gradient(90deg, rgba(148, 163, 184, .04) 1px, transparent 1px);
    background-size: 22px 22px;
    pointer-events: none;
}

/* 模板 3：蓝紫渐变 */
.download-page.template3 {
    --page-bg: linear-gradient(145deg, #4f46e5, #7c3aed 55%, #ec4899);
    --card-bg: #ffffff;
    --card-text: #24164f;
    --card-muted: #756c8d;
    --button-bg: linear-gradient(135deg, #4f46e5, #9333ea);
    --card-border: rgba(255, 255, 255, .5);
    --card-shadow: 0 30px 80px rgba(49, 20, 100, .34);
}

.download-page.template3 .decor-a {
    width: 170px;
    height: 170px;
    top: -80px;
    right: -60px;
    border-radius: 50%;
    background: linear-gradient(135deg, rgba(139, 92, 246, .20), rgba(236, 72, 153, .10));
}

.download-page.template3 .decor-b {
    width: 120px;
    height: 120px;
    bottom: -65px;
    left: -45px;
    border-radius: 36px;
    transform: rotate(28deg);
    background: rgba(79, 70, 229, .08);
}

/* 模板 4：彩色玻璃 */
.download-page.template4 {
    --page-bg:
        radial-gradient(circle at 15% 20%, #fb7185 0, transparent 28%),
        radial-gradient(circle at 82% 18%, #38bdf8 0, transparent 26%),
        radial-gradient(circle at 50% 85%, #a78bfa 0, transparent 30%),
        #111827;
    --card-bg: rgba(255, 255, 255, .16);
    --card-text: #ffffff;
    --card-muted: rgba(255, 255, 255, .72);
    --button-bg: rgba(255, 255, 255, .94);
    --button-text: #111827;
    --card-border: rgba(255, 255, 255, .28);
    --card-shadow: 0 30px 90px rgba(0, 0, 0, .30);
    --icon-radius: 32px;
}

.download-page.template4 .single-download-card {
    backdrop-filter: blur(24px);
}

.download-page.template4 .single-app-icon {
    border-color: rgba(255, 255, 255, .32);
}

/* 模板 5：极简黑白 */
.download-page.template5 {
    --page-bg: #f3f3f0;
    --card-bg: transparent;
    --card-text: #111111;
    --card-muted: #666666;
    --button-bg: #111111;
    --button-text: #ffffff;
    --button-shadow: none;
    --card-border: #111111;
    --card-shadow: none;
    --icon-radius: 18px;
}

.download-page.template5 .single-download-card {
    border-width: 2px;
    border-radius: 0;
}

.download-page.template5 .single-app-icon {
    box-shadow: none;
    border-color: #111111;
    border-width: 2px;
}

.download-page.template5 .single-download-button {
    border-radius: 0;
}

/* ---------- 后台 ---------- */

.admin-page {
    min-height: 100vh;
    color: var(--admin-text);
    background: var(--admin-bg);
}

.container {
    width: min(980px, calc(100% - 32px));
    margin: 0 auto;
}

.site-header {
    padding: 26px 0;
    background: linear-gradient(135deg, #172554, #2563eb);
    color: #fff;
}

.header-inner {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 20px;
}

.header-actions {
    display: flex;
    gap: 10px;
}

.site-header h1 {
    margin: 0;
    font-size: clamp(24px, 4vw, 34px);
}

.site-header p {
    margin: 7px 0 0;
    opacity: .78;
}

.ghost-button,
.primary-button,
.danger-button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: 0;
    border-radius: 12px;
    cursor: pointer;
    font-weight: 750;
    transition: transform .15s ease, background .15s ease, opacity .15s ease;
}

.ghost-button {
    padding: 10px 14px;
    border: 1px solid rgba(255, 255, 255, .4);
    background: rgba(255, 255, 255, .1);
    color: #fff;
}

.ghost-button:hover {
    background: rgba(255, 255, 255, .18);
}

.admin-main {
    display: grid;
    gap: 22px;
    padding-top: 32px;
    padding-bottom: 50px;
}

.panel {
    padding: 24px;
    background: var(--admin-card);
    border: 1px solid var(--admin-line);
    border-radius: 20px;
    box-shadow: var(--admin-shadow);
}

.panel h2 {
    margin: 0 0 18px;
}

.panel-tip {
    margin: 5px 0 0;
    color: var(--admin-muted);
    line-height: 1.7;
}

.section-title {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 18px;
    margin-bottom: 22px;
}

.section-title h2 {
    margin-bottom: 0;
}

.status-badge {
    flex: 0 0 auto;
    padding: 6px 10px;
    border-radius: 999px;
    color: #166534;
    background: #dcfce7;
    font-size: 13px;
    font-weight: 750;
}

.narrow-panel {
    width: min(440px, 100%);
    margin: 30px auto;
}

.form-stack,
.form-grid {
    display: grid;
    gap: 18px;
}

.form-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
}

.full-width {
    grid-column: 1 / -1;
}

label,
.field-block {
    display: grid;
    gap: 8px;
}

label,
.field-label {
    font-weight: 700;
}

input[type="text"],
input[type="password"],
input[type="file"],
input[type="url"] {
    width: 100%;
    border: 1px solid #cfd5df;
    border-radius: 12px;
    background: #fff;
    padding: 12px 14px;
    color: var(--admin-text);
}

input[type="radio"] {
    width: 18px;
    height: 18px;
    margin: 2px 0 0;
    accent-color: var(--admin-primary);
}

input:focus {
    outline: 3px solid rgba(37, 99, 235, .15);
    border-color: var(--admin-primary);
}

small {
    color: var(--admin-muted);
    font-weight: 400;
    line-height: 1.55;
}

.primary-button {
    min-height: 46px;
    padding: 11px 17px;
    background: var(--admin-primary);
    color: #fff;
}

.primary-button:hover {
    background: var(--admin-primary-hover);
    transform: translateY(-1px);
}

.notice {
    padding: 14px 16px;
    border: 1px solid;
    border-radius: 12px;
}

.notice.error {
    color: #991b1b;
    background: var(--admin-danger-bg);
    border-color: #fecaca;
}

.notice.success {
    color: #166534;
    background: #f0fdf4;
    border-color: #bbf7d0;
}

.current-file,
.file-summary,
.download-source-panel {
    border: 1px solid var(--admin-line);
    border-radius: 14px;
    background: #fafbfc;
}

.current-file {
    display: flex;
    align-items: center;
    gap: 13px;
    padding: 12px;
}

.current-file > div {
    display: grid;
    gap: 4px;
}

.current-file span {
    color: var(--admin-muted);
    font-size: 13px;
}

.source-options {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 12px;
}

.source-choice {
    display: flex;
    align-items: flex-start;
    gap: 11px;
    padding: 15px;
    border: 1px solid var(--admin-line);
    border-radius: 14px;
    background: #fff;
    cursor: pointer;
}

.source-choice:has(input:checked) {
    border-color: var(--admin-primary);
    box-shadow: 0 0 0 3px rgba(37, 99, 235, .10);
}

.source-choice span {
    display: grid;
    gap: 4px;
}

.download-source-panel {
    display: grid;
    gap: 10px;
    padding: 16px;
}

.download-source-panel[hidden] {
    display: none;
}

.file-summary {
    padding: 11px 13px;
    color: var(--admin-muted);
    font-size: 14px;
    word-break: break-all;
}

.file-summary strong {
    color: var(--admin-text);
}

.admin-item {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 14px;
    border: 1px solid var(--admin-line);
    border-radius: 14px;
}

.admin-icon {
    width: 58px;
    height: 58px;
    border-radius: 13px;
    object-fit: cover;
    border: 1px solid var(--admin-line);
    background: #f3f4f6;
}

.admin-item-info {
    flex: 1;
    min-width: 0;
    display: grid;
    gap: 5px;
}

.admin-item-info strong {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.admin-item-info span {
    color: var(--admin-muted);
    font-size: 13px;
    word-break: break-all;
}

.danger-button {
    padding: 9px 12px;
    color: var(--admin-danger);
    background: var(--admin-danger-bg);
}

.danger-button:hover {
    opacity: .8;
}

/* 后台模板选择预览 */

.template-grid {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 12px;
}

.template-option {
    position: relative;
    cursor: pointer;
}

.template-option > input {
    position: absolute;
    opacity: 0;
    pointer-events: none;
}

.template-preview {
    position: relative;
    display: grid;
    place-items: center;
    height: 150px;
    overflow: hidden;
    border: 2px solid transparent;
    border-radius: 16px;
    background: #f7f8fb;
    transition: border .15s ease, transform .15s ease;
}

.template-option input:checked + .template-preview {
    border-color: var(--admin-primary);
    transform: translateY(-2px);
}

.template-preview .preview-icon {
    position: absolute;
    top: 24px;
    width: 42px;
    height: 42px;
    border-radius: 11px;
    background: #dbeafe;
}

.template-preview b,
.template-preview em,
.template-preview strong {
    position: absolute;
    left: 22%;
    right: 22%;
    display: block;
    border-radius: 999px;
}

.template-preview b {
    top: 78px;
    height: 8px;
    background: currentColor;
}

.template-preview em {
    top: 94px;
    left: 30%;
    right: 30%;
    height: 5px;
    background: currentColor;
    opacity: .35;
}

.template-preview strong {
    bottom: 18px;
    height: 22px;
    background: #2563eb;
}

.template-preview.template2 {
    color: #f8fafc;
    background: #0b1120;
}

.template-preview.template2 .preview-icon {
    background: linear-gradient(135deg, #38bdf8, #6366f1);
}

.template-preview.template2 strong {
    background: linear-gradient(135deg, #38bdf8, #6366f1);
}

.template-preview.template3 {
    color: #3b1a70;
    background: linear-gradient(145deg, #ddd6fe, #fce7f3);
}

.template-preview.template3 .preview-icon {
    background: #8b5cf6;
}

.template-preview.template3 strong {
    background: linear-gradient(135deg, #4f46e5, #9333ea);
}

.template-preview.template4 {
    color: #fff;
    background:
        radial-gradient(circle at 10% 10%, #fb7185, transparent 36%),
        radial-gradient(circle at 90% 15%, #38bdf8, transparent 35%),
        #374151;
}

.template-preview.template4 .preview-icon,
.template-preview.template4 strong {
    background: rgba(255, 255, 255, .86);
}

.template-preview.template5 {
    color: #111;
    background: #f3f3f0;
    border-radius: 0;
}

.template-preview.template5 .preview-icon {
    border: 2px solid #111;
    border-radius: 5px;
    background: transparent;
}

.template-preview.template5 strong {
    border-radius: 0;
    background: #111;
}

.template-option-name {
    display: block;
    padding-top: 8px;
    text-align: center;
    color: var(--admin-muted);
    font-size: 13px;
    font-weight: 700;
}

@media (max-width: 820px) {
    .template-grid {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }
}

@media (max-width: 640px) {
    .header-inner {
        align-items: flex-start;
        flex-direction: column;
    }

    .header-actions {
        width: 100%;
    }

    .header-actions .ghost-button {
        flex: 1;
    }

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

    .full-width {
        grid-column: auto;
    }

    .single-download-card {
        padding: 38px 24px 30px;
    }

    .section-title {
        align-items: center;
    }

    .admin-item {
        align-items: flex-start;
    }

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


.chunk-upload-status {
    display: grid;
    gap: 9px;
    padding: 13px;
    border: 1px solid var(--admin-line);
    border-radius: 13px;
    background: #f8fafc;
}

.chunk-upload-row {
    display: flex;
    justify-content: space-between;
    gap: 14px;
    color: var(--admin-muted);
    font-size: 13px;
}

.chunk-upload-row strong {
    color: var(--admin-text);
}

.chunk-upload-status progress {
    width: 100%;
    height: 12px;
}

.server-hint {
    padding: 10px 12px;
    border-radius: 11px;
    color: var(--admin-muted);
    background: #f3f4f6;
    font-size: 12px;
    line-height: 1.65;
}
