diff --git a/.cursor/_fix_p_tags.py b/.cursor/_fix_p_tags.py deleted file mode 100644 index ca9a154..0000000 --- a/.cursor/_fix_p_tags.py +++ /dev/null @@ -1,14 +0,0 @@ -# -*- coding: utf-8 -*- -from pathlib import Path - -p = Path(r"d:\Developer\projects\sechskies\totoga2\readable copy.html") -s = p.read_text(encoding="utf-8") -s = s.replace( - '< class="intro-text"> class="ebook-intro-note">', - '
', -) -s = s.replace('< class="intro-text">>', '
')
-if '< class="intro-text">' in s:
- raise SystemExit("still broken intro-text tags")
-p.write_text(s, encoding="utf-8", newline="\n")
-print("fixed", s.count('class="intro-text"'))
diff --git a/.cursor/collaboration-notes.md b/.cursor/collaboration-notes.md
deleted file mode 100644
index 5b4d3ed..0000000
--- a/.cursor/collaboration-notes.md
+++ /dev/null
@@ -1,120 +0,0 @@
-# 站主與助手協作備忘
-
-由對話整理;**程式真值**仍以 repo 與 `.cursor/rules/*.mdc` 為準。本檔僅記「這次講定的做事方式」,不取代規則檔。
-
----
-
-## 1. 邊界(站主明講)
-
-- **沒有叫你做的,不要順手做**(含刪註解、順手整理、自訂「以後我都會……」流程)。
-- **看不懂先問**;你說「執行」再改檔。你說「檢查」就只對照回報,**不擅自改**。
-- **不要自己訂規則**代替站主(例如自創「只調樣式就保留註解」這類概括)。
-
----
-
-## 2. 參考圖怎麼讀
-
-- **畫線/粉線**:提醒「這一段要看」,**不是**「整段都要包 span」或「這裡一定要 `mark_b`」。
-- **實際標記**:對照圖裡**字重、黃標、一般內文**,再對應既有 class(`mark_y`、`mark_b`),自己判斷。
-- **開發者工具截圖**(勾選/刪除線):照**屬性開關**改 CSS;沒叫動註解就不要動註解。
-
----
-
-## 3. 首頁 `#mission`(做法,非定稿內容)
-
-- 第一段:站主若只說調 span,**只**增刪 `` 與既有 class;未要求不改 CSS。實際哪些詞要 `mark_y`/`mark_b` **會變**,以當下 `index.html` 與站主圖為準,**不寫死**在筆記。
-- 第二段金句:未要求時**只改內文**、不改 span 結構。
-- devtools 截圖:照屬性開關改;沒叫動註解就不要動註解。
-
----
-
-## 4. 籌備中連結(`portal-nav.js`,若後續對話有改動以檔案為準)
-
-- 頂欄與頁內按鈕:**`NAV_SOON_PHRASES` 隨機氣泡**(滑過);無障礙 aria「尚無開放」。
-- 頁內按鈕:**不加**可見「(籌備中)」後綴。
-- `totoga2/timeline.html` 在 `COMING_SOON_PAGES`(時間軸不公開);圖文好讀版為 `totoga2/readable.html`。
-
----
-
-## 5. 2026-05 慘痛教訓(務必讀 `agent-must-ask.mdc`)
-
-- 用 PowerShell 批次改全站 HTML **沒 UTF-8** → 首頁中文全毀、`` 露出;已 `git checkout` 還原 HTML。
-- **擅自**把 `map-archive-header` 改成 `inner-page-header`(站主沒點頭、沒給名字)。
-- 站主說先電子書 + dev `center 78%`,助手卻自加 `clamp`/全站 `100vh`/又全站改掉。
-- 頂欄擅自「傳奇的轉折(六六歌2)」— 已改回「傳奇的轉折」;以後 nav 文案不自擴。
-- **擅自 `git push`**(站主只貼 push 失敗錯誤、沒說「幫我 push」)— 禁止再犯;修 push 問題只動本機,結尾給站主自己下的 `git push` 指令。
-
----
-
-## 6. 改完就給 commit(站主訂)
-
-**每做完一項改動**,回覆末尾**直接附**一段(不要為此反覆跑 `git status`/`git diff` 確認;助手自己知道改了什麼):
-
-```bash
-git add .
-git commit -m "類型 修改重點"
-```
-
-| 項目 | 約定 |
-|------|------|
-| **類型** | 三選一,以本次修改**為主**的那一種:`feat`(新功能/新行為)、`fix`(修 bug/修壞掉的行为)、`style`(純樣式/排版,無新功能) |
-| **格式** | 類型後**空一格**,再接修改重點;整段 `""` 內建議維持 `類型 + 空格 + 重點` 一行 |
-| **字數** | 修改重點**15 字以內**(中文為主,標點計入字數;過長請精簡) |
-| **`git add`** | **一律只寫 `git add .`**;**禁止** `git add 單一檔案路徑`(易漏同次改動的 `portal-nav.js` 等,側邊欄會留 **M**) |
-| **側邊欄 M** | VS Code 檔名旁 **M = Modified(有未 commit 變更)**,與 `commit -m` 無關;`add` 後要 **commit** 才會消失 |
-
-**範例**
-
-```bash
-git add .
-git commit -m "feat 頂欄992px漢堡選單"
-```
-
-```bash
-git add .
-git commit -m "fix 三層子選單hover接軌"
-```
-
-```bash
-git add .
-git commit -m "style 內頁標題深灰配色"
-```
-
-- 站主若只說「檢查」、未說執行:**不附** commit(也沒有改檔)。
-- 一次對話若分多項獨立交辦,**每項做完各附一段** commit,不要合併成一句含糊帶過。
-
----
-
-## 6.1 Git:只附 commit,**禁止擅自 push**(站主訂)
-
-| 可以做 | 不可以做 |
-|--------|----------|
-| 改檔後末尾附 `git add .` + `git commit -m "…"`(§6) | **`git push`**、**`git push -u origin …`**、代站主推遠端 |
-| 站主貼 push 失敗:查原因、本機 amend/壓圖/改 `.gitignore`,**說明後請站主自己 push** | 以為「幫他推上去比較省事」就 push |
-| 站主明講「幫我 push」「推上去」 | 用 push 當改完的預設收尾 |
-
-**結尾範例(修完 push 擋下時):**
-
-```bash
-git push origin main
-```
-
-(由站主在本機執行;助手不代跑。)
-
-### 大檔/備份(2026-05 push 擋下)
-
-- GitHub 單檔 **> 100 MB** 會拒 push;`totoga2/readable/` 曾卡 `13-7_生氣在錫大頭版.png` 與 **`.png.bak`**。
-- 已加 repo 根 **`.gitignore`**:`*.png.bak`。**勿** `git add .` 把 `.bak` 送進 commit。
-- 壓圖只改工作區檔案時,若需改寫**已 commit 未 push** 的歷史,先問站主是否同意 amend/filter-branch;**仍不代 push**。
-
----
-
-## 7. 相關規則檔
-
-| 檔案 | 用途 |
-|------|------|
-| `.cursor/collaboration-notes.md` §6、§6.1 | **改完附 commit**;**禁止擅自 push** |
-| `.cursor/rules/agent-must-ask.mdc` | **必問再改**、禁止批次毀 UTF-8、header/nav 勿擅自改名 |
-| `.cursor/rules/ai-change-boundaries.mdc` | 變更範圍、共用 CSS |
-| `.cursor/rules/user-scope-and-nav.mdc` | 導覽開放、錨點刪除 |
-| `.cursor/rules/portal-nav-rules.mdc` | `portal-nav.js` 技術細節 |
diff --git a/.cursor/portal-nav-optimization-backlog.md b/.cursor/portal-nav-optimization-backlog.md
deleted file mode 100644
index 80721f7..0000000
--- a/.cursor/portal-nav-optimization-backlog.md
+++ /dev/null
@@ -1,40 +0,0 @@
-# 頂欄導覽 · 優化清單(助手用,不對讀者顯示)
-
-站主未要求上線;以下為自 `portal-nav.js` 移除的 `portal-nav__sub` 文案備份。
-**程式真值**:`assets/js/portal-nav.js` 的 `buildPortalNavInnerHTML`(僅主標 `portal-nav__label` 或純文字)。
-日後若站主明講要加回副標,只依本檔與當次指示改,勿自行推論。
-
----
-
-## 已移除副標(對照主標)
-
-| 主標(`portal-nav__label`) | 原 `portal-nav__sub` |
-|---------------------------|----------------------|
-| 淪陷瞬間 | Hero、入坑敘事與站方初衷;LOGO 與跨時空軌跡 |
-| 初心與軌跡 | Hero、入坑敘事與站方初衷;LOGO 與跨時空軌跡 |
-| 傳奇的轉折(六六歌2) | 四種入口:時間軸、電子書、網頁版、影片 |
-| 影片 | 無限挑戰 · 六六歌2 嵌入影片單頁 |
-| 電子書 | 紀實電子書內容獨立成頁 |
-| 時間軸 | 時間軸與紀實八章長文單頁 |
-| 圖文好讀版 | 單頁整合:影片/電子書/長文與八章錨點 |
-| 全員發瘋 | 原來我是個正常人啊!團綜與失控現場 |
-| 隊長帶弟弟 | 控場與隊內互動 |
-| 各自暴走 | 獨立內頁籌備中 |
-| 新西遊記 | 成員介紹 · MEMBER GUIDE |
-| 完整的六顆 | 六顆水晶 · 黑白分流 |
-| 現場的震撼 | SECHSKIES CONCERT ARCHIVE |
-| 集結水晶 | 團體演唱會 |
-| 隊長的氣場 | 個人見面會與演唱會 |
-| 黃色留聲機 | YELLOW PHONOGRAPH |
-| 啟動新篇章 | 重啟後作品與單曲 |
-| 輝煌全盛期 | 1997–1999 年表 |
-| Yellow Note | 台灣行程表、成員行程篩選、搜尋與地圖主體 |
-| 視覺進化論 | 從好奇到全端:自述與時間軸式章節 |
-| 聖地巡禮 | 台灣行程表、成員行程篩選、搜尋與地圖 |
-
----
-
-## 約定(給助手)
-
-- **禁止**在未經站主明講時,於 `buildPortalNavInnerHTML` 加回 `` 或類似第二行說明。
-- 頂欄結構/開放與否仍以 `portal-nav-rules.mdc`、`user-scope-and-nav.mdc` 為準。
diff --git a/.cursor/rules/agent-must-ask.mdc b/.cursor/rules/agent-must-ask.mdc
index 9b8b044..61da0a0 100644
--- a/.cursor/rules/agent-must-ask.mdc
+++ b/.cursor/rules/agent-must-ask.mdc
@@ -1,31 +1,52 @@
---
-description: 助手必問再改(站主明講);防擅自改名、批次改檔、編碼毀檔
+description: 必問再改、Git commit/禁 push、UTF-8、內頁 header、對圖與 devtools
alwaysApply: true
---
-# 必問再改(站主已多次強調)
+# 必問再改與 Git(站主訂)
-## 硬規則
+## 改檔
-1. **站主沒說「執行」→ 不改檔**(可先說明、對照、列計畫)。
-2. **站主說「先改一頁」→ 只改那一頁**,不得順手全站套用。
-3. **class 改名/全站換名**:先問站主**確切 class 字串**;全站內頁 banner 現用 **`inner-page-header`**(禁止再改回 `map-archive-header` 等單頁名);不得用 PowerShell 批次替換 HTML。
-4. **導覽文案**:不得自加括號、副標、路徑說明(例如禁止擅自「傳奇的轉折(六六歌2)」);`portal-nav.js` 改字前先對站主原句。
-5. **CSS 對齊 devtools**:站主給的勾選/數值照抄;若必須補 `min-height`、`padding` 等 devtools 沒有的值,**先寫明「這是我補的」**,等站主說執行再寫入。
+1. **沒說「執行」→ 不改檔**(可先說明、對照、列計畫)。**「檢查」→ 只回報**。
+2. **只改被點名的那一頁/區塊**;未寫到的檔不開、不刪、不重構。
+3. **class 全站換名**:先問確切字串。內頁 banner 用 **`inner-page-header`**(禁止改回 `map-archive-header` 等)。**禁止** PowerShell 批次改 `.html`(須 UTF-8 安全,如逐檔 `StrReplace`)。
+4. **頂欄文案**:禁止擅自加括號、副標(如「傳奇的轉折(六六歌2)」);改 `portal-nav.js` 前對站主原句。
+5. **devtools**:勾選/數值照抄;補 devtools 沒有的值須標「這是我補的」,等站主說執行再寫入。
+6. **參考圖**:粉線=看這段,不是整段包 span。`mark_y`/`mark_b` 對照圖裡實際字重。
+7. **首頁 `#mission`**:只調 span 時只動 ``;金句未要求時只改內文。沒叫動註解就不動註解。
-## 禁止(曾毀站)
+## 內頁 header
-- **禁止**用 PowerShell `Get-Content` / `Set-Content`(或未指定 `-Encoding utf8`)批次改 **`.html`** → 會把 UTF-8 中文弄成 `?`、標籤斷裂(如 `?/span>`)。
-- 若需批次改 HTML:只用 **UTF-8 安全**方式(例如逐檔 `StrReplace`、或 `git` 還原後手改),改完抽查 `index.html` 首屏中文是否正常。
+- 內頁:**`header.inner-page-header`**。首頁 Hero:**`header#origin`**。樣式以站主在電子書頁調過的為準;要套他頁須站主說執行。
-## 內頁 header(約定方向,名稱待站主定)
+## Git:改完末尾附 commit
-- 全站內頁 banner:**`header.inner-page-header`**(勿用 `map-archive-header` 等單頁名當全站 class)。
-- 首頁僅 **`header#origin`** 全屏 Hero,與內頁 header class 分開。
-- 樣式以站主在**電子書頁** devtools 調過的為準後,再談是否套其他內頁(須站主說執行)。
+每做完**一項**改動並已寫入檔案,回覆末尾附(**勿**為此反覆跑 `git status`/`git diff`):
+
+```bash
+git add .
+git commit -m "類型 修改重點"
+```
+
+| 項目 | 約定 |
+|------|------|
+| 類型 | `feat`|`fix`|`style` 三選一 |
+| 重點 | **15 字以內**(標點計入) |
+| add | **一律 `git add .`**,禁止只 add 單檔 |
+
+- 只說「檢查」、未改檔 → 不附 commit。多項獨立交辦 → 每項各附一段。
+
+## Git:禁止擅自 push
+
+- **禁止 `git push`**,除非站主原句「幫我 push」等。只貼 push 錯誤 ≠ 同意 push。
+- 修 push 失敗:只動本機(壓圖、`.gitignore`、`amend`/filter-branch **先問**),末尾只給站主:
+
+```bash
+git push origin main
+```
+
+- GitHub 單檔 **> 100 MB** 拒 push。`*.png.bak` 已在根 `.gitignore`,勿 `git add .` 送進備份檔。
## 回覆
-- 站主說字太多時:**短句**,先答「做沒做、為什麼壞」,不要長篇道歉後又擅自改一輪。
-- **改完一項並已寫入檔案**:回覆末尾附 `git add .` + `git commit -m "feat|fix|style 重點"`(重點 **15 字以內**);細則見 `.cursor/collaboration-notes.md` §6。勿為附 commit 反覆查 git。
-- **禁止擅自 `git push`**:除非站主原句要求推遠端;修 push 失敗只改本機,末尾給站主自行的 `git push …` 即可。見 `.cursor/collaboration-notes.md` §6.1。
+- 站主要短句時:先答做沒做、為什麼壞,勿長篇道歉後又擅自改一輪。
diff --git a/.cursor/rules/ai-change-boundaries.mdc b/.cursor/rules/ai-change-boundaries.mdc
index 307fca1..ea3a701 100644
--- a/.cursor/rules/ai-change-boundaries.mdc
+++ b/.cursor/rules/ai-change-boundaries.mdc
@@ -37,8 +37,6 @@ alwaysApply: true
## 文件與規則檔
-- **不要**主動新增或長篇修改 `README`、`docs/*.md`、規則檔,除非使用者明講要寫入文件或規範。
-- **助手自用筆記**(對話紀要、頁面編輯規格、實作備忘):只寫在 **`.cursor/`**(例如 `.cursor/*-notes.md`);**禁止**放在 `docs/`、`README` 或站主日常會開的目錄。回覆裡也不必貼長篇筆記內容。
-- **例外**:使用者要求「把約定寫死/規則講清楚/不要再做錯」時,得**精準**更新 `.cursor/rules`(與 `portal-nav.js` 頂部註解對齊),避免重複踩雷;仍避免無關長文。
-
-(與導覽開放、頂欄 vs `site-guide` 相關條文以 **`user-scope-and-nav.mdc`**、**`portal-nav-rules.mdc`** 為準;實作前兩份都讀。)
+- **不要**主動新增或長篇修改 `README`、`docs/*.md`,除非站主明講。
+- **約定只寫在** `.cursor/rules/*.mdc`(**合併進既有檔**,勿再新增散落 `*-notes.md`/目錄索引)。禁止放在 `docs/` 或站主日常會開的目錄。
+- 動導覽/籌備中/`site-guide`:**只讀** `portal-nav-rules.mdc`。
diff --git a/.cursor/rules/portal-nav-rules.mdc b/.cursor/rules/portal-nav-rules.mdc
index 8201a77..3c81e44 100644
--- a/.cursor/rules/portal-nav-rules.mdc
+++ b/.cursor/rules/portal-nav-rules.mdc
@@ -1,5 +1,5 @@
---
-description: 全站頂欄導覽 portal-nav.js(buildPortalNavInnerHTML、COMING_SOON_PAGES、INDEX_NAV_OPEN_HASHES、籌備中、新頁檢查清單);與 user-scope-and-nav 搭配。
+description: 全站導覽與籌備中(portal-nav.js、site-guide、開放邊界、刪錨點)
alwaysApply: true
---
@@ -23,13 +23,7 @@ alwaysApply: true
3. **`totoga2/readable.html`(圖文好讀版,檔名 `readable.html`)**、**`variety/variety.html`**:站主**沒有明講對外開放**時,檔名**必須**留在 `COMING_SOON_PAGES`(訪客頂欄不可點進)。要開放時**只**能等站主說了再從 Set 移除。
4. **「刪除/拿掉/不要了」**:若未寫明是**單一檔案**、**頂欄某一列**、**整段子選單**還是**整個資料夾**,**一律先問站主**,禁止自行擴大刪除範圍。
5. **不確定**是否開放、連哪、是否例外:**先問站主再改**,不要猜。
-6. 站主說要刪的是 **`某頁#錨點`**(頁內區塊)時:先改該頁 DOM,再修死錨連結;**不要**只動導覽、也不要把「刪區塊」擴成刪頂欄整段。細節見 **`user-scope-and-nav.mdc`**(§ 頁面錨點刪除)。
-
-## 0.1 站主同意(細項)
-
-- **未經站主明確同意**,不得自行:從 `COMING_SOON_PAGES` 移除檔名、擴充 `INDEX_NAV_OPEN_HASHES`、在 `buildPortalNavInnerHTML` **新增**導覽項目、**刪除站主已同意列入頂欄**的項目、或把籌備中連結改成可點(**全站導覽頁頂欄例外見 §0**)。
-- **`extra/site-guide.html`**:站主自用;條件同 §0 表格。(僅此頁可加 `data-portal-nav-all-open`。)
-- 頂欄模板**不含**未同意掛列的頁;該頁仍可由 `site-guide` 主文或網址直開(站主自用)。
+6. 站主說刪 **`某頁#錨點`**:見下方 **§8 頁面錨點刪除**(先改 DOM,再修死鏈;禁止只動導覽)。
---
@@ -123,22 +117,18 @@ alwaysApply: true
---
-## 7. 與使用者約定:開放範圍
+## 8. 頁面錨點刪除(`某頁.html#id`)
-- **不要**在未經使用者**明確交代**的情況下,自行把導覽改為「可點進入」或更換目標頁(例如把「傳奇的轉折」改成連到 `totoga2.html`)。
-- 「傳奇的轉折」是否開放、連到哪裡,**只依使用者指示**;意圖與邊界亦見 **`.cursor/rules/user-scope-and-nav.mdc`**。
+指該 HTML 裡 **`id="…"` 的那一區**/`