
/* 引入字体变量 (假设这些字体已经在全局加载，如 index.html 中所示) */
:root {
    --banner-font-serif: "Cormorant Garamond", serif;
    --banner-font-sans: "Montserrat", sans-serif;
    --banner-bg: #292524;        /* Stone 800 */
    --banner-text-main: #f5f5f4; /* Stone 100 */
    --banner-text-sub: #a8a29e;  /* Stone 400 */
    --banner-accent: #DC4C3E;    /* Peter Cat Red */
    --banner-btn-bg: #f5f5f4;    /* Stone 100 */
    --banner-btn-hover: #ffffff;
    --banner-btn-text: #1c1917;  /* Stone 900 */
}

/* === 1. 容器 (Container) === */
.app-banner {
    /*position: relative;*/
    position: fixed;

    padding-bottom: max(1rem, env(safe-area-inset-bottom));  /* 避开 Home Indicator */
    padding-left: max(1rem, env(safe-area-inset-left));      /* 横屏左侧刘海 */
    padding-right: max(1rem, env(safe-area-inset-right));    /* 横屏右侧刘海 */

    /*贴近底部*/
    bottom: 0;
    /*横向铺满*/
    left: 0;
    right: 0;
    /*width: 100%;*/

    background-color: var(--banner-bg);

    /*border-radius: 0.75rem; !* 12px *!*/
    /*直角更自然*/
    border-radius: 0;
    padding: 1rem;
    margin: 0 0;

    /* Flex 布局 */
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;

    /* 视觉装饰 */
    /*box-shadow: 0 10px 30px -10px rgba(0, 0, 0, 0.2);*/
    box-shadow: 0 -6px 20px rgba(0, 0, 0, 0.2);

    overflow: hidden;
    text-decoration: none; /* 防止作为链接时的下划线 */

}

/* === 2. 背景噪点 (Noise Texture) === */
.banner-noise {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    opacity: 0.1;
    pointer-events: none;
    z-index: 0;
    /* 使用 SVG Data URI 生成噪点 */
    background-image: url('data:image/svg+xml,%3Csvg viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg"%3E%3Cfilter id="noiseFilter"%3E%3CfeTurbulence type="fractalNoise" baseFrequency="0.85" numOctaves="3" stitchTiles="stitch"/%3E%3C/filter%3E%3Crect width="100%25" height="100%25" filter="url(/%23noiseFilter)"/%3E%3C/svg%3E');
}

/* === 3. 左侧内容区 (Left Content) === */
.banner-content {
    display: flex;
    /*align-items: center;*/
    gap: 1rem;
    position: relative;
    z-index: 10;
}

/* 图标盒子 */
.banner-icon-box {
    width: 3rem;  /* 48px */
    height: 3rem; /* 48px */
    /*background-color: var(--banner-accent);*/
    border: 1px solid rgba(255, 255, 255, 0.1);
    box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.1);

    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;

    transition: transform 0.5s ease;
}

.banner-icon-image {
    border-radius: 0.5rem;
}

/* 悬停整个 Banner 时，图标放大 */
.app-banner:hover .banner-icon-box {
    transform: scale(1.05);
}

.banner-icon-text {
    font-family: var(--banner-font-serif);
    font-size: 1.5rem;
    color: #fff;
    font-weight: 700;
    font-style: italic;
    line-height: 1;
}

.banner-icon-image {
    width: 3rem;
    height: 3rem;
}

/* 文本信息 */
.banner-text-group {
    display: flex;
    flex-direction: column;
    /*align-items: flex-end;*/
    justify-content: space-between;
}

.banner-slogan {
    font-family: var(--banner-font-serif);
    font-size: 1.125rem; /* 18px */
    color: var(--banner-text-main);
    letter-spacing: 0.025em;
    line-height: 1.2;
}

.banner-subtext {
    font-family: var(--banner-font-sans);
    font-size: 0.625rem; /* 10px */
    color: var(--banner-text-sub);
    text-transform: uppercase;
    letter-spacing: 0.1em;
    margin-top: 0.125rem;
}

/* === 4. 右侧按钮 (CTA Button) === */
.banner-btn {
    position: relative;
    z-index: 10;
    background-color: var(--banner-btn-bg);
    color: var(--banner-accent);

    padding: 0.625rem 1.25rem;
    border-radius: 9999px; /* Pill shape */
    border: none;

    font-family: var(--banner-font-sans);
    font-size: 0.75rem; /* 12px */
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.15em;
    white-space: nowrap;
    text-decoration: none;
    cursor: pointer;

    display: flex;
    align-items: center;
    gap: 0.5rem;

    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
    transition: all 0.3s ease;
}

.banner-btn:hover {
    background-color: var(--banner-btn-hover);
    transform: translateY(-1px);
}

.banner-btn:active {
    transform: scale(0.95);
}

/* 箭头图标动画 */
.banner-btn svg {
    width: 0.75rem;
    height: 0.75rem;
    transition: transform 0.3s ease;
}

.banner-btn:hover svg {
    transform: translateX(2px);
}

/* === 5. 移动端适配 (Responsive) === */
@media (max-width: 480px) {
    .banner-slogan {
        font-size: 1rem;
    }
    .banner-subtext {
        font-size: 0.55rem;
    }
    .banner-btn {
        padding: 0.5rem 1rem;
        font-size: 0.65rem;
    }
}
/* Base Styles */
:root {
    --bg-color: #fffdf5;
    --bg-focus: #000000;
    --text-primary: #1c1917; /* stone-900 */
    --text-secondary: #57534e; /* stone-600 */
    --text-tertiary: #a8a29e; /* stone-400 */
    --border-color: #f5f5f4; /* stone-100 */
    --bg-alt: #ffffff;
    --font-sans: 'Inter', ui-sans-serif, system-ui, sans-serif;
    --font-serif: 'Playfair Display', ui-serif, Georgia, serif;
}

/* Dark Mode Support */
@media (prefers-color-scheme: dark) {
    :root {
        --bg-color: #0c0a09; /* stone-950 */
        --text-primary: #fafaf9; /* stone-50 */
        --text-secondary: #d6d3d1; /* stone-300 */
        --text-tertiary: #78716c; /* stone-500 */
        --border-color: #292524; /* stone-800 */
        --bg-alt: #1c1917; /* stone-900 */
    }
}

* {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

/* Note: body overflow is handled by .exhibition-container for the book show page */

/* Container */
.exhibition-container {
    position: fixed;
    inset: 0;
    z-index: 60;
    display: flex;
    flex-direction: column;
    height: 100dvh;
    overflow: hidden;
    background-color: var(--bg-color);
    transition: background-color 1s;
}

/* Ambient Light & Texture */
.ambient-light {
    position: absolute;
    inset: 0;
    background: linear-gradient(to bottom right, rgba(255, 237, 213, 0.4), transparent, rgba(245, 245, 244, 0.3));
    pointer-events: none;
    mix-blend-mode: multiply;
    transition: opacity 0.7s;
}

@media (prefers-color-scheme: dark) {
    .ambient-light {
        background: linear-gradient(to bottom right, rgba(28, 25, 23, 0.4), transparent, rgba(41, 37, 36, 0.3));
        mix-blend-mode: screen;
    }
}

.noise-overlay {
    position: absolute;
    inset: 0;
    pointer-events: none;
    opacity: 0.04;
    background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(/%23noiseFilter)'/%3E%3C/svg%3E");
    transition: opacity 0.7s;
}

@media (prefers-color-scheme: dark) {
    .noise-overlay {
        opacity: 0.02;
        mix-blend-mode: screen;
    }
}

/* Header */
.exhibition-header {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    z-index: 50;
    padding: 1.5rem;
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    transition: all 0.7s;
}

@media (min-width: 768px) {
    .exhibition-header {
        padding: 2rem;
    }
}

.close-btn {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    color: var(--text-primary);
    text-decoration: none;
    pointer-events: auto;
    transition: color 0.3s;
}

.close-btn:hover {
    color: var(--text-tertiary);
}

.close-icon-wrapper {
    padding: 0.5rem;
    border-radius: 9999px;
    background-color: rgba(255, 255, 255, 0.8);
    backdrop-filter: blur(12px);
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
    border: 1px solid var(--border-color);
    transition: transform 0.3s;
}

@media (prefers-color-scheme: dark) {
    .close-icon-wrapper {
        background-color: rgba(28, 25, 23, 0.8);
    }
}

.close-btn:hover .close-icon-wrapper {
    transform: scale(1.05);
}

@media (min-width: 768px) {
    .close-icon-wrapper {
        padding: 0.75rem;
    }
}

.header-info {
    display: none;
    text-align: right;
}

@media (min-width: 768px) {
    .header-info {
        display: block;
    }
}

.collection-title {
    font-family: var(--font-serif);
    font-size: 1.5rem;
    color: var(--text-primary);
    letter-spacing: -0.025em;
    font-weight: 400;
}

.plate-info {
    font-size: 0.625rem;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    color: var(--text-tertiary);
    margin-top: 0.5rem;
    font-weight: 700;
}

/* Main Content */
.main-content {
    flex: 1;
    width: 100%;
    height: 100%;
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
}

/* Text Section */
.text-section {
    position: absolute;
    z-index: 20;
    transition: all 0.7s cubic-bezier(0.23, 1, 0.32, 1);
    bottom: 0;
    left: 0;
    right: 0;
    padding: 2rem 2rem 3rem;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
}

@media (min-width: 768px) {
    .text-section {
        top: 0;
        bottom: 0;
        left: 0;
        right: auto;
        width: 35%;
        padding: 0 4rem;
        justify-content: center;
    }
}

.text-content {
    max-width: 28rem;
}

.photographer-name {
    font-size: 0.625rem;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    color: var(--text-tertiary);
    margin-bottom: 0.5rem;
    display: block;
    font-weight: 700;
}

@media (min-width: 768px) {
    .photographer-name {
        margin-bottom: 1.5rem;
    }
}

.photo-title {
    font-family: var(--font-serif);
    font-size: 1.875rem;
    color: var(--text-primary);
    line-height: 1.25;
    margin-bottom: 1rem;
    font-weight: 400;
}

@media (min-width: 768px) {
    .photo-title {
        font-size: 3rem;
        margin-bottom: 2rem;
    }
}

@media (min-width: 1024px) {
    .photo-title {
        font-size: 3.75rem;
    }
}

.divider {
    display: none;
    width: 3rem;
    height: 1px;
    background-color: var(--text-tertiary);
    margin-bottom: 2rem;
}

@media (min-width: 768px) {
    .divider {
        display: block;
    }
}

.photo-description {
    font-family: var(--font-serif);
    font-size: 0.875rem;
    font-style: italic;
    color: var(--text-secondary);
    line-height: 1.625;
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

@media (min-width: 768px) {
    .photo-description {
        font-size: 1.25rem;
        -webkit-line-clamp: unset;
    }
}

.photo-year {
    display: none;
    margin-top: 1.5rem;
    font-size: 0.75rem;
    font-weight: 700;
    color: var(--text-tertiary);
    letter-spacing: 0.1em;
    text-transform: uppercase;
}

@media (min-width: 768px) {
    .photo-year {
        display: block;
    }
}

.mobile-counter {
    margin-top: 1rem;
    font-size: 0.625rem;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    color: var(--text-tertiary);
}

@media (min-width: 768px) {
    .mobile-counter {
        display: none;
    }
}

/* Image Section */
.image-section {
    position: absolute;
    /* Start below the close button area on mobile */
    top: 5rem;
    bottom: 0;
    left: 0;
    right: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 10;
    transition: all 1s cubic-bezier(0.23, 1, 0.32, 1);
    padding-bottom: 8rem;
    /* Add horizontal margins on mobile for breathing room */
    padding-left: 1rem;
    padding-right: 1rem;
    perspective: 1000px;
}

@media (min-width: 768px) {
    .image-section {
        top: 0;
        padding-bottom: 0;
        padding-left: 0;
        padding-right: 0;
        left: auto;
        right: 0;
        width: 65%;
    }
}

.image-wrapper {
    position: relative;
    transition: all 1s cubic-bezier(0.23, 1, 0.32, 1);
    transform-style: preserve-3d;
    width: 100%;
    aspect-ratio: 3 / 4;
    cursor: zoom-in;
}

@media (min-width: 768px) {
    .image-wrapper {
        width: 70vh;
        height: 70vh;
        max-width: 800px;
        max-height: 800px;
        transform: rotateY(-10deg) rotateX(2deg) scale(0.95);
    }
}

.shadow-layer {
    position: absolute;
    inset: 0;
    background-color: rgba(28, 25, 23, 0.2);
    filter: blur(24px);
    transform: translateY(1rem);
    transition: opacity 0.7s;
}

@media (min-width: 768px) {
    .shadow-layer {
        filter: blur(48px);
        transform: translateY(3rem) translateZ(-50px);
    }
}

.image-container {
    width: 100%;
    height: 100%;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
    transition: all 0.7s;
    background-color: var(--bg-alt);
    padding: 0.5rem;
    border-radius: 0.125rem;
}

@media (min-width: 768px) {
    .image-container {
        padding: 1rem;
    }
}

.image-inner {
    width: 100%;
    height: 100%;
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: var(--border-color);
}

.image-inner img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: all 0.7s;
    animation: fadeIn 0.5s ease-out;
}

@keyframes fadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}

.glass-reflection {
    position: absolute;
    inset: 0;
    background: linear-gradient(to bottom right, rgba(255, 255, 255, 0.2), transparent);
    pointer-events: none;
    mix-blend-mode: overlay;
    transition: opacity 0.7s;
}

@media (prefers-color-scheme: dark) {
    .glass-reflection {
        background: linear-gradient(to bottom right, rgba(255, 255, 255, 0.05), transparent);
    }
}

.interaction-hint {
    position: absolute;
    bottom: -3rem;
    left: 50%;
    transform: translateX(-50%);
    color: var(--text-tertiary);
    font-size: 0.625rem;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    opacity: 0.6;
    display: flex;
    align-items: center;
    gap: 0.5rem;
    transition: opacity 0.3s;
}

@media (min-width: 768px) {
    .interaction-hint {
        opacity: 0;
    }

    .image-wrapper:hover .interaction-hint {
        opacity: 1;
    }
}

/* Navigation Controls */
.nav-controls {
    display: none;
    position: absolute;
    bottom: 3rem;
    right: 4rem;
    gap: 1rem;
    z-index: 40;
}

@media (min-width: 768px) {
    .nav-controls {
        display: flex;
    }
}

.nav-btn {
    width: 3.5rem;
    height: 3.5rem;
    border-radius: 9999px;
    border: 1px solid var(--border-color);
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: rgba(255, 255, 255, 0.5);
    backdrop-filter: blur(4px);
    color: var(--text-primary);
    cursor: pointer;
    transition: all 0.3s;
}

