un2266 Claude Opus 4.8 commited on
Commit
fbf28e3
·
1 Parent(s): e4284d7

修對話留白量錯層、明暗鈕真人點擊失效、收合時重置鈕文字未隱藏

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>

Files changed (1) hide show
  1. app_agent.py +35 -4
app_agent.py CHANGED
@@ -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.75rem 1rem !important;
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
- .nav-col.collapsed .reset-btn,
 
 
 
 
 
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: 100% !important;
 
 
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
- #chat_upload_zone { border-top: 1px solid var(--c-border) !important; }
 
 
 
 
 
 
 
 
 
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 ? '切換為淺色模式' : '切換為深色模式');