Normalize line endings
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
---
|
||||
description: 必問再改、Git commit/禁 push、UTF-8、內頁 header、對圖與 devtools
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
# 必問再改與 Git(站主訂)
|
||||
|
||||
## 改檔
|
||||
|
||||
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 時只動 `<span>`;金句未要求時只改內文。沒叫動註解就不動註解。
|
||||
|
||||
## 內頁 header
|
||||
|
||||
- 內頁:**`header.inner-page-header`**。首頁 Hero:**`header#origin`**。樣式以站主在電子書頁調過的為準;要套他頁須站主說執行。
|
||||
|
||||
## 回覆
|
||||
|
||||
- 站主要短句時:先答做沒做、為什麼壞,勿長篇道歉後又擅自改一輪。
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
description: 變更範圍與全站樣式:未點名的檔案與 class 預設不碰;跨頁/共用 CSS 須先確認。
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
# AI 變更邊界(sechskies)
|
||||
|
||||
## 預設只做「被點名」的範圍
|
||||
|
||||
- 使用者若只提某頁(例如 **`minister_ge.html`**)、某區塊、某句文案:**只改該處**,不順手改 `index.html`、`minister.html`、`assets/js/portal-nav.js`、`assets/css/style.css` 全站區、或 **`assets/css/index.css`** 裡與首頁共用的規則。
|
||||
- **未寫到的檔案=不開、不刪、不重構**;需要動到時,先用**一句話**說明「為何必須動」並等使用者確認,或改在回覆裡列出將被波及的檔案請使用者選是否要做。
|
||||
|
||||
## 共用樣式(`assets/css/style.css`、全站 class)
|
||||
|
||||
- **禁止**因為某一頁要對齊視覺,就擅自改掉全站 class(例如 `.slogan-quote`、`.mark_b`、`section` 預設)在**其他頁**的呈現。
|
||||
- **金句已分流**:覺醒稿用 **`slogan-quote slogan-quote--awakening`**(副標語彙:雙線+中置小字),首頁使命稿用 **`slogan-quote slogan-quote--mission`**(獨立奶油卡);基底 **`.slogan-quote` 不帶視覺**,**禁止**再只改基底就套兩種金句。
|
||||
- 若使用者說「參考某區塊的樣式」:只代表**該次交辦的那一段/那一頁**可以長得像它;**不要**在未說明下把既有全站 class 整組換成另一套語彙。應優先:**該頁專用 wrapper class**、或**只加在該頁父層下的選取器**(例如 `.home-page #某區 …`),且仍須落在使用者允許的檔案範圍內。
|
||||
|
||||
## 一句話可避免的誤會
|
||||
|
||||
- 若需求可能影響多檔(導覽、首頁、共用 CSS):**先問**「是否只改 A,還是 B/C 也要一起?」再改。
|
||||
|
||||
## 站主版面與元件預設(設計大原則)
|
||||
|
||||
以下為全站/新區塊的**預設假設**,不必每個區域重複交代;若該次需求明講例外再打破。
|
||||
|
||||
- **同一列/並排多欄**:預設 **等高**(例如 flex 同列 `align-items: stretch`、grid 同列對齊高度),除非該次明講要頂對齊或其他非等高編排。
|
||||
- **同一層級、同類可重複元件**(例如多張 **CARD**、同一 pattern 的 tile):預設 **等寬**(同一 breakpoint 下寬度一致),除非明講破格。
|
||||
- **短字層**(站主慣稱「十字以內」——極短標、標籤、按鈕字、頂欄主標、區塊小標等;語意上不要硬拆成兩行):盡量 **單行、不換行**;**水平置中**。
|
||||
- **交付前必檢・置中**(每次改版面/新區塊/表單標題後**自動確認**,勿等站主提醒):
|
||||
- 短字層、區塊主標、表單大標、按鈕列、圖示+標題並排:父層 `text-align: center` 或 `display: flex` + `justify-content: center` + `align-items: center`(必要時 `margin-inline: auto`)。
|
||||
- `::before`/`::after` 裝飾圖(含 SVG 背景)與文字同一行時:標題用 **`inline-flex` + `align-items: center` + `justify-content: center`**,勿只靠 `inline-block` + `vertical-align` 猜視覺置中。
|
||||
- 內文層 `p` 維持置左;僅容器可 `max-width` + `margin-inline: auto` 置中區塊本身。
|
||||
- 窄螢幕若標題過長:先縮字級或 `letter-spacing`,仍無法單行再與站主確認是否允許換行。
|
||||
- **內文層(body)**(超過短字層——`<p>` 整段導語、說明、列表前引言):允許自然換行;**置左**對齊。規則敘述用「內文/body 層」,**不要**用某個 `*-lead`、`*-intro` 等 class 名當成這一層的定義。
|
||||
- **怎麼判斷**:看**實際字數與語意**(是否明顯超過約十字、是否為段落內文),**不是**看 class 字串。HTML 裡的 `<body class="某頁">` 是**頁面作用範圍**,與「內文層」是兩件事,勿混為一談。
|
||||
- **CSS 怎麼寫**:短字層 → 標題/按鈕等既有元件規則(多為置中)。內文層 → 在該頁 **`body.頁面類名` 底下**對**段落 `p`**(或該區 `section` 內 `p`)設 `text-align: left`;欄寬可 `max-width` + `margin-inline: auto`,但字仍左對齊。**禁止**在規則檔或新頁面把內文層綁死在自創 class 名上當唯一依據。
|
||||
- **捲軸**:一般區塊 **不要**出現內嵌捲軸(避免預設 `overflow: auto/scroll` 把版面變成「盒子裡再拖條」);**只有**站主對該區曾**明講**要可捲動或強烈規定的例外才做捲動容器。
|
||||
- **`img`/`canvas`**:一律 **等比例縮放**(`object-fit: contain` 或 `max-width: 100%` + `height: auto`);**禁止**為了「撐滿」使用 `object-fit: fill` 或讓容器寬高比與圖面比例不一致卻強制 `width/height: 100%` 拉扁。滿欄時外殼可 100% 寬,圖本體置中、維持比例。
|
||||
|
||||
實作時仍以「只改被點名範圍」為上;若要拉一套新 grid/卡片列,優先在本區父層加 class,避免為了對齊去改未點名的全站共用規則。
|
||||
|
||||
## 文件與規則檔
|
||||
|
||||
- **不要**主動新增或長篇修改 `README`、`docs/*.md`,除非站主明講。
|
||||
- **約定只寫在** `developer-rules/rules/*.mdc`(**合併進既有檔**,勿再新增散落 `*-notes.md`/目錄索引)。禁止放在 `docs/` 或站主日常會開的目錄。
|
||||
- 動導覽/籌備中/`site-guide`:**只讀** `portal-nav-rules.mdc`。
|
||||
@@ -0,0 +1,39 @@
|
||||
---
|
||||
description: 改檔後的 commit 規範、push 禁令與本機修復流程。
|
||||
globs: "*"
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
# Git 規範(commit・push)
|
||||
|
||||
## Commit:改完必附
|
||||
|
||||
只要本次對話中**有任何改檔、寫 Code、生成程式碼、調整結構的任務完成**,在回覆結尾**必須、強制、主動**附上 commit 指令,絕對不准等使用者開口要!
|
||||
|
||||
> ⚠️ **死線警告**:若本次對話完全沒有改動任何檔案、純屬聊天或觀念問答,則「不必」附上。
|
||||
|
||||
**禁止**為了附 commit 而跑 `git status`/`git diff`/`git log`;只貼指令,由站主在本機執行。
|
||||
|
||||
### 輸出格式(一字不差):
|
||||
|
||||
```bash
|
||||
git add .
|
||||
git commit -m "type: 重點"
|
||||
```
|
||||
|
||||
| 項目 | 約定 |
|
||||
|------|------|
|
||||
| type | `feat`|`fix`|`style` 三選一 |
|
||||
| 重點 | **15 字以內**(標點計入) |
|
||||
| add | **一律 `git add .`**,禁止只 add 單檔 |
|
||||
|
||||
## 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 .` 不會送進備份檔。
|
||||
@@ -0,0 +1,134 @@
|
||||
---
|
||||
description: 全站導覽與籌備中(portal-nav.js、site-guide、開放邊界、刪錨點)
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
# 全站導覽列規則(`assets/js/portal-nav.js`)
|
||||
|
||||
之後**每新增一個要上線、可點的 HTML 頁面**,請一併完成導覽更新;規則都集中在 **`assets/js/portal-nav.js`**。
|
||||
|
||||
---
|
||||
|
||||
## 0. 兩個世界(最高優先,實作前必讀)
|
||||
|
||||
| 誰在看 | 哪一頁/哪塊 | 行為 |
|
||||
|--------|----------------|------|
|
||||
| **站主自己** | 僅 **`extra/site-guide.html`** | 頂欄必須 **`data-portal-nav data-portal-nav-all-open`**。腳本**不**對該頁頂欄套用籌備中;**不**對 `<main class="site-guide-main">` 內任何 `<a href>` 改寫。表上連結**全部要點得進**(由站主在 HTML 維護)。 |
|
||||
| **訪客/大家** | **除上列以外**的每一頁 | 頂欄+**頁內所有 `<a href>`**(分頁列、內文等)依 `COMING_SOON_PAGES`、`INDEX_NAV_OPEN_HASHES` 鎖定;未公開者**一律標示「籌備中」**、不可點進。**禁止**在其他頁加 `data-portal-nav-all-open`。 |
|
||||
|
||||
**硬規則(違反=做錯)**
|
||||
|
||||
1. **未經站主逐句同意**:不得從 `COMING_SOON_PAGES` **刪**檔名、不得擴充 `INDEX_NAV_OPEN_HASHES`、不得在 `buildPortalNavInnerHTML` **新增**可點項、不得把籌備中改成真 `href`、不得刪站主已同意列入頂欄的項。
|
||||
2. **「檔案在 repo」≠「可開放導覽」**;不得自行推論。
|
||||
3. **`totoga2/readable.html`(圖文好讀版,檔名 `readable.html`)**、**`variety/variety.html`**:站主**沒有明講對外開放**時,檔名**必須**留在 `COMING_SOON_PAGES`(訪客頂欄不可點進)。要開放時**只**能等站主說了再從 Set 移除。
|
||||
4. **「刪除/拿掉/不要了」**:若未寫明是**單一檔案**、**頂欄某一列**、**整段子選單**還是**整個資料夾**,**一律先問站主**,禁止自行擴大刪除範圍。
|
||||
5. **不確定**是否開放、連哪、是否例外:**先問站主再改**,不要猜。
|
||||
6. 站主說刪 **`某頁#錨點`**:見下方 **§8 頁面錨點刪除**(先改 DOM,再修死鏈;禁止只動導覽)。
|
||||
|
||||
---
|
||||
|
||||
## 1. 必做:把頁面掛進導覽 HTML
|
||||
|
||||
在 **`buildPortalNavInnerHTML`**(`assets/js/portal-nav.js`)裡維護連結:
|
||||
|
||||
- 依資訊架構放在對應的 **`<li>`** 底下;需要子選單時用 **`portal-submenu`**。
|
||||
- `href` 使用**站根相對路徑**(腳本會依當前頁深度加上前綴 `rp`):例如 `` `${rp}variety/variety.html` ``、`` `${rp}index.html#section` ``。
|
||||
- Logo 列:`` `${rp}index.html` `` 與 `` `${rp}assets/images/logov.svg` ``。
|
||||
|
||||
新增或調整完後,所有帶 **`data-portal-nav`** 的 `<nav class="portal-nav">` 都會在載入腳本時被注入同一份 HTML。
|
||||
|
||||
---
|
||||
|
||||
## 1.1 未公開=籌備中(全站一致)
|
||||
|
||||
- **站主沒說對外開放**的頁/錨點:在訪客可見處**不得**留可點的真實 `href`(頂欄、totoga2 分頁列、首頁內文、頁尾 CTA 皆同)。
|
||||
- 腳本標記為 `data-coming-soon="true"` 時:提示與頁內按鈕須讓讀者看見 **「籌備中」**(`portal-nav.js` 的 `COMING_SOON_LABEL`),不是改寫成別的隨機句。
|
||||
- **唯一例外**:`extra/site-guide.html` 的 `main.site-guide-main` 內連結(站主索引自用);該頁頂欄 `data-portal-nav-all-open` 僅影響頂欄,**不**豁免主文以外區塊。
|
||||
|
||||
## 2. 可點 vs「籌備中」:`COMING_SOON_PAGES`
|
||||
|
||||
腳本會對導覽裡的連結做 **`applyComingSoonToNav`**:
|
||||
|
||||
- 若連結的**檔名**(小寫)出現在 **`COMING_SOON_PAGES`** 這個 `Set` 裡,該連結會被改成 **`href="#"`**、加上 **`data-coming-soon="true"`**,點擊無法前往(顯示隨機籌備中文案)。
|
||||
- **不要出現在 Set 裡**=視為已開放,維持真實 `href`。
|
||||
|
||||
因此:
|
||||
|
||||
| 需求 | 做法 |
|
||||
|------|------|
|
||||
| 新頁要**正式開放** | 寫進 `buildPortalNavInnerHTML`(`assets/js/portal-nav.js`),並**確認檔名不在** `COMING_SOON_PAGES`。若曾暫時關閉,記得從 Set **刪除**該檔名。 |
|
||||
| 新頁先**占位、不開放** | 可選擇:仍寫進導覽,但把檔名**加進** `COMING_SOON_PAGES`;或暫時不要放進導覽。 |
|
||||
|
||||
(目前 Set 內含哪些檔,以 `assets/js/portal-nav.js` 為準;站主明講開放後才從 Set 移除該檔名,例如 `readable.html`。)
|
||||
|
||||
---
|
||||
|
||||
## 3. 首頁錨點:`INDEX_NAV_OPEN_HASHES`
|
||||
|
||||
指向 **`index.html#...`** 的連結,除了檔名判斷外,還會看 **錨點**:
|
||||
|
||||
- 若 `href` 是 `index.html#某錨點`,且該錨點**不在** **`INDEX_NAV_OPEN_HASHES`**,會被當成籌備中(與整頁關閉不同,是「這個錨點未開」)。
|
||||
- 新增首頁區塊且要從導覽直達時:在 **`INDEX_NAV_OPEN_HASHES`** 加上對應字串,例如 `"#story"`(**僅在使用者要求開放該錨點時**;若約定維持關閉則勿加入)。
|
||||
|
||||
---
|
||||
|
||||
## 3.1 索引頁頂欄全開(僅 `site-guide.html`)
|
||||
|
||||
- **`extra/site-guide.html`** 的 `<nav>` 使用 **`data-portal-nav data-portal-nav-all-open`** 時:注入後**不套用**籌備中,頂欄連結維持真實 `href`。主文 `main.site-guide-main` 內連結不由腳本改寫。
|
||||
- **禁止**在 `site-guide.html` 以外的頁面使用 `data-portal-nav-all-open`。
|
||||
|
||||
---
|
||||
|
||||
## 4. 新頁面 HTML 檢查清單
|
||||
|
||||
- 在 `<body>` 內適當位置放:
|
||||
|
||||
```html
|
||||
<nav class="portal-nav" aria-label="水晶男孩推廣部導覽" data-portal-nav></nav>
|
||||
```
|
||||
|
||||
- 在 `</body>` 前載入(順序可與現有頁一致):
|
||||
|
||||
```html
|
||||
<script src="assets/js/portal-nav.js"></script>
|
||||
```
|
||||
|
||||
內頁(例如 `extra/`、`fallen/`、`member/`、`yellow-note/`、`variety/` 下)請用相對站根深度,例如:
|
||||
|
||||
```html
|
||||
<script src="../assets/js/portal-nav.js"></script>
|
||||
```
|
||||
|
||||
- 若該頁有 **`assets/js/particles.js`**/共用樣式(`assets/css/style.css` 等),比照其他內頁一併引入即可。
|
||||
|
||||
---
|
||||
|
||||
## 5. 刻意不進導覽的頁面
|
||||
|
||||
若某頁只給自己用(例如站內索引、草稿),**不要**寫進 `buildPortalNavInnerHTML` 即可;不必改 `COMING_SOON_PAGES`。
|
||||
|
||||
---
|
||||
|
||||
## 6. 改完請自檢
|
||||
|
||||
1. 從導覽點進新頁是否正常。
|
||||
2. 若應為開放頁,確認不會變成「尚無開放」、不會被改成 `href="#"`。
|
||||
3. 若為首頁錨點,確認已加入 `INDEX_NAV_OPEN_HASHES`(若有需要)。
|
||||
|
||||
---
|
||||
|
||||
## 8. 頁面錨點刪除(`某頁.html#id`)
|
||||
|
||||
指該 HTML 裡 **`id="…"` 的那一區**/`<section>`,不是刪整檔、不是刪資料夾、不是刪頂欄整段「全員發瘋」,也不是擅自改 `COMING_SOON_PAGES`(除非原句一併交代)。
|
||||
|
||||
1. **先**在目標頁拿掉該 DOM。
|
||||
2. **再**修仍指向死錨的 `href`(最小必要)。
|
||||
3. **禁止**只改 `portal-nav.js`/`site-guide.html` 卻不刪頁內區塊。
|
||||
|
||||
錨點拿掉後,書籤網址列仍可能顯示 `#…`,不代表 DOM 還在。header 大標 ≠ 已刪的 `#id` 區塊。「刪除」範圍不清 → **先問**。
|
||||
|
||||
## 名詞
|
||||
|
||||
- **頂欄**:`portal-nav.js` 注入的 `<nav class="portal-nav" data-portal-nav>`。
|
||||
- **全站索引**:`extra/site-guide.html`(可列草稿;**不等於**頂欄要掛)。
|
||||
- **程式真值**:`assets/js/portal-nav.js`(`COMING_SOON_LABEL`=「籌備中」)。
|
||||
@@ -0,0 +1,45 @@
|
||||
---
|
||||
description: 全站對讀者文案語調(index body 開頭至 timeline data-era=2016.05)
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
# 全站文案調性
|
||||
|
||||
撰寫或改寫**給訪客看的內文**時,語感對齊母本(站主指定範圍):
|
||||
|
||||
## 母本
|
||||
|
||||
**檔案** `index.html`:`<body>` 起 → `#timeline` 內 **`article[data-era="2016.05"]` 全文止**(含錨點句)。
|
||||
|
||||
| 區塊 | 說明 |
|
||||
|------|------|
|
||||
| `header#origin` | Hero |
|
||||
| `nav.portal-nav` | 頂欄 |
|
||||
| `#start` | 入坑 |
|
||||
| `#mission` | 初衷 |
|
||||
| `#timeline` | 至 1997 → 2000 → 2016 → **2016.05** |
|
||||
|
||||
**不納入** 2016.05 之後的 timeline 與 body 後段。
|
||||
|
||||
## 錨點句(2016.05)
|
||||
|
||||
> 原來大家只是換個方式一起變老,這份情誼早已超越了表演。
|
||||
|
||||
須承接入坑 → 初衷 → 四節時間軸,勿只複誦此句。
|
||||
|
||||
## 語感
|
||||
|
||||
站主 2016 入坑、藝廊式創作;盛世 → 休止 → 合體 → 落地。溫柔、具體、遺憾與釋懷並寫。
|
||||
|
||||
## 避免
|
||||
|
||||
- 只抄 timeline 末段或錨點句。
|
||||
- 2016.05 之後當母本。
|
||||
- 讀者向技術說明(除非站主明講)。
|
||||
- 單頁 intro 硬拼整條首頁時間軸;該頁先說**該頁主題**(如六六歌2 電子書),語感對齊即可。
|
||||
|
||||
## 六六歌2 單頁 intro
|
||||
|
||||
- 採用版見 `totoga2/ebook.html`(「四月那場重逢…」)。
|
||||
- 勿 FlipHTML5/PDF 操作說明。
|
||||
- 四入口順序:**時間軸 → 電子書 → 圖文好讀版 → 影片**。
|
||||
Reference in New Issue
Block a user