@media (prefers-color-scheme: dark) {
    .nav-btn {
        background-color: rgba(41, 37, 36, 0.5);
    }
}

.nav-btn:hover:not(:disabled) {
    background-color: var(--text-primary);
    color: var(--bg-color);
    border-color: var(--text-primary);
}

.nav-btn:disabled {
    opacity: 0.3;
    cursor: not-allowed;
}

.nav-btn:disabled:hover {
    background-color: transparent;
    color: var(--text-tertiary);
}

/* =========================================
   Focus Mode (Immersive Fullscreen)
   ========================================= */
.exhibition-container.focus-mode {
    background-color: var(--bg-focus);
}

.exhibition-container.focus-mode .ambient-light {
    opacity: 0;
}

.exhibition-container.focus-mode .noise-overlay {
    opacity: 0.05;
    mix-blend-mode: overlay;
}

.exhibition-container.focus-mode .exhibition-header {
    opacity: 0;
    transform: translateY(-1rem);
    pointer-events: none;
}

.exhibition-container.focus-mode .text-section {
    opacity: 0;
    transform: translateY(5rem);
    pointer-events: none;
}

@media (min-width: 768px) {
    .exhibition-container.focus-mode .text-section {
        transform: translateX(-5rem);
    }
}

.exhibition-container.focus-mode .image-section {
    width: 100%;
    left: 0;
    padding-bottom: 0;
    /* Full width on mobile in focus mode */
    padding-left: 0;
    padding-right: 0;
    /* Center the image vertically */
    top: 0;
    bottom: 0;
    /* Use flex layout for centering */
    display: flex;
    align-items: center;
    justify-content: center;
}

@media (min-width: 768px) {
    .exhibition-container.focus-mode .image-section {
        padding-left: 4.5rem;
        padding-right: 4.5rem;
    }
}

@media (min-width: 1024px) {
    .exhibition-container.focus-mode .image-section {
        padding-left: 5rem;
        padding-right: 5rem;
    }
}

.exhibition-container.focus-mode .image-wrapper {
    width: 100%;
    height: 100%;
    max-width: none;
    max-height: none;
    transform: none;
    cursor: zoom-out;
}

.exhibition-container.focus-mode .shadow-layer {
    opacity: 0;
}

.exhibition-container.focus-mode .image-container {
    background-color: transparent;
    padding: 0;
    box-shadow: none;
    border-radius: 0;
}

.exhibition-container.focus-mode .image-inner {
    background-color: transparent;
}

.exhibition-container.focus-mode .image-inner img {
    object-fit: contain;
}

.exhibition-container.focus-mode .glass-reflection {
    opacity: 0;
}

.exhibition-container.focus-mode .interaction-hint {
    opacity: 0;
}

.exhibition-container.focus-mode .nav-controls {
    opacity: 0;
    pointer-events: none;
}

/* =========================================
   Focus Mode Navigation (Immersive View)
   ========================================= */

/* Focus nav buttons - hidden by default */
.focus-nav-btn {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    width: 3.5rem;
    height: 3.5rem;
    border-radius: 9999px;
    background-color: rgba(255, 255, 255, 0.1);
    backdrop-filter: blur(12px);
    border: 1px solid rgba(255, 255, 255, 0.2);
    display: flex;
    align-items: center;
    justify-content: center;
    color: rgba(255, 255, 255, 0.8);
    text-decoration: none;
    opacity: 0;
    pointer-events: none;
    transition: all 0.3s ease;
    z-index: 200;
}

@media (prefers-color-scheme: dark) {
    .focus-nav-btn {
        background-color: rgba(41, 37, 36, 0.5);
        border-color: rgba(255, 255, 255, 0.1);
        color: rgba(255, 255, 255, 0.7);
    }
}

/* Show buttons in focus mode */
.exhibition-container.focus-mode .focus-nav-btn {
    opacity: 1;
    pointer-events: auto;
}

/* Position - left and right, at the edges of padded image-section */
.focus-nav-prev {
    left: 0.5rem;
}

.focus-nav-next {
    right: 0.5rem;
}

@media (min-width: 768px) {
    .focus-nav-prev {
        left: 0.75rem;
    }

    .focus-nav-next {
        right: 0.75rem;
    }
}

@media (min-width: 1024px) {
    .focus-nav-prev {
        left: 1rem;
    }

    .focus-nav-next {
        right: 1rem;
    }
}

/* Hover effects */
.focus-nav-btn:hover {
    background-color: rgba(255, 255, 255, 0.25);
    color: #ffffff;
    transform: translateY(-50%) scale(1.05);
}

@media (prefers-color-scheme: dark) {
    .focus-nav-btn:hover {
        background-color: rgba(255, 255, 255, 0.15);
    }
}

/* Hide on mobile (touch devices can swipe instead) */
@media (max-width: 767px) {
    .focus-nav-btn {
        display: none;
    }
}

/* =========================================
   Mobile Navigation (Below Image)
   ========================================= */

/* Mobile nav container - hidden by default, shown in focus mode on mobile */
.mobile-nav-controls {
    display: none;
}

@media (max-width: 767px) {
    .mobile-nav-controls {
        display: none;
        position: fixed;
        bottom: 1.5rem;
        left: 0;
        right: 0;
        justify-content: center;
        align-items: center;
        gap: 3rem;
        z-index: 100;
        padding: 0 2rem;
        height: 4rem;
    }

    /* Mobile nav buttons are hidden - users can swipe to navigate */
    .exhibition-container.focus-mode .mobile-nav-controls {
        display: none;
    }

    .mobile-nav-btn {
        width: 3rem;
        height: 3rem;
        border-radius: 9999px;
        background-color: rgba(255, 255, 255, 0.15);
        backdrop-filter: blur(12px);
        border: 1px solid rgba(255, 255, 255, 0.2);
        display: flex;
        align-items: center;
        justify-content: center;
        color: rgba(255, 255, 255, 0.9);
        text-decoration: none;
        transition: all 0.3s ease;
    }

    .mobile-nav-btn:disabled,
    .mobile-nav-btn[href=""] {
        opacity: 0.3;
        pointer-events: none;
    }

    .mobile-nav-btn:active {
        transform: scale(0.95);
        background-color: rgba(255, 255, 255, 0.25);
    }
}

/* =========================================
   Swipe Gesture Visual Feedback
   ========================================= */

/* Swipe hint indicator */
.swipe-hint {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    width: 3rem;
    height: 3rem;
    border-radius: 50%;
    background-color: rgba(255, 255, 255, 0.15);
    backdrop-filter: blur(8px);
    border: 1px solid rgba(255, 255, 255, 0.2);
    display: flex;
    align-items: center;
    justify-content: center;
    opacity: 0;
    transition: opacity 0.2s ease;
    pointer-events: none;
    z-index: 150;
}

.swipe-hint.prev {
    left: 1rem;
}

.swipe-hint.next {
    right: 1rem;
}

.swipe-hint svg {
    width: 1.5rem;
    height: 1.5rem;
    color: rgba(255, 255, 255, 0.8);
}

/* Image inner smooth transitions */
.image-inner {
    transition: transform 0.4s cubic-bezier(0.23, 1, 0.32, 1);
}

/* Focus mode specific cursor */
.exhibition-container.focus-mode .image-wrapper {
    cursor: grab;
}

.exhibition-container.focus-mode .image-wrapper:active {
    cursor: grabbing;
}

/* Disable transitions during swipe for smooth tracking */
.image-inner.is-dragging {
    transition: none !important;
}

/* Boundary bounce animation */
@keyframes boundaryBounce {
    0% { transform: translateX(0); }
    25% { transform: translateX(var(--bounce-offset, 20px)); }
    50% { transform: translateX(0); }
    75% { transform: translateX(calc(var(--bounce-offset, 20px) * 0.3)); }
    100% { transform: translateX(0); }
}

.image-inner.at-boundary {
    animation: boundaryBounce 0.4s ease-out;
}

/* Ensure smooth image transitions */
.image-inner img {
    will-change: transform;
    backface-visibility: hidden;
}
/* =========================================
   Archive Card Component Styles
   ========================================= */

.archive-card {
  display: block;
  position: relative;
  max-width: 32rem;
  width: 100%;
  margin: 1rem auto 0;
  text-decoration: none;
  transition: transform 0.3s ease;
}

@media (min-width: 768px) {
  .archive-card {
    margin-left: auto;
    margin-right: 0;
  }
}

.archive-card:hover {
  transform: translateY(-0.25rem);
}

.archive-card__inner {
  display: flex;
  width: 100%;
  background-color: #dcd3b6;
  border-radius: 0.125rem;
  box-shadow: 0 8px 20px rgba(62, 39, 35, 0.1);
  position: relative;
  overflow: hidden;
  border: 1px solid rgba(62, 39, 35, 0.1);
  padding: 1rem;
  align-items: center;
  justify-content: space-between;
  transition: box-shadow 0.3s ease;
}

@media (min-width: 768px) {
  .archive-card__inner {
    padding: 1.25rem;
  }
}

.archive-card:hover .archive-card__inner {
  box-shadow: 0 12px 25px rgba(62, 39, 35, 0.2);
}

/* Texture Overlay */
.archive-card__texture {
  position: absolute;
  inset: 0;
  opacity: 0.2;
  pointer-events: none;
  background-image: repeating-linear-gradient(
    45deg,
    transparent,
    transparent 2px,
    #3e2723 2px,
    #3e2723 4px
  );
}

/* Content */
.archive-card__content {
  display: flex;
  align-items: center;
  gap: 1rem;
  position: relative;
  z-index: 10;
}

/* Icon */
.archive-card__icon-wrapper {
  width: 3rem;
  height: 3rem;
  background-color: #3e2723;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #e8e0d5;
  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.2);
  transition: all 0.3s ease;
  flex-shrink: 0;
}

.archive-card:hover .archive-card__icon-wrapper {
  transform: scale(1.1);
  background-color: #8b5a2b;
}

.archive-card__icon-wrapper i {
  font-size: 1.25rem;
}

/* Text */
.archive-card__text {
  display: flex;
  flex-direction: column;
}

.archive-card__title {
  font-size: 1.125rem;
  color: #2d2420;
  font-family: 'Noto Serif SC', serif;
  font-weight: bold;
  line-height: 1.25;
  margin: 0;
  transition: color 0.3s ease;
}

@media (min-width: 768px) {
  .archive-card__title {
    font-size: 1.25rem;
  }
}

.archive-card:hover .archive-card__title {
  color: #8b5a2b;
}

.archive-card__subtitle {
  font-size: 10px;
  color: rgba(93, 64, 55, 0.8);
  margin-top: 0.25rem;
  margin-bottom: 0;
  font-family: 'Share Tech Mono', monospace;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

@media (min-width: 768px) {
  .archive-card__subtitle {
    font-size: 0.75rem;
  }
}

/* Arrow */
.archive-card__arrow {
  position: relative;
  z-index: 10;
  width: 2rem;
  height: 2rem;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  border: 1px solid rgba(139, 90, 43, 0.3);
  transition: all 0.3s ease;
  flex-shrink: 0;
}

.archive-card:hover .archive-card__arrow {
  border-color: #8b5a2b;
  background-color: #8b5a2b;
}

.archive-card__arrow i {
  font-size: 0.875rem;
  color: #8b5a2b;
  transition: color 0.3s ease;
}

.archive-card:hover .archive-card__arrow i {
  color: #f2efe9;
}
/* =========================================
   Archive Side Menu Component Styles
   Prefix: mr-archive-menu-
   ========================================= */

/* Container */
.mr-archive-menu {
  position: relative;
  z-index: 50;
}

/* Backdrop */
.mr-archive-menu__backdrop {
  position: fixed;
  inset: 0;
  background-color: rgba(0, 0, 0, 0.5);
  backdrop-filter: blur(4px);
  z-index: 40;
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.3s ease, visibility 0.3s ease;
}

.mr-archive-menu--open .mr-archive-menu__backdrop {
  opacity: 1;
  visibility: visible;
}

/* Panel */
.mr-archive-menu__panel {
  position: fixed;
  top: 0;
  right: 0;
  height: 100dvh;
  width: 20rem;
  max-width: 85vw;
  background-color: #f2efe9;
  box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
  z-index: 50;
  transform: translateX(100%);
  transition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1);
  display: flex;
  flex-direction: column;
}

.mr-archive-menu--open .mr-archive-menu__panel {
  transform: translateX(0);
}

/* Header */
.mr-archive-menu__header {
  padding: 1.5rem;
  border-bottom: 1px solid rgba(62, 39, 35, 0.1);
  display: flex;
  justify-content: space-between;
  align-items: center;
  background-color: #eae2cf;
  position: relative;
  overflow: hidden;
  flex-shrink: 0;
}

