/* ============================================================================
   InkBlock UI — shared design system
   Version: 1.0.0
   Source of record: 01-shared/design-system/inkblock-ui.css
   Authority: InkBlock_Brand_Logic_Art_Direction_Master_Prompt.md v1.0

   Do not fork this file. Product surfaces consume it either by <link> or by
   the generated inline block written by sync-ui.py between the markers
   INKBLOCK-UI:BEGIN / INKBLOCK-UI:END. Product-specific CSS must reference
   --ib-* tokens only; no raw hex in product stylesheets.

   Hierarchy engine: five tones of ink (near-black core, dense black, middle
   grey, pale grey, paper white). Internal logic only — never labelled in UI.
   ============================================================================ */

/* Cascade layers: product CSS is unlayered and therefore always wins over the
   shared base and component layers. Tokens stay unlayered (custom properties
   only) so products can alias them freely. */
@layer ib-base, ib-components;

/* --- 1. Token layer :: light (paper-dominant, default) -------------------- */

:root {
  color-scheme: light;

  /* Five tones of ink — information depth, not decoration */
  --ib-ink-core:    #0b0b0c;  /* tone 1 — source, authority, confirmed record */
  --ib-ink-dense:   #22221f;  /* tone 2 — primary content, active relations   */
  --ib-ink-mid:     #4a4a44;  /* tone 3 — context, secondary, inactive        */
  --ib-ink-pale:    #6f6f66;  /* tone 4 — history, projection, uncertainty    */
  --ib-ink-faint:   #b8b8b0;  /* tone 4b — disabled, ghosted                  */
  --ib-paper:       #fafaf8;  /* tone 5 — silence, space, separation          */

  /* Surfaces */
  --ib-bg:          var(--ib-paper);
  --ib-bg-raised:   #ffffff;
  --ib-bg-sunken:   #f3f2ee;
  --ib-bg-hover:    #eeede8;
  --ib-bg-active:   #e6e5df;
  --ib-bg-inverse:  #131413;

  /* Text */
  --ib-text:        var(--ib-ink-dense);
  --ib-text-strong: var(--ib-ink-core);
  --ib-text-2:      var(--ib-ink-mid);
  --ib-text-3:      var(--ib-ink-pale);
  --ib-text-disabled: var(--ib-ink-faint);
  --ib-text-inverse:#f2f2ee;

  /* Rules, datum lines, registration */
  --ib-line:        #deddd7;
  --ib-line-strong: #c3c2ba;
  --ib-line-datum:  var(--ib-ink-core);
  --ib-focus:       #2f8276;

  /* Signal — live alignment, confirmation, selected relation */
  --ib-signal:        #2f8276;
  --ib-signal-hover:  #256a60;
  --ib-signal-active: #1c534b;
  --ib-signal-soft:   #e1efec;
  --ib-signal-text:   #1f6459;
  --ib-signal-on:     #ffffff;

  /* Exception — genuine warning, conflict, meaningful change only */
  --ib-exception:      #a8432c;
  --ib-exception-hover:#8d3624;
  --ib-exception-soft: #f6e7e2;
  --ib-exception-text: #8d3624;
  --ib-exception-on:   #ffffff;

  /* Pending / in-review — derived from ink tones, never a fourth brand hue */
  --ib-pending-soft:  #efeee8;
  --ib-pending-text:  var(--ib-ink-mid);


  /* Identity ramp — distinguishes people or series without introducing hues.
     Identity is carried by the mark and its initials, not by a colour field. */
  --ib-id-1: #0b0b0c; --ib-id-1-on: #fafaf8;
  --ib-id-2: #2f8276; --ib-id-2-on: #ffffff;
  --ib-id-3: #4a4a44; --ib-id-3-on: #fafaf8;
  --ib-id-4: #1c534b; --ib-id-4-on: #ffffff;
  --ib-id-5: #33332f; --ib-id-5-on: #fafaf8;
  --ib-id-6: #6b6b62; --ib-id-6-on: #fafaf8;

  /* Typography */
  --ib-font-sans: "Geist", "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --ib-font-mono: "Geist Mono", "JetBrains Mono", "SFMono-Regular", ui-monospace, Menlo, Consolas, "Liberation Mono", monospace;
  --ib-font-zh: "Noto Sans SC", "Microsoft YaHei UI", "PingFang SC", var(--ib-font-sans);

  --ib-fs-9:  9px;
  --ib-fs-10: 10px;
  --ib-fs-11: 11px;
  --ib-fs-12: 12px;
  --ib-fs-13: 13px;   /* interface base */
  --ib-fs-15: 15px;
  --ib-fs-18: 18px;
  --ib-fs-22: 22px;
  --ib-fs-28: 28px;
  --ib-fs-40: 40px;

  --ib-lh-tight: 1.25;
  --ib-lh:       1.5;
  --ib-lh-loose: 1.75;

  --ib-track-mono: 0.08em;   /* metadata, IDs, timestamps */
  --ib-track-eyebrow: 0.13em;

  /* Space — 4px construction grid */
  --ib-s1: 4px;
  --ib-s2: 8px;
  --ib-s3: 12px;
  --ib-s4: 16px;
  --ib-s5: 24px;
  --ib-s6: 32px;
  --ib-s7: 48px;
  --ib-s8: 72px;

  /* Geometry — architectural, not rounded-card SaaS */
  --ib-r:    2px;
  --ib-r-lg: 3px;
  --ib-r-pill: 999px;
  --ib-border: 1px solid var(--ib-line);
  --ib-hairline: 1px solid var(--ib-line-strong);

  /* Elevation — restrained; depth comes from hierarchy, not glow */
  --ib-shadow-1: 0 1px 2px rgba(11, 11, 12, 0.05);
  --ib-shadow-2: 0 8px 24px rgba(11, 11, 12, 0.08);
  --ib-shadow-3: 0 18px 55px rgba(11, 11, 12, 0.10);

  /* Motion — deliberate, quiet */
  --ib-dur-1: 120ms;
  --ib-dur-2: 220ms;
  --ib-dur-3: 420ms;
  --ib-ease: cubic-bezier(0.22, 0.61, 0.36, 1);
  --ib-ease-snap: cubic-bezier(0.16, 0.84, 0.30, 1);

  --ib-z-sticky: 10;
  --ib-z-overlay: 100;
  --ib-z-toast: 200;
}

