/* ============================================================
   Design tokens — 全站色彩、字體與字級
   ============================================================ */
:root {
    /* 本站只有淺色配色,沒有任何深色樣式。明確宣告之後,Chrome Android 的
       Auto dark theme 與 Samsung Internet 的深色模式就不會自作主張把
       黃底黑字反相 */
    color-scheme: light;

    --c-yellow: #FFF687;
    --c-black:  #000000;
    --c-white:  #FFFFFF;
    --c-surface-light: #F6F6F6;
    --c-accent-1: #D4C957;
    --c-accent-2: #8A801A;
    --c-red: #ff313e;
    --c-text-deep:  #1E1E1E;
    --c-text-gray:  #4E4E4E;
    --c-text-small: #212121;
    --c-text-title: #303030;

    /* Type rule: 中文 → Noto Sans TC；英數字 → Bricolage Grotesque.
       --font-base puts Bricolage first so Latin/digits use it and CJK
       glyphs fall through to Noto Sans TC automatically. */
    --font-tc: "Noto Sans TC", "PingFang TC", "Microsoft JhengHei", sans-serif;
    --font-en: "Bricolage Grotesque", "Noto Sans TC", sans-serif;
    --font-base: "Bricolage Grotesque", "Noto Sans TC", "PingFang TC", "Microsoft JhengHei", sans-serif;

    --page-max: 1280px;
    --nav-h: 72px;
    /* 全站狀態轉場(hover、開合等):0.3s 緩出 */
    --ease-out: cubic-bezier(0, 0, .2, 1);
    --t-hover: .3s var(--ease-out);
    /* 按鈕文字光學置中:中文字身在 Bricolage 的行框裡偏上約 0.07em,
       按鈕上下 padding 各 ±此值把文字壓回視覺正中(按鈕總高不變) */
    --btn-optical: 0.07em;
    /* 入場動畫:位移量與時間(量級:位移 10–16px、0.6–0.8s、緩出) */
    --reveal-shift: 20px;
    --reveal-dur: .7s;

    /* ------------------------------------------------------------
       字級 Type scale — 桌機(設計稿 1920)的完整字級表

       --type-scale 是全站倍率:整體要收斂或放大時「只改這一個值」,
       例如 0.92 代表所有字級縮小 8%。所有 px 都是設計稿的原始值,
       乘上倍率後由下面的規則引用,不要再在個別規則裡寫死字級。

       行高一律用無單位的比例(font-size 的倍數),字級變動時才會同步。
       手機/平板斷點有自己的字級設定,不受這個倍率影響;若也要一起收斂,
       在對應的 @media 內再宣告一次 --type-scale 即可。
       ------------------------------------------------------------ */
    --type-scale: 1;

    --fs-marquee:  calc( 83px * var(--type-scale)); /* 跑馬燈 */
    --fs-slogan:   calc( 64px * var(--type-scale)); /* 頁尾標語 */
    --fs-sec:      calc( 60px * var(--type-scale)); /* 區域最大標與 >> 符號 */
    --fs-num-lg:   calc( 32px * var(--type-scale)); /* 期程編號(英數) */
    --fs-tab:      calc( 28px * var(--type-scale)); /* 按鈕_大:最新消息分頁標籤 */
    --fs-title-sm: calc( 24px * var(--type-scale)); /* 期程日期、公告日期(英數) */
    --fs-tag:      calc( 24px * var(--type-scale)); /* 區域大標:黑底標籤、期程標題 */
    --fs-h3:       calc( 24px * var(--type-scale)); /* 區域小標:影片標題、講者主題 */
    --fs-btn-lg:   calc( 24px * var(--type-scale)); /* 大按鈕(築夢報名) */
    --fs-qa:       calc( 20px * var(--type-scale)); /* 問題、公告標題 */
    --fs-body:     calc( 19px * var(--type-scale)); /* 內文(由 20 收為 19) */
    --fs-note-lg:  calc( 20px * var(--type-scale)); /* 小標、英數編號 */
    --fs-note:     calc( 16px * var(--type-scale));
    --fs-btn:      calc( 16px * var(--type-scale));
}

/* ============================================================
   Reset & base
   ============================================================ */
*, *::before, *::after { box-sizing: border-box; }
/* overflow-x on <html> too: on mobile, oversized bleed elements would otherwise
   expand the layout viewport and inflate every vw unit (clip keeps sticky intact) */
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; overflow-x: clip; }
body {
    margin: 0;
    font-family: var(--font-base);
    color: var(--c-text-deep);
    background: var(--c-yellow);
    line-height: 1.6;
    letter-spacing: 0.03em;
    -webkit-font-smoothing: antialiased;
    overflow-x: clip;
}
h1, h2, h3, h4, p, ul { margin: 0; padding: 0; }
ul { list-style: none; }
a { color: inherit; text-decoration: none; }
/* 停用狀態的連結:外觀維持設計稿,但不導覽(href="#" 會跳回頁首)
   也不表現出可點擊的樣子 */
a[aria-disabled="true"] { cursor: default; }
.pill[aria-disabled="true"]:hover {
    background: var(--c-black);
    color: var(--c-yellow);
    font-weight: 500;
}
.blank { display: inline-block; width: 1.6em; border-bottom: .12em solid currentColor; vertical-align: -.15em; margin-right: .15em; }
.nowrap { white-space: nowrap; }
button { font: inherit; cursor: pointer; border: 0; background: none; color: inherit; }
img { max-width: 100%; display: block; }

/* ============================================================
   入場動畫 — 元素第一次進入視窗時由下往上淡入
   單位由 assets/js/reveal.js 標記,延遲寫在 --reveal-delay。
   用 animation 而不是 transition:元素自己的 transition(hover 換色等)
   才不會被覆蓋掉
   ============================================================ */
/* 只有在 reveal.js 確定會接手時才先藏起來:萬一 JS 被擋掉或不支援,
   內容維持正常顯示,不會整頁空白 */
.reveal-ready [data-reveal] { opacity: 0; }
.reveal-ready [data-reveal].is-revealed {
    animation: reveal-up var(--reveal-dur) var(--ease-out) var(--reveal-delay, 0s) both;
}
@keyframes reveal-up {
    from { opacity: 0; transform: translateY(var(--reveal-shift)); }
    to   { opacity: 1; transform: none; }
}
/* 入場變體(由 reveal.js 寫進 data-reveal 的值決定)
   pop  = 燈泡「插出來」:放大並回正
   zoom = 整區縮放入場(常見問題)
   wipe = 由左往右刷出,配 steps() 做出打字的斷續感(獎金/日期是圖,沒辦法逐字) */
.reveal-ready [data-reveal="pop"].is-revealed {
    animation-name: reveal-pop;
    animation-duration: .85s;
}
.reveal-ready [data-reveal="zoom"].is-revealed {
    animation-name: reveal-zoom;
    animation-duration: .9s;
}
.reveal-ready [data-reveal="wipe"].is-revealed {
    animation-name: reveal-wipe;
    animation-duration: .9s;
    animation-timing-function: steps(16, end);
}
@keyframes reveal-pop {
    from { opacity: 0; transform: scale(.88) rotate(-5deg); }
    to   { opacity: 1; transform: none; }
}
/* 手機/平板的圖騰素材左側是切齊頁面邊緣導出的(見 whatif-totem-phone.svg),
   平常那道切口正好落在畫面外所以看不出來。入場動畫若有旋轉、或以中心縮放,
   都會把切口拉進畫面並轉動,看起來就像「被裁過的燈在動」。
   所以窄版改用不旋轉、以左緣為原點的縮放,切口始終貼在畫面邊界上 */
@keyframes reveal-pop-edge {
    from { opacity: 0; transform: scale(.9); }
    to   { opacity: 1; transform: none; }
}
@keyframes reveal-zoom {
    from { opacity: 0; transform: scale(.93); }
    to   { opacity: 1; transform: none; }
}
/* deco = 計畫簡介的兩張裝飾插圖:縮放彈出,接著晃約 2 秒。
   兩段寫成一個 animation 清單,第二段用延遲接在第一段之後。
   不能用 shorthand:上面 [data-reveal].is-revealed 那條也是 shorthand,
   這裡必須逐個 longhand 覆蓋掉它的 name/duration/delay/次數/fill。
   晃動 4 輪 x .5s = 2s;transform 同時被兩段動畫寫,清單在後面的(晃動)優先,
   彈出結束後靠它的 fill: both 撐住 opacity: 1,所以第二段不需要 fill */
.reveal-ready [data-reveal="deco"].is-revealed {
    animation-name: reveal-pop, deco-wobble;
    animation-duration: .6s, .5s;
    animation-delay: var(--reveal-delay, 0s), calc(var(--reveal-delay, 0s) + .6s);
    animation-iteration-count: 1, 4;
    animation-timing-function: var(--ease-out), ease-in-out;
    animation-fill-mode: both, none;
}
@keyframes deco-wobble {
    0%   { transform: rotate(0deg); }
    25%  { transform: rotate(2.2deg); }
    75%  { transform: rotate(-2.2deg); }
    100% { transform: rotate(0deg); }
}
@keyframes reveal-wipe {
    from { opacity: 1; clip-path: inset(0 100% 0 0); }
    to   { opacity: 1; clip-path: inset(0 -1% 0 0); }
}

/* 打字呈現:JS 把文字拆成一個個 .type-char,再依序顯示。
   用 opacity 而不是逐字插入,版面不會在打字過程中重排。
   區塊本身不要再套預設的上移淡入:那個動畫 0.7s 就結束,但整段要打到 1.356s;
   父層動畫一結束,reveal.js 會移除 data-reveal,下面「還沒輪到的字先隱藏」
   那條規則就跟著失效,剩下的字會一次全部跳出來(第二行特別明顯) */
.reveal-ready [data-reveal="type"] { opacity: 1; }
.reveal-ready [data-reveal="type"].is-revealed { animation: none; }
.reveal-ready [data-reveal="type"] .type-char { opacity: 0; }
.reveal-ready [data-reveal="type"].is-revealed .type-char {
    animation: type-in .06s linear var(--type-delay, 0s) both;
}
@keyframes type-in { from { opacity: 0; } to { opacity: 1; } }

/* 主視覺燈泡:滑鼠移到燈泡範圍時晃一下(由 motion.js 判斷位置後加 class,
   圖本身維持 pointer-events: none,才不會擋住下方計畫簡介的內容) */
@keyframes totem-wobble {
    0%   { transform: rotate(0deg); }
    22%  { transform: rotate(1.8deg); }
    48%  { transform: rotate(-1.3deg); }
    74%  { transform: rotate(.7deg); }
    100% { transform: rotate(0deg); }
}
/* 晃動的軸心要在螺帽,不是圖形上緣。
   圖騰是用 WHAT IF 的字排成燈泡的玻璃球,左下角那疊弧線是螺帽(螺紋),
   剛好是素材裡獨立的一條路徑。下面的百分比是那條路徑的實心像素重心換算成
   各自元素框的比例——三個斷點是三張不同 viewBox 的素材,數值因此各不相同:
     桌機 whatif-totem.svg        viewBox 0 0 1455 1419  → 39.5% 67.2%
     平板 whatif-totem-tablet.svg viewBox 357 70 920 1130 → 23.7% 78.2%
     手機 whatif-totem-phone.svg  viewBox 0 0 384 525     → -5.5% 71.1%
   手機那張的左側是切齊頁面邊緣導出的,螺帽大半被裁掉,重心落在元素框外(負值)。
   實際上手機沒有 hover 也不會晃(見 motion.js),留著只為三者一致 */
.hero-totem   { --totem-pivot: 39.5% 67.2%; }
.hero-totem-t { --totem-pivot: 23.7% 78.2%; }
.hero-totem-m { --totem-pivot: -5.5% 71.1%; }
/* 三個都要各自寫一次:.hero-totem-m / -t 在後面的 @media 裡另外設了
   transform-origin(入場動畫用),單一 class 的選擇器會被那條後來的規則蓋掉 */
.hero-totem-wobble,
.hero-totem-t.hero-totem-wobble,
.hero-totem-m.hero-totem-wobble {
    animation: totem-wobble 1.1s var(--ease-out);
    transform-origin: var(--totem-pivot, 39.5% 67.2%);
}

