
/* 引入字体变量 (假设这些字体已经在全局加载，如 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;
    }
}

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;
}
