  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
  /* ── Light mode (default) — Manus-style neutral palette
        (2026-05-21 V1.3 user feedback: "浅色不要偏黄").
        Previous Hermes warm-gold base tokens lived here; preserved
        below in comments for fast rollback. Accent stays brand-gold
        (#B8860B) — only the surface/text/border layer goes neutral.
     ── */
  :root {
    /* Surface layer — neutral white/gray (was #FEFCF7/#FAF7F0/#F3EEE3) */
    --bg:#FAFAFA;--sidebar:#F5F5F5;--border:#E5E5E5;--border2:rgba(0,0,0,0.15);
    --surface:#FFFFFF;--topbar-bg:rgba(255,255,255,.98);--main-bg:rgba(250,250,250,0.5);
    --code-bg:#F4F4F5;
    /* Text — pure neutral (was #1A1610/#5C5344) */
    /* 2026-07-22 · --muted 由 #737373 提到 #6E6E6E:旧值在最深的浅色底 --sidebar(#F5F5F5)
       上只有 4.35:1,不过 AA(4.5)。它在 #FFFFFF/#FAFAFA 上是过的,所以只在侧栏/卡片语境
       里失败 —— 全站 8 个页面共 41 处命中,是单点 token 问题而非零散偏差。
       #6E6E6E 在三种浅底上最差 4.68:1。 */
    --text:#0A0A0A;--muted:#6E6E6E;
    /* Accent — KEEP brand gold (Hermes identity, used across 6 skins) */
    --accent:#B8860B;--blue:#0288A8;--gold:#8B6508;
    --focus-ring:rgba(184,134,11,.35);--focus-glow:rgba(184,134,11,.1);
    --input-bg:rgba(0,0,0,.03);--hover-bg:rgba(0,0,0,.05);
    --strong:#0A0A0A;--em:#3F3F3F;--code-text:#8b4513;--code-inline-bg:rgba(0,0,0,.06);--pre-text:#0A0A0A;
    --accent-hover:#996F08;--accent-bg:rgba(184,134,11,0.08);--accent-bg-strong:rgba(184,134,11,0.15);--accent-text:#8B6508;
    --error:#C62828;--success:#3D8B40;--warning:#E68A00;--info:#0288A8;
    --radius-sm:4px;--radius-md:8px;--radius-card:8px;--radius-lg:12px;--radius-pill:999px;
    --space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;
    --font-size-xs:11px;--font-size-sm:12px;--font-size-md:14px;
    --font-ui:-apple-system,BlinkMacSystemFont,"Segoe UI",Inter,system-ui,sans-serif;
    --surface-subtle:rgba(0,0,0,.025);--surface-subtle-hover:rgba(0,0,0,.045);
    --border-subtle:rgba(0,0,0,.08);--border-muted:rgba(0,0,0,.12);
    --ui-page-max:960px;--ui-card-bg:var(--surface);--ui-card-border:var(--border);
    --ui-card-radius:var(--radius-card);--ui-control-radius:var(--radius-md);
    --ui-card-shadow-hover:0 3px 12px rgba(0,0,0,.06);
    --ui-dialog-bg:var(--surface);--ui-dialog-border:var(--border);
    --ui-dialog-radius:var(--radius-md);--ui-dialog-backdrop:rgba(0,0,0,.52);
    --ui-dialog-shadow:0 24px 64px rgba(0,0,0,.28);
    --ui-dialog-head-padding:18px 20px;--ui-dialog-body-padding:20px;
    font-family:var(--font-ui);font-size:14px;line-height:1.6;
  }
  /* ── Font size modifiers ── */
  /* ── Font size preference: scale key UI text elements ── */
  /* Default is 14px (no attribute needed). Small=12px, Large=16px.            */
  /* We override the px values directly on key containers since most of the     */
  /* stylesheet uses hardcoded px — changing :root font-size alone only affects */
  /* the small number of em/rem values.                                         */

  /* Sidebar session list */
  :root[data-font-size="small"] .session-item { font-size: 11px; }
  :root[data-font-size="large"] .session-item { font-size: 15px; }
  :root[data-font-size="small"] .session-meta { font-size: 10px; }
  :root[data-font-size="large"] .session-meta { font-size: 13px; }
  :root[data-font-size="small"] .session-title-input { font-size: 11px; }
  :root[data-font-size="large"] .session-title-input { font-size: 15px; }

  /* Chat message body */
  :root[data-font-size="small"] .msg-body { font-size: 12px; }
  :root[data-font-size="large"] .msg-body { font-size: 16px; }
  :root[data-font-size="small"] .msg-body h1 { font-size: 21px; }
  :root[data-font-size="large"] .msg-body h1 { font-size: 27px; }
  :root[data-font-size="small"] .msg-body h2 { font-size: 17px; }
  :root[data-font-size="large"] .msg-body h2 { font-size: 23px; }
  :root[data-font-size="small"] .msg-body h3 { font-size: 15px; }
  :root[data-font-size="large"] .msg-body h3 { font-size: 20px; }
  :root[data-font-size="small"] .msg-body h4 { font-size: 13px; }
  :root[data-font-size="large"] .msg-body h4 { font-size: 17px; }
  :root[data-font-size="small"] .msg-body h5 { font-size: 12px; }
  :root[data-font-size="large"] .msg-body h5 { font-size: 16px; }
  :root[data-font-size="small"] .msg-body h6 { font-size: 11px; }
  :root[data-font-size="large"] .msg-body h6 { font-size: 15px; }
  :root[data-font-size="small"] .msg-body code { font-size: 10.5px; }
  :root[data-font-size="large"] .msg-body code { font-size: 14.5px; }
  :root[data-font-size="small"] .msg-body pre code { font-size: 11px; }
  :root[data-font-size="large"] .msg-body pre code { font-size: 15px; }
  :root[data-font-size="small"] .msg-body table { font-size: 11px; }
  :root[data-font-size="large"] .msg-body table { font-size: 14px; }

  /* Composer textarea (default is 16px in stylesheet) */
  :root[data-font-size="small"] #msg { font-size: 14px; }
  :root[data-font-size="large"] #msg { font-size: 18px; }

  /* Workspace file tree */
  :root[data-font-size="small"] .file-item { font-size: 11px; }
  :root[data-font-size="large"] .file-item { font-size: 14px; }

  /* App-level base — keeps em/rem values scaling correctly */
  :root[data-font-size="small"] { font-size: 12px; }
  :root[data-font-size="large"] { font-size: 16px; }
  /* ── Dark mode — navy-black + gold accent matching Hermes terminal ── */
  :root.dark {
    --bg:#0D0D1A;--sidebar:#141425;--border:#2A2A45;--border2:rgba(255,255,255,0.14);
    --text:#FFF8DC;--muted:#C0C0C0;--accent:#FFD700;--blue:#4DD0E1;--gold:#FFBF00;--code-bg:#1A1A2E;
    --surface:#1A1A2E;--topbar-bg:rgba(20,20,37,.98);--main-bg:rgba(13,13,26,0.5);
    --focus-ring:rgba(255,215,0,.35);--focus-glow:rgba(255,215,0,.08);
    --input-bg:rgba(255,255,255,.04);--hover-bg:rgba(255,255,255,.06);
    --strong:#fff;--em:#C0C0C0;--code-text:#f0c27f;--code-inline-bg:rgba(0,0,0,.35);--pre-text:#e2e8f0;
    --accent-hover:#FFBF00;--accent-bg:rgba(255,215,0,0.08);--accent-bg-strong:rgba(255,215,0,0.15);--accent-text:#FFD700;
    --error:#EF5350;--success:#4CAF50;--warning:#FFA726;--info:#4DD0E1;
    --surface-subtle:rgba(255,255,255,.025);--surface-subtle-hover:rgba(255,255,255,.045);
    --border-subtle:rgba(255,255,255,.075);--border-muted:rgba(255,255,255,.12);
  }
  /* ── Skin: Default (gold — matches base) ── */
  /* No overrides needed — :root and .dark already use gold accent */
  /* ── Skin: Ares (red) ── */
  :root[data-skin="ares"]{--accent:#C0392B;--accent-hover:#A93226;--accent-bg:rgba(192,57,43,0.08);--accent-bg-strong:rgba(192,57,43,0.15);--accent-text:#922B21;}
  :root.dark[data-skin="ares"]{--accent:#FF4444;--accent-hover:#CC3333;--accent-bg:rgba(255,68,68,0.08);--accent-bg-strong:rgba(255,68,68,0.15);--accent-text:#FF4444;}
  /* ── Skin: Mono (gray) ── */
  :root[data-skin="mono"]{--accent:#666666;--accent-hover:#555555;--accent-bg:rgba(102,102,102,0.08);--accent-bg-strong:rgba(102,102,102,0.15);--accent-text:#555555;}
  :root.dark[data-skin="mono"]{--accent:#CCCCCC;--accent-hover:#999999;--accent-bg:rgba(204,204,204,0.08);--accent-bg-strong:rgba(204,204,204,0.15);--accent-text:#CCCCCC;}
  /* ── Skin: Slate (blue-gray) ── */
  :root[data-skin="slate"]{--accent:#475569;--accent-hover:#334155;--accent-bg:rgba(71,85,105,0.08);--accent-bg-strong:rgba(71,85,105,0.15);--accent-text:#334155;}
  :root.dark[data-skin="slate"]{--accent:#94A3B8;--accent-hover:#64748B;--accent-bg:rgba(148,163,184,0.08);--accent-bg-strong:rgba(148,163,184,0.15);--accent-text:#94A3B8;}
  /* ── Skin: Poseidon (ocean blue) ── */
  :root[data-skin="poseidon"]{--accent:#0369A1;--accent-hover:#025080;--accent-bg:rgba(3,105,161,0.08);--accent-bg-strong:rgba(3,105,161,0.15);--accent-text:#025080;}
  :root.dark[data-skin="poseidon"]{--accent:#0EA5E9;--accent-hover:#0284C7;--accent-bg:rgba(14,165,233,0.08);--accent-bg-strong:rgba(14,165,233,0.15);--accent-text:#0EA5E9;}
  /* ── Skin: Sisyphus (purple) ── */
  :root[data-skin="sisyphus"]{--accent:#7C3AED;--accent-hover:#6D28D9;--accent-bg:rgba(124,58,237,0.08);--accent-bg-strong:rgba(124,58,237,0.15);--accent-text:#6D28D9;}
  :root.dark[data-skin="sisyphus"]{--accent:#A78BFA;--accent-hover:#8B5CF6;--accent-bg:rgba(167,139,250,0.08);--accent-bg-strong:rgba(167,139,250,0.15);--accent-text:#A78BFA;}
  /* ── Skin: Charizard (orange) ── */
  :root[data-skin="charizard"]{--accent:#EA580C;--accent-hover:#C2410C;--accent-bg:rgba(234,88,12,0.08);--accent-bg-strong:rgba(234,88,12,0.15);--accent-text:#C2410C;}
  :root.dark[data-skin="charizard"]{--accent:#FB923C;--accent-hover:#F97316;--accent-bg:rgba(251,146,60,0.08);--accent-bg-strong:rgba(251,146,60,0.15);--accent-text:#FB923C;}
  /* ── Skin: Sienna (warm clay & sand earth palette) ──
     Full palette rewrite (not just --accent): warm off-white surface,
     soft sand sidebar, clay accent. Sets --user-bubble-* for the redesigned
     user bubble block, mutes tool-card chrome to neutral, and bumps the
     reading column to a serif body for long-form prose. Opt-in via the
     Settings → Skin picker; default skin stays "default" (gold). */
  :root[data-skin="sienna"]{
    --bg:#FAF9F5;--sidebar:#F0EEE6;--surface:#FFFFFF;
    --border:#E7E4DB;--border2:#D7D3C7;
    --text:#1F1E1C;--muted:#6B6A63;--strong:#141311;--em:#3E3D39;
    --accent:#D97757;--accent-hover:#BF6545;--accent-text:#A55237;
    --accent-bg:rgba(217,119,87,0.09);--accent-bg-strong:rgba(217,119,87,0.18);
    --code-bg:#F5F3EC;--code-inline-bg:rgba(20,19,17,0.06);--code-text:#8A3E1A;--pre-text:#1F1E1C;
    --topbar-bg:rgba(250,249,245,0.96);--main-bg:rgba(250,249,245,0.55);
    --input-bg:rgba(20,19,17,0.035);--hover-bg:rgba(20,19,17,0.05);
    --focus-ring:rgba(217,119,87,0.3);--focus-glow:rgba(217,119,87,0.1);
    --blue:#2E6F9E;--gold:#A55237;
    --user-bubble-bg:#ECE9DF;--user-bubble-border:#DED9CC;
    --user-bubble-text:#1F1E1C;--user-bubble-placeholder:#6B6A63;
    --user-selection-bg:rgba(217,119,87,0.28);--user-selection-text:#1F1E1C;
  }
  :root.dark[data-skin="sienna"]{
    --bg:#1F1E1C;--sidebar:#262522;--surface:#2C2B28;
    --border:#3A3935;--border2:#4A4843;
    --text:#EDEBE3;--muted:#A3A197;--strong:#F7F5ED;--em:#C9C6BC;
    --accent:#E0896D;--accent-hover:#D97757;--accent-text:#E6A88A;
    --accent-bg:rgba(224,137,109,0.12);--accent-bg-strong:rgba(224,137,109,0.22);
    --code-bg:#2A2926;--code-inline-bg:rgba(255,255,255,0.07);--code-text:#F0B593;--pre-text:#EDEBE3;
    --topbar-bg:rgba(38,37,34,0.96);--main-bg:rgba(31,30,28,0.55);
    --input-bg:rgba(255,255,255,0.045);--hover-bg:rgba(255,255,255,0.07);
    --focus-ring:rgba(224,137,109,0.35);--focus-glow:rgba(224,137,109,0.1);
    --blue:#8BB8D6;--gold:#E6A88A;
    --user-bubble-bg:#34322E;--user-bubble-border:#42403B;
    --user-bubble-text:#EDEBE3;--user-bubble-placeholder:#A3A197;
    --user-selection-bg:rgba(224,137,109,0.3);--user-selection-text:#F7F5ED;
  }
  /* Specificity boosted to beat the :root:not(.dark) .new-chat-btn rule that
     sets color:var(--accent-text) — without this, the solid-accent background
     would collide with the inherited text color, producing clay-on-clay text. */
  :root[data-skin="sienna"]:not(.dark) .new-chat-btn,
  :root.dark[data-skin="sienna"] .new-chat-btn{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600;box-shadow:0 1px 2px rgba(20,19,17,0.08);}
  :root[data-skin="sienna"]:not(.dark) .new-chat-btn:hover,
  :root.dark[data-skin="sienna"] .new-chat-btn:hover{background:var(--accent-hover);border-color:var(--accent-hover);color:#fff;}
  /* Tool / thinking cards: mute the blue-ish Hermes highlights to neutral */
  :root[data-skin="sienna"] .tool-card{background:rgba(20,19,17,0.025);border-color:var(--border);border-radius:10px;}
  :root[data-skin="sienna"] .tool-card:hover{border-color:var(--border2);}
  :root[data-skin="sienna"] .tool-card-running{background:var(--accent-bg);border-color:var(--accent-bg-strong);}
  :root[data-skin="sienna"] .tool-card-name{color:var(--muted);font-weight:500;}
  :root[data-skin="sienna"] .tool-arg-key{color:var(--accent-text);}
  :root[data-skin="sienna"] .tool-card-more{color:var(--accent-text);}
  :root[data-skin="sienna"] .tool-card-running-dot{background:var(--accent);}
  :root.dark[data-skin="sienna"] .tool-card{background:rgba(255,255,255,0.03);}
  /* User bubble: soft sand pill, not a saturated accent fill */
  :root[data-skin="sienna"] .msg-row[data-role="user"] .msg-body{border-radius:16px;padding:12px 16px;}
  :root[data-skin="sienna"] .msg-row[data-role="user"] .msg-body code{color:var(--user-bubble-text);background:rgba(20,19,17,0.08);}
  /* Send button pop and active session indicator */
  :root[data-skin="sienna"] button.send-btn {box-shadow:0 1px 3px rgba(217,119,87,0.3);}
  :root[data-skin="sienna"] button.send-btn:hover {box-shadow:0 2px 8px rgba(217,119,87,0.45);}
  :root[data-skin="sienna"] .session-item.active{border-left:2px solid var(--accent);}
  :root[data-skin="sienna"] .composer-box{border-radius:18px;}

  /* #594: app-dialog light mode controls */
  :root:not(.dark) .app-dialog-input{
    background:rgba(0,0,0,.04);border-color:rgba(0,0,0,.2);
  }
  :root:not(.dark) .app-dialog-input:focus{
    border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-bg);
  }
  :root:not(.dark) .app-dialog-close{
    background:rgba(0,0,0,.04);
  }
  :root:not(.dark) .app-dialog-close:hover{background:rgba(0,0,0,.09);}
  :root:not(.dark) .app-dialog-btn{background:rgba(0,0,0,.04);}
  :root:not(.dark) .app-dialog-btn:hover{background:rgba(0,0,0,.09);}
  :root:not(.dark) .app-dialog-btn.confirm{
    border-color:var(--accent);background:var(--accent-bg);color:var(--accent-text);
  }
  :root:not(.dark) .app-dialog-btn.confirm:hover{background:var(--accent-bg-strong);}
  :root:not(.dark) .file-rename-input{
    background:rgba(0,0,0,.04);
  }
  :root:not(.dark) ::-webkit-scrollbar-thumb{background:rgba(0,0,0,.15);}
  :root:not(.dark) ::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.3);}
  :root:not(.dark) ::selection{background:var(--accent-bg-strong);}
  :root:not(.dark) *{scrollbar-color:rgba(0,0,0,.15) transparent;}
  /* ── Light mode: sidebar, roles, chips, active states ── */
  :root:not(.dark) .session-item{color:var(--muted);}
  :root:not(.dark) .session-item:hover{background:var(--hover-bg);color:var(--text);}
  :root:not(.dark) .session-item.active{background:var(--accent-bg);color:var(--accent-text);}
  :root:not(.dark) .session-item.active .session-title{color:var(--accent-text);}
  :root:not(.dark) .session-pin-indicator{color:var(--accent-text);}
  :root:not(.dark) .session-date-header.pinned{color:var(--accent-text);}
  :root:not(.dark) .session-actions-trigger.active,
  :root:not(.dark) .session-item.menu-open .session-actions-trigger{background:var(--accent-bg);border-color:var(--accent-bg-strong);color:var(--accent-text);}
  :root:not(.dark) .session-action-opt.is-active{background:var(--accent-bg);}
  :root:not(.dark) .msg-role.user{color:var(--accent-text);}
  :root:not(.dark) .msg-role.assistant{color:var(--muted);}
  :root:not(.dark) .role-icon.user{background:var(--accent-bg);color:var(--accent-text);border-color:var(--accent-bg-strong);}
  :root:not(.dark) .role-icon.assistant{background:var(--surface);color:var(--muted);border-color:var(--border);}
  :root:not(.dark) .project-chip{border-color:rgba(0,0,0,.12);background:rgba(0,0,0,.04);}
  :root:not(.dark) .project-chip:hover{background:var(--hover-bg);color:var(--text);}
  :root:not(.dark) .project-chip.active{background:var(--accent-bg);color:var(--accent-text);border-color:var(--accent-bg-strong);}
  :root:not(.dark) .chip{border-color:rgba(0,0,0,.1);background:rgba(0,0,0,.04);}
  :root:not(.dark) .chip.model{color:var(--accent-text);border-color:var(--accent-bg-strong);background:var(--accent-bg);}
  :root:not(.dark) .new-chat-btn{border-color:var(--accent-bg-strong);color:var(--accent-text);}
  :root:not(.dark) .new-chat-btn:hover{background:var(--accent-bg);}
  :root:not(.dark) .sidebar-search input{border-color:rgba(0,0,0,.1);background:rgba(0,0,0,.03);}
  :root:not(.dark) .sidebar-search input:focus{border-color:var(--accent);background:rgba(0,0,0,.02);}
  :root:not(.dark) .cron-item{border-color:rgba(0,0,0,.08);background:rgba(0,0,0,.02);}
  :root:not(.dark) .sm-btn{border-color:rgba(0,0,0,.1);}
  :root:not(.dark) .sm-btn:hover{background:rgba(0,0,0,.06);border-color:rgba(0,0,0,.15);}
  :root:not(.dark) select{border-color:rgba(0,0,0,.12);}
  :root:not(.dark) .composer-wrap{background:var(--sidebar);border-top:1px solid var(--border);}
  :root:not(.dark) .composer-wrap::before{background:linear-gradient(to bottom,transparent,var(--sidebar));}
  :root:not(.dark) .composer-box{background:var(--bg);border-color:rgba(0,0,0,.12);}
  :root:not(.dark) .composer-box:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-bg);}
  :root:not(.dark) .suggestion{border-color:rgba(0,0,0,.08);}
  :root:not(.dark) .suggestion:hover{background:var(--accent-bg);border-color:var(--accent-bg-strong);}
  :root:not(.dark) .tool-card{border-color:rgba(0,0,0,.08);}
  :root:not(.dark) .tool-card:hover{border-color:rgba(0,0,0,.15);}
  :root:not(.dark) .icon-btn:hover{background:rgba(0,0,0,.06);}
  :root:not(.dark) .panel-icon-btn:hover{background:rgba(0,0,0,.06);}
  :root:not(.dark) .file-item:hover{background:rgba(0,0,0,.04);}
  :root:not(.dark) .preview-md th{background:rgba(0,0,0,.04);}
  :root:not(.dark) .msg-body th{background:rgba(0,0,0,.04);}
  :root:not(.dark) .preview-md td{border-color:rgba(0,0,0,.08);}
  :root:not(.dark) .msg-body td{border-color:rgba(0,0,0,.08);}
  :root:not(.dark) .preview-badge.code{background:rgba(0,0,0,.05);}
  :root:not(.dark) .ctx-ring-center{background:var(--bg);color:var(--muted);}
  :root:not(.dark) .ctx-ring-track{stroke:rgba(0,0,0,.12);}
  :root:not(.dark) .ws-opt:hover{background:rgba(0,0,0,.05);}
  :root:not(.dark) .ws-row:hover{background:rgba(0,0,0,.04);}
  :root:not(.dark) .ws-drag-handle{color:#999;}
  :root:not(.dark) .ws-row.drag-over{background:rgba(0,0,0,.06);}
  :root:not(.dark) .profile-opt:hover{background:rgba(0,0,0,.05);}
  :root:not(.dark) .profile-opt.active{background:var(--accent-bg);}
  :root:not(.dark) .profile-chip{color:var(--accent-text)!important;}
  /* ── Light mode: Prism syntax token overrides (prism-tomorrow is dark-only) ── */
  :root:not(.dark) .token.comment,
  :root:not(.dark) .token.prolog,
  :root:not(.dark) .token.doctype,
  :root:not(.dark) .token.cdata{color:#7a7060;font-style:italic;}
  :root:not(.dark) .token.punctuation{color:#5a4e44;}
  :root:not(.dark) .token.namespace{opacity:.8;}
  :root:not(.dark) .token.property,
  :root:not(.dark) .token.tag,
  :root:not(.dark) .token.boolean,
  :root:not(.dark) .token.number,
  :root:not(.dark) .token.constant,
  :root:not(.dark) .token.symbol,
  :root:not(.dark) .token.deleted{color:#a0290a;}
  :root:not(.dark) .token.selector,
  :root:not(.dark) .token.attr-name,
  :root:not(.dark) .token.string,
  :root:not(.dark) .token.char,
  :root:not(.dark) .token.builtin,
  :root:not(.dark) .token.inserted{color:#276b30;}
  :root:not(.dark) .token.operator,
  :root:not(.dark) .token.entity,
  :root:not(.dark) .token.url,
  :root:not(.dark) .language-css .token.string,
  :root:not(.dark) .style .token.string{color:#5a3e8a;}
  :root:not(.dark) .token.atrule,
  :root:not(.dark) .token.attr-value,
  :root:not(.dark) .token.keyword{color:#2d6fa3;}
  :root:not(.dark) .token.function,
  :root:not(.dark) .token.class-name{color:#7a3a00;}
  :root:not(.dark) .token.regex,
  :root:not(.dark) .token.important,
  :root:not(.dark) .token.variable{color:#8a4a00;}
  :root:not(.dark) .token.important,
  :root:not(.dark) .token.bold{font-weight:bold;}
  :root:not(.dark) .token.italic{font-style:italic;}
  :root:not(.dark) .nav-tab:hover::after{background:var(--surface);border-color:var(--accent-bg-strong);color:var(--accent-text);}
  :root:not(.dark) .cron-status.disabled{background:rgba(0,0,0,.05);}
  :root:not(.dark) .cron-status.attention{background:rgba(217,119,6,.14);color:#b45309;}
  :root:not(.dark) .cron-btn{background:rgba(0,0,0,.04);}
  :root:not(.dark) .cron-btn:hover{background:rgba(0,0,0,.08);}
  /* ── Smooth dark mode transitions ── */
  body,header,footer,aside,nav,main,div,button,input,textarea,select{transition-property:background-color,border-color,color;transition-duration:.15s;transition-timing-function:ease;}
  :root{--app-titlebar-safe-top:0px;}
  @supports (padding-top: env(safe-area-inset-top)){
    @media (display-mode: standalone), (display-mode: fullscreen){
      :root{--app-titlebar-safe-top:env(safe-area-inset-top,0px);}
    }
  }
  body{background:var(--bg);color:var(--text);height:100vh;height:100dvh;overflow:hidden;display:flex;flex-direction:column;}
  .layout{display:flex;width:100%;flex:1 1 auto;min-height:0;}
  .app-titlebar{display:flex;align-items:center;justify-content:center;height:38px;flex-shrink:0;background:var(--sidebar);border-bottom:1px solid var(--border);padding:0 12px;padding-top:var(--app-titlebar-safe-top);padding-left:max(12px,env(safe-area-inset-left,0));padding-right:max(12px,env(safe-area-inset-right,0));box-sizing:content-box;font-size:12px;color:var(--muted);user-select:none;-webkit-app-region:drag;position:relative;z-index:20;}
  .app-titlebar-brand{position:absolute;left:max(12px,env(safe-area-inset-left,0));top:var(--app-titlebar-safe-top);height:38px;display:flex;align-items:center;gap:8px;padding:0 9px 0 6px;border-radius:12px;color:var(--text);text-decoration:none;-webkit-app-region:no-drag;transition:background-color .15s,color .15s,box-shadow .15s;}
  .app-titlebar-brand:hover{background:var(--hover-bg);color:var(--accent);box-shadow:0 8px 22px rgba(0,0,0,.08);}
  /* 2026-05-21: container chrome removed by user request — let the new
     pmtsoul-logo.svg sit naked, no rounded-rect plaque/background/shadow. */
  .app-titlebar-brand-icon{width:24px;height:24px;display:grid;place-items:center;}
  .app-titlebar-brand-icon img,
  .app-titlebar-brand-icon .brand-mark{width:24px;height:24px;display:block;}
  .app-titlebar-brand-name{font-size:13px;font-weight:800;letter-spacing:-.01em;line-height:1;white-space:nowrap;}
  /* dark-mode brand-icon background removed alongside the light one
     (2026-05-21 user request: bare logo, no plaque). */
  .app-titlebar-inner{display:flex;align-items:center;gap:8px;min-width:0;max-width:100%;justify-content:center;}
  .app-titlebar-icon{display:inline-flex;align-items:center;color:var(--accent);}
  .app-titlebar-icon img,
  .app-titlebar-icon .brand-mark{width:18px;height:18px;display:block;}
  .app-titlebar-title{font-size:12px;font-weight:600;color:var(--text);letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:60vw;}
  .app-titlebar-sub{font-size:10px;color:var(--muted);background:var(--hover-bg);padding:2px 7px;border-radius:4px;font-family:'SF Mono',ui-monospace,monospace;white-space:nowrap;flex-shrink:0;}
  .app-titlebar-sub[hidden]{display:none;}
  .app-titlebar-hamburger,.app-titlebar-spacer{display:none;width:32px;height:32px;flex-shrink:0;}
  .app-titlebar-hamburger{-webkit-app-region:no-drag;align-items:center;justify-content:center;background:none;border:none;color:var(--muted);border-radius:8px;cursor:pointer;padding:0;-webkit-tap-highlight-color:transparent;transition:background-color .15s,color .15s;}
  .app-titlebar-hamburger:hover{background:var(--hover-bg);color:var(--text);}
  .nav-tab[hidden],.rail-btn[hidden]{display:none!important;}
  .sidebar{width:300px;background:var(--sidebar);border-right:1px solid var(--border);display:flex;flex-direction:column;overflow:visible;flex-shrink:0;}
  .sidebar-header{padding:16px 18px 14px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px;}
  .logo{width:32px;height:32px;border-radius:9px;background:#061126 url("pmtsoul-logo.svg") center/24px 24px no-repeat;display:flex;align-items:center;justify-content:center;font-size:0;color:transparent;flex-shrink:0;box-shadow:0 2px 8px rgba(22,100,255,.22);}
  .sidebar-header h1{font-size:15px;font-weight:600;}
  .sidebar-section{padding:14px 14px 8px;}
  .new-chat-btn{width:100%;padding:9px 12px;border-radius:9px;background:var(--accent-bg);border:1px solid var(--accent-bg-strong);color:var(--accent-text);font-size:13px;cursor:pointer;display:flex;align-items:center;gap:8px;transition:all .15s;margin-bottom:8px;font-weight:500;}
  .new-chat-btn:hover{background:var(--accent-bg-strong);border-color:var(--accent);}
  .session-list{flex:1;overflow-y:auto;padding:0 8px 8px;min-height:0;}
  .sidebar-search{position:relative;padding:8px 12px;flex-shrink:0;}
  .sidebar-search input{width:100%;background:var(--bg);border:1px solid var(--border);border-radius:8px;color:var(--text);padding:7px 10px 7px 32px;font-size:13px;outline:none;transition:border-color .15s,box-shadow .15s,background .15s;box-sizing:border-box;}
  .sidebar-search input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-bg);}
  .sidebar-search input::placeholder{color:var(--muted);opacity:.7;}
  .sidebar-search-icon{position:absolute;left:22px;top:50%;transform:translateY(-50%);width:14px;height:14px;color:var(--muted);opacity:.7;pointer-events:none;}
  /* Inline session title edit */
  .session-title-input{flex:1;background:var(--surface);border:1px solid var(--accent);border-radius:6px;color:var(--text);padding:3px 8px;font-size:13px;outline:none;min-width:0;box-shadow:0 0 0 2px var(--accent-bg-strong);font-family:inherit;}
  /* padding-right was 86px to reserve space for the absolute-positioned
     timestamp + action button (which appears on hover). Now that .session-time
     lives in the flex flow of .session-title-row, the timestamp sits at the
     row's right edge naturally, so no reservation is needed at rest. The
     action button (.session-actions, position:absolute, 26x26 at right:6px)
     and attention indicator (26x26 at right:6px) still need 40px reserved
     when they're visible — covered by the hover / streaming / unread /
     menu-open / focus-within rule below. */
  .session-item{padding:8px 8px;margin-bottom:2px;border-radius:8px;cursor:pointer;font-size:13px;color:var(--muted);transition:background .15s,color .15s;display:flex;align-items:flex-start;gap:8px;min-width:0;position:relative;touch-action:manipulation;-webkit-tap-highlight-color:transparent;}
  .session-item.streaming,.session-item.unread,.session-item:focus-within,.session-item.menu-open{padding-right:40px;}
  .session-item:hover{background:var(--hover-bg);color:var(--text);}
  /* Suppress hover highlight during drag to avoid visual noise mid-scroll */
  .session-item.dragging:hover{background:transparent;color:var(--muted);}
  /* Restore hover padding-right only for mouse (hover:hover) devices.
     Touch/iPad (hover:none) must NOT expand padding-right on :hover —
     the expansion causes a layout-reflow mid-tap that moves session-actions
     under the finger, triggering stopPropagation and swallowing navigation. */
  @media (hover:hover){.session-item:hover{padding-right:40px;}}
  .session-item.active{background:var(--accent-bg);color:var(--accent);}
  .session-item.streaming .session-title{color:var(--accent);}
  .session-item.streaming .session-title-row{color:var(--text);}
  .session-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;overflow:hidden;}
  .session-title-row{display:flex;align-items:center;gap:6px;min-width:0;}
  .session-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);user-select:none;}
  .session-item.active .session-title{color:var(--accent-text);}
  .session-meta{font-size:11px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .session-item.active .session-meta{color:var(--accent-text);opacity:.8;}
  .session-state-indicator{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:10px;height:10px;color:var(--accent);visibility:hidden;}
  .session-attention-indicator{position:absolute;right:6px;top:50%;transform:translateY(-50%);width:26px;height:26px;z-index:1;pointer-events:none;transition:opacity .15s ease,visibility .15s ease;}
  .session-item:hover .session-attention-indicator,.session-item:focus-within .session-attention-indicator,.session-item.menu-open .session-attention-indicator{opacity:0;visibility:hidden;}
  .session-state-indicator.is-streaming,.session-state-indicator.is-unread{visibility:visible;}
  .session-state-indicator::before{content:"";display:block;flex-shrink:0;}
  .session-state-indicator.is-streaming::before{
    width:100%;
    height:100%;
    border:2px solid transparent;
    border-top-color:currentColor;
    border-right-color:currentColor;
    border-radius:50%;
    animation:spin 1s linear infinite;
  }
  .session-state-indicator.is-unread::before{
    width:8px;
    height:8px;
    border-radius:50%;
    background:currentColor;
  }
  .session-attention-indicator.is-streaming::before{
    width:10px;
    height:10px;
  }
  .session-attention-indicator.is-unread::before{
    width:8px;
    height:8px;
  }
  /* Timestamp lives in the flex flow of .session-title-row (not absolute) so
     the title's flex:1 bound stops at the timestamp's left edge and stops
     running underneath it. margin-left:auto pushes it to the row's right
     edge, keeping the visual position the user already expects. */
  .session-time{
    display:inline-flex;
    margin-left:auto;
    color:var(--muted);
    font-size:10px;
    white-space:nowrap;
    flex-shrink:0;
  }
  .session-time.is-hidden{display:none;}
  .session-item:hover .session-time,.session-item:focus-within .session-time,.session-item.menu-open .session-time{display:none;}
  /* ── Session action trigger + dropdown ── */
  .session-actions{position:absolute;right:6px;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .15s ease;}
  .session-item:hover .session-actions,.session-item:focus-within .session-actions,.session-item.menu-open .session-actions{opacity:1;pointer-events:auto;}
  .session-item.streaming:not(:hover):not(:focus-within):not(.menu-open) .session-actions,.session-item.unread:not(:hover):not(:focus-within):not(.menu-open) .session-actions{opacity:0;pointer-events:none;}
  .session-actions-trigger{width:26px;height:26px;border:1px solid transparent;border-radius:8px;background:transparent;color:var(--muted);cursor:pointer;padding:0;line-height:1;display:inline-flex;align-items:center;justify-content:center;transition:background .12s,color .12s,border-color .12s;}
  .session-actions-trigger:hover{background:var(--hover-bg);color:var(--text);}
  .session-actions-trigger.active{background:var(--accent-bg);border-color:var(--accent-bg-strong);color:var(--text);}
  .session-actions-trigger svg{display:block;}
  .session-action-menu{display:block;position:fixed;left:0;top:0;right:auto;bottom:auto;min-width:220px;max-width:min(280px,calc(100vw - 16px));background:var(--surface);border:1px solid var(--border2);border-radius:10px;box-shadow:0 -4px 24px rgba(0,0,0,.4);z-index:999;overflow:hidden;max-height:320px;overflow-y:auto;}
  .session-action-menu.open{display:block;}
  .session-action-opt{width:100%;background:none;border:none;text-align:left;font:inherit;color:var(--text);flex-direction:row!important;gap:0!important;padding:0!important;}
  .session-action-opt .ws-opt-action{display:flex;flex-direction:row;align-items:center;gap:10px;width:100%;padding:10px 14px;}
  .session-action-opt .ws-opt-icon{color:var(--muted);transition:color .12s,opacity .12s;flex-shrink:0;display:flex;align-items:center;width:16px;}
  .session-action-opt:hover .ws-opt-icon{color:var(--text);opacity:1;}
  .session-action-copy{display:flex;flex-direction:column;gap:2px;min-width:0;}
  .session-action-meta{font-size:11px;color:var(--muted);line-height:1.3;white-space:normal;opacity:.72;}
  .session-action-opt.is-active{background:var(--accent-bg);}
  .session-action-opt.danger:hover{background:rgba(239,83,80,.08);}
  .session-action-opt.danger .ws-opt-icon,.session-action-opt.danger .ws-opt-name{color:var(--error);}
  /* Hide overlay during inline rename */
  .session-item:has(.session-title-input) .session-actions{display:none;}
  @keyframes newflash{0%{background:var(--accent-bg-strong);color:var(--accent);}100%{background:transparent;color:var(--muted);}}
  @keyframes spin{to{transform:rotate(360deg);}}
  .session-item.new-flash{animation:newflash 1.4s ease-out forwards;}
  /* Collapsible date group headers */
  .session-date-header{display:flex;align-items:center;gap:5px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);padding:8px 10px 4px;cursor:pointer;user-select:none;opacity:.8;transition:opacity .15s;}
  .session-date-header:hover{opacity:1;}
  .session-date-header.pinned{color:var(--accent);}

  /* ── Batch select mode ── */
  .session-select-toggle{display:block;width:calc(100% - 16px);font:inherit;font-size:11px;padding:6px 10px;color:var(--muted);cursor:pointer;text-align:center;opacity:.6;transition:opacity .15s;user-select:none;margin:4px 8px 0;border:none;border-radius:6px;background:transparent;}
  .session-select-toggle:hover{opacity:1;background:var(--hover-bg);}
  .session-select-bar{display:flex;align-items:center;gap:6px;padding:6px 10px;margin-bottom:4px;flex-shrink:0;}
  .batch-exit-btn{width:22px;height:22px;border:none;border-radius:6px;background:transparent;color:var(--muted);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:14px;padding:0;flex-shrink:0;}
  .batch-exit-btn:hover{background:var(--hover-bg);color:var(--text);}
  .batch-select-all-btn{font-size:11px;border:none;border-radius:6px;background:transparent;color:var(--accent);cursor:pointer;padding:3px 8px;font-weight:600;}
  .batch-select-all-btn:hover{background:var(--accent-bg);}
  .session-select-cb-wrapper{display:flex;align-items:center;flex-shrink:0;padding:2px;}
  .session-select-cb{width:14px;height:14px;accent-color:var(--accent);cursor:pointer;margin:0;}
  .session-item.selected{background:var(--accent-bg);color:var(--accent-text);}
  .session-item.selected .session-title{color:var(--accent-text);}
  .session-item.selected .session-meta{color:var(--accent-text);opacity:.8;}
  .batch-action-bar{display:none;position:fixed;bottom:0;left:0;right:0;z-index:998;background:var(--surface);border-top:1px solid var(--border2);box-shadow:0 -2px 12px rgba(0,0,0,.15);padding:10px 16px;align-items:center;gap:10px;font-size:13px;}
  .batch-count{font-weight:600;color:var(--accent);margin-right:auto;white-space:nowrap;}
  .batch-action-btn{border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text);cursor:pointer;padding:6px 14px;font-size:12px;font-weight:500;transition:background .12s,color .12s,border-color .12s;white-space:nowrap;}
  .batch-action-btn:hover{background:var(--hover-bg);border-color:var(--border2);}
  .batch-action-btn-danger{color:var(--error,#e94560);border-color:var(--error,#e94560);}
  .batch-action-btn-danger:hover{background:rgba(233,69,96,.1);}
  @media(hover:none){.batch-action-bar{padding-bottom:max(10px,env(safe-area-inset-bottom));}}
  .session-date-caret{font-size:9px;transition:transform .2s;flex-shrink:0;display:inline-block;transform:rotate(0deg);}
  .session-date-caret.collapsed{transform:rotate(-90deg);}
  .app-dialog-overlay{position:fixed;inset:0;background:var(--ui-dialog-backdrop);backdrop-filter:blur(4px);z-index:100000;display:none;align-items:center;justify-content:center;padding:24px;}
  .app-dialog{width:min(460px,100%);background:var(--ui-dialog-bg);border:1px solid var(--ui-dialog-border);border-radius:var(--ui-dialog-radius);box-shadow:var(--ui-dialog-shadow);padding:0;color:var(--text);overflow:hidden;}
  .app-dialog-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0;padding:var(--ui-dialog-head-padding);border-bottom:1px solid var(--ui-dialog-border);}
  .app-dialog-title{font-family:var(--font-ui);font-size:18px;font-weight:600;letter-spacing:0;color:var(--text);}
  .app-dialog-close{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:var(--ui-control-radius);background:transparent;color:var(--muted);cursor:pointer;transition:background .15s,color .15s;}
  .app-dialog-close:hover{background:rgba(255,255,255,.09);color:var(--text);}
  .app-dialog-desc{padding:var(--ui-dialog-body-padding) var(--ui-dialog-body-padding) 0;font-size:13px;line-height:1.6;color:var(--muted);white-space:pre-wrap;}
  .app-dialog-input{width:calc(100% - 40px);margin:14px 20px 0;padding:11px 12px;background:var(--input-bg);border:1px solid var(--border2);border-radius:var(--ui-control-radius);color:var(--text);font-size:14px;outline:none;box-sizing:border-box;}
  .app-dialog-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-bg);}
  .app-dialog-actions{display:flex;justify-content:flex-end;gap:10px;margin:0;padding:18px 20px 20px;flex-wrap:wrap;}
  .app-dialog-btn{display:inline-flex;align-items:center;justify-content:center;min-width:104px;padding:10px 14px;border-radius:var(--ui-control-radius);border:1px solid var(--border2);background:var(--surface);color:var(--text);font-size:13px;font-weight:600;cursor:pointer;transition:transform .15s,background .15s,border-color .15s;}
  .app-dialog-btn:hover{transform:translateY(-1px);background:rgba(255,255,255,.1);}
  .app-dialog-btn.confirm{border-color:var(--accent);background:var(--accent-bg);color:var(--accent-text);}
  .app-dialog-btn.confirm:hover{background:var(--accent-bg-strong);border-color:var(--accent);}
  .app-dialog-btn.confirm.danger{border-color:var(--error);background:rgba(239,83,80,.12);color:var(--error);}
  .app-dialog-btn.confirm.danger:hover{background:rgba(239,83,80,.2);border-color:var(--error);}
  .app-dialog-btn:focus-visible,.app-dialog-close:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
  .toast{position:fixed;top:24px;right:24px;left:auto;bottom:auto;transform:translateY(-6px);background:color-mix(in srgb,var(--accent) 14%,var(--surface));border:1px solid color-mix(in srgb,var(--accent) 45%,var(--surface));color:var(--accent-text);font-size:13px;font-weight:500;padding:10px 16px;border-radius:10px;pointer-events:none;opacity:0;transition:opacity .2s,transform .2s;z-index:100;box-shadow:0 6px 24px rgba(0,0,0,.12);letter-spacing:.01em;max-width:min(420px,calc(100vw - 48px));}
  .toast.show{opacity:1;transform:translateY(0);}
  .toast.success{background:color-mix(in srgb,var(--success) 14%,var(--surface));border-color:color-mix(in srgb,var(--success) 45%,var(--surface));color:var(--success);}
  .toast.error{background:color-mix(in srgb,var(--error) 14%,var(--surface));border-color:color-mix(in srgb,var(--error) 45%,var(--surface));color:var(--error);}
  .toast.warning{background:color-mix(in srgb,var(--warning) 14%,var(--surface));border-color:color-mix(in srgb,var(--warning) 45%,var(--surface));color:var(--warning);}
  .web-update-notice{position:fixed;left:20px;bottom:20px;z-index:10001;display:flex;align-items:center;gap:14px;max-width:calc(100vw - 32px);padding:10px 12px 10px 14px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text);box-shadow:0 8px 28px rgba(0,0,0,.16);font-size:13px;font-weight:500;opacity:0;pointer-events:none;transform:translateY(10px);transition:opacity .2s,transform .2s;}
  .web-update-notice[hidden]{display:none;}
  .web-update-notice.show{opacity:1;pointer-events:auto;transform:translateY(0);}
  .web-update-copy{display:flex;flex-direction:column;gap:2px;min-width:0;}
  .web-update-versions{font:600 10.5px/1.3 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:var(--muted);letter-spacing:.02em;}
  .web-update-notice button{display:inline-flex;align-items:center;gap:6px;flex:0 0 auto;border:1px solid var(--accent);border-radius:5px;background:var(--accent);color:#fff;padding:7px 10px;font-weight:600;font-size:12px;line-height:1;font-family:inherit;cursor:pointer;}
  .web-update-notice button:disabled{cursor:default;opacity:.65;}
  @media(max-width:560px){.web-update-notice{right:16px;left:16px;bottom:16px;max-width:none;justify-content:space-between;transform:translateY(10px);}.web-update-notice.show{transform:translateY(0);}}
  .onboarding-overlay{position:fixed;inset:0;z-index:1050;background:rgba(7,12,19,.78);backdrop-filter:blur(8px);display:none;align-items:center;justify-content:center;padding:24px;}
  .onboarding-card{width:min(980px,100%);max-height:min(760px,94vh);overflow:auto;border:1px solid var(--accent-bg-strong);border-radius:24px;background:linear-gradient(180deg,rgba(20,30,44,.98),rgba(11,17,27,.98));box-shadow:0 24px 80px rgba(0,0,0,.45);}
  .onboarding-shell{display:grid;grid-template-columns:minmax(240px,300px) minmax(0,1fr);}
  .onboarding-sidebar{padding:28px 24px;border-right:1px solid var(--border);background:linear-gradient(180deg,var(--accent-bg),transparent);}
  .onboarding-sidebar h2{font-size:26px;line-height:1.15;margin-top:10px;margin-bottom:12px;letter-spacing:-.03em;}
  .onboarding-badge{display:inline-flex;padding:4px 10px;border-radius:999px;font-size:10px;font-weight:800;letter-spacing:.12em;background:var(--accent-bg);color:var(--accent-text);}
  .onboarding-sidebar p{font-size:13px;color:var(--muted);line-height:1.7;}
  .onboarding-steps{display:flex;flex-direction:column;gap:10px;margin-top:24px;}
  .onboarding-step{display:flex;gap:12px;align-items:flex-start;padding:10px 12px;border-radius:14px;border:1px solid transparent;background:rgba(255,255,255,.02);}
  .onboarding-step.active{border-color:var(--accent-bg-strong);background:var(--accent-bg);}
  .onboarding-step.done{background:var(--accent-bg);}
  .onboarding-step-index{width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;background:rgba(255,255,255,.08);color:var(--text);flex-shrink:0;}
  .onboarding-step.done .onboarding-step-index{background:var(--accent-bg-strong);color:var(--accent-text);}
  .onboarding-step.active .onboarding-step-index{background:var(--accent-bg);color:var(--accent-text);}
  .onboarding-step-title{font-size:13px;font-weight:700;color:var(--text);}
  .onboarding-step-desc{font-size:11px;color:var(--muted);margin-top:2px;line-height:1.5;}
  .onboarding-main{padding:28px 28px 24px;display:flex;flex-direction:column;gap:18px;min-width:0;}
  .onboarding-status{display:none;padding:12px 14px;border-radius:12px;font-size:13px;line-height:1.6;border:1px solid var(--border2);background:rgba(255,255,255,.04);}
  .onboarding-status.info{color:var(--text);}
  .onboarding-status.success{color:var(--accent-text);border-color:var(--accent-bg);background:var(--accent-bg);}
  .onboarding-status.warn{color:var(--accent-text);border-color:var(--accent-bg-strong);background:var(--accent-bg);}
  .onboarding-body{display:flex;flex-direction:column;gap:16px;}
  .onboarding-panel-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;}
  .onboarding-check{padding:14px;border-radius:14px;border:1px solid var(--border);background:rgba(255,255,255,.03);display:flex;flex-direction:column;gap:5px;}
  .onboarding-check strong{font-size:13px;color:var(--text);}
  .onboarding-check span{font-size:12px;color:var(--muted);line-height:1.5;}
  .onboarding-check.ok{border-color:var(--accent-bg);background:var(--accent-bg);}
  .onboarding-check.warn{border-color:var(--accent-bg-strong);background:var(--accent-bg);}
  .onboarding-field{display:flex;flex-direction:column;gap:6px;}
  .onboarding-field span{font-size:12px;font-weight:700;color:var(--text);}
  .onboarding-field input,.onboarding-field select{margin-bottom:0;padding:10px 12px;border-radius:10px;font-size:13px;background:var(--input-bg);border:1px solid var(--border2);color:var(--text);}
  .onboarding-copy{font-size:12px;color:var(--muted);line-height:1.7;}
  .onboarding-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;}
  .onboarding-summary div{padding:14px;border-radius:14px;background:rgba(255,255,255,.03);border:1px solid var(--border);display:flex;flex-direction:column;gap:5px;}
  .onboarding-summary strong{font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);}
  .onboarding-summary span{font-size:13px;color:var(--text);word-break:break-word;}
  .onboarding-oauth-card{display:flex;align-items:flex-start;gap:14px;padding:16px 18px;border-radius:14px;border:1px solid var(--border);background:rgba(255,255,255,.03);margin-bottom:4px;}
  .onboarding-oauth-card p{margin:6px 0 0;font-size:13px;color:var(--muted);line-height:1.5;}
  .onboarding-oauth-card strong{font-size:13px;color:var(--text);}
  .onboarding-oauth-card code{font-size:12px;background:rgba(255,255,255,.08);padding:1px 5px;border-radius:4px;}
  .onboarding-oauth-icon{font-size:18px;flex-shrink:0;margin-top:1px;}
  .onboarding-oauth-ready{border-color:var(--accent-bg);background:var(--accent-bg);}
  .onboarding-oauth-ready .onboarding-oauth-icon{color:var(--accent);}
  .onboarding-oauth-pending{border-color:var(--accent-bg-strong);background:var(--accent-bg);}
  .onboarding-oauth-pending .onboarding-oauth-icon{color:#c9a84c;}
  .onboarding-actions{display:flex;justify-content:space-between;gap:10px;margin-top:auto;}
  .onboarding-actions .sm-btn{padding:10px 16px;}
  .reconnect-banner{display:none;background:var(--surface);border:1px solid var(--accent-bg-strong);border-radius:10px;padding:10px 16px;margin:10px auto;max-width:780px;font-size:13px;color:var(--accent-text);display:none;align-items:center;justify-content:space-between;gap:12px;}
  .reconnect-banner.visible{display:flex;}
  .reconnect-btn{padding:6px 12px;border-radius:8px;font-size:12px;font-weight:600;background:var(--accent-bg-strong);border:1px solid var(--accent-bg-strong);color:var(--accent-text);cursor:pointer;}
  .reconnect-btn:hover{background:var(--accent-bg-strong);}
  /* ── Merchant credentials reauth banner (P0b 2026-05-08) ── */
  /* Page-level Credential Health Workspace shown when /api/auth/credentials/health
   * returns live=expired|missing|unknown with reauth_required=true. Sits as a sibling above #msgInner so
   * renderMessages cannot wipe it. The fixed CTA opens the backend's
   * browser-facing reauth_url in a new tab; disabled when reauth_url
   * is absent. */
  .merchant-creds-banner{display:none;margin:10px auto;max-width:780px;}
  .merchant-creds-banner.visible{display:block;}
  .merchant-creds-banner-inner{display:flex;align-items:flex-start;gap:12px;padding:12px 16px;background:rgba(245,158,11,.055);border:1px solid rgba(245,158,11,.30);border-left:3px solid rgba(245,158,11,.72);border-radius:10px;color:var(--text);}
  .merchant-creds-banner-icon{font-size:16px;line-height:1.2;flex:0 0 auto;}
  .merchant-creds-banner-text{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:4px;}
  .merchant-creds-banner-heading{font-size:13.5px;font-weight:600;color:#fbbf24;}
  .merchant-creds-banner-body{font-size:13px;line-height:1.5;color:var(--text);white-space:pre-wrap;word-break:break-word;}
  .merchant-creds-banner-meta{font-size:11px;color:var(--muted);font-family:var(--font-mono,ui-monospace,SFMono-Regular,Menlo,monospace);opacity:.85;}
  .merchant-creds-banner-actions{display:flex;flex-direction:column;gap:6px;flex:0 0 auto;align-items:stretch;}
  .merchant-creds-banner-reauth{padding:6px 14px;border-radius:8px;font-size:12.5px;font-weight:600;background:rgba(245,158,11,.16);border:1px solid rgba(245,158,11,.55);color:#fbbf24;cursor:pointer;transition:background .15s,opacity .15s;}
  .merchant-creds-banner-reauth:hover:not(:disabled){background:rgba(245,158,11,.24);}
  .merchant-creds-banner-reauth:disabled{opacity:.68;cursor:not-allowed;}
  .merchant-creds-banner-dismiss{padding:6px 12px;border-radius:8px;font-size:12px;font-weight:500;background:transparent;border:1px solid var(--border);color:var(--muted);cursor:pointer;transition:background .15s;}
  .merchant-creds-banner-dismiss:hover{background:var(--hover-bg);color:var(--text);}
  /* Caption shown under the action buttons when reauth_url is absent
   * (B3 platform refresh flow not yet shipped). Tells the merchant
   * the button is a temporary login fallback, not a real token
   * refresh — set explicitly so users don't expect immediate APM
   * data recovery from this surface. */
  .merchant-creds-banner-caption{font-size:11px;line-height:1.4;color:var(--muted);text-align:right;max-width:160px;}

  /* ── Update banner ── */
  .update-banner{display:none;background:var(--surface);border:1px solid var(--accent);border-radius:10px;padding:10px 16px;margin:10px auto;max-width:780px;font-size:13px;color:var(--accent-text);align-items:center;justify-content:space-between;gap:12px;}
  .update-banner.visible{display:flex;}
  .update-btn{padding:6px 12px;border-radius:8px;font-size:12px;font-weight:600;background:var(--accent-bg);border:1px solid var(--accent-bg-strong);color:var(--accent-text);cursor:pointer;transition:background .15s;}
  .update-btn:hover{background:var(--accent-bg-strong);}
  .update-primary{background:var(--accent-bg-strong);border-color:var(--accent);}
  .update-btn:disabled{opacity:0.5;cursor:not-allowed;}
  /* ── Composer flyout (approval/clarify slide up from behind composer) ── */
  .composer-flyout{position:relative;height:0;z-index:1;}
  .composer-wrap.terminal-dock-visible .composer-flyout{z-index:4;}
  /* ── Approval card ── */
  .approval-card{position:absolute;left:0;right:0;bottom:-24px;max-width:var(--msg-max);margin:0 auto;padding:0 20px;box-sizing:border-box;width:100%;overflow:hidden;pointer-events:none;}
  .approval-card.visible{pointer-events:auto;z-index:3;}
  .approval-inner{background:var(--surface);backdrop-filter:blur(8px);border:1px solid var(--accent-bg-strong);border-radius:14px;padding:16px 18px 40px;transform:translateY(100%);opacity:0;transition:transform .4s cubic-bezier(.32,.72,.16,1),opacity .25s ease;}
  .approval-card.visible .approval-inner{transform:translateY(0);opacity:1;}
  .approval-header{display:flex;align-items:center;gap:8px;margin-bottom:10px;font-size:13px;font-weight:600;color:var(--error);}
  .approval-desc{font-size:12px;color:var(--muted);margin-bottom:8px;line-height:1.5;}
  .approval-cmd{background:var(--code-bg);border:1px solid var(--border);border-radius:8px;padding:8px 12px;font-family:"SF Mono",ui-monospace,monospace;font-size:12px;color:var(--pre-text);white-space:pre-wrap;word-break:break-all;margin-bottom:14px;max-height:120px;overflow-y:auto;}
  .approval-btns{display:flex;gap:8px;flex-wrap:wrap;align-items:center;}
  .approval-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:8px;font-size:12px;font-weight:600;border:1px solid var(--border2);background:var(--hover-bg);color:var(--text);cursor:pointer;transition:all .15s;white-space:nowrap;}
  .approval-btn:hover{background:rgba(255,255,255,0.12);transform:translateY(-1px);box-shadow:0 2px 8px rgba(0,0,0,0.2);}
  .approval-btn:active{transform:translateY(0);box-shadow:none;}
  .approval-btn:disabled{opacity:.5;cursor:not-allowed;transform:none;}
  /* ── YOLO skip-all button (approval-btn variant) ── */
  .approval-btn.yolo{background:rgba(245,158,11,0.12);border-color:rgba(245,158,11,0.3);color:#f59e0b;}
  .approval-btn.yolo:hover{background:rgba(245,158,11,0.22);border-color:rgba(245,158,11,0.5);color:#fbbf24;}
  /* ── YOLO pill in composer footer ── */
  .yolo-pill{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:999px;font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;background:rgba(245,158,11,0.15);color:#f59e0b;border:1px solid rgba(245,158,11,0.35);cursor:pointer;transition:all .15s;line-height:1.4;white-space:nowrap;}
  .yolo-pill:hover{background:rgba(245,158,11,0.25);border-color:rgba(245,158,11,0.5);transform:translateY(-1px);}
  .yolo-pill:active{transform:translateY(0);}
  .yolo-pill-icon{font-size:12px;}
  .yolo-pill-label{font-size:10px;}
  /* ── Queue flyout (same slide-up pattern as approval-card) ── */
  .queue-card{position:absolute;left:0;right:0;bottom:0;max-width:var(--msg-max);margin:0 auto;padding:0 20px;box-sizing:border-box;width:100%;overflow:hidden;pointer-events:none;z-index:2;}
  .queue-card.visible{pointer-events:auto;}
  /* When queue is visible, add bottom padding to messages so last bubble isn't covered */
  .messages.queue-open{padding-bottom:var(--queue-card-height,280px);}
  /* Terminal flyout reserves transcript space so recent messages stay readable above it. */
  .messages.terminal-open{padding-bottom:var(--terminal-card-height,320px);scroll-padding-bottom:var(--terminal-card-height,320px);transition:padding-bottom .26s cubic-bezier(.2,.8,.2,1);}
  .messages.terminal-collapsed{padding-bottom:var(--terminal-dock-height,72px);scroll-padding-bottom:var(--terminal-dock-height,72px);transition:padding-bottom .22s cubic-bezier(.2,.8,.2,1);}
  .messages.terminal-expanding-from-dock{transition:none!important;}
  .queue-card-inner{background:var(--surface);border:1px solid var(--border);border-bottom:none;border-radius:14px 14px 0 0;contain:paint;transform:translateY(100%);opacity:0;transition:transform .35s cubic-bezier(.32,.72,.16,1),opacity .2s ease;overflow:hidden;max-height:240px;overflow-y:auto;padding-bottom:4px;}
  .queue-card.visible .queue-card-inner{transform:translateY(0);opacity:1;}
  .queue-card-header{display:flex;align-items:center;gap:8px;padding:9px 14px 8px;border-bottom:1px solid var(--border);font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);}
  .queue-card-header-actions{display:flex;align-items:center;gap:4px;margin-left:auto;}
  .queue-card-btn{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:6px;border:1px solid var(--border);background:none;color:var(--muted);font-size:11px;font-weight:500;cursor:pointer;transition:background .12s,color .12s;white-space:nowrap;}
  .queue-card-btn:hover{background:var(--hover-bg);color:var(--text);}
  .queue-card-icon-btn{display:inline-flex;align-items:center;padding:3px;border-radius:5px;border:none;background:none;color:var(--muted);cursor:pointer;opacity:.5;transition:opacity .12s,background .12s;}
  .queue-card-icon-btn:hover{opacity:1;background:var(--hover-bg);}
  .queue-card-row{display:flex;align-items:center;gap:8px;padding:8px 14px;border-bottom:1px solid var(--border);cursor:grab;}
  .queue-card-row:last-child{border-bottom:none;}
  .queue-card-row:hover{background:color-mix(in srgb,var(--hover-bg) 50%,transparent);}
  .queue-card-drag{color:var(--muted);opacity:.3;flex-shrink:0;line-height:0;}
  .queue-card-text{flex:1;font-size:13px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;outline:none;cursor:text;min-width:0;}
  .queue-card-text:focus{white-space:pre-wrap;overflow:auto;text-overflow:clip;}
  .queue-card-badges{display:flex;align-items:center;gap:5px;flex-shrink:0;font-size:10px;color:var(--muted);opacity:.6;}
  .queue-card-file-badge{display:flex;align-items:center;gap:2px;}
  .approval-btn-icon{font-size:13px;line-height:1;}
  .approval-btn-label{line-height:1;}
  .approval-kbd{display:inline-flex;align-items:center;justify-content:center;padding:1px 5px;border-radius:4px;font-size:10px;font-family:inherit;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.15);color:var(--muted);line-height:1.4;margin-left:2px;}
  .approval-btn.once{border-color:var(--accent);color:var(--accent-text);background:var(--accent-bg);}
  .approval-btn.once:hover{background:var(--accent-bg-strong);border-color:var(--accent);}
  .approval-btn.session{border-color:var(--accent-bg-strong);color:var(--accent-text);}
  .approval-btn.session:hover{background:var(--accent-bg);border-color:var(--accent);}
  .approval-btn.always{border-color:var(--accent-bg-strong);color:var(--accent-text);}
  .approval-btn.always:hover{background:var(--accent-bg);border-color:var(--accent);}
  .approval-btn.deny{border-color:var(--error);color:var(--error);}
  .approval-btn.deny:hover{background:rgba(239,83,80,.12);border-color:var(--error);}
  .approval-btn.loading{opacity:.7;cursor:wait;}
  /* ── Clarify card ── */
  .clarify-card{position:absolute;left:0;right:0;bottom:-24px;max-width:var(--msg-max);margin:0 auto;padding:0 20px;box-sizing:border-box;width:100%;overflow:hidden;pointer-events:none;max-height:min(calc(100vh - 280px),420px);}
  .clarify-card.visible{pointer-events:auto;}
  .clarify-card .clarify-inner{max-height:min(calc(100vh - 280px),420px);overflow-y:auto;transform:translateY(100%);opacity:0;transition:transform .4s cubic-bezier(.32,.72,.16,1),opacity .25s ease;}
  .clarify-card.visible .clarify-inner{transform:translateY(0);opacity:1;}
  .clarify-inner{background:var(--surface);backdrop-filter:blur(8px);border:1px solid var(--accent-bg-strong);border-radius:12px;padding:12px 14px 36px;box-shadow:0 1px 0 rgba(255,255,255,.02) inset;}
  .clarify-header{display:flex;align-items:center;gap:8px;margin-bottom:10px;font-size:12px;font-weight:700;color:var(--blue);letter-spacing:.01em;}
  .clarify-countdown{margin-left:auto;min-width:42px;text-align:right;color:var(--muted);font-variant-numeric:tabular-nums;font-weight:700;}
  .clarify-countdown.urgent{color:var(--error);box-shadow:inset 0 -2px 0 var(--error);border-radius:2px;}
  .clarify-question{font-size:14px;color:var(--text);line-height:1.7;white-space:pre-wrap;margin-bottom:12px;}
  .clarify-choices{display:flex;flex-direction:column;gap:8px;margin-bottom:12px;}
  .clarify-choice{display:flex;align-items:flex-start;gap:10px;width:100%;padding:11px 14px;border-radius:12px;font-size:13px;font-weight:600;border:1px solid var(--accent-bg-strong);background:var(--accent-bg);color:var(--accent-text);cursor:pointer;transition:all .15s;white-space:normal;text-align:left;box-shadow:0 1px 0 rgba(255,255,255,.03) inset;}
  .clarify-choice:hover{background:var(--accent-bg-strong);transform:translateY(-1px);box-shadow:0 4px 12px rgba(0,0,0,0.18);}
  .clarify-choice:focus-visible{outline:2px solid var(--accent-bg);outline-offset:2px;}
  .clarify-choice-badge{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;border-radius:999px;background:var(--accent-bg-strong);border:1px solid var(--accent-bg-strong);color:var(--accent-text);font-size:11px;font-weight:800;flex-shrink:0;line-height:1;}
  .clarify-choice-badge.other{background:var(--accent-bg);border-color:var(--accent-bg-strong);color:var(--accent-text);}
  .clarify-choice-text{flex:1;line-height:1.45;min-width:0;}
  .clarify-choice.other{border-color:var(--accent-bg-strong);color:var(--accent-text);background:var(--accent-bg);}
  .clarify-choice.other:hover{background:var(--accent-bg-strong);border-color:var(--accent);}
  .clarify-response{display:flex;gap:8px;align-items:center;flex-wrap:wrap;}
  .clarify-input{flex:1;min-width:220px;padding:10px 12px;border-radius:8px;border:1px solid var(--border2);background:var(--input-bg);color:var(--text);font:inherit;outline:none;transition:all .15s;}
  .clarify-input:focus{border-color:var(--accent-bg);box-shadow:0 0 0 3px var(--accent-bg);background:var(--hover-bg);}
  .clarify-submit{display:inline-flex;align-items:center;justify-content:center;min-width:92px;padding:10px 14px;border-radius:8px;border:1px solid var(--accent-bg-strong);background:var(--accent-bg);color:var(--accent-text);font-size:12px;font-weight:700;cursor:pointer;transition:all .15s;white-space:nowrap;}
  .clarify-submit:hover{background:var(--accent-bg-strong);transform:translateY(-1px);}
  .clarify-submit:disabled{opacity:.6;cursor:not-allowed;transform:none;}
  .clarify-submit.loading{opacity:.75;cursor:wait;}
  .clarify-hint{margin-top:8px;font-size:11px;line-height:1.45;color:var(--muted);}
  .clarify-card.visible .clarify-question{padding-left:1px;}
  /* Left rail (desktop primary navigation) */
  .rail{display:none;width:74px;flex-shrink:0;flex-direction:column;align-items:center;gap:6px;padding:8px 0;background:var(--sidebar);border-right:1px solid var(--border);}
  .rail-btn{width:62px;min-height:52px;border-radius:10px;border:none;background:none;color:var(--muted);cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;position:relative;transition:color .15s,background .15s;flex-shrink:0;padding:6px 4px;}
  .rail-btn svg{width:20px;height:20px;flex:0 0 auto;}
  .rail-btn::after{content:attr(title);display:block;width:100%;font-size:9px;font-weight:700;line-height:1.15;letter-spacing:.01em;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:currentColor;opacity:.82;}
  .rail-btn:hover{color:var(--text);background:var(--hover-bg);}
  .rail-btn.active{color:var(--accent-text);background:var(--accent-bg);}
  .rail-btn.active::before{content:'';position:absolute;left:-7px;top:50%;transform:translateY(-50%);width:3px;height:24px;background:var(--accent);border-radius:0 2px 2px 0;}
  .rail-spacer{flex:1;min-height:8px;}
  .rail .nav-tab{flex:0 0 auto;padding:0;font-size:inherit;border-bottom:none;overflow:visible;}
  .rail .nav-tab:hover::after{content:attr(title);position:static;transform:none;background:transparent;border:0;box-shadow:none;padding:0;border-radius:0;pointer-events:auto;z-index:auto;font-size:9px;font-weight:700;line-height:1.15;letter-spacing:.01em;color:currentColor;}
  .rail .nav-tab.active::before{content:'';position:absolute;left:-7px;top:50%;bottom:auto;transform:translateY(-50%);width:3px;height:24px;background:var(--accent);border-radius:0 2px 2px 0;}
  @media(min-width:641px){.rail{display:flex;}.sidebar > .sidebar-nav{display:none;}}
  /* Sidebar navigation tabs */
  .sidebar-nav{display:flex;border-bottom:1px solid var(--border);flex-shrink:0;padding:6px 8px 0;gap:2px;}
  .nav-tab{flex:1;padding:10px 4px 8px;font-size:20px;text-align:center;cursor:pointer;color:var(--muted);border:none;background:none;transition:color .15s;border-bottom:2px solid transparent;white-space:nowrap;overflow:hidden;position:relative;display:flex;align-items:center;justify-content:center;}
  .nav-tab:hover{color:var(--text);}
  .nav-tab:hover::after{content:attr(data-label);position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);background:var(--surface);border:1px solid var(--accent-bg-strong);color:var(--accent-text);font-size:12px;font-weight:700;letter-spacing:.02em;padding:6px 12px;border-radius:8px;white-space:nowrap;pointer-events:none;z-index:50;box-shadow:0 4px 12px rgba(0,0,0,.3);}
  .nav-tab.active{color:var(--accent-text);}
  .nav-tab.active::before{content:'';position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:20px;height:2px;background:var(--accent);border-radius:2px 2px 0 0;}
  /* Panel content areas (swapped by tab) */
  .panel-view{display:none;flex:1;overflow:hidden;flex-direction:column;}
  .panel-view.active{display:flex;}
  .context-health-list{display:flex;flex-direction:column;gap:8px;padding:12px;overflow-y:auto;}
  .context-health-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:10px 12px;border:1px solid var(--border);border-radius:8px;background:rgba(255,255,255,.02);font-size:12px;line-height:1.4;min-height:40px;box-sizing:border-box;}
  .context-health-row span{color:var(--muted);flex-shrink:0;}
  .context-health-row strong{color:var(--text);font-weight:600;text-align:right;min-width:0;overflow-wrap:anywhere;}
  /* Cron panel */
  .cron-list{flex:1;overflow-y:auto;padding:8px;}
  .cron-item{width:100%;min-width:0;box-sizing:border-box;border-radius:10px;border:1px solid var(--border);margin-bottom:6px;overflow:hidden;transition:border-color .15s,background .15s;background:rgba(255,255,255,.02);cursor:pointer;}
  .cron-item:hover{border-color:var(--border2);}
  .cron-header{display:flex;align-items:center;gap:8px;padding:10px 12px;cursor:pointer;}
  .cron-name{flex:1;font-size:13px;color:var(--text);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .cron-status{font-size:10px;font-weight:700;padding:2px 8px;border-radius:99px;flex-shrink:0;}
  .cron-status.active{background:rgba(34,197,94,.15);color:var(--success);}
  .cron-status.paused{background:var(--accent-bg-strong);color:var(--accent-text);}
  .cron-status.disabled{background:rgba(255,255,255,.07);color:var(--muted);}
  .cron-status.error{background:rgba(239,83,80,.12);color:var(--error);}
  .cron-status.attention{background:rgba(245,158,11,.16);color:rgba(245,158,11,.95);}
  .cron-body{display:none;padding:0 12px 10px;border-top:1px solid var(--border);overflow:hidden;}
  .cron-body.open{display:block;}
  .cron-schedule{font-size:11px;color:var(--muted);margin:8px 0 6px;}
  .cron-prompt{font-size:11px;color:var(--muted);line-height:1.55;max-height:80px;overflow-y:auto;background:rgba(0,0,0,.2);padding:6px 8px;border-radius:6px;white-space:pre-wrap;margin-bottom:8px;box-sizing:border-box;}
  .cron-actions{display:flex;gap:6px;margin-bottom:8px;}
  .cron-btn{padding:4px 10px;border-radius:6px;font-size:11px;font-weight:600;border:1px solid var(--border2);background:rgba(255,255,255,.05);color:var(--muted);cursor:pointer;transition:all .15s;}
  .cron-btn:hover{background:rgba(255,255,255,.1);color:var(--text);}
  .cron-btn.run{border-color:var(--accent-bg);color:var(--accent-text);}
  .cron-btn.run:hover{background:var(--accent-bg);}
  .cron-btn.pause{border-color:var(--accent-bg-strong);color:var(--accent-text);}
  .cron-last{font-size:11px;color:var(--muted);border-top:1px solid var(--border);padding-top:8px;max-height:220px;overflow-y:auto;white-space:pre-wrap;line-height:1.5;word-break:break-word;}
  .cron-last-header{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:4px;}
  /* Skills panel */
  .skills-list{flex:1;overflow-y:auto;padding:0 8px 8px;}
  .skills-category{margin-bottom:4px;}
  .skills-cat-header{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);padding:8px 6px 4px;cursor:pointer;display:flex;align-items:center;gap:2px;user-select:none;}
  .skills-cat-header:hover{color:var(--text);}
  .cat-chevron{flex-shrink:0;width:12px;height:12px;}
  .skill-item{width:100%;min-width:0;box-sizing:border-box;padding:8px 10px;border-radius:8px;cursor:pointer;font-size:12px;color:var(--muted);display:flex;align-items:flex-start;gap:6px;transition:all .12s;line-height:1.4;overflow:hidden;max-height:200px;opacity:1;}
  .skill-item:hover{background:var(--hover-bg);color:var(--text);}
  .skill-item.active{background:var(--accent-bg);color:var(--accent-text);}
  .skill-name{font-weight:500;flex-shrink:0;}
  .skill-desc{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:11px;opacity:.7;}
  .skillhub-sidebar-note{font-size:11px;line-height:1.45;color:var(--muted);padding:8px 10px 10px;opacity:.78;}
  .skillhub-detail .detail-card{border-radius:8px;}
  .skillhub-hero{padding:18px;}
  .skillhub-identity{display:flex;gap:14px;align-items:flex-start;min-width:0;}
  .skillhub-identity h2{font-size:22px;line-height:1.2;margin:0 0 6px;color:var(--text);letter-spacing:0;}
  .skillhub-identity p{font-size:13px;line-height:1.55;color:var(--muted);margin:0 0 10px;max-width:720px;}
  .skillhub-icon-img,.skillhub-icon-fallback{width:48px;height:48px;border-radius:8px;flex:0 0 48px;border:1px solid var(--border);background:var(--surface);object-fit:cover;}
  .skillhub-icon-fallback{display:flex;align-items:center;justify-content:center;font-weight:800;color:var(--accent-text);font-size:18px;}
  .skillhub-tags{display:flex;gap:6px;flex-wrap:wrap;}
  .skillhub-md{font-size:13px;line-height:1.7;color:var(--text);overflow-wrap:anywhere;}
  .skillhub-md h1{font-size:20px;margin:16px 0 8px;}
  .skillhub-md h2{font-size:17px;margin:14px 0 8px;}
  .skillhub-md h3{font-size:15px;margin:12px 0 6px;}
  .skillhub-md pre{max-width:100%;overflow:auto;border-radius:8px;}
  .skillhub-version-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 0;border-bottom:1px solid var(--border);font-size:13px;}
  .skillhub-version-row:last-child{border-bottom:none;}
  .skillhub-version-row strong{display:block;color:var(--text);font-size:13px;}
  .skillhub-version-row span{display:block;color:var(--muted);font-size:11px;margin-top:2px;}
  .skillhub-download{flex:0 0 auto;width:auto;min-width:88px;text-decoration:none;}
  .skillhub-run-entry{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:14px;padding-top:14px;border-top:1px solid var(--border);}
  .skillhub-run-entry p{margin:0;color:var(--muted);font-size:12px;line-height:1.45;}
  .skillhub-use-btn{flex:0 0 auto;width:auto;min-width:128px;color:var(--accent-text);border-color:var(--accent-bg-strong);}
  /* Memory panel */
  .memory-panel{flex:1;overflow-y:auto;padding:12px;}
  .memory-section{margin-bottom:16px;}
  .memory-section-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin-bottom:8px;display:flex;align-items:center;justify-content:space-between;}
  .memory-mtime{font-size:10px;font-weight:400;text-transform:none;opacity:.6;}
  .memory-content{font-size:12px;line-height:1.7;color:var(--text);}
  .memory-content p{margin-bottom:6px;}
  .memory-empty{color:var(--muted);font-size:12px;font-style:italic;}
  .memory-detail-mtime{font-size:11px;color:var(--muted);opacity:.7;margin-bottom:12px;}
  .memory-proposal-badge{margin-left:auto;min-width:18px;height:18px;border-radius:999px;background:var(--accent);color:var(--accent-contrast,#fff);font-size:10px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;padding:0 5px;}
  .memory-proposal-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;color:var(--muted);font-size:12px;font-weight:600;}
  .memory-proposal-refresh,.memory-proposal-btn{border:1px solid var(--border);background:var(--surface-subtle);color:var(--text);border-radius:6px;padding:5px 10px;font-size:12px;cursor:pointer;}
  .memory-proposal-refresh:hover,.memory-proposal-btn:hover{border-color:var(--accent);}
  .memory-proposal-filters{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px;}
  .memory-proposal-filter{border:1px solid var(--border);background:var(--surface-subtle);color:var(--muted);border-radius:999px;padding:5px 9px;font-size:11px;font-weight:600;cursor:pointer;}
  .memory-proposal-filter:hover{border-color:var(--accent);color:var(--text);}
  .memory-proposal-filter.active{background:var(--accent-bg);border-color:var(--accent);color:var(--accent);}
  .memory-proposal-btn:disabled{opacity:.55;cursor:wait;}
  .memory-proposal-btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-contrast,#fff);}
  .memory-proposal-list{display:flex;flex-direction:column;gap:10px;}
  .memory-proposal-card{border:1px solid var(--border);border-radius:8px;background:var(--surface);padding:12px;}
  .memory-proposal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:10px;}
  .memory-proposal-path{font-size:13px;font-weight:700;color:var(--text);}
  .memory-proposal-meta{font-size:10px;color:var(--muted);margin-top:2px;word-break:break-all;}
  .memory-proposal-status{font-size:10px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);border:1px solid var(--border);border-radius:999px;padding:3px 7px;white-space:nowrap;}
  .memory-proposal-status-pending{color:#fbbf24;border-color:rgba(251,191,36,.28);background:rgba(251,191,36,.08);}
  .memory-proposal-status-accepted{color:#34d399;border-color:rgba(52,211,153,.28);background:rgba(52,211,153,.08);}
  .memory-proposal-status-rejected{color:#f87171;border-color:rgba(248,113,113,.28);background:rgba(248,113,113,.08);}
  .memory-proposal-value{font-size:13px;line-height:1.55;color:var(--text);white-space:pre-wrap;word-break:break-word;}
  .memory-proposal-rationale{font-size:12px;line-height:1.5;color:var(--muted);margin-top:8px;}
  .memory-proposal-evidence{margin:8px 0 0 18px;color:var(--muted);font-size:12px;line-height:1.5;}
  .memory-proposal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:12px;}
.field-label{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin-bottom:5px;opacity:.8;}
  select{width:100%;background:var(--input-bg);border:1px solid var(--border2);border-radius:8px;color:var(--text);padding:8px 28px 8px 10px;font-size:12px;outline:none;appearance:none;margin-bottom:6px;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%238888aa' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;}
  select:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-bg);}
  optgroup{color:var(--muted);font-size:11px;font-weight:700;}
  option{background:var(--bg);color:var(--text);padding:6px;}
  .sidebar-actions{display:flex;gap:6px;}
  .sm-btn{flex:1;padding:8px 0;border-radius:8px;font-size:11px;font-weight:500;background:var(--input-bg);border:1px solid var(--border);color:var(--muted);cursor:pointer;transition:all .15s;text-align:center;letter-spacing:.02em;}
  .sm-btn:hover{background:rgba(255,255,255,0.09);color:var(--text);border-color:rgba(255,255,255,.15);}
  .sm-btn:disabled{opacity:.45;cursor:not-allowed;}
  .main{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0;min-height:0;background:var(--main-bg);}
  .topbar{padding:12px 20px;border-bottom:1px solid var(--border);background:var(--topbar-bg);backdrop-filter:blur(12px);display:flex;align-items:center;justify-content:space-between;flex-shrink:0;position:relative;z-index:10;}
  .topbar-title{font-size:15px;font-weight:600;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
  .topbar-meta{font-size:11px;color:var(--muted);margin-top:3px;opacity:.75;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
  .topbar-chips{display:flex;gap:6px;align-items:center;flex-shrink:0;}
  .chip{font-size:11px;padding:4px 10px;border-radius:999px;background:rgba(255,255,255,0.05);border:1px solid var(--border2);color:var(--muted);font-weight:500;}
  .workspace-toggle-btn{display:inline-flex!important;align-items:center;gap:6px;cursor:pointer;}
  .workspace-toggle-btn.active{color:var(--accent-text);border-color:var(--accent-bg);background:var(--accent-bg);}
  .workspace-toggle-btn:disabled{opacity:.38;cursor:not-allowed;}
  .chip.model{color:var(--accent-text);border-color:var(--accent-bg-strong);background:var(--accent-bg);}
  .messages{flex:1;overflow-y:auto;display:flex;flex-direction:column;min-height:0;position:relative;z-index:0;-webkit-overflow-scrolling:touch;touch-action:pan-y;overscroll-behavior-y:contain;overflow-anchor:none;}
  /* sticky-first-child: button is first child of .messages so its natural position is above viewport; sticky+bottom:16px pins it there when visible */
  /* 2026-05-27 · 改 fixed 定位 + up/down 双按钮(原 sticky 在 flex column 不可靠)*/
  .scroll-jump-btn{position:fixed;right:32px;width:34px;height:34px;border-radius:50%;border:1px solid var(--border2);background:var(--code-bg);color:var(--muted);font-size:16px;cursor:pointer;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25);z-index:50;transition:color .12s,border-color .12s,background .12s,opacity .15s;}
  .scroll-jump-btn:hover{color:var(--text);border-color:var(--border);background:var(--hover-bg);}
  .scroll-jump-btn--top{bottom:178px;}
  .scroll-jump-btn--bottom{bottom:134px;}
  /* legacy class alias 保留 — 已有调用 still target this name */
  .scroll-to-bottom-btn{position:fixed;right:32px;bottom:134px;width:34px;height:34px;border-radius:50%;border:1px solid var(--border2);background:var(--code-bg);color:var(--muted);font-size:16px;cursor:pointer;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25);z-index:50;}
  .scroll-to-bottom-btn:hover{color:var(--text);border-color:var(--border);background:var(--hover-bg);}
  .messages-inner{margin:0 auto;width:100%;padding:20px 24px 32px;display:flex;flex-direction:column;}
  @media(min-width:1400px){.messages-inner{max-width:1100px;}}
  @media(min-width:1800px){.messages-inner{max-width:1200px;}}
  .msg-row{padding:10px 0;}
  .msg-row+.msg-row{border-top:none;}
  .msg-role{font-size:12px;font-weight:500;letter-spacing:.01em;margin-bottom:8px;display:flex;align-items:center;gap:8px;}
  .msg-role.user{color:var(--accent);}
  .msg-role.assistant{color:var(--accent-text);opacity:.6;}
  .role-icon{width:22px;height:22px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700;flex-shrink:0;}
  .role-icon.user{background:var(--accent-bg);color:var(--accent-text);border:1px solid var(--accent-bg-strong);}
  .role-icon.assistant{background:var(--accent-bg-strong);color:var(--accent-text);border:1px solid var(--accent-bg-strong);}
  .msg-body{font-size:14px;line-height:1.75;color:var(--text);padding-left:30px;max-width:680px;overflow-wrap:anywhere;}
  .msg-body p{margin-bottom:10px;}.msg-body p:last-child{margin-bottom:0;}
  .msg-body ul,.msg-body ol{margin:6px 0 10px 20px;}.msg-body li{margin-bottom:3px;}
  .msg-body h1,.msg-body h2,.msg-body h3,.msg-body h4,.msg-body h5,.msg-body h6{font-weight:700;color:var(--strong,var(--text));line-height:1.3;}
  .msg-body h1{font-size:24px;margin:24px 0 12px;border-bottom:1px solid var(--border);padding-bottom:6px;}
  .msg-body h2{font-size:20px;margin:22px 0 10px;border-bottom:1px solid var(--border);padding-bottom:4px;}
  .msg-body h3{font-size:17px;margin:20px 0 8px;}
  .msg-body h4{font-size:15px;margin:18px 0 8px;}
  .msg-body h5{font-size:14px;margin:16px 0 6px;text-transform:uppercase;letter-spacing:0.04em;}
  .msg-body h6{font-size:13px;margin:14px 0 6px;color:var(--muted);text-transform:uppercase;letter-spacing:0.04em;}
  /* First-heading-of-message: collapse the top margin so it doesn't push the
     entire message down (the row already has spacing). */
  .msg-body > h1:first-child,.msg-body > h2:first-child,.msg-body > h3:first-child,
  .msg-body > h4:first-child,.msg-body > h5:first-child,.msg-body > h6:first-child{margin-top:0;}
  .msg-body strong{color:var(--strong);font-weight:600;}.msg-body em{color:var(--em);font-style:italic;}
  .msg-body code{font-family:"SF Mono","Fira Code",ui-monospace,monospace;font-size:12.5px;background:var(--code-inline-bg);padding:1px 5px;border-radius:4px;color:var(--code-text);}
  .msg-body pre{background:var(--code-bg);border:1px solid var(--border);border-radius:10px;padding:14px 16px;overflow-x:auto;margin:10px 0;}
  .msg-body pre code{background:none;padding:0;border-radius:0;color:var(--pre-text);font-size:13px;line-height:1.6;}
  /* Keep original theme background — prevent prism-tomorrow from overriding --code-bg */
  .msg-body pre[class*="language-"],.msg-body pre code[class*="language-"]{background:var(--code-bg) !important;}
  .pre-header{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);padding:8px 16px 8px;background:var(--input-bg);border-radius:10px 10px 0 0;border:1px solid var(--border);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:6px;}
  .pre-header::before{content:'';width:8px;height:8px;border-radius:50%;background:var(--muted);opacity:.4;}
  .pre-header+pre{border-radius:0 0 10px 10px;border-top:none;margin-top:0;}
  /* Diff/patch viewer */
  .diff-block{margin:0;counter-reset:diff-line;}
  .diff-block .diff-line{display:block;padding:0 16px;min-height:1.4em;white-space:pre;}
  .diff-block .diff-plus{background:rgba(34,197,94,.1);color:#22c55e;}
  .diff-block .diff-minus{background:rgba(239,68,68,.1);color:#ef4444;}
  .diff-block .diff-hunk{color:var(--muted);font-style:italic;background:rgba(99,102,241,.06);}
  .diff-inline-load{color:var(--muted);font-size:13px;padding:8px 12px;border:1px dashed var(--border);border-radius:8px;margin:6px 0;}
  .diff-inline{margin:6px 0;}
  .diff-inline-error{color:#ef4444;font-size:13px;padding:8px 12px;border:1px solid rgba(239,68,68,.2);border-radius:8px;margin:6px 0;}
  /* JSON/YAML tree viewer */
  .code-tree-wrap{position:relative;}
  .tree-view{padding:4px 0;font-family:'JetBrains Mono',monospace;font-size:13px;}
  .tree-hidden{display:none;}
  .tree-toggle-btn{background:none;border:1px solid var(--border);border-radius:4px;padding:1px 8px;font-size:10px;color:var(--muted);cursor:pointer;font-weight:600;}
  .tree-toggle-btn:hover{color:var(--text);border-color:var(--muted);}
  .tree-node{padding-left:16px;}
  .tree-collapsible{cursor:pointer;user-select:none;color:var(--muted);}
  .tree-collapsible:hover{color:var(--text);}
  .tree-bracket{color:var(--muted);}
  .tree-count{color:var(--muted);font-size:11px;margin:0 2px;}
  .tree-children{border-left:1px solid var(--border);margin-left:8px;}
  .tree-collapsed{display:none;}
  .tree-key{color:#60a5fa;font-weight:600;}
  .tree-colon{color:var(--muted);}
  .tree-str{color:#4ade80;}
  .tree-num{color:#60a5fa;}
  .tree-bool{color:#fbbf24;}
  .tree-null{color:var(--muted);font-style:italic;}
  .tree-comma{color:var(--muted);}
  .tree-item{line-height:1.6;}
  .msg-body blockquote{border-left:3px solid var(--blue);padding-left:14px;color:var(--muted);font-style:italic;margin:10px 0;}
  .msg-body blockquote p{margin:0;}
  .msg-body a{color:var(--blue);text-decoration:underline;}
  .msg-body hr{border:none;border-top:1px solid var(--border);margin:14px 0;}
  .msg-body table{border-collapse:collapse;width:100%;margin:8px 0;font-size:12px;}
  .msg-body th{background:rgba(255,255,255,.07);padding:6px 10px;text-align:left;font-weight:600;border:1px solid var(--border2);}
  .msg-body td{padding:5px 10px;border:1px solid rgba(255,255,255,.06);}
  .msg-body tr:nth-child(even){background:rgba(255,255,255,.03);}
  /* #486: inline code inside table cells needs scaled sizing to avoid overflow/clipping */
  .msg-body td code,.msg-body th code{font-size:0.85em;padding:1px 4px;vertical-align:baseline;}
  /* KaTeX math rendering */
  .katex-block{display:block;text-align:center;margin:12px 0;overflow-x:auto;}
  .katex-inline{display:inline;}
  .katex-block .katex-html{text-align:center;}
  .msg-body .katex{font-size:1.1em;}
  .msg-body .katex-display{margin:8px 0;}
  .msg-files{display:flex;flex-wrap:wrap;gap:6px;padding-left:30px;margin-bottom:10px;}
  .msg-file-badge{display:flex;flex-direction:column;align-items:flex-start;gap:2px;background:var(--accent-bg);border:1px solid var(--accent-bg-strong);border-radius:6px;padding:5px 9px;font-size:12px;color:var(--accent-text);max-width:min(320px,100%);}
  .msg-file-main{display:flex;align-items:center;gap:5px;min-width:0;max-width:100%;overflow-wrap:anywhere;}
  .msg-file-status{display:block;font-size:10.5px;line-height:1.25;color:var(--muted);}
  .msg-file-status--ready{color:var(--muted);}
  .msg-file-status--pending{color:var(--accent-text);}
  .msg-file-status--failed{color:var(--danger,var(--muted));}
  .msg-attachment-preview,.msg-attachment-with-status{display:inline-flex;flex-direction:column;align-items:flex-start;gap:3px;vertical-align:top;max-width:100%;}
  .msg-attachment-preview .msg-media-img{margin-bottom:0;}
  /* MEDIA: inline image rendering (feat #450) */
  .msg-media-img{display:inline-block;width:120px;height:90px;border-radius:6px;margin:3px 4px 3px 0;cursor:zoom-in;object-fit:cover;border:1px solid var(--border);vertical-align:bottom;transition:opacity .15s;}
  .msg-media-img:hover{opacity:.85;}
  .product-image-fallback-card{display:grid;grid-template-columns:120px minmax(0,1fr);gap:12px;align-items:center;margin:8px 0;padding:10px;border:1px solid color-mix(in srgb,var(--blue,#60a5fa) 34%,var(--border));border-radius:8px;background:color-mix(in srgb,var(--blue,#60a5fa) 6%,var(--surface));max-width:min(560px,100%);}
  .product-image-fallback-media{display:block;width:120px;aspect-ratio:1/1;border-radius:7px;overflow:hidden;border:1px solid var(--border);background:var(--surface2,var(--surface));}
  .product-image-fallback-media img{display:block;width:100%;height:100%;object-fit:cover;}
  .product-image-fallback-body{min-width:0;display:flex;flex-direction:column;gap:4px;}
  .product-image-fallback-kicker{font-size:12px;font-weight:700;color:var(--text);}
  .product-image-fallback-body a{font-size:12px;line-height:1.4;word-break:break-all;}
  @media(max-width:640px){.product-image-fallback-card{grid-template-columns:88px minmax(0,1fr);}.product-image-fallback-media{width:88px;}}
  .session-render-window-notice{margin:12px auto 18px;padding:8px 12px;max-width:min(760px,calc(100% - 32px));border:1px solid var(--border);border-radius:8px;color:var(--muted);background:var(--surface);font-size:13px;text-align:center;}
  .assistant-empty-recovery{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:12px 14px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--muted);}
  .assistant-empty-recovery strong{color:var(--text);}
  .assistant-empty-recovery button{margin-left:auto;border:1px solid var(--border);background:var(--surface2,var(--surface));color:var(--text);border-radius:7px;padding:6px 10px;cursor:pointer;}
  .assistant-empty-recovery button:disabled{opacity:.65;cursor:default;}
  .img-lightbox{position:fixed;inset:0;z-index:9999;background:rgba(0,0,0,.82);display:flex;align-items:center;justify-content:center;cursor:zoom-out;animation:lb-in .15s ease;}
  @keyframes lb-in{from{opacity:0}to{opacity:1}}
  .img-lightbox img{max-width:90vw;max-height:90vh;object-fit:contain;border-radius:8px;box-shadow:0 8px 48px rgba(0,0,0,.6);cursor:default;}
  .img-lightbox-close{position:absolute;top:16px;right:20px;width:36px;height:36px;border:none;border-radius:50%;background:rgba(255,255,255,.12);color:#fff;font-size:20px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s;}
  .img-lightbox-close:hover{background:rgba(255,255,255,.22);}
  .msg-media-link{display:inline-flex;align-items:center;gap:5px;background:var(--accent-bg);border:1px solid var(--accent-bg-strong);border-radius:6px;padding:4px 10px;font-size:13px;color:var(--accent-text);text-decoration:none;}
  .msg-media-link:hover{background:var(--accent-bg-strong);}

  /* ── Inline SVG rendering ── */
  .msg-media-svg{display:block;max-width:100%;height:auto;border-radius:6px;margin:6px 0;border:1px solid var(--border);background:var(--surface);}
  .msg-media-label{display:block;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin-bottom:4px;user-select:none;}

  /* ── Inline audio/video media editor with speed controls ── */
  .msg-media-editor{display:flex;flex-direction:column;gap:8px;width:min(520px,100%);max-width:100%;padding:10px;border:1px solid var(--border);border-radius:10px;background:var(--surface);margin:6px 0;}
  .msg-media-editor--audio{min-width:min(360px,100%);}
  .msg-media-player{width:100%;display:block;border-radius:8px;}
  .msg-media-video.msg-media-player{max-height:320px;object-fit:contain;background:#000;border:1px solid var(--border2);}
  .msg-media-audio.msg-media-player{height:36px;background:transparent;}
  .msg-media-meta{display:flex;align-items:center;gap:8px;min-width:0;font-size:11px;color:var(--muted);}
  .msg-media-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .media-speed-controls{display:flex;flex-wrap:wrap;gap:4px;align-items:center;}
  .media-speed-btn{border:1px solid var(--border2);background:var(--input-bg);color:var(--muted);border-radius:999px;padding:3px 8px;font-size:11px;font-weight:600;line-height:1.2;cursor:pointer;transition:background .15s,border-color .15s,color .15s;}
  .media-speed-btn:hover{background:var(--hover-bg);color:var(--text);}
  .media-speed-btn.active{background:var(--accent-bg);border-color:var(--accent-bg-strong);color:var(--accent-text);}

  /* ── Composer attachment chips for media ── */
  .attach-thumb--svg{background:var(--surface);padding:2px;border-radius:4px;}
  .attach-chip--audio,.attach-chip--video{flex-direction:column;gap:4px;align-items:flex-start;padding:8px 10px;}
  .attach-chip--audio audio,.attach-chip--video video{width:100%;max-width:320px;border-radius:4px;}
  .attach-chip-media{font-size:12px;font-weight:600;color:var(--muted);}

  /* ── CSV table rendering ── */
  .csv-table-wrap{margin:6px 0;overflow-x:auto;border:1px solid var(--border);border-radius:8px;background:var(--surface);}
  .csv-table{width:100%;border-collapse:collapse;font-size:13px;}
  .csv-table thead{position:sticky;top:0;z-index:1;}
  .csv-table th{background:var(--hover-bg);font-weight:600;text-align:left;padding:8px 12px;border-bottom:2px solid var(--border2);white-space:nowrap;user-select:none;}
  .csv-table td{padding:6px 12px;border-bottom:1px solid var(--border);white-space:nowrap;}
  .csv-table tbody tr:last-child td{border-bottom:none;}
  .csv-table tbody tr:hover{background:var(--hover-bg);}

  /* ── Excalidraw inline embed ── */
  .excalidraw-embed-wrap{margin:6px 0;border:1px solid var(--border);border-radius:8px;background:var(--surface);overflow:hidden;}
  .excalidraw-canvas{padding:12px;overflow:auto;max-height:500px;}
  .excalidraw-svg{display:block;width:100%;height:auto;max-height:460px;}
  .excalidraw-empty{color:var(--muted);font-size:13px;padding:20px;text-align:center;}
  .excalidraw-open-link{font-size:11px;color:var(--accent);text-decoration:none;margin-left:auto;white-space:nowrap;}
  .excalidraw-open-link:hover{text-decoration:underline;}
  .thinking{display:flex;align-items:center;gap:5px;color:var(--muted);font-size:13px;padding-left:30px;}
  .dot{width:6px;height:6px;border-radius:50%;background:var(--blue);opacity:.3;animation:pulse 1.4s ease-in-out infinite;}
  .dot:nth-child(2){animation-delay:.22s;}.dot:nth-child(3){animation-delay:.44s;}
  @keyframes pulse{0%,80%,100%{opacity:.2;transform:scale(.8)}40%{opacity:.8;transform:scale(1)}}
  .thinking-phase-label{margin-left:6px;color:var(--muted);font-size:13px;opacity:.9;animation:thinking-phase-fade .3s ease;}
  @keyframes thinking-phase-fade{from{opacity:0;}to{opacity:.9;}}
  .empty-state{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px;color:var(--muted);}
  /* 2026-05-21: container chrome removed by user request — bare logo,
     no rounded-rect plaque, no accent-tinted background, no shadow.
     Width bumped to 80px so the inline-set img width/height in the
     HTML continues to render at its natural 1:1 ratio. */
  .empty-logo{width:80px;height:80px;display:flex;align-items:center;justify-content:center;margin-bottom:4px;}
  /* 2026-05-22 (supersedes the invert/hue-rotate stop-gap): theme-
     aware brand mark via two purpose-built SVG variants. CSS variable
     points at the right asset based on `html.dark` class; mark element
     is a sized <span> with background-image. No <img>, no filter.
     - --brand-mark-url defaults to the dark-fill SVG (light theme bg)
     - html.dark overrides it to the artist-tuned light-fill SVG that
       preserves the brand-blue soul highlight and lightens outer strokes
     Used by titlebar brand/icon (.brand-mark) and empty-state hero
     (.brand-mark.brand-mark-lg) — one rule, three sites. Inherit
     width/height from the parent's existing layout slot so we don't
     have to size each instance. */
  :root{--brand-mark-url:url('/static/pmtsoul-logo.svg');}
  html.dark{--brand-mark-url:url('/static/pmtsoul-logo-light.svg');}
  .brand-mark{
    display:inline-block;
    width:100%;height:100%;
    background-image:var(--brand-mark-url);
    background-repeat:no-repeat;
    background-position:center;
    background-size:contain;
  }
  /* Hero variant: explicit size for empty-state since its parent
     .empty-logo expects an 80×80 child to fill it. */
  .brand-mark-lg{width:80px;height:80px;}
  .empty-state h2{font-size:20px;color:var(--text);font-weight:700;letter-spacing:-.02em;}
  .empty-state p{font-size:14px;text-align:center;max-width:320px;}
  .suggestion-grid{display:flex;flex-direction:column;gap:8px;margin-top:12px;width:100%;max-width:380px;}
  .suggestion{padding:12px 14px;background:var(--input-bg);border:1px solid var(--border);border-radius:10px;font-size:13px;color:var(--muted);cursor:pointer;transition:all .15s;text-align:left;}
  .suggestion:hover{background:var(--accent-bg);color:var(--text);border-color:var(--accent-bg);transform:translateX(2px);}
  /* ── Composer ── */
  .composer-wrap{padding:12px 20px 16px;background:var(--bg);flex-shrink:0;}
  .composer-box{max-width:780px;margin:0 auto;background:linear-gradient(var(--input-bg),var(--input-bg)),var(--bg);border:1px solid var(--border2);border-radius:16px;display:flex;flex-direction:column;transition:border-color .2s,box-shadow .2s;position:relative;z-index:2;}
  .composer-box:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-bg);}
  .composer-wrap.drag-over .composer-box{border-color:var(--accent-text);background:var(--accent-bg);}
  .drop-hint{display:none;position:absolute;inset:0;align-items:center;justify-content:center;background:var(--accent-bg);border:2px dashed var(--accent);border-radius:14px;font-size:14px;color:var(--accent-text);pointer-events:none;z-index:10;flex-direction:column;gap:8px;}
  .composer-wrap.drag-over .drop-hint{display:flex;}
  .attach-tray{display:none;flex-wrap:wrap;gap:6px;padding:10px 14px 0;}
  .attach-tray.has-files{display:flex;}
  .attach-chip{display:flex;align-items:center;gap:5px;background:var(--accent-bg);border:1px solid var(--accent-bg-strong);border-radius:8px;padding:4px 10px;font-size:11px;font-weight:500;color:var(--accent-text);}
  .attach-chip button{background:none;border:none;color:var(--muted);cursor:pointer;font-size:13px;line-height:1;padding:0 0 0 3px;}
  .attach-chip button:hover{color:var(--accent);}
  /* Image attachment chips show a thumbnail preview instead of a paperclip chip */
  .attach-chip--image{background:transparent;border-color:var(--border);padding:3px;border-radius:6px;}
  .attach-chip--audio,.attach-chip--video{max-width:260px;}
  .attach-media-icon{display:inline-flex;align-items:center;color:var(--accent-text);}
  .attach-chip-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .attach-thumb{width:56px;height:56px;object-fit:cover;border-radius:4px;display:block;cursor:default;}
  textarea#msg{width:100%;background:transparent;border:none;outline:none;color:var(--text);font-size:16px;line-height:1.65;padding:12px 16px 6px;resize:none;min-height:44px;max-height:200px;font-family:inherit;}
  textarea#msg::placeholder{color:var(--muted);}
  .composer-footer{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 10px 10px;position:relative;container-type:inline-size;container-name:composer-footer;}
  .composer-left{display:flex;align-items:center;gap:4px;min-width:0;flex:1;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;}
  .composer-left::-webkit-scrollbar{display:none;}
  .composer-divider{width:1px;height:16px;background:var(--border);margin:0 3px;flex-shrink:0;}
  .composer-profile-wrap{position:relative;flex:0 1 auto;min-width:0;}
  .composer-profile-chip{display:inline-flex;align-items:center;gap:8px;max-width:150px;padding:8px 10px 8px 12px;border-radius:999px;border:1px solid transparent;background-color:transparent;font-weight:500;cursor:pointer;transition:color .15s,background-color .15s,border-color .15s;}
  .composer-profile-chip:hover{background-color:var(--hover-bg);}
  .composer-profile-chip.active{background:var(--accent-bg);border-color:var(--accent-bg-strong);}
  .composer-profile-chip.switching{opacity:.65;cursor:wait;pointer-events:none;}
  .composer-profile-chip.switching .composer-profile-icon::after{content:'';display:inline-block;width:10px;height:10px;border:1.5px solid currentColor;border-top-color:transparent;border-radius:50%;animation:spin .6s linear infinite;position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px;}
  .composer-profile-chip.switching .composer-profile-icon{position:relative;}
  .composer-profile-icon,.composer-profile-chevron{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;line-height:1;}
  .composer-profile-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .composer-ws-wrap{position:relative;flex:0 1 auto;min-width:0;display:flex;align-items:center;gap:4px;}
  .composer-workspace-group{display:inline-flex;align-items:stretch;max-width:210px;border-radius:999px;overflow:hidden;background-color:transparent;border:1px solid var(--border2);transition:background-color .15s,border-color .15s;}
  .composer-workspace-group:hover{background-color:var(--hover-bg);}
  .composer-workspace-group:hover{border-color:var(--border2);}
  .composer-workspace-group:hover .composer-workspace-files-btn,
  .composer-workspace-group:hover .composer-workspace-chip{color:var(--text);}
  .composer-workspace-files-btn{display:inline-flex;align-items:center;justify-content:center;padding:8px 10px 8px 12px;background-color:transparent;border:none;border-left:1px solid transparent;border-radius:999px 0 0 999px;color:var(--muted);cursor:pointer;transition:color .15s,background-color .15s,border-color .15s;-webkit-tap-highlight-color:transparent;}
  .composer-workspace-files-btn:disabled{opacity:.45;cursor:not-allowed;}
  .composer-workspace-files-btn.active{color:var(--accent-text);background:var(--accent-bg);}
  .composer-workspace-chip{display:inline-flex;align-items:center;gap:8px;min-width:0;max-width:140px;padding:8px 12px 8px 10px;border:none;border-left:1px solid transparent;border-radius:0 999px 999px 0;background-color:transparent;color:var(--muted);font-weight:500;cursor:pointer;transition:color .15s,border-color .15s;}
  .composer-workspace-group:hover .composer-workspace-files-btn+.composer-workspace-chip{border-left-color:var(--border2);}
  .composer-workspace-chip:disabled{opacity:.45;cursor:not-allowed;}
  .composer-workspace-chip.active{color:var(--text);background:var(--accent-bg);}
  .composer-workspace-icon,.composer-workspace-chevron{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;line-height:1;}
  .composer-workspace-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .composer-tenant-wrap{position:relative;flex:0 1 auto;min-width:0;}
  .composer-tenant-chip{display:inline-flex;align-items:center;gap:8px;max-width:150px;padding:8px 12px;border-radius:999px;border:1px solid var(--border2);background:transparent;color:var(--muted);font-weight:500;cursor:default;transition:color .15s,background-color .15s,border-color .15s;}
  .composer-tenant-chip.active{color:var(--text);background:var(--accent-bg);border-color:var(--accent-bg-strong);}
  .composer-tenant-icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;line-height:1;}
  .composer-tenant-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .composer-runtime-wrap{position:relative;flex:0 1 auto;min-width:0;}
  .composer-runtime-chip{box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;gap:0;width:44px;min-width:44px;max-width:44px;min-height:44px;padding:6px;border-radius:999px;border:1px solid var(--border2);background:transparent;color:var(--muted);font-weight:500;cursor:default;transition:color .15s,background-color .15s,border-color .15s;}
  .composer-runtime-chip.active{color:var(--text);background:var(--accent-bg);border-color:var(--accent-bg-strong);}
  .composer-runtime-icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;line-height:1;}
  .composer-runtime-label{display:none;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .composer-skill-wrap{position:relative;flex:0 1 auto;min-width:0;}
  .composer-skill-chip{box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;gap:0;width:44px;min-width:44px;max-width:44px;min-height:44px;padding:6px;border-radius:999px;border:1px solid var(--border2);background:transparent;color:var(--muted);font-weight:500;cursor:default;transition:color .15s,background-color .15s,border-color .15s;}
  .composer-skill-chip.active{color:var(--text);background:var(--accent-bg);border-color:var(--accent-bg-strong);}
  .composer-skill-icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;line-height:1;}
  .composer-skill-label{display:none;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .composer-context-tip{position:fixed;z-index:1000;box-sizing:border-box;pointer-events:none;white-space:pre-line;padding:9px 12px;border-radius:10px;border:1px solid var(--border2);background:color-mix(in srgb,var(--surface) 94%,#000 6%);color:var(--text);box-shadow:0 12px 32px rgba(0,0,0,.42);font-size:12px;line-height:1.45;opacity:0;transform:translateY(4px);transition:opacity .14s ease,transform .14s ease;}
  .composer-context-tip.show{opacity:1;transform:translateY(0);}
  .composer-reasoning-wrap{position:relative;flex:0 1 auto;min-width:0;}
  .composer-reasoning-chip{display:inline-flex;align-items:center;gap:8px;max-width:180px;padding:8px 10px 8px 12px;border-radius:999px;border:1px solid transparent;background-color:transparent;color:var(--muted);font-weight:500;cursor:pointer;transition:color .15s,background-color .15s,border-color .15s;}
  .composer-reasoning-chip.inactive{opacity:.78;}
  .composer-reasoning-chip:hover{color:var(--text);background-color:var(--hover-bg);}
  .composer-reasoning-chip.active{color:var(--text);background:var(--accent-bg);border-color:var(--accent-bg);}
  .composer-reasoning-icon,.composer-reasoning-chevron{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;line-height:1;}
  .composer-reasoning-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .composer-reasoning-dropdown{display:none;position:absolute;bottom:calc(100% + 4px);left:0;min-width:140px;background:var(--surface);border:1px solid var(--border2);border-radius:10px;box-shadow:0 -4px 24px rgba(0,0,0,.4);z-index:200;padding:4px;overflow:hidden;}
  .composer-reasoning-dropdown.open{display:block;}
  .reasoning-option{padding:8px 14px;border-radius:6px;cursor:pointer;font-size:13px;color:var(--text);white-space:nowrap;transition:background-color .12s;}
  .reasoning-option:hover{background:rgba(255,255,255,.07);}
  .reasoning-option.selected{background:var(--accent-bg);}
  /* Toolsets chip — session-level toolset override (#493) */
  .composer-toolsets-wrap{position:relative;flex:0 1 auto;min-width:0;display:none;}
  .composer-toolsets-chip{display:inline-flex;align-items:center;gap:8px;max-width:180px;padding:8px 10px 8px 12px;border-radius:999px;border:1px solid transparent;background-color:transparent;color:var(--muted);font-weight:500;cursor:pointer;transition:color .15s,background-color .15s,border-color .15s;}
  .composer-toolsets-chip:hover{color:var(--text);background-color:var(--hover-bg);}
  .composer-toolsets-chip.active{color:var(--text);background:var(--accent-bg);border-color:var(--accent-bg);}
  .composer-toolsets-chip.has-custom{color:var(--accent);border-color:var(--accent-bg);}
  .composer-toolsets-icon,.composer-toolsets-chevron{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;line-height:1;}
  .composer-toolsets-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .composer-toolsets-dropdown{display:none;position:absolute;bottom:calc(100% + 4px);left:0;min-width:260px;max-width:320px;background:var(--surface);border:1px solid var(--border2);border-radius:10px;box-shadow:0 -4px 24px rgba(0,0,0,.4);z-index:200;padding:12px;overflow:hidden;}
  .composer-toolsets-dropdown.open{display:block;}
  .toolsets-dropdown-desc{font-size:12px;color:var(--muted);margin-bottom:8px;line-height:1.4;}
  .toolsets-dropdown-state{font-size:12px;color:var(--text);margin-bottom:10px;padding:6px 10px;background:var(--hover-bg);border-radius:6px;word-break:break-all;}
  .toolsets-dropdown-input-row{margin-bottom:10px;}
  .toolsets-input{width:100%;box-sizing:border-box;padding:8px 10px;border-radius:6px;border:1px solid var(--border2);background:var(--hover-bg);color:var(--text);font-size:13px;outline:none;transition:border-color .15s;}
  .toolsets-input:focus{border-color:var(--accent);}
  .toolsets-input::placeholder{color:var(--muted);opacity:.7;}
  .toolsets-dropdown-actions{display:flex;gap:8px;justify-content:flex-end;}
  .toolsets-action-btn{padding:6px 14px;border-radius:6px;border:none;font-size:12px;font-weight:500;cursor:pointer;transition:background-color .12s,color .12s;}
  .toolsets-apply-btn{background:var(--accent);color:#fff;}
  .toolsets-apply-btn:hover{opacity:.9;}
  .toolsets-clear-btn{background:transparent;color:var(--muted);border:1px solid var(--border2);}
  .toolsets-clear-btn:hover{background:var(--hover-bg);color:var(--text);}
  .composer-model-wrap{position:relative;flex:0 1 auto;min-width:0;}
  .composer-model-chip{display:inline-flex;align-items:center;gap:8px;max-width:280px;padding:8px 10px 8px 12px;border-radius:999px;border:1px solid transparent;background-color:transparent;color:var(--muted);font-weight:500;cursor:pointer;transition:color .15s,background-color .15s,border-color .15s;}
  .composer-model-chip:hover{color:var(--text);background-color:var(--hover-bg);}
  .composer-model-chip.active{color:var(--text);background:var(--accent-bg);border-color:var(--accent-bg);}
  .composer-model-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .composer-model-icon,.composer-model-chevron{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;line-height:1;}
  .composer-model-select{position:absolute!important;left:-9999px!important;width:1px!important;height:1px!important;opacity:0!important;pointer-events:none!important;}
  /* Increased specificity (.icon-btn.composer-mobile-config-btn) to win the cascade
     against the later-in-source `.icon-btn { display:flex }` rule that this element
     also matches. Without this, the button shows at desktop width — see #1381 review. */
  .icon-btn.composer-mobile-config-btn{display:none;}
  .composer-mobile-config-btn.active{background:var(--accent-bg);border-color:var(--accent-bg-strong);color:var(--text);opacity:1;}
  .composer-mobile-ctx-badge{position:absolute;right:2px;bottom:2px;display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 3px;border-radius:999px;background:var(--surface);border:1px solid var(--border2);color:var(--muted);font-size:8px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums;box-shadow:0 1px 4px rgba(0,0,0,.28);pointer-events:none;}
  .composer-mobile-ctx-badge.ctx-mid{color:var(--warning);border-color:var(--warning);}
  .composer-mobile-ctx-badge.ctx-high{color:var(--error);border-color:var(--error);}
  .composer-mobile-config-panel{display:none;position:absolute;left:8px;right:8px;bottom:calc(100% + 6px);z-index:180;padding:8px;gap:8px;align-items:stretch;justify-content:flex-start;flex-wrap:wrap;background:var(--surface);border:1px solid var(--border2);border-radius:12px;box-shadow:0 -6px 28px rgba(0,0,0,.35);overflow:visible;}
  .composer-mobile-config-action{box-sizing:border-box;display:inline-flex;align-items:center;gap:10px;min-width:0;min-height:44px;padding:8px 10px;border-radius:10px;border:1px solid transparent;background:transparent;color:var(--muted);font:inherit;text-align:left;cursor:pointer;overflow:hidden;}
  .composer-mobile-config-action.active{background:var(--accent-bg);border-color:var(--accent-bg-strong);color:var(--text);}
  .composer-mobile-config-copy{display:flex;flex-direction:column;gap:1px;min-width:0;line-height:1.2;}
  /* The kicker labels (WORKSPACE / MODEL / REASONING / CONTEXT) duplicate the
     meaning the row icon already conveys, and at iPhone 14 width (390px) the
     ~60px copy column truncates them. Hide them inside the open panel — the
     icon + value gives a cleaner two-row layout per pill. The .context row
     keeps its kicker because it stretches to 100% width and has more value
     content (usage / tokens / threshold). See #1381 review feedback. */
  .composer-mobile-config-action:not(.composer-mobile-context-action) .composer-mobile-config-kicker{display:none;}
  .composer-mobile-config-kicker{font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);}
  .composer-mobile-config-value{font-size:12px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .composer-mobile-context-action{flex:1 0 100%;align-items:flex-start;cursor:default;overflow:visible;}
  .composer-mobile-context-copy{flex:1 1 auto;gap:2px;}
  .composer-mobile-context-detail{font-size:11px;color:var(--muted);white-space:normal;line-height:1.25;}
  .composer-mobile-context-compress{flex:0 0 auto;width:auto;max-width:128px;align-self:center;text-align:center;white-space:normal;}
  .composer-mobile-context-action.ctx-mid .composer-mobile-config-value{color:var(--warning);}
  .composer-mobile-context-action.ctx-high .composer-mobile-config-value{color:var(--error);}
  .composer-mobile-context-action.ctx-high .composer-mobile-context-compress{border-color:var(--error);color:var(--error);}
  .composer-right{display:flex;gap:8px;align-items:center;flex-shrink:0;}
  .composer-status{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:170px;}
  /* Context usage indicator */
  .ctx-indicator-wrap{position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;}
  .ctx-indicator{width:34px;height:34px;padding:0;border:none;background:none;color:var(--muted);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;transition:opacity .15s,transform .15s;}
  .ctx-indicator:hover{opacity:.88;transform:translateY(-1px);}
  .ctx-ring{position:relative;display:flex;width:24px;height:24px;align-items:center;justify-content:center;}
  .ctx-ring-svg{position:absolute;inset:0;width:24px;height:24px;transform:rotate(-90deg);}
  .ctx-ring-track,.ctx-ring-value{fill:none;stroke-width:3;}
  .ctx-ring-track{stroke:rgba(255,255,255,.12);}
  .ctx-ring-value{stroke:var(--muted);stroke-linecap:round;stroke-dasharray:61.261056745;stroke-dashoffset:61.261056745;transition:stroke-dashoffset .45s ease,stroke .25s ease;}
  .ctx-ring-center{position:relative;display:flex;width:15px;height:15px;align-items:center;justify-content:center;border-radius:999px;background:var(--bg);font-size:8px;font-weight:600;line-height:1;color:var(--muted);font-variant-numeric:tabular-nums;}
  .ctx-indicator.ctx-mid .ctx-ring-value{stroke:var(--warning);}
  .ctx-indicator.ctx-high .ctx-ring-value{stroke:var(--error);}
  .ctx-tooltip{position:absolute;right:0;bottom:calc(100% + 10px);min-width:210px;max-width:250px;padding:10px 12px;border:1px solid var(--border2);border-radius:12px;background:var(--surface);box-shadow:0 12px 30px rgba(0,0,0,.28);font-size:11px;line-height:1.45;color:var(--muted);opacity:0;transform:translateY(4px);pointer-events:none;transition:opacity .14s ease,transform .14s ease;z-index:30;}
  .ctx-tooltip::after{content:'';position:absolute;right:10px;top:100%;border-width:6px 6px 0 6px;border-style:solid;border-color:var(--surface) transparent transparent transparent;}
  .ctx-indicator-wrap:hover .ctx-tooltip,.ctx-indicator-wrap:focus-within .ctx-tooltip,.ctx-tooltip-active{opacity:1;transform:translateY(0);pointer-events:auto;}
  .ctx-tooltip-title{font-size:12px;font-weight:600;color:var(--text);margin-bottom:5px;}
  .ctx-tooltip-line+.ctx-tooltip-line{margin-top:3px;}
  .ctx-tooltip-compress{margin-top:8px;padding-top:8px;border-top:1px solid var(--border2);}
  .ctx-compress-btn{width:100%;padding:6px 10px;border:1px solid var(--border2);border-radius:8px;background:rgba(255,255,255,.05);color:var(--text);font-size:11px;cursor:pointer;text-align:left;transition:background .15s,border-color .15s;}
  .ctx-compress-btn:hover{background:rgba(255,255,255,.1);border-color:var(--accent);}
  .ctx-indicator.ctx-high .ctx-compress-btn{border-color:var(--error);color:var(--error);}
  .ctx-indicator.ctx-high .ctx-compress-btn:hover{background:rgba(239,83,80,.12);}
  .cancel-btn{width:34px;height:34px;border-radius:50%;background:var(--error);border:none;color:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .15s,transform .15s,box-shadow .15s;box-shadow:0 2px 10px rgba(0,0,0,.18);}
  .cancel-btn:hover{background:var(--error);transform:scale(1.06);box-shadow:0 4px 14px rgba(0,0,0,.25);filter:brightness(1.1);}
  .cancel-btn:active{transform:scale(.96);}
  .icon-btn{width:34px;height:34px;border-radius:8px;background:none;border:none;color:var(--muted);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;transition:all .15s;}
  .icon-btn{opacity:.75;}
  .icon-btn:hover{background:rgba(255,255,255,.08);color:var(--text);opacity:1;}
  .mic-btn{transition:color .15s,background .15s;}
  .mic-btn.recording{color:var(--error);background:rgba(239,83,80,.12);animation:mic-pulse 1.2s ease-in-out infinite;}
  @keyframes mic-pulse{0%,100%{box-shadow:0 0 0 0 rgba(239,83,80,.3);}50%{box-shadow:0 0 0 6px rgba(239,83,80,0);}}
  .mic-status{font-size:11px;color:var(--error);padding:4px 12px;display:flex;align-items:center;gap:6px;}
  .mic-dot{width:6px;height:6px;border-radius:50%;background:var(--error);animation:mic-pulse 1.2s ease-in-out infinite;flex-shrink:0;}

  /* ── Turn-based voice mode (#1333) ── */
  .voice-mode-btn{display:none!important;transition:color .15s,background .15s;}
  .voice-mode-btn.active{color:var(--accent);background:rgba(var(--accent-rgb,99,102,241),.15);}
  .voice-mode-btn.active svg{filter:drop-shadow(0 0 3px rgba(var(--accent-rgb,99,102,241),.5));}
  .voice-mode-bar{font-size:11px;padding:4px 12px;display:flex;align-items:center;gap:8px;border-bottom:1px solid rgba(255,255,255,.05);}
  .voice-mode-indicator{width:8px;height:8px;border-radius:50%;flex-shrink:0;}
  .voice-mode-indicator.listening{background:var(--error);animation:voice-mode-pulse 1s ease-in-out infinite;}
  .voice-mode-indicator.speaking{background:var(--accent);animation:voice-mode-pulse 1.5s ease-in-out infinite;}
  .voice-mode-indicator.thinking{background:var(--warning,#f59e0b);animation:voice-mode-pulse 2s ease-in-out infinite;}
  .voice-mode-label{color:var(--muted);font-size:11px;}
  @keyframes voice-mode-pulse{0%,100%{opacity:1;transform:scale(1);}50%{opacity:.5;transform:scale(.85);}}
  .status-text{font-size:11px;color:var(--muted);padding-left:4px;}
  .send-btn{width:34px;height:34px;border-radius:50%;background:var(--accent);border:none;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .15s,transform .15s,box-shadow .15s;box-shadow:0 2px 8px var(--accent-bg-strong);}
  .send-btn.stop,.send-btn.interrupt{background:var(--error);box-shadow:0 2px 10px rgba(0,0,0,.18);}
  .send-btn.steer{background:var(--purple,#8b5cf6);box-shadow:0 2px 10px rgba(139,92,246,.25);}
  .send-btn.queue{background:var(--accent);}
  .send-btn:hover{background:var(--accent-hover);transform:scale(1.08);box-shadow:0 4px 14px var(--accent-bg-strong);}
  .send-btn.stop:hover,.send-btn.interrupt:hover{background:var(--error);box-shadow:0 4px 14px rgba(0,0,0,.25);filter:brightness(1.1);}
  .send-btn.steer:hover{background:var(--purple,#8b5cf6);box-shadow:0 4px 14px rgba(139,92,246,.3);filter:brightness(1.08);}
  .send-btn:active{transform:scale(0.95);box-shadow:0 1px 4px var(--accent-bg);}
  .send-btn:disabled{opacity:.35;cursor:not-allowed;transform:none;box-shadow:none;}
  .send-btn.visible{animation:send-pop-in .18s cubic-bezier(.34,1.56,.64,1) forwards;}
  .composer-terminal-panel{position:absolute;left:0;right:0;bottom:-24px;width:min(calc(100% - 64px),720px);margin:0 auto;box-sizing:border-box;overflow:hidden;pointer-events:none;z-index:1;}
  .composer-terminal-panel.is-open,.composer-terminal-panel.is-collapsed{pointer-events:auto;}
  .composer-terminal-panel[hidden]{display:none!important;}
  .composer-terminal-inner{height:var(--composer-terminal-height,260px);min-height:180px;max-height:min(520px,50vh);display:flex;flex-direction:column;overflow:hidden;border:1px solid var(--border2);border-radius:14px;background:var(--surface);box-shadow:0 12px 32px rgba(0,0,0,.22);padding-bottom:38px;transform:translateY(100%);opacity:0;transition:transform .4s cubic-bezier(.32,.72,.16,1),opacity .25s ease;}
  .composer-terminal-panel.is-open .composer-terminal-inner{transform:translateY(0);opacity:1;}
  .composer-terminal-panel.is-expanding-from-dock .composer-terminal-inner{transition:opacity .18s ease;}
  .composer-terminal-panel.is-collapsed{bottom:-2px;width:min(calc(100% - 112px),560px);overflow:visible;z-index:4;}
  .composer-terminal-panel.is-collapsed .composer-terminal-inner{position:absolute;opacity:0;pointer-events:none;transform:translateY(100%);}
  .composer-terminal-dock{min-height:42px;display:flex;align-items:center;justify-content:space-between;gap:12px;border:1px solid var(--border);border-radius:13px;background:color-mix(in srgb,var(--surface) 86%,transparent);box-shadow:0 8px 22px rgba(0,0,0,.16);padding:7px 9px 7px 12px;backdrop-filter:blur(10px);transform:translateY(100%);opacity:0;transition:transform .32s cubic-bezier(.32,.72,.16,1),opacity .2s ease;}
  .composer-terminal-panel.is-collapsed .composer-terminal-dock{transform:translateY(0);opacity:.94;}
  .composer-terminal-dock[hidden]{display:none!important;}
  .composer-terminal-dock-title{min-width:0;display:flex;align-items:center;gap:6px;color:var(--muted);font-size:12px;font-weight:700;letter-spacing:.02em;text-transform:uppercase;}
  .composer-terminal-dock-dot{width:7px;height:7px;border-radius:999px;background:var(--success);box-shadow:0 0 0 3px color-mix(in srgb,var(--success) 16%,transparent);flex:0 0 auto;}
  #terminalDockWorkspaceLabel{min-width:0;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);text-transform:none;letter-spacing:0;font-weight:600;}
  .composer-terminal-resize-handle{height:12px;display:flex;align-items:center;justify-content:center;flex:0 0 auto;cursor:ns-resize;touch-action:none;background:linear-gradient(to bottom,rgba(255,255,255,.04),transparent);}
  .composer-terminal-resize-handle::before{content:"";width:52px;height:4px;border-radius:999px;background:var(--border2);opacity:.72;transition:opacity .15s,background .15s;}
  .composer-terminal-resize-handle:hover::before,.composer-terminal-resize-handle:focus-visible::before{opacity:1;background:var(--muted);}
  .composer-terminal-inner.is-resizing{transition:none;user-select:none;}
  .composer-terminal-header{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px;border-bottom:1px solid var(--border);background:rgba(255,255,255,.025);}
  .composer-terminal-title{min-width:0;display:flex;align-items:center;gap:6px;color:var(--text);font-size:12px;font-weight:700;letter-spacing:.02em;text-transform:uppercase;}
  .composer-terminal-dot{color:var(--muted);font-weight:400;}
  #terminalWorkspaceLabel{min-width:0;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);text-transform:none;letter-spacing:0;font-weight:600;}
  .composer-terminal-actions{display:flex;align-items:center;gap:4px;flex-shrink:0;}
  .composer-terminal-action{border:1px solid transparent;background:transparent;color:var(--muted);border-radius:8px;padding:5px 8px;font-size:11px;font-weight:600;cursor:pointer;transition:color .15s,background .15s,border-color .15s;}
  .composer-terminal-action:hover{color:var(--text);background:var(--hover-bg);border-color:var(--border2);}
  .composer-terminal-viewport{flex:1;min-height:0;overflow:hidden;background:var(--code-bg);padding:8px 10px;color:var(--pre-text);cursor:text;}
  .composer-terminal-surface{width:100%;height:100%;min-height:0;}
  .composer-terminal-surface .xterm{height:100%;padding:0;}
  .composer-terminal-surface .xterm-viewport{background:transparent!important;}
  .composer-terminal-surface .xterm-screen{height:100%;}
  @keyframes send-pop-in{from{opacity:0;transform:scale(.55);}to{opacity:1;transform:scale(1);}}
  .upload-bar-wrap{display:none;height:3px;background:var(--hover-bg);border-radius:0 0 16px 16px;overflow:hidden;}
  .upload-bar-wrap.active{display:block;}
  .upload-bar{height:100%;background:linear-gradient(90deg,var(--accent),var(--accent-hover));width:0%;transition:width .3s ease;}
  /* container-type/name lets descendants run @container queries against the
     panel's width so the header can collapse less-essential elements as the
     user resizes the panel narrower. */
  .rightpanel{width:300px;background:var(--sidebar);border-left:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden;flex-shrink:0;min-width:0;opacity:1;transform:translateX(0);transform-origin:right center;transition:width .24s cubic-bezier(.22,1,.36,1),opacity .18s ease,transform .24s cubic-bezier(.22,1,.36,1),border-color .24s ease;container-type:inline-size;container-name:rightpanel;}
  /* Collapse priority as the panel narrows: git-badge first, then "Workspace"
     label, never the icon buttons. flex-shrink ratios give graceful ellipsis;
     @container queries below cut to display:none at hard breakpoints. */
  .panel-header{padding:12px 16px;border-bottom:1px solid var(--border);font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.1em;display:flex;align-items:center;gap:6px;overflow:hidden;}
  .panel-header > span:first-child{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex-shrink:2;}
  .git-badge{font-size:9px;font-weight:600;color:var(--muted);background:var(--hover-bg);padding:2px 7px;border-radius:4px;letter-spacing:.02em;white-space:nowrap;font-family:'SF Mono',ui-monospace,monospace;flex-shrink:3;overflow:hidden;min-width:0;}
  .git-badge.dirty{color:var(--accent-text);background:var(--accent-bg);}
  .panel-actions{display:flex;gap:4px;flex-shrink:0;margin-left:auto;}
  /* Crisp display:none at narrow widths so the header doesn't show a sliver
     of an ellipsised label or git badge — icons survive longest. */
  @container rightpanel (max-width: 220px){
    .git-badge{display:none !important;}
  }
  @container rightpanel (max-width: 160px){
    .panel-header > span:first-child{display:none;}
  }
  .mobile-close-btn{display:none;}
  .panel-icon-btn{width:24px;height:24px;background:none;border:none;color:var(--muted);cursor:pointer;border-radius:5px;font-size:13px;display:flex;align-items:center;justify-content:center;transition:all .15s;}
  .panel-icon-btn:hover{background:var(--hover-bg);color:var(--text);}
  .panel-icon-btn:disabled{opacity:.35;cursor:not-allowed;}
  .panel-icon-btn:disabled:hover{background:none;color:var(--muted);}
  /* File row actions (shown on hover) */
  /* file-item-actions removed: delete button is now a flex child */
  .file-action-btn{width:20px;height:20px;background:rgba(0,0,0,.4);border:none;border-radius:4px;color:var(--muted);cursor:pointer;font-size:11px;display:flex;align-items:center;justify-content:center;}
  .file-action-btn:hover{color:var(--accent);}
  .close-preview{cursor:pointer;opacity:.6;}.close-preview:hover{opacity:1;}
  /* Breadcrumb navigation */
  .breadcrumb-bar{display:flex;align-items:center;gap:2px;padding:6px 12px;font-size:12px;border-bottom:1px solid var(--border);flex-shrink:0;overflow:hidden;white-space:nowrap;}
  .breadcrumb-seg{padding:1px 3px;border-radius:3px;}
  .breadcrumb-link{color:var(--muted);cursor:pointer;transition:color .12s;}
  .breadcrumb-link:hover{color:var(--text);background:var(--hover-bg);}
  .breadcrumb-current{color:var(--text);font-weight:500;}
  .breadcrumb-sep{color:var(--border);margin:0 1px;font-size:11px;}
  .remote-workspace-search{padding:8px 10px;border-bottom:1px solid var(--border);flex-shrink:0;}
  .remote-workspace-search input{width:100%;height:32px;border:1px solid var(--border2);border-radius:7px;background:var(--input-bg,var(--surface));color:var(--text);padding:0 10px;font-size:12px;outline:none;}
  .remote-workspace-search input:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-bg);}
  .file-tree{flex:1;overflow-y:auto;padding:8px;}
  .file-item{display:flex;align-items:center;gap:6px;padding:6px 10px;border-radius:8px;cursor:pointer;font-size:12px;color:var(--muted);transition:all .12s;min-width:0;}
  .file-item:hover{background:var(--hover-bg);color:var(--text);}
  .file-item.active{background:var(--accent-bg);color:var(--accent-text);}
  .file-tree-toggle{font-size:10px;color:var(--muted);flex-shrink:0;width:10px;text-align:center;line-height:1;}
  /* Workspace P1 follow-up (2026-05-07): remote dirs reporting
     children_count===0 render a transparent spacer instead of the
     ▸ chevron, so the icon column stays aligned with siblings that
     do have children. Same width as the real toggle, no glyph. */
  .file-tree-toggle.empty{visibility:hidden;}
  .file-item.file-empty{color:var(--muted);opacity:.5;font-style:italic;cursor:default;font-size:11px;}
  .file-item.file-empty:hover{background:none;color:var(--muted);}
  .preview-area{flex:1;overflow:auto;padding:14px;flex-direction:column;gap:8px;display:none;opacity:0;transition:opacity .15s;}
  .preview-area.visible{display:flex;opacity:1;}
  .preview-path{font-size:11px;color:var(--muted);padding-bottom:8px;border-bottom:1px solid var(--border);flex-shrink:0;}
  .preview-code{font-family:"SF Mono","Fira Code",ui-monospace,monospace;font-size:12px;line-height:1.6;white-space:pre-wrap;word-break:break-word;color:var(--pre-text);}
  .preview-remote{display:flex;flex:1;min-height:0;}
  .remote-preview-card{width:100%;display:flex;flex-direction:column;gap:10px;}
  .remote-preview-thumb{width:100%;max-height:220px;object-fit:cover;border-radius:8px;border:1px solid var(--border);}
  .remote-preview-title{font-size:15px;font-weight:700;color:var(--strong,var(--text));line-height:1.35;}
  .remote-preview-subtitle{font-size:12px;color:var(--muted);line-height:1.45;}
  .remote-preview-fields{display:grid;gap:6px;margin-top:2px;}
  .remote-preview-field{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:var(--surface);}
  .remote-preview-field span{font-size:11px;color:var(--muted);}
  .remote-preview-field strong{font-size:12px;color:var(--text);font-weight:600;text-align:right;}
  .remote-preview-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:2px;}
  .remote-preview-action{font-size:12px;padding:7px 10px;}
  .remote-preview-action.submitting{opacity:.6;cursor:wait;}

  /* Workspace P1-4 (2026-05-07) — search-result mode header bar.
     Sits above #fileTree when a search query is active. Plain row,
     no extra chrome — distinguishes "Search results for X" from
     normal directory browse so the user can tell which mode they're in. */
  .ws-search-header{display:flex;align-items:center;gap:8px;padding:6px 12px;border-bottom:1px solid var(--border);background:var(--input-bg);font-size:12px;color:var(--muted);}
  .ws-search-header .ws-search-label{flex:1 1 auto;min-width:0;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .ws-search-header .ws-search-label strong{color:var(--text);font-weight:600;}
  .ws-search-header .ws-search-count{flex:0 0 auto;color:var(--muted);}
  .ws-search-header .sm-btn{flex:0 0 auto;padding:4px 10px;font-size:11px;}
  /* Image preview */
  .preview-img-wrap{display:flex;align-items:center;justify-content:center;flex:1;padding:8px 0;min-height:0;}
  .preview-img{max-width:100%;max-height:100%;object-fit:contain;border-radius:6px;box-shadow:0 2px 12px rgba(0,0,0,.4);}
  .preview-media-wrap{display:flex;align-items:center;justify-content:center;flex:1;min-height:0;padding:12px 0;}
  .preview-media-wrap .msg-media-editor{width:100%;max-width:100%;background:var(--surface);}
  .preview-media-wrap .msg-media-video{max-height:60vh;}
  .preview-pdf-wrap{display:flex;flex:1;min-height:360px;border:1px solid var(--border2);border-radius:8px;overflow:hidden;background:#fff;}
  .preview-pdf-frame{width:100%;height:100%;min-height:70vh;border:none;background:#fff;}
  /* Markdown rendered preview */
  .preview-md{font-size:13px;line-height:1.7;color:var(--text);flex:1;overflow-y:auto;min-height:0;}
  .preview-md p{margin-bottom:10px;}.preview-md p:last-child{margin-bottom:0;}
  .preview-md h1,.preview-md h2,.preview-md h3,.preview-md h4,.preview-md h5,.preview-md h6{font-weight:700;color:var(--strong,var(--text));line-height:1.3;}
  .preview-md h1{font-size:24px;margin:24px 0 12px;border-bottom:1px solid var(--border);padding-bottom:6px;}
  .preview-md h2{font-size:20px;margin:22px 0 10px;border-bottom:1px solid var(--border);padding-bottom:4px;}
  .preview-md h3{font-size:17px;margin:20px 0 8px;}
  .preview-md h4{font-size:15px;margin:18px 0 8px;}
  .preview-md h5{font-size:14px;margin:16px 0 6px;text-transform:uppercase;letter-spacing:0.04em;}
  .preview-md h6{font-size:13px;margin:14px 0 6px;color:var(--muted);text-transform:uppercase;letter-spacing:0.04em;}
  .preview-md ul,.preview-md ol{margin:4px 0 10px 18px;}.preview-md li{margin-bottom:3px;}
  .preview-md code{font-family:"SF Mono",ui-monospace,monospace;font-size:11.5px;background:var(--code-inline-bg);padding:1px 5px;border-radius:4px;color:var(--code-text);}
  .preview-md pre{background:var(--code-bg);border:1px solid var(--border);border-radius:8px;padding:10px 12px;overflow-x:auto;margin:8px 0;}
  .preview-md pre code{background:none;padding:0;color:var(--pre-text);font-size:11.5px;line-height:1.55;}
  /* Keep original theme background — prevent prism-tomorrow from overriding --code-bg */
  .preview-md pre[class*="language-"],.preview-md pre code[class*="language-"]{background:var(--code-bg) !important;}
  .preview-md blockquote{border-left:3px solid var(--blue);padding-left:12px;color:var(--muted);font-style:italic;margin:8px 0;}
  .preview-md blockquote p{margin:0;}
  .preview-md strong{color:var(--strong);font-weight:600;}.preview-md em{color:var(--em);}
  .preview-md a{color:var(--blue);text-decoration:underline;}
  .preview-md hr{border:none;border-top:1px solid var(--border);margin:12px 0;}
  .preview-md table{border-collapse:collapse;width:100%;margin:8px 0;font-size:12px;}
  .preview-md th{background:var(--hover-bg);padding:6px 10px;text-align:left;font-weight:600;border:1px solid var(--border2);}
  .preview-md td{padding:5px 10px;border:1px solid var(--border2);}
  .preview-md tr:nth-child(even){background:var(--code-inline-bg);}
  /* #486: inline code inside table cells needs scaled sizing to avoid overflow/clipping */
  .preview-md td code,.preview-md th code{font-size:0.85em;padding:1px 4px;vertical-align:baseline;}
  /* File type badge in preview path bar */
  .preview-badge{display:inline-block;font-size:10px;font-weight:600;padding:2px 6px;border-radius:4px;margin-left:8px;text-transform:uppercase;letter-spacing:.06em;}
  .preview-badge.img,.preview-badge.image,.preview-badge.audio,.preview-badge.video{background:var(--accent-bg);color:var(--accent-text);}
  .preview-badge.pdf{background:rgba(239,68,68,.12);color:#f87171;}
  .preview-badge.md{background:var(--accent-bg-strong);color:var(--accent-text);}
  .preview-badge.code{background:var(--hover-bg);color:var(--muted);}
  ::-webkit-scrollbar{width:4px;height:4px}
  ::-webkit-scrollbar-track{background:transparent}
  ::-webkit-scrollbar-thumb{background:rgba(255,255,255,.1);border-radius:99px;transition:background .2s}
  ::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.22)}
  /* ── Desktop: hide mobile-only elements ── */
  .mobile-hamburger{display:none;}
  .mobile-files-btn{display:none!important;}
  .mobile-overlay{display:none;}

  @media(min-width:901px){
    html.pmts-ws-hide-legacy-panel .rightpanel{display:none !important;width:0 !important;opacity:0;transform:translateX(14px);border-left-color:transparent;pointer-events:none;}
    html[data-merchant-ws-view="active"] .rightpanel{width:0 !important;opacity:0;transform:translateX(0);border-left-color:transparent;pointer-events:none;}
    html[data-workspace-panel="closed"] .rightpanel{width:0 !important;opacity:0;transform:translateX(0);border-left-color:transparent;pointer-events:none;}
    .layout.workspace-panel-collapsed .rightpanel{width:0 !important;opacity:0;transform:translateX(0);border-left-color:transparent;pointer-events:none;}
  }

  @media(max-width:900px){
    .rightpanel{display:none}
    .workspace-toggle-btn,.mobile-files-btn{display:inline-flex!important;}
    .mobile-close-btn{display:flex;}
    .close-preview{display:none;}
    #btnCollapseWorkspacePanel{display:none;}
  }

  @container composer-footer (max-width: 920px){
    /* Stage 1: remove long workspace/model text first to avoid clipping.
       The left sidebar + panel layout can consume width before right panel opens, so this
       must be container-driven and independent of panel state. */
    .composer-workspace-label,
    #composerWorkspaceLabel,
    .composer-model-label,
    .composer-model-chevron,
    #composerModelLabel,
    .composer-tenant-label,
    .composer-runtime-label,
    .composer-skill-label,
    #composerTenantLabel,
    #composerRuntimeLabel,
    #composerSkillLabel{display:none;}

    .composer-workspace-chip,
    .composer-model-chip,
    .composer-tenant-chip,
    .composer-runtime-chip,
    .composer-skill-chip{box-sizing:border-box;width:44px;max-width:44px;min-width:44px;min-height:44px;padding:6px;justify-content:center;gap:0;font-size:11px;}
    .composer-workspace-group{min-height:44px;}
    .composer-workspace-files-btn{min-width:44px;padding:6px 8px;}
    .composer-divider{display:none;}
    .composer-status{max-width:96px;}
  }

  @container composer-footer (max-width: 520px){
    /* Stage 2: full icon-only for tighter widths. Container-width compaction is needed
       when side panels narrow the composer even though the viewport is not a phone. */
    .composer-left{gap:10px;overflow-x:auto;overflow-y:hidden;}
    .composer-left > *{flex-shrink:0;}
    .composer-profile-wrap,
    .composer-ws-wrap{flex:0 0 auto;}
    .composer-profile-label,
    .composer-workspace-label,
    .composer-model-label,
    .composer-reasoning-label,
    .composer-tenant-label,
    .composer-runtime-label,
    .composer-skill-label,
    .composer-profile-chevron,
    .composer-workspace-chevron,
    .composer-model-chevron,
    .composer-reasoning-chevron,
    #composerProfileLabel,
    #composerWorkspaceLabel,
    #composerModelLabel,
    #composerReasoningLabel,
    #composerTenantLabel,
    #composerRuntimeLabel,
    #composerSkillLabel{display:none;}

    .composer-profile-chip,
    .composer-tenant-chip,
    .composer-runtime-chip,
    .composer-skill-chip,
    .composer-model-chip,
    .composer-reasoning-chip{box-sizing:border-box;width:44px;height:44px;max-width:44px;min-width:44px;min-height:44px;padding:0;justify-content:center;gap:0;font-size:11px;}

    .composer-workspace-group{box-sizing:border-box;flex:0 0 44px;width:44px;min-width:44px;max-width:44px;min-height:44px;overflow:hidden;border:none;background:transparent;border-radius:8px;}
    .composer-workspace-files-btn{box-sizing:border-box;width:44px;min-width:44px;max-width:44px;padding:0;border-radius:8px;}
    .composer-workspace-chip{display:none!important;}
    .composer-left > .composer-model-wrap,
    .composer-left > .composer-reasoning-wrap,
    .composer-left > .composer-toolsets-wrap{display:none!important;}
    .composer-mobile-config-btn{box-sizing:border-box;position:relative;display:inline-flex!important;width:44px;height:44px;min-width:44px;min-height:44px;flex-shrink:0;}
    .composer-mobile-config-panel.open{display:flex;}
    .composer-mobile-config-action{flex:1 1 0;min-height:44px;min-width:0;background:var(--input-bg);border-color:var(--border);}
    .composer-mobile-context-action{flex:1 0 100%;}
    .composer-divider{display:none;}
  }

  /* Show session-toolsets chip ONLY when the composer-footer container is wide
     enough to comfortably accommodate it (workspace+model+reasoning+profile+
     toolsets+context-ring+send all need room to breathe, see #1431). At
     narrower container widths the chip is hidden by the base rule above —
     the underlying state and /api/session/toolsets endpoint continue to work
     for scripted callers regardless of UI visibility. Uses display:block to
     match sibling wraps (.composer-profile-wrap, .composer-model-wrap, etc.)
     rather than display:flex — the chip child has its own inline-flex layout. */
  @container composer-footer (min-width: 1100px) {
    .composer-toolsets-wrap{display:block;}
  }

  @media(max-width:640px){
    /* Viewport-phone rules handle app chrome and touch sizing; they intentionally
       overlap the container compact rules for actual phones. */
    /* ── Sidebar: slide-in overlay instead of hidden ── */
    .sidebar{position:fixed;left:-300px;top:0;bottom:0;width:280px;z-index:200;
      transition:left .25s ease;}
    .sidebar.mobile-open{left:0;}
    .sidebar .resize-handle{display:none;}
    /* Hamburger button (in app titlebar on mobile) */
    .app-titlebar{justify-content:space-between;}
    .app-titlebar-hamburger,.app-titlebar-spacer{display:flex;}
    .app-titlebar-brand{left:max(48px,calc(env(safe-area-inset-left,0px) + 48px));padding:0 6px;}
    .app-titlebar-brand-name{display:none;}
    .app-titlebar-inner{flex:1 1 auto;}
    /* Overlay backdrop */
    .mobile-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);
      z-index:199;-webkit-tap-highlight-color:transparent;}
    .mobile-overlay.visible{display:block;}
    /* Files button in topbar */
    .workspace-toggle-btn,.mobile-files-btn{display:inline-flex!important;}
    /* Right panel: slide-over from right */
    .rightpanel{display:flex!important;position:fixed;
      --mobile-rightpanel-width:min(300px, 100vw);
      right:calc(-1 * var(--mobile-rightpanel-width))!important;
      top:0;bottom:0;width:var(--mobile-rightpanel-width)!important;max-width:100vw!important;z-index:200;transition:right .25s ease;
      box-shadow:none!important;}
    .rightpanel.mobile-open{right:0!important;box-shadow:-4px 0 24px rgba(0,0,0,.4)!important;}
    .rightpanel .resize-handle{display:none;}
    /* Topbar adjustments */
    .topbar{padding:8px 12px;gap:8px;}
    .topbar-title{font-size:14px;}
    .topbar-meta{display:none;}
    .topbar-chips{flex-wrap:nowrap;gap:4px;overflow-x:auto;-webkit-overflow-scrolling:touch;}
    .topbar-chips .chip,.topbar-chips .ws-chip,.topbar-chips button{font-size:11px!important;padding:4px 8px!important;white-space:nowrap;}
    .settings-main{padding:18px 16px;}
    .hermes-action-grid{grid-template-columns:1fr;}
    .messages-inner{padding:12px 10px 20px;}
    .msg-body{padding-left:0;max-width:100%;}
    .msg-role{font-size:12px;}
    .composer-wrap{padding:8px 10px 12px!important;}
    .composer-box{border-radius:12px;}
    .composer-box textarea{min-height:40px;}
    .composer-footer{padding:6px 8px 8px!important;gap:6px;flex-wrap:nowrap;align-items:center;}
    .composer-left{flex:1 1 auto;width:auto;flex-wrap:nowrap;align-items:center;gap:10px;overflow-x:auto;overflow-y:hidden;max-height:none;row-gap:0;-webkit-overflow-scrolling:touch;}
    .composer-left > *{flex-shrink:0;}
    .composer-profile-wrap,
    .composer-ws-wrap{flex:0 0 auto;}
    .composer-right{flex:0 0 auto;width:auto;justify-content:flex-end;gap:6px;min-width:0;}
    /* icon-only composer chips below 640px */
    .composer-profile-label,
    .composer-workspace-label,
    .composer-model-label,
    .composer-reasoning-label,
    .composer-profile-chevron,
    .composer-workspace-chevron,
    .composer-model-chevron,
    .composer-reasoning-chevron,
    #composerProfileLabel,
    #composerWorkspaceLabel,
    #composerModelLabel,
    #composerReasoningLabel{display:none;}
    .composer-profile-chip,
    .composer-model-chip,
    .composer-reasoning-chip{box-sizing:border-box;width:44px;height:44px;max-width:44px;min-width:44px;min-height:44px;padding:0;justify-content:center;gap:0;font-size:11px;}
    .composer-workspace-group{box-sizing:border-box;flex:0 0 44px;width:44px;min-width:44px;max-width:44px;min-height:44px;overflow:hidden;border:none;background:transparent;border-radius:8px;}
    .composer-workspace-files-btn{box-sizing:border-box;width:44px;min-width:44px;max-width:44px;padding:0;border-radius:8px;}
    .composer-workspace-chip{display:none!important;}
    .composer-left > .composer-model-wrap,
    .composer-left > .composer-reasoning-wrap,
    .composer-left > .composer-toolsets-wrap{display:none!important;}
    .composer-mobile-config-btn{box-sizing:border-box;position:relative;display:inline-flex!important;width:44px;height:44px;min-width:44px;min-height:44px;flex-shrink:0;}
    .composer-mobile-config-panel.open{display:flex;}
    .composer-mobile-config-action{box-sizing:border-box;flex:1 1 0;min-height:44px;min-width:0;background:var(--input-bg);border-color:var(--border);}
    .composer-mobile-context-action{flex:1 0 100%;}
    /* icon-only composer chips continue below mobile widths */
    .composer-divider{display:none;}
    .composer-status{flex:0 1 auto;min-width:0;max-width:96px;font-size:10px;text-align:right;}
    .send-btn{width:44px;height:44px;}
    .ctx-indicator-wrap{display:none!important;}
    .ctx-indicator{width:44px;height:44px;}
    .ctx-tooltip{right:-4px;min-width:190px;max-width:220px;}
    .composer-terminal-panel{width:calc(100% - 20px);}
    .composer-terminal-panel.is-collapsed{bottom:-1px;width:calc(100% - 28px);}
    .composer-terminal-inner{height:var(--composer-terminal-height,190px);min-height:140px;max-height:min(300px,44vh);border-radius:12px;padding-bottom:28px;}
    .composer-terminal-dock{min-height:40px;padding:6px 7px 6px 10px;border-radius:12px;gap:8px;}
    .composer-terminal-dock-title{font-size:11px;}
    .composer-terminal-resize-handle{height:10px;cursor:default;}
    .composer-terminal-header{padding:7px 8px;}
    .composer-terminal-actions{gap:2px;overflow-x:auto;}
    .composer-terminal-action{padding:5px 7px;font-size:10px;white-space:nowrap;}
    #terminalWorkspaceLabel{max-width:110px;}
    #terminalDockWorkspaceLabel{max-width:96px;}
    /* Touch targets — minimum 44px */
    .icon-btn,.mic-btn,.voice-mode-btn{min-width:44px;min-height:44px;}
    .session-item{min-height:44px;padding:10px 40px 10px 12px;}
    .session-item.streaming,.session-item.unread{padding-right:40px;}
    .session-actions{opacity:1;pointer-events:auto;}
    .session-actions-trigger{width:44px;height:44px;}
    .session-item,.session-item.streaming,.session-item.unread{padding-right:54px;}
    .suggestion{min-height:44px;}
    .panel-icon-btn,.panel-head-btn{width:44px;height:44px;}
    .remote-workspace-search input{height:44px;font-size:16px;}
    .ws-opt-action{min-height:44px;box-sizing:border-box;}
    /* Empty state */
    .empty-state h2{font-size:18px;}
    .empty-state p{font-size:13px;}
    .suggestion-grid{max-width:100%!important;}
    .suggestion{font-size:12px;padding:10px 12px;}
  }

  @media (max-width: 340px){
    /* Extreme legacy-phone widths (e.g. 320px) cannot fit five 44px
       left-side touch targets plus the fixed send button with the normal
       phone spacing. Keep the single-row hierarchy and 44px targets, but
       tighten only the inter-button gutters so the config button remains
       fully visible instead of sliding under the send button. */
    .composer-wrap{padding-left:8px!important;padding-right:8px!important;}
    .composer-footer{gap:4px;}
    .composer-left{gap:2px;}
  }

  @media (max-width: 640px){
    /* Approval card */
    .approval-card{padding-left:10px;padding-right:10px;}
    .approval-btns{gap:6px;}
    .approval-btn{padding:8px 12px;font-size:12px;min-height:44px;}
    .approval-kbd{display:none;}
    /* Clarify card */
    .clarify-card{padding-left:10px;padding-right:10px;}
    .clarify-inner{padding:12px 12px 13px;}
    .clarify-response{flex-direction:column;align-items:stretch;}
    .clarify-input,.clarify-submit{width:100%;min-height:44px;}
    .clarify-choice{min-height:44px;}
    .clarify-choice-badge{min-width:22px;height:22px;}
    .app-dialog-overlay{padding:12px;}
    .app-dialog{width:100%;padding:16px 16px 14px;border-radius:16px;}
    .app-dialog-actions{flex-direction:column-reverse;align-items:stretch;}
    .app-dialog-btn{width:100%;min-height:44px;}
    /* Tool cards */
    .tool-card{margin-left:0!important;font-size:12px;}
    .onboarding-overlay{padding:12px;}
    .onboarding-shell{grid-template-columns:1fr;}
    .onboarding-sidebar{border-right:none;border-bottom:1px solid var(--border);padding:22px 18px;}
    .onboarding-main{padding:20px 18px 18px;}
    .onboarding-actions{flex-direction:column-reverse;}
    .onboarding-actions .sm-btn{width:100%;min-height:44px;}
    /* Login page responsive */
    .card{width:90vw;max-width:320px;padding:28px 24px;}
  }


/* ── Workspace dropdown (topbar) ── */
.ws-chip{user-select:none;}
.ws-dropdown{display:none;position:absolute;bottom:calc(100% + 4px);left:0;right:0;min-width:200px;background:var(--surface);border:1px solid var(--border2);border-radius:10px;box-shadow:0 -4px 24px rgba(0,0,0,.4);z-index:200;overflow:hidden;max-height:320px;overflow-y:auto;}
.ws-dropdown.open{display:block;}
.ws-dropdown-footer{left:0;right:auto;bottom:calc(100% + 4px);min-width:280px;max-width:min(420px,calc(100vw - 32px));}
.model-dropdown{display:none;position:absolute;bottom:calc(100% + 4px);left:0;min-width:280px;max-width:min(420px,calc(100vw - 32px));background:var(--surface);border:1px solid var(--border2);border-radius:10px;box-shadow:0 -4px 24px rgba(0,0,0,.4);z-index:200;overflow:hidden;max-height:320px;overflow-y:auto;}
.model-dropdown.open{display:block;}
.model-scope-note{position:sticky;top:0;z-index:2;padding:9px 14px;border-bottom:1px solid var(--border);color:var(--text);font-size:11px;font-weight:650;line-height:1.4;background:color-mix(in srgb,var(--surface) 82%,var(--accent-bg));box-shadow:0 1px 0 rgba(0,0,0,.12);}
.model-group{padding:8px 14px 4px;font-size:10px;font-weight:700;letter-spacing:.04em;color:var(--muted);text-transform:uppercase;}
.model-opt{padding:10px 14px;cursor:pointer;transition:background .12s;display:flex;flex-direction:column;gap:3px;align-items:flex-start;}
.model-opt:hover{background:rgba(255,255,255,.07);}
.model-opt.active{background:var(--accent-bg);}
.model-opt-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;width:100%;}
.model-opt-name{display:block;font-size:13px;color:var(--text);font-weight:500;line-height:1.25;}
.model-opt-badge{display:inline-flex;align-items:center;justify-content:center;padding:2px 7px;border-radius:999px;font-size:10px;font-weight:700;letter-spacing:.02em;text-transform:uppercase;border:1px solid transparent;}
.model-opt-badge--primary{background:rgba(50,184,198,.16);border-color:rgba(50,184,198,.32);color:#8fe7ef;}
.model-opt-badge--fallback{background:rgba(255,184,77,.14);border-color:rgba(255,184,77,.28);color:#ffd18a;}
.model-opt-id{display:block;font-size:10px;color:var(--muted);line-height:1.3;opacity:.72;word-break:break-word;}
.model-custom-sep{padding-top:4px;border-top:1px solid var(--border);margin-top:4px;}
.model-custom-row{display:flex;align-items:center;gap:6px;padding:6px 10px 8px;}
.model-custom-input{flex:1;background:var(--code-bg);border:1px solid var(--border2);border-radius:6px;color:var(--text);padding:5px 8px;font-size:12px;outline:none;font-family:inherit;min-width:0;}
.model-search-row{display:flex;align-items:center;gap:6px;padding:8px 10px 10px;}
.model-search-input{flex:1;background:var(--code-bg);border:1px solid var(--border2);border-radius:6px;color:var(--text);padding:6px 8px;font-size:12px;outline:none;font-family:inherit;min-width:0;}
.model-search-input:focus{border-color:var(--accent);}
.model-search-clear{flex-shrink:0;width:22px;height:22px;border:1px solid var(--border2);border-radius:50%;background:transparent;color:var(--muted);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:color .12s,border-color .12s;font-size:10px;}
.model-search-clear:hover{color:var(--text);border-color:var(--border);}
.model-custom-input:focus{border-color:var(--accent);}
.model-custom-btn{flex-shrink:0;width:24px;height:24px;border:1px solid var(--border2);border-radius:6px;background:transparent;color:var(--muted);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:color .12s,border-color .12s;}
.model-custom-btn:hover{color:var(--accent-text);border-color:var(--accent-bg);}
.ws-opt{padding:10px 14px;cursor:pointer;transition:background .12s;display:flex;flex-direction:column;gap:4px;align-items:flex-start;}
.ws-opt:hover{background:rgba(255,255,255,.07);}
.ws-opt.active{background:var(--accent-bg);}
.ws-opt-name{display:block;font-size:13px;color:var(--text);font-weight:500;line-height:1.25;white-space:normal;overflow:hidden;text-overflow:ellipsis;}
.ws-opt-path{display:block;font-size:10px;color:var(--muted);line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:normal;opacity:.72;word-break:break-word;}
.ws-divider{height:1px;background:var(--border);margin:4px 0;}
.ws-manage{color:var(--muted);font-size:12px;}
.ws-opt-action{display:flex;flex-direction:row;align-items:center;gap:8px;}
.ws-opt-icon{display:inline-flex;align-items:center;justify-content:center;opacity:.82;flex-shrink:0;}
.ws-opt-meta{font-size:11px;color:var(--muted);}
/* ── Workspace management panel ── */
.ws-row{display:flex;align-items:center;gap:8px;padding:8px 10px;margin-bottom:2px;border:1px solid transparent;border-radius:8px;cursor:pointer;color:var(--muted);transition:background .15s,border-color .15s,color .15s,opacity .15s;}
.ws-row:hover{background:var(--surface);color:var(--text);}
.ws-row.active{background:var(--accent-bg);border-color:var(--accent-bg-strong);color:var(--accent-text);}
.ws-row-info{flex:1;min-width:0;}
.ws-row-name{font-size:13px;font-weight:500;color:inherit;}
.ws-row-path{font-size:11px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ws-row.active .ws-row-path{color:var(--accent-text);opacity:.8;}
.ws-row-actions{display:flex;gap:4px;flex-shrink:0;}
.ws-drag-handle{display:flex;align-items:center;justify-content:center;opacity:.25;flex-shrink:0;cursor:grab;transition:opacity .15s;color:var(--muted);padding:2px;}
.ws-row:hover .ws-drag-handle{opacity:.55;}
.ws-drag-handle:active{cursor:grabbing;}
.ws-row.dragging{opacity:.35;border:1px dashed var(--accent-bg-strong);}
.ws-row.drag-over{border-color:var(--accent-text);background:var(--accent-bg);}
.ws-action-btn{padding:4px 8px;border-radius:6px;font-size:11px;font-weight:600;border:1px solid var(--border2);background:rgba(255,255,255,.05);color:var(--muted);cursor:pointer;transition:all .15s;white-space:nowrap;}
.ws-action-btn:hover{background:rgba(255,255,255,.1);color:var(--text);}
/* ── Profile dropdown + management panel ── */
.profile-chip{user-select:none;color:var(--accent-text)!important;}
.profile-dropdown{display:none;position:absolute;bottom:calc(100% + 4px);left:0;min-width:260px;max-width:min(260px,calc(100vw - 32px));background:var(--surface);border:1px solid var(--border2);border-radius:10px;box-shadow:0 -4px 24px rgba(0,0,0,.4);z-index:200;overflow:hidden;max-height:380px;overflow-y:auto;}
.profile-dropdown.open{display:block;}
.profile-opt{padding:10px 14px;cursor:pointer;transition:background .12s;}
.profile-opt:hover{background:rgba(255,255,255,.07);}
.profile-opt.active{background:var(--accent-bg);}
.profile-opt-name{font-size:13px;color:var(--text);font-weight:500;}
.profile-opt-meta{font-size:11px;color:var(--muted);margin-top:2px;}
.profile-opt-badge{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:5px;vertical-align:middle;}
.profile-opt-badge.running{background:#4caf50;box-shadow:0 0 4px rgba(76,175,80,.5);}
.profile-opt-badge.stopped{background:rgba(255,255,255,.2);}
.profile-card{padding:8px 10px;margin-bottom:2px;border:1px solid transparent;border-radius:8px;cursor:pointer;color:var(--muted);transition:background .15s,border-color .15s,color .15s;}
.profile-card:hover{background:var(--surface);color:var(--text);}
.profile-card.active{background:var(--accent-bg);border-color:var(--accent-bg-strong);color:var(--accent-text);}
.profile-card-header{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.profile-card-name{font-size:13px;font-weight:600;color:inherit;}
.profile-card-name.is-active{color:var(--accent-text);}
.profile-card-meta{font-size:11px;color:var(--muted);margin-top:3px;padding-left:12px;}
.profile-card.active .profile-card-meta{color:var(--accent-text);opacity:.8;}
.profile-card-actions{display:flex;gap:4px;flex-shrink:0;}
/* ── Slash command autocomplete dropdown ── */
.cmd-dropdown{display:none;position:absolute;left:0;right:0;bottom:calc(100% + 4px);width:auto;max-width:100%;background:var(--surface);border:1px solid var(--border2);border-radius:10px;box-shadow:0 -8px 24px rgba(0,0,0,.4);z-index:200;max-height:240px;overflow-y:auto;}
.cmd-dropdown.open{display:block;}
.cmd-item{padding:8px 14px;cursor:pointer;transition:background .12s;}
.cmd-item:hover{background:rgba(255,255,255,.07);}
.cmd-item.selected{background:var(--accent-bg);outline:1px solid var(--accent-bg-strong);}
.cmd-item-head{display:flex;align-items:center;justify-content:space-between;gap:10px;}
.cmd-item-name{font-size:13px;color:var(--text);font-weight:500;}
.cmd-item-parent{color:var(--muted);font-weight:400;}
.cmd-item-subarg{font-weight:600;}
.cmd-item-arg{color:var(--muted);font-weight:400;font-style:italic;}
.cmd-item-desc{font-size:11px;color:var(--muted);margin-top:1px;}
.cmd-item-badge{flex-shrink:0;font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:2px 6px;border-radius:999px;border:1px solid var(--border2);color:var(--muted);background:var(--hover-bg);}
.cmd-item-badge-skill{color:var(--accent-text);background:var(--accent-bg);border-color:var(--accent-bg-strong);}
.ws-action-btn.danger:hover{background:rgba(239,83,80,.1);color:var(--error);border-color:var(--error);}
.ws-add-row{display:flex;gap:8px;align-items:center;padding:10px 0 4px;}
.ws-add-input-wrap{flex:1;min-width:0;}
.ws-suggestions{margin:0 0 6px;background:var(--bg2);border:1px solid var(--border2);border-radius:8px;box-shadow:0 10px 24px rgba(0,0,0,.22);max-height:220px;overflow:auto;}
.ws-suggest-item{display:flex;flex-direction:column;gap:2px;width:100%;padding:8px 10px;border:0;background:transparent;color:var(--text);text-align:left;font-size:12px;cursor:pointer;}
.ws-suggest-item:hover{background:rgba(255,255,255,.08);}
.ws-suggest-item.active{background:var(--accent-bg);outline:1px solid var(--accent-bg-strong);outline-offset:-1px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.04);}
.ws-suggest-leaf{font-size:13px;font-weight:600;color:var(--text);}
.ws-suggest-parent{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.ws-suggest-item.active .ws-suggest-leaf{color:var(--accent-text);}
.ws-suggest-item.active .ws-suggest-parent{color:var(--text);}
/* ── Message action buttons (copy, edit, retry) ── */
.msg-actions{display:flex;align-items:center;gap:2px;opacity:0;transition:opacity .15s;margin-left:auto;}
.msg-row:hover .msg-actions{opacity:1;}
.msg-action-btn{background:none;border:none;color:var(--muted);cursor:pointer;font-size:13px;padding:2px 5px;border-radius:5px;transition:color .12s,background .12s;line-height:1;}
.msg-action-btn:hover{color:var(--accent-text);background:var(--accent-bg);}
/* TTS speaker button: hidden by default, shown when TTS is enabled.
 * Use body-class selector instead of JS inline-style so the rule survives
 * subsequent renderMd() passes and is not subject to inline-style cascade
 * collisions with the .msg-action-btn parent (#1409). */
.msg-tts-btn{display:none;}
body.tts-enabled .msg-tts-btn{display:inline-flex;align-items:center;}
.msg-tts-btn[data-speaking="1"]{color:var(--accent);animation:tts-pulse 1s ease-in-out infinite;}
@keyframes tts-pulse{0%,100%{opacity:1}50%{opacity:.5}}

/* ── Edit message inline ── */
.msg-edit-area{width:100%;background:rgba(255,255,255,.05);border:1px solid var(--accent-bg);border-radius:8px;color:var(--text);padding:10px 12px;font-size:14px;font-family:inherit;line-height:1.6;resize:none;outline:none;min-height:60px;box-sizing:border-box;box-shadow:0 0 0 3px var(--accent-bg);margin-top:4px;}
.msg-edit-bar{display:flex;gap:8px;margin-top:8px;margin-bottom:4px;}
.msg-edit-send{background:var(--accent);color:#fff;border:none;border-radius:8px;padding:6px 16px;font-size:13px;font-weight:600;cursor:pointer;transition:opacity .15s;}
.msg-edit-send:hover{opacity:.85;}
.msg-edit-cancel{background:var(--hover-bg);color:var(--muted);border:1px solid var(--border2);border-radius:8px;padding:6px 12px;font-size:13px;cursor:pointer;transition:background .15s;}
.msg-edit-cancel:hover{background:rgba(255,255,255,.1);}

/* ── Clear conversation chip ── */
.clear-btn{background:var(--accent-bg);border:1px solid var(--accent-bg-strong);color:var(--accent-text);font-size:11px;padding:4px 10px;cursor:pointer;transition:background .15s;}
.clear-btn:hover{background:var(--accent-bg-strong);}

/* ── Copy button on messages ── */
/* msg-copy-btn styles moved to msg-action-btn */
/* ── Nav tab nowrap ── */
/* nav-tab-nowrap-handled-above */

/* ── Final polish additions ── */

/* Smooth hover on file items */


/* Sidebar section padding: give the session-section breathing room */
.sidebar-section{padding:10px 12px 6px;}

/* New chat btn icon - align nicely */
.new-chat-btn svg{flex-shrink:0;opacity:.8;}

/* Session list: group header spacing */
.session-list > div[style]{padding-left:12px;}

/* Preview path bar: flex row with nice gap */
.preview-path{display:flex;align-items:center;gap:6px;flex-wrap:nowrap;overflow:hidden;min-width:0;}
.preview-path #previewPathText{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.preview-path #previewBadge{flex-shrink:0;white-space:nowrap;}
.preview-path #btnDownloadFile,.preview-path #btnEditFile{flex-shrink:0;white-space:nowrap;}

/* Preview badge typography */
.preview-badge{font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;}

/* Approval buttons: tab stops */
.approval-btn:focus{outline:2px solid var(--blue);outline-offset:2px;}
.clarify-choice:focus,.clarify-submit:focus,.clarify-input:focus{outline:2px solid var(--blue);outline-offset:2px;}

/* Message role: breathing room between icon and name */
.msg-role > span{line-height:1;}

/* Composer wrap: slightly less padding on smaller heights */
.composer-wrap{padding:10px 20px 14px;position:relative;z-index:10;}
.composer-wrap::before{content:"";position:absolute;left:0;right:0;bottom:100%;height:32px;background:linear-gradient(to bottom,transparent,var(--bg));pointer-events:none;}

/* Cron status badges: pill shape refinement */
.cron-status{border-radius:99px;font-size:10px;letter-spacing:.04em;}

/* Right panel icons: tighter */
.panel-actions{gap:2px;}

/* Topbar: border should match the subtle sidebar border */
:root.dark .topbar{border-bottom:1px solid rgba(255,255,255,.07);}



/* Suggestion grid: consistent width */
.suggestion-grid{width:100%;max-width:400px;}

/* Empty state: add subtle gradient behind logo */
.empty-state{background:radial-gradient(ellipse at 50% 20%,var(--accent-bg) 0%,transparent 60%);}

/* Remove old status-text from composer (kept for error messages only) */
.status-text{font-size:11px;color:var(--muted);padding-left:2px;display:none;}

/* Sidebar workspace display */
#sidebarWsDisplay:hover{background:rgba(255,255,255,.05);}
#sidebarWsDisplay:hover #sidebarWsName{color:var(--blue);}

/* Date group headers in session list */
.session-list > div[style*="uppercase"] {
  padding: 8px 10px 3px !important;
  font-size: 10px !important;
}
/* Right panel file tree: more padding for breathing room */

/* Composer footer: even spacing */
.composer-footer { padding: 4px 10px 8px; }

/* ── File tree: clean delete button via CSS hover ── */
.file-del-btn{
  flex-shrink:0;
  width:0;height:16px;
  overflow:hidden;
  background:none;border:none;
  color:var(--muted);cursor:pointer;
  font-size:13px;font-weight:300;
  opacity:0;
  transition:width .12s,opacity .12s,color .12s;
  padding:0;border-radius:3px;
  display:flex;align-items:center;justify-content:center;
  line-height:1;
}
.file-item:hover .file-del-btn{ width:16px;opacity:1;margin-left:2px; }
.file-del-btn:hover{ color:var(--accent); }

/* file-name must be a flex child that can shrink to zero */
.file-name{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  flex:1 1 0;
  min-width:0;
}

/* file-size: never wraps, shrinks away gracefully */
.file-size{
  flex-shrink:0;
  font-size:10px;
  color:var(--muted);
  white-space:nowrap;
  margin-left:4px;
  font-variant-numeric:tabular-nums;
}

/* file-icon: never shrinks */
.file-icon{
  flex-shrink:0;
  font-size:13px;
  opacity:.7;
  line-height:1;
}

/* ── Resizable panels ── */
.resize-handle{
  position:absolute;
  top:0;bottom:0;
  width:5px;
  cursor:col-resize;
  z-index:10;
  transition:background .15s;
}
.resize-handle:hover,.resize-handle.dragging{background:var(--accent);}
/* Desktop-only: position:relative for sidebar/rightpanel resize handles.
   Must be scoped to min-width:641px so it doesn't override the mobile
   position:fixed slide-in overlay set in the max-width:640px @media block above. */
@media(min-width:641px){
  .sidebar{position:relative;}
  .rightpanel{position:relative;}
}
.sidebar .resize-handle{right:-2px;}
.rightpanel .resize-handle{left:-2px;}
/* Prevent text selection during drag */
body.resizing{user-select:none;cursor:col-resize;}

/* ── Tool call cards ── */
/* Running indicator dot (pulsing) */
.tool-card-running-dot{
  display:inline-block;
  width:7px;
  height:7px;
  border-radius:50%;
  background:var(--blue);
  opacity:.8;
  flex-shrink:0;
  vertical-align:middle;
  animation:pulse 1.2s ease-in-out infinite;
}
/* Show more button inside tool card result */
.tool-card-more{background:none;border:none;color:var(--blue);font-size:10px;cursor:pointer;padding:3px 0 0;opacity:.7;display:block;}
.tool-card-more:hover{opacity:1;}
/* Subagent cards: indented with accent border */
.tool-card-subagent{border-left:2px solid var(--accent-bg);margin-left:8px;}
/* Token usage badge below assistant messages */
.msg-usage{font-size:11px;color:var(--muted);opacity:.6;margin-top:2px;padding-left:42px;}
.msg-usage:hover{opacity:1;}
/* Skill picker (cron create form) */
.skill-picker-wrap{position:relative;}
.skill-picker-dropdown{position:absolute;left:0;right:0;top:100%;background:var(--sidebar);border:1px solid var(--border2);border-radius:6px;z-index:1100;max-height:180px;overflow-y:auto;box-shadow:0 4px 12px rgba(0,0,0,.3);}
.skill-opt{padding:6px 10px;cursor:pointer;font-size:12px;color:var(--muted);transition:background .1s;}
.skill-opt:hover{background:rgba(255,255,255,.08);color:var(--text);}
.skill-picker-tags{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px;}
.skill-tag{background:var(--accent-bg);border:1px solid var(--accent-bg);border-radius:12px;padding:2px 8px;font-size:11px;color:var(--accent-text);display:flex;align-items:center;gap:4px;}
.remove-tag{cursor:pointer;opacity:.6;font-size:13px;line-height:1;}
.remove-tag:hover{opacity:1;color:var(--accent);}
/* Skill frontmatter (collapsible metadata) */
.skill-frontmatter{margin-bottom:16px;border:1px solid var(--border);border-radius:8px;background:var(--surface);overflow:hidden;}
.skill-frontmatter>summary{padding:8px 12px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);cursor:pointer;user-select:none;list-style:none;}
.skill-frontmatter>summary::-webkit-details-marker{display:none;}
.skill-frontmatter>summary:hover{color:var(--text);}
.skill-frontmatter[open]>summary{border-bottom:1px solid var(--border);}
.skill-frontmatter pre{margin:0;padding:10px 12px;font-size:12px;line-height:1.5;color:var(--text);background:transparent;overflow-x:auto;}
/* Skill linked files section */
.skill-linked-files{margin-top:16px;border-top:1px solid var(--border);padding-top:12px;}
.skill-linked-section{margin-bottom:8px;}
.skill-linked-section h4{font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-bottom:4px;}
.skill-linked-file{display:block;font-size:12px;padding:3px 6px;border-radius:4px;cursor:pointer;color:var(--blue);text-decoration:none;}
.skill-linked-file:hover{background:var(--hover-bg);}
.tool-card-row{margin:0;padding:1px 0;}
.agent-event-row{margin:0;padding:1px 0;}
.product-uploader-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border:1.5px dashed var(--border2,var(--border));border-radius:10px;background:rgba(96,165,250,.04);color:var(--text);transition:background .12s,border-color .12s;}
.product-uploader-card.drag-over{border-color:rgba(96,165,250,.85);background:rgba(96,165,250,.10);border-style:solid;}
.product-uploader-card-icon{flex:0 0 auto;color:rgba(96,165,250,.95);display:flex;align-items:center;justify-content:center;}
.product-uploader-card-body{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:3px;}
.product-uploader-card-heading{font-size:13.5px;font-weight:600;color:var(--text);}
.product-uploader-card-hint{font-size:12px;line-height:1.45;color:var(--muted);}
.product-uploader-card-actions{flex:0 0 auto;}
.product-uploader-card-btn{padding:7px 14px;border-radius:8px;font-size:12.5px;font-weight:600;background:rgba(96,165,250,.95);border:1px solid rgba(96,165,250,.95);color:#fff;cursor:pointer;transition:background .15s,box-shadow .15s;}
.product-uploader-card-btn:hover{background:rgba(59,130,246,1);box-shadow:0 1px 4px rgba(96,165,250,.35);}
.product-card-ui{display:grid;grid-template-columns:132px minmax(0,1fr);gap:14px;align-items:start;padding:12px;border-color:rgba(96,165,250,.38);background:rgba(59,130,246,.05);}
.product-card-ui-media{width:132px;aspect-ratio:1/1;border-radius:8px;overflow:hidden;background:var(--surface2,var(--surface));border:1px solid var(--border);display:flex;align-items:center;justify-content:center;}
.product-card-ui-media img{display:block;width:100%;height:100%;object-fit:cover;}
.product-card-ui-placeholder{font-size:12px;color:var(--muted);}
.product-card-ui-body{min-width:0;display:flex;flex-direction:column;gap:8px;}
.product-card-ui-kicker{font-size:11px;color:var(--muted);font-weight:600;}
.product-card-ui-title{font-size:16px;line-height:1.35;font-weight:700;color:var(--text);word-break:break-word;}
.product-card-ui-meta{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;}
.product-card-ui-meta div{min-width:0;border:1px solid var(--border);border-radius:8px;background:var(--surface);padding:7px 9px;}
.product-card-ui-meta span{display:block;font-size:11px;color:var(--muted);margin-bottom:2px;}
.product-card-ui-meta strong{display:block;font-size:13px;color:var(--text);font-weight:700;word-break:break-word;}
.product-card-ui-thumbs{display:flex;gap:6px;flex-wrap:wrap;}
.product-card-thumb{width:42px;height:42px;border-radius:7px;border:1px solid var(--border);overflow:hidden;background:var(--surface);display:block;}
.product-card-thumb.is-active{border-color:rgba(96,165,250,.8);}
.product-card-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
@media(max-width:640px){
  .product-card-ui{grid-template-columns:92px minmax(0,1fr);}
  .product-card-ui-media{width:92px;}
  .product-card-ui-meta{grid-template-columns:1fr;}
}
/* P1 layered rendering — terminal-error card (apperror / run_failed_upstream
 * / no_response / etc.). Sits below the activity timeline + assistant text;
 * NOT a fake assistant turn. See static/messages.js appendTerminalErrorRow. */
.terminal-error-row{margin:6px 0 4px var(--msg-rail);max-width:var(--msg-max);padding:0;}
.terminal-error-card{display:flex;flex-direction:column;gap:4px;border:1px solid rgba(220,38,38,.32);border-left:3px solid rgba(220,38,38,.78);background:rgba(220,38,38,.06);border-radius:8px;padding:8px 12px;color:var(--text);}
.terminal-error-header{display:flex;align-items:center;gap:8px;font-size:12.5px;font-weight:600;color:rgba(220,38,38,.92);}
.terminal-error-icon{font-size:13px;line-height:1;}
.terminal-error-label{flex:0 0 auto;}
.terminal-error-code{flex:0 0 auto;font-family:var(--font-mono,ui-monospace,SFMono-Regular,Menlo,monospace);font-size:11px;font-weight:500;color:rgba(220,38,38,.78);background:rgba(220,38,38,.08);border-radius:4px;padding:1px 6px;}
.terminal-error-message{font-size:12.5px;line-height:1.5;color:var(--text);white-space:pre-wrap;word-break:break-word;}
.terminal-error-footer{display:flex;align-items:center;gap:10px;font-size:11px;color:var(--muted);}
.terminal-error-runid{font-family:var(--font-mono,ui-monospace,SFMono-Regular,Menlo,monospace);color:var(--muted);opacity:.85;}
.terminal-error-retry{margin-left:auto;font-size:11px;padding:3px 10px;border:1px solid rgba(220,38,38,.45);border-radius:14px;background:transparent;color:rgba(220,38,38,.92);cursor:pointer;}
.terminal-error-retry:hover{background:rgba(220,38,38,.08);}
.merchant-reauth-row{margin:6px 0 4px var(--msg-rail);max-width:var(--msg-max);padding:0;}
.merchant-reauth-card{display:flex;flex-direction:column;gap:7px;border:1px solid rgba(245,158,11,.34);border-left:3px solid rgba(245,158,11,.88);background:rgba(245,158,11,.07);border-radius:8px;padding:10px 12px;color:var(--text);}
.merchant-reauth-header{display:flex;align-items:center;gap:8px;font-size:12.5px;font-weight:700;color:#fbbf24;}
.merchant-reauth-icon{font-size:13px;line-height:1;}
.merchant-reauth-title{flex:0 0 auto;}
.merchant-reauth-chip{font-family:var(--font-mono,ui-monospace,SFMono-Regular,Menlo,monospace);font-size:11px;font-weight:500;color:#fbbf24;background:rgba(245,158,11,.1);border-radius:4px;padding:1px 6px;}
.merchant-reauth-message{font-size:12.5px;line-height:1.5;color:var(--text);white-space:pre-wrap;word-break:break-word;}
.merchant-reauth-footer{display:flex;align-items:center;gap:10px;font-size:11px;color:var(--muted);}
.merchant-reauth-note{min-width:0;flex:1;line-height:1.45;}
.merchant-reauth-button{font-size:11px;padding:4px 12px;border:1px solid rgba(245,158,11,.55);border-radius:14px;background:rgba(245,158,11,.1);color:#fbbf24;cursor:pointer;white-space:nowrap;}
.merchant-reauth-button:hover:not(:disabled){background:rgba(245,158,11,.18);}
.merchant-reauth-button:disabled{opacity:.5;cursor:not-allowed;}
.tool-call-group{margin:2px 0 var(--space-4) var(--msg-rail);max-width:var(--msg-max);border-left:0;}
.tool-call-group-summary{width:100%;display:flex;align-items:center;gap:var(--space-2);padding:var(--space-1) 0 var(--space-2);border:0;border-bottom:1px solid var(--border-subtle);background:transparent;color:var(--muted);cursor:pointer;text-align:left;font:inherit;font-size:var(--font-size-sm);line-height:1.45;border-radius:0;}
.tool-call-group-summary:hover{background:transparent;color:var(--text);}
.tool-call-group-label{font-weight:500;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;}
.tool-call-group-list{opacity:.72;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;}
.tool-call-group.tool-call-group-collapsed .tool-call-group-list{display:none;}
.tool-call-group-elapsed{display:none;}
.tool-call-group-elapsed::before{content:'';width:6px;height:6px;border-radius:999px;background:var(--accent-text);box-shadow:0 0 0 0 color-mix(in srgb,var(--accent-text) 42%,transparent);animation:activity-elapsed-pulse 1.4s ease-in-out infinite;}
.tool-call-group:not([data-activity-running="1"]) .tool-call-group-elapsed::before{animation:none;opacity:.55;box-shadow:none;}
.tool-call-group-count{margin-left:auto;opacity:.56;font-variant-numeric:tabular-nums;}
.tool-call-group.tool-call-group-collapsed .tool-call-group-count{display:none;}
@keyframes activity-elapsed-pulse{0%,100%{opacity:.55;box-shadow:0 0 0 0 color-mix(in srgb,var(--accent-text) 34%,transparent);}50%{opacity:1;box-shadow:0 0 0 4px transparent;}}
.tool-call-group-chevron{opacity:.45;display:inline-flex;transition:transform .16s ease;}
.tool-call-group:not(.tool-call-group-collapsed) .tool-call-group-chevron{transform:rotate(90deg);}
.tool-call-group-body{display:block;margin-top:var(--space-2);padding:var(--space-2) 0 0 0;}
.tool-call-group.tool-call-group-collapsed .tool-call-group-body{display:none;}
.tool-call-group[data-processed-summary-fallback="1"]:not([data-processed-pending-ui="1"]) .tool-call-group-summary{cursor:default;pointer-events:none;}
.tool-call-group[data-processed-summary-fallback="1"]:not([data-processed-pending-ui="1"]) .tool-call-group-chevron{visibility:hidden;}
.tool-call-group[data-processed-summary-fallback="1"][data-processed-pending-ui="1"] .tool-call-group-summary{cursor:pointer;pointer-events:auto;}
.tool-call-group[data-processed-summary-fallback="1"][data-processed-pending-ui="1"] .tool-call-group-chevron{visibility:visible;}
.agent-activity-status{display:flex;align-items:flex-start;gap:8px;margin:2px 0;padding:6px 10px;border:1px solid var(--border-subtle);border-radius:8px;background:var(--surface-subtle);color:var(--muted);}
.agent-activity-status-dot{width:7px;height:7px;border-radius:999px;margin-top:6px;background:var(--accent-text);box-shadow:0 0 0 0 color-mix(in srgb,var(--accent-text) 42%,transparent);animation:activity-elapsed-pulse 1.4s ease-in-out infinite;flex:0 0 auto;}
.agent-activity-status-copy{display:flex;flex-direction:column;gap:2px;min-width:0;font-size:12px;line-height:1.45;}
.agent-activity-status-label{font-weight:600;color:var(--text);}
.agent-activity-status-detail{color:var(--muted);}
.tool-card{background:var(--surface-subtle);border:1px solid var(--border-subtle);border-radius:var(--radius-card);margin:2px 0;overflow:hidden;transition:border-color .15s,background-color .15s;}
.agent-event-card{display:flex;align-items:center;min-height:28px;background:var(--surface-subtle);border:1px solid var(--border-subtle);border-radius:8px;margin:2px 0;padding:5px 10px;color:var(--muted);}
.agent-event-card.agent-event-policy-card{display:block;padding:8px 10px;}
.agent-event-card.agent-event-advisor-result,.agent-event-card.agent-event-advisor-start{border-color:rgba(96,165,250,.24);background:rgba(96,165,250,.07);}
.agent-event-card.agent-event-policy-require_confirm{border-color:rgba(245,158,11,.42);background:rgba(245,158,11,.1);}
.agent-event-card.agent-event-audit-trace{border-style:dashed;background:rgba(255,255,255,.018);}
.agent-event-header{display:flex;align-items:center;gap:8px;min-width:0;width:100%;}
.agent-event-icon{width:8px;height:8px;border-radius:999px;background:var(--muted);opacity:.65;flex-shrink:0;}
.agent-event-icon-advisor{background:#60a5fa;}
.agent-event-icon-policy{background:#f59e0b;}
.agent-event-icon-audit,.agent-event-icon-trace{background:var(--muted);}
.agent-event-kind{font-size:var(--font-size-xs);font-weight:600;color:var(--muted);font-family:'SF Mono',ui-monospace,monospace;flex-shrink:0;}
.agent-event-preview{font-size:var(--font-size-xs);color:var(--muted);opacity:.72;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1;}
.agent-event-badge{font-size:10px;font-weight:700;line-height:1;padding:3px 6px;border-radius:999px;background:rgba(255,255,255,.06);color:var(--muted);text-transform:uppercase;letter-spacing:.04em;flex-shrink:0;}
.agent-event-severity-high .agent-event-badge{color:#f87171;background:rgba(248,113,113,.12);}
.agent-event-severity-medium .agent-event-badge{color:#f59e0b;background:rgba(245,158,11,.12);}
.agent-event-severity-warning .agent-event-badge{color:#f59e0b;background:rgba(245,158,11,.14);}
.agent-event-severity-info .agent-event-badge{color:#60a5fa;background:rgba(96,165,250,.12);}
.policy-confirm-card{margin-top:0;border-top:0;padding-top:0;}
.policy-confirm-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:8px;}
.policy-confirm-title{font-size:13px;font-weight:700;color:var(--text);}
.policy-confirm-sub{font-size:11px;color:var(--muted);line-height:1.45;margin-top:2px;}
.policy-confirm-risk{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:#f59e0b;background:rgba(245,158,11,.14);border-radius:999px;padding:4px 7px;white-space:nowrap;}
.policy-confirm-grid{display:grid;grid-template-columns:1fr;gap:4px;margin:8px 0;}
.policy-confirm-card-compact .policy-confirm-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px 16px;margin-top:10px;}
.policy-confirm-row{display:grid;grid-template-columns:72px minmax(0,1fr);gap:8px;align-items:start;font-size:11px;line-height:1.45;}
.policy-confirm-card-compact .policy-confirm-row{grid-template-columns:68px minmax(0,1fr);font-size:12px;}
.policy-confirm-row span{color:var(--muted);}
.policy-confirm-row strong{color:var(--text);font-weight:650;overflow-wrap:anywhere;font-family:inherit;}
.policy-confirm-details{margin-top:6px;border-top:1px solid rgba(245,158,11,.12);padding-top:6px;color:var(--muted);font-size:11px;}
.policy-confirm-details summary{cursor:pointer;font-weight:700;user-select:none;}
.policy-confirm-details>div{margin-top:6px;}
.agent-ui-empty{color:var(--muted);font-weight:500;}
.agent-ui-list,.agent-ui-kv{display:grid;gap:4px;min-width:0;}
.agent-ui-kv-row{display:grid;grid-template-columns:minmax(70px,.32fr) minmax(0,1fr);gap:8px;align-items:start;}
.agent-ui-kv-row span{color:var(--muted);font-size:10.5px;font-weight:700;}
.agent-ui-kv-row strong{font-weight:650;color:var(--text);}
.policy-confirm-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin-top:8px;}
.policy-confirm-btn{border:1px solid rgba(245,158,11,.28);border-radius:7px;background:rgba(245,158,11,.08);color:var(--muted);font-size:11px;font-weight:700;padding:6px 10px;cursor:not-allowed;}
.policy-confirm-btn:not(:disabled){cursor:pointer;color:var(--text);background:rgba(245,158,11,.12);}
.policy-confirm-btn:not(:disabled):hover{border-color:rgba(245,158,11,.48);background:rgba(245,158,11,.18);}
.policy-confirm-approve:not(:disabled){color:#fbbf24;}
.policy-confirm-reject:not(:disabled){border-color:rgba(148,163,184,.28);background:rgba(148,163,184,.08);color:var(--muted);}
.policy-confirm-state{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);background:rgba(255,255,255,.06);border-radius:999px;padding:4px 7px;}
.policy-confirm-state-approved{color:#34d399;background:rgba(52,211,153,.12);}
.policy-confirm-state-verified{color:#22d3ee;background:rgba(34,211,238,.12);}
.policy-confirm-state-rejected,.policy-confirm-state-failed{color:#f87171;background:rgba(248,113,113,.12);}
.policy-confirm-state-submitting{color:#60a5fa;background:rgba(96,165,250,.12);}
.policy-confirm-response-row{margin:8px 0 0;}
.policy-confirm-response{display:flex;align-items:center;gap:8px;border:1px solid rgba(52,211,153,.22);border-radius:10px;background:rgba(52,211,153,.08);color:var(--text);font-size:12px;font-weight:700;line-height:1.45;padding:8px 10px;}
.policy-confirm-response span:last-child{color:var(--muted);font-weight:600;}
.policy-confirm-response-dot{width:7px;height:7px;border-radius:999px;background:#34d399;box-shadow:0 0 0 3px rgba(52,211,153,.12);flex:0 0 auto;}
.policy-confirm-response-approved .policy-confirm-response{border-color:rgba(96,165,250,.22);background:rgba(96,165,250,.08);}
.policy-confirm-response-approved .policy-confirm-response-dot{background:#60a5fa;box-shadow:0 0 0 3px rgba(96,165,250,.12);}
.policy-confirm-response-rejected .policy-confirm-response{border-color:rgba(148,163,184,.22);background:rgba(148,163,184,.08);}
.policy-confirm-response-rejected .policy-confirm-response-dot{background:#94a3b8;box-shadow:0 0 0 3px rgba(148,163,184,.12);}
.policy-confirm-response-failed .policy-confirm-response{border-color:rgba(248,113,113,.28);background:rgba(248,113,113,.1);}
.policy-confirm-response-failed .policy-confirm-response-dot{background:#f87171;box-shadow:0 0 0 3px rgba(248,113,113,.13);}
.policy-confirm-result-card{margin-top:8px;}
.agent-event-card .policy-confirm-result-card{margin-top:8px;}
.policy-confirm-result-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 12px;margin-top:8px;}
.policy-confirm-result-field{display:grid;grid-template-columns:72px minmax(0,1fr);gap:8px;align-items:start;border:1px solid rgba(52,211,153,.14);border-radius:8px;background:rgba(255,255,255,.025);font-size:11px;line-height:1.4;padding:7px 9px;}
.policy-confirm-result-field span{color:var(--muted);font-weight:700;}
.policy-confirm-result-field strong{color:var(--text);font-weight:650;overflow-wrap:anywhere;}
@media (max-width: 760px){.policy-confirm-card-compact .policy-confirm-grid{grid-template-columns:1fr}.policy-confirm-result-fields{grid-template-columns:1fr}}
.agent-event-card.agent-event-ui-component-card{display:block;padding:10px 12px;border-color:rgba(96,165,250,.28);background:rgba(96,165,250,.055);}
.universal-ui-card{margin-top:8px;border-top:1px solid rgba(96,165,250,.18);padding-top:10px;}
.universal-ui-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:10px;}
.universal-ui-title{font-size:13px;font-weight:800;color:var(--text);}
.universal-ui-sub{font-size:11px;color:var(--muted);line-height:1.45;margin-top:2px;}
.universal-ui-kind{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:#60a5fa;background:rgba(96,165,250,.14);border-radius:999px;padding:4px 7px;white-space:nowrap;}
.universal-ui-form{display:flex;flex-direction:column;gap:10px;}
.universal-ui-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;}
.universal-ui-field{min-width:0;display:flex;flex-direction:column;gap:5px;}
.universal-ui-field-textarea,.universal-ui-field-markdown,.universal-ui-field-long_text,.universal-ui-field-json,.universal-ui-field-object,.universal-ui-field-array,.universal-ui-field-diff,.universal-ui-field-sku_table{grid-column:1/-1;}
.universal-ui-label{font-size:11px;font-weight:700;color:var(--muted);letter-spacing:.01em;}
.universal-ui-required{color:#f59e0b;}
.universal-ui-input{width:100%;box-sizing:border-box;border:1px solid var(--border2);border-radius:8px;background:var(--input-bg);color:var(--text);font:inherit;font-size:12px;padding:8px 10px;outline:none;margin:0;}
.universal-ui-input:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-bg);}
.universal-ui-input:disabled{opacity:.62;cursor:not-allowed;}
.universal-ui-textarea{resize:vertical;min-height:76px;line-height:1.5;}
.universal-ui-mono{font-family:'SF Mono',ui-monospace,monospace;font-size:11px;}
.universal-ui-check{display:flex;align-items:center;gap:8px;min-height:34px;color:var(--text);font-size:12px;font-weight:700;}
.universal-ui-check input{accent-color:var(--accent);}
.universal-ui-color{width:44px;height:34px;padding:2px;border:1px solid var(--border2);border-radius:8px;background:var(--input-bg);}
.universal-ui-hint{font-size:10.5px;color:var(--muted);line-height:1.45;}
.universal-ui-empty,.universal-ui-unknown{grid-column:1/-1;font-size:11px;color:var(--muted);border:1px dashed var(--border2);border-radius:8px;padding:9px 10px;background:rgba(255,255,255,.02);}
.universal-ui-display-fields{display:grid;gap:7px;}
.universal-ui-display-row{display:grid;grid-template-columns:minmax(96px,.36fr) 1fr;gap:10px;align-items:start;border:1px solid var(--border2);border-radius:8px;padding:7px 9px;background:rgba(255,255,255,.025);}
.universal-ui-display-row span{font-size:10.5px;color:var(--muted);font-weight:700;line-height:1.45;}
.universal-ui-display-row strong{font-size:11.5px;color:var(--text);font-weight:700;line-height:1.45;word-break:break-word;font-family:inherit;}
.universal-ui-actions{display:flex;justify-content:flex-end;align-items:center;gap:8px;margin-top:2px;}
.universal-ui-btn{border:1px solid rgba(148,163,184,.28);border-radius:8px;background:rgba(148,163,184,.08);color:var(--muted);font-size:11px;font-weight:800;padding:7px 11px;cursor:pointer;transition:border-color .15s,background .15s,color .15s,transform .15s;}
.universal-ui-btn:hover:not(:disabled){transform:translateY(-1px);border-color:rgba(96,165,250,.42);background:rgba(96,165,250,.12);color:var(--text);}
.universal-ui-btn:disabled{opacity:.55;cursor:not-allowed;transform:none;}
.universal-ui-btn-primary{border-color:rgba(96,165,250,.42);background:rgba(96,165,250,.14);color:#93c5fd;}
.universal-ui-btn-danger{border-color:rgba(248,113,113,.35);background:rgba(248,113,113,.1);color:#fca5a5;}
.ceo-ad-hoc-proposal{display:grid;gap:12px;}
.ceo-proposal-head{margin-bottom:0;}
.ceo-proposal-target{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 18px;padding:10px 0;border-top:1px solid var(--border2);border-bottom:1px solid var(--border2);}
.ceo-proposal-target>div,.ceo-proposal-meta>div{display:grid;grid-template-columns:84px minmax(0,1fr);gap:8px;align-items:start;font-size:11.5px;line-height:1.45;}
.ceo-proposal-target span,.ceo-proposal-meta span{color:var(--muted);font-weight:650;}
.ceo-proposal-target strong,.ceo-proposal-meta strong{color:var(--text);font-weight:700;overflow-wrap:anywhere;}
.ceo-proposal-columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;}
.ceo-ad-hoc-proposal section h4{margin:0 0 7px;font-size:11.5px;color:var(--text);}
.ceo-proposal-list{display:grid;gap:7px;margin:0;padding:0;list-style:none;counter-reset:none;}
.ceo-proposal-list li{display:grid;grid-template-columns:20px minmax(0,1fr);gap:7px;align-items:start;font-size:11.5px;line-height:1.45;}
.ceo-proposal-list li>span{display:grid;place-items:center;width:18px;height:18px;border-radius:50%;background:var(--hover-bg);color:var(--muted);font-size:10px;font-weight:800;}
.ceo-proposal-list strong{display:block;color:var(--text);font-weight:650;overflow-wrap:anywhere;}
.ceo-proposal-list small{display:block;margin-top:1px;color:var(--muted);font-size:10.5px;}
.ceo-proposal-acceptance{padding-top:10px;border-top:1px solid var(--border2);}
.ceo-proposal-meta{display:grid;gap:7px;padding-top:10px;border-top:1px solid var(--border2);}
.ceo-proposal-evidence{display:grid;gap:5px;margin:0;padding:0;list-style:none;min-width:0;}
.ceo-proposal-evidence li{display:grid;gap:1px;min-width:0;}
.ceo-proposal-evidence strong{overflow-wrap:anywhere;}
.ceo-proposal-evidence small{color:var(--muted);font-size:10.5px;line-height:1.4;}
.ceo-proposal-billing{display:grid;gap:3px;padding:9px 0;border-top:1px solid var(--border2);border-bottom:1px solid var(--border2);}
.ceo-proposal-billing strong{color:var(--text);font-size:11.5px;}
.ceo-proposal-billing span{color:var(--muted);font-size:10.5px;line-height:1.45;}
.ceo-proposal-result{display:flex;align-items:center;gap:8px;min-width:0;color:var(--muted);font-size:11px;line-height:1.45;}
.ceo-proposal-result strong{color:var(--text);}
.ceo-proposal-result a{margin-left:auto;color:var(--accent);font-weight:750;text-decoration:none;white-space:nowrap;}
.ceo-proposal-result a:hover{text-decoration:underline;}
.ceo-proposal-result a:focus-visible{outline:2px solid var(--focus-ring);outline-offset:3px;border-radius:2px;}
.ceo-proposal-actions{margin-top:0;}
.ceo-proposal-actions[hidden]{display:none;}
.ceo-proposal-actions .universal-ui-btn{min-height:36px;}
.universal-ui-no-actions{font-size:11px;color:var(--muted);}
.universal-ui-contract-error-card{border:1px solid rgba(245,158,11,.32);border-radius:10px;background:rgba(245,158,11,.055);padding:12px;margin-top:10px;}
.universal-ui-contract-error-card .universal-ui-kind{color:#f59e0b;background:rgba(245,158,11,.14);}
.universal-ui-contract-warning{border:1px solid rgba(245,158,11,.24);border-radius:8px;background:rgba(245,158,11,.08);color:var(--text);font-size:11.5px;line-height:1.5;padding:9px 10px;margin-bottom:10px;}
.universal-ui-contract-warning strong{display:block;font-size:12px;margin-bottom:2px;}
.universal-ui-contract-warning ul{margin:6px 0 0 18px;padding:0;color:var(--muted);}
.stock-sku-editor-card{border:1px solid rgba(96,165,250,.24);border-radius:10px;background:rgba(96,165,250,.045);padding:12px;margin-top:10px;}
.stock-sku-editor-table-wrap{overflow-x:auto;border:1px solid rgba(148,163,184,.16);border-radius:9px;background:rgba(255,255,255,.02);margin-bottom:10px;}
.stock-sku-editor-table{width:100%;border-collapse:collapse;min-width:640px;font-size:11.5px;}
.stock-sku-editor-table th,.stock-sku-editor-table td{padding:8px 9px;border-bottom:1px solid rgba(148,163,184,.14);text-align:left;vertical-align:top;line-height:1.45;}
.stock-sku-editor-table th{color:var(--muted);font-weight:800;background:rgba(148,163,184,.06);}
.stock-sku-editor-table tr:last-child td{border-bottom:0;}
.stock-sku-row-touched{background:rgba(245,158,11,.055);}
.stock-sku-cell-changed strong{color:#f59e0b;font-weight:850;}
.stock-sku-row-reason{color:var(--muted);font-size:10.5px;margin-top:2px;}
.video-generation-card{border:1px solid rgba(14,165,233,.24);border-radius:10px;background:linear-gradient(180deg,rgba(14,165,233,.08),rgba(255,255,255,.025));padding:12px;margin-top:10px;}
.video-generation-card-done{border-color:rgba(34,197,94,.26);background:linear-gradient(180deg,rgba(34,197,94,.08),rgba(255,255,255,.025));}
.video-generation-card-failed{border-color:rgba(248,113,113,.3);background:linear-gradient(180deg,rgba(248,113,113,.08),rgba(255,255,255,.025));}
.video-generation-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:10px;}
.video-generation-title{font-size:13px;font-weight:850;color:var(--text);line-height:1.35;}
.video-generation-sub{font-size:11px;color:var(--muted);line-height:1.45;margin-top:2px;}
.video-generation-badge{font-size:10.5px;font-weight:850;color:#38bdf8;background:rgba(14,165,233,.14);border:1px solid rgba(14,165,233,.18);border-radius:999px;padding:4px 8px;white-space:nowrap;}
.video-generation-card-done .video-generation-badge{color:#4ade80;background:rgba(34,197,94,.12);border-color:rgba(34,197,94,.18);}
.video-generation-card-failed .video-generation-badge{color:#fca5a5;background:rgba(248,113,113,.12);border-color:rgba(248,113,113,.2);}
.video-generation-progress{height:8px;border-radius:999px;background:rgba(148,163,184,.15);overflow:hidden;border:1px solid rgba(148,163,184,.12);}
.video-generation-progress div{height:100%;min-width:10px;border-radius:999px;background:linear-gradient(90deg,#38bdf8,#22c55e);transition:width .25s ease;}
.video-generation-meta{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:7px;color:var(--muted);font-size:11px;font-weight:700;}
.video-generation-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:10px;}
.video-generation-fields:empty{display:none;}
.video-generation-fields div{display:grid;grid-template-columns:68px minmax(0,1fr);gap:8px;align-items:center;border:1px solid rgba(148,163,184,.18);border-radius:8px;padding:7px 9px;background:rgba(255,255,255,.025);min-width:0;}
.video-generation-fields span{font-size:10.5px;color:var(--muted);font-weight:750;}
.video-generation-fields strong{font-size:11.5px;color:var(--text);font-weight:750;overflow-wrap:anywhere;}
.video-generation-fields a{color:#38bdf8;text-decoration:none;}
.video-generation-fields a:hover{text-decoration:underline;}
.video-generation-player{display:block;width:100%;max-height:420px;border-radius:10px;background:#000;margin:2px 0 0;}
.video-generation-result-link{display:inline-flex;align-items:center;justify-content:center;min-height:36px;border-radius:8px;border:1px solid rgba(14,165,233,.24);background:rgba(14,165,233,.1);color:#0288A8;text-decoration:none;font-weight:800;padding:8px 12px;margin-top:2px;}
.video-generation-result-link:hover{text-decoration:none;background:rgba(14,165,233,.16);}
.video-generation-message{margin-top:8px;color:var(--muted);font-size:11.5px;font-weight:700;line-height:1.5;overflow-wrap:anywhere;}
@media (max-width: 760px){.video-generation-fields{grid-template-columns:1fr}.video-generation-head{align-items:flex-start}.video-generation-player{max-height:320px}}
@media (max-width: 760px){.universal-ui-fields{grid-template-columns:1fr}.universal-ui-display-row{grid-template-columns:1fr;gap:3px}.universal-ui-actions{justify-content:stretch;flex-direction:column}.universal-ui-btn{width:100%;min-height:40px}}
@media (max-width:760px){.ceo-proposal-target,.ceo-proposal-columns{grid-template-columns:1fr}.ceo-proposal-target>div,.ceo-proposal-meta>div{grid-template-columns:78px minmax(0,1fr)}.ceo-proposal-result{align-items:flex-start;flex-wrap:wrap}.ceo-proposal-result a{margin-left:0;width:100%}}
@media (pointer:coarse){.ceo-proposal-actions .universal-ui-btn{min-height:44px;font-size:13px}}
.u3-execution-rail{border:1px solid rgba(96,165,250,.22);border-radius:10px;background:rgba(96,165,250,.045);padding:9px 10px;margin:4px 0;}
.u3-execution-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px;color:var(--text);font-size:11px;font-weight:800;letter-spacing:.01em;}
.u3-execution-head small{color:var(--muted);font-size:10px;font-weight:700;}
.u3-execution-list{display:grid;gap:6px;}
.u3-execution-phase{display:grid;grid-template-columns:10px minmax(0,1fr);gap:8px;align-items:start;min-width:0;}
.u3-phase-dot{width:7px;height:7px;border-radius:999px;margin-top:6px;background:#60a5fa;box-shadow:0 0 0 3px rgba(96,165,250,.12);}
.u3-status-done .u3-phase-dot,.u3-status-completed .u3-phase-dot,.u3-status-success .u3-phase-dot{background:#34d399;box-shadow:0 0 0 3px rgba(52,211,153,.12);}
.u3-status-failed .u3-phase-dot,.u3-status-error .u3-phase-dot{background:#f87171;box-shadow:0 0 0 3px rgba(248,113,113,.12);}
.u3-phase-body{min-width:0;}
.u3-phase-main{display:flex;align-items:center;gap:8px;min-width:0;}
.u3-phase-main strong{color:var(--text);font-size:11px;font-weight:800;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.u3-phase-main span{color:var(--muted);font-size:10px;font-weight:700;white-space:nowrap;}
.u3-phase-summary{color:var(--muted);font-size:10.5px;line-height:1.45;margin-top:2px;overflow-wrap:anywhere;}
.composer-managed-model-chip{cursor:default;opacity:1;}
.composer-managed-model-chip:disabled{color:var(--text);opacity:1;}
.tool-card:hover{border-color:var(--border-muted);background:var(--surface-subtle-hover);}
.tool-card-running{border-color:var(--accent-bg-strong);background:var(--accent-bg);}
.tool-card-header{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-3);cursor:pointer;user-select:none;}
.tool-card-icon{font-size:13px;flex-shrink:0;opacity:.65;}
.tool-card-name{font-size:var(--font-size-xs);font-weight:600;color:var(--muted);font-family:'SF Mono',ui-monospace,monospace;flex-shrink:0;}
.tool-card-preview{font-size:var(--font-size-xs);color:var(--muted);opacity:.62;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
/* A (2026-05-21): args signature inline — monospace, slightly stronger
   opacity than result preview so users can read the "why this call". */
.tool-card-preview.tool-card-args-sig{font-family:'SF Mono',ui-monospace,SFMono-Regular,Menlo,monospace;opacity:.74;}

/* B (2026-05-21): consecutive same-name tool stack (apm_products_get ×N).
   Collapsed by default; click summary to expand to the individual cards. */
.tool-stack-row{margin:1px 0;padding:0;}
.tool-stack-summary{display:flex;align-items:center;gap:var(--space-2);width:100%;padding:6px 10px;background:transparent;border:1px solid var(--border-subtle);border-radius:8px;color:var(--muted);font:inherit;font-size:var(--font-size-xs);cursor:pointer;text-align:left;transition:background .15s,color .15s,border-color .15s;}
.tool-stack-summary:hover{background:var(--surface);color:var(--text);border-color:var(--border);}
.tool-stack-row.open > .tool-stack-summary{background:var(--surface);color:var(--text);border-bottom-left-radius:0;border-bottom-right-radius:0;}
.tool-stack-chevron{display:inline-flex;align-items:center;justify-content:center;width:12px;height:12px;color:var(--muted);opacity:.55;transform-origin:center;transition:transform .18s ease;flex-shrink:0;}
.tool-stack-row.open > .tool-stack-summary .tool-stack-chevron{transform:rotate(90deg);}
.tool-stack-icon{display:inline-flex;align-items:center;justify-content:center;font-size:13px;flex-shrink:0;opacity:.65;}
.tool-stack-name{font-family:'SF Mono',ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:600;color:inherit;flex:0 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.tool-stack-count{margin-left:auto;font-variant-numeric:tabular-nums;font-size:11px;color:var(--muted);opacity:.7;flex-shrink:0;}
.tool-stack-body{display:none;padding:6px 10px;border:1px solid var(--border-subtle);border-top:0;border-radius:0 0 8px 8px;background:var(--surface);}
.tool-stack-row.open > .tool-stack-body{display:block;}
.tool-stack-body > .tool-card-row{margin:2px 0;}

/* C (2026-05-21): reasoning card stream.
   Independent channel from tool cards — sits at the TOP of the
   assistant turn block (before tool calls, before assistant text)
   to match the "thinking before action" reading order. Visually
   muted (italic + low opacity) so it's clearly secondary to the
   final assistant answer. Default collapsed. */
.reasoning-card-row{margin:2px 0 8px var(--msg-rail);max-width:var(--msg-max);}
.reasoning-card-summary{display:flex;align-items:center;gap:6px;width:100%;padding:5px 10px;background:transparent;border:1px solid var(--border-subtle);border-radius:8px;color:var(--muted);font:inherit;font-size:var(--font-size-xs);font-style:italic;cursor:pointer;text-align:left;transition:background .15s,color .15s,border-color .15s;}
.reasoning-card-summary:hover{background:var(--surface);color:var(--text);border-color:var(--border);}
.reasoning-card-row.open > .reasoning-card-summary{background:var(--surface);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--text);}
.reasoning-card-chevron{display:inline-flex;align-items:center;justify-content:center;width:10px;height:10px;font-size:9px;color:currentColor;opacity:.55;transform-origin:center;transition:transform .18s ease;flex-shrink:0;}
.reasoning-card-row.open > .reasoning-card-summary .reasoning-card-chevron{transform:rotate(90deg);}
.reasoning-card-label{font-variant-numeric:tabular-nums;}
.reasoning-card-body{display:none;padding:8px 12px;border:1px solid var(--border-subtle);border-top:0;border-radius:0 0 8px 8px;background:var(--surface);color:var(--muted);font-size:var(--font-size-xs);font-style:italic;line-height:1.55;white-space:pre-wrap;word-break:break-word;max-height:480px;overflow:auto;}
.reasoning-card-row.open > .reasoning-card-body{display:block;}
/* Finalized cards lose the italic + dot indicator hint that they were live */
.reasoning-card-row[data-reasoning-finalized="1"] > .reasoning-card-summary{opacity:.78;}
.tool-card-toggle{font-size:10px;color:var(--muted);opacity:.45;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;transform-origin:center;transition:transform .18s ease;will-change:transform;}
.tool-card.open .tool-card-toggle{transform:rotate(90deg);}
.tool-card-detail{display:block;max-height:0;opacity:0;overflow:hidden;border-top:1px solid transparent;padding:0 var(--space-3);transition:max-height .22s ease,opacity .18s ease,padding .22s ease,border-top-color .22s ease;}
.tool-card.open .tool-card-detail{max-height:600px;opacity:1;padding:var(--space-2) var(--space-3);border-top-color:var(--border-subtle);overflow:auto;}
.tool-card-args{margin-bottom:6px;}
.tool-card-args div{font-size:var(--font-size-xs);line-height:1.6;}
.tool-arg-key{color:var(--blue);font-family:'SF Mono',ui-monospace,monospace;font-size:var(--font-size-xs);}
.tool-arg-val{color:var(--muted);font-family:'SF Mono',ui-monospace,monospace;font-size:var(--font-size-xs);word-break:break-all;}
.tool-card-result pre{font-size:var(--font-size-xs);color:var(--muted);font-family:'SF Mono',ui-monospace,monospace;white-space:pre-wrap;word-break:break-word;max-height:240px;overflow-y:auto;margin:0;line-height:1.55;}

/* ── Manual compression cards (transient transcript-local feedback) ── */
.live-compression-cards{
  display:none;
  max-width:800px;
  width:100%;
  margin:0 auto;
  padding:0 24px;
}
.compression-block{
  display:flex;
  flex-direction:column;
  width:100%;
}
.compression-turn{
  width:100%;
}
.compression-turn-blocks{
  display:flex;
  flex-direction:column;
}

.compression-card-row{
  margin:0;
  padding:0;
}
.compression-card-row + .compression-card-row{
  margin-top:4px;
}
.tool-card-compress-command{
  background:rgba(201,168,76,.02);
  border-color:rgba(201,168,76,.16);
}
.tool-card-compress-command .tool-card-name{
  color:var(--gold);
  font-weight:600;
}
.tool-card-compress-running{
  background:rgba(124,185,255,.04);
  border-color:rgba(124,185,255,.24);
}
.tool-card-compress-running .tool-card-name{
  color:var(--blue);
}
.tool-card-compress-error{
  background:rgba(248,113,113,.05);
  border-color:rgba(248,113,113,.28);
}
.tool-card-compress-error .tool-card-name{
  color:#fca5a5;
}
.tool-card-compress-complete{
  background:rgba(78,201,132,.05);
  border-color:rgba(78,201,132,.18);
}
.tool-card-compress-complete .tool-card-name{
  color:#4ec984;
}
.tool-card-compress-reference{
  background:rgba(124,185,255,.04);
  border-color:rgba(124,185,255,.18);
}
.tool-card-compress-reference:hover{
  border-color:rgba(124,185,255,.28);
}
.tool-card-compress-reference .tool-card-name{
  color:var(--blue);
}

.compression-row{
  margin:0 0 4px;
  padding:0;
}
.compression-card{
  margin-left:var(--msg-rail);
  max-width:var(--msg-max);
  border-radius:8px;
  overflow:hidden;
  background:rgba(255,255,255,.03);
  border:1px solid rgba(255,255,255,.08);
}
.compression-card-header{
  display:flex;
  align-items:center;
  gap:8px;
  padding:5px 10px;
  user-select:none;
}
.compression-card-icon{
  font-size:13px;
  flex-shrink:0;
  opacity:.82;
}
.compression-card-bubbles{
  display:inline-flex;
  gap:3px;
  align-items:center;
  flex-shrink:0;
}
.compression-card-bubbles span{
  width:5px;
  height:5px;
  border-radius:50%;
  background:var(--blue);
  opacity:.45;
  animation:compressionPulse 1.05s ease-in-out infinite;
}
.compression-card-bubbles span:nth-child(2){animation-delay:.14s;}
.compression-card-bubbles span:nth-child(3){animation-delay:.28s;}
@keyframes compressionPulse{
  0%,80%,100%{transform:translateY(0);opacity:.35;}
  40%{transform:translateY(-1px);opacity:1;}
}
.compression-card-label{
  font-size:11px;
  font-weight:700;
  font-family:'SF Mono',ui-monospace,monospace;
  letter-spacing:.03em;
  color:var(--muted);
  flex-shrink:0;
}
.compression-card-command{
  font-size:11px;
  color:var(--text);
  font-family:'SF Mono',ui-monospace,monospace;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  flex:1;
}
.compression-card-body{
  padding:0 12px 8px 40px;
  font-size:11px;
  line-height:1.55;
  color:var(--muted);
}
.compression-card-body .compression-note{
  display:block;
  margin-top:2px;
  opacity:.82;
}
.compression-card-command-row{
  border-color:rgba(201,168,76,.22);
  background:rgba(201,168,76,.04);
}
.compression-card-command-row .compression-card-label{color:var(--gold);}
.compression-card-running-row{
  border-color:rgba(124,185,255,.24);
  background:rgba(124,185,255,.04);
}
.compression-card-running-row .compression-card-label{color:var(--blue);}
.compression-card-error-row{
  border-color:rgba(248,113,113,.28);
  background:rgba(248,113,113,.05);
}
.compression-card-error-row .compression-card-label{color:#fca5a5;}
.compression-card-focus{
  margin-top:3px;
  opacity:.85;
}
.compression-card-focus .compression-card-focus-label{
  color:var(--muted);
  font-family:'SF Mono',ui-monospace,monospace;
}
.compression-card-error-body{
  color:#fecaca;
}
.compression-reference-row{
  margin-top:0;
}
.compression-reference-card{
  margin-left:var(--msg-rail);
  max-width:var(--msg-max);
  border-radius:8px;
  overflow:hidden;
  background:rgba(124,185,255,.04);
  border:1px solid rgba(124,185,255,.18);
  transition:border-color .15s, background .15s;
}
.compression-reference-card:hover{border-color:rgba(124,185,255,.28);}
.compression-reference-header{
  display:flex;
  align-items:center;
  gap:8px;
  padding:5px 10px;
  cursor:pointer;
  user-select:none;
}
.compression-reference-icon{
  font-size:13px;
  flex-shrink:0;
  opacity:.82;
  color:var(--blue);
}
.compression-reference-label,
.compression-reference-kind{
  font-size:11px;
  font-weight:700;
  font-family:'SF Mono',ui-monospace,monospace;
  letter-spacing:.03em;
  flex-shrink:0;
  white-space:nowrap;
}
.compression-reference-label{color:var(--blue);}
.compression-reference-kind{color:var(--gold);}
.compression-reference-preview{
  font-size:11px;
  color:var(--muted);
  opacity:.72;
  flex:1;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.compression-reference-toggle{
  font-size:10px;
  color:var(--muted);
  opacity:.55;
  flex-shrink:0;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  transform-origin:center;
  transition:transform .18s ease;
}
.compression-reference-card.open .compression-reference-toggle{
  transform:rotate(90deg);
}
.compression-reference-copy{
  flex-shrink:0;
  opacity:.65;
}
.compression-reference-body{
  display:block;
  max-height:0;
  opacity:0;
  overflow:hidden;
  padding:0 12px;
  transition:max-height .22s ease, opacity .18s ease, padding .22s ease, border-top-color .22s ease;
  border-top:1px solid transparent;
}
.compression-reference-card.open .compression-reference-body{
  max-height:none;
  overflow:visible;
  opacity:1;
  padding:8px 12px 10px;
  border-top-color:rgba(124,185,255,.1);
}
.compression-reference-body pre{
  margin:0;
  font-family:'SF Mono',ui-monospace,monospace;
  font-size:11px;
  line-height:1.55;
  white-space:pre-wrap;
  word-break:break-word;
  color:var(--muted);
}

.compression-complete-card{
  background:rgba(78,201,132,.05);
  border:1px solid rgba(78,201,132,.18);
  border-radius:8px;
  padding:0;
  margin-left:var(--msg-rail);
  max-width:var(--msg-max);
  transition:border-color .15s, background .15s;
}
.compression-complete-card:hover{
  border-color:rgba(78,201,132,.3);
  background:rgba(78,201,132,.07);
}
.compression-complete-header{
  display:flex;
  align-items:center;
  gap:8px;
  padding:5px 10px;
  cursor:pointer;
  user-select:none;
  color:#4ec984;
  font-size:12px;
  font-weight:600;
  opacity:.88;
}
.compression-complete-header:hover{opacity:1;}
.compression-complete-icon{opacity:.78;flex-shrink:0;}
.compression-complete-label{
  font-size:11px;
  font-weight:700;
  font-family:'SF Mono',ui-monospace,monospace;
  letter-spacing:.03em;
  flex-shrink:0;
}
.compression-complete-title{
  flex:1;
  min-width:0;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  color:var(--text);
  font-family:'SF Mono',ui-monospace,monospace;
  font-size:11px;
}
.compression-complete-toggle{
  margin-left:auto;
  font-size:10px;
  color:var(--muted);
  opacity:.55;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  transform-origin:center;
  transition:transform .18s ease;
}
.compression-complete-card.open .compression-complete-toggle{
  transform:rotate(90deg);
}
.compression-complete-body{
  max-height:0;
  opacity:0;
  overflow:hidden;
  padding:0 12px;
  border-top:1px solid transparent;
  transition:max-height .22s ease, opacity .18s ease, padding .22s ease, border-top-color .22s ease;
  color:var(--muted);
  font-size:11px;
  line-height:1.55;
}
.compression-complete-card.open .compression-complete-body{
  max-height:220px;
  opacity:1;
  padding:8px 12px;
  border-top-color:rgba(78,201,132,.12);
}

/* ── Scrollbar polish ── */
::-webkit-scrollbar{width:5px;height:5px;}
::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{background:rgba(255,255,255,.12);border-radius:3px;}
::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.22);}
* { scrollbar-width: thin; scrollbar-color: rgba(255,255,255,.12) transparent; }

/* ── Settings view (rail cog → sidebar menu + main pane) ── */
/* --border-subtle: used inside cards for softer dividers than the
   outer --border; resolves cleanly in both light+dark via color-mix. */
:root{--border-subtle:color-mix(in srgb, var(--border) 60%, transparent);}
:root.dark{--border-subtle:color-mix(in srgb, var(--border) 60%, transparent);}
/* ── Generalized main-view switching ──
   <main class="main"> holds multiple sibling #main* containers (one per view).
   Exactly one is visible at a time; chat is the default when no showing-*
   class is set. Adding a new view needs: a #main<Name> sibling with
   class="main-view", inclusion in the hidden-by-default list, and a
   main.main.showing-<name> > #main<Name> { display:flex } rule. */
.main-view{flex:1;min-height:0;min-width:0;display:flex;flex-direction:column;background:var(--bg);}
main.main > #mainChat,
main.main > #mainSettings,
main.main > #mainSkills,
main.main > #mainMemory,
main.main > #mainTasks,
main.main > #mainTodos,
main.main > #mainWorkspaces,
main.main > #mainProfiles,
main.main > #mainInsights,
main.main > #mainContext{display:none;}
/* 2026-05-22: 默认 landing 翻转 — workspaces 是 fallback,chat 用 showing-chat 显式触发。
   原:无 class 时 mainChat 显示。
   现:无 class 时 mainWorkspaces 显示;切到 chat 加 showing-chat。 */
main.main:not(.showing-chat):not(.showing-settings):not(.showing-skills):not(.showing-memory):not(.showing-tasks):not(.showing-todos):not(.showing-profiles):not(.showing-insights):not(.showing-context) > #mainWorkspaces{display:flex;}
main.main.showing-chat > #mainChat{display:flex;}
main.main.showing-settings > #mainSettings{display:flex;overflow-y:auto;}
main.main.showing-skills > #mainSkills{display:flex;}
main.main.showing-memory > #mainMemory{display:flex;}
main.main.showing-tasks > #mainTasks{display:flex;}
main.main.showing-todos > #mainTodos{display:flex;}
main.main.showing-workspaces > #mainWorkspaces{display:flex;}
main.main.showing-profiles > #mainProfiles{display:flex;}
main.main.showing-insights > #mainInsights{display:flex;}
main.main.showing-context > #mainContext{display:flex;}
#mainSettings{overflow-y:auto;}

/* Sidebar menu (lives in the left sidebar under the cog panel) */
.panel-view#panelSettings{gap:0;padding:0;}
.panel-head{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:41px;padding:8px 12px;border-bottom:1px solid var(--border);font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;flex-shrink:0;}
.panel-head-actions{display:flex;align-items:center;gap:4px;text-transform:none;letter-spacing:normal;}
.panel-head-btn{width:24px;height:24px;padding:0;display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;border-radius:6px;color:var(--muted);cursor:pointer;transition:background .15s,color .15s;flex-shrink:0;}
.panel-head-btn:hover{background:var(--accent-bg);color:var(--accent-text);}
.panel-head-btn svg{width:14px;height:14px;display:block;}
.panel-head-sub{padding:6px 12px 8px;font-size:11px;color:var(--muted);flex-shrink:0;}
.side-menu{display:flex;flex-direction:column;gap:2px;padding:8px;overflow-y:auto;}
.side-menu-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;border:none;background:transparent;color:var(--text);cursor:pointer;text-align:left;font-size:13px;font-weight:500;transition:background .15s,color .15s;width:100%;}
.side-menu-item:hover{background:var(--surface);}
.side-menu-item.active{background:var(--accent-bg);color:var(--accent-text);}
.side-menu-item.active svg{color:var(--accent-text);}
.side-menu-item svg{flex-shrink:0;width:16px;height:16px;opacity:.9;}

/* Main canvas: centered, comfortable max-width */
.settings-main{padding:24px;max-width:768px;width:100%;margin:0 auto;min-width:0;}
.settings-pane{display:none;}
.settings-pane.active{display:block;}

/* Page-style section header (title + subtitle + optional badge). */
.settings-section-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:20px;padding-bottom:14px;border-bottom:1px solid var(--border);}
.settings-section-title{font-size:18px;font-weight:600;letter-spacing:-.01em;color:var(--text);line-height:1.3;margin-bottom:4px;}
.settings-section-meta{font-size:13px;color:var(--muted);line-height:1.55;}
.settings-version-badge{display:inline-flex;align-items:center;padding:3px 8px;border-radius:999px;background:var(--surface);color:var(--muted);font-size:11px;font-weight:600;font-family:'SF Mono',ui-monospace,SFMono-Regular,Menlo,monospace;flex-shrink:0;align-self:flex-start;letter-spacing:.02em;}
#checkUpdatesBlock{display:inline-flex;align-items:center;gap:6px;font-size:12px;flex-shrink:0;align-self:flex-start;}
#checkUpdatesBlock .btn-tiny{padding:4px 10px;border-radius:8px;border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:11px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:5px;transition:border-color .15s,color .15s;}
#checkUpdatesBlock .btn-tiny:hover{border-color:var(--accent);color:var(--accent);}
#checkUpdatesBlock .btn-tiny:disabled{opacity:.5;cursor:default;}
#checkUpdatesBlock .btn-tiny .spinner-xs{width:12px;height:12px;border:2px solid var(--border);border-top-color:var(--text);border-radius:50%;animation:spin .6s linear infinite;display:none;}
#checkUpdatesStatus{font-size:11px;font-weight:500;white-space:nowrap;}

/* Each logical form row is a card surface. Stack with comfortable gap. */
#mainSettings .settings-field{margin-bottom:12px;padding:16px;border:1px solid var(--ui-card-border);border-radius:var(--ui-card-radius);background:var(--ui-card-bg);}
#mainSettings .settings-field:last-of-type{margin-bottom:16px;}
#mainSettings .settings-field > label{display:block;font-size:12px;font-weight:500;letter-spacing:.01em;color:var(--muted);margin-bottom:6px;}
/* Checkbox rows use inline flex labels — don't turn them into stacked caps */
#mainSettings .settings-field > label[style*="display:flex"]{color:var(--text);font-size:13px;font-weight:500;margin-bottom:0;}
#mainSettings .settings-field > div[style*="color:var(--muted)"],
#mainSettings .settings-field > div[style*="color: var(--muted)"]{font-size:12px;color:var(--muted);line-height:1.5;}

/* Selects & text/password inputs — uniform. Uses !important to win
   over legacy inline styles that were written for the modal era. */
#mainSettings select,
#mainSettings input[type="text"],
#mainSettings input[type="password"]{
  background:var(--bg)!important;
  color:var(--text)!important;
  border:1px solid var(--border)!important;
  border-radius:8px!important;
  padding:8px 12px!important;
  font-size:13px!important;
  width:100%;
  transition:border-color .15s,box-shadow .15s;
}
#mainSettings select:focus,
#mainSettings input[type="text"]:focus,
#mainSettings input[type="password"]:focus{border-color:var(--accent)!important;box-shadow:0 0 0 3px var(--accent-bg);outline:none;}
#mainSettings input:disabled,
#mainSettings select:disabled{opacity:.6;cursor:not-allowed;}

/* Quick-action grid in Conversation pane — outlined card buttons. */
.hermes-action-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:18px;}
.settings-action-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 14px;border-radius:var(--ui-control-radius);border:1px solid var(--ui-card-border);background:var(--ui-card-bg);color:var(--text);font-size:13px;font-weight:500;cursor:pointer;transition:background .15s,border-color .15s,color .15s;}
.settings-action-btn:hover{background:var(--accent-bg);border-color:var(--accent-bg-strong);color:var(--accent-text);}
.settings-action-btn.danger{color:var(--error,#e05);border-color:color-mix(in srgb,var(--error,#e05) 30%,transparent);}
.settings-action-btn.danger:hover{background:color-mix(in srgb,var(--error,#e05) 8%,transparent);border-color:var(--error,#e05);color:var(--error,#e05);}
.settings-action-btn:disabled,.settings-action-btn.disabled{opacity:.45;cursor:not-allowed;}
.settings-action-btn:disabled:hover,.settings-action-btn.disabled:hover{background:var(--ui-card-bg);border-color:var(--ui-card-border);color:var(--text);}

/* Primary save buttons (Appearance / Preferences "Save Settings"). */
#mainSettings .settings-btn,
#mainSettings .sm-btn[onclick^="saveSettings"]{background:var(--accent);color:#fff;border:1px solid var(--accent);border-radius:8px;padding:9px 16px;cursor:pointer;font-weight:600;font-size:13px;transition:background .15s,border-color .15s,opacity .15s;}
#mainSettings .settings-btn:hover,
#mainSettings .sm-btn[onclick^="saveSettings"]:hover{background:var(--accent-hover);border-color:var(--accent-hover);}

/* Appearance autosave status line (in-place feedback while changing theme/skin/font size). */
#mainSettings .settings-autosave-status{
  margin-top:10px;
  min-height:18px;
  display:flex;
  align-items:center;
  gap:6px;
  font-size:12px;
  color:var(--muted);
}
#mainSettings .settings-autosave-status.is-saving{color:var(--muted);}
#mainSettings .settings-autosave-status.is-saved{color:var(--success);}
#mainSettings .settings-autosave-status.is-failed{color:var(--error);}
#mainSettings .settings-autosave-status button{
  border:none;
  background:var(--accent);
  color:#fff;
  font-size:11px;
  font-weight:600;
  border-radius:6px;
  padding:4px 10px;
  cursor:pointer;
  margin-left:4px;
}
#mainSettings .settings-autosave-status button:hover{
  background:var(--accent-hover);
}

/* Secondary sm-btn fallback (Sign out / Disable auth) — neutral outline. */
#mainSettings .sm-btn{border-radius:8px;padding:9px 16px;font-weight:600;font-size:13px;background:var(--surface);border:1px solid var(--border);color:var(--text);cursor:pointer;transition:background .15s,border-color .15s;}
#mainSettings .sm-btn:hover{background:var(--accent-bg);border-color:var(--accent-bg-strong);}
#mainSettings .sm-btn.danger{color:var(--error,#d13b2f);border-color:color-mix(in srgb,var(--error,#d13b2f) 30%,var(--border));}
#mainSettings .sm-btn.danger:hover{background:color-mix(in srgb,var(--error,#d13b2f) 8%,transparent);border-color:var(--error,#d13b2f);color:var(--error,#d13b2f);}
/* Neutralise legacy inline accent tints so secondary buttons stay theme-safe */
#mainSettings #btnDisableAuth[style],
#mainSettings #btnSignOut[style]{color:var(--text)!important;border-color:var(--border)!important;}
#mainSettings #btnDisableAuth:hover,
#mainSettings #btnSignOut:hover{color:var(--accent-text)!important;border-color:var(--accent-bg-strong)!important;}

/* Company KB API keys */
.settings-api-keys-notice{margin-bottom:14px;padding:14px 16px;border:1px solid var(--border);border-radius:12px;background:var(--sidebar);color:var(--muted);font-size:13px;line-height:1.55;}
.settings-api-keys-notice p{margin:0;}
.settings-api-key-actions{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:end;margin-bottom:14px;}
.settings-api-key-label{display:flex;flex-direction:column;gap:6px;font-size:12px;font-weight:600;color:var(--muted);}
.settings-api-key-list{margin-top:6px;}
.settings-api-key-table{border:1px solid var(--border);border-radius:12px;background:var(--sidebar);overflow:hidden;}
.settings-api-key-row{display:grid;grid-template-columns:minmax(110px,1.1fr) minmax(120px,1.2fr) minmax(96px,.9fr) minmax(96px,.9fr) minmax(82px,.7fr) auto;gap:12px;align-items:center;padding:14px 16px;border-top:1px solid var(--border-subtle);font-size:13px;color:var(--text);}
.settings-api-key-row:first-child{border-top:none;}
.settings-api-key-row-head{background:var(--surface);color:var(--muted);font-size:12px;font-weight:700;}
.settings-api-key-row code,.settings-api-key-secret-row code,.settings-api-key-usage code{font-family:'SF Mono',ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;}
.settings-api-key-name{font-weight:650;}
.settings-api-key-status{display:inline-flex;align-items:center;justify-content:center;min-width:58px;border-radius:999px;padding:3px 8px;font-size:11px;font-weight:700;}
.settings-api-key-status.is-active{background:color-mix(in srgb,var(--success,#15803d) 12%,transparent);color:var(--success,#15803d);}
.settings-api-key-status.is-revoked{background:color-mix(in srgb,var(--muted) 14%,transparent);color:var(--muted);}
.settings-api-key-row-actions{display:flex;justify-content:flex-end;}
.settings-api-key-empty{border:1px solid var(--border);border-radius:12px;background:var(--sidebar);padding:22px;text-align:center;color:var(--muted);font-size:13px;}
.settings-api-key-empty.is-error{color:var(--error,#d13b2f);}
.settings-api-key-created{margin-bottom:14px;padding:16px;border:1px solid color-mix(in srgb,var(--accent) 38%,var(--border));border-radius:12px;background:color-mix(in srgb,var(--accent) 8%,var(--sidebar));}
.settings-api-key-created-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:12px;}
.settings-api-key-created-title{font-size:14px;font-weight:750;color:var(--text);margin-bottom:3px;}
.settings-api-key-created-note{font-size:12px;color:var(--muted);line-height:1.5;}
.settings-api-key-secret-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center;}
.settings-api-key-secret-row code{display:block;min-width:0;overflow:auto;white-space:nowrap;border:1px solid var(--border);border-radius:10px;background:var(--bg);padding:10px 12px;color:var(--text);}
.settings-api-key-usage{margin-top:14px;border:1px solid var(--border);border-radius:12px;background:var(--sidebar);padding:14px 16px;}
.settings-api-key-usage summary{cursor:pointer;font-size:13px;font-weight:700;color:var(--text);}
.settings-api-key-usage p{margin:10px 0;color:var(--muted);font-size:13px;line-height:1.55;}
.settings-api-key-usage pre{margin:10px 0 0;overflow:auto;border:1px solid var(--border);border-radius:10px;background:var(--bg);padding:12px;white-space:pre;}
@media(max-width:760px){
  .settings-api-key-actions{grid-template-columns:1fr;}
  .settings-api-key-row{grid-template-columns:1fr;gap:6px;}
  .settings-api-key-row-head{display:none;}
  .settings-api-key-row-actions{justify-content:flex-start;}
  .settings-api-key-secret-row{grid-template-columns:1fr;}
}

/* MCP Server Management */
.mcp-server-row{display:flex;align-items:center;gap:8px;padding:6px 8px;border:1px solid var(--border);border-radius:6px;margin-bottom:4px;position:relative;font-size:12px;}
.mcp-server-row:hover{background:var(--code-bg);}
.mcp-server-name{font-weight:600;color:var(--text);}
.mcp-server-detail{flex:1;color:var(--muted);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mcp-transport-badge{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:2px 6px;border-radius:4px;flex-shrink:0;}
.mcp-stdio{background:rgba(99,102,241,.12);color:#818cf8;}
.mcp-unknown{background:rgba(161,161,170,.12);color:#a1a1aa;}
.mcp-http{background:rgba(34,197,94,.12);color:#4ade80;}
.mcp-delete-btn{background:none;border:none;color:var(--muted);font-size:16px;cursor:pointer;padding:2px 4px;border-radius:4px;flex-shrink:0;}
.mcp-delete-btn:hover{color:#ef4444;background:rgba(239,68,68,.1);}

/* Picker grids (theme / skin / font-size): make the card chrome use
   tokens so all skins flip correctly. */
#mainSettings .theme-pick-btn,
#mainSettings .skin-pick-btn,
#mainSettings .font-size-pick-btn{background:var(--bg)!important;border-color:var(--border)!important;}
#mainSettings .theme-pick-btn:hover,
#mainSettings .skin-pick-btn:hover,
#mainSettings .font-size-pick-btn:hover{border-color:var(--accent-bg-strong)!important;background:var(--surface)!important;}
/* Active/selected state for picker cards — must use !important to beat the base border-color:var(--border)!important rule above */
#mainSettings .theme-pick-btn.active,
#mainSettings .skin-pick-btn.active,
#mainSettings .font-size-pick-btn.active{border-color:var(--accent)!important;box-shadow:0 0 0 1px var(--accent-bg-strong)!important;background:var(--surface)!important;}

/* Responsive: tighten canvas on small screens. */
@media (max-width: 768px){
  .settings-main{padding:16px 12px;}
  .settings-section-title{font-size:16px;}
  .hermes-action-grid{grid-template-columns:1fr;}
  #mainSettings .settings-field{padding:14px;}
}

/* ── Mobile section tabs (≤640px only) ──
   Desktop has the side-menu in the sidebar; mobile loses it because the
   drawer closes when the user picks Settings from the account popover.
   Surface a horizontally-scrollable tab strip in-pane so the 5 sections
   stay reachable without re-opening the drawer. */
.settings-mobile-tabs{display:none;}
@media (max-width: 640px){
  .settings-mobile-tabs{
    display:flex;
    gap:6px;
    overflow-x:auto;
    -webkit-overflow-scrolling:touch;
    margin:-4px -12px 14px;
    padding:4px 12px 8px;
    border-bottom:1px solid var(--border);
    scrollbar-width:none;
  }
  .settings-mobile-tabs::-webkit-scrollbar{display:none;}
  .settings-mobile-tab{
    flex:0 0 auto;
    padding:8px 14px;
    border-radius:999px;
    border:1px solid var(--border);
    background:var(--sidebar);
    color:var(--muted);
    font-size:13px;
    font-weight:500;
    line-height:1.2;
    cursor:pointer;
    white-space:nowrap;
    transition:background .15s,color .15s,border-color .15s;
  }
  .settings-mobile-tab.active{
    background:var(--accent-bg);
    color:var(--accent-text);
    border-color:var(--accent-bg-strong);
  }
  .settings-mobile-tab[hidden]{display:none;}
}

/* ── Provider cards (Settings → Providers) ──
   Matches hermes-desktop LLM Providers panel. Card uses --sidebar (surface-1),
   hover rows use --surface (surface-2). Body divider uses a subtle tint. */
#providersList{gap:12px;}
.provider-card{
  border:1px solid var(--border);
  border-radius:12px;
  background:var(--sidebar);
  overflow:hidden;
  margin-bottom:12px;
  transition:border-color .15s ease;
}
.provider-card:last-child{margin-bottom:0;}
.provider-card-header{
  display:flex;align-items:center;gap:12px;
  width:100%;
  padding:12px 16px;
  background:transparent;border:0;
  color:var(--text);
  text-align:left;cursor:pointer;
  font:inherit;
  transition:background .15s ease;
}
.provider-card-header:hover{background:var(--surface);}
.provider-card-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.provider-card-name{font-size:13px;font-weight:500;color:var(--text);line-height:1.2;}
.provider-card-meta{font-size:11px;color:var(--muted);line-height:1.2;opacity:.82;}
.provider-card-badge{
  flex-shrink:0;
  font-size:10.5px;font-weight:500;
  padding:2px 8px;border-radius:999px;
  /* Literal tailwind green-500/10 + green-600 to match desktop reference */
  background:rgba(34,197,94,.12);
  color:#16a34a;
  letter-spacing:.01em;
}
:root.dark .provider-card-badge{background:rgba(34,197,94,.16);color:#4ade80;}
.provider-card-chevron{
  flex-shrink:0;color:var(--muted);
  transition:transform .2s ease;
}
.provider-card.open .provider-card-chevron{transform:rotate(180deg);}
.provider-card-body{
  display:none;
  padding:12px 16px 16px;
  border-top:1px solid color-mix(in srgb, var(--border) 55%, transparent);
}
.provider-card.open .provider-card-body{display:block;}
.provider-card-hint{font-size:12px;color:var(--muted);line-height:1.4;}
.provider-card-field{display:flex;flex-direction:column;gap:6px;}
.provider-card-label{
  font-size:11px;font-weight:500;color:var(--muted);
  letter-spacing:.02em;
}
.provider-card-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.provider-card-input{
  flex:1;min-width:160px;
  padding:8px 10px;
  background:var(--surface);
  color:var(--text);
  border:1px solid var(--border);
  border-radius:8px;
  font-size:12px;
  font-family:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace;
  outline:none;
  transition:border-color .15s ease, box-shadow .15s ease;
}
.provider-card-input:focus{
  border-color:var(--accent);
  box-shadow:0 0 0 3px var(--focus-ring);
}
.provider-card-btn{
  padding:7px 12px;
  font-size:12px;font-weight:500;
  border-radius:8px;
  border:1px solid transparent;
  background:var(--surface);
  color:var(--text);
  cursor:pointer;white-space:nowrap;
  transition:background .15s ease, color .15s ease, border-color .15s ease;
}
.provider-card-btn:hover{background:var(--hover-bg);}
.provider-card-btn:disabled{opacity:.45;cursor:not-allowed;}
.provider-card-btn-ghost{background:var(--surface);}
.provider-card-btn-primary{
  background:var(--accent);
  border-color:var(--accent);
  color:#fff;
}
:root.dark .provider-card-btn-primary{color:#0A0908;}
.provider-card-btn-primary:hover:not(:disabled){
  background:var(--accent-hover);
  border-color:var(--accent-hover);
}
.provider-card-btn-danger{
  color:var(--error);
  background:transparent;
}
.provider-card-btn-danger:hover{
  background:color-mix(in srgb, var(--error) 10%, transparent);
}

/* ── Provider model tags ── */
.provider-card-models{
  margin-bottom:10px;
  display:flex;flex-direction:column;gap:6px;
}
.provider-card-model-tags{
  display:flex;flex-wrap:wrap;gap:4px;
}
.provider-card-model-tag{
  display:inline-block;
  padding:2px 8px;
  font-size:10.5px;font-family:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace;
  color:var(--muted);
  background:var(--surface);
  border:1px solid var(--border);
  border-radius:5px;
  line-height:1.5;
  user-select:all;
}

/* ── Session pin indicator (inline, only when pinned) ── */
.session-pin-indicator{
  flex-shrink:0;
  width:10px;
  height:10px;
  color:var(--accent);
  line-height:1;
  display:inline-flex;
  align-items:center;
  justify-content:center;
}
.session-pin-indicator svg{width:10px;height:10px;}

/* ── Cron alert badge ── */
.cron-badge{position:absolute;top:2px;right:2px;background:#e53e3e;color:#fff;font-size:9px;font-weight:700;min-width:14px;height:14px;line-height:14px;text-align:center;border-radius:7px;padding:0 3px;}
.cron-new-dot{width:7px;height:7px;border-radius:50%;background:var(--success,#22c55e);flex-shrink:0;animation:cron-dot-pulse 2s ease-in-out infinite;}
@keyframes cron-dot-pulse{0%,100%{opacity:1;}50%{opacity:.4;}}
.has-new-run{border-color:var(--success,#22c55e)!important;box-shadow:0 0 0 1px var(--success,#22c55e);}

/* ── Background error banner ── */
/* ── Archived sessions ── */
.session-item.archived{opacity:.5;}
.session-item.archived .session-title{font-style:italic;}

/* ── Subagent session tree (#494) ── */
.session-tree-children{margin-left:16px;border-left:1px solid var(--border,rgba(255,255,255,.1));padding-left:4px;}
.session-tree-child.session-item{font-size:12px;opacity:.85;border-radius:6px;padding:6px 8px;}
.session-tree-child.session-item:hover{opacity:1;}
.session-tree-child.session-item.active{opacity:1;}
.session-tree-child.session-item .session-meta{font-size:10px;}
.session-tree-caret{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;font-size:10px;cursor:pointer;color:var(--muted);flex-shrink:0;transition:transform .15s;user-select:none;border-radius:3px;margin-right:2px;}
.session-tree-caret:hover{color:var(--text);background:rgba(255,255,255,.06);}
.session-tree-caret.collapsed{transform:none;}
.session-tree-badge{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;font-size:9px;font-weight:700;padding:0 4px;border-radius:8px;background:rgba(99,179,237,.2);color:#63b3ed;margin-left:auto;flex-shrink:0;user-select:none;}

/* ── Session tags ── */
.session-tag{display:inline-block;font-size:9px;font-weight:600;padding:1px 5px;margin-left:4px;border-radius:3px;background:rgba(99,179,237,.2);color:#63b3ed;cursor:pointer;vertical-align:middle;}
.session-tag:hover{background:rgba(99,179,237,.35);}

/* ── File rename input ── */
.file-rename-input{background:rgba(255,255,255,.08);border:1px solid var(--accent);border-radius:4px;color:var(--text);font-size:12px;padding:1px 4px;width:100%;outline:none;min-width:0;}

/* ── Message timestamps ── */
.msg-time{font-size:10px;color:var(--muted);opacity:.6;margin-left:6px;}
.msg-role:hover .msg-time{opacity:1;}

/* ── Mermaid diagrams ── */
.mermaid-block{background:var(--code-bg);border-radius:8px;padding:16px;margin:8px 0;overflow-x:auto;}
.mermaid-rendered{background:transparent;padding:8px 0;}
.mermaid-rendered svg{max-width:100%;height:auto;}

/* ── Session projects ── */
.project-bar{display:flex;gap:4px;padding:4px 10px 8px;flex-wrap:wrap;align-items:center;flex-shrink:0;}
.project-chip{font-size:10px;font-weight:600;padding:3px 8px;border-radius:12px;cursor:pointer;border:1px solid var(--border2);background:var(--input-bg);color:var(--muted);transition:all .15s;white-space:nowrap;display:inline-flex;align-items:center;gap:4px;}
.project-chip:hover{background:rgba(255,255,255,.08);color:var(--text);}
.project-chip.active{background:var(--accent-bg);color:var(--accent-text);border-color:var(--accent-bg);}
.project-chip .color-dot{width:6px;height:6px;border-radius:50%;display:inline-block;flex-shrink:0;}
.project-create-btn{font-size:10px;padding:3px 6px;border-radius:12px;cursor:pointer;border:1px dashed var(--border2);background:none;color:var(--muted);opacity:.6;transition:all .15s;}
.project-create-btn:hover{opacity:1;border-color:var(--blue);color:var(--blue);}
.project-create-input{font-size:10px;padding:3px 8px;border-radius:12px;border:1px solid var(--accent-bg);background:var(--surface);color:var(--text);outline:none;min-width:40px;max-width:180px;width:auto;font-family:inherit;box-shadow:0 0 0 2px var(--accent-bg);}
.project-picker{position:absolute;right:0;top:100%;background:var(--sidebar);border:1px solid var(--border2);border-radius:8px;padding:4px;z-index:30;min-width:160px;max-width:220px;width:max-content;box-shadow:0 4px 16px rgba(0,0,0,.3);}
.project-picker-item{padding:5px 10px;font-size:11px;border-radius:6px;cursor:pointer;color:var(--muted);transition:all .1s;display:flex;align-items:center;gap:6px;}
.project-picker-item:hover{background:rgba(255,255,255,.08);color:var(--text);}
.project-picker-item.active{color:var(--blue);}
.project-picker-create{color:var(--blue);opacity:.7;border-top:1px solid var(--border2);margin-top:2px;padding-top:6px;}
.project-picker-create:hover{opacity:1;background:var(--accent-bg);}
/* Lives as a flex sibling in .session-title-row (between title and time);
   the row's gap:6px handles spacing, no margin/vertical-align needed. */
.session-project-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0;display:inline-block;}

/* ── Code copy button ── */
.code-copy-btn{background:var(--hover-bg);border:1px solid var(--border2);border-radius:4px;color:var(--muted);font-size:11px;cursor:pointer;padding:2px 6px;transition:all .15s;line-height:1.3;}
.code-copy-btn:hover{background:rgba(255,255,255,.12);color:var(--text);}

/* ── Tool card expand/collapse toggle ── */
.tool-cards-toggle{margin:4px 0 2px 40px;display:flex;gap:8px;}
.tool-cards-toggle button{background:none;border:none;color:var(--blue);font-size:10px;cursor:pointer;opacity:.6;padding:0;}
.tool-cards-toggle button:hover{opacity:1;text-decoration:underline;}

/* ── Thinking/reasoning card: structural sub-selectors. ──
   The canonical visual rules (background, border, padding, max-height,
   etc.) live in the consolidated block further down (around line 1320).
   Only sub-element selectors that the consolidated block doesn't cover
   (label, toggle, rotate animation) are kept here. ── */
.thinking-card-label{font-weight:600;letter-spacing:.02em;}
.thinking-card-toggle{margin-left:auto;font-size:10px;display:inline-flex;align-items:center;justify-content:center;transform-origin:center;transition:transform .18s ease;will-change:transform;}
.thinking-card.open .thinking-card-toggle{transform:rotate(90deg);}

.bg-error-banner{background:rgba(229,62,62,.15);border:1px solid rgba(229,62,62,.3);color:#fca5a5;padding:8px 16px;font-size:12px;display:flex;align-items:center;justify-content:space-between;gap:12px;border-radius:0;}

/* ── CLI / Agent session items in sidebar ── */
.session-item.cli-session {
  padding-right: 40px; /* make room for the session actions trigger */
}
.session-item.cli-session::after {
  content: attr(data-source);
  font-size: 9px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .04em;
  color: var(--accent-text);
  opacity: .5;
  margin-left: auto;
  flex-shrink: 0;
  pointer-events: none; /* don't block clicks on session-actions beneath */
}
.session-item.cli-session:hover::after {
  display: none; /* hide badge on hover so the session menu trigger stays clear */
}
.session-item.cli-session.menu-open::after {
  display: none;
}
/* Source-specific colors for gateway sessions */
.session-item.cli-session[data-source="telegram"] { border-left-color: rgba(0, 136, 204, 0.55); }
.session-item.cli-session[data-source="telegram"]::after { color: rgba(0, 136, 204, 0.55); }
.session-item.cli-session[data-source="discord"] { border-left-color: #5865F2; }
.session-item.cli-session[data-source="discord"]::after { color: #5865F2; }
.session-item.cli-session[data-source="slack"] { border-left-color: #4A154B; }
.session-item.cli-session[data-source="slack"]::after { color: #4A154B; }

/* ═══════════════════════════════════════════════════════════════════
   Messages redesign — additive overrides for the transcript area.
   Fixes the issues catalogued in docs/ui-ux/index.html:
     • single indent rail (one var, one column)
     • quieter thinking card (was louder than the answer)
     • user-message bubble so user vs. assistant reads at a glance
     • persistent affordances (timestamps, actions, usage always visible)
     • unified widths (body + tool cards share one max)
     • tamed inline-code colour (no longer outshouts links)
     • streaming cursor at end of live assistant body
     • [data-error="1"] marker for error bubbles
     • .msg-date-sep for day-change separators
     • tighter type scale (11/12/13/14/16 — no more 10/10.5/12.5)
   ═══════════════════════════════════════════════════════════════════ */
:root {
  --msg-rail: 0;
  --msg-max: 780px;
  --user-bubble-bg: var(--accent);
  --user-bubble-border: var(--accent-hover);
  --user-bubble-text: #fff;
  --user-bubble-placeholder: rgba(255,255,255,.7);
  --user-selection-bg: rgba(0,0,0,.22);
  --user-selection-text: #fff;
}
/* Dark mode: keep user bubbles dark; skin remains a tint via border/fill. */
:root.dark {
  --user-bubble-bg: var(--accent-bg-strong);
  --user-bubble-border: var(--accent-bg-strong);
  --user-bubble-text: var(--text);
  --user-bubble-placeholder: var(--muted);
  --user-selection-bg: rgba(255,255,255,.18);
  --user-selection-text: var(--text);
}

/* Inline code: stop shouting orange; inherit strong text colour instead */
.msg-body code { color: var(--strong); background: var(--code-inline-bg); font-size: 12.5px; }

/* ── Unified indent rail — every child of a turn lines up on --msg-rail ── */
.msg-row { padding: 12px 0; }
.msg-body { padding-left: var(--msg-rail); padding-top: 8px; max-width: var(--msg-max); }
.msg-body code,
.msg-body pre,
.msg-body table { font-family: 'SF Mono', ui-monospace, monospace; }
.msg-body:empty { display: none; }
.assistant-turn { width: 100%; }
.assistant-turn-blocks { display: flex; flex-direction: column; }
.assistant-turn-blocks > .tool-call-group { order: 0; }
.assistant-turn-blocks > .assistant-segment,
.assistant-turn-blocks > .agent-event-row,
.assistant-turn-blocks > .tool-card-row,
.assistant-turn-blocks > .thinking-card-row { order: 1; }
.assistant-segment-anchor { display: none; }

/* ── Classic conversation layout: user right, half-width; assistant left ── */
.msg-row[data-role="user"] { align-self: flex-end; max-width: 60%; }
@media (max-width: 900px) { .msg-row[data-role="user"] { max-width: 78%; } }
@media (max-width: 600px) { .msg-row[data-role="user"] { max-width: 90%; } }
/* Hide the entire "empty tool-anchor" assistant row (content='' with
   tool_calls). renderMessages keeps it in the DOM so tool cards can anchor
   to it, but visually it adds a ghost "Hermes" header above the tool cards.
   With the row hidden the transition from live → settled on 'done' is
   seamless. */
.msg-row[data-role="assistant"]:has(.msg-body:empty) { padding: 0; margin: 0; }
.msg-row[data-role="assistant"]:has(.msg-body:empty) .msg-role,
.msg-row[data-role="assistant"]:has(.msg-body:empty) .msg-files { display: none; }
.msg-files { padding-left: var(--msg-rail); }
.msg-usage { padding-left: var(--msg-rail); opacity: 1; margin-top: 6px; font-size: 11px; }
.tool-card,.agent-event-card { margin-left: var(--msg-rail); max-width: var(--msg-max); }
.thinking-card { margin-left: var(--msg-rail); max-width: var(--msg-max); }
.agent-activity-group .tool-card,
.agent-activity-group .thinking-card { margin-left: 0; max-width: none; }
.agent-activity-thinking { margin: 2px 0; }
.tool-cards-toggle { margin-left: var(--msg-rail); }
.msg-row[data-editing="1"] { width: 100%; }
.msg-row[data-editing="1"] .msg-edit-area,
.msg-row[data-editing="1"] .msg-edit-bar { margin-left: var(--msg-rail); }

/* Quieter, always-visible role header (smaller avatar, always-visible timestamp) */
.msg-role { font-size: 11px; font-weight: 500; margin-bottom: 6px; opacity: .8; letter-spacing: 0; }
.msg-role:hover { opacity: 1; }
.role-icon { width: 20px; height: 20px; font-size: 9px; }
.msg-time { opacity: .65; font-size: 10px; }
.msg-role:hover .msg-time { opacity: 1; }

/* Persistent action toolbar: subtle at rest, full on hover */
.msg-actions { opacity: .25; }
.msg-row:hover .msg-actions { opacity: 1; }
.assistant-turn:hover .msg-actions { opacity: 1; }

/* ── User message: right-aligned bubble; no avatar/label — position identifies sender ── */
.msg-row[data-role="user"] .msg-body {
  background: var(--user-bubble-bg);
  border: 1px solid var(--user-bubble-border);
  border-radius: 14px;
  padding: 10px 14px;
  margin-left: 0;
  padding-left: 14px;
  max-width: none;
  color: var(--user-bubble-text);
  overflow-wrap: anywhere;
}
.msg-row[data-role="user"] .msg-body::selection,
.msg-row[data-role="user"] .msg-body *::selection {
  background: var(--user-selection-bg);
  color: var(--user-selection-text);
}
.msg-row[data-role="user"] .msg-body::-moz-selection,
.msg-row[data-role="user"] .msg-body *::-moz-selection {
  background: var(--user-selection-bg);
  color: var(--user-selection-text);
}
.msg-row[data-role="user"] .msg-body code { color: var(--user-bubble-text); background: rgba(0,0,0,.1); }
.msg-row[data-role="user"] .msg-body a { color: var(--user-bubble-text); text-decoration: underline; }
.msg-row[data-role="user"] .msg-files { padding-left: 0; margin-left: 0; justify-content: flex-end; }
.msg-row[data-role="user"][data-editing="1"] .msg-edit-area { background: var(--user-bubble-bg); border-color: var(--user-bubble-border); color: var(--user-bubble-text); box-shadow: 0 0 0 3px var(--focus-ring); }
.msg-row[data-role="user"][data-editing="1"] .msg-edit-area::placeholder { color: var(--user-bubble-placeholder); }

/* Turn boundary: right alignment already separates user turns — keep only vertical spacing */
.msg-row + .msg-row[data-role="user"] {
  border-top: none;
  margin-top: 10px;
  padding-top: 12px;
}

/* ── Message footer: actions (and user timestamp) sit below the bubble ── */
.msg-foot {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 6px;
  margin-top: 4px;
  font-size: 11px;
  color: var(--muted);
}
.msg-foot .msg-actions { opacity: 1; margin-left: 0; }
.msg-foot .msg-time { font-size: 10.5px; opacity: .75; }
.msg-foot-with-usage {
  justify-content: flex-start;
  gap: 8px;
}
.msg-usage-inline {
  font-size: 11px;
  color: var(--muted);
  opacity: .7;
  flex: 0 0 auto;
}
.msg-foot-with-usage .msg-time,
.msg-foot-with-usage .msg-actions {
  opacity: 0;
  transition: opacity .15s;
}
.msg-foot-with-usage .msg-time {
  margin-left: 4px;
}
.msg-foot-with-usage .msg-actions {
  margin-left: 2px;
}

/* User footer: visible only on row hover (bubble identifies sender without needing persistent chrome) */
.msg-row[data-role="user"] .msg-foot {
  opacity: 0;
  transition: opacity .15s;
  padding-right: 2px;
}
.msg-row[data-role="user"]:hover .msg-foot,
.msg-row[data-role="user"]:focus-within .msg-foot { opacity: 1; }

/* Assistant footer: left-aligned under the body rail, subtle at rest */
.msg-row[data-role="assistant"] .msg-foot,
.assistant-turn .msg-foot {
  justify-content: flex-start;
  padding-left: var(--msg-rail);
  max-width: var(--msg-max);
  opacity: 0;
  transition: opacity .15s;
}
.msg-row[data-role="assistant"]:hover .msg-foot,
.assistant-turn:hover .msg-foot,
.assistant-turn:focus-within .msg-foot { opacity: 1; }
.assistant-turn .msg-foot-with-usage,
.msg-row[data-role="assistant"] .msg-foot-with-usage {
  opacity: 1;
}
.assistant-turn:hover .msg-foot-with-usage .msg-time,
.assistant-turn:hover .msg-foot-with-usage .msg-actions,
.assistant-turn:focus-within .msg-foot-with-usage .msg-time,
.assistant-turn:focus-within .msg-foot-with-usage .msg-actions,
.msg-row[data-role="assistant"]:hover .msg-foot-with-usage .msg-time,
.msg-row[data-role="assistant"]:hover .msg-foot-with-usage .msg-actions {
  opacity: 1;
}

/* Hide footer while editing to keep the edit bar the only footer-level affordance */
.msg-row[data-editing="1"] .msg-foot { display: none; }

/* Empty tool-anchor rows: hide footer alongside role/files so the row stays invisible */
.msg-row[data-role="assistant"]:has(.msg-body:empty) .msg-foot { display: none; }

/* ── Thinking card: quieter than before (no background panel) but still
   clearly a gold-accented affordance so users know it's collapsible. ── */
.thinking-card {
  background: var(--accent-bg);
  border: 1px solid var(--accent-bg-strong);
  border-radius: 8px;
  padding: 0;
  margin: 3px 0 3px var(--msg-rail);
  transition: border-color .15s, background .15s;
}
.thinking-card:hover {
  border-color: var(--accent-hover);
  background: var(--accent-bg);
}
.thinking-card-header { display:flex; align-items:center; gap:8px; padding: 5px 10px; color: var(--accent-text); font-size: 12px; font-weight: 600; opacity: .85; }
.thinking-card-header:hover { opacity: 1; }
.thinking-card-icon { opacity: .7; }
.thinking-card-body {
  max-height: 0;
  opacity: 0;
  overflow: hidden;
  padding: 0 12px;
  border-top: 1px solid transparent;
  transition: max-height .22s ease, opacity .18s ease, padding .22s ease, border-top-color .22s ease;
}
.thinking-card.open .thinking-card-body { max-height: 260px; overflow-y: auto; opacity: 1; padding: 8px 12px; border-top-color: var(--accent-bg-strong); }
.thinking-card-body pre { font-family: 'SF Mono', ui-monospace, monospace; font-size: 11px; line-height: 1.6; color: var(--muted); white-space: pre-wrap; word-break: break-word; margin: 0; }

/* ── Tool cards: tighter chrome to match quieter thinking card ── */
.tool-card { border-radius: 8px; margin-top: 3px; margin-bottom: 3px; }
.tool-card-header { padding: 5px 10px; }
.tool-card-name { font-size: 11px; }
.tool-card-preview { font-size: 11px; }

/* ── Streaming cursor at the end of the live assistant body ── */
@keyframes hermes-cursor-blink { 0%,49% { opacity: 1; } 50%,100% { opacity: 0; } }
#toolRunningRow { margin-top: 10px; }
[data-live-assistant="1"]:last-child .msg-body > :last-child::after,
[data-live-assistant="1"]:last-child .msg-body:not(:has(> *))::after {
  content: '';
  display: inline-block;
  width: 7px;
  height: 1em;
  background: var(--blue);
  border-radius: 1px;
  margin-left: 3px;
  vertical-align: -0.16em;
  animation: hermes-cursor-blink 1.05s steps(2, start) infinite;
}

/* ── Error state: distinct red-accent card, not italic emphasis ── */
.msg-row[data-error="1"] .msg-body,
.assistant-segment[data-error="1"] .msg-body {
  background: rgba(239,83,80,.06);
  border: 1px solid rgba(239,83,80,.2);
  border-left: 2px solid var(--accent);
  border-radius: 8px;
  padding: 10px 14px;
  margin-left: var(--msg-rail);
  max-width: calc(var(--msg-max) - 40px);
  color: var(--text);
}
.msg-row[data-error="1"] .msg-body em,
.msg-row[data-error="1"] .msg-body p em,
.assistant-segment[data-error="1"] .msg-body em,
.assistant-segment[data-error="1"] .msg-body p em { font-style: normal; color: inherit; }
.msg-row[data-error="1"] .msg-role,
.assistant-segment[data-error="1"] .msg-role { color: var(--accent); opacity: 1; }
.msg-row[data-error="1"] .role-icon,
.assistant-segment[data-error="1"] .role-icon { background: rgba(239,83,80,.12); color: var(--error); border-color: var(--error); }

/* ── Day-change separator ── */
.load-older-indicator{cursor:pointer;color:var(--accent-text,var(--blue));font-size:13px;padding:10px 0;text-align:center;user-select:none;}
.load-older-indicator:hover{opacity:.75;}
.msg-date-sep {
  display: flex; align-items: center; gap: 10px;
  margin: 22px 0 10px; padding: 0 var(--msg-rail);
  color: var(--muted); font-size: 10px; font-weight: 600;
  text-transform: uppercase; letter-spacing: .12em; opacity: .55;
}
.msg-date-sep::before, .msg-date-sep::after { content: ''; flex: 1; height: 1px; background: var(--border); }

/* ── Widths: collapse messages-inner to match content column ── */
.messages-inner { max-width: var(--msg-max); }
@media (min-width: 1400px) { .messages-inner { max-width: calc(var(--msg-max) + 40px); } }
@media (min-width: 1800px) { .messages-inner { max-width: calc(var(--msg-max) + 80px); } }

@media (max-width: 700px) {
  .msg-role { margin-bottom: 4px; }
  .msg-row[data-role="user"] .msg-body { padding: 8px 12px; }
  .msg-row[data-error="1"] .msg-body { padding: 8px 12px; }
}

/* ── Shared main-view tokens (used by #mainSkills, #mainTasks, #mainWorkspaces, #mainProfiles) ── */
.main-view-header{
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  min-height:41px;padding:8px 32px;border-bottom:1px solid var(--border);
  flex-shrink:0;background:var(--bg);position:relative;z-index:10;
}
.main-view-title{font-size:18px;font-weight:600;letter-spacing:-.01em;color:var(--text);line-height:1.3;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.main-view-subtitle{font-size:12px;color:var(--muted);line-height:1.35;margin-top:2px;}
.main-view-actions{display:flex;align-items:center;gap:4px;flex-shrink:0;}
.main-view-body{flex:1;min-height:0;overflow-y:auto;padding:24px 32px;}
.main-view-content{max-width:var(--ui-page-max);margin:0 auto;width:100%;}
.pmts-ui-page{
  flex:1;min-height:0;overflow-y:auto;box-sizing:border-box;
  width:100%;max-width:var(--ui-page-max);margin:0 auto;padding:24px 32px;
}
.pmts-ui-card{
  min-width:0;background:var(--ui-card-bg);border:1px solid var(--ui-card-border);
  border-radius:var(--ui-card-radius);
}
.pmts-ui-card--interactive{transition:border-color .15s,box-shadow .15s,background .15s;cursor:pointer;}
.pmts-ui-card--interactive:hover{border-color:var(--border-muted);box-shadow:var(--ui-card-shadow-hover);}
.pmts-ui-card--interactive:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
.pmts-ui-button{
  min-height:30px;display:inline-flex;align-items:center;justify-content:center;gap:6px;
  padding:6px 10px;border:1px solid var(--border);border-radius:var(--ui-control-radius);
  background:transparent;color:var(--text);font:600 12px/1.2 var(--font-ui);cursor:pointer;
  min-width:0;white-space:normal;text-align:center;
  transition:background .15s,border-color .15s,color .15s,opacity .15s;
}
.pmts-ui-button:hover{background:var(--hover-bg);border-color:var(--border-muted);}
.pmts-ui-button--primary{background:var(--text);border-color:var(--text);color:var(--bg);}
.pmts-ui-button--primary:hover{background:var(--strong);border-color:var(--strong);}
.pmts-ui-button:disabled{opacity:.45;cursor:not-allowed;background:var(--input-bg);color:var(--muted);}
.pmts-ui-button:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
.pmts-ui-icon-button{
  width:32px;height:32px;min-width:32px;padding:0;display:inline-flex;align-items:center;justify-content:center;
  border:1px solid transparent;border-radius:var(--ui-control-radius);background:transparent;color:var(--muted);
  cursor:pointer;transition:background .15s,border-color .15s,color .15s;
}
.pmts-ui-icon-button:hover{background:var(--hover-bg);border-color:var(--border);color:var(--text);}
.pmts-ui-icon-button:disabled{opacity:.45;cursor:not-allowed;}
.pmts-ui-icon-button:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
.pmts-ui-icon-button svg{width:16px;height:16px;display:block;}
.pmts-ui-card-actions{display:flex;gap:8px;margin-top:4px;}
.pmts-ui-card-actions>.pmts-ui-button{flex:1;}
.pmts-ui-segmented{
  display:inline-flex;gap:2px;padding:3px;border:1px solid var(--border);
  border-radius:var(--ui-control-radius);background:var(--input-bg);
}
.pmts-ui-segmented__button{
  min-height:30px;padding:6px 14px;border:0;border-radius:6px;background:transparent;
  color:var(--muted);font:600 12px/1.2 var(--font-ui);cursor:pointer;
}
.pmts-ui-segmented__button.is-active{background:var(--surface);color:var(--accent-text);box-shadow:0 1px 2px rgba(0,0,0,.06);}
.pmts-ui-state{
  min-height:160px;display:flex;align-items:center;justify-content:center;
  padding:32px 20px;color:var(--muted);font-size:12.5px;line-height:1.6;text-align:center;
}
.pmts-ui-state--compact{min-height:88px;padding:20px 16px;}
@media (pointer:coarse){
  .pmts-ui-button,.pmts-ui-icon-button,.pmts-ui-segmented__button{min-height:44px;}
  .pmts-ui-icon-button{width:44px;min-width:44px;}
}
@media (max-width:480px){
  .pmts-ui-card-actions{flex-direction:column;}
  .pmts-ui-card-actions>.pmts-ui-button{width:100%;}
}
@media (max-width:768px){
  .pmts-ui-page{padding:16px 12px;}
  .main-view-header{padding:8px 12px;}
  .main-view-subtitle{white-space:normal;}
}
.main-view-empty{
  flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:12px;padding:40px 24px;color:var(--muted);text-align:center;
}
.main-view-empty-icon{color:var(--muted);opacity:.35;}
.main-view-empty-title{font-size:18px;font-weight:600;color:var(--text);margin-top:4px;}
.main-view-empty-sub{font-size:13px;color:var(--muted);line-height:1.55;max-width:420px;}

/* Hide header title/actions entirely when empty state is active */
main.main > .main-view:not([id="mainChat"]):not([id="mainSettings"]) .main-view-header:has(.main-view-title:empty){display:none;}

/* Skill-file breadcrumb (shown when clicking a linked file) */
.skill-file-breadcrumb{display:flex;align-items:center;gap:12px;margin-bottom:16px;padding-bottom:10px;border-bottom:1px solid var(--border-subtle,var(--border));}
.skill-file-back{font-size:12px;color:var(--accent-text);text-decoration:none;font-weight:500;}
.skill-file-back:hover{text-decoration:underline;}
.skill-file-path{font-size:12px;color:var(--muted);font-family:'SF Mono',ui-monospace,monospace;}
.skill-file-code{background:var(--sidebar);border:1px solid var(--border);border-radius:8px;padding:12px 14px;font-size:12px;overflow:auto;max-width:960px;margin:0 auto;}

/* Run Inspector */
.run-inspector{max-width:1180px;}
.run-inspector-layout{display:grid;grid-template-columns:minmax(220px,300px) minmax(0,1fr);gap:16px;min-height:520px;}
.run-list,.run-detail{border:1px solid var(--border);border-radius:10px;background:color-mix(in srgb,var(--surface) 82%,transparent);min-width:0;}
.run-list{display:flex;flex-direction:column;gap:4px;padding:8px;align-self:start;max-height:calc(100vh - 180px);overflow-y:auto;}
.run-list-item{appearance:none;border:1px solid transparent;background:transparent;color:var(--text);border-radius:8px;padding:10px 11px;text-align:left;cursor:pointer;display:flex;flex-direction:column;gap:7px;min-width:0;}
.run-list-item:hover{background:var(--hover-bg);border-color:var(--border);}
.run-list-item.active{background:var(--accent-bg);border-color:var(--accent-bg-strong,var(--accent));}
.run-list-title{font-size:13px;font-weight:600;line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.run-list-meta,.run-detail-badges,.run-event-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap;color:var(--muted);font-size:11px;line-height:1.3;}
.run-status{display:inline-flex;align-items:center;border-radius:999px;padding:2px 7px;background:rgba(255,255,255,.05);border:1px solid var(--border);color:var(--muted);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;}
.run-status.ok{color:#7ee0aa;background:rgba(80,200,130,.12);border-color:rgba(80,200,130,.25);}
.run-status.bad{color:#ff9999;background:rgba(220,70,70,.12);border-color:rgba(220,70,70,.25);}
.run-status.live{color:var(--accent);background:var(--accent-bg);border-color:var(--accent-bg-strong,var(--accent));}
.run-detail{display:flex;flex-direction:column;overflow:hidden;}
.run-detail-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:14px 16px;border-bottom:1px solid var(--border);}
.run-detail-title{font-size:15px;font-weight:700;color:var(--text);line-height:1.35;}
.run-detail-id{font-size:11px;color:var(--muted);font-family:'SF Mono',ui-monospace,monospace;margin-top:4px;word-break:break-all;}
.run-detail-badges{justify-content:flex-end;text-align:right;}
.run-timeline{display:flex;flex-direction:column;gap:14px;padding:14px 16px;overflow-y:auto;min-height:0;}
.run-section{border:1px solid var(--border-subtle,var(--border));border-radius:10px;background:rgba(255,255,255,.018);padding:12px;min-width:0;}
.run-section-title{font-size:11px;color:var(--muted);font-weight:800;text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px;}
.run-overview-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;}
.run-metric{border:1px solid var(--border-subtle,var(--border));border-radius:8px;background:rgba(255,255,255,.02);padding:9px 10px;min-width:0;}
.run-metric span{display:block;color:var(--muted);font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;margin-bottom:5px;}
.run-metric strong{display:block;color:var(--text);font-size:12px;line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.run-phase-rail{display:grid;grid-template-columns:repeat(7,minmax(112px,1fr));gap:8px;overflow-x:auto;padding-bottom:2px;}
.run-phase-card{border:1px solid var(--border-subtle,var(--border));border-radius:9px;background:rgba(255,255,255,.02);padding:9px;min-height:112px;min-width:112px;display:flex;flex-direction:column;gap:7px;}
.run-phase-card.observed{border-color:rgba(96,165,250,.28);background:rgba(96,165,250,.045);}
.run-phase-card.ok{border-color:rgba(80,200,130,.32);background:rgba(80,200,130,.06);}
.run-phase-card.bad{border-color:rgba(220,70,70,.36);background:rgba(220,70,70,.07);}
.run-phase-card.live{border-color:var(--accent-bg-strong,var(--accent));background:var(--accent-bg);}
.run-phase-top{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.run-phase-name{font-size:11px;font-weight:800;color:var(--text);text-transform:uppercase;letter-spacing:.05em;}
.run-phase-status{border-radius:999px;padding:2px 6px;font-size:9px;font-weight:800;text-transform:uppercase;background:rgba(255,255,255,.06);color:var(--muted);}
.run-phase-status.ok{color:#7ee0aa;background:rgba(80,200,130,.14);}
.run-phase-status.bad{color:#ff9999;background:rgba(220,70,70,.14);}
.run-phase-status.live{color:var(--accent);background:rgba(255,210,0,.12);}
.run-phase-label{font-size:12px;font-weight:700;color:var(--text);line-height:1.35;}
.run-phase-label.muted{color:var(--muted);font-weight:600;}
.run-phase-summary{font-size:11px;color:var(--muted);line-height:1.35;overflow-wrap:anywhere;}
.run-compact-list{display:flex;flex-direction:column;gap:7px;}
.run-compact-row{display:grid;grid-template-columns:minmax(0,1.4fr) auto minmax(0,2fr);gap:8px;align-items:center;border:1px solid var(--border-subtle,var(--border));border-radius:8px;background:rgba(255,255,255,.018);padding:8px 10px;font-size:12px;min-width:0;}
.run-compact-row strong{color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.run-compact-row span{color:var(--accent);font-weight:700;}
.run-compact-row em{color:var(--muted);font-style:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.run-timeline-list{display:flex;flex-direction:column;gap:10px;}
.run-timeline-event{display:grid;grid-template-columns:34px minmax(0,1fr);gap:10px;position:relative;}
.run-timeline-event::before{content:"";position:absolute;left:16px;top:31px;bottom:-10px;width:1px;background:var(--border);}
.run-timeline-event:last-child::before{display:none;}
.run-event-seq{width:32px;height:32px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;background:var(--accent-bg);border:1px solid var(--accent-bg-strong,var(--accent));color:var(--accent);font-size:11px;font-weight:700;position:relative;z-index:1;font-family:'SF Mono',ui-monospace,monospace;}
.run-event-v1 .run-event-seq{background:rgba(96,165,250,.16);border-color:rgba(96,165,250,.42);color:#93c5fd;}
.run-event-v1 .run-event-main{border-color:rgba(96,165,250,.26);background:rgba(96,165,250,.045);}
.run-event-main{border:1px solid var(--border-subtle,var(--border));border-radius:9px;padding:10px 12px;background:rgba(255,255,255,.02);min-width:0;}
.run-event-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;}
.run-event-label{font-size:13px;font-weight:700;color:var(--text);line-height:1.35;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.run-event-type{font-size:11px;color:var(--muted);font-family:'SF Mono',ui-monospace,monospace;white-space:nowrap;}
.run-event-summary{font-size:12px;color:var(--muted);line-height:1.45;margin-top:5px;overflow-wrap:anywhere;}
.run-event-meta{margin-top:7px;}
.run-event-meta span{border:1px solid var(--border-subtle,var(--border));border-radius:999px;padding:2px 6px;background:rgba(255,255,255,.025);}
.run-inspector-empty,.run-inspector-error{border:1px dashed var(--border);border-radius:10px;padding:22px;text-align:center;color:var(--muted);font-size:13px;line-height:1.5;background:rgba(255,255,255,.02);}
.run-inspector-empty strong{display:block;color:var(--text);margin-bottom:4px;font-size:14px;}
.run-inspector-empty-compact{padding:14px;}
.run-inspector-error{border-style:solid;color:var(--error);background:rgba(255,80,80,.06);}
@media (max-width: 900px){
  .run-inspector-layout{grid-template-columns:1fr;}
  .run-list{max-height:260px;}
  .run-detail-head{flex-direction:column;}
  .run-detail-badges{justify-content:flex-start;text-align:left;}
  .run-overview-grid{grid-template-columns:repeat(2,minmax(0,1fr));}
  .run-phase-rail{grid-template-columns:repeat(7,132px);}
}

@media(max-width:700px){
  .main-view-header{padding:8px 16px;}
  .main-view-body{padding:16px;}
}

/* ── Shared detail-card styling (cron / workspace / profile detail pages) ── */
.detail-card{border:1px solid var(--border);border-radius:12px;background:var(--surface);padding:16px 18px;margin-bottom:16px;}
.detail-card-title{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:10px;}
.detail-row{display:flex;gap:12px;padding:6px 0;border-bottom:1px solid var(--border);font-size:13px;align-items:flex-start;}
.detail-row:last-child{border-bottom:none;}
.detail-row-label{flex:0 0 140px;color:var(--muted);font-size:12px;}
.detail-row-value{flex:1;min-width:0;color:var(--text);word-break:break-word;}
.detail-row-value code{background:var(--sidebar);border:1px solid var(--border);border-radius:4px;padding:1px 6px;font-size:12px;font-family:'SF Mono',ui-monospace,monospace;}
.detail-badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600;border:1px solid var(--border);color:var(--muted);}
.detail-badge.active{background:var(--accent-bg);color:var(--accent-text);border-color:var(--accent-bg-strong,var(--accent-bg));}
.detail-badge.ok{background:rgba(100,200,100,.12);color:rgba(100,200,100,.95);border-color:rgba(100,200,100,.3);}
.detail-badge.warn{background:rgba(220,140,60,.12);color:rgba(220,140,60,.95);border-color:rgba(220,140,60,.3);}
.detail-badge.err{background:rgba(220,80,80,.12);color:rgba(220,80,80,.95);border-color:rgba(220,80,80,.3);}
.detail-badge.running{background:rgba(59,130,246,.12);color:rgba(96,165,250,.95);border-color:rgba(96,165,250,.3);}
.detail-badge.running::before{content:'';display:inline-block;width:10px;height:10px;border:2px solid rgba(96,165,250,.4);border-top-color:rgba(96,165,250,.95);border-radius:50%;margin-right:6px;vertical-align:middle;animation:cron-spinner .6s linear infinite;}
@keyframes cron-spinner{to{transform:rotate(360deg);}}

/* Merchant ERP workspace dashboard */
.merchant-ws-main{max-width:1280px;}

/* === A-wave (2026-05-22) UX compaction === */
/* Compact header bar replaces the hero block. Sub-row carries status pill
   + dry-run hint inline. Info button opens a popover with the dev meta
   (workspace ID, contract version, dev stats) that used to be inline. */
.merchant-ws-main--compact{display:flex;flex-direction:column;gap:12px;}
.merchant-ws-bar{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:14px 16px 12px;border-bottom:1px solid var(--border);background:var(--surface);border-radius:8px 8px 0 0;}
.merchant-ws-bar-titles{display:flex;flex-direction:column;gap:4px;min-width:0;}
.merchant-ws-bar-title{margin:0;font-size:20px;line-height:1.2;font-weight:760;color:var(--text);letter-spacing:0;}
.merchant-ws-bar-sub{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.merchant-ws-bar-status{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;color:var(--accent-text);background:var(--accent-bg);border:1px solid color-mix(in srgb,var(--accent) 35%,transparent);border-radius:999px;padding:2px 10px;letter-spacing:.01em;}
.merchant-ws-bar-status::before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.7;}
.merchant-ws-bar-status[data-status=""],.merchant-ws-bar-status[data-status="planned"],.merchant-ws-bar-status[data-status="planning"]{color:var(--muted);background:var(--input-bg);border-color:var(--border);}
.merchant-ws-bar-dryrun{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--muted);}
.merchant-ws-bar-actions{display:flex;align-items:center;gap:6px;flex-shrink:0;}
.merchant-ws-bar-info{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border:1px solid var(--border);border-radius:8px;background:var(--input-bg);color:var(--muted);cursor:pointer;transition:color .12s ease,background .12s ease,border-color .12s ease;}
.merchant-ws-bar-info:hover{color:var(--text);background:var(--surface);border-color:color-mix(in srgb,var(--accent) 35%,var(--border));}
.merchant-ws-bar-info[aria-expanded="true"]{color:var(--accent-text);background:var(--accent-bg);border-color:color-mix(in srgb,var(--accent) 45%,transparent);}

/* Info popover (dev metadata folded here) */
.merchant-ws-info-popover{border:1px solid var(--border);border-radius:8px;background:var(--input-bg);padding:12px 14px;display:flex;flex-direction:column;gap:8px;font-size:12px;}
.merchant-ws-info-popover[hidden]{display:none;}
.merchant-ws-info-row{display:grid;grid-template-columns:64px minmax(0,1fr);gap:10px;align-items:start;}
.merchant-ws-info-label{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;padding-top:2px;}
.merchant-ws-info-value{font-family:"SF Mono",ui-monospace,monospace;font-size:11.5px;color:var(--text);word-break:break-all;background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:3px 7px;}
.merchant-ws-info-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:0;padding:0;}
.merchant-ws-info-stats dt{font-size:11px;color:var(--muted);font-weight:500;}
.merchant-ws-info-stats dd{margin:2px 0 0;font-size:14px;font-weight:760;color:var(--text);font-variant-numeric:tabular-nums;}

/* Quick-action chip bar (replaces the 3x2 card grid) */
.merchant-ws-quick-bar{display:flex;align-items:center;gap:8px;padding:0;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:thin;}
.merchant-ws-quick-bar::-webkit-scrollbar{height:4px;}
.merchant-ws-quick-bar::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px;}
.merchant-ws-quick-chip{display:inline-flex;align-items:center;gap:6px;flex-shrink:0;border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--text);padding:7px 14px;font-size:13px;font-weight:500;cursor:pointer;transition:all .15s ease;white-space:nowrap;}
.merchant-ws-quick-chip:hover{border-color:color-mix(in srgb,var(--accent) 45%,var(--border));background:var(--accent-bg);color:var(--accent-text);transform:translateY(-1px);}
.merchant-ws-quick-chip:active{transform:translateY(0);}
.merchant-ws-quick-chip:disabled{opacity:.55;cursor:wait;transform:none;}
.merchant-ws-quick-chip-icon{display:inline-flex;align-items:center;color:currentColor;}
.merchant-ws-quick-chip-label{font-weight:500;}

/* Dashboard hero — module-panel takes full width, no side grid */
.merchant-ws-dashboard-hero{min-height:400px;}
.merchant-ws-dashboard--tabbed{display:flex;flex-direction:column;gap:0;}
.merchant-ws-module-tabs{display:flex;align-items:center;gap:2px;overflow-x:auto;-webkit-overflow-scrolling:touch;border-bottom:1px solid var(--border);padding:0 4px;background:var(--surface);border-radius:8px 8px 0 0;scrollbar-width:thin;}
.merchant-ws-module-tabs::-webkit-scrollbar{height:4px;}
.merchant-ws-module-tab{display:inline-flex;align-items:center;gap:6px;flex-shrink:0;border:none;background:none;color:var(--muted);padding:11px 14px 9px;font-size:13px;font-weight:500;cursor:pointer;border-bottom:2px solid transparent;transition:color .12s ease,border-color .12s ease;margin-bottom:-1px;}
.merchant-ws-module-tab:hover{color:var(--text);}
.merchant-ws-module-tab.active{color:var(--accent-text);border-bottom-color:var(--accent);font-weight:600;}
.merchant-ws-module-tab-icon{display:inline-flex;align-items:center;}
.merchant-ws-module-tab-label{white-space:nowrap;}
.merchant-ws-module-panel--hero{border-radius:0 0 8px 8px;border-top:none;padding:18px 20px 22px;}

/* 2026-05-22 B-wave: when the PMTSoul ERP ERP view has been rendered into
   #mainWorkspaces (detected by the [data-pmtsoul-ws] wrapper),
   collapse all the surrounding chrome so the 4-column layout owns the
   full viewport width:
     - the 300px middle sidebar (workspace list / "为你的会话添加…")
     - the outer main-view-header (title "Workspace unavailable" + edit/
       delete buttons; PMTSoul ERP carries its own brand bar)
     - any padding around #mainWorkspaces
   This applies regardless of how many workspaces the account has,
   because the PMTSoul ERP view is meant to be the primary surface for
   any PMTSoul-tenant account (user-tier or merchant-tier).
   Multi-workspace switching can still be done from a future popover. */
/* 2026-05-22 fix: 这 5 条 hide-chrome rules 全部限定到
   body[data-active-panel="workspaces"] — 之前没限定,polsia detail 一渲染
   sidebar 就 hide,无论当前 active panel 是哪个 → 用户切 chat 时左侧
   session 历史 sidebar 也消失。现在只在工作区 panel 时 hide chrome,
   其他 panel(chat/skills/...)sidebar 完整保留。 */
body[data-active-panel="workspaces"] .layout:has(#mainWorkspaces .main-view-body [data-pmtsoul-ws]) .sidebar{
  display:none;
}
body[data-active-panel="workspaces"] .layout:has(#mainWorkspaces .main-view-body [data-pmtsoul-ws]) .rightpanel{
  display:none !important;
  width:0 !important;
  opacity:0;
  transform:translateX(14px);
  border-left-color:transparent;
  pointer-events:none;
}
body[data-active-panel="workspaces"] #mainWorkspaces:has(.main-view-body [data-pmtsoul-ws]) .main-view-header{
  display:none;
}
body[data-active-panel="workspaces"] #mainWorkspaces:has(.main-view-body [data-pmtsoul-ws]){
  padding:0;
}
body[data-active-panel="workspaces"] #mainWorkspaces:has(.main-view-body [data-pmtsoul-ws]) #workspaceDetailEmpty{
  display:none !important;
}
body:not([data-active-panel="workspaces"]) #wsEmptyState,
body:not([data-active-panel="workspaces"]) #workspaceDetailEmpty{
  display:none !important;
}
body[data-active-panel="workspaces"] #mainWorkspaces:has(.main-view-body [data-pmtsoul-ws]) .main-view-body{
  padding:0;
  height:100%;
  overflow:hidden;  /* 关键:阻止 main-view-body 自己滚动,
                       由内部 .pmtsoul-ws-workspace / .pmtsoul-ws-chat-history 各自滚 */
  min-height:0;
}

/* Mobile: chip bar stays scrollable horizontally, info popover stacks */
@media (max-width: 640px){
  .merchant-ws-bar{flex-direction:column;align-items:stretch;gap:8px;}
  .merchant-ws-bar-actions{align-self:flex-end;}
  .merchant-ws-info-stats{grid-template-columns:repeat(2,minmax(0,1fr));}
  .merchant-ws-info-row{grid-template-columns:1fr;gap:4px;}

  /* 2026-05-25 fix: workspace 模式下手机端汉堡菜单失效根因 —
   * line 3460 把 sidebar 在 workspace 模式整个 display:none,
   * 手机点汉堡时 .mobile-open 没用。手机 override 让它仍可 slide-in。 */
  body[data-active-panel="workspaces"] .layout:has(#mainWorkspaces .main-view-body [data-pmtsoul-ws]) .sidebar{
    display:flex !important;  /* override line 3460 */
    /* 复用 line 1437 的 fixed slide-in 定位,无需再写 */
  }
  /* workspace 模式下手机端 main-view-header 仍隐藏(沉浸式),
   * 但 app-titlebar 必须可见(汉堡在 titlebar 里) */
  body[data-active-panel="workspaces"] .app-titlebar{display:flex !important;}

  /* brand-bar 一行内容太多(PMTSoul / 工作台 / AI 员工集 · 9 人 / 充值额度 / 信息)
   * 手机改成 wrap 多行 + 字号紧凑 */
  .pmtsoul-ws-brand-bar{flex-wrap:wrap;row-gap:6px;column-gap:8px;}
  .pmtsoul-ws-brand-bar > *{font-size:12px;}
  /* "充值额度" / "信息" 按钮缩短 padding */
  .pmtsoul-ws-brand-bar button{padding:4px 8px !important;font-size:11px !important;}
}

/* ============================================================
 * B-wave (2026-05-22) — PMTSoul ERP style merchant ERP.
 * Scoped under [data-pmtsoul-ws] so the mockup style
 * never leaks into other workspace kinds or other panels.
 * Mock data only; data wiring is a follow-up wave.
 * ============================================================ */
/* pmtsoul-ws-erp 是顶部 flex 容器:
   - height:100%(从父继承高度,锁死,不允许内容撑高)
   - overflow:hidden(强制内部 panel 单独滚)
   - min-height:0 让 flex children 可以收缩到比内容小 */
.pmtsoul-ws-erp{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden;background:#FAFAF7;color:#111;font:14px/1.5 ui-sans-serif,system-ui,-apple-system,"PingFang SC","Noto Sans CJK SC",sans-serif;}
[data-pmtsoul-ws] *,[data-pmtsoul-ws] *::before,[data-pmtsoul-ws] *::after{box-sizing:border-box;}
[data-pmtsoul-ws] button{font:inherit;cursor:pointer;}

/* === PMTSoul ERP v2 (2026-05-22) "一目了然" upgrades ===
 * Status lines + LED indicators + big-stat blocks + decision banner.
 */

/* LED indicators (used in console header + task cards) */
.pmtsoul-ws-led{display:inline-block;width:8px;height:8px;border-radius:50%;flex-shrink:0;}
.pmtsoul-ws-led--live{background:#FFD66B;box-shadow:0 0 6px rgba(255,214,107,0.55);animation:pmtsoul-ws-pulse 1.6s ease-in-out infinite;}
.pmtsoul-ws-led--red{background:#C44310;box-shadow:0 0 4px rgba(196,67,16,0.45);}
.pmtsoul-ws-led--yellow{background:#E76F2F;}
.pmtsoul-ws-led--green{background:#198F4F;}
.pmtsoul-ws-led--grey{background:#999;}
@keyframes pmtsoul-ws-pulse{0%,100%{transform:scale(1);}50%{transform:scale(1.25);opacity:0.85;}}

/* Console — default collapsed 1 line, expandable */
.pmtsoul-ws-console{background:#000;color:#eee;font:12px/1.55 "SF Mono",ui-monospace,"Cascadia Mono","JetBrains Mono",monospace;padding:0;border-bottom:1px solid #000;flex-shrink:0;}
.pmtsoul-ws-console--collapsed{cursor:pointer;}
.pmtsoul-ws-console--collapsed:hover{background:#0a0a0a;}
.pmtsoul-ws-console-summary{display:flex;align-items:center;gap:10px;padding:9px 18px;}
.pmtsoul-ws-console-summary-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#cdcdcd;}
.pmtsoul-ws-console-summary-text strong{color:#FFD66B;font-weight:600;}
.pmtsoul-ws-console-summary-meta{color:#888;margin-left:4px;}
.pmtsoul-ws-console-toggle{min-height:32px;background:transparent;border:1px solid #333;color:#999;padding:3px 10px;font-size:11px;line-height:1;letter-spacing:0.04em;cursor:pointer;flex-shrink:0;}
.pmtsoul-ws-console-toggle:hover{color:#fff;border-color:#666;}
.pmtsoul-ws-console-detail{padding:6px 18px 10px;border-top:1px solid #1a1a1a;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#444 #000;}
/* collapsed:默认显 2 行(超过隐藏,点开看全) */
.pmtsoul-ws-console--collapsed .pmtsoul-ws-console-detail{max-height:52px;}
/* expanded:根据内容,最高 60vh 后滚 */
.pmtsoul-ws-console--expanded .pmtsoul-ws-console-detail{max-height:60vh;}
.pmtsoul-ws-console-detail::-webkit-scrollbar{width:6px;}
.pmtsoul-ws-console-detail::-webkit-scrollbar-thumb{background:#444;border-radius:3px;}
.pmtsoul-ws-console-detail::-webkit-scrollbar-track{background:#000;}
.pmtsoul-ws-console::-webkit-scrollbar{width:6px;}
.pmtsoul-ws-console::-webkit-scrollbar-thumb{background:#444;border-radius:3px;}
.pmtsoul-ws-console::-webkit-scrollbar-track{background:#000;}
.pmtsoul-ws-console-row{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#cdcdcd;}
.pmtsoul-ws-console-row::before{content:"";display:inline-block;width:5px;height:5px;border-top:1px solid currentColor;border-right:1px solid currentColor;transform:rotate(45deg);margin:0 7px 1px 1px;opacity:.55;}
.pmtsoul-ws-console-row--live{color:#FFD66B;}
.pmtsoul-ws-console-row--placeholder{color:#888 !important;font-style:italic;opacity:0.6;}
.pmtsoul-ws-console-row--placeholder::before{content:"· ";opacity:.5;}
.pmtsoul-ws-console-actor{color:#FFD66B;font-weight:500;}
.pmtsoul-ws-console-row--streaming::after{content:"";display:inline-block;width:2px;height:1em;margin-left:2px;vertical-align:-.12em;background:#FFD66B;animation:pmtsoul-ws-blink 0.6s steps(2) infinite;}
/* 2026-07-24 · 终端最新一条事件行镜像进宠物卡流式位(不另开框);观感贴 narration:
   上分隔线 + 小字,actor 名用品牌橙。用户要求完整内容不截断 —— 不设行数钳制;
   流式打字机进行中显示光标(--streaming)。 */
.pmtsoul-ws-mascot-latest{margin-top:9px;padding-top:9px;border-top:1px solid var(--border,#E5E3DC);font-size:12px;line-height:1.55;color:var(--muted,#666);word-wrap:break-word;overflow-wrap:anywhere;}
.pmtsoul-ws-mascot-latest[hidden]{display:none;}
.pmtsoul-ws-mascot-latest-actor{color:#A93817;font-weight:600;}
.pmtsoul-ws-mascot-latest--streaming::after{content:"";display:inline-block;width:2px;height:1em;margin-left:2px;vertical-align:-.12em;background:#A93817;animation:pmtsoul-ws-blink 0.6s steps(2) infinite;}
html.dark .pmtsoul-ws-mascot-latest{border-top-color:#2D2D2D;color:#B8B4AC;}

/* Deliverable chip · 挂在 item 卡底,点开 viewer modal */
.pmtsoul-ws-deliverables{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;}
.pmtsoul-ws-deliverable-chip{display:inline-flex;align-items:center;gap:4px;background:#F0EEE6;border:1px solid #D8D5CB;color:#444;padding:3px 8px;font-size:11px;line-height:1.4;cursor:pointer;border-radius:2px;font-family:-apple-system,sans-serif;transition:all .15s ease;}
.pmtsoul-ws-deliverable-chip:hover{background:#1A7F4F;color:#fff;border-color:#1A7F4F;}
.pmtsoul-ws-deliverable-chip-icon{font-size:13px;line-height:1;}
.pmtsoul-ws-deliverable-chip-title{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
html.dark .pmtsoul-ws-deliverable-chip{background:#2D2D2D;border-color:#3A3A35;color:#C0BFB8;}
html.dark .pmtsoul-ws-deliverable-chip:hover{background:#22C55E;color:#111;border-color:#22C55E;}

/* Welcome hero · Market Research Report 就绪时 surface 顶部 */
.pmtsoul-ws-welcome-hero{margin-bottom:1px;}
.pmtsoul-ws-welcome-hero-banner{display:flex;align-items:center;gap:14px;background:linear-gradient(135deg,#1A7F4F 0%,#0F6A2F 100%);color:#fff;padding:18px 24px;position:relative;}
.pmtsoul-ws-welcome-hero-emoji{font-size:40px;flex-shrink:0;line-height:1;}
.pmtsoul-ws-welcome-hero-body{flex:1;min-width:0;}
.pmtsoul-ws-welcome-hero-title{font-family:"Times New Roman",serif;font-size:22px;font-weight:500;margin-bottom:6px;letter-spacing:-0.01em;}
.pmtsoul-ws-welcome-hero-sub{font-size:12.5px;opacity:0.92;margin-bottom:6px;}
.pmtsoul-ws-welcome-hero-sub strong{font-weight:600;}
.pmtsoul-ws-welcome-hero-sec{display:inline-block;margin-left:6px;font-size:11px;opacity:0.85;}
.pmtsoul-ws-welcome-hero-desc{font-size:13px;line-height:1.55;opacity:0.94;font-family:"Times New Roman",serif;font-style:italic;}
.pmtsoul-ws-welcome-hero-cta{background:#FFF;color:#1A7F4F;border:0;padding:9px 18px;font-size:13px;font-weight:600;cursor:pointer;letter-spacing:0.04em;flex-shrink:0;transition:background .15s;}
.pmtsoul-ws-welcome-hero-cta:hover{background:#FFD66B;color:#3A2A00;}
.pmtsoul-ws-welcome-hero-close{position:absolute;top:8px;right:10px;background:transparent;border:0;color:rgba(255,255,255,0.6);font-size:22px;line-height:1;cursor:pointer;padding:0 4px;}
.pmtsoul-ws-welcome-hero-close:hover{color:#fff;}

/* Viewer overlay + modal */
.pmtsoul-ws-deliverable-overlay{position:fixed;inset:0;background:var(--ui-dialog-backdrop);display:flex;align-items:center;justify-content:center;z-index:9999;backdrop-filter:blur(4px);padding:24px;}
.pmtsoul-ws-deliverable-modal{background:var(--ui-dialog-bg);width:min(900px,92vw);max-height:90vh;display:flex;flex-direction:column;border:1px solid var(--ui-dialog-border);border-radius:var(--ui-dialog-radius);overflow:hidden;box-shadow:var(--ui-dialog-shadow);}
.pmtsoul-ws-deliverable-head{display:flex;align-items:center;gap:12px;padding:var(--ui-dialog-head-padding);border-bottom:1px solid var(--ui-dialog-border);background:var(--ui-dialog-bg);}
.pmtsoul-ws-deliverable-kind{font-size:11px;font-family:-apple-system,sans-serif;color:#1A7F4F;background:#E6F4EC;border:1px solid #B4DBC2;padding:2px 7px;border-radius:2px;letter-spacing:0.04em;flex-shrink:0;}
.pmtsoul-ws-deliverable-title{font-family:var(--font-ui);font-size:18px;font-weight:600;color:var(--text);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;}
.pmtsoul-ws-deliverable-actor{font-size:11px;color:#FFD66B;background:#3A2A00;padding:3px 8px;border-radius:2px;font-family:-apple-system,sans-serif;flex-shrink:0;}
.pmtsoul-ws-deliverable-close{background:transparent;border:0;border-radius:var(--ui-control-radius);color:var(--muted);font-size:24px;cursor:pointer;line-height:1;min-width:32px;min-height:32px;padding:0;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;}
.pmtsoul-ws-deliverable-close:hover{color:var(--text);background:var(--hover-bg);}
.pmtsoul-ws-deliverable-close:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
@media (pointer:coarse){.pmtsoul-ws-deliverable-close{min-width:44px;min-height:44px;}}
.pmtsoul-ws-deliverable-meta{padding:8px 20px;font-size:11px;color:var(--muted);font-family:ui-monospace,monospace;border-bottom:1px solid var(--border);background:var(--surface-subtle);}
.pmtsoul-ws-deliverable-meta code{background:#F0EEE6;padding:1px 5px;font-size:10.5px;}
.pmtsoul-ws-deliverable-body{padding:22px;overflow:auto;flex:1;}
.pmtsoul-ws-deliverable-img{display:block;max-width:100%;max-height:70vh;margin:0 auto;}
.pmtsoul-ws-deliverable-video{display:block;max-width:100%;max-height:70vh;margin:0 auto;}
.pmtsoul-ws-deliverable-iframe{display:block;width:100%;height:70vh;border:0;}
.pmtsoul-ws-deliverable-text{font-family:ui-monospace,"SF Mono",monospace;font-size:13px;line-height:1.7;color:#111;white-space:pre-wrap;word-break:break-word;margin:0;}
/* 2026-05-26 · markdown HTML 渲染版(doc/draft kind)— Polsia 文档风 */
.pmtsoul-ws-deliverable-html{font-family:'Times New Roman',Georgia,serif;font-size:15px;line-height:1.85;color:#111;}
.pmtsoul-ws-deliverable-html h1,
.pmtsoul-ws-deliverable-html h2,
.pmtsoul-ws-deliverable-html h3,
.pmtsoul-ws-deliverable-html h4{font-family:'Times New Roman',Georgia,serif;font-weight:500;color:#111;margin:1.4em 0 0.6em;line-height:1.3;}
.pmtsoul-ws-deliverable-html h1{font-size:26px;letter-spacing:-0.01em;padding-bottom:8px;border-bottom:1px solid #E5E3DC;margin-top:0;}
.pmtsoul-ws-deliverable-html h2{font-size:20px;letter-spacing:-0.005em;}
.pmtsoul-ws-deliverable-html h3{font-size:17px;}
.pmtsoul-ws-deliverable-html h4{font-size:15px;text-transform:uppercase;letter-spacing:0.06em;color:#444;}
.pmtsoul-ws-deliverable-html p{margin:0 0 1em;}
.pmtsoul-ws-deliverable-html ul,
.pmtsoul-ws-deliverable-html ol{margin:0 0 1em 0;padding-left:24px;}
.pmtsoul-ws-deliverable-html li{margin-bottom:0.4em;}
.pmtsoul-ws-deliverable-html strong{font-weight:600;color:#111;}
.pmtsoul-ws-deliverable-html em{font-style:italic;color:#333;}
.pmtsoul-ws-deliverable-html a{color:#1A7F4F;text-decoration:underline;}
.pmtsoul-ws-deliverable-html a:hover{color:#0F5A38;}
.pmtsoul-ws-deliverable-html code{font-family:ui-monospace,"SF Mono",monospace;font-size:0.88em;padding:1px 6px;background:#F5F4ED;border:1px solid #E5E3DC;border-radius:2px;color:#444;}
.pmtsoul-ws-deliverable-html pre{font-family:ui-monospace,"SF Mono",monospace;font-size:13px;background:#F5F4ED;border:1px solid #E5E3DC;padding:12px 16px;overflow-x:auto;margin:0 0 1em;border-radius:2px;}
.pmtsoul-ws-deliverable-html pre code{background:transparent;border:none;padding:0;font-size:inherit;}
.pmtsoul-ws-deliverable-html blockquote{border-left:3px solid #C8C5BB;padding:4px 0 4px 14px;margin:0 0 1em;color:#555;font-style:italic;}
.pmtsoul-ws-deliverable-html hr{border:none;border-top:1px dashed #C8C5BB;margin:1.5em 0;}
.pmtsoul-ws-deliverable-html table{width:100%;border-collapse:collapse;margin:0 0 1em;font-family:'Times New Roman',serif;font-size:14px;}
.pmtsoul-ws-deliverable-html th,
.pmtsoul-ws-deliverable-html td{padding:8px 12px;border:1px solid #E5E3DC;text-align:left;}
.pmtsoul-ws-deliverable-html th{background:#FAFAF7;font-weight:500;}
.pmtsoul-ws-deliverable-html img{max-width:100%;height:auto;margin:0.5em 0;}
.pmtsoul-ws-deliverable-empty{padding:40px 0;text-align:center;color:#888;font-style:italic;}
/* 2026-07-24 · 办公/二进制文件产物卡(kind=file 无内联正文):类型徽标+文件名+大小+下载 */
.pmtsoul-ws-dlv-filecard{display:flex;align-items:center;gap:14px;margin:28px auto;max-width:520px;padding:18px 20px;border:1px solid var(--border,#E5E3DC);border-radius:10px;background:var(--surface,#FAF9F6);}
.pmtsoul-ws-dlv-fileext{flex:0 0 auto;min-width:52px;text-align:center;padding:10px 8px;border-radius:8px;background:var(--input-bg,#F2EFE8);border:1px solid var(--border,#E5E3DC);font-family:"SF Mono",ui-monospace,monospace;font-size:12px;font-weight:700;color:var(--accent,#A93817);}
.pmtsoul-ws-dlv-filemain{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px;}
.pmtsoul-ws-dlv-filemain b{font-size:13.5px;font-weight:600;overflow-wrap:anywhere;}
.pmtsoul-ws-dlv-filemain span{font-size:11.5px;color:var(--muted,#888);}
.pmtsoul-ws-dlv-dl{flex:0 0 auto;min-height:34px;padding:6px 16px;border:1px solid var(--text,#1F1E1C);border-radius:6px;background:var(--text,#1F1E1C);color:var(--bg,#fff);font-size:12px;font-weight:600;cursor:pointer;font-family:inherit;}
.pmtsoul-ws-dlv-dl:disabled{opacity:.55;cursor:default;}
.pmtsoul-ws-dlv-nofile{flex:0 0 auto;font-size:11.5px;color:var(--muted,#888);}
html.dark .pmtsoul-ws-dlv-filecard{background:#191919;border-color:#2D2D2D;}
html.dark .pmtsoul-ws-dlv-fileext{background:#202020;border-color:#2D2D2D;}
/* 深色 */
html.dark .pmtsoul-ws-deliverable-html{color:#E8E6E0;}
html.dark .pmtsoul-ws-deliverable-html h1{color:#F5F4ED;border-bottom-color:#2D2D2D;}
html.dark .pmtsoul-ws-deliverable-html h2,
html.dark .pmtsoul-ws-deliverable-html h3{color:#F0EEE6;}
html.dark .pmtsoul-ws-deliverable-html h4{color:#BBB;}
html.dark .pmtsoul-ws-deliverable-html strong{color:#F5F4ED;}
html.dark .pmtsoul-ws-deliverable-html em{color:#C8C5BB;}
html.dark .pmtsoul-ws-deliverable-html a{color:#4DD08A;}
html.dark .pmtsoul-ws-deliverable-html code{background:#2D2D2D;border-color:#3D3D3D;color:#C8C5BB;}
html.dark .pmtsoul-ws-deliverable-html pre{background:#1A1A18;border-color:#2D2D2D;}
html.dark .pmtsoul-ws-deliverable-html blockquote{border-left-color:#3D3D3D;color:#999;}
html.dark .pmtsoul-ws-deliverable-html table th{background:#2D2D2A;}
html.dark .pmtsoul-ws-deliverable-html th,
html.dark .pmtsoul-ws-deliverable-html td{border-color:#2D2D2D;}
.pmtsoul-ws-deliverable-table{width:100%;border-collapse:collapse;font-size:12.5px;}
.pmtsoul-ws-deliverable-table th,
.pmtsoul-ws-deliverable-table td{padding:6px 10px;border:1px solid #E5E3DC;text-align:left;}
.pmtsoul-ws-deliverable-table th{background:#FAFAF7;font-weight:500;color:#111;}
html.dark .pmtsoul-ws-deliverable-modal{background:var(--ui-dialog-bg);border-color:var(--ui-dialog-border);}
html.dark .pmtsoul-ws-deliverable-head{background:var(--ui-dialog-bg);border-bottom-color:var(--ui-dialog-border);}
html.dark .pmtsoul-ws-deliverable-title{color:#E8E6E0;}
html.dark .pmtsoul-ws-deliverable-meta{background:#161614;border-bottom-color:#2D2D2D;color:#888;}
html.dark .pmtsoul-ws-deliverable-meta code{background:#2D2D2D;color:#C0BFB8;}
html.dark .pmtsoul-ws-deliverable-text{color:#E8E6E0;}
html.dark .pmtsoul-ws-deliverable-kind{background:rgba(34,197,94,0.12);border-color:rgba(34,197,94,0.35);color:#22C55E;}
html.dark .pmtsoul-ws-deliverable-table th{background:#161614;color:#E8E6E0;}
html.dark .pmtsoul-ws-deliverable-table th,
html.dark .pmtsoul-ws-deliverable-table td{border-color:#2D2D2D;}
.pmtsoul-ws-console-row--live::after{content:"█";display:inline-block;margin-left:4px;color:#FFD66B;animation:pmtsoul-ws-blink 1s steps(2) infinite;}
@keyframes pmtsoul-ws-blink{50%{opacity:0;}}

/* Brand bar */
.pmtsoul-ws-brand-bar{background:#FAFAF7;display:flex;align-items:center;justify-content:space-between;padding:14px 24px;border-bottom:1px solid #E5E3DC;flex-shrink:0;}
.pmtsoul-ws-brand-logo{font-family:"Times New Roman",serif;font-size:22px;font-weight:500;letter-spacing:-0.01em;color:#111;}
.pmtsoul-ws-brand-actions{display:flex;gap:8px;align-items:center;}
.pmtsoul-ws-btn-pill{background:#fff;border:1px solid #C8C5BB;padding:6px 14px;border-radius:4px;font-size:12px;font-weight:500;color:#111;display:inline-flex;align-items:center;gap:5px;}
.pmtsoul-ws-btn-pill:hover{background:#F0EEE6;}
.pmtsoul-ws-plus{font-size:14px;opacity:0.6;}

/* === 上下 + 下面左右 layout (2026-05-22) ===
 * 顶部 console + brand-bar 固定不滚动
 * 下面 split 成 左主区(独立 overflow-y)+ 右 chat(独立 overflow-y)
 * 整页本身不滚动,只有里面的两个 panel 各自滚动
 */
.pmtsoul-ws-main-split{
  flex:1 1 auto;
  display:grid;
  grid-template-columns:minmax(0, 1fr) minmax(360px, 380px);
  gap:1px;
  background:#E5E3DC;
  min-height:0;          /* allow children to shrink + scroll properly */
  min-width:0;
  overflow:hidden;
}
/* 2026-07-09 · 左列容器:console(顶,flex-shrink:0)+ workspace(下,独立滚动)。
 * 作为 main-split 的第一个网格轨道(1fr),使 console 只占左侧宽度、不横盖右侧 chat 列。 */
.pmtsoul-ws-main-left{
  display:flex;
  flex-direction:column;
  min-height:0;
  min-width:0;
  overflow:hidden;
  flex:1 1 auto;   /* 移动端 main-split 变 flex-column 时填满高度;桌面端 grid item 忽略,无副作用 */
}
.pmtsoul-ws-workspace{
  background:#E5E3DC;
  overflow-y:auto;
  overflow-x:hidden;
  min-height:0;
  min-width:0;
  flex:1 1 auto;   /* 在 main-left 内填满 console 下方剩余高度 */
  scrollbar-width:thin;
}
.pmtsoul-ws-workspace::-webkit-scrollbar{width:8px;}
.pmtsoul-ws-workspace::-webkit-scrollbar-thumb{background:#C8C5BB;border-radius:4px;}
.pmtsoul-ws-workspace::-webkit-scrollbar-track{background:#FAFAF7;}
.pmtsoul-ws-workspace-grid{
  display:grid;
  grid-template-columns:280px 1fr 1fr;
  gap:1px;
  min-height:100%;
  background:#E5E3DC;
}
.pmtsoul-ws-col{background:#FAFAF7;padding:24px 20px;}
.pmtsoul-ws-chat-side{
  background:#fff;
  display:flex;
  flex-direction:column;
  overflow:hidden;       /* the .pmtsoul-ws-chat-history inside scrolls */
  min-height:0;
  min-width:0;
}
.pmtsoul-ws-col--chat{padding:0;display:flex;flex-direction:column;background:#fff;}

/* Legacy keep (in case other code paths reference) — silently maps to new */
.pmtsoul-ws-layout{flex:1 1 auto;display:grid;grid-template-columns:280px 1fr 1fr 440px;gap:1px;background:#E5E3DC;min-height:0;}

/* Section headers */
.pmtsoul-ws-section-title{font-family:"Times New Roman",serif;font-size:19px;font-weight:500;margin-bottom:16px;border-bottom:1px solid #E5E3DC;padding-bottom:8px;color:#111;}
.pmtsoul-ws-section-title--gap{margin-top:32px;}

/* 2026-05-24 · Module-header 抽象组件
 * 每个模块顶部统一 header:[角色 emoji][title][LED 状态]      [updated · refresh]
 * 视觉强调"模块由 agent 独立产生 + 可独立刷新"。每个模块有 4 个状态:
 *   data-module-state="loading"  → 显示 skeleton
 *   data-module-state="ready"    → 显示数据
 *   data-module-state="empty"    → "等待 agent 跑"
 *   data-module-state="error"    → "加载失败 · 重试"
 */
.pmtsoul-ws-module{margin-bottom:24px;position:relative;transition:background .3s ease,box-shadow .3s ease;}
/* 2026-05-30 · enrichment 后台增强中:虚线边框 + 内容区 skeleton shimmer 闪烁。
   公司已成立(company_established)进工作区后,数字员工继续后台完善的模块显此态;
   对应 enrichment task completed → 切回 ready 显内容 + pulse 一下。 */
.pmtsoul-ws-module[data-ws-module-state="enriching"]{
  border:1.5px dashed var(--border,rgba(0,0,0,.16));border-radius:12px;
  padding:14px 16px;margin-bottom:24px;background:transparent;
}
.pmtsoul-ws-module[data-ws-module-state="enriching"] .pmtsoul-ws-module-body{
  position:relative;min-height:56px;
}
.pmtsoul-ws-module[data-ws-module-state="enriching"] .pmtsoul-ws-module-body::after{
  content:"";position:absolute;inset:0;border-radius:8px;pointer-events:none;
  background:linear-gradient(90deg,rgba(0,0,0,.035) 25%,rgba(0,0,0,.075) 37%,rgba(0,0,0,.035) 63%);
  background-size:400% 100%;animation:pmts-enrich-shimmer 1.5s ease-in-out infinite;
}
html.dark .pmtsoul-ws-module[data-ws-module-state="enriching"]{border-color:rgba(255,255,255,.16);}
html.dark .pmtsoul-ws-module[data-ws-module-state="enriching"] .pmtsoul-ws-module-body::after{
  background:linear-gradient(90deg,rgba(255,255,255,.04) 25%,rgba(255,255,255,.09) 37%,rgba(255,255,255,.04) 63%);
  background-size:400% 100%;
}
@keyframes pmts-enrich-shimmer{0%{background-position:100% 0}100%{background-position:0 0}}
/* 后台增强状态条(工作区顶部) */
.pmts-enrich-banner{display:flex;align-items:center;gap:8px;margin:0 0 16px;padding:9px 14px;
  border:1px solid var(--border,rgba(0,0,0,.10));border-radius:10px;
  background:var(--surface-soft,rgba(26,127,79,.05));font-size:12.5px;color:var(--text-soft,#5a5a5a);}
.pmts-enrich-banner-dot{width:7px;height:7px;border-radius:50%;background:#1A7F4F;flex:0 0 auto;
  animation:pmts-enrich-dot 1.3s ease-in-out infinite;}
@keyframes pmts-enrich-dot{0%,100%{opacity:.35}50%{opacity:1}}
/* 模块刚收到 SSE invalidate → 高亮闪烁 2 秒(柔和绿色边光,不抢眼) */
.pmtsoul-ws-module--pulsing{animation:pmtsoul-ws-module-pulse 2.2s ease-out 1;}
@keyframes pmtsoul-ws-module-pulse {
  0%   { background:transparent; box-shadow:0 0 0 0 rgba(26,127,79,0); }
  20%  { background:rgba(26,127,79,0.08); box-shadow:0 0 0 4px rgba(26,127,79,0.18); }
  100% { background:transparent; box-shadow:0 0 0 0 rgba(26,127,79,0); }
}
html.dark .pmtsoul-ws-module--pulsing{animation-name:pmtsoul-ws-module-pulse-dark;}
@keyframes pmtsoul-ws-module-pulse-dark {
  0%   { background:transparent; box-shadow:0 0 0 0 rgba(34,197,94,0); }
  20%  { background:rgba(34,197,94,0.10); box-shadow:0 0 0 4px rgba(34,197,94,0.22); }
  100% { background:transparent; box-shadow:0 0 0 0 rgba(34,197,94,0); }
}
/* '刚刚更新' chip · 模块 head 末尾,5s 后 fade */
.pmtsoul-ws-module-just-updated{display:inline-flex;align-items:center;font-size:10px;font-family:-apple-system,sans-serif;color:#1A7F4F;background:#E6F4EC;border:1px solid #B4DBC2;padding:1px 7px;border-radius:2px;letter-spacing:0.04em;margin-left:6px;transition:opacity .8s ease;}
.pmtsoul-ws-module-just-updated::before{content:"●";margin-right:4px;color:#1A7F4F;animation:pmtsoul-ws-blink 1.2s steps(2) infinite;}
.pmtsoul-ws-module-just-updated--fading{opacity:0;}
html.dark .pmtsoul-ws-module-just-updated{color:#22C55E;background:rgba(34,197,94,0.12);border-color:rgba(34,197,94,0.35);}
html.dark .pmtsoul-ws-module-just-updated::before{color:#22C55E;}

.pmtsoul-ws-module-head{display:flex;align-items:center;gap:8px;margin-bottom:12px;border-bottom:1px solid #E5E3DC;padding-bottom:6px;font-family:"Times New Roman",serif;}
.pmtsoul-ws-module-head-icon{font-size:18px;line-height:1;}
.pmtsoul-ws-module-head-title{font-size:18px;font-weight:500;color:#111;flex:1;}
.pmtsoul-ws-module-head-led{display:inline-block;width:7px;height:7px;border-radius:50%;flex-shrink:0;}
.pmtsoul-ws-module-head-led--idle{background:#B0ACA0;}
.pmtsoul-ws-module-head-led--running{background:#3B82F6;box-shadow:0 0 6px rgba(59,130,246,0.5);animation:pmtsoul-ws-module-run 1.4s ease-in-out infinite;}
.pmtsoul-ws-module-head-led--blocked{background:#E76F2F;}
.pmtsoul-ws-module-head-led--error{background:#C44310;}
.pmtsoul-ws-module-head-led--ready{background:#198F4F;}
@keyframes pmtsoul-ws-module-run{0%,100%{opacity:1;transform:scale(1);}50%{opacity:0.5;transform:scale(0.85);}}
.pmtsoul-ws-module-head-meta{font-size:11px;color:#9A9685;font-family:-apple-system,BlinkMacSystemFont,sans-serif;font-variant-numeric:tabular-nums;display:flex;align-items:center;gap:8px;}
.pmtsoul-ws-module-head-meta-time{color:#9A9685;}
.pmtsoul-ws-module-head-refresh{background:transparent;border:0;color:#9A9685;font-size:13px;line-height:1;cursor:pointer;padding:2px 4px;font-family:inherit;}
.pmtsoul-ws-module-head-refresh:hover{color:#198F4F;}
.pmtsoul-ws-module-head-refresh[disabled]{opacity:0.4;cursor:not-allowed;animation:pmtsoul-ws-module-spin 1s linear infinite;}
@keyframes pmtsoul-ws-module-spin{to{transform:rotate(360deg);}}
.pmtsoul-ws-module-body{min-height:32px;}

/* 2026-05-24 · PMTSoul Mascot "Sora" · 6 mood 状态机
 * 见 static/mascot.js 注释。任何 element 加 data-pms-mascot 自动挂。
 *
 * 视觉契约:.pms-mascot[data-mood="<mood>"] 控所有子元素显示/隐藏 + 动画
 *
 * 默认所有"可选元素"(?符/Z字/泪/食物碎屑/闭眼线)hidden,各 mood 显示需要的。
 */
.pms-mascot-wrapper{display:inline-block;line-height:0;}
.pms-mascot{display:block;}

/* 默认隐藏所有可选 mood-specific element */
.pms-mascot .pms-eye-closed,
.pms-mascot .pms-mouth-sad,
.pms-mascot .pms-mouth-wave,
.pms-mascot .pms-mouth-eating,
.pms-mascot .pms-think-mark,
.pms-mascot .pms-zzz,
.pms-mascot .pms-tear,
.pms-mascot .pms-crumbs{display:none;}

/* ── IDLE(默认):漂浮 + 偶尔眨 + 微笑 ── */
.pms-mascot[data-mood="idle"]{animation:pms-bob 2.6s ease-in-out infinite;}
.pms-mascot[data-mood="idle"] .pms-eye{animation:pms-blink 4s ease-in-out infinite;transform-origin:center;transform-box:fill-box;}
.pms-mascot[data-mood="idle"] .pms-glow-outer{animation:pms-glow-breath 2.4s ease-in-out infinite;transform-origin:center;transform-box:fill-box;}

/* ── WORKING:快眨 + 头微倾 + 触角快闪 + 嘴稍缩(认真貌)── */
.pms-mascot[data-mood="working"]{animation:pms-bob-fast 0.9s ease-in-out infinite;transform-origin:50% 80%;}
.pms-mascot[data-mood="working"] .pms-body{transform-origin:50% 80%;transform:rotate(-3deg);}
.pms-mascot[data-mood="working"] .pms-eye{animation:pms-blink-fast 1.8s ease-in-out infinite;transform-origin:center;transform-box:fill-box;}
.pms-mascot[data-mood="working"] .pms-glow-outer{animation:pms-glow-flash 0.6s ease-in-out infinite;transform-origin:center;transform-box:fill-box;}
.pms-mascot[data-mood="working"] .pms-glow-inner{animation:pms-glow-flash 0.6s ease-in-out infinite;transform-origin:center;transform-box:fill-box;}
/* 数字员工职能动作:同为 working,但按 employee_id/role 显不同节奏。 */
.pms-mascot[data-mood="working"][data-activity="planning"]{animation:pms-work-plan 1.5s ease-in-out infinite;}
.pms-mascot[data-mood="working"][data-activity="research"]{animation:pms-work-scan 1.25s ease-in-out infinite;}
.pms-mascot[data-mood="working"][data-activity="writing"]{animation:pms-work-write 0.95s ease-in-out infinite;}
.pms-mascot[data-mood="working"][data-activity="engineering"]{animation:pms-work-build 0.8s steps(2,end) infinite;}
.pms-mascot[data-mood="working"][data-activity="analytics"]{animation:pms-work-analyze 1.35s ease-in-out infinite;}
.pms-mascot[data-mood="working"][data-activity="people"]{animation:pms-work-talk 1.1s ease-in-out infinite;}
.pms-mascot[data-mood="working"][data-activity="design"]{animation:pms-work-design 1.2s ease-in-out infinite;}

/* ── THINKING:? 号浮头顶 + 嘴 wave + 慢眨 ── */
.pms-mascot[data-mood="thinking"] .pms-mouth-smile{display:none;}
.pms-mascot[data-mood="thinking"] .pms-mouth-wave{display:block;}
.pms-mascot[data-mood="thinking"] .pms-think-mark{display:block;animation:pms-think 2s ease-in-out infinite;transform-origin:center;transform-box:fill-box;}
.pms-mascot[data-mood="thinking"] .pms-eye{animation:pms-blink-slow 5s ease-in-out infinite;transform-origin:center;transform-box:fill-box;}
.pms-mascot[data-mood="thinking"] .pms-glow-outer{opacity:0.3;}

/* ── HAPPY:大笑 + 弹跳 + 腮红更亮 ── */
.pms-mascot[data-mood="happy"]{animation:pms-bounce 0.7s ease-in-out infinite;}
.pms-mascot[data-mood="happy"] .pms-mouth-smile{stroke-width:3.5;d:path("M 60 73 Q 76 90 92 73");}
.pms-mascot[data-mood="happy"] .pms-cheek{opacity:0.85;}
.pms-mascot[data-mood="happy"] .pms-glow-outer{animation:pms-glow-flash 0.8s ease-in-out infinite;transform-origin:center;transform-box:fill-box;}

/* ── SAD:嘴倒 v + 眼泪 + 触角熄 ── */
.pms-mascot[data-mood="sad"] .pms-mouth-smile{display:none;}
.pms-mascot[data-mood="sad"] .pms-mouth-sad{display:block;}
.pms-mascot[data-mood="sad"] .pms-tear{display:block;animation:pms-tear 1.8s ease-in-out infinite;transform-origin:center;transform-box:fill-box;}
.pms-mascot[data-mood="sad"] .pms-glow-outer,
.pms-mascot[data-mood="sad"] .pms-glow-inner{opacity:0.18;}
.pms-mascot[data-mood="sad"] .pms-body{filter:saturate(0.5);}

/* ── SLEEPING:闭眼 + Zzz + 不漂浮 ── */
.pms-mascot[data-mood="sleeping"] .pms-eye{display:none;}
.pms-mascot[data-mood="sleeping"] .pms-eye-closed{display:block;}
.pms-mascot[data-mood="sleeping"] .pms-mouth-smile{stroke-width:2;d:path("M 70 78 L 82 78");}
.pms-mascot[data-mood="sleeping"] .pms-zzz{display:block;}
.pms-mascot[data-mood="sleeping"] .pms-zzz-1{animation:pms-zzz 2.4s ease-in-out infinite;}
.pms-mascot[data-mood="sleeping"] .pms-zzz-2{animation:pms-zzz 2.4s ease-in-out 0.7s infinite;}
.pms-mascot[data-mood="sleeping"] .pms-glow-outer,
.pms-mascot[data-mood="sleeping"] .pms-glow-inner{opacity:0.35;}

/* ── EATING(P1 backlog):嘴张 + 食物碎屑 ── */
.pms-mascot[data-mood="eating"] .pms-mouth-smile{display:none;}
.pms-mascot[data-mood="eating"] .pms-mouth-eating{display:block;animation:pms-chew 0.5s ease-in-out infinite;transform-origin:center;transform-box:fill-box;}
.pms-mascot[data-mood="eating"] .pms-crumbs{display:block;animation:pms-crumbs 1.2s ease-in-out infinite;transform-origin:center;transform-box:fill-box;}

/* ── 全部 keyframes ── */
@keyframes pms-bob{0%,100%{transform:translateY(0);}50%{transform:translateY(-4px);}}
@keyframes pms-bob-fast{0%,100%{transform:translateY(0) rotate(-1deg);}50%{transform:translateY(-2px) rotate(1deg);}}
@keyframes pms-work-plan{0%,100%{transform:translateY(0) rotate(-2deg);}50%{transform:translateY(-3px) rotate(2deg);}}
@keyframes pms-work-scan{0%,100%{transform:translateX(-2px) translateY(0);}50%{transform:translateX(2px) translateY(-2px);}}
@keyframes pms-work-write{0%,100%{transform:translateY(0) rotate(-1deg);}50%{transform:translateY(-3px) rotate(1deg);}}
@keyframes pms-work-build{0%,100%{transform:translate(0,0) rotate(-1deg);}50%{transform:translate(1px,-2px) rotate(1deg);}}
@keyframes pms-work-analyze{0%,100%{transform:translateY(0) scale(1);}50%{transform:translateY(-2px) scale(1.035);}}
@keyframes pms-work-talk{0%,100%{transform:translateX(-1px) rotate(-1deg);}50%{transform:translateX(1px) rotate(1deg);}}
@keyframes pms-work-design{0%,100%{transform:translateY(0) rotate(-2deg) scale(1);}50%{transform:translateY(-5px) rotate(2deg) scale(1.02);}}
@keyframes pms-bounce{0%,100%{transform:translateY(0) scale(1);}50%{transform:translateY(-8px) scale(1.04);}}
@keyframes pms-blink{0%,92%,100%{transform:scaleY(1);}94%,98%{transform:scaleY(0.1);}}
@keyframes pms-blink-fast{0%,75%,100%{transform:scaleY(1);}80%,90%{transform:scaleY(0.1);}}
@keyframes pms-blink-slow{0%,85%,100%{transform:scaleY(1);}90%,96%{transform:scaleY(0.1);}}
@keyframes pms-glow-breath{0%,100%{opacity:0.65;transform:scale(1);}50%{opacity:1;transform:scale(1.18);}}
@keyframes pms-glow-flash{0%,100%{opacity:0.4;}50%{opacity:1;transform:scale(1.25);}}
@keyframes pms-think{0%,100%{opacity:0.4;transform:translateY(2px);}50%{opacity:1;transform:translateY(-4px);}}
@keyframes pms-tear{0%,100%{opacity:0.85;transform:translateY(0);}50%{opacity:1;transform:translateY(8px);}}
@keyframes pms-zzz{0%{opacity:0;transform:translateY(4px) scale(0.6);}50%{opacity:1;transform:translateY(-2px) scale(1);}100%{opacity:0;transform:translateY(-8px) scale(1.1);}}
@keyframes pms-chew{0%,100%{transform:scaleY(1);}50%{transform:scaleY(0.5);}}
@keyframes pms-crumbs{0%{opacity:1;transform:translateY(0);}100%{opacity:0;transform:translateY(8px) scale(0.4);}}

/* Dark mode 微调 */
html.dark .pms-mascot .pms-think-mark,
html.dark .pms-mascot .pms-zzz{fill:#22C55E;}

@media (prefers-reduced-motion:reduce){
  .pms-mascot,.pms-mascot *{animation:none !important;transition:none !important;}
}

/* 2026-05-24 · Bootstrap initializing 时 chat history 的脉冲 dots */
.pmtsoul-ws-chat-init-dots{list-style:none !important;display:inline-flex !important;gap:5px;padding:6px 0;margin-left:-18px;}
.pmtsoul-ws-chat-init-dots span{display:inline-block;width:6px;height:6px;border-radius:50%;background:#198F4F;animation:pmtsoul-ws-chat-init-dot 1.4s ease-in-out infinite;}
.pmtsoul-ws-chat-init-dots span:nth-child(2){animation-delay:0.16s;}
.pmtsoul-ws-chat-init-dots span:nth-child(3){animation-delay:0.32s;}
@keyframes pmtsoul-ws-chat-init-dot{0%,80%,100%{opacity:0.3;transform:scale(0.85);}40%{opacity:1;transform:scale(1);}}

/* 2026-05-24 · 全套初始化引导 banner(ERP 空状态时显)
   2026-07-15 · 重设计。原样式是「ERP 空状态警告 banner」被直接复用成首次开工引导:
   黄底(#FFF8E5)+ 黄边 + 棕字(#7A4F00)+ 3px 金色左竖线 = 警告语汇,而这里承载的是
   「你的 AI 团队待命中,填两项就开工」——语义错位;左竖线还属于已要求全站清除的装饰性竖线;
   且它嵌在 onboarding 页卡内形成卡中卡,两层边框互相打架。
   改:去掉这层容器视觉(页卡本身即卡),发丝线分隔取代整块色卡;品牌 terracotta 只用在
   必填星号 + focus ring 两处;衬线标题保留(与 .pmtsoul-ws-mascot-name 同为平台语汇)。 */
.pmtsoul-ws-fullinit-banner{margin:0;padding:18px 0 0;background:transparent;border:0;border-top:1px solid var(--border,#E5E3DC);}
.pmtsoul-ws-fullinit-head{display:block;font-family:"Times New Roman",serif;font-size:15px;color:var(--text,#3d3d3a);margin:0 0 4px;}
.pmtsoul-ws-fullinit-desc{font-size:12px;color:var(--muted,#8A857C);line-height:1.55;margin:0 0 14px;}
.pmtsoul-ws-fullinit-banner label{display:block;font-size:12px;font-weight:600;color:var(--text,#3d3d3a);margin:14px 0 6px;}
.pmtsoul-ws-fullinit-banner label .req{color:var(--accent,#A93817);font-weight:400;}
.pmtsoul-ws-intake-input{width:100%;box-sizing:border-box;padding:10px 12px;font-size:13px;font-family:inherit;color:var(--text,#3d3d3a);background:var(--surface,#fff);border:1px solid var(--border,#E5E3DC);border-radius:8px;transition:border-color .12s,box-shadow .12s;}
.pmtsoul-ws-intake-input::placeholder{color:var(--muted,#8A857C);}
.pmtsoul-ws-intake-input:focus{outline:none;border-color:var(--accent,#A93817);box-shadow:0 0 0 3px var(--focus-ring,rgba(169,56,23,.35));}
.pmtsoul-ws-intake-images{margin-top:18px;}
.pmtsoul-ws-intake-imglabel{font-size:12px;font-weight:600;color:var(--text,#3d3d3a);margin-bottom:3px;}
.pmtsoul-ws-intake-imghint{font-size:11px;color:var(--muted,#8A857C);margin-bottom:8px;}
.pmtsoul-ws-intake-addbtn{width:100%;padding:9px 12px;font-size:12px;font-family:inherit;color:var(--muted,#8A857C);background:transparent;border:1px dashed var(--border,#E5E3DC);border-radius:8px;cursor:pointer;transition:border-color .12s,color .12s;}
.pmtsoul-ws-intake-addbtn:hover{border-color:var(--accent,#A93817);color:var(--accent-text,#8E2E12);}
.pmtsoul-ws-fullinit-banner button[type=submit]{width:100%;margin-top:18px;border-radius:8px;}
@media (pointer:coarse){
  /* 16px 是 iOS 不触发聚焦缩放的下限;44px 是最小触控目标 */
  .pmtsoul-ws-intake-input{min-height:44px;font-size:16px;}
  .pmtsoul-ws-intake-addbtn{min-height:44px;}
  .pmtsoul-ws-fullinit-banner button[type=submit]{min-height:48px;}
}
html.dark .pmtsoul-ws-fullinit-banner{border-top-color:var(--border,#3A382F);}

/* 2026-05-24 · 商家自动官网(Storefront)— M10 模块 + /workspace/storefront 视图 */
.pmtsoul-ws-storefront-head{display:flex;align-items:center;gap:6px;font-size:11px;color:#666;margin-bottom:6px;}
.pmtsoul-ws-storefront-status{font-weight:500;color:#111;}
.pmtsoul-ws-storefront-template{margin-left:auto;color:#999;font-style:italic;}
.pmtsoul-ws-storefront-actions{display:flex;gap:6px;margin-top:8px;}
.pmtsoul-ws-storefront-actions .pmtsoul-ws-btn-medium{flex:1;text-align:center;}
.pmtsoul-ws-storefront-hint{font-size:11px;color:#999;font-style:italic;margin-top:8px;line-height:1.5;}
html.dark .pmtsoul-ws-storefront-status{color:#E8E6E0;}
html.dark .pmtsoul-ws-storefront-template{color:#7A7669;}

/* /workspace/storefront 视图 */
.pmtsoul-ws-storefront-url{font-size:13px;color:#555;margin-bottom:6px;display:flex;align-items:center;gap:6px;}
.pmtsoul-ws-storefront-url code{font-family:ui-monospace,monospace;font-size:12px;color:#198F4F;background:#F0EEE6;padding:1px 6px;}
.pmtsoul-ws-storefront-desc{font-size:13px;color:#666;font-style:italic;}
.pmtsoul-ws-form-row{display:flex;flex-direction:column;gap:6px;margin-bottom:14px;}
.pmtsoul-ws-form-row label{font-size:12px;color:#555;font-weight:500;}
.pmtsoul-ws-form-row input[type="text"],
.pmtsoul-ws-form-row input[type="email"],
.pmtsoul-ws-form-row textarea,
.pmtsoul-ws-form-row select{padding:8px 10px;border:1px solid #C8C5BB;background:#FAFAF7;font-family:inherit;font-size:13px;color:#111;border-radius:0;}
.pmtsoul-ws-form-row input[type="color"]{width:48px;height:32px;padding:2px;border:1px solid #C8C5BB;background:transparent;cursor:pointer;}
.pmtsoul-ws-form-row--inline{flex-direction:row;align-items:center;gap:12px;flex-wrap:wrap;}
.pmtsoul-ws-form-row--inline label{margin:0;}
.pmtsoul-ws-storefront-save-row{display:flex;gap:10px;margin-top:18px;}
.pmtsoul-ws-storefront-save-row button{flex:1;}
.pmtsoul-ws-storefront-preview{background:#FFF;border:1px solid #E5E3DC;display:flex;flex-direction:column;min-height:560px;}
.pmtsoul-ws-storefront-preview-head{padding:10px 16px;border-bottom:1px solid #E5E3DC;font-family:"Times New Roman",serif;font-size:14px;display:flex;justify-content:space-between;align-items:center;}
.pmtsoul-ws-storefront-iframe-wrap{flex:1;background:#F5F4ED;position:relative;min-height:500px;}
.pmtsoul-ws-storefront-iframe-wrap iframe{width:100%;height:100%;border:0;background:#FFF;}
.pmtsoul-ws-storefront-iframe-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:12px;font-family:"Times New Roman",serif;font-size:16px;color:#666;text-align:center;}
.pmtsoul-ws-storefront-iframe-sub{font-size:12px;color:#999;font-style:italic;}
html.dark .pmtsoul-ws-storefront-url{color:#A0A0A0;}
html.dark .pmtsoul-ws-storefront-url code{color:#22C55E;background:#1A1A18;}
html.dark .pmtsoul-ws-storefront-preview{background:#1E1E1B;border-color:#2D2D2D;}
html.dark .pmtsoul-ws-storefront-iframe-wrap{background:#161614;}
html.dark .pmtsoul-ws-form-row input,
html.dark .pmtsoul-ws-form-row textarea,
html.dark .pmtsoul-ws-form-row select{background:#1A1A18;color:#E8E6E0;border-color:#3A3A36;}

/* 2026-05-24 · 多渠道营销中心(M13 模块)— 展示 5 个营销渠道并行 agent 工作 */
.pmtsoul-ws-mkt-summary{display:flex;align-items:center;gap:8px;font-size:12px;color:#444;padding:8px 10px;background:#F5F4ED;border-left:3px solid #198F4F;margin-bottom:10px;}
.pmtsoul-ws-mkt-summary strong{color:#111;}
.pmtsoul-ws-channel{padding:10px 12px;border-bottom:1px solid #E5E3DC;}
.pmtsoul-ws-channel:last-of-type{border-bottom:none;}
.pmtsoul-ws-channel-head{display:flex;align-items:center;gap:8px;margin-bottom:4px;}
.pmtsoul-ws-channel-icon{font-size:15px;width:20px;text-align:center;}
.pmtsoul-ws-channel-name{font-family:"Times New Roman",serif;font-size:14px;font-weight:500;color:#111;flex:1;}
.pmtsoul-ws-channel-body{padding-left:28px;}
.pmtsoul-ws-channel-title{font-size:13px;color:#222;margin-bottom:3px;line-height:1.4;}
.pmtsoul-ws-channel-meta{font-size:11px;color:#777;font-family:-apple-system,sans-serif;font-variant-numeric:tabular-nums;line-height:1.5;}
.pmtsoul-ws-mkt-actions{margin-top:14px;}
.pmtsoul-ws-mkt-link{display:block;text-align:center;margin-top:8px;font-size:12px;color:#198F4F;text-decoration:none;}
.pmtsoul-ws-mkt-link:hover{text-decoration:underline;}
html.dark .pmtsoul-ws-mkt-summary{background:#1E1E1B;color:#A0A0A0;border-left-color:#22C55E;}
html.dark .pmtsoul-ws-mkt-summary strong{color:#E8E6E0;}
html.dark .pmtsoul-ws-channel{border-bottom-color:#2D2D2D;}
html.dark .pmtsoul-ws-channel-name,
html.dark .pmtsoul-ws-channel-title{color:#E8E6E0;}
html.dark .pmtsoul-ws-channel-meta{color:#9A9685;}
html.dark .pmtsoul-ws-mkt-link{color:#22C55E;}

/* 2026-05-24 · Mascot 状态卡(COL1 顶,Polsia 'Informed & Ready' 风) */
.pmtsoul-ws-mascot-card{display:flex;align-items:flex-start;gap:14px;padding:14px 16px;margin-bottom:16px;background:#F5F4ED;border:1px solid #E5E3DC;transition:border-color .5s ease,box-shadow .5s ease,background .5s ease;}
/* 2026-07-14 · 数字员工真实干活时(真事件驱动 data-mascot-active-role / running,idle 移除)
   卡片环境反馈重做(原 0 0 0 3px 硬光环在有/无间跳=闪,丑):
   静态暖调渐变底 + 柔 terracotta 边 + 缓慢平滑呼吸暖光(blur-only,.07↔.17 永不归零、无硬环)。
   高特指(class + data-pms-mascot-card + 状态 attr = 0,3,0)盖过下方旧 active-role 绿背景规则,
   两态(具名员工聚焦 / Sora 运行中)观感统一为一套暖光,不虚构状态。 */
.pmtsoul-ws-mascot-card[data-pms-mascot-card][data-mascot-active-role],
.pmtsoul-ws-mascot-card[data-pms-mascot-card][data-mascot-running]{
  border-color:rgba(231,111,47,.34);
  background:linear-gradient(180deg,rgba(231,111,47,.06),rgba(231,111,47,.015));
  animation:pmtsoul-ws-mascot-card-breathe 3.8s ease-in-out infinite;
}
@keyframes pmtsoul-ws-mascot-card-breathe{
  0%,100%{box-shadow:0 1px 11px rgba(231,111,47,.07);}
  50%{box-shadow:0 3px 20px rgba(231,111,47,.17);}
}
html.dark .pmtsoul-ws-mascot-card[data-pms-mascot-card][data-mascot-active-role],
html.dark .pmtsoul-ws-mascot-card[data-pms-mascot-card][data-mascot-running]{
  border-color:rgba(231,111,47,.42);
  background:linear-gradient(180deg,rgba(231,111,47,.11),rgba(231,111,47,.03));
}
@media (prefers-reduced-motion:reduce){
  .pmtsoul-ws-mascot-card[data-mascot-active-role],
  .pmtsoul-ws-mascot-card[data-mascot-running]{animation:none;box-shadow:0 2px 14px rgba(231,111,47,.13);}
}
.pmtsoul-ws-mascot-mini{width:64px;height:74px;flex-shrink:0;animation:pmtsoul-ws-mascot-bob 2.6s ease-in-out infinite;}
.pmtsoul-ws-mascot-mini svg{width:100%;height:100%;display:block;}
.pmtsoul-ws-mascot-mini-eye{transform-origin:center;animation:pmtsoul-ws-mascot-blink 4s ease-in-out infinite;transform-box:fill-box;}
.pmtsoul-ws-mascot-mini-glow{transform-origin:center;animation:pmtsoul-ws-mascot-glow 2.4s ease-in-out infinite;transform-box:fill-box;}
.pmtsoul-ws-mascot-info{flex:1;min-width:0;}
.pmtsoul-ws-mascot-name{font-family:"Times New Roman",serif;font-size:17px;color:#111;margin-bottom:6px;}
/* 多员工轮流呈现:每次 swap 时 fade-in 一下,让 user 知道换人了 */
.pmtsoul-ws-mascot-name--swap{animation:pmtsoul-ws-mascot-name-swap .35s ease-out;}
@keyframes pmtsoul-ws-mascot-name-swap {
  0%   { opacity:0.2; transform:translateY(-3px); }
  100% { opacity:1;   transform:translateY(0);    }
}
/* 当 mascot 有 active 员工时,卡片背景给一点点 hint 色 */
.pmtsoul-ws-mascot-card[data-mascot-active-role]{background:linear-gradient(180deg,#FAFAF7,#F0EEE6);}
html.dark .pmtsoul-ws-mascot-card[data-mascot-active-role]{background:linear-gradient(180deg,#1E1E1B,#161614);}

.pmtsoul-ws-mascot-desc{font-size:12px;color:#666;line-height:1.55;}
/* Keep the stable team summary compact; live activity has its own row below. */
.pmtsoul-ws-mascot-desc{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;}
@keyframes pmtsoul-ws-mascot-bob{0%,100%{transform:translateY(0);}50%{transform:translateY(-3px);}}
@keyframes pmtsoul-ws-mascot-blink{0%,92%,100%{transform:scaleY(1);}94%,98%{transform:scaleY(0.1);}}
@keyframes pmtsoul-ws-mascot-glow{0%,100%{opacity:0.65;transform:scale(1);}50%{opacity:1;transform:scale(1.18);}}
html.dark .pmtsoul-ws-mascot-card{background:#1E1E1B;border-color:#2D2D2D;}
html.dark .pmtsoul-ws-mascot-name{color:#E8E6E0;}
html.dark .pmtsoul-ws-mascot-desc{color:#9A9685;}

/* Skeleton — 灰条脉冲,加载占位 */
.pmtsoul-ws-skeleton{display:block;background:linear-gradient(90deg,#EEEDE6 0%,#F5F4ED 50%,#EEEDE6 100%);background-size:200% 100%;border-radius:3px;animation:pmtsoul-ws-skel-shift 1.4s ease-in-out infinite;}
.pmtsoul-ws-skeleton+.pmtsoul-ws-skeleton{margin-top:8px;}
.pmtsoul-ws-skeleton--bar{height:14px;width:100%;}
.pmtsoul-ws-skeleton--bar-short{height:14px;width:60%;}
.pmtsoul-ws-skeleton--bar-mid{height:14px;width:80%;}
.pmtsoul-ws-skeleton--big{height:28px;width:50%;margin-bottom:12px;}
.pmtsoul-ws-skeleton--card{height:64px;margin-bottom:10px;}
@keyframes pmtsoul-ws-skel-shift{0%{background-position:200% 0;}100%{background-position:-200% 0;}}

/* Error state — 红框 + retry */
.pmtsoul-ws-module-error{padding:12px 14px;border:1px dashed #C44310;background:#FEF6F2;font-size:13px;color:#7A2510;display:flex;justify-content:space-between;align-items:center;gap:12px;}
.pmtsoul-ws-module-error-msg{flex:1;}
.pmtsoul-ws-module-error-retry{background:#C44310;color:#FFF;border:0;padding:5px 12px;font-size:12px;font-weight:500;cursor:pointer;}
.pmtsoul-ws-module-error-retry:hover{background:#A03810;}

/* Empty state — "等待 agent 跑" 引导 */
.pmtsoul-ws-module-empty{padding:14px;text-align:center;color:#9A9685;font-size:13px;font-style:italic;border:1px dashed #C8C5BB;background:#FAF9F4;}
.pmtsoul-ws-module-empty-action{display:inline-block;margin-left:6px;color:#198F4F;text-decoration:underline;cursor:pointer;font-style:normal;}

/* Dark mode */
html.dark .pmtsoul-ws-module-head{border-bottom-color:#2D2D2D;}
html.dark .pmtsoul-ws-module-head-title{color:#E8E6E0;}
html.dark .pmtsoul-ws-skeleton{background:linear-gradient(90deg,#252423 0%,#2E2D2B 50%,#252423 100%);background-size:200% 100%;}
html.dark .pmtsoul-ws-module-error{background:#2A1A14;border-color:#E76F2F;color:#FFB89A;}
html.dark .pmtsoul-ws-module-empty{background:#1A1A18;border-color:#3A3A36;color:#7A7669;}

/* 2026-05-24 · Brand-bar 上的 main↔tools 切换 tab */
.pmtsoul-ws-tools-nav{display:flex;gap:14px;align-items:center;font-family:"Times New Roman",serif;flex:1;justify-content:center;}
.pmtsoul-ws-tools-tab{background:transparent;border:0;border-bottom:2px solid transparent;color:#666;font-size:15px;padding:6px 4px;cursor:pointer;font-family:inherit;line-height:1.2;}
.pmtsoul-ws-tools-tab:hover{color:#111;}
.pmtsoul-ws-tools-tab--active{color:#111;border-bottom-color:#198F4F;cursor:default;}
.pmtsoul-ws-tools-summary{font-size:12px;color:#666;font-family:-apple-system,sans-serif;font-variant-numeric:tabular-nums;}
html.dark .pmtsoul-ws-tools-tab{color:#999;}
html.dark .pmtsoul-ws-tools-tab:hover{color:#E8E6E0;}
html.dark .pmtsoul-ws-tools-tab--active{color:#E8E6E0;border-bottom-color:#22C55E;}

/* /workspace/agents 视图 — 28 capability 网格 */
.pmtsoul-ws-tools{display:flex;flex-direction:column;height:100%;overflow:hidden;}
.pmtsoul-ws-tools-body{flex:1;overflow-y:auto;padding:24px 32px;background:#FAFAF7;}
.pmtsoul-ws-tools-intro{font-family:"Times New Roman",serif;font-size:14px;color:#555;background:#FFF;border:1px solid #E5E3DC;padding:14px 18px;margin-bottom:24px;line-height:1.7;}
.pmtsoul-ws-tools-intro code{font-family:ui-monospace,monospace;font-size:12px;color:#198F4F;background:#F0EEE6;padding:1px 5px;}
.pmtsoul-ws-cap-group{margin-bottom:32px;}
.pmtsoul-ws-cap-group-title{font-family:"Times New Roman",serif;font-size:20px;font-weight:500;margin:0 0 14px;color:#111;border-bottom:1px solid #E5E3DC;padding-bottom:6px;}
.pmtsoul-ws-cap-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px;}
.pmtsoul-ws-cap-card{background:#FFF;border:1px solid #E5E3DC;padding:16px 18px;display:flex;flex-direction:column;gap:10px;transition:border-color 0.15s;}
.pmtsoul-ws-cap-card:hover{border-color:#198F4F;}
.pmtsoul-ws-cap-card-head{display:flex;align-items:center;gap:8px;}
.pmtsoul-ws-cap-icon{font-size:22px;line-height:1;}
.pmtsoul-ws-cap-title{font-family:"Times New Roman",serif;font-size:17px;font-weight:500;color:#111;flex:1;}
.pmtsoul-ws-cap-badge{font-size:10px;padding:2px 7px;border-radius:2px;font-family:-apple-system,sans-serif;font-weight:500;letter-spacing:0.3px;}
.pmtsoul-ws-cap-badge--ok{background:#D4F5DE;color:#0F6A2F;}
.pmtsoul-ws-cap-badge--p0{background:#FFE9B0;color:#7A4F00;}
.pmtsoul-ws-cap-badge--p1{background:#E0E8F0;color:#3A5070;}
.pmtsoul-ws-cap-badge--p2{background:#EEE;color:#666;}
.pmtsoul-ws-cap-desc{font-size:13px;color:#555;line-height:1.5;min-height:38px;}
.pmtsoul-ws-cap-meta{display:flex;justify-content:space-between;font-size:11px;color:#999;font-family:-apple-system,sans-serif;}
.pmtsoul-ws-cap-mode{font-style:italic;}
.pmtsoul-ws-cap-id{font-family:ui-monospace,monospace;}
.pmtsoul-ws-cap-roles{display:flex;flex-wrap:wrap;gap:5px;}
.pmtsoul-ws-cap-role{font-size:10px;padding:2px 7px;background:#F0EEE6;color:#555;border-radius:2px;font-family:-apple-system,sans-serif;}
.pmtsoul-ws-cap-cred{display:inline-block;font-size:10px;padding:2px 7px;border-radius:2px;font-family:-apple-system,sans-serif;border:1px solid;width:fit-content;}
.pmtsoul-ws-cap-cred--free{border-color:#C8C5BB;color:#666;background:#FAFAF7;}
.pmtsoul-ws-cap-cred--ent{border-color:#3A5070;color:#3A5070;background:#E0E8F0;}
.pmtsoul-ws-cap-cred--acc{border-color:#7A4F00;color:#7A4F00;background:#FFE9B0;}
.pmtsoul-ws-cap-cred--demo{border-color:#0F6A2F;color:#0F6A2F;background:#D4F5DE;}
.pmtsoul-ws-cap-btn{align-self:flex-end;margin-top:auto;}
.pmtsoul-ws-cap-btn--auth{background:#FFE9B0;color:#7A4F00;border:1px solid #C49830;}
.pmtsoul-ws-cap-btn--auth:hover{background:#FFE0A0;}
html.dark .pmtsoul-ws-tools-body{background:#161614;}
html.dark .pmtsoul-ws-tools-intro{background:#1E1E1B;border-color:#2D2D2D;color:#A0A0A0;}
html.dark .pmtsoul-ws-cap-group-title{color:#E8E6E0;border-bottom-color:#2D2D2D;}
html.dark .pmtsoul-ws-cap-card{background:#1E1E1B;border-color:#2D2D2D;}
html.dark .pmtsoul-ws-cap-card:hover{border-color:#22C55E;}
html.dark .pmtsoul-ws-cap-title{color:#E8E6E0;}
html.dark .pmtsoul-ws-cap-desc{color:#A0A0A0;}
html.dark .pmtsoul-ws-cap-role{background:#2D2D2D;color:#A0A0A0;}

/* 2026-05-24 · AI 员工集 — 8 员工 grid + 详情视图 */
.pmtsoul-ws-employee-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:16px;}
.pmtsoul-ws-employee-card{background:#FFF;border:1px solid #E5E3DC;padding:18px;display:flex;flex-direction:column;gap:12px;cursor:pointer;transition:border-color .15s,transform .1s,box-shadow .15s;}
.pmtsoul-ws-employee-card:hover{border-color:#1A7F4F;transform:translateY(-1px);box-shadow:0 4px 16px rgba(26,127,79,.08);}
.pmtsoul-ws-employee-card[data-status="coming"]{opacity:.7;}
.pmtsoul-ws-employee-head{display:flex;align-items:flex-start;gap:12px;}
.pmtsoul-ws-employee-avatar{font-size:42px;line-height:1;flex-shrink:0;width:54px;height:54px;display:flex;align-items:center;justify-content:center;background:#F0EEE6;border-radius:50%;}
.pmtsoul-ws-employee-avatar--lg{font-size:56px;width:72px;height:72px;}
.pmtsoul-ws-employee-id{flex:1;min-width:0;}
.pmtsoul-ws-employee-name{font-family:"Times New Roman",serif;font-size:18px;color:#111;font-weight:500;margin-bottom:3px;}
.pmtsoul-ws-employee-name--lg{font-size:24px;}
.pmtsoul-ws-employee-tagline{font-size:12px;color:#666;letter-spacing:0.02em;}
.pmtsoul-ws-employee-status{font-size:10px;padding:3px 8px;border-radius:2px;font-family:-apple-system,sans-serif;border:1px solid;flex-shrink:0;align-self:flex-start;}
.pmtsoul-ws-employee-status--active{border-color:#1A7F4F;color:#1A7F4F;background:#E6F4EC;}
.pmtsoul-ws-employee-status--coming{border-color:#C49830;color:#7A4F00;background:#FFE9B0;}
.pmtsoul-ws-employee-status--idle{border-color:#C8C5BB;color:#666;background:#FAFAF7;}
.pmtsoul-ws-employee-stats{font-size:12px;color:#666;}
.pmtsoul-ws-employee-stats strong{color:#111;font-weight:600;}
.pmtsoul-ws-employee-stats-sep{margin:0 6px;color:#C8C5BB;}
.pmtsoul-ws-employee-stats-ok{color:#1A7F4F;}
.pmtsoul-ws-employee-stats-pending{color:#7A4F00;}
.pmtsoul-ws-employee-caps-preview{display:flex;flex-wrap:wrap;gap:6px;}
.pmtsoul-ws-employee-cap-pill{font-size:11px;padding:3px 8px;background:#F5F4EE;border:1px solid #E5E3DC;color:#444;border-radius:2px;white-space:nowrap;}
.pmtsoul-ws-employee-cap-more{font-size:11px;padding:3px 8px;color:#999;}
.pmtsoul-ws-employee-cta{margin-top:auto;font-size:12px;color:#1A7F4F;letter-spacing:0.04em;font-family:"Times New Roman",serif;font-style:italic;}
.pmtsoul-ws-employee-card:hover .pmtsoul-ws-employee-cta{color:#0F6A2F;}

.pmtsoul-ws-employee-detail{display:flex;flex-direction:column;gap:18px;}
.pmtsoul-ws-employee-detail-head{display:flex;align-items:center;gap:16px;padding-bottom:18px;border-bottom:1px solid #E5E3DC;flex-wrap:wrap;}
.pmtsoul-ws-employee-back{background:transparent;border:1px solid #C8C5BB;color:#444;padding:6px 14px;font-size:12px;cursor:pointer;letter-spacing:0.04em;}
.pmtsoul-ws-employee-back:hover{background:#F0EEE6;border-color:#999;}
.pmtsoul-ws-employee-detail-stats{font-size:13px;color:#555;}
.pmtsoul-ws-employee-detail-stats strong{color:#111;font-weight:600;}
.pmtsoul-ws-employee-detail-stats .pmtsoul-ws-employee-stats-ok{color:#1A7F4F;}
.pmtsoul-ws-employee-detail-stats .pmtsoul-ws-employee-stats-pending{color:#7A4F00;}
.pmtsoul-ws-employee-detail-h3{font-family:"Times New Roman",serif;font-size:20px;font-weight:500;color:#111;margin:0 0 12px;letter-spacing:-0.01em;}
/* core_mission(agency_profile)— 大号 highlight 句 */
.pmtsoul-ws-employee-mission{display:flex;gap:14px;align-items:flex-start;background:linear-gradient(180deg,#FFF7E0,#FFEEC2);border:1px solid #F0D89A;padding:18px 20px;}
.pmtsoul-ws-employee-mission-icon{font-size:24px;line-height:1;flex-shrink:0;}
.pmtsoul-ws-employee-mission-text{font-family:"Times New Roman",serif;font-size:17px;line-height:1.55;color:#3A2A00;font-style:italic;}
html.dark .pmtsoul-ws-employee-mission{background:linear-gradient(180deg,#2A220E,#3A2F1A);border-color:#5A4A20;}
html.dark .pmtsoul-ws-employee-mission-text{color:#F0D89A;}
.pmtsoul-ws-employee-bullets--steps{list-style:decimal;padding-left:24px;}
.pmtsoul-ws-employee-bullets--steps li{color:#333;}
.pmtsoul-ws-employee-bullets--steps li::marker{color:#1A7F4F;font-weight:600;}
.pmtsoul-ws-employee-style{font-size:13.5px;line-height:1.7;color:#333;background:#FAFAF7;border-left:3px solid #1A7F4F;padding:10px 14px;font-style:italic;}
html.dark .pmtsoul-ws-employee-style{background:#1E1E1B;color:#C0BFB8;border-left-color:#22C55E;}

/* 2026-05-25 backend 33a1854 · item 级 owner_employee + updated_at chip */
.pmtsoul-ws-item-owner{display:flex;align-items:center;gap:8px;font-size:11px;margin-top:4px;flex-wrap:wrap;}
.pmtsoul-ws-item-owner-name{color:#1A7F4F;font-weight:500;letter-spacing:0.02em;display:inline-flex;align-items:center;gap:4px;}
.pmtsoul-ws-item-owner-name .pmts-pix{width:14px;height:14px;vertical-align:-2px;opacity:0.9;}
/* 2026-07-22 · 原为硬编码 #999(白底 2.85:1,全站最差)。走 --muted 后随主题走,并自动达标。 */
.pmtsoul-ws-item-owner-time{color:var(--muted);margin-left:auto;font-family:ui-monospace,monospace;}
html.dark .pmtsoul-ws-item-owner-name{color:#22C55E;}

/* 2026-05-25 · 员工治理 · hierarchy / scope_authority / write_authorities */
.pmtsoul-ws-employee-hierarchy{display:flex;flex-direction:column;gap:10px;}
.pmtsoul-ws-employee-hier-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px;}
.pmtsoul-ws-employee-hier-label{font-size:11px;color:#888;letter-spacing:0.04em;min-width:60px;}
.pmtsoul-ws-employee-hier-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;background:#F0EEE6;border:1px solid #E5E3DC;font-size:12.5px;color:#333;border-radius:2px;}
html.dark .pmtsoul-ws-employee-hier-chip{background:#2D2D2D;border-color:#3A3A35;color:#C0BFB8;}

.pmtsoul-ws-employee-scope{display:flex;flex-direction:column;gap:8px;}
.pmtsoul-ws-employee-scope-row{display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px;}
.pmtsoul-ws-employee-scope-label{font-size:11px;color:#888;letter-spacing:0.04em;min-width:60px;padding-top:3px;}
.pmtsoul-ws-employee-scope-tags{display:flex;flex-wrap:wrap;gap:4px;flex:1;}
.pmtsoul-ws-employee-scope-tag{font-size:11px;padding:2px 8px;background:#F5F4EE;border:1px solid #D8D5CB;color:#444;border-radius:2px;}
.pmtsoul-ws-employee-scope-row[data-scope-color="green"] .pmtsoul-ws-employee-scope-tag{background:#E6F4EC;border-color:#B4DBC2;color:#1A7F4F;}
.pmtsoul-ws-employee-scope-row[data-scope-color="yellow"] .pmtsoul-ws-employee-scope-tag{background:#FFF7E0;border-color:#F0D89A;color:#7A4F00;}
.pmtsoul-ws-employee-scope-row[data-scope-color="blue"] .pmtsoul-ws-employee-scope-tag{background:#E8EEF7;border-color:#B4C6E0;color:#3A5070;}
html.dark .pmtsoul-ws-employee-scope-tag{background:#2D2D2D;border-color:#3A3A35;color:#C0BFB8;}

.pmtsoul-ws-employee-write-auth{width:100%;border-collapse:collapse;font-size:12px;}
.pmtsoul-ws-employee-write-auth th,
.pmtsoul-ws-employee-write-auth td{padding:6px 10px;border:1px solid #E5E3DC;text-align:left;}
.pmtsoul-ws-employee-write-auth th{background:#FAFAF7;font-weight:500;color:#111;}
.pmtsoul-ws-employee-risk{display:inline-block;font-size:10px;padding:1px 6px;border-radius:2px;letter-spacing:0.04em;}
.pmtsoul-ws-employee-risk--high,
.pmtsoul-ws-employee-risk--critical{background:#FEF2F2;color:#991B1B;border:1px solid #FCA5A5;}
.pmtsoul-ws-employee-risk--medium,
.pmtsoul-ws-employee-risk--med{background:#FFF7E0;color:#7A4F00;border:1px solid #F0D89A;}
.pmtsoul-ws-employee-risk--low{background:#E6F4EC;color:#1A7F4F;border:1px solid #B4DBC2;}
html.dark .pmtsoul-ws-employee-write-auth th{background:#1E1E1B;color:#E8E6E0;}
html.dark .pmtsoul-ws-employee-write-auth th,
html.dark .pmtsoul-ws-employee-write-auth td{border-color:#2D2D2D;}

/* Agency intro 卡(/workspace/agents 首屏顶部 · Polsia 风) */
.pmtsoul-ws-agency-intro{background:#FFF;border:1px solid #E5E3DC;padding:24px;margin-bottom:24px;}
.pmtsoul-ws-agency-intro-head{display:flex;gap:16px;align-items:center;margin-bottom:18px;padding-bottom:16px;border-bottom:1px solid #E5E3DC;}
.pmtsoul-ws-agency-intro-emoji{font-size:42px;line-height:1;flex-shrink:0;width:54px;height:54px;display:flex;align-items:center;justify-content:center;background:#F0EEE6;border-radius:50%;}
.pmtsoul-ws-agency-intro-title{font-family:"Times New Roman",serif;font-size:22px;font-weight:500;color:#111;letter-spacing:-0.01em;margin-bottom:4px;}
.pmtsoul-ws-agency-intro-sub{font-size:12.5px;color:#666;letter-spacing:0.02em;}
.pmtsoul-ws-agency-intro-tagline{font-family:"Times New Roman",serif;font-size:15px;color:#333;margin-bottom:14px;font-style:italic;}
.pmtsoul-ws-agency-intro-groups{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:18px;}
.pmtsoul-ws-agency-intro-group{}
.pmtsoul-ws-agency-intro-cat{font-family:"Times New Roman",serif;font-size:14px;font-weight:500;color:#1A7F4F;margin-bottom:8px;border-bottom:1px dashed #C8E0CC;padding-bottom:4px;}
.pmtsoul-ws-agency-intro-caps{margin:0;padding-left:18px;font-size:12.5px;line-height:1.65;color:#444;}
.pmtsoul-ws-agency-intro-caps li{margin-bottom:4px;}
.pmtsoul-ws-agency-intro-caps strong{color:#111;font-weight:600;}
html.dark .pmtsoul-ws-agency-intro{background:#1E1E1B;border-color:#2D2D2D;}
html.dark .pmtsoul-ws-agency-intro-head{border-bottom-color:#2D2D2D;}
html.dark .pmtsoul-ws-agency-intro-emoji{background:#2D2D2D;}
html.dark .pmtsoul-ws-agency-intro-title{color:#E8E6E0;}
html.dark .pmtsoul-ws-agency-intro-sub,
html.dark .pmtsoul-ws-agency-intro-tagline{color:#A0A0A0;}
html.dark .pmtsoul-ws-agency-intro-cat{color:#22C55E;border-bottom-color:#2D4A35;}
html.dark .pmtsoul-ws-agency-intro-caps{color:#C0BFB8;}
html.dark .pmtsoul-ws-agency-intro-caps strong{color:#E8E6E0;}
.pmtsoul-ws-employee-empty{padding:40px 20px;text-align:center;color:#999;font-style:italic;background:#FAFAF7;border:1px dashed #C8C5BB;}
.pmtsoul-ws-employee-detail-section{display:flex;flex-direction:column;}
.pmtsoul-ws-employee-bullets{margin:0;padding-left:18px;font-size:13.5px;line-height:1.75;color:#333;}
.pmtsoul-ws-employee-bullets li{margin-bottom:4px;}
.pmtsoul-ws-employee-bullets strong{color:#111;font-weight:600;}
.pmtsoul-ws-employee-bullets--guard li::marker{color:#C49830;}
.pmtsoul-ws-employee-bullets--guard li{color:#555;}
.pmtsoul-ws-employee-bullets--mem li::marker{color:#1A7F4F;}
.pmtsoul-ws-employee-bullets-more{font-style:italic;color:#999;list-style:none;margin-left:-18px;}
html.dark .pmtsoul-ws-employee-bullets{color:#C0BFB8;}
html.dark .pmtsoul-ws-employee-bullets strong{color:#E8E6E0;}
html.dark .pmtsoul-ws-employee-bullets--guard li{color:#9E9B91;}

html.dark .pmtsoul-ws-employee-card{background:#1E1E1B;border-color:#2D2D2D;}
html.dark .pmtsoul-ws-employee-card:hover{border-color:#22C55E;box-shadow:0 4px 16px rgba(34,197,94,.12);}
html.dark .pmtsoul-ws-employee-avatar{background:#2D2D2D;}
html.dark .pmtsoul-ws-employee-name{color:#E8E6E0;}
html.dark .pmtsoul-ws-employee-tagline{color:#A0A0A0;}
html.dark .pmtsoul-ws-employee-stats{color:#A0A0A0;}
html.dark .pmtsoul-ws-employee-stats strong{color:#E8E6E0;}
html.dark .pmtsoul-ws-employee-cap-pill{background:#2D2D2D;border-color:#3A3A35;color:#C0BFB8;}
html.dark .pmtsoul-ws-employee-back{color:#C0BFB8;border-color:#3A3A35;background:transparent;}
html.dark .pmtsoul-ws-employee-back:hover{background:#2D2D2D;}
html.dark .pmtsoul-ws-employee-detail-head{border-bottom-color:#2D2D2D;}
html.dark .pmtsoul-ws-employee-detail-h3{color:#E8E6E0;}
html.dark .pmtsoul-ws-employee-empty{background:#161614;border-color:#3A3A35;color:#777;}

/* COL 1: Identity card */
.pmtsoul-ws-identity-card{background:#F0EEE6;border:1px solid #E5E3DC;padding:28px 20px 22px;text-align:center;margin-bottom:16px;}
.pmtsoul-ws-identity-title{font-family:"Times New Roman",serif;font-size:28px;line-height:1.1;margin-bottom:14px;color:#111;}
.pmtsoul-ws-identity-price{font-size:13px;color:#555;margin-bottom:18px;letter-spacing:0.04em;}
.pmtsoul-ws-identity-price strong{color:#111;font-weight:600;}
.pmtsoul-ws-identity-trial{font-size:11px;color:#666;margin-top:14px;letter-spacing:0.04em;}
.pmtsoul-ws-btn-primary-dark{display:inline-block;background:#111;color:#fff;padding:10px 22px;font-size:13px;font-weight:500;border:1px solid #111;letter-spacing:0.02em;}
.pmtsoul-ws-btn-primary-dark:hover{background:#000;}

/* GOD MODE button */
.pmtsoul-ws-btn-god{width:100%;background:linear-gradient(180deg,#E76F2F,#D4541E);color:#fff;border:1px solid #C44310;padding:11px 16px;font-size:13px;font-weight:600;letter-spacing:0.02em;margin-bottom:24px;box-shadow:0 1px 0 rgba(255,255,255,0.2) inset;}
.pmtsoul-ws-btn-god:hover{filter:brightness(1.05);}

/* Stat rows */
.pmtsoul-ws-stat-row{display:flex;justify-content:space-between;align-items:baseline;font-size:14px;margin-bottom:12px;color:#111;}
.pmtsoul-ws-stat-v{font-family:"Times New Roman",serif;font-size:18px;color:#111;}
.pmtsoul-ws-stat-v--gmv{color:#198F4F;}
.pmtsoul-ws-stat-v--warn{color:#C44310;}

/* Block buttons + hints */
.pmtsoul-ws-btn-block{width:100%;background:#fff;border:1px solid #C8C5BB;padding:8px 12px;font-size:12px;color:#111;margin-bottom:4px;}
.pmtsoul-ws-btn-block:hover{background:#F0EEE6;}
.pmtsoul-ws-btn-medium{background:#fff;border:1px solid #C8C5BB;padding:7px 12px;font-size:12px;color:#111;}
.pmtsoul-ws-btn-medium:hover{background:#F0EEE6;}
.pmtsoul-ws-btn-medium--active{background:#ECF8F1;border-color:#1F8F53;color:#157143;}
.pmtsoul-ws-btn-medium--active:hover{background:#DFF2E7;}
/* 2026-07-14 · 邮件模块「自动回复」状态 pill:999px + LED 点,对齐工作区状态语汇
   (「已自动回复」徽标/「实时同步中」绿点)。四态:is-on 绿 / is-suspended 琥珀 / 默认中性。 */
.pmtsoul-ws-autoreply-pill{display:inline-flex;align-items:center;gap:7px;border-radius:999px;padding:6px 14px;min-height:32px;font-family:inherit;font-size:12px;font-weight:600;cursor:pointer;background:var(--surface,#fff);border:1px solid var(--border,#C8C5BB);color:var(--muted,#6b6b6b);transition:background .15s ease,border-color .15s ease;}
.pmtsoul-ws-autoreply-pill:hover{background:var(--surface-alt,#F0EEE6);}
.pmtsoul-ws-autoreply-pill .arp-dot{width:7px;height:7px;border-radius:50%;background:var(--muted,#9a958c);flex:0 0 auto;}
.pmtsoul-ws-autoreply-pill.is-on{color:#157143;border-color:rgba(26,127,79,.35);background:rgba(26,127,79,.07);}
.pmtsoul-ws-autoreply-pill.is-on:hover{background:rgba(26,127,79,.13);}
.pmtsoul-ws-autoreply-pill.is-on .arp-dot{background:#1A7F4F;box-shadow:0 0 5px rgba(26,127,79,.5);}
.pmtsoul-ws-autoreply-pill.is-suspended{color:#8A6D0B;border-color:rgba(180,83,9,.32);background:rgba(180,83,9,.07);}
.pmtsoul-ws-autoreply-pill.is-suspended .arp-dot{background:#B45309;}
html.dark .pmtsoul-ws-autoreply-pill{background:#202020;border-color:#3A3A3A;color:#B9B4AA;}
html.dark .pmtsoul-ws-autoreply-pill:hover{background:#2A2A2A;}
html.dark .pmtsoul-ws-autoreply-pill.is-on{color:#3FA871;border-color:rgba(63,168,113,.4);background:rgba(63,168,113,.1);}
html.dark .pmtsoul-ws-autoreply-pill.is-suspended{color:#D98E3B;border-color:rgba(217,142,59,.4);background:rgba(217,142,59,.1);}
@media (pointer:coarse){.pmtsoul-ws-autoreply-pill{min-height:44px;padding:9px 16px;}}
.pmtsoul-ws-hint{font-size:10.5px;color:#888;letter-spacing:0.03em;text-align:center;margin:6px 0 16px;}
.pmtsoul-ws-updated-row{font-size:10.5px;color:#888;display:flex;gap:6px;align-items:center;margin-bottom:22px;}
.pmtsoul-ws-updated-row a{color:#111;text-decoration:underline;}

/* COL 2: Task cards */
.pmtsoul-ws-task-card{border:1.5px dashed #B0ACA0;background:transparent;padding:14px 16px;margin-bottom:12px;}
.pmtsoul-ws-task-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;gap:12px;}
.pmtsoul-ws-task-title{font-weight:600;font-size:14px;color:#111;}
.pmtsoul-ws-task-desc{font-size:12.5px;color:#555;line-height:1.55;}

/* Tags */
.pmtsoul-ws-tag{font-size:10px;font-weight:600;padding:2px 8px;border:1px solid #111;letter-spacing:0.04em;text-transform:uppercase;color:#111;background:#fff;flex-shrink:0;}
.pmtsoul-ws-tag--now{background:#E76F2F;color:#fff;border-color:#E76F2F;}
.pmtsoul-ws-tag--research{background:#fff;color:#111;}
.pmtsoul-ws-tag--outreach{background:#111;color:#fff;}
.pmtsoul-ws-tag--urgent{background:#C44310;color:#fff;border-color:#C44310;}

/* Document list rows */
.pmtsoul-ws-doc-row{display:flex;justify-content:space-between;align-items:center;padding:10px 0;border-bottom:1px dotted #C8C5BB;font-size:13.5px;color:#111;}
.pmtsoul-ws-doc-row:last-of-type{border-bottom:none;}
.pmtsoul-ws-doc-name{display:flex;align-items:center;gap:10px;}
.pmtsoul-ws-doc-icon{font-size:14px;opacity:0.55;display:inline-flex;align-items:center;}
/* 2026-05-26 · pixel-art icon system(替代 emoji),Polsia/Pilot 风 */
.pmts-pix{flex:0 0 auto;color:currentColor;vertical-align:-3px;opacity:0.78;}
.pmtsoul-ws-employee-avatar .pmts-pix{width:18px;height:18px;opacity:1;}
.pmtsoul-ws-employee-avatar--lg .pmts-pix{width:28px;height:28px;}
.pmtsoul-ws-role-emoji .pmts-pix,.pmtsoul-ws-slash-emoji .pmts-pix{width:14px;height:14px;}
.pmtsoul-ws-channel-icon .pmts-pix,.pmtsoul-ws-status-line-icon .pmts-pix,.pmtsoul-ws-module-head-icon .pmts-pix{width:14px;height:14px;}
.pmtsoul-ws-welcome-hero-emoji .pmts-pix,.pmtsoul-ws-agency-intro-emoji .pmts-pix,.pmtsoul-ws-employee-mission-icon .pmts-pix{width:24px;height:24px;}
.pmtsoul-ws-cap-icon .pmts-pix{width:14px;height:14px;}
/* 2026-05-30 · 初始化流 console row + workspace mini-chat 的 actor 头像(canonical 像素图标) */
.pmtsoul-ws-console-actor-icon,.pmtsoul-ws-mini-chat-actor-icon{display:inline-flex;align-items:center;}
.pmtsoul-ws-console-actor-icon .pmts-pix,.pmtsoul-ws-mini-chat-actor-icon .pmts-pix{width:13px;height:13px;vertical-align:-2px;opacity:1;}
.pmtsoul-ws-doc-icon .pmts-pix{opacity:1;color:#555;}
html.dark .pmtsoul-ws-doc-icon .pmts-pix{color:#bbb;}
.pmtsoul-ws-deliverable-chip-icon .pmts-pix{width:13px;height:13px;}
.pmtsoul-ws-doc-ts{font-size:10.5px;color:#888;}
.pmtsoul-ws-manage-link,.pmtsoul-ws-view-all{display:inline-block;font-size:11px;text-transform:uppercase;letter-spacing:0.06em;margin-top:10px;text-decoration:underline;color:#666;}
.pmtsoul-ws-manage-link:hover,.pmtsoul-ws-view-all:hover{color:#111;}

/* Website box */
.pmtsoul-ws-website-box{background:#fff;border:1px solid #C8C5BB;padding:12px;font:12.5px/1.4 "SF Mono",ui-monospace,monospace;color:#333;margin-bottom:10px;}

/* COL 3: Marketing ops blocks */
.pmtsoul-ws-ops-block{margin-bottom:28px;}
.pmtsoul-ws-ops-tweet{background:#fff;border:1px solid #C8C5BB;padding:14px;font-size:13px;color:#444;margin-bottom:8px;min-height:80px;line-height:1.55;}
.pmtsoul-ws-ops-tweet--compact{min-height:auto;}
.pmtsoul-ws-ops-tweet-title{font-weight:600;margin-bottom:4px;color:#111;}
.pmtsoul-ws-ops-tweet-meta{font-size:12px;color:#777;}

/* Email rows (buyer inquiries) */
.pmtsoul-ws-email-row{background:#FAFAF7;border:1px solid #E5E3DC;padding:12px;margin-bottom:10px;}
.pmtsoul-ws-email-from{font-size:11px;color:#777;margin-bottom:4px;font-family:"SF Mono",monospace;}
.pmtsoul-ws-email-subject-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px;gap:12px;}
.pmtsoul-ws-email-subject{font-size:13.5px;font-weight:500;color:#111;}
.pmtsoul-ws-email-ts{font-size:10.5px;color:#999;flex-shrink:0;}
.pmtsoul-ws-email-to{font-size:11px;color:#888;font-family:"SF Mono",monospace;}
.pmtsoul-ws-email-stats{font-size:11px;color:#888;padding:6px 0 10px;}

/* COL 4: Agent chat */
.pmtsoul-ws-chat-pane{border-left:1px solid #E5E3DC;display:flex;flex-direction:column;flex:1 1 auto;min-height:0;}
.pmtsoul-ws-chat-history{flex:1 1 auto;display:block;overflow-y:auto;padding:20px 18px;font-size:13.5px;line-height:1.55;color:#111;}
.pmtsoul-ws-chat-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;min-height:240px;text-align:center;color:#888;padding:24px;}
/* textarea 看上去像 single-line input(double 行高度兜底,避 placeholder 换行被裁)*/
textarea.pmtsoul-ws-chat-input{resize:none;min-height:54px;max-height:120px;line-height:1.45;font-family:inherit;padding-top:10px;padding-bottom:10px;}
textarea.pmtsoul-ws-chat-input::placeholder{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}

/* slash 命令面板 · workspace mini-chat 输 / 浮出 9 员工 */
.pmtsoul-ws-chat-input-bar{position:relative;}
.pmtsoul-ws-slash-palette{position:absolute;bottom:calc(100% + 6px);left:12px;right:12px;background:#FFF;border:1px solid #D8D5CB;box-shadow:0 -8px 24px rgba(0,0,0,0.08);max-height:min(420px,60vh);overflow-y:auto;z-index:50;}
.pmtsoul-ws-slash-item{display:grid;grid-template-columns:24px auto auto 1fr;gap:8px;align-items:baseline;width:100%;padding:8px 12px;background:transparent;border:0;cursor:pointer;text-align:left;font-size:13px;border-bottom:1px solid #F0EEE6;}
.pmtsoul-ws-slash-item:last-child{border-bottom:0;}
.pmtsoul-ws-slash-item:hover,
.pmtsoul-ws-slash-item--active{background:#E6F4EC;}
.pmtsoul-ws-slash-emoji{font-size:16px;line-height:1;}
.pmtsoul-ws-slash-name{font-weight:600;color:#111;}
.pmtsoul-ws-slash-role{color:#1A7F4F;font-size:11.5px;}
.pmtsoul-ws-slash-tag{color:#888;font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
html.dark .pmtsoul-ws-slash-palette{background:#1E1E1B;border-color:#2D2D2D;box-shadow:0 -8px 24px rgba(0,0,0,0.3);}
html.dark .pmtsoul-ws-slash-item{border-bottom-color:#2D2D2D;}
html.dark .pmtsoul-ws-slash-item:hover,
html.dark .pmtsoul-ws-slash-item--active{background:rgba(34,197,94,0.12);}
html.dark .pmtsoul-ws-slash-name{color:#E8E6E0;}
html.dark .pmtsoul-ws-slash-role{color:#22C55E;}
html.dark .pmtsoul-ws-slash-tag{color:#9E9B91;}

/* mini-chat 消息泡(workspace 内嵌 chat) */
/* 2026-05-26 · 减轻 bubble 视觉重量:去硬 border 改细灰底 + 圆角放大 */
.pmtsoul-ws-mini-chat-row{display:flex;width:100%;margin-bottom:10px;clear:both;}
.pmtsoul-ws-mini-chat-row--user{justify-content:flex-end;}
.pmtsoul-ws-mini-chat-row--assistant{justify-content:flex-start;}
.pmtsoul-ws-mini-chat-bubble{max-width:88%;padding:10px 14px;font-size:13px;line-height:1.55;border-radius:10px;border:none;overflow-wrap:anywhere;word-break:break-word;}
.pmtsoul-ws-mini-chat-row--assistant .pmtsoul-ws-mini-chat-bubble{width:88%;min-width:0;}
.pmtsoul-ws-mini-chat-bubble--user{background:#F2F0E8;color:#1A1A1A;}
.pmtsoul-ws-mini-chat-bubble--assistant{background:#FAFAF8;color:#1A1A1A;}
.pmtsoul-ws-mini-chat-recovery{margin:0 0 10px;padding:7px 9px;border:1px solid #E7D9A9;border-radius:8px;background:#FFF9E8;color:#785B16;font-size:11.5px;line-height:1.45;}
.pmtsoul-ws-mini-chat-row[data-ws-mini-chat-latest] .pmtsoul-ws-mini-chat-bubble{animation:pmtsMiniChatLatestFlash 2.8s ease-out 1;}
.pmtsoul-ws-mini-chat-row--user[data-ws-mini-chat-latest] .pmtsoul-ws-mini-chat-bubble{animation-name:pmtsMiniChatLatestUserFlash;}
.pmtsoul-ws-mini-chat-bubble--error{border-left-color:#DC2626;background:#FEF2F2;}
.pmtsoul-ws-mini-chat-bubble--error .pmtsoul-ws-mini-chat-actor{color:#DC2626;border-bottom-color:rgba(220,38,38,0.25);}
.pmtsoul-ws-mini-chat-bubble--error .pmtsoul-ws-mini-chat-actor strong{color:#991B1B;}
.pmtsoul-ws-mini-chat-bubble--error a{color:#DC2626;text-decoration:underline;}
html.dark .pmtsoul-ws-mini-chat-bubble--error{background:#3A1A1A;border-left-color:#DC2626;}
html.dark .pmtsoul-ws-mini-chat-bubble--error .pmtsoul-ws-mini-chat-actor{color:#F87171;}
.pmtsoul-ws-mini-chat-actor{font-size:11px;color:#1A7F4F;margin-bottom:6px;letter-spacing:0.02em;border-bottom:1px dashed rgba(26,127,79,0.25);padding-bottom:4px;}
.pmtsoul-ws-mini-chat-actor strong{font-weight:600;color:#0F6A2F;}
.pmtsoul-ws-mini-chat-bubble--user{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;}
.pmtsoul-ws-mini-chat-body{display:block;width:100%;max-width:100%;font-family:inherit;font-size:13.5px;line-height:1.65;}
.pmtsoul-ws-mini-chat-body p{margin:0 0 10px;}
.pmtsoul-ws-mini-chat-body p:last-child{margin-bottom:0;}
.pmtsoul-ws-mini-chat-body ul,
.pmtsoul-ws-mini-chat-body ol{margin:8px 0 10px 18px;padding:0;}
.pmtsoul-ws-mini-chat-body li{margin:3px 0;}
.pmtsoul-ws-mini-chat-body pre{max-width:100%;overflow:auto;white-space:pre-wrap;}
.pmtsoul-ws-mini-chat-body code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.92em;}
.pmtsoul-ws-mini-chat-row[data-ws-mini-chat-thinking] .pmtsoul-ws-mini-chat-body{color:#1A7F4F;animation:pmtsMiniChatThinkingPulse 1.15s ease-in-out infinite;}
.pmtsoul-ws-mini-chat-stream-status{margin-top:10px;padding-top:8px;border-top:1px dashed rgba(26,127,79,0.22);font-size:12px;color:#1A7F4F;animation:pmtsMiniChatThinkingPulse 1.15s ease-in-out infinite;}
@keyframes pmtsMiniChatThinkingPulse{
  0%,100%{opacity:.38;}
  50%{opacity:1;}
}
@keyframes pmtsMiniChatLatestFlash{
  0%{transform:translateY(4px);filter:brightness(1.03);box-shadow:0 0 0 1px rgba(26,127,79,0.18),0 8px 28px rgba(26,127,79,0.08);}
  38%{transform:translateY(0);filter:brightness(1.01);box-shadow:0 0 0 1px rgba(26,127,79,0.14),0 6px 20px rgba(26,127,79,0.06);}
  100%{transform:translateY(0);filter:none;box-shadow:none;}
}
@keyframes pmtsMiniChatLatestUserFlash{
  0%{transform:translateY(4px);filter:brightness(1.03);box-shadow:0 0 0 1px rgba(189,134,0,0.22),0 8px 24px rgba(189,134,0,0.08);}
  38%{transform:translateY(0);filter:brightness(1.01);box-shadow:0 0 0 1px rgba(189,134,0,0.14),0 6px 20px rgba(189,134,0,0.06);}
  100%{transform:translateY(0);filter:none;box-shadow:none;}
}
html.dark .pmtsoul-ws-mini-chat-bubble--user{background:#2D2D2D;color:#E8E6E0;border-color:#3A3A35;}
html.dark .pmtsoul-ws-mini-chat-bubble--assistant{background:#1E1E1B;color:#E8E6E0;border-color:#2D2D2D;border-left-color:#22C55E;}
html.dark .pmtsoul-ws-mini-chat-recovery{border-color:#65562B;background:#2C2718;color:#D8BE72;}
html.dark .pmtsoul-ws-mini-chat-actor{color:#22C55E;border-bottom-color:rgba(34,197,94,0.25);}
html.dark .pmtsoul-ws-mini-chat-row[data-ws-mini-chat-thinking] .pmtsoul-ws-mini-chat-body{color:#22C55E;}
html.dark .pmtsoul-ws-mini-chat-stream-status{color:#22C55E;border-top-color:rgba(34,197,94,0.24);}
html.dark .pmtsoul-ws-mini-chat-actor strong{color:#22C55E;}
.pmtsoul-ws-chat-empty-icon{font-size:42px;margin-bottom:14px;opacity:.6;}
.pmtsoul-ws-chat-empty-title{font-family:"Times New Roman",serif;font-size:20px;color:#444;margin-bottom:10px;letter-spacing:-0.01em;}
.pmtsoul-ws-chat-empty-hint{font-size:12.5px;color:#888;line-height:1.7;max-width:280px;}
html.dark .pmtsoul-ws-chat-empty{color:#777;}
html.dark .pmtsoul-ws-chat-empty-title{color:#C0BFB8;}
html.dark .pmtsoul-ws-chat-empty-hint{color:#777;}
.pmtsoul-ws-chat-msg{margin-bottom:18px;}
.pmtsoul-ws-chat-msg strong{font-weight:600;}
.pmtsoul-ws-chat-msg ul{padding-left:20px;margin-top:6px;}
.pmtsoul-ws-chat-msg li{margin-bottom:4px;}
.pmtsoul-ws-chat-msg a{color:#198F4F;text-decoration:underline;}
.pmtsoul-ws-chat-next{background:#FFF7E0;border-left:3px solid #E76F2F;padding:10px 12px;font-size:13px;margin-top:14px;color:#111;}
.pmtsoul-ws-chat-next-label{display:block;font-weight:700;font-size:11px;color:#C44310;letter-spacing:0.06em;text-transform:uppercase;margin-bottom:4px;}
.pmtsoul-ws-chat-input-bar{border-top:1px solid #E5E3DC;padding:12px 14px;display:flex;align-items:center;gap:10px;flex-shrink:0;}
.pmtsoul-ws-chat-input{flex:1;border:1px solid #C8C5BB;border-radius:4px;padding:9px 12px;font-size:13px;line-height:1.4;font-family:inherit;outline:none;background:#FAFAF7;color:#111;}
.pmtsoul-ws-chat-input:focus{background:#fff;border-color:#888;}
.pmtsoul-ws-btn-send{background:#111;color:#fff;border:1px solid #111;padding:8px 14px;font-size:12px;text-transform:uppercase;letter-spacing:0.06em;}
.pmtsoul-ws-btn-send:hover{background:#000;}

/* Info popover (dev metadata; toggled by 信息 button in brand-bar) */
.pmtsoul-ws-info-popover{position:fixed;top:96px;right:24px;background:#fff;border:1px solid #C8C5BB;border-radius:4px;padding:12px 14px;display:flex;flex-direction:column;gap:8px;font-size:12px;box-shadow:0 4px 16px rgba(0,0,0,0.08);z-index:10;min-width:280px;}
.pmtsoul-ws-info-popover[hidden]{display:none;}
.pmtsoul-ws-info-row{display:grid;grid-template-columns:64px minmax(0,1fr);gap:10px;align-items:start;}
.pmtsoul-ws-info-label{font-size:11px;font-weight:600;color:#777;text-transform:uppercase;letter-spacing:0.04em;padding-top:2px;}
.pmtsoul-ws-info-value{font-family:"SF Mono",ui-monospace,monospace;font-size:11.5px;color:#111;word-break:break-all;background:#F0EEE6;border-radius:3px;padding:3px 7px;}

/* Responsive — 下面 split 在窄屏调整 */
@media (max-width: 1280px){
  .pmtsoul-ws-main-split{grid-template-columns:1fr 340px;}
  .pmtsoul-ws-workspace-grid{grid-template-columns:240px 1fr 1fr;}
}
@media (max-width: 1080px){
  .pmtsoul-ws-main-split{grid-template-columns:1fr 320px;}
  .pmtsoul-ws-workspace-grid{grid-template-columns:1fr 1fr;}
  .pmtsoul-ws-workspace-grid > .pmtsoul-ws-col:first-child{grid-column:1/-1;}
}
@media (max-width: 800px){
  .pmtsoul-ws-main-split{grid-template-columns:1fr;grid-template-rows:1fr 1fr;}
  .pmtsoul-ws-chat-side{border-left:none;border-top:1px solid #E5E3DC;}
  .pmtsoul-ws-workspace-grid{grid-template-columns:1fr;}
  .pmtsoul-ws-workspace-grid > .pmtsoul-ws-col:first-child{grid-column:auto;}
}

/* Legacy mobile fallback (老 .pmtsoul-ws-layout 用,保留兼容) */
@media (max-width: 1024px){
  .pmtsoul-ws-layout{grid-template-columns:240px 1fr 1fr 380px;}
}
@media (max-width: 900px){
  .pmtsoul-ws-layout{grid-template-columns:1fr;}
  .pmtsoul-ws-col--chat{order:-1;border-left:none;border-bottom:1px solid #E5E3DC;}
  .pmtsoul-ws-chat-history{max-height:280px;}
}

/* ============================================================
 * 2026-05-25 · Mobile (≤640px) · 单列流 + 右下浮动 fab(Polsia 模式)
 * ------------------------------------------------------------
 * 策略:
 *   - workspace 单列纵向滚动占满全屏
 *   - chat 默认 hidden,右下角浮动圆按钮 fab 56px
 *   - 点 fab → body.pmtsoul-ws-chat-open → chat 全屏 overlay
 *   - close X → 移除 class 回 workspace
 *   - input font-size:16px 防 iOS 自动 zoom
 *   - html/body overflow:hidden + overscroll-behavior:none 防整页 elastic 移动
 * ============================================================ */

/* 桌面端 fab + close 默认 hidden(只在手机显) */
.pmtsoul-ws-chat-fab,
.pmtsoul-ws-chat-close-overlay{display:none;}

@media (max-width: 640px){
  /* 0. 锁视口 — 防整页 elastic scroll / 横向移动 */
  html, body{
    overflow:hidden;
    overscroll-behavior:none;
    -webkit-overflow-scrolling:auto;
    touch-action:manipulation;
  }
  body[data-active-panel="workspaces"]{
    position:fixed;
    width:100%;
    height:100%;
    height:100dvh;
  }

  /* 1. brand-bar wrap + 字号缩 */
  .pmtsoul-ws-brand-bar{padding:8px 12px;flex-wrap:wrap;row-gap:6px;column-gap:8px;}
  .pmtsoul-ws-brand-logo{font-size:16px;}
  .pmtsoul-ws-brand-actions{gap:4px;}
  .pmtsoul-ws-brand-bar > *{font-size:12px;}
  .pmtsoul-ws-brand-bar button{padding:4px 8px !important;font-size:11px !important;}

  /* 2. console 行紧凑 */
  .pmtsoul-ws-console-summary{padding:6px 12px;gap:6px;font-size:11px;}
  .pmtsoul-ws-console-toggle{padding:2px 6px;font-size:10px;letter-spacing:.02em;}
  .pmtsoul-ws-console-detail{padding:4px 12px 6px;font-size:10.5px;}
  .pmtsoul-ws-console--collapsed .pmtsoul-ws-console-detail{max-height:36px;}
  .pmtsoul-ws-console--expanded .pmtsoul-ws-console-detail{max-height:40vh;}

  /* 3. main-split 改 flex 单列纵向 — workspace 占满屏,chat 默认 hidden */
  .pmtsoul-ws-main-split{
    display:flex;
    flex-direction:column;
    grid-template-columns:1fr;
    grid-template-rows:none;
    overflow:hidden;
    position:relative;
  }
  .pmtsoul-ws-workspace{
    flex:1 1 auto;
    overflow-y:auto;
    overflow-x:hidden;
    padding-bottom:env(safe-area-inset-bottom,0px);
  }
  .pmtsoul-ws-workspace-grid{
    grid-template-columns:1fr;
    min-height:0;
  }
  .pmtsoul-ws-col{padding:14px 12px;}
  .pmtsoul-ws-col--chat{display:none;}

  /* 4. chat-side 默认 hidden (mobile) */
  .pmtsoul-ws-chat-side{display:none;}

  /* 5. fab 浮动按钮 — 右下圆,56px,黑底白图标 */
  .pmtsoul-ws-chat-fab{
    display:flex;
    align-items:center;
    justify-content:center;
    position:fixed;
    right:16px;
    bottom:calc(16px + env(safe-area-inset-bottom,0px));
    width:56px;
    height:56px;
    border-radius:50%;
    background:#111;
    color:#fff;
    border:none;
    box-shadow:0 4px 14px rgba(0,0,0,0.25);
    z-index:80;
    cursor:pointer;
    -webkit-tap-highlight-color:transparent;
    transition:transform .15s ease, box-shadow .15s ease;
  }
  .pmtsoul-ws-chat-fab:active{transform:scale(0.94);}
  .pmtsoul-ws-chat-fab svg{width:24px;height:24px;display:block;}

  /* 6. chat-open 状态:chat-side 全屏 overlay,fab 隐,close X 显
   *    用 !important 防被桌面 grid 布局 specificity 覆盖,
   *    + height/min-height 强制撑满 防 chat-pane 缩高 */
  body.pmtsoul-ws-chat-open .pmtsoul-ws-chat-side{
    display:flex !important;
    position:fixed !important;
    inset:0 !important;
    z-index:100;
    background:#fff;
    flex-direction:column !important;
    width:100% !important;
    height:100vh !important;
    height:100dvh !important;
    max-height:none !important;
    padding-top:env(safe-area-inset-top,0px);
    padding-bottom:env(safe-area-inset-bottom,0px);
    border:none !important;
    box-shadow:none !important;
  }
  body.pmtsoul-ws-chat-open .pmtsoul-ws-chat-fab{display:none;}
  body.pmtsoul-ws-chat-open .pmtsoul-ws-chat-close-overlay{
    display:flex;
    align-items:center;
    justify-content:center;
    position:fixed;
    top:calc(12px + env(safe-area-inset-top,0px));
    right:12px;
    width:40px;
    height:40px;
    border-radius:50%;
    background:rgba(0,0,0,0.06);
    color:#111;
    border:none;
    z-index:110;
    cursor:pointer;
    -webkit-tap-highlight-color:transparent;
  }
  body.pmtsoul-ws-chat-open .pmtsoul-ws-chat-close-overlay:active{background:rgba(0,0,0,0.12);}
  /* 手机全屏使用外部关闭按钮；抽屉内按钮只服务桌面端。 */
  body.pmtsoul-ws-chat-open .pmtsoul-ws-chat-side .pmtsoul-ws-chat-toolbar{
    display:none !important;
  }
  /* overlay 内 chat-pane 必须 100% 撑满 chat-side
   *    .pmtsoul-ws-chat-pane base 无 flex 样式,这里强制 column + height:100% */
  body.pmtsoul-ws-chat-open .pmtsoul-ws-chat-side .pmtsoul-ws-chat-pane{
    display:flex !important;
    flex-direction:column !important;
    flex:1 1 auto !important;
    height:100% !important;
    min-height:0 !important;
    width:100% !important;
    padding-top:52px; /* 给顶部 close X 留位 */
    box-sizing:border-box;
  }
  body.pmtsoul-ws-chat-open .pmtsoul-ws-chat-history{
    flex:1 1 auto !important;
    min-height:0 !important;
    overflow-y:auto;
    padding:12px;
    font-size:14px;
    max-height:none !important;
  }
  body.pmtsoul-ws-chat-open .pmtsoul-ws-chat-input-bar{
    flex:0 0 auto !important;
    flex-shrink:0 !important;
    border-top:1px solid #E5E3DC;
    padding:10px 12px;
    margin-top:auto; /* 兜底:即使 chat-history 不 flex:1,input bar 也贴底 */
  }
  /* overlay 模式下 input 字号 16px 防 iOS auto zoom */
  body.pmtsoul-ws-chat-open textarea.pmtsoul-ws-chat-input,
  body.pmtsoul-ws-chat-open .pmtsoul-ws-chat-input{
    font-size:16px;
    min-height:44px;
    padding:10px 12px;
  }

  /* 7. 模块卡紧凑 */
  .pmtsoul-ws-module{margin-bottom:16px;}
  .pmtsoul-ws-module-head{gap:6px;padding-bottom:4px;margin-bottom:8px;}
  .pmtsoul-ws-module-head-icon{font-size:15px;}
  .pmtsoul-ws-module-head-title{font-size:15px;}
  .pmtsoul-ws-module-head-meta{font-size:10px;gap:4px;}
  .pmtsoul-ws-section-title{font-size:16px;margin-bottom:10px;padding-bottom:6px;}
  .pmtsoul-ws-section-title--gap{margin-top:20px;}

  /* 8. employee grid → 2 列 */
  .pmtsoul-ws-employee-grid{
    grid-template-columns:repeat(2,minmax(0,1fr));
    gap:10px;
  }

  /* 9. module-tabs 横向滚动条更细 */
  .merchant-ws-module-tabs{padding:0 2px;}
  .merchant-ws-module-tab{padding:9px 10px 7px;font-size:12px;}
  .merchant-ws-module-panel--hero{padding:14px 12px 16px;}

  /* 10. info popover 不要全屏 */
  .pmtsoul-ws-info-row{grid-template-columns:56px minmax(0,1fr);gap:8px;}
  .pmtsoul-ws-info-value{font-size:10.5px;padding:2px 5px;}

  /* 11. 全屏 overlay 时 fab 上的展开按钮 hide (overlay 已最大) */
  body.pmtsoul-ws-chat-open .pmtsoul-ws-chat-toolbar{display:none;}
}

/* ============================================================
 * 2026-05-25 V2 · 模块底部「查看全部 →」link + manage modal
 * ============================================================ */
.pmtsoul-ws-module-foot{
  border-top:1px dashed #E5E3DC;
  padding:6px 0 0;
  margin-top:8px;
  text-align:right;
}
.pmtsoul-ws-module-viewall{
  font-size:11px;
  color:#888;
  text-decoration:none;
  cursor:pointer;
  letter-spacing:0.02em;
  font-family:-apple-system,BlinkMacSystemFont,sans-serif;
}
.pmtsoul-ws-module-viewall:hover{color:#1A7F4F;text-decoration:underline;}
html.dark .pmtsoul-ws-module-foot{border-top-color:#2D2D2D;}
html.dark .pmtsoul-ws-module-viewall{color:#A8A8A8;}
html.dark .pmtsoul-ws-module-viewall:hover{color:#22C55E;}

/* Manage modal — 全屏遮罩 + 中央卡 */
.pmtsoul-ws-mgr-modal{
  display:none;
  position:fixed;
  inset:0;
  z-index:200;
  background:var(--ui-dialog-backdrop);
  align-items:flex-start;
  justify-content:center;
  padding:48px 16px 16px;
  overflow-y:auto;
  -webkit-tap-highlight-color:transparent;
}
body.pmtsoul-ws-mgr-open .pmtsoul-ws-mgr-modal{display:flex;}
.pmtsoul-ws-mgr-card{
  background:var(--ui-dialog-bg);
  width:100%;
  max-width:780px;
  border:1px solid var(--ui-dialog-border);
  border-radius:var(--ui-dialog-radius);
  padding:24px 28px 28px;
  box-shadow:var(--ui-dialog-shadow);
  max-height:calc(100vh - 64px);
  display:flex;
  flex-direction:column;
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Noto Sans CJK SC",sans-serif;
}
.pmtsoul-ws-mgr-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  margin-bottom:18px;
  padding-bottom:12px;
  border-bottom:1px solid #E5E3DC;
}
.pmtsoul-ws-mgr-title{
  font-size:18px;
  font-weight:600;
  font-family:var(--font-ui);
  color:var(--text);
}
.pmtsoul-ws-mgr-close{
  background:#fff;
  border:1px solid #C8C5BB;
  border-radius:4px;
  padding:4px 12px;
  font-size:11px;
  font-weight:600;
  letter-spacing:0.08em;
  color:#111;
  cursor:pointer;
  box-shadow:1px 1px 0 #C8C5BB;
}
.pmtsoul-ws-mgr-close:hover{background:#F5F4EE;}
.pmtsoul-ws-mgr-tabs{
  display:flex;
  gap:24px;
  margin-bottom:18px;
  border-bottom:1px solid #E5E3DC;
}
.pmtsoul-ws-mgr-tab{
  background:transparent;
  border:none;
  padding:8px 0 12px;
  font-size:14px;
  font-weight:500;
  color:#888;
  cursor:pointer;
  border-bottom:2px solid transparent;
  margin-bottom:-1px;
  letter-spacing:0.01em;
}
.pmtsoul-ws-mgr-tab:hover{color:#111;}
.pmtsoul-ws-mgr-tab--active{color:#111;font-weight:600;border-bottom-color:#111;}
.pmtsoul-ws-mgr-body{
  flex:1 1 auto;
  overflow-y:auto;
  display:flex;
  flex-direction:column;
  gap:12px;
}
.pmtsoul-ws-mgr-loading,
.pmtsoul-ws-mgr-empty{
  text-align:center;
  color:#888;
  padding:32px 16px;
  font-size:13px;
}
.pmtsoul-ws-mgr-item{
  background:#F5F4EE;
  border:1px solid #E5E3DC;
  border-radius:6px;
  padding:14px 16px;
}
.pmtsoul-ws-mgr-item-title{
  font-size:14px;
  font-weight:600;
  color:#111;
  margin-bottom:6px;
}
.pmtsoul-ws-mgr-item-desc{
  font-size:13px;
  color:#555;
  line-height:1.5;
  margin-bottom:8px;
}
.pmtsoul-ws-mgr-item-foot{
  display:flex;
  gap:10px;
  font-size:11px;
  align-items:center;
}
.pmtsoul-ws-mgr-item-owner{color:#888;}
.pmtsoul-ws-mgr-item-tag{
  background:#fff;
  border:1px solid #C8C5BB;
  border-radius:99px;
  padding:1px 9px;
  color:#555;
  font-family:"SF Mono",ui-monospace,monospace;
  letter-spacing:0.04em;
}
/* 2026-05-26 · 生成时间 ago chip(纯文本,无 border) */
.pmtsoul-ws-mgr-item-ts{
  margin-left:auto;
  color:#777;
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:11px;
  letter-spacing:0.03em;
  white-space:nowrap;
}
html.dark .pmtsoul-ws-mgr-item-ts{color:#888;}

/* 2026-05-26 · documents modal 专用单行布局
   icon (24px pixel art) + title (bold serif) + ago caps (mono right)
   不显 owner / desc / status — 截图风格 */
.pmtsoul-ws-mgr-doc-row{
  display:flex;
  align-items:center;
  gap:16px;
  padding:18px 4px;
  border-bottom:1px solid #E8E5DD;
  transition:background .12s;
}
.pmtsoul-ws-mgr-doc-row:hover{background:#F5F2EA;}
.pmtsoul-ws-mgr-doc-row:last-child{border-bottom:0;}
.pmtsoul-ws-mgr-doc-icon{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:28px;
  height:28px;
  flex:0 0 28px;
  color:#3A3A3A;
}
.pmtsoul-ws-mgr-doc-icon svg{width:24px;height:24px;}
.pmtsoul-ws-mgr-doc-title{
  flex:1;
  font-family:'Times New Roman',Times,serif;
  font-size:18px;
  font-weight:700;
  color:#1A1A1A;
  line-height:1.3;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.pmtsoul-ws-mgr-doc-ago{
  flex:0 0 auto;
  margin-left:16px;
  color:#999;
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:12px;
  letter-spacing:0.08em;
  white-space:nowrap;
}
html.dark .pmtsoul-ws-mgr-doc-row{border-bottom-color:#2D2D2D;}
html.dark .pmtsoul-ws-mgr-doc-row:hover{background:#222;}
html.dark .pmtsoul-ws-mgr-doc-icon{color:#D0CFC8;}
html.dark .pmtsoul-ws-mgr-doc-title{color:#E8E6E0;}
html.dark .pmtsoul-ws-mgr-doc-ago{color:#888;}

html.dark .pmtsoul-ws-mgr-card{background:#1A1A1A;}
html.dark .pmtsoul-ws-mgr-head{border-bottom-color:#2D2D2D;}
html.dark .pmtsoul-ws-mgr-title{color:#E8E6E0;}
html.dark .pmtsoul-ws-mgr-close{background:#1A1A1A;color:#E8E6E0;border-color:#3A3A3A;box-shadow:1px 1px 0 #3A3A3A;}
html.dark .pmtsoul-ws-mgr-close:hover{background:#222;}
html.dark .pmtsoul-ws-mgr-tabs{border-bottom-color:#2D2D2D;}
html.dark .pmtsoul-ws-mgr-tab{color:#888;}
html.dark .pmtsoul-ws-mgr-tab:hover{color:#E8E6E0;}
html.dark .pmtsoul-ws-mgr-tab--active{color:#E8E6E0;border-bottom-color:#E8E6E0;}
html.dark .pmtsoul-ws-mgr-item{background:#222;border-color:#2D2D2D;}
html.dark .pmtsoul-ws-mgr-item-title{color:#E8E6E0;}
html.dark .pmtsoul-ws-mgr-item-desc{color:#A8A8A8;}

/* 手机端:modal 全屏 */
@media (max-width: 640px){
  .pmtsoul-ws-mgr-modal{padding:0;}
  .pmtsoul-ws-mgr-card{
    max-width:none;
    max-height:100vh;
    height:100vh;
    border-radius:0;
    padding:16px 14px 18px;
  }
  .pmtsoul-ws-mgr-title{font-size:18px;}
  .pmtsoul-ws-mgr-tabs{gap:14px;overflow-x:auto;white-space:nowrap;}
  .pmtsoul-ws-mgr-tab{font-size:13px;flex-shrink:0;}
}

/* ============================================================
 * 2026-05-25 V2 · Email 模块 Polsia 风 + 单图/单视频 tile
 * ============================================================ */
.pmtsoul-ws-email-from{
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:11px;
  color:#888;
  margin-bottom:10px;
  letter-spacing:0.06em;
}
.pmtsoul-ws-email-row{
  background:#F5F4EE;
  border:1px solid #E5E3DC;
  border-radius:6px;
  padding:10px 12px;
  margin-bottom:10px;
  cursor:pointer;
  position:relative;
}
.pmtsoul-ws-email-row:hover{background:#EFEDE5;}
.pmtsoul-ws-email-subject{
  font-family:"Times New Roman",serif;
  font-size:14px;
  font-weight:500;
  color:#111;
  /* 2026-05-27 · 给右上 ts 留位,防 subject 长文本下钻覆盖 timestamp */
  padding-right:80px;
  line-height:1.4;
  word-wrap:break-word;
}
.pmtsoul-ws-email-ts{
  position:absolute;
  top:10px;
  right:12px;
  font-size:10px;
  font-family:"SF Mono",ui-monospace,monospace;
  color:#9A9685;
  letter-spacing:0.04em;
  /* 不参与 hover / wrap;固定占位 */
  white-space:nowrap;
}
.pmtsoul-ws-email-to{
  margin-top:4px;
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:10px;
  color:#9A9685;
  letter-spacing:0.04em;
}
.pmtsoul-ws-email-stats{
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:11px;
  color:#888;
  margin:8px 0 10px;
  letter-spacing:0.06em;
}
.pmtsoul-ws-media-grid--single{
  grid-template-columns:1fr;
  max-width:100%;
}
.pmtsoul-ws-media-grid--single .pmtsoul-ws-media-tile img{
  width:100%;
  aspect-ratio:1/1;
  object-fit:cover;
  border-radius:6px;
}

html.dark .pmtsoul-ws-email-from{color:#A8A8A8;}
html.dark .pmtsoul-ws-email-row{background:#222;border-color:#2D2D2D;}
html.dark .pmtsoul-ws-email-row:hover{background:#2A2A2A;}
html.dark .pmtsoul-ws-email-subject{color:#E8E6E0;}
html.dark .pmtsoul-ws-email-ts,
html.dark .pmtsoul-ws-email-to{color:#888;}
html.dark .pmtsoul-ws-email-stats{color:#A8A8A8;}

/* 超窄屏(≤380px,iPhone SE 之类)再压一档 */
@media (max-width: 380px){
  .pmtsoul-ws-brand-bar{padding:6px 10px;}
  .pmtsoul-ws-brand-logo{font-size:15px;}
  .pmtsoul-ws-employee-grid{grid-template-columns:1fr;}
  .pmtsoul-ws-col{padding:12px 10px;}
  .pmtsoul-ws-chat-fab{width:52px;height:52px;right:12px;}
}

/* Dark mode 适配 */
@media (max-width: 640px){
  html.dark body.pmtsoul-ws-chat-open .pmtsoul-ws-chat-side{
    background:#1A1A1A;
  }
  html.dark .pmtsoul-ws-chat-fab{background:#22C55E;color:#0a0a0a;}
  html.dark body.pmtsoul-ws-chat-open .pmtsoul-ws-chat-close-overlay{
    background:rgba(255,255,255,0.1);
    color:#E8E6E0;
  }
}

/* Dark mode: invert canvas + paper, keep accents */
html.dark .pmtsoul-ws-erp{background:#1A1A1A;color:#E8E6E0;}
html.dark .pmtsoul-ws-brand-bar{background:#1A1A1A;border-bottom-color:#2D2D2D;}
html.dark .pmtsoul-ws-brand-logo{color:#E8E6E0;}
html.dark .pmtsoul-ws-btn-pill{background:#252525;border-color:#3A3A3A;color:#E8E6E0;}
html.dark .pmtsoul-ws-btn-pill:hover{background:#2F2F2F;}
html.dark .pmtsoul-ws-layout{background:#2D2D2D;}
html.dark .pmtsoul-ws-col{background:#1A1A1A;}
html.dark .pmtsoul-ws-col--chat{background:#161616;}
html.dark .pmtsoul-ws-section-title{border-bottom-color:#2D2D2D;color:#E8E6E0;}
html.dark .pmtsoul-ws-identity-card{background:#202020;border-color:#2D2D2D;}
html.dark .pmtsoul-ws-identity-title{color:#E8E6E0;}
html.dark .pmtsoul-ws-identity-price{color:#999;}
html.dark .pmtsoul-ws-identity-price strong{color:#E8E6E0;}
html.dark .pmtsoul-ws-btn-primary-dark{background:#E8E6E0;color:#111;border-color:#E8E6E0;}
html.dark .pmtsoul-ws-stat-row{color:#E8E6E0;}
html.dark .pmtsoul-ws-stat-v{color:#E8E6E0;}
html.dark .pmtsoul-ws-btn-block,html.dark .pmtsoul-ws-btn-medium{background:#202020;border-color:#3A3A3A;color:#E8E6E0;}
html.dark .pmtsoul-ws-btn-block:hover,html.dark .pmtsoul-ws-btn-medium:hover{background:#2A2A2A;}
html.dark .pmtsoul-ws-hint,html.dark .pmtsoul-ws-updated-row,html.dark .pmtsoul-ws-doc-ts,html.dark .pmtsoul-ws-email-stats{color:#777;}
html.dark .pmtsoul-ws-updated-row a{color:#E8E6E0;}
html.dark .pmtsoul-ws-task-card{border-color:#4A4A4A;}
html.dark .pmtsoul-ws-task-title,html.dark .pmtsoul-ws-task-desc{color:#D0CDC4;}
html.dark .pmtsoul-ws-task-desc{color:#9E9B91;}
html.dark .pmtsoul-ws-tag{background:#202020;color:#E8E6E0;border-color:#E8E6E0;}
html.dark .pmtsoul-ws-tag--research{background:#202020;color:#E8E6E0;}
html.dark .pmtsoul-ws-tag--outreach{background:#E8E6E0;color:#111;}
html.dark .pmtsoul-ws-doc-row{border-bottom-color:#2D2D2D;color:#D0CDC4;}
html.dark .pmtsoul-ws-doc-icon{opacity:0.45;}
html.dark .pmtsoul-ws-website-box{background:#202020;border-color:#3A3A3A;color:#B5B2A8;}
html.dark .pmtsoul-ws-ops-tweet{background:#202020;border-color:#3A3A3A;color:#C0BDB3;}
html.dark .pmtsoul-ws-ops-tweet-title{color:#E8E6E0;}
html.dark .pmtsoul-ws-ops-tweet-meta{color:#999;}
html.dark .pmtsoul-ws-email-row{background:#1F1F1F;border-color:#2D2D2D;}
html.dark .pmtsoul-ws-email-subject{color:#E8E6E0;}
html.dark .pmtsoul-ws-chat-pane{border-left-color:#2D2D2D;}
html.dark .pmtsoul-ws-chat-history{color:#E8E6E0;}
html.dark .pmtsoul-ws-chat-next{background:#2A220E;border-left-color:#E76F2F;color:#E8E6E0;}
html.dark .pmtsoul-ws-chat-input-bar{border-top-color:#2D2D2D;}
html.dark .pmtsoul-ws-chat-input{background:#1F1F1F;border-color:#3A3A3A;color:#E8E6E0;}
html.dark .pmtsoul-ws-chat-input:focus{background:#161616;border-color:#777;}
html.dark .pmtsoul-ws-btn-send{background:#E8E6E0;color:#111;border-color:#E8E6E0;}
html.dark .pmtsoul-ws-info-popover{background:#202020;border-color:#3A3A3A;box-shadow:0 4px 16px rgba(0,0,0,0.3);}
html.dark .pmtsoul-ws-info-label{color:#999;}
html.dark .pmtsoul-ws-info-value{background:#161616;color:#E8E6E0;}

/* === v2 一目了然 additions === */

/* Status line — 每列顶部"一句话状态总结" */
.pmtsoul-ws-status-line{display:flex;align-items:center;gap:8px;background:#F0EEE6;border:1px solid #E5E3DC;border-left:3px solid #198F4F;padding:8px 12px;margin-bottom:16px;font-size:13px;color:#111;}
.pmtsoul-ws-status-line--warn{border-left-color:#C44310;background:#FBEFE9;}
.pmtsoul-ws-status-line-icon{font-size:14px;}
.pmtsoul-ws-status-line-text{flex:1;}
.pmtsoul-ws-status-line-text strong{font-weight:600;}
.pmtsoul-ws-c-urgent{color:#C44310;font-weight:600;}
.pmtsoul-ws-c-ready{color:#198F4F;font-weight:600;}

/* Big stat block (col 1 今日板块) */
.pmtsoul-ws-big-stat{background:#F0EEE6;border:1px solid #E5E3DC;padding:14px 16px;margin-bottom:18px;}
.pmtsoul-ws-big-stat-row{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:10px;}
.pmtsoul-ws-big-stat-row:last-of-type{margin-bottom:0;}
.pmtsoul-ws-big-stat-row--inline{margin-top:14px;padding-top:14px;border-top:1px dashed #C8C5BB;}
.pmtsoul-ws-big-stat-label{font-size:11px;color:#777;letter-spacing:0.04em;text-transform:uppercase;}
.pmtsoul-ws-big-stat-v{font-family:"Times New Roman",serif;font-size:28px;color:#111;font-weight:500;font-variant-numeric:tabular-nums;line-height:1;}
.pmtsoul-ws-big-stat-v--mid{font-size:20px;color:#555;}
.pmtsoul-ws-mini-stat{flex:1;display:flex;flex-direction:column;align-items:flex-start;}
.pmtsoul-ws-mini-stat-v{font-family:"Times New Roman",serif;font-size:22px;font-weight:500;color:#111;line-height:1;}
.pmtsoul-ws-mini-stat-l{font-size:10.5px;color:#777;margin-top:3px;letter-spacing:0.03em;}
.pmtsoul-ws-mini-stat--warn .pmtsoul-ws-mini-stat-v{color:#C44310;}

/* Task card v2 — LED + CTA */
.pmtsoul-ws-task-card{position:relative;}
.pmtsoul-ws-task-head{display:flex;align-items:center;gap:8px;margin-bottom:8px;}
.pmtsoul-ws-task-head .pmtsoul-ws-led{margin-top:1px;}
.pmtsoul-ws-task-head .pmtsoul-ws-task-title{flex:1;font-weight:600;font-size:13.5px;}
.pmtsoul-ws-task-desc{font-size:12.5px;color:#555;line-height:1.5;margin-bottom:10px;}
.pmtsoul-ws-task-desc strong{color:#111;font-weight:600;}
.pmtsoul-ws-task-cta{display:flex;gap:6px;align-items:center;justify-content:flex-end;}
.pmtsoul-ws-task-link{
  appearance:none;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:32px;
  background:transparent;
  border:0;
  padding:2px 0;
  color:#1A7F4F;
  font:inherit;
  font-size:12px;
  font-weight:600;
  line-height:1.2;
  cursor:pointer;
  text-decoration:none;
}
.pmtsoul-ws-task-link:hover{text-decoration:underline;text-underline-offset:3px;}
.pmtsoul-ws-task-link:focus-visible{outline:2px solid rgba(26,127,79,0.35);outline-offset:3px;border-radius:3px;}
.pmtsoul-ws-email-edit-btn{min-height:32px;}
@media (hover:none) and (pointer:coarse){
  .pmtsoul-ws-console-toggle,.pmtsoul-ws-task-link,.pmtsoul-ws-email-edit-btn{min-height:44px;}
}
/* 2026-05-27 · 任务点同意后,cta 区切到 "Running for Xm Ys" timer */
.pmtsoul-ws-task-running{
  font-family:"Times New Roman",Georgia,serif;
  font-style:italic;font-size:13px;color:#E76F2F;letter-spacing:0.01em;
}
.pmtsoul-ws-task-card[data-task-status="in_progress"]{border-color:#E76F2F;background:rgba(231,111,47,0.04);}
html.dark .pmtsoul-ws-task-card[data-task-status="in_progress"]{border-color:#E76F2F;background:rgba(231,111,47,0.08);}
.pmtsoul-ws-task-card[data-task-state="urgent-decision"]{border-color:#C44310;background:#FEF6F2;}
.pmtsoul-ws-task-card[data-task-state="done"]{opacity:0.7;border-style:solid;border-color:#C8C5BB;}

.pmtsoul-ws-btn-primary-dark--sm{padding:5px 12px;font-size:12px;}
.pmtsoul-ws-btn-medium--full{width:100%;margin-top:6px;}

/* Email row — overdue indicator */
.pmtsoul-ws-email-row--overdue{border-left:3px solid #C44310;background:#FEF6F2;}
.pmtsoul-ws-email-badge{display:inline-block;font-size:10px;font-weight:600;letter-spacing:0.04em;padding:1px 6px;border:1px solid currentColor;margin-left:4px;vertical-align:1px;}
.pmtsoul-ws-email-badge--overdue{color:#C44310;}

/* Tweet body extras */
.pmtsoul-ws-ops-tweet-body{font-size:13px;color:#444;margin:6px 0 4px;line-height:1.55;}
.pmtsoul-ws-ops-tweet-foot{font-size:11px;color:#888;margin-top:6px;}

/* Chat decision banner — col 4 顶部"AI 当前等什么" */
.pmtsoul-ws-chat-banner{padding:14px 16px;border-bottom:1px solid #E5E3DC;background:#FFF7E0;flex-shrink:0;}
.pmtsoul-ws-chat-banner--decision{background:linear-gradient(180deg,#FFF7E0,#FFEEC2);border-bottom:2px solid #E76F2F;}
.pmtsoul-ws-chat-banner-tag{font-size:11px;font-weight:700;color:#C44310;letter-spacing:0.06em;text-transform:uppercase;margin-bottom:4px;}
.pmtsoul-ws-chat-banner-headline{font-family:"Times New Roman",serif;font-size:18px;line-height:1.25;color:#111;margin-bottom:4px;font-weight:500;}
.pmtsoul-ws-chat-banner-meta{font-size:11.5px;color:#666;letter-spacing:0.02em;}

/* Chat message tag (PMTSoul ERP · 已就绪 lead) */
.pmtsoul-ws-chat-msg-tag{display:inline-block;font-size:10.5px;font-weight:700;letter-spacing:0.06em;color:#198F4F;text-transform:uppercase;margin-bottom:6px;}
.pmtsoul-ws-chat-msg-list{padding-left:18px;margin-top:6px;}
.pmtsoul-ws-chat-msg-list li{margin-bottom:3px;font-size:13px;color:#333;}

.pmtsoul-ws-chat-next-actions{display:flex;gap:6px;margin-top:10px;}

/* dark mode for v2 additions */
html.dark .pmtsoul-ws-status-line{background:#1F1F1F;border-color:#2D2D2D;color:#E8E6E0;}
html.dark .pmtsoul-ws-status-line--warn{background:#2A1A14;border-left-color:#E76F2F;}
html.dark .pmtsoul-ws-big-stat{background:#1F1F1F;border-color:#2D2D2D;}
html.dark .pmtsoul-ws-big-stat-v,html.dark .pmtsoul-ws-mini-stat-v{color:#E8E6E0;}
html.dark .pmtsoul-ws-big-stat-v--mid{color:#9E9B91;}
html.dark .pmtsoul-ws-big-stat-label,html.dark .pmtsoul-ws-mini-stat-l{color:#888;}
html.dark .pmtsoul-ws-big-stat-row--inline{border-top-color:#3A3A3A;}
html.dark .pmtsoul-ws-task-card[data-task-state="urgent-decision"]{background:#2A1A14;border-color:#E76F2F;}
html.dark .pmtsoul-ws-email-row--overdue{background:#2A1A14;border-left-color:#E76F2F;}
html.dark .pmtsoul-ws-chat-banner{background:#2A220E;border-bottom-color:#3A2F1A;}
html.dark .pmtsoul-ws-chat-banner--decision{background:linear-gradient(180deg,#2A220E,#3A2F1A);border-bottom-color:#E76F2F;}
html.dark .pmtsoul-ws-chat-banner-headline{color:#E8E6E0;}
html.dark .pmtsoul-ws-chat-banner-meta{color:#9E9B91;}
html.dark .pmtsoul-ws-chat-msg-list li{color:#C0BDB3;}
html.dark .pmtsoul-ws-task-desc strong{color:#E8E6E0;}
html.dark .pmtsoul-ws-ops-tweet-body{color:#C0BDB3;}
html.dark .pmtsoul-ws-ops-tweet-foot{color:#888;}

/* === Agency dock (col 4 chat 顶部 8 角色团队) === */
.pmtsoul-ws-agency-dock{padding:14px 14px 10px;border-bottom:1px solid #E5E3DC;background:#F0EEE6;flex-shrink:0;}
.pmtsoul-ws-agency-dock-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;}
.pmtsoul-ws-agency-dock-title{font-size:10.5px;font-weight:700;color:#777;letter-spacing:0.08em;text-transform:uppercase;}
.pmtsoul-ws-chat-toolbar{display:flex;justify-content:flex-end;padding:10px 16px 6px;border-bottom:1px solid #E5E3DC;background:#FAFAF7;}
html.dark .pmtsoul-ws-chat-toolbar{background:#161614;border-bottom-color:#2D2D2D;}
.pmtsoul-ws-chat-expand{display:inline-flex;align-items:center;gap:4px;background:#fff;border:1px solid #C8C5BB;color:#555;padding:4px 10px;font-size:11px;font-weight:500;letter-spacing:0.02em;cursor:pointer;transition:all .15s ease;}
.pmtsoul-ws-chat-expand:hover{background:#111;color:#fff;border-color:#111;}
.pmtsoul-ws-chat-expand svg{flex-shrink:0;}
html.dark .pmtsoul-ws-chat-expand{background:#1F1F1F;border-color:#3A3A3A;color:#9E9B91;}
html.dark .pmtsoul-ws-chat-expand:hover{background:#E8E6E0;color:#111;border-color:#E8E6E0;}
.pmtsoul-ws-agency-roles{display:grid;grid-template-columns:repeat(8,1fr);gap:6px;}
.pmtsoul-ws-role-avatar{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#fff;border:1px solid #C8C5BB;border-radius:6px;padding:6px 2px;cursor:pointer;transition:all .15s ease;color:#111;}
.pmtsoul-ws-role-avatar:hover{border-color:#999;background:#F8F6EE;transform:translateY(-1px);}
.pmtsoul-ws-role-emoji{font-size:18px;line-height:1;margin-bottom:3px;}
.pmtsoul-ws-role-name{font-size:10px;font-weight:500;color:#555;letter-spacing:0.02em;}
.pmtsoul-ws-role-avatar.pmtsoul-ws-role--active{border-color:#111;border-width:2px;padding:5px 1px;background:#fff;box-shadow:0 2px 6px rgba(0,0,0,0.08);}
.pmtsoul-ws-role-avatar.pmtsoul-ws-role--active .pmtsoul-ws-role-name{color:#111;font-weight:700;}
.pmtsoul-ws-role-badge{position:absolute;top:-4px;right:-4px;min-width:16px;height:16px;padding:0 4px;background:#C44310;color:#fff;border-radius:8px;font-size:10px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;line-height:1;border:1.5px solid #fff;letter-spacing:0;}
.pmtsoul-ws-agency-active{display:flex;align-items:center;gap:8px;margin-top:10px;padding:6px 10px;background:#fff;border:1px solid #E5E3DC;border-radius:4px;font-size:12px;}
.pmtsoul-ws-agency-active-text{color:#555;}
.pmtsoul-ws-agency-active-text strong{color:#111;font-weight:600;}

/* Mobile dock — wrap to 2 rows */
@media (max-width: 1100px){
  .pmtsoul-ws-agency-roles{grid-template-columns:repeat(4,1fr);}
}

/* Dark mode for agency dock */
html.dark .pmtsoul-ws-agency-dock{background:#1A1A1A;border-bottom-color:#2D2D2D;}
html.dark .pmtsoul-ws-agency-dock-title{color:#888;}
html.dark .pmtsoul-ws-role-avatar{background:#1F1F1F;border-color:#3A3A3A;color:#E8E6E0;}
html.dark .pmtsoul-ws-role-avatar:hover{background:#252525;border-color:#5A5A5A;}
html.dark .pmtsoul-ws-role-name{color:#9E9B91;}
html.dark .pmtsoul-ws-role-avatar.pmtsoul-ws-role--active{background:#252525;border-color:#E8E6E0;}
html.dark .pmtsoul-ws-role-avatar.pmtsoul-ws-role--active .pmtsoul-ws-role-name{color:#E8E6E0;}
html.dark .pmtsoul-ws-role-badge{border-color:#1A1A1A;}
html.dark .pmtsoul-ws-agency-active{background:#1F1F1F;border-color:#2D2D2D;}
html.dark .pmtsoul-ws-agency-active-text{color:#9E9B91;}
html.dark .pmtsoul-ws-agency-active-text strong{color:#E8E6E0;}


.merchant-ws-hero{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;border:1px solid var(--border);border-radius:8px;background:var(--surface);padding:22px 24px;margin-bottom:12px;}
.merchant-ws-hero h2{margin:0 0 8px;font-size:24px;line-height:1.15;color:var(--text);letter-spacing:0;}
.merchant-ws-hero-copy{margin:0 0 12px;max-width:760px;color:var(--muted);font-size:14px;line-height:1.55;}
.merchant-ws-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px;}
.merchant-ws-meta code,.merchant-ws-workspace-id{font-family:'SF Mono',ui-monospace,monospace;}
.merchant-ws-meta code{border:1px solid var(--border);background:var(--sidebar);border-radius:6px;padding:2px 7px;font-size:12px;color:var(--text);}
.merchant-ws-soft-meta{font-size:12px;color:var(--muted);border:1px solid var(--border);background:var(--input-bg);border-radius:999px;padding:2px 8px;}
.merchant-ws-workspace-id{font-size:12px;color:var(--muted);word-break:break-all;}
.merchant-ws-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-bottom:12px;}
.merchant-ws-stat{border:1px solid var(--border);background:var(--surface);border-radius:8px;padding:14px 16px;min-width:0;}
.merchant-ws-stat span{display:block;font-size:12px;color:var(--muted);margin-bottom:6px;}
.merchant-ws-stat strong{display:block;font-size:23px;color:var(--text);font-weight:760;font-variant-numeric:tabular-nums;}
.merchant-ws-quick-panel{border:1px solid var(--border);border-radius:8px;background:var(--surface);padding:16px;margin-bottom:14px;}
.merchant-ws-quick-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;}
.merchant-ws-quick-action{display:grid;grid-template-columns:38px minmax(0,1fr);align-items:center;gap:10px;border:1px solid var(--border);border-radius:8px;background:var(--input-bg);padding:12px;text-align:left;color:var(--text);cursor:pointer;min-height:66px;}
.merchant-ws-quick-action:hover{border-color:var(--accent-bg-strong,var(--border));background:var(--accent-bg);color:var(--accent-text);}
.merchant-ws-quick-action:disabled{opacity:.65;cursor:wait;}
.merchant-ws-quick-icon{width:38px;height:38px;border:1px solid var(--border);border-radius:8px;background:var(--surface);display:flex;align-items:center;justify-content:center;color:inherit;}
.merchant-ws-quick-action strong{display:block;font-size:14px;font-weight:800;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.merchant-ws-quick-action small{display:block;margin-top:3px;font-size:12px;color:var(--muted);line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.merchant-ws-dashboard{display:grid;grid-template-columns:minmax(270px,320px) minmax(0,1fr);gap:14px;align-items:start;}
.merchant-ws-modules,.merchant-ws-module-panel{border:1px solid var(--border);border-radius:8px;background:var(--surface);padding:16px;}
.merchant-ws-section-title{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:800;color:var(--text);margin-bottom:14px;}
.merchant-ws-module-grid{display:grid;grid-template-columns:1fr;gap:8px;}
.merchant-ws-module{display:grid;grid-template-columns:34px minmax(0,1fr);align-items:center;gap:10px;width:100%;border:1px solid var(--border);border-radius:8px;background:var(--input-bg);padding:10px;text-align:left;color:var(--text);cursor:pointer;min-height:70px;}
.merchant-ws-module:hover{border-color:var(--accent-bg-strong,var(--border));background:var(--accent-bg);}
.merchant-ws-module.active{border-color:var(--accent-bg-strong,var(--border));background:var(--accent-bg);color:var(--accent-text);}
.merchant-ws-module-icon{width:34px;height:34px;border-radius:8px;background:var(--surface);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;color:var(--text);}
.merchant-ws-module.active .merchant-ws-module-icon{background:rgba(255,255,255,.56);color:var(--accent-text);}
.merchant-ws-module-copy{display:flex;flex-direction:column;align-items:flex-start;gap:4px;min-width:0;max-width:100%;}
.merchant-ws-module-copy strong{font-size:15px;font-weight:800;line-height:1.25;max-width:100%;overflow-wrap:anywhere;}
.merchant-ws-module-copy small{font-size:12px;color:var(--muted);line-height:1.35;max-width:100%;overflow-wrap:anywhere;}
.merchant-ws-module-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;border-bottom:1px solid var(--border);padding-bottom:12px;margin-bottom:12px;}
.merchant-ws-module-head h3{margin:0 0 6px;font-size:24px;line-height:1.2;color:var(--text);letter-spacing:0;}
.merchant-ws-module-head p{margin:0;color:var(--muted);font-size:14px;line-height:1.45;}
.merchant-ws-module-head code{font-family:'SF Mono',ui-monospace,monospace;font-size:11px;color:var(--muted);background:var(--sidebar);border:1px solid var(--border);border-radius:6px;padding:4px 6px;max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.merchant-ws-eyebrow{font-size:12px;font-weight:800;color:var(--muted);letter-spacing:0;margin-bottom:6px;}
.merchant-ws-toolbar{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap;max-width:520px;}
.merchant-ws-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-bottom:14px;}
.merchant-ws-fields div{border:1px solid var(--border);border-radius:8px;background:var(--input-bg);padding:9px 10px;min-width:0;}
.merchant-ws-fields span{display:block;font-size:11px;color:var(--muted);margin-bottom:4px;}
.merchant-ws-fields strong{display:block;font-size:13px;color:var(--text);font-weight:650;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.merchant-ws-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;}
.merchant-ws-action{display:flex;align-items:center;justify-content:space-between;gap:10px;border:1px solid var(--border);border-radius:8px;background:var(--input-bg);color:var(--text);padding:12px 14px;cursor:pointer;text-align:left;min-height:52px;}
.merchant-ws-action:hover{border-color:var(--accent-bg-strong,var(--border));background:var(--accent-bg);}
.merchant-ws-action:disabled{opacity:.55;cursor:not-allowed;}
.merchant-ws-action.submitting{cursor:wait;}
.merchant-ws-action span{font-size:13px;font-weight:700;line-height:1.25;min-width:0;overflow:hidden;text-overflow:ellipsis;}
.merchant-ws-action small{font-size:11px;color:var(--muted);border:1px solid var(--border);border-radius:999px;padding:2px 7px;flex:0 0 auto;}
.merchant-ws-action.query small{color:rgba(34,130,85,.95);border-color:rgba(34,130,85,.28);background:rgba(34,130,85,.1);}
.merchant-ws-action.external small{color:rgba(42,104,190,.95);border-color:rgba(42,104,190,.28);background:rgba(42,104,190,.1);}
.merchant-ws-action.write small{color:rgba(190,120,45,.95);border-color:rgba(190,120,45,.28);background:rgba(190,120,45,.1);}
.merchant-ws-action-result{margin-top:12px;border:1px solid var(--border);border-radius:8px;background:var(--sidebar);padding:10px 12px;font-size:13px;display:flex;justify-content:space-between;gap:12px;}
.merchant-ws-action-result strong{color:var(--text);}
.merchant-ws-action-result span{color:var(--muted);}
.merchant-ws-data{min-height:220px;}
.merchant-ws-agent-actions{border-top:1px solid var(--border);margin-top:14px;padding-top:14px;}
.merchant-ws-agent-actions-title{font-size:13px;font-weight:800;color:var(--text);margin-bottom:10px;}
.merchant-ws-agent-action-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;}
.merchant-ws-agent-action{display:flex;align-items:center;justify-content:space-between;gap:10px;border:1px solid var(--border);border-radius:8px;background:var(--input-bg);color:var(--text);padding:11px 12px;cursor:pointer;text-align:left;min-height:48px;}
.merchant-ws-agent-action:hover{border-color:var(--accent-bg-strong,var(--border));background:var(--accent-bg);color:var(--accent-text);}
.merchant-ws-agent-action:disabled{opacity:.65;cursor:wait;}
.merchant-ws-agent-action span{font-size:13px;font-weight:750;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.merchant-ws-agent-action small{font-size:11px;color:var(--muted);border:1px solid var(--border);border-radius:999px;padding:2px 7px;white-space:nowrap;}
.merchant-ws-data-tools{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px;}
.merchant-ws-search{display:flex;align-items:center;gap:8px;min-width:260px;max-width:420px;flex:1;border:1px solid var(--border);border-radius:8px;background:var(--input-bg);padding:8px 10px;color:var(--muted);}
.merchant-ws-search input{width:100%;border:0;background:transparent;color:var(--text);font:inherit;font-size:13px;outline:none;}
.merchant-ws-search input::placeholder{color:var(--muted);}
.merchant-ws-row-count{font-size:12px;color:var(--muted);white-space:nowrap;}
.merchant-ws-table-wrap{border:1px solid var(--border);border-radius:8px;overflow:auto;background:var(--surface);max-height:520px;}
.merchant-ws-table{width:100%;border-collapse:collapse;font-size:12px;}
.merchant-ws-table th,.merchant-ws-table td{padding:9px 10px;border-bottom:1px solid var(--border);text-align:left;vertical-align:top;white-space:nowrap;max-width:260px;overflow:hidden;text-overflow:ellipsis;}
.merchant-ws-table th{position:sticky;top:0;background:var(--sidebar);color:var(--muted);font-size:11px;font-weight:700;z-index:1;}
.merchant-ws-table tr[hidden]{display:none;}
.merchant-ws-table tr:last-child td{border-bottom:none;}
.merchant-ws-json{border:1px solid var(--border);border-radius:8px;background:var(--sidebar);padding:12px;overflow:auto;font-size:12px;line-height:1.5;max-height:520px;}
.merchant-ws-loading,.merchant-ws-empty,.merchant-ws-error{border:1px solid var(--border);border-radius:8px;background:var(--surface);padding:16px;color:var(--muted);font-size:13px;}
.merchant-ws-product-view{display:grid;gap:12px;}
.merchant-ws-product-tabs{display:flex;align-items:center;gap:22px;border-bottom:1px solid var(--border);padding-bottom:10px;color:var(--muted);font-size:14px;font-weight:750;}
.merchant-ws-product-tabs button{display:inline-flex;align-items:center;gap:6px;padding:4px 0;border:0;border-bottom:3px solid transparent;background:transparent;color:var(--muted);font:inherit;cursor:pointer;}
.merchant-ws-product-tabs button:hover{color:var(--text);}
.merchant-ws-product-tabs button.active{color:var(--text);border-color:var(--text);}
.merchant-ws-product-tabs strong{font-size:12px;color:var(--muted);font-weight:700;}
.merchant-ws-products{display:grid;gap:12px;}
.merchant-ws-product-card[hidden]{display:none;}
.merchant-ws-product-filter-empty{border:1px solid var(--border);border-radius:8px;background:var(--surface);padding:16px;color:var(--muted);font-size:13px;}
.merchant-ws-product-card{display:grid;grid-template-columns:88px minmax(0,1fr);gap:14px;border:1px solid var(--border);border-radius:10px;background:var(--surface);padding:14px;}
.merchant-ws-product-media{position:relative;width:88px;height:88px;border-radius:8px;background:var(--sidebar);overflow:hidden;display:flex;align-items:center;justify-content:center;color:var(--muted);}
.merchant-ws-product-media img{width:100%;height:100%;object-fit:cover;display:block;}
.merchant-ws-product-media span{position:absolute;left:6px;top:6px;border-radius:999px;background:rgba(0,0,0,.54);color:#fff;font-size:11px;line-height:1;padding:4px 7px;}
.merchant-ws-product-body{min-width:0;display:grid;gap:8px;}
.merchant-ws-product-title{font-size:17px;font-weight:800;line-height:1.25;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.merchant-ws-product-meta{display:flex;gap:18px;flex-wrap:wrap;color:var(--muted);font-size:13px;}
.merchant-ws-product-price{display:flex;gap:18px;flex-wrap:wrap;color:#d75632;font-size:14px;font-weight:750;}
.merchant-ws-product-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:2px;}
.merchant-ws-product-actions button{border:none;background:var(--sidebar);color:var(--text);border-radius:999px;padding:7px 12px;font-size:12px;font-weight:700;cursor:pointer;}
.merchant-ws-product-actions button:hover{background:var(--accent-bg);color:var(--accent-text);}
.merchant-ws-product-actions button:disabled{opacity:.72;cursor:wait;}
.merchant-ws-metric-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;}
.merchant-ws-metric-card{border:1px solid var(--border);border-radius:8px;background:var(--input-bg);padding:14px 16px;min-width:0;}
.merchant-ws-metric-card span{display:block;font-size:12px;color:var(--muted);margin-bottom:8px;text-transform:none;}
.merchant-ws-metric-card strong{display:block;font-size:20px;line-height:1.25;color:var(--text);font-weight:800;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.merchant-ws-service-card{display:grid;grid-template-columns:42px minmax(0,1fr) auto;align-items:center;gap:12px;border:1px solid var(--border);border-radius:10px;background:var(--surface);padding:14px;color:var(--text);}
.merchant-ws-service-icon{width:42px;height:42px;border-radius:8px;background:var(--accent-bg);color:var(--accent-text);display:flex;align-items:center;justify-content:center;}
.merchant-ws-service-card strong{font-size:15px;}
.merchant-ws-service-card p{margin:4px 0 0;color:var(--muted);font-size:13px;}
.merchant-ws-link{display:inline-flex;margin-top:8px;color:var(--accent);font-weight:700;text-decoration:none;}
.merchant-ws-link:hover{text-decoration:underline;}
.merchant-ws-error{color:var(--danger,#d04b4b);}

@media(max-width:1000px){
  .merchant-ws-stats,.merchant-ws-metric-grid{grid-template-columns:repeat(2,minmax(0,1fr));}
  .merchant-ws-quick-grid{grid-template-columns:repeat(2,minmax(0,1fr));}
  .merchant-ws-dashboard{grid-template-columns:1fr;}
}
@media(max-width:700px){
  .merchant-ws-hero{flex-direction:column;}
  .merchant-ws-stats,.merchant-ws-fields,.merchant-ws-actions,.merchant-ws-quick-grid{grid-template-columns:1fr;}
  .merchant-ws-module-head{flex-direction:column;}
  .merchant-ws-module-grid{grid-template-columns:1fr;}
  .merchant-ws-toolbar{justify-content:flex-start;max-width:none;width:100%;}
  .merchant-ws-action{width:100%;}
  .merchant-ws-agent-action-grid{grid-template-columns:1fr;}
  .merchant-ws-data-tools{align-items:stretch;flex-direction:column;}
  .merchant-ws-search{min-width:0;max-width:none;width:100%;}
  .merchant-ws-product-card{grid-template-columns:72px minmax(0,1fr);}
  .merchant-ws-product-media{width:72px;height:72px;}
  .merchant-ws-product-title{font-size:15px;}
  .merchant-ws-metric-grid{grid-template-columns:1fr;}
  .merchant-ws-service-card{grid-template-columns:42px minmax(0,1fr);}
}
.detail-alert{border:1px solid rgba(245,158,11,.35);background:rgba(245,158,11,.1);border-radius:8px;padding:12px 14px;margin-bottom:16px;color:var(--text);}
.detail-alert-title{font-size:12px;font-weight:700;color:rgba(245,158,11,.98);text-transform:uppercase;letter-spacing:0;margin-bottom:6px;}
.detail-alert p{margin:0 0 8px;font-size:13px;line-height:1.45;color:var(--text);}
.detail-alert p:last-child{margin-bottom:0;}
.detail-alert-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px;}

/* Cron running indicator */
.cron-running-indicator{display:flex;align-items:center;gap:8px;padding:10px 14px;margin-bottom:12px;background:rgba(59,130,246,.1);border:1px solid rgba(59,130,246,.3);border-radius:8px;font-size:13px;color:var(--text);}
.cron-watch-spinner{width:14px;height:14px;border:2px solid rgba(59,130,246,.3);border-top-color:rgba(59,130,246,.9);border-radius:50%;animation:cron-spin .8s linear infinite;flex-shrink:0;}
@keyframes cron-spin{to{transform:rotate(360deg)}}
.cron-watch-elapsed{color:var(--muted);font-variant-numeric:tabular-nums;margin-left:auto;}
.detail-prompt{background:var(--sidebar);border:1px solid var(--border);border-radius:8px;padding:10px 12px;font-size:12px;white-space:pre-wrap;line-height:1.55;color:var(--text);font-family:'SF Mono',ui-monospace,monospace;max-height:240px;overflow-y:auto;}
.detail-run-item{border-top:1px solid var(--border);padding:8px 0;}
.detail-run-item:first-child{border-top:none;}
.detail-run-head{display:flex;align-items:center;justify-content:space-between;cursor:pointer;font-size:12px;color:var(--muted);}
.detail-run-body{display:none;margin-top:6px;font-size:12px;color:var(--muted);white-space:pre-wrap;line-height:1.5;max-height:260px;overflow-y:auto;background:var(--sidebar);border:1px solid var(--border);border-radius:6px;padding:8px 10px;}
.detail-run-item.open .detail-run-body{display:block;}
.cron-item.active,.ws-row.active,.profile-card.active{background:var(--accent-bg);}
.cron-item.active .cron-name,.ws-row.active .ws-row-name,.profile-card.active .profile-card-name{color:var(--accent-text);}

/* ── Shared in-main form (create/edit) for skills/tasks/workspaces/profiles ── */
.detail-form{display:flex;flex-direction:column;gap:14px;}
.detail-form-row{display:flex;flex-direction:column;gap:6px;}
.detail-form-row > label{font-size:12px;font-weight:500;color:var(--muted);letter-spacing:.01em;}
.detail-form-row input[type="text"],
.detail-form-row input[type="password"],
.detail-form-row input:not([type]),
.detail-form-row select,
.detail-form-row textarea{
  width:100%;box-sizing:border-box;
  background:var(--sidebar);border:1px solid var(--border);border-radius:8px;
  color:var(--text);padding:9px 11px;font-size:13px;outline:none;
  font-family:inherit;line-height:1.5;
  transition:border-color .15s,background .15s;
}
.detail-form-row input[type="text"]:focus,
.detail-form-row input[type="password"]:focus,
.detail-form-row input:not([type]):focus,
.detail-form-row select:focus,
.detail-form-row textarea:focus{border-color:var(--accent,var(--accent-bg-strong,var(--border)));}
.detail-form-row input:disabled{opacity:.6;cursor:not-allowed;}
.detail-form-row textarea{resize:vertical;font-family:'SF Mono',ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;}
.detail-form-row .detail-form-hint{font-size:11px;color:var(--muted);line-height:1.5;}
.detail-form-row label.detail-form-check{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--text);cursor:pointer;font-weight:400;}
.detail-form-row label.detail-form-check input{accent-color:var(--accent,var(--link));}
.detail-form-error{font-size:12px;color:var(--error,#e05);padding:8px 10px;border:1px solid color-mix(in srgb,var(--error,#e05) 35%,transparent);background:color-mix(in srgb,var(--error,#e05) 8%,transparent);border-radius:8px;line-height:1.5;}
.panel-head-btn.primary{background:var(--accent,var(--link));color:#fff;border:none;}
.panel-head-btn.primary:hover{background:var(--accent-hover,var(--accent,var(--link)));color:#fff;}
.panel-head-btn.primary svg{color:#fff;}
/* Skill-picker inside in-main forms reuses the sidebar styles but needs light tweaks */
.detail-form-row .skill-picker-wrap{position:relative;}
.detail-form-row .skill-picker-tags{margin-top:6px;display:flex;flex-wrap:wrap;gap:4px;}

/* Mobile: message controls always visible on touch screens (no hover available) */
@media(max-width:640px){
  .msg-row[data-role="user"] .msg-foot,
  .msg-row[data-role="assistant"] .msg-foot,
  .assistant-turn .msg-foot{opacity:1;}
  .msg-actions{opacity:1;}
}

/* ── /btw ephemeral side-question bubble ── */
.msg-row-btw {
  border-left: 3px solid var(--accent-bg-strong);
  border-radius: 8px;
  background: var(--accent-bg);
  margin: 6px 0 6px var(--msg-rail);
  padding: 8px 12px;
}
.msg-row-btw .msg-body { font-size: 14px; line-height: 1.75; }
.msg-btw-label {
  font-size: 11px;
  font-style: italic;
  color: var(--muted);
  margin-bottom: 4px;
  opacity: .8;
}
.msg-btw-answer {
  margin-top: 6px;
  border-top: 1px solid var(--accent-bg-strong);
  padding-top: 6px;
}

/* ── /background badge in composer footer ── */
.bg-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  border-radius: 9px;
  background: var(--accent-bg-strong);
  color: var(--accent-text);
  font-size: 10px;
  font-weight: 600;
}

  /* Queue pill outer: identical wrapper to .queue-card — max-width+padding positions the pill at card-inner width */
  .queue-pill-outer{display:none;max-width:var(--msg-max);margin:0 auto;padding:0 20px;box-sizing:border-box;width:100%;}
  .queue-pill-outer.show{display:block;animation:queuePillIn .18s ease;}
  @keyframes queuePillIn{from{opacity:0;transform:translateY(4px);}to{opacity:1;transform:translateY(0);}}
  /* Queue pill button: fills the outer slot, styled like queue-card-inner */
  .queue-pill{display:flex;width:100%;box-sizing:border-box;align-items:center;gap:8px;padding:9px 14px;font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);cursor:pointer;background:var(--surface);border:1px solid var(--border);border-bottom:none;border-radius:14px 14px 0 0;text-align:left;}
  .queue-pill:hover{background:color-mix(in srgb,var(--hover-bg) 60%,var(--surface));}
  .queue-pill-count{color:var(--text);}
  .queue-pill-chevron{margin-left:auto;opacity:.5;}

/* ── Mobile: prevent iOS auto-zoom on input focus ─────────────────────────
   iOS Safari zooms in when a focused input/select has font-size < 16px.
   This media query targets touch-primary devices (phones and tablets) and
   bumps all interactive inputs to the minimum non-zoom threshold.
   The textarea#msg composer is already 16px; the sidebar search, rename
   inputs, settings selects, and dialog inputs are not.  (#1167)
──────────────────────────────────────────────────────────────────────── */
@media (hover:none) and (pointer:coarse){
  input,textarea,select{font-size:max(16px,1em)!important;}
}

/* ── PDF preview ─────────────────────────────────────────────────────────── */
.pdf-preview-wrap{border:1px solid var(--border);border-radius:6px;overflow:hidden;margin:4px 0;background:var(--surface);}
.pdf-preview-header{display:flex;justify-content:space-between;align-items:center;padding:6px 10px;background:var(--surface-2);font-size:12px;font-weight:600;}
.pdf-preview-header a{color:var(--accent);text-decoration:none;font-weight:500;}
.pdf-preview-header a:hover{text-decoration:underline;}
.pdf-preview-body{display:flex;justify-content:center;padding:8px;background:#fff;border-radius:0 0 6px 6px;max-height:500px;overflow:hidden;}
.pdf-preview-canvas{max-width:100%;height:auto;border-radius:2px;}
.pdf-preview-fallback{padding:8px;font-size:13px;}
.pdf-preview-spinner{animation:pulse 1.5s ease-in-out infinite;}
@keyframes pulse{0%,100%{opacity:0.4;}50%{opacity:1;}}

/* ── HTML sandbox preview ────────────────────────────────────────────────── */
.html-preview-wrap{border:1px solid var(--border);border-radius:6px;overflow:hidden;margin:4px 0;background:var(--surface);}
.html-preview-header{display:flex;justify-content:space-between;align-items:center;padding:6px 10px;background:var(--surface-2);font-size:12px;font-weight:600;}
.html-preview-header a{color:var(--accent);text-decoration:none;font-weight:500;}
.html-preview-header a:hover{text-decoration:underline;}
.html-preview-iframe{width:100%;height:400px;border:none;display:block;background:#fff;}
.html-preview-fallback{padding:8px;font-size:13px;}
.html-preview-spinner{animation:pulse 1.5s ease-in-out infinite;}

/* ── Insights panel (#464) ────────────────────────────────────────────────── */
main.main.showing-insights > #mainInsights{display:flex;overflow-y:auto;}
#mainInsights .main-view-content{max-width:1180px;}
#mainInsights .main-view-actions{gap:8px;}
#mainInsights #insightsPeriod{min-height:32px;}
#mainInsights #insightsRefreshBtn{width:32px;height:32px;}
#mainInsights #insightsRefreshBtn:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
#mainInsights .main-view-content.is-loading{opacity:.55;pointer-events:none;transition:opacity .15s ease;}
.insights-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px;}
.insights-stat{background:var(--ui-card-bg);border:1px solid var(--ui-card-border);border-radius:var(--ui-card-radius);padding:16px;min-width:0;}
.insights-stat-value{font-size:22px;font-weight:700;color:var(--text);}
.insights-stat-label{font-size:11px;color:var(--muted);margin-top:4px;}
.insights-detail-grid{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(280px,.8fr);gap:12px;align-items:start;}
.insights-detail-grid>.insights-card:last-child:nth-child(odd){grid-column:1/-1;}
.insights-row{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px;}
.insights-card{background:var(--ui-card-bg);border:1px solid var(--ui-card-border);border-radius:var(--ui-card-radius);padding:14px;}
.insights-card-title{font-size:13px;font-weight:600;color:var(--text);margin-bottom:10px;}
.insights-employee-row{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--border);}
.insights-employee-row:last-child{border-bottom:0;}
.insights-employee-avatar{width:28px;height:28px;flex:0 0 28px;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;background:var(--input-bg);border:1px solid var(--border);color:var(--muted);}
.insights-employee-avatar svg{width:18px;height:18px;}
.insights-employee-score{width:88px;display:flex;align-items:center;gap:7px;font-size:12px;font-weight:600;}
.insights-score-track{flex:1;height:5px;background:var(--input-bg);border-radius:3px;overflow:hidden;}
.insights-score-fill{height:100%;background:var(--accent);border-radius:3px;opacity:.72;}
.insights-trend-bar{flex:1;min-height:2px;background:var(--input-bg);border-radius:3px 3px 0 0;}
.insights-trend-bar.has-value{background:var(--accent);opacity:.62;}
.insights-table{width:100%;font-size:12px;}
.insights-table-head{display:grid;grid-template-columns:1fr 80px;padding:4px 0;border-bottom:1px solid var(--border);font-weight:600;color:var(--muted);font-size:11px;}
.insights-table-row{display:grid;grid-template-columns:1fr 80px;padding:6px 0;border-bottom:1px solid var(--border,.05);}
.insights-model-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.insights-bars{display:flex;flex-direction:column;gap:6px;}
.insights-bar-row{display:grid;grid-template-columns:40px 1fr 40px;align-items:center;gap:8px;}
.insights-bar-label{font-size:11px;color:var(--muted);text-align:right;}
.insights-bar-track{height:16px;background:var(--border,.15);border-radius:4px;overflow:hidden;}
.insights-bar-fill{height:100%;background:var(--accent);border-radius:4px;min-width:2px;transition:width .3s;}
.insights-bar-fill.peak{background:#f6ad55;}
.insights-bar-value{font-size:11px;color:var(--text);}
.insights-token-row{display:flex;justify-content:space-between;padding:4px 0;font-size:12px;border-bottom:1px solid var(--border,.05);}
.insights-token-label{color:var(--muted);}
.insights-token-value{font-weight:600;}
.insights-credits-table-wrap{overflow-x:auto;}
@media(max-width:820px){
  .insights-grid{grid-template-columns:repeat(2,minmax(0,1fr));}
  .insights-detail-grid{grid-template-columns:1fr;}
  .insights-detail-grid>.insights-card:last-child:nth-child(odd){grid-column:auto;}
}
@media(max-width:480px){
  .insights-grid{grid-template-columns:1fr;}
}
@media(max-width:640px){
  .insights-credits-table-wrap{overflow-x:visible;}
  .insights-credits-table,.insights-credits-table tbody{display:block;width:100%;}
  .insights-credits-table thead{display:none;}
  .insights-credit-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:5px 12px;padding:10px 0;border-bottom:1px solid var(--border);}
  .insights-credit-row:last-child{border-bottom:0;}
  .insights-credit-row>td{padding:0 !important;border:0 !important;min-width:0;}
  .insights-credit-time{grid-column:1;grid-row:1;}
  .insights-credit-qty{grid-column:2;grid-row:1;}
  .insights-credit-use{grid-column:1/-1;grid-row:2;overflow-wrap:anywhere;}
  .insights-credit-source{grid-column:1;grid-row:3;align-self:center;}
  .insights-credit-balance{grid-column:2;grid-row:3;}
  .insights-credit-company{grid-column:1/-1;grid-row:4;}
  .insights-credit-balance::before,.insights-credit-company::before{content:attr(data-label) " ";font-size:10px;font-weight:400;color:var(--muted);}
}

/* ── Checkpoints / Rollback UI (#466) ─────────────────────────────────────── */
.checkpoint-list{display:flex;flex-direction:column;gap:8px;}
.checkpoint-item{display:flex;align-items:center;justify-content:space-between;padding:8px 10px;background:var(--surface-2);border:1px solid var(--border);border-radius:6px;font-size:12px;}
.checkpoint-item-actions{display:flex;gap:6px;}
.checkpoint-item-actions button{background:none;border:none;color:var(--muted);cursor:pointer;padding:2px 4px;border-radius:4px;}
.checkpoint-item-actions button:hover{color:var(--accent);background:rgba(255,255,255,.06);}
.checkpoint-item-actions button.danger:hover{color:#fc8181;}
.checkpoint-diff{position:fixed;inset:0;z-index:1000;background:var(--ui-dialog-backdrop);display:flex;align-items:center;justify-content:center;padding:24px;backdrop-filter:blur(4px);}
.checkpoint-diff-modal{background:var(--ui-dialog-bg);border:1px solid var(--ui-dialog-border);border-radius:var(--ui-dialog-radius);box-shadow:var(--ui-dialog-shadow);max-width:700px;width:90%;max-height:80vh;display:flex;flex-direction:column;overflow:hidden;}
.checkpoint-diff-header{display:flex;justify-content:space-between;align-items:center;padding:var(--ui-dialog-head-padding);border-bottom:1px solid var(--ui-dialog-border);}
.checkpoint-diff-body{padding:var(--ui-dialog-body-padding);overflow-y:auto;flex:1;}
.checkpoint-diff-body pre{font-size:11px;line-height:1.4;white-space:pre-wrap;word-break:break-all;}

/* Shared dialog shell. Legacy dialog families keep their business-specific
   internals while consuming one surface, title, close and action language. */
.pmts-ui-dialog-overlay{
  position:fixed;
  inset:0;
  z-index:99998;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:24px;
  background:var(--ui-dialog-backdrop);
  backdrop-filter:blur(4px);
}
.pmts-ui-dialog{
  background:var(--ui-dialog-bg);
  border:1px solid var(--ui-dialog-border);
  border-radius:var(--ui-dialog-radius);
  box-shadow:var(--ui-dialog-shadow);
  color:var(--text);
  font-family:var(--font-ui);
}
.pmts-ui-dialog-head{border-bottom-color:var(--ui-dialog-border);}
.pmts-ui-dialog-title{
  font-family:var(--font-ui);
  font-size:18px;
  font-weight:600;
  letter-spacing:0;
  color:var(--text);
}
.pmts-ui-dialog-close{
  border-radius:var(--ui-control-radius);
  color:var(--muted);
}
.pmts-ui-dialog-close:hover{background:var(--hover-bg);color:var(--text);}
.pmts-confirm-card{width:min(480px,100%);overflow:hidden;}
.pmts-confirm-head{padding:var(--ui-dialog-head-padding);border-bottom:1px solid var(--ui-dialog-border);}
.pmts-confirm-title{margin:0;font-family:var(--font-ui);font-size:18px;font-weight:600;line-height:1.35;color:var(--text);}
.pmts-confirm-body{padding:var(--ui-dialog-body-padding);font-size:14px;line-height:1.6;color:var(--muted);white-space:pre-wrap;}
.pmts-confirm-input{width:calc(100% - 40px);margin:0 20px 20px;padding:10px 12px;font:inherit;border:1px solid var(--border2);border-radius:var(--ui-control-radius);background:var(--input-bg);color:var(--text);outline:none;box-sizing:border-box;}
.pmts-confirm-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--focus-glow);}
.pmts-confirm-actions{display:flex;justify-content:flex-end;gap:10px;padding:0 20px 20px;}
.pmts-confirm-btn{min-width:96px;padding:10px 16px;border:1px solid var(--border2);border-radius:var(--ui-control-radius);background:var(--surface);color:var(--text);font:600 13px/1.2 var(--font-ui);cursor:pointer;}
.pmts-confirm-btn:hover{background:var(--hover-bg);}
.pmts-confirm-btn-primary{border-color:var(--text);background:var(--text);color:var(--surface);}
.pmts-confirm-btn-primary:hover{background:var(--strong);}
.pmts-confirm-btn-primary.danger{border-color:var(--error);background:var(--error);color:#fff;}
@media (max-width:640px){
  .pmts-ui-dialog-overlay{align-items:flex-end;padding:0;}
  .pmts-confirm-card{width:100%;border-width:1px 0 0;border-radius:18px 18px 0 0;padding-bottom:max(0px,env(safe-area-inset-bottom));}
  .pmts-confirm-actions{flex-direction:column-reverse;}
  .pmts-confirm-btn{width:100%;min-height:44px;}
}

/* =========================================================
   Account Chrome — V1 (2026-05-21)
   Spec: docs/ui-ux/SESSION_CHROME_REDESIGN_V1.md
   - Titlebar right cluster (notif + avatar)
   - Account popover (settings/profiles/insights moved here)
   - Rail tier 2 visual de-emphasis
   - Hide profiles/insights/settings from rail+sidebar-nav (DOM kept)
   ========================================================= */

/* --- Titlebar right cluster ---
   V1.2 fix (2026-05-21): .app-titlebar uses justify-content:center, so
   any in-flow child gets centred with the title block, leaving the
   avatar visually next to the session header instead of pinned right.
   Take actions out of flow with absolute positioning. */
.app-titlebar-actions{
  position:absolute;
  right:max(12px,env(safe-area-inset-right,0));
  top:var(--app-titlebar-safe-top,0);
  height:38px;
  display:flex;align-items:center;gap:6px;
  -webkit-app-region:no-drag;
  z-index:2;
}
.titlebar-icon-btn{
  width:32px;height:32px;border-radius:8px;background:transparent;border:0;
  color:var(--text);display:inline-flex;align-items:center;justify-content:center;
  cursor:pointer;position:relative;transition:background .15s,color .15s;
}
.titlebar-icon-btn:hover:not(:disabled){background:var(--surface-subtle-hover,rgba(0,0,0,.045));}
.titlebar-icon-btn:disabled{opacity:.45;cursor:not-allowed;}
.titlebar-icon-dot{
  position:absolute;top:6px;right:7px;width:7px;height:7px;border-radius:50%;
  background:#DC2626;border:2px solid var(--bg);
}
.titlebar-avatar{
  width:32px;height:32px;border-radius:50%;background:var(--accent);
  color:#fff;border:0;cursor:pointer;display:inline-flex;align-items:center;
  justify-content:center;font-weight:600;font-size:13px;
  transition:box-shadow .15s,transform .05s;
  padding:0;
}
.titlebar-avatar:hover{box-shadow:0 0 0 3px var(--accent-bg-strong,rgba(184,134,11,.18));}
.titlebar-avatar:active{transform:scale(.97);}
.titlebar-avatar-letter{line-height:1;text-transform:uppercase;}

/* --- Account popover --- */
.account-popover-mask{
  position:fixed;inset:0;background:transparent;z-index:250;
}
.account-popover{
  position:fixed;top:52px;right:12px;width:280px;
  background:var(--surface,#fff);border:1px solid var(--border);
  border-radius:12px;
  box-shadow:0 8px 28px rgba(0,0,0,.12),0 1px 3px rgba(0,0,0,.06);
  padding:6px;z-index:260;
  font-size:14px;color:var(--text);
}
.account-pop-section{padding:4px;border-bottom:1px solid var(--border);}
.account-pop-section-last,.account-pop-section:last-child{border-bottom:0;}
.account-pop-identity{display:flex;align-items:center;gap:10px;padding:8px 10px;}
.account-pop-avatar{
  width:36px;height:36px;border-radius:50%;background:var(--accent);
  color:#fff;display:inline-flex;align-items:center;justify-content:center;
  font-weight:600;font-size:14px;text-transform:uppercase;flex-shrink:0;
}
.account-pop-id-text{min-width:0;flex:1;}
.account-pop-name{font-weight:600;line-height:1.2;font-size:14px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.account-pop-email{color:var(--muted);font-size:12px;line-height:1.3;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:2px;}
.account-pop-tenant{
  margin:4px;padding:8px 10px;background:var(--surface-subtle,rgba(0,0,0,.025));
  border-radius:8px;border-bottom:0;
}
.account-pop-row{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:12px;}
.account-pop-row + .account-pop-row{margin-top:4px;}
.account-pop-row[hidden]{display:none;}
.account-pop-row-label{color:var(--muted);flex-shrink:0;}
.account-pop-row-val{
  color:var(--text);font-weight:500;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  max-width:170px;text-align:right;
}
.account-pop-item{
  display:flex;align-items:center;gap:10px;width:100%;
  padding:8px 10px;border-radius:8px;border:0;background:transparent;
  font-size:13px;color:var(--text);cursor:pointer;text-align:left;
  text-decoration:none;font:inherit;line-height:1.3;
  transition:background .12s,color .12s;
}
.account-pop-item[hidden]{display:none!important;}
.account-pop-item:hover{background:var(--surface-subtle-hover,rgba(0,0,0,.045));}
.account-pop-item:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;}
.account-pop-item svg{width:16px;height:16px;color:var(--muted);flex-shrink:0;}
.account-pop-item:hover svg{color:var(--text);}
.account-pop-ext{margin-left:auto;color:var(--muted);font-size:14px;line-height:1;}
.account-pop-item-danger{color:#DC2626;}
.account-pop-item-danger svg{color:#DC2626;}
.account-pop-item-danger:hover{background:rgba(220,38,38,.08);color:#DC2626;}

/* --- Rail / sidebar-nav: hide entries moved to popover --- */
/* Keep DOM (panel-view nodes intact) so switchPanel() routing still works. */
.rail .nav-tab[data-panel="profiles"],
.rail .nav-tab[data-panel="insights"],
.rail .nav-tab[data-panel="settings"],
.sidebar-nav .nav-tab[data-panel="profiles"],
.sidebar-nav .nav-tab[data-panel="insights"],
.sidebar-nav .nav-tab[data-panel="settings"]{
  display:none !important;
}
.rail .rail-spacer{display:none;}

/* --- Rail tier 2 visual de-emphasis --- */
/* Tier 2 = memory / workspaces / todos / context (session-bound). */
.rail .nav-tab[data-panel="memory"],
.rail .nav-tab[data-panel="workspaces"],
.rail .nav-tab[data-panel="todos"],
.rail .nav-tab[data-panel="context"]{
  opacity:.72;
}
.rail .nav-tab[data-panel="memory"]:hover,
.rail .nav-tab[data-panel="workspaces"]:hover,
.rail .nav-tab[data-panel="todos"]:hover,
.rail .nav-tab[data-panel="context"]:hover,
.rail .nav-tab[data-panel="memory"].active,
.rail .nav-tab[data-panel="workspaces"].active,
.rail .nav-tab[data-panel="todos"].active,
.rail .nav-tab[data-panel="context"].active{
  opacity:1;
}
/* Separator between Tier 1 (chat/tasks/skills) and Tier 2 */
.rail .nav-tab[data-panel="memory"]{
  position:relative;margin-top:10px;
}
.rail .nav-tab[data-panel="memory"]::before{
  content:"";position:absolute;left:50%;top:-6px;transform:translateX(-50%);
  width:24px;height:1px;background:var(--border);
}

/* --- Mobile: popover becomes near-fullscreen sheet --- */
@media (max-width: 767px){
  .account-popover{
    top:auto;bottom:0;right:0;left:0;width:auto;
    border-radius:14px 14px 0 0;
    padding:8px 8px calc(env(safe-area-inset-bottom,0) + 12px);
    max-height:80vh;overflow:auto;
  }
  .app-titlebar-actions{padding-right:8px;gap:4px;}
}

/* =========================================================
   Account Chrome V1.1 — tooltip + arrow-nav focus polish (2026-05-21)
   ========================================================= */
.titlebar-avatar-wrap{position:relative;display:inline-flex;}
.titlebar-avatar-tip{
  position:absolute;top:calc(100% + 8px);right:0;
  background:var(--text);color:var(--bg);
  padding:6px 10px;border-radius:8px;
  font-size:12px;line-height:1.35;white-space:nowrap;
  box-shadow:0 4px 12px rgba(0,0,0,.18);
  opacity:0;transform:translateY(-4px);transition:opacity .14s ease,transform .14s ease;
  pointer-events:none;z-index:80;
  max-width:280px;
}
.titlebar-avatar-tip.visible{opacity:1;transform:translateY(0);}
.titlebar-avatar-tip-line1{font-weight:600;}
.titlebar-avatar-tip-line2{opacity:.75;font-size:11px;margin-top:2px;}
/* arrow on the tooltip pointing up at the avatar */
.titlebar-avatar-tip::before{
  content:"";position:absolute;top:-4px;right:12px;
  width:8px;height:8px;background:var(--text);
  transform:rotate(45deg);border-radius:1px;
}

/* keyboard focus ring inside popover (arrow nav) */
.account-pop-item:focus-visible{
  outline:2px solid var(--accent);outline-offset:-2px;
  background:var(--surface-subtle-hover,rgba(0,0,0,.045));
}

/* mobile: tooltip above bottom-sheet (popover) wouldn't make sense — hide on touch */
@media (hover: none){
  .titlebar-avatar-tip{display:none !important;}
}

/* =========================================================
   Account Chrome V1.3 cleanup (2026-05-21)
   After V1.3 moved the light base tokens to neutral Manus values
   (--bg #FAFAFA / --sidebar #F5F5F5 / --surface #FFFFFF / etc),
   most V1.2 chrome-scoped overrides became redundant — they were
   re-declaring values the new tokens already supply. This block
   keeps ONLY the overrides that still carry a real visual delta:

     1. Titlebar bg whiter than --sidebar (chrome shell pops out
        from the sidebar grey).
     2. Avatar emerald (#1A7F4F) — defies skin --accent so users
        see the same green regardless of which of the 7 skins they
        picked. Identity anchor.
     3. Popover dividers + tenant block subtler than --border so
        the popover doesn't feel like a wireframe.
     4. Item-icon colour one shade darker than --muted so icons
        read clearly against the white popover.
     5. Focus ring emerald to match avatar.

   Everything else (name/email/row-label/row-val/danger colours,
   etc.) is inherited from --text/--muted/hardcoded danger red
   and doesn't need a chrome-scoped repeat.
   ========================================================= */

/* 1. Titlebar — whiter than the grey sidebar */
:root:not(.dark) .app-titlebar{
  background:#FFFFFF;
  border-bottom-color:#E5E5E5;
}

/* 2. Avatar — emerald identity anchor (light mode) */
:root:not(.dark) .titlebar-avatar{background:#1A7F4F;}
:root:not(.dark) .titlebar-avatar:hover{box-shadow:0 0 0 3px rgba(26,127,79,.18);}
:root:not(.dark) .account-pop-avatar{background:#1A7F4F;}

/* 3. Popover — slightly deeper shadow + softer dividers + tenant block */
:root:not(.dark) .account-popover{
  box-shadow:0 10px 28px rgba(0,0,0,.10),0 1px 3px rgba(0,0,0,.06);
}
:root:not(.dark) .account-popover .account-pop-section{border-bottom-color:#EDEDED;}
:root:not(.dark) .account-pop-tenant{background:#F5F5F5;border:1px solid #ECECEC;}

/* 4. Item icons slightly darker than --muted for clarity on white */
:root:not(.dark) .account-pop-item svg{color:#525252;}

/* 5. Focus ring emerald (matches avatar identity) */
:root:not(.dark) .account-pop-item:focus-visible{
  outline-color:#1A7F4F;
  background:#F4F4F4;
}

/* =========================================================
   Account Chrome V1.4 — rail hover label fix (2026-05-21)
   Bug: in light mode, hovering a rail button rendered a white
   strip under the icon (the embedded title label). Root cause:
   the legacy rule
     :root:not(.dark) .nav-tab:hover::after { background:var(--surface); ... }
   (specificity 0,4,1) overrode the earlier
     .rail .nav-tab:hover::after { background:transparent; ... }
   (specificity 0,3,1), forcing the white surface colour on the
   in-button label that rail-btn renders via ::after (attr(title)).
   The legacy rule is meant for sidebar-nav tooltips (absolute-
   positioned chip above the bar), not for the in-flow rail label.
   Fix: re-assert transparent + currentColor on rail labels with
   a selector that out-specifices the legacy one (5,1 via
   :root:not(.dark) + .rail + .nav-tab + :hover + ::after).
   ========================================================= */
:root:not(.dark) .rail .nav-tab:hover::after,
:root:not(.dark) .rail .rail-btn:hover::after{
  background:transparent;
  border-color:transparent;
  color:currentColor;
  box-shadow:none;
}

/* ============================================================
 * 2026-05-25 V3 · workspace polish — visual + interaction
 * 只动视觉(无功能),override 上文规则,Polsia minimal 风
 * ============================================================ */

/* ── 1. 模块卡:间距 / hover 反馈 / 细分割 ── */
.pmtsoul-ws-module{
  margin-bottom:28px;
  transition:background .15s ease;
}
.pmtsoul-ws-module:hover{background:transparent;}
html.dark .pmtsoul-ws-module:hover{background:transparent;}

/* ── 2. 模块 head:Polsia 风,标题下细分割线 ──
 * 2026-05-25 用户:参考 Polsia,模块标题下都有一条 1px 分割线。 */
.pmtsoul-ws-module-head{
  border-bottom:1px solid var(--border, #E5E3DC);
  padding-bottom:8px;
  margin-bottom:14px;
  gap:7px;
  align-items:baseline;
}
html.dark .pmtsoul-ws-module-head{
  border-bottom-color:var(--border, #2D2D2D);
}
.pmtsoul-ws-module-head-icon{
  font-size:13px;
  opacity:0.7;
}
.pmtsoul-ws-module-head-title{
  font-size:15px;
  font-weight:600;
  font-family:"Times New Roman",serif;
  letter-spacing:0.01em;
}
/* LED:只在 running/error 时显;idle/ready 隐藏 */
.pmtsoul-ws-module-head-led{
  width:5px;
  height:5px;
  opacity:0;
  transition:opacity .2s ease;
}
.pmtsoul-ws-module-head-led--running,
.pmtsoul-ws-module-head-led--error,
.pmtsoul-ws-module-head-led--blocked{opacity:1;}
.pmtsoul-ws-module-head-meta{
  margin-left:auto;
  font-size:10.5px;
  color:#B0ACA0;
  letter-spacing:0.02em;
  gap:6px;
}
.pmtsoul-ws-module-head-meta-time{color:#B0ACA0;font-variant-numeric:tabular-nums;}
html.dark .pmtsoul-ws-module-head-meta,
html.dark .pmtsoul-ws-module-head-meta-time{color:#8A8780;}
.pmtsoul-ws-module-head-refresh{
  opacity:0.5;
  transition:opacity .15s ease, color .15s ease;
}
.pmtsoul-ws-module-head-refresh:hover{opacity:1;}

/* ── 3. section title:更轻 ── */
.pmtsoul-ws-section-title{
  font-size:17px;
  font-weight:500;
  border-bottom:none;
  padding-bottom:0;
  margin-bottom:10px;
  color:#1A1A1A;
  letter-spacing:0.005em;
}
.pmtsoul-ws-section-title--gap{margin-top:24px;}
html.dark .pmtsoul-ws-section-title{color:#E8E6E0;}

/* ── 4. 查看全部 link:克制 + hover 反馈 ── */
.pmtsoul-ws-module-foot{
  border-top:none;
  padding:0;
  margin-top:14px;
  text-align:left;
}
.pmtsoul-ws-module-viewall{
  font-size:10.5px;
  color:#9A9685;
  letter-spacing:0.12em;
  text-transform:uppercase;
  font-weight:500;
  font-family:-apple-system,BlinkMacSystemFont,sans-serif;
  text-decoration:none;
  display:inline-flex;
  align-items:center;
  gap:4px;
  position:relative;
}
.pmtsoul-ws-module-viewall::after{
  content:"→";
  display:inline-block;
  transition:transform .18s ease;
  letter-spacing:0;
}
.pmtsoul-ws-module-viewall:hover{
  color:#111;
  text-decoration:underline;
  text-underline-offset:3px;
}
.pmtsoul-ws-module-viewall:hover::after{transform:translateX(2px);}
/* 保持 HTML 原文「查看全部 →」(i18n 友好),不用 ::after 加箭头避免双重 */
.pmtsoul-ws-module-viewall::after{display:none;}
html.dark .pmtsoul-ws-module-viewall{color:#888;}
html.dark .pmtsoul-ws-module-viewall:hover{color:#E8E6E0;}

/* ── 5. Identity card (Hire Your AI):Polsia 风 minimal 灰卡 ── */
.pmtsoul-ws-identity-card{
  background:#F5F4ED;
  border:1px solid #E5E3DC;
  border-radius:2px;
  padding:32px 24px 26px;
  box-shadow:none;
}
.pmtsoul-ws-identity-title{
  font-family:"Times New Roman",serif !important;
  font-size:26px !important;
  font-weight:500;
  color:#111;
  letter-spacing:-0.005em;
  line-height:1.15;
}
.pmtsoul-ws-identity-price{
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:11px;
  color:#888;
  letter-spacing:0.04em;
  text-transform:uppercase;
  margin:14px 0 16px;
}
.pmtsoul-ws-identity-price strong{color:#111;font-weight:500;}
.pmtsoul-ws-identity-trial{
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:10.5px;
  color:#888;
  letter-spacing:0.06em;
  margin-top:14px;
}
/* trial 按钮:黑底 Polsia 风 */
.pmtsoul-ws-identity-card .pmtsoul-ws-btn-primary-dark{
  background:#111;
  color:#fff;
  border:1px solid #111;
  border-radius:2px;
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:12px;
  letter-spacing:0.12em;
  text-transform:uppercase;
  padding:12px 16px;
  width:100%;
  transition:background .15s ease;
}
.pmtsoul-ws-identity-card .pmtsoul-ws-btn-primary-dark:hover{background:#000;}
html.dark .pmtsoul-ws-identity-card{background:#1E1E1B;border-color:#2D2D2D;}
html.dark .pmtsoul-ws-identity-title{color:#E8E6E0;}
html.dark .pmtsoul-ws-identity-price strong{color:#E8E6E0;}

/* ── 6. 全代理模式按钮:克制橙色 ── */
.pmtsoul-ws-btn-god{
  background:#D4541E;
  background:linear-gradient(180deg,#D4541E,#B8420E);
  border-color:#B8420E;
  border-radius:2px;
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:12px;
  letter-spacing:0.1em;
  text-transform:uppercase;
  padding:12px 16px;
  box-shadow:none;
  transition:filter .15s ease;
}
.pmtsoul-ws-btn-god:hover{filter:brightness(0.92);}

/* ── 7. mascot card:更轻 ── */
.pmtsoul-ws-mascot-card{
  background:transparent;
  border:1px solid #E5E3DC;
  border-radius:2px;
  padding:14px 16px;
  margin-bottom:14px;
}
.pmtsoul-ws-mascot-card[data-mascot-active-role]{
  background:rgba(26,127,79,0.025);
  border-color:rgba(26,127,79,0.18);
}
html.dark .pmtsoul-ws-mascot-card{border-color:#2D2D2D;}

/* ── 8. 任务卡 hover 反馈 ── */
.pmtsoul-ws-task-card,
.pmtsoul-ws-mgr-item{
  transition:background .15s ease, border-color .15s ease;
  cursor:default;
}
.pmtsoul-ws-task-card:hover,
.pmtsoul-ws-mgr-item:hover{
  border-color:#B0ACA0;
}

/* ── 9. button 通用:细节统一 ── */
.pmtsoul-ws-btn-pill,
.pmtsoul-ws-btn-block,
.pmtsoul-ws-btn-medium{
  border-radius:2px;
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:11px;
  letter-spacing:0.08em;
  text-transform:uppercase;
  transition:background .15s ease, border-color .15s ease;
}

/* ── 10. brand-bar:更紧 ── */
.pmtsoul-ws-brand-bar{
  padding:18px 32px;
  border-bottom:1px solid #E5E3DC;
  background:transparent;
}
.pmtsoul-ws-brand-logo{
  font-family:"Times New Roman",serif;
  font-size:24px;
  font-weight:500;
  letter-spacing:-0.005em;
}

/* ── 11. workspace col padding 更舒展 ── */
.pmtsoul-ws-col{padding:32px 28px;}

/* ── 12. 模块 empty state:更克制 ── */
.pmtsoul-ws-module-empty{
  /* 2026-05-25:去 dashed border + 灰色背景(用户误以为是 hover 选中样式)。
   * 纯文字提示即可,不需要框包裹。 */
  background:transparent;
  border:none;
  padding:14px 4px;
  text-align:center;
  font-size:12px;
  color:#888;
  line-height:1.55;
}
.pmtsoul-ws-module-empty-action{
  display:inline-block;
  margin-top:6px;
  color:#111;
  text-decoration:underline;
  text-underline-offset:3px;
  font-size:11px;
  cursor:pointer;
}
.pmtsoul-ws-module-empty-action:hover{color:#1A7F4F;}
html.dark .pmtsoul-ws-module-empty{background:#1A1A1A;border-color:#2D2D2D;color:#888;}
html.dark .pmtsoul-ws-module-empty-action{color:#E8E6E0;}

/* ── 13. console:更克制 ── */
.pmtsoul-ws-console-summary{font-size:11.5px;letter-spacing:0.01em;}
.pmtsoul-ws-console-toggle{
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:10px;
  letter-spacing:0.12em;
  text-transform:uppercase;
  border-color:#333;
}

/* ── 14. fab 微调 ── */
.pmtsoul-ws-chat-fab{
  transition:transform .15s ease, box-shadow .15s ease;
}
.pmtsoul-ws-chat-fab:hover{
  transform:scale(1.04);
  box-shadow:0 6px 20px rgba(0,0,0,0.3);
}

/* ── 15. media tile / email row hover 反馈 ── */
.pmtsoul-ws-media-tile{
  transition:opacity .15s ease;
  cursor:pointer;
}
.pmtsoul-ws-media-tile:hover{opacity:0.85;}

/* ── 16. updated-row(13 小时前更新)更克制 ── */
.pmtsoul-ws-updated-row{
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:10.5px;
  color:#9A9685;
  letter-spacing:0.04em;
  margin-top:8px;
}
.pmtsoul-ws-updated-row a{
  color:#9A9685;
  text-decoration:underline;
  text-underline-offset:2px;
}
.pmtsoul-ws-updated-row a:hover{color:#111;}
html.dark .pmtsoul-ws-updated-row,
html.dark .pmtsoul-ws-updated-row a{color:#888;}
html.dark .pmtsoul-ws-updated-row a:hover{color:#E8E6E0;}

/* ── 17. big stat (今日 GMV) 更协调 ── */
.pmtsoul-ws-big-stat{
  background:transparent;
  border:none;
  padding:0;
  margin-bottom:18px;
}
.pmtsoul-ws-big-stat-v{
  font-family:"Times New Roman",serif;
  font-weight:500;
  font-variant-numeric:tabular-nums;
}
.pmtsoul-ws-big-stat-label{
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:10.5px;
  letter-spacing:0.1em;
  text-transform:uppercase;
  color:#888;
}

/* ── 18. mobile 微调: brand-bar / col padding ── */
@media (max-width: 640px){
  .pmtsoul-ws-brand-bar{padding:12px 14px;}
  .pmtsoul-ws-brand-logo{font-size:18px;}
  .pmtsoul-ws-col{padding:18px 14px;}
  .pmtsoul-ws-section-title{font-size:15px;}
  .pmtsoul-ws-module-head-title{font-size:14px;}
  .pmtsoul-ws-module-head-icon{font-size:12px;}
}

/* ============================================================
 * 2026-05-25 V4 · workspace token 化 (全局皮肤同步)
 * ------------------------------------------------------------
 * 之前用 hardcode 颜色 (#F5F4ED #E5E3DC 等),切皮肤 workspace 不变
 * 现统一映射到全局 token,8 个皮肤(Default/Ares/Mono/Slate/Poseidon/
 * Sisyphus/Charizard/Sienna)都能正确显示
 * ------------------------------------------------------------
 * Mapping:
 *   #F5F4ED / #F5F4EE / #FAFAF7   → var(--surface) / var(--sidebar)
 *   #E5E3DC                        → var(--border)
 *   #D8D5CB                        → var(--border2)
 *   #9A9685 / #B0ACA0 / #888       → var(--muted)
 *   #111 / #1A1A1A                 → var(--text)
 *   #1A7F4F / #198F4F              → 保留(success 语义色)
 *   #FFD66B / #D4541E              → 保留(LED / 全代理 brand 色)
 * ============================================================ */

/* ── 基础容器 ── */
/* 2026-07-22 · 原 .pmtsoul-ws-erp{background:var(--bg);color:var(--text)} 删除:
   它被上一行多余的 } 吞掉、从未生效,且与后续更具体的规则同色
   (实测计算值 rgb(250,250,247) 不因它变化)。删规则而非复活它,
   避免把一条死了很久的规则当成新视觉设计引入。 */
.pmtsoul-ws-main-split{background:var(--border);}
.pmtsoul-ws-workspace{background:var(--border);}
.pmtsoul-ws-workspace-grid{background:var(--border);}
.pmtsoul-ws-col{background:var(--surface);}
.pmtsoul-ws-chat-side{background:var(--surface);border-left-color:var(--border);}

/* ── brand bar ── */
.pmtsoul-ws-brand-bar{
  background:var(--surface);
  border-bottom-color:var(--border);
}
.pmtsoul-ws-brand-logo{color:var(--text);}

/* ── 模块卡 ── */
/* 2026-05-25:hover background 源头改 transparent — dev tools 证实
 * 这条 rule(var(--hover-bg))在用户浏览器生效,!important override
 * 因 cache 未刷被 specificity 一致后定义的反而盖不住。直接源头改。 */
.pmtsoul-ws-module:hover{background:transparent;}
.pmtsoul-ws-module-head-title{color:var(--text);}
.pmtsoul-ws-module-head-meta,
.pmtsoul-ws-module-head-meta-time{color:var(--muted);display:none;}
.pmtsoul-ws-module-head-refresh{color:var(--muted);}
.pmtsoul-ws-module-head-refresh:hover{color:var(--accent);}

/* LED 状态色:语义色保留,但用 token 包裹 hover bg */
.pmtsoul-ws-module-head-led--ready{background:var(--accent);}

/* ── section title ── */
.pmtsoul-ws-section-title{color:var(--text);}

/* ── viewall ── */
.pmtsoul-ws-module-viewall{color:var(--muted);}
.pmtsoul-ws-module-viewall:hover{color:var(--text);}

/* ── identity card (Hire AI) ── */
.pmtsoul-ws-identity-card{
  background:var(--sidebar);
  border-color:var(--border);
}
.pmtsoul-ws-identity-title{color:var(--text);}
.pmtsoul-ws-identity-price,
.pmtsoul-ws-identity-trial{color:var(--muted);}
.pmtsoul-ws-identity-price strong{color:var(--text);}
.pmtsoul-ws-identity-card .pmtsoul-ws-btn-primary-dark{
  background:var(--text);
  color:var(--bg);
  border-color:var(--text);
}
.pmtsoul-ws-identity-card .pmtsoul-ws-btn-primary-dark:hover{
  background:var(--accent);
  border-color:var(--accent);
  color:#fff;
}

/* ── mascot card ── */
.pmtsoul-ws-mascot-card{
  background:transparent;
  border-color:var(--border);
}
.pmtsoul-ws-mascot-card[data-mascot-active-role]{
  background:var(--accent-bg);
  border-color:var(--accent-bg-strong);
}
.pmtsoul-ws-mascot-name{color:var(--text);}
.pmtsoul-ws-mascot-desc{color:var(--muted);}

/* ── big stat (今日 GMV) ── */
.pmtsoul-ws-big-stat-v{color:var(--text);}
.pmtsoul-ws-big-stat-label{color:var(--muted);}
.pmtsoul-ws-mini-stat-v{color:var(--text);}
.pmtsoul-ws-mini-stat-l{color:var(--muted);}

/* ── empty state ── */
.pmtsoul-ws-module-empty{
  background:var(--input-bg);
  border-color:var(--border2);
  color:var(--muted);
}
.pmtsoul-ws-module-empty-action{color:var(--text);}
.pmtsoul-ws-module-empty-action:hover{color:var(--accent);}

/* ── updated row ── */
.pmtsoul-ws-updated-row{color:var(--muted);}
.pmtsoul-ws-updated-row a{color:var(--muted);}
.pmtsoul-ws-updated-row a:hover{color:var(--text);}

/* ── task card ── */
.pmtsoul-ws-task-card{
  background:var(--input-bg);
  border-color:var(--border);
}
.pmtsoul-ws-task-card:hover{border-color:var(--muted);}
.pmtsoul-ws-task-title{color:var(--text);}
.pmtsoul-ws-task-desc{color:var(--muted);}

/* ── email module ── */
.pmtsoul-ws-email-from,
.pmtsoul-ws-email-stats{color:var(--muted);}
.pmtsoul-ws-email-row{
  background:var(--input-bg);
  border-color:var(--border);
}
.pmtsoul-ws-email-row:hover{background:var(--hover-bg);}
.pmtsoul-ws-email-subject{color:var(--text);}
.pmtsoul-ws-email-ts,
.pmtsoul-ws-email-to{color:var(--muted);}

/* ── chat side ── */
.pmtsoul-ws-chat-history{color:var(--text);}
.pmtsoul-ws-chat-input-bar{border-top-color:var(--border);}
.pmtsoul-ws-chat-input,
textarea.pmtsoul-ws-chat-input{
  background:var(--input-bg);
  border-color:var(--border);
  color:var(--text);
}
.pmtsoul-ws-chat-input:focus,
textarea.pmtsoul-ws-chat-input:focus{
  background:var(--surface);
  border-color:var(--accent);
}

/* ── chat fab(全主题适配) ── */
.pmtsoul-ws-chat-fab{background:var(--text);color:var(--bg);}
html.dark .pmtsoul-ws-chat-fab{background:var(--accent);color:var(--bg);}

/* ── modal ── */
.pmtsoul-ws-mgr-card{background:var(--surface);}
.pmtsoul-ws-mgr-head{border-bottom-color:var(--border);}
.pmtsoul-ws-mgr-title{font-family:var(--font-ui);font-size:18px;letter-spacing:0;color:var(--text);}
.pmtsoul-ws-mgr-close{
  background:var(--bg);
  border-color:var(--border);
  border-radius:var(--ui-control-radius);
  color:var(--text);
  min-height:32px;
  box-shadow:none;
}
.pmtsoul-ws-mgr-close:hover{background:var(--hover-bg);}
.pmtsoul-ws-mgr-tabs{border-bottom-color:var(--border);}
.pmtsoul-ws-mgr-tab{color:var(--muted);}
.pmtsoul-ws-mgr-tab:hover{color:var(--text);}
.pmtsoul-ws-mgr-tab--active{
  color:var(--text);
  border-bottom-color:var(--accent);
}
.pmtsoul-ws-mgr-loading,
.pmtsoul-ws-mgr-empty{color:var(--muted);}
.pmtsoul-ws-mgr-item{
  background:var(--input-bg);
  border-color:var(--border);
}
.pmtsoul-ws-mgr-item:hover{border-color:var(--muted);}
.pmtsoul-ws-mgr-item-title{color:var(--text);}
.pmtsoul-ws-mgr-item-desc{color:var(--muted);}
.pmtsoul-ws-mgr-item-owner{color:var(--muted);}
.pmtsoul-ws-mgr-item-tag{
  background:var(--bg);
  border-color:var(--border);
  color:var(--muted);
}

/* ── module foot ── */
.pmtsoul-ws-module-foot{border-top-color:var(--border);}

/* ── ads / social 模块文字色 ── */
.pmtsoul-ws-social-head,
.pmtsoul-ws-social-post,
.pmtsoul-ws-ads-row,
.pmtsoul-ws-ads-summary,
.pmtsoul-ws-module-row,
.pmtsoul-ws-module-row-title{color:var(--text);}
.pmtsoul-ws-module-row-owner{color:var(--muted);}
.pmtsoul-ws-ads-platform{
  background:var(--input-bg);
  color:var(--muted);
  border:1px solid var(--border);
}
/* ── Ads(广告投放)模块卡片 · 2026-06-02 对齐 email-row 工作区统一风格 ── */
.pmtsoul-ws-ads-row{
  background:#FAFAF7;border:1px solid #E5E3DC;border-radius:8px;
  padding:11px 12px;margin-bottom:10px;
}
.pmtsoul-ws-ads-row:last-child{margin-bottom:8px;}
.pmtsoul-ws-ads-name{
  font-size:13.5px;font-weight:500;color:#111;
  display:flex;align-items:center;gap:8px;margin-bottom:5px;
}
.pmtsoul-ws-ads-platform{
  font-size:10px;font-weight:600;letter-spacing:.04em;
  padding:1px 6px;border-radius:4px;flex:none;
  background:var(--input-bg,#F0EEE8);color:var(--muted,#777);border:1px solid var(--border,#E5E3DC);
}
.pmtsoul-ws-ads-meta{
  font-size:11px;color:#888;font-family:-apple-system,sans-serif;
  font-variant-numeric:tabular-nums;line-height:1.5;
}
.pmtsoul-ws-ads-collabs{display:flex;flex-wrap:wrap;gap:4px;margin-top:7px;}
.pmtsoul-ws-ads-chip{
  font-size:10.5px;color:#6B6B6B;background:#F0EEE8;border:1px solid #E5E3DC;
  border-radius:10px;padding:1px 8px;line-height:1.7;
}
.pmtsoul-ws-ads-connector-hint{
  display:flex;flex-wrap:wrap;gap:4px 8px;align-items:center;
  margin-top:7px;color:#888;font-size:11px;line-height:1.55;
}
.pmtsoul-ws-ads-connector-title{font-weight:500;color:#666;}
.pmtsoul-ws-ads-connector-line{color:#888;overflow-wrap:anywhere;}
.pmtsoul-ws-ads-connector-line::before{content:"· ";color:#B0B0B0;}
.pmtsoul-ws-ads-actions{display:flex;gap:8px;margin-top:9px;flex-wrap:wrap;}
.pmtsoul-ws-ads-act{
  background:#fff;border:1px solid #C8C5BB;border-radius:6px;
  padding:5px 12px;font-size:12px;color:#111;cursor:pointer;transition:background .15s;
}
.pmtsoul-ws-ads-act:hover{background:#F2F0EA;}
.pmtsoul-ws-ads-act--primary{background:#1A7F4F;border-color:#1A7F4F;color:#fff;font-weight:500;}
.pmtsoul-ws-ads-act--primary:hover{background:#166B43;}
.pmtsoul-ws-ads-act:disabled{opacity:.5;cursor:default;}
html.dark .pmtsoul-ws-ads-row{background:#222;border-color:#2D2D2D;}
html.dark .pmtsoul-ws-ads-name{color:#E8E6E0;}
html.dark .pmtsoul-ws-ads-meta{color:#9A9A9A;}
html.dark .pmtsoul-ws-ads-chip{background:#2A2A2A;border-color:#3A3A3A;color:#B0B0B0;}
html.dark .pmtsoul-ws-ads-connector-hint,
html.dark .pmtsoul-ws-ads-connector-line{color:#9A9A9A;}
html.dark .pmtsoul-ws-ads-connector-title{color:#B0B0B0;}
html.dark .pmtsoul-ws-ads-act{background:#202020;border-color:#3A3A3A;color:#E8E6E0;}
html.dark .pmtsoul-ws-ads-act:hover{background:#2A2A2A;}
html.dark .pmtsoul-ws-ads-act--primary{background:#1A7F4F;border-color:#1A7F4F;color:#fff;}

/* ── deliverable chip ── */
.pmtsoul-ws-deliverable-chip{
  background:var(--input-bg);
  border-color:var(--border);
  color:var(--text);
}
.pmtsoul-ws-deliverable-chip:hover{
  background:var(--hover-bg);
  border-color:var(--accent);
}

/* ── 全代理按钮:用 accent 让 8 皮肤变化 ── */
.pmtsoul-ws-btn-god{
  background:var(--accent);
  background:linear-gradient(180deg,var(--accent),var(--accent-hover));
  border-color:var(--accent-hover);
}

/* ── Updated chip / pulse 用 accent ── */
.pmtsoul-ws-module-just-updated{
  color:var(--accent);
  background:var(--accent-bg);
  border-color:var(--accent-bg-strong);
}
.pmtsoul-ws-module-just-updated::before{color:var(--accent);}

/* ── 添加成员 / 推送 等通用按钮 ── */
.pmtsoul-ws-btn-block,
.pmtsoul-ws-btn-medium,
.pmtsoul-ws-btn-pill{
  background:var(--surface);
  color:var(--text);
  border:1px solid var(--border);
}
.pmtsoul-ws-btn-block:hover,
.pmtsoul-ws-btn-medium:hover,
.pmtsoul-ws-btn-pill:hover{
  background:var(--hover-bg);
  border-color:var(--accent);
}
.pmtsoul-ws-hint{color:var(--muted);}

/* ── 模块 pulsing animation:用 accent 而不是 hardcode 绿 ── */
@keyframes pmtsoul-ws-module-pulse-accent {
  0%   { background:transparent; box-shadow:0 0 0 0 transparent; }
  20%  { background:var(--accent-bg); box-shadow:0 0 0 4px var(--accent-bg-strong); }
  100% { background:transparent; box-shadow:0 0 0 0 transparent; }
}
.pmtsoul-ws-module--pulsing{animation:pmtsoul-ws-module-pulse-accent 2.2s ease-out 1 !important;}

/* ── 模块 LED ready 用 accent ── */
.pmtsoul-ws-module-head-led--ready{background:var(--accent);}

/* ── 文档/任务 inline list row 风格 ── */
.pmtsoul-ws-module-row{
  padding:8px 10px;
  border-radius:2px;
  display:flex;
  align-items:center;
  gap:8px;
  transition:background .15s ease;
  cursor:pointer;
}
.pmtsoul-ws-module-row:hover{background:var(--hover-bg);}
.pmtsoul-ws-module-row-icon{opacity:0.6;font-size:13px;}
.pmtsoul-ws-module-row-title{
  flex:1;
  font-size:13px;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.pmtsoul-ws-module-row-owner{
  font-size:10.5px;
  font-family:"SF Mono",ui-monospace,monospace;
}

/* ── 接受系统主题的 chat fab ── */
.pmtsoul-ws-chat-close-overlay{
  background:var(--hover-bg);
  color:var(--text);
}
.pmtsoul-ws-chat-close-overlay:active{background:var(--border);}

/* ============================================================
 * 2026-05-25 V5 · P0 polish (3 项)
 *   1. Console 黑色行用 #1A1A1A 替代纯 #000,actor 高亮跟 accent
 *   2. 手机端:Mascot 紧凑 + 模块 margin 18px + brand-bar 单行
 *   3. "查看全部 →" 去 uppercase + letter-spacing(中文友好)
 * ============================================================ */

/* ── 1. Console:亚黑 + accent 高亮 ── */
.pmtsoul-ws-console{
  background:#1A1A1A;
  color:#D0D0D0;
}
.pmtsoul-ws-console-summary-text{color:#C8C8C8;}
/* 2026-07-22 · 控制台恒为深底(#1A1A1A)。品牌色 --accent(#A93817)是为浅底设计的,
   落在这里只有 2.71:1 —— 读不清。深底语境用提亮版 #E76D35(5.50:1),与
   .pmts-task-detail-terminal-screen 里既有的 "> " 前缀取色一致,不改浅色语境的品牌色。 */
.pmtsoul-ws-console-summary-text strong,
.pmtsoul-ws-console-row--live,
.pmtsoul-ws-console-actor{color:#E76D35;}
.pmtsoul-ws-console-row--streaming::after,
.pmtsoul-ws-console-row--live::after{color:#E76D35;}
.pmtsoul-ws-console-toggle{
  border-color:#3A3A3A;
  color:#888;
}
.pmtsoul-ws-console-toggle:hover{
  color:var(--accent);
  border-color:var(--accent);
}

/* ── 3. "查看全部 →" 去 uppercase(中文友好)── */
.pmtsoul-ws-module-viewall{
  text-transform:none;
  letter-spacing:normal;
  font-size:12px;
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Noto Sans CJK SC",sans-serif;
}

/* ── 2. 手机端 (≤640px):Mascot 紧凑 + 模块 18px + brand 单行 ── */
@media (max-width: 640px){
  /* 模块 margin 28 → 18 (紧凑) */
  .pmtsoul-ws-module{margin-bottom:18px;}

  /* Mascot card 紧凑 */
  .pmtsoul-ws-mascot-card{
    padding:10px 12px;
    gap:10px;
    margin-bottom:12px;
  }
  .pmtsoul-ws-mascot-card [data-pms-mascot]{
    transform:scale(0.85);
    transform-origin:left top;
  }
  .pmtsoul-ws-mascot-name{font-size:13px;}
  .pmtsoul-ws-mascot-desc{
    font-size:11.5px;
    line-height:1.45;
    display:-webkit-box;
    -webkit-line-clamp:2;
    -webkit-box-orient:vertical;
    overflow:hidden;
  }

  /* brand-bar 单行 + 隐藏「充值额度」(进 menu 子页,留信息按钮) */
  .pmtsoul-ws-brand-bar{
    flex-wrap:nowrap;
    padding:10px 12px;
  }
  .pmtsoul-ws-brand-bar .pmtsoul-ws-btn-pill:not([data-merchant-ws-info-toggle]){
    display:none;
  }

  /* identity-card 紧凑 */
  .pmtsoul-ws-identity-card{
    padding:20px 16px 18px;
    margin-bottom:12px;
  }
  .pmtsoul-ws-identity-title{font-size:21px !important;}
  .pmtsoul-ws-identity-price{margin:10px 0 12px;font-size:10.5px;}
  .pmtsoul-ws-identity-trial{margin-top:10px;font-size:10px;}

  /* big-stat 紧凑 */
  .pmtsoul-ws-big-stat{margin-bottom:14px;}
  .pmtsoul-ws-big-stat-row{margin-bottom:6px;}

  /* console summary 单行 ellipsis */
  .pmtsoul-ws-console-summary{padding:5px 12px;gap:5px;font-size:10.5px;}
  .pmtsoul-ws-console-summary-text{
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
    flex:1;
    min-width:0;
  }
  .pmtsoul-ws-console-toggle{
    padding:1px 5px;
    font-size:9.5px;
    flex-shrink:0;
  }

  /* viewall 在手机更紧凑 */
  .pmtsoul-ws-module-viewall{font-size:11.5px;}
}

/* ============================================================
 * 2026-05-25 V6 · P1 polish - 交互细节 + 视觉一致
 *   1. brand-bar sticky top
 *   2. 整 row click 反馈 (cursor:pointer + active state)
 *   3. modal 打开过渡动画
 *   4. 模块刷新按钮 hover 时才显(更干净)
 *   5. 左列 section-title 跟模块 head 视觉统一
 *   6. task card / mgr item 视觉精细化
 *   7. 滚动条 token 化 + 细化
 *   8. deliverable chip 精细
 * ============================================================ */

/* ── 1. brand-bar sticky top(滚动时常驻)── */
.pmtsoul-ws-brand-bar{
  position:sticky;
  top:0;
  z-index:20;
  backdrop-filter:blur(8px);
  background:color-mix(in srgb, var(--surface) 92%, transparent);
}
html.dark .pmtsoul-ws-brand-bar{
  background:color-mix(in srgb, var(--surface) 88%, transparent);
}

/* ── 2. 整 row / item click 反馈 ── */
.pmtsoul-ws-task-card,
.pmtsoul-ws-mgr-item,
.pmtsoul-ws-email-row,
.pmtsoul-ws-module-row,
.pmtsoul-ws-doc-row{
  cursor:pointer;
  transition:background .12s ease, border-color .12s ease, transform .08s ease;
}
.pmtsoul-ws-task-card:active,
.pmtsoul-ws-mgr-item:active,
.pmtsoul-ws-email-row:active,
.pmtsoul-ws-module-row:active,
.pmtsoul-ws-doc-row:active{
  transform:scale(0.995);
}
.pmtsoul-ws-doc-row:hover{
  background:var(--hover-bg);
  border-radius:2px;
}

/* ── 3. modal 打开过渡动画 ── */
.pmtsoul-ws-mgr-modal{
  opacity:0;
  pointer-events:none;
  transition:opacity .2s ease;
}
body.pmtsoul-ws-mgr-open .pmtsoul-ws-mgr-modal{
  opacity:1;
  pointer-events:auto;
}
.pmtsoul-ws-mgr-card{
  transform:translateY(12px);
  transition:transform .25s cubic-bezier(.32,.72,.16,1);
}
body.pmtsoul-ws-mgr-open .pmtsoul-ws-mgr-card{
  transform:translateY(0);
}

/* chat overlay 同样加过渡 */
.pmtsoul-ws-chat-side{
  transition:transform .22s cubic-bezier(.32,.72,.16,1), opacity .15s ease;
}
@media (max-width: 640px){
  body.pmtsoul-ws-chat-open .pmtsoul-ws-chat-side{
    transform:translateY(0) !important;
    opacity:1;
  }
  body:not(.pmtsoul-ws-chat-open) .pmtsoul-ws-chat-side{
    transform:translateY(20px);
    opacity:0;
  }
}

/* ── 4. 刷新按钮 hover 时才显(更干净)── */
.pmtsoul-ws-module-head-refresh{
  opacity:0;
  transition:opacity .15s ease, color .15s ease, transform .3s ease;
}
.pmtsoul-ws-module:hover .pmtsoul-ws-module-head-refresh,
.pmtsoul-ws-module-head-refresh:focus{
  opacity:0.55;
}
.pmtsoul-ws-module-head-refresh:hover{
  opacity:1 !important;
  color:var(--accent);
}
/* 触屏 (无 hover) 始终半显 */
@media (hover: none){
  .pmtsoul-ws-module-head-refresh{opacity:0.4;}
}

/* ── 5. 左列「今日」「团队」section-title 跟模块 head 视觉统一 ── */
.pmtsoul-ws-section-title{
  font-family:"Times New Roman",serif;
  font-size:15px;
  font-weight:600;
  letter-spacing:0.01em;
  margin-bottom:14px;
  margin-top:0;
  padding-bottom:0;
  border-bottom:none;
  color:var(--text);
}
.pmtsoul-ws-section-title--gap{margin-top:32px;}

/* ── 6. task card 风格精细化 ── */
.pmtsoul-ws-task-card{
  border-radius:2px;
  padding:14px 16px;
  margin-bottom:10px;
  border:1px solid var(--border);
  background:var(--input-bg);
}
.pmtsoul-ws-task-head{
  display:flex;
  align-items:flex-start;
  gap:8px;
  margin-bottom:6px;
}
.pmtsoul-ws-task-title{
  font-family:"Times New Roman",serif;
  font-size:14.5px;
  font-weight:600;
  color:var(--text);
  flex:1;
  line-height:1.3;
}
.pmtsoul-ws-task-desc{
  font-size:12.5px;
  line-height:1.5;
  color:var(--muted);
  margin-bottom:10px;
}
.pmtsoul-ws-task-cta{margin-top:0;}
.pmtsoul-ws-task-contracts{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:8px 0 6px;}
.pmtsoul-ws-task-contract-chip,.pmts-task-detail-contract-chip{
  display:inline-flex;
  align-items:center;
  min-height:24px;
  padding:3px 9px;
  border:1px solid var(--border,#e5e5e5);
  border-radius:999px;
  background:var(--surface,#fff);
  color:var(--muted,#737373);
  font-weight:600;font-size:10.5px;line-height:1.2;
}
.pmtsoul-ws-task-contract-chip[data-tone="ready"],.pmts-task-detail-contract-chip[data-tone="ready"]{color:#1a7f4f;border-color:rgba(26,127,79,.3);background:rgba(26,127,79,.07);}
.pmtsoul-ws-task-contract-chip[data-tone="warning"],.pmts-task-detail-contract-chip[data-tone="warning"]{color:#b45309;border-color:rgba(180,83,9,.3);background:rgba(180,83,9,.07);}
.pmtsoul-ws-task-contract-chip[data-tone="blocked"],.pmts-task-detail-contract-chip[data-tone="blocked"]{color:#c62828;border-color:rgba(198,40,40,.28);background:rgba(198,40,40,.06);}
.pmtsoul-ws-task-contract-hint,.pmtsoul-ws-task-required-action{margin:0 0 8px;color:var(--muted,#737373);font-size:11px;line-height:1.45;overflow-wrap:anywhere;}
.pmtsoul-task-startup-requirements{display:grid;gap:8px;margin:8px 0 10px;}
.pmtsoul-task-startup-requirement{
  display:grid;
  grid-template-columns:minmax(0,1fr);
  gap:10px;
  padding:11px 12px;
  border:1px solid rgba(180,83,9,.28);
  border-radius:8px;
  background:rgba(180,83,9,.06);
}
.pmtsoul-task-startup-requirement__message{color:#9A4210;font-size:11.5px;font-weight:600;line-height:1.5;overflow-wrap:anywhere;}
.pmtsoul-task-startup-requirement__actions{display:flex;align-items:center;justify-content:flex-start;gap:8px;flex-wrap:wrap;}
html.dark .pmtsoul-task-startup-requirement{border-color:rgba(232,141,73,.38);background:rgba(180,83,9,.12);}
html.dark .pmtsoul-task-startup-requirement__message{color:#F0A46B;}

/* tag 在 task 头部 */
.pmtsoul-ws-tag{
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:10px;
  letter-spacing:0.06em;
  text-transform:uppercase;
  padding:2px 7px;
  border-radius:99px;
  background:var(--hover-bg);
  color:var(--muted);
  border:1px solid var(--border);
  flex-shrink:0;
}
.pmtsoul-ws-tag--urgent{
  background:rgba(196,67,16,0.08);
  color:#C44310;
  border-color:rgba(196,67,16,0.25);
}
html.dark .pmtsoul-ws-tag--urgent{
  background:rgba(255,100,50,0.12);
  color:#FF8866;
  border-color:rgba(255,100,50,0.3);
}
.pmtsoul-ws-tag--research{
  background:var(--accent-bg);
  color:var(--accent-text);
  border-color:var(--accent-bg-strong);
}

/* mgr item Polsia 风更精致 */
.pmtsoul-ws-mgr-item{
  border-radius:2px;
  padding:18px 20px;
}
.pmtsoul-ws-mgr-item-title{
  font-family:"Times New Roman",serif;
  font-size:15px;
  font-weight:600;
  margin-bottom:8px;
  line-height:1.3;
}
.pmtsoul-ws-mgr-item-desc{
  font-size:13px;
  line-height:1.55;
  margin-bottom:12px;
}
.pmtsoul-ws-mgr-item-foot{
  font-size:10.5px;
  font-family:"SF Mono",ui-monospace,monospace;
  letter-spacing:0.04em;
}

/* ── 7. 滚动条 token 化 + 细化 ── */
.pmtsoul-ws-workspace::-webkit-scrollbar{width:6px;}
.pmtsoul-ws-workspace::-webkit-scrollbar-thumb{
  background:var(--border);
  border-radius:99px;
}
.pmtsoul-ws-workspace::-webkit-scrollbar-thumb:hover{background:var(--muted);}
.pmtsoul-ws-workspace::-webkit-scrollbar-track{background:transparent;}
.pmtsoul-ws-chat-history::-webkit-scrollbar{width:5px;}
.pmtsoul-ws-chat-history::-webkit-scrollbar-thumb{
  background:var(--border2);
  border-radius:99px;
}
.pmtsoul-ws-mgr-body::-webkit-scrollbar{width:5px;}
.pmtsoul-ws-mgr-body::-webkit-scrollbar-thumb{
  background:var(--border);
  border-radius:99px;
}


/* ── 8. deliverable chip Polsia 风精细 ── */
.pmtsoul-ws-deliverable-chip{
  border-radius:2px;
  padding:3px 8px;
  font-size:11px;
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Noto Sans CJK SC",sans-serif;
  gap:4px;
}
.pmtsoul-ws-deliverable-chip-icon{font-size:11px;opacity:0.7;}
.pmtsoul-ws-deliverable-chip-title{
  font-size:11px;
  letter-spacing:0.01em;
}

/* ── 9. 模块 head meta time 字号统一 ── */
.pmtsoul-ws-module-head-meta-time{
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:10.5px;
  letter-spacing:0.04em;
}

/* ── 10. LED 在 ready 时不显(避免每个模块右上都点亮)── */
.pmtsoul-ws-module-head-led--idle,
.pmtsoul-ws-module-head-led--ready{opacity:0;}
.pmtsoul-ws-module-head-led--running,
.pmtsoul-ws-module-head-led--error,
.pmtsoul-ws-module-head-led--blocked{opacity:1;}

/* ── 11. M9 doc row Polsia 风(标题+时间右对齐)── */
.pmtsoul-ws-doc-row{
  display:flex;
  align-items:center;
  justify-content:space-between;
  padding:10px 12px;
  border-bottom:1px solid var(--border);
  font-size:13px;
}
.pmtsoul-ws-doc-row:last-child{border-bottom:none;}
.pmtsoul-ws-doc-row:hover{
  background:var(--hover-bg);
  border-radius:0;
}
.pmtsoul-ws-doc-name{
  display:flex;
  align-items:center;
  gap:8px;
  color:var(--text);
  flex:1;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.pmtsoul-ws-doc-icon{font-size:13px;opacity:0.7;}
.pmtsoul-ws-doc-ts{
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:10.5px;
  color:var(--muted);
  letter-spacing:0.04em;
  flex-shrink:0;
  margin-left:12px;
}

/* ── 12. fab tooltip(hover 显文字)── */
/* 2026-07-22 · 这里原有一条 .pmtsoul-ws-chat-fab{position:relative} 已删除。
   它的用意是给下面 ::after 提供定位上下文,但 fab 在两个断点里本来就是
   position:fixed —— fixed 同样是 absolute 子元素的包含块,relative 是多余的。
   而这条规则在顶层、无 media,源码位置(7064)排在移动端那条
   @media(max-width:640px){.pmtsoul-ws-chat-fab{position:fixed;width:56px;right:16px}}(4754)
   之后,同特异性后来居上 → 把 fab 从 fixed 打回 relative。
   relative 下 width:56px 不再脱离文档流约束,按钮被拉满父宽:
   实测 582px 视口下 width=582(100% 视口)、left=-16px 溢出屏外,
   在页面底部拉成一条横贯全宽的黑条。 */
.pmtsoul-ws-chat-fab::after{
  content:attr(aria-label);
  position:absolute;
  right:calc(100% + 8px);
  top:50%;
  transform:translateY(-50%);
  background:var(--text);
  color:var(--bg);
  font-size:11px;
  padding:4px 8px;
  border-radius:3px;
  white-space:nowrap;
  opacity:0;
  pointer-events:none;
  transition:opacity .15s ease;
  font-family:-apple-system,BlinkMacSystemFont,sans-serif;
  letter-spacing:0;
}
@media (hover: hover){
  .pmtsoul-ws-chat-fab:hover::after{opacity:1;}
}
/* 触屏不显 tooltip */
@media (hover: none){
  .pmtsoul-ws-chat-fab::after{display:none;}
}

/* 2026-05-25 fix: modal tabs 容器空时(非 tasks key 无 tab)不显 border-bottom
 * 之前在 head + tabs 两条 border 重叠,看起来像两条横线。 */
.pmtsoul-ws-mgr-tabs:empty{
  display:none;
}

/* 2026-05-25 fix: 当 modal 无 tab 时(tabsEl display:none),
 * head 的 border-bottom 变成"漂浮的一条线",视觉上还是显得多余。
 * 实际上 Polsia 截图 head 跟 body 之间是有一条线的,保留 OK。
 * 这里只用 dark theme 的 head border 稍微淡化让视觉更轻。 */
.pmtsoul-ws-mgr-head{border-bottom-color:var(--border);}

/* Task detail: a customer-facing operating view, not a runtime inspector. */
/* 2026-07-22 · 原 .pmtsoul-ws-mgr-card.pmtsoul-task-detail-card{...} 删除。
   它被上一行多余的 } 吞掉、从未进入有效 CSSOM;而且**当前生产 DOM 不匹配它** ——
   两个 class 分别在外层与内层元素上,不在同一个元素:
     外层 .pmtsoul-ws-mgr-modal .pmtsoul-ws-mgr-pagemode .pmtsoul-task-detail-card
     内层 .pmtsoul-ws-mgr-card
   2026-07-22 实测 querySelectorAll('.pmtsoul-ws-mgr-card.pmtsoul-task-detail-card').length === 0。
   (若将来两个 class 被合并到同一元素,这条注释即失效 —— 届时应重新判定,而不是照搬本结论。)
   删规则而非复活它:复活既改不了任何东西(选择器不匹配),
   留着又会让后人误以为详情卡尺寸由它决定。真实样式来自内层
   .pmtsoul-ws-mgr-card(padding:24px 28px 28px / overflow:visible)。 */
.pmtsoul-task-detail-card .pmtsoul-ws-mgr-head{
  min-height:52px;
  margin:0;
  padding:0 24px;
  background:var(--surface,#fff);
}
.pmtsoul-task-detail-card .pmtsoul-ws-mgr-body{
  gap:0;
  background:var(--bg,#fafafa);
}
.pmts-task-detail{color:var(--text,#111);}
.pmts-task-detail-hero{
  padding:30px 40px 28px;
  background:var(--surface,#fff);
  border-bottom:1px solid var(--border,#e5e5e5);
}
.pmts-task-detail-hero-nav{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:20px;
  min-height:30px;
  margin-bottom:14px;
}
.pmts-task-detail-hero-meta{display:flex;align-items:center;gap:14px;min-width:0;}
.pmts-task-detail-back{
  appearance:none;
  border:0;
  background:transparent;
  padding:5px 0;
  color:var(--muted,#737373);
  font-weight:600;font-size:12px;line-height:1.2;font-family:inherit;
  cursor:pointer;
  white-space:nowrap;
}
.pmts-task-detail-back:hover{color:var(--text,#111);}
.pmts-task-detail-back:focus-visible{outline:2px solid var(--accent,#a93817);outline-offset:4px;border-radius:2px;}
.pmts-task-detail-kicker{
  display:flex;
  align-items:center;
  gap:8px;
  flex-wrap:wrap;
  margin:0;
  color:var(--muted,#737373);
  font-size:11px;
}
.pmts-task-detail-kicker span{
  border:1px solid var(--border,#e5e5e5);
  border-radius:999px;
  padding:3px 8px;
  background:var(--bg,#fafafa);
}
.pmts-task-detail-title{
  margin:0;
  max-width:920px;
  font-family:"Times New Roman",Georgia,serif;
  font-size:30px;
  line-height:1.2;
  font-weight:600;
  letter-spacing:0;
  overflow-wrap:anywhere;
}
.pmts-task-detail-title.is-long{font-size:24px;line-height:1.28;max-width:1040px;}
.pmts-task-detail-statusline{
  display:flex;
  align-items:center;
  gap:10px;
  flex-wrap:wrap;
  margin-top:14px;
}
.pmts-task-detail-status{
  display:inline-flex;
  align-items:center;
  gap:7px;
  font-size:13px;
  font-weight:650;
}
.pmts-task-detail-status::before{
  content:"";
  width:8px;
  height:8px;
  border-radius:50%;
  background:currentColor;
}
.pmts-task-detail-status[data-tone="running"],
.pmts-task-detail-status[data-tone="done"]{color:#1a7f4f;}
.pmts-task-detail-status[data-tone="waiting"]{color:#b45309;}
.pmts-task-detail-status[data-tone="failed"]{color:#c62828;}
.pmts-task-detail-status[data-tone="idle"]{color:#737373;}
.pmts-task-detail-summary{
  max-width:900px;
  margin:14px 0 0;
  font-size:14px;
  line-height:1.7;
  color:var(--muted,#737373);
}
.pmts-task-detail-primary{
  margin-left:auto;
  min-height:38px;
  padding:8px 16px;
  border:1px solid #111;
  border-radius:4px;
  background:#111;
  color:#fff;
  font-weight:600;font-size:13px;line-height:1.2;font-family:inherit;
  cursor:pointer;
}
.pmts-task-detail-tools{display:flex;align-items:center;justify-content:flex-end;gap:14px;flex-wrap:wrap;}
.pmts-task-detail-tool{
  appearance:none;
  border:0;
  background:transparent;
  padding:5px 0;
  color:var(--muted,#737373);
  font-weight:600;font-size:12px;line-height:1.2;font-family:inherit;
  cursor:pointer;
}
.pmts-task-detail-tool:hover{color:var(--text,#111);}
.pmts-task-detail-tool.is-danger:hover{color:#c44310;}
.pmts-task-detail-tool:focus-visible{outline:2px solid var(--accent,#a93817);outline-offset:3px;border-radius:2px;}
.pmts-task-detail-repeat{position:relative;}
.pmts-task-detail-repeat-menu{
  position:absolute;
  top:calc(100% + 8px);
  right:0;
  z-index:20;
  min-width:210px;
  overflow:hidden;
  border:1px solid var(--border,#e5e5e5);
  border-radius:6px;
  background:var(--surface,#fff);
  box-shadow:0 12px 32px rgba(0,0,0,.12);
}
.pmts-task-detail-repeat-menu button{display:block;width:100%;border:0;border-bottom:1px solid var(--border,#e5e5e5);background:transparent;padding:10px 14px;text-align:left;color:var(--text,#111);font-weight:500;font-size:13px;line-height:1.3;font-family:inherit;cursor:pointer;}
.pmts-task-detail-repeat-menu button:last-child{border-bottom:0;}
.pmts-task-detail-repeat-menu button:hover,.pmts-task-detail-repeat-menu button.is-current{background:var(--bg,#fafafa);}
.pmts-task-detail-grid{
  display:grid;
  /* 2026-07-18 · 中列 minmax(0,1fr) 而非 minmax(520px,…):三栏硬最小和(250+520+260=1030)
     曾超过 981–1105px 视口容器 → 横向溢出(命中 1024 iPad 横屏/窄笔记本,legacy 还 -74px rail)。
     中列可收缩后,任何 >980px 宽都能容下三栏,终端在窄区略窄仍可读,≤980 才塌单列。 */
  grid-template-columns:minmax(250px,290px) minmax(0,1fr) minmax(260px,300px);
  gap:1px;
  align-items:start;
  background:var(--border,#e5e5e5);
  border-bottom:1px solid var(--border,#e5e5e5);
}
.pmts-task-detail-context,.pmts-task-detail-team{
  position:sticky;
  top:0;
  align-self:start;
  max-height:calc(100dvh - var(--pmts-td-chrome-top,39px));
  overflow:auto;
  padding:28px 24px 36px;
  background:var(--surface,#fff);
}
.pmts-task-detail-command{min-width:0;padding:28px 30px 42px;background:var(--bg,#fafafa);}
.pmts-task-detail-lower{max-width:1040px;margin:0 auto;padding:34px 40px 58px;}
.pmts-task-detail-context .pmts-task-detail-section,
.pmts-task-detail-team .pmts-task-detail-section{padding-bottom:22px;margin-bottom:22px;}
.pmts-task-detail-section{
  padding:0 0 26px;
  margin:0 0 26px;
  border-bottom:1px solid var(--border,#e5e5e5);
}
.pmts-task-detail-section:last-child{margin-bottom:0;border-bottom:0;}
.pmts-task-detail-operation-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;}
.pmts-task-detail-operation-item{min-width:0;padding:14px;border:1px solid var(--border,#e5e5e5);border-radius:6px;background:var(--surface,#fff);}
.pmts-task-detail-operation-item p{margin:9px 0 0;color:var(--muted,#737373);font-size:12px;line-height:1.55;}
.pmts-task-detail-operation-item small{display:block;margin-top:8px;color:var(--muted,#737373);font-size:10.5px;}
.pmts-task-detail-coverage{margin-top:12px;padding:14px;border:1px solid var(--border,#e5e5e5);border-radius:6px;background:var(--surface,#fff);}
.pmts-task-detail-coverage-summary{display:flex;align-items:center;gap:18px;flex-wrap:wrap;color:var(--muted,#737373);font-size:11px;}
.pmts-task-detail-coverage-summary strong{margin-left:3px;color:var(--text,#111);font-variant-numeric:tabular-nums;}
.pmts-task-detail-platforms{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:7px;margin-top:12px;}
.pmts-task-detail-platform{min-width:0;padding:9px;border:1px solid var(--border,#e5e5e5);border-radius:5px;background:var(--bg,#fafafa);}
.pmts-task-detail-platform strong,.pmts-task-detail-platform small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pmts-task-detail-platform strong{font-size:11px;}.pmts-task-detail-platform small{margin-top:3px;color:var(--muted,#737373);font-size:9.5px;}
.pmts-task-detail-platform[data-status="ready"],.pmts-task-detail-platform[data-status="completed"]{border-color:rgba(26,127,79,.28);background:rgba(26,127,79,.06);}
.pmts-task-detail-platform[data-status="running"]{border-color:rgba(169,56,23,.3);background:rgba(169,56,23,.06);}
.pmts-task-detail-platform[data-status="unsupported"],.pmts-task-detail-platform[data-status="search_unavailable"],.pmts-task-detail-platform[data-status="execution_failed"]{opacity:.62;}
.pmts-task-detail-heading{
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  gap:12px;
  margin:0 0 14px;
}
.pmts-task-detail-heading h3{
  margin:0;
  font-family:"Times New Roman",Georgia,serif;
  font-size:19px;
  line-height:1.25;
  font-weight:600;
  letter-spacing:0;
}
.pmts-task-detail-heading span{font-size:11.5px;color:var(--muted,#737373);}
.pmts-task-detail-context .pmts-task-detail-heading,
.pmts-task-detail-team .pmts-task-detail-heading{display:block;}
.pmts-task-detail-context .pmts-task-detail-heading h3,
.pmts-task-detail-team .pmts-task-detail-heading h3{font-size:15px;font-family:inherit;}
.pmts-task-detail-context .pmts-task-detail-heading span,
.pmts-task-detail-team .pmts-task-detail-heading span{display:block;margin-top:4px;}
.pmts-task-detail-context .pmts-task-detail-operation-grid{grid-template-columns:1fr;}
.pmts-task-detail-context .pmts-task-detail-platforms{grid-template-columns:repeat(2,minmax(0,1fr));}
.pmts-task-detail-context .pmts-task-detail-platform:last-child:nth-child(odd){grid-column:1/-1;}
.pmts-task-detail-context .pmts-task-detail-coverage-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;}
.pmts-task-detail-context .pmts-task-detail-coverage-summary span{display:block;}
.pmts-task-detail-person{
  display:flex;
  align-items:center;
  gap:10px;
  padding:8px 0;
}
.pmts-task-detail-avatar{
  width:34px;
  height:34px;
  border-radius:50%;
  display:grid;
  place-items:center;
  background:var(--bg,#fafafa);
  border:1px solid var(--border,#e5e5e5);
  font-size:18px;
  overflow:hidden;
  flex:0 0 auto;
}
.pmts-task-detail-person strong{display:block;font-size:13px;line-height:1.3;}
.pmts-task-detail-person small{display:block;margin-top:2px;color:var(--muted,#737373);font-size:11px;line-height:1.35;}
.pmts-task-detail-team-list{display:grid;gap:8px;}
.pmts-task-detail-member{
  width:100%;display:grid;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:10px;
  padding:10px;border:1px solid var(--border,#e5e5e5);border-radius:6px;background:var(--surface,#fff);
  color:inherit;text-align:left;font:inherit;cursor:pointer;transition:border-color .16s ease,background .16s ease,transform .16s ease;
}
.pmts-task-detail-member:hover{border-color:rgba(169,56,23,.35);background:rgba(169,56,23,.035);transform:translateY(-1px);}
.pmts-task-detail-member:active{transform:translateY(0);}
.pmts-task-detail-member:focus-visible{outline:2px solid var(--accent,#a93817);outline-offset:2px;}
.pmts-task-detail-member.is-active{border-color:rgba(169,56,23,.42);background:rgba(169,56,23,.055);}
.pmts-task-detail-member-copy{min-width:0;}
.pmts-task-detail-member-copy strong,.pmts-task-detail-member-copy small,.pmts-task-detail-member-copy em{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pmts-task-detail-member-copy strong{font-size:13px;}.pmts-task-detail-member-copy small{margin-top:2px;color:var(--muted,#737373);font-size:10.5px;}.pmts-task-detail-member-copy em{margin-top:4px;color:var(--accent,#a93817);font-size:10px;font-style:normal;}
.pmts-task-detail-member-state{align-self:start;padding:3px 6px;border-radius:999px;background:var(--bg,#fafafa);color:var(--muted,#737373);font-size:9px;white-space:nowrap;}
.pmts-task-detail-member.is-active .pmts-task-detail-member-state{background:rgba(169,56,23,.1);color:var(--accent,#a93817);}
.pmts-task-detail-metric{padding:2px 0 10px;}
.pmts-task-detail-metric strong{
  display:block;
  font-family:"Times New Roman",Georgia,serif;
  font-size:27px;
  line-height:1;
}
.pmts-task-detail-metric span{display:block;margin-top:5px;color:var(--muted,#737373);font-size:11.5px;line-height:1.45;}
.pmts-task-detail-metric small{display:block;margin-top:4px;color:var(--muted,#737373);font-size:10.5px;font-variant-numeric:tabular-nums;}
.pmts-task-detail-credit-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;}
.pmts-task-detail-credit-refund{margin-top:10px;padding-top:9px;border-top:1px solid var(--border,#e5e5e5);color:#1a7f4f;font-size:11px;}
.pmts-task-detail-version-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;}
.pmts-task-detail-version-row{
  position:relative;
  min-width:0;
  padding:12px 12px 12px 24px;
  border:1px solid var(--border,#e5e5e5);
  border-radius:6px;
  background:var(--surface,#fff);
}
.pmts-task-detail-version-row::before{
  content:"";
  position:absolute;
  left:11px;
  top:17px;
  width:7px;
  height:7px;
  border-radius:50%;
  background:var(--surface,#fff);
  border:1px solid var(--muted,#737373);
}
.pmts-task-detail-version-row.is-current::before{background:var(--accent,#a93817);border-color:var(--accent,#a93817);}
.pmts-task-detail-version-row button{
  appearance:none;
  border:0;
  background:transparent;
  padding:0;
  color:inherit;
  font:inherit;
  text-align:left;
  cursor:pointer;
}
.pmts-task-detail-version-row strong{display:block;font-size:12.5px;}
.pmts-task-detail-version-row small{display:block;margin-top:4px;color:var(--muted,#737373);font-size:10.5px;line-height:1.45;}
.pmts-task-detail-version-toggle{
  display:block;margin:14px auto 0;padding:8px 12px;border:0;background:transparent;color:var(--accent,#a93817);
  font:600 11.5px/1.4 system-ui,sans-serif;text-decoration:underline;text-underline-offset:3px;cursor:pointer;
}
.pmts-task-detail-version-toggle:hover{color:var(--text,#111);}
.pmts-task-detail-version-toggle:focus-visible{outline:2px solid var(--accent,#a93817);outline-offset:3px;border-radius:4px;}
.pmts-task-detail-worklog{
  border:1px solid var(--border,#e5e5e5);
  border-radius:6px;
  background:var(--surface,#fff);
}
.pmts-task-detail-worklog summary{
  list-style:none;
  display:flex;
  align-items:center;
  justify-content:space-between;
  min-height:46px;
  padding:0 14px;
  cursor:pointer;
  font-size:13px;
  font-weight:600;
}
.pmts-task-detail-worklog summary::-webkit-details-marker{display:none;}
.pmts-task-detail-worklog summary::after{content:"+";font-size:18px;font-weight:400;color:var(--muted,#737373);}
.pmts-task-detail-worklog[open] summary::after{content:"−";}
.pmts-task-detail-worklog-body{padding:0 14px 14px;}
.pmts-task-detail-note{font-size:11px;line-height:1.55;color:var(--muted,#737373);}
.pmts-task-detail-loading{
  min-height:70px;
  border:1px dashed var(--border,#e5e5e5);
  border-radius:6px;
  display:grid;
  place-items:center;
  color:var(--muted,#737373);
  font-size:12px;
}
.pmts-task-detail-terminal{
  overflow:hidden;margin:26px 0 0;border:1px solid #252525;border-radius:6px;background:#111;color:#f5f5f5;
  box-shadow:0 12px 30px rgba(0,0,0,.09);
}
.pmts-task-detail-terminal-head{list-style:none;display:grid;grid-template-columns:9px minmax(0,1fr) auto 14px;align-items:center;gap:10px;padding:13px 15px;background:#171717;cursor:pointer;}
.pmts-task-detail-terminal-head::-webkit-details-marker{display:none;}
.pmts-task-detail-terminal-head::after{content:"+";color:#8e8e8e;font-size:16px;font-weight:400;line-height:1;text-align:center;}
.pmts-task-detail-terminal[open] .pmts-task-detail-terminal-head{border-bottom:1px solid #292929;}
.pmts-task-detail-terminal[open] .pmts-task-detail-terminal-head::after{content:"−";}
.pmts-task-detail-terminal-head:focus-visible{outline:2px solid #e76d35;outline-offset:-3px;}
.pmts-task-detail-terminal-head strong,.pmts-task-detail-terminal-head small{display:block;}
.pmts-task-detail-terminal-head strong{font-size:12.5px;}.pmts-task-detail-terminal-head small{margin-top:2px;color:#8e8e8e;font-size:10px;}
.pmts-task-detail-terminal-head>span:last-child{color:#b9b9b9;font-size:10.5px;white-space:nowrap;}
.pmts-task-detail-terminal-dot{width:8px;height:8px;border-radius:50%;background:#747474;}
.pmts-task-detail-terminal-dot[data-tone="running"]{background:#e76d35;box-shadow:0 0 0 4px rgba(231,109,53,.12);animation:pmtsTdTerminalPulse 1.8s ease-in-out infinite;}
.pmts-task-detail-terminal-dot[data-tone="done"]{background:#2da16c;}.pmts-task-detail-terminal-dot[data-tone="failed"]{background:#c94b45;}.pmts-task-detail-terminal-dot[data-tone="waiting"]{background:#d19136;}
.pmts-task-detail-terminal-screen{min-height:132px;padding:18px 16px;background:linear-gradient(180deg,#111,#151515);}
/* 2026-07-21 · 终端自带滚动。历史回填后最多 200 行,不能让轨迹把详情页撑成长卷。
   running / idle 两个 live 变体都只在 .pmts-task-detail-terminal-screen 内渲染
   (_detailWorkLogContent 单一注入点),所以滚动只在这里定义一次;running 块原先的
   内联 max-height/overflow 已移除,避免嵌套出两条滚动条。
   overscroll-behavior:contain → 滚到尽头不把整页带着一起滚。 */
.pmts-task-detail-terminal-screen [data-task-detail-live-list]{max-height:min(52vh,420px);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#3d3d3d transparent;}
.pmts-task-detail-terminal-screen [data-task-detail-live-list]::-webkit-scrollbar{width:9px;}
.pmts-task-detail-terminal-screen [data-task-detail-live-list]::-webkit-scrollbar-thumb{border:2px solid transparent;border-radius:5px;background:#3d3d3d;background-clip:content-box;}
.pmts-task-detail-terminal-screen [data-task-detail-live-list]::-webkit-scrollbar-thumb:hover{background:#525252;background-clip:content-box;}
.pmts-task-detail-terminal-screen [data-task-detail-live-step],.pmts-task-detail-terminal-screen .pmts-task-detail-note{color:#c8c8c8!important;font:500 12px/1.7 ui-monospace,SFMono-Regular,Menlo,monospace!important;}
.pmts-task-detail-terminal-screen [data-task-detail-live-step]{padding:7px 0;border-bottom:1px solid rgba(255,255,255,.07);}
.pmts-task-detail-terminal-screen [data-task-detail-live-step]:last-child{border-bottom:0;}
.pmts-task-detail-terminal-screen [data-task-history-meta]{display:block;margin:2px 0 0 18px;color:#858585;font:500 10px/1.45 system-ui,sans-serif;}
.pmts-task-detail-terminal-screen [data-task-history-older]{display:block;margin:12px auto 0;border:0;background:transparent;color:#b9b9b9;font:600 11px/1.4 system-ui,sans-serif;text-decoration:underline;text-underline-offset:3px;cursor:pointer;}
.pmts-task-detail-terminal-screen [data-task-history-older]:disabled{opacity:.55;cursor:wait;}
.pmts-task-detail-terminal-screen [data-task-history-older]:focus-visible,.pmts-task-detail-history-error button:focus-visible{outline:2px solid var(--accent,#A93817);outline-offset:3px;}
.pmts-task-detail-history-error{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:10px;color:#d8a09d;font-size:11px;}
.pmts-task-detail-history-error button{border:0;background:transparent;padding:7px 0;color:#f0b3ae;font:600 11px/1.4 system-ui,sans-serif;text-decoration:underline;text-underline-offset:3px;cursor:pointer;}
/* 2026-07-18 · L3:running 块(本为浅色卡设计:深绿 #1A7F4F 头/灰计时/绿底)落入恒暗 terminal-screen(#111)
   时低对比。仅在暗 terminal 内提亮(scoped,浅色语境复用时不受影响)。 */
.pmts-task-detail-terminal-screen [data-task-detail-live]{background:rgba(45,161,108,0.1)!important;border-color:rgba(45,161,108,0.3)!important;}
.pmts-task-detail-terminal-screen .pmts-td-run-led{background:#3fd07f!important;}
.pmts-task-detail-terminal-screen .pmts-td-run-label{color:#5fd39a!important;}
.pmts-task-detail-terminal-screen .pmts-td-run-elapsed,.pmts-task-detail-terminal-screen .pmts-td-run-elapsed .pmtsoul-ws-task-running{color:#c8c8c8!important;}
.pmts-task-detail-terminal-screen [data-task-detail-live-step]::before{content:"> ";color:#e76d35;}
@keyframes pmtsTdTerminalPulse{50%{opacity:.55;box-shadow:0 0 0 7px rgba(231,109,53,0)}}
.pmts-task-detail-workflow-panel{margin-bottom:0;padding-bottom:0;border-bottom:0;}
.pmts-task-architecture{display:grid;gap:14px;}
.pmts-task-arch-progress{
  width:max-content;padding:5px 9px;border:1px solid rgba(231,109,53,.28);border-radius:999px;
  background:rgba(231,109,53,.07);color:#a7441e;font-size:10.5px;font-weight:700;font-variant-numeric:tabular-nums;
}
.pmts-task-arch-timeline{list-style:none;margin:0;padding:0;display:grid;gap:0;}
/* 2026-07-24 · R2:步骤行运行入口 + 下一步高亮 + 运行计时 */
.pmts-task-arch-run{display:inline-flex;align-items:center;min-height:30px;padding:4px 13px;border:1px solid var(--text,#1F1E1C);border-radius:6px;background:var(--text,#1F1E1C);color:var(--bg,#fff);font-size:11.5px;font-weight:600;cursor:pointer;font-family:inherit;margin-top:7px;align-self:flex-start;}
.pmts-task-arch-phase[data-step-next="1"]{background:rgba(26,127,79,.05);}
.pmts-task-arch-timer{font-family:"SF Mono",ui-monospace,monospace;font-size:10.5px;color:#1A7F4F;font-variant-numeric:tabular-nums;}
html.dark .pmts-task-arch-phase[data-step-next="1"]{background:rgba(76,195,138,.08);}
.pmts-task-arch-phase{
  position:relative;display:grid;grid-template-columns:30px minmax(0,1fr) auto;gap:11px;align-items:center;
  min-height:58px;padding:8px 0;color:var(--muted,#737373);
}
.pmts-task-arch-phase:not(:last-child)::after{
  content:"";position:absolute;left:14px;top:43px;bottom:-9px;width:1px;background:var(--border,#e5e5e5);
}
.pmts-task-arch-index{
  position:relative;z-index:1;width:28px;height:28px;border:1px solid var(--border,#d7d7d7);border-radius:50%;
  display:grid;place-items:center;background:var(--surface,#fff);font:600 11px/1 ui-monospace,SFMono-Regular,Menlo,monospace;
}
.pmts-task-arch-copy strong{display:block;color:var(--text,#111);font-size:13px;line-height:1.35;}
.pmts-task-arch-copy small{display:block;margin-top:3px;font-size:10.5px;line-height:1.4;color:var(--muted,#737373);}
.pmts-task-arch-state{font-size:10.5px;white-space:nowrap;}
.pmts-task-arch-phase[data-state="completed"] .pmts-task-arch-index,
.pmts-task-arch-phase[data-state="running"] .pmts-task-arch-index{border-color:#1a7f4f;background:#1a7f4f;color:#fff;}
.pmts-task-arch-phase[data-state="running"] .pmts-task-arch-state,
.pmts-task-arch-phase[data-state="ready"] .pmts-task-arch-state{color:#1a7f4f;font-weight:650;}
.pmts-task-arch-phase[data-state="pending_review"] .pmts-task-arch-state{color:#b45309;font-weight:650;}
.pmts-task-arch-phase[data-state="blocked"] .pmts-task-arch-state,
.pmts-task-arch-phase[data-state="failed"] .pmts-task-arch-state{color:#c44310;font-weight:650;}
.pmts-task-arch-phase[data-state="waiting_creation"] .pmts-task-arch-index{border-style:dashed;color:var(--muted,#737373);}
.pmts-task-arch-phase[data-active="1"]{color:var(--text,#111);}
.pmts-task-arch-gate{
  display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 12px;padding:12px 14px;
  border:1px solid var(--border,#e5e5e5);border-radius:6px;background:var(--surface,#fff);font-size:12px;
}
.pmts-task-arch-gate>span{font-weight:650;}
.pmts-task-arch-gate>small{grid-column:1/-1;color:var(--muted,#737373);font-size:10.5px;}
.pmts-task-arch-gate[data-gate-state="satisfied"]{border-color:rgba(26,127,79,.35);background:rgba(26,127,79,.05);}
.pmts-task-arch-artifacts>strong{display:block;margin-bottom:8px;font-size:11px;}
.pmts-task-arch-artifacts>div,.pmts-task-arch-roles{display:flex;flex-wrap:wrap;gap:6px;}
.pmts-task-arch-artifacts span,.pmts-task-arch-roles span{
  padding:4px 7px;border:1px solid var(--border,#e5e5e5);border-radius:999px;background:var(--bg,#fafafa);
  color:var(--muted,#737373);font-size:10px;line-height:1.2;overflow-wrap:anywhere;
}
.pmts-task-arch-roles{margin-top:10px;}
/* 2026-07-19 · 981–1199px 改「主栏优先」两栏。
   背景:此区间三栏不溢出,但中列实测只剩约 376px(1024px 视口) ——「Where things stand」
   被拆成三行,终端与步骤区明显拥挤。溢出是硬故障,这里是可读性:窄到读不动等于没给。
   做法:左侧任务信息保持窄栏(它本就是键值摘要,窄栏合适),右侧数字员工整栏移到流程下方,
   与 ≤980 单列同序;中列因此拿到 720–938px(实测)。team 全宽后必须解除 sticky,否则会粘住滚动。
   门槛取 1199 而非 1105:实测 1106px 三栏时中列仍只有 474px,与被投诉的 376px 同量级,
   断点两侧还会 804→474 断崖跳变。三栏两侧固定占 590px,要让中列拿到 ~600px 才值得上三栏,
   即视口需 ≥1200px(实测 1200 → 608px)—— 门槛由这个算式定并实测校验,不是拍脑袋。
   注:详情页是 pageMode(卡片 width:100%/max-width:none),不受基础卡片 1120px 上限约束。 */
@media (min-width:981px) and (max-width:1199px){
  .pmts-task-detail-grid{grid-template-columns:minmax(230px,260px) minmax(0,1fr);}
  .pmts-task-detail-team{
    grid-column:1 / -1;
    position:static;max-height:none;overflow:visible;
    padding:24px 24px 30px;
  }
  .pmts-task-detail-team-list{grid-template-columns:repeat(3,minmax(0,1fr));}
}

@media (max-width:980px){
  .pmtsoul-ws-mgr-card.pmtsoul-task-detail-card{width:100vw;max-height:100dvh;border-radius:0;}
  .pmts-task-detail-hero,.pmts-task-detail-command,.pmts-task-detail-lower{padding-left:20px;padding-right:20px;}
  .pmts-task-detail-grid{grid-template-columns:1fr;}
  .pmts-task-detail-command{order:1;}
  .pmts-task-detail-context{order:2;}
  .pmts-task-detail-team{order:3;}
  .pmts-task-detail-context,.pmts-task-detail-team{position:static;max-height:none;overflow:visible;padding:24px 20px 30px;}
  .pmts-task-detail-team-list{grid-template-columns:repeat(2,minmax(0,1fr));}
  .pmts-task-detail-title{font-size:25px;}
  .pmts-task-detail-primary{width:100%;margin-left:0;}
  .pmts-task-detail-credit-grid{grid-template-columns:repeat(2,minmax(0,1fr));}
  .pmts-task-detail-version-list{grid-template-columns:repeat(2,minmax(0,1fr));}
  .pmts-task-arch-phase{grid-template-columns:30px minmax(0,1fr);}
  .pmts-task-arch-state{grid-column:2;margin-top:-6px;}
  .pmts-task-detail-platforms{grid-template-columns:repeat(3,minmax(0,1fr));}
}
@media (max-width:640px){
  .pmts-task-detail-hero-nav{align-items:flex-start;}
  .pmts-task-detail-hero-meta{align-items:flex-start;flex-direction:column;gap:8px;}
  .pmts-task-detail-tools{gap:10px;}
  .pmts-task-detail-team-list,.pmts-task-detail-version-list{grid-template-columns:1fr;}
  .pmts-task-detail-operation-grid{grid-template-columns:1fr;}
  .pmts-task-detail-platforms{grid-template-columns:repeat(2,minmax(0,1fr));}
  .pmts-task-detail-platform:last-child:nth-child(odd){grid-column:1/-1;}
}

/* ── 2026-07-18 · 任务详情页面态(/tasks/<id> 路由,非弹框)─────────────────────
   同一 mgr DOM/渲染契约,但:不透明全屏(无暗化 backdrop)、卡片全宽内容限宽居中、
   「← 返回」导航(浏览器返回可退出)。视觉上=页面,工程上=零渲染器改动。 */
.pmtsoul-ws-mgr-modal.pmtsoul-ws-mgr-pagemode{
  background:var(--bg,#F5F4ED);
  padding:0;
  align-items:stretch;
  /* 2026-07-18 · 继承顶部导航栏:详情页从顶栏(header.app-titlebar,v2 内含横向
     .wsv2-topnav)底边起、全宽覆盖工作区。top 由 JS 实测顶栏底边写入 --pmts-td-chrome-top
     (适配 v2 横向 nav 的真实高度 + safe-area;v2 无竖 rail,故 left:0 全宽,不再漏工作区左列)。
     39px 只是测量前的兜底。 */
  top:var(--pmts-td-chrome-top, 39px);
  left:0;
  right:0;
  bottom:0;
}
@media(min-width:641px){
  /* Legacy(非 v2)shell 保留左侧 74px 竖 rail;workspace V2 把导航移进顶栏、隐藏竖 rail,
     故 v2 保持 left:0 全宽(top 仍由 JS 实测顶栏底边,兼容 v2 更高的横向 nav)。 */
  body:not([data-ws-v2="1"]) .pmtsoul-ws-mgr-modal.pmtsoul-ws-mgr-pagemode{ left:74px; }
}
.pmtsoul-ws-mgr-pagemode .pmtsoul-ws-mgr-card,
.pmtsoul-ws-mgr-pagemode .pmtsoul-ws-mgr-card.pmtsoul-task-detail-card{
  width:100%;
  max-width:none;
  max-height:100%;
  border:0;
  border-radius:0;
  box-shadow:none;
}
.pmtsoul-ws-mgr-pagemode .pmtsoul-ws-mgr-head{
  display:none;
}
/* 进场动效:仅首次打开(.pmts-td-enter,~640ms 后 JS 摘除)播放,避免 SSE 每 1.2s 重渲重播。
   hero 先起、主/辅栏错峰淡入上滑;数字 count-up 由 JS(_pmtsTaskDetailCountUps)驱动。 */
.pmtsoul-ws-mgr-pagemode.pmts-td-enter .pmts-task-detail-hero{animation:pmtsTdRise .5s cubic-bezier(.2,.7,.2,1) both}
.pmtsoul-ws-mgr-pagemode.pmts-td-enter .pmts-task-detail-context{animation:pmtsTdRise .48s cubic-bezier(.2,.7,.2,1) .04s both}
.pmtsoul-ws-mgr-pagemode.pmts-td-enter .pmts-task-detail-command{animation:pmtsTdRise .52s cubic-bezier(.2,.7,.2,1) .08s both}
.pmtsoul-ws-mgr-pagemode.pmts-td-enter .pmts-task-detail-team{animation:pmtsTdRise .52s cubic-bezier(.2,.7,.2,1) .12s both}
.pmtsoul-ws-mgr-pagemode.pmts-td-enter .pmts-task-detail-lower{animation:pmtsTdRise .52s cubic-bezier(.2,.7,.2,1) .14s both}
@keyframes pmtsTdRise{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
/* 数字刷新脉冲(count-up 落值时加,340ms 后摘) */
.pmts-td-num-pulse{animation:pmtsTdNumPulse .5s ease}
@keyframes pmtsTdNumPulse{0%{transform:scale(1)}38%{transform:scale(1.14)}100%{transform:scale(1)}}
.pmts-task-detail-metric strong[data-td-countup]{display:inline-block;transform-origin:left center;font-variant-numeric:tabular-nums}
@media (prefers-reduced-motion:reduce){
  .pmtsoul-ws-mgr-pagemode.pmts-td-enter .pmts-task-detail-hero,
  .pmtsoul-ws-mgr-pagemode.pmts-td-enter .pmts-task-detail-context,
  .pmtsoul-ws-mgr-pagemode.pmts-td-enter .pmts-task-detail-command,
  .pmtsoul-ws-mgr-pagemode.pmts-td-enter .pmts-task-detail-team,
  .pmtsoul-ws-mgr-pagemode.pmts-td-enter .pmts-task-detail-lower{animation:none}
  .pmts-td-num-pulse{animation:none}
}
/* 内容限宽但充分利用宽屏；长版本历史留在主内容，不再拉长摘要栏。 */
.pmtsoul-ws-mgr-pagemode .pmts-task-detail{width:min(1360px,100%);max-width:1360px;margin:0 auto;}
.pmtsoul-ws-mgr-pagemode .pmtsoul-ws-mgr-close{white-space:nowrap;}
html.dark .pmtsoul-ws-mgr-modal.pmtsoul-ws-mgr-pagemode{background:#161616;}

/* ── 2026-07-18 · 任务详情视觉/交互打磨(纯 CSS,零 markup 改动)──────────────
   ① 主状态 = 五态语义 pill(正在做脉动/需要你/完成/失败/待命),不再是裸色文字;
   ② 微交互:成果 chip hover 抬升、子任务行 hover、实录展开过渡、版本行 hover、按钮按压;
   ③ 全部动效走 prefers-reduced-motion 关闭;暗色在文件尾 html.dark 区补(同批)。 */
.pmts-task-detail-status{
  display:inline-flex;align-items:center;gap:7px;
  padding:4px 12px 4px 10px;border-radius:999px;
  font-size:12px;font-weight:600;letter-spacing:0.01em;
  border:1px solid transparent;
}
.pmts-task-detail-status::before{
  content:"";width:7px;height:7px;border-radius:50%;background:currentColor;flex:0 0 auto;
}
.pmts-task-detail-status[data-tone="running"]{color:#A93817;background:rgba(169,56,23,0.07);border-color:rgba(169,56,23,0.25);}
.pmts-task-detail-status[data-tone="running"]::before{animation:pmtsTdPulse 1.6s ease-in-out infinite;}
.pmts-task-detail-status[data-tone="done"]{color:#1a7f4f;background:rgba(26,127,79,0.08);border-color:rgba(26,127,79,0.25);}
.pmts-task-detail-status[data-tone="waiting"]{color:#b45309;background:rgba(180,83,9,0.08);border-color:rgba(180,83,9,0.28);}
.pmts-task-detail-status[data-tone="failed"]{color:#c62828;background:rgba(198,40,40,0.07);border-color:rgba(198,40,40,0.25);}
.pmts-task-detail-status[data-tone="idle"]{color:#737373;background:rgba(115,115,115,0.07);border-color:rgba(115,115,115,0.22);}
@keyframes pmtsTdPulse{0%,100%{opacity:1;transform:scale(1);}50%{opacity:0.45;transform:scale(0.72);}}
/* 主按钮:hover 抬升 + 按压回落(对齐工作区 Apple 按压手感) */
.pmts-task-detail-primary{transition:transform .14s ease,box-shadow .14s ease,opacity .14s ease;}
.pmts-task-detail-primary[disabled]{border-color:var(--border,#d7d7d7);background:var(--bg,#f3f3f3);color:var(--muted,#737373);cursor:not-allowed;box-shadow:none;}
.pmts-task-detail-primary:not([disabled]):hover{transform:translateY(-1px);box-shadow:0 3px 10px rgba(0,0,0,0.18);}
.pmts-task-detail-primary:not([disabled]):active{transform:translateY(0) scale(0.985);box-shadow:0 1px 3px rgba(0,0,0,0.14);}
.pmts-task-detail-primary:focus-visible{outline:2px solid #A93817;outline-offset:2px;}
/* 成果 chip:可点感(hover 抬升 + 品牌描边),仅详情页作用域 */
.pmts-task-detail .pmtsoul-ws-deliverable-chip{transition:transform .14s ease,box-shadow .14s ease,border-color .14s ease;}
.pmts-task-detail .pmtsoul-ws-deliverable-chip:hover{transform:translateY(-1px);border-color:rgba(169,56,23,0.45);box-shadow:0 3px 10px rgba(0,0,0,0.08);}
.pmts-task-detail .pmtsoul-ws-deliverable-chip:active{transform:translateY(0) scale(0.985);}
.pmts-task-detail .pmtsoul-ws-deliverable-chip:focus-visible{outline:2px solid #A93817;outline-offset:2px;}
/* 子任务行:hover 微浮(inline 只定静态样式,hover/transition 由此层供) */
.pmts-task-detail [data-subtask-open-id]{transition:box-shadow .14s ease,transform .14s ease;}
.pmts-task-detail [data-subtask-open-id]:hover{box-shadow:0 2px 8px rgba(0,0,0,0.07);transform:translateY(-1px);}
.pmts-task-detail [data-subtask-open-id]:focus-visible{outline:2px solid #A93817;outline-offset:2px;}
/* 工作实录/说明折叠:summary hover + 展开指示旋转 + 内容淡入下滑 */
.pmts-task-detail-worklog>summary{transition:background-color .14s ease;border-radius:6px;}
.pmts-task-detail-worklog>summary:hover{background:rgba(0,0,0,0.035);}
.pmts-task-detail-worklog>summary::after{content:"+";float:right;font-size:15px;color:var(--muted,#737373);transition:transform .18s ease;line-height:1;}
.pmts-task-detail-worklog[open]>summary::after{transform:rotate(45deg);}
.pmts-task-detail-worklog[open]>.pmts-task-detail-worklog-body{animation:pmtsTdReveal .22s ease;}
@keyframes pmtsTdReveal{from{opacity:0;transform:translateY(-4px);}to{opacity:1;transform:translateY(0);}}
/* 内部工作文件 toggle(audience 折叠):hover 提色 */
.pmts-task-detail [data-task-workfiles-toggle]{transition:color .14s ease;}
.pmts-task-detail [data-task-workfiles-toggle]:hover{color:var(--text,#111);}
.pmts-task-detail [data-task-workfiles-toggle]:focus-visible{outline:2px solid #A93817;outline-offset:2px;border-radius:3px;}
/* 版本时间线:行 hover + 当前版本双环点 */
.pmts-task-detail-version-row{transition:background-color .14s ease;border-radius:6px;}
.pmts-task-detail-version-row:hover{background:rgba(0,0,0,0.03);}
.pmts-task-detail-version-row.is-current{position:relative;}
/* 积分数字:等宽数字对齐 */
.pmts-task-detail-metric strong{font-variant-numeric:tabular-nums;}
@media (prefers-reduced-motion:reduce){
  .pmts-task-detail-status[data-tone="running"]::before{animation:none;}
  .pmts-task-detail-worklog[open]>.pmts-task-detail-worklog-body{animation:none;}
  .pmts-task-detail-primary,.pmts-task-detail .pmtsoul-ws-deliverable-chip,.pmts-task-detail [data-subtask-open-id]{transition:none;}
  .pmts-task-detail-primary:hover,.pmts-task-detail .pmtsoul-ws-deliverable-chip:hover,.pmts-task-detail [data-subtask-open-id]:hover{transform:none;}
}
/* 暗色:pill 底色/描边随暗色减淡,hover 用亮向叠加 */
html.dark .pmts-task-detail-status[data-tone="running"]{color:#E58A6F;background:rgba(229,138,111,0.12);border-color:rgba(229,138,111,0.3);}
html.dark .pmts-task-detail-status[data-tone="done"]{color:#5FBF8F;background:rgba(95,191,143,0.12);border-color:rgba(95,191,143,0.3);}
html.dark .pmts-task-detail-status[data-tone="waiting"]{color:#E0A45C;background:rgba(224,164,92,0.12);border-color:rgba(224,164,92,0.3);}
html.dark .pmts-task-detail-status[data-tone="failed"]{color:#E57373;background:rgba(229,115,115,0.12);border-color:rgba(229,115,115,0.3);}
html.dark .pmts-task-detail-status[data-tone="idle"]{color:#9A9A9A;background:rgba(154,154,154,0.1);border-color:rgba(154,154,154,0.28);}
html.dark .pmts-task-detail-worklog>summary:hover{background:rgba(255,255,255,0.05);}
html.dark .pmts-task-detail-version-row:hover{background:rgba(255,255,255,0.045);}
.pmtsoul-task-detail-preview{
  max-width:620px;
  margin:34px auto;
  padding:32px;
  border:1px solid var(--border,#e5e5e5);
  background:var(--surface,#fff);
}
.pmtsoul-task-detail-preview-kicker{font-size:11px;color:var(--muted,#737373);margin-bottom:10px;}
.pmtsoul-task-detail-preview h2{margin:0;font:600 25px/1.25 "Times New Roman",Georgia,serif;}
.pmtsoul-task-detail-preview p{margin:14px 0 0;color:var(--muted,#737373);font-size:13px;line-height:1.65;}
.pmtsoul-task-detail-preview-owner{margin-top:18px;font-size:12px;color:var(--muted,#737373);}
.pmtsoul-task-detail-preview button{margin-top:24px;min-height:40px;padding:9px 18px;border:1px solid #111;border-radius:4px;background:#111;color:#fff;font-weight:600;font-size:13px;line-height:1.2;font-family:inherit;cursor:pointer;}
@media (max-width:640px){.pmtsoul-task-detail-preview{margin:16px;padding:22px;}.pmtsoul-task-detail-preview button{width:100%;}}

/* 2026-05-25:account popover 新增 Billing 区 trailing chip(Task Credits "0/0")*/
.account-pop-item .account-pop-trailing{
  margin-left:auto;
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:11px;
  color:var(--muted);
  letter-spacing:0.04em;
  padding:2px 8px;
  background:var(--input-bg);
  border-radius:99px;
  border:1px solid var(--border);
}
.account-pop-item:hover .account-pop-trailing{color:var(--text);}

/* ============================================================
 * 2026-05-25 V7 · Company / Profile Settings modal (Polsia 风简单 form)
 * 通用 .pmtsoul-setting-modal,可被复用
 * ============================================================ */
.pmtsoul-setting-modal{
  position:fixed;
  inset:0;
  z-index:300;
  background:var(--ui-dialog-backdrop);
  display:flex;
  align-items:flex-start;
  justify-content:center;
  padding:48px 16px 16px;
  overflow-y:auto;
  opacity:1;
  transition:opacity .18s ease;
}
.pmtsoul-setting-modal[hidden]{display:none;}
.pmtsoul-setting-card{
  background:var(--ui-dialog-bg);
  width:100%;
  max-width:520px;
  border:1px solid var(--ui-dialog-border);
  border-radius:var(--ui-dialog-radius);
  box-shadow:var(--ui-dialog-shadow);
  font-family:var(--font-ui);
  max-height:calc(100vh - 64px);
  display:flex;
  flex-direction:column;
}
.pmtsoul-setting-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  padding:var(--ui-dialog-head-padding);
  border-bottom:1px solid var(--ui-dialog-border);
}
.pmtsoul-setting-title{
  font-family:var(--font-ui);
  font-size:18px;
  font-weight:600;
  color:var(--text);
}
/* 2026-05-27 · 工作区 column 1 战绩卡(Your AI Team)— 免费阶段重设计
   原 identity-card(订阅 CTA)在不实际收费的内测期反价值,改成
   "你的 AI 团队 / 本周战绩"叙事,价值前置,FREE chip 收纳计费暗示。
   Polsia 灰卡风格保持,但内容从"快交钱"变"已交付什么"。 */
.pmtsoul-ws-team-card{
  background:var(--surface);
  border:1px solid var(--border);
  border-radius:8px;
  padding:18px 18px 16px;
  margin-bottom:14px;
}
.pmtsoul-ws-team-card-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:8px;
  margin-bottom:14px;
}
.pmtsoul-ws-team-card-title{
  font-family:"Times New Roman",serif;
  font-size:18px;
  font-weight:600;
  color:var(--text);
  letter-spacing:0;
}
.pmtsoul-ws-team-card-plan{
  display:inline-flex;
  align-items:center;
  gap:4px;
  padding:2px 9px;
  border-radius:10px;
  font-size:11px;
  font-weight:600;
  letter-spacing:0.3px;
  color:#1A7F4F;
  background:rgba(26,127,79,0.08);
  border:1px solid rgba(26,127,79,0.3);
  cursor:help;
}
.pmtsoul-ws-team-card-plan-info{font-size:10px;opacity:0.7;}
.pmtsoul-ws-team-card-avatars{
  display:flex;
  flex-wrap:nowrap;   /* 2026-07-24 · 5 头像 + 总数 chip 恒单行,不再折行 */
  align-items:center;
  gap:6px;
  margin-bottom:14px;
  min-height:32px;
}
.pmtsoul-ws-team-card-avatar{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:32px;
  height:32px;
  border-radius:50%;
  background:var(--input-bg);
  border:1px solid var(--border);
  color:var(--muted);
  transition:transform .12s ease,border-color .12s ease,color .12s ease;
  cursor:default;
}
.pmtsoul-ws-team-card-avatar:hover{
  transform:translateY(-1px);
  border-color:color-mix(in srgb,var(--accent) 45%,var(--border));
  color:var(--text);
}
.pmtsoul-ws-team-card-avatar svg{width:18px;height:18px;}
.pmtsoul-ws-team-card-avatar-more{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  height:32px;
  padding:0 10px;
  border-radius:16px;
  background:var(--input-bg);
  border:1px solid var(--border);
  color:var(--muted);
  font-size:11px;
  font-weight:600;
}
.pmtsoul-ws-team-card-week-label{
  font-size:10.5px;
  font-weight:600;
  letter-spacing:0.08em;
  text-transform:uppercase;
  color:var(--muted);
  margin-bottom:10px;
}
.pmtsoul-ws-team-card-stats{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:10px 14px;
}
.pmtsoul-ws-team-card-stat{
  display:flex;
  flex-direction:column;
  gap:1px;
  min-width:0;
}
.pmtsoul-ws-team-card-stat-value{
  font-family:"Times New Roman",serif;
  font-size:22px;
  font-weight:600;
  line-height:1.1;
  color:var(--text);
  font-variant-numeric:tabular-nums;
}
.pmtsoul-ws-team-card-stat-label{
  font-size:11.5px;
  color:var(--muted);
  letter-spacing:0;
  line-height:1.3;
}

/* Full Agency Mode — 降权 toggle(原 13px 橙巨钮 → 小开关) */
.pmtsoul-ws-agency-toggle{
  display:flex;
  align-items:center;
  gap:10px;
  padding:10px 12px;
  border:1px solid var(--border);
  border-radius:8px;
  background:transparent;
  cursor:pointer;
  margin-bottom:14px;
  font-size:12.5px;
  color:var(--text);
  transition:border-color .12s ease,background .12s ease;
}
.pmtsoul-ws-agency-toggle:hover{
  border-color:color-mix(in srgb,var(--accent) 35%,var(--border));
  background:color-mix(in srgb,var(--accent) 4%,transparent);
}
.pmtsoul-ws-agency-toggle input{position:absolute;opacity:0;width:0;height:0;}
.pmtsoul-ws-agency-toggle-track{
  position:relative;
  display:inline-block;
  width:30px;
  height:16px;
  background:var(--border);
  border-radius:8px;
  flex-shrink:0;
  transition:background .15s ease;
}
.pmtsoul-ws-agency-toggle-thumb{
  position:absolute;
  top:2px;
  left:2px;
  width:12px;
  height:12px;
  background:var(--surface);
  border-radius:50%;
  box-shadow:0 1px 2px rgba(0,0,0,0.18);
  transition:transform .15s ease;
}
.pmtsoul-ws-agency-toggle input:checked + .pmtsoul-ws-agency-toggle-track{
  background:#D4541E;
}
.pmtsoul-ws-agency-toggle input:checked + .pmtsoul-ws-agency-toggle-track .pmtsoul-ws-agency-toggle-thumb{
  transform:translateX(14px);
}
/* 2026-06-12 · 全代理状态徽章:显隐硬绑 checkbox(未开启绝不显示,与 JS 状态无关) */
.pmtsoul-ws-agency-toggle input:not(:checked) ~ [data-pms-agency-state]{display:none !important;}
.pmtsoul-ws-agency-toggle input:checked ~ [data-pms-agency-state]{display:inline-flex !important;}
.pmtsoul-ws-agency-toggle-label{
  font-weight:500;
  letter-spacing:0.01em;
  flex:1;
  min-width:0;
}

/* Team invite 折叠(免费单用户阶段视觉降权) */
.pmtsoul-ws-team-invite-foldable{
  margin-bottom:12px;
}
.pmtsoul-ws-team-invite-foldable > summary{
  list-style:none;
  cursor:pointer;
  padding:8px 0;
  font-size:12px;
  color:var(--muted);
  font-weight:500;
  letter-spacing:0;
  transition:color .12s ease;
  user-select:none;
}
.pmtsoul-ws-team-invite-foldable > summary::-webkit-details-marker{display:none;}
.pmtsoul-ws-team-invite-foldable > summary:hover{color:var(--text);}
.pmtsoul-ws-team-invite-foldable[open] > summary{color:var(--text);margin-bottom:8px;}
.pmtsoul-ws-team-invite-foldable .pmtsoul-ws-hint{margin-top:6px;}

html.dark .pmtsoul-ws-team-card{background:#1A1A1A;border-color:#2D2D2D;}
html.dark .pmtsoul-ws-team-card-avatar{background:#202020;border-color:#2D2D2D;}
html.dark .pmtsoul-ws-team-card-avatar-more{background:#202020;border-color:#2D2D2D;}
html.dark .pmtsoul-ws-agency-toggle{border-color:#2D2D2D;}
html.dark .pmtsoul-ws-agency-toggle-track{background:#3A3A3A;}

/* 2026-05-27 · company status badge (active/paused/deleted) — modal title 右侧
   小 chip,active 绿、paused 橙、deleted 红。hidden 时不占位。 */
.pmtsoul-setting-status-badge{
  display:inline-flex;
  align-items:center;
  margin-left:10px;
  padding:2px 9px;
  border-radius:10px;
  font-size:11px;
  font-weight:600;
  letter-spacing:0.3px;
  line-height:1.5;
  border:1px solid transparent;
}
.pmtsoul-setting-status-badge[hidden]{display:none;}
.pmtsoul-setting-status-badge.status-active{
  color:#1A7F4F;background:rgba(26,127,79,0.08);border-color:rgba(26,127,79,0.3);
}
.pmtsoul-setting-status-badge.status-paused{
  color:#B45309;background:rgba(180,83,9,0.08);border-color:rgba(180,83,9,0.3);
}
.pmtsoul-setting-status-badge.status-deleted{
  color:#DC2626;background:rgba(220,38,38,0.08);border-color:rgba(220,38,38,0.3);
}
.pmtsoul-setting-close{
  background:transparent;
  border:none;
  font-size:22px;
  color:var(--muted);
  cursor:pointer;
  width:32px;
  height:32px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  border-radius:4px;
  line-height:1;
}
.pmtsoul-setting-close:hover{color:var(--text);background:var(--hover-bg);}
.pmtsoul-setting-body{
  padding:var(--ui-dialog-body-padding);
  overflow-y:auto;
}
.pmtsoul-setting-field{margin-bottom:16px;}
.pmtsoul-setting-label{
  display:block;
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:10.5px;
  font-weight:500;
  letter-spacing:0.12em;
  text-transform:uppercase;
  color:var(--muted);
  margin-bottom:8px;
}
.pmtsoul-setting-input{
  width:100%;
  padding:10px 14px;
  font-size:14px;
  font-family:"Times New Roman",serif;
  background:var(--input-bg);
  border:1px solid var(--border);
  border-radius:3px;
  color:var(--text);
  outline:none;
  box-sizing:border-box;
  transition:border-color .15s ease, background .15s ease;
}
.pmtsoul-setting-input:focus{
  border-color:var(--accent);
  background:var(--surface);
}
.pmtsoul-setting-input[readonly]{
  background:transparent;
  color:var(--muted);
  cursor:default;
}
.pmtsoul-setting-hint{
  margin-top:6px;
  font-size:11.5px;
  color:var(--muted);
  font-family:"Times New Roman",serif;
}
.pmtsoul-setting-btn-primary{
  background:var(--text);
  color:var(--bg);
  border:1px solid var(--text);
  width:100%;
  padding:12px 16px;
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:12px;
  letter-spacing:0.12em;
  text-transform:uppercase;
  cursor:pointer;
  border-radius:3px;
  transition:background .15s ease;
}
.pmtsoul-setting-btn-primary:hover{background:#000;}
html.dark .pmtsoul-setting-btn-primary:hover{background:var(--accent);}
.pmtsoul-setting-divider{
  border-top:1px solid var(--border);
  margin:24px 0 18px;
}
.pmtsoul-setting-row{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:16px;
  padding:14px 0;
}
.pmtsoul-setting-row-text{flex:1;}
.pmtsoul-setting-row-title{
  font-family:"Times New Roman",serif;
  font-size:15px;
  font-weight:600;
  color:var(--text);
  margin-bottom:4px;
}
.pmtsoul-setting-row-desc{
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:10.5px;
  letter-spacing:0.08em;
  text-transform:uppercase;
  color:var(--muted);
}
#storefrontDomainsModal .pmtsoul-setting-label,
#storefrontDomainsModal .pmtsoul-setting-row-desc{
  text-transform:none;
  letter-spacing:0;
}
.pmtsoul-setting-danger-text{color:#C44310;}
html.dark .pmtsoul-setting-danger-text{color:#FF6B4A;}
.pmtsoul-setting-btn-secondary{
  background:var(--surface);
  color:var(--text);
  border:1px solid var(--border);
  padding:8px 16px;
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:11px;
  letter-spacing:0.1em;
  text-transform:uppercase;
  cursor:pointer;
  border-radius:3px;
  box-shadow:1px 1px 0 var(--border);
}
.pmtsoul-setting-btn-secondary:hover{background:var(--hover-bg);}
.pmtsoul-setting-btn-danger{
  background:var(--surface);
  color:var(--error);
  border:1px solid var(--error);
  padding:9px 14px;
  font-family:var(--font-ui);
  font-size:13px;
  font-weight:600;
  letter-spacing:0;
  text-transform:none;
  cursor:pointer;
  border-radius:var(--ui-control-radius);
}
.pmtsoul-setting-btn-danger:hover{background:rgba(196,67,16,0.08);}
html.dark .pmtsoul-setting-btn-danger{color:#FF6B4A;border-color:#FF6B4A;}
html.dark .pmtsoul-setting-btn-danger:hover{background:rgba(255,107,74,0.12);}
.pmtsoul-setting-danger-zone{margin-top:8px;}
.pmtsoul-setting-danger-title{
  font-family:var(--font-ui);
  font-size:16px;
  font-weight:600;
  color:var(--error);
  margin-bottom:8px;
}
html.dark .pmtsoul-setting-danger-title{color:#FF6B4A;}
.pmtsoul-setting-danger-desc{
  font-size:13px;
  line-height:1.5;
  color:var(--muted);
  margin-bottom:14px;
}
.pmtsoul-setting-btn-danger-outline{
  background:transparent;
  color:var(--error);
  border:1px solid var(--error);
  padding:9px 14px;
  font-family:var(--font-ui);
  font-size:13px;
  font-weight:600;
  letter-spacing:0;
  text-transform:none;
  cursor:pointer;
  border-radius:var(--ui-control-radius);
}
.pmtsoul-setting-btn-danger-outline:hover{background:rgba(196,67,16,0.08);}
html.dark .pmtsoul-setting-btn-danger-outline{color:#FF6B4A;border-color:#FF6B4A;}
html.dark .pmtsoul-setting-btn-danger-outline:hover{background:rgba(255,107,74,0.12);}

/* 手机端:modal 全屏 */
@media (max-width: 640px){
  .pmtsoul-setting-modal{padding:0;}
  .pmtsoul-setting-card{
    max-width:none;
    height:100vh;
    max-height:100vh;
    border-radius:0;
  }
  .pmtsoul-setting-head{padding:14px 16px;}
  .pmtsoul-setting-title{font-size:17px;}
  .pmtsoul-setting-body{padding:18px 16px 24px;}
  /* input font-size 16px 防 iOS auto-zoom */
  .pmtsoul-setting-input{font-size:16px;}
}

/* 2026-05-25 fix:settings modal 强制 viewport-level fixed
 * 之前 modal 在某 transform 父级下被裁,出现在屏幕底部一小条。
 * 加 !important + 提高 z-index + 100dvh 兜底
 */
.pmtsoul-setting-modal{
  position:fixed !important;
  inset:0 !important;
  top:0 !important;
  left:0 !important;
  right:0 !important;
  bottom:0 !important;
  width:100vw !important;
  height:100vh !important;
  height:100dvh !important;
  z-index:9999 !important;
  display:flex !important;
  align-items:flex-start !important;
  justify-content:center !important;
}
.pmtsoul-setting-modal[hidden]{display:none !important;}

/* Company-scoped sender controls live in the workspace mailbox editor rather
 * than among personal account fields. */
.pmtsoul-profile-settings-card{max-width:760px;}
.pmtsoul-email-settings-section{padding:2px 0 22px;}
.pmtsoul-email-settings-section + .pmtsoul-email-settings-section{border-top:1px solid var(--border);padding-top:22px;}
#companyEmailModal .pmtsoul-setting-card{max-width:760px;}
.pmtsoul-email-settings-heading{font-size:15px;font-weight:650;color:var(--text);margin-bottom:5px;}
.pmtsoul-email-settings-copy{font-size:12.5px;line-height:1.55;color:var(--muted);margin-bottom:14px;}
.pmtsoul-email-readonly-row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:42px;padding:10px 12px;border:1px solid var(--border);background:var(--input-bg);font:13px/1.4 "SF Mono",ui-monospace,monospace;overflow-wrap:anywhere;}
.pmtsoul-email-status{display:inline-flex;align-items:center;min-height:24px;padding:2px 8px;border:1px solid var(--border);border-radius:999px;font-size:10px;font-weight:650;white-space:nowrap;color:var(--muted);background:var(--surface);}
.pmtsoul-email-status.is-ok{color:#157143;border-color:rgba(26,127,79,.35);background:rgba(26,127,79,.08);}
.pmtsoul-email-status.is-warn{color:#8A6D0B;border-color:rgba(180,83,9,.35);background:rgba(180,83,9,.08);}
.pmtsoul-email-status.is-error{color:var(--error);border-color:color-mix(in srgb,var(--error) 38%,transparent);background:color-mix(in srgb,var(--error) 8%,transparent);}
.pmtsoul-email-identity-region{display:flex;flex-direction:column;gap:12px;}
.pmtsoul-email-identity-state{padding:14px;border:1px dashed var(--border);color:var(--muted);font-size:12.5px;line-height:1.5;}
.pmtsoul-email-effective-sender{padding:14px;border:1px solid var(--border);background:var(--input-bg);}
.pmtsoul-email-effective-sender-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;}
.pmtsoul-email-effective-sender-address{font:650 13px/1.45 "SF Mono",ui-monospace,monospace;color:var(--text);overflow-wrap:anywhere;}
.pmtsoul-email-effective-sender-copy{margin-top:8px;font-size:12.5px;line-height:1.55;color:var(--text);}
.pmtsoul-email-effective-sender-meta{margin-top:5px;font-size:11.5px;line-height:1.45;color:var(--muted);overflow-wrap:anywhere;}
/* 卡片左侧状态条:两张身份卡原本视觉权重完全相同,「已验证」与「需要配置 DNS」只靠
   右上角小徽章区分,而待办那张因为带 DNS 表格反而更长更显眼 —— 状态与视觉权重是反的。
   这条不是装饰,它承载的就是徽章那条信息,只是让它在扫视时先到达。 */
.pmtsoul-email-identity-card{border:1px solid var(--border);border-left:3px solid var(--border);background:var(--surface);padding:14px;}
.pmtsoul-email-identity-card[data-email-identity-tone="verified"]{border-left-color:var(--success);}
.pmtsoul-email-identity-card[data-email-identity-tone="pending"]{border-left-color:var(--warning);}
.pmtsoul-email-identity-card[data-email-identity-tone="failed"]{border-left-color:var(--error);}
.pmtsoul-email-identity-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:12px;}
.pmtsoul-email-identity-address{font:600 13px/1.4 "SF Mono",ui-monospace,monospace;overflow-wrap:anywhere;color:var(--text);}
.pmtsoul-email-identity-meta{font-size:11.5px;color:var(--muted);margin-top:4px;overflow-wrap:anywhere;}
.pmtsoul-email-form-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px;}
.pmtsoul-email-identity-create{margin-top:14px;padding:14px;border:1px solid var(--border);background:var(--input-bg);}
.pmtsoul-email-setup-flow{margin-bottom:16px;padding-bottom:14px;border-bottom:1px solid var(--border);}
.pmtsoul-email-setup-flow ol{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:10px 0 0;padding:0;list-style:none;counter-reset:email-setup;}
.pmtsoul-email-setup-flow li{position:relative;min-height:36px;padding-left:30px;color:var(--muted);font-size:11.5px;line-height:1.45;counter-increment:email-setup;}
.pmtsoul-email-setup-flow li::before{content:counter(email-setup);position:absolute;inset:0 auto auto 0;display:grid;place-items:center;width:22px;height:22px;border:1px solid var(--border);border-radius:50%;background:var(--surface);color:var(--text);font:650 11px/1 system-ui,sans-serif;}
.pmtsoul-email-dns{width:100%;border-collapse:collapse;margin:10px 0;font-size:11px;}
/* 🔴 2026-07-28 · 原来这里对**所有** th/td 写了 overflow-wrap:anywhere。
   它与 break-word 的关键区别是**参与 min-content 宽度计算** —— 表格布局于是认为每一列
   都能压到一个字符宽,把几乎全部宽度让给那串 400 字符的 DKIM 值。生产实测后果:
   表头 Type 竖成「Ty / pe」、TXT 竖成「TX / T」、MX 竖成「M / X」、复制按钮竖成「复 / 制」、
   resend._domainkey 断成三行。
   只有 Value 一列需要任意断行;其余列的宽度应由内容决定,不参与挤压。 */
.pmtsoul-email-dns th,.pmtsoul-email-dns td{padding:7px 6px;text-align:left;border-bottom:1px solid var(--border);vertical-align:top;white-space:nowrap;}
.pmtsoul-email-dns-val{white-space:normal;overflow-wrap:anywhere;width:100%;font-family:"SF Mono",ui-monospace,monospace;}
.pmtsoul-email-dns-act{width:1%;}
.pmtsoul-email-dns-act .pmtsoul-email-action{white-space:nowrap;}
.pmtsoul-email-dns th{color:var(--muted);font-weight:600;}
/* 控制条与上方内容之间原本没有分隔,6 个控件(检查 DNS / 三个开关 / 测试发送 / 撤销身份)
   平铺一行,破坏性操作和普通开关混在一起。加一条分隔线,并把撤销身份推到最右,
   与开关拉开距离 —— 它是这张卡里唯一不可逆的动作。 */
.pmtsoul-email-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:12px;padding-top:12px;border-top:1px solid var(--border);}
.pmtsoul-email-actions .is-danger{margin-left:auto;}
.pmtsoul-email-action{min-height:34px;padding:7px 10px;border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:3px;font-size:12px;cursor:pointer;}
.pmtsoul-email-action:hover{background:var(--hover-bg);}
.pmtsoul-email-action:disabled{opacity:.48;cursor:not-allowed;}
.pmtsoul-email-action.is-danger{color:var(--error);border-color:color-mix(in srgb,var(--error) 45%,var(--border));}
.pmtsoul-email-code-row{display:flex;align-items:stretch;gap:8px;margin-top:10px;}
.pmtsoul-email-code-row .pmtsoul-setting-input{max-width:180px;}
.pmtsoul-email-option{display:inline-flex;align-items:center;gap:7px;min-height:34px;font-size:12px;color:var(--text);}
.pmtsoul-email-option input{width:16px;height:16px;}
.pmtsoul-email-test-receipt{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:12px;padding:10px 12px;border-left:3px solid var(--success);background:var(--input-bg);font-size:11.5px;line-height:1.5;color:var(--muted);}
.pmtsoul-email-test-receipt strong{color:var(--text);}
@media (max-width:640px){
  .pmtsoul-email-form-grid{grid-template-columns:1fr;}
  .pmtsoul-email-setup-flow ol{grid-template-columns:1fr;gap:8px;}
  .pmtsoul-email-setup-flow li{min-height:24px;}
  .pmtsoul-email-identity-head{align-items:flex-start;}
  .pmtsoul-email-dns{display:block;overflow-x:auto;}
  .pmtsoul-email-code-row{flex-direction:column;}
  .pmtsoul-email-code-row .pmtsoul-setting-input{max-width:none;}
  .pmtsoul-email-actions .pmtsoul-email-action{flex:1 1 calc(50% - 8px);}
}

/* 2026-05-25:ERP / CRM 二级域名子系统模块卡 */
.pmtsoul-ws-subsystem-row{display:flex;align-items:center;margin-bottom:8px;}
.pmtsoul-ws-subsystem-url{
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:12px;
  color:var(--accent);
  text-decoration:none;
  letter-spacing:0.02em;
  word-break:break-all;
}
.pmtsoul-ws-subsystem-url:hover{text-decoration:underline;}
.pmtsoul-ws-subsystem-summary{
  display:flex;
  flex-wrap:wrap;
  gap:14px;
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:10.5px;
  color:var(--muted);
  letter-spacing:0.04em;
  margin-top:8px;
  padding:8px 0;
  border-top:1px dashed var(--border);
}
.pmtsoul-ws-subsystem-stat strong{color:var(--text);font-weight:600;font-size:12px;}

/* 2026-05-25:account popover 分组 header(企业 / 系统)*/
.account-pop-group-header{
  padding:10px 16px 4px;
  font-family:"SF Mono",ui-monospace,monospace;
  font-size:10px;
  font-weight:500;
  letter-spacing:0.12em;
  text-transform:uppercase;
  color:var(--muted);
}
html.dark .account-pop-group-header{color:var(--muted);}
/* 分组之间的 section 间距更紧凑(因为 header 已经做了分割视觉) */
.account-pop-group-header + .account-pop-section{margin-top:0;border-top:none;}

/* ============================================================
 * 2026-05-25 V8 · 桌面端 chat 默认收起,右下 fab 触发右侧 slide-in
 * 之前 ≤640px 用 fab + 全屏 overlay,>640px 是固定 380px 右侧栏。
 * 改成:桌面端也用 fab,但 chat-side 从右侧 slide-in,不全屏
 * ============================================================ */
@media (min-width: 641px){
  /* main-split workspace 占满,chat-side 脱离 grid */
  .pmtsoul-ws-main-split{
    grid-template-columns:1fr !important;
  }
  /* chat-side 默认右侧滑出(450px 固定 panel,不全屏) */
  .pmtsoul-ws-chat-side{
    position:fixed !important;
    right:0 !important;
    top:0 !important;
    bottom:0 !important;
    width:min(460px, 90vw) !important;
    height:100vh !important;
    height:100dvh !important;
    z-index:60 !important;
    background:var(--surface, #fff) !important;
    border-left:1px solid var(--border, #E5E3DC) !important;
    box-shadow:-12px 0 40px rgba(0,0,0,0.12) !important;
    transform:translateX(100%) !important;
    transition:transform .26s cubic-bezier(.32,.72,.16,1) !important;
    display:flex !important;
    flex-direction:column !important;
    max-height:none !important;
  }
  body.pmtsoul-ws-chat-open .pmtsoul-ws-chat-side{
    transform:translateX(0) !important;
  }
  /* fab 桌面显示(右下角 56px 圆) */
  .pmtsoul-ws-chat-fab{
    display:flex !important;
    position:fixed !important;
    right:24px;
    bottom:24px;
    width:56px;
    height:56px;
    border-radius:50%;
    background:#111;
    color:#fff;
    align-items:center;
    justify-content:center;
    border:none;
    box-shadow:0 6px 24px rgba(0,0,0,0.18);
    z-index:50;
    cursor:pointer;
    -webkit-tap-highlight-color:transparent;
    transition:transform .15s ease, box-shadow .15s ease, opacity .15s ease;
  }
  .pmtsoul-ws-chat-fab:hover{
    transform:scale(1.05);
    box-shadow:0 8px 28px rgba(0,0,0,0.24);
  }
  .pmtsoul-ws-chat-fab:active{transform:scale(0.98);}
  .pmtsoul-ws-chat-fab svg{width:24px;height:24px;display:block;}
  body.pmtsoul-ws-chat-open .pmtsoul-ws-chat-fab{
    display:none !important;
  }
  /* 桌面由 chat-side 内部 toolbar 关闭；外部按钮仅服务手机全屏。 */
  body.pmtsoul-ws-chat-open .pmtsoul-ws-chat-close-overlay{
    display:none !important;
  }
}

/* dark mode fab */
html.dark .pmtsoul-ws-chat-fab{
  background:var(--accent, #fff);
  color:#000;
}

/* === 2026-05-25 · Mobile bottom tab bar 已移除 ===
 * 原因:hamburger 滑出 sidebar 已经够用,底部 tab 多余。
 * 保留 fullscreen view 隐藏机制(storefront-studio 等)的相关清理在其他规则里。
 */

/* === 2026-05-25 · Mobile Bottom Sheet Modal ===
 * 移动端把居中 modal 改成从底部滑入的 sheet,贴合 iOS / 微信 / TikTok 等
 * 主流应用范式。桌面端零影响。
 *
 * 覆盖范围:
 *   .app-dialog       — 全局 Confirm / Input 对话框
 *   .account-popover  — 右上角账号菜单 popover
 */
@media (max-width: 640px){
  /* === Confirm / Input dialog → bottom sheet === */
  .app-dialog-overlay{
    align-items:flex-end !important;
    padding:0 !important;
    background:rgba(0,0,0,0.45) !important;
  }
  .app-dialog{
    width:100% !important;
    max-width:none !important;
    border-radius:18px 18px 0 0 !important;
    padding:14px 18px calc(20px + env(safe-area-inset-bottom,0px)) !important;
    box-shadow:0 -8px 32px rgba(0,0,0,0.4) !important;
    animation:pmts-sheet-slide-up .25s cubic-bezier(0.22,1,0.36,1);
    position:relative;
  }
  /* Drag handle 提示 */
  .app-dialog::before{
    content:'';
    position:absolute;top:8px;left:50%;transform:translateX(-50%);
    width:38px;height:4px;border-radius:999px;
    background:var(--border);opacity:0.7;
  }
  .app-dialog-header{padding-top:10px;}
  .app-dialog-actions{flex-direction:column-reverse;gap:8px;}
  .app-dialog-btn{
    width:100% !important;
    padding:13px !important;
    font-size:15px !important;
    min-height:46px;
  }

  /* === Account popover → bottom sheet === */
  .account-popover-mask{background:rgba(0,0,0,0.45) !important;z-index:250;}
  .account-popover{
    top:auto !important;
    right:0 !important;left:0 !important;bottom:0 !important;
    width:100% !important;
    max-height:80vh;overflow-y:auto;
    border-radius:18px 18px 0 0 !important;
    padding:14px 8px calc(12px + env(safe-area-inset-bottom,0px)) !important;
    box-shadow:0 -8px 32px rgba(0,0,0,0.4) !important;
    z-index:260;
    animation:pmts-sheet-slide-up .25s cubic-bezier(0.22,1,0.36,1);
  }
  .account-popover::before{
    content:'';display:block;
    width:38px;height:4px;margin:0 auto 10px;
    border-radius:999px;background:var(--border);opacity:0.7;
  }
  /* popover 内项触摸目标加大 */
  .account-popover .account-pop-row,
  .account-popover .account-pop-action{min-height:44px;}
}

@keyframes pmts-sheet-slide-up{
  from { transform:translateY(20px); opacity:0; }
  to   { transform:translateY(0);    opacity:1; }
}

/* === 2026-05-25 · Mobile UI polish (P0 修复批次) === */

/* ── Fix 2:mobile 顶栏精简 — 去掉中间 brand icon + panel title,只留 hamburger + 头像 ── */
@media (max-width: 640px){
  .app-titlebar-inner{display:none !important;}
  .app-titlebar-spacer{flex:1 !important;}
}

/* ── Fix 3:mobile 顶部 console (正在监听...) 强制 collapse 单行 ── */
@media (max-width: 640px){
  .pmtsoul-ws-console{
    max-height:44px !important;
    overflow:hidden !important;
    padding:8px 10px !important;
    font-size:11.5px !important;
  }
  .pmtsoul-ws-console--expanded{
    max-height:30vh !important;
    overflow-y:auto !important;
  }
  .pmtsoul-ws-console-summary{
    line-height:1.3 !important;
    overflow:hidden !important;
    text-overflow:ellipsis !important;
    white-space:nowrap !important;
  }
  .pmtsoul-ws-console-detail{display:none;}
  .pmtsoul-ws-console--expanded .pmtsoul-ws-console-detail{display:block;}
}

/* ── Fix 4 已撤回:mobile chat fab 跟 tab bar 互斥
 *  原因:tab bar 已移除,fab 恢复原行为(chat-collapsed 时 fab 展示)。
 */

/* ── Fix 5:mobile 工作区主屏冗余元素隐藏 ──
 * - "Hire Your AI Employee" 订阅卡(identity-card)不该在工作区主屏 broadcast,
 *   订阅入口应在账号 popover / 设置页
 *
 * 注:brand-bar / brand-logo 的 hide 已撤回 — 工作区主页那条 brand-bar DOM
 * 直接删了(panels.js:7395),AI 员工集 tools view 的 brand-bar 还在用,
 * 不能 mobile hide(里面有"返回工作台"按钮)。
 */
@media (max-width: 640px){
  .pmtsoul-ws-identity-card,
  .pmtsoul-ws-identity-section,
  [data-pmts-ws-identity]{display:none !important;}
}

/* ── Fix 6:mobile "全代理模式" 按钮 — 降视觉权重(橙色 banner → ghost 按钮) ── */
@media (max-width: 640px){
  .pmtsoul-ws-btn-god,
  [data-merchant-ws-quick="god-mode"]{
    background:transparent !important;
    border:1px solid var(--border) !important;
    color:var(--text) !important;
    font-weight:500 !important;
    padding:10px 12px !important;
    box-shadow:none !important;
  }
  .pmtsoul-ws-btn-god:hover,
  [data-merchant-ws-quick="god-mode"]:hover{
    background:var(--surface) !important;
  }
}

/* 2026-05-25 · 顶栏中间标题左的小 logo 去掉(冗余,左上 app-titlebar-brand 已有 logo) */
.app-titlebar-icon{display:none !important;}

/* 2026-05-25 · mobile 顶栏 session 标题固定长度,避免跟右侧 chip + 头像挤一起 */
@media (max-width: 640px){
  .app-titlebar-title{
    max-width:50vw !important;
    font-size:13px !important;
  }
  .app-titlebar-sub{display:none !important;}  /* mobile 不显子标题,省空间 */
}

/* 2026-05-25 · mobile 隐藏左侧 app-titlebar-brand —
 * mobile 上 brand-name 已 display:none,只剩 brand-icon 跟 session title 挤在一起。
 * hamburger 已经是导航入口,品牌 logo 在 mobile 顶栏冗余。桌面端 brand 保留(回首页入口)。 */
@media (max-width: 640px){
  .app-titlebar-brand{display:none !important;}
}

/* 2026-05-25 · 工作区模块卡 hover 阴影/背景去掉 —
 * 只让卡内可点击元素(链接/按钮/刷新)有 hover 反馈,卡片整体不响应。
 * 注:.pmtsoul-ws-module:hover 的 descendant refresh button 显示规则
 * 保留(refresh 按钮 hover 浮现是合理交互)。 */
.pmtsoul-ws-module:hover{
  background:transparent !important;
  box-shadow:none !important;
}
html.dark .pmtsoul-ws-module:hover{background:transparent !important;}
.pmtsoul-ws-module{
  transition:none !important;
}

/* 2026-05-25 · 工作区所有"行/卡 hover 选中样式"全清 —
 * 用户:鼠标放在模块上不要有任何选中视觉,只有按钮/链接才有 hover 反馈。
 * 覆盖前面 6 处 hover 规则(task-card / email-row / doc-row / mgr-item /
 * channel / module 本身)。 */
.pmtsoul-ws-task-card:hover,
.pmtsoul-ws-mgr-item:hover,
.pmtsoul-ws-email-row:hover,
.pmtsoul-ws-doc-row:hover,
.pmtsoul-ws-channel:hover,
.pmtsoul-ws-inquiry-row:hover,
.pmtsoul-ws-pick-row:hover,
.pmtsoul-ws-crm-row:hover,
.pmtsoul-ws-finance-row:hover{
  background:inherit !important;
  border-color:var(--border) !important;
  box-shadow:none !important;
  transform:none !important;
}
html.dark .pmtsoul-ws-task-card:hover,
html.dark .pmtsoul-ws-mgr-item:hover,
html.dark .pmtsoul-ws-email-row:hover,
html.dark .pmtsoul-ws-doc-row:hover,
html.dark .pmtsoul-ws-channel:hover{
  background:inherit !important;
}

/* 2026-05-25 · 一刀切 — .pmtsoul-ws-module-empty 全清 dashed border + 灰背景
 * 用户误以为是 hover 选中样式,实际是空态默认。file 中有 3 处定义,
 * 最稳 !important override 所有。 */
.pmtsoul-ws-module-empty{
  background:transparent !important;
  border:none !important;
}
html.dark .pmtsoul-ws-module-empty{
  background:transparent !important;
  border:none !important;
}

/* 2026-05-25 · 工作区模块 nuke 终极 — 用户连续多次报"选中阴影"未清。
 * 把 .pmtsoul-ws-module / 内部 module-body / module-empty / module-foot
 * 全状态(default/hover/focus/active)的 background/border/box-shadow 清空。
 * 只保留 module-head 的下分隔线 + module-foot 的上分隔线(layout 必要)。
 */
.pmtsoul-ws-module,
.pmtsoul-ws-module:hover,
.pmtsoul-ws-module:focus,
.pmtsoul-ws-module:focus-within,
.pmtsoul-ws-module:active,
.pmtsoul-ws-module-body,
.pmtsoul-ws-module-body:hover,
.pmtsoul-ws-module-empty,
.pmtsoul-ws-module-empty:hover{
  background:transparent !important;
  background-color:transparent !important;
  box-shadow:none !important;
  outline:none !important;
  border:none !important;
  transition:none !important;
}
html.dark .pmtsoul-ws-module,
html.dark .pmtsoul-ws-module:hover,
html.dark .pmtsoul-ws-module-body,
html.dark .pmtsoul-ws-module-body:hover,
html.dark .pmtsoul-ws-module-empty{
  background:transparent !important;
  background-color:transparent !important;
  box-shadow:none !important;
  outline:none !important;
  border:none !important;
}

/* 2026-05-25 · 工作区图片 / 视频模块先隐藏(以后再用) */
.pmtsoul-ws-module[data-ws-module="m-images"],
.pmtsoul-ws-module[data-ws-module="m-videos"]{
  display:none !important;
}

/* 2026-05-25 · 公司主页模块 redesign v2 —
 * v1 用 a 标签但 a:visited specificity 比 class 高,导致紫色下划线没盖住。
 * v2 显式 :link/:visited/:hover/:active 全设 color + text-decoration:none。
 * 显式 border-style:solid + border-width:1px 避免浏览器 a 全局 reset。 */
.pmtsoul-ws-website-link,
.pmtsoul-ws-website-link:link,
.pmtsoul-ws-website-link:visited,
.pmtsoul-ws-website-link:hover,
.pmtsoul-ws-website-link:active,
.pmtsoul-ws-website-link:focus{
  color:var(--text, #111) !important;
  text-decoration:none !important;
  -webkit-text-decoration:none !important;
}
.pmtsoul-ws-website-link{
  display:flex;align-items:center;gap:10px;
  padding:11px 14px;
  border-width:1px !important;
  border-style:solid !important;
  border-color:var(--border, #E5E3DC) !important;
  border-radius:8px;
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  font-size:13px;
  background:var(--surface, #F5F4ED);
  transition:border-color .15s, background .15s, transform .08s;
  margin:8px 0 14px;
  cursor:pointer;
  outline:none !important;
}
.pmtsoul-ws-website-link:hover{
  border-color:var(--text, #111) !important;
  background:var(--bg, #FFFFFF);
}
.pmtsoul-ws-website-link:active{
  transform:translateY(1px);
}
.pmtsoul-ws-website-link-url{
  flex:1;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-weight:500;
}
.pmtsoul-ws-website-link-icon{
  flex-shrink:0;
  font-size:13px;
  color:var(--muted, #888);
  transition:color .15s, transform .15s;
}
.pmtsoul-ws-website-link:hover .pmtsoul-ws-website-link-icon{
  color:var(--text, #111);
  transform:translate(2px, -2px);
}
.pmtsoul-ws-website-link--empty{
  cursor:default !important;
  color:var(--muted, #888) !important;
  font-style:italic;
}
.pmtsoul-ws-website-link--empty:hover{
  border-color:var(--border, #E5E3DC) !important;
  background:var(--surface, #F5F4ED) !important;
}
/* head 行尾 template 标签:右对齐 + 弱化 */
.pmtsoul-ws-storefront-template{
  margin-left:auto;
  font-family:ui-monospace,monospace;
  font-size:10.5px;
  color:var(--muted, #888);
  letter-spacing:0.02em;
}
/* 主 CTA 全宽 — 复用现有 primary-dark */
.pmtsoul-ws-btn-block{
  display:flex;width:100%;
  justify-content:center;align-items:center;
  padding:11px 16px;
  font-size:13px;font-weight:500;
  letter-spacing:0.02em;
}
/* Dark mode */
html.dark .pmtsoul-ws-website-link,
html.dark .pmtsoul-ws-website-link:link,
html.dark .pmtsoul-ws-website-link:visited,
html.dark .pmtsoul-ws-website-link:hover,
html.dark .pmtsoul-ws-website-link:active{
  color:var(--text, #E8E6E0) !important;
}
html.dark .pmtsoul-ws-website-link{
  border-color:var(--border, #2D2D2D) !important;
  background:var(--surface, #1A1A18);
}
html.dark .pmtsoul-ws-website-link:hover{
  border-color:var(--text, #E8E6E0) !important;
  background:var(--bg, #0F0F0D);
}

/* 2026-05-25 v3 · Polsia-style storefront URL + chrome CTA
 * 用户截图参考 Polsia "Website" 模块:URL 裸 mono 文字 + chrome 按钮。 */
/* 2026-05-25 v5:改用 <div> 元素 — div 无 user-agent box / 无 :visited 限制。
 * Polsia 风:裸 mono 文字,muted 灰,hover 变黑 + 下划线。 */
.pmtsoul-ws-website-url{
  display:block;
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  font-size:13px;
  color:var(--muted, #666);
  background:transparent;
  border:none;
  outline:none;
  padding:14px 0;
  margin:0;
  letter-spacing:0;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  cursor:pointer !important;
  user-select:text;
}
/* 2026-06-21 · ERP/CRM 子系统卡用 <a> 复用 website-url 样式(参考公司主页)。UA a:link 默认蓝
   (特异性 0,1,1 高于裸 .class 0,1,0)会盖住上面的 color → 补 a:link/:visited 覆盖,与公司主页域名一致;
   dark mode 由下方 html.dark .pmtsoul-ws-website-url:link(!important)接管,无需再写。 */
a.pmtsoul-ws-website-url:link,
a.pmtsoul-ws-website-url:visited{
  color:var(--muted, #666);
  text-decoration:none;
}
a.pmtsoul-ws-website-url:hover{
  color:var(--text, #111);
  text-decoration:underline;
  text-underline-offset:3px;
}
/* 显式 [role=link] + hover 强制 cursor:pointer 防全局 * cursor 覆盖 */
div.pmtsoul-ws-website-url[role="link"],
div.pmtsoul-ws-website-url[role="link"]:hover,
div.pmtsoul-ws-website-url[role="link"]:focus,
div.pmtsoul-ws-website-url[role="link"]:focus-visible{
  cursor:pointer !important;
}
.pmtsoul-ws-website-url[role="link"]:hover{
  color:var(--text, #111);
  text-decoration:underline;
  text-underline-offset:3px;
}
.pmtsoul-ws-website-url[role="link"]:focus-visible{
  outline:1px dotted var(--muted, #666);
  outline-offset:2px;
}

/* 主 CTA:全宽 outline 按钮 — Polsia chrome 风,但放大 + 全宽 + uppercase */
.pmtsoul-ws-btn-manage{
  display:flex;width:100%;
  align-items:center;justify-content:center;
  padding:12px 18px;
  font-family:inherit;
  font-size:11.5px;
  font-weight:600;
  letter-spacing:0.1em;
  text-transform:uppercase;
  color:var(--text, #111);
  background:transparent;
  border:1px solid var(--border, #C8C5BB);
  border-radius:2px;
  cursor:pointer;
  transition:background .12s,border-color .12s,color .12s,transform .08s;
  margin-top:6px;
}
.pmtsoul-ws-btn-manage:hover{
  background:var(--text, #111);
  color:var(--bg, #FFFFFF);
  border-color:var(--text, #111);
}
.pmtsoul-ws-btn-manage:active{transform:translateY(1px);}
html.dark .pmtsoul-ws-btn-manage{
  color:var(--text, #E8E6E0);
  border-color:var(--border, #3A3A36);
}
html.dark .pmtsoul-ws-btn-manage:hover{
  background:var(--text, #E8E6E0);
  color:var(--bg, #0F0F0D);
  border-color:var(--text, #E8E6E0);
}
.pmtsoul-ws-website-url:hover{
  color:var(--text, #111) !important;
  text-decoration:underline !important;
  -webkit-text-decoration:underline !important;
  text-underline-offset:3px;
  cursor:pointer;
}
.pmtsoul-ws-website-url--empty{
  font-style:italic;
  cursor:default !important;
}
.pmtsoul-ws-website-url--empty:hover{
  color:var(--muted, #666) !important;
  text-decoration:none !important;
  cursor:default !important;
}
html.dark .pmtsoul-ws-website-url,
html.dark .pmtsoul-ws-website-url:link,
html.dark .pmtsoul-ws-website-url:visited,
html.dark .pmtsoul-ws-website-url:active{
  color:var(--muted, #9A9685) !important;
}
html.dark .pmtsoul-ws-website-url:hover{
  color:var(--text, #E8E6E0) !important;
}

/* Chrome button — 灰底白边,Polsia "MANAGE DOMAIN" 风 */
.pmtsoul-ws-btn-chrome{
  display:inline-flex;align-items:center;justify-content:center;
  padding:8px 18px;
  font-family:inherit;
  font-size:11px;
  font-weight:500;
  letter-spacing:0.08em;
  color:var(--text, #111);
  background:var(--surface, #F5F4ED);
  border:1px solid var(--border, #C8C5BB);
  border-radius:2px;
  cursor:pointer;
  transition:background .12s,border-color .12s,transform .08s;
  text-transform:uppercase;
}
.pmtsoul-ws-btn-chrome:hover{
  background:var(--bg, #FFFFFF);
  border-color:var(--text, #111);
}
.pmtsoul-ws-btn-chrome:active{
  transform:translateY(1px);
}
html.dark .pmtsoul-ws-btn-chrome{
  color:var(--text, #E8E6E0);
  background:var(--surface, #1A1A18);
  border-color:var(--border, #3A3A36);
}
html.dark .pmtsoul-ws-btn-chrome:hover{
  background:var(--bg, #0F0F0D);
  border-color:var(--text, #E8E6E0);
}

/* ====================================================================
 * 2026-05-25 · 工作区 dark mode 兜底 — 825 个 light selector vs 255
 * dark override,大量硬编码 #FAFAF7 / #F5F4ED / #FFF / #111 等没适配。
 * 这里用 [data-pmtsoul-ws] 顶层 scope + token 强制 override 高频元素。
 * ==================================================================== */
html.dark [data-pmtsoul-ws]{
  background:var(--bg) !important;
  color:var(--text);
}
/* 工作区主区容器 */
html.dark .pmtsoul-ws-erp,
html.dark .pmtsoul-ws-workspace,
html.dark .pmtsoul-ws-workspace-grid,
html.dark .pmtsoul-ws-col,
html.dark .pmtsoul-ws-main-split,
html.dark .pmtsoul-ws-storefront{
  background:var(--bg) !important;
  color:var(--text);
}
/* 卡 / 行 类元素:背景 + 边框 + 文字 token 化 */
html.dark .pmtsoul-ws-task-card,
html.dark .pmtsoul-ws-doc-row,
html.dark .pmtsoul-ws-mgr-item,
html.dark .pmtsoul-ws-pick-row,
html.dark .pmtsoul-ws-crm-row,
html.dark .pmtsoul-ws-finance-row,
html.dark .pmtsoul-ws-inquiry-row,
html.dark .pmtsoul-ws-ops-tweet,
html.dark .pmtsoul-ws-channel{
  background:var(--surface) !important;
  border-color:var(--border) !important;
  color:var(--text) !important;
}
/* mascot 卡 + identity 卡 + 状态线 + console 等专属容器 */
html.dark .pmtsoul-ws-mascot-card,
html.dark .pmtsoul-ws-identity-card,
html.dark .pmtsoul-ws-status-line,
html.dark .pmtsoul-ws-stat,
html.dark .pmtsoul-ws-mkt-summary,
html.dark .pmtsoul-ws-mini-stat,
html.dark .pmtsoul-ws-chat-msg,
html.dark .pmtsoul-ws-chat-next,
html.dark .pmtsoul-ws-mini-chat-bubble--assistant{
  background:var(--surface) !important;
  border-color:var(--border) !important;
  color:var(--text);
}
/* dashed empty 状态 */
html.dark .pmtsoul-ws-module-empty{
  background:transparent !important;
  border-color:var(--border) !important;
  color:var(--muted) !important;
}
/* head + 标题 */
html.dark .pmtsoul-ws-module-head,
html.dark .pmtsoul-ws-module-head-title,
html.dark .pmtsoul-ws-section-title{
  color:var(--text);
}
html.dark .pmtsoul-ws-module-head-title{
  border-bottom-color:var(--border);
}
/* 文字弱化层 */
html.dark .pmtsoul-ws-module-head-meta,
html.dark .pmtsoul-ws-module-head-meta-time,
html.dark .pmtsoul-ws-task-desc,
html.dark .pmtsoul-ws-channel-meta,
html.dark .pmtsoul-ws-email-from,
html.dark .pmtsoul-ws-email-stats,
html.dark .pmtsoul-ws-email-ts,
html.dark .pmtsoul-ws-email-to,
html.dark .pmtsoul-ws-doc-meta,
html.dark .pmtsoul-ws-storefront-desc,
html.dark .pmtsoul-ws-storefront-hint,
html.dark .pmtsoul-ws-stat-l,
html.dark .pmtsoul-ws-mini-stat-l{
  color:var(--muted) !important;
}
/* 按钮:medium / pill / block */
html.dark .pmtsoul-ws-btn-medium,
html.dark .pmtsoul-ws-btn-pill,
html.dark .pmtsoul-ws-btn-block{
  background:var(--surface) !important;
  border-color:var(--border) !important;
  color:var(--text) !important;
}
html.dark .pmtsoul-ws-btn-medium:hover,
html.dark .pmtsoul-ws-btn-pill:hover,
html.dark .pmtsoul-ws-btn-block:hover{
  background:var(--bg) !important;
  border-color:var(--text) !important;
}
/* primary-dark 暗色仍保留视觉强对比(白底黑字) */
html.dark .pmtsoul-ws-btn-primary-dark{
  background:var(--text) !important;
  color:var(--bg) !important;
}
/* form input / textarea */
html.dark .pmtsoul-ws-form-row input,
html.dark .pmtsoul-ws-form-row textarea,
html.dark .pmtsoul-ws-form-row select,
html.dark .pmtsoul-ws-chat-input{
  background:var(--input-bg, var(--surface)) !important;
  border-color:var(--border) !important;
  color:var(--text) !important;
}
/* chat side 暗色 */
html.dark .pmtsoul-ws-chat-side,
html.dark .pmtsoul-ws-chat-pane{
  background:var(--surface) !important;
}

/* 2026-05-25 · "让 X 干嘛 →" 数字员工操作链接 — 朴素下划线风,跟
 * .pmtsoul-ws-module-empty-action / .pmtsoul-ws-manage-link 对齐。
 * 显式 :link/:visited/:hover override 避免 a:visited 紫色。 */
.pmtsoul-ws-employee-action,
.pmtsoul-ws-employee-action:link,
.pmtsoul-ws-employee-action:visited,
.pmtsoul-ws-employee-action:hover,
.pmtsoul-ws-employee-action:active{
  color:var(--text, #111) !important;
  text-decoration:none !important;
}
.pmtsoul-ws-employee-action{
  display:inline-block;
  margin-top:14px;
  font-size:12px;
  letter-spacing:0.02em;
  cursor:pointer;
  border-bottom:1px solid var(--text, #111);
  padding-bottom:1px;
  transition:opacity .15s, border-color .15s;
}
.pmtsoul-ws-employee-action:hover{
  opacity:0.7;
}
html.dark .pmtsoul-ws-employee-action,
html.dark .pmtsoul-ws-employee-action:link,
html.dark .pmtsoul-ws-employee-action:visited,
html.dark .pmtsoul-ws-employee-action:hover{
  color:var(--text, #E8E6E0) !important;
  border-bottom-color:var(--text, #E8E6E0);
}

/* 2026-05-25 · M10 storefront link cursor 强制 pointer(用户报 cursor 不是手型) */
.pmtsoul-ws-module-empty-action,
a.pmtsoul-ws-module-empty-action,
a.pmtsoul-ws-module-empty-action:link,
a.pmtsoul-ws-module-empty-action:visited{
  cursor:pointer !important;
}

/* 公司主页 2 个 link 横向排版,分开间距 */
.pmtsoul-ws-storefront-links{
  display:flex;
  gap:20px;
  margin-top:14px;
  flex-wrap:wrap;
}


/* ====================================================================
 * 2026-05-26 · 初始化 P0 首屏:隐藏 ERP 重模块(后端口径:保留 DOM 不删)
 * ==================================================================== */
.pmtsoul-ws-module[data-ws-module="m15-finance"]{
  display:none !important;
}

/* ====================================================================
 * 2026-05-26 · 任务卡四态(canonical: todo / in_progress / completed / failed)
 * backend 返 pending_review 时,FE 映射 todo + 显原 chip
 * ==================================================================== */
.pmtsoul-ws-task-card[data-task-status="todo"]{
  /* 默认态,无特殊样式 */
}
.pmtsoul-ws-task-card[data-task-status="in_progress"]{
  border-left:3px solid var(--accent, #198F4F);
  padding-left:11px;
}
.pmtsoul-ws-task-card[data-task-status="in_progress"] .pmtsoul-ws-led{
  background:var(--accent, #198F4F) !important;
  box-shadow:0 0 6px rgba(25,143,79,0.5);
  animation:pmts-led-pulse 1.4s ease-in-out infinite;
}
.pmtsoul-ws-task-card[data-task-status="completed"]{
  opacity:0.6;
}
.pmtsoul-ws-task-card[data-task-status="completed"] .pmtsoul-ws-task-title{
  text-decoration:line-through;
  text-decoration-color:var(--muted);
  text-decoration-thickness:1px;
}
.pmtsoul-ws-task-card[data-task-status="completed"] .pmtsoul-ws-led{
  background:#21A656 !important;
}
.pmtsoul-ws-task-card[data-task-status="failed"]{
  border-left:3px solid #DC2626;
  padding-left:11px;
  background:rgba(220,38,38,0.04);
}
.pmtsoul-ws-task-card[data-task-status="failed"] .pmtsoul-ws-led{
  background:#DC2626 !important;
}
@keyframes pmts-led-pulse{
  0%,100%{ opacity:1; }
  50%{ opacity:0.4; }
}

/* 任务 category chip 颜色(engineering / research / growth) */
.pmtsoul-ws-tag[data-task-category="engineering"]{
  background:rgba(96,165,250,0.14) !important;
  color:#2563EB !important;
}
.pmtsoul-ws-tag[data-task-category="research"]{
  background:rgba(168,85,247,0.14) !important;
  color:#7C3AED !important;
}
.pmtsoul-ws-tag[data-task-category="growth"]{
  background:rgba(34,197,94,0.14) !important;
  color:#21A656 !important;
}
html.dark .pmtsoul-ws-tag[data-task-category="engineering"]{ color:#60A5FA !important; }
html.dark .pmtsoul-ws-tag[data-task-category="research"]{ color:#C084FC !important; }
html.dark .pmtsoul-ws-tag[data-task-category="growth"]{ color:#4ADE80 !important; }

/* ====================================================================
 * 2026-05-26 · 员工 4 态(active / standby / locked / unknown)
 * 字段优先 backend:employee.activation_state > activated > 静态 fallback
 * ==================================================================== */
/* Selector 修:实际 class 是 .pmtsoul-ws-employee-card */
.pmtsoul-ws-employee-card[data-activation-state="active"]{}
.pmtsoul-ws-employee-card[data-activation-state="standby"]{
  opacity:0.85;
}
.pmtsoul-ws-employee-card[data-activation-state="locked"]{
  opacity:0.5;
  filter:saturate(0.45);
  cursor:not-allowed;
}
.pmtsoul-ws-employee-card[data-activation-state="locked"] .pmtsoul-ws-employee-name::after{
  content:" 🔒";
  font-size:13px;
  margin-left:6px;
  opacity:0.7;
}
.pmtsoul-ws-employee-card[data-activation-state="locked"]:hover{
  opacity:0.7;
  transform:none !important;
  box-shadow:none !important;
}
/* employee status chip:locked + standby 配色 */
.pmtsoul-ws-employee-status--locked{
  border-color:#C8C5BB !important;color:#666 !important;background:#FAFAF7 !important;
}
.pmtsoul-ws-employee-status--standby{
  border-color:#94A3B8 !important;color:#475569 !important;background:#F1F5F9 !important;
}
html.dark .pmtsoul-ws-employee-status--locked{
  border-color:#3A3A36 !important;color:#888 !important;background:#1A1A1A !important;
}
html.dark .pmtsoul-ws-employee-status--standby{
  border-color:#475569 !important;color:#94A3B8 !important;background:#1A2330 !important;
}

/* ====================================================================
 * 2026-05-26 · 邮件详情 modal(Polsia 风,复用 .pmtsoul-setting-* 结构)
 * ==================================================================== */

/* 邮件 row 在 m12-drafts 模块内可点击 → cursor pointer */
[data-ws-module="m12-drafts"] .pmtsoul-ws-email-row{
  cursor:pointer;
}

/* Sent/Received/Draft badge — 黄色 polsia 风,放标题旁 */
.pmts-email-status-badge{
  display:inline-block;
  margin-left:10px;
  padding:3px 10px;
  background:rgba(245,158,11,0.14);
  color:#D97706;
  font-size:11px;
  font-weight:600;
  letter-spacing:0.04em;
  border-radius:3px;
  vertical-align:middle;
}
.pmts-email-status-badge:empty{display:none;}
html.dark .pmts-email-status-badge{ color:#FBBF24; background:rgba(245,158,11,0.2); }

/* meta value(From / To / Date) — mono 字体 */
.pmts-email-meta-value{
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  font-size:13px;
  color:var(--text, #111);
  padding:4px 0;
  word-break:break-all;
}
html.dark .pmts-email-meta-value{ color:var(--text, #E8E6E0); }

/* Status chip — delivered/sent=green,failed=red,queued=yellow,其他=灰 */
.pmts-email-status-chip{
  display:inline-block;
  padding:3px 10px;
  font-size:12px;
  border-radius:3px;
  background:rgba(34,197,94,0.14);
  color:#21A656;
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
}
.pmts-email-status-chip[data-status="failed"],
.pmts-email-status-chip[data-status="error"],
.pmts-email-status-chip[data-status="bounced"]{
  background:rgba(220,38,38,0.1);color:#DC2626;
}
.pmts-email-status-chip[data-status="queued"],
.pmts-email-status-chip[data-status="pending"]{
  background:rgba(245,158,11,0.14);color:#D97706;
}
html.dark .pmts-email-status-chip{ color:#4ADE80; background:rgba(34,197,94,0.18); }
html.dark .pmts-email-status-chip[data-status="failed"],
html.dark .pmts-email-status-chip[data-status="error"]{ color:#F87171; }

/* Message body — 整段灰色 box 包,保留换行 */
.pmts-email-message{
  padding:14px 16px;
  background:var(--surface, #F5F4ED);
  border:1px solid var(--border, #E5E3DC);
  border-radius:4px;
  font-size:14px;
  line-height:1.65;
  color:var(--text, #111);
  white-space:pre-wrap;
  word-break:break-word;
  max-height:50vh;
  overflow-y:auto;
}
html.dark .pmts-email-message{
  background:var(--bg, #0F0F0D);
  border-color:var(--border, #2D2D2D);
  color:var(--text, #E8E6E0);
}

/* 2026-05-26 · 任务卡 head 视觉修:窄宽度标题不再每字一行
 * Issue:flex 一行 + LED + title flex:1 + 2 chip flex-shrink:0 →
 *   窄列(workspace 三列 1/3 ≈ 320px)时 chip 占 ~140px,title 只剩 ~120px,
 *   中文标题 8-12 字直接换 5-6 行,每字一列。
 * Fix:
 *   1. head 允许 flex-wrap;标题占满第一行,chip 自然换到第二行
 *   2. raw status chip(PENDING_REVIEW)弱化为灰色小字(canonical 状态
 *      已由卡片边框/LED 体现,raw 只是额外 hint)
 *   3. category chip 缩字号 + 去 uppercase letter-spacing 太挤
 */
.pmtsoul-ws-task-head{
  flex-wrap:wrap !important;
  row-gap:6px;
}
.pmtsoul-ws-task-head .pmtsoul-ws-led{
  flex-shrink:0;
}
.pmtsoul-ws-task-head .pmtsoul-ws-task-title{
  flex:1 1 100% !important;
  min-width:0;
  order:1;
  padding-left:14px;   /* 跟 LED 对齐 */
  margin-left:-14px;
}
.pmtsoul-ws-task-head .pmtsoul-ws-tag{
  order:2;
  font-size:9.5px;
  padding:2px 6px;
  letter-spacing:0.05em;
}
/* raw status chip(PENDING_REVIEW 等):弱化 — 灰底无边框,只作 hint */
.pmtsoul-ws-task-head .pmtsoul-ws-tag--raw{
  background:rgba(120,120,120,0.1) !important;
  color:#666 !important;
  border:none !important;
  text-transform:lowercase;
  letter-spacing:0.02em;
  font-weight:500;
}
html.dark .pmtsoul-ws-task-head .pmtsoul-ws-tag--raw{
  background:rgba(255,255,255,0.06) !important;
  color:#9A9685 !important;
}

/* 2026-07-15 · 任务卡上的「上传到本任务」入口(用户要求:不必先进详情)。
   无边框文字链接,与工作区次要动作(「查看」/「查看全部」)同一语言。
   前两版(terracotta 边框 / 中性边框)都被否:症结不是颜色,是「带边框」这个形态
   在工作区根本不存在——次要动作全是无边框文字链接。带边框的框永远显得像外来件。 */
.pmtsoul-ws-task-upload-btn{margin-right:auto;border:0;background:transparent;padding:6px 0;font-size:12px;font-weight:600;cursor:pointer;font-family:inherit;color:var(--accent,#A93817);transition:opacity .12s}
.pmtsoul-ws-task-upload-btn:hover{text-decoration:underline;text-underline-offset:3px}
.pmtsoul-ws-task-upload-btn:focus-visible{outline:2px solid var(--focus-ring,rgba(169,56,23,.35));outline-offset:3px;border-radius:3px}
@media (pointer:coarse){ .pmtsoul-ws-task-upload-btn{min-height:44px;padding:9px 14px} }

/* Task Hub is rendered mostly from inline templates. Keep its compact desktop
   density, but make every interactive control reachable on touch devices. */
@media (pointer:coarse){
  #panelTaskhub button,
  #panelTaskhub input,
  #panelTaskhub select,
  #mainTaskhub button,
  #mainTaskhub input,
  #mainTaskhub select{min-height:44px}
  #panelTaskhub .panel-head-btn,
  #mainTaskhub .panel-head-btn{min-width:44px}
}