.mr-archive-menu__texture {
  position: absolute;
  inset: 0;
  opacity: 0.1;
  pointer-events: none;
  background-image: radial-gradient(#3e2723 0.5px, transparent 0.5px);
  background-size: 8px 8px;
}

.mr-archive-menu__title {
  font-family: 'Noto Serif SC', serif;
  font-weight: bold;
  font-size: 1.25rem;
  color: #3e2723;
  position: relative;
  z-index: 10;
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin: 0;
}

.mr-archive-menu__title i {
  color: #8b5a2b;
}

/* Close Button */
.mr-archive-menu__close {
  width: 2rem;
  height: 2rem;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background-color: rgba(62, 39, 35, 0.05);
  color: rgba(62, 39, 35, 0.6);
  border: none;
  cursor: pointer;
  transition: all 0.2s ease;
  position: relative;
  z-index: 10;
}

.mr-archive-menu__close:hover {
  color: #3e2723;
  background-color: rgba(62, 39, 35, 0.1);
}

.mr-archive-menu__close i {
  font-size: 1.125rem;
}

/* List */
.mr-archive-menu__list {
  flex: 1;
  overflow-y: auto;
  padding: 1rem;
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
}

/* Custom Scrollbar */
.mr-archive-menu__list::-webkit-scrollbar {
  width: 6px;
}

.mr-archive-menu__list::-webkit-scrollbar-track {
  background: transparent;
}

.mr-archive-menu__list::-webkit-scrollbar-thumb {
  background-color: rgba(139, 90, 43, 0.3);
  border-radius: 3px;
}

.mr-archive-menu__list::-webkit-scrollbar-thumb:hover {
  background-color: rgba(139, 90, 43, 0.5);
}

/* Item */
.mr-archive-menu__item {
  padding: 1rem;
  border-radius: 0.125rem;
  border: 1px solid rgba(62, 39, 35, 0.1);
  background-color: #faf9f6;
  text-decoration: none;
  transition: all 0.2s ease;
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
}

.mr-archive-menu__item:hover {
  border-color: rgba(139, 90, 43, 0.4);
  box-shadow: 2px 2px 0 rgba(139, 90, 43, 0.1);
}

.mr-archive-menu__item-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.mr-archive-menu__vol {
  font-size: 10px;
  font-family: 'Share Tech Mono', monospace;
  color: #8b5a2b;
  background-color: rgba(139, 90, 43, 0.1);
  padding: 0.125rem 0.5rem;
  border-radius: 0.125rem;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

.mr-archive-menu__date {
  font-size: 10px;
  font-family: 'Share Tech Mono', monospace;
  color: rgba(93, 64, 55, 0.6);
}

.mr-archive-menu__item-title {
  font-family: 'Noto Serif SC', serif;
  font-weight: bold;
  color: #2d2420;
  font-size: 1.125rem;
  transition: color 0.2s ease;
  margin-top: 0.25rem;
}

.mr-archive-menu__item:hover .mr-archive-menu__item-title {
  color: #8b5a2b;
}

/* Footer */
.mr-archive-menu__footer {
  padding: 1rem;
  border-top: 1px solid rgba(62, 39, 35, 0.1);
  background-color: #eae2cf;
  text-align: center;
  flex-shrink: 0;
}

.mr-archive-menu__footer-text {
  font-size: 9px;
  font-family: 'Share Tech Mono', monospace;
  color: rgba(93, 64, 55, 0.6);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  margin: 0;
}
/* =========================================
   Episode Intro Component Styles
   ========================================= */

.episode-intro {
  width: 100%;
  margin-top: 4rem;
  margin-bottom: 4rem;
}

/* Section Header */
.episode-intro__header {
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 2.5rem;
  position: relative;
}

.episode-intro__title {
  font-size: 1.25rem;
  font-family: 'Noto Serif SC', serif;
  font-weight: bold;
  color: #3e2723;
  padding: 0 1rem;
  background-color: #f2efe9;
  position: relative;
  z-index: 10;
  margin: 0;
}

@media (min-width: 768px) {
  .episode-intro__title {
    font-size: 1.5rem;
  }
}

.episode-intro__title-text {
  position: relative;
  display: inline-block;
}

.episode-intro__title-underline {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0.25rem;
  height: 0.5rem;
  background-color: #ffd700;
  opacity: 0.4;
  z-index: -1;
  transform: rotate(-1deg);
}

.episode-intro__header-line {
  position: absolute;
  left: 0;
  right: 0;
  height: 1px;
  background-color: rgba(62, 39, 35, 0.2);
  top: 50%;
  transform: translateY(-50%);
}

/* Episode Summary */
.episode-intro__summary {
  background-color: #faf9f6;
  border: 1px solid rgba(62, 39, 35, 0.2);
  padding: 1.5rem;
  position: relative;
  margin-bottom: 3rem;
  box-shadow: 4px 4px 0 rgba(62, 39, 35, 0.05);
}

@media (min-width: 768px) {
  .episode-intro__summary {
    padding: 2rem;
  }
}

.episode-intro__corner {
  position: absolute;
  width: 2rem;
  height: 2rem;
  border-color: #8b5a2b;
  border-style: solid;
}

.episode-intro__corner--tl {
  top: 0;
  left: 0;
  border-width: 2px 0 0 2px;
  transform: translate(-0.25rem, -0.25rem);
}

.episode-intro__corner--br {
  bottom: 0;
  right: 0;
  border-width: 0 2px 2px 0;
  transform: translate(0.25rem, 0.25rem);
}

.episode-intro__summary-title {
  font-size: 1.125rem;
  font-family: 'Noto Serif SC', serif;
  font-weight: bold;
  color: #2d2420;
  margin-bottom: 1rem;
  display: flex;
  align-items: center;
  gap: 0.5rem;
}

.episode-intro__summary-title i {
  color: rgba(139, 90, 43, 0.5);
  font-size: 0.875rem;
}

.episode-intro__summary-text {
  color: #5d4037;
  line-height: 1.625;
  font-size: 0.875rem;
  text-align: justify;
  margin: 0;
}

@media (min-width: 768px) {
  .episode-intro__summary-text {
    font-size: 1rem;
  }
}

/* Tracklist Header */
.episode-intro__tracklist-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 1.5rem;
}

.episode-intro__tracklist-title {
  font-size: 1.125rem;
  font-family: 'Noto Serif SC', serif;
  font-weight: bold;
  color: #3e2723;
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin: 0;
}

.episode-intro__spin-icon {
  color: #8b5a2b;
  animation: spin 4s linear infinite;
}

@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

.episode-intro__tracklist-badge {
  font-size: 10px;
  font-family: 'Share Tech Mono', monospace;
  color: #8b5a2b;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  border: 1px solid rgba(139, 90, 43, 0.3);
  padding: 0.25rem 0.5rem;
  border-radius: 0.125rem;
}

/* Track Cards */
.episode-intro__tracks {
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
  margin-bottom: 2.5rem;
}

.episode-intro__track {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: 1rem;
  background-color: #faf9f6;
  padding: 1rem;
  border: 1px solid rgba(62, 39, 35, 0.1);
  position: relative;
  transition: all 0.3s ease;
  cursor: pointer;
}

@media (min-width: 768px) {
  .episode-intro__track {
    display: grid;
    grid-template-columns: auto 1fr;
    grid-template-rows: auto auto;
    gap: 1.5rem;
    padding: 1.5rem;
  }
}

.episode-intro__track:hover {
  box-shadow: 4px 4px 0 rgba(62, 39, 35, 0.05);
  border-color: rgba(62, 39, 35, 0.3);
}

/* Current Track States */
.episode-intro__track--current {
  background-color: #f2efe9;
  border-color: rgba(139, 90, 43, 0.5);
  box-shadow: 4px 4px 0 rgba(139, 90, 43, 0.15);
}

.episode-intro__track--playing {
  border-color: rgba(139, 90, 43, 0.7);
}

/* Track Corner Decorations */
.episode-intro__track-corner {
  position: absolute;
  width: 1rem;
  height: 1rem;
  border-color: rgba(62, 39, 35, 0.1);
  border-style: solid;
}

.episode-intro__track-corner--tr {
  top: 0;
  right: 0;
  border-width: 1px 1px 0 0;
}

.episode-intro__track-corner--bl {
  bottom: 0;
  left: 0;
  border-width: 0 0 1px 1px;
}

.episode-intro__track-corner--active {
  border-color: rgba(139, 90, 43, 0.3);
}

/* Album Cover */
.episode-intro__cover-wrapper {
  position: relative;
  flex-shrink: 0;
}

@media (min-width: 768px) {
  .episode-intro__cover-wrapper {
    grid-column: 1;
    grid-row: 1 / 3;
  }
}

.episode-intro__cover {
  width: 6rem;
  height: 6rem;
  position: relative;
  background-color: #3e2723;
  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
  z-index: 10;
  overflow: hidden;
}

@media (min-width: 768px) {
  .episode-intro__cover {
    width: 9rem;
    height: 9rem;
  }
}

.episode-intro__cover-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 1;
  transition: all 0.3s ease;
}

.episode-intro__track:hover .episode-intro__cover-img {
  opacity: 0.95;
}

/* Active cover state */
.episode-intro__cover-img--active,
.episode-intro__track--current .episode-intro__cover-img {
  opacity: 1;
}

/* Play Overlay */
.episode-intro__play-overlay {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: rgba(0, 0, 0, 0.3);
  opacity: 1;
  transition: opacity 0.3s ease;
  z-index: 20;
}

.episode-intro__track:hover .episode-intro__play-overlay {
  background-color: rgba(0, 0, 0, 0.4);
}

.episode-intro__play-overlay i {
  font-size: 1.875rem;
  color: #f2efe9;
  filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2));
}

@media (min-width: 768px) {
  .episode-intro__play-overlay i {
    font-size: 2.25rem;
  }
}

/* =========================================
   Unplayable Track Styles
   ========================================= */

/* Unplayable track - no hover effects, no cursor pointer */
.episode-intro__track--unplayable {
  cursor: default;
}

.episode-intro__track--unplayable:hover {
  box-shadow: none;
  border-color: rgba(62, 39, 35, 0.1);
}

/* Gray cover image for unplayable tracks */
.episode-intro__cover-img--unplayable {
  filter: grayscale(100%);
  opacity: 0.6;
}

.episode-intro__track:hover .episode-intro__cover-img--unplayable {
  opacity: 0.6;
}

/* Unplayable overlay (replaces play button) */
.episode-intro__unplayable-overlay {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: rgba(0, 0, 0, 0.15);
  z-index: 20;
}

.episode-intro__unplayable-icon {
  font-size: 1.5rem;
  color: rgba(242, 239, 233, 0.5);
}

@media (min-width: 768px) {
  .episode-intro__unplayable-icon {
    font-size: 1.875rem;
  }
}

/* Vinyl Record */
.episode-intro__vinyl {
  position: absolute;
  inset: 0;
  background-color: #1a1a1a;
  border-radius: 50%;
  z-index: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 1px solid #333;
  opacity: 0;
  transition: transform 0.5s ease, opacity 0.3s ease;
  transform: translateX(2rem);
}

@media (min-width: 768px) {
  .episode-intro__vinyl {
    transform: translateX(4rem);
  }
}

.episode-intro__vinyl-groove {
  border-radius: 50%;
  border: 1px solid #333;
  display: flex;
  align-items: center;
  justify-content: center;
}

.episode-intro__vinyl-groove--outer {
  width: 90%;
  height: 90%;
}

.episode-intro__vinyl-groove--inner {
  width: 80%;
  height: 80%;
}

.episode-intro__vinyl-label {
  width: 33%;
  height: 33%;
  background-color: #8b5a2b;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
}

.episode-intro__vinyl-hole {
  width: 0.5rem;
  height: 0.5rem;
  background-color: #f2efe9;
  border-radius: 50%;
}

/* Track Info */
.episode-intro__track-info {
  display: flex;
  flex-direction: column;
  justify-content: center;
  flex: 1;
  min-width: 0;
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
}

@media (min-width: 768px) {
  .episode-intro__track-info {
    grid-column: 2;
    grid-row: 1;
  }
}

.episode-intro__track-header {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
  margin-bottom: 0.25rem;
}

@media (min-width: 768px) {
  .episode-intro__track-header {
    flex-direction: row;
    align-items: baseline;
    gap: 0.75rem;
  }
}

.episode-intro__track-title {
  font-size: 1.125rem;
  font-family: 'Noto Serif SC', serif;
  font-weight: bold;
  color: #8b5a2b;
  line-height: 1.25;
  margin: 0;
  transition: color 0.3s ease;
}

@media (min-width: 768px) {
  .episode-intro__track-title {
    font-size: 1.25rem;
  }
}

.episode-intro__track:hover .episode-intro__track-title {
  color: #6d4c41;
}

/* Unplayable track title - no hover effect */
.episode-intro__track--unplayable .episode-intro__track-title {
  color: rgba(139, 90, 43, 0.7);
}

.episode-intro__track--unplayable:hover .episode-intro__track-title {
  color: rgba(139, 90, 43, 0.7);
}

.episode-intro__track-artist {
  font-size: 0.75rem;
  color: #8b5a2b;
  font-weight: 500;
}

/* Track Meta */
.episode-intro__track-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem;
  margin-bottom: 0.5rem;
}

@media (min-width: 768px) {
  .episode-intro__track-meta {
    gap: 0.75rem;
    margin-bottom: 0.75rem;
  }
}

.episode-intro__track-meta-item {
  font-size: 9px;
  font-family: 'Share Tech Mono', monospace;
  color: rgba(93, 64, 55, 0.7);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  display: flex;
  align-items: center;
  gap: 0.25rem;
}

@media (min-width: 768px) {
  .episode-intro__track-meta-item {
    font-size: 10px;
  }
}

.episode-intro__track-meta-dot {
  display: none;
  width: 0.25rem;
  height: 0.25rem;
  background-color: rgba(93, 64, 55, 0.3);
  border-radius: 50%;
}

@media (min-width: 768px) {
  .episode-intro__track-meta-dot {
    display: block;
  }
}

/* Track Description */
.episode-intro__track-description {
  font-size: 0.75rem;
  color: #5d4037;
  line-height: 1.625;
  margin: 0;
  width: 100%;
  margin-top: 0.75rem;
}

@media (min-width: 768px) {
  .episode-intro__track-description {
    grid-column: 2;
    grid-row: 2;
    width: auto;
    margin-top: 0;
  }
}

/* Play Button */
.episode-intro__actions {
  display: flex;
  justify-content: center;
  margin-bottom: 1.5rem;
}

.episode-intro__play-btn {
  position: relative;
  padding: 1rem 2rem;
  background-color: #3e2723;
  color: #e8e0d5;
  font-family: 'Noto Serif SC', serif;
  font-size: 1.125rem;
  letter-spacing: 0.1em;
  overflow: hidden;
  box-shadow: 0 8px 20px rgba(62, 39, 35, 0.2);
  transition: all 0.3s ease;
  text-decoration: none;
  display: inline-block;
}

.episode-intro__play-btn:hover {
  box-shadow: 0 12px 25px rgba(62, 39, 35, 0.3);
}

.episode-intro__play-btn:active {
  transform: scale(0.95);
}

.episode-intro__play-btn-bg {
  position: absolute;
  inset: 0;
  background-color: #5d4037;
  transform: translateY(100%);
  transition: transform 0.3s ease-out;
}

.episode-intro__play-btn:hover .episode-intro__play-btn-bg {
  transform: translateY(0);
}

.episode-intro__play-btn-content {
  position: relative;
  z-index: 10;
  display: flex;
  align-items: center;
  gap: 0.75rem;
}

.episode-intro__play-btn-content i {
  font-size: 1.25rem;
  color: #ffd700;
  transition: transform 0.3s ease;
}

.episode-intro__play-btn:hover .episode-intro__play-btn-content i {
  transform: scale(1.1);
}

/* Button Corner Decorations */
.episode-intro__play-btn-corner {
  position: absolute;
  width: 0.375rem;
  height: 0.375rem;
  border-color: rgba(232, 224, 213, 0.3);
  border-style: solid;
  z-index: 10;
}

.episode-intro__play-btn-corner--tl {
  top: 0.25rem;
  left: 0.25rem;
  border-width: 1px 0 0 1px;
}

.episode-intro__play-btn-corner--tr {
  top: 0.25rem;
  right: 0.25rem;
  border-width: 1px 1px 0 0;
}

.episode-intro__play-btn-corner--bl {
  bottom: 0.25rem;
  left: 0.25rem;
  border-width: 0 0 1px 1px;
}

.episode-intro__play-btn-corner--br {
  bottom: 0.25rem;
  right: 0.25rem;
  border-width: 0 1px 1px 0;
}

/* =========================================
   Playing States
   ========================================= */

