/* ============================================================
   專案管理 — 平台自己的樣式
   元件（按鈕、欄位、表格、對話框、抽屜、側欄、頂列⋯）一律用 MaiAgent UI System（/vendor/maiagent-ds.css），
   這裡只放規範沒有的部分：任務卡、問題清單、甘特圖、簡易編輯器、AI 摘要排版。
   所有顏色／間距／圓角／陰影都引用規範的 semantic token；介面只用淺色（<html data-theme="light">）。
   class 一律用 pt- 前綴（甘特圖、編輯器、Asana 確認畫面沿用 app.js 既有的名稱）。
   ============================================================ */

:root {
  /* 甘特圖左側任務名稱欄的寬度，要跟 app.js 的 GANTT_LABEL_PX 一致（「今天」那條線的位置是用它算的） */
  --pt-gantt-label: 180px;
}

[hidden] { display: none !important; }
*, *::before, *::after { box-sizing: border-box; }
html, body { margin: 0; }
body {
  background: var(--color-bg-canvas);
  color: var(--color-text-primary);
  font-family: var(--font-sans);
  font-size: var(--text-body);
  line-height: var(--leading-body);
}
a { color: var(--color-text-link); }
h1, h2, h3, h4, p { margin: 0; }
button { font: inherit; }

/* ---------- 共用小工具 ---------- */
.pt-row { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-sm); }
.pt-row--center { justify-content: center; }
.pt-spacer { flex: 1; }
.pt-muted { color: var(--color-text-tertiary); font-size: var(--text-caption); line-height: var(--leading-caption); }
.pt-cell-strong { font-weight: var(--weight-medium); color: var(--color-text-primary); }
.pt-nowrap { white-space: nowrap; }
.pt-late { color: var(--color-warning-text); }
.pt-count {
  display: inline-flex; align-items: center; gap: var(--space-xs);
  color: var(--color-text-tertiary); font-size: var(--text-caption); line-height: var(--leading-caption);
  font-variant-numeric: tabular-nums;
}

/* ---------- 標誌 ---------- */
.pt-logo--sider { height: var(--icon-lg); width: auto; }

/* ---------- 載入中／全螢幕同步遮罩／Toast ---------- */
.pt-boot {
  min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: var(--space-lg); color: var(--color-text-tertiary);
}
.pt-boot__mark { width: var(--space-2xl); height: var(--space-2xl); }
.pt-sync {
  display: flex; align-items: center; gap: var(--space-sm);
  padding: var(--space-lg) var(--space-xl); border-radius: var(--radius-lg);
  background: var(--color-bg-page); box-shadow: var(--shadow-overlay); color: var(--color-text-primary);
}
#syncOverlay { z-index: var(--z-blocking); }
.pt-toast {
  position: fixed; top: var(--space-lg); left: 50%; transform: translateX(-50%);
  z-index: var(--z-toast); max-width: calc(100vw - var(--space-xl));
}
.pt-inline-status { align-self: flex-start; }

/* ---------- 登入／設定密碼：淺灰底上置中一張卡片（同 MaiAgent Crew 登入頁） ---------- */
.pt-auth {
  min-height: 100vh; display: grid; place-items: center;
  padding: var(--space-6) var(--space-lg);
}
.pt-auth__card {
  width: 100%; max-width: 420px;
  display: flex; flex-direction: column; align-items: center; gap: var(--space-6);
  padding: var(--space-xl); background: var(--color-bg-page);
  border: 1px solid var(--color-border-faint); border-radius: var(--radius-surface);
}
.pt-auth__head { display: flex; flex-direction: column; align-items: center; gap: var(--space-sm); text-align: center; }
.pt-auth__logo { height: var(--space-xl); width: auto; margin-bottom: var(--space-sm); }
.pt-auth__title { font-size: var(--text-h2); line-height: var(--leading-h2); font-weight: var(--weight-bold); overflow-wrap: anywhere; text-wrap: balance; }
.pt-auth__lead { color: var(--color-text-tertiary); overflow-wrap: anywhere; text-wrap: balance; }
.pt-auth__form:empty { display: none; }
@media (max-width: 480px) {
  .pt-auth { padding: var(--space-lg); place-items: start center; }
  .pt-auth__card { padding: var(--space-6) var(--space-lg); }
}

/* ---------- 側欄補充：產品名、手機抽屜 ---------- */
.pt-sider__product {
  padding: 0 var(--space-sm) var(--space-sm);
  color: var(--color-text-tertiary); font-size: var(--text-caption); line-height: var(--leading-caption);
}
.pt-sider__none { color: var(--color-text-tertiary); cursor: default; }
.pt-sider__none:hover { background: none; color: var(--color-text-tertiary); }
.pt-sider-link { text-decoration: none; }

/* ---------- 專案側欄：切換器、頁面選單、筆數 ---------- */
.pt-project-switch { margin-bottom: var(--space-sm); }
.pt-project-switch__btn { width: 100%; text-align: left; }
/* 規範的選單預設 min-width: max-content，長專案名稱會撐出側欄；這裡改成跟切換器同寬、名稱過長截斷 */
.pt-project-switch > .pt-project-menu { display: flex; flex-direction: column; min-width: 0; }
.pt-project-menu__search { padding: var(--space-xs) var(--space-xs) var(--space-sm); }
.pt-project-menu__list { display: flex; flex-direction: column; max-height: 50vh; overflow-y: auto; }
.pt-project-menu__item { text-decoration: none; }
.pt-project-menu__item[hidden] { display: none; }
.pt-project-menu__name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pt-project-menu__client { flex-shrink: 1; min-width: 0; max-width: 45%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pt-project-nav { flex: 1; }
/* 專案頁的側欄分成四組：群組標題是小字的段落名（可收合），底下的頁面帶小圖示、只縮排一點 */
.pt-project-nav .sider__group { margin-top: var(--space-sm); }
.pt-project-nav .sider__group > .sider__item {
  min-height: 0; padding-top: var(--space-xs); padding-bottom: var(--space-xs);
  color: var(--color-text-tertiary); font-size: var(--text-caption); line-height: var(--leading-caption); font-weight: var(--weight-medium);
}
.pt-project-nav .sider__group > .sider__item.is-onpath { color: var(--color-text-accent); }
.pt-project-nav .sider__subs .sider__item { padding-left: var(--space-sm); }
.pt-sider__count {
  margin-left: auto; color: var(--color-text-tertiary);
  font-size: var(--text-caption); line-height: var(--leading-caption); font-variant-numeric: tabular-nums;
}
.pt-project-nav .pt-unread { margin-left: auto; }
.pt-sider-btn { width: 100%; border: 0; background: none; font: inherit; color: inherit; text-align: left; cursor: pointer; }
.pt-kpi-link { color: inherit; text-decoration: none; }

/* ---------- 會議紀錄與待辦 ---------- */
.pt-meeting__head { gap: var(--space-sm); flex-wrap: wrap; }
.pt-meeting__toggle {
  display: inline-flex; align-items: center; gap: var(--space-sm); min-width: 0; flex: 1;
  padding: 0; border: 0; background: none; font: inherit; color: inherit; text-align: left; cursor: pointer;
}
.pt-meeting__date { color: var(--color-text-tertiary); font-variant-numeric: tabular-nums; white-space: nowrap; }
.pt-meeting:not(.is-open) .card__head { padding-bottom: var(--space-lg); }
.pt-meeting--source .pt-meeting__toggle { text-decoration: none; }
.pt-meeting--source span.pt-meeting__toggle { cursor: default; }
@media (max-width: 480px) { .pt-meeting__toggle { flex-basis: 100%; } }
.pt-meeting--source a.pt-meeting__toggle:hover .card__title { text-decoration: underline; }
.pt-meeting__body { display: flex; flex-direction: column; gap: var(--space-lg); }
.pt-meeting__label {
  margin-bottom: var(--space-xs); color: var(--color-text-tertiary);
  font-size: var(--text-caption); line-height: var(--leading-caption); font-weight: var(--weight-medium);
}
.pt-meeting__people { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-sm); }
.pt-meeting__people .pt-meeting__label { margin: 0; }
.pt-meeting__person { display: inline-flex; align-items: center; gap: var(--space-xs); }
.pt-meeting__summary { white-space: pre-wrap; }
.pt-meeting__decisions { margin: 0; padding-left: var(--space-6); display: flex; flex-direction: column; gap: var(--space-xs); }
.pt-actions { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.pt-action { display: flex; align-items: flex-start; gap: var(--space-sm); padding: var(--space-sm) 0; border-top: 1px solid var(--color-border-faint); }
.pt-action:first-child { border-top: 0; }
.pt-action__body { flex: 1; min-width: 0; }
.pt-action__content { overflow-wrap: anywhere; white-space: pre-wrap; }
.pt-action.is-done .pt-action__content { color: var(--color-text-tertiary); text-decoration: line-through; }
.pt-action__meta {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-sm); margin-top: var(--space-xs);
  color: var(--color-text-secondary); font-size: var(--text-caption); line-height: var(--leading-caption);
}
.pt-action__meta > span { display: inline-flex; align-items: center; gap: var(--space-xs); }
.pt-action__tools { display: inline-flex; gap: var(--space-sm); white-space: nowrap; }
.pt-attendee-picks { display: flex; flex-wrap: wrap; gap: var(--space-sm) var(--space-lg); }

