    /* ── 暖中性 token（04e，2026-08-19 取代 Dogfood-5 的「純灰階、不借暖色」）──
       founder 放行進入 04e 體驗加熱階段。做法是**整組色相一起偏暖 ~5–8°、明度幾乎不動**，
       所以既有的層次關係與對比全部守住，只有色溫變了：
         --text 對 --bg 的對比 14.25:1（改版前 #2a2a2a on #fff 是 14.4:1），
         --text-muted 5.38:1（改版前 5.33:1）——兩條都幾乎等值，不是拿可讀性換氣氛。
       ⚠️ 「溫暖」的主力在 --bg（紙）不在 --text（墨）：降底色比加深字色有效，
       且不會踩到中文密筆畫在極高對比白底上的光暈問題。別把 --text 往純黑推。 */
    :root {
      --bg: #fdfcfa;            /* 紙：極淡暖白，取代純白 #fff */
      --text: #2c2825;          /* 主文字 */
      --text-muted: #6d6862;    /* 次要文字 */
      --text-faint: #857f77;    /* 最淡（提問、預計時間、頁腳等輔助）。對 --bg 是 3.86:1、
                                   未達 AA 的 4.5:1，**這是 founder 看過兩版後選的**，見下方
                                   .transcript 註解。別逕自改深：改到 #78736c（4.59:1）就會與
                                   --text-muted（5.38:1）太近，三層灰塌成兩層。*/
      --border: #e8e4dd;        /* 柔邊 */
      --border-strong: #d8d3ca; /* hover／使用者泡外框 */
      --border-input: #cfc9c0;  /* 輸入框外框（比 --border-strong 再深一階，沿用改版前 #ccc 的角色）*/
      --surface: #f5f2ec;       /* AI 泡、輕區塊底 */
      --surface-strong: #ece8e0;/* 卡 hover */
      --bubble-user: #eeeae3;   /* 使用者泡底 */
      --on-dark: #fdfcfa;       /* 深底上的字／圖示：跟紙同色，不用純白（純白在暖色深底上會發青）*/
      --danger: #a8372b;        /* 錯誤字（暖調紅，對 --bg 6.3:1）*/
      --radius: 10px;
      --radius-sm: 8px;
      /* 字級尺標（W1 走查修2）：對話文字＋任務卡任務內容收到同一主要閱讀字級；
         其餘次級文字（task-sub/record-q/record-a/section-label/done-tomorrow）收到同一次級字級。
         --font-primary 定案 1rem（founder 從 0.95rem／1rem 對照截圖選定，跟頁面既有 input/button 的 1rem 一致，不多引入新尺寸）。 */
      --font-primary: 1.0625rem;   /* 17px，與 body 同級 */
      --font-secondary: 0.9375rem; /* 15px */
      /* body 左右 padding 抽成變數：.input-bar 的滿版負 margin 要跟這個值對齊，不各寫一次 */
      --body-pad-x: 1.25rem;
      /* 內容欄寬（所有畫面共用：body、chat-fullscreen 的 --bleed-pad、輸入框外殼三處都吃這個）。
         680px → 768px：對照 ChatGPT／Claude 的 100% 縮放截圖，兩者的對話欄／輸入框都在 768px
         量級，原本 680px 明顯窄一截、輸入框也跟著窄。768px 扣掉左右內距後每行約 48 個中文字，
         仍在中文舒適行長（35–50 字）內。改這一個值，四頁與輸入框一起變寬。 */
      --content-w: 768px;
    }
    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
    body {
      /* fallback 一定要明寫台灣字型：讓它自然掉到簡體字形時，骨／直／戶 的字形差異對
         台灣使用者很刺眼。Noto Sans TC 沒載到時依序退蘋方 → 微軟正黑體，仍是 TC 字形。 */
      font-family: "Noto Sans TC", -apple-system, BlinkMacSystemFont,
                   "PingFang TC", "Microsoft JhengHei", system-ui, sans-serif;
      /* 17px（1.0625rem）：中文方塊字在 16px 偏小。刻意寫成 rem 而不是改 html font-size——
         後者會把所有 rem 間距等比放大 6.25%，而本檔的間距是逐項對照截圖調過的，不能跟著動。
         同理，line-height 1.6 → 1.75：中文密度高，1.6 偏緊；letter-spacing 0.015em 是中文
         專屬的呼吸（英文區塊不另加，這個量級對英數字幾乎不可見）。 */
      font-size: 1.0625rem; line-height: 1.75; letter-spacing: 0.015em;
      color: var(--text); background: var(--bg);
      max-width: var(--content-w); margin: 3rem auto; padding: 0 var(--body-pad-x);
      /* 可繼承屬性，蓋掉所有自由文字表面；只在整條字串無斷點且超寬時介入，正常文字零影響 */
      overflow-wrap: anywhere;
    }
    /* 靜態頁共用節奏（選項／等待／成果／紀錄）：標題→內容 2rem、卡片→下一區 2.5rem，
       讓區塊邊界的間距明顯大於區塊內間距，層次拉開；四頁一致、不各自 scope 特例 */
    h1 { font-size: 1.25rem; font-weight: 600; margin-bottom: 2rem; line-height: 1.45; }
    label { display: block; font-size: 0.9rem; margin-bottom: 0.25rem; }
    input, textarea {
      width: 100%; border: 1px solid var(--border-input); border-radius: 4px;
      padding: 0.5rem 0.625rem; font-size: 1.0625rem;
      margin-bottom: 0.875rem; font-family: inherit;
    }
    textarea { resize: vertical; }
    /* 打字不變藍：拿掉 focus 藍框/藍 outline，維持中性邊框（Dogfood-7）*/
    input:focus, textarea:focus { outline: none; border-color: var(--border-input); }
    /* 輸入列高度會隨 textarea 長高變動（見 syncInputBarHeight），padding-bottom 跟著同步；
       6rem 是 syncInputBarHeight 還沒跑過前的初始值（沿用重構前的固定值） */
    body.has-fixed-input { padding-bottom: calc(var(--input-bar-h, 6rem) + 1rem); }
    /* 選項卡刻意只放一段純文字：est_min／角度等次級行是故意不放的（跟預算重複、卡片要簡單）。
       長文字靠留白呼吸：卡內 padding 加大；卡間距 1.25rem > 卡內行距（~24px），拉開卡內/卡外邊界 */
    .card {
      border: 1px solid var(--border); border-radius: var(--radius);
      padding: 1.125rem 1.25rem; margin-bottom: 1.25rem; cursor: pointer;
      line-height: 1.7; transition: background 0.15s ease, border-color 0.15s ease;
    }
    /* 克制：hover 只加深底色＋邊框，不加位移、不加陰影 */
    .card:hover { background: var(--surface); border-color: var(--border-strong); }
    .card:active { background: var(--surface-strong); }
    button {
      background: var(--text); color: var(--on-dark); border: none; border-radius: var(--radius-sm);
      padding: 0.7rem 1.5rem; font-size: 1rem; cursor: pointer;
      transition: background 0.15s ease;
    }
    /* hover 往「亮一階」走：深底鈕變暗（→#000）幾乎看不出，改變亮才有明顯回饋（克制：不加位移/陰影）*/
    button:hover { background: #4a443d; }
    button:disabled { opacity: 0.45; cursor: not-allowed; }
    .link-btn {
      background: none; color: var(--text-muted); font-size: 0.9rem;
      padding: 0; text-decoration: underline; cursor: pointer; border: none;
    }
    /* 補 background:none：否則 button:hover 的深底會洩到 link-btn（它是 <button>）變全黑 */
    .link-btn:hover { color: var(--text); background: none; }
    /* line-height 明寫（04e）：.error 原本繼承 body 的行高，body 是 1.6 時行盒就已經 22.4px、
       悄悄蓋過下面 min-height 的 20px；04e 把 body 改 1.75 後變 24.5px，偏差更大。
       1.4 → 14px × 1.4 = 19.6px < min-height 20px，min-height 重新成為實際高度，
       坑紀錄裡「錯誤區 20px ＋ margin-top 8px ＋ padding」那筆帳才重新對得上。
       ⚠️ 別把這行拿掉改回繼承——body 行高一動，這裡的高度就會再次悄悄漂走，而且不會有任何
       地方報錯（acceptance 碰不到 CSS）。 */
    .error  { color: var(--danger); font-size: 0.875rem; line-height: 1.4; margin-top: 0.5rem; min-height: 1.25rem; }
    /* 輸入列的錯誤區沒訊息時，min-height 仍占掉一截空白（Dogfood 反饋：留白偏多）；
       :empty 只在真的沒錯誤文字時收起，setErr() 寫入文字後 :empty 不再匹配、照舊顯示 */
    .input-bar > .error:empty { display: none; }
    /* Dogfood-8：自建入口靠右，跟左側全寬選項卡形成「主線 vs 旁路」的位置對比。
       間距（批次C，founder 拍板對齊既有節奏）：上距 2rem＝h1「選一條今天的方向」→選項卡的距離
      （會與選項卡 margin-bottom 1.25rem 收合、取大值 2rem）；下距見 #custom-form */
    .custom-toggle-row { text-align: right; margin-top: 2rem; }
    /* 兩個確認型 CTA（建立任務／完成）共用：置中＋內容寬（fit-content 取代原固定 11rem——
       11rem 對「完成」兩字太空曠、變成笨重黑塊）；padding／字級收斂成緊湊 pill，降低量感與搶眼度。
       min-width 給短字一個舒適下限，避免「完成」窄到擠。 */
    .btn-centered {
      display: block; width: fit-content; min-width: 7rem;
      margin-left: auto; margin-right: auto;
      padding: 0.55rem 1.6rem; font-size: 0.95rem; font-weight: 500;
    }

