/* ============================================================
   Jinbound Digital · 今榜数字科技 — B 端后台 UI 系统
   jinbound-ui.css  ·  v1.1   （唯一样式源，含夜间/白天双主题）
   ============================================================
   字体（均为可商用开源，零版权风险）：Sora / JetBrains Mono / Noto Sans SC
   每个页面 <head> 引入：
     <link href="https://fonts.googleapis.com/css2?family=Sora:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&family=Noto+Sans+SC:wght@400;500;700&display=swap" rel="stylesheet">
     <link rel="stylesheet" href="/jinbound-ui.css">

   【主题 / 昼夜模式】三种工作方式：
     · 不设置          → 自动跟随系统（系统浅色则白天，否则夜间）
     · data-theme="dark"  → 强制夜间
     · data-theme="light" → 强制白天
     切换：document.documentElement.setAttribute('data-theme','light'|'dark')
     建议在 <head> 顶部加防闪脚本：
       <script>(function(){var t=localStorage.getItem('jb-theme');if(t)document.documentElement.setAttribute('data-theme',t);})();</script>

   【最小页面骨架】
     <div class="jb-app">
       <aside class="jb-sidebar">… .jb-sidebar__brand / .jb-nav / .jb-nav__item.is-active …</aside>
       <div class="jb-main">
         <header class="jb-topbar">…</header>
         <main class="jb-page"><div class="jb-page__head">…</div> 内容 </main>
       </div>
     </div>

   【组件速查（全部 jb- 前缀）】
     按钮 jb-btn(--primary/--secondary/--ghost/--danger/--icon/--sm/--lg)
     卡片 jb-card(__head/__title/__body/__foot)   数据卡 jb-stat(__label/__value(--grad)/__delta(--up/--down))
     表格 jb-table-wrap>jb-table（td.num 等宽右对齐）   表单 jb-field/jb-label/jb-input/jb-select/jb-textarea/jb-help(--error)
     勾选 jb-check(--radio) / 开关 jb-switch+jb-switch__track   徽标 jb-badge(--success/--warning/--danger/--info/--neutral)
     提示 jb-alert(同上变体)  选项卡 jb-tabs>jb-tab.is-active  分页 jb-pagination>jb-page-btn.is-active
     菜单 jb-menu>jb-menu__item  弹窗 jb-modal-overlay>jb-modal  进度 jb-progress>jb-progress__bar
     头像 jb-avatar  空态 jb-empty  骨架 jb-skeleton
     工具类 jb-grid(--2/3/4)/jb-flex/jb-between/jb-divider/jb-gradient-text/jb-eyebrow/jb-mono/jb-mt-x/jb-mb-x

   规则：禁止硬编码颜色，一律用令牌 var(--xxx)；中文标题用 --font-display（已内置中文兜底）；
        数字/金额/时间用 jb-mono；不引入任何第三方 UI 框架。
   ============================================================ */

/* ===========================================================
   1. 设计令牌 DESIGN TOKENS
   =========================================================== */
:root{
  /* 品牌 */
  --cyan:#4fd6ff;
  --mint:#42e8c4;
  --grad:linear-gradient(110deg,#4fd6ff,#42e8c4);
  --grad-soft:linear-gradient(110deg,rgba(79,214,255,.14),rgba(66,232,196,.12));

  /* 表面层 (深色) */
  --bg:#0a0c11;
  --surface-1:#0e131b;
  --surface-2:#141a24;
  --surface-3:#1a2230;
  --overlay:rgba(6,9,14,.66);

  /* 描边 */
  --border:rgba(233,238,244,.09);
  --border-strong:rgba(233,238,244,.16);
  --border-accent:rgba(79,214,255,.30);

  /* 文字 */
  --text:#e9eef4;
  --text-dim:#8b95a3;
  --text-faint:#5a6473;
  --text-on-accent:#06121a;

  /* 语义色 */
  --success:#2fd4a7; --success-bg:rgba(47,212,167,.13);
  --warning:#f6c453; --warning-bg:rgba(246,196,83,.13);
  --danger:#ff6470;  --danger-bg:rgba(255,100,112,.13);
  --info:#4fd6ff;    --info-bg:rgba(79,214,255,.13);

  /* 字体 (Sora 仅作拉丁/数字, CN 由 Noto Sans SC 兜底) */
  --font-display:"Sora","Noto Sans SC","PingFang SC","HarmonyOS Sans SC","Microsoft YaHei",sans-serif;
  --font-sans:"Noto Sans SC","PingFang SC","HarmonyOS Sans SC","MiSans","Microsoft YaHei","Hiragino Sans GB",sans-serif;
  --font-mono:"JetBrains Mono",ui-monospace,"SFMono-Regular",monospace;

  /* 字号 */
  --fs-xs:12px; --fs-sm:13px; --fs-base:14px; --fs-md:15px;
  --fs-lg:18px; --fs-xl:22px; --fs-2xl:28px; --fs-3xl:36px;
  --lh-tight:1.25; --lh:1.6;

  /* 间距 */
  --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px; --sp-5:20px;
  --sp-6:24px; --sp-8:32px; --sp-10:40px; --sp-12:48px; --sp-16:64px;

  /* 圆角 */
  --r-sm:6px; --r-md:9px; --r-lg:12px; --r-xl:16px; --r-pill:999px;

  /* 阴影 / 发光 */
  --shadow-1:0 1px 2px rgba(0,0,0,.4);
  --shadow-2:0 8px 28px -10px rgba(0,0,0,.6);
  --shadow-pop:0 16px 48px -16px rgba(0,0,0,.7);
  --glow:0 0 0 3px rgba(79,214,255,.16);

  /* 动效 */
  --t-fast:.15s ease; --t:.25s ease; --t-slow:.4s cubic-bezier(.2,.7,.2,1);

  /* 布局 */
  --sidebar-w:250px; --topbar-h:60px; --page-max:1440px;
}

/* 白天模式令牌（手动 data-theme="light" 时生效） */
[data-theme="light"]{
  --bg:#f4f6fa;
  --surface-1:#ffffff;
  --surface-2:#ffffff;
  --surface-3:#eef1f6;
  --overlay:rgba(15,20,30,.4);
  --border:rgba(15,23,42,.10);
  --border-strong:rgba(15,23,42,.18);
  --border-accent:rgba(20,160,200,.40);
  --text:#0f1722;
  --text-dim:#5b6675;
  --text-faint:#9aa4b2;
  --cyan:#13a6c7; --mint:#13ab83;
  --grad:linear-gradient(110deg,#13a6c7,#13ab83);
  --grad-soft:linear-gradient(110deg,rgba(19,166,199,.10),rgba(19,171,131,.08));
  --shadow-1:0 1px 2px rgba(15,23,42,.08);
  --shadow-2:0 10px 30px -12px rgba(15,23,42,.16);
  --shadow-pop:0 18px 50px -16px rgba(15,23,42,.22);
  --glow:0 0 0 3px rgba(19,166,199,.18);
}

/* 未手动指定主题时，自动跟随系统的白天/夜间偏好 */
@media (prefers-color-scheme: light){
  :root:not([data-theme]){
    --bg:#f4f6fa;
    --surface-1:#ffffff;
    --surface-2:#ffffff;
    --surface-3:#eef1f6;
    --overlay:rgba(15,20,30,.4);
    --border:rgba(15,23,42,.10);
    --border-strong:rgba(15,23,42,.18);
    --border-accent:rgba(20,160,200,.40);
    --text:#0f1722;
    --text-dim:#5b6675;
    --text-faint:#9aa4b2;
    --cyan:#13a6c7; --mint:#13ab83;
    --grad:linear-gradient(110deg,#13a6c7,#13ab83);
    --grad-soft:linear-gradient(110deg,rgba(19,166,199,.10),rgba(19,171,131,.08));
    --shadow-1:0 1px 2px rgba(15,23,42,.08);
    --shadow-2:0 10px 30px -12px rgba(15,23,42,.16);
    --shadow-pop:0 18px 50px -16px rgba(15,23,42,.22);
    --glow:0 0 0 3px rgba(19,166,199,.18);
  }
}

/* ===========================================================
   2. 基础 BASE
   =========================================================== */
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  background:var(--bg);
  color:var(--text);
  font-family:var(--font-sans);
  font-size:var(--fs-base);
  line-height:var(--lh);
  -webkit-font-smoothing:antialiased;
}
a{color:inherit}
h1,h2,h3,h4{margin:0;font-family:var(--font-display);font-weight:600;line-height:var(--lh-tight)}
::selection{background:var(--cyan);color:var(--text-on-accent)}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--surface-3);border-radius:10px;border:2px solid var(--bg)}
::-webkit-scrollbar-thumb:hover{background:var(--border-strong)}

/* ===========================================================
   3. 应用框架 APP SHELL
   =========================================================== */