/* ---------- 人員與窗口：依單位分組的人員卡片 ---------- */
.pt-people-party__body { display: flex; flex-direction: column; gap: var(--space-lg); }
.pt-people__dept {
  font-size: var(--text-caption); line-height: var(--leading-caption);
  font-weight: var(--weight-medium); color: var(--color-text-tertiary);
}
.pt-people-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: var(--space-lg); }
.pt-person {
  display: flex; flex-direction: column; gap: var(--space-sm); min-width: 0;
  padding: var(--space-lg); background: var(--color-bg-page);
  border: 1px solid var(--color-border-faint); border-radius: var(--radius-lg);
}
.pt-person__head { display: flex; align-items: flex-start; gap: var(--space-sm); }
.pt-person__who { flex: 1; min-width: 0; }
.pt-person__name { font-weight: var(--weight-medium); overflow-wrap: anywhere; }
.pt-person__reach { display: flex; flex-direction: column; gap: var(--space-xs); font-size: var(--text-caption); line-height: var(--leading-caption); }
.pt-person__reach > div { display: flex; align-items: center; gap: var(--space-xs); min-width: 0; overflow-wrap: anywhere; }
.pt-person__note { color: var(--color-text-secondary); font-size: var(--text-caption); line-height: var(--leading-caption); white-space: pre-wrap; }
.pt-person__staff { display: flex; flex-direction: column; gap: var(--space-xs); padding: var(--space-xs) var(--space-sm); border-radius: var(--radius-sm); background: var(--color-bg-subtle); font-size: var(--text-caption); line-height: var(--leading-caption); overflow-wrap: anywhere; }
.pt-person__actions { display: flex; gap: var(--space-sm); margin-top: auto; }
.pt-person-inline { flex-wrap: nowrap; align-items: flex-start; }
/* 用 <a> 做的按鈕（連到別頁或站外）不要瀏覽器預設的底線；連結層級按鈕滑過時的底線由規範給 */
.pt-a-btn { text-decoration: none; }
.pt-nav-toggle { display: none; }
.pt-nav-scrim { justify-content: flex-start; align-items: stretch; padding: 0; }
.pt-sider-sheet {
  width: min(var(--size-sider-mobile-width), calc(100vw - var(--space-2xl)));
  height: 100%; box-shadow: var(--shadow-overlay); z-index: var(--z-modal);
}
@media (max-width: 768px) {
  .pt-nav-toggle { display: inline-flex; }
  .pt-shellbar { padding: 0 var(--space-lg); gap: var(--space-sm); }
  .pt-crumb { overflow: hidden; white-space: nowrap; }
  .pt-hide-mobile { display: none; }
}

/* ---------- 頂列：通知面板、使用者選單 ---------- */
.notif-wrap, .pt-user-anchor { display: inline-flex; }
.pt-notif__panel {
  position: absolute; top: 100%; right: 0; margin-top: var(--space-xs);
  width: min(420px, calc(100vw - var(--space-xl))); max-height: 70vh;
  display: flex; flex-direction: column; z-index: var(--z-dropdown);
}
.pt-notif__list { overflow-y: auto; }
.pt-user-menu {
  position: absolute; top: 100%; right: 0; margin-top: var(--space-xs);
  width: max-content; min-width: var(--size-control-min-width); max-height: none; z-index: var(--z-dropdown);
}
.pt-user-caret { color: var(--color-text-tertiary); }
.pt-user-btn { border: none; background: none; font: inherit; color: var(--color-text-primary); text-align: left; }
.pt-user-menu > button, .combo-list > button { width: 100%; border: none; background: none; text-align: left; }

/* ---------- 頁面標題列（規範 11 章） ---------- */
.pt-head { display: flex; flex-wrap: wrap; align-items: flex-start; gap: var(--space-lg); }
.pt-head__text { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: var(--space-xs); }
.pt-head__title { font-size: var(--text-h2); line-height: var(--leading-h2); font-weight: var(--weight-bold); }
.pt-head__desc { color: var(--color-text-tertiary); }
.pt-head__link { vertical-align: baseline; }
.pt-head__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-sm); }

/* ---------- 專案總覽 ---------- */
.pt-project { cursor: pointer; transition: border-color var(--duration-fast) var(--ease-standard), box-shadow var(--duration-fast) var(--ease-standard); }
.pt-project:hover { border-color: var(--color-action-primary); box-shadow: var(--shadow-sm); }
.pt-project:focus-visible { outline: none; box-shadow: var(--shadow-focus-ring); }
.pt-project__title { font-weight: var(--weight-medium); color: var(--color-text-primary); }
.pt-project__body { display: flex; flex-direction: column; gap: var(--space-sm); }
.pt-project__meta, .pt-project__foot { color: var(--color-text-tertiary); font-size: var(--text-caption); line-height: var(--leading-caption); }
.pt-project__foot { display: flex; justify-content: space-between; gap: var(--space-sm); }

/* ---------- 專案頁：每個區塊一頁，內容一欄往下排 ---------- */
.pt-project-main { display: flex; flex-direction: column; gap: var(--space-lg); min-width: 0; }

