/* ============================================================
   LibreTV 全局样式 - 重构版 (Safari 兼容)
   ============================================================ */

@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap');

:root {
    --bg-primary:   #0a0a0f;
    --bg-secondary: #111118;
    --bg-card:      #16161f;
    --bg-glass:     rgba(255,255,255,0.04);
    --accent:       #e50914;
    --accent-h:     #c8000b;
    --text-1:       #f1f1f1;
    --text-2:       #a0a0b0;
    --text-3:       #5a5a6e;
    --border:       rgba(255,255,255,0.07);
    --border-h:     rgba(255,255,255,0.18);

    /* Legacy compat */
    --primary-color: #e50914;
    --primary-light: #ff6b35;
    --secondary-color: #0a0a0f;
    --accent-color: #ff6b35;
    --text-color: #f1f1f1;
    --text-muted: #a0a0b0;
    --border-color: rgba(255,255,255,0.07);
    --page-gradient-start: #0a0a0f;
    --page-gradient-end: #0d0d14;
    --card-gradient-start: #16161f;
    --card-gradient-end: #1a1a26;
    --card-accent: rgba(229,9,20,0.08);
    --card-hover-border: rgba(229,9,20,0.5);
}

*, *::before, *::after { -webkit-box-sizing: border-box; box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }

body {
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
    background-color: var(--bg-primary);
    color: var(--text-1);
    line-height: 1.6;
    margin: 0;
    padding: 0;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

/* ── Scrollbar ─────────────────────────────────────────────── */
::-webkit-scrollbar { width: 5px; height: 5px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.1); border-radius: 99px; }
::-webkit-scrollbar-thumb:hover { background: rgba(255,255,255,0.2); }

/* ── Page background ───────────────────────────────────────── */
.page-bg {
    background-color: var(--bg-primary);
    min-height: 100vh;
    background-image: -webkit-radial-gradient(50% -10%, ellipse 80% 50%, rgba(229,9,20,0.08) 0%, transparent 60%);
    background-image:         radial-gradient(ellipse 80% 50% at 50% -10%, rgba(229,9,20,0.08) 0%, transparent 60%);
}