/* --- 2. Token layer :: dark (ink-dominant) -------------------------------- */

:root[data-ib-theme="dark"] {
  color-scheme: dark;

  --ib-ink-core:    #f4f3ef;
  --ib-ink-dense:   #e4e2dc;
  --ib-ink-mid:     #a9a59d;
  --ib-ink-pale:    #8b877e;
  --ib-ink-faint:   #55524b;
  --ib-paper:       #111211;

  --ib-bg:          var(--ib-paper);
  --ib-bg-raised:   #191a19;
  --ib-bg-sunken:   #0c0d0c;
  --ib-bg-hover:    #232421;
  --ib-bg-active:   #2b2c28;
  --ib-bg-inverse:  #fafaf8;

  --ib-text:        var(--ib-ink-dense);
  --ib-text-strong: var(--ib-ink-core);
  --ib-text-2:      var(--ib-ink-mid);
  --ib-text-3:      var(--ib-ink-pale);
  --ib-text-disabled: var(--ib-ink-faint);
  --ib-text-inverse:#12130f;

  --ib-line:        #2d2e2a;
  --ib-line-strong: #43443e;
  --ib-line-datum:  #e4e2dc;
  --ib-focus:       #5cb3a4;

  --ib-signal:        #4e9e90;
  --ib-signal-hover:  #63b3a4;
  --ib-signal-active: #7cc3b6;
  --ib-signal-soft:   #16302c;
  --ib-signal-text:   #7cc3b6;
  --ib-signal-on:     #08110f;

  --ib-exception:      #c8664c;
  --ib-exception-hover:#d87a60;
  --ib-exception-soft: #331a13;
  --ib-exception-text: #e0917b;
  --ib-exception-on:   #170907;

  --ib-pending-soft:  #232421;
  --ib-pending-text:  var(--ib-ink-mid);


  --ib-id-1: #e4e2dc; --ib-id-1-on: #111211;
  --ib-id-2: #4e9e90; --ib-id-2-on: #08110f;
  --ib-id-3: #a9a59d; --ib-id-3-on: #111211;
  --ib-id-4: #7cc3b6; --ib-id-4-on: #08110f;
  --ib-id-5: #c9c5bd; --ib-id-5-on: #111211;
  --ib-id-6: #837e76; --ib-id-6-on: #111211;

  --ib-shadow-1: 0 1px 2px rgba(0, 0, 0, 0.5);
  --ib-shadow-2: 0 8px 24px rgba(0, 0, 0, 0.55);
  --ib-shadow-3: 0 18px 55px rgba(0, 0, 0, 0.6);
}

/* System preference honoured only when no explicit choice is stamped */
@media (prefers-color-scheme: dark) {
  :root:not([data-ib-theme="light"]):not([data-ib-theme="dark"]) {
    color-scheme: dark;
    --ib-ink-core:#f4f3ef; --ib-ink-dense:#e4e2dc; --ib-ink-mid:#a9a59d;
    --ib-ink-pale:#8b877e; --ib-ink-faint:#55524b; --ib-paper:#111211;
    --ib-bg:var(--ib-paper); --ib-bg-raised:#191a19; --ib-bg-sunken:#0c0d0c;
    --ib-bg-hover:#232421; --ib-bg-active:#2b2c28; --ib-bg-inverse:#fafaf8;
    --ib-text:var(--ib-ink-dense); --ib-text-strong:var(--ib-ink-core);
    --ib-text-2:var(--ib-ink-mid); --ib-text-3:var(--ib-ink-pale);
    --ib-text-disabled:var(--ib-ink-faint); --ib-text-inverse:#12130f;
    --ib-line:#2d2e2a; --ib-line-strong:#43443e; --ib-line-datum:#e4e2dc; --ib-focus:#5cb3a4;
    --ib-signal:#4e9e90; --ib-signal-hover:#63b3a4; --ib-signal-active:#7cc3b6;
    --ib-signal-soft:#16302c; --ib-signal-text:#7cc3b6; --ib-signal-on:#08110f;
    --ib-exception:#c8664c; --ib-exception-hover:#d87a60; --ib-exception-soft:#331a13;
    --ib-exception-text:#e0917b; --ib-exception-on:#170907;
    --ib-pending-soft:#232421; --ib-pending-text:var(--ib-ink-mid);
    --ib-id-1: #e4e2dc; --ib-id-1-on: #111211; --ib-id-2: #4e9e90; --ib-id-2-on: #08110f; --ib-id-3: #a9a59d; --ib-id-3-on: #111211; --ib-id-4: #7cc3b6; --ib-id-4-on: #08110f; --ib-id-5: #c9c5bd; --ib-id-5-on: #111211; --ib-id-6: #837e76; --ib-id-6-on: #111211;
    --ib-shadow-1:0 1px 2px rgba(0,0,0,.5);
    --ib-shadow-2:0 8px 24px rgba(0,0,0,.55);
    --ib-shadow-3:0 18px 55px rgba(0,0,0,.6);
  }
}