.jb-app{display:grid;grid-template-columns:var(--sidebar-w) 1fr;min-height:100vh}

/* 侧边栏 */
.jb-sidebar{
  background:var(--surface-1);border-right:1px solid var(--border);
  display:flex;flex-direction:column;position:sticky;top:0;height:100vh;
}
.jb-sidebar__brand{
  display:flex;flex-direction:column;gap:2px;
  padding:var(--sp-5) var(--sp-5) var(--sp-4);border-bottom:1px solid var(--border);
}
.jb-sidebar__brand b{font-family:var(--font-display);font-weight:600;font-size:var(--fs-lg);letter-spacing:.01em}
.jb-sidebar__brand small{font-size:11px;letter-spacing:.14em;color:var(--text-dim)}
.jb-nav{flex:1;overflow-y:auto;padding:var(--sp-3)}
.jb-nav__label{
  font-family:var(--font-mono);font-size:11px;letter-spacing:.18em;text-transform:uppercase;
  color:var(--text-faint);padding:var(--sp-4) var(--sp-3) var(--sp-2);
}
.jb-nav__item{
  display:flex;align-items:center;gap:var(--sp-3);
  padding:10px 12px;border-radius:var(--r-md);color:var(--text-dim);
  text-decoration:none;font-size:var(--fs-md);position:relative;cursor:pointer;
  transition:background var(--t-fast),color var(--t-fast);
}
.jb-nav__item:hover{background:var(--surface-2);color:var(--text)}
.jb-nav__item.is-active{color:var(--text);background:var(--grad-soft)}
.jb-nav__item.is-active::before{
  content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);
  width:3px;height:18px;border-radius:3px;background:var(--grad);
}
.jb-nav__icon{width:18px;height:18px;flex-shrink:0;stroke:currentColor;fill:none}
.jb-nav__badge{margin-left:auto;font-family:var(--font-mono);font-size:11px;color:var(--cyan)}
.jb-sidebar__foot{padding:var(--sp-3);border-top:1px solid var(--border)}

/* 主区 + 顶栏 */
.jb-main{display:flex;flex-direction:column;min-width:0}
.jb-topbar{
  height:var(--topbar-h);display:flex;align-items:center;gap:var(--sp-4);
  padding:0 var(--sp-6);border-bottom:1px solid var(--border);
  background:color-mix(in srgb,var(--bg) 78%,transparent);
  backdrop-filter:blur(14px);position:sticky;top:0;z-index:50;
}
.jb-topbar__spacer{flex:1}
.jb-topbar__search{
  display:flex;align-items:center;gap:var(--sp-2);
  background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-md);
  padding:8px 14px;min-width:260px;color:var(--text-faint);
}
.jb-topbar__search input{
  background:none;border:none;outline:none;color:var(--text);
  font-family:var(--font-sans);font-size:var(--fs-md);width:100%;
}
.jb-page{padding:var(--sp-8) var(--sp-6);max-width:var(--page-max);width:100%;margin:0 auto}
.jb-page__head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-4);margin-bottom:var(--sp-6);flex-wrap:wrap}
.jb-page__title{font-size:var(--fs-2xl)}
.jb-page__sub{color:var(--text-dim);font-size:var(--fs-md);margin-top:6px}
.jb-page__actions{display:flex;gap:var(--sp-3);align-items:center}

/* ===========================================================
   4. 按钮 BUTTONS
   =========================================================== */
.jb-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);
  font-family:var(--font-sans);font-size:var(--fs-md);font-weight:500;line-height:1;
  padding:10px 18px;border-radius:var(--r-md);border:1px solid transparent;
  cursor:pointer;text-decoration:none;white-space:nowrap;transition:all var(--t);
}
.jb-btn:focus-visible{outline:none;box-shadow:var(--glow)}
.jb-btn--primary{background:var(--grad);color:var(--text-on-accent);font-weight:600}
.jb-btn--primary:hover{transform:translateY(-1px);box-shadow:0 8px 26px -10px rgba(79,214,255,.6)}
.jb-btn--secondary{background:transparent;border-color:var(--border-strong);color:var(--text)}
.jb-btn--secondary:hover{border-color:var(--cyan);color:var(--cyan)}
.jb-btn--ghost{background:transparent;color:var(--text-dim)}
.jb-btn--ghost:hover{background:var(--surface-2);color:var(--text)}
.jb-btn--danger{background:var(--danger-bg);color:var(--danger)}
.jb-btn--danger:hover{background:var(--danger);color:#fff}
.jb-btn--sm{padding:6px 12px;font-size:var(--fs-sm)}
.jb-btn--lg{padding:13px 24px;font-size:var(--fs-lg)}
.jb-btn--icon{padding:0;width:38px;height:38px;border-color:var(--border)}
.jb-btn--icon:hover{border-color:var(--border-strong);color:var(--cyan)}
.jb-btn--block{width:100%}
.jb-btn:disabled,.jb-btn.is-disabled{opacity:.45;pointer-events:none}
.jb-btn svg{width:16px;height:16px;stroke:currentColor;fill:none}

/* ===========================================================
   5. 卡片 / 统计 CARDS & STATS
   =========================================================== */
.jb-card{background:var(--surface-1);border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden}
.jb-card__head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);padding:var(--sp-5) var(--sp-6);border-bottom:1px solid var(--border)}
.jb-card__title{font-size:var(--fs-lg)}
.jb-card__body{padding:var(--sp-6)}
.jb-card__foot{padding:var(--sp-4) var(--sp-6);border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:var(--sp-3)}

.jb-stat{position:relative;overflow:hidden;background:var(--surface-1);border:1px solid var(--border);border-radius:var(--r-lg);padding:var(--sp-6)}
.jb-stat::after{content:"";position:absolute;top:-40%;right:-20%;width:160px;height:160px;background:radial-gradient(circle,rgba(79,214,255,.10),transparent 65%);pointer-events:none}
.jb-stat__label{display:flex;align-items:center;gap:var(--sp-2);font-size:var(--fs-sm);color:var(--text-dim)}
.jb-stat__value{font-family:var(--font-display);font-size:var(--fs-3xl);font-weight:600;line-height:1;margin-top:var(--sp-3)}
.jb-stat__value--grad{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.jb-stat__delta{display:inline-flex;align-items:center;gap:4px;font-family:var(--font-mono);font-size:var(--fs-sm);margin-top:var(--sp-3)}
.jb-stat__delta--up{color:var(--success)}
.jb-stat__delta--down{color:var(--danger)}

/* ===========================================================
   6. 表格 TABLE
   =========================================================== */
.jb-table-wrap{background:var(--surface-1);border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden}
.jb-table{width:100%;border-collapse:collapse;font-size:var(--fs-md)}
.jb-table thead th{
  text-align:left;font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.08em;
  text-transform:uppercase;color:var(--text-faint);font-weight:500;
  padding:var(--sp-3) var(--sp-5);background:var(--surface-2);border-bottom:1px solid var(--border);
}
.jb-table tbody td{padding:var(--sp-4) var(--sp-5);border-bottom:1px solid var(--border);color:var(--text)}
.jb-table tbody tr:last-child td{border-bottom:none}
.jb-table tbody tr{transition:background var(--t-fast)}
.jb-table tbody tr:hover{background:var(--surface-2)}
.jb-table .num{font-family:var(--font-mono);text-align:right;white-space:nowrap}
.jb-table--zebra tbody tr:nth-child(even){background:rgba(255,255,255,.02)}

/* ===========================================================
   7. 表单 FORMS
   =========================================================== */
.jb-field{display:flex;flex-direction:column;gap:var(--sp-2);margin-bottom:var(--sp-5)}
.jb-label{font-size:var(--fs-sm);color:var(--text-dim);font-weight:500}
.jb-label .req{color:var(--danger);margin-left:3px}
.jb-input,.jb-textarea,.jb-select{
  font-family:var(--font-sans);font-size:var(--fs-md);color:var(--text);
  background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--r-md);
  padding:10px 14px;width:100%;outline:none;
  transition:border-color var(--t),box-shadow var(--t);
}
.jb-input::placeholder,.jb-textarea::placeholder{color:var(--text-faint)}
.jb-input:focus,.jb-textarea:focus,.jb-select:focus{border-color:var(--cyan);box-shadow:var(--glow)}
.jb-input:disabled,.jb-textarea:disabled{opacity:.5;cursor:not-allowed}
.jb-textarea{min-height:96px;resize:vertical}
.jb-select{
  appearance:none;cursor:pointer;padding-right:38px;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%238b95a3' stroke-width='1.6' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 14px center;
}
.jb-field.is-error .jb-input,.jb-field.is-error .jb-select,.jb-field.is-error .jb-textarea{border-color:var(--danger)}
.jb-help{font-size:var(--fs-xs);color:var(--text-faint)}
.jb-help--error{color:var(--danger)}
.jb-form-row{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-5)}

