/* roulang page: index */
:root {
      --primary: #2563eb;
      --primary-dark: #1d4ed8;
      --accent-cyan: #06b6d4;
      --accent-amber: #f59e0b;
      --bg-slate: #f8fafc;
      --text-main: #0f172a;
      --text-sub: #475569;
      --text-muted: #94a3b8;
      --border-color: rgba(226, 232, 240, 0.85);
    }
    body {
      background-color: var(--bg-slate);
      color: var(--text-sub);
      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
      overflow-x: hidden;
      scroll-behavior: smooth;
    }
    .ticket-rip {
      position: relative;
      border-right: 2px dashed #cbd5e1;
    }
    .ticket-stub {
      background: radial-gradient(circle at left, transparent 10px, white 10px);
    }
    .cinema-gradient-overlay {
      background: linear-gradient(180deg, rgba(15, 23, 42, 0.75) 0%, rgba(15, 23, 42, 0.88) 100%);
    }
    .pulse-dot {
      animation: pulse-ring 1.8s cubic-bezier(0.45, 0, 0.55, 1) infinite;
    }
    @keyframes pulse-ring {
      0% { transform: scale(0.95); opacity: 0.8; }
      50% { transform: scale(1.3); opacity: 0.3; }
      100% { transform: scale(0.95); opacity: 0.8; }
    }
    .soft-shadow {
      box-shadow: 0 4px 20px -2px rgba(37, 99, 235, 0.05), 0 2px 6px -1px rgba(15, 23, 42, 0.04);
    }
    .card-hover-lift {
      transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
    }
    .card-hover-lift:hover {
      transform: translateY(-4px);
      box-shadow: 0 20px 25px -5px rgba(37, 99, 235, 0.08), 0 10px 10px -5px rgba(15, 23, 42, 0.03);
    }
    ::-webkit-scrollbar {
      width: 8px;
    }
    ::-webkit-scrollbar-track {
      background: #f1f5f9;
    }
    ::-webkit-scrollbar-thumb {
      background: #cbd5e1;
      border-radius: 4px;
    }
    ::-webkit-scrollbar-thumb:hover {
      background: #94a3b8;
    }

/* roulang page: category1 */
:root {
      --primary: #2563eb;
      --primary-dark: #1d4ed8;
      --accent-cyan: #06b6d4;
      --accent-amber: #f59e0b;
      --bg-slate: #f8fafc;
      --text-main: #0f172a;
      --text-sub: #475569;
      --text-muted: #94a3b8;
      --border-color: rgba(226, 232, 240, 0.85);
    }
    body {
      background-color: var(--bg-slate);
      color: var(--text-sub);
      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
      overflow-x: hidden;
      scroll-behavior: smooth;
    }
    .cinema-gradient-overlay {
      background: linear-gradient(180deg, rgba(15, 23, 42, 0.75) 0%, rgba(15, 23, 42, 0.88) 100%);
    }
    .soft-shadow {
      box-shadow: 0 4px 20px -2px rgba(37, 99, 235, 0.05), 0 2px 6px -1px rgba(15, 23, 42, 0.04);
    }
    .card-hover-lift {
      transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
    }
    .card-hover-lift:hover {
      transform: translateY(-4px);
      box-shadow: 0 20px 25px -5px rgba(37, 99, 235, 0.08), 0 10px 10px -5px rgba(15, 23, 42, 0.03);
    }
    .pulse-dot {
      animation: ping 1.5s cubic-bezier(0, 0, 0.2, 1) infinite;
    }
    @keyframes ping {
      75%, 100% {
        transform: scale(2);
        opacity: 0;
      }
    }
    /* 票券边缘打孔质感装饰 */
    .ticket-edge-left {
      position: relative;
    }
    .ticket-edge-left::before {
      content: '';
      position: absolute;
      left: -8px;
      top: 50%;
      transform: translateY(-50%);
      width: 16px;
      height: 16px;
      background-color: var(--bg-slate);
      border-radius: 50%;
      border-right: 1px solid rgba(226, 232, 240, 0.85);
    }
    .ticket-dashed-divider {
      border-top: 2px dashed rgba(203, 213, 225, 0.8);
    }

/* roulang page: category2 */
:root {
      --primary: #2563eb;
      --primary-dark: #1d4ed8;
      --accent-cyan: #06b6d4;
      --accent-amber: #f59e0b;
      --bg-slate: #f8fafc;
      --text-main: #0f172a;
      --text-sub: #475569;
      --text-muted: #94a3b8;
      --border-color: rgba(226, 232, 240, 0.85);
    }
    body {
      background-color: var(--bg-slate);
      color: var(--text-sub);
      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
      overflow-x: hidden;
      scroll-behavior: smooth;
    }
    .cinema-gradient-overlay {
      background: linear-gradient(180deg, rgba(15, 23, 42, 0.75) 0%, rgba(15, 23, 42, 0.88) 100%);
    }
    .soft-shadow {
      box-shadow: 0 4px 20px -2px rgba(37, 99, 235, 0.05), 0 2px 6px -1px rgba(15, 23, 42, 0.04);
    }
    .card-hover-lift {
      transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
    }
    .card-hover-lift:hover {
      transform: translateY(-4px);
      box-shadow: 0 20px 25px -5px rgba(37, 99, 235, 0.08), 0 10px 10px -5px rgba(15, 23, 42, 0.03);
    }
    /* 票券切角与虚线装潢 */
    .ticket-stub-dash {
      border-left: 2px dashed #cbd5e1;
      position: relative;
    }
    .ticket-notch-top {
      position: absolute;
      top: -8px;
      left: -9px;
      width: 16px;
      height: 16px;
      background-color: #f8fafc;
      border-radius: 50%;
    }
    .ticket-notch-bottom {
      position: absolute;
      bottom: -8px;
      left: -9px;
      width: 16px;
      height: 16px;
      background-color: #f8fafc;
      border-radius: 50%;
    }
    .pulse-dot {
      animation: pulseAnimation 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
    }
    @keyframes pulseAnimation {
      0%, 100% { opacity: 1; transform: scale(1); }
      50% { opacity: .4; transform: scale(1.4); }
    }