/* KPI 四格：欄寬夠就排一列，不夠（手機）就 2×2，卡片內容照規範 08 章；整張可點，帶篩選進任務單 */
.pt-project-main { container-type: inline-size; }
.pt-kpis { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--space-lg); }
@container (max-width: 760px) { .pt-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
/* 專案總覽的五張 KPI：寬螢幕一排五張，筆電寬度三張一排（標題才不會折行），手機兩張 */
.pt-kpis--5 { grid-template-columns: repeat(5, minmax(0, 1fr)); gap: var(--space-sm); }
@media (max-width: 1440px) { .pt-kpis--5 { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 760px) { .pt-kpis--5 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* ---------- 專案資訊卡：基本資料、時程、聯絡窗口 ---------- */
.pt-info__body { display: flex; flex-direction: column; gap: var(--space-6); }
.pt-info__desc { white-space: pre-wrap; color: var(--color-text-secondary); }
/* 行數要跟 app.js 的 INFO_DESC_PREVIEW_LINES 一致 */
.pt-info__desc.is-clamped { display: -webkit-box; -webkit-line-clamp: 5; -webkit-box-orient: vertical; overflow: hidden; }
.pt-info__more { align-self: flex-start; }
.pt-lock { display: inline-flex; vertical-align: middle; color: var(--color-text-tertiary); }
.pt-info__block { display: flex; flex-direction: column; gap: var(--space-sm); }
.pt-info__bar { display: flex; align-items: center; justify-content: space-between; gap: var(--space-sm); }
.pt-info__title {
  display: inline-flex; align-items: center; gap: var(--space-xs);
  font-size: var(--text-h4); line-height: var(--leading-h4); font-weight: var(--weight-medium);
}
/* 可能屬於這個專案的 LINE 群組：理由可以換行、三個操作直排，表格不會被撐寬 */
td.pt-suggest-why { white-space: normal; min-width: 14rem; }
.pt-suggest-actions { flex-direction: column; align-items: flex-start; }
.pt-suggest-alert { margin-bottom: var(--space-sm); }
/* 規範的多欄說明列表看視窗寬度決定欄數；這裡放在專案頁內容區（左邊還有側欄），改看內容區寬度 */
@container (max-width: 760px) {
  .pt-info .pt-info__facts { grid-template-columns: repeat(2, minmax(96px, max-content) minmax(0, 1fr)); }
}
@container (max-width: 480px) {
  .pt-info .pt-info__facts { grid-template-columns: minmax(96px, max-content) minmax(0, 1fr); }
}

.pt-overall { display: flex; align-items: center; gap: var(--space-lg); }
.pt-overall__label { flex: none; font-weight: var(--weight-medium); }
.pt-overall__bar { flex: 1; }

.pt-listbar { flex-wrap: wrap; }
.pt-listbar .pt-listbar__select { width: auto; flex: 0 0 auto; }
.pt-view-toggle, .pt-zoom { display: inline-flex; align-items: center; gap: var(--space-xs); }
.pt-row-actions { flex-wrap: wrap; white-space: normal; }
.pt-zoom__label { min-width: var(--space-xl); text-align: center; color: var(--color-text-secondary); }

/* ---------- 任務卡 ---------- */
.pt-section { display: flex; flex-direction: column; gap: var(--space-sm); }
.pt-section__title {
  display: flex; align-items: center; gap: var(--space-sm);
  font-size: var(--text-h4); line-height: var(--leading-h4); font-weight: var(--weight-medium);
}
.pt-section__count { color: var(--color-text-tertiary); font-size: var(--text-caption); font-weight: var(--weight-regular); }
.pt-task-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-sm); }
@media (max-width: 1024px) { .pt-task-list, .pt-task-children { grid-template-columns: minmax(0, 1fr); } }

.pt-task {
  position: relative; display: flex; flex-direction: column; gap: var(--space-sm);
  padding: var(--space-lg); border: 1px solid var(--color-border-faint); border-radius: var(--radius-lg);
  background: var(--color-bg-page); cursor: pointer;
  transition: border-color var(--duration-fast) var(--ease-standard), box-shadow var(--duration-fast) var(--ease-standard);
}
.pt-task:hover { border-color: var(--color-action-primary); box-shadow: var(--shadow-sm); }
.pt-task:focus-visible { outline: none; box-shadow: var(--shadow-focus-ring); }
.pt-task.is-done .pt-task__title { color: var(--color-text-secondary); }
/* 一眼看出狀態：逾期從左邊紅色漸到白、待客戶確認橘色、已完成綠色（逾期優先於待客戶確認） */
.pt-task.is-doing, .pt-task-head.is-doing { background: linear-gradient(90deg, var(--color-info-bg), var(--color-bg-page) 70%); border-color: var(--color-info-border); }
.pt-task.is-await, .pt-task-head.is-await { background: linear-gradient(90deg, var(--color-notice-bg), var(--color-bg-page) 70%); border-color: var(--color-notice-border); }
.pt-task.is-late, .pt-task-head.is-late { background: linear-gradient(90deg, var(--color-warning-bg), var(--color-bg-page) 70%); border-color: var(--color-warning-border); }
.pt-task.is-done, .pt-task-head.is-done { background: linear-gradient(90deg, var(--color-success-bg), var(--color-bg-page) 70%); border-color: var(--color-success-border); }
.pt-task--bug { border-color: var(--color-notice-border); }
.pt-task__top { display: flex; align-items: flex-start; gap: var(--space-sm); }
.pt-task__title { flex: 1; min-width: 0; font-weight: var(--weight-medium); overflow-wrap: anywhere; }
.pt-task__sub { margin-right: var(--space-xs); color: var(--color-text-tertiary); }
.pt-task__tags { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-xs); }
.pt-task__desc {
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
  color: var(--color-text-secondary); font-size: var(--text-caption); line-height: var(--leading-caption);
}
.pt-task__meta {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-sm);
  color: var(--color-text-tertiary); font-size: var(--text-caption); line-height: var(--leading-caption);
}
.pt-task__top .pt-unread { flex: none; margin-top: var(--space-sm); }
.pt-mini-select {
  height: var(--size-control-height-sm); padding: 0 var(--space-sm);
  border: 1px solid var(--color-border-subtle); border-radius: var(--radius-md);
  background: var(--color-bg-page); color: var(--color-text-primary);
  font: inherit; font-size: var(--text-caption); cursor: pointer;
}
.pt-mini-select:focus-visible { outline: none; box-shadow: var(--shadow-focus-ring); }

.pt-rejected > summary {
  display: inline-flex; align-items: center; gap: var(--space-xs);
  color: var(--color-text-tertiary); cursor: pointer; list-style: none;
}
.pt-rejected > summary::-webkit-details-marker { display: none; }
.pt-rejected__caret { transition: transform var(--duration-fast) var(--ease-standard); }
.pt-rejected[open] .pt-rejected__caret { transform: rotate(90deg); }
.pt-rejected > .pt-task-list { margin-top: var(--space-sm); }

/* ---------- 問題與留言頁：問題清單／卡片留言 ---------- */
.pt-issue-panel { display: flex; flex-direction: column; }
.pt-issue-tabs { margin: var(--space-sm) var(--space-sm) 0; overflow: visible; }
.pt-issue-tabs .pt-unread { margin-left: var(--space-xs); }
.pt-quick-issue { display: flex; flex-direction: column; align-items: flex-end; gap: var(--space-sm); padding: var(--space-sm) var(--space-lg) 0; }
.pt-quick-issue > .rte { align-self: stretch; }
.pt-issue-panel__tools { display: flex; align-items: center; gap: var(--space-sm); padding: var(--space-sm) var(--space-lg); }
.pt-issue-search { min-width: 0; flex: 1; }
.pt-issue-list { display: flex; flex-direction: column; gap: var(--space-xs); padding: 0 var(--space-sm) var(--space-sm); }