/* 勾选 / 单选 / 开关 */
.jb-check{display:inline-flex;align-items:center;gap:var(--sp-2);cursor:pointer;font-size:var(--fs-md);user-select:none}
.jb-check input{
  appearance:none;width:18px;height:18px;border:1.5px solid var(--border-strong);border-radius:5px;
  background:var(--surface-2);display:grid;place-content:center;cursor:pointer;transition:all var(--t-fast);
}
.jb-check input:checked{background:var(--grad);border-color:transparent}
.jb-check input:checked::after{content:"";width:5px;height:9px;border:solid var(--text-on-accent);border-width:0 2px 2px 0;transform:rotate(45deg);margin-bottom:2px}
.jb-check--radio input{border-radius:50%}
.jb-check--radio input:checked{background:var(--surface-2);border:5px solid var(--cyan)}
.jb-check--radio input:checked::after{display:none}

.jb-switch{position:relative;display:inline-flex;align-items:center;width:42px;height:24px;cursor:pointer;flex-shrink:0}
.jb-switch input{position:absolute;opacity:0;width:0;height:0}
.jb-switch__track{position:absolute;inset:0;background:var(--surface-3);border:1px solid var(--border-strong);border-radius:var(--r-pill);transition:all var(--t)}
.jb-switch__track::before{content:"";position:absolute;left:3px;top:50%;transform:translateY(-50%);width:16px;height:16px;border-radius:50%;background:var(--text-dim);transition:all var(--t)}
.jb-switch input:checked + .jb-switch__track{background:var(--grad);border-color:transparent}
.jb-switch input:checked + .jb-switch__track::before{transform:translate(18px,-50%);background:#fff}

/* ===========================================================
   8. 徽标 / 标签 / 状态点 BADGES
   =========================================================== */
.jb-badge{
  display:inline-flex;align-items:center;gap:5px;font-family:var(--font-mono);
  font-size:var(--fs-xs);font-weight:500;letter-spacing:.02em;padding:4px 10px;border-radius:var(--r-pill);
}
.jb-badge--success{color:var(--success);background:var(--success-bg)}
.jb-badge--warning{color:var(--warning);background:var(--warning-bg)}
.jb-badge--danger{color:var(--danger);background:var(--danger-bg)}
.jb-badge--info{color:var(--info);background:var(--info-bg)}
.jb-badge--neutral{color:var(--text-dim);background:var(--surface-3)}
.jb-dot{width:7px;height:7px;border-radius:50%;display:inline-block;flex-shrink:0}
.jb-dot--success{background:var(--success);box-shadow:0 0 8px var(--success)}
.jb-dot--warning{background:var(--warning);box-shadow:0 0 8px var(--warning)}
.jb-dot--danger{background:var(--danger);box-shadow:0 0 8px var(--danger)}
.jb-dot--neutral{background:var(--text-faint)}

/* ===========================================================
   9. 提示条 ALERTS
   =========================================================== */
.jb-alert{display:flex;gap:var(--sp-3);padding:var(--sp-4) var(--sp-5);border-radius:var(--r-md);border:1px solid var(--border);background:var(--surface-2);font-size:var(--fs-md)}
.jb-alert__icon{flex-shrink:0;width:18px;height:18px;stroke:currentColor;fill:none}
.jb-alert--success{border-color:rgba(47,212,167,.3);background:var(--success-bg)}
.jb-alert--success .jb-alert__icon{color:var(--success)}
.jb-alert--warning{border-color:rgba(246,196,83,.3);background:var(--warning-bg)}
.jb-alert--warning .jb-alert__icon{color:var(--warning)}
.jb-alert--danger{border-color:rgba(255,100,112,.3);background:var(--danger-bg)}
.jb-alert--danger .jb-alert__icon{color:var(--danger)}
.jb-alert--info{border-color:var(--border-accent);background:var(--info-bg)}
.jb-alert--info .jb-alert__icon{color:var(--info)}

/* ===========================================================
   10. 选项卡 / 面包屑 / 分页 / 分段控件
   =========================================================== */
.jb-tabs{display:flex;gap:var(--sp-5);border-bottom:1px solid var(--border)}
.jb-tab{padding:var(--sp-3) 2px;color:var(--text-dim);font-size:var(--fs-md);cursor:pointer;background:none;border:none;position:relative;font-family:var(--font-sans);transition:color var(--t)}
.jb-tab:hover{color:var(--text)}
.jb-tab.is-active{color:var(--text)}
.jb-tab.is-active::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--grad);border-radius:2px}

.jb-breadcrumb{display:flex;align-items:center;gap:var(--sp-2);font-size:var(--fs-sm);color:var(--text-dim)}
.jb-breadcrumb a{text-decoration:none;color:var(--text-dim);transition:color var(--t-fast)}
.jb-breadcrumb a:hover{color:var(--cyan)}
.jb-breadcrumb__sep{color:var(--text-faint)}
.jb-breadcrumb__current{color:var(--text)}

.jb-pagination{display:inline-flex;gap:4px}
.jb-page-btn{min-width:34px;height:34px;display:grid;place-items:center;border-radius:var(--r-sm);border:1px solid var(--border);background:transparent;color:var(--text-dim);font-family:var(--font-mono);font-size:var(--fs-sm);cursor:pointer;transition:all var(--t-fast)}
.jb-page-btn:hover{border-color:var(--border-strong);color:var(--text)}
.jb-page-btn.is-active{background:var(--grad);color:var(--text-on-accent);border-color:transparent;font-weight:600}
.jb-page-btn:disabled{opacity:.4;pointer-events:none}

.jb-segmented{display:inline-flex;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-md);padding:3px}
.jb-segmented button{border:none;background:none;color:var(--text-dim);padding:6px 14px;border-radius:var(--r-sm);font-size:var(--fs-sm);font-family:var(--font-sans);cursor:pointer;transition:all var(--t-fast)}
.jb-segmented button.is-active{background:var(--surface-3);color:var(--text)}

/* ===========================================================
   11. 下拉菜单 / 弹窗 MENU & MODAL
   =========================================================== */
.jb-menu{background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--r-md);box-shadow:var(--shadow-pop);padding:var(--sp-2);min-width:180px}
.jb-menu__item{display:flex;align-items:center;gap:var(--sp-3);padding:9px 12px;border-radius:var(--r-sm);color:var(--text);font-size:var(--fs-md);cursor:pointer;text-decoration:none;transition:background var(--t-fast)}
.jb-menu__item:hover{background:var(--surface-3)}
.jb-menu__item--danger{color:var(--danger)}
.jb-menu__sep{height:1px;background:var(--border);margin:var(--sp-2) 0}

.jb-modal-overlay{position:fixed;inset:0;background:var(--overlay);backdrop-filter:blur(4px);display:grid;place-items:center;z-index:200;padding:var(--sp-6)}
.jb-modal{background:var(--surface-1);border:1px solid var(--border-strong);border-radius:var(--r-xl);box-shadow:var(--shadow-pop);width:100%;max-width:520px;overflow:hidden}
.jb-modal__head{display:flex;align-items:center;justify-content:space-between;padding:var(--sp-5) var(--sp-6);border-bottom:1px solid var(--border)}
.jb-modal__title{font-size:var(--fs-xl)}
.jb-modal__close{background:none;border:none;color:var(--text-dim);cursor:pointer;font-size:22px;line-height:1;transition:color var(--t-fast)}
.jb-modal__close:hover{color:var(--text)}
.jb-modal__body{padding:var(--sp-6)}
.jb-modal__foot{padding:var(--sp-4) var(--sp-6);border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:var(--sp-3)}

/* ===========================================================
   12. 进度 / 骨架 / 头像 / 空态 / 工具提示
   =========================================================== */
.jb-progress{height:8px;background:var(--surface-3);border-radius:var(--r-pill);overflow:hidden}
.jb-progress__bar{height:100%;background:var(--grad);border-radius:var(--r-pill);transition:width var(--t-slow)}

.jb-skeleton{background:linear-gradient(90deg,var(--surface-2),var(--surface-3),var(--surface-2));background-size:200% 100%;animation:jb-shimmer 1.4s infinite;border-radius:var(--r-sm)}
@keyframes jb-shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}

.jb-avatar{width:36px;height:36px;border-radius:50%;background:var(--grad);color:var(--text-on-accent);display:grid;place-items:center;font-family:var(--font-display);font-weight:600;font-size:var(--fs-md);overflow:hidden;flex-shrink:0}
.jb-avatar img{width:100%;height:100%;object-fit:cover}
.jb-avatar--sm{width:28px;height:28px;font-size:var(--fs-sm)}
.jb-avatar--lg{width:48px;height:48px;font-size:var(--fs-lg)}

