/* ==========================================================================
   Holo Orb 產品頁樣式
   --------------------------------------------------------------------------
   ★ 全檔已加上 .page-holo-orb 前綴做隔離。

   原因：這份 CSS 跟 Holo Fan 2 有 38 個同名 class
   （feature-split__*、key-features__*、spec__* 等），
   兩邊定義不同、變數值也不同（--t-hero / --t-h …）。
   不隔離的話後載入的會蓋掉先載入的，兩頁都會跑版。

   .page-holo-orb 由 body_class 掛在 <body> 上（見 functions.php）。
   ========================================================================== */

@charset "UTF-8";

/* ==========================================================================
   style.css —— Te-HoloOrb 專案樣式
   --------------------------------------------------------------------------
   結構跟 Coolify 官網那份是同一套慣例（沿用同一套設計語彙，方便風格對齊）：
     1. 變數 → 2. Reset → 3. 基礎排版 → 4. 版面容器/格線
     → 5. 共用元件 → 6. 頁面專屬 → 7. 工具類別 → 8. RWD 斷點
   目前 5～8 節還是空的，開始切版時照這個順序填進去。
   --------------------------------------------------------------------------
   ★ 順序不可調換（由 cascade 決定，不是美觀問題）：
     Reset 要在元件前、工具類別和斷點必須在最後，否則會被蓋掉。
   --------------------------------------------------------------------------
   ★★ 這份最終會被搬進 Shopify 的 section .liquid 檔（包在 {% stylesheet %} 裡）。
   Shopify 會把所有 section 的 {% stylesheet %} 內容合併成同一份全站 CSS，
   所以屆時 :root 變數和下面這些裸選擇器（h1、p、* 等）全部都要往下包一層
   固定的 wrapper class（例如 .cf-holo-orb），不然會漏出去改到 Shopify 主題
   其他頁面的樣式。現在先在本機用 :root／裸選擇器開發沒關係，方便瀏覽器預覽，
   但「搬進 Shopify 前要補前綴」這件事現在先記著，別忘了。
   ========================================================================== */

/* ==========================================================================
   1. 變數（Design Tokens）
   跟 Coolify 官網共用同一套色彩、字級、間距，讓風格看起來是同一個品牌。
   ========================================================================== */
.page-holo-orb {
  /* 色彩 */
  --color-bg: #ffffff;
  --color-surface: #ffffff;
  --color-text: #222222;
  --color-text-muted: #666666;
  --color-border: #e0e0e0;
  --color-primary: #2563eb;
  --color-primary-hover: #1d4ed8;

  /* 字體 */
  --font-sans: Arial, Helvetica,
    "PingFang TC", "Noto Sans TC", "Microsoft JhengHei", sans-serif;

  /* 字級（2026-09-15 對齊 coolifycool.com/holo-fan-2/ 線上實際量測值）
     ★ 全站字級只有這 8 級，各區塊一律用這些變數，不要在下面自己寫死 px，
       否則「統一」會再度走鐘。
     ★ 大標用 clamp(最小, 隨螢幕縮放, 最大)、小字固定不縮——這是線上的做法：
       clamp 的三個值 = 手機最小值 / 中間隨螢幕變化 / 桌機上限。 */
  --t-hero:  clamp(40px, 8vw, 80px);   /* Hero 主標（HOLO ORB）桌機 80 → 手機 40 */
  --t-h:     clamp(34px, 8vw, 50px);   /* 區塊大標　　　　　　桌機 50 → 手機 34 */
  --t-sub:   24px;                     /* 副標、分組標題 */
  --t-card:  22px;                     /* 卡片標題 */
  --t-body:  18px;                     /* 內文 */
  --t-small: 16px;                     /* 小標、麵包屑、規格表 */
  --t-btn:   15px;                     /* 按鈕 */
  --t-badge: 12px;                     /* 標籤（Support / Upload） */

  /* 小標與大標之間的視覺距離 */
  --gap-eyebrow: 20px;

  /* 間距（8px 為基準） */
  --space-1: 0.25rem;
  --space-2: 0.5rem;
  --space-3: 1rem;
  --space-4: 1.5rem;
  --space-5: 2rem;
  --space-6: 3rem;
  --space-7: 4rem;

  /* 版面 */
  --container-max: 1440px;   /* 這頁的設計稿寬度是 1440，跟 Coolify 官網的 1280 不同 */
  --gutter: var(--space-3);
  --radius: 8px;

  /* 卡片外觀 */
  --card-line: #ededed;
  --card-radius: 14px;
  --shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 4px 12px rgba(0, 0, 0, 0.04);
}

/* 2026-08-25：拿掉了深色模式的 @media (prefers-color-scheme: dark) 覆寫。
   這個專案的設計稿沒有深色版本，留著那段的結果是「系統跑深色模式的人看到的
   背景色，跟改 --color-bg 完全無關」——使用者曾經因此以為改背景色沒生效。
   確定不留深色版本，所以整段刪掉；不管使用者系統是什麼模式，永遠顯示
   上面 :root 裡定義的這組顏色。 */

/* ==========================================================================
   2. Reset
   ========================================================================== */
*,
*::before,
.page-holo-orb *::after {
  box-sizing: border-box;
}

.page-holo-orb {
  -webkit-text-size-adjust: 100%; /* 防止 iOS 橫向時自動放大字 */
  scroll-behavior: smooth;
}

body,
h1, h2, h3, h4, h5, h6,
.page-holo-orb p, .page-holo-orb figure, .page-holo-orb blockquote, .page-holo-orb dl, .page-holo-orb dd, .page-holo-orb ul, .page-holo-orb ol {
  margin: 0;
}

ul[class],
.page-holo-orb ol[class] {
  padding: 0;
  list-style: none;
}

/* 圖片、影音一律不撐破容器 —— RWD 最重要的一條 */
img,
picture,
video,
canvas,
svg,
.page-holo-orb iframe {
  display: block;
  max-width: 100%;
  height: auto;
}

input,
button,
textarea,
.page-holo-orb select {
  font: inherit;
  color: inherit;
}

/* 長字串／網址不會撐破版面 */
.page-holo-orb p, .page-holo-orb h1, .page-holo-orb h2, .page-holo-orb h3, .page-holo-orb h4, .page-holo-orb li, .page-holo-orb a {
  overflow-wrap: break-word;
}