@layer ib-base {

/* --- 3. Base ------------------------------------------------------------- */

*, *::before, *::after { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; }

/* Root scope: put class="ib-app" on the document body (or the app root). */
.ib-app {
  margin: 0;
  font-family: var(--ib-font-sans);
  font-size: var(--ib-fs-13);
  line-height: var(--ib-lh);
  color: var(--ib-text);
  background: var(--ib-bg);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

.ib-app :where(button, input, textarea, select) {
  font-family: inherit;
  font-size: inherit;
  color: inherit;
}

.ib-app :where(h1, h2, h3, h4, h5, h6) {
  margin: 0;
  font-weight: 600;
  line-height: var(--ib-lh-tight);
  letter-spacing: -0.01em;
  color: var(--ib-text-strong);
}
.ib-app h1 { font-size: var(--ib-fs-28); }
.ib-app h2 { font-size: var(--ib-fs-22); }
.ib-app h3 { font-size: var(--ib-fs-18); }
.ib-app h4 { font-size: var(--ib-fs-15); }

.ib-app p { margin: 0 0 var(--ib-s3); }

.ib-app a { color: var(--ib-signal-text); text-decoration: none; border-bottom: 1px solid currentColor; }
.ib-app a:hover { color: var(--ib-signal-hover); }

.ib-app :where(a, button, input, textarea, select, [tabindex]):focus-visible {
  outline: 2px solid var(--ib-focus);
  outline-offset: 1px;
}

.ib-app ::selection { background: var(--ib-signal-soft); color: var(--ib-text-strong); }

.ib-app ::-webkit-scrollbar { width: 10px; height: 10px; }
.ib-app ::-webkit-scrollbar-track { background: var(--ib-bg-sunken); }
.ib-app ::-webkit-scrollbar-thumb { background: var(--ib-line-strong); border: 2px solid var(--ib-bg-sunken); }
.ib-app ::-webkit-scrollbar-thumb:hover { background: var(--ib-text-3); }

}

@layer ib-components {

/* --- 4. Type utilities --------------------------------------------------- */

.ib-mono    { font-family: var(--ib-font-mono); letter-spacing: var(--ib-track-mono); }
.ib-meta    { font-family: var(--ib-font-mono); font-size: var(--ib-fs-10); letter-spacing: var(--ib-track-mono); color: var(--ib-text-2); }
.ib-eyebrow { font-family: var(--ib-font-mono); font-size: var(--ib-fs-10); letter-spacing: var(--ib-track-eyebrow); text-transform: uppercase; color: var(--ib-text-3); }
.ib-lede    { font-size: var(--ib-fs-15); line-height: var(--ib-lh-loose); color: var(--ib-text-2); max-width: 68ch; }
.ib-muted   { color: var(--ib-text-2); }
.ib-faint   { color: var(--ib-text-3); }
.ib-strong  { color: var(--ib-text-strong); font-weight: 600; }
.ib-zh      { font-family: var(--ib-font-zh); }
.ib-num     { font-family: var(--ib-font-mono); font-variant-numeric: tabular-nums; }

/* --- 5. Structure: datum, rule, registration ----------------------------- */

.ib-rule       { border: 0; border-top: var(--ib-border); margin: var(--ib-s5) 0; }
.ib-rule-datum { border: 0; border-top: 1px solid var(--ib-line-datum); margin: var(--ib-s5) 0; }

/* Four restrained registration marks on a field */
.ib-registered { position: relative; }
.ib-registered::before,
.ib-registered::after {
  content: ""; position: absolute; width: 7px; height: 7px; pointer-events: none;
  border-color: var(--ib-line-strong); border-style: solid; border-width: 0;
}
.ib-registered::before { top: 0; left: 0; border-top-width: 1px; border-left-width: 1px; }
.ib-registered::after  { bottom: 0; right: 0; border-bottom-width: 1px; border-right-width: 1px; }

.ib-header {
  display: flex; align-items: baseline; gap: var(--ib-s3); flex-wrap: wrap;
  padding: var(--ib-s4) var(--ib-s5);
  background: var(--ib-bg);
  border-bottom: 1px solid var(--ib-line-datum);
}
.ib-header .ib-wordmark { font-size: var(--ib-fs-15); font-weight: 600; letter-spacing: -0.01em; color: var(--ib-text-strong); }
.ib-header .ib-wordmark .ib-layer { color: var(--ib-text-2); font-weight: 400; }
.ib-header-spacer { flex: 1 1 auto; }

.ib-panel {
  background: var(--ib-bg-raised);
  border: var(--ib-border);
  border-radius: var(--ib-r);
  padding: var(--ib-s4);
}
.ib-panel-flush { padding: 0; overflow: hidden; }
.ib-panel-sunken { background: var(--ib-bg-sunken); }

.ib-bar {
  display: flex; align-items: center; gap: var(--ib-s2); flex-wrap: wrap;
  padding: var(--ib-s2) var(--ib-s3);
  background: var(--ib-bg-raised);
  border: var(--ib-border);
  border-radius: var(--ib-r);
}

.ib-stack   { display: flex; flex-direction: column; gap: var(--ib-s3); }
.ib-row     { display: flex; align-items: center; gap: var(--ib-s2); flex-wrap: wrap; }
.ib-grid    { display: grid; gap: var(--ib-s3); }
.ib-wrap    { max-width: 1240px; margin: 0 auto; padding: var(--ib-s5); }

/* --- 6. Controls --------------------------------------------------------- */

.ib-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--ib-s1);
  padding: 7px 14px;
  font-size: var(--ib-fs-12); font-weight: 500; line-height: 1.2;
  color: var(--ib-text);
  background: var(--ib-bg-raised);
  border: 1px solid var(--ib-line-strong);
  border-radius: var(--ib-r);
  cursor: pointer;
  white-space: nowrap;
  transition: background var(--ib-dur-1) var(--ib-ease), border-color var(--ib-dur-1) var(--ib-ease), color var(--ib-dur-1) var(--ib-ease);
}
.ib-btn:hover:not(:disabled) { background: var(--ib-bg-hover); border-color: var(--ib-text-3); }
.ib-btn:active:not(:disabled) { background: var(--ib-bg-active); }
.ib-btn:disabled { color: var(--ib-text-disabled); border-color: var(--ib-line); background: var(--ib-bg-sunken); cursor: not-allowed; }

