Spaces:
Sleeping
修對話留白量錯層、明暗鈕真人點擊失效、收合時重置鈕文字未隱藏
Browse files對話留白(千卉多次回報「遠超過 16px」,我一直量錯層):
- 我先前量的是 .message 這層「看不見的外框」(左16),但真正畫出氣泡底色與
圓角的是內層 .md——.message 的 padding:12px 16px 又把可見氣泡往內推 16px,
疊上 bubble-wrap 的 16px 後,可見氣泡實際落在 32px(使用者氣泡右 33px)
- .message 水平內距歸零,可見氣泡才真的落在 16px。實測:AI 氣泡左 16、
使用者氣泡右 17、輸入框白面板左 16 右 17,全部對齊導覽列基準(左16 右17)
- 專案筆記早就記過「.md 才是實際視覺邊界」,這次沒照著查,是我的疏失
明暗切換鈕真人點擊沒反應:
- _applyThemeIcon() 掛在 400ms 輪詢裡,原本每個 tick 都無條件重寫 innerHTML,
等於每 0.4 秒把裡面的 <svg> 銷毀重建。真人點擊是 mousedown→mouseup 兩個
事件,中間只要跨到一次重建,瀏覽器就不會產生 click——按鈕看起來完全沒反應。
程式化 .click() 不經過 mousedown/mouseup,所以自動測試一直測不出來
- 修法:狀態沒變就不動 DOM(dataset.themeIcon 記住目前圖示)
- 已用真人點擊驗證 dark→light 正常切換並寫入 localStorage
收合時「開始新分析」文字沒隱藏、撐破 60px 窄欄:
- 前一個 commit 為了統一字級加了 #reset_btn(1,0,0),把收合用的
.nav-col.collapsed .reset-btn(0,3,0)壓掉,font-size:0 失效
- 改成 .nav-col.collapsed #reset_btn(1,2,0)贏回來。實測收合後欄寬 60px、
字級 0、按鈕 43px、無橫向溢出
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- app_agent.py +35 -4
|
@@ -2353,11 +2353,16 @@ div[role="log"][aria-label="chatbot conversation"],
|
|
| 2353 |
max-width: 100% !important;
|
| 2354 |
align-self: stretch !important;
|
| 2355 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2356 |
.main-chat .message-row .message {
|
| 2357 |
border-radius: 10px !important;
|
| 2358 |
font-size: var(--font-size-base) !important;
|
| 2359 |
line-height: 1.7 !important;
|
| 2360 |
-
padding: 0
|
| 2361 |
width: fit-content !important;
|
| 2362 |
max-width: 90% !important;
|
| 2363 |
transition: box-shadow .2s !important;
|
|
@@ -2869,7 +2874,12 @@ img.button-icon { opacity: .82; }
|
|
| 2869 |
兩邊都掛 !important 時由 specificity 決勝,純 class 的
|
| 2870 |
`.nav-col.collapsed .result-nav-btn`(0,3,0)會輸,收合後的置中
|
| 2871 |
與 padding 就不會生效。加上 id 祖先後是 1,3,0,穩定勝出。 */
|
| 2872 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2873 |
.nav-col.collapsed #result_nav_col .result-nav-btn {
|
| 2874 |
justify-content: center !important;
|
| 2875 |
padding: .45rem !important; /* 2026-07-24 收窄:原本 .6rem 把圖示擠到 8px(見下方註解) */
|
|
@@ -2992,7 +3002,9 @@ img.button-icon { opacity: .82; }
|
|
| 2992 |
border-radius: 0 !important;
|
| 2993 |
padding: 0 !important;
|
| 2994 |
margin: 0 !important;
|
| 2995 |
-
width
|
|
|
|
|
|
|
| 2996 |
}
|
| 2997 |
/* 輸入框本體:底色改成跟氣泡同一階(白/深色淺一階),去掉 Gradio 預設的
|
| 2998 |
外框與圓角,四邊貼齊 chat-col。頂端用 1px 細線跟對話視窗分界(取代原本
|
|
@@ -3005,7 +3017,16 @@ img.button-icon { opacity: .82; }
|
|
| 3005 |
border-radius: 0 !important;
|
| 3006 |
box-shadow: none !important;
|
| 3007 |
}
|
| 3008 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3009 |
/* 2026-07-23:chat-col 改成 gap:1rem 的 flex 欄,跟 chatbot 之間的留白
|
| 3010 |
已經由 gap 統一處理,這裡不用再疊加 margin-top(舊註解提到的「技術
|
| 3011 |
執行紀錄」分組已在 Phase 8-B 搬去 canvas-col,跟這裡無關,是過期
|
|
@@ -3749,6 +3770,16 @@ _APP_HEAD_SCRIPT = """
|
|
| 3749 |
var btn = document.getElementById('theme_toggle');
|
| 3750 |
if (!btn) return;
|
| 3751 |
var dark = _effectiveDark();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3752 |
/* 顯示「切換後會變成」的那一個:目前深色就顯示太陽(點了轉淺)。 */
|
| 3753 |
btn.innerHTML = dark ? _SUN : _MOON;
|
| 3754 |
btn.setAttribute('aria-label', dark ? '切換為淺色模式' : '切換為深色模式');
|
|
|
|
| 2353 |
max-width: 100% !important;
|
| 2354 |
align-self: stretch !important;
|
| 2355 |
}
|
| 2356 |
+
/* 2026-07-24(千卉回報氣泡留白遠超過 16px):這一層是「看不見」的外框,
|
| 2357 |
+
真正畫出氣泡底色與圓角的是內層 .md(見下方註解與本專案筆記)。它原本的
|
| 2358 |
+
水平 padding 1rem 會把可見氣泡再往內推 16px——bubble-wrap 已給 16px,
|
| 2359 |
+
疊起來可見氣泡實際落在 32px。水平內距歸零,可見氣泡才真的貼在 16px;
|
| 2360 |
+
氣泡內的文字留白由 .md 自己的 padding 提供。 */
|
| 2361 |
.main-chat .message-row .message {
|
| 2362 |
border-radius: 10px !important;
|
| 2363 |
font-size: var(--font-size-base) !important;
|
| 2364 |
line-height: 1.7 !important;
|
| 2365 |
+
padding: 0 !important;
|
| 2366 |
width: fit-content !important;
|
| 2367 |
max-width: 90% !important;
|
| 2368 |
transition: box-shadow .2s !important;
|
|
|
|
| 2874 |
兩邊都掛 !important 時由 specificity 決勝,純 class 的
|
| 2875 |
`.nav-col.collapsed .result-nav-btn`(0,3,0)會輸,收合後的置中
|
| 2876 |
與 padding 就不會生效。加上 id 祖先後是 1,3,0,穩定勝出。 */
|
| 2877 |
+
/* 2026-07-24 回歸修正:為了統一字級加了 `#reset_btn`(1,0,0)之後,純 class
|
| 2878 |
+
的 `.nav-col.collapsed .reset-btn`(0,3,0)反而輸掉,收合時「開始新分析」
|
| 2879 |
+
的文字不再被 font-size:0 隱藏、把 60px 窄欄撐破。這裡改用 `#reset_btn`
|
| 2880 |
+
當選擇器(1,2,0)贏回來。呼應本檔既有註記:任何為了蓋過 Gradio 而加 id
|
| 2881 |
+
的改動,都要回頭盤同名 class 的其他規則有沒有被連帶壓掉。 */
|
| 2882 |
+
.nav-col.collapsed #reset_btn,
|
| 2883 |
.nav-col.collapsed #result_nav_col .result-nav-btn {
|
| 2884 |
justify-content: center !important;
|
| 2885 |
padding: .45rem !important; /* 2026-07-24 收窄:原本 .6rem 把圖示擠到 8px(見下方註解) */
|
|
|
|
| 3002 |
border-radius: 0 !important;
|
| 3003 |
padding: 0 !important;
|
| 3004 |
margin: 0 !important;
|
| 3005 |
+
/* width 用 auto 不用 100%:下方 #chat_upload_zone 會給左右 margin 讓面板
|
| 3006 |
+
內縮,若寫死 100% 會連同 margin 一起超出欄寬(實測右側溢出 15px)。 */
|
| 3007 |
+
width: auto !important;
|
| 3008 |
}
|
| 3009 |
/* 輸入框本體:底色改成跟氣泡同一階(白/深色淺一階),去掉 Gradio 預設的
|
| 3010 |
外框與圓角,四邊貼齊 chat-col。頂端用 1px 細線跟對話視窗分界(取代原本
|
|
|
|
| 3017 |
border-radius: 0 !important;
|
| 3018 |
box-shadow: none !important;
|
| 3019 |
}
|
| 3020 |
+
/* 2026-07-24 千卉:輸入框右邊與下面要有留白。先前的 16px 只是「面板內部的
|
| 3021 |
+
內距」,白色面板本身仍貼齊欄邊(實測面板距欄 左1 右2 下1)。改成面板整個
|
| 3022 |
+
往內縮 16px,白底與欄邊之間真的空出來;不再需要頂端分隔線(面板浮在欄底
|
| 3023 |
+
色上,本身就是分界)。Gradio 的 .form 外層帶淡藍底+框線也一併中性化,
|
| 3024 |
+
否則會在面板外圍多一圈色帶。 */
|
| 3025 |
+
#chat_upload_zone { margin: 0 16px 16px !important; border-top: none !important; }
|
| 3026 |
+
#chat_upload_zone .form {
|
| 3027 |
+
background: transparent !important;
|
| 3028 |
+
border: none !important;
|
| 3029 |
+
}
|
| 3030 |
/* 2026-07-23:chat-col 改成 gap:1rem 的 flex 欄,跟 chatbot 之間的留白
|
| 3031 |
已經由 gap 統一處理,這裡不用再疊加 margin-top(舊註解提到的「技術
|
| 3032 |
執行紀錄」分組已在 Phase 8-B 搬去 canvas-col,跟這裡無關,是過期
|
|
|
|
| 3770 |
var btn = document.getElementById('theme_toggle');
|
| 3771 |
if (!btn) return;
|
| 3772 |
var dark = _effectiveDark();
|
| 3773 |
+
/* 踩坑(2026-07-24,千卉回報「切換鈕不能用」):這個函式掛在 400ms
|
| 3774 |
+
輪詢裡,原本每次 tick 都無條件重寫 innerHTML,等於每 0.4 秒把裡面
|
| 3775 |
+
的 <svg> 銷毀重建一次。真人點擊是 mousedown→mouseup 兩個事件,
|
| 3776 |
+
只要中間跨到一次重建,瀏覽器就找不到「同一個元素上按下並放開」,
|
| 3777 |
+
click 事件根本不會產生——按鈕看起來完全沒反應。程式化 .click()
|
| 3778 |
+
不經過 mousedown/mouseup,所以自動測試一直測不出來。
|
| 3779 |
+
修法:狀態沒變就不要動 DOM。 */
|
| 3780 |
+
var want = dark ? 'dark' : 'light';
|
| 3781 |
+
if (btn.dataset.themeIcon === want) return;
|
| 3782 |
+
btn.dataset.themeIcon = want;
|
| 3783 |
/* 顯示「切換後會變成」的那一個:目前深色就顯示太陽(點了轉淺)。 */
|
| 3784 |
btn.innerHTML = dark ? _SUN : _MOON;
|
| 3785 |
btn.setAttribute('aria-label', dark ? '切換為淺色模式' : '切換為深色模式');
|