.pt-issue {
  display: flex; align-items: flex-start; gap: var(--space-sm);
  padding: var(--space-sm); border-radius: var(--radius-md); cursor: pointer;
  transition: background var(--duration-fast) var(--ease-standard);
}
.pt-issue:hover { background: var(--color-bg-item-hover); }
.pt-issue:focus-visible { outline: none; box-shadow: var(--shadow-focus-ring-inset); }
.pt-issue.is-open { background: var(--color-action-subtle); }
.pt-issue.is-closed .pt-issue__name, .pt-issue.is-closed .pt-issue__preview { color: var(--color-text-tertiary); }
.pt-avatar-slot { flex: none; display: inline-flex; }
.pt-issue__body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: var(--space-xs); }
.pt-issue__head { display: flex; align-items: center; gap: var(--space-sm); }
.pt-issue__name { flex: 1; min-width: 0; font-weight: var(--weight-medium); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pt-issue__time { color: var(--color-text-tertiary); font-size: var(--text-caption); line-height: var(--leading-caption); }
/* ---------- AI 專案助理 ---------- */
.pt-ai {
  display: flex; flex-direction: column; gap: var(--space-lg);
  padding: var(--space-6) 0 var(--space-lg); border-radius: var(--radius-lg); background: var(--color-bg-page);
}
.pt-ai-notice {
  display: flex; align-items: flex-start; gap: var(--space-xs); width: min(var(--size-chat-max-width), 100%); margin: 0 auto; padding: 0 var(--space-lg);
  color: var(--color-text-tertiary); font-size: var(--text-caption); line-height: var(--leading-caption);
}
.pt-ai-view { width: auto; }
.pt-ai-home { display: flex; flex-direction: column; align-items: center; gap: var(--space-sm); padding: var(--space-xl) var(--space-lg); text-align: center; }
.pt-ai-greeting { display: flex; align-items: center; gap: var(--space-sm); font-size: var(--text-h3); line-height: var(--leading-h3); font-weight: var(--weight-bold); }
.pt-ai-examples { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--space-sm); margin-top: var(--space-sm); }
.pt-ai-avatar { background: var(--color-info-bg); color: var(--color-info-text); }
.pt-ai-meta {
  display: flex; align-items: center; gap: var(--space-sm);
  color: var(--color-text-tertiary); font-size: var(--text-caption); line-height: var(--leading-caption);
}
.pt-ai-handoff { display: inline-flex; align-items: center; gap: var(--space-xs); }
.pt-ai-ref {
  display: inline-flex; align-items: center; margin: 0 var(--space-xs); padding: 0 var(--space-xs); vertical-align: baseline;
  border: 1px solid var(--color-info-border); border-radius: var(--radius-sm); background: var(--color-info-bg);
  color: var(--color-info-text); font: inherit; font-size: var(--text-caption); line-height: var(--leading-caption); cursor: pointer;
  text-decoration: none;
}
.pt-ai-ref:hover { background: var(--color-bg-hover); }
.pt-ai-ref--static { cursor: default; }
.pt-ai-ref--static:hover { background: var(--color-info-bg); }
.pt-ai-composer {
  position: sticky; bottom: var(--space-lg); z-index: 1;
  width: min(var(--size-chat-max-width), 100%); margin: 0 auto; padding: 0 var(--space-lg);
}
.pt-ai-composer__box { padding: var(--space-sm) var(--space-lg); }
.pt-ai-quick {
  display: flex; gap: var(--space-xs); max-width: 100%; overflow-x: auto; scrollbar-width: none;
  border-radius: var(--radius-md); background: var(--color-bg-page);
}
.pt-ai-quick::-webkit-scrollbar { display: none; }
.pt-ai-quick > .btn { flex: none; }
.pt-ai-draft {
  margin: var(--space-sm) 0; border: 1px solid var(--color-border-subtle); border-radius: var(--radius-md); background: var(--color-bg-subtle);
}
.pt-ai-draft__head {
  display: flex; align-items: center; justify-content: space-between; gap: var(--space-sm);
  padding: var(--space-xs) var(--space-sm); border-bottom: 1px solid var(--color-border-faint);
  color: var(--color-text-tertiary); font-size: var(--text-caption); line-height: var(--leading-caption);
}
.pt-ai-draft__text { padding: var(--space-sm); }
.pt-ai-cut { margin-top: var(--space-sm); }
.pt-ai-actions { margin-top: var(--space-sm); padding-top: var(--space-sm); border-top: 1px solid var(--color-border-faint); }
.pt-ai-actions__title { margin-bottom: var(--space-xs); font-weight: var(--weight-medium); }
.pt-ai-actions__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--space-xs); }
.pt-ai-actions__item { display: flex; align-items: center; justify-content: space-between; gap: var(--space-sm); }
.pt-ai-actions__text { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0 var(--space-sm); min-width: 0; overflow-wrap: anywhere; }
.pt-ai-actions__item .btn { flex-shrink: 0; }
.pt-ai-composer__row { display: flex; align-items: center; justify-content: space-between; gap: var(--space-sm); }

/* ---------- 跨專案近期項目 ---------- */
.pt-agenda { display: flex; flex-direction: column; gap: var(--space-lg); }
.pt-agenda__day { display: flex; align-items: center; gap: var(--space-sm); margin: 0 0 var(--space-xs); font-size: var(--text-body); font-weight: var(--weight-medium); }
.pt-agenda__group--late .pt-agenda__day { color: var(--color-warning-text); }
.pt-agenda__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.pt-agenda__item { display: flex; align-items: center; gap: var(--space-sm); padding: var(--space-sm) 0; border-top: 1px solid var(--color-border-faint); }
.pt-agenda__item:first-child { border-top: 0; }
.pt-agenda__body { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; align-items: baseline; gap: 0 var(--space-sm); overflow-wrap: anywhere; }
.pt-agenda__title { font-weight: var(--weight-medium); }