/* 最新消息:切換分頁時插畫向上彈入(轉角要寫進 keyframes,否則會被蓋掉) */
@keyframes doodle-pop {
    0%   { opacity: 0; transform: rotate(-2deg) translateY(16px) scale(.94); }
    62%  { opacity: 1; transform: rotate(-2deg) translateY(-5px) scale(1.02); }
    100% { opacity: 1; transform: rotate(-2deg); }
}
.news-doodle-pop { animation: doodle-pop .55s var(--ease-out); }

/* ============================================================
   開場 loading — 幕布 + logo 呼吸閃爍(掛載與收場見 assets/js/loader.js)
   滿版幕布、200px logo、1s 週期 opacity 0.4↔1,開幕以 0.3s 淡出。
   z-index 要壓過導覽列(100)與 cookie 卡(90)。底色與導覽列同為純白
   ============================================================ */
.page-loader {
    position: fixed;
    inset: 0;
    z-index: 999;
    background: var(--c-white);
    display: flex;
    align-items: center;
    justify-content: center;
    transition: opacity .3s ease;
}
.page-loader-logo {
    width: 200px;
    /* logo-udreamer.svg 是 preserveAspectRatio="none" + 百分比尺寸的導出,
       沒有內建比例:高度不指定時瀏覽器會退回預設 150px,把 logo 直向拉伸。
       比例要在這裡自己給(viewBox 117.141x40 → 200 寬時高 68) */
    aspect-ratio: 117.141 / 40;
    animation: loader-flash 1s ease infinite;
}
.page-loader-out { opacity: 0; pointer-events: none; }
@keyframes loader-flash {
    0%   { opacity: .4; }
    50%  { opacity: 1; }
    100% { opacity: .4; }
}
@media (prefers-reduced-motion: reduce) {
    .page-loader-logo { animation: none; }
}

/* ============================================================
   Utilities
   ============================================================ */
.pill-sm {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--c-text-small);
    color: var(--c-yellow);
    border-radius: 50px;
    padding: calc(16px + var(--btn-optical)) 43px calc(16px - var(--btn-optical)) 40px;
    font-size: var(--fs-btn);
    font-weight: 500;
    letter-spacing: 0.1em;
    line-height: 1;
    white-space: nowrap;
    transition: background var(--t-hover), color var(--t-hover), box-shadow var(--t-hover);
}
.pill-sm:hover {
    background: var(--c-yellow);
    color: var(--c-black);
    box-shadow: inset 0 0 0 2px var(--c-black);
}
.pill-sm-white { color: var(--c-white); }
.pill-sm-disabled { opacity: .3; pointer-events: none; }
.sec-title {
    display: flex;
    align-items: center;
    align-self: center;
    justify-content: center;
    gap: 10px;
    font-weight: 900;
    font-size: var(--fs-sec);
    letter-spacing: 0.1em;
    line-height: 1.133; /* 設計稿 68/60 */
    color: var(--c-yellow);
    white-space: nowrap;
}
.sec-title-dark { color: var(--c-black); }
.sec-chev {
    font-size: var(--fs-sec);
    font-weight: 900;
    letter-spacing: -0.03em;
    line-height: 1.25; /* 設計稿 75/60 */
    padding-right: 12px; /* design: chevron frame has pr-12 on top of the 10px title gap */
}

/* ============================================================
   Hero
   ============================================================ */
.hero {
    position: relative;
    background: var(--c-yellow);
    z-index: 2; /* totem art overflows into the next section */
    aspect-ratio: 16 / 9;
    /* 超過設計稿寬度的螢幕上,整組主視覺維持 1920x1080
       的設計尺寸並置中,兩側由 body 的同色黃底補滿(所以看不出邊界)。
       裡面的圖騰、文案、獎金日期都以這個 1920 的框為基準,比例永遠與設計稿一致。
       margin: 0 auto 不可省:先前只有寬度上限而沒有置中,2545 寬的視窗上整個
       主視覺會被壓在左邊、右邊空 625px,而其他區塊都是滿版 */
    max-width: 1920px;
    margin: 0 auto;
    min-height: 560px;
}
.hero-totem {
    position: absolute;
    left: 16.87%;  /* 設計稿 323.84 / 1920 */
    top: 6.53%;    /* 設計稿  70.55 / 1080 */
    width: 74.38%; /* 設計稿 1428.04 / 1920 */
    z-index: 3;
    pointer-events: none;
}
.hero-totem-m, .hero-totem-t { display: none; }
.hero-copy {
    position: absolute;
    left: 300px;
    top: 21.67%; /* 設計稿 234 / 1080 */
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    /* 設計稿 Title 框高 92(圖 84)、按鈕上緣 172 → 圖下緣到按鈕 88 */
    gap: 88px;
    z-index: 2;
}
.hero-title img { width: 380px; display: block; }
.hero-foot {
    position: absolute;
    left: 290px;
    bottom: 14.04%; /* 設計稿 151.67 / 1080 */
    display: flex;
    flex-direction: column;
    gap: 12px;
    z-index: 2;
}
.hero-foot img { display: block; }
.hero-prize { width: 359px; }
.hero-date-open { width: 421px; }
.hero-date-soon { width: 338px; }
/* 報名狀態開關:這兩行是「隱藏哪一版」,永遠一行生效、一行註解,換狀態就把註解搬到另一行 */
/* .hero-foot .hero-date-open { display: none; } */
.hero-foot .hero-date-soon { display: none; }

/* ============================================================
   Intro (計畫簡介) — yellow, black tags + copy + video card
   ============================================================ */
.intro {
    background: var(--c-yellow);
    padding: 220px 80px 210px; /* 上內距 160 → 220:大標與 hero 燈泡拉開距離 */
}
.intro-inner {
    max-width: 900px; /* 內容欄寬 850 → 900 */
    margin: 0 auto;
    padding: 0;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 40px; /* 大標題 → 第一個內文區塊:整頁統一 40 */
}
.intro-flow {
    display: flex;
    flex-direction: column;
    gap: 60px;
    width: 100%;
}
.intro-block {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 20px;
    width: 100%;
    position: relative; /* 主題說明區塊左右兩側的裝飾圖以它為基準 */
}
/* 宣傳影片區塊:把下面這一行的註解拿掉就會隱藏。 */
.intro-block-video { display: none; }
/* 計畫緣起下方的團體照。
   設計稿的文字組與照片之間是 36,而區塊本身的 gap 是 20,差額補在這裡 */
.intro-photo {
    width: 100%;
    aspect-ratio: 900 / 438;
    object-fit: cover;
    border-radius: 12px;
    margin-top: 16px;
    display: block;
}
/* 主題說明左右兩側的 WHAT IF 裝飾圖。
   座標換算自設計稿(以主題說明區塊的左上角為原點):
     ? 對話框  x -356  y 180.6  w 312.2
     ! 爆炸框  x 693.3 y 340    w 444.8
   兩張都會超出 900 的內容欄往外破版,旋轉角度已烤進素材裡,不需要再轉 */
.intro-deco {
    position: absolute;
    max-width: none;
    pointer-events: none;
    z-index: 1;
}
.intro-deco-q { left: -356px; top: 181px; width: 312px; }
.intro-deco-x { left: 693px; top: 340px; width: 445px; }
.intro-tag {
    background: var(--c-black);
    color: var(--c-white);
    font-size: var(--fs-tag);
    font-weight: 700;
    letter-spacing: 0.1em;
    line-height: 1.75; /* 設計稿 42/24 */
    padding: 2px 12px 2px 8px;
}
.intro-block > p {
    font-size: var(--fs-body);
    font-weight: 500;
    line-height: 1.684; /* 設計稿 32/19 */
    letter-spacing: 0.08em;
    color: var(--c-black);
    width: 100%;
}
.video-card {
    background: var(--c-white);
    border-radius: 20px;
    padding: 48px 40px 40px;
    display: flex;
    flex-direction: column;
    width: 100%;
}
.video-stage { display: grid; }
.video-slide {
    grid-area: 1 / 1;
    display: flex;
    flex-direction: column;
    gap: 24px;
    align-items: flex-start;
    opacity: 0;
    pointer-events: none;
    visibility: hidden;
    transition: opacity var(--t-hover), visibility var(--t-hover);
}
.video-slide-active { opacity: 1; pointer-events: auto; visibility: visible; }
.video-title {
    font-size: var(--fs-h3);
    font-weight: 700;
    letter-spacing: 0.1em;
    line-height: 1.6667; /* 設計稿 40/24 */
    color: var(--c-black);
    padding-left: 8px;
}
.video-frame {
    width: 100%;
    aspect-ratio: 1028 / 578;
    background: #000;
    border-radius: 12px;
    overflow: hidden;
}
.video-frame img { width: 100%; height: 100%; object-fit: cover; }
.video-frame iframe { width: 100%; height: 100%; border: 0; display: block; }
/* file:// fallback: click-through facade injected in place of the embed (see index.html) */
.video-yt-link { position: relative; display: block; width: 100%; height: 100%; }
.video-yt-link img { width: 100%; height: 100%; object-fit: cover; display: block; }
.video-yt-play {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 110px;
    height: 76px;
    background: var(--c-red, #FF0033);
    border-radius: 18px;
    transition: transform var(--t-hover);
}
.video-yt-play::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-42%, -50%);
    border-style: solid;
    border-width: 16px 0 16px 28px;
    border-color: transparent transparent transparent #fff;
}
.video-yt-link:hover .video-yt-play { transform: translate(-50%, -50%) scale(1.08); }
.video-nav {
    display: flex;
    justify-content: flex-end;
    gap: 24px;
    width: 100%;
    margin-top: 20px;
}
.vid-btn {
    width: 60px;
    height: 60px;
    border-radius: 12px;
    background: var(--c-black);
    color: var(--c-white);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    transition: opacity var(--t-hover), background var(--t-hover), color var(--t-hover);
}
.vid-btn:hover:not(:disabled) { background: var(--c-yellow); color: var(--c-black); }
.vid-btn:disabled { opacity: 0.2; cursor: default; }
/* 內嵌 SVG(見 index.html):path 的 fill 是 currentColor,所以顏色仍由
   .vid-btn 的 color 決定,hover 換色的寫法不用動。
   不要改回 mask + 外部檔案:file:// 開啟時遮罩載不進來,箭頭會整個消失 */
.vid-btn .chev {
    width: 22px;
    height: 14px;
    display: block;
    transform: rotate(-90deg);
}
.vid-btn-prev .chev { transform: rotate(90deg); }

/* ============================================================
   WHAT IF strip (dark band between sections)
   ============================================================ */
.whatif-strip {
    background: var(--c-black);
    padding: 17px 0;
    overflow: hidden;
}
.whatif-strip-track {
    display: flex;
    width: max-content;
    /* 秒數與份數等比:循環單位由 1 份變 4 份,秒數同步 10s→40s,速度不變 */
    animation: strip-scroll 40s linear infinite;
}
.whatif-strip-track span {
    font-family: var(--font-en);
    font-weight: 800;
    /* design is 69px Hiragino W9; Bricolage renders smaller, upscaled to match */
    font-size: var(--fs-marquee);
    line-height: 1;
    letter-spacing: 0.1em;
    color: var(--c-white);
    white-space: nowrap;
    padding-right: 20px; /* track gap baked in so -50% loops seamlessly */
}
@keyframes strip-scroll {
    from { transform: translateX(0); }
    to { transform: translateX(-50%); }
}
@media (prefers-reduced-motion: reduce) {
    .whatif-strip-track { animation: none; }
    .anim-f1, .anim-f2 { animation: none; }
}

/* ============================================================
   News (最新消息)
   ============================================================ */