/* 尊重使用者的「減少動態效果」設定 */
@media (prefers-reduced-motion: reduce) {
  .page-holo-orb {
    scroll-behavior: auto;
  }
  *,
  *::before,
  .page-holo-orb *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

/* ==========================================================================
   3. 基礎排版
   ========================================================================== */
.page-holo-orb {
  min-height: 100vh;
  min-height: 100dvh; /* 手機瀏覽器動態工具列的正確高度 */
  font-family: var(--font-sans);
  font-size: var(--t-body);
  line-height: 1.7;
  background-color: var(--color-bg);
  color: var(--color-text);
  -webkit-font-smoothing: antialiased;
}

h1 { font-size: var(--t-hero); line-height: 1.15; }
h2 { font-size: var(--t-h);    line-height: 1.15; }
h3 { font-size: var(--t-sub);  line-height: 1.3; }

/* 標題預設 500。Arial 沒有 500 會畫成 400（一般字重），這正是線上網站
   大標的樣子——需要粗體的個別標題（例如 .spec-group__title）再自己覆寫 700。 */
.page-holo-orb h1, .page-holo-orb h2, .page-holo-orb h3 {
  margin-bottom: var(--space-3);
  font-weight: 500;
  text-wrap: balance; /* 標題換行更平均 */
}

.page-holo-orb p {
  margin-bottom: var(--space-3);
  max-width: 70ch; /* 可讀行長上限 */
}

.page-holo-orb a {
  color: var(--color-primary);
  text-decoration-thickness: 1px;
  text-underline-offset: 2px;
}

.page-holo-orb a:hover {
  color: var(--color-primary-hover);
}

.page-holo-orb :focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

/* ==========================================================================
   4. 版面容器 / 格線
   ========================================================================== */
.page-holo-orb .container {
  width: 100%;
  max-width: var(--container-max);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

.page-holo-orb .section {
  padding-block: var(--space-6);
}

/* 自動換行格線：欄寬不足 260px 就自動掉到下一行，不需要寫 media query */
.page-holo-orb .grid {
  display: grid;
  gap: var(--space-4);
  grid-template-columns: repeat(auto-fit, minmax(min(260px, 100%), 1fr));
}

/* 固定欄數版本（配合下方斷點使用） */
.grid--2,
.grid--3,
.page-holo-orb .grid--4 {
  display: grid;
  gap: var(--space-4);
  grid-template-columns: 1fr; /* 手機一律單欄 */
}

.page-holo-orb .flex {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
}

/* ==========================================================================
   5. 共用元件（兩個以上區塊會用到的都放這裡）
   ========================================================================== */

/* 小標（業界叫 eyebrow / kicker）：大標題上面那行小字，例如 "HOLO ORB" */
.page-holo-orb .eyebrow {
  margin-bottom: var(--gap-eyebrow);
  font-size: var(--t-small);
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--color-text-muted);
}

/* 按鈕：目前只有 HOLO ORB 區塊的「Where to Buy」在用，先補上最基本的
   一份（第 8 節的 @media print 其實早就預留了 .btn { display: none } 這條，
   只是一直沒補正式樣式）。顏色先用全站的 --color-primary，之後如果
   Holo Orb 的按鈕要用別的顏色，改這裡兩個 background-color 就好，
   不用去改用到 .btn 的地方。 */
.page-holo-orb .btn {
  display: inline-block;
  min-height: 44px;
  padding: var(--space-2) var(--space-4);
  border: 1px solid transparent;
  border-radius: var(--radius);
  background-color: var(--color-primary);
  color: #ffffff;
  font-size: var(--t-btn);
  font-weight: 600;
  line-height: 44px;
  letter-spacing: 1.2px;
  text-decoration: none;
  text-align: center;
  cursor: pointer;
  transition: background-color 0.2s ease;
}

.page-holo-orb .btn:hover {
  background-color: var(--color-primary-hover);
}

/* 圓角膠囊版本（HOLO ORB 的「Where to Buy」用這個 modifier） */
.page-holo-orb .btn--pill {
  padding-inline: var(--space-5);
  border-radius: 999px;
}


/* ==========================================================================
   6. 頁面專屬樣式
   ========================================================================== */

/* --------------------------------------------------------------------------
   6-1. index.html —— BANNER（第一個滿版區塊）
   跟 Coolify 官網 .banner 同一招：外層 .banner 不設 max-width，寬度 100%、
   背景通到左右兩邊；內層 .container 才把文字收在 --container-max 內置中。

   目前這頁還沒有 header，所以高度直接用滿版視窗高，沒有扣掉任何值。
   之後如果加了 sticky header，要改成
     min-height: calc(100vh - var(--header-h));
     min-height: calc(100dvh - var(--header-h));
   （並在第 1 節補回 --header-h 變數），不然 banner 會比視窗多出一截、
   捲動時會看到 header 下面露出一小段 banner 背景。

   只有這一頁用到，所以先放第 6 節；等第二個頁面也要用同款滿版 banner，
   照最上面的規則把它搬到第 5 節、這裡刪掉。
   -------------------------------------------------------------------------- */
.page-holo-orb .banner {
  /* 底圖是深色照片，文字色寫死成白色，不跟系統淺色模式跑 */
  --color-text-muted: rgba(255, 255, 255, 0.78);
  position: relative;               /* 給文字遮罩／疊層當定位基準，先預留 */
  width: 100%;
  display: flex;
  align-items: center;
  /* 2026-09-15：跟 Holo Fan 2 的 hero 一致 —— 一屏扣掉 header。
     header 是 sticky、永遠蓋在最上面 60px，
     設成整個 100vh 的話區塊底部會被下一區推出畫面，還是要滑。 */
  min-height: calc(100vh - var(--cf-header-h, 60px));
  min-height: calc(100dvh - var(--cf-header-h, 60px));
  padding-block: var(--space-6);
  color: #ffffff;
  text-align: left;
  /* 底圖。路徑從「CSS 檔自己的位置」算起，所以是 ../img/（HTML 裡才寫 img/）。
     background-color 留著當圖片還沒載完／載入失敗時的底色，不要刪。 */
  background-color: #0b0f16;
  background-image: url("../img/holo-orb-banner-home.png");
  background-size: cover;         /* ← 填滿整個區塊，比例不符的部分裁掉 */
  background-position: center;    /* ← 裁的時候保留哪一塊：center／right center／50% 40% 都可填 */
  background-repeat: no-repeat;
}

/* banner 的文字比其他區塊稍微往左一點（2026-09-15）。

   容器是置中的，所以「把容器放寬」就等於「左右兩邊各往外推一半」。
   這裡比全站的 --container-max(1440) 寬 80px → 左邊往外移 40px。
   ← 要再往左就把 80px 調大，**移動量是這個數字的一半**。

   ※ 螢幕比 1520 窄的時候（1440、平板、手機）這行完全不起作用，
     容器本來就被螢幕寬度限制住了，畫面跟改之前一模一樣。
     也就是說這個調整只影響寬螢幕。 */
.page-holo-orb .banner .container {
  width: 100%;
  max-width: calc(var(--container-max) + 80px);
}

/* 2026-09-15：照設計稿重排三行的層級與大小。
   由上到下是「主標 → 副標 → 說明」，三級一路變小：
     HOLO ORB                                   最大、粗體
     MADE TO STAND OUT                          中等、一般字重
     See your favourite content in a new…       最小、淡一階

   ※ 字級用 clamp(最小, 隨螢幕縮放, 最大)，所以不用另外寫斷點。
     桌機（1440）實際會是：主標 72px、副標 44px、說明 17px。
   ※ 這幾個數字是從你給的設計稿截圖回推的，不是 Figma 的原始值，
     會有幾 px 的誤差。有正式數字跟我說，改這三行就好。 */
.page-holo-orb .banner__title {
  max-width: none;
  margin-bottom: var(--space-1);    /* ← 主標到副標，刻意很近（設計稿上是一組） */
  font-size: var(--t-hero);
  font-weight: 400;
  line-height: 1.1;
  letter-spacing: -0.01em;
}

/* 副標：比主標細也比較小。Arial 只有 400／700，這裡用 400（一般字重），
   跟主標的 700 拉開對比——設計稿上這兩行的粗細差異很明顯。 */
.page-holo-orb .banner__subtitle {
  max-width: none;
  margin-bottom: var(--space-3);    /* ← 副標到說明文字 */
  font-size: clamp(1.5rem, 3.1vw, 2.75rem);
  font-weight: 400;
  line-height: 1.2;
}

/* 說明：max-width 放寬到 48ch，讓這句話在桌機上一行排完
   （原本是 34ch，會斷成兩行，跟設計稿不一樣）。手機還是會自然換行。 */
.page-holo-orb .banner__text {
  max-width: 48ch;
  margin-bottom: 0;
  color: var(--color-text-muted);
}

/* --------------------------------------------------------------------------
   6-2. index.html —— HOLO ORB（左：大圖＋縮圖列／右：文字）
   搬自 Coolify 官網 coolify-child 主題（feature-split 元件），拿掉官網那邊
   的 .cf-site 外層，字級／間距換成這份檔案自己的變數（--fs-*／--space-*），
   跟官網原本的 --t-h／--t-body 那套不是同一組，數值上不會完全一比一，
   先求「排版邏輯一樣、看起來過得去」，等對稿再細調。

   ※ 2026-09-15：文案已照 Holo Orb 設計稿換成正式內容。
     圖片（大圖＋ 6 張縮圖）還是全部留白中，見下面 .feature-split__media／
     .feature-split__icon 的註解。

   手機：單欄，圖在上文字在下。平板以上（768px，見第 8 節）：兩欄並排，
   左圖右文字，文字欄用 flex 撐到跟圖片等高，PRODUCTS 麵包屑貼齊底部、
   標題副標貼齊中間偏上，這個對齊寫在下面 768px 那段，是刻意的視覺效果。
   -------------------------------------------------------------------------- */
.page-holo-orb .feature-split {
  --accent: var(--color-primary);
  padding-block: var(--space-7);
}

.page-holo-orb .feature-split__grid {
  --thumbs: 5;              /* ← 縮圖張數，要跟 HTML 的 <button> 數量一致 */
  --thumb-gap: var(--space-3);
  display: grid;
  grid-template-columns: 1fr;   /* 手機單欄，768px 斷點改兩欄 */
  align-items: center;
  gap: var(--space-6);
}

/* 左：大圖框（設計稿上那張白卡片）。
   顯示哪一張圖由 JS 從縮圖的 data-image 帶進來，這裡不寫 background-image。

   2026-09-15：圖片放上去了（img/Holoorb1~5.png），所以底色從占位的灰色
   #d9d9d9 改成白色——產品照本身是白底去背，底色不是白的話圖片四周會露出
   一圈灰邊。之後如果換成去背透明的圖，這個白底就是它的襯底。

   contain 不裁切是刻意的：這裡放的是產品照，裁到就缺角了。
   目前 5 張圖都是 1254x1254 正方形，跟圖框的 aspect-ratio: 1/1 一致，
   所以實際上不會有留白，contain 只是保險。 */
.page-holo-orb .feature-split__media {
  aspect-ratio: 1 / 1;
  padding: 6%;
  border-radius: var(--card-radius);
  background-color: #ffffff;
  background-size: contain;
  background-position: center;
  background-repeat: no-repeat;
  box-shadow: var(--shadow);
}

/* 縮圖列：張數用 --thumbs 控制，不用手動算欄寬。
   2026-09-15：照設計稿搬到右邊文字欄（顏色列下面），
   所以上方距離從原本貼著大圖的 --thumb-gap 改成 --space-5，
   跟設計稿上「顏色列 → 縮圖」那段留白一致。 */
.page-holo-orb .feature-split__icons {
  display: grid;
  grid-template-columns: repeat(var(--thumbs), 1fr);
  gap: var(--thumb-gap);
  margin-top: var(--space-5);   /* ← 顏色列到縮圖列的距離 */
}

/* 縮圖：預覽圖同樣由 JS 從自己的 data-image 帶進來，這裡不寫 background-image。
   2026-09-15：底色跟著大圖一起從灰色改成白色（原因同上，產品照是白底）。
   縮圖用 cover 而不是 contain——目前圖是正方形、跟縮圖同比例，兩者結果一樣；
   之後如果換成非正方形的圖，cover 會填滿小方格（裁邊），視覺上比留白整齊。 */
.page-holo-orb .feature-split__icon {
  aspect-ratio: 1 / 1;
  padding: 0;
  border: 1px solid var(--color-border);
  border-radius: var(--card-radius);
  background-color: #ffffff;
  background-size: cover;
  background-position: center;
  cursor: pointer;
}

.page-holo-orb .feature-split__icon.is-active {
  border-color: var(--accent);
  border-width: 2px;
}

/* 右：文字欄
   ★ 下面這幾個 margin-bottom 就是設計稿的行距，由上到下一路往下推：
       麵包屑 →(8)→ 大標 →(4)→ 副標 →(32)→ 說明 →(16)→ 分隔線
     大標跟副標之間刻意只留 4px，設計稿上這兩行是當成「一組」在看的，
     隔太開就散掉了。數字都用 --space-N 刻度，要微調直接換級距就好。 */
.page-holo-orb .feature-split__crumb {
  max-width: none;
  margin-bottom: var(--space-2);    /* ← 麵包屑到大標 8px */
  font-size: var(--t-small);
  font-weight: 700;
  color: var(--accent);
}

.page-holo-orb .feature-split__name {
  max-width: none;
  margin-bottom: var(--space-1);    /* ← 大標到副標 4px（刻意很緊，看上面說明） */
  font-size: var(--t-h);
  font-weight: 500;
  line-height: 1.1;
  letter-spacing: -0.01em;
}

.page-holo-orb .feature-split__tagline {
  max-width: none;
  margin-bottom: var(--space-5);    /* ← 副標到說明文字 32px */
  font-size: var(--t-sub);
  font-weight: 600;
  color: var(--color-text);
}

.page-holo-orb .feature-split__item {
  max-width: none;
  margin-bottom: var(--space-3);    /* ← 說明文字到分隔線 16px */
  color: var(--color-text-muted);
}

.page-holo-orb .feature-split__item strong {
  color: var(--color-text);
}

/* 顏色列：上緣一條分隔線，左標籤右數值＋色塊 */
/* 顏色列：上緣那條線就是設計稿的分隔線。
   2026-09-15：原本 margin-top(32) 跟上面說明文字的 margin-bottom(16) 疊在一起
   變成 48px，比設計稿寬太多——margin-top 歸零，距離統一由上面那個元素的
   margin-bottom 決定，才不會兩邊各留一半、改的時候要算兩個地方。 */
.page-holo-orb .feature-split__option {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  margin-top: 0;
  padding-top: var(--space-3);      /* ← 分隔線到 Color 那行字 16px */
  border-top: 1px solid var(--card-line);
}

.page-holo-orb .feature-split__option-label {
  font-size: var(--t-small);
  font-weight: 700;
}

.page-holo-orb .feature-split__option-value {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  font-size: var(--t-small);
  color: var(--color-text-muted);
}

.page-holo-orb .feature-split__swatch {
  flex-shrink: 0;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  border: 1px solid rgba(0, 0, 0, 0.15);
}

.page-holo-orb .feature-split__cta {
  margin-top: var(--space-5);
}

/* --------------------------------------------------------------------------
   6-3. index.html —— KEY FEATURES（五宮格）
   搬自 Coolify 官網同一個 feature-split 區塊下面接的 key-features 元件。
   格子的位置由 CSS 的 :nth-child 依「HTML 出現順序」指定（見下面 768px
   斷點那五行 grid-area）—— HTML 那五個 <figure>/<div> 的順序不能搬動，
   搬了位置會跟著跑掉，要調位置回來改這裡的 grid-area，不要改 HTML 順序。

   手機：五格直的疊下來，每格自己是正方形。768px 以上才組成官網那種
   「兩張直式＋一張橫式＋兩個純色格」的拼貼版面，見第 8 節。

   ※ 圖片（3 張照片格）先留白，官網右下角那個品牌小標記（SVG）也先拿掉了，
     那是 Coolify 自己的 logo，跟 Holo Orb 無關，之後要放自己的標記再說。
   -------------------------------------------------------------------------- */
.page-holo-orb .key-features {
  padding-block: var(--space-7);
}

.page-holo-orb .key-features__title {
  margin-bottom: var(--space-5);
}

.page-holo-orb .key-features__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-3);
}