.ib-btn-primary { background: var(--ib-ink-core); border-color: var(--ib-ink-core); color: var(--ib-paper); }
.ib-btn-primary:hover:not(:disabled) { background: var(--ib-ink-dense); border-color: var(--ib-ink-dense); color: var(--ib-paper); }

.ib-btn-signal { background: var(--ib-signal); border-color: var(--ib-signal); color: var(--ib-signal-on); }
.ib-btn-signal:hover:not(:disabled) { background: var(--ib-signal-hover); border-color: var(--ib-signal-hover); color: var(--ib-signal-on); }

.ib-btn-exception { background: transparent; border-color: var(--ib-exception); color: var(--ib-exception-text); }
.ib-btn-exception:hover:not(:disabled) { background: var(--ib-exception-soft); }

.ib-btn-ghost { background: transparent; border-color: transparent; color: var(--ib-text-2); }
.ib-btn-ghost:hover:not(:disabled) { background: var(--ib-bg-hover); color: var(--ib-text); }

.ib-btn-sm { padding: 4px 9px; font-size: var(--ib-fs-11); }
.ib-btn-icon { padding: 0; width: 24px; height: 24px; }
.ib-btn.is-on { background: var(--ib-signal-soft); border-color: var(--ib-signal); color: var(--ib-signal-text); }

.ib-input, .ib-select, .ib-textarea {
  padding: 6px 9px;
  font-size: var(--ib-fs-12);
  color: var(--ib-text);
  background: var(--ib-bg-raised);
  border: var(--ib-border);
  border-radius: var(--ib-r);
  transition: border-color var(--ib-dur-1) var(--ib-ease);
}
.ib-input:hover, .ib-select:hover, .ib-textarea:hover { border-color: var(--ib-line-strong); }
.ib-input:focus, .ib-select:focus, .ib-textarea:focus { border-color: var(--ib-signal); outline: none; box-shadow: 0 0 0 1px var(--ib-signal); }
.ib-input::placeholder, .ib-textarea::placeholder { color: var(--ib-text-3); }
.ib-input:disabled, .ib-select:disabled, .ib-textarea:disabled { background: var(--ib-bg-sunken); color: var(--ib-text-disabled); }
.ib-textarea { font-family: var(--ib-font-mono); line-height: var(--ib-lh-loose); resize: vertical; }
.ib-field { display: flex; flex-direction: column; gap: var(--ib-s1); }
.ib-label { font-family: var(--ib-font-mono); font-size: var(--ib-fs-10); letter-spacing: var(--ib-track-mono); text-transform: uppercase; color: var(--ib-text-3); }

.ib-check { accent-color: var(--ib-signal); }

/* --- 7. Status vocabulary ------------------------------------------------ */