.news {
    background: var(--c-yellow);
    padding: 140px 80px 160px;
    position: relative;
}
.news-inner {
    max-width: 1300px;
    margin: 0 auto;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 60px; /* 設計稿:標題區塊 pb-60 */
    position: relative;
}
.news-layout {
    display: flex;
    gap: 24px;
    align-items: flex-start;
    width: 100%;
}
.news-tabs { display: flex; flex-direction: column; gap: 20px; flex-shrink: 0; min-height: 477px; }
.news-tab {
    width: 265px;
    height: 90px;
    border-radius: 12px;
    background: var(--c-white);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: calc(24px + var(--btn-optical)) 36px calc(28px - var(--btn-optical)) 40px;
    font-size: var(--fs-tab);
    font-weight: 500;
    letter-spacing: 0.3em;
    color: var(--c-black);
    transition: background var(--t-hover), color var(--t-hover), box-shadow var(--t-hover);
}
.news-tab:hover:not(.news-tab-active) {
    background: var(--c-yellow);
    font-weight: 700;
    box-shadow: inset 0 0 0 3px var(--c-black);
}
.news-tab-active {
    background: var(--c-black);
    color: var(--c-yellow);
}
.news-panel {
    flex: 1;
    background: var(--c-white);
    border-radius: 12px;
    padding: 28px 60px;
    /* 高度貼合內容:公告少時白框下方不留大片空白(設計師回饋);
       公告多或切到社群動態時,最高仍是原本的 700 再開始捲動 */
    min-height: 200px; /* 不低於左側兩顆分頁鈕的總高(90*2+gap20) */
    max-height: 700px;
    overflow-y: auto;
    scrollbar-width: thin;
    scrollbar-color: var(--c-accent-1) transparent;
    transition: opacity .15s var(--ease-out);
}
/* 可以拖曳,游標要看得出來。滑鼠拖曳由 main.js 的
   dragScroll 處理,拖曳中才鎖住文字選取(平常仍然可以複製公告內容) */
.news-panel { cursor: grab; }
.news-panel-dragging { cursor: grabbing; user-select: none; }
.news-panel::-webkit-scrollbar { width: 8px; }
.news-panel::-webkit-scrollbar-thumb { background: var(--c-accent-1); border-radius: 17px; }
.news-panel::-webkit-scrollbar-track { background: transparent; margin: 28px 0; }
.news-list { display: flex; flex-direction: column; }
.news-item { padding: 12px 0; } /* 設計稿:清單 gap 12,分隔線各邊各 12 */
.news-item + .news-item { border-top: 1px solid var(--c-accent-1); }
.news-row {
    display: flex;
    gap: 20px;
    /* 日期膠囊、標題、＋按鈕三者垂直置中對齊 */
    align-items: center;
    cursor: pointer;
}
.news-date {
    display: inline-flex;
    align-items: center;
    background: var(--c-black);
    color: var(--c-white);
    border-radius: 8px;
    padding: 6px 0 6px 12px;
    font-weight: 700;
    font-size: calc(21px * var(--type-scale)); /* 設計稿:日期膠囊的中文為 21px */
    white-space: nowrap;
    flex-shrink: 0;
}
.news-date-en {
    font-family: var(--font-en);
    font-weight: 700;
    font-size: var(--fs-title-sm);
    letter-spacing: -0.05em;
    margin-right: 2px;
}
.news-item-title {
    flex: 1;
    font-size: var(--fs-qa);
    font-weight: 700;
    letter-spacing: 0.08em;
    line-height: 1.7; /* 設計稿 34/20 */
    color: var(--c-text-small);
}
.news-toggle {
    width: 60px;
    height: 60px;
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    /* ＋一律黑色 100%,展開後的 − 是主視覺黃 100% */
    opacity: 1;
    color: var(--c-black);
    transition: opacity var(--t-hover), color var(--t-hover), transform var(--t-hover);
}
/* +/− built from two bars so it can rotate open like the mobile burger */
.news-plus {
    width: 28px;
    height: 28px;
    display: block;
    position: relative;
    transition: transform var(--t-hover);
}
.news-plus::before,
.news-plus::after {
    content: "";
    position: absolute;
    left: 0;
    top: 50%;
    width: 100%;
    height: 3px;
    margin-top: -1.5px;
    background: currentColor;
    transition: transform var(--t-hover);
}
.news-plus::after { transform: rotate(90deg); } /* the vertical stroke of the + */
.news-toggle:active { color: var(--c-accent-2); }
.news-item-open .news-toggle { color: var(--c-yellow); }
.news-item-open .news-plus { transform: rotate(180deg); }
.news-item-open .news-plus::after { transform: rotate(0deg); }
.news-body {
    display: grid;
    grid-template-rows: 0fr;
    transition: grid-template-rows var(--t-hover);
}
.news-item-open .news-body { grid-template-rows: 1fr; }
.news-body .acc-inner {
    overflow: hidden;
    padding: 0 100px 0 0;
}
/* 內文與下方分隔線的距離 36 → 10,與常見問題一致 */
.news-item-open .news-body .acc-inner { padding: 24px 100px 10px 0; }
.news-body .acc-inner { transition: padding var(--t-hover); }
.news-body p {
    font-size: var(--fs-body);
    font-weight: 500;
    line-height: 1.684; /* 設計稿 32/19 */
    letter-spacing: 0.08em;
    color: var(--c-text-small);
    margin-bottom: 16px;
}
.news-body p:last-child { margin-bottom: 0; }
.news-list[hidden] { display: none; }
.news-fb-item { padding: 24px 0; }
.news-fb-item + .news-fb-item { border-top: 1px solid var(--c-accent-1); }
.news-fb-scale { overflow: hidden; }
.news-fb-scale iframe {
    display: block;
    border: 0;
    background: var(--c-white);
    max-width: none;
    transform-origin: top left;
}
.news-row:hover .news-toggle { opacity: 1; }
.news-doodle {
    position: absolute;
    /* 設計稿:插圖在「分頁+面板」區塊內 left 48、靠近區塊底部。
       改成錨定 .news-inner 底部:面板滿高 700 時等同舊值 top 578,
       面板隨內容縮短時插圖跟著上移,不會掉出黃色區塊外 */
    left: 50px;
    bottom: 38px;
    width: 248px;
    height: 219px;
    pointer-events: none;
    transform: rotate(-2deg);
}
.news-doodle img { position: absolute; max-width: none; }
.news-doodle-announce { display: contents; }
.news-doodle-left { left: 0; top: 0; width: 103px; height: 218px; }
.news-doodle-right { left: 120px; top: 5px; width: 128px; height: 214px; }
.news-doodle-fb { inset: 0; width: 100%; height: 100%; display: none; }
.news-mode-fb .news-doodle-announce { display: none; }
.news-mode-fb .news-doodle-fb { display: block; }

/* ============================================================
   Timeline (計畫期程)
   ============================================================ */
.timeline {
    background: var(--c-yellow);
}
.timeline-frame {
    background: var(--c-black);
    border-radius: 24px 24px 0 0;
    padding: 180px 0 180px;
    position: relative;
    color: var(--c-white);
    overflow: hidden;
}
.timeline-head {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 40px;
    margin-bottom: 80px;
}
/* 期程的裝飾線條不顯示,卡片之間的距離由 .timeline-scroller 的 gap 決定 */
.timeline-rule { display: none; }
.timeline-scroller {
    display: flex;
    gap: 32px;
    width: min(1760px, 100%);
    margin: 0 auto 48px;
    padding: 0 120px 0 280px;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    scroll-padding-left: 280px;
    scrollbar-width: none;
    /* 橫向捲到頭再往右滑時,不要把捲動接力給瀏覽器變成「返回上一頁」
       (手機的邊緣返回手勢是系統層級,這條擋不掉,但能擋掉元素內的溢滾接力;
        桌機的觸控板兩指橫滑返回同樣適用) */
    overscroll-behavior-x: contain;
}
.timeline-scroller::-webkit-scrollbar { display: none; }
.tl-card {
    flex: 0 0 450px;
    min-height: 340px; /* 卡片高度對齊設計稿的一整列 */
    background: var(--c-white);
    color: var(--c-black);
    border-radius: 16px;
    padding: 32px 60px 38px;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    /* 編號靠上、文字靠下分開,電腦版比照手機的觀感。
       卡片高 340,gap 只是內容擠滿時的最小間距 */
    justify-content: space-between;
    gap: 60px;
    scroll-snap-align: start;
    transition: background var(--t-hover);
}
.tl-card-active { background: var(--c-yellow); }
.tl-num {
    background: var(--c-text-small);
    color: var(--c-white);
    padding: 4px 48px;
    border-radius: 50px;
    font-family: var(--font-en);
    font-weight: 500;
    font-size: var(--fs-num-lg);
    letter-spacing: -0.03em;
    line-height: 1.1875; /* 設計稿 38/32 */
}
.tl-card-active .tl-num { color: var(--c-yellow); }
/* 標題與日期之間不留間距(兩者的行高本身就有足夠的視覺留白) */
.tl-body { display: flex; flex-direction: column; gap: 0; }
.tl-card h3 {
    font-size: var(--fs-tag);
    font-weight: 700;
    letter-spacing: 0.1em;
    line-height: 1.75; /* 設計稿 42/24 */
}
.tl-date {
    font-size: var(--fs-title-sm);
    font-weight: 400;
    letter-spacing: 0.04em;
    line-height: 1.5; /* 設計稿 36/24 */
    color: var(--c-text-small);
}
/* 箭頭要對齊「卡片被裁斷的位置」。
   裁斷位置是由捲動區決定的 —— 它是 min(1760px, 100%) 置中,右緣會隨視窗寬度
   移動,所以不能用固定邊距定位:兩套互不相干的定位只在某個特定寬度才會對上。
   直接讓 nav 沿用捲動區同一組寬度與置中方式,右緣就永遠落在裁斷處 */
.timeline-nav {
    display: flex;
    gap: 40px;
    justify-content: flex-end;
    width: min(1760px, 100%);
    margin: 0 auto;
    padding: 0;
}
.tl-btn {
    width: 60px;
    height: 60px;
    border-radius: 12px;
    background: var(--c-surface-light);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    transition: opacity var(--t-hover), background var(--t-hover);
}
.tl-btn:hover:not(:disabled) { background: var(--c-yellow); }
.tl-btn:disabled { opacity: 0.2; cursor: default; }
.tl-btn img { width: 22px; height: 14px; display: block; transform: rotate(-90deg); }
.tl-btn-prev img { transform: rotate(90deg); }

/* ============================================================
   Photo strip — 圓角大圖捲動疊圖
   ============================================================ */
.photo-strip {
    background: var(--c-black);
    padding: 36px;
    margin-top: -1px;
}
/* Scroll-stacking: photo 1 pins to the viewport top, photo 2
   slides up over it; the white WHAT IF marks pin above both. */
.photo-stack {
    /* --photo-hold:照片 2 蓋滿照片 1 之後,釘在原地不動的捲動距離。
       尾端補一塊等高的空白給 sticky 當餘裕;這段高度會在停留期間被捲完,
       所以停留結束時下一個區塊仍與照片保持 36px 的黑邊,不會多出空白 */
    --photo-hold: 200px;
    /* 無論螢幕寬度一律滿版,不設寬度上限(設了上限,超寬螢幕會退回左右黑邊)。
       代價是超寬螢幕上下會裁得比較多——由下面 img 的 max-height + object-fit: cover
       處理,寬度永遠是滿版,釘住時照片框也仍然看得完整 */
    position: relative;
    margin: 0 auto;
    display: flex;
    flex-direction: column;
}
.photo-stack-hold { height: var(--photo-hold); pointer-events: none; }
.photo-strip-item { position: relative; width: 100%; }
/* 釘住時空出與左右同寬的黑邊,照片不會貼齊視窗上緣 */
.photo-strip-item-first {
    position: sticky;
    top: 36px;
    z-index: 1;
}
/* 兩張照片之間的黑帶只存在於版面上(margin),照片 2 疊上照片 1 時直接覆蓋,
   不會帶著一條黑邊一起滑上來;蓋滿後同樣釘在 36px,上方的黑邊維持一段距離 */
.photo-strip-item-second {
    position: sticky;
    top: 36px;
    z-index: 2;
    margin-top: 36px;
}
/* 第三張(疊在最上層,規則同第二張) */
.photo-strip-item-third {
    position: sticky;
    top: 36px;
    z-index: 3;
    margin-top: 36px;
}
/* 兩張同高度:設計稿是 1062 與 1023,高度不同時照片 2 蓋不滿照片 1,
   捲動到底會從下緣露出一條;統一為 1062 之後兩張完全重合 */
.photo-strip-item > img:first-child {
    width: 100%;
    aspect-ratio: 1848 / 1062;
    /* 滿版寬度優先,但釘住時整個照片框一定要看得完:
       高度上限 = 視窗高度扣掉上下各 36 的黑邊。超過上限時比例讓步,
       由 object-fit: cover 裁掉上下,寬度維持滿版、不會退回左右黑邊。
       用 --vh-layout 而不是 100vh:body 有 zoom 時 vh 與版面座標對不起來
       (由 fitDesktop 寫入,見 assets/js/main.js) */
    max-height: calc(var(--vh-layout, 100vh) - 72px);
    object-fit: cover;
    border-radius: 8px; /* 圖片圓角 8px(各斷點一致) */
    display: block;
}
/* 被上面那張蓋住的照片要漸暗,最深 50%。深淺由 --cover(0~1,覆蓋比例)控制,
   數值由 main.js 依捲動位置寫入;最上面那張不會被蓋,所以不需要遮罩。
   圓角要跟著照片,否則四個角會露出直角的暗色 */