/* 每一格：深底、文字疊在下緣（.key-features__tile--top 是唯一文字在上緣的） */
.page-holo-orb .key-features__tile {
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  aspect-ratio: 1 / 1;
  overflow: hidden;
  border-radius: var(--card-radius);
  padding: var(--space-4);
  background-color: #14181f;
  color: #ffffff;
}

.page-holo-orb .key-features__tile img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* 照片格才需要底部漸層，讓白字疊在圖片上還讀得出來；純色格（--brand／--soft）
   沒有圖片，用 :has() 判斷「裡面有沒有 img」，不用另外加 class 分辨 */
.page-holo-orb .key-features__tile:has(img)::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(to top, rgba(0, 0, 0, 0.55) 0%, rgba(0, 0, 0, 0) 45%);
}

.page-holo-orb .key-features__tile--top:has(img)::after {
  background: linear-gradient(rgba(0, 0, 0, 0.55) 0%, rgba(0, 0, 0, 0) 45%);
}

.page-holo-orb .key-features__caption {
  position: relative;
  z-index: 1;
  max-width: none;
  margin-bottom: 0;
  font-size: var(--t-card);
  font-weight: 600;
  line-height: 1.25;
  color: #ffffff;
  text-shadow: 0 1px 8px rgba(0, 0, 0, 0.45);
}