/* Vinyl Active States */
.episode-intro__vinyl--active,
.episode-intro__track--current .episode-intro__vinyl {
  opacity: 1;
  transform: translateX(0.5rem);
}

@media (min-width: 768px) {
  .episode-intro__vinyl--active,
  .episode-intro__track--current .episode-intro__vinyl {
    transform: translateX(1rem);
  }
}

.episode-intro__vinyl--spinning,
.episode-intro__track--playing .episode-intro__vinyl {
  animation: spin 4s linear infinite;
  transform: translateX(0);
}

@media (min-width: 768px) {
  .episode-intro__vinyl--spinning,
  .episode-intro__track--playing .episode-intro__vinyl {
    transform: translateX(0);
  }
}

/* Play Overlay Active State */
.episode-intro__track--current .episode-intro__play-overlay {
  opacity: 1;
}

/* Title Active State */
.episode-intro__track-title--active,
.episode-intro__track--current .episode-intro__track-title {
  color: #8b5a2b;
}

/* Equalizer Animation */
.episode-intro__equalizer {
  display: none;
  align-items: flex-end;
  gap: 2px;
  height: 0.75rem;
  margin-left: 0.5rem;
}

@media (min-width: 768px) {
  .episode-intro__equalizer {
    margin-left: auto;
  }
}

.episode-intro__equalizer--active,
.episode-intro__track--playing .episode-intro__equalizer {
  display: flex;
}

.episode-intro__equalizer-bar {
  width: 0.25rem;
  background-color: #8b5a2b;
  animation: equalizer 1s ease-in-out infinite;
}

.episode-intro__equalizer-bar:nth-child(1) {
  height: 40%;
  animation-delay: 0.1s;
}

.episode-intro__equalizer-bar:nth-child(2) {
  height: 70%;
  animation-delay: 0.3s;
}

.episode-intro__equalizer-bar:nth-child(3) {
  height: 50%;
  animation-delay: 0.2s;
}

.episode-intro__equalizer-bar:nth-child(4) {
  height: 80%;
  animation-delay: 0.4s;
}

@keyframes equalizer {
  0%, 100% { transform: scaleY(1); }
  50% { transform: scaleY(0.5); }
}

/* =========================================
   Loading State
   ========================================= */

.episode-intro__track--loading {
  opacity: 0.7;
  pointer-events: none;
}

.episode-intro__track--loading .episode-intro__play-overlay {
  opacity: 1;
}

.episode-intro__track--loading .episode-intro__play-overlay::after {
  content: '';
  width: 1.5rem;
  height: 1.5rem;
  border: 2px solid rgba(242, 239, 233, 0.3);
  border-top-color: #f2efe9;
  border-radius: 50%;
  animation: spin 0.8s linear infinite;
  position: absolute;
}

.episode-intro__track--loading .episode-intro__play-icon {
  display: none;
}
/* =========================================
   社交媒体链接 (Social Links Component)
   ========================================= */

.social-links {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    width: 100%;
    margin-top: 2rem;
    margin-bottom: 1rem;
    gap: 1.5rem;
}

.social-links__divider {
    position: relative;
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
}

.social-links__line {
    position: absolute;
    left: 0;
    right: 0;
    height: 1px;
    background-color: rgba(62, 39, 35, 0.1);
}

.social-links__text {
    font-family: 'Share Tech Mono', monospace;
    font-size: 0.75rem;
    color: rgba(93, 64, 55, 0.6);
    text-transform: uppercase;
    letter-spacing: 0.2em;
    background-color: #f2efe9;
    padding: 0 1rem;
    position: relative;
    z-index: 10;
}

.social-links__icons {
    display: flex;
    align-items: center;
    gap: 1rem;
}

@media (min-width: 768px) {
    .social-links__icons { gap: 1.5rem; }
}

.social-links__btn {
    width: 3rem;
    height: 3rem;
    border-radius: 50%;
    border: 1px solid rgba(62, 39, 35, 0.2);
    display: flex;
    align-items: center;
    justify-content: center;
    color: #5d4037;
    background-color: #faf9f6;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
    transition: all 0.3s ease;
    text-decoration: none;
}

.social-links__btn:hover {
    transform: translateY(-2px);
    box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
}

.social-links__btn i {
    font-size: 1.25rem;
    transition: transform 0.3s ease;
}

.social-links__btn:hover i {
    transform: scale(1.1);
}

.social-links__xiaohongshu-text {
    font-weight: bold;
    font-size: 11px;
    line-height: 1;
    transition: transform 0.3s ease;
}

.social-links__btn--youtube:hover {
    background-color: #ff0000;
    color: #ffffff;
    border-color: #ff0000;
}

.social-links__btn--wechat:hover {
    background-color: #07c160;
    color: #ffffff;
    border-color: #07c160;
}

.social-links__btn--bilibili:hover {
    background-color: #00a1d6;
    color: #ffffff;
    border-color: #00a1d6;
}

.social-links__btn--xiaohongshu:hover {
    background-color: #ff2442;
    color: #ffffff;
    border-color: #ff2442;
}

.social-links__btn--xiaohongshu:hover .social-links__xiaohongshu-text {
    transform: scale(1.1);
}
/* =========================================
   Ticket Card Component Styles
   ========================================= */

.ticket-card {
  position: relative;
  max-width: 32rem;
  width: 100%;
  margin: 0 auto;
  cursor: pointer;
  transition: transform 0.3s ease;
  display: block;
  text-decoration: none;
}

@media (min-width: 768px) {
  .ticket-card {
    margin-left: auto;
    margin-right: 0;
  }
}

.ticket-card:hover {
  transform: translateY(-4px);
}

.ticket-container {
  display: flex;
  width: 100%;
  background-color: #eae2cf;
  border-radius: 0.125rem;
  box-shadow: 0 10px 25px rgba(62, 39, 35, 0.15);
  position: relative;
  overflow: hidden;
}

/* Ticket Stub (左侧票根) */
.ticket-stub {
  width: 6rem;
  background-color: #3e2723;
  color: #e8e0d5;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  position: relative;
  padding: 0.75rem;
  flex-shrink: 0;
  border-right: 2px dashed rgba(234, 226, 207, 0.4);
}

.stub-serial {
  position: absolute;
  left: 0.5rem;
  bottom: 1rem;
  font-size: 9px;
  font-family: 'Share Tech Mono', monospace;
  opacity: 0.5;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  transform: rotate(-90deg);
  transform-origin: left;
  white-space: nowrap;
}

.stub-date {
  text-align: center;
  z-index: 10;
}

.stub-date .month {
  font-size: 10px;
  font-weight: bold;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: #8b5a2b;
}

.stub-date .day {
  font-size: 1.875rem;
  font-weight: bold;
  font-family: 'Noto Serif SC', serif;
  line-height: 1;
  margin-top: 0.25rem;
}

/* Notch (打孔效果) */
.notch {
  position: absolute;
  right: -0.5rem;
  width: 1rem;
  height: 1rem;
  background-color: #f2efe9;
  border-radius: 50%;
  z-index: 20;
}

.notch-top {
  top: -0.5rem;
}

.notch-bottom {
  bottom: -0.5rem;
}

/* Ticket Body (门票主体) */
.ticket-body {
  flex: 1;
  padding: 1.25rem;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  position: relative;
  background-image: url('https://www.transparenttextures.com/patterns/cream-paper.png');
}

.grain-overlay {
  position: absolute;
  inset: 0;
  opacity: 0.1;
  pointer-events: none;
  background-image: radial-gradient(#3e2723 0.5px, transparent 0.5px);
  background-size: 8px 8px;
}

/* Ticket Header */
.ticket-header {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  border-bottom: 1px solid rgba(62, 39, 35, 0.1);
  padding-bottom: 0.5rem;
  margin-bottom: 0.5rem;
  position: relative;
  z-index: 10;
}

.ticket-type {
  display: flex;
  align-items: center;
  gap: 0.5rem;
}

.ticket-type i {
  color: #8b5a2b;
  font-size: 0.75rem;
}

.ticket-type span {
  font-family: 'Share Tech Mono', monospace;
  font-size: 10px;
  color: #5d4037;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

.ticket-status {
  font-family: 'Share Tech Mono', monospace;
  font-size: 10px;
  color: #8b5a2b;
  text-transform: uppercase;
}

/* Ticket Title Area */
.ticket-title-area {
  position: relative;
  z-index: 10;
  margin-bottom: 0.5rem;
}

.ticket-title {
  font-size: 1.5rem;
  color: #2d2420;
  font-family: 'Noto Serif SC', serif;
  font-weight: bold;
  line-height: 1.25;
  letter-spacing: -0.025em;
  margin: 0;
}

.ticket-subtitle {
  font-size: 0.75rem;
  color: rgba(93, 64, 55, 0.8);
  margin-top: 0.25rem;
  font-family: 'Share Tech Mono', monospace;
  margin-bottom: 0;
}

/* Ticket Footer */
.ticket-footer {
  display: flex;
  justify-content: space-between;
  align-items: center;
  position: relative;
  z-index: 10;
  margin-top: 0.5rem;
}

.seat-info {
  display: none;
  font-size: 9px;
  font-family: 'Share Tech Mono', monospace;
  color: rgba(62, 39, 35, 0.5);
  line-height: 1.25;
  text-transform: uppercase;
}

@media (min-width: 640px) {
  .seat-info {
    display: block;
  }
}

/* Play Button */
.play-btn {
  padding: 0.5rem 1.25rem;
  background-color: #3e2723;
  color: #e8e0d5;
  font-family: 'Share Tech Mono', monospace;
  font-size: 10px;
  font-weight: bold;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  border-radius: 0.125rem;
  border: none;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
  cursor: pointer;
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin-left: auto;
  transition: all 0.2s;
  pointer-events: none; /* Allow click to pass through to parent link */
}

.ticket-card:hover .play-btn {
  background-color: #5d4037;
  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
}

.ticket-card:active .play-btn {
  transform: scale(0.95) translateY(1px);
}

.play-btn i {
  font-size: 8px;
}
/* =========================================
   Vinyl Sticker Component Styles
   ========================================= */

.vinyl-sticker {
  position: relative;
  width: 12rem;
  height: 12rem;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
}

@media (min-width: 768px) {
  .vinyl-sticker {
    width: 14rem;
    height: 14rem;
  }
}

.vinyl-wrapper {
  position: relative;
  width: 100%;
  height: 100%;
}

.vinyl-outline {
  position: absolute;
  top: -0.5rem;
  right: -0.5rem;
  bottom: -0.5rem;
  left: -0.5rem;
  background-color: #ffffff;
  border-radius: 50%;
  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
  transform: rotate(2deg);
}

.vinyl-disc {
  position: relative;
  width: 100%;
  height: 100%;
  border-radius: 50%;
  background-color: #2a2a2a;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 4px solid #1a1a1a;
  animation: spin 8s linear infinite;
}

.vinyl-wrapper:hover .vinyl-disc {
  animation: spin 3s linear infinite;
}

@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

.groove-1 {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  border: 20px solid transparent;
  border-top-color: rgba(56, 56, 56, 0.3);
  border-bottom-color: rgba(56, 56, 56, 0.3);
  pointer-events: none;
}

.groove-2 {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  border: 40px solid transparent;
  border-left-color: rgba(56, 56, 56, 0.2);
  border-right-color: rgba(56, 56, 56, 0.2);
  pointer-events: none;
}

.vinyl-label {
  width: 5rem;
  height: 5rem;
  background-color: #ffd700;
  border-radius: 50%;
  border: 4px solid #2a2a2a;
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.1);
}

.label-text {
  font-family: 'Share Tech Mono', monospace;
  font-size: 8px;
  font-weight: bold;
  letter-spacing: -0.05em;
  color: #2a2a2a;
  transform: rotate(-12deg);
  opacity: 0.8;
}

.center-hole {
  position: absolute;
  width: 0.5rem;
  height: 0.5rem;
  background-color: #f2efe9;
  border-radius: 50%;
  border: 1px solid #2a2a2a;
}

.reflection {
  position: absolute;
  top: 1rem;
  right: 1rem;
  width: 3rem;
  height: 3rem;
  background-color: rgba(255, 255, 255, 0.1);
  border-radius: 50%;
  filter: blur(8px);
}

.music-note {
  position: absolute;
  top: -1rem;
  right: -0.5rem;
  color: #3e2723;
  font-size: 1.5rem;
  transform: rotate(12deg);
  animation: bounce 2s infinite;
  opacity: 0.8;
}

@keyframes bounce {
  0%, 100% {
    transform: translateY(-25%) rotate(12deg);
    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
  }
  50% {
    transform: none;
    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
  }
}
/* =========================================
   Landing Page Styles - Village FM
   Retro Vinyl Style Landing Page
   ========================================= */

/* -----------------------------------------
   CSS Variables (Design Tokens)
   ----------------------------------------- */
.landing-page {
  /* Colors */
  --color-bg: #f2efe9;
  --color-bg-paper: #fffdf5;
  --color-bg-ticket: #eae2cf;
  --color-bg-tag: #e6d5b8;
  --color-text-primary: #2d2d2d;
  --color-text-secondary: #3e2723;
  --color-text-muted: #5d4037;
  --color-accent: #ffd700;
  --color-vinyl: #2a2a2a;
  --color-vinyl-border: #1a1a1a;
  --color-stub-bg: #3e2723;
  --color-stub-text: #e8e0d5;
  --color-border: rgba(93, 64, 55, 0.2);

  /* Typography */
  --font-serif: 'Noto Serif SC', 'STSong', 'SimSun', serif;
  --font-mono: 'Share Tech Mono', 'Courier New', monospace;
  --font-display: 'ZCOOL KuaiLe', cursive;
  --font-title: 'Lilita One', 'Arial Black', sans-serif;

  /* Spacing */
  --spacing-xs: 0.25rem;
  --spacing-sm: 0.5rem;
  --spacing-md: 1rem;
  --spacing-lg: 1.5rem;
  --spacing-xl: 2rem;
  --spacing-2xl: 3rem;

  /* Effects */
  --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
  --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
  --shadow-lg: 0 10px 25px rgba(62, 39, 35, 0.15);
  --radius-sm: 0.125rem;
  --radius-full: 9999px;

  /* Animation */
  --transition-fast: 0.2s ease;
  --transition-normal: 0.3s ease;
}

/* Override global body styles for landing page */
body:has(.landing-page) {
  align-items: flex-start;
  overflow: auto;
}

body:has(.landing-page) #main-content {
  align-items: flex-start;
  overflow: visible;
}

/* Hide mini player on landing page */
body:has(.landing-page) .mini-player-container {
  display: none !important;
}

/* -----------------------------------------
   Base Styles
   ----------------------------------------- */
.landing-page * {
  box-sizing: border-box;
}

