.language-switcher{position:relative}
.language-icon svg{display:block;width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
[data-service-panel][hidden],.auto-reply-detail[hidden]{display:none!important}
.moderation-workspace,.broadcast-workspace{border:1px solid #2b394e;border-radius:20px;background:linear-gradient(145deg,#101925,#0b121d);padding:22px;box-shadow:0 18px 55px #02050b38}
.moderation-head{display:flex;align-items:flex-start;justify-content:space-between;gap:24px}
.moderation-head h2,.broadcast-workspace h2{margin:0;font-family:Georgia,"Noto Serif TC",serif;font-size:25px}
.moderation-head p:not(.eyebrow),.broadcast-workspace>div>p:not(.eyebrow){max-width:720px;color:var(--muted);line-height:1.65}
.protection-live{white-space:nowrap;border:1px solid #3f685e;border-radius:999px;background:#142a27;color:#91d9c5;padding:8px 11px;font-size:12px}
.moderation-rules{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:18px 0}
.moderation-rules label{display:flex;align-items:center;justify-content:space-between;gap:14px;border:1px solid #2c3b50;border-radius:14px;background:#111b29;padding:14px}
.moderation-rules strong,.moderation-rules small{display:block}
.moderation-rules small{margin-top:5px;color:var(--muted);line-height:1.45}
.moderation-rules input{accent-color:#65bea3}
.moderation-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:16px}
.moderation-summary article{border:1px solid #28364a;border-radius:13px;background:#0c141f;padding:14px}
.moderation-summary span,.moderation-summary small{display:block;color:var(--muted)}
.moderation-summary strong{display:block;margin:7px 0;font-size:24px}
.comment-queue{display:grid;gap:10px}
.comment-card{border:1px solid #2b394d;border-radius:15px;background:#111a27;padding:15px}
.comment-card.hidden-comment{border-left:3px solid #b86a65}
.comment-card.customer-question{border-left:3px solid #55ad91}
.comment-card.review-comment{border-left:3px solid #c8a45b}
.comment-source{display:grid;grid-template-columns:38px 1fr auto;gap:10px;align-items:center}
.comment-source>span{display:grid;place-items:center;width:38px;height:38px;border-radius:11px;background:#283955;color:#bfd2f2;font-weight:900}
.comment-source strong,.comment-source small{display:block}
.comment-source small{margin-top:3px;color:var(--muted)}
.comment-source em{border-radius:999px;background:#3a2327;color:#eea6a0;padding:5px 8px;font-style:normal;font-size:11px}
.comment-source em.safe{background:#16332d;color:#88d4bd}
.comment-source em.malicious{background:#40282b;color:#f0aaa1}
.comment-source em.reviewing{background:#342e20;color:#e1c582}
.comment-card>p{margin:13px 0;color:#e6dfd1}
.comment-decision{display:flex;justify-content:space-between;align-items:center;gap:12px;border-top:1px solid #263449;padding-top:11px;color:var(--muted);font-size:12px}
.comment-decision button,.broadcast-cards button{border:1px solid #465670;border-radius:9px;background:#172337;color:#dce6f5;padding:8px 10px}
.decision-buttons{display:flex;gap:7px}
.comment-translation,.auto-reply-detail{display:flex;gap:10px;border-radius:10px;background:#13231f;padding:10px 12px;margin:10px 0}
.comment-translation span,.auto-reply-detail span{color:#79bea9;font-size:11px;white-space:nowrap}
.auto-reply-detail{display:block;border:1px solid #2d5148}
.auto-reply-detail p{margin:6px 0 0;color:#dceae4;line-height:1.6}
.moderation-done{color:#8ed5bd}
.broadcast-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:18px}
.broadcast-cards article{display:grid;gap:10px;border:1px solid #2b394d;border-radius:15px;background:#111a27;padding:17px}
.broadcast-cards span{color:var(--muted)}
.more-dialog{width:min(620px,calc(100% - 28px));max-width:620px;max-height:min(84vh,780px);overflow:auto}
.more-intro{margin:4px 0 18px!important;font-size:13px}
.more-group{padding:15px 0;border-top:1px solid #2a3749}
.more-group:first-of-type{border-top:0;padding-top:0}
.more-group h3{margin:0 0 10px;color:#d8c68f;font-size:12px;letter-spacing:.1em}
.more-group .more-grid{margin-top:0}
.more-grid button{align-content:start;min-height:92px}
.more-grid button small{display:block;color:var(--muted);font-size:11px;font-weight:500;line-height:1.45}
.keyword-source-panel{display:grid;grid-template-columns:minmax(220px,.8fr) minmax(300px,1.2fr) minmax(230px,.8fr);gap:16px;align-items:end;margin:0 0 16px;padding:18px 20px;border:1px solid #34445b;border-radius:17px;background:linear-gradient(135deg,#111b29,#0c1420)}
.keyword-source-panel h2{margin:0;font-size:20px}
.keyword-source-panel p:not(.eyebrow){margin:6px 0 0;color:var(--muted);font-size:12px;line-height:1.55}
.keyword-source-panel label{display:grid;gap:7px;color:var(--muted);font-size:11px}
.keyword-source-panel select{width:100%;min-height:46px;border:1px solid #4c5d76;border-radius:11px;background:#090f19;color:var(--text);padding:0 13px;font-weight:750}
.keyword-source-panel option{background:#111824;color:var(--text)}
.keyword-source-status{display:grid;gap:5px;border-left:3px solid #58aa91;border-radius:0 10px 10px 0;background:#12221f;padding:11px 13px}
.keyword-source-status span,.selected-keyword span{color:var(--muted);font-size:10px;letter-spacing:.08em}
.keyword-source-status strong{font-size:12px;line-height:1.55;color:#9bd5c2}
.selected-keyword{display:grid;gap:4px;margin:0 0 10px;padding:10px 12px;border-radius:10px;background:#141f2e}
.selected-keyword strong{font-size:13px;color:#e8ddbd;line-height:1.45}
@media(max-width:720px){.moderation-workspace,.broadcast-workspace{padding:16px}.moderation-head{display:block}.protection-live{display:inline-block;margin-top:6px}.moderation-rules,.moderation-summary,.broadcast-cards{grid-template-columns:1fr}.comment-source{grid-template-columns:38px 1fr}.comment-source em{grid-column:2;width:max-content}.comment-decision{align-items:flex-start;flex-direction:column}.decision-buttons{width:100%}.decision-buttons button{flex:1}}
@media(max-width:720px){.keyword-source-panel{grid-template-columns:1fr;padding:16px}.keyword-source-status{border-left-width:2px}.keyword-source-panel select{font-size:14px}.more-dialog{max-height:88vh}}
/* ---- live mode: auth panel / tenant chip / banners (auth.js + live.js) ---- */
.auth-overlay{position:fixed;inset:0;z-index:60;display:grid;place-items:center;padding:20px;background:radial-gradient(circle at 80% 0%,#1b2922 0,transparent 40%),#090d16f2;backdrop-filter:blur(9px)}
.auth-panel{width:min(420px,100%);border:1px solid var(--line);border-radius:var(--radius);background:linear-gradient(145deg,var(--surface),#101713);padding:30px 28px;box-shadow:0 30px 100px #0009}
.auth-panel h2{margin:4px 0 8px;font-size:24px;letter-spacing:-.02em}
.auth-panel h3{margin:4px 0 12px;font-size:19px}
.auth-copy{margin:0 0 18px;color:var(--muted);font-size:13px;line-height:1.6}
.auth-panel form,.auth-panel #authTenantStep{display:grid;gap:13px}
.auth-panel label{display:grid;gap:7px;color:var(--muted);font-size:12px}
.auth-panel input,.auth-panel select{border:1px solid #3b4d44;border-radius:12px;background:#0e1613;color:var(--text);padding:13px 14px;width:100%}
.auth-panel input:focus,.auth-panel select:focus{outline:none;border-color:var(--gold)}
.auth-submit{width:100%;padding:13px;font-weight:800}
.auth-error{margin:0;border-left:3px solid var(--danger);border-radius:0 10px 10px 0;background:#2b1a19;color:var(--danger);padding:10px 12px;font-size:12px;line-height:1.5}
.auth-loading{margin:6px 0 0;color:var(--muted);font-size:13px}
.tenant-chip{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:11px;background:var(--surface-2);padding:6px 12px;font-size:12px}
.tenant-chip small{color:var(--muted);white-space:nowrap}
.tenant-chip strong{color:var(--gold);white-space:nowrap;max-width:180px;overflow:hidden;text-overflow:ellipsis}
.tenant-chip select{border:0;background:transparent;color:var(--gold);font-weight:800;max-width:190px}
.tenant-chip select:focus{outline:none}
.tenant-chip option{background:#111824;color:var(--text)}
.live-banner{margin:0 0 16px;border:1px solid #4b4630;border-left:3px solid var(--gold);border-radius:0 12px 12px 0;background:#241f12;color:#e8ddbd;padding:12px 15px;font-size:13px;line-height:1.6}
.demo-host{position:relative}
.demo-flag{position:absolute;top:10px;right:12px;z-index:5;border:1px solid #4b4630;border-radius:20px;background:#241f12;color:var(--gold);padding:3px 10px;font-size:11px;letter-spacing:.06em;pointer-events:none}
.live-toast{position:fixed;left:50%;bottom:26px;z-index:70;transform:translate(-50%,16px);opacity:0;border:1px solid var(--line);border-radius:12px;background:#121b17f0;color:var(--text);padding:12px 18px;font-size:13px;box-shadow:0 18px 50px #0008;transition:.25s;pointer-events:none;max-width:min(520px,calc(100vw - 32px))}
.live-toast.show{opacity:1;transform:translate(-50%,0)}
.export-btn.coming-soon{opacity:.55;cursor:default}
@media(max-width:720px){.tenant-chip{display:none}.auth-panel{padding:24px 20px}}
/* ---- AI 生圖：貼文預覽視覺換成真實圖片（live.js studio） ---- */
.post-visual.has-image{padding:0;background:#0c1310;overflow:hidden;border-radius:inherit}
.post-visual.has-image img{display:block;width:100%;height:100%;min-height:250px;object-fit:cover;border-radius:inherit}
@media(max-width:720px){.post-visual.has-image img{min-height:210px}}
/* ---- live mode v2：誠實空狀態、即將推出、真實用量與排程（live.js） ---- */
.live-empty{display:grid;gap:6px;justify-items:center;border:1px dashed #3a4a5f;border-radius:14px;background:#0e1622;padding:22px 18px;text-align:center}
.live-empty strong{color:#d8c68f;font-size:14px}
.live-empty p{margin:0;color:var(--muted);font-size:12.5px;line-height:1.6}
button.coming-soon{opacity:.5;cursor:not-allowed}
.conn-status{font-size:11px;border:1px solid #2b394d;border-radius:20px;padding:3px 10px;color:var(--muted);white-space:nowrap}
.conn-status.connected{color:#8ed5bd;border-color:#2d5148}
.conn-status.pending,.conn-status.error{color:#d8c68f;border-color:#4b4630}
.conn-status.revoked,.conn-status.disconnected{color:var(--muted)}
.usage-line{display:grid;grid-template-columns:88px 1fr auto;gap:10px;align-items:center;margin:8px 0;font-size:12px}
.usage-line span{color:var(--muted)}
.usage-line i{display:block;height:8px;border-radius:6px;background:#1c2634;overflow:hidden}
.usage-line em{display:block;height:100%;border-radius:6px;background:linear-gradient(90deg,#58aa91,#d8c68f)}
.usage-line b{color:var(--muted);font-weight:650;white-space:nowrap}
/* 無上限：不畫進度條，中間那格改成一句白話。 */
.usage-line small.usage-unlimited{color:#8aa79a;font-size:11px}
/* styles.css 有一條 dialog{max-width:520px}，它會蓋過這裡宣告的 width。
   設定中心宣告 980px、文件視窗宣告 680px，實際上一直都只有 520px 寬。
   兩邊都補上 max-width 才會真的照設計的寬度顯示。 */
.live-doc-dialog{width:min(680px,calc(100% - 28px));max-width:min(680px,calc(100% - 28px))}
.settings-dialog{max-width:min(980px,calc(100% - 32px))}
@media(max-width:720px){.settings-dialog{max-width:100%}}
.live-doc-dialog pre{max-height:52vh;overflow:auto;white-space:pre-wrap;word-break:break-word;background:#0c141f;border:1px solid #2a3749;border-radius:12px;padding:14px;font-size:13px;line-height:1.7;color:var(--text)}
.live-sched-dialog{width:min(420px,calc(100% - 28px))}
.live-sched-dialog form{display:grid;gap:13px}
.live-sched-dialog h2{margin:0 0 4px}
.live-sched-dialog label{display:grid;gap:6px;font-size:12px;color:var(--muted)}
.live-sched-dialog input{border:1px solid #3b4d5f;border-radius:10px;background:#0e1613;color:var(--text);padding:11px 12px}
.live-sched-dialog input:focus{outline:none;border-color:var(--gold)}
.sched-actions{display:flex;gap:10px;justify-content:flex-end}
.task-footer > span{display:flex;gap:7px}
/* ---- 簡易版模式：只留六大功能、放大字級（modeToggle） ---- */
body.simple-mode{zoom:1.08}
body.simple-mode .primary-nav .nav-item:not(.simple-keep){display:none}
body.simple-mode .team-status{display:none}
body.simple-mode .primary-nav .nav-item{font-size:16px;padding:14px 15px}
body.simple-mode .view{font-size:15px}
body.simple-mode .owner-actions button strong{font-size:17px}
@media(max-width:720px){body.simple-mode{zoom:1}}

/* ---- studio 社群產製升級：目標範例 chips／平台 tabs／形式小字 ---- */
.goal-examples{display:flex;flex-wrap:wrap;gap:7px;align-items:center;margin:-4px 0 4px}
.goal-examples > span{font-size:11px;color:var(--muted);letter-spacing:.08em;margin-right:2px}
.goal-example-chip{border:1px solid var(--line);background:transparent;color:var(--muted);border-radius:20px;padding:6px 11px;font-size:12px;white-space:nowrap}
.goal-example-chip:hover{background:var(--surface-2);color:var(--text);border-color:var(--gold)}
.preview-toolbar #previewPlatformTabs{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.platform-tab{border:1px solid var(--line);background:transparent;color:var(--muted);border-radius:9px;padding:6px 11px;font-size:12px}
.platform-tab:hover{color:var(--text);background:var(--surface-2)}
.platform-tab.active{background:var(--gold);border-color:var(--gold);color:#13140f;font-weight:800}
.preview-format-note{margin:10px 2px 0;font-size:12px;color:var(--muted)}
.preview-format-note:before{content:"◦ ";color:var(--gold)}

/* ---- in-app prompt/confirm dialog（取代原生 window.prompt/confirm） ---- */
.live-prompt-dialog textarea{border:1px solid #3b4d5f;border-radius:10px;background:#0e1613;color:var(--text);padding:11px 12px;font:inherit;font-size:13px;line-height:1.6;resize:vertical;min-height:72px;width:100%}
.live-prompt-dialog textarea:focus{outline:none;border-color:var(--gold)}
.live-prompt-dialog h2{font-size:17px}
.live-confirm-copy{margin:0;color:var(--muted);font-size:13px;line-height:1.7}

/* ---- Markdown-lite 渲染（產出 dialog、決策區、AI 建議回覆） ---- */
.live-doc-md{max-height:52vh;overflow:auto;background:#0c141f;border:1px solid #2a3749;border-radius:12px;padding:14px 16px;font-size:13px;line-height:1.75;color:var(--text)}
.live-doc-md h3,.live-doc-md h4,.live-doc-md h5,.live-doc-md h6{margin:14px 0 6px;color:#d8c68f;font-size:14px}
.live-doc-md h3:first-child,.live-doc-md h4:first-child,.live-doc-md p:first-child{margin-top:0}
.live-doc-md p{margin:8px 0}
.live-doc-md ul{margin:8px 0;padding-left:20px}
.live-doc-md li{margin:4px 0}
.live-doc-md hr{border:0;border-top:1px solid #2a3749;margin:12px 0}
.live-doc-md code{background:#1c2634;border-radius:5px;padding:1px 5px;font-size:12px}
.live-doc-md strong{color:#e8ddbd}
#adsView .decision-panel p h3,#adsView .decision-panel p h4,#adsView .decision-panel p h5{margin:10px 0 4px;color:#d8c68f;font-size:13.5px}
#adsView .decision-panel p ul{margin:6px 0;padding-left:18px}
#adsView .decision-panel p hr,.ai-reply p hr{border:0;border-top:1px solid #2a3749;margin:8px 0}
.ai-reply p h3,.ai-reply p h4,.ai-reply p h5{margin:8px 0 4px;font-size:13px;color:#d8c68f}
.ai-reply p ul{margin:6px 0;padding-left:18px}
.ai-reply p p{margin:6px 0}

/* ---- V2.2 小白化 UX：說明列、金色 CTA、待安排卡、修改內容 ---- */
.view-hint{margin:0 0 14px;padding:10px 14px;border:1px solid var(--line);border-left:3px solid var(--gold);border-radius:10px;background:var(--surface);color:var(--muted);font-size:13px;line-height:1.65}
.command-hint{display:block;margin-top:8px;color:var(--muted);font-size:12px}
.builder-hint{display:block;margin-top:8px;color:var(--muted);font-size:12px;line-height:1.6}

/* 金色主 CTA：「安排發布時間 →」 */
.gold-cta{background:linear-gradient(135deg,var(--gold),#b8944f)!important;color:#161207!important;font-weight:800;border:0;box-shadow:0 4px 18px rgba(214,182,111,.28)}
.gold-cta:hover{filter:brightness(1.06)}
.gold-cta:disabled{opacity:.55;box-shadow:none}

/* 貼文卡右上角「✎ 修改」 */
.post-edit-btn{border:1px solid var(--line);background:var(--surface-2);color:var(--text);border-radius:8px;padding:4px 10px;font-size:12px;margin-right:6px}
.post-edit-btn:hover{border-color:var(--gold);color:var(--gold)}

/* 文案直接編輯框 */
.live-post-edit{display:grid;gap:8px;margin:6px 0}
.live-post-edit textarea{width:100%;background:#10171f;border:1px solid var(--line);border-radius:10px;color:var(--text);padding:10px 12px;font-size:13.5px;line-height:1.7;resize:vertical}
.live-post-edit textarea:focus{outline:none;border-color:var(--gold)}
.live-post-edit .edit-actions{display:flex;gap:8px;justify-content:flex-end}

/* 「告訴 APOLLO 想怎麼改」引導框 */
.revise-guide{margin-top:12px;padding:14px;border:1px dashed var(--gold);border-radius:12px;background:rgba(214,182,111,.06);display:grid;gap:10px}
.revise-guide p{margin:0;font-size:13px;line-height:1.65;color:var(--text)}
.revise-guide textarea{width:100%;background:#10171f;border:1px solid var(--line);border-radius:10px;color:var(--text);padding:10px 12px;font-size:13.5px;line-height:1.6;resize:vertical;box-sizing:border-box}
.revise-guide textarea:focus{outline:none;border-color:var(--gold)}

/* 排程頁「待安排發布」卡 */
#schedulePending{display:block;margin-bottom:16px}
#schedulePending .pending-panel{display:grid;gap:12px}
.pending-card{display:grid;grid-template-columns:64px 1fr auto;gap:14px;align-items:center;padding:14px;border:1px solid var(--line);border-radius:14px;background:var(--surface-2)}
.pending-thumb{width:64px;height:64px;border-radius:12px;object-fit:cover;display:grid;place-items:center}
.pending-thumb.placeholder{background:linear-gradient(145deg,var(--gold),#705b2f);color:#0d120f;font-weight:900;font-size:22px}
.pending-info{min-width:0}
.pending-info strong{display:block;font-size:14.5px;margin-bottom:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pending-info small{color:var(--muted);font-size:12px}
.pending-info p{margin:4px 0 0;color:var(--muted);font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pending-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.pending-actions .primary-btn{padding:10px 16px;font-size:13.5px}
@media (max-width:760px){.pending-card{grid-template-columns:48px 1fr}.pending-actions{grid-column:1/-1;justify-content:stretch}.pending-actions button{flex:1}}

/* ---- APOLLO V2 整批產出：進度 dialog、行銷計畫卡、內容檢視 ---- */
.live-progress-dialog{width:min(560px,calc(100% - 28px))}
.cp-goal{margin:4px 0 10px;color:var(--muted);font-size:13px;line-height:1.6}
.cp-progress{height:8px;border-radius:99px;background:#1c2634;overflow:hidden;margin:4px 0 6px}
.cp-progress i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--gold),#b8944f);transition:width .5s}
.cp-progress-text{margin:0 0 10px;font-size:13px;color:var(--gold);font-weight:700}
.cp-plan-list{margin:0 0 12px;padding:0;list-style:none;display:grid;gap:6px;max-height:38vh;overflow:auto}
.cp-plan-list li{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 12px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2)}
.cp-plan-list li span{min-width:0}
.cp-plan-list li strong{display:block;font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cp-plan-list li small{color:var(--muted);font-size:11.5px}
.cp-plan-list li b{flex:none;font-size:12px;color:var(--gold)}
.cp-note{margin:0 0 12px;padding:9px 12px;border:1px dashed var(--line);border-radius:10px;color:var(--muted);font-size:12.5px;line-height:1.6}

/* 行銷計畫卡：主按鈕＋次要動作 */
.campaign-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}
.campaign-actions .primary-btn{padding:9px 14px;font-size:13px}
.campaign-actions .quiet-btn{padding:9px 13px;font-size:12.5px;white-space:nowrap}
/* 計畫卡的第三欄放的是真的按鈕（查看內容／查看作戰計畫／暫停），不是一個
   100px 寬的狀態字。styles.css 在 ≤1000px 會把第三欄整個拿掉，按鈕就會掉到
   第二列去；這裡把它拿回來，並在窄畫面讓動作列自己佔滿一整行。 */
.campaign-panel .campaign-row{grid-template-columns:minmax(0,1fr) minmax(0,200px) auto;gap:16px}
@media(max-width:900px){
  .campaign-panel .campaign-row{grid-template-columns:minmax(0,1fr) auto}
  .campaign-panel .campaign-actions{grid-column:1/-1;justify-content:flex-start}
}
@media(max-width:720px){
  .campaign-panel .campaign-row{grid-template-columns:1fr}
  .campaign-panel .campaign-actions{justify-content:stretch}
  .campaign-panel .campaign-actions>button{flex:1 1 auto;min-height:44px}
}

/* 整批內容檢視 dialog
   跟 .more-dialog 一樣：捲動由 dialog 自己負責（max-height + overflow:auto），
   裡面的作戰計畫與內容清單都不再各自開一個小捲動視窗——不然桌機上會變成
   「框裡的框在捲」，而且捲到底了還看不完一份計畫。 */
/* 桌機寬度：一份會算帳的作戰計畫裡有財務表、通路卡、含話術的待辦清單和檢核
   點時間軸，520px 放不下——而 styles.css 的 `dialog{max-width:520px}` 正是把它
   壓成一條窄柱、讓「COR 旗艦版(首年總價)年繳」變成一個字一行的原因（.live-cc-
   dialog 以前只設 width、沒設 max-width，所以那條 520px 一直贏）。這裡兩個都
   設，桌機才真的拿得到寬度。手機（≤720px）仍然整頁全螢幕，見下方。 */
.live-cc-dialog{width:min(1180px,calc(100vw - 48px));max-width:min(1180px,calc(100vw - 48px));max-height:min(90vh,1000px);overflow:auto}
.cc-top-actions{display:flex;gap:10px;flex-wrap:wrap;margin:10px 0 14px}
.cc-top-actions .primary-btn{padding:11px 18px;font-size:14px}
.cc-cards{display:grid;gap:12px;padding-right:4px}
.cc-card{display:grid;grid-template-columns:96px 1fr;gap:14px;align-items:start;padding:14px;border:1px solid var(--line);border-radius:14px;background:var(--surface-2)}
.cc-visual{width:96px;height:96px;border-radius:12px;object-fit:cover;display:grid;place-items:center}
.cc-visual.placeholder{background:linear-gradient(145deg,var(--gold),#705b2f);color:#0d120f;font-weight:900;font-size:20px}
/* 圖片補製中（文字先行）：小 spinner＋「圖片產製中…」 */
.cc-visual.cc-image-pending{background:var(--surface);border:1px dashed var(--line);color:var(--muted);font-weight:600;font-size:11px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;text-align:center}
.cc-visual.cc-image-pending .cp-spinner{width:16px;height:16px}
/* 圖片產生失敗：明確狀態，不是破圖也不是空位（虛線紅框＋「請重新產出」） */
.cc-visual.cc-image-failed{background:var(--surface);border:1px dashed var(--danger,#e08a8a);color:var(--muted);font-weight:700;font-size:11px;line-height:1.35;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;text-align:center;padding:6px}
.cc-visual.cc-image-failed small{font-weight:500;font-size:10px;color:var(--muted)}
/* 排程卡縮圖的產製中／失敗狀態（縮圖太小，文字靠 aria-label／title） */
.pending-thumb.pending-image-pending{background:var(--surface);border:1px dashed var(--line);color:var(--muted)}
.pending-thumb.pending-image-pending .cp-spinner{width:16px;height:16px}
.pending-thumb.pending-image-failed{background:var(--surface);border:1px dashed var(--danger,#e08a8a);color:var(--danger,#e08a8a);font-size:20px;font-weight:900}
.cc-main{min-width:0;display:grid;gap:8px}
.cc-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.cc-head strong{font-size:14.5px}
.cc-head small{color:var(--muted);font-size:12px}
.cc-tabs{display:flex;gap:6px;flex-wrap:wrap}
.cc-copy{margin:0;font-size:13px;line-height:1.7;color:var(--text);white-space:pre-wrap;word-break:break-word;max-height:180px;overflow:auto}
.cc-copy.muted{color:var(--muted)}
.cc-copy.cc-error{color:#e08a8a}
/* 待人工審核（claim guard）：橘色警示條，列出被標記的敘述與怎麼處理 */
.cc-review-banner{margin:8px 0;padding:10px 12px;border:1px solid var(--danger,#e08a8a);border-radius:10px;background:rgba(224,138,138,.08);font-size:12.5px;line-height:1.55}
.cc-review-banner strong{display:block;color:var(--danger,#e08a8a);font-size:12.5px;margin-bottom:4px}
.cc-review-banner ul{margin:4px 0 6px;padding-left:18px}
.cc-review-banner li{margin:2px 0}
.cc-review-banner li small{display:block;color:var(--muted);font-weight:400}
.cc-review-banner>small{color:var(--muted)}
.pending-card.is-review{border-color:var(--danger,#e08a8a)}
.pending-review-note{font-size:12px;color:var(--danger,#e08a8a);align-self:center;margin-right:6px}
.cc-actions{display:flex;gap:8px;flex-wrap:wrap}
.cc-actions button{font-size:12.5px}
@media (max-width:680px){.cc-card{grid-template-columns:64px 1fr}.cc-visual{width:64px;height:64px}}

/* ---- ATHENA 混合計畫（貼文＋SEO文章＋廣告文案＋銷售頁） ---- */
.cp-strategy{margin:-4px 0 12px;padding:9px 12px;border-left:3px solid var(--gold);border-radius:0 10px 10px 0;background:var(--surface-2);color:var(--text);font-size:12.5px;line-height:1.7}
.cp-kind{display:inline-block;margin-right:6px;padding:1px 7px;border-radius:99px;border:1px solid var(--line);background:var(--surface);color:var(--gold);font-size:11px;font-style:normal;font-weight:700;vertical-align:1px}
.cp-plan-list li .cp-rationale{display:block;color:var(--muted);font-size:11px;line-height:1.5;white-space:normal}
.cc-group-title{margin:8px 0 0;font-size:13.5px;color:var(--gold);letter-spacing:.02em}
.cc-group-title:first-child{margin-top:0}
.cc-rationale{margin:0;color:var(--muted);font-size:12px;line-height:1.6}
.cc-doc-preview{display:block;max-height:200px;overflow:auto;white-space:normal}
.cc-doc-preview h3,.cc-doc-preview h4,.cc-doc-preview h5{margin:8px 0 4px;font-size:13.5px}
.cc-doc-preview p,.cc-doc-preview li{margin:0 0 6px;font-size:13px;line-height:1.7}
.cc-kind-note{margin:0;padding:7px 10px;border:1px dashed var(--line);border-radius:8px;color:var(--muted);font-size:12px;line-height:1.6}

/* ---- V2 產製等待體驗：大字百分比、流動進度條、輪播訊息、完成慶祝 ---- */
.cp-percent[hidden]{display:none}
.cp-percent{margin:10px 0 2px;font-size:34px;font-weight:900;letter-spacing:-.02em;color:var(--text);font-variant-numeric:tabular-nums;line-height:1.1}
.cp-done .cp-percent{color:var(--green);font-size:26px}
/* 進度條：平滑寬度動畫＋製作中流動光效（完成後停下並轉綠） */
.cp-progress i{background:linear-gradient(90deg,var(--gold),#efe0b4,var(--gold),#b8944f);background-size:200% 100%;animation:cpFlow 2.4s linear infinite;transition:width .8s cubic-bezier(.4,0,.2,1)}
.cp-done .cp-progress i{animation:none;background:var(--green)}
@keyframes cpFlow{from{background-position:0 0}to{background-position:-200% 0}}
/* 規劃中＝不確定進度。這段時間一篇內容都還沒有，任何百分比都是編的，所以
   畫面上只有一條來回掃的光帶：它只說「還在跑」，不假裝知道跑到哪裡。 */
.cp-progress.is-indeterminate{overflow:hidden}
.cp-progress.is-indeterminate i{
  animation:cpSweep 1.5s cubic-bezier(.4,0,.2,1) infinite;
  background:linear-gradient(90deg,rgba(214,182,111,.15),var(--gold),rgba(214,182,111,.15));
  transition:none}
@keyframes cpSweep{0%{transform:translateX(-110%)}100%{transform:translateX(300%)}}
.cp-planning .cp-progress-text{color:var(--gold)}
.cp-failed .cp-progress-text{color:var(--danger)}
.cp-failed .cp-progress i{animation:none;background:var(--danger)}
/* 規劃步驟清單：做完打勾、正在做轉圈、還沒開始就說還沒開始（伺服器回報的
   真實步驟，不是計時器推的）。 */
.cp-plan-list li.cp-stage strong{white-space:normal;font-weight:600;line-height:1.6}
.cp-plan-list li.cp-stage{align-items:flex-start}
.cp-plan-list li.cp-stage b.cp-state{margin-top:2px}
/* 行銷計畫卡：規劃中的那一張也是跑馬燈，不是 0% */
.campaign-progress.is-planning span{color:var(--gold);font-size:12px}
.campaign-progress.is-planning i{overflow:hidden}
.campaign-progress.is-planning em{
  animation:cpSweep 1.5s cubic-bezier(.4,0,.2,1) infinite;
  background:linear-gradient(90deg,rgba(214,182,111,.15),var(--gold),rgba(214,182,111,.15));
  transition:none}
/* 動態狀態訊息：每 4 秒輪播，換句時淡出淡入 */
.cp-live-msg{margin:2px 0 6px;min-height:20px;font-size:13px;color:var(--text)}
.cp-live-msg span{display:inline-block;opacity:1;transition:opacity .3s ease}
/* 清單每篇的狀態標記 */
.cp-state{display:inline-flex;align-items:center;gap:6px;flex:none;font-size:12px}
.cp-plan-list li b.cp-state.is-running{color:var(--gold)}
.cp-plan-list li b.cp-state.is-queued{color:var(--muted)}
.cp-plan-list li b.cp-state.is-failed{color:var(--danger)}
.cp-plan-list li b.cp-state.is-review{color:var(--danger,#e08a8a)}
.cp-plan-list li b.cp-state.is-done{color:var(--green)}
.cp-spinner{width:11px;height:11px;border-radius:50%;border:2px solid #3a4a3f;border-top-color:var(--gold);animation:cpSpin .8s linear infinite}
@keyframes cpSpin{to{transform:rotate(360deg)}}
.cp-fail-dot{width:8px;height:8px;border-radius:50%;background:var(--danger)}
.cp-check{font-style:normal;font-weight:900}
.cp-state.just-done{animation:cpFadeIn .5s ease}
@keyframes cpFadeIn{from{opacity:0;transform:scale(.7)}to{opacity:1;transform:scale(1)}}
/* 完成瞬間：主按鈕高亮 pulse 一次（低調慶祝） */
.cp-celebrate #cpViewAll{animation:cpPulse .9s ease-out 1}
@keyframes cpPulse{0%{box-shadow:0 0 0 0 rgba(214,182,111,.6)}100%{box-shadow:0 0 0 16px rgba(214,182,111,0)}}
/* 行銷計畫卡進度條：同樣平滑動畫＋製作中流動光效 */
.campaign-progress em{transition:width .8s cubic-bezier(.4,0,.2,1)}
.campaign-progress em.is-working{background:linear-gradient(90deg,var(--green),#a9dcc0,var(--green));background-size:200% 100%;animation:cpFlow 2.4s linear infinite}

/* ============================================================================
   V2.3 L1 — studio 右半部三段式版面（這篇內容／文字調整／下一步）
   桌機左表單 40%、右預覽 60%，預覽區 sticky 跟著捲動。
   ========================================================================== */
@media(min-width:1001px){
  .social-builder{grid-template-columns:minmax(0,40fr) minmax(0,60fr);align-items:start}
  .post-workspace{position:sticky;top:18px;align-self:start;max-height:calc(100vh - 36px);overflow:auto;scrollbar-width:thin}
  .post-workspace::-webkit-scrollbar{width:8px}
  .post-workspace::-webkit-scrollbar-thumb{background:#2a3749;border-radius:8px}
}
.studio-steps{display:grid;gap:10px;margin-top:14px}
.studio-step{border:1px solid var(--line);border-radius:14px;background:#0e1520;padding:13px 14px}
.studio-step-title{display:flex;align-items:center;gap:9px;margin:0 0 10px;font-size:12.5px;font-weight:800;letter-spacing:.03em;color:var(--text)}
.studio-step-title b{display:grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--surface-2);border:1px solid var(--line);color:var(--gold);font-size:11px;font-weight:900}
.studio-step-hint{display:block;margin-top:8px;color:var(--muted);font-size:11.5px;line-height:1.6}
.studio-step .asset-actions{margin:0;gap:8px}
.studio-step .asset-actions .quiet-btn{font-size:12.5px;padding:9px 12px}
/* 圖片風格（image intent）：跟著「AI 產生圖片」一起送出去的拍攝方向 */
.asset-intent{display:flex;align-items:center;gap:8px;margin-top:10px;color:var(--muted);font-size:12px}
.asset-intent select{flex:1;min-width:0;border:1px solid var(--line);border-radius:11px;background:#0a1017;color:var(--text);padding:9px 11px;font-size:12.5px}
.asset-intent select:focus{outline:none;border-color:var(--gold)}
/* 永遠可見的「告訴 APOLLO 想怎麼改」輸入框（取代彈跳 prompt） */
.studio-revise-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px}
#studioReviseInput{min-width:0;width:100%;border:1px solid var(--line);border-radius:11px;background:#0a1017;color:var(--text);padding:11px 13px;font-size:13.5px}
#studioReviseInput::placeholder{color:#6d7a8c}
#studioReviseInput:focus{outline:none;border-color:var(--gold)}
#studioReviseBtn{white-space:nowrap;padding:10px 18px}
#studioReviseBtn:disabled{opacity:.55}
/* 下一步：立即發布＋安排發布時間，靠右下 */
.studio-step-publish .publish-bar{margin:0;padding:0;border-top:0;justify-content:flex-end;flex-wrap:wrap}
.studio-step-publish .publish-bar span{flex:1 1 190px}
.studio-step-publish .publish-bar small{margin:0;color:var(--muted);font-size:11.5px;line-height:1.6}
@media(max-width:720px){
  .studio-revise-row{grid-template-columns:1fr}
  .asset-intent select{min-height:44px}
  #studioReviseBtn{min-height:44px}
  .studio-step-publish .publish-bar{display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .studio-step-publish .publish-bar span{grid-column:1/-1}
  .studio-step-publish .publish-bar button{min-height:44px}
}

/* ============================================================================
   V2.3 L2 — 客服台：人工接手開關＋回覆按鈕排列
   ========================================================================== */
.cs-mode-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 16px;border-bottom:1px solid var(--line);background:#0f1826}
.cs-mode-switch{display:flex;align-items:center;gap:10px;cursor:pointer;min-width:0}
.cs-mode-switch input{position:absolute;opacity:0;width:0;height:0}
.cs-mode-switch i{flex:none;position:relative;display:block;width:38px;height:21px;border-radius:999px;background:#26334a;border:1px solid #3a4a63;transition:.2s}
.cs-mode-switch i:after{content:"";position:absolute;top:2px;left:2px;width:15px;height:15px;border-radius:50%;background:#93a3bb;transition:.2s}
.cs-mode-switch input:checked+i{background:#3f5a4e;border-color:#58876f}
.cs-mode-switch input:checked+i:after{transform:translateX(17px);background:#8ed5bd}
.cs-mode-switch input:focus-visible+i{outline:2px solid var(--gold);outline-offset:2px}
.cs-mode-switch span{min-width:0}
.cs-mode-switch strong{display:block;font-size:12.5px}
.cs-mode-switch small{display:block;margin-top:2px;color:var(--muted);font-size:11px;line-height:1.5}
.cs-mode-state{flex:none;border:1px solid #2b394d;border-radius:999px;padding:4px 11px;color:var(--muted);font-size:11px;white-space:nowrap}
.cs-mode-state[data-mode="human"]{border-color:#4b4630;background:#241f12;color:var(--gold)}
.cs-mode-bar.is-busy{opacity:.6;pointer-events:none}
/* 回覆區：語言列／輸入框／預覽／按鈕改為單欄堆疊（原本 1fr auto 會把輸入框擠窄） */
.reply-box{grid-template-columns:minmax(0,1fr)}
.reply-box textarea{min-height:76px}
/* 回覆區：翻譯後發送／直接發送 */
.reply-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.reply-actions-hint{flex:1 1 160px;color:var(--muted);font-size:11px;line-height:1.5}
.reply-actions .quiet-btn{padding:9px 14px;font-size:13px}
.reply-box .reply-actions button[type="submit"]{border:0;border-radius:10px;background:var(--gold);color:#13140f;font-weight:800;padding:9px 18px;min-width:90px}
.reply-actions button:disabled{opacity:.55;cursor:default}
#replyInput[disabled]{opacity:.6}
@media(max-width:720px){
  .cs-mode-bar{align-items:flex-start;flex-direction:column;gap:8px;padding:11px 13px}
  .reply-actions{display:grid;grid-template-columns:1fr 1fr}
  .reply-actions-hint{grid-column:1/-1}
  .reply-actions button{min-height:44px}
}

/* ============================================================================
   V2.3 L3 — 日程：週曆改整月（‹ 月份 ›＋7 欄 6 列）
   ========================================================================== */
.calendar-month{display:grid;gap:10px}
.cal-toolbar{display:flex;align-items:center;justify-content:center;gap:14px}
.cal-toolbar strong{min-width:150px;text-align:center;font-size:15px;letter-spacing:.02em}
.cal-nav{display:grid;place-items:center;width:32px;height:32px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);color:var(--text);font-size:17px;line-height:1}
.cal-nav:hover{border-color:var(--gold);color:var(--gold)}
.cal-weekdays{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;color:var(--muted);font-size:11px;text-align:center}
.calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));grid-auto-rows:minmax(96px,auto);gap:6px}
.cal-cell{display:flex;flex-direction:column;gap:3px;min-width:0;border:1px solid var(--line);border-radius:10px;background:#0d1420;padding:7px 7px 8px}
.cal-cell>b{font-size:12px;font-weight:700;color:var(--muted)}
.cal-cell.outside{background:#0a101a;opacity:.5}
.cal-cell.today{border-color:var(--gold);background:#141a1c;box-shadow:inset 0 0 0 1px rgba(205,187,134,.25)}
.cal-cell.today>b{display:inline-grid;place-items:center;width:21px;height:21px;border-radius:50%;background:var(--gold);color:#13140f;font-weight:900}
.cal-cell .calendar-item{margin-top:2px;padding:4px 6px;border-radius:6px;font-size:10.5px;line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cal-cell .calendar-item:nth-of-type(n+4){display:none}
.cal-more{margin-top:2px;border:0;background:transparent;color:var(--gold);font-size:10.5px;text-align:left;padding:0 2px}
.cal-more:hover{text-decoration:underline}
.cal-cell.is-selected{border-color:#5f7bb0}
@media(max-width:1000px){.calendar-grid{grid-auto-rows:minmax(82px,auto)}}
@media(max-width:720px){
  .calendar-month{overflow:auto}
  .cal-weekdays,.calendar-grid{min-width:560px}
  .calendar-grid{grid-auto-rows:minmax(74px,auto)}
  .cal-cell{padding:6px}
}

/* ============================================================================
   V2.3 L5 — 側欄 AI TEAM：頭像＋中文職稱＋狀態＋tooltip，進行中微光
   ========================================================================== */
.team-status-sub{margin:-4px 0 10px;padding:0 2px;color:var(--muted);font-size:11px;line-height:1.5}
.team-status .agent-row{position:relative;width:100%;border:1px solid transparent;border-radius:11px;background:transparent;color:var(--text);text-align:left;padding:7px 8px;margin:3px 0;grid-template-columns:26px minmax(0,1fr) auto;column-gap:9px;row-gap:1px}
.team-status .agent-row:hover,.team-status .agent-row:focus-visible{background:var(--surface-2);border-color:#33425c;outline:none}
.team-status .agent-row .agent-name{grid-column:2;grid-row:1;min-width:0;font-size:11.5px;font-weight:800;letter-spacing:.04em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.team-status .agent-row .agent-role{grid-column:2;grid-row:2;min-width:0;font-style:normal;font-size:11px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.team-status .agent-row .agent-state{grid-column:3;grid-row:1/3;align-self:center;color:var(--muted);font-size:10.5px;white-space:nowrap}
.team-status .agent-row .agent-dot{grid-column:1;grid-row:1/3}
.agent-dot.apollo{background:#d79b6a}
.agent-dot.hephaestus{background:#929eaa}
/* 進行中：狀態轉金色＋頭像微光 */
.team-status .agent-row.is-working{border-color:#4b4630;background:#161a20}
.team-status .agent-row.is-working .agent-state{color:var(--gold);font-weight:700}
.team-status .agent-row.is-working .agent-dot{animation:agentGlow 2.4s ease-in-out infinite}
@keyframes agentGlow{0%,100%{box-shadow:0 0 0 0 rgba(205,187,134,.45)}50%{box-shadow:0 0 0 5px rgba(205,187,134,0)}}
/* hover tooltip：說明這位成員能做什麼。
   側欄是 overflow:auto，所以 tooltip 貼在該列正下方（不外掛到側欄右側，
   否則會被裁掉）；最後兩列改往上展開，避免被側欄底部切到。 */
.agent-tip{position:absolute;left:0;right:0;top:calc(100% + 5px);z-index:40;transform:translateY(-3px);opacity:0;visibility:hidden;transition:opacity .16s,transform .16s;border:1px solid #3a475c;border-radius:12px;background:#0d131f;color:var(--text);padding:10px 12px;font-size:11.5px;font-weight:500;line-height:1.65;text-align:left;white-space:normal;box-shadow:0 18px 46px #000a;pointer-events:none}
.team-status .agent-row:nth-last-of-type(-n+2) .agent-tip{top:auto;bottom:calc(100% + 5px);transform:translateY(3px)}
.team-status .agent-row:hover .agent-tip,.team-status .agent-row:focus-visible .agent-tip{opacity:1;visibility:visible;transform:translateY(0)}
@media(max-width:720px){.agent-tip{display:none}}

/* D3 清除測試資料：破壞性操作用紅色框線按鈕明確區分。 */
.backup-actions .danger-btn{border-color:#7a3b34;background:#2a1a18;color:var(--danger);font-weight:800}
.backup-actions .danger-btn:hover:not(:disabled){background:#3a2320}

/* D1 文件製作：dialog 的檔案／文字欄位，以及最近產出的下載連結。 */
#liveDocMakeDialog{width:min(520px,calc(100% - 28px))}
#liveDocMakeDialog label[hidden]{display:none}
#liveDocMakeDialog input[type=text],#liveDocMakeDialog input[type=file],#liveDocMakeDialog select{width:100%;border:1px solid #3b4d5f;border-radius:10px;background:#0e1613;color:var(--text);padding:11px 12px;font:inherit}
#liveDocMakeDialog input:focus,#liveDocMakeDialog select:focus{outline:none;border-color:var(--gold)}
#liveDocMakeStatus:empty{display:none}
/* 下載鍵是 <button> 而不是 <a href>：檔案要走授權過的 signed URL（P0-1）。 */
.doc-row .doc-download{display:inline-block;border:1px solid var(--line);border-radius:9px;background:var(--surface-2);color:var(--text);padding:8px 12px;text-decoration:none;text-align:center;font:inherit;cursor:pointer}
.doc-row .doc-download[disabled]{opacity:.6;cursor:progress}
.doc-row .doc-download:hover{border-color:var(--gold);color:var(--gold)}

/* ============================================================================
   APOLLO V2 「會算帳的行銷顧問」— ATHENA 作戰計畫 + 商品與定價設定
   ========================================================================== */
/* 進度 dialog 頂部：目標一句話＋一行算式（老闆最想先看到的兩行） */
.cp-battle{display:grid;gap:4px;margin:-2px 0 12px;padding:11px 13px;border:1px solid #4b4630;border-radius:12px;background:linear-gradient(135deg,#1c1e16,#141a16)}
.cp-battle b{font-size:11px;letter-spacing:.12em;color:var(--gold)}
.cp-battle span{font-size:13.5px;font-weight:800;line-height:1.5;color:var(--text)}
.cp-battle em{font-style:normal;font-size:12.5px;color:var(--green);font-variant-numeric:tabular-nums}
.cp-battle em[hidden]{display:none}

/* 內容檢視 dialog：可摺疊的作戰計畫區塊（預設展開） */
.bp-block{margin:6px 0 14px;border:1px solid #4b4630;border-radius:14px;background:#111814;overflow:hidden}
/* 內容區塊：跟作戰計畫同一種外觀，因為它們是同一份計畫的兩半。
   兩塊長得一樣、各自有標題，使用者才看得出「上面是計畫、下面是內容」，
   而不是以為自己點錯了視窗。 */
.cc-block{margin:6px 0 14px;border:1px solid #34402f;border-radius:14px;background:#101613;overflow:hidden}
.cc-block>summary{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;padding:12px 14px;cursor:pointer;list-style:none;background:linear-gradient(135deg,#161d18,#121815);font-weight:600}
.cc-block>summary::-webkit-details-marker{display:none}
/* 視窗最上面那一行：說清楚你是從哪個入口進來的、另一半在哪裡。 */
.cc-mode-hint{margin:2px 0 10px;color:#9fb0a4;font-size:.86rem;line-height:1.5}
.bp-block[hidden]{display:none}
.bp-block>summary{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;padding:12px 14px;cursor:pointer;list-style:none;background:linear-gradient(135deg,#1c1e16,#141a16)}
.bp-block>summary::-webkit-details-marker{display:none}
.bp-block>summary span{font-size:14px;font-weight:800;color:var(--gold)}
.bp-block>summary em{font-style:normal;font-size:12.5px;color:var(--green);font-variant-numeric:tabular-nums}
.bp-block>summary:after{content:"▾";color:var(--muted);font-size:12px}
.bp-block[open]>summary:after{content:"▴"}
.bp-body{padding:14px;display:grid;gap:12px;max-height:52vh;overflow:auto}
.bp-goal{margin:0;font-size:13.5px;font-weight:700;line-height:1.6;color:var(--text)}
.bp-title{margin:2px 0 0;font-size:12.5px;letter-spacing:.06em;color:var(--gold)}
.bp-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:0 14px 13px}
.bp-actions small{color:var(--muted);font-size:11.5px}

/* 「把整份計畫抓下來」——放在計畫最上面，不是最下面。老闆說「這個頁面關掉
   之後我要怎麼找回這個完整行銷計畫」，那顆按鈕就不能藏在兩千字後面。 */
.bp-export{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:12px 14px;border-bottom:1px solid var(--line);background:#101a15}
.bp-export[hidden]{display:none}
.bp-export .primary-btn{padding:10px 15px;font-size:13px}
.bp-export .quiet-btn{padding:10px 14px;font-size:12.5px}
.bp-export small{flex:1 1 240px;color:var(--muted);font-size:11.5px;line-height:1.65}
@media(max-width:720px){
  .bp-export{padding:12px}
  .bp-export .primary-btn,.bp-export .quiet-btn{flex:1 1 auto;min-height:46px}
  .bp-export small{flex-basis:100%}
}

/* 沒有真實定價時的提示條 */
.bp-hint{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 12px;border:1px dashed var(--gold);border-radius:11px;background:#1b1a12}
.bp-hint span{flex:1;min-width:200px;font-size:12.5px;line-height:1.6;color:#e6d7a8}
.bp-hint .primary-btn{padding:8px 13px;font-size:12.5px}

/* 目標拆解卡：目標金額 → 需成交 → 需詢問 → 需曝光 */
.bp-funnel{display:flex;align-items:stretch;gap:8px;flex-wrap:wrap}
.bp-step{flex:1 1 150px;display:grid;gap:3px;align-content:start;padding:11px 12px;border:1px solid var(--line);border-radius:12px;background:var(--surface-2)}
.bp-step span{font-size:11px;color:var(--muted)}
.bp-step strong{font-size:18px;letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.bp-step small{color:var(--muted);font-size:11px;line-height:1.5}
.bp-arrow{align-self:center;color:var(--gold);font-style:normal;font-size:14px}

/* 通路配置表 */
.bp-table{display:grid;border:1px solid var(--line);border-radius:12px;overflow:hidden}
.bp-row{display:grid;grid-template-columns:120px minmax(0,1.5fr) 100px minmax(0,1fr) minmax(0,1.2fr);gap:10px;padding:10px 12px;border-top:1px solid var(--line);font-size:12.5px;line-height:1.6}
.bp-row:first-child{border-top:0}
.bp-row.bp-head{background:#0e1613;color:var(--muted);font-size:11px;letter-spacing:.04em}
.bp-row .bp-channel{font-weight:800;color:var(--text)}
.bp-row .bp-keywords{display:block;margin-top:4px;color:var(--gold);font-size:11.5px;line-height:1.5}

/* 4 週行動節奏（時間軸） */
.bp-weeks{margin:0;padding:0 0 0 4px;list-style:none;display:grid;gap:9px}
.bp-weeks li{position:relative;padding:0 0 0 68px}
.bp-weeks li b{position:absolute;left:0;top:0;display:inline-grid;place-items:center;min-width:58px;padding:3px 7px;border-radius:99px;border:1px solid var(--line);background:var(--surface-2);color:var(--gold);font-size:11px}
.bp-weeks li strong{display:block;font-size:13px;line-height:1.6}
.bp-weeks li ul{margin:4px 0 0;padding-left:17px;display:grid;gap:2px}
.bp-weeks li ul li{position:static;padding:0;color:var(--muted);font-size:12.5px;line-height:1.6;list-style:disc}

/* 風險與備案 */
.bp-risks{margin:0;padding-left:18px;display:grid;gap:3px}
.bp-risks li{color:var(--muted);font-size:12.5px;line-height:1.65}

/* 「這些數字怎麼來的」 */
.bp-assumptions{padding:9px 12px;border:1px dashed var(--line);border-radius:10px;background:#0e1613}
.bp-assumptions b{display:block;margin-bottom:4px;font-size:11.5px;color:var(--gold)}
.bp-assumptions ul{margin:0;padding-left:16px;display:grid;gap:2px}
.bp-assumptions li{color:var(--muted);font-size:11.5px;line-height:1.6}

@media(max-width:760px){
  .bp-row{grid-template-columns:1fr;gap:4px}
  .bp-row.bp-head{display:none}
  .bp-arrow{display:none}
}

/* ---- 設定中心：商品與定價 ---- */
.offerings-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap}
.offerings-head h3{margin:0 0 4px}
.offerings-head p{margin:0;color:var(--muted);line-height:1.6}
.offerings-list{display:grid;gap:9px;margin:16px 0 22px}
.offering-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:12px;align-items:center;padding:13px 14px;border:1px solid var(--line);border-radius:13px;background:var(--surface-2)}
.offering-row.is-inactive{opacity:.6}
.offering-row strong{display:block;font-size:14px}
.offering-row small{display:block;margin-top:3px;color:var(--muted);font-size:11.5px;line-height:1.5}
.offering-row>b{font-size:16px;color:var(--gold);font-variant-numeric:tabular-nums;white-space:nowrap}
.offering-actions{display:flex;gap:7px}
.offering-actions button{font-size:12px;padding:7px 11px}
.metrics-block{border-top:1px solid var(--line);padding-top:18px}
.metrics-block h4{margin:0 0 4px;font-size:15px}
.metrics-block p{margin:0;color:var(--muted);line-height:1.6}
.metrics-fields{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:14px 0 10px}
.metrics-fields label{display:grid;gap:6px;color:var(--muted);font-size:12px}
.metrics-fields input{border:1px solid #3b4d5f;border-radius:10px;background:#0e1613;color:var(--text);padding:11px 12px;font:inherit}
.metrics-fields input:focus{outline:none;border-color:var(--gold)}
.metrics-source{margin:0 0 12px;color:var(--muted);font-size:12px}
.live-offering-dialog{width:min(520px,calc(100% - 28px))}
.offering-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.offering-fields .offering-wide{grid-column:1/-1}
.offering-fields select{border:1px solid #3b4d5f;border-radius:10px;background:#0e1613;color:var(--text);padding:11px 12px;font:inherit}
.offering-fields select:focus{outline:none;border-color:var(--gold)}
@media(max-width:720px){
  .metrics-fields{grid-template-columns:1fr}
  .offering-fields{grid-template-columns:1fr}
  .offering-row{grid-template-columns:1fr auto}
  .offering-actions{grid-column:1/-1;justify-content:flex-end}
}

/* ---- V2.5 成效回填閉環：作戰計畫底部的「回報實際成果」 ---- */
.bp-results{padding:0 14px 14px;display:grid;gap:11px;border-top:1px solid var(--line);margin-top:2px;padding-top:13px}
.bp-result-table .bp-row{grid-template-columns:88px minmax(0,1fr) minmax(0,1fr) 74px}
.bp-result-hint{margin:0;color:var(--muted);font-size:12px;line-height:1.6}
.bp-result-note{margin:0;color:var(--gold);font-size:12px;line-height:1.6;font-variant-numeric:tabular-nums}
.bp-result-learned{margin:0;padding:9px 11px;border:1px dashed var(--green);border-radius:10px;background:#0e1613;color:var(--green);font-size:12px;line-height:1.6}
.bp-result-form{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.bp-result-form .bp-title,.bp-result-form .bp-result-hint,.bp-result-form .bp-actions,.bp-result-form .bp-result-notes{grid-column:1/-1}
.bp-result-form label{display:grid;gap:5px;color:var(--muted);font-size:11.5px}
.bp-result-form input{border:1px solid #3b4d5f;border-radius:10px;background:#0e1613;color:var(--text);padding:10px 11px;font:inherit;font-size:13px}
.bp-result-form input:focus{outline:none;border-color:var(--gold)}
.bp-result-form .bp-actions{padding:2px 0 0}
.bp-inline-btn{margin-top:7px;font-size:11.5px;padding:6px 10px}

/* ---- V2.5 舊客再行銷：訊息預覽 ---- */
.react-preview{margin:10px 0;padding:11px 12px;border:1px solid var(--line);border-radius:12px;background:#0e1613}
.react-preview b{display:block;margin-bottom:6px;font-size:11.5px;letter-spacing:.06em;color:var(--gold)}
.react-preview pre{margin:0;white-space:pre-wrap;word-break:break-word;font:inherit;font-size:13px;line-height:1.7;color:var(--text)}
.react-preview small{display:block;margin-top:7px;color:var(--muted);font-size:11.5px}

/* ---- V2.5 內容再利用：選擇要改成哪些形式 ---- */
.repurpose-options{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin:12px 0}
.repurpose-option{display:flex;align-items:flex-start;gap:9px;padding:11px 12px;border:1px solid var(--line);border-radius:12px;background:var(--surface-2);cursor:pointer}
.repurpose-option input{margin-top:3px;accent-color:var(--gold)}
.repurpose-option b{display:block;font-size:13px}
.repurpose-option small{display:block;margin-top:2px;color:var(--muted);font-size:11.5px;line-height:1.5}

/* ---- V2.5 本週戰報卡（總覽頁頂部，可摺疊） ---- */
.weekly-report{margin:0 0 18px;padding:0;overflow:hidden}
.weekly-report>summary{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;padding:14px 18px;cursor:pointer;list-style:none}
.weekly-report>summary::-webkit-details-marker{display:none}
.weekly-report>summary span{font-size:15px;font-weight:800;color:var(--gold)}
.weekly-report>summary em{font-style:normal;font-size:12.5px;color:var(--muted);font-variant-numeric:tabular-nums}
.weekly-report>summary:after{content:"▾";color:var(--muted);font-size:12px}
.weekly-report[open]>summary:after{content:"▴"}
.wr-body{padding:0 18px;display:grid;gap:11px}
.wr-summary{margin:0;font-size:13.5px;line-height:1.85;color:var(--text)}
.wr-title{margin:2px 0 0;font-size:12.5px;letter-spacing:.06em;color:var(--gold)}
.wr-suggestions{margin:0;padding-left:19px;display:grid;gap:4px}
.wr-suggestions li{font-size:13px;line-height:1.7}
.wr-hint{margin:0;color:var(--muted);font-size:12.5px;line-height:1.7}
.wr-metrics{display:flex;flex-wrap:wrap;gap:8px}
.wr-metric{display:grid;gap:2px;min-width:96px;padding:9px 12px;border:1px solid var(--line);border-radius:11px;background:var(--surface-2)}
.wr-metric b{font-size:17px;font-variant-numeric:tabular-nums}
.wr-metric small{color:var(--muted);font-size:11px}
.wr-actions{display:flex;gap:9px;flex-wrap:wrap;padding:14px 18px}
@media(max-width:720px){
  .bp-result-form{grid-template-columns:1fr 1fr}
  .bp-result-table .bp-row{grid-template-columns:1fr}
  .repurpose-options{grid-template-columns:1fr}
}

/* ---- V2.6 G1 智慧提醒中心（頂部鈴鐺＋下拉面板） ---- */
.reminder-wrap{position:relative}
.reminder-wrap[hidden]{display:none!important}
.reminder-bell{position:relative;display:grid;place-items:center;width:40px;height:40px;border:1px solid var(--line);border-radius:12px;background:var(--surface-2);color:var(--text);cursor:pointer}
.reminder-bell svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.reminder-bell:hover{border-color:var(--gold);color:var(--gold)}
.reminder-bell .bell-dot{position:absolute;top:7px;right:8px;width:9px;height:9px;border-radius:50%;background:var(--coral);box-shadow:0 0 0 2px var(--surface-2)}
.reminder-bell .bell-dot[hidden]{display:none}
.reminder-panel{position:absolute;top:48px;right:0;z-index:60;width:min(360px,calc(100vw - 32px));max-height:min(70vh,520px);overflow:auto;border:1px solid var(--line);border-radius:16px;background:var(--surface);box-shadow:0 22px 60px #02050bad}
.reminder-panel[hidden]{display:none}
.reminder-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:14px 16px;border-bottom:1px solid var(--line)}
.reminder-head strong{font-size:14px;color:var(--gold)}
.reminder-head small{color:var(--muted);font-size:11.5px}
.reminder-list{display:grid}
.reminder-item{display:grid;grid-template-columns:4px 1fr;gap:11px;align-items:start;padding:13px 16px;border-top:1px solid var(--line);text-align:left}
.reminder-item:first-child{border-top:0}
.reminder-item>i{align-self:stretch;border-radius:3px;background:var(--muted)}
.reminder-item.sev-warn>i{background:var(--gold)}
.reminder-item.sev-urgent>i{background:var(--coral)}
.reminder-item.is-unread{background:#131d18}
.rm-main{display:grid;gap:5px;min-width:0}
.rm-title{display:flex;align-items:baseline;gap:7px;font-size:13px;font-weight:800;line-height:1.5}
.rm-title em{font-style:normal;flex:0 0 auto;font-size:10px;letter-spacing:.06em;color:var(--muted)}
.rm-body{margin:0;color:var(--muted);font-size:12px;line-height:1.65}
.rm-actions{display:flex;gap:7px;flex-wrap:wrap;margin-top:3px}
.rm-actions button{border:1px solid var(--line);background:var(--surface-2);color:var(--text);border-radius:9px;padding:6px 10px;font-size:11.5px;cursor:pointer}
.rm-actions button.rm-go{border-color:#5b6f4f;color:var(--gold)}
.rm-actions button.rm-dismiss{color:var(--muted)}
.reminder-empty{padding:22px 16px;text-align:center;color:var(--muted);font-size:12.5px;line-height:1.7}

/* ---- V2.6 G2 建議發布時段 ---- */
.sched-suggest{display:grid;gap:7px;margin:12px 0 4px}
.sched-suggest>span{font-size:11.5px;color:var(--muted)}
.sched-suggest-chips{display:flex;flex-wrap:wrap;gap:6px}
.sched-chip{border:1px solid var(--line);background:var(--surface-2);color:var(--text);border-radius:999px;padding:6px 11px;font-size:11.5px;cursor:pointer}
.sched-chip:hover{border-color:var(--gold);color:var(--gold)}
.sched-chip b{font-variant-numeric:tabular-nums}
.best-time-strip{display:grid;gap:6px;margin:10px 0 4px;padding:11px 13px;border-left:3px solid var(--gold);border-radius:0 11px 11px 0;background:#181f16}
.best-time-strip>span{font-size:11px;letter-spacing:.06em;color:var(--gold)}
.best-time-strip p{margin:0;color:var(--muted);font-size:11.5px;line-height:1.65}
.calendar-item.off-peak{opacity:.82}
.cal-cell[title]{cursor:help}

/* ---- V2.6 G3 這週可以做什麼（靈感卡） ---- */
.idea-strip{margin-bottom:14px;padding:16px 18px;border:1px solid #3c5541;border-radius:18px;background:linear-gradient(135deg,#17251d,#111814)}
.idea-strip[hidden]{display:none}
.idea-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap}
.idea-head strong{font-size:16px;color:var(--gold)}
.idea-head small{color:var(--muted);font-size:11.5px}
.idea-head button{border:1px solid var(--line);background:var(--surface-2);color:var(--text);border-radius:10px;padding:7px 11px;font-size:12px;cursor:pointer}
.idea-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:9px;margin-top:12px}
.idea-card{display:grid;gap:5px;text-align:left;border:1px solid var(--line);border-radius:13px;background:var(--surface-2);color:var(--text);padding:12px 13px;cursor:pointer}
.idea-card:hover{border-color:var(--gold)}
.idea-card b{font-size:13px;line-height:1.5}
.idea-card small{color:var(--muted);font-size:11.5px;line-height:1.6}
.idea-card em{font-style:normal;font-size:10.5px;color:var(--green)}

/* ---- V2.6 G4 品牌語氣與規則（設定頁） ---- */
.voice-rules{margin-top:20px;padding-top:18px;border-top:1px solid var(--line)}
.voice-rules h4{margin:0 0 5px;font-size:14px;color:var(--gold)}
.voice-rules>p{margin:0;color:var(--muted);font-size:12px;line-height:1.7}
.voice-fields{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:13px}
.voice-fields label{display:grid;gap:6px;color:var(--muted);font-size:12px}
.voice-fields input,.voice-fields select{border:1px solid var(--line);background:#0d1512;color:var(--text);border-radius:10px;padding:10px}

/* ---- V2.6 G5 一鍵複製到各平台 ---- */
.share-menu{position:relative;display:inline-block}
.share-menu>summary{list-style:none;border:1px solid var(--line);border-radius:9px;background:var(--surface-2);color:var(--text);padding:8px 11px;font-size:12px;cursor:pointer}
.share-menu>summary::-webkit-details-marker{display:none}
.share-menu>summary:after{content:" ▾";color:var(--muted)}
.share-menu[open]>summary{border-color:var(--gold);color:var(--gold)}
.share-list{position:absolute;z-index:40;right:0;margin-top:6px;min-width:190px;display:grid;border:1px solid var(--line);border-radius:12px;background:var(--surface);box-shadow:0 18px 44px #02050b9c;overflow:hidden}
.share-list button{border:0;border-top:1px solid var(--line);background:transparent;color:var(--text);padding:10px 12px;font-size:12px;text-align:left;cursor:pointer}
.share-list button:first-child{border-top:0}
.share-list button:hover{background:var(--surface-2);color:var(--gold)}
.share-hint{margin:6px 0 0;color:var(--muted);font-size:11.5px;line-height:1.6}

@media(max-width:720px){
  .voice-fields{grid-template-columns:1fr}
  .reminder-panel{position:fixed;top:auto;right:12px;left:12px;width:auto}
  .idea-grid{grid-template-columns:1fr}
}

/* ---- V2.7 H1 客戶跟進看板 ---- */
.crm-tabs{display:flex;gap:8px;margin-bottom:14px}
.crm-tabs button{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--line);background:var(--surface-2);color:var(--muted);border-radius:999px;padding:8px 15px;font-size:12.5px;cursor:pointer}
.crm-tabs button.active{border-color:var(--gold);background:var(--surface);color:var(--gold)}
.crm-tabs b{display:inline-grid;place-items:center;min-width:19px;height:19px;padding:0 5px;border-radius:999px;background:var(--coral);color:#12100e;font-size:11px}
.crm-tabs b[hidden]{display:none}
.fu-panel[hidden]{display:none}
.fu-note{margin:6px 0 0;color:var(--muted);font-size:12px;line-height:1.65}
.fu-board{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin-top:14px}
.fu-col{display:grid;align-content:start;gap:8px;border:1px solid var(--line);border-radius:14px;background:var(--surface-2);padding:11px}
.fu-col>header{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12px;color:var(--muted)}
.fu-col>header b{font-variant-numeric:tabular-nums;color:var(--text)}
.fu-empty{margin:0;color:var(--muted);font-size:11.5px;text-align:center;padding:10px 0}
.fu-card{display:grid;gap:5px;border:1px solid var(--line);border-radius:12px;background:var(--surface);padding:11px}
.fu-card.is-overdue{border-color:var(--coral)}
.fu-card-head{display:flex;align-items:baseline;justify-content:space-between;gap:7px}
.fu-card-head strong{font-size:13px}
.fu-card-head em{font-style:normal;font-size:10.5px;color:var(--muted)}
.fu-next{margin:0;font-size:12px;line-height:1.6;color:var(--text)}
.fu-due{color:var(--muted);font-size:11px}
.fu-card.is-overdue .fu-due{color:var(--coral)}
.fu-actions{display:flex;flex-wrap:wrap;gap:5px;margin-top:4px}
.fu-actions button,.fu-actions select{border:1px solid var(--line);background:var(--surface-2);color:var(--text);border-radius:8px;padding:5px 8px;font-size:11px;cursor:pointer}
.fu-actions button:hover{border-color:var(--gold);color:var(--gold)}
.fu-actions .fu-remove{color:var(--muted)}

/* ---- V2.7 H2 AI 成本與用量透明化 ---- */
.cost-block{margin-top:20px;padding-top:16px;border-top:1px solid var(--line)}
.cost-block h4{margin:0 0 8px;font-size:14px;color:var(--gold)}
.cost-total{margin:0 0 12px;font-size:26px;font-weight:800;font-variant-numeric:tabular-nums}
.cost-total small{display:block;margin-top:3px;font-size:11.5px;font-weight:400;color:var(--muted)}
.cost-bars{display:grid;gap:7px}
.cost-line{display:grid;grid-template-columns:96px 1fr auto auto;gap:9px;align-items:center;font-size:12px}
.cost-line i{display:block;height:7px;border-radius:999px;background:var(--surface-2);overflow:hidden}
.cost-line em{display:block;height:100%;border-radius:999px;background:var(--gold)}
.cost-line b{font-variant-numeric:tabular-nums}
.cost-line small{color:var(--muted);font-size:11px;white-space:nowrap}
.cost-plain{margin:12px 0 0;color:var(--muted);font-size:12px;line-height:1.75}
.cost-plain strong{color:var(--text)}
.cost-detail{padding-left:2px}
.cost-warn{margin:12px 0 0;padding:10px 12px;border-left:3px solid var(--gold);border-radius:0 10px 10px 0;background:#1b1c12;color:#e3d6a8;font-size:12px;line-height:1.7}
.cost-notes{margin:12px 0 0;padding-left:18px;color:var(--muted);font-size:11.5px;line-height:1.7}
.plan-extra-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:18px;padding-top:14px;border-top:1px solid var(--line)}
.plan-extra-actions small{color:var(--muted);font-size:11.5px}

/* ---- V2.7 H3 成功內容標記 ---- */
.cc-winner.is-winner,.library-grid .cc-winner.is-winner{border-color:var(--gold);color:var(--gold)}
.library-grid .cc-winner{margin-top:9px;border:1px solid var(--line);background:var(--surface-2);color:var(--muted);border-radius:9px;padding:6px 9px;font-size:11px;cursor:pointer}
.winner-style{display:flex;align-items:flex-start;gap:10px;margin:12px 0;padding:12px 13px;border:1px solid #3c5541;border-radius:13px;background:#17251d}
.winner-style[hidden]{display:none}
.winner-style input{margin-top:3px;accent-color:#9fbf6a}
.winner-style strong{display:block;font-size:13px}
.winner-style small{display:block;margin-top:4px;color:var(--muted);font-size:11.5px;line-height:1.6}

/* ---- V2.7 H4 危機處理助手 ---- */
.crisis-btn{margin-left:8px}
.live-crisis-dialog{max-width:640px}
.crisis-intro{margin:0 0 12px;color:var(--muted);font-size:12px;line-height:1.75}
.crisis-result{margin-top:16px;display:grid;gap:11px;max-height:52vh;overflow:auto}
.crisis-result[hidden]{display:none}
.crisis-severity{margin:0;font-size:12px;color:var(--muted)}
.crisis-severity.sev-high{color:var(--coral)}
.crisis-severity.sev-medium{color:var(--gold)}
.crisis-block{border:1px solid var(--line);border-radius:13px;background:var(--surface-2);padding:13px}
.crisis-block h4{margin:0;font-size:13px}
.crisis-block>small{display:block;margin-top:3px;color:var(--muted);font-size:11px;line-height:1.6}
.crisis-body{margin-top:9px;font-size:12.5px;line-height:1.75}
.crisis-body p{margin:0 0 7px}
.crisis-block button{margin-top:9px;border:1px solid var(--line);background:var(--surface);color:var(--text);border-radius:9px;padding:6px 10px;font-size:11.5px;cursor:pointer}
.crisis-note{margin:0;color:var(--muted);font-size:11.5px;line-height:1.7}

/* ---- V2.7 H5 新手上路引導 ---- */
.onboard-card[hidden]{display:none}
.onboard-card{margin-bottom:14px;border:1px solid #3c5541;background:linear-gradient(135deg,#17251d,#111814)}
.onboard-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}
.onboard-head h2{margin:2px 0 6px;font-size:21px}
.onboard-head p{margin:0;color:var(--muted);font-size:12.5px;line-height:1.7;max-width:640px}
.onboard-progress{flex:0 0 auto;border:1px solid var(--line);border-radius:999px;padding:6px 12px;color:var(--gold);font-size:12px;font-variant-numeric:tabular-nums}
.onboard-steps{list-style:none;display:grid;gap:9px;margin:16px 0 0;padding:0}
.onboard-steps li{display:grid;grid-template-columns:30px 1fr auto;gap:12px;align-items:center;border:1px solid var(--line);border-radius:13px;background:var(--surface-2);padding:12px 13px}
.onboard-steps li.is-done{opacity:.72}
.onboard-tick{display:grid;place-items:center;width:30px;height:30px;border-radius:50%;border:1px solid var(--line);color:var(--muted);font-size:13px}
.onboard-steps li.is-done .onboard-tick{border-color:var(--green,#65bea3);color:var(--green,#65bea3)}
.onboard-steps strong{display:block;font-size:13.5px}
.onboard-steps small{display:block;margin-top:4px;color:var(--muted);font-size:11.5px;line-height:1.65}
.onboard-ok{font-style:normal;font-size:11.5px;color:var(--green,#65bea3)}

@media(max-width:980px){
  .fu-board{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:720px){
  .fu-board{grid-template-columns:1fr}
  .cost-line{grid-template-columns:80px 1fr auto;grid-template-areas:none}
  .cost-line small{display:none}
  .onboard-steps li{grid-template-columns:26px 1fr}
  .onboard-steps li button,.onboard-ok{grid-column:2}
}

/* 規劃降級提示：明確標示這份計畫不是 ATHENA 依目標規劃的結果。 */
.cp-strategy.is-degraded{border-left-color:#e8b44a;background:rgba(232,180,74,.08);color:#f2d9a5}

/* ==========================================================================
   V3 成長計畫（GrowthPlan）—— 可行性判定、要賣什麼、老闆的待辦清單
   沿用既有的 .bp-* 版面語彙（bp-block／bp-body／bp-table／bp-row／bp-title），
   這裡只補「誠實層」需要的東西：判定橫幅的三種顏色、數字來源標籤的強弱、
   本期實收 vs 合約總值的區隔，以及可以打勾的待辦卡。
   ========================================================================== */
/* 計畫本體不自己捲：捲動歸 .live-cc-dialog（見上面），整份計畫從頭到尾
   只有一個捲軸。 */
.bp-body.gp-body{gap:16px;max-height:none;overflow:visible}
.gp-section{display:grid;gap:9px}
.gp-goal{margin:0;font-size:14px;font-weight:800;line-height:1.6;color:var(--text)}
.gp-goal-meta{margin:-4px 0 0;color:var(--muted);font-size:12px;line-height:1.6}
.gp-goal-meta small{display:block;margin-top:3px;font-size:11.5px;color:var(--muted)}
.gp-strategy{margin:0;padding:11px 13px;border-left:3px solid var(--gold);border-radius:0 10px 10px 0;background:#0e1613;color:var(--text);font-size:13px;line-height:1.75}
.gp-note-line{margin:0;color:var(--muted);font-size:12px;line-height:1.7}
.gp-empty-line{margin:0;color:var(--muted);font-size:12.5px;line-height:1.7}
.gp-group-title{display:block;margin:4px 0 0;font-size:12px;letter-spacing:.04em;color:var(--gold)}
.gp-group-title.is-slow{color:var(--muted)}

/* AI 只寫字的那一半失敗了：數字仍可信，但要說出來。 */
.gp-degraded{padding:10px 12px;border:1px dashed #e8b44a;border-radius:11px;background:rgba(232,180,74,.08);color:#f2d9a5;font-size:12.5px;line-height:1.7}

/* ---- a. 可行性判定橫幅：整份計畫最大的一塊 ---- */
.gp-verdict{display:grid;gap:9px;padding:14px 15px;border:1px solid var(--line);border-radius:14px;background:var(--surface-2)}
.gp-verdict.is-ok{border-color:#33705c;background:linear-gradient(135deg,#122820,#0f1a17)}
.gp-verdict.is-warn{border-color:#8a7038;background:linear-gradient(135deg,#241f13,#161611)}
.gp-verdict.is-bad{border-color:#8c433a;background:linear-gradient(135deg,#2a1614,#1a1210)}
.gp-verdict-head{display:grid;grid-template-columns:34px minmax(0,1fr);gap:11px;align-items:start}
.gp-verdict-head em{font-style:normal;font-size:26px;line-height:1}
.gp-verdict-head b{display:block;font-size:12px;letter-spacing:.08em;color:var(--muted)}
.gp-verdict.is-ok .gp-verdict-head b{color:var(--green)}
.gp-verdict.is-warn .gp-verdict-head b{color:var(--gold)}
.gp-verdict.is-bad .gp-verdict-head b{color:var(--danger)}
.gp-verdict-head strong{display:block;margin-top:4px;font-size:16px;line-height:1.55;color:var(--text)}
.gp-reasons{margin:0;padding-left:18px;display:grid;gap:5px}
.gp-reasons li{margin:0;color:var(--muted);font-size:12.5px;line-height:1.75}
.gp-risk{margin:0;padding:9px 11px;border-radius:10px;background:#00000030;color:var(--text);font-size:12.5px;line-height:1.7}
.gp-risk b{display:block;margin-bottom:3px;font-size:11.5px;letter-spacing:.06em;color:var(--danger)}
.gp-verdict-more{margin:0;color:var(--muted);font-size:12px;line-height:1.7}

/* 建議調整：唯一一顆能「一鍵換一個做得到的目標」的按鈕 */
.gp-adjust{display:grid;gap:7px;padding:13px 14px;border:1px solid var(--gold);border-radius:13px;background:#1b1a12}
.gp-adjust>b{font-size:11.5px;letter-spacing:.06em;color:var(--gold)}
.gp-adjust>strong{font-size:15px;line-height:1.5;color:var(--text)}
.gp-adjust p{margin:0;color:#e6d7a8;font-size:12.5px;line-height:1.75}
.gp-adjust-go{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:2px}
.gp-adjust-go small,.gp-adjust>small{color:var(--muted);font-size:11.5px;line-height:1.6}
.gp-adjust-go .primary-btn{padding:9px 14px;font-size:13px}

/* ---- b. 現況 → 目標 ---- */
.gp-two-col{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.gp-col{display:grid;gap:7px;align-content:start;padding:12px;border:1px solid var(--line);border-radius:12px;background:#0e1613}
.gp-col.is-need{border-color:#4b4630;background:#151610}
.gp-col-title{font-size:11.5px;letter-spacing:.06em;color:var(--muted)}
.gp-col.is-need .gp-col-title{color:var(--gold)}
.gp-facts{display:grid;gap:6px}
.gp-fact{display:flex;align-items:baseline;gap:7px;flex-wrap:wrap}
.gp-fact>span{min-width:88px;color:var(--muted);font-size:11.5px}
.gp-fact>strong{font-size:14px;font-variant-numeric:tabular-nums;color:var(--text)}
.gp-fact>i{font-style:normal;color:var(--muted);font-size:11px}
.gp-fact .gp-note{flex-basis:100%;margin-top:2px;color:var(--muted);font-size:11.5px;line-height:1.65}
.gp-gap-line{margin:0;font-size:13px;line-height:1.7;color:var(--text)}
.gp-gap-line b{font-size:15px;color:var(--gold)}
.gp-gap-real{margin:0;color:var(--muted);font-size:12.5px;line-height:1.7}
.gp-gap-real b{color:var(--text)}
.gp-gaps{padding:9px 12px;border:1px dashed var(--line);border-radius:10px;background:#0e1613}
.gp-gaps b{display:block;margin-bottom:4px;font-size:11.5px;color:var(--gold)}
.gp-gaps ul{margin:0;padding-left:16px;display:grid;gap:3px}
.gp-gaps li{margin:0;color:var(--muted);font-size:11.5px;line-height:1.7}
.gp-warn-line{margin:0;padding:9px 11px;border-left:3px solid var(--danger);border-radius:0 9px 9px 0;background:rgba(235,130,118,.09);color:#f0cdc6;font-size:12.5px;line-height:1.7}
.gp-warn-line b{color:var(--danger)}

/* ---- 數字來源標籤：measured／configured 看起來要比 benchmark／assumed 有份量 ---- */
.gp-src{border:1px solid transparent;border-radius:99px;padding:2px 8px;font-size:10.5px;line-height:1.5;background:transparent;color:var(--muted);cursor:help}
.gp-src.is-measured{border-color:#3a7561;background:#16302a;color:#8fe0c4;font-weight:700}
.gp-src.is-configured{border-color:#3d5f86;background:#152435;color:#a9c8f0;font-weight:700}
.gp-src.is-benchmark{border-style:dashed;border-color:#4a4638;color:#b8ac8c}
.gp-src.is-assumed{border-style:dashed;border-color:#4a4038;color:#a8968c;font-style:italic}

/* ---- c. 要賣什麼 ---- */
.gp-mix-legend{margin:0;color:var(--muted);font-size:11.5px;line-height:1.75}
/* 每一欄都有真正的最小寬度。以前第一欄寫成 minmax(0,1.3fr)：dialog 一窄，那一
   欄就被壓到 0，「COR 旗艦版(首年總價)年繳」會被拆成一個字一行。商品名稱與
   「為什麼」是唯二該伸縮的欄（fr 給最大），其餘欄位一律給固定下限；擠不下時
   走下面的堆疊版，而不是繼續壓。 */
.gp-mix-table .bp-row{grid-template-columns:minmax(132px,1.8fr) minmax(84px,.7fr) minmax(74px,.6fr) minmax(96px,.8fr) minmax(96px,.8fr) minmax(58px,.5fr) minmax(120px,1.6fr)}
.gp-sens-table .bp-row{grid-template-columns:minmax(132px,1.6fr) minmax(72px,.6fr) minmax(84px,.7fr) minmax(88px,.7fr) minmax(90px,.7fr) minmax(86px,.6fr)}
.gp-table .bp-row>span{min-width:0;overflow-wrap:anywhere}
.gp-cash{color:var(--gold);font-weight:800;font-variant-numeric:tabular-nums}
.gp-contract{color:var(--muted);font-variant-numeric:tabular-nums}
.bp-head .gp-cash,.bp-head .gp-contract{font-weight:inherit}
.gp-cycle{display:block;margin-top:3px;color:var(--muted);font-size:11px}
.gp-total-row{background:#0e1613;font-weight:700}
.gp-diff{font-style:normal;padding:2px 8px;border-radius:99px;border:1px solid var(--line);font-size:11px;white-space:nowrap}
.gp-diff.is-easy{border-color:#3a7561;color:#8fe0c4}
.gp-diff.is-medium{border-color:#4a4638;color:#d0c8ae}
.gp-diff.is-hard{border-color:#8c433a;color:#f0b0a6}

/* ---- d. 錢從哪裡來 ---- */
.gp-channels{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px}
.gp-channel{display:grid;gap:8px;align-content:start;padding:12px 13px;border:1px solid var(--line);border-radius:13px;background:var(--surface-2)}
.gp-channel header{display:flex;align-items:baseline;justify-content:space-between;gap:8px;flex-wrap:wrap}
.gp-channel header b{font-size:13.5px;color:var(--text)}
.gp-channel header em{font-style:normal;font-size:11.5px;color:var(--gold);font-variant-numeric:tabular-nums}
.gp-chip-slow{padding:2px 8px;border:1px dashed var(--line);border-radius:99px;color:var(--muted)!important;font-size:10.5px}
.gp-channel-nums{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
.gp-channel-nums span{display:grid;gap:2px;color:var(--muted);font-size:11px}
.gp-channel-nums strong{font-size:13px;color:var(--text);font-variant-numeric:tabular-nums}
.gp-channel p{margin:0;color:var(--muted);font-size:12px;line-height:1.7}
.gp-channel-actions{margin:0;padding-left:16px;display:grid;gap:3px}
.gp-channel-actions li{margin:0;color:var(--text);font-size:12px;line-height:1.65}
/* 打底管道刻意變淡：它不該看起來像本期的錢 */
.gp-channel.is-slow{opacity:.72;border-style:dashed;background:#0e1613}
.gp-channels.is-slow-group{grid-template-columns:1fr}

/* ---- e. 你要親自做的事 ---- */
.gp-tasks-sum{margin:0;padding:9px 12px;border:1px solid #3a7561;border-radius:11px;background:#12241f;color:#a9e0cb;font-size:12.5px;line-height:1.7;font-variant-numeric:tabular-nums}
.gp-week{display:grid;gap:8px;margin-top:4px}
.gp-week-title{font-size:13px;color:var(--gold)}
.gp-week-title em{font-style:normal;margin-left:6px;font-size:11.5px;color:var(--muted)}
.gp-task{display:grid;grid-template-columns:22px minmax(0,1fr);gap:11px;align-items:start;padding:12px 13px;border:1px solid var(--line);border-radius:13px;background:var(--surface-2)}
.gp-task.is-done{opacity:.55}
.gp-task.is-done .gp-task-head strong{text-decoration:line-through}
.gp-task-check{width:20px;height:20px;margin:2px 0 0;accent-color:var(--green);cursor:pointer}
.gp-task-main{display:grid;gap:6px;min-width:0}
.gp-task-head{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.gp-task-head strong{font-size:13.5px;line-height:1.5;color:var(--text)}
.gp-task-chan{font-style:normal;padding:2px 8px;border:1px solid var(--line);border-radius:99px;font-size:11px;color:var(--muted);white-space:nowrap}
.gp-task-min{font-size:11.5px;color:var(--gold);font-variant-numeric:tabular-nums;white-space:nowrap}
.gp-task-main p{margin:0;color:var(--muted);font-size:12.5px;line-height:1.75}
.gp-task-who b{color:var(--text)}
.gp-task-why{font-size:11.5px!important}
.gp-script{display:grid;gap:7px;justify-items:start;padding:10px 11px;border:1px solid #3b4d5f;border-radius:11px;background:#0c141f}
.gp-script b{font-size:11px;letter-spacing:.06em;color:var(--blue)}
.gp-script pre{margin:0;width:100%;white-space:pre-wrap;word-break:break-word;font:inherit;font-size:12.5px;line-height:1.8;color:var(--text)}
.gp-script .quiet-btn{font-size:12px;padding:7px 12px}
.gp-base{display:grid;gap:7px;margin-top:6px;padding:12px 13px;border:1px dashed var(--line);border-radius:13px;background:#0e1613}
.gp-base-sum{margin:0;color:var(--muted);font-size:12px;line-height:1.7}
.gp-base-sum b{color:var(--gold)}
.gp-base-list{margin:0;padding-left:20px;display:grid;gap:6px}
.gp-base-list li{margin:0;color:var(--muted)}
.gp-base-list strong{font-size:13px;color:var(--text)}
.gp-opp-kind{font-style:normal;margin-left:7px;padding:1px 7px;border:1px solid var(--line);border-radius:99px;font-size:10.5px;color:var(--muted)}
.gp-opp-value{margin-left:7px;font-size:11.5px;color:var(--gold);font-variant-numeric:tabular-nums}
.gp-base-list small{display:block;margin-top:2px;color:var(--muted);font-size:11.5px;line-height:1.65}

/* ---- f. 檢核點 ---- */
.gp-checkpoints{margin:0;padding:0;list-style:none;display:grid;gap:10px}
.gp-checkpoints li{display:grid;grid-template-columns:74px minmax(0,1fr);gap:11px;margin:0;padding:11px 12px;border:1px solid var(--line);border-radius:13px;background:var(--surface-2)}
.gp-cp-day{display:inline-grid;place-items:center;align-self:start;padding:5px 8px;border:1px solid var(--line);border-radius:99px;background:#0e1613;color:var(--gold);font-size:11.5px;white-space:nowrap}
.gp-cp-main{display:grid;gap:7px;min-width:0}
.gp-cp-main>strong{font-size:13px;color:var(--text)}
.gp-cp-targets{display:flex;gap:14px;flex-wrap:wrap}
.gp-cp-targets span{display:grid;gap:2px;color:var(--muted);font-size:11px}
.gp-cp-targets b{font-size:13.5px;color:var(--text);font-variant-numeric:tabular-nums}
.gp-cp-check{margin:0;color:var(--muted);font-size:12px;line-height:1.7}
.gp-cp-branch>summary{cursor:pointer;list-style:none;font-size:12px;color:var(--gold)}
.gp-cp-branch>summary::-webkit-details-marker{display:none}
.gp-cp-branch>summary:after{content:" ▾";color:var(--muted)}
.gp-cp-branch[open]>summary:after{content:" ▴"}
.gp-cp-branch ul{margin:5px 0 0;padding-left:17px;display:grid;gap:3px}
.gp-cp-branch li{display:block;margin:0;padding:0;border:0;background:none;color:var(--muted);font-size:12px;line-height:1.7}

/* ---- g. 看數字的人才點的區塊（預設收起來） ---- */
.gp-more{border:1px solid var(--line);border-radius:13px;background:#0e1613;overflow:hidden}
.gp-more>summary{cursor:pointer;list-style:none;padding:11px 13px;font-size:12.5px;color:var(--muted)}
.gp-more>summary::-webkit-details-marker{display:none}
.gp-more>summary:after{content:" ▾"}
.gp-more[open]>summary:after{content:" ▴"}
.gp-more-body{display:grid;gap:10px;padding:0 13px 13px}
.gp-scenarios{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:9px}
.gp-scenario{display:grid;gap:5px;align-content:start;padding:11px 12px;border:1px solid var(--line);border-radius:12px;background:var(--surface-2)}
.gp-scenario>b{font-size:13px;color:var(--text)}
.gp-scenario span{display:grid;gap:1px;color:var(--muted);font-size:11px}
.gp-scenario strong{font-size:12.5px;color:var(--text);font-variant-numeric:tabular-nums}
.gp-scenario p{margin:3px 0 0;color:var(--muted);font-size:11px;line-height:1.65}
.gp-scenario-flag{font-style:normal;justify-self:start;padding:2px 8px;border-radius:99px;border:1px solid var(--line);font-size:10.5px}
.gp-scenario.is-hit .gp-scenario-flag{border-color:#3a7561;color:#8fe0c4}
.gp-scenario.is-miss .gp-scenario-flag{border-color:#8c433a;color:#f0b0a6}
.gp-verdict-chip{font-style:normal;padding:2px 8px;border-radius:99px;border:1px solid var(--line);font-size:10.5px;white-space:nowrap}
.gp-verdict-chip.is-ok{border-color:#3a7561;color:#8fe0c4}
.gp-verdict-chip.is-warn{border-color:#8a7038;color:#e5cf95}
.gp-verdict-chip.is-bad{border-color:#8c433a;color:#f0b0a6}

/* 進度 dialog 上的判定橫幅（縮小版） */
.cp-verdict{margin:0 0 12px}
.cp-verdict[hidden]{display:none}
.cp-verdict .gp-verdict-head strong{font-size:14px}

/* 內容卡上的漏斗位置／服務通路／寫給誰 */
.cc-roles{display:flex;gap:6px;flex-wrap:wrap}
.cc-role{font-style:normal;padding:2px 8px;border:1px solid var(--line);border-radius:99px;font-size:10.5px;color:var(--muted);white-space:nowrap}
.cc-role.is-funnel{border-color:#4a5f86;color:#a9c8f0;cursor:help}
.cc-role.is-channel{border-color:#4a4638;color:#d0c8ae}
.cc-role.is-who{border-color:#3a7561;color:#8fe0c4}

/* ---- 計畫裡的表格：擠不下就整列變成一張「欄名｜數值」的卡 ----
   四欄的財務表被壓成窄格之後，數字會失去意義（哪一欄是本期實收？哪一欄是
   合約總值？），所以到這個寬度就不再擠：表頭收起來、每一列變一張小卡、每一
   格自己把欄名帶在左邊。960px 是「dialog 內容寬度剛好還放得下最寬的那張表
   （商品組合，七欄最小合計約 720px）」的分界。
   注意：堆疊與加欄名一定要在同一個斷點，分開寫會出現「已經堆疊、但還沒有
   欄名」的區間——那正是一串沒有標籤的數字。 */
@media(max-width:960px){
  .gp-table .bp-row{grid-template-columns:1fr;gap:5px;padding:12px}
  .gp-table .bp-row.bp-head{display:none}
  .gp-table .bp-row>span[data-label]{display:grid;grid-template-columns:minmax(72px,auto) minmax(0,1fr);gap:10px;align-items:baseline}
  .gp-table .bp-row>span[data-label]:before{content:attr(data-label);color:var(--muted);font-size:11px;white-space:nowrap}
  /* 商品名稱／情況是這張卡的標題，不需要再標一次欄名。 */
  .gp-table .bp-row>span.bp-channel{display:block;font-size:13.5px}
  .gp-table .bp-row>span.bp-channel:before{content:none}
  .gp-table .bp-row>span:empty{display:none}
}
@media(max-width:760px){
  /* 實際 vs 預估對照表走同一套堆疊規則（欄少，撐得比較久才需要收）。 */
  .bp-result-table .bp-row>span[data-label]{display:grid;grid-template-columns:minmax(72px,auto) minmax(0,1fr);gap:10px;align-items:baseline}
  .bp-result-table .bp-row>span[data-label]:before{content:attr(data-label);color:var(--muted);font-size:11px;white-space:nowrap}
  .gp-two-col{grid-template-columns:1fr}
  .gp-channel-nums{grid-template-columns:repeat(2,minmax(0,1fr))}
  .gp-checkpoints li{grid-template-columns:1fr}
  .gp-cp-day{justify-self:start}
}
@media(max-width:720px){
  /* 老闆多半在手機上看這一頁：整個 dialog 佔滿螢幕、由 form 捲動。
     （內部區塊本來就不再各自捲，桌機那一段已經處理掉了。） */
  .live-cc-dialog{width:100%;max-width:100%;height:100%;max-height:100%;border:0;border-radius:0}
  .live-cc-dialog>form{max-height:100vh;overflow:auto;padding:20px 16px calc(28px + env(safe-area-inset-bottom))}
  .bp-body.gp-body{padding:12px}
  .gp-verdict-head{grid-template-columns:28px minmax(0,1fr);gap:9px}
  .gp-verdict-head em{font-size:22px}
  .gp-verdict-head strong{font-size:15px}
  .gp-task{grid-template-columns:24px minmax(0,1fr);padding:12px}
  .gp-task-check{width:24px;height:24px}
  .gp-script .quiet-btn{width:100%;min-height:44px}
  .gp-adjust-go .primary-btn{width:100%;min-height:46px}
  .gp-fact>span{min-width:76px}
}

/* ---------------------------------------------------------------------------
   設定中心：營業時間、老闆專線與轉真人通知
   （以前這兩組設定完全沒有介面：營業時間根本不存在，owner_line_uid 只有程式
   讀得到、沒有人寫得進去。）
   --------------------------------------------------------------------------- */
.business-hours{margin-top:20px;padding-top:18px;border-top:1px solid var(--line)}
.business-hours h4{margin:0 0 5px;font-size:14px;color:var(--gold)}
.business-hours>p{margin:0 0 12px;color:var(--muted);font-size:12px;line-height:1.7}
.hours-grid{display:grid;gap:8px}
.hours-row{display:grid;grid-template-columns:76px 74px 1fr 24px 1fr;align-items:center;gap:8px}
.hours-row>span{font-size:13px;color:var(--text)}
.hours-row em{font-style:normal;text-align:center;color:var(--muted);font-size:12px}
.hours-row .hours-closed{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--muted);cursor:pointer}
.hours-row input[type=time]{width:100%;min-height:40px;border:1px solid var(--line);border-radius:10px;padding:0 10px;background:#0d1512;color:var(--text);font-size:13px}
.hours-row input[type=time]:disabled{opacity:.45}
.service-live-settings{margin-top:20px;padding-top:18px;border-top:1px solid var(--line)}
.service-live-settings h4{margin:0 0 5px;font-size:14px;color:var(--gold)}
.service-live-settings>p{margin:0 0 12px;color:var(--muted);font-size:12px;line-height:1.7}
.service-uid-hint{margin:10px 0 14px;color:var(--muted);font-size:12px;line-height:1.7}
@media(max-width:640px){
  .hours-row{grid-template-columns:1fr 1fr;grid-template-areas:"day closed" "open close";gap:6px}
  .hours-row>span{grid-area:day}
  .hours-row .hours-closed{grid-area:closed;justify-self:end}
  .hours-row .hours-open{grid-area:open}
  .hours-row .hours-close{grid-area:close}
  .hours-row em{display:none}
}

/* ---------------------------------------------------------------------------
   P0-3 待核准頁（live.js 動態建立）
   對外發布與群發被伺服器擋下來之後，老闆要有地方看到「卡在哪、卡在誰身上」。
   沿用既有 token：--line／--surface／--surface-2／--muted／--gold／--coral，
   卡片外框與 .pending-card、.fu-card 同一套語言。
   --------------------------------------------------------------------------- */
.approval-summary{margin-bottom:14px;padding:20px 22px;border:1px solid var(--line);border-radius:18px;background:linear-gradient(135deg,#1a2119,#111814)}
.approval-summary h2{margin:6px 0 0;font-size:22px;line-height:1.35}
.approval-blocked{margin:12px 0 0;padding:11px 13px;border-left:3px solid var(--coral);border-radius:0 10px 10px 0;background:#241a18;color:#efc6bd;font-size:12.5px;line-height:1.75}
.approval-blocked[hidden]{display:none}
.approval-list{display:grid;gap:12px}
.approval-card{display:grid;gap:11px;border:1px solid var(--line);border-radius:16px;background:var(--surface);padding:18px}
.approval-head h3{margin:8px 0 4px;font-size:16px}
.approval-head small{display:block;color:var(--muted);font-size:11.5px;line-height:1.6}
.approval-detail{display:grid;gap:8px}
.approval-detail>div{display:grid;gap:4px;padding:11px 12px;border-radius:11px;background:var(--surface-2)}
.approval-detail span{color:var(--muted);font-size:11px}
.approval-detail strong{font-size:13px;font-weight:600;line-height:1.7;white-space:pre-wrap;word-break:break-word}
.approval-record{margin:0;padding:10px 12px;border-left:3px solid var(--gold);border-radius:0 10px 10px 0;background:#1b1c12;color:#e3d6a8;font-size:12.5px;line-height:1.75}
.approval-note{margin:0;color:var(--muted);font-size:12.5px;line-height:1.75}
.approval-actions{display:flex;flex-wrap:wrap;gap:8px}
.approval-actions button{padding:10px 16px;font-size:13.5px}
@media(max-width:720px){
  .approval-summary{padding:16px}
  .approval-summary h2{font-size:19px}
  .approval-card{padding:15px}
  .approval-actions{display:grid}
}

/* ============================================================================
   CSP：把 style="…" 全部換成 class／CSS 變數（style-src 不再有 'unsafe-inline'）
   ----------------------------------------------------------------------------
   為什麼要有這一段：CSP 的 style-src 一旦拿掉 'unsafe-inline'，瀏覽器就會**忽略
   HTML 裡所有的 style="…" 屬性**（MDN：Inline style attributes are also blocked；
   `setAttribute("style", …)` 與 `style.cssText` 同樣被擋）。原本 index.html／
   app.js／live.js 共有 17 處進度條寬度是用 style="…" 寫的，全部改到這裡。

   兩條路，各自的適用範圍寫清楚，不要混用：

   1. **靜態的值**（index.html 裡寫死的展示數字）→ 用下面的 .w-NN 類別。
      它們只是「把 --w 設成某個定值」的一行 class，不是新的排版系統；需要新的
      數字就在這裡加一行，不要退回 style="…"。

   2. **執行期算出來的值**（live.js 的 pct）→ 由 JS 走 CSSOM 設定：
        el.style.setProperty("--w", pct + "%")
      這條路**不受 CSP 管**——MDN 明講「styles properties that are set directly
      on the element's style property will not be blocked」。被擋的只有
      style 屬性、setAttribute("style", …) 與 cssText 這三種。
      live.js 的 applyBarWidths() 就是做這件事：HTML 片段先寫 data-w="60"，
      插進 DOM 之後再由它把 data-w 轉成 --w。
   ========================================================================== */

/* 所有進度條的寬度都改讀 --w，沒設就是 0（不是 auto——auto 會變成整條滿格）。 */
.funnel i:after{width:var(--w,0%)}
.campaign-progress em{width:var(--w,0%)}
.usage-meter i{width:var(--w,0%)}
.usage-line em{width:var(--w,0%)}
.cost-line em{width:var(--w,0%)}
/* cp-progress 的進度是由 live.js 直接寫 el.style.width（CSSOM，同樣不受 CSP 管），
   這裡只負責「還沒被寫過之前是 0」。 */
.cp-progress i{width:0}
/* 規劃中那條是跑馬燈（cpSweep），寬度只是光帶的長度，固定 38%。 */
.campaign-progress.is-planning em{--w:38%}

/* 靜態展示值。用到才加，一行一個。 */
.w-24{--w:24%}
.w-30{--w:30%}
.w-46{--w:46%}
.w-60{--w:60%}
.w-72{--w:72%}
.w-100{--w:100%}

/* 其餘四處原本寫在 style 屬性裡的樣式，同樣搬過來（app.js／live.js）。 */
/* live.js showDesignImage()：CURRENT DIRECTION 區的品牌視覺 */
.visual-grid .brand-visual-img{max-width:100%;border-radius:8px;grid-column:1/-1}
/* live.js 客服對話：外送訊息底下那行「誰 · 什麼時候」 */
.message small{display:block;opacity:.72;margin-top:4px}

/* ---- 產出圖片的三種狀態（live.js 的 imageSlotHtml／hydrateStorageImages）----
   bucket 是 private，output.image_url 存的是物件路徑而不是網址，所以圖片一定要
   先跟 API 換一組 signed URL 才載入得了。換的那段期間畫的是**沒有 src 的 <img>**：
   沒有東西要載入 → 沒有 error → 沒有瀏覽器的破圖圖示 [?]，只有底下這個中性底。
   （這一段刻意全部做在同一個 <img> 上，不換節點，也不需要行內樣式。） */
.apollo-img{display:block;max-width:100%}
.apollo-img.is-loading,.apollo-img.is-failed{
  color:transparent;font-size:0;text-align:center;overflow:hidden;
  border-radius:inherit;background:var(--surface-2);border:1px solid var(--line)}
/* 載入中：低調的光帶掃過，看得出來「在做事」，但不會像錯誤。 */
.apollo-img.is-loading{
  background-image:linear-gradient(100deg,transparent 20%,rgba(255,255,255,.07) 42%,transparent 64%);
  background-size:220% 100%;animation:apolloImgSweep 1.25s linear infinite}
@keyframes apolloImgSweep{from{background-position:120% 0}to{background-position:-120% 0}}
/* 失敗：明確、看得懂、按得下去。文案是 alt（沒有 src 的 <img> 顯示的就是 alt）。 */
.apollo-img.is-failed{
  color:var(--muted);font-size:10.5px;line-height:1.45;font-style:normal;
  padding:6px;cursor:pointer;border-style:dashed;border-color:var(--danger);
  animation:none;background-image:none}
.apollo-img.is-failed:hover,.apollo-img.is-failed:focus-visible{color:var(--text);border-color:var(--gold)}
/* 貼文預覽（.post-visual）裡的失敗狀態有整格寬度，字可以大一點。 */
.post-visual .apollo-img.is-loading,.post-visual .apollo-img.is-failed{min-height:250px;width:100%}
.post-visual .apollo-img.is-failed{font-size:13px;padding:20px}
@media(max-width:720px){.post-visual .apollo-img.is-loading,.post-visual .apollo-img.is-failed{min-height:210px}}

/* 由「賣幾套」推算出來的金額。刻意排在主目標下方且視覺較弱——它不是老闆
   設定的目標，把它做得跟主目標一樣醒目，就是重犯「把套數換算成營業額」
   那個錯。算不出來的欄位顯示「需補價格／合約假設」，不留空、也不猜。 */
.gp-money{margin:14px 0 0;padding:14px 16px;border:1px dashed var(--line);border-radius:12px;background:#0f1a15}
.gp-money h4{margin:0 0 4px;font-size:13px;color:var(--muted);font-weight:800}
.gp-money-note{margin:0 0 10px;color:var(--muted);font-size:12px;line-height:1.7}
.gp-money-list{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.gp-money-list li{display:grid;grid-template-columns:minmax(96px,auto) 1fr;gap:4px 12px;align-items:baseline}
.gp-money-label{color:var(--muted);font-size:12px}
.gp-money-value{color:var(--text);font-weight:700;font-size:14px}
.gp-money-list small{grid-column:1/-1;color:var(--muted);font-size:11px;line-height:1.6}
@media(max-width:720px){.gp-money-list li{grid-template-columns:1fr}}

/* ── 尚未翻譯的段落：顯示原文，但要看得出來是原文 ──────────────────────
 *
 * 規則見 apps/api/src/plan-i18n/prose.mjs 檔頭。簡述：拿不到目標語言的譯文時
 * 顯示可信的原文，而不是把內容藏起來；代價是畫面會混語言，所以**必須**有一個
 * 看得見的標記，否則使用者會以為那段已經翻好了。
 *
 * 這組樣式以前不存在——live.js 一直在輸出 .gp-untranslated 與
 * data-untranslated="1"，但沒有任何 CSS 接它，所以那個「明確的缺口」在畫面上
 * 其實是隱形的。標記沒有樣式，等於沒有標記。
 */
.gp-untranslated{
  position:relative;
  border-left:2px solid var(--warn,#d8a33a);
  padding-left:9px;
  background:#d8a33a0f;
}
.gp-source-tag{
  display:inline-block;
  margin-left:6px;
  padding:1px 6px;
  border:1px solid var(--warn,#d8a33a);
  border-radius:999px;
  font-size:10.5px;
  letter-spacing:.04em;
  line-height:1.6;
  color:var(--warn,#d8a33a);
  white-space:nowrap;
  vertical-align:baseline;
}