.jb-empty{text-align:center;padding:var(--sp-12) var(--sp-6);color:var(--text-dim)}
.jb-empty__title{color:var(--text);font-family:var(--font-display);font-size:var(--fs-lg);margin:var(--sp-3) 0 var(--sp-2)}

.jb-tip{position:relative;display:inline-flex}
.jb-tip[data-tip]:hover::after{
  content:attr(data-tip);position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);
  background:var(--surface-3);color:var(--text);border:1px solid var(--border-strong);
  font-size:var(--fs-xs);padding:6px 10px;border-radius:var(--r-sm);white-space:nowrap;z-index:100;box-shadow:var(--shadow-2);
}

/* ===========================================================
   13. 工具类 UTILITIES
   =========================================================== */
.jb-grid{display:grid;gap:var(--sp-5)}
.jb-grid--2{grid-template-columns:repeat(2,1fr)}
.jb-grid--3{grid-template-columns:repeat(3,1fr)}
.jb-grid--4{grid-template-columns:repeat(4,1fr)}
.jb-flex{display:flex;align-items:center;gap:var(--sp-3)}
.jb-flex--col{flex-direction:column;align-items:stretch}
.jb-between{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3)}
.jb-wrap{flex-wrap:wrap}
.jb-divider{height:1px;background:var(--border);border:none;margin:var(--sp-5) 0}
.jb-gradient-text{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.jb-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--cyan)}
.jb-text-dim{color:var(--text-dim)}
.jb-text-faint{color:var(--text-faint)}
.jb-mono{font-family:var(--font-mono)}
.jb-mt-0{margin-top:0}.jb-mt-2{margin-top:var(--sp-2)}.jb-mt-4{margin-top:var(--sp-4)}.jb-mt-6{margin-top:var(--sp-6)}
.jb-mb-2{margin-bottom:var(--sp-2)}.jb-mb-4{margin-bottom:var(--sp-4)}.jb-mb-6{margin-bottom:var(--sp-6)}

/* ===========================================================
   14. 响应式 RESPONSIVE
   =========================================================== */
@media(max-width:1100px){
  .jb-grid--4{grid-template-columns:repeat(2,1fr)}
  .jb-grid--3{grid-template-columns:repeat(2,1fr)}
}
@media(max-width:920px){
  .jb-app{grid-template-columns:1fr}
  .jb-sidebar{position:fixed;left:0;top:0;z-index:150;width:var(--sidebar-w);transform:translateX(-100%);transition:transform var(--t)}
  .jb-app.is-sidebar-open .jb-sidebar{transform:none;box-shadow:var(--shadow-pop)}
  .jb-topbar__search{min-width:0;flex:1}
}
@media(max-width:680px){
  .jb-grid--2,.jb-grid--3,.jb-grid--4{grid-template-columns:1fr}
  .jb-form-row{grid-template-columns:1fr}
  .jb-page{padding:var(--sp-5) var(--sp-4)}
}

/* ===========================================================
   15. Jinbound 后台兼容层（旧看板 DOM -> 唯一 UI 令牌）
   =========================================================== */
html{overflow-x:hidden}
[hidden]{display:none!important}

.jb-app.is-collapsed{grid-template-columns:64px 1fr}
.jb-app.is-collapsed .jb-sidebar{align-items:center}
.jb-app.is-collapsed .jb-sidebar__brand b,
.jb-app.is-collapsed .jb-sidebar__brand small,
.jb-app.is-collapsed .jb-nav__label,
.jb-app.is-collapsed .jb-nav__item span:not(.jb-nav__icon):not(.shell-nav-icon),
.jb-app.is-collapsed .shell-nav-text,
.jb-app.is-collapsed .sidebar-brand-text{display:none}
.jb-app.is-collapsed .jb-sidebar__brand{width:100%;padding:var(--sp-3);align-items:center}
.jb-app.is-collapsed .jb-nav{width:100%;padding:var(--sp-2)}
.jb-app.is-collapsed .jb-nav__item{justify-content:center;padding:10px 0}
.jb-nav__item[data-label]{position:relative}
.jb-app.is-collapsed .jb-nav__item[data-label]:hover::after,
.jb-app.is-collapsed .jb-sidebar__brand[data-label]:hover::after{
  content:attr(data-label);position:absolute;left:calc(100% + var(--sp-2));top:50%;
  z-index:200;transform:translateY(-50%);min-width:max-content;padding:7px 10px;
  border:1px solid var(--border);border-radius:var(--r-sm);background:var(--surface-3);
  color:var(--text);box-shadow:var(--shadow-pop);font-size:var(--fs-xs);pointer-events:none;
}
.jb-sidebar__brand[data-label]{position:relative}
.jb-sidebar__brand{color:var(--text);text-decoration:none}
.jb-sidebar__brand:hover{text-decoration:none}
.sidebar-brand-link{display:flex;align-items:center;gap:var(--sp-3);color:var(--text);text-decoration:none}
.sidebar-brand-link:hover{text-decoration:none}
.sidebar-brand-link span:last-child{display:flex;flex-direction:column;gap:2px}
.sidebar-brand-link small{color:var(--text-dim)}
.sidebar-logo,
.jb-nav__icon,.shell-nav-icon{
  width:22px;height:22px;display:inline-grid;place-items:center;flex-shrink:0;
  border:1px solid var(--border);border-radius:var(--r-sm);font-family:var(--font-mono);
  font-size:11px;color:currentColor;background:var(--surface-2)
}
.jb-nav__item.is-active .jb-nav__icon,
.jb-nav__item.is-active .shell-nav-icon{border-color:var(--border-accent);background:var(--grad-soft);color:var(--cyan)}

.jb-sidebar-toggle,.jb-mobile-toggle{
  width:36px;height:36px;display:inline-grid;place-items:center;border:1px solid var(--border);
  border-radius:var(--r-md);background:var(--surface-2);color:var(--text-dim);cursor:pointer;
  transition:background var(--t-fast),color var(--t-fast),border-color var(--t-fast)
}
.jb-sidebar-toggle:hover,.jb-mobile-toggle:hover{border-color:var(--border-accent);color:var(--text);background:var(--surface-3)}
.jb-sidebar-toggle span,.jb-mobile-toggle span{
  width:16px;height:16px;border:1px solid currentColor;border-radius:3px;
  box-shadow:inset 6px 0 0 color-mix(in srgb,currentColor 24%,transparent)
}
.jb-mobile-toggle{display:none}
.jb-scrim{display:none}
.jb-theme-toggle{min-width:92px}

.jb-topbar .top-actions,.jb-topbar .shell-actions{display:flex;align-items:center;gap:var(--sp-2)}
.jb-topbar .ghost-btn,.jb-topbar .icon-btn,.jb-topbar .primary-btn,
.ghost-btn,.icon-btn,.primary-btn,.text-btn,.login-form button{
  display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);
  min-height:36px;padding:0 14px;border:1px solid var(--border);border-radius:var(--r-md);
  background:var(--surface-2);color:var(--text);font-family:var(--font-sans);font-size:var(--fs-sm);
  font-weight:500;text-decoration:none;cursor:pointer;box-shadow:none
}
.primary-btn,.login-form button{border-color:var(--border-accent);background:var(--grad);color:var(--text-on-accent)}
.ghost-btn:hover,.icon-btn:hover,.primary-btn:hover,.text-btn:hover,.login-form button:hover{text-decoration:none;filter:brightness(1.05)}

.hero-flow,.detail-hero,.panel,.card,.highlight-card,.rail-card,
.process-panel,.flow-band,.project-rail,.detail-card,.drawer-panel{
  background:var(--surface-1);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-1)
}
.hero-flow,.detail-hero{padding:var(--sp-6);margin-bottom:var(--sp-5)}
.panel{margin-top:var(--sp-5);overflow:hidden}
.panel-head,.section-head,.group-head,.card h3{
  display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);
  padding:var(--sp-5) var(--sp-6);border-bottom:1px solid var(--border)
}
.panel-head h2,.section-head h2,.group-head h2,.card h3{font-size:var(--fs-lg)}
.panel>p,.panel .muted,.card p{padding:0 var(--sp-6) var(--sp-5)}
.muted,.subline,.source,.lead{color:var(--text-dim)}
.eyebrow,.jb-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--cyan)}
.summary-grid,.hero-meta,.stats-grid,.detail-grid,.command-insight-grid,.jb-grid{display:grid;gap:var(--sp-4)}
.summary-grid,.hero-meta{grid-template-columns:repeat(2,minmax(0,1fr))}
.detail-grid,.command-insight-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
.stats-grid{grid-template-columns:repeat(4,minmax(0,1fr))}
.stat,.metric-card,.stat-card,.jb-stat{
  position:relative;overflow:hidden;background:var(--surface-1);border:1px solid var(--border);
  border-radius:var(--r-lg);padding:var(--sp-5)
}
.stat span,.metric-card span,.stat-card span,.jb-stat__label{display:block;color:var(--text-dim);font-size:var(--fs-sm)}
.stat strong,.metric-card strong,.stat-card strong,.jb-stat__value{
  display:block;margin-top:var(--sp-2);font-family:var(--font-display);font-size:var(--fs-2xl);line-height:1.1;color:var(--text)
}
.jb-mono,.num,time,.track-index,.live-check small{font-family:var(--font-mono)}