.landing-page {
  font-family: var(--font-serif);
  background-color: var(--color-bg);
  color: var(--color-text-secondary);
  min-height: 100vh;
  min-height: 100dvh;
  width: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: var(--spacing-lg);
  position: relative;
  overflow-x: hidden;
  -webkit-user-select: none;
  user-select: none;
}

/* -----------------------------------------
   Background & Container
   ----------------------------------------- */
.bg-texture {
  position: absolute;
  inset: 0;
  pointer-events: none;
  opacity: 0.4;
  mix-blend-mode: multiply;
  background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23a8a29e' fill-opacity='0.15'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
}

.main-container {
  position: relative;
  z-index: 10;
  width: 100%;
  max-width: 42rem;
  display: flex;
  flex-direction: column;
  gap: var(--spacing-xl);
  animation: fadeInZoom 0.7s ease-out forwards;
}

@media (min-width: 768px) {
  .main-container { gap: var(--spacing-2xl); }
}

@keyframes fadeInZoom {
  0% { opacity: 0; transform: scale(0.95); }
  100% { opacity: 1; transform: scale(1); }
}

/* -----------------------------------------
   Header Section
   ----------------------------------------- */
.header-section {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: space-between;
  gap: var(--spacing-lg);
  padding-bottom: var(--spacing-xl);
  border-bottom: 1px solid var(--color-border);
}

@media (min-width: 768px) {
  .header-section {
    flex-direction: row;
    align-items: flex-end;
    gap: var(--spacing-2xl);
  }
}

.title-area {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
}

@media (min-width: 768px) {
  .title-area {
    align-items: flex-start;
    text-align: left;
  }
}

.title-zh {
  font-family: var(--font-display);
  font-size: 3.75rem;
  color: var(--color-text-primary);
  letter-spacing: 0.1em;
  transform: rotate(-2deg);
  transform-origin: center center;
  text-shadow: var(--shadow-sm);
  margin: 0;
}

@media (min-width: 768px) {
  .title-zh {
    font-size: 6rem;
    transform-origin: bottom left;
  }
}

.title-en-wrapper {
  position: relative;
  margin-top: var(--spacing-sm);
}

.title-en {
  font-family: var(--font-title);
  font-size: 3rem;
  color: var(--color-text-primary);
  letter-spacing: 0.05em;
  display: flex;
  align-items: center;
  gap: var(--spacing-xs);
  margin: 0;
}

@media (min-width: 768px) {
  .title-en { font-size: 4.5rem; }
}

.letter-wrapper { position: relative; }

/* Letter accents (yellow geometric highlights) */
.accent-a,
.accent-d,
.accent-o {
  position: absolute;
  background-color: var(--color-accent);
  z-index: -1;
}

.accent-a {
  left: 50%;
  transform: translateX(-50%);
  bottom: 15%;
  width: 40%;
  height: 25%;
  border-radius: var(--radius-full) var(--radius-full) 0 0;
}

.accent-d {
  left: 30%;
  top: 25%;
  bottom: 25%;
  width: 20%;
  border-radius: var(--radius-full) 0 0 var(--radius-full);
}

.accent-o {
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 40%;
  height: 40%;
  border-radius: 50%;
}

.title-underline {
  position: absolute;
  bottom: -0.5rem;
  left: 0;
  right: 0;
  height: 0.5rem;
  background-color: var(--color-accent);
  border-radius: var(--radius-full);
  opacity: 0.6;
  transform: rotate(-1deg);
}

.frequency-tag {
  margin-top: var(--spacing-lg);
  font-family: var(--font-mono);
  font-size: 0.75rem;
  color: var(--color-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.3em;
  background-color: var(--color-bg-tag);
  padding: var(--spacing-xs) 0.75rem;
  border-radius: var(--radius-sm);
  box-shadow: var(--shadow-sm);
  border: 1px solid rgba(93, 64, 55, 0.1);
  transform: rotate(1deg);
}

/* -----------------------------------------
   Vinyl Sticker Component
   ----------------------------------------- */
.vinyl-sticker {
  position: relative;
  width: 12rem;
  height: 12rem;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
}

@media (min-width: 768px) {
  .vinyl-sticker {
    width: 14rem;
    height: 14rem;
  }
}



.vinyl-outline {
  position: absolute;
  inset: -0.5rem;
  background-color: #ffffff;
  border-radius: 50%;
  box-shadow: var(--shadow-md);
  transform: rotate(2deg);
}

.vinyl-disc {
  position: relative;
  width: 100%;
  height: 100%;
  border-radius: 50%;
  background-color: var(--color-vinyl);
  display: flex;
  align-items: center;
  justify-content: center;
  border: 4px solid var(--color-vinyl-border);
  animation: spin 8s linear infinite;
}



@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

.groove-1,
.groove-2 {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  pointer-events: none;
}

.groove-1 {
  border: 20px solid transparent;
  border-top-color: rgba(56, 56, 56, 0.3);
  border-bottom-color: rgba(56, 56, 56, 0.3);
}

.groove-2 {
  border: 40px solid transparent;
  border-left-color: rgba(56, 56, 56, 0.2);
  border-right-color: rgba(56, 56, 56, 0.2);
}

.vinyl-label {
  width: 5rem;
  height: 5rem;
  background-color: var(--color-accent);
  border-radius: 50%;
  border: 4px solid var(--color-vinyl);
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.1);
}

.label-text {
  font-family: var(--font-mono);
  font-size: 8px;
  font-weight: bold;
  letter-spacing: -0.05em;
  color: var(--color-vinyl);
  transform: rotate(-12deg);
  opacity: 0.8;
}

.center-hole {
  position: absolute;
  width: 0.5rem;
  height: 0.5rem;
  background-color: var(--color-bg);
  border-radius: 50%;
  border: 1px solid var(--color-vinyl);
}

.reflection {
  position: absolute;
  top: 1rem;
  right: 1rem;
  width: 3rem;
  height: 3rem;
  background-color: rgba(255, 255, 255, 0.1);
  border-radius: 50%;
  filter: blur(8px);
}

.music-note {
  position: absolute;
  top: -1rem;
  right: -0.5rem;
  color: var(--color-text-secondary);
  font-size: 1.5rem;
  transform: rotate(12deg);
  animation: bounce 2s infinite;
  opacity: 0.8;
}

@keyframes bounce {
  0%, 100% {
    transform: translateY(-25%) rotate(12deg);
    animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
  }
  50% {
    transform: none;
    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
  }
}

/* -----------------------------------------
   Content Section (Cards)
   ----------------------------------------- */
.content-section {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-xl);
}

/* Next Episode Card */
.next-episode-card {
  position: relative;
  background-color: var(--color-bg-paper);
  padding: var(--spacing-lg);
  transform: rotate(-1deg);
  box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05);
  border: 1px solid var(--color-bg-tag);
  max-width: 28rem;
  width: 100%;
  margin: 0 auto;
}

@media (min-width: 768px) {
  .next-episode-card { margin: 0; }
}

.paper-texture-overlay {
  position: absolute;
  inset: 0;
  opacity: 0.5;
  pointer-events: none;
  background-color: #f3e6d3;
  background-image:
    linear-gradient(rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0) 50%),
    url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(/%23noiseFilter)' opacity='0.05'/%3E%3C/svg%3E");
}

.tape-effect {
  position: absolute;
  top: -0.75rem;
  left: 50%;
  transform: translateX(-50%) rotate(-2deg);
  width: 6rem;
  height: 1.5rem;
  background-color: rgba(212, 197, 176, 0.4);
  backdrop-filter: blur(1px);
  box-shadow: var(--shadow-sm);
}

.card-content {
  position: relative;
  z-index: 10;
}

.next-title {
  font-family: var(--font-mono);
  font-size: 10px;
  color: #8b5a2b;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  margin-bottom: 0.75rem;
  border-bottom: 1px solid rgba(139, 90, 43, 0.2);
  padding-bottom: var(--spacing-xs);
}

.quote {
  font-size: 1.125rem;
  font-style: italic;
  line-height: 1.625;
  font-family: var(--font-serif);
}

.author {
  font-size: 0.75rem;
  color: rgba(93, 64, 55, 0.7);
  margin-top: 0.75rem;
  font-family: var(--font-mono);
  text-align: right;
}

/* Latest Episode Card (Ticket Style) */
.latest-episode-card {
  position: relative;
  max-width: 32rem;
  width: 100%;
  margin: 0 auto;
  cursor: pointer;
  transition: transform var(--transition-normal);
  text-decoration: none;
  display: block;
}

@media (min-width: 768px) {
  .latest-episode-card {
    margin-left: auto;
    margin-right: 0;
  }
}

.latest-episode-card:hover {
  transform: translateY(-4px);
}

.ticket-container {
  display: flex;
  width: 100%;
  background-color: var(--color-bg-ticket);
  border-radius: var(--radius-sm);
  box-shadow: var(--shadow-lg);
  position: relative;
  overflow: hidden;
}

.ticket-stub {
  width: 6rem;
  background-color: var(--color-stub-bg);
  color: var(--color-stub-text);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  position: relative;
  padding: 0.75rem;
  flex-shrink: 0;
  border-right: 2px dashed rgba(234, 226, 207, 0.4);
}

.stub-serial {
  position: absolute;
  left: 0.5rem;
  bottom: 1rem;
  font-size: 9px;
  font-family: var(--font-mono);
  opacity: 0.5;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  transform: rotate(-90deg);
  transform-origin: left;
  white-space: nowrap;
}

.stub-date {
  text-align: center;
  z-index: 10;
}

.month {
  font-size: 10px;
  font-weight: bold;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: #8b5a2b;
}

.day {
  font-size: 1.875rem;
  font-weight: bold;
  font-family: var(--font-serif);
  line-height: 1;
  margin-top: var(--spacing-xs);
}

.notch {
  position: absolute;
  right: -0.5rem;
  width: 1rem;
  height: 1rem;
  background-color: var(--color-bg);
  border-radius: 50%;
  z-index: 20;
}

.notch-top { top: -0.5rem; }
.notch-bottom { bottom: -0.5rem; }

.ticket-body {
  flex: 1;
  padding: 1.25rem;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  position: relative;
  background-image:
    radial-gradient(circle at 20% 50%, rgba(139, 90, 43, 0.03) 0%, transparent 50%),
    radial-gradient(circle at 80% 80%, rgba(139, 90, 43, 0.03) 0%, transparent 50%);
}

.grain-overlay {
  position: absolute;
  inset: 0;
  opacity: 0.1;
  pointer-events: none;
  background-image: radial-gradient(var(--color-text-secondary) 0.5px, transparent 0.5px);
  background-size: 8px 8px;
}

.ticket-header {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  border-bottom: 1px solid rgba(62, 39, 35, 0.1);
  padding-bottom: var(--spacing-sm);
  margin-bottom: var(--spacing-sm);
  position: relative;
  z-index: 10;
}

.ticket-type {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
}

.ticket-type i {
  color: #8b5a2b;
  font-size: 0.75rem;
}

.ticket-type span,
.ticket-status {
  font-family: var(--font-mono);
  font-size: 10px;
  text-transform: uppercase;
}

.ticket-type span {
  color: var(--color-text-muted);
  letter-spacing: 0.05em;
}

.ticket-status {
  color: #8b5a2b;
}

.ticket-title-area {
  position: relative;
  z-index: 10;
  margin-bottom: var(--spacing-sm);
}

.ticket-title {
  font-size: 1.5rem;
  color: #2d2420;
  font-family: var(--font-serif);
  font-weight: bold;
  line-height: 1.25;
  letter-spacing: -0.025em;
  margin: 0;
}

.ticket-subtitle {
  font-size: 0.75rem;
  color: rgba(93, 64, 55, 0.8);
  margin-top: var(--spacing-xs);
  font-family: var(--font-mono);
  margin-bottom: 0;
}

.ticket-footer {
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  position: relative;
  z-index: 10;
  margin-top: var(--spacing-sm);
}

.seat-info {
  display: none;
  font-size: 9px;
  font-family: var(--font-mono);
  color: rgba(62, 39, 35, 0.5);
  line-height: 1.25;
  text-transform: uppercase;
}

@media (min-width: 640px) {
  .seat-info { display: block; }
}

/*.play-btn {*/
/*  padding: var(--spacing-sm) 1.25rem;*/
/*  background-color: var(--color-stub-bg);*/
/*  color: var(--color-stub-text);*/
/*  font-family: var(--font-mono);*/
/*  font-size: 10px;*/
/*  font-weight: bold;*/
/*  text-transform: uppercase;*/
/*  letter-spacing: 0.1em;*/
/*  border-radius: var(--radius-sm);*/
/*  border: none;*/
/*  box-shadow: var(--shadow-sm);*/
/*  cursor: pointer;*/
/*  display: flex;*/
/*  align-items: center;*/
/*  gap: var(--spacing-sm);*/
/*  margin-left: auto;*/
/*  transition: all var(--transition-fast);*/
/*}*/

/*.play-btn:hover {*/
/*  background-color: var(--color-text-muted);*/
/*  box-shadow: var(--shadow-md);*/
/*}*/

/*.play-btn:active {*/
/*  transform: scale(0.95) translateY(1px);*/
/*}*/

/*.play-btn i {*/
/*  font-size: 8px;*/
/*}*/

/* -----------------------------------------
   Footer
   ----------------------------------------- */
.footer {
  text-align: center;
  margin-top: var(--spacing-2xl);
  opacity: 0.3;
  color: var(--color-text-secondary);
}

.cd-icon {
  font-size: 1.5rem;
  animation: spin 5s linear infinite;
}

.footer-text {
  font-size: 9px;
  font-family: var(--font-mono);
  margin-top: var(--spacing-sm);
  letter-spacing: 0.1em;
}
/* Base Styles */
:root {
    --bg-color: #FDFCF8;
    --text-primary: #1c1917; /* stone-900 */
    --text-secondary: #57534e; /* stone-600 */
    --text-tertiary: #a8a29e; /* stone-400 */
    --border-color: #e7e5e4; /* stone-200 */
    --bg-alt: #f5f5f4; /* stone-100 */
    --font-sans: 'Inter', ui-sans-serif, system-ui, sans-serif;
    --font-serif: 'Playfair Display', ui-serif, Georgia, serif;
}

/* Dark Mode Support (Optional, based on media query or class) */
@media (prefers-color-scheme: dark) {
    :root {
        --bg-color: #1c1917; /* stone-900 */
        --text-primary: #fafaf9; /* stone-50 */
        --text-secondary: #d6d3d1; /* stone-300 */
        --text-tertiary: #78716c; /* stone-500 */
        --border-color: #292524; /* stone-800 */
        --bg-alt: #0c0a09; /* stone-950 */
    }
}

