:root {
    --brand: #ff6633;
    --brand-light: #ff8a3d;
    --ink: #1a1a1a;
    --muted: #8a8f98;
    --line: #f0f0f0;
    --bg: #f8f8f8;
    --radius: 14px;
}

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

body {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
    background-color: var(--bg);
    color: var(--ink);
    display: flex;
    -webkit-font-smoothing: antialiased;
}

html,
body {
    overflow-x: clip;
    max-width: 100%;
}

a {
    text-decoration: none;
    color: #666666;
}

ul {
    list-style: none;
}

img {
    display: block;
}

.app-toast {
    position: fixed;
    left: 50%;
    bottom: 120px;
    z-index: 99999;
    max-width: 80vw;
    padding: 8px 18px;
    background: rgba(30, 30, 30, .92);
    color: #fff;
    font-size: 14px;
    line-height: 1.5;
    border-radius: 8px;
    box-shadow: 0 6px 20px rgba(0, 0, 0, .2);
    white-space: pre-wrap;
    word-break: break-word;
    pointer-events: none;
    opacity: 0;
    transform: translate(-50%, 20px);
    transition: opacity .25s, transform .25s;
}

.app-toast.show {
    opacity: 1;
    transform: translate(-50%, 0);
}

.app-toast--error {
    background: rgba(200, 40, 40, .95);
}

.app-toast--success {
    background: rgba(30, 150, 80, .95);
}

/* ================= 统一遮罩 + 滚动锁 ================= */
.app-scrim {
    position: fixed;
    inset: 0;
    z-index: 900;                  /* JS 会按当前层动态覆盖 */
    background: rgba(24, 16, 12, 0.45);
    -webkit-backdrop-filter: blur(3px);
    backdrop-filter: blur(3px);
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.24s ease, visibility 0.24s ease;
    -webkit-tap-highlight-color: transparent;
}

.app-scrim.open {
    opacity: 1;
    visibility: visible;
}