.photo-strip-item-first::after,
.photo-strip-item-second::after {
    content: "";
    position: absolute;
    inset: 0;
    background: #000;
    opacity: calc(var(--cover, 0) * .5);
    border-radius: 8px;
    z-index: 1;
    pointer-events: none;
}
.photo-marks-pin {
    position: absolute;
    inset: 0;
    z-index: 4; /* 要壓在三張照片(z 1~3)之上 */
    pointer-events: none;
}
/* 桌機改用拆開的左右兩塊:合併版受高度上限壓縮後會整組縮小並往中間靠,
   貼不到照片的四角。合併版那張只給窄版用,桌機藏起來 */
.photo-strip-marks { display: none; }
/* 疊字的定位框:尺寸規則與照片完全相同(滿版寬、同比例、同高度上限),
   釘住位置也同為 36px,左右兩塊以它的四角為基準,任何視窗都貼齊照片角落 */
.photo-marks-split {
    position: sticky;
    top: 36px;
    width: 100%;
    aspect-ratio: 1848 / 1062;
    max-height: calc(var(--vh-layout, 100vh) - 72px);
    overflow: hidden; /* 極端的超寬螢幕上高度被壓扁時,寧可裁掉一點也不變形 */
}
/* 左塊約 27% 寬貼左下,右塊約 34% 寬貼右上 */
.photo-mark-left  { position: absolute; left: 1.5%; bottom: 3.5%; width: 27%; }
.photo-mark-right { position: absolute; right: 1.5%; top: 3.5%; width: 34%; }

/* ============================================================
   Info sessions (校園說明會) — dark
   ============================================================ */
.info-sessions {
    /* 與上一個區塊(照片黑底)的交界會出現細線:交界落在非整數像素時,
       兩個盒子各自取整,中間會空出一列誰都沒畫到,露出頁面的黃色底色。
       解法是兩層:(1) 負的上 margin 讓兩個盒子重疊 2px,不可能有空隙;
       (2) 本區塊最上面 2px 也是黑的,重疊處才是黑對黑 */
    margin-top: -2px;
    background: linear-gradient(to bottom, var(--c-black) 2px, var(--c-yellow) 2px);
    /* 設計稿:黑卡下方不再留黃色空隙,與工作坊的距離改由工作坊的上內距決定 */
    padding-bottom: 0;
    position: relative;
    overflow: hidden;
    /* overflow:hidden fails to clip the rotated art when body zoom != 1 (Chromium);
       clip-path takes a different path and always clips */
    clip-path: inset(0);
}
.info-frame {
    background: var(--c-black);
    border-radius: 0 0 24px 24px;
    /* 下內距 = 黑卡在內容之後往下延伸的長度,同時決定被裁掉的 WHAT IF 波浪
       露出多少(波浪以 frame 中線為基準定位) */
    padding: 160px 40px 200px;
    position: relative;
    color: var(--c-white);
    /* WHAT IF 波浪嚴格裁在黑卡之內:刻意不讓弧線尾端溢出到下方的黃色間隙 */
    overflow: hidden;
    clip-path: inset(0);
}
.info-whatif {
    position: absolute;
    left: calc(50% + 23px);
    top: calc(50% + 519px); /* 設計稿:以黑卡中線為基準往下 519.49 */
    width: 1918px;
    max-width: none;
    transform: translate(-50%, -50%) rotate(-41.04deg);
    pointer-events: none;
}
.info-inner {
    max-width: 1100px;
    margin: 0 auto;
    display: flex;
    flex-direction: column;
    gap: 40px;
    position: relative;
    z-index: 2;
}
/* 交流會大標改與其他區塊一致:置中(原本靠右 align-self: flex-end) */
.session-list { display: flex; flex-direction: column; gap: 32px; }
.session-card {
    background: var(--c-white);
    color: var(--c-black);
    border-radius: 12px;
    padding: 36px 52px 36px 36px;
}
.session-row {
    display: flex;
    gap: 60px;
    align-items: stretch;
    min-height: 280px;
}
.session-thumb {
    width: 450px;
    flex-shrink: 0;
    border-radius: 8px;
    overflow: hidden;
    background: #1c1c1c;
    position: relative;
}
/* absolute fill so the intrinsic image ratio can't stretch the 280px row */
.session-thumb img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.session-body {
    flex: 1;
    display: flex;
    flex-direction: column;
    gap: 36px; /* 白框內內文與按鈕的距離固定 36,交流會/工作坊一致 */
    align-items: flex-start;
    padding-top: 20px;
}
.session-text { display: flex; flex-direction: column; gap: 20px; align-items: flex-start; }
.session-tag {
    background: var(--c-black);
    color: var(--c-white);
    font-size: var(--fs-tag);
    font-weight: 700;
    letter-spacing: 0.1em;
    line-height: 1.75; /* 設計稿 42/24 */
    padding: 2px 12px 1px 8px; /* 下方黑底再少 1px */
}
.session-meta {
    font-size: var(--fs-body);
    font-weight: 500;
    line-height: 1.684; /* 設計稿 32/19 */
    letter-spacing: 0.08em;
    color: var(--c-black);
}
/* 交流會報名狀態開關:永遠一行生效、一行註解,換狀態就把註解搬到另一行 */
/* .session-body .session-cta-open { display: none; } */
.session-body .session-cta-soon { display: none; }
/* 即將開放報名是純文字不是連結,擋掉 hover 變色,避免看起來可以點 */
.session-cta-soon { pointer-events: none; }

/* ============================================================
   Workshops (築夢工作坊) — yellow
   ============================================================ */
.workshops {
    background: var(--c-yellow);
    padding: 120px 80px 100px;
    position: relative;
    isolation: isolate; /* keep the sticky crowd art (z1) reliably under the content (z2) */
}
.workshops-inner {
    max-width: 1000px;
    margin: 0 auto;
    position: relative;
    z-index: 2;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 40px;
}
/* 背景插圖放在 sticky 層,區塊捲動時釘住 */
.workshop-bg-wrap {
    position: absolute;
    inset: 0;
    pointer-events: none;
    z-index: 1;
}
.workshop-bg-sticky {
    position: sticky;
    top: 0;
    /* fixed like the design (1371.5) — capping at 100vh pushed the crowd art
       into the upper viewport on short windows, colliding with the title */
    height: 1371px;
}
.workshop-bg-left, .workshop-bg-right {
    position: absolute;
    max-width: none;
}
/* bottom-anchored like the design (pic sits 235px above the sticky bottom),
   so the art stays in the lower half even when the sticky is 100vh-capped */
/* 底圖要更滿版、不受螢幕寬度限制。
   原本以中線 ±938/934 定位,寬螢幕會在左右各留一塊空白;改為貼齊視窗兩側
   (1920 時只差 22/26px,肉眼幾乎相同,但 2560 這種寬螢幕就不會縮在中間) */
.workshop-bg-left { left: 0; bottom: 235px; width: 921px; height: 713px; }
.workshop-bg-right { right: 0; bottom: 266px; width: 885px; height: 523px; }
.workshop-card {
    background: var(--c-white);
    border-radius: 24px;
    padding: 80px 100px;
    position: relative;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    gap: 32px;
    width: 100%;
}
.workshop-meta-wrap { position: relative; width: 100%; }
.workshop-mark {
    position: absolute;
    top: -25px; /* card padding-top 80 − design mark top 55 */
    left: 50%;
    transform: translateX(-50%);
    width: 1025px; /* design overflows the 1000px card by ~12px each side; card clips it */
    max-width: none;
    pointer-events: none;
}
.workshop-meta {
    width: 100%;
    padding: 0 36px; /* 左右對稱,置中才會對齊括弧中心 */
    text-align: center;
    font-size: var(--fs-body);
    font-weight: 500;
    line-height: 1.684; /* 設計稿 32/19 */
    letter-spacing: 0.08em;
    color: var(--c-black);
    position: relative;
}
.workshop-meta-soon {
    font-size: var(--fs-sec); /* 與 sec-title 同大小 */
    line-height: 1.3;
    color: var(--c-accent-1); /* 與左右括弧同色 */
}
.workshop-flow {
    display: flex;
    flex-direction: column;
    gap: 24px;
    width: 100%;
    position: relative;
    /* 講者隱藏期間:括弧區到第一個黑標的距離拉到和黑標到卡片底一樣(116px),講者顯示後再拿掉 */
    margin-top: 50px;
}
.workshop-section {
    display: flex;
    flex-direction: column;
    align-items: center;
    /* 黑底小標題與內文的間距全站為 20,工作坊的電腦版為 32:
       這一區的標題下面接的是大張講者照片,寬版需要多一點呼吸空間(手機仍為 20) */
    gap: 32px;
}
.workshop-tag {
    background: var(--c-black);
    color: var(--c-white);
    font-size: var(--fs-tag);
    font-weight: 700;
    letter-spacing: 0.1em;
    line-height: 1.75; /* 設計稿 42/24 */
    padding: 2px 12px;
}
.workshop-speakers {
    display: flex;
    flex-direction: column;
    gap: 24px;
    width: 100%;
    position: relative;
}
/* 講者名單開關:講師陣容尚未定案,先整組隱藏(黑底小標與分隔線照舊)。
   要顯示就把下面這一行註解起來。權重與上面相同,要放在後面才蓋得過 display: flex。 */
/* .workshop-speakers { display: none; } */
.speaker {
    display: flex;
    gap: 68px;
    align-items: flex-start;
    position: relative;
}
.speaker-photo {
    width: 350px;
    height: 350px;
    object-fit: cover;
    border-radius: 28px;
    flex-shrink: 0;
}
.speaker-body {
    flex: 1;
    display: flex;
    flex-direction: column;
    gap: 16px; /* 分享主題 → 人名職稱:電腦手機皆 16 */
}
.speaker-body h4 {
    font-size: var(--fs-h3);
    font-weight: 700;
    letter-spacing: 0.1em;
    line-height: 1.6667; /* 設計稿 40/24 */
    color: var(--c-accent-2);
}
.speaker-block { display: flex; flex-direction: column; gap: 4px; } /* 人名職稱 → 內文 */
.speaker-name {
    font-size: var(--fs-body);
    /* 設計稿是 Bold(700)。不要寫 800:Noto Sans TC 只載入 400/500/700/900,
       800 會依字重比對規則落到 900(Black),中文比設計稿粗一階 */
    font-weight: 700;
    line-height: 1.55; /* 設計稿 31/20 */
    letter-spacing: 0.08em;
    color: var(--c-black);
}
.speaker-bio {
    font-size: var(--fs-body);
    font-weight: 500;
    line-height: 1.684; /* 設計稿 32/19 */
    letter-spacing: 0.08em;
    color: var(--c-black);
}
.speaker-bio + .speaker-bio { margin-top: 16px; }
.workshop-sep {
    width: 100%;
    height: 48px;
    display: block;
    position: relative;
}
.workshop-cta {
    display: flex;
    justify-content: center;
    gap: 16px;
    position: relative;
    /* 內文與按鈕的距離固定 36:卡片 gap 32,差額補在這裡 */
    margin-top: 12px;
}
/* 工作坊報名狀態開關:永遠一行生效、一行註解,換狀態就把註解搬到另一行 */
.workshop-cta .workshop-cta-open { display: none; }
/* .workshop-cta .workshop-cta-soon { display: none; } */
/* 敬請期待是純文字不是連結,擋掉 hover 變色,避免看起來可以點 */
.workshop-cta-soon { pointer-events: none; }

/* ============================================================
   FAQ (常見問題) — yellow
   ============================================================ */
