/* ==========================================================================
   增长工具台 —— 控制台外壳样式（sidebar / topbar / tabstrip / 面板 / 表格 / 弹窗…）
   原先是 index.html 里的内联 <style>，抽出来给占位页共用，避免两边慢慢长歪。
   ========================================================================== */

  :root{
    color-scheme: light;
    --brand:#1677ff; --brand-hover:#4096ff; --brand-active:#0958d9;
    --brand-bg:#e8f2ff; --brand-bg-2:#f5f9ff;
    --nav:#1e2a3a; --nav-text:#c2cbd8;
    --bg:#f0f2f5; --surface:#fff; --surface-2:#fafbfc; --surface-3:#f5f6f8;
    --line:#e6e9ee; --line-2:#f1f3f6;
    --text:#1f2329; --text-2:#5a6472; --text-3:#8a94a6;
    --ok:#389e0d; --ok-bg:#f6ffed; --ok-bd:#b7eb8f;
    --wait:#c26a00; --wait-bg:#fff8e6; --wait-bd:#ffd591;
    --off:#7d8794; --off-bg:#f4f5f7; --off-bd:#e6e9ee;
    --danger:#d92d20; --danger-bg:#fff1f0; --danger-bd:#ffccc7;
    --r:6px;
    --sh-1:0 1px 2px rgba(15,23,42,.05);
    --sh-2:0 8px 24px rgba(15,23,42,.10), 0 2px 6px rgba(15,23,42,.06);
    --font:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Helvetica Neue",Arial,sans-serif;
  }
  *{box-sizing:border-box}
  [hidden]{display:none!important}
  html{background:var(--bg)}
  body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font);font-size:13px;line-height:1.5;-webkit-font-smoothing:antialiased}
  button,input,select{font:inherit;color:inherit}
  button{border:0;background:none;cursor:pointer;padding:0}
  :focus-visible{outline:2px solid var(--brand);outline-offset:1px;border-radius:3px}
  .ico{width:16px;height:16px;flex:none;display:block}
  .ico-sm{width:14px;height:14px}

  /* ---------- shell ---------- */
  .shell{display:flex;min-height:100dvh;align-items:flex-start}
  .sidebar{position:sticky;top:0;flex:none;width:200px;height:100dvh;display:flex;flex-direction:column;overflow-y:auto;background:var(--nav);color:var(--nav-text)}
  .brand{display:flex;align-items:center;gap:9px;height:56px;padding:0 16px;flex:none;color:#fff}
  .brand-mark{width:26px;height:26px;flex:none;border-radius:7px;display:grid;place-items:center;background:linear-gradient(140deg,#4d9bff,#1677ff 55%,#0b5fd0);box-shadow:inset 0 1px 0 rgba(255,255,255,.35)}
  .brand-mark svg{width:15px;height:15px}
  .brand-name{font-size:15px;font-weight:600;letter-spacing:.3px}
  .nav{padding:6px 0 18px;display:flex;flex-direction:column;gap:1px}
  .nav-group{display:flex;align-items:center;gap:9px;width:100%;height:40px;padding:0 16px;color:var(--nav-text);font-size:13px;text-align:left}
  .nav-group:hover{background:rgba(255,255,255,.06);color:#fff}
  .nav-group .label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .nav-group .chev{width:12px;height:12px;flex:none;opacity:.55;transition:transform .16s}
  .nav-group[aria-expanded="false"] .chev{transform:rotate(-90deg)}
  .nav-sub{display:flex;flex-direction:column;gap:1px;padding:1px 0 3px}
  .nav-sub[hidden]{display:none}
  .nav-item{display:block;height:36px;line-height:36px;padding:0 16px 0 41px;color:var(--nav-text);font-size:13px;text-align:left;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .nav-item:hover{background:rgba(255,255,255,.06);color:#fff}
  .nav-item[aria-current="page"]{background:var(--brand);color:#fff;font-weight:500}
  .shell.nav-collapsed .sidebar{display:none}
  .main{flex:1;min-width:0;display:flex;flex-direction:column}

  /* ---------- chrome ---------- */
  .topbar{height:56px;flex:none;display:flex;align-items:center;gap:12px;padding:0 16px;background:var(--surface);border-bottom:1px solid var(--line)}
  .icon-btn{width:30px;height:30px;flex:none;border-radius:var(--r);display:grid;place-items:center;color:var(--text-2)}
  .icon-btn:hover{background:var(--surface-3);color:var(--text)}
  .crumb{display:flex;align-items:center;gap:7px;font-size:14px;min-width:0}
  .crumb .sep{color:var(--text-3)}
  .crumb .cur{color:var(--text);font-weight:500}
  .crumb .up{color:var(--text-2);white-space:nowrap}
  .top-right{margin-left:auto;display:flex;align-items:center;gap:6px}
  .org{display:flex;align-items:center;gap:6px;height:30px;padding:0 10px;border-radius:var(--r);color:var(--text-2);font-size:13px;white-space:nowrap}
  .org:hover{background:var(--surface-3)}
  .avatar{width:28px;height:28px;flex:none;border-radius:50%;display:grid;place-items:center;background:linear-gradient(140deg,#ffd666,#faad14);color:#7a4c00;font-size:11px;font-weight:600;letter-spacing:-.2px}
  .tabstrip{height:40px;flex:none;display:flex;align-items:stretch;gap:2px;padding:0 12px;background:var(--surface);border-bottom:1px solid var(--line)}
  .doc-tab{display:flex;align-items:center;gap:7px;padding:0 12px;font-size:13px;color:var(--text-2);border-bottom:2px solid transparent;position:relative;top:1px}
  .doc-tab:hover{color:var(--text)}
  .doc-tab[aria-selected="true"]{color:var(--brand);border-bottom-color:var(--brand);font-weight:500}
  .doc-tab .x{width:14px;height:14px;opacity:.5}
  .tabstrip-right{margin-left:auto;display:flex;align-items:center;gap:2px;padding:5px 0}

  /* ---------- page ---------- */
  /* 底部多留 48px：让翻页器不被右下角的 demo 切换器压住 */
  .content{padding:14px 20px 76px}
  .page-tabs{display:flex;gap:24px;border-bottom:1px solid var(--line);margin-bottom:14px}
  .page-tab{padding:0 1px 11px;font-size:14px;color:var(--text-2);border-bottom:2px solid transparent;margin-bottom:-1px}
  .page-tab:hover{color:var(--text)}
  .page-tab[aria-selected="true"]{color:var(--brand);font-weight:600;border-bottom-color:var(--brand)}

  /* ---------- toolbar ---------- */
  .panel{background:var(--surface);border-radius:8px;box-shadow:var(--sh-1);overflow:hidden}
  .toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:12px 16px;border-bottom:1px solid var(--line-2)}
  .btn{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 13px;border-radius:var(--r);font-size:13px;white-space:nowrap;border:1px solid transparent}
  .btn-primary{background:var(--brand);color:#fff;font-weight:500;box-shadow:0 1px 2px rgba(22,119,255,.28)}
  .btn-primary:hover{background:var(--brand-hover)}
  .btn-primary:active{background:var(--brand-active)}
  .btn-ghost{color:var(--text-2)}
  .btn-ghost:hover{color:var(--brand);background:var(--brand-bg)}
  .btn-default{border-color:var(--line);color:var(--text-2);background:var(--surface)}
  .btn-default:hover{border-color:var(--brand);color:var(--brand)}
  .btn-danger{background:var(--danger);color:#fff;font-weight:500}
  .btn-danger:hover{background:#b42318}
  .field{position:relative;display:flex;align-items:center}
  .field .ico{position:absolute;left:9px;color:var(--text-3);pointer-events:none}
  .search{width:280px;height:32px;padding:0 30px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface);outline:none;font-size:13px}
  .search::placeholder{color:var(--text-3)}
  .search::-webkit-search-cancel-button,.search::-webkit-search-decoration{-webkit-appearance:none;appearance:none;display:none}
  .search:hover{border-color:#c9d2de}
  .search:focus{border-color:var(--brand);box-shadow:0 0 0 2px rgba(22,119,255,.12)}
  .search-clear{position:absolute;right:6px;width:18px;height:18px;border-radius:50%;display:grid;place-items:center;background:var(--surface-3);color:var(--text-3)}
  .search-clear:hover{background:#e4e8ee;color:var(--text-2)}
  .select{height:32px;padding:0 28px 0 11px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface);font-size:13px;color:var(--text);cursor:pointer;appearance:none;-webkit-appearance:none;outline:none;
    background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%238a94a6' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
    background-repeat:no-repeat;background-position:right 8px center}
  .select:hover{border-color:#c9d2de}
  .select:focus{border-color:var(--brand);box-shadow:0 0 0 2px rgba(22,119,255,.12)}
  .select-status{width:132px}
  /* 创建人筛选用可搜索下拉：创建人数量增长后，纯下拉会变得难以定位 */
  .combo{position:relative}
  .combo-btn{display:flex;align-items:center;width:152px;text-align:left}
  .combo-btn .combo-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .combo-btn[aria-expanded="true"]{border-color:var(--brand);box-shadow:0 0 0 2px rgba(22,119,255,.12)}
  /* 显隐用 display 控制，不用 hidden 属性 */
  .combo-pop{position:absolute;top:calc(100% + 4px);left:0;z-index:20;display:none;width:214px;background:var(--surface);border:1px solid var(--line-2);border-radius:8px;box-shadow:var(--sh-2);overflow:hidden}
  .combo-pop.open{display:block}
  .combo-search{display:flex;align-items:center;gap:7px;padding:7px 10px;border-bottom:1px solid var(--line-2)}
  .combo-search .ico{flex:none;color:var(--text-3)}
  .combo-search input{flex:1;min-width:0;height:24px;border:0;outline:none;background:transparent;font:inherit;font-size:13px;color:var(--text)}
  .combo-list{max-height:238px;overflow-y:auto;padding:4px}
  .combo-opt{display:flex;align-items:center;gap:8px;width:100%;height:32px;padding:0 8px;border-radius:5px;font-size:13px;color:var(--text);text-align:left}
  .combo-opt:hover,.combo-opt.active{background:var(--brand-bg-2)}
  .combo-opt .tick{flex:none;color:var(--brand);visibility:hidden}
  .combo-opt .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .combo-opt .ct{flex:none;font-size:12px;color:var(--text-3);font-variant-numeric:tabular-nums}
  .combo-opt[aria-selected="true"] .tick{visibility:visible}
  .combo-opt[aria-selected="true"] .nm{color:var(--brand);font-weight:500}
  .combo-empty{padding:16px 8px;text-align:center;font-size:12.5px;color:var(--text-3)}
  .toolbar-note{margin-left:auto;color:var(--text-3);font-size:12px;white-space:nowrap}

  /* ---------- table ---------- */
  .table-wrap{overflow-x:auto}
  table{width:100%;min-width:1060px;border-collapse:collapse;table-layout:fixed}
  col.c-name{width:auto;min-width:230px}
  col.c-code{width:118px}
  col.c-status{width:100px}
  col.c-owner{width:104px}
  col.c-time{width:152px}
  col.c-ops{width:196px}
  thead th{background:var(--surface-2);color:var(--text-2);font-weight:500;font-size:12px;text-align:left;padding:0 12px;height:42px;white-space:nowrap;border-bottom:1px solid var(--line)}
  thead th:first-child,tbody td:first-child{padding-left:16px}
  thead th:last-child,tbody td:last-child{padding-right:16px}
  .th-sort{display:inline-flex;align-items:center;gap:2px;height:42px;padding:0 4px;margin:0 -4px;color:inherit;font:inherit;font-weight:inherit;border-radius:4px}
  .th-sort:hover{color:var(--brand)}
  .caret{display:inline-flex;flex-direction:column;gap:2px;margin-left:3px}
  .caret i{display:block;width:0;height:0;border-left:3.5px solid transparent;border-right:3.5px solid transparent}
  .caret .up{border-bottom:4px solid #c4ccd8}
  .caret .down{border-top:4px solid #c4ccd8}
  th[data-dir="asc"] .caret .up{border-bottom-color:var(--brand)}
  th[data-dir="desc"] .caret .down{border-top-color:var(--brand)}
  th[data-dir] .th-sort{color:var(--brand)}
  tbody td{padding:0 12px;height:47px;border-bottom:1px solid var(--line-2);vertical-align:middle}
  tbody tr:last-child td{border-bottom:0}
  tbody tr:hover{background:var(--brand-bg-2)}
  .pname{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--brand);font-weight:500;text-align:left}
  .pname:hover{text-decoration:underline}
  .pcode{color:var(--text-2);font-variant-numeric:tabular-nums}
  .muted{color:var(--text-2);font-variant-numeric:tabular-nums;white-space:nowrap}
  .ellip{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .tag{display:inline-flex;align-items:center;gap:5px;height:22px;padding:0 8px;border:1px solid transparent;border-radius:4px;font-size:12px;line-height:1;white-space:nowrap}
  .tag::before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor;flex:none}
  .tag-running{color:var(--ok);background:var(--ok-bg);border-color:var(--ok-bd)}
  .tag-config{color:var(--wait);background:var(--wait-bg);border-color:var(--wait-bd)}
  .tag-ended{color:var(--off);background:var(--off-bg);border-color:var(--off-bd)}
  .ops{display:flex;align-items:center;gap:2px}
  .op{height:26px;padding:0 7px;border-radius:4px;font-size:13px;color:var(--text-2);white-space:nowrap}
  .op:hover{color:var(--brand);background:var(--brand-bg)}
  .op-more{width:26px;height:26px;border-radius:4px;display:grid;place-items:center;color:var(--text-3)}
  .op-more:hover,.op-more[aria-expanded="true"]{color:var(--brand);background:var(--brand-bg)}

  /* ---------- empty + pager ---------- */
  .empty{padding:64px 16px 68px;text-align:center}
  .empty .ico{width:38px;height:38px;margin:0 auto 12px;color:#c4ccd8}
  .empty h3{margin:0 0 5px;font-size:14px;font-weight:600}
  .empty p{margin:0 auto;max-width:420px;color:var(--text-3);font-size:13px;line-height:1.7}
  .empty .btn{margin-top:14px}
  .pager{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:11px 16px;border-top:1px solid var(--line-2);background:var(--surface)}
  .pager .total{color:var(--text-2);font-size:13px}
  .pager .right{margin-left:auto;display:flex;align-items:center;gap:8px}
  .select-size{width:106px;height:30px;font-size:13px;padding:0 26px 0 10px}
  .pages{display:flex;align-items:center;gap:4px}
  .pg{min-width:30px;height:30px;padding:0 7px;border:1px solid var(--line);border-radius:var(--r);display:grid;place-items:center;font-size:13px;color:var(--text-2);font-variant-numeric:tabular-nums;background:var(--surface)}
  .pg:hover:not(:disabled){border-color:var(--brand);color:var(--brand)}
  .pg[aria-current="page"]{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:500}
  .pg:disabled{color:#c4ccd8;cursor:not-allowed}
  .pg-gap{min-width:22px;text-align:center;color:var(--text-3)}

  /* ---------- template cards ---------- */
  /* 缩略图改为系统自动截图；在截图能力就绪前不放任何品牌图占位，改用紧凑卡片 */
  .tpl-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(248px,1fr));gap:12px}
  .tpl{background:var(--surface);border-radius:8px;box-shadow:var(--sh-1);overflow:hidden;display:flex;flex-direction:column}
  .tpl:hover{box-shadow:0 4px 14px rgba(15,23,42,.10)}
  .tpl-body{padding:13px 14px 12px;flex:1;display:flex;flex-direction:column;gap:5px}
  .tpl-name{margin:0;font-size:13.5px;font-weight:600}
  .tpl-desc{margin:0;font-size:12px;line-height:1.6;color:var(--text-3)}
  .tpl-ops{display:grid;grid-template-columns:1fr 1.4fr;border-top:1px solid var(--line-2)}
  .tpl-op{height:36px;display:flex;align-items:center;justify-content:center;gap:6px;font-size:13px;color:var(--text-2);border-left:1px solid var(--line-2)}
  .tpl-op:first-child{border-left:0}
  .tpl-op:hover{color:var(--brand);background:var(--brand-bg-2)}
  .tpl-op.primary{color:var(--brand);font-weight:500}
  /* 从空白创建：次级入口，视觉层级低于模板卡片 */
  .tpl-blank{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin:0 0 14px;font-size:13px;color:var(--text-2)}
  .tpl-blank button{color:var(--brand);font-size:13px}
  .tpl-blank button:hover{text-decoration:underline}

  /* ---------- menu, modal, toast ---------- */
  /* z-index 20：按 demo-nav.css 定下的层级契约，页面内的浮层（下拉菜单、底部购买条）
     一律 20，要待在右下角演示切换器（30）之下 —— 否则展开的菜单会盖住切换器，
     那个胶囊就从菜单边缘露出来一截，看着像渲染坏了。模态遮罩仍在其上（80/95）。 */
  .menu{position:fixed;z-index:20;min-width:152px;padding:4px;background:var(--surface);border-radius:8px;box-shadow:var(--sh-2);border:1px solid var(--line-2)}
  .menu[hidden]{display:none}
  .menu button{display:flex;align-items:center;gap:9px;width:100%;height:32px;padding:0 10px;border-radius:5px;font-size:13px;color:var(--text);text-align:left}
  .menu button:hover{background:var(--brand-bg-2)}
  .menu button .ico{color:var(--text-3)}
  .menu button:hover .ico{color:var(--brand)}
  .menu button.danger{color:var(--danger)}
  .menu button.danger .ico{color:var(--danger)}
  .menu button.danger:hover{background:var(--danger-bg)}
  .menu hr{border:0;border-top:1px solid var(--line-2);margin:4px 2px}
  .mask{position:fixed;z-index:80;inset:0;display:grid;place-items:center;padding:20px;background:rgba(15,23,42,.45)}
  .mask[hidden]{display:none}
  .dialog{width:100%;max-width:480px;background:var(--surface);border-radius:10px;box-shadow:0 20px 50px rgba(15,23,42,.28);padding:18px 22px 16px}
  .dialog-head{display:flex;align-items:center;gap:10px;margin-bottom:16px}
  .dialog-head h2{flex:1;min-width:0;margin:0;font-size:16px;font-weight:600;display:flex;align-items:center;gap:9px}
  .dialog-head h2 .ico{width:18px;height:18px}
  .dialog-close{width:28px;height:28px;flex:none;border-radius:var(--r);display:grid;place-items:center;color:var(--text-3)}
  .dialog-close:hover{background:var(--surface-3);color:var(--text)}
  .dialog p{margin:0;color:var(--text-2);font-size:13px;line-height:1.7}
  .dialog .name{color:var(--text);font-weight:500}
  /* 表单：标签右对齐 + 控件列，行距收紧 */
  .dlg-form{display:grid;gap:14px}
  .form-row{display:grid;grid-template-columns:92px 1fr;gap:12px;align-items:center}
  .form-label{color:var(--text-2);font-size:13px;text-align:right;line-height:1.4;white-space:nowrap}
  .form-label .req{color:var(--danger);font-style:normal;margin-right:3px}
  .form-ctrl{min-width:0}
  .input{width:100%;height:34px;padding:0 11px;border:1px solid var(--line);border-radius:var(--r);outline:none;font-size:13px;background:var(--surface)}
  .input::placeholder{color:var(--text-3)}
  .input:hover{border-color:#c9d2de}
  .input:focus{border-color:var(--brand);box-shadow:0 0 0 2px rgba(22,119,255,.12)}
  .range{display:flex;align-items:center;gap:8px;height:34px;padding:0 10px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface)}
  .range:hover{border-color:#c9d2de}
  .range:focus-within{border-color:var(--brand);box-shadow:0 0 0 2px rgba(22,119,255,.12)}
  .range input{flex:1;min-width:0;height:30px;border:0;outline:none;background:transparent;font-size:13px;color:var(--text)}
  .range .tilde{flex:none;color:var(--text-3)}
  .dialog-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:20px;padding-top:16px;border-top:1px solid var(--line-2)}
  .toast{position:fixed;z-index:90;left:50%;top:22px;transform:translateX(-50%);display:flex;align-items:center;gap:8px;max-width:calc(100vw - 32px);padding:9px 14px;border-radius:var(--r);background:#1f2937;color:#fff;font-size:13px;box-shadow:0 8px 24px rgba(15,23,42,.28)}
  .toast[hidden]{display:none}

  @media (max-width:1180px){ .toolbar-note{display:none} }
  @media (max-width:900px){
    body{padding-inline:16px}
    .sidebar{display:none}
    /* 底部留 76px，和桌面端 .content 的底内边距取同一个值。
       这里原本是 24px，而演示切换器固定在 bottom:20px、高 36px —— 滚到底时分页会和
       胶囊边缘正好贴在一起（实测净空 0），再多一点内容就会被盖住、点不到下一页。
       56px 只是「刚好不重叠」，76px 才和桌面端一样留出 20px 净空。 */
    .content{padding:12px 0 76px}
    .search{width:100%;min-width:180px}
    .field{flex:1 1 220px}
  }
  @media (prefers-reduced-motion:reduce){ *{transition:none!important;animation:none!important} }

/* ==========================================================================
   占位页：模块方案还没定，先明确标出「规划中」，并把待确认的问题写出来
   ========================================================================== */
.ph{padding:60px 24px 72px;display:flex;flex-direction:column;align-items:center;text-align:center}
.ph-badge{
  display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 11px;border-radius:999px;
  background:var(--brand-bg);color:var(--brand);font-size:12px;font-weight:600;letter-spacing:.02em;
}
.ph h2{margin:16px 0 0;font-size:21px;font-weight:600;color:var(--text)}
.ph-lead{margin:10px 0 0;max-width:46ch;font-size:13.5px;line-height:1.7;color:var(--text-2)}
.ph-list{
  margin:22px 0 0;padding:0;list-style:none;display:grid;gap:1px;
  width:100%;max-width:520px;text-align:left;
  border:1px solid var(--line-2);border-radius:10px;overflow:hidden;background:var(--line-2);
}
.ph-list li{
  padding:13px 16px;background:var(--surface);
  font-size:13px;line-height:1.6;color:var(--text-2);
}
.ph-list li b{display:block;margin-bottom:2px;font-weight:600;color:var(--text)}
.ph-note{
  margin:22px 0 0;max-width:520px;padding:13px 16px;border-radius:10px;
  background:var(--wait-bg);color:var(--wait);border:1px solid var(--wait-bd);
  font-size:12.5px;line-height:1.7;text-align:left;
}
.ph-note b{font-weight:600}