.page-holo-orb .key-features__tile--top {
  justify-content: flex-start;
}

/* 兩個純色格：文字疊在左上角，跟 --top 共用同一個對齊方式 */
.page-holo-orb .key-features__tile--brand {
  justify-content: flex-start;
  background-color: #22a2f2;
  color: #14181f;
}

.page-holo-orb .key-features__tile--soft {
  justify-content: flex-start;
  background-color: #cfe8fb;
  color: #14181f;
}

.page-holo-orb .key-features__badge {
  align-self: flex-start;
  margin-bottom: var(--space-3);
  padding: 0.25em 0.7em;
  border-radius: 999px;
  background-color: #14181f;
  color: #ffffff;
  font-size: var(--t-badge);
  font-weight: 600;
}

.page-holo-orb .key-features__label {
  max-width: none;
  margin-bottom: 0;
  font-size: var(--t-card);
  font-weight: 600;
  line-height: 1.25;
}

/* 亮藍色格右下角的品牌標記（Coolify 的雙圈符號）。

   ★★ 2026-09-15 踩過的坑，別再繞回去：
      原本是用 CSS mask 拿 img/logo-02.svg 當遮罩、顏色用 background-color 上。
      走本機伺服器（http://）看起來完全正常，但**使用者是直接開檔案（file://）**，
      在 file:// 底下瀏覽器會把每個檔案當成不同來源，mask 抓不到那個 SVG，
      遮罩失敗的結果是「整個元素被遮光光」——DevTools 裡看得到元素、尺寸顏色
      都對，畫面上卻完全空白，非常難察覺。

      所以改成**把 SVG 直接寫在 HTML 裡**（內嵌），沒有外部請求就沒有這個問題，
      file://、http://、之後搬上 Shopify 都一樣會顯示。
      顏色改由下面的 fill 控制，一樣不用重新匯出 SVG 就能換色。

      ※ img/logo-02.svg 這個原始檔還留著（當作來源備份），但頁面上已經不會
        去讀它了——改顏色改這裡，改形狀才需要回去動那個檔案並重新內嵌。
      ※ 內嵌時已經把原檔的 <style>.cls-1{fill:#3187ea}</style> 和 class 拿掉，
        不然那個舊版亮藍會跟這裡的 fill 打架。 */
.page-holo-orb .key-features__mark {
  position: absolute;
  right: var(--space-4);            /* ← 離右邊多遠（跟格子內距一致） */
  bottom: var(--space-4);           /* ← 離下面多遠 */
  width: 64px;                      /* ← 標記大小，改這個就好（高度由 viewBox 自動算） */
  height: auto;
}

.page-holo-orb .key-features__mark path {
  fill: #0032a0;                    /* ← 標記顏色（設計稿的深藍） */
}

/* --------------------------------------------------------------------------
   6-4. index.html —— SHOW WHAT YOU LOVE（三張上傳類型卡：Image / Video / GIF）
   跟第 4 節的 .grid--3 共用同一個欄數邏輯（手機 1 欄 → 平板 2 欄 → 桌機 3 欄）。
   卡片沒有外框／陰影，純粹是「方形圖框 + 粗體標籤 + 說明文字」三段堆疊。

   ※ 上下間距（標題到副標、副標到卡片列、卡片內部三段之間）都還是先抓的暫定值，
     使用者說了「先上去，到時再微調上下距離跟設計師確認」——之後對稿時
     直接改這幾個 margin 的數值就好，不用動結構。
   -------------------------------------------------------------------------- */
.page-holo-orb .feature-grid {
  padding-block: var(--space-7);
}

.page-holo-orb .feature-grid__title {
  margin-bottom: var(--space-2);    /* ← 標題到副標的距離（暫定，待對稿） */
}

.page-holo-orb .feature-grid__intro {
  max-width: 58ch;
  margin-bottom: var(--space-6);    /* ← 副標到卡片列的距離（暫定，待對稿） */
  color: var(--color-text-muted);
}

/* 方形圖框：先用純色佔位，圖片放進 img/ 後把 <img> 換上去 */
/* 三張卡的方形圖框。2026-09-15 放上實際素材：
   IMAGE 是 .png，VIDEO 跟 GIF 兩張其實是 .mp4 影片（見 HTML 那邊的說明）。

   ※ 底色從占位的灰 #d9d9d9 改成白色——三個素材都是白底產品照，
     底色不是白的話四周會露出一圈灰邊（跟 6-2 大圖框同樣的理由）。
   ※ overflow: hidden 是讓 border-radius 真的裁得到裡面的圖／影片。
     圓角加在外框上，但裡面的 img/video 是獨立的方形元素，不會自己跟著圓，
     要外框「把超出的部分切掉」才看得到圓角——這是技術上必須，不是慣例。 */
.page-holo-orb .feature-grid__media {
  aspect-ratio: 1 / 1;
  margin-bottom: var(--space-3);    /* ← 圖框到標籤的距離（暫定，待對稿） */
  background-color: #ffffff;
  border: 3px solid #d9d9d9;        /* ← 外框線粗細／顏色 */
  border-radius: 15px;              /* ← 圓角大小 */
  overflow: hidden;
}

