2025年12月14日 星期日

Github Copilot 4 : 透過Prompt或圖片變更Blazor頁面風格

Github Copilot 4 : 透過Prompt或圖片變更Blazor頁面風格

在上一篇文章將原先醫師提供的 PowerPoint 畫面所欠缺的最下方的頁籤按鈕列,成功地加入到 Blazor 頁面中之後,接下來將會嘗試看看,是否能夠利用 Github Copilot 來協助我,對於這個頁面進行一些調整與改善的工作。

這是上一篇文章的頁面截圖

在接下來的這篇文章中,將會來探討如何透過 Github Copilot 4 所提供的功能,來協助我對於這個 Blazor 頁面的風格進行一些調整與變更。透過輸入適當的 Prompt 來觀看與了解如何進行這樣的操作。

修正 [Sample2.razor] 的頁面風格

  • 延續剛剛建立的專案,打開 [Sample2.razor] 頁面

  • 切換到 [GitHub Copilot] 視窗

  • 點選該視窗中右上方的 [建立新執行緒] 按鈕

  • 現在已經開啟了一個新一輪的對話 

  • 在對話視窗中,輸入以下的 Prompt 指令,然後按下 Enter 鍵

    我需要這個頁面呈現以綠色為主配色風格,表現出具有朝氣與希望
    
  • 由於 Github Copilot 預設設定會加入 [使用中文件] 的選項,因此,對於已經開啟且正在顯示視窗內的 [Sample2.razor] 頁面,會自動進行一些調整

  • 一旦 AI 分析與生成結束後,可以從視窗中看到底下結果 

  • 從 Github Copilot視窗中,可以觀察到

    • 這裡讀取了兩個檔案,分別是 [Sample2.razor] 與 [Sample2.razor.css]
    • 從 Prompt 的敘述,AI 可以理解到,這次的動作,不需要修改 Razor 結構,而是需要調整 CSS 的部分,也就是要調整 [Sample2.razor.css] 檔案
    • AI 從 [Sample2.razor] 檔案中,看的出來這是一個偏向醫療方面的應用網頁設計
    • 因此,依據 Prompt 需求,AI 會將配色調整為綠色系
  • 在 [GitHub Copilot] 視窗中,點選 [Sample2.razor.css] 產出內容的右上方之 [套用] 按鈕

  • 現在在 Visual Studio 2026 中,正在修改的程式碼視窗,自動切換到 [Sample2.razor.css] 檔案

  • 點選該視窗,按下 [Tab] 鍵,將剛剛 AI 產出的 CSS 程式碼,套用到這個檔案中

  • 儲存 [Sample2.razor.css] 檔案

  • 底下是 Github Copilot 對於這次請求的處理摘要

  • 重點變更說明(方便你之後微調):

    • 整體背景:改成淡綠漸層 #f0f8f4 → #e8f7f0,營造清爽與自然感。
    • 文字主色:標題、Panel 標頭改為深綠 (#145c32),穩定又不壓抑。
    • 重點色:原本的洋紅 / 桃紅,全部換成偏亮的綠色系(#0f9d58, #16a34a 等)。
    • CT 面板:保留黑底醫療影像感,加入綠色光暈與文字霓虹綠,讓畫面有科技感又不陰鬱。
    • Report 按鈕與頁籤:改為圓角膠囊形綠色按鈕,帶陰影與 hover 效果,表現「行動、希望」。
    • 如果你有既定品牌綠色(例如某個 HEX 色碼),可以提供色碼,我可以幫你再收斂到單一主色+兩個輔助色的完整色票。

檢視修正結果

  • 執行這個專案
  • 在瀏覽器中,打開 https://localhost:7299/Sample2 頁面
  • 將會看到底下結果 
  • 可以看到,整個頁面的配色風格,已經變更為綠色系,呈現出具有朝氣與希望的感覺

Sample2.razor.css 原始程式碼

.clinical-page {
    padding: 32px;
    background: linear-gradient(135deg, #f0f8f4, #e8f7f0);
    font-family: "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Microsoft JhengHei", sans-serif;
    color: #234038;
}

.page-title {
    font-size: 32px;
    font-weight: 600;
    margin: 0 0 24px;
    color: #145c32;
}

.page-title .title-zh {
    margin-left: 8px;
    font-size: 28px;
    color: #1f7a3a;
}

.clinical-layout {
    display: grid;
    grid-template-columns: 2.2fr 1.6fr 1.4fr;
    gap: 16px;
}

.panel {
    background-color: #ffffff;
    border-radius: 12px;
    box-shadow: 0 0 0 1px rgba(29, 134, 73, 0.12), 0 6px 16px rgba(15, 94, 54, 0.08);
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

/* 左邊病人資訊 */
.panel-patient .panel-header {
    padding: 12px 16px;
    border-bottom: 1px solid rgba(22, 96, 60, 0.25);
    background: linear-gradient(90deg, #e6f7ee, #f3fbf7);
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 4px 8px;
    font-size: 14px;
    color: #145c32;
}

.subject-no {
    font-weight: 800;
    color: #0d8040;
    margin-left: 6px;
}

.subject-note {
    font-size: 12px;
    color: #497562;
}

/* 中間癌症狀態 */
.panel-cancer .panel-header-highlight {
    padding: 10px 16px;
    background: linear-gradient(90deg, #c4f1d6, #e0f8eb);
    border-bottom: 1px solid rgba(22, 96, 60, 0.25);
    font-weight: 600;
    font-size: 14px;
    color: #145c32;
}

/* CT Panel */
.panel-ct {
    background-color: #ffffff;
    border-radius: 18px;
    box-shadow: 0 0 0 2px rgba(0, 158, 96, 0.45);
    padding-bottom: 16px;
}

.ct-header {
    background: linear-gradient(90deg, #0f9d58, #0b8043);
    color: #ffffff;
    font-weight: 700;
    text-align: center;
    padding: 16px 8px;
    font-size: 22px;
    letter-spacing: 0.04em;
}

/* 保留黑底 CT 畫面,但加一點綠色光感讓感覺現代、有希望 */
.ct-content {
    padding: 20px 24px 12px;
}

.ct-image-frame {
    border-radius: 12px;
    background: radial-gradient(circle at top, #1c3b32 0, #050909 60%, #000 100%);
    padding: 10px;
}

.ct-image-placeholder {
    position: relative;
    width: 100%;
    height: 190px;
    background: radial-gradient(circle at center, #1a4734 0, #000 65%);
    border-radius: 8px;
    overflow: hidden;
    box-shadow: inset 0 0 18px rgba(19, 176, 102, 0.6);
}

.ct-level-label {
    position: absolute;
    left: 50%;
    bottom: 24px;
    transform: translateX(-50%);
    font-size: 40px;
    font-weight: 700;
    color: #e3ffe8;
    text-shadow: 0 0 6px #52ff9a, 0 0 16px #00d46d;
}

/* Report 按鈕:綠色行動按鈕,表現「行動力 / 希望」 */
.report-button {
    margin: 16px 24px 0;
    width: calc(100% - 48px);
    padding: 10px;
    border-radius: 999px;
    border: none;
    background: linear-gradient(135deg, #12b981, #16a34a);
    color: #ffffff;
    font-size: 18px;
    font-weight: 600;
    cursor: pointer;
    transition: transform 0.12s ease-out, box-shadow 0.12s ease-out, filter 0.12s ease-out;
    box-shadow: 0 6px 16px rgba(22, 163, 74, 0.45);
}

.report-button:hover {
    filter: brightness(1.05);
    transform: translateY(-1px);
    box-shadow: 0 10px 24px rgba(22, 163, 74, 0.6);
}

.report-button:active {
    transform: translateY(0);
    box-shadow: 0 4px 12px rgba(22, 163, 74, 0.5);
}

/* 通用表格樣式:略帶綠色邊與標題底色 */
.info-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 13px;
}

.info-table th,
.info-table td {
    border: 1px solid rgba(148, 191, 164, 0.9);
    padding: 6px 8px;
    vertical-align: top;
}

.info-table th {
    width: 45%;
    background: linear-gradient(90deg, #e7f6ed, #f3fbf8);
    font-weight: 600;
    color: #145c32;
}

.info-table td {
    background-color: #ffffff;
}

.value-text {
    color: #047857;
}

.value-text .hint {
    color: #658a75;
    font-size: 11px;
}

.link-like {
    color: #0f766e;
    text-align: right;
}

/* 底部頁籤列:綠色主題 Tabs */
.clinical-tabs {
    margin-top: 24px;
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}

.tab-button {
    border-radius: 999px;
    border: 1px solid rgba(22, 163, 74, 0.4);
    background-color: #f0fdf4;
    color: #166534;
    padding: 8px 16px;
    font-size: 13px;
    font-weight: 500;
    cursor: pointer;
    transition: background-color 0.12s ease-out, color 0.12s ease-out, box-shadow 0.12s ease-out, transform 0.12s ease-out;
}

.tab-button:hover {
    background-color: #bbf7d0;
    box-shadow: 0 3px 10px rgba(21, 128, 61, 0.25);
    transform: translateY(-1px);
}

.tab-clinical {
    background: linear-gradient(135deg, #22c55e, #16a34a);
    color: #ffffff;
    border-color: transparent;
    box-shadow: 0 4px 14px rgba(34, 197, 94, 0.55);
}

/* RWD 簡單處理 */
@media (max-width: 992px) {
    .clinical-layout {
        grid-template-columns: 1fr;
    }

    .panel-ct {
        order: -1;
    }
}

再次進行調整

  • 面對這樣的結果,若覺得還不夠理想,還是可以請 Github Copilot 再次進行不同顏色與想法調整
  • 現在要來嘗試針對 Razor 檔案進行修正
  • 切換到 [GitHub Copilot] 視窗
  • 在此,並不需要在 Github Copilot 視窗中,建立新的對話執行緒
  • 直接在現有的對話視窗中,輸入以下的 Prompt 指令,然後按下 Enter 鍵
    對於 #Sample2.razor  檔案中,身高 (Height) 與 cm文字出現了斷行,在這裡不需要這樣,而是顯示在同一行
    
  • 底下畫面為這次操作的截圖 
  • 在 Github Copilot 聊天視窗中,按下 [傳送] 按鈕
  • 一旦 AI 完成分析後,將會看到底下的輸出 
  • 從這裡可以看到,AI 已經理解到這次的需求,是要調整 Razor 檔案中的結構
  • 在 [GitHub Copilot] 視窗中,點選 [Sample2.razor] 產出內容的右上方之 [套用] 按鈕

檢視修正結果

  • 再次執行這個專案
  • 在瀏覽器中,打開 https://localhost:7299/Sample2 頁面
  • 將會看到底下結果 
  • 可以看到,身高 (Height) 與 cm 文字已經顯示在同一行,不會再出現斷行的情況

 



Github Copilot 3 : 使用Copilot進行 Blazor 頁面畫面的調整

 

Github Copilot 3 : 使用Copilot進行 Blazor 頁面畫面的調整

在上一篇文章所建立起來的Blazor專案,已經將原先醫師提供的 PowerPoint 畫面

透過 Github Copilot 的能力,產生出一個新的 Blazor 頁面(Sample2.razor)與 Sample2.razor.css 樣式檔案,並且能夠成功地在瀏覽器中呈現出來。

接下來,將會嘗試看看,是否能夠利用 Github Copilot 來協助我,對於這個頁面進行一些調整與改善的工作。

準備使用 Github Copilot 進行頁面調整

在這個新產生出來的 Sample2.razor 頁面中,發現最下方有些頁籤按鈕似乎沒有建立出來,因此,將剛剛建立好新頁面的專案再度開啟起來。

  • 首先,使用方案總管理員,將剛剛建立好的 [Sample2.razor] 與 [Sample2.razor.css] 檔案打開,並且將正在顯示程式碼的視窗設定為 [Sample2.razor] 頁面,這裡的目的在於讓 Github Copilot 能夠知道目前正在使用中的頁面是哪一個,如此,當我們在下達 Prompt 的時候,便可以不用使用其他方式告知 Copilot 目前正在處理的頁面是哪一個。
  • 切換到 VS 2026 IDE 畫面內的 Github Copilot 視窗

  • 在 Github Copilot 視窗右上方,點選 [建立新執行緒] 按鈕,在這裡的主要目的是在於清空之前的對話記憶
  • 接著,將醫師提供的原始需求畫面貼到 Github Copilot 視窗中
  • 在圖片的下方,輸入下列的提示語句 (Prompt):
    • "在這個新產生出來的 Sample2.razor 頁面中,發現最下方有些頁籤按鈕似乎沒有建立出來"
    • 當然,要下達甚麼 Prompt,還是要看每個人自己的習慣與經驗

Github Copilot 產生調整建議

這裡將會是 Github Copilot 所產生出來的建議內容,由這些結果可以看的出來,Copilot 似乎能夠理解目前頁面中缺少的部分,並且給出一些建議的做法來補足這些缺失的內容。

接下來就要測試看看,Github Copilot 所產生出來的建議內容,是否能夠成功地幫助我們來完成這些頁面的調整工作。

請注意,這些內容是由 AI 自動產生的,可能會有錯誤或不完整的地方,請務必自行檢查與測試。

你現在這個 Sample2.razor 檔案裡,最下面其實「完全沒有」任何頁籤(Tab)或按鈕的標記,所以畫面自然不會出現你截圖中那排:

  • 臨床資料
  • 影像資料
  • 抽血資料
  • CTCAE 5.0
  • 問卷
  • 追蹤資料

目前頁面在 </div> 結束前的最後一段只有:

        <!-- 右邊:CT Image -->
        <section class="panel panel-ct">
            ...
            <button class="report-button">
                Report
            </button>
        </section>
    </div>
</div>

也就是說:

  1. 頁籤在這個新產生出來的 .razor 檔裡根本還沒寫;
  2. 或是原來範例是畫在 PowerPoint / Figma / 其他頁面,還沒被你轉成 HTML/CSS。

建議做法:在底部加上頁籤列

在 </div> 結束前新增一個頁籤列區塊,例如:

@page "/Sample2"

<div class="clinical-page">
    ...
    <div class="clinical-layout">
        ...
        <section class="panel panel-ct">
            ...
        </section>
    </div>

    <!-- 底部頁籤列 -->
    <nav class="clinical-tabs">
        <button class="tab-button tab-clinical">臨床資料</button>
        <button class="tab-button tab-image">影像資料</button>
        <button class="tab-button tab-blood">抽血資料</button>
        <button class="tab-button tab-ctcae">CTCAE 5.0</button>
        <button class="tab-button tab-questionnaire">問卷</button>
        <button class="tab-button tab-followup">追蹤資料</button>
    </nav>
</div>

接著在 Sample2.razor.css 裡面再把樣式做成接近你簡報截圖的樣子,例如(簡化版,顏色可依你 PPT 調整):

.clinical-tabs {
    display: flex;
    justify-content: center;
    gap: 0.5rem;
    margin-top: 1rem;
}

.tab-button {
    min-width: 130px;
    padding: 0.75rem 1.5rem;
    border-radius: 999px;
    border: none;
    color: #fff;
    font-size: 1rem;
    font-weight: 600;
    cursor: pointer;
}

/* 各頁籤顏色,可依 PPT 微調 */
.tab-clinical      { background-color: #00b050; }
.tab-image         { background-color: #7030a0; }
.tab-blood         { background-color: #0070c0; }
.tab-ctcae         { background-color: #00b050; }
.tab-questionnaire { background-color: #0070c0; }
.tab-followup      { background-color: #7030a0; }

如果你原本期望這些頁籤有「切換內容」的行為,可以再往下一步,把 @code 區塊加進來,用一個 activeTab 狀態來切換要顯示的內容,我可以再幫你補一版有互動的範例。

透過 Github Copilot 產生的完整程式碼範例

  • 在 Github Copilot 的視窗中來捲動,可以到如下圖的內容

  • 在這裡捲動到關於 Sample2.razor 檔案的修正建議區域
  • 該區域的右上方將會看到兩個按鈕,一個是套用,一個是複製程式碼區塊
  • 對於複製程式碼區塊,點選後,便可以將該區塊的程式碼複製到剪貼簿中
  • 對於複製下來的程式碼就如同看到的畫面內容一樣,在此將剪貼簿的內容貼到文字編輯器來檢視,如下圖

  • 從圖片中可以看到,接貼簿內的內容,同樣有包含 ... 這樣的內容,因此,似乎無法將這些剪貼簿的內容直接貼到 Blazor 頁面中,因為,在此應該是僅需要將 nav 區塊的內容貼到 Sample2.razor 頁面中即可
  • 但並不是說這樣的功能結果不好用或不能用,面對不同的情況,有些時候是需要使用這樣的方法反而比較好的
  • 現在來嘗試體驗套用按鈕的效果
  • 點選套用按鈕後,會發現 Sample2.razor 頁面的內容已經被 Copilot 自動地修改過了

  • 在 [Sample2.razor] 視窗將會如上圖樣貌,點選 [Sample2.razor.css] 頁籤來檢視,並且按下 [Tab] 鍵來進行套用
  • 下圖為套用後修正結果

  • 在 Copilot 視窗中,找到如下圖區域(也就是有這段文字的區域 : 接著在 Sample2.razor.css 裡面再把樣式做成接近你簡報截圖的樣子)

  • 點選右上方 [套用] 按鈕
  • 切換到 [Sample2.razor.css] 頁籤視窗後,會發現 Sample2.razor.css 頁面的內容已經被 Copilot 自動地修改過了 
  • 點選 [Sample2.razor.css] 頁籤來檢視,並且按下 [Tab] 鍵來進行套用

執行檢查修正結果

現在執行該網站程式碼,打開瀏覽器,輸入這個網址,https://localhost:7299/Sample2,將會看到底下畫面

從上圖可以看到,頁籤列已經成功地被建立出來,並且能夠正確地顯示在頁面的底部位置,這樣的結果表示,透過 Github Copilot 所產生出來的建議內容,確實能夠幫助我們來完成這些頁面的調整工作。

Sample2.razor 最終程式碼

@page "/Sample2"

<div class="clinical-page">
    <h1 class="page-title">
        Basic clinical presentation <span class="title-zh">臨床資訊</span>
    </h1>

    <div class="clinical-layout">
        <!-- 左邊:病人基本資料 -->
        <section class="panel panel-patient">
            <header class="panel-header">
                <span>病人編號 Subject No</span>
                <span class="subject-no">NCKUH-E001</span>
                <span class="subject-note">(E 代表內膜癌,O 代表卵巢癌)</span>
            </header>

            <table class="info-table">
                <tbody>
                    <tr>
                        <th>臨床資訊, 癌別<br />EC or OC(自填)</th>
                        <td class="value-text">數值型</td>
                    </tr>
                    <tr>
                        <th>年齡 (Age)</th>
                        <td class="value-text">
                            數值型<br />
                            <span class="hint">20歲~80歲</span>
                        </td>
                    </tr>
                    <tr>
                        <th>月經狀態</th>
                        <td class="value-text">
                            數值型<br />
                            <span class="hint">0 停經,1 未停經</span>
                        </td>
                    </tr>
                    <tr>
                        <th>身高 (Height)<br />cm</th>
                        <td class="value-text">
                            數值型<br />
                            <span class="hint">140cm~180cm</span>
                        </td>
                    </tr>
                    <tr>
                        <th>體重 (BW) Kg</th>
                        <td class="value-text">
                            數值型<br />
                            <span class="hint">30kg~120kg</span>
                        </td>
                    </tr>
                    <tr>
                        <th>BMI (Kg/m²)</th>
                        <td class="value-text">
                            計算公式說明如下:<br />
                            體重(公斤) ÷ 身高(公尺) ÷ 身高(公尺)
                        </td>
                    </tr>
                    <tr>
                        <th>體表面積 (BSA) m²</th>
                        <td class="value-text">
                            計算公式說明如下:<br />
                            體重(公斤) × 身高(公分) ÷ 3600,開根號
                        </td>
                    </tr>
                    <tr>
                        <th>腰圍 (AC) cm</th>
                        <td class="value-text">自填</td>
                    </tr>
                    <tr>
                        <th>日常機能狀態</th>
                        <td class="value-text">數值型</td>
                    </tr>
                </tbody>
            </table>
        </section>

        <!-- 中間:癌症狀態 -->
        <section class="panel panel-cancer">
            <header class="panel-header panel-header-highlight">
                癌症狀態 癌別 卵巢/子宮
            </header>

            <table class="info-table">
                <tbody>
                    <tr>
                        <th>癌症分期 (2023 FIGO)</th>
                        <td class="link-like">拉選式</td>
                    </tr>
                    <tr>
                        <th>AJCC c stage</th>
                        <td class="link-like">拉選式</td>
                    </tr>
                    <tr>
                        <th>AJCC p stage</th>
                        <td class="link-like">拉選式</td>
                    </tr>
                    <tr>
                        <th>組織型態</th>
                        <td class="link-like">拉選式</td>
                    </tr>
                    <tr>
                        <th>MMR protein</th>
                        <td class="link-like">拉選式</td>
                    </tr>
                    <tr>
                        <th>p53</th>
                        <td class="link-like">拉選式</td>
                    </tr>
                    <tr>
                        <th>Hormon status</th>
                        <td class="link-like">拉選式</td>
                    </tr>
                </tbody>
            </table>
        </section>

        <!-- 右邊:CT Image -->
        <section class="panel panel-ct">
            <header class="ct-header">
                CT Image
            </header>

            <div class="ct-content">
                <div class="ct-image-frame">
                    <div class="ct-image-placeholder">
                        <!-- 這裡之後可以換成 <img src="..." /> -->
                        <span class="ct-level-label">L3</span>
                    </div>
                </div>
            </div>

            <button class="report-button">
                Report
            </button>
        </section>
    </div>

    <!-- 底部頁籤列 -->
    <nav class="clinical-tabs">
        <button class="tab-button tab-clinical">臨床資料</button>
        <button class="tab-button tab-image">影像資料</button>
        <button class="tab-button tab-blood">抽血資料</button>
        <button class="tab-button tab-ctcae">CTCAE 5.0</button>
        <button class="tab-button tab-questionnaire">問卷</button>
        <button class="tab-button tab-followup">追蹤資料</button>
    </nav>
</div>

Sample2.razor.css 最終程式碼

.clinical-page {
    padding: 32px;
    background-color: #f5f5f7;
    font-family: "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Microsoft JhengHei", sans-serif;
    color: #333;
}

.page-title {
    font-size: 32px;
    font-weight: 600;
    margin: 0 0 24px;
}

.page-title .title-zh {
    margin-left: 8px;
    font-size: 28px;
}

.clinical-layout {
    display: grid;
    grid-template-columns: 2.2fr 1.6fr 1.4fr;
    gap: 16px;
}

.panel {
    background-color: #ffffff;
    border-radius: 10px;
    box-shadow: 0 0 0 1px #ddd, 0 3px 8px rgba(0, 0, 0, 0.05);
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

/* 左邊病人資訊 */
.panel-patient .panel-header {
    padding: 12px 16px;
    border-bottom: 1px solid #d0d0d0;
    background-color: #f8f8fb;
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 4px 8px;
    font-size: 14px;
}

.subject-no {
    font-weight: 800;
    color: #d20040;
    margin-left: 6px;
}

.subject-note {
    font-size: 12px;
    color: #666;
}

/* 中間癌症狀態 */
.panel-cancer .panel-header-highlight {
    padding: 10px 16px;
    background-color: #ffeccc;
    border-bottom: 1px solid #d0d0d0;
    font-weight: 600;
    font-size: 14px;
}

/* CT Panel */
.panel-ct {
    background-color: #ffffff;
    border-radius: 18px;
    box-shadow: 0 0 0 2px #e200c8;
    padding-bottom: 16px;
}

.ct-header {
    background: linear-gradient(90deg, #e200c8, #b000ff);
    color: #ffffff;
    font-weight: 700;
    text-align: center;
    padding: 16px 8px;
    font-size: 22px;
}

.ct-content {
    padding: 20px 24px 12px;
}

.ct-image-frame {
    border-radius: 12px;
    background-color: #111;
    padding: 10px;
}

.ct-image-placeholder {
    position: relative;
    width: 100%;
    height: 190px;
    background-color: #000;
    border-radius: 8px;
    overflow: hidden;
}

.ct-level-label {
    position: absolute;
    left: 50%;
    bottom: 24px;
    transform: translateX(-50%);
    font-size: 40px;
    font-weight: 700;
    color: #ffe6ff;
    text-shadow: 0 0 6px #ff66ff, 0 0 16px #ff00ff;
}

/* Report 按鈕 */
.report-button {
    margin: 16px 24px 0;
    width: calc(100% - 48px);
    padding: 10px;
    border-radius: 8px;
    border: 2px solid #e200c8;
    background-color: #ffffff;
    color: #333;
    font-size: 18px;
    font-weight: 600;
    cursor: pointer;
    transition: all 0.15s ease-in-out;
}

.report-button:hover {
    background-color: #ffe6ff;
}

/* 通用表格樣式 */
.info-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 13px;
}

.info-table th,
.info-table td {
    border: 1px solid #d0d0d0;
    padding: 6px 8px;
    vertical-align: top;
}

.info-table th {
    width: 45%;
    background-color: #f5f5f5;
    font-weight: 600;
}

.info-table td {
    background-color: #ffffff;
}

.value-text {
    color: #c4005b;
}

.value-text .hint {
    color: #666;
    font-size: 11px;
}

.link-like {
    color: #c4005b;
    text-align: right;
}

/* RWD 簡單處理 */
@media (max-width: 992px) {
    .clinical-layout {
        grid-template-columns: 1fr;
    }

    .panel-ct {
        order: -1;
    }
}

.clinical-tabs {
    display: flex;
    justify-content: center;
    gap: 0.5rem;
    margin-top: 1rem;
}

.tab-button {
    min-width: 130px;
    padding: 0.75rem 1.5rem;
    border-radius: 999px;
    border: none;
    color: #fff;
    font-size: 1rem;
    font-weight: 600;
    cursor: pointer;
}

/* 各頁籤顏色,可依 PPT 微調 */
.tab-clinical      { background-color: #00b050; }
.tab-image         { background-color: #7030a0; }
.tab-blood         { background-color: #0070c0; }
.tab-ctcae         { background-color: #00b050; }
.tab-questionnaire { background-color: #0070c0; }
.tab-followup      { background-color: #7030a0; }