    :root {
      --bg: #060912;
      --bg-card: rgba(8, 12, 24, 0.82);
      --neon-cyan: #00f5ff;
      --neon-pink: #ff2d9b;
      --neon-green: #39ff14;
      --neon-yellow: #ffe93d;
      --neon-orange: #ff6b1a;
      --neon-purple: #b44aff;
      --text: #e0eaff;
      --text-muted: #6a7a99;
      --surface: rgba(255, 255, 255, 0.03);
      --border-subtle: rgba(255, 255, 255, 0.06);
      --radius-sm: 10px;
      --radius-md: 16px;
      --radius-lg: 22px;
      --radius-xl: 40px;
      --font-display: 'Orbitron', sans-serif;
      --font-body: 'Outfit', sans-serif;
    }

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

    html,
    body {
      width: 100%;
      height: 100%;
      background:
        linear-gradient(90deg,
          #020617 0%,
          #04122c 25%,
          #071933 50%,
          #04122c 75%,
          #020617 100%);

      overflow: hidden;
      font-family: var(--font-body);
      overflow: hidden;
      touch-action: none;
      user-select: none;
      -webkit-tap-highlight-color: transparent;
      display: flex;
      align-items: center;
      justify-content: center;
    }

    /* Ambient background particles */
    body::before {
      content: '';
      position: fixed;
      inset: -60px;
      background:
        radial-gradient(ellipse at 30% 20%, rgba(0, 245, 255, 0.06) 0%, transparent 55%),
        radial-gradient(ellipse at 70% 60%, rgba(255, 45, 155, 0.05) 0%, transparent 55%),
        radial-gradient(ellipse at 50% 80%, rgba(57, 255, 20, 0.04) 0%, transparent 50%);
      z-index: 0;
      pointer-events: none;
      animation: ambientShift 12s ease-in-out infinite;
    }

    @keyframes ambientShift {

      0%,
      100% {
        transform: translate(0, 0) scale(1);
      }

      25% {
        transform: translate(2%, -1%) scale(1.04);
      }

      50% {
        transform: translate(-1%, 1.5%) scale(0.97);
      }

      75% {
        transform: translate(1%, -0.5%) scale(1.02);
      }
    }

    #wrap {
      position: relative;
      margin: 0 auto;
      width: min(450px, 100vw);
      height: min(800px, 100vh);
      overflow: hidden;
      background: var(--bg);
      border-radius: 18px;
      z-index: 1;
      box-shadow:
        0 0 60px rgba(0, 245, 255, 0.10),
        0 0 120px rgba(255, 45, 155, 0.07),
        0 20px 60px rgba(0, 0, 0, 0.6),
        inset 0 0 0 1px rgba(255, 255, 255, 0.04);
    }

    /* Scanlines */
    #wrap::after {
      content: '';
      position: absolute;
      inset: 0;
      z-index: 2;
      pointer-events: none;
      background: repeating-linear-gradient(0deg,
          transparent,
          transparent 3px,
          rgba(0, 0, 0, 0.025) 3px,
          rgba(0, 0, 0, 0.025) 6px);
      border-radius: 18px;
      opacity: 0.5;
    }

    canvas {
      display: block;
      width: 100%;
      height: 100%;
      position: relative;
      z-index: 1;
      border-radius: 20px;
      border: 2px solid #ffa4ff;
      padding: 15px;
    }

    /* ── Overlays ── */
    .overlay {
      position: absolute;
      inset: 0;
      z-index: 20;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      background: rgba(4, 7, 16, 0.78);
      backdrop-filter: blur(22px);
      -webkit-backdrop-filter: blur(22px);
      border-radius: 18px;
      transition: opacity 0.4s cubic-bezier(0.4, 0, 0.2, 1), visibility 0.4s;
      padding: 20px;
    }

    .overlay.hidden {
      opacity: 0;
      pointer-events: none;
      visibility: hidden;
    }

    /* ── Preloader ── */
    .loader-ring-wrap {
      position: relative;
      width: 70px;
      height: 70px;
      margin-bottom: 20px;
    }

    .loader-ring {
      position: absolute;
      inset: 0;
      border-radius: 50%;
      border: 3px solid transparent;
      animation: spin 1.4s linear infinite;
    }

    .loader-ring:nth-child(1) {
      border-top-color: var(--neon-cyan);
      border-bottom-color: var(--neon-cyan);
      box-shadow: 0 0 18px rgba(0, 245, 255, 0.5);
    }

    .loader-ring:nth-child(2) {
      inset: 8px;
      border-right-color: var(--neon-pink);
      border-left-color: var(--neon-pink);
      animation-duration: 1s;
      animation-direction: reverse;
      box-shadow: 0 0 14px rgba(255, 45, 155, 0.4);
    }

    .loader-ring:nth-child(3) {
      inset: 16px;
      border-top-color: var(--neon-green);
      border-bottom-color: var(--neon-green);
      animation-duration: 0.7s;
      box-shadow: 0 0 10px rgba(57, 255, 20, 0.35);
    }

    .load-label {
      font-family: var(--font-display);
      font-size: 0.68rem;
      letter-spacing: 0.3em;
      color: var(--neon-cyan);
      text-shadow: 0 0 16px var(--neon-cyan), 0 0 32px rgba(0, 245, 255, 0.4);
      animation: labelPulse 1.6s ease-in-out infinite;
    }

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

    @keyframes labelPulse {

      0%,
      100% {
        opacity: 0.6;
      }

      50% {
        opacity: 1;
      }
    }

    /* ── Logo ── */
    .logo-container {
      position: relative;
      margin-bottom: 6px;
    }

    .logo-container::before {
      content: '';
      position: absolute;
      inset: -30px -50px;
      background: radial-gradient(ellipse at center, rgba(0, 245, 255, 0.12) 0%, transparent 70%);
      pointer-events: none;
      animation: logoGlow 3s ease-in-out infinite;
      border-radius: 50%;
    }

    @keyframes logoGlow {

      0%,
      100% {
        transform: scale(1);
        opacity: 0.7;
      }

      50% {
        transform: scale(1.15);
        opacity: 1;
      }
    }

    .game-logo {
      font-family: var(--font-display);
      font-size: 2.7rem;
      font-weight: 900;
      line-height: 1.05;
      text-align: center;
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;
      background-clip: text;
      filter: drop-shadow(0 0 22px rgba(0, 245, 255, 0.55)) drop-shadow(0 0 44px rgba(255, 45, 155, 0.3));
      position: relative;
      z-index: 1;

      font-family: 'Bangers', cursive;
      margin-bottom: 0.5rem;
      color: #fff;
      text-shadow: 4px 4px 0px #ff6b6b, 4px 4px 0px #4ecdc4, 12px 12px 20px rgba(0, 0, 0, 0.5);
    }

    .game-sub {
      font-family: var(--font-display);
      font-size: 0.6rem;
      letter-spacing: 0.35em;
      color: var(--neon-pink);
      opacity: 0.85;
      margin-bottom: 24px;
      text-shadow: 0 0 14px rgba(255, 45, 155, 0.5);
      position: relative;
      z-index: 1;
    }

    /* ── How-to Card ── */
    .how-card {
      background: var(--bg-card);
      backdrop-filter: blur(14px);
      -webkit-backdrop-filter: blur(14px);
      border: 1px solid rgba(255, 255, 255, 0.08);
      border-radius: var(--radius-md);
      padding: 20px 22px;
      width: min(340px, 90%);
      margin-bottom: 20px;
      position: relative;
      overflow: hidden;
      box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4), inset 0 0 0 1px rgba(255, 255, 255, 0.03);
    }

    .how-card::before {
      content: '';
      position: absolute;
      top: 0;
      left: 0;
      right: 0;
      height: 1px;
      background: linear-gradient(90deg, transparent, rgba(0, 245, 255, 0.3), rgba(255, 45, 155, 0.3), transparent);
      opacity: 0.7;
    }

    .how-card h3 {
      font-family: var(--font-display);
      font-size: 0.62rem;
      letter-spacing: 0.25em;
      color: var(--neon-cyan);
      margin-bottom: 14px;
      text-shadow: 0 0 12px var(--neon-cyan);
      display: flex;
      align-items: center;
      gap: 8px;
    }

    .how-card h3::after {
      content: '';
      flex: 1;
      height: 1px;
      background: rgba(0, 245, 255, 0.2);
      border-radius: 1px;
    }

    .how-item {
      display: flex;
      gap: 10px;
      align-items: flex-start;
      margin-bottom: 10px;
      color: var(--text);
      font-size: 14px;
      line-height: 1.5;
      opacity: 0.9;
      transition: opacity 0.2s;
    }

    .how-item:hover {
      opacity: 1;
    }

    .how-icon {
      font-size: 1.1rem;
      flex-shrink: 0;
      filter: drop-shadow(0 0 6px currentColor);
      margin-top: 1px;
    }

    /* ── Difficulty ── */
    .diff-label {
      font-family: var(--font-display);
      font-size: 0.62rem;
      letter-spacing: 0.25em;
      color: var(--text-muted);
      margin-bottom: 14px;
      text-transform: uppercase;
    }

    .diff-row {
      display: flex;
      gap: 12px;
      margin-bottom: 28px;
    }

    .diff-btn {
      font-family: var(--font-display);
      font-size: 0.68rem;
      font-weight: 700;
      letter-spacing: 0.1em;
      padding: 14px 0;
      width: 92px;
      border-radius: var(--radius-md);
      cursor: pointer;
      border: 2px solid transparent;
      background: var(--surface);
      color: #fff;
      transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
      position: relative;
      overflow: hidden;
      backdrop-filter: blur(6px);
      -webkit-backdrop-filter: blur(6px);
    }

    .diff-btn .d-icon {
      display: block;
      font-size: 1.5rem;
      margin-bottom: 5px;
      transition: transform 0.25s;
    }

    .diff-btn .d-name {
      display: block;
    }

    .diff-btn:hover {
      transform: translateY(-2px);
      box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
      background: rgba(255, 255, 255, 0.06);
    }

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

    .diff-btn[data-diff="easy"] {
      border-color: rgba(57, 255, 20, 0.5);
      box-shadow: 0 0 18px rgba(57, 255, 20, 0.18);
    }

    .diff-btn[data-diff="medium"] {
      border-color: rgba(255, 233, 61, 0.5);
      box-shadow: 0 0 18px rgba(255, 233, 61, 0.18);
    }

    .diff-btn[data-diff="hard"] {
      border-color: rgba(255, 45, 155, 0.5);
      box-shadow: 0 0 18px rgba(255, 45, 155, 0.18);
    }

    .diff-btn.selected[data-diff="easy"] {
      background: rgba(57, 255, 20, 0.14);
      border-color: #39ff14;
      box-shadow: 0 0 28px rgba(57, 255, 20, 0.45), 0 0 50px rgba(57, 255, 20, 0.18);
      animation: pulseGreen 2s ease-in-out infinite;
    }

    .diff-btn.selected[data-diff="medium"] {
      background: rgba(255, 233, 61, 0.14);
      border-color: var(--neon-yellow);
      box-shadow: 0 0 28px rgba(255, 233, 61, 0.45), 0 0 50px rgba(255, 233, 61, 0.18);
      animation: pulseYellow 2s ease-in-out infinite;
    }

    .diff-btn.selected[data-diff="hard"] {
      background: rgba(255, 45, 155, 0.16);
      border-color: var(--neon-pink);
      box-shadow: 0 0 28px rgba(255, 45, 155, 0.45), 0 0 50px rgba(255, 45, 155, 0.18);
      animation: pulsePink 2s ease-in-out infinite;
    }

    .diff-btn.selected .d-icon {
      transform: scale(1.1);
    }

    @keyframes pulseGreen {

      0%,
      100% {
        box-shadow: 0 0 28px rgba(57, 255, 20, 0.45), 0 0 50px rgba(57, 255, 20, 0.18);
      }

      50% {
        box-shadow: 0 0 38px rgba(57, 255, 20, 0.65), 0 0 70px rgba(57, 255, 20, 0.28);
      }
    }

    @keyframes pulseYellow {

      0%,
      100% {
        box-shadow: 0 0 28px rgba(255, 233, 61, 0.45), 0 0 50px rgba(255, 233, 61, 0.18);
      }

      50% {
        box-shadow: 0 0 38px rgba(255, 233, 61, 0.65), 0 0 70px rgba(255, 233, 61, 0.28);
      }
    }

    @keyframes pulsePink {

      0%,
      100% {
        box-shadow: 0 0 28px rgba(255, 45, 155, 0.45), 0 0 50px rgba(255, 45, 155, 0.18);
      }

      50% {
        box-shadow: 0 0 38px rgba(255, 45, 155, 0.65), 0 0 70px rgba(255, 45, 155, 0.28);
      }
    }

    /* ── Neon Button ── */
    .neon-btn {
      font-family: var(--font-display);
      font-size: 0.85rem;
      font-weight: 700;
      letter-spacing: 0.14em;
      padding: 15px 48px;
      color: #fff;
      background: linear-gradient(135deg, rgba(13, 31, 58, 0.9), rgba(26, 13, 46, 0.9));
      border: 2px solid var(--neon-cyan);
      border-radius: var(--radius-xl);
      cursor: pointer;
      position: relative;
      overflow: hidden;
      box-shadow: 0 0 24px rgba(0, 245, 255, 0.3), 0 0 50px rgba(0, 245, 255, 0.08), inset 0 0 18px rgba(0, 245, 255, 0.06);
      transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
      text-transform: uppercase;
      z-index: 1;
          box-shadow: 0 10px 30px rgba(0, 245, 255, 0.4), 0 5px 0 #077f8d;
    }

    .neon-btn::before {
      content: '';
      position: absolute;
      inset: -2px;
      border-radius: var(--radius-xl);
      background: linear-gradient(135deg, var(--neon-cyan), var(--neon-pink), var(--neon-cyan));
      z-index: -1;
      opacity: 0;
      transition: opacity 0.4s;
      filter: blur(10px);
    }

    .neon-btn::after {
      content: '';
      position: absolute;
      inset: 0;
      background: linear-gradient(135deg, rgba(0, 245, 255, 0.12), rgba(255, 45, 155, 0.08));
      opacity: 0;
      transition: opacity 0.3s;
      border-radius: var(--radius-xl);
    }

    .neon-btn:hover {
      transform: translateY(-2px);
      box-shadow: 0 0 36px rgba(0, 245, 255, 0.5), 0 0 70px rgba(0, 245, 255, 0.15), inset 0 0 24px rgba(0, 245, 255, 0.1);
      border-color: #7df9ff;
    }

    .neon-btn:hover::before {
      opacity: 0.55;
    }

    .neon-btn:hover::after {
      opacity: 1;
    }

    .neon-btn:active {
      transform: scale(0.94);
      transition: transform 0.1s;
    }

    /* ── Difficulty Badge in-game ── */
    #diffBadge {
      position: absolute;
      top: 60px;
      right: 12px;
      font-family: var(--font-display);
      font-size: 0.48rem;
      letter-spacing: 0.14em;
      padding: 5px 10px;
      border-radius: 20px;
      pointer-events: none;
      z-index: 6;
      backdrop-filter: blur(8px);
      -webkit-backdrop-filter: blur(8px);
      font-weight: 700;
      transition: all 0.3s;
    }

    #diffBadge.easy {
      color: #39ff14;
      border: 1px solid rgba(57, 255, 20, 0.45);
      background: rgba(57, 255, 20, 0.10);
      text-shadow: 0 0 8px #39ff14;
      box-shadow: 0 0 12px rgba(57, 255, 20, 0.2);
    }

    #diffBadge.medium {
      color: var(--neon-yellow);
      border: 1px solid rgba(255, 233, 61, 0.45);
      background: rgba(255, 233, 61, 0.10);
      text-shadow: 0 0 8px var(--neon-yellow);
      box-shadow: 0 0 12px rgba(255, 233, 61, 0.2);
    }

    #diffBadge.hard {
      color: var(--neon-pink);
      border: 1px solid rgba(255, 45, 155, 0.45);
      background: rgba(255, 45, 155, 0.12);
      text-shadow: 0 0 8px var(--neon-pink);
      box-shadow: 0 0 12px rgba(255, 45, 155, 0.2);
    }

    /* ── Game Over ── */
    .go-title {
      font-family: var(--font-display);
      font-size: 2.4rem;
      font-weight: 900;
      color: var(--neon-pink);
      text-shadow: 0 0 24px var(--neon-pink), 0 0 50px rgba(255, 45, 155, 0.5), 0 0 80px rgba(255, 45, 155, 0.25);
      margin-bottom: 8px;
      animation: goShake 0.6s ease-out;
    }

    @keyframes goShake {

      0%,
      100% {
        transform: translateX(0);
      }

      15% {
        transform: translateX(-6px);
      }

      30% {
        transform: translateX(6px);
      }

      45% {
        transform: translateX(-4px);
      }

      60% {
        transform: translateX(4px);
      }

      75% {
        transform: translateX(-2px);
      }

      90% {
        transform: translateX(2px);
      }
    }

    .go-diff-badge {
      font-family: var(--font-display);
      font-size: 0.6rem;
      letter-spacing: 0.18em;
      margin-bottom: 18px;
      padding: 5px 16px;
      border-radius: 20px;
      font-weight: 700;
      backdrop-filter: blur(6px);
      -webkit-backdrop-filter: blur(6px);
    }

    .go-diff-badge.easy {
      color: #39ff14;
      border: 1px solid rgba(57, 255, 20, 0.5);
      background: rgba(57, 255, 20, 0.1);
      box-shadow: 0 0 16px rgba(57, 255, 20, 0.25);
    }

    .go-diff-badge.medium {
      color: var(--neon-yellow);
      border: 1px solid rgba(255, 233, 61, 0.5);
      background: rgba(255, 233, 61, 0.1);
      box-shadow: 0 0 16px rgba(255, 233, 61, 0.25);
    }

    .go-diff-badge.hard {
      color: var(--neon-pink);
      border: 1px solid rgba(255, 45, 155, 0.5);
      background: rgba(255, 45, 155, 0.12);
      box-shadow: 0 0 16px rgba(255, 45, 155, 0.25);
    }

    .go-score-label {
      font-size: 0.72rem;
      letter-spacing: 0.18em;
      color: var(--text-muted);
      margin-bottom: 4px;
      text-transform: uppercase;
    }

    .go-score-val {
      font-family: var(--font-display);
      font-size: 3rem;
      font-weight: 900;
      color: #fff;
      margin-bottom: 6px;
      text-shadow: 0 0 20px rgba(255, 255, 255, 0.5), 0 0 40px rgba(0, 245, 255, 0.3);
    }

    .go-stage-val {
      font-size: 0.85rem;
      color: var(--neon-cyan);
      letter-spacing: 0.12em;
      margin-bottom: 6px;
      text-shadow: 0 0 10px var(--neon-cyan);
    }

    .go-best {
      font-size: 0.75rem;
      color: var(--neon-yellow);
      letter-spacing: 0.1em;
      margin-bottom: 26px;
      text-shadow: 0 0 10px var(--neon-yellow);
      font-weight: 600;
    }

    .go-btns {
      display: flex;
      gap: 14px;
      flex-wrap: wrap;
      justify-content: center;
    }

    .neon-btn-sm {
      font-family: var(--font-display);
      font-size: 0.7rem;
      font-weight: 700;
      letter-spacing: 0.12em;
      padding: 12px 30px;
      color: #fff;
      background: linear-gradient(135deg, rgba(13, 31, 58, 0.85), rgba(26, 13, 46, 0.85));
      border: 2px solid var(--neon-cyan);
      border-radius: var(--radius-xl);
      cursor: pointer;
      box-shadow: 0 0 16px rgba(0, 245, 255, 0.25);
      transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
      backdrop-filter: blur(6px);
      -webkit-backdrop-filter: blur(6px);
      text-transform: uppercase;
    }

    .neon-btn-sm:hover {
      transform: translateY(-2px);
      box-shadow: 0 0 28px rgba(0, 245, 255, 0.45), 0 0 50px rgba(0, 245, 255, 0.1);
      border-color: #7df9ff;
    }

    .neon-btn-sm:active {
      transform: scale(0.93);
      transition: transform 0.1s;
    }

    .neon-btn-sm.pink {
      border-color: var(--neon-pink);
      box-shadow: 0 0 16px rgba(255, 45, 155, 0.25);
      background: linear-gradient(135deg, rgba(26, 13, 46, 0.85), rgba(13, 31, 58, 0.85));
    }

    .neon-btn-sm.pink:hover {
      box-shadow: 0 0 28px rgba(255, 45, 155, 0.45), 0 0 50px rgba(255, 45, 155, 0.1);
      border-color: #ff5dab;
    }

    /* ── Stage Clear Flash ── */
    #stageClearFlash {
      position: absolute;
      inset: 0;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      pointer-events: none;
      z-index: 16;
      opacity: 0;
      transition: opacity 0.2s;
      border-radius: 18px;
    }

    #stageClearFlash.show {
      opacity: 1;
    }

    #stageClearFlash::before {
      content: '';
      position: absolute;
      inset: -40px;
      background: radial-gradient(ellipse at center, rgba(0, 245, 255, 0.25) 0%, rgba(57, 255, 20, 0.15) 40%, transparent 70%);
      animation: scBurst 0.7s ease-out;
      pointer-events: none;
      border-radius: 50%;
    }

    @keyframes scBurst {
      0% {
        transform: scale(0.3);
        opacity: 0;
      }

      50% {
        opacity: 1;
      }

      100% {
        transform: scale(1.5);
        opacity: 0;
      }
    }

    .sc-text {
      font-family: var(--font-display);
      font-size: 2.2rem;
      font-weight: 900;
      background: linear-gradient(90deg, var(--neon-cyan), var(--neon-green), #fff, var(--neon-cyan));
      background-size: 300% 100%;
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;
      background-clip: text;
      filter: drop-shadow(0 0 20px var(--neon-cyan)) drop-shadow(0 0 40px rgba(57, 255, 20, 0.6));
      animation: scShimmer 0.5s ease-in-out infinite alternate, scPopIn 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
      position: relative;
      z-index: 1;
    }

    @keyframes scShimmer {
      from {
        background-position: 0% center;
      }

      to {
        background-position: 100% center;
      }
    }

    @keyframes scPopIn {
      0% {
        transform: scale(0.5);
        opacity: 0;
      }

      100% {
        transform: scale(1);
        opacity: 1;
      }
    }

    .sc-sub {
      font-family: var(--font-display);
      font-size: 0.65rem;
      letter-spacing: 0.25em;
      color: var(--neon-green);
      margin-top: 10px;
      text-shadow: 0 0 14px var(--neon-green);
      opacity: 0.9;
      position: relative;
      z-index: 1;
      animation: scPopIn 0.5s 0.15s cubic-bezier(0.175, 0.885, 0.32, 1.275) both;
    }
