畫面上「不是內容」的東西(logo、收音狀態、日期時間、對話框)叫 chrome。每個狀態只會落在三個層級之一, 由狀態決定、不由畫面決定。層級切換用 200ms 淡入淡出,一個任務裡只切一次進、一次出。
| 層級 | 留什麼 | 拿掉什麼 | 用在 | 版型 |
|---|---|---|---|---|
| FULL · 完整 | logo、收音狀態、日期時間、AI 區、safe area、對話框 | — | 所有可以自由對話的狀態:對話畫面、Stop Idle、Review、Touch Panel、全部例外狀態 | --dialog · --cover |
| AMBIENT · 氛圍 | logo、收音狀態、AI 字幕(若有) | 日期時間、對話框 | 內容主導、介面退到最少:Moving、Welcome / Exit Standby、Trailer 播放 | --standby · --cover-strong · --media |
| FOCUS · 專注 | AI 的一句指示、任務內容、campaign 外框、指令膠囊(辨識到指令時)、重要指令的提示一行 | logo、收音狀態、日期時間、電影 logo、對話框 | 拍照 Position / Countdown / Capture / Success | --media --camera |
1. 使用者正在做一件有明確結束事件的單一任務(不綁時間長短)。
2. 使用者的注意力必須在畫面以外的實體上:鏡頭、自己的站位。
3. 收音是 COMMAND 或 OFF,不是開放對話,「可以跟我說話」此時沒有意義。
4. 任務結束後一定回到 FULL。拍照 Success 結束進 Review 就把頂列拿回來。
Trailer(A06)不符合第 1、3 條,所以是 AMBIENT 不是 FOCUS。
AI 在上、使用者在下(README)。推到觸控:可以按的東西一律住在底部對話框那一格(x 212 · 856×96 · bottom 44)。
語音時它是 .kv-pill,觸控時它是 .kv-actions。safe area 只放資訊,卡片永遠不可按,所以使用者不用猜哪張能按,
工程端也只有一個觸控槽位要管。主要選項在最右、Grow 外框、一屏一個。按下回饋:填色升一階 + 縮 97%、120ms。
收音狀態由 Kebbi 臉下的光條承接。光條不可用時的 fallback:右上角只放 18px 收音光點、不帶文字(.kv-mic--dot,見 T2c)。
可說的指令只標「重要且常用」的那一句,用 .kv-hint 放在底部;不重要的不標。辨識到指令時由指令膠囊取代提示。
例外狀態(網路、太吵、逾時)一律打斷任務、回到 FULL,因為 FOCUS 沒有 AI 區可以放狀態說明。
品牌:FOCUS 畫面不放任何品牌,Vyin 與電影 logo 都不放,避免只剩其中一方。
錨定 Tailwind neutral,只有深色模式。同一時間只有一方是「亮」的:誰在說話,誰的文字就是 Neutral 50;另一方退為灰階。錯誤狀態不用紅色,公開螢幕上用 Warning。
Campaign 色只碰 eyebrow 與素材底,永遠不碰 CTA 與 AI 狀態。換片時只換這兩個變數。目前值量自《歡迎光臨魔法秘境》正式海報:底色 = 漂浮系列海報平均色(深紫),eyebrow = 片名發光的色相、亮度拉到可讀。
參考稿用到但不在 neutral 色階裡。原樣保留,待決定是否收斂到 #262626 / #171717。
| --kiosk-overlay-media | rgba(23,23,23,.8) · 媒體上的狀態 chip 底 |
| --kiosk-overlay-pill | rgba(23,23,23,.92) · 指令提示、Toast 底 |
| --kiosk-dim | rgba(10,10,10,.62) · 聆聽時壓在底圖上 |
| --kiosk-scrim-top / -bottom | 180deg / 0deg,.9 → 0,高 300(tall 360) |
| --kiosk-scrim-cover | 90deg,#0A0A0A 34% → .7 52% → 0 78% · P01、A02、A03 海報滿版時用 |
Grow 只做外框、光點、細線、波形、Kebbi 眼睛。不整面填色、不放在正文後面、不做按鈕填色, 一屏最多 2 處,不放在海報區內。
--kiosk-grow: linear-gradient(55deg, #1F6FE0 0%, #19E27C 28%, #F4FBD0 52%, #FFB05A 74%, #FF6A2B 100%); /* 外框技法:雙背景 padding-box / border-box */ border: 4px solid transparent; background: linear-gradient(#171717, #171717) padding-box, var(--kiosk-grow) border-box;
藍色外光的層級跟資訊層級一致:CTA 最亮(一屏只有一個)、聆聽框次之(暫時態)、卡片最弱(內容層)。 README 只列了前兩級,第三級 DERIVED 自參考稿 8 處相同數值。
Display / 數字:Unbounded 600 / 800(暫代,正式 wordmark 字體 TBD)。UI / 中文:Noto Sans TC 400 / 500 / 700 / 900。標註:IBM Plex Mono,只用在佔位圖與格線標籤,不是產品 UI。螢幕上最小字級 24px(1.5–3 m 閱讀距離)。下方以 1920 尺度實際渲染、縮小 50% 展示。
| --kiosk-radius-pill | 999px | 對話框、CTA、chip、指令膠囊、Toast、倒數膠囊 |
| --kiosk-radius-card | 48px | 卡片、QR 卡、照片、取景框 |
| --kiosk-radius-plate / -lg | 24 / 28px | QR 白底板(400 卡 / 照片頁) |
| --kiosk-radius-tag | 8px | 小標籤 |
| --kiosk-radius-camera | 56px | 相機 campaign 外環 |
| --kiosk-radius-screen | 32px | 裝置外框,只用在參考圖 |
| --kiosk-margin | 96px | 螢幕左右安全邊 |
| --kiosk-card-gap | 24px | safe area 內卡片間距 |
| --kiosk-card-pad-y / -x | 48 / 52px | 卡片內距 |
| --kiosk-pill-pad-x | 64px | 對話框左右內距 |
| --kiosk-space-1 … -9 | 4 → 96 | 其餘間距一律取尺標上的值 |
所有對話畫面都照這套格線排版,規則只有一條(2026-10-14):內容區 = 800 − 頂列 − AI 區(行數 × 72 + 32)− 底部格(依內容:對話框 84 / chips 排 68 / 無 0,底距 44,間距 32)。 AI 1 / 2 / 3 行 × 有底部格 → 388 / 316 / 244,無 → 504 / 432 / 360;觸控模式(chips 排)2 行 360、3 行 288。三行 + 對話框放不下 268 的卡片,所以三行只用在觸控模式或純文字回答。頂列的「Show grid」可以在下方所有畫面疊上這些線。
| 區塊 | x | y | w × h |
|---|---|---|---|
| 頂列 | 64 | 44 | 1152 × 32 |
| 頂列(有倒數膠囊)D | 64 | 36 | 1152 × 48 |
| AI 逐字稿 | 64 | 120 | 1152 × 144 |
| AI 逐字稿(封面) | 64 | 120 | 732 × 144 |
| 思考 / 重新連線列 D | 64 | 288 | — × 48 |
| Safe Area | 64 | 296 | 1152 × 316 |
| Safe Area · AI 1 行 | 64 | 224 | 1152 × 388 |
| Safe Area · 對話框隱藏 | 64 | 296 | 1152 × 432 |
| Safe Area · 1 行 + 隱藏 | 64 | 224 | 1152 × 504 |
| AI 逐字稿 · 3 行 D | 64 | 120 | 1152 × 216 |
| Safe Area · 觸控模式(2 行 + chips 排)D | 64 | 296 | 1152 × 360 |
| Safe Area · 觸控模式 3 行 D | 64 | 368 | 1152 × 288 |
| Chips 排(觸控模式的底部格)D | 212 | bottom 44 | 856 × 68 |
| User 對話框 | 212 | bottom 44 | 856 × 84 / 96 |
| User 對話框 · Photo idle(海報滿版) | 64 | bottom 44 | — × 84 |
| 底部動作列(觸控) | 212 | bottom 44 | 856 × 96 |
| 指令膠囊 | 400 | bottom 44 | 480 × 76 |
| Toast D | center | bottom 48 | auto |
| 媒體字幕 | 64 | 104 | 1152 × 56 |
全螢幕媒體(預告、相機):媒體填滿 1280×800,上下各一層 300px 遮罩;AI 以 56px 字幕出現在上方遮罩,3 秒後淡出。
34 張 Center 畫面只有四種骨架。.kv-screen--dialog / --media / --cover / --standby
會把直接子元件依 class 自動落到格線,不必再寫 kv-at-*;遮罩與光暈由版型的
::before / ::after 產生。--dialog 的底(2026-10-14):放一個 .kv-art,圖是首頁輪播進對話那一刻的那張(JS:進對話就凍住,回首頁才繼續),自動壓暗 + 模糊 + 遮罩。狀態修飾:--one-line(AI 1 行)、--countdown(頂列倒數、對話框隱藏)、
--no-pill(對話框隱藏)、--camera(FOCUS 層級:無頂列、字幕上移)、--cover-strong(Moving 的深遮罩)、--scrim-tall(預告上遮罩 360)、--bg-light(亮色底圖:日期時間切深色)。
2026-10-14 新增:--three-line(AI 3 行)、--touch(純觸控模式:對話框拿掉、chips 橫排住底部格、卡片與 QR 撐滿)、--notice(A09 倒數疊在任何畫面:只換頂列右側)。

.kv-topbar .kv-transcript .kv-status .kv-safe / .kv-chips .kv-pill / .kv-actions .kv-cmd .kv-toast .kv-progress
.kv-actions 時動作列住進同一格,safe area 不延伸。決策型主要按鈕用 CTA 樣式。.kv-art + 上下 300px 遮罩(::before / ::after)+ 56px 字幕(--fade:停 3s 後淡出,捲到會重播)+ 媒體版頂列(logo 陰影、mic 膠囊自動套用)。

.kv-hint 底部置中一句重要指令 DERIVED;Kebbi 光條不可用時右上角放 .kv-mic--dot(只有光點)。.kv-route DERIVED。--cover-strong 保留給無字 key art 時用。
.kv-art:焦點、縮放、壓暗、暗角四個值在 --kiosk-keyart-*)+ 置中 .kv-hero。觸發時 eyebrow 換 --active 整句亮起、.kv-line--wide 960 加綠光。
每個元件用 kv- class 定義長相,用 kv-at- class 定義在格線上的位置。這裡只展示長相,
所以元件並排放在 1920 寬的深色舞台上;放進 .kv-screen 時加上對應的 kv-at-* 就會落到正確位置。
Kebbi 表情組本階段不做。
.kv-dot。.kv-topbar .kv-logo .kv-date .kv-clock · 位置 .kv-at-topbar(有倒數時 --countdown).kv-mic · Layer 1 常駐;三態互斥;Kebbi 光條同步。.kv-status .kv-orb .kv-progress · 位置 .kv-at-status / .kv-at-progress.kv-transcript · 沒有標籤、沒有頭像,位置就是身份 · 最多 2 行,超過由 AI 拆句 · 位置 .kv-at-ai(封面 --cover 1100 寬).kv-pill .kv-wave .kv-caret · 沒有「你」標籤 · 300ms 內從底部升起 · 位置 .kv-at-pill(Photo idle 改為獨立 .kv-btn--lg + .kv-cta-hint).kv-chip · 40/500 · padding 28 48 · 內框 2px。.kv-card · flex:1 · 48 / 48 52 · 標籤上、值下 · 只在資訊比 AI 說的多時才出現,且永遠不可按 · 位置:放進 .kv-safe 再加 .kv-at-safe<img> 取代 .kv-qr__code.kv-actions 1280×144 · 按鈕等寬 · 填 #262626 + 2px #525252 內框 · 44/700 · 位置:所有版型的直接子元件都自動落到對話框那格(不受 --countdown 隱藏)· 只有一顆時加 --single:置中、寬一半、Grow 外框(P01b).kv-cmd · 720×112 · COMMAND 模式 · 位置 .kv-at-cmd.kv-toast 位置 .kv-at-toast · .kv-countdown 放在頂列右側取代日期時間.kv-camera__frame 10px Grow 環 inset 40 · .kv-camera__guide 1040×720 畫面正中 · .kv-camera__digit 400px · --camera = FOCUS 層級 DERIVED:不放 logo、收音 chip、時間、電影 logo,字幕上移到 y 64 佔頂列位置,與框相距 32;收音狀態由 Kebbi 光條承接,規則見 00 Chrome。.kv-photo 600×340(AI 1 行)/ --lg 812×456(對話框隱藏)· 4px Grow 外框 · 圓角 32 · 照片以 <img> 放進框內.kv-showtimes 問場次一律用這張(P01b、A05)。規則:最多 4 場;只列今天還沒開演的、近到遠;不足 4 場只放有的、不補空位;都開演完換成 __empty 一句「今日場次已結束 · 明天 10:30 起」。超過 4 場的用語音問「還有其他場次嗎」或掃 QR,不往下塞。每場:時間(display 64)、影廳、剩餘座位。不放海報(設計師 2026-10-06:留位置給場次),片名放標題列、太長用 … 截。__empty,片名不變。
.kv-side-wall 2×3 grid + __tile--featured 底部大圖(grid-column: span all);Photo / Attraction 模式使用.kv-side > .kv-art,不疊任何我們的字;L / R 各放一張不同海報
.kv-side-exit--top 去字 key art + 遮罩 + QR 卡靠上。Exit mode 用,其他 mode 回靜態 JPG。工程師備註:成本太高可退回 side-poster-a
.kv-side-exit--bottom QR 卡靠下,搭配漂浮版 key art.kv-side-trailer A06 時 Side F/B 同步播預告,16:9 影片置中 + 片名 + 進度條。不可觸控
Kebbi 是女媧機器人,表情由它的 SDK 控制、能改多少待實機確認。.kv-face 只是示意「哪個畫面對應哪個表情」,
不是要廠商重畫 Kebbi 的臉。data-emotion 八種表情、data-mic 驅動臉下方的光條(FOCUS 時收音狀態只靠這條)。
畫面對照表在 Screens 頁尾,prototype.html 四螢幕模式逐步同步。
idle待機微笑,慢速眨眼listen專注,眼睛放大加光think眼睛上看、輕浮動speak嘴形同步 TTScountdown同步 3、2、1happy迎賓 / 道別 / 拍好sorry聽不清、查不到、逾時sleep斷線 / 休眠<link rel="preconnect" href="https://fonts.googleapis.com"> <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@400;500;700;900&family=Unbounded:wght@600;800&family=IBM+Plex+Mono:wght@400;500;600&display=swap" rel="stylesheet"> <link rel="stylesheet" href="css/tokens.css?v=3.3"> <link rel="stylesheet" href="css/components.css?v=3.3"> <!-- guide.css / guide.js 只給這份文件用,不要帶進產品 -->
相對路徑。整個資料夾放到任何子目錄底下都能開。IBM Plex Mono 只用在佔位圖與格線標籤,正式素材進來後可以不載。
<div class="kv-screen"> <!-- 1280×800 畫布 -->
<div class="kv-at-topbar kv-topbar">…</div> <!-- 位置 + 長相 -->
<div class="kv-at-ai kv-transcript">…</div>
<div class="kv-at-safe kv-safe">
<div class="kv-card">…</div>
<div class="kv-qr kv-qr--active">…</div> <!-- QR 永遠最右 -->
</div>
<div class="kv-at-pill kv-pill">…</div>
</div>
用版型可以省掉 kv-at-*:
<div class="kv-screen kv-screen--dialog kv-screen--one-line"> <div class="kv-topbar">…</div> <!-- 自動落到 y 44 --> <div class="kv-transcript">…</div> <!-- 自動落到 y 120、1 行 --> <div class="kv-safe kv-safe--one-line">…</div> <!-- 自動落到 y 224 --> <div class="kv-pill">…</div> <!-- 自動落到 bottom 44 --> </div>
實機以 1280×800 全螢幕呈現,.kv-screen 直接放在 body 裡即可。其他解析度用 transform: scale() 等比縮放整個畫布,不要改 token。
| --kiosk-* | 所有 token。與 Vyin 官網的 token 完全獨立。 |
| .kv-block | 元件本體,只管長相 |
| .kv-block__element | 元件內部 |
| .kv-block--modifier | 狀態或尺寸變體 |
| .kv-at-slot | 格線位置,只在 .kv-screen 內用 |
| .kv-actions | 唯一可按的元件,住在底部對話框那格;卡片不可按 |
| .kv-screen--template | 四種畫面骨架:dialog / media / cover / standby,直接子元件自動定位 |
| .kv-grow-ring .kv-dot .kv-eyebrow .kv-art .kv-hero | 原語,被多個元件共用 |
| .kv-slideshow / __slide / __slide--active | 背景劇照輪播,3s 淡入淡出交替;放在 .kv-art 裡 |
| .kv-side-wall / __tile / __tile--featured | Side screen 素材牆:2 col grid,--featured 跨全寬 |
| .kv-side-exit / --top / --bottom | Side screen Exit 延伸邀請:去字 key art + 遮罩 + QR 卡。--top QR 靠上、--bottom 靠下 |
| .kv-side-trailer | Side screen 預告同步:A06 時 16:9 影片置中,下方片名與進度條 |
| .kv-media-pause / .kv-media-btn | 預告觸控暫停(Grow 圓形播放鈕覆蓋)與「結束預告」按鈕 |
| .kv-karaoke__done / __rest | Voice Layer:AI 說話時逐字亮(guide.js 自動套用於 __unspoken) |
| .kv-ph | 素材佔位,正式素材進來後移除 |
| .kv-guide / .kv-guides | 開發用格線疊層,正式版不輸出 |
· 四個 Mode 的 38 張完整畫面(P01–P09、A01–A09 + A02t、W01–W03、X01–X03、E01–E10 + E05b、M1–M4)
· 互動原型與狀態機
· Kebbi 表情組
· 正式素材、QR 產生、TTS 逐字同步的實作邏輯
這些會在後續階段以同一套 token 與元件疊上去。