* {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

body {
    font-family: var(--font-sans);
    background-color: var(--bg-color);
    color: var(--text-primary);
    min-height: 100vh;
    overflow-x: hidden;
    line-height: 1.5;
}

/* Global Noise Texture */
.noise-overlay {
    position: fixed;
    inset: 0;
    pointer-events: none;
    opacity: 0.08;
    z-index: 0;
    mix-blend-mode: multiply;
    background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(/%23noiseFilter)'/%3E%3C/svg%3E");
}

@media (prefers-color-scheme: dark) {
    .noise-overlay {
        opacity: 0.04;
        mix-blend-mode: screen;
    }
}

.explore-container {
    position: relative;
    z-index: 10;
    padding-bottom: 8rem;
}

/* Hero Section */
.hero-section {
    padding: 6rem 1.5rem 3rem;
}

@media (min-width: 768px) {
    .hero-section {
        padding: 8rem 3rem 4rem;
    }
}

.hero-content {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    align-items: flex-end;
    gap: 2rem;
    border-bottom: 1px solid var(--border-color);
    padding-bottom: 3rem;
}

@media (min-width: 768px) {
    .hero-content {
        flex-direction: row;
        gap: 3rem;
    }
}

.hero-left {
    width: 100%;
}

@media (min-width: 768px) {
    .hero-left {
        width: 66.666%;
    }
}

.hero-label {
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    color: var(--text-tertiary);
    margin-bottom: 1rem;
    display: block;
}

.hero-title {
    font-size: 13vw;
    line-height: 0.85;
    font-family: var(--font-serif);
    letter-spacing: -0.05em;
}

@media (min-width: 768px) {
    .hero-title {
        font-size: 8vw;
    }
}

.hero-subtitle {
    display: block;
    font-size: 6vw;
    font-style: italic;
    color: var(--text-tertiary);
    margin-top: 0.5rem;
}

@media (min-width: 768px) {
    .hero-subtitle {
        font-size: 4vw;
    }
}

.hero-right {
    width: 100%;
    display: flex;
    flex-direction: column;
    gap: 1.5rem;
}

@media (min-width: 768px) {
    .hero-right {
        width: 33.333%;
    }
}

.hero-quote {
    font-family: var(--font-serif);
    font-style: italic;
    font-size: 1.25rem;
    line-height: 1.625;
}

@media (min-width: 768px) {
    .hero-quote {
        font-size: 1.5rem;
    }
}

.hero-meta {
    display: flex;
    align-items: center;
    gap: 1rem;
}

.hero-meta .line {
    height: 1px;
    width: 3rem;
    background-color: var(--text-tertiary);
}

.meta-text {
    font-size: 0.625rem;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    color: var(--text-tertiary);
}

/* Masters Section */
.masters-section {
    padding: 2rem 0;
}

@media (min-width: 768px) {
    .masters-section {
        padding: 3rem 3rem;
    }
}

.section-header {
    display: flex;
    align-items: baseline;
    gap: 1rem;
    margin-bottom: 2rem;
    padding: 0 1.5rem;
}

@media (min-width: 768px) {
    .section-header {
        margin-bottom: 4rem;
        padding: 0;
    }
}

.section-number {
    font-size: 2.25rem;
    font-family: var(--font-serif);
    line-height: 1;
    color: var(--text-tertiary);
}

@media (min-width: 768px) {
    .section-number {
        font-size: 3rem;
    }
}

.section-title {
    font-size: 1.125rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.1em;
}

@media (min-width: 768px) {
    .section-title {
        font-size: 1.25rem;
    }
}

.masters-list {
    display: flex;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    gap: 1.5rem;
    padding: 0 1.5rem 2rem;
    width: 100%;
}

.masters-list::-webkit-scrollbar {
    display: none;
}

@media (min-width: 768px) {
    .masters-list {
        flex-direction: column;
        gap: 6rem;
        overflow-x: visible;
        padding: 0;
    }
}

.master-item {
    scroll-snap-align: center;
    flex-shrink: 0;
    width: 85vw;
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 1.5rem;
    cursor: pointer;
    text-decoration: none;
}

@media (min-width: 768px) {
    .master-item {
        width: 100%;
        flex-shrink: 1;
        flex-direction: row;
        gap: 6rem;
    }

    .master-item.reversed {
        flex-direction: row-reverse;
    }
}

.bg-number {
    display: none;
}

@media (min-width: 768px) {
    .bg-number {
        display: block;
        position: absolute;
        top: 0;
        z-index: -10;
        font-size: 20vw;
        font-family: var(--font-serif);
        line-height: 1;
        color: var(--border-color);
        user-select: none;
    }

    .bg-number.right {
        right: 0;
    }

    .bg-number.left {
        left: 0;
    }
}

.master-image-wrapper {
    position: relative;
    width: 100%;
    aspect-ratio: 3 / 4;
    box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
    transition: transform 0.7s ease-out;
}

@media (min-width: 768px) {
    .master-image-wrapper {
        width: 40%;
        aspect-ratio: 4 / 5;
    }

    .master-item:hover .master-image-wrapper {
        transform: scale(1.02);
    }
}

@media (min-width: 1024px) {
    .master-image-wrapper {
        width: 35%;
    }
}

.master-image-wrapper img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: all 0.7s ease;
}

.mobile-hint {
    position: absolute;
    bottom: 1rem;
    right: 1rem;
    background-color: rgba(255, 255, 255, 0.9);
    backdrop-filter: blur(4px);
    color: #1c1917;
    padding: 0.5rem;
    border-radius: 9999px;
    display: flex;
    align-items: center;
    justify-content: center;
}

@media (prefers-color-scheme: dark) {
    .mobile-hint {
        background-color: rgba(28, 25, 23, 0.9);
        color: #fafaf9;
    }
}

@media (min-width: 768px) {
    .mobile-hint {
        display: none;
    }
}

.master-info {
    display: flex;
    flex-direction: column;
    justify-content: center;
}

@media (min-width: 768px) {
    .master-info.left-align {
        align-items: flex-start;
        text-align: left;
    }

    .master-info.right-align {
        align-items: flex-end;
        text-align: right;
    }
}

.info-content {
    max-width: 32rem;
}

.info-header {
    display: flex;
    flex-direction: column;
}

@media (min-width: 768px) {
    .master-info.left-align .info-header {
        align-items: flex-start;
    }

    .master-info.right-align .info-header {
        align-items: flex-end;
    }
}

.meta-info {
    font-size: 0.625rem;
    font-weight: 700;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--text-tertiary);
    text-decoration: none;
}

@media (min-width: 768px) {
    .meta-info {
        font-size: 0.75rem;
    }
}

.book-title {
    font-size: 1.875rem;
    font-family: var(--font-serif);
    line-height: 1;
    margin-top: 0.5rem;
    text-decoration: none;
}

@media (min-width: 768px) {
    .book-title {
        font-size: 4.5rem;
    }
}

.book-author {
    font-size: 1.125rem;
    font-family: var(--font-serif);
    font-style: italic;
    color: var(--text-tertiary);
    margin-top: 0.25rem;
    text-decoration: none;
}

@media (min-width: 768px) {
    .book-author {
        font-size: 1.5rem;
    }
}

.book-description {
    font-size: 0.875rem;
    text-decoration: none;
    color: var(--text-secondary);
    line-height: 1.625;
    font-family: var(--font-serif);
    padding-top: 1rem;
    margin-top: 1rem;
    border-top: 1px solid var(--border-color);
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

@media (min-width: 768px) {
    .book-description {
        font-size: 1rem;
        padding-top: 1.5rem;
        margin-top: 1.5rem;
        -webkit-line-clamp: unset;
    }
}

.action-link {
    padding-top: 0.5rem;
}

@media (min-width: 768px) {
    .action-link {
        padding-top: 1rem;
    }
}

.action-link span {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    font-size: 0.625rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    border-bottom: 1px solid var(--text-primary);
    padding-bottom: 0.25rem;
    transition: color 0.3s, border-color 0.3s;
}

@media (min-width: 768px) {
    .action-link span {
        font-size: 0.75rem;
    }
}

.master-item:hover .action-link span {
    color: var(--text-secondary);
    border-color: var(--text-secondary);
}

/* Exhibitions Section */
.exhibitions-section {
    margin-top: 3rem;
    background-color: var(--bg-alt);
    padding: 4rem 0;
}

@media (min-width: 768px) {
    .exhibitions-section {
        margin-top: 8rem;
        padding: 6rem 0;
    }
}

.exhibitions-container {
    padding: 0 1.5rem;
}

@media (min-width: 768px) {
    .exhibitions-container {
        padding: 0 3rem;
    }
}

.section-header.space-between {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    border-bottom: 1px solid var(--border-color);
    padding-bottom: 1.5rem;
    margin-bottom: 3rem;
    padding-left: 0;
    padding-right: 0;
}

@media (min-width: 768px) {
    .section-header.space-between {
        margin-bottom: 4rem;
    }
}

.header-left {
    display: flex;
    align-items: baseline;
    gap: 1rem;
}

.header-right {
    display: none;
    font-size: 0.75rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    color: var(--text-tertiary);
}

@media (min-width: 768px) {
    .header-right {
        display: inline-block;
    }
}

.exhibitions-grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 3rem;
}

@media (min-width: 768px) {
    .exhibitions-grid {
        grid-template-columns: repeat(2, 1fr);
        gap: 3rem;
    }
}

@media (min-width: 1024px) {
    .exhibitions-grid {
        gap: 6rem;
    }
}

.exhibition-item {
    cursor: pointer;
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 1rem;
}

.exhibition-item.featured {
    margin-bottom: 2rem;
}

@media (min-width: 768px) {
    .exhibition-item.featured {
        grid-column: span 2;
        flex-direction: row;
        align-items: flex-end;
        gap: 2rem;
        margin-bottom: 3rem;
    }
}

@media (min-width: 1024px) {
    .exhibition-item.featured {
        gap: 3rem;
    }
}

.exhibition-image {
    position: relative;
    overflow: hidden;
    background-color: var(--border-color);
    box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
}

.exhibition-image.portrait {
    aspect-ratio: 3 / 4;
}

.exhibition-image.landscape {
    aspect-ratio: 4 / 3;
}

.exhibition-item.featured .exhibition-image {
    width: 100%;
    aspect-ratio: 16 / 9;
}

@media (min-width: 768px) {
    .exhibition-item.featured .exhibition-image {
        width: 66.666%;
    }
}

.exhibition-image img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform 1s ease;
}

.exhibition-item:hover .exhibition-image img {
    transform: scale(1.05);
}

.tag-wrapper {
    position: absolute;
    top: 0;
    left: 0;
    padding: 1rem;
}

.tag {
    background-color: rgba(255, 255, 255, 0.9);
    backdrop-filter: blur(12px);
    padding: 0.25rem 0.75rem;
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
    border: 1px solid var(--border-color);
    display: inline-block;
    font-size: 0.625rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--text-primary);
}

@media (prefers-color-scheme: dark) {
    .tag {
        background-color: rgba(28, 25, 23, 0.9);
    }
}

.exhibition-info {
    display: flex;
    flex-direction: column;
}

.exhibition-item.featured .exhibition-info {
    width: 100%;
    padding-bottom: 1rem;
}

@media (min-width: 768px) {
    .exhibition-item.featured .exhibition-info {
        width: 33.333%;
    }
}

.exhibition-item:not(.featured) .exhibition-info {
    padding-top: 0.5rem;
}

.info-top {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    margin-bottom: 0.5rem;
}

.date-range {
    font-size: 0.625rem;
    font-weight: 700;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--text-tertiary);
    transition: color 0.3s;
}

.exhibition-item:hover .date-range {
    color: var(--text-secondary);
}

.exhibition-name {
    font-family: var(--font-serif);
    color: var(--text-primary);
    line-height: 1.1;
    margin-bottom: 0.75rem;
    text-decoration-thickness: 1px;
    text-underline-offset: 4px;
}

.exhibition-item:hover .exhibition-name {
    text-decoration: underline;
}

.exhibition-item.featured .exhibition-name {
    font-size: 1.875rem;
}

@media (min-width: 768px) {
    .exhibition-item.featured .exhibition-name {
        font-size: 3rem;
    }
}

.exhibition-item:not(.featured) .exhibition-name {
    font-size: 1.5rem;
}

@media (min-width: 768px) {
    .exhibition-item:not(.featured) .exhibition-name {
        font-size: 1.875rem;
    }
}

.location {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    color: var(--text-tertiary);
    margin-bottom: 1rem;
}

.location span {
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    font-weight: 500;
}

.exhibition-desc {
    color: var(--text-secondary);
    font-family: var(--font-serif);
    font-style: italic;
    line-height: 1.625;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.exhibition-item.featured .exhibition-desc {
    font-size: 1rem;
    -webkit-line-clamp: 3;
}

@media (min-width: 768px) {
    .exhibition-item.featured .exhibition-desc {
        font-size: 1.125rem;
    }
}

.exhibition-item:not(.featured) .exhibition-desc {
    font-size: 0.875rem;
    -webkit-line-clamp: 2;
}

.action-link-hover {
    margin-top: 1.5rem;
    display: flex;
    align-items: center;
    gap: 0.5rem;
    font-size: 0.75rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    color: var(--text-primary);
    opacity: 0;
    transform: translateX(-10px);
    transition: opacity 0.3s, transform 0.3s;
}

.exhibition-item:hover .action-link-hover {
    opacity: 1;
    transform: translateX(0);
}

/* Footer */
.site-footer {
    margin-top: 3rem;
    padding: 3rem 3rem;
    text-align: center;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    align-items: center;
    gap: 1.5rem;
    border-top: 1px solid var(--border-color);
}

@media (min-width: 768px) {
    .site-footer {
        text-align: left;
        flex-direction: row;
    }
}

.footer-left h2 {
    font-family: var(--font-serif);
    font-style: italic;
    font-size: 1.5rem;
    color: var(--text-tertiary);
}

.footer-left p {
    font-size: 0.625rem;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    color: var(--text-tertiary);
    margin-top: 0.25rem;
}

.footer-right {
    font-size: 0.625rem;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    color: var(--text-tertiary);
}

/* =========================================
   Copyright Section - Legal Notice
   ========================================= */
.copyright-section {
    background-color: var(--bg-alt);
    border-top: 1px solid var(--border-color);
    padding: 3rem 1.5rem;
    margin-top: 4rem;
}

@media (min-width: 768px) {
    .copyright-section {
        padding: 4rem 3rem;
        margin-top: 6rem;
    }
}

.copyright-container {
    max-width: 48rem;
    margin: 0 auto;
}

.copyright-header {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    margin-bottom: 1.5rem;
    padding-bottom: 1rem;
    border-bottom: 1px solid var(--border-color);
}

.copyright-header svg {
    color: var(--text-tertiary);
    flex-shrink: 0;
}

.copyright-header span {
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--text-secondary);
}

