/* ProComm AI客服 widget
 *
 * 設計 token 集中喺 :root —— 改色／改圓角只改呢度，唔好散落到各 rule。
 * 所有文字色對比度已實算達 WCAG 2.2 AA（4.5:1；大字／粗字 3:1）。
 * 驗證方式見 LOG.md「2026-09-29 widget 視覺修正」一節。
 */

:root {
  /* 色 */
  --brand:        #116dff;   /* 客戶品牌藍 */
  --brand-strong: #0a4fb8;
  --brand-deep:   #083c8c;   /* hover 態 */
  --ink:          #0f1c33;
  --ink-2:        #3f4d63;
  --ink-3:        #5a6a80;
  --muted:        #667489;

  --page:         #eef1f6;
  --card:         #ffffff;
  --head:         #f6f8fb;
  --canvas:       #f1f4f9;
  --line:         #e4e9f0;
  --line-soft:    #eef2f7;

  --ok-text:      #0e7a5f;
  --ok-soft:      #e6f5ef;

  /* 圓角 scale（原本 24/17/14/13 混用冇紀律）*/
  --r-sm: 8px;
  --r-md: 12px;
  --r-lg: 16px;
  --r-xl: 24px;
  --r-pill: 999px;

  /* 間距 scale */
  --sp-1: 4px;
  --sp-2: 8px;
  --sp-3: 12px;
  --sp-4: 16px;
  --sp-5: 20px;
  --sp-6: 24px;

  font-family: Inter, "Noto Sans TC", "PingFang HK", system-ui, sans-serif;
  color: var(--ink);
  background: var(--page);
}

* { box-sizing: border-box; }

body {
  margin: 0;
  min-height: 100vh;
  display: grid;
  place-items: center;
  padding: var(--sp-6);
}

.shell {
  width: min(720px, 100%);
  height: min(820px, calc(100vh - 48px));
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: var(--r-xl);
  box-shadow: 0 22px 60px rgba(16, 54, 37, .14);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

/* ---------- header ---------- */

header {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  padding: var(--sp-5) var(--sp-6);
  background: var(--head);
  border-bottom: 1px solid var(--line-soft);
}

.mark {
  width: 44px;
  height: 44px;
  flex: 0 0 44px;
  border-radius: var(--r-md);
  display: grid;
  place-items: center;
  background: var(--brand);
  color: #fff;
  font-size: 22px;
  font-weight: 700;
}

h1 {
  font-size: 19px;
  line-height: 1.3;
  margin: 0;
  color: #12211a;
}

header p {
  font-size: 13px;
  color: var(--ink-2);
  margin: 2px 0 0;
}

/* status badge 刻意做細做淡：佢係狀態，唔係主角（原本同 chip 搶注意力）*/
.status {
  margin-left: auto;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--ok-text);
  background: var(--ok-soft);
  border-radius: var(--r-pill);
  padding: 4px 10px 4px 8px;
  font-size: 11.5px;
  font-weight: 500;
  letter-spacing: .01em;
}

.status::before {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--ok-text);
  box-shadow: 0 0 0 3px rgba(28, 107, 69, .16);
}

/* ---------- 訊息區 ---------- */
/*
 * ⚠️ bottom-anchor 用 `.thread { margin-top: auto }`，唔好用
 * `.messages { justify-content: flex-end }` —— 後者喺內容溢出時
 * 頂部訊息會捲唔到（Chrome/Firefox 都有呢個行為）。
 */
.messages {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  background: var(--canvas);
  padding: var(--sp-6) var(--sp-6) var(--sp-4);
  display: flex;
  flex-direction: column;
  /* 頂部漸隱：提示上面仲有內容（scroll cue）*/
  background-image: linear-gradient(var(--canvas) 72%, rgba(233, 240, 236, 0));
  background-attachment: local;
}

.thread {
  margin-top: auto;            /* ← 訊息貼底，唔會留一大片空白 */
  display: flex;
  flex-direction: column;
  gap: var(--sp-3);
}

.bubble {
  position: relative;
  max-width: 78%;
  padding: var(--sp-3) var(--sp-4);
  border-radius: var(--r-lg);
  line-height: 1.6;
  font-size: 15px;
  white-space: pre-wrap;
  word-break: break-word;
  animation: rise .18s ease-out;
}

@keyframes rise {
  from { opacity: 0; transform: translateY(4px); }
  to   { opacity: 1; transform: none; }
}

@media (prefers-reduced-motion: reduce) {
  .bubble, .dots i { animation: none !important; }
}

.assistant {
  align-self: flex-start;
  background: var(--card);
  border: 1px solid var(--line);
  border-bottom-left-radius: var(--r-sm);   /* 講者方向：尾角收細 */
  box-shadow: 0 1px 2px rgba(16, 54, 37, .05);
}

.user {
  align-self: flex-end;
  background: var(--brand);
  color: #fff;
  border-bottom-right-radius: var(--r-sm);
}