.faq {
    background: var(--c-surface-light);
    padding: 200px 40px 150px;
    position: relative;
    overflow: hidden;
}
.faq-chevrons {
    position: absolute;
    left: 50%;
    top: 245px; /* 設計稿:旋轉框中心在區塊上緣下方 447.75 */
    /* 滑鼠追蹤:--mx/--my 由 motion.js 寫入,範圍 -1~1。
       位移要放在旋轉之前,否則會變成在旋轉後的座標系裡移動 */
    transform: translate(calc(var(--mx, 0) * 30px), calc(var(--my, 0) * 20px))
               translateX(-50%) rotate(-3.18deg);
    transition: transform .5s var(--ease-out);
    width: 1598px;
    max-width: none;
    pointer-events: none;
    z-index: 1;
}
.faq-inner {
    max-width: 1200px;
    margin: 0 auto;
    position: relative;
    z-index: 2;
    display: flex;
    flex-direction: column;
    gap: 80px;
}
.faq-head { padding: 0 20px 0 22px; }
.faq-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.faq-row {
    display: flex;
    align-items: center;
    gap: 80px;
    padding: 0 18px;
    min-height: 60px;
    cursor: pointer;
}
.faq-num {
    font-family: var(--font-en);
    font-weight: 700;
    font-size: var(--fs-note-lg);
    letter-spacing: -0.03em;
    color: var(--c-black);
    padding-left: 8px;
    width: 41px;
    flex-shrink: 0;
}
.faq-row h3 {
    flex: 1;
    /* 寬版不硬折行,題目最寬可撐到 800 */
    max-width: 800px;
    font-size: var(--fs-qa);
    font-weight: 700;
    letter-spacing: 0.08em;
    line-height: 1.7; /* 設計稿 34/20 */
    color: var(--c-black);
}
.faq-toggle {
    width: 48px;
    height: 48px;
    border-radius: 12px;
    /* 收合時無底色,hover 與展開都是黃底,展開再換成較小的圓角 */
    background: transparent;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin-left: auto;
    flex-shrink: 0;
    transition: background var(--t-hover), border-radius var(--t-hover);
}
/* hover 的底色與展開狀態同為黃色 */
.faq-row:hover .faq-toggle { background: var(--c-yellow); }
/* +/− 由兩條 3px 橫槓組成,展開時旋轉成 −(與最新消息同一套) */
.faq-plus {
    width: 28px;
    height: 28px;
    display: block;
    position: relative;
    color: var(--c-text-deep);
    transition: transform var(--t-hover);
}
.faq-plus::before,
.faq-plus::after {
    content: "";
    position: absolute;
    left: 0;
    top: 50%;
    width: 100%;
    height: 3px;
    margin-top: -1.5px;
    background: currentColor;
    transition: transform var(--t-hover);
}
.faq-plus::after { transform: rotate(90deg); } /* the vertical stroke of the + */
.faq-item-open .faq-toggle { background: var(--c-yellow); border-radius: 8px; }
.faq-item-open .faq-plus { transform: rotate(180deg); }
.faq-item-open .faq-plus::after { transform: rotate(0deg); }
.faq-divider img { width: 100%; height: 30px; display: block; }
.faq-body {
    display: grid;
    grid-template-rows: 0fr;
    transition: grid-template-rows var(--t-hover);
}
.faq-item-open .faq-body { grid-template-rows: 1fr; }
/* 答案的左右邊界都要與問題完全對齊。兩邊都由題目列的實際排版反推:
     左 = 列左內距 18 + 編號欄 41 + gap 80 = 139(問題文字的左緣)
     右 = 列右內距 18 + ＋按鈕 48 + gap 80 = 146(問題文字最右能到的位置)
   問題另有 max-width 800 的上限,所以答案也要跟著設同一個上限 ——
   視窗寬時兩者都停在 800,視窗窄時兩者都被同一組邊界壓縮,右緣永遠一致 */
.faq-body .acc-inner {
    overflow: hidden;
    padding: 0 110px 0 139px;
    transition: padding var(--t-hover);
}
.faq-item-open .faq-body .acc-inner { padding: 20px 110px 8px 139px; } /* row→body: 群組 gap 8 + body pt 12 */
.faq-body p {
    font-size: var(--fs-body);
    font-weight: 500;
    line-height: 1.684; /* 設計稿 32/19 */
    letter-spacing: 0.08em;
    color: var(--c-text-small);
    /* 答案在設計稿裡是同一段用換行呈現,所以段落之間不加額外間距,行距一律 35 */
    margin-bottom: 0;
}

/* ============================================================
   Signup page (報名專區) — floating top bar
   ============================================================ */
.topbar-wrap {
    /* design overlays the header on the hero (sections start at y=0 behind it) */
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    z-index: 100;
    /* 設計稿:導覽列上緣距頁面頂端 20px;左右仍沿用全站 36px 的外框留白 */
    padding: 20px 36px 12px;
    transition: transform .35s var(--ease-out);
}
/* 導覽列後方的柔化層:頁面文字捲過簍空時會被模糊,不再與導覽列互相干擾。
   放在獨立的偽元素上(而不是整條 wrap)才能只柔化背景、不影響導覽列本身;
   下緣用遮罩淡出,避免出現一條清楚的分界線 */
.topbar-wrap::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -1;
    -webkit-backdrop-filter: blur(10px);
    backdrop-filter: blur(10px);
    -webkit-mask-image: linear-gradient(to bottom, #000 62%, transparent);
    mask-image: linear-gradient(to bottom, #000 62%, transparent);
    pointer-events: none;
}
/* hide-on-scroll-down; scrolling up brings it back */
.topbar-wrap-hidden { transform: translateY(-110%); }
/* 跨頁的 #錨點(報名頁的導覽列連到首頁)由瀏覽器直接跳,對齊的是區塊上緣。
   數值與 main.js 的 SECTION_TOP 一致,兩種方式停下來的位置才相同 */
.intro, .news, .timeline, .info-sessions, .workshops, .faq { scroll-margin-top: 96px; }
.topbar {
    max-width: 1848px;
    margin: 0 auto;
    background: var(--c-white);
    border-radius: 12px; /* 電腦與手機分開設定,電腦 12px */
    min-height: 72px;
    display: flex;
    align-items: center;
    padding: 0 32px;
}
.topbar-logo {
    display: block;
    flex-shrink: 0;
}
.topbar-logo img { width: 106px; height: 36px; }
.topbar-tsmc { display: block; flex-shrink: 0; padding-right: 16px; }
/* 印記 PNG 上下各有約 5.6% 的透明留白,框放大到 48px 後墨水才與設計稿的
   標誌等高,與 dreamer 標準字(SVG 滿版、墨水等於框高)看起來一樣大 */
.topbar-tsmc img { width: 61px; height: 48px; object-fit: contain; }
.topbar-links {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 60px; /* menu 最寬時間距 60px */
    padding: 0 40px;
    font-size: var(--fs-note);
    font-weight: 500;
    letter-spacing: 0.3em;
    color: #141414;
    white-space: nowrap;
}
.topbar-links a:hover { color: var(--c-accent-2); }
.topbar-menu { display: contents; }
.topbar-actions { display: flex; gap: 16px; flex-shrink: 0; }
.topbar-burger { display: none; }
.pill {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    height: 36px;
    padding: calc(8px + var(--btn-optical)) 22px calc(8px - var(--btn-optical)) 24px;
    border-radius: 100px;
    font-size: var(--fs-note);
    font-weight: 500;
    letter-spacing: 0.15em;
    line-height: 1;
    white-space: nowrap;
    transition: background var(--t-hover), color var(--t-hover);
}
.pill-black { background: var(--c-black); color: var(--c-yellow); }
.pill-black:hover { background: var(--c-yellow); color: var(--c-black); font-weight: 700; }
/* 目前所在的頁面(報名頁的「築夢報名」):固定停在 hover 的反黃樣式,並且不可點擊 */
.pill-current, .pill-current:hover {
    background: var(--c-yellow);
    color: var(--c-black);
    font-weight: 700;
    cursor: default;
    pointer-events: none;
}

/* ============================================================
   Signup page — hero card (報名資訊)
   ============================================================ */
.signup-hero {
    background: var(--c-yellow);
    /* 上內距 160:設計稿標題在 y210,扣掉浮在上面的導覽列 92 之後,
       實際留白約 68 */
    padding: 160px 40px 80px;
}
.signup-inner {
    max-width: 1000px;
    margin: 0 auto;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 40px;
}
.signup-card {
    width: 100%;
    background: var(--c-white);
    border-radius: 32px;
    padding: 120px 120px 80px;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 48px;
}
.signup-flow {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 56px;
    width: 100%;
}
.signup-list {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 48px;
    width: 100%;
}
.signup-item {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 24px;
    width: 100%;
}
.signup-item-label {
    position: relative;
    background: var(--c-yellow);
    padding: 0 36px;
    font-size: var(--fs-h3);
    font-weight: 700;
    line-height: 1.4286; /* 設計稿 40/28 */
    letter-spacing: 0.1em;
    color: var(--c-black);
}
.signup-item-label img {
    /* whole-node exports with the -9deg tilt baked in (64px rotated box) */
    position: absolute;
    left: -30px;
    top: calc(50% - 11.95px);
    width: 64px;
    height: 64px;
    transform: translateY(-50%);
}
.signup-item-body {
    padding-left: 36px; /* 與小標題黃底的左右內距同值,內文左緣才對齊標題文字 */
    font-size: var(--fs-body);
    font-weight: 500;
    line-height: 1.476; /* 設計稿 31/21 */
    letter-spacing: 0.1em;
    color: var(--c-text-small);
}
.signup-steps {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 12px;
}
.signup-strong { font-weight: 800; }
.signup-item-body ul {
    list-style: disc;
    padding-left: 32px;
    margin: 0;
}
.signup-download {
    display: inline-flex;
    align-items: center;
    gap: 12px;
    padding: 12px 24px;
    border-radius: 12px;
    border: 1px dashed transparent;
    transition: background var(--t-hover), border-color var(--t-hover);
}
.signup-download:hover {
    background: var(--c-yellow);
    border-color: var(--c-accent-2);
}
.signup-download-text {
    display: inline-block;
    padding-bottom: 4px;
    border-bottom: 2px solid var(--c-text-gray);
    font-size: var(--fs-body);
    font-weight: 500;
    letter-spacing: 0.1em;
    color: var(--c-black);
}
.signup-download img { width: 32px; height: 32px; }
.signup-download:hover .signup-download-text { border-color: var(--c-black); }
/* 活動辦法下載開關:詳細活動辦法尚未定稿,先整列隱藏(HTML 照舊)。
   要顯示就把下面這一行註解起來。權重與上面相同,要放在後面才蓋得過 display: inline-flex。 */
/*.signup-download { display: none; }*/
.btn-apply {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--c-text-small);
    color: var(--c-yellow);
    border-radius: 12px;
    padding: calc(12px + var(--btn-optical)) 32px calc(16px - var(--btn-optical));
    font-size: var(--fs-btn-lg);
    font-weight: 500;
    letter-spacing: 0.1em;
    line-height: 1.458; /* 設計稿:按鈕總高 63 = 12 + 35 + 16 */
    transition: background var(--t-hover), color var(--t-hover), box-shadow var(--t-hover);
}
.btn-apply:hover {
    background: var(--c-yellow);
    color: var(--c-black);
    box-shadow: inset 0 0 0 2px var(--c-black);
}
/* 報名頁報名狀態開關:永遠一行生效、一行註解,換狀態就把註解搬到另一行 */
/* .signup-card .btn-apply-open { display: none; } */
.signup-card .btn-apply-soon { display: none; }
/* coming soon 不是連結,整顆擋掉 hover 變色,捲字也不拆(btn-roll.js 會跳過停用鈕),
   避免看起來可以點 */
.btn-apply-soon { pointer-events: none; }

/* ============================================================
   大按鈕文字捲動 hover — 原字往下離場、新字從上方遞補,逐字遞增
   拆字由 assets/js/btn-roll.js 產生
   ============================================================ */
.btn-roll {
    position: relative;
    display: inline-flex;
    overflow: hidden;   /* 上下離場的字要被切掉 */
    white-space: pre;   /* 併進字裡的空白不能被收合,排版才與原本一致 */
}
.btn-roll-layer { display: inline-flex; }
.btn-roll-in { position: absolute; left: 0; top: 0; }
.btn-roll span {
    display: inline-block;
    /* 每個字的時間依序加長,收尾會有一點拖尾感(參考來源的做法) */
    transition: transform calc(.24s + var(--i, 0) * .08s) var(--ease-out);
}
/* 位移量用 100%(元素自身高度)而不是固定的 em:行高 1.6 讓文字盒比字身高,
   用 1.2em 會有半截字留在裁切框裡露出來 */
