@elitedcs/ghl-mcp 3.88.0 → 3.88.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.88.1: light or dark, your choice
4
+
5
+ The circle at the top right of the cockpit now opens your menu: your agency, connections, the Members Hub, and Appearance. Choose Light or Dark to keep that look whatever your computer is set to, or Auto to follow it. The choice is remembered on this computer and applied before the page appears, so it never flashes the other way.
6
+
7
+ The connection guides now say once, above the steps, when the steps have not yet been checked on a real screen, instead of repeating it on every step. The guides also use the spelling "license" throughout.
8
+
3
9
  ## 3.88.0: a calmer, cleaner cockpit, and Workflow Audit Pro
4
10
 
5
11
  Every cockpit screen has a new look: a navy sidebar, white cards, one accent colour and your computer's own fonts, so it reads like a finished product rather than a set of pages. Each screen opens with what it is for and what needs you, then the detail, and long lists show the first few with "Show all" for the rest. The text size control now scales the whole screen evenly from 18px up to 34px, and at large sizes the layout switches to a single column instead of squeezing. It works the same in dark mode and on a phone.
package/README.md CHANGED
@@ -897,7 +897,7 @@ Built by **[Elite DCs, LLC](https://elitedcs.com)** — a digital marketing and
897
897
 
898
898
  **Tech stack:** TypeScript, Node.js, esbuild, MCP SDK, Zod, GHL API v2, Firebase Auth
899
899
 
900
- **Version:** 3.88.0
900
+ **Version:** 3.88.1
901
901
 
902
902
  ---
903
903
 
package/dist/index.js CHANGED
@@ -29130,7 +29130,7 @@ var require_package = __commonJS({
29130
29130
  "package.json"(exports2, module2) {
29131
29131
  module2.exports = {
29132
29132
  name: "@elitedcs/ghl-mcp",
29133
- version: "3.88.0",
29133
+ version: "3.88.1",
29134
29134
  mcpName: "io.github.drjerryrelth/ghl-command",
29135
29135
  description: "GoHighLevel MCP Server for Claude. 250 tools \u2014 full CRM, automation, marketing control, account-wide workflow audit, live funnel-capture verification, and the only programmatic GHL workflow builder, now multi-tenant across client accounts.",
29136
29136
  main: "dist/index.js",
@@ -29272,7 +29272,7 @@ var init_report_css_generated = __esm({
29272
29272
  --font-mono: ui-monospace, 'SF Mono', Menlo, Consolas, monospace;
29273
29273
  }
29274
29274
  `;
29275
- DS_BUNDLE_CSS = '.cds-row{display:flex;flex-wrap:wrap;gap:var(--space-3);align-items:center}\n.cds-stack{display:grid;gap:var(--space-3)}\n.cds-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--space-4)}\n.cds-num{font-variant-numeric:tabular-nums}\n.cds-ring{display:inline-grid;justify-items:center;gap:var(--space-2);font-family:var(--font-display)}\n.cds-ring svg{display:block}\n.cds-ring .trk{fill:none;stroke:var(--border)}\n.cds-ring .arc{fill:none;stroke-linecap:round;transition:stroke-dashoffset 300ms}\n.cds-ring .letter{font-weight:700;letter-spacing:-0.02em}\n.cds-ring .out{fill:var(--muted);font-size:11px;font-variant-numeric:tabular-nums}\n.cds-ring .cap{font-family:var(--font-body);font-size:14px;color:var(--muted);text-align:center;max-width:220px}\n.cds-g-a{stroke:var(--grade-a);fill:var(--grade-a);color:var(--grade-a);background-color:var(--grade-a)}\n.cds-g-b{stroke:var(--grade-b);fill:var(--grade-b);color:var(--grade-b);background-color:var(--grade-b)}\n.cds-g-c{stroke:var(--grade-c);fill:var(--grade-c);color:var(--grade-c);background-color:var(--grade-c)}\n.cds-g-d{stroke:var(--grade-d);fill:var(--grade-d);color:var(--grade-d);background-color:var(--grade-d)}\n.cds-g-f{stroke:var(--grade-f);fill:var(--grade-f);color:var(--grade-f);background-color:var(--grade-f)}\n.cds-g-incomplete{stroke:var(--muted);fill:var(--muted);color:var(--muted)}\n.cds-ring .cds-g-a,.cds-ring .cds-g-b,.cds-ring .cds-g-c,.cds-ring .cds-g-d,.cds-ring .cds-g-f{background-color:transparent}\n.cds-ring text.cds-g-a,.cds-ring text.cds-g-b,.cds-ring text.cds-g-c,.cds-ring text.cds-g-d,.cds-ring text.cds-g-f{stroke:none}\n.cds-stat{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-lg);padding:14px var(--space-4);min-width:140px}\n.cds-stat .big{font-family:var(--font-display);font-weight:700;font-size:20px;line-height:26px;color:var(--text);font-variant-numeric:tabular-nums}\n.cds-stat .big.bad{color:var(--bad)}.cds-stat .big.warn{color:var(--warn)}.cds-stat .big.ok{color:var(--ok)}\n.cds-stat .lbl{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-top:var(--space-1);font-weight:600}\n.cds-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:var(--radius-pill);font-size:12px;font-weight:600;border:1px solid var(--border);color:var(--muted);background:var(--surface);font-family:var(--font-body)}\n.cds-chip.ok{color:var(--ok);border-color:var(--ok)}.cds-chip.warn{color:var(--warn);border-color:var(--warn)}.cds-chip.bad{color:var(--bad);border-color:var(--bad)}.cds-chip.info{color:var(--accent-ink);border-color:var(--accent)}\n.cds-chip.locked{border-style:dashed}\n.cds-bars{display:grid;gap:var(--space-3);font-family:var(--font-body)}\n.cds-bar-row{display:grid;grid-template-columns:minmax(120px,200px) 1fr 64px;gap:var(--space-3);align-items:center}\n.cds-bar-row .name{font-size:14px;color:var(--text)}\n.cds-bar-row .trk{height:8px;border-radius:var(--radius-pill);background:var(--border);overflow:hidden}\n.cds-bar-row .fill{display:block;height:100%;border-radius:var(--radius-pill);transition:width 300ms}\n.cds-bar-row .val{font-size:14px;font-weight:700;text-align:right;font-variant-numeric:tabular-nums;font-family:var(--font-display)}\n.cds-bar-row .val .cds-g-a,.cds-bar-row .val .cds-g-b,.cds-bar-row .val .cds-g-c,.cds-bar-row .val .cds-g-d,.cds-bar-row .val .cds-g-f{background-color:transparent}\n.cds-src{font-size:12px;color:var(--muted);margin-top:var(--space-2);font-family:var(--font-body)}\n@media (max-width:520px){.cds-bar-row{grid-template-columns:1fr 56px}.cds-bar-row .trk{grid-column:1 / -1;grid-row:2}}\n.cds-ded{list-style:none;margin:0;padding:0;font-family:var(--font-body)}\n.cds-ded li{display:grid;grid-template-columns:56px 1fr;gap:var(--space-3);padding:10px 0;border-top:1px solid var(--border);font-size:15px;color:var(--text)}\n.cds-ded li:first-child{border-top:0}\n.cds-ded .pts{font-family:var(--font-display);font-weight:700;color:var(--bad);font-variant-numeric:tabular-nums}\n.cds-ded .cap{display:block;font-size:12px;color:var(--warn);font-weight:600;margin-top:2px}\n.cds-ded .total{font-weight:700}\n.cds-ded .note{display:block;font-size:12px;color:var(--muted);margin-top:2px}\n.cds-ded li.excused .pts{color:var(--muted)}\n.cds-ba{display:flex;align-items:center;gap:var(--space-5);flex-wrap:wrap}\n.cds-ba .arrow{font-size:24px;color:var(--muted)}\n.cds-ba .lbl{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-weight:600;text-align:center;margin-bottom:var(--space-2)}\n.cds-tl{list-style:none;margin:0;padding:0;font-family:var(--font-body)}\n.cds-tl li{display:grid;grid-template-columns:64px 14px 1fr auto;gap:var(--space-3);align-items:start;padding:10px 0}\n.cds-tl .t{font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums;padding-top:2px}\n.cds-tl .dot{width:10px;height:10px;border-radius:var(--radius-pill);margin-top:6px;background:var(--border)}\n.cds-tl .dot.ok{background:var(--ok)}.cds-tl .dot.warn{background:var(--warn)}.cds-tl .dot.bad{background:var(--bad)}\n.cds-tl .what{font-size:15px;color:var(--text)}.cds-tl .what small{display:block;font-size:13px;color:var(--muted)}\n.cds-flow{display:grid;gap:0;font-family:var(--font-body)}\n.cds-node{display:grid;grid-template-columns:22px 1fr auto;gap:var(--space-3);align-items:center;position:relative;padding:8px 0}\n.cds-node .pin{width:14px;height:14px;border-radius:var(--radius-pill);border:2px solid var(--border);background:var(--surface);margin-left:4px;position:relative;z-index:1}\n.cds-node .pin.ok{border-color:var(--ok);background:var(--ok)}.cds-node .pin.warn{border-color:var(--warn);background:var(--surface)}.cds-node .pin.bad{border-color:var(--bad);background:var(--bad)}.cds-node .pin.wait{border-style:dashed;border-color:var(--muted)}\n.cds-node:not(:last-child)::after{content:"";position:absolute;left:10px;top:26px;bottom:-8px;width:2px;background:var(--border)}\n.cds-node .nm{font-size:15px;color:var(--text)}.cds-node .nm small{display:block;font-size:12px;color:var(--muted)}\n.cds-node.hit{background:var(--surface-sunk);border-radius:var(--radius-md)}\n.cds-fix{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--space-4);display:grid;gap:var(--space-3);font-family:var(--font-body)}\n.cds-fix h4{margin:0;font-family:var(--font-display);font-size:18px;color:var(--text)}\n.cds-fix p{margin:0;font-size:15px;color:var(--muted)}\n.cds-diff{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3)}\n@media (max-width:520px){.cds-diff{grid-template-columns:1fr}}\n.cds-diff div{background:var(--surface-sunk);border-radius:var(--radius-md);padding:10px 12px;font-size:14px;color:var(--text)}\n.cds-diff .k{display:block;font-size:11px;letter-spacing:.12em;text-transform:uppercase;font-weight:600;margin-bottom:4px}\n.cds-diff .was .k{color:var(--bad)}.cds-diff .now .k{color:var(--ok)}\n.cds-callout{margin:0;border:1px solid var(--border);background:var(--surface);border-radius:var(--radius-lg);padding:var(--space-4);font-family:var(--font-body);color:var(--text)}\n.cds-callout.quote{font-family:var(--font-display);font-size:20px;line-height:1.4;font-weight:600}\n.cds-callout.quote cite{display:block;font-family:var(--font-body);font-size:14px;font-weight:400;color:var(--muted);font-style:normal;margin-top:var(--space-2)}\n.cds-callout.bad{border-color:var(--bad)}.cds-callout.warn{border-color:var(--warn)}.cds-callout.info{border-color:var(--accent)}\n.cds-callout .ttl{display:block;font-weight:700;margin-bottom:4px}\n.cds-btn{display:inline-flex;align-items:center;gap:8px;padding:10px 18px;border-radius:var(--radius-pill);background:var(--primary);color:var(--on-primary);border:1px solid var(--primary);font-family:var(--font-body);font-weight:600;font-size:14px;cursor:pointer}\n.cds-btn.ghost{background:transparent;color:var(--text);border-color:var(--border)}\n.cds-btn:disabled{opacity:.55;cursor:default}\n.cds-btn:focus-visible,.cds-chip:focus-visible{outline:2px solid var(--focus);outline-offset:2px}\n.cds-sample{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-weight:600}\n@media (prefers-reduced-motion:reduce){.cds-ring .arc,.cds-bar-row .fill{transition:none}}\n.cds-matrix-wrap{overflow-x:auto}\n.cds-matrix{width:100%;border-collapse:collapse;font-family:var(--font-body);font-size:14px;color:var(--text)}\n.cds-matrix th,.cds-matrix td{padding:9px 10px;border-bottom:1px solid var(--border);text-align:center;vertical-align:middle}\n.cds-matrix thead th{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-weight:600;border-bottom:1px solid var(--text)}\n.cds-matrix tbody th{text-align:left;font-weight:600}\n.cds-matrix tbody th small{display:block;font-weight:400;font-size:12px;color:var(--muted)}\n.cds-matrix .hl{background:var(--surface-sunk)}\n.cds-matrix thead th.hl{color:var(--text)}\n.cds-yes{color:var(--ok);font-weight:700}.cds-no{color:var(--bad);font-weight:700}.cds-unk{color:var(--muted)}\n/* App screens: cockpit and Members Hub (guidelines/40-app-screens.md) */\n.cds-app{display:grid;grid-template-columns:248px minmax(0,1fr);min-height:100vh;background:var(--bg);color:var(--text);font-family:var(--font-body)}\n.cds-app-main{display:flex;flex-direction:column;min-width:0}\n.cds-app-body{padding:var(--space-7) var(--space-8);display:grid;gap:var(--space-6);align-content:start;max-width:1200px;width:100%;box-sizing:border-box}\n.cds-side{background:var(--nav-bg);border-right:1px solid var(--nav-line);padding:20px var(--space-4) 0;display:flex;flex-direction:column;gap:var(--space-5);position:sticky;top:0;height:100vh;box-sizing:border-box;overflow-y:auto}\n.cds-side-brand{display:flex;align-items:center;gap:10px;padding:0 var(--space-2);text-decoration:none}\n.cds-side-mark{width:30px;height:30px;border-radius:var(--radius-sm);background:var(--accent);color:var(--nav-bg);display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:700;font-size:14px;flex:none}\n.cds-side-name{display:flex;flex-direction:column;font-family:var(--font-display);font-weight:700;font-size:15px;line-height:19px;color:var(--on-nav-active)}\n.cds-side-name small{font-family:var(--font-body);font-size:11px;line-height:14px;letter-spacing:.12em;text-transform:uppercase;color:var(--nav-label);font-weight:600}\n.cds-side-nav{display:flex;flex-direction:column;gap:12px}\n.cds-side-group{display:flex;flex-direction:column;gap:2px}\n.cds-side-label{font-size:11px;line-height:14px;letter-spacing:.14em;text-transform:uppercase;color:var(--nav-label);font-weight:600;padding:0 10px 6px}\n.cds-side-link{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);font-size:14px;line-height:20px;padding:5px 10px;border-radius:var(--radius-sm);color:var(--nav-text);text-decoration:none}\n.cds-side-link:hover{color:var(--on-nav-active);background:var(--nav-active)}\n.cds-side-link[aria-current="page"]{background:var(--nav-active);color:var(--on-nav-active);font-weight:600}\n.cds-side-link:focus-visible,.cds-side-brand:focus-visible,.cds-side-menu:focus-visible{outline:2px solid var(--nav-focus);outline-offset:2px}\n.cds-side-link.sub{padding:6px 10px 6px 22px;font-size:13px;line-height:18px}\n.cds-side-client{display:block;text-transform:none;letter-spacing:0;font-size:12px;line-height:16px;font-weight:600;color:var(--nav-text);margin-top:2px}\n.cds-size{display:inline-flex;align-items:center;border:1px solid var(--border);border-radius:var(--radius-pill);overflow:hidden;background:var(--surface);font-family:var(--font-body)}\n.cds-size button{border:0;background:var(--surface);color:var(--text);padding:6px 12px;font-family:var(--font-body);font-size:13px;line-height:18px;font-weight:600;cursor:pointer}\n.cds-size button:hover{background:var(--surface-sunk)}\n.cds-size button:disabled{opacity:.4;cursor:default}\n.cds-size button:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}\n.cds-size output{padding:6px 4px;font-size:13px;line-height:18px;color:var(--muted);font-variant-numeric:tabular-nums;min-width:40px;text-align:center}\n.cds-side-badge{font-size:12px;font-weight:700;color:var(--nav-badge);font-variant-numeric:tabular-nums}\n.cds-side-foot{margin-top:auto;position:sticky;bottom:0;background:var(--nav-bg);padding:12px 10px 20px;border-top:1px solid var(--nav-line);font-size:12px;line-height:1.5;color:var(--nav-label)}\n.cds-side-toggle{position:absolute;opacity:0;pointer-events:none}\n.cds-side-menu{display:none}\n.cds-top{height:60px;box-sizing:border-box;padding:0 var(--space-7);display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);background:var(--surface);border-bottom:1px solid var(--border)}\n.cds-crumbs{display:flex;align-items:center;gap:6px;font-size:14px;color:var(--muted);min-width:0;white-space:nowrap;overflow:hidden}\n.cds-crumbs > *{flex:none}\n.cds-crumbs > :last-child{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis}\n.cds-crumbs a{color:var(--muted);text-decoration:none}.cds-crumbs a:hover{color:var(--text)}\n.cds-crumbs [aria-current="page"]{color:var(--text);font-weight:600}\n.cds-top-actions{display:flex;align-items:center;gap:10px;flex:none}\n.cds-page-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:var(--space-4) var(--space-5)}\n.cds-page-head .txt{display:grid;gap:10px;min-width:0;flex:1 1 420px}\n.cds-page-head > :not(.txt){flex:0 1 auto;max-width:100%;margin-left:auto}\n.cds-kicker{font-size:12px;line-height:16px;letter-spacing:.2em;text-transform:uppercase;color:var(--accent-ink);font-weight:600}\n.cds-page-title{margin:0;font-family:var(--font-display);font-size:36px;line-height:42px;font-weight:700;letter-spacing:-.01em;color:var(--text)}\n.cds-page-sub{margin:0;font-size:16px;line-height:1.6;color:var(--muted)}\n.cds-panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--space-5);display:grid;gap:var(--space-4);align-content:start;min-width:0}\n.cds-panel-head{display:flex;justify-content:space-between;align-items:flex-end;gap:var(--space-3);flex-wrap:wrap}\n.cds-panel-head .txt{display:grid;gap:4px}\n.cds-panel-label{font-size:11px;line-height:14px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent-ink);font-weight:600}\n.cds-panel-title{margin:0;font-family:var(--font-display);font-size:18px;line-height:24px;font-weight:700;color:var(--text)}\n.cds-panel-meta{font-size:13px;color:var(--muted)}\n.cds-panel-meta a,.cds-link{color:var(--accent-ink);font-weight:600;text-decoration:none}\n.cds-panel-meta a:hover,.cds-link:hover{color:var(--text)}\n.cds-panel p{margin:0;font-size:15px;line-height:1.55;color:var(--muted)}\n.cds-grid{display:grid;gap:var(--space-4);grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}\n.cds-grid.two{grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);align-items:start}\n.cds-list{list-style:none;margin:0;padding:0;display:grid}\n.cds-list li{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--space-3);align-items:center;padding:12px 0;border-top:1px solid var(--border)}\n.cds-list li:first-child{border-top:0;padding-top:0}\n.cds-list .ttl{font-size:15px;font-weight:600;color:var(--text)}\n.cds-list .sub{display:block;font-size:13px;font-weight:400;color:var(--muted);margin-top:2px}\n.cds-list .end{display:flex;align-items:center;gap:var(--space-2)}\n.cds-field{display:grid;gap:6px;font-family:var(--font-body)}\n.cds-field > label,.cds-field > .lbl{font-size:14px;font-weight:600;color:var(--text)}\n.cds-field .hint{font-size:13px;line-height:1.5;color:var(--muted)}\n.cds-field .err{font-size:13px;line-height:1.5;color:var(--bad);font-weight:600}\n.cds-input,.cds-select,.cds-textarea{width:100%;box-sizing:border-box;font-family:var(--font-body);font-size:15px;line-height:22px;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);padding:9px 12px}\n.cds-textarea{min-height:96px;resize:vertical}\n.cds-input::placeholder,.cds-textarea::placeholder{color:var(--muted)}\n.cds-input:focus-visible,.cds-select:focus-visible,.cds-textarea:focus-visible{outline:2px solid var(--focus);outline-offset:1px;border-color:var(--focus)}\n.cds-field.invalid .cds-input,.cds-field.invalid .cds-select,.cds-field.invalid .cds-textarea{border-color:var(--bad)}\n.cds-check{display:grid;grid-template-columns:20px 1fr;gap:10px;align-items:start;font-size:15px;line-height:1.5;color:var(--text);cursor:pointer}\n.cds-check input{width:18px;height:18px;margin:2px 0 0;accent-color:var(--primary)}\n.cds-check small{display:block;font-size:13px;color:var(--muted)}\n.cds-table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface)}\n.cds-table{width:100%;border-collapse:collapse;font-family:var(--font-body);font-size:14px;color:var(--text)}\n.cds-table th,.cds-table td{padding:11px var(--space-4);border-bottom:1px solid var(--border);text-align:left;vertical-align:middle}\n.cds-table thead th{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-weight:600;background:var(--surface-sunk);white-space:nowrap}\n.cds-table tbody tr:last-child td,.cds-table tbody tr:last-child th{border-bottom:0}\n.cds-table tbody th{font-weight:600}\n.cds-table .num{text-align:right;font-variant-numeric:tabular-nums}\n.cds-table td small{display:block;font-size:12px;color:var(--muted)}\n.cds-tabs{display:flex;gap:var(--space-5);border-bottom:1px solid var(--border);overflow-x:auto}\n.cds-tab{font-size:14px;line-height:20px;padding:10px 0;color:var(--muted);text-decoration:none;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap;display:inline-flex;gap:6px;align-items:center}\n.cds-tab:hover{color:var(--text)}\n.cds-tab[aria-current="page"]{color:var(--text);font-weight:600;border-bottom-color:var(--accent)}\n.cds-tab .n{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}\n.cds-tab:focus-visible{outline:2px solid var(--focus);outline-offset:2px}\n.cds-empty{background:var(--surface-sunk);border-radius:var(--radius-lg);padding:var(--space-6) var(--space-5);display:grid;gap:var(--space-2);justify-items:start}\n.cds-empty h3{margin:0;font-family:var(--font-display);font-size:18px;line-height:24px;color:var(--text)}\n.cds-empty p{margin:0;font-size:15px;line-height:1.55;color:var(--muted);max-width:56ch}\n.cds-empty .cds-btn{margin-top:var(--space-2)}\n.cds-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}\n.cds-more > summary,.cds-details > summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;gap:6px}\n.cds-more > summary::-webkit-details-marker,.cds-details > summary::-webkit-details-marker{display:none}\n.cds-more > summary{font-size:14px;line-height:20px;font-weight:600;color:var(--accent-ink);padding:8px 0}\n.cds-more > summary::after{content:"+";font-weight:700}\n.cds-more[open] > summary::after{content:"\\2212"}\n.cds-details > summary{font-size:13px;line-height:18px;color:var(--muted)}\n.cds-details > summary::before{content:"\\25B8"}\n.cds-details[open] > summary::before{content:"\\25BE"}\n.cds-more > summary:hover,.cds-details > summary:hover{color:var(--text)}\n.cds-more > summary:focus-visible,.cds-details > summary:focus-visible{outline:2px solid var(--focus);outline-offset:2px}\n.cds-details[open] > summary{margin-bottom:var(--space-2)}\nmark.cds-hl{background:var(--surface-sunk);color:var(--bad);font-weight:700;padding:0 2px;border-radius:var(--radius-sm)}\n.cds-callout .cds-actions{display:flex;flex-wrap:wrap;gap:var(--space-2);margin-top:var(--space-3)}\n.cds-progress{display:block;height:8px;border-radius:var(--radius-pill);background:var(--border);overflow:hidden}\n.cds-progress > i{display:block;height:100%;border-radius:var(--radius-pill);background:var(--accent);transition:width 300ms}\n.cds-progress.ok > i{background:var(--ok)}.cds-progress.warn > i{background:var(--warn)}\n.cds-kv{display:grid;grid-template-columns:minmax(120px,200px) minmax(0,1fr);margin:0;font-family:var(--font-body)}\n.cds-kv dt,.cds-kv dd{padding:10px 0;border-top:1px solid var(--border);margin:0}\n.cds-kv dt:first-of-type,.cds-kv dt:first-of-type + dd{border-top:0}\n.cds-kv dt{font-size:13px;line-height:20px;color:var(--muted);padding-right:var(--space-3)}\n.cds-kv dd{font-size:15px;line-height:1.55;color:var(--text)}\n.cds-jump{display:flex;flex-wrap:wrap;gap:var(--space-2)}\n.cds-jump a{font-size:13px;line-height:18px;padding:6px 12px;border:1px solid var(--border);border-radius:var(--radius-pill);color:var(--text);background:var(--surface);text-decoration:none}\n.cds-jump a:hover{border-color:var(--text)}\n.cds-jump a[aria-current]{background:var(--primary);border-color:var(--primary);color:var(--on-primary)}\n.cds-jump a:focus-visible{outline:2px solid var(--focus);outline-offset:2px}\n@media (max-width:520px){.cds-kv{grid-template-columns:minmax(0,1fr)}.cds-kv dd{border-top:0;padding-top:0}}\n@media (prefers-reduced-motion:reduce){.cds-progress > i{transition:none}}\n.cds-stats{display:grid;gap:var(--space-3);grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}\n.cds-stats .cds-stat{min-width:0}\n.cds-doors{display:grid;gap:var(--space-4);grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}\n.cds-door{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--space-5) var(--space-5) 18px;display:flex;flex-direction:column;gap:10px;min-width:0}\n.cds-door .head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:var(--space-2)}\n.cds-door .head .lbl{min-width:0}\n.cds-door .head .cds-chip{flex:none}\n.cds-door .lbl{font-size:11px;line-height:14px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);font-weight:600}\n.cds-door .v{font-family:var(--font-display);font-size:36px;line-height:40px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums;overflow-wrap:break-word}\n.cds-door .v.name{font-size:20px;line-height:26px}\n.cds-door p{margin:0;font-size:14px;line-height:1.5;color:var(--muted)}\n.cds-door .cds-link{margin-top:auto;font-size:14px}\n.cds-door.new{background:var(--surface-sunk);border-style:dashed}\n.cds-callout.say{font-family:var(--font-body);font-size:16px;line-height:1.5;font-weight:600;background:var(--surface-sunk);border-color:var(--surface-sunk)}\n.cds-search{display:flex;align-items:center;gap:var(--space-2);background:var(--surface-sunk);border:1px solid var(--border);border-radius:var(--radius-pill);padding:0 14px;height:36px;min-width:0;max-width:420px;flex:1 1 240px}\n.cds-search::before{content:"";width:12px;height:12px;border:2px solid var(--muted);border-radius:var(--radius-pill);flex:none;box-sizing:border-box}\n.cds-search input{flex:1;min-width:0;border:0;background:transparent;font-family:var(--font-body);font-size:14px;line-height:20px;color:var(--text);padding:0}\n.cds-search input::placeholder{color:var(--muted)}\n.cds-search input:focus{outline:none}\n.cds-search:focus-within{border-color:var(--focus);outline:2px solid var(--focus);outline-offset:1px}\n.cds-avatar{width:36px;height:36px;border-radius:var(--radius-pill);background:var(--primary);color:var(--on-primary);display:inline-flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:700;font-size:13px;flex:none;overflow:hidden}\n.cds-avatar img{width:100%;height:100%;object-fit:cover}\n.cds-avatar.sm{width:28px;height:28px;font-size:11px}\n.cds-author{display:flex;align-items:center;gap:var(--space-3);font-family:var(--font-body)}\n.cds-author .who{display:grid;gap:2px;min-width:0}\n.cds-author .name{font-size:15px;font-weight:600;color:var(--text)}\n.cds-author .meta{font-size:13px;color:var(--muted)}\n.cds-steps{list-style:none;margin:0;padding:0;display:grid;gap:var(--space-4);counter-reset:cds-step;font-family:var(--font-body)}\n.cds-steps > li{display:grid;grid-template-columns:32px minmax(0,1fr);gap:var(--space-3);align-items:start;counter-increment:cds-step}\n.cds-steps > li::before{content:counter(cds-step);width:28px;height:28px;border-radius:var(--radius-pill);background:var(--surface-sunk);border:1px solid var(--border);color:var(--text);font-family:var(--font-display);font-weight:700;font-size:13px;display:flex;align-items:center;justify-content:center;font-variant-numeric:tabular-nums}\n.cds-steps > li.done::before{background:var(--ok);border-color:var(--ok);color:var(--on-primary)}\n.cds-steps .ttl{font-size:15px;font-weight:600;color:var(--text);line-height:28px}\n.cds-steps .sub{display:block;font-size:14px;line-height:1.55;color:var(--muted);margin-top:2px}\n.cds-code{margin:0;background:var(--nav-bg);color:var(--nav-text);border-radius:var(--radius-md);padding:var(--space-4);font-family:var(--font-mono);font-size:13px;line-height:1.6;overflow-x:auto;white-space:pre}\n.cds-code .cm{color:var(--nav-label)}\ncode.cds-code-inline{font-family:var(--font-mono);font-size:13px;background:var(--surface-sunk);border:1px solid var(--border);border-radius:var(--radius-sm);padding:1px 6px;color:var(--text)}\n.cds-figure{margin:0;display:grid;gap:var(--space-2)}\n.cds-figure img,.cds-figure video{display:block;width:100%;height:auto;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface-sunk)}\n.cds-figure figcaption{font-size:13px;line-height:1.5;color:var(--muted)}\n@media (max-width:900px){\n .cds-app{grid-template-columns:minmax(0,1fr);grid-template-rows:auto 1fr;align-content:start}\n .cds-side{position:static;height:auto;flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-3);padding:12px var(--space-4)}\n .cds-side-menu{display:inline-flex;align-items:center;font-size:14px;font-weight:600;color:var(--on-nav-active);border:1px solid var(--nav-line);border-radius:var(--radius-pill);padding:6px 14px;cursor:pointer}\n .cds-side-nav,.cds-side-foot{display:none;flex-basis:100%}\n .cds-side-toggle:checked ~ .cds-side-nav,.cds-side-toggle:checked ~ .cds-side-foot{display:flex}\n .cds-side-toggle:focus-visible + .cds-side-menu{outline:2px solid var(--nav-focus);outline-offset:2px}\n .cds-top{padding:0 var(--space-4)}\n .cds-app-body{padding:var(--space-5) var(--space-4)}\n .cds-page-title{font-size:28px;line-height:34px}\n .cds-page-head{flex-wrap:wrap}\n .cds-page-head > :not(.txt){flex:1 1 100%;min-width:0;max-width:100%;margin-left:0}\n .cds-page-head .cds-btn{white-space:normal}\n .cds-page-head .cds-select,.cds-page-head .cds-input{max-width:100%}\n .cds-grid.two{grid-template-columns:minmax(0,1fr)}\n}\n@media (max-width:520px){.cds-top-actions .cds-btn.ghost{display:none}.cds-list li{grid-template-columns:minmax(0,1fr)}}\n/* Print: whole cards, headings stay with their content, no split paragraphs (guidelines/30-print.md) */\n.cds-keep{break-inside:avoid;page-break-inside:avoid}\n.cds-keep-next{break-after:avoid;page-break-after:avoid}\n.cds-page-break{break-before:page;page-break-before:always}\n@media print{\n .cds-fix > .cds-row:last-child{display:none!important}\n .cds-card,.cds-stat,.cds-fix,.cds-callout,.cds-ring,.cds-ba,.cds-bar-row,.cds-ded li,.cds-tl li,.cds-node,.cds-diff div,.cds-keep,table,tr,figure,blockquote{break-inside:avoid;page-break-inside:avoid}\n h1,h2,h3,h4,h5,.cds-keep-next,.label{break-after:avoid;page-break-after:avoid}\n p,li,dd{orphans:3;widows:3}\n .cds-no-print,nav,.cds-btn,.cds-side,.cds-top{display:none!important}\n .cds-app{display:block}\n .cds-ring .arc,.cds-bar-row .fill{transition:none}\n body{background:var(--surface);-webkit-print-color-adjust:exact;print-color-adjust:exact}\n}\n@page{size:letter;margin:0.6in 0.6in 0.7in}\n/* A list inside a narrow card stacks its chip under the text, whatever the page zoom (container query). */\n.cds-panel{container-type:inline-size}\n@container (max-width:380px){.cds-list li{grid-template-columns:minmax(0,1fr)}.cds-list .end{justify-content:flex-start}}\n/* Text-size narrow mode */\n/* The TextSize control scales the page with zoom, which media queries do not see. The cockpit frame adds\n .cds-narrow to <html> when the room left after scaling is under 900px, and .cds-tiny under 520px,\n and these repeat the narrow rules for that case (generated from the media blocks above). */\nhtml.cds-narrow .cds-app{grid-template-columns:minmax(0,1fr);grid-template-rows:auto 1fr;align-content:start}\nhtml.cds-narrow .cds-side{position:static;height:auto;flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-3);padding:12px var(--space-4)}\nhtml.cds-narrow .cds-side-menu{display:inline-flex;align-items:center;font-size:14px;font-weight:600;color:var(--on-nav-active);border:1px solid var(--nav-line);border-radius:var(--radius-pill);padding:6px 14px;cursor:pointer}\nhtml.cds-narrow .cds-side-nav,html.cds-narrow .cds-side-foot{display:none;flex-basis:100%}\nhtml.cds-narrow .cds-side-toggle:checked ~ .cds-side-nav,html.cds-narrow .cds-side-toggle:checked ~ .cds-side-foot{display:flex}\nhtml.cds-narrow .cds-side-toggle:focus-visible + .cds-side-menu{outline:2px solid var(--nav-focus);outline-offset:2px}\nhtml.cds-narrow .cds-top{padding:0 var(--space-4)}\nhtml.cds-narrow .cds-app-body{padding:var(--space-5) var(--space-4)}\nhtml.cds-narrow .cds-page-title{font-size:28px;line-height:34px}\nhtml.cds-narrow .cds-page-head{flex-wrap:wrap}\nhtml.cds-narrow .cds-page-head > :not(.txt){flex:1 1 100%;min-width:0;max-width:100%;margin-left:0}\nhtml.cds-narrow .cds-page-head .cds-btn{white-space:normal}\nhtml.cds-narrow .cds-page-head .cds-select,html.cds-narrow .cds-page-head .cds-input{max-width:100%}\nhtml.cds-narrow .cds-grid.two{grid-template-columns:minmax(0,1fr)}\nhtml.cds-tiny .cds-bar-row{grid-template-columns:1fr 56px}\nhtml.cds-tiny .cds-bar-row .trk{grid-column:1 / -1;grid-row:2}\nhtml.cds-tiny .cds-diff{grid-template-columns:1fr}\nhtml.cds-tiny .cds-kv{grid-template-columns:minmax(0,1fr)}\nhtml.cds-tiny .cds-kv dd{border-top:0;padding-top:0}\nhtml.cds-tiny .cds-top-actions .cds-btn.ghost{display:none}\nhtml.cds-tiny .cds-list li{grid-template-columns:minmax(0,1fr)}\n';
29275
+ DS_BUNDLE_CSS = '.cds-row{display:flex;flex-wrap:wrap;gap:var(--space-3);align-items:center}\n.cds-stack{display:grid;gap:var(--space-3)}\n.cds-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--space-4)}\n.cds-num{font-variant-numeric:tabular-nums}\n.cds-ring{display:inline-grid;justify-items:center;gap:var(--space-2);font-family:var(--font-display)}\n.cds-ring svg{display:block}\n.cds-ring .trk{fill:none;stroke:var(--border)}\n.cds-ring .arc{fill:none;stroke-linecap:round;transition:stroke-dashoffset 300ms}\n.cds-ring .letter{font-weight:700;letter-spacing:-0.02em}\n.cds-ring .out{fill:var(--muted);font-size:11px;font-variant-numeric:tabular-nums}\n.cds-ring .cap{font-family:var(--font-body);font-size:14px;color:var(--muted);text-align:center;max-width:220px}\n.cds-g-a{stroke:var(--grade-a);fill:var(--grade-a);color:var(--grade-a);background-color:var(--grade-a)}\n.cds-g-b{stroke:var(--grade-b);fill:var(--grade-b);color:var(--grade-b);background-color:var(--grade-b)}\n.cds-g-c{stroke:var(--grade-c);fill:var(--grade-c);color:var(--grade-c);background-color:var(--grade-c)}\n.cds-g-d{stroke:var(--grade-d);fill:var(--grade-d);color:var(--grade-d);background-color:var(--grade-d)}\n.cds-g-f{stroke:var(--grade-f);fill:var(--grade-f);color:var(--grade-f);background-color:var(--grade-f)}\n.cds-g-incomplete{stroke:var(--muted);fill:var(--muted);color:var(--muted)}\n.cds-ring .cds-g-a,.cds-ring .cds-g-b,.cds-ring .cds-g-c,.cds-ring .cds-g-d,.cds-ring .cds-g-f{background-color:transparent}\n.cds-ring text.cds-g-a,.cds-ring text.cds-g-b,.cds-ring text.cds-g-c,.cds-ring text.cds-g-d,.cds-ring text.cds-g-f{stroke:none}\n.cds-stat{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-lg);padding:14px var(--space-4);min-width:140px}\n.cds-stat .big{font-family:var(--font-display);font-weight:700;font-size:20px;line-height:26px;color:var(--text);font-variant-numeric:tabular-nums}\n.cds-stat .big.bad{color:var(--bad)}.cds-stat .big.warn{color:var(--warn)}.cds-stat .big.ok{color:var(--ok)}\n.cds-stat .lbl{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-top:var(--space-1);font-weight:600}\n.cds-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:var(--radius-pill);font-size:12px;font-weight:600;border:1px solid var(--border);color:var(--muted);background:var(--surface);font-family:var(--font-body)}\n.cds-chip.ok{color:var(--ok);border-color:var(--ok)}.cds-chip.warn{color:var(--warn);border-color:var(--warn)}.cds-chip.bad{color:var(--bad);border-color:var(--bad)}.cds-chip.info{color:var(--accent-ink);border-color:var(--accent)}\n.cds-chip.locked{border-style:dashed}\n.cds-bars{display:grid;gap:var(--space-3);font-family:var(--font-body)}\n.cds-bar-row{display:grid;grid-template-columns:minmax(120px,200px) 1fr 64px;gap:var(--space-3);align-items:center}\n.cds-bar-row .name{font-size:14px;color:var(--text)}\n.cds-bar-row .trk{height:8px;border-radius:var(--radius-pill);background:var(--border);overflow:hidden}\n.cds-bar-row .fill{display:block;height:100%;border-radius:var(--radius-pill);transition:width 300ms}\n.cds-bar-row .val{font-size:14px;font-weight:700;text-align:right;font-variant-numeric:tabular-nums;font-family:var(--font-display)}\n.cds-bar-row .val .cds-g-a,.cds-bar-row .val .cds-g-b,.cds-bar-row .val .cds-g-c,.cds-bar-row .val .cds-g-d,.cds-bar-row .val .cds-g-f{background-color:transparent}\n.cds-src{font-size:12px;color:var(--muted);margin-top:var(--space-2);font-family:var(--font-body)}\n@media (max-width:520px){.cds-bar-row{grid-template-columns:1fr 56px}.cds-bar-row .trk{grid-column:1 / -1;grid-row:2}}\n.cds-ded{list-style:none;margin:0;padding:0;font-family:var(--font-body)}\n.cds-ded li{display:grid;grid-template-columns:56px 1fr;gap:var(--space-3);padding:10px 0;border-top:1px solid var(--border);font-size:15px;color:var(--text)}\n.cds-ded li:first-child{border-top:0}\n.cds-ded .pts{font-family:var(--font-display);font-weight:700;color:var(--bad);font-variant-numeric:tabular-nums}\n.cds-ded .cap{display:block;font-size:12px;color:var(--warn);font-weight:600;margin-top:2px}\n.cds-ded .total{font-weight:700}\n.cds-ded .note{display:block;font-size:12px;color:var(--muted);margin-top:2px}\n.cds-ded li.excused .pts{color:var(--muted)}\n.cds-ba{display:flex;align-items:center;gap:var(--space-5);flex-wrap:wrap}\n.cds-ba .arrow{font-size:24px;color:var(--muted)}\n.cds-ba .lbl{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-weight:600;text-align:center;margin-bottom:var(--space-2)}\n.cds-tl{list-style:none;margin:0;padding:0;font-family:var(--font-body)}\n.cds-tl li{display:grid;grid-template-columns:64px 14px 1fr auto;gap:var(--space-3);align-items:start;padding:10px 0}\n.cds-tl .t{font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums;padding-top:2px}\n.cds-tl .dot{width:10px;height:10px;border-radius:var(--radius-pill);margin-top:6px;background:var(--border)}\n.cds-tl .dot.ok{background:var(--ok)}.cds-tl .dot.warn{background:var(--warn)}.cds-tl .dot.bad{background:var(--bad)}\n.cds-tl .what{font-size:15px;color:var(--text)}.cds-tl .what small{display:block;font-size:13px;color:var(--muted)}\n.cds-flow{display:grid;gap:0;font-family:var(--font-body)}\n.cds-node{display:grid;grid-template-columns:22px 1fr auto;gap:var(--space-3);align-items:center;position:relative;padding:8px 0}\n.cds-node .pin{width:14px;height:14px;border-radius:var(--radius-pill);border:2px solid var(--border);background:var(--surface);margin-left:4px;position:relative;z-index:1}\n.cds-node .pin.ok{border-color:var(--ok);background:var(--ok)}.cds-node .pin.warn{border-color:var(--warn);background:var(--surface)}.cds-node .pin.bad{border-color:var(--bad);background:var(--bad)}.cds-node .pin.wait{border-style:dashed;border-color:var(--muted)}\n.cds-node:not(:last-child)::after{content:"";position:absolute;left:10px;top:26px;bottom:-8px;width:2px;background:var(--border)}\n.cds-node .nm{font-size:15px;color:var(--text)}.cds-node .nm small{display:block;font-size:12px;color:var(--muted)}\n.cds-node.hit{background:var(--surface-sunk);border-radius:var(--radius-md)}\n.cds-fix{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--space-4);display:grid;gap:var(--space-3);font-family:var(--font-body)}\n.cds-fix h4{margin:0;font-family:var(--font-display);font-size:18px;color:var(--text)}\n.cds-fix p{margin:0;font-size:15px;color:var(--muted)}\n.cds-diff{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3)}\n@media (max-width:520px){.cds-diff{grid-template-columns:1fr}}\n.cds-diff div{background:var(--surface-sunk);border-radius:var(--radius-md);padding:10px 12px;font-size:14px;color:var(--text)}\n.cds-diff .k{display:block;font-size:11px;letter-spacing:.12em;text-transform:uppercase;font-weight:600;margin-bottom:4px}\n.cds-diff .was .k{color:var(--bad)}.cds-diff .now .k{color:var(--ok)}\n.cds-callout{margin:0;border:1px solid var(--border);background:var(--surface);border-radius:var(--radius-lg);padding:var(--space-4);font-family:var(--font-body);color:var(--text)}\n.cds-callout.quote{font-family:var(--font-display);font-size:20px;line-height:1.4;font-weight:600}\n.cds-callout.quote cite{display:block;font-family:var(--font-body);font-size:14px;font-weight:400;color:var(--muted);font-style:normal;margin-top:var(--space-2)}\n.cds-callout.bad{border-color:var(--bad)}.cds-callout.warn{border-color:var(--warn)}.cds-callout.info{border-color:var(--accent)}\n.cds-callout .ttl{display:block;font-weight:700;margin-bottom:4px}\n.cds-btn{display:inline-flex;align-items:center;gap:8px;padding:10px 18px;border-radius:var(--radius-pill);background:var(--primary);color:var(--on-primary);border:1px solid var(--primary);font-family:var(--font-body);font-weight:600;font-size:14px;cursor:pointer}\n.cds-btn.ghost{background:transparent;color:var(--text);border-color:var(--border)}\n.cds-btn:disabled{opacity:.55;cursor:default}\n.cds-btn:focus-visible,.cds-chip:focus-visible{outline:2px solid var(--focus);outline-offset:2px}\n.cds-sample{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-weight:600}\n@media (prefers-reduced-motion:reduce){.cds-ring .arc,.cds-bar-row .fill{transition:none}}\n.cds-matrix-wrap{overflow-x:auto}\n.cds-matrix{width:100%;border-collapse:collapse;font-family:var(--font-body);font-size:14px;color:var(--text)}\n.cds-matrix th,.cds-matrix td{padding:9px 10px;border-bottom:1px solid var(--border);text-align:center;vertical-align:middle}\n.cds-matrix thead th{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-weight:600;border-bottom:1px solid var(--text)}\n.cds-matrix tbody th{text-align:left;font-weight:600}\n.cds-matrix tbody th small{display:block;font-weight:400;font-size:12px;color:var(--muted)}\n.cds-matrix .hl{background:var(--surface-sunk)}\n.cds-matrix thead th.hl{color:var(--text)}\n.cds-yes{color:var(--ok);font-weight:700}.cds-no{color:var(--bad);font-weight:700}.cds-unk{color:var(--muted)}\n/* App screens: cockpit and Members Hub (guidelines/40-app-screens.md) */\n.cds-app{display:grid;grid-template-columns:248px minmax(0,1fr);min-height:100vh;background:var(--bg);color:var(--text);font-family:var(--font-body)}\n.cds-app-main{display:flex;flex-direction:column;min-width:0}\n.cds-app-body{padding:var(--space-7) var(--space-8);display:grid;gap:var(--space-6);align-content:start;max-width:1200px;width:100%;box-sizing:border-box}\n.cds-side{background:var(--nav-bg);border-right:1px solid var(--nav-line);padding:20px var(--space-4) 0;display:flex;flex-direction:column;gap:var(--space-5);position:sticky;top:0;height:100vh;box-sizing:border-box;overflow-y:auto}\n.cds-side-brand{display:flex;align-items:center;gap:10px;padding:0 var(--space-2);text-decoration:none}\n.cds-side-mark{width:30px;height:30px;border-radius:var(--radius-sm);background:var(--accent);color:var(--nav-bg);display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:700;font-size:14px;flex:none}\n.cds-side-name{display:flex;flex-direction:column;font-family:var(--font-display);font-weight:700;font-size:15px;line-height:19px;color:var(--on-nav-active)}\n.cds-side-name small{font-family:var(--font-body);font-size:11px;line-height:14px;letter-spacing:.12em;text-transform:uppercase;color:var(--nav-label);font-weight:600}\n.cds-side-nav{display:flex;flex-direction:column;gap:12px}\n.cds-side-group{display:flex;flex-direction:column;gap:2px}\n.cds-side-label{font-size:11px;line-height:14px;letter-spacing:.14em;text-transform:uppercase;color:var(--nav-label);font-weight:600;padding:0 10px 6px}\n.cds-side-link{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);font-size:14px;line-height:20px;padding:5px 10px;border-radius:var(--radius-sm);color:var(--nav-text);text-decoration:none}\n.cds-side-link:hover{color:var(--on-nav-active);background:var(--nav-active)}\n.cds-side-link[aria-current="page"]{background:var(--nav-active);color:var(--on-nav-active);font-weight:600}\n.cds-side-link:focus-visible,.cds-side-brand:focus-visible,.cds-side-menu:focus-visible{outline:2px solid var(--nav-focus);outline-offset:2px}\n.cds-side-link.sub{padding:6px 10px 6px 22px;font-size:13px;line-height:18px}\n.cds-side-client{display:block;text-transform:none;letter-spacing:0;font-size:12px;line-height:16px;font-weight:600;color:var(--nav-text);margin-top:2px}\n.cds-size{display:inline-flex;align-items:center;border:1px solid var(--border);border-radius:var(--radius-pill);overflow:hidden;background:var(--surface);font-family:var(--font-body)}\n.cds-size button{border:0;background:var(--surface);color:var(--text);padding:6px 12px;font-family:var(--font-body);font-size:13px;line-height:18px;font-weight:600;cursor:pointer}\n.cds-size button:hover{background:var(--surface-sunk)}\n.cds-size button:disabled{opacity:.4;cursor:default}\n.cds-size button:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}\n.cds-size output{padding:6px 4px;font-size:13px;line-height:18px;color:var(--muted);font-variant-numeric:tabular-nums;min-width:40px;text-align:center}\n.cds-side-badge{font-size:12px;font-weight:700;color:var(--nav-badge);font-variant-numeric:tabular-nums}\n.cds-side-foot{margin-top:auto;position:sticky;bottom:0;background:var(--nav-bg);padding:12px 10px 20px;border-top:1px solid var(--nav-line);font-size:12px;line-height:1.5;color:var(--nav-label)}\n.cds-side-toggle{position:absolute;opacity:0;pointer-events:none}\n.cds-side-menu{display:none}\n.cds-top{height:60px;box-sizing:border-box;padding:0 var(--space-7);display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);background:var(--surface);border-bottom:1px solid var(--border)}\n.cds-crumbs{display:flex;align-items:center;gap:6px;font-size:14px;color:var(--muted);min-width:0;white-space:nowrap;overflow:hidden}\n.cds-crumbs > *{flex:none}\n.cds-crumbs > :last-child{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis}\n.cds-crumbs a{color:var(--muted);text-decoration:none}.cds-crumbs a:hover{color:var(--text)}\n.cds-crumbs [aria-current="page"]{color:var(--text);font-weight:600}\n.cds-top-actions{display:flex;align-items:center;gap:10px;flex:none}\n.cds-page-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:var(--space-4) var(--space-5)}\n.cds-page-head .txt{display:grid;gap:10px;min-width:0;flex:1 1 420px}\n.cds-page-head > :not(.txt){flex:0 1 auto;max-width:100%;margin-left:auto}\n.cds-kicker{font-size:12px;line-height:16px;letter-spacing:.2em;text-transform:uppercase;color:var(--accent-ink);font-weight:600}\n.cds-page-title{margin:0;font-family:var(--font-display);font-size:36px;line-height:42px;font-weight:700;letter-spacing:-.01em;color:var(--text)}\n.cds-page-sub{margin:0;font-size:16px;line-height:1.6;color:var(--muted)}\n.cds-panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--space-5);display:grid;gap:var(--space-4);align-content:start;min-width:0}\n.cds-panel-head{display:flex;justify-content:space-between;align-items:flex-end;gap:var(--space-3);flex-wrap:wrap}\n.cds-panel-head .txt{display:grid;gap:4px}\n.cds-panel-label{font-size:11px;line-height:14px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent-ink);font-weight:600}\n.cds-panel-title{margin:0;font-family:var(--font-display);font-size:18px;line-height:24px;font-weight:700;color:var(--text)}\n.cds-panel-meta{font-size:13px;color:var(--muted)}\n.cds-panel-meta a,.cds-link{color:var(--accent-ink);font-weight:600;text-decoration:none}\n.cds-panel-meta a:hover,.cds-link:hover{color:var(--text)}\n.cds-panel p{margin:0;font-size:15px;line-height:1.55;color:var(--muted)}\n.cds-grid{display:grid;gap:var(--space-4);grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}\n.cds-grid.two{grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);align-items:start}\n.cds-list{list-style:none;margin:0;padding:0;display:grid}\n.cds-list li{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--space-3);align-items:center;padding:12px 0;border-top:1px solid var(--border)}\n.cds-list li:first-child{border-top:0;padding-top:0}\n.cds-list .ttl{font-size:15px;font-weight:600;color:var(--text)}\n.cds-list .sub{display:block;font-size:13px;font-weight:400;color:var(--muted);margin-top:2px}\n.cds-list .end{display:flex;align-items:center;gap:var(--space-2)}\n.cds-field{display:grid;gap:6px;font-family:var(--font-body)}\n.cds-field > label,.cds-field > .lbl{font-size:14px;font-weight:600;color:var(--text)}\n.cds-field .hint{font-size:13px;line-height:1.5;color:var(--muted)}\n.cds-field .err{font-size:13px;line-height:1.5;color:var(--bad);font-weight:600}\n.cds-input,.cds-select,.cds-textarea{width:100%;box-sizing:border-box;font-family:var(--font-body);font-size:15px;line-height:22px;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);padding:9px 12px}\n.cds-textarea{min-height:96px;resize:vertical}\n.cds-input::placeholder,.cds-textarea::placeholder{color:var(--muted)}\n.cds-input:focus-visible,.cds-select:focus-visible,.cds-textarea:focus-visible{outline:2px solid var(--focus);outline-offset:1px;border-color:var(--focus)}\n.cds-field.invalid .cds-input,.cds-field.invalid .cds-select,.cds-field.invalid .cds-textarea{border-color:var(--bad)}\n.cds-check{display:grid;grid-template-columns:20px 1fr;gap:10px;align-items:start;font-size:15px;line-height:1.5;color:var(--text);cursor:pointer}\n.cds-check input{width:18px;height:18px;margin:2px 0 0;accent-color:var(--primary)}\n.cds-check small{display:block;font-size:13px;color:var(--muted)}\n.cds-table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface)}\n.cds-table{width:100%;border-collapse:collapse;font-family:var(--font-body);font-size:14px;color:var(--text)}\n.cds-table th,.cds-table td{padding:11px var(--space-4);border-bottom:1px solid var(--border);text-align:left;vertical-align:middle}\n.cds-table thead th{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-weight:600;background:var(--surface-sunk);white-space:nowrap}\n.cds-table tbody tr:last-child td,.cds-table tbody tr:last-child th{border-bottom:0}\n.cds-table tbody th{font-weight:600}\n.cds-table .num{text-align:right;font-variant-numeric:tabular-nums}\n.cds-table td small{display:block;font-size:12px;color:var(--muted)}\n.cds-tabs{display:flex;gap:var(--space-5);border-bottom:1px solid var(--border);overflow-x:auto}\n.cds-tab{font-size:14px;line-height:20px;padding:10px 0;color:var(--muted);text-decoration:none;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap;display:inline-flex;gap:6px;align-items:center}\n.cds-tab:hover{color:var(--text)}\n.cds-tab[aria-current="page"]{color:var(--text);font-weight:600;border-bottom-color:var(--accent)}\n.cds-tab .n{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}\n.cds-tab:focus-visible{outline:2px solid var(--focus);outline-offset:2px}\n.cds-empty{background:var(--surface-sunk);border-radius:var(--radius-lg);padding:var(--space-6) var(--space-5);display:grid;gap:var(--space-2);justify-items:start}\n.cds-empty h3{margin:0;font-family:var(--font-display);font-size:18px;line-height:24px;color:var(--text)}\n.cds-empty p{margin:0;font-size:15px;line-height:1.55;color:var(--muted);max-width:56ch}\n.cds-empty .cds-btn{margin-top:var(--space-2)}\n.cds-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}\n.cds-more > summary,.cds-details > summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;gap:6px}\n.cds-more > summary::-webkit-details-marker,.cds-details > summary::-webkit-details-marker{display:none}\n.cds-more > summary{font-size:14px;line-height:20px;font-weight:600;color:var(--accent-ink);padding:8px 0}\n.cds-more > summary::after{content:"+";font-weight:700}\n.cds-more[open] > summary::after{content:"\\2212"}\n.cds-details > summary{font-size:13px;line-height:18px;color:var(--muted)}\n.cds-details > summary::before{content:"\\25B8"}\n.cds-details[open] > summary::before{content:"\\25BE"}\n.cds-more > summary:hover,.cds-details > summary:hover{color:var(--text)}\n.cds-more > summary:focus-visible,.cds-details > summary:focus-visible{outline:2px solid var(--focus);outline-offset:2px}\n.cds-details[open] > summary{margin-bottom:var(--space-2)}\nmark.cds-hl{background:var(--surface-sunk);color:var(--bad);font-weight:700;padding:0 2px;border-radius:var(--radius-sm)}\n.cds-callout .cds-actions{display:flex;flex-wrap:wrap;gap:var(--space-2);margin-top:var(--space-3)}\n.cds-progress{display:block;height:8px;border-radius:var(--radius-pill);background:var(--border);overflow:hidden}\n.cds-progress > i{display:block;height:100%;border-radius:var(--radius-pill);background:var(--accent);transition:width 300ms}\n.cds-progress.ok > i{background:var(--ok)}.cds-progress.warn > i{background:var(--warn)}\n.cds-kv{display:grid;grid-template-columns:minmax(120px,200px) minmax(0,1fr);margin:0;font-family:var(--font-body)}\n.cds-kv dt,.cds-kv dd{padding:10px 0;border-top:1px solid var(--border);margin:0}\n.cds-kv dt:first-of-type,.cds-kv dt:first-of-type + dd{border-top:0}\n.cds-kv dt{font-size:13px;line-height:20px;color:var(--muted);padding-right:var(--space-3)}\n.cds-kv dd{font-size:15px;line-height:1.55;color:var(--text)}\n.cds-jump{display:flex;flex-wrap:wrap;gap:var(--space-2)}\n.cds-jump a{font-size:13px;line-height:18px;padding:6px 12px;border:1px solid var(--border);border-radius:var(--radius-pill);color:var(--text);background:var(--surface);text-decoration:none}\n.cds-jump a:hover{border-color:var(--text)}\n.cds-jump a[aria-current]{background:var(--primary);border-color:var(--primary);color:var(--on-primary)}\n.cds-jump a:focus-visible{outline:2px solid var(--focus);outline-offset:2px}\n@media (max-width:520px){.cds-kv{grid-template-columns:minmax(0,1fr)}.cds-kv dd{border-top:0;padding-top:0}}\n@media (prefers-reduced-motion:reduce){.cds-progress > i{transition:none}}\n.cds-stats{display:grid;gap:var(--space-3);grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}\n.cds-stats .cds-stat{min-width:0}\n.cds-doors{display:grid;gap:var(--space-4);grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}\n.cds-door{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--space-5) var(--space-5) 18px;display:flex;flex-direction:column;gap:10px;min-width:0}\n.cds-door .head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:var(--space-2)}\n.cds-door .head .lbl{min-width:0}\n.cds-door .head .cds-chip{flex:none}\n.cds-door .lbl{font-size:11px;line-height:14px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);font-weight:600}\n.cds-door .v{font-family:var(--font-display);font-size:36px;line-height:40px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums;overflow-wrap:break-word}\n.cds-door .v.name{font-size:20px;line-height:26px}\n.cds-door p{margin:0;font-size:14px;line-height:1.5;color:var(--muted)}\n.cds-door .cds-link{margin-top:auto;font-size:14px}\n.cds-door.new{background:var(--surface-sunk);border-style:dashed}\n.cds-callout.say{font-family:var(--font-body);font-size:16px;line-height:1.5;font-weight:600;background:var(--surface-sunk);border-color:var(--surface-sunk)}\n.cds-search{display:flex;align-items:center;gap:var(--space-2);background:var(--surface-sunk);border:1px solid var(--border);border-radius:var(--radius-pill);padding:0 14px;height:36px;min-width:0;max-width:420px;flex:1 1 240px}\n.cds-search::before{content:"";width:12px;height:12px;border:2px solid var(--muted);border-radius:var(--radius-pill);flex:none;box-sizing:border-box}\n.cds-search input{flex:1;min-width:0;border:0;background:transparent;font-family:var(--font-body);font-size:14px;line-height:20px;color:var(--text);padding:0}\n.cds-search input::placeholder{color:var(--muted)}\n.cds-search input:focus{outline:none}\n.cds-search:focus-within{border-color:var(--focus);outline:2px solid var(--focus);outline-offset:1px}\n.cds-avatar{width:36px;height:36px;border-radius:var(--radius-pill);background:var(--primary);color:var(--on-primary);display:inline-flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:700;font-size:13px;flex:none;overflow:hidden}\n.cds-avatar img{width:100%;height:100%;object-fit:cover}\n.cds-avatar.sm{width:28px;height:28px;font-size:11px}\n.cds-author{display:flex;align-items:center;gap:var(--space-3);font-family:var(--font-body)}\n.cds-author .who{display:grid;gap:2px;min-width:0}\n.cds-author .name{font-size:15px;font-weight:600;color:var(--text)}\n.cds-author .meta{font-size:13px;color:var(--muted)}\n.cds-steps{list-style:none;margin:0;padding:0;display:grid;gap:var(--space-4);counter-reset:cds-step;font-family:var(--font-body)}\n.cds-steps > li{display:grid;grid-template-columns:32px minmax(0,1fr);gap:var(--space-3);align-items:start;counter-increment:cds-step}\n.cds-steps > li::before{content:counter(cds-step);width:28px;height:28px;border-radius:var(--radius-pill);background:var(--surface-sunk);border:1px solid var(--border);color:var(--text);font-family:var(--font-display);font-weight:700;font-size:13px;display:flex;align-items:center;justify-content:center;font-variant-numeric:tabular-nums}\n.cds-steps > li.done::before{background:var(--ok);border-color:var(--ok);color:var(--on-primary)}\n.cds-steps .ttl{font-size:15px;font-weight:600;color:var(--text);line-height:28px}\n.cds-steps .sub{display:block;font-size:14px;line-height:1.55;color:var(--muted);margin-top:2px}\n.cds-code{margin:0;background:var(--nav-bg);color:var(--nav-text);border-radius:var(--radius-md);padding:var(--space-4);font-family:var(--font-mono);font-size:13px;line-height:1.6;overflow-x:auto;white-space:pre}\n.cds-code .cm{color:var(--nav-label)}\ncode.cds-code-inline{font-family:var(--font-mono);font-size:13px;background:var(--surface-sunk);border:1px solid var(--border);border-radius:var(--radius-sm);padding:1px 6px;color:var(--text)}\n.cds-figure{margin:0;display:grid;gap:var(--space-2)}\n.cds-figure img,.cds-figure video{display:block;width:100%;height:auto;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface-sunk)}\n.cds-figure figcaption{font-size:13px;line-height:1.5;color:var(--muted)}\n@media (max-width:900px){\n .cds-app{grid-template-columns:minmax(0,1fr);grid-template-rows:auto 1fr;align-content:start}\n .cds-side{position:static;height:auto;flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-3);padding:12px var(--space-4)}\n .cds-side-menu{display:inline-flex;align-items:center;font-size:14px;font-weight:600;color:var(--on-nav-active);border:1px solid var(--nav-line);border-radius:var(--radius-pill);padding:6px 14px;cursor:pointer}\n .cds-side-nav,.cds-side-foot{display:none;flex-basis:100%}\n .cds-side-toggle:checked ~ .cds-side-nav,.cds-side-toggle:checked ~ .cds-side-foot{display:flex}\n .cds-side-toggle:focus-visible + .cds-side-menu{outline:2px solid var(--nav-focus);outline-offset:2px}\n .cds-top{padding:0 var(--space-4)}\n .cds-app-body{padding:var(--space-5) var(--space-4)}\n .cds-page-title{font-size:28px;line-height:34px}\n .cds-page-head{flex-wrap:wrap}\n .cds-page-head > :not(.txt){flex:1 1 100%;min-width:0;max-width:100%;margin-left:0}\n .cds-page-head .cds-btn{white-space:normal}\n .cds-page-head .cds-select,.cds-page-head .cds-input{max-width:100%}\n .cds-grid.two{grid-template-columns:minmax(0,1fr)}\n}\n@media (max-width:520px){.cds-top-actions .cds-btn.ghost{display:none}.cds-list li{grid-template-columns:minmax(0,1fr)}}\n/* Print: whole cards, headings stay with their content, no split paragraphs (guidelines/30-print.md) */\n.cds-keep{break-inside:avoid;page-break-inside:avoid}\n.cds-keep-next{break-after:avoid;page-break-after:avoid}\n.cds-page-break{break-before:page;page-break-before:always}\n@media print{\n .cds-fix > .cds-row:last-child{display:none!important}\n .cds-card,.cds-stat,.cds-fix,.cds-callout,.cds-ring,.cds-ba,.cds-bar-row,.cds-ded li,.cds-tl li,.cds-node,.cds-diff div,.cds-keep,table,tr,figure,blockquote{break-inside:avoid;page-break-inside:avoid}\n h1,h2,h3,h4,h5,.cds-keep-next,.label{break-after:avoid;page-break-after:avoid}\n p,li,dd{orphans:3;widows:3}\n .cds-no-print,nav,.cds-btn,.cds-side,.cds-top{display:none!important}\n .cds-app{display:block}\n .cds-ring .arc,.cds-bar-row .fill{transition:none}\n body{background:var(--surface);-webkit-print-color-adjust:exact;print-color-adjust:exact}\n}\n@page{size:letter;margin:0.6in 0.6in 0.7in}\n.cds-menu{position:relative;display:inline-block}\n.cds-menu > summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;border-radius:var(--radius-pill)}\n.cds-menu > summary::-webkit-details-marker{display:none}\n.cds-menu > summary:focus-visible{outline:2px solid var(--focus);outline-offset:2px}\n.cds-menu-panel{position:absolute;right:0;top:calc(100% + var(--space-2));z-index:60;min-width:240px;max-width:min(320px,90vw);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-lift);padding:var(--space-2);display:grid;gap:2px;font-family:var(--font-body)}\n.cds-menu-head{padding:var(--space-2) var(--space-3) var(--space-3);border-bottom:1px solid var(--border);margin-bottom:var(--space-1);display:grid;gap:2px}\n.cds-menu-head .name{font-size:15px;font-weight:600;color:var(--text)}\n.cds-menu-head .meta{font-size:13px;color:var(--muted);overflow-wrap:anywhere}\n.cds-menu-item{display:block;padding:8px var(--space-3);border-radius:var(--radius-sm);font-size:14px;line-height:20px;color:var(--text);text-decoration:none;background:none;border:0;text-align:left;font-family:var(--font-body);cursor:pointer;width:100%}\n.cds-menu-item:hover,.cds-menu-item:focus-visible{background:var(--surface-sunk);outline:none}\n.cds-menu-sep{height:1px;background:var(--border);margin:var(--space-1) 0}\n.cds-menu-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);padding:6px var(--space-3);font-size:14px;color:var(--text)}\n.cds-menu-row .cds-seg button{padding:4px 10px;font-size:12px}\n.cds-seg{display:inline-flex;align-items:center;border:1px solid var(--border);border-radius:var(--radius-pill);overflow:hidden;background:var(--surface);font-family:var(--font-body)}\n.cds-seg button{border:0;background:var(--surface);color:var(--muted);padding:6px 12px;font-family:var(--font-body);font-size:13px;line-height:18px;font-weight:600;cursor:pointer}\n.cds-seg button + button{border-left:1px solid var(--border)}\n.cds-seg button:hover{color:var(--text);background:var(--surface-sunk)}\n.cds-seg button[aria-pressed="true"]{background:var(--primary);color:var(--on-primary)}\n.cds-seg button:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}\n/* A list inside a narrow card stacks its chip under the text, whatever the page zoom (container query). */\n.cds-panel{container-type:inline-size}\n@container (max-width:380px){.cds-list li{grid-template-columns:minmax(0,1fr)}.cds-list .end{justify-content:flex-start}}\n/* Text-size narrow mode */\n/* The TextSize control scales the page with zoom, which media queries do not see. The cockpit frame adds\n .cds-narrow to <html> when the room left after scaling is under 900px, and .cds-tiny under 520px,\n and these repeat the narrow rules for that case (generated from the media blocks above). */\nhtml.cds-narrow .cds-app{grid-template-columns:minmax(0,1fr);grid-template-rows:auto 1fr;align-content:start}\nhtml.cds-narrow .cds-side{position:static;height:auto;flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-3);padding:12px var(--space-4)}\nhtml.cds-narrow .cds-side-menu{display:inline-flex;align-items:center;font-size:14px;font-weight:600;color:var(--on-nav-active);border:1px solid var(--nav-line);border-radius:var(--radius-pill);padding:6px 14px;cursor:pointer}\nhtml.cds-narrow .cds-side-nav,html.cds-narrow .cds-side-foot{display:none;flex-basis:100%}\nhtml.cds-narrow .cds-side-toggle:checked ~ .cds-side-nav,html.cds-narrow .cds-side-toggle:checked ~ .cds-side-foot{display:flex}\nhtml.cds-narrow .cds-side-toggle:focus-visible + .cds-side-menu{outline:2px solid var(--nav-focus);outline-offset:2px}\nhtml.cds-narrow .cds-top{padding:0 var(--space-4)}\nhtml.cds-narrow .cds-app-body{padding:var(--space-5) var(--space-4)}\nhtml.cds-narrow .cds-page-title{font-size:28px;line-height:34px}\nhtml.cds-narrow .cds-page-head{flex-wrap:wrap}\nhtml.cds-narrow .cds-page-head > :not(.txt){flex:1 1 100%;min-width:0;max-width:100%;margin-left:0}\nhtml.cds-narrow .cds-page-head .cds-btn{white-space:normal}\nhtml.cds-narrow .cds-page-head .cds-select,html.cds-narrow .cds-page-head .cds-input{max-width:100%}\nhtml.cds-narrow .cds-grid.two{grid-template-columns:minmax(0,1fr)}\nhtml.cds-tiny .cds-bar-row{grid-template-columns:1fr 56px}\nhtml.cds-tiny .cds-bar-row .trk{grid-column:1 / -1;grid-row:2}\nhtml.cds-tiny .cds-diff{grid-template-columns:1fr}\nhtml.cds-tiny .cds-kv{grid-template-columns:minmax(0,1fr)}\nhtml.cds-tiny .cds-kv dd{border-top:0;padding-top:0}\nhtml.cds-tiny .cds-top-actions .cds-btn.ghost{display:none}\nhtml.cds-tiny .cds-list li{grid-template-columns:minmax(0,1fr)}\n';
29276
29276
  DS_DARK_AUTO_CSS = '@media (prefers-color-scheme: dark) {\n :root:not([data-theme="light"]) {\n --bg: #0b1220; --surface: #111a2b; --surface-sunk: #0e1626; --text: #e6edf5; --muted: #94a3b8; --border: #22304a; --primary: #e6edf5; --on-primary: #0a1628; --accent: #22d3ee; --accent-ink: #67e8f9; --ok: #4ade80; --warn: #fbbf24; --bad: #f87171; --grade-a: #4ade80; --grade-b: #22d3ee; --grade-c: #fbbf24; --grade-d: #fb923c; --grade-f: #f87171; --focus: #67e8f9; --nav-bg: #16233a; --nav-text: #cbd5e1; --nav-label: #8b9ab0; --nav-active: #2a3a56; --on-nav-active: #ffffff; --nav-line: #2a3a56; --nav-badge: #fbbf24; --nav-focus: #22d3ee; --shadow-lift: 0 1px 2px rgba(0,0,0,0.4), 0 8px 24px rgba(0,0,0,0.35);\n }\n}\n';
29277
29277
  }
29278
29278
  });
@@ -29355,6 +29355,17 @@ ${cockpitSidebarHtml(active, opts.capability)}
29355
29355
  <div class="cds-top-actions">
29356
29356
  <div class="cds-size" role="group" aria-label="Text size"><button id="sz-down" type="button" aria-label="Smaller text">A&minus;</button><output id="sz-val" aria-live="polite">${TYPE_DEFAULT}px</output><button id="sz-up" type="button" aria-label="Larger text">A+</button></div>
29357
29357
  <a class="cds-btn ghost" href="${HUB_URL}#do">Members Hub</a>
29358
+ <details class="cds-menu" id="acct-menu">
29359
+ <summary aria-label="Your settings"><span class="cds-avatar sm" id="acct-initials" aria-hidden="true">You</span></summary>
29360
+ <div class="cds-menu-panel" role="menu">
29361
+ <div class="cds-menu-head"><span class="name" id="acct-name">This computer</span><span class="meta">Command OS \xB7 Version ${esc(pkg.version)}</span></div>
29362
+ <a class="cds-menu-item" role="menuitem" href="/agency">Your agency</a>
29363
+ <a class="cds-menu-item" role="menuitem" href="/connections">Connections</a>
29364
+ <a class="cds-menu-item" role="menuitem" href="${HUB_URL}#do">Members Hub</a>
29365
+ <div class="cds-menu-sep" role="separator"></div>
29366
+ <div class="cds-menu-row"><span>Appearance</span><div class="cds-seg" role="group" aria-label="Colour theme"><button type="button" data-theme-choice="auto" aria-pressed="true">Auto</button><button type="button" data-theme-choice="light" aria-pressed="false">Light</button><button type="button" data-theme-choice="dark" aria-pressed="false">Dark</button></div></div>
29367
+ </div>
29368
+ </details>
29358
29369
  </div>
29359
29370
  </header>`;
29360
29371
  }
@@ -29363,9 +29374,10 @@ function cockpitShellClose() {
29363
29374
  }
29364
29375
  function cockpitHeadHtml(title2, opts = {}) {
29365
29376
  return `<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>${esc(title2)}</title>
29377
+ <script data-theme-boot>${COCKPIT_THEME_HEAD_JS}</script>
29366
29378
  <style>${cockpitTokensCss(opts)}${cockpitChromeCss()}${opts.extraCss ?? ""}</style></head>`;
29367
29379
  }
29368
- var esc, HUB_URL, COCKPIT_DATE_JS, TYPE_MIN, TYPE_MAX, TYPE_DEFAULT, TYPE_STORAGE_KEY, DS_UI_PX, NAV, SIDEBAR, link, COCKPIT_TYPE_JS;
29380
+ var esc, HUB_URL, COCKPIT_DATE_JS, TYPE_MIN, TYPE_MAX, TYPE_DEFAULT, TYPE_STORAGE_KEY, THEME_STORAGE_KEY, COCKPIT_THEME_HEAD_JS, DS_UI_PX, NAV, SIDEBAR, link, COCKPIT_TYPE_JS;
29369
29381
  var init_cockpit_shell = __esm({
29370
29382
  "src/command-os/cockpit-shell.ts"() {
29371
29383
  "use strict";
@@ -29403,6 +29415,8 @@ function parseCockpitDate(value){
29403
29415
  TYPE_MAX = 34;
29404
29416
  TYPE_DEFAULT = 18;
29405
29417
  TYPE_STORAGE_KEY = "cmdos-cockpit-fs";
29418
+ THEME_STORAGE_KEY = "cmdos-cockpit-theme";
29419
+ COCKPIT_THEME_HEAD_JS = `(function(){try{var t=localStorage.getItem(${scriptJson(THEME_STORAGE_KEY)});if(t==="light"||t==="dark")document.documentElement.setAttribute("data-theme",t)}catch(e){}})();`;
29406
29420
  DS_UI_PX = 15;
29407
29421
  NAV = [
29408
29422
  { key: "board", href: "/", label: "Board", title: "What is waiting on you, and every client account" },
@@ -29448,6 +29462,18 @@ window.cdsQueueBadge=function(n){try{localStorage.setItem("cmdos-queue-you",Stri
29448
29462
  function paintQueueBadge(){var b=document.getElementById("side-queue-badge");if(!b)return;var n=NaN;try{n=parseInt(localStorage.getItem("cmdos-queue-you"),10)}catch(e){}
29449
29463
  if(n>0){b.textContent=String(n);b.setAttribute("aria-label",n+" waiting on you");b.hidden=false}else{b.hidden=true}}
29450
29464
  paintQueueBadge();
29465
+ /* ThemeSwitch: Auto removes data-theme (the tokens follow the computer); Light or Dark pins it. */
29466
+ (function(){var KEY=${scriptJson(THEME_STORAGE_KEY)},r=document.documentElement,bs=document.querySelectorAll("[data-theme-choice]");
29467
+ function cur(){var t="auto";try{t=localStorage.getItem(KEY)||"auto"}catch(e){}return t==="light"||t==="dark"?t:"auto"}
29468
+ function paint(t){if(t==="auto")r.removeAttribute("data-theme");else r.setAttribute("data-theme",t);for(var i=0;i<bs.length;i++)bs[i].setAttribute("aria-pressed",String(bs[i].getAttribute("data-theme-choice")===t))}
29469
+ for(var i=0;i<bs.length;i++)bs[i].addEventListener("click",function(){var t=this.getAttribute("data-theme-choice");try{if(t==="auto")localStorage.removeItem(KEY);else localStorage.setItem(KEY,t)}catch(e){}paint(t)});
29470
+ paint(cur())})();
29471
+ /* AccountMenu: the operator's own name and initials (set on the work queue), and it closes like a menu. */
29472
+ (function(){var m=document.getElementById("acct-menu");if(!m)return;var nm="";try{nm=localStorage.getItem("cmdos-operator")||""}catch(e){}
29473
+ if(nm){var ini=nm.trim().split(/s+/).slice(0,2).map(function(w){return w[0]||""}).join("").toUpperCase();document.getElementById("acct-initials").textContent=ini||"You";document.getElementById("acct-name").textContent=nm}
29474
+ document.addEventListener("keydown",function(e){if(e.key==="Escape"&&m.open){m.open=false;m.querySelector("summary").focus()}});
29475
+ document.addEventListener("click",function(e){if(m.open&&!m.contains(e.target))m.open=false});
29476
+ var links=m.querySelectorAll("a.cds-menu-item");for(var i=0;i<links.length;i++)links[i].addEventListener("click",function(){m.open=false})})();
29451
29477
  /* Keep the page you are on in view in a long sidebar. */
29452
29478
  (function(){var c=document.querySelector('.cds-side [aria-current="page"]');if(c&&c.scrollIntoView)c.scrollIntoView({block:"center"})})();`;
29453
29479
  }
@@ -32160,11 +32186,13 @@ function connectorInstructions(entry, format, options = {}) {
32160
32186
  }
32161
32187
  return items.map((s, i) => `${ordered ? `${i + 1}.` : "-"} ${text2(s)}`).join("\n") + "\n\n";
32162
32188
  };
32163
- const steps = entry.steps.map((step) => step.startsWith("[UNVERIFIED] ") ? `${step.slice("[UNVERIFIED] ".length)} (not yet checked on a real screen)` : step);
32189
+ const unverified = entry.steps.filter((step) => step.startsWith("[UNVERIFIED] ")).length;
32190
+ const allUnverified = unverified > 0 && unverified === entry.steps.length;
32191
+ const steps = entry.steps.map((step) => step.startsWith("[UNVERIFIED] ") ? allUnverified ? step.slice("[UNVERIFIED] ".length) : `${step.slice("[UNVERIFIED] ".length)} (not yet checked on a real screen)` : step);
32164
32192
  const checkedLabel = connectorCheckedLabel(entry);
32165
32193
  return ((options.includeDefinition === false ? "" : paragraph(entry.whatItIs, "credential-definition")) + (checkedLabel ? paragraph(checkedLabel, "instructions-checked") : "") + heading("What it gives you") + paragraph(entry.gives) + heading("What you need") + paragraph(CONNECTOR_INSTRUCTION_INTROS.needs) + list3(entry.needs) + heading("How to connect") + (entry.builtState === "via-claude" ? paragraph(entry.viaClaude ?? "") : paragraph(CONNECTOR_INSTRUCTION_INTROS.connect) + (entry.before ? paragraph(entry.before) : "") + (html2 ? `<h4>${steps.length} ${steps.length === 1 ? "step" : "steps"}</h4>` : `#### ${steps.length} ${steps.length === 1 ? "step" : "steps"}
32166
32194
 
32167
- `) + list3(steps, true)) + heading("What to say") + paragraph(CONNECTOR_INSTRUCTION_INTROS.say) + list3(entry.say.map((s) => `\u201C${s}\u201D`)) + heading("How to take access back") + paragraph(CONNECTOR_INSTRUCTION_INTROS.revoke) + paragraph(entry.revoke)).trim();
32195
+ `) + (allUnverified ? paragraph("These steps have not been checked on a real screen yet.", "steps-unchecked") : "") + list3(steps, true)) + heading("What to say") + paragraph(CONNECTOR_INSTRUCTION_INTROS.say) + list3(entry.say.map((s) => `\u201C${s}\u201D`)) + heading("How to take access back") + paragraph(CONNECTOR_INSTRUCTION_INTROS.revoke) + paragraph(entry.revoke)).trim();
32168
32196
  }
32169
32197
  var htmlText, markdownText;
32170
32198
  var init_instructions = __esm({
@@ -43457,7 +43485,7 @@ function assessmentAgencyTag(ap = readAgencyProfile()) {
43457
43485
  return `<script>window.COMMAND_OS_AGENCY=${scriptJson(forReport)}</script>`;
43458
43486
  }
43459
43487
  function withCockpitShell(page, screen, extraHead = "") {
43460
- const css2 = `<style>${cockpitTokensCss({ webfont: false })}${cockpitChromeCss()}</style>${extraHead}`;
43488
+ const css2 = `<script data-theme-boot>${COCKPIT_THEME_HEAD_JS}</script><style>${cockpitTokensCss({ webfont: false })}${cockpitChromeCss()}</style>${extraHead}`;
43461
43489
  const header = `${cockpitHeaderHtml(screen)}<script>${COCKPIT_TYPE_JS}</script>`;
43462
43490
  const withCss = page.includes("<!--COCKPIT_SHELL_CSS-->") ? page.replace("<!--COCKPIT_SHELL_CSS-->", css2) : page.replace("</head>", `${css2}</head>`);
43463
43491
  const withHeader = withCss.includes("<!--COCKPIT_HEADER-->") ? withCss.replace("<!--COCKPIT_HEADER-->", header) : withCss.replace(/<body([^>]*)>/, `<body$1>${header}`);
package/guide/guide.html CHANGED
@@ -4,7 +4,7 @@
4
4
  <meta charset="utf-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
6
  <title>GHL Command — User Guide</title>
7
- <!-- guides-hash: e64ce45407967cb5 -->
7
+ <!-- guides-hash: 15d2093538a1928d -->
8
8
  <style>
9
9
  /* Deliberately light in every environment, including a dark-mode OS. This is a
10
10
  reference document people read at length, print, and save to PDF, and a page
@@ -1204,7 +1204,7 @@ Before you build: look up the real calendar, the real workflows you are removing
1204
1204
  </div></div>
1205
1205
  <div class="shell"><main class="gview">
1206
1206
  <a class="back" href="#top">&#8592; All guides</a>
1207
- <p class="gpara">This guide is free to read; the connector tools it describes answer with upgrade info on the $97 licence.</p>
1207
+ <p class="gpara">This guide is free to read; the connector tools it describes answer with upgrade info on the $97 license.</p>
1208
1208
  <div class="gsec"><h2>Stripe · not yet checked</h2>
1209
1209
  <p class="gpara">A restricted key is a password Stripe issues that lets this machine read only the parts of your account you allow.</p>
1210
1210
  <p class="gpara">not yet checked</p>
@@ -1219,12 +1219,13 @@ Before you build: look up the real calendar, the real workflows you are removing
1219
1219
  <h3>How to connect</h3>
1220
1220
  <p class="gpara">Follow these steps to give this machine access.</p>
1221
1221
  <h4>5 steps</h4>
1222
+ <p class="gpara">These steps have not been checked on a real screen yet.</p>
1222
1223
  <ol class="steps">
1223
- <li>Sign in to your Stripe Dashboard and choose the account you want to read. (not yet checked on a real screen)</li>
1224
- <li>Open Developers, then API keys. If your dashboard shows Workbench, open its API keys page. (not yet checked on a real screen)</li>
1225
- <li>Under Restricted keys, choose Create restricted key and give it a name you recognise. (not yet checked on a real screen)</li>
1226
- <li>Set Customers, Invoices, Subscriptions, Charges and Products to Read. Leave other permissions at None, then create the key. (not yet checked on a real screen)</li>
1227
- <li>Copy the key into the password field on the Stripe card on the Connections screen, add an account label if useful, and choose Connect. Use a live-mode key for real income. (not yet checked on a real screen)</li>
1224
+ <li>Sign in to your Stripe Dashboard and choose the account you want to read.</li>
1225
+ <li>Open Developers, then API keys. If your dashboard shows Workbench, open its API keys page.</li>
1226
+ <li>Under Restricted keys, choose Create restricted key and give it a name you recognise.</li>
1227
+ <li>Set Customers, Invoices, Subscriptions, Charges and Products to Read. Leave other permissions at None, then create the key.</li>
1228
+ <li>Copy the key into the password field on the Stripe card on the Connections screen, add an account label if useful, and choose Connect. Use a live-mode key for real income.</li>
1228
1229
  </ol>
1229
1230
  <h3>What to say</h3>
1230
1231
  <p class="gpara">In a Claude chat you can say one of these to connect or use it.</p>
@@ -1686,7 +1687,7 @@ Show me the first ten rows in the chat so I can sanity check them before you wri
1686
1687
  </ul>
1687
1688
  </div>
1688
1689
  <div class="gsec"><h2>Where people go wrong</h2>
1689
- <div style="overflow-x:auto"><table class="wrongtbl"><tr><th>What happened</th><th>The fix</th></tr><tr><td>&quot;I use Claude on the website. Where do I paste the command?&quot;</td><td>The install needs the Claude Desktop app or Claude Code on this computer. A browser tab cannot run it. The Members Hub page Which Claude do I use? shows the difference.</td></tr><tr><td>&quot;I ran the installer and Claude says it has no GHL Command tools.&quot;</td><td>Quit Claude fully (Cmd+Q on a Mac; system tray on Windows) and open it again. The tools load on a fresh start, never into a window that was already open.</td></tr><tr><td>&quot;GoHighLevel says API access is not on my plan.&quot;</td><td>Only Unlimited ($297) and Agency Pro ($497) include the API. On Starter ($97) nothing can connect, so upgrade the plan first.</td></tr><tr><td>&quot;It said step 1 of 2 done. Is it broken?&quot;</td><td>No, it is honest. Do step 2 (the browser login) and you are finished.</td></tr><tr><td>&quot;The workflow tools give errors after the login.&quot;</td><td>Restart Claude completely. Quit and reopen. The new login only loads on a fresh start.</td></tr><tr><td>&quot;I upgraded to paid. Do I reinstall?&quot;</td><td>No. Say &quot;set up GHL Command&quot; and paste only your email and new key. Everything you set up before is kept.</td></tr><tr><td>&quot;GHL Command shows only Connection closed, so it looks like my licence stopped working.&quot;</td><td>The copy of GHL Command saved on your computer is incomplete. Your licence is fine. Quit Claude. In Finder, click Go in the menu bar, then Go to Folder, type <code>~/.npm</code> and press Return. Drag the folder named <code>_npx</code> to the Trash. Reopen Claude and it downloads a fresh copy. This only removes downloaded program copies, nothing of yours. On Windows this is untested: email support@ghlcommand.com.</td></tr></table></div>
1690
+ <div style="overflow-x:auto"><table class="wrongtbl"><tr><th>What happened</th><th>The fix</th></tr><tr><td>&quot;I use Claude on the website. Where do I paste the command?&quot;</td><td>The install needs the Claude Desktop app or Claude Code on this computer. A browser tab cannot run it. The Members Hub page Which Claude do I use? shows the difference.</td></tr><tr><td>&quot;I ran the installer and Claude says it has no GHL Command tools.&quot;</td><td>Quit Claude fully (Cmd+Q on a Mac; system tray on Windows) and open it again. The tools load on a fresh start, never into a window that was already open.</td></tr><tr><td>&quot;GoHighLevel says API access is not on my plan.&quot;</td><td>Only Unlimited ($297) and Agency Pro ($497) include the API. On Starter ($97) nothing can connect, so upgrade the plan first.</td></tr><tr><td>&quot;It said step 1 of 2 done. Is it broken?&quot;</td><td>No, it is honest. Do step 2 (the browser login) and you are finished.</td></tr><tr><td>&quot;The workflow tools give errors after the login.&quot;</td><td>Restart Claude completely. Quit and reopen. The new login only loads on a fresh start.</td></tr><tr><td>&quot;I upgraded to paid. Do I reinstall?&quot;</td><td>No. Say &quot;set up GHL Command&quot; and paste only your email and new key. Everything you set up before is kept.</td></tr><tr><td>&quot;GHL Command shows only Connection closed, so it looks like my license stopped working.&quot;</td><td>The copy of GHL Command saved on your computer is incomplete. Your license is fine. Quit Claude. In Finder, click Go in the menu bar, then Go to Folder, type <code>~/.npm</code> and press Return. Drag the folder named <code>_npx</code> to the Trash. Reopen Claude and it downloads a fresh copy. This only removes downloaded program copies, nothing of yours. On Windows this is untested: email support@ghlcommand.com.</td></tr></table></div>
1690
1691
  </div>
1691
1692
  <p class="gfoot">Works in Claude Desktop and Claude Code. Stuck? Email support@ghlcommand.com and a human answers.</p>
1692
1693
  </main></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elitedcs/ghl-mcp",
3
- "version": "3.88.0",
3
+ "version": "3.88.1",
4
4
  "mcpName": "io.github.drjerryrelth/ghl-command",
5
5
  "description": "GoHighLevel MCP Server for Claude. 250 tools — full CRM, automation, marketing control, account-wide workflow audit, live funnel-capture verification, and the only programmatic GHL workflow builder, now multi-tenant across client accounts.",
6
6
  "main": "dist/index.js",