.copyright-content {
    display: flex;
    flex-direction: column;
    gap: 1rem;
}

.copyright-text {
    font-size: 0.8125rem;
    line-height: 1.75;
    color: var(--text-secondary);
    text-align: justify;
}

@media (min-width: 768px) {
    .copyright-text {
        font-size: 0.875rem;
    }
}

.copyright-text strong {
    color: var(--text-primary);
    font-weight: 600;
}

.copyright-contact {
    margin-top: 0.5rem;
    padding: 1rem;
    background-color: var(--bg-color);
    border: 1px solid var(--border-color);
    border-radius: 0.25rem;
    text-align: center;
}

.contact-label {
    font-size: 0.75rem;
    font-weight: 600;
    color: var(--text-secondary);
    margin-right: 0.5rem;
}

.contact-link {
    font-size: 0.8125rem;
    color: var(--text-primary);
    text-decoration: none;
    border-bottom: 1px solid var(--text-tertiary);
    transition: border-color 0.3s;
}

.contact-link:hover {
    border-color: var(--text-primary);
}

.copyright-date {
    margin-top: 1.5rem;
    font-size: 0.6875rem;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--text-tertiary);
    text-align: center;
}

body {
    -webkit-text-size-adjust: 100%;
    text-size-adjust: 100%;
}

:root {
    /* 颜色变量 - 对应 Tailwind Colors */
    --more-color-idle: #a8a29e;   /* text-stone-400 */
    --more-color-hover: #DC4C3E;  /* Custom Red */
    --more-color-active: #292524; /* text-stone-800 */
}
/* === 极简文字按钮 (Minimalist Text Button) === */
.more-btn {
    /* 定位：对应 fixed bottom-6 right-6 */
    position: fixed;
    top: 1.5rem;
    left: 12%;
    z-index: 50;

    /* 盒子重置 */
    background: transparent;
    border: none;
    padding: 0.5rem; /* p-2 */
    margin: 0;
    cursor: pointer;
    outline: none;

    /* 排版：对应 font-serif text-3xl leading-none tracking-widest */
    font-family: "Cormorant Garamond", serif;
    font-size: 1.875rem; /* 30px */
    line-height: 1;
    letter-spacing: 0.1em;

    /* 颜色与过渡：对应 text-stone-400 transition-all duration-300 */
    color: var(--more-color-idle);
    transition: all 0.300s ease;

    /* 确保文字垂直居中 */
    display: flex;
    align-items: center;
    justify-content: center;

    -webkit-tap-highlight-color: transparent;

}


/* æ‚¬åœçŠ¶æ€ */
.more-btn:hover {
    /*border-color: var(--more-btn-hover-border);*/
    /*border: none;*/

    color: var(--more-color-hover);
    /*background-color: var(--more-btn-hover-bg);*/

    /* æ—‹è½¬ 90åº¦ï¼ŒæŠŠæ¨ªå‘çœç•¥å·å˜æˆçºµå‘ */
    transform: rotate(90deg) scale(1.05);
    box-shadow: 0 8px 20px -5px rgba(0,0,0,0.1);
}

/* 悬停状态：对应 hover:text-[#DC4C3E] */
/* 注意：只有在未激活(未旋转)时才应用红色悬停，避免冲突 */
/*.more-btn:not(.is-open):hover {*/
/*    color: var(--more-color-hover);*/
/*}*/

/* 激活状态：对应 isMoreMenuOpen ? 'text-stone-800 rotate-90' */
/* 需要通过 JS 切换 .is-open 类名 */
/*.more-btn.is-open {*/
/*    color: var(--more-color-active);*/
/*    transform: rotate(90deg);*/
/*}*/

.more-btn:active {
    transform: rotate(90deg) scale(0.95);
}

/* 移动端微调 */
@media (max-width: 640px) {
    .more-btn {
        top: 1.5rem;
        left: 8%;
        font-size: 1.75rem;
    }
}

/*<%# 底部弹出菜单 %>*/
.bottom-menu-backdrop {
    position: fixed;
    inset: 0;
    background-color: rgba(0, 0, 0, 0.3);
    backdrop-filter: blur(4px);
    z-index: 100;
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.3s ease, visibility 0.3s;
    pointer-events: auto;
}

.bottom-menu-backdrop.is-open {
    opacity: 1;
    visibility: visible;
}

.bottom-menu-container {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    background: white;
    border-radius: 24px 24px 0 0;
    padding: 1rem 0 2rem;
    transform: translateY(100%);
    transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1);
    z-index: 101;
    max-width: 480px;
    margin: 0 auto;
}

.bottom-menu-backdrop.is-open .bottom-menu-container {
    transform: translateY(0);
}

.bottom-menu-handle {
    width: 40px;
    height: 4px;
    background: #e5e7eb;
    border-radius: 2px;
    margin: 0 auto 1.5rem;
}

.bottom-menu-nav {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    padding: 0 1.5rem;
}

.bottom-menu-item {
    display: flex;
    align-items: center;
    gap: 1rem;
    padding: 1rem 1.25rem;
    border-radius: 12px;
    text-decoration: none;
    color: #374151;
    transition: all 0.2s ease;
    font-size: 1rem;
    font-weight: 500;
}

.bottom-menu-item:hover {
    background: #f9fafb;
    color: #DC4C3E;
    transform: translateX(4px);
}

.bottom-menu-item:active {
    background: #f3f4f6;
    transform: translateX(4px) scale(0.98);
}

.bottom-menu-item.share-btn {
    background: none;
    border: none;
    width: 100%;
    text-align: left;
    cursor: pointer;
    font-family: inherit;
}

.bottom-menu-item.about-btn {
    background: none;
    border: none;
    width: 100%;
    text-align: left;
    cursor: pointer;
    font-family: inherit;
}

.bottom-menu-icon {
    font-size: 1.25rem;
    width: 32px;
    text-align: center;
}

.bottom-menu-text {
    font-family: var(--font-sans, "Montserrat", sans-serif);
}

.murakamiradio-fm-main-container {
    min-height: 100vh;
    display: flex;
    flex-direction: column;

    max-width: 450px;
    margin-left: auto;
    margin-right: auto;
    width: 100%; /* 可选，确保在小屏时占满可用空间 */
}

.murakamiradio-fm-image-buttons-container {

    display: flex;

    flex-direction: row;

    justify-content: space-around;

    margin-top: 80px;
    height: 55px;
}

.murakamiradio-fm-image-buttons-container button {

    padding: 5px;
    /*max-width: 40px;默认45大小*/
    max-width: 45px;
    max-height: 45px;

    border: none;

    background-color: transparent;
    /*
 -webkit-tap-highlight-color: 去除 iOS Safari 点击高亮
 transparent 表示透明
 去除移动端点击时的灰色背景
 */
    -webkit-tap-highlight-color: transparent;
}


.fm-jazz-button {
    margin-left: 10px;
}
.fm-book-button {
    margin-right: 10px;
}

.murakamiradio-fm-titles-container {
    display: flex;
    flex-direction: row;

    justify-content: space-around;
}


.murakamiradio-fm-titles-container button {

    border: none;
    background-color: white;
    min-width: 70px;
    max-width: 70px;
    font-size: 16px;
    color: black;

    padding: 0;

    -webkit-tap-highlight-color: transparent;

}

/* 👇 添加这两个样式类 */
.fm-jazz-title {
    margin-left: 10px;
}

.fm-book-title {
    margin-right: 10px;
}


.murakamiradio-fm-grill-container {

    text-align: center;

    margin-top: 5px;

    /*padding: 25px;*/
    padding-top: 25px;
    padding-left: 25px;
    padding-bottom: 25px;
    padding-right: 25px;
}

.grill-image {

    width: 90%;
}

.fm-music-controller-container {
    align-items: flex-start;
    justify-content: flex-end;

    display: flex;
}

.fm-play-button {

    width: 63px;
    height: auto;

    margin-right: 30px;
    margin-top: 16px;
    background: transparent;

    border: none;
}
.play-button-image {

    width: 100%;
    height: auto;
}

.fm-play-button.is-playing {
    /*animation: pulse 1.5s infinite;*/
}

.fm-status-image {

    margin-top: 30px;
    margin-right: 0;

    width: 20px;
    height: 20px;
}

.fm-next-button {

    margin-right: 35px;

    width: 104px;
    height: 114px;

    max-width: 104px;
    max-height: 114px;


    background: transparent;
    /*background: white;*/
    /*background-color: white;*/
    border: none;
    padding: 0;

}

.next-btn-image {
    width: 100%;
    height: auto;
}


.play-button-image {
    width: 62px;
    height: auto;
}

/*
屏幕宽度小于等于 320px
iPhone 4S、iPhone SE1 小手机
*/
@media (max-width: 320px) {

    .murakamiradio-fm-image-buttons-container {
        min-height: 55px;
    }

    .murakamiradio-fm-image-buttons-container button {
        min-width: 45px;
        min-height: 45px;
    }

    .murakamiradio-fm-title-buttons-container button {
        max-width: 60px;
        min-width: 60px;
    }

    .murakamiradio-fm-titles-container button{
        max-width: 60px;
        min-width: 60px;
    }

}

/*
中等偏小尺寸的手机
屏幕宽度在 321px 到 390px 之间
iPhone 12/13 mini, iPhone SE2/3 等
*/
@media (min-width: 321px) and (max-width: 390px) {

    .murakamiradio-fm-image-buttons-container {
        min-height: 65px;
    }

    .murakamiradio-fm-image-buttons-container button {
        max-width: 55px;
        max-height: 55px;
    }
    .murakamiradio-fm-titles-container button {
        max-width: 70px;
        min-width: 70px;
    }

}
/*
大尺寸手机
屏幕宽度在 391px 到 460px 之间
iPhone 12/13/14 Pro Max, 大屏 Android 手机等
*/
@media (min-width: 385px) and (max-width: 460px) {

    .murakamiradio-fm-image-buttons-container {
        min-height: 90px;
        margin-top: 150px;
    }

    .murakamiradio-fm-image-buttons-container button {
        max-width: 80px;
        max-height: 80px;
    }

    .murakamiradio-fm-titles-container button{
        max-width: 80px;
        min-width: 80px;
    }
}


/*
  按钮图片样式
  .button-image 用于按钮内的图片
*/
.button-image {
    /*
      width: 设置宽度
      100% 表示图片宽度占满按钮宽度
    */
    width: 100%;

    /*
      height: 设置高度
      auto 表示高度自动计算，保持图片原始比例
      防止图片变形
    */
    height: auto;

    /*
      display: 设置显示方式
      block 表示块级元素
      去除图片底部的默认空白
    */
    display: block;

    /*
      border-radius: 设置圆角
      6px 表示四个角都是 6 像素的圆角
      与按钮的圆角保持一致
    */
    border-radius: 6px;

    /*
      pointer-events: 设置指针事件
      none 表示图片不响应鼠标事件
      确保点击事件由按钮处理，而不是图片
    */
    pointer-events: none;
}





/*确保背景容器全屏*/
.life-index-container {
    width: 100vw;
    height: 100dvh;/* 动态视口高度，适配手机浏览器工具栏 */
    top: 0;
    left: 0;

    /*改变层级，放在最底层*/
    /*z-index: -1;*/
    /*超出的部分裁切掉*/
    overflow: hidden;

    position: fixed;/* 只有单屏图片时，relative 或 fixed 均可 */
}

.full-screen-link {
    display: block;
    width: 100%;
    height: 100%;

    -webkit-tap-highlight-color: transparent;
}

.bg-image {

    display: block;

    width: 100%;
    height: 100%;

    object-fit: cover;
    object-position: center;
}

/*!* 3. 底部按钮样式 【新增】 *!*/
.enter-murakamiradio {
    /* A. 绝对定位：底部居中 */
    position: absolute;
    bottom: 30px; /* 距离底部 30px */
    left: 50%;
    transform: translateX(-50%); /* 完美的水平居中修正 */

    /* B. 字体设置 */
    color: black; /* 黑色字体 */
    font-family: 'Caveat', cursive, sans-serif; /* 优先用手写体，没有就用草书，再没有就默认 */
    font-size: 24px; /* 字号稍微大一点 */
    font-weight: 600; /* 加粗一点，显得有质感 */
    text-decoration: none; /* 去掉下划线 */
    letter-spacing: 1px;

    /* D. 交互效果 */
    /*transition: all 0.3s ease;*/
    z-index: 10; /* 保证浮在图片上面 */
    -webkit-tap-highlight-color: transparent;

    /*!* 3. 绑定呼吸动画 *!*/
    /*animation: gentle-breath 3s infinite ease-in-out;*/

    /*!* 4. 增强体验：平滑的点击过渡 *!*/
    /*transition: all 0.3s ease;*/

    overflow: hidden; /* 必须加，裁剪光影 */
}

/* 呼吸动画核心 */
@keyframes gentle-breath {
    0%, 100% {
        /* 初始状态：正常大小，淡淡的光影 */
        transform: translateX(-50%) scale(1);
        box-shadow: 0 0 10px rgba(255, 255, 255, 0.1);
        background: rgba(255, 255, 255, 0.15);
    }
    50% {
        /* 呼气状态：轻微放大 4%，光影向外柔和扩散 */
        transform: translateX(-50%) scale(1.04);
        box-shadow: 0 0 25px rgba(255, 255, 255, 0.4);
        background: rgba(255, 255, 255, 0.25); /* 稍微变亮 */
        border-color: rgba(255, 255, 255, 0.7);
    }
}

.enter-murakamiradio::before {
    content: "";
    position: absolute;
    top: -50%;
    left: -50%;
    width: 200%;
    height: 200%;
    background: linear-gradient(
            45deg,
            transparent,
            rgba(255, 255, 255, 0.3),
            transparent
    );
    transform: rotate(45deg);
    animation: shine-sweep 3s infinite;
}
@keyframes shine-sweep {
    0% { left: -100%; }
    100% { left: 100%; }
}

.enter-murakamiradio:after {
    content: "♪"; /* 增加一个小图标 */
    animation: note-float 2s infinite;
    display: inline-block;
}

@keyframes note-float {
    0%, 100% { transform: translateY(0); opacity: 0.5; }
    50% { transform: translateY(-5px); opacity: 1; }
}
/* app/assets/stylesheets/red_string.css */

:root {
    /* 定义日本传统色：朱色 (Shu-iro) */
    --shiori-red: #cc3333;
    --string-length: 50px;
}

/* 1. 容器：不对称布局的关键 */
.red-string-container {
    position: fixed;
    top: 0;
    right: 12%; /* 放在右侧 15% 的位置，实现不对称美学 */
    z-index: 9999; /* 保证在最上层 */
    display: flex;
    flex-direction: column;
    align-items: center;
    cursor: pointer;
    transition: transform 0.3s ease-out;
}

