{
  "id": "terminal-ledger-config",
  "name": "Config Editor",
  "theme": "terminal-ledger",
  "category": "Settings & Forms",
  "description": "Configuration as key rows where each value shows its source — default, file, or environment — because the surprising bug is always precedence.",
  "layout": "Two-pane split: a section list on the left and key rows on the right, each row a four-column grid of key, value, source badge and a reset control that only appears when overridden.",
  "modules": [
    {
      "key": "sections",
      "name": "Section list",
      "html": "\n<aside class=\"sec\"><ul><li class=\"on\">INGEST</li><li>CONSUMER <em>3</em></li><li>STORE</li><li>AUTH <em>1</em></li><li>TELEMETRY</li><li>EXPERIMENTAL</li></ul><p class=\"sec-f\">4 keys overridden<br>from defaults</p></aside>"
    },
    {
      "key": "keys",
      "name": "Key rows",
      "html": "\n<div class=\"keys\">\n  <div class=\"kh\"><b>INGEST</b><span>12 keys</span><span class=\"kh-sp\"></span><label><input type=\"checkbox\" checked> hide defaults</label></div>\n  <div class=\"kr ovr\"><code>ingest.batch_size</code><input type=\"text\" value=\"2048\"><span class=\"src file\">config.toml</span><button type=\"button\">RESET</button></div>\n  <div class=\"kr ovr\"><code>ingest.rebalance_timeout_ms</code><input type=\"text\" value=\"15000\"><span class=\"src env\">ENV</span><button type=\"button\">RESET</button></div>\n  <div class=\"kr\"><code>ingest.max_poll_records</code><input type=\"text\" value=\"500\"><span class=\"src def\">default</span><span></span></div>\n  <div class=\"kr ovr\"><code>ingest.heartbeat_ms</code><input type=\"text\" value=\"3000\"><span class=\"src file\">config.toml</span><button type=\"button\">RESET</button></div>\n  <div class=\"kr\"><code>ingest.session_timeout_ms</code><input type=\"text\" value=\"45000\"><span class=\"src def\">default</span><span></span></div>\n  <div class=\"kr warn\"><code>ingest.auto_evict</code><input type=\"text\" value=\"false\"><span class=\"src def\">default</span><span></span></div>\n</div>"
    },
    {
      "key": "note",
      "name": "Precedence note",
      "html": "\n<footer class=\"pn\"><b>PRECEDENCE</b> ENV &gt; config.toml &gt; default. A key set in more than one place shows only the winning source. <span class=\"pn-w\">ingest.auto_evict is false, which is what INC-0418 was about.</span></footer>"
    }
  ],
  "moduleCount": 3,
  "reorderable": false,
  "meta": {
    "id": "terminal-ledger-config",
    "model": "Claude Opus 5",
    "author": "Claude Code",
    "createdAt": "2026-08-29T18:41:55+09:00",
    "updatedAt": "2026-08-29T18:41:55+09:00",
    "version": "1.0.0",
    "isNew": false
  },
  "link": "/api/v1/designs/terminal-ledger-config.json",
  "structure": "Two-pane split: a section list on the left and key rows on the right, each row a four-column grid of key, value, source badge and a reset control that only appears when overridden.",
  "html": "<div class=\"dz dz-terminal-ledger-config\" data-design=\"terminal-ledger-config\" data-theme=\"terminal-ledger\">\n<section class=\"dz-mod\" data-mod=\"sections\" aria-label=\"Section list\">\n<aside class=\"sec\"><ul><li class=\"on\">INGEST</li><li>CONSUMER <em>3</em></li><li>STORE</li><li>AUTH <em>1</em></li><li>TELEMETRY</li><li>EXPERIMENTAL</li></ul><p class=\"sec-f\">4 keys overridden<br>from defaults</p></aside></section><section class=\"dz-mod\" data-mod=\"keys\" aria-label=\"Key rows\">\n<div class=\"keys\">\n  <div class=\"kh\"><b>INGEST</b><span>12 keys</span><span class=\"kh-sp\"></span><label><input type=\"checkbox\" checked> hide defaults</label></div>\n  <div class=\"kr ovr\"><code>ingest.batch_size</code><input type=\"text\" value=\"2048\"><span class=\"src file\">config.toml</span><button type=\"button\">RESET</button></div>\n  <div class=\"kr ovr\"><code>ingest.rebalance_timeout_ms</code><input type=\"text\" value=\"15000\"><span class=\"src env\">ENV</span><button type=\"button\">RESET</button></div>\n  <div class=\"kr\"><code>ingest.max_poll_records</code><input type=\"text\" value=\"500\"><span class=\"src def\">default</span><span></span></div>\n  <div class=\"kr ovr\"><code>ingest.heartbeat_ms</code><input type=\"text\" value=\"3000\"><span class=\"src file\">config.toml</span><button type=\"button\">RESET</button></div>\n  <div class=\"kr\"><code>ingest.session_timeout_ms</code><input type=\"text\" value=\"45000\"><span class=\"src def\">default</span><span></span></div>\n  <div class=\"kr warn\"><code>ingest.auto_evict</code><input type=\"text\" value=\"false\"><span class=\"src def\">default</span><span></span></div>\n</div></section><section class=\"dz-mod\" data-mod=\"note\" aria-label=\"Precedence note\">\n<footer class=\"pn\"><b>PRECEDENCE</b> ENV &gt; config.toml &gt; default. A key set in more than one place shows only the winning source. <span class=\"pn-w\">ingest.auto_evict is false, which is what INC-0418 was about.</span></footer></section>\n</div>",
  "css": "\n.dz-terminal-ledger-config { background: var(--background); color: var(--foreground); font-family: var(--pv-mono); font-size: 12.5px; display: grid; grid-template-columns: 180px minmax(0, 1fr); grid-template-rows: minmax(0, 1fr) auto; min-height: 500px; }\n.dz-terminal-ledger-config .sec { border-right: var(--pv-bw) solid var(--border); padding: 12px 0; }\n.dz-terminal-ledger-config .sec ul { list-style: none; margin: 0; padding: 0; }\n.dz-terminal-ledger-config .sec li { display: flex; justify-content: space-between; padding: 7px 14px; font-size: 11.5px; letter-spacing: .08em; color: var(--muted-foreground); cursor: pointer; transition: background var(--dur) var(--ease), color var(--dur) var(--ease); }\n.dz-terminal-ledger-config .sec li:hover { background: var(--muted); }\n.dz-terminal-ledger-config .sec li.on { background: var(--foreground); color: var(--background); }\n.dz-terminal-ledger-config .sec em { font-style: normal; font-size: 10.5px; color: var(--chart-4); }\n.dz-terminal-ledger-config .sec-f { margin: 16px 14px 0; padding-top: 12px; border-top: var(--pv-bw) solid var(--border); font-size: 11px; line-height: 1.5; color: var(--muted-foreground); }\n.dz-terminal-ledger-config .keys { padding: 0; overflow-y: auto; }\n.dz-terminal-ledger-config .kh { display: flex; align-items: center; gap: 12px; padding: 10px 16px; border-bottom: var(--pv-bw) solid var(--foreground); font-size: 11px; letter-spacing: .12em; }\n.dz-terminal-ledger-config .kh span { color: var(--muted-foreground); letter-spacing: 0; }\n.dz-terminal-ledger-config .kh-sp { flex: 1; }\n.dz-terminal-ledger-config .kh label { display: flex; align-items: center; gap: 6px; letter-spacing: 0; color: var(--muted-foreground); cursor: pointer; }\n.dz-terminal-ledger-config .kh input { accent-color: var(--primary); }\n.dz-terminal-ledger-config .kr { display: grid; grid-template-columns: minmax(0, 1fr) 160px 96px 62px; gap: 12px; align-items: center; padding: 8px 16px; border-bottom: var(--pv-bw) solid var(--border); border-left: 2px solid transparent; }\n.dz-terminal-ledger-config .kr.ovr { border-left-color: var(--primary); }\n.dz-terminal-ledger-config .kr.warn { border-left-color: var(--chart-4); }\n.dz-terminal-ledger-config .kr code { font-family: inherit; font-size: 12.5px; }\n.dz-terminal-ledger-config .kr input { font: inherit; font-size: 12.5px; padding: 5px 9px; border: var(--pv-bw) solid var(--input); background: var(--muted); color: var(--foreground); width: 100%; }\n.dz-terminal-ledger-config .kr input:focus-visible { outline: 2px solid var(--ring); outline-offset: -2px; }\n.dz-terminal-ledger-config .src { font-size: 10.5px; letter-spacing: .06em; padding: 2px 7px; text-align: center; }\n.dz-terminal-ledger-config .src.def { color: var(--muted-foreground); border: var(--pv-bw) solid var(--border); }\n.dz-terminal-ledger-config .src.file { color: var(--primary); border: var(--pv-bw) solid var(--primary); }\n.dz-terminal-ledger-config .src.env { background: var(--primary); color: var(--primary-foreground); }\n.dz-terminal-ledger-config .kr button { font: inherit; font-size: 10px; letter-spacing: .08em; padding: 4px 7px; border: var(--pv-bw) solid var(--border); background: var(--background); color: var(--muted-foreground); cursor: pointer; transition: color var(--dur) var(--ease), border-color var(--dur) var(--ease); }\n.dz-terminal-ledger-config .kr button:hover { color: var(--destructive); border-color: var(--destructive); }\n.dz-terminal-ledger-config .pn { grid-column: 1 / -1; padding: 10px 16px; border-top: var(--pv-bw) solid var(--border); font-size: 11.5px; color: var(--muted-foreground); line-height: 1.55; }\n.dz-terminal-ledger-config .pn b { letter-spacing: .12em; color: var(--foreground); margin-right: 8px; }\n.dz-terminal-ledger-config .pn-w { color: var(--chart-4); }\n@media (prefers-reduced-motion: reduce) { .dz-terminal-ledger-config *, .dz-terminal-ledger-config *::before, .dz-terminal-ledger-config *::after { transition-duration: 1ms !important; animation-duration: 1ms !important; } }",
  "requiredTheme": "/api/v1/themes/terminal-ledger.json",
  "googleFontsHref": "https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap"
}