/* ═══════════════════════════════════════════════════════════════
   SOULFREE UI v1 — 全系統唯一樣式表（MODULE-CONTRACT v2 §五）
   基準：erp.soulfree.life + todo.soulfree.life 形式。手機優先 390px。
   模組頁第一行：<link rel="stylesheet" href="/soulfree-ui.css">
   ═══════════════════════════════════════════════════════════════ */
:root{
  --sf-green:#008F47; --sf-green-dark:#00753a; --sf-green-bg:#E6F4EC;
  --sf-ink:#2F2725; --sf-gray:#7B7A7B; --sf-bg:#F5F5F5; --sf-line:#E0E0E0;
  --sf-white:#fff; --sf-red:#E53935; --sf-orange:#F57C00; --sf-blue:#1565C0;
  --sf-gold:#C9A84C; --sf-purple:#6A1B9A; --sf-line-green:#06C755;
  --sf-r-card:14px; --sf-r-btn:9px;
  --sf-shadow:0 1px 3px rgba(47,39,37,.08),0 4px 14px rgba(47,39,37,.06);
  /* 優先級（Jess 慣例）：🔴緊急 🟢急 🟠中等 🔵一般 ⬜暫緩 */
  --pri-urgent:#E53935; --pri-high:#008F47; --pri-medium:#F57C00; --pri-normal:#1565C0; --pri-hold:#BDBDBD;
  /* 公司識別 */
  --co-sugiken:#008F47; --co-babyhome:#1565C0; --co-lingyue:#F57C00; --co-xinrunyou:#6A1B9A;
}
*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
body{font-family:"PingFang TC","Noto Sans TC","Inter",sans-serif;background:var(--sf-bg);color:var(--sf-ink);font-size:15px;line-height:1.55}
a{color:var(--sf-green);text-decoration:none}
button{font-family:inherit;cursor:pointer;border:none;background:none;font-size:inherit}
input,select,textarea{font-family:inherit;font-size:15px}

/* ── 頂欄 ── */
.sf-topbar{position:sticky;top:0;z-index:50;background:var(--sf-white);border-bottom:1px solid var(--sf-line);
  display:flex;align-items:center;gap:10px;padding:10px 14px;min-height:52px}
.sf-topbar .brand{font-weight:700;color:var(--sf-green);font-size:16px;display:flex;align-items:center;gap:8px}
.sf-topbar .spacer{flex:1}
.sf-user-chip{display:flex;align-items:center;gap:6px;background:var(--sf-green-bg);color:var(--sf-green-dark);
  border-radius:999px;padding:4px 12px;font-size:13px;font-weight:600}

/* ── 底部分頁列（手機主導航）── */
.sf-tabbar{position:fixed;bottom:0;left:0;right:0;z-index:50;background:var(--sf-white);border-top:1px solid var(--sf-line);
  display:flex;justify-content:space-around;padding:6px 0 max(6px,env(safe-area-inset-bottom))}
.sf-tabbar a,.sf-tabbar button{display:flex;flex-direction:column;align-items:center;gap:2px;font-size:11px;color:var(--sf-gray);min-width:56px;padding:2px 6px}
.sf-tabbar .active{color:var(--sf-green);font-weight:700}
.sf-tabbar .ico{font-size:20px;line-height:1}
body.has-tabbar{padding-bottom:76px}

/* ── 容器/卡片 ── */
.sf-page{max-width:920px;margin:0 auto;padding:14px}
.sf-card{background:var(--sf-white);border-radius:var(--sf-r-card);box-shadow:var(--sf-shadow);padding:14px;margin-bottom:12px}
.sf-card .card-title{font-weight:700;font-size:15px;margin-bottom:10px;display:flex;align-items:center;gap:8px}
.sf-kpis{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:12px}
@media(min-width:720px){.sf-kpis{grid-template-columns:repeat(4,1fr)}}
.sf-kpi{background:var(--sf-white);border-radius:var(--sf-r-card);box-shadow:var(--sf-shadow);padding:12px 14px}
.sf-kpi .n{font-size:26px;font-weight:800;color:var(--sf-green)}
.sf-kpi .t{font-size:12px;color:var(--sf-gray)}