.ib-tag {
  display: inline-flex; align-items: center; gap: var(--ib-s1);
  padding: 2px 7px;
  font-family: var(--ib-font-mono); font-size: var(--ib-fs-10);
  letter-spacing: var(--ib-track-mono); text-transform: uppercase;
  color: var(--ib-text-2);
  background: var(--ib-bg-sunken);
  border: var(--ib-border);
  border-radius: var(--ib-r);
  white-space: nowrap;
}
.ib-tag-aligned   { color: var(--ib-signal-text); background: var(--ib-signal-soft); border-color: var(--ib-signal); }
.ib-tag-exception { color: var(--ib-exception-text); background: var(--ib-exception-soft); border-color: var(--ib-exception); }
.ib-tag-context   { color: var(--ib-pending-text); background: var(--ib-pending-soft); border-color: var(--ib-line); }
.ib-tag-history   { color: var(--ib-text-3); background: transparent; border-style: dashed; }

.ib-dot { width: 6px; height: 6px; border-radius: var(--ib-r-pill); background: var(--ib-text-3); flex: none; }
.ib-dot-source    { background: var(--ib-ink-core); }
.ib-dot-aligned   { background: var(--ib-signal); }
.ib-dot-exception { background: var(--ib-exception); }
.ib-dot-history   { background: var(--ib-ink-faint); }

.ib-stat { display: flex; flex-direction: column; gap: 2px; }
.ib-stat-label { font-family: var(--ib-font-mono); font-size: var(--ib-fs-9); letter-spacing: var(--ib-track-eyebrow); text-transform: uppercase; color: var(--ib-text-3); }
.ib-stat-value { font-family: var(--ib-font-mono); font-size: var(--ib-fs-22); font-weight: 500; font-variant-numeric: tabular-nums; color: var(--ib-text-strong); }

/* --- 8. Tables — the shared reading surface ------------------------------ */

.ib-table { width: 100%; border-collapse: collapse; font-size: var(--ib-fs-12); }
.ib-table th, .ib-table td { padding: 6px 10px; text-align: left; border-bottom: var(--ib-border); vertical-align: middle; }
.ib-table thead th {
  position: sticky; top: 0; z-index: var(--ib-z-sticky);
  font-family: var(--ib-font-mono); font-size: var(--ib-fs-10); font-weight: 500;
  letter-spacing: var(--ib-track-mono); text-transform: uppercase;
  color: var(--ib-text-2);
  background: var(--ib-bg-sunken);
  border-bottom: 1px solid var(--ib-line-strong);
}
.ib-table tbody tr:hover td { background: var(--ib-bg-hover); }
.ib-table td.ib-num, .ib-table th.ib-num { text-align: right; font-family: var(--ib-font-mono); font-variant-numeric: tabular-nums; }
.ib-table tr.ib-row-group td {
  background: var(--ib-ink-core); color: var(--ib-paper);
  font-family: var(--ib-font-mono); font-size: var(--ib-fs-10);
  letter-spacing: var(--ib-track-mono); text-transform: uppercase;
}
.ib-table tr.ib-row-section td {
  background: var(--ib-bg-active); color: var(--ib-text-strong);
  font-family: var(--ib-font-mono); font-size: var(--ib-fs-10);
  letter-spacing: var(--ib-track-mono); text-transform: uppercase;
}
.ib-table tr.is-selected td { background: var(--ib-signal-soft); }
.ib-table-scroll { overflow: auto; border: var(--ib-border); border-radius: var(--ib-r); background: var(--ib-bg-raised); }

/* --- 9. Overlay, toast, tabs -------------------------------------------- */

.ib-overlay {
  position: fixed; inset: 0; z-index: var(--ib-z-overlay);
  display: flex; align-items: center; justify-content: center;
  padding: var(--ib-s5);
  background: rgba(11, 11, 12, 0.55);
}
.ib-modal {
  width: min(640px, 100%); max-height: 85vh; overflow: auto;
  background: var(--ib-bg-raised);
  border: var(--ib-border);
  border-radius: var(--ib-r-lg);
  box-shadow: var(--ib-shadow-3);
}
.ib-modal-head { display: flex; align-items: center; justify-content: space-between; gap: var(--ib-s3); padding: var(--ib-s4); border-bottom: var(--ib-border); }
.ib-modal-body { padding: var(--ib-s4); }
.ib-modal-foot { display: flex; justify-content: flex-end; gap: var(--ib-s2); padding: var(--ib-s3) var(--ib-s4); border-top: var(--ib-border); background: var(--ib-bg-sunken); }

.ib-toast {
  position: fixed; bottom: var(--ib-s5); left: 50%; transform: translateX(-50%);
  z-index: var(--ib-z-toast);
  padding: var(--ib-s2) var(--ib-s4);
  font-size: var(--ib-fs-12);
  color: var(--ib-text-inverse); background: var(--ib-bg-inverse);
  border-radius: var(--ib-r);
  box-shadow: var(--ib-shadow-2);
}
.ib-toast-aligned   { background: var(--ib-signal); color: var(--ib-signal-on); }
.ib-toast-exception { background: var(--ib-exception); color: var(--ib-exception-on); }

