/* miniERP 全站樣式——色彩代幣與元件抽自 mockups/v7.html（窯青，僅日間） */
:root{
  --bg:#F2F5F4;            /* 頁面底：綠灰白 */
  --card:#FFFFFF;
  --muted:#EDF2EF;
  --ink:#1E302C;           /* 內文墨色（2026-09-13 第二階段定稿） */
  --ink2:#6C7973;          /* 次要文字 */
  --primary:#285E53;       /* 主色：深綠（定稿） */
  --primary-muted:#E7F0E9;
  --onprimary:#FFFFFF;
  --border:#DCE4E0;
  --alert:#C93A2E;         /* 警示紅：全畫面唯一暖色 */
  --alert-bg:#FAEDEB;
  --zebra:#F5F8F7;
  --sp-1:8px; --sp-2:14px; --sp-3:20px; --sp-4:32px;
  --r:9px; --r-chip:999px;
  /* 全站浮窗共用表面（第二階段定稿 §7）：白底、10px 圓角、細框、同一組陰影與遮罩 */
  --popup-shadow:0 8px 30px #193f3020; --popup-border:#DCE4DE; --popup-radius:10px; --popup-backdrop:#23423816;
}
*{box-sizing:border-box; margin:0; padding:0;}
/* 預留原生捲軸寬度：長短頁切換不水平跳動（2026-09-08 第一階段設計，Astra HANDOFF） */
html{scrollbar-gutter:stable;}
@supports not (scrollbar-gutter:stable){html{overflow-y:scroll;}}
body{
  background:var(--bg); color:var(--ink);
  font-family:"Microsoft JhengHei","PingFang TC","Noto Sans TC",sans-serif;
  font-size:16px; line-height:1.6;   /* 2026-09-08 第一階段：正文與表格 16、按鈕 15–16、輔助字 14 */
}
.num{font-family:Consolas,monospace; font-variant-numeric:tabular-nums;}
h1{font-size:28px; line-height:1.35; letter-spacing:-.4px; font-weight:650;} h2{font-size:18px;} h3{font-size:18px;}
small,.quiet{font-size:14px; color:var(--ink2);}
[hidden]{display:none !important;}
:focus-visible{outline:3px solid #a0c4b7; outline-offset:3px;}

/* ---------- 登入畫面 ---------- */
#login-view{min-height:100vh; display:grid; place-items:center; padding:24px;}
.login-card{
  background:var(--card); border-radius:var(--r);
  box-shadow:0 1px 3px rgba(30,37,35,.08);
  padding:40px 44px; max-width:420px; width:100%; text-align:center;
}
.login-card h1{margin-bottom:24px;}
.btn-google{
  display:inline-flex; align-items:center; gap:10px;
  background:var(--primary); color:var(--onprimary); border:none; cursor:pointer;
  border-radius:var(--r); padding:12px 28px; font-size:15px; font-weight:500; font-family:inherit;
}
.btn-google:hover{opacity:.92;}
.btn-google svg{background:#fff; border-radius:4px; padding:2px;}
.login-msg{margin-top:18px; font-size:13px; color:var(--ink2); min-height:1.2em;}
.login-msg.err{color:var(--alert);}

/* ---------- App 殼：側欄＋內容 ---------- */
.layout{display:flex; align-items:stretch; min-height:100vh;}
/* 側欄（2026-09-08 第一階段設計）：漢堡鈕可收闔、鍵盤可操作；收闔仍留圖示與 title */
.sidenav{
  width:200px; flex:none; background:var(--card);
  border-right:1px solid var(--border); padding:16px 10px; overflow:visible;   /* 不裁：底部使用者彈窗要能浮出側欄外；捲動交給 #sidenav-links */
}
#sidenav-links{flex:1; min-height:0; overflow-y:auto;}
.sidenav .slogo{
  display:flex; align-items:center; gap:6px; width:100%; min-height:44px; padding:0 8px; margin:0 0 14px;
  font:inherit; font-weight:700; color:var(--primary); font-size:16px; letter-spacing:-.3px; cursor:pointer;
  border:0; background:none; white-space:nowrap; user-select:none; border-radius:9px;
}
.sidenav .slogo:hover{background:var(--muted);}
.sidenav .slogo .burger{display:inline-flex; width:22px; height:22px; align-items:center; justify-content:center; flex:none;}
.sidenav .grp{font-size:12px; color:var(--ink2); letter-spacing:1px; padding:14px 12px 4px; white-space:nowrap;}
.sidenav a{
  display:flex; align-items:center; gap:12px; min-height:44px; padding:0 12px; margin:2px 0;
  color:var(--ink); text-decoration:none; font-size:16px; white-space:nowrap; border-radius:9px;
}
.sidenav a:hover{background:var(--muted);}
.sidenav a .ico{flex:none; width:22px; height:22px; display:inline-flex; align-items:center; justify-content:center;}
.sidenav a .word{line-height:1;}
.sidenav svg{display:block; width:19px; height:19px; stroke:currentColor; fill:none; stroke-width:1.6; stroke-linecap:round; stroke-linejoin:round;}
.sidenav a.cur{color:var(--primary); background:var(--primary-muted); box-shadow:inset 3px 0 var(--primary);}   /* 不加粗：中文字型沒有半粗，會像換了字型（回報 #6） */
html.nav-collapsed .sidenav{width:68px; padding-left:7px; padding-right:7px;}
html.nav-collapsed .sidenav .word{display:none;}
html.nav-collapsed .sidenav .grp{height:14px; padding:0; font-size:0;}
html.nav-collapsed .sidenav a{justify-content:center; padding:0;}
html.nav-collapsed .sidenav .slogo{justify-content:center; padding:0;}
html.nav-collapsed .sidenav .slogo .word{display:none;}
/* ── 側欄活動招牌（2026-08-19）：AI訓練所入口，牌背圖可點 ──
   選擇器寫 .sidenav a.sn-promo 是必要的：上面 .sidenav a 是 flex＋nowrap，
   specificity 相同時後者贏不了，第一版就是這樣被排成一橫排爆出側欄的 */
.sidenav a.sn-promo{
  display:block; margin:18px 12px 12px; padding:0; text-decoration:none; text-align:center;
  white-space:normal; border-right:none; background:none;
}
.sidenav a.sn-promo img{
  width:100%; max-width:150px; border-radius:10px; border:1px solid var(--border); display:block;
  margin:0 auto; transition:transform .15s ease, box-shadow .15s ease;
}
.sidenav a.sn-promo:hover img{transform:translateY(-2px); box-shadow:0 6px 16px rgba(0,0,0,.25);}
.sn-promo-t{
  display:flex; align-items:center; justify-content:center; gap:8px;
  font-size:.9rem; font-weight:700; color:var(--ink); margin-bottom:6px; white-space:nowrap;
}
/* 彩色發亮的 ↓：金→橘漸層字＋呼吸光暈，輕輕上下點頭引導視線 */
.sn-promo-t .arr{
  background:linear-gradient(180deg,#f5c542,#e8742c);
  -webkit-background-clip:text; background-clip:text; color:transparent;
  font-size:1.1rem; animation:snArr 1.6s ease-in-out infinite;
  filter:drop-shadow(0 0 4px rgba(245,197,66,.9));
}
.sn-promo-t .arr:last-child{animation-delay:.8s;}
@keyframes snArr{
  0%,100%{transform:translateY(0);   filter:drop-shadow(0 0 3px rgba(245,197,66,.6));}
  50%    {transform:translateY(3px); filter:drop-shadow(0 0 7px rgba(232,116,44,1));}
}
/* 收闔時招牌不整塊藏起來，縮成一顆小牌背（2026-08-22 使用者回饋：
   原本頂部另放一顆 ◈ 迷你鈕＝同一入口出現兩次；改成入口位置不動、只是變小） */
html.nav-collapsed .sn-promo{padding:6px 0; margin:8px 4px 0; border:none; background:transparent;}
html.nav-collapsed .sn-promo .sn-promo-t{display:none;}
html.nav-collapsed .sn-promo img{
  width:42px; height:42px; margin:0 auto; display:block; border-radius:8px;
  border:1px solid #e8a53a; animation:snMini 2.2s ease-in-out infinite;
}
@keyframes snMini{
  0%,100%{box-shadow:0 0 3px rgba(245,197,66,.35); transform:scale(1);}
  50%    {box-shadow:0 0 12px rgba(232,116,44,.75); transform:scale(1.06);}
}
.content{flex:1; min-width:0; padding:var(--sp-3) var(--sp-4) var(--sp-4); container-type:inline-size;}
@media (max-width:700px){ .content{padding:var(--sp-2);} }
/* 窄螢幕的側欄改成覆蓋式抽屜：原本展開時吃掉三分之一畫面，內容區只剩 320px，
   表格幾乎沒法看（2026-08-22 實測）。覆蓋之後內容永遠是滿寬的 */
@media (max-width:760px){
  .sidenav{position:fixed; left:0; top:0; bottom:0; z-index:110;
    box-shadow:6px 0 24px rgba(0,0,0,.18);}
  html:not(.nav-collapsed) .sidenav::after{   /* 展開時把右側壓暗，視覺上就是抽屜 */
    content:''; position:fixed; left:200px; top:0; right:0; bottom:0;
    background:rgba(0,0,0,.32);}   /* 遮罩吃掉點擊：點外面＝關抽屜（app.js），不會誤點到底下的內容 */
  html.nav-collapsed .sidenav{box-shadow:none;}
  .content{margin-left:68px;}   /* 收合寬度，抽屜展開時不推擠內容 */
}

/* ---------- 頂列 ---------- */
/* 頂列（2026-09-08 第一階段設計）：貼頂、全站搜尋常駐 */
.appbar{
  display:flex; align-items:center; gap:var(--sp-3); flex-wrap:wrap;
  position:sticky; top:0; z-index:20;
  background:rgba(255,255,255,.96); border-bottom:1px solid var(--border); backdrop-filter:blur(12px);
  padding:12px var(--sp-4); margin:calc(-1 * var(--sp-3)) calc(-1 * var(--sp-4)) var(--sp-3);
}
@media (max-width:700px){ .appbar{padding:10px var(--sp-2); margin:calc(-1 * var(--sp-2)) calc(-1 * var(--sp-2)) var(--sp-2);} }
.appbar .sub{font-size:14px; color:var(--ink2); white-space:nowrap;}
/* 頂列版型（2026-09-14 使用者三次裁決收斂）：全站同一套，各頁只差路徑列放不放東西。
   一列＝搜尋欄｜路徑＋分頁＋動作列；空間不夠時搜尋欄先縮（最窄 260px），縮到底才把路徑整組換到第二列；
   沒有路徑的單頁（首頁／庫存／報表／產品主檔）不開第二列。動作列由 app.js 放進 .breadcrumb 內，換行時整組一起走 */
.appbar{padding-top:10px; padding-bottom:10px; row-gap:8px; column-gap:20px;}
.appbar .gsearch{flex:1 1 260px; max-width:510px; min-width:260px;}
.breadcrumb{font-size:15px; color:var(--ink2); min-width:0; display:flex; align-items:center; gap:10px; flex:0 0 auto; min-height:44px; overflow:visible;}  /* overflow 不可 auto：氣泡會被裁、還冒出小捲軸 */
.breadcrumb:empty{display:none;}   /* 單頁沒有路徑：不留空列 */
.breadcrumb nav{display:flex; align-items:center; gap:9px; white-space:nowrap; min-width:0;}
.breadcrumb a{color:var(--ink2); text-decoration:none; padding:3px 6px; border-radius:5px;}
.breadcrumb a:hover{color:var(--primary); text-decoration:underline;}
.breadcrumb .crumb-sep{color:#9aa8a1;}
.breadcrumb .crumb-current{color:var(--ink); padding:3px 6px; overflow:hidden; text-overflow:ellipsis; max-width:280px;}
/* 路徑上的種類分頁群組：淡底、選中白底深綠粗字；「開發中」提示絕對定位不撐寬群組 */
.crumb-tabs{display:flex; position:relative; gap:3px; padding:3px; border-radius:6px; background:var(--muted); flex:none;}
.crumb-tabs button{font:inherit; font-size:15px; padding:6px 12px; border:0; border-radius:4px; background:transparent; color:var(--ink2); cursor:pointer; white-space:nowrap;}
.crumb-tabs button.on{background:#fff; color:var(--primary); font-weight:700; box-shadow:0 1px 3px rgba(40,94,83,.09);}
.crumb-tabs button small{margin-left:5px; font-variant-numeric:tabular-nums; color:inherit;}
.crumb-tabs .crumb-notice{position:absolute; top:calc(100% + 8px); left:0; z-index:30; white-space:nowrap; pointer-events:none;}
.crumb-tabs .crumb-notice:empty{display:none;}
.crumb-tabs .crumb-notice:not(:empty){background:#365e4f; color:#fff; padding:7px 12px; border-radius:6px; font-size:13px;}
/* 工作頁的建立動作列（新增／匯入／由通知建立）掛在路徑右側 */
.crumb-actions{display:flex; align-items:center; gap:8px; flex:none;}
.crumb-actions>span{color:#849187;}
.crumb-actions .btn{font-size:15px;}
/* 使用者區塊（第二階段定稿：在側欄底部；現場模式時 app.js 搬到頂列） */
.me{color:var(--ink2); font-size:14px; white-space:nowrap; display:flex; align-items:center; gap:10px; min-width:0;}
.me .logout{color:var(--ink2); cursor:pointer; text-decoration:underline; background:none; border:none; font:inherit; font-size:14px; margin-left:auto;}
.appbar .me{margin-left:auto;}
.sidenav{display:flex; flex-direction:column; position:sticky; top:0; height:100vh; height:100dvh; align-self:flex-start; z-index:60;}   /* 要壓過內容區（頂列 20、抽屜 32、卡片），使用者彈窗才不會被蓋 */   /* 側欄固定視窗高：底部使用者區塊永遠在畫面底，不隨內容長度被推到頁底 */
.sidebar-user{font:inherit; border:0; background:none; cursor:pointer; padding:4px 6px; border-radius:8px; text-align:left;}
.sidebar-user:hover{background:var(--muted);}
.me{position:relative;}
.me-pop{position:absolute; left:6px; bottom:calc(100% + 8px); min-width:150px; padding:6px; display:grid; gap:2px;
  background:#fff; border:1px solid var(--popup-border); border-radius:var(--popup-radius); box-shadow:var(--popup-shadow); z-index:120;}
.me-pop button{position:relative; font:inherit; font-size:15px; text-align:left; border:0; background:none; padding:9px 12px; border-radius:6px; cursor:pointer; color:var(--ink); text-decoration:none;}
.me-pop button:hover{background:var(--primary-muted);}
.me-pop .logout{margin-left:0; text-decoration:none; color:var(--ink);}
.dev-bubble{position:absolute; left:calc(100% + 8px); top:50%; transform:translateY(-50%); white-space:nowrap; pointer-events:none;}
.dev-bubble:empty{display:none;}
.dev-bubble:not(:empty){background:#365e4f; color:#fff; padding:7px 12px; border-radius:6px; font-size:13px;}
/* 正式站白名單外的連結被點到：在點的東西右邊冒一顆「開發中」，位置由 app.js 算 */
.lock-bubble{position:fixed; z-index:1000; transform:translateY(-50%); white-space:nowrap; pointer-events:none;}
.lock-bubble:empty{display:none;}
.lock-bubble:not(:empty){background:#365e4f; color:#fff; padding:7px 12px; border-radius:6px; font-size:13px; box-shadow:0 4px 12px #1f2f2740;}
.appbar .me .me-pop{left:auto; right:0; bottom:auto; top:calc(100% + 8px);}   /* 現場模式時區塊在頂列，彈窗往下開 */
@media (max-width:760px){ .sidenav{position:fixed; height:100%;} }   /* 窄螢幕抽屜模式維持 fixed（上面的 sticky 寫在 media 之後，要再蓋回來） */
.sidenav-bottom{margin-top:auto; padding:14px 6px 0; border-top:1px solid var(--border);}
.sidebar-user{display:flex; align-items:center; gap:10px; min-width:0; color:var(--ink2); font-size:14px;}
.sidebar-user i{font-style:normal; display:grid; place-items:center; width:30px; height:30px; flex:none; background:var(--primary-muted); border:1px solid #d5e2d4; border-radius:50%; color:var(--primary); font-weight:600;}
.sidebar-user span{overflow:hidden; text-overflow:ellipsis;}
html.nav-collapsed .sidenav-bottom{padding-left:0; padding-right:0;}
html.nav-collapsed .sidenav-bottom .me{flex-direction:column; gap:8px; align-items:center;}
html.nav-collapsed .sidebar-user span{display:none;}   /* 登出已收進彈窗，收闔時只藏名稱 */
html.nav-collapsed .sidenav-bottom .modechip{margin:0;}

/* 全域搜尋 */
.gsearch{
  position:relative; display:flex; align-items:center; gap:10px; width:100%; max-width:510px;   /* 各頁同寬 */
  background:var(--card); border:1px solid #dce5da; border-radius:10px;
  padding:0 14px; color:var(--ink2); min-width:140px; min-height:44px; box-shadow:0 2px 6px rgba(41,75,62,.02);
}
.gsearch:focus-within{border-color:#9ab9a8; box-shadow:0 0 0 3px rgba(223,234,222,.5);}
.gsearch input{border:0; background:transparent; font:inherit; font-size:16px; color:var(--ink); width:100%; outline:none; min-height:40px;}
.gsearch kbd{font:12px inherit; font-family:inherit; border:1px solid var(--border); color:var(--ink2); border-radius:4px; white-space:nowrap; padding:2px 5px; flex:none;}
@media (max-width:760px){ .gsearch kbd{display:none;} }
@media (max-width:760px){ .appbar .gsearch{flex:0 0 100%; max-width:none; width:100%; min-width:0;} .breadcrumb nav>a,.breadcrumb .crumb-sep,.breadcrumb .crumb-current{display:none;} .appbar{gap:10px;} }   /* 窄螢幕：搜尋欄自己一列吃滿，各頁寬度一致（2026-09-14 使用者：單據頁曾被種類分頁擠窄） */
.gsug{
  display:none; position:absolute; left:0; right:0; top:calc(100% + 8px); z-index:80;
  max-height:420px; overflow-y:auto;
  background:#fff; border:1px solid var(--popup-border); border-radius:var(--popup-radius);
  box-shadow:var(--popup-shadow); padding:6px;
}
.gsug.on{display:block;}
.gsug .ghead{display:flex; align-items:baseline; gap:8px; font-size:.75rem; color:var(--ink2); padding:8px 10px 4px;}
.gsug .gitem{
  display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  padding:8px 10px; border-radius:8px; cursor:pointer; color:var(--ink);
}
.gsug .gitem:hover{background:var(--primary-muted);}
.gsug .gitem .gt{font-weight:700;}
.gsug .gitem .gmeta{margin-left:auto; font-size:.8rem; color:var(--ink2); white-space:nowrap;}
.gsug .gempty,.gsug .gtip{padding:10px; color:var(--ink2); font-size:.85rem;}

/* ---------- 共用元件 ---------- */
.card{
  background:var(--card); border:1px solid var(--border); border-radius:var(--r);
  padding:var(--sp-3); margin-bottom:var(--sp-3); box-shadow:0 4px 18px rgba(41,75,62,.03);
}
/* 淡色狀態標籤（2026-09-08 第一階段設計）：加深文字、不全部加粗；警示紅仍只留給真警示 */
.st{display:inline-block; padding:3px 9px; border-radius:5px; font-size:14px; white-space:nowrap;}
.st.draft{background:#faf0db; color:#795016;}
.st.done{background:#e7f0e3; color:#3e6035;}
.st.void{background:var(--muted); color:#596157;}
.chip{
  display:inline-block; border-radius:var(--r-chip); padding:1px 12px; font-size:.78rem;
  border:1px solid var(--ink2); color:var(--ink2); background:transparent;
}
.chip.done{background:var(--primary); border-color:var(--primary); color:var(--onprimary);}
.chip.warn{border-color:var(--alert); color:var(--alert);}
.chip.wh{border-color:var(--border); color:var(--ink2);}
.note{font-size:14px; color:var(--ink2);}
/* 表格（2026-09-08 第一階段設計）：表頭淡底 14px、正文 16px、列高不縮字 */
table{border-collapse:collapse; width:100%; font-size:16px;}
th{
  text-align:left; color:#4e5b55; font-weight:600; font-size:14px; background:var(--zebra);
  padding:12px 16px; border-top:1px solid var(--border); border-bottom:1px solid var(--border); white-space:nowrap;
}
td{padding:14px 16px; border-bottom:1px solid #edf0e9; white-space:nowrap;}
tbody tr:last-child td{border-bottom:none;}
tbody tr:hover{background:#fafcf8;}
th.n, td.n{text-align:right; font-variant-numeric:tabular-nums;}
td.n{font-family:Consolas,monospace;}   /* 等寬字只給數字格：表頭是中文，Consolas 沒有中文字會退回別的字型，看起來粗細大小不一（回報 #4） */
.tblwrap{overflow:auto; border:1px solid var(--border); border-radius:var(--r); background:var(--card);}


/* ---------- 單據清單共用查詢列（2026-09-08 第一階段設計；標記由 pages/doc-query.js 產生） ---------- */
.ib-query{display:grid; grid-template-columns:minmax(0,1fr) auto; grid-template-areas:"search columns" "filters filters" "error error";
  align-items:center; gap:12px 18px; padding:16px 18px;}
.ib-query .ib-search{grid-area:search; width:340px; max-width:100%; min-width:0; display:flex; align-items:center; gap:10px;
  height:44px; background:var(--card); border:1px solid #d9e1d6; border-radius:7px; padding:0 12px;}
.ib-query .ib-search span{font-size:20px; color:var(--ink2);}
.ib-query .ib-search input{border:0; background:transparent; width:100%; min-height:40px; outline:none; font:inherit; font-size:16px;}
.ib-query .ib-search:focus-within{box-shadow:0 0 0 3px #dfeade; border-color:#9ab9a8;}
.ib-query .ib-cols{grid-area:columns; justify-self:end; position:relative;}
.ib-query .ib-filters{grid-area:filters; display:flex; align-items:center; flex-wrap:wrap; gap:9px;}
.ib-query .ib-error{grid-area:error; margin:0; color:var(--alert); font-size:14px;}
@container (min-width:1380px){
  .ib-query{grid-template-columns:300px minmax(0,1fr) auto; grid-template-areas:"search filters columns" "error error error";}
  .ib-query .ib-search{width:100%;}
  .ib-query .ib-cols{padding-left:12px; border-left:1px solid var(--border);}
}
@media (max-width:760px){
  .ib-query{grid-template-columns:minmax(0,1fr); grid-template-areas:"search" "filters" "columns" "error"; padding:14px 12px;}
  .ib-query .ib-cols{justify-self:start;} .ib-query .ib-search{width:100%;}
  .ib-panel .entry-row{margin:12px 12px 0;}
}
.ib-filter,.ib-date summary,.ib-cols summary{display:flex; align-items:center; gap:5px; background:var(--card);
  border:1px solid var(--border); border-radius:7px; min-height:44px; padding:0 10px; font-size:15px; white-space:nowrap; cursor:pointer;}
.ib-filter>span{color:var(--ink2);}
.ib-filter select{border:none; max-width:170px; min-height:40px; font:inherit; font-size:16px; cursor:pointer; color:var(--ink);
  appearance:none; -webkit-appearance:none; padding-right:22px; background:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235F6B67' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='m6 9 6 6 6-6'/></svg>") no-repeat right center / 16px 16px;}
/* 日期與顯示欄位的摺疊鈕用同一顆箭頭，三種控制項看起來一致 */
.ib-date summary,.ib-cols summary{padding-right:30px; background:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235F6B67' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='m6 9 6 6 6-6'/></svg>") no-repeat right 8px center / 16px 16px;}
.ib-date summary .chev,.ib-cols summary .chev{display:none;}
.ib-filter.is-active,.ib-date.is-active summary{background:var(--primary-muted); border-color:#cddfc9; color:var(--primary);}
.ib-date,.ib-cols{position:relative;}
.ib-date summary,.ib-cols summary{list-style:none;}
.ib-date summary::-webkit-details-marker,.ib-cols summary::-webkit-details-marker{display:none;}
.ib-cols[open] summary{background:var(--muted);}
.ib-popover{position:absolute; z-index:12; left:0; top:calc(100% + 8px); padding:18px; border:1px solid var(--popup-border);
  border-radius:var(--popup-radius); background:#fff; box-shadow:var(--popup-shadow); min-width:240px;}
.ib-cols .ib-popover{left:auto; right:0;}
.ib-popover h2{margin-bottom:5px; font-size:16px;}
.ib-popover label{display:flex; align-items:center; gap:9px; margin-top:12px; white-space:nowrap; font-size:15px; cursor:pointer;}
.ib-popover input[type=checkbox]{width:16px; height:16px; accent-color:var(--primary);}
.ib-date .ib-popover{width:340px; max-width:calc(100vw - 40px);}
.ib-date-inputs{display:grid; grid-template-columns:1fr 1fr; gap:10px; margin:12px 0;}
.ib-date-inputs label{display:block; margin-top:0; font-size:14px; color:var(--ink2);}
.ib-date-inputs input{width:100%; min-height:40px; border:1px solid var(--border); border-radius:6px; padding:0 8px; font:inherit; font-size:16px; margin-top:5px;}
.ib-presets{display:flex; gap:7px; margin-top:14px;}
.ib-date #ib-date-done{display:flex; margin:14px 0 0 auto;}
.ib-clear{border:0; background:none; font:inherit; font-size:15px; color:var(--primary); padding:8px; cursor:pointer;}
.ib-clear:disabled{opacity:.4; cursor:default;}
/* 清單頁群組標題列：h1＋同列種類切換 */
.doc-head{display:flex; align-items:center; gap:25px; flex-wrap:wrap; min-height:44px; margin-bottom:22px;}
.doc-head h1{margin:0;}
.doc-tabs{display:flex; align-items:center; gap:3px; padding:4px; border:1px solid #dfe6dc; border-radius:9px; background:#eaf0e7;}
.doc-tabs button{font:inherit; font-size:15px; padding:7px 14px; border:0; border-radius:6px; background:none; color:var(--ink2); cursor:pointer; white-space:nowrap;}
.doc-tabs button.on{background:#fff; color:var(--primary); font-weight:600; box-shadow:0 1px 4px rgba(40,70,52,.08);}
.doc-tabs small{margin-left:6px; font-variant-numeric:tabular-nums; color:inherit;}
.doc-panel{padding:0; overflow:visible;}
.doc-panel .entry-row{margin:16px 18px 0;}
.doc-panel .tblwrap{border:0; border-radius:0;}
.doc-panel .empty-state{padding:32px 18px;}
.entry-hint{flex:1; font-size:15px; color:var(--ink2); padding:15px 0;}
.doc-footer{padding:12px 18px; font-size:14px; color:var(--ink2); border-top:1px solid var(--border);}
.doc-footer span{color:var(--ink);}
.doc-more{display:block; margin:12px auto; border:1px solid var(--border); background:none; border-radius:999px; padding:8px 22px; font:inherit; font-size:15px; color:var(--ink2); cursor:pointer;}
@media (max-width:760px){ .doc-panel .entry-row{margin:12px 12px 0;} }

/* ---------- 首頁共用：問候列、頁尾一行（布告欄本體在檔案末端「首頁布告欄」段落） ---------- */
.home-head{display:flex; align-items:flex-end; justify-content:space-between; gap:20px; margin-bottom:22px; flex-wrap:wrap;}
.home-head h1{margin:0 0 2px;}
.home-section{display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:13px; flex-wrap:wrap;}
.home-section h2{margin:0;}
.home-section .count{font-size:14px; color:var(--ink2); font-weight:400; margin-left:6px;}
.home-foot{display:flex; justify-content:space-between; gap:20px; margin-top:18px; font-size:14px; color:var(--ink2);}

/* 首頁 app 卡片格：永遠 8 格，欄數 8/4/2 依寬度切換 */
.appgrid{display:grid; grid-template-columns:repeat(2,1fr); gap:10px; margin-bottom:16px;}
@container (min-width:720px){.appgrid{grid-template-columns:repeat(4,1fr);}}
@container (min-width:1240px){.appgrid{grid-template-columns:repeat(8,1fr);}}
.appcard{
  min-height:76px; border-radius:var(--r); cursor:pointer; font:inherit;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px;
  font-weight:700; font-size:.95rem; padding:8px; min-width:0;
}
.appcard .label{max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.appcard .d{font-size:.72rem; font-weight:400; opacity:.85; max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.appcard.pri{background:var(--primary); color:var(--onprimary); border:1px solid var(--primary);}
.appcard.sec{background:var(--card); border:1px solid var(--primary); color:var(--primary);}
.appcard.empty{border:2px dashed var(--border); background:transparent; color:var(--ink2); font-weight:400; font-size:1.5rem; cursor:default;}

/* 按鈕與表單輸入（各頁共用，2026-08-18 依實作回報收進共用層） */
.btn{
  font:inherit; font-size:16px; cursor:pointer; border-radius:6px; padding:0 18px; min-height:42px;
  display:inline-flex; align-items:center; justify-content:center; white-space:nowrap;
  background:var(--primary); color:var(--onprimary); border:1px solid var(--primary); font-weight:600;
  box-shadow:0 3px 7px rgba(40,91,78,.08);
}
.btn:hover{background:#214f46; border-color:#214f46;}
.btn.sec{background:var(--card); color:var(--ink); border-color:var(--border); box-shadow:none;}
.btn.sec:hover{background:var(--muted); border-color:var(--border);}
.btn:disabled{opacity:.4; cursor:not-allowed;}
.btnrow{display:flex; gap:var(--sp-2); justify-content:flex-end; margin-top:var(--sp-3); flex-wrap:wrap;}
.formrow{display:flex; flex-wrap:wrap; gap:var(--sp-2) var(--sp-3); margin-bottom:var(--sp-2);}
.field{display:flex; flex-direction:column; min-width:150px; flex:1;}
.field label{font-size:.85rem; color:var(--ink2);}
.field input,.field select,.field textarea{
  font:inherit; color:var(--ink); background:var(--bg);
  border:1px solid var(--border); border-radius:var(--r); padding:8px 12px; min-height:48px;
}

/* 按鈕變體（審查上收：各頁不得再私定義 .btn 家族） */
.btn.danger{background:transparent; color:var(--alert); border-color:var(--alert);}
.btn.sm{min-height:36px; padding:0 14px; font-size:15px;}
.btn.link{background:none; border:none; color:var(--primary); text-decoration:underline; font-weight:400; box-shadow:none;}
.btn.link:hover{background:none;}
.btn.danger:hover{background:var(--alert-bg); border-color:var(--alert);}

/* 下拉建議框（搜尋流水線共用） */
.sug{
  display:none; position:absolute; left:0; right:0; top:calc(100% + 6px); z-index:60;
  max-height:260px; overflow-y:auto;
  background:#fff; border:1px solid var(--popup-border); border-radius:var(--popup-radius);
  box-shadow:var(--popup-shadow); padding:4px;
}
/* 原生 dialog 走同一組浮窗表面（各頁的 modal 不再各自畫框） */
dialog{margin:auto; border:1px solid var(--popup-border); border-radius:var(--popup-radius); background:#fff; color:var(--ink); box-shadow:var(--popup-shadow); padding:24px; max-width:min(560px,calc(100vw - 32px));}
dialog::backdrop{background:var(--popup-backdrop);}
.sug.on{display:block;}
.sug .sg{display:flex; align-items:center; gap:12px; flex-wrap:wrap; padding:8px 12px; border-radius:8px; cursor:pointer;}
.sug .sg.cur{background:var(--primary-muted);}

/* 匯入入口框（進貨憑單／出貨通知共用）：可點、可拖檔 */
.ib-import{
  display:block; width:100%; font:inherit;
  border:1px dashed #b5c4b6; border-radius:7px; background:#fafcf8;
  padding:12px 16px; text-align:center; color:var(--ink2); font-size:15px; margin-bottom:var(--sp-3);
  cursor:pointer; transition:border-color .15s, background .15s;
}
.ib-import:hover, .ib-import.drag{border-color:var(--primary); background:var(--primary-muted); color:var(--ink);}
.ib-import b{color:var(--primary); font-weight:500;}
/* 建立列（2026-09-08 第一階段設計）：虛線只包住可拖放的範圍，「或｜手動登打」在框外右側 */
.entry-row{display:flex; align-items:center; gap:14px; margin-bottom:var(--sp-2);}
.entry-row>.ib-import{flex:1; min-width:0; margin:0; min-height:58px; display:flex; align-items:center; justify-content:center; gap:14px; flex-wrap:wrap;}
.entry-row .entry-or{font-size:14px; color:var(--ink2);}
@media (max-width:760px){ .entry-row{flex-wrap:wrap;} .entry-row>.ib-import{flex-basis:100%;} .entry-row>.btn{margin-left:auto;} }

/* 膠囊篩選鈕 */
.filterchip{
  font:inherit; cursor:pointer; border-radius:var(--r-chip); min-height:48px;
  border:1px solid var(--border); background:var(--card); color:var(--ink2); padding:6px 18px;
}
.filterchip.on{background:var(--primary); border-color:var(--primary); color:var(--onprimary); font-weight:700;}

/* 吐司 */
.toast{
  position:fixed; left:50%; bottom:24px; transform:translateX(-50%); z-index:200;
  background:var(--ink); color:var(--card); border-radius:var(--r); padding:10px 22px;
  font-size:.95rem; opacity:0; pointer-events:none; transition:opacity .2s;
}
.toast.on{opacity:1;}

/* 手機清單列（pick-fill 與 pod 共用，審查上收） */
.plrow{background:var(--card); border-bottom:1px solid var(--border); padding:14px 16px; display:flex; align-items:center; gap:10px; cursor:pointer; min-height:64px; width:100%; font:inherit; text-align:left; border-left:0; border-right:0; border-top:0;}
.plrow .plmain{flex:1; min-width:0;}
.plrow .plno{font-family:Consolas,monospace; font-weight:700;}
.plrow .plmeta{font-size:.85rem; color:var(--ink2); flex:1; min-width:0;}
.plrow .plgo{color:var(--primary); white-space:nowrap;}

/* 臨時品項狀態章（非警示紅——警示紅只留給真警示） */
.chip.temp{border-color:var(--ink2); color:var(--ink2); background:var(--muted);}

/* 空狀態與建置中佔位 */
.empty-state{color:var(--ink2); font-size:.9rem; padding:14px 0;}
/* 手機清單頁的空狀態：置中大留白（pod 與 pick-fill 共用，原本兩頁各寫一份相同的） */
.empty-state.lg{padding:var(--sp-4) var(--sp-3); text-align:center; line-height:1.8; font-size:1rem;}
.empty-state.loading{font-size:18px; text-align:center; padding:80px 16px;}   /* 載入佔位（2026-09-14 使用者：「先去泡杯咖啡…」18px 置中） */
/* 正式版開發鎖（2026-08-19）：頁面與搜尋欄的「開發中」虛線框 */
.devbox{
  border:2px dashed var(--border); border-radius:var(--r); background:transparent;
  min-height:340px; display:flex; align-items:center; justify-content:center;
  color:var(--ink2); font-size:1.4rem; letter-spacing:2px;
}
.gsearch.dev{border-style:dashed; justify-content:center; font-size:.85rem; letter-spacing:1px;}
.placeholder{
  border:2px dashed var(--border); border-radius:var(--r); background:transparent;
  padding:var(--sp-4); text-align:center; color:var(--ink2);
}
.placeholder b{color:var(--primary); display:block; font-size:1.1rem; margin-bottom:6px;}

/* ---------- 現場模式（手機優先，DESIGN_SYSTEM「模式切換」） ---------- */
/* 側欄與全域搜尋收起來，只留：我是誰、切回完整、登出。畫面全給大按鈕 */
.modechip{
  border:1px solid var(--border); background:var(--card); border-radius:var(--r-chip);
  width:44px; min-height:36px; display:inline-flex; align-items:center; justify-content:center;
  color:var(--ink2); cursor:pointer; padding:0;
}
.modechip svg{width:20px; height:20px; stroke:currentColor; fill:none; stroke-width:1.7;
  stroke-linecap:round; stroke-linejoin:round; display:block;}
.modechip:hover{color:var(--primary); border-color:var(--primary);}
html.field-mode .sidenav{display:none;}
html.field-mode .gsearch{display:none;}
html.field-mode .content{padding:var(--sp-2);}
html.field-mode .appbar{padding:8px 12px; justify-content:space-between;}

/* ---------- 測試版識別：側欄 logo 旁的橘標籤（正式版永不出現） ---------- */
/* 側欄收闔時縮成 ☰ 右上角一個橘點——資訊還在，但不佔空間也不吵 */
html.test-site .sidenav .slogo{position:relative;}
.testbadge{
  background:#B45309; color:#fff; border-radius:var(--r-chip);
  padding:1px 9px; font-size:.68rem; font-weight:400; white-space:nowrap; line-height:1.6;
}
html.nav-collapsed .testbadge{
  position:absolute; top:9px; right:11px;
  width:9px; height:9px; padding:0; font-size:0; line-height:0;
}
/* 正式站版號：同位置的低調灰字（無底色），側欄收闔時直接隱藏 */
.verbadge{
  color:var(--ink2); font-size:.68rem; font-weight:400; white-space:nowrap; line-height:1.6;
  padding:1px 9px;   /* 盒模型與 .testbadge 一致，兩站切換時版號字不跳位 */
}
html.nav-collapsed .verbadge{ display:none; }

/* ---------- AI訓練所懸浮球（2026-08-26 使用者裁決 B 案） ---------- */
/* 2026-08-26 二修：圓形徽章球 → 方形牌背（圖＝閥類牌背縮圖；三修：128 太大改回 64） */
/* AI訓練所入口（2026-09-14 使用者裁決 B+C，懸浮球廢除）：紅點同一套，掛在側欄項與首頁紙卡上 */
.ab-badge{min-width:20px; height:20px; background:#d0342c; color:#fff; font-size:.78rem; font-weight:700; border-radius:999px;
  display:inline-flex; align-items:center; justify-content:center; padding:0 5px; border:2px solid var(--bg); box-sizing:border-box; line-height:1;}
.sidenav a .nav-badge{margin-left:auto;}
html.nav-collapsed .sidenav a .nav-badge{position:absolute; top:4px; right:4px; margin:0;}
html.nav-collapsed .sidenav a[data-arena]{position:relative;}

/* 交辦任務頁素面模式：隱藏側欄與頂欄，整頁就是那份文件（app.js taskbare） */
.taskbare .sidenav, .taskbare .appbar{display:none;}
.taskbare .layout{display:block;}
.taskbare .content{margin:0; padding:20px 16px;}

/* ---------- 首頁布告欄（2026-09-14 第二階段定稿 §9）：木框、四欄進度、紙卡、右側木盒 ---------- */
.pin-primary{background:#365e4f!important;color:white!important;border-color:#365e4f!important}
.pin-primary:hover{background:#24483b!important}
.pin-dialog{width:420px;max-width:calc(100vw - 40px);border:1px solid #ded9c9;border-radius:12px;padding:26px;background:#fffdf5;color:#514e3c;box-shadow:0 15px 60px #28352233}
.pin-dialog::backdrop{background:#27352940}
.pin-dialog h2{font-size:21px;margin:0 0 20px}
.pin-dialog label{display:block;font-size:13px;margin:14px 0;color:#7a7c67}
.pin-dialog input,.pin-dialog textarea,.pin-dialog select{box-sizing:border-box;width:100%;display:block;margin-top:6px;border:1px solid #d7dccf;border-radius:6px;padding:10px;font:inherit;color:#455644;background:white}
.pin-form-row{display:flex;gap:16px}
.pin-form-row>label{flex:1;min-width:0}
.pin-dialog footer{display:flex;justify-content:flex-end;gap:10px;align-items:center;margin-top:22px}
.pin-dialog button{padding:9px 14px;border:1px solid #d7dccf;background:#fff;border-radius:6px;font:inherit;cursor:pointer}
.pin-dialog p{white-space:pre-wrap;overflow-wrap:anywhere}
.pin-dialog small{color:#7b8172}
.project-board{padding:22px;background:linear-gradient(125deg,#f3f2ec,#ebece5);border:1px solid #d6d9cf;border-top:5px solid #dadbd1;border-radius:10px;box-shadow:inset 0 1px 2px #fff,0 6px 20px #40513a08;min-height:570px}
.project-notices{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:12px 0 20px;margin-bottom:16px;border-bottom:1px solid #d7dacf}
.project-notices button{background:#fffef8;border:1px solid #deded2;border-radius:5px;padding:8px 10px;color:#637057;font:inherit;font-size:13px;cursor:pointer}
.project-notices b{font-weight:500;margin-left:5px;color:#365e4f}
.project-lanes{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;align-items:start}
.project-lane{background:#e4e6dd80;border:1px solid #dedfd6;border-radius:9px;padding:10px;min-height:180px}
.project-lane>header{display:flex;justify-content:space-between;align-items:center;padding:8px 3px 15px;color:#7e8577;font-size:12px}
.project-lane h2{display:flex;gap:8px;align-items:center;font-size:15px;font-weight:500;color:#555f50;margin:0}
.project-card{border:1px solid #deddd2;border-left:3px solid #d1d8c6;border-radius:7px;background:linear-gradient(120deg,#fffefa,#faf9f3);box-shadow:0 2px 3px #545a3a08;margin-bottom:10px;overflow:hidden}
.project-card[hidden]{display:none}
.project-card-body{padding:6px 12px 12px;text-align:left;background:none;border:0;color:#49533f;font:inherit;cursor:pointer;width:100%}
.project-card h3{font-size:16px;font-weight:500;line-height:1.6;margin:0 0 7px;overflow-wrap:anywhere}
.project-card p{font-size:13px;line-height:1.6;color:#828777;margin:0 0 13px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.project-card small{font-size:11px;color:#949784}
.project-card select{display:block;margin:0 12px 12px;max-width:calc(100% - 24px);font:inherit;font-size:11px;border:1px solid #e1e4d8;border-radius:4px;background:#f0f3e9;color:#6d7d60;padding:3px 6px}
.project-card:hover{box-shadow:0 3px 8px #42533612}
.project-lifted{opacity:.5}
.project-expand{display:block;width:100%;border:0;background:transparent;color:#7d8c73;font-size:12px;padding:10px;cursor:pointer}
@media(max-width:1100px){.project-lanes{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:600px){.project-board{padding:12px}
.project-lanes{grid-template-columns:1fr}
.project-notices{gap:6px}
.project-notices button{font-size:12px}}
.project-mobile-stage{display:none}
@media(max-width:600px){.project-mobile-stage{display:block;width:100%;padding:10px;margin-bottom:12px;border:1px solid #d5dbce;border-radius:6px;background:#fffef8;color:#53634b}
.project-lane:not(.mobile-selected){display:none}}
.project-board{position:relative;padding:28px;background-color:#f2f1e8;background-image:radial-gradient(#9da39112 .7px,transparent .8px),linear-gradient(115deg,#fffff785,transparent 45%,#c9cdb615);background-size:7px 7px,100% 100%;border:9px solid #d0d2c7;border-top-color:#e9eae1;border-left-color:#e2e4d9;border-bottom-color:#aeb5a7;border-right-color:#bdc3b6;border-radius:11px;box-shadow:inset 0 2px 10px #616e4c25,0 1px 0 #909b8770,0 9px 22px #3d52321a}
.project-board:after{content:'';display:block;margin:24px -16px -20px;height:11px;border-radius:2px 2px 5px 5px;background:linear-gradient(#c0c7b8,#edf0e4 35%,#a8b29e 75%,#8e9b82);box-shadow:0 4px 5px #4c593420}
.project-notices{padding:12px 14px;margin-bottom:30px;background:#e0e5d64d;border:1px solid #cbd2bf;border-radius:5px;box-shadow:inset 0 1px 3px #6c7b5810}
.project-notices button{position:relative;border-color:#dedbca;background:linear-gradient(110deg,#fffdf0,#f2efdc);box-shadow:1px 2px 3px #56623f18;border-radius:2px 3px 5px 2px;transform:rotate(-.3deg)}
.project-notices button:nth-child(odd){transform:rotate(.4deg)}
.project-lanes{gap:22px}
.project-lane{position:relative;padding:0 10px 16px;background:linear-gradient(90deg,#d3dac317,transparent 20%,#d3dac317);border:0;border-right:1px dashed #a9b29a65;border-radius:0;min-height:320px}
.project-lane:last-child{border-right:0}
.project-lane>header{position:relative;min-height:48px;padding:10px 16px;margin:0 0 24px;background:linear-gradient(#fffffc,#f1f0e3);border:1px solid #d2d4c3;border-radius:5px;box-shadow:0 3px 0 #adb5a366,0 5px 7px #5f70521a;transform:rotate(-.5deg)}
.project-lane:nth-child(even)>header{transform:rotate(.45deg)}
.project-lane>header:before{content:'';position:absolute;top:6px;left:6px;width:4px;height:4px;border-radius:50%;background:#a2aa93;box-shadow:0 1px 1px #fff}
.project-lane h2{font-size:16px;color:#4f6044;letter-spacing:.5px}
.project-lane>header>span{font-size:12px;color:#8b937d}
.project-card{position:relative;margin:0 0 20px;background:linear-gradient(110deg,#fffdf0,#f5f1dc);border:1px solid #e2ddc5;border-left-width:1px;border-radius:2px 3px 9px 2px;box-shadow:2px 5px 6px #5b654123,0 1px 1px #6a725515;transform:rotate(-.65deg);overflow:visible}
.project-card:nth-child(even){transform:rotate(.65deg)}
.project-lane:nth-child(2) .project-card{background:linear-gradient(110deg,#edf2df,#e3ebd0);border-color:#d5dfc3}
.project-lane:nth-child(3) .project-card{background:linear-gradient(110deg,#edf3f4,#dfe9e9);border-color:#d2dfdd}
.project-lane:nth-child(4) .project-card{background:linear-gradient(110deg,#f6f3eb,#eae7db)}
.project-card:before{content:'';position:absolute;top:-6px;left:calc(50% - 6px);width:12px;height:12px;border-radius:50%;background:radial-gradient(circle at 35% 28%,#f5f4de 0,#b2bda0 35%,#7f9273 75%);box-shadow:1px 3px 3px #3e4c2a42;pointer-events:none}
.project-card:after{content:'';position:absolute;bottom:0;right:0;width:18px;height:16px;background:linear-gradient(135deg,transparent 48%,#fff9 50%,#9f9f7626);border-radius:0 0 9px 0;pointer-events:none}
.project-card-body{padding:9px 14px 14px}
.project-card h3{color:#4f543d;font-size:17px;font-weight:500}
.project-card p{color:#7b826b;line-height:1.7}
.project-card small{color:#8b907c}
.project-card select{background:#fff9;border-color:#b4bea060;margin-left:14px;margin-bottom:15px}
.project-card:hover{box-shadow:3px 7px 11px #4c5e322b}
.project-expand{background:#fffff640;border-radius:4px}
.project-lifted{transform:rotate(2deg);box-shadow:5px 12px 20px #40552d33}
@media(max-width:760px){.project-board{padding:20px 12px;border-width:6px}
.project-lanes{gap:16px}
.project-lane{padding:0 6px 12px}
.project-notices{margin-bottom:24px}
.project-board:after{margin-left:-5px;margin-right:-5px;margin-bottom:-15px}}
.board-live{font-size:13px;color:#6b7d70}/* Generated material art: concept and source images in assets/board/, live text on top. */
.project-board{display:flex;flex-direction:column;padding:50px 4% 36px;border:0;border-radius:3px;background:#e3ceb0 url('assets/board/board-oak-felt-v1.webp') center/100% 100% no-repeat;box-shadow:0 10px 24px #55452d26;min-height:680px}
.project-board:after{display:none}
.project-lanes{order:1;gap:24px}
.project-notices{order:2;margin:28px 0 0;padding:16px 0 0;border:0;background:none;gap:18px;align-items:flex-end}
.project-mobile-stage{order:0}
.project-lane{background:none;border-right:1px solid #8f775c35;padding:0 12px 12px 0;min-height:360px}
.project-lane>header{background:#f6efd8 url('assets/board/stationery-v1.webp') 50% 21%/345% 440%;border:0;border-radius:1px;min-height:65px;padding:20px 14px 12px;box-shadow:2px 4px 5px #69543235;margin:0 0 30px}
.project-lane>header:before{width:13px;height:13px;left:calc(50% - 6px);top:-6px;background:radial-gradient(circle at 32% 25%,#d49b76,#965035 65%,#693721);box-shadow:2px 3px 4px #6f493949}
.project-lane:nth-child(even)>header:before{background:radial-gradient(circle at 32% 25%,#8ca9b9,#36596b 65%,#223946)}
.project-lane h2{font-family:'Microsoft JhengHei',sans-serif;font-size:20px;color:#493d2e;letter-spacing:2px}
.project-lane>header>span{color:#8b7b65;font-size:12px}
.project-card,.project-lane:nth-child(2) .project-card,.project-lane:nth-child(3) .project-card,.project-lane:nth-child(4) .project-card{background:#faedaf url('assets/board/stationery-v1.webp') 3% 21%/345% 440%;border:0;box-shadow:3px 5px 6px #614b3138;border-radius:1px 2px 6px 1px;margin-bottom:25px}
.project-lane:nth-child(2) .project-card{background-position:50% 21%}
.project-lane:nth-child(3) .project-card{background-position:97% 21%}
.project-lane:nth-child(4) .project-card{background-position:50% 21%}
.project-card:before{background:radial-gradient(circle at 35% 28%,#97b5c4,#3b6579 60%,#234257);width:14px;height:14px;top:-7px;box-shadow:2px 3px 4px #61402e55}
.project-card:nth-child(even):before{background:radial-gradient(circle at 35% 28%,#d59d79,#a45c3d 60%,#783e26)}
.project-card:after{display:none}
.project-card-body{padding:12px 17px 16px}
.project-card h3{font-size:17px;color:#493c2c;line-height:1.6}
.project-card p{color:#75664c}
.project-card small{color:#83745e}
.project-card select{background:#fff7;border-color:#9d8b6640;color:#776c51}
.project-expand{background:#f8efda9c;color:#786348}
.project-notices button{position:relative;min-width:135px;min-height:105px;padding:30px 15px 15px;display:flex;flex-direction:column;align-items:flex-start;gap:4px;border:0;background:#f5edda url('assets/board/stationery-v1.webp') 50% 21%/345% 440%;box-shadow:2px 4px 5px #654c3033;color:#61533e;transform:rotate(-1deg)}
.project-notices button b{font-size:28px;font-weight:400;color:#594b35;margin:0}
.project-notices button>span{position:absolute;right:12px;bottom:16px}
.project-notices button:before{content:'';position:absolute;top:-11px;left:calc(50% - 10px);width:20px;height:24px;background:linear-gradient(90deg,#735c2f,#c0a267 32%,#8a6d35 70%,#58441e);border-radius:8px 8px 2px 2px;box-shadow:1px 3px 2px #4e3d2c44}
@media(max-width:760px){.project-board{padding:34px 22px 28px}
.project-lanes{gap:18px}
.project-lane h2{font-size:17px}
.project-notices{gap:16px 10px}
.project-notices button{min-width:110px;font-size:12px}}
/* Keep frame thickness stable as the board grows vertically. */
.project-board{border:20px solid transparent;border-image:url('assets/board/board-oak-felt-v1.webp') 42 fill stretch;background:none;padding:28px 20px 24px;box-shadow:0 8px 20px #55452d20}
@media(max-width:760px){.project-board{border-width:12px;padding:22px 10px}}
/* Individual alpha assets: no polygon clipping, no artificial card edge. */
.project-notices{order:0;margin:0 0 28px;padding:13px 18px;border:1px solid #938b7655;border-radius:7px;background:linear-gradient(110deg,#f0eee2,#dcdccc);box-shadow:inset 0 1px 0 #fff9,0 2px 4px #4f493320;align-items:center;gap:8px 14px;position:relative}
.project-notices:before,.project-notices:after{content:'';position:absolute;top:6px;width:4px;height:4px;border-radius:50%;background:#9a9987;box-shadow:0 1px 0 #fff8}
.project-notices:before{left:6px}
.project-notices:after{right:6px}
.project-notices button{min-width:0;min-height:0;display:inline-flex;flex-direction:row;align-items:center;gap:8px;padding:8px 11px;border:1px solid #b4b29d66;border-radius:4px;background:linear-gradient(#fcfbef,#e8e7d9);box-shadow:0 1px 1px #72694b18;color:#625c48;transform:none!important;font-size:13px}
.project-notices button:before{display:none}
.project-notices button b{font-size:15px;margin:0;color:#455d46}
.project-notices button>span{position:static}
.project-notices button:hover{background:#fffdf3}
.project-lane>header{background:linear-gradient(105deg,#f7f0dc,#ede4cc);box-shadow:0 1px 2px #69543226,inset 0 0 0 1px #fff5;min-height:44px;padding:12px 14px;border:1px solid #c4b99c88;border-radius:2px;transform:rotate(-.2deg);margin-bottom:14px}
.project-lane>header:before{display:none}
.project-lane:nth-child(even)>header{transform:rotate(.2deg)}
.project-lane h2{font-size:17px;letter-spacing:1px}
.project-lane>header:after{content:'';position:absolute;inset:0;pointer-events:none;background:linear-gradient(100deg,transparent 95%,#fff5);opacity:.6}
.project-card,.project-lane:nth-child(2) .project-card,.project-lane:nth-child(3) .project-card,.project-lane:nth-child(4) .project-card{background:transparent url('assets/board/task-paper-v2.webp') center/contain no-repeat!important;box-shadow:none!important;border:0;border-radius:0;aspect-ratio:4/3;min-height:0;padding:13% 10% 9%;box-sizing:border-box;display:flex;flex-direction:column;margin:0 0 9px;transform:rotate(-.5deg)}
.project-card[hidden]{display:none}
.project-card:before,.project-card:after{display:none}
.project-card-body{padding:4px 0 0;flex:1;min-height:0;overflow:hidden}
.project-card h3{font-size:15px;line-height:1.4;margin:0 0 4px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.project-card p{font-size:12px;margin:0 0 5px;line-height:1.4;-webkit-line-clamp:1}
.project-card small{font-size:10px;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.project-card select{flex:none;align-self:flex-start;margin:4px 0 0;font-size:10px;padding:1px 4px;max-width:100%;background:#fff5}
.project-card:hover{filter:brightness(1.025)}
.project-lifted{opacity:.55}
.project-mobile-stage{order:1}
.project-lanes{order:2}
@media(max-width:600px){.project-card{max-width:360px;width:100%;margin:0 auto 10px}
.project-card h3{font-size:16px}
.project-card p{font-size:13px}
.project-card small{font-size:11px}
.project-notices{padding:12px}
.project-notices button{font-size:12px}}
/* Whole-paper interaction and compact top rail. */
.project-board{display:grid;grid-template-columns:minmax(0,1fr) 112px;column-gap:18px;align-content:start}
.project-board>.project-notices{grid-column:1;grid-row:1;margin:0 0 24px;align-self:center}
.project-add-slot{grid-column:2;grid-row:1;align-self:start;display:flex;justify-content:center}
.project-add-slot [data-add]{border:0;background:transparent url('assets/board/note-stack-v2.webp') center/contain no-repeat!important;width:110px;height:100px;padding:0 10px 8px;color:#5b593f;cursor:pointer;font-size:13px;filter:drop-shadow(0 3px 3px #4f371322)}
.project-add-slot [data-add]:hover{filter:brightness(1.04) drop-shadow(0 5px 4px #4f371333)}
.project-board>.project-lanes{grid-column:1/-1;grid-row:3}
.project-board>.project-mobile-stage{grid-column:1/-1;grid-row:2}
.project-board .project-card{position:relative;isolation:isolate;background:none!important;cursor:grab;touch-action:none;user-select:none;overflow:visible}
.project-board .project-card::before{content:'';display:block!important;position:absolute;inset:0;z-index:-1;background:url('assets/board/task-paper-v2.webp') center/contain no-repeat;pointer-events:none;border:0;border-radius:0;box-shadow:none;transform:none;width:auto;height:auto}
.project-board .project-card[data-color="0"]::before{filter:sepia(.35) saturate(1.8)}
.project-board .project-card[data-color="1"]::before{filter:sepia(.55) saturate(1.2) hue-rotate(48deg)}
.project-board .project-card[data-color="2"]::before{filter:sepia(.55) saturate(1.1) hue-rotate(150deg)}
.project-board .project-card[data-color="3"]::before{filter:sepia(.45) saturate(1.5) hue-rotate(310deg)}
.project-card .project-card-body{cursor:inherit}
.project-board .project-lifted{z-index:30;opacity:1;cursor:grabbing;filter:drop-shadow(8px 16px 9px #3c2b2945);transition:none}
@media(max-width:600px){.project-board{grid-template-columns:minmax(0,1fr) 94px;gap:12px}
.project-add-slot [data-add]{width:92px;height:88px}
.project-board>.project-notices{margin-bottom:10px}}
.project-board .project-add-slot button.pin-primary,.project-board .project-add-slot button.pin-primary:hover{color:#514d2e!important;text-shadow:none}
/* Frame-mounted envelopes and legible paper hierarchy. */
.project-board{overflow:visible;margin-top:35px}
.project-board>.project-notices{display:flex;flex-wrap:wrap;align-items:flex-start;align-self:start;gap:10px 16px;padding:0;margin:-62px 0 22px;border:0;border-radius:0;background:none;box-shadow:none;min-width:0;overflow:visible}
.project-board>.project-notices:before,.project-board>.project-notices:after{display:none}
.project-notices button.notice-envelope{position:relative;display:flex;align-items:center;justify-content:center;flex:0 0 142px;width:142px;height:104px;min-width:0;min-height:0;padding:36px 17px 15px;border:0;border-radius:0;background:transparent url('assets/board/notice-envelope-v1.webp') center/contain no-repeat;box-shadow:none;transform:rotate(-3deg)!important;color:#504837;font-size:14px;line-height:1.35;isolation:isolate}
.project-notices button.notice-envelope:nth-child(even){transform:rotate(2deg) translateY(5px)!important}
.project-notices button.notice-envelope:hover{filter:brightness(1.035) drop-shadow(0 3px 2px #503f3328)}
.project-notices button.notice-envelope .envelope-title{position:static;display:block;text-align:center}
.project-notices button.notice-envelope .envelope-badge{position:absolute;top:7px;right:8px;width:24px;height:24px;display:grid;place-items:center;border-radius:50%;border:1px solid #a83e35;background:radial-gradient(circle at 35% 25%,#d86659,#b83e36);box-shadow:1px 2px 2px #67372b44,inset 0 1px 1px #ffffff55;color:#fff;font-size:14px;font-weight:600;transform:rotate(7deg)}
.project-board .project-card{aspect-ratio:4/3;min-height:215px;padding:13% 10% 12%}
.project-board .project-card::before{background-size:100% 100%}
.project-board .project-card-top{min-height:22px;line-height:1.3}
.project-board .project-card-top>span{font-size:12px;color:#655e4c;padding:1px 5px}
.project-board .project-card-body{display:flex;flex-direction:column;align-items:stretch;text-align:left;padding:7px 0 0;gap:6px}
.project-board .project-card h3{font-size:19px;font-weight:500;line-height:1.4;margin:0;max-height:4.2em;-webkit-line-clamp:3;color:#403d30}
.project-board .project-card small.project-posted{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:auto;padding-top:8px;font-size:13px;line-height:1.4;color:#696350;overflow:visible}
.project-posted>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-posted time{flex:none}
.project-card .paper-due{align-self:flex-start;font-size:11px;color:#9b4938;border-bottom:1px solid #9b493844}
@media(max-width:760px){.project-notices button.notice-envelope{flex-basis:128px;width:128px;height:98px;font-size:13px}.project-board>.project-notices{gap:8px;margin-top:-48px}.project-board .project-card{min-height:225px}}
.project-board .project-card{padding-bottom:17%}.project-board .project-card small.project-posted{padding-right:8px}.project-board .project-card h3{font-weight:500}
.project-board .project-lanes .project-card{padding:13% 10% 17%;min-height:215px}
/* Left/right frame comparison: same objects and spacing on either edge. */
.project-board[data-edge]{position:relative;display:flex;flex-direction:column;margin:24px 62px 0;min-height:790px;padding:30px 64px 24px}
.project-edge-rail{position:absolute;top:12px;width:142px;z-index:4;display:flex;flex-direction:column;align-items:center;gap:10px}
.project-board[data-edge=left]>.project-edge-rail{left:-81px}
.project-board[data-edge=right]>.project-edge-rail{right:-81px}
.project-edge-rail .project-add-slot{display:flex;align-self:center;min-height:100px}
.project-edge-rail .project-notices{display:flex;flex-direction:column;align-items:center;gap:8px;padding:0;margin:0;border:0;background:none;box-shadow:none;overflow:visible}
.project-edge-rail .project-notices:before,.project-edge-rail .project-notices:after{display:none}
.project-edge-rail .project-notices button.notice-envelope{flex:none}
.project-board[data-edge]>.project-lanes{order:2;width:100%}
.project-board[data-edge]>.project-mobile-stage{order:1}
.project-board[data-edge]>.pin-toolbar{order:3}
@media(max-width:760px){.project-board[data-edge]{margin-left:48px;margin-right:48px;padding:24px 44px}.project-edge-rail{width:128px}.project-board[data-edge=left]>.project-edge-rail{left:-74px}.project-board[data-edge=right]>.project-edge-rail{right:-74px}}
.project-board[data-edge]>.project-lanes{grid-template-columns:repeat(4,minmax(0,1fr));min-width:0}
.project-board[data-edge] .project-lane{min-width:0}
.project-board[data-edge] .project-card{width:100%;min-width:0;max-width:100%}
@media(max-width:1100px){.project-board[data-edge]>.project-lanes{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:600px){.project-board[data-edge]>.project-lanes{grid-template-columns:minmax(0,1fr)}}
.project-board[data-edge]{margin:12px 62px 0 0;padding:24px 52px 24px 20px;min-height:calc(100vh - 140px)}
.project-edge-rail .clip-restore{width:112px;height:120px;background:transparent url('assets/board/clip-restore-v1.webp') center/contain no-repeat;border:0;box-shadow:none;padding:50px 13px 10px;color:#574c36;font-size:12px;cursor:pointer}
.project-edge-rail .clip-restore[hidden]{display:none}
.notice-float{position:fixed;inset:180px 145px auto auto;width:300px;max-width:calc(100vw - 40px);margin:0;padding:18px;border:1px solid #c7bc9f;border-radius:7px;background:#fffdf5;box-shadow:0 12px 35px #35281c40;color:#4d4736}
.notice-float h3{font-size:16px;margin:0 0 12px}
.project-notices .notice-float button{display:flex;flex-direction:row;justify-content:space-between;gap:16px;width:100%;padding:13px 4px;border:0;border-bottom:1px solid #e6dfce;min-height:0;background:none;box-shadow:none;transform:none!important;font-size:14px;color:#4d4736}
.project-notices .notice-float button b{font-size:13px;white-space:nowrap}
.project-board .project-lane>header{position:relative;background:linear-gradient(97deg,#f3e7c9,#fff3d7 50%,#e9dbba);border:0;border-radius:2px 5px 3px 1px;box-shadow:1px 3px 3px #735b3830;min-height:52px;margin:4px 8px 20px;padding:14px 13px;transform:rotate(-1deg)}
.project-board .project-lane:nth-child(even)>header{transform:rotate(.8deg)}
.project-board .project-lane>header:before{content:'';display:block;position:absolute;top:-7px;left:35%;width:32%;height:17px;border-radius:0;box-shadow:none;background:repeating-linear-gradient(95deg,#f7f1dcaa 0 2px,#fffae8aa 2px 4px);transform:rotate(-4deg)}
.project-board .project-lane>header:after{content:'';position:absolute;inset:0;background:repeating-linear-gradient(0deg,transparent 0 3px,#8c79560a 3px 4px);pointer-events:none}
@media(max-width:760px){.project-board[data-edge]{margin-left:0;margin-right:48px;padding:22px 40px 22px 10px}.notice-float{right:24px;top:145px}}
.project-edge-rail .clip-restore{background-image:url('assets/board/paper-pocket-v1.webp');height:122px;width:120px;padding:60px 12px 15px;font-size:11px}
.project-edge-rail .project-notices button.notice-envelope{background-image:url('assets/board/notice-envelope-v2.webp');width:120px;height:120px;padding:44px 16px 18px}
.project-board .project-lane>header{justify-content:center;gap:10px;text-align:center}
.project-board .project-lane>header h2{margin:0;text-align:center;font-size:21px}
.project-board .project-lane>header>span{position:static;text-align:center;font-size:17px}
.project-board .board-auto-sort{position:absolute;left:8px;top:-22px;width:34px;height:34px;border-radius:50%;border:1px solid #9c855b;background:radial-gradient(circle at 35% 25%,#f0dfb7,#c3a575 65%,#94764c);color:#675335;box-shadow:1px 3px 4px #5c422744,inset 0 1px 2px #fff9;padding:0;font-size:25px;line-height:30px;cursor:pointer}
.project-board .board-auto-sort:hover{filter:brightness(1.08)}
.project-board .project-lanes .project-card{min-height:200px;padding:12% 10% 14%;margin-bottom:4px}
.project-board .project-cards{gap:12px}
/* One insertion marker, independent of card art and lane outlines. */
.project-insertion-line{position:fixed;height:3px;background:#577965;border-radius:2px;box-shadow:0 1px 2px #fff8;pointer-events:none;z-index:40;transform:translateY(-50%)}
.project-insertion-line[hidden]{display:none}
.project-board .project-drop,.project-board .project-insert{outline:none!important;box-shadow:none;background-color:transparent}
/* Open oak accessory tray, joined directly to the board frame. */
.project-board[data-edge]{margin-right:156px;padding-right:24px}
.project-board[data-edge=right]>.project-edge-rail{left:calc(100% + 12px);right:auto;top:-20px;width:144px;box-sizing:border-box;min-height:660px;height:max-content;padding:18px 8px 24px;gap:12px;border:9px solid #be9566;border-left-width:5px;border-radius:0 4px 4px 0;background:linear-gradient(90deg,#73533744,transparent 18px),repeating-linear-gradient(92deg,#e2c79e 0px,#e8d0ac 3px,#ddbd92 5px,#e6cba5 9px);box-shadow:inset 3px 3px 9px #75563255,inset -2px -2px 5px #fff4,3px 6px 8px #61472e28}
.project-edge-rail:before{content:'';position:absolute;inset:-9px -9px auto -5px;height:8px;background:linear-gradient(#f4ddb8,#ba8d57);box-shadow:0 2px 2px #6d4b2b44;pointer-events:none}
.project-edge-rail:after{content:'';position:absolute;left:-5px;right:-9px;bottom:-9px;height:12px;background:linear-gradient(#f1d5ad,#b78a54);box-shadow:0 -2px 3px #6d4b2b33;pointer-events:none}
.project-edge-rail>.project-add-slot,.project-edge-rail>.clip-restore,.project-edge-rail>.project-notices{flex-shrink:0}
@media(max-width:760px){.project-board[data-edge]{margin-right:132px;padding-right:12px}.project-board[data-edge=right]>.project-edge-rail{width:124px;min-height:620px;padding-left:2px;padding-right:2px}}
/* Generated oak tray: fixed end caps, extensible center, flush full-height join. */
.project-board[data-edge=right]>.project-edge-rail{top:-20px;bottom:-20px;left:calc(100% + 19px);height:auto;min-height:0;border:12px solid transparent;border-image:url('assets/board/oak-tray-v2.webp') 85 75 fill stretch;border-radius:0;background:none;padding:16px 0 20px;box-shadow:3px 4px 8px #61472e20;box-sizing:border-box}
.project-board[data-edge=right]>.project-edge-rail:before,.project-board[data-edge=right]>.project-edge-rail:after{display:none}
/* Objects carry their meaning; labels remain available to assistive technology. */
.project-edge-rail .clip-restore{filter:drop-shadow(3px 6px 3px #50351d55) drop-shadow(0 1px 1px #50351d40);transform:rotate(-2deg)}
.project-edge-rail .clip-restore:hover{filter:drop-shadow(4px 8px 4px #50351d55) brightness(1.025)}
.project-edge-rail .project-notices button.notice-envelope{transform:translate(12px,3px) rotate(10deg)!important;transform-origin:80% 80%;filter:drop-shadow(-4px 8px 4px #51381f50) drop-shadow(1px 2px 1px #51381f33)}
.project-edge-rail .project-notices button.notice-envelope:hover{filter:drop-shadow(-5px 10px 5px #51381f55) brightness(1.025)}
.project-board .board-auto-sort{left:auto;right:-17px;top:-28px;z-index:6;width:38px;height:38px;border:0;border-radius:0;background:transparent url('assets/board/sort-medallion-v1.webp') center/contain no-repeat;box-shadow:none;filter:drop-shadow(1px 2px 2px #513b2838)}
.project-edge-rail .clip-restore{background-image:url('assets/board/paper-pocket-archive-v2.webp')}
.project-board[data-edge]{min-height:max(790px,calc(100vh - 140px))}
.object-layout-art{width:100%;height:100%;background-position:center;background-size:contain;background-repeat:no-repeat;pointer-events:none}
.object-layout-badge{position:absolute;right:7%;top:7%;width:22px;height:22px;display:grid;place-items:center;background:#bb5449;color:white;border-radius:50%;font-size:13px;font-weight:600;line-height:1}   /* 固定正方形才是正圓（回報 #2：只設 min-width 會被行高壓扁） */
.object-layout-locked{position:absolute;z-index:12;display:block;padding:0;border:0;background:none;box-shadow:none;cursor:pointer}
.object-layout-locked .object-layout-art{display:block;position:relative}
.object-layout-locked:hover{background:none;filter:brightness(1.035)}
.object-layout-locked:focus-visible{outline:2px solid #587965;outline-offset:3px}

/* 便利貼編輯：即時紙色預覽與垂直伸展。 */
.pin-dialog .pin-dialog-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:20px}
.pin-dialog .pin-dialog-heading h2{margin:0}
.pin-dialog .pin-colors{display:flex;gap:8px;align-items:center}
.pin-dialog .pin-colors button{width:24px;height:24px;padding:0;border:1px solid #7778;border-radius:5px;background:#fff5ca}
.pin-dialog .pin-colors [data-color="1"]{background:#e6efda}
.pin-dialog .pin-colors [data-color="2"]{background:#e1eef5}
.pin-dialog .pin-colors [data-color="3"]{background:#f6e2e5}
.pin-dialog .pin-colors [aria-pressed="true"]{outline:2px solid #455e50;outline-offset:2px}
.pin-dialog .pin-colors button:focus-visible{box-shadow:0 0 0 5px #fff}
.pin-dialog .pin-required{color:#c43b3b}
.pin-dialog textarea{resize:vertical;min-height:100px;max-width:100%}
.pin-dialog{max-height:calc(100dvh - 40px);overflow-y:auto}
.project-posted .note-period{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}.note-globe{width:15px;height:15px;flex-shrink:0}
.pin-dialog footer [data-remove]{margin-right:auto;border-style:dashed}

/* 唯讀欄位以淺灰底區分，保留文字可讀性。 */
.pin-dialog input[readonly],.pin-dialog textarea[readonly]{background:#edf1f0;border-color:#d9e1de;color:#5f6b67}

/* ---------- 單據工作區抽屜（2026-09-14 第二階段定稿 §4；標記由 pages/doc-workspace.js 產生） ---------- */
/* 預設收合：單據吃滿寬度，列表浮在上面、不擠右側欄寬；釘選才變左右並排 */
.ws{position:relative; display:grid; grid-template-columns:minmax(0,1fr); grid-template-rows:minmax(0,1fr);
  column-gap:20px; height:calc(100dvh - 132px); min-height:480px;}
.ws-doc{grid-column:1; grid-row:1; min-width:0; min-height:0; overflow:auto;}
.ws-list{position:absolute; left:0; top:0; bottom:0; width:300px; max-width:calc(100% - 24px); z-index:32;
  display:flex; flex-direction:column; min-height:0; background:var(--card);
  border:1px solid var(--border); border-radius:var(--popup-radius); overflow:hidden;
  box-shadow:8px 0 30px #193f3020;
  visibility:hidden; opacity:0; transform:translateX(-12px);
  transition:transform .16s ease, opacity .16s ease, visibility .16s;}
.ws.list-open>.ws-list{visibility:visible; opacity:1; transform:translateX(0);}
@media (prefers-reduced-motion:reduce){ .ws-list{transition:none;} }
.ws-backdrop{display:none; position:absolute; inset:0; z-index:31; border:0; border-radius:var(--popup-radius);
  background:var(--popup-backdrop); cursor:default;}
.ws.list-open:not(.list-pinned)>.ws-backdrop{display:block;}
.ws.list-pinned{grid-template-columns:280px minmax(0,1fr);}
.ws.list-pinned>.ws-list{position:relative; grid-column:1; grid-row:1; width:auto; max-width:none; box-shadow:none; transform:none;}
.ws.list-pinned>.ws-doc{grid-column:2;}
/* 入口 SVG：主側欄與單據的交界，釘選時整顆消失（含 Tab 序列） */
.ws-trigger{position:absolute; left:-18px; top:22px; z-index:35; display:grid; place-items:center;
  width:32px; height:36px; padding:0; cursor:pointer;
  border:1px solid var(--border); border-radius:7px; background:var(--card); color:var(--primary);
  box-shadow:0 3px 12px #193f3018;}
.ws-trigger:hover,.ws-trigger[aria-expanded="true"]{background:var(--primary-muted); border-color:#b9cec3;}
.ws.list-pinned>.ws-trigger,.ws-trigger[hidden]{display:none !important;}
.ws svg{width:18px; height:18px; display:block; stroke:currentColor; fill:none; stroke-width:1.6; stroke-linecap:round; stroke-linejoin:round;}
.ws-list>header{display:flex; align-items:center; gap:6px; padding:14px 12px 10px;}
.ws-count{margin-right:auto; font-size:14px; color:var(--ink2);}
.ws-ftoggle,.ws-reset{border:0; background:none; font:inherit; font-size:14px; color:var(--primary); cursor:pointer; padding:4px 6px;}
.ws-acts{display:flex; gap:2px;}
.ws-acts button{display:grid; place-items:center; width:28px; height:28px; padding:0; cursor:pointer;
  border:0; border-radius:4px; background:transparent; color:var(--ink2); font-size:20px; line-height:1;}
.ws-acts button:hover,.ws-acts button[aria-pressed="true"]{background:var(--primary-muted); color:var(--primary);}
.ws-search{display:block; padding:0 12px 12px; position:relative;}
.ws-sr{position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%);}
.ws-search input{width:100%; font:inherit; font-size:15px; padding:9px 12px; min-height:40px;
  border:1px solid var(--border); border-radius:6px; background:#fafcfb; color:var(--ink);}
.ws-summary{padding:0 14px 8px; font-size:12px; color:var(--primary);}
.ws-summary:empty{display:none;}
.ws-filters{display:grid; grid-template-columns:1fr 1fr; gap:8px; padding:0 12px 12px; font-size:12px; border-bottom:1px solid var(--border);}
.ws-filters label{display:flex; flex-direction:column; gap:4px; min-width:0; color:var(--ink2);}
.ws-filters select,.ws-filters input{width:100%; min-width:0; font:inherit; font-size:13px; padding:6px;
  min-height:32px; border:1px solid var(--border); border-radius:5px; background:var(--card); color:var(--ink);}
.ws-rows{flex:1; min-height:0; overflow:auto;}
.ws-row{display:flex; flex-direction:column; gap:7px; width:100%; padding:14px 16px; text-align:left; cursor:pointer;
  border:0; border-top:1px solid var(--border); border-left:3px solid transparent;
  background:var(--card); color:var(--ink); font:inherit;}
.ws-row:hover{background:var(--zebra);}
.ws-row.on{background:var(--primary-muted); border-left-color:var(--primary);}
.ws-row strong{font-size:15px; font-weight:600; overflow-wrap:anywhere;}
.ws-tag{margin-left:6px; font-size:12px; font-weight:400; color:var(--ink2); background:var(--muted); border-radius:3px; padding:1px 5px;}
.ws-row-line{display:flex; align-items:center; justify-content:space-between; gap:8px; font-size:14px; min-width:0;}
.ws-row-line>span{overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.ws-row-line small{color:var(--ink2); font-size:12px; white-space:nowrap;}
.ws-row-foot{display:flex; align-items:center; justify-content:space-between; gap:8px; color:var(--ink2); font-size:12px;}
.ws-empty{padding:20px; color:var(--ink2); font-size:14px;}
@media (max-width:800px){ .ws{height:calc(100dvh - 120px);} .ws.list-pinned{grid-template-columns:minmax(0,1fr);}
  .ws.list-pinned>.ws-list{position:absolute; width:300px;} .ws.list-pinned>.ws-doc{grid-column:1;} }

/* ---------- 單據工作頁單頭（定稿 §5；標記由 pages/inbound.js 等產生） ---------- */
.dh{padding:0; overflow:visible; margin-bottom:16px;}
.dh-title{display:flex; align-items:center; flex-wrap:wrap; gap:10px; padding:16px 20px; border-bottom:1px solid var(--border);}
.dh-route{display:flex; align-items:center; gap:14px; flex-wrap:wrap; min-width:0; min-height:40px;
  font-size:18px; font-weight:700; line-height:1.5; letter-spacing:0; color:var(--ink); margin:0;}
.dh-route>span{white-space:nowrap;}
.dh-route [data-tip]{position:relative; cursor:help;}
.dh-route [data-tip]:is(:hover,:focus-visible)::after{content:attr(data-tip); position:absolute; top:calc(100% + 9px); left:0;
  padding:7px 10px; background:#263c34; color:#fff; border-radius:5px; font:14px/1.5 inherit; font-weight:400;
  white-space:nowrap; z-index:30; box-shadow:0 3px 10px rgba(0,0,0,.13);}
.dh-route :is(input,select){font:inherit; font-size:16px; font-weight:600; width:170px; max-width:100%;
  min-height:40px; height:40px; padding:6px 10px; border:1px solid #ccd8d1; border-radius:6px; background:var(--card); color:var(--ink);}
.dh-spacer{flex:1; min-width:0;}
.dh-title .btn{min-height:40px; font-size:15px; padding:0 14px;}
.dh-icon{display:inline-flex; align-items:center; justify-content:center; min-width:40px; min-height:40px; padding:0 10px;
  border:1px solid var(--border); border-radius:6px; background:var(--card); color:var(--primary); cursor:pointer;}
.dh-icon:hover{background:var(--muted);}
.dh-icon svg{width:19px; height:19px; stroke:currentColor; fill:none; stroke-width:1.6; stroke-linecap:round; stroke-linejoin:round;}
.dh-more{position:relative;}
.dh-more>summary{list-style:none; cursor:pointer; padding:5px 10px; font-size:23px; line-height:28px; color:var(--primary);}
.dh-more>summary::-webkit-details-marker{display:none;}
.dh-more>div{position:absolute; right:0; top:100%; min-width:160px; padding:6px; display:grid; z-index:40;
  background:#fff; border:1px solid var(--popup-border); border-radius:var(--popup-radius); box-shadow:var(--popup-shadow);}
.dh-more>div button{border:0; background:none; font:inherit; font-size:15px; text-align:left; padding:9px 12px;
  border-radius:6px; color:var(--ink); cursor:pointer;}
.dh-more>div button:hover{background:var(--primary-muted);}
/* 第一列五欄：正航單號、廠商單號、合計金額（未稅）、最後編輯、整單備註 */
.dh-five{display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:16px; padding:12px 20px 10px;}
.dh-f{display:block; min-width:0;}
.dh-f>span{display:block; margin:0 0 7px; padding-left:11px; font-size:12px; color:var(--ink2); font-weight:400;}
.dh-f .value,.dh-f input{display:block; box-sizing:border-box; width:100%; min-width:0; height:36px; min-height:36px;
  padding:6px 10px; font:inherit; font-size:16px; line-height:22px; border:1px solid transparent; border-radius:6px;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; background:transparent; color:var(--ink);}
.dh-f input{border-color:#ccd8d1; background:var(--card);}
.dh-f .value.quiet{color:var(--ink2);}
/* 編輯模式：只有「不可變」欄位灰底（合計、最後編輯），其餘照常白底 */
.dh-f .value.fixed{background:#edf1ef; border-color:var(--border);}
.dh-extra{border-top:0;}
.dh-extra>summary{cursor:pointer; list-style:none; padding:6px 20px 14px; font-size:12px; color:var(--ink2);}
.dh-extra>summary::-webkit-details-marker{display:none;}
.dh-extra[open]>summary{display:none;}
.dh-void{margin:0 20px 14px; padding:10px 14px; border-radius:6px; background:var(--alert-bg); color:var(--ink); font-size:14px;}
@media (max-width:1000px){ .dh-five{grid-template-columns:repeat(3,minmax(0,1fr));} }
@media (max-width:600px){ .dh-five{grid-template-columns:repeat(2,minmax(0,1fr));} .dh-title{padding:12px;} }

/* 明細卡：標題列＋右側垂直細線＋欄位設定鈕（功能第 7 批才接） */
.dh-items{padding:0; overflow:visible;}   /* 加入品項的建議框要能浮出卡片外 */
/* 拖 Excel 到整頁：全頁綠色虛線提示（匯入入口在麵包屑右側） */
#page.excel-drag-active{position:relative;}
#page.excel-drag-active::after{content:'放開就開始讀取 Excel'; position:fixed; inset:0; z-index:150;
  display:grid; place-items:center; border:3px dashed #7bac96; background:rgba(40,94,83,.86);
  color:#fff; font-size:24px; pointer-events:none;}
.dh-bar{display:flex; align-items:center; gap:12px; padding:14px 20px; border-bottom:1px solid var(--border);}
.dh-bar h2{font-size:17px; margin:0;}
.dh-chip{font-size:13px; color:var(--ink2); background:var(--muted); border-radius:5px; padding:2px 9px;}
.dh-bar .dh-sep{margin-left:auto; width:1px; height:26px; background:var(--border);}
.dh-tbl{border:0; border-radius:0; overflow:auto;}
.dh-tbl table{min-width:930px;}
.dh-tbl td{height:44px; padding:8px 14px; vertical-align:middle;}
.dh-tbl tbody tr.excluded{background:var(--zebra);}
.dh-tbl tbody tr.excluded .dh-name b{text-decoration:line-through; color:var(--ink2);}
.dh-exnote{display:block; color:var(--alert); font-size:13px;}
.dh-tbl .dh-act{width:44px; padding:6px 8px; text-align:center;}
.dh-tbl .dh-act button{min-width:32px; min-height:32px; padding:0; font-size:20px; line-height:1;
  border:0; background:none; color:var(--ink2); cursor:pointer; border-radius:5px;}
.dh-tbl .dh-act button:hover{background:var(--muted); color:var(--primary);}
.dh-tbl td input,.dh-tbl td select{font:inherit; font-size:15px; width:100%; min-width:0; height:32px; min-height:32px;
  padding:4px 8px; border:1px solid #ccd8d1; border-radius:5px; background:var(--card); color:var(--ink);}
.dh-tbl td input.n{text-align:right;}
.dh-psearch{position:relative; min-width:230px;}
.dh-pick{display:flex; gap:8px; align-items:baseline; flex-wrap:wrap;}
.dh-pick .code{font-family:Consolas,monospace; font-weight:700;}
.dh-add{display:flex; gap:10px; align-items:center; flex-wrap:wrap; padding:12px 20px; border-top:1px solid var(--border);}
.dh-add .dh-psearch{flex:1; max-width:420px;}
.dh-add .dh-psearch input{width:100%; font:inherit; font-size:15px; min-height:40px; padding:8px 12px;
  border:1px solid var(--border); border-radius:6px; background:var(--card); color:var(--ink);}
.dh-info{padding:12px 20px; color:var(--ink2); font-size:14px; background:var(--zebra); border-top:1px solid var(--border);}
.dh-msg{border-radius:6px; padding:10px 14px; margin:0 0 12px; font-size:15px; white-space:pre-wrap;}
.dh-msg.err{background:var(--alert-bg); border:1px solid var(--alert);}
.dh-msg.ok{background:var(--primary-muted); border:1px solid var(--primary);}

/* 更多資訊／異動紀錄唯讀抽屜（定稿 §7） */
.dh-trace{position:fixed; right:0; top:0; bottom:0; width:400px; max-width:100vw; z-index:120; overflow:auto;
  background:var(--card); border-left:1px solid var(--border); box-shadow:-8px 0 32px rgba(30,53,34,.1);}
.dh-trace>header{display:flex; align-items:center; justify-content:space-between; gap:12px;
  padding:18px 22px; border-bottom:1px solid var(--border); position:sticky; top:0; background:var(--card);}
.dh-trace h2{font-size:20px;}
.dh-trace .dh-trace-x{border:0; background:none; font-size:26px; line-height:1; padding:0 8px; min-width:40px; color:var(--ink2); cursor:pointer;}
.dh-trace .trace-body{padding:18px 22px;}
.dh-trace section{margin-bottom:24px;}
.dh-trace h3{font-size:15px; color:var(--primary); margin:0 0 10px;}
.dh-trace dl{border:1px solid var(--border); border-radius:7px; overflow:hidden; margin:0;}
.dh-trace .pair{display:grid; grid-template-columns:108px minmax(0,1fr); margin:0; border-bottom:1px solid var(--border);}
.dh-trace .pair:last-child{border-bottom:0;}
.dh-trace dt{padding:11px 10px; background:var(--zebra); font-size:14px; color:var(--ink2);}
.dh-trace dd{margin:0; padding:11px 10px; font-size:15px; min-width:0; overflow-wrap:anywhere;}

/* 列印：只印單頭與明細（定稿未做批次列印） */
@media print{
  .sidenav,.appbar,.ws-list,.ws-trigger,.ws-backdrop,.dh-trace,#arena-ball,
  .dh-title .btn,.dh-title .dh-icon,.dh-more,.dh-add,.dh-msg,.ib-msg{display:none !important;}
  .ws{display:block; height:auto; min-height:0;}
  .ws-doc{overflow:visible;}
  .content{padding:0; margin:0;}
  .dh,.dh-items{break-inside:avoid; box-shadow:none;}
  .dh-tbl{overflow:visible;} .dh-tbl table{min-width:0;}
}

/* ===== 出貨通知／出貨單工作頁專用（第二階段第 4 批，2026-09-14） ===== */
.dh-name small{display:block; color:var(--ink2); font-size:12px;}
.dh-sub{font-size:13px; font-weight:400; color:var(--ink2);}
.dh-sub2{font-size:13px; color:var(--ink2); background:var(--muted); border-radius:5px; padding:3px 9px;}
.dh-check{display:inline-flex; align-items:center; gap:6px; font-size:14px; white-space:nowrap; min-height:36px;}
/* 收貨對象欄：建議清單要浮在欄位下方，欄位本身是 .dh-f */
.dh-ship{position:relative;}
/* 庫存不足提示條：黃底、緊貼單頭下方，不改變明細卡寬度 */
.dh-warn{display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin:0 0 16px;
  padding:11px 16px; border-radius:8px; background:#fdf4e3; border:1px solid #e2c58a; color:var(--ink); font-size:14px;}
.dh-warn .btn{min-height:32px; font-size:14px; padding:0 10px;}
.dh-warn .note{color:var(--ink2); font-size:13px; flex-basis:100%;}
.dh-tbl tbody tr.short td{background:#fdf4e3;}
.dh-tbl tbody tr.short td:first-child{box-shadow:inset 4px 0 0 #c8912f;}
.r-lack{display:block; color:#95631b; font-size:12px;}

/* ===== 調撥單／調整單工作頁專用（第二階段第 6 批，2026-09-14） ===== */
/* 出倉後的路線卡：來源倉 ⇄ 目的倉＋在途／已到貨，放在單頭下方 */
/* 調整單：原因分組扁平表（原因 rowspan 合併、同組首行上方 2px 分隔線） */
.dh-flat table{min-width:1050px;}
.dh-flat td{vertical-align:top;}
.dh-flat .reason-cell{width:120px;}
.dh-flat .name-cell{min-width:260px; white-space:normal;}
.dh-flat .code-cell{min-width:150px;}
.dh-flat tbody tr.group-start:not(:first-child) td{border-top:2px solid var(--border);}
.dh-flat .more-cell{width:110px; white-space:normal;}
.dh-flat .more-cell summary{color:var(--primary); font-size:14px; padding:6px 0; cursor:pointer; white-space:nowrap;}
.dh-flat .more-content{min-width:210px; max-width:280px; display:grid; gap:8px; padding:10px; background:var(--zebra); border-radius:6px;}
.dh-flat .more-content label{display:grid; gap:4px; font-size:14px; color:var(--ink2);}
.dh-flat .more-content label span{color:var(--ink);}
.dh-flat .saved-note{display:block; max-width:180px; white-space:normal; font-size:13px; color:var(--ink2);}
.dh-flat .saved-note:empty{display:none;}

/* ===== 明細欄位設定（第二階段第 7 批，2026-09-14；pages/detail-columns.js） ===== */
.dc{position:relative; flex:none;}
.dc>summary{display:inline-flex; align-items:center; justify-content:center; list-style:none; cursor:pointer;
  min-width:40px; min-height:40px; padding:0 10px; border:1px solid var(--border); border-radius:6px;
  background:var(--card); color:var(--primary);}
.dc>summary::-webkit-details-marker{display:none;}
.dc>summary:hover{background:var(--muted);}
.dc>summary svg{width:19px; height:19px; stroke:currentColor; fill:none; stroke-width:1.6; stroke-linecap:round; stroke-linejoin:round;}
.dc-menu{position:absolute; right:0; top:calc(100% + 8px); width:185px; z-index:60; padding:8px; font-size:14px;
  max-height:65vh; overflow:auto; background:#fff; border:1px solid var(--popup-border);
  border-radius:var(--popup-radius); box-shadow:var(--popup-shadow);}
.dc-opt{display:flex; align-items:center; gap:4px; min-height:34px; border-radius:4px;}
.dc-opt:hover,.dc-opt.dc-over{background:var(--primary-muted);}
.dc-opt label{display:flex; align-items:center; gap:10px; flex:1; cursor:pointer; min-width:0;}
.dc-opt input{accent-color:var(--primary); width:15px; height:15px; margin:0;}
.dc-grip{padding:2px 5px; border:0; background:transparent; cursor:grab; font-size:18px; color:var(--ink2);}
.dc-reset{width:100%; margin-top:8px; padding:6px; font:inherit; font-size:13px; cursor:pointer;
  border:1px solid var(--border); border-radius:6px; background:var(--card); color:var(--ink);}
.dc-reset:hover{background:var(--muted);}
/* 明細表：欄寬由 colgroup 決定；預設至少填滿右邊界，超寬才橫捲 */
.dh-tbl table.dc-table{table-layout:fixed; min-width:100%;}
.dc-table th{position:relative; white-space:nowrap;}
.dc-table th,.dc-table td{overflow:hidden; text-overflow:ellipsis;}
.dc-table [hidden]{display:none !important;}
.dc-table :is(input,select){max-width:100%;}
/* 表頭分隔線：平時淡，hover／focus／拖動才加深 */
.dc-resize{position:absolute; right:0; top:0; bottom:0; width:8px; cursor:col-resize; touch-action:none; z-index:2;}
.dc-resize::after{content:''; position:absolute; right:3px; top:25%; height:50%; width:1px;
  background:var(--border); opacity:.55; transition:opacity .12s, background-color .12s;}
.dc-table th:hover .dc-resize::after{background:#9eafa5; opacity:1;}
.dc-resize:is(:hover,:focus-visible)::after,.dc-resize.dc-dragging::after{background:var(--primary); opacity:1; width:2px;}
.dc-resize:focus{outline:0;}
html.dc-resizing,html.dc-resizing *{cursor:col-resize !important; user-select:none !important;}
@media print{ .dc,.dc-resize{display:none !important;} }

/* ===== Excel 匯入核對頁（第二階段第 7 批，2026-09-14；inbound-import.js／notice-import.js） ===== */
.ir-top{display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:14px;}
.ir-top h1{font-size:20px; margin:0;}
.ir-spacer{flex:1; min-width:0;}
.ir-tools{display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:10px;}
.ir-tools>span:first-child{margin-right:auto; font-size:15px; color:var(--ink2);}
.ir-overview table{min-width:1040px;}
.ir-overview td{height:52px; padding:8px 14px; vertical-align:middle;}
.ir-overview tr.ir-file td{background:var(--zebra); color:var(--ink2); font-size:14px; height:auto; padding:7px 14px;}
.ir-overview tr.ir-row:hover td{background:#fafcfb;}
.ir-exp,.ir-no{border:0; background:none; font:inherit; cursor:pointer; padding:0; color:var(--primary);}
.ir-exp{font-size:22px; line-height:1; padding:0 6px; color:var(--ink2);}
.ir-state{white-space:normal; max-width:300px;}
.ir-state small{display:block; margin-top:4px; color:var(--ink2); font-size:13px; line-height:1.5;}
.ir-detail>td{padding:0 18px 18px 44px !important; background:#fafcfb;}
.ir-inline{border-left:2px solid #b8cfc5; padding-left:16px;}
.ir-inline .ii-ex{margin:10px 0; white-space:pre-wrap; font-size:14px;}
.ir-lines{margin:10px 0 4px; background:var(--card);}
.ir-lines table{min-width:900px; font-size:14px;}
.ir-lines td,.ir-lines th{padding:8px 12px; height:auto;}
.ir-lines tfoot td{background:var(--zebra); font-weight:600;}
.ir-chip{display:inline-block; white-space:nowrap; font-size:13px; border-radius:var(--r-chip); padding:2px 10px;
  background:var(--muted); color:var(--ink2);}
.ir-chip.ok{background:var(--primary-muted); color:var(--primary);}
.ir-chip.warn{background:#f7ecd7; color:#805b21;}
.ir-chip.bad{background:var(--alert-bg); color:var(--alert);}
.ir-chip.dup{background:var(--muted); color:var(--ink2);}
.ir-note{margin:12px 0 24px;}
@media (max-width:1000px){ .ir-detail>td{padding-left:14px !important;} }

/* ---------- 第二階段查核補修（2026-09-14 協調器） ---------- */
.pin-dialog{background:#fff;}                                   /* 定稿：便利貼視窗固定白底 */
@media (max-width:640px){ .project-edge-rail .project-notices button.notice-envelope{transform:none !important;} }  /* 窄版信封不再溢出右緣造成整頁橫捲 */
.ws-filters select,.ws-filters input{height:34px; min-height:34px;}   /* 抽屜篩選列 date 與 select 同高 */
.dh-tbl td:has(> input, > select){padding-top:6px; padding-bottom:6px;}   /* 編輯列與查看列同高 44px */
/* 窄螢幕（≤600px）布告欄：木盒欄不再吃掉 132px 右邊距，改成流式排在布告欄下方；
   物件代理鈕（JS 絕對定位）在這個寬度關掉，直接顯示原本的物件鈕 */
@media (max-width:600px){
  .project-board[data-edge]{margin:16px 0 0 !important; padding:20px 10px 16px !important; min-height:0;}
  .project-board[data-edge=right]>.project-edge-rail{position:static !important; left:auto !important; right:auto !important; top:auto !important; bottom:auto !important;
    width:auto !important; min-height:0 !important; height:auto !important; order:5; margin-top:12px; padding:8px 0 !important;
    flex-direction:row; flex-wrap:wrap; justify-content:center; gap:14px; border:0 !important; border-image:none !important; background:none !important; box-shadow:none !important;}
  .project-edge-rail>*{display:flex !important;}
  .project-board .object-layout-locked{display:none !important;}
}


/* ---------- 球閥小物（2026-09-14 使用者定案，去背圖 assets/valve/valve-plush.webp） ---------- */
/* 首頁：佔「進行中」欄第一格的訓練所入口；寬＝欄寬 72%、逆時針 7°，隨欄寬縮放 */
.arena-valve{display:block; position:relative; width:72%; margin:0 auto 18px; padding:0; border:0; background:none; cursor:pointer; transform:rotate(-7deg); filter:drop-shadow(3px 6px 6px #3a2a1a55);}
.arena-valve img{display:block; width:100%; height:auto; pointer-events:none;}
.arena-valve:hover{filter:drop-shadow(4px 8px 8px #3a2a1a66) brightness(1.04);}
.arena-valve:focus-visible{outline:3px solid #47654a; outline-offset:6px; border-radius:12px;}
.arena-valve .ab-badge{position:absolute; top:-8px; right:-8px; min-width:25px; height:25px; font-size:.98rem;}   /* 比側欄紅點大 25%（2026-09-14） */
/* 側欄：「其他 › AI訓練所」的圖示＝小球閥，30px 寬、順時針 2°（使用者定位值） */
.sidenav a .ico:has(.arena-ico){width:30px; height:auto;}
.sidenav a .arena-ico{display:block; width:30px; height:auto; transform:rotate(2deg); filter:drop-shadow(1px 2px 2px #3a2a1a44);}

/* 問題回報（2026-09-14）：右下懸浮鈕＋對話框 */
/* 入口在側欄底部、使用者列上方（2026-09-14）：長得像側欄項，收闔時只剩圖示 */
.report-fab{display:flex; align-items:center; gap:12px; width:100%; min-height:44px; padding:0 12px; margin:0 0 6px; border:0; border-radius:9px; background:none; color:var(--ink); font:inherit; font-size:16px; white-space:nowrap; cursor:pointer; text-align:left;}
.report-fab svg{flex:none; width:22px; height:22px; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linejoin:round; stroke-linecap:round;}
.report-fab:hover{background:var(--muted);}
html.nav-collapsed .report-fab{justify-content:center; padding:0;}
html.nav-collapsed .report-fab span{display:none;}
html.taskbare .report-fab{display:none;}
.report-dlg{width:520px;}
.report-form{display:grid; gap:14px;}
.report-form h3{margin:0; font-size:17px;}
.report-form label{display:grid; gap:6px; font-size:14px; color:var(--ink2);}
.report-form textarea{font:inherit; font-size:15px; color:var(--ink); border:1px solid var(--border); border-radius:8px; padding:10px 12px; resize:vertical;}
.report-shot{display:grid; gap:8px;}
.report-thumb{position:relative; justify-self:start; max-width:100%;}
.report-thumb-open{border:1px solid var(--border); border-radius:8px; padding:0; background:none; cursor:zoom-in; display:block; overflow:hidden;}
.report-thumb-open img{display:block; max-width:100%; max-height:240px; object-fit:contain;}
.report-thumb-x{position:absolute; top:-10px; right:-10px; width:26px; height:26px; border-radius:50%; border:2px solid #fff; background:#e5322d; color:#fff; cursor:pointer; box-shadow:0 1px 4px rgba(0,0,0,.25); display:grid; place-items:center; padding:0;}
.report-thumb-x svg{width:14px; height:14px; fill:none; stroke:currentColor; stroke-width:2.6; stroke-linecap:round;}
.report-thumb-x:hover{background:#c8241f;}
.report-shot-btns{display:flex; gap:8px; flex-wrap:wrap;}
.report-shot-btns .btn{font-size:16px; min-height:40px;}
.report-shot-btns label.btn{display:inline-flex; cursor:pointer;}
.report-ed{max-width:none; padding:12px; width:fit-content;}
.report-ed::backdrop{background:#1f2f27b3;}   /* 標註時底下畫面壓暗，免得跟截圖顏色相近互相干擾 */
.report-ed-bar{display:flex; justify-content:center; align-items:center; gap:10px; margin:-12px -12px 10px; padding:8px 12px; background:var(--muted); border-bottom:1px solid var(--border); border-radius:var(--popup-radius) var(--popup-radius) 0 0; flex-wrap:wrap;}   /* 整條底色，與圖區隔 */
.report-ed-tip{color:#e5322d; font-size:16px; font-weight:600;}
.report-ed-bar .btn{font-size:16px; min-height:40px;}
.report-ed-tools{display:flex; gap:4px;}
.report-ed-tools .btn{padding:0 12px;}
.report-ed-tools .btn.on{background:var(--primary-muted); border-color:var(--primary); color:var(--primary);}
.report-ed-tools svg{width:20px; height:20px; fill:none; stroke:currentColor; stroke-width:2; stroke-linecap:round; stroke-linejoin:round;}
.report-ed-stage{position:relative;}
.report-note{position:absolute; z-index:2; display:flex; gap:4px; align-items:center; padding:5px; background:#fff; border:1px solid var(--popup-border); border-radius:8px; box-shadow:var(--popup-shadow);}
.report-note input{font:inherit; font-size:14px; width:180px; border:1px solid var(--border); border-radius:6px; padding:5px 8px; outline:none;}
.report-note input:focus{border-color:#9ab9a8;}
.report-note button{width:30px; height:30px; border-radius:6px; border:0; cursor:pointer; display:grid; place-items:center; padding:0;}
.report-note button svg{width:20px; height:20px; fill:none; stroke:currentColor; stroke-width:2; stroke-linecap:round; stroke-linejoin:round;}
.report-note-x{background:#fbe9e7; color:#c8241f;}
.report-note-ok{background:var(--primary); color:#fff;}
html.report-capturing, html.report-capturing *{cursor:none !important;}   /* 擷取畫面時藏游標：Chrome 不理 cursor:'never' 的備案（回報 #2） */
.report-ed canvas{display:block; cursor:crosshair; touch-action:none; max-width:100%;}
.report-actions{display:flex; justify-content:flex-end; gap:8px;}

/* 換單過場：舊單留著變淡（doc-workspace loading()） */
.ws-doc.ws-doc-loading{opacity:.55; pointer-events:none; transition:opacity .15s;}
