<!doctype html>
<html lang="zh-TW">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" href="/assets/favicon-hs.ico" />
    <script>
      // 依學部網域切換 favicon：cyhs → 高中部、cyjh → 國中部
      (function(){
        try {
          var f = '/assets/favicon-hs.ico';
          var host = location.hostname.toLowerCase();
          var q = new URLSearchParams(location.search).get('dept');
          if (q === 'junior' || /(^|\.)cyjh\./.test(host) || host === 'cyjh') f = '/assets/favicon-jh.ico';
          var link = document.querySelector('link[rel="icon"]');
          if (link) link.setAttribute('href', f);
        } catch (e) {}
      })();
    </script>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>匿名成淵</title>
    <meta name="description" content="匿名成淵 — 成淵最大匿名版" />
    <meta name="keywords" content="匿名成淵,成淵,成淵高中,成淵國中,成淵高中國中部,匿名版,成淵 匿名,成淵 黑特,成淵 政治" />
    
    <!-- Open Graph / Facebook -->
    <meta property="og:type" content="website" />
    <meta property="og:title" content="匿名成淵" />
    <meta property="og:description" content="匿名成淵 — 成淵最大匿名版" />
    <meta property="og:site_name" content="匿名成淵" />
    
    <!-- Twitter -->
    <meta name="twitter:card" content="summary" />
    <meta name="twitter:title" content="匿名成淵" />
    <meta name="twitter:description" content="匿名成淵 — 成淵最大匿名版" />

    <!-- 板面設計字體：Noto Serif TC（標題）+ Noto Sans TC（內文） -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@400;500;700&family=Noto+Serif+TC:wght@700;900&display=swap" rel="stylesheet">

    <!-- Force-clean any old Service Workers and caches once to avoid stale PWA assets -->
    <script>
      (function(){
        try {
          if ('serviceWorker' in navigator && !localStorage.getItem('sw_cleaned_v3')) {
            navigator.serviceWorker.getRegistrations().then(function(regs){
              regs.forEach(function(reg){ reg.unregister(); });
            });
            if ('caches' in window) {
              caches.keys().then(function(keys){
                keys.forEach(function(k){ caches.delete(k); });
              });
            }
            localStorage.setItem('sw_cleaned_v3','1');
          }
        } catch (e) {}
      })();
    </script>

    <script type="module" crossorigin src="/assets/index-BT0Dd9Db.js"></script>
    <link rel="modulepreload" crossorigin href="/assets/vendor-f_8iuvHm.js">
    <link rel="modulepreload" crossorigin href="/assets/framer-ijca0dG7.js">
    <link rel="modulepreload" crossorigin href="/assets/ui-uVtCgNLt.js">
    <link rel="modulepreload" crossorigin href="/assets/firebase-8u9X1Fim.js">
    <link rel="stylesheet" crossorigin href="/assets/index-B-KuiGIr.css">
  </head>
  <body>
    <div id="root"></div>
  </body>
</html>