.ib-tabs { display: flex; gap: 0; border-bottom: var(--ib-border); }
.ib-tab {
  padding: var(--ib-s2) var(--ib-s3);
  font-size: var(--ib-fs-12); color: var(--ib-text-2);
  background: none; border: 0; border-bottom: 2px solid transparent;
  cursor: pointer;
}
.ib-tab:hover { color: var(--ib-text); }
.ib-tab[aria-selected="true"], .ib-tab.is-active { color: var(--ib-text-strong); border-bottom-color: var(--ib-line-datum); }

.ib-kbd {
  display: inline-block; padding: 1px 6px;
  font-family: var(--ib-font-mono); font-size: var(--ib-fs-10);
  color: var(--ib-text-2); background: var(--ib-bg-sunken);
  border: var(--ib-border); border-radius: var(--ib-r);
}

.ib-pre {
  margin: 0; padding: var(--ib-s4); overflow: auto;
  font: var(--ib-fs-12)/var(--ib-lh-loose) var(--ib-font-mono);
  color: var(--ib-text-inverse); background: var(--ib-bg-inverse);
  border: 1px solid var(--ib-line-strong); border-radius: var(--ib-r);
}

/* --- 10. Motion and reduced motion -------------------------------------- */

@keyframes ib-diffuse { from { opacity: 0; transform: translateY(2px) scale(0.995); } to { opacity: 1; transform: none; } }
@keyframes ib-snap    { from { opacity: 0; transform: scaleX(0.94); } to { opacity: 1; transform: none; } }

.ib-enter { animation: ib-diffuse var(--ib-dur-3) var(--ib-ease) both; }
.ib-align { animation: ib-snap var(--ib-dur-2) var(--ib-ease-snap) both; transform-origin: left center; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 1ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 1ms !important;
    scroll-behavior: auto !important;
  }
}

/* --- 11. Print ----------------------------------------------------------- */

@media print {
  :root { --ib-bg: #ffffff; --ib-bg-raised: #ffffff; --ib-bg-sunken: #ffffff; }
  .ib-no-print { display: none !important; }
  .ib-table thead th { position: static; }
}

}

/* --- 12. Icons :: generated by build-icons.py from icons/icons.json — do not edit --- */

/* Icons are masks over currentColor: an icon is always exactly the colour of
   the text beside it, in either theme, with no second asset to keep in step.
   Mark a decorative icon aria-hidden; an icon-only control needs its own label.

     <button class="ib-btn"><i class="ib-i ib-i-save" aria-hidden="true"></i>Save</button>
     <button class="ib-btn ib-btn-icon" aria-label="Remove row">
       <i class="ib-i ib-i-close" aria-hidden="true"></i>
     </button> */

.ib-i {
  display: inline-block;
  width: 14px;
  height: 14px;
  flex: none;
  vertical-align: -0.18em;
  background-color: currentColor;
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-position: center;
          mask-position: center;
  -webkit-mask-size: contain;
          mask-size: contain;
}
.ib-i-sm { width: 11px; height: 11px; vertical-align: -0.14em; }
.ib-i-lg { width: 18px; height: 18px; vertical-align: -0.2em; }