.status,.pill,.jb-badge,.live-status{
  display:inline-flex;align-items:center;gap:6px;min-height:24px;padding:2px 9px;border-radius:var(--r-pill);
  border:1px solid var(--border);background:var(--surface-2);color:var(--text-dim);font-size:var(--fs-xs);font-weight:500
}
.status\\.正常,.正常,.good,.pill.good,.jb-badge--success{border-color:color-mix(in srgb,var(--success) 36%,transparent);background:var(--success-bg);color:var(--success)}
.status\\.阻塞,.阻塞,.bad,.pill.bad,.jb-badge--danger{border-color:color-mix(in srgb,var(--danger) 36%,transparent);background:var(--danger-bg);color:var(--danger)}
.status\\.待拍板,.待拍板,.warn,.pill.warn,.jb-badge--warning{border-color:color-mix(in srgb,var(--warning) 36%,transparent);background:var(--warning-bg);color:var(--warning)}
.live-dot{width:8px;height:8px;border-radius:50%;background:var(--text-faint);display:inline-block}
.live-dot.ok,.live-dot.good{background:var(--success)}
.live-dot.warn,.live-dot.pending{background:var(--warning)}
.live-dot.bad,.live-dot.error{background:var(--danger)}

.command-grid,.project-workbench,.detail-workbench,.agent-command-grid,.diagnosis-command-grid,
.admin-workbench,.personal-workbench{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(320px,420px);gap:var(--sp-5);align-items:start
}
.command-project-list,.priority-list,.health-list,.log-list,.insight-list,.link-list,.source-chips{display:grid;gap:var(--sp-3)}
.priority-row,.health-row,.insight-row,.command-project-card,.log-item,.live-check,.link-list a{
  display:grid;gap:var(--sp-2);padding:var(--sp-4);border:1px solid var(--border);border-radius:var(--r-md);
  background:var(--surface-2);color:var(--text);text-decoration:none
}
.priority-row:hover,.health-row:hover,.insight-row:hover,.command-project-card:hover,.link-list a:hover{
  border-color:var(--border-accent);background:var(--surface-3);text-decoration:none
}
.stage-overview,.flow,.process-map,.dashboard-nav,.tabs,.category-nav{
  display:flex;gap:var(--sp-2);overflow:auto;padding:var(--sp-2);scrollbar-width:none
}
.stage-item,.flow-step,.process-node,.tab,.dashboard-nav button,.category-nav button,.category-nav a{
  min-width:max-content;padding:var(--sp-3) var(--sp-4);border:1px solid var(--border);
  border-radius:var(--r-md);background:var(--surface-2);color:var(--text-dim)
}
.stage-item.has-project,.flow-step.active,.tab.active,.dashboard-nav button.active,.category-nav .active{
  border-color:var(--border-accent);background:var(--grad-soft);color:var(--text)
}
.controls,.form-grid,.admin-filters,.live-form-grid{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sp-3)
}
input,select,textarea,.jb-input,.jb-select,.jb-textarea{
  width:100%;min-height:38px;border:1px solid var(--border);border-radius:var(--r-md);
  background:var(--surface-2);color:var(--text);font-family:var(--font-sans);font-size:var(--fs-md);
  padding:9px 12px;outline:none
}
input:focus,select:focus,textarea:focus{border-color:var(--cyan);box-shadow:var(--glow)}
.jb-table-wrap,.table-wrap{overflow:auto;border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface-1)}
table,.jb-table{width:100%;border-collapse:collapse}
th,td{padding:12px 14px;border-bottom:1px solid var(--border);text-align:left}
th{color:var(--text-dim);font-size:var(--fs-xs);letter-spacing:.08em;text-transform:uppercase;background:var(--surface-2)}
td.num,td[class*=amount],td[class*=count]{font-family:var(--font-mono);text-align:right}

.drawer,.modal,.scrim{background:var(--overlay)}
.drawer-panel,.modal-content{background:var(--surface-1);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-pop)}
.empty,.jb-empty{text-align:center;padding:var(--sp-10);color:var(--text-dim)}

.login-page{min-height:100vh;display:grid;place-items:center;padding:var(--sp-6);background:radial-gradient(circle at top left,rgba(79,214,255,.14),transparent 34rem),var(--bg)}
.login-panel,.login-card{
  width:min(460px,100%);display:grid;gap:var(--sp-5);background:var(--surface-1);
  border:1px solid var(--border);border-radius:var(--r-xl);padding:var(--sp-8);box-shadow:var(--shadow-2)
}
.login-form{display:grid;gap:var(--sp-3)}
.login-form.split{padding-top:var(--sp-5);border-top:1px solid var(--border)}
.login-form h2{font-size:var(--fs-lg)}

@media(max-width:920px){
  .jb-app.is-collapsed{grid-template-columns:1fr}
  .jb-app.is-collapsed .jb-sidebar{width:min(82vw,280px);align-items:stretch}
  .jb-app.is-collapsed .jb-sidebar__brand b,
  .jb-app.is-collapsed .jb-sidebar__brand small,
  .jb-app.is-collapsed .jb-nav__label,
  .jb-app.is-collapsed .jb-nav__item span:not(.jb-nav__icon):not(.shell-nav-icon),
  .jb-app.is-collapsed .shell-nav-text,
  .jb-app.is-collapsed .sidebar-brand-text{display:inline}
  .jb-app.is-collapsed .jb-sidebar__brand{padding:var(--sp-5) var(--sp-4)}
  .jb-app.is-collapsed .jb-nav{padding:var(--sp-3)}
  .jb-app.is-collapsed .jb-nav__item{justify-content:flex-start;padding:10px 12px}
  .jb-app.is-collapsed .jb-nav__item[data-label]:hover::after,
  .jb-app.is-collapsed .jb-sidebar__brand[data-label]:hover::after{display:none}
  .jb-app.is-sidebar-open .jb-scrim{display:block;position:fixed;inset:0;z-index:140;background:var(--overlay)}
  .jb-mobile-toggle{display:inline-grid}
  .jb-topbar{padding:0 var(--sp-4)}
  .jb-page{padding:var(--sp-5) var(--sp-4)}
  .command-grid,.project-workbench,.detail-workbench,.agent-command-grid,.diagnosis-command-grid,
  .admin-workbench,.personal-workbench,.detail-grid,.command-insight-grid,.summary-grid,.hero-meta,.stats-grid{
    grid-template-columns:1fr
  }
  .controls,.form-grid,.admin-filters,.live-form-grid{grid-template-columns:1fr}
  .jb-topbar .top-actions,.jb-topbar .shell-actions{display:none}
}

/* ===========================================================
   16. 业务看板深度兼容层（动态 DOM -> Jinbound UI 组件）
   =========================================================== */
.jb-app{overflow-x:hidden}
.jb-sidebar{width:var(--sidebar-w);max-width:var(--sidebar-w);overflow:hidden}
.jb-sidebar>.jb-sidebar-toggle{margin:var(--sp-3);align-self:flex-end}
.jb-app.is-collapsed .jb-sidebar{width:64px;max-width:64px}
.jb-app.is-collapsed .jb-sidebar>.jb-sidebar-toggle{align-self:center;margin:var(--sp-2) 0}
.jb-main{background:linear-gradient(180deg,color-mix(in srgb,var(--cyan) 7%,transparent),transparent 280px),var(--bg)}

.shell-context{min-width:0;display:grid;gap:2px}
.shell-context p,.jb-topbar p{margin:0;color:var(--text-dim);font-size:var(--fs-xs)}
.shell-context strong,.jb-topbar strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font-size:var(--fs-md)}
.top-actions,.shell-actions,.detail-actions,.drawer-head-actions{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}
.jb-theme-toggle{width:38px;min-width:38px;padding:0;font-size:0}
.jb-theme-toggle::before{content:"";width:15px;height:15px;border:1.6px solid currentColor;border-radius:50%;box-shadow:inset -5px -4px 0 color-mix(in srgb,currentColor 26%,transparent)}

.login-panel,.login-card{position:relative;gap:var(--sp-5)}
.login-panel__top{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3)}
.login-panel .eyebrow,.login-card .eyebrow{margin:0 0 var(--sp-2)}
.login-panel h1,.login-card h1{font-size:var(--fs-2xl)}
.login-panel .muted,.login-card .muted{margin:var(--sp-3) 0 0;padding:0;line-height:1.7}
.login-form .jb-field{margin:0}
.login-form input{height:42px}
.login-form button.jb-btn{min-height:42px}
.login-form h2{margin:0;color:var(--text);font-size:var(--fs-md)}