.btn-roll-in span { transform: translateY(-100%); } /* 待命在上方 */
.btn-apply:hover .btn-roll-out span,
.mega-footer-cta:hover .btn-roll-out span { transform: translateY(100%); }
.btn-apply:hover .btn-roll-in span,
.mega-footer-cta:hover .btn-roll-in span { transform: translateY(0); }
@media (prefers-reduced-motion: reduce) {
    .btn-roll span { transition: none; }
}

/* ============================================================
   Signup page — mega footer (black, rounded top)
   ============================================================ */
/* 頁尾圓角的切口露出的是下一層底色(body 的黃)。首頁上一個區塊是灰底,
   用同色外擴陰影把切口墊成灰色;報名頁上一個區塊本來就是黃底,維持原樣 */
.faq + .mega-footer { box-shadow: 0 0 0 24px var(--c-surface-light); }
.mega-footer {
    /* 頁尾在整頁最底,浮上來的幅度加大一點才看得出來 */
    --reveal-shift: 32px;
    background: var(--c-black);
    border-radius: 24px 24px 0 0;
    padding: 181px 36px 5px;
    position: relative;
    overflow: hidden;
    text-align: center;
}
.mega-footer-sparkle {
    position: absolute;
    top: 191px;
    width: 114px;
    height: 183px;
}
.mega-footer-sparkle-left { left: 222px; }
.mega-footer-sparkle-right { right: 222px; transform: scaleX(-1); }
.mega-footer-slogan {
    font-weight: 900;
    font-size: var(--fs-slogan);
    letter-spacing: 0.1em;
    line-height: 1.6;
    color: var(--c-yellow);
    margin-bottom: 57px; /* 設計稿:標語下緣 385、按鈕上緣 442 */
}
.mega-footer-cta {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--c-yellow);
    color: var(--c-black);
    border: 2px solid var(--c-black);
    border-radius: 12px;
    padding: calc(10px + var(--btn-optical)) 30px calc(14px - var(--btn-optical));
    font-size: var(--fs-btn-lg);
    font-weight: 700;
    letter-spacing: 0.1em;
    line-height: 1.458; /* 設計稿:含 2px 外框後總高 63 */
    margin-bottom: 112px; /* 設計稿:按鈕下緣 505、黃卡上緣 617 */
    transition: background var(--t-hover), color var(--t-hover), box-shadow var(--t-hover);
}
.mega-footer-cta:hover {
    background: var(--c-text-small);
    color: var(--c-yellow);
    box-shadow: inset 0 0 0 2px var(--c-yellow);
}
/* 報名頁的頁尾不放報名按鈕(人已經在報名頁了)。按鈕隱藏後,標語與黃卡之間
   只剩標語自己的 57px,所以改用按鈕的下邊距(112),留白比照有按鈕時的下半段 */
.page-signup .mega-footer-cta { display: none; }
.page-signup .mega-footer-slogan { margin-bottom: 112px; }
.mega-footer-card {
    /* 頁尾不限螢幕寬度、滿版(左右由 .mega-footer 的 36px 內距決定) */
    height: 700px;
    margin: 0 auto;
    background: var(--c-yellow);
    border-radius: 24px;
    padding: 80px 200px 0 220px;
    position: relative;
    overflow: hidden;
    text-align: left;
    color: var(--c-black);
}
.mf-top {
    display: flex;
    justify-content: space-between;
    gap: 60px;
}
.mf-brand {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
}
.mf-brand-art { width: 350px; }
.mf-copyright {
    margin-top: 8px;
    font-size: var(--fs-note);
    font-weight: 400;
    letter-spacing: 0.1em;
    color: var(--c-white);
}
.mf-cols { display: flex; gap: 72px; }
.mf-contact { display: flex; flex-direction: column; gap: 32px; }
/* 整列(icon + 文字)是同一個連結,hover 範圍與可點範圍一致 */
.mf-contact-link { display: inline-flex; align-items: center; gap: 32px; }
.mf-ic {
    width: 52px;
    height: 52px;
    background: var(--c-text-deep);
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}
/* 四個圖示都是直接內嵌的 <svg>(見兩頁的頁尾),path 用 fill="currentColor",
   顏色與 hover 換色統一由 color 驅動,四個共用同一條規則。
   不要改回 CSS mask + 外部檔案:file:// 開啟時 Chromium 把每個檔案視為不同
   來源,遮罩載不進來,圖示會變成一個空白的圓圈(Instagram 先前就是這樣)。
   路徑資料原封不動取自 assets/icons/social-*.svg,那些檔案保留為來源依據 */
.mf-glyph {
    display: block;
    color: var(--c-white);
    transition: color var(--t-hover);
}
.mf-glyph-fb { width: 14px; height: 30px; }
.mf-glyph-mail { width: 32px; height: 32px; }
.mf-glyph-phone { width: 25px; height: 25px; }
.mf-glyph-ig { width: 29px; height: 29px; }
.mf-contact-link:hover .mf-glyph { color: var(--c-yellow); }
/* 標籤與內容的 gap 電腦、平板、手機一律 4px */
.mf-contact-body { display: flex; flex-direction: column; gap: 4px; color: var(--c-text-small); }
.mf-contact-body > span { line-height: 1.3; }
.mf-en {
    font-family: var(--font-en);
    font-weight: 700;
    font-size: var(--fs-note-lg);
    letter-spacing: -0.03em;
}
.mf-zh { font-size: var(--fs-note); font-weight: 500; letter-spacing: 0.3em; }
.mf-zh-title { font-size: var(--fs-note-lg); font-weight: 500; }
.mf-en-sm {
    font-family: var(--font-en);
    font-weight: 500;
    font-size: var(--fs-note);
    letter-spacing: -0.03em;
}
.mf-sponsors { display: flex; flex-direction: column; gap: 32px; }
.mf-sponsors li { display: flex; flex-direction: column; gap: 16px; }
.mf-label {
    font-size: var(--fs-note);
    font-weight: 500;
    letter-spacing: 0.3em;
    color: var(--c-text-small);
}
.mf-sponsors img { display: block; }
.mf-sponsor-host { width: 255px; height: 49px; }
.mf-sponsor-atona { width: 150px; height: auto; }
/* 改用圖片置入。設計稿是 Hiragino Sans W9,站上可用的
   Bricolage Grotesque 最粗只到 800,字重與字形都追不上,所以直接放設計稿導出的
   向量(assets/images/footer-whatif.svg,1713x339)。
   底部的裁切已經內建在 viewBox 裡(字身到 y=366,viewBox 只到 339),
   所以貼齊卡片下緣就是設計稿的樣子,不需要再用負的 bottom 去切 */
.mf-mega {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    bottom: 0;
    width: 92.66%; /* 設計稿 1712.322 / 1848 */
    /* 黃卡改成滿版之後,卡片會跟著視窗變寬,這張圖是卡片寬的百分比所以也跟著長高;
       但卡片高度固定 700、上方聯絡資訊也是固定尺寸,字太高就會壓到電話那一列
       (2545 寬的視窗實測:圖高 324、上緣 376,電話列 340~395,重疊 19px)。
       所以給一個寬度上限。預設就是設計稿的尺寸,此時上緣在 458,
       與聯絡資訊下緣 395 之間留白 63,和設計稿一致。
       想讓字更滿版就調大 --mf-mega-max,但別超過 1988px——再上去圖的上緣
       就會低於 419,與電話列的留白不到 24px */
    --mf-mega-max: 1712px;
    max-width: var(--mf-mega-max);
    display: block;
}

/* ============================================================
   Cookie 同意卡片 — 右下角浮動,按下「接受」後記住,之後不再出現
   預設就是顯示狀態:JS 若被擋掉,聲明仍然看得到(只是收不起來)
   ============================================================ */
.cookie-card {
    position: fixed;
    right: 36px;
    bottom: 36px;
    z-index: 90;
    /* 桌機規則一律用設計稿的固定 px:body 有 zoom 時 vw 不會跟著縮放,
       寫 vw 會雙重縮放(窄版另有 ≤960 的規則接手) */
    width: 470px;
    background: var(--c-white);
    border-radius: 20px;
    padding: 28px 36px 32px 32px;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 24px;
    box-shadow: 0 12px 32px rgba(0, 0, 0, .16);
    transition: transform .45s var(--ease-out), opacity .45s var(--ease-out);
}
/* 按下「接受」後向右滑出離場 */
.cookie-card-out { transform: translateX(calc(100% + 48px)); opacity: 0; }
.cookie-card[hidden] { display: none; }
.cookie-text {
    font-size: var(--fs-note);
    font-weight: 500;
    line-height: 1.625; /* 設計稿 26/16 */
    letter-spacing: 0.1em;
    color: var(--c-black);
}
.cookie-text a { text-decoration: underline; transition: color var(--t-hover); }
.cookie-text a:hover { color: var(--c-accent-2); }
.cookie-accept {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--c-black);
    color: var(--c-white);
    border-radius: 8px;
    /* 右內距扣掉字距在最後一個字後面多出來的一格,文字才會真的置中 */
    padding: calc(6px + var(--btn-optical)) 11px calc(8px - var(--btn-optical)) 16px;
    font-size: var(--fs-btn);
    font-weight: 500;
    letter-spacing: 0.3em;
    line-height: 1.4375; /* 設計稿:按鈕總高 37 = 6 + 23 + 8 */
    white-space: nowrap;
    transition: background var(--t-hover), color var(--t-hover), box-shadow var(--t-hover);
}
.cookie-accept:hover {
    background: var(--c-yellow);
    color: var(--c-black);
    box-shadow: inset 0 0 0 2px var(--c-black);
}

/* ============================================================
   Responsive
   ============================================================ */