/* ── 清單列（任務卡形式，左框=優先色）── */
.sf-row{background:var(--sf-white);border-radius:12px;box-shadow:var(--sf-shadow);padding:12px 14px;margin-bottom:10px;
  border-left:4px solid var(--sf-line);cursor:pointer;transition:transform .06s}
.sf-row:active{transform:scale(.99)}
.sf-row .r-title{font-weight:600;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.sf-row .r-meta{font-size:12.5px;color:var(--sf-gray);margin-top:4px;display:flex;gap:10px;flex-wrap:wrap}
.pri-urgent{border-left-color:var(--pri-urgent)} .pri-high{border-left-color:var(--pri-high)}
.pri-medium{border-left-color:var(--pri-medium)} .pri-normal{border-left-color:var(--pri-normal)}
.pri-hold{border-left-color:var(--pri-hold)}

/* ── 狀態 pill（狀態字彙 → 顏色，全系統一致）── */
.sf-pill{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 10px;font-size:12px;font-weight:600;white-space:nowrap}
.st-draft,.st-pending{background:#FFF3E0;color:#E65100}
.st-in_progress,.st-notified,.st-confirmed,.st-on_site{background:#E3F2FD;color:#1565C0}
.st-pending_review,.st-pending_acct,.st-pending_ceo{background:#FFF8E1;color:#B26A00}
.st-done,.st-approved,.st-paid,.st-resolved{background:var(--sf-green-bg);color:var(--sf-green-dark)}
.st-rejected,.st-overdue,.st-open{background:#FFEBEE;color:#C62828}
.st-billable{background:#EDE7F6;color:#5E35B1}
.st-replied{background:#E0F2F1;color:#00695C}
.st-hold,.st-retired{background:#EEE;color:#757575}

/* ── filter chips ── */
.sf-chips{display:flex;gap:8px;overflow-x:auto;padding:2px 0 10px;-webkit-overflow-scrolling:touch}
.sf-chip{flex:0 0 auto;border:1px solid var(--sf-line);background:var(--sf-white);border-radius:999px;padding:5px 14px;font-size:13px;color:var(--sf-gray)}
.sf-chip.active{background:var(--sf-green);border-color:var(--sf-green);color:#fff;font-weight:600}

/* ── 按鈕 ── */
.sf-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border-radius:var(--sf-r-btn);
  padding:10px 16px;font-size:14px;font-weight:600;border:1px solid transparent;min-height:42px}
.sf-btn.primary{background:var(--sf-green);color:#fff}
.sf-btn.primary:active{background:var(--sf-green-dark)}
.sf-btn.ghost{border-color:var(--sf-line);background:var(--sf-white);color:var(--sf-ink)}
.sf-btn.danger{background:var(--sf-red);color:#fff}
.sf-btn.warn{background:var(--sf-orange);color:#fff}
.sf-btn.sm{padding:6px 12px;min-height:34px;font-size:13px}
.sf-btn.block{width:100%}
.sf-btn:disabled{opacity:.45;cursor:not-allowed}
.sf-fab{position:fixed;right:18px;bottom:calc(84px + env(safe-area-inset-bottom));z-index:49;width:54px;height:54px;border-radius:50%;
  background:var(--sf-green);color:#fff;font-size:26px;box-shadow:0 4px 14px rgba(0,143,71,.4);display:flex;align-items:center;justify-content:center}

/* ── 表單 ── */
.sf-field{margin-bottom:12px}
.sf-field label{display:block;font-size:13px;font-weight:600;color:var(--sf-gray);margin-bottom:5px}
.sf-field label .req{color:var(--sf-red)}
.sf-input,.sf-select,.sf-textarea{width:100%;border:1px solid var(--sf-line);border-radius:var(--sf-r-btn);
  padding:10px 12px;background:var(--sf-white);min-height:44px}
.sf-textarea{min-height:90px;resize:vertical}
.sf-input:focus,.sf-select:focus,.sf-textarea:focus{outline:2px solid var(--sf-green);outline-offset:-1px;border-color:var(--sf-green)}
.sf-seg{display:flex;border:1px solid var(--sf-line);border-radius:var(--sf-r-btn);overflow:hidden}
.sf-seg button{flex:1;padding:9px 4px;font-size:13px;background:var(--sf-white);color:var(--sf-gray);border-right:1px solid var(--sf-line)}
.sf-seg button:last-child{border-right:none}
.sf-seg button.active{background:var(--sf-green);color:#fff;font-weight:700}

/* ── 抽屜（詳情/表單）── */
.sf-drawer-mask{position:fixed;inset:0;background:rgba(47,39,37,.45);z-index:90;display:none}
.sf-drawer-mask.open{display:block}
.sf-drawer{position:fixed;z-index:91;background:var(--sf-white);overflow-y:auto;-webkit-overflow-scrolling:touch;
  left:0;right:0;bottom:0;top:8%;border-radius:18px 18px 0 0;transform:translateY(103%);transition:transform .22s ease}
.sf-drawer.open{transform:translateY(0)}
@media(min-width:720px){.sf-drawer{left:auto;top:0;bottom:0;width:520px;border-radius:0;transform:translateX(103%)}
  .sf-drawer.open{transform:translateX(0)}}
.sf-drawer .d-head{position:sticky;top:0;background:var(--sf-white);border-bottom:1px solid var(--sf-line);
  padding:14px;display:flex;align-items:center;gap:10px;z-index:2}
.sf-drawer .d-head .t{font-weight:700;flex:1}
.sf-drawer .d-body{padding:14px;padding-bottom:calc(24px + env(safe-area-inset-bottom))}
.sf-close{width:34px;height:34px;border-radius:50%;background:var(--sf-bg);font-size:16px;display:flex;align-items:center;justify-content:center}

/* ── 時間軸（events[] 軌跡，憲法：流）── */
.sf-timeline{position:relative;padding-left:20px}
.sf-timeline::before{content:'';position:absolute;left:6px;top:4px;bottom:4px;width:2px;background:var(--sf-line)}
.sf-tl-item{position:relative;padding-bottom:14px;font-size:13px}
.sf-tl-item::before{content:'';position:absolute;left:-19px;top:4px;width:10px;height:10px;border-radius:50%;
  background:var(--sf-white);border:2.5px solid var(--sf-green)}
.sf-tl-item .who{font-weight:700}
.sf-tl-item .when{color:var(--sf-gray);font-size:12px}
.sf-tl-item .what{margin-top:2px}

/* ── 留言串 ── */
.sf-comment{display:flex;gap:8px;margin-bottom:10px}
.sf-avatar{flex:0 0 32px;width:32px;height:32px;border-radius:50%;background:var(--sf-green);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700}
.sf-comment .bubble{background:var(--sf-bg);border-radius:4px 12px 12px 12px;padding:8px 12px;font-size:14px;flex:1}
.sf-comment .bubble .meta{font-size:11.5px;color:var(--sf-gray);margin-bottom:2px}

/* ── 六元組資訊列（誰/何時/哪案）── */
.sf-trace{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:12.5px;color:var(--sf-gray);
  background:var(--sf-bg);border-radius:10px;padding:8px 12px;margin:10px 0}
.sf-trace b{color:var(--sf-ink);font-weight:600}

/* ── 其他 ── */
.sf-empty{text-align:center;color:var(--sf-gray);padding:36px 12px;font-size:14px}
.sf-empty .big{font-size:34px;margin-bottom:8px}
.sf-toast-wrap{position:fixed;top:60px;left:0;right:0;z-index:99;display:flex;flex-direction:column;align-items:center;gap:8px;pointer-events:none}
.sf-toast{background:var(--sf-ink);color:#fff;border-radius:999px;padding:9px 18px;font-size:13.5px;box-shadow:var(--sf-shadow);
  animation:sfToast 2.8s forwards;max-width:88vw}
.sf-toast.line{background:var(--sf-line-green)}
@keyframes sfToast{0%{opacity:0;transform:translateY(-8px)}10%,80%{opacity:1;transform:none}100%{opacity:0}}
.sf-grid2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.sf-badge{display:inline-flex;min-width:18px;height:18px;border-radius:9px;background:var(--sf-red);color:#fff;
  font-size:11px;font-weight:700;align-items:center;justify-content:center;padding:0 5px}
.sf-hr{border:none;border-top:1px solid var(--sf-line);margin:14px 0}
.muted{color:var(--sf-gray)} .small{font-size:12.5px} .bold{font-weight:700}
.sf-att-thumb{width:64px;height:64px;object-fit:cover;border-radius:8px;border:1px solid var(--sf-line)}