.opc-control-stack,.content,.recent-updates{display:grid;gap:var(--sp-4)}
.opc-control-stack{margin-bottom:var(--sp-5)}
.controls{
  position:sticky;top:calc(var(--topbar-h) + var(--sp-3));z-index:20;
  grid-template-columns:minmax(280px,1.4fr) repeat(3,minmax(150px,1fr));
  padding:var(--sp-4);border:1px solid var(--border);border-radius:var(--r-lg);
  background:color-mix(in srgb,var(--surface-1) 94%,transparent);box-shadow:var(--shadow-1);backdrop-filter:blur(14px)
}
.controls select,.controls input{min-height:40px}
.category-nav{flex-wrap:wrap;padding:0}
.category-nav button,.category-nav a,.diagnosis-chips button,.candidate-controls button{
  min-height:32px;border:1px solid var(--border);border-radius:var(--r-pill);
  padding:0 var(--sp-3);background:var(--surface-2);color:var(--text-dim);
  font-family:var(--font-sans);font-size:var(--fs-sm);cursor:pointer
}
.category-nav button.active,.category-nav button:hover,.diagnosis-chips button:hover,.candidate-controls button:hover{
  border-color:var(--border-accent);background:var(--grad-soft);color:var(--text)
}

.stats,.stats-grid,.diagnosis-metrics,.highlight-grid,.workflow-grid,.skill-grid,.layout-grid,.layout-grid.three,.drawer-overview-grid{
  display:grid;gap:var(--sp-4)
}
.stats{grid-template-columns:repeat(5,minmax(0,1fr));margin-bottom:var(--sp-4)}
.stats-grid{grid-template-columns:repeat(4,minmax(0,1fr))}
.diagnosis-metrics,.highlight-grid,.workflow-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
.skill-grid{grid-template-columns:repeat(4,minmax(0,1fr))}
.layout-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
.layout-grid.three,.drawer-overview-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
.drawer-overview-grid.two-columns{grid-template-columns:repeat(2,minmax(0,1fr))}

.stat-card small,.stat small,.metric-card small{display:block;margin-top:var(--sp-2);color:var(--text-faint);font-size:var(--fs-xs)}
.stat-card.is-clickable,.skill-card,.diag-list-row,.pending-list button,.text-btn,.rail-link{cursor:pointer}
.stat-card.is-clickable:hover,.skill-card:hover,.workflow-card:hover,.agent-card:hover,.highlight-card:hover{
  border-color:var(--border-accent);background:var(--surface-2);transform:translateY(-1px)
}

.group-card,.diagnosis-section,.facts-panel,.boss-conclusion,.detail-block,.review-reasons,
.judgement-card,.workflow-card,.skill-card,.drawer-section,.workflow-detail-hero,.team-map,
.methodology-banner,.kanban-flow-panel,.agent-flow-panel,.workflow-handoff{
  background:var(--surface-1);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-1)
}
.group-card,.diagnosis-section,.kanban-flow-panel,.agent-flow-panel{overflow:hidden}
.group-head,.section-title,.drawer-section-title,.highlight-head,.detail-head,.card-head{
  display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-3)
}
.section-title,.group-head{padding:var(--sp-5) var(--sp-6);border-bottom:1px solid var(--border);background:var(--surface-2)}
.section-title h2,.group-head h2,.drawer-section-title h3{margin:0;font-size:var(--fs-lg)}
.section-title p,.section-title small,.group-head p,.drawer-section-title p{margin:var(--sp-1) 0 0;color:var(--text-dim);font-size:var(--fs-sm)}
.section-title>span{width:3px;align-self:stretch;border-radius:var(--r-pill);background:var(--grad)}

.diagnosis-command-grid{margin-top:var(--sp-5)}
.diagnosis-command-main,.agent-command-main,.admin-main,.personal-main,.detail-main{display:grid;gap:var(--sp-5);min-width:0}
.diagnosis-command-rail,.agent-command-rail,.admin-rail,.personal-rail,.detail-action-rail,.project-rail{display:grid;gap:var(--sp-4);min-width:0}
.diagnosis-hero,.hero,.workflow-detail-hero,.detail-hero,.command-hero,.process-hero{
  display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-5);
  padding:var(--sp-6);background:var(--surface-1);border:1px solid var(--border);
  border-radius:var(--r-lg);box-shadow:var(--shadow-1)
}
.diagnosis-hero h2,.hero h2,.detail-hero h2{font-size:var(--fs-xl);margin:0}
.diagnosis-hero p,.hero p,.detail-hero p{margin:var(--sp-2) 0 0;color:var(--text-dim);line-height:1.7}
.diagnosis-section.compact,.rail-card{padding:var(--sp-5)}
.rail-card h3,.drawer-section h3{margin:0 0 var(--sp-3);font-size:var(--fs-md)}
.clean-list{margin:0;padding-left:18px;color:var(--text-dim)}
.clean-list li+li{margin-top:var(--sp-2)}
.diagnosis-chips,.chips,.diag-badges,.risk-tags,.rail-actions,.rail-link-list{display:flex;flex-wrap:wrap;gap:var(--sp-2)}

.diag-badge,.chip,.workflow-status{
  display:inline-flex;align-items:center;min-height:24px;padding:3px 9px;border-radius:var(--r-pill);
  background:var(--surface-2);border:1px solid var(--border);color:var(--text-dim);font-size:var(--fs-xs);font-weight:500
}
.diag-badge.green,.diag-badge.teal{border-color:color-mix(in srgb,var(--success) 36%,transparent);background:var(--success-bg);color:var(--success)}
.diag-badge.amber{border-color:color-mix(in srgb,var(--warning) 36%,transparent);background:var(--warning-bg);color:var(--warning)}
.diag-badge.red{border-color:color-mix(in srgb,var(--danger) 36%,transparent);background:var(--danger-bg);color:var(--danger)}
.diag-badge.purple{border-color:var(--border-accent);background:var(--info-bg);color:var(--info)}

.table-wrap,.jb-table-wrap{max-width:100%;overflow:auto}
table{min-width:960px}
.summary-table,.diagnosis-table,.candidate-table,.updates-table,.full-table{font-size:var(--fs-sm)}
.product-cell{font-weight:600;color:var(--text)}
.metric-cell{display:grid;gap:var(--sp-1)}
.table-legend{display:flex;gap:var(--sp-4);padding:var(--sp-4) var(--sp-6);color:var(--text-dim);font-size:var(--fs-sm)}
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;background:var(--text-faint)}
.dot.teal{background:var(--success)}.dot.amber{background:var(--warning)}.dot.red{background:var(--danger)}

.agent-card,.workflow-card,.skill-card,.highlight-card,.task-card,.metric-card,.risk-item,.mini-item{
  padding:var(--sp-4);border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface-2);box-shadow:var(--shadow-1)
}
.role-top,.role-meta,.skill-foot,.chart-label,.mini-item{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3)}
.role-icon,.skill-flow-index{
  display:grid;place-items:center;flex-shrink:0;width:36px;height:36px;border-radius:var(--r-md);
  background:var(--grad);color:var(--text-on-accent);font-family:var(--font-display);font-weight:700
}
.role-icon.role-boss{background:var(--info);color:var(--text-on-accent)}
.role-icon.role-media{background:color-mix(in srgb,var(--info) 45%,var(--warning));color:var(--text-on-accent)}
.role-icon.role-growth{background:var(--success);color:var(--text-on-accent)}
.role-icon.role-product{background:var(--warning);color:var(--text-on-accent)}
.role-icon.role-admin{background:color-mix(in srgb,var(--info) 55%,var(--danger));color:var(--text-on-accent)}
.role-desc,.workflow-card p,.skill-card p,.drawer-section p,.drawer-section pre{color:var(--text-dim);line-height:1.7}
.team-map{position:relative;overflow:hidden;padding:var(--sp-6)}
.team-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--sp-4);margin-top:var(--sp-8)}
.boss-node{display:flex;justify-content:center}.boss-node .agent-card{max-width:320px}
.team-lines{position:absolute;inset:var(--sp-4);width:calc(100% - var(--sp-8));height:calc(100% - var(--sp-8));pointer-events:none;opacity:.55}
.team-lines path,.mini-flow-edge,.diag-edge,.edu-flow-edge{fill:none;stroke:var(--border-strong);stroke-width:2}
.handoff-line,.suggested-line{stroke-dasharray:6 5}
.mini-flow-wrap,.kanban-flow-scroll{overflow:auto}