/* ---------- 里程碑時間軸 ---------- */
.pt-tl-scroll { overflow-x: auto; overscroll-behavior-x: contain; }
.pt-tl {
  --pt-tl-label: 200px;
  position: relative; display: grid; grid-template-columns: var(--pt-tl-label) minmax(0, 1fr); min-width: 640px;
}
.pt-tl__overlay { position: absolute; top: 0; bottom: 0; left: var(--pt-tl-label); right: 0; pointer-events: none; }
.pt-tl__label {
  display: flex; flex-direction: column; justify-content: center; min-width: 0;
  padding: var(--space-xs) var(--space-sm) var(--space-xs) 0; border-top: 1px solid var(--color-border-faint);
}
.pt-tl__label--head { border-top: 0; }
.pt-tl__name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pt-tl__track { position: relative; min-height: calc(var(--space-6) + var(--space-lg)); border-top: 1px solid var(--color-border-faint); }
.pt-tl__head, .pt-tl__foot { position: relative; height: var(--space-6); }
.pt-tl__month, .pt-tl__today-label {
  position: absolute; top: 0; padding-left: var(--space-xs); white-space: nowrap;
  color: var(--color-text-tertiary); font-size: var(--text-caption); line-height: var(--leading-caption);
}
.pt-tl__month.is-end { transform: translateX(-100%); padding-left: 0; padding-right: var(--space-xs); }
.pt-tl__today-label { top: var(--space-xs); transform: translateX(-50%); padding-left: 0; color: var(--color-info-text); font-weight: var(--weight-medium); }
.pt-tl__grid { position: absolute; top: 0; bottom: 0; width: 1px; background: var(--color-border-faint); }
.pt-tl__today { position: absolute; top: 0; bottom: var(--space-6); width: 2px; transform: translateX(-50%); background: var(--color-info-solid); }
.pt-tl__mark, .pt-tl__key {
  width: calc(var(--space-sm) * 1.5); height: calc(var(--space-sm) * 1.5); border-radius: var(--radius-2);
  background: var(--color-info-solid); border: 2px solid transparent;
}
.pt-tl__mark { position: absolute; top: 50%; transform: translate(-50%, -50%) rotate(45deg); }
.pt-tl__mark--soon { background: var(--color-notice-solid); }
.pt-tl__mark--late { background: var(--color-warning-solid); }
.pt-tl__mark--done { background: var(--color-success-solid); }
.pt-tl__mark--base { background: var(--color-bg-panel); border-color: var(--color-text-tertiary); }
.pt-tl__slip { position: absolute; top: 50%; height: 2px; transform: translateY(-50%); background: var(--color-notice-border); }
.pt-tl__band {
  position: absolute; top: 50%; height: var(--space-sm); transform: translateY(-50%);
  background: var(--color-info-bg); border: 1px solid var(--color-info-border); border-radius: var(--radius-full);
}
.pt-tl__undated { margin-top: var(--space-sm); }
.pt-tl-legend {
  display: flex; flex-wrap: wrap; margin-bottom: var(--space-sm); gap: var(--space-sm) var(--space-lg); align-items: center;
  color: var(--color-text-secondary); font-size: var(--text-caption); line-height: var(--leading-caption);
}
.pt-tl-legend > span { display: inline-flex; align-items: center; gap: var(--space-xs); }
.pt-tl__key { display: inline-block; transform: rotate(45deg) scale(0.8); }
.pt-tl__key--today { width: 2px; height: var(--space-lg); border: 0; border-radius: 0; transform: none; background: var(--color-info-solid); }

/* ---------- 變更與決議 ---------- */
.pt-ms-changes { height: auto; padding: 0; font-size: var(--text-caption); }
.pt-decisions__filters { flex-wrap: wrap; }
.pt-decisions__filter { width: auto; }
.pt-decisions { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.pt-decision { display: flex; flex-direction: column; gap: var(--space-xs); padding: var(--space-lg) 0; border-top: 1px solid var(--color-border-faint); }
.pt-decision:first-child { border-top: 0; padding-top: 0; }
.pt-decision__head { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-sm); }
.pt-decision__ops { margin-left: auto; display: inline-flex; gap: var(--space-sm); }
.pt-decision__title { font-weight: var(--weight-medium); overflow-wrap: anywhere; }
.pt-decision__detail { white-space: pre-wrap; overflow-wrap: anywhere; color: var(--color-text-secondary); }
.pt-decision__meta {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-sm) var(--space-lg);
  color: var(--color-text-secondary); font-size: var(--text-caption); line-height: var(--leading-caption);
}
.pt-decision__meta .pt-meeting__label { margin: 0; }
.pt-decision__meta a { display: inline-flex; align-items: center; gap: var(--space-xs); }
.pt-decision__evidence { display: flex; align-items: flex-start; gap: var(--space-sm); color: var(--color-text-secondary); }
.pt-decision__evidence-body { display: flex; flex-direction: column; gap: var(--space-xs); overflow-wrap: anywhere; }
.pt-meeting__linked { list-style: none; margin: var(--space-sm) 0 0; padding: 0; display: flex; flex-direction: column; gap: var(--space-xs); }
.pt-meeting__linked li { display: flex; align-items: center; gap: var(--space-sm); }

/* ---------- 交付與驗收 ---------- */
.pt-dlv__name { height: auto; padding: 0; white-space: normal; text-align: left; font-weight: var(--weight-medium); }
.pt-dlv-events { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--space-lg); }
.pt-dlv-event { display: flex; flex-direction: column; gap: var(--space-xs); padding-left: var(--space-lg); border-left: 2px solid var(--color-border-faint); }
.pt-dlv-event__head { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-sm); }
.pt-dlv-event__del { margin-left: auto; }
.pt-dlv-event__note { white-space: pre-wrap; overflow-wrap: anywhere; color: var(--color-text-secondary); }
.pt-dlv-files { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.pt-dlv-file { display: flex; align-items: center; gap: var(--space-sm); padding: var(--space-sm) 0; border-top: 1px solid var(--color-border-faint); }
.pt-dlv-file:first-child { border-top: 0; }
.pt-dlv-file__body { flex: 1; min-width: 0; display: flex; flex-direction: column; overflow-wrap: anywhere; }
.pt-dlv-upload { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-sm); margin-top: var(--space-lg); }
.pt-dlv-upload__kind { width: auto; }
.pt-file__name { display: flex; align-items: center; gap: var(--space-xs); overflow-wrap: anywhere; }
.pt-file__open { padding: 0; min-height: 0; height: auto; text-align: left; white-space: normal; overflow-wrap: anywhere; }
.table td.pt-file__note { white-space: pre-wrap; min-width: 220px; max-width: 420px; }

/* ---------- 檔案預覽 ---------- */
.pt-preview { width: min(1100px, calc(100vw - var(--space-xl) * 2)); height: calc(100vh - var(--space-2xl) * 2); max-height: none; }
.pt-preview__head { gap: var(--space-sm); }
.pt-preview__title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pt-preview__body { flex: 1; min-height: 0; display: flex; flex-direction: column; overflow: auto; }
.pt-preview__frame { flex: 1; width: 100%; min-height: 0; border: 0; border-radius: var(--radius-md); background: var(--color-bg-subtle); }
.pt-preview__center { flex: 1; min-height: 0; display: flex; align-items: center; justify-content: center; }
.pt-preview__img { max-width: 100%; max-height: 100%; object-fit: contain; }
.pt-preview__text { margin: 0; white-space: pre-wrap; overflow-wrap: anywhere; font-size: var(--text-caption); line-height: var(--leading-caption); }
/* 開案資料檢查：總覽表的缺項清單、專案頁的補齊按鈕 */
.pt-readiness__list { max-width: 220px; white-space: normal; }
.pt-readiness__chips { display: flex; flex-wrap: wrap; gap: var(--space-xs); margin-top: var(--space-sm); }