@media (max-width: 1024px) {
    /* max-height 必須一併解除:窄版是由上而下堆疊、高度隨內容變動,
       留著桌機的 1080px 上限會讓底部的獎金/日期被 overflow: hidden 裁掉
       (平板寬度時圖騰較高,正好把那兩行推出界線之外) */
    .hero { aspect-ratio: auto; min-height: 0; max-height: none; padding: 115px 20px 0; display: flex; flex-direction: column; gap: 0; overflow: hidden; }
    .intro, .news, .timeline, .info-sessions, .workshops, .faq { scroll-margin-top: 96px; }
    .hero-copy, .hero-foot { position: static; }
    .hero-copy { gap: 37px; order: 1; padding-left: 15px; }
    .hero-title img { width: min(285px, 76vw); }
    .btn-apply { font-size: 16px; letter-spacing: 0.08em; padding: calc(8px + var(--btn-optical)) 20px calc(8px - var(--btn-optical)); border-radius: 8px; }
    /* 窄版改用手機專用的圖騰素材,它是切齊頁框導出的,
       可見範圍相當於頁面座標的 x0–384、y270–795 */
    .hero-totem { display: none; }
    /* 寬度改用 min():手機仍是滿版的 98.5vw,平板則由視窗高度決定上限,
       整個 hero(標題、按鈕、圖騰、獎金/日期)才放得進一個畫面、不必往下捲。
       圖騰比例約 1:1.37,50vh 寬 → 約 68vh 高,加上其他部件仍有餘裕 */
    /* 高度上限用 svh(工具列展開時的小視窗)。iOS Safari 的 vh 取的是工具列收起
       的大視窗,只寫 vh 會讓圖騰比預期大一階、hero 就未必一頁看得完。
       先寫 vh 給不支援 svh 的舊瀏覽器當後備,支援的會用下一行 */
    .hero-totem-m { display: block; order: 2; width: min(98.5vw, 50vh); max-width: none; margin: 15px 0 0 -20px; }
    .hero-totem-m { width: min(98.5vw, 50svh); }
    /* 入場動畫改用不旋轉、以左緣為原點的版本,才不會把素材左側的切口拉進畫面 */
    .hero-totem-m { transform-origin: 0 50%; }
    .reveal-ready .hero-totem-m[data-reveal="pop"].is-revealed { animation-name: reveal-pop-edge; }
    .hero-foot {
        position: relative;
        left: auto;
        bottom: auto;
        z-index: 2;
        order: 3;
        align-self: flex-end;
        align-items: flex-end;
        gap: 8px;
        margin: -85px 5px 30px 0; /* prize/date overlap the totem's lower-right (design y710, totem box ends at 795) */
    }
    .hero-prize { width: 239px; }
    .hero-date-open { width: 280px; }
    .hero-date-soon { width: 225px; }
    .intro { padding: 80px 20px 64px; }
    /* 大標與內文的 gap 整頁統一 40 */
    .intro-inner { padding: 0 20px; gap: 40px; }
    /* 裝飾圖在設計稿裡是往左右各破版 356 / 238px,窄版放不下也沒有意義 */
    .intro-deco { display: none; }
    .intro-photo { margin-top: 8px; border-radius: 8px; }
    .intro-flow { gap: 48px; }
    .intro-block { gap: 20px; }
    .intro-tag { font-size: 24px; line-height: 34px; }
    .intro-block > p { font-size: 17px; line-height: 27px; }

    .news { padding: 80px 20px 100px; }
    .news-inner { gap: 40px; } /* 桌機的 60px 是配合大標的比例,窄版標題小,收回 40 */
    .news-layout { flex-direction: column; gap: 12px; } /* 分頁按鈕與下方白框的距離 */
    .news-tabs { flex-direction: row; width: 100%; min-height: 0; } /* 桌機替插圖保留的 min-height 收掉 */
    /* 字級收到 16px 並強制不換行(22px 時兩顆按鈕擠不進 375 寬,
       「官方公告」會斷成兩行);左右內距同步收窄,才留得下四個字的字距 */
    .news-tab {
        flex: 1;
        width: auto;
        height: 54px;
        font-size: 16px;
        border-radius: 8px;
        padding: calc(4px + var(--btn-optical)) 12px calc(4px - var(--btn-optical));
        white-space: nowrap;
    }
    .news-title { font-size: 36px; }
    .news-panel { width: 100%; min-height: 0; max-height: 520px; padding: 16px 24px; border-radius: 12px; } /* 白框 12px;高度貼內容,上限沿用 520 */
    /* narrow screens: date pill + toggle on row 1, title takes a full row below */
    .news-row { flex-wrap: wrap; gap: 8px 12px; }
    .news-item-title { flex: 1 1 100%; order: 3; font-size: 18px; line-height: 1.6; }
    .news-date { font-size: 16px; padding: 4px 10px; align-items: baseline; }
    .news-date-en { font-size: 18px; margin-right: 1px; }
    /* 按鈕本體手機收成 32(電腦維持 60),符號本體同步收到 20 —— 與常見問題同一套 */
    .news-toggle { width: 32px; height: 32px; margin-left: auto; }
    .news-plus { width: 20px; height: 20px; }
    .news-body .acc-inner { padding: 0; }
    .news-item-open .news-body .acc-inner { padding: 12px 0 8px; }
    .news-body p { font-size: 16px; line-height: 1.7; }
    .news-doodle { display: none; }

    /* 白框 16px、內距 20/16/16,影片本體 4px */
    .video-card { border-radius: 16px; padding: 20px 16px 16px; }
    .video-frame { border-radius: 4px; }
    .video-title { font-size: 20px; line-height: 32px; padding-left: 0; }
    .video-slide { gap: 20px; }
    .vid-btn { width: 44px; height: 44px; border-radius: 10px; }
    .video-nav { gap: 16px; margin-top: 16px; }
    .video-yt-play { width: 68px; height: 47px; border-radius: 12px; }
    .video-yt-play::after { border-width: 10px 0 10px 18px; }

    /* 黑底 16px(黑色區塊的下緣圓角在 .info-frame,同樣 16px) */
    .timeline-frame { border-radius: 16px 16px 0 0; padding: 100px 0 80px; }
    .timeline-head { gap: 24px; margin-bottom: 48px; }
    /* 左右內距 =(可視寬度 − 卡片寬)/2,第一張與最後一張才有足夠的捲動距離置中;
       scroll-padding 歸零:貼齊要以整個捲動區為範圍,留著內距(或預設的 auto)會讓貼齊點偏移 */
    .timeline-scroller { padding: 0 calc((100% - 320px) / 2); gap: 16px; scroll-padding: 0; }
    /* base nav is a fixed 1200px row — on phones that pushes the buttons off-screen */
    .timeline-nav { width: auto; padding: 0 20px; gap: 16px; margin-top: 28px; }
    .tl-btn { width: 44px; height: 44px; border-radius: 10px; }
    /* 貼齊改為置中:手機的作用中卡片要停在畫面中央,若維持 start,
       瀏覽器會把 JS 捲到的位置再貼回卡片靠左的位置 */
    .tl-card { flex-basis: 320px; min-height: 0; padding: 24px 32px 30px; gap: 40px; border-radius: 12px; scroll-snap-align: center; } /* 白區塊 12px */
    .tl-card h3 { font-size: 26px; line-height: 1.4; }
    .tl-date { font-size: 18px; line-height: 1.6; }
    .tl-num { font-size: 24px; padding: 4px 32px; }

    .sec-title { font-size: 34px; line-height: 1.3; }
    .sec-chev { font-size: 40px; line-height: 1; }
    .info-sessions { padding-bottom: 100px; }
    .info-frame { border-radius: 0 0 16px 16px; padding: 80px 20px 100px; } /* 黑色部分 16px */
    .info-whatif { display: none; }
    .session-card { padding: 20px; border-radius: 12px; } /* 南北場區塊 12px */
    .session-row { flex-direction: column; gap: 20px; min-height: 0; }
    .session-thumb { width: 100%; aspect-ratio: 16 / 10; }
    .session-body { padding-top: 0; gap: 36px; } /* 內文與按鈕固定 36,與桌機同值 */
    .session-tag { font-size: 24px; line-height: 1.4; }
    .session-meta { font-size: 17px; line-height: 1.7; }

    .workshops { padding: 80px 20px; }
    .workshops-inner { margin-top: 0; }
    .workshop-bg-wrap { display: none; }
    .workshop-card { border-radius: 16px; padding: 40px 24px; gap: 20px; } /* 工作坊白框 16px */
    /* 內文與按鈕仍固定 36:手機卡片 gap 收到 20,差額 16 補在按鈕上 */
    .workshop-cta { margin-top: 16px; }
    /* parens stretch to hug the meta text block (SVG has preserveAspectRatio=none) */
    .workshop-mark { top: -6px; left: 0; width: 100%; height: calc(100% + 12px); transform: none; }
    .workshop-section { gap: 20px; } /* 電腦版是 32,窄版收回全站統一的 20 */
    .workshop-flow { margin-top: 62px; } /* 講者隱藏期間:對齊窄版黑標到卡片底的 76px */
    .workshop-tag { font-size: 26px; line-height: 1.4; }
    /* keep the text inside the paren inner edges (~16% / 84% of the mark) */
    .workshop-meta { padding: 0 17%; font-size: 17px; line-height: 1.7; }
    .workshop-meta-soon { font-size: 34px; } /* 跟窄版 sec-title 同步 */
    /* 照片置中、文字靠左,整個區塊在白框內置中(500px) */
    .speaker { flex-direction: column; gap: 20px; align-items: center; max-width: 500px; margin-left: auto; margin-right: auto; }
    .speaker-body { width: 100%; } /* 文字區塊撐滿容器寬度,維持靠左排版 */
    .speaker-photo { width: min(280px, 100%); height: auto; aspect-ratio: 1; border-radius: 12px; } /* 照片 12px */
    /* 分享主題→人名職稱 16、人名職稱→內文 4:電腦手機同值,直接用基礎規則 */
    .speaker-body h4 { font-size: 22px; line-height: 1.5; }
    .speaker-name, .speaker-bio { font-size: 17px; line-height: 1.7; }
    .workshop-sep { height: 36px; } /* 兩段之間的線條窄版收成 36,電腦維持 48 */

    /* 窄版的黑邊收成 16px(桌機維持 36),圖片在小螢幕上更靠邊。
       圓角仍是 8px,各斷點一致 */
    .photo-strip { padding: 16px; }
    /* 平板/手機不做疊圖,改成同一個位置放一張、自動淡入淡出輪播:
       兩張都放在同一個 grid 格子裡重疊,由 JS 每 5 秒切換 active
       (prefers-reduced-motion 時不自動切換,只顯示第一張) */
    .photo-stack {
        --photo-hold: 0px;
        display: grid;
    }
    .photo-stack-hold { display: none; } /* 停留餘裕是桌機釘住用的 */
    .photo-strip-item {
        grid-area: 1 / 1;
        position: static;
        margin-top: 0;
        opacity: 0;
        transition: opacity .45s var(--ease-out);
    }
    .photo-strip-item-active { opacity: 1; }
    /* 窄版維持合併版的一張(大小剛好不用動),拆分版收起來。
       寬度 97.5% 原本寫在桌機的基礎規則裡,桌機改為拆分版後要在這裡補上 */
    .photo-marks-split { display: none; }
    .photo-strip-marks {
        display: block;
        width: 97.5%;
        position: absolute;
        left: 50%;
        top: 6px;
        transform: translateX(-50%);
        margin: 0;
    }

    /* 手機版沿用 20px 的左右邊界,浮動卡片也一起收窄 */
    .cookie-card {
        right: 20px;
        bottom: 20px;
        left: 20px;
        width: auto;
        border-radius: 16px;
        padding: 20px;
        gap: 16px;
    }
    .cookie-text { font-size: 14px; line-height: 1.7; letter-spacing: 0.06em; }

    .topbar-wrap { padding: 20px 20px 8px; }
    .topbar {
        padding: 8px 12px 8px 24px;
        min-height: 56px;
        border-radius: 6px; /* 手機維持 6px,不跟著電腦的 12px */
        position: relative;
    }
    .topbar-tsmc { padding-right: 12px; }
    .topbar-tsmc img { width: 41px; height: 33px; } /* 同樣補回透明留白,墨水對齊 29px */
    .topbar-logo { padding-right: 16px; }
    .topbar-logo img { width: 99px; height: 29px; }
    /* 三條線的高度與位置都必須落在整數 px:2.5px 高、又被 justify-content: center
       推到 .25/.75 的位置時,每條線的消鋸齒分布不同,中間那條會看起來比較粗。
       改為 3px 高、由內距起算(9 + 3+6+3+6+3 + 10 = 40),三條都落在整數列 */
    .topbar-burger {
        display: inline-flex;
        flex-direction: column;
        justify-content: flex-start;
        align-items: stretch;
        gap: 6px;
        width: 40px;
        height: 40px;
        margin-left: auto;
        padding: 9px 8px 10px;
        flex-shrink: 0;
    }
    .topbar-burger span {
        display: block;
        height: 3px;
        border-radius: 2px;
        background: var(--c-black);
        transition: transform var(--t-hover), opacity var(--t-hover);
    }
    /* 位移量 = 線高 + 間距,兩條外側線正好疊到中線位置 */
    .topbar-open .topbar-burger span:nth-child(1) { transform: translateY(9px) rotate(45deg); }
    .topbar-open .topbar-burger span:nth-child(2) { opacity: 0; }
    .topbar-open .topbar-burger span:nth-child(3) { transform: translateY(-9px) rotate(-45deg); }
    .topbar-menu { display: none; }
    /* 收起時 .topbar-open 換成 .topbar-closing(見 assets/js/main.js):
       整塊要維持展開時的版面直到動畫播完,所以下面每一條版面規則兩個狀態都要吃到,
       只有漢堡本身例外——它靠自己的 transition 變回三條線 */
    .topbar-open .topbar-menu,
    .topbar-closing .topbar-menu {
        display: flex;
        flex-direction: column;
        align-items: flex-start;
        gap: 12px; /* 連結區 → 分隔線的距離(線在 actions 的 border-top 上) */
        position: absolute;
        left: 0;
        right: 0;
        top: calc(100% + 8px);
        background: var(--c-surface-light);
        border-radius: 6px; /* 與收合狀態的導覽列同值 */
        padding: 28px 24px 24px; /* 整框上方留白要比左右下更多 */
        box-shadow: 0 16px 40px rgba(0, 0, 0, .16);
        z-index: 10;
        /* 矮螢幕(手機橫向約 320~430px 高)時選單會長過視窗。選單掛在固定的
           header 底下,頁面捲動不會帶它移動,超出的部分——包含兩顆 CTA——
           會完全點不到,所以要給它自己的捲軸。
           100 = wrap 上內距 20 + 列高 56 + 間距 8,再留 16 給下緣。
           用 svh(工具列展開時的小視窗)在 iOS 上才不會算得太寬鬆;
           先寫 vh 給不支援 svh 的舊瀏覽器當後備 */
        max-height: calc(100vh - 100px);
        max-height: calc(100svh - 100px);
        overflow-y: auto;
        overscroll-behavior: contain; /* 選單捲到底不要接著捲動整頁 */
        /* 打開時由上往下展開:整塊從導覽列底下「掉」出來。
           用 clip-path 由上往下揭開,不用 scaleY —— scaleY 會把裡面的字一起壓扁 */
        animation: topbar-menu-in .32s var(--ease-out) both;
    }
    /* 收起時走同一段動畫的反向:往上 slide 收回導覽列底下。
       這裡不用全站的 --ease-out(0, 0, .2, 1):那條曲線一開場就衝到底,
       進度 50% 時已經收掉 84%、opacity 只剩 0.16,實際看得到的過程極短。
       改用前段慢一點的曲線並拉長時間,收合的過程才看得出來
       (時間要與 main.js/signup.js 的 CLOSE_MS 一致) */
    .topbar-closing .topbar-menu {
        animation: topbar-menu-out .36s cubic-bezier(.4, 0, .2, 1) both;
        pointer-events: none; /* 收合途中不要還能點到裡面的連結 */
    }
    @keyframes topbar-menu-in {
        from { opacity: 0; transform: translateY(-8px); clip-path: inset(0 0 100% 0); }
        to   { opacity: 1; transform: none; clip-path: inset(0 0 0 0); }
    }
    /* 位移比展開時的 8px 大一倍,「往上收」才有方向感;
       opacity 前 60% 只掉到 .72,剩下的才快速淡出,
       整塊才不會在還沒收完之前就先看不見 */
    @keyframes topbar-menu-out {
        from { opacity: 1; transform: none; clip-path: inset(0 0 0 0); }
        60%  { opacity: .72; }
        to   { opacity: 0; transform: translateY(-16px); clip-path: inset(0 0 100% 0); }
    }
    @media (prefers-reduced-motion: reduce) {
        .topbar-open .topbar-menu { animation: none; }
    }
    .topbar-open .topbar-links,
    .topbar-closing .topbar-links {
        flex-direction: column;
        align-items: flex-start;
        justify-content: flex-start;
        gap: 8px; /* gap 收成 8,間距改由各項自己的 padding 撐開 */
        padding: 0;
        width: 100%;
    }
    /* 各項目上下各 12 的 padding:項目之間的視覺間距推寬到 32(12+8+12),
       觸控範圍也跟著變大(參考設計稿) */
    .topbar-open .topbar-links a,
    .topbar-closing .topbar-links a { padding: 12px 0; }
    /* 漢堡選單展開後,兩顆 CTA 改成「重要按鈕」的樣子 ——
       整體加寬(各自佔滿一列、改為上下排列)、圓角從 100px 的膠囊改成 8px 的方邊,
       與主視覺的主要按鈕 .btn-apply 一致 */
    .topbar-open .topbar-actions,
    .topbar-closing .topbar-actions {
        margin-left: 0;
        flex-direction: column;
        width: 100%;
        gap: 8px;
        /* 設計稿在按鈕上方有一條分隔線;線與按鈕之間留 24 */
        border-top: 1px solid var(--c-accent-1);
        padding-top: 24px;
    }
    .topbar-open .topbar-actions .pill,
    .topbar-closing .topbar-actions .pill {
        width: 100%;
        height: auto;
        border-radius: 8px;
        font-size: 16px;
        letter-spacing: 0.08em;
        /* 按鈕加厚:上下 padding 20/16(光學置中的修正照舊疊加) */
        padding: calc(20px + var(--btn-optical)) 20px calc(16px - var(--btn-optical));
    }
    .signup-hero { padding: 120px 20px 64px; }
    /* 大標題(>>)與白框的距離 28px、白框上緣到小標題 48px、白框 16px */
    .signup-inner { gap: 28px; }
    .signup-card { border-radius: 16px; padding: 48px 28px 48px; gap: 40px; }
    .signup-flow { gap: 40px; }
    .signup-list { gap: 40px; }
    .signup-item { gap: 16px; } /* 小標題與內文的距離(桌機 24) */
    /* 左右 20px 與 navbar、其他區塊的手機版邊界一致(桌機兩者本來就同為 36px) */
    .mega-footer { border-radius: 16px 16px 0 0; padding: 80px 20px 12px; } /* 黑色 16px */
    .faq + .mega-footer { box-shadow: 0 0 0 16px var(--c-surface-light); } /* 陰影外擴量跟著圓角縮小 */
    .mega-footer-sparkle { display: none; }
    .mega-footer-slogan { font-size: 24px; margin-bottom: 32px; }
    .mega-footer-cta { font-size: 20px; padding: calc(11px + var(--btn-optical)) 32px calc(11px - var(--btn-optical)); margin-bottom: 48px; }
    .page-signup .mega-footer-slogan { margin-bottom: 48px; } /* 報名頁沒有按鈕,留白比照按鈕的下邊距 */
    .mega-footer-card { height: auto; border-radius: 12px; padding: 64px 40px 0; } /* 黃色框 12px */
    .mf-top { flex-direction: column; gap: 40px; }
    .mf-brand { gap: 24px; }
    .mf-brand-art { width: min(287px, 100%); }
    .mf-cols { flex-direction: column; gap: 40px; }
    /* 窄版:圖片改為靜態流排,左右各溢出 40px 貼到卡片邊緣(卡片內距是 40) */
    .mf-mega { position: static; transform: none; width: calc(100% + 80px); margin: 40px -40px 0; }
    /* one line at every width: scale with viewport (≈12.4px on 414, ≈10px on 334) */
    .mf-copyright { font-size: clamp(9px, 2.9vw, 13px); letter-spacing: 0.02em; white-space: nowrap; margin-top: 10px; }
    /* contact labels on one line: scale down instead of wrapping */
    .mf-zh-title { font-size: clamp(12px, 3.6vw, 16px); white-space: nowrap; }
    .mf-zh { font-size: clamp(12px, 3.9vw, 16px); letter-spacing: 0.2em; white-space: nowrap; }
}
/* 平板改用桌機那一版的圖騰(完整、沒有切口),所以可以自由置中。
   手機版素材的左側是切齊頁面邊緣導出的,置中就會露出切口;桌機素材沒有這個問題。
   兩者是同一份圖形,平板版的 viewBox 裁到圖形本身
   (桌機素材的圖形佔 viewBox 的 63% 寬、79% 高) */