.drawer{
  position:fixed;inset:0 0 0 auto;z-index:180;width:min(1080px,96vw);height:100vh;
  overflow:auto;transform:translateX(105%);background:var(--surface-1);box-shadow:var(--shadow-pop);
  transition:transform var(--t)
}
.drawer.open{transform:translateX(0)}
.scrim{position:fixed;inset:0;z-index:170;display:none;background:var(--overlay);backdrop-filter:blur(4px)}
.scrim.open{display:block}
.drawer-head{position:sticky;top:0;z-index:2;display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);padding:var(--sp-5);border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--surface-1) 94%,transparent);backdrop-filter:blur(14px)}
.drawer-head h2{font-size:var(--fs-xl)}.drawer-head h2,.drawer-head p{margin:0}.drawer-head p{color:var(--text-dim);font-size:var(--fs-sm)}
.drawer-body{display:grid;gap:var(--sp-4);padding:var(--sp-5)}
.close{width:36px;height:36px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface-2);color:var(--text);cursor:pointer}
.full-markdown{display:none;max-height:480px;overflow:auto;margin-top:var(--sp-3);font-family:var(--font-mono);font-size:var(--fs-xs);line-height:1.65;white-space:pre-wrap;color:var(--text);background:var(--surface-2);padding:var(--sp-4);border-radius:var(--r-md)}
.full-markdown.open{display:block}

.skill-flowchart{display:grid;gap:0}
.skill-flow-row{position:relative;display:grid;grid-template-columns:52px minmax(0,1fr);gap:var(--sp-3);padding-bottom:var(--sp-4)}
.skill-flow-row:not(:last-child)::after{content:"";position:absolute;top:42px;bottom:0;left:25px;width:2px;background:var(--border-strong)}
.skill-flow-card{position:relative;padding:var(--sp-4);border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface-2)}
.skill-flow-card header{display:flex;justify-content:space-between;gap:var(--sp-3)}
.skill-flow-card h4,.skill-flow-card p{margin:0}.skill-flow-card p{margin-top:var(--sp-2);color:var(--text-dim)}
.skill-flow-card header span{font-size:var(--fs-xs);color:var(--text-dim)}
.skill-flow-row.start .skill-flow-index,.skill-flow-row.end .skill-flow-index{border:1px solid color-mix(in srgb,var(--success) 38%,transparent);background:var(--success-bg);color:var(--success)}
.skill-flow-row.start .skill-flow-card,.skill-flow-row.end .skill-flow-card{border-color:color-mix(in srgb,var(--success) 26%,var(--border));background:color-mix(in srgb,var(--success-bg) 42%,var(--surface-2))}
.skill-flow-row.stage .skill-flow-index{border:1px solid var(--border-accent);background:var(--info-bg);color:var(--info)}
.skill-flow-row.more .skill-flow-index{border:1px solid color-mix(in srgb,var(--warning) 38%,transparent);background:var(--warning-bg);color:var(--warning)}

.chart-list,.status-stack,.task-grid{display:grid;gap:var(--sp-3)}
.chart-track{height:8px;border-radius:var(--r-pill);background:var(--surface-3);overflow:hidden}
.chart-track i{display:block;width:var(--bar-value,0%);height:100%;border-radius:inherit;background:var(--grad)}
.status-stack>div,.task-grid>div{display:flex;justify-content:space-between;gap:var(--sp-3);padding:var(--sp-3);border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface-2)}
.filter-row{display:grid;grid-template-columns:minmax(220px,1.3fr) repeat(2,minmax(140px,.7fr));gap:var(--sp-3);margin-bottom:var(--sp-4)}
.card{padding:var(--sp-5)}
.card h3{display:block;padding:0;border:0;margin:0 0 var(--sp-3);font-size:var(--fs-md)}
.card p{padding:0;margin:0;color:var(--text-dim)}
.card-head{margin-bottom:var(--sp-4)}
.methodology-banner{display:flex;align-items:flex-start;gap:var(--sp-3);padding:var(--sp-5);line-height:1.8}
.method-icon,.info-tip{
  display:inline-grid;place-items:center;flex:0 0 auto;width:22px;height:22px;border-radius:50%;
  border:1px solid var(--border-accent);background:var(--info-bg);color:var(--info);
  font-family:var(--font-mono);font-size:var(--fs-xs);font-weight:700
}
.tooltip-panel{display:none}
.info-tip:hover .tooltip-panel,.info-tip:focus .tooltip-panel{
  display:block;position:absolute;z-index:220;max-width:280px;padding:var(--sp-3);
  border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface-3);
  color:var(--text);box-shadow:var(--shadow-pop);line-height:1.6
}
.role-top h3,.workflow-card h3,.skill-card h3{word-break:keep-all;line-height:1.35}
.agent-card .role-top{align-items:flex-start}
.team-row .agent-card{min-width:0}
.team-row .role-top{display:grid;grid-template-columns:36px minmax(0,1fr)}
.team-row .role-top h3{font-size:var(--fs-md)}

/* Compatibility for pre-shell OPC and Agent feature components. */
.section-pad{padding:var(--sp-5)}
.group{display:grid;gap:var(--sp-3);margin-top:var(--sp-5)}
.group-title{display:flex;align-items:center;gap:var(--sp-2);margin:0;color:var(--text);font-size:var(--fs-md)}
.group-title span{color:var(--text-dim);font-size:var(--fs-xs);font-weight:500}
.legend{display:flex;align-items:center;gap:var(--sp-3);flex-wrap:wrap;color:var(--text-dim);font-size:var(--fs-xs)}
.legend i,.status-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;background:var(--success)}
.legend i.suggested{background:var(--warning)}
.legend i.handoff{background:var(--info)}
.status-dot{width:7px;height:7px;background:var(--info)}
.shared-note{margin:var(--sp-4) 0;padding:var(--sp-4);border:1px solid var(--border-accent);border-radius:var(--r-md);background:var(--info-bg);color:var(--text-dim);line-height:1.7}
.flowchart-section{padding:var(--sp-5);background:linear-gradient(180deg,var(--surface-1),var(--surface-2))}
.workflow-source{margin-top:var(--sp-4);padding-top:var(--sp-3);border-top:1px solid var(--border)}
.workflow-source summary{cursor:pointer;color:var(--info);font-size:var(--fs-sm);font-weight:600}
.workflow-source pre{max-height:360px;overflow:auto;margin-top:var(--sp-3);padding:var(--sp-4);border-radius:var(--r-md);background:var(--surface-2)}
.workflow-owner{display:inline-flex;width:max-content;margin:var(--sp-2) 0 0;padding:3px 8px;border-radius:var(--r-pill);background:var(--info-bg);color:var(--info);font-size:var(--fs-xs);font-weight:600}
.workflow-flowchart .skill-flow-row.suggested .skill-flow-index{background:var(--warning-bg);color:var(--warning);border-color:color-mix(in srgb,var(--warning) 42%,transparent)}
.workflow-flowchart .skill-flow-row.suggested .skill-flow-card{border-color:color-mix(in srgb,var(--warning) 28%,var(--border));background:color-mix(in srgb,var(--warning-bg) 45%,var(--surface-2))}
.mini-flow-svg{display:block;min-width:100%;height:auto}
.mini-flow-node rect:first-of-type{fill:var(--surface-2);stroke:var(--border)}
.mini-flow-node text{fill:var(--text);font-family:var(--font-sans);font-size:12px;font-weight:600}
.mini-flow-node.start rect:first-of-type{fill:var(--info-bg);stroke:var(--border-accent)}
.mini-flow-node.end rect:first-of-type{fill:var(--success-bg);stroke:color-mix(in srgb,var(--success) 34%,var(--border))}
.mini-node-strip{fill:var(--info)}
.mini-flow-node.end .mini-node-strip{fill:var(--success)}
.mini-flow-arrow,.flow-arrow{fill:var(--border-strong)}

