<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
  <meta name="theme-color" content="#1a1a2e" />
  <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
  <meta http-equiv="Pragma" content="no-cache" />
  <meta http-equiv="Expires" content="0" />
  <meta name="gs-build" content="2026060467" />
  <title>高手在民间 · 民间趣味挑战记录平台</title>
  <script>
    (function () {
      try {
        var p = location.pathname || "";
        if (!/\/h5\.html$/i.test(p)) {
          var ua = navigator.userAgent || "";
          if (/Android|iPhone|iPod|Mobile|UCBrowser|UCWEB|MicroMessenger|HarmonyOS|Quark|MiuiBrowser|HuaweiBrowser|HeyTapBrowser|VivoBrowser|OppoBrowser|MQQBrowser/i.test(ua)) {
            location.replace(location.origin + "/h5.html" + location.search + location.hash);
          }
        }
      } catch (e) {}
    })();
  </script>
  <!-- 站内私信路由：#messages 与 #messages/{对方用户ID}；话题标签聚合：#tag?name=标签名；申诉/反馈后台：#admin-appeals、#admin-feedbacks -->
  <!-- 每次上线请把 v= 改成新值，避免手机/平板沿用旧版 JS/CSS（服务器 Cache-Control 为 7 天） -->
  <link rel="stylesheet" href="styles.css?v=2026060338" />
  <script>
    (function () {
      if (/^#poll(?:-option)?\//.test(location.hash || "")) {
        document.documentElement.classList.add("gs-poll-wait");
      }
    })();
  </script>
  <style id="gs-poll-boot-hide">
    html.gs-poll-wait #view-root {
      visibility: hidden;
    }
  </style>
  <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