/* 悬停时的微交互：轻轻向下拉 */
.red-string-container:hover {
    transform: translateY(10px);
}

/* 2. 红线本体 */
.red-string-line {
    width: 2px;
    height: var(--string-length);
    background-color: var(--shiori-red);
    box-shadow: 1px 0 2px rgba(0,0,0,0.1);
}

/* 3. 绳结 (圆形) */
.red-string-knot {
    position: relative;
    width: 10px;
    height: 10px;
    background-color: var(--shiori-red);
    border-radius: 50%;
    margin-top: -2px; /* 让线插在球里 */
    box-shadow: 0 2px 4px rgba(0,0,0,0.2);
}

/* 4. 流苏 (Tassels) - 纯 CSS 绘制 */
.red-string-tassel {
    position: absolute;
    top: 8px; /* 从球的下半部分伸出来 */
    background-color: rgba(204, 51, 51, 0.8); /* 稍微透明一点 */
    width: 1px;
}

.tassel-center {
    height: 24px;
    left: 50%;
    transform: translateX(-50%);
}

.tassel-left {
    height: 20px;
    left: 50%;
    transform: translateX(-50%) rotate(15deg); /* 向左撇 */
    transform-origin: top center;
}

.tassel-right {
    height: 20px;
    left: 50%;
    transform: translateX(-50%) rotate(-15deg); /* 向右撇 */
    transform-origin: top center;
}

/* 5. 提示文字 "引く" */
.red-string-text {
    margin-top: 25px;
    font-size: 12px;
    color: #888;
    font-family: "Noto Serif JP", serif; /* 确保引入了衬线体 */
    opacity: 0;
    transition: opacity 0.5s ease;

    /* 竖排文字的关键 CSS */
    writing-mode: vertical-rl;
    text-orientation: upright;
    letter-spacing: 0.2em;
}

/* 鼠标悬停时显示文字 */
.red-string-container:hover .red-string-text {
    opacity: 1;
}

/* --- Kumihimo Red String Design System --- */
/*:root {*/
/*    --kumi-red: #cc3333;       !* 朱红 *!*/
/*    --kumi-dark: #992222;      !* 深红 *!*/
/*    --kumi-glass: rgba(140, 20, 20, 0.4); !* 琉璃感 *!*/
/*    --kumi-ink: #4a5d75;       !* 昭和蓝 *!*/
/*}*/

/*.red-string-container {*/
/*    position: absolute;*/
/*    top: 0;*/
/*    right: 15%; !* 根据布局调整位置 *!*/
/*    width: 4px; !* 容器宽度 *!*/
/*    z-index: 50;*/
/*    display: flex;*/
/*    flex-direction: column;*/
/*    align-items: center;*/
/*    !* 防止选中文字干扰拖拽 *!*/
/*    user-select: none;*/
/*    -webkit-user-select: none;*/
/*}*/

/*!* 1. 绳体：编织纹理 *!*/
/*.red-string-line {*/
/*    width: 4px;*/
/*    height: 128px; !* 初始长度 *!*/
/*    background-color: var(--kumi-red);*/
/*    box-shadow: 1px 0 2px rgba(0,0,0,0.1);*/
/*    position: relative;*/
/*    !* 确保纹理随高度拉伸或重复 *!*/
/*    overflow: hidden;*/
/*    transform-origin: top center;*/
/*}*/

/*.cord-texture {*/
/*    width: 100%;*/
/*    height: 100%;*/
/*    opacity: 0.6;*/
/*    !* 45度重复渐变模拟绞绳感 *!*/
/*    background-image: repeating-linear-gradient(*/
/*            45deg,*/
/*            transparent,*/
/*            transparent 2px,*/
/*            rgba(0, 0, 0, 0.2) 2px,*/
/*            rgba(0, 0, 0, 0.2) 3px*/
/*    );*/
/*}*/

/*!* 2. 绳结组件：整体容器 *!*/
/*.red-string-knot-group {*/
/*    position: relative;*/
/*    display: flex;*/
/*    flex-direction: column;*/
/*    align-items: center;*/
/*    !* 初始位置修正，紧接绳体下方 *!*/
/*    margin-top: -2px;*/
/*    pointer-events: none; !* 视觉元素不阻挡交互 *!*/
/*}*/

/*!* 琉璃珠 (Ojime) *!*/
/*.kumihimo-bead {*/
/*    position: relative;*/
/*    z-index: 2;*/
/*    width: 16px;*/
/*    height: 16px;*/
/*    border-radius: 50%;*/
/*    background-color: var(--kumi-glass);*/
/*    backdrop-filter: blur(2px);*/
/*    border: 1px solid rgba(160, 40, 40, 0.3);*/
/*    box-shadow: inset 2px 2px 4px rgba(0,0,0,0.3),*/
/*    inset -1px -1px 2px rgba(255,255,255,0.2),*/
/*    0 2px 4px rgba(0,0,0,0.1);*/
/*    margin-bottom: -4px;*/
/*}*/

/*.bead-highlight {*/
/*    position: absolute;*/
/*    top: 25%;*/
/*    left: 25%;*/
/*    width: 4px;*/
/*    height: 4px;*/
/*    background-color: rgba(255, 100, 100, 0.6);*/
/*    border-radius: 50%;*/
/*    filter: blur(1px);*/
/*}*/

/*!* 绳结环 *!*/
/*.kumihimo-loop {*/
/*    width: 12px;*/
/*    height: 12px;*/
/*    border: 2px solid var(--kumi-red);*/
/*    border-radius: 50%;*/
/*    transform: scaleX(0.75) translateY(-2px);*/
/*    z-index: 1;*/
/*}*/

/*!* 丝绸流苏 (Fusa) *!*/
/*.kumihimo-tassel {*/
/*    position: relative;*/
/*    margin-top: -4px;*/
/*    opacity: 0.95;*/
/*}*/

/*.tassel-core, .tassel-strand {*/
/*    background-color: var(--kumi-red);*/
/*    position: absolute;*/
/*    top: 0;*/
/*    left: 50%;*/
/*    transform-origin: top center;*/
/*    box-shadow: 0 1px 2px rgba(0,0,0,0.1);*/
/*}*/

/*!* 主束 *!*/
/*.tassel-core {*/
/*    width: 2px;*/
/*    height: 48px;*/
/*    transform: translateX(-50%);*/
/*}*/

/*!* 侧边散丝 - 制造蓬松感 *!*/
/*.tassel-strand {*/
/*    width: 1px;*/
/*    height: 40px;*/
/*    opacity: 0.8;*/
/*}*/

/*.s1 { transform: translateX(-50%) rotate(3deg); height: 42px; }*/
/*.s2 { transform: translateX(-50%) rotate(-3deg); height: 42px; }*/
/*.s3 { transform: translateX(-50%) rotate(6deg); height: 38px; opacity: 0.6; }*/
/*.s4 { transform: translateX(-50%) rotate(-6deg); height: 38px; opacity: 0.6; }*/

/*!* 流苏末端虚化 *!*/
/*.tassel-fade {*/
/*    position: absolute;*/
/*    top: 42px;*/
/*    left: 50%;*/
/*    transform: translateX(-50%);*/
/*    width: 12px;*/
/*    height: 10px;*/
/*    background: linear-gradient(to bottom, var(--kumi-red), transparent);*/
/*    opacity: 0.3;*/
/*    filter: blur(2px);*/
/*}*/

/*!* 3. 文字 *!*/
/*.red-string-text {*/
/*    margin-top: 80px; !* 避开绳结 *!*/
/*    font-family: 'Noto Serif JP', serif;*/
/*    font-size: 10px;*/
/*    color: var(--kumi-ink);*/
/*    letter-spacing: 0.2em;*/
/*    opacity: 0.5;*/
/*    mix-blend-mode: multiply;*/
/*    writing-mode: vertical-rl;*/
/*    text-orientation: upright;*/
/*    pointer-events: none;*/
/*}*/
/*
 * 唱片播放器组件样式
 * 文件名: vinyl_player.css
 * 作用: 定义唱片播放器的外观和动画效果
 */

/* ============================================
   1. 播放器容器 - 整体布局
   ============================================ */

/*
 * .vinyl-player-container
 * 播放器最外层容器
 * 使用 relative 定位，作为内部元素的定位参考点
 */
.vinyl-player-container {
    position: relative;
    width: 320px;
    height: 320px;
}

/* 平板设备适配 */
@media (max-width: 768px) {
    .vinyl-player-container {
        width: 280px;
        height: 280px;
    }
}

/* 手机设备适配 */
@media (max-width: 640px) {
    .vinyl-player-container {
        width: 240px;
        height: 240px;
    }
}

/* ============================================
   2. SVG 进度环 - 圆形进度条
   ============================================ */

/*
 * .progress-ring-svg
 * SVG 容器，覆盖整个播放器区域
 * transform: rotate(-90deg) 让进度从顶部（12点方向）开始
 */
.progress-ring-svg {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    transform: rotate(-90deg);
}

/*
 * .progress-ring-bg
 * 背景圆环 - 显示未播放的部分（灰色）
 */
.progress-ring-bg {
    fill: none;
    stroke: #e5e7eb;
    stroke-width: 10;
    opacity: 0.3;
}

/*
 * .progress-ring-fill
 * 进度圆环 - 显示已播放的部分（绿色）
 */
.progress-ring-fill {
    fill: none;
    stroke: #10b981;
    stroke-width: 10;
    stroke-linecap: round;
    stroke-dasharray: 942.48;
    stroke-dashoffset: 942.48;
    transition: stroke-dashoffset 0.1s ease;
}

/* ============================================
   3. 唱片封面容器（会旋转）
   ============================================ */

/*
 * 唱片封面容器，会随音乐旋转
 * 绝对定位居中
 */
.vinyl-cover-wrapper {
    position: absolute;
    top: 50%;
    left: 50%;
    /* translate(-50%, -50%) 实现完美居中 */
    transform: translate(-50%, -50%);
    width: 280px;
    height: 280px;
    border-radius: 50%;
    overflow: hidden;
    background-color: #111827;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
    cursor: pointer;

    /* 移动端：移除点击高亮（你在模拟器里验证的） */
    -webkit-tap-highlight-color: transparent;
    /* 桌面端：移除焦点轮廓（防止鼠标点击后的蓝色边框） */
    outline: none;
    /* 全平台：防止文本选中变蓝 */
    user-select: none;
    -webkit-user-select: none;

    /*某些 Android 厂商定制浏览器（如小米、华为自带浏览器）可能有额外的触摸反馈，需要再加：*/
    touch-action: manipulation;  /* 移除双击缩放导致的延迟高亮 */
}

/* 保险：激活状态也清除 */
.vinyl-cover-wrapper:active,
.vinyl-cover-wrapper:focus {
    outline: none;
    -webkit-tap-highlight-color: transparent;
}


/* 平板设备适配 */
@media (max-width: 768px) {
    .vinyl-cover-wrapper {
        width: 240px;
        height: 240px;
    }
}

/* 手机设备适配 */
@media (max-width: 640px) {
    .vinyl-cover-wrapper {
        width: 200px;
        height: 200px;
    }
}

/*
 * 封面图片，圆形显示
 */
.vinyl-cover-image {
    width: 100%;
    height: 100%;
    object-fit: cover;
    border-radius: 50%;
    pointer-events: none;

    outline: none;                    /* 移除点击后的蓝色轮廓线 */
    -webkit-tap-highlight-color: transparent;  /* 移动端点击高亮 */
    user-select: none;                /* 禁止文本/图片选中 */
    -webkit-user-select: none;
    -webkit-user-drag: none;          /* 禁止拖动图片出现的 ghost 图 */

}

/*
 * .vinyl-cover-empty
 * 空唱片状态
 */
.vinyl-cover-empty {
    width: 100%;
    height: 100%;
    background: linear-gradient(135deg, #d1d5db 0%, #9ca3af 100%);
    border-radius: 50%;
    user-select: none;
    pointer-events: none;
}

/* ============================================
   4. 暂停遮罩层（不随唱片旋转）
   ============================================ */

/*
 * .pause-overlay
 * 遮罩层，与唱片封面同级但独立
 * 暂停时显示毛玻璃效果 + 播放按钮
 * 不会随唱片一起旋转
 */
.pause-overlay {
    position: absolute;
    top: 50%;
    left: 50%;
    /* 与唱片封面相同的居中方式 */
    transform: translate(-50%, -50%);
    /* 与唱片封面相同的尺寸 */
    width: 280px;
    height: 280px;
    border-radius: 50%;
    overflow: hidden;
    /* 毛玻璃效果 */
    backdrop-filter: blur(5px);
    -webkit-backdrop-filter: blur(4px);
    /* 半透明深色背景 */
    background-color: rgba(0, 0, 0, 0.3);
    z-index: 20;
    pointer-events: none;
    /* Flexbox 居中按钮 */
    display: flex;
    align-items: center;
    justify-content: center;
    /* 默认隐藏（播放时） */
    opacity: 0;
    /* 透明度过渡动画 */
    transition: opacity 0.3s ease;
}

/* 平板设备适配 */
@media (max-width: 768px) {
    .pause-overlay {
        width: 240px;
        height: 240px;
    }
}

/* 手机设备适配 */
@media (max-width: 640px) {
    .pause-overlay {
        width: 200px;
        height: 200px;
    }
}

/*
 * .pause-overlay.visible
 * 暂停时显示遮罩层
 */
.pause-overlay.visible {
    opacity: 1;
}

/* ============================================
   5. 播放按钮
   ============================================ */

/*
 * .play-button
 * 白色播放按钮
 */
.play-button {
    width: 80px;
    height: 80px;
    border-radius: 50%;
    background-color: rgba(255, 255, 255, 0.2);
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3);
    pointer-events: none;
}

/*
 * .play-button-icon
 * 白色三角形播放图标
 */
.play-button-icon {
    width: 40px;
    height: 40px;
    fill: white;
    margin-left: 4px;
}

/* ============================================
   6. 音频元素
   ============================================ */

.vinyl-audio {
    display: none;
}

/* ============================================
   7. 工具类
   ============================================ */

.hidden {
    display: none !important;
}
/*
 * This is a manifest file that'll be compiled into application.css, which will include all the files
 * listed below.
 *
 * Any CSS (and SCSS, if configured) file within this directory, lib/assets/stylesheets, or any plugin's
 * vendor/assets/stylesheets directory can be referenced here using a relative path.
 *
 * You're free to add application-wide styles to this file and they'll appear at the bottom of the
 * compiled file so the styles you add here take precedence over styles defined in any other CSS
 * files in this directory. Styles in this file should be added after the last require_* statement.
 * It is generally better to create a new file per style scope.
 *


 */


/* 彻底清除浏览器默认边距 */
html, body {
    margin: 0 !important; /* 强制清除 body 的 8px 边距 */
    padding: 0 !important;
}