/* timestamp：細字但達 AA（5.09:1 on canvas）*/
time {
  display: block;
  margin-top: 6px;
  font-size: 11.5px;
  line-height: 1.3;
  color: var(--ink-3);
  font-variant-numeric: tabular-nums;
}

.user time { color: rgba(255, 255, 255, .72); }

/* typing indicator（取代舊嘅「正在查詢…」純文字）*/
.pending { color: var(--ink-2); }

.dots {
  display: inline-flex;
  align-items: center;
  gap: 5px;
}

.dots i {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--brand);
  opacity: .35;
  animation: pulse 1.2s ease-in-out infinite;
}

.dots i:nth-child(2) { animation-delay: .18s; }
.dots i:nth-child(3) { animation-delay: .36s; }

@keyframes pulse {
  0%, 60%, 100% { opacity: .3; transform: translateY(0); }
  30%           { opacity: 1;  transform: translateY(-2px); }
}

/* ---------- 建議問題 + 輸入 ---------- */
/*
 * chips 概念上屬於 composer，所以同 input 之間 gap 細（8px）、
 * 同訊息區之間 gap 大 —— 視覺分組先清楚。
 */
.suggestions {
  flex: 0 0 auto;
  display: flex;
  gap: var(--sp-2);
  padding: var(--sp-3) var(--sp-5) var(--sp-2);
  overflow-x: auto;
  scrollbar-width: none;
  background: var(--card);
  border-top: 1px solid var(--line-soft);
}

.suggestions::-webkit-scrollbar { display: none; }

.suggestions button {
  white-space: nowrap;
  border: 1px solid #b9d3c4;
  background: #eef6f1;
  color: var(--brand-strong);
  border-radius: var(--r-pill);
  padding: 7px 13px;
  font: inherit;
  font-size: 13px;
  cursor: pointer;
  transition: background .14s, border-color .14s, transform .14s;
}

.suggestions button:hover {
  background: #e2f0e8;
  border-color: #93c0a8;
}

.suggestions button:active { transform: translateY(1px); }

.suggestions button:focus-visible {
  outline: 2px solid var(--brand);
  outline-offset: 2px;
}

.suggestions button:disabled {
  opacity: .5;
  cursor: not-allowed;
}

form {
  flex: 0 0 auto;
  display: flex;
  gap: var(--sp-2);
  padding: var(--sp-2) var(--sp-5) var(--sp-4);
  background: var(--card);
}

input {
  flex: 1;
  min-width: 0;
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  padding: 13px 15px;
  font: inherit;
  font-size: 15px;
  color: var(--ink);
  background: var(--card);
  outline: none;
  transition: border-color .14s, box-shadow .14s;
}

input::placeholder { color: var(--muted); }   /* 5.64:1 — AA */

input:hover { border-color: #bccbc3; }

input:focus {
  border-color: #267c54;
  box-shadow: 0 0 0 3px rgba(38, 124, 84, .14);
}

.send {
  flex: 0 0 auto;
  border: 0;
  border-radius: var(--r-md);
  padding: 0 var(--sp-5);
  background: var(--brand);
  color: #fff;
  font: inherit;
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
  transition: background .14s, transform .14s;
}

.send:hover:not(:disabled) { background: var(--brand-deep); }
.send:active:not(:disabled) { transform: translateY(1px); }

.send:focus-visible {
  outline: 2px solid var(--brand);
  outline-offset: 2px;
}

.send:disabled {
  background: #c3cfca;
  cursor: not-allowed;
}

/* ---------- footer ---------- */
/*
 * ⚠️ 呢句係法律性質嘅免責聲明，唔係裝飾：
 * 原本 11px + #819087 on #fff = 3.35:1，FAIL AA。
 * 而家 12.5px + #5b6b62 = 5.64:1，PASS，而且同 composer 有呼吸空間。
 */
footer {
  flex: 0 0 auto;
  text-align: center;
  color: var(--muted);
  font-size: 12.5px;
  line-height: 1.5;
  padding: 0 var(--sp-5) var(--sp-4);
  background: var(--card);
  border-top: 1px solid var(--line-soft);
  padding-top: var(--sp-3);
}

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
}

@media (max-width: 600px) {
  body { padding: 0; }
  .shell {
    height: 100vh;
    height: 100dvh;      /* iOS Safari 地址欄伸縮 */
    border: 0;
    border-radius: 0;
  }
  .bubble { max-width: 88%; }
  header { padding: var(--sp-4) var(--sp-4); }
  .messages { padding: var(--sp-4) var(--sp-4) var(--sp-3); }
  .suggestions, form { padding-left: var(--sp-4); padding-right: var(--sp-4); }
  footer { padding-left: var(--sp-4); padding-right: var(--sp-4); }
}

/* 2026-10-09「大執」：精緻化 override（放最後）—— 品牌藍 + 柔和陰影 */
body { -webkit-font-smoothing: antialiased; }
.bubble, .card, .widget { box-shadow: 0 1px 2px rgba(15, 28, 51, .06); }
button { transition: background .12s ease, box-shadow .12s ease; }