</head>
<body>
  <div id="app" class="app">
    <header class="site-header">
      <div class="header-top">
        <div class="header-brand">
          <div class="brand-logo-slot" id="brand-logo-slot">
            <video
              id="brand-logo-video"
              class="header-video"
              loop
              muted
              playsinline
              webkit-playsinline
              preload="none"
              poster="images/gstubiao.png?v=2026060331"
              src="assets/gstb.mp4?v=2026060331"
              width="48"
              height="48"
            ></video>
            <img
              id="brand-logo-static"
              class="brand-logo-static"
              src="images/gstubiao.png?v=2026060331"
              alt=""
              width="48"
              height="48"
            />
            <span class="brand-logo-fallback hidden" id="brand-logo-fallback" title="品牌占位">🎥</span>
          </div>
          <div class="header-titles">
            <h1 class="site-title site-title--main">高手在民间</h1>
            <p class="site-tagline site-tagline--kai" id="site-home-subtitle">人生 · 平凡多面 却自带微光</p>
          </div>
        </div>
        <div class="header-top-right header-top-actions">
          <div class="header-nav-btns scrollable-buttons" role="toolbar" aria-label="顶部操作">
            <button type="button" id="btn-platform-info" class="btn btn--sm btn--ghost header-nav-btn" aria-haspopup="dialog" aria-controls="platform-modal-main">❓ 平台说明</button>
            <a href="#polls" class="btn btn--sm btn--ghost header-nav-btn">📊 民间调研榜</a>
            <button type="button" id="btn-follow-us" class="btn btn--sm btn--ghost header-nav-btn" aria-haspopup="dialog">📱 关注我们</button>
            <button type="button" id="btn-open-auth" class="btn btn--sm btn--ghost header-nav-btn">👤 登录/注册</button>
          </div>
          <div class="header-auth-row">
            <span id="auth-chip" class="auth-chip muted" aria-live="polite">游客模式</span>
            <button type="button" id="btn-logout" class="btn btn--sm hidden">退出</button>
          </div>
          <p id="guest-id-hint" class="guest-id-hint hidden" aria-live="polite" title="未登录游客的临时会话 ID，供管理员个体禁言演示"></p>
        </div>
      </div>

      <nav class="main-nav main-nav--primary" aria-label="主导航">
        <a href="#home" class="nav-link" data-route="home">首页</a>
        <a href="#publish" class="nav-link" data-route="publish">发布</a>
        <a href="#ranking" class="nav-link" data-route="ranking">榜单</a>
        <a href="#profile" class="nav-link nav-link--profile" data-route="profile" id="nav-profile">我的</a>
        <a href="#admin" class="nav-link nav-link--admin hidden" data-route="admin" id="nav-admin">后台</a>
      </nav>
    </header>

    <!-- 榜单页支持日/周/月/总榜及自定义日期范围；首页搜索、通知中心等由 app.js 注入 -->
    <main id="view-root" class="view-root" role="main"><script id="gs-inline-poll-boot">
      (function () {
        var vr = document.currentScript.parentElement;
        var m = (location.hash || "").match(/^#poll(?:-option)?\/([^/?]+)/);
        if (m) {
          vr.innerHTML =
            '<section class="view" data-view="poll-detail" data-poll-loading="1"><div class="card"><p class="muted" style="text-align:center;padding:28px 16px;">正在加载调研榜…</p></div></section>';
          window.__GS_POLL_BOOT__ = {
            pollId: decodeURIComponent(m[1]),
            promise: fetch(location.origin + "/api/polls", { cache: "no-store", credentials: "same-origin" })
              .then(function (r) {
                return r.ok ? r.json() : null;
              })
              .then(function (body) {
                var rows =
                  body && body.data && body.data.length
                    ? body.data
                    : Array.isArray(body)
                      ? body
                      : [];
                window.__GS_POLL_BOOT__.rows = rows;
                return rows;
              })
              .catch(function () {
                window.__GS_POLL_BOOT__.rows = [];
                return [];
              }),
          };
          return;
        }
        vr.innerHTML = '<p class="muted" style="padding:20px;text-align:center;">加载中…</p>';
      })();
    </script></main>

    <div class="site-bottom-nav-wrap">
      <nav class="main-nav main-nav--footer" aria-label="底部主导航">
        <a href="#home" class="nav-link" data-route="home">首页</a>
        <a href="#publish" class="nav-link" data-route="publish">发布</a>
        <a href="#ranking" class="nav-link" data-route="ranking">榜单</a>
        <a href="#profile" class="nav-link nav-link--profile" data-route="profile" id="nav-profile-footer">我的</a>
        <a href="#admin" class="nav-link nav-link--admin hidden" data-route="admin" id="nav-admin-footer">后台</a>
      </nav>
    </div>

    <footer class="site-footer">
      <p>高手在民间 · <span id="site-footer-meta">gaoshouzaiminjian.cn</span></p>
      <p id="site-footer-icp" class="site-footer-icp hidden"></p>
    </footer>
  </div>

  <div id="modal-host"></div>
  <div id="toast-stack" class="toast-stack" aria-live="polite"></div>

  <div id="platform-modal-main" class="platform-modal-backdrop hidden" role="dialog" aria-modal="true" aria-labelledby="platform-modal-main-title" aria-hidden="true">
    <div class="platform-modal platform-modal--main" data-stop-platform-close>
      <button type="button" class="platform-modal__close" id="platform-modal-main-close" aria-label="关闭">×</button>
      <h2 id="platform-modal-main-title" class="platform-modal__title">平台说明</h2>
      <div class="platform-modal__intro" id="platform-modal-intro-body">
        <p class="muted">加载中…</p>
      </div>
      <div class="platform-modal__doc-btns">
        <button type="button" class="btn btn--sm btn--ghost btn--block" id="btn-platform-open-user">用户协议</button>
        <button type="button" class="btn btn--sm btn--ghost btn--block" id="btn-platform-open-privacy">隐私政策</button>
        <button type="button" class="btn btn--sm btn--ghost btn--block" id="btn-platform-open-rules">参赛规则</button>
        <button type="button" class="btn btn--sm btn--ghost btn--block" id="btn-platform-open-titles">称号系统</button>
      </div>
      <p class="platform-modal__agree-note">继续浏览或使用功能即表示您已了解并同意遵守上述说明及协议中的相关约定（正式环境以最终公示文本为准）。</p>
    </div>
  </div>

  <div id="platform-modal-titles" class="platform-modal-backdrop platform-modal-backdrop--doc hidden" role="dialog" aria-modal="true" aria-labelledby="platform-modal-titles-title" aria-hidden="true">
    <div class="platform-modal platform-modal--doc" data-stop-platform-close>
      <button type="button" class="platform-modal__close" id="platform-modal-titles-close" aria-label="关闭">×</button>
      <h2 id="platform-modal-titles-title" class="platform-modal__title">称号系统</h2>
      <div id="platform-modal-titles-body" class="platform-modal__title-system-scroll" tabindex="0"></div>
    </div>
  </div>

  <div id="platform-modal-doc" class="platform-modal-backdrop platform-modal-backdrop--doc hidden" role="dialog" aria-modal="true" aria-labelledby="platform-modal-doc-title" aria-hidden="true">
    <div class="platform-modal platform-modal--doc" data-stop-platform-close>
      <button type="button" class="platform-modal__close" id="platform-modal-doc-close" aria-label="关闭">×</button>
      <h2 id="platform-modal-doc-title" class="platform-modal__title">协议全文</h2>
      <div id="platform-modal-doc-body" class="platform-modal__scroll-body" tabindex="0"></div>
    </div>
  </div>

  <nav class="bottom-nav" aria-label="底部主导航">
    <button type="button" class="bottom-nav__btn" data-route="home" aria-label="首页">
      <span class="bottom-nav__icon" aria-hidden="true">🏠</span>
      <span class="bottom-nav__label">首页</span>
    </button>
    <button type="button" class="bottom-nav__btn" data-route="publish" aria-label="发布">
      <span class="bottom-nav__icon" aria-hidden="true">➕</span>
      <span class="bottom-nav__label">发布</span>
    </button>
    <button type="button" class="bottom-nav__btn" data-route="ranking" aria-label="榜单">
      <span class="bottom-nav__icon" aria-hidden="true">📊</span>
      <span class="bottom-nav__label">榜单</span>
    </button>
    <button type="button" class="bottom-nav__btn" data-route="profile" id="bottom-nav-profile" aria-label="我的">
      <span class="bottom-nav__icon" aria-hidden="true">👤</span>
      <span class="bottom-nav__label">我的</span>
    </button>
    <button type="button" class="bottom-nav__btn bottom-nav__btn--admin hidden" data-route="admin" id="bottom-nav-admin" aria-label="后台">
      <span class="bottom-nav__icon" aria-hidden="true">⚙️</span>
      <span class="bottom-nav__label">后台</span>
    </button>
  </nav>

  <script defer src="https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js"></script>
  <script src="html2canvas.min.js?v=2026060467"></script>
  <!-- 生产域名/CDN 对接（本地 file:// 调试不受影响） -->
  <script src="gs-config.js?v=2026060401"></script>
  <script src="gs-cloud-mode.js?v=2026060401"></script>
  <script src="gs-auth.js?v=2026060467"></script>
  <script src="gs-security-api.js?v=2026060467"></script>
  <script src="gs-signin-api.js?v=2026060448"></script>
  <script src="gs-guest-api.js?v=2026060448"></script>
  <script src="gs-posts-api.js?v=2026060325"></script>
  <script src="gs-site-api.js?v=2026060467"></script>
  <script src="gs-titles-api.js?v=2026060226"></script>
  <script src="gs-follows-api.js?v=2026060226"></script>
  <script src="gs-notifications-api.js?v=2026060403"></script>
  <script src="gs-moderation-api.js?v=2026060403"></script>
  <script src="gs-rankings-api.js?v=2026060327"></script>
  <script src="gs-messages-api.js?v=2026060226"></script>
  <script src="gs-admin-api.js?v=2026060467"></script>
  <script src="gs-polls-api.js?v=2026060323"></script>
  <script src="gs-arena.js?v=2026060401"></script>
  <!-- build:2026060467 微信/UC 会忽略 ?cb= 强缓存 index.html，须用带版本号的 JS 文件名 -->
  <script>
    (function () {
      var BUILD = "2026060467";
      var cb = Date.now();
      try {
        localStorage.setItem("gs_app_build", BUILD);
      } catch (e) {}
      window.__GS_CAPTURE_BUILD__ = BUILD;
      function loadScript(file) {
        return new Promise(function (resolve, reject) {
          var s = document.createElement("script");
          s.charset = "UTF-8";
          s.src = file + "?cb=" + cb;
          s.onload = function () {
            resolve();
          };
          s.onerror = function () {
            reject(new Error("load fail: " + file));
          };
          document.body.appendChild(s);
        });
      }
      loadScript("gs-polls." + BUILD + ".js")
        .then(function () {
          return loadScript("app." + BUILD + ".js");
        })
        .then(function () {
          if (typeof init === "function") init();
        })
        .catch(function (e) {
          console.error("[boot]", e);
          var el = document.getElementById("view-root");
          var failed = (e && e.message) ? String(e.message).replace(/^load fail:\s*/i, "") : "gs-polls." + BUILD + ".js 或 app." + BUILD + ".js";
          if (el) {
            el.innerHTML =
              '<div class="card"><p class="muted">脚本加载失败（版本 ' + BUILD + "）：<strong>" + failed + '</strong>。请用 h5.html 重开，并上传 <code>gs-polls.' + BUILD + ".js</code> 与 <code>app." + BUILD + ".js</code></p></div>";
          }
        });
    })();
  </script>
</body>
</html>