@media (min-width: 641px) and (max-width: 1024px) {
    .hero-totem-m { display: none; }
    .hero-totem-t {
        display: block;
        order: 2;
        max-width: none;
        width: min(88vw, 45vh);
        margin: 15px 0 0 calc(50% - min(88vw, 45vh) / 2);
    }
    .hero-totem-t {
        width: min(88vw, 45svh);
        margin-left: calc(50% - min(88vw, 45svh) / 2);
    }

    .workshop-card { max-width: 750px; margin-left: auto; margin-right: auto; }
}

@media (max-width: 640px) {
    .hero, .intro, .news, .workshops, .faq { padding-left: 20px; padding-right: 20px; }
    .workshop-card { padding: 36px 24px 24px; } /* 手機版白框的上內距 36 */
    .workshop-flow { margin-top: 46px; } /* 講者隱藏期間:對齊手機版黑標到卡片底的 60px */
    .whatif-strip { padding: 7px 0; }
    .whatif-strip-track span { font-size: 38px; padding-right: 12px; }
    .video-title { font-size: 18px; }
    .faq { padding: 80px 20px 100px; }
    .faq-chevrons { display: none; }
    .faq-inner { gap: 40px; }
    .faq-title { font-size: 34px; line-height: 1.3; padding-bottom: 0; }
    /* 數字、題目、＋之間的間距 30;題目列上 padding 歸零 */
    .faq-row { gap: 30px; padding: 0 4px 10px; }
    .faq-num { width: auto; padding-left: 0; font-size: 16px; }
    .faq-row h3 { font-size: 18px; line-height: 1.6; }
    /* ＋按鈕縮成 32(電腦維持 48);符號本體同步縮到 20 */
    .faq-toggle { width: 32px; height: 32px; border-radius: 12px; }
    .faq-plus { width: 20px; height: 20px; }
    /* 左 = 題目列左 padding 4 + 編號實寬 15.2 + gap 30(與題目文字左緣對齊)
       右 = 題目列右 padding 4 + ＋按鈕 32 + gap 30(與題目文字右緣對齊) */
    .faq-body .acc-inner { padding: 0 66px 0 49px; }
    .faq-item-open .faq-body .acc-inner { padding: 10px 66px 14px 49px; }
    .faq-body p { font-size: 16px; line-height: 1.7; }

    .signup-item-label { font-size: 24px; padding: 0 24px; }
    .signup-item-label img { width: 44px; height: 44px; left: -22px; }
    /* 小標題的黃底左右內距在此收成 24,內文要跟著對齊標題文字
       的左緣(桌機兩者本來就同為 36) */
    .signup-item-body { font-size: 17px; line-height: 1.7; padding-left: 24px; }
    /* 底線改細 1px,且文字換成兩行時兩行都要有底線。
       這個 span 是 inline-flex 的項目,display:inline 會被 blockify(仍然只會在整塊
       最下緣畫一條 border),所以改用 text-decoration —— 它天生跟著每一行走。
       offset 6px 對齊原本 padding-bottom 4px + 2px 框線的視覺位置 */
    .signup-download-text {
        font-size: 16px;
        line-height: 1.9;
        padding-bottom: 0;
        border-bottom: 0;
        text-decoration: underline;
        text-decoration-thickness: 1px;
        text-underline-offset: 6px;
        text-decoration-color: var(--c-text-gray);
    }
    .signup-download:hover .signup-download-text { text-decoration-color: var(--c-black); }
    .mf-contact-link { gap: 14px; }
    .mf-ic { width: 44px; height: 44px; }
    .mf-glyph { transform: scale(0.85); }
}

/* 頁尾標語:兩行版的第二行「親手寫下屬於這個世代的驚嘆號！」需要 396px,
   加上頁尾左右各 20 的內距,視窗要有 436 才放得下;再窄就會擠出「！」變成三行。
   所以在 436 以下直接把段落寬鎖到 220,斷成
   「邀請你大膽假設、/勇敢出發，/親手寫下屬於這個/世代的驚嘆號！」
   四行置中的整齊版(從 350 直接跳 220,不要中間值) */
@media (max-width: 436px) {
    .mega-footer-slogan {
        max-width: 220px;
        margin-left: auto;
        margin-right: auto;
    }
}

/* iPhone SE 這類短視窗:主視覺的獎金/日期
   會被 overflow:hidden 裁掉。標題+按鈕、獎金日期兩組各縮到 90%
   (燈泡大小不變),並收緊上下留白讓整個版面上移 */
@media (max-width: 640px) and (max-height: 750px) {
    .hero { padding-top: 96px; }
    .hero-copy { zoom: 0.9; }
    .hero-totem-m { margin-top: 8px; }
    .hero-foot { zoom: 0.9; margin-top: -100px; margin-bottom: 20px; }
}

/* 觸控裝置沒有真正的 hover,tap 後 :hover 會黏住不放。
   統一取消背景/顏色的 hover 變化,避免按鈕同時變黃 */
@media (hover: none) {
    .pill-black:hover { background: var(--c-black); color: var(--c-yellow); font-weight: 500; }
    .pill-sm:hover { background: var(--c-yellow); color: var(--c-black); font-weight: 700; box-shadow: none; }
    .news-tab:hover:not(.news-tab-active) { background: var(--c-white); font-weight: 500; box-shadow: none; }
    .tl-btn:hover:not(:disabled) { background: var(--c-yellow); }

    .vid-btn:hover:not(:disabled) { background: var(--c-black); color: var(--c-yellow); }
    .btn-apply:hover { background: var(--c-yellow); color: var(--c-black); }
    .mega-footer-cta:hover { background: var(--c-yellow); color: var(--c-black); }
    .faq-row:hover .faq-toggle { background: transparent; }
    .signup-download:hover { background: var(--c-yellow); }
    .signup-download:hover .signup-download-text { border-color: transparent; }
    .cookie-accept:hover { background: var(--c-black); color: var(--c-white); }
}