/* ================= 左侧固定导航 ================= */
.sidebar {
    width: 210px;
    height: 100vh;
    position: sticky;
    top: 0;
    border-right: 1px solid #f0f0f0;
    display: flex;
    flex-direction: column;
    padding: 24px 16px;
    flex-shrink: 0;
    overflow-y: auto;
    background: linear-gradient(180deg, #fff3ef 0%, #ffffff 48%);
    transition: width 0.25s ease, padding 0.25s ease;
}

.sidebar *:not(svg):not(svg *) {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    min-width: 0;
}

/* --- logo 与搜索按钮同一行 --- */
.sidebar-top {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 24px;
    margin-right: -10px;
    flex-shrink: 0;
}

.sidebar-logo {
    flex: 1;
    min-width: 0;
}

.sidebar-logo img {
    width: 100px;
    height: auto;
}

.sidebar-logo-mark {
    display: none;
    width: 32px;
    height: 32px;
    flex-shrink: 0;
    border-radius: 10px;
    overflow: hidden;
    background: #fff;
    box-shadow: 0 2px 8px rgba(255, 102, 51, 0.15);
    transition: transform 0.15s;
}

.sidebar-logo-mark img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.sidebar-logo-mark:hover {
    transform: scale(1.04);
}

.sidebar-logo-mark:active {
    transform: scale(0.96);
}

/* --- 搜索触发按钮 --- */
.search-trigger {
    width: 30px;
    height: 30px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    border: none;
    border-radius: 10px;
    background: transparent;
    color: #9aa0a6;
    cursor: pointer;
    transition: background-color 0.2s, color 0.2s, transform 0.15s;
}

.search-trigger:hover {
    background-color: #ffece4;
    color: #ff6633;
}

.search-trigger:active {
    transform: scale(0.94);
}

.search-trigger:focus-visible {
    outline: 2px solid #ffb494;
    outline-offset: 2px;
}

.search-trigger svg {
    width: 18px;
    height: 18px;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
    fill: none;
}

/* --- 收起/展开菜单按钮 --- */
.sidebar-toggle {
    width: 30px;
    height: 30px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    border: none;
    border-radius: 10px;
    background: transparent;
    color: #9aa0a6;
    cursor: pointer;
    transition: background-color 0.2s, color 0.2s, transform 0.15s;
}

.sidebar-toggle:hover {
    background-color: #ffece4;
    color: #ff6633;
}

.sidebar-toggle:active {
    transform: scale(0.94);
}

.sidebar-toggle:focus-visible {
    outline: 2px solid #ffb494;
    outline-offset: 2px;
}

.sidebar-toggle svg {
    width: 18px;
    height: 18px;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
    fill: none;
    transition: transform 0.25s ease;
}

/* 折叠后箭头翻转，提示可展开 */
body.sidebar-collapsed .sidebar-toggle svg {
    transform: rotate(180deg);
}

.sidebar-body {
    position: relative;
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.nav-lock {
    position: absolute;
    left: -8px;
    right: -8px;
    bottom: -8px;
    z-index: 5;
    padding: 420px 8px 10px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-end;
    background: linear-gradient(
        to bottom,
        rgba(255, 255, 255, 0)    0%,
        rgba(255, 255, 255, 0.22) 14%,
        rgba(255, 255, 255, 0.58) 26%,
        rgba(255, 255, 255, 0.85) 38%,
        rgba(255, 255, 255, 0.96) 50%,
        #ffffff                   84%
    );
    pointer-events: auto;
    cursor: default;
}

.nav-lock-tip {
    margin: 0 0 8px;
    font-size: 12px;
    color: #b3b3b3;
    text-align: center;
    letter-spacing: 0.2px;
}

.nav-menu {
    flex-shrink: 0;
    flex: 1; 
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding-bottom: 4px;
    scrollbar-width: none;
    -ms-overflow-style: none;
}

.nav-item {
    display: flex;
    align-items: center;
    gap: 8px;
    min-height: 30px;
    padding: 12px 16px;
    border-radius: 10px;
    color: #555;
    text-decoration: none;
    font-size: 15px;
    font-weight: 500;
    transition: all 0.2s ease;
}

.nav-item:hover {
    color: #ff6b00;
}

.nav-item span {
    overflow: hidden;
    white-space: nowrap;
    opacity: 1;
    transition: max-width 0.25s ease, opacity 0.12s ease 0.18s;
}

.nav-item.active {
    background: #f8f7f9;
    color: #ff6b00;
}

.nav-item svg {
    width: 20px;
    height: 20px;
    stroke: currentColor;
    stroke-width: 2;
    fill: none;
    flex-shrink: 0;
}

.user-profile {
    display: flex;
    align-items: center;
    gap: 12px;
    padding-top: 16px;
    border-top: 1px solid #f0f0f0;
    margin-top: auto;
}

.user-avatar {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    object-fit: cover;
    background-color: #eee;
}

.user-name {
    flex: 1;
    font-size: 14px;
    font-weight: 500;
    color: #333;
}

.user-more {
    color: #888;
    cursor: pointer;
}

/* ================= 折叠状态（图标条） ================= */
body.sidebar-collapsed .sidebar {
    width: 60px;
    padding: 16px 4px;
    align-items: center;
}

body.sidebar-collapsed .sidebar-logo,
body.sidebar-collapsed .nav-item span,
body.sidebar-collapsed .user-name,
body.sidebar-collapsed .user-more,
body.sidebar-collapsed .login-btn span,
body.sidebar-collapsed .nav-lock-tip {
    display: none;
}

body.sidebar-collapsed .login-btn {
    background: transparent;
    box-shadow: none;
    color: #555555;
}

body.sidebar-collapsed .login-btn svg {
    width: 20px;
    height: 20px;
}

body.sidebar-collapsed .sidebar-logo-mark {
    display: block;
    margin-bottom: 4px;
}

body.sidebar-collapsed .sidebar-top {
    flex-direction: column;
    justify-content: center;
    gap: 8px;
    padding: 0;
    margin-bottom: 16px;
    margin-right: 0;
}

/* 收缩态：顶部两个按钮与导航图标统一（20px / #555） */
body.sidebar-collapsed .search-trigger:not(:hover),
body.sidebar-collapsed .sidebar-toggle:not(:hover) {
    color: #555;
}

body.sidebar-collapsed .search-trigger svg,
body.sidebar-collapsed .sidebar-toggle svg {
    width: 20px;
    height: 20px;
}

body.sidebar-collapsed .login-btn {
    padding: 0 8px;
}

body.sidebar-collapsed .nav-item {
    justify-content: center;
    padding: 12px;
}

body.sidebar-collapsed .user-profile {
    justify-content: center;
    gap: 0;
    padding-top: 12px;
}

/* ================= 底部 tabbar ================= */
.mobile-tabbar {
    display: none;
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: 900;
    height: 56px;
    padding-bottom: env(safe-area-inset-bottom, 0);
    background: rgba(255, 255, 255, 0.96);
    -webkit-backdrop-filter: blur(12px);
    backdrop-filter: blur(12px);
    border-top: 1px solid #ececec;
    box-shadow: 0 -2px 12px rgba(0, 0, 0, 0.04);
}

.tabbar-inner {
    display: flex;
    height: 56px;
    align-items: stretch;
}

/* 每个 tab 的包裹层 */
.tab-wrap {
    flex: 1;
    display: flex;
    position: relative;
}

.tab-item {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 3px;
    color: #9aa0a6;
    font-size: 11px;
    font-weight: 500;
    transition: color 0.18s;
    position: relative;
    cursor: pointer;
}

.tab-item svg {
    width: 22px;
    height: 22px;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
    fill: none;
    transition: transform 0.18s;
}

.tab-item:active svg {
    transform: scale(0.9);
}

.tab-item.active {
    color: var(--brand, #ff6633);
}

.tab-item.active svg {
    stroke-width: 2.2;
}

.tab-item.submenu-open {
    color: var(--brand, #ff6633);
}

.tab-item.submenu-open svg {
    stroke-width: 2.2;
}

.tab-submenu {
    position: fixed;
    bottom: calc(56px + env(safe-area-inset-bottom, 0px) + 15px);
    left: 0;
    z-index: 950;
    opacity: 0;
    visibility: hidden;
    transform: translateY(10px);
    transition: opacity 0.22s ease,
                visibility 0.22s ease,
                transform 0.22s cubic-bezier(0.2, 0.8, 0.3, 1);
    pointer-events: none;
}

.tab-submenu.open {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
    pointer-events: auto;
}

.tab-submenu::after {
    content: "";
    position: absolute;
    bottom: -6px;
    left: var(--arrow-left, 50%);
    width: 14px;
    height: 14px;
    background: #fff;
    border-radius: 2px;
    transform: translateX(-50%) rotate(45deg);
    box-shadow: 3px 3px 6px rgba(0, 0, 0, 0.06);
    pointer-events: none;
}

.tab-submenu-card {
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: 6px;
    min-width: 140px;
    max-height: 60vh;
    overflow-y: auto;
    overscroll-behavior: contain;
    background: #fff;
    border-radius: 14px;
    box-shadow: 0 12px 36px rgba(0, 0, 0, 0.18);
}

.submenu-item {
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: center;
    gap: 10px;
    padding: 10px 12px;
    border-radius: 10px;
    color: #555;
    font-size: 13.5px;
    font-weight: 500;
    white-space: nowrap;
    transition: background-color 0.18s, color 0.18s;
}

.submenu-item + .submenu-item {
    border-top: 1px solid #f5f5f5;
    padding-top: 11px;
    margin-top: 1px;
}

.submenu-item svg {
    width: 20px;
    height: 20px;
    flex-shrink: 0;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
    fill: none;
}

@media (hover: hover) {
    .submenu-item:hover {
        background: #fff6f2;
        color: var(--brand, #ff6633);
    }
}

@media (hover: none) {
    .submenu-item:active {
        background: #fff6f2;
        color: var(--brand, #ff6633);
    }
}

.tool-tip {
    position: fixed;
    z-index: 1100;
    padding: 6px 11px;
    background: rgba(26, 26, 26, 0.92);
    color: #fff;
    font-size: 12.5px;
    font-weight: 500;
    line-height: 1.4;
    border-radius: 10px;
    white-space: nowrap;
    pointer-events: none;
    opacity: 0;
    transition: opacity 0.18s ease;
}

.tool-tip.show {
    opacity: 1;
}

.tool-tip::before {
    content: "";
    position: absolute;
    left: -4px;
    top: 50%;
    margin-top: -5px;
    border: 5px solid transparent;
    border-right-color: rgba(26, 26, 26, 0.92);
    border-left: 0;
}

.login-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    height: 40px;
    width: 100%;
    margin-top: 14px;
    flex-shrink: 0;
    border: none;
    border-radius: 10px;
    background: linear-gradient(135deg, #ff8a3d 0%, #ff6633 100%);
    color: #fff;
    font-family: inherit;
    font-size: 14px;
    font-weight: 600;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    min-width: 0;
    cursor: pointer;
    transition: transform 0.2s, box-shadow 0.2s, filter 0.2s;
}

.login-btn:hover {
    filter: brightness(1.05);
    transform: translateY(-1px);
}

.login-btn:active {
    transform: translateY(0);
}

.login-btn:focus-visible {
    outline: 2px solid #ffb494;
    outline-offset: 2px;
}

.login-btn svg {
    width: 16px;
    height: 16px;
    flex-shrink: 0;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
    fill: none;
}

@media (max-width: 768px) {
    .sidebar {
        display: none;
    }

    .mobile-tabbar {
        display: block;
    }
}

/* ================= 搜索遮罩层 ================= */
.search-overlay {
    position: fixed;
    inset: 0;
    z-index: 1000;
    display: flex;
    justify-content: center;
    align-items: flex-start;
    padding: 12vh 20px 20px;
    pointer-events: none;              /* 空白处点击穿透到统一遮罩 */
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.22s ease, visibility 0.22s ease;
}

.search-overlay.open {
    opacity: 1;
    visibility: visible;
}

.search-panel {
    pointer-events: auto;
    width: 100%;
    max-width: 640px;
    max-height: 72vh;
    display: flex;
    flex-direction: column;
    background: #fff;
    border-radius: 16px;
    box-shadow: 0 24px 64px rgba(0, 0, 0, 0.22);
    overflow: hidden;
    transform: translateY(-16px) scale(0.98);
    transition: transform 0.24s cubic-bezier(0.2, 0.8, 0.3, 1);
}

.search-overlay.open .search-panel {
    transform: translateY(0) scale(1);
}

/* 输入行 */
.search-field {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 15px 18px;
    border-bottom: 1px solid #f2f2f2;
    flex-shrink: 0;
}

.search-field-icon {
    width: 19px;
    height: 19px;
    flex-shrink: 0;
    stroke: #c3c3c3;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
    fill: none;
}

.search-input {
    flex: 1;
    min-width: 0;
    border: none;
    outline: none;
    background: transparent;
    font-family: inherit;
    font-size: 15px;
    color: #1a1a1a;
}

.search-input::placeholder {
    color: #c3c3c3;
}

.search-clear {
    display: none;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    flex-shrink: 0;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: #f2f2f2;
    color: #999;
    cursor: pointer;
    transition: background-color 0.2s, color 0.2s;
}

.search-clear.visible {
    display: flex;
}

.search-clear:hover {
    background: #ffe6dc;
    color: #ff6633;
}

.search-clear svg {
    width: 11px;
    height: 11px;
    stroke: currentColor;
    stroke-width: 2.4;
    stroke-linecap: round;
    fill: none;
}

.search-kbd {
    flex-shrink: 0;
    padding: 2px 6px;
    font-family: inherit;
    font-size: 11px;
    color: #b5b5b5;
    background: #fafafa;
    border: 1px solid #eee;
    border-radius: 5px;
}

/* 结果区 */
.search-body {
    flex: 1;
    min-height: 100px;
    overflow-y: auto;
    padding: 8px;
    overscroll-behavior: contain;
}

.search-state {
    padding: 36px 16px;
    text-align: center;
    font-size: 13.5px;
    color: #9aa0a6;
    line-height: 1.7;
}

.spinner {
    display: inline-block;
    width: 13px;
    height: 13px;
    margin-right: 7px;
    vertical-align: -2px;
    border: 2px solid #ffd9c9;
    border-top-color: #ff6633;
    border-radius: 50%;
    animation: search-spin 0.7s linear infinite;
}

@keyframes search-spin {
    to {
        transform: rotate(360deg);
    }
}

.search-result {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 12px;
    border-radius: 10px;
    color: inherit;
    transition: background-color 0.18s;
}

.search-result:hover,
.search-result:focus-visible {
    background: #fff6f2;
    outline: none;
}

.search-thumb {
    width: 46px;
    height: 46px;
    flex-shrink: 0;
    border-radius: 8px;
    object-fit: cover;
    background-color: #f2f2f2;
}

.search-thumb--icon {
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    color: #ffb393;
    background: #fff3ee;
}

.search-result-body {
    flex: 1;
    min-width: 0;
}

.search-result-title {
    display: block;
    font-size: 14px;
    font-weight: 600;
    color: #333;
    line-height: 1.45;
    margin-bottom: 4px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.search-result:hover .search-result-title {
    color: #ff6633;
}

.search-result-desc {
    display: block;
    font-size: 12px;
    color: #9aa0a6;
    line-height: 1.5;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.search-result mark {
    background: transparent;
    color: #ff6633;
    font-weight: 700;
}

/* 底部提示 */
.search-foot {
    display: flex;
    gap: 16px;
    flex-shrink: 0;
    padding: 10px 18px;
    border-top: 1px solid #f2f2f2;
    font-size: 11.5px;
    color: #b5b5b5;
    background: #fcfcfc;
}

/* ============================================================
   ==================== 登录弹窗（斜三角切换版） ====================
   ============================================================ */
.login-overlay {
    position: fixed;
    inset: 0;
    z-index: 1200;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 34px 26px;
    pointer-events: none;
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.24s ease, visibility 0.24s ease;
}

.login-overlay.open {
    opacity: 1;
    visibility: visible;
}

/* 弹窗外壳：承载外侧的关闭按钮 */
.login-shell {
    pointer-events: auto;
    position: relative;
    width: 100%;
    max-width: 360px;
    max-height: calc(100vh - 68px);
    display: flex;
    transform: translateY(-16px) scale(0.97);
    transition: transform 0.26s cubic-bezier(0.2, 0.8, 0.3, 1);
}

.login-overlay.open .login-shell {
    transform: none;
}

/* 关闭按钮：悬浮在弹窗右上角外侧 */
.login-close {
    position: absolute;
    top: -40px;
    right: 0;
    width: 34px;
    height: 34px;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: #2b2b2b;
    color: #fff;
    cursor: pointer;
    z-index: 10;
}

.login-close:active {
    transform: scale(0.94);
}

.login-close:focus-visible {
    outline: 2px solid #ffb494;
    outline-offset: 2px;
}

.login-close svg {
    width: 15px;
    height: 15px;
    stroke: currentColor;
    stroke-width: 2.6;
    stroke-linecap: round;
    fill: none;
}

/* 弹窗主体 */
.login-modal {
    position: relative;
    width: 100%;
    max-height: 100%;
    display: flex;
    flex-direction: column;
    background: #fff;
    border-radius: 18px;
    box-shadow: 0 24px 64px rgba(0, 0, 0, 0.24);
    overflow: hidden;
}

/* 右上角斜三角切换按钮 */
.corner-switch {
    position: absolute;
    top: 0;
    right: 0;
    width: 80px;
    height: 80px;
    padding: 0;
    border: none;
    background: linear-gradient(225deg, #ff5c2b 0%, #ff8a3d 52%, #ffb98e 100%);
    clip-path: polygon(100% 0, 0 0, 100% 100%);
    cursor: pointer;
    z-index: 3;
    transition: filter 0.2s;
    -webkit-tap-highlight-color: transparent;
}

.corner-switch:hover {
    filter: brightness(1.08);
}

.corner-switch:active {
    filter: brightness(0.94);
}

.corner-switch:focus-visible {
    outline: none;
    filter: brightness(1.1) saturate(1.1);
}

.corner-icon {
    position: absolute;
    top: 11px;
    right: 11px;
    width: 22px;
    height: 22px;
    stroke: #fff;
    stroke-width: 1.85;
    stroke-linecap: round;
    stroke-linejoin: round;
    fill: none;
    display: none;
    pointer-events: none;
}

.login-modal[data-mode="phone"] .corner-icon.icon-qr {
    display: block;
}

.login-modal[data-mode="qr"] .corner-icon.icon-phone {
    display: block;
}

/* 主体滚动区 */
.login-body {
    flex: 1;
    min-height: 0;
    padding: 30px 32px 6px;
    overflow: hidden;
}

.login-panel {
    display: none;
}

.login-panel.active {
    display: block;
    animation: panelIn 0.3s cubic-bezier(0.2, 0.8, 0.3, 1);
}

@keyframes panelIn {
    from {
        opacity: 0;
        transform: translateY(9px);
    }

    to {
        opacity: 1;
        transform: none;
    }
}

.panel-head {
    padding-right: 52px;   /* 避开右上角三角 */
    margin-bottom: 18px;
}

.panel-title {
    font-size: 17px;
    font-weight: 700;
    color: #1f1f1f;
    line-height: 1.35;
    margin-bottom: 5px;
}

.panel-tip {
    font-size: 12px;
    color: #9aa0a6;
    line-height: 1.5;
}

/* 输入框 */
.field {
    display: flex;
    align-items: center;
    gap: 10px;
    height: 46px;
    padding: 0 14px;
    margin-bottom: 12px;
    border: 1px solid #e4e4e4;
    border-radius: 10px;
    background: #fff;
    transition: border-color 0.2s, box-shadow 0.2s, background-color 0.2s;
}

.field:focus-within {
    border-color: #ffb494;
    background: #fffdfc;
    box-shadow: 0 0 0 3px rgba(255, 102, 51, 0.1);
}

.field > svg {
    width: 17px;
    height: 17px;
    flex-shrink: 0;
    stroke: #c3c3c3;
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
    fill: none;
    transition: stroke 0.2s;
}

.field:focus-within > svg {
    stroke: #ff8a5c;
}

.field input {
    flex: 1;
    min-width: 0;
    height: 100%;
    border: none;
    outline: none;
    background: transparent;
    font-family: inherit;
    font-size: 14px;
    color: #1a1a1a;
}

.field input::placeholder {
    color: #c3c3c3;
}

.field--code {
    padding-right: 5px;
}

.code-btn {
    position: relative;
    flex-shrink: 0;
    height: 34px;
    padding: 0 12px;
    border: none;
    border-radius: 7px;
    background: transparent;
    color: #ff6633;
    font-family: inherit;
    font-size: 13px;
    font-weight: 600;
    white-space: nowrap;
    cursor: pointer;
    transition: background-color 0.2s, color 0.2s;
}

.code-btn::before {
    content: "";
    position: absolute;
    left: 0;
    top: 50%;
    width: 1px;
    height: 16px;
    margin-top: -8px;
    background: #ececec;
}

.code-btn:not(:disabled):hover {
    background: #fff3ee;
}

.code-btn:disabled {
    color: #c3c3c3;
    cursor: default;
}

.submit {
    width: 100%;
    height: 46px;
    margin-top: 6px;
    border: none;
    border-radius: 10px;
    background: linear-gradient(135deg, #ff8a3d 0%, #ff6633 100%);
    color: #fff;
    font-family: inherit;
    font-size: 15px;
    font-weight: 600;
    letter-spacing: 0.5px;
    cursor: pointer;
    transition: filter 0.2s, transform 0.2s, box-shadow 0.2s;
}

.submit:hover {
    filter: brightness(1.05);
    transform: translateY(-1px);
}

.submit:active {
    transform: translateY(0);
}

.submit:disabled {
    opacity: 0.7;
    cursor: default;
    transform: none;
    filter: none;
}

/* 二维码 */
.qr-box {
    width: 178px;
    height: 178px;
    margin: 4px auto 0;
    padding: 9px;
    border: 1px solid #ececec;
    border-radius: 12px;
    background: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.03);
}
.qr-placeholder {
     font-size: 13px;
    color: #999;
}
.qr-box img {
    width: 100%;
    height: 100%;
    display: block;
}

/* 协议 */
.login-agreement {
    flex-shrink: 0;
    padding: 14px 32px 22px;
    text-align: center;
    font-size: 12px;
    color: #9aa0a6;
    line-height: 1.6;
}

.login-agreement a {
    color: #ff6633;
    transition: opacity 0.2s;
}

.login-agreement a:hover {
    opacity: 0.8;
}

/* 输入错误抖动 */
@keyframes field-shake {
    0%, 100% {
        transform: translateX(0);
    }

    20% {
        transform: translateX(-5px);
    }

    40% {
        transform: translateX(5px);
    }

    60% {
        transform: translateX(-3px);
    }

    80% {
        transform: translateX(3px);
    }
}

.field.shake {
    animation: field-shake 0.35s ease;
    border-color: #ff9d80;
}

/* ============ 登录弹窗小屏适配 ============ */
@media (max-width: 768px) {
    .login-overlay {
        padding: 30px 22px;
    }

    .login-shell {
        max-height: calc(100vh - 60px);
    }

    .login-close {
        width: 32px;
        height: 32px;
    }

    .login-close svg {
        width: 14px;
        height: 14px;
    }

    .corner-switch {
        width: 72px;
        height: 72px;
    }

    .corner-icon {
        top: 10px;
        right: 10px;
        width: 20px;
        height: 20px;
    }

    .login-body {
        padding: 26px 24px 4px;
    }

    .panel-head {
        padding-right: 46px;
    }

    .panel-title {
        font-size: 16px;
    }

    .qr-box {
        width: 168px;
        height: 168px;
    }

    .login-agreement {
        padding: 12px 24px 20px;
        font-size: 11.5px;
    }
}

.app-content {
    flex: 1 1 auto;
    min-width: 0;
    padding: 32px 48px 20px;
    display: flex;
    flex-direction: column;
    gap: 36px;
}

.main-content {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    gap: 40px;
    align-items: flex-start;
}

.main-left {
    flex: 1;
    min-width: 0;
}

.right-sidebar {
    width: 320px;
    flex-shrink: 0;
    margin-left: auto;
    display: flex;
    flex-direction: column;
    gap: 20px;
}

@media (max-width: 1080px) {

    .right-sidebar {
        width: 220px;
    }
}

@media (max-width: 768px) {
    .app-content {
        padding: 14px 16px 14px;
    }

    .main-content {
        flex-direction: column;
        gap: 24px;
    }

    .main-left {
        width: 100%;
        max-width: 100%;
    }

    .right-sidebar {
        width: 100%;
        flex-shrink: 1;
        margin-left: 0;
    }
}

/* ================= Hero 轮播容器 ================= */
.hero {
    position: relative;
    display: block;
    padding: 35px 44px 35px;
    border-radius: 22px;
    overflow: hidden;
    background: linear-gradient(118deg, #171717 0%, #2a2220 52%, #3d2a20 100%);
    color: #fff;
    outline: none;
}

.hero::before {
    content: "";
    position: absolute;
    right: -90px;
    top: -110px;
    width: 380px;
    height: 380px;
    border-radius: 50%;
    background: radial-gradient(circle, rgba(255, 102, 51, 0.42), rgba(255, 102, 51, 0) 68%);
    pointer-events: none;
    z-index: 0;
}

/* ================= 幻灯片叠放区 ================= */
.hero-slides {
    display: grid;
    position: relative;
    z-index: 1;

    /* 关键：把横向手势交给 JS，纵向仍允许页面滚动 */
    touch-action: pan-y;
    -webkit-user-select: none;
    user-select: none;
    -webkit-tap-highlight-color: transparent;
}

.hero-slide {
    grid-area: 1 / 1;              /* 全部叠在同一格，高度自适应 */
    display: flex;
    align-items: center;
    gap: 40px;
    background-color: transparent !important; /* 防止黑框 */
    opacity: 0;
    pointer-events: none;
    will-change: opacity, transform;
    transition: opacity .48s ease, transform .48s ease;
}

.hero-slide.is-active {
    opacity: 1;
    pointer-events: auto;
}

/* 拖拽跟手阶段：关闭过渡，保证 1:1 跟手 */
.hero-slides.is-dragging .hero-slide {
    transition: none !important;
}

/* ================= 幻灯片内部 ================= */
.hero-text {
    position: relative;
    z-index: 1;
    flex: 1;
    min-width: 0;
}

.hero-badge {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    height: 26px;
    padding: 0 12px;
    border-radius: 13px;
    background-color: rgba(255, 102, 51, 0.16);
    border: 1px solid rgba(255, 138, 61, 0.36);
    color: #ffb691;
    font-size: 12px;
    font-weight: 600;
    letter-spacing: 0.4px;
    margin-bottom: 16px;
}

.hero-badge .dot {
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background-color: #ff6633;
    box-shadow: 0 0 0 3px rgba(255, 102, 51, 0.22);
}

.hero .title {
    font-size: 26px;
    font-weight: 600;
    line-height: 1.32;
    margin: 0 0 12px;
}

.hero-desc {
    font-size: 14px;
    line-height: 1.7;
    color: rgba(255, 255, 255, 0.62);
    margin: 0 0 26px;
    max-width: 460px;
}

.hero-meta {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 13px;
    color: rgba(255, 255, 255, 0.55);
    margin-bottom: 14px;
}

.hero-meta .sep {
    width: 1px;
    height: 12px;
    background-color: rgba(255, 255, 255, 0.22);
}

.hero-actions {
    display: flex;
    gap: 12px;
    flex-wrap: wrap;
}

.hero .btn {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-weight: bold;
    height: 38px;
    padding: 0 18px;
    border-radius: 99px;
    font-size: 13px;
    text-decoration: none;
    background-color: rgba(255, 255, 255, 0.08);
    border: 1px solid rgba(255, 255, 255, 0.22);
    color: #fff;
}

.hero .btn svg {
    width: 15px;
    height: 15px;
    fill: none;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hero .btn:hover {
    background-color: rgba(255, 255, 255, 0.88);
    color: #353535;
}

.hero-art {
    position: relative;
    z-index: 1;
    flex-shrink: 0;
    width: 306px;
    height: 190px;
}

.hero-cover {
    width: 100%;
    height: 100%;
    border-radius: 18px;
    object-fit: cover;
    box-shadow: 0 18px 40px rgba(0, 0, 0, 0.4);
    transform: rotate(-4deg);
    transition: transform 0.35s ease;
    -webkit-user-drag: none;
    user-select: none;
    pointer-events: none;
}

@media (hover: hover) {
    .hero-art:hover .hero-cover {
        transform: rotate(0deg) scale(1.03);
    }
}

/* ================= 底部小圆点 ================= */
.hero-dots {
    position: absolute;
    left: 50%;
    bottom: 20px;
    transform: translateX(-50%);
    display: flex;
    align-items: center;
    gap: 8px;
    z-index: 3;
}

.hero-dot {
    width: 8px;
    height: 8px;
    padding: 0;
    border: none;
    border-radius: 999px;
    background-color: rgba(255, 255, 255, 0.28);
    cursor: pointer;
    transition: width .3s ease, background-color .3s ease, box-shadow .3s ease;
}

.hero-dot:hover {
    background-color: rgba(255, 255, 255, 0.55);
}

.hero-dot:focus-visible {
    outline: 2px solid #ffb691;
    outline-offset: 3px;
}

.hero-dot.is-active {
    width: 22px;
    background-color: #ff6633;
    box-shadow: 0 0 0 3px rgba(255, 102, 51, 0.22);
}

/* ================= 移动端 ================= */
@media (max-width: 768px) {
    .hero-badge {
        height: 24px;
        padding: 0 10px;
        margin-bottom: 12px;
    }

    .hero-actions {
        display: none;
    }

    /* 幻灯片内部改为上下排列（文字在下，图片在上） */
    .hero-slide {
        padding: 22px 26px;
        flex-direction: column-reverse;
        gap: 22px;
        align-items: stretch;
        background-color: transparent; /* 确保幻灯片没有黑底 */
    }

    .hero {
        display: block;
        padding: 0;
        position: relative;
        overflow: hidden;
        min-height: 190px;
    }

    .hero-art {
        width: 100%;
        min-height: 190px;
        background-color: rgba(255, 255, 255, 0.06); /* 兜底底色 */
        border-radius: 14px;
        overflow: hidden; /* 防止图片溢出 */
        position: absolute;
        inset: 0;
        z-index: 0;
        pointer-events: none;
    }

    .hero-cover {
        width: 100%;
        height: 100%;
        object-fit: cover;
        border-radius: 0;
        box-shadow: none;
        border-radius: 14px;
        display: block; /* 防止图片下方产生缝隙 */
        transform: scale(1.2);
        filter: blur(3px) saturate(1) brightness(0.95);
    }

    .hero-art::after {
        content: "";
        position: absolute;
        inset: 0;
        background: linear-gradient(135deg,
                    rgba(20, 14, 12, 0.3) 0%,
                    rgba(20, 14, 12, 0.32) 100%);
    }

    .hero::before {
        display: none;
    }

    .hero-text {
        position: relative;
        z-index: 1;
    }

    .hero .title {
        font-size: 15px;
        line-height: 1.8;
        max-width: 100%;
        width: 100%;
        box-sizing: border-box; /* 确保 padding 包含在 width 内 */

        /* 🔑 核心：解除单行限制，允许换行 */
        white-space: normal;     /* 覆盖全局的 nowrap */
        overflow: visible;       /* 覆盖全局的 hidden */
        text-overflow: clip;     /* 取消省略号 */
        word-break: break-word;  /* 防止长英文/数字撑破容器 */
    }

    .hero-desc {
        font-size: 13px;
        margin-bottom: 20px;
        display: none;
    }

    .hero-meta {
        font-size: 12px;
        flex-wrap: wrap;
    }
}

@media (prefers-reduced-motion: reduce) {
    .hero-slide,
    .hero-cover,
    .hero-dot {
        transition: none !important;
    }
}

.chips {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
}

.chip {
    height: 36px;
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 0 20px;
    border-radius: 19px;
    background-color: #fff;
    border: 1px solid #ececec;
    font-size: 13.5px;
    font-weight: 500;
    color: #555;
    cursor: pointer;
    transition: all 0.2s;
}

@media (hover: hover) {
    .chip:hover {
        border-color: #ffcdb8;
        color: var(--brand);
        background-color: #fff9f6;
    }
}

@media (hover: none) {
    .chip:active {
        background-color: #f0f0f0;
        transform: scale(0.97);
    }
}

.chip.active {
    background-color: var(--ink);
    border-color: var(--ink);
    color: #fff;
}

@media (max-width: 768px) {
    .chip {
        height: 30px;
        gap: 7px;
        padding: 0 15px;
        font-size: 12px;
    }
}

.section-head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 16px;
    margin-bottom: 20px;
}

.section-head h2 {
    font-size: 20px;
    font-weight: 700;
    letter-spacing: -0.3px;
}

.section-actions {
    display: flex;
    align-items: center;
    gap: 14px;
    flex-shrink: 0;
}

.view-toggle {
    display: flex;
    padding: 3px;
    background: #fff;
    border: 1px solid #ececec;
    border-radius: 10px;
    flex-shrink: 0;
}

.view-btn {
    width: 32px;
    height: 28px;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    border: none;
    border-radius: 7px;
    background: transparent;
    color: #b0b4ba;
    cursor: pointer;
    transition: color 0.2s, background-color 0.2s;
}

@media (hover: hover) {
    .view-btn:hover {
        color: var(--brand);
    }
}

.view-btn.active {
    background: #fff3ee;
    color: var(--brand);
}

.view-btn svg {
    width: 16px;
    height: 16px;
    stroke: currentColor;
    fill: none;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
}

/* ================= 曲谱卡片 ================= */
.song-container {
    display: grid;
}

.song-container[data-view="grid"] {
    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
    gap: 20px;
}

.song-container[data-view="list"] {
    grid-template-columns: 1fr;
    gap: 16px;
}

.song-card {
    display: flex;
    flex-direction: column;
    background-color: #fff;
    border: 1px solid #f1f1f1;
    border-radius: var(--radius);
    padding: 10px 10px 14px;
    transition: transform 0.24s ease, box-shadow 0.24s ease, border-color 0.24s ease;
}

@media (hover: hover) {
    .song-card:hover {
        border-color: #f4e2d9;
        box-shadow: 0 12px 26px rgba(0, 0, 0, 0.03);
    }

    .song-card:hover .song-cover img {
        transform: scale(1.03);
    }

    .song-card:hover .play-mask {
        opacity: 1;
        visibility: visible;
        transform: translate(-50%, -50%) scale(1);
    }

    .song-card:hover .song-title {
        color: var(--brand);
    }
}

@media (hover: none) {
    .song-card:active {
        transform: scale(0.985);
    }

    .song-card:active .song-title {
        color: var(--brand);
    }
}

.song-cover {
    position: relative;
    border-radius: 10px;
    overflow: hidden;
    background-color: #f2f2f2;
    flex-shrink: 0;
}

.song-cover img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform 0.4s ease;
}

.song-container[data-view="grid"] .song-cover {
    aspect-ratio: 16 / 10;
    margin-bottom: 12px;
}

.song-container[data-view="list"] .song-cover {
    width: 220px;
    height: 124px;
    border-radius: 10px;
}

.play-mask {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%) scale(0.8);
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: rgba(255, 102, 51, 0.9);
    display: flex;
    align-items: center;
    justify-content: center;
    color: #fff;
    box-shadow: 0 4px 14px rgba(255, 102, 51, 0.42);
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.25s ease,
                visibility 0.25s ease,
                transform 0.25s ease;
    pointer-events: none;
}

.play-mask svg {
    width: 25px;
    height: 25px;
    fill: currentColor;
    margin-left: 1px;
}

/* 触摸设备上播放按钮常显 */
@media (hover: none) {
    .play-mask {
        opacity: 1;
        visibility: visible;
        transform: translate(-50%, -50%) scale(1);
    }
}

.song-container[data-view="grid"] .play-mask {
    width: 36px;
    height: 36px;
}

.song-container[data-view="grid"] .play-mask svg {
    width: 25px;
    height: 25px;
}

.song-body {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
}

.song-container[data-view="list"] .song-card {
    flex-direction: row;
    gap: 18px;
    padding: 14px;
}

.song-container[data-view="list"] .song-body {
    justify-content: center;
}

.song-title {
    font-weight: 600;
    color: #222;
    line-height: 1.4;
    transition: color 0.2s;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.song-container[data-view="grid"] .song-title {
    font-size: 14px;
    margin-bottom: 7px;
}

.song-container[data-view="list"] .song-title {
    font-size: 17px;
    font-weight: 500;
    margin-bottom: 9px;
    white-space: normal;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.song-meta {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
    font-size: 12px;
    color: var(--muted);
    min-width: 0;
}

.song-container[data-view="list"] .song-meta {
    font-size: 13px;
    margin-bottom: 10px;
}

.song-meta .artist {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.level {
    display: inline-flex;
    align-items: center;
    padding: 1px 8px;
    border-radius: 8px;
    font-size: 11.5px;
    font-weight: 500;
    flex-shrink: 0;
    white-space: nowrap;
}

.level-easy {
    background-color: #eaf7f0;
    color: #3f9c6b;
}

.level-mid {
    background-color: #fff3e6;
    color: #d9822b;
}

.sep-dot {
    width: 3px;
    height: 3px;
    border-radius: 50%;
    background-color: #d4d7dc;
    flex-shrink: 0;
}

.song-container[data-view="grid"] .lmeta,
.song-container[data-view="grid"] .song-desc {
    display: none;
}

.song-container[data-view="list"] .song-desc {
    font-size: 13.5px;
    color: #777;
    line-height: 1.65;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

@media (max-width: 768px) {
    .song-container[data-view="grid"] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 12px;
    }

    .song-container[data-view="grid"] .song-card {
        padding: 8px 8px 12px;
        border-radius: 12px;
    }

    .song-container[data-view="grid"] .song-cover {
        margin-bottom: 10px;
    }

    .song-container[data-view="grid"] .song-title {
        font-size: 13px;
        margin-bottom: 6px;
    }

    .song-container[data-view="grid"] .song-meta {
        font-size: 11px;
        gap: 6px;
    }

    .song-container[data-view="list"] .song-card {
        flex-direction: row;
        gap: 12px;
        padding: 10px;
    }

    .song-container[data-view="list"] .song-cover {
        width: 116px;
        height: 66px;
        flex-shrink: 0;
    }

    .song-container[data-view="list"] .song-body {
        justify-content: center;
    }

    .song-container[data-view="list"] .song-title {
        font-size: 13px;
        margin-bottom: 8px;
    }

    .song-container[data-view="list"] .song-meta {
        font-size: 12px;
        margin-bottom: 0;
    }

    .song-container[data-view="list"] .song-desc {
        font-size: 12.5px;
        display: none;
    }
}





.load-more {
    display: flex;
    justify-content: center;
    margin-top: 4px;
}

.load-more .btn-more {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    border-radius: 23px;
    height: 42px;
    padding: 0 28px;
    font-size: 14px;
    font-weight: 500;
    cursor: pointer;
    border: none;
    font-family: inherit;
    white-space: nowrap;
    transition: all 0.2s;
    background-color: #fff;
    color: var(--ink);
    border: 1px solid #e5e5e5;
}

@media (hover: hover) {
    .btn-more:hover {
        background-color: #fafafa;
        border-color: #ddd;
    }
}

@media (hover: none) {
    .btn-more:active {
        opacity: 0.85;
        transform: scale(0.98);
    }
}

.btn-more svg {
    width: 16px;
    height: 16px;
    stroke: currentColor;
    fill: none;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.author-hero {
        display: flex;
        align-items: flex-start;
        gap: 18px;
        padding: 28px 28px 24px;
        background: #fff;
        border: 1px solid #ececec;
        border-radius: 16px;
    }

    .author-avatar {
        flex-shrink: 0;
        width: 60px;
        height: 60px;
        border-radius: 50%;
        object-fit: cover;
        background: #f2f2f2;
    }

    .author-main {
        flex: 1;
        min-width: 0;
    }

    /* 名字行 */
    .author-name-row {
        display: flex;
        align-items: center;
        gap: 8px;
        flex-wrap: wrap;
        margin-bottom: 6px;
    }

    .author-name {
        font-size: 19px;
        font-weight: 700;
        letter-spacing: -0.2px;
        line-height: 1.3;
    }

    .author-verify {
        display: inline-flex;
        align-items: center;
        gap: 3px;
        height: 18px;
        padding: 0 7px;
        border-radius: 4px;
        background: #fff3ee;
        color: #ff6633;
        font-size: 11px;
        font-weight: 600;
        white-space: nowrap;
    }

    .author-verify svg {
        width: 11px;
        height: 11px;
        stroke: currentColor;
        stroke-width: 2.6;
        stroke-linecap: round;
        stroke-linejoin: round;
        fill: none;
    }

    /* 简介 */
    .author-bio {
        font-size: 13px;
        line-height: 1.7;
        color: #8a8f98;
        margin-bottom: 14px;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        line-clamp: 2;
        -webkit-box-orient: vertical;
        overflow: hidden;
    }

    /* 数据：一行文字，中间细点分隔 */
    .author-stats {
        display: flex;
        align-items: center;
        flex-wrap: wrap;
        gap: 8px;
        font-size: 13px;
        color: #8a8f98;
    }

    .author-stat {
        display: inline-flex;
        align-items: baseline;
        gap: 4px;
    }

    .author-stat strong {
        font-size: 14px;
        font-weight: 700;
        color: var(--ink);
        font-variant-numeric: tabular-nums;
    }

    .stat-dot {
        width: 3px;
        height: 3px;
        border-radius: 50%;
        background: #d8d8d8;
    }

    /* 右侧操作 */
    .author-actions {
        display: none;
        flex-shrink: 0;
        display: flex;
        align-items: center;
        gap: 8px;
        padding-top: 2px;
    }
    .btn-message {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        width: 34px;
        height: 34px;
        padding: 0;
        border: 1px solid #ececec;
        border-radius: 8px;
        background: #fff;
        color: #9aa0a6;
        cursor: pointer;
        transition: color 0.18s, border-color 0.18s;
    }

    .btn-message:hover {
        color: #ff6633;
        border-color: #ffd0b8;
    }

    .btn-message svg {
        width: 15px;
        height: 15px;
        stroke: currentColor;
        stroke-width: 1.8;
        stroke-linecap: round;
        stroke-linejoin: round;
        fill: none;
    }

    /* ================= 小屏 ================= */
    @media (max-width: 640px) {
        .author-hero {
            flex-wrap: wrap;
            gap: 14px;
            padding: 20px;
        }

        .author-avatar {
            width: 52px;
            height: 52px;
        }

        .author-name { font-size: 17px; }
        .author-bio  { font-size: 12.5px; }

        .author-actions {
            display: none;
            width: 100%;
            padding-top: 0;
        }

    }
.singer-hero {
    position: relative;
    display: flex;
    align-items: center;
    gap: 26px;
    padding: 32px 36px;
    border-radius: 22px;
    overflow: hidden;
    background: linear-gradient(118deg, #171717 0%, #2a2220 52%, #3d2a20 100%);
    color: #fff;
}

.singer-hero::before {
    content: "";
    position: absolute;
    right: -90px;
    top: -110px;
    width: 380px;
    height: 380px;
    border-radius: 50%;
    background: radial-gradient(circle, rgba(255, 102, 51, 0.42), rgba(255, 102, 51, 0) 68%);
    pointer-events: none;
}

.singer-avatar {
    position: relative;
    z-index: 1;
    flex-shrink: 0;
    width: 104px;
    height: 104px;
    border-radius: 50%;
    object-fit: cover;
    background-color: #333;
    border: 3px solid rgba(255, 255, 255, 0.16);
    box-shadow: 0 12px 30px rgba(0, 0, 0, 0.36);
}

.singer-main {
    position: relative;
    z-index: 1;
    flex: 1;
    min-width: 0;
}

.singer-name-row {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    margin-bottom: 10px;
}

.singer-title {
    font-size: 26px;
    font-weight: 700;
    letter-spacing: -0.5px;
    line-height: 1.25;
    color: #ffffff;
}

.singer-verify {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    height: 22px;
    padding: 0 9px;
    border-radius: 11px;
    background: rgba(255, 102, 51, 0.18);
    border: 1px solid rgba(255, 138, 61, 0.36);
    color: #ffb691;
    font-size: 11.5px;
    font-weight: 600;
    white-space: nowrap;
}
.singer-verify svg {
    width: 12px;
    height: 12px;
    stroke: currentColor;
    stroke-width: 2.4;
    stroke-linecap: round;
    stroke-linejoin: round;
    fill: none;
}

.singer-main p {
    font-size: 13.5px;
    line-height: 1.7;
    color: rgba(255, 255, 255, 0.6);
    max-width: 560px;
    margin-bottom: 16px;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.singer-stats {
    display: flex;
    align-items: center;
    gap: 22px;
    flex-wrap: wrap;
}

.singer-stat {
    display: flex;
    align-items: baseline;
    gap: 6px;
}

.singer-stat strong {
    font-size: 17px;
    font-weight: 700;
    color: #fff;
    font-variant-numeric: tabular-nums;
    letter-spacing: -0.2px;
}

.singer-stat span {
    font-size: 12.5px;
    color: rgba(255, 255, 255, 0.5);
}

/* ================= 小屏适配 ================= */
@media (max-width: 640px) {
    .singer-hero {
        align-items: flex-start;
        gap: 0 14px;
        padding: 18px 16px;
        border-radius: 18px;
    }

    .singer-avatar {
        width: 68px;
        height: 68px;
        border-width: 2px;
        box-shadow: 0 8px 20px rgba(0, 0, 0, 0.32);
    }

    .singer-main {
        flex: 1 1 0;
        min-width: 0;
    }

    .singer-name-row {
        gap: 8px;
        margin-bottom: 6px;
    }

    .singer-title {
        font-size: 19px;
        letter-spacing: -0.3px;
    }

    .singer-verify {
        height: 20px;
        padding: 0 8px;
        font-size: 11px;
    }
    .singer-main p {
        font-size: 12.5px;
        line-height: 1.65;
        margin-bottom: 12px;
        max-width: none;
        -webkit-line-clamp: 3;
        line-clamp: 3;
    }

    .singer-stats {
        gap: 14px;
    }

    .singer-stat strong {
        font-size: 15px;
    }

    .singer-stat span {
        font-size: 11.5px;
    }

    .singer-hero::before {
        right: -120px;
        top: -140px;
        width: 280px;
        height: 280px;
    }
}

.home-footer {
    border-top: 1px solid #ececec;
    padding-top: 22px;
    display: flex;
    flex-wrap: wrap;
    gap: 10px 24px;
    align-items: center;
    justify-content: space-between;
    font-size: 12.5px;
    color: #a8adb4;
}

.home-footer .links {
    display: flex;
    flex-wrap: wrap;
    gap: 18px;
}

.home-footer a {
    color: #a8adb4;
    transition: color 0.2s;
}

.home-footer a:hover {
    color: var(--brand);
}


 

/* ========== 内联视频卡片 ========== */

.pai-video {
    width: 100%;
    position: relative;
    margin: 0 auto 15px;
}
.pai-video .vposter {width: 80%;margin: 0 auto;}
.pai-video .vposter img {
        width: 100%;
        height: auto;
        display: block;
        border-radius: 8px;
    }

    .pai-video .play-btn {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        width: 58px;
        height: 58px;
        border-radius: 50%;
        background-image: linear-gradient(139deg, #ec1700 0, #fc7c0a 100%);
        opacity: .93;
        color: #fff;
        display: flex;
        align-items: center;
        justify-content: center;
        transition: opacity .2s, transform .2s;
    }

    .pai-video .play-btn:hover {
        opacity: 1;
        transform: translate(-50%, -50%) scale(1.06);
    }

    .pai-video .play-btn svg {
        width: 32px;
        height: 32px;
        display: block;
        fill: currentColor;
        margin-left: 1px;
    }

/* 封面上的线路切换胶囊（右上角） */
.pai-video .video-inline-tabs {
  position: absolute;
  top: 10px;
  right: 10px;
  z-index: 20;
  display: flex;
  gap: 6px;
}
.pai-video .vm-tab {
  padding: 3px 14px;
  font-size: 12px;
  line-height: 1.6;
  color: rgba(255,255,255,.85);
  background: rgba(0,0,0,.45);
  border: 1px solid rgba(255,255,255,.22);
  border-radius: 999px;
  cursor: pointer;
  transition: color .2s, background .2s, border-color .2s;
}
.pai-video .vm-tab:hover { color: #fff; border-color: rgba(255,255,255,.5); }
.pai-video .vm-tab.is-active {
  color: #fff;
  background: var(--primary-color, #ff6600);
  border-color: var(--primary-color, #ff6600);
}

/* ========== 16:9 视频外层 ========== */
.pai-video .video-framework {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  background: #000;
  overflow: hidden;
  border-radius: 10px;
}

/* xgplayer 宿主铺满外层（覆盖它自己写的 height:0px） */
.pai-video .video-framework > div {
  position: absolute !important;
  top: 0 !important;
  left: 0 !important;
  width: 100% !important;
  height: 100% !important;
}

/* video 元素 */
.pai-video .video-framework video {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: contain;
  background: #000;
  border-radius: 10px;
}

/* iframe 线路 */
.pai-video .video-framework iframe {
  position: absolute;
  top: 0; left: 0;
  width: 100%; height: 100%;
  border: 0;
  border-radius: 10px;
}

/* 旧浏览器兜底 */
@supports not (aspect-ratio: 16 / 9) {
  .pai-video .video-framework { height: 0; padding-top: 56.25%; }
}

/* ========== 加载 / 错误状态 ========== */
.pai-video .video-inline-state {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
  width: 100%;
  aspect-ratio: 16 / 9;
  color: #fff;
  background: #000;
  font-size: 14px;
}
.pai-video .video-inline-state p { margin: 0; color: rgba(255,255,255,.65); }
.pai-video .video-inline-state.is-error p { color: #ff6b6b; }

.pai-video .video-retry {
  padding: 4px 18px;
  font-size: 13px;
  color: #fff;
  background: var(--primary-color, #ff6600);
  border: 0;
  border-radius: 999px;
  cursor: pointer;
}

.vm-spinner {
  width: 22px; height: 22px;
  border: 2px solid rgba(255,255,255,.35);
  border-top-color: #fff;
  border-radius: 50%;
  animation: vm-spin .8s linear infinite;
}
@keyframes vm-spin { to { transform: rotate(360deg); } }

.header-section { margin-bottom: 24px; }

        .header-section h1 {
            font-size: 22px;
            font-weight: 500;
            margin-bottom: 10px;
            line-height: 1.4;
        }

        .meta-row {
            display: flex;
            width: 100%;
            align-items: center;
            gap: 12px;
            font-size: 12px;
            color: #777776;
            line-height: 1.6; 
            overflow: hidden;
            text-overflow: ellipsis;
        }

        .meta-item {
            display: inline-flex;
            align-items: center;
            gap: 6px;
            white-space: nowrap;
        }

        .meta-item svg {
            width: 12px;
            height: 12px;
            flex-shrink: 0;
            stroke: currentColor;
            stroke-width: 1.8;
            stroke-linecap: round;
            stroke-linejoin: round;
            fill: none;
        }

        .action-row { display: flex; gap: 12px; }

        .description { font-size: 15px; color: #444; text-align: justify; }
        .description p { line-height: 1.8; margin-bottom: 15px; }

      

    /* 小屏：更小一点的播放按钮，避免压住封面 */
    @media (max-width: 768px) {
        .pai-video {
            width: 100%;
            margin-bottom: 12px;
        }

        .pai-video .play-btn {
            width: 48px;
            height: 48px;
        }

        .pai-video .play-btn svg {
            width: 26px;
            height: 26px;
        }
    }

        .pupics {
            position: relative; 
            margin-top: 20px;
            border-radius: 12px;
            display: flex;
            flex-direction: column; 
            background: #ffffff;
        }

        .pupics img {
            width: 100%;
            height: auto;
            border-radius: 8px;
            box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
            background-color: #fff;
        }


        @media (max-width: 768px) {
            .header-section h1 {
                font-size: 18px;
                font-weight: 500;
            }
            .meta-row {
                line-height: 1;
            }
            
           
            .description {
                font-size: 14px;
            }
        }


/* 容器 */
.gtpbox {
    display: flex;
    flex-direction: column;
    position: relative;
    margin-bottom: 22px;
}

/* 工具栏：单行 + 横向滚动  #3f434c */
#toolbar {
    box-sizing: border-box;
    width: 100%;  
    min-height: 52px;            /* 用 min-height，别用 height */
    margin: 0 auto;
    padding: 0 12px;             /* 左右留白 */
    display: flex;               /* 只写一次，别被覆盖 */
    flex-wrap: nowrap;           /* 强制单行 */
    align-items: center;
    gap: 8px;
     border: 1px solid #f0f0f0;
    background: #ffffff;
    border-radius: 6px;
    box-shadow: 0 0 10px rgba(18, 35, 75, .08);
    overflow-x: auto;            /* 溢出横向滚动 */
    overflow-y: hidden;
    -webkit-overflow-scrolling: touch;   /* iOS 顺滑滚动 */
    scrollbar-width: thin;               /* Firefox 细滚动条 */
    scrollbar-color: rgba(255,255,255,.35) transparent;
}


/* Webkit 滚动条美化，防止粗条吃掉高度 */
#toolbar::-webkit-scrollbar {
    height: 6px;
}
#toolbar::-webkit-scrollbar-track {
    background: transparent;
}
#toolbar::-webkit-scrollbar-thumb {
    background: rgba(255, 255, 255, .3);
    border-radius: 3px;
}
#toolbar::-webkit-scrollbar-thumb:hover {
    background: rgba(255, 255, 255, .5);
}

/* 内层 .tool 也单行 */
.tool {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: 8px;
}

/* 按钮 / 位置 / 链接 统一 */
#toolbar button,
#toolbar .gtp-position,
#toolbar a.btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    height: 28px;
    padding: 0 12px;
    border: 1px solid #e5e7eb;
    border-radius: 5px;
    background-color: #f9fafb;
    color: #333;
    font-size: 12px;
    line-height: 1;
    text-decoration: none;
    white-space: nowrap;
    flex-shrink: 0;              /* 关键：禁止按钮被压缩 */
    box-sizing: border-box;
    cursor: pointer; 
}

 
#toolbar button:active,
#toolbar button:focus {
    outline: none;
}

#toolbar a.active {
    background: #ff6633;
    color: #fff;
    border-color: #ff6633;
}

/* 1. 弹窗遮罩与居中外壳 */
.gtp-modal { 
    position: absolute; z-index: 9999; left: 0; top: 0; width: 100%; height: 100%; 
    background-color: rgba(0,0,0,0.5); display: flex; justify-content: center; align-items: center; 
}
/* 2. 弹窗白色卡片主体 */
.gtp-modal-content { 
    background-color: #fff; padding: 15px 20px; border-radius: 8px; width: 300px; 
    box-shadow: 0 4px 15px rgba(0,0,0,0.3); animation: fadeIn 0.2s ease-out; 
}
/* 3. 弹窗头部统一布局 */
.gtp-modal-header { 
    display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; border-bottom: 1px solid #eee; padding-bottom: 8px; 
}
.gtp-modal-header h4 { margin: 0; font-size: 14px; color: #333; }
/* 4. 右上角关闭按钮 */
.gtp-modal-close { margin-top: -10px; font-size: 14px; cursor: pointer; color: #999; line-height: 1; }
.gtp-modal-close:hover { color: #333; }

/* 5. 内部调节条目通用布局 (Flex 左右通栏) */
.gtp-control-item { 
    line-height: 20px; display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; 
}
.gtp-control-item label { font-size: 14px; width: 60px; color: #666; }
.gtp-control-item .gtp-text { font-size: 13px; width: 55px; text-align: right; color: #444; }

/* 6. 统一美化所有原生滑块轨道 */
.gtp-control-item input[type="range"] { 
    width: 112px; vertical-align: middle; margin: 0 6px; height: 5px; 
    outline: none; -webkit-appearance: none; appearance: none; background: #e5e5e5; border-radius: 3px; 
}
/* 7. 统一美化所有滑块的橙色拖动小圆点 (兼容 Webkit & Moz) */
.gtp-control-item input[type="range"]::-webkit-slider-thumb { 
    -webkit-appearance: none; appearance: none; width: 12px; height: 12px; border-radius: 50%; background: #ff6600; cursor: pointer; border: none; 
}
.gtp-control-item input[type="range"]::-moz-range-thumb { 
    width: 12px; height: 12px; border-radius: 50%; background: #ff6600; cursor: pointer; border: none; 
}
.gtp-control-item input[type="range"]::-moz-range-track { 
    height: 5px; background: #e5e5e5; border-radius: 3px; border: none; 
}

.at-cursor-beat {background:rgba(64,158,255,0.4) !important;width:4px;}
.at-cursor-bar {background:rgba(255,242,0,.25)}
.at-selection {background:rgba(64,158,255,0.1) !important;}
.at-selection div {background:rgba(64,64,255,.1)}
.at-highlight * {fill:#0078ff;stroke:#0078ff}
.gtp-main {width:100%}
.yinsetip {display:flex;position:fixed;top:40%;left:50%;transform:translate(-50%,-40%);z-index:10001}
.yinsetip span {text-align:center;background:rgb(255,0,0);margin:0 auto;padding:3px 12px;color:#ffffff;font-size:14px;}
.gtp-wrap {position:relative;display:flex;overflow:hidden;margin:0 auto;width:100%;height:100vh;background:#ffffff;border:none;flex-direction:column;}
.gtp-viewport {position:absolute;top:0;right:0;bottom:0;left:0;overflow-x:hidden;padding-right:2px}
.gtp-wrap::-webkit-scrollbar {width:3px;height:10px;background:#fefefe}
.gtp-wrap::-webkit-scrollbar-thumb {border-radius:10px;background:#dedede}
.gtp-wrap::-webkit-scrollbar-track {border-radius:10px;background:#eee}
@media (min-width:768px) {.gtp-more {position:absolute;text-align:center;left:50%;top:30%;transform:translate(-50%,-30%);background:rgba(0,0,0,0.76);padding:20px;z-index:999;border-radius:10px}
}
@media (max-width:767px) {.gtp-controls .gtp-song-title {display:none}
.gtp-more {position:absolute;width:90%;text-align:center;left:50%;top:30%;transform:translate(-50%,-30%);background:rgba(0,0,0,0.76);padding:20px 10px;z-index:999;border-radius:10px}
}
.gtp-more .paytip {color:#ffffff;text-align:center;margin-bottom:20px;font-size:13px;letter-spacing:.2px;}
.gtp-more .more-btn {background-image:linear-gradient(-135deg,#FBE8A8 0%,#F8E7AC 15%,#E2C078 100%);color:#623A0C;font-size:14px;cursor:pointer;padding:5px 12px;font-weight:bold;height:32px;border-radius:32px;letter-spacing:1px;clear:both;}
.gtp-more .more-btn:hover {background-image:linear-gradient(-35deg,#FBE8A8 100%,#F8E7AC 15%,#E2C078 0%);color:#623A0C;}
.gtp-more .more-btn i {color:#623A0C;vertical-align:-1px;font-weight:15px;padding-left:3px;}
.gtp-more .more-btn .number {padding:0 2px;}
.gtp-more .login-lock {color:#ff6633;height:30px;line-height:30px;font-size:15px;cursor:pointer;font-weight:bold;}
.gtp-more .login-lock i {vertical-align:-1px;font-size:15px;padding-left:3px;}

.jitapai-tuwen-neilian {max-width: 480px;margin: 0 auto  20px auto; padding: 0 10px;}
.jitapai-tuwen-neilian a {display: block;text-decoration: none;color: inherit;}
.jitapai-tuwen-neilian .item_main{display:flex;align-items:center;gap:14px;background:#f7f7f7;padding:12px 14px;border-radius:10px;box-shadow:0 1px 3px rgba(0,0,0,0.08)}
.jitapai-tuwen-neilian .item_thumb{flex-shrink:0}
.jitapai-tuwen-neilian .item_thumb img{display:block;width:80px;height:80px;object-fit:cover;border-radius:6px}
.jitapai-tuwen-neilian .item_content{flex:1;display:flex;flex-direction:column;justify-content:center;gap:10px;min-width:0}
.jitapai-tuwen-neilian .ntitle{font-size:16px;font-weight:500;color:#222;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.jitapai-tuwen-neilian .item_meta{font-size:13px;margin-top:8px;color:#888}
.jitapai-tuwen-neilian .item_meta span{font-family:DIN-Medium;}

.paytip {color: #999999;text-align: center;padding-top: 10px; margin-bottom:13px;font-size: 13px;}
.payusers-wrap {color:#a4a4a4;line-height:24px;height:24px;text-align:center;font-size: 13px;margin-bottom:18px;overflow: hidden; display:flex;align-items:center;display: -webkit-flex; -webkit-align-items: center;justify-content: center;}
.payusers-wrap .payusers-item{display:inline-block; margin-right:-8px;box-sizing: border-box;width: 24px;height: 24px;padding: 0;vertical-align:middle; }
.payusers-wrap .payusers-item:last-child{margin-right:0!important}
.payusers-wrap .payusers-item img{vertical-align:-1px;width:24px;height:24px;border:1px solid #fff;border-radius:50%;padding: 0;}
.payusers-wrap .payusers_count{color:#f13b03;padding:0 5px 0 18px; font-weight:bold;font-family:DIN-Medium;}
.payusers-wrap.gp{color:#ffffff}
.jitapu-more {position:relative;text-align:center;margin-top: 10px; margin-bottom:25px;}
.jitapu-more:before {content:"";position:absolute;top:-100px;left:0;height:100px;width:100%;background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,0)),to(#fff));background-image:-webkit-linear-gradient(top,rgba(255,255,255,0),#fff);background-image:linear-gradient(-180deg,rgba(255,255,255,0),#fff)}
.jitapu-more .more-btn{background-image: linear-gradient(-135deg, #FBE8A8 0%, #F8E7AC 15%, #E2C078 100%);color:#623A0C;font-size:14px;cursor:pointer; padding:5px 12px;font-weight:bold;height: 32px;border-radius: 32px;letter-spacing:1px;clear: both; } 
.jitapu-more .more-btn:hover{background-image:linear-gradient(-35deg, #FBE8A8 100%, #F8E7AC 15%, #E2C078 0%);color:#623A0C;} 
.jitapu-more .more-btn i{color:#623A0C;vertical-align: -1px;font-weight: 15px; padding-left:3px;}
.jitapu-more .more-btn .shuzi{padding:0 2px;}
.jitapu-more .login-lock{color:#ff6633;height:30px;line-height: 30px; font-size:15px;cursor:pointer;font-weight: bold;}
.jitapu-more .login-lock i{vertical-align: -1px;font-weight: 15px; padding-left:3px;}

/* ========================================================
 * 扫码支付弹窗
 * ======================================================== */
.pay-form-wrap {
    position: fixed;
    inset: 0;
    z-index: 1246;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 24px;
    box-sizing: border-box;
    visibility: hidden;
    opacity: 0;
    transition: opacity .25s ease, visibility .25s ease;
    -webkit-tap-highlight-color: transparent;
}
.pay-form-wrap.open {
    visibility: visible;
    opacity: 1;
}

.pay-form {
    position: relative;
    width: 100%;
    max-width: 320px;
    background-image:-webkit-linear-gradient(top,#fff2ef 0%,#fff 30%);background-image:linear-gradient(180deg,#fff2ef 0%,#fff 30%);box-shadow:0px 0px 16px 0px rgba(18,35,75,.01);
    border-radius: 16px;
    box-shadow: 0 24px 64px rgba(0, 0, 0, .28),
                0 2px 8px rgba(0, 0, 0, .06);
    padding: 40px 24px 28px;
    box-sizing: border-box;
    transform: scale(.92) translateY(8px);
    transition: transform .3s cubic-bezier(.2, .8, .3, 1);
}
.pay-form-wrap.open .pay-form {
    transform: scale(1) translateY(0);
}

.pay-form-center {

    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 14px;
}

/* 关闭按钮 */
.pay-close {
    position: absolute;
    top: 10px;
    right: 10px;
    width: 34px;
    height: 34px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    color: #9aa0a6;
    text-decoration: none;
    transition: background-color .2s, color .2s;
}
.pay-close:hover { background: #f5f5f5; color: #333; }
.pay-close .icon-cancel {
    display: block;
    width: 16px;
    height: 16px;
    background: currentColor;
    -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='black' d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/></svg>") center / contain no-repeat;
            mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='black' d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/></svg>") center / contain no-repeat;
}

/* 金额 */
.pay-price {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 6px;
}
.pay-price img {
    display: block;
    width:110px;height: auto;
    border-radius: 12px;
    object-fit: cover;
}
.orderprice {
    font-size: 28px;
    font-weight: 700;
    color: #ff6633;
    line-height: 1.15;
    letter-spacing: -.5px;
    font-variant-numeric: tabular-nums;
}
.orderprice small {
    font-size: 16px;
    font-weight: 500;
    margin-right: 2px;
}

/* 二维码容器 */
.pay-qrcode {
    width: 196px;
    height: 196px;
    padding: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: #fff;
    border: 1px solid #f0f0f0;
    border-radius: 12px;
    box-sizing: border-box;
    overflow: hidden;
}
.pay-qrcode canvas {
    display: block !important;
    width: 100% !important;
    height: 100% !important;
}
.pay-qrcode img {
    display: none !important;   /* canvas 已经够了，img 是 canvas 的备份，隐藏掉 */
}
/* 加载 / 错误态 */
.qr-state {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 13px;
    color: #999;
}
.qr-state--error { color: #e54d42; }

/* 提示文字 */
.paytime-tip {
    margin: 0;
    font-size: 12px;
    color: #999;
    line-height: 1.5;
    text-align: center;
}
.paytime-tip.shuzi {
    color: #ff6633;
    font-size: 13px;
    font-weight: 500;
    min-height: 18px;
    font-variant-numeric: tabular-nums;
}
.single-credit{background: #f3f3f3; box-sizing: border-box; border-radius:3px;margin:15px 0 10px 0;font-size:11.6px;padding:8px 12px;border-radius: 6px; color:#999;line-height: 1.66}
.single-credit .contact {color:#155d9a;cursor:pointer;white-space: nowrap;}

/* ================= 横向操作栏 ================= */
.action-bar {
    display: flex;
    align-items: stretch;
    flex-wrap: nowrap;
    gap: 2px;
    margin-bottom: 14px;
    padding: 6px;
    background: #fff;
    border: 1px solid #f0f0f0;
    border-radius: 12px;
}

.bar-item {
    flex: 1 1 0;
    min-width: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 5px;
    height: 32px;
    padding: 0 6px;
    border: none;
    border-radius: 9px;
    background: transparent;
    color: #6b6b6b;
    font-family: inherit;
    font-size: 13px;
    font-weight: 500;
    cursor: pointer;
    transition: color 0.18s, background-color 0.18s, transform 0.15s;
    -webkit-tap-highlight-color: transparent;
}

.bar-item:hover { color: #ff6633; background: #fff6f2; }
.bar-item:active { transform: scale(0.97); }

.bar-item:focus-visible {
    outline: 2px solid #ffb494;
    outline-offset: 2px;
}

/* 图标 */
.bar-icon {
    position: relative;
    width: 20px;
    height: 20px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
}

.bar-icon svg {
    width: 15px;
    height: 15px;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
    fill: none;
}

/* 文字 */
.bar-label {
    line-height: 1;
    white-space: nowrap;
}

/* 点赞选中态 */
.bar-item--like.active { color: #ff6633; background: #fff6f2; }
.bar-item--like.active svg { fill: currentColor; }

/* 数量角标 */
.bar-badge {
    position: absolute;
    top: -5px;
    right: -6px;
    min-width: 15px;
    height: 15px;
    padding: 0 3px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 8px;
    background: #f2f2f2;
    color: #777;
    font-size: 10px;
    font-style: normal;
    font-weight: 600;
    line-height: 1;
}

.bar-item--like.is-liked {
    opacity: .75;
    cursor: default;
}

.bar-item--like.is-liked .bar-badge {
    background: #ff663388;
    color: #fff;
}

.bar-item--like.is-liked .bar-icon svg {
    fill: var(--brand, #ff5722);
    stroke: var(--brand, #ff5722);
}


.bar-item.is-collected .bar-icon svg {
    fill: var(--brand, #ff5722);
    stroke: var(--brand, #ff5722);
}
.bar-item.is-collected {
    opacity: .85;
}


/* ================= 小屏：允许横向滚动，一行放得下 ================= */
@media (max-width: 768px) {
    .action-bar {
        margin-bottom: 12px;
        padding: 5px 6px;
        gap: 2px;
        overflow-x: auto;
        overflow-y: hidden;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;
    }
    .action-bar::-webkit-scrollbar { display: none; }

    .bar-item {
        padding: 0 10px;
        height: 32px;
        font-size: 12.5px;
        gap: 5px;
        flex-shrink: 0;
    }

    .bar-label { display: none; }

    .bar-icon { width: 18px; height: 18px; }
    .bar-icon svg { width: 16px; height: 16px; }

    .bar-badge {
        top: -4px;
        right: -5px;
        min-width: 14px;
        height: 14px;
        font-size: 9.5px;
    }
}

.puzhibox {
    margin-top: 12px;
    background-color: #fff;
    border: 1px solid #ececec;
    border-radius: 12px;
    padding: 14px 16px;
}

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

/* 每一项 */
.puzhi a {
    display: flex;
    align-items: center;
    gap: 10px;
    min-width: 0;
    padding: 6px 8px;
    border-radius: 8px;
    color: inherit;
    transition: background-color 0.18s;
    -webkit-tap-highlight-color: transparent;
}

.puzhi a:hover {
    background-color: #fff6f2;
}

.puzhi img {
    width: 24px;
    height: 24px;
    flex-shrink: 0;
    border-radius: 4px;
    object-fit: cover;
    background-color: #f2f2f2;
}

/* 标题：单行省略 */
.puzhi .tj-title {
    flex: 1;
    min-width: 0;
    font-size: 14px;
    line-height: 1.4;
    color: #111;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    transition: color 0.18s;
}

.puzhi a:hover .tj-title {
    color: #ff6633;
    text-decoration: none;
}

/* ---------- 小屏：一列 ---------- */
@media (max-width: 768px) {
    .puzhi {
        grid-template-columns: 1fr;
        gap: 2px;
    }
}

/* 通用卡片 */
        .card {
            border: 1px solid #f0f0f0;
            border-radius: 14px;
            padding: 15px 20px 20px;
            background: #ffffff;
        }

        /* ---------- 推荐谱集卡片 ---------- */
        .card-head {
            display: flex;
            align-items: baseline;
            justify-content: space-between;
            gap: 12px;
            margin-bottom: 12px;
        }

        .card-title {
            font-size: 14px;
            font-weight: 600;
            color: #666666;
            line-height: 30px;
        }

        .card-more {
            font-size: 12px;
            color: #9da0a5;
            white-space: nowrap;
            transition: color 0.2s;
        }
        .card-more:hover { color: #ff6633; }

        .pulist {
            display: flex;
            flex-direction: column;
            gap: 20px;
        }

        .pulist-item {
            display: flex;
            gap: 15px;
            align-items: flex-start; 
            border-radius: 10px;
            transition: background-color 0.2s;
            margin-bottom: 5px;
        }
        .pulist-item:hover { background-color: #fafafa; }

        .pulist-thumb {
            width: 64px;
            height: 64px;
            flex-shrink: 0;
            border-radius: 12px;
            object-fit: cover;
            background-color: #f2f2f2;
        }

        .pulist-body {
            flex: 1;
            min-width: 0;
        }

        .pulist-title {
            font-size: 14px;
            font-weight: 600;
            color: #333;
            line-height: 1.4;
            margin-bottom: 6px;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
            transition: color 0.2s;
        }
        .pulist-item:hover .pulist-title { color: #ff6633; }

        .pulist-desc {
            font-size: 12px;
            line-height: 1.6;
            color: #9aa0a6;
            display: -webkit-box;
            -webkit-line-clamp: 2;
            line-clamp: 2;
            -webkit-box-orient: vertical;
            overflow: hidden;
        }

.recent-list {
    display: flex;
    flex-direction: column;
    gap: 2px;
    margin: 0;
    padding: 0 0 0 10px;  
    list-style-type: disc;  
} 
.recent-list > li::marker {
    color: #b5b5b5;
    font-size: 12px;
}
.recent-item a {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px;
    margin: -4px -8px;
    border-radius: 8px;
    transition: background-color 0.2s;
}

.recent-item a:hover { background-color: #fafafa; }

.recent-title {
    flex: 1;
    min-width: 0;
    font-size: 13px;
    line-height: 1.5;
    color: #555;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    transition: color 0.2s;
}

.recent-item a:hover .recent-title { color: #ff6633; }

.recent-date {
    flex-shrink: 0;
    font-size: 11.5px;
    color: #b5b5b5;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

/* 清空按钮 */
.recent-clear {
    border: none;
    background: transparent;
    padding: 0;
    font-family: inherit;
    cursor: pointer;
}
.recent-clear:hover { color: #ff6633; }


.hot-list {
    display: flex;
    flex-direction: column;
    gap: 2px;
    margin: 0;
    padding: 0;
    list-style: none;
}

.hot-item a {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px;
    margin: -4px -8px;
    border-radius: 8px;
    transition: background-color 0.2s;
}

.hot-item a:hover { background-color: #fafafa; }

.hot-rank {
    width: 18px;
    height: 18px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 5px;
    background: #f5f5f5;
    color: #9aa0a6;
    font-size: 11px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    line-height: 1;
}

.hot-rank--top {
    background: linear-gradient(135deg, #ff8a3d 0%, #ff6633 100%);
    color: #fff;
    box-shadow: 0 2px 6px rgba(255, 102, 51, 0.28);
}

.hot-title {
    flex: 1;
    min-width: 0;
    font-size: 13px;
    line-height: 1.5;
    color: #555;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    transition: color 0.2s;
}

.hot-item a:hover .hot-title { color: #ff6633; }

.hot-num {
    flex-shrink: 0;
    font-size: 11.5px;
    color: #b5b5b5;
    font-variant-numeric: tabular-nums;
}

.singer-list {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 16px 8px;
}

.singer-item {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 6px;
    min-width: 0;
    padding: 4px 2px;
    border-radius: 10px;
    text-align: center;
    transition: background-color 0.2s;
}

.singer-item:hover { background-color: #fafafa; }

.singer-thumb {
    width: 54px;
    height: 54px;
    border-radius: 50%;
    object-fit: cover;
    background-color: #f2f2f2;
    border: 2px solid #fff;
    box-shadow: 0 2px 10px rgba(255, 107, 0, 0.14);
    transition: transform 0.2s, box-shadow 0.2s;
}

.singer-item:hover .singer-thumb {
    transform: translateY(-2px);
    box-shadow: 0 6px 16px rgba(255, 102, 51, 0.28);
}

.singer-name {
    max-width: 100%;
    font-size: 12.5px;
    font-weight: 600;
    color: #333;
    line-height: 1.2;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    transition: color 0.2s;
}

.singer-item:hover .singer-name { color: #ff6633; }

.singer-desc {
    font-size: 11px;
    color: #b5b5b5;
    line-height: 1;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
 .recomauthor .recomauthoritem{margin:18px 0;display: block;clear: both; }
.recomauthor .recomauthoritem:last-child{margin-bottom:0}
.recomauthor .recomauthoritem .recomauthor-pic{float:left;}
.recomauthor .recomauthoritem .recomauthor-pic img{box-sizing: border-box; width:70px;height:70px;padding: 2px; border:1px solid #eee;border-radius: 100%;}
.recomauthor .recomauthoritem .recomauthor-content{display:block;margin-left:85px}
.recomauthor .recomauthoritem .recomauthor-content a{font-size:15px;font-weight:500;color:#333;line-height: 40px;}
.recomauthor .recomauthoritem .recomauthor-content a:hover{text-decoration:none;color:#f63}
.recomauthor .recomauthoritem .recomauthor-content p{color:#898989;line-height:30px;font-size:13px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} 

/* ==================== 笔记气泡 ==================== */
.note-bubble{
    position: absolute;
    top: 0;
    left: calc(100% + 14px);
    width: 380px;
    max-height: 75vh;
    z-index: 30;
    display: flex;
    flex-direction: column;
    background: #fff;
    border-radius: 14px;
    box-shadow:
        0 16px 44px rgba(0, 0, 0, .14),
        0 0 0 1px rgba(0, 0, 0, .03);
    opacity: 0;
    visibility: hidden;
    transform: translateX(-8px) scale(.97);
    transform-origin: 0 30px;
    transition:
        opacity .2s ease,
        visibility .2s ease,
        transform .24s cubic-bezier(.2, .8, .3, 1);
}
.note-bubble.open{
    opacity: 1;
    visibility: visible;
    transform: none;
}

.note-arrow{
    position: absolute;
    left: -6px;
    top: 28px;
    width: 12px;
    height: 12px;
    border-radius: 2px;
    background: #fff;
    transform: rotate(45deg);
    box-shadow: -1px 1px 3px rgba(0, 0, 0, .04);
    pointer-events: none;
}

/* ---------- 头部 ---------- */
.note-head{
    display: flex;
    align-items: center;
    gap: 10px;
    flex-shrink: 0;
    padding: 13px 16px;
    border-bottom: 1px solid #f2f2f2;
    border-radius: 14px 14px 0 0;
    background: #fff;
}
.note-title{
    flex-shrink: 0;
    font-size: 15px;
    font-weight: 700;
    color: #1f1f1f;
}
.note-time{
    flex: 1;
    min-width: 0;
    font-size: 11.5px;
    color: #9aa0a6;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.note-close{
    width: 28px; height: 28px;
    flex-shrink: 0;
    display: flex; align-items: center; justify-content: center;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: #f5f5f5;
    color: #888;
    cursor: pointer;
    transition: background-color .2s, color .2s, transform .15s;
}
.note-close:hover{ background: #ffece4; color: #ff6633; }
.note-close:active{ transform: scale(.94); }
.note-close:focus-visible{ outline: 2px solid #ffb494; outline-offset: 2px; }
.note-close svg{
    width: 13px; height: 13px;
    stroke: currentColor; stroke-width: 2.4;
    stroke-linecap: round; fill: none;
}

/* ---------- 主体 ---------- */
.note-body{
    flex: 1 1 auto;
    min-height: 0;
    padding: 12px 16px 0;
    overflow: hidden;
}

/* ---------- 工具栏 ---------- */
.note-toolbar{
    display: flex;
    align-items: center;
    gap: 2px;
    flex-shrink: 0;
    padding: 6px 8px;
    margin-bottom: 8px;
    border-radius: 8px;
    background: #fafafa;
    border: 1px solid #f0f0f0;
}

.note-tool{
    width: 30px; height: 30px;
    flex-shrink: 0;
    display: flex; align-items: center; justify-content: center;
    padding: 0;
    border: none;
    border-radius: 6px;
    background: transparent;
    color: #555;
    font-family: inherit;
    font-size: 13px;
    font-weight: 700;
    cursor: pointer;
    transition: background-color .15s, color .15s, transform .12s;
    -webkit-tap-highlight-color: transparent;
}
.note-tool:hover{ background: #ffece4; color: #ff6633; }
.note-tool:active{ transform: scale(.92); }
.note-tool:focus-visible{ outline: 2px solid #ffb494; outline-offset: 1px; }
.note-tool.active{ background: #fff0e8; color: #ff6633; }

.note-tool svg{
    width: 16px; height: 16px;
    stroke: currentColor; stroke-width: 2;
    stroke-linecap: round; stroke-linejoin: round;
    fill: none;
}

.note-tool--text{
    width: auto;
    padding: 0 9px;
    font-size: 12px;
    font-weight: 600;
}

.note-tool-sep{
    width: 1px; height: 16px;
    margin: 0 3px;
    background: #ececec;
    flex-shrink: 0;
}

/* ---------- 颜色选择器 ---------- */
.note-color{
    position: relative;
    flex-shrink: 0;
}

.note-color-trigger{
    width: auto;
    padding: 0 6px 0 8px;
    gap: 3px;
}
.note-color-trigger svg{
    width: 12px; height: 12px;
    stroke-width: 2.4;
}

.note-color-bar{
    display: block;
    width: 15px;
    height: 15px;
    border-radius: 3px;
    background: #1a1a1a;
    box-shadow: inset 0 0 0 1.5px rgba(255,255,255,.9),
                0 0 0 1px rgba(0,0,0,.1);
}

.note-color-panel{
    position: absolute;
    top: calc(100% + 6px);
    left: 0;
    z-index: 5;
    display: none;
    grid-template-columns: repeat(5, 1fr);
    gap: 6px;
    padding: 8px;
    border-radius: 10px;
    background: #fff;
    box-shadow: 0 8px 24px rgba(0,0,0,.14),
                0 0 0 1px rgba(0,0,0,.05);
}
.note-color-panel.open{ display: grid; }

.note-color-swatch{
    width: 22px; height: 22px;
    padding: 0;
    border: none;
    border-radius: 6px;
    background: var(--c);
    cursor: pointer;
    box-shadow: inset 0 0 0 1.5px rgba(255,255,255,.85),
                0 0 0 1px rgba(0,0,0,.08);
    transition: transform .12s;
}
.note-color-swatch:hover{ transform: scale(1.12); }
.note-color-swatch:active{ transform: scale(.96); }
.note-color-swatch:focus-visible{ outline: 2px solid #ffb494; outline-offset: 1px; }

/* ---------- 编辑区 ---------- */
.note-editor{
    display: block;
    width: 100%;
    min-height: 180px;
    max-height: 46vh;
    overflow-y: auto;
    padding: 12px 14px;
    border: 1px solid #ececec;
    border-radius: 10px;
    background: #fafafa;
    font-family: inherit;
    font-size: 13.5px;
    line-height: 1.8;
    color: #1a1a1a;
    outline: none;
    word-break: break-word;
    white-space: pre-wrap;
    overflow-wrap: anywhere;
    transition: border-color .2s, box-shadow .2s, background-color .2s;
    scrollbar-width: thin;
    scrollbar-color: #e5e5e5 transparent;
}
.note-editor::-webkit-scrollbar{ width: 5px; }
.note-editor::-webkit-scrollbar-thumb{
    background: #e5e5e5; border-radius: 4px;
}
.note-editor:focus{
    border-color: #ffb494;
    background: #fff;
    box-shadow: 0 0 0 3px rgba(255, 102, 51, .1);
}

.note-editor:empty::before{
    content: attr(data-placeholder);
    color: #b5b5b5;
    pointer-events: none;
}

/* 编辑区里元素样式 */
.note-editor b,
.note-editor strong{ font-weight: 700; }

.note-editor ul,
.note-editor ol{
    margin: 6px 0 6px 4px;
    padding-left: 22px;
}
.note-editor li{
    margin-bottom: 3px;
    line-height: 1.7;
}
.note-editor ul li{ list-style: disc; }
.note-editor ol li{ list-style: decimal; }
.note-editor li::marker{ color: #ff6633; }

/* ---------- 底部 ---------- */
.note-foot{
    flex-shrink: 0;
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 12px 16px 14px;
    border-radius: 0 0 14px 14px;
}
.note-count{
    font-size: 11.5px;
    color: #b5b5b5;
    font-variant-numeric: tabular-nums;
    flex-shrink: 0;
}
.note-tip{
    flex: 1;
    min-width: 0;
    font-size: 12px;
    color: #22c55e;
    opacity: 0;
    transition: opacity .2s;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.note-tip.show{ opacity: 1; }
.note-tip.error{ color: #ff3b30; }

.note-btn{
    flex-shrink: 0;
    height: 34px;
    padding: 0 18px;
    border: none;
    border-radius: 9px;
    font-family: inherit;
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
    transition: filter .18s, transform .15s, background-color .18s, color .18s;
}
.note-btn:active{ transform: scale(.97); }
.note-btn:focus-visible{ outline: 2px solid #ffb494; outline-offset: 2px; }

.note-btn--ghost{
    background: #f4f4f4;
    color: #666;
}
.note-btn--ghost:hover{ background: #ffece4; color: #ff6633; }

.note-btn--primary{
    background: linear-gradient(135deg, #ff8a3d 0%, #ff6633 100%);
    color: #fff;
    box-shadow: 0 4px 12px rgba(255, 102, 51, .26);
}
.note-btn--primary:hover{
    filter: brightness(1.05);
    box-shadow: 0 6px 16px rgba(255, 102, 51, .36);
}

/* ---------- 小屏：铺底卡片（遮罩由统一遮罩承担） ---------- */
@media (max-width: 768px){
    .note-bubble{
        position: fixed;
        top: auto;
        left: 12px;
        right: 12px;
        top: 160px;
        width: auto;
        max-width: none;
        max-height: 72vh;
        transform: translateY(8px) scale(.98);
        transform-origin: 50% 100%;
        z-index: 1300;
    }
    .note-bubble.open{ transform: none; }

    .note-arrow{ display: none; }

    .note-head{ padding: 12px 15px; }
    .note-title{ font-size: 14.5px; }

    .note-body{ padding: 10px 15px 0; }

    .note-toolbar{ padding: 5px 6px; gap: 1px; }
    
    .note-tool--text{ padding: 0 8px; font-size: 11.5px; }
    .note-color-bar{ width: 14px; height: 14px; }
    .note-color-swatch{ width: 20px; height: 20px; }

    .note-editor{
        min-height: 150px;
        max-height: 40vh;
        font-size: 13px;
        padding: 11px 12px;
    }

    .note-foot{ padding: 10px 15px 12px; gap: 6px; }
    .note-btn{ height: 32px; padding: 0 14px; font-size: 12.5px; }
    .note-count{ display: none; }
}

/* ================= 要点冒泡 ================= */
.tips-bubble {
    position: absolute;
    top: 0;
    left: calc(100% + 14px);
    width: 360px;
    max-height: 75vh;
    z-index: 10001;
    display: flex;
    flex-direction: column;

    background: #fff;
    border-radius: 14px;
    box-shadow:
        0 16px 44px rgba(0, 0, 0, 0.14),
        0 0 0 1px rgba(0, 0, 0, 0.03);

    opacity: 0;
    visibility: hidden;
    transform: translateX(-8px) scale(0.97);
    transform-origin: 0 30px;
    transition:
        opacity 0.2s ease,
        visibility 0.2s ease,
        transform 0.24s cubic-bezier(0.2, 0.8, 0.3, 1);
}

.tips-bubble.open {
    opacity: 1;
    visibility: visible;
    transform: none;
}

/* 左箭头：指向悬浮按钮中心 */
.tips-bubble-arrow {
    position: absolute;
    left: -6px;
    top: 28px;
    width: 12px;
    height: 12px;
    border-radius: 2px;
    background: #fff;
    transform: rotate(45deg);
    box-shadow: -1px 1px 3px rgba(0, 0, 0, 0.04);
    pointer-events: none;
}

/* ---------- 气泡头部 ---------- */
.tips-bubble-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-shrink: 0;
    padding: 13px 16px;
    border-bottom: 1px solid #f2f2f2;
    background: #fff;
    border-radius: 14px 14px 0 0;
}

.tips-title {
    font-size: 15px;
    font-weight: 700;
    color: #1f1f1f;
}

.tips-close {
    width: 28px;
    height: 28px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: #f5f5f5;
    color: #888;
    cursor: pointer;
    transition: background-color 0.2s, color 0.2s, transform 0.15s;
}

.tips-close:hover { background: #ffece4; color: #ff6633; }
.tips-close:active { transform: scale(0.94); }

.tips-close svg {
    width: 13px;
    height: 13px;
    stroke: currentColor;
    stroke-width: 2.4;
    stroke-linecap: round;
    fill: none;
}

/* ---------- 气泡内容滚动区 ---------- */
.tips-bubble-body {
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
    padding: 14px 18px 20px;
    border-radius: 0 0 14px 14px;

    scrollbar-width: thin;
    scrollbar-color: #e5e5e5 transparent;
}

.tips-bubble-body::-webkit-scrollbar { width: 4px; }
.tips-bubble-body::-webkit-scrollbar-track { background: transparent; }
.tips-bubble-body::-webkit-scrollbar-thumb {
    background: #e5e5e5;
    border-radius: 4px;
}
.tips-bubble-body::-webkit-scrollbar-thumb:hover { background: #d0d0d0; }

.tips-bubble-body h3 {
    position: relative;
    margin: 18px 0 8px;
    padding-left: 11px;
    font-size: 13.5px;
    font-weight: 700;
    color: #1f1f1f;
    line-height: 1.5;
}

.tips-bubble-body h3::before {
    content: "";
    position: absolute;
    left: 0;
    top: 50%;
    width: 3px;
    height: 13px;
    margin-top: -6.5px;
    border-radius: 2px;
    background: linear-gradient(180deg, #ff8a3d 0%, #ff6633 100%);
}

.tips-bubble-body h3:first-child { margin-top: 0; }

.tips-bubble-body{color:#565656;margin-top:10px}
.tips-bubble-body p{font-size:13px;line-height:1.8;padding-bottom:8px}
.tips-bubble-body ul{list-style-type:disc!important;padding-left:1.5em;margin-bottom:16px;font-size:13px;line-height:1.8}
.tips-bubble-body ol{list-style-type:decimal;padding-left:1.5em;margin-bottom:16px}
.tips-bubble-body li{margin-top:4px;font-size:13px;line-height:1.8;word-wrap:break-word;list-style-type:disc!important}
.tips-bubble-body span{color:#888}
.tips-bubble-body a{color:#f60}


.tips-note {
    margin-top: 18px;
    padding-top: 12px;
    border-top: 1px dashed #ececec;
    text-align: center;
    font-size: 11.5px;
    color: #9aa0a6;
}
.aitip {
    font-size: 10.4px;
    color: #999999;
    text-align: center;
    display: flex;
    justify-content: center;
    align-items: center;
}
/* ================= 小屏：气泡铺满，居中显示 ================= */
@media (max-width: 768px) {
    .tips-bubble {
        position: fixed;
        top: auto;
        left: 12px;
        right: 12px;
        bottom: calc(72px + env(safe-area-inset-bottom, 0px));
        width: auto;
        max-width: none;
        max-height: 72vh;
        transform: translateY(8px) scale(0.98);
        transform-origin: 50% 100%;
        z-index: 1300;
    }

    .tips-bubble.open { transform: none; }

    /* 小屏不显示箭头 */
    .tips-bubble-arrow { display: none; }

    .tips-bubble-head { padding: 12px 15px; }
    .tips-title { font-size: 14.5px; }

    .tips-bubble-body { padding: 12px 15px 18px; }
    .tips-bubble-body h4 { font-size: 13px; margin: 14px 0 6px; }
    .tips-bubble-body p  { font-size: 12.5px; line-height: 1.8; }
    .tips-note { font-size: 11px; }
}

/* ==================== 评论抽屉 ==================== */
.cm-drawer{
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    z-index: 1410;
    width: min(100vw, 480px);
    display: flex;
    flex-direction: column;
    background: #fff;
    box-shadow: -10px 0 40px rgba(0, 0, 0, .2);
    transform: translateX(100%);
    visibility: hidden;                             /* 新增 */
    transition: transform .3s cubic-bezier(.2, .8, .3, 1),
                visibility 0s linear .3s;           /* 新增：延迟到动画结束 */
    -webkit-tap-highlight-color: transparent;
}

.cm-drawer.open{
    transform: none;
    visibility: visible;                            /* 新增 */
    transition: transform .3s cubic-bezier(.2, .8, .3, 1),
                visibility 0s;                      /* 新增：打开时立即显示 */
}

/* ---------- 头部 ---------- */
.cm-head{
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: calc(env(safe-area-inset-top, 0px) + 16px) 18px 14px;
    background: #fff;
    border-bottom: 1px solid #f0f0f0;
}

.cm-title{
    margin: 0;
    font-size: 16px;
    font-weight: 700;
    color: #1f1f1f;
    letter-spacing: .3px;
}

.cm-num{
    margin-left: 3px;
    font-size: 16px;
    font-weight: 700;
    color: #1f1f1f;
    font-variant-numeric: tabular-nums;
}

.cm-close{
    width: 30px; height: 30px;
    flex-shrink: 0;
    display: flex; align-items: center; justify-content: center;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: transparent;
    color: #888;
    cursor: pointer;
    transition: background-color .18s, color .18s, transform .15s;
}
.cm-close:hover{ background: #f5f5f5; color: #333; }
.cm-close:active{ transform: scale(.94); }
.cm-close:focus-visible{ outline: 2px solid #ffb494; outline-offset: 2px; }
.cm-close svg{
    width: 17px; height: 17px;
    stroke: currentColor; stroke-width: 2.2;
    stroke-linecap: round; fill: none;
}

/* ---------- 发表评论区 ---------- */
.cm-editor{
    flex: 0 0 auto;
    display: flex;
    gap: 12px;
    padding: 16px 18px 14px;
    background: #fff;
    border-bottom: 1px solid #f2f2f2;
}

.cm-my-avatar{
    width: 38px; height: 38px;
    flex-shrink: 0;
    border-radius: 50%;
    object-fit: cover;
    background: #f2f2f2;
}

.cm-editor-main{
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

/* 回复提示 */
.cm-reply-tip{
    display: none;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    padding: 5px 10px;
    border-radius: 6px;
    background: #fff6f2;
    font-size: 12px;
    color: #ff6633;
}
.cm-reply-tip.show{ display: flex; }
.cm-reply-tip b{ font-weight: 700; }

.cm-reply-tip button{
    width: 18px; height: 18px;
    flex-shrink: 0;
    display: flex; align-items: center; justify-content: center;
    padding: 0; border: none; border-radius: 50%;
    background: transparent; color: #ff6633;
    cursor: pointer;
    transition: background-color .18s;
}
.cm-reply-tip button:hover{ background: rgba(255,102,51,.14); }
.cm-reply-tip button svg{
    width: 11px; height: 11px;
    stroke: currentColor; stroke-width: 2.4;
    stroke-linecap: round; fill: none;
}

/* 输入框 */
.cm-textarea{
    width: 100%;
    min-height: 78px;
    max-height: 180px;
    padding: 12px 14px;
    border: 1px solid #ececec; 
    background-color:hsla(0,0%,71%,.1);
    border-radius: 10px;
    font-family: inherit;
    font-size: 13.5px;
    line-height: 1.7;
    color: #1a1a1a;
    resize: none;
    outline: none;
    transition: border-color .2s, box-shadow .2s, background-color .2s;
}
.cm-textarea:focus{
    border-color: #ffb494;
    background: #fff;
    box-shadow: 0 0 0 3px rgba(255, 102, 51, .1);
}
.cm-textarea::placeholder{ color: #b5b5b5; }

/* 底部操作 */
.cm-editor-foot{
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
}

.cm-tip{
    font-size: 12px;
    color: #22c55e;
    opacity: 0;
    transition: opacity .2s;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.cm-tip.show{ opacity: 1; }
.cm-tip.error{ color: #ff3b30; }

.cm-submit{
    flex-shrink: 0;
    height: 30px;
    padding: 0 15px;
    border: none;
    border-radius: 18px;
    background: linear-gradient(135deg, #ff8a3d 0%, #ff6633 100%);
    color: #fff;
    font-family: inherit;
    font-size: 13.5px;
    font-weight: 700;
    letter-spacing: .3px;
    cursor: pointer; 
    transition: filter .18s, transform .15s, box-shadow .18s;
}
.cm-submit:hover{
    filter: brightness(1.05); 
}
.cm-submit:active{ transform: scale(.97); }
.cm-submit:focus-visible{ outline: 2px solid #ffb494; outline-offset: 2px; }
.cm-submit:disabled{
    opacity: .6;
    cursor: default;
    filter: none;
    box-shadow: none;
    transform: none;
}

/* ---------- 评论列表 ---------- */
.cm-body{
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
    padding: 18px 18px calc(24px + env(safe-area-inset-bottom, 0px));
    background: #fff;
    scrollbar-width: thin;
    scrollbar-color: #e5e5e5 transparent;
}
.cm-body::-webkit-scrollbar{ width: 5px; }
.cm-body::-webkit-scrollbar-track{ background: transparent; }
.cm-body::-webkit-scrollbar-thumb{
    background: #e5e5e5; border-radius: 4px;
}
.cm-body::-webkit-scrollbar-thumb:hover{ background: #d0d0d0; }

/* 加载 / 空状态 */
.cm-state{
    padding: 70px 20px;
    text-align: center;
    font-size: 13.5px;
    color: #9aa0a6;
    line-height: 1.8;
}
.cm-state .spinner{
    display: inline-block;
    width: 13px; height: 13px;
    margin-right: 7px;
    vertical-align: -2px;
    border: 2px solid #ffd9c9;
    border-top-color: #ff6633;
    border-radius: 50%;
    animation: search-spin .7s linear infinite;
}

/* ---------- 单条评论 ---------- */
.cm-item{
    display: flex;
    gap: 15px;
    padding: 16px 3px;
    border-bottom: 1px solid #f5f5f5;
}
.cm-item:last-child{ border-bottom: none; }

.cm-avatar{
    width: 38px; height: 38px;
    flex-shrink: 0;
    border-radius: 50%;
    object-fit: cover;
    background: #f2f2f2;
}

.cm-main{
    flex: 1;
    min-width: 0;
}

/* 用户信息行 */
.cm-user-row{
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
    margin-bottom: 6px;
    font-size: 12.5px;
}

.cm-user{
    font-size: 13px;
    font-weight: 600;
    color: #555;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 130px;
}

.cm-time{
    color: #a8adb4;
    font-variant-numeric: tabular-nums;
}

.cm-op{
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 0;
    border: none;
    background: transparent;
    color: #a8adb4;
    font-family: inherit;
    font-size: 12.5px;
    cursor: pointer;
    transition: color .18s;
}
.cm-op:hover{ color: #ff6633; }
.cm-op:focus-visible{ outline: 2px solid #ffb494; outline-offset: 2px; }
.cm-op svg{
    width: 13px; height: 13px;
    stroke: currentColor; stroke-width: 1.9;
    stroke-linecap: round; stroke-linejoin: round; fill: none;
}

/* 评论内容 */
.cm-text{
    font-size: 13.5px;
    line-height: 1.75;
    color: #333;
    text-align: justify;
    word-break: break-word;
    white-space: pre-wrap;
}

/* ---------- 二级回复 ---------- */
.cm-replies{
    margin-top: 12px;
    padding: 10px 12px;
    border-radius: 10px;
    background: #fafafa;
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.cm-reply{
    display: flex;
    gap: 9px;
    font-size: 13px;
    line-height: 1.7;
}

.cm-reply-avatar{
    width: 26px; height: 26px;
    flex-shrink: 0;
    border-radius: 50%;
    object-fit: cover;
    background: #ececec;
}

.cm-reply-body{ flex: 1; min-width: 0; }

.cm-reply-head{
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
    margin-bottom: 3px;
    font-size: 12px;
}
.cm-reply-name{
    font-size: 12.5px;
    font-weight: 600;
    color: #555;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 120px;
}
.cm-reply-time{ color: #a8adb4; }

.cm-reply-text{
    color: #444;
    word-break: break-word;
    white-space: pre-wrap;
}
.cm-reply-text .at{
    color: #ff6633;
    font-weight: 600;
}
.cm-loadmore
{
    display: flex;
    justify-content: center;
    margin-top: 15px;
}
.cm-loadmore button
{
     display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    font-size: 12px;
    border-radius: 23px;
    height: 32px;
    padding: 0 15px; 
    cursor: pointer;
    border: none;
    font-family: inherit;
    white-space: nowrap;
    transition: all 0.2s;
    background-color: #fff;
    color: #565656;
    border: 1px solid #e5e5e5;
}
/* ---------- 小屏 ---------- */
@media (max-width: 768px){
    .cm-drawer{ width: 100vw; }

    .cm-head{ padding-left: 14px; padding-right: 14px; }
    .cm-title{ font-size: 15.5px; }
    .cm-num{ font-size: 15.5px; }

    .cm-editor{ padding: 14px 14px 12px; gap: 10px; }
    .cm-my-avatar{ width: 34px; height: 34px; }
    .cm-textarea{ font-size: 13px; min-height: 72px; }

    .cm-body{ padding: 14px 14px calc(22px + env(safe-area-inset-bottom, 0px)); }
    .cm-avatar{ width: 34px; height: 34px; }

    .cm-text{ font-size: 13px; }
}

/* 全局 spinner 复用 */
@keyframes search-spin{ to{ transform: rotate(360deg); } }


/* ==================== 分享弹窗 ==================== */
.share-overlay{
    position: fixed;
    inset: 0;
    z-index: 1250;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 34px 22px;
    pointer-events: none;
    opacity: 0;
    visibility: hidden;
    transition: opacity .24s ease, visibility .24s ease;
}
.share-overlay.open{ opacity: 1; visibility: visible; }

.share-modal{
    pointer-events: auto;
    position: relative;
    width: 100%;
    max-width: 340px;
    max-height: calc(100vh - 68px);
    display: flex;
    flex-direction: column;
    padding: 26px 24px 22px;
    background: #fff;
    border-radius: 18px;
    box-shadow: 0 24px 64px rgba(0, 0, 0, .24);
    transform: translateY(-16px) scale(.97);
    transition: transform .26s cubic-bezier(.2, .8, .3, 1);
}
.share-overlay.open .share-modal{ transform: none; }

/* ---------- 关闭按钮 ---------- */
.share-close{
    position: absolute;
    top: 14px; right: 14px;
    width: 30px; height: 30px;
    display: flex; align-items: center; justify-content: center;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: #f5f5f5;
    color: #888;
    cursor: pointer;
    transition: background-color .18s, color .18s, transform .15s;
}
.share-close:hover{ background: #ffece4; color: #ff6633; }
.share-close:active{ transform: scale(.94); }
.share-close:focus-visible{ outline: 2px solid #ffb494; outline-offset: 2px; }
.share-close svg{
    width: 13px; height: 13px;
    stroke: currentColor; stroke-width: 2.4;
    stroke-linecap: round; fill: none;
}

/* ---------- 头部 ---------- */
.share-head{
    padding-right: 36px;
    margin-bottom: 18px;
    text-align: left;
}
.share-title{
    font-size: 17px;
    font-weight: 700;
    color: #1f1f1f;
    line-height: 1.35;
    margin-bottom: 5px;
}
.share-sub{
    font-size: 12px;
    color: #9aa0a6;
    line-height: 1.5;
}

/* ---------- 二维码 ---------- */
.share-qr{
    width: 180px;
    height: 180px;
    margin: 0 auto 16px;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 8px;
    border: 1px solid #ececec;
    border-radius: 12px;
    background: #fff;
    box-shadow: 0 2px 10px rgba(0, 0, 0, .03);
    overflow: hidden;
}
.share-qr img,
.share-qr canvas{
    display: block;
    width: 100% !important;
    height: 100% !important;
    object-fit: contain;
}
.share-qr-loading{
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 12.5px;
    color: #9aa0a6;
}
.share-qr-loading .spinner{
    width: 12px; height: 12px;
    border: 2px solid #ffd9c9;
    border-top-color: #ff6633;
    border-radius: 50%;
    animation: search-spin .7s linear infinite;
}

/* 回退二维码（CDN 失败时用） */
.share-qr-fallback{
    width: 100%; height: 100%;
    display: grid;
    grid-template-columns: repeat(21, 1fr);
    grid-template-rows: repeat(21, 1fr);
    background: #fff;
}
.share-qr-fallback i{ background: #1a1a1a; }

/* ---------- 链接 ---------- */
.share-link{
    display: flex;
    align-items: stretch;
    gap: 0;
    height: 40px;
    margin-bottom: 18px;
    border: 1px solid #e4e4e4;
    border-radius: 10px;
    background: #fafafa;
    overflow: hidden;
    transition: border-color .2s, box-shadow .2s;
}
.share-link:focus-within{
    border-color: #ffb494;
    background: #fffdfc;
    box-shadow: 0 0 0 3px rgba(255, 102, 51, .1);
}

.share-link-input{
    flex: 1;
    min-width: 0;
    height: 100%;
    padding: 0 12px;
    border: none;
    outline: none;
    background: transparent;
    font-family: inherit;
    font-size: 12.5px;
    color: #555;
    text-overflow: ellipsis;
}

.share-copy{
    flex-shrink: 0;
    padding: 0 16px;
    border: none;
    background: transparent;
    color: #ff6633;
    font-family: inherit;
    font-size: 13px;
    font-weight: 700;
    cursor: pointer;
    position: relative;
    transition: background-color .18s;
}
.share-copy::before{
    content: "";
    position: absolute;
    left: 0; top: 50%;
    width: 1px; height: 16px;
    margin-top: -8px;
    background: #ececec;
}
.share-copy:hover{ background: #fff3ee; }
.share-copy:active{ background: #ffe6dc; }
.share-copy:focus-visible{ outline: 2px solid #ffb494; outline-offset: -2px; }
.share-copy.done{ color: #22c55e; }



/* ---------- 小屏 ---------- */
@media (max-width: 768px){
    .share-overlay{ padding: 26px 18px; }

    .share-modal{
        max-width: 320px;
        padding: 22px 20px 18px;
        border-radius: 16px;
    }

    .share-title{ font-size: 16px; }
    .share-qr{ width: 160px; height: 160px; }
}

@keyframes search-spin{ to{ transform: rotate(360deg); } }



/* ==================== 谱集抽屉 ==================== */
.pl-drawer{
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    z-index: 1410;
    width: min(100vw, 420px);
    display: flex;
    flex-direction: column;
    background: #fff;
    box-shadow: -10px 0 40px rgba(0, 0, 0, .2);
    transform: translateX(100%);
    visibility: hidden;                             /* 新增 */
    transition: transform .3s cubic-bezier(.2, .8, .3, 1),
                visibility 0s linear .3s;           /* 新增 */
    -webkit-tap-highlight-color: transparent;
}

.pl-drawer.open{
    transform: none;
    visibility: visible;                            /* 新增 */
    transition: transform .3s cubic-bezier(.2, .8, .3, 1),
                visibility 0s;                      /* 新增 */
}

/* ---------- 头部 ---------- */
.pl-head{
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    gap: 12px;
    padding: calc(env(safe-area-inset-top, 0px) + 13px) 14px 13px;
    background: #291a3b;
    color: #fff;
}

.pl-back{
    width: 30px; height: 30px;
    flex-shrink: 0;
    display: flex; align-items: center; justify-content: center;
    padding: 0;
    border: none;
    border-radius: 8px;
    background: transparent;
    color: #fff;
    cursor: pointer;
    transition: background-color .18s, transform .15s;
}
.pl-back:hover{ background: rgba(255,255,255,.14); }
.pl-back:active{ transform: scale(.94); }
.pl-back:focus-visible{ outline: 2px solid #ffb494; outline-offset: 2px; }
.pl-back svg{
    width: 20px; height: 20px;
    stroke: currentColor; stroke-width: 2.2;
    stroke-linecap: round; stroke-linejoin: round; fill: none;
}

.pl-title{
    flex: 1;
    min-width: 0;
    margin: 0;
    font-size: 15.5px;
    font-weight: 600;
    letter-spacing: .3px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.pl-num{
    margin-left: 4px;
    color: #ff3b30;
    font-size: 16px;
    font-weight: 800;
    font-variant-numeric: tabular-nums;
}

.pl-clear{
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    gap: 5px;
    height: 30px;
    padding: 0 10px;
    border: none;
    border-radius: 8px;
    background: transparent;
    color: rgba(255,255,255,.78);
    font-family: inherit;
    font-size: 12.5px;
    font-weight: 500;
    white-space: nowrap;
    cursor: pointer;
    transition: background-color .18s, color .18s, transform .15s;
}
.pl-clear:hover{ background: rgba(255,255,255,.14); color: #fff; }
.pl-clear:active{ transform: scale(.95); }
.pl-clear:focus-visible{ outline: 2px solid #ffb494; outline-offset: 2px; }
.pl-clear svg{
    width: 14px; height: 14px;
    stroke: currentColor; stroke-width: 1.9;
    stroke-linecap: round; stroke-linejoin: round; fill: none;
}

/* ---------- 列表区 ---------- */
.pl-body{
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
    padding: 18px 14px 20px;
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 12px 8px;
    align-content: start;
    background: #fff;
    scrollbar-width: thin;
    scrollbar-color: #e5e5e5 transparent;
}
.pl-body::-webkit-scrollbar{ width: 5px; }
.pl-body::-webkit-scrollbar-track{ background: transparent; }
.pl-body::-webkit-scrollbar-thumb{
    background: #e5e5e5; border-radius: 4px;
}
.pl-body::-webkit-scrollbar-thumb:hover{ background: #d0d0d0; }

/* 空状态 */
.pl-empty{
    grid-column: 1 / -1;
    padding: 70px 20px;
    text-align: center;
    font-size: 13.5px;
    color: #9aa0a6;
    line-height: 1.8;
}

/* ---------- 卡片 ---------- */
.pl-item{
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    min-width: 0;
    padding: 8px 4px 10px;
    border-radius: 10px;
    background: transparent;
    border: none;
    font-family: inherit;
    text-align: center;
    cursor: pointer;
    transition: background-color .18s, transform .15s;
    -webkit-tap-highlight-color: transparent;
}
.pl-item:hover{ background: #fff6f2; }
.pl-item:active{ transform: scale(.97); }
.pl-item:focus-visible{ outline: 2px solid #ffb494; outline-offset: 2px; }

/* PDF 图标 */
.pl-doc{
    position: relative;
    width: 35px;
    height: 40px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
}
.pl-doc svg{
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    display: block;
}

.pl-pdf{
    position: relative;
    z-index: 1;
    margin-top: 2px;
    padding: 2px 6px;
    border-radius: 3px;
    background: #ef2b4f;
    color: #fff;
    font-size: 9.5px;
    font-weight: 800;
    letter-spacing: .4px;
    line-height: 1.25;
}

/* 标题 */
.pl-name{
    width: 100%;
    font-size: 12.5px;
    line-height: 1.45;
    color: #333;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    word-break: break-all;
    transition: color .18s;
}
.pl-item:hover .pl-name{ color: #ff6633; }

/* ---------- 底部 ---------- */
.pl-foot{
    flex: 0 0 auto;
    display: flex;
    gap: 12px;
    padding: 12px 14px calc(12px + env(safe-area-inset-bottom, 0px));
    background: #fafafa;
    border-top: 1px solid #f0f0f0;
}

.pl-btn{
    flex: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 7px;
    height: 42px;
    padding: 0 14px;
    border: none;
    border-radius: 9px;
    font-family: inherit;
    font-size: 14px;
    font-weight: 700;
    letter-spacing: .4px;
    cursor: pointer;
    white-space: nowrap;
    transition: filter .18s, transform .15s, box-shadow .18s, background-color .18s;
}
.pl-btn:active{ transform: scale(.98); }
.pl-btn:focus-visible{ outline: 2px solid #ffb494; outline-offset: 2px; }
.pl-btn svg{
    width: 16px; height: 16px;
    flex-shrink: 0;
    stroke: currentColor; stroke-width: 2.2;
    stroke-linecap: round; stroke-linejoin: round; fill: none;
}

.pl-btn--ghost,
.pl-btn--primary{
    background: linear-gradient(135deg, #ff8a3d 0%, #ff6633 100%);
    color: #fff;
    box-shadow: 0 4px 12px rgba(255, 102, 51, .26);
}
.pl-btn--ghost:hover,
.pl-btn--primary:hover{
    filter: brightness(1.05);
    box-shadow: 0 6px 16px rgba(255, 102, 51, .36);
}
.pl-btn:disabled{
    opacity: .55;
    cursor: default;
    filter: none;
    box-shadow: none;
}

/* ---------- 小屏 ---------- */
@media (max-width: 640px){
    .pl-drawer{ width: 100vw; }

    .pl-body{
        grid-template-columns: repeat(4, minmax(0, 1fr));
        gap: 16px 6px;
        padding: 14px 10px 18px;
    }

    .pl-head{ padding-left: 10px; padding-right: 10px; gap: 8px; }
    .pl-title{ font-size: 15px; }
    .pl-clear span{ display: none; }
    .pl-clear{ padding: 0 8px; }

    .pl-foot{
        gap: 10px;
        padding: 10px 12px calc(10px + env(safe-area-inset-bottom, 0px));
    }
    .pl-btn{ height: 40px; font-size: 13.5px; }

    .pl-doc{ width: 34px; height: 42px; }
    .pl-pdf{ font-size: 9px; padding: 2px 5px; }
    .pl-name{ font-size: 12px; }
}

@media (max-width: 360px){
    .pl-body{ grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

.fs-viewer{
    position: fixed;
    inset: 0;
    z-index: 2000;
    display: flex;
    flex-direction: column;
    background: #ececec;
    opacity: 0;
    visibility: hidden;
    transition: opacity .22s ease, visibility .22s ease;
    -webkit-tap-highlight-color: transparent;
    overscroll-behavior: none;     
}
.fs-viewer.open{ opacity: 1; visibility: visible; }

/* ---------- 顶栏 ---------- */
.fs-bar{
    position: relative;
    z-index: 3;
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    height: calc(50px + env(safe-area-inset-top, 0px));
    padding: env(safe-area-inset-top, 0px) 12px 0;
    background: rgba(255,255,255,.94);
    -webkit-backdrop-filter: blur(12px);
    backdrop-filter: blur(12px);
    border-bottom: 1px solid rgba(0,0,0,.06);
    transition: transform .26s ease, opacity .26s ease;
}

.fs-viewer.bar-hidden .fs-bar{
    transform: translateY(-100%);
    opacity: 0;
    pointer-events: none;
}

.fs-count{
    font-size: 13px;
    font-weight: 600;
    color: #555;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.fs-tools{ display: flex; align-items: center; gap: 8px; }

.fs-btn{
    min-width: 34px;
    height: 34px;
    padding: 0 9px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: none;
    border-radius: 9px;
    background: #f4f4f4;
    color: #555;
    font-family: inherit;
    font-size: 14px;
    font-weight: 600;
    line-height: 1;
    cursor: pointer;
    transition: background-color .18s, color .18s, transform .15s;
}
.fs-btn:hover{ background: #ffece4; color: #ff6633; }
.fs-btn:active{ transform: scale(.95); }
.fs-btn:focus-visible{ outline: 2px solid #ffb494; outline-offset: 2px; }

.fs-btn--pct{ min-width: 56px; font-size: 12.5px; font-variant-numeric: tabular-nums; }

.fs-btn--close{ background: #2b2b2b; color: #fff; }
.fs-btn--close:hover{ background: #111; color: #fff; }
.fs-btn--close svg{
    width: 15px; height: 15px;
    stroke: currentColor; stroke-width: 2.4;
    stroke-linecap: round; fill: none;
}

/* ---------- 滚动区 ---------- */
.fs-scroll{
    position: relative;
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    overflow-x: auto;
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
}

.fs-list{
    --fsz: 1;
    padding: 10px 10px calc(60px + env(safe-area-inset-bottom, 0px));
    min-height: 100%;
}

.fs-fig{
    width: calc(min(100%, 1100px) * var(--fsz, 1));
    margin: 0 auto 8px;
    background: #fff;
    border-radius: 6px;
    overflow: hidden;
    box-shadow: 0 1px 4px rgba(0,0,0,.1);
}
.fs-fig:last-child{ margin-bottom: 0; }

.fs-fig img{
    display: block;
    width: 100%;
    height: auto;
    -webkit-user-drag: none;
    user-select: none;
}

/* ---------- 顶部进度条 ---------- */
.fs-progress{
    position: absolute;
    top: 0; left: 0; right: 0;
    height: 2px;
    z-index: 5;
    pointer-events: none;
}
.fs-progress i{
    display: block;
    height: 100%;
    width: 0;
    background: linear-gradient(90deg, #ff8a3d, #ff6633);
    transition: width .1s linear;
}

/* ---------- 回到顶部 ---------- */
.fs-top{
    position: absolute;
    right: 16px;
    bottom: calc(20px + env(safe-area-inset-bottom, 0px));
    z-index: 6;
    width: 44px; height: 44px;
    display: flex; align-items: center; justify-content: center;
    padding: 0; border: none; border-radius: 50%;
    background: rgba(255,255,255,.94);
    color: #555;
    cursor: pointer;
    box-shadow: 0 4px 14px rgba(0,0,0,.16);
    opacity: 0; visibility: hidden; transform: translateY(10px);
    transition: opacity .2s, visibility .2s, transform .2s,
                background-color .2s, color .2s;
}
.fs-top.show{ opacity: 1; visibility: visible; transform: none; }
.fs-top:hover{ background: #ff6633; color: #fff; }
.fs-top:active{ transform: scale(.94); }
.fs-top:focus-visible{ outline: 2px solid #ffb494; outline-offset: 2px; }
.fs-top svg{
    width: 20px; height: 20px;
    stroke: currentColor; stroke-width: 2.2;
    stroke-linecap: round; stroke-linejoin: round; fill: none;
}

/* ---------- 小屏 ---------- */
@media (max-width: 768px){
    .fs-bar{
        height: calc(46px + env(safe-area-inset-top, 0px));
        padding-left: 10px; padding-right: 10px;
    }
    .fs-btn{ min-width: 32px; height: 32px; font-size: 13px; }
    .fs-btn--pct{ min-width: 50px; font-size: 12px; }
    .fs-count{ font-size: 12.5px; }

    .fs-list{ padding: 6px 6px calc(56px + env(safe-area-inset-bottom, 0px)); }
    .fs-fig{ margin-bottom: 6px; border-radius: 4px; }

    .fs-top{ width: 40px; height: 40px; right: 12px; }
    .fs-top svg{ width: 18px; height: 18px; }
}

/* ==================== 滚动设置面板 ==================== */
.fs-panel{
    position: absolute;
    top: calc(58px + env(safe-area-inset-top, 0px));
    right: 12px;
    z-index: 10;
    width: min(calc(100vw - 24px), 300px);
    padding: 14px 16px 16px;
    border-radius: 14px;
    background: #fff;
    box-shadow: 0 16px 44px rgba(0,0,0,.18),
                0 0 0 1px rgba(0,0,0,.04);
    opacity: 0;
    visibility: hidden;
    transform: translateY(-8px) scale(.97);
    transform-origin: 100% 0;
    transition: opacity .2s ease,
                visibility .2s ease,
                transform .22s cubic-bezier(.2,.8,.3,1);
    pointer-events: none;
}
.fs-panel.open{
    opacity: 1;
    visibility: visible;
    transform: none;
    pointer-events: auto;
}

/* ---------- 头部 ---------- */
.fs-panel-head{
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-bottom: 14px;
}
.fs-panel-title{
    font-size: 14.5px;
    font-weight: 700;
    color: #1f1f1f;
}
.fs-panel-close{
    width: 26px; height: 26px;
    display: flex; align-items: center; justify-content: center;
    padding: 0; border: none; border-radius: 50%;
    background: #f5f5f5; color: #888;
    cursor: pointer;
    transition: background-color .18s, color .18s, transform .15s;
}
.fs-panel-close:hover{ background: #ffece4; color: #ff6633; }
.fs-panel-close:active{ transform: scale(.94); }
.fs-panel-close svg{
    width: 12px; height: 12px;
    stroke: currentColor; stroke-width: 2.4;
    stroke-linecap: round; fill: none;
}

/* ---------- 速度行 ---------- */
.fs-row{
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 10px;
    margin-bottom: 6px;
}
.fs-row-label{ font-size: 12.5px; color: #888; }
.fs-speed-val{ font-size: 12px; color: #ff6633; font-weight: 600; }
.fs-speed-val b{ font-size: 15px; font-variant-numeric: tabular-nums; }

/* ---------- 滑杆 ---------- */
.fs-range{
    -webkit-appearance: none;
    appearance: none;
    display: block;
    width: 100%;
    height: 4px;
    margin: 6px 0 14px;
    border-radius: 2px;
    background: #f0f0f0;
    outline: none;
    cursor: pointer;
}
.fs-range::-webkit-slider-thumb{
    -webkit-appearance: none;
    appearance: none;
    width: 18px; height: 18px;
    border-radius: 50%;
    background: linear-gradient(135deg, #ff8a3d, #ff6633);
    border: 2px solid #fff;
    box-shadow: 0 2px 6px rgba(255,102,51,.45);
    cursor: pointer;
    transition: transform .15s;
}
.fs-range::-webkit-slider-thumb:active{ transform: scale(1.12); }
.fs-range::-moz-range-thumb{
    width: 18px; height: 18px;
    border-radius: 50%;
    background: linear-gradient(135deg, #ff8a3d, #ff6633);
    border: 2px solid #fff;
    box-shadow: 0 2px 6px rgba(255,102,51,.45);
    cursor: pointer;
}

/* ---------- 快捷速度 ---------- */
.fs-quick{
    display: flex;
    gap: 6px;
    margin-bottom: 14px;
}
.fs-quick-btn{
    flex: 1;
    height: 30px;
    border: 1px solid #ececec;
    border-radius: 8px;
    background: #fff;
    color: #666;
    font-family: inherit;
    font-size: 12.5px;
    font-weight: 600;
    cursor: pointer;
    transition: border-color .18s, color .18s, background-color .18s, transform .15s;
}
.fs-quick-btn:hover{ border-color: #ffd2c2; color: #ff6633; }
.fs-quick-btn:active{ transform: scale(.96); }
.fs-quick-btn.active{
    background: #fff6f2;
    border-color: #ffb494;
    color: #ff6633;
}

/* ---------- 循环勾选 ---------- */
.fs-check{
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 14px;
    font-size: 12.5px;
    color: #666;
    line-height: 1.4;
    cursor: pointer;
    user-select: none;
    -webkit-user-select: none;
}
.fs-check input{
    -webkit-appearance: none;
    appearance: none;
    flex-shrink: 0;
    width: 16px; height: 16px;
    margin: 0;
    border: 1.5px solid #d4d4d4;
    border-radius: 5px;
    background: #fff;
    position: relative;
    cursor: pointer;
    transition: background .18s, border-color .18s;
}
.fs-check input:checked{
    background: linear-gradient(135deg, #ff8a3d, #ff6633);
    border-color: transparent;
}
.fs-check input:checked::after{
    content: "";
    position: absolute;
    left: 4.6px; top: 1.2px;
    width: 4px; height: 8px;
    border: solid #fff;
    border-width: 0 2px 2px 0;
    transform: rotate(45deg);
}

/* ---------- 开始/暂停主按钮 ---------- */
.fs-scroll-btn{
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    width: 100%;
    height: 42px;
    border: none;
    border-radius: 10px;
    background: linear-gradient(135deg, #ff8a3d 0%, #ff6633 100%);
    color: #fff;
    font-family: inherit;
    font-size: 14px;
    font-weight: 700;
    letter-spacing: .5px;
    cursor: pointer;
    box-shadow: 0 4px 12px rgba(255,102,51,.26);
    transition: filter .18s, transform .15s, box-shadow .18s,
                background .2s;
}
.fs-scroll-btn:hover{
    filter: brightness(1.05);
    box-shadow: 0 6px 16px rgba(255,102,51,.36);
}
.fs-scroll-btn:active{ transform: scale(.98); }
.fs-scroll-btn:focus-visible{ outline: 2px solid #ffb494; outline-offset: 2px; }

.fs-scroll-btn svg{
    width: 15px; height: 15px;
    flex-shrink: 0;
    fill: currentColor;
}
.fs-scroll-btn .ico-pause{ display: none; }
.fs-scroll-btn.playing{ background: #1f1f1f; box-shadow: 0 4px 12px rgba(0,0,0,.22); }
.fs-scroll-btn.playing .ico-play{ display: none; }
.fs-scroll-btn.playing .ico-pause{ display: block; }

/* ---------- 小屏 ---------- */
@media (max-width: 768px){
    .fs-panel{
        top: calc(52px + env(safe-area-inset-top, 0px));
        right: 8px;
        left: 8px;
        width: auto;
        padding: 13px 14px 15px;
        border-radius: 12px;
    }
    .fs-panel-title{ font-size: 14px; }
    .fs-scroll-btn{ height: 40px; font-size: 13.5px; }
    .fs-quick-btn{ height: 28px; font-size: 12px; }
}

/* 滚屏进行中：柔和提示 */
.fs-viewer.scrolling .fs-progress i{
    background: linear-gradient(90deg, #ff6633, #ffb494, #ff6633);
    background-size: 200% 100%;
    animation: fs-flow 1.6s linear infinite;
}
@keyframes fs-flow{
    from{ background-position: 0 0; }
    to  { background-position: -200% 0; }
}

.uc-layout {
    width: 88%;
    margin: 0 auto;
    display: flex;
    flex-direction: column;
    gap: 18px;
    min-height: 620px;
}
 
.uc-panel {
    flex: 1;
    min-width: 0;
    background: #fff;
    border: 1px solid #f1f1f1;
    border-radius: 16px;
    overflow: hidden;
    min-height: 560px;
}

.uc-view { display: none; padding: 26px 28px; }
.uc-view.active { display: block; }

.uc-view-head { margin-bottom: 22px; }
.uc-view-head h2 {
    font-size: 18px; font-weight: 700; color: #1f1f1f;
    margin-bottom: 4px;
}
.uc-view-head p { font-size: 13px; color: #333333; }

@media (max-width: 768px) { 
    .uc-view { padding: 20px 16px; }
    .uc-panel { min-height: auto; }

}

    /* ----- 用户信息横条 ----- */
.uc-user-bar {
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 18px 22px;
    background: #fff;
    border: 1px solid #f1f1f1;
    border-radius: 16px;
}

/* 头像 */
.uc-avatar {
    width: 56px;
    height: 56px;
    border-radius: 50%;
    object-fit: cover;
    flex-shrink: 0;
    background: #eee;
    border: 2px solid #fff;
    box-shadow: 0 2px 10px rgba(255, 102, 51, 0.18);
}

/* 文本区 */
.uc-user-info {
    min-width: 0;
    flex: 1;
}

/* 用户名 + 编辑资料 一行 */
.uc-user-name-row {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 4px;
}

/* 用户名 */
.uc-user-name {
    font-size: 17px;
    font-weight: 700;
    color: #222;
    min-width: 0;              /* 让 flex 内的省略号生效 */
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* ID / 注册时间 */
.uc-user-id {
    font-size: 12.5px;
    color: #b0b4ba;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* ----- 编辑资料：纯文字小链接 + 图标 ----- */
.uc-edit-link {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: 12px;
    font-weight: 400;
    line-height: 1;
    color: #b0b4ba;
    text-decoration: none;
    white-space: nowrap;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
    transition: color .18s ease;
}

.uc-edit-link svg {
    width: 12px;
    height: 12px;
    flex-shrink: 0;
}

.uc-edit-link:hover,
.uc-edit-link.active {
    color: #ff6633;
}

/* ----- 右侧操作按钮组 ----- */
.uc-user-actions {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    gap: 10px;
}

 
.uc-edit-btn {
    /* 布局 */
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;

    /* 尺寸 */
    height: 36px;
    padding: 0 18px;
    box-sizing: border-box;

    /* 外形 */
    border: 1px solid #e5e5e5;
    border-radius: 18px;
    background: #fff;
    color: #555;

    /* 文字 */
    font-size: 13px;
    font-weight: 500;
    line-height: 1;
    white-space: nowrap;
    text-decoration: none;

    /* 交互 */
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
    transition: color .18s ease, border-color .18s ease, background .18s ease;
}

.uc-edit-btn svg {
    width: 15px;
    height: 15px;
    flex-shrink: 0;
}

.uc-edit-btn:hover,
.uc-edit-btn.active {
    color: #ff6633;
    border-color: #ff6633;
}

.uc-edit-btn:active {
    transform: scale(0.97);
}
/* ----- 顶部 Tab 菜单 ----- */
.uc-tabs {
    display: none;
    flex-wrap: nowrap;      /* 不允许换行 */
    gap: 6px;
    padding: 6px;
    background: #fff;
    border: 1px solid #f1f1f1;
    border-radius: 14px;
    /* 去掉 overflow-x/overflow-y，交给子项平分 */
}

.uc-tab {
    flex: 1 1 0;            /* 关键：每个 Tab 平分剩余宽度 */
    min-width: 0;           /* 允许被压缩 */
    display: flex;
    align-items: center;
    justify-content: center;/* 内容居中 */
    gap: 6px;
    padding: 9px 8px;       
    border-radius: 10px;
    color: #666;
    font-size: 14px;
    font-weight: 500;
    cursor: pointer; 
    white-space: nowrap;
    position: relative;
    overflow: hidden;       
}

.uc-tab svg {
    width: 16px;
    height: 16px;
    stroke: currentColor;
    stroke-width: 2;
    fill: none;
    flex-shrink: 0;         /* 图标不被压缩 */
    stroke-linecap: round;
    stroke-linejoin: round;
}

.uc-tab.active {
    background: linear-gradient(135deg, #ff8a3d 0%, #ff6633 100%);
    color: #fff;
    font-weight: 600;
    box-shadow: 0 3px 10px rgba(255, 102, 51, 0.24);
}
@media (max-width: 768px) {

    .uc-layout {
        width: 98%;
        margin-bottom: 80px;
    }
 
    .uc-user-bar {
        flex-wrap: wrap;
        align-items: center;
        padding: 14px 16px;
        gap: 10px 12px;
    }

    .uc-avatar {
        width: 46px;
        height: 46px;
    }

    .uc-user-info {
        flex: 1 1 auto;
        width: calc(100% - 58px);
    }

    .uc-user-name { font-size: 15px; }
    .uc-user-id   { font-size: 11.5px; }
 
    .uc-edit-link {
        font-size: 11.5px;
        gap: 3px;
    }
    .uc-edit-link svg {
        width: 11px;
        height: 11px;
    }
 
    .uc-user-actions {
        width: 100%;
        gap: 8px;
        margin-top: 2px;
    }

    .uc-edit-btn {
        flex: 1 1 0;
        height: 34px;
        padding: 0 12px;
        font-size: 12.5px;
        border-radius: 17px;
        gap: 5px;
    }

    .uc-edit-btn svg {
        width: 14px;
        height: 14px;
    }

    /* 其它分页元素 */
    .uc-tabs {display: flex; padding: 5px; gap: 4px; }
    .uc-tab { padding: 9px 13px; font-size: 13px; }
    .uc-tab svg { width: 15px; height: 15px; }
    .uc-tab span { display:none }
}

.uc-list{
  display:flex;
  flex-direction:column;
  gap:10px;
}

/* 卡片：只管边框 / 阴影 / 圆角 */
.uc-list-item{
  border:1px solid #f1f1f1;
  border-radius:12px;
  background:#fff;
  transition:border-color .2s, box-shadow .2s, transform .2s;
}
.uc-list-item:hover{
  border-color:#f4e2d9;
  box-shadow:0 6px 18px rgba(0,0,0,.05);
  transform:translateY(-1px);
}

/* 真正的 flex 行在这里 */
.uc-list-link{
  display:flex;
  align-items:center;
  gap:14px;
  padding:14px 16px;
  color:inherit;
  text-decoration:none;
  border-radius:12px;
}
.uc-list-link:focus-visible{
  outline:2px solid #e8663a;
  outline-offset:2px;
}

.uc-list-thumb{
  width:104px;
  height:64px;
  flex:0 0 auto;
  display:block;
  border-radius:10px;
  object-fit:cover;
  background:#f2f2f2;
  transition:transform .25s;
}
.uc-list-item:hover .uc-list-thumb{ transform:scale(1.04); }

.uc-list-body{
  flex:1 1 auto;
  min-width:0;             
}

.uc-list-title{
  font-size:15px;
  font-weight:600;
  line-height:1.4;
  color:#333333;
  margin-bottom:12px;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  transition:color .2s;
}
.uc-list-item:hover .uc-list-title{ color:#e8663a; }

.uc-list-desc{
  font-size:12px;
  line-height:1.5;
  color:#888888;
  display:-webkit-box;
  -webkit-line-clamp:1;        /* 想要两行就改成 2 */
  -webkit-box-orient:vertical;
  overflow:hidden;
}

.uc-list-meta{
  flex:0 0 auto;
  display:flex;
  align-items:center;
  gap:8px;
  font-size:12px;
  line-height:1;
  color:#888888;
  white-space:nowrap;
  font-variant-numeric:tabular-nums;  /* 数字等宽，阅读量对齐更整齐 */
}
.uc-list-meta > span:nth-child(2){ opacity:.5; }


@media (prefers-reduced-motion:reduce){
  .uc-list-item,
  .uc-list-thumb,
  .uc-list-title{ transition:none; }
  .uc-list-item:hover{ transform:none; }
}

/* ----- 空状态提示 ----- */
.uc-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    text-align: center;
    padding: 56px 20px 64px;
}

/* 图标外圈 */
.uc-empty-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 72px;
    height: 72px;
    margin-bottom: 18px;
    border-radius: 50%;
    background: #fff6f2;
    color: #ff6633;
}

.uc-empty-icon svg {
    width: 34px;
    height: 34px;
}

/* 标题 */
.uc-empty-title {
    font-size: 15px;
    font-weight: 600;
    color: #333;
    margin-bottom: 15px;
}

/* 说明文字 */
.uc-empty-desc {
    font-size: 13px;
    line-height: 1.6;
    color: #b0b4ba;
    white-space: nowrap;  
    margin-bottom: 20px;
}

/* 行动按钮 */
.uc-empty-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    height: 36px;
    padding: 0 22px;
    border-radius: 18px;
    background: #ff6633;
    color: #fff;
    font-size: 13px;
    font-weight: 500;
    line-height: 1;
    text-decoration: none;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
    transition: opacity .18s ease, transform .18s ease;
}

.uc-empty-btn:hover {
    opacity: .9;
}

.uc-empty-btn:active {
    transform: scale(0.97);
}

@media (max-width:768px){
  .uc-list-link{ gap:12px; padding:12px; }
  .uc-list-thumb{ width:90px; height:56px; border-radius:8px; }
  .uc-list-title{ font-size:14px; }

  .uc-list-meta{ display:none; }

    .uc-empty {
        padding: 40px 16px 48px;
    }
    .uc-empty-icon {
        width: 62px;
        height: 62px;
        margin-bottom: 14px;
    }
    .uc-empty-icon svg {
        width: 28px;
        height: 28px;
    }
    .uc-empty-title {
        font-size: 14px;
    }
    .uc-empty-desc {
        font-size: 12.5px;
        max-width: 220px;
        margin-bottom: 16px;
    }
    .uc-empty-btn {
        height: 34px;
        padding: 0 18px;
        font-size: 12.5px;
        border-radius: 17px;
    }
}

/* 评论 */
.comment-item {
    padding: 16px;
    border: 1px solid #f1f1f1;
    border-radius: 12px;
}
.comment-title { font-size: 13px; color: #333333; margin-bottom: 8px; }

.comment-title span {color: #898989}
.comment-text { font-size: 14px; color: #333; line-height: 1.65;  }

.order-item{
  padding: 16px;
  border: 1px solid #f1f1f1;
  border-radius: 12px;
  background: #fff;
  transition: border-color .2s, box-shadow .2s;
}
.order-item:hover{
  border-color: #f4e2d9;
  box-shadow: 0 6px 18px rgba(0,0,0,.05);
}

/* 订单头 */
.order-head{
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  padding-bottom: 10px;
  margin-bottom: 12px;
  border-bottom: 1px dashed #f3f3f3;
  font-size: 12.5px;
  color: #8a8a8a;
}
.order-no{
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}

/* 状态：两种颜色 */
.order-status {
  display:inline-flex; align-items:center; gap:5px;
  flex:0 0 auto; font-weight:600;
}
.order-status-dot {
  width:6px; height:6px; border-radius:50%;
  background:#b0b4ba;
}
.order-status-success .order-status-dot {
  background:#19be6b;
  box-shadow:0 0 0 2px rgba(25,190,107,.18);
}
.order-status-pending .order-status-dot {
  background:#ff9a00;
  box-shadow:0 0 0 2px rgba(255,154,0,.18);
}

.order-status-success { color:#19be6b; }
.order-status-pending { color:#ff9a00; }

/* 订单体 */
.order-body{
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
}
.order-body .uc-list-link{
  flex: 1;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 0;
  color: inherit;
  text-decoration: none;
}
.order-body .uc-list-body{ flex: 1; min-width: 0; }
.order-body .uc-list-title{ margin-bottom: 4px; }
.order-body .uc-list-thumb{
  width: 56px;
  height: 56px;
  flex: 0 0 auto;
  border-radius: 10px;
  object-fit: cover;
  background: #f2f2f2;
}
.uc-order-meta{
    margin-top: 10px;
  font-size:12px;
  line-height:1.5;
  color:#888888;
  display:-webkit-box;
  -webkit-line-clamp:1;        /* 想要两行就改成 2 */
  -webkit-box-orient:vertical;
  overflow:hidden;
}
/* 副信息 */
.order-time { color:#8a8a8a; font-size:12px; }
.order-ago,
.order-author { color:#b0b4ba; font-size:12px; }

/* 金额 */
.order-amount{
  flex: 0 0 auto;
  font-size: 16px;
  font-weight: 700;
  color: #e8663a;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

/* 待支付按钮 */
.order-pay-btn {
  display:inline-block;
  padding:7px 18px;
  border-radius:9px;
  background:linear-gradient(135deg,#ff8a3d 0%,#ff6633 100%);
  color:#fff !important;
  font-size:13px; font-weight:600;
  text-decoration:none;
  box-shadow:0 3px 10px rgba(255,102,51,.22);
  transition:filter .2s;
}
.order-pay-btn:hover { filter:brightness(1.05); }

/* ============ 移动端 ============ */
@media (max-width:640px){
  .order-item{ padding: 14px; }
  .order-body{ flex-direction:column; align-items:stretch; }
  .order-body .uc-list-thumb{ width: 48px; height: 48px; }
  .order-amount{ font-size: 15px; align-self:flex-end; }
  .order-ago,
  .order-author { display: none; }
  .order-pay-btn { width:100%; text-align:center; margin-top:10px; }
}

.income-card-withdraw {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
}

.income-card-main {
    min-width: 0;
    flex: 1;
}

.income-card-withdraw .uc-withdraw-btn {
    flex-shrink: 0;
    height: 32px;
    padding: 0 14px;
    font-size: 12.5px;
    border-radius: 16px;
    border: 1px solid #e5e5e5;
    border-radius: 18px;
    background: #fff;
    color: #555;

    /* 文字 */
    font-size: 13px;
    font-weight: 500;
    line-height: 1;
    white-space: nowrap;
    text-decoration: none;

    /* 交互 */
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
    transition: color .18s ease, border-color .18s ease, background .18s ease;
}

.income-card-withdraw .uc-withdraw-btn svg {
    width: 13px;
    height: 13px;
}
 
.income-cards {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 14px;
    margin-bottom: 22px;
}
.income-card {
    padding: 20px;
    border-radius: 14px;
    background: linear-gradient(135deg, #fff6f1 0%, #ffffff 100%);
    border: 1px solid #ffe9de;
}
.income-label { font-size: 12.5px; color: #333333; margin-bottom: 8px; font-variant-numeric: tabular-nums;}
.income-value {
    font-size: 24px; font-weight: 700;
    color: #ff6633;
    letter-spacing: -0.5px;
}
.income-value small { font-size: 13px; font-weight: 500; margin-left: 2px; }

.withdraw-body {
    display: flex;
    align-items: center;
    gap: 16px;
}

.withdraw-info {
    flex: 1;
    min-width: 0;
}

.withdraw-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-top: 6px;
    font-size: 12.5px;
    color: #b0b4ba;
}

.withdraw-note {
    margin-top: 8px;
    padding: 6px 10px;
    border-radius: 8px;
    background: #fafafa;
    font-size: 12.5px;
    color: #888;
    line-height: 1.5;
}


/* 状态：已拒绝 */
.order-status-fail {
    color: #ff4d4f;
    background: #fff1f0;
    border-color: #ffccc7;
}
.order-status-fail .order-status-dot {
    background: #ff4d4f;
}

/* 小屏适配 */
@media (max-width: 768px) {
    .income-card-withdraw {
        flex-direction: column;
        align-items: flex-start;
    }
    .income-card-withdraw .uc-withdraw-btn {
        margin-top: 10px;
        width: 100%;
        justify-content: center;
        height: 34px;
        font-size: 13px;
    }
    .withdraw-body {
        flex-direction: column;
        align-items: flex-start;
        gap: 10px;
    }
    .withdraw-meta {
        font-size: 12px;
    }
}

/* ----- 分页 ----- */
.uc-pager {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: 6px;
    margin-top: 24px;
}

/* 所有页码元素（a / span） */
.uc-pager .page-numbers {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    min-width: 36px; 
    padding: 8px 12px;
    border: 1px solid #e5e5e5;
    border-radius: 6px;
    background: #fff;
    color: #555;
    font-size: 13px;
    font-weight: 500;
    line-height: 1;
    text-decoration: none;
    white-space: nowrap;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
    transition: color .18s ease, border-color .18s ease, background .18s ease;
}

/* 悬停 */
.uc-pager .page-numbers:hover {
    color: #ff6633;
    border-color: #ff6633;
}

/* 当前页 */
.uc-pager .page-numbers.current {
    background: #ff6633;
    border-color: #ff6633;
    color: #fff;
    cursor: default;
}

/* 省略号：去掉边框和背景 */
.uc-pager .page-numbers.dots {
    border-color: transparent;
    background: transparent;
    color: #b0b4ba;
    cursor: default;
    min-width: 24px;
    padding: 0 4px;
}

.uc-pager .page-numbers.dots:hover {
    color: #b0b4ba;
    border-color: transparent;
}

/* 上一页 / 下一页：稍微宽一点 */
.uc-pager .page-numbers.prev,
.uc-pager .page-numbers.next {
    padding: 8px 16px;
}

/* ----- 小屏 ----- */
@media (max-width: 768px) {
    .uc-pager {
        gap: 5px;
        margin-top: 18px;
    }

    .uc-pager .page-numbers {
        min-width: 32px;
        height: 32px;
        padding: 0 10px;
        font-size: 12.5px;
        border-radius: 6px;
    }

    .uc-pager .page-numbers.prev,
    .uc-pager .page-numbers.next {
        padding: 0 12px;
    }

    .uc-pager .page-numbers.dots {
        min-width: 20px;
        padding: 0 2px;
    }
}

/* 超窄屏：进一步收窄 */
@media (max-width: 400px) {
    .uc-pager .page-numbers {
        min-width: 30px;
        height: 30px;
        padding: 0 8px;
        font-size: 12px;
        border-radius: 15px;
    }

    .uc-pager .page-numbers.prev,
    .uc-pager .page-numbers.next {
        padding: 0 10px;
    }
}


.workspace {
  padding: 30px;
  flex: 1;
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 30px;
  box-sizing: border-box;
  overflow: hidden;
}

/* ---------- 3. 调音器卡片 ---------- */
.tuner {
  background: #fff;
  border-radius: 16px; 
  padding: 25px;
  flex-direction: column;
  width: 480px;
  color: #111827;
  justify-content: center;
  background: #1a2030; 
  align-items: center;
  position: relative;
  overflow: visible;
  /* 确保下拉菜单不会被卡片裁剪 */
}

/* 3.1 模式切换 */
.mode-switch {
  display: flex;
  gap: 4px;
  padding: 4px;
  margin-bottom: 14px;
  background: rgba(15, 23, 42, 0.7);
  border: 1px solid rgba(148, 163, 184, 0.1);
  border-radius: 12px;
}

.mode-btn {
  flex: 1;
  padding: 9px 12px;
  font: inherit;
  font-size: 13px;
  font-weight: 500;
  color: #94a3b8;
  background: transparent;
  border: none;
  border-radius: 9px;
  cursor: pointer;
  transition: color 0.2s cubic-bezier(0.4, 0, 0.2, 1),
    background 0.2s cubic-bezier(0.4, 0, 0.2, 1),
    box-shadow 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}

.mode-btn:hover {
  color: #cbd5e1;
}

.mode-btn:focus-visible {
  outline: 2px solid #ff6600;
  outline-offset: 2px;
}

.mode-btn.active {
  color: #fff;
  font-weight: 600;
  background: linear-gradient(135deg, #ff6600 0%, #ff8800 100%);
  box-shadow: 0 2px 10px rgba(255, 102, 0, 0.18);
}

/* 3.2 调弦预设 */
.preset-row {
  display: flex;
  gap: 10px;
  align-items: center;
  padding: 0 14px;
  margin-bottom: 12px;
  background: rgba(15, 23, 42, 0.5);
  border: 1px solid rgba(148, 163, 184, 0.12);
  border-radius: 12px;
  transition: border-color 0.2s cubic-bezier(0.4, 0, 0.2, 1),
    box-shadow 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}

.preset-row:hover {
  border-color: rgba(148, 163, 184, 0.22);
  box-shadow: 0 0 0 3px rgba(148, 163, 184, 0.06);
}

.preset-row label {
  color: #e2e8f0;
  font-size: 12px;
}

/* ---------- 自定义下拉 ---------- */
.custom-select {
  position: relative;
  flex: 1;
  min-width: 0;
}

.tuner-trigger {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 100%;
  padding: 9px 0;
  font: inherit;
  font-size: 13px;
  color: #e2e8f0;
  text-align: left;
  background: transparent;
  border: none;
  cursor: pointer;
}

.tuner-trigger:focus-visible {
  outline: 2px solid #ff6600;
  outline-offset: 2px;
  border-radius: 4px;
}

.tuner-value {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.tuner-desc {
  font-size: 11px;
  color: #64748b;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}

.cs-arrow {
  flex: 0 0 10px;
  color: #94a3b8;
  transition: transform 0.2s;
}

.custom-select.open .cs-arrow {
  transform: rotate(180deg);
}

/* 下拉面板 */
.tuner-list {
  position: absolute;
  top: calc(100% + 6px);
  left: -14px;
  right: -14px;
  z-index: 30;
  max-height: 320px;
  overflow-y: auto;
  margin: 0;
  padding: 6px;
  list-style: none;
  background: #0f172a;
  border: 1px solid rgba(148, 163, 184, 0.16);
  border-radius: 12px;
  box-shadow: 0 18px 40px rgba(0, 0, 0, 0.55);
  opacity: 0;
  visibility: hidden;
  transform: translateY(-6px);
  transition: opacity 0.18s, transform 0.18s, visibility 0.18s;
}

.custom-select.open .tuner-list {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}

.tuner-list::-webkit-scrollbar {
  width: 6px;
}

.tuner-list::-webkit-scrollbar-thumb {
  background: rgba(148, 163, 184, 0.25);
  border-radius: 999px;
}

/* 选项 */
.cs-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 9px 12px;
  border-radius: 8px;
  font-size: 13px;
  color: #cbd5e1;
  cursor: pointer;
  transition: background 0.15s, color 0.15s;
}

.cs-item:hover {
  background: rgba(51, 65, 85, 0.55);
  color: #e2e8f0;
}

.cs-item.selected {
  background: rgba(255, 102, 0, 0.12);
  color: #ff6600;
  font-weight: 600;
}

.cs-item-name {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.cs-item-desc {
  font-size: 11px;
  color: #64748b;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}

.cs-item.selected .cs-item-desc {
  color: rgba(255, 102, 0, 0.75);
}

/* 预设行在打开下拉时同步高亮边框 */
.preset-row:has(.custom-select.open) {
  border-color: rgba(148, 163, 184, 0.25);
}

/* 3.3 琴弦选择 */
.strings {
  display: grid;
  gap: 6px;
  margin-bottom: 18px;
}

.string-btn {
  padding: 6px 2px;
  font: inherit;
  font-size: 10px;
  font-weight: 500;
  line-height: 1.5;
  color: #cbd5e1;
  background: rgba(51, 65, 85, 0.5);
  border: 1px solid rgba(148, 163, 184, 0.05);
  border-radius: 12px;
  font-variant-numeric: tabular-nums;
  cursor: pointer;
  transition: background 0.15s cubic-bezier(0.4, 0, 0.2, 1),
    color 0.15s cubic-bezier(0.4, 0, 0.2, 1),
    box-shadow 0.15s cubic-bezier(0.4, 0, 0.2, 1);
}

.string-btn:hover {
  color: #e2e8f0;
  background: rgba(71, 85, 105, 0.7);
}

.string-btn:focus-visible {
  outline: 2px solid #ff6600;
  outline-offset: 2px;
}

.string-btn.active {
  color: #fff;
  font-weight: 700;
  background: linear-gradient(135deg, #ff6600 0%, #ff8800 100%);
  border-color: transparent;
  box-shadow: 0 4px 14px rgba(255, 102, 0, 0.35);
}

.string-btn .num {
  display: block;
  font-size: 10px;
  opacity: 0.75;
}

.string-btn .nt {
  display: block;
  font-size: 13px;
}

.string-btn.active .num {
  opacity: 0.85;
}

/* 3.4 音名显示 */
.note-display {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 88px;
  font-size: 68px;
  font-weight: 700;
  line-height: 1;
  color: #64748b;
  font-variant-numeric: tabular-nums;
  transition: color 0.2s cubic-bezier(0.4, 0, 0.2, 1),
    text-shadow 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}

.note-display.active {
  color: #ff6600;
  text-shadow: 0 0 36px rgba(255, 102, 0, 0.35);
}

.note-display.sharp {
  color: #f87171;
  text-shadow: 0 0 36px rgba(248, 113, 113, 0.35);
}

.note-display.flat {
  color: #60a5fa;
  text-shadow: 0 0 36px rgba(96, 165, 250, 0.35);
}

.frequency {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 20px;
  margin-top: 3px;
  font-size: 13px;
  line-height: 1.5;
  color: #64748b;
  font-variant-numeric: tabular-nums;
}

/* 3.5 音分表盘 */
.meter-container {
  margin: 12px 0 0;
  position: relative;
}

/* 3.6 状态提示 */
.tuner .status {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  min-height: 40px;
  font-size: 13px;
  font-weight: 500;
  line-height: 1.2;
  color: #64748b;
  transition: color 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}

.tuner .status.active {
  color: #ff6600;
}

.tuner .status .dir {
  display: inline-block;
  margin-left: 8px;
  padding: 2px 8px;
  font-size: 12px;
  font-weight: 600;
  color: #cbd5e1;
  background: rgba(148, 163, 184, 0.15);
  border-radius: 6px;
}

.tuner .status.sharp .dir {
  color: #fca5a5;
  background: rgba(248, 113, 113, 0.2);
}

.tuner .status.flat .dir {
  color: #93c5fd;
  background: rgba(96, 165, 250, 0.2);
}

/* 3.7 主按钮 */
#tunertoggle {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 14px 44px;
  font: inherit;
  font-size: 16px;
  font-weight: 600;
  color: #fff;
  background: linear-gradient(135deg, #ff6600 0%, #ff8800 100%);
  border: none;
  border-radius: 14px;
  cursor: pointer;
  box-shadow: 0 4px 20px rgba(255, 102, 0, 0.18);
  transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1),
    box-shadow 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}

#tunertoggle:hover:not(:disabled) {
  transform: translateY(-2px);
  box-shadow: 0 8px 28px rgba(255, 102, 0, 0.35);
}

.tuner button:active {
  transform: translateY(0);
}

.tuner button:disabled {
  opacity: 0.6;
  cursor: not-allowed;
  transform: none;
}

.tuner button.stop {
  background: linear-gradient(135deg, #f87171 0%, #ef4444 100%);
  box-shadow: 0 4px 20px rgba(248, 113, 113, 0.3);
}

.tuner button.stop:hover:not(:disabled) {
  box-shadow: 0 8px 28px rgba(248, 113, 113, 0.45);
}

/* 3.8 调试面板 */
.debug {
  display: none;
  margin-top: 18px;
  padding: 12px 14px;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 11px;
  line-height: 1.7;
  color: #94a3b8;
  text-align: left;
  background: rgba(15, 23, 42, 0.7);
  border: 1px solid rgba(148, 163, 184, 0.1);
  border-radius: 12px;
}

.debug.show {
  display: block;
}

.debug span {
  color: #e2e8f0;
}

.debug b {
  color: #ff6600;
}

.debug b.bad {
  color: #f87171;
}

.debug-toggle {
  padding: 4px 8px;
  margin-top: 10px;
  font: inherit;
  font-size: 11px;
  font-weight: 400;
  color: #64748b;
  background: none;
  box-shadow: none;
  border: none;
  cursor: pointer;
  transition: color 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}

.debug-toggle:hover {
  color: #94a3b8;
}

/* ---------- 4. 右侧信息面板 ---------- */
.side-panel {
  width: 300px;
  display: flex;
  flex-direction: column;
  gap: 16px;
  box-sizing: border-box;
}

.sidecard {
  padding: 16px 16px 18px;
  background: #ffffff;
  border: 1px solid #eceef2;
  border-radius: 16px;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.03);
}

.sidecard-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 12px;
}

.sidecard-head h3 {
  margin: 0;
  font-size: 12.5px;
  font-weight: 700;
  letter-spacing: 1.2px;
  color: #94a3b8;
}

.sidecard-desc {
  margin: -6px 0 12px;
  font-size: 12px;
  color: #94a3b8;
  letter-spacing: 0.4px;
}

.badge {
  padding: 3px 9px;
  font-size: 11px;
  font-weight: 700;
  color: #ff6600;
  white-space: nowrap;
  background: #fff3ea;
  border-radius: 999px;
}

.display-card {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
  padding: 30px 18px 24px;
  margin: 6px 0 4px;
  border-radius: 20px;
  overflow: hidden;
  background: rgba(15, 23, 42, 0.55);
  border: 1px solid rgba(148, 163, 184, 0.1);
}

.display-card::after {
  content: '';
  position: absolute;
  left: 50%;
  top: 50%;
  width: 190px;
  height: 190px;
  transform: translate(-50%, -50%);
  border-radius: 50%;
  border: 1px solid rgba(148, 163, 184, 0.07);
  box-shadow: 0 0 0 30px rgba(148, 163, 184, 0.022),
    0 0 0 60px rgba(148, 163, 184, 0.012);
  pointer-events: none;
}

.side-string {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 11px;
  margin-bottom: 6px;
  font-size: 12px;
  background: #f8fafc;
  border: 1px solid #eef1f5;
  border-radius: 12px;
  transition: background 0.2s cubic-bezier(0.4, 0, 0.2, 1),
    border-color 0.2s cubic-bezier(0.4, 0, 0.2, 1),
    box-shadow 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}

.side-string:last-child {
  margin-bottom: 0;
}

.side-string .ss-num {
  flex: 0 0 32px;
  font-size: 11px;
  color: #a2adba;
  font-variant-numeric: tabular-nums;
}

.side-string .ss-note {
  min-width: 42px;
  font-size: 14px;
  font-weight: 700;
  color: #1e293b;
  font-variant-numeric: tabular-nums;
}

.side-string .ss-freq {
  margin-left: auto;
  font-size: 11.5px;
  color: #94a3b8;
  font-variant-numeric: tabular-nums;
}

.side-string.active {
  background: linear-gradient(135deg, #fff5ee 0%, #ffe9d9 100%);
  border-color: #ffc9a0;
  box-shadow: 0 2px 10px rgba(255, 102, 0, 0.1);
}

.side-string.active .ss-note {
  color: #ff6600;
}

.side-string.active .ss-num {
  color: #ff9c55;
}

.steps {
  display: flex;
  flex-direction: column;
  gap: 11px;
  margin: 0;
  padding: 0;
  list-style: none;
  counter-reset: step;
}

.steps li {
  position: relative;
  padding-left: 30px;
  font-size: 12.5px;
  line-height: 1.6;
  color: #475569;
  counter-increment: step;
}

.steps li::before {
  content: counter(step);
  position: absolute;
  top: 1px;
  left: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 20px;
  height: 20px;
  font-size: 11px;
  font-weight: 700;
  color: #ff6600;
  background: #fff3ea;
  border-radius: 50%;
}

.tips-list {
  display: flex;
  flex-direction: column;
  gap: 9px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.tips-list li {
  position: relative;
  padding-left: 14px;
  font-size: 12px;
  line-height: 1.65;
  color: #475569;
}

.tips-list li::before {
  content: '';
  position: absolute;
  top: 8px;
  left: 0;
  width: 5px;
  height: 5px;
  background: #ffb27a;
  border-radius: 50%;
}

.tempo-list {
  justify-content: center;
  display: flex;
  flex-wrap: wrap;
  /* 允许换行 */
  gap: 6px;
  padding-bottom: 8px;
}

.tempo-item {
  flex: 1 1 70px;
  min-width: 46px;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 5px 12px;
  font-size: 14px;
  color: #555;
  border: 1px solid transparent;
  border-radius: 8px;
  cursor: pointer;
  transition: 0.2s;
}

.tempo-item:hover {
  background: #f8f9fa;
}

.tempo-item.active {
  background: #fff5ef;
  border-color: rgba(255, 107, 0, 0.2);
  color: #ff6b00;
  font-weight: 600;
}

.tempo-item-main {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  color: #666666;
  font-size: 12px;
}

.tempo-item .bpm-range {
  margin-top: 8px;
  font-size: 12px;
  color: #aaa;
}

/* 核心卡片 */
.metro-panner {
  background: #fff;
  border-radius: 16px;
  padding: 25px;
  flex-direction: column;
  width: 480px;
  color: #111827;
  justify-content: center;
  background: #1a2030;
  align-items: center;
  position: relative;
  overflow: visible;
}

/* ========== 普通模式内容布局 ========== */
#manualModeContent {
  width: 100%;
  height: 100%;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  align-items: center;
}

.bpm-display {
  text-align: center;
  margin-top: 10px;
}

.bpm-value {
  font-size: 90px;
  font-weight: 800;
  line-height: 1;
  color: #ff6b00;
  letter-spacing: 2px;
  text-shadow: 0 0 30px rgba(255, 107, 0, 0.3);
  transition: 0.1s;
}

.bpm-unit {
  font-size: 14px;
  color: #8a95a5;
  letter-spacing: 2px;
  margin-top: 5px;
}

.tempo-name {
  font-size: 16px;
  color: #8a95a5;
  margin-top: 5px;
  font-style: italic;
}

.beat-indicator {
  display: flex;
  gap: 15px;
  margin: 20px 0;
}

.beat-dot {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.1);
  border: 1px solid rgba(255, 255, 255, 0.2);
  transition: all 0.1s ease;
}

.beat-dot.active {
  background: #ff6b00;
  border-color: #ff6b00;
  box-shadow: 0 0 20px rgba(255, 107, 0, 0.6);
  transform: scale(1.2);
}

.slider-area {
  width: 100%;
  padding: 0 10px;
  box-sizing: border-box;
}

.slider-controls {
  display: flex;
  align-items: center;
  gap: 15px;
  margin-bottom: 15px;
}

.slider-btn {
  background: #252d40;
  border: none;
  color: #fff;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  font-size: 20px;
  cursor: pointer;
  display: flex;
  justify-content: center;
  align-items: center;
  transition: 0.2s;
  flex-shrink: 0;
}

.slider-btn:hover {
  background: #3a4560;
}

.slider-btn:active {
  transform: scale(0.9);
}

input[type='range'] {
  -webkit-appearance: none;
  width: 100%;
  height: 6px;
  background: rgba(255, 255, 255, 0.1);
  border-radius: 3px;
  outline: none;
}

input[type='range']::-webkit-slider-thumb {
  -webkit-appearance: none;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: #ff6b00;
  cursor: pointer;
  box-shadow: 0 0 15px rgba(255, 107, 0, 0.8);
  transition: transform 0.1s;
}

input[type='range']::-webkit-slider-thumb:hover {
  transform: scale(1.15);
}

.bpm-presets {
  display: flex;
  justify-content: space-between;
  gap: 8px;
  margin-top: 15px;
}

.preset-btn {
  background: transparent;
  border: 1px solid rgba(255, 255, 255, 0.15);
  color: #8a95a5;
  padding: 5px 0;
  flex: 1;
  border-radius: 6px;
  font-size: 12px;
  cursor: pointer;
  transition: 0.2s;
}

.preset-btn:hover {
  border-color: #ff6b00;
  color: #ff6b00;
}

.control-grid {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 10px;
  width: 100%;
  margin-top: 20px;
}

.ctrl-btn {
  background: transparent;
  border: 1px solid rgba(255, 255, 255, 0.15);
  color: #fff;
  padding: 12px 0;
  border-radius: 8px;
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
  transition: 0.2s;
  text-align: center;
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 5px;
}

.ctrl-btn:hover {
  background: #3a4560;
}

.ctrl-btn.tap-btn {
  color: #ff6b00;
  font-size: 16px;
  letter-spacing: 1px;
}

.playmt-btn {
  margin: 20px 0 0;
  width: 100%;
  padding: 12px 0;
  border-radius: 12px;
  background: #ff6b00;
  color: #fff;
  font-size: 16px;
  font-weight: 700;
  border: none;
  cursor: pointer;
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 10px;
  transition: 0.3s;
  box-shadow: 0 10px 25px rgba(255, 107, 0, 0.3);
}

.playmt-btn:hover {
  background: #ff882b;
  box-shadow: 0 15px 30px rgba(255, 107, 0, 0.4);
  transform: translateY(-1px);
}

.playmt-btn:active {
  transform: translateY(0);
}

.playmt-btn.playing {
  background: #e0e0e0;
  color: #333;
  box-shadow: none;
}

.kbd-hint {
  font-size: 12px;
  color: #8a95a5;
  margin-top: 15px;
}

.kbd-hint kbd {
  background: #252d40;
  padding: 2px 6px;
  border-radius: 4px;
  border: 1px solid rgba(255, 255, 255, 0.1);
  font-family: inherit;
}

/* ========== 训练模式内容布局 ========== */
#autoModeContent {
  width: 100%;
  height: 100%;
  display: none;
  /* 默认隐藏 */
  flex-direction: column;
  justify-content: space-between;
}

.train-body {
  display: flex;
  flex-direction: column;
  gap: 12px;
  flex: 1;
  overflow-y: auto;
  padding-right: 5px;
}

.train-body::-webkit-scrollbar {
  width: 4px;
}

.train-body::-webkit-scrollbar-thumb {
  background: rgba(255, 255, 255, 0.1);
  border-radius: 2px;
}

.train-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  background: #252d40;
  padding: 10px 15px;
  border-radius: 12px;
}

.header-row {
  background: transparent;
  padding: 0 15px;
  font-size: 13px;
  color: #8a95a5;
  margin-bottom: -5px;
}

.highlight-text {
  color: #ff6b00;
  font-weight: bold;
  font-size: 18px;
}

.stage-item {
  display: flex;
  justify-content: space-between;
  align-items: center;
  background: #252d40;
  padding: 10px 15px;
  border-radius: 12px;
  gap: 10px;
  margin-top: 5px;
}

.counter-wrap {
  display: flex;
  align-items: center;
  background: #111827;
  border-radius: 8px;
  overflow: hidden;
}

.counter-btn {
  background: transparent;
  border: none;
  color: #8a95a5;
  width: 30px;
  height: 30px;
  font-size: 18px;
  cursor: pointer;
  transition: 0.2s;
}

.counter-btn:hover {
  color: #fff;
  background: rgba(255, 255, 255, 0.1);
}

.counter-val {
  color: #ffffff;
  min-width: 55px;
  text-align: center;
  font-size: 14px;
  font-weight: bold;
}

.remove-stage {
  background: transparent;
  border: none;
  color: #ff4d4f;
  font-size: 16px;
  cursor: pointer;
  padding: 0 5px;
}

.train-actions {
  display: flex;
  gap: 10px;
  margin-top: 5px;
}

.train-actions .preset-btn {
  border-color: rgba(255, 255, 255, 0.15);
  color: #fff;
  padding: 10px 0;
}

.train-actions .preset-btn:hover {
  border-color: #ff6b00;
  color: #ff6b00;
}

.train-total {
  text-align: center;
  font-size: 13px;
  color: #8a95a5;
  margin-top: 10px;
}

.train-total .highlight-text {
  font-size: 15px;
}

.custom-select {
  position: relative;
  width: 100%;
  user-select: none;
  font-size: 14px;
  font-weight: 600;
}

.select-trigger {
  background: transparent;
  border: 1px solid rgba(255, 255, 255, 0.15);
  color: #fff;
  padding: 12px 10px;
  border-radius: 8px;
  cursor: pointer;
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 6px;
  transition: 0.2s;
}

.custom-select:hover .select-trigger {
  background: #3a4560;
}

.custom-select.open .select-trigger {
  border-color: #ff6b00;
  background: #3a4560;
}

.select-trigger .arrow {
  font-size: 10px;
  transition: transform 0.3s ease;
  color: #8a95a5;
}

.custom-select.open .select-trigger .arrow {
  transform: rotate(180deg);
  color: #ff6b00;
}

.select-options {
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  background: #1a2030;
  border: 1px solid rgba(255, 255, 255, 0.1);
  border-radius: 8px;
  margin-top: 8px;
  box-shadow: 0 15px 30px rgba(0, 0, 0, 0.5);
  z-index: 100;
  opacity: 0;
  visibility: hidden;
  transform: translateY(-10px);
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
  max-height: 260px;
  overflow-y: auto;
  padding: 6px;
}

.custom-select.open .select-options {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}

.custom-select.drop-up .select-options {
  top: auto;
  bottom: 100%;
  margin-top: 0;
  margin-bottom: 8px;
  transform: translateY(10px);
}

.custom-select.drop-up.open .select-options {
  transform: translateY(0);
}

.select-options .group-title {
  font-size: 11px;
  color: rgba(255, 255, 255, 0.3);
  padding: 8px 10px 4px;
  text-transform: uppercase;
  letter-spacing: 1px;
  font-weight: bold;
  border-bottom: 1px solid rgba(255, 255, 255, 0.05);
  margin-bottom: 4px;
}

.select-options .group-title:last-of-type {
  border-bottom: none;
}

.select-options .option {
  padding: 10px;
  border-radius: 6px;
  color: #8a95a5;
  cursor: pointer;
  transition: 0.15s;
  text-align: center;
}

.select-options .option:hover {
  background: rgba(255, 255, 255, 0.05);
  color: #fff;
}

.select-options .option.selected {
  background: rgba(255, 107, 0, 0.15);
  color: #ff6b00;
  font-weight: bold;
}

.select-options::-webkit-scrollbar {
  width: 6px;
}

.select-options::-webkit-scrollbar-thumb {
  background: rgba(255, 255, 255, 0.2);
  border-radius: 3px;
}

.setting-label {
  font-size: 13px;
  color: #888;
  margin-bottom: 10px;
  display: block;
}

.btn-group {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}

.btn-group .preset-btn {
  border-color: #e0e0e0;
  color: #555;
  padding: 8px 0;
  flex: 1 1 45%;
  min-width: 60px;
}

.btn-group .preset-btn.active {
  background: #fff5ef;
  border-color: #ff6b00;
  color: #ff6b00;
}

.sidecard {
  padding: 16px 16px 18px;
  background: #ffffff;
  border: 1px solid #eceef2;
  border-radius: 16px;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.03);
}

.sidecard-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 12px;
}

.sidecard-head h3 {
  margin: 0;
  font-size: 12.5px;
  font-weight: 700;
  letter-spacing: 1.2px;
  color: #94a3b8;
}

.sidecard-desc {
  margin: -6px 0 12px;
  font-size: 12px;
  color: #94a3b8;
  letter-spacing: 0.4px;
}

 
.train-progress-body {
  display:flex;
  flex-direction:column;
  gap:18px;
  padding:10px 5px 0;
}
.progress-stage-label {
  text-align:center;
  font-size:13px;
  color:#999;
  letter-spacing:1px;
}
.progress-stage-label span {
  color:#ff6b00;
  font-weight:700;
  font-size:15px;
}
.progress-timer-wrap {
  text-align:center;
  padding:15px 0;
}
.progress-timer {
  font-size:64px;
  font-weight:800;
  color:#ff6b00;
  letter-spacing:2px;
  line-height:1;
  text-shadow:0 0 30px rgba(255,107,0,0.3);
  font-variant-numeric:tabular-nums;
}
.progress-subtitle {
  font-size:12px;
  color:#999;
  letter-spacing:2px;
  margin-top:8px;
  text-transform:uppercase;
}
.progress-info-row {
  display:flex;
  gap:10px;
}
.progress-info-box {
  flex:1;
  background:var(--card-bg-light);
  border-radius:12px;
  padding:12px 15px;
  text-align:center;
}
.info-label {
  font-size:12px;
  color:#999;
  margin-bottom:6px;
}
.info-value {
  font-size:22px;
  font-weight:700;
  color:#fff;
  font-variant-numeric:tabular-nums;
}
.info-value span {
  font-size:12px;
  color:#999;
  font-weight:400;
  margin-left:2px;
}
.progress-bar-wrap {
  margin-top:5px;
}
.progress-bar-bg {
  width:100%;
  height:8px;
  background:rgba(255,255,255,0.08);
  border-radius:4px;
  overflow:hidden;
  position:relative;
}
.progress-bar-fill {
  height:100%;
  background:linear-gradient(90deg,#ff6b00,#ff882b);
  border-radius:4px;
  transition:width 0.9s linear;
  box-shadow:0 0 10px rgba(255,107,0,0.5);
}
.progress-bar-labels {
  display:flex;
  justify-content:space-between;
  font-size:11px;
  color:#999;
  margin-top:6px;
  font-variant-numeric:tabular-nums;
}
.progress-next-hint {
  text-align:center;
  font-size:12px;
  color:#999;
  background:rgba(255,107,0,0.08);
  border:1px dashed rgba(255,107,0,0.25);
  border-radius:10px;
  padding:10px 12px;
}
.progress-next-hint:empty {
  display:none;
}
    .toast {
  position:fixed;
  bottom:40px;
  left:50%;
  transform:translateX(-50%) translateY(20px);
  background:#ffffff;
  color:#333333;
  padding:14px 24px;
  border-radius:12px;
  font-size:14px;
  border:1px solid rgba(255,107,0,0.3);
  opacity:0;
  visibility:hidden;
  transition:all 0.3s cubic-bezier(0.68,-0.55,0.265,1.55);
  z-index:10000;
  display:flex;
  align-items:center;
  gap:10px;
  pointer-events:none;
}
.toast.show {
  opacity:1;
  visibility:visible;
  transform:translateX(-50%) translateY(0);
}
.toast::before {
  content:"";
  font-size:18px;
}
@media (max-width:768px) {
  .workspace {
  flex-wrap:wrap;
  height:auto;
  overflow:visible;
  padding:0px
}
.tuner,.side-panel {
  width:100%;
}
.metro-panner,.side-panel {
  width:100%;
}
.preset-btn {
  padding:8px 0;
}
.tempo-list {
  flex-direction:row;
  display:flex;
  flex-wrap:nowrap;
  overflow-x:auto;
  gap:6px;
  padding-bottom:8px;
}
.tempo-item {
  flex:1 0 70px;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  text-align:center;
  min-width:46px;
  padding:5px 12px;
  flex-shrink:0;
}
.tempo-item-main {
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:2px;
}
.bpm-range {
  margin-top:6px;
  font-size:11px;
  color:#999;
}
.kbd-hint {
  display:none;
}
.note-display {
  font-size:56px;
  min-height:72px;
}
}
.page-404{
        --err-accent:#ff6a3d;
        min-height:calc(100vh - 120px);
        display:flex;
        flex-direction:column;
        align-items:center;
        justify-content:center;
        text-align:center;
        padding:40px 20px 72px;
        color:#1f2328;
        -webkit-tap-highlight-color:transparent;
    }
    .page-404 .err-visual{
        width:168px;
        max-width:52vw;
        color:#d6d9de;
    }
    .page-404 .err-visual svg{
        width:100%;
        height:auto;
        display:block;
    }
    .page-404 .err-code{
        margin:6px 0 0;
        font-size:60px;
        line-height:1;
        font-weight:800;
        letter-spacing:.08em;
        color:var(--err-accent);
    }
    .page-404 .err-title{
        margin:14px 0 0;
        font-size:18px;
        font-weight:600;
    }
    .page-404 .err-desc{
        margin:10px 0 0;
        max-width:34em;
        font-size:14px;
        line-height:1.7;
        color:#8b9098;
    }
    .page-404 .err-actions{
        margin-top:26px;
        display:flex;
        flex-wrap:wrap;
        gap:12px;
        justify-content:center;
    }
    .page-404 .err-btn{
        display:inline-flex;
        align-items:center;
        justify-content:center;
        gap:6px;
        min-width:124px;
        height:42px;
        padding:0 20px;
        border-radius:999px;
        font-size:14px;
        font-weight:600;
        text-decoration:none;
        border:1px solid transparent;
        cursor:pointer;
        transition:transform .18s ease, box-shadow .18s ease, background .18s ease, color .18s ease;
    }
    .page-404 .err-btn.primary{
        background:var(--err-accent);
        color:#fff;
        box-shadow:0 8px 20px rgba(255,106,61,.28);
    }
    .page-404 .err-btn.ghost{
        background:transparent;
        color:#4a4f57;
        border-color:#dcdfe4;
    }
    .page-404 .err-btn:active{ transform:scale(.97); }
    .page-404 .err-btn.ghost:hover{ background:#f5f6f8; }

    .page-404 .err-suggest{
        margin-top:34px;
        width:100%;
        max-width:420px;
        text-align:left;
    }
    .page-404 .err-suggest h3{
        margin:0 0 12px;
        font-size:13px;
        font-weight:600;
        color:#a2a7af;
        letter-spacing:.04em;
    }
    .page-404 .err-links{
        display:flex;
        flex-wrap:wrap;
        gap:10px;
    }
    .page-404 .err-links a{
        display:inline-block;
        padding:8px 14px;
        border-radius:999px;
        background:#f4f5f7;
        color:#4a4f57;
        font-size:13px;
        text-decoration:none;
        transition:background .18s ease, color .18s ease;
    }
    .page-404 .err-links a:hover{
        background:rgba(255,106,61,.12);
        color:var(--err-accent);
    }
    @media (max-width:480px){
        .page-404{ min-height:calc(100vh - 180px); padding-top:24px; }
        .page-404 .err-code{ font-size:48px; }
        .page-404 .err-visual{ width:132px; }
    }