/* 試算表預覽：格線、欄名列號、下方工作表分頁，看起來像 Excel */
.pt-sheet { flex: 1; min-height: 0; display: flex; flex-direction: column; border: 1px solid var(--color-border-subtle); border-radius: var(--radius-md); overflow: hidden; background: var(--color-bg-page); }
.pt-sheet__scroll { flex: 1; min-height: 0; overflow: auto; }
.pt-sheet__grid { border-collapse: separate; border-spacing: 0; font-size: var(--text-caption); line-height: var(--leading-caption); font-variant-numeric: tabular-nums; }
.pt-sheet__grid th, .pt-sheet__grid td { padding: 3px 8px; border-right: 1px solid var(--color-border-faint); border-bottom: 1px solid var(--color-border-faint); white-space: nowrap; max-width: 360px; overflow: hidden; text-overflow: ellipsis; text-align: left; vertical-align: middle; }
.pt-sheet__grid th { background: var(--color-bg-subtle); color: var(--color-text-secondary); font-weight: var(--weight-medium, 500); text-align: center; position: sticky; z-index: 1; }
.pt-sheet__col { top: 0; }
.pt-sheet__row { left: 0; min-width: 40px; }
.pt-sheet__corner { top: 0; left: 0; z-index: 2; }
.pt-sheet__grid td.pt-sheet__num { text-align: right; }
.pt-sheet__scroll > .pt-muted { margin: var(--space-sm); }
.pt-sheet__note { margin: 0; padding: var(--space-xs) var(--space-sm); border-top: 1px solid var(--color-border-faint); }
.pt-sheet__tabs { display: flex; gap: 2px; overflow-x: auto; padding: var(--space-xs) var(--space-xs) 0; border-top: 1px solid var(--color-border-faint); background: var(--color-bg-subtle); }
.pt-sheet__tab { flex: 0 0 auto; border: 1px solid var(--color-border-faint); border-bottom: 0; border-radius: var(--radius-sm) var(--radius-sm) 0 0; background: var(--color-bg-subtle); color: var(--color-text-secondary); font: inherit; font-size: var(--text-caption); padding: 4px 12px; cursor: pointer; max-width: 240px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pt-sheet__tab:hover { color: var(--color-text-primary); }
.pt-sheet__tab.is-active { background: var(--color-bg-page); color: var(--color-text-accent); font-weight: var(--weight-medium, 500); }
.pt-preview__doc { max-width: 760px; margin: 0 auto; line-height: 1.7; overflow-wrap: anywhere; }
.pt-preview__doc img { max-width: 100%; }
.pt-preview__doc table { border-collapse: collapse; }
.pt-preview__doc td, .pt-preview__doc th { border: 1px solid var(--color-border-faint); padding: var(--space-xs) var(--space-sm); }
/* ---------- 專案健康度與總覽 ---------- */
.pt-projects-bar { margin-bottom: var(--space-lg); }
.pt-projects-bar__filter { width: auto; }
.pt-proj-table td { vertical-align: top; }
.pt-proj-table .pt-proj-cell, .pt-proj-table .pt-proj-health { white-space: normal; min-width: 88px; }
.pt-proj-table .pt-proj-cell--name { min-width: 160px; }
.pt-proj-table .pt-proj-health { min-width: 160px; }
.pt-proj-health__sum {
  margin-top: var(--space-xs); color: var(--color-text-secondary); overflow-wrap: anywhere;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.pt-health__now { align-items: flex-start; }
.pt-health__sum { flex: 1; min-width: 0; white-space: pre-wrap; overflow-wrap: anywhere; }
.pt-health-list { list-style: none; margin: var(--space-sm) 0 0; padding: 0; display: flex; flex-direction: column; }
.pt-health-item { padding: var(--space-sm) 0; border-top: 1px solid var(--color-border-faint); }
.pt-health-item__sum { margin-top: var(--space-xs); white-space: pre-wrap; overflow-wrap: anywhere; color: var(--color-text-secondary); }
.pt-issue__foot { display: flex; align-items: center; gap: var(--space-sm); }
.pt-issue__preview {
  flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  color: var(--color-text-secondary); font-size: var(--text-caption); line-height: var(--leading-caption);
}

/* ---------- 抽屜內容 ---------- */
.pt-drawer__title { flex: 1; min-width: 0; display: flex; align-items: center; gap: var(--space-sm); }
.pt-drawer__name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pt-blocktitle { display: flex; align-items: center; gap: var(--space-sm); }
.pt-blocktitle__extra { margin-left: auto; }
.pt-row--top { margin-top: var(--space-sm); }
.pt-internal { background: var(--color-info-bg); }
.pt-internal .pt-blocktitle { color: var(--color-info-text); }
.pt-task-desc { margin-top: var(--space-lg); white-space: pre-wrap; color: var(--color-text-secondary); }
.pt-ai-loading { display: flex; align-items: center; gap: var(--space-sm); color: var(--color-text-secondary); }
.pt-composer { flex: 1 1 100%; display: flex; flex-direction: column; gap: var(--space-sm); padding: var(--space-sm) 0; }
.pt-composer__foot { display: flex; align-items: center; justify-content: space-between; gap: var(--space-sm); }
.pt-composer__actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: var(--space-sm) var(--space-lg); }
.pt-composer__internal { white-space: nowrap; }

/* 對話串：每則一個頭像＋淡底文字框，自己發的換成主色淡底 */
.pt-thread { display: flex; flex-direction: column; gap: var(--space-lg); }
.pt-msg { display: flex; align-items: flex-start; gap: var(--space-sm); }
.pt-msg__body { flex: 1; min-width: 0; }
.pt-msg__head { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-xs) var(--space-sm); }
.pt-msg__name { font-weight: var(--weight-medium); }
.pt-msg__time { color: var(--color-text-tertiary); font-size: var(--text-caption); line-height: var(--leading-caption); }
.pt-msg__text {
  margin-top: var(--space-xs); padding: var(--space-sm) var(--space-lg); border-radius: var(--radius-md);
  background: var(--color-bg-subtle); overflow-wrap: anywhere;
}
.pt-msg.is-mine .pt-msg__text { background: var(--color-action-subtle); }
.pt-msg__text p { margin: 0; }
.pt-msg-sys {
  align-self: center; max-width: 100%; padding: var(--space-xs) var(--space-sm); border-radius: var(--radius-md);
  background: var(--color-bg-subtle); color: var(--color-text-tertiary);
  font-size: var(--text-caption); line-height: var(--leading-caption); text-align: center;
}