/* img 跟 video 兩種都要列，選擇器只寫 img 的話影片會吃不到這組尺寸 */
.feature-grid__media img,
.page-holo-orb .feature-grid__media video {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* 2026-09-15：VIDEO 那格專用的內縮。

   三個圖框本來就一樣大，問題出在素材本身的構圖鬆緊不同——
   量出來產品佔畫面高度的比例是：IMAGE 62%、VIDEO 86%、GIF 62%，
   所以 VIDEO 直接放會比左右兩張看起來大一截。

   padding 讓影片只佔到框內的 (100% - 14%*2) = 72%，
   72% × 86% ≈ 62%，就跟另外兩張一樣大了。
   （padding 算在框的內部是因為全站有 box-sizing: border-box，見第 2 節 Reset，
   所以加 padding 只會把裡面的影片壓小，外框大小完全不變、三格還是等寬。）

   ← 要微調就改這個數字：數字越大影片越小。
     素材換掉之後如果構圖跟其他兩張一樣鬆，整條規則連同 HTML 的
     --inset class 一起拿掉即可。 */
.page-holo-orb .feature-grid__media--inset {
  padding: 14%;
}

.page-holo-orb .feature-grid__label {
  margin-bottom: var(--space-1);    /* ← 標籤到說明文字的距離（暫定，待對稿） */
  font-size: var(--t-card);
  font-weight: 600;
}

.page-holo-orb .feature-grid__text {
  max-width: none;
  margin-bottom: 0;
  font-size: var(--t-body);
  color: var(--color-text-muted);
}

/* --------------------------------------------------------------------------
   6-5. index.html —— COOLIFY STUDIO（標題＋一張大圖）
   結構跟上一區一樣簡單：標題、副標、然後一張佔位圖框。
   圖框比例先抓 16:9，設計稿給實圖之後如果比例不同，改這裡的 aspect-ratio 就好，
   上下間距一樣是暫定值，等對稿再調。
   -------------------------------------------------------------------------- */
.page-holo-orb .studio {
  padding-block: var(--space-7);
}

.page-holo-orb .studio__title {
  margin-bottom: var(--space-2);    /* ← 標題到副標的距離（暫定，待對稿） */
}

.page-holo-orb .studio__intro {
  max-width: 58ch;
  margin-bottom: var(--space-6);    /* ← 副標到圖框的距離（暫定，待對稿） */
  color: var(--color-text-muted);
}

/* 圖框。2026-09-15 放上實際素材後改過做法：

   原本是「寫死 aspect-ratio: 16/9 + object-fit: cover」，也就是先決定框的比例、
   多出來的部分裁掉。但這兩區放的是 **Coolify Studio 的 app 介面截圖**
   （1572x1001 和 1566x1005，比例約 1.57，不是 16:9 的 1.778），
   用 cover 會上下各裁掉約 12%——studio 那張的視窗控制列、custom 那張底部的
   播放清單都會被切掉。**介面截圖被裁到就是切掉 UI，使用者看不到完整畫面**，
   跟裁產品照的性質完全不同。

   所以改成「不限制框的高度，讓圖片自己撐開」：框的高度 = 圖片的實際高度，
   完全不裁切。圓角照樣有效，因為框收合到剛好等於圖片大小，
   overflow: hidden 裁得到（如果改用 object-fit: contain 圓角反而會失效，
   那是 Coolify 專案踩過的坑）。

   ※ 代價：兩區的高度會跟著圖片比例跑，不再固定。目前兩張比例幾乎一樣
     （1.570 / 1.558），所以看起來仍然整齊。
   ※ 之後如果換成產品照那類「裁一點沒差」的素材，要改回固定比例的話，
     把 aspect-ratio 和 object-fit: cover 加回來即可。 */
.page-holo-orb .studio__frame {
  background-color: #f0f0f0;        /* 圖片載入前的底色，載完就看不到了 */
  border-radius: var(--radius);
  overflow: hidden;
}

.page-holo-orb .studio__frame img {
  width: 100%;
  height: auto;                     /* ← 高度跟著圖片原始比例走，不裁切 */
}

/* 置中版本：跟 .studio 共用同一套骨架，只覆寫文字對齊方式，不重複結構。
   .studio__intro 有 max-width，box 本身預設會貼在容器左邊，
   只加 text-align 只會讓文字在那個「偏左的窄框」裡置中，看起來還是偏左——
   要連 box 一起移到正中間，margin-inline: auto 這行不能省。
   .studio__title 沒有設 max-width，本來就跟 container 一樣寬，
   所以標題只要 text-align 就會準確置中，不需要 margin-inline。 */
.page-holo-orb .studio--center .studio__title {
  text-align: center;
}

.page-holo-orb .studio--center .studio__intro {
  margin-inline: auto;
  text-align: center;
}

/* --------------------------------------------------------------------------
   6-6. index.html —— MAKE THE SPACE YOURS（置中露出式輪播）
   跟 Coolify 官網的 .feature-scroll 是同一個家族（都是可橫向切換的卡片列），
   但邊界處理完全不同，所以另外命名，不共用 class：
     .feature-scroll → 左緣貼齊 container、只有右側露出（scroll-snap-align: start）
     .carousel       → 中間那張置中，左右兩側都露出一截（scroll-snap-align: center）

   互動邏輯在 JS/main.js（找 .carousel 那一段）：左右箭頭、分頁點都是
   移動 .carousel__track 的 scrollLeft，實際對齊靠 scroll-snap 自動吸附。

   ※ 只有 3 張卡片、頭尾兩張沒有多留緩衝空間，所以頭尾兩張捲到底時
     沒辦法像中間那張一樣精準置中（細節寫在 JS 的 clampStops() 註解裡）。
     這是刻意先求「能動」的簡化版，之後想要頭尾也完全置中，
     要在 .carousel__track 左右加對應寬度的留白，數學上會比較複雜。
   -------------------------------------------------------------------------- */
.page-holo-orb .carousel {
  padding-block: var(--space-7);
}

.page-holo-orb .carousel__title {
  margin-bottom: var(--space-2);
}

.page-holo-orb .carousel__intro {
  max-width: 58ch;
  margin-bottom: var(--space-6);
  color: var(--color-text-muted);
}

.page-holo-orb .carousel__viewport {
  position: relative;               /* 左右箭頭的定位基準 */
}

/* 真正可以捲動的版本：卡片總寬度故意大於 viewport，overflow-x: auto
   讓超出的部分變成可以捲動（而不是單純裁掉看不到）。
   scroll-snap-type: x mandatory 讓放開手指／捲動停下時，一定會吸附到
   最近的一張卡片上（每張卡片自己的 scroll-snap-align: center 決定
   要吸附在「置中」的位置，見 .carousel__slide）。 */
.page-holo-orb .carousel__track {
  display: flex;
  gap: var(--space-4);              /* ← 卡片間距 */
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scrollbar-width: none;             /* Firefox */
  -ms-overflow-style: none;          /* 舊版 Edge */
}

.page-holo-orb .carousel__track::-webkit-scrollbar {
  display: none;                     /* Chrome / Safari */
}

.page-holo-orb .carousel__slide {
  flex: 0 0 auto;
  /* ← 卡片寬度，決定中間卡片多大、兩側露出多少。三張卡片同寬，中間那張
     因為置中而完整顯示，兩側因為被裁掉一部分，看起來自然變窄。
     公式（給下次調數字用）：兩側露出比例 ≈ 50% − 卡片寬度% ÷ 2 − 間距% ÷ 2。
     卡片越寬，總寬度超出 viewport 越多，兩側被裁掉的部分也越多，
     露出的邊反而越窄——這就是設計稿「中間佔大部分、兩側只留一條邊」的做法。
     目前 75% 對應大概露出 10% 左右，數字是先抓的，看畫面微調即可。 */
  width: 75%;
  /* ← 卡片比例。2026-09-15 從原本估的 16/9 改成 3/2，對齊實際素材的比例
     （三張都是 1536x1024 ＝ 3:2）。原本 16/9 會讓 object-fit: cover 上下
     各裁掉約 16%——這一區的三張是情境照，裁掉的正好是餐盤、層架、床頭櫃
     那些構成「空間感」的東西，跟這區「MAKE THE SPACE YOURS」的主題衝突。
     現在比例一致，等於完全不裁切。
     ※ 之後換素材如果比例不同，改這一行對齊新素材即可。 */
  aspect-ratio: 3 / 2;
  scroll-snap-align: center;         /* 捲動停下時，這張卡片要吸附在正中央 */
  background-color: #d9d9d9;
  border-radius: var(--radius);
  overflow: hidden;
}

.page-holo-orb .carousel__slide img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* 左右箭頭：白底圓形，裡面是純 CSS 畫的三角形（border trick，沒有另外拉 SVG）。
   border-width 四個值上/右/下/左：把「左邊」那條加粗到有寬度、其餘設 0，
   四條邊在轉角處自然斜接，看起來就是一個朝右的三角形。 */
.page-holo-orb .carousel__arrow {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  z-index: 1;
  display: grid;
  place-items: center;
  width: 36px;                       /* ← 按鈕大小（原本 44px，調小一點） */
  height: 36px;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background-color: #ffffff;
  box-shadow: var(--shadow);
  cursor: pointer;
}

/* 按鈕變小之後，捲到頭／捲到底時要能停用（同 Coolify 官網 .feature-scroll__arrow
   的手法），disabled 狀態變淡且不能點，避免使用者以為卡住了。 */
.page-holo-orb .carousel__arrow:disabled {
  opacity: 0.35;
  cursor: default;
}

.page-holo-orb .carousel__arrow::before {
  content: "";
  width: 0;
  height: 0;
  margin-left: 2px;                 /* 三角形視覺重心偏右，補一點讓它看起來置中 */
  border-style: solid;
  border-width: 6px 0 6px 10px;     /* 上 0／右 0／下 0／左 10px → 三角形朝右
                                        （原本 8/0/8/12，跟著按鈕一起縮小） */
  border-color: transparent transparent transparent #14181f;
}

.page-holo-orb .carousel__arrow--prev {
  left: var(--space-4);
}

.page-holo-orb .carousel__arrow--prev::before {
  margin-left: -2px;
  margin-right: 2px;
  transform: rotate(180deg);        /* 同一個三角形轉 180 度變成朝左，不用畫兩份 */
}

.page-holo-orb .carousel__arrow--next {
  right: var(--space-4);
}

/* 分頁點：未選到是淺灰的短橫線，選到的變深、變寬（同 Coolify 官網
   .feature-scroll__dot 的手法——按鈕本身只負責觸控範圍，看得到的線用 ::before 畫）。
   顏色直接借用第 1 節既有的變數，不新增色票：
     未選到 → var(--color-border)（淺灰）
     選到   → var(--color-text)（深灰／黑）*/
.page-holo-orb .carousel__dots {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;               /* ← 三顆點的距離 */
  margin-top: var(--space-4);
}

/* 2026-08-25：改成「按鈕寬度＝線本身寬度」，不再另外留一圈固定 36px 的
   隱形觸控範圍——之前那版不管線多細，按鈕都佔 36px，就算 gap 調到 0，
   兩條線之間還是隔著左右各自的隱形邊界，靠不近。現在按鈕寬度跟著線一起
   變（未選中 16px、選中 32px），gap 才是兩條線之間唯一的距離。 */
.page-holo-orb .carousel__dot {
  display: grid;
  place-items: center;
  width: 16px;                       /* ← 未選中的寬度 */
  height: 20px;                      /* 高度维持原本的觸控高度 */
  padding: 0;
  border: 0;
  background: none;
  cursor: pointer;
  transition: width 0.2s ease;
}

.page-holo-orb .carousel__dot.is-active {
  width: 32px;                       /* ← 選中的寬度，比未選中明顯長一倍 */
}

.page-holo-orb .carousel__dot::before {
  content: "";
  display: block;
  width: 100%;                       /* 線永遠填滿按鈕，兩者寬度一起變 */
  height: 6px;
  border-radius: 999px;
  background-color: var(--color-border);
  transition: background-color 0.2s ease;
}

.page-holo-orb .carousel__dot.is-active::before {
  background-color: var(--color-text);
}

/* --------------------------------------------------------------------------
   6-7. index.html —— SPECIFICATION（左：分類清單／右：規格內容）
   跟 Coolify 官網的 .spec-table 是同一組元件（<dl> 語意：dt 規格名稱、
   dd 規格值），只是外面多包了一層左右兩欄的版面：左邊窄欄放分類清單，
   右邊放對應的內容。

   ※ 設計師註解：規格待補充，這裡目前只是版型示範——只有一個分類
     （Basic Specs）、一個內容區（BASICS）、一列規格（Color: Black）。
     之後要加分類，複製一份 .spec__nav-item；要加規格列，複製一份
     .spec-table__row；要加內容區塊，複製一份 .spec-group。
     目前分類清單還沒接點擊切換內容的功能（只有一類，切了也沒東西可切）。
   -------------------------------------------------------------------------- */
/* 2026-09-15：這一區的文字規格全部改成設計指定的固定值（字級、字重、顏色）。

   ★ Arial 只有 400（Regular）和 700（Bold）兩種字重。
     CSS 寫 500 或 600 瀏覽器找不到對應字重，會退回 400 —— 下面
     .spec__title 的 font-weight: 500 實際畫出來就是 400。
     這裡照設計值寫 500 而不是直接寫 400，是為了保留設計意圖：
     之後如果換成有多種字重的字體（例如 Inter），這裡就會自動變成
     真正的 Medium，不用回來改。看起來「沒生效」是正常的，不是 bug。 */
.page-holo-orb .spec {
  --accent: #bce1ff;      /* ← 這一區的重點色：左側選中項目的指示線 */
  padding-block: var(--space-7);
}

/* 區塊大標。font-size 蓋掉第 3 節 h2 的 clamp()、font-weight 蓋掉那邊的 700。 */
.page-holo-orb .spec__title {
  margin-bottom: var(--space-6);
  font-size: var(--t-h);  /* 全站區塊大標同一級 */
  font-weight: 500;       /* ← Arial 沒有 500，實際會畫成 400（見本節開頭說明） */
  color: #222222;
}

.page-holo-orb .spec__layout {
  display: grid;
  grid-template-columns: 200px 1fr;   /* ← 左側分類欄的寬度 */
  gap: var(--space-6);
}

.page-holo-orb .spec__nav {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

/* 分類項目：左側一條豎線，選中時變成重點色。豎線用 border-left 畫，
   不選中時線是透明的（保留寬度，選到時才不會讓文字位移）。 */
.page-holo-orb .spec__nav-item {
  padding: 0;
  padding-left: var(--space-3);
  border: 0;
  border-left: 5px solid transparent;   /* ← 指示線粗細（未選中時透明，保留寬度避免文字位移） */
  background: none;
  text-align: left;
  font-size: var(--t-body);           /* 跟內文同一級 */
  font-weight: 700;
  color: #666666;                     /* ← 未選中的文字顏色 */
  cursor: pointer;
  text-decoration: none;              /* 這是 <a>，要拿掉預設底線 */
}

/* ★ 這條 :hover 不能省。第 3 節有一條全站的 a:hover { color: var(--color-primary-hover) }，
   它的權重（元素+虛擬類別）比上面那條純 class 的 .spec__nav-item 高，
   不擋下來的話滑鼠移過去分類文字會變成藍色。 */
.page-holo-orb .spec__nav-item:hover {
  color: #222222;
}

.page-holo-orb .spec__nav-item.is-active {
  border-left-color: var(--accent);   /* ← 指示線顏色，改本節開頭的 --accent */
  color: #222222;                     /* ← 選中的文字顏色 */
}

/* 欄位表頭（Item / Specification）。
   grid-template-columns 要跟下面 .spec-table__row 完全一樣，欄位才會對齊——
   兩邊都是 200px 1fr，其中一邊改了另一邊也要跟著改。 */
.page-holo-orb .spec__head {
  display: grid;
  grid-template-columns: 200px 1fr;
  padding-bottom: var(--space-3);
  font-size: var(--t-small);
  font-weight: 700;
  color: var(--color-text-muted);
}

/* 內容區：一個分類一個 .spec-group，上緣一條分隔線 */
.page-holo-orb .spec-group {
  padding-top: var(--space-4);
  border-top: 1px solid var(--card-line);
  /* 從左側分類跳過來時，停的位置往下留一點空隙，標題才不會緊貼畫面上緣。
     這是給錨點跳轉專用的屬性，不影響一般排版。 */
  scroll-margin-top: var(--space-6);
}

.page-holo-orb .spec-group + .spec-group {
  margin-top: var(--space-6);         /* ← 分類與分類之間的距離 */
}

.page-holo-orb .spec-group__title {
  margin-bottom: var(--space-4);
  font-size: var(--t-sub);
  font-weight: 700;
  color: #222222;
}

.page-holo-orb .spec-table__row {
  display: grid;
  grid-template-columns: 200px 1fr;   /* ← 跟左側分類欄同寬，畫面上對得整齊 */
  padding-block: var(--space-3);
}

/* 列與列之間加一條淺線分開——原本只有一列看不出來，
   現在多列了，第一列不用線（已經有 .spec-group 自己的上緣線了） */
.page-holo-orb .spec-table__row + .spec-table__row {
  border-top: 1px solid var(--card-line);
}

/* 項目名稱（左）與數值（右）：字級字重相同，只差顏色 */
.page-holo-orb .spec-table dt {
  font-size: var(--t-small);
  font-weight: 400;
  color: #666666;         /* ← 項目名稱顏色 */
}

.page-holo-orb .spec-table dd {
  margin: 0;
  font-size: var(--t-small);
  font-weight: 400;
  color: #222222;         /* ← 數值顏色 */
}

/* ==========================================================================
   7. 工具類別
   ========================================================================== */
.text-center { text-align: center; }
.text-muted  { color: var(--color-text-muted); }
.mx-auto     { margin-inline: auto; }
.mt-4        { margin-top: var(--space-4); }
.mb-0        { margin-bottom: 0; }

.page-holo-orb .sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

/* ==========================================================================
   8. RWD 斷點（mobile-first：先寫手機樣式，再往上加）
   ---------------------------------------------------------------------------
   sm  ≥ 480px   大手機
   md  ≥ 768px   平板 / 直立
   lg  ≥ 1024px  平板橫向 / 小筆電
   xl  ≥ 1280px  桌機
   ========================================================================== */

/* ---- sm：≥ 480px ---- */
@media (min-width: 480px) {
  .page-holo-orb {
    --gutter: var(--space-4);
  }
}

/* ---- md：≥ 768px ---- */
@media (min-width: 768px) {
  .page-holo-orb {
    --gutter: var(--space-5);
  }

  .grid--2,
  .grid--3,
  .page-holo-orb .grid--4 {
    grid-template-columns: repeat(2, 1fr);
  }

  .page-holo-orb .section {
    padding-block: var(--space-7);
  }

  /* 2026-09-15：使用者要求這一區也「剛好佔滿一個螢幕」，
     做法跟 6-1 banner 和下面的 KEY FEATURES 同一招：
     min-height 兩行（vh fallback + dvh 真值）+ flex 垂直置中。
     這頁沒有 header 所以不用扣高度；之後加了 sticky header，
     這裡要跟 banner、KEY FEATURES 三個地方一起改成 calc(100dvh - var(--header-h))。

     ※ 跟 KEY FEATURES 一樣只在 768px 以上套用：手機是「大圖 + 一整欄文字」
       直的疊下來，高度天生超過一個螢幕，硬壓只會把內容擠爛。
     ※ padding-block 從基礎的 --space-7(64px) 縮成 --space-4(24px)，
       留給內容的高度才夠。 */
  .page-holo-orb .feature-split {
    display: flex;
    align-items: center;
    min-height: 100vh;
    min-height: 100dvh;
    padding-block: var(--space-4);
  }

  .page-holo-orb .feature-split > .container {
    width: 100%;
  }

  /* HOLO ORB：手機單欄 → 這裡開始兩欄，左圖右文字。

     max-width 那行是「螢幕矮的時候」的保險（跟 KEY FEATURES 那條同一個道理）：
     大圖是正方形，高度＝寬度＝欄寬，而欄寬是跟著視窗「寬度」走的——
     所以視窗一旦「寬但矮」（例如 1440x700 的筆電視窗），圖就會比可用高度
     還高、把區塊頂出一個螢幕。

     ★ 這裡限制的是「整個 grid 的寬度」，不是大圖自己的 max-width。
       試過在 .feature-split__media 上加 max-width + margin-inline: auto，
       結果 margin: auto 會讓它從「填滿欄寬」變成「縮到內容大小」，
       再跟 aspect-ratio 互相牽制，圖被算成 461px（欄寬明明有 640）。
       改成縮整個 grid 就沒這個問題：兩欄一起等比變窄，圖維持正方形。

     算式：欄寬 =（grid 寬 - 間距）÷ 2，而圖高 = 欄寬，
     所以要讓圖高 ≤ 可用高度，grid 寬就要 ≤ 可用高度 × 2 + 間距。
     可用高度 = 一螢幕 - 80px（上下 padding 48 + 一點餘裕）。
     視窗夠高時算出來的值比容器還寬，等於沒有限制，畫面完全不變。 */
  .page-holo-orb .feature-split__grid {
    grid-template-columns: 1fr 1fr;
    align-items: stretch;
    max-width: calc((100dvh - 80px) * 2 + var(--space-6));
    margin-inline: auto;
  }

  /* 文字欄撐到跟左邊大圖等高，內容一律靠上排，只有最後的按鈕沉到底部。

     2026-09-15 改過：原本是 Coolify 官網那招「麵包屑 margin-top: auto、
     副標 margin-bottom: auto」把內容上下撐開分散，但 Holo Orb 的設計稿
     不是那樣——設計稿上麵包屑、大標、副標是一組，從最上面依序往下排，
     行距是固定的（見 6-2 節那幾個 margin-bottom），只有 Where to Buy
     被推到最底下、跟左邊大圖的底邊切齊。所以那兩條 auto 已經拿掉，
     改成只在按鈕上放一個 margin-top: auto。

     ※ margin-top: auto 的意思是「剩下的空間全部塞在我上面」，
       所以不管文字多長、大圖多高，按鈕永遠貼齊底部，不用算高度。
       原本那條用 --thumbs／--thumb-gap 算按鈕位置的 calc() 也一起拿掉了
       （縮圖列搬到文字欄裡之後，按鈕自然接在它下面，不需要再自己算）。 */
  .page-holo-orb .feature-split__body {
    display: flex;
    flex-direction: column;
    height: 100%;
  }

  .page-holo-orb .feature-split__cta {
    align-self: start;
    margin-top: auto;     /* ← 把按鈕推到文字欄最底部，跟左邊大圖底邊切齊 */
  }

  /* 2026-09-15：使用者要求這一區「剛好佔滿一個螢幕」。
     做法跟 6-1 banner 同一招：min-height 兩行（vh fallback + dvh 真值），
     再用 flex + align-items: center 把內容垂直置中。
     這頁目前沒有 header，所以不用扣 header 高度；之後如果加了 sticky header，
     這兩行要跟 banner 一起改成 calc(100dvh - var(--header-h))。

     ※ 只在 768px 以上套用是刻意的：手機是五格正方形直的疊下來，
       高度天生就超過一個螢幕，硬壓只會把圖擠爛。
     ※ padding-block 從基礎的 --space-7(64px) 縮成 --space-4(24px)，
       不縮的話標題＋上下留白會把拼貼圖擠出畫面外。
     ※ 這裡是 min-height 不是 height —— 內容如果比一螢幕高（例如之後
       標題變多行、或 grid 的 aspect-ratio 改大），區塊會跟著變高而不是
       裁掉內容。真的要「絕不超過一螢幕」得改用 height，但那樣就得處理
       內容被壓縮的問題（Coolify 專案踩過，CLAUDE.md 已知陷阱第 9 條）。 */
  .page-holo-orb .key-features {
    display: flex;
    align-items: center;
    min-height: 100vh;
    min-height: 100dvh;
    padding-block: var(--space-4);
  }

  .page-holo-orb .key-features > .container {
    width: 100%;
  }

  /* KEY FEATURES：手機五格直的疊下來 → 這裡開始組成拼貼版面
     （2 張直式跨兩列＋1 張橫式跨兩欄＋2 個純色格）。
     grid-area 的順序對應 HTML 裡 5 個 tile 出現的順序，不是看畫面位置，
     要調位置改這五行，不要去改 HTML 的先後順序。 */
  .page-holo-orb .key-features__grid {
    grid-template-columns: 1.15fr 1fr 1fr 1.15fr;
    grid-template-rows: 1fr 1fr;
    aspect-ratio: 599 / 264;

    /* 視窗「寬但矮」時（例如 1440x700 的筆電視窗）的保險。
       拼貼圖是固定比例，螢幕越寬圖就越高，高度是被寬度決定的——
       所以要讓它在矮視窗變小，只能從「限制寬度」下手，不能直接限高
       （限高會跟 aspect-ratio 打架，圖會變形或留黑邊）。

       算式：可用高度 = 一螢幕 - 140px（標題約 77 + 上下留白 48 + 一點餘裕），
       再乘以比例 599/264 換算回「這個高度對應多寬」。
       視窗夠高的時候算出來的值比容器還寬，等於沒有限制，畫面不變。
       margin-inline: auto 讓縮小後的圖維持置中。 */
    max-width: calc((100dvh - 140px) * 599 / 264);
    margin-inline: auto;
  }

  .page-holo-orb .key-features__tile {
    aspect-ratio: auto;
  }

  .key-features__tile:nth-child(1) { grid-area: 1 / 1 / span 2; }
  .key-features__tile:nth-child(2) { grid-area: 1 / 2 / auto / span 2; }
  .key-features__tile:nth-child(3) { grid-area: 2 / 2; }
  .key-features__tile:nth-child(4) { grid-area: 2 / 3; }
  .key-features__tile:nth-child(5) { grid-area: 1 / 4 / span 2; }
}

/* ---- lg：≥ 1024px ---- */
@media (min-width: 1024px) {
  .page-holo-orb .grid--3 {
    grid-template-columns: repeat(3, 1fr);
  }

  .page-holo-orb .grid--4 {
    grid-template-columns: repeat(4, 1fr);
  }
}

/* ---- xl：≥ 1280px ---- */
@media (min-width: 1280px) {
  .page-holo-orb {
    --gutter: var(--space-6);
  }
}

/* ---- 列印 ---- */
@media print {
  .btn { display: none; }

  .page-holo-orb {
    background: #fff;
    color: #000;
  }
}

/* ---- banner__subtitle 跟 Holo Fan 2 的 hero 副標一致 ----
   2026-09-15：MADE TO STAND OUT 原本是 18px/400（跟內文同級），
   要改成跟 Holo Fan 2 的「The world's first Holographic PC Fan」一樣：
   24px / 600。 */
.page-holo-orb .banner__subtitle{
  /* !important 是必要的：coolify.css 有一條
     .cf-site .banner p:not(.eyebrow) 也命中這個元素，
     而 coolify.css 載入在 holo-orb.css 之後，權重相同時它贏。 */
  font-size: var(--t-sub) !important;
  font-weight: 600 !important;
}

/* ---- banner 高度與行距微調 ----
   2026-09-15

   ① 高度：原本只扉 header，還超出 32px。
     登入時 WordPress 管理列也卡掉 32px，兩個都要扉才是真正可視高度。
     --wp-admin--admin-bar--height 是 WordPress 提供的變數：
     登入 32px、訪客 0px，所以兩邊都正確。

   ② 行距：大標 80px 配 92px 行高（1.15）太鬆，收到 1.02；
     大標到副標的 24px 下距也收到 8px。 */
.page-holo-orb .banner{
  min-height: calc(100vh - var(--wp-admin--admin-bar--height, 0px) - var(--cf-header-h, 60px));
  min-height: calc(100dvh - var(--wp-admin--admin-bar--height, 0px) - var(--cf-header-h, 60px));
}

.page-holo-orb .banner__title{
  /* !important：coolify.css 的大標組規則也命中這裡，而它載入在後。 */
  line-height: 1.02 !important;
  margin-bottom: var(--space-2) !important;
}

.page-holo-orb .banner__subtitle{
  line-height: 1.15 !important;
}

/* ---- banner 容器跟 header 對齊 ----
   2026-09-15：HOLO ORB 文字沒跟 header 的 logo 對齊。

   原因：banner 的 .container 最大寬是 1536px，
   header 的是 1456px（--container-max），
   寬了 80px 就令左緣往外推 40px。

   改成跟 header 同一個變數，這樣不管視窗多寬都會對齊。 */
.page-holo-orb .banner > .container{
  max-width: var(--container-max, 1456px);
}

/* ---- 區塊大標 50px ----
   2026-09-15：SHOW WHAT YOU LOVE / COOLIFY STUDIO / CUSTOM CONTENT DISPLAY
   原本 36px，改成 50px（跟 Holo Fan 2 的區塊大標同級）。
   --t-h 已經是 clamp(34px, 8vw, 50px)，直接用它。 */
.page-holo-orb .feature-grid__title,
.page-holo-orb .studio__title{
  font-size: var(--t-h) !important;
}

/* ==========================================================================
   對齊 Holo Fan 2 字級規格（2026-09-15）
   --------------------------------------------------------------------------
   按設計定案的字級表比對後，這一頁有三處跟規格不符：
     ① KEY FEATURES 大標        36px → 50px
     ② MAKE THE SPACE YOURS 大標 36px → 50px
     ③ 各區導言（intro）           17px → 18px

   ※ 大標用 --t-h（clamp 34→50px），手機上會自動縮小不會爆版。
   ※ !important 是因為 coolify.css 載入在後，同權重時它會贏。
   ========================================================================== */
.page-holo-orb .key-features__title,
.page-holo-orb .carousel__title{
  font-size: var(--t-h) !important;
}

.page-holo-orb .feature-grid__intro,
.page-holo-orb .studio__intro,
.page-holo-orb .carousel__intro{
  font-size: var(--t-body) !important;
}

/* ---- 按鈕跟 Holo Fan 2 一致 ----
   2026-09-15：Where to Buy 按鈕要跟 Holo Fan 2 完全一樣。

   兩邊差異：
     底色     #2563EB 深藍  → #BCE1FF 淺藍
     文字色   白字        → #14181F 深色
     padding  8px 32px    → 0 24px（高度靠 line-height 撐）
     高度     62px        → 38px

   字級/字重/字距/圓角本來就一樣，不用改。
   hover 的 #32A1E6 白字是 coolify.css 的全站規則，會自動套用。 */
.page-holo-orb .btn{
  padding: 0 24px !important;
  /* Holo Fan 2：1px 透明邊框 + line-height 36px，合起來剛好 38px。 */
  border: 1px solid transparent !important;
  min-height: 36px;
  line-height: 36px !important;
  background-color: #BCE1FF !important;
  color: #14181F !important;
}

.page-holo-orb .btn:hover,
.page-holo-orb .btn:focus-visible{
  background-color: #32A1E6 !important;
  color: #fff !important;
}

/* ---- logo 跟 Holo Fan 2 同大 ----
   2026-09-15：Coolify Studio Software 格子右下的 logo
   原本 64×40，改成跟 Holo Fan 2 一樣的 100×62。
   height: auto 保證等比；右下角固定，所以是往左上長。 */
.page-holo-orb .key-features__mark{
  width: 100px !important;
  height: auto !important;
}