.diagnosis-columns,.judgement-grid,.detail-grid-two,.update-highlight-grid,.change-pair{display:grid;gap:var(--sp-4)}
.diagnosis-columns,.detail-grid-two{grid-template-columns:repeat(2,minmax(0,1fr))}
.judgement-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
.diag-list-row,.pending-list button{
  width:100%;display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-3);
  padding:var(--sp-3);border:1px solid var(--border);border-radius:var(--r-md);
  background:var(--surface-2);color:var(--text);text-align:left
}
.diag-list-row+ .diag-list-row,.pending-list button+button{margin-top:var(--sp-2)}
.diag-list-row span,.pending-list small{color:var(--text-dim);font-size:var(--fs-xs)}
.pending-list{padding:var(--sp-5);display:grid;gap:var(--sp-2)}
.pending-list button span{display:grid;place-items:center;flex:0 0 auto;width:24px;height:24px;border-radius:50%;background:var(--warning-bg);color:var(--warning);font-weight:700}
.compact-empty,.pad-inline{padding:var(--sp-4)}
.highlight-card{display:grid;gap:var(--sp-3)}
.highlight-card footer{display:flex;align-items:flex-start;gap:var(--sp-2);padding-top:var(--sp-3);border-top:1px solid var(--border);color:var(--text-dim);font-size:var(--fs-sm)}
.highlight-card footer span{color:var(--text-faint);font-size:var(--fs-xs)}
.facts-panel,.boss-conclusion,.detail-block,.review-reasons,.judgement-card{padding:var(--sp-5)}
.facts-panel>div{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--sp-3);margin-top:var(--sp-4)}
.facts-panel article{padding:var(--sp-3);border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface-2)}
.facts-panel span,.boss-conclusion span,.rail-summary span{display:block;color:var(--text-faint);font-size:var(--fs-xs);font-weight:600}
.facts-panel strong,.rail-summary strong{display:block;margin-top:var(--sp-1);font-size:var(--fs-lg)}
.boss-conclusion p,.detail-block p{margin:var(--sp-2) 0 0;color:var(--text-dim);line-height:1.75}
.detail-block ul,.review-reasons ul{margin:var(--sp-3) 0 0;padding-left:18px;color:var(--text-dim);line-height:1.8}
.copyable{border-color:color-mix(in srgb,var(--success) 24%,var(--border))}
.not-copyable{border-color:color-mix(in srgb,var(--danger) 20%,var(--border))}
.criteria-list{display:grid;gap:var(--sp-2);margin:var(--sp-4) 0 0;padding:0;list-style:none}
.criteria-list li{display:flex;align-items:flex-start;gap:var(--sp-2);color:var(--text-dim);font-size:var(--fs-sm);line-height:1.55}
.criteria-list li span{display:grid;place-items:center;flex:0 0 auto;width:20px;height:20px;border-radius:50%;background:var(--surface-3);color:var(--text-faint);font-size:11px;font-weight:700}
.criteria-list .hit span{background:var(--success-bg);color:var(--success)}
.criteria-list .pending span{background:var(--warning-bg);color:var(--warning)}
.criteria-list .miss{opacity:.72}
.criteria-list .miss span{background:var(--danger-bg);color:var(--danger)}
.comparison-strip{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:var(--sp-3);padding:var(--sp-4) var(--sp-6);border-bottom:1px solid var(--border);background:var(--surface-1)}
.comparison-strip article{position:relative;overflow:hidden;padding:var(--sp-3);border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface-2)}
.comparison-strip article::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--grad)}
.comparison-strip span,.comparison-strip small{display:block;color:var(--text-dim);font-size:var(--fs-xs)}
.comparison-strip strong{display:block;margin:var(--sp-1) 0;color:var(--text);font-size:var(--fs-lg)}
.diagnosis-row .product-cell{position:relative;padding-left:18px}
.diagnosis-row .product-cell::before{content:"";position:absolute;left:8px;top:12px;bottom:12px;width:3px;border-radius:var(--r-pill);background:var(--border-strong)}
.diagnosis-row.row-reference .product-cell::before{background:var(--info)}
.diagnosis-row.row-fit .product-cell::before{background:var(--success)}
.diagnosis-row.row-pending .product-cell::before{background:var(--warning)}
.diagnosis-row.row-risk .product-cell::before{background:var(--danger)}
.back-link{display:inline-flex;align-items:center;gap:var(--sp-2);min-height:34px;margin-bottom:var(--sp-4);border:1px solid var(--border);border-radius:var(--r-pill);padding:0 var(--sp-3);background:var(--surface-2);color:var(--text-dim);font-size:var(--fs-sm);cursor:pointer}
.back-link:hover{border-color:var(--border-accent);color:var(--text)}
.breadcrumb{margin:0 0 var(--sp-2);color:var(--text-faint);font-size:var(--fs-xs)}
.rail-summary{gap:var(--sp-1)}
.rail-actions{display:grid;gap:var(--sp-3)}
.rail-actions article{display:flex;gap:var(--sp-3);padding:var(--sp-3);border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface-2)}
.rail-actions b{display:grid;place-items:center;flex:0 0 auto;width:24px;height:24px;border-radius:50%;background:var(--info-bg);color:var(--info);font-size:var(--fs-xs)}
.rail-actions small{display:block;margin-top:2px;color:var(--text-faint)}
.update-highlight-grid{grid-template-columns:repeat(3,minmax(0,1fr));padding:var(--sp-5)}
.update-highlight-card,.update-row-card{padding:var(--sp-4);border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface-2)}
.update-highlight-card header,.update-item-head,.update-row-meta{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3)}
.update-highlight-card p,.update-row-card p,.update-item p{color:var(--text-dim);line-height:1.65}
.updates-overview,.update-case-groups,.updates-list{display:grid;gap:var(--sp-4)}
.update-case-groups{padding:var(--sp-5)}
.update-case-group{border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface-2);overflow:hidden}
.update-case-group summary{cursor:pointer;padding:var(--sp-4);font-weight:600}
.update-case-group summary small{display:block;margin-top:var(--sp-1);color:var(--text-dim);font-weight:400}
.update-case-list{display:grid;gap:var(--sp-3);padding:0 var(--sp-4) var(--sp-4)}
.change-pair{grid-template-columns:repeat(2,minmax(0,1fr));margin-top:var(--sp-3)}
.change-pair div{padding:var(--sp-3);border-radius:var(--r-md);background:var(--surface-1);border:1px solid var(--border)}
.change-pair span{display:block;margin-bottom:var(--sp-1);color:var(--text-faint);font-size:var(--fs-xs)}
.diff-old{color:var(--text-dim);text-decoration:line-through;text-decoration-color:var(--danger)}
.diff-new{color:var(--success)}
.diagnosis-flow-svg{display:block;min-width:960px;height:auto}
.diagnosis-flow-svg text{fill:var(--text);font-family:var(--font-sans);font-size:13px;font-weight:600}
.diagnosis-flow-svg .node-meta{fill:var(--text-dim);font-size:11px;font-weight:500}
.diagnosis-flow-svg .diag-node rect,.diagnosis-flow-svg .diag-node polygon{fill:var(--surface-2);stroke:var(--border)}
.diagnosis-flow-svg .diag-node.start rect{fill:var(--info-bg);stroke:var(--border-accent)}
.diagnosis-flow-svg .diag-node.end rect{fill:var(--success-bg);stroke:color-mix(in srgb,var(--success) 34%,var(--border))}
.diagnosis-flow-svg .diag-node.decision polygon{fill:var(--warning-bg);stroke:color-mix(in srgb,var(--warning) 34%,var(--border))}
.diagnosis-flow-svg .diag-edge.active{stroke:var(--info)}
.node-strip,.node-line{stroke:var(--info);fill:var(--info)}
.node-strip.done,.node-line.done{stroke:var(--success);fill:var(--success)}
.node-dot.doing{fill:var(--warning)}

@media(max-width:1180px){
  .stats,.stats-grid,.diagnosis-metrics,.highlight-grid,.workflow-grid,.skill-grid,.team-row,.layout-grid,.layout-grid.three,.judgement-grid,.update-highlight-grid,.comparison-strip{grid-template-columns:repeat(2,minmax(0,1fr))}
  .command-grid,.project-workbench,.detail-workbench,.agent-command-grid,.diagnosis-command-grid,.admin-workbench,.personal-workbench{grid-template-columns:1fr}
  .facts-panel>div{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:920px){
  .jb-sidebar{width:min(82vw,280px);max-width:min(82vw,280px)}
  .jb-app.is-collapsed{grid-template-columns:1fr}
  .jb-app.is-collapsed .jb-sidebar{width:min(82vw,280px);max-width:min(82vw,280px);align-items:stretch}
  .jb-app.is-collapsed .jb-sidebar__brand b,
  .jb-app.is-collapsed .jb-sidebar__brand small,
  .jb-app.is-collapsed .jb-nav__label,
  .jb-app.is-collapsed .jb-nav__item span:not(.jb-nav__icon):not(.shell-nav-icon),
  .jb-app.is-collapsed .shell-nav-text,
  .jb-app.is-collapsed .sidebar-brand-text{display:inline}
  .jb-app.is-collapsed .jb-nav__item{justify-content:flex-start;padding:10px 12px}
  .stats,.stats-grid,.diagnosis-metrics,.highlight-grid,.workflow-grid,.skill-grid,.team-row,.layout-grid,.layout-grid.three,.drawer-overview-grid,.drawer-overview-grid.two-columns,.diagnosis-columns,.judgement-grid,.detail-grid-two,.update-highlight-grid,.change-pair,.comparison-strip,.facts-panel>div{grid-template-columns:1fr}
  .controls{position:static;grid-template-columns:1fr}
  .diagnosis-hero,.hero,.workflow-detail-hero,.detail-hero,.command-hero,.process-hero{display:grid}
  .drawer{width:100vw}
  table{min-width:780px}
}