.ib-i-add { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M8 3v10M3 8h10'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M8 3v10M3 8h10'/%3E%3C/svg%3E"); }
.ib-i-close { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M4 4l8 8M12 4l-8 8'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M4 4l8 8M12 4l-8 8'/%3E%3C/svg%3E"); }
.ib-i-minus { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M3 8h10'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M3 8h10'/%3E%3C/svg%3E"); }
.ib-i-check { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M3 8.5l3.5 3.5L13 4.5'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M3 8.5l3.5 3.5L13 4.5'/%3E%3C/svg%3E"); }
.ib-i-edit { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M3 13v-2.5L10.5 3 13 5.5 5.5 13H3z'/%3E%3Cpath d='M9 4.5L11.5 7'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M3 13v-2.5L10.5 3 13 5.5 5.5 13H3z'/%3E%3Cpath d='M9 4.5L11.5 7'/%3E%3C/svg%3E"); }
.ib-i-delete { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M3 4.5h10M6.5 4.5V2.5h3v2M4.5 4.5l.6 9h5.8l.6-9'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M3 4.5h10M6.5 4.5V2.5h3v2M4.5 4.5l.6 9h5.8l.6-9'/%3E%3C/svg%3E"); }
.ib-i-save { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M3 9.5V13h10V9.5'/%3E%3Cpath d='M8 2v7.5M5 6.5l3 3 3-3'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M3 9.5V13h10V9.5'/%3E%3Cpath d='M8 2v7.5M5 6.5l3 3 3-3'/%3E%3C/svg%3E"); }
.ib-i-load { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M3 9.5V13h10V9.5'/%3E%3Cpath d='M8 9.5V2M5 5l3-3 3 3'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M3 9.5V13h10V9.5'/%3E%3Cpath d='M8 9.5V2M5 5l3-3 3 3'/%3E%3C/svg%3E"); }
.ib-i-export { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M9 3H3v10h6'/%3E%3Cpath d='M7.5 8H14M11.5 5.5L14 8l-2.5 2.5'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M9 3H3v10h6'/%3E%3Cpath d='M7.5 8H14M11.5 5.5L14 8l-2.5 2.5'/%3E%3C/svg%3E"); }
.ib-i-import { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M9 3H3v10h6'/%3E%3Cpath d='M14 8H7.5M10 5.5L7.5 8l2.5 2.5'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M9 3H3v10h6'/%3E%3Cpath d='M14 8H7.5M10 5.5L7.5 8l2.5 2.5'/%3E%3C/svg%3E"); }
.ib-i-print { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M4.5 6.5V2.5h7v4'/%3E%3Cpath d='M4.5 11.5H2.5v-5h11v5h-2'/%3E%3Cpath d='M4.5 9.5h7v4h-7z'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M4.5 6.5V2.5h7v4'/%3E%3Cpath d='M4.5 11.5H2.5v-5h11v5h-2'/%3E%3Cpath d='M4.5 9.5h7v4h-7z'/%3E%3C/svg%3E"); }
.ib-i-reset { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M13 8A5 5 0 1 1 11.4 4.3'/%3E%3Cpath d='M13.5 1.8v3.2h-3.2'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M13 8A5 5 0 1 1 11.4 4.3'/%3E%3Cpath d='M13.5 1.8v3.2h-3.2'/%3E%3C/svg%3E"); }
.ib-i-search { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M7 2.8a4.2 4.2 0 1 0 0 8.4 4.2 4.2 0 0 0 0-8.4z'/%3E%3Cpath d='M10 10.2l3.2 3.2'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M7 2.8a4.2 4.2 0 1 0 0 8.4 4.2 4.2 0 0 0 0-8.4z'/%3E%3Cpath d='M10 10.2l3.2 3.2'/%3E%3C/svg%3E"); }
.ib-i-filter { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M2 4h12M4.5 8h7M6.5 12h3'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M2 4h12M4.5 8h7M6.5 12h3'/%3E%3C/svg%3E"); }
.ib-i-drag { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cg fill='%23000' stroke='none'%3E%3Crect x='5.2' y='3' width='1.6' height='1.6'/%3E%3Crect x='9.2' y='3' width='1.6' height='1.6'/%3E%3Crect x='5.2' y='7.2' width='1.6' height='1.6'/%3E%3Crect x='9.2' y='7.2' width='1.6' height='1.6'/%3E%3Crect x='5.2' y='11.4' width='1.6' height='1.6'/%3E%3Crect x='9.2' y='11.4' width='1.6' height='1.6'/%3E%3C/g%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cg fill='%23000' stroke='none'%3E%3Crect x='5.2' y='3' width='1.6' height='1.6'/%3E%3Crect x='9.2' y='3' width='1.6' height='1.6'/%3E%3Crect x='5.2' y='7.2' width='1.6' height='1.6'/%3E%3Crect x='9.2' y='7.2' width='1.6' height='1.6'/%3E%3Crect x='5.2' y='11.4' width='1.6' height='1.6'/%3E%3Crect x='9.2' y='11.4' width='1.6' height='1.6'/%3E%3C/g%3E%3C/svg%3E"); }
.ib-i-theme { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M8 2.2a5.8 5.8 0 1 0 0 11.6 5.8 5.8 0 0 0 0-11.6z'/%3E%3Cpath d='M8 2.2v11.6a5.8 5.8 0 0 0 0-11.6z' fill='%23000' stroke='none'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M8 2.2a5.8 5.8 0 1 0 0 11.6 5.8 5.8 0 0 0 0-11.6z'/%3E%3Cpath d='M8 2.2v11.6a5.8 5.8 0 0 0 0-11.6z' fill='%23000' stroke='none'/%3E%3C/svg%3E"); }
.ib-i-person { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M8 2.8a2.6 2.6 0 1 0 0 5.2 2.6 2.6 0 0 0 0-5.2z'/%3E%3Cpath d='M2.8 14c0-2.9 2.3-4.7 5.2-4.7s5.2 1.8 5.2 4.7'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M8 2.8a2.6 2.6 0 1 0 0 5.2 2.6 2.6 0 0 0 0-5.2z'/%3E%3Cpath d='M2.8 14c0-2.9 2.3-4.7 5.2-4.7s5.2 1.8 5.2 4.7'/%3E%3C/svg%3E"); }
.ib-i-chevron-down { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M3.5 6L8 10.5 12.5 6'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M3.5 6L8 10.5 12.5 6'/%3E%3C/svg%3E"); }
.ib-i-chevron-right { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M6 3.5L10.5 8 6 12.5'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M6 3.5L10.5 8 6 12.5'/%3E%3C/svg%3E"); }
.ib-i-alert { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M8 2.2L14.2 13.4H1.8z'/%3E%3Cpath d='M8 6.2v3.4'/%3E%3Crect x='7.4' y='10.9' width='1.2' height='1.2' fill='%23000' stroke='none'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M8 2.2L14.2 13.4H1.8z'/%3E%3Cpath d='M8 6.2v3.4'/%3E%3Crect x='7.4' y='10.9' width='1.2' height='1.2' fill='%23000' stroke='none'/%3E%3C/svg%3E"); }
.ib-i-copy { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M5.5 5.5h8v8h-8z'/%3E%3Cpath d='M10.5 5.5V2.5h-8v8h3'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M5.5 5.5h8v8h-8z'/%3E%3Cpath d='M10.5 5.5V2.5h-8v8h3'/%3E%3C/svg%3E"); }
.ib-i-history { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M8 2.4a5.6 5.6 0 1 0 0 11.2 5.6 5.6 0 0 0 0-11.2z'/%3E%3Cpath d='M8 5v3.3l2.4 1.4'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M8 2.4a5.6 5.6 0 1 0 0 11.2 5.6 5.6 0 0 0 0-11.2z'/%3E%3Cpath d='M8 5v3.3l2.4 1.4'/%3E%3C/svg%3E"); }
.ib-i-settings { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M2 5h5.2M10.2 5H14M2 11h2.2M7.2 11H14'/%3E%3Cpath d='M8.7 5a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0zM5.7 11a1.5 1.5 0 1 0 3 0 1.5 1.5 0 0 0-3 0z'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M2 5h5.2M10.2 5H14M2 11h2.2M7.2 11H14'/%3E%3Cpath d='M8.7 5a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0zM5.7 11a1.5 1.5 0 1 0 3 0 1.5 1.5 0 0 0-3 0z'/%3E%3C/svg%3E"); }
.ib-i-builder { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M2.5 2.5h4.6v4.6H2.5zM8.9 2.5h4.6v4.6H8.9zM2.5 8.9h4.6v4.6H2.5zM8.9 8.9h4.6v4.6H8.9z'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M2.5 2.5h4.6v4.6H2.5zM8.9 2.5h4.6v4.6H8.9zM2.5 8.9h4.6v4.6H2.5zM8.9 8.9h4.6v4.6H8.9z'/%3E%3C/svg%3E"); }
.ib-i-presets { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M8 2.3L14 5.6 8 8.9 2 5.6z'/%3E%3Cpath d='M2 9.2l6 3.3 6-3.3'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M8 2.3L14 5.6 8 8.9 2 5.6z'/%3E%3Cpath d='M2 9.2l6 3.3 6-3.3'/%3E%3C/svg%3E"); }
.ib-i-section { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M2.5 2.8v10.4'/%3E%3Cpath d='M4.2 3.4h4.6M4.2 8h8.3M4.2 12.6h4.6'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M2.5 2.8v10.4'/%3E%3Cpath d='M4.2 3.4h4.6M4.2 8h8.3M4.2 12.6h4.6'/%3E%3C/svg%3E"); }
.ib-i-row { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M2.5 5h11v6h-11z'/%3E%3Cpath d='M2.5 8h11'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M2.5 5h11v6h-11z'/%3E%3Cpath d='M2.5 8h11'/%3E%3C/svg%3E"); }
.ib-i-external { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M7.5 3.5H3v9h9V8'/%3E%3Cpath d='M9.5 2.5H13.5V6.5M13.5 2.5L8 8'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M7.5 3.5H3v9h9V8'/%3E%3Cpath d='M9.5 2.5H13.5V6.5M13.5 2.5L8 8'/%3E%3C/svg%3E"); }
.ib-i-datum { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M8 5.4a2.6 2.6 0 1 0 0 5.2 2.6 2.6 0 0 0 0-5.2z' fill='%23000' stroke='none'/%3E%3Cpath d='M8 1v2.2M8 12.8V15M1 8h2.2M12.8 8H15'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M8 5.4a2.6 2.6 0 1 0 0 5.2 2.6 2.6 0 0 0 0-5.2z' fill='%23000' stroke='none'/%3E%3Cpath d='M8 1v2.2M8 12.8V15M1 8h2.2M12.8 8H15'/%3E%3C/svg%3E"); }
.ib-i-relation { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M3.6 12.4L12.4 3.6'/%3E%3Cpath d='M3.6 10.6a1.8 1.8 0 1 0 0 3.6 1.8 1.8 0 0 0 0-3.6zM12.4 1.8a1.8 1.8 0 1 0 0 3.6 1.8 1.8 0 0 0 0-3.6z'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M3.6 12.4L12.4 3.6'/%3E%3Cpath d='M3.6 10.6a1.8 1.8 0 1 0 0 3.6 1.8 1.8 0 0 0 0-3.6zM12.4 1.8a1.8 1.8 0 1 0 0 3.6 1.8 1.8 0 0 0 0-3.6z'/%3E%3C/svg%3E"); }
.ib-i-surface { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M2.5 3.5h11v9h-11z'/%3E%3Cpath d='M2.5 7h11M6.8 7v5.5'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M2.5 3.5h11v9h-11z'/%3E%3Cpath d='M2.5 7h11M6.8 7v5.5'/%3E%3C/svg%3E"); }
.ib-i-collapse { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M3.5 6L8 10.5 12.5 6'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M3.5 6L8 10.5 12.5 6'/%3E%3C/svg%3E"); }
.ib-i-expand { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M6 3.5L10.5 8 6 12.5'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='square' stroke-linejoin='miter'%3E%3Cpath d='M6 3.5L10.5 8 6 12.5'/%3E%3C/svg%3E"); }

/* --- end generated icons --- */