/* ── Gradient text ─────────────────────────────────────────── */
.gradient-text {
    background: -webkit-linear-gradient(135deg, #e50914, #ff6b35);
    background:         linear-gradient(135deg, #e50914, #ff6b35);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
}

/* ── Panel base ─────────────────────────────────────────────── */
.bg-panel  { background-color: var(--bg-secondary) !important; }
.border-panel { border-color: var(--border) !important; }

/* ── Panel layout helpers ───────────────────────────────────── */
.panel-header {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    -webkit-box-pack: justify;
    -ms-flex-pack: justify;
    justify-content: space-between;
    padding: 1.25rem 1.5rem 1rem;
    border-bottom: 1px solid var(--border);
}
.panel-title {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    font-size: .875rem;
    font-weight: 700;
    color: var(--text-1);
}
.panel-title svg { margin-right: .5rem; }

.history-list {
    overflow-y: auto;
    overflow-x: hidden;
    padding: .75rem 1.25rem;
    max-height: calc(100vh - 140px);
    -webkit-overflow-scrolling: touch;
}
.panel-footer {
    padding: .75rem 1.25rem 1rem;
    border-top: 1px solid var(--border);
    background-color: var(--bg-secondary);
}
.empty-tip {
    text-align: center;
    color: var(--text-3);
    padding: 2.5rem 0;
    font-size: .875rem;
}

.settings-body {
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    height: calc(100% - 61px);
    padding: 1rem 1.25rem 2rem;
}
.settings-section {
    background: rgba(255,255,255,0.03);
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 1rem;
    margin-bottom: 1rem;
}
.settings-section-label {
    display: block;
    font-size: .7rem;
    font-weight: 700;
    color: var(--text-3);
    text-transform: uppercase;
    letter-spacing: .08em;
    margin-bottom: .75rem;
}
.settings-section-header {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    -webkit-box-pack: justify;
    -ms-flex-pack: justify;
    justify-content: space-between;
    margin-bottom: .75rem;
}
.settings-meta {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-pack: justify;
    -ms-flex-pack: justify;
    justify-content: space-between;
    font-size: .75rem;
    color: var(--text-3);
}
.settings-scroll-box {
    max-height: 16rem;
    overflow-y: auto;
    background: rgba(0,0,0,0.2);
    border-radius: 8px;
    padding: .5rem;
    margin-bottom: .75rem;
}
.settings-btn-row {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    margin-bottom: .75rem;
}
.settings-btn-row button + button { margin-left: .5rem; }
.settings-form-box {
    margin-top: .5rem;
    padding: .75rem;
    background: rgba(0,0,0,0.25);
    border-radius: 12px;
}
.settings-input {
    width: 100%;
    background: rgba(255,255,255,0.04);
    border: 1px solid rgba(255,255,255,0.09);
    border-radius: 8px;
    color: var(--text-1);
    padding: .4rem .75rem;
    font-size: .825rem;
    font-family: inherit;
    margin-bottom: .5rem;
    outline: none;
    -webkit-appearance: none;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
    display: block;
}
.settings-input:focus { border-color: rgba(229,9,20,0.4); }

#apiCheckboxes {
    display: flex;
    flex-direction: column;
    grid-gap: .75rem;
    gap: .75rem;
}
.api-group-shell {
    padding: .7rem;
    border-radius: 12px;
    background: rgba(255,255,255,0.025);
    border: 1px solid rgba(255,255,255,0.06);
}
.api-group-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    grid-gap: .75rem;
    gap: .75rem;
    margin-bottom: .65rem;
}
.api-group-title {
    font-size: .78rem;
    font-weight: 600;
    color: var(--text-1);
    line-height: 1.4;
}
.api-group-title.adult {
    color: #f9a8d4;
}
.api-group-desc {
    margin-top: .2rem;
    font-size: .68rem;
    color: var(--text-3);
    line-height: 1.55;
}
.api-group-badge {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 4.25rem;
    padding: .16rem .55rem;
    border-radius: 999px;
    font-size: .64rem;
    font-weight: 600;
    color: #ffd0d0;
    background: rgba(229,9,20,0.14);
    border: 1px solid rgba(229,9,20,0.22);
}
.api-group-badge.secondary {
    color: var(--text-3);
    background: rgba(255,255,255,0.05);
    border-color: rgba(255,255,255,0.08);
}
.api-group-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    grid-gap: .45rem;
    gap: .45rem;
}
.api-checkbox-item {
    display: flex;
    align-items: center;
    grid-gap: .42rem;
    gap: .42rem;
    min-width: 0;
    padding: .42rem .48rem;
    border-radius: 10px;
    background: rgba(0,0,0,0.18);
    border: 1px solid rgba(255,255,255,0.05);
}
.api-checkbox-item label {
    flex: 1;
    min-width: 0;
}
.api-checkbox-item.is-default-recommended,
.custom-api-item.is-default-recommended {
    border-color: rgba(245, 158, 11, .62);
    background: rgba(245, 158, 11, .1);
    box-shadow: inset 3px 0 0 #f59e0b;
}
.api-recommend-button {
    flex: 0 0 auto;
    min-height: 1.7rem;
    padding: .22rem .42rem;
    border-radius: 7px;
    border: 1px solid rgba(255, 255, 255, .12);
    background: rgba(255, 255, 255, .05);
    color: #8d8d9d;
    font-size: .62rem;
    line-height: 1;
    cursor: pointer;
}
.api-recommend-button:hover,
.api-recommend-button:focus,
.api-recommend-button.active {
    border-color: rgba(245, 158, 11, .72);
    background: rgba(245, 158, 11, .18);
    color: #fbbf24;
}
.custom-api-actions {
    grid-gap: .2rem;
    gap: .2rem;
    margin-left: .35rem;
}
.api-group-note {
    padding: .62rem .72rem;
    border-radius: 12px;
    border: 1px dashed rgba(229,9,20,0.18);
    background: rgba(229,9,20,0.08);
    color: #f2c6c6;
    font-size: .72rem;
    line-height: 1.55;
}
#adultdiv .api-group-title {
    grid-column: 1 / -1;
}
/* ── Toggle switches ───────────────────────────────────────── */
.toggle-row {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    -webkit-box-pack: justify;
    -ms-flex-pack: justify;
    justify-content: space-between;
    padding-bottom: .75rem;
    margin-bottom: .75rem;
}
.border-b-section { border-bottom: 1px solid rgba(255,255,255,0.05); }
.toggle-label { font-size: .875rem; font-weight: 500; color: #c0c0d0; }
.toggle-desc  { font-size: .75rem; color: var(--text-3); margin-top: .2rem; }
.toggle-wrap  { position: relative; display: inline-block; width: 42px; height: 22px; -ms-flex-negative: 0; flex-shrink: 0; }
.toggle-input { opacity: 0; position: absolute; width: 100%; height: 100%; cursor: pointer; z-index: 1; margin: 0; }
.toggle-bg    { position: absolute; inset: 0; background: #2a2a35; border-radius: 22px; -webkit-transition: background .3s; transition: background .3s; }
.toggle-dot   { position: absolute; top: 3px; left: 3px; width: 16px; height: 16px; background: white; border-radius: 50%; -webkit-transition: -webkit-transform .3s; transition: transform .3s; -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.4); box-shadow: 0 1px 3px rgba(0,0,0,0.4); }
.toggle-input:checked ~ .toggle-bg  { background: var(--accent); }
.toggle-input:checked ~ .toggle-dot { -webkit-transform: translateX(20px); transform: translateX(20px); }

/* ── Close button ───────────────────────────────────────────── */
.close-btn {
    background: rgba(255,255,255,0.05);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 6px;
    color: var(--text-2);
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
    cursor: pointer;
    -webkit-transition: all .2s;
    transition: all .2s;
    -ms-flex-negative: 0;
    flex-shrink: 0;
}
.close-btn:hover { background: rgba(255,255,255,0.1); border-color: var(--border-h); color: var(--text-1); }
.close-btn svg   { width: 15px; height: 15px; stroke: currentColor; }

/* ── Buttons ────────────────────────────────────────────────── */
.btn-primary {
    display: inline-block;
    background: -webkit-linear-gradient(135deg, #e50914, #c8000b);
    background:         linear-gradient(135deg, #e50914, #c8000b);
    color: white;
    border: none;
    border-radius: 10px;
    padding: .6rem 1.25rem;
    font-weight: 600;
    font-size: .875rem;
    font-family: inherit;
    cursor: pointer;
    -webkit-transition: all .2s;
    transition: all .2s;
    -webkit-box-shadow: 0 4px 14px rgba(229,9,20,0.3);
    box-shadow: 0 4px 14px rgba(229,9,20,0.3);
    text-align: center;
}
.btn-primary:hover { -webkit-box-shadow: 0 6px 20px rgba(229,9,20,0.45); box-shadow: 0 6px 20px rgba(229,9,20,0.45); }

.btn-ghost {
    display: inline-block;
    background: rgba(255,255,255,0.05);
    color: var(--text-2);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: .5rem 1rem;
    font-size: .875rem;
    font-family: inherit;
    cursor: pointer;
    -webkit-transition: all .2s;
    transition: all .2s;
}
.btn-ghost:hover { background: rgba(255,255,255,0.09); border-color: var(--border-h); color: var(--text-1); }

.btn-danger-ghost {
    display: inline-block;
    background: rgba(229,9,20,0.1);
    color: #ff8080;
    border: 1px solid rgba(229,9,20,0.2);
    border-radius: 10px;
    padding: .55rem 1rem;
    font-size: .875rem;
    font-family: inherit;
    cursor: pointer;
    -webkit-transition: all .2s;
    transition: all .2s;
    text-align: center;
}
.btn-danger-ghost:hover { background: rgba(229,9,20,0.18); border-color: rgba(229,9,20,0.4); }
.w-full { width: 100%; }

.btn-setting-sm {
    padding: .25rem .6rem;
    background: rgba(255,255,255,0.05);
    border: 1px solid var(--border);
    border-radius: 8px;
    color: var(--text-2);
    font-size: .75rem;
    font-family: inherit;
    cursor: pointer;
    -webkit-transition: all .2s;
    transition: all .2s;
}
.btn-setting-sm:hover { background: rgba(255,255,255,0.1); color: var(--text-1); }

.btn-add {
    width: 24px; height: 24px;
    display: -webkit-box; display: -ms-flexbox; display: flex;
    -webkit-box-align: center; -ms-flex-align: center; align-items: center;
    -webkit-box-pack: center;  -ms-flex-pack: center;  justify-content: center;
    background: rgba(229,9,20,0.15);
    border: 1px solid rgba(229,9,20,0.2);
    border-radius: 50%;
    color: #ff6b6b;
    font-size: 1.1rem;
    line-height: 1;
    cursor: pointer;
    -webkit-transition: all .2s;
    transition: all .2s;
    font-family: inherit;
    -ms-flex-negative: 0; flex-shrink: 0;
}
.btn-add:hover { background: rgba(229,9,20,0.25); }

/* ── Cards ─────────────────────────────────────────────────── */
.card-hover {
    border: 1px solid var(--border);
    background: -webkit-linear-gradient(315deg, #16161f, #1a1a26);
    background:         linear-gradient(135deg, #16161f, #1a1a26);
    position: relative;
    overflow: hidden;
    border-radius: 12px;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
    height: 100%;
    -webkit-transition: all .3s cubic-bezier(.4,0,.2,1);
    transition: all .3s cubic-bezier(.4,0,.2,1);
    cursor: pointer;
}
.card-hover:hover {
    border-color: rgba(229,9,20,0.35);
    -webkit-box-shadow: 0 12px 40px rgba(0,0,0,.6), 0 0 0 1px rgba(229,9,20,.15);
    box-shadow: 0 12px 40px rgba(0,0,0,.6), 0 0 0 1px rgba(229,9,20,.15);
    -webkit-transform: translateY(-3px);
    transform: translateY(-3px);
}
.card-hover .flex-grow {
    display: -webkit-box; display: -ms-flexbox; display: flex;
    -webkit-box-orient: vertical; -webkit-box-direction: normal;
    -ms-flex-direction: column; flex-direction: column;
}
.card-hover h3 {
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    text-overflow: ellipsis;
    line-height: 1.4;
}

/* ── Modals ─────────────────────────────────────────────────── */
.modal-overlay {
    position: fixed;
    top: 0; left: 0; right: 0; bottom: 0;
    background: rgba(0,0,0,0.88);
    display: none; /* JS sets to flex */
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
    z-index: 9000;
    -webkit-backdrop-filter: blur(6px);
    backdrop-filter: blur(6px);
    padding: 1rem;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
}
.modal-box {
    background: #16161f;
    border: 1px solid rgba(255,255,255,0.08);
    border-radius: 20px;
    padding: 2rem;
    width: 100%;
    max-width: 56rem;
    max-height: 90vh;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
    overflow: hidden;
    -webkit-box-shadow: 0 24px 60px rgba(0,0,0,.7);
    box-shadow: 0 24px 60px rgba(0,0,0,.7);
}
.modal-head {
    display: -webkit-box; display: -ms-flexbox; display: flex;
    -webkit-box-align: center; -ms-flex-align: center; align-items: center;
    -webkit-box-pack: justify; -ms-flex-pack: justify; justify-content: space-between;
    margin-bottom: 1.5rem;
    -ms-flex-negative: 0; flex-shrink: 0;
}
.modal-title-text {
    font-size: 1.25rem;
    font-weight: 700;
    color: var(--text-1);
    word-break: break-word;
    padding-right: 1rem;
    max-width: 80%;
    margin: 0;
}
.modal-close {
    background: rgba(255,255,255,0.06);
    border: none;
    color: var(--text-3);
    font-size: 1.5rem;
    width: 2rem; height: 2rem;
    display: -webkit-box; display: -ms-flexbox; display: flex;
    -webkit-box-align: center; -ms-flex-align: center; align-items: center;
    -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center;
    border-radius: 8px;
    cursor: pointer;
    -webkit-transition: all .2s; transition: all .2s;
    -ms-flex-negative: 0; flex-shrink: 0;
    font-family: inherit;
}
.modal-close:hover { color: var(--text-1); background: rgba(255,255,255,0.1); }
.modal-content-area { overflow: auto; -webkit-flex: 1 1 0; -ms-flex: 1 1 0; flex: 1; min-height: 0; -webkit-overflow-scrolling: touch; }

/* Loading box */
.loading-box {
    background: #16161f;
    border: 1px solid rgba(255,255,255,0.08);
    border-radius: 20px;
    padding: 2rem 3rem;
    display: -webkit-box; display: -ms-flexbox; display: flex;
    -webkit-box-align: center; -ms-flex-align: center; align-items: center;
    -webkit-box-shadow: 0 24px 60px rgba(0,0,0,.7); box-shadow: 0 24px 60px rgba(0,0,0,.7);
}
.loading-box .loading-spinner { margin-right: 1rem; }
.loading-spinner {
    width: 24px; height: 24px;
    border: 2px solid rgba(255,255,255,0.1);
    border-top-color: var(--accent);
    border-radius: 50%;
    -webkit-animation: spin .8s linear infinite; animation: spin .8s linear infinite;
    -ms-flex-negative: 0; flex-shrink: 0;
}
@-webkit-keyframes spin { to { -webkit-transform: rotate(360deg); transform: rotate(360deg); } }
@keyframes spin          { to { -webkit-transform: rotate(360deg); transform: rotate(360deg); } }

/* Toast */
.toast-bar {
    position: fixed;
    top: 1rem;
    left: 50%;
    background: var(--accent);
    color: white;
    padding: .75rem 1.5rem;
    border-radius: 12px;
    -webkit-box-shadow: 0 8px 24px rgba(229,9,20,0.3);
    box-shadow: 0 8px 24px rgba(229,9,20,0.3);
    -webkit-transform: translateX(-50%) translateY(-100%);
    transform: translateX(-50%) translateY(-100%);
    -webkit-transition: opacity .3s, -webkit-transform .3s;
    transition: opacity .3s, transform .3s;
    z-index: 9999;
    font-size: .875rem;
    font-weight: 500;
    pointer-events: none;
    text-align: center;
    max-width: calc(100vw - 2rem);
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
}

/* ── Panel slide ─────────────────────────────────────────────── */
.settings-panel {
    width: 20rem;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: thin;
    scrollbar-color: rgba(255,255,255,0.1) transparent;
    -webkit-transform: translateX(100%);
    transform: translateX(100%);
    -webkit-transition: -webkit-transform .3s cubic-bezier(.4,0,.2,1);
    transition: transform .3s cubic-bezier(.4,0,.2,1);
}
.settings-panel.show { -webkit-transform: translateX(0); transform: translateX(0); }

.history-panel {
    width: 17rem;
    -webkit-transform: translateX(-100%);
    transform: translateX(-100%);
    -webkit-transition: -webkit-transform .3s cubic-bezier(.4,0,.2,1);
    transition: transform .3s cubic-bezier(.4,0,.2,1);
    -webkit-box-shadow: 2px 0 10px rgba(0,0,0,0.5);
    box-shadow: 2px 0 10px rgba(0,0,0,0.5);
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
    overflow-x: hidden;
    scrollbar-gutter: stable;
}
.history-panel.show { -webkit-transform: translateX(0); transform: translateX(0); }

/* ── Search card image — Safari-safe (no aspect-ratio) ──────── */
.search-card-img-container {
    width: 96px;
    min-width: 96px;
    height: 144px;       /* fallback: explicit height (2:3 = 96×144) */
    overflow: hidden;
    background-color: #1a1a22;
    -ms-flex-negative: 0;
    flex-shrink: 0;
    position: relative;
}
/* Modern browsers get true aspect-ratio */
@supports (aspect-ratio: 2/3) {
    .search-card-img-container {
        height: auto;
        aspect-ratio: 2/3;
    }
}
.search-card-img-container img {
    width: 100%; height: 100%;
    -o-object-fit: cover; object-fit: cover;
    display: block;
}

/* ── Results responsive grid ─────────────────────────────────── */
@media (max-width: 640px)  { #results { grid-template-columns: 1fr !important; }
    .search-card-img-container { width: 80px; min-width: 80px; height: 120px; } }
@media (min-width: 641px) and (max-width: 768px)  { #results { grid-template-columns: repeat(2,1fr) !important; } }
@media (min-width: 769px) and (max-width: 1024px) { #results { grid-template-columns: repeat(3,1fr) !important; } }
@media (min-width: 1025px) { #results { grid-template-columns: repeat(4,1fr) !important; } }

.card-hover h3  { font-size: .9rem; line-height: 1.3; }
.card-hover p   { font-size: .78rem; }
.card-hover .p-2 { padding: .65rem; }

/* ── History item ───────────────────────────────────────────── */
.history-item {
    background: rgba(255,255,255,0.03);
    border-radius: 8px;
    border: 1px solid var(--border);
    padding: 10px 12px;
    margin-bottom: 6px;
    cursor: pointer;
    -webkit-transition: all .2s; transition: all .2s;
}
.history-item:hover { background: rgba(255,255,255,0.06); border-color: rgba(229,9,20,0.25); }

/* ── Mobile panels full-width ────────────────────────────────── */
@media (max-width: 480px) {
    .history-panel { width: 100vw !important; }
    .settings-panel { width: 100vw !important; }
}

/* ── bg-gradient compat ──────────────────────────────────────── */
.bg-gradient-to-r {
    background: -webkit-linear-gradient(135deg, #e50914, #c8000b) !important;
    background:         linear-gradient(135deg, #e50914, #c8000b) !important;
}

/* Animations */
@-webkit-keyframes fadeUp {
    from { opacity:0; -webkit-transform:translateY(12px); transform:translateY(12px); }
    to   { opacity:1; -webkit-transform:translateY(0);    transform:translateY(0); }
}
@keyframes fadeUp {
    from { opacity:0; transform:translateY(12px); }
    to   { opacity:1; transform:translateY(0); }
}
.trending-card { -webkit-animation: fadeUp .4s ease both; animation: fadeUp .4s ease both; }
.douban-card   { -webkit-animation: fadeUp .35s ease both; animation: fadeUp .35s ease both; }

/* Mobile adaptation refinements */
@media (max-width: 767px) {
    .api-group-grid {
        grid-template-columns: 1fr;
    }

    .api-group-head {
        flex-direction: column;
    }

    .api-group-badge {
        min-width: 0;
    }    .settings-panel,
    .history-panel {
        width: 100vw !important;
        max-width: 100vw;
    }

    .panel-header {
        padding: 1rem 1rem .875rem;
    }

    .settings-body {
        padding: .875rem 1rem 1.5rem;
    }

    .settings-section {
        padding: .875rem;
        margin-bottom: .875rem;
        border-radius: 14px;
    }

    .settings-btn-row {
        flex-wrap: wrap;
        grid-gap: .5rem;
        gap: .5rem;
    }

    .settings-btn-row button,
    .settings-btn-row button + button {
        margin-left: 0;
    }

    .settings-btn-row button {
        flex: 1 1 calc(50% - .25rem);
        min-width: 0;
    }

    .settings-btn-row button:last-child {
        flex-basis: 100%;
    }

    .settings-meta {
        flex-direction: column;
        align-items: flex-start;
        grid-gap: .25rem;
        gap: .25rem;
    }

    .toggle-row {
        align-items: flex-start;
        grid-gap: .75rem;
        gap: .75rem;
    }

    .toggle-row > div:first-child {
        flex: 1;
        min-width: 0;
    }

    .toggle-label,
    .toggle-desc {
        line-height: 1.4;
    }

    .history-list {
        padding: .75rem 1rem;
        max-height: calc(100vh - 132px);
    }

    .panel-footer {
        padding: .75rem 1rem 1rem;
    }
}

@media (max-width: 380px) {
    .settings-btn-row button,
    .settings-btn-row button:last-child {
        flex-basis: 100%;
    }
}

/* ── Unified responsive application panels ─────────────────── */
body {
    overflow-x: hidden;
}

body.panel-open {
    position: fixed;
    top: var(--panel-scroll-offset, 0);
    left: 0;
    right: 0;
    width: 100%;
    overflow: hidden;
    overscroll-behavior: none;
}

.panel-backdrop {
    position: fixed;
    inset: 0;
    z-index: 35;
    background: rgba(3, 3, 8, .68);
    -webkit-backdrop-filter: blur(8px);
    backdrop-filter: blur(8px);
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    border: 0;
    padding: 0;
    transition: opacity .25s ease, visibility .25s ease;
}

.panel-backdrop.show {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
}

body.panel-open .app-corner {
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
}

#settingsPanel,
#historyPanel {
    top: 1rem !important;
    bottom: 1rem;
    height: auto !important;
    z-index: 50 !important;
    border: 1px solid rgba(255,255,255,.1) !important;
    border-radius: 20px;
    background: rgba(17,17,24,.96) !important;
    -webkit-backdrop-filter: blur(20px);
    backdrop-filter: blur(20px);
    box-shadow: 0 28px 80px rgba(0,0,0,.58);
}

#settingsPanel {
    right: max(1rem, env(safe-area-inset-right)) !important;
    left: auto !important;
    width: min(26rem, calc(100vw - 2rem));
    -webkit-transform: translateX(calc(100% + 3rem)) !important;
    transform: translateX(calc(100% + 3rem)) !important;
}

#historyPanel {
    left: max(1rem, env(safe-area-inset-left)) !important;
    right: auto !important;
    width: min(22rem, calc(100vw - 2rem));
    -webkit-transform: translateX(calc(-100% - 3rem)) !important;
    transform: translateX(calc(-100% - 3rem)) !important;
}

#settingsPanel.show,
#historyPanel.show {
    -webkit-transform: translate3d(0,0,0) !important;
    transform: translate3d(0,0,0) !important;
}

#settingsPanel .panel-header,
#historyPanel .panel-header {
    position: sticky;
    top: 0;
    z-index: 3;
    background: rgba(17,17,24,.94);
    -webkit-backdrop-filter: blur(18px);
    backdrop-filter: blur(18px);
}

#historyPanel .panel-footer {
    position: sticky;
    bottom: 0;
}

button:focus-visible,
a:focus-visible,
input:focus-visible,
[tabindex]:focus-visible {
    outline: 3px solid rgba(255,74,84,.95);
    outline-offset: 3px;
}

@media (max-width: 767px) {
    #settingsPanel,
    #historyPanel {
        left: 0 !important;
        right: 0 !important;
        top: auto !important;
        bottom: 0;
        width: 100% !important;
        max-width: none;
        height: 88vh !important;
        height: 88dvh !important;
        border-left: 0 !important;
        border-right: 0 !important;
        border-bottom: 0 !important;
        border-radius: 22px 22px 0 0;
        -webkit-transform: translateY(calc(100% + 1rem)) !important;
        transform: translateY(calc(100% + 1rem)) !important;
        box-shadow: 0 -24px 70px rgba(0,0,0,.62);
    }

    #settingsPanel.show,
    #historyPanel.show {
        -webkit-transform: translateY(0) !important;
        transform: translateY(0) !important;
    }

    #settingsPanel .panel-header,
    #historyPanel .panel-header {
        padding-top: max(1rem, env(safe-area-inset-top));
        border-radius: 22px 22px 0 0;
    }

    .settings-body {
        height: calc(100% - 61px);
        padding-bottom: max(2rem, env(safe-area-inset-bottom));
    }

    .panel-footer {
        padding-bottom: max(1rem, env(safe-area-inset-bottom));
    }
}

@media (min-width: 1600px) {
    #settingsPanel {
        width: min(30rem, 28vw);
    }

    #historyPanel {
        width: min(25rem, 24vw);
    }

    .panel-header {
        padding: 1.5rem 1.75rem 1.15rem;
    }

    .panel-title {
        font-size: 1rem;
    }

    .settings-body {
        padding: 1.25rem 1.5rem 2rem;
    }

    .settings-section {
        padding: 1.15rem;
    }

    .settings-input,
    .btn-setting-sm,
    .btn-danger-ghost,
    .btn-ghost {
        min-height: 2.75rem;
    }
}