/* ---------- 簡易文字編輯器（contenteditable） ---------- */
.rte {
  position: relative; border: 1px solid var(--color-border-subtle); border-radius: var(--radius-md);
  background: var(--color-bg-page); overflow: hidden;
  transition: border-color var(--duration-fast) var(--ease-standard);
}
.rte:hover { border-color: var(--color-action-primary); }
.rte:has(.rte-body:focus-visible) { border-color: var(--color-action-primary); box-shadow: var(--shadow-focus-ring); }
.rte-toolbar {
  display: flex; align-items: center; gap: var(--space-xs);
  padding: var(--space-xs) var(--space-sm); border-bottom: 1px solid var(--color-border-faint); background: var(--color-bg-subtle);
}
.rte-btn {
  display: inline-flex; align-items: center; gap: var(--space-xs);
  height: var(--size-control-height-sm); padding: 0 var(--space-sm); border: none; border-radius: var(--radius-sm);
  background: none; color: var(--color-text-secondary); font-size: var(--text-caption); cursor: pointer;
}
.rte-btn:hover { background: var(--color-bg-hover); color: var(--color-text-primary); }
.rte-btn:focus-visible { outline: none; box-shadow: var(--shadow-focus-ring); }
.rte-body {
  min-height: calc(var(--leading-body) * 4); max-height: calc(var(--leading-body) * 12); overflow-y: auto;
  padding: var(--space-sm); outline: none; color: var(--color-text-primary); overflow-wrap: anywhere;
}
.rte-body:empty::before { content: attr(data-placeholder); color: var(--color-text-placeholder); }
.rte-body[contenteditable="false"] { color: var(--color-text-disabled); cursor: not-allowed; }
.rte-body img { display: block; max-width: 100%; margin: var(--space-xs) 0; border-radius: var(--radius-sm); }
.rte-body ul, .rte-content ul { margin: var(--space-xs) 0; padding-left: var(--space-lg); }
/* 收合式（問題清單的快速新增）：平常只有一行，點下去或已經打了字才展開工具列跟多行編輯區 */
.rte-collapsible .rte-toolbar { display: none; }
.rte-collapsible:focus-within .rte-toolbar, .rte-collapsible.rte-expanded .rte-toolbar { display: flex; }
.rte-collapsible .rte-body { min-height: var(--leading-body); max-height: calc(var(--leading-body) + var(--space-lg)); white-space: nowrap; overflow: hidden; }
.rte-collapsible .rte-body:empty::before { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rte-collapsible:focus-within .rte-body, .rte-collapsible.rte-expanded .rte-body {
  min-height: calc(var(--leading-body) * 4); max-height: calc(var(--leading-body) * 10); white-space: normal; overflow-y: auto;
}

/* 使用者內容裡的圖片縮圖（點一下放大）、@標記、#任務單引用 */
.rte-content img {
  display: block; width: auto; height: auto; max-width: 160px; max-height: 160px; margin: var(--space-xs) 0;
  border: 1px solid var(--color-border-subtle); border-radius: var(--radius-sm); cursor: zoom-in;
}
.mention-tag, .task-ref-tag {
  display: inline-flex; align-items: center; padding: 0 var(--space-xs); border-radius: var(--radius-sm);
  font-weight: var(--weight-medium);
}
.mention-tag { background: var(--color-info-bg); color: var(--color-info-text); }
.task-ref-tag { background: var(--color-success-bg); color: var(--color-success-text); cursor: pointer; }
.task-ref-tag:hover { text-decoration: underline; }
.task-ref-tag.is-broken { background: var(--color-bg-subtle); color: var(--color-text-disabled); text-decoration: line-through; cursor: default; }

.img-lightbox {
  position: fixed; inset: 0; z-index: var(--z-tooltip); display: flex; align-items: center; justify-content: center;
  padding: var(--space-xl); background: var(--color-scrim); cursor: zoom-out;
}
.img-lightbox img { max-width: 100%; max-height: 100%; border-radius: var(--radius-md); box-shadow: var(--shadow-overlay); }

/* @標記／#任務單的自動完成清單：掛在 <body> 下用 fixed 定位（座標由 app.js 算），要蓋得過抽屜跟對話框 */
.mention-menu { position: fixed; z-index: var(--z-tooltip); width: auto; }
.mention-menu-item.active { background: var(--color-bg-item-hover); }
.mention-menu-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ---------- AI 摘要／建議（簡易 markdown 轉出來的 HTML） ---------- */
.ai-summary-text { overflow-wrap: anywhere; color: var(--color-text-primary); }
.ai-summary-text > :first-child { margin-top: 0; }
.ai-summary-text > :last-child { margin-bottom: 0; }
.ai-summary-text p { margin: var(--space-xs) 0; }
.ai-summary-text h5 { margin: var(--space-lg) 0 var(--space-xs); font-size: var(--text-body); font-weight: var(--weight-bold); color: var(--color-text-accent); }
.ai-summary-text ul, .ai-summary-text ol { margin: var(--space-xs) 0; padding-left: var(--space-lg); }
.ai-summary-text li { margin: var(--space-xs) 0; }
.ai-summary-text hr { border: none; border-top: 1px solid var(--color-border-faint); margin: var(--space-sm) 0; }
.ai-summary-text code { padding: 0 var(--space-xs); border-radius: var(--radius-sm); background: var(--color-bg-subtle); font-family: var(--font-mono); font-size: var(--text-caption); }
.ai-summary-text .ai-code {
  margin: var(--space-sm) 0; padding: var(--space-sm) var(--space-lg); border-radius: var(--radius-md);
  background: var(--color-bg-subtle); font-family: var(--font-mono); font-size: var(--text-caption); line-height: var(--leading-caption);
  white-space: pre-wrap; overflow-wrap: anywhere; overflow-x: auto;
}
.ai-thinking-dots { display: inline-flex; gap: var(--space-xs); margin-left: var(--space-xs); }
.ai-thinking-dots span { width: var(--space-xs); height: var(--space-xs); border-radius: var(--radius-full); background: currentColor; opacity: .3; animation: pt-dot var(--duration-xslow) var(--ease-standard) infinite; }
.ai-thinking-dots span:nth-child(2) { animation-delay: .2s; }
.ai-thinking-dots span:nth-child(3) { animation-delay: .4s; }
@keyframes pt-dot { 0%, 100% { opacity: .3; } 50% { opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .ai-thinking-dots span { animation: none; opacity: .6; } }

/* ---------- 對話框裡的 Asana 搜尋／成員搜尋（menu-anchor 底下的 .menu） ---------- */
.combo-list { z-index: var(--z-dropdown); }
.pt-combo__name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pt-cal__foot { display: flex; justify-content: space-between; }

/* ---------- Asana 同步／批次新增確認畫面 ---------- */
.pt-review-body { display: flex; flex-direction: column; gap: var(--space-sm); }
.pt-group-head { display: flex; align-items: baseline; gap: var(--space-sm); margin-top: var(--space-lg); }
.asana-row {
  display: flex; align-items: flex-start; gap: var(--space-lg);
  padding: var(--space-lg); border: 1px solid var(--color-border-faint); border-radius: var(--radius-lg);
  transition: opacity var(--duration-fast) var(--ease-standard);
}
.asana-group { display: flex; flex-direction: column; gap: var(--space-sm); }
.asana-row.off { opacity: .5; }
.asana-row-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: var(--space-sm); }
.pt-asana-row__check { flex: none; margin-top: var(--space-xs); }

/* ---------- 甘特圖 ---------- */
.gantt-scroll {
  overflow: auto; max-height: calc(100vh - 220px);
  border: 1px solid var(--color-border-faint); border-radius: var(--radius-lg); background: var(--color-bg-page);
}
.gantt-inner { position: relative; min-width: 100%; }
.gantt-row { display: flex; align-items: stretch; border-bottom: 1px solid var(--color-border-faint); cursor: pointer; }
.gantt-row:last-child { border-bottom: none; }
.gantt-row:hover .gantt-label { background: var(--color-bg-item-hover); }
/* 日期刻度往下捲時固定在框的最上面 */
.gantt-header-row { position: sticky; top: 0; z-index: var(--z-sticky); background: var(--color-bg-subtle); cursor: default; }
.gantt-header-row .gantt-label, .gantt-header-row:hover .gantt-label { background: var(--color-bg-subtle); }
.gantt-label {
  position: sticky; left: 0; z-index: var(--z-raised); flex: none; width: var(--pt-gantt-label);
  display: flex; align-items: center; padding: var(--space-xs) var(--space-sm);
  border-right: 1px solid var(--color-border-faint); background: var(--color-bg-page);
  font-size: var(--text-caption); line-height: var(--leading-caption);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.gantt-phase-row { cursor: default; }
.gantt-phase-row .gantt-label, .gantt-phase-row:hover .gantt-label { background: var(--color-bg-subtle); font-weight: var(--weight-medium); color: var(--color-text-secondary); }
.gantt-track { position: relative; flex: none; height: var(--size-control-height-lg); }
.gantt-header-row .gantt-track { height: var(--size-control-height-sm); }
.gantt-month {
  position: absolute; top: 0; bottom: 0; padding-left: var(--space-xs); border-left: 1px solid var(--color-border-faint);
  color: var(--color-text-tertiary); font-size: var(--text-caption); line-height: var(--size-control-height-sm); white-space: nowrap;
}
.gantt-bar {
  position: absolute; top: 50%; transform: translateY(-50%); height: var(--icon-lg); min-width: var(--space-sm);
  display: flex; align-items: center; overflow: hidden; border-radius: var(--radius-sm);
  --bar-bg: var(--color-bg-hover); --bar-fill: var(--color-text-disabled);
  background: var(--bar-bg); box-shadow: inset 0 0 0 1px var(--color-border-subtle);
}
.gantt-bar.s-doing { --bar-bg: var(--color-info-bg); --bar-fill: var(--color-info-solid); box-shadow: inset 0 0 0 1px var(--color-info-border); }
.gantt-bar.s-blocked { --bar-bg: var(--color-warning-bg); --bar-fill: var(--color-warning-solid); box-shadow: inset 0 0 0 1px var(--color-warning-border); }
.gantt-bar.s-done { --bar-bg: var(--color-success-bg); --bar-fill: var(--color-success-solid); box-shadow: inset 0 0 0 1px var(--color-success-border); }
.gantt-bar > i { position: absolute; top: 0; bottom: 0; left: 0; background: var(--bar-fill); opacity: .35; }
.gantt-bar-date { position: relative; white-space: nowrap; font-size: var(--text-caption); line-height: var(--leading-caption); font-variant-numeric: tabular-nums; }
.gantt-bar-date.in { width: 100%; text-align: center; color: var(--color-text-primary); }
.gantt-bar-date.out { position: absolute; top: 50%; transform: translateY(-50%); color: var(--color-text-secondary); }
.gantt-today-line { position: absolute; top: 0; bottom: 0; z-index: var(--z-base); width: 2px; background: var(--color-warning-solid); pointer-events: none; }
.gantt-today-line span {
  position: absolute; top: 2px; left: var(--space-xs); padding: 0 var(--space-xs); border-radius: var(--radius-sm);
  background: var(--color-warning-solid); color: var(--color-text-on-accent);
  font-size: var(--text-caption); line-height: var(--leading-caption); white-space: nowrap;
}

/* 操作紀錄：表格下方的「載入更多」 */
.pt-history-more { display: flex; justify-content: center; padding: 12px; }

/* 新增任務單對話框上方的對客提醒 */
.pt-task-new-alert { margin-bottom: var(--space-lg); }

/* 任務單母子：子任務收在母單底下、往右縮排 */
.pt-task-children {
  grid-column: 1 / -1; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-sm);
  padding-left: var(--space-lg); border-left: 2px solid var(--color-border-subtle); margin-left: var(--space-lg);
}
.pt-task__kids { white-space: nowrap; }
.pt-task-group__title { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-sm); }
.pt-subtasks { display: grid; gap: var(--space-xs); margin-top: var(--space-lg); }
.pt-subtasks__head { display: flex; align-items: center; gap: var(--space-sm); }
.pt-subtasks__head .pt-cell-strong { margin-right: auto; }
.pt-subtasks__item { justify-content: flex-start; text-align: left; }

