style 調整版面

This commit is contained in:
2026-05-15 22:32:35 +08:00
parent 177fb831a9
commit 12fa333a02
9 changed files with 283 additions and 93 deletions
+92 -18
View File
@@ -370,13 +370,14 @@ nav a {
color: rgba(212, 196, 150, 0.95);
}
.portal-nav a[data-coming-soon="true"] {
/* 籌備中:頂欄與頁內 .btn/分頁列等共用隨機氣泡(不加可見「(籌備中)」後綴) */
a[data-coming-soon="true"] {
cursor: default;
opacity: 0.82;
position: relative;
}
.portal-nav a[data-coming-soon="true"]::after {
a[data-coming-soon="true"]::after {
content: var(--portal-nav-soon-msg);
position: absolute;
z-index: 120;
@@ -394,7 +395,10 @@ nav a {
transition: opacity 0.16s ease;
}
.portal-nav>ul>li>a[data-coming-soon="true"]::after {
.portal-nav>ul>li>a[data-coming-soon="true"]::after,
a.btn[data-coming-soon="true"]::after,
.totoga2-split-crossnav a[data-coming-soon="true"]::after,
.ebook-back-link a[data-coming-soon="true"]::after {
left: 50%;
top: calc(100% + 4px);
transform: translateX(-50%);
@@ -421,16 +425,22 @@ nav a {
color: #5f5f5f;
}
a.btn[data-coming-soon="true"],
.totoga2-split-crossnav a[data-coming-soon="true"],
.ebook-back-link a[data-coming-soon="true"] {
pointer-events: auto;
}
@media (hover: hover) {
.portal-nav a[data-coming-soon="true"]:hover::after,
.portal-nav a[data-coming-soon="true"]:focus-visible::after {
a[data-coming-soon="true"]:hover::after,
a[data-coming-soon="true"]:focus-visible::after {
opacity: 1;
}
}
@media (hover: none) {
.portal-nav a[data-coming-soon="true"]:active::after {
a[data-coming-soon="true"]:active::after {
opacity: 1;
transition: opacity 0.08s ease;
}
@@ -635,9 +645,7 @@ section {
}
.mission-section .mission-row+.mission-row {
margin-top: 2.75rem;
padding-top: 2.75rem;
/* border-top: 1px solid rgba(255, 204, 0, 0.45); */
}
.mission-section .mission-row__visual {
@@ -843,6 +851,36 @@ section {
}
}
/* 左側 Font Awesome::before);--fa-before-icon、--fa-before-color 可覆寫 */
.fa-before-lead {
position: relative;
padding-left: 1.75em;
text-align: left;
}
.fa-before-lead::before {
content: var(--fa-before-icon, "\f111");
font-family: "Font Awesome 6 Free";
font-weight: 900;
position: absolute;
left: 0;
top: 0.15em;
font-size: 1.05em;
line-height: 1;
color: var(--fa-before-color, var(--primary, #ffcc00));
}
.fa-before-lead.fa-before-lead--balloon::before {
content: "";
font-family: inherit;
width: 1.15em;
height: 1.15em;
top: 0.1em;
background-color: var(--fa-before-color, var(--primary, #ffcc00));
-webkit-mask: url('../images/icon/balloon.svg') center / contain no-repeat;
mask: url('../images/icon/balloon.svg') center / contain no-repeat;
}
/* 金句:基底只放結構:視覺請用 --mission / --awakening,兩句互不覆寫 */
.slogan-quote {
box-sizing: border-box;
@@ -1316,7 +1354,6 @@ footer a .mark_b {
}
.concert-page .concert-archive-header,
.concert-page .portal-nav,
.concert-page .search-section,
.concert-page .concert-container,
.concert-page footer {
@@ -1324,6 +1361,25 @@ footer a .mark_b {
z-index: 1;
}
/* 演唱會頁:勿與主內容同層 z-index:1(會被後方 DOM 蓋住);對齊 map-page 黏頂+較高層 */
.concert-page .portal-nav {
width: 100%;
margin: 0 0 14px;
padding: 0.8rem 100px;
background-color: var(--black);
border-radius: 0;
box-shadow: none;
overflow: visible;
position: sticky;
top: 0;
z-index: 100;
}
.concert-page .portal-nav>ul>li:hover,
.concert-page .portal-nav>ul>li:focus-within {
z-index: 105;
}
.map-page .portal-nav {
width: 100%;
margin: 0 0 14px;
@@ -2060,6 +2116,22 @@ body.ebook-ssg2-page .ebook-intro.section p + p {
line-height: 1.5;
}
body.ebook-ssg2-page .ebook-intro-notes {
max-width: 42rem;
margin: 0 auto 1rem;
}
body.ebook-ssg2-page .ebook-intro-notes .ebook-intro-note {
margin: 0;
font-size: 0.88rem;
color: #777;
line-height: 1.5;
}
body.ebook-ssg2-page .ebook-intro-notes .ebook-intro-note + .ebook-intro-note {
margin-top: 0.35rem;
}
body.ebook-ssg2-page .ebook-main,
body.ebook-ssg2-page footer {
position: relative;
@@ -2198,25 +2270,27 @@ body.ebook-ssg2-page.totoga2-ebook-copy-page .flip-ebook-aspect.flip-ebook-aspec
max-width: 100%;
margin: 0;
padding: 0;
display: flex;
justify-content: center;
align-items: flex-start;
display: block;
box-sizing: border-box;
border-radius: 14px;
overflow: hidden;
}
body.ebook-ssg2-page.totoga2-ebook-copy-page #book-container.flip-ebook-aspect--pageflip,
body.ebook-ssg2-page.totoga2-ebook-copy-page .flip-ebook-aspect--pageflip > #my-flipbook {
width: auto;
width: 100%;
max-width: 100%;
margin: 0 auto;
margin: 0;
overflow: hidden;
border-radius: 14px;
box-sizing: border-box;
}
body.ebook-ssg2-page.totoga2-ebook-copy-page #my-flipbook .stf__parent,
body.ebook-ssg2-page.totoga2-ebook-copy-page #my-flipbook .stf__wrapper {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
body.ebook-ssg2-page.totoga2-ebook-copy-page #my-flipbook .page {
@@ -2236,10 +2310,10 @@ body.totoga2-page .totoga2-hub-controls {
flex-wrap: wrap;
}
body.totoga2-page.totoga2-video-copy-page .map-archive-header {
body.totoga2-page .map-archive-header {
height: auto;
min-height: 0;
padding: clamp(1rem, 2.8vw, 1.75rem) 20px clamp(1.1rem, 3vw, 1.9rem);
min-height: clamp(15rem, 42vh, 26rem);
padding: clamp(2rem, 5vh, 3.25rem) 20px;
background-size: cover;
}
@@ -2256,7 +2330,7 @@ body.totoga2-page.totoga2-video-copy-page {
}
/* 節目影片複本:上/中/下集在播放器外殼內、緊貼 iframe 下方;維持全站 .btn 黃膠囊 */
body.totoga2-page.totoga2-video-copy-page .bilivideo-hub .bilivideo-tabs__shell {
body.totoga2-page.totoga2-video-copy-page .ebook-main .bilivideo-tabs__shell {
max-width: 960px;
margin-left: auto;
margin-right: auto;
+47
View File
@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<g>
<g>
<path d="M389.12,133.12C389.12,59.72,329.4,0,256,0S122.88,59.72,122.88,133.12c0,75.08,64.532,151.122,112.763,169.718
l-7.373,7.352c-2.908,2.929-3.789,7.352-2.212,11.162c1.577,3.83,5.325,6.328,9.462,6.328h13.66
c30.577,72.95,14.438,89.743-7.885,112.538c-13.701,14.008-29.225,29.86-36.209,59.167c-1.331,5.489,2.068,11.018,7.578,12.329
c0.799,0.205,1.597,0.287,2.376,0.287c4.649,0,8.847-3.154,9.953-7.864c5.693-23.777,18.534-36.905,30.945-49.582
c27.955-28.57,44.38-53.494,15.401-126.874h5.141c4.137,0,7.885-2.499,9.462-6.328c1.577-3.809,0.696-8.233-2.212-11.162
l-7.373-7.352C324.588,284.242,389.12,208.2,389.12,133.12z M256,61.44c-39.526,0-71.68,32.154-71.68,71.68
c0,5.652-4.588,10.24-10.24,10.24c-5.653,0-10.24-4.588-10.24-10.24c0-50.811,41.349-92.16,92.16-92.16
c5.652,0,10.24,4.588,10.24,10.24S261.652,61.44,256,61.44z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

+55 -21
View File
@@ -1,20 +1,22 @@
(() => {
/**
* 導覽尚未開放連結
* 兩個世界 `extra/site-guide.html``<nav data-portal-nav data-portal-nav-all-open>` 不套用籌備中
* 頂欄全可點`main.site-guide-main` `<a>` 腳本不改寫站主自用索引 其餘每一頁一律套用籌備中
* totoga2頂欄結構對齊 `site-guide` 主選單樹傳奇的轉折六六歌2下四入口`extra/totoga2-*.html` 可點`fallen/totoga2.html`檔名 totoga2.html COMING_SOON_PAGES圖文好讀版訪客籌備中未同意不得從 Set 刪除
* 兩個世界 `extra/site-guide.html``<nav data-portal-nav-all-open>` 頂欄全可點`main.site-guide-main` `<a>` 不改寫
* 其餘每一頁頂欄**頁內所有連結** totoga2 分頁列首頁內文皆依 COMING_SOONINDEX 白名單鎖定
* totoga2頂欄四入口時間軸`totoga2-copy-timeline.html`圖文好讀版`totoga2.html` Set電子書影片可點未同意不得從 Set 刪除或擅自開放
* 硬規則檔案在 repo 可開放未同意不得從 Set 刪名不得擴白名單不得在模板新增可點項
* 文案 NAV_SOON_PHRASES籌備中連結提示用
* 未公開href #不可點頂欄與頁內按鈕NAV_SOON_PHRASES 滑過隨機氣泡 ::after無障礙 aria尚無開放不加可見籌備中文字後綴
* totoga2 開放`extra/totoga2-copy-ebook.html``extra/totoga2-video.html` 可點`totoga2-copy-timeline.html` `fallen/totoga2.html` Set
* 頂欄勿加 `portal-nav__sub`站主未要求曾用副標見 `.cursor/portal-nav-optimization-backlog.md`
* 完整條文`.cursor/rules/portal-nav-rules.mdc` + `user-scope-and-nav.mdc`
*/
const NAV_SOON_PHRASES = ["奇蹟醞釀中", // 頁面準備中,呼應黃色奇蹟的誕生
"感動載入中", // 資料讀取中,連結入坑時的悸動
"初心校準中", // 結構調整中,呼應 LOGO 的六人設計核心
"黃海漫延中", // 視覺填充中,發想自黃色海洋填滿漆黑的過程
"傳奇編排中", // 內容整理中,記錄 1999 年榮譽與歷史軌跡
"夢想航行中", // 未來規劃中,期待水晶男孩的下一個十年
const NAV_SOON_PHRASES = [
"奇蹟醞釀中",
"感動載入中",
"初心校準中",
"黃海漫延中",
"傳奇編排中",
"夢想航行中",
];
/** 主選單欄 `mouseleave` 後延遲關閉(ms),方便移入子選單或右側飛出層,避免略偏就關閉 */
@@ -24,7 +26,7 @@
return NAV_SOON_PHRASES[Math.floor(Math.random() * NAV_SOON_PHRASES.length)];
}
/** 每次互動重抽,讀者沿導覽滑動時會交錯看到不同字樣 */
/** 籌備中連結:滑過/聚焦時隨機一句(氣泡與 title 同步,頂欄與頁內按鈕共用) */
function rollSoonLabel(link) {
const p = pickSoonPhrase();
link.style.setProperty("--portal-nav-soon-msg", JSON.stringify(p));
@@ -38,6 +40,7 @@
"minister.html",
"minister_ge.html",
"totoga2.html",
"totoga2-copy-timeline.html",
"variety.html",
]);
@@ -105,12 +108,14 @@
return new Set([...COMING_SOON_PAGES].map((p) => normalizePageKey(String(p))).filter(Boolean));
}
/** 將籌備中規則套用至容器內錨點(僅由 `applyComingSoonToNav` 呼叫頂欄 */
/** 將籌備中規則套用至容器內錨點(頂欄或整頁;`site-guide` 主文除外 */
function applyComingSoonToAnchorElements(container) {
if (!container) return;
const pageKeysSoon = getPageKeysSoon();
container.querySelectorAll("a[href]").forEach((link) => {
if (link.classList.contains("logo")) return;
if (link.getAttribute("data-coming-soon") === "true") return;
const href = link.getAttribute("href");
if (!href || href === "#") return;
@@ -125,6 +130,42 @@
});
}
/** 訪客頁:頁內連結與頂欄同一套 COMING_SOON;僅 site-guide 的 main.site-guide-main 跳過(頂欄 all-open 不影響此條) */
function applyComingSoonSiteWide() {
const siteGuideMain = document.querySelector("main.site-guide-main");
document.querySelectorAll("a[href]").forEach((link) => {
if (link.closest("nav.portal-nav")) return;
if (siteGuideMain && siteGuideMain.contains(link)) return;
if (link.classList.contains("logo")) return;
const href = link.getAttribute("href");
if (!href || href === "#") return;
if (/^https?:\/\//i.test(href)) return;
const pageKey = normalizePageKey(href);
if (!pageKey) return;
const pageKeysSoon = getPageKeysSoon();
if (!linkShouldBeComingSoon(href, pageKey, pageKeysSoon)) return;
markLinkComingSoon(link, href);
});
}
function blockNavigation(event) {
event.preventDefault();
event.stopPropagation();
}
function bindComingSoonBlockers() {
document.querySelectorAll('a[data-coming-soon="true"]').forEach((link) => {
if (link.dataset.portalNavSoonBound === "1") return;
link.dataset.portalNavSoonBound = "1";
link.addEventListener("click", blockNavigation);
link.addEventListener("auxclick", blockNavigation);
});
}
/** 將籌備中規則套用至單一導覽列(含頂層 li 樣式) */
function applyComingSoonToNav(nav) {
applyComingSoonToAnchorElements(nav);
@@ -229,15 +270,8 @@
}
});
const blockNavigation = (event) => {
event.preventDefault();
event.stopPropagation();
};
document.querySelectorAll('a[data-coming-soon="true"]').forEach((link) => {
link.addEventListener("click", blockNavigation);
link.addEventListener("auxclick", blockNavigation);
});
applyComingSoonSiteWide();
bindComingSoonBlockers();
const navs = Array.from(document.querySelectorAll(".portal-nav"));
if (!navs.length) return;