@media (prefers-reduced-motion: reduce) {
    .panel-backdrop,
    #settingsPanel,
    #historyPanel {
        transition-duration: .01ms !important;
    }
}

/* ── 手机端面板改为底部滑出 sheet ────────────────────────── */
@media (max-width: 767px) {
    .history-panel,
    .settings-panel {
        /* 从侧边滑出改为底部滑出 */
        top: auto;
        bottom: 0;
        left: 0;
        right: 0;
        width: 100%;
        height: auto;
        max-height: 85vh;
        border-right: none;
        border-left: none;
        border-top: 1px solid rgba(255, 255, 255, 0.1);
        border-radius: 20px 20px 0 0;
        -webkit-transform: translateY(100%);
        transform: translateY(100%);
        -webkit-transition: -webkit-transform 0.35s cubic-bezier(0.32, 0.72, 0, 1);
        transition: transform 0.35s cubic-bezier(0.32, 0.72, 0, 1);
    }

    .history-panel.show,
    .settings-panel.show {
        -webkit-transform: translateY(0);
        transform: translateY(0);
    }

    /* 底部 sheet 拖拽手柄 */
    .history-panel .panel-header::before,
    .settings-panel .panel-header::before {
        content: '';
        display: block;
        width: 36px;
        height: 4px;
        background: rgba(255, 255, 255, 0.2);
        border-radius: 2px;
        margin: 0 auto 10px;
    }

    /* 防止滚动穿透 */
    .history-list,
    .settings-body {
        -webkit-overflow-scrolling: touch;
        overscroll-behavior: contain;
    }
}

/* ── TV 遥控器彩色按键提示条 ──────────────────────────────── */
.tv-color-hints {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: 8999;
    display: flex;
    justify-content: center;
    gap: 2rem;
    padding: 0.6rem 1rem;
    background: rgba(10, 10, 15, 0.9);
    border-top: 1px solid rgba(255, 255, 255, 0.06);
    font-size: 0.82rem;
    color: #8a8a9a;
}

.tv-color-hint {
    display: flex;
    align-items: center;
    gap: 0.35rem;
    white-space: nowrap;
}

.tv-color-hint.red   { color: #ef4444; }
.tv-color-hint.green  { color: #22c55e; }
.tv-color-hint.yellow { color: #eab308; }
.tv-color-hint.blue   { color: #3b82f6; }

/* 仅 TV 模式下显示彩色按键提示 */
body:not(.tv-mode) .tv-color-hints {
    display: none !important;
}

body.tv-mode .tv-color-hints {
    display: flex;
}