.pt-task--parent { grid-column: 1 / -1; }

/* 連線 AI 工具頁 */
.pt-connect { display: grid; gap: var(--space-sm); }
.pt-connect__sec { padding: var(--space-lg); }
.pt-connect__h { margin: 0 0 var(--space-sm); font-size: var(--text-body); font-weight: var(--weight-medium); }
.pt-connect__cmd { display: flex; align-items: center; gap: var(--space-sm); margin: var(--space-xs) 0; }
.pt-connect__code { flex: 1; min-width: 0; overflow-x: auto; padding: var(--space-xs) var(--space-sm); border-radius: var(--radius-sm); background: var(--color-bg-subtle); font-family: var(--font-mono); font-size: var(--text-caption); line-height: var(--leading-caption); white-space: nowrap; }
.pt-connect__steps, .pt-connect__list { margin: 0; padding-left: 1.4em; display: grid; gap: var(--space-xs); }
.pt-connect__steps code, .pt-connect__list code { padding: 0 var(--space-xs); border-radius: var(--radius-sm); background: var(--color-bg-subtle); font-family: var(--font-mono); font-size: var(--text-caption); }

/* 分區設定對話框（專案設定）：左側錨點、右側一區一塊 */
.pt-settings .modal__body { display: flex; flex-direction: column; gap: var(--space-lg); }
.pt-settings .modal__blocktitle:has(+ .pt-settings__intro) { margin-bottom: var(--space-xs); }
.pt-settings__intro { display: flex; align-items: center; gap: var(--space-xs); margin: 0 0 var(--space-lg); }
.pt-settings .anchor__link { white-space: nowrap; }
.pt-settings__block:last-child { min-height: 60%; }
@media (max-width: 767px) {
  .pt-settings .modal__split { grid-template-columns: minmax(0, 1fr); padding: 0; background: none; border-block: 0; }
  .pt-settings .modal__nav { display: none; }
}
/* 兩欄並排時提示放到欄位下方，左右欄的輸入框才會對齊 */
.pt-settings .form-grid--2col .field-row > .field-desc { order: 1; margin-top: var(--space-xs); }
.pt-settings .form-grid--2col .field-row > .field-desc + * { margin-top: 0; }

/* 總覽「待處理」欄：一行一類，標籤帶件數 */
.pt-proj-todo { min-width: 220px; }
.pt-proj-todo__line { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-xs) var(--space-sm); }
.pt-proj-todo__line + .pt-proj-todo__line { margin-top: var(--space-xs); }

/* 通知依專案分組 */
.pt-notif__group { display: flex; align-items: baseline; gap: var(--space-sm); padding: var(--space-sm) var(--space-lg) var(--space-xs); font-size: var(--text-caption); line-height: var(--leading-caption); font-weight: var(--weight-medium); color: var(--color-text-secondary); }
.pt-notif__count { font-weight: normal; color: var(--color-notice-text); }

/* 全站搜尋 */
.pt-global-search { width: 280px; max-width: 36vw; }
@media (max-width: 640px) { .pt-global-search { max-width: 44vw; } }
.pt-search__group + .pt-search__group { margin-top: var(--space-lg); }
.pt-search__list { display: flex; flex-direction: column; padding: 0; }
.card .pt-search__item { display: flex; align-items: center; gap: var(--space-sm); width: 100%; padding: var(--space-sm) var(--space-lg); border: 0; border-top: 1px solid var(--color-border-faint); background: none; text-align: left; font: inherit; color: inherit; text-decoration: none; cursor: pointer; }
.pt-search__item:first-child { border-top: 0; }
.pt-search__item:hover { background: var(--color-bg-item-hover); }
.pt-search__ic { display: inline-flex; color: var(--color-text-tertiary); }

/* 客戶總覽「等你確認或回覆」 */
.pt-awaiting__list { display: flex; flex-direction: column; padding: 0; }
.card .pt-awaiting__item { display: flex; align-items: center; gap: var(--space-sm); width: 100%; padding: var(--space-sm) var(--space-lg); border: 0; border-top: 1px solid var(--color-border-faint); background: none; text-align: left; font: inherit; color: inherit; cursor: pointer; }
.pt-awaiting__item:first-child { border-top: 0; }
.pt-awaiting__item:hover { background: var(--color-bg-item-hover); }
.pt-awaiting__more { padding: var(--space-sm) var(--space-lg); }
.card .pt-awaiting__item:first-child, .card .pt-search__item:first-child { border-top: 0; }
.pt-awaiting .card__title .pt-section__count { margin-left: var(--space-xs); }
