:root {
      --orange: #ff6a2e;
      --glass-tint: rgba(255, 255, 255, 0.10);
      --glass-edge: rgba(255, 255, 255, 0.72);
      --glass-dark-edge: rgba(0, 0, 0, 0.10);
      --safe-bottom: max(12px, env(safe-area-inset-bottom));
    }
    *, *::before, *::after { box-sizing: border-box; }
    html, body {
      margin: 0; min-height: 100%; overflow: hidden;
      font-family: "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;
      background:
        radial-gradient(circle at 18% 20%, rgba(255, 122, 72, 0.42), transparent 32%),
        radial-gradient(circle at 78% 12%, rgba(66, 185, 255, 0.42), transparent 34%),
        radial-gradient(circle at 52% 82%, rgba(126, 231, 135, 0.32), transparent 38%),
        radial-gradient(circle at 30% 60%, rgba(180, 120, 255, 0.28), transparent 30%),
        radial-gradient(circle at 85% 70%, rgba(255, 200, 80, 0.24), transparent 32%),
        linear-gradient(rgba(120,160,255,0.10) 1px, transparent 1px),
        linear-gradient(90deg, rgba(255,120,180,0.10) 1px, transparent 1px),
        #050608;
      background-size: 100% 100%, 100% 100%, 100% 100%, 100% 100%, 100% 100%, 80px 80px, 80px 80px, 100% 100%;
      color: #e0e0e0;
    }
    body { height: 100vh; height: 100dvh; }
    .glass {
      height: 100%; overflow: hidden; position: relative;
      padding: 10px 14px;
      isolation: isolate;
      touch-action: none;
      backdrop-filter: url(#liquid-glass-filter) saturate(180%) brightness(1.12) contrast(104%);
      -webkit-backdrop-filter: url(#liquid-glass-filter) saturate(180%) brightness(1.12) contrast(104%);
    }
    .glass-strip {
      height: 100%; width: max-content;
      display: flex; flex-direction: column;
      position: relative;
      padding: 8px 12px;
      will-change: transform;
      background: var(--glass-tint);
      backdrop-filter: saturate(180%) blur(2px) brightness(1.08) contrast(106%);
      -webkit-backdrop-filter: saturate(180%) blur(2px) brightness(1.08) contrast(106%);
      border: 1px solid rgba(255,255,255,0.40);
      border-top-color: var(--glass-edge);
      border-left-color: rgba(255,255,255,0.46);
      border-right-color: rgba(255,255,255,0.18);
      border-bottom-color: rgba(255,255,255,0.12);
      border-radius: 18px;
      box-shadow:
        0 24px 68px rgba(0,0,0,0.30),
        0 6px 18px rgba(0,0,0,0.18),
        inset 0 1px 0 rgba(255,255,255,0.70),
        inset 0 -1px 0 var(--glass-dark-edge),
        inset 1px 0 0 rgba(255,255,255,0.40),
        inset -1px 0 0 rgba(255,255,255,0.14);
      overflow: hidden;
    }
    .glass.focus-mode .glass-strip {
      width: 100%;
    }
    .glass-strip::before,
    .glass-strip::after {
      content: ''; position: absolute;
      pointer-events: none;
      z-index: 10;
    }
    .glass-strip::before {
      inset: 1px;
      border-radius: 17px;
      background:
        linear-gradient(90deg, transparent, rgba(255,255,255,0.90) 48%, transparent) 0 0 / 100% 1px no-repeat,
        linear-gradient(180deg, rgba(255,255,255,0.06), transparent 18%, transparent 82%, rgba(255,255,255,0.03));
      mix-blend-mode: screen;
    }
    .glass-strip::after {
      inset: 0;
      background:
        radial-gradient(circle at 18px 16px, rgba(255,255,255,0.12), transparent 22px);
      opacity: 0.35;
    }
    .map { width: max-content; height: 100%; display: flex; flex-direction: column; position: relative; z-index: 1; }
    .glass.focus-mode .map.is-focus {
      width: 100%;
      height: 100%;
      display: block;
    }
    .view-controls {
      position: fixed;
      top: max(14px, env(safe-area-inset-top));
      right: max(16px, env(safe-area-inset-right));
      z-index: 120;
      display: flex;
      align-items: center;
      gap: 6px;
      padding: 5px;
      border: 1px solid rgba(255,255,255,0.3);
      border-top-color: rgba(255,255,255,0.7);
      border-radius: 999px;
      background: rgba(255, 255, 255, 0.10);
      backdrop-filter: saturate(180%) blur(6px) brightness(1.10);
      -webkit-backdrop-filter: saturate(180%) blur(6px) brightness(1.10);
      box-shadow:
        0 12px 36px rgba(0,0,0,0.32),
        inset 0 1px 0 rgba(255,255,255,0.50);
    }
    .view-controls button {
      min-width: 34px;
      height: 30px;
      border: 0;
      border-radius: 999px;
      padding: 0 10px;
      color: #fff;
      font: 650 12px/1 "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;
      background: rgba(255,255,255,0.12);
      cursor: pointer;
      text-shadow: 0 1px 2px rgba(0,0,0,0.5);
      -webkit-tap-highlight-color: transparent;
    }
    .view-controls .sort-switch {
      display: flex;
      align-items: center;
      gap: 2px;
      padding: 2px;
      border-radius: 999px;
      background: rgba(0,0,0,0.18);
      box-shadow: inset 0 1px 0 rgba(255,255,255,0.10);
    }
    .view-controls .sort-switch button {
      min-width: 38px;
      height: 26px;
      padding: 0 8px;
      font-size: 11px;
    }
    .view-controls button.is-selected {
      color: #111;
      background: rgba(255,255,255,0.90);
      text-shadow: none;
      box-shadow: 0 2px 8px rgba(0,0,0,0.18), inset 0 1px 0 rgba(255,255,255,0.9);
    }
    .view-controls button:hover,
    .view-controls button:focus-visible {
      background: rgba(255,255,255,0.22);
      outline: none;
    }
    .view-controls .group-label {
      min-width: 70px;
      padding: 0 4px;
      color: rgba(255,255,255,0.86);
      font-size: 11px;
      text-align: center;
      white-space: nowrap;
      text-shadow: 0 1px 2px rgba(0,0,0,0.55);
    }
    .row { display: flex; flex: 1; min-height: 0; }
    .group {
      display: flex; flex: 0 0 auto;
      position: relative;
      overflow: hidden;
      isolation: isolate;
    }
    .group::before,
    .group::after {
      content: '';
      position: absolute;
      inset: 0;
      pointer-events: none;
      z-index: 0;
    }
    .group::before {
      background: rgba(0,0,0,0.1);
    }
    .group::after {
      border-right: 1px solid rgba(255,255,255,0.18);
      box-shadow: inset 0 0 0 1px rgba(255,255,255,0.05);
    }
    .cell {
      flex: 0 0 110px; min-width: 110px;
      display: flex; flex-direction: column;
      border: 0;
      appearance: none;
      -webkit-appearance: none;
      font-family: inherit;
      align-items: center; justify-content: center;
      font-size: 9px; line-height: 1.25; font-weight: 500; color: rgba(255,255,255,0.78);
      cursor: pointer; border-radius: 4px; background: transparent;
      transition: background 0.12s, color 0.12s, transform 0.12s, box-shadow 0.12s;
      user-select: none; overflow: hidden;
      padding: 2px 4px; position: relative; z-index: 1; text-align: center;
      -webkit-tap-highlight-color: transparent;
    }
    .cell .en { font-size: 10px; font-weight: 650; color: rgba(255,255,255,0.94); max-width: 100%; overflow: hidden; text-overflow: ellipsis; text-shadow: 0 1px 2px rgba(0,0,0,0.42); }
    .cell .zh {
      display: block;
      max-width: 100%;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      font-size: 9px;
      color: rgba(255,255,255,0.54);
      text-shadow: 0 1px 2px rgba(0,0,0,0.34);
    }
    .cell .obj {
      font-size: 9px;
      font-weight: 650;
      color: rgba(255,255,255,0.94);
      max-width: 100%;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      margin-top: 1px;
      padding: 1px 4px;
      border-radius: 999px;
      background: rgba(0,0,0,0.26);
      text-shadow: 0 1px 3px rgba(0,0,0,0.7);
      box-shadow: inset 0 1px 0 rgba(255,255,255,0.12);
    }
    .cell .num { position: absolute; top: 1px; left: 2px; font-size: 7px; color: rgba(255,255,255,0.62); pointer-events: none; }
    .cell .note-mark { margin-right: 2px; }
    .cell .note-mark[hidden] { display: none; }
    .cell:focus-visible {
      outline: 2px solid rgba(255,255,255,0.92);
      outline-offset: -2px;
      background: rgba(255,255,255,0.20);
    }
    .cell:hover, .cell.is-active {
      background: rgba(255,255,255,0.9) !important;
      color: #000 !important;
      box-shadow: 0 4px 16px rgba(0,0,0,0.18), inset 0 1px 0 rgba(255,255,255,0.7);
      transform: translateY(-1px);
    }
    .cell:hover .en, .cell.is-active .en { color: #000 !important; }
    .cell:hover .num, .cell:hover .zh, .cell:hover .obj,
    .cell.is-active .num, .cell.is-active .zh, .cell.is-active .obj { color: rgba(0,0,0,0.4) !important; }

    /* 底部面板 — 不透明玻璃 */
    .glass-panel {
      position: fixed;
      bottom: var(--safe-bottom);
      left: 50%;
      transform: translateX(-50%) translateY(20px);
      z-index: 100;
      width: min(340px, calc(100vw - 28px - env(safe-area-inset-left) - env(safe-area-inset-right)));
      padding: 12px 14px 10px;
      background:
        linear-gradient(135deg, rgba(40, 44, 54, 0.98), rgba(24, 28, 36, 0.98)),
        #1a1e26;
      backdrop-filter: saturate(140%) brightness(1.06);
      -webkit-backdrop-filter: saturate(140%) brightness(1.06);
      border: 1px solid rgba(255, 255, 255, 0.36);
      border-top-color: rgba(255, 255, 255, 0.72);
      border-left-color: rgba(255, 255, 255, 0.44);
      border-radius: 18px;
      box-shadow:
        0 20px 56px rgba(0, 0, 0, 0.48),
        0 4px 14px rgba(0, 0, 0, 0.28),
        inset 0 1px 0 rgba(255, 255, 255, 0.60),
        inset 0 -1px 0 rgba(0, 0, 0, 0.22);
      opacity: 0;
      pointer-events: none;
      transition: opacity 0.22s ease, transform 0.22s ease;
    }
    .glass-panel::before {
      content: '';
      position: absolute;
      inset: 1px;
      border-radius: 17px;
      pointer-events: none;
      background:
        linear-gradient(90deg, transparent, rgba(255,255,255,0.78), transparent) 50% 0 / 82% 1px no-repeat,
        radial-gradient(circle at 18px 14px, rgba(255,255,255,0.16), transparent 22px);
    }
    .glass-panel.visible {
      opacity: 1;
      pointer-events: auto;
      transform: translateX(-50%) translateY(0);
    }
    .glass-panel .gp-row {
      display: flex;
      align-items: center;
      gap: 8px;
    }
    .glass-panel .gp-num {
      font-size: 10px;
      font-weight: 700;
      color: var(--orange);
      flex-shrink: 0;
    }
    .glass-panel .gp-en {
      font-size: 15px;
      font-weight: 600;
      color: #fff;
      flex-shrink: 0;
    }
    .glass-panel .gp-pos {
      flex-shrink: 0;
      padding: 2px 6px;
      border-radius: 999px;
      font-size: 9px;
      line-height: 1.2;
      color: rgba(255,255,255,0.78);
      background: rgba(255,255,255,0.10);
      border: 1px solid rgba(255,255,255,0.14);
    }
    .glass-panel .gp-audio {
      width: 28px;
      height: 28px;
      flex: 0 0 28px;
      display: inline-flex;
      align-items: center;
      justify-content: center;
      border: 1px solid rgba(255,255,255,0.20);
      border-radius: 50%;
      color: #fff;
      background: rgba(255,255,255,0.11);
      box-shadow: inset 0 1px 0 rgba(255,255,255,0.18);
      cursor: pointer;
      font-size: 13px;
      line-height: 1;
      transition: transform 0.14s ease, background 0.14s ease, border-color 0.14s ease;
      -webkit-tap-highlight-color: transparent;
    }
    .glass-panel .gp-audio:hover,
    .glass-panel .gp-audio:focus-visible {
      background: rgba(255,255,255,0.20);
      border-color: rgba(255,255,255,0.42);
      outline: none;
      transform: translateY(-1px);
    }
    .glass-panel .gp-audio:active { transform: scale(0.94); }
    .glass-panel .gp-audio.is-loading { animation: gp-audio-pulse 0.85s ease-in-out infinite alternate; }
    .glass-panel .gp-audio.is-playing {
      color: #151515;
      background: rgba(255,255,255,0.92);
      border-color: rgba(255,255,255,0.96);
    }
    .glass-panel .gp-audio.is-fallback {
      color: #17120d;
      background: rgba(255,181,92,0.92);
      border-color: rgba(255,210,154,0.96);
    }
    .glass-panel .gp-audio-status {
      min-height: 14px;
      margin-top: 3px;
      font-size: 9px;
      line-height: 1.35;
      color: rgba(255,255,255,0.55);
    }
    .glass-panel .gp-audio-status.error { color: #ff8d8d; }
    @keyframes gp-audio-pulse {
      from { opacity: 0.55; transform: scale(0.94); }
      to { opacity: 1; transform: scale(1.04); }
    }
    .glass-panel .gp-zh {
      font-size: 12px;
      color: rgba(255,255,255,0.72);
      flex: 1;
      min-width: 0;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }
    .glass-panel .gp-close {
      width: 18px;
      height: 18px;
      border: none;
      background: rgba(255,255,255,0.08);
      border-radius: 50%;
      cursor: pointer;
      font-size: 11px;
      color: #999;
      display: flex;
      align-items: center;
      justify-content: center;
      flex-shrink: 0;
      transition: background 0.12s;
    }
    .glass-panel .gp-close:hover { background: rgba(255,255,255,0.15); }
    .glass-panel .gp-obj {
      font-size: 11px;
      color: rgba(255,255,255,0.56);
      margin-top: 3px;
    }
    .focus-view {
      height: 100%;
      min-width: 0;
      display: grid;
      grid-template-columns: minmax(0, 1fr) minmax(300px, 36%);
      gap: 12px;
      padding: 10px;
    }
    .focus-image-wrap {
      min-width: 0;
      min-height: 0;
      margin: 0;
      border-radius: 14px;
      border: 1px solid rgba(255,255,255,0.30);
      background: rgba(0,0,0,0.30);
      display: flex;
      align-items: center;
      justify-content: center;
      overflow: hidden;
      box-shadow:
        inset 0 1px 0 rgba(255,255,255,0.36),
        0 14px 38px rgba(0,0,0,0.30);
    }
    .focus-image {
      width: 100%;
      height: 100%;
      object-fit: contain;
      display: block;
    }
    .focus-side {
      min-width: 0;
      min-height: 0;
      display: grid;
      grid-template-rows: auto 1fr;
      gap: 10px;
    }
    .focus-title {
      padding: 9px 11px;
      border-radius: 12px;
      color: #fff;
      background: rgba(24, 28, 36, 0.92);
      border: 1px solid rgba(255,255,255,0.22);
      text-shadow: 0 1px 2px rgba(0,0,0,0.55);
      box-shadow: inset 0 1px 0 rgba(255,255,255,0.40);
    }
    .focus-title .range {
      display: block;
      font-size: 13px;
      font-weight: 750;
    }
    .focus-title .name {
      display: block;
      margin-top: 3px;
      font-size: 11px;
      color: rgba(255,255,255,0.68);
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }
    .focus-cells {
      min-height: 0;
      display: grid;
      grid-template-columns: repeat(2, minmax(0, 1fr));
      grid-auto-rows: minmax(68px, 1fr);
      gap: 8px;
    }
    .focus-cells .cell {
      min-width: 0;
      flex-basis: auto;
      border: 1px solid rgba(255,255,255,0.18);
      background: rgba(20, 24, 32, 0.45);
      border-radius: 10px;
      box-shadow: inset 0 1px 0 rgba(255,255,255,0.24);
    }
    .glass-panel .gp-note-wrap {
      display: flex;
      align-items: center;
      gap: 6px;
      margin-top: 6px;
    }
    .glass-panel .gp-note {
      flex: 1;
      min-width: 0;
      border: 0.5px solid rgba(255,255,255,0.22);
      border-radius: 9px;
      padding: 5px 8px;
      font-size: 12px;
      font-family: inherit;
      color: #fff;
      background: rgba(255,255,255,0.1);
      outline: none;
      transition: border-color 0.12s, background 0.12s;
      height: 28px;
      resize: none;
    }
    .glass-panel .gp-note:focus {
      border-color: rgba(255,106,46,0.4);
      background: rgba(255,255,255,0.1);
    }
    .glass-panel .gp-saved {
      font-size: 10px;
      color: #34c759;
      flex-shrink: 0;
      opacity: 0;
      transition: opacity 0.3s;
      white-space: nowrap;
    }
    .glass-panel .gp-saved.show { opacity: 1; }
    .glass-panel .gp-saved.error { color: #ff6b6b; }
    .alpha-overview {
      width: 100%;
      height: 100%;
      min-height: 180px;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      gap: 8px;
      padding: 18px;
      text-align: center;
      color: #fff;
      background:
        radial-gradient(circle at 30% 22%, rgba(255,255,255,0.20), transparent 34%),
        linear-gradient(145deg, rgba(255,106,46,0.72), rgba(91,76,255,0.64));
    }
    .alpha-overview .letters {
      font-size: clamp(54px, 10vw, 132px);
      line-height: 0.9;
      font-weight: 850;
      letter-spacing: -0.06em;
      text-shadow: 0 10px 30px rgba(0,0,0,0.25);
    }
    .alpha-overview .page-range {
      font-size: 13px;
      font-weight: 750;
    }
    .alpha-overview .hint {
      max-width: 280px;
      font-size: 11px;
      line-height: 1.5;
      color: rgba(255,255,255,0.76);
    }

    /* 触摸反馈 */
    .cell:active { background: rgba(255,255,255,0.85) !important; color: #000 !important; transform: translateY(0) scale(0.99); }
    .cell:active .en { color: #000 !important; }
    .cell:active .num, .cell:active .zh, .cell:active .obj { color: rgba(0,0,0,0.4) !important; }

    /* 手机端适配 */
    @media (max-width: 768px) {
      :root { --safe-bottom: max(10px, env(safe-area-inset-bottom)); }
      html, body {
        background-size: 100% 100%, 100% 100%, 100% 100%, 54px 54px, 54px 54px, 100% 100%;
      }
      .glass {
        padding: max(6px, env(safe-area-inset-top)) max(7px, env(safe-area-inset-right)) max(7px, env(safe-area-inset-bottom)) max(7px, env(safe-area-inset-left));
      }
      .glass-strip { padding: 6px 7px; border-radius: 14px; }
      .glass-strip::before { border-radius: 13px; }
      .glass.focus-mode .map.is-focus { width: 100%; }
      .view-controls {
        top: max(8px, env(safe-area-inset-top));
        right: max(8px, env(safe-area-inset-right));
        gap: 4px;
        padding: 4px;
      }
      .view-controls button {
        height: 28px;
        min-width: 30px;
        padding: 0 8px;
        font-size: 11px;
      }
      .view-controls .sort-switch button {
        min-width: 34px;
        height: 24px;
        padding: 0 6px;
        font-size: 10px;
      }
      .view-controls .group-label {
        min-width: 56px;
        font-size: 10px;
      }
      .focus-view {
        grid-template-columns: 1fr;
        grid-template-rows: minmax(0, 58%) minmax(0, 42%);
        gap: 8px;
        padding: 6px;
      }
      .focus-side {
        grid-template-rows: auto 1fr;
        gap: 6px;
      }
      .focus-title {
        padding: 6px 8px;
        border-radius: 10px;
      }
      .focus-title .range { font-size: 12px; }
      .focus-title .name { font-size: 10px; }
      .focus-cells {
        grid-template-columns: repeat(5, minmax(0, 1fr));
        grid-auto-rows: minmax(0, 1fr);
        gap: 5px;
      }
      .focus-cells .cell {
        min-width: 0;
        padding: 2px;
        border-radius: 8px;
      }
      .cell {
        flex: 0 0 clamp(74px, 20vw, 88px);
        min-width: clamp(74px, 20vw, 88px);
        font-size: 8px; padding: 3px 4px;
        border-radius: 5px;
      }
      .cell .en { font-size: 9px; }
      .cell .zh { font-size: 8px; }
      .cell .obj { font-size: 8px; padding-inline: 3px; }
      .cell .num { font-size: 6px; }
      .glass-panel {
        width: calc(100vw - 20px - env(safe-area-inset-left) - env(safe-area-inset-right));
        bottom: var(--safe-bottom);
        padding: 10px 12px 9px;
        border-radius: 16px;
      }
      .glass-panel .gp-en { font-size: 13px; }
      .glass-panel .gp-zh { font-size: 11px; }
      .glass-panel .gp-note { font-size: 14px; height: 36px; }
    }

    /* 小手机 */
    @media (max-width: 480px) {
      .glass {
        padding-left: max(5px, env(safe-area-inset-left));
        padding-right: max(5px, env(safe-area-inset-right));
      }
      .glass-strip { padding: 5px 6px; }
      .glass.focus-mode .map.is-focus { width: 100%; }
      .view-controls {
        left: max(7px, env(safe-area-inset-left));
        right: max(7px, env(safe-area-inset-right));
        justify-content: flex-end;
      }
      .view-controls .group-label { margin-right: auto; }
      .focus-view {
        grid-template-rows: minmax(0, 54%) minmax(0, 46%);
      }
      .focus-cells {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 5px;
      }
      .cell {
        flex-basis: clamp(62px, 18.5vw, 72px);
        min-width: clamp(62px, 18.5vw, 72px);
        padding-inline: 3px;
      }
      .cell .en { font-size: 8px; }
      .cell .zh { font-size: 7px; }
      .cell .obj {
        display: block;
        font-size: 7px;
        max-width: 96%;
      }
      .glass-panel .gp-row { gap: 6px; }
      .glass-panel .gp-obj { font-size: 10px; }
    }

    @media (prefers-reduced-motion: reduce) {
      .cell,
      .glass-panel {
        transition: none;
      }
    }
